FriconiX
Des milliers de pictogrammes gratuits dessinés avec amour!

Cours 8.5. Portée des variables

Définition

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.

Exemple

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 apparait :

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.

Exercices

Exercice 1

Corriger l'exemple ci-dessus en ajoutant un argument à la fonction fct() pour que le programme compile sans erreur. Tester le programme :

Exercice 2

É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;
}

Exercice 3

É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;
}

Quiz

En programmation, la portée d'une variable ...

Vérifier Bravo ! Essaie encore ...

Considérons la fonction suivante :

void fct(int i);
Vérifier Bravo ! Essaie encore ...

La portée des variables ...

Vérifier Bravo ! Essaie encore ...

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;
}
Vérifier Bravo ! 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;
}
Vérifier Bravo ! 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;
}
Vérifier Bravo ! 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;
}
Vérifier Bravo ! 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;
}
Vérifier Bravo ! Essaie encore ...

Voir aussi


Dernière mise à jour : 07/11/2020