【问题标题】:Do I even need `-pedantic` if I specify the standard to ANSI C with `-std=c89`?如果我使用 `-std=c89` 指定 ANSI C 的标准,我什至需要`-pedantic` 吗?
【发布时间】:2020-02-16 11:20:03
【问题描述】:

如果我使用-std=c89 将标准指定为ANSI C,我的代码将不会运行,直到我执行某些更改以使其符合标准。如果我已经设置了-std=c89 标志,那么此时我还需要-pedantic 吗?


顺便说一句,这个想法是编写尽可能独立于平台的 C 代码。我已经在使用-pedantic,因为我知道它会使编译器更加严格。但是,明确选择 ANSI C 标准也是有意义的。出于某种原因,我认为这会使 -pedantic 变得多余,因为切换到 ANSI C 本身会产生许多错误并且看起来“足够严格”。

【问题讨论】:

  • 问题不清楚。需要它做什么?如果目标只是让您的代码编译,您是否需要-pedantic?不。如果您的目标是帮助捕获更多错误,您是否需要-pedantic?是的。

标签: c gcc c89 compiler-flags ansi-c


【解决方案1】:

不,即使 -pedantic-std=c89 都可能单独导致您的代码无法编译,但它们不会做同样的事情:

  • -std=c89 将告诉编译器使用哪个 ISO 标准(在这种情况下,ANSI C 也称为 C89 或 C90)
  • -pedantic 将告诉编译器应执行所选标准的严格程度

您还可以在手册页中找到以下有用的提示。 -std=c89 等价于 -ansi 其中man gcc 表示:

-ansi 选项不会导致非 ISO 程序被无故拒绝。为此,除了-ansi,还需要-pedantic

【讨论】:

  • 您可能会进一步提到-ansi-std=c* 的目的是确保符合标准的程序正确编译(例如,没有可能与有效标识符冲突的非标准关键字由应用程序使用)并且在默认配置文件中没有偏离标准指定的行为(例如,inline 关键字没有“GNU 内联”替代含义,或者没有草率地处理过多的浮点精度)。他们不会无缘无故阻止不合格的程序源被接受(而-pedantic-errors 会阻止)。
  • @R..:我认为您的意思是不符合严格。可以肯定的是,“符合标准的 C 程序”的定义本质上是没有意义的,但标准的作者已经明确表示他们不希望贬低并非碰巧可移植的有用程序。
猜你喜欢
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-15
  • 2016-06-29
  • 2023-03-08
  • 2015-01-04
  • 2016-01-10
相关资源
最近更新 更多