我想使用一些邪恶的宏魔法生成一个指向文件中所有函数的指针数组。不幸的是我只限于C99而不是非常受欢迎的编译器。
我有个主意,但我不确定它是否安全:
void foo(void)
{
;
}
void bar(void)
{
;
}
typedef void (*FuncPointer)(void);
FuncPointer array[2] = {foo, bar};
我尝试了它并且它编译甚至工作但是在C中实际上并不意味着这种东西是安全的或便携的。
是否有关于全局指针数组初始化的保证?
答案 0 :(得分:1)
是的,这可以保证符合标准。在调用main
之前填写所有这些数组。
此外,如果您使用C ++或支持C语言中的全局构造函数的特定于编译器的扩展(例如,GNU C中的__attribute__((constructor))
),则可以保证在调用任何全局构造函数之前完成此操作。
您可能不得不担心的唯一情况是,如果您正在编写自己的内核,在这种情况下,您必须负责加载可执行文件的所有部分。