我正在尝试#pragma pack
通过 , 来实现指令_Pragma оperator
,以创建用于数据结构对齐的宏。所有这一切都在“C: In a Nutshell”一书中进行了描述
#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编译的,带有-Werror
选项,返回结果是8 个字节(32 位操作系统)。
这个宏有什么问题?
为什么会这样?