1. VSCode&MinGW64的安装与配置
安装VSCode与安装VSCode插件,以及设置MinGW环境变量这里不作指导说明,略过。
1.1 VSCode安装
建议安装System版本的🔗VSCode(该版本可实时在线同步官方的更新)。

1.2 类Unix环境的MinGW64安装
- GitHub的离线安装二进制发行版:🔗niXman/mingw-builds-binaries,选择下载名为
x86_64-15.1.0-release-win32-seh-ucrt-rt_v12-rev0.7z的压缩包。 - GitHub的在线安装版:🔗mingwInstaller.exe,安装时的配置选择和上述二进制发行版保持一致即可。
- 笔者的优快云资源:🔗https://download.youkuaiyun.com/download/ZZLLLLLLZ/89709135?spm=1001.2014.3001.5503
📚INFO:
- x86_64表示64bit-cpu架构,i686是32bit-cpu架构的衍生系列,从属于32bit架构;
- release表示为正式发行版;
- posix 或 win32指的是线程模型。posix,是 UNIX 系统的 API 设计标准,很多类 UNIX 系统也在支持兼容这个标准,如 Linux 操作系统。如果在 Windows 下开发 Linux 应用程序,则选择 posix;win32,是 Windows 系统的 API 设计标准,如果开发 Windows 平台下的应用程序,就需要选择 win32;
- seh版本较新只支持64bit,dwarf版本较新只支持32bit,还有个sjlj版本较旧,同时支持32bit和64bit;
- ucrt兼容C99标准,而msvcrt比较古老,不兼容C99标准。
大家记得设置环境变量,快捷键win+R打开cmd,输入gcc -v确认是否已安装成功。
2. VSCode—“文房四宝”
下面4个文件几乎都是开箱即用,你可以用于替换掉自己工程下的.vscode文件夹中的4个文件。适用于工程含有单个.c文件或多个.c文件的情况,需要修改的地方笔者会加以说明。
2.1 settings.json
📚NOTE:无需修改,在VSCode的扩展中下载material-icon-theme插件即可。
{
// 字符集编码格式
"files.encoding": "utf8",
// 设置“严格提醒” = enabled/disabled/enabledIfIncludesResolve
// "C_Cpp.errorSquiggles": "disabled",
// 启用文件自动保存
"files.autoSave": "afterDelay",
// 文件图标主题:"material-icon-theme"
"workbench.iconTheme": "material-icon-theme",
// “现代深色”主题
"workbench.colorTheme": "Default Dark Modern",
//粘贴时格式化代码
"editor.formatOnPaste": true,
//保存时格式化代码
"editor.formatOnSave": true,
//设置字体的大小,最小值能设置为6
"editor.fontSize": 15,
//设置字体的粗细
"editor.fontWeight": "500",
//设置字体的样式
// "terminal.integrated.fontFamily":"Courier New",
//使用Ctrl+滚轮缩放编辑区的字体大小
"editor.mouseWheelZoom": true,
//使用Ctrl+滚轮缩放终端Terminal的字体大小
"terminal.integrated.mouseWheelZoom": true,
//设置为false,这样打开新的文件时,不会自动关闭旧的文件
"workbench.editor.enablePreview": false,
//据说可以减少VSCode的CPU和内存占用
"search.followSymlinks": false,
/****************************************/
"files.associations": {
"stdio.h": "c"
}
}
2.2 c_cpp_properties.json
📚NOTE:不需要修改。
{
"configurations": [
{
"name": "Win32-C/C++",
"includePath": [
"${workspaceFolder}/**"// ${workspaceFolder}/** 的含义是搜索项目目录下的所有文件。${workspaceFolder}表示在 VSCode 中打开的文件夹目录 (通常是工程项目的路径)
/*
includePath 的目录是和 IntelliSense 强相关的,即和C/++这个插件强相关。其作用是:只帮助 VSCode 检查你的代码语法错误,判断你的工程是否包含相应的头文件。
gcc编译器的 头文件 索引命令 -I ,必须要在tasks.json脚本中定义好,这样gcc编译器才能找到头文件,去进行最终编译!!!
*/
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
/*
只要设置了系统环境变量,在此处填写gcc即可。
VSCode C/C++ IntelliSense插件会自动索引gcc.exe所在路径,故无需在此填写完整路径。
*/
"compilerPath": "gcc",
"cStandard": "c17",
"cppStandard": "gnu++17",
"intelliSenseMode": "windows-gcc-x64"
}
],
"version": 4
}
2.3 tasks.json
📚NOTE:不需要修改。
tasks.json脚本中的VSCode变量索引请借鉴以下链接:
①https://zhuanlan.zhihu.com/p/44967536
②https://code.visualstudio.com/docs/reference/variables-reference
{
//task.json控制构建环节(其实理论上可以控制任何过程), 相当于make工具 + makefile
"tasks": [
{
//构建build任务
"type": "cppbuild",
"label": "build_task",
"command": "gcc", //指定GCC编译器所在路径,若已将 E:/mingw64/bin 路径加入系统环境变量 PATH,可直接使用 gcc
"args": [
/*============================================控制诊断信息(如错误、警告)的颜色显示=========================================================*/
"-fdiagnostics-color=always",
/*============================================控制诊断信息(如错误、警告)的颜色显示=========================================================*/
/*
||分隔标识符,无需反注释
||分隔标识符,无需反注释
||分隔标识符,无需反注释
*/
/*===============================================开启编译警告信息======================================================*/
"-g", // 生成和调试有关的信息,launch.json会用到
"-Wall", // 开启额外警告
/*===============================================开启编译警告信息======================================================*/
/*
||分隔标识符,无需反注释
||分隔标识符,无需反注释
||分隔标识符,无需反注释
*/
/*===============================================索引需要编译的源文件======================================================*/
// "${file}",// (单文件编译,编译当前打开的 .c 或 .cpp 文件)
"${fileDirname}/*.c", // (多文件编译的第2种方式)。 ${fileDirname}:当前打开源文件所在的绝对路径,但不包括当前的文件名
// "${workspaceFolder}/src/*.c", // (多文件编译的第3种方式)。${workspaceFolder} :当前 workspace 文件夹路径
/*===============================================索引需要编译的源文件======================================================*/
/*
||分隔标识符,无需反注释
||分隔标识符,无需反注释
||分隔标识符,无需反注释
*/
/*===============================================索引需要编译的头文件======================================================*/
"-I",
"${workspaceFolder}/inc", // ${workspaceFolder}:表示在 VSCode 中打开的文件夹(项目)的路径
/*===============================================索引需要编译的头文件======================================================*/
/*
||分隔标识符,无需反注释
||分隔标识符,无需反注释
||分隔标识符,无需反注释
*/
/*===============================================进行最终编译,生成可执行文件.exe======================================================*/
"-o", //指定可执行文件的名称和生成路径,与launch.json中的exe路径对应
//"${fileDirname}/${fileBasenameNoExtension}.exe" // 生成 当前打开的源文件名称.exe。${fileDirname}:当前打开源文件所在的绝对路径,但不包括当前的源文件名
//"${fileDirname}/custom_source_name.exe" // 生成 自定义名称.exe。${fileDirname}:当前打开源文件所在的绝对路径,但不包括当前的文件名
//"${workspaceFolder}/build/${workspaceRootFolderName}.exe", // 生成 项目名称.exe 。
/*-----${workspaceFolder}:表示在 VSCode 中打开的文件夹(项目)的路径-----*/
/*-----${workspaceRootFolderName}:表示workspace文件夹名称,也就是当前在 VSCode 中打开的文件夹(项目)的名称,要注意这不是绝对路径!!项目的绝对路径是${workspaceFolder}-----*/
"${workspaceFolder}/build/${fileBasenameNoExtension}.exe", // 在项目的build文件夹中,生成 主源文件的名称.exe
//"${workspaceFolder}/build/${fileDirnameBasename}.exe", // 在项目的build文件夹中,生成 当前打开源文件所在的文件夹名称.exe
/*===============================================进行最终编译,生成可执行文件.exe======================================================*/
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc" // 捕捉编译时编译器在终端里显示的报错信息,将其显示在vscode的‘问题’面板里
],
"group": {
// 把该任务放在build组
"kind": "build",
"isDefault": true
},
"presentation": {
"echo": true,
"reveal": "silent", // 静默模式,仅程序错误时显示
"focus": false, // 不强制获取焦点
"panel": "shared",
"showReuseMessage": true,
"clear": false // 执行前先清空终端(可选)
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
2.4 launch.json
📚NOTE:不需要修改。
{
//launch.json控制运行和调试环节,相当于openocd工具
"configurations": [
{
"name": "C/C++ Debug",
"type": "cppdbg",
"request": "launch",
//"program": "${fileDirname}/${fileBasenameNoExtension}.exe", //生成 单文件名称.exe。与tasks.json中的exe路径对应
// "program": "${fileDirname}/custom_source_name.exe",//生成 自定义名称.exe。与tasks.json中的exe路径对应
//"program": "${workspaceFolder}/build/${workspaceRootFolderName}.exe", //生成 工程名称.exe。与tasks.json中的exe路径对应
"program": "${workspaceFolder}/build/${fileBasenameNoExtension}.exe", //在项目的build文件夹中,生成 主源文件的名称.exe。与tasks.json中的exe路径对应
//"program": "${workspaceFolder}/build/${fileDirnameBasename}.exe", //在项目的build文件夹中,生成 当前打开源文件所在的文件夹名称.exe。与tasks.json中的exe路径对应
"args": [],
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,从头开始debug;设为false则在调试时直接跳到断点处。
"cwd": "${fileDirname}", // 调试程序时的工作目录,此处为源码文件所在目录
"environment": [],
"externalConsole": false, //true使用cmd终端,false使用vscode内部终端
"MIMode": "gdb",
"miDebuggerPath": "gdb", //指定GDB调试器所在路径,若已将 E:/mingw64/bin 路径加入系统环境变量 PATH,可直接使用 gdb
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
],
"preLaunchTask": "build_task" //tasks.json中的label对应。launch.json的preLaunchTask字段和tasks.json的lable字段值需保持一致
}
],
"version": "2.0.0"
}
3. 建立C工程
3.1 工程目录
目录视图:

目录树:
main.c
└── 📁 cprojs
│ ├── 📁 .vscode
│ │ ├── 📄 c_cpp_properties.json
│ │ ├── 📄 launch.json
│ │ ├── 📄 settings.json
│ │ └── 📄 tasks.json
│ ├── 📁 build
│ │ └── 📄 main.exe
│ ├── 📁 inc
│ │ └── 📄 sub_inc.h
│ └── 📁 src
│ │ ├── 📄 main.c
│ │ └── 📄 sub_src.c
3.2 编写C代码
main.c:
#include "sub_inc.h"
int main(void)
{
printf("############################@start@############################\n");
sub_func();
return 0;
}
sub_src.c:
#include "sub_inc.h"
void sub_func()
{
unsigned char key_state = 0;
switch (key_state)
{
case MON /* constant-expression */:
printf("This is 1#\n");
/* code */
break;
case TUE /* constant-expression */:
printf("This is 2#\n");
/* code */
break;
case WED /* constant-expression */:
printf("This is 3#\n");
/* code */
break;
case THU /* constant-expression */:
printf("This is 4#\n");
/* code */
break;
case FRI /* constant-expression */:
printf("This is 5#\n");
/* code */
break;
case SAT /* constant-expression */:
printf("This is 6#\n");
/* code */
break;
case SUN /* constant-expression */:
printf("This is 7#\n");
/* code */
break;
default:
printf("⭐⭐------------------------illegal!------------------------⭐⭐");
break;
}
}
sub_inc.h:
#ifndef __SUB_INC_H__
#define __SUB_INC_H__
#include <stdio.h>
#include <stdbool.h>
#include <stdlib.h>
typedef enum STA
{
MON = 1,
TUE,
WED,
THU,
FRI,
SAT,
SUN
} StaNewType; // StaNewType = enum STA
void sub_func();
#endif
3.3 运行代码
点击右上角运行按钮:

或快捷键ctrl+alt+N,编译并执行code,输出如下结果:

可以看到,代码成功运行!
3.4 调试代码
鼠标点击VSCode左侧的小虫子,再点击“运行和调试”的绿色小三角按钮

正常调试中………………,代码可调试!

4. 可能出现的问题解决方法
4.1 Run运行代码只有按钮,没有对应的快捷键
1)设置—>键盘快捷方式

2)在弹出的搜索框中输入C/C++: 运行 C/C++ 文件,点击键绑定,设置偏爱的快捷键(我这里已经设置好了)

1万+

被折叠的 条评论
为什么被折叠?



