1 下载安装vscode
1.1 官网下载
下载vscode,进入vscode官网https://code.visualstudio.com/Download,安装自己的版本,我的是Windows
一直点击下一步就可以。
1.2vscode汉化
打开扩展,搜索chinese,安装完成后重新打开即可。
2 下载MinGW
简单介绍:
VSCODE只是一个编辑器,他没有自带编译器,所以需要下载一个编译器“MingGW”,以此来生成可执行文件。
MinGW(Minimalist GNU for Windows)是一个用于Windows操作系统的开发工具集,它提供了一组GNU工具和库,以便在Windows平台上进行开发。MinGW的目标是允许开发者在Windows上编译和运行类Unix系统的程序,而无需使用完全的Cygwin环境。
MinGW包括以下主要组件:
- GCC(GNU Compiler Collection):这是GNU项目的C和C++编译器,MinGW提供了在Windows上使用GCC编译器的能力。
- Binutils:Binutils包括GNU的汇编器、链接器和其他二进制工具,使开发者能够创建和管理可执行文件。
- Runtime Libraries:MinGW提供了在Windows上使用的GNU C库,这允许开发者在Windows上构建使用GNU工具链的应用程序,而无需依赖Cygwin。
- 工具集:MinGW包括许多其他开发工具,如Make工具、调试器和其他辅助工具,以便于开发。
MinGW的主要优势是,它使开发者能够在Windows环境中轻松地编译和运行GNU工具链下的程序,而不需要引入太多类Unix环境的依赖。这对于跨平台开发、移植自由软件项目以及在Windows上进行开发都非常有用。
在嵌入式开发领域,MinGW通常用于交叉编译,以在Windows上为不同的嵌入式平台生成目标可执行文件或固件。它在嵌入式开发中的使用通常需要与特定的交叉编译工具链配合使用。
2.1下载minGW
打开官网https://sourceforge.net/projects/mingw/,下载完成后解压。
2.2添加路径
//将下载得到的mingw64文件夹整个复制到C:\Program Files目录下。(不一定)
将mingw/bin文件夹的路径添加到系统变量的Path中。(搜索“编辑系统环境变量”)例如我的是
验证:win+r+cmd,输入where gcc
3 vscode配置c环境
vscode是一个基于文件夹的编辑器。自己建立一个文件夹,存放自己的代码。
我的存放在桌面,命名为MYCODE,里面再新建一个C,存放C语言代码,然后右键点击通过code打开新建的C文件夹
下载C/C++拓展
新建文件test.c,(注意后缀.c要加上,不然没有运行调试的按钮)用c写一个传说中的helloworld
test.c
#include<stdio.h>
int main()
{
printf("hello world");
return 0;
}
点击右上角的三角形运行一下(不用安装code runner)
如果有提示扩展点安装就行了
执行完后会自动生成,vscode文件夹和tasks.json文件,并且会生成可执行文件test.exe。说明已经可以编译单个.c文件。
4 编译多个.c文件
方法:修改tasks.json文件,修改args参数,注释已经给出。
tasks.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: gcc.exe 生成活动文件",
"command": "D:\\mingw64\\bin\\gcc.exe",//之前设置的路径
"args": [
"-fdiagnostics-color=always",
"-g",
//"${file}",//编译当前文件(一个文件)
"*.c",//文件夹下的所有.c文件都编译
"-o",
//"${fileDirname}\\${fileBasenameNoExtension}.exe"//当前这个目录下的文件名(没有拓展+.exe)
"${fileDirname}\\run.exe"//将编译出来的可执行文件改成run.exe
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
再点击运行,可以发现多了一个run.exe
5 调试C语言程序
在程序如printf那里下一个断点,再点击运行调试
可以发现对于单个.c文件,此时已经可以编译并且调试
但是对于多个.c文件,还需要修改配置文件。
退出调试,点击创建launch.jso,选择gdb如图所示
点击添加配置,选择gdb启动
需要修改的有两个地方,一个是 //“program”: “输入程序名称,例如 ${workspaceFolder}/a.exe”,另一个是 //“miDebuggerPath”: “/path/to/gdb”,
launch .json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
//"program": "输入程序名称,例如 ${workspaceFolder}/a.exe",
"program": "${fileDirname}\\run.exe",//你要调试的可执行文件
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
//"miDebuggerPath": "/path/to/gdb",
"miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",//你自己电脑gdb.exe的位置,用gdb来调试
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
6 编写多个.c文件尝试运行调试
max.c
int max(int a,int b)
{
return a>b?a:b;
}
max.h
int max(int a,int b);
test.c
#include<stdio.h>
#include"max.h"
int main()
{
int a =10;
int b =20;
int c =max(a,b);
printf("hello world\n");
printf("%d\n",c);
return 0;
}
点击运行,终端有以下输出
点击调试,也能成功
7 配置C++运行和调试环境
同理,新建文件夹CPP,新建文件test.cpp,编写代码,点击运行,使用g++进行编译。
test.cpp
#include <iostream>
using namespace std;
int main()
{
cout<<"hello cpp"<<endl;
return 0;
}
同理,这里单文件也是可以调试的。
8 C++多文件编译和调试
不同的地方就是args下的 “*.cpp”,//当前文件夹所有的.cpp文件都编译有不同
tasks.json
{
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++.exe 生成活动文件",
"command": "D:\\mingw64\\bin\\g++.exe",
"args": [
"-fdiagnostics-color=always",
"-g",
//"${file}",
"*.cpp",//当前文件夹所有的.cpp文件都编译
"-o",
//"${fileDirname}\\${fileBasenameNoExtension}.exe"
"${fileDirname}\\run_cpp.exe"//生成的可执行程序名称
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "调试器生成的任务。"
}
],
"version": "2.0.0"
}
launch.json
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "(gdb) 启动",
"type": "cppdbg",
"request": "launch",
"program": "${fileDirname}\\run_cpp.exe",
"args": [],
"stopAtEntry": false,
"cwd": "${fileDirname}",
"environment": [],
"externalConsole": false,
"MIMode": "gdb",
"miDebuggerPath": "D:\\mingw64\\bin\\gdb.exe",
"setupCommands": [
{
"description": "为 gdb 启用整齐打印",
"text": "-enable-pretty-printing",
"ignoreFailures": true
},
{
"description": "将反汇编风格设置为 Intel",
"text": "-gdb-set disassembly-flavor intel",
"ignoreFailures": true
}
]
}
]
}
9 编写多个c++文件
swap.c
#include "swap.h"
void swap(int &a,int &b)
{
int temp;
temp = a;
a=b;
b=temp;
}
swap.cpp
void swap(int &a,int &b);
test.cpp
#include <iostream>
#include "swap.h"
using namespace std;
int main(int argc,char **argv)
{
int val1 = 10;
int val2 = 20;
cout<<"before swap:"<<endl;
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
swap(val1,val2);
cout<<"after swap:"<<endl;
cout<<"val1="<<val1<<endl;
cout<<"val2="<<val2<<endl;
return 0;
}