C元宏模式匹配

时间:2013-02-23 20:31:29

标签: c macros c-preprocessor

我有一些宏KEY_*。我想将它们全部定义为外部变量,但数字和名称可能会有所不同。

file1.h:

#define KEY_FOO 200
...
#define KEY_ASDFG 423
预处理器之后

file2.c:

#include <file1.h>
// Something like this should be generated by macros or so, but should not hardcode the names (except KEY_)
extern int key_foo; int key_foo = 200;
...
extern int key_asdfg; int key_asdfg = 423;

可以(以及如何)创建一个元宏/类似的东西,并且不需要使用FOO / ASDFG调用吗?

1 个答案:

答案 0 :(得分:1)

您不能仅使用C预处理器。

至少,它需要将KEY_FOO令牌分解为其组成字符,并且没有预处理器工具可以做到这一点。

使用sed或perl应该很容易,或者你甚至可以编写一个C程序来执行这种转换,但是你不能在预处理器中这样做。