【編程技巧】如何使用帶參數的宏 && 經常使用的帶參數宏

本文使用C/C++語言進行編程(點進來都是C/C++的盆友吧 =w=)

 

0x00 什麼是宏定義

若是還不知道宏定義的童鞋就查一下吧……點進來的應該都是學過的吧……編程

0x01 帶參數的宏是個什麼鬼?喵喵喵?

帶參數的宏不是鬼,也不是一隻貓。 其實顧名思義,就是宏裏有參數——沒學過參數的童鞋也學一下函數吧。

 

下面本文正式開始:

 

0x02 如何使用帶參數的宏

先舉個栗子:dom

1 #define random(a, b) rand() % b + a

這是一個生成隨機數的宏定義,好比說想生成 1-10000之間的隨機數,就能夠使用random(1, 10000)來生成。(注意:請使用srand來初始化隨機數種子)函數

若是頻繁使用隨機數的話,這個宏比較有用。其特色爲能夠在不影響代碼可讀性的前提上令代碼更簡潔,我不知道從事IT者會不會這麼用,但OIer通常會這麼用。spa

 

好了,扯了那麼久的淡,如今來談談具體的語法吧!具體語法:code

#define 宏名稱(參數表) 宏體

這個能夠根據上面的栗子多理解理解,還要去多實踐實踐,相信很快就會明白噠~blog

0x03 經常使用的帶參數宏(循環)

當咱們須要大量寫循環的時候, 能夠用宏來減小代碼量,又不失代碼可讀性。一般這兩個宏是比較經常使用的:io

FOR宏(通常用於i從0開始的狀況)

#define FOR(i, a, b) for (int i = a;i < b;i++)

REP宏(通常用於i從1開始的狀況)

#define REP(i, a, b) for (int i = a;i <= b;i++)

 

 

注:大寫的緣由是防止重名,爲了不重名,有時甚至全部宏都大寫, 譬如REP宏。class

 

The End

思考題1:爲何FOR宏通常是用於i從0開始的狀況的?

思考題2:爲何REP宏通常是用於i從1開始的狀況的?

*附加題:爲何這兩個宏的參數表裏面要有i這個參數?難道不能直接在宏體那裏寫int i嗎?

相關文章
相關標籤/搜索