1、什么是預處理器
2、什么是預處理器指令
3、預處理器指令
4、宏指令
5、宏函數
6、宏函數的優缺點
7、條件編譯指令
1、什么是預處理器
• 預處理器是一個程序,用來處理源程序中的預處理指令。
• 一個程序在編譯之前一般都要經過預處理。
2、什么是預處理器指令
• 以“#”開頭的指令叫預處理指令
• 可以出現在任何位置,必須一行結束
• 如果要換行,須得用"\"來連接兩行內容
3、預處理器指令
• 文件包含
#include <>#include “”
• 宏定義
無參宏定義
有參宏定義
• 條件編譯
#if
#ifdef
#ifndef
#endif
#elif
#else
#undef
#if defined
4、宏指令
宏相當於文本的替換操作
• 語法格式:
-定義在函數的外面
-格式:#define PI 3.14
PI為宏的文本內容 在編譯前將PI的內容替換成3.14
5、宏函數
• 語法格式: #define MianJi(r) PI*r*r
宏函數只是文本,只是相當於做了內容替換的操作,注意參數是沒有數據類型
6、宏函數的優缺點
• 宏函數的優缺點
可以代碼更簡單、更容易,避免大量使用。
• 宏函數注意事項
– 宏函數中的參數一定要用括號括起來,以防止替換后的優先級問題。
– 宏函數的整個表達式也需要用括號括起來,以防止宏函數參於表 達式的運算
– 宏函數中的多條語句時,應寫成復合語句,以防止重復定義變量。
– 調用宏函數時,不要將++,--的表達式做為參數傳遞,可以先++,--后調用,或者,調用后++,--,以防止在宏函數中重復地 計算++,--
– 宏函數也可以調用另一個宏函數
7、條件編譯指令
• 在代碼中設置編譯條件 根據編譯條件進行代碼的編譯並運 行。(跨平台)
• 在編譯文件的時候傳入一個參數,根據參數就可以對代碼進 行有選擇的編譯。
gcc -DZHAOBENSHAN main3.c
• 條件指令
#if 如果 #ifdef 如果定義
#ifndef 如果沒定義 #elif 如果 //else if#else 否則 與 #if 對應關系
#endif 結束標識
#undef 取消宏和#define 定義宏
• 編譯方式
根據參數編譯
gcc -DXXX main.c
根據宏值(參數)
#define ZHAOBENSHAN 1
根據宏"值(邏輯)"進行編譯
#if ZHAOBENSHAN==1