Как автоматически инициализировать массив указателей на функции? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть набор функций:

int a1(int x, int, y)
{ do some stuff}

int a2(int x, int, y)
{ do some stuff}

//.........

int a100500(int x, int, y)
{ do some stuff}

Есть ли способ автоматической инициализации массива указателей для работы через цикл FOR вместо явного ввода кода, подобного

int (*pfunc[100500])(int, int) = {a1, a2, ..., a1005000}

Моей первой идеей было использование директивы #define следующим образом:

#define z(n) a##n

// ..............

for (int i = 1; i< 100501;i++)
{ 
    pfunc[i] = z(i);
}

К сожалению, z (i) становится "ai", а не "a1", "a2" и т. Д.

Надеюсь, может быть, какой-нибудь гуру может помочь мне советом.

1 Ответ

2 голосов
/ 24 мая 2019

Расширяя комментарий @Giacomo Catenazzi, рассмотрим следующий (не очень) скрипт на python:

# generate_funcs.py
import sys
with open('funcs.inc', 'w') as f:
    f.write(',\n'.join('a{}'.format(i + 1) for i in range(int(sys.argv[1]))))

Выполнено с №. из ваших функций (python generate_funcs.py 100500) создаст файл с именем funcs.inc с:

a1,
a2,
...
a100500

Затем вы можете включить его в код C:

int (*pfunc[])(int, int) = {
#include "funcs.inc"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...