多源文件編譯: 新建一個 main.c 然后再創(chuàng)建一個 a.c int myMax(int a,int b) { if(a>b) return a; return b;} 然后編譯 如果不是 visual studio C++ 的環(huán)境的話,會報錯的。所以我用了dev C++就報了錯。 錯誤信息: 8 21 F:\c++codeInDev\多源文件編譯\main.c [Error] 'myMax' was not declared in this scope 說 myMax 沒這個函數(shù)。 所以 需要一個 函數(shù)的聲明。 main.c 代碼: 第二種寫法——采用加載頭文件的方式: main.c 代碼: a.h代碼: int myMax(int a,int b); a.c 代碼: int myMax(int a,int b){ if(a>b) return a; return b;} 擴展: main.c代碼 a.c代碼: int myMax(int a,int b){ if(a>b) return a; return b;} a.h 代碼: int myMax(int a,int b){ if(a>b) return a; return b;} b.h 代碼: int myAdd(int a, int b); b.c 代碼: int myAdd(int a, int b){ return a+b;} 運行結(jié)果示例: 馬上要引出一個 別的事兒: 【dev竟然不可以復(fù)制文件夾,估計有什么隱含設(shè)置。。。在 android里面 和 javaweb里面都有這么一個東西的。android太久不弄有點兒忘記了,在 javaweb里面,選中一個項目,摁住alt+Enter,然后 搜索 web。然后再修改這個 項目的名稱,否則當(dāng)前復(fù)制的項目會覆蓋之前的那個項目。在發(fā)布之后】 那就在 這個 上面改吧。。。 如果 b.h 里面包含了 a.h 那么會出現(xiàn)什么樣的狀況呢? 修改后的b.h: #include 'a.h'int myAdd(int a, int b); 好吧,竟然沒有問題。 但是 理論上這樣多包含了一個 int myMax(int a,int b);就相當(dāng)于重復(fù)的聲明在main.c了照理說是不可以的。 所以誕生了 #ifndef #define #endif 所以把程序 寫成這樣: 好吧 就是 想引入這個 如果 沒有定義的話,就定義 這樣一個 概念。 示例代碼://我們可以學(xué)著照抄人家的代碼,人家的這種.h 文件基本上都是這樣做的。完后看基本上都是 #endif 結(jié)尾的 修改的部分: a.h 代碼: #ifndef _AH#define _AHint myMax(int a,int b);#endif b.h 代碼: #ifndef _BH#define _BHint myAdd(int a, int b);#endif 這是 原來本身c語言里面提供的類庫文件的書寫格式,下面截了個圖 可以看到人家也是這么操作的。 相關(guān)描述: extern 是c++特有的!聲明這段東西要以,C的方式編譯。用在 dll的書寫上,dll這個 東西真的是很神奇。是動態(tài)加載的類庫文件。這種動態(tài)加載是在程序運行的時候,把當(dāng)前這個 exe文件和exe所需要的dll文件一起在內(nèi)存中開辟一塊空間。所以這樣就導(dǎo)致exe做出來可以很小。但是對于靜態(tài)的lib來說。需要一起打包在exe文件中,這樣exe就很大。并且每次改動都需要重新編譯exe文件。但是對于dll的話,只需要重新編譯這一部分,然后把dll放到對應(yīng)目錄下面,就可以了。并且,通常情況下,高級語言開發(fā)上層,邏輯部分很迅速。但是用c就很乏力,但是對于某些必須要操作硬件的部分就只能使用C開發(fā)好dll,然后可以讓java等上層語言進行調(diào)用。這樣的語言除了java還有 C++,python等等. |
|