Les variables

La déclaration de variables locales en C/C++ est la même qu’en Java. En plus des variables locales, C/C++ permet de déclarer des variables globales. Il suffit de déclarer ces variables en dehors des procédures. Une variable globale est accessible par toutes les procédures de tous les fichiers .c ou .cpp de votre application.

Vous pouvez limiter la portée des variables globales en utilisant le modificateur static (par exemple static int counter). Dans ce cas, la variable n’est globale qu’au fichier dans lequel elle est déclarée et non au programme tout entier. Les variables globales doivent être évitées le plus possible, et si vous en avez vraiment besoin, limitez alors leur portée avec le modificateur static.

Les variables locales peuvent aussi être déclarées avec le modificateur static. Dans ce cas, la variable est en fait globale, mais elle n’est visible que dans la procédure dans laquelle elle est déclarée.

Considérons par exemple la fonction NextId ci-dessous :

int NextId() {
    static int id = 0;
    return id++;
}

Cette fonction retourne 0 au premier appel, puis 1 au deuxième, 2 au troisième … La variable est globale et conserve sa valeur entre les appels.

Une variable en C/C++ peut aussi avoir le modificateur volatile et signifie au compilateur qu’il doit déclencher certaines optimisations, car cette variable peut être modifiée par d’autres parties. Nous verrons dans les TPs l’importance de ce modificateur dans le contexte des systèmes embarqués.

Si en C on doit déclarer le type de chaque variable explicitement, C++ est capable de faire de l’inférence de type. Utilisez pour cela le type auto :

auto myVar = 42;

Le compilateur choisira un type compatible avec l’assignation. Ce mécanisme peut être pratique, mais un type explicite, avec une taille précise, est souvent une meilleure option.