头文件

  • 为什么会有头文件;
  • 怎么制作头文件;
  • 我们的编译器是怎么找到头文件;
  • 模块:有组织有结构的来给代码划分模块,处理同一个功能代码,我们放到一个模块里面,.c文件

假设我们新增一个数学函数源文件,并且添加到编辑器
c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径


代码模块的原则:

  • 如果这个函数接口,可以公开给外部使用,那么就要把这个函数的声明编写到头文件
  • 如果这个函数接口,不给外部使用,那么一定不要把这个函数声明放到头文件
  • 注意在编写头文件的时候为了方便维护,一般使用和模块的.c文件同名的.h文件,或有意义的名字

制作头文件

  • 怎么来制作文件
  • 防止重复包含

c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径


当我们要使用这个模块的接口的时候;
我们可以包含这个接口头文件;

c/c++ _c语言模块_头文件_源文件_头文件搜索路径


防止重复包含的格式

c/c++ _c语言模块_头文件_源文件_头文件搜索路径


  • 防止头文件包含的宏 的格式
  • 文件名_H 里面所有的字母都是大写的;

c/c++ _c语言模块_头文件_源文件_头文件搜索路径

能够节省编译器编译程序所需要的时间


头文件搜索路径

编译器是怎么找到我们的头文件

  • 1:#include ""是在工程项目里面来搜索头文件,./,../;
  • ./:当前编译的.c 所在的文件夹的位置开始搜索;
  • 指当前main.c 文件当前所在的文件夹位置
  • c/c++ _c语言模块_头文件_源文件_头文件搜索路径
  • ../:上一层文件夹;

c/c++ _c语言模块_头文件_源文件_头文件搜索路径
当前文件夹的下一级查搜索

c/c++ _c语言模块_头文件_源文件_头文件搜索路径

如果找不到就会到编译器自带的头文件目录下去搜索

c/c++ _c语言模块_头文件_源文件_头文件搜索路径
如果再找不到回到用户自定义的头文件搜索路径去查找;

c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径

  • 2: #include <>
    • 会去编译器的自带头文件目录下去查找
    • 会到用户自定义的头文件搜索路径去查找
  • -

c/c++ _c语言模块_头文件_源文件_头文件搜索路径


什么情况下使用<>,什么情况下使用” “

  • 1 如果是系统头文件,string.h,stdlib.h等,使用<>
  • 2 如果是独立的第三方模块安装的 <>比如 mysql.h
  • 如果是自己项目的头文件,一定使用” “
  • 为什么不全部使用”“,而还要混合<>来寻找呢??
    • 加快编译器搜索头文件的速度;
    • 方便我们维护,<>我们知道这个代码模块是来自第三方,或系统库,或外部

extern

声明我们有一个外部模块定义了这个全局变量

c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径


c/c++ _c语言模块_头文件_源文件_头文件搜索路径


隐藏的问题,vc全局变量不加类型也能编译过,当做整数

c/c++ _c语言模块_头文件_源文件_头文件搜索路径


代码模块

c/c++ _c语言模块_头文件_源文件_头文件搜索路径

相关文章: