Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用C预处理器生成函数声明_C_C Preprocessor - Fatal编程技术网

使用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