C 初始化函数指针的全局数组
我想使用一些邪恶的宏魔法来生成指向文件中所有函数的指针数组。不幸的是,我仅限于C99,并且不是很受欢迎的编译器 我有个主意,但我不确定它是否安全:C 初始化函数指针的全局数组,c,function-pointers,array-initialization,C,Function Pointers,Array Initialization,我想使用一些邪恶的宏魔法来生成指向文件中所有函数的指针数组。不幸的是,我仅限于C99,并且不是很受欢迎的编译器 我有个主意,但我不确定它是否安全: void foo(void) { ; } void bar(void) { ; } typedef void (*FuncPointer)(void); FuncPointer array[2] = {foo, bar}; 我试过了,它编译过,甚至工作过,但在C语言中,这并不意味着这种东西是安全的或可移植的 是否有关于
void foo(void)
{
;
}
void bar(void)
{
;
}
typedef void (*FuncPointer)(void);
FuncPointer array[2] = {foo, bar};
我试过了,它编译过,甚至工作过,但在C语言中,这并不意味着这种东西是安全的或可移植的
是否有关于全局指针数组初始化的任何保证?是的,该标准保证可以工作。在调用
main
之前,将填充所有这些数组
另外,如果您使用C++中支持全局构造函数的C++或编译器特定扩展(例如,在GNU C中的代码为> >
您可能需要担心的唯一情况是,如果您正在编写自己的内核,那么您必须注意加载可执行文件的所有部分。什么是“安全”呢?这有什么意义吗?你想定义它吗?当然有保证:如果你初始化它们,它们就被初始化了。您对便携性有什么顾虑?而且我很确定宏不可能收集文件中的所有函数名。@KerrekSB所说的“安全”是指“指针将有效”注意:可以使用
FuncPointer数组[]={foo,bar}
@Amomum:那你为什么不这么说呢?如果我将所有函数和数组声明为静态,它会改变什么吗?