目录

文章目录

  • 目录
  • 前文列表
  • 头文件
  • 只引用一次头文件
  • 有条件引用
  • global.h

前文列表

《程序编译流程与 GCC 编译器》
《C 语言编程 — 基本语法》
《C 语言编程 — 基本数据类型》
《C 语言编程 — 变量与常量》
《C 语言编程 — 运算符》
《C 语言编程 — 逻辑控制语句》
《C 语言编程 — 函数》
《C 语言编程 — 高级数据类型 — 指针》
《C 语言编程 — 高级数据类型 — 数组》
《C 语言编程 — 高级数据类型 — 字符串》
《C 语言编程 — 高级数据类型 — 枚举》
《C 语言编程 — 高级数据类型 — 结构体与位域》
《C 语言编程 — 高级数据类型 — 共用体》
《C 语言编程 — 高级数据类型 — void 类型》
《C 语言编程 — 数据类型的别名》
《C 语言编程 — 数据类型转换》
《C 语言编程 — 宏定义与预处理器指令》
《C 语言编程 — 异常处理》

头文件

头文件是扩展名为 .h 的文件,它包含了 C 函数声明和宏定义,可以被多个源文件引用并共享其中的函数声明与定义。

C 语言中存在两种类型的头文件:

  • 程序员编写的头文件
  • 编译器自带的头文件

要在程序中使用头文件,需要使用 C 预处理器指令 #include 来引用它。常见的 stdio.h 头文件,就是编译器自带的头文件,里面就包含了由 C 提供的标准库函数的声明。所以我们引入了 stdio.h 头文件之后就可以直接在源文件中调用这些函数了,实际上,在预处理阶段,预处理器就会根据预处理器指令来完成源文件中的文本替换,将头文件实际的物理路径写入。

建议把所有的常量、宏、系统全局变量和函数声明写在头文件中,在需要的时候随时直接引用这些头文件。

  • 引入系统头文件 #include <file>,它在系统目录的标准列表中(e.g. /usr/include 标准库头文件,/usr/local/include 第三方库头文件)搜索名为 file 的文件,如果没有,也不会检索当前文件所在路径,直接报错。可以通过 -I 选项指定目录。
  • 引入本地头文件 #include "fileName",在包含当前文件的目录中搜索名为 fileName 的头文件,如果没有,再检索系统目录的标准列表。

如果有一个头文件 header.h,内容为:

char *test(void);

在源文件中引入该头文件:

#include "header.h"int x;int main (void) {puts(test());
}

实际上编译器看见的是:

char *test(void);int x;int main (void) {puts(test());
}

只引用一次头文件

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

#ifndef HEADER_FILE
#define HEADER_FILEthe entire header file file#endif

上述例子,当再次引用头文件时,条件为 False,因为 HEADER_FILE 以及被定义了。

有条件引用

有时需要从多个不同的头文件中选择一个引入到程序中。例如,需要指定在不同的操作系统上使用的配置参数。可以通过一系列条件来实现这点,如下:

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

但是如果头文件比较多的时候,这么做是很不妥当的,预处理器使用宏来定义头文件的名称。这就是所谓的有条件引用。它不是用头文件的名称作为 #include 的直接参数,而是只需要使用宏名称即可:

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

global.h

在有多个 .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>

C 语言编程 — 头文件相关推荐

  1. C语言的头文件和库文件(函数库)

    C语言的头文件和库文件(函数库) 分类: Unix环境高级编程 2011-04-17 14:37 2576人阅读 评论(1) 收藏 举报 语言cgcclinuxunix 在C语言中,头文件提供对常量的 ...

  2. 在c语言中怎么返回引用参数,C语言函数 函数的声明 C语言的头文件 #include的用法 形参和实参 函数的返回值 - 猫扑天空...

    C语言函数 一.是什么? 是指编程中对一块功能代码的封装,可以理解一个程序片段 二.有什么用? 可以封装代码,方便调用,提高复用性 三.怎么用? 定义:  返回值类型  函数名(形参类型 参数名1-. ...

  3. C语言中头文件和源文件的注意事项

    C语言中头文件和源文件的注意事项 文章目录 C语言中头文件和源文件的注意事项 0.前言 1.实现步骤 1.1 拆分前 1.2 拆分后 2.总结 2.1头文件内容 2.2 源文件(.c)内容 2.3 函 ...

  4. c语言程序头文件作用,C语言头文件

    C语言头文件教程 C 语言的头文件一般都是 .h 做为结尾的. C语言头文件详解 语法 #include 参数 参数 描述 filename 我们需要引入的头文件的名称. 说明 C 语言的头文件一般都 ...

  5. c语言二叉树的头文件叫什么,西安交大朱站立数据结构——使用C语言》头文件系列——二叉树.doc...

    西安交大朱站立数据结构--使用C语言>头文件系列--二叉树 本文为二叉链存储结构的二叉树操作实现,实现了二叉树的定义.插入数据.删除数据.撤销以及二叉树的打印.前序遍历.中序遍历.后序遍历等.本 ...

  6. c语言的所有头文件,C语言所有头文件.doc

    C语言所有头文件 C语言所有头文件 stdlib.h包含了很多标准函数和标准宏定义,比如NULL, EXIT_SUCCESS等. ctype.h包含了很多类型定义 string.h包含了字符串操作相关 ...

  7. c语言头文件可以定义全局变量,C语言在头文件中定义全局变量

    C语言在头文件中定义全局变量 头文件定义全局变量等问题 全局变量可不可以定义在可被多个.C文件包含的头文件中?为什么? 可以,在不同的C文件中以static形式来声明同名全局变量.头文件中不可以直接定 ...

  8. C语言中头文件怎么写?(本文来源网络,由黑乌鸦进一步完善)

    c语言头文件怎么写?我一直有这样的疑问,但是也一直没去问问到底咋回事:所以今天一定要把它弄明白! 其实学会写头文件之后可以为我们省去不少事情,可以避免书写大量的重复代码.有利于整理思路.使代码脉络更加 ...

  9. c语言的函数头书写标准,C语言的头文件的函数和书写方法.doc

    C语言的头文件的函数和书写方法 C语言头文件作用及写法 头文件几个好处: 1,头文件可以定义所用的函数列表,方便查阅你可以调用的函数:2,头文件可以定义很多宏定义,就是一些全局静态变量的定义,在这样的 ...

最新文章

  1. C# Winform继承窗体打开设计器白屏的一例解决方法
  2. ASP.NET中Image控件不能自动刷新
  3. _Ansible批量管理与维护
  4. 一个有趣的python排序模块:bisect
  5. P3804 【模板】后缀自动机 (SAM)
  6. 使用计算机时什么是开机键什么是关机键,计算器上的开机键是关机键是
  7. oracle导入dmp清除之前,oracle导入dmp遇到的有关问题
  8. JMS(Java消息服务)与消息队列ActiveMQ基本使用(一)
  9. python学生名片系统_Python入门教程完整版400集(懂中文就能学会)快来带走
  10. python 如何做密码对话框_Python GUI教程(八):在主窗口中调用对话框
  11. Android之改变控件的背景及形态
  12. catia钣金根据线段折弯_SolidWorks钣金折弯边角余料处理技巧,钣金工艺设计师都在用...
  13. Wamp环境下集成【禅道】管理软件
  14. NeHe OpenGL第四十四课:3D光晕
  15. html手机截屏保存不了,华为手机截屏图像保存不了怎么处理?
  16. [lighttpd]referer字段实现域名过滤及放行指定域名不走重定向
  17. RISC-V MCU将常量定义到指定的Flash地址
  18. httpclient-4.3.6工具类,方便直接使用
  19. AD9854 MSP430 代码总结
  20. ipv6dns服务器后面为空,ipv6获取不到网关和dns服务器

热门文章

  1. iOS 9应用开发教程之ios9中实现按钮的响应
  2. pci数据捕获和信号处理 感叹号_大学毕业设计一席谈之十五 扩频信号的捕获 (1)...
  3. EEGLAB处理脑电视频教程 part1-3
  4. 基于EEG/EMG/EOG的多模态人机接口,实时控制软机器人手
  5. Nilearn教程系列(3)-ICA静息功能磁共振成像的分组分析:CanICA
  6. 苹果5年来盈利首次未超预期,但大中华区营收暴增83%
  7. 这老哥把GPU当暖气用,省钱了
  8. MIT新研究给量子计算机「泼冷水」:自然界辐射会干扰它,需要研究新对策 | Nature...
  9. 解读2019华为第001号文件:AI时代软件开发的第一要义是可信
  10. 世界AI大会三马纵论:马云乐观、马斯克悲观,马化腾认为技术孤立主义有大危害...