如何优雅的用VS Code写C++作业?

前言

虽然有很多成熟的IDE可用,但只是写个作业还是没必要去用那些又大又慢的东西的。VS Code作为万能编辑器,可以用mingW配置C++的编译环境,但可惜会存在一些小问题,本着折腾的精神,总结一下互联网上的一下解决方法,并贴出我自己的方案。

基础的配置

不再赘述,网上一查一大把。需要注意的是一定要选择一个文件夹作为代码的存放地点。在完成了配置后,你的.vscode文件夹下应该有数个json文件。

编码问题与多文件引用问题

描述

如果你习惯在写代码的时候分成多个文件,最后在主函数里引用头文件调用,那在你编译运行的时候一定会遇到找不到定义的问题。

如果在代码中使用中文,便不得不处理中文的编码问题,网上的解决方案有很多,但要更改系统的默认设置或对其他功能造成影响。

以上两个问题通过更改Code Runner的默认编译指令解决。

解决

请保证开启了Run in Terminal选项。文件编码依然采用utf8格式,在.vscode文件夹下新建settings.json(或者在用户的settings.json中操作),在最外部的一对大括号添加(若无,先自己加一对大括号):

1
2
3
4
5
"code-runner.executorMap": {

"c": "cd $dir && gcc *.c -fexec-charset=gb2312 -o $fileNameWithoutExt.exe && $dir$fileNameWithoutExt.exe",
"cpp": "cd $dir && g++ *.cpp -fexec-charset=gb2312 -o $fileNameWithoutExt.exe && $dir$fileNameWithoutExt.exe"
},

使用-fexec-charset参数指定输出编码,避免了需要更改文件或控制台默认编码的文件;使用通配符指定文件夹内所有cpp文件为需要编译的文件,修正了引用的问题。如果需要更加精细的设置,可以自己修改。

Debug问题

直接贴配置了,不多说。

tasks.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
{
"tasks": [
{
"type": "cppbuild",
"label": "Compile",//可以随意更改,保证与launch.json的preLaunchTask相同
"command": "g++",
"args": [
"${fileDirname}\\*.cpp",//编译所有文件,根据自己需要更改
"-g",//一定要加这个参数,不然没法加断点
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:/Project/mingw64/bin"//自己的编译器路径,自行修改
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "编译器: C:/Project/mingw64/bin/g++.exe"
}
],
"version": "2.0.0"
}

launch.json:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
{
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "C:/Project/mingw64/bin",//自己的编译器路径,自行修改
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\Project\\mingw64\\bin\\gdb.exe",//自己的gdb路径,自行修改
"setupCommands": [
{
"description": "gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "Compile"//可以随意更改,保证与tasks.json的label相同
}
]
}

如果你的文件不是utf8编码,那在调试的时候中文会变成乱码,这也是前文要求保持utf8编码的原因。


如何优雅的用VS Code写C++作业?
https://irr.ink/2021/1XJKHTE/
作者
iR
发布于
2021年10月29日
许可协议