Cracking C++(8): 开发环境的选择

news2024/11/16 0:37:08

Cracking C++(8): 开发环境的选择

文章目录

  • Cracking C++(8): 开发环境的选择
    • 1. 目的
    • 2. 工具
      • 代码编辑器 和 IDE
      • Windows
      • 命令行界面
      • 编译器
        • gcc/g++
        • clang/clang++
        • Microsoft Visual Studio
        • 基于浏览器的编译器
    • 3. 其他工具补充
      • 调试器
      • 代码分析工具
      • 其他

1. 目的

在看了 hackingcpp 的 C++ Development Setup 后, 做一些笔记和扩展。

C++ 开发环境可以有很多种选择, 每种选择都可以认为是一种或多种技术选型的组合。

2. 工具

作者的建议是, 开始阶段选择一个文本编辑器 + 一个命令行的编译器, 而当你弄清楚了 C++ 的构建过程, 并知道怎么在命令行里敲敲打打后,就应该切换到 IDE, 原因是: 你得搞点大工程了, IDE 适合大工程。

代码编辑器 和 IDE

今天(2023-06-11 22:11:08)对于初学者来说 VSCode 或许是最好的选择(也许没有之一), 因为它有很棒的 UI, 提供了 IDE 的基本的特性比如补全、跳转到定义, 甚至有提供了高度可定制的 VIM 插件。

在这里插入图片描述

除了 VSCode, 还有一些选择, 如 VIM, Qt Creator, Dev-C++, Visual Studio, CLion.

这里其实还隐含了操作系统的选择: 有些 IDE / 编辑器支持了多个操作系统, 有些则是只提供了特定系统的版本。

本人的选择是: 高频使用 VSCode, 辅助编辑器则可以是 {VIM, SublimeText, Kate, Visual Studio, CLion}.

Windows

作者认为,如果C++学习者的操作系统是 Windows 10, 高度推荐使用 WSL, 基本上认为是一个完整功能的 Linux 命令行环境了。

作者还说, 绝大多数C++的学习资料都是在 Linux 环境下的。如果以软件开发作为职业, 毫无疑问应当熟悉 Linux。

此外, Windows10 还提供了 Windows Terminal, 值得尝试: https://devblogs.microsoft.com/commandline/getting-started-with-windows-terminal

本人的技术观点是:

  • 用 WSL 本质上是用 Linux, 只不过不用想着折腾安装装系统、甚至把硬盘搞坏了
  • 用 WSL 意味着屏蔽了 Linux 桌面, 显卡驱动问题也就变相屏蔽掉了,少了不少不必要的干扰, 但也意味着不知道 Kate, Spectacle, KolourPaint, Dolphin 这些 GUI 软件也是挺好用的
  • 微软的 MSDN 网站其实也提供了一些 C++ 的内容, 不过有时候掺和着 Windows 特有的 API,怎么说呢, 要写跨平台的 C++ 其实或多或少还是会用到的
  • Windows11 可以认为和 Windows10一样的; MacOSX 也是可以选择的环境
  • Windows 下还有另一种选择: 用 MSYS2。
  • 不管你现在选了哪个环境, 时间久了, 最好是每种环境都用过, 都能随时用于开发

命令行界面

In case you have never worked with a command line interface you should really start to learn some basics. It doesn’t take much to create folders, move/copy/delete files and compile and run your first, simple C++ programs.

作者这里是要求 C++ 学习者先把 Linux 的基本的命令行过一遍, 包括 bash 的语法也要过一遍。

作为过来人, 个人认为有三方面可以关注下:

  • 基本的 shell 命令, 要熟悉; bash 脚本大概看懂就差不多了
  • git 命令值得学, 还有一个是 cmake 要掌握,现代的 C++ 项目大都基于 CMake 构建
  • python 可以适当学习,bash 甚至 perl 脚本写起来不太容易, 可以用 Python 来可快速实现小工具

编译器

在这里插入图片描述

gcc/g++

The “default” in the GNU/Linux world and very mature.

gcc/g++ 是 GNU/Linux 系统下的默认编译器, 也非常成熟。

在 Windows 上,如果你不打算用 WSL,作者推荐用 winlibs 网站提供的 编译器套件。

clang/clang++

作者毫无情感的列出了 ubuntu 下的下载方式。

本人其实推荐用户用 clang, 原因是大趋势是用 clang, 例如 Android NDK 早就从 GCC 切换到 Clang 了。

Microsoft Visual Studio

如果打算用 VS, 请使用免费的社区版本。

基于浏览器的编译器

  • Compiler Explorer
    也被称为 godbolt, 支持了非常多的编译器,每个编译器提供了多个版本。
    能显示汇编代码, 还可以引入第三方依赖库(只要 conan 和 vcpkg 有,就可以引入)。
    支持 vim 模式, 支持暗色主题。

  • Wandbox
    没怎么用过, 不过还是有一定名气的。

3. 其他工具补充

调试器

hackingcpp 原作者并没有在 tools 一节列出调试器,但实际上调试器又非常基本非常重要。这里简单列一下个人用过的工具:

  • GDB: GCC 配套的调试器。 也可以调试 Clang 编译器编译出的程序
  • LLDB: Clang/LLVM 套件中的调试器。个人其实更推荐用 GDB + LLDB 的组合。

可以考虑尝试, 不过更加高阶的:

  • rr: record & replay 的缩写, 用于反向调试, 尤其对于偶现 bug 的调试, 应该会更好。不过实际经验中如果不是频繁调试偶现bug,似乎用不上
  • WindDbg: Windows 上的专用调试器, 比 VS 自带的调试功能强大, 也含有 rr 的那种记录+回放方式的调试功能。

gdb 本身是命令行工具, 也有一些前端工具, 也就是图形界面更友好一些。本人推荐的是 VSCode 里的 CodeLLDB 插件。

代码分析工具

Address Sanitizer 一定少不了。查内存越界和内存泄漏的利器。

它的几个兄弟: Thread Sanitizer, UBSan, LeakSan, 虽然看起来也名气不错, 不过只能在 Linux/Mac 下使用。

其他

本来想着提一下调试器系列工具, 结果发现还有很多 topic 没覆盖到:

  • 单元测试框架
  • 性能评测工具
  • 构建工具
  • 代码格式化工具
  • 源代码版本控制工具
  • 包管理工具

推荐经常去 https://hackingcpp.com/cpp/tools/ecosystem.html 看看

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

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

相关文章

《百年孤独》15句经典语录

句句都是人生真相,说透了所有人的孤独。 1、生命中曾经有过的所有灿烂,原来终究,都需要用寂寞来偿还。 2、过去都是假的,回忆是一条没有尽头的路。 这句话是最受读者欢迎的一句话,回忆就是一条没有尽头的路&#xf…

shell脚本基础5——常用命令写作技巧

文章目录 一、grep命令二、sed命令2.1 选项参数2.2 常用命令 三、AWK命令3.1 常用参数3.2 常用示例 四、find与xargs五、date命令六、对话框6.1 消息框6.2 yes/no对话框6.3 表单输入框6.4 密码输入框6.5 菜单栏6.6 单选对话框6.7 多选对话框6.8 进度条 七、常用写作技巧7.1 EOF…

我,ChatGPT,打钱

「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 一、ChatGPT是个啥? chat:表示“聊天”。 GPT:则是G…

提升Python函数调用灵活性:参数传递类型详解

前言 在Python编程中,函数参数起着非常重要的作用。函数参数允许我们向函数传递数据,并在函数内部使用这些值。Python提供了多种参数传递类型,包括位置参数、关键字参数、默认参数、可变数量的位置参数、可变数量的关键字参数。这些不同的参数…

数据结构——串(字符串)

文章目录 **一 串的定义和实现****1 定义****2 串的存储结构****2.1 定长顺序存储表示****2.2 堆分配存储表示****2.3 块链存储表示** **3 串的基本操作** **二 串的模式匹配****1 简单的模式匹配算法****2 串的模式匹配算法——KMP算法****2.1 字符串的前缀,后缀和…

一起学SF框架系列5.4-模块Beans-DefaultListableBeanFactory

在生成ApplicationContext过程中,AbstractRefreshableApplicationContext.refreshBeanFactory()完成旧BeanFactory关闭,创建新的BeanFactory,即new DefaultListableBeanFactory(…)。然后bean实例化时调用本类的preInstantiateSingletons方法…

网安笔记12 IPsec

IPSec 基于通信IP环境下一种端到端,保证数据安全的机制 包含 两个安全协议,一个密钥管理协议, 标准价秘密技术为基础 DES/其他分组加密算法键值hash算法认证公钥有效的数字证书 AH协议提供信息源验证、完整性保证ESP提供信息源验证、机密…

华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】

一、题目描述 计算一个浮点数的立方根,不使用库函数。保留一位小数。 数据范围:∣val∣≤20 。 二、输入描述 待求解参数,为double类型(一个实数) 三、输出描述 输出参数的立方根。保留一位小数。 四、解题思路…

Git工作流(随笔)

目录 前言 一、工作流概述 1、概念 2、分类 二、集中式工作流 1、概述 2、介绍 3、操作过程 三、功能分支工作流 1、概述 2、介绍 3、操作过程 1)创建远程分支 2)删除远程分支 四、GitFlow工作流 1、概述 2、介绍 3、操作过程 五、Forki…

Linux系统:CentOS编译Linux内核

目录 一、实验 1.下载内核 2.解压内核源码 3.配置依赖的环境 4.进入源码目录,使用make menuconfig开启菜单选项,手动选择内核功能 5.编译内核 6.安装模块 7.安装内核 8.验证新内核版本 一、实验 1.下载内核 (1)官网下载…

010:vue中el-table 隐藏表头的两种方法

第010个 查看专栏目录: VUE — element UI echarts,openlayers,cesium,leaflet,mapbox,d3,canvas 免费交流社区 专栏目标 在vue和element UI联合技术栈的操控下,本专栏提供行之有效的源代码示例…

【Kubernetes存储篇】StorageClass存储类动态生成PV详解

文章目录 一、StorageClass存储类理论二、案例:Storageclass存储类实战演示1、搭建NFS服务端2、搭建NFS供应商(provisioner)3、创建StorageClass存储类4、创建PVC,通过StorageClass动态生成PV5、创建Pod挂载PVC 三、步骤总结 一、StorageClass存储类理论…

web测试工程师的工作职责

web测试工程师的工作职责1 职责: 1、 负责数据平台产品的测试工作,参与产品需求分析,负责方案制定,并能预先评估项目风险,确保测试活动的顺利开展; 2、 深入理解系统内部的设计原理,并能从测试的角度提供优化意见; 3、 根据产品需…

LVS+Keepalived 高可用群集实战部署

目录 前言 一、Keepalived工具介绍 1、Keepalived的作用 2、 Keepalived体系主要模块 二、keepalived工作原理 1、VRRP (虚拟路由冗余协议) 2、VRRP (虚拟路由冗余协议) (1)keepalived.conf是主配置文…

qt 使用qtpdfium实现读取pdf文件

此处仅作为笔记和配置指导。 要想获取源码可Git hub上下载,这里推荐一个:QtPdfium_Build_Source: 基于Google pdfium 库,可编译和编译好的Qtpdfium 库,用于加载pdf文件进行预览 (gitee.com) 目前小编根据推荐的编译方法&#xf…

STM32F0实现数字化SPWM纯正弦波逆变器

一、理论基础 所谓SPWM,就是通过只有开关两个状态(离散,数字的)的PWM序列产生正弦波(连续,模拟的)的方法。其理论基础一句话就能说明白:冲量相等而形状不同的窄脉冲加在具有惯性的环…

golang语法的注意事项

目录 1.源文件以.go结尾2.过文件只能存在一个mian 函数 (入口函数)3. go严格区分大小写4. golang的每行代码是一个语句 默认存在 ; 不需要自己写了5. golang 是每一行每一行的执行的 不要把多个语句写在一行6. 定义变量 或是导入的包未使用 无法同过编译7. {} 都是成对出现 为了…

Xtrak 塔克小车巡线代码以及红绿灯识别相关小改动

做的小改动: 只更改了xtark_follow_line.py 增加了一次HSV分割来做红绿灯识别(建议到时候用手机或者平板显示红色或者绿色图片),红绿图片: 将检测道路位置的方式从重心变为最接近屏幕中心的道路像素点。 检测不到道路之…

ubuntu 22.04部署dzzoffice及安装onlyoffice插件

目录 一、配置阿里源 二、安装数据库 三、安装依赖组件 (一)安装php7.4 (二)安装apache2 四、下载 dzzoffice 五、安装dzzoffice 六、安装onlyoffice插件 (一)从github下载小胡版onlyoffice替代原来…

如何学习及计算机编程,入门看这一篇就够了---以c语言为例

信息时代,计算机变成不再是专业性很强的一门学科,更多的是变成了一种工具 用计算机爬取信息(爬虫)进行数据分析,数据可视化(大数据的某个方面)处理海量的数据,如excel(百…