用另一个宏为宏生成一个名称(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 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();
.