C99标准有什么意义?

Bil*_*eal 14 c c99

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

考虑到标准是在10年前编写并最终确定的,这是令人沮丧的.另外,我不时听到有关C1x的讨论,我想知道为什么有人会采取措施修改语言,因为当前版本的语言还没有实现.

所以我的问题是,作为乔今天的C程序员,我对C99标准有什么用处(如果有的话)?

Jen*_*edt 14

C99带来的功能真正使C语言编程更容易,更安全错误:

  • 指定的初始化者
  • 复合文字
  • for-scope变量
  • 固定宽度整数类型

这种语言也更具表现力

  • 可变宏
  • inline 功能

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

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

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


Mat*_*hew 9

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

但是有很多编译器都支持C99.

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

关于gcc:

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

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

  • @Billy嗯,没有人在争论MSVC不支持C99的事实.如果这是你想听到的,你应该重新提出问题. (4认同)
  • @Billy每当你没有被锁定在不支持C99的环境中时(尤其是嵌入式系统),你应该使用C99.是的,如果您知道您的库将被使用MSVC的人使用,您不能在接口中使用C99功能,但没有理由不在实现中使用C99(当然除了库功能依赖性之外) ). (3认同)
  • +1答案实际上回答了我的问题,而不是与我争论. (2认同)
  • 一旦新的C++标准正式合并其中许多,MS将支持C99功能.他们不关心C,但他们不想在C++世界中落后. (2认同)
  • @R,MSVC在编译C代码时是否支持混合声明和代码?它不是我最后一次使用它(已经有一段时间了)尽管它是C++中允许的东西.我的一个大问题:微软是否真的声称他们会在C编译器中添加重叠功能,还是只是假设? (2认同)

jam*_*lin 7

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

与C9X不同,伦敦会议的共识是没有任何发明,毫无例外.只应考虑那些具有历史并且通过商业实现共同使用的功能.此外,必须注意以一种使标准和商业实现兼容的方式标准化这些功能.

和:

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

  • @R ..:如果你指的是字符串函数的各种"安全"版本,我认为它们是一件好事.(或者他们可以选择`strlcpy`和`strlcat`;我不在乎.)根据定义,发明任何扩展"破坏可移植性",但将一个纳入标准的关键是解决这个问题.此外,如果这意味着微软可能真的想加入C1x,那就太好了. (5认同)
  • 当我们考虑采用所有那些无用的MS函数时,我很难认真对待这些语句,这些函数是为了破坏C和可移植性而创建的 - 这是其他人不想支持的功能. (3认同)