(b) ? (a) : (b) ) //把它用函數來實現: int max( int a, int b){ return (a > b ? a : b);} 如果我們在程序中將要使用比較大小的函數,我們顯然會選用上面的宏定義,理由如下: 首先,函數調用會帶來額外的開銷,他需要開" />

衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

預處理宏的優缺點有哪些

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

預處理宏的優缺點

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

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

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

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

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

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

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

因為是文本的替換,因此他與類型也沒有關系,不過類型不對應,會在編譯階段的時候報錯,這點還是具備利用價值的。

另外,還有一些任務根本無法用函數實現****,但是用宏定義卻很好實現。

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

看下面的例子:

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

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

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

這個例子是宏定義的經典應用之一,完成了函數不能完成的功能,但是宏定義也不能濫用,通常,如果相同的代碼需要出現在程序的幾個地方,更好的方法是把它實現為一個函數。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62975
  • 代碼
    +關注

    關注

    30

    文章

    4827

    瀏覽量

    69055
  • 預處理
    +關注

    關注

    0

    文章

    33

    瀏覽量

    10514
收藏 人收藏

    評論

    相關推薦

    東京站群服務器哪些優缺點

    東京站群服務器,作為部署在東京地區的服務器集群,專為站群優化而建,其優缺點如下,主機推薦小編為您整理發布東京站群服務器哪些優缺點。
    的頭像 發表于 02-05 17:39 ?49次閱讀

    開環和閉環功放的區別,優缺點,應用場合什么不同?

    問下TI的工程師,開環和閉環功放的區別,優缺點,應用場合什么不同?請解釋下,謝謝!
    發表于 11-04 06:33

    請問Pre-Filter PBTL和Post-Filter PBTL相比什么優缺點?

    Pre-Filter PBTL和Post-Filter PBTL 相比什么優缺點
    發表于 10-18 06:54

    帶你了解無刷電機與刷電機的優缺點

    無刷電機和刷電機各有其獨特的優缺點,選擇哪種電機類型取決于具體的應用場景和需求。
    的頭像 發表于 09-21 11:24 ?1112次閱讀

    運放恒流源哪些優缺點

    運放恒流源,即利用運算放大器(Operational Amplifier,簡稱運放)構成的恒流源電路,具有一系列獨特的優點和缺點。以下是對其優缺點的詳細分析。
    的頭像 發表于 08-28 10:18 ?1412次閱讀

    放大器增益調節哪些優缺點

    放大器增益調節的優缺點是多方面的,這些方面涉及到放大器的性能、應用、設計以及實際使用中的挑戰。
    的頭像 發表于 08-16 17:14 ?1081次閱讀

    GaN HEMT哪些優缺點

    GaN HEMT(氮化鎵高電子遷移率晶體管)作為一種先進的功率半導體器件,在電力電子、高頻通信、汽車電子等多個領域展現出了顯著的優勢,但同時也存在一些缺點。以下是對GaN HEMT優缺點的詳細分析:
    的頭像 發表于 08-15 11:09 ?1754次閱讀

    同步整流的優缺點哪些

    同步整流是一種在數字電路設計中常用的技術,它通過將電路中的所有信號同步到一個共同的時鐘信號上,來實現信號之間的同步。這種技術在數字電路設計中具有重要的作用,但同時也存在一些優缺點。以下是對同步整流
    的頭像 發表于 07-09 09:09 ?1254次閱讀

    機器視覺控制的優缺點哪些

    機器視覺控制是一種利用計算機視覺技術對機器進行控制的方法,它在工業自動化、機器人技術、智能交通等領域得到了廣泛應用。然而,機器視覺控制也存在一些優缺點。本文將詳細介紹機器視覺控制的優缺點。 一、機器
    的頭像 發表于 07-04 10:43 ?849次閱讀

    神經網絡算法的優缺點哪些

    神經網絡算法是一種模擬人腦神經元結構的計算模型,廣泛應用于機器學習、深度學習、圖像識別、語音識別等領域。然而,神經網絡算法也存在一些優缺點。本文將詳細分析神經網絡算法的優缺點。 一、神經網絡算法
    的頭像 發表于 07-03 09:47 ?1651次閱讀

    數學建模神經網絡模型的優缺點哪些

    、預測分析等。然而,神經網絡模型也存在一些優缺點。本文將詳細分析神經網絡模型的優缺點。 一、優點 強大的非線性擬合能力 神經網絡模型具有強大的非線性擬合能力,可以很好地處理復雜的非線性問題。傳統的線性模型在處
    的頭像 發表于 07-02 11:36 ?1017次閱讀

    直線電機哪些優缺點

    隨著現代工業的快速發展,對于直線運動控制的需求日益增加。直線電機作為一種新型的驅動裝置,因其獨特的結構和性能優勢,正在逐步取代傳統的旋轉電機和滾珠絲杠,成為直線運動控制的主流選擇。本文將對直線電機的優缺點進行詳細分析,并探討其在實際應用中的注意事項。
    的頭像 發表于 06-11 18:00 ?2773次閱讀

    機器視覺哪些優缺點

    分析圖像獲得所需信息或用于控制機器運動的裝置。本文將對機器視覺的定義、優缺點進行詳細闡述,并探討其應用領域和前景。
    的頭像 發表于 06-06 17:27 ?1068次閱讀

    nbiot和lora的優缺點是什么?

    nbiot和lora的優缺點
    發表于 06-04 06:37

    常用的交換芯片的優缺點哪些

    常用的交換芯片在網絡通信中扮演著至關重要的角色,它們負責高速、高效地處理數據轉發和交換任務。然而,每種交換芯片都有其獨特的優缺點,這取決于其設計、制造工藝以及應用場景。
    的頭像 發表于 03-22 16:36 ?1078次閱讀
    百家乐官网21点| 金宝博188| 亚洲百家乐新全讯网| 百家乐官网赢的秘诀| 百家乐桌布无纺布| 乐宝百家乐游戏| 百家乐官网游戏百家乐官网| 全讯网是什么| 凯旋门百家乐游戏| 百家乐官网的视频百家乐官网| 威尼斯人娱乐城代理| 百家乐大老娱乐| 金都百家乐官网现金网| 德州扑克 大小| ea百家乐打水| 百家乐官网凯时娱乐网| 海立方百利宫娱乐城| 威尼斯人娱乐会所| A8百家乐娱乐城| 百家乐官网系列抢庄龙| 天天乐线上娱乐| 百家乐开闲的几率多大| 百家乐视频打麻将| 百家乐官网小路规则| 百家乐官网真钱电玩| 大发888 漏洞| 中国百家乐的玩法技巧和规则| 百家乐有没有攻略| 百家乐官网秘| 迷你百家乐官网论坛| 大发888真人| 新东方百家乐的玩法技巧和规则| 单耳房做生意的风水| 百家乐官网投注方式| 视频棋牌游戏大厅| 百家乐77scs官网| 真人百家乐破解软件下载| 鑫鼎百家乐官网的玩法技巧和规则| 开心8百家乐官网娱乐城| 最好的网上真人赌博| qq德州扑克官网|