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

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

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

3天內不再提示

宏的缺陷與內聯函數的引入

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

宏雖然有著一定的優勢,但是它的缺點也不可忽視。

在編譯階段,我們很難發現代碼哪里出問題了,因為宏替換是發生在預處理階段,所以有時候在宏函數傳參的時候發生一些錯誤,編譯器不會發現,那它調試起來就很麻煩。

所以為了解決這種不利于調試的問題,就有了內聯函數。

那么什么是內聯函數呢?

我們以inline修飾的函數叫做內聯函數,編譯階段,C編譯器會在調用函數的地方直接把函數展開,沒有壓棧開銷,內聯函數提升程序運行效率,但是會相應的增加代碼的長度。所以這里叫做空間換時間。

道之初,帶來了空間和時間,所以,空間和時間就是編程的陰陽兩級。

不懂編程之道的程序員常常把空間和時間消耗殆盡,得道的程序員則總是有足夠的空間和時間完成編程任務。

舉個例子

inline int Add(int a,int b){ return a+b;}

編譯期間,編譯器會將內聯函數替換相應的函數體;

這里要注意一點,在函數前加 inline 只是建議編譯器當作內容函數處理 ,但編譯器有自己的主張(遞歸 ,復雜函數等)

內聯函數的特性:

inline是一種以空間換時間的做法,省去調用函數中參數壓棧,減少了調用的開銷。同時,使用內聯函數也比宏函數更省心,不必擔心宏參數傳遞過程中出現的意外情況。

inline對于編譯器而言只是一個建議,編譯器會自動優化,如果定義為inline的函數體內有循環/遞歸等等,編譯器優化時會忽略掉內聯,另外,如果內聯函數的函數體過大,一般的編譯器也會放棄內聯方式,采用普通調用的方式進行函數調用。

inline不建議聲明和定義分離,分離會導致鏈接錯誤。因為inline被展開,就沒有函數地址了,鏈接就會找不到。

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

    關注

    3

    文章

    4346

    瀏覽量

    62971
  • 代碼
    +關注

    關注

    30

    文章

    4825

    瀏覽量

    69047
  • 編譯器
    +關注

    關注

    1

    文章

    1642

    瀏覽量

    49286
收藏 人收藏

    評論

    相關推薦

    EE-32:語言擴展:內存存儲類型、ASM和內聯構造

    電子發燒友網站提供《EE-32:語言擴展:內存存儲類型、ASM和內聯構造.pdf》資料免費下載
    發表于 01-14 15:03 ?0次下載
    EE-32:語言擴展:內存存儲類型、ASM和<b class='flag-5'>內聯</b>構造

    A/B型缺陷和D/V類缺陷介紹

    在直拉法(cz)和區熔法(Fz)制成的單晶硅錠中內生微缺陷都由V/G控制,其中,V是結晶前沿晶體生長速率,G是晶體中固液界面附近的軸向溫度梯度。 如果V/G低于臨界值,則形成的缺陷為A型漩渦缺陷或B
    的頭像 發表于 11-14 16:41 ?353次閱讀
    A/B型<b class='flag-5'>缺陷</b>和D/V類<b class='flag-5'>缺陷</b>介紹

    SUMIF函數與SUMIFS函數的區別

    SUMIF函數和SUMIFS函數都是Excel中用于條件求和的函數,它們可以幫助用戶根據特定的條件對數據進行求和。盡管它們的基本功能相似,但在使用場景和功能上存在一些差異。以下是對這兩個函數
    的頭像 發表于 10-30 09:51 ?1568次閱讀

    TC387中有__disable_interrupts()關閉所有中斷和打開所有中斷的函數嗎?

    TC387 芯片中有__disable_irq()和__enable_irq()關閉所有中斷和打開所有中斷的函數嗎,請告知
    發表于 08-01 08:22

    BP神經網絡激活函數怎么選擇

    中,激活函數起著至關重要的作用,它決定了神經元的輸出方式,進而影響整個網絡的性能。 一、激活函數的作用 激活函數是BP神經網絡中神經元的核心組成部分,其主要作用如下: 引入非線性:激活
    的頭像 發表于 07-03 10:02 ?807次閱讀

    卷積神經網絡激活函數的作用

    起著至關重要的作用,它們可以增加網絡的非線性,提高網絡的表達能力,使網絡能夠學習到更加復雜的特征。本文將詳細介紹卷積神經網絡中激活函數的作用、常見激活函數及其特點,以及激活函數在網絡優化中的應用。 一、激活
    的頭像 發表于 07-03 09:18 ?1231次閱讀

    神經網絡中的激活函數有哪些

    在神經網絡中,激活函數是一個至關重要的組成部分,它決定了神經元對于輸入信號的反應方式,為神經網絡引入了非線性因素,使得網絡能夠學習和處理復雜的模式。本文將詳細介紹神經網絡中常用的激活函數,包括其定義、特點、數學形式以及在神經網絡
    的頭像 發表于 07-01 11:52 ?660次閱讀

    如何在idf工程中引入mdf WiFi-Mesh函數?

    我原先在idf下開發好的程序,如何引入mdf進行開發?需要用到WiFi-Mesh,看了下mdf下的例程是比較合適的,而idf下的wifi-mesh例程很粗略,想把mdf中的例程移植到我原來的idf工程里面去
    發表于 06-28 14:59

    inline關鍵字被優化導致此類函數被布局在flash內,怎么處理?

    == 0));} 由于uart.c多處調用這個函數,所以編譯器自作聰明地把它編譯成了非內聯函數(意圖是減少代碼占用?),且elf能找到uart_ll_is_tx_idle標號
    發表于 06-21 12:03

    IDF4.2.1的編譯器優化bug導致panic怎么處理?

    == 0) && (status.st_utx_out == 0));} 它是一個inline函數。我們都認為inline關鍵字,會告訴編譯器內聯函數,于是它的代碼
    發表于 06-21 10:55

    請問STM32硬件I2C存在什么缺陷?

    我看野火的庫函數開發手冊里面感覺用I2C用的挺順的呀 為什么張洋卻說STM32的I2C有缺陷 不推薦用 請問下 各位在使用I2C的時候碰到過什么情況嗎 我怎么都沒感覺到I2C的缺陷 能否說下這個
    發表于 05-16 07:46

    集PLC如何應用于建筑的3D打???

    集MC Pi-Prime模塊化PLC采用EtherCat作為通信協議,有助于實現快速的反應時間和精確的定位控制,為自動化工程師提供靈活的擴展與集成,并縮短實施時間,助力建筑行業引入3D打印。
    的頭像 發表于 03-22 10:46 ?370次閱讀
    <b class='flag-5'>宏</b>集PLC如何應用于建筑的3D打???

    函數指針與回調函數的應用實例

    通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數指針是指向函數。 函數指針可以像一般函數一樣,用于調用函數、傳遞參數。
    的頭像 發表于 03-07 11:13 ?435次閱讀
    <b class='flag-5'>函數</b>指針與回調<b class='flag-5'>函數</b>的應用實例

    嵌入式Linux C語言編程程序調試與定義

    在Linux使用gcc編譯程序的時候,對于調試的語句還具有一些特殊的語法。gcc編譯的過程中,會生成一些,可以使用這些分別打印當前源文件的信息,主要內容是當前的文件、當前運行的函數和當前的程序行。
    發表于 03-01 11:41 ?1115次閱讀

    內聯函數定義 為什么需要內聯函數

    inline關鍵字是C99標準的型關鍵字,其作用是將函數展開,把函數的代碼復制到每一個調用處。
    的頭像 發表于 02-19 12:20 ?595次閱讀
    中华德州扑克协会| 大发888下载17| 明升88娱乐城| 德州扑克 梭哈| 百家乐官网平玩法lm0| 大发888优惠码| 大发百家乐官网游戏| 澳门百家乐官网鸿福厅| 百家乐官网翻天超清| 金满堂百家乐的玩法技巧和规则| 百家乐蔬菜配送公司| 皇冠网上69691| MG百家乐官网大转轮| 缅甸百家乐网站是多少| 澳门赌场娱乐城| 功夫百家乐官网的玩法技巧和规则 | 太阳城百家乐官网网址--| 网上百家乐官网的玩法技巧和规则 | 二爷百家乐官网的玩法技巧和规则 | 澳门百家乐765118118| 百家乐官网怎么玩呀| 百家乐园千术大全| 百家乐线上| 百家博国际娱乐城| 大中华百家乐官网的玩法技巧和规则 | 百家乐官网凯时娱乐场| 二代百家乐破解| 赌博药| 正宗杨公风水24山分金| 兰桂坊百家乐的玩法技巧和规则| 百乐彩博彩| 24山向是什么| 黄金城百家乐下载| 百家乐官网有方式赢钱吗| 百家乐平台是最好的娱乐城| 网络娱乐| 百家乐官网双龙出| 大发888捕鱼| 博狗玩百家乐官网好吗| 百家乐投注方法多不多| 广德县|