如何从C宏返回值?

时间:2014-02-24 06:55:03

标签: c gcc macros

我试图实现sizeof()运算符,并希望宏返回类似C lang提供的结果。

我使用gcc construct'()'实现它,如:

#define SIZEOF(type)\   
({\ 
 int result;\
 type *p = 0;\
 result = (char*)(p+1)-(char*)p;\
 result;\
})

并像这样使用它:

x = SIZEOF(double);

有没有办法不使用gcc构造并从中返回值?

我能想到的最好的方法是将另一个参数传递给宏并将结果存储在如下:

#define SIZEOF(type,result)\
 do{\
   type *p = 0;\
   result = (char*)(p+1)-(char*)p;\
 }while(0)

我知道我可以用内联函数替换这个宏,它可以完成工作但是在宏上下文中寻找一些东西。有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:4)

#define SIZEOF(type) (long int) (((type*)0) + 1)