我一直试图使用宏连接(35;##)和offsetof宏来生成标识符,但没有成功:
CMain.c:55: warning: implicit declaration of function 'Color__builtin_offsetof'
struct Color_methods_TABLE
{
struct
{
int8 getColor;
}
methods;
};
#define METHOD_NAME1(clazz, method) clazz##method
#define METHOD_NAME(clazz, method) METHOD_NAME1(clazz, method)
#define tdef_name(clazz, method) METHOD_NAME(clazz, method)
int main()
{
tdef_name(Color, offsetof(struct Color_methods_TABLE, methods.getColor));
return 0;
}
输出应为:
Color0
其中0是offsetof宏的结果。能做到吗?谢谢你抽出时间。
最佳答案
你不能随心所欲。offsetof
是(类似于sizeof
)在预处理之后,在编译过程中计算的。
看看你的源代码的预处理形式。使用g cc,您可以使用gcc -C -E CMain.c > CMain.i
获得它,然后使用编辑器(或寻呼机)查看内部CMain.i
例如less CMain.i