警告:“auto”类型说明符是C++11扩展

我有一个非常简单的 C++ 代码语句auto a = 12;

当我使用-std=c++98选项在 Linux 中使用 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)
是由另一种方式奇怪的事情。所以它实际上是叮当声。

这就像询问firefox --version和得到chrome 87.0.4280.163

回答

在 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)。


以上是警告:“auto”类型说明符是C++11扩展的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>