__MY_CC__
上下文:不支持除此之外的所有编译器。但是,如何只允许使用第 3 方编译器进行预处理?
#if cc -E
/* permit only preprocessing with a 3rd-party compiler */
#elif ! __MY_CC__
#error unsupported compiler
#endif
UPD。我试图解决的根本问题:
考虑名为
t0.c
.要求
t0.c
:一个。
t0.c
允许仅使用编译器进行my_cc
编译。不支持其他编译器(因为t0.c
包含特定于目标的代码)。湾。
t0.c
还包含一些元信息。元信息在t0.c
预处理后可用。C。元信息将在没有
my_cc
编译器的环境中使用。(这意味着它t0.c
不仅被设计为编译,而且只是被预处理,即不执行后续翻译阶段。)因此,t0.c
需要允许使用任何符合要求的实现(以下称为cc
)进行预处理,即不是my_cc
。如何满足这样的要求?
用户 Paul Hankin 提出了以下方法:
#if ! __MY_CC__
"compiler not supported"
#endif
这段代码:
- 将与
my_cc
. 好的。 cc
由于语法错误(例如为 clang 给出),将不会与 一起编译:
t0.c:4:1: error: expected identifier or '('
"compiler not supported"
^
1 error generated.
好的。
使用生成的翻译单元进行预处理后,
cc -E
将包含"compiler not supported"
,这是不可取的,因为:一个。预计翻译单元不包含任何额外的开销(例如字符串)。
湾。它打破了要求:
cc -E
支持。
不好。
我们可以将 更改"compiler not supported"
为"compilation using non __MY_CC__ is not supported"
。但是,预计在t0.c
预先拥有之后,生成的翻译单元不包含任何额外的开销(例如字符串)。有没有无开销的解决方案?