头文件是一种文本文件,使用文本编辑器将代码编写好之后,以扩展名.h保存就行了。头文件中一般放一些重复使用的代码,例如函数声明、变量声明、常数定义、宏的定义等等。当使用#include语句将头文件引用时,相当于将头文件中所有内容,复制到#include处。#include有两种写法形式,分别是:
#include <> : 直接到系统指定的某些目录中去找某些头文件。
#include “” : 先到源文件所在文件夹去找,然后再到系统指定的某些目录中去找某些头文件。
 #include文件可能会带来一个问题就是重复应用,如a.h引用的一个函数是某种实现,而b.h引用的这个函数却是另外一种实现,这样在编译的时候将会出现错误。所以,为了避免因为重复引用而导致的编译错误,头文件常具有:
#ifndef    LABEL
#define    LABEL

//代码部分

#endif
的格式。其中LABEL为一个唯一的标号,命名规则跟变量的命名规则一样。常根据它所在的头文件名来命名,例如,如果头文件的文件名叫做hardware.h,那么可以这样使用:
#ifndef    __HARDWARE_H__
#define    __HARDWARE_H__
    //代码部分
#endif

这样写的意思就是,如果没有定义__HARDWARE_H__,则定义__HARDWARE_H__,并编译下面的代码部分,直到遇到#endif。这样当重复引用时,由于__HARDWARE_H__已经被定义,则下面的代码部分就不会被编译了,这样就避免了重复定义。

一句话,头文件事实上只是把一些常用的命令集成在里面,你要用到哪方面的命令就载入哪个头文件就可以了。

gcc寻找头文件的路径(按照1->2->3的顺序)
1. 在gcc编译源文件的时候,通过参数-I指定头文件的搜索路径,如果指定路径有多个路径时,则按照指定路径的顺序搜索头文件。命令形式如:“gcc -I /path/where/theheadfile/in sourcefile.c“,这里源文件的路径可以是绝对路径,也可以是相对路径。eg:
设当前路径为/root/test,include_test.c如果要包含头文件“include/include_test.h“,有两种方法:
  1) include_test.c中#include “include/include_test.h”或者#include "/root/test/include/include_test.h",然后gcc include_test.c即可
  2) include_test.c中#include <include_test.h>或者#include <include_test.h>,然后gcc –I include include_test.c也可
2. 通过查找gcc的环境变量C_INCLUDE_PATH/CPLUS_INCLUDE_PATH/OBJC_INCLUDE_PATH来搜索头文件位置。
3. 再找内定目录搜索,分别是
/usr/include
/usr/local/include
/usr/lib/gcc-lib/i386-linux/2.95.2/include
最后一行是gcc程序的库文件地址,各个用户的系统上可能不一样。
gcc在默认情况下,都会指定到/usr/include文件夹寻找头文件。
gcc还有一个参数:-nostdinc,它使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置。在编译驱动模块时,由于非凡的需求必须强制GCC不搜索系统默认路径,也就是不搜索/usr/include要用参数-nostdinc,还要自己用-I参数来指定内核头文件路径,这个时候必须在Makefile中指定。
 4. 当#include使用相对路径的时候,gcc最终会根据上面这些路径,来最终构建出头文件的位置。如#include <sys/types.h>就是包含文件/usr/include/sys/types.h

Linux下头文件.h的使用相关推荐

  1. [Linux] 头文件加载顺序

    参考 Linux下头文件搜索路径 "header.h" #include "header.h" 各目录存在相同文件时,先找到哪个使用哪个.加载顺序如下: 当前目 ...

  2. linux 没有windows.h头文件_宋宝华: Linux内核编程广泛使用的前向声明(Forward Declaration)...

    本文系转载,著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 作者:宋宝华 来源: 微信公众号linux阅码场(id: linuxdev) 前向声明 编程定律 先强调一点:在一切可 ...

  3. Linux实现ffmpeg H.265视频编码

    Linux实现ffmpeg H.265视频编码 几乎所有观看的视频,数字地面电视,电缆,卫星或互联网上的压缩.原始的,未压缩的视频太大,会浪费太多的带宽.在DVD和Blu-ray之前,有视频CD(VC ...

  4. linux下文件字符集转化实战篇

    linux下文件字符集转化实战篇 ------------------------------------------ 为什么转换编码,起因:分析应用程序日志,文件编码格式gb2312(含中文字符), ...

  5. extern与头文件(*.h)的区别和联系

    原文网址为:http://lpy999.blog.163.com/blog/static/117372061201182051413310/ 个人认为有一些道理:所以转过来学习了. 用#include ...

  6. linux 环境变量文件_应急响应系列之Linux库文件劫持技术分析,有点硬核哟

    0×01 菜逼阶段 Linux库文件劫持这种案例在今年的9月份遇到过相应的案例,当时的情况是有台服务器不断向个可疑IP发包,尝试建立连接,后续使用杀软杀出木马,重启后该服务器还是不断的发包,使用net ...

  7. winscp linux中文文件夹名称乱码,解决windows传送到linux下中文文件名及文件内容乱码问题...

    linux下文件编码转换: 方法一: 在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式 :set fileencoding=utf-8 或者 11)设置文件集合,即要对哪些文件进行操 ...

  8. Linux内核文件vmlinux 和压缩后的bzImage文件格式分析

    Linux内核文件vmlinux 和压缩后的bzImage文件格式分析 ================= 1. 需要使用的命令 ================ readelf    -- 显示el ...

  9. linux 文件类型 管理,Linux的文件类型及用户管理

    Linux的文件类型 -,f:普通文件 d:目录文件,路径映射 l:链接文件(符号链接)软连接 设备文件: c:字符设备,一次存取一个字符 b:块设备 p:管道文件 fi,fo s:套接字文件,soc ...

最新文章

  1. 96.6. Template
  2. ASP.NET在IIS上部署使用Oracle数据库无法连接数据库解决方法
  3. 03_Linux文件和目录
  4. redis java 性能_Redis 性能优化
  5. php如何生成订单号,php如何生成不重复订单号
  6. [转] 用Diff和Patch工具维护源码
  7. Qt工作笔记-WebEngineView调用web站点中的JS脚本(含Vue Cli脚本)
  8. (102)FPGA面试题-如何选择FPGA型号?
  9. 优化mysql的21个建议_MySQL优化小建议
  10. 【公开课视频】ASP.NET MVC+EF入门-20130315
  11. 【leetcode】给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff数对。
  12. 今天 Java 14 正式发布了!放弃 Java 8 行吗?
  13. STM32F103RCT6移植到STM32F103C8T6注意事项
  14. DH 算法迪菲-赫尔曼算法QUIC协议和HTTP3.0
  15. jsp调整字体大小font_html font标签如何设置字体大小?
  16. JAVA常用http请求工具类封装
  17. Rhino6.9软件安装教程|兼容WIN10
  18. 51单片机八位数码管1到F动态滚动显示仿真及程序
  19. HTML导出生成Word文档
  20. 安卓手机和电脑之间传文件最方便的方法

热门文章

  1. python默认编码有什么用_Python2.7.8的默认编码是什么?
  2. 如何新建Spring Boot工程
  3. 归并排序的java代码_归并排序的原理及java代码实现
  4. sql oraoledb.oracle,无法创建链接服务器XXXXX的 OLE DB 访问接口OraOLEDB.Oracle的实例。 (Microsoft SQL Server,错误7302)...
  5. ccf会议等级划分_Python计算山东新高考选考科目卷面原始成绩为等级成绩
  6. Mysql索引查询失效的情况
  7. MVC路由 路由的三种扩展 替换MVC内置的Handler
  8. 404 Note Found 队 Alpha8
  9. 杂文笔记《“去QE”时代下,QE如何破茧重生》
  10. jmeter+ant+jenkins接口自动环境搭建