А вот макрос, который у меня есть в наборе инструментов (используется техника caf ), чтобы получить выравнивание типа:
#define ALIGNMENT_OF(t) offsetof( struct { char x; t dummy; }, dummy)
Так что теперь вы можете использовать такие выражения как:
typedef struct
{
char c;
int i;
} test;
size_t x = ALIGNMENT_OF( test); // will likely set x = 4
Обратите внимание, что определенный компилятор может поддерживать нестандартную встроенную функцию, которую вы, возможно, предпочтете использовать (например, MSVC в какой-то момент начал поддерживать встроенную переменную __alignof()
). Мой заголовок определяет ALIGNMENT_OF()
, используя эту встроенную функцию, если он обнаруживает компилятор, который его поддерживает (хотя я, честно говоря, не знаю, какое преимущество обеспечивает встроенная функция).