【C++学习】VScode配置C/C++开发环境

news2024/11/25 5:20:19

  VSCode是一个高级编辑器,只能用来写C/C++/Python/Java等代码,不能直接编译这些代码。所以,我们需要搭建编译和调试环境,本文以C/C++为例,使用MinGW-w64,将其移植到Windows平台的一个gcc编译器。下面具体介绍如何搭建。

一、下载和配置MinGW-w64编译器套件

下载地址:MinGW官网地址

点击上面链接后,找到下图红框处的版本,下载!

image-20230117232633432

下载好之后,得到一个下图所示的文件:

image-20230117235312575

接下来对该压缩文件进行解压缩:

image-20230117235452294

解压好后,进入上图文件夹,拷贝mingw64这个文件夹到任意盘的根目录下,注意:路径的名字不能出现中文、空格、特殊字符等。

image-20230117235547727

mingw64文件夹中,相关文件内容如下图所示:

image-20230615144757318

二、配置MinGW64

  在Windows主机上,快捷键win+s,或直接在搜素框中搜素:环境变量,就能够看到:

image-20230615144913947

点击编辑系统环境变量后出现【环境变量】界面:

image-20230117233457967

  点击上图红框处的环境变量(N)后,在系统变量下的系统变量path中添加第一节中解压的mingw文件下bin目录作为mingw的环境值。此时,下图所示,可以通过windows的命令终端来查看mingw环境配置是否成功

image-20230117233944328

三、安装C/C++插件

  要在VSCode上编译代码,还得配置C/C++插件,再次在VSCode的插件中搜素:C/C++,点击安装:

image-20230615145909374

安装好C/C++插件后,一定要重启VScode(很重要)。

四、在VSCode中编写C语言代码并成功编译

4.1. 打开文件夹

  在VSCode上编辑代码的前提需要打开文件夹,这样也方便管理代码和编译器产生的可执行程序,和VSCode生成的配置文件等。

  下图中,文件夹选择可以在导航处【文件】->【打开文件夹】处根据自己的意愿选择文件夹,此外文件夹的名字(字母变成了大写,不要担心这是VSCode自定义的);对于第一次使用VSCode的朋友来说,可以直接在资源管理器界面直接打开文件夹按钮处选择文件夹。最后注意:需要信任文件夹。

image-20230615151133461

4.2 新建C语言文件,编写C语言代码

  创建一个下图所示的C语言文件(test_01_03文件夹下的test.c):

image-20230615152224940

接下来如何编译test.c文件?需要编译配置。

4.3 设置C/C++编译的选项:c_cpp_properties.json

  鼠标在.c的源文件内部,按ctrl+shift+p快捷键,在弹出的界面中选择:[C/C++:编辑配置(UI)],然后进入设置页面。

image-20230118001222813

接着模式这快按着下图进行选择:

image-20230118001406339

配置好后生成.vscode

image-20230118001523880

接下来需要创建执行任务!

4.4 创建执行任务:tasks.json

要编译4.2中的test.c文件,需要在【终端】->【配置任务】

image-20230118001957620

在上图弹出的页面中,选择【C/C++:gcc.exe 生成活动文件】后,就会在文件夹下生成一个task.json文件,该文件是专门用来执行代码编译任务的。

五、编译与执行

5.1 编译

  完成上述步骤之后,我们已经完成了所有的准备,可以编译并生成可执行程序。

具体步骤如下:

  • 鼠标点在要编译的C语言代码中
  • 然后【终端】->【 运行生成任务】或直接ctrl+shift+B

4.2节的test.c文件编译成功后生成一个test.exe可执行程序。

image-20230615154245002

5.2 执行

  编译好可执行程序后,按键盘快捷键ctrl+`,打开VSCode的终端;输入: .\ + 可执行程序,即可执行代码:

image-20230615155225890

生成log.tex文件:

image-20230615154705808

5.3 代码bug调试

  众所周知,代码并不是一蹴而就的,需要不断优化不断调试来排除bug,当遇到bug时:

image-20230118002545819

  根据编译结果,终端出现乱码,可以判断该程序有bug,可以通过gdb调试,上图代码量特别少,直接查看修改:

image-20230118210315148

修改好后直接编译,没问题后执行生成的可执行程序:

image-20230118210220807

六、一个工程中有多个.c文件需要编译怎么办?

  在工程实践中,一个文件夹下不可避免有多个文件需要编译,下图test_01_04文件夹中:

image-20230615163536895

这时需要修改tasks.json文件,针对编译多个源代码文件,在arg中修改:

${file}//更改前
${workspaceFolder}\\*.c//更改后

对于C++代码则改为:

${file}//更改前
${workspaceFolder}\\*.cpp//更改后

修改编译输出的文件名

${fileDirname}\\${fileBasenameNoExtension}.exe//更改前
${workspaceFolder}\\${workspaceRootFolderName}.exe//更改后

把编译输出的文件名硬编码为myProgram.exe,而不是与C文件同名

七、编写C++代码并运行

7.1 配置g++.exe为编译器

  具体步骤与4.3节相似,在配置名称处的win32后,点击添加配置,在新的文本框中输入C++编译器路径具体下图所示:

image-20230615164540879

模式依然选择gcc-64

image-20230615164717093

7.2 生成C++源文件编译的tasks信息

  此时,c_cpp_properties.json文件中会出现下图C++的配置:

image-20230615164741920

此外,tasks.json中也会多出C++的配置。

7.3 编译C++代码

  创建test.cpp文件,输入下列代码,并编译:

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void test01(){
    vector<int> t1;
    t1.push_back(1);
    t1.push_back(2);
    t1.push_back(3);
    t1.push_back(4);

    vector<int>::iterator it = t1.begin();
    while(it!=t1.end()){
        cout<<*it<<" ";
        ++it;
    }
    cout<<endl;

    auto pos = find(t1.begin(),t1.end(),3);
    t1.insert(pos,33);
    for(auto e: t1){
        cout<<e<<" ";
    }
    cout<<endl;
}

int main(){
    test01();
    return 0;
}

编译后产生test.exe的可执行程序,该可执行程序运行的结果:

image-20230615165251102

八、VSCode的调试

  在VSCode上调试需要依赖一个名为launch.json的文件

8.1 创建launch.json文件

  首先点击【调试】,创建launch,json文件:

image-20230615170743670

在弹出的窗口选择 C++(GDB/LLDB)

image-20230615171030619

点击【添加配置】 -> [C/C++: (gdb) 启动];产生的配置文件中,需要对programmiDebuggerPath进行配置,program处与tasks.json文件的输出可执行程序相同;miDebuggerPath只需输入安装的mingw64文件中关于gdb的地址即可。

image-20230615172947900

8.2 开始调试

  当launch.json文件生成后,我们只要在打断点开始调试就行。调试的快捷键和VS系列的IDE相似:

  • F9 - 打断点/取消断点
  • F5 - 启动调试
  • F10 - 逐过程调试
  • F11 - 逐语句调试

启动调试后,也可以使用监视窗口查看变量等程序执行过程中的信息。

image-20230615172818614

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650246.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于Java蜀都天香酒楼网站系统设计实现(源码+lw+部署文档+讲解等)

博主介绍&#xff1a; ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ &#x1f345; 文末获取源码联系 &#x1f345; &#x1f447;&#x1f3fb; 精…

第二章_基于redis实现分布式锁

基本实现 借助于redis中的命令setnx(key, value)&#xff0c;key不存在就新增&#xff0c;存在就什么都不做。同时有多个客户端发送setnx命令&#xff0c;只有一个客户端可以成功&#xff0c;返回1&#xff08;true&#xff09;&#xff1b;其他的客户端返回0&#xff08;false…

微信小程序WE分析----事件分析

目录 web分析-小程序 事件分析概述 1.新增事件管理 事件参数说明 (1) 填写事件配置 (2)小程序添加上报代码&#xff1a;将上报代码添加到小程序中 (3)测试事件数据上报&#xff1a;测试事件上报的数据是否正确。 属性管理 字典管理 新增事件分析 创建事件分析 添加事件指…

Java+Swing+mysql员工工资管理系统2.0

JavaSwingmysql员工工资管理系统2.0 一、系统介绍二、功能展示1.用户登陆2.主页3.员工工资查询4.员工工资添加5.员工工资修改6.员工工资删除 三、系统实现1.salary.java 四、其它系统五、获取源码 一、系统介绍 该系统实现了简单的增删查改、用户登陆、员工工资查询、员工工资…

美联储缩表意味着什么?

What does the Feds balance sheet reduction mean? 这里的表是资产负债表&#xff0c;Balance sheet. 美联储&#xff08;Federal Reserve&#xff09;作为全球影响力最大的央行&#xff0c;其在货币政策上做出的一些调整&#xff0c;可能就会引起全球经济和金融市场动荡&am…

项目测试排期的正确方法是什么?

测试排期是项目排期里面的一部分&#xff0c;所以了解项目排期对整体产品的全貌会有一个宏观的认知&#xff0c;甘特图能很好的体现项目排期&#xff0c;里面包含了参与角色和每个角色对应的排期。项目参与者和项目责任人都可以清晰的看到项目当前进展和项目耗时等。 甘特图可…

智能监控系统:在线培训考试系统的保障

随着互联网技术的不断发展&#xff0c;越来越多的培训机构和教育机构采用在线学习和考试的方式进行教学。然而&#xff0c;考试中的作弊问题也随之产生&#xff0c;给教育质量和学术诚信带来了挑战。为了解决这一问题&#xff0c;许多在线培训考试系统引入了智能监控系统。 智…

邓铎:探索书法艺术的新境界

中国书画院院士邓铎&#xff0c;是一位在书法艺术领域拥有深刻理解和丰富实践经验的老者。他的作品随心所欲&#xff0c;个性鲜明&#xff0c;具备独特的审美品味和艺术手法&#xff0c;更有重要的理论创新&#xff0c;让书法艺术大放光彩。 邓铎的书法作品在形式上追求“形似象…

【无标题】面试常考算法(3):二叉树遍历(创建、遍历、销毁)

这部分不够熟悉的话&#xff0c;面试直接递归就行。不过实际中虽然递归在某些情况下可以提供简洁和优雅的解决方案&#xff0c;但可能占用大量的内存空间和导致额外时间开销&#xff0c;所以还是尽量使用非递归。因为每次递归调用时&#xff0c;函数的局部变量和参数都需要在栈…

迭代器模式(十九)

相信自己&#xff0c;请一定要相信自己 上一章简单介绍了访问者模式(十八), 如果没有看过, 请观看上一章 一. 迭代器模式 引用 菜鸟教程里面迭代器模式介绍: https://www.runoob.com/design-pattern/iterator-pattern.html 迭代器模式&#xff08;Iterator Pattern&#xff…

实战:私有化部署ngin+文件步骤记录

这里写目录标题 背景准备总结 背景 出差到某国企进行私有化部署&#xff0c;一波三折。没想到是那种最麻烦的部署&#xff0c;导入文件需要刻光盘&#xff0c;进入电脑房需要上交手机&#xff0c;不允许有人以及拍摄设备&#xff0c;内部有监控摄像头。 有问题怎么办&#xf…

SYSU程设c++(第十六周)

set set<int> st; 会自动排序升序 如果降序可以set<int, greater<int>> s; map map<string,int> m; 会按键进行升序 m["uiui"]100; map<string,int>::iterator it; for(itm.begin();it!m.end();it){ cout<<"键&qu…

Spark大数据处理学习笔记(3.3)掌握RDD分区

该文章主要为完成实训任务&#xff0c;详细实现过程及结果见【http://t.csdn.cn/OmCQ8】 文章目录 一、概念二、自定义分区器2.1 提出问题2.2 解决问题1. 准备数据文件2. 新建科目分区器3. 测试科目分区器 三、课后作业 一、概念 在Spark中&#xff0c;RDD&#xff08;弹性分布…

长文|基于Zabbix的可观测性监控

01 可观测性与可观测性监控 02 基于ZABBIX的可观测性监控 03 可观测性监控的探索 ——王小东&#xff0c;多年运维老兵&#xff0c;《nginx应用与运维实战》作者 本文整理自王小东在2022Zabbix峰会演讲分享。ppt可在公众号后台回复“ppt"。 1、可观测性与可观测性监控…

拷贝构造函数

拷贝构造函数 以值传递的方式调用函数时&#xff0c;如果实参为对象&#xff0c;会调用拷贝构造函数。函数以值的方式返回对象时&#xff0c;可能会调用拷贝构造函数&#xff08;VS会调用&#xff0c;Linux不会&#xff0c;g编译器做了优化&#xff09; 类似于构造函数和析构函…

Python控制流程盘点及高级用法、神秘技巧大揭秘!

在这篇文章中我们将全面深入地介绍 Python 的控制流程&#xff0c;包括条件语句、循环结构和异常处理等关键部分&#xff0c;尤其会将列表解析、生成器、装饰器等高级用法一网打尽。此外&#xff0c;我还将分享一些独特的见解和研究发现&#xff0c;希望能给你带来新的启发。文…

让你不再疑惑图片翻译怎么弄

你是否曾遇到过在阅读外语文章或资料时&#xff0c;遇到了图片上的文字无法翻译的困扰&#xff1f;别担心&#xff0c;如果你还不知道如何翻译图片上的文字的话&#xff0c;接下来我将教你三种图片翻译的实用小技巧&#xff0c;一起来看看吧。 翻译图片的实用方法一&#xff1a…

Python语法基础01(列表,元组,字典)

Python基础语法 变量的命名与使用 变量名只能包含字母、数字和下划线&#xff0c;只能以字母和下划线为开头不能包含空格不能使用python保留字 列表&#xff0c;元组&#xff0c;字典 列表 定义列表(元素之间可以没有任何关系)&#xff1a;[] 例如 fruits["apple&qu…

oracle如何才能卸载干净

windows系统下oracle如何才能卸载干净 1.关闭oracle所有的服务。2.删除注册表中相关信息3.删除注册表中相关Oracle安装信息4.删除注册的oracle事件日志5.删除环境变量path中关于oracle的内容6.重新启动操作系统7.删除Oracle_Home下的所有数据8.删除oracle安装目录。9.删除开始菜…

灰度图像逻辑运算之逻辑或

目录 note code test note out max(x1,x2) code void img_logic_or_fun(uchar& in1, uchar& in2, uchar& out) {out in1 > in2 ? in1 : in2; } void img_logic_or(Mat& src1, Mat& src2, Mat& res) {if (src1.size() ! src2.size()) {retur…