Tout nom doit être déclaré avant d'être utilisé. La portée d'une déclaration d'un nom est la région du programme dans laquelle ce nom est connu. Elle est déterminée par les règles suivantes :
int n = 3; // n global int f(int x) { // x paramètre int n=2, x=10; // n et x locaux return x+n ; }
la déclaration locale de n masque la déclaration globale de n et la déclaration locale de x masque la déclaration du paramètre n : la valeur de f(0) est 12. Généralement, le compilateur émet un warning, ce qui signale à l'utilisateur la possibilité d'une erreur ; le masquage d'un nom est à éviter.
On voit donc qu'un même nom peut apparaître à plusieurs endroits dans un programme : on parle des occurrences de ce nom. Il y a des occurrences d'utilisation et des occurrences de déclaration. Par exemple, dans
int n = 4;
l'occurrence de n est une déclaration (c'est même une définition), tandis que dans
return x+n;
l'occurrence de n est une utilisation. Quand on voit une occurrence d'utilisation d'un nom, il faut pouvoir remonter à sa déclaration.