C++ 返回int但不是';我不会显式返回任何内容。例如输出
请解释一下堆栈是如何为返回值分配内存的,以及堆栈是如何工作的。这是未定义的行为。任何事情都有可能发生。这是未定义的行为。任何事情都有可能发生。C++ 返回int但不是';我不会显式返回任何内容。例如输出,c++,compiler-construction,stack,stack-trace,C++,Compiler Construction,Stack,Stack Trace,请解释一下堆栈是如何为返回值分配内存的,以及堆栈是如何工作的。这是未定义的行为。任何事情都有可能发生。这是未定义的行为。任何事情都有可能发生。乐趣触发未定义的行为 请始终在启用所有编译器警告的情况下编译。这应该给你一个警告,你正在犯那个错误 您的主< /代码>也触发了未定义的行为,因为C++标准要求只有一个函数名为“代码>主< /代码>,并且它返回 int 。但是,作为特殊情况,您可以在(已更正的)main函数中省略return语句 “堆栈”,如您所推测的,不是C++语言的一部分。但这无关紧要;
乐趣
触发未定义的行为
请始终在启用所有编译器警告的情况下编译。这应该给你一个警告,你正在犯那个错误
<>您的<代码>主< /代码>也触发了未定义的行为,因为C++标准要求只有一个函数名为“代码>主< /代码>,并且它返回<代码> int <代码>。但是,作为特殊情况,您可以在(已更正的)main
函数中省略return
语句
“堆栈”,如您所推测的,不是C++语言的一部分。但这无关紧要;标准规定,返回的对象是在调用者的作用域中构造的,这就是您所需要知道的
(实际上,一个未返回的
int
可能会像一个类型为int
的未初始化变量一样结束,但是标准说函数调用已经触发了未定义的行为,而不仅仅是以后的读访问。)fun
触发未定义的行为
请始终在启用所有编译器警告的情况下编译。这应该给你一个警告,你正在犯那个错误
<>您的<代码>主< /代码>也触发了未定义的行为,因为C++标准要求只有一个函数名为“代码>主< /代码>,并且它返回<代码> int <代码>。但是,作为特殊情况,您可以在(已更正的)main
函数中省略return
语句
“堆栈”,如您所推测的,不是C++语言的一部分。但这无关紧要;标准规定,返回的对象是在调用者的作用域中构造的,这就是您所需要知道的
(实际上,一个未返回的
int
可能会像一个类型为int
的未初始化变量一样结束,但是标准说函数调用已经触发了未定义的行为,而不仅仅是以后的读访问。)因为它依赖于体系结构,所以没有一般的事情
但是,可以承认可以返回上次计算的值,或者返回上次调用函数的返回值。但最终它是未定义的行为。如果你想依靠它
还要注意,
int main()
有一个特殊情况。(顺便说一句:void main()
不是标准的。)如果没有返回语句,它将返回0
,因为它依赖于体系结构,所以没有一般的东西
但是,可以承认可以返回上次计算的值,或者返回上次调用函数的返回值。但最终它是未定义的行为。如果你想依靠它
还要注意,
int main()
有一个特殊情况。(顺便说一句:void main()
不是标准的。)如果没有返回语句,它将返回0
我知道它依赖于体系结构,但是,我要求的是一个通用的东西。我知道它依赖于体系结构,但是,我要求的是一个通用的东西。不,总是在启用一些编译器警告的情况下编译。包括这个;-)(+1)那么,你的意思是任何东西都可以被打印出来??。。。有了墙,它确实发出了警告。。。但是,我很想知道有关堆栈的信息。。。我的意思是堆栈上存储了什么???@Invictus:因为%d
意味着“typeint
”,我想是的,任何整数值都可以打印出来。“未定义行为”实际上意味着程序可以以任何方式运行(崩溃、格式化硬盘、订购比萨饼)。实际上,尽管我认为你总是能到达printf
行。迈克尔:我的意思是像墙一样的东西;不一定是“所有模糊和可疑的警告”。简洁是nit的灵魂,嗯?不,编译时总是启用一些编译器警告。包括这个;-)(+1)那么,你的意思是任何东西都可以被打印出来??。。。有了墙,它确实发出了警告。。。但是,我很想知道有关堆栈的信息。。。我的意思是堆栈上存储了什么???@Invictus:因为%d
意味着“typeint
”,我想是的,任何整数值都可以打印出来。“未定义行为”实际上意味着程序可以以任何方式运行(崩溃、格式化硬盘、订购比萨饼)。实际上,尽管我认为你总是能到达printf
行。迈克尔:我的意思是像墙一样的东西;不一定是“所有模糊和可疑的警告”。简洁是nit的灵魂,是吗?
int fun()
{
printf("\ncrap");
}
void main()
{
printf("\n return value of fun %d", fun());
}