1

我的问题非常接近这个问题: 你如何声明一个 const 函数指针数组?

我在我的包含文件中成功创建了静态 const 函数指针数组。

void fun1( void* );
void fun2( void* );
typedef void ( *funPointer )( void* );
funPointer myFunPointer[2] = { &fun1, &fun2 };

现在我发现了以下内容:我的编译器(gcc 4.6.3)在我抱怨时

(1) 编译包含此标头的不同 *.o 文件,然后将它们链接在一起(多个定义) - 它有助于在数组声明中使用 static 关键字(编辑:实际上必须将函数声明为静态)。

(2) 编译一个包含头文件的文件,而不是设置数组 const。(myFunPointer 已声明但未使用)

static const myFunPointer[2] ....

抓住两个错误/警告。

现在的问题是:我可以解释前一种行为,因为 static 使用“预定义”内存地址,并且函数的几个声明将在该地址处合并。这个解释正确吗?如何解释没有 const 声明的警告?编译器是否有能力自动删除文件中不必要的部分......?

4

1 回答 1

6

在你的头文件中...

void fun1( void* );
void fun2( void* );
typedef void ( *funPointer )( void* );
extern funPointer myFunPointer[2];

并在您的一个文件中...

funPointer myFunPointer[2] = { fun1, fun2 };
于 2013-04-24T18:11:35.677 回答