我在C开发了很多年,现在才发现一个程序可以在main()函数之前执行代码。 这是一个代码示例
int generateNum(){
// Some malicious code here...
return 5;
}
static int someArray[] = {generateNum(),generateNum()}
int main(){
// Some code here...
}
在generateNum()
之前调用函数main()
两次。
我的问题是
答案 0 :(得分:7)
程序应包含一个名为main的全局函数,它是程序的指定开始。
没有说在调用main
之前没有代码执行。完整报价:
3.6.1主要功能[basic.start.main]
1程序应包含一个名为main的全局函数,即 指定的计划开始。它是实现定义的 是否需要在独立环境中的程序 定义一个主要功能。 [注意:在独立环境中, 启动和终止是实现定义的; 启动 包含命名空间对象的构造函数的执行 范围与静态存储持续时间;终止包含 执行具有静态存储持续时间的对象的析构函数。 ]
答案 1 :(得分:7)
main
之前进行此类初始化。这可以由操作系统加载器/链接器或由包含main
的目标文件链接的某些特殊模块来处理。对于gcc,这里描述:http://gcc.gnu.org/onlinedocs/gccint/Initialization.html