0

如果我使用 gcc -std=c17,会-Wpedantic为 c17 发出警告吗?这和 ISO C 一样吗?

4

2 回答 2

1

是的,通常-std=cxx选择要遵循的 C 标准,并且有点类似于默认-std=gnuxx设置,除了后者启用各种语言扩展。基本上,此选项会选择可用的语言功能,但不会告诉编译器对其严格要求。

-Wpedantic-/-pedantic-errors是使编译器严格的原因。-std=c17 -Wpedantic将把它变成一个严格的(主要是)符合 ISO C 的编译器。它将从标准标头中删除各种非标准扩展,并在您尝试各种非标准功能时提供诊断消息。在某些情况下,即使在严格模式下,gcc 也无法符合标准,但大多数情况下,当启用这些选项时,它具有非常好的一致性。

Clang 和 icc 编译器也使用相同的设置。

于 2021-02-15T09:32:12.730 回答
0

根据gcc手册,“ c17”、“ c18”、“ iso9899:2017”、“ iso9899:2018”都是指ISO 2018年发布的C标准

根据同一手册-Wpedantic取决于使用以下-std选项选择的标准版本:

发出严格的 ISO C 和 ISO C++ 要求的所有警告;拒绝所有使用禁止扩展的程序,以及其他一些不遵循 ISO C 和 ISO C++ 的程序。对于 ISO C,遵循使用的任何-std选项指定的 ISO C 标准版本。

来自同一文档的重要说明:

一些用户试图用它-Wpedantic来检查程序是否符合严格的 ISO C 标准。他们很快发现它并没有完全达到他们想要的效果:它找到了一些非 ISO 实践,但不是全部——<strong>只有那些 ISO C 需要诊断的实践,以及已经添加了诊断的其他一些实践。

于 2021-02-14T20:24:23.123 回答