C++ 是否可以在VScode中修复此问题#主文件中的pragma一次[-Wpragma一次在头文件外]

C++ 是否可以在VScode中修复此问题#主文件中的pragma一次[-Wpragma一次在头文件外],c++,visual-studio-code,vscode-settings,C++,Visual Studio Code,Vscode Settings,使用VScode,如何修复此错误 #pragma once in main file [-Wpragma-once-outside-header] 更新: 在VScode中显示: 再次更新: 以下是我当前在c\u cpp\u properties.json中的VScode设置 { "configurations": [ { "name": "Mac", "includePath": ["${workspaceFolder}/**"], "def

使用VScode,如何修复此错误

#pragma once in main file [-Wpragma-once-outside-header]
更新: 在VScode中显示:

再次更新: 以下是我当前在
c\u cpp\u 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
}

考虑到没有答案,考虑到我也花了好几个小时试图解决这个问题,现在开始

在Visual Studio代码中,编译设置默认在tasks.json(Terminal>Configure default Build Task>g++.exe())中生成。在VS代码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”可能有不同的路径。)

关键部分是:“${file}”,这是编辑器中活动文件(活动选项卡)的名称

"args": [
            "-g",
            "${file}",
            "-o",
            "${fileDirname}\\${fileBasenameNoExtension}.exe"
        ],
如果您使用多个文件,至少一个头文件(.h或.hpp)和一个主文件(.cpp),VS代码会将该活动文件(.h或.hpp)作为主文件(.cpp)。因此,您需要使用以下命令进行更改:“${workspaceFolder}\*.cpp”

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

我实际上怀疑您正在编译头文件。通常,当弹出警告时,您应该修复代码,而不是禁用该警告。还请注意,不需要编译警告。对于编译警告,您应该发布生成日志。您是否在未生成的情况下收到此消息?那么这就是VSCode中的一个bug。如果您在构建时得到它,那么您将尝试构建头文件而不是源文件(应该
#包括头文件)。VScode在构建之前给出错误。下面是VScode正在运行的命令,用于生成
g++-std=c++11 main.cpp-o main
那么这个错误可能来自
的“intelliSenseMode”:“clang-x64”
,请参见,如果确实如此,那么可能值得提交错误报告。或者只是使用一个合适的IDE。从长远来看,一个简单的答案是不要一次使用
#pragma
——这不是标准的,因为它不能在所有系统上正确实现。