Проверка размера целочисленного типа в препроцессоре
Возможный дубликат:
Почему я могу использовать sizeof в условии препроцессора?
Как проверить размер unsigned
в препроцессоре под g++? sizeof
не может быть и речи, поскольку он не определен, когда во время предварительной обработки.
Ответы
Ответ 1
Это может быть не самый элегантный метод, но одна вещь, которую вы можете использовать, - UINT_MAX, определенный в "limits.h". То есть,...
если UINT_MAX == 65535, то вы знаете, что sizeof (unsigned) = 2
если UINT_MAX == 4294967295, то вы знаете, что sizeof (unsigned) = 4.
и т.д.
Как я уже сказал, не изящный, но должен обеспечить некоторый уровень удобства использования.
Надеюсь, что это поможет.
Ответ 2
Основываясь на ответе Sparky, вот способ, который будет выглядеть немного лучше (путем исключения явных чисел)
#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>
дает целые типы с указанной шириной.