Привет Всем ! Изучаю "Си", если я пишу программу например в Windows\Linux 32bit то она уже не будет работать в такой среде только 64-х битной и на оборот ? Просто после Java иногда сложно вникнуть ! Ведь int в Си на 32-х битных системах имеет 4 байта а в 64-х битных 8 байт тоесть он платфоромозависим ! Или всё же будет работать ? Спасибо ...
Ответ
Вот для этого используют #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бит системе), потребуется перекомпиляция с "местной" версией библиотеки.
Комментариев нет:
Отправить комментарий