我正在尝试一种聪明的方法(在C中)创建一个字符串数组,以及数组索引的符号名称(枚举或#define),在一个结构中便于维护.就像是:
const char*strings [] = {M(STR_YES,"yes"),M(STR_NO,"no"),M(STR_MAYBE,"maybe")};
其结果相当于:
const char*strings [] = {"yes","no","maybe"}; 枚举索引{STR_YES,STR_NO,STR_MAYBE}; (或#define STR_YES 0等)
但是我在这种情况下为如何构造M宏绘制了一个空白.
任何聪明的想法?
clang编译器源中使用的一种技术是创建.def包含这样的列表的文件,该列表的设计类似于C文件,可以轻松维护而无需触及使用它的其他代码文件.例如:
#ifndef KEYWORD
#define KEYWORD(X)
#endif
#ifndef LAST_KEYWORD
#define LAST_KEYWORD(X) KEYWORD(X)
#endif
KEYWORD(return)
KEYWORD(switch)
KEYWORD(while)
....
LAST_KEYWORD(if)
#undef KEYWORD
#undef LAST_KEYWORD
Run Code Online (Sandbox Code Playgroud)
现在,它做的是包括这样的文件:
/* some code */
#define KEYWORD(X) #X,
#define LAST_KEYWORD(X) #X
const char *strings[] = {
#include "keywords.def"
};
#define KEYWORD(X) kw_##X,
#define LAST_KEYWORD(X) kw_##X
enum {
#include "keywords.def"
};
Run Code Online (Sandbox Code Playgroud)
在你的情况下,你可以做类似的事情.如果您可以使用STR_yes,STR_no...作为枚举器名称,您可以使用与上面相同的方法.否则,只需传递宏两件事.一个小写名称和一个大写名称.然后你可以将上面想要的那个字符串化.
| 归档时间: |
|
| 查看次数: |
359 次 |
| 最近记录: |