使用 C 预处理器生成函数声明
Using the C preprocessor to generate function declarations
我有很多函数要用这种格式声明:
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"
};
С/С++预处理器无法打开文件等。
但您可以使用 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_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。
我有很多函数要用这种格式声明:
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"
};
С/С++预处理器无法打开文件等。
但您可以使用 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_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。