From 069f646614c12bd6c5a99856428bc04cb9f4f33b Mon Sep 17 00:00:00 2001 From: ache Date: Sat, 14 Apr 2018 03:30:47 +0200 Subject: Modification de l'article langage C --- article/bizarrerie-du-langage-c.md | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/article/bizarrerie-du-langage-c.md b/article/bizarrerie-du-langage-c.md index 9126c94..81d0137 100644 --- a/article/bizarrerie-du-langage-c.md +++ b/article/bizarrerie-du-langage-c.md @@ -13,7 +13,10 @@ Attaquons nous à ces cas mystérieux ! ### Les opérateurs inusités -Il existe deux opérateurs dans le langage C qui ne sont pratiquement jamais utilisés. +Il existe beaucoups d'opérateurs dans le langage C. Ici, nous allons parler particulièrement de deux d'entre eux qui ne sont pratiquement jamais enseignés. + +#### L'opérateur virgule + Le premier est l'opérateur virgule. En C la virgule sert à séparer factoriser les éléments d'une définition ou séparer les éléments d'une fonction. En bref, c'est un élément de ponctuation. Mais pas seulement ! C'est également un opérateur. @@ -59,7 +62,7 @@ while( (c = getchar()) != EOF && c != '\n' ) { Mais surtout, ne pas abuser de cet opérateur ! On peut, de manière assez rapide, obtenir des choses illisibles. Cette remarque est d'ailleurs également valide pour le prochain opérateur ! -### L'opérateur ternaire +#### L'opérateur ternaire Le ternaire pour les intimes. Le seul opérateur du langage C qui prenne 3 opérandes. Il sert à simplifier des expressions conditionnelles. @@ -197,7 +200,7 @@ Si on veut seulement une initialisation ; Puisque l'initialisation d'un tableau int tab[10] = {0, 0, 5}; ``` -Mais en fait, il existe une autre syntaxe qui permet de faire plus simple : +Mais en réalité, il existe une autre syntaxe qui permet de faire plus simple : ```c int tab[10] = {[2] = 5}; ``` @@ -286,7 +289,7 @@ printf("%d", tab[i]); // Avec i égale à quelque chose >=0 et <5 Cependant, je ne l'utilise qu'une seule fois ce tableau ... C'est pas cool d'avoir à utiliser un identificateur juste pour ça. -Et bien je peux faire ça : +Et bien je peux faire ceci : ```c printf("%d", ((int[]){5,4,5,2,1}) [i] ); // Avec i égale à quelque chose >=0 et <5 ``` @@ -321,7 +324,7 @@ De même ceci n'est pas valide : ((int[]){1,2,3})[0] = 0; ``` -On appele donc ces expressions des compound literals. +On appelle donc ces expressions des compound literals. Ou une expression littérale composée si l'on s'essaye à traduire. @@ -554,7 +557,7 @@ while( count-- > 0 ) En divisant par 8 (nombre arbitraire) on divise également par 8 le nombre de tests et de décrémentations. Cependant, si `count` n'est pas divisible par 8, on a un problème, on ne fait pas toutes les instructions. -Se serrait bien de pouvoir sauter directement à la 2em instruction, si on a seulement 6 instructions restantes. +Ce serrait bien de pouvoir sauter directement à la 2em instruction, si on a seulement 6 instructions restantes. Et c'est là que les étiquettes peuvent nous aider ! Grâce au `switch` on peut sauter directement à la bonne instruction. @@ -581,7 +584,7 @@ On pouvait alors remplacer la caractère '#' par la séquence "??=". Et pour chaque caractère composé, il existait une séquence à base de "??". Voici une image des séquences de trigraphe et de leur représentation en caractère. -![Trigraphes](res/digraphe_c.png) +![Trigraphes](res/trigraphe_c.png) Il existe également des digraphes. C'est à peu près la même chose mais en deux caractères : -- cgit v1.2.3-54-g00ecf