c 编程中的exit(-1)和 return -1

1、

首先这个exit是针对你整个程序的进程而言的,也就是说让你的进程退出(不管这行代码是在程序的哪个地方,哪个函数),并返回了这个值。
然后,你要知道你的程序的进程是有父进程的,除了系统开机时自启动的进程(Linux里面就是init,PID是0)。所以返回的这个值就会被你的程序的父进程接受到,进而知道你的程序是正常退出还是出错中断的。

在main函数中我们通常使用return (0);这样的方式返回一个值。

但这是限定在非void情况下的也就是void main()这样的形式。

exit()通常是用在子程序中用来终结程序用的,使用后程序自动结束跳会操作系统。

但在如果把exit用在main内的时候无论main是否定义成void返回的值都是有效的,并且exit不需要考虑

#include <iostream> 
#include <string> 
using namespace std; 

int main() 

exit (1);//等价于return (1); 
}

数字0,1,-1会被写入环境变量ERRORLEVEL,其它程序可以由此判断程序结束状态。   
一般0为正常推出,其它数字为异常,其对应的错误可以自己指定。
exit用于在程序运行的过程中随时结束程序,函数原型void exit(int status),exit的参数是返回给操作系统的。这个参数识了应用程序的一些运行信息。
    和操作系统有关一般是0为正常退出,非0为非正常退出。非0的数字可以是自己拟定的可以是任意一个整型数字。
    通过这个参数用来标识程序是在那一部分退出的。如问题中的程序,如果操作系统检测到程序退出时exit的参数是-1,那么就可以知道是因为if(f1==NULL || f2==NULL)中的表达式为真而退出的。如果不是-1而是其他的数字,那么代表程序是在其他地方退出的。

这是一般用来区别错误状态的一种函数返回状态法,除了以外的数字都是有错误的,但是错误类别是可以区分的,根据那个数字来区分:一般在errorno变量中!

2、

http://bbs.chinaunix.net/thread-3758347-1-1.html

如题, 比如下面的代码。return -1;会被执行吗?这是个if(),它会return到哪里去呢。请指教下。   
if (ioctl(raw_sock_fd, SIOCGIFHWADDR, &ifstruct) == -1)
    {
        printf("\nioctl SIOCGIFHWADDR [%s] Error!!!", dev_name);
        close(raw_sock_fd);
        exit(1);
        return -1;
    }
不会被执行的!非void没指定return的值引起UB,一般编译器会警告,严格检查时可能报错。所以以防万一通常都加上个,尽管实际上不会被执行到。
对于一整个函数,C11可以用_Noreturn,C++11可以用[[noreturn]],指示不会返回,编译器不需要对此进行检查(不过要是真的返回了就UB了,一般应会被警告)。


if外面也有return……那可能只是维护上的原因了。比如原来就有return,后来把这里改成exit又没清理干净。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值