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

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

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

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

C語(yǔ)言強(qiáng)/弱符號(hào)和強(qiáng)/弱引用的作用

小麥大叔 ? 來(lái)源:小麥大叔 ? 作者:小麥大叔 ? 2022-07-12 11:55 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

__attribute__ 是一個(gè)編譯器指令,其實(shí)是 GNU C 的一種機(jī)制,本質(zhì)是一個(gè)編譯器的指令,在聲明的時(shí)候可以提供一些屬性,在編譯階段起作用,來(lái)做多樣化的錯(cuò)誤檢查和高級(jí)優(yōu)化。

用于在 C,C++,Objective-C 中修飾變量、函數(shù)、參數(shù)、方法、類等。

合理使用 __attribute__ 有什么好處?

  • 給編譯器提供上下文,幫助編譯器做優(yōu)化,合理使用可以收到顯著的優(yōu)化效果。
  • 編譯器會(huì)根據(jù) __attribute__ 產(chǎn)生一些編譯警告,使代碼更規(guī)范。
  • 給代碼閱讀者提供必要的注解,助其理解代碼意圖。

總之,__attribute__ 起到了給編譯器提供上下文的作用,如果錯(cuò)誤的使用 __attribute__ 指令,因?yàn)榻o編譯器提供了錯(cuò)誤的上下文,由此引起的錯(cuò)誤通常很難被發(fā)現(xiàn)。

強(qiáng)符號(hào)和弱符號(hào)

在同一作用域下不能定義同一個(gè)變量或函數(shù),很多C語(yǔ)言學(xué)習(xí)者都理所當(dāng)然地這么認(rèn)為。

這個(gè)其實(shí)是是有所偏頗的,GNU C對(duì)標(biāo)準(zhǔn)C語(yǔ)言進(jìn)行了擴(kuò)展,在GCC中,對(duì)于符號(hào)(在編譯時(shí),變量和函數(shù)都被抽象成符號(hào))而言,存在著強(qiáng)符號(hào)和弱符號(hào)之分

是的,是否支持這個(gè)特性是由不同的C語(yǔ)言標(biāo)準(zhǔn)決定的。

對(duì)于C/C++而言,編譯器默認(rèn)函數(shù)和已初始化的全局變量為強(qiáng)符號(hào),而未初始化的全局變量為弱符號(hào)。

編程者沒(méi)有顯示指定時(shí),編譯器對(duì)強(qiáng)弱符號(hào)的定義會(huì)有一些默認(rèn)行為,同時(shí)開(kāi)發(fā)者也可以對(duì)符號(hào)進(jìn)行指定,使用"attribute((weak))"來(lái)聲明一個(gè)符號(hào)為弱符號(hào)。

定義一個(gè)相同的變量,當(dāng)兩者不全是強(qiáng)符號(hào)時(shí),gcc在編譯時(shí)并不會(huì)報(bào)錯(cuò),而是遵循一定的規(guī)則進(jìn)行取舍:

  • 當(dāng)兩者都為強(qiáng)符號(hào)時(shí),重復(fù)定義的報(bào)錯(cuò):redefinition of 'xxx'
  • 當(dāng)兩者為一強(qiáng)一弱時(shí),選取強(qiáng)符號(hào)的值
  • 當(dāng)兩者同時(shí)為弱時(shí),選擇其中占用空間較大的符號(hào),這個(gè)其實(shí)很好理解,編譯器不知道編程者的用意,選擇占用空間大的符號(hào)至少不會(huì)造成諸如溢出、越界等嚴(yán)重后果。

在默認(rèn)的符號(hào)類型情況下,強(qiáng)符號(hào)和弱符號(hào)是可以共存的,類似于這樣:

intx;
intx=1;

編譯不會(huì)報(bào)錯(cuò),在編譯時(shí)x的取值將會(huì)是1.

注意,這里可以使用__attribute__((weak))將強(qiáng)符號(hào)轉(zhuǎn)換為弱符號(hào),卻不能與一個(gè)強(qiáng)符號(hào)共存,類似于這樣:

int__attribute__((weak))x=0;
intx=1;

編譯器將報(bào)重復(fù)定義錯(cuò)誤。

強(qiáng)引用和弱引用

除了強(qiáng)符號(hào)和弱符號(hào)的區(qū)別之外,GNUC還有一個(gè)特性就是強(qiáng)引用和弱引用。

我們知道的是,編譯器在編譯階段只負(fù)責(zé)將源文件編譯成目標(biāo)文件(即二進(jìn)制文件),然后由鏈接器對(duì)所有二進(jìn)制文件進(jìn)行鏈接操作。

編譯器默認(rèn)所有的變量和函數(shù)為強(qiáng)引用,同時(shí)編程者可以使用__attribute__((weakref))來(lái)聲明一個(gè)函數(shù)。

注意這里是聲明而不是定義,既然是引用,那么就是使用其他模塊中定義的實(shí)體,對(duì)于函數(shù)而言,我們可以使用這樣的寫(xiě)法:

__attribute__((weakref))voidfunc(void);

,然后在函數(shù)中調(diào)用func(),如果func()沒(méi)有被定義,則func的值為0,如果func被定義,則調(diào)用相應(yīng)func,在《程序員的自我修養(yǎng)》這本書(shū)中有介紹,它是這樣寫(xiě)的:

__attribute__((weakref))voidfunc(void);
voidmain(void)
{
if(func){func();}
}

但是在現(xiàn)代的編譯系統(tǒng)中,這種寫(xiě)法卻是錯(cuò)誤的,編譯雖然通過(guò)(有警告信息),但是卻不正確:

warning:‘weakref’attributeshouldbeaccompaniedwithan‘alias’attribute[-Wattributes]

警告顯示:weakref需要伴隨著一個(gè)別名才能正常使用

強(qiáng)/弱符號(hào)和強(qiáng)/弱引用的作用

這種弱符號(hào)、弱引用的擴(kuò)展機(jī)制在庫(kù)的實(shí)現(xiàn)中非常有用。

我們?cè)趲?kù)中可以使用弱符號(hào)和弱引用機(jī)制,這樣對(duì)于一個(gè)弱符號(hào)函數(shù)而言,用戶可以自定義擴(kuò)展功能的函數(shù)來(lái)覆蓋這個(gè)弱符號(hào)函數(shù)。

同時(shí)我們可以將某些擴(kuò)展功能函數(shù)定義為弱引用,當(dāng)用戶需要使用擴(kuò)展功能時(shí),就對(duì)其進(jìn)行定義,鏈接到程序當(dāng)中。

如果用戶不進(jìn)行定義,則鏈接也不會(huì)報(bào)錯(cuò),這使得庫(kù)的功能可以很方便地進(jìn)行裁剪和組合。

注意:C標(biāo)準(zhǔn)里根本沒(méi)有提到強(qiáng)、弱符號(hào)。這只是GCC這個(gè)實(shí)現(xiàn)定義的特性,在MS C編譯器里是不存在這個(gè)概念的。

審核編輯 :李倩


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

    關(guān)注

    180

    文章

    7632

    瀏覽量

    141796
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4381

    瀏覽量

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

    關(guān)注

    1

    文章

    1662

    瀏覽量

    50232

原文標(biāo)題:C語(yǔ)言進(jìn)階小技巧,弱符號(hào)和弱引用

文章出處:【微信號(hào):knifewheat,微信公眾號(hào):小麥大叔】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    C語(yǔ)言精彩編程百例-364頁(yè)

    內(nèi)容提要 C是一種通用的程序設(shè)計(jì)語(yǔ)言,它包含了緊湊的表達(dá)式、豐富的運(yùn)算符集合、現(xiàn)代控制流以及數(shù)據(jù)結(jié)構(gòu)等四個(gè)部分。C語(yǔ)言功能豐富,衣達(dá)能力強(qiáng),
    發(fā)表于 06-13 17:28

    福晶科技PLI吸收測(cè)試儀成功交付客戶

    佳音再至,福晶科技自主研發(fā)的PLI吸收測(cè)試儀成功交付中國(guó)科學(xué)院某研究所。該設(shè)備集成了1064 nm、532 nm、355 nm和266 nm四個(gè)波長(zhǎng)的泵浦光源,可精準(zhǔn)檢測(cè)晶體吸收特性,為新型晶體尤其是紫外晶體的開(kāi)發(fā)和性能研究提供關(guān)鍵技術(shù)支撐。
    的頭像 發(fā)表于 06-10 17:47 ?550次閱讀

    芯盾時(shí)代用戶身份和訪問(wèn)管理平臺(tái)助力企業(yè)消滅口令

    口令,是網(wǎng)絡(luò)安全中的老大難問(wèn)題,因?yàn)?b class='flag-5'>弱口令導(dǎo)致的重大網(wǎng)絡(luò)安全事件屢見(jiàn)不鮮。在攻防演練中,利用口令進(jìn)行攻擊是紅隊(duì)最常用的攻擊手段之一,在所有攻擊中占比近30%,僅次于0day漏洞。
    的頭像 發(fā)表于 04-27 09:16 ?443次閱讀

    景嘉微榮獲2024湖南湘江新區(qū)民營(yíng)企業(yè)“稅收貢獻(xiàn)百強(qiáng)”“研發(fā)投入百強(qiáng)”“社會(huì)責(zé)任百強(qiáng)”稱號(hào)

    近日,在湖南湘江新區(qū)民營(yíng)企業(yè)家座談會(huì)上,2024 湖南湘江新區(qū)民營(yíng)企業(yè)百強(qiáng)榜單正式揭曉。長(zhǎng)沙景嘉微電子股份有限公司憑借卓越的表現(xiàn),成功斬獲 “稅收貢獻(xiàn)百強(qiáng)”“研發(fā)投入百強(qiáng)”“社會(huì)責(zé)任百強(qiáng)
    的頭像 發(fā)表于 02-23 17:50 ?889次閱讀

    繼電器的作用及常用類型介紹

    控制。 隔離 :繼電器可以在不同電壓或電流等級(jí)的電路之間提供電氣隔離,保護(hù)控制電路不受高電壓或大電流的影響。 放大 :在信號(hào)控制強(qiáng)負(fù)載的情況下,繼電器可以將小信號(hào)放大,驅(qū)動(dòng)較大的負(fù)載。 轉(zhuǎn)換 :繼電器可以實(shí)現(xiàn)電路狀態(tài)的轉(zhuǎn)換
    的頭像 發(fā)表于 12-28 11:09 ?2829次閱讀

    2024全球安防50強(qiáng)榜單公布

    2023年全球安防50強(qiáng)企業(yè)表現(xiàn)積極,前10公司收入同比增長(zhǎng)。??低暫痛笕A股份領(lǐng)跑,新上榜企業(yè)為技威時(shí)代GWELLTIMES。TKH等四家公司重返50強(qiáng)。
    的頭像 發(fā)表于 12-26 16:17 ?1279次閱讀

    snmp口令及安全加固

    snmp口令及安全加固 口令檢測(cè) ? nmap –sU –p161 –script=snmp-brute ip //查找snmp口令 ? 口令利用 ? nmap -sU -p1
    的頭像 發(fā)表于 12-17 14:47 ?1152次閱讀

    強(qiáng)榮獲2024智能客服企業(yè)TOP20

    強(qiáng)憑借其深厚的技術(shù)積累和創(chuàng)新能力,不斷推出高性能、高質(zhì)量的產(chǎn)品和解決方案,榮登2024智能客服企業(yè)榜單TOP20,這是對(duì)普強(qiáng)卓越的技術(shù)實(shí)力和應(yīng)用層面的肯定。
    的頭像 發(fā)表于 11-21 15:57 ?570次閱讀

    中科創(chuàng)達(dá)榮登北京民營(yíng)企業(yè)百強(qiáng)和科技創(chuàng)新百強(qiáng)榜單

    日前,北京市工商聯(lián)與通州區(qū)委、區(qū)政府共同舉辦“2024北京民營(yíng)企業(yè)百強(qiáng)”發(fā)布會(huì),正式揭曉了北京民營(yíng)企業(yè)百強(qiáng)“1+4”榜單。作為全球領(lǐng)先的智能操作系統(tǒng)及端側(cè)智能產(chǎn)品和技術(shù)提供商,中科創(chuàng)達(dá)榮耀入選“北京
    的頭像 發(fā)表于 11-14 11:44 ?857次閱讀

    適合可燃(A2L)制冷劑檢測(cè)的氣體傳感器模塊FCM2630

    隨著全球?qū)Νh(huán)境保護(hù)意識(shí)的增強(qiáng),傳統(tǒng)的不可燃(A1)氟利昂制冷劑因其對(duì)氣候變暖的顯著影響而逐漸被淘汰。為了應(yīng)對(duì)這一挑戰(zhàn),可燃(A2L)制冷劑應(yīng)運(yùn)而生,它們具有更低的全球變暖潛能值(GWP),成為替代
    的頭像 發(fā)表于 11-04 09:24 ?615次閱讀

    IPMSM電機(jī)驅(qū)動(dòng)的無(wú)傳感器磁FOC和MTPA

    電子發(fā)燒友網(wǎng)站提供《IPMSM電機(jī)驅(qū)動(dòng)的無(wú)傳感器磁FOC和MTPA.pdf》資料免費(fèi)下載
    發(fā)表于 10-31 10:32 ?0次下載

    C語(yǔ)言與其他編程語(yǔ)言的比較

    C語(yǔ)言作為一種歷史悠久的編程語(yǔ)言,自其誕生以來(lái),一直在軟件開(kāi)發(fā)領(lǐng)域扮演著重要角色。它以其高效、靈活和可移植性強(qiáng)的特點(diǎn),成為了系統(tǒng)級(jí)編程的首選語(yǔ)言
    的頭像 發(fā)表于 10-29 17:30 ?1083次閱讀

    強(qiáng)成功榮登兩大榜單

    強(qiáng)憑借其深厚的技術(shù)積累和創(chuàng)新能力,不斷推出高性能、高質(zhì)量的產(chǎn)品和解決方案,成功榮登兩大榜單,這是對(duì)普強(qiáng)卓越的技術(shù)實(shí)力和應(yīng)用層面的肯定。
    的頭像 發(fā)表于 09-13 10:34 ?1597次閱讀

    請(qǐng)問(wèn)信號(hào)前放輸出如何使用并聯(lián)放大器分為兩路?

    信號(hào)檢測(cè),第一級(jí)為極低噪聲放大器,現(xiàn)想將該路輸出分為兩路,一路繼續(xù)放大,一路進(jìn)行濾波處理。 但, 使用兩高輸入阻抗放大器,輸入相連,輸出分別接兩路,發(fā)現(xiàn),均無(wú)輸出結(jié)果現(xiàn)象(爭(zhēng)用?) 使用兩低輸入阻抗放大器,輸入相連,輸出分別接兩路,發(fā)現(xiàn),單獨(dú)一路后級(jí)均會(huì)影響并聯(lián)放大器
    發(fā)表于 09-09 07:53

    強(qiáng)信息成功中標(biāo)“語(yǔ)音智檢項(xiàng)目”

    強(qiáng)在智能語(yǔ)音技術(shù)領(lǐng)域深耕多年,成功中標(biāo)澳門(mén)某銀行“語(yǔ)音智檢項(xiàng)目”,彰顯了普強(qiáng)在智能語(yǔ)音技術(shù)的卓越實(shí)力與深厚底蘊(yùn)。
    的頭像 發(fā)表于 07-25 16:35 ?873次閱讀