Aller au contenu

Instruction nulle

Un article de Wikipédia, l'encyclopédie libre.
Ceci est une version archivée de cette page, en date du 20 avril 2020 à 16:09 et modifiée en dernier par Xqbot (discuter | contributions). Elle peut contenir des erreurs, des inexactitudes ou des contenus vandalisés non présents dans la version actuelle.

En programmation informatique, une instruction nulle (ou instruction vide) est une instruction particulière, qui dicte à l'ordinateur de n'effectuer aucune action.

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.

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.

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