【问题标题】:What are the set of options to pass to gcc when compiling C89 code编译 C89 代码时传递给 gcc 的选项集是什么
【发布时间】:2017-05-29 02:30:45
【问题描述】:

我知道-ansi -pedantic-errors

在我的代码中是否还有其他选项可以尽可能地进行防御?我的意思是我不想错过任何警告或任何东西。

【问题讨论】:

  • 你坚持使用 C89 是在困扰哪个版本的 GCC? -Wall -Wextra -Wmissing-prototypes -Wstrict-prototypes -Wold-style-definition -Werror 可能是一个很好的起点(但某些版本的 GCC 可能不喜欢 -Wold-style-definition,或者可能是其他选项)。但是你为什么要把你的代码拖到过时的标准上呢?它已经过了退休年龄——今年是 28 岁。
  • gcc docs 可能也有帮助
  • @JonathanLeffler:我们在之前的海报问题中遇到了这个问题。他坚持使用过时的 C 语言版本。
  • @M.M:但这引出了一个问题“实际遵循了多少标准”。如果答案是“不知道”,那么-std=c90 -pedantic 可能就是您想去的地方。如果您知道代码是按照一组更严格的规则编写的,那么您可以添加额外的选项。但是“尽可能防御”意味着他们对严格和愿意随时修改代码很感兴趣,在这种情况下,我的建议是正确的。很难给出更好的答案。看来这不是这个 OP 对这个问题的第一次攻击。看来他不一定在学习。
  • @JonathanLeffler 尽管 C89 已经过时,但它仍然是一个定义明确的标准。符合它的用途是与旧的或外来的编译器兼容。例如。您可以确定 msvc 正确编译 C89 代码。我想说暗示用途非常有限并且 OP 最好只使用 C11 是很好的,但可能有理由不这样做。

标签: c gcc c89


【解决方案1】:

如果您不想错过任何警告或任何内容,请使用-std= 开关。使用`-std=c89。 GNU 提供的链接gcc docs 包含有关可用的不同开关的信息。如果您使用任何其他编译器,请查看相应的文档。

【讨论】:

    猜你喜欢
    • 2011-01-17
    • 1970-01-01
    • 2019-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多