制作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,尽管从未使用它们。 所以,如果不出意外,它们是在自己的发明中寻找死胡同的好方法。 我想知道是不是因为他们说的话:“宏很糟糕”…… 🙂