【问题标题】:Is it possible to fix this in VScode? #pragma once in main file [-Wpragma-once-outside-header]是否可以在 VScode 中解决此问题? #pragma once 在主文件中 [-Wpragma-once-outside-header]
【发布时间】:2019-04-09 21:14:24
【问题描述】:

使用 VScode,如何解决这个错误?

#pragma once in main file [-Wpragma-once-outside-header]

更新: 在 VScode 中显示:

再次更新: 这是我在c_cpp_properties.json中的当前VScode设置

{
  "configurations": [
    {
      "name": "Mac",
      "includePath": ["${workspaceFolder}/**"],
      "defines": [],
      "macFrameworkPath": [
        "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks"
      ],
      "compilerPath": "/usr/bin/clang",
      "cStandard": "c11",
      "cppStandard": "c++17",
      "intelliSenseMode": "clang-x64"
    }
  ],
  "version": 4
}

【问题讨论】:

  • 我实际上怀疑你正在编译你的头文件。通常,当弹​​出警告时,您应该修复代码而不是禁用该警告。另请注意,编译警告不是必需的。对于编译警告,您应该发布构建日志。
  • 您在没有构建的情况下收到此消息吗?那么这是VSCode中的一个错误。如果在构建时得到它,那么您尝试构建头文件而不是源文件(应该#include头文件)。
  • VScode 在构建之前给出错误。这是 VScode 正在运行以构建的命令...g++ -std=c++11 main.cpp -o main
  • 那么这个错误可能来自"intelliSenseMode": "clang-x64" ,请参阅Is is possible to disable this warning in clang? warning: #pragma once in main file,如果确实如此,那么可能值得提交一个错误报告。或者只是使用合适的 IDE。
  • 一个从长远来看好的简单答案是不要使用#pragma once——它不是标准的,因为它不能在所有系统上正确实现。

标签: c++ visual-studio-code vscode-settings


【解决方案1】:

鉴于没有答案,而且我也花了一些时间试图解决这个问题,就这样吧。

在 Visual Studio Code 中,编译设置默认在 tasks.json 中构建(Terminal > Configure Default Build Task > g++.exe ())。在 VS Code 2020 中是这样的:

{
"version": "2.0.0",
"tasks": [
    {
        "type": "shell",
        "label": "g++.exe build active file",
        "command": "C:\\Program Files (x86)\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin\\g++.exe",
        "args": [
            "-g",
            "${workspaceFolder}\\*.cpp",
            "-o",
            "${fileDirname}\\${fileBasenameNoExtension}.exe"
        ],
        "options": {
            "cwd": "C:\\Program Files (x86)\\mingw-w64\\i686-8.1.0-posix-dwarf-rt_v6-rev0\\mingw32\\bin"
        },
        "problemMatcher": [
            "$gcc"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
]

}

(我正在使用 mingw-64 来支持 gcc 编译器,所以可能 "command""cwd" 有不同的路径,具体取决于您正在使用的编译器。)

key 部分是这样的:"${file}", 这是编辑器中活动文件(活动选项卡)的名称。

"args": [
            "-g",
            "${file}",
            "-o",
            "${fileDirname}\\${fileBasenameNoExtension}.exe"
        ],

如果您正在处理多个文件,至少一个头文件(.h 或 .hpp)和一个主文件(.cpp),VS Code 将使用该活动文件(.h 或 .hpp),因为它是主文件文件 (.cpp)。所以你需要用这个来改变它:"${workspaceFolder}\*.cpp"

"args": [
            "-g",
            "${workspaceFolder}\\*.cpp",
            "-o",
            "${fileDirname}\\${fileBasenameNoExtension}.exe"
        ],

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-02
    • 2011-06-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多