#hardware
Привет Всем ! Изучаю "Си", если я пишу программу например в Windows\Linux 32bit то она уже не будет работать в такой среде только 64-х битной и на оборот ? Просто после Java иногда сложно вникнуть ! Ведь int в Си на 32-х битных системах имеет 4 байта а в 64-х битных 8 байт тоесть он платфоромозависим ! Или всё же будет работать ? Спасибо ...
Ответы
Ответ 1
Вот для этого используют #defineы, typedefы и оператор sizeof в C/C++ самым лютым образом =) Меняя подстановки на необходимый эквивалент (первые два варианта выше), можно поддерживать переносимость. Например, отрывок из OpenGL: typedef unsigned int GLenum; typedef unsigned char GLboolean; typedef unsigned int GLbitfield; typedef signed char GLbyte; typedef short GLshort; typedef int GLint; typedef int GLsizei; typedef unsigned char GLubyte; typedef unsigned short GLushort; typedef unsigned int GLuint; typedef float GLfloat; typedef float GLclampf; typedef double GLdouble; typedef double GLclampd; typedef void GLvoid; На разных платформах разработчик библиотеки просто меняет typedef на необходимый (совместимый) тип, а клиент обязуется не использовать типы напрямую. Клиентский код получается переносимым между разными версиями библиотеки на уровне исходных кодов. На бинарном уровне, конечно, такой совместимости не будет (если 64бит код на 32бит системе), потребуется перекомпиляция с "местной" версией библиотеки.Ответ 2
Если есть моменты, когда важны длины разных типов, то могут возникнуть проблемы. Но они могут быть решены использованием типов с фиксированной длиной из заголовка sdint.h вроде int64_t, int32_t и т.д. В остальном в случае использования стандартных функций проблем возникнуть не должно.
Комментариев нет:
Отправить комментарий