用另一个宏为宏生成一个名称(c 预处理器)

generate a name for macro with another macro (c preprocessor)

我可以使用取自 C pre-processor defining for generated function names 的宏为函数生成名称。

#define POSTFIX _ABC //_ABC should be mentioned only there
#define PROTOTYPENAME(symbol) symbol ## POSTFIX
#define PROTOTYPENAMED(sym) PROTOTYPENAME(sym)

int PROTOTYPENAMED(Function)(int a, int b, int c);

以上结果为

int Function_ABC(int a, int b, int c);

如果我想为 #define ANOTHERFUNCTION_ABC WhatsThat() 生成等效项,我可能想写

#define PROTOTYPENAMED(ANOTHERFUNCTION) WhatsThat()

但这将重新定义一个 PROTOTYPENAMED 宏。有没有办法不用到处写 _ABC 就可以正确地做到这一点?

PS。我正在使用 Visual Studio 2013,代码应该可以在 C 和 C++ 中运行。

编辑: alk:这个问题包含更多有用的答案如何使用其他工具来做到这一点。您不应将此问题标记为重复。

编辑 2: 我在考虑不需要外部工具的替代方案。也许不需要将其声明为宏?如果我们假设 WhatsThat() 返回 int,则不禁止写 int PROTOTYPENAMED(ANOTHERFUNCTION) = WhatsThat();.

标准 C/C++ 预处理器不可用。但是,您可能会使用一些 C++ 或 C 源代码生成器来为您的编译器提供数据,例如GPP or the GNU m4 预处理器,或一些脚本 - 例如在您的 Python、awkguile、...-(或程序)中。

例如yacc or bison and ANTLR generate C++ code. And MELT编译成C++代码

当然,您需要相应地配置您的构建器,例如添加更多 GNU make 规则。