Je suppose que vous vous êtes tous déjà  demandés le comment de la conception d'un programme. Vous avez déjà  vaguement entendus parler des langages de programmation et de cet instrument magique qu'est le compilateur qui transforme votre joli code en un affreux fichier binaire illisible (appelé éxécutable sous Windows). Hé bien ne cherchez plus mes frères ! Ici, le graal de l'informatique, la chaîne de compilation, vous sera expliqué !

Voici un simple programme en C, le traditionnel "Hello World" (je vais expliquer la chaîne de compilation utilisée par le compilateur libre GCC (GNU C Compiler), du projet GNU, mais tous les compilateurs utilisent globalement la même méthode) :
[code:1vqjj0wa]#include&lt;stdio&#46;h&gt;
#include&lt;stdlib&#46;h&gt;

int main&#40;&#41;
&#123;
  printf&#40;&quot;Hello world !\n&quot;&#41;;
  return EXIT_SUCCESS;
&#125;[/code:1vqjj0wa]

Commençons par une analyse de ce petit programme pour les non-codeurs :
[code:1vqjj0wa]#include&lt;stdio&#46;h&gt;
#include&lt;stdlib&#46;h&gt;[/code:1vqjj0wa]
Ce sont ce que l'on appelle des [color=red:1vqjj0wa]directives de ompilation[/color:1vqjj0wa]. Il en existe beaucoup d'autre mais la directive [color=blue:1vqjj0wa]include[/color:1vqjj0wa] est la plus fréquente car elle permet d'[color=red:1vqjj0wa]inclure[/color:1vqjj0wa] un autre fichier, i.e. de mettre "à  la place" le texte d'un autre fichier.

Dans le cas présent, le programme inclut des [color=red:1vqjj0wa]librairies externes[/color:1vqjj0wa] car le nom des fichiers inclus ([color=blue:1vqjj0wa]stdio.h[/color:1vqjj0wa] et [color=blue:1vqjj0wa]stdlib.h[/color:1vqjj0wa]) sont entre '&lt;' et '&gt;'. Le compilateur va donc aller chercher les fichiers dans tous les dossiers décrits dans la [color=red:1vqjj0wa]variable d'environnement[/color:1vqjj0wa] PATH (chemin en français), à  la différence d'une directive [color=blue:1vqjj0wa]include[/color:1vqjj0wa] entre double quotes (") pour laquelle le compilateur chercherait le fichier dans le repertoire en cours ; bien entendu, il est également possible d'inclure des fichier .h (comme [color=red:1vqjj0wa]header[/color:1vqjj0wa] (en-tête en Français)) dans des sous-dossiers. Exemple :
[code:1vqjj0wa]#include &quot;my_file&#46;h&quot;
#include &quot;dossier\file2&#46;h&quot;
#include &quot;dossier/file3&#46;h&quot;[/code:1vqjj0wa]

Le premier [color=blue:1vqjj0wa]include[/color:1vqjj0wa] va inclure le fichier "my_file.h" du dossier du projet. Le deuxième va inclure le fichier "file2.h" du sous-dossier judicieusement appelé "dossier". Quant au troisième, il va inclure le fichier "file3" du même dossier. La différence tient dans le fait que le séparateur est un '/' (slash) au lieu d'un '\' (backslash ou encore antislash (bêrk !) ). Traditionellement, sous Windows, on utilise un backslash pour une arborescence, mais tous les autres [color=red:1vqjj0wa]OS[/color:1vqjj0wa] (Operating System - Système d'exploitation) uilisent un simple slash. Cependant, Windows convertit automatiquement les slash en backslash ; pour des raisons de [color=red:1vqjj0wa]portabilité du code[/color:1vqjj0wa] (le fait de porte un code d'un OS à  un autre), il est donc fortement conseillé de mettre des slash (en plus, c'est plus joli).

Une [color=red:1vqjj0wa]variable d'environnement[/color:1vqjj0wa] est, comme son nom l'indique une variable accessible par tous les programmes. En général, sous Windows, on n'ignore jusqu'à  leur existence pas car l'utilisateur "de base" n'en a pas l'utilité, mais elles sont bien là . Pour y accéder (sous Windows NT4/2K/XP), il faut aller dans : Panneau de configuration -&gt; Système -&gt; Onglet "Avancé" -&gt; Bouton "Variables d'environnement". Un conseil : N'Y TOUCHEZ PAS !!! Cela risquerait de rendre votre système complètement inutilisable.

[code:1vqjj0wa]int main&#40;&#41;
&#123;
  printf&#40;&quot;Hello world !\n&quot;&#41;;
  return EXIT_SUCCESS;
&#125;[/code:1vqjj0wa]
Attaquons maintenant la partie difficile.
[code:1vqjj0wa]int main&#40;&#41;
&#123;
  &#46;&#46;&#46;
&#125;[/code:1vqjj0wa]
Cela est ce que l'on appelle une [color=red:1vqjj0wa]fonction[/color:1vqjj0wa]. En C, la fonction [color=blue:1vqjj0wa]main[/color:1vqjj0wa] est obligatoire, son contenu est ce que va faire le programme. Si cette fonction est absente, le programme ne peut pas compiler. Pour bien comprendre le concept de fonction, il est préférable de prendre un modèle plus "général" :
[code:1vqjj0wa]int ajout &#40;int a, int b&#41;
&#123;
  return a+b;
&#125;[/code:1vqjj0wa]

[code:1vqjj0wa]int ajout &#40;int a, int b&#41;[/code:1vqjj0wa]
Il s'agit de l'[color=red:1vqjj0wa]en-tête[/color:1vqjj0wa] de la fonction, la seule chose dont un utilisateur externe a besoin de savoir. Cette fonction s'apelle [color=blue:1vqjj0wa]ajout[/color:1vqjj0wa], elle prend en paramètres 2 entiers (c'est le (int a, int b), [color=red:1vqjj0wa]int[/color:1vqjj0wa] est l'abréviation de integer (entier) ) judicieusement appelés a et b et renvoie un autre entier (c'est le premier int, en début de ligne).

[code:1vqjj0wa]&#123;
  return a+b;
&#125;[/code:1vqjj0wa]
Il s'agit du corps de la fonction. Il contient son code. Il n'y a ici qu'une seule ligne de code. Le [color=red:1vqjj0wa]mot-clé[/color:1vqjj0wa] ou [color=red:1vqjj0wa]mot réservé[/color:1vqjj0wa] [color=blue:1vqjj0wa]return[/color:1vqjj0wa] indique la valeur de retour de la fonction. Dans le cas présent, [color=blue:1vqjj0wa]ajout[/color:1vqjj0wa] renvoie le résultat de l'addition de a par b, tout simplement.

Mais revenons à  nos moutons (Bêêêêhh !).
La fonction [color=blue:1vqjj0wa]main[/color:1vqjj0wa] ne prend aucun paramètre (ce n'est pas toujours le cas) et renvoie un entier qui est le [color=red:1vqjj0wa]code de sortie du programme[/color:1vqjj0wa].

[code:1vqjj0wa]&#123;
  printf&#40;&quot;Hello world !\n&quot;&#41;;
  return EXIT_SUCCESS;
&#125;[/code:1vqjj0wa]

[code:1vqjj0wa]printf&#40;&quot;Hello world !\n&quot;&#41;;[/code:1vqjj0wa]
Cette ligne de code contient un appel à  la fonction printf de la [code:1vqjj0wa]bibliothèque d'entrée/sortie standard&#91;/color&#93;&#46; Toutes les fonctions, procédures et constantes de cette biliothèque sont déclarées dans le fichier &#91;color=blue&#93;stdio&#46;h&#91;/color&#93;&#46;

La fonction printf affiche une chaîne de caractère formatée (i&#46;e&#46; on peut lui indiquer d'afficher des entiers, des flottants, des caractères, des pointeurs ou n'importe quella variable ou constante de type standard) sur la &#91;color=red&#93;sortie standard&#91;/color&#93; &#58; la console&#46;

La partie située entre double-quotes (") est une &#91;color=red&#93;chaîne de caractères&#91;/color&#93; en C, concrètement, il s'agit d'un tableau de caractères codés en &#91;color=red&#93;ASCII&#91;/color&#93;, dont voici la table (un caractère est en fait un entier codé sur 8 bits) &#58;
&#91;img&#93;http&#58;//www&#46;lookuptables&#46;com/asciifull&#46;gif&#91;/img&#93;

Comme on peut le constater, les caractères n'utilisent que 7 bits &#58; le bit de poids fort (celui le plus à  gauche quand on écrit) est toujours à  0&#46; Si ce bit est à  1, on entre dans la table étendue qui dépend du système, il s'agit en général de l'&#91;color=red&#93;ISO8859-15&#91;/color&#93; (caractères accentués courants et symbole euro)&#46; Pour plus d'infos, votre ami dévoué Wikipedia &#58; &#91;url&#93;http&#58;//fr&#46;wikipedia&#46;org/wiki/ISO_8859-15&#91;/url&#93;&#46; Notez qu'il existe d'autres manières d'encoder les caractères, en particulier l'&#91;color=red&#93;Unicode&#91;/color&#93;, très utilisé pour les jeux de caractères comportant un grand nombre de symboles (Japonais, chinois&#46;&#46;&#46;)&#46; Mais l'&#91;color=red&#93;ASCII&#91;/color&#93;, malgré ses limites, reste le plus utilisé&#46;

'\n', bien que composé de 2 caractères est un caractère à  part entière &#58; il symbolise un &#91;color=red&#93;retour chariot&#91;/color&#93;&#46;

&#91;code&#93;return EXIT_SUCCESS;&#91;/code&#93;
Comme vu plus haut, il s'agit de la fin de la fonction &#58; ce qu'elle retourne&#46; Ici, elle renvoie la valeur &#91;color=blue&#93;EXIT_SUCCESS&#91;/color&#93; définie dans la &#91;color=red&#93;librairie standard&#91;/color&#93;, dont les fonctions, procédures et constantes qui regroupent notamment la gestion de la mémoire sont définies dans &#91;color=blue&#93;stdlib&#46;h&#91;/color&#93;&#46;

&#91;color=blue&#93;EXIT_SUCCESS&#91;/color&#93; est une constante définie dans ce fichier, c'est le code de sortie d'un programme se terminant normalement, par opposition à  &#91;color=blue&#93;EXIT_FAILURE&#91;/color&#93; qui indique qu'une erreur s'est produite, en théorie&#46;&#46;&#46; En effet, on n'utilise que rarement dans les faits ces 2 valeurs et on préfère écrire directement &#91;color=blue&#93;return 0&#91;/color&#93; ou &#91;color=blue&#93;return 1&#91;/color&#93; (c'est ce que valent ces constantes, si ma mémoire est bonne)&#46;

Une constante est définie à  l'aide d'une directive de compilation &#58;
&#91;code&#93;#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1[/code:1vqjj0wa]
Au moment de la comspilation, le compilateur va commence par remplace toutes les occurences de [color=blue:1vqjj0wa]EXIT_SUCCESS[/color:1vqjj0wa] par 0 et toutes les occurences de [color=blue:1vqjj0wa]EXIT_FAILURE[/color:1vqjj0wa] par 1.



Bien ! C'est tout pour aujourd'hui, je m'attaquerai à  la chaîne de comspilation en elle-même une autre fois. il me semblait important de bien expliquer d'abord rapidement (TRES rapidement !) le fonctionnement et la syntaxe du langage C.