A. linux下 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
以上兩種方法相比較,第一中方法編譯時需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。
B. C語言多個源文件一起編譯
你這個是一個工程里的兩個.c文件,如果這兩個.c文件都有入口那麼肯定是不正確的,編譯器會不知道哪個才是你程序的真正入口,如果你去掉一個入口,利用頭文件包含來調用函數,兩個.c也是一樣可以的
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嗎
可以不在創建而直接使用嗎?
答案是需重新創建,不能直接使用。但你可以把一些在多個文件中使用的宏、全局變數等統一定義到一個頭文件中,那這樣就可以避免多次定義了。
D. 關於C語言多文件編譯的問題
新建一個工程,你可以把一類函數(類似是字元串處理的)作為一個文件寫在*.h文件中,在其中聲明每個函數,然後在*.cpp文件中定義每個函數,在主函數中將你的*.文件包含進來,這樣 就可以實現了。這是個大體思路,具體需要自己去看。不行再找我
E. C語言中,如何用多個文件編寫程序
1.
將一個函數寫在一個文件里,然後再在另一個文件里用「include」包含這個文件。
2.
舉例:
在文件c1.c里編一個函數:
void
printWord(){
printf("Hello!world!");
}
再建立一個文件c2.c,文件開頭寫上#include"c1.c",就可以調用c1.c里的函數printword()了
這樣通過include操作,可以把任意多個文件連接起來,編譯成一個程序運行。
F. Notepad++ 如何編譯並運行C語言多文件
1:安裝MinGW及GCC編譯器
2:配置環境變數(註:可能需要重啟後生效)
計算機-->屬性-->高級系統設置-->環境變數-->系統:path 中添加C:\MinGW\bin;
當然MinGW是安在C盤下,按不同路徑修改
3:打開Notepad++,編寫一段C++代碼並保存
例如:
#include <iostream>
using namespace std;
int main(){
int a, b;
cout<<"Input:"<<endl;
while(cin>>a>>b){
cout<<a+b<<endl;
}
return 0;
}
4:菜單欄--》運行--》運行,彈出框中輸入:
cmd /k g++ -o $(NAME_PART).exe "$(FULL_CURRENT_PATH)" & PAUSE & EXIT
選擇快捷鍵後保存為: G++編譯,注意快捷鍵不要有重復,在點擊彈出框的運行,Ok,關閉Notepad,再打開Notepad++;
5:菜單欄--》運行--》運行,彈出框中輸入:
cmd /k "$(NAME_PART)" & PAUSE & EXIT
同理保存名稱換為為: G++運行,再點運行程序就會執行了
G. C語言多文件編程
多個c文件的作用在於將不同功能的代碼分開來實現,這樣便於代碼重用、代碼編譯和代碼管理。
一個程序中,只能有一個main函數,這是整個程序的起點和入口。如果其他人也實現了該函數,則必須要重新命名,然後在唯一的main函數中統一調用。
多個c文件的合並並沒有順序要求,任何一個都可以先編譯或者後編譯。
extern表示導出,可以用於函數和變數。用於函數的時候,表示這是一個外部函數,用於變數的時候,表示這是一個外部變數。
如果使用一個c文件,多個h文件,則會導致改動代碼任何一個地方,都要重新編譯所有的文件,效率上非常不劃算。而使用多個c文件,當代碼發生變更的時候,僅僅相關的c文件代碼需要重新編譯,其他代碼則可以保持不變,不用參與編譯。
函數中的局部變數無法在函數外部調用,只能通過參數傳遞的方式傳遞給第三方函數。因為局部變數是出於棧上面的,棧會隨著函數調用完畢的時候被系統回收。
H. 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;
}
}
I. 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,就可以了。