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