Obory názvů
Kompilátor vytvoří „obory názvů“ pro rozlišení mezi identifikátory použitými pro různé druhy položek. Názvy v rámci každého oboru názvů musejí být jedinečné, aby nedošlo ke konfliktu, ale stejný název se může objevit ve více než jednom oboru názvů. To znamená, že stejný identifikátor lze použít pro dvě nebo více různých položek za předpokladu, že se položky nacházejí v různých oborech názvů. Kompilátor může rozpoznat odkazy na základě syntaktického kontextu identifikátoru v programu.
Poznámka:
Nezaměňujte omezený pojem jazyka C oboru názvů s funkcí „oboru názvů“ jazyka C++. Další informace najdete v tématu Obory názvů v referenční dokumentaci jazyka C++.
Seznam popisuje obory názvů používané v jazyce C.
Popisky příkazů
Popisky pojmenovaných příkazů jsou součástí příkazů. Definice popisků příkazů jsou vždy následované dvojtečku, ale nejsou součástí case
popisků. Používá popisky příkazů vždy bezprostředně za klíčovým slovem goto
. Popisky příkazů se nemusejí lišit od jiných názvů nebo od názvů popisků v jiných funkcích.
Značky struktur, sjednocení a výčtu
Tyto značky jsou součástí struktury, sjednocení a specifikátorů typu výčtu a pokud jsou k dispozici, vždy okamžitě následují vyhrazená slova struct
, union
nebo enum
. Názvy značek musejí být odlišné od všech ostatních značek struktur, výčtu nebo sjednocení se stejnou viditelností.
Členové struktur nebo sjednocení
Názvy členů se přidělují v názvových prostorech přidružených ke každé struktuře a typu sjednocení. To znamená, že stejný identifikátor může být názvem součásti v libovolném počtu struktur nebo sjednocení současně. Definice názvů součástí se vždy objevují v rámci typů specifikátorů struktury nebo sjednocení. Použití názvů komponent vždy okamžitě sleduje operátory výběru členů (-> a .). Název člena musí být jedinečný v rámci struktury nebo sjednocení, ale nemusí se lišit od jiných názvů v programu, včetně názvů členů různých struktur a sjednocení, případně názvu struktury samotné.
Běžné identifikátory
Všechny ostatní názvy spadají do prostoru názvů, který zahrnuje proměnné, funkce (včetně formálních parametrů a místních proměnných) a konstanty výčtu. Názvy identifikátorů mají vnořenou viditelnost, takže je možné upravit je v rámci bloků.
Názvy typedef
Názvy typedef nelze použít jako identifikátory ve stejném oboru.
Protože jsou například značky struktur, členové struktur a názvy proměnných ve třech různých oborech názvů, nedochází ke konfliktu tří různých položek s názvem student
. Kontext každé položky umožňuje správnou interpretaci pro každý výskyt položky student
v programu. (Informace o strukturách najdete v tématu Deklarace struktury.)
struct student {
char student[20];
int class;
int id;
} student;
Když student
se zobrazí za klíčovým slovem struct
, kompilátor ho rozpozná jako značku struktury. Když student
se zobrazí za operátorem výběru člena (-> nebo .), název odkazuje na člen struktury. V jiných kontextech odkazuje položka student
na proměnnou struktury. Přetížení oboru názvů značek se však nedoporučuje, protože zakrývá význam.