1. 預處理
預處理的主要作用就是對資源進行等價替換,最常見的預處理有:檔案包含(#include ),條件編譯(#if,#ifndef,#ifdef,#endif,#undef),布局控制(#pragma),巨集替換等(#define)等。
1.1 標頭檔案中放什麼?
標頭檔案一般用於類的定義、extern變數和函式的宣告。由於標頭檔案可能被包含在多個原始檔中,所以不應該含有變數定義或函式的定義。比如不要將這樣的定義:
extern int a = 10; //有初始化,相當於定義。
const int a = 10; //可以,但是最好將其定義到原檔案中,然後用 extern int a; 引入。
int a; //將其定義到原檔案中,然後用 extern int a; 引入。
1.2 #include如何工作?
預處理時用標頭檔案裡的內容替換每乙個#include的地方。所以需要用頭檔案保護符(#ifndef ... #define ... #endif)以防止多重包含。<>中的標頭檔案表示標準標頭檔案,查詢時開始於預定義的位置;""中的標頭檔案是非系統檔案,查詢時開始於原始檔所在路徑。
2. 編譯連線
編譯連線是編譯器的事情,但應該知道這個過程都做了些什麼。(以下過程為轉抄,我覺得不是說的很清楚
首先是預編譯,由cpp完成。將c和cpp檔案轉為*.i檔案。
然後是編譯過程,由cc完成。檔案是基本的編譯單元,編譯後將生成由帶變數的彙編語句組成的*.s檔案。
之後是彙編過程,由彙編器as完成。生成*.o/*.obj檔案,其實就是可重定位的連線格式檔案。
最後是連線過程,由用ld/link完成。主要任務是符號匹配和重定位符號,生成可執行檔案。
3. c++基礎知識
C 常見問題
問題描述 解決方式 無法解析的外部符號 public cdecl minidl operator operator void 0operator minidl qeaa xz 該符號在函式 public cdecl minidl denseop denseop void 0denseop minid...
c 常見問題
編譯器總是根據型別來呼叫類成員函式。但是乙個派生類的指標可以安全地轉化為乙個基類的指標。這樣刪除乙個基類的指標的時候,c 不管這個指標指向乙個基類物件還是乙個派生類的對 象,調刪除線格式用的都是基類的析構函式而不是派生類的。如果你依賴於派生類的析構函式的 來釋放資源,而沒有過載析構函式,那麼會有資源...
C 常見問題
1.reinterpret cast,static cast,dynamic cast const cast區別 2.類的大小 class ctest1 int size sizeof ctest1 1class ctest2 static void func2 protected static i...