C99标准有什么意义?

时间:2010-11-21 23:36:17

标签: c c99

C99为该语言添加了一些有用的功能,但我发现很难推荐任何依赖于C99的练习。这是因为C99语言的实际实现很少(任何?)。当然,在一些编译器中支持有限,但没有人愿意花时间编写C代码只是为了让它不可移植。

鉴于该标准是在10年前编写和定稿的,现在令人沮丧。另外,我不时听到有关C1x的讨论,我想知道为什么有人会采取措施修改语言,因为当前版本的语言还没有实现。

所以我的问题是,正如乔今天的C程序员那样,w.r.t是有用的。我的C99标准(如果有的话)?

6 个答案:

答案 0 :(得分:14)

C99带来的功能确实使C语言编程更容易,更安全:

  • 指定的初始化程序
  • 复合文字
  • for - 范围变量
  • 固定宽度整数类型

语言也更具表现力

  • variadic macros
  • inline函数

在我的linux机器上,我有四个支持C99的编译器达到了令人满意的程度,使其可以在每日基础上使用:gccclangopenccicc

前两个是开源编译器,其中clang试图与gcc代码兼容(意味着C99支持大致相同)。

后两者来自两个主要的CPU生产商并且是商业性的,但对非商业用户有慷慨的许可政策。他们的C99有点少,特别是他们对inline的支持似乎与标准不完全一致。

答案 1 :(得分:9)

MSVC不会,也不会支持C99。但微软几乎没有动力更新他们的C编译器。这并不是说他们会失去太多的业务。

但是有很多编译器支持C99。

http://en.wikipedia.org/wiki/C99#Implementations

关于gcc:

http://gcc.gnu.org/c99status.html

你是对的,也许C99对于图书馆代码没有用(并且可能永远不会没有微软的支持),但是如果你正在从事内部或个人项目,你可以选择编译器和工具,那么可移植性不是什么大问题。

答案 2 :(得分:7)

关于C1x,我认为值得注意的是,标准委员会非常清楚C99尚未被广泛采用,并且不想重复同样的错误(或使情况更糟)。来自C1x charter

  

与C9X不同,伦敦会议的共识是应该没有   发明,无一例外。只有具有历史和共同点的那些功能   应考虑商业实施的使用。还必须要注意   以标准和商业化的方式标准化这些功能   实现兼容。

  

原始标准得到了用户和供应商的积极响应   社区。但是,C99并没有被广泛接受。

答案 3 :(得分:4)

如果您没有被锁定在不支持C99的环境中(最显着的是嵌入式系统),您应该使用C99。

是的,如果你知道你的库将被使用MSVC的人使用,你不能在接口中使用C99功能,但是没有理由不在实现中使用C99(除了库功能)当然是依赖)。

原始答案:“呃?哪些编译器不支持C99?当你从编译器转到工具时,C99实际上比C89更受支持。”

答案 4 :(得分:2)

如果您关心表现,则无法绕过restrict

答案 5 :(得分:1)

FreeBSD现在使用Clang进行内核编译,而且非常支持C99。