如何自动初始化函数的指针数组?

时间:2019-05-23 14:40:22

标签: c function-pointers

我有一组功能:

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”等。

我希望,也许一些C专家可以帮助我一些建议。

1 个答案:

答案 0 :(得分:2)

扩展@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"
}