La portée d'une variable (scope en anglais) correspond à la partie du code pendant laquelle cette variable peut être utilisée. On distingue 3 types de variables :
La portée d'une variable correspond aussi à la zone du code où la mémoire est allouée (réservée) pour cette variable :
Pour limiter l'empreinte du programme sur l'utilisation de la mémoire, on essaie toujours de réduire la portée des variables afin d'utiliser le moins d'espace mémoire possible.
Analysons l'exemple suivant :
void fct(void);
int main(void) {
int i=5;
fct ();
return 0;
}
void fct(void) {
printf ("%d\n", i);
}
La variable i
est définie dans la fonction main()
, sa portée est limitée au
programme principal. On dit que i
est une variable locale. Elle ne peut pas
être utilisée en dehors du main()
. Par conséquent, elle ne peut pas être utilisée
dans la fonction fct()
. Lors de la compilation, l'erreur suivante apparaît :
main.c:14:17: error: use of undeclared identifier 'i' printf ("%d", i); ^ 1 error generated. compiler exit status 1
Cette erreur indique que la variable i
n'est pas déclarée dans la fonction,
puisqu'elle est locale au programme principal.
Corriger l'exemple ci-dessus en ajoutant un argument à la fonction fct()
pour que le programme compile sans erreur. Tester le programme :
n
: void fct (int n);
i
: void fct (int i);
Écrire une fonction void incremente(int n);
qui reçoit en paramètre un entier n
et
qui exécute la ligne suivante : n=n+1;
.
Testez votre fonction avec le programme principal suivant :
int main(void) {
int n=3;
printf ("Avant, n=%d\n", n);
incremente(n);
printf ("Après, n=%d\n", n);
return 0;
}
Écrire une fonction int incremente(int n);
qui reçoit en paramètre un entier n
et
qui retourne n
+1.
Testez votre fonction avec le programme principal suivant :
int main(void) {
int n=3;
printf ("Avant, n=%d\n", n);
incremente(n);
printf ("Hum... n=%d\n", n);
n = incremente(n);
printf ("Après, n=%d\n", n);
return 0;
}
En programmation, la portée d'une variable ...
Considérons la fonction suivante :
void fct(int i);
La portée des variables ...
Qu'affiche le programme suivant :
#include <stdio.h>
void fct(n);
int main(void) {
int n=7;
fct(n);
printf ("n = %d",n);
return 0;
}
void fct(n) {
n=n-1;
}
n
.
Essaie encore ...
Qu'affiche le programme suivant :
#include <stdio.h>
void fct(void);
int main(void) {
int n=7;
fct();
printf ("n = %d",n);
return 0;
}
void fct(void) {
n=n-1;
}
main()
et inconnue dans la fonction fct()
.
Essaie encore ...
Qu'affiche le programme suivant :
#include <stdio.h>
int fct(int n);
int main(void) {
int n=7;
fct(n);
printf ("n = %d",n);
return 0;
}
int fct(int n) {
return n-1;
}
fct()
, mais elle est inutilisée par le programme principal.
Essaie encore ...
Qu'affiche le programme suivant :
#include <stdio.h>
int fct(int n);
int main(void) {
int n=7;
n=fct(n);
printf ("n = %d",n);
return 0;
}
int fct(int n) {
return n-1;
}
fct()
et exploitée dans le programme principal.
Essaie encore ...
Qu'affiche le programme suivant :
#include <stdio.h>
int fct(int n);
int main(void) {
int x=7;
x=fct(x);
printf ("x = %d",x);
return 0;
}
int fct(int n) {
return n-1;
}
n
est copiée dans x quand le mot-clé return
est exécuté.
Essaie encore ...
Qu'affiche le programme suivant :
#include <stdio.h>
int fct(int n);
int main(void) {
int n;
fct(n);
printf ("n = %d",n);
return 0;
}
int fct(int n) {
return n-1;
}
n
. La variable du main()
n'est pas affectée.
Essaie encore ...