C C 的巨集中 和 的作用和展開

2021-08-22 11:34:46 字數 819 閱讀 2245

c/c++ 的巨集中,#的功能是將其後面的巨集引數進行字串化操作,簡單說就是在對它所引用的巨集變數通過替換後在其左右各加上乙個雙引號。

##連線符號由兩個井號組成,其功能是在帶引數的巨集定義中將兩個子串聯接起來,從而形成乙個新的子串。但它不可以是第乙個或者最後乙個子串。

凡是巨集定義裡有用#或##的地方巨集引數是不會再展開,例如_stri(int_max)中的int_max就不會被展開為2147483647。

如果想要使其中的巨集引數展開,則需要多加一層中間轉換巨集: #define stri(s) _stri(s)

加這層巨集的用意是把所有巨集的引數在這層裡全部展開,那麼在轉換巨集裡的巨集就能得到對應的巨集引數。

#include#includeusing namespace std;

#define f(a,b) a##b

#define g(a) #a

#define h(a) g(a)

#define a(x) t_##x

#define b(x) #@x

#define c(x) #x

#define warn_if(exp) if(exp) cerr << #exp << endl;

#define paster( n ) cout << "token" << #n << " = " << n << endl;

#define _cons(a, b) int(a##+##b)

#define _stri(s) #s

#define stri(s) _stri(s)

void test_sharp_symbol()

C C 中「 」和「 」的作用和用法

在c c 的巨集中,的功能是將其後面的巨集引數進行字串化操作 stringfication 簡單說就是在對它所引用的巨集變數通過替換後在其左右各加上乙個雙引號。而 被稱為連線符 concatenator 用來將兩個子串token連線為乙個token。注意這裡連線的物件是token就行,而不一定是巨集...

c c 巨集中 和 的用法

kennyhe 發表於 2007 2 13 12 25 57 一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 i nclude i nclude using namespace std define str s s define cons a,b int a e ...

C C 巨集中「 和 」的用法

一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 i nclude i nclude using namespace std define str s s define cons a,b int a e b int main 二 當巨集引數是另乙個巨集的時候 需要注...