㈠ C語言多文件編程
多個c文件的作用在於將不同功能的代碼分開來實現,這樣便於代碼重用、代碼編譯和代碼管理。
一個程序中,只能有一個main函數,這是整個程序的起點和入口。如果其他人也實現了該函數,則必須要重新命名,然後在唯一的main函數中統一調用。
多個c文件的合並並沒有順序要求,任何一個都可以先編譯或者後編譯。
extern表示導出,可以用於函數和變數。用於函數的時候,表示這是一個外部函數,用於變數的時候,表示這是一個外部變數。
如果使用一個c文件,多個h文件,則會導致改動代碼任何一個地方,都要重新編譯所有的文件,效率上非常不劃算。而使用多個c文件,當代碼發生變更的時候,僅僅相關的c文件代碼需要重新編譯,其他代碼則可以保持不變,不用參與編譯。
函數中的局部變數無法在函數外部調用,只能通過參數傳遞的方式傳遞給第三方函數。因為局部變數是出於棧上面的,棧會隨著函數調用完畢的時候被系統回收。
㈡ C語言怎麼進行多文件編譯,VC++6.0,要求詳細步驟
將以上文件在一個工程中,就可以了,然後將函數定義,抽出來放在.h文件中,使用時,cpp\c文件,引入頭文件即可,如:##include "XXXX.h"
㈢ 怎麼編譯多個c語言文件
1、如果,在一個c主程序中,以include形式包含了其他所有的引用文件,在編譯過程中,編譯器首先會將這些文件合並到一個臨時文件中,然後再對這個臨時文件進行編譯。
2、如果,是作為一個工程,編譯器會分別編譯各個獨立的文件(如果文件中有include按照上一步進行),然後再將編譯好的初步結果用鏈接程序連到一起。
簡單的說,每一個.c或者.cc都是一個編譯單元,每一個編譯單元編輯的結果是一個.o或者obj之類的中間文件,至於是否是多文件,不需要關心,但是要保證不同的編譯單元之間不要有重復的符號,這就是要避免重復包含。
每一個編譯單元生成的目標文件.o或者obj都會引用一些不在本目標文件中的符號,這些符號定義在別的.o或者.obj文件中, 鏈接器把他們聯系在一起,所有的符號也就都有定義了,編譯鏈接簡單說來就是這樣。
㈣ 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
以上兩種方法相比較,第一中方法編譯時需要所有文件重新編譯,而第二種方法可以只重新編譯修改的文件,未修改的文件不用重新編譯。
㈤ c語言多文件編譯改錯
樓主..這個程序還是重寫一下吧
數組是不能在程序裡面指定大小的..必須在定義的時候就訂好大小
還有你那個排序的問題太大了...
for(a=0;a<n;a++) //n個數比n-1次就行..剩下的那個肯定是最小的..還有你那個a已經是數組了..怎麼還在這當整形用呢..太粗心了吧
for(b=0;b<n-a;b++)//n個數..要把最大的數沉底..比n-1 次就行...
{ if(a[c]>a[c+1])
{ temp=a[c];
a[c]=a[c+1];
a[c+1]=temp;
}
c++; //比完一趟之後應該把c置0
}
應該改成
for(i=0;i<n-1;a++)
for(b=0;b<n-i-1;b++)
{c = 0;
{ if(a[c]>a[c+1])
{ temp=a[c];
a[c]=a[c+1];
a[c+1]=temp;
}
c++;
}
}
樓主不要一次寫那麼多..錯了也不好查..先分成幾個寫..
建議樓主 先自己寫個排序的程序吧.. 然後再慢慢往上面加其他的吧...
㈥ c語言編寫和編譯多文件的程序
新建一個項目,然後添加文件,可以將不同的函數寫在不同的文件中,要有一個頭文件,包含需要調用的函數的聲明,並且在其它文件中包含這個頭文件。
編譯調試方法和單文件程序無異。
㈦ C語言中,如何用多個文件編寫程序
將一個函數寫在一個文件里,然後再在另一個文件里用「include」包含這個文件。舉個例子 在文件c1.c里編一個函數:
void printWord(){
printf("Hello!world!");
}
再建立一個文件c2.c,文件開頭寫上#include"c1.c",就可以調用c1.c里的函數printword()了
㈧ 關於C語言如何用多文件編一個程序
樓主是用TURBO C的吧? TC盡管比較原始簡單,也有創建工程文件功能.
除了樓主去看TC菜單項..另有兩種方法推薦..畢竟TC太老了.
1,學習使用其它C/C++開發環境.這很多,VC++,DEV-C++等等.
2,學習c命令行編譯, 這是最本質最基礎的使用C編譯器的方法.
其實要編譯多個文件,比如a.c b.c
使用TC,就是tcc a.c b.c回車
使用BORLAND C ,就是 bcc32 a.c b.c回車
使用GNU C, 就是 gcc a.c b.c 回車
使用VC++, 就是 cl a.c b.c 加車
...
㈨ 如何把一個復雜的C語言源代碼分成幾個文件,然後在dev c++上進行多文件編譯
假設我們要更改的源代碼如下:
即「No such file or directory」就是沒有文件或者路徑。說明你的路徑寫錯了,在編程時務必要注意一下。
㈩ 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嗎
可以不在創建而直接使用嗎?
答案是需重新創建,不能直接使用。但你可以把一些在多個文件中使用的宏、全局變數等統一定義到一個頭文件中,那這樣就可以避免多次定義了。