Commentaires

Il est possible d’insérer des commentaires dans un code source. Un commentaire est ignoré par le compilateur et n’a pas besoin de respecter la syntaxe du C.

Il peut contenir du code source, un texte explicatif, ou n’importe quoi d’autre.

Deux syntaxes de commentaires existent en C : le commentaire multiligne /* */ et sur une seule ligne //.

Commentaires multiligne

Le commentaire multiligne permet de commenter plusieurs lignes de code :


int main() {

    int toto;

    /*
    int tata;
    int titi;
    */
}

Il n’est pas passible d’imbriquer deux commentaires multilignes : le commentaire multiligne s’arrête au premier */ rencontré :


int main() {

    int toto;
    /*
    int tata;
    /* int titi; // ici s'arrête le commentaire */
    */

}

Si votre souhait est de commenter plusieurs lignes de code, sans vous soucier de commentaires deja existants dans le code que vous voulez commenter, une alternative est d’utiliser une directive de préprocesseur #if 0 / #endif


int main() {
    int toto;

#if 0
    int tata;
    /*int titi; */
#endif
}

Commentaires sur une seule ligne

Une autre syntaxe, empruntée du C++, et disponible depuis le C ANSI , est le commentaire sur une seule ligne //. Il se termine au premier caractère « saut de ligne » (\n) rencontré.


int main() {

    int toto;
    //int tata;  // ce commentaire s'arrête à la ligne
    int titi;

}

Commentaires de documentation

Un commentaire peut expliquer ce que fait le code lorsqu’il n’est pas évident au premier coup d’oeil.

Pour faire la différence entre les commentaire de documentation du code commenté temporairement, de nombreux EDI reconnaissant la convention qui consiste à rajouter deux étoiles après la barre oblique ouvrante (/**) pour signifier que le commentaire sert de documentation et non à désactiver du code. Les EDI affichent du code de documentation avec une fonte ou une couleur différente des commentaires “normaux”.

Vu que les EDI proposent des raccourcis claviers pour commenter rapidement des lignes ou des blocs de code, rajouter une étoile supplémentaire ainsi permet la distinction entre commentaires volontaires et commentaires automatiques.

De la même facon, un commentaire mono ligne avec trois barres obliques /// se distingue d’un commentaire mono ligne automatique // et signifie qu’il a été ajouté à la main à des fins de documentation.

/**
 * Cette fonction ne fait rien
 * Notez que ce bloc de commentaire commence avec /**
 */
int ma_fonction() {
    
    return 42;

    /* return 0; */ /** Ici il s'agit de code commenté,
    donc on ne met que une seule étoile */
}

int main() {
    /** Cet appel est uniquement à but démonstratif */
    ma_fonction(),
}

Commentaire de mise en sommeil de code

On peut mettre du code en commentaire si on pense en avoir besoin dans le futur mais pas l’utilité immédiate.

Un effet néfaste de procéder ainsi est que un tel code peut devenir périmé dans le temps, lorsqu’on change la signature des fonctions, en supprime, etc. Si on revient plusieurs années après dessus et qu’on décommente le code on peut se retrouver sur des appels de fonctions qu’on a oublié et qu’on doit retrouver dans des versions archivées du code source, perdre du temps à mettre le code à jour. Si au lieu de commenter le code on le met dans un bloc if(0), on est forcé de mettre à jour le code qui s’y trouve pour que programme compile si on change la signature d’une fonction, et évite d’avoir à faire avec du code complètement obsolète dans le futur.

Phase de compilation

Lors de la compilation , les commentaires sont remplacés par une unique espace, avant que le préprocesseur n’intervienne.

On ne peut donc pas creer de commentaires avec le preprocesseur, et le preprocesseur n’a pas d’influence sur les commentaires.

#define END_COM */

/* END_COM // ce commentaire disparait avant le
preprocessus, donc la directive "END_COM" ne termine
pas ce commentaire. */

// le preprocesseur ne verra pas la ligne ci dessous
/* #define IGNORED */