我想使用一些邪恶的宏魔术来生成一个指向文件中所有函数的指针数组。不幸的是,我仅限于C99,并且不是很受欢迎的编译器。
我有一个主意,但我不确定它是否安全:
void foo(void)
{
;
}
void bar(void)
{
;
}
typedef void (*FuncPointer)(void);
FuncPointer array[2] = {foo, bar};
我试过了,它被编译甚至工作了,但在C中,这并不意味着这种东西是安全的或可移植的。
是否有任何关于初始化全局指针数组的保证?
是的,这是标准保证的。所有这样的数组都是在调用CCD_ 1之前填充的。
此外,如果您使用的是支持C中全局构造函数的C++或编译器特定扩展(例如GNU C中的__attribute__((constructor))
),则保证在调用任何全局构造函数之前完成
您可能需要担心的唯一情况是,如果您正在编写自己的内核,在这种情况下,您必须负责加载可执行文件的所有部分。