Instruction nulle
En programmation informatique, une instruction nulle (ou instruction vide) est une instruction particulière, qui dicte à l'ordinateur de n'effectuer aucune action.
Langage machine[modifier | modifier le code]
L'instruction nulle, implémentée dans le jeu d'instructions de beaucoup de processeurs a pour seul effet d'incrémenter le compteur ordinal. Elle est donc ignorée par le processeur, qui passe à l'instruction suivante.
Elle est symbolisée en assembleur par le mnémonique NOP.
Pascal[modifier | modifier le code]
En Pascal, l'instruction nulle est l'instruction qui n'est constituée d'aucun symbole. C'est une instruction vide.
Par exemple, comme les instructions sont séparées par des points-virgules, deux points-virgules successifs délimitent en fait une instruction nulle.
Une instruction nulle est fréquemment ajoutée (souvent inconsciemment) à la fin d'une séquence d'instructions dans un bloc Begin-End
par les programmeurs qui prennent l'habitude de faire suivre toutes les instructions par un point-virgule, même la dernière.
Un point-virgule mal placé peut provoquer une confusion :
while n > 0 do ;
begin
n := n - 1 ;
f := f * n ;
end
Dans cet exemple, le point-virgule ajouté par mégarde après do
indique que l'instruction à répéter dans la boucle while
est l'instruction nulle. Le bloc Begin-End
ne sera exécuté qu'après la fin de la boucle (donc jamais si n est strictement positif, car ce sera en fait une boucle infinie).
Par contre, le point-virgule inutile après la deuxième ligne du bloc est inoffensif et ne fait qu'y ajouter une instruction nulle sans effet.
Contrairement à l'exemple précédent, il peut être utile de mettre une instruction nulle dans une boucle pour attendre qu'une condition se réalise avant de continuer l'exécution :
repeat until KeyPressed
ou
while not KeyPressed do
Mais si l'on veut faire suivre la boucle ci-dessus d'une instruction, il ne faudra pas oublier d'ajouter un point-virgule. Le compilateur détectera l'oubli dans le premier cas, mais dans le deuxième, il considérera l'instruction suivante comme faisant partie de la boucle.
C[modifier | modifier le code]
Le code suivant est un exemple d'instruction simple en C qui se comporte comme une instruction nulle.
i+1;
Cette instruction effectue une addition et ignore le résultat. En fait, toute instruction n'ayant pas d'effet de bord (et qui n'affecte pas le flux de contrôle comme break
ou return
) peut être enlevée, puisque le résultat du calcul est ignoré.
La véritable instruction nulle en C est l'instruction la plus simple possible. Elle est constituée d'un simple point-virgule et peut être mise à tout emplacement où une instruction est requise.
;
Une autre solution, peut-être plus lisible, est d'utiliser un bloc vide :
{}
Dans certains cas, tels que le corps d'une fonction, un bloc est obligatoire mais il peut être vide.
L'instruction nulle est inutile en elle-même, mais elle peut être d'une utilité syntaxique dans un contexte plus large, par exemple celui d'une boucle :
while (getchar() != '\n')
;
ou de façon plus concise :
while (getchar() != '\n');
cependant cette manière d'écrire peut prêter à confusion car le point-virgule peut souvent ne pas être remarqué.
Autre solution possible, peut-être plus lisible :
while (getchar() != '\n') {}
Le code ci-dessus répète l'appel à la fonction getchar() jusqu'à ce qu'elle retourne un caractère \n
(fin de ligne), ce qui a pour effet de faire avancer la lecture de l'entrée standard jusqu'au début de la ligne suivante.
Remarque : En pratique, la plupart des compilateurs C ne génèrent pas de code machine pour une instruction nulle, pas même un NOP
. Souvent cependant, ils signaleront par un avertissement la présence d'une instruction sans effet comme celle du premier exemple [1].
Autres langages[modifier | modifier le code]
- Fortran : L'instruction
CONTINUE
, qui, associée à une étiquette, sert de point d'arrivée pour une instruction de branchement, n'a pas d'effet et peut être considérée comme l'instruction nulle du Fortran. - BASIC : Il n'y a pas d'instruction vide en BASIC mais l'instruction
REM
, utilisée pour écrire un commentaire, peut en jouer le rôle. - Ada : L'instruction nulle en Ada est
NULL
. - Perl : En langage Perl, l'instruction ellipse '...' a été ajoutée à la syntaxe pour représenter visuellement du code manquant qui doit être ajouté ultérieurement.
- Python : L'instruction
pass
en Python est une instruction nulle.
Notes et références[modifier | modifier le code]
- (en) Cet article est partiellement ou en totalité issu de l’article de Wikipédia en anglais intitulé « NOP » (voir la liste des auteurs).
Voir aussi[modifier | modifier le code]
Articles connexes[modifier | modifier le code]
- Instruction non documentée
- HLT, une instruction en langage assembleur qui arrête l'unité centrale de traitement (CPU) jusqu'à la prochaine interruption externe
- Halt and Catch Fire, une instruction non documentée à effets secondaires inhabituels, incluse dans le processeur à des fins de test