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

国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

    文章

    4417

    瀏覽量

    67524
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73992
  • 預處理
    +關注

    關注

    0

    文章

    33

    瀏覽量

    10814
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    arm嵌入式主板優缺點

    嵌入式主板是嵌入在設備里面做控制、數據處理使用的CPU板 ,常見的兩類,即基于X86的嵌入式主板和基于RISC的ARM 嵌入式主板。今天我們就來認識arm嵌入式主板,arm嵌入式主板就是一個嵌入在
    發表于 01-08 07:08

    C語言中實現函數的三種方式

    十分接近。 優缺點總結: 優點:支持在無花括號且有分支的 if 語句中直接調用;返回值,支持作為表達式的右值。 缺點:不支持提前退出函數;非 C 的原生語法,編譯器可能不支持。
    發表于 12-29 07:34

    電能質量在線監測裝置測溫功能的無線通信方式的優缺點哪些?

    電能質量在線監測裝置測溫功能的無線通信方式,可按 短距無線、長距低功耗廣域 (LPWAN)、廣域蜂窩通信 三大類分別分析優缺點,不同方式適配不同場景,其優勢與局限高度關聯自身技術特性,具體如下: 一
    的頭像 發表于 12-10 11:51 ?736次閱讀
    電能質量在線監測裝置測溫功能的無線通信方式的<b class='flag-5'>優缺點</b><b class='flag-5'>有</b>哪些?

    C語言拼接運算符典型使用

    在C語言中,##運算符(稱為[size=16.002px]標記拼接運算符)用于定義中將兩個標記(token)拼接成一個新的標記。它在預處理階段處理,常用于動態生成變量名、函數名或類型名,以提高代碼
    發表于 11-20 08:27

    不同類型的電能質量在線監測裝置數據存儲方式哪些優缺點

    不同類型的電能質量在線監測裝置數據存儲方式,核心差異體現在 數據控制權、實時性、運維成本、擴展性 上,主要分為 本地存儲、云端存儲、混合存儲 三類。每類方式的優缺點需結合電能質量數據特征(時序性
    的頭像 發表于 10-30 10:00 ?296次閱讀

    數據預處理軟核加速模塊設計

    數據拼接操作,其預處理模塊結構框圖如下圖 模塊最后得到的信號為ddr_q、ddr_clk和ddr_wrreq。ddr_q是并行128bits圖像數據,ddr_clk是RAM的出口時鐘,同時引出作為下一模塊的數據時鐘,ddr_wrreq置高時代表有效數據。
    發表于 10-29 08:09

    無線局域網的優缺點和使用要點

    近年來,無線局域網 已普遍應用于我們生活的方方面面。本文將介紹無線局域網的基礎知識、優缺點、與 Wi-Fi 及有線局域網的區別,以及有效使用的要點。全球領先的短距離無線模塊供應商 KAGA FEI
    的頭像 發表于 08-14 16:04 ?2987次閱讀
    無線局域網的<b class='flag-5'>優缺點</b>和使用要點

    鋰電池制造 | 電芯預處理工藝的步驟詳解

    電芯預處理是鋰電池包制造的首要工序,無論是新能源汽車的續航穩定性,還是儲能系統的循環壽命,其根基都可追溯至預處理工序對電芯一致性的把控,其核心在于通過系統檢測與篩選消除量產電芯的性能差異,為后續組裝
    的頭像 發表于 08-11 14:53 ?1550次閱讀
    鋰電池制造 | 電芯<b class='flag-5'>預處理</b>工藝的步驟詳解

    超級電容對比鋰電池的優缺點

    本文探討了超級電容和鋰電池在儲能領域的優缺點。超級電容以高能量密度著稱,但充電速度較慢;鋰電池則具有快充和壽命長的優勢,但成本較高。在新能源汽車和電網調頻等高頻次應用中,兩者可以互補。
    的頭像 發表于 06-30 09:37 ?2650次閱讀
    超級電容對比鋰電池的<b class='flag-5'>優缺點</b>

    商業云手機核心優缺點分析

    商業云手機核心優缺點分析,綜合技術性能、成本效率及場景適配性等多維度對比: 核心優勢? 成本革命? 硬件零投入?:免除實體手機采購(旗艦機均價6000元),企業百臺規模可省60萬+ CAPEX
    的頭像 發表于 06-16 08:11 ?1050次閱讀
    商業云手機核心<b class='flag-5'>優缺點</b>分析

    PCBA 表面處理優缺點大揭秘,應用場景全解析

    一站式PCBA加工廠家今天為大家講講PCBA加工如何選擇合適的表面處理工藝?PCBA表面處理優缺點與應用場景。在電子制造中,PCBA板的表面處理工藝對電路板的性能、可靠性和成本都有重要
    的頭像 發表于 05-05 09:39 ?1404次閱讀
    PCBA 表面<b class='flag-5'>處理</b>:<b class='flag-5'>優缺點</b>大揭秘,應用場景全解析

    3D打印耗材種類哪些?各有什么優缺點

    這篇文章將為你詳細介紹3D打印耗材的基礎知識,幫助你了解這些材料的特性、優缺點以及它們適合的應用場景。
    的頭像 發表于 04-29 09:40 ?5.4w次閱讀
    3D打印耗材種類<b class='flag-5'>有</b>哪些?各有什么<b class='flag-5'>優缺點</b>?

    FPGA Verilog HDL語法之編譯預處理

    Verilog HDL語言和C語言一樣也提供了編譯預處理的功能。“編譯預處理”是Verilog HDL編譯系統的一個組成部分。Verilog HDL語言允許在程序中使用幾種特殊的命令(它們不是一般
    的頭像 發表于 03-27 13:30 ?1441次閱讀
    FPGA Verilog HDL語法之編譯<b class='flag-5'>預處理</b>

    CMOS,Bipolar,FET這三種工藝的優缺點是什么?

    在我用photodiode工具選型I/V放大電路的時候,系統給我推薦了AD8655用于I/V,此芯片為CMOS工藝 但是查閱資料很多都是用FET工藝的芯片,所以請教下用于光電信號放大轉換(主要考慮信噪比和帶寬)一般我們用哪種工藝的芯片, CMOS,Bipolar,FET這三種工藝的優缺點是什么?
    發表于 03-25 06:23

    壓接連接器使用裸銅線的優缺點分析?

    壓接連接器使用裸銅線是一種高效、可靠的電氣連接方式,廣泛應用于電力、通信和工業領域。需要我們正確看待它的優缺點,高效使用。
    的頭像 發表于 03-18 11:01 ?1173次閱讀