C++开发与学习平台@软件选择@代码跨平台问题@语言文档参考指南

文章目录

    • 集成编译器的C/C++开发工具(开箱即用)
    • 学习平台选择推荐👺
      • 初学者平台和软件选择
        • 开箱即用的C/C++运行环境
        • 需要稍微配置的环境
        • 有经验的用户
      • 小结👺
    • AI辅助
      • 开发工具代码补全和AI代码片段生成补全
    • 资料
    • C++代码跨平台问题👺
      • C++标准库
      • ISO C++
      • 非标准库
    • C++文档

集成编译器的C/C++开发工具(开箱即用)

  1. Microsoft Visual Studio with MSVC:

    • 虽然MSVC主要用于Windows平台,但随着近年来的发展,已经具备了跨平台编译能力,可以构建Linux和iOS应用。
    • 特点:商业级IDE,提供了丰富的调试和开发工具,对于Windows原生开发支持完善。
  2. Code::Blocks:

    • Code::Blocks 是一款轻量级、开源的C++ IDE,内置了GCC或Clang编译器支持,可在多种平台上运行。
    • 特点:简单易用,适合初学者快速上手,具有代码高亮、自动补全、调试等功能。
  3. Eclipse CDT:

    • Eclipse CDT 包含了一个基于GCC或Clang的C++编译器,通过插件形式实现了跨平台IDE的功能。
    • 特点:开源免费,强大的代码编辑和项目管理工具,适用于多平台开发。
  4. 小熊猫C++

    • 小熊猫C++ | 小熊猫C++ (royqh.net)

    • 下载 (royqh.net)

    • 小熊猫编译器选择比较灵活,如果您本地已经配置好了编译器,比如MinGW或MSYS2,那么小熊猫会自己扫描,可能就不需要配置了

    • 或者直接下载集成了编译器的版本

    • 即可选择安装版,也可以选择免安装版本

    • 软件界面也比较清晰,是现代化的界面,风格和Dev C++类似

  5. DEV C++ 老牌C++运行环境

    • Dev-C++ download | SourceForge.net
  6. DEV C++的改进分支版本 Dev-C++ Overview - Free Tools - Embarcadero

学习平台选择推荐👺

初学者平台和软件选择

  • 对于初学者,推荐用图形界面系统,可以用windows系统(windows10,11个人用户激不激活都能用,只是个性化方面受限,只是windows7老古董会黑屏,但是基本淘汰了),可以分情况入手
开箱即用的C/C++运行环境
  • 最容易入手的Dev C++家族的软件入手,比如小熊猫C++,Embarcadero C++,或者DEV C++本身
  • 其次可以选择Code::Blocks或者Microsoft Visual Studio Community版开始,都有友好的用户界面和丰富的教程资源,非常适合学习C++基本语法和概念。
需要稍微配置的环境
  • 如果愿意稍微配置一下,那么使用vscode+C/C++ extension 也是很好的选择,可以搜索带有配置文件的相关的仓库,下载下来,几乎就是开箱即用的程度,又有丰富的插件生态,可以用得非常舒服,但是对于大项目来说,还是要用更专业的工具
  • 使用CLion的用户也有不少,这个软件比较占用资源
有经验的用户
  • 如果偏好命令行工具和开源环境,可以选择GCC或Clang,并搭配简单的文本编辑器(如Vim、Emacs或VS Code等),这样可以更专注于语言本身的学习。
  • 用C++学习一些简单编程和算法,可以不用太纠结平台的选择,习惯用那个系统就用那个系统
  • 但是到了开发特定软件阶段或者系统编程,那么平台的选择就需要考虑
  • 不过即便是linux系统编程,也可以用vscode之类的编辑器利用ssh链接,这样,哪怕没有安装图形界面的linux也可以用图形界面的IDE或编辑器编写代码,获得智能补全,错误提示等插件带来的便利

小结👺

  • 对于初级阶段的C++学习或者算法学习,推荐图形化方案的跨平台和轻量的编程环境

    • 开箱即用适合国人的小熊猫C++,其他开箱即用的也可以
    • 也推荐vscode配合C++插件拓展,里面的AI插件可以提供不少帮助,而编译器可以任意选择可用的就行:配置实践:Vscode配置C/C++编程环境@配置C和CPP的运行和调试环境@配置过程的相关问题@中文文件名乱码@build和debug方案组合配置-CSDN博客
  • 对于工程级别的专业的C++编程,可以考虑重量级的IDE,比如Clion,Visual Stuido

AI辅助

开发工具代码补全和AI代码片段生成补全

  • 人工智能时代,您的现代IDE可以安装各种各样的人工智能代码插件,帮助您学习代码编写,提高输入效率,提高代码的规范性和乐趣
  • 相关插件数量和种类繁多,国内外都有,免费和收费的都有,补全效果也各不相同

资料

  • 学习过程中,可以结合官方文档、网络教程和经典的教材(如《C++ Primer》等),逐步掌握C++的面向过程和面向对象编程技巧,并了解如何配置和使用不同的编译器进行跨平台开发。
  • 开源教程项目:
    • Light-City/CPlusPlusThings: C++那些事 (github.com)
    • soulmachine/leetcode: LeetCode题解 (github.com)

C++代码跨平台问题👺

  • 我们以windows系统上编写的C++代码在linux上能否运行的情况进行简要说明

  • 在Windows上编写的C++代码能否在Linux系统上运行,取决于代码本身的可移植性。

  • 以下是一些常见的情况分析:

    1. 纯C++标准库代码

      • 如果您的代码仅使用ISO C++标准库,并且没有依赖任何特定于Windows的操作系统API或特性,理论上是可以直接在Linux上编译和运行的。因为标准C++库在所有支持C++的平台上都是通用的。
      • 例如代码中包含的是打印Hello,World这种与系统平台关系不大的语句,那么同样的代码在不同平台上都可以运行
      • 而如果是设计到系统编程(这部分C语言比较多),可能需要导入平台相关的头文件,那么同样一份代码往往就不能在其他系统(平台)上运行
      • 而类似于python这种一般不用在系统编程的程序设计语言,其同一份代码的跨平台运行能力就更好,或者说需要做的改动往往就更少
    2. 第三方库

      • 如果代码使用了跨平台的第三方库(如Boost、STL、Qt等),并且这些库在Linux上可用,则代码可以迁移至Linux,前提是正确的包含头文件路径和链接库文件。
    3. 操作系统特定API调用

      • 若代码中包含了Windows特有的API调用(如Win32 API、MFC、ATL等),这部分代码在Linux上是不可用的。需要替换为相应的Linux API,例如POSIX接口或其他Linux下对应的功能实现。
    4. 文件路径和行结束符

      • 文件路径处理和文本文件的行结束符在Windows和Linux上存在差异。Windows使用反斜杠\作为路径分隔符,而Linux使用正斜杠/。行结束符Windows是\r\n,Linux是\n。需要对这些细节进行处理才能保证跨平台兼容。
    5. 编译器差异

      • Windows上的Visual Studio编译器(MSVC)和Linux上的GCC或Clang编译器在某些编译选项、预处理器宏、模板特化等方面可能存在差异。例如,某些编译器扩展或警告级别可能需要调整。
    6. 编译和链接方式

      • Windows和Linux下的编译和链接命令行参数不同。Windows上一般使用cl.exe(MSVC)或g++.exe(MinGW-w64),而Linux上使用g++或clang++。还需注意编译选项、链接库顺序及链接静态库或动态库的区别。
    7. 线程和并发模型

      • 如果代码涉及线程创建或同步,Windows有其自身的线程API,而在Linux下通常使用pthread库。代码需要修改以适应目标系统的线程模型。
    8. 字节序和端口

      • 在处理网络通信或二进制数据流时,要考虑字节序问题(大端/小端),以及套接字编程时的API差异。
  • 总结来说,为了使Windows上的C++代码能够在Linux上运行,需要确保代码的跨平台性,即避免使用平台相关的API,使用标准C++特性,合理处理平台差异,以及配置正确的编译环境。在实际移植过程中,可能还需要修改代码、调整编译选项,并重新编译和测试。

C++标准库

  • C++标准库是C++编程语言的核心组成部分之一,它是由C++标准委员会制定的一系列模板类、函数和其他工具的集合,旨在为C++程序员提供一系列通用的数据结构、算法、输入/输出操作以及其他基本服务。
  • C++标准库不仅包含了C语言标准库的所有功能,还额外提供了许多高级特性,比如面向对象的组件、泛型编程工具(如STL)以及更多复杂的数据结构和算法。

C++标准库的主要部分包括:

  1. C库兼容部分

    • 这部分源自C标准库,包含诸如stdio.h、stdlib.h、string.h等头文件中的函数,如printf、malloc、strcpy等。在C++中,它们可以通过iostream、cstdlib、cstring等头文件访问。
  2. C++特有的库

    • 包括string、vector、list、map等容器类,这些类为程序员提供了灵活高效的数据存储解决方案。
    • 异常处理机制,通过<exception>头文件提供。
    • 动态内存管理,如智能指针(shared_ptr, unique_ptr, weak_ptr)位于头文件中。
    • 输入输出流库(iostream),支持与终端、文件和其他I/O设备的交互。
    • RTTI(运行时类型识别)和类型转换支持。
  3. 标准模板库(Standard Template Library, STL)

    • STL是C++标准库的核心部分,包含了一系列通用的模板组件,如:
      • 容器(containers):vector、list、deque、set、map、stack、queue等。
      • 算法(algorithms):排序、查找、遍历等各种操作数据序列的函数。
      • 迭代器(iterators):用于访问容器内元素的一种抽象接口。
      • 仿函数(functors)或函数对象(function objects):用于表达算法所需的行为,现已被C++11之后的lambda表达式增强。
  4. 其他库

    • 标准库还包括了本地化支持(locale)、时间处理(chrono)、正则表达式(regex)、多线程支持(thread)、原子操作(atomic)、文件系统操作(filesystem)等从C++11及后续版本添加的新功能。
  • 每种主流的C++编译器都会遵循ISO C++标准实现自己的C++标准库,确保编译后的程序能够利用这些标准库的功能在不同平台上达到一定程度的可移植性。

ISO C++

  • ISO(International Organization for Standardization,国际标准化组织)是一个全球性的非政府组织,成立于1947年,致力于制定和推广国际标准,以促进全球商业、工业、科技和消费者之间的合作与协调。ISO制定的标准涵盖广泛的技术领域,旨在提供一致性和互操作性,以便产品、服务、过程和系统在全球范围内得到认可和接受。

  • ISO C++是对C++编程语言的一种标准化表述,它由ISO下属的技术委员会JTC1/SC22/WG21(即ISO/IEC JTC1/SC22/WG21工作组)负责制定和维护。C++标准基于WG21的工作成果,形成了正式的国际标准——ISO/IEC 14882。这个标准详细定义了C++语言的关键特性、语法、语义以及标准库的规格。

  • C++标准自首次发布以来经历了多次修订,以适应编程实践的发展和技术的进步。例如,C++的第一个正式国际标准是在1998年发布的ISO/IEC 14882:1998(也被称作C++98)。后续的版本包括C++03(2003年的小幅修订版)、C++11(2011年重大更新)、C++14(2014年进一步改进)、C++17(2017年进一步增强),以及C++20(2020年引入更多新特性)。每个新的标准版本都在原有基础上增添了新的语言特性和库功能,同时也进行了修正和优化。

  • 遵循ISO C++标准的编译器必须支持标准中所定义的所有语言特性以及标准库,这样编写的C++程序才能够在符合标准的任何编译器上正确编译和运行,确保了C++程序的可移植性。同时,ISO C++标准也为教育、研究、开发和质量保证提供了权威依据。

非标准库

在C++中,非标准库指的是不属于ISO C++标准规定范围内的库,即它们不是由C++标准委员会指定并包含在C++标准文档内的库。非标准库通常由第三方开发者、开源社区或者特定的软件供应商提供,它们提供的功能可能是某个特定领域的高级抽象,或者是对标准库功能的补充,也可能是在特定平台上独有的API。

例如:

  1. Windows API

    • 在Windows环境下,如果C++程序直接调用了Windows SDK中的API函数(如Windows.h中声明的函数),这些就不属于C++标准库,而是Windows特有的非标准库。
  2. 特定平台库

    • 对于某些嵌入式系统或特定硬件平台,可能有专门的库来访问底层硬件功能,这些库通常是非标准的。
  3. Boost库

    • Boost库集合是一个广受欢迎的C++库集,虽然其中许多库的设计思想和技术最终被采纳到C++标准中(比如C++11/14/17中的部分特性),但在它们被纳入标准之前,Boost库本身是非标准的。
  4. Qt库

    • Qt是一个流行的跨平台应用程序开发框架,提供了大量的图形用户界面、网络、数据库访问等组件,虽功能强大且跨平台,但不属于C++标准库的一部分。
  5. 游戏引擎或图形渲染库

    • 像Unity的C++插件API、Unreal Engine的C++接口、OpenGL或DirectX这样的图形渲染库也是非标准库。
  6. 企业级应用框架

    • 一些大型企业级应用框架,如MFC(Microsoft Foundation Classes)或WxWidgets,它们提供了构建GUI应用程序的强大工具,但不是C++标准库的一部分。

非标准库的使用可以使开发者更加方便地解决特定问题,但也意味着增加了代码的非移植性。由于非标准库的实现和语义可能因供应商或版本的不同而有所差异,所以使用非标准库编写的代码往往不如使用标准库编写的代码具有更好的跨平台性和兼容性。

C++文档

C++标准本身并没有一个官方的教程,但是C++标准委员会(ISO/IEC JTC1/SC22/WG21)维护着C++标准的规范文档,这是最为权威的语言描述。标准文档可以通过ISO官网购买,也可以通过参与标准制定的成员机构获取,有时这些文档在特定时期会有限期公开草案供公众查阅。

对于开发者来说,以下是一些广泛使用的、高质量且接近“官方”级别的C++参考文档和教程资源:

  1. C++参考手册

    • cppreference.com 提供了一份详尽且及时更新的在线C++参考文档,涵盖了语言特性和标准库内容,有多种语言版本,包括中文版(https://zh.cppreference.com/w/)。
  2. ISO C++ 标准草案

    • WG21的GitHub仓库(https://github.com/cplusplus/draft)经常更新最新的C++标准草案,可供查阅最新加入的语言特性。
  3. 官方标准提案(Working Drafts)

    • ISO偶尔会公开工作草案,这些草案可以用来了解最新的语言进展,但请注意这些并不是最终确定的官方标准。
  4. 编译器厂商文档

    • 微软的C++文档(https://docs.microsoft.com/en-us/cpp/)提供了C++语言和Microsoft Visual C++编译器的详细信息。
    • GCC(GNU Compiler Collection)和libstdc++也有详细的官方文档。
  5. 书籍

    • 虽然不是官方出品,但《C++ Primer》、《Effective C++》、《More Effective C++》、《C++ Concurrency in Action》等经典书籍深受业界推崇,作者们通常是C++社群的权威人士。
  6. 在线教程

    • learncpp.com 和 cprogramming.com 等网站提供了一系列逐步引导的C++教程。
  7. C++标准委员会官方会议记录

    • Committee Meeting Papers (CWG papers, EWG papers等) 可从WG21的官方网站获取,这些记录包含了关于C++语言设计决策的讨论和解释。

综上所述,尽管没有严格意义上的“官方教程”,上述资源共同构成了C++开发者学习和参考的重要资料库。

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

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

相关文章

全国省级金融发展水平数据集(2000-2022年)

01、数据简介 金融发展水平是一个国家或地区经济实力和国际竞争力的重要体现。它反映了金融体系的成熟程度和发展水平&#xff0c;是衡量一个国家或地区经济发展质量的重要指标。金融发展水平的提高&#xff0c;意味着金融体系能够更好地服务实体经济&#xff0c;推动经济增长…

Servlet(写一个Hello Worldt)【一】

文章目录 一、Servlet 目的 ----- 实现动态页面二、编写一个 Servlet 的Hello World2.1 创建项目2.2 处理文件夹2.3 引入依赖2.4 手动创建一些必要的目录/文件2.5 编写代码2.6 打包程序2.7 部署2.8 验证程序是否能正常工作 一、Servlet 目的 ----- 实现动态页面 静态页面 VS 动…

安卓免费抠图、AI绘图、修图软件——SnapEdit

一、前言 AI绘图原理主要基于深度学习和神经网络技术&#xff0c;通过训练数据集中的图像&#xff0c;从中学习并提取特征&#xff0c;进而生成新的图像。这一过程涉及到多种技术和模型&#xff0c;包括但不限于VAE&#xff08;变分自编码器&#xff09;、auto-encoder、GAN&a…

后端工程师——C++工程师如何准备面试?

相比 Java 语言方向,C++ 入门简单,精通难,找工作竞争压力更小,但 C++ 依然是近年来招聘的热门岗位之一。本文将从以下三个方面进行详细讲解,帮助你对 C++ 相关岗位的就业前景、岗位要求、学习路线等有更充分的了解。 C++工程师面试准备 上两篇文章对 C++ 工程师的招聘需求…

2024年世界排名TOP250医院榜单发布|医学访学/博后/联培博士参考

作为医学类的访问学者、博士后及联合培养博士们&#xff0c;都希望到世界知名医院进行临床研修交流及科研学习。2024年世界最佳医院排行榜的发布为申请者提供了可选目标&#xff0c;现知识人网小编整理刊出。 近日&#xff0c;美国《新闻周刊》&#xff08;Newsweek&#xff09…

To String的几个作用

To String的几个作用 一、Object类中toString的作用 1、在主方法中我们可以直接用toString输出对象其中的内容 2、我们需要直接输出对象中所属内容时&#xff0c;直接使用toString方法输出语句&#xff0c;输出内容不友好&#xff0c;不便于阅读 子类&#xff1a; public c…

[USACO18DEC] S 补题报告

目录 1 AC情况2 题目详情Convention SConvention II SMooyo Mooyo S 1 AC情况 Convention SConvention II SMooyo Mooyo S Accepted \texttt{\color{green}{Accepted}} Accepted Accepted \texttt{\color{green}{Accepted}} Accepted Unaccepted \texttt{\color{red}{Unaccept…

vue的build先上部署的 devServer不生效的场景记录

文章目录 Nginx 相关命令VUE项目devServer.proxy&#xff08;正向代理&#xff09;匹配请求中的地址工作流程开发期间代理proxy的配置项目打包上线出现的问题描述 Nginx 相关命令 //运行命令 start nginx 启动nginx服务//运行命令 nginx -s stop 停止nginx服务//运行命令 ngin…

Linux 进程管理快捷键 ctrl+z、ctrl+c、ctrl+\、ctrl+d介绍

在Linux系统中&#xff0c;可以使用一些特定的键盘快捷键来管理后台进程和控制终端的行为。下面是对这些快捷键的介绍&#xff1a; 1 CtrlZ&#xff08;挂起&#xff09;&#xff1a; 在终端中运行程序时&#xff0c;你可以使用CtrlZ来将其挂起&#xff0c;即将其移动到后台并…

zabbix图形乱码解决方案

zabbix使用中文后&#xff0c;图形那里乱码&#xff0c;因为没有中文包&#xff0c;需要安装中文包并且应用 1.安装中文包 yum install -y wqy-microhei-fonts 2.修改配置 /usr/share/zabbix/include/defines.inc.php 修改为 define(ZBX_GRAPH_FONT_NAME, wqy-microhei); 3…

Pytorch:张量的梯度计算

目录 一、自动微分简单介绍1、基本原理2、梯度计算过程3、示例&#xff1a;基于 PyTorch 的自动微分a.示例详解b.梯度计算过程c.可视化计算图 4、总结 二、为什么要计算损失&#xff0c;为何权重更新是对的&#xff1f;1、梯度下降数学原理2、梯度上升 三、在模型中使用自动微分…

时间延迟嵌入定理 Time-Delay Embedding Theorem 以及C++实现例子

时间延迟嵌入定理&#xff08;Time-Delay Embedding Theorem&#xff09;&#xff0c;也称为Takens嵌入定理&#xff0c;由荷兰数学家Floris Takens在1981年提出。这个定理在动力系统理论中非常重要&#xff0c;特别是在从实验数据重建动力系统的状态空间模型方面具有广泛应用。…

js箭头函数的this

结论 箭头函数没有自己的this箭头函数的this取决于父级的作用域箭头函数的this在函数定义的时候就已经确定了&#xff0c;但是普通函数的this是在运行的时候才能确定的&#xff0c;因为要看是谁调用它的&#xff1b;所以箭头函数的this不会受到调用方式的影响&#xff0c;是静…

【U+】U+智享版运维平台账号密码重置

【问题描述】 友加畅捷系列中的U智享版软件&#xff0c; 系统运维平台账号admin密码忘记了&#xff0c;无法登录。 【解决方法】 在软件的安装目录下&#xff0c;找到sysconfig_accounts文件&#xff0c;并删除。 【路径&#xff1a;X:\U系列软件\U智享版\WebSite\config\】 …

【ZZULIOJ】1082: 敲7(多实例测试)(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 输出7和7的倍数&#xff0c;还有包含7的数字例如&#xff08;17&#xff0c;27&#xff0c;37...70&#xff0c;71&#xff0c;72&#xff0c;73...&#xff09; 输入 首先输入一个整数t&#xff…

制造业企业做图纸的怎么才能做好cad加密,什么cad加密软件最好?

众所周知&#xff0c;通常CAD图纸中包含着大量的设计数据和产品信息&#xff0c;所以无论对于CAD设计工程师&#xff0c;还是对于企业&#xff0c;如何保障CAD图纸信息数据安全都是十分重要的。 很多企业通过购买第三方安全软件来加密保护CAD设计图纸&#xff0c;但第三方安全软…

【算法基础实验】图论-UnionFind连通性检测之quick-union

Union-Find连通性检测之quick-union 理论基础 在图论和计算机科学中&#xff0c;Union-Find 或并查集是一种用于处理一组元素分成的多个不相交集合&#xff08;即连通分量&#xff09;的情况&#xff0c;并能快速回答这组元素中任意两个元素是否在同一集合中的问题。Union-Fi…

AI技术宝库:一键收藏全球最全面的人工智能资源网站

1、KKAI&#xff08;kk.zlrxjh.top&#xff09; R5AI是一种融合了星火大模型与文心大模型的知识增强型大语言模型&#xff0c;主要聚焦于自然语言处理&#xff08;NLP&#xff09;的技术开发。 该模型具有卓越的语义理解和文本生成能力&#xff0c;可以有效处理多种复杂的自然语…

python爬虫-----深入了解 requests 库下篇(第二十六天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

M-LAG的基本概念

如图所示&#xff0c;用户侧设备Switch&#xff08;可以是交换机或主机&#xff09;通过M-LAG机制与另外两台设备&#xff08;SwitchA和SwitchB&#xff09;进行跨设备链路聚合&#xff0c;共同组成一个双活系统。这样可以实现SwitchA和SwitchB共同进行流量转发的功能&#xff…