C/C++语言生态
标准
C语言标准
- K&R C
- 贝尔实验室Dennis Rithie和 基于Kenneth Lane Thompson的B语言。
- ANSI C89
- ISO C90
- Keil4: 局部变量必须在函数的开头部分声明
- ISO C99
- 提供全部类型的数学函数
- C++ 风格注释(
//
)
- C11
- 内存对齐Learn/Microsoft C++、C 和 汇编程序/C 语言/C 语言参考/ 对齐(语言标准本身的内容,区别于编译器的内存对齐)
参考资料:
C++语言标准
- C++ 98
- C++标准第一版
- 命名空间
- 面向对象
- 模板
- 异常处理
- 引用
- STL
- 容器
- 算法
- 迭代器
- C++ 11
- 线程和同步
- 智能指针
- auto关键字
- range-based for loop
- C++ 14
- 闭包
- C++ 17
- filesystem包
- C++ 20
- constraint与concept
- 协程
- C++ 23
- 无ASIO
- C++ 50
参考资料:
编译器
GCC
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等。) [1]
GCC的初衷是为GNU操作系统专门编写的一款编译器。GNU系统是彻底的自由软件。此处,“自由”的含义是它尊重用户的自由 [2] 。
- MinGW
MinGW,是Minimalist GNU for Windows的缩写。它是一个可自由使用和自由发布的Windows特定头文件和使用GNU工具集导入库的集合,允许你在GNU/Linux和Windows平台生成本地的Windows程序而不需要第三方C运行时(C Runtime)库。
- CubeIDE
- MounRiver
MSVC
Microsoft Visual C++(简称Visual C++、MSVC、VS或VC)是微软公司的免费C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C++/CLI等编程语言。VC++集成了便利的除错工具,特别是集成了微软Windows视窗操作系统应用程序接口(Windows API)、三维动画DirectX API,Microsoft .NET框架。
参考资料:
LLVM
- Clang
ARMCC
ARM 公司 开发的一款编译器,在2005年收购 KEIL 公司后,这块编译器就集成在KEIL IDE里面,以及自家开发的ARM DS5,编译器以及IDE相关的文档可以去ARM 公司的官网下载。
参考资料:
集成开发环境
Visual Studio / Visual Studio Code
C、C++、C#、F#、J#
参考资料:
Eclipse
Eclipse最初是由IBM公司开发的替代商业软件Visual Age for Java的下一代IDE开发环境,2001年11月贡献给开源社区,它由非营利软件供应商联盟Eclipse基金会(Eclipse Foundation)管理。
- 使用Java语言开发
- 开放源代码
- 跨平台的IDE
- Java语言早期的主流开发环境
- 支持扩展C语言
Clion
JetBrain的跨平台的C/C++开发环境
CLion的优点
- CLion能够及时查错,不需要编译结束以后才报错(这个和vscode有些类似);
- CLion的调试(debug)界面比dev要清晰不少,能显示更多的变量值,而且入手很简单,看起来也清楚(Clion具有代码补全功能(可以剩下一些打变量(函数)名称的时间,vscode也可以)
+和vscode比一比(先吐槽一下vscode的环境配置,实在有点复杂,还得自己下mingw编译器,更多的功能(比如调试)还需要自己重新再配置)
Clion的不足
- 不是免费软件
- Clion的控制台能显示返回值(虽然dev也可以,vscode似乎需要进一步设置)
- Clion不仅可以及时报错,还有更进一步的警告功能(下面会详细介绍),这个功能能进一步帮你避免掉很多奇怪的问题;
- Clion可以更方便进行调试(debug)
XCode
Apple公司的官方开发环境
构建工具
GNU Make
Make 有很多版本,其中 GNU Make 是一个自由软件。这里介绍一下它。
GNU Make 是一个控制计算机程序从代码源文件到可执行文件或其他非源文件生成过程的工具。
控制命令通过称为makefile 的文件传递给 make工具。makefile 记录了如何生成可执行文件等命令
Ninja
Ninja 是一个高效的构建工具,被广泛用于编译软件项目。它具有快速、轻量级和可扩展的特点,在大型项目中表现出色。
速度快:Ninja 使用简单的依赖图来确定需要重新构建的目标,因此可以避免不必要的重新构建,提高整体编译速度。
轻量级:Ninja 本身只是一个小型可执行文件,占用资源较少,不会拖慢编译过程。
可扩展:Ninja 支持自定义构建规则和脚本,可以根据项目的需求进行灵活的扩展和定制。
CMake
后文再讲
Autotools
GNU构建系统,是利用脚本和make程序在特定的平台上构建软件的过程。一般过程是configure,make,make install 三部曲。这种方式成为一种习惯,被广泛使用。
为了简化可移植构建的难度,早期有一套AutoTools的工具帮助程序员构建软件。configure,make,make install三部曲,大多都是基于Auto Tools来构建的。Auto Tools是GNU程序的标准构建系统。
参考资料:
其它构建工具
- Bazel
- SCons
包管理
CMake(跨平台的安装(编译)工具)
CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。只是 CMake 的组态档取名为 CMakeLists.txt。Cmake 并不直接建构出最终的软件,而是产生标准的建构档(如 Unix 的 Makefile 或 Windows Visual C++ 的 projects/workspaces),然后再依一般的建构方式使用。这使得熟悉某个集成开发环境(IDE)的开发者可以用标准的方式建构他的软件,这种可以使用各平台的原生建构系统的能力是 CMake 和 SCons 等其他类似系统的区别之处。
参考资料:
Vcpkg
VCPKG是微软 C++ 团队开发的适用于 C 和 C++ 库的跨平台开源软件包管理器,它大大简化了 Windows、Linux 和 macOS 上第三方库相关的下载和配置操作,目前已有超过1600个第三方库可以通过vcpkg来安装。
VCPKG简介
Conan
Conan 是一个开源的、跨平台的、去中心化的 C++ 包管理器。通过它可以安装、解决构建依赖,更重要的是可以直接集成到 Build System 中使用。同时它也允许你搭建自己的私有仓库,供私有项目使用。具体到细节,当向 Conan 请求安装依赖时,Conan 会拿着编译相关的配置信息去服务器请求是否有对应平台的预构建二进制包,如果有,则直接下载并解压到本地的缓存仓库中,否则,会执行对应的构建脚本,构建出符合当前平台的二进制包。