不包括<stdio.h>

ven*_*kat 5 c implicit-declaration

下面给出的程序工作不包括<stdio.h>?为什么这样做?

int main()
{
    printf("integra");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

aTJ*_*aTJ 8

printf()的定义存在于libc.so中,即使您不包含头文件,动态链接器也会处理它.在编译期间,printf()将是一个未定义的符号,它假定它可能稍后在libc中找到定义.头文件将只提供proto-type并禁止编译器(警告)声明原型的定义存在于glibc中.所以基本上,包含头文件只是为了确保我们的库中有定义,以帮助开发人员.


J-1*_*DiZ 7

在旧标准中,未声明的函数假定int参数和返回值.你的char*大小(32位)相同int,所以一切正常.

只是不要这样做.


Abi*_*Abi 5

printf()仅在libc.so中定义

动态链接器将解析libc中的符号printf(),因为您尚未包含它

每个程序的libc默认为gcc


ta.*_*.is 1

一些(旧的?)编译器在调用函数之前不需要原型。