3 回答
![?](http://img1.sycdn.imooc.com/5458478b0001f01502200220-100-100.jpg)
TA贡献1789条经验 获得超8个赞
根据3.6.1 / 3中的标准,它不是:
该功能main 不得在程序中使用 (3.2)
的定义使用感:
如果对象或非重载函数的名称出现在可能评估的表达式中,则使用该函数。
![?](http://img1.sycdn.imooc.com/54dc06a60001ef0401000100-100-100.jpg)
TA贡献1835条经验 获得超7个赞
我会做鱼,并解释为什么这是僵尸。在C或C ++程序可以开始运行之前,必须先初始化CRT。打开stdin / out / err,调用初始化程序,诸如此类。有两种基本策略可以完成此任务,其中包括繁重的平台实现细节。
程序的起始地址指向CRT初始化函数,该函数最终调用main()。具有功能丰富的加载程序的全功能操作系统上常见,该加载程序可以支持可执行映像中的任意部分。
编译器将代码注入到main()函数中,该函数调用CRT初始化函数。启动函数始终是main()。在有限的加载器功能的嵌入式平台上常见。递归main()现在是一个问题,CRT启动代码将以不可预测的堆栈状态再次调用。
![?](http://img1.sycdn.imooc.com/54584f8f00019fc002200220-100-100.jpg)
TA贡献1906条经验 获得超3个赞
索赔这里是它确实是明令禁止:
好吧,标准指出:
3.6.1.3
“功能主体不得在程序内使用。”
5.2.2.9
“ 除名为main的函数外,允许进行递归调用”
您当然可以这样做:
int main(int argc, char* argv[]) {
return foo(argc, argv);
}
int foo(int argc, char* argv[]) {
if (some_condition) {
return foo(argc, argv);
}
return 0;
}
(请注意,我添加了一个get-out子句。我什至无法假设无限递归编码,它在我身上重复出现。)
- 3 回答
- 0 关注
- 519 浏览
添加回答
举报