首页 新闻 会员 周边 捐助

c语言多文件编译

0
[已解决问题] 解决于 2012-04-14 23:11

C语言如何进行多文件连接

请教

飞天狐的主页 飞天狐 | 菜鸟二级 | 园豆:208
提问于:2012-04-12 21:44
< >
分享
最佳答案
0

简单的说,每一个.c或者.cc都是一个编译单元,每一个编译单元编辑的结果是一个.o或者obj之类的中间文件,至于是否是多文件,不需要关心,但是要保证不同的编译单元之间不要有重复的符号,这就是要避免重复包含了,每一个编译单元生成的目标文件.o或者obj都会引用一些不在本目标文件中的符号,这些符号定义在别的.o或者.obj文件中, 链接器把他们联系在一起,所有的符号也就都有定义了,编译链接简单说来就是这样。

奖励园豆:5
zsounder | 老鸟四级 |园豆:2819 | 2012-04-13 02:20
其他回答(1)
0

多文件排序?

artwl | 园豆:16736 (专家六级) | 2012-04-12 21:54

写错。不好意思啊

支持(0) 反对(0) 飞天狐 | 园豆:208 (菜鸟二级) | 2012-04-12 22:08

@飞天狐: 网上找到的资料:

条件:设有一个PROJECT,包含四个文件:main.c 、 func0.c 、 func1.c 、 incfunc.h;其中func0.c包含函数f_a()和f_b();其中func1.c包含函数f_c()和f_d(),四个函数均为整型。

其中main.c是主文件,func0.c和func1.c是包含main.c中用到的函数的两个C文件,incfunc.h是头文件。

编译前需要在main.c 、func0.c和func1.c文件中包含inc_func.h,也就是加入:#include "array.h" 语句;

inc_func.h文件内容如下(其实就是在inc_func.h文件中声明函数头;函数体在具体的func0.c和func1.c文件中进行定义):

// 开始

#define INCFUNC_H

int f_a();

int f_b();

int f_c();

int f_d();

//结束

其他部分与编译一个文件一样。

简单概括就是,所有需要参加编译的C文件都需要包含相应的H文件;H文件要定义C文件中函数的“函数头”。一般来说,主文件包含多个H文件,其他的C文件包含相应的H文件。以上面的例子来说,可以用func0.h和func1.h来分别定义f_a()、f_b()和f_c()、f_d()的函数头,而 func0.c和func1.c 只须分别包含两个H文件,main.c需要同时包含两个H文件。

需要注意的是平时常用的类型所写,如:

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

只须在主文件main.c中定义即可,重复定义会在编译时产生很多warning。

支持(0) 反对(0) artwl | 园豆:16736 (专家六级) | 2012-04-12 22:26

@artwl: 在迷茫中看到一点星光,但仍然朦胧,谢谢咯!

支持(0) 反对(0) 飞天狐 | 园豆:208 (菜鸟二级) | 2012-04-13 00:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册