ffmpeg 中的GNU语法

原创 2016年08月31日 12:11:11
    阅读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) |
相关热门文章
给主人留下些什么吧!~~
评论热议
版权声明:本文为博主原创文章,转载请注明出处。

Linux下的AT&amp;T语法(即GNU as 汇编语法)入门

http://blogold.chinaunix.net/u3/105209/showart_2085748.html学习这么长时间,一直在C语言这一层面上钻研和打拼,日积月累,很多关于C的疑惑在书本...
  • ztguang
  • ztguang
  • 2016年03月30日 10:18
  • 2076

GNU风格 ARM 汇编指令语法总结

汇编源程序一般用于系统最基本的初始化:初始化堆栈指针、设置页表、操作 ARM的协处理器等。这些初始化工作完成后就可以跳转到C代码main函数中执行。 1、  GNU汇编语言语句格式 ...
  • yanbixing123
  • yanbixing123
  • 2016年08月24日 15:28
  • 1409

自己动手写操作系统之汇编基础——as86汇编和GNU as汇编简介与对比

概述:在自己动手写操作系统的时候,往往在开始阶段对汇编语言感到困难。汇编语言之所以会感觉困难,往往是既是因为偏底层,而我们平时接触的多为高级语言;另一方面是由于其平台相关性:C语言是通用的,但汇编不是...
  • trochiluses
  • trochiluses
  • 2013年05月15日 10:18
  • 3385

ARM GNU 汇编伪指令简介

Linux下ARM汇编语法尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作 ARM的协处理器等。初始化完成后就可以跳转到C代码执行。...
  • Ultraman_hs
  • Ultraman_hs
  • 2016年12月07日 10:57
  • 407

FFmpeg基本语法

FFmpeg FFmpeg 基本用法 本课要解决的问题 1.FFmpeg的转码流程是什么? 2.常见的视频格式包含哪些内容吗? 3.如何把这些内容从视频文件中抽取出来? ...
  • u014702999
  • u014702999
  • 2016年08月31日 11:19
  • 521

Linux 汇编语言(GNU GAS汇编)区别

二、Linux 汇编语法格式 绝大多数 Linux 程序员以前只接触过DOS/Windows 下的汇编语言,这些汇编代码都是 Intel 风格的。但在 Unix 和 Linux 系统中,更多采用的...
  • zhaofuguang
  • zhaofuguang
  • 2014年01月13日 08:31
  • 1084

GNU for x86汇编语法

作者:冯老师,华清远见嵌入式学院讲师。 译自“Using as The GNU Assembler January 1994”。 参考Tornado随机文档“GNU Toolkit User's ...
  • farsight2009
  • farsight2009
  • 2014年06月09日 15:59
  • 638

GNU ARM汇编语法

汇编源程序一般用于系统最基本的初始化:初始化堆栈指针、设置页表、操作 ARM的协处理器等。这些初始化工作完成后就可以跳转到C代码main函数中执行。       1、GNU汇编语言语句格式 任何Lin...
  • wangkai_123456
  • wangkai_123456
  • 2014年03月14日 21:15
  • 1436

GNU for x86汇编语法

http://blog.chinaunix.net/uid-7874115-id-2550433.html vxfree 译自“Using as The GNU Assembler Jan...
  • fu_shuwu
  • fu_shuwu
  • 2015年05月16日 14:38
  • 790

arm gnu 汇编语法

尽管在Linux下使用C或C++编写程序很方便,但汇编源程序用于系统最基本的初始化,如初始化堆栈指针、设置页表、操作ARM的协处理器等。初始化完成后就可以跳转到C代码执行。需要注意的是,GNU的汇编器...
  • kangear
  • kangear
  • 2013年04月07日 19:00
  • 1391
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ffmpeg 中的GNU语法
举报原因:
原因补充:

(最多只允许输入30个字)