Chapitre 4. Comment faire du code illisible ?

Table des matières
4.1. De nouveaux opérateurs
4.2. Quelques conseils

Il est facile, très facile, de faire des programmes illisibles en C ou en C++. À ce propos, deux choses peuvent être dites :

  1. Ç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 être humains sur ce terrain. L'avantage de l'assembleur est que là, au moins, on est sûr d'avoir un programme illisible.).

  2. Ça augmente les chances d'avoir des bogues.

Cependant, si vous voulez vous amuser, voici quelques conseils :

4.1. De nouveaux opérateurs

Il existe des opérateurs merveilleux.

Le premier est l'opérateur ternaire (?:). C'est le seul opérateur qui attende 3 paramètres (à part l'opérateur fonctionnel () des fonctions, qui admet n paramètres).

Il permet de remplacer le if. Sa syntaxe est la suivante :

test ? expression1 : expression2

Dans la syntaxe donnée ci-dessus, test est évalué en premier. Son résultat doit être booléen ou entier. Si test est vrai (ou si sa valeur est non nulle), expression1 est calculée et sa valeur est renvoyée. Sinon, c'est la valeur de expression2 qui est renvoyée. Par exemple :

min=(i<j)?i:j;   /* Calcule le minimum de i et de j. */

Ça reste encore lisible. C'est pour cela que l'opérateur virgule (,) a été inventé. Il remplace les blocs d'instructions. Sa syntaxe est :

expression1,expression2[,expression3[...]]

Les expressions sont évaluées de gauche à droite (expression1, expression2, etc.), puis le type et la valeur de la dernière expression sont utilisés pour renvoyer le résultat. Par exemple :

double r = 5;
int i = r*3,1;   /* À la fin de l'instruction, r vaut 5
                    et i vaut 1. r*3 est calculé pour rien. */

Enfin, il y a les opérateurs d'incrémentation et de décrémentation (++ et --). Ils s'appliquent comme des préfixes ou des suffixes sur les variables. Lorsqu'ils sont en préfixe, la variable est incrémentée ou décrémentée, puis sa valeur est renvoyée. S'ils sont en suffixe, la valeur de la variable est renvoyée, puis la variable est incrémentée ou décrémentée. Par exemple :

int i=2,j,k;

j=++i;   /* À la fin de cette instruction, i et j valent 3. */
k=j++;   /* À la fin de cette ligne, k vaut 3 et j vaut 4. */