Variable automatique - Automatic variable
En programmation informatique , une variable automatique est une variable locale qui est allouée et désallouée automatiquement lorsque le flux du programme entre et sort de la portée de la variable. La portée est le contexte lexical, en particulier la fonction ou le bloc dans lequel une variable est définie. Les données locales sont généralement (dans la plupart des langues) invisibles en dehors de la fonction ou du contexte lexical où elles sont définies. Les données locales sont également invisibles et inaccessibles à une fonction appelée , mais ne sont pas désallouées, revenant dans la portée lorsque le thread d'exécution revient à l'appelant.
Les variables locales automatiques s'appliquent principalement aux langages récursifs à portée lexicale . Les variables locales automatiques sont normalement allouées dans le cadre de pile de la procédure dans laquelle elles sont déclarées. Cela a été fait à l'origine pour obtenir la réintégration et permettre la récursivité , une considération qui s'applique toujours aujourd'hui. Le concept de variables automatiques dans les fonctions récursives (et imbriquées ) dans un langage à portée lexicale a été présenté à un public plus large avec ALGOL à la fin des années 1950, et popularisé par ses nombreux descendants.
Le terme variable locale est généralement synonyme de variable automatique, car ce sont la même chose dans de nombreux langages de programmation, mais local est plus général - la plupart des variables locales sont des variables locales automatiques, mais des variables locales statiques existent également, notamment en C. variable locale, l'allocation est statique (la durée de vie correspond à l'ensemble de l'exécution du programme), non automatique, mais elle n'est dans la portée que lors de l'exécution de la fonction.
Dans des langages de programmation spécifiques
C, C ++
(Appelées variables automatiques .)
Toutes les variables déclarées dans un bloc de code sont automatiques par défaut. Une variable automatique non initialisée a une valeur indéfinie jusqu'à ce qu'une valeur valide de son type lui soit attribuée.
En C, l'utilisation de la classe de stockage register est un indice pour le compilateur de mettre en cache la variable dans un registre de processeur. À part ne pas permettre à l'opérateur de référencement ( & ) d'être utilisé sur la variable ou l'un de ses sous-composants, le compilateur est libre d'ignorer l'indication.
En C ++, le constructeur de variables automatiques est appelé lorsque l'exécution atteint le lieu de déclaration. Le destructeur est appelé lorsqu'il atteint la fin du bloc de programme donné (les blocs de programme sont entourés de parenthèses). Cette fonctionnalité est souvent utilisée pour gérer l'allocation et la désallocation des ressources, comme l'ouverture puis la fermeture automatique de fichiers ou la libération de mémoire. Voir L' acquisition de ressources est l'initialisation (RAII). Notez que C ++ 11 a un nouveau auto spécificateur, qui est différent. Dans ce cas, le type de la variable est déduit .
Java
(Appelées variables locales .)
Similaire à C et C ++, mais il n'y a pas de mot clé auto ou register . Cependant, le compilateur Java n'autorisera pas l'utilisation d'une variable locale non explicitement initialisée et donnera une erreur de compilation (contrairement à C et C ++ où le compilateur ne donnera généralement qu'un avertissement). Le standard Java exige que chaque variable locale soit explicitement initialisée avant d'être utilisée. Cela diffère des variables d'instance, qui sont implicitement initialisées avec des valeurs par défaut (qui sont 0 pour les nombres et nul pour les objets).
Perl
(Appelées variables lexicales , my ou privées .)
En Perl, les variables locales sont déclarées à l'aide de l' my opérateur. Les scalaires non initialisés auront la valeur undef ; les tableaux ou les hachages non initialisés le seront () .
Perl a également un local opérateur qui ne crée pas de variables automatiques, donnant à la place aux variables globales (package) une valeur temporaire, qui est dynamiquement étendue au bloc englobant. Lorsque la portée de la variable est laissée, l'ancienne valeur est restaurée.
Voir également
- Syntaxe C # Spécificateurs de classe de stockage
- Tableau de longueur variable ( nouvelle fonctionnalité C99 )
- Pile d'appels
- Durée de vie de l'objet