过程
- 安装vscode
- MinGW-w64 - for 32 and 64 bit Windows 稍微往下翻一下,找到
MinGW-W64 GCC-5.4.0
的x86_64-posix-seh
安装。为什么是这个版本?因为牛客支持的两种C++编译器分别为C++14(G++5.4.0)
和C++11(glang 3.9)
,这里保证与牛客相同 - 解压MinGW压缩包到你想安装的路径。添加bin目录到环境变量path中:
win10以下的操作系统需要重启,以生效更改。 - 安装vscode插件:
- C/C++:又名 cpptools,提供Debug和Format功能
- Code Runner:右键即可编译运行单文件,很方便;但无法Dubug
- 新建工程,在工程目录下新建.vscode文件夹,在文件夹下新建
launch.json
、tasks.json
、c_cpp_properties.json
文件:
launch.json
内容:
// launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "C++ Launch (GDB)", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"targetArchitecture": "x64", // 生成目标架构,一般为x86或x64
// "program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径
// "args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
// 方法一:防止debug时程序一闪而过的方法
// "program": "C:/Windows/System32/cmd.exe",
// "args": [
// "/K",
// "${fileDirname}/${fileBasenameNoExtension}.exe"
// ],
// 方法二:
"program": "C:/Windows/System32/cmd.exe",
"args": [
"/C",
"${fileDirname}/${fileBasenameNoExtension}.exe",
"&",
"pause"
],
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceRoot}", // 调试程序时的工作目录,一般为${workspaceRoot}
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡",
"MIMode": "gdb", // 指定连接的调试器
"miDebuggerPath": "C:/mingw64/bin/gdb.exe", // 调试器路径
"setupCommands": [
{
"description": "Enable pretty-printing for GDB",
"text": "-enable-pretty-printing",
"ignoreFailures": false
}
],
"preLaunchTask": "Compile"
}
]
}
tasks.json
内容:
// tasks.json
{
"version": "2.0.0",
"tasks": [
{
"label": "Compile",
"command": "g++",
"args": [
"${file}", // 指定编译源代码文件
"-o",
"${fileDirname}/${fileBasenameNoExtension}.exe", // 指定输出文件名,不加该参数则默认输出a.exe
"-O0", // 优化级别
"-ggdb3", // 生成和调试有关的信息
"-Wall", // 开启额外警告
"-static-libgcc", // 静态链接
//"-std=c++17", // 使用c++17标准
"-std=c++14", // 使用c++14标准
"-finput-charset=UTF-8", //输入编译器文本编码 默认为UTF-8
"-fexec-charset=GB18030", //输出exe文件的编码
"-D _USE_MATH_DEFINES"
],
"problemMatcher": {
"owner": "cpp",
"fileLocation": [
"absolute",
],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
},
"type": "shell",
"group": {
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "always", // 在“终端”中显示编译信息的策略,可以为always,silent,never
"focus": false,
"panel": "shared" // 不同的文件的编译信息共享一个终端面板
},
}
]
}
c_cpp_properties.json
内容:
{
"configurations": [
{
"name": "MinGW64",
"intelliSenseMode": "gcc-x64",
"compilerPath": "C:/mingw64/bin/g++.exe",
"includePath": [
"${workspaceFolder}"
],
"cppStandard": "c++14"
}
],
"version": 4
}
其他问题
- C++按F5执行程序后一闪而过:
解决:在launch.json中修改program和args
方法一原理:
通过 cmd 的参数 “/K” 来实现
意思是: 是执行完命令后不关闭命令窗口
方法二原理:
这个方法主要是通过cmd的参数 “/C” 来实现,它的效果是:“执行字符串指定的命令然后终止”。此外,还可以通过 ”help cmd“来查看所有可用的参数。
TODO:
- 完善并简化过程
- 显示程序运行完的时间(不包括输入样例的时间)
- 最好能自动读取测试样例文件
- vscode控制台输入字符数有上限,太长的测试用例输入不了,尝试重定向cin之类的操作
相关/参考链接
VSCode C++ 运行结束马上退出, 窗口一闪而过解决办法, 不修改代码 | 文章开头还给了几个微软官方教程,教你如何在vscode上配置c++环境
Get Started with C++ and Mingw-w64 | 官方教程,还教你如何debug
Visual Studio Code 如何编写运行 C、C++ 程序? - 谭九鼎的回答 - 知乎
Visual Studio Code -> VSCode 开发环境搭建 ---- C/C++ 开发环境搭建 及 代码运行(code runner 插件)
vscode for c/c++(ACM配置)