我通常会写C码在C89,现在的一些特点C99(喜欢 intxx_t__VA_ARGS__snprintf)是非常有用的,甚至可以至关重要的。

之前我更多我要求从C89到C99我想知道它的C99功能的广泛支持,而哪些被没有得到广泛的支持,甚至被认为是有害的。

我知道我们可能只是检查我们的目标编译器支撑,但是这将缩小我们支持很多,因为这是对开放源码软件,我会更喜欢有一个更广泛的支持。

例如,我们使用Solaris(suncc)编译器和海湾合作委员会,但可能还有其他编译器,我们就会搬出去的方式,同时我们可以保持兼容性,有非常小的努力。

例如,我从来不曾在Windows我也不知道任何有关Windows编译器,但这将是很好的保持Windows的兼容性。

有帮助吗?

解决方案

一些C99的特点是可选择的,所以他们缺乏的不是技术上不符.我不会区分如下。

  • 嗯,赢得没有 <stdint.h>, 虽然没有 开放源代码版本的stdint.h用于Microsoft.即使在该文件是实现的,许多个别种类缺失。

  • 复杂的和虚构的支助往往是缺失或损坏。

  • 扩展的标识和广泛的人物可以问点。

看看 这个列表的C99特征问题在海湾合作委员会.

其他提示

goto仍然认为有害


不知何故,我已收集的 4 向下票。我提出上面的语句添加轻率,并且是只有30%的认真态度背后的概念。

我期待下投票是从年轻人谁不明白的编程语言的历史。不每一个 goto恶,只要-与100%相比未掺杂面条代码我已在(百万FORTRAN 66的行) - 它是合理的生产性来替换具有结构化语句许多goto语句工作(forwhiledo .. whileswitch)越好。但有时goto只是罚款时,它避免了复杂性,如额外的标志变量来打破多重嵌套的循环。

好了,GCC基本上会不管你的目标,其桌面操作系统的被gcc的。

视觉C ++,的主要是C ++编译器,是不是很关心C99规格。 stdint.h不声明自己喜欢的intxx_t宏。 __VA_ARGS__可用。 _Bool,_Complex和_Pragma不会对微软的Visual C ++编译器实现的。我敢肯定%在printf中/ scanf的一个领域都没有得到落实,虽然也许VC2010处理它们。的snprintf存在,但有一个前导下划线和稍有不同的语义。

短的答案:在“更容易”一个C99的特征是不改变编译的语法或更换水管的标准库来实现,就越有可能VC ++是支持它。如果有++ C99和C之间的冲突,希望C ++取胜。

运行的sizeof是编译器的作家的梦魇。所以,我认为是有害的。

glibc不实现C99-符合realloc,所以realloc(ptr, 0)是不可移植的。

http://sourceware.org/bugzilla/show_bug.cgi?id=12547

restrict成为C99关键字。这是对用户的命名空间中实现攻城掠地。如果您有包含单词restrict有效的C89程序,你必须改变你的程序,使之与C99工作。换句话说:没有向后兼容性。如果他们要打破向后兼容性,它们应该具有除去gets从标准第一

<tgmath.h>类型通用的数学函数不一定广泛实施,但它们似乎是在MacOS X 10.6.2设有GCC 4.2.1。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top