为解决一个代码挑战,我想要尽可能缩小代码量。我有一个把 "import" 定义为速记符号的想法:
#define I import
I<vector>;
当然,这里的意图是重复利用I
来实际节省字节。
C++20中是否合法?
思考/目前我所了解到的:
- 根据cppreference的说法,“模块和导入指令也是预处理指令”。因此,我认为问题归结为我们是否保证预处理器首先将I替换为我们定义的内容?
- 我认为,处理
import
指令应该在第4个翻译阶段进行,在整个阶段中,除非另有规定,否则I
不应进行宏扩展([cpp.pre]-7)。对于这种情况,是否有规定要另作说明? - 这种方法是否可能作为预处理器重新扫描的一部分工作?
- Godbolt上的Clang和GCC无法编译,但据我所知,它们尚未支持导入标准库头文件而不需要额外步骤,并且使用简写版本时给出相同的错误信息,这表明它可能有效(?)。
- 相同的方法,但使用
include
而不是import
,无法在gcc和clang中工作,因此可能不合法。
#define import X
然后跟着import <vector>;
将是不合法的。 - He3lixxx#define I import
,它们会给出与仅使用import <vector>
相同的错误。 - He3lixxx