这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 2.第一个多文件编译的例子

共1条 1/1 1 跳转至

2.第一个多文件编译的例子

高工
2014-10-30 12:23:18     打赏

  这一节通过一个简单的例子,向大家展示如何有效地将各个文件联系在一起。


  在 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,再次包含时,就不会对头文件内容进行编译了。



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]