C语言如何表示弃用的函数

描述

自从把Ubuntu更新到24.04,经常在 man 手册里面看到一些生面孔。

比如很多库函数都加上了 restrict 关键字。

函数

这个关键字我们之前讲过,感兴趣的话可以去主页搜索一下。

还有一个函数,gets,他的前面加上了 deprecated,并且还有两个嵌套的中括号,这又是几个意思?

函数


用过 gets 的同学都知道,这个函数早在多年前就已经被弃用,因为它不安全。

 

#include 


int 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;
}

 



并且在编译的时候,会以警告的形式提示。

 

函数



这个属性有助于帮助用户在维护代码的时候逐步淘汰旧代码,同时又能保持现有功能的兼容性,完成平滑过渡。

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分