Rozsah a viditelnost
Viditelnost identifikátoru určuje části programu, na které lze odkazovat – na jeho "obor". Identifikátor je viditelný (tj. lze jej použít) pouze v částech programu zahrnujících jeho "obor", který může být omezený (v pořadí zvýšení omezujícího rozsahu) souboru, funkce, bloku nebo prototypu funkce, ve kterém se zobrazuje. Rozsah identifikátoru je součástí programu, ve kterém lze použít název. Někdy se tomu říká "lexikální obor". Existují čtyři druhy rozsahu: funkce, soubor, blok a prototyp funkce.
Všechny identifikátory s výjimkou popisků mají svůj rozsah určený úrovní, ve které dochází k deklaraci. Pro každý druh rozsahu viditelnosti identifikátorů programu platí následující pravidla:
Obor souboru
Specifikátor deklarátoru nebo typu identifikátoru s oborem souboru se zobrazí mimo jakýkoli blok nebo seznam parametrů a je přístupný z libovolného místa v jednotce překladu po deklaraci. Názvy identifikátorů s oborem souborů se často nazývají "globální" nebo "externí". Obor globálního identifikátoru začíná v okamžiku jeho definice nebo deklarace a končí na konci jednotky překladu.
Rozsah funkce
Popisek je jediný druh identifikátoru, který má obor funkce. Popisek je deklarován implicitně použitím v příkazu. Názvy popisků musejí být v rámci funkce jedinečné. (Další informace o popiscích a názvech popisků najdete v tématu Příkazy goto a Labeled.)
Rozsah bloku
Deklarátor nebo specifikátor typu pro identifikátor s rozsahem bloku se zobrazí uvnitř bloku nebo v seznamu formálních deklarací parametrů v definici funkce. Je viditelný pouze z místa jeho deklarace nebo definice až po konec bloku obsahujícího jeho deklaraci nebo definici. Jeho rozsah je omezen na tento blok a na jakékoli vnořené bloky v tomto bloku a končí složenou závorkou, která přidružený blok ukončí. Tyto identifikátory jsou někdy označovány jako „lokální proměnné“.
Rozsah prototypu funkce
Deklarátor nebo specifikátor typu pro identifikátor s rozsahem prototypu funkce se zobrazí v seznamu deklarací parametrů v prototypu funkce (ne součást deklarace funkce). Jeho rozsah končí na konci deklarátoru funkce.
Příslušné deklarace pro zpřístupnění proměnných v jiných zdrojových souborech jsou popsány v třídách úložiště. Proměnné a funkce deklarované na externí úrovni se specifikátorem static
třídy úložiště jsou však viditelné pouze v rámci zdrojového souboru, ve kterém jsou definovány. Všechny ostatní funkce jsou viditelné globálně.