suyc's blog

哎,什么时候才能把英语学好啊🙇‍~

vscode C/C++ 笔试环境配置

大厂普遍用牛客或者赛码这种平台来出题,有的允许使用IDE调试,vscode应对这种算法题绰绰有余。

下边给出一个我自己配置的通用的环境配置,可以用来处理输入的问题,我大部分笔试都用的win10,但是有时候也有mac,目前这个配置在win10下用的,在mac上还没试,回头更新的时候把他弄成两边都兼容的,这样就可以使用OneDrive来同步了。

目录结构如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
.
├── .vscode
| ├── c_cpp_properties.json
| ├── launch.json
| ├── settings.json
| └── tasks.json
├── bytedance
| ├── bin
| | ├── 1.exe
| | └── ...
| ├── 1.cpp
| ├── 1.in
| └── ...
└── ...

这是一个完整的目录,比如当前参加的是bytedance的笔试,就可以创建一个子文件夹,如果有其他的笔试,可以增加多个文件夹。
bytedance下包含多个可执行文件,例如1.cpp,以及对应的输入1.in,这个输入就是完整的来自牛客或者赛码的输入就行,格式要完全一样。需要手动创建一下bin/,编译后会生成bin/1.exe,可自动读取输入并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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
{
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "build",
"command": "C:\\mingw64\\bin\\g++.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\bin\\${fileBasenameNoExtension}.exe",
"-std=c++14",
],
"options": {
"cwd": "${workspaceFolder}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
}
},
{
"label": "run",
"type": "shell",
"dependsOn": "build",
"command": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe",
"group": "test",
},
{
"label": "run with input",
"type": "shell",
"dependsOn": "build",
"command": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe",
"args": ["<", "${fileDirname}\\${fileBasenameNoExtension}.in"],
"group": "test",
}
]
}

除了一个gcc编译之外,后边还多了两个可以用于直接运行的task,即使用ctrl+shift+p->run task,可以自动运行程序,可能平时不需要debug的时候有点用,但是直接调用F5就行,这两个后边的配置项可有可无。

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
{
"version": "0.2.0",
"configurations": [
{
"name": "g++.exe-INPUT",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe",
"args": ["<", "${fileDirname}\\${fileBasenameNoExtension}.in"],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build"
},
{
"name": "g++.exe-NOINPUT",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\bin\\${fileBasenameNoExtension}.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "C:\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build"
}
]
}

主要关注的就是programargs,其他的和文档里的样例并无区别,上边的是适用于有输入的情况,下边适用于无输入。

此外c_cpp_properties.json使用默认的就可以。

此外,在settings.json中推荐一个format的格式,我一直在用的:

1
"C_Cpp.clang_format_fallbackStyle": "{BasedOnStyle: LLVM, UseTab: Never, IndentWidth: 4, TabWidth: 4, AllowShortIfStatementsOnASingleLine: true, AllowShortLoopsOnASingleLine: true, ColumnLimit: 100}",

用上这个环境,输入后单步调试,笔试无压力了呢~祝大家offer多多~