C 语言项目中.h文件和.c文件的关系
在编译器只认识.c(.cpp))文件,而不知道.h是何物的年代,那时的人们写了很多的.c(.cpp)文件,渐渐地,人们发现在很多.c(.cpp)文件中的声明语句就是相同的,但他们却不得不一个字一个字地重复地将这些内容敲入每个.c(.cpp)文件。但更为恐怖的是,当其中一个声明有变更时,就需要检查所有的.c(.cpp)文件。
于是人们将重复的部分提取出来,放在一个新文件里,然后在需要的.c(.cpp)文件中敲入#include XXXX这样的语句。这样即使某个声明发生了变更,也再不需要到处寻找与修改了。因为这个新文件,经常被放在.c(.cpp)文件的头部,所以就给它起名叫做“头文件”,扩展名是.h。
在我们语言的初学阶段,往往我们的程序只有一个.c的文件或这很少的几个,这时我们就很少遇到头文件组织这个头疼的问题,随着我们程序的增加,代码 量到了几千行甚至几万行,文件数也越来越多。这时这些文件的组织就成了一个问题,其实说白了这些文件的组织问题从理论上来说是软件工程中的模块设计等等的问题。
头文件的作用的简短描述:
(1)通过头文件来调用库功能。在很多场合,源代码不便(或不准)向用户公布,只要向用户提供头文件和二进制的库即可。用户只需要按照头文件中的接口声明来调用库功能,而不必关心接口怎么实现的。编译器会从库中提取相应的代码。
(2)头文件能加强类型安全检查。如果某个接口被实现或被使用时,其方式与头文件中的声明不一致,编译器就会指出错误,这一简单的规则能大大减轻程序员调试、改错的负担。
比方说 我在aaa.h里定义了一个函数的声明,然后我在aaa.h的同一个目录下建立aaa.c , aaa.c里定义了这个函数的实现,
C 语言项目中.h文件和.c文件的关系相关推荐
- c语言.h文件实例,C 语言项目中.h文件和.c文件的关系
那是一个被 遗忘的年代,在编译器只认识.c(.cpp))文件,而不知道.h是何物的年代. 那时的人们写了很多的.c(.cpp)文件,渐渐地,人们发现在 很多.c(.cpp)文件中的声明语句就是相同的, ...
- 在Go语言项目中使用Zap日志库
在Go语言项目中使用Zap日志库 Go语言原生的日志库的使用,然后详细介绍了非常流行的Uber开源的zap日志库,同时介绍了如何搭配Lumberjack实现日志的切割和归档. 一.在Go语言项目中使用 ...
- 如何在项目中加入已存在的文件夹, 注意是文件夹而不是文件
如何在项目中加入已存在的文件夹, 注意是文件夹而不是文件 1.在 Solution Explorer 中点击相关的 Project 2.点击Solution Explorer 下面的工具栏中的 Sho ...
- axios nodejs 上传图片_vue项目中使用axios上传图片等文件操作
axios 简介 axios 是一个基于Promise 用于浏览器和 nodejs 的 HTTP 客户端,它本身具有以下特征: 从浏览器中创建 XMLHttpRequest 从 node.js 发出 ...
- java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...
如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径 我有一个包含2个包的项目: ListStopWords.txt ListStopWords.txt 在包(2)中我有 ...
- Linux系统中编译大型C语言项目必备技能之:Makefile文件的编写
文章目录 Makefile的介绍 Makefile的编写规范--简单举例 Makefile的编写规范--复杂举例 项目描述 编译需求 编译思路 Makefile的介绍 我们在阅读一些大型的C语言项目时 ...
- googletest在C语言项目中的使用指南
文章目录 1. gtest文件层级划分与说明 1.1. 单元测试运行方法 2. 新增单元测试 2.1. 新增模块测试 2.2. 新增模块功能测试 3. 单元测试具体实现 3.1. gtest 3.2. ...
- java检索字符串并提取_eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)...
编辑相关快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户编辑的好帮手 ...
- eclipse 项目中搜索资源(类方法,文件名,文件中的字符串)
编辑相关快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户编辑的好帮手 ...
最新文章
- bzoj 3209 数位DP+欧拉定理
- 50%的次日留存率,没有评论留言功能的same是如何做到的?
- js es6 reduce用法示例:实现数据累加
- 关于realarm210 realarmTest.apk不能直接安装问题解决方法
- linux如何查看git安装路径,Git - 如何验证Ubuntu上是否安装Git以及在何处安装Git - Ubuntu问答...
- 【BZOJ3218】a+b problem (最小割 + 主席树)
- 紫书的训练计划——一点点来,坚持到底!
- 基于tutk方案的p2p源码_以太坊源码分析--p2p节点发现
- 玩转iOS开发:iOS 10 新特性《Thread Sanitizer》
- cocos2d-x 2.2.3 之菜单分析(1)
- 【机械仿真】基于matlab GUI智能电梯仿真系统【含Matlab源码 1087期】
- VB 6.0 可以使用MQTT
- 【KE特效仿制】假面骑士 EX-AID NCOP+无彩限的怪灵世界 NCOP
- 【第152期】游戏策划:给@不五的简历分析
- 深测「小度人工智能音箱1S」:加冕的红外控制术,和掀起的一场智能大进化...
- 【Android】Android 集成芯烨云打印机实现打印票据
- OpenNLP进行中文命名实体识别(上:预处理及训练模型)
- Linux 基本指令 Pt.2
- 三菱PLC控制东芝4轴机器人程序,有完整的PLC程序带注释, 结构清楚,信捷触摸屏程序,电气图纸,东芝机械手程序,适合你学习应用,附赠东芝机器人编程软件,可以模拟运行。
- 51单片机——红外遥控 C语言入门编程