巨集 #define命令是C語言中的一個巨集定義命令,它用來將一個標識符定義為一個字元串,該標識符被稱為巨集名,被定義的字元串稱為替換文本. 使用巨集時是簡單的代碼段替換. #define的概念 簡單的巨集定義 #define <巨集名> <字元串> 例: #define PI 3.1415926 註:使用簡單 ...
巨集
#define命令是C語言中的一個巨集定義命令,它用來將一個標識符定義為一個字元串,該標識符被稱為巨集名,被定義的字元串稱為替換文本. 使用巨集時是簡單的代碼段替換.
#define的概念
簡單的巨集定義
#define <巨集名> <字元串>
例: #define PI 3.1415926
註:使用簡單的巨集定義可以定義一些常量,區分簡單巨集定義
和const valtype
的區別(優先使用const)
帶參數的巨集定義(巨集函數)
#define <巨集名> (<參數表>) (<巨集體>)
例: #define Max(a, b) ( (a)>(b) ? (a) : (b))
註:簡單代碼段使用巨集函數比使用函數好,免去了函數調用的開銷,提高運行效率
巨集的使用情形
- 頭文件包含
把源程式中的#include 擴展為文件正文,即把包含的.h文件找到並展開到#include 所在處 - 條件編譯
預處理器根據#if
和#ifdef
等編譯命令及其後的條件,將源程式中的某部分包含進來或排除在外,通常把排除在外的語句轉換成空行- #if 命令
#if 整型常量表達式1 程式段1 #elif 整型常量表達式2 程式段2 #elif 整型常量表達式3 程式段3 #else 程式段4 #endif
- #ifdef
#ifdef 巨集名 程式段1 #else 程式段2 #endif
- #if 命令
- 巨集展開
預處理器將源程式文件中出現的對巨集的引用展開成相應的巨集定義,即本文所說的#define
的功能,由預處理器來完成,這裡是單純的替換與展開 - 避免頭文件重覆引用
#ifndef INCLUDE_NAME_H #define INCLUDE_NAME_H //頭文件內容 #endif
define中的三個特殊符號:#,##,#@
#define Conn(x,y) x##y
#define ToChar(x) #@x
#define ToString(x) #x
x##y
表示x連接y, 如int n = Conn(123,456); // 結果就是n=123456;
#@x
表示給x加單引號, 如char a = ToChar(1); //結果就是a='1';
#x
表示給x加雙引號, 如std::string str = ToString(12345); //結果就是std="12345";