Třída úložiště
Specifikátor třídy úložiště v definici funkce poskytuje funkci buď extern
nebo static
třídu úložiště.
Syntaxe
function-definition
:
declaration-specifiers
opt opt declarator
declaration-list
attribute-seq
compound-statement
/* attribute-seq
je specifický pro Microsoft */
declaration-specifiers
:
storage-class-specifier
declaration-specifiers
volit
type-specifier
declaration-specifiers
volit
type-qualifier
declaration-specifiers
volit
storage-class-specifier
: /* Pro definice funkcí */
extern
static
Pokud definice funkce neobsahuje storage-class-specifier
, třída úložiště ve výchozím nastavení extern
. Funkci můžete explicitně deklarovat jako extern
, ale nevyžaduje se.
Pokud deklarace funkce obsahuje storage-class-specifier
extern
, identifikátor má stejné propojení jako jakákoli viditelná deklarace identifikátoru s oborem souboru. Pokud neexistuje žádná viditelná deklarace s oborem souboru, má identifikátor externí propojení. Pokud má identifikátor obor souboru a ne storage-class-specifier
, má identifikátor externí propojení. Vnější propojení znamená, že všechny instance identifikátoru označují stejný objekt nebo funkci. Další informace o propojení a rozsahu souborů najdete v tématu Životnost, Rozsah, Viditelnost a Propojení.
Deklarace funkcí v oboru bloku se specifikátorem třídy úložiště jiným než extern
generují chyby.
Funkce s static
třídou úložiště je viditelná pouze ve zdrojovém souboru, ve kterém je definovaná. Všechny ostatní funkce, ať už mají extern
třídu úložiště explicitně nebo implicitně, jsou viditelné ve všech zdrojových souborech v programu. Pokud static
je požadovaná třída úložiště, musí být deklarována při prvním výskytu deklarace (pokud existuje) funkce a v definici funkce.
Specifické pro Microsoft
Pokud jsou povolena rozšíření Společnosti Microsoft, funkce původně deklarovaná bez třídy úložiště (nebo třídy extern
úložiště) má třídu static
úložiště, pokud je definice funkce ve stejném zdrojovém souboru a pokud definice explicitně určuje static
třídu úložiště.
Při kompilaci s možností kompilátoru /Ze mají funkce deklarované v bloku pomocí klíčového extern
slova globální viditelnost, což není pravdivé při kompilaci pomocí /Za. Tato funkce by se neměla spoléhat, pokud je potřeba zvážit přenositelnost zdrojového kódu.
END Microsoft Specific