使用非扩展 -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 方言和开关方面的专家。
如果我使用 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 方言和开关方面的专家。