Maison >développement back-end >C++ >Quand et comment les variables statiques au niveau de la fonction en C sont-elles allouées et initialisées ?

Quand et comment les variables statiques au niveau de la fonction en C sont-elles allouées et initialisées ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-18 02:12:02258parcourir

When and How Are Function-Level Static Variables in C   Allocated and Initialized?

Allocation et initialisation de variables statiques au niveau de la fonction

Les variables statiques au niveau de la fonction en C sont un type de données qui persistent tout au long de la vie du programme. Contrairement aux variables globales, elles ne sont pas déclarées au niveau global, mais plutôt dans le cadre d'une fonction. Cela soulève des questions sur le moment où ces variables sont allouées et initialisées.

Contrairement aux variables déclarées globalement, qui sont allouées et initialisées au début du programme, les variables statiques au niveau de la fonction sont allouées et initialisées lors du premier appel. à la fonction dans laquelle ils sont définis. Cela est évident dans l'exemple de code fourni :

void doSomething() {
  static bool globalish = true;
}

La variable statique globalish est initialisée lors du premier appel à la fonction doSomething. Avant cela, sa valeur n'est pas définie. Ce résultat a été confirmé par un programme de test qui imprimait des événements liés à la création et à la destruction d'objets instanciés dans différentes portées.

Ce comportement est attribué au fait que les variables statiques sont stockées dans une zone statique de mémoire qui est partagé entre tous les appels à la même fonction. Ainsi, la valeur initiale reste persistante d'un appel à l'autre, à moins qu'elle ne soit explicitement modifiée dans la fonction.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn