使用部分函数时并未include其所在头文件,但是能编译成功且能运行,为什么?

Posted simoncook

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用部分函数时并未include其所在头文件,但是能编译成功且能运行,为什么?相关的知识,希望对你有一定的参考价值。

最近在看APUE,试了上面的一些例子,其中有个例子是使用getpid函数获取进程id,但是在我写demo时,并未引入其所在的头文件unistd.h,结果也能编译成功,也能运行,于是就琢磨下为啥。
Environment info: Ubuntu 18.04.2 LTS, gcc (Ubuntu 4.8.5-4ubuntu8) 4.8.5
示意代码如下:

int main (int argc, char *argv[]) {
    long pid = (long)getpid();
    long test = pid + 1;
}

在satckoverflow上有人告诉我,因为我用的是GCC4系列,使用是的C90标准且自带GUN扩展,所以对这种问题不给出警告,且能成功运行。
如果是C99标准就会编译时有警告。
同时指出即使能成功运行但是这是一个不好的习惯,所以还是要严格include

我意外试了下 在CDT中可以一样使用ctrl+shift+o 进行自动include
也可以使用 ctrl+shift+T 进行库查找...

以上是关于使用部分函数时并未include其所在头文件,但是能编译成功且能运行,为什么?的主要内容,如果未能解决你的问题,请参考以下文章

单片机c语言中常用的头文件有哪些?分别有啥作用啊?

C/C++编码规范

linux编程头文件所在路径的问题

Linux-使用ctagsvim查看数据类型所在头文件

预处理指令

C语言怎么把自定义头文件添加到函数库中