一.需要下载的安装包;

1.vscode

直接在微软官方下载最新的vscode

2.MinGw64

里面包含了gcc、gdb等前一个是编译器,后一个是debug的
传送链接:
MinGW64

往下拉点击画圈部分

再往下拉点击画圈部分,进行下载

下载好后解压里面的文件包含这几个部分;


这一步需要将bin文件添加到环境变量:
操作如下:

右击此电脑,点击属性;

点击左边高级系统设置;


点击环境变量;

双击path;

先点击新建,在点击浏览,将刚才解压出来的bin文件添加进去;这一步就完成了;

验证

按Win+R,运行cmd(不要跳这一步),输入gcc,应该会提示 no input files 而不是“不是内部命令或外部命令”或者“无法将 “gcc” 项识别为 cmdlet、函数、脚本文件或可运行程序的名称”。如果是“不是内部命令或外部命令”,说明gcc在的文件夹没有在环境变量的Path中,要加进去才行。如果加了还是这样,重启。如果重启了还不行,那就是你自己进行的操作有问题。输gcc -v可以显示出gcc的版本。如果显示出来的版本与你刚下的不同/更老,说明Path里原本有老版本的编译器,可能是安装其它IDE时装上的。则需要去掉Path里原来的那一个gcc的路径。这两项验证一定要符合,否则必须修改环境变量。小心别错删了。现在不用管clang,必定出错。clang的教程移到本文后面去了输入gcc -v的最后一行输出。版本要和你自己下的对应,例如64位要有x86_64和seh

3.下载clang


找到clang for Windows;点击下载;

下载的文件应该是上面这种;
下载好后,双击安装;
安装过程中会有一个队当前用户还是对所有用户,选择对所有用户;安装完成;

MinGW64和clang都可以编译c语言都是编译器,为什么还要下载clang呢?

先说一下两者的不同:
gcc是编译生成中间代码,和中间代码优化以及链接操作一体的,没有把这些分开;
指一套编程语言编译器。
Clang:是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端。它采用了底层虚拟机(LLVM)作为其后端。Clang项目包括Clang前端和Clang静态分析器等。
详情参考以下文章:
https://www.cnblogs.com/wuhh123/p/10668609.html
https://www.jianshu.com/p/ed17352299ec
https://www.cnblogs.com/zlcxbb/p/5759755.html
小孩子才做选择题,我们全都要!
总之我们要使用的是gcc的编译功能和clang的静态语法分析功能;

二 .安装扩展(extension)

C/C++:又名 cpptools,提供Debug和Format功能(vscode是没有debug功能的,只有安装了相当于把编辑器改装成了带debug功能的,然后也有一定的语法诊断功能,编译器只有在编译后才会给编译错误提示,但是安装了这些插件后,可以提前帮你判断有哪些语法错误,当然这需要gcc的语言服务支持,后面的clang也是一样)
Code Runner:右键即可编译运行单文件,很方便;但无法Debug

clangd()这个插件可以帮我们进行静态语法分析,在我们编代码时就告诉我们哪里代码有问题需要怎么改,可以帮我们节省大量的时间;但是它是需要在clang语言服务下才能工作,也就是前面下载的clang;

三.文件配置

需要配置三个文件:

.json文件是一种数据交换文件,就是平常我们接触较多的是界面UI来设置,简单方便,而.json文件就是代码版的设置界面,对程序员来说更为直接;
官方文档有对着三个文件的介绍:
https://code.visualstudio.com/docs/cpp/config-mingw

1.launch.json文件

有两种方式打开:一个是在.vscode文件里新建一个,另一个是如下图所示:
先点击左边画圈按钮,在点击上边画圈按钮;就可以打开;

文件中配置为:

{"version": "0.2.0","configurations": [{/*和上面设置按钮旁一样名称*/  "name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示"type": "cppdbg", // 配置类型,cppdbg对应cpptools提供的调试功能;可以认为此处只能是cppdbg"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)"program": "${fileDirname}/${fileBasenameNoExtension}.exe", // 将要进行调试的程序的路径"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可"stopAtEntry": true, // 设为true时程序将暂停在程序入口处,相当于在main上打断点"cwd": "${workspaceFolder}", // 调试程序时的工作目录,此为工作区文件夹;改成${fileDirname}可变为文件所在目录"environment": [], // 环境变量"externalConsole": true, // 为true时使用单独的cmd窗口,与其它IDE一致;18年10月后设为false可调用VSC内置终端"internalConsoleOptions": "neverOpen", // 如果不设为neverOpen,调试时会跳到“调试控制台”选项卡,你应该不需要对gdb手动输命令吧?"MIMode": "gdb", // 指定连接的调试器,可以为gdb或lldb。但我没试过lldb
/*这个要设置为debug器路径*/"miDebuggerPath": "E:/mingw64/bin/gdb.exe", // 调试器路径,Windows下后缀不能省略,Linux下则不要"setupCommands": [{ // 模板自带,好像可以更好地显示STL容器的内容,具体作用自行Google"description": "Enable pretty-printing for gdb","text": "-enable-pretty-printing","ignoreFailures": false}],"preLaunchTask": "Compile" // 调试会话开始前执行的任务,一般为编译程序。与tasks.json的label相对应}]
}

2配置task.json

一个是直接在.vscode文件里新建,另一个是
Ctrl+shift+p调出命令栏,搜索Tasks:configure Tasks,点击打开

// https://code.visualstudio.com/docs/editor/tasks
{"version": "2.0.0","tasks": [{"label": "Compile", // 任务名称,与launch.json的preLaunchTask相对应"command": "gcc",   // 要使用的编译器,C++用g++"args": ["${file}","-o",    // 指定输出文件名,不加该参数则默认输出a.exe,Linux下默认a.out"${fileDirname}/${fileBasenameNoExtension}.exe","-g",    // 生成和调试有关的信息"-m64", // 不知为何有时会生成16位应用而无法运行,加上此条可强制生成64位的"-Wall", // 开启额外警告"-static-libgcc",     // 静态链接libgcc,一般都会加上"-fexec-charset=GBK", // 生成的程序使用GBK编码,不加这条会导致Win下输出中文乱码;繁体系统改成BIG5// "-std=c11", // 要用的语言标准,根据自己的需要修改。c++可用c++14], // 编译的命令,其实相当于VSC帮你在终端中输了这些东西"type": "process", // process是把预定义变量和转义解析后直接全部传给command;shell相当于先打开shell再输入命令,所以args还会经过shell再解析一遍"group": {"kind": "build","isDefault": true // 不为true时ctrl shift B就要手动选择了},"presentation": {"echo": true,"reveal": "always", // 执行任务时是否跳转到终端面板,可以为always,silent,never。具体参见VSC的文档"focus": false,     // 设为true后可以使执行task时焦点聚集在终端,但对编译C/C++来说,设为true没有意义"panel": "shared"   // 不同的文件的编译信息共享一个终端面板},"problemMatcher":"$gcc" // 捕捉编译时终端里的报错信息到问题面板中,修改代码后需要重新编译才会再次触发// 本来有Lint,再开problemMatcher就有双重报错,但MinGW的Lint效果实在太差了;用Clang可以注释掉}]
}

3.配置c_cpp_properties.json

一个是新建一个文件;
另一个是在命令栏搜索画圈的

它的上一个配置UI点击是

和点击.json文件里要配置的内容是一样的。
可以看到它这个就是设置扩展插件的查找头文件路径的一个设置,因为我们需要的是gcc的编译所以设置好头文件的路径和编译器的路径就好;编译模式就没什么必要,编译模式主要还是看clangd的;
但是并没有设置clang的.json文件,这也是后面头文件的一个坑,因为没法设置,导致找不到头文件会报错但是可以编译;
主要就是设置一些头文件路径

{"configurations": [{"name": "Win32","includePath": ["${workspaceFolder}/**",/*头文件查找的区域为代码工作区,这里没有然后默认从编译器所在文件开始查找也就是gcc.exe所在文件夹*/],"defines": ["_DEBUG","UNICODE","_UNICODE"],"compilerPath": "E:\\mingw64\\bin\\gcc.exe",//gcc所在文件位置"cStandard": "c11","cppStandard": "c++14","intelliSenseMode": "clang-x64",//语法静态识别采用的编译器设为clang,设为gcc就没那么智能了"compilerArgs": [],"compileCommands": ""}],"version": 4
}

4.设置settings.json文件

这个文件主要是设置整个编辑器的一些属性;
可以直接点击左下角的设置按钮,再点击settings,就会出现设置的UI设置界面;
也可以直接新建一个文件;

{"files.defaultLanguage": "c", // ctrl+N新建文件后默认的语言"editor.formatOnType": true,  // 输入分号(C/C++的语句结束标识)后自动格式化当前这一行的代码"editor.suggest.snippetsPreventQuickSuggestions": false, // clangd的snippets有很多的跳转点,不用这个就必须手动触发Intellisense了"editor.acceptSuggestionOnEnter": "off", // 我个人的习惯,按回车时一定是真正的换行,只有tab才会接受Intellisense// "editor.snippetSuggestions": "top", // (可选)snippets显示在补全列表顶端,默认是inline"code-runner.runInTerminal": true, // 设置成false会在“输出”中输出,无法输入"code-runner.executorMap": {"c": "cd $dir && gcc '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK && &($dir + '$fileNameWithoutExt.exe')","cpp": "cd $dir && g++ '$fileName' -o '$fileNameWithoutExt.exe' -Wall -O2 -m64 -static-libgcc -std=c++14 -fexec-charset=GBK && &($dir + '$fileNameWithoutExt.exe')"// "c": "cd $dir && gcc $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -lm -static-libgcc -std=c11 -fexec-charset=GBK && $dir$fileNameWithoutExt",// "cpp": "cd $dir && g++ $fileName -o $fileNameWithoutExt.exe -Wall -O2 -m64 -static-libgcc -std=c++14 -fexec-charset=GBK && $dir$fileNameWithoutExt"}, // 右键run code时运行的命令;未注释的仅适用于PowerShell(Win10默认)和pwsh,文件名中有空格也可以编译运行;注释掉的适用于cmd(win7默认)、PS和bash,但文件名中有空格时无法运行"code-runner.saveFileBeforeRun": true, // run code前保存"code-runner.preserveFocus": true,     // 若为false,run code后光标会聚焦到终端上。如果需要频繁输入数据可设为false"code-runner.clearPreviousOutput": false, // 每次run code前清空属于code runner的终端消息,默认false"code-runner.ignoreSelection": true,   // 默认为false,效果是鼠标选中一块代码后可以单独执行,但C是编译型语言,不适合这样用"C_Cpp.clang_format_sortIncludes": true, // 格式化时调整include的顺序(按字母排序)
}

四.上述都搞好后,基本上所有功能都已经能够实现,编译、debug、语法错误提示

但是还是有点问题,就是头文件下会有波浪,终端显示找不到头文件,但是点击run整个程序是可以运行的;
问题出在,我们这里用到了clang的语法检测功能,上面已经说过gcc的语法检测和编译和debug都设置好了,但是clang不能设置,并且clang并没有lib没有头文件库,所以它是头文件就会一直提示有问题;
为了解决这个问题:这里用了最简单粗暴的方法:因为编译器在查找头文件时默认都是从编译器所在文件开始查找,或者它所在的库文件夹开始查找;那就将gcc里的头文件库的所有头文件复制下来,然后粘贴在里clang文件夹里,如下图所示;
果然最后头文件提示问题没有了,成功解决;

最后这个问题还有一种解决方法可以参考如下链接:
https://blog.csdn.net/gocad/article/details/8050336

放上参考安装链接:
https://www.zhihu.com/question/30315894/answer/154979413

vscode在Windows下配置C语言环境,设置三个配置文件相关推荐

  1. Windows下配置单机Hadoop环境

    Windows下配置单机Hadoop环境 文章目录 Windows下配置单机Hadoop环境 下载Hadoop 下载配置文件 配置环境变量 初始化HDFS 启动Hadoop 关闭Hadoop 常见错误 ...

  2. Windows下配置IDEA开发环境

    Windows下配置IDEA开发环境 文章目录 Windows下配置IDEA开发环境 安装JDK 查看JDK是否安装 下载JDK 配置环境变量 安装IDEA 下载IDEA 安装IDEA 初始化IDEA ...

  3. VSCode下配置R语言环境(Windows)

    本文介绍Windows下在VSCode中使用R语言的配置过程. 最后更新日期 2021/12/2 文章目录 更新信息 系统环境 VSCode插件安装 python(3)下安装radian R 包安装 ...

  4. windows下配置安装YAF环境

    Yaf是一个C语言编写的PHP框架有着不错的性能优势,同时这款框架是由鸟哥Laruence开发的;出于对大牛的信仰加成我们今天来尝尝鲜; 用PHP扩展写PHP框架的难点 难于开发. 要完成一个PHP扩 ...

  5. Windows下配置Java开发环境

    学习Java第一步是配置本地开发环境,学习最基本的桌面开发,下面以win7为例配置Java开发环境,即:JDK+JRE+Eclipse,安装JDK的时候会默认安装JRE,根据提示安装就可以了. 首先去 ...

  6. windows下配置nginx+php环境

    刚看到nginx这个词,我很好奇它的读法(engine x),我的直译是"引擎x",一般引"擎代"表了性能,而"x"大多出现是表示" ...

  7. Go学习笔记(一)windows下的Go 语言环境安装,并运行第一个Hello World程序

    1.首先,去下载Go的安装包,下载地址:https://golang.google.cn/dl/ ,其中有多个系统的安装包,选择windows底下的安装包即可: 2.下载后安装到D盘即可,默认安装成功 ...

  8. 在 Windows 下部署 Go 语言环境

    http://bbs.chinaunix.net/thread-4088281-1-1.html 1. 首先下载官方二进制安装包: 32 位选择 windows-386.msi 64 位选择 wind ...

  9. Spark:windows下配置spark开发环境

    安装基本的开发环境 从spark官网下载spark,如spark-2.3.0-bin-hadoop2.7.tgz,解压并配置环境变量: 增加SPARK_HOME PATH中加入%SPARK_HOME% ...

最新文章

  1. oracle进程对文件没有写权限,ORACLE SYS用户没有权限一天半的救库过程
  2. 【alibaba-cloud】openfeign的使用
  3. 【迁移学习(Transfer L)全面指南】2021年迁移学习发展现状及案例探究
  4. python有道翻译-使用python2爬取有道翻译
  5. python是不是特别垃圾-谈谈python垃圾回收机制
  6. 三十九、Vue项目上手 | 用户管理系统 实现添加用户功能(中篇)
  7. 博士学位被撤三天后,她的大学教职也被开除!
  8. Oracle修改表结构字段名和字段长度
  9. 7-177 输出全排列 (20 分)
  10. 【Elasticsearch】Elasticsearch:聚合 操作
  11. 辽宁计算机专业院校排名2015,liaoning高校排行榜_辽宁高校排名 2015年辽宁省最佳大学排行榜...
  12. centos7 docker安装_教你如何在 CentOS 7 下 yum 方式安装 Docker 环境
  13. matlab 矩阵除法计算,Matlab中的矩阵除法有问题???
  14. Hadoop HBase概念学习系列之什么是HBase? (一)
  15. 照明灯智能控制器c语言编程,基于51单片机的智能照明灯控制系统设计(含电路图,原理图,程序)...
  16. win10 系统重装后,如何恢复mysql 数据库(mysql-8.0.26-winx64.zip)
  17. js动态生成表格实例
  18. 【IDEA】idea工程打包成jar包
  19. 10大改变世界的未来科技
  20. 总结:Flink之Event Time , Processing Time 和 Ingestion Time

热门文章

  1. linu修改open files无效_不越狱修改运动步数,安卓苹果手机通用
  2. 使用RecyclerView实现瀑布流
  3. 贪婪洞窟2服务器维护,12月24日贪婪洞窟2停服维护公告_贪婪洞窟2更新了什么_3DM手游...
  4. 双非硕士211,阿里(蚂蚁)技术四面:技术一面+技术二面+主管三面+HR面
  5. bsy代码学习--微信网页授权
  6. 利用three建立一个3d园区
  7. Exsel 设置固定表头
  8. 如何给mac重做系统
  9. [模板]线性递推+BM
  10. 大数据高级开发工程师——Spark学习笔记(10)