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