C语言多文件编译的例子

时间:2014-08-23 00:08    点击:

在 VC6.0 中新建一个工程,添加 fun.c、main.c 两个源文件和 fun.h 一个头文件,内容如下:

fun.c


		
  1. #include <stdio.h>
  2. int fun1(){
  3. printf("The first function!\n");
  4. return 0;
  5. }
  6. int fun2(){
  7. printf("The second function!\n");
  8. return 0;
  9. }
  10. int fun3(){
  11. printf("The third function!\n");
  12. return 0;
  13. }

fun.h

		
  1. #ifndef _FUN_H
  2. #define _FUN_H
  3.  
  4. extern int fun1(void);
  5. extern int fun2(void);
  6. extern int fun3(void);
  7.  
  8. #endif

main.c

		
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "fun.h"
  4.  
  5. int main(){
  6. fun1();
  7. fun2();
  8. fun3();
  9.  
  10. system("pause");
  11. return 0;
  12. }
对上面的每个 .c 文件都进行编译,然后链接并运行:
The first function!
The second function!
The third function!

上面的例子,函数定义放在 fun.c 文件中,在 fun.h 头文件中对函数进行声明,暴露接口,然后在主文件 main.c 中引入 fun.h。

注意:编译是针对单个 .c 文件的,如果项目中有多个 .c 文件,需要逐一编译,然后链接,或者使用“组建 -> 全部重建”选项,一次性编译并链接所有文件。

多文件编程时,只能有一个文件包含 main() 函数,因为一个工程只能有一个入口函数。我们把包含 main() 函数的文件称为主文件。

可以在其他 .c 文件中对函数进行定义,在 .h 中对函数进行声明,只要主文件包含进相应的头文件,就能使用这些函数。实际开发中,很少有简单到只有几十行代码的C语言项目,合理的组织代码和文件,是开发大中型项目的必备技能。

为了更好的组织各个文件,一般情况下一个 .c 文件对应一个 .h 文件,并且文件名要相同,例如 fun.c 和 fun.h。如果 fun.c 使用到了 fun.h 的宏定义、类型定义等,还需要在 fun.c 中 #include "fun.c"。

.c 文件主要包含各个函数的定义,.h 文件声明函数原型,向外暴露接口,供主文件调用。另外也可以在 .h 中包含宏定义、类型定义。

注意:.h 文件头文件中不能有可执行代码,也不能有变量定义,只能有宏、类型( typedef,struct,union,menu )定义和变量、函数的声明。

这倒不是说在 .h 中定义变量或函数会有语法错误,实际上#icnlude机制很简单,就是把#include所包含的文件中的内容直接复制到#include所在的位置并替换#include语句。但是这样做不符合模块化编程的惯例,也不利于文件的组织,不利于二次开发,不利于团队协作。

头文件要遵守幂等性原则,即可以多次包含相同的头文件,但效果与只包含一次相同。

可以使用下面的宏防止一个头文件被重复包含。       

		
  1. #ifndef MY_INCLUDE_H
  2. #define MY_INCLUDE_H
  3. //头文件内容
  4. #endif
如果该头文件已被包含,那么会定义宏 MY_INCLUDE_H,再次包含时,就不会对头文件内容进行编译了。

来源:未知//所属分类:基础教程/更新时间:2014-08-23 00:08
顶一下
(28)
93.3%
踩一下
(2)
6.7%
上一篇:C语言头文件深入理解
下一篇:动态链接库(dll)简介
相关内容