« Langage C/Variables » : différence entre les versions

Contenu supprimé Contenu ajouté
Mewtow (discussion | contributions)
m Ajout sur les types et identificateurs
Mewtow (discussion | contributions)
m fin du chapitre
Ligne 276 :
 
Je tiens à préciser que volatile n’est toutefois utile que pour certaines variables, potentiellement accessibles par autre chose que le programme qui l’a déclaré (un autre programme, un périphérique, etc.), et qui peuvent être modifiées n’importe quand. Ce genre de cas est très rare, et n’arrive que quand on doit travailler avec du matériel très spécial, ou qu’on veut créer des programmes très compliqués, qui manipulent directement le matériel, comme des pilotes de périphériques des systèmes d’exploitation, etc. Autant être franc, vous n’aurez certainement jamais à utiliser volatile dans un programme, tellement ce genre de cas est rare et particulier. Mais un peu de culture générale ne fait jamais de mal, et peut être utile au cas où.
 
== Déclaration et initialisation ==
 
Maintenant que nous savons toutes les bases, entrainons-nous à déclarer quelques variables :
 
<source lang="c">
double taille;
volatile unsigned int age;
char caractere;
short petite_valeur;
</source>
 
On peut aussi déclarer plusieurs variables de même type sur une même ligne, en séparant leurs noms par une virgule :
 
<source lang="c">
int age, taille, nombre;
</source>
 
Je vous conseille d’utiliser les deux méthodes de déclaration que vous venez de voir (multiligne et monoligne) simultanément, comme ceci :
 
<source lang="c">
int annee, mois, jour;
int age, taille;
int x, y, z;
</source>
 
J’ai regroupé les déclarations de variables selon les « rapports » qu’ils ont entre eux.
 
Je vous présente du code, des explications, encore du code puis encore des explications. Mais durant tout ce temps, vous avez peut-être essayé de compiler ces codes. Êtes-vous surpris de voir qu’il ne se passe rien ? Les plus malins d’entre vous auront peut-être compris qu’il ne se passe rien en apparence. Je dis bien en apparence car, en réalité, l’ordinateur fait parfaitement son travail : il va réserver des cases mémoire pour nos variables. Votre ordinateur fait donc tout ce que vous lui demandez de faire : déclarer des variables, et non modifier leurs valeurs et encore moins les afficher !
 
OK, notre case mémoire est réservée pour notre variable, mais quelle est la valeur qu’il y a dedans (quel est l’objet dans le tiroir) ?
 
Eh bien en fait, c’est indéterminé. Il peut y avoir n’importe quelle valeur (n’importe quel objet dans le tiroir).
Initialisation
 
Mais heureusement, on peut donner une valeur à une variable dès sa déclaration. On dit aussi qu’on initialise notre variable. Ainsi on est sûr que la case mémoire ne contient pas n’importe quoi.
 
Pour initialiser une variable, on procède ainsi si c’est une variable destinée à contenir une valeur numérique :
 
<source lang="c">
type identificateur = valeur;
</source>
 
Ou comme ceci si c’est un caractère :
 
<source lang="c">
char identificateur = 'lettre';
</source>
 
Voici quelques exemples de déclarations de variables :
 
<source lang="c">
volatile unsigned int age = 25;
short petite_valeur = 1;
const long abc = 3141596;
char caractere = 'h';
</source>
 
Petite note sur const : il faut donner une valeur à la variable dès la déclaration puisque l’on ne pourra plus la modifier après !
 
Petite précision : la norme C89 réclame que l’on sépare les déclarations du reste du code : on ne peut pas déclarer une variable où l’on veut. Si l’on veut vraiment suivre la norme, on déclare d’abord toutes les variables en début de bloc (c’est-à-dire après une accolade ouvrante) et ensuite vient le reste des instructions.
Initialisation des nombres flottants
 
Je tiens à retenir votre attention sur la manière d’initialiser les variables flottantes (soit donc de type float ou double).
 
En fait, ces variables sont faites pour contenir des nombres à virgule. À l’initialisation, il ne faut donc pas se contenter de donner sa valeur, il faut aussi mettre la « virgule ». Sauf que l’on ne met pas une virgule : on met un point.
 
<source lang="c">
const double pi = 3.14;
</source>
 
Cela vient du fait que le C est une invention américaine, et que les anglophones utilisent le point à la place de la virgule, on met un point là où nous autres francophones mettons une virgule.
 
Et vous devez impérativement mettre ce point, même si vous voulez stocker un nombre entier dans un float ou un double. Par exemple, vous ne devez pas écrire double a = 5; mais double a = 5.; (certains préfère double a = 5.0;, cela revient au même). Si vous ne le faites pas, vous risquez d’avoir quelques problèmes.
 
{|
|-
|Type
|Initialisation
|-
|char
|0
|-
|int
|0
|-
|long
-0
|-
|short
|0
|-
|float
|0.
|-
|double
|0.
|-
|long double
|0.
|-
|unsigned int
|0
|-
|unsigned short
|0
|-
|unsigned long
|0
|}
 
=== Affectation ===
 
Nous savons donc déclarer (créer) nos variables, et les initialiser (leur donner une valeur à la création). Il ne nous reste plus qu’à voir la dernière manipulation possible : l’affectation. Cette affectation permet de modifier la valeur contenue dans une variable, pour la remplacer par une autre valeur.
 
Il va de soi que cette affectation n’est possible que pour les variables qui ne sont déclarées avec const : par définition, de telles variables sont en effet constantes et ne peuvent voir leur contenu changer. Cela interdit toute affectation pour ces variables déclarées constantes.
 
Pour faire une affectation, il suffit d’opérer ainsi :
 
<source lang="c">
identificateur = nouvelle_valeur;
</source>
 
On voit que la syntaxe est similaire à celle d’une déclaration avec initialisation : la seule différence, c’est qu’on n’a pas à préciser le type. Ce type est en effet fixé une fois pour toutes lors de la déclaration de notre variable : pas besoin de le préciser lors d’une affectation.
 
Si je veux changer la valeur de mes variables, je procède tout simplement comme suit.
 
<source lang="c">
age = 30;
taille = 177.5;
petite_valeur = 2;
</source>
 
Il n’y a aucune limite, voyez par exemple :
 
<source lang="c">
petite_valeur = 2;
petite_valeur = 4
petite_valeur = 8;
petite_valeur = 16;
petite_valeur = 8;
petite_valeur = 4;
petite_valeur = 2;
</source>
 
À chaque affectation, la variable va prendre une nouvelle valeur.
 
Attention : ne mettez pas le type quand vous voulez changer la valeur, sinon vous aurez le droit à une belle erreur du type « redefinition of 'nom_de_votre_variable' » car vous aurez créé deux variables avec le même identificateur !
 
Le code suivant est donc incorrect :
 
<source lang="c">
int age = 15;
int age = 20;
</source>
 
Si vous exécutez tous ces codes, vous verrez qu’ils n’affichent toujours rien. Mais pourquoi ? Tout simplement parce qu’on n'a pas demandé à notre ordinateur d'afficher quoique ce soit. Et ce n'est pas pour tout de suite : on apprendra comment faire pour afficher quelque chose sur la console au chapitre suivant. Quoiqu'il en soit, ne soyez pas pressés et prenez bien le temps d’assimiler toutes les notions présentées dans ce chapitre.