在C++中自定義宏的簡單方法
可以使用宏定義沒有返回值的“函數(shù)”。例如:
這樣的“函數(shù)”與真正意義上的函數(shù)有本質(zhì)的區(qū)別,因?yàn)楹晔且粋€(gè)編譯前行為,僅僅是編譯前對(duì)文本進(jìn)行替換。在Python源碼中,經(jīng)??梢钥吹较旅骖愃频暮甓x:
#define foo(x) \ do { \ ... \ } while (0)
為什么要使用do { ... } while (0)這樣的語法而不直接使用 { } 呢?定義了上面這個(gè)宏,我們就可以在代碼中使用類似這樣的代碼:foo(3); 注意結(jié)尾的分號(hào),它看起來很像一個(gè)函數(shù),實(shí)現(xiàn)上它表示一條語句。如果使用 { } 來代替 do { ... } while (0),那么使用分號(hào)顯然是個(gè)語法錯(cuò)誤。
使用宏時(shí),有幾點(diǎn)要特別注意:
要特別留心空格。下面的兩個(gè)宏是一樣的:
#define foo(x) (x << 2) #define boo (x) (x << 2) //注意括號(hào)前面的空格
用宏給類型取別名與typedef有很大的區(qū)別。例如:
相關(guān)文章
C語言題解Leetcode56合并區(qū)間實(shí)例
這篇文章主要為大家介紹了C語言題解Leetcode56合并區(qū)間實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01

如何用C++制作LeetCode刷題小技巧-錯(cuò)題記錄本

C語言實(shí)現(xiàn)簡單的學(xué)生學(xué)籍管理系統(tǒng)

QT中進(jìn)程的創(chuàng)建實(shí)現(xiàn)