ich diesen Code in einigen C sah:C-Code, auch {}
Wininfo W = { sizeof(Wininfo) };
Was zum Teufel bedeutet das?
ich diesen Code in einigen C sah:C-Code, auch {}
Wininfo W = { sizeof(Wininfo) };
Was zum Teufel bedeutet das?
Dieser Code initialisiert eine struct
mit funky C-Initialisierersyntax, um jedes Feld in der Reihenfolge der Deklaration zu initialisieren, siehe http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=421. Ein wichtiger Nebeneffekt im Fall dieses Beispiels ist, dass die verbleibenden Felder keine Werte für die Initialisierung auf Nullen angeben.
Dieser Trick ist ein relativ häufig in Win32-APIs - die API erfordert die Größe voreingestellt, um die Version anzugeben, gegen die der Client-Code kompiliert wird - in vielen dieser Fälle wird auch von einem erwartet Löschen Sie den Puffer, der normalerweise einen separaten Aufruf an z memset
vor der Initialisierung der Größe Feld mit der sizeof
.
Siehe auch Struct initialization of the C/C++ programming language? für verwandte Beispiele
Es ist ein initializer expression ist, dass das erste Feld von W
-sizeof(Wininfo)
und die anderen Felder auf Null setzt.
Erstens ist es keine Aussage, es ist eine Deklaration. Deklarationen sind keine Aussagen in C.
Zweitens ist der = { /* whatever */ }
Teil ein Initialisierer - es gibt den Anfangswert eines Objekts an. Normalerweise verwenden Sie Initialisierer, die in {}
enthalten sind, um Aggregatobjekte zu initialisieren: Arrays oder Strukturen. Allerdings ein wenig bekanntes Merkmal von C-Sprache ist, dass initializers von skalaren Objekte können optional auch in {}
eingeschlossen werden, wie in
int i = { 5 };
Was genau Ihre spezifischen Deklaration bedeutet, hängt von Wininfo
Typ ist. Wenn W
ein Aggregat ist, wird das erste Element mit sizeof(Wininfo)
initialisiert und der Rest wird mit Nullen initialisiert. Wenn W
ein Skalar ist, erhält es nur den Anfangswert sizeof(Wininfo)
.
Da es einen Initialisierer enthält, ist es nicht nur eine Deklaration, sondern eine Definition. –
Definition ist immer eine Deklaration. Wenn also die Unterscheidung keine Rolle spielt, wird normalerweise der Begriff * Deklaration * verwendet. Das syntaktische Element wird immer * deklaration * genannt. Definitionen existieren nur auf der Ebene der Semantik. – AnT
+1: Schön und vollständig (@nos: das war es, worüber ich mich bei der Erwähnung von Redundanz lustig machte) –
+1 (und stahl den größten Teil der Antwort, um mir viel weniger unvollständig zu machen: P) –