Es bedeutet das gleiche wie alle anderen Anwendungen von sizeof
. Er berechnet die Größe des Ausdrucks.
In diesem speziellen Fall vermute ich, dass die Überprüfung eine Eigenschaft von t
(die ein Typname sein sollte, keine Variable), die ich nicht aus dem Kontext weiß ... Vielleicht ist das möglich um es als Zeiger zu behandeln (benötigt für die Array-Indizierung), der einige Typen ausschließen würde. Der Kommentar neben dem Makro sagt /* provoke compile error for invalid uses of size argument */
, die diese Theorie zu unterstützen scheint.
Beachten Sie, dass sizeof
ein Operator ist, keine Funktion. Die Klammern werden nicht benötigt, es sei denn, Sie möchten die Größe eines Typs direkt berechnen und sind dann Teil des Ausdrucks (es handelt sich um einen Cast-Ausdruck). So könnte dies sizeof t == sizeof t[1] && ...
oder vielleicht (sizeof t == sizeof t[1])
für die Klarheit geschrieben werden.
Dies ist ein sehr guter Stil zu verwenden, da es die Größe, die auf das richtige Array berechnet wird, "sperrt", anstatt den Typ t
zu wiederholen. Wenn sich der Typ also ändert, passt sich der Ausdruck automatisch an und berechnet immer noch das Richtige.
Viele C-Programmierer scheinen in allen Fällen aus irgendeinem Grund Klammern um das Argument zu sizeof
zu haben.
"Wenn' t' eine Arrayvariable ist, wird 'sizeof (t) == sizeof (t [1])' falsch sein "ist das wirklich immer wahr? –
@AndreasGrapentin: Nicht für ein Array von einem Element, aber dann erhalten Sie möglicherweise eine Compiler-Warnung für die Indizierung des Arrays außerhalb der Grenzen. – interjay