Licence CC 0

Rencontre avec le C

Dernière mise à jour :

Maintenant que les présentations sont faites, il est temps de découvrir les outils nécessaires pour programmer en C. Le strict minimum pour programmer se résume en trois points :

  • un éditeur de texte (à ne pas confondre avec un traitement de texte comme Microsoft Word ou LibreOffice Writer) : ce logiciel va servir à l’écriture du code source. Techniquement, n’importe quel éditeur de texte suffit, mais il est souvent plus agréable d’en choisir un qui n’est pas trop minimaliste ;
  • un compilateur : c’est le logiciel le plus important puisqu’il va nous permettre de transformer le code écrit en langage C en un fichier exécutable ;
  • un débogueur (ou debugger en anglais) : ce logiciel vous sera très utile en cas de problèmes pour rechercher d’éventuelles erreurs dans votre programme.

À partir de là, il existe deux solutions : utiliser ces trois logiciels séparément ou bien les utiliser au sein d’un environnement intégré de développement (abrégé EDI). Dans le cadre de ce cours, nous avons choisi la première option, majoritairement dans un souci de transparence et de simplicité. En effet, si les EDI peuvent être des compagnons de choix, ceux-ci sont avant tout destinés à des programmeurs expérimentés et non à de parfaits débutants.

Windows

Le compilateur

Nous vous proposons de télécharger MinGW, qui est une adaptation pour Windows du compilateur GCC.

Rendez-vous sur le site de MinGW dans la section « download » et cliquez sur le lien en haut de la page « looking for the latest version ? Download mingw-get-install-xxxxxxxx.exe (xxx.x kB) ».

Exécutez le programme, cliquez sur « install », décochez la case « also install support for graphical user interface » et enfin cliquez sur « continue ».

Ceci étant fait, il nous faut désormais créer une variable d’environnement afin de spécifier à notre invite de commande le chemin vers les différents composants de MinGW.

  • sous Windows XP et antérieur, faites un clic-droit sur « poste de travail » puis choisissez « propriétés ». Dans la fenêtre qui s’ouvre, cliquez sur « avancés » puis sur « variables d’environnement » ;
  • sous Windows Vista, Seven, faites un clic-droit sur l’icône « ordinateur » dans le menu « démarrer » ou bien sur « poste de travail ». Ensuite, cliquez sur « paramètres systèmes avancés ». Dans la nouvelle fenêtre qui s’ouvre, cliquez sur « variables d’environnement » ;
  • sous Windows 8, rendez-vous dans le panneau de configuration à la rubrique « système ». Cliquez sur « avancé » puis sur « variables d’environnement ».

Dans la partie « utilisateur courant », créez une nouvelle variable nommée PATH et donnez lui pour valeur : %PATH%;C:\MinGW\bin (le chemin après le point-virgule peut varier en fonction de où vous avez décidés d’installer MinGW, l’important est de bien avoir le répertoire bin à la fin).

À présent, exécutez l’invite de commandes (il est situé dans les accessoires sous le même nom) et entrez la ligne suivante.

1
mingw-get install gcc gdb

Le compilateur et le débogueur sont à présent installés. À présent, lancez le bloc-note et placez y le texte suivant.

1
2
@echo off
gcc -D__USE_MINGW_ANSI_STDIO=1 -Wall -Wextra -pedantic -std=c89 -fno-common -fno-builtin %*

Ensuite, enregistrez ce fichier dans le dossier « bin » de MinGW (par défaut C:\MinGW\bin) sous le nom « zcc.bat » en choisissant « autres types de fichiers ».

Maintenant, rendez-vous dans le menu des accessoires, réalisez un clic droit sur l’invite de commande et sélectionnez « propriétés ». Dans l’onglet « raccourci », remplacer le champ « cible » par « %windir%\system32\cmd.exe /k "chcp 65001" ». Enfin, dans l’onglet « police », choisissez « Consolas » ou « Lucida Console » et adaptez la taille suivant vos envies.

L’éditeur de texte

L’éditeur de texte va nous permettre d’écrire notre code source et de l’enregistrer. L’idéal est d’avoir un éditeur de texte facile à utiliser et pas trop minimaliste. Si jamais vous avez déjà un éditeur de texte et que vous l’appréciez, n’en changez pas, il fera sûrement l’affaire.

Si vous n’avez pas d’idée, nous vous conseillons Notepad++ qui est simple, pratique et efficace. Pour le télécharger, rendez-vous simplement dans la rubrique « Téléchargements » du menu principal.

Veillez-bien à ce que l’encodage de votre fichier soit « UTF-8 (sans BOM) » (voyez le menu éponyme à cet effet).

Introduction à la ligne de commande

La ligne de commande, derrière son aspect rustre et archaïque, n’est en fait qu’une autre manière de réaliser des tâches sur un ordinateur. La différence majeure avec une interface graphique étant que les instructions sont données non pas à l’aide de boutons et de cliques de souris, mais exclusivement à l’aide de texte. Ainsi, pour réaliser une tâche donnée, il sera nécessaire d’invoquer un programme (on parle souvent de commandes) en tapant son nom.

La première chose que vous devez garder à l’esprit, c’est le dossier dans lequel vous vous situez. Celui-ci est indiqué au tout début de chaque ligne et se termine par le symbole >. Ce dossier est celui dans lequel les actions (par exemple la création d’un répertoire) que vous demanderez seront réalisées. Normalement, par défaut, vous devriez vous situez dans le répertoire C:\Users\Utilisateur (où Utilisateur correspond à votre nom d’utilisateur). Ceci étant posé, voyons quelques commandes basiques.

La commande mkdir (pour make directory) vous permet de créer un nouveau dossier. Pour ce faire, tapez mkdir suivi d’un espace et du nom du nouveau répertoire. Par exemple, vous pouvez créer un dossier « Programmation » comme suit.

1
C:\Users\Utilisateur> mkdir Programmation

La commande dir (pour directory) vous permet de lister le contenu d’un dossier. Vous pouvez ainsi vérifier qu’un nouveau répertoire a bien été créé.

1
2
3
4
5
6
C:\Users\Utilisateur> dir
Répertoire de C:\Users\Utilisateur

30/03/2015  17:00    <REP>          .
30/03/2015  17:00    <REP>          ..
30/03/2015  17:00    <REP>          Programmation

Le résultat ne sera pas forcément le même que ci-dessus, cela dépend du contenu de votre dossier. L’essentiel est que vous retrouviez bien le dossier que vous venez de créer.

Enfin, la commande cd (pour change directory) vous permet de vous déplacer d’un dossier à l’autre. Pour ce faire, spécifiez simplement le nom du dossier de destination.

1
2
C:\Users\Utilisateur> cd Programmation
C:\Users\Utilisateur\Programmation>

Le dossier spécial « .. » représente le répertoire parent. Il vous permet donc de revenir en arrière dans la hiérarchie des dossiers. Le dossier spécial « . » représente quant à lui le dossier courant.

Voilà, avec ceci, vous êtes fin prêt pour compiler votre premier programme. Vous pouvez vous rendre à la deuxième partie de ce chapitre.

GNU/Linux, *BSD et autres Unixoïdes

Le compilateur

Suivant le système que vous choisissez, vous aurez ou non le choix entre différents compilateurs. Si vous n’avez pas d’idée, nous vous conseillons d’opter pour GCC en installant le paquet éponyme à l’aide de votre gestionnaire de paquet. Également, vous pouvez installer le paquet « gdb » qui est un débogueur.

Configuration

Ceci dépend de votre interpréteur de commande. Pour savoir quel est celui dont vous disposez, ouvrez un terminal (le plus souvent, vous pouvez y accéder via la catégorie « accessoires » de votre menu principal) et entrez la commande suivante.

1
echo $SHELL

bash

Exécutez la commande suivante depuis votre dossier personnel (vous y êtes par défaut au lancement de l’invite de commande).

1
echo "alias zcc='gcc -Wall -Wextra -pedantic -std=c89 -fno-common -fno-builtin'" >> .bashrc

csh ou tcsh

Exécutez la commande suivante depuis votre dossier personnel (vous y êtes par défaut au lancement de l’invite de commande).

1
echo "alias zcc 'gcc -Wall -Wextra -pedantic -std=c89 -fno-common -fno-builtin'" >> .cshrc # (ou .tcshrc)

ksh, zsh ou sh

Exécutez les commandes suivante depuis votre dossier personnel (vous y êtes par défaut au lancement de l’invite de commande).

1
2
echo "alias zcc='gcc -Wall -Wextra -pedantic -std=c89 -fno-common -fno-builtin'" >> .kshrc # (ou .zshrc ou .shrc)
echo "export ENV=$HOME/.kshrc" >> .profile # (ou .zshrc ou .shrc)

L’éditeur de texte

Ce serait un euphémisme de dire que vous avez l’embarras du choix. Il existe une pléthore d’éditeurs de texte fonctionnant en ligne de commande ou avec une interface graphique, voire les deux.

Pour n’en citer que quelques-uns, en ligne de commande vous trouverez par exemple : Vim et Emacs (les deux monstres de l’édition), Nano ou Joe. Côté graphique, vous avez entre autres : Gedit, Mousepad et Kate.

Introduction à la ligne de commande

La ligne de commande, derrière son aspect rustre et archaïque, n’est en fait qu’une autre manière de réaliser des tâches sur un ordinateur. La différence majeure avec une interface graphique étant que les instructions sont données non pas à l’aide de boutons et de cliques de souris, mais exclusivement à l’aide de texte. Ainsi, pour réaliser une tâche donnée, il sera nécessaire d’invoquer un programme (on parle souvent de commandes) en tapant son nom.

La première chose que vous devez garder à l’esprit, c’est le dossier dans lequel vous vous situez. Suivant le terminal que vous employez, celui-ci est parfois indiqué en début de ligne et terminé par le symbole $ ou %. Ce dossier est celui dans lequel les actions (par exemple la création d’un répertoire) que vous demanderez seront exécutées. Normalement, par défaut, vous devriez vous situez dans le répertoire : /home/utilisateur (où utilisateur correspond à votre nom d’utilisateur). Ceci étant posé, voyons quelques commandes basiques.

La commande pwd (pour print working directory) vous permet de connaître le répertoire dans lequel vous êtes.

1
2
$ pwd
/home/utilisateur

La commande mkdir (pour make directory) vous permet de créer un nouveau dossier. Pour ce faire, tapez mkdir suivi d’un espace et du nom du nouveau répertoire. Par exemple, vous pouvez créer un dossier « programmation » comme suit :

1
$ mkdir programmation

La commande ls (pour list) vous permet de lister le contenu d’un dossier. Vous pouvez ainsi vérifier qu’un nouveau répertoire a bien été créé.

1
2
$ ls
programmation

Le résultat ne sera pas forcément le même que ci-dessus, cela dépend du contenu de votre dossier. L’essentiel est que vous retrouviez bien le dossier que vous venez de créer.

Enfin, la commande cd (pour change directory) vous permet de vous déplacer d’un dossier à l’autre. Pour ce faire, spécifiez simplement le nom du dossier de destination.

1
2
3
$ cd programmation
$ pwd
/home/utilisateur/programmation

Le dossier spécial « .. » représente le répertoire parent. Il vous permet donc de revenir en arrière dans la hiérarchie des dossiers. Le dossier spécial « . » représente quant à lui le dossier courant.

Voilà, avec ceci, vous êtes fin prêt pour compiler votre premier programme. Vous pouvez vous rendre à la deuxième partie de ce chapitre.

Mac OS X

Le compilateur

Allez dans le dossier /Applications/Utilitaires et lancez l’application « terminal.app ». Une fois ceci fait, entrez la commande suivante :

1
xcode-select --install

et cliquez sur « installer » dans la fenêtre qui apparaît. Si vous rencontrez le message d’erreur ci-dessous, cela signifie que vous disposez déjà des logiciels requis.

1
Impossible d’installer ce logiciel car il n’est pas disponible actuellement depuis le serveur de mise à jour de logiciels.

Si vous ne disposez pas de la commande indiquée, alors rendez-vous sur le site de développeur d’Apple : Apple developer connection. Il faudra ensuite vous rendre sur le « mac dev center » puis, dans « additional download », cliquez sur « view all downloads ». Quand vous aurez la liste, il vous suffit de chercher la version 3 de Xcode (pour Leopard et Snow Leopard) ou 2 pour les versions antérieures (Tiger). Vous pouvez aussi utiliser votre CD d’installation pour installer Xcode (sauf pour Lion).

Configuration

Voyez ce qui est dit pour GNU/Linux, *BSD et les autres Unixoïdes.

L’éditeur de texte

Comme pour les autres Unixoïdes, vous trouverez un bon nombres d’éditeurs de texte. Si toutefois vous êtes perdu, nous vous conseillons TextWrangler ou Smultron.

Introduction à la ligne de commande

Référez-vous à l’introduction dédiée à GNU/Linux, *BSD et les autres Unixoïdes.

Notre cible

Avant de commencer à programmer, il nous faut aussi définir ce que nous allons programmer, autrement dit le type de programme que nous allons réaliser. Il existe en effet deux grands types de programmes : les programmes graphiques et les programmes en console.

Les programmes graphiques sont les plus courants et les plus connus puisqu’il n’y a pratiquement qu’eux sous Windows ou Mac OS X par exemple. Vous en connaissez sans doute énormément tel que les lecteurs de musique, les navigateurs Internet, les logiciels de discussions instantanées, les suites bureautiques, les jeux vidéos, etc. Ce sont tous des programmes graphiques, ou programmes GUI. En voici un exemple sous GNU/Linux.

L’éditeur d’images vectorielles Inkscape est un programme graphique

Cependant, écrire ce genre de programmes demande beaucoup de connaissances, ce qui nous manque justement pour l’instant. Aussi, nous allons devoir nous rabattre sur le deuxième type de programme : les programmes en console.

Les programmes console sont les premiers programmes et sont apparus en même temps que l’écran. Ils étaient très utilisés dans les années 1970/1980 (certains d’entre vous se souviennent peut-être de MS-DOS), mais ont fini par être remplacés par une interface graphique avec la sortie de Mac OS et de Windows. Cependant, ils existent toujours et redeviennent quelque peu populaires chez les personnes utilisant GNU/Linux ou un *BSD.

Voici un exemple de programme en console (il s’agit de GNU Chess, un jeu d’échecs performant entièrement en ligne de commande).

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
White (1) : d4
1. d4

black  KQkq  d3
r n b q k b n r 
p p p p p p p p 
. . . . . . . . 
. . . . . . . . 
. . . P . . . . 
. . . . . . . . 
P P P . P P P P 
R N B Q K B N R 

Thinking...

white  KQkq
r n b q k b . r 
p p p p p p p p 
. . . . . n . . 
. . . . . . . . 
. . . P . . . . 
. . . . . . . . 
P P P . P P P P 
R N B Q K B N R 


My move is : Nf6
White (2) :

Ce sera le type de programme que nous allons apprendre à créer. Rassurez-vous, quand vous aurez fini le cours, vous aurez les bases pour apprendre à créer des programmes graphiques. Tout est possible.

Première rencontre

Bien, il est à présent temps d’écrire et de compiler notre premier programme ! Pour ce faire, ouvrez votre éditeur de texte et entrez les lignes suivantes.

1
2
3
4
int main(void)
{
    return 0;
}

Ensuite, enregistrez ce fichier dans un dossier de votre choix et nommez-le « main.c ». Une fois ceci fait, rendez-vous dans le dossier contenant le fichier à l’aide d’un terminal et exécutez la commande ci-dessous.

1
zcc main.c

Si vous n’êtes pas sous Windows et que vous utilisez l’interprétateur de commande sh, ksh ou zsh, la commande zcc ne sera connue de votre invite de commande qu’une fois que vous aurez ouvert une nouvelle session. En attendant, vous pouvez entrez la commande alias zcc='gcc -Wall -Wextra -pedantic -std=c89 -fno-common -fno-builtin' dans votre terminal pour que cela fonctionne.

Si tout se passe bien, vous devriez obtenir un fichier « a.exe » sous Windows et un fichier « a.out » sinon. Vous pouvez exécutez ce programme en tapant a.exe ou ./a.out.

Je viens de le faire, mais il ne se passe rien…

Cela tombe bien, c’est exactement ce que fait ce programme : rien. :p
Voyons cela plus en détails.

Ce bout de code est appelé une fonction. Un programme écrit en C n’est composé pratiquement que de fonctions qui sont des morceaux de programme donnant des instructions à l’ordinateur. Elles ont toujours un objectif, une fonction particulière, par exemple calculer la racine carrée d’un nombre.

Notre fonction s’appelle main (prononcez « mèïne »). C’est la fonction de base commune à tous les programmes en C, le programme commence et finit toujours par elle.

Une fonction est délimitée par des accolades ({ et }). Après les accolades, il n’y a rien, car pour l’instant nous n’avons que la fonction main.

Le nom de la fonction est précédé du mot-clé int qui est un nom de type (nous verrons cette notion au chapitre suivant) qui indique que la fonction retourne une valeur entière. À l’intérieur des parenthèses, il y a le mot void qui signifie que la fonction ne reçoit pas de paramètres, nous y reviendrons en temps voulu.

Enfin, la fonction se termine par l’instruction return 0 qui signifie en l’occurrence que la fonction a terminé son travail (bon, pour l’instant elle n’en a pas, mais nous y arriverons rapidement) et que tout s’est bien passé.

Les commentaires

Il est souvent nécessaire de commenter son code source pour décrire des passages un peu moins lisibles ou tout simplement pour offrir quelques compléments d’information au lecteur du code. Nous en utiliserons souvent dans la suite de ce cours pour rendre certains exemples plus parlant.

Un commentaire est ignoré par le compilateur, il disparait et n’est pas présent dans l’exécutable. Il ne sert qu’au programmeur et aux lecteurs du code.

Un commentaire en C est écrit entre les signes /* et */ et peut très bien prendre plusieurs lignes.

1
/* Ceci est un commentaire. */
1
2
/* Ceci est un commentaire qui
   prend plusieurs lignes. */

Voilà, vous avez enfin fait la connaissance du C à travers du code. Certes, nous n’avons vu qu’un petit code et avons seulement survolé les différents éléments, mais il n’empêche que cela représente certainement beaucoup de nouveautés pour vous. Relisez donc ce chapitre à tête reposée si nécessaire.