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