2013-02-23 69 views
0

我有一些宏KEY_*。我想将它们全部定义为extern变量,但数字和名称可能有所不同。C宏宏模式匹配

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

+0

问题是什么? – 2013-02-23 20:36:01

+0

你的问题不清楚。如果宏调用中没有提供FOO和ASDFG,它们来自哪里? – 2013-02-23 20:52:56

回答

1

您不能仅使用C预处理器来执行此操作。

至少,它需要将KEY_FOO令牌拆分为它们的组成字符,并且没有预处理器工具可以执行此操作。

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

+0

不,我目前有#define defkey(name,value)extern int key_ ## name; int key_ ## name = KEY_ ## value 我希望它不需要我手动输入名称和宏名称。 – fread2281 2013-02-23 20:41:49

+0

@ fread2281,你不想手动输入什么?如果你的'FOO'和'ASDFG'和各自的值来自例如文件,那么最好的办法就是使用Perl,或者编写一个辅助C程序,它将头文件写入宏定义以及其他你需要的东西。 – vonbrand 2013-02-24 01:53:10