最近看了看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的扩展,用宏来控制操作系统,编译器相关的差异

