问题
I have a lot of functions to declare in this format:
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
};
Is there a way I can use the C preprocessor to partially automate this task? Ideally, something like this:
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"
};
回答1:
You could use the X macro trick:
// foo_list.h
#define MY_FUNCTIONS \
X(foo_100)
X(foo_200)
X(foo_300)
X(foo_400)
Then in your foo.h
file you define X
as various macros and invoke 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
This is often one of the easiest ways to iterate over a list in the C preprocessor.
Don't remember where I first saw this, maybe it was here.
回答2:
С/С++ preprocessor cannot open files and the like.
But you can use scripting engines like php or python to generate files you need.
来源:https://stackoverflow.com/questions/35095158/using-the-c-preprocessor-to-generate-function-declarations