信息学奥赛一本通之MAC端VSCode C++环境配置

前提

  1. 安装 Visual Studio Code
  2. VSCode 中安装 C/C++扩展
    在这里插入图片描述
  3. 确保 Clang 已经安装(在终端中输入命令:clang --version 来确认是否安装)
  4. 未安装,在命令行执行xcode-select --install 命令,会自行安装,安装文件有点大

  5.  

创建你的第一个 HelloWorld 程序


创建工作区(WorkSpace)
打开 VSCode, 创建一个 project 文件夹。

现在,project 就是我们的工作区(WorkSpace)了。当我们继续做完本教程的配置,这个工作区中将出现一个子文件夹.vscode,包含三个文件。
● tasks.json(编译选项设置)
 

创建 HelloWorld 的源代码文件


在 project 文件夹下创建一个 hello.cpp 文件

在 hello.cpp中粘贴以下内容

#include <iostream>

using namespace std;

int main(){
    cout << "Hello World" << endl;
}


Command+S(⌘S)保存该文件,

运行 HelloWorld(compile and run)


注意:C++扩展是使用机器上已安装的 C++编译器来生成程序,所以在运行/调试 hello.cpp 前,请确保你已经符合了文章开头的前提,安装好了 C++编译器。

打开 hello.cpp,这将它将成为 active file,可以被用于生成和调试
点击图中右上角的按钮,选择 Run C/C++ File

在跳出的选项中,选择C/C++: clang++ build and debug active file。

只有在第一次运行 hello.cpp 时才需要做这个选择。选择后,.vscode 文件夹中出现了一个新文件tasks.json,我们选择的编译器配置将作为默认设置。
编译成功后,程序的输出将显示在下方的 DEBUG CONSOLE

至此,我们已经成功地运行了 VS Code 上的第一个 C++程序!
  

几大主流 C++ 编译器(ICC / GCC / Clang / VC++)

gcc/g++ 和 clang/clang++ 都是 Linux 下常用的 C/C++ 编译器。gcc 是 GNU 亲儿子,Ubuntu 等常用发行版标配。clang 是后起之秀,配合 llvm,以优秀的前端闻名于世,现在已经是 Mac(XCode) 的默认编译器,微软等大公司都在往上靠,前景一片光明。知乎上对几个主流编译器的评价:

在标准支持方面,clang > g++ > vc > icc。从实际使用来看,非常取决于平台。比如win上vc最好,osx上clang最好,等。其他特点还有icc编译出来的东西在intel cpu上快。

clang/g++需要注意的是,他们的编译器对标准支持很好,但库的支持严重不行。以至于如果你要C++11/C++14,还是会打折扣的。另外,clang在win上简直是没有见过更屎的。

对于vc来说,编译速度这几代在一直提高,内存占用从vc12开始有明显改进,最明显的是Variadic template。还有内置的代码静态分析,在实际中很有用。vc14的静态分析不在每次载入一个ie(对,以前每分析一个.cpp,就载入一次ie!),速度快了相当多。

对我自己而言,优先级是clang>g++>msvc。

注:GNU是一个操作系统,其内容软件完全以GPL方式发布。这个操作系统是GNU计划的主要目标,名称来自GNU's Not Unix!的递归缩写,因为GNU的设计类似Unix,但它不包含具著作权的Unix代码。GNU的创始人,理查德·马修·斯托曼,将GNU视为“达成社会目的技术方法”。
 

修改 tasks.json

修改了文件组织形式后,存储了编译配置的 tasks.json 也需要做对应修改。
第一次编译运行 hello.cpp 时,我的机器上生成的 tasks.json 如下:

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: clang++ build active file",
            "command": "/usr/bin/clang++",
            "args": [
                "-fcolor-diagnostics",
                "-fansi-escape-codes",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "Task generated by Debugger."
        }
    ],
    "version": "2.0.0"
}

我们做如下两个修改:

工程中往往需要一次性编译选定路径下的所有 cpp 文件。对应的,把"args"中的:"${file}"改为"${fileDirname}/*.cpp"
我们希望把编译出的文件统一放置在 target 文件夹下。对应的,把"args"中的"${fileDirname}/${fileBasenameNoExtension}"改为"${workspaceFolder}/target/${fileBasenameNoExtension}"

修改工程文件结构

增加三个子文件夹 includesrctarget,并把 hello.cpp 移动到 src 目录下。

然后我们做下测试,看看修改后的工作区可否正常编译运行 hello.cpp

验证配置的正确性

在 include 中创建 print.h,粘贴如下内容:

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

void printMessage(vector<string>& msg);

 在 src 中创建 print.cpp,粘贴如下内容:

#include "../include/print.h"

void printMessage(vector<string> &msg)
{
    for (int i = 0; i < msg.size(); i ++){
        cout << msg[i] << " ";
    }
}

修改 src 下的 hello.cpp,粘贴如下内容:

#include "../include/print.h"

int main(){
    vector<string> msg;
    msg.push_back("Hello"); msg.push_back("World");
    printMessage(msg);
}

 
在 hello.cpp 中点击右上角的 run 按钮,可以看到也成功运行了(这说明我们实现了一次性编译多个 cpp 文件),而且目标文件生成到了 target 下。

 

cin命令无法输入

解决方法
(有多种解决方法,这里选择我认为最易于进行的方法)

Step1:下载相关插件(这一步简单带过)

安装CodeLLDB的扩展插件。

Step2:生成可执行文件

直接点击vscode右上角的运行按钮。

 

在命令行就可以输入了。

debug调试仍然不行需要修改配置

调试(修改launch.json文件)

可以看到在当前目录下多了.vscode文件夹,并且自动创建了launch.json文件。(这个时候直接进行调试会报错/仍然无法处理输入问题)

这里我们需要修改两个地方:

1、使用集成终端来运行和调试程序:增加 “terminal”: “integrated”, 如果type不是就改为lldb,例:"type":"lldb"

2、运行当前文件所在目录下的同名可执行文件:修改program属性为:“${workspaceFolder}/helloworld” 网上${fileBasenameNoExtension}是不行的,直接报错

至此,修改完成。

先运行Run Code,然后运行《运行调试c/c++文件》,再调试就可以输入了。不能直接点击《运行调试c/c++文件》,直接点击依然没有输入的地方。

codeLLdb插件安装不了的解决方法

下载codeLLdb

codeLLdb下载地址
打开vscode后选择 扩展->视图和更多操作->从VSIX安装
在这里插入图片描述

选择下载的插件文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

超越传统的极限:解密B树与B+树的数据结构之美!

超越传统的极限&#xff1a;解密B树与B树的数据结构之美&#xff01; B树和B树是在计算机科学中常用的平衡查找树数据结构&#xff0c;它们在处理大规模数据和磁盘存储方面具有重要的优势。本文将深入介绍B树和B树的基本概念、特点以及它们在数据库和文件系统中的应用&#xff…

AR/MR产品设计(二):如何用一双手完成与虚拟对象的自然交互

AR/MR产品设计&#xff08;二&#xff09;&#xff1a;如何用一双手完成与虚拟对象的自然交互 - 知乎 手是我们与现实世界交互最重要的方式&#xff0c;同样在虚实混合的世界中是最重要的交互方式 在AR/MR/VR的交互中&#xff0c;手势交互会作为XR的重要交互动作&#xff0c;因…

强缓存和协商缓存

前言 计算机网络模型从底到上&#xff1a;物理层&#xff08;光纤、网线&#xff09;、链路层&#xff08;MAC地址&#xff09;、网络层&#xff08;IP协议&#xff09;、传输层&#xff08;TCP\UDP&#xff09;、应用层&#xff08;HTTP\FTP\DNS&#xff09;。HTTP协议是作用…

数据结构:栈「详解」

目录 一&#xff0c;栈的定义 二&#xff0c;栈的基本操作 1&#xff0c;顺序栈 1.1顺序栈的基本概念 1.2顺序栈的基本操作 2&#xff0c;链栈 2.1链栈的基本概念 2.2链栈的种类 2.3链栈的基本操作 三&#xff0c;栈的应用 1&#xff0c;函数递归调用 2&#xff0c;…

【论文阅读笔记】Split frequency attention network for single image deraining

1.论文介绍 Split frequency attention network for single image deraining 用于单幅图像去噪的分频注意力网络 Paper Code 2023年 SIVP 2.摘要 雨纹对图像质量的影响极大&#xff0c;基于数据驱动的单图像去噪方法不断发展并取得了巨大的成功。然而&#xff0c;传统的卷积…

Go语言gin框架中加载html/css/js等静态资源

Gin框架没有内置静态文件服务&#xff0c;但可以使用gin.Static或gin.StaticFS中间件来提供静态文件服务。 效果图如下&#xff1a; 一、gin 框架加载 Html 模板文件的方法 方式1&#xff1a;加载单个或多个html文件&#xff0c;需要指明具体文件名 r.LoadHTMLFiles("vie…

Sketch软件:重塑UI/UX设计流程的革命性工具

Sketch是一款在Mac操作系统上运行的矢量图形设计软件&#xff0c;其功能特色丰富多样&#xff0c;深受设计师们的喜爱。以下是Sketch软件的主要功能特色介绍&#xff1a; 专业矢量图形设计&#xff1a;Sketch为UI设计、移动应用设计和Web设计等领域提供了强大的支持。它支持线条…

优化选址问题 | 基于NSGAII求解考虑成本、救援时间和可靠性的海上救援选址多目标问题附matlab代码

目录 问题代码问题 NSGA-II(非支配排序遗传算法II)是一种流行的多目标优化算法,用于解决具有多个冲突目标的问题。在海上救援选址问题中,我们可能希望同时优化成本、救援时间和可靠性。以下是一个简化的示例,说明如何使用NSGA-II算法来解决这个问题,并提供相应的MATLAB代…

【数据结构】布隆过滤器

目录 前言 1. 什么是布隆过滤器&#xff1f; 2. 布隆过滤器的原理 2.1 添加元素原理 2.2 判断元素存在原理 3. 布隆过滤器使用场景 4. 使用 Java 语言实现布隆过滤器 测试用例 测试结果 注&#xff1a;手机端浏览本文章可能会出现 “目录”无法有效展示的情况&#x…

Flutter-底部弹出框(Widget层级)

需求 支持底部弹出对话框。支持手势滑动关闭。支持在widget中嵌入引用。支持底部弹出框弹出后不影响其他操作。支持弹出框中内容固定头部和下面列表时&#xff0c;支持触摸头部并在列表不在头部的时候支持滑动关闭 简述 通过上面的需求可知&#xff0c;就是在界面中可以支持…

【早鸟优惠|高录用|EI稳定检索】2024年虚拟现实、图像和信号处理国际学术会议(ICVISP 2024)诚邀投稿/参会!

【早鸟优惠|高录用|EI稳定检索】 2024年虚拟现实、图像和信号处理国际学术会议&#xff08;ICVISP 2024&#xff09;诚邀投稿/参会&#xff01; # 早鸟优惠 # 先投稿先送审 # #投稿免费参会、口头汇报及海报展示# 2024年虚拟现实、图像和信号处理国际学术会议&#xff08;I…

京津冀自动驾驶产业盛会“2024北京国际自动驾驶技术展览会”

随着科技的飞速发展&#xff0c;自动驾驶技术成为了汽车产业变革的热点和前沿。智能化、网联化已经成为推动汽车产业创新发展的重要力量&#xff0c;而自动驾驶技术则是其中的关键一环。它不仅能够提高道路安全性、缓解交通拥堵&#xff0c;还能为乘客带来更加舒适、便捷的出行…

RediSearch比Es搜索还快的搜索引擎

1、介绍 RediSearch是一个Redis模块&#xff0c;为Redis提供查询、二次索引和全文搜索。要使用RediSearch&#xff0c;首先要在Redis数据上声明索引。然后可以使用重新搜索查询语言来查询该数据。RedSearch使用压缩的反向索引进行快速索引&#xff0c;占用内存少。RedSearch索…

Qt5.14.2 深入理解Qt多线程编程,掌握线程池架构实现高效并发

在高并发的软件系统中&#xff0c;多线程编程是解决性能瓶颈和提高系统吞吐量的有效手段。作为跨平台的应用程序开发框架&#xff0c;Qt为我们提供了强大的多线程支持。本文将深入探讨Qt多线程编程的实现细节&#xff0c;并介绍线程池的设计思想&#xff0c;帮助读者彻底掌握Qt…

Flutter-数字切换动画

效果 需求 数字切换时新数字从上往下进入&#xff0c;上个数字从上往下出新数字进入时下落到位置并带有回弹效果上个数字及新输入切换时带有透明度和缩放动画 实现 主要采用AnimatedSwitcher实现需求&#xff0c;代码比较简单&#xff0c;直接撸 import dart:math;import p…

huawei 华为交换机 配置手工模式链路聚合示例

组网需求 如 图 3-21 所示&#xff0c; SwitchA 和 SwitchB 通过以太链路分别都连接 VLAN10 和 VLAN20 的网络&#xff0c;SwitchA 和 SwitchB 之间有较大的数据流量。 用户希望SwitchA 和 SwitchB 之间能够提供较大的链路带宽来使相同 VLAN 间互相通信。 同时用户也希望能够提…

网页星光闪耀背景动画特效

网页星光闪耀背景动画特效 源码下载 网页星光闪耀背景动画特效

DockerHub搜索并拉取一个Redis镜像

1&#xff09;去DockerHub搜索Redis镜像 2&#xff09;查看Redis镜像的名称和版本 3&#xff09;利用docker pull命令拉取镜像 4&#xff09;利用docker save命令将 redis:latest打包为一个redis.tar包 5&#xff09;利用docker rmi 删除本地的redis:latest 6&#xff09;利用…

Github 2024-03-18 开源项目周报Top15

根据Github Trendings的统计,本周(2024-03-18统计)共有15个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目6TypeScript项目2Go项目2JavaScript项目2非开发语言项目1HTML项目1CSS项目1Rust项目1Dart项目1C++项目1Jupyter Notebook项目1Electr…

创新应用2:nnmf+DBO+K-Medoids聚类,蜣螂优化算法DBO优化K-Medoids,适合学习和发paper。

创新应用2&#xff1a;nnmfDBOK-Medoids聚类&#xff0c;蜣螂优化算法DBO优化K-Medoids&#xff0c;适合学习和发paper。 一、蜣螂优化算法 摘要&#xff1a;受蜣螂滚球、跳舞、觅食、偷窃和繁殖等行为的启发&#xff0c;提出了一种新的基于种群的优化算法(Dung Beetle Optim…