データ構造のアライメント用のマクロを作成するために、 を#pragma pack
介してディレクティブを実装しようとしています。これはすべて、本「C:一言で言えば」_Pragma оperator
の本に記載されています
#define STR(s) #s
#define ALIGNMENT(n) _Pragma( STR (pack(n)) )
#define ALIGNLEVEL(l) ALIGNMENT(l)
int main()
{
....
if(1)
{
ALIGNLEVEL(1)
printf("%s\n", STR(Byte-aligned: no padding));>
}
else
{
ALIGNLEVEL(4)
printf("%s\n", STR(four-byte: boundaries));
}
typedef struct s
{
size_t l_num;
short h_num;
char ch;
} s;
私が期待する結果は、構造体のサイズが7 バイト(バイト整列) またはx64 ビット プラットフォームで11 バイトになることです。上記のコードはオプション付きのGCC 4.7.xでコンパイルされ、戻り値は8 バイト(32 ビット OS) です。-Werror
このマクロの何が問題になる可能性がありますか?
なぜこうなった?