课前必读 | 有关术语发音及环境要求

你好,我是吴咏炜。

这一讲是课前必读,主要说明术语发音和环境要求的问题,希望能帮助你更好地学习和实践本专栏的内容。

术语发音列表

C++ 里有些术语不是标准的英文单词。在本专栏中使用下面的发音表:

注意这些发音并没有标准化,列出来只是为了避免发生误解。你不一定必须按照我的读法来。

环境要求

在专栏中,我大部分时间都会使用不超过 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 的输出。

明确好以上内容,我们就要正式开始了,你准备好了吗?

参考资料

[1] Homebrew. 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/

[3] Leor Zolman, “STLFilt: An STL error message decryptor for C++”. https://www.bdsoft.com/tools/stlfilt.html

精选留言

  • Xiang

    2019-11-25 22:14:48

    vscode 呢
    作者回复

    大家要分清 IDE 和编译器。我不关心你用什么 IDE(或编辑器)的。

    根据 VS Code 的网页:

    The C/C++ extension does not include a C++ compiler or debugger. You will need to install these tools or use those already installed on your computer.

    Popular C++ compilers are:

    GCC on Linux
    Mingw-w64 on Windows
    Microsoft C++ compiler on Windows
    Clang for XCode on macOS

    2019-11-25 22:48:13

  • Sochooligan

    2019-12-12 06:38:41

    我给学习者提个建议:先不要折腾环境,别走偏了。如果你使用Linux、Mac或者Windows,系统上已经有了IDE、编译器或者编辑器,不论是eclipse cdt, xcode, visual studio, 还是vs code, emacs/vim等等;不论是gcc, clang, apple, 还是cl编译器等等; 请先使用,除非不适用的时候再去调整开发环境。注意聚焦C++学习,而不是其他!
    作者回复

    嗯,少折腾,尤其如果你的系统够“新”。

    2019-12-12 07:12:06

  • 吴咏炜

    2020-02-23 14:40:14

    根据后面有些同学的希望,我现在已经整理大部分完整可编译的代码,放到了 GitHub 上。地址是:

    https://github.com/adah1972/geek_time_cpp

    会用 CMake 的可以自行编译。不用 CMake 的,也可以看一下里面的完整代码(仍建议学习一下 CMake,不过,这就不是我们专栏的内容了)。
  • 飞飞

    2019-11-26 12:39:06

    哎!这么多人,连编辑器和编译器都分不清楚!童鞋们,好好学吧!
    作者回复

    说明有初学者。大家要互相鼓励、互相帮助。

    不过,确实,编译器和编辑器没分清楚的同学,下面需要努力学习的东西很多啊。

    2019-11-26 18:17:45

  • C家族铁粉

    2019-12-20 10:20:30

    多谢老师推荐,无意间发现GitHub上有中文翻译:https://github.com/xiaoweiChen/CPP-Concurrency-In-Action-2ed-2019
    作者回复

    对于这种“分享”,我是绝对不赞成的……但正版的中文又实在太烂……唔……

    2019-12-20 13:06:12

  • Jover

    2019-11-25 22:33:46

    老师讲解得很详细。希望老师能分享一些适合阅读的开源项目,本人非常希望在有生之年能看懂v8...
    作者回复

    易读不是大部分项目的追求……不过,话说回来,LLVM的libc++可读性是相当好的,至少比GCC和MSVC的标准库实现容易理解多了。

    有导读可能会更好。所以,考虑一下侯捷的《STL源码剖析》,即使那个STL确实已经过时了。

    2019-11-26 00:13:26

  • 金子菇凉的铁粉小逗

    2019-11-26 08:14:47

    Linux如何使用最新版本https://mp.weixin.qq.com/s/3tvoiz7bcoQ3KZMGIZrJkQ
  • C家族铁粉

    2019-12-19 16:50:22

    老师有没有什么好的C/C++并发方面的书推荐一下,C++ Primer上没有这方面内容。
    作者回复

    只有英文的。C++ Concurrency in Action 英文已经出到第二版,口碑不错。但中译本《C++并发编程实战》的翻译则是恶评如潮。

    2019-12-19 20:35:42

  • 吴军旗^_^

    2019-11-25 21:31:27

    wjq@B000000134615B ~ %>clang --version [0]
    Apple LLVM version 10.0.1 (clang-1001.0.46.3)
    Target: x86_64-apple-darwin18.5.0
    Thread model: posix
    InstalledDir: /Library/Developer/CommandLineTools/usr/bin


    请问老师version 10 可以吗?
    作者回复

    Mojave 上的 Clang 应该可以,但我没有测试过。如果发现有问题的话,再用 brew 装 llvm 吧。

    2019-11-25 22:33:28

  • 马晓龙

    2019-12-09 16:31:04

    -W -Wall -Wfatal-errors
    请问老师,这些选项表示什么意思
    作者回复

    查文档。

    简单来说,让编译器产生充足的告警;出错时就停止编译,不要产生更多出错信息了。

    2019-12-09 20:43:34

  • panqing

    2019-12-06 22:01:17

    老师打算开 cmake 的课程吗?我第一个报名。
    作者回复

    这个……我觉得可能没那么多强烈需求吧。而且,如果你 C++ 都学会了,学 cmake 是小菜一碟啊。cmake 实际上还是比较简单的东西。

    2019-12-07 10:52:26

  • Geek_QiDian

    2019-11-29 14:10:37

    安装了Ubuntu19.10,自带 gcc 9.2, 跟着老师出发喽!
    作者回复

    😁

    2019-11-29 19:40:26

  • 🐶的巴普洛夫

    2023-02-21 19:30:43

    好的,记事本启动😁
  • 西加加

    2020-05-12 10:16:14

    老师,在本课程中,使用c++版本的特性占比分别是多少呢?由于只学到 c++11,所以想先了解一下。
    作者回复

    学到C++11足够了,我并不假设你学过C++11的。我要求的是C++的基础知识和一定的使用经验。

    从比例上讲,拍脑袋说,C++11 以后约占80%,C++14以后约占50%,C++17以后约占25%,C++20约占10%。

    2020-05-12 12:18:54

  • 王硕

    2019-11-28 04:49:22

    老师您好,我现在在尝试写自己的一个项目,我看到现在的构建工具有cmake,gn,bazel,buck。不知道应该选哪一个,请问一下在这个时间点,哪一个是您推荐的呢?谢谢
    作者回复

    cmake比较流行,通用性也很好。其他感觉小众,没特殊需求不必去学,尤其是有第三方依赖的后两者。

    2019-11-28 08:14:02

  • 2019-11-25 20:56:54

    你们都要Visual Studio 2019 吗?有人用clion吗
    作者回复

    CLion 不是编译器。它支持“Cygwin, MinGW, WSL, or MSVC”。

    2019-11-25 22:35:14

  • 怀朔

    2019-11-25 19:43:23

    环境要是能具体一下 可能更好
    作者回复

    可以具体描述一下你的需求吗?我想我在环境要求里已经写了最低编译器要求了。如果你在 Windows 上,安装一个最新版的 Visual Studio 就行,免费的 Community 版就够。

    2019-11-25 21:07:01

  • %;

    2019-11-25 17:23:41

    准备好啦~
    作者回复

    欢迎。😀

    2019-11-25 20:51:48

  • 糍粑不是饭

    2023-03-18 09:38:55

    老师是否考虑再增加些CMake或者包管理的额外课程😜
    作者回复

    抱歉,这方面我还没到可以授业于人的水准。😋

    可以向极客时间问问他们什么时候能提供 CMake 课程。

    2023-03-20 08:16:39

  • 码匠许师傅

    2021-03-14 15:36:12

    术语表应该再加一列,中文词汇,后面篇幅中都应该遵守
    作者回复

    是术语发音表,不是术语表。里面基本都是 C++ 的关键字和符号,不需要翻译。

    2021-03-14 23:27:07