C语言入门教程
OutOfMemory.CN技术专栏-> C语言-> C语言入门教程-> 第一个C语言多文件编译的例子:C语言多文件编程,10分钟快速上手

第一个C语言多文件编译的例子:C语言多文件编程,10分钟快速上手

这一节通过一个简单的例子,向大家展示如何有效地将各个文件联系在一起。在VC6.0中新建一个工程,添加fun.c、main.c两个源文件和fun.h一个头文件,内容如下:fun.c#include<
这一节通过一个简单的例子,向大家展示如何有效地将各个文件联系在一起。

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

fun.c
#include <stdio.h>
int fun1(){
    printf("The first function!\n");
    return 0;
}
int fun2(){
    printf("The second function!\n");
    return 0;
}
int fun3(){
    printf("The third function!\n");
    return 0;
}

fun.h
#ifndef _FUN_H
#define _FUN_H

extern int fun1(void);
extern int fun2(void);
extern int fun3(void);

#endif

main.c
#include <stdio.h>
#include <stdlib.h>
#include "fun.h"

int main(){
    fun1();
    fun2();
    fun3();

    system("pause");
    return 0;
}
对上面的每个 .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语句。但是这样做不符合模块化编程的惯例,也不利于文件的组织,不利于二次开发,不利于团队协作。

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

可以使用下面的宏防止一个头文件被重复包含。       
#ifndef  MY_INCLUDE_H
#define MY_INCLUDE_H
//头文件内容 
#endif
如果该头文件已被包含,那么会定义宏 MY_INCLUDE_H,再次包含时,就不会对头文件内容进行编译了。
© 内存溢出 OutOfMemory.CN