Changes between Version 151 and Version 152 of Archi-1-TP9
- Timestamp:
- Nov 21, 2021, 11:09:24 AM (3 years ago)
Legend:
- Unmodified
- Added
- Removed
- Modified
-
Archi-1-TP9
v151 v152 249 249 **Questions 250 250 251 1. Quels sont les usages du mot clé `static` en C ? 252 {{{#!protected ------------------------------------------------------------------------------------ 253 ''''''''''''''' 251 1. Quels sont les usages du mot clé `static` en C ? (c'est une directive que l'on donne au compilateur C) 252 {{{#!protected ------------------------------------------------------------------------------------ 253 '' 254 Le cours 9 n'en parle pas, mais dans le code vous trouverez cette directive un peu partout. Il y a deux usages, on a déjà parlé du premier, mais pas encore du second. 254 255 1. Déclarer `static` une variable globale ou une fonction en faisant précéder leur définition du mot clé `static` permet de limiter la visibilité de cette variable ou de cette fonction au seul fichier de déclaration. Notez que par défaut les variables et les fonctions du C ne sont pas `static`, il faut le demander explicitement. C'est exactement l'inverse en assembleur où tout label est implicitement `static` ; il faut demander avec la directive `.globl` de le rendre visible. 255 1. Déclarer `static` une variable locale permet de la rendre persistante, c'est-à-dire qu'elle conserve sa valeur entre deux appels. Cette variable locale n'est pas dans le contexte de la fonction (c elui-ci est dans la pile et ilest libéré en sortie de fonction). Une variable locale `static` est en fait allouée comme une variable globale mais son usage est limité à la seule fonction où elle est définie.256 '' '''''''''''''256 1. Déclarer `static` une variable locale permet de la rendre persistante, c'est-à-dire qu'elle conserve sa valeur entre deux appels. Cette variable locale n'est pas dans le contexte de la fonction (c'est-à-dire qu'elle n'est pas dans la pile parce que le contexte est libéré en sortie de fonction). Une variable locale `static` est en fait allouée comme une variable globale mais son usage est limité à la seule fonction où elle est définie. 257 '' 257 258 }}} 258 259 1. Pourquoi déclarer des fonctions ou des variables `extern` ?