Уважаемые, обратите внимание на ковычки до и после слова "врет". Ясно, что "sizeof возвращает размер структуры с учетом выравнивания". Но Вы посмотрите, что требуется уважаемому
Samodelkin! Ему требуется определить фактически тип струткру передаваемых данных по ее размеру. Могут существовать две и более структур, значение которых sizeof вернет одинаковыми (хотя фактически типы и переменные имеют РАЗНЫЕ размеры).
Samodelkin в качестве поля структуры приводит массив. Вот пример того, что может случится.
Код
struct {
char array[3];
} struct_v1; // Размер типа для 32-х разрадной машины: 4
struct {
char array[4];
} struct_v2; // Размер типа для 32-х разрадной машины: 4
И как теперь определить обработчик для типа данных? Совершенно очевиден смысл sizeof, но человек, задающий вопрос помоему объяснил для чего ему это надо - определить функцию-обработчик по размеру струткруры. Вот и получается, что сделать он это в предложенном варианте
zltigo:Цитата
"Вот именно из-за возможности выравнивания вариант с жестким указанием размера в первом поле и не годится."
Годится, просто он должен инициализироваться через sizeof().
не сможет (sizeof в обоих случаях вернет 4, которое
Samodelkin запишет в специальное поле структуры... а что толку? Различить потом struct_v1 и struct_v2 по этому полю уже не сможет).