我有一个像这样的C宏
#define ADD_API(NAME) func_##NAME ##NAME;
typedef struct
{
ADD_API("Whatever")
} xxx;
我希望是
typedef struct
{
func_Whatever Whatever;
}
但是变成
typedef struct
{
func_WhateverWhatever;
}
空间已删除,我现在应该使用什么?
答案 0 :(得分:4)
C预处理程序使用空格作为区分预处理程序标记的方式。因此,就像在任何C代码中一样,宏中的空格数量无关紧要。使用预处理器令牌连接器##
时,尽管两个令牌之间有多少空格,但它们会合并在一起。这不是您想要做的。
假设您实际上将宏用作ADD_API(Whatever);
(带有分号)而不是字符串文字,那么正确的宏应该是
#define ADD_API(NAME) func_##NAME NAME
最后没有分号。
这会将ADD_API(Whatever);
扩展为func_Whatever Whatever;