1. 程式人生 > >C++前處理器

C++前處理器

前處理器是一些指令,指示編譯器在實際編譯之前所需完成的處理。

#define

define用於定義巨集。巨集是一個程式碼級的文字替換,因為替換髮生在編譯之前。

神奇的例子,來猜猜輸出結果。

#define STR(s) #s            //# 會給 s 加上雙引號 "s"
#define CONCAT(x, y) x##y    //## 是將x和y拼接在一起
#define X(a) a               //帶引數的巨集  	

//main函式中
cout << STR(hello world) << endl;	
cout << "CONCAT(1, 2) = " << CONCAT(1, 2) << endl; 	
CONCAT(in, t) i = 1;	
cout << "i = " << i << ", type: " << typeid(i).name() << endl; 	
X(double) j = 3.14;	
cout << "j = " << j << ", type: " << typeid(j).name() << endl;

輸出:

hello world
CONCAT(1, 2) = 12
i = 1, type: int
j = 3.14, type: double

很有用的C++巨集

這些巨集對於列印錯誤日誌很有用,可以定位到某個文字,某行,甚至程式的編譯日期。

巨集 描述
LINE 當前行
FILE 當前檔名
DATA 程式編譯日期
TIME 程式編譯時間

條件編譯

簡述了,確實要有點基礎才能懂。不過沒關係,後邊有例子。

指令 描述
#ifdef XXX 如果定義了巨集XXX
#ifndef XXX 如果沒有定義巨集XXX
#if XXX 如果表示式XXX為真
#elif XXX 否則,如果表示式XXX為真
#else 否則
#endif 結束標誌

如果沒有定義 XXX 這個巨集,程式碼塊有效;否則,程式碼塊無效。

#ifndef XXX		
    //程式碼塊
#endif

如果(1==1)為真,則程式碼塊1有效,否則程式碼2有效。

#if (1==1)
    //程式碼塊1
#else
    //程式碼塊2
#endif