Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
主循环的递归 我读了一些C++中不允许主()的递归,但是当我尝试它时,没有任何错误< /p> #include<iostream> using namespace std; int i=10; int main() { if(i==1) { cout<<i; return 0; } i--; main(); } #包括 使用名称空间std; int i=10; int main() { 如果(i==1) { cout_C++_Recursion - Fatal编程技术网

主循环的递归 我读了一些C++中不允许主()的递归,但是当我尝试它时,没有任何错误< /p> #include<iostream> using namespace std; int i=10; int main() { if(i==1) { cout<<i; return 0; } i--; main(); } #包括 使用名称空间std; int i=10; int main() { 如果(i==1) { cout

主循环的递归 我读了一些C++中不允许主()的递归,但是当我尝试它时,没有任何错误< /p> #include<iostream> using namespace std; int i=10; int main() { if(i==1) { cout<<i; return 0; } i--; main(); } #包括 使用名称空间std; int i=10; int main() { 如果(i==1) { cout,c++,recursion,C++,Recursion,显式调用main是一种未定义的行为,任何事情都可能发生(包括看似有效) C++03 3.6.1 3) 主功能不得在程序中使用。[…] 编译器(与所有未定义的行为一样)不需要提供诊断,也不需要运行时来崩溃。代码无效,需要符合要求的编译器来发出诊断。这样,编译器就可以自由地执行任何操作,包括生成运行的可执行文件,并执行与您期望的操作类似的操作 注意G++似乎没有发布诊断,但是EDG编译器(通过COMSOONE)确实。尽管C++没有被允许,但是很多东西是不允许的。C++是文档,一个规范。编译器是那个特

显式调用
main
是一种未定义的行为,任何事情都可能发生(包括看似有效)

C++03 3.6.1 3) 主功能不得在程序中使用。[…]


编译器(与所有未定义的行为一样)不需要提供诊断,也不需要运行时来崩溃。

代码无效,需要符合要求的编译器来发出诊断。这样,编译器就可以自由地执行任何操作,包括生成运行的可执行文件,并执行与您期望的操作类似的操作


注意G++似乎没有发布诊断,但是EDG编译器(通过COMSOONE)确实。

尽管C++没有被允许,但是很多东西是不允许的。C++是文档,一个规范。编译器是那个特定的实现。规范可以说类似的东西。“您不能显式地调用
main
”。但是实现可以选择如果您这样做应该发生什么。您如何判断它在没有错误的情况下运行?既然规范没有说明在这种情况下应该发生什么,那么您可以基于什么基础将发生的事情描述为应该发生或不应该发生的事情?(例如,如果你认为你应该得到一个错误,那么你没有得到你应该得到的错误的事实就是一个错误,对吗?)这是一个简单的禁止,而不是未定义的行为。标准中通常的惯例是,如果意图是不需要诊断(即未定义的行为),那么说“不需要诊断”@PeteBecker:真的有区别吗?如果你违反禁令,不是会发生什么吗?@DavidSchwartz-是的,有区别。未定义的行为只是意味着任何事情都会发生。违反要求需要诊断,编译器通常会发出警告或错误。当然,在发出诊断后,编译器急诊室可以做任何事情,但诊断才是关键。