我刚用gcc编译了我的hello world c程序并在ubuntu中运行它。因为我通过emacs运行它,我得到了程序的退出代码:13。为什么13?我没有指定任何内容,为什么它没有默认为0?当我在最后放置退出功能时,我可以更改它,但我想知道这个默认值的重要性是什么。
代码:
#include<stdio.h>
int main()
{
printf("Hello, world!");
}
答案 0 :(得分:5)
从C99开始,在没有返回的情况下到达main
的末尾与返回零(仅main
,而不是一般的所有函数)相同。在C99之前(我相信gcc
默认为C89 / 90作为基线),没有定义会发生什么,所以如果你需要的话,你应该明确地返回零。
或者您可以通过使用-std=c99
或c11
进行编译来采用C99 / C11。
就13的原因而言,它既不相关也不可移植,但很可能返回代码是eax寄存器中的任何内容(或者如果您使用不同的调用约定或体系结构,则等效)。对于x86,这可能仍然是从printf
返回的值,它返回打印的字符数。
答案 1 :(得分:-3)
您可以使用void main()而不是int main(),因此您不必提供任何返回类型,但如果您使用int main,则必须提供return语句