与春风 2021-10-15 16:18 采纳率: 63.6%
浏览 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 iis10中如何阻止别人网站重定向到我的网站
  • ¥15 滑块验证码移动速度不一致问题
  • ¥15 定制ai直播实时换脸软件
  • ¥100 栈回溯相关,模块加载后KiExceptionDispatch无法正常回溯了
  • ¥15 Utunbu中vscode下cern root工作台中写的程序root的头文件无法包含
  • ¥15 麒麟V10桌面版SP1如何配置bonding
  • ¥15 Marscode IDE 如何预览新建的 HTML 文件
  • ¥15 K8S部署二进制集群过程中calico一直报错
  • ¥15 java python或者任何一种编程语言复刻一个网页
  • ¥20 如何通过代码传输视频到亚马逊平台