Dès le début, dans le langage C, il était permis de omettre les accolades pour une seule instruction à l'intérieur de la construction if. Cela a rendu le code plus compact, mais a provoqué de nombreuses erreurs non évidentes, surtout lors de l'extension et de la modification. La raison historique — l'économie d'espace et la simplicité de la syntaxe pour les cas minimalistes.
Le problème survient lorsque le développeur oublie qu'en l'absence d'accolades, if ne contrôle que la première instruction qui suit : toutes les instructions suivantes s'exécutent sans condition, même si cela ne semble pas évident visuellement. Ce style conduit à des bogues cachés, qui sont difficiles à identifier lors de la lecture du code et à l'apparition d'erreurs dues à un manque d'indentation ou à l'ajout de nouvelles lignes.
La solution — toujours utiliser des accolades, même si l'instruction est unique. Cela améliore la lisibilité et la sécurité du code.
Exemple de code :
// Mauvais : if (x > 0) do_something(); do_other(); // S'exécute toujours // Mieux : if (x > 0) { do_something(); do_other(); }
Caractéristiques clés :
L'indentation (tabulation/espace) affecte-t-elle la portée de if ?
Non, dans le langage C, la portée est déterminée uniquement par les accolades, pas par les indentations.
Quel comportement aura ce code ?
if (a > 0) fun1(); fun2();
fun1() sera appelé uniquement si a > 0. fun2() sera toujours appelé indépendamment de la condition.
Quelles sont les conséquences si l'on oublie d'ajouter des accolades lors de l'ajout d'une nouvelle ligne ?
Ce code peut modifier le comportement et entraîner des erreurs, qui sont visuellement difficiles à détecter, car les indentations ne protègent pas des erreurs de compilation.
Le développeur a ajouté une deuxième instruction dans un if sur une seule ligne, oubliant d'ajouter les accolades.
if (user) initialize(); log_access();
Avantages :
Inconvénients :
Le développeur utilise toujours des accolades même pour une seule instruction :
if (user) { initialize(); log_access(); }
Avantages :
Inconvénients :