忽略c文件中的stdio.h文件

时间:2012-11-28 10:15:29

标签: c linux gcc

  

可能重复:
  Why #include <stdio.h> is *not* required to use printf()?

我在下面给出的代码中遇到了问题。

int main()
{
printf("\nHello Stack Overflow\n\n") ;
return 0 ;
}

在上面提到的代码中我留下了包括“#include”。 如果我编译并执行这段代码,输出将按预期打印。但是“#include”是C程序中最重要的东西,我忽略了它,但编译完成时没有任何错误,但有警告。

为什么会这样?

3 个答案:

答案 0 :(得分:2)

在C中,未声明的函数被隐式地视为返回int并获取int个参数。

这是不良做法并会咬你。例如,如果要打印的数据大小与int的大小不同,例如doublefloat

答案 1 :(得分:0)

来自 man gcc

   -nostdlib
       Do not use the standard system startup files or libraries when linking.  No startup files and only the libraries you specify will be
       passed to the linker.  The compiler may generate calls to "memcmp", "memset", "memcpy" and "memmove".  These entries are usually
       resolved by entries in libc.  These entry points should be supplied through some other mechanism when this option is specified.

答案 2 :(得分:0)

printf 符号在编译时是未知的,但 libc 在链接的 implicite 中已知为二进制...这就是它的工作原理。