今天我們來(lái)看一下利用宏定義編寫(xiě)類似函數(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);
}
這也就是我們上一篇文章中講到的,寫(xiě)宏函數(shù)的時(shí)候一定要注意括號(hào)的應(yīng)用,多加括號(hào)一定是利大于弊的。
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(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)推薦
請(qǐng)問(wèn)DAC1282和ADS1282的SCLK、DIN、DOUT可以接到一起,然后分別連接MCU的SCK、SOMI、SIMO嗎?
如果可以的話,ADS1282沒(méi)有CS片選,應(yīng)該怎樣單獨(dú)給DAC傳輸數(shù)據(jù)呢?
謝謝
發(fā)表于 11-25 07:35
SUMIF函數(shù)和SUMIFS函數(shù)都是Excel中用于條件求和的函數(shù),它們可以幫助用戶根據(jù)特定的條件對(duì)數(shù)據(jù)進(jìn)行求和。盡管它們的基本功能相似,但在使用場(chǎng)景和功能上存在一些差異。以下是對(duì)這兩個(gè)函數(shù)
發(fā)表于 10-30 09:51
?1162次閱讀
勝宏科技近期發(fā)布重要公告,宣布其計(jì)劃通過(guò)全資子公司新加坡勝宏及PSL,以不超過(guò)2.787億元人民幣的現(xiàn)金,全面收購(gòu)APCB Electronics(Thailand)Co.,Ltd.(簡(jiǎn)稱APCB)的100%股權(quán)。此次收購(gòu)標(biāo)志著勝宏
發(fā)表于 08-12 15:06
?559次閱讀
TC387 芯片中有__disable_irq()和__enable_irq()關(guān)閉所有中斷和打開(kāi)所有中斷的函數(shù)或宏嗎,請(qǐng)告知
發(fā)表于 08-01 08:22
你好:
我需要使用 xTaskGetHandle 這個(gè)API,但是 idf.py menuconfig進(jìn)去freertos組件里沒(méi)有這個(gè)配置選項(xiàng)
我應(yīng)該怎么添加一個(gè)宏定義到我的cmakelist里??而不是直接改sdk的文件。
發(fā)表于 06-21 12:39
各位大神:
esp32c3,idfd ubuntu編譯,html轉(zhuǎn)為C放在代碼里,想獲取網(wǎng)頁(yè)的提交按鍵進(jìn)行響應(yīng),請(qǐng)問(wèn)提交“submit”時(shí),C里應(yīng)該對(duì)應(yīng)的是哪個(gè)函數(shù)。本人webserver小白,感謝指教!
發(fā)表于 06-18 07:18
低功耗定時(shí)器選擇外部的32K做時(shí)鐘源,在cubeMX中這個(gè)mode模式應(yīng)該選哪個(gè)呢,謝謝
發(fā)表于 04-02 06:03
回調(diào)函數(shù)是一種特殊的函數(shù),它作為參數(shù)傳遞給另一個(gè)函數(shù),并在被調(diào)用函數(shù)執(zhí)行完畢后被調(diào)用。回調(diào)函數(shù)通常用于事件處理、異步編程和處理各種操作系統(tǒng)和
發(fā)表于 03-12 11:46
?2977次閱讀
浙江宏鑫科技股份有限公司(以下簡(jiǎn)稱“宏鑫科技”)成功獲得證監(jiān)會(huì)的批文,即將掛牌上市,這標(biāo)志著宏鑫科技將成為資本市場(chǎng)鍛造鋁合金車輪第一股,迎來(lái)產(chǎn)業(yè)經(jīng)營(yíng)和資本運(yùn)營(yíng)雙輪驅(qū)動(dòng)的全新發(fā)展階段。
發(fā)表于 03-11 15:30
?791次閱讀
通常我們說(shuō)的指針變量是指向一個(gè)整型、字符型或數(shù)組等變量,而函數(shù)指針是指向函數(shù)。
函數(shù)指針可以像一般函數(shù)一樣,用于調(diào)用函數(shù)、傳遞參數(shù)。
發(fā)表于 03-07 11:13
?408次閱讀
回調(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
?729次閱讀
在Linux使用gcc編譯程序的時(shí)候,對(duì)于調(diào)試的語(yǔ)句還具有一些特殊的語(yǔ)法。gcc編譯的過(guò)程中,會(huì)生成一些宏,可以使用這些宏分別打印當(dāng)前源文件的信息,主要內(nèi)容是當(dāng)前的文件、當(dāng)前運(yùn)行的函數(shù)和當(dāng)前的程序行。
發(fā)表于 03-01 11:41
?1030次閱讀
車載無(wú)線充用的超級(jí)電容應(yīng)該怎么選? 在選擇車載無(wú)線充電器使用的超級(jí)電容時(shí),有幾個(gè)關(guān)鍵因素需要考慮。本文將詳細(xì)介紹超級(jí)電容的原理、性能指標(biāo)以及選購(gòu)建議,以幫助讀者更好地理解和選擇適合自己的車載無(wú)線
發(fā)表于 02-03 14:28
?2963次閱讀
這是 RisingWave 中一個(gè) SQL 函數(shù)的實(shí)現(xiàn)。只需短短幾行代碼,通過(guò)在 Rust 函數(shù)上加一行過(guò)程宏,我們就把它包裝成了一個(gè) SQL 函數(shù)。
發(fā)表于 01-23 09:43
?975次閱讀
電子發(fā)燒友網(wǎng)站提供《磁環(huán)電感大小應(yīng)該怎么選才正確.docx》資料免費(fèi)下載
發(fā)表于 01-22 09:29
?0次下載
評(píng)論