C语言头文件深入理解

article/2025/9/17 10:25:30
C语言程序中,源文件通常分为两种:一种用于保存程序的声明(declaration),称为头文件;另一种用于保存程序的实现(implementation),称为定义(definition)文件。 C程序的头文件以“.h”为后缀,C 程序的定义文件以“.c”为后缀。

可以将 .h 文件的内容写在 .c 文件中,也可以将 .c 文件的内容写在 .h 中,但这是很不好的习惯。许多初学者用了头文件,却不明其理。在此略作说明。

在以下场景中会使用头文件:
  • 通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功 能,而不必关心接口怎么实现的。
  • 多文件编译。将稍大的项目分成几个文件实现,通过头文件将其他文件的函数声明引入到当前文件。
  • 头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。

编译时只有函数声明没有函数定义是完全正确的。函数声明告诉编译器该函数已经存在,但是入口地址还未确定,暂时在此做个标记,链接时编译器会找到函数入口地址,并将标记替换掉。

编译产生的 .obj 文件(Linux下为 .o 文件)已经是二进制文件,与 .exe 的组织形式类似,只是有些函数的入口地址还未找到,程序不能执行。链接的作用就是找到函数入口地址,将所有的源文件组织成一个可以执行的二进制文件。

关于头文件的内容,初学者还必须注意:
  • 头文件中可以和C程序一样引用其它头文件,可以写预处理块,但不要写具体的语句。
  • 可以申明函数,但不可以定义函数。
  • 可以申明常量,但不可以定义变量。
  • 可以“定义”一个宏函数。注意:宏函数很象函数,但却不是函数。其实还是一个申明。
  • 结构的定义、自定义数据类型一般也放在头文件中。
  • #include <filename.h>,编译系统会到环境指定的目录去引用。#include "filename.h",系统一般首先在当前目录查找,然后再去环境指定目录查找。

好的风格是成功的关键,版本申明、函数功能说明、注释等是C语言程序的一部分。不养成很好的习惯则不能成为C语言高手(专业人员)。

C标准库中,每一个库函数都在一个头文件中声明,可以通过 #include 预处理命令导入。

头文件只是声明,不占内存空间,编译时会被合并到源文件;要想知道它的具体实现,要看头文件所声明的函数是在哪个 .c 文件里定义的,然后查看源代码。

C标准库共包含 15 个头文件,可以分为 3 组,如何正确并熟练的使用它们,可以相应的可区分出 3 个层次的程序员:
  • 合格程序员:<stdio.h>、<ctype.h>、<stdlib.h>、<string.h>
  • 熟练程序员:<assert.h>、<limits.h>、<stddef.h>、<time.h>
  • 优秀程序员:<float.h>、<math.h>、<error.h>、<locale.h>、<setjmp.h>、<signal.h>、<stdarg.h>

各个头文件的具体内容请查看: C语言标准库

C语言头文件具有以下几个特性:
  • 幂等性。可以多次包含相同的标准头文件,但效果与只包含一次相同。
  • 相互独立。任何标准头文件的正常工作都不需要以包含其他标准头文件为前提。也没有任何标准头文件包含了其他标准头文件。
  • 和文件级别的声明等同。必须先把某标准头文件包含到你的程序中, 然后才能使用该头文件已定义或声明的东西。不能在声明中包含标准头文件。并且,也不能在包含标准头文件之前用宏定义去代替关键字。

等幂性是很容易实现的,对于大多数的头文件可以使用宏保护。例如,在 stdio.h 中可以有如下的宏定义:
   
  1. #ifndef _STDIO_H
  2. #define _STDIO_H
  3. /* 主要实现部分 */
  4. #endif

在C程序员中所达成的一个约定是:C源文件的开头部分要包含所有要用到的头文件。在 #include 指令之前只能有一句注释语句。引入的头文件可以按任意顺序排列。

如果我们自己编写的头文件可能会用到标准头文件中的定义或者声明,最好把标准头文件包含在自定义头文件的开头。这样,就不会在程序中忘记引入该标准头文件,也不会有顺序问题。这正是利用了头文件的等幂性。

注意一个约定,引入标准头文件用尖括号,引入自定义头文件用双引号,例如:
   
  1. #include <stdio.h>
  2. #include "myFile.h"

C语言库函数是头文件的最佳实践,仔细阅读各个头文件的内容,尤其是 stdio.h,能够学到很多东西。

在 VC6.0 中找到头文件

C标准头文件,例如 stdio.h、string.h 等在 VC6.0 的安装目录中是可以找到的。我的 VC6.0 安装在 C:\Program Files\Microsoft Visual Studio\ 目录,那么 VC6.0 附带的所有头文件(包括但不限于标准头文件)都在 C:\Program Files\Microsoft Visual Studio\VC98\Include\ 目录下。

如果忘记 VC6.0 的安装目录或者头文件不在安装目录下,可以通过以下方式找到:

1) 在工具栏中点击“工具”按钮

2) 在二级菜单中选择“选项”

3) 在弹出的对话框中选择“目录”标签

4) 然后选择名字为“目录”的下拉菜单中的“Include files”一项,如下图所示:

转自:http://see.xidian.edu.cn/cpp/html/2570.html


http://chatgpt.dhexx.cn/article/0Q9hlaAe.shtml

相关文章

第十四章 C语言头文件的编写_C语言模块化编程中的头文件

前面我们在演示多文件编程时创建了 main.c 和 module.c 两个源文件&#xff0c;并在 module.c 中定义了一个函数和一个全局变量&#xff0c;然后在 main.c 中进行了声明。 不过实际开发中很少这样做&#xff0c;一般是将函数和变量的声明放到头文件&#xff0c;再在当前源文件中…

C语言头文件路径相关问题总结说明

聊聊系统路径位置&#xff0c;绝对路径与相对路径&#xff0c;正斜杠 / 与 反斜杠 \ 使用说明 ...... by 矜辰所致目录 前言一、C语言中的头文件引用二、KEIL 中的头文件路径2.1 IncudePaths 指定的路径绝对路径和相对路径正斜杠 / 与 反斜杠 \ 与双斜杠 2.2 include < &…

c语言头文件下载大全,求C语言头文件下载?

传统 C++ #include <assert.h> //设定插入点 #include <ctype.h> //字符处理 #include <errno.h> //定义错误码 #include <float.h> //浮点数处理 #include <fstream.h> //文件输入/输出 #include <iomanip.h> //参数化输入/输出 #inclu…

python读取C语言头文件

本文测试过程使用使用的工程代码上传 python读取C语言头文件&#xff0c;参考博客&#xff0c;有测试记录、使用说明资源-CSDN文库 或者 python读取C语言头文件测试用例&#xff0c;参考博客&#xff0c;有详细说明-嵌入式文档类资源-CSDN文库 背景 在使用python编程过程中…

c语言中头文件及其作用,C语言头文件的作用是什么

C语言头文件的作用&#xff1a;1、头文件是程序各部分之间保证信息一致性的桥梁&#xff0c;是连接程序对象定义和使用的纽带&#xff1b;2、用于指定模块接口的声明放在文件中&#xff0c;文件名中应标明其预期用途。 本文操作环境&#xff1a;Windows7系统&#xff0c;宏基S4…

c语言头文件编写

使用头文件的作用&#xff1a;当前.c文件要使用其它.c文件已定义的全局函数/全局变量时&#xff0c;对使用的全局函数/全局变量进行声明。 文件包含&#xff1a;文件包含语句的功能是把指定的文件插入该语句行位置&#xff0c;从而把指定的文件和当前的源程序文件连成一个源文件…

编写C语言头文件

C语言头文件 我们写c语言代码的第一步总是#include … 这就是引入头文件。#include 命令是预处理命令的一种&#xff0c;预处理命令可以将别的源代码内容插入到所指定的位置&#xff1b;可以标识出只有在特定条件下才会被编译的某一段程序代码&#xff1b;可以定义类似标识符功…

【C语言】头文件书写方法与规范、code::black中如何创建并编写头文件(一看就会)

目录 其他编译器用户&#xff0c;可以直接跳过标题1&#xff0c;看2.头文件编写注意事项&#xff0c;下面有跳转链接&#xff1a; 1.C::B中创建头文件&#xff1a; 2.头文件编写注意事项 3.C语言常见问题推荐链接 1.C::B中创建头文件&#xff1a; file -> new -> fi…

C语言头文件详解

1、include的作用 简单一句话&#xff1a;在include的地方&#xff0c;把头文件里的内容原封不动的复制到引用该头文件的地方。 2、头文件的引用 头文件引用有两种形式&#xff1a;#include < stdio.h> 和 include "main.h “。 用< >引用的一般是编译器提供的…

C++——友元

友元概述 在讲述类的内容时说明了隐藏数据成员的好处&#xff0c;但是有些时候&#xff0c;类会允许有一些特殊的函数直接读写其私有数据成员。 使用friend关键字可以让特定的函数或者别的类的所有成员函数对私有数据成员进行读写。这既可以保持数据的私有性&#xff0c;又能够…

C++之友元函数

目录 1.定义&#xff1a; 1.概念&#xff1a; 2.注意 3.友元的分类&#xff1a; 4.友元函数代码分析&#xff1a; 1.友元函数出现的原因&#xff08;外部函数友元为例&#xff09;&#xff1a; 2.一个外部函数作为多个类的友元函数 3.成员函数友元&#xff1a; 4.类友…

友元 基础详解版 (友元函数、友元类、友元非成员函数和友元成员函数)

友元 一般来说&#xff0c;类的公有成员能够在类外访问&#xff0c;私有的成员只能被类的其他成员函数访问。 在C中&#xff0c;可以定义友元&#xff0c;如果某一个函数定义为类的友元&#xff0c;则该函数就可以访问该类的私有函数。也可以把一个类定义为另一个类的友元。 …

win7快捷方式去箭头_win7旗舰版桌面图标快捷方式箭头变成黑块怎么办?

大家在使用win7的过程中&#xff0c;发现桌面图标快捷方式箭头变成黑块&#xff0c;这时我们应该怎么解决呢&#xff0c;请继续往下看&#xff01; 操作过程&#xff1a; 1、在winr调出运行窗口&#xff0c;键入regedit.exe&#xff0c;回车&#xff0c;打开注册表编辑器。 依次…

去掉桌面快捷方式箭头和快捷方式字样--美化桌面快捷方式

去掉桌面快捷方式箭头和快捷方式字样--美化桌面快捷方式&#xff0c;如图&#xff1a; 下载地址&#xff1a; https://download.csdn.net/download/lhyhr/12700649

恢复Windows7快捷方式小箭头的方法

电脑重新安装了一个Windows7的纯净版系统&#xff0c;结果快捷方式的小箭头不见了。在网上查到的各种修改注册表的方式都试过之后&#xff0c;依然无效。 后来看到有人介绍可以使用软件恢复&#xff0c;于是下载了一个软件&#xff1a;Windows快捷方式小箭头管理&#xff0c;结…

Windows系统桌面快捷方式图标去除小箭头

在注册表”HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons“项下新建字符串值&#xff0c;命名为29&#xff0c;数据为&#xff1a;”%systemroot%\system32\imageres.dll,197“。 注销重新登录后小箭头即不显示&#xff0c;反之则删除名…

win8电脑怎么把计算机快捷方式,Win8怎么隐藏桌面快捷方式小箭头_Win8去掉快捷方式箭头-192路由网...

本文主要介绍了Win8电脑上&#xff0c;去掉桌面快捷方式小箭头的方法。Win8电脑桌面上的快捷方式&#xff0c;默认是有一个小箭头的&#xff0c;看起来非常不美观。 因此&#xff0c;很多用户想把Win8快捷方式上的小箭头去掉&#xff0c;却又不知道应该如何设置。 其实去掉Win8…

去除win10桌面图标快捷方式小箭头

同样用命令行来解决&#xff0c;管理员打开CMD&#xff0c;输入下面代码 &#xff08;也可以做成bat批处理文件&#xff0c;管理员运行&#xff09; 移除小箭头&#xff1a; reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Ic…

Win11清除桌面快捷方式小箭头

Win11清除桌面快捷方式小箭头 1.WinR输入regedit&#xff0c;进入注册表。 2.找到路径\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Shell Icons 选择右边名称为29的项&#xff08;部分电脑系统没有Shell Icons这个选项&#xff0c;那么在上一级…

玩机技巧|去除Windows桌面快捷方式图标左下角上的小箭头

当我们下载了软件之后在桌面上左下角都会有一个快捷方式的小箭头&#xff0c;如何去掉这个小箭头让桌面图标变得更加清爽一些呢。现在教大家一个简单的办法。 修改注册表 编辑代码 管理员身份运行 选择去除小箭头 检测 恢复小箭头 修改注册表 去除这个小箭头的方法很简单&…