鏈結相關 預處理

2022-09-05 02:03:06 字數 1058 閱讀 8882

鏈結

當多個檔案同時被編譯時,不同檔案中的函式的使用,比如main中使用了其他檔案的函式,那麼這是有問題的。因為main不認識該函式

解決以上問題的辦法有2個,

1) 用 extern 來宣告別的檔案中的函式或變數,而此時,如果多個檔案需要該檔案中的函式時,每個檔案都要宣告一次,這樣不好。所以就引入第2種辦法

2)使用標頭檔案,然後在使用到得地方加入 #include 「stack.h」這樣的話,就解決了以上問題,使用標頭檔案時要注意,header guard,就是要避免標頭檔案被多次的預處理。具體辦法是使用巨集。。。看以下例子

header guard

/* stack.h */

#ifndef stack_h

#define stack_h

extern

void push(char);

extern

char pop(void);

extern

int is_empty(void);

#endif

預處理1。巨集定義

變數巨集 #define n 20 或 #define str 「hello, world」

函式巨集 #define max(a, b) ( (a) > (b ) ? (a ) : (b ))

k = max( i, j );

定義這種函式巨集要格外小心,首先這種的引數不需要型別,另外要多用括號 ()

條件預處理

條件編譯

#ifndef stack_h

#define stack_h

/* body of header */

#endif

另外判斷式

#if machine == 68000

int x;

#elif machine == 8086

long x;

#else

/* all others */

#error unknown target machine

#endif

鏈結相關 預處理

鏈結 當多個檔案同時被編譯時,不同檔案中的函式的使用,比如main中使用了其他檔案的函式,那麼這是有問題的。因為main不認識該函式 解決以上問題的辦法有2個,1 用 extern 來宣告別的檔案中的函式或變數,而此時,如果多個檔案需要該檔案中的函式時,每個檔案都要宣告一次,這樣不好。所以就引入第2...

預處理 編譯 彙編 鏈結

1.預處理 預處理器 預處理階段主要處理 include 和 define 它把 include包含進來的 h 檔案插入到 include 所在的位置,把源程式中使用到的用 define 定義的巨集用實際的字串代替。2.編譯階段 編譯器 在這個階段,編譯器先要檢查 的規範性和語法錯誤等,以確定 的實...

預處理,編譯, 優化, 彙編, 鏈結

編譯,編譯程式讀取源程式 字元流 對之進行詞法和語法的分析,將高階語言指令轉換為功能等效的彙編 再由匯程式設計序轉換為機器語言,並且按照作業系統對可執行檔案格式的要求鏈結生成可執行程式。c源程式標頭檔案 預編譯處理 cpp 編譯程式本身 優化程式 匯程式設計序 鏈結程式 可執行檔案 1.編譯預處理讀...