本文目录一览:
- 1、怎么连接两个C程序的源文件啊?
- 2、c语言 两个源文件的数组传递
- 3、C语言,两个源程序,其中一个源程序文件调用另一个文件中的函数。
- 4、C语言如何将两个源程序文件连接在一起编译
- 5、C语言的开始:源文件,头文件
怎么连接两个C程序的源文件啊?
c和c++的多文件编程规则是有差别的。下面只描述c的(主要是语法要求不太一样,体现在编译层面)。
简单来说,有两个层面的问题:
1
编译问题
2
链接问题
1
编译问题:
就是你的代码要能够编译通过,编译主要是对语法的检查。例如:
1
a文件用b文件里的函数问题:在c语言中,a文件用b文件的函数,缺省不用做任何说明(缺省就是全局函数,注意不能是static函数,当然建议写上extern的引用说明)。
2
但是如果a文件要用b文件的结构体。那么必须把结构体放到头文件里,两个源文件都去include。
不罗列了,简单来说,代码要复合c的语法要求。
2
链接问题:
多个源文件可以编译成编译单元(编译做得事),并且把这些编译单元链接到一起形成最终的可执行文件或动态/静态库。
注:编译单元,.o文件。
举例:有a.c和b.c
以gcc编译来说:(不考虑其他编译和链接情况)
gcc
-c
a.c
//生成a.o
gcc
-c
b.c
//生成b.o
gcc
-o
hello
a.o
b.o
//
a.c和b.c里面一个必须有main函数。输出hello可执行程序。
如果是在集成开发环境,例如vc、devc++、codebloker等。就在软件相关工程属性里勾选上或增加源文件就行。(工具屏蔽了编译链接技术细节)
c语言 两个源文件的数组传递
array2的类型不对
这个需要定义成指针
unsigned char *array2;
这样就肯定可以了。
其实更简单的是
在Bfile.c里面直接
extern unsigned char array1[64];
然后使用array1就可以了
C语言,两个源程序,其中一个源程序文件调用另一个文件中的函数。
下面文件假设叫b.c,编写一个b.h,内容为:void enorder();
假设上面文件为a.c,前面加一句:#include "b.h"或不用b.h前面加句void enorder();也成
b.c中第1句改为:extern int a[10];
void enorder();在头文件b.h中写成extern void enorder();也成
C语言如何将两个源程序文件连接在一起编译
请使用预编译指令 #include。
#include放在代码文件头,用于告诉编译器,文件中包含的头文件,属于预处理文件的一部分 。
语法为:
#include iostream.h (这句是程序编译时搜索系统目录文件)
#include “HName.h" (这句是程序编译时搜索当前项目的文件)
C语言的开始:源文件,头文件
任何C程序最终都是要写在文件上面,通常分两种,源文件和头文件,不是每个程序都有头文件,比如一些简单小程序就没有。
源文件根据惯例,通常扩展名为.C,但是能否用其他扩展名吗?查了一些资料,得到的答案是:尽管标准并没有制定文件的取名规则,但大多数环境都存在你必须遵守的文件名命令约定。
头文件根据惯例,通常扩展名为.h。通常是一个源文件对应一个的头文件,并且两个文件名相同,只是扩展名不同。我一直有个疑惑,就是可以让源文件和头文件两个文件名不同吗?经过亲自折腾一下,确是可以的。经过细想,原因如下:头文件只是用于共享宏、变量、函数等的。而且#include的语义是把对应的文件包含进来,至于包含的文件是什么名字并不重要,要不要和源文件名相同也不重要,如果非要一样,反而限制了#include的能力。另外C99标准中有这样关#include有这样一句话:A #include directive shall identify a header or source file that can be processed by the implementation.也就是说指要编译器支持的文件,#include指令应该都可以包含。一般编译器的功能都挺强大,足够满足我们需求,至于遇到特殊情况的大佬,大佬也会自行解决。
聊到头文件 那就有必要对#include指令进行说明:
#include指令常用格式如下:
#include , #include "fileName" #include token(这里token一般指宏的名字)
如果在源文件#include包含有一个static变量或函数的定义的头文件,那么这个源文件也可以访问这个static变量或函数。原因就是这个源文件把对应的文件包含进来,那这些static变量或函数就相当于在这个源文件中定义,当然源文件就可以访问了。