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

enum
{
NAME_ONE,
NAME_TWO,
NAME_THREE
};

myFunction(NAME_ONE, "NAME_ONE");
myFunction(NAME_TWO, "NAME_TWO");
myFunction(NAME_THREE, "NAME_THREE");

不重复自己,也不自动生成代码,使用C/C++宏
初步猜测:
您可以添加包含
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 myDefine(a) myFunc(a, #a);

将参数转换为字符串的。

10-04 10:14