0. 前言
本文面向初学者,但是不适合还在学写Hello World级别的初学者。阅读本文能在一定程度上了解程序编译的知识,以及使用VS Code的知识。
本文大部分内容都可从VS Code官方文档:C++ programming with Visual Studio Code以及各个扩展的文档中获得,并且他们还会进行更新(本文也进行过几次重大更新)。如果你想更深入了解,可以去看。其实本文基本上是由不断地尝试得出来的,如果有错误可以指出。
我的环境:64位Windows 10。32位Win在某些地方需要修改,不过本文没有提;Linux下也有许多不同,仅供参考。
最终效果:实时显示编译阶段的错误、格式化代码、进行单文件的编译与调试。
1. 环境的准备
VSC的官网、下载、安装,我就不多说了。VSC只是一个编辑器(editor),不是IDE(集成开发环境),不含编译器(compiler)和许多其它功能,所以编译器要自己装好。
其实MinGW和MinGW-w64只是名字像,它们是两个不同的项目。为了方便,本文中的MinGW指的其实都是MinGW-w64。MinGW本身已经很久没有更新了,故不推荐。下载以下两个程序(都要):
LLVM Download Page在此页面下载Clang。选 Pre-Built Binaries 中的 Windows (64-bit),不需要下.sig文件
MinGW-w64 - for 32 and 64 bit Windows在此页面下载 MinGW-w64,往下稍微翻一下,选最新版本中的x86_64-posix-seh。最好不要用 Download Latest Version,这个是在线安装包,有可能因为国内的“网络环境”下载失败。如果浏览器还是下载失败就换迅雷下,还失败,那就使用能访问Google的那种方法下。
安装Clang:添加环境变量时,选Add LLVM to the system PATH for all users(即第二项,不过第三项也差不多);路径我填的是C:\LLVM,也可以保持默认或者自己改。
安装MinGW-w64:下下来的是一个7z的压缩包,随便解压到哪,把东西全部复制(或者直接剪切)到Clang的文件夹里去(除非你有自己的想法),它们会无冲突合并,然后就可以把它删了:
验证
运行cmd,输clang或gcc,应该会提示no input files而不是“不是内部命令或外部命令”或者“无法将“clang”项识别为 cmdlet、函数、脚本文件或可运行程序的名称”,见下图。如果是“不是内部命令或外部命令”,说明clang.exe在的文件夹(我图里的是C:\LLVM\bin)没有在环境变量中,要加到Path里才行。如果加了还是这样,重启。
输clang -v或gcc -v可以显示出各自的版本。如果显示出来的版本与你刚下的不同/更老,说明Path里原本有老版本的编译器,可能是安装其它IDE时装上的。则需要去掉原来的。
这两项验证一定要符合。如果你不知道怎么修改环境变量可以自己百度或者b站搜“环境变量”看视频(大多不是C的但是区别不大)。
输入gcc -v的最后一行输出,版本要和你自己下的对应,要有x86_64和seh;sjlj是以前的,图懒得改了
安装扩展(extension)
必装:
C/C++:又名 cpptools,提供Debug和Format功能
C/C++ Clang Command Adapter:提供静态检测(Lint)功能
Code Runner:右键即可编译运行单文件,很方便;但无法Dubug
其他可选扩展:
Bracket Pair Colorizer:彩虹花括号
Include Autocomplete:提供头文件名字的补全,不过用处不大;而且其实现在cpptools已经自带这个功能了,但本文不使用它的补全
C/C++ Snippets:Snippets即重用代码块,效果自己百度;这个扩展安装量虽高,不过个人感觉用处实在不大,你也可以选择其他的Snippets扩展甚至自己定义
One Dark Pro:大概是VS Code安装量最高的主题
vscode-clangd:这个和Adapter二选一,出得比Adapter晚,下载量也低,但却是llvm官方出的。出现问题时可以换着试试
Clang-Format:只有想自定义代码风格时才装,比如大括号不换行。需要另外学习如何使用
不建议/不需要装的扩展:
GBKtoUTF8:把GBK编码的文档转换成UTF8编码的。此扩展可能有严重的bug。
C++ Intellisense:用的是gtags,本文第一个版本的选择。效果非常非常一般。
FAQ
Q: 为什么要装Clang?
A: 错误提示更友好。以及:Clang 比 GCC 好在哪里?
Q: Clang怎么读?
A: 正确答案是/ˈklæŋ/,即c发"可"的音;不过实际还是以双方都理解为基础,比如平常把SQL说成circle也是能理解的
Q: 为什么既要装Clang又要装MinGW?
A: Clang没有stdio.h等头文件。至于为什么没有,我就不知道了;也许就是下一点的原因
Q: MSVC integration install failed / unable to find a Visual Studio installation...
A: Win下的Clang默认用的是MSVC的后端。如果完全按照本文接下来的操作,不用管这个提示
2. 配置四个.json文件
先创建一个你打算存放代码的文件夹(称作工作区),路径不能含有中文和引号,最好不要有空格。C和C++需要分别建立不同的工作区,除非你懂得下面json文件的某些选项,则可以做到一个工作区使用不同的build task。
打开VSC,选打开文件夹,不要选“添加工作区文件夹”,理由见上一句。点新建文件夹,名称为.vscode。这样操作的原因是Windows的Explorer不允许创建的文件夹第一个字符是点(但据说1809的下一个大版本支持了)。然后创建 launch.json,tasks.json,settings.json,c_cpp_properties.json放到.vscode文件夹下,效果图:
复制以下代码出来后,知乎会自动在前面加上几行保留所有权利的字,实际使用的时候肯定要删了的。每个小节的开头都有选项说明。特别提示:默认F5只能编译C,如果你要调试C++,必需改tasks.json,具体参见小节说明。
launch.json代码
stopAtEntry和externalConsole可根据自己喜好修改;cwd可以是程序运行时的相对路径&#x