2017-06-01 4 views
6

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.

+1

Versuchen Sie 'sizeof' auf jedem von ihnen ... –

+0

@EugeneSh. Warum? * Gleiche Größe * bedeutet nicht unbedingt * gleiche Art *. 'typeof()' (wo unterstützt) wäre eine bessere Idee. – tofro

+2

@tofro * Verschiedene * Größe ist * notwendigerweise * bedeutet unterschiedliche Art. –

Antwort

9

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.

+0

Vielen Dank. – DIMITRIOS