Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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++ 返回int但不是';我不会显式返回任何内容。例如输出_C++_Compiler Construction_Stack_Stack Trace - Fatal编程技术网

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
意味着“type
int
”,我想是的,任何整数值都可以打印出来。“未定义行为”实际上意味着程序可以以任何方式运行(崩溃、格式化硬盘、订购比萨饼)。实际上,尽管我认为你总是能到达
printf
行。迈克尔:我的意思是像墙一样的东西;不一定是“所有模糊和可疑的警告”。简洁是nit的灵魂,嗯?不,编译时总是启用一些编译器警告。包括这个;-)(+1)那么,你的意思是任何东西都可以被打印出来??。。。有了墙,它确实发出了警告。。。但是,我很想知道有关堆栈的信息。。。我的意思是堆栈上存储了什么???@Invictus:因为
%d
意味着“type
int
”,我想是的,任何整数值都可以打印出来。“未定义行为”实际上意味着程序可以以任何方式运行(崩溃、格式化硬盘、订购比萨饼)。实际上,尽管我认为你总是能到达
printf
行。迈克尔:我的意思是像墙一样的东西;不一定是“所有模糊和可疑的警告”。简洁是nit的灵魂,是吗?
int fun()
{
 printf("\ncrap");
}


void main()
{
  printf("\n return value of fun %d", fun());
}