使用C预处理器生成函数声明

我有很多函数要以这种格式声明:

int foo_100(int, int); int foo_200(int, int); int foo_300(int, int); int foo_400(int, int); typedef int (*foo)(int, int); struct foo foo_library[] = { foo_100, foo_200, foo_300, foo_400 }; 

有没有办法可以使用C预处理器来部分自动执行此任务? 理想情况下,这样的事情:

foo.txt的

 100 200 300 400 

foo.h中

 typedef int (*foo)(int, int); #define DEFINE_FOO(id_) int foo_##id_(int, int); DEFINE_FOO(#include"foo.txt") struct foo foo_library[] = { #include "foo.txt" }; 

你可以使用X宏技巧:

 // foo_list.h #define MY_FUNCTIONS \ X(foo_100) X(foo_200) X(foo_300) X(foo_400) 

然后在foo.h文件MY_FUNCTIONS X定义为各种宏并调用MY_FUNCTIONS

 // foo.h #include "foo_list.h" #define X(NAME) \ int NAME(int, int); MY_FUNCTIONS #undef X #define X(NAME) NAME, typedef int (*foo)(int, int); struct foo foo_library[] = { MY_FUNCTIONS NULL }; #undef X 

这通常是迭代C预处理器中列表的最简单方法之一。

不记得我第一次看到这里的地方,也许它就在这里 。

С/С++预处理器无法打开文件等。

但是你可以使用像php或python这样的脚本引擎来生成你需要的文件。