当前位置:  开发笔记 > 后端 > 正文

支持C99的普遍程度如何?

如何解决《支持C99的普遍程度如何?》经验,为你挑选了4个好方法。

今天编译器支持的C99标准有多普遍?据我所知,即使GCC完全支持它.这是正确的吗?

C99的哪些功能比其他功能更受支持,即我可以使用哪些功能来确定大多数编译器都能理解我?



1> KovBal..:

如果你想编写可移植的C代码,那么我建议你用C89(旧的ANSI C标准)编写.大多数编译器都支持此标准.

英特尔C编译器具有非常好的C99支持,可以生成快速的二进制文件.(谢谢0x69!)

MSVC支持一些新功能,Microsoft计划在未来版本中扩展支持.

GCC支持C99的一些新功能.他们创建了一个关于C99功能状态的表格.可能C99最有用的功能是可变长度阵列,GCC现在支持它.Clang(LLVM的C前端)支持除浮点pragma之外的大多数功能.

维基百科似乎对编译器的C99支持有一个很好的总结.


GCC 4.5最终将可变长度数组列为*Done*而不是*Broken*!

2> Michael Burr..:

有人提到英特尔编译器支持C99.还有Comeau C/C++编译器,它完全支持C99.这是我所知道的唯一.

我不使用的C99功能,因为它们不受支持包括:

可变长度数组

具有可变数量参数的宏.

我经常使用的C99功能似乎得到了很好的支持(除了Microsoft):

stdint.h

snprintf()- MS具有非标准_snprintf(),其严重限制是不总是空终止缓冲区并且不指示缓冲区应该有多大

为了解决微软的不支持问题,我使用了MinGW的公共域stdint.h(我修改了也适用于VC6)和Holger Weiss的近公共域snprintf()

Microsoft不支持但仍将在其他编译器上使用的项目,具体取决于项目包括:

混合声明和代码

内联函数

_Pragma() - 这使得pragma更加实用



3> Torsten Mare..:

对于gcc,有一个包含所有支持功能的表.似乎缺少的最大的东西是可变长度数组.大多数其他缺少的功能是库问题而不是语言功能.



4> frankster..:

IBM c编译器在作为c99调用时具有c99支持,但在作为cc或xlc调用时则不支持.


@osgx是的,这是正确的:你可以使用选项-qlanglvl = stdc99作为例子
推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有