c多文件编译
多个c文件的作用在于将不同功能的代码分开来实现,这样便于代码重用、代码编译和代码管理。
一个程序中,只能有一个main函数,这是整个程序的起点和入口。如果其他人也实现了该函数,则必须要重新命名,然后在唯一的main函数中统一调用。
多个c文件的合并并没有顺序要求,任何一个都可以先编译或者后编译。
extern表示导出,可以用于函数和变量。用于函数的时候,表示这是一个外部函数,用于变量的时候,表示这是一个外部变量。
如果使用一个c文件,多个h文件,则会导致改动代码任何一个地方,都要重新编译所有的文件,效率上非常不划算。而使用多个c文件,当代码发生变更的时候,仅仅相关的c文件代码需要重新编译,其他代码则可以保持不变,不用参与编译。
函数中的局部变量无法在函数外部调用,只能通过参数传递的方式传递给第三方函数。因为局部变量是出于栈上面的,栈会随着函数调用完毕的时候被系统回收。
2. C语言多个源文件一起编译
你这个是一个工程里的两个.c文件,如果这两个.c文件都有入口那么肯定是不正确的,编译器会不知道哪个才是你程序的真正入口,如果你去掉一个入口,利用头文件包含来调用函数,两个.c也是一样可以的
3. 多文件C程序怎么编译连接及运行
关于 C 语言源程序的多模块编译、连接,这个必须要靠编写 makefile 文件才行。
而且还必须依照编写 makefile 的规则编写,才能够正确编译、连接各个 C 语言
源程序,最终执行 make makefile 指令,生成一个可执行程序。
makefile 文件是一个文本文件,其大致内容如下:
myfile1.o: myfile1.c
gcc -c myfile1.c
myfile2.o: myfile2.c
gcc -c myfile2.c
myrunfile: myfile1.o myfile2.o
gcc -o myrunfile myfile1.o myfile2.o
4. C语言多文件编译
软件把 新建的c文件加入工程后默认被当做cpp文件进行编译了,
设置 【工程】菜单 ---> 【工程属性】--->【文件】
选中a.c 把当前文件作为C++编译勾掉 【确定】
建议 【运行】 --->【清除】 先清除后之前编译生成的文件
再接着【运行】--->【全部重新编译】 再 运行 设置参考图片如下所示
扩展知识 c++ c混合编译 extern "C"
比如吧a.c改成, 不改设置也能过编译
extern "C"
{
#include "a.h"
Status Test(int a, int b)
{
if(a==b)
return TRUE;
else
return FALSE;
}
}
5. C 语言中多文件编译的问题
如果有多个源文件,基本上有两种编译方法:
[假设有两个源文件为test.c和testfun.c]
1.
多个文件一起编译
用法:#gcc
testfun.c
test.c
-o
test
作用:将testfun.c和test.c分别编译后链接成test可执行文件。
2.
分别编译各个源文件,之后对编译后输出的目标文件链接。
用法:
#gcc
-c
testfun.c
//将testfun.c编译成testfun.o
#gcc
-c
test.c
//将test.c编译成test.o
#gcc
-o
testfun.o
test.o
-o
test
//将testfun.o和test.o链接成test
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
6. 如何编译C文件
编译C文件用GCC。
编译C文件常用方法:
单个文件:
g++
file.cpp
这是最简单形式,缺省输出为a.out,可以用-o命令指定输出文件,比如g++
file.cpp
f.out
多个文件:
g++
-c
1.cpp
-o
1.o
g++
-c
2.cpp
-o
2.o
g++
1.o
2.o
-o
prog.out
链接成可执行文件:
一般用g++
-o
file
file.cpp
多个文件是g++
-o
file
file1.cpp
file2.cpp
...
编译C++不是用GCC而是G++.
如果用GCC能编译但不能链接.
多个文件:
1.编译多个文件,但不连接:
g++
file1.cpp
file2.cpp
会生成两个文件:file1.o,
file2.o
2.连接:
g++
-o
outFileName
file1.o
file2.o
会生成一个可执行文件:outFileName。
如果想,一步就完成编译和连接,那么:
g++
-o
outFileName
file1.cpp
file2.cpp
-o选项控制是否连接。
7. C语言怎么进行多文件编译,VC++6.0,要求详细步骤
程序1 存入 a1.c
程序2 存入 a2.c
删去 程序2 里 多写 的 一行 void accumulate(int k)
========
MS VC++ 6.0 编译命令:
CL a1.c a2.c
得到 a1.exe
运行 a1.exe 便可。
(其它编译器, 请照猫画虎。)
8. c多个文件如何编译
关于整个 C 语言中的主函数 main( ) 如何调用相关的头文件(*.h)、以及调用其它独立的模块(*.c)的方法,关键在于对于如何编写 makefile 文件的真正理解、以及真正掌握编写规则。
由于我已经有很多年没有编写过 C 语言源程序、以及编写 makefile 文件了,但是可以大概给你提供一个思路就是:
下面的文本文件假设以 my_makefile 为例,编译环境为 Linux 系统,C 语言编译器为 gcc。
但是在这里注意一点:我的 my_makefile 文件中的注释语句是否是分号进行注释,我已经不太记得了,这个需要自己再参考一下。
另外就是:对源文件(*.c)、以及生成可执行文件(my_runfile)在 my_makefile 文件中的前后次序,我也记不清了,仅供参考。
myprog1.o: myprog1.c ; myprog1.o 的生成依赖于 myprog1.c 这个源程序
gcc -c myprog1.c ; 使用 Linux 系统的 C 语言编译器对 myprog1.c 只编译、不链接
myprog2.o: myprog2.c ; myprog2.o 的生成依赖于 myprog2.c 这个源程序
gcc -c myprog2.c ;使用 Linux 系统的 C 语言编译器对 myprog2.c 只编译、不链接
my_runfile: myprog1.o myprog2.o ; 可执行文件 my_runfile 的生成依赖于 myprog1.o、myprog2.o 这两个目标文件
gcc -o my_runfile myprog1.o myprog2.o ; 使用 cc 的 -o 选项生成用户自定义的可执行文件:my_runfile,如果不指定 -o 选项,cc 编译器生成的缺省可执行文件名为:a.out
运行命令为:
$make -f my_makefile (使用 -f 选项代替缺省的 make 文件名 makefile)
9. c语言中多个文件的编译问题
第一个问题
请问,我是不是该这样做:
在main.c中#include
在fun.c中同样#include
(好像是必需的,请详细解释)
这是必需的。因为编译器只是把包含文件的代码复制过来,既然你二个文件中都用到头文件的内容,那当然要包含头文件,否则就会出错。
我的观点,如果这两步都是必需的
那么当有很多个比如10个.c程序每个里头都要#include
那么文件是不是会特别大,当有100个.c程序都要包含一下的话,那么不是非常重复么?)
那当然是会重复的。不过这个对程序的运行效率没任何影响,只是在编译过程中对文件的分析时间会稍长些,这也是没有办法的事,全看代码编写者如何组织结构了。
第二个问题:
会的。解决的方法就是在可能被多次包含的头文件中开头加上#pragma
once,那样就可以保证此头文件代码只被执行一次,而不会造成头文件中函数多次重复定义至于引起这种情况的情况。当然你也可以自己用#ifdef等预编译处理来解决。你问的问题不就是这种情况么?main.c和fun.c中都包含头文件tou.h
第三个问题:
当我在main.c中这样
#define
unchar
unsigned
char
那么当我在fun.c中还需要重新创建替换宏unchar吗
可以不在创建而直接使用吗?
答案是需重新创建,不能直接使用。但你可以把一些在多个文件中使用的宏、全局变量等统一定义到一个头文件中,那这样就可以避免多次定义了。