千家信息网

C语言中include能包含什么文件

发表于:2025-02-21 作者:千家信息网编辑
千家信息网最后更新 2025年02月21日,本篇内容主要讲解"C语言中include能包含什么文件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言中include能包含什么文件"吧!文/Edwa
千家信息网最后更新 2025年02月21日C语言中include能包含什么文件

本篇内容主要讲解"C语言中include能包含什么文件",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C语言中include能包含什么文件"吧!

文/Edward

之前我们已经讲到过,#include预处理指令使另外一个文件的内容在预处理的时候,先会被复制到当前的.c文件中来,产生一个中间文件,一般情况下,这个中间文件是存储在编译器内存里面的,它不会被输出,但是我们可以使用gcc命令来将这个文件存储下来,即使用" gcc -E ./helloworld.c > a.out"命令,即可将预处理产生的内容保留出来。如图1所示。

图1 预处理输出文件

我们在图1中,仅仅简单地包含了一个我们自己写的一个头文件,这个头文件里面有一个#define定义的标号MAX,也有一个变量a,当我们包含了这个头文件并且进行编译的时候,编译器便会将头文件里面的内容在编译流程的预处理阶段把.c源文件中的相关标号定义全部替换掉,如果.h头文件里面包含了变量的定义,便会将变量的定义原封不动地复制到.c源文件中。以上内容就是文件包含的全部内容。
然而#include预处理如果再深究下去,它的内容可不止如此。

库函数的包含和本地头文件的包含
前面我们也讲到过,用#include包含头文件的时候,根据包含的头文件到底是库函数还是用户自己写的本地头文件分别有不同的包含方式。
如果用#include包含库函数,那么其包含的方式为:
#include
对于filename不存在任何限制,不过根据约定,标准库的库文件以一个.h后缀结尾。编译器通过查找由编译器定义的"一系列标准库路径"来查找库函数的头文件。比如,在典型的UNIX/类UNIX系统上,C编译器在/user/include/目录中去查找库函数的头文件。
如果是本地头文件的包含,那么其包含方式为:
#include "filename"
这个头文件如果和所有的源文件放置在一个目录底下,那么就无需去显式地指明其路径。如果不在同一个文件夹下,那么UNIX和BorlandC编译器都支持一种变体形式,即使用绝对地址的路径名。如:
#include "../src/usart/ usart.h"

头文件的形式
再来想一想,C语言中的#include只能支持包含.h后缀的头文件吗?其实不然,除了C语言标准库文件在编写时是按照约定以.h结尾的,用户自己定义的头文件根本就没有这一条规定。比如图2所示。

图2 C语言包含乱七八糟后缀名的头文件

在图2中大家可以看到,我在b.c这个C语言源文件里面包含了一个c.x的头文件,这个c.x后缀名我自己也不知道是什么意思。但是奇怪的是,编译器在做预处理的时候,竟然将c.x文件中的内容正常的处理过来了,除了VSCode做代码静态解析的时候,有错误提示之外,其他貌似什么事情都没有发生。因此,在一个.c文件里面用#include包含什么后缀的文件,在C语言里面没有规定。只不过约定俗成,都用.h结尾的文件来当头文件而已。
但是,C语言中源文件的后缀名有明确要求,一定要用.c后缀的文件。

头文件里面的内容
接下来,最后一个内容,头文件里面到底可以用来写什么内容。这个问题非常玄乎,C语言也没有规定,随便你自己去写。我之前看到过有个哥们(一个半路出家的工程师)将函数全部定义在头文件中。对于这样的人才,我除了说他天资聪颖,资质过人,骨骼精奇这样的褒义词之外,根本就词穷了。C语言的头文件里面的的确确可以用来写函数,你没有听错,我再写一遍,的的确确可以用来写函数。但是,这样子写出来的函数很难被多个其它文件包含。这个问题我本来不想展开讲解,因为杀伤力太大,我怕将这个反面教材正面化了。但是满足大家的好奇,还是贴出来了,如图3所示。
图3 反面教材

到此,相信大家对"C语言中include能包含什么文件"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文件 内容 语言 函数 编译 后缀 编译器 预处理 时候 源文件 变量 方式 标准 路径 c.x 约定 反面 反面教材 命令 库文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 怎么看服务器cpu能不能绑核 数据库属于OSI的哪一层 太仓数据网络技术市场价格 组宣部网络安全工作责任状 家庭电影服务器软件 网络安全密码是什么 违反网络安全被记入信用档案 四十岁以上数据库管理员 健值数据库目前应用最多的是 美股配资软件开发 配置软件开发 学软件开发需要什么文化 资源管理系统数据库设计 上海智慧门禁软件开发怎么收费 软件开发老是晚于周期怎么办 sql数据库企业版安装 关于人社系统开展网络安全的通知 扬州租房网络安全 安卓查数据库表 新三板数据库哪里有 数据库技术三级考题 云海服务器管理中心起火 数据库时间索引 快递企业的数据库模型 单位网络安全检查看上网记录吗 数据库修改连接密码怎么修改 网络安全审查工作开展情况 湖南电子商务微服务架构数据库 服务器配件渠道竞争分析 酷甩触摸软件开发
0