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
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
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
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
- 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
- (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
Articles connexes
- 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