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

时间:2016-01-29 22:26:17

标签: 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 预处理器来部分自动执行此任务?理想情况下,这样的事情:

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"
};

2 个答案:

答案 0 :(得分:6)

您可以使用X宏技巧:

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

然后在foo.h文件中,您将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预处理器中列表的最简单方法之一。

不记得我第一次看到这个,也许是here

答案 1 :(得分:-1)

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

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