使用部分函数时并未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 进行库查找...

原文地址:https://www.cnblogs.com/simoncook/p/12286271.html

时间: 2024-11-07 19:38:47

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

关于头文件是否参与编译的讨论

一.文章来由 写项目的时候发现了这个问题,又是一个比较底层的问题,首先说明,这篇文章只是我根据查阅的资料和做的实验提出的一个讨论,并不一定就是正确答案.因为这个问题网上众说纷纭,我很欢迎大家参与这个讨论,一起搞懂这个问题~~~ 二.问题的提出 问题就是... 2.1 问题1(主问题): 头文件是否真正参与编译? 先上一个网上的标准答案: .h的内容被插入到.c中,作为.c的内容被编译..h文件本身不直接参加编译. 据我理解,这句话就是说明了头文件不直接参与编译,是作为一个插入来理解. 也就是说:

C++头文件中预编译宏的目的

C++头文件中预编译宏的目的 eg: #ifndef _FACTORY_H_#define _FACTORY_H_......#endif //~_FACTORY_H_ 防止头文件被重复包含,导致变量或类型被重复定义 C++头文件中预编译宏的目的

linux下编译时的默认库和头文件搜索路径

链接库路径 默认的链接库路径,定义在搜索/etc/ld.so.conf下的一些路径,其包含了一些重要的系统位置:LIBRARY_PATH, 但如果定义了LD_LIBRARY_PATH, 动态库的搜索路径会先去该环境变量下搜索 但如果定义了LIBRARY_PATH, 静态库的搜索路径会先去该环境变量下搜索 默认的头文件位置 还没找到默认头文件定义的配置文件,与系统,编译器等都有关系,但可以通过以下命令查看 cpp -v /dev/null -o /dev/null 除此之外,可以通过设置C_INC

安装psutil时提示缺少python.h头文件(作记录)

通过pip或者源码安装psutil,都会提示缺少python.h头文件,错误提示如下: ... psutil/_psutil_common.c:9:20: fatal error: Python.h: No such file or directory #include <Python.h> ^ compilation terminated. error: command 'gcc' failed with exit status 1 ... 出现此错误的原因是没有安装python-devel

Linux-使用ctags、vim查看数据类型所在头文件

安装 ctags yum -y install ctags 生成 tags 文件 cd /usr/include ctags -R . 在 vim 中配置 tags #修改 vim 配置文件.或者使用 vim ~/.vimrc vim /etc/vimrc #在 vim 配置文件中加入下面一行 set tags+=/usr/include/tags 使用 Ctrl+ ] 跳到光标所在函数或者结构体的定义处使用 Ctrl+ T返回查找或跳转 更多 ctags 用法请学习 ctags.

include &lt;ctype.h&gt; 头文件包含函数总结

里面包含的函数主要是: 1.字符测试函数,函数原型一般为:int isXXXX( int ); 参数为int, 只能正确处理[0, 127]. 2.字符映射函数,函数原型一般为:int toXXXX( int ); 对参数进行检测, 若符合范围则转换, 否则不变 int tolower( int );  'A'~'Z' ==> 'a'~'z'   // 先判断是不是小写字母,如果不是,则将其转换成小写字母   (简单记忆:to lower int toupper( int );  'a'~'z'

#include&lt;math.h&gt;头文件藏的函数

1.floor作用:一般用于处理精度问题  floor是向下取整,比如4.5取4 double right=4.5234; printf("%.2lf\n",floor(right*100)/100); //答案是4.52 double right=4.53; printf("%.2lf\n",floor(right)); //答案是4 double right=4.52; printf("%.2lf\n",floor(right)/100);

本站点 头文件 本人代码由centos6.5虚拟机运行

wz.h ////////////////////////// #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<assert.h> #include<errno.h> #include<string.h> #include<time.h> #include <time.h>  #include <stdarg.

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

一.问题引入 1.头文件与库 当我们在PC主机linux环境下(如ubuntu),编写linux应用程序,然后利用gcc来编译.在源代码的开始位置会写入头文件,那是因为我们使用了系统提供的库函数,例如printf.open.read.write等等.我们会写入类似的内容: #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> ...... 我们的应用程序代码