C99是否与C89向后兼容?

kar*_*kar 15 c c99

我习惯了旧式C和最近才开始探索c99功能.我只有一个问题:如果我在我的程序中使用c99,c99标志gcc并将其与之前的c99库链接,我的程序是否会成功编译?

那么,我应该坚持旧的C89还是进化?

D.S*_*ley 9

我相信他们在这方面是相容的.只要您正在编译的内容不会踩到任何新的好东西.例如,如果旧代码包含,enum bool { false, true };则您遇到麻烦.作为一个类似的恐龙,我正在慢慢拥抱C99的美妙新世界.毕竟,它现在已经潜伏了大约10年;)

  • 实际上,只要你不包含`<stdbool.h>`,就可以在C99代码中自由使用标识符`bool`.C99将`_Bool`,`_True`和`_False`关键字定义为语言的一部分,标题`<stdbool>`将它们别名为`bool`,`true`和`false`. (8认同)

pax*_*blo 8

你应该进化.谢谢收听 :-)

实际上,我会扩展它.

你是对的,C99已经存在了很长一段时间.您应该(在我看来)将该标准用于遗留代码以外的任何其他内容(您只修复错误而不是添加新功能).遗留代码可能不值得,但您应该(与所有业务决策一样)进行自己的成本/收益分析.

我已经确保我的新代码与C1x兼容了 - 虽然我还没有使用任何新功能,但我确保它不会破坏.

至于要注意什么代码,标准的作者非常重视向后兼容性.他们的工作不是设计一种新语言,而是编纂现有的做法.

他们目前所处的阶段使他们在更新语言方面有更多的自由,但他们仍然遵循希波克拉底誓言的输出:"首先,不要伤害".

通常,如果您的代码被新标准破坏,编译器将被迫告诉您.因此,简单地编译代码库将是一个很好的开始.但是,如果您阅读C99基本原理文档,您会看到"安静更改"这一短语 - 这是您需要注意的.

这些是编译器中的行为变化,您不需要了解它们,如果您的应用程序开始表现奇怪,可能会引起很多焦虑和咬牙切齿.不要担心"c89的安静变化" - 如果它们是一个问题,你就会被它们咬伤.

顺便说一下,该文件是一本很好的读物,可以理解为什么实际标准会说出它所说的内容.