« Programmation C/Classe de stockage » : différence entre les versions

Contenu supprimé Contenu ajouté
Ligne 6 :
* <code>const</code> : pour définir une variable dont la valeur ne devrait jamais changer.
* <code>volatile</code> : le contraire de <code>const</code> : une variable pouvant être modifiée notamment par une source externe indépendante du programme.
* <code>auto</code> : auvaleur compilateurpar dedéfaut, choisirmot laclé plus appropriée. Valeur par défautobsolète.
* <code>register</code> : demande au compilateur de faire tout son possible pour utiliser un registre processeur pour cette variable.
* <code>static</code> : rend une définition de variable persistante.
* <code>extern</code> : permet de récupérerdéclare une définition de variable d'unsans autrela fichierdéfinir.
 
===Classe 'const'===
La classe <code>const</code> ne définitdéclare pas une vraie constante, mais indique plutôt au compilateur que la valeur de la variable ne devrait jamais changer. Il est donc impératif d'assigner une valeur à la déclaration de la variable, sans quoi toute tentative de modification ultérieure pourra générer un avertissement du compilateur :
 
<pre>
Ligne 60 :
Indique que la variable devrait être stockée dans un registre du processeur. Les registres du processeur sont forcément limités, aussi bien en nombre qu'en taille. Inutile de déclarer une structure entière ou un tableau avec le mot clé <code>register</code>.
 
Qui plus est, les variables registres sont forcément locales à des fonctions. On ne peut pas déclarerdéfinir une variable globale en tant que registre.
 
Ce mot-clé est déconseillé sauf pour des cas particuliers, les compilateurs modernes sachant généralement mieux que le programmeur comment optimiser et quelles variables placer dans les registres.
 
<pre>
voidint main() {
register short i,j;
for (i=1;i<1000;++i)
Ligne 82 :
===Classe 'extern'===
 
<code>extern</code> permet de récupérerdéclarer une variable sans la définir. C'est utile lorsqu'elle est définie dans un autre fichier. Toutes variables globales, autres que celles déclarées <code>static</code>, sont accessibles avec ce mot-clé.
 
À noter que le 'extern' est implicite lorsqu'on déclare ou donne le prototype d'une fonction, pas la peine de le rajouter.
À noter que, héritage de l'ANSI C89 qui ne disposait pas encore du prototypage, '''toutes''' les fonctions autres que <code>static</code> sont directement accessibles dans tous les modules. Il est néanmoins plus que conseillé de s'assurer que chaque fonction utilisée ait son prototype déclaré. Dans le cas du prototypage, le mot clé <code>extern</code> est implicite : pas la peine de le rajouter.