Changes between Version 151 and Version 152 of Archi-1-TP9


Ignore:
Timestamp:
Nov 21, 2021, 11:09:24 AM (3 years ago)
Author:
franck
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Archi-1-TP9

    v151 v152  
    249249**Questions
    250250
    251 1. Quels sont les usages du mot clé `static` en C ?
    252 {{{#!protected ------------------------------------------------------------------------------------
    253 '''''''''''''''
     2511. Quels sont les usages du mot clé `static` en C ?  (c'est une directive que l'on donne au compilateur C)
     252{{{#!protected ------------------------------------------------------------------------------------
     253''
     254Le 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.
    2542551. 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 (celui-ci est dans la pile et il 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.
    256 '''''''''''''''
     2561. 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''
    257258}}}
    2582591. Pourquoi déclarer des fonctions ou des variables `extern` ?