C语言中exit(0)与exit(1)有啥区别??

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中exit(0)与exit(1)有啥区别??相关的知识,希望对你有一定的参考价值。

return又和exit(0)又何种区别呢?

1、exit(1)表示异常退出,在退出前可以给出一些提示信息,或在调试程序中察看出错原因。

2、exit(0)表示正常退出。 

3、 return是语言级别的,是关键字,它表示了调用堆栈的返回,return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用,如果返回的是main函数,则为退出程序。

而exit是系统调用级别的,是一个函数,它表示了一个进程的结束。 exit是在调用处强行退出程序,运行一次程序就结束。这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关。

扩展资料:

return 表示把程序流程从被调函数转向主调函数并把表达式的值带回主调函数,实现函数值的返回,返回时可附带一个返回值,由return后面的参数指定。

return通常是必要的,因为函数调用的时候计算结果通常是通过返回值带出的。 如果函数执行不需要返回计算结果,也经常需要返回一个状态码来表示函数执行的顺利与否(-1和0就是最常用的状态码),主调函数可以通过返回值判断被调函数的执行情况。

参考资料来源:百度百科:return

参考技术A

    exit(1)表示异常退出

    exit(0)表示正常退出   

    return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。

    return是返回函数调用,如果返回的是main函数,则为退出程序   

    exit是在调用处强行退出程序,运行一次程序就结束  

拓展资料:

C语言是一门通用计算机编程语言,广泛应用于底层开发。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。 [1]  目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。

C语言是一门面向过程的计算机编程语言,与C++,Java等面向对象的编程语言有所不同。

其编译器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、Turbo C等。

参考资料:C语言_百度百科

参考技术B exit好象在stdio.h里面,所以要有包含头文件
return是返回函数调用,如果返回的是main函数,则为退出程序
exit是在调用处强行退出程序,运行一次程序就结束
-------------------------------------------------------------------
return

是返回

函数返回
而exit是退出
-------------------------------------------------------------------
exit(1)表示异常退出.这个1是返回给操作系统的不过在DOS好像不需要这个返回值
exit(0)表示正常退出
-------------------------------------------------------------------
无论写在那里,都是程序推出,dos和windows中没有什么不一样,最多是系统处理的不一样。
数字0,1,-1会被写入环境变量ERRORLEVEL,其它程序可以由此判断程序结束状态。
一般0为正常推出,其它数字为异常,其对应的错误可以自己指定。
-------------------------------------------------------------------
返回给操作系统的,0是正常退出,其他值是异常退出,在退出前可以给出一些提示信息,或在调试程序中察看出错原因.

参考资料:http://topic.csdn.net/t/20030412/00/1650539.html

本回答被提问者采纳
参考技术C exit(0):正常运行程序并退出程序;
exit(1):非正常运行导致退出程序;
return():返回函数,若在主函数中,则会退出函数并返回一值。
详细说:
  1. return返回函数值,是关键字;  exit 是一个函数。
  2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。
  3. return是函数的退出(返回);exit是进程的退出。
  4. return是C语言提供的,exit是操作系统提供的(或者函数库中给出的)。
  5. return用于结束一个函数的执行,将函数的执行信息传出个其他调用函数使用;exit函数是退出应用程序,删除进程使用的内存空间,并将应用程序的一个状态返回给OS,这个状态标识了应用程序的一些运行信息,这个信息和机器和操作系统有关,一般是 0 为正常退出, 非0 为非正常退出。
  6. 非主函数中调用return和exit效果很明显,但是在main函数中调用return和exit的现象就很模糊,多数情况下现象都是一致的。
 
参考技术D 首先这个exit是针对你整个程序的进程而言的,也就是说让你的进程退出(不管这行代码是在程序的哪个地方,哪个函数),并返回了这个值。
然后,你要知道你的程序的进程是有父进程的,除了系统开机时自启动的进程(Linux里面就是init,PID是0)。所以返回的这个值就会被你的程序的父进程接受到,进而知道你的程序是正常退出还是出错中断的。
这是一般用来区别错误状态的一种函数返回状态法,除了以外的数字都是有错误的,但是错误类别是可以区分的,根据那个数字来区分:一般在errorno变量中!
exit()是用来正常结束进程的.exit(0)是正常退出,return是返回某个值.
exit(0)程序结束时返回0给系统
exit(1)程序结束时返回1给系统
exit(n)程序结束时返回n给系统

这样系统就知道程序是怎么结束的~是出错结束的呢 还是正常结束的呢,一看返回值就知道了.
exit()函数无论你括号里用数字几效果都是相同的
但是你可以用不同的数字来区别退出的原因
比方 如果内存分配失败而exit(1) 打开文件失败而exit(2)
或者用来标示在此处退出,发生错误的严重性

exit是结束整个程序
exit();
exit(0);
exit(1);
exit(A);//A表示要返回的某个值

exit(0)正常退出
只要传给它非0 ,就表示程序非正常退出, 这个值会传给操作系统.

echo('exit'); 和有啥区别?死;和死('退出');?

【中文标题】echo(\'exit\'); 和有啥区别?死;和死(\'退出\');?【英文标题】:What is the difference between echo('exit'); die; and die('exit');?echo('exit'); 和有什么区别?死;和死('退出');? 【发布时间】:2011-08-15 01:31:58 【问题描述】:

我见过一些代码这样做:

if(something)
    echo 'exit from program';
    die;

...more code

以及其他只使用die的人:

if(something)   die('exit from program');
...more code

程序结束的时间是否有任何内在差异,我应该知道它之后的代码吗?等等

更新

我主要是在问,它是否是一种编码风格,或者是否有真正的原因导致某些编码方式与另一种方式不同。我不是在问exitdie 之间的区别是什么。

【问题讨论】:

我真的觉得这没什么好关心的 我认为这是一个错误,PHP 允许您以多种方式执行此操作。别担心。 @Frits:不是bug,是故意行为,类似于可以使用printecho @Frits 不,这不是任何合理定义的错误。 @Frits 哈哈,你不能是认真的。通用语言有无数种方法可以做同样的事情。这就是重点。我猜1 + 1 == 1 - -1 充满错误的任何语言。 【参考方案1】:

来自 php 手册:

注意:这种语言结构等价于 die()。

但是dieexit还是有区别的:

使用 die() 你可以发布一个字符串: die("An error occurred");

使用 exit() 的结果相同

<?php
    echo("An error occurred <br>");
    exit(0);
?>

或者如果你是 cli 或 unix shell:

在命令行上使用 PHP,die("An error occurred") 简单地将“An error occurred”打印到 STDOUT 并以正常退出代码 0 终止程序。

<?php
    fwrite(STDERR, "An error occurred \n");
    exit(0); //
?>

【讨论】:

【参考方案2】:

不,没有区别;他们都会将"exit" 写入STDOUT 并终止程序。

我更喜欢die("exit") 方法,因为它打字更少,更容易注释掉并且语义更清晰。

就“速度”而言,您为什么要关心哪个更快?你需要你的程序很快死掉吗?

RE:您的更新

...结束程序的任何固有差异...

没有区别,固有的或其他的。它们是相同的。第二个选项die('exit') 是单个语句,因此与if 语句一起使用时不需要大括号;这与 die 无关,与 C 风格语言中的块和流控制有关。

RE:您的评论/第二次更新

die 的方式是个人喜好问题。正如我所说,它们是相同的。出于上面列出的原因,我会选择第二个选项:更短、更清晰、更干净,在我看来这相当于“更好”。

exitdie 之间的区别在于 exit 允许您返回非零状态,而 die 返回 0。这两个函数都不是“更好”,它们的用途不同。

【讨论】:

活得快,早死,留下漂亮的日志文件。 这可能与即将到来的机器人启示录有关。更快的终止开关总是有用的! =D @meagar,这又引出了另一个问题。是先做echo 然后exit 还是先做echo 然后再做die @Neal 实际上它提出另一个问题。你误用了“begs the question”这个词。 @meager。好的。 begs the questionraises 是什么意思?没关系,还有一个问题。【参考方案3】:

主要是编码风格。但是,如果您要输出调试消息,则 echo then die 更好:

echo "The frobnuticator blew up!";
die;

变成

//echo "The frobnusticator blew up!";
die;

当然,你很可能有

if ($debug) echo "The frobnusticator blew up!";
die;

这比(我的|)眼睛更容易

die($debug?"The frobnusticator blew up!":"");

【讨论】:

嗯?你为什么不能这样做:die("The frobnusticator blew up!"); 因为输出可能会回显到浏览器,这在调试中很好,但在生产中不行。是的,您最好对此进行配置。 无论如何,你不应该在生产代码中成为dieing。 die 就像 assert - 当您测试的东西已经足够好以将代码推出到生产环境时,您的代码应该无法达到 die 语句。 非常正确;然而,即使是最好的代码也会在生产中遇到问题——例如,你可能会因为磁盘满而死机。但我并没有试图解决死亡与其他事物,只是两种形式的死亡【参考方案4】:

至少根据 PHP 手册,语言结构 exit()die() 是等价的。当应该到达该行并且我希望脚本在该点停止时,我使用 exit()。另一方面, Die() 用于不应该发生的情况。这对我来说是最自然的,你不必同意。

【讨论】:

【参考方案5】:

对于您发布的具体示例,它们是相等的,因为 $status 是一个字符串,但正如 the manual 所说,情况可能并非总是如此:

如果status是一个字符串,这个函数 打印退出前的状态。

如果status是一个整数,那个值 将用作退出状态和 未打印。退出状态应该是 在 0 到 254 范围内,退出状态 255 由 PHP 保留,不应 使用。状态 0 用于 成功终止程序。

所以如果你想输出 'exit from program' 而不是 42 你真的需要这样做:

echo 42; die();

【讨论】:

我不能die(42);?那不会做任何事?结果会怎样? @Neal:我没有说它不会任何事情,但肯定不会是echo我>'ed!如果您执行die(42),则执行以退出状态 42 结束,这主要在 CLI(命令行界面)环境中有用。只是要寻找一些东西,因为如果你不小心,你可能会在脚上开枪(例如,如果你这样做mysql_query('...') or die(mysql_errno()))。 @Alix 我的印象是只有exit(42) 这样做,而die 总是以0 退出 @Neal:不,他们是别名:die — Equivalent to exit(),见ideone.com/f7E0F。 =) @Alix 这很奇怪。不知道【参考方案6】:

伙计们,情况有所不同。 DIE() 可以与其他可失败的函数一起使用,而回显则需要作为错误或异常来捕获。

$query = mysql_query("SELECT * FROM tablename") OR DIE(mysql_error());

为您提供即时捕获/死亡序列。

【讨论】:

$query = mysql_query("SELECT * FROM tablename") OR exit(mysql_error()); 也可以。 Die() 和 exit() 是等价的。 @Neal 这与die无关;您可以使用任何一系列语句编写&lt;statement#1&gt; or &lt;statement#2&gt;,这不是die 特有的语言功能。还在我尚未评论的答案中评论 @meagar 不起作用。 也没有“catch/die”序列;这只是简单的旧short-circuit evaluation。 请原谅我的简单术语。【参考方案7】:

没有区别。

既然你死了,为什么还要要求速度差异。

【讨论】:

嗯,一种可能会很慢很痛苦,而另一种可能又快又容易,我知道什么?

以上是关于C语言中exit(0)与exit(1)有啥区别??的主要内容,如果未能解决你的问题,请参考以下文章

c语言exit和return的区别

请问C++中如果需要中途退出程序,exit(1)和exit(0)以及return有啥区别呢? 谢谢!

exit() 和 abort() 有啥区别?

exit(0) 和 raise(SIGTERM) 有啥区别

退出和返回有啥区别? [复制]

exit() 与 return() 的区别