最近在閱讀大佬們寫的開源庫的時候,看到一些巨集定義,不是很明白它的用法,就查了很多資料,弄清楚它們的用法後,在這裡記錄一下。
(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巨集使用的.使用 使在 後的首個引數返回為乙個帶引號的字串....
談一談教育
今晚和研究生的師兄聊了會天,突然就說到教育的問題,有點感想,就寫下來,算是我對中國教育的一點看法吧。毫無疑問,中國的教育體制存在不少問題。在高中的時候或許還不是那麼明顯 對比起大學來說 上了大學,我才看清了我們教育的一些弊端。我覺得,最大的弊端,在於價值觀的引導問題上。不知道大家有沒和我一樣覺得當今...