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

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

Linda Hamilton
Libérer: 2024-11-15 09:39:03
original
335 Les gens l'ont consulté

When are function-level static variables in C   initialized?

Initialisation des variables statiques au niveau de la fonction

En C, les variables statiques au niveau de la fonction sont un mécanisme utile pour maintenir l'état au sein des fonctions. Cependant, leur processus d'allocation et d'initialisation soulève parfois des questions.

Contrairement aux variables déclarées globalement, qui sont allouées et initialisées au démarrage du programme, les variables statiques au niveau de la fonction ne sont pas allouées ou initialisées jusqu'au premier appel de la fonction. .

Considérez l'extrait de code suivant :

void doSomething()
{
  static bool globalish = true;
  // ...
}
Copier après la connexion

Dans cet exemple, la variable statique globalish ne sera pas allouée ou initialisée jusqu'à ce que la fonction doSomething() soit invoquée. Pour démontrer cela, analysons un programme de test :

#include <iostream>

class test
{
public:
  test(const char *name) : _name(name)
  {
    std::cout << _name << " created" << std::endl;
  }

  ~test()
  {
    std::cout << _name << " destroyed" << std::endl;
  }

  std::string _name;
};

test t("global variable");

void f()
{
  static test t("static variable");
  test t2("Local variable");

  std::cout << "Function executed" << std::endl;
}

int main()
{
  test t("local to main");

  std::cout << "Program start" << std::endl;

  f();

  std::cout << "Program end" << std::endl;
  return 0;
}
Copier après la connexion

Lors de la compilation et de l'exécution, la sortie révèle que le constructeur de la variable statique t dans la fonction f() n'est pas appelé tant que la fonction n'est pas invoquée pour le première fois :

global variable created
local to main created
Program start
static variable created
Local variable created
Function executed
Local variable destroyed
Program end
local to main destroyed
static variable destroyed
global variable destroyed
Copier après la connexion

Par conséquent, les variables statiques au niveau de la fonction ne sont pas allouées ou initialisées au démarrage du programme, mais plutôt au premier appel de la fonction dans laquelle elles sont définies.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal