我通常用C89编写C代码,现在C99的一些特性(如intxx_t
、__VA_ARGS__
或snprintf
)非常有用,甚至是至关重要的。
在我从C89到C99的更多需求之前,我想知道哪些C99功能得到了广泛支持,哪些功能没有得到广泛支持,甚至被认为是有害的。
我知道我们可以只检查我们的目标编译器支持,但这会大大缩小我们的支持范围,而且由于这是针对开源软件的,我更喜欢有更广泛的支持。
例如,我们使用Solaris (suncc)编译器和gcc,但我们可能会移走其他编译器,同时我们可以很少的努力保持兼容性。
例如,我从未在Windows上工作过,也对Windows编译器一无所知,但保持与Windows的兼容性将是一件好事。
发布于 2009-12-14 12:36:11
嗯,不管你的目标是哪种桌面操作系统,gcc基本上都会成为gcc。
Visual C++主要是一个C++编译器,它与C99规范的关系不大。H声明了你最喜欢的intxx_t宏。__VA_ARGS__
是可用的。_Bool、_Complex和_Pragma没有在Microsoft Visual C++编译器上实现。我非常确定printf/scanf中的%a字段还没有实现,尽管VC2010可能会处理它们。snprintf是存在的,但有一个前导下划线和略微不同的语义。
简而言之: VC++越有可能支持C99特性,就越容易在不更改编译器语法或重新填充标准库的情况下实现它。如果C99和C++之间存在冲突,可以期待C++获胜。
发布于 2010-02-07 10:03:25
运行时sizeof是编译器编写者的噩梦。所以我认为这是有害的。
发布于 2011-11-03 19:48:53
realloc(ptr, 0)
没有实现符合C99的realloc
,因此glibc是不可移植的。
https://stackoverflow.com/questions/1898890
复制相似问题