Проверка размеров шрифта в Си с помощью макросов - PullRequest
1 голос
/ 09 января 2011

Я пишу программу, которая должна иметь неподписанные типы с определенными размерами. Мне нужны uint8, uint16, uint32 и uint64, и мне нужно, чтобы они были определены в types.h таким образом, чтобы они всегда были определены правильно независимо от платформы.

Мой вопрос: как я могу проверить размеры разных типов на каждой платформе, используя макросы препроцессора, чтобы я мог правильно определять свои пользовательские типы в заголовке types.h?

Ответы [ 2 ]

4 голосов
/ 09 января 2011

C имеет стандартные typedefs для них. Не определяй свой. Они называются intN_t и uintN_t, где N равно 8, 16, 32, 64 и т. Д. Включите <stdint.h>, чтобы получить их.

Если вы используете древний компилятор, в котором отсутствует stdint.h, вы можете просто предоставить свой собственный соответствующий typedef для любой сломанной платформы, с которой вы работаете. Держу пари, что с любой не встроенной целью вы столкнетесь без stdint.h:

  • CHAR_BIT равно 8.
  • sizeof(char) равно 1. <- Я бы поставил на это еще больше ...; -) </li>
  • sizeof(short) равно 2.
  • sizeof(int) равно 4.
  • sizeof(long long), если тип существует, равен 8.

Так что просто используйте их как заполнители для сломанных систем.

0 голосов
/ 09 января 2011

Вы даже не можете гарантировать, что все эти типы будут существовать на вашей платформе (скажем, даже не может быть 64-разрядным целым числом), поэтому вы не можете возможно, написать независимый от платформы код, чтобы обнаружить их во время компиляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...