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

分享到:
相关推荐
在GCC扩展中,你可以用typeof来创建不需要预先知道参数类型的宏。例如,定义min宏时,可以先定义与x和y同类型的局部变量,然后进行比较,这样在宏展开时可以确保类型正确,而无需预先知道x和y的具体类型。 3. **零...
GCC 扩展之 typeof 运算符的用法 GCC 编译器扩展的 typeof 运算符是 GCC 编译器中一种强大的扩展,用于获取变量或表达式的数据类型。本文将详细介绍 typeof 运算符的用法和特点。 typeof 运算符的定义 typeof ...
### GCC扩展用法详解 #### 引言 GCC(GNU Compiler Collection)作为一款跨平台的C编译器,因其强大的功能被广泛应用于多种操作系统及软件开发中,尤其是在Linux内核的开发过程中扮演着不可替代的角色。本文将详细...
GCC 也支持许多扩展,例如,-Wall 选项可以启用所有警告信息,而-std=gnu99 选项可以指定 C 语言标准。 在 Linux 系统中,GCC 是编译 C 和 C++ 语言的不二之选。它提供了一个灵活的编译环境,能够满足各种开发需求...
GCC 的__attribute__扩展功能 本文将详细介绍 GCC 的__attribute__扩展功能,__attribute__是 GNU C 的一大特色,它可以设置函数属性、变量属性和类型属性。__attribute__书写特征是:__attribute__前后都有两个...
对于C++,GCC也有其特定的实现定义行为,以及一系列扩展特性,如模板元编程、内联汇编等。在“C++ Implementation-Defined Behavior”和“Extensions to the C++ Language”章节,开发者可以学习到如何利用这些特性...
6. **语言特性**:对于C和C++,GCC手册会涵盖语言的标准特性,以及GCC特有的扩展,如C的内联函数、静态链表、弱符号等,C++的模板元编程、异常处理等。 7. **错误与警告**:GCC在编译过程中会报告错误和警告,手册...
### 六、GCC扩展 GCC不仅遵循标准,还提供了一些超出标准的扩展功能,以增强编程灵活性: - **C语言家族的扩展**:如内联函数、属性宏等,这些功能在某些场景下可以提供更好的性能或便利性。 - **C++语言的扩展**:...
然而,有时开发者可能会选择使用GCC编译器,因为它开源、免费且跨平台。本篇将详细介绍如何在Keil5中配置GCC编译器来编译STM32工程。 首先,你需要下载GCC编译工具链,例如基于ARM Cortex-M的GNU Arm Embedded ...
`gcc`最初是为了C语言设计的,后来扩展到了支持C++、Objective-C、Fortran、Ada、Go等多种语言。这使得`gcc`成为多语言开发的重要工具。 3. **编译过程:** - **预处理**:预处理器(cpp)处理#include指令,展开...
GCC是用于C语言的编译器,而G++是GCC的一个扩展,专门用于C++。它们将源代码转换成可执行程序,使得计算机能够理解和运行这些程序。C++是一种强大的、面向对象的编程语言,广泛应用于系统软件、应用软件、游戏开发、...
1. **定义与原理**:GCC是基于经典互相关函数的一种扩展,它可以捕捉非线性、非高斯噪声下的相位关系。GCC通过计算两个信号的傅里叶变换的乘积再进行逆傅里叶变换来得到,这使得GCC能够有效处理非高斯噪声,而传统的...
**GCC扩展** GCC还提供了一些非标准但非常实用的扩展,如内联汇编、函数属性、弱符号等。这些扩展可以帮助程序员更好地控制程序的行为,提高性能或解决特定问题。 **多语言支持** 除了C和C++,GCC还包括其他语言...
五、C语言家族的GCC扩展 GCC对C语言进行了多项扩展,以增强其表达能力和编程效率。这些扩展包括但不限于: 1. **内联函数**:允许将函数调用替换为函数体的直接嵌入,减少函数调用开销。 2. **属性声明**:提供了...
GCC在C++语言方面也提供了一些额外的扩展,包括: - **模板元编程支持**:增强C++的模板功能,方便进行元编程。 - **异常处理改进**:提供了更灵活的异常处理机制。 - **内存模型优化**:改进了C++中的内存模型,...
**GCC扩展和插件** GCC提供了丰富的编译器扩展,如内联汇编、属性标记等。手册会讨论如何利用这些特性编写更高效或特定平台的代码。同时,GCC还支持插件开发,可以定制编译过程。 **总结** 总的来说,这份GCC中文...
3. **开发工具包**:为了完整安装GCC,还需要开发工具包,例如binutils(包含汇编、链接器和调试工具)、GMP(GNU Multiple Precision Arithmetic Library)、MPFR(...,它们为GCC提供扩展功能和高精度计算支持...
这个“GCC.CHM”文件是一个关于GCC的帮助文档,提供了全面的指南和参考资料,帮助用户理解和使用GCC进行编译和构建程序。 **CHM文件** 是“Microsoft Compiled HTML Help”文件的缩写,是一种包含HTML页面和相关...
GCC是基于传统的互相关函数的扩展,增加了对信号处理中各种复杂情况的适应性。 首先,我们要理解“互相关”的概念。互相关函数是衡量两个信号在不同时间偏移下相似程度的统计方法。在简单的情况下,如果一个信号A...
广义互相关是一种扩展了传统互相关的概念,可以用于估计两个非平稳信号之间的相位关系或时延。GCC通常采用Priestley-Chiu算法,该算法通过自相关函数的平方模计算,可以处理具有不同功率谱密度的信号,从而提高时延...