Logo de kxs.frCours d'informatique pour le lycée et la prépa

Portée des variables

Nous avons volontairement éludé la question de la portée des variables lors de l'étude des fonctions.

Bloc

Un bloc en C est délimité par des accolades. Il peut être associé à une structure de contrôle mais ce n'est pas nécessaire. Les blocs peuvent être imbriqués.

{
	// un bloc
	
	{
		// un bloc imbriqué
	}
}

if (i==0) {
	// un autre bloc
	
}

Variable locale

Une varaible déclarée dans un bloc n'existe que dans ce bloc. On dit que c'est une variable locale.

1) Compiler le programme ci-dessous et expliquer le problème.

int main() {
	{
		int a = 25;
	}
	a = 2;
	return 0;
}

Les arguments d'une fonction sont considérés comme des variables locales à l'intérieur de la fonction.

2) Quelle sera la sortie du programme suivant ? Justifier.

#include <stdio.h>

void incr(int a) {
	a = a + 1;
}

int main() {

	int a = 6;
	incr(a);
	printf("%d\n", a);
	return 0;
}

3) Comment transformer le programme précédent pour pouvoir effectivement utiliser la fonction incr ?

Variable globale

Une variable globale est une variable déclarée en dehors de tout bloc. Elle est alors accessible partout dans le code et peut être modifiée par n'importe quelle fonction.

#include <stdio.h>

int c = 1; // varaible globale

int main() {

	printf("%d\n", c); // 1
	c = c + 1; // On modifie la variable globale
	printf("%d\n", c); // 2
	return 0;
}

Si une variable locale a le même nom qu'une variable globale, elle "cache" la variable globale dans la fonction.

#include <stdio.h>

int c = 1; // varaible globale

int main() {
	int c = 10; // la variable locale "cache" la variable globale
	printf("%d\n", c); // 10
	c = c + 1; // On modifie la variable locale
	printf("%d\n", c); // 11
	return 0;
}

Il est fortement déconseillé d'utiliser des variables globales car il est très facile d'oublier où elles sont modifiées. Cela peut entraîner de nombreux bugs.