On peut faire les critiques suivantes :
- auto ne peut servir que pour les variables locales, mais si
on ne le met pas, il est pris par défaut. Conclusion : il ne sert à rien.
- static sert à deux choses très différentes : il permet de
rendre statique une variable locale, et c'est une utilisation légitime,
mais il sert aussi à cacher à l'éditeur de liens les variables globales.
On rappelle que par défaut (c'est à dire sans le mot-clé static,)
les variables globales sont connues de l'éditeur de liens.
Il aurait mieux valu faire l'inverse : que par défaut les
variables globales soient cachées à l'éditeur de liens, et avoir un
mot-clé (par exemple export), pour les lui faire connaître.
- register a été introduit dans le langage pour optimiser les
programmes.
Avec les techniques modernes de compilation, il ne sert à rien car le
compilateur est mieux à même que le programmeur d'allouer les registres
de la machine de manière efficace.
Ne pas oublier en outre, qu'il y a une contrainte attachée à l'utilisation
de variables register : l'impossibilité de leur appliquer l'opérateur
&
.
- extern et typedef n'ont rien à voir avec les classes
de mémoire : ils ne sont là que pour des raisons syntaxiques.
Matthieu Moy
2017-02-08