Цитата(zltigo @ Jul 4 2007, 14:47)

Ну прагма это достаточно нормально, а вот 8 строчек вместо одной c #include, причем многократно повторенные во многих файлах, да и еще с учетом того, что все эти места придется менять при добавлении портов, мне точно не нравятся

Стоп. Но
Код
#if defined( __GNUC__ )
#define PACKED(_struct_) \
_struct_ __attribute__((__packed__, __aligned__(1)));
#elif defined( __IAR_SYSTEMS_ICC__ )
#define PACKED(_struct_) \
_Pragma("pack (push,1)") _struct_; _Pragma("pack (pop)")
#endif
точно также вносится в один #include-файл в котором и так живет куча полезных вещей. Только этот файл и правится при добавлении портов. Этот файл имеет право жить в /SYS (хотя в этом случае начинаются проблемы с системой контроля версий, но это не принципиально - пусть будет папка /sys в репозитории).
Цитата(zltigo @ Jul 4 2007, 14:47)

В данном случае не аргумент, поскольку количество мест не меняется. Будет закрыватся секция с паковкой #pragma или #include не принципиально. Причем в общем случае #pragma будет не единственной строкой

Нет, как раз. Тут открывание и закрывание секции в одном макросе. И вместо PACK_STRUCT после объявления в вашем варианте надо писать PACKED в начале и после структуры - ')'. И не нужно думать, что для всех компиляторов кроме GCC играет рояль пара #include (даже если мы забудем PACK_STRUCT), а для GCC они и еще PACK_STRUCT. И если мы забудем закрывающую скобку в моем варианте, компилятор грязно выругается на дальнейший текст, а это уже большой плюс (тут я полностью согласен с
dxp).
Цитата(dxp @ Jul 4 2007, 14:26)

Современных компиляторов, которые бы ее не поддерживали, еще поискать.
Как говорится в известной поговорке "свинья всегда грязь найдет". Это я про себя. В смысле нашел - не знаю как _Pragma(), а #pragma pack GCC игнорирует. И толку теперь с этой _Pragma()?