我可以使用宏生成函数的名称,该宏取自生成函数名称的 C 预处理器定义 https://stackoverflow.com/questions/1253934/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
到处?
附言。我正在使用 Visual Studio 2013,代码应该可以在 C 和 C++ 中运行。
编辑:
全部:这个问题包含更有用的答案,如何使用其他工具来做到这一点。您不应将此问题标记为重复。
编辑2:
我正在考虑不需要外部工具的替代方案。也许不需要将其声明为宏?如果我们假设WhatsThat()
正在返回int
,不禁止写int PROTOTYPENAMED(ANOTHERFUNCTION) = WhatsThat();
.