Langage C déclaration faite à l’extérieur d’un bloc d’instructions

Notez que la réservation et l’initialisation prennent un peu de temps à chaque entrée du bloc. Mais ne présumez jamais retrouver une valeur sur la pile, même si votre programme n’a pas utilisé la pile entre temps (surtout sur système multitâche ou avec mémoire virtuelle).

Une déclaration a toujours la structure suivante :
[classe] type liste_variables [initialisateur]; (entre [] facultatif)
Le type peut être simple (char, int, float,…) ou composé (tableaux, structures…, voir plus loin).
La liste_variables est la liste des noms des variables désirées, séparées par des virgules s’il y en a plusieurs.
Chaque nom de la liste peut être précédés d’une *, ceci spécifiant un pointeur.
L’initialisateur est un signe =, suivi de la valeur à donner à la variable lors de sa création (à chaque entrée du bloc par exemple). La valeur peut être une constante, mais aussi une expression avec des constantes voire des variables (visibles, déjà initialisées).
La classe peut être :
• auto (ou omise, c’est la classe par défaut pour les variables locales) : la variable est créée à l’entrée du bloc (dans la pile) et libérée automatiquement à sa sortie (comme expliqué plus haut).
• register : la variable est créée, possède la même durée de vie et visibilité qu’une classe auto, mais sera placée dans un registre du (micro)processeur. Elle sera donc d’un accès très rapide. Si tous les registres sont déjà utilisés, la variable sera de classe auto. Mais le compilateur peut avoir besoin des registres pour ses besoins internes ou pour les fonctions des bibliothèques, s’il n’en reste plus le gain peut se transformer en perte. De plus les compilateurs optimisés choisissent de mettre en registre des variables auto, et souvent de manière plus pertinente que vous. Mais le compilateur ne sait pas à l’avance quelles fonctions seront appelées le plus souvent, dans ce cas une optimisation manuelle peut être utile, par exemples dans le cas des éléments finis où une même instruction peut être répétée des milliards de fois.
• static : la variable ne sera pas dans la pile mais dans la même zone que le code machine du programme. Sa durée de vie sera donc celle du programme. Elle ne sera initialisée qu’une fois, au début du programme, et restera toujours réservée. En retournant dans un bloc, elle possédera donc encore la valeur qu’elle avait à la précédente sortie. Sa visibilité reste la même (limitée au bloc). Une variable statique permet en général un gain en temps d’exécution contre une perte en place mémoire.

LIRE AUSSI :  Cours initiation du langage C organigrammes et algorithmes

Déclarations globales
Une déclaration faite à l’extérieur d’un bloc d’instructions (en général en début du fichier) est dite globale. La variable est stockée en mémoire statique, sa durée de vie est celle du programme. Elle est visible de sa déclaration jusqu’à la fin du fichier. Elle sera initialisée une fois, à l’entrée du programme (initialisée à 0 si pas d’autre précision). Le format d’une déclaration globale est identique à une déclaration locale, seules les classes varient.
Par défaut, la variable est publique, c’est à dire qu’elle pourra même être visible dans des fichiers compilés séparément (et reliés au link).
La classe static, par contre, rend la visibilité de la variable limitée au fichier actuel.
La classe extern permet de déclarer une variable d’un autre fichier (et donc ne pas lui réserver de mémoire ici, mais la rendre visible). Elle ne doit pas être initialisée ici. Une variable commune à plusieurs fichiers devra donc être déclarée sans classe dans un fichier (et y être initialisée), extern dans les autres.
Toute fonction, pour pouvoir être utilisée, doit également être déclarée. Une déclaration de fonction ne peut être que globale, et connue des autres fonctions. Une déclaration de fonction est appelée « prototype ». Le prototype est de la forme :
[classe] type_retourné nom_fonction(liste_arguments);
elle est donc identique à l’entête de la fonction mais :
− est terminée par un ; comme toute déclaration
− les noms des arguments n’ont pas besoin d’être les mêmes, il peuvent même être omis (les types des arguments doivent être identiques).
Sans précision de classe, la fonction est publique. Sinon, la classe peut être extern (c’est ce que l’on trouve dans les fichiers .H) ou static (visibilité limitée au fichier). Le prototype peut être utilisé pour utiliser une fonction du même fichier, mais avant de l’avoir définie (par exemple si l’on veut main en début du fichier). En général, lorsque l’on crée une bibliothèque (groupe de fonctions et variables regroupées dans un fichier compilé séparément), on prépare un fichier regroupant toutes les déclarations extern, noté .H, qui pourra être inclus dans tout fichier utilisant la bibliothèque.

Si le lien ne fonctionne pas correctement, veuillez nous contacter (mentionner le lien dans votre message)
Le langage C (336 KO) (Cours PDF)
Le langage C

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *