小蚂蚁t 2021-10-15 16:18 采纳率: 54.5%
浏览 52
已结题

C语言 关于return返回值 望指点一下

#include<stdio.h>
int main(){
  printf("hello word!");
  return 0;
}

我们知道 return 0; 是当主函数正常结束时,得到的函数值为0,当执行main函数过程中出现异常或错误时,函数值为一个非0的整数。这个函数值时返回给调用main函数的操作系统的。程序员可以利用操作指令检查mian函数的返回值,总而判断main函数是否已正常执行。
那我们应该怎么操作来检查main函数的返回值呢?(不看printf输出来判断)
如果时Linux下呢?
谢谢!

  • 写回答

3条回答 默认 最新

  • include_iostream_ 2021-10-15 17:37
    关注

    为了防止题主被误导,提前说:直接用system函数的做法是错误的,其返回值通常不等于进程返回值
    如果你是在shell里,那好办了,执行完程序后执行echo $?就行,这个变量标识了你的程序有没有执行成功。(需要注意的是,Linux上为0表示成功。)这个特殊变量也可以像普通变量一样进行引用,但由于它是会变的,一般建议执行完进程后立刻用其他变量存储,总之不能多次复用,因为每次执行指令,这个变量都会被刷新。
    如果是在C里,那么得分系统。
    对Windows而言,不存在标准做法,但应该可以用CreateProcess系列函数启动进程,GetExitCodeProcess来查看。具体见MSDN:

    对Unix/Linux而言,有个比较标准的做法,和system函数的返回值有关。system的返回值分为多个部分,指示了进程是否正常退出、退出时的返回值、是否被信号中断、中断的信号是什么(这也是为什么我说用system函数的返回值直接作为进程返回值是错误的)。具体而言涉及WIFEXITED、WEXITSTATUS、WIFSIGNALED、WTERMSIG等几个宏,详见

    网上涉及system返回值的文章其实也不少,但上面这个链接是最权威的。

    此外,Python也可以做这个工作,具体涉及subprocess模块,这里就不赘述了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月18日
  • 已采纳回答 10月18日
  • 创建了问题 10月15日

悬赏问题

  • ¥15 关于#hadoop#的问题
  • ¥15 (标签-Python|关键词-socket)
  • ¥15 keil里为什么main.c定义的函数在it.c调用不了
  • ¥50 切换TabTip键盘的输入法
  • ¥15 可否在不同线程中调用封装数据库操作的类
  • ¥15 微带串馈天线阵列每个阵元宽度计算
  • ¥15 keil的map文件中Image component sizes各项意思
  • ¥20 求个正点原子stm32f407开发版的贪吃蛇游戏
  • ¥15 划分vlan后,链路不通了?
  • ¥20 求各位懂行的人,注册表能不能看到usb使用得具体信息,干了什么,传输了什么数据