此文主要介紹宏定義,並在介紹宏定義時舉例介紹預處理命令
預處理
參考:C 預處理器 | 菜鳥教程
重要的預處理器指令如下:
指令 | 描述 |
---|---|
#define | 定義宏 |
#include | 包含一個源代碼文件 |
#undef | 取消已定義的宏 |
#ifdef | 如果宏已經定義,則返回真 |
#ifndef | 如果宏沒有定義,則返回真 |
#if | 如果給定條件爲真,則編譯下面代碼 |
#else | #if 的替代方案 |
#elif | 如果前面的 #if 給定條件不爲真,當前條件爲真,則編譯下面代碼 |
#endif | 結束一個 #if……#else 條件編譯塊 |
#error | 當遇到標準錯誤時,輸出錯誤消息 |
#pragma | 使用標準化方法,向編譯器發佈特殊的命令到編譯器中 |
預處理運算符
符號 | 描述 |
---|---|
\ | 宏延續運算符。一個宏通常寫在一個單行上。但是如果宏太長,一個單行容納不下,則使用宏延續運算符(\) |
# | 字符串常量化運算符。在宏定義中,當需要把一個宏的參數轉換爲字符串常量時,則使用字符串常量化運算符(#)。 |
## | 標記粘貼運算符。宏定義內的標記粘貼運算符(##)會合並兩個參數。 |
defined | 預處理器 defined 運算符是用在常量表達式中的,用來確定一個標識符是否已經使用 #define 定義過。 |
宏定義
define,宏定義,C語言中預處理命令一種。分爲無參宏定義和帶參宏定義。
無參宏定義的一般形式爲:#define 宏名 字符串
帶參宏定義的一般形式爲:#define 宏名(參數表) 字符串
無參宏定義
C語言中無參宏定義的一般形式爲:#define 宏名 字符串
- 使用
#undef 宏名
取消已定義的宏
#define MESSAGE "Hello World!"
printf("%s\n",MESSAGE);
#undef MESSAGE
- 如果MESSAGE沒有定義,則定義MESSAGE爲10000
#ifndef MESSAGE
#define MESSAGE 10000
#endif
printf("%d\n",MESSAGE);
帶參宏定義
帶參宏定義的一般形式爲:#define 宏名(形參表)字符串
- 如果MESSAGE沒有定義,執行語句1;否則,執行語句2
#define MAX(a,b) a>b?a:b
#if !defined(MESSAGE)
#define MESSAGE 10000
#else
printf("%d\n",MAX(1,10));
#endif
- 如果if判斷爲真,則執行語句
bool flag=true;
#define PRINT(section) if(flag){\
printf("%s\n",section);\
}
PRINT("hello world!");