2013-02-23 70 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