vscode的安装,及使用vscode运行c程序
vscode是什么?
百度上有更详细的介绍,这里就做个大概总结。
vscode是跨平台、免费开源的代码编辑器。在macOS、windows和Linux都能用。
vscode支持几乎所有代码语言的语法高亮、代码补全、自定义快捷键。
vscode是一款编辑器,提供丰富的插件。
所有平台都会提供两个版本:稳定版和体验版。
在官网vscode.com找到的下载页面有稳定版stable和体验版insiders的标记。建议下载稳定版,体验版每周都会更新,可能会产生bug,虽然可以提前体验最前沿的功能。
vscode怎么下载安装?
也可以在浏览器搜vscode,找到vscode官网。
网站会更新,可能需要点一堆网页的元素才能完成下载。所以写的操作步骤具有时效性。
写这篇笔记的时间是2024年10月23日的情况,不知道多久后页面会发生改变。
![]()
点击Download for windows后会自动下载。
![]()
下载完vscode安装包后放到指定路径,之后双击安装包。之后就是经典的安装流程。我用的安装包版本是VSCodeUserSetup-x64-1.74.1
,下图的安装流程也是这个版本的。

修改数据的路径到D盘。
复选框全打勾。
这个不知道是啥,我直接点下一步。
点击安装即可。
vscode的基础页面:
vscode默认是英文版本,应该有中文插件。
找到插件栏,搜索chinese,即可找到简体中文的插件。它能将vscode进行汉化。安装语言包后会提示重启vscode。
vscode最左边还可以安装各种扩展包。
vscode配置c/c++开发环境
vscode只能用来编辑代码,要想运行c++,此时需要编译器。
MinGW-w64,windows平台的gcc移植版本。
点击下载MinGW-w64最新版。
下载的压缩包解压,找到MinGW-w64,将它放在容易管理的路径。其中的bin目录下都是gcc等可执行工具。MinGW-w64不要放在中文路径下,可能会因为编码原因无法识别。
下载完成后还需要配置到自己想要的目录。
之后按windows+s打开搜索框,搜环境变量。将mingw64/bin这个路径添加进path环境变量。进行完这一步gcc、g++即可通过命令行的方式去使用。
例如, gcc --version
,即可查看gcc版本。
之后在vscode中搜c/c++,即可找到c/c++的插件(一般是第一个)。安装后重启即可。
在vscode编辑、运行c代码
用vscode写代码应该管理到指定文件。
文件夹可以指定日期。但名字不能(尽量不用)有空格和特殊字符。
在vscode中打开文件夹,选择指定文件夹打开。vscode会将文件名称大写。
没打开过则需要勾选信任。
vscode设置c/c++的编译选项
鼠标选中.c文件的内部,按Ctrl+Shift+p(或依次点击 帮助
→
\rightarrow
→显示所有命令)弹出界面,找到c/c++编辑配置(UI)(c/c++:Edit configurations (UI))。
点击编辑配置(UI)后,会在资源管理器处生成目录.vscode
,里面会发现有一个c_cpp_properties.json的文件,编辑配置其实是编辑这个文件。首先配置编译器路径,虽然有时默认是vs2019的MSVC(即cl.exe,因为自己的电脑有装vs2019),但可以改成minGW64。编译运行c语言用gcc.exe,c++则用g++.exe。
IntelliSense模式即c/c++代码智能报错,若选了minGW64,则要选gcc-x64(legacy),当设置好后资源管理器生成.vscode文件夹。其中有个文件c_cpp_properties.json,里面指定了编译器的路径等信息。
做完这些,可以看到c_cpp_properties.json中的信息。
vscode生成tasks.json文件
tasks.json用于编译个执行构建任务。
首先选中main
函数所在的c/c++文件,在终端中点击配置任务后第一次会弹出界面。
选gcc.exe使代码更好地跨平台。选中之后会生成tasks.json的配置文件。
vscode编译和执行c
编译.c是依赖tasks.json进行。
想编译哪个文件,鼠标选中哪个文件。首先先配置任务生成文件tasks.json。这里已经配置过。
后点击终端找到运行生成任务。
之后即可在终端窗口看到相关信息。c语言的话选择gcc.exe,c++选择g++.exe。
配置生成任务的信息在tasks.json中有记录。后生成.exe文件:
若想执行生成的.exe
可执行文件,鼠标选中.c文件的编辑页面,按ctrl+`(Esc键位下面的那个),即可弹出终端窗口。或者在终端中找到新建终端。
输入.\name.exe
,回车即可执行.exe
。若.exe
不在根目录下而是子文件夹中,还要修改格式为:子文件夹名\name.exe
。
这个和命令行窗口(cmd)十分类似,尝试输入exit使它终止运行,可以用。
若还想写其他代码,就在原来的文件夹
就在当前的文件夹(Java编程称为包)里重新生成testc2.c
文件(假设包含主函数main)。
若只想编译testc2.c
文件,鼠标选中testc2.c
的编辑界面(其他.json不用改动)
之后直接点击运行生成任务。则可看到生成testc2.c对应的.exe文件。
别的.exe
对新生的testc2.exe
运行毫无影响。
若还想写其他代码,生成新的文件夹
可以在旧的文件夹下新建文件夹。
也可以在别的路径新建别的文件夹。
要在新的test3文件夹下写代码,则需要关闭当前文件夹。
关闭文件夹后会回到vscode的欢迎界面。再打开文件夹即可。
之后重新写代码,将.vscode拷贝到新文件夹后即可直接执行运行生成任务,而不用额外配置**.json**文件。
vscode编译同个文件夹的多个.c代码
假设某个工程有两个.c文件:test.c
和add.c
,test.c
里的main
函数想调用add.c
里的Add
函数,
可以加关键字extern
调用外部符号。
同时需要注意,蓝色边界线选中的是.vscode
这个文件夹,则vscode会将文件生成在.vscode
文件夹内。
想生成在大文件夹或者别的指定文件夹,则需要使蓝边界选中。
代码写完后,表示编译选项信息的c_cpp_properties.json
无需更改。
但tasks.json
是我们在编译过程中的编译选项,这个需要修改配置使得一个文件夹里的多个文件能够编译。
改进方式如下:
${file}
是指要编译的文件,但仅对于指定文件。因此需要改成${workspaceFolder}\\*.c
。若全是.cpp
文件,则把.c
换成.cpp
即可。其中\\
是路径分隔符,*.c
是指目录下所有的.c
文件。
此外,多个.c
文件对于输出的\.exe
的名字也要做相应的修改。这里我们尝试将输出的文件名字和文件夹的名字相同,于是将${fileDirname}\\${fileBasenameNoExtension}.exe
改成${workspaceFolder}\\${workspaceRootFolderName}.exe
。
之后运行生成任务即可生成以文件夹命名的.exe
文件。(演示效果1)
修改完成之后还是不能用,则可再点击配置文件。
vscode编译多个
.c
代码时有时会遇到自定义头文件以及头文件附属文件的情况(如A.h
和A.c
,A.h
负责声明函数、结构体等,A.c
负责实现A.h
中的函数等)。需要重新生成
tasks.json
,之后将tasks.json
中的${file}
改成${workspaceFolder}\\*.c
。若全是.cpp
文件,则把.c
换成.cpp
即可。有时可能不行,需要重启vscode。
vscode使用操作系统指令编译.c代码
相比于上方的步骤,这个更加简洁。
编译单个.c源码
直接新建终端。
输入指令gcc name.c
即可生成可执行程序。这个版本的gcc生成的可执行程序默认为a.exe
。前提是代码在编译过程中无错误。
后在终端输入.\a.exe
即可运行程序。用反斜杠\
是因为终端的路径也用这个符号。
若想让生成的可执行程序变成我们想要的文件名,可以更换指令为
gcc name.c -o name.exe
。
name.exe
的取法不固定,甚至可以不用加拓展名。但前提是以后能认出来这个是啥。
编译多个.c源码
例如这是一个声明和定义分离的代码:
同样可以输入指令gcc *.c
生成可执行程序a.exe
。
同样可以输入指令gcc *.c -o name.exe
将文件夹下所有的.c
文件一起编译,生成可执行程序。前提是代码在编译过程中无错误。
通过vscode观察c语言程序的编译过程
c语言的编译过程
- 源码阶段,文件拓展名都是
.c
,是程序员编辑的c语言文本。其中还含有用于声明的头文件。 - 预编译阶段(
*.i
),进行这些工作:
- 头文件包含,由
#include
指令完成。即将头文件内容展开。- 删除注释。
#define
指令的符号替换。
- 编译阶段(
*.s
),进行这些工作:
- 语法分析
- 词法分析
- 语义分析
- 符号汇总,将
*.i
文件翻译成汇编代码。
- 汇编(生成可重定位目标文件
*.o
)
- 形成符号表
- 汇编指令
->
二进制指令->
*.o
vs的MSVC生成的是
.obj
,而gcc生成的是.o
。
- 链接
- 合并段表
- 符号表的合并和符号表的重定位
用一句话概括:生成的多个
.o
文件经过链接器处理生成可执行文件.exe
。
在大学的计算机相关专业的课程里有这样一门课:《编译原理》。这门课主要讲的是如何设计编译器,编译器的工作原理是什么,它按照语法规则去解析我们写的代码。
这里推荐一本书《程序员的自我修养–链接、装载与库》,里面有介绍编译原理。
通过指令逐步重现c语言的编译过程
- 预编译
通过指令gcc name.c -E
展开头文件、删除注释和替换#define
定义的符号,并将参与编译的源码的内容输出在控制台。
- 预编译并生成
.i
文件
通过指令gcc name.c -E -o name.i
(或gcc -E main.c -o main.i
)展开头文件、删除注释和替换#define
定义的符号,并将参与编译的源码的内容用另外一个文件name.i
保存。
- 编译,生成
.s
文件用于存储生成的汇编代码。
通过指令gcc -S name.c
(或gcc name.c -S
,gcc name.i -s
,gcc -s name.i
)生成汇编代码(通过name.i
),并将代码保存在name.s
中。
在visual studio系列产品中有反汇编功能,可以看到c语言源码中各语句都翻译成了哪些汇编语句。vscode或许有,但我没找到。
- 汇编,通过
.s
文件生成.o
二进制文件。
通过指令gcc -c name.c
(或gcc -c name.c
、gcc name.s -c
)生成二进制文件name.o
。准确的说是汇编代码翻译成二进制文件。
- 链接,将所有
.o
文件通过链接器处理生成可执行文件.exe
。
通过指令gcc name.s -o name.exe
将name.s
通过链接器生成可执行文件.exe
。
vscode编译c++代码
非命令行的形式
鼠标选中.cpp文件内部,按Ctrl+Shift+p(或依次点击 帮助
→
\rightarrow
→显示所有命令)打开命令选择框。打开c/c++编辑配置(UI)(c/c++:Edit configurations (UI))。
配置名称可以不改,点击添加,命名任意(例如cpp)
编译器路径选择g++.exe。
之后选则IntelliSense模式,选基于gcc和g++代码提示的工具,依旧选择gcc-x64(legacy),之后其他配置不用管。当然也可以改c++的标准。
配置完成后,选中.cpp文件,点击终端,配置任务,选择g++.exe
的弹窗,即可完成tasks.json
的配置。tasks.json
也能配置是否编译根目录中的.cpp
文件。
即可生成task.json
文件。
一切准备就绪后,光标选中.cpp
文件,点击终端,运行生成任务,注意要选择g++.exe
。后将会生成属于c++的.exe
文件。
其实上方c语言的操作对c++同样适用。
命令行的形式
将c语言的指令中的gcc
改成g++
就行。g++
和gcc
一样都是编译器,用来编译.cpp
源码。
c++出于历史原因(不如说过去用c语言的人太多,很多bug牵扯到太多人的利益不敢全改,就出新bug来试图弥补旧bug的缺陷),兼容c语言。所以c++的编译过程和c语言是一样的,将c语言的指令搬过来,将gcc改成g++就行。
为了方便拷贝,将指令写在这:
g++ name.cpp -E -o name.i
生成.i
文件
g++ name.i -S
生成.s
文件
g++ name.s -c
生成.o
文件
g++ name.o -o name.exe
链接.o
文件生成.exe
文件
vscode对头文件报红是因为没有配置c_cpp_properties.json
文件,或用了别的配置比如编译器用了cl.exe
,使得vscode的插件找不到这个头文件所在。因为是通过命令的方式调用g++,所以这个并没有什么影响。
让vscode不报红,鼠标选中.cpp文件内部,按Ctrl+Shift+p(或依次点击 帮助 → \rightarrow →显示所有命令)打开命令选择框。打开c/c++编辑配置(Edit Configuration)。即可进行配置。
或者手动更改编译器路径(compilerPath部分)
声明和定义分离的c++项目
例如这个样例:
指令g++ *.cpp
即可生成可执行程序。但名字还是a.exe
。
也可以通过指令g++ *.cpp -o name.exe
指定生成的程序的名称。
指令g++ *.cpp -E -o name.i
无法用于多个文件。但指令g++ *.cpp -E
依旧能用。
同样能用的指令还有g++ *.cpp -c
,即为每一个.cpp
文件各自生成一个.o
文件。
这些.o
文件同样可以通过g++链接成可执行文件.exe
。
vscode如何调试代码
vscode调试代码依赖launch.json,
点击左边的运行调试。
点击创建launch.json
文件,后弹出的选项中选择C++(GDB/LLDB)
。mingw64用的调试工具是这个。
生成的文件中啥都没有,点击添加配置,会弹出选项。选择c/c++: (gdb) 启动。即可增加信息。
改造生成的信息中的部分信息:
program,将tasks.json中生成可执行程序时用到的生成方式,粘贴到program后面的""中。
之后的miDebuggerPath,即调试的工具,需要自己补充。在mingw64中可以找到gdb.exe,需要将gdb.exe的路径拷贝到后面。
修改完成后,再按Ctrl+Shift+b运行生成任务(或点击终端,运行生成任务),点击生成.exe
可执行程序。注意不要通过命令行的方式生成可执行程序,因为这种生成方式生成的可执行程序无法调试。
点击运行生成任务之后,根据自己的程序是c语言还是c++选择合适的编译器。例如这里是c++项目,就选g++。
做完上面的工作之后,只需要打断点即可调试,快捷键和vs2022几乎一致。
调试的花絮:
左边也会显示监视窗口。打印的数据可以在终端查看。
调试时若存在程序员修改源码的行为,则要先手动生成.exe,否则调试是按照未修改源码前生成的.exe进行。
最后
除了gcc和g++,还可以用cmake进行编译。但自己没试过,不知道好不好用。
vscode相对于其他IDE属于轻量级。
vscode的运行文件尽量放在只有英文字符的路径下,否则会出现找不到指定文件的情况。
写这篇文章的目的是自己记性不好,偏偏用的开发环境又比较多,vscode的部分操作又特别繁琐,总是忘记vscode怎么用,因此将每一步都记录下,以后想不起来vscode怎么用时再打开文章看看。