Sdílet prostřednictvím


Přehled deklarací

Deklarace určuje interpretaci a atributy sady identifikátorů. Deklarace, která také způsobí, že úložiště bude vyhrazeno pro objekt nebo funkci pojmenovanou identifikátorem, se nazývá "definice". Deklarace jazyka C pro proměnné, funkce a typy mají tuto syntaxi:

Syntaxe

declaration:
declaration-specifiersattribute-seqopt opt init-declarator-list ;

/* attribute-seqopt is Microsoft-specific */

declaration-specifiers:
storage-class-specifierdeclaration-specifiersvolit
type-specifierdeclaration-specifiersvolit
type-qualifierdeclaration-specifiersvolit

init-declarator-list:
init-declarator
init-declarator-list , init-declarator

init-declarator:
declarator
declarator = initializer

Poznámka:

Tato syntaxe declaration se v následujících částech neopakuje. Syntaxe vnásledujícíchch declarator

Deklarace v názvu init-declarator-list obsahují identifikátory; init je zkratka pro inicializátor. Jedná se init-declarator-list o čárkami oddělenou sekvenci deklarátorů, z nichž každá může mít další informace o typu, nebo inicializátor nebo obojí. Obsahuje declarator identifikátory, pokud nějaké jsou deklarovány. declaration-specifiers Nonterminal se skládá z posloupnosti specifikátorů typu a třídy úložiště, které označují propojení, dobu trvání úložiště a aspoň část typu entit, které deklarátory označují. Deklarace se skládají z některé kombinace specifikátorů třídy úložiště, specifikátorů typů, kvalifikátorů typu, deklarátorů a inicializátorů.

Deklarace mohou obsahovat jeden nebo více volitelných atributů uvedených v attribute-seq; seq je zkratka pro sekvenci. Tyto atributy specifické pro Microsoft provádějí několik funkcí, které jsou podrobně popsány v této knize.

V obecné podobě deklarace type-specifier proměnné dává datový typ proměnné. Může type-specifier být složená, jako když je typ upraven const nebo volatile. Dává declarator název proměnné, pravděpodobně změněn tak, aby deklaruje pole nebo typ ukazatele. Příklad:

int const *fp;

deklaruje proměnnou pojmenovanou fp jako ukazatel na nemodifikovatelnou (const) int hodnotu. V deklaraci můžete definovat více než jednu proměnnou pomocí více deklarátorů oddělených čárkami.

Deklarace musí mít alespoň jeden deklarátor nebo jeho specifikátor typu musí deklarovat značku struktury, sjednocovací značku nebo členy výčtu. Deklarátory poskytují všechny zbývající informace o identifikátoru. Deklarátor je identifikátor, který lze upravit pomocí závorek ([ ]), hvězdičk (*) nebo závorek ( ( ) ) pro deklaraci pole, ukazatele nebo typu funkce. Když deklarujete jednoduché proměnné (například znak, celé číslo a položky s plovoucí desetinou čárkou) nebo struktury a sjednocení jednoduchých proměnných, declarator je to jen identifikátor. Další informace o deklarátorech naleznete v tématu Deklarátory a deklarace proměnných.

Všechny definice jsou implicitně deklarace, ale ne všechny deklarace jsou definice. Například deklarace proměnných používající extern specifikátor třídy úložiště jsou "odkazující", nikoli "definování" deklarací. Pokud se má externí proměnná odkazovat před jeho definováním nebo pokud je definovaná v jiném zdrojovém souboru z jiného zdrojového souboru, ve kterém se používá, extern je potřeba deklarace. Úložiště není přiděleno "odkazováním" deklarací, ani není možné inicializovat proměnné v deklaracích.

Třída úložiště nebo typ (nebo obojí) se vyžaduje v deklarací proměnných. __declspecS výjimkou , pouze jeden specifikátor třídy úložiště je povolen v deklaraci a ne všechny specifikátory třídy úložiště jsou povoleny v každém kontextu. Třída __declspec úložiště je povolena s jinými specifikátory třídy úložiště a je povolena více než jednou. Specifikátor třídy úložiště deklarace ovlivňuje způsob uložení a inicializace deklarované položky a toho, které části programu mohou odkazovat na položku.

Terminály storage-class-specifier definované v jazyce C zahrnují auto, extern, register, static, a typedef. Microsoft C zahrnuje storage-class-specifier také terminál __declspec. Všechny storage-class-specifier terminály s výjimkou typedef a __declspec jsou popsány v třídách úložiště. Informace o typedefdeklaracích naleznete v tématu typedef Deklarace. Další informace naleznete v __declspectématu Rozšířené atributy třídy úložiště.

Umístění deklarace ve zdrojovém programu a přítomnost nebo absence jiných deklarací proměnné jsou důležitými faktory při určování doby života proměnných. Může existovat více redeklarací, ale pouze jedna definice. Definice se ale může zobrazit ve více než jedné jednotce překladu. Pro objekty s interním propojením platí toto pravidlo zvlášť pro každou jednotku překladu, protože interně propojené objekty jsou jedinečné pro jednotku překladu. Pro objekty s externím propojením platí toto pravidlo pro celý program. Další informace o viditelnosti najdete v tématu Životnost, Rozsah, Viditelnost a Propojení.

Specifikátory typu poskytují určité informace o datových typech identifikátorů. Výchozí specifikátor typu je int. Další informace naleznete v tématu Specifikátory typů. Specifikátory typů mohou také definovat značky typů, názvy součástí struktury a sjednocení a konstanty výčtu. Další informace naleznete v tématu Výčtové deklarace, Deklarace struktury a Deklarace sjednocení.

Existují dva type-qualifier terminály: const a volatile. Tyto kvalifikátory určují další vlastnosti typů, které jsou relevantní pouze při přístupu k objektům tohoto typu prostřednictvím l-hodnot. Další informace o const kvalifikátorech typu a volatilenaleznete v tématu kvalifikátory typu. Definice l-hodnot naleznete v tématu L-Value a R-Value Expressions.

Viz také

Souhrn syntaxe jazyka C
Deklarace a typy
Souhrn deklarací