仅使用 C89 的功能,给定
typedef [unspecified token sequence] T1;
typedef [another unspecified token sequence] T2;
展示一种语言结构,当且仅当 T1 和 T2 是相同类型(不仅仅是兼容)时,该语言结构才能正确编译。对 C89 的限制是因为这将进入 autoconf 探测。
编辑:我需要一个即使 T1 或 T2 或两者都是不完整类型的解决方案。很抱歉之前没有提到这一点。
编辑之子:所有三个当前答案仅检测兼容类型。事实证明,这比我记得的更接近“相同类型”,对于我目前的目的来说足够接近,但出于好奇,我仍在寻找检测相同类型的答案。以下是一些兼容但不相同的类型:
typedef void (*T1)(void);
typedef void (*T2)();
typedef float T1[];
typedef float T2[12];
typedef enum { ONE, TWO, THREE } T1;
typedef /* implementation-defined integer type */ T2;