对POD
struct Data
{
int a;
int b[32];
char c[128];
};
C/C++不能够支持如下的语法:sizeof(Data::a); sizeof(Data::b); sizeof(Data::c[0]), sizeof必须要有存在的对象,才可以进行操作,这个不好
仿照offsetof宏,定义一个SIZEOF宏:#define SIZEOF(s,m) sizeof(((s *)0)->m)
在VC6下可以工作,其他环境不知
#define SIZEOF(s,m) sizeof(((s *)0)->m)
struct Data
{
int a;
int b[32];
char c[128];
};
int main(int argc, char* argv[])
{
int z = 0;
z = SIZEOF(Data, a); //---- 4
z = SIZEOF(Data, b);//---- 128
z = SIZEOF(Data, c);//---- 128
z = SIZEOF(Data, b[0]);//---- 4
z = SIZEOF(Data, c[0]);//---- 1
return 1;
}