微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > C程序中关于c和h的包含问题

C程序中关于c和h的包含问题

时间:12-01 来源:互联网 点击:

方法的优缺点,这里就只写不足之处了:
1. 包含.c文件的方法: 容易产生"重定义",大家想想如果一个工程中有多个文件都同时包含了某一个件,那么这个被包含文件的内容就会被复制到多个文件中去,也就相当于每个包含该文件的文件中都定义被包含文件中的变量和函数,这样在链接时就会产生"重定义"错误。

2. 多文件分开编译的方法: 这个比较好,不容易出现"重定义"之类的问题,这也是我们最常用的一种方法,但是并不是像上面这个例子中这样直接去用,而是使用"头文件"将各个.c文件联系起来。
上边这个例子大家会发现,在main.c中需要加上“extern int c;”这样一句声明,如果包含的文件较多?如果全局变量较多?...这个我们可以省掉吗?回答是肯定的!方法就是给它写上一个头文件。

接下来看一下使用头文件的来实现这个例子的方法:

1://file1: main.c

2:#include

3:#include"fun.h"//fun.c修改为fun.h

4://extern int c; //这行也不要了

5:intmain()

6:{

7:inta=5,b=19;

8:c = a;

9:sun(a,b);

10:printf("c=%d",c);

11:return0;

12:}

13://end of file1

1:

2://file2: fun.c

3:#include"fun.h"

4:intc=0;//变量c的定义

5:voidsun(inta,intb)//函数sun()的定义

6:{

7:printf("a+b=%d",a+b);

8:c=0;

9:printf("c=%d",c);

10:}

11://end of file2

1://file3: fun.h

2:externintc;//把c声明为外部可用的

3:voidsun(inta,intb);//sun()函数的声明

4://end of file3

这样再看一下,在要用到fun.c中定义的函数或变量的文件中只要包含fun.h文件就可以了,是不是这样???呵呵,当然是了。。。

预处理时会把fun.h中的内容复制到包含它的文件中去,而复制的这些内容只是声名,不是定义,所以它被复制再多份也不会出现"重定义"的错误。。。

呵呵,对,就是这样,这就是头文件给我们再来的好处。

前面说了头文件的方法也是模块化程序设计中的一种非常有利的手段。

把同一类功能写到一个.c文件中,这样可以把他们划为一个模块,另外再对应的写上一个.h文件做它的声明。这样以后再使用这个模块时只需要把这两个文件添加进工程,同时在要使用模块内函数或变量的文件中包含.h文件就可以了。

举个很实际的例子,在单片机、ARM或其他嵌入式开发中,每一个平台可能本身都有多种不同的硬件模块,使用时需要去写相应的驱动程序,这样就可以把各个硬件模块的驱动程序作为一个模块(比如lcd驱动对对应lcd.c和lcd.h,IIC驱动对应I2C.c和I2C.h等),当具体使用到某个模块时,只需要在将对应的.c和.h文件添加进工程,并在文件中包含对就的.h文件即可。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top