Programmer en C

De Wiki de la communauté Mandriva.

Cette page a pour objectif de vous expliquer les possibilités de programmer en C ou C++ sous Linux.


Sommaire

EDI

Les EDI (Environnement de Développement Intégré, en anglais IDE) peuvent vous assister et réaliser automatiquement pour vous un ensemble de tâches auxiliaires.

Vous pouvez utiliser un EDI comme CodeBlocks ou KDevelop. Les EDI ont l'avantage d'assister dans la programmation en rappelant des syntaxes, en vous aidant à organiser vos projets. Ces programmes regroupent à la fois l'éditeur de texte, le compilateur et le débogueur.

Les EDI les plus connus sont KDevelop (orienté KDE), Anjuta DevStudio (orienté GNOME), Code::BlocksImage:Wikipedia-icon.png et Eclipse (orienté Java, mais qui permet de développer en C ou C++ en installant le paquetage eclipse-cdt).

L'inconvénient, c'est qu'ils sont parfois ardus pour un débutant. C'est pourquoi nous allons parler de la deuxième méthode qu'il est de toute façon nécessaire de bien comprendre, même si vous utilisez un EDI.

La méthode ancestrale

Voyons une autre méthode pour programmer. Celle-ci peut sembler dépasser, désuète, mais elle a le mérite de faire les choses simplement. Nous savons tous qu'il faut bien écrire le code quelque part. Nous allons donc utiliser un éditeur de texte.

L'éditeur de texte

Emacs est un éditeur très puissant, supportant de nombreux langage dont le C et le C++.

Citons encore Kate et Kwrite, pour KDE, ou Gedit, pour GNOME.

En nommant les fichiers avec une extension .c ou .cpp, selon que c'est du C ou du C++, les éditeurs s'adapteront pour colorer le texte, ce qui est bien plus confortable visuellement parlant.

Le compilateur

Une fois votre programme codé, vous devez le compiler, c'est-à-dire le transcrire du langage humain en langage machine. Pour cela, vous devrez utilisez gcc pour le C et g++ pour le C++. L'installation se fait très simplement avec Image:drakrpm-icon.png drakrpm.

À noter !
Il arrive que l'on souhaite mélanger du C avec du C++, simplement parce que certaines choses en C++ sont plus faciles ou plus pratiques qu'en C. Comme le C++ englobe le C, vous pouvez utiliser votre compilateur C++.

Ouvrez donc une console et placez-vous dans le répertoire de votre projet.

Image:Konsole.png
[utilisateur@ordi ~]$ gcc main.c

Vous allez obtenir un fichier nommé a.out qui est l'exécutable. On le lance comme ceci :

Image:Konsole.png
[utilisateur@ordi ~]$ ./a.out

Si vous voulez donner un nom à votre exécutable, ajouter l'option -o :

Image:Konsole.png
[utilisateur@ordi ~]$ gcc main.c -o mon_programme

Pour tout bon projet qui se respecte, vous serez confronté un jour ou l'autre à la nécessité d'écrire votre programme dans plusieurs fichiers. Vous aurez toujours votre main.c mais aussi par exemple affichage.c, random.c... avec les fichiers d'en-tête (en anglais : headers) correspondant : affichage.h, random.h... qui contiennent les prototypes de vos fonctions. On compilera alors de la manière suivante :

Image:Konsole.png
[utilisateur@ordi ~]$ gcc main.c affichage.c random.c -o mon_programme

L'ordre n'ayant aucune importance.

En C++, la syntaxe est totalement transparente :

Image:Konsole.png
[utilisateur@ordi ~]$ g++ main.cpp affichage.cpp random.cpp -o mon_programme

d'innombrables options existent. Je vais en citer quelques-unes.

-W : le compilateur est plus exigeant sur les messages d'avertissements (warnings).

-Wall : le compilateur est extrêmement exigeant.

-lm : à utiliser lorsque vous avez des mathématiques dans votre programme.


Astuce !

Faut-il écrire à chaque fois cette ligne ? Non, fort heureusement, il y a des parades. Une première toute simple consiste à créer un fichier, que je nomme prog par exemple, avec les commandes à l'intérieur comme :

#! /bin/sh
gcc main.c affichage.c random.c -o mon_programme
./mon_programme 

Et en tapant :

Image:Konsole.png
[utilisateur@ordi ~]$ ./prog
ça compile et exécute.


On peut aller plus loin en créant un Makefile. Cf. les liens en bas de page.

Le débogueur

Le programme à déboguer est exécuté à travers le débogueur et s'exécute normalement. Le débogueur offre alors au programmeur la possibilité de contrôler l'exécution du programme, en lui permettant par divers moyens de stopper (mettre en pause l'exécution du programme) et d'observer par exemple le contenu des différentes variables en mémoire. L'état d'exécution peut alors être observé afin, par exemple, de déterminer la cause d'une défaillance.

Quand l'exécution d'un programme est stoppée, le débogueur affiche la position courante d'exécution dans le code source original si celui-ci est un source-level debugger ou symbolic debugger. Si c'est un low-level debugger ou un machine-language debugger, il montre la ligne désassemblée.

De nombreux debogueurs permettent, en plus de l'observation de l'état des registres processeurs et de la mémoire, de les modifier avant de rendre la main au programme débogué. Ils peuvent alors être utilisés pour localiser certaines protections logicielles et les désactiver, amenant à la conception d'un crack. Ainsi, certains logiciels, connaissant le fonctionnement des débogueurs et voulant empêcher de telles modifications, mettent en place des techniques antidébogage (anti debugging tricks).

Un debogueur connu et reconnu est gdb. Pour l'installer :

Pour installer gdb, lancez Image:drakrpm-icon.png Installer et désinstaller des logiciels et recherchez le paquet gdb.

Sélectionnez-le et cliquez sur Appliquer (Aide).

Vous pouvez également l'installer en utilisant la console en tant qu'administrateur avec la commande suivante : urpmi gdb

Voici un exemple d'utilisation de gdb et une page plus complète

Il existe de nombreux cours ou tutoriels sur la toile pour qu'il ne soit pas nécessaire de s'attarder sur son fonctionnement.

Liens