ffmpeg 中的GNU语法

阅读ffmpeg源码是 发现一些函数前面加了 attribute_deprecated 属性;如:attribute_deprecated int url_fopen( AVIOContext **s, const char *url, int flags);
在libavutil/attributes.h  中有如下定义:

#ifndef attribute_deprecated
#if AV_GCC_VERSION_AT_LEAST(3,1)
#    define attribute_deprecated __attribute__((deprecated))
#else
#    define attribute_deprecated
#endif
#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 <stdlib.h>
#include <stdio.h>

__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

时间: 2024-02-25 01:00:36

ffmpeg 中的GNU语法的相关文章

sql 中 case when 语法使用方法

没有,用case when 来代替就行了. 例如,下面的语句显示中文年月 复制代码 代码如下: select getdate() as 日期,case month(getdate()) when 11 then '十一' when 12 then '十二' else substring('一二三四五六七八九十', month(getdate()),1) end+'月' as 月份 CASE 可能是 SQL 中被误用最多的关键字之一.虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法.例

Word2007中“拼写和语法”的妙用

  经常使用Word编辑文档的朋友,一定会发现,有时在输入英文或者文字的时候,在文字的下方有绿色.红色或者蓝色的波浪线,这是Word提醒你含有拼写或者语法错误,而用户可以用"拼写和语法"来检查Word中的错误. 步骤/方法: 第1步,打开Word2007文档窗口,如果看到该Word文档中包含有红色.蓝色或绿色的波浪线,说明Word文档中存在拼写或语法错误.切换到"审阅"功能区,在"校对"分组中单击"拼写和语法"按钮. 拼写或语

ASP.NET MVC 3: Razor中的@:和语法

原文 ASP.NET MVC 3: Razor中的@:和语法 [原文发表地址] ASP.NET MVC 3: Razor's @: and <text> syntax[原文发表时间] December 15, 2010 11:48 PM 这是我正在写的博文系列中的另一篇,涵盖ASP.NET MVC 3的一些新功能: ·        Razor中的新@模型关键字(10月19日) ·        Razor中的层(10月22日) ·        用Razor实现服务器端注释(11月12日)

Hive中的排序语法

ORDER BY hive中的ORDER BY语句和关系数据库中的sql语法相似.他会对查询结果做全局排序,这意味着所有的数据会传送到一个Reduce任务上,这样会导致在大数量的情况下,花费大量时间. 与数据库中 ORDER BY 的区别在于在hive.mapred.mode = strict模式下,必须指定 limit 否则执行会报错. hive> set hive.mapred.mode=strict; hive> select * from test order by id; FAILE

ffmpeg中怎么编程实现获取视频中某指定的一帧?

问题描述 ffmpeg中怎么编程实现获取视频中某指定的一帧? ffmpeg中怎么编程实现获取视频中某指定的一帧?不是通过遍历,而是直接跳到指定帧,ffmpeg中有没有有相关的函数? 解决方案 /** Seek to the keyframe at timestamp. 'timestamp' in 'stream_index'. * @param s media file handle @param stream_index If stream_index is (-1), a default

ios-提取NSDictionary中的CGFloat 语法

问题描述 提取NSDictionary中的CGFloat 语法 我想知道什么语法才能正确的将CGFloat从NSDictionary中提取出来,比如下: slider.minimumValue = [filterAttributes valueForKey:kCIAttributeSliderMin]; 解决方案 NSDictionary里存的是id类型变量,正常有点经验的程序员想往里面存CGFloat或者NSInteger这种非id类型的对象时,都会用[NSNumber numberWithF

ffmpeg中的sws_scale算法性能测试

经常用到ffmpeg中的sws_scale来进行图像缩放和格式转换,该函数可以使用各种不同算法来对图像进行处理.以前一直很懒,懒得测试和甄别应该使用哪种算法,最近的工作时间,很多时候需要等待别人.忙里偷闲,对ffmpeg的这一组函数进行了一下封装,顺便测试了一下各种算法. 简单说一下测试环境,我使用的是Dell的品牌机,i5的CPU.ffmpeg是2010年8月左右的当时最新版本编译而成,我使用的是其静态库版本. sws_scale的算法有如下这些选择. #define SWS_FAST_BIL

对ffmpeg中的sws_scale的封装类

直接使用ffmpeg中的sws_scale虽然已经不太复杂,但每次的手动初始化等操作,毕竟不够方便.我对这部分代码进行了封装.平时常见的需要处理的图像格式无非就是YUV420和RGB24.RGB32等格式,我的封装仅仅对它们进行.blog好像不能上传附件,因此我没法把ffmpeg的scale相关的静态库lib(静态库携带比动态库方便^_^)等上传了(发了一份给自己的qq邮箱留作备份了,发现这儿可以上传附件,全部源码也上传一份好了). 下面的代码,可能需要ffmpeg的相关头文件支持,我对它们进行

请教matlab中的一个语法问题,定义了一个2*2array,但下面却给它的第三行赋值

问题描述 请教matlab中的一个语法问题,定义了一个2*2array,但下面却给它的第三行赋值 lims = [Inf, -Inf; Inf, -Inf]; lims(3,:) = [res(3), res(3) * length(files_in_order)]; 解决方案 这相当于,给原矩阵lims直接增加一行