在哪里检查shell返回的值描述

时间:2013-12-31 12:33:58

标签: c linux shell unix

当我们在unix / linux 中执行任何C程序而不返回任何值时,shell会返回一些值。

就我而言,它返回 11

我的程序很简单:

main(){
    printf("Hello World");
}

输出:

Hello World
Shell返回11

在哪里可以看到“Shell返回11”的描述

3 个答案:

答案 0 :(得分:4)

在Unix和Linux系统上,C程序返回shell的值是

  • 256 +如果程序因信号而终止的信号编号
  • 传递给exit_exit的调用值的最低8位
  • return
  • main语句中值的最低8位
  • 如果使用C99标准编译器编译并声明main返回与int兼容的值,则从main的末尾掉落将导致退出值为0.
  • 未定义的行为

在您的情况下,它是未定义的行为。看起来printf的返回值是11,因为这是写入的字符数。由于在printf的调用和main的结尾之间没有中间函数调用,因此该值保留在存储函数返回值的寄存器中。

您不能依赖此行为。它将根据编译器,运行时库和操作系统而有所不同。最好拨打exit或在return中使用带有值的main语句。

退出代码值有一些约定。请参阅Are there any standard exit status codes in Linux

答案 1 :(得分:0)

编译器隐式理解main返回一个int。您应该使用-Wall编译此警告(以及许多其他有用的警告)。 改为:

int main(){
    printf("Hello World");
    return 0; // success
}

或者:

void main(){
    printf("Hello World");
    // returns zero to the shell unless exit(SOME_NON_ZERO_VALUE) was called
}

答案 2 :(得分:0)

是shell返回的字符串(传入“”到printf函数中)。

Mark Plotnick发布的答案是正确的,因为我验证了它并尝试使用不同的参数来printf()函数。

谢谢大家的回复。