語彙基元貼上運算子 (#)
雙數字符號或"語彙基元貼上 」 運算子 (#),這通常稱為 「 合併 」 的運算子,用於類似物件的與類似函式的 [巨集。 它允許不同的語彙基元,以連接成單一的語彙基元,因此不能在巨集定義中的第一個或最後一個語彙基元。
如果在巨集定義中的型式參數是前面或後面的語彙基元貼上運算子,型式參數就會立即取代未展開的實質引數。 取代之前的引數不會執行巨集展開。
接著,出現的每個中的語彙基元貼上運算子語彙基元字串移除時,並都串連的開頭與其後的語彙基元。 產生的語彙基元必須是有效的語彙基元。 如果是的話,此語彙基元被掃描可能的取代如果它表示巨集名稱。 識別項表示取代之前的程式中,串連的語彙基元將已知的名稱。 每個語彙基元會表示在程式內或編譯器的命令列上其他地方定義的語彙基元。 泛空白字元前面或後面的運算子是選擇性的。
這個範例說明一個指定程式輸出字串化和語彙基元貼上運算子的用法:
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
當巨集以數字的引數,例如呼叫
paster( 9 );
巨集的產生
printf_s( "token" "9" " = %d", token9 );
而成為
printf_s( "token9 = %d", token9 );
範例
// preprocessor_token_pasting.cpp
#include <stdio.h>
#define paster( n ) printf_s( "token" #n " = %d", token##n )
int token9 = 9;
int main()
{
paster(9);
}