# 和 ## 在巨集定義(define)中經常可以看到,是預編譯過程中的常用語句,本文介紹 # 和 ## 的區別。
先簡單地將這兩個符號進行標籤化,然後再記錄具體實驗。
# — 轉換,完成**到字串的轉換。
## — 連線,完成**的連線。
#和##運算子
#:構串操作符
構串操作符#只能修飾帶引數的巨集的形參,它將實參的字串行(而不是實參代表的值)轉換成字串常量
#define string(x) #x#x#x
#define text(x) "class"#x"info"
//巨集引用:
int abc =
100;
string
(abc)
;text
(abc)
;
//替換結果:
abcabcabc
classabcinfo
##:合併操作符
合併操作符##將出現在其左右的字串行合併成乙個新的識別符號
注意:使用合併操作符##時,自身的識別符號必須預先有定義,否則編譯器會報「識別符號未定義」的編譯錯誤。
字串行合併成新的識別符號不是字串。
#define class_name(name) class##name
#define merge(x,y) x##y##x
//巨集引用:
class_name
(timer)
merge
(me,to)
//替換結果:
classtimer
metome
#define string(x) #x#x#x
#define text(x) "class"#x"info"
#define class_name(name) class##name
#define merge(x, y) x##y##x
void
metome()
void
classtimer()
intmain()
輸出:
abcabcabc
classabcinfo
*****====
-----
在其他文章裡,可能你還會找到 ## 可以拼接字串, # 也可以。但是實測結果是,在 linux 環境中,無法正常編譯。所以為了**的通用性,最好還是僅將 # 和 ## 作上述兩種用途。當然在這個基礎之上可以有很多的擴充套件。 C 中 和 的使用
和 在巨集定義 define 中經常可以看到,是預編譯過程中的常用語句,本文記錄了本人探索 和 區別以及使用的內容 先簡單的將這兩個符號進行標籤化,然後再記錄具體實驗。轉換,完成 到字串的轉換 連線,完成 的連線 示例 1.轉換 為字串 define convert name name int ma...
C 中 和 的使用
和 在巨集定義 define 中經常可以看到,是預編譯過程中的常用語句,本文記錄了本人探索 和 區別以及使用的內容 先簡單的將這兩個符號進行標籤化,然後再記錄具體實驗。轉換,完成 到字串的轉換 連線,完成 的連線示例 1.轉換 為字串 cpp define convert name name int...
C 當中 和 的使用
c 是我們許多人在步入程式設計的時候的第乙個入門語言。但是,這個語言當中也有好多難以理解的概念。在這裡簡單介紹一下兩種位址符號。在介紹這兩個符號之前,我們先說明一下c 當中的兩個概念,變數和位址。變數裡存在兩個值,乙個是變數在記憶體中存著的位置,也就是位址,另外乙個就是這個變數的值,存在記憶體當中。...