19

与えられた C89 の機能のみを使用する

typedef [unspecified token sequence] T1;
typedef [another unspecified token sequence] T2;

T1 と T2 が同じ型(単に互換性があるだけではない)である場合にのみ、エラーなしでコンパイルされる言語構造を示します。C89 の制限は、これが autoconf プローブに入るためです。

編集: T1 または T2 またはその両方が不完全な型であっても機能するソリューションが必要です。前にこれについて言及しなかったことをお詫び申し上げます。

SON OF EDIT:現在の3つの回答はすべて、互換性のあるタイプのみを検出します。これは、私が覚えていたよりも「同じタイプ」にはるかに近く、現在の目的には十分近いことがわかりましたが、好奇心から、同じタイプを検出する答えをまだ探しています。以下に、互換性はあるが同じではないタイプのペアをいくつか示します。

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;
4

2 に答える 2

2
T1 t1;
T2 *t2 = &t1;

T1 と T2 が同じでない場合、これは制約違反です。

または、

T1 f();
T2 f() {}
于 2013-02-20T20:24:08.323 に答える