通过 implementation-defined 宏识别 clang、gcc 和 tcc

Recognizing clang, gcc, and tcc by implementation-defined macros

我使用 clanggcctcc,我希望能够在一个共同点 header 中区分这三个。

从他们的宏转储来看,我希望 __clang__ 宏将唯一标识 clang。

我无法使用 tcc 获取宏转储($compiler -x c -E -dM /dev/null 在这种情况下不起作用)。

唯一标识 gcc(可能还有 tcc)的宏(如果有的话)是什么?

使用__TINYC__检测tcc1

在这个 Whosebug 问题中解释了 gcc 和 clang 的检测:


1(引自:http://bellard.org/tcc/tcc-doc.html#SEC9
__TINYC__ 是一个预定义的宏,1 表示你使用 TCC。