Premiers pas de C
Installez l'environnement de programmation en C/C++ sur Linux ou Windows puis éditez, compilez, exécutez et déboguez votre premier programme.
Installation
Linux
Le compilateur gcc
de GNU est normalement déjà installé. Vérifiez en tapant la commande gcc -v
.
Vérifiez aussi que la commande make
et le débogueur gdb
sont sur votre système.
Si nécessaire, installez l'environnement de programmation en C avec la commande suivante :
$ sudo apt-get install gcc gdb make
Pour installer l'environnement de programmation en C++, tapez la commande suivante :
$ sudo apt-get install g++
Installez les pages du manuel pour développeur :
$ sudo apt-get install manpages manpages-dev
Si vous préférez lire la traduction en français :
$ sudo apt-get install manpages-fr manpages-fr-dev
Vérifiez :
$ man 3 printf
NOTE : Le paramètre 3
accède directement à la section 3 du manuel sur les appels à la bibliothèque. Essayez man man
pour plus d'explications.
Windows
Installez MinGW (Minimalist GNU for Windows) dans C:\MinGW. Suivez les instructions d'installation de MinGW et de MSYS avec mingw-get. Téléchargez le paquet w32API et copiez les dossiers appelés include et lib dans C:\MinGW.
Après que MinGW a été installé, créez un raccourci sur le bureau. Configurez la cible pour qu'elle exécute l'ordre C:\MinGW\msys\1.0\msys.bat
. Renommez le raccourci Msys . Changez l'icône en sélectionnant cmd.exe dans le dossier %windir%\system.
Si vous préférez le processeur de commandes de Windows, ouvrez le Panneau de configuration
, double-cliquez sur Système
puis cliquez sur l'onglet Avancé
et enfin sur le bouton Variables d'environnement
. Modifiez la variable PATH
qui donne la liste des dossiers contenant des commandes. Ajoutez les dossiers C:\MinGW\bin et C:\MinGW\msys\1.0\bin en séparant bien chaque nom de dossier par un ; (POINT-VIRGULE).
Démarrez un processeur de commandes et vérifiez que la commande gcc
du compilateur C est bien trouvée :
C:\Documents and Settings\frasq\Mes documents\C>gcc -v
Vous pouvez aussi installer la toute dernière version gratuite de l'environnement de développement C/C++ de Microsoft disponible ici.
Après que le Toolkit a été installé, créez un fichier appelé env.bat dans votre dossier C avec le contenu suivant :
- @ECHO off
- ECHO Microsoft Visual C++ Toolkit (PATH INCLUDE LIB)
- REM The paths to Microsoft Visual Studio and Microsoft SDKs\Windows depend on the version of the Toolkit.
- SET PATH=%ProgramFiles%\Microsoft Visual Studio 10.0\VC\bin;%ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE;%SystemRoot%\system32;%SystemRoot%
- SET INCLUDE=%ProgramFiles%\Microsoft Visual Studio 10.0\VC\include
- SET LIB=%ProgramFiles%\Microsoft Visual Studio 10.0\VC\lib;C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib
Ce fichier regroupe une série de commandes qui initialisent les variables d'environnement PATH, INCLUDE et LIB. PATH liste les répertoires contenant des commandes comme cl
, link
ou make
du Toolkit, et les commandes de Windows. INCLUDE indique au compilateur où se trouvent les fichiers inclus dans un code source. LIB donne la liste des répertoires contenant des librairies de fichiers compilés nécessaires à la fabrication des exécutables. Adaptez env.bat selon la version du Toolkit installée sur votre système.
- ECHO Git (PATH HOME)
- SET PATH=%PATH%;%ProgramFiles%\Git\bin
- SET HOME=%HOMEPATH%
Le reste du fichier permet d'accéder à Git et définit la variable HOME utile à beaucoup de programmes portés d'Unix.
Créez un raccourci dans le même dossier. Configurez la cible pour qu'elle exécute l'ordre %comspec% /k env.bat
. Cette ligne lance le processeur de commandes en lui demandant de commencer par exécuter le contenu du fichier env.bat.
Renommez le raccourci Visual C++ Toolkit Command Prompt.
Double-cliquez sur le raccourci pour lancer le processeur de commandes. Vérifiez que la commande cl
du compilateur C est bien dans le PATH
:
C:\Documents and Settings\frasq\Mes documents\C>echo %PATH%
C:\Program Files\Microsoft Visual Studio 9.0\VC\bin;C:\Program Files\Microsoft Visual Stud
io 9.0\Common7\IDE;C:\WINDOWS\system32;C:\WINDOWS
C:\Documents and Settings\frasq\Mes documents\C>cl
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
usage: cl [ option... ] filename... [ /link linkoption... ]
Premier programme
Créez un dossier appelé C où vous enregistrerez tous vos programmes en C. Créez un autre dossier appelé Hello dans C.
Démarrez un éditeur de texte - gedit
pour Linux, textpad
ou notepad++
pour Windows ou encore mieux, utilisez Eclipse - et créez le fichier hello.c dans le dossier C/Hello avec le contenu suivant :
- #include <stdio.h>
- main() {
- printf("Hello from C!\n");
- return 0;
- }
NOTE : Ne tapez pas les numéros de ligne.
Linux
Compilez le programme :
$ cd
$ cd C/Hello
$ ls
hello.c
$ gcc -o hello hello.c
$ ls
hello hello.c
L'option -o hello
ordonne à gcc
de nommer l'exécutable hello
.
Sans cette option, l'exécutable est nommé a.out
.
$ gcc hello.c
$ ls
a.out hello hello.c
$ rm a.out
Exécutez le programme :
$ ./hello
Hello from C!
Windows
Avec MinGW, vous travaillez exactement comme sous Linux et vous compilez le programme avec gcc
. Si vous avez opté pour le Toolkit de Microsoft, compilez le programme avec cl
:
C:\Documents and Settings\frasq\Mes documents\C\Hello>cl hello.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.10.3077 for 80x86
Copyright (C) Microsoft Corporation 1984-2002. All rights reserved.
hello.c
Microsoft (R) Incremental Linker Version 7.10.3077
Copyright (C) Microsoft Corporation. All rights reserved.
/out:hello.exe
hello.obj
C:\Documents and Settings\frasq\Mes documents\C\Hello>hello
Hello from C!
Essayez le même programme en C++ :
- #include <iostream>
- int main() {
- std::cout << "Hello" << " " << "from C++!" << std::endl;
- }
Compilez et exécutez le programme :
$ cd
$ cd C/Hello
$ ls
hello.cpp
$ g++ -o hello hello.cpp
$ ./hello
Hello from C++!
Fabriquer un programme
Créez un fichier appelé makefile dans le dossier C/Hello avec le contenu suivant :
- ALL=hello
- SRCS=hello.c
- OBJS=$(SRCS:.c=.o)
- CC=gcc
- CFLAGS=-DDEBUG -g
- LDFLAGS=
- all: $(ALL)
- $(ALL): $(OBJS)
- $(CC) $^ -o $@ $(LDFLAGS)
- .PHONY: clean wipe
- clean:
- rm -f $(OBJS)
- wipe: clean
- rm -f $(ALL)
$ ls
hello hello.c makefile
$ make clean
rm -f hello.o
$ make wipe
rm -f hello.o
rm -f hello
$ ls
hello.c
$ make
gcc -DDEBUG -g -c -o hello.o hello.c
gcc hello.o -o hello
$ rm hello
$ make
gcc hello.o -o hello
$ touch hello.c
$ make
gcc -DDEBUG -g -c -o hello.o hello.c
gcc hello.o -o hello
Le déroulement du makefile montre comment gcc
est exécuté une première fois avec l'option -c
pour seulement compiler le fichier source hello.c et produire le code objet hello.o et une seconde fois pour lier le fichier objet hello.o avec la librairie C et produire l'exécutable hello. Si on détruit hello, make
ne recompile pas hello.c pour refabriquer l'exécutable. Si hello.c change, il est bien recompilé. L'option -g
demande au compilateur d'ajouter le code nécessaire pour exécuter le programme en mode debug avec gdb
.
Sous Windows, si vous utilisez le Toolkit de Microsoft, la commande make
s'appelle nmake
et le fichier en entrée est un peu différent.
- APP=hello
- CC=cl
- LINK=link
- all: $(APP).exe
- $(APP).exe: $(APP).obj
- $(LINK) $(APP).obj /out:$(APP).exe
- clean:
- del *.obj
- wipe: clean
- del $(APP).exe
C:\Documents and Settings\frasq\Mes documents\C\Hello>nmake /f makefile.nmk
Les variations pour un programme en C++:
- APP=hello
- CPP=g++
- CPPFLAGS=-DDEBUG -g
- $(APP): $(APP).o
- $(CPP) $(APP).o -o $(APP)
- .PHONY: clean wipe
- clean:
- rm -f *.o
- wipe: clean
- rm -f $(APP)
- APP=hello
- CPP=cl
- CPPFLAGS=/EHsc
- LINK=link
- $(APP).exe: $(APP).obj
- $(LINK) $(APP).obj /out:$(APP).exe
- clean:
- del *.obj
- wipe: clean
- del $(APP).exe
Déboguer un programme
Pour analyser l'exécution d'un programme pas à pas, compilez-le en mode déboggage en passant l'option -g
à gcc
:
$ gcc -g -o hello hello.c
Lancez le déboggeur gdb
avec en argument l'exécutable :
$ gdb hello
GNU gdb (GDB) 7.1-ubuntu
Copyright (C) 2010 Free Software Foundation, Inc.
...
Reading symbols from /home/frasq/C/Hello/hello...done.
(gdb)
NOTE : Si gcc
ne trouve pas de symboles dans hello
, assurez-vous de bien passer l'option -g
à gcc
sans l'option -s
.
Placez un point d'arrêt avant le démarrage du programme :
(gdb) break main
Breakpoint 1 at 0x80483ed: file hello.c, line 4.
Lancez le programme :
(gdb) run
Starting program: /home/frasq/C/Hello/hello
Breakpoint 1, main () at hello.c:4
4 printf("Hello from C!\n");
Listez le code source du programme au point d'arrêt :
(gdb) list 4
1 #include <stdio.h>
2
3 main() {
4 printf("Hello from C!\n");
5 return 0;
6 }
Exécutez la ligne de code suivante :
(gdb) step
Hello from C!
5 return 0;
Continuez l'exécution du programme jusqu'à la fin :
(gdb) cont
Continuing.
Program exited normally.
Quittez gdb
:
(gdb) quit
$
Commentaires