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

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

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

3天內不再提示

一套完全自由的操作系統都有這個秘密

UtFs_Zlgmcu7890 ? 來源:互聯網 ? 作者:佚名 ? 2017-09-27 13:56 ? 次閱讀

GNU計劃,又稱革奴計劃,是由Richard Stallman1983927日公開發起的。它的目標是創建一套完全自由的操作系統,它在編寫Linux的時候自己制作了一個標準成為GNU C標準,但是作為GNU C一大特色的__attribute__機制卻為許多人所不知,現在讓我們一起走進__attribute__的世界,來揭開它的神秘面紗。

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

當我們初次學習一門語言的時候,都會寫一個很經典的程序,沒錯就是在屏幕上輸出Hello world,現在對我們來說寫一段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;

}

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

經過一個簡單有意思的程序,下面我們繼續來說__attribute__機制,在前面說道__attribute__可以修飾變量和函數屬性,下面總結了如何使用__attribute__來修飾變量和函數,讓我們一起來感受它的神奇。

函數屬性

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

format屬性告訴表達式按照printf,scanf,strftime,strfmom參數表格式規則對該函數的參數進行檢查。

例:

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

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

m:第幾個參數為格式化字符

n;在參數集合中排在第幾

(2)__attribute__((noreturn));

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

(3)__attribute__((const));

該屬性只能用于帶有數值類型參數的函數上,當反復調用帶有數值參數的函數時,由于返回值是相同的,所以編譯器可以進行優化處理,除第一次需要運算外,其他只需返回第一次運行的結果,進而再快了執行效率。

(4)Noinline & always_line

Nolinline為不內聯,always_line為總是內聯,我們在使用inline什么內聯函數時,函數能否成為內聯函數,還要看編譯器的具體操作,使用noinline和always_line可以告訴編譯器是否執行內聯。

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

變量屬性

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

例:

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

變量a將以16位對齊,我們也可以不加數字,如__attribute__((aligned));這樣編譯器會根據目標機器的情況實現對齊。它不僅可以修飾單個變量,也可以修飾符合變量如結構體,聯合等,在實際中會用于修飾結構體,是結構體中的成員按一定的方式字節對齊。

(2)__attribute__((packed));

例:

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

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

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

例:

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

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

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

例如:

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

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

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

該屬性來修飾一個變量,當變量的作用域結束時,調用一個指定的函數。

例如:

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

void text()

{

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

}

看了這么多屬性的作用,大家是否感覺到了GNU編譯器的神奇呢?對于__attribute__關鍵字,大家是否有了更進一步的認識呢?

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

    關注

    87

    文章

    11320

    瀏覽量

    209834
  • 操作系統
    +關注

    關注

    37

    文章

    6848

    瀏覽量

    123428
  • 編譯器
    +關注

    關注

    1

    文章

    1636

    瀏覽量

    49172

原文標題:__attribute__ 你不知道的秘密

文章出處:【微信號:Zlgmcu7890,微信公眾號:周立功單片機】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Linux系統中多個同類設備共用一套驅動

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

    手機操作系統成功的秘密

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

    關于國內實時操作系統的接口標準統

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

    【Aworks申請】物聯網操作系統

    。為了解決這個問題,我決定邊學習邊開發一套全新的輕量級的操作系統。項目描述:我將這個物聯網
    發表于 07-09 11:04

    什么是UNIX操作系統

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

    分享一套通用的開發環境搭建教程

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

    什么是Linux操作系統

    什么是Linux操作系統  簡單地說,Linux是一套
    發表于 12-26 12:04 ?1408次閱讀

    Linux操作系統基本使用知識,Linux操作系統操作流程圖文詳解

    Linux系統一般有4個主要部分:內核、shell、文件系統和應用程序。內核、shell和文件系統一起形成了基本的操作系統結構,它們使得用戶可以運行程序、管理文件并使用
    發表于 11-24 16:19 ?1.8w次閱讀
    Linux<b class='flag-5'>操作系統</b>基本使用知識,Linux<b class='flag-5'>操作系統</b><b class='flag-5'>操作</b>流程圖文詳解

    Linux操作系統在定制PMP DM320的應用解析

    Linux是一套免費使用和自由傳播的類Unix操作系統,是個基于POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操作系統。PM
    發表于 11-30 14:21 ?965次閱讀

    微軟全新操作系統正在開發 或在5月Build大會亮相

    關于微軟全新的一套操作系統Windows Lite有了新的動態。
    的頭像 發表于 03-05 09:07 ?2080次閱讀

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

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

    Linux操作系統的詳細安裝步驟

    Linux是一套免費使用和自由傳播的操作系統,它主要用于基于Intel x86系列CPU的計算機上。這個系統是由全世界各地的成千上萬的程序員
    發表于 07-16 11:39 ?4647次閱讀

    一套成熟的MES系統能賣多少錢

    對于MES系統價格來說,相信很多企業都給不出個確定的答案,畢竟現在的MES系統市場上類型較多,功能不,幾萬到幾百萬的系統比比皆是,但是要
    發表于 09-30 17:45 ?3476次閱讀

    一套系統的網絡排錯方法

    為什么要先講必備條件?因為這里所講的網絡排錯并不僅僅是停留在某個小小命令的使用上,而是一套系統的方法,如果沒有這些條件,真的不能保證下面聊的這些可以聽得懂,并且能運用到實際當中,所以
    的頭像 發表于 11-10 09:56 ?696次閱讀

    linux屬于什么操作系統

    Linux屬于種類UNIX操作系統。Linux,全稱GNU/Linux,是一套免費使用和自由傳播的類Unix操作系統,是
    的頭像 發表于 11-08 11:01 ?4578次閱讀
    主站蜘蛛池模板: 亚洲AV福利天堂一区二区三| 被同桌摸出水来了好爽的视频| 国产av在在免费线观看美女| 日本三级按摩推拿按摩| 成人国产在线视频| 午夜性伦鲁啊鲁免费视频| 精品久久久久久电影网| 2018三级网站免费观看| 青青草久久伊人| 国产欧美精品一区二区三区-老狼 国产欧美精品国产国产专区 | 欧美一区二区视频高清专区| 成人免费小视频| 亚洲国产高清在线观看视频| 久久九九免费| 父皇轻点插好疼H限| 亚洲视频一区| 青柠在线观看免费播放电影| 国产色播视频在线观看| 91成品视频| 午夜免费无码福利视频麻豆| 久久久久影视| 国产高清视频a在线大全| 影音先锋av男人资源| 日本欧美高清一区二区视频| 极品少妇粉嫩小泬啪啪AV| CHRISTMAS农村夫妻HO| 亚洲精品视频区| 麒麟色欧美影院在线播放| 精品久久久久久久国产潘金莲| AV无码九九久久| 亚洲日韩乱码人人爽人人澡人| 人人舔人人爱| 久久亚洲精品永久网站| 国产精品爽爽久久久久久竹菊| 91精品欧美一区二区三区| 亚洲va精品中文字幕| 日本边添边摸边做边爱边| 久久久久久久尹人综合网亚洲| 国产高清超清在线播放| 99视频在线国产| 在线观看日本污污ww网站|