Maison > Article > développement back-end > Quand les variables statiques au niveau de la fonction en C sont-elles initialisées ?
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!