今天我們來(lái)看一下利用宏定義編寫類似函數(shù)調(diào)用的方法和真實(shí)的函數(shù)有什么區(qū)別。
一、宏和函數(shù)怎么選?
首先來(lái)看一個(gè)例子:
#define N 2+2
void main()
{
int a = N * N;
printf( "a = %d", a);
}
這里,我們得理解宏的工作方式,它是在編譯器編譯代碼之前做的一個(gè)純文本的替換工作,因此,有時(shí)候簡(jiǎn)單宏替換的結(jié)果就會(huì)和我們預(yù)想的結(jié)果出現(xiàn)偏差。
比如上面的例子,我們預(yù)期 N 為 4,a=16,但實(shí)際結(jié)果卻為 a=8;原因在于宏的作用方式是傻瓜式的文本替換。
在編譯之前,編譯器首先將宏定義的文本替換到程序體中,這個(gè)替換是完全無(wú)腦的一個(gè)操作,看一下替換結(jié)果就知道了。
#define N 2+2
void main()
{
int a = 2 + 2 * 2 + 2;
printf( "a = %d", a);
}
這也就是我們上一篇文章中講到的,寫宏函數(shù)的時(shí)候一定要注意括號(hào)的應(yīng)用,多加括號(hào)一定是利大于弊的。
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
相關(guān)推薦
TC387 芯片中有__disable_irq()和__enable_irq()關(guān)閉所有中斷和打開(kāi)所有中斷的函數(shù)或宏嗎,請(qǐng)告知
發(fā)表于 08-01 08:22
回調(diào)函數(shù)的命名規(guī)范沒(méi)有固定的標(biāo)準(zhǔn),但是根據(jù)通用慣例和編碼規(guī)范,回調(diào)函數(shù)的命名應(yīng)該能夠反映函數(shù)的作用和功能,讓其他開(kāi)發(fā)者能夠快速理解并使用。
發(fā)表于 03-04 14:49
?524次閱讀
車載無(wú)線充用的超級(jí)電容應(yīng)該怎么選? 在選擇車載無(wú)線充電器使用的超級(jí)電容時(shí),有幾個(gè)關(guān)鍵因素需要考慮。本文將詳細(xì)介紹超級(jí)電容的原理、性能指標(biāo)以及選購(gòu)建議,以幫助讀者更好地理解和選擇適合自己的車載無(wú)線
發(fā)表于 02-03 14:28
?2731次閱讀
這是 RisingWave 中一個(gè) SQL 函數(shù)的實(shí)現(xiàn)。只需短短幾行代碼,通過(guò)在 Rust 函數(shù)上加一行過(guò)程宏,我們就把它包裝成了一個(gè) SQL 函數(shù)。
發(fā)表于 01-23 09:43
?688次閱讀
電子發(fā)燒友網(wǎng)站提供《磁環(huán)電感大小應(yīng)該怎么選才正確.docx》資料免費(fèi)下載
發(fā)表于 01-22 09:29
?0次下載
大蝦們,請(qǐng)問(wèn)如果要用直流電機(jī)代替交流電機(jī),應(yīng)該怎么選?根據(jù)是什么?謝謝
發(fā)表于 12-28 06:43
const double ASPECT_RATIO = 1.653 ; ◎ 除非必要,應(yīng)盡可能使用函數(shù)代替宏 。 ◎ 將宏定義的多條表達(dá)式放在大括號(hào)中。 ◎ 使用宏時(shí),不允許參數(shù)發(fā)生
發(fā)表于 12-07 14:49
?553次閱讀
一直有個(gè)疑惑:電容感抗是1/jwC,大電容C大,高頻時(shí) w也大,阻抗應(yīng)該很小,不是更適合濾除高頻信號(hào)?
發(fā)表于 12-06 10:20
?1403次閱讀
與晶振并聯(lián)的1M電阻是什么用?應(yīng)該怎么選?
發(fā)表于 12-04 15:47
?866次閱讀
C語(yǔ)言的max函數(shù)并不屬于標(biāo)準(zhǔn)C庫(kù),它通常是由程序員自己編寫的一個(gè)宏定義。max函數(shù)用于比較兩個(gè)數(shù)的大小,返回較大的數(shù)值。 為了提供更多詳實(shí)的信息,下面將詳細(xì)介紹C語(yǔ)言中max函數(shù)的實(shí)
發(fā)表于 11-22 10:18
?2420次閱讀
什么是C++虛函數(shù)? 應(yīng)該怎么定義? 主要用途是什么?
發(fā)表于 11-08 06:58
宏雖然有著一定的優(yōu)勢(shì),但是它的缺點(diǎn)也不可忽視。 在編譯階段,我們很難發(fā)現(xiàn)代碼哪里出問(wèn)題了,因?yàn)?b class='flag-5'>宏替換是發(fā)生在預(yù)處理階段,所以有時(shí)候在宏函數(shù)傳參的時(shí)候發(fā)生一些錯(cuò)誤,編譯器不會(huì)發(fā)現(xiàn),那它調(diào)
發(fā)表于 11-01 17:57
?366次閱讀
預(yù)處理宏的優(yōu)缺點(diǎn) 在軟件開(kāi)發(fā)過(guò)程中,經(jīng)常有一些常用或者通用的功能或者代碼段,這些功能既可以寫成函數(shù),也可以封裝成為宏定義。那么究竟是用函數(shù)好,還是宏
發(fā)表于 11-01 17:44
?325次閱讀
電路設(shè)計(jì)的上拉/下拉電阻阻值應(yīng)該怎樣選?隨便弄一個(gè),如4.k、10k的成嗎?
發(fā)表于 10-28 07:37
宏函數(shù)是一種特殊的函數(shù)宏,與普通函數(shù)宏不同的是,它可以擁有多條語(yǔ)句和局部變量,從而實(shí)現(xiàn)更復(fù)雜的功
發(fā)表于 10-11 11:32
?2780次閱讀
評(píng)論