Проверка размера целочисленного типа в препроцессоре - PullRequest
14 голосов
/ 06 апреля 2010

Как я могу проверить размер unsigned в препроцессоре под g ++? sizeof не может быть и речи, поскольку он не определен во время предварительной обработки.

Ответы [ 2 ]

26 голосов
/ 06 апреля 2010

Возможно, это не самый элегантный метод, но одна вещь, которую вы можете использовать, это UINT_MAX, определенный в "limit.h". То есть ...

если UINT_MAX == 65535, то вы знаете, что sizeof (без знака) = 2

если UINT_MAX == 4294967295, то вы знаете, что sizeof (без знака) = 4.

и т. Д.

Как я уже сказал, не элегантно, но должно обеспечивать некоторый уровень удобства использования.

Надеюсь, это поможет.

9 голосов
/ 06 апреля 2010

Основываясь на ответе Спарки, вот способ, который выглядел бы немного лучше (исключая явные числа)

#include <limits.h>
#include <stdint.h>

//Check if size if 4bytes
#if UINT_MAX == UINT32_MAX

....

#endif

<limits.h> определяет INT_MAX и <stdint.h> определяет UINT32_MAX.Как правило, <stdint.h> дает целочисленные типы с указанной шириной.

...