C语言 return 1,return 0,return -1和exit的区别

o0lyfsai  于 2023-05-28  发布在  其他
关注(0)|答案(6)|浏览(380)

例如,考虑以下代码:

int main(int argc,char *argv[])
{
   int *p,*q;
   p = (int *)malloc(sizeof(int)*10);
   q = (int *)malloc(sizeof(int)*10);
   if (p == 0)
   {
      printf("ERROR: Out of memory\n");
      return 1;
   }

   
   if (q == 0)
   {
      printf("ERROR: Out of memory\n");
      exit(0);
   }
   
   return 0;
}

return 0return 1exit(0)在上面的程序中做什么?exit(0)将退出总程序,控制退出循环,但在return 0return 1return -1的情况下会发生什么。

kb5ga3dv

kb5ga3dv1#

returnmain()等效于exit
程序立即终止执行,exit status设置为传递给returnexit的值
内部函数中的return(不是main)将立即终止特定函数的执行,并将给定结果返回给调用函数。
exit将立即终止程序执行。
状态0表示程序成功。
不同于0的状态意味着程序由于错误或异常而退出。
如果退出时状态不为0,则应该向stderr输出错误消息,因此,不要使用printf,最好使用以下命令

if(errorOccurred) {
    fprintf(stderr, "meaningful message here\n");
    return -1;
}

注意(取决于你使用的操作系统)有一些关于返回码的约定。
谷歌“退出状态代码”或类似的,你会发现大量的信息,SO和其他地方。
值得一提的是,如果你试图做一些无效的操作,比如读取你无法访问的内存,操作系统本身可能会用特定的退出状态代码终止你的程序。

jfgube3f

jfgube3f2#

指示执行状态。
状态0表示程序成功。
不同于0的状态意味着程序由于错误或异常而退出。

**return n;**将终止您的进程,并向父进程(执行您的进程的进程)报告您的进程的结果。0表示成功。其他代码通常表示故障及其含义。

b09cbbtk

b09cbbtk3#

主入口函数中的return n将终止进程并向父进程(执行进程的进程)报告进程结果。0表示成功。其他代码通常表示故障及其含义。

e0uiprwp

e0uiprwp4#

正如here所解释的,在main的上下文中,returnexit都做同样的事情
问:为什么需要returnexit
A:表示执行状态。
在你的例子中,即使你没有return或exit语句,代码也会运行得很好(假设其他一切在语法上都是正确的。此外,如果(应该是)main返回int,则需要在最后返回return 0)。
但是,在执行之后,你没有办法发现你的代码是否按预期工作。您可以使用程序的返回代码(在 *nix环境中,使用$?),它提供了代码(由exitreturn设置)。由于您自己设置了这些代码,因此您可以了解代码在终止之前到达的位置。
您可以写入return 123,其中123表示执行后检查成功。
通常,在 *nix环境中,0被视为成功,非零代码被视为失败。

stszievb

stszievb5#

return nmain等价于exit(n)
返回的有效值是程序的其余部分。它的意思是依赖于操作系统。在unix上,0表示正常终止,非零表示这种形式的错误迫使程序终止,而没有实现其预期目的。
当您的示例似乎已经耗尽内存时,它返回0(正常终止),这是不寻常的。

0yg35tkg

0yg35tkg6#

函数中的return将执行返回给调用者,函数中的exit终止程序。
main函数中,return 0exit(0)是相同的,但是如果在不同的函数中写入exit(0),则程序将从该位置退出。
返回不同的值,如return 1return -1意味着程序返回错误。
当使用exit(0)退出程序时,不会调用本地作用域的非静态对象的析构函数。但如果使用return 0,则会调用析构函数。

相关问题