Les variables non définies
31
Ici, nous admettrons que cette conversion implicite existe. En revanche, nous n’en autoriserons pas d’autres. Ainsi, avec ces déclarations :
réel y
entier n
cette instruction sera correcte :
y := n + 1
En revanche, celle-ci ne le sera pas (car elle imposerait une conversion implicite de réel en
entier que nous n’avons pas prévue).
n := y
Beaucoup de langages permettent de demander « explicitement » la conversion d’un type
dans un autre, par exemple de réel en entier (cette conversion ne conservant alors que la
partie entière du nombre concerné). Ici, nous ne prévoierons pas non plus de telles conversions.
5 Les variables non définies
Dans certains de nos précédents exemples montrant l’évolution des valeurs des variables, il
nous est arrivé d’utiliser un tiret (-) pour indiquer qu’à un instant donné la variable correspondante n’avait pas encore reçu de valeur. On dit qu’une telle variable est indéfinie ou non
définie.
En soi, le fait qu’une variable ne soit pas définie n’a rien de bien grave. D’ailleurs, au début
de l’exécution d’un programme, bon nombre de variables sont indéfinies. En revanche, les
choses se gâtent si l’on cherche à utiliser la valeur d’une variable non définie comme dans cet
exemple :
entier x, y, z
x := 3
z := x + y
y := 4
Lorsque l’on exécute l’affectation z = x + y, la variable y est encore indéfinie. Le calcul
de z est donc impossible.
Que se passe-t-il si l’on exécute un tel programme. En fait, tous les traducteurs ne traitent pas
la situation de la même manière. Voici quelques comportements possibles :
• Ignorer le problème ; dans ce cas, il faut bien voir qu’une variable indéfinie possède quand
même une valeur. En effet, la notion d’absence d’information n’existe pas dans la mémoire
centrale : un bit donné vaut toujours 0 ou 1, même si on ne lui a rien imposé de particulier.
Autrement dit, une variable indéfinie possède alors une valeur généralement imprévisible
pour le programmeur.
• Attribuer une valeur initiale (généralement 0) à toutes les variables Dans notre exemple, cela
conduirait à attribuer la valeur 3 à z !
• Détecter ce genre de choses dès la compilation.
31
Ici, nous admettrons que cette conversion implicite existe. En revanche, nous n’en autoriserons pas d’autres. Ainsi, avec ces déclarations :
réel y
entier n
cette instruction sera correcte :
y := n + 1
En revanche, celle-ci ne le sera pas (car elle imposerait une conversion implicite de réel en
entier que nous n’avons pas prévue).
n := y
Beaucoup de langages permettent de demander « explicitement » la conversion d’un type
dans un autre, par exemple de réel en entier (cette conversion ne conservant alors que la
partie entière du nombre concerné). Ici, nous ne prévoierons pas non plus de telles conversions.
5 Les variables non définies
Dans certains de nos précédents exemples montrant l’évolution des valeurs des variables, il
nous est arrivé d’utiliser un tiret (-) pour indiquer qu’à un instant donné la variable correspondante n’avait pas encore reçu de valeur. On dit qu’une telle variable est indéfinie ou non
définie.
En soi, le fait qu’une variable ne soit pas définie n’a rien de bien grave. D’ailleurs, au début
de l’exécution d’un programme, bon nombre de variables sont indéfinies. En revanche, les
choses se gâtent si l’on cherche à utiliser la valeur d’une variable non définie comme dans cet
exemple :
entier x, y, z
x := 3
z := x + y
y := 4
Lorsque l’on exécute l’affectation z = x + y, la variable y est encore indéfinie. Le calcul
de z est donc impossible.
Que se passe-t-il si l’on exécute un tel programme. En fait, tous les traducteurs ne traitent pas
la situation de la même manière. Voici quelques comportements possibles :
• Ignorer le problème ; dans ce cas, il faut bien voir qu’une variable indéfinie possède quand
même une valeur. En effet, la notion d’absence d’information n’existe pas dans la mémoire
centrale : un bit donné vaut toujours 0 ou 1, même si on ne lui a rien imposé de particulier.
Autrement dit, une variable indéfinie possède alors une valeur généralement imprévisible
pour le programmeur.
• Attribuer une valeur initiale (généralement 0) à toutes les variables Dans notre exemple, cela
conduirait à attribuer la valeur 3 à z !
• Détecter ce genre de choses dès la compilation.
