如何解决C ++ 20 #import“”声明:是否可以使用多个预处理的头文件
在C ++ 20中,可以用
代替包含标头
#include "header.h"
使用
#import "header.h" // Edit: this is not standard see comments
(这是针对无法完全转换为模块并且无法使用不带#的常规import关键字的旧代码)
我的问题是关于预处理。长期以来,每个翻译单元只能预编译和使用一个标头。 (C语似乎在级联包含文件中有一些特殊情况,我在这里不考虑)
既然头文件可以在某种程度上隔离了,是否可以通过#import
关键字对每个翻译单元进行预编译和使用多个头文件?
编辑:
所以我对此的误解似乎来自以下事实:在启用g ++等模块时,使用#include "..."
会自动变成import ""
。(我认为)。
我发现了这段视频Nathan Sidwell “Converting to C++20 Modules”,其中Nathan解释了如何预编译“标头单元”,我想这是g ++中的modules分支,但在clang ++-10中似乎不起作用。我不知道这是否也可以在其他编译器上使用。
解决方法
是的,可以将import
任意数量的标头单位转换为翻译单位。由于模块规则可防止模块之间进行任何交互(特别是它们不能共享宏),因此可以独立地对其进行“预编译”。就是说,某些实现可能会将所生成的已编译模块接口文件中的某些组件复制到正在编译的翻译单元中,以更好地模拟文本包含的行为(尤其是与标头中的可疑声明结合使用,例如内部链接)。
单独地,#include
应用于实现知道(可能来自某些选项或配置文件)可用作头单元的头文件,可能会被重新解释为{{1} },即使未修改的文件(尤其是您无法控制的另一个库中的头文件)也可以提供这种行为。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。