Übersicht über Deklarationen
Eine „Deklaration“ gibt die Interpretation und die Attribute eines Satzes Bezeichner an.Eine Deklaration, die auch Speicher für das Objekt oder die Funktion reserviert werden sollen, die vom Bezeichner benannt werden, wird eine „nicht.“ C-Deklarationen für Variablen, Funktionen und Typen sind diese Syntax:
Syntax
declaration:
Spezifizierer deklariert INIT-Deklarator Listeopt**;**Spezifizierer deklariert:
Speicherklassenspezifizierer ATTRIBUTE-folgend optSpezifizierer Deklaration opt
ATTRIBUTE-folgendesopt/* */Microsoft-spezifische ist
Typspezifizierer Deklaration Bezeichner opt
Spezifizierer Deklaration Qualifizierer TYPE opt
INIT-DeklaratorListe:
INITDeklaratorINIT-DeklaratorListe , INIT Deklarator
INITDeklarator:
DeklaratorDeklaratoren = Initialisierung
Hinweis |
---|
Diese Syntax für declaration In den folgenden Abschnitten wird nicht wiederholt.Syntax in den folgenden Abschnitten beginnt normalerweise mit Nicht-Terminal declarator . |
Die Deklarationen in der Liste enthalten INIT-Deklarator Bezeichner, die benannt sind. init ist eine Abkürzung für Initialisierer.Die INIT-Deklarator Liste ist eine durch Trennzeichen getrennte Sequenz von Deklaratoren, von denen jeder zusätzliche Typinformationen enthalten kann, oder Initialisierer oder beides.declarator enthält die Bezeichner sofern vorhanden, die deklariert werden.Die Deklaration Nicht-Terminal Spezifizierer besteht aus einer Sequenz des Typs und der Speicherklassenspezifizierer, die die Bindung, die die Speicherung dauer und mindestens den Teil des Typs der Entitäten an, die die Deklaratoren geben.Daher besteht eine beliebige Kombination von Speicherklassenspezifizierern Deklarationen von Typspezifizierern, der Typ, aus qualifizierern Deklaratoren und Initialisierer.
Deklarationen können eine oder mehrere der optionalen Attribute enthalten, die in ATTRIBUTE-folgendemaufgeführt sind. Sequenz ist eine Abkürzung für Weiter .Diese Microsoft-spezifische Attribute führen eine Vielzahl von Funktionen aus, die während dieses Buch im Detail besprochen werden.Eine Liste dieser Attribute finden Sie unter Programmiersprache C-Syntax-Zusammenfassung.
In der allgemeinen Form einer Variablendeklaration, gibt Typspezifizierer den Datentyp der Variablen.Der Typspezifizierer kann ein Mittel sein, wenn der Typ durch const oder volatilegeändert wird.declarator gibt den Namen der Variablen, möglicherweise geändert, um ein Array oder einen Zeigertyp zu deklarieren.Beispiel:
int const *fp;
deklariert eine Variable mit dem Namen fp als Zeiger auf ein nicht veränderbaren (const) int-Wert.Sie können mehr als eine Variable in einer Deklaration definieren, indem Sie mehrere Deklaratoren verwenden und durch Kommas getrennt wird.
Eine Deklaration muss über mindestens einen Deklarator sein oder Typspezifizierer muss ein Struktur oder Union, tag tag Member einer Enumeration deklarieren.Deklaratoren stellen alle verbleibenden Informationen über einen Bezeichner.Ein Deklarator ist ein Bezeichner, der mit Klammern ([]), Sternchen (*) oder Klammern (()) geändert werden kann, um ein Array, Zeiger oder einen Funktionstyp zu deklarieren.Wenn Sie einfache Variablen (Zeichen, z. B. ganze Zahl und float Elemente) oder Strukturen und Unions von einfachen Variablen deklarieren, ist declarator nur ein Bezeichner.Weitere Informationen über Deklaratoren finden Sie unter Deklaratoren und Variablendeklarationen.
Alle Definitionen sind impliziert Vereinabarungen, aber nicht alle Deklarationen sind Definitionen.Zum Beispiel verweisen Variablendeklarationen, die mit dem extern Speicherklassenspezifizierer“, „beginnen, sondern „Deklaration“ definiert.Wenn eine externe Variable verwiesen werden soll, bevor sie definiert wurde, oder wenn sie in eine andere Quelldatei aus der definiert wird, wo sie verwendet wird, ist eine extern Deklaration erforderlich.Der Speicher wird erst zugeordnet, indem Sie“ verweist auf „Deklarationen noch Variablen in die Deklarationen initialisiert werden.
Eine Speicherklasse oder ein Typ (oder beide) ist in Variablendeklarationen erforderlich.Neben __declspecwird nur ein Speicherklassenspezifizierer in einer Deklaration und können nicht alle Speicherklassenspezifizierer werden in einem Kontext nicht zulässig.Die __declspec Speicherklasse ist mit anderen Speicherklassenspezifizierern zulässig, und sie wird einmal zulässt.Der Speicherklassenspezifizierer einer Deklaration beeinflusst, wie das deklarierte Element gespeichert und initialisiert wird und das die Teile eines Programms das Element verweisen können.
Die Speicherklassenspezifizierer terminals, die in C definiert werden, enthalten auto, extern, Register, staticund typedef.Darüber hinaus schließt Microsoft C# das Speicherklassenspezifizierer terminal __declspecein.Alle Speicherklassenspezifizierer terminals, außer typedef und __declspec in Speicherklassenerläutert werden.Weitere Informationen dazu finden Sie unter Typedef-Deklarationentypedef.Weitere Informationen dazu finden Sie unter Erweiterte Speicherklassen-Attribute__declspec.
Der Speicherort der Deklaration innerhalb des Quellprogramms und das Vorhandensein oder Nichtvorhandensein von anderen Deklarationen der Variablen sind wichtige Faktoren, wenn sie die Lebensdauer von Variablen bestimmt wird.Es kann jedoch nur eine Definition mehrerer redeclarations erteilen.Allerdings kann eine Definition in mehr als einer Übersetzungseinheit angezeigt werden.Für Objekte mit interner Bindung, gilt diese Regel separat auf jede Übersetzungseinheit intern zu, da verknüpfte Objekte auf eine Übersetzungseinheit eindeutig sind.Für Objekte mit externer Bindung, gilt diese Regel auf das gesamte Programm zu.Weitere Informationen finden Sie unter Lebensdauer Bereich, Sichtbarkeit und Bindung Weitere Informationen zur Sichtbarkeit.
Typspezifizierer stellen einige Informationen zu den Datentypen von Bezeichnern bereit.Der Standardtyp Parameterbezeichner ist int.Weitere Informationen finden Sie unter Typspezifizierer.Typspezifizierer können Typ Tage, Struktur- und Unions und der Enumerationskonstanten definieren.Weitere Informationen finden Sie unter Enumerations-Deklarationen, Struktur-Deklarationenund Unions-Deklarationen.
Es gibt zwei TYPE Terminals Qualifizierern : const und volatile.Diese Qualifizierer geben zusätzliche Eigenschaften von Typen an, die relevant sind, sofern ein solcher Objekte dieses Typs nur als L-Werte zugreift.Weitere Informationen zu const und volatilefinden Sie unter Typ-Qualifizierer.Für eine Definition von L-Werten finden Sie unter L-Werts-und R-Werts-Ausdrücke.