談一談 define中 和 的作用

2021-10-05 17:59:44 字數 1448 閱讀 6721

最近在閱讀大佬們寫的開源庫的時候,看到一些巨集定義,不是很明白它的用法,就查了很多資料,弄清楚它們的用法後,在這裡記錄一下。

(1)#的作用

#param指把param當成符號,就是把#後面的看成字串

#define test1(param) #param

#include

intmain

(int argc,

char

*ar**)

執行結果:

"123"

123

(2)##的使用

##在巨集裡面相當於連線符,把前後兩個字串連回在一起作為乙個字串

在vs編譯器中

#define test2(param1,param2) (param1##param2)

#include

intmain

(int argc,

char

*ar**)

而在gcc編譯器卻有不同

#define test2(param1,param2) (param1 param2)

#include

intmain

(int argc,

char

*ar**)

在vs中

#define test2(param1,param2) (param1##param2)
在gcc中,注意後面的(param1 param2)中間有空格

#define test2(param1,param2) (param1 param2)
我們繼續看乙個例子:

在vs編譯器下:

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

#define d(a) #a

#define s(a) d(a)

#include

using

namespace std;

intmain()

執行結果:

f

(a, b)

ab

解釋:

1,不以"#"開頭的,先展開引數a,然後是替換**:

s(f(a,b))–>s(ab)–>d(ab)–>「ab」

2,以"#"開頭的,直接替換,不展開:d(f(a,b))–>「f(a,b)」

關於這個例子更多的解釋,具體可以參考:#define中#和##的作用

參考:c語言巨集定義中 ## 和#的作用

#define中#和##的作用

define中 和 的作用

define f a,b a b define d a a define s a d a void main void 輸出結果 f a,b ab分析 把兩個符號連起來 a指把a當成符號,就是把 後面的看成字串 和 操作符是和 define巨集使用的.使用 使在 後的首個引數返回為乙個帶引號的字串....

define中 和 的作用

define f a,b a b define d a a define s a d a void main void 輸出結果 f a,b ab分析 把兩個符號連起來 a指把a當成符號,就是把 後面的看成字串 和 操作符是和 define巨集使用的.使用 使在 後的首個引數返回為乙個帶引號的字串....

談一談教育

今晚和研究生的師兄聊了會天,突然就說到教育的問題,有點感想,就寫下來,算是我對中國教育的一點看法吧。毫無疑問,中國的教育體制存在不少問題。在高中的時候或許還不是那麼明顯 對比起大學來說 上了大學,我才看清了我們教育的一些弊端。我覺得,最大的弊端,在於價值觀的引導問題上。不知道大家有沒和我一樣覺得當今...