Retour de la statique locale en C

En langage C, étendue de la variable static dans le fichier. Dans le code suivant, la fonction retourne la variable statique.

 int fun(){ static int i = 10; return i; } int main() { printf("%d\n", fun()); return 0; } 

Et sortie imprimée 10.

Donc, est-ce que retourner un comportement statique local en C non défini ou bien défini?

Vous semblez avoir manqué toute la logique d’une déclaration de return .

En fait, dans cet extrait de code, vous retournez la valeur (de la variable). Par conséquent, sans le stockage static , le code est correct.

Si vous souhaitez renvoyer l’ adresse d’une variable, celle-ci doit durer plus longtemps que la scope de la fonction. Dans ce cas, vous devez disposer d’une variable avec stockage static , de sorte que l’adresse renvoyée soit valide (afin qu’elle puisse être utilisée de manière significative à partir de la fonction appelant), même en dehors de la fonction dans laquelle elle est définie. Donc soit

  • vous utilisez un pointeur renvoyé par des fonctions d’allocateur, comme malloc() ou family
  • utilisez l’adresse d’une variable définie avec static classe de stockage static .