一个c语言程序只有一个main,main()真的是一个C ++程序的开始吗?

本文探讨了一段C++代码,其中`main`函数不是程序执行的起点,而是调用了`user_main`函数。代码在GCC4.5.0编译时没有错误或警告,引发了关于C++标准中程序开始定义的讨论。作者指出,尽管代码能够工作,但它违反了标准中$3.6.1/1节的规定,即程序应从`main`函数开始。文章引发思考,如何定义“程序开始”,并讨论了标准与实际代码执行之间的差异。
摘要由CSDN通过智能技术生成

C ++标准中的$ 3.6.1 / 1节,

程序应包含一个名为main的全局函数,它是程序的指定开始。

现在考虑这段代码,

int square(int i) { return i*i; }

int user_main()

{

for ( int i = 0 ; i < 10 ; ++i )

std::cout << square(i) << endl;

return 0;

}

int main_ret= user_main();

int main()

{

return main_ret;

}

此示例代码执行我打算执行的操作,即在进入main()应该是程序“开始” 的函数之前打印从0到9的整数平方。

我还用-pedantic选项GCC 4.5.0 编译它。它没有错误,甚至没有警告!

所以我的问题是,

这段代码真的符合标准吗?

如果它符合标准,那么它是否会使标准所说的无效?main()不是这个计划的开始!user_main()在执行之前执行main()。

我知道要初始化全局变量main_ret,use_main()首先执行,但这是完全不同的事情; 关键是,它确实使标准中的引用语句$ 3.6.1 / 1无效,因为main()它不是程序的开始 ; 事实上,这个计划已经结束了!

编辑:

你如何定义'开始'这个词?

它归结为“程序开始”这一短语的定义。那么你究竟如何定义呢?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值