Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.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时需要在main中使用return语句_C - Fatal编程技术网

为什么我们在使用C时需要在main中使用return语句

为什么我们在使用C时需要在main中使用return语句,c,C,为什么在C语言的main中需要一个返回函数? 因为当我尝试在main中的return语句之后编写语句时,main之后的语句没有被执行,但是它应该在控件从调用函数返回main之后执行,它应该在return语句之后执行语句,直到遇到结束括号为止 例如: int main() { printf("Hello World"); return 0; printf("hi"); // This does not gets executed } “return”语句不是函数调用。事实恰

为什么在C语言的main中需要一个返回函数? 因为当我尝试在main中的return语句之后编写语句时,main之后的语句没有被执行,但是它应该在控件从调用函数返回main之后执行,它应该在return语句之后执行语句,直到遇到结束括号为止

例如:

int main()
 {
   printf("Hello World");
   return 0;
   printf("hi"); // This does not gets executed
 }

“return”语句不是函数调用。事实恰恰相反。它不会调用另一个函数,以便将新函数添加到,而是导致当前函数退出,就好像到达了函数块的末尾一样。这将导致当前函数从调用堆栈中删除。因此,在无条件返回语句之后编写的任何代码都是不可访问的,并且永远不会执行

返回类型为void(=nothing)的函数不需要返回语句。函数块末尾有一个隐式return语句,它使控件返回给调用函数。在函数main的情况下,调用函数(通常)属于操作系统


但是,如果返回类型为而不是void,则函数必须返回一个值,因此需要显式的return语句。由于C标准要求main返回int,如果代码要符合该标准,则必须使用return语句显式返回值。但是,有些编译器也接受void作为返回值,尽管这不是C标准的一部分。

返回值是关键字而不是函数。它从当前执行的函数返回给调用方

从启动代码调用
main
函数,返回值通常包含程序的退出状态

为什么在C语言的main中需要一个返回函数

main()
中的返回值返回到“系统”,并解释为进程退出代码,例如可以在shell脚本和批处理文件中使用。例如,在Windows中:

> myprogram
Hello World
> echo myprogram returned %errorlevel%
myprogram returned 0
[…]它应该在return语句之后执行该语句,直到遇到结束括号为止

否。当遇到
返回时(线索在名称中!)或在右大括号处(以先发生者为准),函数返回。return语句可以出现在函数中的任何位置,并且函数可以有多个return语句。如果在
返回之前遇到右大括号
,则这是一个隐式返回,对于非void函数,如果调用方尝试使用返回值,则该返回是未定义的行为


当您从
main()
返回时,控件将返回到系统,并且在终止进程、操作系统恢复资源、关闭文件等的托管环境中。

什么?如果从main返回,则没有可返回的调用函数(至少在代码中没有)。@PRIYANKA CHETTRI显示一个程序示例。否则就不清楚你的意思了。@PRIYANKA CHETTRI当控件由于返回语句而从main传递出去时,该语句将如何在main中执行?标题中的问题与正文中的问题不同。这里有两个不同的问题-您应该避免这样做-您可能无法在一个答案中同时得到这两个问题的答案。具有非void返回类型的函数必须返回一个值,这是不正确的。C标准允许控制流到函数的末尾,然后控制返回给调用方。(如果调用函数尝试使用返回值,则行为未定义。)这对于有时返回值有时不返回值的函数非常有用,例如执行请求代码指定的操作的函数,一些请求可能设置值而不返回任何内容,而其他请求则检索值并返回它们;它不必使用
return
语句来返回值。如果控件到达
main
的末尾,它将返回零。@EricPostpischil:我清楚地记得我的Microsoft编译器在函数的所有控件路径都返回值时抱怨。但是,编译器可能已经处于C++模式(不是C),我不确定这是否是编译器错误或警告。此外,它可能是编译器的一个非常旧的版本。在这方面,C和C++之间有什么区别吗?标准可能在这方面有所改变吗?编译器可能会警告,因为这种用法很少见,但编译时应该允许它。C编译器的不同会影响到这个。在C++中,行为是未定义的:C++ 2017草案N465 97.3“<代码>返回<代码>语句”[STM.Read ] 2表示“…否则,流离开主(64.1)以外的函数的结尾导致未定义的行为。”(“否则”)下面是一个关于具有无效返回类型的函数的句子,所以这句话是关于具有非无效返回类型的函数的。)