自从把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; }
并且在编译的时候,会以警告的形式提示。

这个属性有助于帮助用户在维护代码的时候逐步淘汰旧代码,同时又能保持现有功能的兼容性,完成平滑过渡。
全部0条评论
快来发表一下你的评论吧 !