C++学习笔记(一):头文件和源文件
說(shuō)明:
當(dāng)一個(gè)源文件(a.cpp)要調(diào)用另一個(gè)源文件(b.cpp)定義的方法時(shí),需要在a.cpp中寫(xiě)上這個(gè)方法的聲明(只需要該方法的名稱(chēng)、返回值和參數(shù),類(lèi)似Java的接口);
如果每次調(diào)用其他文件的方法時(shí)都寫(xiě)上相同的聲明就會(huì)很麻煩,而且當(dāng)b.cpp的定義修改時(shí)所有調(diào)用到該文件的聲明都要修改,這樣工作量太大且容易出錯(cuò),所以出現(xiàn)了頭文件,我們把所有的聲明都存放到頭文件中,需要使用到的時(shí)候使用宏命令“#include”包含進(jìn)這個(gè).cpp文件中即可;
#include:只有一個(gè)功能:把它后面所寫(xiě)的那個(gè)文件的內(nèi)容,完完整整地、一字不改地拷貝到當(dāng)前的文件中來(lái);
而C++規(guī)定,定義只有一次,聲明可以多次,導(dǎo)致頭文件只能寫(xiě)聲明,不能進(jìn)行定義,如果頭文件進(jìn)行定義,被多個(gè)文件#include后,就會(huì)出現(xiàn)多個(gè)定義導(dǎo)致編譯失敗;
頭文件不會(huì)進(jìn)行編譯,只會(huì)通過(guò)#include被其他多個(gè)源文件包含,然后頭文件中的內(nèi)容作為源文件的一部分進(jìn)行編譯;
需要注意的是,.h頭文件不用寫(xiě)在編譯器的命令之后,但它必須要在編譯器找得到的地方、通常是和源文件位于同一個(gè)目錄下;
頭文件的后綴名可用任意名稱(chēng);
預(yù)處理程序:
預(yù)處理程序包含3種,分別是:宏定義、文件包含和條件編譯。
宏定義:
宏定義使用“#define”后跟定義的字符串,宏定義的字符串會(huì)在編譯時(shí)直接進(jìn)行文本替換。
1 #define PI 3.14159
在程序中遇到的所有PI字符串都會(huì)被替換為3.14159。
文件包含:
文件包含有兩種形式,其含義是講制定的文件的內(nèi)容拷貝到當(dāng)前文件中。
1 #include "filename" 2 #include <filename>
使用尖括號(hào)表示使用系統(tǒng)的文件,使用雙引號(hào)表示在當(dāng)前目錄下進(jìn)行查找(包含子目錄),當(dāng)然除了填寫(xiě)相對(duì)路徑外還可以填寫(xiě)絕對(duì)路徑。
條件編譯:
1 #ifndef COMDEF_H 2 #define COMDEF_H 3 4 //頭文件內(nèi)容 5 6 #endif
使用上述宏命令可以使頭文件的內(nèi)容只被執(zhí)行一次;
要達(dá)到上面的目的還可以使用另一種方法:
1 #pragma once
注意:#ifndef需要避免同名的問(wèn)題,但是該方法所有編譯器都支持,而#pragma once可以避免命名的問(wèn)題但是只有較新的編譯器支持。
extern:
extern關(guān)鍵字指定當(dāng)前的內(nèi)容為聲明;
1 double up;//定義了up變量,并且賦值為0 2 extern double up;//聲明了外部的變量up,不會(huì)分配內(nèi)存
函數(shù)的聲明extern關(guān)鍵詞是可有可無(wú)的,因?yàn)楹瘮?shù)本身不加修飾的話(huà)就是extern的;
例外:
const對(duì)象可以直接定義在頭文件中;
內(nèi)聯(lián)函數(shù)也可以直接定義在頭文件中;
類(lèi)的定義放在頭文件中,而類(lèi)的函數(shù)成員的實(shí)現(xiàn)代碼放在一個(gè).cpp文件中;
總結(jié)
以上是生活随笔為你收集整理的C++学习笔记(一):头文件和源文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: latex 小于_一份菜鸡的Latex课
- 下一篇: Echarts实践-实现3D地球