C++程序的起点是main()函数吗?

137

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;
}

这个示例代码做到了我想做的事情,即打印从0到9的整数的平方,并在进入“main()”函数之前完成。 “main()”函数应该是程序的“开始”。

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

因此,我的问题是,

这段代码是否真正符合标准?

如果它符合标准,那么它不会使标准失效吗?main()不是此程序的开始!user_main()main()之前执行。

我知道use_main()先执行以初始化全局变量main_ret,但那是完全不同的事情;关键是,它确实使引用的标准$3.6.1/1无效,因为main()不是程序的开始;实际上,它是程序的结尾


编辑:

您如何定义“开始”?

这归结为对短语"start of the program"的定义。 那么您如何定义它?

12个回答

1

在初始化所有全局变量后,将调用main函数。

标准没有指定所有模块和静态链接库的全局变量初始化顺序。


0

是的,除了特定于实现的扩展之外,main是每个C++程序的“入口点”。即使如此,在main之前会发生一些事情,尤其是全局初始化,例如main_ret。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接