c编译多个文件
① 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
以上两种方法相比较,第一中方法编译时需要所有文件重新编译,而第二种方法可以只重新编译修改的文件,未修改的文件不用重新编译。
② keil 怎么同时编译多个C文件
要想把多个C程序同时编译
1.主函数里要有对其他C程序里的所有函数的声明。(也可以用.h文件来声明并在主函数里include "*.h" *代表h文件文件名)
2.在keil工程里要添加所有.c文件
③ 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吗
可以不在创建而直接使用吗?
答案是需重新创建,不能直接使用。但你可以把一些在多个文件中使用的宏、全局变量等统一定义到一个头文件中,那这样就可以避免多次定义了。
④ vscode C语言如何编译多个源文件
你可以写一个类似的任务在task里:在args一行,写你需要编译的文件
{
"label": "build my project",
"type": "shell",
"command": "C:\\MinGW\\bin\\g++.exe",
"args": ["main.cpp", "test.cpp", "-o", "test.exe"],
"group": "build",
},
你还可以写一个make任务,对于文件多的,手写不现实,可以做一个makefile
这样你只要在launch里面
preLaunchTask,写上这个build my project,就可以了。
⑤ C语言中,如何用多个文件编写程序
1.
将一个函数写在一个文件里,然后再在另一个文件里用“include”包含这个文件。
2.
举例:
在文件c1.c里编一个函数:
void
printWord(){
printf("Hello!world!");
}
再建立一个文件c2.c,文件开头写上#include"c1.c",就可以调用c1.c里的函数printword()了
这样通过include操作,可以把任意多个文件连接起来,编译成一个程序运行。
⑥ c璇瑷涓濡备綍钖屾椂杩愯屽氢釜婧愭枃浠讹纻
鍦–璇瑷涓锛屽彲浠ヤ娇鐢ㄥ氢釜婧愭枃浠舵潵缂栧啓涓涓绋嫔簭銆傚彲浠ュ皢绋嫔簭鍒嗘垚澶氢釜妯″潡锛屾疮涓妯″潡瀵瑰簲涓涓婧愭枃浠躲傚湪浣跨敤澶氢釜婧愭枃浠舵椂锛屽彲浠ラ噰鐢ㄤ互涓嬩袱绉嶆柟娉曟潵钖屾椂缂栬疟鍜岃繍琛屽氢釜婧愭枃浠讹细
灏嗗氢釜婧愭枃浠剁紪璇戞垚涓涓鍙镓ц屾枃浠
鍦ㄨ繖绉嶆柟娉曚腑锛屽彲浠ヤ娇鐢ㄤ竴涓锻戒护灏嗗氢釜婧愭枃浠剁紪璇戞垚涓涓鍙镓ц屾枃浠躲备緥濡傦纴锅囱炬湁涓や釜婧愭枃浠秏ain.c鍜宖unc.c锛屽彲浠ヤ娇鐢ㄤ互涓嫔懡浠ゅ皢瀹冧滑缂栬疟鎴愪竴涓鍙镓ц屾枃浠讹细
go
gcc main.c func.c -o program
鍏朵腑锛実cc鏄缂栬疟鍣ㄧ殑锻戒护锛宫ain.c鍜宖unc.c鏄婧愭枃浠讹纴-o program鎸囧畾鍙镓ц屾枃浠剁殑钖岖О涓簆rogram銆
灏嗗氢釜婧愭枃浠剁紪璇戞垚澶氢釜鐩镙囨枃浠讹纴铹跺悗阈炬帴鎴愪竴涓鍙镓ц屾枃浠
鍦ㄨ繖绉嶆柟娉曚腑锛屽彲浠ュ厛灏嗗氢釜婧愭枃浠跺垎鍒缂栬疟鎴愮洰镙囨枃浠讹纴铹跺悗鍐嶅皢瀹冧滑阈炬帴鎴愪竴涓鍙镓ц屾枃浠躲备緥濡傦纴锅囱炬湁涓や釜婧愭枃浠秏ain.c鍜宖unc.c锛屽彲浠ヤ娇鐢ㄤ互涓嫔懡浠ゅ皢瀹冧滑鍒嗗埆缂栬疟鎴愮洰镙囨枃浠讹细
r
gcc -c main.c
gcc -c func.c
鍏朵腑锛-c阃夐”琛ㄧず鍙缂栬疟婧愭枃浠讹纴涓嶈繘琛岄摼鎺ャ傜紪璇戝悗浼氱敓鎴愪袱涓鐩镙囨枃浠秏ain.o鍜宖unc.o銆
铹跺悗锛屽彲浠ヤ娇鐢ㄤ互涓嫔懡浠ゅ皢涓や釜鐩镙囨枃浠堕摼鎺ユ垚涓涓鍙镓ц屾枃浠讹细
go
gcc main.o func.o -o program
鍏朵腑锛宫ain.o鍜宖unc.o鏄鐩镙囨枃浠讹纴-o program鎸囧畾鍙镓ц屾枃浠剁殑钖岖О涓簆rogram銆
杩欎袱绉嶆柟娉曢兘鍙浠ュ悓镞剁紪璇戝拰杩愯屽氢釜婧愭枃浠讹纴鍏蜂綋浣跨敤鍝绉嶆柟娉曞彲浠ユ牴鎹瀹为檯𨱍呭喌阃夋嫨銆
⑦ 怎么编译多个c语言文件
1、如果,在一个c主程序中,以include形式包含了其他所有的引用文件,在编译过程中,编译器首先会将这些文件合并到一个临时文件中,然后再对这个临时文件进行编译。
2、如果,是作为一个工程,编译器会分别编译各个独立的文件(如果文件中有include按照上一步进行),然后再将编译好的初步结果用链接程序连到一起。
简单的说,每一个.c或者.cc都是一个编译单元,每一个编译单元编辑的结果是一个.o或者obj之类的中间文件,至于是否是多文件,不需要关心,但是要保证不同的编译单元之间不要有重复的符号,这就是要避免重复包含。
每一个编译单元生成的目标文件.o或者obj都会引用一些不在本目标文件中的符号,这些符号定义在别的.o或者.obj文件中, 链接器把他们联系在一起,所有的符号也就都有定义了,编译链接简单说来就是这样。