C-Code mit {}

8

Ich habe das in einem C-Code gesehen:

%Vor%

Was zum Teufel bedeutet das?

    
Paul Reiners 11.01.2010, 15:00
quelle

3 Antworten

15

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

    
Ruben Bartelink 11.01.2010, 15:02
quelle
9

Es ist ein Initialisiererausdruck , der das erste Feld von W auf sizeof(Wininfo) und die anderen Felder auf null setzt.

    
sth 11.01.2010 15:04
quelle
5

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

%Vor%

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) .

    
AnT 11.01.2010 15:08
quelle