信息学奥赛之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}/${fileBasenameNoExtension},需求注意的是先选中要运行的c++文件,然后再点击调试就可以运行成功,否则会提示文件找不到

至此,修改完成。

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

直接点击需要修改配置,直接点击使用的是插件的调试插件,如下,需要安装xcode,对xcode版本有要求

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "clang++ build and debug active file",
            "type": "cppdbg",
            "request": "launch",
            "program": "${fileDirname}/${fileBasenameNoExtension}",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "miDebuggerPath": "/Applications/Xcode.app/Contents/Developer/usr/bin/lldb-mi",
            "MIMode": "lldb",
            "preLaunchTask": "clang++ build active file"
        }
    ]
}

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

下载codeLLdb

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

选择下载的插件文件

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

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

相关文章

CSS 脱离标准文档流 浮动

浮动 在标准流当中&#xff0c;元素或者标签在页面上摆放的时候会出现不如意的地方。要想解决这些问题可以采用脱离标准流的方式来进行解决这些问题&#xff0c;脱离标准流也称为脱离文档流。 脱离标准流的解决方式有三种&#xff0c;一种是浮动&#xff0c;另外一种是固定定位…

综合案例:使用Scrapy爬取当当网的图片信息

本节将继续讲解 Scrapy 框架的使用。具体包括 Scrapy 爬虫框架以及内部每个组件的使用&#xff08;Selector 选择器、Spider 爬虫类、Downloader 和 Spider 中间件、ItemPipeline 管道类等&#xff09;。 本例目标是爬取当当图书网站中所有关于 “python” 关键字的图片信息&a…

网站没有SSL证书会遇到什么问题?怎么解决?

简单来说&#xff0c;如果一个网站没装SSL证书&#xff0c;会有以下几个大问题&#xff1a; 1.信息容易被偷看&#xff1a; - 就像写信不封口一样&#xff0c;网站和用户之间的交流信息是透明的&#xff0c;谁都能看到。比如你在网站上输入的账号密码、联系信息、银行卡号等重要…

最全APP抓包大法

前言&#xff1a;最近工作中遇到一些比较奇葩的App&#xff0c;一边测试一边搜集整理出了比较全的姿势。如有错误之处&#xff0c;还请各位师傅多多指教。 如何判断&#xff1a;连接Fiddler代理–>抓不到包–>关闭Fiddler后正常通信。 解决方法&#xff1a;PC端模拟器如…

计算机视觉项目-单目测距/双目测距/3D目标检测/语义分割/姿态识别及姿态估计

往期热门大项目合集&#xff1a; yolov5单目测距速度测量目标跟踪YOLOv8界面-目标检测语义分割追踪姿态识别&#xff08;姿态估计&#xff09;界面DeepSort/ByteTrack-PyQt-GUI_yolov8显示速度-CSDN博客 3D目标检测&#xff08;教程代码&#xff09;_3d目标检测原理-CSDN博客…

基于Springboot+Vue的前后端分离的简单Demo案例(一)

后端创建Springboot项目 创建数据库表结构及表信息 添加依赖&#xff08;pom.xml&#xff09; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/X…

CSDN欢迎使用Markdown编辑器你好,写文章快捷键与格式

了 解一下Markdown的基本语法知识。 1.全新的界面设计&#xff0c;将会带来全新的写作体验; 2.在创作中心设置你喜爱的代码高亮样式Markdown 将代码片显示选择的高亮样式进行展示; 3.增加了 图片拖拽 功能&#xff0c;你可以将本地的图片直接拖拽到编辑区域直接展示; 4.全新的 …

19.作业

1.作业样例图 2.学习视频 19.作业讲解

安卓使用MQTT实现阿里云物联网云台订阅和发布主题(3)

一、订阅主题代码讲解 private final String mqtt_sub_topic "/sys/k0wih08FdYq/LHAPP/thing/service/property/set";//订阅话题//mqtt客户端订阅主题//QoS0时&#xff0c;报文最多发送一次&#xff0c;有可能丢失//QoS1时&#xff0c;报文至少发送一次&#xff0c…

YOLOv9改进策略:block优化 | AIFI (尺度内特征交互)助力YOLO | YOLO终结者?RT-DETR一探究竟

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文改进内容&#xff1a; YOLOv9如何魔改卷积进一步提升检测精度&#xff1f;AIFI (尺度内特征交互&#xff09;助力YOLO ,提升尺度内和尺度间特征交互能力&#xff0c;同时降低多个尺度的特征之间进行注意力运算&#xff0c;计算消耗…

C语言例:n是否为素数(质数)

质数是指只能被1和自身整除的正整数。要判断一个数n是否为质数&#xff0c;可以通过以下步骤进行&#xff1a; 首先&#xff0c;判断n是否小于2&#xff0c;如果小于2&#xff0c;则不是质数。然后&#xff0c;从2开始&#xff0c;逐个判断n是否能被2到sqrt(n)之间的数整除。如…

jdk api之SyncFailedException基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

实体框架EF(Entity Framework)简介

实体框架EF&#xff08;Entity Framework&#xff09;简介 文章目录 实体框架EF&#xff08;Entity Framework&#xff09;简介一、概述二、O/R Mapping是什么采用O/R Mapping带来哪些好处 三、Entity Framework架构3.1 下图展示了Entity Framework的整体架构3.2 Entity Framew…

【机器学习-08】参数调优宝典:网格搜索与贝叶斯搜索等攻略

超参数是估计器的参数中不能通过学习得到的参数。在scikit-learn中&#xff0c;他们作为参数传递给估计器不同类的构造函数。典型的例子有支持向量分类器的参数C&#xff0c;kernel和gamma&#xff0c;Lasso的参数alpha等。 ​ 在超参数集中搜索以获得最佳cross validation交叉…

Ant Design Vue和VUE3下的upload组件使用以及文件预览

Ant Design Vue和VUE3下的upload组件使用以及文件预览 文章目录 Ant Design Vue和VUE3下的upload组件使用以及文件预览一、多文件上传1.需求2.样例3.代码 二、单文件上传1. 需求2. 样例3.代码 二、多文件上传产生的时间超时问题三、文件系统名称更改1. 修改文件index.html2. 修…

现货大宗商品交易系统开发及平台需要哪些资质

现货大宗商品交易平台需要一系列资质和条件来确保其合法、合规运营&#xff0c;保障投资者的权益和市场的稳定。以下是现货大宗商品交易平台需要的主要资质和条件&#xff1a; 公司注册与法人资格&#xff1a;平台需要依法办理工商注册登记手续&#xff0c;并具有法人资格。这…

硬核分享|如何使用AI根据一段文字描述来生成图片

硬核分享|如何使用AI根据一段文字描述来生成图片_哔哩哔哩_bilibili 最近许多人询问关于AIGC生成图片工具的推荐问题&#xff0c;深感寻找一款好用的AIGC生成图片工具在当今信息爆炸时代的重要性。现在&#xff0c;为大家分享几款好用的AIGC生成图片工具&#xff0c;一起探索吧…

【C++】vector容器初步模拟

送给大家一句话&#xff1a; 努力一点&#xff0c;漂亮—点&#xff0c;阳光一点。早晚有一天&#xff0c;你会惊艳了时光&#xff0c;既无人能替&#xff0c;又光芒万丈。 vector容器初步模拟 1 认识vector开始了解底层实现 2 开始实现成员变量构造函数 析构函数尾插迭代器插入…

FX110网:FCA揭露Admirals的克隆实体!冒充正规平台行骗

近日&#xff0c;英国金融行为监管局&#xff08;FCA&#xff09;曝光了多个网址&#xff0c;揭露克隆实体fxsadmiral / admiral-fx / admiralsfx。这些克隆公司复制授权公司Admiral Markets UK Ltd的重要信息&#xff0c;试图让人们相信他们的公司是真实的。FCA本次披露的克隆…

记录西门子200:PUT和GET通讯测试

GET/PUT&#xff1a;S7-200SMART之间专有通讯协议。 准备两台Smart-PLC&#xff0c;这里使用的ST60和CR40。外加一个交换机。 CR40的地址设置是&#xff1a;192.168.2.1 用来读 ST60的地址设置是&#xff1a;192.168.2.2 用来写 打开软件&#xff0c;选择CPU-CR4配…