小编azu*_*elo的帖子

在main()之前的编译时或运行时初始化函数指针的全局数组

我正在尝试在C或C++中在编译时初始化函数指针的全局数组.像这样的东西:

module.h中

typedef int16_t (*myfunc_t)(void);
extern myfunc_array[];
Run Code Online (Sandbox Code Playgroud)

module.cpp

#include "module.h"
int16_t myfunc_1();
int16_t myfunc_2();
...
int16_t myfunc_N();

// the ordering of functions is not that important
myfunc_array[] = { myfunc_1, myfunc_2, ... , myfunc_N };
Run Code Online (Sandbox Code Playgroud)

func1.cpp,func2.cpp,... funcN.cpp(指向单个func.cpp文件的符号链接,以便创建不同的目标文件:func1.o,func2.o,func3.o,...,funcN .o.NUMBER定义使用g++ -DNUMBER=N)

#include "module.h"
#define CONCAT2(x, y) x ## y
#define CONCAT(x, y) CONCAT2(x, y)

int16_t CONCAT(myfunc_, NUMBER)() { ... }
Run Code Online (Sandbox Code Playgroud)

使用g ++ -DNUMBER = N编译时,预处理后变为:

func1.cpp

...
int16_t myfunc_1() { ... }
Run Code Online (Sandbox Code Playgroud)

func2.cpp

...
int16_t myfunc_2() { ... } …
Run Code Online (Sandbox Code Playgroud)

c c++

4
推荐指数
2
解决办法
4318
查看次数

标签 统计

c ×1

c++ ×1