vscode如何配置C语言环境
第一步:
首先,先下载visual studio code下载,然后安装,安装过程就自行百度吧,汉化过程也请自行百度。安装完成打开vscode,进入到如下界面:
接下来,点击左侧第五个按钮如图所示:
在箭头的地方输入c/c++安装,我这里已经安装好了,然后接着下载MinGW,请下载64位的下载x86_64.seh版本的,如果直接下载.exe很可能由于网络问题无法安装,然后直接解压到自己喜欢的文件夹,并且配置环境变量,环境变量的配置我这里配置了两个,一个就是在系统环境变量path中加上解压后的MinGW的路径,即到bin的路径(例如:D:\app\setup\mingw\install\mingw64\bin),还有一个是INCLUDE环境变量,首先检查自己的系统环境变量里有没有INCLUDE,如果没有就新建一个,然后把mingw的include路径加进去,(例如:D:\app\setup\mingw\install\mingw64\include),如下图所示:
配置完毕,要验证一下是否配置成功,快捷键win+R,win键是ctrl键和alt键之间的键,然后在里卖弄输入cmd。按下enter键,然后在窗口里输入gcc -v,如果如下图所示,即成功了:
接下来我们重启vscode,
然后在vscode的Extensions中搜索code runnne并安装,接着开始配置文件。
首先要创建一个文件夹,是用来放自己编写的项目的,然后用vscode打开这个文件夹,并在里面创建.vscode文件夹,并在vscode中创建三个json文件,内容如下:launch.json
{
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) Launch", // 配置名称,将会在启动配置的下拉菜单中显示
"type": "cppdbg", // 配置类型,这里只能为cppdbg
"request": "launch", // 请求配置类型,可以为launch(启动)或attach(附加)
"program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",// 将要进行调试的程序的路径
"args": [], // 程序调试时传递给程序的命令行参数,一般设为空即可
"stopAtEntry": false, // 设为true时程序将暂停在程序入口处,一般设置为false
"cwd": "${workspaceFolder}", // 调试程序时的工作目录,一般为${workspaceFolder}即代码所在目录
"environment": [],
"externalConsole": true, // 调试时是否显示控制台窗口,一般设置为true显示控制台
"MIMode": "gdb",
"miDebuggerPath": "D:\\app\\setup\\mingw\\install\\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
}
]
}
]
}
其中miDebuggerPath是你自己的MinGW中的gdb.exe路径,
tasks.json的内容如下:
{
// 有关 tasks.json 格式的参考文档:https://go.microsoft.com/fwlink/?LinkId=733558 。
"version": "2.0.0",
"tasks": [{
"label": "gcc",
"type": "shell", // { shell | process }
// 适用于 Windows 的配置:
"windows": {
"command": "gcc",
"args": [
"-g",
"\"${file}\"",
"-o",
"\"${fileDirname}\\${fileBasenameNoExtension}.exe\""
// 设置编译后的可执行文件的字符集为 GB2312:
// "-fexec-charset", "GB2312"
// 直接设置命令行字符集为 utf-8:
// chcp 65001
]
},
// 定义此任务属于的执行组:
"group": {
"kind": "build", // { build | test }
"isDefault": true // { true | false }
},
// 定义如何在用户界面中处理任务输出:
"presentation": {
// 控制是否显示运行此任务的面板。默认值为 "always":
// - always: 总是在此任务执行时显示终端。
// - never: 不要在此任务执行时显示终端。
// - silent: 仅在任务没有关联问题匹配程序且在执行时发生错误时显示终端
"reveal": "silent",
// 控制面板是否获取焦点。默认值为 "false":
"focus": false,
// 控制是否将执行的命令显示到面板中。默认值为“true”:
"echo": false,
// 控制是否在任务间共享面板。同一个任务使用相同面板还是每次运行时新创建一个面板:
// - shared: 终端被共享,其他任务运行的输出被添加到同一个终端。
// - dedicated: 执行同一个任务,则使用同一个终端,执行不同任务,则使用不同终端。
// - new: 任务的每次执行都使用一个新的终端。
"panel": "dedicated"
},
// 使用问题匹配器处理任务输出:
"problemMatcher": {
// 代码内问题的所有者为 cpp 语言服务。
"owner": "cpp",
// 定义应如何解释问题面板中报告的文件名
"fileLocation": [
"relative",
"${workspaceFolder}"
],
// 在输出中匹配问题的实际模式。
"pattern": {
// The regular expression.
"regexp": "^(.*):(\\d+):(\\d+):\\s+(warning|error):\\s+(.*)$",
// 第一个匹配组匹配文件的相对文件名:
"file": 1,
// 第二个匹配组匹配问题出现的行:
"line": 2,
// 第三个匹配组匹配问题出现的列:
"column": 3,
// 第四个匹配组匹配问题的严重性,如果忽略,所有问题都被捕获为错误:
"severity": 4,
// 第五个匹配组匹配消息:
"message": 5
}
}
}]
}
最后一个是setting.json,如下所示:
{
"files.associations": {
"tidl_alg_int.h": "c",
"limits": "c"
}
}
保存完毕,然后关闭vscode,重启vscode。然后在.vscode的上一级文件夹创建一个C语言编写的``程序,如下图所示:
c程序编写成功,点击图中右上角小三角即可运行,然后再图中的下方的终端即可看到运行结果,也可点击F5直接debug运行。
以下为图中的示例代码:是一个小游戏,如果运行成功,即代表C语言环境安装成功:
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<windows.h>
#include<stdlib.h>
#define MAX 100
long long int speed = 0;//控制敌机的速度
int position_x, position_y;//飞机的所在位置
int high, width;//地图的大小
int bullet_x, bullet_y;//子弹的位置
int enemy_x, enemy_y;//敌人的位置
int map[MAX][MAX];
/*0表示空白,1表示战机*的区域,2表示敌人战机的位置。
3表示上下围墙,4表示左右围墙,5表示子弹的位置*/
int score;
void starup()//初始化所有的信息
{
high = 20;
width = 30;
position_x = high / 2;
position_y = width / 2;
bullet_x = 0;
bullet_y = position_y;
enemy_x = 2;
enemy_y = position_y - 1;
score = 0;
}
void startMap()
{
int i, j;
for (i = 1; i <= high - 1; i++)
{
map[i][1] = 4;
for (j = 2; j <= width - 1; j++)
map[i][j] = 0;
map[i][width] = 4;
}
//下方围墙的初始化
i = high;
for (j = 1; j <= width; j++)
map[i][j] = 3;
map[bullet_x][bullet_y] = 5;
/*这里是战机大小的初始化开始*/
map[position_x - 1][position_y] = 1;
i = position_x;
for (j = position_y - 2; j <= position_y + 2; j++)
map[i][j] = 1;
map[position_x + 1][position_y - 1] = 1;
map[position_x + 1][position_y + 1] = 1;
/*** 初始化结束 **/
/* 敌人战机的初始化 */
map[enemy_x][enemy_y] = 2;
map[enemy_x - 1][enemy_y - 1] = 2;
map[enemy_x - 1][enemy_y + 1] = 2;
/* 敌人战机初始化结束*/
}
void HideCursor()//隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void gotoxy(int x, int y)//清理一部分屏幕
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void updateWithoutInput()//于输入无关的跟新
{
if (bullet_x > 0)
bullet_x--;
if ((bullet_x == enemy_x) && (bullet_y == enemy_y))//当敌人的飞机被击中时
{
score++;
enemy_x = 0;
enemy_y = rand() % width;
bullet_x = 0;
}
if (enemy_x > high)//当飞机超出区域
{
enemy_x = 0;
enemy_y = rand() % width;
}
if (speed == 1)
for (int i = 1; i <= 10000; i++)//用来控制敌机的速度
{
for (int j = 1; j <= 1000; j++)
{
speed = 1;
}
}
speed = 0;
if (speed == 0)
{
enemy_x++;
speed = 1;
}
}
void updateWithInput()//与输入有关的更新
{
char input;
if (kbhit())//在VC6.0++下,为_kbhit()
{
input = getch();//在VC6.0++下为_getch();
if (input == 'a')
position_y--;
if (input == 's')
position_x++;
if (input == 'd')
position_y++;
if (input == 'w')
position_x--;
if (input == ' ')
{
bullet_x = position_x - 1;
bullet_y = position_y;
}
}
}
void show()//展示的内容
{
gotoxy(0, 0);
int i, j;
for (i = 1; i <= high; i++)
{
for (j = 1; j <= width; j++)
{
if (map[i][j] == 0)
printf(" ");
if (map[i][j] == 1)
printf("*");
if (map[i][j] == 2)
printf("#");
if (map[i][j] == 3)
printf("~");
if (map[i][j] == 4)
printf("|");
if (map[i][j] == 5)
printf("|");
}
printf("\n");
}
printf("\n你的得分:%d\n\n", score);
printf("操作说明: ASDW分别操作 左下右上四个的移动\n");
printf("**空格是发出子弹**\n");
}
int main()
{
starup();
while (1)
{
HideCursor();
startMap();
show();
updateWithoutInput();
updateWithInput();
}
return 0;
}