Was ist ein vollständiger Deklarator in C?

8

Harbison / Steeles C-Referenz besagt, dass das Ende eines vollständigen Deklarators ein Sequenzpunkt ist. Aber was ist ein vollständiger Deklarator?

  

"Ein vollständiger Deklarator ist ein Deklarator, der nicht Teil eines anderen ist   Deklarator "

... was?

Wie wäre es zum Beispiel, würde der C-Standard garantieren, dass int i = 0, *j = &i die Speicheradresse mit dem Wert der Variablen i im Zeiger j speichert?

Mit anderen Worten, ist der int i = 0 -Teil ein vollständiger Deklarator?

    
wolf-revo-cats 17.03.2016, 20:51
quelle

1 Antwort

7

Nein, Sie mischen Deklarationen und Deklaratoren .

Lassen Sie mich Teile der C-Grammatik aus dem Standard zitieren:

%Vor%

Und dann:

%Vor%

TL; DR: int i = 0; ist eine Deklaration . Der i -Teil ist ein Deklarator .

Der Teil über vollständige Deklaratoren ist klar, wenn Sie zum Beispiel Zeiger haben. Diese Zeile:

%Vor%

ist eine Deklaration. Der Teil *p[3] ist der vollständige Deklarator , aber p[3] und p sind auch (nicht vollständige) Deklaratoren .

Und wenn Sie Ihre erste Frage stellen, ja, int i = 0, *j = &i; ist völlig in Ordnung, weil es zwei vollständige Deklaratoren gibt: i und *j . Es gibt einen Sequenzpunkt am Ende jedes vollständigen Deklarators und einen weiteren Sequenzpunkt am Ende jedes Initialisierers. Du könntest sogar void *p = &p; schreiben und es wäre gut.

    
rodrigo 17.03.2016, 20:58
quelle

Tags und Links