关于gcc的扩展

本文探讨了FFmpeg在Visual C++环境下移植遇到的问题,包括GCC特定的C99特性、AT&T汇编语法及VC不支持的结构体初始化等,并提出了一些改进措施。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      最近看了看ffmpeg的代码,发现竞然没有vc的工程,网上搜了搜发现大家都说这个不能移到vc上面来,

我想主要有几个原因:

  1,gcc的扩展,C99

        2,几个vc没有的头文件

        3,AT&T的汇编

        这个工程里面用到了不少VC不支持的

  1,结构体赋值

        比有有一个结构

struct test

{

int a;

int b;

};

可以这样赋值:

test  m = (test){1,2};

呵呵,感觉好像C++的构造函数一样

2,结构体初使化可以按照名字进行初使化:

test m ={.a = 1,.b=2};

这个感觉还是不错,可就是不兼容呀

3,还有一个C99的,数组大小可以按变量分配大小

int left_block[i];  //i是个变量

这个的实现听说也是用_alloc实现的

不知道为啥这玩意也能成为标准,也就是能少写一点字吧,细节就这样给隐藏了起来

由于这个,我专门写了一个正则表达式来替换这玩意.

(.*) (.*)\[(.*)\]; //查找
\1 *\2=_alloc(sizeof(\1)*(\3));  //换成的样子
适用于Notepad++

整个代码里面还有不少其他的问题:

如align这些东西.

总的感觉,写这个东西的人,就是一些gnu的fans,不会考虑到除了gcc的编译器的需求.

呵呵,其实都是不会写源代码兼容,平台独立的源代码.

好的代码,到底应该是怎么样的呢

一个新的开源工程到底是怎么样的呢

能在独立于平台,能独立于编译器

其实能做到这两点的开源工程,还是不少的,wxWindow,Boost,xvid这些都可以.

CMake,bakefile这两个工具都能帮助这些工程建构者实现生成makefile,工程文件这些东西,

但是我们最重要的还是实现平台,编译器兼容的源代码.

这方面xvid做是不错,同样是视频方面的编码库,同样用到mmx指令集,ffmpeg的代码里面就到处是gcc的扩展,gcc的内嵌汇编

xvid采用mmx相关的操作全部用*.asm来实现,用nasm来编译,最近链接这些.o文件,.c文件没有gcc的扩展,用宏来控制操作系统,编译器相关的差异

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值