当前位置:   article > 正文

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

return -1 和exit(-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又没清理干净。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/108223
推荐阅读
相关标签
  

闽ICP备14008679号