In der C-Sprache, wenn wir haben:Compiler Äquivalenz c Typ
typedef int a[100];
typedef int b[200];
Dann wird eine Art und b sind gleichwertig? Soweit ich weiß, C verwendet Namensäquivalenz, , aber ich bin sehr verwirrt.
In der C-Sprache, wenn wir haben:Compiler Äquivalenz c Typ
typedef int a[100];
typedef int b[200];
Dann wird eine Art und b sind gleichwertig? Soweit ich weiß, C verwendet Namensäquivalenz, , aber ich bin sehr verwirrt.
In Ihrem Beispiel ist a
Alias für den Typ int[100]
und b
ist ein Alias für den Typ int[200]
. Diese beiden Typen sind nicht gleichwertig, da die Größe eines Arrays Teil seines Typs ist und unterschiedliche Größen unterschiedliche Typen bedeuten.
Wenn die zweite Zeile typedef int b[100];
wäre, wären a
und b
äquivalent.
Soweit ich C wissen verwendet Name Äquivalenz
Structs und Gewerkschaften sind in dem Sinne, nominell getippt, dass, wenn Sie zwei struct (oder Vereinigung) Typen A und B markiert, die die genau haben gleichen Körper, sie gelten immer noch als verschiedene Arten. Wenn also eine Variable den Typ struct A
hat, können Sie ihr struct B
nicht zuweisen, ohne sie zuerst zu konvertieren.
Dies gilt nicht für typedef
s, die bloße Aliase sind. Wenn Sie also zwei typedefs typedef X a; typedef X b;
haben, dann sind X
, a
und b
alle nicht voneinander zu unterscheiden.
Vielen Dank. – DIMITRIOS
Versuchen Sie 'sizeof' auf jedem von ihnen ... –
@EugeneSh. Warum? * Gleiche Größe * bedeutet nicht unbedingt * gleiche Art *. 'typeof()' (wo unterstützt) wäre eine bessere Idee. – tofro
@tofro * Verschiedene * Größe ist * notwendigerweise * bedeutet unterschiedliche Art. –