制作C标识符和字符串?

假设您要生成标识符和字符串的匹配列表

enum { NAME_ONE, NAME_TWO, NAME_THREE }; myFunction(NAME_ONE, "NAME_ONE"); myFunction(NAME_TWO, "NAME_TWO"); myFunction(NAME_THREE, "NAME_THREE"); 

..没有重复自己,没有自动生成代码,使用C / C ++宏

初步猜测:

您可以添加包含的#include文件

 myDefine(NAME_ONE) myDefine(NAME_TWO) myDefine(NAME_THREE) 

然后使用它两次:

 #define myDefine(a) a, enum { #include "definitions" } #undef myDefine #define myDefine(a) myFunc(a, "a"); #include "definitions" #undef myDefine 

但#define不允许你把参数放在一个字符串中?

对于你的第二个#define,你需要使用#preprocessor运算符,如下所示:

 #define myDefine(a) myFunc(a, #a); 

将参数转换为字符串。

这是声明名单的好方法:

 #define FOR_ALL_FUNCTIONS(F)\ F(NameOne)\ F(NameTwo)\ F(NameThree)\ #define DECLARE_FUNCTION(N)\ void N(); #define IMPLEMENT_FUNCTION(N)\ void N(){} FOR_ALL_FUNCTIONS(DECLARE_FUNCTION); FOR_ALL_FUNCTIONS(IMPLEMENT_FUNCTION); 

这样,该名称列表可以多次重复使用。 我已经将它用于原型化新语言function,尽管从未使用它们。 所以,如果不出意外,它们是在自己的发明中寻找死胡同的好方法。 我想知道是不是因为他们说的话:“宏很糟糕”…… 🙂