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语言
    +关注

    关注

    183

    文章

    7649

    浏览量

    146364
  • 函数
    +关注

    关注

    3

    文章

    4423

    浏览量

    68009
  • Ubuntu
    +关注

    关注

    5

    文章

    617

    浏览量

    33773

原文标题:C语言又搞事情,如何表示弃用的函数

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    C语言函数的返回值

    当然,C语言程序员中还有一种“行业潜规则”。如果定义的函数是个布尔函数,也即返回值显式的使用类似于 bool 关键字定义,或者函数名类似于
    发表于 08-31 10:11 3386次阅读

    C语言回调函数学习

    对指针的应用是C语言编程的精髓所在,而回调函数就是C语言里面对函数指针的高级应用。简而言之,回调
    发表于 05-27 09:44 7481次阅读

    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语言函数指针定义,指针函数函数指针的区别

     往往,我们一提到指针函数函数指针的时候,就有很多人弄不懂。下面就由小编详细为大家介绍C语言函数指针,指针
    发表于 11-16 15:18 4324次阅读

    C语言模拟实现strcmp函数

    C语言模拟实现strcmp函数
    的头像 发表于 06-29 16:51 3355次阅读
    <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 3712次阅读

    C语言函数速查手册

    c\c++语言函数速查手册
    发表于 06-30 14:48 11次下载

    C语言-函数的定义、声明、传参

    C语言函数是非常重要的知识点,一个完整的C语言程序就是由主函数和各个子
    的头像 发表于 08-14 09:57 3134次阅读

    C语言函数参数介绍

    C语言数组元素作函数实参 数组元素可以用作函数实参,不能用作形参。 C语言在用数组元素作
    的头像 发表于 03-10 14:30 3744次阅读

    c语言gets函数可以输入数字吗

    C语言中的gets函数是用来读取字符串的,而不是用来读取数字的。它会读取输入的字符直到遇到换行符或者文件结束符。因此,如果你尝试使用gets函数来读取数字,是无法准确获取数字本身的。
    的头像 发表于 11-24 10:00 2762次阅读

    使用C语言实现函数模板

      C语言能不能实现一个通用的函数,既能完成整数的相加,又能完成浮点数的相加?
    的头像 发表于 11-09 11:38 1606次阅读