Bonjour à tous ! J'ai un petit souci : j'aimerais savoir comment utiliser la fonction "static". Je l'ai lu dans un PDF mais j'ai pas vraiment compris comment ça marche…![]()
Bonjour à tous ! J'ai un petit souci : j'aimerais savoir comment utiliser la fonction "static". Je l'ai lu dans un PDF mais j'ai pas vraiment compris comment ça marche…![]()
static n'est pas une fonction mais un mot-clef du langage, qui peut qualifier fonctions ou variables lorsqu'utilisé dans leurs déclarations.
Dans quel contexte était-il utilisé ? Peux-tu nous montrer le morceau de code que tu n'as pas saisi ?
Bonjour,
en gros tu peux retrouver le mot-clé static à 3 endroits :
- lors de la déclaration d'une variable
pour comprendre son action il faut déjà savoir ce que sont la durée de vie et la visibilité d'une variable. La durée de vie d'une variable est l'intervalle de temps pendant lequel la variable existe en mémoire, la visibilité indique les endroits à partir desquels tu peux accéder à cette variable. Déclarer une variable statique va lui donner une durée de vie égale à celle du programme même si elle est déclarée localement dans une fonction, et, si elle est n'est pas locale à une fonction, restreindre sa visibilité au source dans lequel elle est déclarée. Il est à noter que les variables statiques sont par défaut initialisées, elles sont en général placées dans une section particulière et ne sont donc ni allouées sur la pile ni sur le tas. Tu peux essayer par exemple d'appeler plusieurs fois cette fontion pour en voir les effets :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 int get_id(void) { static int id=0; return id++; }- lors de la déclaration d'une fonction
une fonction marquée static réduit la visibilité de la fonction au source dans lequel elle est déclarée. Utilisé avec inline on obtient une fonction «qui n'existera pas en tant que telle». Si elle est appelée, alors le compilateur va directement insérer son code au lieu de l'appeler. C'est comme une macro mais en mieux (bien souvent). C'est aussi un des rares cas où il est intéressant de placer du code dans un header. Par exemple :
remplacera avantageusement une macro du même nom et offrira entre autre une vérification de type, évitera les effets de bords indésirables d'évaluation multiple des paramètres, …
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 static inline int min(int a, int b) { return a<b?a:b; }- lors ce la déclaration d'un paramètre de type tableau
le mot clé se place alors entre les crochets avant la taille. C'est un contrat que tu passes avec le compilateur : tu t'engages à ne fournir à cette fonction que des paramètres ayant au moins le nombre indiqué d'éléments. Par exemple avec
tu t'engages à toujours appeler foo avec une chaîne ayant pour taille minimum la valeur du premier paramètre. Cela permet au compilateur de faire des hypothèses pour mieux optimiser le code produit.
Code : Sélectionner tout - Visualiser dans une fenêtre à part void foo(size_t size, const char string[static size]);
Partager