Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
En "deklaration" anger tolkningen och attributen för en uppsättning identifierare. En deklaration som också gör att lagringen reserveras för objektet eller funktionen som namnges av identifieraren kallas för en "definition". C-deklarationer för variabler, funktioner och typer har den här syntaxen:
Syntax
declaration:
declaration-specifiers
attribute-seq
väljainit-declarator-listvälja;
/*
attribute-seq
opt är Microsoft-specifik */
declaration-specifiers:
storage-class-specifier
declaration-specifiers
välja
type-specifier
declaration-specifiers
välja
type-qualifier
declaration-specifiers
välja
init-declarator-list:
init-declarator
init-declarator-list
,
init-declarator
init-declarator:
declarator
declarator
=
initializer
Anmärkning
Den här syntaxen för declaration upprepas inte i följande avsnitt. Syntaxen i följande avsnitt börjar vanligtvis med den declarator icke-terminala.
Deklarationerna i init-declarator-list innehåller de identifierare som namnges, init är en förkortning för initialiseraren.
init-declarator-list är en kommaavgränsad sekvens av deklaratorer, som var och en kan ha ytterligare typinformation, eller en initierare eller båda. Innehåller declarator eventuella identifierare som deklareras. Den declaration-specifiers icke-terminala består av en sekvens av typ- och lagringsklasssspecificerare som anger länkning, lagringstid och minst en del av typen av entiteter som deklaratorerna anger. Deklarationer består av en kombination av storage-class-specificerare, typspecificerare, typkvalificerare, deklaratorer och initialiserare.
Deklarationer kan innehålla ett eller flera av de valfria attribut som anges i attribute-seq; seq är en förkortning för sekvens. Dessa Microsoft-specifika attribut utför flera funktioner, som beskrivs i detalj i hela den här boken.
I den allmänna formen av en variabeldeklaration type-specifier anger du variabelns datatyp.
type-specifier Kan vara en förening, som när typen ändras av const eller volatile.
declarator Ger namnet på variabeln, eventuellt ändrad för att deklarera en matris eller en pekartyp. Ett exempel:
int const *fp;
deklarerar en variabel med namnet fp som pekare till ett icke-modifierat (const) int värde. Du kan definiera mer än en variabel i en deklaration med hjälp av flera deklaratorer, avgränsade med kommatecken.
En deklaration måste ha minst en deklarator, eller så måste dess typspecificerare deklarera en strukturtagg, unionstagg eller medlemmar i en uppräkning. Deklaratorer tillhandahåller all återstående information om en identifierare. En deklarator är en identifierare som kan ändras med hakparenteser ([ ]), asterisker (*) eller parenteser ( ( ) ) för att deklarera en matris, pekare eller funktionstyp. När du deklarerar enkla variabler (till exempel tecken, heltal och flyttalsobjekt) eller strukturer och unioner med enkla variabler declarator är det bara en identifierare. Mer information om deklaratorer finns i Deklaratorer och Variabeldeklarationer.
Alla definitioner är implicita deklarationer, men inte alla deklarationer är definitioner. Till exempel är variabeldeklarationer som använder extern storage-class-specificeraren "refererar" i stället för att "definiera" deklarationer. Om en extern variabel ska refereras till innan den definieras, eller om den definieras i en annan källfil från den där den används, krävs en extern deklaration. Lagring allokeras inte av "refererande" deklarationer, och variabler kan inte heller initieras i deklarationer.
En lagringsklass eller en typ (eller båda) krävs i variabeldeklarationer.
__declspecFörutom tillåts endast en lagringsklassspecificerare i en deklaration och inte alla storage-class-specificerare tillåts i alla kontexter. Lagringsklassen __declspec tillåts med andra storage-class-specificerare och tillåts mer än en gång. Lagringsklassspecificeraren för en deklaration påverkar hur det deklarerade objektet lagras och initieras och vilka delar av ett program som kan referera till objektet.
Terminalerna storage-class-specifier som definieras i C inkluderar auto, extern, register, staticoch typedef. Microsoft C innehåller även terminalen storage-class-specifier__declspec. Alla storage-class-specifier terminaler utom typedef och __declspec beskrivs i Lagringsklasser. Mer information om typedeffinns i typedef Deklarationer. Mer information om __declspecfinns i Extended Storage-Class Attributes (Utökade Storage-Class-attribut).
Deklarationens plats i källprogrammet och förekomsten eller frånvaron av andra deklarationer av variabeln är viktiga faktorer för att fastställa variablernas livslängd. Det kan finnas flera redeclarationer men bara en definition. En definition kan dock visas i mer än en översättningsenhet. För objekt med intern länkning gäller den här regeln separat för varje översättningsenhet, eftersom internt länkade objekt är unika för en översättningsenhet. För objekt med extern länkning gäller den här regeln för hela programmet. Mer information om synlighet finns i Livslängd, Omfång, Synlighet och Länkning.
Typspecificerare ger viss information om datatyperna för identifierare. Standardtypsspecificeraren är int. Mer information finns i Typspecificerare. Typspecificerare kan också definiera typtaggar, struktur- och unionskomponentnamn och uppräkningskonstanter. Mer information finns i Uppräkningsdeklarationer, strukturdeklarationer och unionsdeklarationer.
Det finns två type-qualifier terminaler: const och volatile. De här kvalificerarna anger extra egenskaper för typer som endast är relevanta vid åtkomst till objekt av den typen via l-värden. Mer information om const och volatilefinns i Typkvalificerare. En definition av l-värden finns i L-Value och R-Value Expressions.
Se även
Sammanfattning av C-språksyntax
Deklarationer och typer
Sammanfattning av deklarationer