一、软件下载
需要下载的软件如下:
- 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