一、软件下载
需要下载的软件如下:
- VS Code
 - 编译工具:MinGW 或 MSYS2 或 VS2022
 
VS Code 下载地址:链接
 MinGW 下载地址:链接 或者 链接
 MSYS2 下载地址:链接
 VS2022 下载地址:链接
上述软件下载完成以后安装步骤安装即可,编译工具建议选择MinGW。如果安装MinGW可以使用GCC编译器,而安装VS2022则可以使用MSVC编译器。
二、环境配置
1. 添加环境变量
将 MinGW 的 bin 文件夹添加到系统的 PATH 环境变量中。如果在命令行中执行以下代码并无错误提示,则表面添加成功。
gcc --version
g++ --version
gdb --version
 
输出结果如下:
 
2. 安装 VS Code 插件
需要安装三个插件,分别是:
- C/C++
 - C/C++ Extension Pack
 - Atom One Dark Theme (可选,用于代码主题颜色)
 

三、编译器参数
1. GCC
| 参数 | 说明 | 示例 | 
|---|---|---|
| -c | 只编译源文件,生成目标文件,不进行链接 | |
| -o | 指定输出文件的名称 | -o build\${fileBasenameNoExtension}.exe | 
| -I <include_path> | 添加头文件搜索路径 | -I ${workspaceFolder}/include | 
| -L <library_path> | 添加库文件搜索路径 | -L ${workspaceFolder}/lib | 
| -l <library_name> | 链接指定的库文件 | -lgdi32 | 
| -g | 生成调试信息 | |
| -std= | 指定使用的语言标准 | -std=c11、-std=c++14 | 
| -O | 指定优化级别,级别可以是0、1、2、3、s | |
| -Wall | 显示所有警告信息 | |
| -Werror | 将警告视为错误 | |
| -pthread | 启用对多线程的支持 | |
| -lm | 链接数学库 | |
| -mwindows | 去掉控制台窗口 | 
2. MSVC
| 参数 | 说明 | 示例 | 
|---|---|---|
| /c | 只编译源文件,不链接生成可执行文件 | |
| /EHsc | 启用 C++ 异常处理支持 | |
| /Fo+路径 | 指定中间文件路径 | /Fo${workspaceFolder}\build\${fileBasenameNoExtension}.obj | 
| /Fe+路径 | 指定目标文件路径 | /Fe${workspaceFolder}\build\${fileBasenameNoExtension}.exe | 
| /I | 添加包含文件目录 | |
| /D+name[=value] | 定义预处理宏 | |
| /W | 设置警告级别 | |
| /O | 设置优化级别 | |
| /Zi | 生成调试信息 | |
| /MD | 使用动态链接运行时库 | |
| /MT | 使用多线程静态链接运行时库 | |
| /link | 传递链接器选项 | |
| /P | 生成预处理输出 | |
| /showIncludes | 显示包含的文件 | |
| /? | 显示帮助信息 | 
四、配置文件
可参考文章 链接
 在VS Code 中运行 C/C++ 代码,可以使用配置文件来指定:头文件路径、库文件路径、编译器路径等。配置文件既可以自动生成、也可以手动配置,但大多是时候自动生成的配置文件往往无法满足我们的要求,因此我们更多时候是需要手动配置的。主要包括三个配置文件:c_cpp_properties.json 、tasks.json 、launch.json ,三个配置文件的作用如下:
c_cpp_properties.json:配置C/C++扩展的编译器路径和头文件搜索路径,保证代码分析和智能感知正常运行tasks.json:配置执行任务,即在编辑器中执行的自定义命令或脚本launch.json:配置调试器的启动和调试设置
1. 基本配置
c_cpp_properties.json
{
    "configurations": [
        // 32位
        {
            "name": "Win32", // 当前配置的名称
            "includePath": [
                "${workspaceFolder}/**",
                "D:\\C\\VS2022\\Community\\VC\\Tools\\MSVC\\14.35.32215\\include" // 编译器的头文件路径
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            // 此处是你的 Windows SDK 版本号
            "windowsSdkVersion": "10.0.20348.0",
            // 此处是编译器的地址
            "compilerPath": "D:\\C\\VS2022\\Community\\VC\\Tools\\MSVC\\14.35.32215\\bin\\Hostx64\\x86\\cl.exe",
            "cStandard": "c17", // C 标准 
            "cppStandard": "c++17", // C++ 标准
            "intelliSenseMode": "windows-msvc-x86" // 智能感知的模式
        },
        // x64位
        {
            "name": "x64",
            "includePath": [
                "${workspaceFolder}/**",
                "D:\\C\\VS2022\\Community\\VC\\Tools\\MSVC\\14.35.32215\\include" // 编译器的头文件路径
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            // 此处是你的 Windows SDK 版本号
            "windowsSdkVersion": "10.0.20348.0",
            // 此处是编译器的地址
            "compilerPath": "D:\\C\\VS2022\\Community\\VC\\Tools\\MSVC\\14.35.32215\\bin\\Hostx64\\x64\\cl.exe",
            "cStandard": "c17", // C 标准 
            "cppStandard": "c++17", // C++ 标准
            "intelliSenseMode": "windows-msvc-x64" // 智能感知的模式
        }
    ],
    "version": 4
}
 
tasks.json
{
    "tasks": [
        {
            "label": "MSVC编译",
            "type": "shell",
            "command": "cmd.exe",
            "args": [
                "/c",
                // 编译器地址
                "D:\\C\\VS2022\\Community\\VC\\Auxiliary\\Build\\vcvars32.bat && cl.exe",
                "main.cpp",
                "/Zi",
                "/Od",
                "/EHsc",
                // 中间文件生成目录
                "/Fo${workspaceFolder}\\build\\${fileBasenameNoExtension}.obj", 
                // 目标文件生成目录
                "/Fe${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe", 
            ],
            "options": {
                "cwd": "${workspaceFolder}" // 作为当前打开目录
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        },
    ],
    "version": "2.0.0"
}
 
launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "C/C++: gcc.exe 生成和调试活动文件",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${fileDirname}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "D:\\A\\MinGW64\\bin\\gdb.exe", //此处为你的gdb.exe路径
            "setupCommands": [
                {
                    "description": "为 gdb 启用整齐打印",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                },
                {
                    "description": "将反汇编风格设置为 Intel",
                    "text": "-gdb-set disassembly-flavor intel",
                    "ignoreFailures": true
                }
            ],
            "preLaunchTask": "MSVC编译"
        }
    ]
}
 
2. 删除文件任务配置
{
 "label": "删除中间文件",
 "type": "shell",
 "command": "cmd.exe",
 "args": [
     "/c",
     "del",
     "${workspaceFolder}\\build\\*.obj",  	// 删除build文件夹下的所有.obj文件
     "${workspaceFolder}\\build\\*.ilk",	// 删除build文件夹下的所有.ilk文件
     "${workspaceFolder}\\*.pdb",      		// 删除工作空间下的所有.pdb 文件
 ],
 "group": "build",
},
 
3. 编译、删除并执行
下面的 tasks.json 配置文件将依次执行:编译源文件、删除中间文件、执行可执行文件操作。
{
    "tasks": [
        // MSVC编译
        {
            "label": "MSVC编译",
            "type": "shell",
            "command": "cmd.exe",
            "args": [
                "/c",
                "D:\\C\\VS2022\\Community\\VC\\Auxiliary\\Build\\vcvars32.bat && cl.exe",
                "main.cpp",
                "/Zi",
                "/Od",
                "/EHsc",
                // 中间文件生成目录
                "/Fo${workspaceFolder}\\build\\${fileBasenameNoExtension}.obj", 
                 // 目标文件生成目录
                "/Fe${workspaceFolder}\\build\\${fileBasenameNoExtension}.exe",
            ],
            "options": {
                "cwd": "${workspaceFolder}" // 作为当前打开目录
            },
            "problemMatcher": [
                "$msCompile"
            ],
            "group": "build",
            "detail": "Task generated by Debugger."
        },
        // 删除中间文件
        {
            "label": "删除中间文件",
            "type": "shell",
            "command": "cmd.exe",
            "args": [
                "/c",
                "del",
                "${workspaceFolder}\\build\\*.obj",
                "${workspaceFolder}\\build\\*.ilk",
                "${workspaceFolder}\\*.pdb",
            ],
            "group": "build",
            "dependsOn": [
                "MSVC编译",
            ]
        },
        // RUN
        {
            "label": "RUN",
            "type": "shell",
            "command": "cmd.exe",
            "args": [
                "/c echo. && echo. && echo. && echo. && echo. && echo ================================================================================ && .\\build\\${fileBasenameNoExtension}.exe"
            ],
            "options": {
                "cwd": "${workspaceFolder}"
            }, // 作为当前打开目录
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "dependsOn": [
                "删除中间文件",
            ]
        },
    ],
    "version": "2.0.0"
}
 
五、问题解决
1. 执行代码控制台闪退问题的解决
方法一
 修改 launch.json 文件中的 externalConsole 参数值为 false
"externalConsole":false
 
方法二
 在主程序最后添加: system("pause");
 方法三
 在主程序最后添加: getchar();
2. 乱码解决
方法一
 增添头文件<windows.h>并调用API函数SetConsoleOutputCP(65001)
 
 方法二
 更改VScode的编码格式为GBK,或者也可以将源代码文件用记事本打开并另存为ANSI编码格式。
 
 
 
 方法三
 修改VScode的setting.json配置文件,统一为一种编码格式即可。
 
 方法四
 Windows (中文) 默认的字符集是 Windows-936 (GBK),而 GCC 编译器默认编译的时候是按照 UTF-8 解析的,当未指定字符集时一律当作 UTF-8 进行处理,于是造成乱码。因此在GCC编译时添加以下参数即可解决。
-fexec-charset=gbk
-finput-charset=gbk
                


















