Инициализировать глобальный массив указателей на функции во время компиляции или во время выполнения перед main ()

Я пытаюсь инициализировать глобальный массив указателей на функции во время компиляции, в C или C ++. Что-то вроде этого:

module.h

typedef int16_t (*myfunc_t)(void);
extern myfunc_array[];

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

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)() { ... }

При компиляции с использованием g ++ -DNUMBER = N, после предварительной обработки становится:

func1.cpp

...
int16_t myfunc_1() { ... }

func2.cpp

...
int16_t myfunc_2() { ... }

и так далее.

Декларацииmyfunc_N() и инициализацияmyfunc_array[] это не круто, так как N часто меняется и может быть от 10 до 200. Я предпочитаю не использовать скрипт или Makefile для их генерации. Порядок функций не так важен, я могу обойти это. Есть ли более аккуратный / умный способ сделать это?

Ответы на вопрос(1)

Ваш ответ на вопрос