使用C预处理器生成函数声明
我有很多函数要以这种格式声明:使用C预处理器生成函数声明,c,c-preprocessor,C,C Preprocessor,我有很多函数要以这种格式声明: 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预处理器部分自动化此任务?理想
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
福安
С/С++预处理器无法打开文件等
但您可以使用php或python等脚本引擎生成所需的文件。您可以使用X宏技巧:
// foo_list.h
#define MY_FUNCTIONS \
X(foo_100)
X(foo_200)
X(foo_300)
X(foo_400)
然后在foo.h
文件中将X
定义为各种宏并调用MY\u函数
// 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预处理器中迭代列表的最简单方法之一
不记得我第一次在哪里看到这个,可能是在那里。不,预处理器不能做这样的事情。使用其他语言的脚本生成DEFINE_FOO行。听起来像是XY问题。为什么这堆函数。。。?那尸体呢?我个人会写一个快速的C#app来为我写文件。
// 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