首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >哪些C99功能被视为有害或不受支持

哪些C99功能被视为有害或不受支持
EN

Stack Overflow用户
提问于 2009-12-14 12:17:51
回答 5查看 2.9K关注 0票数 18

我通常用C89编写C代码,现在C99的一些特性(如intxx_t__VA_ARGS__snprintf)非常有用,甚至是至关重要的。

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

我知道我们可以只检查我们的目标编译器支持,但这会大大缩小我们的支持范围,而且由于这是针对开源软件的,我更喜欢有更广泛的支持。

例如,我们使用Solaris (suncc)编译器和gcc,但我们可能会移走其他编译器,同时我们可以很少的努力保持兼容性。

例如,我从未在Windows上工作过,也对Windows编译器一无所知,但保持与Windows的兼容性将是一件好事。

EN

回答 5

Stack Overflow用户

发布于 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++获胜。

票数 5
EN

Stack Overflow用户

发布于 2010-02-07 10:03:25

运行时sizeof是编译器编写者的噩梦。所以我认为这是有害的。

票数 3
EN

Stack Overflow用户

发布于 2011-11-03 19:48:53

realloc(ptr, 0)没有实现符合C99的realloc,因此glibc是不可移植的。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1898890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档