文/Edward之前我们已经讲到过,#include预处理指令使另外一个文件的内容在预处理的时候,先会被复制到当前的.c文件中来,产生一个中间文件,一般情况下,这个中间文件是存储在编译器内存里面的,它不会被输出,但是我们可以使用gcc命令来将这个文件存储下来,即使用” gcc -E ./helloworld.c > a.out”命令,即可将预处理产生的内容保留出来。如图1所示。图1 预处理输出文件我们在图1中,仅仅简单地包含了一个我们自己写的一个头文件,这个头文件里面有一个#define定义的标号MAX,也有一个变量a,当我们包含了这个头文件并且进行编译的时候,编译器便会将头文件里面的内容在编译流程的预处理阶段把.c源文件中的相关标号定义全部替换掉,如果.h头文件里面包含了变量的定义,便会将变量的定义原封不动地复制到.c源文件中。以上内容就是文件包含的全部内容。然而#include预处理如果再深究下去,它的内容可不止如此。  库函数的包含和本地头文件的包含前面我们也讲到过,用#include包含头文件的时候,根据包含的头文件到底是库函数还是用户自己写的本地头文件分别有不同的包含方式。如果用#include包含库函数,那么其包含的方式为:#include <filename>对于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 反面教材

.h文件包含后显示类型_C语言中#include只能包含.h文件吗?相关推荐

  1. C语言中#include < stdio.h >的意思

    简单来说,#include < stdio.h >是C语言中的一个头文件. 那么头文件有什么用?C语言的头文件中包括了各种标准库函数的函数原型.只有写出头文件,才能调用这些函数,比如输入输 ...

  2. 双击EXCEL2016文件打开后显示为灰色空白,再次双击该文件才可打开【已解决,参考他人,仅供参考】

    安装Office 2016后,双击EXCEL文件打开后显示为空白. 解决办法: 开始--运行--regedit 修改HKEY_CLASSES_ROOT\Excel.Sheet.12\shell\Ope ...

  3. c语言用string类型,c语言中的string

    1. strlen(char const* s); 函数传入的是c风格字符串(即以'\0'结尾的字符数组),返回的长度为size_t(即unsigned int),其长度不包括'\0'. 2. str ...

  4. c语言include不起作用,c语言中include的使用方法

    c语言中include的使用方法 发布时间:2020-06-16 09:09:37 来源:亿速云 阅读:185 作者:Leah 这篇文章将为大家详细讲解有关c语言中include的使用方法,小编觉得挺 ...

  5. c语言include的用法 相对目录 绝对目录,c语言中include的用法

    <c语言中include的用法>由会员分享,可在线阅读,更多相关<c语言中include的用法(3页珍藏版)>请在人人文库网上搜索. 1.c语言中in elude 的用法c语言 ...

  6. c语言 recv_sin,C++_C语言中经socket接收数据的相关函数详解,recv()函数: 头文件:#incl - phpStudy...

    C语言中经socket接收数据的相关函数详解 recv()函数:头文件: #include #include 定义函数: int recv(int s, void *buf, int len, uns ...

  7. 8位alu运算器(vhdl语言)_C语言中signed char类型,能表示-128到127,为什么负数多一位?...

    初学者在学习C语言,谈到不同数据类型时,一般都能理解 unsigned 和 signed 的区别,无非就是有无符号而已.但是对于 signed 数据类型的数据范围,初学者却常常会感到迷惑. 对于 si ...

  8. 单片机sleep函数的头文件_C语言中的sleep() 函数

    展开全部 关于sleep()函数在windows系统和linux系统下是两个不同的函数,差别较大,但功能是相同的,都是将进程挂起e68a8462616964757a686964616f31333337 ...

  9. c语言 system(quot;pausequot;);,pause什么意思_C语言中system(quot;pausequot;)是什么作用和意...

    C语言中system("pause")是什么作用和意思 从程序中发起系统命令行调用,执行命令:pause. 作用和效果就是dos下的pause. system("PAUS ...

最新文章

  1. Markdown 修改图片的尺寸
  2. vue路由切换和用location切换url的区别
  3. Swagger2的使用
  4. 浪潮服务器 NF 8460M4 的PM8060 RAID卡设置添加热备方法
  5. matlab中 mcc/mbuild/mex 区别
  6. 糖葫芦低通滤波器的设计
  7. 【2017-01-09】 资料链接摘录
  8. numpy部份函数或命令用法(不定时更新)
  9. 首选电商淘宝商品详情API接口(数据获取)
  10. 新生研讨课:利用OpenCV处理带有水印的图片的调研报告
  11. 美智光电IPO被终止:年营收9.26亿 何享健为实控人
  12. excel删除无尽空白行_?Excel你不知道的神技巧:提升工作效率必备,值得老师收藏!...
  13. APP开发定制需求的常说分销模式,对于分销大家了解多少呢?
  14. Dubbo NoSuchMethodException: Not found method “xxx“ in class xxx问题解决
  15. 微信群打卡小程序_用微信小程序“小打卡”,打造免费的阅读平台!
  16. Java八股文基础知识
  17. RabbitMQ系列教程一:消息中间件的诸侯征战史
  18. 计算机音乐制作专业美国研究生,美国音乐制作专业研究生六大首选音乐学院
  19. Mybatis的ResultMap结果集映射
  20. 关于铅酸蓄电池的充放电实验以及安装调试

热门文章

  1. php使css无法居中,css怎么整体居中
  2. 一个完整的项目流程图_工程建设项目史上最完整的全流程图,必收藏备用!
  3. bci测试如何整改_基于fNIRS技术的脑机接口(BCI)
  4. Python花式编程案例集锦(6)
  5. Python批量提取PDF文件中的文本
  6. Linux 动态库与静态库的概念及创建使用
  7. basic与java,[求助]郁闷啊~!有没有会BASIC和JAVA的!帮帮忙呀!
  8. oracle as sydba,Oracle的操作系统认证(/ as sydba 登录方式)
  9. adb ps shell 查看进程_注入 init 进程,使得 APP 可调试
  10. java textarea append_JavaFX TextArea.append()导致java.lang.NullPointerException