#include<stdio.h>
int main(){
printf("hello word!");
return 0;
}
我们知道 return 0; 是当主函数正常结束时,得到的函数值为0,当执行main函数过程中出现异常或错误时,函数值为一个非0的整数。这个函数值时返回给调用main函数的操作系统的。程序员可以利用操作指令检查mian函数的返回值,总而判断main函数是否已正常执行。
那我们应该怎么操作来检查main函数的返回值呢?(不看printf输出来判断)
如果时Linux下呢?
谢谢!
为了防止题主被误导,提前说:直接用system函数的做法是错误的,其返回值通常不等于进程返回值。
如果你是在shell里,那好办了,执行完程序后执行echo $?就行,这个变量标识了你的程序有没有执行成功。(需要注意的是,Linux上为0表示成功。)这个特殊变量也可以像普通变量一样进行引用,但由于它是会变的,一般建议执行完进程后立刻用其他变量存储,总之不能多次复用,因为每次执行指令,这个变量都会被刷新。
如果是在C里,那么得分系统。
对Windows而言,不存在标准做法,但应该可以用CreateProcess系列函数启动进程,GetExitCodeProcess来查看。具体见MSDN:
对Unix/Linux而言,有个比较标准的做法,和system函数的返回值有关。system的返回值分为多个部分,指示了进程是否正常退出、退出时的返回值、是否被信号中断、中断的信号是什么(这也是为什么我说用system函数的返回值直接作为进程返回值是错误的)。具体而言涉及WIFEXITED、WEXITSTATUS、WIFSIGNALED、WTERMSIG等几个宏,详见
网上涉及system返回值的文章其实也不少,但上面这个链接是最权威的。
此外,Python也可以做这个工作,具体涉及subprocess模块,这里就不赘述了。
某些语言带有调用命令行的函数,一般是 system 函数, system("a.exe") ,检测该函数的返回值。
方法1(直接区分成功失败):
通过 || && 符号, ||表示失败执行后面的命令, &&表示成功执行后面的命令
Windows cmd 和Linux Shell都支持这种方式
RunYouApp || echo error
RunYouApp && echo ok
方法2 (获取返回码):
Windows cmd 用 %ERRORLEVEL% 变量
Linux shell 用 $? 变量