作为一个C语言的初学者,我在尝试一些东西,所以我排除了标准库<stdio.h>
,仍然没有错误有人能解释一下吗?
下面是示例代码:
main()
{
printf("hello, world!\n");
}
无论是否使用库,此程序都是相同的。为什么?
最佳答案
TL;DR——排除的是头文件,而不是标准库。
如果排除函数具有forward声明的头文件,则会收到一条警告,其中肯定提到了函数的“隐式声明”。
在这种情况下,(根据最新标准无效),函数将被假定返回int
,并且不会检查传递的参数数量。
但是,默认情况下,从源代码生成的对象文件链接到默认的C库libc
,该库具有函数定义。在这种情况下,函数返回类型与隐式大小写匹配,因此链接器很高兴地将对象文件链接在一起。
因此,它成功地完成了链接,并且工作正常。
也就是说,main()
应该int main(void)
,至少符合标准。