使用非扩展 -std 编译时,-Wpedantic 会做任何事情吗?

Will -Wpedantic do anything when compiling with a non-extension -std?

如果我使用 GCC 编译我的 C 或 C++ 代码,使用 -std=c99-std=c++11 或其他一些适当的 ISO 标准而不是 GNU 扩展 - -Wpedantic 会发出更多警告我通常会得到什么?例如使用 -W-Wall-Wall -Wextra?

是的,使用 -pedantic 使 GCC 更严格。在 GCC 8.2 中,int foo(void) { return ({3;}); } 仅使用 -Wall -std=c11 进行编译而没有抱怨,但在添加 -pedantic 时收到此警告:

warning: ISO C forbids braced-groups within expressions [-Wpedantic]

(使用的特性,语句表达式,旨在用于宏。它在我的示例中仅用作原理证明。)

比较对比:

  • 例如,使用 -std=gnu11,请求 C 的 非标准 版本。
  • 使用 -std=c11 要求 标准 版本的 C。C 标准允许甚至邀请扩展,因此您仍然可以使用某些 GNU 扩展 -std=c11.
  • 添加 -pedantic 要求编​​译器警告某些 GNU 扩展和它原本允许的“传统”功能。

documentation 还表明 GCC 可能对标准 C 应该发出的某些警告松懈,-pedantic 导致它发出严格 ISO C 要求的所有警告。

可能会有其他变化;我不是 GCC 方言和开关方面的专家。