chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

宏的缺陷與內(nèi)聯(lián)函數(shù)的引入

麥辣雞腿堡 ? 來源:軒哥談芯 ? 作者:軒哥談芯 ? 2023-11-01 17:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

宏雖然有著一定的優(yōu)勢,但是它的缺點(diǎn)也不可忽視。

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

所以為了解決這種不利于調(diào)試的問題,就有了內(nèi)聯(lián)函數(shù)。

那么什么是內(nèi)聯(lián)函數(shù)呢?

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

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

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

舉個例子

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

編譯期間,編譯器會將內(nèi)聯(lián)函數(shù)替換相應(yīng)的函數(shù)體;

這里要注意一點(diǎn),在函數(shù)前加 inline 只是建議編譯器當(dāng)作內(nèi)容函數(shù)處理 ,但編譯器有自己的主張(遞歸 ,復(fù)雜函數(shù)等)

內(nèi)聯(lián)函數(shù)的特性:

inline是一種以空間換時間的做法,省去調(diào)用函數(shù)中參數(shù)壓棧,減少了調(diào)用的開銷。同時,使用內(nèi)聯(lián)函數(shù)也比宏函數(shù)更省心,不必?fù)?dān)心宏參數(shù)傳遞過程中出現(xiàn)的意外情況。

inline對于編譯器而言只是一個建議,編譯器會自動優(yōu)化,如果定義為inline的函數(shù)體內(nèi)有循環(huán)/遞歸等等,編譯器優(yōu)化時會忽略掉內(nèi)聯(lián),另外,如果內(nèi)聯(lián)函數(shù)的函數(shù)體過大,一般的編譯器也會放棄內(nèi)聯(lián)方式,采用普通調(diào)用的方式進(jìn)行函數(shù)調(diào)用。

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4405

    瀏覽量

    66798
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4940

    瀏覽量

    73083
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1669

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    C語言的編程技巧

    1、定義使用do{...}while(0)?:當(dāng)定義中包含多條語句時,使用do{...}while(0)可以避免語句嵌套問題,確保的獨(dú)立性。? ?2、靈活數(shù)組成員?:C99標(biāo)準(zhǔn)允許結(jié)構(gòu)體的最后
    發(fā)表于 11-27 06:46

    控制流和函數(shù)調(diào)用的精細(xì)調(diào)整

    特性,避免不必要的計算。 函數(shù)調(diào)用涉及開銷,因為它需要保存當(dāng)前執(zhí)行環(huán)境并跳轉(zhuǎn)到新的執(zhí)行環(huán)境。減少函數(shù)調(diào)用,尤其是在頻繁執(zhí)行的循環(huán)中,可以顯著提高性能。 對于簡單且頻繁調(diào)用的函數(shù),使用內(nèi)聯(lián)
    發(fā)表于 11-14 06:32

    inline ASM(內(nèi)聯(lián)匯編)的細(xì)節(jié)分享

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

    內(nèi)聯(lián)匯編的妙用

    它數(shù)據(jù)相關(guān),于是借助循環(huán)變量i,做累加操作,但結(jié)果還是不對。 3、內(nèi)聯(lián)匯編(結(jié)果正確) 一覺醒來,突然想到內(nèi)聯(lián)匯編,決定一試:既然編譯器不能如我所愿,那可以把想要的部分先自己編譯。各種架構(gòu)在線編譯
    發(fā)表于 10-31 06:28

    簡單的內(nèi)聯(lián)匯編介紹

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

    RISC-V的工具鏈GCC內(nèi)聯(lián)匯編

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

    計算程序執(zhí)行指令數(shù)的函數(shù)實現(xiàn)

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

    GCC內(nèi)聯(lián)匯編

    GCC內(nèi)聯(lián)匯編 在蜂鳥內(nèi)核的NICE協(xié)處理器擴(kuò)展demo的insn.h文件中存在下面一段指令,用于定義對協(xié)處理器調(diào)用指令,demo中協(xié)處理器支持三條指令:lbuf從內(nèi)存中l(wèi)oad數(shù)據(jù)至行數(shù)據(jù)緩存
    發(fā)表于 10-24 07:46

    通過內(nèi)聯(lián)匯編調(diào)用乘法指令mulh\\mulhsu\\mulhu

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

    C語言中的內(nèi)聯(lián)函數(shù)

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

    MSP430常用內(nèi)聯(lián)函數(shù)說明

    電子發(fā)燒友網(wǎng)站提供《MSP430常用內(nèi)聯(lián)函數(shù)說明.docx》資料免費(fèi)下載
    發(fā)表于 06-05 17:20 ?0次下載

    Vicor助力發(fā)打造主動懸架電源系統(tǒng)

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

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)引入

    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API函數(shù)引入
    的頭像 發(fā)表于 05-29 14:05 ?819次閱讀
    迅為RK3568開發(fā)板驅(qū)動指南GPIO子系統(tǒng)GPIO子系統(tǒng)API<b class='flag-5'>函數(shù)</b>的<b class='flag-5'>引入</b>

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

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

    EE-32:語言擴(kuò)展:內(nèi)存存儲類型、ASM和內(nèi)聯(lián)構(gòu)造

    電子發(fā)燒友網(wǎng)站提供《EE-32:語言擴(kuò)展:內(nèi)存存儲類型、ASM和內(nèi)聯(lián)構(gòu)造.pdf》資料免費(fèi)下載
    發(fā)表于 01-14 15:03 ?0次下載
    EE-32:語言擴(kuò)展:內(nèi)存存儲類型、ASM和<b class='flag-5'>內(nèi)聯(lián)</b>構(gòu)造