久久婷婷香蕉热狠狠综合,精品无码国产自产拍在线观看蜜,寡妇房东在做爰3,中文字幕日本人妻久久久免费,国产成人精品三上悠亚久久

當前位置:首頁 > 學習資源 > 講師博文 > c語言函數宏的幾種封裝方式

c語言函數宏的幾種封裝方式 時間:2023-11-01      來源:華清遠見

c語言函數宏的幾種封裝方式

在c語言開發中,出了使用函數封裝代碼之外,也經常使用宏來封裝一些重要或簡潔的代碼。

 宏在c開發有三種:預定義宏,不帶參宏,和帶參數宏,通常,帶參數宏也叫函數宏,函數宏,即包含多條語句的宏定義,其通常為某一被頻繁調用的功能的語句封裝,且不想通過函數方式封裝來降低額外的彈棧壓棧開銷,在實際項目開發中,函數宏的作用很強大,下面介紹三種常用的三種封裝方式:

第一種:{} 方式

比如:

此時如果在非控制語句中調用,則可以正常編譯通過,如下:

但當在控制語句中調用時,比如分支語句if(else if、else 等)如:

編譯器會報錯,如下:

上面的語句展開為:

 SWAP(x, y); 后面的 ; 使得 if 的作用域終結了,后續的 else 當然沒有找到與之匹配的 if 了。宏函數應該適用于任何語法。

這種函數宏的優缺點:

優點:簡單粗暴。

缺點:不能在無花括號且有分支的 if 語句中直接調用;能夠不帶 ; 直接調用。

第二種   do{...}while(0) 方式

 do{...}while(0) 為控制流語句,是一條復合語句,在語句塊中可以添加參數檢測。例如:

 編譯器會把 do{...}while(0); 認為為一條語句。因此,do{...}while(0) 方式的函數宏可以在無花括號且有分支的 if 語句中直接調用。例如:

這種函數宏的優缺點:

 優點:支持在無花括號且有分支的 if 語句中直接調用;支持提前退出函數宏;強制調用時必須使用 ;。

缺點:無返回值,不能作為表達式的右值使用。

第三種 ({}) 方式

({}) 為 GNU C 擴展的語法,非 C 語言的原生語法,封裝后形態如下:

({}) 既可以用于分支語句中,也可以作為右值,例如:

這種函數宏的優缺點:

優點:支持在無花括號且有分支的 if 語句中直接調用;有返回值,支持作為表達式的右值。

缺點:不支持提前退出函數宏;非 C 的原生語法,編譯器可能不支持。

總結

 綜上,在 {}、do{...}while(0) 和 ({}) 這三種函數宏的封裝方式之中,應盡可能不使用 {},考慮兼容性一般選擇使用 do{...}while(0),當需要函數宏返回時可以考慮使用 ({}) 或直接定義函數。

 

上一篇:嵌入式工程師,如何用好C語言?

下一篇:分享一份嵌入式軟件開發工具清單

戳我查看嵌入式每月就業風云榜

點我了解華清遠見高校學霸學習秘籍

猜你關心企業是如何評價華清學員的

干貨分享
相關新聞
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2024 北京華清遠見科技發展有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部