Ich habe das in einem C-Code gesehen:
%Vor%Was zum Teufel bedeutet das?
Dieser Code initialisiert ein struct
unter Verwendung der funky C-Initialisierungssyntax, um jedes Feld in der Reihenfolge der Deklaration zu initialisieren, siehe Ссылка . Ein wichtiger Nebeneffekt im Falle dieses Beispiels ist, dass die verbleibenden Felder keine Werte für die Initialisierung von Nullen angeben.
Dieser Trick ist in Win32-APIs relativ häufig - die API benötigt die voreingestellte Größe, um die Version anzugeben, für die der Client-Code kompiliert wird. In vielen dieser Fälle wird auch eine gelöscht der Puffer, der normalerweise einen separaten Aufruf an z memset
vor dem Initialisieren des Größenfeldes mit sizeof
.
Siehe auch Struct Initialisierung der C / C ++ Programmiersprache? für verwandte Beispiele
Es ist ein Initialisiererausdruck , der das erste Feld von W
auf sizeof(Wininfo)
und die anderen Felder auf null setzt.
Erstens ist es keine Aussage, es ist eine Erklärung. Deklarationen sind keine Aussagen in C.
Zweitens ist der = { /* whatever */ }
-Teil ein Initialisierer - er gibt den Anfangswert eines Objekts an. Normalerweise verwenden Sie in {}
eingeschlossene Initialisierer, um Aggregatobjekte zu initialisieren: Arrays oder Strukturen. Ein wenig bekanntes Merkmal der Sprache C ist jedoch, dass Initialisierer von Skalarobjekten optional auch in {}
eingeschlossen sein können, wie in
Was genau Ihre spezifische Deklaration bedeutet, hängt davon ab, was Wininfo
type ist. Wenn W
ein Aggregat ist, wird sein erstes Mitglied mit sizeof(Wininfo)
value initialisiert und der Rest wird mit Nullen initialisiert. Wenn W
ein Skalar ist, erhält es nur den Anfangswert von sizeof(Wininfo)
.
Tags und Links c curly-braces static-initializer