VS Code 配置C/C++环境
目录
1.配置MinGW
1.1 检查系统是否存在MinGW
如果之前安装过 Dev-c++ 或其他自带MinGW的编译软件,则可以跳过 “配置MinGW” 部分 ~
1.1.1 官网安装 MinGW
如果系统不存在MinGW,则建议前往官网安装MinGW。
下载链接: MinGW
1.1.1.1 下载安装步骤
① 点击链接跳转,选择 Downloads
②找到 MingW-W64-builds,点击进入
③ 点击 Sourceforge
稍等几秒会自动开始下载
④ 运行下载的mingw-w64-install.exe,弹出如下对话框选Next
如果电脑网络连接的是无线网络,点击Next后可能还会弹出如下对话框提示 “Cannot download repository.txt” 而终止安装:
所以,优先选择有线网络!
⑤ 接着按下图标注选择各项即可。
⑥ 选择安装路径,可以默认路径,也可以自定义路径。设置完成后点击Next即进入在线下载页面。
(在线下载十分慢,所以推荐下面的方法直接下载文件包比较快!)
显示开始下载后直接关闭即可。
⑦ 下载离线包: 离线包链接
选择合适的版本下载即可。
Win10推荐选择:
x
86
_
64
−
w
i
n
32
−
s
e
h
\color{red}{x86\_64-win32-seh}
x86_64−win32−seh
⑧ 下载完成解压后的界面是这样的:
(解压到之前安装MinGW时的目录下)
2.设置环境变量
2.1 打开环境变量设置
此电脑 -> 属性 -> 高级系统设置 -> 环境变量
2.2 添加环境变量
在系统变量栏中新建一个名为 MinGW 的环境变量,内容如下:
D:\Program Files\MinGW\mingw64\bin
内容为你的MinGW路径,直到bin目录
如果没有D:\Program Files\MinGW\bin
目录就不用添加,一般是在官网线上下载包才是这种路径,离线下载解压后一般是D:\Program Files\MinGW\mingw64\bin
,看自己的目录结构而定。
2.3 测试环境
打开命令行输入
gcc
g++
gdb
出现以下结果即为环境变量配置成功!
3.下载相应扩展
1.Code Runner
点击Code Runner的设置->扩展设置->勾选Run in Terminal,即可在终端运行(在“输出栏运行会有乱码”)。
2. C/C++
4.运行
输入以下 c 代码用于测试:
#include<stdio.h>
int main() {
printf("hello,word!");
return 0 ;
}
点击右上角"运行"按钮即可运行代码
或右键选择"Run Code"运行代码
运行结果:
5.调试
设置断点,单击运行,选择启动调试,选择环境C++(GDB/LLDB),
此时生成了.vscode文件夹,里面包括了launch.json
和task.json
两个配置文件
此时可以开始调试了。
如果调试不能正常进行,把launch.json
和task.json
两个配置文件内容替换成下面的内容试试。
launch.json
文件
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",// 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
"environment": [],
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",
"miDebuggerPath": "D:\\Program Files\\MinGW\\mingw64\\bin\\gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
"preLaunchTask": "g++", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
task.json
文件
{
"tasks": [
{
"type": "cppbuild",
"label": "g++",
"command": "D:\\Program Files\\MinGW\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": "build",
"detail": "调试器生成的任务。"
},
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "D:\\Program Files\\MinGW\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
以下代码不用管
{
"version": "2.0.0",
"command": "gcc",
"args": ["-g","${file}","-o","${fileBasenameNoExtension}.exe"], // 编译命令参数
"problemMatcher": {
"owner": "cpp",
"fileLocation": ["relative", "${workspaceFolder}"],
"pattern": {
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
"file": 1,
"line": 2,
"column": 3,
"severity": 4,
"message": 5
}
}
}
⚠️注意:
launch.json
里的
preLaunchTask:"taskA"
这一项的值必须要和
task.json
里的label值一致
"label": "taskA"
6.VS Code 终端清屏
6.1 问题
cls
无法真正清屏,滑轮一滚动,记录就出来了…
这是因为:在window10系统,当我们在命令提示符终端使用cls命令时会得到清屏处理,往上滑动也不会再有之前的信息。
但当我们在vscode使用cls时只是调至当前行,向上滑动还是有之前的信息。
6.2 清屏处理
一个比较有效的方法是为vscode添加清屏快捷键,操作如图:
6.2.1 打开 文件->首选项->键盘快捷方式
6.2.2 法一:修改 Terminal.Clear
输入搜索
Terminal.Clear
注意右击更改when表达式为"terminalFocus",按钮为灰的就不用改!
双击此行,然后按下键盘 Ctrl + K
即可设置清楚终端快捷键。
6.2.3 法二:直接编辑keybindings.json文件
点击右上角的图标,输入以下代码即可。
[
{
"key": "ctrl+k",
"command": "workbench.action.terminal.clear",
"when": "terminalFocus"
}
]
清屏操作总结:先按cls
,再ctrl + k
(需要按文中设置快捷键)即可
7.VS Code设置代码片段(以C++为例)
VS Code设置代码片段,官网介绍
代码片段是模板,可以快速地输入重复的代码,比如循环、条件语句、注释模板等。在 VS Code中代码片段会和自动提示IntelliSense(Ctrl + Space)一起出现,也出现在专用的代码片段选择器中(在“命令面板”中插入代码片段)。还支持制表符补全:使用启用它"editor.tabCompletion": “on”,键入一个代码段前缀(触发文本),然后按Tab键插入一个代码段。
也就说, 设置自定义代码片段后,当你输入一些语句时,能够填充预设的代码!
7.1 自定义代码片段步骤
可以选择要显示代码段的编程语言,我们这里以C++为例。
打开 文件->首选项->用户代码段
选择C++语言配置环境(其他环境同理)
打开后能看到引导配置文字
{
// Place your snippets for cpp here. Each snippet is defined under a snippet name and has a prefix, body and
// description. The prefix is what is used to trigger the snippet and the body will be expanded and inserted. Possible variables are:
// $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. Placeholders with the
// same ids are connected.
// Example:
// "Print to console": {
// "prefix": "log",
// "body": [
// "console.log('$1');",
// "$2"
// ],
// "description": "Log output to console"
// }
}
说明:
-
“Print to console” 是代码段名称。如果未description提供,则通过IntelliSense显示。
-
“prefix” 定义一个或多个在IntelliSense中显示摘要的触发词(快捷键)。
-
“body” 是一或多个内容行,插入时将作为多行内容加入。换行符和嵌入的选项卡将根据插入代码段的上下文进行格式化。$1和$2是占位符,可以通过tab进行切换。
⚠️注意,不可以直接输入tab,会报错!可连按4个空格实现tab效果! -
“description” 是IntelliSense显示的代码段的可选描述。
"Add File Header": {
"prefix": "fileheader",
"body": [
"/**"
" * @file :${TM_FILENAME}"
" * @brief :$1"
" * @author :xxxx"
" * @version :V1.0.0"
" * @date :${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}"
" */"
],
"description": "Add file describe"
},
"pragma once":{
"prefix": "once",
"body": "#pragma once"
}
⚠️注意,如果有多个自定义代码片段,它们之间需要用逗号隔开。
以上实现了两个代码片段,通过 fileheader 和 once 就能分别引用到,如下:
下面给出常用的骨架:
- C语言
"C语言骨架": {
"prefix": "c",
"body": [
"#include<stdio.h>",
"int main() {",
" ",
" return 0 ;",
"}",
],
"description": "用户自定义的C语言骨架"
}
- C++
"Cpp骨架": {
"prefix": "c++",
"body": [
"#include<iostream>",
"using namespace std;",
"int main() {",
" ",
" return 0;",
"}",
],
"description": "用户自定义的Cpp骨架"
}
变量
使用
n
a
m
e
或
name或
name或{name:default},您可以插入变量的值。如果未设置变量,则将其默认值或空字符串插入。当变量未知(即未定义其名称)时,将插入该变量的名称,并将其转换为占位符。
可以使用以下变量:
- TM_SELECTED_TEXT 当前选择的文本或空字符串
- TM_CURRENT_LINE 当前行的内容
- TM_CURRENT_WORD 光标下的单词内容或空字符串
- TM_LINE_INDEX 基于零索引的行号
- TM_LINE_NUMBER 基于一索引的行号
- TM_FILENAME 当前文档的文件名
- TM_FILENAME_BASE 当前文档的文件名,不带扩展名
- TM_DIRECTORY 当前文档的目录
- TM_FILEPATH 当前文档的完整文件路径
- CLIPBOARD 剪贴板中的内容
- WORKSPACE_NAME 打开的工作空间或文件夹的名称
- WORKSPACE_FOLDER 打开的工作空间或文件夹的路径
要插入当前日期和时间:
- CURRENT_YEAR 本年度
- CURRENT_YEAR_SHORT 本年度的最后两位数字
- CURRENT_MONTH 以两位数字表示的月份(例如“ 02”)
- CURRENT_MONTH_NAME 月的全名(例如“七月”)
- CURRENT_MONTH_NAME_SHORT 该月的简称(例如“ Jul”)
- CURRENT_DATE 一个月中的某天
- CURRENT_DAY_NAME 一天的名称(例如“星期一”)
- CURRENT_DAY_NAME_SHORT 一天的简称(例如“ Mon”)
- CURRENT_HOUR 当前小时(24小时制)
- CURRENT_MINUTE 当前分钟
- CURRENT_SECOND 当前秒
- CURRENT_SECONDS_UNIX 自Unix时代以来的秒数
要插入行或块注释,请遵循当前语言:
- BLOCK_COMMENT_START输出示例:PHP/*或HTML<!–
- BLOCK_COMMENT_END输出示例:PHP*/或HTML–>
- LINE_COMMENT 示例输出:在PHP中 //