summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorache <ache@ache.one>2018-04-14 03:28:56 +0200
committerache <ache@ache.one>2018-04-14 03:28:56 +0200
commit4031e7f536c6f6f6e8e8b75cadb150612a980d50 (patch)
treedf9fc22869e576d6bbc1de955eab8213f965ac4f
parentQuickfix math (diff)
Màj d'un article
-rw-r--r--article/bizarrerie-du-langage-c.md28
1 files 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;