Chinaunix首页 | 论坛 | 博客
  • 博客访问: 347063
  • 博文数量: 69
  • 博客积分: 3077
  • 博客等级: 中校
  • 技术积分: 602
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-11 09:40
个人简介

或以为孤权重,妄相忖度

文章分类

全部博文(69)

文章存档

2012年(1)

2011年(10)

2010年(39)

2009年(19)

我的朋友

分类: C/C++

2009-06-15 13:48:45

#include <stdio.h>
 
#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;
}
阅读(1225) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~