或以为孤权重,妄相忖度
分类: C/C++
2009-06-15 13:48:45
#define PACKVALUE 4
#pragma pack(push)
#pragma pack(PACKVALUE)
typedef struct

{
char sa;
double sb;
int sc;
} innerS;
typedef struct

{
int a;
char b;
short c;
innerS d[2];
} testS;
#pragma pack(pop)
typedef unsigned long dword;
#define FSIZE(type, field) sizeof(((type*)0)->field)
#define FPOS(type, field) ((dword) & ((type*)0)->field)
//有人可能对宏定义里面的那个0不理解,你把它理解成NULL就对了
int main(void)

{
printf("#pragma pack(%d):\nsizeof(char)=%d; sizeof(short)=%d; sizeof(int)=%d; sizeof(double)=%d\n\n",
PACKVALUE, sizeof(char), sizeof(short), sizeof(int), sizeof(double));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, a), FPOS(testS, a));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, b), FPOS(testS, b));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, c), FPOS(testS, c));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d), FPOS(testS, d));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[0]), FPOS(testS, d[0]));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[0].sa), FPOS(testS, d[0].sa));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[0].sb), FPOS(testS, d[0].sb));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[0].sc), FPOS(testS, d[0].sc));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[1]), FPOS(testS, d[1]));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[1].sa), FPOS(testS, d[1].sa));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[1].sb), FPOS(testS, d[1].sb));
printf("FSIZE = %d, FPOS = %d\n", FSIZE(testS, d[1].sc), FPOS(testS, d[1].sc));
return 0;
}