全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
模块化编程与头文件学习笔记在大规模程序开发中,一个程序由很多个模块组成,这些模块的编写任务被分配到不同的程序员。而你在编写这个模块的时候很可能就需要利用到别人写好的模块的借口,这个时候我们关心的是,它的模块实现了什么样的接口,我该如何去调用,至于模块内部是如何组织的,对于我而言,无需过多关注。理想的模块可以看成是一个黑盒子,我们只关心模块提供的功能,而不管模块内部的实现细节。通过接口调用实现大规模程序的级联与组合。头文件的理解:头文件可以称其为一份接口描述文件。描述的内容就是我们的模块对外提供的接口函数或者是接口变量,同时该文件也包含了一些很重要的宏定义以及一些结构体的信息。总的原则是:对外的接口函数或者是接口变量的信息一定要出现在头文件里,不该让外界知道的信息就不应该出现在头文件里。这样,只要包含(#include “*.h”)这份模块头文件我们自身模块或者外界就能正确的调用接口功能。一般一个.C源文件的对应一个.h 头文件。例如定义一个uart.c文件的头文件uart.h的内容如下:#ifndef _UART_H_ #define _UART_H_extern UART_PutChar(char NewValue) ; #endif 在接口函数UART_PutChar前面添加了extern 修饰符表明其是一个外部函数,可以被外部其它模块进行调用。#ifndef _UART_H_ #define _UART_H_#endif 这个条件编译和宏定义是为了防止重复包含。假如有两个不同源文件需要调用UART_PutChar这个函数,他们分别都通过#include “uart.h”把这个头文件包含了进去。在第一个源文件进行编译时候,由于没有定义过 _UART_H_,因此 #ifndef _LCD_H_ 条件成立,于是定义_UART_H_并将下面的声明包含进去。在第二个文件编译时候,由于第一个文件包含时候,已经将_LCD_H_定义过了,因此#ifndef _LCD_H_ 不成立,整个头文件内容就没有被包含。假设没有这样的条件编译语句,那么两个文件都包含了extern UART_PutChar(char cNewValue) 就会引起重复包含的错误。头文件还可以对数据类型别名进行声明。这样提高了程序的可移植性,因为不同数据类型在不同的编译器上或不同的处理器上的范围不同。那么移植时很可能我们就需要在源文件中到处修改变量的类型定义。将常用的数据类型全部采用此种方法定义,形成一个头文件,这样很方便编程时直接调用。 例如 typedefine.h 其内容如下: #ifndef _TYPE_DEFINE_H_ #define _TYPE_DEFINE_H_ typedef unsigned int uint16; typedef unsigned int UINT; typedef unsigned int uint; typedef unsigned int UINT16;.#endif头文件使用的注意事项:1.头文件中不可以放变量的定义!一般头文件中只是放变量的声明,因为头文件要被其他文件包含#include,如果把定义放在头文件的话,就不能避免多次定义变量。三个例外:1)值在编译时就已知的const变量的定义可放在头文件中,如:const int num=10;2)类的定义可放在头文件中。3)inline函数。2.定义和声明是不同的。定义只能出现一次,而声明可以出现多次。下面的语句是定义,不能放在头文件中:externint ival=10; /虽然ival声明为extern,但是它初始化了,代表这是个定义。double fica_rate;/fica_rate虽然没有初始化,但是没有extern。所以仍是定义。extern int x; /变量是声明,并未实际分配地址。void print(); /函数声明,并未产生实际目标代码int x; int x=3; void print() ; /均为定义。3.只有全局变量并且没有被static声明的变量才能声明为extern。所以,如果你不想自己源文件中全局变量被其他文件引用,你就可
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年河南省郑州市医疗系统事业编人员招聘笔试参考试题及答案详解
- 2026年浙江省金华市政务服务中心(窗口人员)招聘笔试备考试题及答案详解
- 2026年河南省鹤壁市工会人员招聘考试参考题库及答案详解
- 2026年河池市金城江区政务服务中心(窗口人员)招聘考试模拟试题及答案详解
- 2026年浙江省金华市工会人员招聘考试参考试题及答案详解
- 2026年湖南省邵阳市政务服务中心(窗口人员)招聘考试备考题库及答案详解
- 2026年洛阳市吉利区政务服务中心(窗口人员)招聘笔试参考试题及答案详解
- 2026年8月河北工业大学廊坊分校招聘劳务派遣制工作人员考试备考题库及答案详解
- 2026年广西壮族自治区玉林市政务服务中心(窗口人员)招聘笔试参考题库及答案详解
- 2026年南京市建邺区工会人员招聘考试备考题库及答案详解
- 2026年四平市十七中学小升初数学考试测试卷及一套完整答案
- 陕西省中医医院招聘考试真题2025
- 2026年国企子公司副总经理选拔笔试真题(附答案)
- AI赋能智慧高速的车路协同与运营管理
- 2026年高速公路监控考试题库及答案
- 初中历史材料分析题答题技巧
- 学院学生宿舍管理服务项目方案投标文件(技术方案)
- 2026青岛东鼎产业发展集团有限公司招聘笔试备考题库及答案解析
- 2026年及未来5年中国高尔夫练习场行业市场全景评估及投资前景展望报告
- 乡镇卫生院发现孕情制度
- 精益物流培训课件大全
评论
0/150
提交评论