zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

C语言:头文件

2023-02-18 16:40:15 时间

这是很基础的教程,我只是写给自己看,作为一个学习笔记记录一下,如果正在阅读的你觉得简单,请不要批评,可以关掉选择离开

如何学好一门编程语言

  • 掌握基础知识,为将来进一步学习打下良好的基础。
  • 上机实践,通过大量的例题学习怎么设计算法,培养解题思路。
  • 养成良好的编码习惯,注释一定要写,要不然保你一周后自己写的代码都不认识了

头文件

  头文件是扩展名为 .h 的文件,包含了函数声明宏定义,能够被其他源文件(***.c)引用,一般使用 #include ***.h 来引用头文件。

   引用头文件相当于复制头文件的内容,但是我们不会直接在源文件中复制头文件的内容,因为这么做很容易出错,特别在程序是由多个源文件组成的时候。

优秀程序员的习惯:

  将 全局变量宏定义函数声明 和 宏定义 放在.h文件中

  将 函数定义 算法逻辑 放在.c文件中

头文件有两种类型:

  • 用户的头文件: #include "file"   // 导入用户头文件 
  • 编译器头文件: #include <file>   // 导入系统头文件 

引用头文件的操作

如果您有一个头文件 header.h 和程序 program.c,如下:

char *test (void);
header.h
int x;
#include "header.h"

int main (void)
{
   puts (test ());
}
program.c

编译器会看到如下代码信息:

int x;
char *test (void);

int main (void){
   puts (test ());
}

如果一个头文件被引用两次,编译器会处理两次头文件的内容,这将产生错误。为了防止这种情况,标准的做法是把文件的整个内容放在条件编译语句中,如下:

#ifndef HEADER_FILE    // 如果没有初始化 HEADER_FILE
    #define HEADER_FILE
#endif

配合#if预处理指令来导入头文件

#if SYSTEM_1
   # include "system_1.h"
#elif SYSTEM_2
   # include "system_2.h"
#elif SYSTEM_3
   ...
#endif

但是如果头文件比较多的时候,这么做是很不妥当的,预处理器使用宏来定义头文件的名称,我们可以导入宏名称 来代替:

 #define SYSTEM_H "system_1.h"
 ...
 #include SYSTEM_H

SYSTEM_H 会扩展,预处理器会查找 system_1.h,就像 #include 最初编写的那样。SYSTEM_H 可通过 -D 选项被您的 Makefile 定义。

 

在有多个 .h 文件和多个 .c 文件的时候,往往我们会用一个 global.h 的头文件来包括所有的 .h 文件,然后在除 global.h 文件外的头文件中 包含 global.h 就可以实现所有头文件的包含,同时不会乱。方便在各个文件里面调用其他文件的函数或者变量。

#ifndef _GLOBAL_H
#define _GLOBAL_H
#include <fstream>
#include <iostream>
#include <math.h>
#include <Config.h>

 

 

参考

菜鸟教程