GNU/Linux >> Tutoriels Linux >  >> Linux

Tutoriel de programmation Linux C Partie 10 - Portées variables

Si vous suivez notre série de didacticiels sur la programmation en C, vous devez connaître le concept de variables. Bien que nous ayons discuté des bases des variables, il y a un autre aspect important lié aux variables dont nous discuterons ici :portée des variables .

Commençons par le code d'échange de valeurs que nous avons utilisé dans l'un de nos précédents tutoriels :

#include 

void swap (int val1, int val2)
{
int temp =0;

temp =val1;
val1 =val2;
val2 =temp;

printf("\nLes valeurs échangées sont :%d et %d", val1,val2);

}

int main()
{
int a=0, b=0;

printf("Entrez deux entiers values\n");

scanf("%d %d",&a,&b);

printf("Les valeurs entrées sont :%d et %d", a,b);

échange(a,b);

retourne 0;
}

Ici, dans ce morceau de code, les variables 'val1' et 'val2' ont une portée locale, ce qui signifie qu'elles prennent vie lorsque la fonction 'swap' est appelée et qu'elles meurent dès que l'appel à 'swap' est terminé. Vous ne pouvez tout simplement pas accéder à 'val1' et 'val2' avant ou après l'appel à la fonction 'swap'. De même, la portée des variables 'a' et 'b' est également locale - locale à la fonction 'main'.

Notez que ces variables de portée locale sont également appelées variables automatiques.

Maintenant, alors que les variables à portée locale sont limitées au bloc dans lequel elles sont déclarées, il existe un autre type de variables dont la portée est globale. Comme son nom l'indique, les variables de portée globale peuvent être utilisées dans toutes les fonctions. Par exemple, la variable 'var' est une variable entière globale et peut être utilisée à la fois dans les fonctions 'main' et 'swap'.

#include 

int var ;

void swap (int val1, int val2)
{
int temp =0;

temp =val1;
val1 =val2;
val2 =temp;

printf("\nLes valeurs échangées sont :%d et % d", val1,val2);

}

int main()
{
int a=0, b=0;

printf("Entrez deux valeurs entières\n");

scanf("%d %d",&a,&b);

printf(" Les valeurs entrées sont :%d et %d", a,b);

swap(a,b);

return 0;
}

Par défaut, la valeur '0' est affectée aux variables globales. Mais ce n'est pas le cas avec les variables locales - vous devez leur attribuer une valeur lorsqu'elles sont définies, sinon elles contiennent une valeur nulle. Par exemple, dans le programme suivant :

#include 

int var;

int main()
{
int a;

printf("La variable locale 'a' contient actuellement : %d", a);

printf("\n La variable globale var contient actuellement : %d", var);


renvoie 0 ;
}

Il y a de fortes chances que vous obteniez une valeur non nulle pour 'a'. 'var' d'autre part, sera toujours égal à zéro au début.

Passons à autre chose, peut-il y avoir des variables globales et locales du même nom ? Eh bien, la réponse est oui. Ok, alors que va produire le morceau de code suivant :

#include 

int var =5 ;

int main()
{
int var =10 ;

printf("La variable locale 'a' contient actuellement :%d", var);

printf("\n La variable globale var contient actuellement :%d", var);


retourne 0;
}

Eh bien, la sortie sera '10' dans les deux cas. La raison étant que la variable locale 'var' remplacera la 'var' globale. Alors maintenant, la prochaine question logique est de savoir comment accéder à la "var" globale à l'intérieur de "main" dans ce cas ? Malheureusement, la réponse est non. En fait, vous devriez éviter de vous retrouver dans de telles situations lorsque vous travaillez avec le langage C.

Vient ensuite le concept de variables « externes ». En termes simples, en utilisant le mot-clé 'extern' avec n'importe quelle déclaration de variable, vous dites au compilateur que cette variable est déjà déclarée/définie ailleurs et que nous l'utilisons ici. Par exemple, dans le morceau de code suivant, le compilateur ne sait pas que 'var' existe lorsqu'il essaie de compiler l'instruction printf dans la fonction main.

#include 

int main()
{

printf("\n La variable globale var contient actuellement :%d", var);


renvoie 0;
}

int var =5;

C'est pourquoi vous obtenez une erreur comme celle-ci lors de la compilation :

main.c :Dans la fonction 'main' :
main.c:14:58 :erreur :'var' non déclarée (première utilisation dans cette fonction)
printf("\n Variable globale var contient actuellement :%d", var);
^
main.c:14:58 : remarque :chaque identifiant non déclaré n'est signalé qu'une seule fois pour chaque fonction dans laquelle il apparaît

Mais si vous déclarez 'var' comme extern ici, vous verrez que tout fonctionne bien. C'est parce que le compilateur finit par arriver à la déclaration 'var' d'origine.

#include 

int main()
{
extern int var;

printf("\n Variable globale var contient actuellement :%d", var);


return 0;
}

int var =5;

Et vous obtenez le bon résultat :

La variable globale var contient actuellement :5

C'est ainsi que fonctionne externe. Les variables externes sont souvent utilisées lorsque votre programme/projet est réparti sur plusieurs fichiers de code source et que vous souhaitez, par exemple, utiliser dans 'fichier1', une variable définie dans 'fichier2'.

Et enfin, comme nous discutons des portées des variables, il serait préférable que nous discutions également des variables « statiques ». Les variables statiques sont spéciales dans le sens où elles conservent leur valeur même après être sorties de la portée. Cela signifie qu'ils ne sont initialisés qu'une seule fois, c'est-à-dire la première fois.

compteur int statique 

Voici un morceau de code qui utilise une variable statique pour compter le nombre de fois qu'une fonction est appelée.

#include 

int swap (int val1, int val2)
{
static int counter =1 ;
int temp =0;

temp =val1;
val1 =val2;
val2 =temp;

printf("\n Fonction appelée %d fois\n" , compteur);
compteur++;
}

int main()
{
int a=9, b=4;

swap(a,b);
swap(a,b);
swap(a,b);

return 0;
}

Voici le résultat :

 Fonction appelée 1 fois 

Fonction appelée 2 fois

Fonction appelée 3 fois

Vous pouvez donc voir que la variable 'counter' a conservé sa valeur même après être sortie de la portée. Tout comme les variables globales, les variables statiques ont également une valeur par défaut de '0'.

Dans ce didacticiel, nous avons abordé plusieurs concepts importants, tous liés à la portée des variables dans le langage de programmation C. N'oubliez pas de créer vos propres programmes pour mieux comprendre la différence entre les variables externes, statiques, globales et locales. Et comme toujours, en cas de doute ou de question, laissez un commentaire ci-dessous.


Linux
  1. Tutoriel Kali Linux Burp Suite

  2. Tutoriel de programmation en C 4 - Variables et mémoire

  3. Tutoriel de programmation en C Partie 3 - Notions de base sur les variables

  4. Tutoriel de programmation en C Partie 5 - Variables de caractères

  5. Tutoriel de programmation Linux C Partie 9 :Chaînes

Exemples de commandes Linux curl – Partie 2

Exemples de commandes Linux curl – Partie 1

Tout est un fichier sous Linux - Partie 2

Tout est un fichier sous Linux - Partie 1

Installer le langage de programmation Racket sur Linux

Meilleures pratiques de codage pour la programmation système Linux en langage C - Partie 1