From 4031e7f536c6f6f6e8e8b75cadb150612a980d50 Mon Sep 17 00:00:00 2001 From: ache Date: Sat, 14 Apr 2018 03:28:56 +0200 Subject: Màj d'un article MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- article/bizarrerie-du-langage-c.md | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/article/bizarrerie-du-langage-c.md b/article/bizarrerie-du-langage-c.md index 9126c94..cc7542b 100644 --- a/article/bizarrerie-du-langage-c.md +++ b/article/bizarrerie-du-langage-c.md @@ -11,13 +11,16 @@ Attaquons nous à ces cas mystérieux ! > Pour comprendre ce billet, il est nécessaire d'avoir des bases dans un langage ayant une syntaxe et un fonctionnement proche du C. -### Les opérateurs inusités +Les opérateurs inusités +---------------------- Il existe deux opérateurs dans le langage C qui ne sont pratiquement jamais utilisés. 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. +### L'opérateur virgule + L'instruction suivante, bien qu'inutile est tout à fait valide : ```c @@ -110,7 +113,8 @@ Et voilà ! Deux opérateurs qui vont désormais gagner un peu d'intérêt. Et surtout être mieux compris ! Puis d'ailleurs, même les opérateurs qu'on connait déjà, on n'en maîtrise pas forcément la syntaxe. -### L'accès à un tableau +L'accès à un tableau +------------------ On nous a toujours appris que pour afficher le 3em élément d'un tableau, on faisait : @@ -166,7 +170,8 @@ En somme, tout le monde écrit `tab[3]` et pas `3[tab]`. Du coup, il n'y a aucun Mais c'est toujours bien de savoir que ça existe. ^^ -### L'initialisation +L'initialisation +--------------- L'initialisation, c'est quelque chose qu'on maîtrise en C. C'est le fait de donner une valeur à une variable lors de sa déclaration. En gros, on définit sa valeur. @@ -273,7 +278,8 @@ Comme ici, dans ce décodeur de base64 : Source: [Taurre](https://openclassrooms.com/forum/sujet/defis-8-tout-en-base64-19054?page=1#message-6921633) -### Les expressions littéralement composées +Les expressions littéralement composées +-------------------------------------- Puisque nous parlons des tableaux. Il existe une syntaxe simple pour utiliser des tableaux constants. @@ -325,7 +331,8 @@ On appele donc ces expressions des compound literals. Ou une expression littérale composée si l'on s'essaye à traduire. -### Les VLAs +Les VLAs +-------- Les tableaux à taille variable (ou *Variable Length Arrays* en anglais, soit VLAs) sont des tableaux dont la taille n'est connue qu'à la compilation. Si vous n'avez jamais entendu parler des VLAs, ceci devrait vous choquer : @@ -390,7 +397,8 @@ Humm, curieux effet de bord. Il y a deux choses assez intéressantes dans ce cod La deuxième chose intéressante est le fait que foo prenne en argument un tableau à taille variable, mais qu'on lui passe en paramètre un tableau de taille fixe ! En fait, on aurait pu écrire n'importe quelle expression qui retourne un entier. Ces deux points sont causés par les VLAs. Voyons ça plus doucement. -### La définition d'un type VLA +La définition d'un type VLA +--------------------------- Pour définir une fonction qui prend un tableau d'entiers de taille `N` en paramètre, on peut simplement faire : @@ -465,7 +473,8 @@ Mais ça reste bien moins pratique que l'utilisation de VLAs. Mais alors une dernière question reste en suspens. Peut-on utiliser cette astuce pour des tableaux 2D qui ne sont pas des VLAs. À cela il existe une réponse simple. Un tableau reste un tableau, son agencement en mémoire est le même. Du coup, pas de problème à utiliser un tableau à deux dimensions fixes dans une fonction qui prend en paramètre un VLA. -### Une histoire d'étiquettes +Une histoire d'étiquettes +------------------------ En C, s'il y a un truc dont on ne doit pas parler, ce sont bien les *étiquettes*. On les utilses avec la structure de contrôle `goto` ! L'interdite ! @@ -569,7 +578,8 @@ D'ailleurs, c'est une optimisation d'un autre temps. Mais comme je voulais vous parler de syntaxe alors, il était nécessaire de parlez des étiquettes. -### Les caractères trop spéciaux +Les caractères trop spéciaux +--------------------------- On va remonter encore dans le temps. Je vais vous citer une dernière chose. @@ -611,7 +621,7 @@ printf("%d", a ?5??((tab):>:0); **À ne jamais utiliser dans un code sérieux** donc. -### Conclusion +## Conclusion Voilà, c'est fini, j'espère que vous avez appris quelque chose de ce billet. Surtout n'oubliez pas d'utiliser ces syntaxes avec parcimonie; -- cgit v1.2.3-54-g00ecf