导读:C++20标准早已封版,各大编译器也都已支持了C++20中的多数特性,但迄今为止(.7),尚未有哪一款编译器完整支持C++20中的所有特性。本文仅介绍C++20四大特性当中的Module部分。
文|马建亭
网易云信资深C++开发工程师
C++20最大的特性是什么?
最大的特性是迄今为止没有哪一款编译器完全实现了所有特性。
有人认为C++20是C++11以来最大的一次改动,甚至比C++11还要大。本文仅介绍C++20四大特性当中的Module部分,分为三部分:
探究C++编译链接模型的由来以及利弊
介绍C++20Module机制的使用姿势
总结Module背后的机制、利弊、以及各大编译器的支持情况
一、扒一扒头文件的由来
C++是兼容C的,不但兼容了C的语法,也兼容了C的编译链接模型。年初,C语言基本定型:有了预处理、支持结构体;编译模型也基本定型为:预处理、编译、汇编、链接四个步骤并沿用至今;年,KR二人使用C语言重写了Unix内核。
为何要有预处理?为何要有头文件?在C诞生的年代,用来跑C编译器的计算机PDP-11的硬件配置是这样的:内存:64KiB硬盘:KiB。编译器无法把较大的源码文件放入狭小的内存,故当时C编译器的设计目标是能够支持模块化编译,即将源码分成多个源码文件、挨个编译,以生成多个目标文件,最后整合(链接)成一个可执行文件。
C编译器分别编译多个源码文件的过程,实际上是一个Onepass