使用 VSCode 编写 C++ 单文件程序 (Windows 系统).md · main · 田 昊东 / NJUCS-BAOYAN · GitLab
相同内容也在某人的个人博客上发布 无耻引流
Update on 2024.05.06¶
某人去了基础实验楼乙区 124 机房,发现 124 里的电脑换成了 i7-13700,还装了 clion、pycharm 和 intellij idea,版本 2024.1。某人测试后发现在 VSCode 中使用 clion 的编译器不会出现 task.json 和 launch.json 的问题。
本文的测试环境是 Dev C++,仅供参考,但配置起来大差不差。
新配的电脑的注意事项:
- 开机慢,会在一个只有一行白字的黑屏界面卡很久
- 然后会出现一个系统菜单,选择 Visual Studio 选项(不出意外是第一个)
背景¶
南京大学硕士夏令营机试开始之前,某人打开 124 机房的古董电脑上的 vscode,简单写了个 hello world,结果发现 VSCode 对着#include <bits/stdc++>
报错 "header not found"。(解决方法见下文)
机试开始,某人想调试代码,却发现 gdb 不太好使。
一切都结束之后,某人翻经验贴仓库,发现有相似问题的不只某人一个。
前置条件¶
- 电脑上有 MinGW
- 电脑上有 Visual Studio Code
- vscode 上有 Microsoft 官方的 C/C++ 插件
测试环境¶
- Win11 22H2
- Visual Studio Code 1.83.0
- DevC++ 5.11 自带的 MinGW,其中 g++ 版本为 4.9.2,gdb 版本为 7.8.1(为了模拟 124 古董机器的编译器)
使用方法¶
新建文件夹,用 vscode 打开,之后的所有操作都在该窗口中进行。
C/C++ Configuration¶
按 F1 键,显示搜索框,输入 C/C++,选择C/C++: Edit Configurations(UI)
,将会出现新页面 C/C++ Configurations,同时. vscode 文件夹下出现新文件 c_cpp_properties.json。
以下内容需要修改:
使用 C/C++ Configurations 页面编辑时,不能打开 c_cpp_properties.json 文件,否则进行的编辑将不被保存。
这个是编译器路径,更改方式有如下两种:
- 点击右侧箭头,打开下拉菜单,选择 MinGW 的 g++(适用于 g++ 在 PATH 中的情况)** upd. on 2024.5.6:如果电脑上有 clion 则选择 clion 的 g++ **
- 直接输入 g++ 的路径,注意不要带引号
VSCode 的编译器寻找顺序为 MSVC -> GCC on WSL -> MinGW, 所以当电脑上有 MSVC 时默认编译器路径是 MSVC 路径,这是 124 机房电脑的 vscode 不认识#include <bits/stdc++>
的原因。
在框中输入编译器参数,每行一个。
某人一般使用:
-Wall
-Wextra
-Wconversion
-Wshadow
-std=c++11
其中-Wconversion
是类型转换警告,-Wshadow
是变量重名覆盖警告(某人经常犯变量重名错误,因此习惯加上),-std=c++11
为 c++ 版本。
这个选择 windows-gcc-x64。
这个是 c 和 c++ 的版本,按需选择。
我用上述编译器版本测试,即使在 C++ standard 中选择了 c++11,在编译带 c++11 特性的代码时仍报错,解决方案是在编译参数中加上-std=c++11
编写代码¶
没啥说的,在自己创建的文件夹里新建 c/c++ 文件写就完了。
运行 / 调试¶
现在. vscode 文件夹下只有 c_cpp_properties.json 一个文件。
tasks.json(必需)¶
将 vscode 页面切换到想要运行的代码文件,右上角如图所示:
点击下拉菜单,选择 debug 或 run
会出现一个菜单
选择想要的编译器路径,选择完后. vscode 文件夹下应出现 tasks.json。
然后就有可能可以正常运行或调试程序了。upd on 2024.5.6 某人测试若使用 clion 的编译器可以正常运行或调试程序
正常情况下 vscode 会自动新建两个 terminal,一个用于编译,一个用于运行。
使用快捷键 ctrl+j 打开 panel,下面这个终端是编译用的,与我们无关:
下面这个终端是运行程序的,我们在这里输入数据:
注意到 panel 里面还有一个 debug console,调试时我们可以在里面输入式子。
如果还不能正常使用,请看下节 launch.json。
launch.json(非必需)¶
我使用 DevC++ 自带的 gdb7.8.1 测试时,用 vscode 的集成终端无法输入数据,换成 gdb13.2 则没有此问题。解决方法是在 launch.json 中把"externalConsole"
由false
改为true
,使用外部终端。 但这样外部终端会一闪而过看不见输出,解决方法:
- 在代码的
main
函数的return 0;
前面加上system("pause");
,在 OJ 提交时去掉这行。 - 运行程序时选择 debug c/c++ file 按钮,设置断点
自动配置¶
点击右上角的齿轮图标,顶部会出现一个菜单
选择第一个 Recently Used Task,.vscode 下将会自动生成一个 launch.json
手动配置¶
页面切换至 c/c++ 代码文件,点击侧边栏的 Run and Debug,点击 create a launch.json file。
在弹出的菜单中选择 C++(GDB/LLDB),然后将生成一个新文件 launch.json。初始如图所示:
如果生成的 launch.json 不是空白的而是有了内容,则不用更改文件。
否则,点击右下角的 Add Configuration,选择 C/C++: (gdb) Launch。
然后将插入以下内容:
其中 "program" 和 "miDebuggerPath" 是一定要改的。打开 tasks.json,看到 args 的 - o 后面有一行"${fileDirname}\\${fileBasenameNoExtension}.exe"
,把 program 后面的内容改成这个。"miDebuggerPath" 就是 gdb 的路径,注意在 windows 下要使用双反斜杠,最后形如这样:
"program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
"miDebuggerPath": "C:\\Program Files (x86)\\Dev-Cpp\\MinGW64\\bin\\gdb.exe",
配置完之后再点击右上角的 run/debug 按钮,不出意外应该可以正常运行。