当我们在unix / linux 中执行任何C程序而不返回任何值时,shell会返回一些值。
就我而言,它返回 11
我的程序很简单:
main(){
printf("Hello World");
}
输出:
Hello World
Shell返回11
在哪里可以看到“Shell返回11”的描述
答案 0 :(得分:4)
在Unix和Linux系统上,C程序返回shell的值是
exit
或_exit
的调用值的最低8位return
main
语句中值的最低8位
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()函数。
谢谢大家的回复。