如果我使用 gcc -std=c17
,会-Wpedantic
为 c17 发出警告吗?这和 ISO C 一样吗?
2 回答
是的,通常-std=cxx
选择要遵循的 C 标准,并且有点类似于默认-std=gnuxx
设置,除了后者启用各种语言扩展。基本上,此选项会选择可用的语言功能,但不会告诉编译器对其严格要求。
-Wpedantic-
/-pedantic-errors
是使编译器严格的原因。-std=c17 -Wpedantic
将把它变成一个严格的(主要是)符合 ISO C 的编译器。它将从标准标头中删除各种非标准扩展,并在您尝试各种非标准功能时提供诊断消息。在某些情况下,即使在严格模式下,gcc 也无法符合标准,但大多数情况下,当启用这些选项时,它具有非常好的一致性。
Clang 和 icc 编译器也使用相同的设置。
根据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 需要诊断的实践,以及已经添加了诊断的其他一些实践。