发布日期:2015-12-31 10:05 来源: 标签: 编程语言 C教程 C语言 C语言头文件
本章我们主要学习C语言模块化编程与头文件,下面我们就做一下具体讲解,希望大家多多支持中国站长网络学院。
     在大规模程序开发中,一个程序由很多个模块组成,这些模块的编写任务被分配到不同的程序员。而你在编写这个模块的时候很可能就需要利用到别人写好的模块的借口,这个时候我们关心的是,它的模块实现了什么样的接口,我该如何去调用,至于模块内部是如何组织的,对于我而言,无需过多关注。理想的模块可以看成是一个黑盒子,我们只关心模块提供的功能,而不管模块内部的实现细节。通过接口调用实现大规模程序的级联与组合。
头文件的理解: 
     头文件可以称其为一份接口描述文件。描述的内容就是我们的模块对外提供的接口函数或者是接口变量,同时该文件也包含了一些很重要的宏定义以及一些结构体的信息。
      总的原则是:对外的接口函数或者是接口变量的信息一定要出现在头文件里,不该让外界知道的信息就不应该出现在头文件里。这样,只要包含(#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.定义和声明是不同的。定义只能出现一次,而声明可以出现多次。
下面的语句是定义,不能放在头文件中:
extern  int 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。所以,如果你不想自己源文件中全局变量被其他文件引用,你就可以给变量加上static声明。
4. static全局变量是有文件作用域的。在a.c中用了,在其他文件中就不能使用了。static变量一般放在.cpp或者.c文件中。不放在.h文件中。 

相关评论

专题信息
    C语言是一种计算机程序设计语言。它既有高级语言的特点,又具有汇编语言的特点。它可以作为系统设计语言,编写工作系统应用程序,也可以作为应用程序设计语言,编写不依赖计算机硬件的应用程序。C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它解释型高级语言,有一些大型应用软件也是用C语言编写的。 C语言具有绘图能力强,可移植性,并具备很强的数据处理能力,因此适于编写系统软件,三维,二维图形和动画。它是数值计算的高级语言。C语言是一种结构化语言。它层次清晰,便于按模块化方式组织程序,易于调试和维护。