diff options
author | ache <ache@ache.one> | 2018-04-14 03:30:56 +0200 |
---|---|---|
committer | ache <ache@ache.one> | 2018-04-14 03:30:56 +0200 |
commit | b1507dc23f609ba1e5c0d77f826c0c354a829395 (patch) | |
tree | 9c4ff75049e39e5811b80485d10298de2b9c04c1 /article/bizarrerie-du-langage-c.md | |
parent | Modification de l'article langage C (diff) | |
parent | Style enhancement (diff) |
Merge branch 'master' of /home/ache/git/ache.one
Diffstat (limited to 'article/bizarrerie-du-langage-c.md')
-rw-r--r-- | article/bizarrerie-du-langage-c.md | 28 |
1 files changed, 19 insertions, 9 deletions
diff --git a/article/bizarrerie-du-langage-c.md b/article/bizarrerie-du-langage-c.md index 81d0137..de2c299 100644 --- a/article/bizarrerie-du-langage-c.md +++ b/article/bizarrerie-du-langage-c.md @@ -11,7 +11,8 @@ 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 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. @@ -21,6 +22,8 @@ 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 @@ -113,7 +116,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 : @@ -169,7 +173,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. @@ -276,7 +281,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. @@ -328,7 +334,8 @@ On appelle 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 : @@ -393,7 +400,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 : @@ -468,7 +476,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 ! @@ -572,7 +581,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. @@ -614,7 +624,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; |