You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

68 lines
4.2 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 课前必读 | 有关术语发音及环境要求
你好,我是吴咏炜。
这一讲是课前必读,主要说明术语发音和环境要求的问题,希望能帮助你更好地学习和实践本专栏的内容。
## 术语发音列表
C++ 里有些术语不是标准的英文单词。在本专栏中使用下面的发音表:
![](https://static001.geekbang.org/resource/image/bc/72/bc0ee5d92ae1d741c14b8fef6fb04d72.jpg)
注意这些发音并没有标准化,列出来只是为了避免发生误解。你不一定必须按照我的读法来。
## 环境要求
在专栏中,我大部分时间都会使用不超过 C++17 标准的语言特性。而要编译示例代码,需要以下所列的至少一种编译器:
* GCC 7 或更新版本
* Clang 5 或更新版本
* Visual Studio 2017 15.9 (MSVC 19.16) 或更新版本
以上三种编译器应当都能够工作——但我无法保证。如果遇到问题的话,请升级到跟我的测试环境相同的版本:
* GCC 8.3
* Clang 9.0
* Visual Studio 2019 16.3 (MSVC 19.23)
如果你对跨平台性不那么讲究的话,推荐使用你的操作系统里最常用的编译器。也就是:
* 用 Windows 的话,使用 MSVC
* 用 Linux 的话,使用 GCC
* 用 macOS 的话,使用 Clang但如果操作系统比 Mojave 老的话,苹果提供的开发工具不能完整支持 C++17你需要升级操作系统或者使用非苹果的编译器——如 Homebrew 提供的 gcc 和 llvm \[1\]
对在 Windows 上使用 GCC 的开发者,我要特别提醒一句:要获得最全面的功能,你应当使用 MinGW-w64 的 POSIX 线程版本,这样才能完整使用 C++ 标准里的功能。当前版本可从参考资料 \[2\] 的链接下载。
使用稳定发布版(如 CentOS的 Linux 用户也需要检查一下,你的 GCC 版本有可能比较老。如果早于 GCC 7 的话,建议你安装一个新版本的 GCC不需要覆盖系统的 GCC。比如对于 CentOS 7系统安装的 GCC 版本是 4.8,太老,你可以通过安装 centos-release-scl 和 devtoolset-7-gcc-c++ 两个包来获得 GCC 7随后可以使用命令 `scl enable devtoolset-7 bash``. /opt/rh/devtoolset-7/enable` 来启用 GCC 7。
稍需注意的是,最后在讲到 C++20 新特性时,某些实验功能可能会要求某个特定的编译器。这种情况下,你可能就需要安装、使用非默认的编译器了。不过,只有少数几讲需要这么做,不用担心。
由于专栏涉及到的都是较短的代码,我不会提供工程文件。建议你熟悉编译器的命令行,来快速编译代码。使用 GCC 的话,推荐使用下面的命令行:
`g++ -std=c++17 -W -Wall -Wfatal-errors 文件名`
Clang 的话也比较类似:
`clang++ -std=c++17 -W -Wall -Wfatal-errors 文件名`
MSVC 的命令行风格有点不同,一般需要下面这样子:
`cl /std:c++17 /EHsc /W3 文件名`
另外,即使不用较新的 C++ 特性,你也一定要用比较新的编译器。单单是输出错误信息的友好程度,老版本和新版本就是没法比的。
以 GCC 为例,老版本输出错误信息是单色的,在碰到有模板的代码时,错误信息动辄几百行,以致那时有人专门开发了软件来让错误信息更可读 \[3\]。幸运的是我们今天不再需要这类软件了编译器的输出比之前友好得多GCC 和 Clang 还会使用颜色来展示问题的重点。下面这张图,就是 GCC 9.2 的输出。
![](https://static001.geekbang.org/resource/image/13/23/13fbdc8077a5a330e45c5ccdc94c2923.png)
明确好以上内容,我们就要正式开始了,你准备好了吗?
## 参考资料
\[1\] Homebrew. [https://brew.sh/](https://brew.sh/)
\[2\] MinGW-w64 GCC-8.1.0. [https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/8.1.0/threads-posix/dwarf/](https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/8.1.0/threads-posix/dwarf/)
\[3\] Leor Zolman, “STLFilt: An STL error message decryptor for C++”. [https://www.bdsoft.com/tools/stlfilt.html](https://www.bdsoft.com/tools/stlfilt.html)