logo

mot-clé externe en C

Le mot-clé extern en C s'applique aux variables C (objets de données) et aux fonctions C. Fondamentalement, le mot-clé extern étend la visibilité des variables C et des fonctions C. C’est probablement la raison pour laquelle il a été nommé externe.

Bien que la plupart des gens comprennent probablement la différence entre la déclaration et la définition d’une variable ou d’une fonction, par souci d’exhaustivité, clarifions-la.



    La déclaration d'une variable ou d'une fonction déclare simplement que la variable ou la fonction existe quelque part dans le programme, mais que la mémoire ne leur est pas allouée. La déclaration d'une variable ou d'une fonction joue un rôle important : elle indique au programme quel sera son type. Dans le cas d fonction déclarations, il indique également au programme les arguments, leurs types de données, l'ordre de ces arguments et le type de retour de la fonction. Voilà donc toute une question de déclaration.
  • Venir au définition , lorsque nous définir une variable ou une fonction, en plus de tout ce que fait une déclaration, elle alloue également de la mémoire pour cette variable ou fonction. Par conséquent, nous pouvons considérer la définition comme un sur-ensemble de la déclaration (ou la déclaration comme un sous-ensemble de la définition).
  • Extern est un nom court pour externe.
  • La variable externe est utilisée lorsqu'un fichier particulier doit accéder à une variable à partir d'un autre fichier.

Syntaxe de externe en C

La syntaxe pour définir une variable externe en C consiste simplement à utiliser le mot-clé extern avant la déclaration de la variable.

extern data_type variable_name;>

Exemple de variable externe en C

C






réseau et types de réseau



#include> > extern> int> a;>// int var; ->déclaration et définition> >// extern int var; ->déclaration> > int> main()> {> >printf>(>'%d'>, a);> > >return> 0;> }>

>

>

Propriétés de la variable externe en C

  • Quand nous écrivons extern some_data_type some_variable_name; aucune mémoire n'est allouée. Seule la propriété de la variable est annoncée.
  • Plusieurs déclarations de variables externes sont autorisées dans le fichier. Ce n'est pas le cas des variables automatiques.
  • La variable externe dit au compilateur Sortez de mon champ d'application et vous trouverez la définition de la variable que j'ai déclarée.
  • Le compilateur estime que tout ce que dit cette variable externe est vrai et ne produit aucune erreur. Linker renvoie une erreur lorsqu'il trouve qu'aucune variable de ce type n'existe.
  • Lorsqu'une variable externe est initialisée, la mémoire correspondante est allouée et elle sera considérée comme définie.

Une variable ou une fonction peut être déclaré un certain nombre de fois, mais cela peut être défini juste une fois. (Rappelez-vous le principe de base selon lequel vous ne pouvez pas avoir deux emplacements de la même variable ou fonction).
Revenons maintenant au mot-clé externe. Tout d’abord, considérons l’utilisation de extern dans les fonctions. Il s'avère que lorsqu'une fonction est déclarée ou définie, le mot-clé extern est implicitement assumé. Quand on écrit.

int foo(int arg1, char arg2);>

Le compilateur le traite comme suit :

extern int foo(int arg1, char arg2);>

Puisque le mot-clé extern étend la visibilité de la fonction à l'ensemble du programme, la fonction peut être utilisée (appelée) n'importe où dans n'importe quel fichier de l'ensemble du programme, à condition que ces fichiers contiennent une déclaration de la fonction. (Avec la déclaration de la fonction en place, le compilateur sait que la définition de la fonction existe ailleurs et il continue et compile le fichier). C’est donc une question d’externe et de fonctions.
Considérons maintenant l'utilisation de extern avec des variables. Pour commencer, comment diriez-vous déclarer une variable sans définition il? Vous feriez quelque chose comme ceci :

extern int var;>

Ici, une variable de type entier appelée var a été déclarée (elle n'a pas encore été définie, donc pas d'allocation de mémoire pour var pour l'instant). Et nous pouvons faire cette déclaration autant de fois que nous le souhaitons.
Maintenant, comment feriez-vous définir var? Vous feriez ceci :

int var = 10;>

Dans cette ligne, une variable de type entier appelée var a été déclarée à la fois et défini (rappelez-vous que définition est le surensemble de déclaration ). Puisqu'il s'agit d'un définition , la mémoire pour var est également allouée. Maintenant, voici la surprise. Lorsque nous avons déclaré/défini une fonction, nous avons vu que le mot-clé extern était présent implicitement. Mais ce n’est pas le cas des variables. Si tel était le cas, la mémoire ne leur serait jamais allouée. Par conséquent, nous devons inclure explicitement le mot-clé extern lorsque nous voulons déclarer des variables sans les définir. De plus, comme le mot-clé extern étend la visibilité à l'ensemble du programme, en utilisant le mot-clé extern avec une variable, nous pouvons utiliser la variable n'importe où dans le programme à condition d'inclure sa déclaration, la variable est définie quelque part.
Essayons maintenant de comprendre externe avec des exemples.

Exemple 1:

c




int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

>

>

Ce programme se compile avec succès. var est défini (et déclaré implicitement) globalement.

Exemple 2 :

c


clé d'entrée



extern> int> var;> int> main(>void>)> {> >return> 0;> }>

>

>

Ce programme se compile avec succès. Ici, var est déclaré uniquement. Notez que var n'est jamais utilisé, donc aucun problème ne survient.

Exemple 3 :

c




git paiement

extern> int> var;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

>

>

Ce programme génère une erreur lors de la compilation (pendant la phase de liaison, plus d'informations ici ) car var est déclaré mais n'est défini nulle part. Essentiellement, la variable ne reçoit aucune mémoire. Et le programme essaie de changer la valeur à 10 d’une variable qui n’existe pas du tout.

Exemple 4 :

c




// As we are importing the file and henceforth the> // defination> #include 'somefile.h'> > // Declaring the same variable> extern> int> var;> >// int var;> >// It will throw compiler error as compiler will get> >// confused where the variable is defined> > int> main(>void>)> {> >var = 10;> >return> 0;> }> > // Now it will compile and run successfully>

>

>

commande arp-a

Sortir:

10>

Note: Voici un autre scénario : que se passe-t-il si nous ne déclarons pas avec extern dans l'extrait de code ci-dessus ?

En supposant que somefile.h contient la définition de var, ce programme sera compilé avec succès. Le mot-clé 'extern' est utilisé pour une variable lorsque nous déclarons la variable dans un fichier et la définissons dans un autre fichier. Mais ici, lorsque nous importons le même fichier dans le fichier où il est déclaré, une erreur du compilateur sera générée ici.

C'est parce que nous devons toujours utiliser le mot-clé extern dans le fichier où nous avons déclaré cette variable afin d'indiquer à notre compilateur que cette variable a été définie ailleurs que seul un nouvel espace mémoire ne sera pas alloué sinon cela créera un autre bloc mémoire. quelle utilisation du mot-clé 'extern' est inutile.

Exemple 5 :

c




extern> int> var = 0;> int> main(>void>)> {> >var = 10;> >return> 0;> }>

>

>

Pensez-vous que ce programme fonctionnera ? Eh bien, voici une autre surprise des standards C. Ils disent que… si une variable est uniquement déclarée et qu'un initialiseur est également fourni avec cette déclaration, alors la mémoire pour cette variable sera allouée – en d'autres termes, cette variable sera considérée comme définie. Par conséquent, conformément à la norme C, ce programme sera compilé avec succès et fonctionnera.
C'était donc un aperçu préliminaire du mot-clé extern en C.

En bref, nous pouvons dire :

  1. Une déclaration peut être effectuée plusieurs fois mais définie une seule fois.
  2. le mot-clé extern est utilisé pour étendre la visibilité des variables/fonctions.
  3. Étant donné que les fonctions sont visibles par défaut dans tout le programme, l'utilisation de extern n'est pas nécessaire dans les déclarations ou définitions de fonctions. Son utilisation est implicite.
  4. Lorsque extern est utilisé avec une variable, elle est uniquement déclarée et non définie.
  5. Par exception, lorsqu'une variable externe est déclarée avec initialisation, elle est également considérée comme la définition de la variable.