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.mfbz.cn/a/583364.html

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

相关文章

js逆向进阶篇-某团酒店

提示!本文章仅供学习交流,严禁用于任何商业和非法用途,未经许可禁止转载,禁止任何修改后二次传播,擅自使用本文讲解的技术而导致的任何意外,作者均不负责,如有侵权,可联系本文作者删除! 案例分析: 先来看看请求中有哪些参数是需要我们逆向,如下: mtgsig、fp、roh…

Java包装类,128陷阱

包装类 基本数据类型都有自己对应的包装类&#xff0c;因为Java本质是面向对象编程的&#xff0c;一切的内容在Java看来都是对象 但是基本数据类型没有类&#xff0c;也没有对象&#xff0c;这样就有了矛盾 所以诞生了基本类型的包装类 基本数据类型&#xff1a; byte,short,…

知乎热议:未来几年,AI技术在科研领域将有哪些新的发展趋势或突破?

我是娜姐 迪娜学姐 &#xff0c;一个SCI医学期刊编辑&#xff0c;探索用AI工具提效论文写作和发表。 一年多以来&#xff0c;各种国内外的AI模型和应用应接不暇&#xff0c;从刚开始ChatGPT一家独大&#xff0c;到现在的百花齐放&#xff0c;各种AI模型各有千秋&#xff0c;一时…

星尘智能 AI 机器人 S1——国产机器人的巅峰之作

AI智能机器人真的太炸裂了 国产科技威武-CSDN直播AI智能机器人真的太炸裂了 国产科技威武https://live.csdn.net/v/382519 最近发现了一个国产的机器人&#xff0c;真的让人惊叹不已&#xff01;它就是星尘智能 AI 机器人 S1&#xff01; 这个机器人简直太牛逼了&#xff01;…

Stable Diffusion 参数介绍及用法

大模型 CheckPoint 介绍 作用&#xff1a;定调了作图风格&#xff0c;可以理解为指挥者 安装路径&#xff1a;models/Stable-diffusion 推荐&#xff1a; AnythingV5Ink_v32Ink.safetensors cuteyukimixAdorable_midchapter2.safetensors manmaruMix_v10.safetensors counterf…

2024年的Java版本选择?java 17 安装

文章目录 2024年的Java版本选择&#xff1f;java 1.8 和 java17 什么区别&#xff1f;java 17 安装windows 11安装java 17C:\Program Files\Common Files\Oracle\Java\javapath是什么 2024年的Java版本选择&#xff1f; 3年前&#xff0c;java 1.8是市场主流&#xff08;还有一…

STM32用HAL库函数实现硬件IIC

/*出处&#xff1a;【STM32入门教程-2024】第12集 IIC通信与温湿度传感器AHT20(DHT20)_哔哩哔哩_bilibili */ AHT20驱动 这篇笔记我主要介绍代码实现&#xff0c;想要了解原理的请自己看视频&#xff0c;我不过多赘述了。 AHT20通信数据帧格式&#xff1a; ①对照手册上的通…

面对网络安全,做好风险评估对企业会带来哪些帮助

随着信息技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;成为企业不容忽视的重要议题。企业作为社会经济活动的主要参与者&#xff0c;其网络安全不仅关系到自身的生存与发展&#xff0c;更与国家的经济安全、社会稳定息息相关。因此&#xff0c;企业必须高度重视…

K8s: Prometheus 服务结构以及基础抓取数据服务部署

Prometheus 发布应用之后&#xff0c;就有持续运维的事情&#xff0c;就是平台监控Prometheus 是一个云原生的日志监控平台&#xff0c;是一个实时标准的一个技术它是著名的 cncf 里的一个重要的开源项目 上面整个图片是在云原生应用及K8s应用架构下的一个日志监控的一个标准的…

ezplot--Matlab学习

目录 一、代码 二、效果 ​编辑 三、ezplot讲解 四、如何自定义一个函数 一、代码 clc; clear; t0:32; x4(t) cos(2*pi*t/4).*sin(2*pi*t/4); x8(t) cos(2*pi*t/8).*sin(2*pi*t/8); x16(t) cos(2*pi*t/16).*sin(2*pi*t/16); subplot(3,1,1) ezplot(x4,[0,32]); subplot…

《软件设计师教程:数据库系统基础知识大总结》

​ 个人主页&#xff1a;李仙桎 &#x1f525; 个人专栏: 《软件设计师》 ⛺️生活的理想&#xff0c;就是为了理想的生活! ​ ⛺️前言&#xff1a;各位铁汁们好啊&#xff01;&#xff01;&#xff01;今天继续正式学习中级软件设计师考试相关的内容&#xff0c;后续不断更新…

python学习笔记B-11:序列结构之列表--二维列表的遍历和生成式

二维列表的遍历方式&#xff0c;使用双层for循环&#xff0c;遍历索引号。 二维列表的生成式&#xff0c;也是使用类似双层循环的形式生成。 print("##初始化二维列表&#xff0c;每个元素就是1个列表") lst [["东方延续","太空军自然选择号舰长&qu…

【AI心理咨询应用】继Woebot之后,国内诞生的“LLM+CBT”应用:白小喵

导言 AI认知行为疗法&#xff08;Cognitive Behavioral Therapy&#xff0c;CBT&#xff09;早在2017年便有了首例&#xff0c;即美国知名CBT治疗机器人Woebot。 然而&#xff0c;Woebot在CBT的完整落地上仍有缺陷问题&#xff0c;LLM的出现促进了对该问题的解决&#xff0c;…

typeScript 安装

1、安装typescript 安装npm i -g typescript 查看是否安装成功 tsc -v 2、使用ts // 浏览器不支持ts 需要编译成 es5 let str: string ts 在终端输入 tsc index.ts 会将其生成一个对应的index.js文件 在电脑上首次使用TS的时候&#xff0c;执行TS 的命令的时候报错 打开PowerS…

RustGUI学习(iced)之小部件(三):如何使用下拉列表pick_list?

前言 本专栏是学习Rust的GUI库iced的合集&#xff0c;将介绍iced涉及的各个小部件分别介绍&#xff0c;最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个&#xff0c;目前处于发展中&#xff08;即版本可能会改变&#xff09;&#xff0c;本专栏基于版本0.12.1. 概述…

2024年,新手做抖音小店想要赚钱,必须明白三件事!

大家好&#xff0c;我是电商糖果 有不少小店的商家都说过&#xff0c;现在的抖音小店比三四年前复杂了。 三四年前抖音小店刚刚出现&#xff0c;平台规则还没有那么多&#xff0c;很多机制也不太成熟。 那个时期的抖店说是捡钱的&#xff0c;一点儿都不假。 但是如果说你现…

Linux详解:进程等待

文章目录 进程等待等待的必要性进程等待的方法waitwaitpid获取子进程status阻塞等待 与 非阻塞等待 进程等待 等待的必要性 子进程退出&#xff0c;父进程不进行回收的话&#xff0c;就可能造成僵尸进程&#xff0c;进而造成内存泄露 如果进程进入了僵尸状态&#xff0c;kill…

机器学习:驱动现代交通运输革命的AI智慧引擎

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

玄子Share-引导过程与服务控制

玄子Share-引导过程与服务控制 Linux操作系统引导过程 系统初始化进程 init 进程 由 Linux 内核加载运行 /sbin/init 程序init 进程是系统中第一个进程init 进程的 PID&#xff08;进程标记&#xff09;号永远为 1 Systemd Systemd是Linux操作系统的一种init软件CentOS7中采用…

【Linux开发 第十二篇】搭建JavaEE环境

搭建开发环境 搭建javaEE环境 搭建javaEE环境 在Linux下开发JavaEE需要安装软件包&#xff1a; 安装jdk 安装步骤&#xff1a; 在opt目录下创建jdk目录通过xftp上床到jdk目录中进入到jdk目录中&#xff0c;解压jdk压缩包在/usr/local下创建java目录将解压完成的jdk文件移动…