Maison  >  Article  >  développement back-end  >  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
Linda Hamiltonoriginal
2024-11-15 09:39:03255parcourir

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;
  // ...
}

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;
}

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

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!

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