0%

使用VScode编写C++文件

第一次接触visual studio code是在大一上学期,正是初学C语言的时候。那时候老师与学长推荐的集成开发环境(IDE)主要是Dev C++与code block,这两款IDE的优点是简单,小巧,可以很快速的使代码运行起来,但他们都有很致命的缺点,就是界面不够美观,虽然在网上都能找到一些教程对其进行美化,但能做到的也只是不再难看而已,与真正做到好看相比还差的很远。

恰巧那段时间因为学习前端的知识而了解到VS code这款编辑器,同样是写代码,利用VS code写HTML,CSS,JavaScript比用code block写C体验好多了,而也惊喜的发现,VS code支持书写C/C++程序\(≧▽≦)/,于是就想使用VS code编写C程序,但当时不明白VS code只是一个编辑器且不带编译器,并不能直接编译,运行C程序,而且在查看一些C文件时会出现乱码现象一脸懵逼(o゜▽゜)o☆(当时并不知道时编码的问题),于是在查找了众多资料无果后只好放弃〒▽〒。

时过境迁,一年的学习,学习的语言由简单的C拓展到C++,JAVA,C#等多种语言,编程的模式由简单的面向过程到C++式的多种模式混合,C#窗口的事件-响应函数,unity的逐帧调用等多种模式,知识储备量有了一定的提升(●ˇ∀ˇ●),再回过头来,依旧还是想用VS code编写C/C++程序,于是在某一天,一句一句看懂了官网的文档,一步一步调试,终于在最后调试成功(´▽`ʃ♡ƪ)!经过了一段时间的使用,体验还算不错,在这里记下环境配置的方法,也记录下自己的小小激动。

Tip: 本次记录的是在Windows10下搭建的环境(Linux下的还没折腾出来◑﹏◐)

2018年12月30日更新:经过一段时间折腾,发现了其它使用VS code进行C/C++编程的方法,已经整合在了原文中。

配置方法

安装 Visual Studio Code

最开始的步骤当然时安装VS code啦,进入官网,点击很显眼的 Download 按钮,下载VS code。 值得一提的是,点击下载之后网页会自动跳转到VS code的文档界面,在这里会很方便的找到如何配置各种语言环境的说明,写的也都比较详细,是本次配置的主要参考资料。

安装 Microsoft C/C++ extension

首先安装 Microsoft C/C++ extension,这是微软自家研发的VS code插件,内置了编写C++的众多工具。

  1. 打开VS code
  2. 点击左侧侧边栏的扩展图标或者使用快捷键ctrl+shift+x打开扩展界面
  3. 在搜索框搜索 C++ 寻找Microsoft C/C++ extension。
  4. 点击安装,安装结束后点击重载

安装MinGW-w64

MinGW-w64是著名C/C++编译器GCC的Windows版本,是VS code官网推荐在Windows上使用的编译器(虽然官网在这里直接略过了( ˉ ▽ ˉ;)…)。

在网上找到了一篇介绍非常详细的博客《⑨也懂系列:MinGW-w64安装教程》,然后是MinGW-w64的官方网址,貌似会因为墙的原因使用在线安装包会失败,可以下载打包好的文件夹,在SourceForge中下载就好。

接下来分别介绍三种配置方法

一、官方配置教程

配置三个.JSON文件,搭建基本环境

使用VS code编写C/C++需要建立一个工作区域的文件夹,在这个文件夹里搭建好环境。我的做法是先搭建好一个文件夹作为模板,后续使用的时候复制该文件夹。

新建一个文件夹,在文件夹中新建一个helloworld.cpp(命名不要换别的,后续会有说明)文件,并通过VS code打开该文件夹。

配置c_cpp_properties.json文件

使用快捷键ctrl+shift+p调出命令界面,输入Cpp以找到C/Cpp: Edit configurations命令

按照注释复制以下代码到文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"compilerPath": "C:\\MinGW\\mingw64\\bin\\gcc.exe",//这里替换成自己电脑上对应的地址
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "msvc-x64"
}
],
"version": 4
}
配置tasks.json文件

使用快捷键ctrl+shift+p调出命令界面,找到Tasks: Configure Task命令

单击后点击使用模板创建task.json文件

单击Others

将下述代码复制到文件中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"version": "2.0.0",
"tasks": [
{
"label": "build hello world",
"type": "shell",
"command": "g++",
"args": [
"-g", "helloworld.cpp"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
配置launch.json文件

单击调试或者使用快捷键F5调出调试界面

选择C++(GDB/LLDB)

按注释中的提示粘贴以下代码到弹出来的文件中

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": "(gdb) Launch",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/a.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${workspaceFolder}",
"environment": [],
"externalConsole": true,
"MIMode": "gdb",
"miDebuggerPath": "C:\\MinGW\\mingw64\\bin\\gdb.exe",//替换成自己电脑上对应的位置
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
],
"preLaunchTask": "build hello world"
}
]
}

各种设置

上述三个文件写好之后保存,基本的环境就已经搭建起来了,在.cpp中编写好代码,使用快捷键F5就可以看到一闪而过的终端,表明环境搭建正确,已经可以使用VS code进行C/C++的编程。

但以上三个文件都是按照官网给的示例配置的,使用起来可能不是很顺手,我是在它的基础上修改了一些

修改.cpp命名

在官网给出的文档中,默认了使用helloworld.cpp这个文件名,若想替换的话,需要修改task.json文件的args参数,以main.cpp为例

1
2
3
"args": [
"-g", "helloworld.cpp"
],

修改为

1
2
3
"args": [
"-g", "main.cpp"
],

修改.exe文件名

经GCC编译出的程序默认名为a.exe,和我的习惯不太搭,这个也是可以修改的,其实如果了解过GCC的话,很容易就能猜出task.json文件的args参数就是使用GCC编译时的命令,所以只需要在原有基础上再添加一个命令就好。

这里以main.exe为例,在task.json中添加下列命令

1
2
3
4
"args": [
......
"-o", "main.exe"
],

之后修改launch.json中的program参数为

1
"program": "${workspaceFolder}/main.exe",

终端一闪而逝

有个比较难接受的事情是使用VS code进行调试时程序一旦结束终端就会关掉,给调试带来了一定的困难,这点的原因是程序结束了就结束了,一些IDE会在最后加上一个命令让它停在那里,而VS code自然不会带这个,比较一般的解决方案是在代码最后加上getchar(),cin.get(),system("pause")这样的代码,在绝大多数情况下这样写显示的结果和需要的是一样的

或者换个解决思路,需要显示终端可能是因为需要查看中间结果或者最终结果。对有后者,可以参加下一条的重定向,而前者则可以使用VS code自带的终端代替,方法为将launch.json中的externalConsole设置为false,即:

1
2
3
4
5
{
......
"externalConsole": false,
......
}

OI/ACM ICPC等算法题目的文件重定向

在很多算法竞赛或者是算法题目中,后台会将提交的代码输入输出重定向到对应的文件中,这样处理起来会很快。而在写题的时候,也有不少选手也会做类似的处理,加上freopen之类函数,一方面测试的速度可以加快,另一方面也能很好的对数据进行分析。

而在VS code中,可以通过一些小配置达到更理想的情况,使程序从一个指定文件中读入数据并输出到另一个指定的文件中,原理也是使用了一些命令。

以从同目录下的in.txt读入并输出到out.txt为例。

task.json文件的"args": []中添加参数,效果如下

1
2
3
4
5
6
"args": [
"<",
"in.txt",
">",
"out.txt"
],

这样就实现了从in.txt中读取数据并输出到out.txt中。

关于使用vscode做算法竞赛请看这篇 《以最优雅的方式做算法竞赛》

二、使用C/C++ Compile Run插件

老实讲这个方法我是拒绝的o((>ω< ))o,之前为了配置环境,写配置文件看了很多东西,结果用这种方法,竟然这么简单……

下载C/C++ Compile Run

直接在VS code的插件商店里搜索C/C++ Compile Run
然后一路安装重新加载。




使用F6一键编译运行

写好C/C++程序之后,直接使用F6一键编译运行就能出结果。QAQ

可以看出来程序在终端页面进行执行,成功运行并结束。

而且更关键的是,这个编译运行的是当前编辑的文件,也就是说,不必一个文件夹配置一个环境来编写程序,只要有代码就好,,ԾㅂԾ,,

和官网的方法比起来,使用C/C++ Compile Run插件更为方便快捷,也更加简单,但是因为没有了配置文件,灵活性会差点。

三、使用终端

方法二中插件的做法给了我另外一种思路。

既然在Windows下本质都是间接使用mingw,那为什么不直接在命令行用mingw呢?比较令人兴奋的是,VS code提供了另一种使用终端的方法

使用ctrl+shift+`打开终端

在VS code中,可以使用快捷键 ctrl+shift+` 新建一个终端(有点类似于在一些安装了图形化界面的Linux中在当前文件夹打开终端的命令)。

接着,使用g++ main.cpp -o main.exe或者gcc main.cpp -o main.exe编译源代码

使用./main.exe运行程序

能够在在VS code里使用终端还是挺让人惊艳的,而直接利用mingw进行编译,速度较其它方法快多了,而且可以通过调整参数,使得编译更加的灵活。

一些推荐的插件

毕竟用VS code的还是因为想要个好看的界面,有一些有意思的插件不得不说下

  • background 为VS code加上一个可爱的小姑娘作为背景(。^▽^),亦可以自定义最多三张图片作为背景图片,配置的时候需要一些简单的CSS基础。

  • Bracket Pair Colorizer 彩虹花括号插件,为代码中的括号加上色彩,整体更加漂亮,结构也比较清晰。

  • One Dark Pro 一个主题插件,蛮好看的倒是。

一些小tip

除了使用插件之外,VS code还有一大堆设置,具体都在文件=>首选项=>设置里,不过能看到有用户设置工作区设置,他们之间的关系有点类似于C语言中的全局变量与局部变量,如果修改了工作区设置,会在当前文件夹中自动生成一个settings.json文件,记录下各个改动,对于某一工作区而言,工作区设置的优先级要高于用户设置,一旦工作区设置中的某项设置不为默认值,则使用工作区设置下的该项设置,否则采用用户设置下的该项设置

写在后面

到目前为止,VS code依旧是我用起来最顺手的编辑器没有之一┗|`O′|┛ 嗷~~,它优秀而又强大的扩展性满足了我对一个编辑器的绝大多数想象,我在不断的折腾中一次又一次的见识到了它的魅力,我相信它会伴随我相当一段时间。

后续的话,会逐渐写些VS code对其它语言的支持,当然前提是学了那些语言👻。不过目前的打算是先学精一门语言,漫无目的的游荡了好长时间,我得静下心来了。