自從把Ubuntu更新到24.04,經常在 man 手冊里面看到一些生面孔。
比如很多庫函數都加上了 restrict 關鍵字。
這個關鍵字我們之前講過,感興趣的話可以去主頁搜索一下。
還有一個函數,gets,他的前面加上了 deprecated,并且還有兩個嵌套的中括號,這又是幾個意思?
用過 gets 的同學都知道,這個函數早在多年前就已經被棄用,因為它不安全。
#includeint main() { char buf[32] = {0}; gets(buf); return 0; }
如果定義的數組過小,如果輸入的數據過大,很容易就造成越界,會帶來一系列的問題。
所以在代碼里面使用 gets 編譯的時候就會提示警告。
man 手冊里面看到的 deprecated 就表示這個函數被棄用了。
早在多年前,GNU就有了 __attribute__ 機制,用來修飾函數或者變量的屬性,這個我們在前面也講過。
就在最新的 C23 里面,C語言也正式把這些屬性加了進來,寫法就是我們剛才見到的兩個中括號嵌套。
目前標準里面支持的屬性有這 8 種,其他屬性,由編譯器自己決定。
比如在 GCC 里面,使用 GNU 擴展的屬性需要寫成 gnu:: 開頭。
再回到 deprecated,如果在一個函數的前面加上這個屬性,就是在提示用戶,這個函數被棄用了,最好不要用。
#include[[deprecated]]void test() { printf("this is test ... "); } int main() { test(); return 0; }
并且在編譯的時候,會以警告的形式提示。
這個屬性有助于幫助用戶在維護代碼的時候逐步淘汰舊代碼,同時又能保持現有功能的兼容性,完成平滑過渡。
-
C語言
+關注
關注
180文章
7604瀏覽量
136685 -
函數
+關注
關注
3文章
4327瀏覽量
62569 -
Ubuntu
+關注
關注
5文章
563瀏覽量
29704
原文標題:C語言又搞事情,如何表示棄用的函數
文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論