static struct fuse_oprations hello_oper = {
.getattr = hello_getattr,
.readdir = hello_readdir,
.open = hello_open,
.read = hello_read,
};
Ich verstehe diese C-Syntax nicht gut. Ich kann nicht einmal suchen, weil ich den Namen der Syntax nicht kenne. Was ist das?
c
c99
designated-initializer
Benjamin
quelle
quelle
Antworten:
Dies ist eine C99-Funktion, mit der Sie bestimmte Felder der Struktur in einem Initialisierer nach Namen 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:
... können Sie verwenden
...oder:
...oder auch:
... obwohl die letzten beiden nur für C99 sind.
quelle
struct demo_s demo = { .first = 1, .first = 9 };
Auf einem meiner GCC wird dies ohne Vorwarnung kompiliert und zuerst wird es 9.Dies sind die von C99 festgelegten Initialisierer .
quelle
Es ist bekannt als
designated initialisation
(siehe Designated Initializers ). Eine "Initialisiererliste". Jedes '.
' ist ein "designator
", das in diesem Fall ein bestimmtes Mitglied der 'fuse_oprations
' Struktur benennt, das für das durch die 'hello_oper
' Kennung angegebene Objekt initialisiert werden soll.quelle
Die gesamte Syntax wird als designierter Initialisierer bezeichnet, wie bereits von COD3BOY erwähnt. Sie wird im Allgemeinen verwendet, wenn Sie Ihre Struktur zum Zeitpunkt der Deklaration auf bestimmte oder Standardwerte initialisieren müssen.
quelle