【问题标题】:Visual Studio Code c++11 extension warningVisual Studio Code c++11 扩展警告
【发布时间】:2018-12-05 09:45:03
【问题描述】:

我正在学习 c++,我正在使用适用于 Mac 的 Visual Studio 代码。我使用 Code Runner 来运行我的程序。我的问题是,当我使用 c++11 中的“auto”之类的东西进行变量声明时,Visual Studio 代码会给我这样的警告,但是如果我尝试在 Xcode 或 Eclipse 上运行它,它不会:

warning: 'auto' type specifier is a C++11 extension [-Wc++11-extensions]
for(auto y: nstrVec)

如果有必要,这是程序:

#include <iostream>
#include <cstdlib>
#include <string>
#include <vector>
#include <numeric>
#include <sstream>

int main(){

std::vector<std::string> nstrVec(10);

std::string str("I'm a string");
nstrVec[0] = str;

std::cout << str.at(0) << "\n";
std::cout << str.front() << " " << str.back() << "\n";
std::cout << "Length " << str.length() << "\n";
// copies all characters after the fourth 
std::string str2(str, 4);

for(auto y: nstrVec)
    if(y != "")
        std::cout << y << "\n";

return 0;
}

这是 c_cpp_proprerties.json 文件:

{
"configurations": [
    {
        "name": "Mac",
        "includePath": [
            "${workspaceFolder}/**",
                 "/System/Library/Frameworks/Kernel.framework/Versions/A/Headers"
        ],
        "defines": [],
        "macFrameworkPath": [
            "/System/Library/Frameworks",
            "/Library/Frameworks"
        ],
        "compilerPath": "/usr/bin/clang",
        "cStandard": "c11",
        "cppStandard": "c++17",
        "intelliSenseMode": "clang-x64"
    }
],
"version": 4
}

【问题讨论】:

  • 你在为 C++11 编译吗?听起来不像。 auto 关键字是在 C++11 中引入的,因此在此之前它被 Visual Studio 视为语言扩展。
  • @CoryKramer 问题是关于 VS Code,而不是 VS。
  • 您告诉编译器使用 2 个不同的标准:您同时拥有“-std=c++17”和“-std=c++11”。
  • 你能从命令行编译它吗?也就是说,打开一个shell,进入那个目录,然后输入g++ -std=c++17 -g helloworld.cpp -o helloworld:它有用吗?
  • 很高兴您能解决您的问题,但请不要编辑您的帖子以在标题中添加“已解决”,Stack Overflow 的工作方式不同。表示它的正确方法是接受一个答案,一旦有答案。你可以问@Bob__ 他是否有兴趣发布一个;如果他不是,请自己发布并接受。谢谢!

标签: c++ macos visual-studio-code


【解决方案1】:

在 VS 代码中:

文件>>首选项>>设置>>扩展

find C_Cpp>Default:Cpp Standard 下拉菜单

将其设置为 c++11

【讨论】:

  • 但这并不能解决我的问题。它仍然显示相同的警告
  • 在 macOS 上,这是代码 > 首选项 > 设置 > 扩展
【解决方案2】:

我遇到了同样的问题,但是使用 set vscode-user-settings 解决了

"clang.cxxflags": ["-std=c++14"]

【讨论】:

  • 你在哪里找到这个文件?
【解决方案3】:

我今天花了很长时间试图弄清楚为什么会出现这个错误,但没有我需要的确切答案,所以我想我会把它发布在这里,以防万一我可以为任何人省去麻烦。

如果您使用的是代码运行器,请查看用户设置并进行设置:

 "code-runner.executorMap" : { "cpp" : "cd $dir && g++ -std=c++17 $fileName -o $fileNameWithoutExt && $dir$fileNameWithoutExt" }

相关位是“g++ -std=c++17”。

这当然是提供您可以使用上面 Daniel 的解决方案在 shell 中编译您的程序,但不能在 VScode + 中使用代码运行程序。

【讨论】:

    【解决方案4】:

    我用它来解决我的问题。打开你的终端

    狂欢

    echo "alias g++='g++ -std=c++17'" >> ~/.bashrc
    source ~/.bashrc
    

    zsh

    echo "alias g++='g++ -std=c++17'" >> ~/.zshrc
    source ~/.zshrc
    

    【讨论】:

      【解决方案5】:

      对于所有来这个问题寻找快速答案的人(就像我一样):

      以下编译器命令应该使用最新的 C++ 标准 (c++17) 编译您的程序 main.cpp,并且应该消除上述警告消息:

      g++ -std=c++17 -g main.cpp -o main

      在cmets中多次提到,但我觉得这个问题应该有规律的答案。

      【讨论】:

        【解决方案6】:

        如果您在 VS 中使用 CPH 判断扩展,请在 Cph › Language › Cpp: Args in extension settings 中添加 -std=c++11

        【讨论】:

          猜你喜欢
          • 2021-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多