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

Contenu supprimé Contenu ajouté
→‎Classe de stockage : reformulation
balise source
Ligne 22 :
 
Exemple :
 
<pre>#include <stdio.h>
<source lang="c">
<pre>#include <stdio.h>
 
void f(void)
Ligne 40 ⟶ 42 :
return 0;
}
</presource>
 
* ''Objet global et fonction'' : comme une variable globale est déjà persistante, le mot-clé <code>static</code> aura pour effet de limiter la visibilité de la variable ou de la fonction au seul fichier où elle est déclarée, toujours dans le but de garantir un certain niveau d'encapsulation.
Ligne 63 ⟶ 65 :
Aujourd'hui, 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.
 
<source lang="c">
<pre>#include <stdio.h>
 
int main(void)
Ligne 77 ⟶ 80 :
return 0
}
</presource>
 
=== Classe 'auto' ===
Ligne 94 ⟶ 97 :
La classe <code>const</code> ne déclare pas une vraie constante, mais indique au compilateur que la valeur de la variable ne doit pas changer. Il est donc impératif d'assigner une valeur à la déclaration de la variable, sans quoi toute tentative de modification ultérieure entrainera une erreur de la part du compilateur :
 
<source lang="c">
<pre>
const int i = 0;
 
i = 1; /* erreur*/
</presource>
 
En fait, le mot-clé <code>const</code> est beaucoup plus utilisé avec des pointeurs. Pour indiquer qu'on ne modifie pas l'objet pointé, il est bon de spécificier le mot-clé <code>const</code> :
 
<source lang="c">
<pre>
void fonction( const char * pointeur )
{
Ligne 108 ⟶ 111 :
pointeur = "Nouvelle chaine de caractères";
}
</presource>
 
Dans cet exemple, on indique que l'objet pointé ne sera pas modifié. Pour indiquer que la valeur elle-même du pointeur est constante, il faut déclarer la variable de la sorte :
 
<pre>
<source lang="c">
char * const pointeur = "Salut tout le monde !";
 
pointeur = "Hello world !"; /* erreur*/
</presource>
 
Encore plus subtil, on peut mélanger les deux :
 
<pre>
<source lang="c">
const char * const pointeur = "Salut tout le monde !";
 
pointeur = "Hello world !"; /* erreur*/
pointeur[0] = 0; /* erreur*/
</presource>
 
Cette dernière forme est néanmoins rarement usitée. En outre ce dernier exemple présente un autre problème qui est la modification d'une chaine de caractères « en dur », qui sont la plupart du temps placées dans la section lecture seule du programme et donc inaltérables.