C++ 未在main()上启动程序执行
我用C语言开发了很多年,直到现在才发现程序可以在main()函数之前执行代码。 下面是一个代码示例C++ 未在main()上启动程序执行,c++,C++,我用C语言开发了很多年,直到现在才发现程序可以在main()函数之前执行代码。 下面是一个代码示例 int generateNum(){ // Some malicious code here... return 5; } static int someArray[] = {generateNum(),generateNum()} int main(){ // Some code here... } 函数generateNum()在main()之前被调用两次
int generateNum(){
// Some malicious code here...
return 5;
}
static int someArray[] = {generateNum(),generateNum()}
int main(){
// Some code here...
}
函数generateNum()
在main()
之前被调用两次
我的问题是
main
之前没有代码执行。完整报价:
3.6.1主要功能[基本.启动.主要]
1程序应包含一个名为main的全局函数,即
程序的指定开始。它是实现定义的
独立环境中的程序是否需要
定义一个主函数。[注:在独立式环境中,
启动和终止由实施定义;启动
包含命名空间对象的构造函数的执行
具有静态存储持续时间的作用域;终止包含
对具有静态存储持续时间的对象执行析构函数。
]
main
之前进行。这可以由操作系统加载器/链接器来处理,也可以由针对包含main
的目标文件链接的某些特殊模块来处理。对于gcc,如下所述:静态对象是在输入main之前初始化的,这符合标准(我确定是C++标准,但我认为也是C)。事实上,在输入main之前,可以使用伪静态从其构造函数调用某些代码。需要注意的是,您不知道初始化的顺序。它甚至可以在同一台机器上的编译之间进行更改,这取决于链接顺序、对象文件布局和月球的阶段-1对于一个虚构的问题。此代码不是有效的C。在该语言中,全局初始值设定项必须是常量,因此
main
是要执行的第一个用户提供的代码。我可以从初始化函数调用malloc()吗?那么fopen()和fwrite()呢?我可以打开一个套接字,并在UDP上发送信息吗?@达尼埃尔希,不,你提到的所有东西。P.S.,我只是尝试了MalCocor(),它在Windows和Linux上工作。@丹尼尔希什,我希望它能工作(因为你可能想要使用的许多容器类将使用动态内存分配),但我不知道——C++有很多规则和例外。但是,因为这里我们讨论的是C++独占特性,所以不希望使用<代码> MARROCK()<代码>;相反,请使用new
和new[]
,除非您有很好的理由不这样做(例如,与免费的C代码接口)。