Obory názvů
Kompilátor vytvoří "obory názvů" pro rozlišení mezi identifikátory použité pro různé druhy položek.Názvy v rámci každého oboru názvů musí 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 vyřešit odkazy založené na syntaktickém kontext identifikátoru v programu.
[!POZNÁMKA]
Nezaměňujte omezený pojem jazyka C oboru názvů s funkcí jazyka C++ "oboru názvů".Další informace naleznete v tématu Obory názvů v Referencích pro jazyk C++.
Seznam popisuje obory názvů používané v jazyce C.
Popisky příkazů
Popisky s názvem příkazu jsou součástí příkazů.Definice popisků příkazů jsou vždy následovány dvojtečkou, ale nejsou součástí popisků case.Použití popisků příkazů bezprostředně následuje klíčové slovo goto.Popisky příkazů se nemusí lišit od jiných názvů nebo od názvů popisků v jiných funkcích.Značky struktury, sjednocení a výčtu
Tyto značky jsou součástí specifikátorů typu struktury, sjednocení a výčtu a jsou-li přítomny, bezprostředně následují za vyhrazenými slovy struct, union nebo enum.Názvy značek musí být odlišné od všech ostatních značek struktur nebo sjednocení se stejnou viditelností.Členové struktur nebo sjednocení
V oborech názvů přidružených ke každé struktuře a typu sjednocení jsou přidělovány názvy členů.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části se vždy objevují v rámci typů specifikátorů struktury nebo sjednocení.Použití názvů součásti vždy bezprostředně následuje po operátorech 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, názvů členů různých struktur a sjednocení, nebo názvů struktury samotné.Běžné identifikátory
Všechny další názvy patří do oboru názvů, který obsahuje proměnné, funkce (včetně formálních parametrů a lokálních proměnných) a konstant výčtů.Názvy identifikátorů mají vnořenou viditelnost, je tedy možné je upravit v rámci bloků.Názvy typu TypeDef
Názvy typu Typedef nelze ve stejném oboru použít jako identifikátory.
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 student v programu. (Více informace o strukturách naleznete v tématu Deklarace struktur.)
struct student {
char student[20];
int class;
int id;
} student;
Po zobrazení student za klíčovým slovem struct jej kompilátor rozpozná jako značku struktury.Po zobrazení student po operátoru výběru členů (–> nebo .), odkazuje název na člena struktury.V jiných kontextech student odkazuje na proměnnou struktury.Přetížení oboru názvů značek se však nedoporučuje, protože zakrývá význam.