2011-11-09 60 views

回答

3

fun触发器未定义的行为

请注意始终编译时启用所有编译器警告。这应该给你一个警告,你犯了这个错误。

您的main也触发未定义的行为,因为C++标准要求只有一个称为main的单一函数,并且它返回int。但是,作为特例,您可以省略(更正后的)main函数中的return声明。

“堆栈”,正如你所设想的那样,不是C++语言的一部分。但这是无关紧要的;该标准表示返回的对象是在调用者的范围内构建的,这是您所需要知道的。

(实际上,一个未归还int很可能会落得像int类型的未初始化的变量,但标准说,该函数调用已触发不确定的行为,而不是仅仅只读访问以后。)

+1

不,总是编译时启用了* some *编译器警告。包括这一个;-)(+ 1,虽然) –

+0

所以,你的意思是什么都可以打印?? ??随着-Wall它给予警告......但是,我很想知道堆栈...我的意思是什么存储在堆栈上? – Invictus

+1

@Invictus:好吧,既然'%d'的意思是“类型'int'”,我想是的,任何*整数值*都可以打印出来。 “未定义的行为”实际上意味着程序可能会以任何方式运行(崩溃,格式化硬盘,订购披萨)。实际上,尽管我想你总是会把它放在'printf'行。迈克尔:我的意思是像' - 墙';不一定是“所有模糊和可疑的警告”。简洁是尼特的灵魂,呃? –

2

这是未定义的行为。什么事情都可能发生。

2

由于它依赖于建筑,所以没有一般​​的东西。

但是,可以承认可以返回最后计算的值或最后一次调用的函数的返回值。但最后它是未定义的行为。如果你想依靠它...

请注意,还有一个特殊的情况下int main()。 (顺便提一句:void main()不是标准的。)如果没有return语句,它将返回0

相关问题