需要说明,VS Code是一个插件丰富,交互良好的编辑器;而Visual C++、Dev C++是一个IDE(Integrated Development Environment)即集成开发环境。想要用VS Code来处理你的C项目,你需要赋予这个编辑器3个能力。
1.能编译代码
2.可运行、调试程序
3.可读头文件库
你需要为Vs Code提供一个IDE,可选择的有:
MinGW:诞生最早,只能编译生成win32程序
MinGW-w64:作为MinGW的分支而诞生,随后独立。支持编译生成Win32和Win64的程序
TDM-GCC:非官方的编译器集成包,但仍然基于MinGW、MinGW-w64。支持编译生成Win32和Win64的程序
GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。
gcc是GCC中的GUN C Compiler(C 编译器)
g++是GCC中的GUN C++ Compiler(C++编译器)
gcc和g++只是一种驱动器,而不是编译器。他们会根据参数中要编译的文件的类型,调用对应的GUN编译器,比如,使用gcc编译一个c文件,一般会有以下几个步骤:
Step1:Call a preprocessor, like cpp.
Step2:Call an actual compiler, like cc or cc1.
Step3:Call an assembler, like as.
Step4:Call a linker, like ld
*所以,更准确的说法是:gcc调用了C compiler,而g++调用了C++ compiler
接着说为VsCode提供一个IDE:
1.如果你过去使用着Visual C++、Dev C++处理你的C代码,那说明你的电脑上是安装了IDE的,以Dev C++为例,MinGW64的bin路径一般在C:\Program Files (x86)\Dev-Cpp\MinGW64\bin。检查一下你是否配置了环境变量,win+r快捷打开运行窗口,输入cmd,命令行->gcc -v,如果能查到版本信息说明你已配置好环境变量。
否则,请配置环境变量
2.如果你是从0开始,想尝试用VsCode处理你的C代码,IDE建议使用MinGW-w64,你可能会遇到下载速度惊人的问题,请自行搜索别人分享的网盘包。解压后,如上图配置环境变量,检验是否能在cmd中查询到版本信息。
VsCode是一个插件非常丰富的编辑器,想要运行程序,你需要安装两个插件C/C++和Code Runner
因为VS需要为每一个文件夹做单独配置,所以请新建一个文件夹,接下来的配置将会在这个文件夹及其子文件夹中生效。
1.在文件中新建test.c,
#include
int main(){
printf("hello");
getchar();
return 0;
}
按F5调试,选择第一项,
注意文件夹目录,将自动生成的launch.json文件修改为:
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch",
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch",
"program": "${fileDirname}/${fileBasenameNoExtension}.exe",// 将要进行调试的程序的路径
"args": [],
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${fileDirname}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
"environment": [],
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",
"miDebuggerPath": "C:\\Program Files (x86)\\Dev-Cpp\\MinGW64\\bin\\gdb.exe", // miDebugger的路径,注意这里要与MinGw的路径对应
"preLaunchTask": "gcc", // 调试会话开始前执行的任务,一般为编译程序,c++为g++, c为gcc
"setupCommands": [
{
"description": "Enable pretty-printing for gdb",
"text": "-enable-pretty-printing",
"ignoreFailures": true
}
]
}
]
}
保存后,返回test.c,按F5调试,现在将会出现提示
选择配置任务—>使用模板创建task.json文件—>Others
注意文件夹目录,将自动生成的tasks.json文件修改为:
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"type": "shell",
"label": "gcc", //请与launch.json中的"preLaunchTask"的value保持一致
"command": "C:\\Program Files (x86)\\Dev-Cpp\\MinGW64\\bin\\gcc.exe",
"args": [
"-g",
"${file}",
"-o",
"${fileDirname}\\${fileBasenameNoExtension}.exe"
],
"options": {
"cwd": "C:\\Program Files (x86)\\Dev-Cpp\\MinGW64\\bin"
},
"problemMatcher": [
"$gcc"
]
}
]
}
现在你需要的配置已经几乎完成,如果你不是Visual 移步过来的用户,你应该会遇到这个问题。这是因为VsCode会优先用Visual和wsl的编译器,如果两者都没有检测到,VsCode才会使用minGW-64。
选中头文件那行,点击冒出的黄色,选择编辑”includePath“设置。注意注意文件夹目录,将自动生成的c_cpp_properties.json文件修改为:
注意更改“includePath”,你的"includePath"可以在cmd中输入 gcc -v -E -x c++ - 来查询,路径正确的话保存后,头文件库就能正常识别了。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceRoot}",
"C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++",
"C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++/x86_64-w64-mingw32",
"C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include/c++/backward",
"C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include",
"C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../include",
"C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/include-fixed",
"C:/Program Files (x86)/Dev-Cpp/MinGW64/bin/../lib/gcc/x86_64-w64-mingw32/4.9.2/../../../../x86_64-w64-mingw32/include"
],
"defines": [
"_DEBUG",
"UNICODE",
"__GNUC__=6",
"__cdecl=__attribute__((__cdecl__))"
],
"intelliSenseMode": "msvc-x64"
}
],
"version": 4
}
如果上述问题都解决了,但是你发现使用快捷键F5能唤出cmd终端,而使用RunCode的一键运行,却显示无法识别的问题,那么请重启电脑,你的问题可能会得到解决。笔者纯粹是想使用vscode代替dev c++来满足我的刷题需求。从浩瀚的网络海洋中寻找自己需要的信息,往往需要花费数小时,所以我将过程中相关的知识整理成文,分享,学习。