ffmpeg 中的GNU语法
    阅读ffmpeg源码是 发现一些函数前面加了 attribute_deprecated 属性;如:attribute_deprecated int url_fopen( AVIOContext **s, const char *url, int flags);
在libavutil/attributes.h  中有如下定义:
   83 #ifndef attribute_deprecated
   84 #if AV_GCC_VERSION_AT_LEAST(3,1)
   85 #    define attribute_deprecated __attribute__((deprecated))
   86 #else
   87 #    define attribute_deprecated
   88 #endif
   89 #endif

__attribute__ 语法为GNU C 的特性,__attribute__可以设置函数属性(Function Attribute)、变量属性(Variable Attribute)和类型属性(Type Attribute)。
__attribute__语法格式为:__attribute__ ((attribute))
需要注意的是: 使用__attribute__的时候,只能函数的声明处使用__attribute__,并且在“;“前。

在开发一些库的时候,API的接口可能会过时,为了提醒开发者这个函数已经过时。只要函数被使用,在编译是都会产生警告,警告信息中包含过时接口的名称及代码中的引用位置。
下面是GNU 网站(http://gcc.gnu.org/onlinedocs/gcc-4.0.0/gcc/Function-Attributes.html)上对这个属性的解释:
deprecated
The deprecated attribute results in a warning if the function is used anywhere in the source file. This is useful when identifying functions that are expected to be removed in a future version of a program. The warning also includes the location of the declaration of the deprecated function, to enable users to easily find further information about why the function is deprecated, or what they should do instead. Note that the warnings only occurs for uses:
          int old_fn () __attribute__ ((deprecated));
          int old_fn ();
          int (*fn_ptr)() = old_fn;
     
results in a warning on line 3 but not line 2.
下面是一个列子:
root@wang:/work/wanghuan/gnu# cat gnu.c 
#include
#include

__attribute__((deprecated)) void attribute();
void attribute()
{
printf("GNU attribute \n");
}

int main()
{
attribute();
return 0;
}
root@wang:/work/wanghuan/gnu# gcc gnu.c -o gnu 
gnu.c: In function ‘main’:
gnu.c:12: warning: ‘attribute’ is deprecated (declared at gnu.c:5)     //编译警告
root@wang:/work/wanghuan/gnu# ./gnu 
GNU attribute 

关于__attribute__属性,有多种类型,由于ARM编译器支持GNU语法,在ARM的网站http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348bc/Caccahah.html 有这些特性的详细介绍。
<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(2127) | 评论(0) | 转发(2) |
给主人留下些什么吧!~~
评论热议
阅读更多
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/chituhuan/article/details/52383684
个人分类: LINUX
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

ffmpeg 中的GNU语法

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭