0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

宏和函數(shù)應(yīng)該怎么選

麥辣雞腿堡 ? 來(lái)源:軒哥談芯 ? 作者:軒哥談芯 ? 2023-11-01 17:35 ? 次閱讀

今天我們來(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)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4237

    瀏覽量

    61969
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4671

    瀏覽量

    67767
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1602

    瀏覽量

    48896
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TC387中有__disable_interrupts()關(guān)閉所有中斷和打開(kāi)所有中斷的函數(shù)嗎?

    TC387 芯片中有__disable_irq()和__enable_irq()關(guān)閉所有中斷和打開(kāi)所有中斷的函數(shù)嗎,請(qǐng)告知
    發(fā)表于 08-01 08:22

    ??嵌入式中回調(diào)函數(shù)的實(shí)現(xiàn)方法

    回調(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í)電容應(yīng)該怎么? 在選擇車載無(wú)線充電器使用的超級(jí)電容時(shí),有幾個(gè)關(guān)鍵因素需要考慮。本文將詳細(xì)介紹超級(jí)電容的原理、性能指標(biāo)以及選購(gòu)建議,以幫助讀者更好地理解和選擇適合自己的車載無(wú)線
    的頭像 發(fā)表于 02-03 14:28 ?2731次閱讀

    如何用Rust過(guò)程魔法簡(jiǎn)化SQL函數(shù)呢?

    這是 RisingWave 中一個(gè) SQL 函數(shù)的實(shí)現(xiàn)。只需短短幾行代碼,通過(guò)在 Rust 函數(shù)上加一行過(guò)程,我們就把它包裝成了一個(gè) SQL 函數(shù)。
    的頭像 發(fā)表于 01-23 09:43 ?688次閱讀
    如何用Rust過(guò)程<b class='flag-5'>宏</b>魔法簡(jiǎn)化SQL<b class='flag-5'>函數(shù)</b>呢?

    磁環(huán)電感大小應(yīng)該怎么才正確

    電子發(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ù)是什么?

    大蝦們,請(qǐng)問(wèn)如果要用直流電機(jī)代替交流電機(jī),應(yīng)該怎么?根據(jù)是什么?謝謝
    發(fā)表于 12-28 06:43

    如何規(guī)范和常量以及命名

    const double ASPECT_RATIO = 1.653 ; ◎ 除非必要,應(yīng)盡可能使用函數(shù)代替 。 ◎ 將定義的多條表達(dá)式放在大括號(hào)中。 ◎ 使用時(shí),不允許參數(shù)發(fā)生
    的頭像 發(fā)表于 12-07 14:49 ?553次閱讀

    你知道濾波電容應(yīng)該怎么嗎?

    一直有個(gè)疑惑:電容感抗是1/jwC,大電容C大,高頻時(shí) w也大,阻抗應(yīng)該很小,不是更適合濾除高頻信號(hào)?
    的頭像 發(fā)表于 12-06 10:20 ?1403次閱讀
    你知道濾波電容<b class='flag-5'>應(yīng)該</b>怎么<b class='flag-5'>選</b>嗎?

    與晶振并聯(lián)的1M電阻是什么用?應(yīng)該怎么?

    與晶振并聯(lián)的1M電阻是什么用?應(yīng)該怎么?
    的頭像 發(fā)表于 12-04 15:47 ?866次閱讀
    與晶振并聯(lián)的1M電阻是什么用?<b class='flag-5'>應(yīng)該</b>怎么<b class='flag-5'>選</b>?

    c語(yǔ)言max函數(shù)在哪個(gè)庫(kù)

    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)該怎么定義? 用途是什么?

    什么是C++虛函數(shù)? 應(yīng)該怎么定義? 主要用途是什么?
    發(fā)表于 11-08 06:58

    的缺陷與內(nèi)聯(lián)函數(shù)的引入

    雖然有著一定的優(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)有哪些

    預(yù)處理的優(yōu)缺點(diǎn) 在軟件開(kāi)發(fā)過(guò)程中,經(jīng)常有一些常用或者通用的功能或者代碼段,這些功能既可以寫成函數(shù),也可以封裝成為定義。那么究竟是用函數(shù)好,還是
    的頭像 發(fā)表于 11-01 17:44 ?325次閱讀

    電路設(shè)計(jì)的上拉/下拉電阻阻值應(yīng)該怎樣?

    電路設(shè)計(jì)的上拉/下拉電阻阻值應(yīng)該怎樣?隨便弄一個(gè),如4.k、10k的成嗎?
    發(fā)表于 10-28 07:37

    C語(yǔ)言中函數(shù)的定義和用法

    函數(shù)是一種特殊的函數(shù),與普通函數(shù)不同的是,它可以擁有多條語(yǔ)句和局部變量,從而實(shí)現(xiàn)更復(fù)雜的功
    發(fā)表于 10-11 11:32 ?2780次閱讀
    C語(yǔ)言中<b class='flag-5'>宏</b><b class='flag-5'>函數(shù)</b>的定義和用法