前面我们在演示多文件编程时创建了 main.c 和 module.c 两个源文件,并在 module.c 中定义了一个函数和一个全局变量,然后在 main.c 中进行了声明。

不过实际开发中很少这样做,一般是将函数和变量的声明放到头文件,再在当前源文件中 #include 进来。如果变量的值是固定的,最好使用宏来代替。下面的例子是改进后的代码。

main.c 源码:

module.c 源码:

module.h 源码:

在 Visual Studio 中,将上面的文件全部添加到工程,点击“运行(Run)”就可以看到输出结果。

在 GCC 中,使用下面的命令来编译和运行:

$gcc main.c module.c
$./a.out

程序最终的输出结果为:

a = 100
c.biancheng.net
OS: Windows 7

.c.h文件都是源文件,除了后缀不一样便于区分外和管理外,其他的都是相同的,在.c中编写的代码同样也可以写在.h中,包括函数定义、变量定义、预处理等。

但是,.h 和 .c 在项目中承担的角色不一样:.c 文件主要负责实现,也就是定义函数和变量;.h 文件主要负责声明(包括变量声明和函数声明)、宏定义、类型定义等。这些不是C语法规定的内容,而是约定成俗的规范,或者说是长期形成的事实标准。

根据这份规范,头文件可以包含如下的内容:

  • 可以声明函数,但不可以定义函数。
  • 可以声明变量,但不可以定义变量。
  • 可以定义宏,包括带参的宏和不带参的宏。
  • 结构体的定义、自定义数据类型一般也放在头文件中。

在项目开发中,我们可以将一组相关的变量和函数定义在一个 .c 文件中,并用一个同名的 .h 文件(头文件)进行声明,其他模块如果需要使用某个变量或函数,那么引入这个头文件就可以。

这样做的另外一个好处是可以保护版权,我们在发布相关模块之前,可以将它们都编译成目标文件,或者打包成静态库,只要向用户提供头文件,用户就可以将这些模块链接到自己的程序中。

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

  1. C语言模块化编程中的头文件

    .c和.h文件都是源文件,除了后缀不一样便于区分外和管理外,其他的都是相同的,在.c中编写的代码同样也可以写在.h中,包括函数定义.变量定义.预处理等. 但是,.h 和 .c 在项目中承担的角色不一样 ...

  2. 【信息系统项目管理师】第十四章 文档与配置管理思维导图

    [信息系统项目管理师]第十四章 文档与配置管理思维导图 文档管理和配置管理是第十四章总两大知识板块. 文档管理 信息系统中的文档按质量分级可以分为1-4级分别是最低限度文档,内部文档,工作文档,正式文 ...

  3. c语言prime函数怎么用_C语言教程_v20201106

    编程基础 1.1    通俗地理解什么是编程语言 1.2    C语言究竟是一门怎样的语言? 1.6    初中毕业能学会编程吗? 1.7    C和C++到底有什么关系? 1.8    学了 C 语 ...

  4. 第十一、十二、十三、十四章 网络配置管理、归档和远程复制同步文件、软件包管理、创建访问linux文件系统

    第十一章 网络配置管理 网络地址获取方式: 1)DHCP自动获取 2)手动配置 1.网卡配置文件: /etc/sysconfig/network-scripts/ [root@server0 Desk ...

  5. c语言调试时出现的三种错误,C语言课件 第十四章 常见错误和程序调试

    <C语言课件 第十四章 常见错误和程序调试>由会员分享,可在线阅读,更多相关<C语言课件 第十四章 常见错误和程序调试(36页珍藏版)>请在人人文库网上搜索. 1.第十四章常见 ...

  6. R语言学习笔记——高级篇:第十四章-主成分分析和因子分析

    R语言 R语言学习笔记--高级篇:第十四章-主成分分析和因子分析 文章目录 R语言 前言 一.R中的主成分和因子分析 二.主成分分析 2.1.判断主成分的个数 2.2.提取主成分 2.3.主成分旋转 ...

  7. R语言实战笔记--第十四章 主成分和因子分析

    R语言实战笔记–第十四章 主成分和因子分析 标签(空格分隔): R语言 主成分分析 因子分析 原理及区别 主成分分析与因子分析很接近,其目的均是为了降维,以更简洁的数据去解释结果,但这两种方法其实是相 ...

  8. java第十四章上机四客户类_java语言程序设计教学大纲.doc

    java语言程序设计教学大纲.doc 还剩 5页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 第六章 结构控制 2 2第七章 数组 2第八章 字符串 ...

  9. Gradle 1.12用户指南翻译——第五十四章. 构建原生二进制文件

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  10. JavaScript高级程序设计第四版学习--第二十四章

    title: JavaScript高级程序设计第四版学习–第二十四章 date: 2021-5-31 10:46:01 author: Xilong88 tags: JavaScript 本章内容: ...

最新文章

  1. 宏基因组文章目录(9月1日更新)
  2. 简单几步,教你部署一个可扩展微服务系统!
  3. 阿里云数据库RDS PG联合电商SaaS领导者班牛,助力1500+品牌数智化
  4. 张帅用赢球庆生 搭档斯托瑟晋级澳网女双八强
  5. camel 数据库_使用Camel在来自不同来源的Solr中索引数据
  6. 【机器视觉学习笔记】双线性插值实现图片任意角度旋转(C++)
  7. python中的迭代器Iterator
  8. mysql--SQL编程(关于mysql中的日期) 学习笔记2
  9. 发布一个网页智能解析算法库
  10. pt-show-grants的用法
  11. spss回归分析_SPSS之回归分析
  12. jsp页面中使用javascript获取后台放在request或session中的值
  13. 数据权限设计思路_权限设计数据权限
  14. Java版推箱子(搬箱子)游戏开发入门示例及源码
  15. Ubuntu14.04安装wineqq国际版
  16. html js实现省市区联动调节下拉框菜单
  17. 金彩教育:店铺中的人才布局
  18. android垂直进度条控件,Android常用控件之ProgressBar,水平进度条
  19. SpringBoot海景房出租管理系统+代码讲解
  20. 《炒股的智慧》文摘1

热门文章

  1. 提升手机麦克风音量_【奇酷小技巧】教你无需ROOT增大话筒、听筒和外放声音!...
  2. Windows 10 安装 Maven
  3. 嵌入式linux交叉开发环境,构建嵌入式Linux交叉开发环境
  4. itextpdf生成pdf文件(含图片)
  5. 软件工程7条基本原理
  6. 三种分布式爬虫系统的架构方式
  7. php复姓怎么排序,按姓氏笔画排名怎么排列了
  8. 【待续】海思Hi3520A学习笔记
  9. 360奇酷手机线刷教程
  10. 关于STC8H8K64U单片机IAP升级过程