微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

我有一个非常简单的 C++ 代码语句 struct GenerateView: View { @Observedobject var searchObjectController = SearchObjectController.shared @State private var celsius: Double = 0 var body: some View { ZStack { Color.purple .ignoresSafeArea() vstack{ Text("Generate a Random Idea") .padding() .foregroundColor(.white) .font(.largeTitle) .frame(maxWidth: .infinity,alignment: .center) Image("placeholder") Slider(value: $celsius,in: -100...100) .padding() Button("Generate") { print("topic changed to\(searchObjectController.searchText)") searchObjectController.searchText.self = "tables" } Spacer() } } } }

当我在 Linux 中使用 auto a = 12; 选项使用 g++ 编译它时,我收到了预期的错误

-std=c++98

但是当我在 MacOS 中使用相同的选项编译相同的代码时,我只收到一个警告,但代码编译得很好。

error: ‘a’ does not name a type

但是 warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions] 的全部意义不是按照 C++ 98 标准编译代码吗?所以警告说即使 auto 是 C++11 扩展,我也会为你编译它?

是否有强制使用 -std=c++98(或其他标准)的选项?

c++98 打印 g++ --version 顺便说一句,这是另一件奇怪的事情。所以它实际上是叮当声。

这就像问Apple clang version 12.0.0 (clang-1200.0.32.29)并得到firefox --version

解决方法

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

,

您可能正在寻找 -pedantic-pedantic-errors,引用 man g++

-迂腐

发出严格的 ISO C 和 ISO C++ 要求的所有警告;拒绝所有使用禁止扩展名的程序,以及其他一些 不遵循 ISO C 和 ISO C++ 的程序。对于 ISO C,如下 使用的任何 -std 选项指定的 ISO C 标准版本。

注意:这不是检查严格标准一致性的功能(请参阅手册页中的其余说明)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。