Domenii de vizibilitate în C (Scope)
Am un exemplu simplu care arată domeniile de vizibilitate a variabilelor în embedded C:
int x; /* file scope */
void f (int y); /* y has function prototype scope */
void f (int y) /* y has block scope */
{
int z; /* block scope */
{
int x; /* block scope, different object than outer x */
int z; /* block scope */
} /* scope of x and z end here */
} /* scope of y and z and here */
Variabilele
O variabilă declarată în interiorul unui bloc de acolade este vizibilă doar în acel bloc şi în toate blocurile de cod din interiorul blocului unde a fost declarată variabila.
O variabilă declarată în interiorul unei funcţii este vizibilă doar în aceea funcţie dar în toate blocurile de cod din acea funcţie.
O variabilă declarată în interiorul unui fişier C este vizibilă doar în acel fişier dar în toate funcţiile şi blocurile de cod din acel fişier.
O variabilă declarată în interiorul unei funcţii este vizibilă doar în aceea funcţie dar în toate blocurile de cod din acea funcţie.
O variabilă declarată în interiorul unui fişier C este vizibilă doar în acel fişier dar în toate funcţiile şi blocurile de cod din acel fişier.
MISRA
Există şi o regulă MISRA care legiferează denumirea variabilelor :
"MISRA-C:2004, Rule 5.2: Identifiers in an inner scope shall not use the same name as
an identifier in an outer scope, and therefore hide that identifier."