警告:'auto' 类型说明符是 C++11 扩展
warning: 'auto' type specifier is a C++11 extension
我有一个非常简单的C++代码语句auto a = 12;
。
当我在 Linux 中使用 -std=c++98
选项用 g++ 编译它时,我得到了预期的错误
error: ‘a’ does not name a type
但是当我在 MacOS 中使用相同的选项编译相同的代码时,我收到的只是一个警告,但代码编译正常。
warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
但是 -std=c++98
的重点不就是按照 C++ 98 标准编译代码吗?所以警告告诉我即使 auto 是 C++11 扩展我也要为你编译它?
是否有强制使用 c++98
(或其他标准)的选项?
g++ --version
打印
Apple clang version 12.0.0 (clang-1200.0.32.29)
顺便说一句,这是另一件奇怪的事情。所以它实际上是clang。
这就像问 firefox --version
得到 chrome 87.0.4280.163
您可能正在寻找 -pedantic
或 -pedantic-errors
,引用 man g++:
-pedantic
Issue all the warnings demanded by strict ISO C and ISO C ++ ; reject all programs that use forbidden extensions, and some other
programs that do not follow ISO C and ISO C ++ . For ISO C, follows
the version of the ISO C standard specified by any -std option used.
注意:这并不是检查严格标准一致性的功能(请参阅手册页中的其余说明)
在 MacOS 上,您使用的是 clang,而不是 gcc。 (如果我没记错的话,MacOS 分别提供“gcc”和“g++”作为“clang”和“clang++”的符号链接,这样假定 gcc 的脚本就不会中断。)
两个编译器只是以不同的方式处理这种情况。
是的,符合 1998 ISO C 标准的编译器,因为 gcc 和 clang 都试图使用 -std=c++98
,必须诊断该行。
就标准而言,非致命警告是有效的诊断。该标准不要求拒绝无效程序(除非它包含 #error
指令)。
如果您想严格执行 C++98 规则并拒绝违反它们的代码,请使用 -std=c++98 -pedantic-errors
(使用 gcc 或 clang)。
我有一个非常简单的C++代码语句auto a = 12;
。
当我在 Linux 中使用 -std=c++98
选项用 g++ 编译它时,我得到了预期的错误
error: ‘a’ does not name a type
但是当我在 MacOS 中使用相同的选项编译相同的代码时,我收到的只是一个警告,但代码编译正常。
warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
但是 -std=c++98
的重点不就是按照 C++ 98 标准编译代码吗?所以警告告诉我即使 auto 是 C++11 扩展我也要为你编译它?
是否有强制使用 c++98
(或其他标准)的选项?
g++ --version
打印
Apple clang version 12.0.0 (clang-1200.0.32.29)
顺便说一句,这是另一件奇怪的事情。所以它实际上是clang。
这就像问 firefox --version
得到 chrome 87.0.4280.163
您可能正在寻找 -pedantic
或 -pedantic-errors
,引用 man g++:
-pedantic
Issue all the warnings demanded by strict ISO C and ISO C ++ ; reject all programs that use forbidden extensions, and some other programs that do not follow ISO C and ISO C ++ . For ISO C, follows the version of the ISO C standard specified by any -std option used.
注意:这并不是检查严格标准一致性的功能(请参阅手册页中的其余说明)
在 MacOS 上,您使用的是 clang,而不是 gcc。 (如果我没记错的话,MacOS 分别提供“gcc”和“g++”作为“clang”和“clang++”的符号链接,这样假定 gcc 的脚本就不会中断。)
两个编译器只是以不同的方式处理这种情况。
是的,符合 1998 ISO C 标准的编译器,因为 gcc 和 clang 都试图使用 -std=c++98
,必须诊断该行。
就标准而言,非致命警告是有效的诊断。该标准不要求拒绝无效程序(除非它包含 #error
指令)。
如果您想严格执行 C++98 规则并拒绝违反它们的代码,请使用 -std=c++98 -pedantic-errors
(使用 gcc 或 clang)。