Sagen Sie bitte erklären:
static int const i, j, k;
Das gleiche ist, wie:
static int const i;
static int const j;
static int const k;
Die declarator specifer, static int const
auf alle Bezeichner angelegt wird.
Sie können diese Logik auch auf Funktionen und Funktionszeiger erweitern.
static int i, (*fun1)(void), fun2(void);
das gleiche ist, wie:
static int i;
static int (*fun1)(void);
static int fun2(void);
Was die in einem Ausdruck erscheint Teil geht, gibt es einige Kommentare zu http://c0x.coding-guidelines.com/6.7.5.pdf ist. Dort heißt es:
Semantiken
Jeder declarator erklärt eine Kennung, und behauptet, dass, wenn ein Operanden der gleichen Form wie der declarator in einem Ausdruck erscheint, eine Funktion oder ein Objekt mit dem Rahmen bezeichnet, Speicherdauer und Typ, der von den Deklarationsspezifizierern angegeben wird.
Commentary
Die Form eines Bezeichners in einem Ausdruck ist wahrscheinlich das gleiche wie die in dem declarator sein. Zum Beispiel wird der Deklarator * x diese Form in einem Ausdruck haben, wenn der Wert, auf den x zeigt, benötigt wird, und der Deklarator y [2] wird diese Form in einem Ausdruck haben, wenn auf ein Element des Arrays y Bezug genommen wird. Es ist der deklaratorische Teil einer Deklaration, der den Bezeichner deklariert. Es ist eine besondere Art von declarator, eine abstrakte-declarator, die nicht eine Kennung
nicht erklären Ich interpretiere die oben bedeuten:
Wenn Sie erklären:
int *x;
und verwenden *x
In einem Ausdruck ist der Typ *x
int
.
Wenn Sie
static int const *x;
deklarieren und verwenden *x
in einem Ausdruck, ist die Art der *x
static int const
.
Weitere Referenzen
Static Variable Declaration (C)
Is [ ] also a declarator (when used in parameter declaration) in C?
C -- Accessing a non-const through const declaration
Ihre Beispiele sind so einfach zu verstehen. Danke von ganzem Herzen! –