gccattribute定義機(jī)制容易理解c頭文件

gccattribute定義機(jī)制容易理解c頭文件

ID:8807555

大?。?5.00 KB

頁數(shù):10頁

時間:2018-04-08

gccattribute定義機(jī)制容易理解c頭文件_第1頁
gccattribute定義機(jī)制容易理解c頭文件_第2頁
gccattribute定義機(jī)制容易理解c頭文件_第3頁
gccattribute定義機(jī)制容易理解c頭文件_第4頁
gccattribute定義機(jī)制容易理解c頭文件_第5頁
資源描述:

《gccattribute定義機(jī)制容易理解c頭文件》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、gccattribute機(jī)制GNUC的一大特色(卻不被初學(xué)者所知)就是__attribute__機(jī)制。__attribute__可以設(shè)置函數(shù)屬性(FunctionAttribute)、變量屬性(VariableAttribute)和類型屬性(TypeAttribute)。  __attribute__書寫特征是:__attribute__前后都有兩個下劃線,并切后面會緊跟一對原括弧,括弧里面是相應(yīng)的__attribute__參數(shù)?! _attribute__語法格式為:  __attribute__((attribute-list))  其位置約束為:  放于

2、聲明的尾部“;”之前。  函數(shù)屬性(FunctionAttribute)  函數(shù)屬性可以幫助開發(fā)者把一些特性添加到函數(shù)聲明中,從而可以使編譯器在錯誤檢查方面的功能更強(qiáng)大。__attribute__機(jī)制也很容易同非GNU應(yīng)用程序做到兼容之功效?! NUCC需要使用–Wall編譯器來擊活該功能,這是控制警告信息的一個很好的方式。下面介紹幾個常見的屬性參數(shù)。  __attribute__format  該__attribute__屬性可以給被聲明的函數(shù)加上類似printf或者scanf的特征,它可以使編譯器檢查函數(shù)聲明和函數(shù)實(shí)際調(diào)用參數(shù)之間的格式化字符串是否匹配。該

3、功能十分有用,尤其是處理一些很難發(fā)現(xiàn)的bug。  format的語法格式為:  format(archetype,string-index,first-to-check)  format屬性告訴編譯器,按照printf,scanf,strftime或strfmon的參數(shù)表格式規(guī)則對該函數(shù)的參數(shù)進(jìn)行檢查?!癮rchetype”指定是哪種風(fēng)格;“string-index”指定傳入函數(shù)的第幾個參數(shù)是格式化字符串;“first-to-check”指定從函數(shù)的第幾個參數(shù)開始按上述規(guī)則進(jìn)行檢查?! 【唧w使用格式如下:  __attribute__((format(print

4、f,m,n)))  __attribute__((format(scanf,m,n)))  其中參數(shù)m與n的含義為:  m:第幾個參數(shù)為格式化字符串(formatstring);  n:參數(shù)集合中的第一個,即參數(shù)“…”里的第一個參數(shù)在函數(shù)參數(shù)總數(shù)排在第幾,注意,有時函數(shù)參數(shù)里還有“隱身”的呢,后面會提到;  在使用上,__attribute__((format(printf,m,n)))是常用的,而另一種卻很少見到。下面舉例說明,其中myprint為自己定義的一個帶有可變參數(shù)的函數(shù),其功能類似于printf:  //m=1;n=2  externvoidmypr

5、int(constchar*format,...)__attribute__((format(printf,1,2)));  //m=2;n=3  externvoidmyprint(intl,constchar*format,...)__attribute__((format(printf,2,3)));  需要特別注意的是,如果myprint是一個函數(shù)的成員函數(shù),那么m和n的值可有點(diǎn)“懸乎”了,例如:  //m=3;n=4  externvoidmyprint(intl,constchar*format,...)__attribute__((format(p

6、rintf,3,4)));  其原因是,類成員函數(shù)的第一個參數(shù)實(shí)際上一個“隱身”的“this”指針。(有點(diǎn)C++基礎(chǔ)的都知道點(diǎn)this指針,不知道你在這里還知道嗎?)  這里給出測試用例:attribute.c,代碼如下:  1:  2:externvoidmyprint(constchar*format,...)__attribute__((format(printf,1,2)));  3:  4:voidtest()  5:{  6:myprint("i=%d",6);  7:myprint("i=%s",6);  8:myprint("i=%s

7、","abc");  9:myprint("%s,%d,%d",1,2);  10:}    運(yùn)行$gcc–Wall–cattribute.cattribute后,輸出結(jié)果為:    attribute.c:Infunction`test':  attribute.c:7:warning:formatargumentisnotapointer(arg2)  attribute.c:9:warning:formatargumentisnotapointer(arg2)  attribute.c:9:warning:toofewargumentsforforma

8、t    如果在attr

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。