色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

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

一套完全自由的操作系統(tǒng)都有這個(gè)秘密

UtFs_Zlgmcu7890 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-09-27 13:56 ? 次閱讀

GNU計(jì)劃,又稱革奴計(jì)劃,是由Richard Stallman1983927日公開發(fā)起的。它的目標(biāo)是創(chuàng)建一套完全自由的操作系統(tǒng),它在編寫Linux的時(shí)候自己制作了一個(gè)標(biāo)準(zhǔn)成為GNU C標(biāo)準(zhǔn),但是作為GNU C一大特色的__attribute__機(jī)制卻為許多人所不知,現(xiàn)在讓我們一起走進(jìn)__attribute__的世界,來揭開它的神秘面紗。

對(duì)于GNU C的__attribute__機(jī)制,它有什么神奇的作用呢?你們是不是已經(jīng)迫不及待了,對(duì)于__attribute__它可以修飾變量屬性和函數(shù)屬性,它的語法格式為:“__attribute__((參數(shù)));”,下面我們慢慢道來。

當(dāng)我們初次學(xué)習(xí)一門語言的時(shí)候,都會(huì)寫一個(gè)很經(jīng)典的程序,沒錯(cuò)就是在屏幕上輸出Hello world,現(xiàn)在對(duì)我們來說寫一段hello world程序,都是順手捏來的事了,那么你看過這樣的Hello world嗎?

#include

#include

__attribute__((constructor())) void pre_proc_1(void)

{

printf("\nhello world\n");

}

__attribute__((destructor())) void end_proc_1(void)

{

printf("\nHello World\n",__LINE__);

}

int main(int args,char **argv)

{

return 0;

}

可以猜到程序輸出什么結(jié)果嗎?沒錯(cuò)也是輸出Hello world,直到為什么這樣嗎?細(xì)心的人肯定看到了在兩個(gè)子函數(shù)前面使用了__attribute__((constructor()))和__attribute__((destructor))來修飾子函數(shù),那么它們的作用是什么意思呢?被__attribute__((constructor()))修飾的函數(shù)在主函數(shù)前執(zhí)行,__attribute__((destructor()))修飾的函數(shù)在主函數(shù)后執(zhí)行,我們還可以在__attribute__((constructor(101)))在數(shù)字,括號(hào)中的數(shù)字代表函數(shù)的優(yōu)先級(jí),這樣我們就可以安排我們函數(shù)執(zhí)行的順序了,一般0-100為系統(tǒng)使用,我們可以使用100以后的數(shù)字,在VC下也有這個(gè)屬性但是不能添加數(shù)字作為優(yōu)先級(jí),但是我們可以安排我們函數(shù)的聲明順序來實(shí)現(xiàn)函數(shù)的執(zhí)行順序。

經(jīng)過一個(gè)簡(jiǎn)單有意思的程序,下面我們繼續(xù)來說__attribute__機(jī)制,在前面說道__attribute__可以修飾變量和函數(shù)屬性,下面總結(jié)了如何使用__attribute__來修飾變量和函數(shù),讓我們一起來感受它的神奇。

函數(shù)屬性

(1)__attribute__((format(archtype,string-index,first-to-check)));

format屬性告訴表達(dá)式按照printf,scanf,strftime,strfmom參數(shù)表格式規(guī)則對(duì)該函數(shù)的參數(shù)進(jìn)行檢查。

例:

__attribute__((format(printf,m,n)));

__attribute__((format(scanf,m,n)));

m:第幾個(gè)參數(shù)為格式化字符

n;在參數(shù)集合中排在第幾

(2)__attribute__((noreturn));

該屬性通知編譯器從不返回值,當(dāng)遇到類似函數(shù)需要返回值卻不可能運(yùn)行到返回值就已經(jīng)退出的情況該屬性可以避免出現(xiàn)錯(cuò)誤信息,例如C語言中的abort()和exit()函數(shù)就使用到了該屬性。

(3)__attribute__((const));

該屬性只能用于帶有數(shù)值類型參數(shù)的函數(shù)上,當(dāng)反復(fù)調(diào)用帶有數(shù)值參數(shù)的函數(shù)時(shí),由于返回值是相同的,所以編譯器可以進(jìn)行優(yōu)化處理,除第一次需要運(yùn)算外,其他只需返回第一次運(yùn)行的結(jié)果,進(jìn)而再快了執(zhí)行效率。

(4)Noinline & always_line

Nolinline為不內(nèi)聯(lián),always_line為總是內(nèi)聯(lián),我們?cè)谑褂胕nline什么內(nèi)聯(lián)函數(shù)時(shí),函數(shù)能否成為內(nèi)聯(lián)函數(shù),還要看編譯器的具體操作,使用noinline和always_line可以告訴編譯器是否執(zhí)行內(nèi)聯(lián)。

(5)看了前面的常用屬性,你們可能會(huì)問到可以在同一個(gè)函數(shù)中使用多個(gè)參數(shù)嗎?回答是肯定,并且這在實(shí)際中也是非常有用的。

變量屬性

(1)__attribute__((aligned(n)));

例:

int a __attribute__((aligned(16))) = 0;

變量a將以16位對(duì)齊,我們也可以不加數(shù)字,如__attribute__((aligned));這樣編譯器會(huì)根據(jù)目標(biāo)機(jī)器的情況實(shí)現(xiàn)對(duì)齊。它不僅可以修飾單個(gè)變量,也可以修飾符合變量如結(jié)構(gòu)體,聯(lián)合等,在實(shí)際中會(huì)用于修飾結(jié)構(gòu)體,是結(jié)構(gòu)體中的成員按一定的方式字節(jié)對(duì)齊。

(2)__attribute__((packed));

例:

int a[10] __attribute__((packed));

前面說了字節(jié)對(duì)齊屬性,有的編譯會(huì)默認(rèn)使用一種字節(jié)對(duì)齊方式,假如我們不想使用字節(jié)對(duì)齊該怎么做呢?該屬性就起到了這個(gè)作用,使用packed可以取消字節(jié)對(duì)齊方式。

(3)__attribute__((at(address));

例:

int a __attribute__((at(0x00));

在一些特殊的情況,我們需要將某個(gè)變量存放特定的位置時(shí),該屬性就起到了作用,該屬性的作用就是將變量a存儲(chǔ)到絕對(duì)地址為0x00的位置處。

(4)__attribute__((section(“section_name”)));

例如:

int a(void) __attribute__((seciton(abc));

說了前面的at屬性,現(xiàn)在我們來說seciton屬性,他和at有些相同,他的作用是將作用的函數(shù)或指定的數(shù)據(jù)放入指定名為Section_name的段中,一般在匯編文件中我們會(huì)使用到。

(5)__attribute__((cleanup(函數(shù)名)))

該屬性來修飾一個(gè)變量,當(dāng)變量的作用域結(jié)束時(shí),調(diào)用一個(gè)指定的函數(shù)。

例如:

void print()(printf(“\nend\n”);

void text()

{

Int a __attribute__((cleanup(print))) = 10;

}

看了這么多屬性的作用,大家是否感覺到了GNU編譯器的神奇呢?對(duì)于__attribute__關(guān)鍵字,大家是否有了更進(jìn)一步的認(rèn)識(shí)呢?

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

    關(guān)注

    87

    文章

    11342

    瀏覽量

    210305
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6889

    瀏覽量

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

    關(guān)注

    1

    文章

    1642

    瀏覽量

    49266

原文標(biāo)題:__attribute__ 你不知道的秘密

文章出處:【微信號(hào):Zlgmcu7890,微信公眾號(hào):周立功單片機(jī)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Linux系統(tǒng)中多個(gè)同類設(shè)備共用一套驅(qū)動(dòng)

    比如我們的設(shè)備上有很多樣的usb接口,這些usb接口都需要有驅(qū)動(dòng)才能工作,那么是每個(gè)usb都一套單獨(dú)的驅(qū)動(dòng)程序么?顯然不是的,這些usb接口屬于同類設(shè)備,用戶對(duì)他們的操作方法
    發(fā)表于 08-30 09:29 ?1031次閱讀
    Linux<b class='flag-5'>系統(tǒng)</b>中多個(gè)同類設(shè)備共用<b class='flag-5'>一套</b>驅(qū)動(dòng)

    手機(jī)操作系統(tǒng)成功的秘密

    和Android成功了?為什么Bada有三星這么強(qiáng)大的硬件支持依然被邊緣化?手機(jī)操作系統(tǒng)成功的秘密又是什么呢?、iOS的成功我們先來看下成功的
    發(fā)表于 07-12 08:37

    關(guān)于國(guó)內(nèi)實(shí)時(shí)操作系統(tǒng)的接口標(biāo)準(zhǔn)統(tǒng)

    。具體說明如下: 1 定義一套實(shí)時(shí)操作系統(tǒng)的抽象層接口。這套抽象層接口首先要能滿足國(guó)外的些主流實(shí)時(shí)系統(tǒng)的封裝。比如: task_create_cn(……….){Ucos3_task_
    發(fā)表于 06-01 10:13

    【Aworks申請(qǐng)】物聯(lián)網(wǎng)操作系統(tǒng)

    。為了解決這個(gè)問題,我決定邊學(xué)習(xí)邊開發(fā)一套全新的輕量級(jí)的操作系統(tǒng)。項(xiàng)目描述:我將這個(gè)物聯(lián)網(wǎng)
    發(fā)表于 07-09 11:04

    什么是UNIX操作系統(tǒng)

    @TOC嵌入式方向在校目前所學(xué)到的知識(shí)**歡迎使用Markdown編輯器Linux概述linux是一套免費(fèi)使用和自由傳播的類UNIX操作系統(tǒng)。對(duì)于類UNIX操作系統(tǒng),我并不是很了解,通
    發(fā)表于 11-04 07:29

    分享一套通用的開發(fā)環(huán)境搭建教程

    針對(duì)嵌入式的開發(fā),不同的開發(fā)者使用不同的操作系統(tǒng),可能是Windows 或者 Linux,隨之而來所搭建的開發(fā)環(huán)境亦不同。所以在這里希望分享一套通用的開發(fā)環(huán)境搭建教程,主要是圍繞VS Code以及
    發(fā)表于 11-05 06:23

    什么是Linux操作系統(tǒng)

    什么是Linux操作系統(tǒng)  簡(jiǎn)單地說,Linux是一套
    發(fā)表于 12-26 12:04 ?1410次閱讀

    Linux操作系統(tǒng)基本使用知識(shí),Linux操作系統(tǒng)操作流程圖文詳解

    Linux系統(tǒng)一般有4個(gè)主要部分:內(nèi)核、shell、文件系統(tǒng)和應(yīng)用程序。內(nèi)核、shell和文件系統(tǒng)一起形成了基本的操作系統(tǒng)結(jié)構(gòu),它們使得用戶可以運(yùn)行程序、管理文件并使用
    發(fā)表于 11-24 16:19 ?1.9w次閱讀
    Linux<b class='flag-5'>操作系統(tǒng)</b>基本使用知識(shí),Linux<b class='flag-5'>操作系統(tǒng)</b><b class='flag-5'>操作</b>流程圖文詳解

    Linux操作系統(tǒng)在定制PMP DM320的應(yīng)用解析

    Linux是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是個(gè)基于POSIX和UNIX的多用戶、多任務(wù)、支持多線程和多CPU的操作系統(tǒng)。PM
    發(fā)表于 11-30 14:21 ?973次閱讀

    微軟全新操作系統(tǒng)正在開發(fā) 或在5月Build大會(huì)亮相

    關(guān)于微軟全新的一套操作系統(tǒng)Windows Lite有了新的動(dòng)態(tài)。
    的頭像 發(fā)表于 03-05 09:07 ?2111次閱讀

    APL庫是一套AS功能庫與OS操作對(duì)象的集合

    首先,在AS控制器側(cè),它是個(gè)MotL功能塊(Function Block);在OS側(cè),它卻是此功能塊對(duì)應(yīng)的電機(jī)圖標(biāo)(Block Icon)和一套操作面板(Faceplate),APL定義了
    的頭像 發(fā)表于 12-05 14:31 ?6058次閱讀
    APL庫是<b class='flag-5'>一套</b>AS功能庫與OS<b class='flag-5'>操作</b>對(duì)象的集合

    Linux操作系統(tǒng)的詳細(xì)安裝步驟

    Linux是一套免費(fèi)使用和自由傳播的操作系統(tǒng),它主要用于基于Intel x86系列CPU的計(jì)算機(jī)上。這個(gè)系統(tǒng)是由全世界各地的成千上萬的程序員
    發(fā)表于 07-16 11:39 ?4663次閱讀

    一套成熟的MES系統(tǒng)能賣多少錢

    對(duì)于MES系統(tǒng)價(jià)格來說,相信很多企業(yè)都給不出個(gè)確定的答案,畢竟現(xiàn)在的MES系統(tǒng)市場(chǎng)上類型較多,功能不,幾萬到幾百萬的系統(tǒng)比比皆是,但是要
    發(fā)表于 09-30 17:45 ?3490次閱讀

    一套系統(tǒng)的網(wǎng)絡(luò)排錯(cuò)方法

    為什么要先講必備條件?因?yàn)檫@里所講的網(wǎng)絡(luò)排錯(cuò)并不僅僅是停留在某個(gè)小小命令的使用上,而是一套系統(tǒng)的方法,如果沒有這些條件,真的不能保證下面聊的這些可以聽得懂,并且能運(yùn)用到實(shí)際當(dāng)中,所以
    的頭像 發(fā)表于 11-10 09:56 ?716次閱讀

    linux屬于什么操作系統(tǒng)

    Linux屬于種類UNIX操作系統(tǒng)。Linux,全稱GNU/Linux,是一套免費(fèi)使用和自由傳播的類Unix操作系統(tǒng),是
    的頭像 發(fā)表于 11-08 11:01 ?4697次閱讀
    主站蜘蛛池模板: 欧美视频精品一区二区三区 | 色偷偷爱偷偷要 | 亚洲免费视频在线 | 久久婷婷五月综合色精品首页 | xx顶级欧美熟妞xxhd | 亚洲精品无码一区二区三区四虎 | 国产精品日本无码久久一老A | 女性露出奶头流出精子 | 色婷婷欧美在线播放内射 | Chineseman瘦老头77 | 99精品视频在线免费观看 | 无人区乱码区1卡2卡三卡在线 | 伊人影院2019 | 国产制服丝袜91在线 | 丰满的女友1在线观看 | 99久久国内精品成人免费 | 麻豆人妻换人妻X99 麻豆区蜜芽区 | 久久性综合亚洲精品电影网 | 激情男女高潮射精AV免费 | 97视频在线播放 | 人妻中文字幕无码久久AV爆 | 中文中幕无码亚洲视频 | 少妇久久久久久被弄高潮 | 国产精品福利电影 | 欧美白妞大战非洲大炮 | 忘忧草研究院一二三 | 人妻美妇疯狂迎合 | 国产精品成人无码久免费 | 最近的2019中文字幕国语HD | 99热这里只有精品视频2 | 在线a视频| 色欲久久99精品久久久久久AV | 国产GV天堂亚洲国产GV刚刚碰 | 国产成人无码一区AV在线观看 | 国产精品96久久久久久AV网址 | 久久热免费观看视频 | 好大好硬好爽好深好硬视频 | 2019久久视频这里有精品15 | 男人J进入女人P免费狂躁 | 又黄又爽又无遮挡在线观看免费 | 色中色最新地址登陆 |