制作C标识符和字符串?

OJW*_*OJW 15 c c-preprocessor preprocessor-directive

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

enum
{
NAME_ONE,
NAME_TWO,
NAME_THREE
};

myFunction(NAME_ONE, "NAME_ONE");
myFunction(NAME_TWO, "NAME_TWO");
myFunction(NAME_THREE, "NAME_THREE");
Run Code Online (Sandbox Code Playgroud)

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

初步猜测:

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

myDefine(NAME_ONE)
myDefine(NAME_TWO)
myDefine(NAME_THREE)
Run Code Online (Sandbox Code Playgroud)

然后使用它两次,如:

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

#define myDefine(a) myFunc(a, "a");
#include "definitions"
#undef myDefine
Run Code Online (Sandbox Code Playgroud)

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

Kri*_*son 26

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

#define myDefine(a) myFunc(a, #a);
Run Code Online (Sandbox Code Playgroud)

将参数转换为字符串.