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

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

    文章

    4417

    瀏覽量

    67502
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73960
  • 編譯器
    +關注

    關注

    1

    文章

    1672

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

    1. 函數介紹 函數,即包含多條語句的定義,其通常為某一被頻繁調用的功能的語句封裝,且不想通過函數
    發表于 12-29 07:34

    內聯函數介紹

    的消耗更小。如果參數是常量,編譯器可以提供更好的優化。 內聯函數缺陷是如果調用的地方很多,代碼的體積會變得很大。這主要取決于函數本身的大小和調用的次數。 僅對重要的
    發表于 12-12 07:08

    C語言的編程技巧

    1、定義使用do{...}while(0)?:當定義中包含多條語句時,使用do{...}while(0)可以避免語句嵌套問題,確保的獨立性。? ?2、靈活數組成員?:C99標準允許結構體的最后
    發表于 11-27 06:46

    控制流和函數調用的精細調整

    特性,避免不必要的計算。 函數調用涉及開銷,因為它需要保存當前執行環境并跳轉到新的執行環境。減少函數調用,尤其是在頻繁執行的循環中,可以顯著提高性能。 對于簡單且頻繁調用的函數,使用內聯
    發表于 11-14 06:32

    inline ASM(內聯匯編)的細節分享

    內聯匯編? 基本的語法 asm volatile (\"instruction list\":OUTPUT:INPUT:(clobber/modify)); 如果
    發表于 10-31 09:11

    簡單的內聯匯編介紹

    ,只能采用內嵌匯編指令(CSR指令)的方式,才能對 CSR 寄存器進行操作。 內聯匯編程序 內斂匯編函數格式: asm volatile ( 匯編指令列表 : 輸出操作數 // 非必需 : 輸入操作數
    發表于 10-30 08:04

    RISC-V的工具鏈GCC內聯匯編

    GCC內聯匯編語法規則如下: asmvolatile( 匯編指令列表 :輸出操作數 :輸入操作數 :可能影響的寄存器或存儲器); 以下分別詳細介紹: 1.關鍵詞“asm”是GCC的關鍵詞,表示進行內聯
    發表于 10-30 06:59

    計算程序執行指令數的函數實現

    __RV_CSR_READ是一個定義,采用內聯匯編使用csrr指令 也可查看反匯編代碼: 4、查手冊可知,csrr指令是用來讀CSR寄存器的值 5、而minstreth和minstret寄存器介紹如下
    發表于 10-28 06:27

    GCC內聯匯編

    GCC內聯匯編 在蜂鳥內核的NICE協處理器擴展demo的insn.h文件中存在下面一段指令,用于定義對協處理器調用指令,demo中協處理器支持三條指令:lbuf從內存中load數據至行數據緩存
    發表于 10-24 07:46

    通過內聯匯編調用乘法指令mulh\\mulhsu\\mulhu

    mulh、mulhu與mulhsu指令,不能直接驗證,需要其他方法。因此,我們想到了在C語言中嵌入內聯匯編,分別生成三條指令的接口函數,之后便只需在C語言中調用者三中函數便可執行mulh、mulhu
    發表于 10-24 06:52

    C語言中的內聯函數

    在C編程中,內聯函數都用于避免函數調用的開銷并編寫可復用的邏輯部分,但它們在工作方式和安全性方面存在顯著差異。
    的頭像 發表于 07-25 15:10 ?1909次閱讀
    C語言中的<b class='flag-5'>內聯</b><b class='flag-5'>函數</b>與<b class='flag-5'>宏</b>

    MSP430常用內聯函數說明

    電子發燒友網站提供《MSP430常用內聯函數說明.docx》資料免費下載
    發表于 06-05 17:20 ?0次下載

    Vicor助力發打造主動懸架電源系統

    廈門發電聲股份有限公司(發)打造業內性能卓越的主動懸架電源系統,旨在將長期以來僅見于豪華車型的功能引入中端車型。發成功突破困擾知名汽車技術供應商幾十年的技術瓶頸,在滿足主動懸架系
    的頭像 發表于 06-04 15:24 ?1201次閱讀

    迅為RK3568開發板驅動指南GPIO子系統GPIO子系統API函數引入

    迅為RK3568開發板驅動指南GPIO子系統GPIO子系統API函數引入
    的頭像 發表于 05-29 14:05 ?1016次閱讀
    迅為RK3568開發板驅動指南GPIO子系統GPIO子系統API<b class='flag-5'>函數</b>的<b class='flag-5'>引入</b>

    芯片離子注入后退火會引入的工藝問題

    本文簡單介紹了芯片離子注入后退火會引入的工藝問題:射程末端(EOR)缺陷、硼離子注入退火問題和磷離子注入退火問題。
    的頭像 發表于 04-23 10:54 ?2001次閱讀
    芯片離子注入后退火會<b class='flag-5'>引入</b>的工藝問題