Section courante

A propos

Section administrative du site

Vérification de l'indentation

La vérification de l'indentation permet de localiser l'origine des accolades ouvrantes et fermantes manquantes. Elle peut également détecter d'éventuels problèmes dans un programme syntaxiquement correct. Par exemple, considérons le fragment de code suivant :

  1. if( ... )
  2.     if ( ... )
  3.          statement
  4. else statement

Apparemment, le programmeur pensait que le «else» était associé au premier «if», alors que le compilateur l'associera, sans problème, au second «if». PC-Lint signalera que le «else» est indenté négativement par rapport au second «if».

Deux types de messages sont disponibles : le message d'information 725 est émis lorsqu'aucune indentation n'est présente (absence d'indentation positive) alors qu'une indentation est attendue ; l'avertissement 525 est émis lorsqu'une construction est indentée négativement par rapport à une clause de contrôle.

Un aspect important de la vérification de l'indentation est le poids accordé aux tabulations de début dans le fichier d'entrée. Par défaut, les tabulations de début sont considérées comme 8 espaces, mais ce comportement peut être modifié avec l'option `-t`. Par exemple, `-t4` indique qu'une tabulation vaut 4 espaces.

Reconnaître les anomalies d'indentation revient presque à préconiser un schéma d'indentation particulier ; c'est ce que nous souhaitons éviter. Par exemple, il existe au moins trois stratégies d'indentation principales illustrées par les gabarits suivants :

  1. if( e ) {
  2.     statements
  3. }
  4.  
  5. if( e )
  6.      {
  7.      statements
  8.      }
  9.     
  10. if( e )
  11. {
  12.     statements
  13. }

Bien que les méthodes d'indentation semblent différer radicalement, la seule différence réelle réside dans la gestion des accolades. Les instructions sont toujours indentées positivement par rapport à la clause qui les contrôle. C'est pourquoi PC-Lint effectue une vérification stricte des instructions, exigeant qu'elles soient indentées (sinon, une erreur 275 est émise), et une vérification superficielle des accolades, se contentant de vérifier qu'elles ne sont pas indentées négativement (sinon, une erreur 525 est émise).

Les instructions `case`, les valeurs par défaut et les étiquettes définies par l'utilisateur font l'objet d'une vérification superficielle. Cela signifie, par exemple :

  1. switch()
  2.      {
  3. case 'a' :
  4.     break;
  5. default:
  6. break;
  7.      }

Seul le message d'information (725) est émis lors du deuxième saut de ligne ; aucun message n'apparaît avec les étiquettes `case` et `default`.

La clause `while` d'une boucle `do... while(s);` est soumise à une vérification faible par rapport à l'instruction `do`, et la clause `else` est soumise à une vérification faible par rapport à son `if` correspondant.

Une construction «else if()» sur la même ligne établit un niveau d'indentation égal à l'emplacement du «else», et non du «if». Cela permet l'utilisation de la forme :

  1. if()
  2.     statement
  3. else if()
  4.     statement
  5. else if()
  6.     statement
  7.  :
  8. else
  9.     statement

Seul le début des instructions est vérifié. Un commentaire peut donc apparaître n'importe où sur une ligne sans être signalé. De même, une longue chaîne de caractères (si elle ne commence pas une instruction) peut figurer n'importe où sur la ligne.



Dernière mise à jour : Lundi, le 6 avril 2026