文章目录

  • exit
  • return
  • 区别
  • 参考文档

exit

    在/usr/include/stdlib.h中,C语言定义了2种常规退出状态(exit status),分别是EXIT_FAILURE和EXIT_SUCCESS:

...
/* We define these the same for all machines.Changes from this to the outside world should be done in `_exit'.  */
#define EXIT_FAILURE    1       /* Failing exit status.  */
#define EXIT_SUCCESS    0       /* Successful exit status.  */
...

    从网络引用如下示例,如果不存在data.txt文件,则退出状态为失败,退出值为1;如果存在data.txt文件,则输出“Normal Return”,退出状态为成功,退出值为0。

#include <stdio.h>
#include <stdlib.h>int main(void)
{FILE *fp = fopen("data.txt","r");if (fp == NULL){fprintf(stderr,"fopen() failed in file %s at line # %d\n", __FILE__,__LINE__);exit(EXIT_FAILURE);}/* 正常进程持续至此。 */fclose(fp);printf("Normal Return\n");return EXIT_SUCCESS;
}

    用户可以自定义不同的退出值,但是要注意取值范围,取值范围为0~255,超过这个范围,就会截取二进制退出值的低8位字符,可以理解为最终得到退出值与256的余数。示例如下,当设置返回值为256时,实际却返回0:
exit_256.c

#include<stdlib.h>
int main(void)
{exit(256);
}

    编译执行

# gcc exit_256.c -o exit_256
# ./exit_256
# echo $?
0

    一般惯例是保留128及更高的状态值,以用于特殊目的。值128用于指示在子过程中无法执行另一个程序。该约定只是建议,非必须遵守。

return

    在C语言中,函数定义包含返回类型、函数名和参数,如下图所示:

    根据是否需要返回值与是否需要参数,可以将函数分为4类:无参数无返回值、有参数无返回值、无参数有返回值和有参数有返回值。

    当函数返回类型为void时,函数无返回值,函数定义中无需使用return语句;当函数返回类型不为void时,函数有返回值,函数定义中需要使用return语句,并且return类型必须与函数返回类型一致。下面示例来自网站GeeksforGeeks,在示例中,Print()函数返回void类型的空值,所以不适合使用return语句,如果使用,return后不应该有值,否则会报错。

// C code to show using return
// statement in void return type function #include <stdio.h>  // void method
void Print()
{  printf("Welcome to GeeksforGeeks");// void method using the return statement return;
}       // Driver method
int main()
{       // Calling print Print();return 0;
}

    如果将Print()函数中的return改为exit,程序会在执行完Print()函数直接退出,不会跳转回main函数。修改后的程序如下,执行程序时不打印Print()函数后的语句,程序退出值为1:

#include <stdio.h>
#include <stdlib.h>// void method
void Print()
{      printf("Now in Print function.\n");  // void method using the exit statementexit(EXIT_FAILURE);
}       // Driver method
int main()
{          // Calling printPrint();    printf("Now in main function.\n");return EXIT_SUCCESS;
}

    return除了可以返回数值,还可以返回指针。根据网络资料,编写下面小程序,比较2个字符串的长短,输出较短的字符串:

#include<stdio.h>char *smallstr( char s1[], char s2[] )
{int i;i = 0;while ( s1[i] != '\0' && s2[i] != '\0' )i++;if ( s1[i] == '\0' )return ( s1 );elsereturn ( s2 );
}int main(void)
{char char1[]="Hello python";char char2[]="Hello C";char *pointer=char1;int number=0;pointer=smallstr(char1,char2);for(;pointer[number] != '\0';number++){   printf("%c",pointer[number]);}   printf("\n");
}

    编译运行,可得到结果“Hello C”。

区别

个人总结exit和return的区别如下:

  • 退出程度不同。虽然都是退出并返回值,但exit退出整个程序,return退出当前函数。
  • 返回值类型不同。exit只返回简单的数值,return稍复杂,可以返回数值、指针、结构体等格式。return返回结构体的示例,见C - Function returning structure。

参考文档

[1]GNU.Exit Status[EB/OL].https://www.gnu.org/software/libc/manual/html_node/Exit-Status.html,2020-01-01.
[2]Fruderica.EXIT_SUCCESS, EXIT_FAILURE[EB/OL].https://zh.cppreference.com/w/c/program/EXIT_status,2017-12-09.
[3]Chinmoy Lenka.return statement in C/C++ with Examples[EB/OL].https://www.geeksforgeeks.org/return-statement-in-c-cpp-with-examples/?ref=rp,2020-01-01.
[4]Shivani Baghel 1.C function argument and return values[EB/OL].https://www.geeksforgeeks.org/c-function-argument-return-values/,2020-01-01.
[5]corob-msft,Saisang,Mikejo5000,NextTurn,ghogen.Return Type[EB/OL].https://docs.microsoft.com/en-us/cpp/c-language/return-type?view=vs-2019,2016-11-04.

理解C语言的exit与return相关推荐

  1. C语言再学习 -- 关键字return和exit ()函数

    终于到了最后一个关键字 return 了.感觉时间过的飞快,转眼间又是一年,如果时间可以 return 就好了. 一.return 介绍 参看:C语言中return 用法 1.含义: return 表 ...

  2. c语言exit和return区别,在fork和vfork中使用

    转自c语言exit和return区别,在fork和vfork中使用 exit函数在头文件stdlib.h中. 简述: exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: ...

  3. C/C++语言函数学习(1):atexit、exit、return

    /*stdlib.h*void exit(int status);*功 能:终止程序*int atexit(void (*func)(void));*功 能: 注册终止函数,在main函数结束以后调用 ...

  4. linux如何在C程序中使用exit,c语言exit和return区别,在fork和vfork中使用

    exit函数在头文件stdlib.h中. 简述: exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在main主函数中,则会退出函数并返 ...

  5. C语言递归调用return语句,理解C语言递归函数的逐级返回(return)

    递归函数,也即调用自身的函数. C Primer Plus中有个例子很棒: /*理解C语言递归函数*/ #include void up_and_down(int); int  main(void) ...

  6. c语言exit和return区别

    exit函数在头文件stdlib.h中. exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在main主函数中,则会退出函数并返回一值, ...

  7. linux脚本中的exit,Shell中exit和return的区别讲解

    1.exit命令 exit命令是Shell内建命令,用于退出当前Shell进程.使用格式如下: exit [] 可以指定退出状态n,n的取值范围是0-255,一般情况下,0表示正常退出,非零表示异常退 ...

  8. php exit、return、break、continue之间的差别,具体介绍

    相信大家在php开发中有几个经常使用的停止程序和循环的keyword的误区( exit.return.break.continue) exit 退出全部脚本,是个函数 return 语言结构的使用方法 ...

  9. 深入理解C语言的函数调用过程

    深入理解C语言的函数调用过程 本文主要从进程栈空间的层面复习一下C语言中函数调用的具体过程,以加深对一些基础知识的理解.     先看一个最简单的程序: 点击(此处)折叠或打开 /*test.c*/ ...

最新文章

  1. 【神经网络】(2) 网络优化,案例:服装图像分类,附python完整代码
  2. HDU - 6267 (概论/找规律/递推)
  3. [js] ajax请求地址只支持http/https吗?能做到让它支持rtmp://等其它自定义协议吗 ?
  4. MySQL首次使用Windows_mysql的安装与使用(windows)
  5. MySQL Connector/Net 5.20安装后无法在VS2008中正常使用的问题
  6. java架构之路(多线程)synchronized详解以及锁的膨胀升级过程
  7. Day2:360培训学习重点笔记(7.14)
  8. vue中怎么点击修改文字_杭州展馆设计中说明牌和说明文字怎么样才能使用最大化?...
  9. 【机器学习】EM算法详细推导和讲解
  10. 移动web点5像素的秘密(转)
  11. 计算机系统存储器 分类,存储器的分类
  12. 第二章 工厂设计模式
  13. 转载 PVE 防火墙
  14. 论文:Pyramid Vision Transformer
  15. 多轴控制玻璃行业程序 相机 ST LAD SFC
  16. 35 小白鼠排队 北大复试
  17. Unity自动提取优化Fbx模型动画文件,并生成ab包文件大小对比信息
  18. GridView分页的实现
  19. 踩坑记录:消息推送已读未读
  20. boost双闭环控制仿真升压电路PI调节器设计升压斩波电路建模和数学模型建模

热门文章

  1. vue2创建简易时钟
  2. 软件项目业务外包之路——起点
  3. Linux iostate命令实战
  4. cesium-操作面要素透明度
  5. 计算机中ppt,计算机中信息表示课件.ppt
  6. Java Swing 经典小游戏之 ———— 黄金矿工
  7. centos7删除虚拟网卡
  8. 【活动预告】众享比特2020战略发布会重磅来袭
  9. ESP8266MOD、刷可以使用AT指令的固件、作为客户端向贝壳云端发送固定数据
  10. Bug:paddle:FatalError: `Segmentation fault` is detected by the operating system.