# Programmation C-C++/Écrire du code illisible

Ce livre est en cours de copie depuis le site http://casteyde.christian.free.fr/cpp/cours/online/book1.html qui le fournit sous licence GFDL.
Cours de C/C++ :
| Le langage ||
| | Première approche |
| | Les structures de contrôle |
| | Types avancés |
| | Pointeurs et références |
| | Le préprocesseur |
| | Modularité et compilation |
| | Écrire du code illisible |
| | C++ : La couche objet |
| | C++ : Les exceptions |
| | Identification des types |
| | Les espaces de nommage |
| | Les templates |
| La bibliothèque standard ||
| | Notions de base |
| | Les types complémentaires |
| | Les flux d'entrée / sortie |
| | Les locales |
| | Les conteneurs |
| | Les algorithmes |
| Conclusion ||
| Priorités des opérateurs ||
| Draft Papers ||
| Bibliographie ||
| Livre original de C. Casteyde Modifier le modèle ||
Il est facile, très facile, de faire des programmes illisibles en C ou en C++. Il existe même un concours du code le plus obscur ! Cela dit, deux choses peuvent être dites à ce propos :
* Ça n'accroît pas la vitesse du programme. Si l'on veut aller plus vite, il faut revoir l'algorithme ou changer de compilateur (inutile de faire de l'assembleur : les bons compilateurs se débrouillent mieux que les êtres humains sur ce terrain. L'avantage de l'assembleur est que là, au moins, on est sûr d'avoir un programme illisible.).
* Ça augmente les chances d'avoir des bogues.
Si vous voulez malgré tout vous amuser, voici quelques conseils utiles :
* écrivez des macros complexes qui font des effets de bords insoupçonnés et qui modifient des variables globales ;
* abusez de l'opérateur ternaire ?: et surtout de l'opérateur virgule ,. Utilisez les opérateurs d'incrémentation et de décrémentation à outrance, en version préfixée et suffixée, tout spécialement dans des expressions utilisant des pointeurs ;
* placez ces opérateurs dans les structures de contrôles. Notamment, utilisez l'opérateur virgule pour faire des instructions composées dans les tests du while et dans tous les membres du for. Il est souvent possible de mettre le corps du for dans les parenthèses ;
* si nécessaire, utilisez les expressions composées ({ et }) dans les structures de contrôle ;
* choisissez des noms de variable et de fonction aléatoires (pensez à une phrase, et prenez les premières ou les deuxièmes lettres des mots au hasard) ;
* regroupez toutes les fonctions dans un même fichier, par ordre de non-appariement ;
* inversement, dispersez les définitions des variables globales dans tout le programme, si possible dans des fichiers où elles ne sont pas utilisées ;
* faites des fonctions à rallonge ;
* ne soignez pas l'apparence de votre programme (pas d'indentation ou, au contraire, trop d'indentations), regroupez plusieurs instructions sur une même ligne ;
* rajoutez des parenthèses là où elles ne sont pas nécessaires ;
* rajoutez des transtypages là où ils ne sont pas nécessaires ;
* ne commentez rien, ou mieux, donnez des commentaires sans rapport avec le code.

## Exemple 7-1. Programme parfaitement illisible

Vous l'aurez compris : il est plus simple de dire ici ce qu'il ne faut pas faire que de dire comment il faut faire. Je ne prétends pas imposer à quiconque une méthodologie quelconque, car chacun est libre de programmer comme il l'entend. En effet, certaines conventions de codages sont aussi absurdes qu'inutiles et elles ont l'inconvénient de ne plaire qu'à celui qui les a écrites (et encore...). C'est pour cette raison que je me suis contenté de lister les sources potentielles d'illisibilité des programmes. Sachez donc simplement que si vous utilisez une des techniques données dans ce paragraphe, vous devriez vous assurer que c'est réellement justifié et revoir votre code. Pour obtenir des programmes lisibles, il faut simplement que chacun y mettre un peu du sien, c'est aussi une marque de politesse envers les autres programmeurs.