我正在尝试使用以下代码初始化 C 结构:
/* header file */
typedef struct _funky {
int func_id; /* I know this should be intptr_t, but ignore for now ... */
char func_name[MAX_FUNC_NAME_LEN];
} Funky;
double func1(double d1, double d2, double d3);
double func2(double d1, double d2, double d3);
double func3(double d1, double d2, double d3);
double func4(double d1, double d2, double d3);
/* .c file */
Funky fk[4] = {
{(int)func1, "func1"}, /* <- gcc barfs here ... */
{(int)func2, "func2"},
{(int)func3, "func3"},
{(int)func4, "func4"}
};
当我尝试编译它(gcc 4.6.3)时,我收到以下错误:
error: initializer element is not constant
error: (near initializer for 'fk[0].func_id')
我该如何解决这个错误?
[[编辑]]
在与 ouah 简短交谈后,我找到了此错误的原因 - 它与用于初始化数组的函数定义有关。一些定义在不同的翻译单元中,而另一些则在不同的模块中。所有这些都意味着(IIUC)函数不会在编译时定义。
缺少编写初始化函数(这将需要现有代码中的大量 mod)我不确定如何解决这个问题 - 我也不确定它是如何在以前版本的 gcc 下编译的。