如果經常看Linux源碼,一定會見過 attribute 屬性,他在 Linux 里面出現(xiàn)的很多。
attribute 是 gcc 的擴展功能,它不屬于標準C語言。
使用 attribute 可以修飾變量、函數或者數據類型的屬性,屬性有很多,有些確實很有用。
找了幾個可以修飾函數的屬性,供大家參考下。
如果希望函數可以在 main 函數前面執(zhí)行,可以用 constructor 屬性,就是構造的意思。
如果希望函數可以在 main 函數之后執(zhí)行,可以用 destrucotr 屬性,有點析構的意思。
網上有些介紹使用這兩個屬性來模擬 C++ 的構造函數和析構函數,說實話,這比 C++ 里面的構造和析構差遠了,用它來給程序做些初始化、回收的操作,還是可以的。
第二個,nonnull。
寫函數的時候,我們經常對函數做入參判斷,比如防止傳進來的參數是空指針,導致程序下面出現(xiàn)異常。
使用 nonnull 屬性,可以讓編譯器來判斷。如果傳進來的參數是 NULL,編譯的時候會提示警告,非常的人性化。
第三個,deprecated。
如果想把某個函數廢棄掉,比如在項目的后續(xù)版本中不再使用,可以使用 deprecated 屬性,加上這個屬性,如果你還是使用這個函數,編譯就會提示警告。
比如常見的 gets 函數,如果一下子把它從標準庫中刪掉,對以前的程序不夠友好,所以只能提醒。
第四個,noreturn。
對于不會返回的函數,可以使用 noreturn 屬性。注意,返回值是 void 類型和函數不返回是兩碼事,這樣的代碼編譯會提示警告。
如果在函數內部加上死循環(huán)或者退出,這樣的函數才屬于不返回。
第五個,weak,用于定義弱函數。
比如在一個文件中定義了弱函數,另一個文件完全可以重新再定義一遍,并且編譯器會自動鏈接到用戶定義的新函數上。
weak 屬性在 STM32 上面出現(xiàn)的很多,比如中斷函數等等。
gcc 擴展的屬性很多,打開 gcc 文檔,粗略的估算了一下,可能有百來個。
可能是C語言也發(fā)現(xiàn)了這些屬性好用,在最新的C23標準里面,也加入了屬性這個概念,不過用法很奇葩,使用兩個嵌套的中括號,而且目前支持的屬性也比較少。
編譯器一直都是走在標準的前面,也許在接下來的某個C語言標準中,會有更多的 gcc 屬性加入到C語言中。
-
Linux
+關注
關注
87文章
11459瀏覽量
212787 -
GCC
+關注
關注
0文章
109瀏覽量
25236
原文標題:gcc的attribute屬性,確實值得學習
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發(fā)布評論請先 登錄
BSP36 gcc_11.3.0編譯錯誤的原因?怎么解決?
S32K312無法使用int_sram_shareable SRAM存儲數據怎么解決?
ubuntu24.04上安裝gcc工具鏈出現(xiàn)報錯怎么解決?
運行230-yolov8優(yōu)化筆記本示例時遇到ops.scale_segments問題怎么解決?
深入探索:晶圓級封裝Bump工藝的關鍵點

Meta組建四大專研小組,深入探索DeepSeek模型
全球計算聯(lián)盟GCC成立,安謀科技牽頭編寫白皮書發(fā)布

Chart FX-使用API傳輸數據 使用Value屬性傳輸數據

常用編輯器之GCC編譯器
錫焊原理解析:深入理解電子產品制造的核心工藝

評論