$?是Linucx shell中的一个内置变量,其中保存最近一次运行的进程的返回值。这个返回值有以下三种情况。
1,程序的main函数运行结束,$?保存main函数的返回值。
2,程序运行中调用exit函数结束执行,$?中保存exit的参数。
3,程序异常退出,$?保存异常的出错号。
#include<stdio.h>
int main()
{
ruturn 5;
}
运行该代码后,执行echo ¥?,显示:5
$?内置变量中的1表示shell运行程序出错,在shell默认的路径找不到指定的程序。所以在编写代码时如果没有出错,则不要用main函数return 1 或者exit(0)这样的写法,以免引起不必要的混乱。
再看另一段代码
#inclide<stdio.h>
int main()
{
printf("hello world\n");//没有return 语句
}
这时echo $?显示12,即printf函数的返回值,因此有可能echo$?取的就是eax寄存器的值,不过如果是这样,那假设本电脑是多处理器的,运行一个多线程程序,多个线程同时返回,那这时echo $?的返回值又是什么呢?唉,暂时不得而知。。。。
(文中大部分内容出自《linux c 程序设计大全》吴岳)