在多个C宏粘贴程序之间添加空间

时间:2019-11-22 12:09:46

标签: c

我有一个像这样的C宏

#define ADD_API(NAME) func_##NAME ##NAME;
typedef struct
{
    ADD_API("Whatever")
} xxx;

我希望是

typedef struct
{
    func_Whatever Whatever;
}

但是变成

typedef struct
{
     func_WhateverWhatever;
}

空间已删除,我现在应该使用什么?

1 个答案:

答案 0 :(得分:4)

C预处理程序使用空格作为区分预处理程序标记的方式。因此,就像在任何C代码中一样,宏中的空格数量无关紧要。使用预处理器令牌连接器##时,尽管两个令牌之间有多少空格,但它们会合并在一起。这不是您想要做的。

假设您实际上将宏用作ADD_API(Whatever);(带有分号)而不是字符串文字,那么正确的宏应该是

#define ADD_API(NAME) func_##NAME NAME

最后没有分号。

这会将ADD_API(Whatever);扩展为func_Whatever Whatever;