Использование только особенности C89, учитываяПричина в C89, если два типа не один и тот же
typedef [unspecified token sequence] T1;
typedef [another unspecified token sequence] T2;
демонстрируют конструкция языка, которая компилируется без ошибок, если и только если T1 и T2 то же самое тип (не только совместимый). Ограничение на C89 связано с тем, что оно входит в зонд autoconf.
EDIT: Мне нужно решение, которое работает, даже если T1 или T2 или оба являются неполными. Извините, что не упоминал об этом раньше.
SON OF EDIT: Все три текущих ответа определяют только . Это оказывается гораздо ближе к «тому же типу», чем я помню, достаточно близко для моих текущих целей, но из любопытства я все еще ищу ответ, который определяет тот же тип. Вот некоторые пары типов, которые совместимы, но не то же самое:
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;
Я полагаю, предупреждение компилятора не достаточно хорошо? –
@NikosC. Если скомпилировано с '-Werror', предупреждение станет ошибкой, так что это, вероятно, хорошо. – Kevin
Я бы предпочел жесткую ошибку по эксплуатационным причинам (не имея необходимости гасить с CFLAGS в зонде autoconf), но предупреждение будет сделано. – zwol