(b) ? (a) : (b) ) //把它用函數(shù)來實(shí)現(xiàn): int max( int a, int b){ return (a > b ? a : b);} 如果我們在程序中將要使用比較大小的函數(shù),我們顯然會選用上面的宏定義,理由如下: 首先,函數(shù)調(diào)用會帶來額外的開銷,他需要開" />
0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

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

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

預(yù)處理宏的優(yōu)缺點(diǎn)有哪些

麥辣雞腿堡 ? 來源:軒哥談芯 ? 作者:軒哥談芯 ? 2023-11-01 17:44 ? 次閱讀

預(yù)處理宏的優(yōu)缺點(diǎn)

在軟件開發(fā)過程中,經(jīng)常有一些常用或者通用的功能或者代碼段,這些功能既可以寫成函數(shù),也可以封裝成為宏定義。那么究竟是用函數(shù)好,還是宏定義好?

我們還是看上一篇文章中引用的比較大小的例子:

#define MAX( a, b) ( (a) > (b) ? (a) : (b) )
//把它用函數(shù)來實(shí)現(xiàn):
int max( int a, int b)
{  
    return (a > b ? a : b);
}

如果我們在程序中將要使用比較大小的函數(shù),我們顯然會選用上面的宏定義,理由如下:

首先,函數(shù)調(diào)用會帶來額外的開銷,他需要開辟新的棧空間,記錄返回值,還需要將形參壓入棧中,函數(shù)返回時(shí)還需要釋放堆??臻g。

這樣的開銷不僅會讓程序執(zhí)行效率變低,代碼量也會大大增加,因此使用上面的宏函數(shù)做文本替代就顯得更明智。

其次,函數(shù)的形參被聲明成了一個(gè)特定的類型,如例子中是 int,這樣如果我們軟件中需要使用浮點(diǎn)型的比較大小,我們就不得不重寫一個(gè)函數(shù),從這一點(diǎn)也可以看到宏函數(shù)的優(yōu)勢。

因?yàn)槭俏谋镜奶鎿Q,因此他與類型也沒有關(guān)系,不過類型不對應(yīng),會在編譯階段的時(shí)候報(bào)錯(cuò),這點(diǎn)還是具備利用價(jià)值的。

另外,還有一些任務(wù)根本無法用函數(shù)實(shí)現(xiàn)****,但是用宏定義卻很好實(shí)現(xiàn)。

比如參數(shù)類型沒法作為參數(shù)傳遞給函數(shù),但是可以把參數(shù)類型傳遞給帶參的宏。

看下面的例子:

#define MALLOC(n, type )((type ) malloc((n)sizeof( type )))

利用這個(gè)宏,我們就可以為任何類型分配一段我們指定的空間大小,并返回指向這段空間的指針。我們可以觀察一下這個(gè)宏確切的工作過程:

int *ptr;
ptr = MALLOC ( 5, int );
//將這宏展開以后的結(jié)果:
ptr = (int *) malloc ((5) * sizeof(int));

這個(gè)例子是宏定義的經(jīng)典應(yīng)用之一,完成了函數(shù)不能完成的功能,但是宏定義也不能濫用,通常,如果相同的代碼需要出現(xiàn)在程序的幾個(gè)地方,更好的方法是把它實(shí)現(xiàn)為一個(gè)函數(shù)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4235

    瀏覽量

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

    關(guān)注

    30

    文章

    4670

    瀏覽量

    67764
  • 預(yù)處理
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    10454
收藏 人收藏

    評論

    相關(guān)推薦

    運(yùn)放恒流源哪些優(yōu)缺點(diǎn)

    運(yùn)放恒流源,即利用運(yùn)算放大器(Operational Amplifier,簡稱運(yùn)放)構(gòu)成的恒流源電路,具有一系列獨(dú)特的優(yōu)點(diǎn)和缺點(diǎn)。以下是對其優(yōu)缺點(diǎn)的詳細(xì)分析。
    的頭像 發(fā)表于 08-28 10:18 ?275次閱讀

    GaN HEMT哪些優(yōu)缺點(diǎn)

    GaN HEMT(氮化鎵高電子遷移率晶體管)作為一種先進(jìn)的功率半導(dǎo)體器件,在電力電子、高頻通信、汽車電子等多個(gè)領(lǐng)域展現(xiàn)出了顯著的優(yōu)勢,但同時(shí)也存在一些缺點(diǎn)。以下是對GaN HEMT優(yōu)缺點(diǎn)的詳細(xì)分析:
    的頭像 發(fā)表于 08-15 11:09 ?354次閱讀

    同步整流的優(yōu)缺點(diǎn)哪些

    同步整流是一種在數(shù)字電路設(shè)計(jì)中常用的技術(shù),它通過將電路中的所有信號同步到一個(gè)共同的時(shí)鐘信號上,來實(shí)現(xiàn)信號之間的同步。這種技術(shù)在數(shù)字電路設(shè)計(jì)中具有重要的作用,但同時(shí)也存在一些優(yōu)缺點(diǎn)。以下是對同步整流
    的頭像 發(fā)表于 07-09 09:09 ?374次閱讀

    數(shù)學(xué)建模神經(jīng)網(wǎng)絡(luò)模型的優(yōu)缺點(diǎn)哪些

    、預(yù)測分析等。然而,神經(jīng)網(wǎng)絡(luò)模型也存在一些優(yōu)缺點(diǎn)。本文將詳細(xì)分析神經(jīng)網(wǎng)絡(luò)模型的優(yōu)缺點(diǎn)。 一、優(yōu)點(diǎn) 強(qiáng)大的非線性擬合能力 神經(jīng)網(wǎng)絡(luò)模型具有強(qiáng)大的非線性擬合能力,可以很好地處理復(fù)雜的非線性問題。傳統(tǒng)的線性模型在處
    的頭像 發(fā)表于 07-02 11:36 ?580次閱讀

    直線電機(jī)哪些優(yōu)缺點(diǎn)

    隨著現(xiàn)代工業(yè)的快速發(fā)展,對于直線運(yùn)動控制的需求日益增加。直線電機(jī)作為一種新型的驅(qū)動裝置,因其獨(dú)特的結(jié)構(gòu)和性能優(yōu)勢,正在逐步取代傳統(tǒng)的旋轉(zhuǎn)電機(jī)和滾珠絲杠,成為直線運(yùn)動控制的主流選擇。本文將對直線電機(jī)的優(yōu)缺點(diǎn)進(jìn)行詳細(xì)分析,并探討其在實(shí)際應(yīng)用中的注意事項(xiàng)。
    的頭像 發(fā)表于 06-11 18:00 ?1487次閱讀

    nbiot和lora的優(yōu)缺點(diǎn)是什么?

    nbiot和lora的優(yōu)缺點(diǎn)
    發(fā)表于 06-04 06:37

    常用的交換芯片的優(yōu)缺點(diǎn)哪些

    常用的交換芯片在網(wǎng)絡(luò)通信中扮演著至關(guān)重要的角色,它們負(fù)責(zé)高速、高效地處理數(shù)據(jù)轉(zhuǎn)發(fā)和交換任務(wù)。然而,每種交換芯片都有其獨(dú)特的優(yōu)缺點(diǎn),這取決于其設(shè)計(jì)、制造工藝以及應(yīng)用場景。
    的頭像 發(fā)表于 03-22 16:36 ?626次閱讀

    什么是邊緣計(jì)算?邊緣計(jì)算技術(shù)哪些優(yōu)缺點(diǎn)

    什么是邊緣計(jì)算?邊緣計(jì)算技術(shù)哪些優(yōu)缺點(diǎn)? 邊緣計(jì)算是一種將計(jì)算和數(shù)據(jù)處理能力從傳統(tǒng)的云計(jì)算數(shù)據(jù)中心移動到離數(shù)據(jù)源更接近的位置的計(jì)算模型。在邊緣計(jì)算中,數(shù)據(jù)處理和分析都在離數(shù)據(jù)產(chǎn)生的地
    的頭像 發(fā)表于 02-06 14:38 ?1287次閱讀

    濾波電容不同補(bǔ)償方式優(yōu)缺點(diǎn)對比

    濾波電容不同補(bǔ)償方式優(yōu)缺點(diǎn)對比? 濾波電容是電子電路中常用的元件,用于對信號進(jìn)行濾波處理。不同的補(bǔ)償方式可以幫助提高濾波電容的性能和穩(wěn)定性。本文將詳細(xì)介紹幾種常見的濾波電容補(bǔ)償方式的優(yōu)缺點(diǎn)。 首先
    的頭像 發(fā)表于 01-04 16:00 ?798次閱讀

    C語言哪些預(yù)處理操作?

    C語言的預(yù)處理是在編譯之前對源代碼進(jìn)行處理的階段,它主要由預(yù)處理器完成。預(yù)處理器是一個(gè)獨(dú)立的程序,它負(fù)責(zé)對源代碼進(jìn)行一些文本替換和處理,生成
    的頭像 發(fā)表于 12-08 15:40 ?472次閱讀
    C語言<b class='flag-5'>有</b>哪些<b class='flag-5'>預(yù)處理</b>操作?

    刷電機(jī)和無刷電機(jī)的優(yōu)缺點(diǎn)

    刷電機(jī)和無刷電機(jī)的優(yōu)缺點(diǎn)? 刷電機(jī)和無刷電機(jī)是現(xiàn)代電機(jī)中常見的兩種類型,它們在結(jié)構(gòu)、工作原理、性能方面存在一些差異。本文將詳細(xì)介紹刷電機(jī)和無刷電機(jī)的
    的頭像 發(fā)表于 12-08 10:10 ?1.2w次閱讀

    常見開關(guān)電源優(yōu)缺點(diǎn)對比

    常見開關(guān)電源優(yōu)缺點(diǎn)對比
    的頭像 發(fā)表于 12-07 15:30 ?541次閱讀
    常見開關(guān)電源<b class='flag-5'>優(yōu)缺點(diǎn)</b>對比

    PCB表面處理工藝OSP的優(yōu)缺點(diǎn)

    一站式PCBA智造廠家今天為大家講講PCB制板表面處理工藝OSP什么作用?PCB制板表面處理工藝OSP的優(yōu)缺點(diǎn)。OSP即有機(jī)保焊膜,又稱護(hù)銅劑,其主要是對暴露在空氣中的銅起到一定的保
    的頭像 發(fā)表于 11-15 09:16 ?1415次閱讀

    大神就教:芯片焊線斜著打和豎著打什么優(yōu)缺點(diǎn)?

    大神就教:芯片焊線斜著打和豎著打什么優(yōu)缺點(diǎn)
    發(fā)表于 10-27 16:59

    對cortex m系列開發(fā)來說,gnu系工具鏈和keil相比哪些優(yōu)缺點(diǎn)?

    對cortex m系列開發(fā)來說,gnu系工具鏈和keil 相比哪些優(yōu)缺點(diǎn)
    發(fā)表于 10-20 06:28