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

精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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);
}

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

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

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

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

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

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

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

看下面的例子:

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

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

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

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

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

    關注

    3

    文章

    4307

    瀏覽量

    62433
  • 代碼
    +關注

    關注

    30

    文章

    4751

    瀏覽量

    68357
  • 預處理
    +關注

    關注

    0

    文章

    33

    瀏覽量

    10472
收藏 人收藏

    評論

    相關推薦

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

    問下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 ?660次閱讀

    運放恒流源哪些優缺點

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

    GaN HEMT哪些優缺點

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

    同步整流的優缺點哪些

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

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

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

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

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

    nbiot和lora的優缺點是什么?

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

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

    常用的交換芯片在網絡通信中扮演著至關重要的角色,它們負責高速、高效地處理數據轉發和交換任務。然而,每種交換芯片都有其獨特的優缺點,這取決于其設計、制造工藝以及應用場景。
    的頭像 發表于 03-22 16:36 ?882次閱讀

    什么是邊緣計算?邊緣計算技術哪些優缺點

    什么是邊緣計算?邊緣計算技術哪些優缺點? 邊緣計算是一種將計算和數據處理能力從傳統的云計算數據中心移動到離數據源更接近的位置的計算模型。在邊緣計算中,數據處理和分析都在離數據產生的地
    的頭像 發表于 02-06 14:38 ?1617次閱讀

    濾波電容不同補償方式優缺點對比

    濾波電容不同補償方式優缺點對比? 濾波電容是電子電路中常用的元件,用于對信號進行濾波處理。不同的補償方式可以幫助提高濾波電容的性能和穩定性。本文將詳細介紹幾種常見的濾波電容補償方式的優缺點。 首先
    的頭像 發表于 01-04 16:00 ?1113次閱讀

    C語言哪些預處理操作?

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

    刷電機和無刷電機的優缺點

    刷電機和無刷電機的優缺點? 刷電機和無刷電機是現代電機中常見的兩種類型,它們在結構、工作原理、性能方面存在一些差異。本文將詳細介紹刷電機和無刷電機的
    的頭像 發表于 12-08 10:10 ?1.4w次閱讀

    常見開關電源優缺點對比

    常見開關電源優缺點對比
    的頭像 發表于 12-07 15:30 ?682次閱讀
    常見開關電源<b class='flag-5'>優缺點</b>對比