Ich verstehe diese C-Syntax nicht gut. Ich kann nicht einmal suchen, weil ich den Namen der Syntax nicht kenne. Was ist das?
Es sieht aus wie ein Struct-Initialisierer.
– Mystisch
8. November 2011 um 7:40 Uhr
Standardisiert in C99, funktioniert also nicht, wenn Sie einen (wirklich) alten Compiler haben.
– Irgendein Programmierer-Typ
8. November 2011 um 7:43 Uhr
Endlich den Link dafür gefunden: stackoverflow.com/questions/330793/…
– Mystisch
8. November 2011 um 7:46 Uhr
Leider sind selbst die aktuellen Versionen von MSVC nach diesem Standard “(wirklich) alte Compiler”.
– Jonathan Leffler
8. November 2011 um 7:52 Uhr
Absolut bizarr, ich habe diese Frage gesucht, während ich auch ein Sicherungs-Tutorial durchgegangen bin und genau denselben Initialisierer geschrieben habe.
– Keegan Jay
10. April 2018 um 23:44 Uhr
Dies ist eine C99-Funktion, mit der Sie bestimmte Felder der Struktur nach Namen in einem Initialisierer festlegen können. Zuvor musste der Initialisierer nur die Werte für alle Felder der Reihe nach enthalten – was natürlich immer noch funktioniert.
Also für die folgende Struktur:
struct demo_s {
int first;
int second;
int third;
};
Beachten Sie, dass ich gerade dieses Formular vom Typ “Punkt-Initialisierung” für C++ mit gcc ausprobiert habe und es scheint, dass alle Versionen von gcc C++ es unterstützen, also wette ich, dass es von gcc als gcc-Erweiterung unterstützt wird, was bedeutet, dass ich vor C++20 I vermuten, dass es nicht unbedingt auf Nicht-gcc/g++-Compiler portierbar ist. Abgesehen davon verwende ich gcc/g++-Compiler. Wenn es also von gcc für C++ unterstützt wird, könnte ich es genauso gut verwenden.
– Gabriel Staples
9. November 2019 um 7:10 Uhr
Es gibt einen möglichen Fallstrick bei der Punktinitialisierung (zumindest bei einigen Compilern). struct demo_s demo = { .first = 1, .first = 9 }; Auf einem meiner GCC wird dies ohne Vorwarnung kompiliert und zuerst 9 sein.
Es ist bekannt als designated initialisation (sehen Ausgewiesene Initialisierer). Eine “Initialisierer-Liste”, Jeder ‘.‘ ist ein “designator“, der in diesem Fall ein bestimmtes Mitglied der ‘fuse_oprations‘ struct zum Initialisieren für das durch das ‘ bezeichnete Objekthello_oper‘ Kennung.
Die gesamte Syntax ist als designierter Initialisierer bekannt, wie bereits von COD3BOY erwähnt, und wird im Allgemeinen verwendet, wenn Sie Ihre Struktur zum Zeitpunkt der Deklaration auf bestimmte oder Standardwerte initialisieren müssen.
14245100cookie-checkWas bedeutet Punkt (.) in einem Struct-Initialisierer?yes
Es sieht aus wie ein Struct-Initialisierer.
– Mystisch
8. November 2011 um 7:40 Uhr
Standardisiert in C99, funktioniert also nicht, wenn Sie einen (wirklich) alten Compiler haben.
– Irgendein Programmierer-Typ
8. November 2011 um 7:43 Uhr
Endlich den Link dafür gefunden: stackoverflow.com/questions/330793/…
– Mystisch
8. November 2011 um 7:46 Uhr
Leider sind selbst die aktuellen Versionen von MSVC nach diesem Standard “(wirklich) alte Compiler”.
– Jonathan Leffler
8. November 2011 um 7:52 Uhr
Absolut bizarr, ich habe diese Frage gesucht, während ich auch ein Sicherungs-Tutorial durchgegangen bin und genau denselben Initialisierer geschrieben habe.
– Keegan Jay
10. April 2018 um 23:44 Uhr