我可以使用取自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:这个问题包含了如何使用其他工具做更多有用的答案。你不应该把这个问题标记为dublicate。
编辑2:
我在考虑不需要外部工具的替代品。也许不需要将它声明为宏?如果我们假设WhatsThat()
正在返回int
,则不会禁止写int PROTOTYPENAMED(ANOTHERFUNCTION) = WhatsThat();
。