158 votes

Variable statique à l'intérieur d'une fonction en C

Qu'est-ce qui sera imprimé ? 6 6 ou 6 7 ? Et pourquoi?

 void foo()
{
    static int x = 5;
    x++;
    printf("%d", x);
}

int main()
{
    foo();
    foo();
    return 0;
}

80voto

Nitesh Borad Points 242

Sortie : 6 7

Raison : la variable statique n'est initialisée qu'une seule fois (contrairement à la variable automatique) et une définition supplémentaire de la variable statique serait contournée pendant l'exécution. Et s'il n'est pas initialisé manuellement, il est initialisé par la valeur 0 automatiquement. Donc,

 void foo() {
    static int x = 5; // assigns value of 5 only once
    x++;
    printf("%d", x);
}

int main() {
    foo(); // x = 6
    foo(); // x = 7
    return 0;
}

11voto

Chaim Geretz Points 568

6 7

le compilateur fait en sorte que l'initialisation de la variable statique ne se produise pas à chaque fois que la fonction est entrée

5voto

Donotalo Points 5962

Une variable statique à l'intérieur d'une fonction a une durée de vie tant que votre programme s'exécute. Il ne sera pas alloué à chaque fois que votre fonction est appelée et désallouée lorsque votre fonction revient.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X