吴忠躺衫网络科技有限公司

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

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

3天內不再提示

C語言如何表示棄用的函數

學益得智能硬件 ? 來源:學益得智能硬件 ? 2024-12-03 16:20 ? 次閱讀

自從把Ubuntu更新到24.04,經常在 man 手冊里面看到一些生面孔。

比如很多庫函數都加上了 restrict 關鍵字。

f7e18fa6-b14d-11ef-93f3-92fbcf53809c.png

這個關鍵字我們之前講過,感興趣的話可以去主頁搜索一下。

還有一個函數,gets,他的前面加上了 deprecated,并且還有兩個嵌套的中括號,這又是幾個意思?

f811c8ec-b14d-11ef-93f3-92fbcf53809c.png


用過 gets 的同學都知道,這個函數早在多年前就已經被棄用,因為它不安全。

#include 


int main()
{
    char buf[32] = {0};


    gets(buf);
        
    return 0;
}


如果定義的數組過小,如果輸入的數據過大,很容易就造成越界,會帶來一系列的問題。

所以在代碼里面使用 gets 編譯的時候就會提示警告。

f824d5ae-b14d-11ef-93f3-92fbcf53809c.png


man 手冊里面看到的 deprecated 就表示這個函數被棄用了。

早在多年前,GNU就有了 __attribute__ 機制,用來修飾函數或者變量的屬性,這個我們在前面也講過。

就在最新的 C23 里面,C語言也正式把這些屬性加了進來,寫法就是我們剛才見到的兩個中括號嵌套。

f845b04e-b14d-11ef-93f3-92fbcf53809c.png


目前標準里面支持的屬性有這 8 種,其他屬性,由編譯器自己決定。

f86ff4da-b14d-11ef-93f3-92fbcf53809c.png



比如在 GCC 里面,使用 GNU 擴展的屬性需要寫成 gnu:: 開頭。

f87cb9fe-b14d-11ef-93f3-92fbcf53809c.png



再回到 deprecated,如果在一個函數的前面加上這個屬性,就是在提示用戶,這個函數被棄用了,最好不要用。

#include 


[[deprecated]]void test()
{
    printf("this is test ...
");
}


int main()
{
    test();


    return 0;
}



并且在編譯的時候,會以警告的形式提示。

f88e2dd8-b14d-11ef-93f3-92fbcf53809c.png



這個屬性有助于幫助用戶在維護代碼的時候逐步淘汰舊代碼,同時又能保持現有功能的兼容性,完成平滑過渡。

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

    關注

    180

    文章

    7614

    瀏覽量

    137702
  • 函數
    +關注

    關注

    3

    文章

    4346

    瀏覽量

    62968
  • Ubuntu
    +關注

    關注

    5

    文章

    566

    瀏覽量

    30032

原文標題:C語言又搞事情,如何表示棄用的函數

文章出處:【微信號:學益得智能硬件,微信公眾號:學益得智能硬件】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    C語言函數的返回值

    當然,C語言程序員中還有一種“行業潛規則”。如果定義的函數是個布爾函數,也即返回值顯式的使用類似于 bool 關鍵字定義,或者函數名類似于
    發表于 08-31 10:11 ?1706次閱讀

    C語言回調函數學習

    對指針的應用是C語言編程的精髓所在,而回調函數就是C語言里面對函數指針的高級應用。簡而言之,回調
    發表于 05-27 09:44 ?7224次閱讀

    C語言函數大全(語法著色版)

    C語言函數大全,已包含絕大部分的函數。每個函數包含函數名,功能,用法,舉例,內容詳盡。希望對大家
    發表于 07-30 16:03 ?0次下載

    C語言指針函數函數指針詳細介紹

    C語言指針函數函數指針詳細介紹。。。。。。。
    發表于 03-04 15:27 ?5次下載

    C語言標準庫函數

    C語言標準庫函數,使用C語言編程時,常用到的函數
    發表于 05-11 16:41 ?0次下載

    C語言scanf函數詳解

    C語言scanf函數詳細解釋
    發表于 05-15 09:20 ?6次下載

    基于C語言標準庫函數

    基于C語言標準庫函數
    發表于 10-23 17:41 ?11次下載
    基于<b class='flag-5'>C</b><b class='flag-5'>語言</b>標準庫<b class='flag-5'>函數</b>

    C語言模擬實現strcmp函數

    C語言模擬實現strcmp函數
    的頭像 發表于 06-29 16:51 ?2710次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>模擬實現strcmp<b class='flag-5'>函數</b>

    C語言函數返回1和返回0到底哪個好?

    可能會比較復雜,不同的輸入,常常產生不同的輸出結果。 1C語言函數的返回值 C語言函數可以通過返
    的頭像 發表于 04-22 09:47 ?2755次閱讀

    C語言函數速查手冊

    c\c++語言函數速查手冊
    發表于 06-30 14:48 ?11次下載

    C語言-函數的定義、聲明、傳參

    C語言函數是非常重要的知識點,一個完整的C語言程序就是由主函數和各個子
    的頭像 發表于 08-14 09:57 ?2005次閱讀

    講解下C語言的內聯函數

    內聯函數C語言C++中借鑒過來的,適當的使用內聯函數可以提高程序的執行效率。
    的頭像 發表于 02-16 09:15 ?1552次閱讀

    C語言函數參數介紹

    C語言數組元素作函數實參 數組元素可以用作函數實參,不能用作形參。 C語言在用數組元素作
    的頭像 發表于 03-10 14:30 ?2482次閱讀

    c語言gets函數可以輸入數字嗎

    C語言中的gets函數是用來讀取字符串的,而不是用來讀取數字的。它會讀取輸入的字符直到遇到換行符或者文件結束符。因此,如果你嘗試使用gets函數來讀取數字,是無法準確獲取數字本身的。
    的頭像 發表于 11-24 10:00 ?1659次閱讀

    使用C語言實現函數模板

      C語言能不能實現一個通用的函數,既能完成整數的相加,又能完成浮點數的相加?
    的頭像 發表于 11-09 11:38 ?476次閱讀
    百家乐官网试玩平台| 找查百家乐玩法技巧| 宝马会百家乐官网的玩法技巧和规则| 百家乐官网现金网平台排行| 百家乐官网的嬴钱法| 星河百家乐的玩法技巧和规则 | 太阳城音乐广场| 全讯网新2代理| 大发888注册送50| 香港六合彩全年资料| 六合彩网| 百家乐详解| 大发888娱乐场下载 zhldu| 百家乐官网赌场策略论坛| 百家乐官网扎金花斗地主| 皇冠百家乐官网赢钱皇冠| 线上百家乐官网信誉| 百家乐官网最佳打| 自贡百家乐官网赌| 百家乐平台哪个比较安全| 百家乐官网都是什么人玩的| 百家乐官网必胜法技巧| 百家乐实战玩法| 百家乐稳中一注法| 百家乐澳门百家乐澳门赌场| 大世界百家乐娱乐城| 百家乐的玩法技巧和规则| 百家乐真人游戏| 線上投注| 优博百家乐官网现金网| 百家乐官网7杀6| 百家乐赢钱lv| 百家乐完美一对| 老虎机加分器| 彭泽县| 澳门百家乐官网视频| 百家乐官网用品| 金都百家乐的玩法技巧和规则| 大发888网站是多少呢| 大发888怎么开户| 滨海湾百家乐官网娱乐城|