Code Search for Developers
 
 
  

intro_prog_linux.html from Gulus at Krugle


Show intro_prog_linux.html syntax highlighted

Introduction à la programmation sous Linux<br>
Version 1.2 (2000/11/24)<br>
<br>
Auteur: Mathieu Lutfy (mathieu@lowtech.dhs.org)<br>
<br>
<A HREF="intro_prog_linux.txt">Téléchargez la version texte</A><br>
<br>
1.0 Introduction<br>
================<br>
<br>
1.1 Préambule<br>
-------------<br>
<br>
Ce texte vise à donner une introduction générale aux ressources disponibles<br>
pour la programmation sous Linux. Ce texte prend pour acquis que le lecteur<br>
est familier avec les bases de la programmation, que ce soit sous MS Windows<br>
ou MacOS.<br>
<br>
Vos commentaires ou corrections sont les bienvenues à mathieu@lowtech.dhs.org.<br>
Vous pouvez retrouver la version originale et les versions futures de ce texte<br>
à l'adresse suivante: http://mtl2600.dhs.org/textes/intro_prog_linux.txt<br>
<br>
<br>
1.2 Redistribution<br>
------------------<br>
<br>
Vous pouvez librement redistribuer ce texte, en autant que vous respectez la<br>
"GNU Free Documentation License":<br>
<br>
Copyright (c) Mathieu Lutfy (mathieu@lowtech.dhs.org)<br>
Permission is granted to copy, distribute and/or modify this document<br>
under the terms of the GNU Free Documentation License, Version 1.1<br>
or any later version published by the Free Software Foundation;<br>
with no Invariant Sections, with no Front-Cover Texts, and with no<br>
Back-Cover Texts.  A copy of the license is included in the section<br>
entitled "GNU Free Documentation License".<br>
<br>
<br>
1.3 Conventions utilisées dans ce texte<br>
---------------------------------------<br>
<br>
- Les références sont dans la dernière section du texte. Lorsqu'une de ces<br>
références sera mentionnées dans le texte, il y aura un chiffre (ex: [1])<br>
indiquant le numéro de la référence en question.<br>
<br>
- Les sites web des applications mentionnées dans ce texte sont joints<br>
aux références (à la fin du texte).<br>
<br>
- Ce texte fait spécifiquement référence à Linux, mais la majorité des<br>
pricipes s'appliquent à Unix en général (FreeBSD, OpenBSD, SunOS/Solaris,<br>
etc..).<br>
<br>
- Lorsque utilisé en début de ligne, $ représente l'invite de la ligne de<br>
commande (prompt).<br>
<br>
<br>
1.4 Pourquoi programmer sous Linux ou Unix?<br>
-------------------------------------------<br>
<br>
Linux est un système d'exploitation multi-plateforme (IA32, IA64, PowerPC, <br>
Alpha, Sparc, etc..) à la fois flexible, stable et performant. De plus, Linux<br>
a été construit avec la même philosophie qu'Unix et il existe un standard<br>
de programmation nommé POSIX (Portable Operating System Standart) qui permet<br>
aux programmeurs de garder un niveau d'abstraction suffisamment élevé face<br>
au système d'exploitation.<br>
<br>
Le plus grand avantage découle probablement du fait que la philosophie<br>
dominante des usagers de Linux est celle du Logiciel Libre (Free Software). <br>
L'usager est donc libre d'adapter un programme à ses besoins, libre de<br>
participer au développement du logiciel et libre de copier le code source<br>
d'une application dans son application, en autant que les deux applications<br>
soient considérées des Logiciels Libres.<br>
<br>
Un texte incontournable sur le sujet est "The Art of Unix Programming"[1], <br>
par Eric S. Raymond.<br>
<br>
<br>
1.5 La guerre des éditeurs<br>
--------------------------<br>
<br>
Une bonne partie de ce document est consacrée aux éditeurs pour programmer.<br>
La raison est très simple, sous Linux, les gens sont généralement d'accord<br>
pour dire que GNU gcc est le meilleur compilateur, GNU gdb un excellent<br>
débogueur, etc.. mais étant donné que les usagers passent la majorité de<br>
leur temps à programmer dans un éditeur de texte, ils tendent à être très<br>
pointilleux sur le comportement de ce dernier.<br>
<br>
De plus, il y a deux types d'éditeurs: les IDE (Integrated Development<br>
Environment) et les programmes qui ne sont qu'un éditeur de texte. Les usagers<br>
de MS Windows sont probablement familiers avec l'IDE "MS Visual C++", et<br>
les éditeurs "simples" tels que Notepad ou Ultra Edit.<br>
<br>
De façon générale, les IDE ont une interface graphique au compilateur et<br>
au débogueur, tandis que l'éditeur ne fait qu'éditer et a une interaction<br>
limitée avec le compilateur et le débogueur (c'est le cas pour tous les<br>
éditeurs mentionnés dans cet article).<br>
<br>
Sous Linux, il n'y a pas un éditeur prédominant. Vi/Vim, Emacs, Code Crusador,<br>
KDevelop, NEdit, jEdit, etc.. ne sont que le début de la liste. De plus, le<br>
débat cherchant à définir "le meileur éditeur" est toujours d'actualité. À <br>
chaque année, des partisans de Vi et Emacs (deux vétérans dans le domaine de<br>
la programmation) se réunissent pour s'affronter dans une partie de "paintball".<br>
<br>
<br>
2.0 Survol des éditeurs graphiques<br>
==================================<br>
<br>
2.1 Note<br>
--------<br>
<br>
Trois points communs sont dans les sections ci-bas: sous-applications<br>
supportées, langages/syntaxes supportés et licence. J'ai eu de la difficulté<br>
à choisir une expression qui s'appliquait à tous les éditeurs concernant<br>
les deux premières sections. Je m'explique:<br>
<br>
- Sous-applications supportées: <br>
<br>
La majorité des IDE n'ont pas de compilateur ou débogueur intégré (tel<br>
qu'expliqué dans la section 1.5), mais auront une interface graphique pour<br>
simplifier la sortie texte des applications appelées, donnant l'impression<br>
que le compilateur est intégré. Une sous-application qui n'est pas listée<br>
signifie que pour l'exécuter, il faudra lancer la commande par un terminal.<br>
Beaucoup d'éditeurs font cela parce que leurs usagers préfèrent utiliser<br>
ces outils de la façon traditionnelle (et standard) plutôt que d'avoir une<br>
interface différente pour chaque éditeur.<br>
<br>
- Langages/syntaxes supportés:<br>
<br>
Ceci signifie que l'éditeur est capable de surligner et indenter le code.<br>
Si votre langage préféré n'est pas listé, cela signifie que l'éditeur<br>
agira comme un éditeur de texte ordinaire (à-la-Notepad), mais certaines<br>
fonctionalités seront quand même configurables.<br>
<br>
- Licence:<br>
<br>
Tous les logiciels dans ce texte sont des Logiciels Libres, c'est à dire<br>
que vous avez accès à leur code source et leur utilisation n'est pas limitée.<br>
Vous trouverez plus d'information sur les différentes licences "Libres"<br>
sur le site de GNU[2] et OpenSource[3] (ils ont des mentalitées divergentes,<br>
mais pour vous l'usager, ils sont équivalents).<br>
<br>
<br>
2.2 Code Crusader<br>
-----------------<br>
<br>
Inspiré par l'interface graphique de Metrowerks Code Warrior, Code Crusador<br>
est probablement un des éditeurs qui inclue le plus d'outils graphiques pour<br>
programmer, dont un débogueur graphique (Code Medic), un générateur de<br>
graphique pour illustrer graphiquement l'héritage des classes C++ et génère<br>
automatique les fichiers Makefile (pour automatiser la compilation), en plus<br>
des fonctionalités habituelles, soient la vérification et colorisation du<br>
code source, etc..<br>
<br>
Le seul défaut à cette application pourrait être un peu irritant. L'application<br>
a été écrite avec un API graphique nommé "JX Application Framework", dont<br>
l'apparence est loin d'être aussi attrayante que celles de GTK+/Gnome ou<br>
QT/KDE. Par contre, l'application est très rapide et ne consomme pas beaucoup<br>
de mémoire vive.<br>
<br>
- Sous-applications supportées: <br>
Fortran, bison, cc, CC, flex, gcc, g++, g77, KAI C++, make<br>
<br>
- Langages/syntaxes supportés:<br>
C, C++, HTML (voir leur site web pour plus d'informations, beaucoup d'autres<br>
langages sont partiellement supportés)<br>
<br>
- Licence:<br>
New Planet Software Library Open Source License Version 1.0 (basée sur QPL)<br>
<br>
<br>
2.3 KDevelop<br>
------------<br>
<br>
Fortement inspiré de Microsoft Visual C++, KDevelop mise sur la facilité<br>
d'utilisation et outils d'aide à la programmation. Parmis ses points forts<br>
sont le support des projets QT/KDE et GTK+/Gnome, un navigateur visuel de<br>
classes (C++), une interface à CVS (Control Version System) et un assistant<br>
de projets (app wizard + générateur de fichiers autoconf/automake).<br>
<br>
Leur site web contient une impressionnante quantité d'information, tutoriels,<br>
forum de discussion, etc. Chose rare pour un éditeur de programmation.<br>
Petit inconvénient, l'éditeur comprend que les langages C et C++.<br>
<br>
- Sous-applications supportées: autoconf, automake, make, gcc, g++<br>
- Langages/syntaxes supportés: C, C++<br>
- Licence: GNU GPL<br>
<br>
<br>
2.4 jEdit<br>
---------<br>
<br>
jEdit se veut simple, flexible et pratique. Plus de 40 langages sont<br>
supportés, indentation automatique, vérification de syntaxe et transferts<br>
FTP intégrés (donne l'impression d'éditer un fichier à distance) ne sont<br>
que quelques fonctionalités, mais son architecture modulaire très flexible<br>
est très intéressante. Lancez le gestionnaire de "plugins" lorsque vous<br>
êtes connectés à Internet et celui-ci ira chercher la liste des plugins<br>
disponibles et les téléchargera au besoin. De plus, le navigateur de<br>
classes rend la programmation Java et C++ plus agréable.<br>
<br>
L'application est écrite en Java, ce qui, comme toutes applications Java,<br>
est un avantage et un inconvénient. D'une part, il est un peu plus lent<br>
et un peu gourmand, mais en revanche, vous pourrez l'utiliser sur toutes<br>
les plateformes supportées par Java (Unix, MacOS, Windows, etc..).<br>
<br>
- Sous-applications supportées: Aucune, mais des plugins supportent le Java<br>
- Langages/syntaxes supportés: Java, C, C++, Perl et plus de 40 autres<br>
- Licence: GNU GPL<br>
<br>
2.5 NEdit<br>
---------<br>
<br>
NEdit est petit et facile à configurer. Son apparence est très minimaliste,<br>
mais il peut surligner du code, faire des macros et beaucoup plus que les<br>
autres éditeurs de cette catégorie. Toutefois, il ne gère pas les projets<br>
et il n'a pas d'interface graphique à la compilation.<br>
<br>
- Sous-applications supportées: aucune<br>
- Langages/syntaxes supportés: Ada, C, C++, Fortran, Java, Perl, Python<br>
                               et beaucoup d'autres<br>
- Licence: GNU GPL<br>
<br>
<br>
3.0 Survol des éditeurs traditionnels<br>
=====================================<br>
<br>
3.1 Introduction<br>
----------------<br>
<br>
Les deux principaux éditeurs traditionnels sont Vi et Emacs. Connus par<br>
certains comme étant inutilement complexes, mais aussi connus pour leur<br>
flexibilité et efficacité.<br>
<br>
<br>
3.1 Emacs / XEmacs<br>
------------------<br>
<br>
Emacs contient beaucoup trop d'outils et de commandes pour en faire un<br>
survol dans ce texte. Par contre, c'est facile de se promener dans<br>
l'éditeur avec les quelques commandes suivantes:<br>
<br>
(Note: Ctrl est représenté par "C" et la virgule "," devrait se lire "puis")<br>
<br>
<br>
C-x, C-f : Ouvrir un fichier (la touche Tab peut être utilisée pour compléter <br>
           ou lister les choix disponibles)<br>
<br>
C-x, C-s : Sauver un fichier<br>
<br>
C-s      : (search) Faire une recherche dans le texte<br>
<br>
C-g      : Annuler la commande en cours<br>
<br>
C-x u    : (undo)  Annuler la dernière commande<br>
<br>
C-x 2    : Créer une nouvelle fenêtre horizontalement<br>
<br>
C-x 3    : Créer une nouvelle fenêtre verticalement<br>
<br>
C-x 1    : Cacher les autres fenêtres et affiche que la fenêtre active<br>
<br>
C-x o    : Se déplacer d'une fenêtre à l'autre (comme Alt-Tab dans Windows)<br>
<br>
C-x k    : (kill) Fermer le texte de la fenêtre active<br>
<br>
C-espace : Commencer la sélection d'une région (puis se déplacer avec les <br>
           flèches pour sélectionner une région)<br>
<br>
Alt-w    : Copier la région sélectionnée<br>
<br>
C-w      : Couper la région sélectionnée<br>
<br>
C-y      : Coller la région copiée<br>
<br>
C-x, C-c : Quitter emacs<br>
<br>
<br>
XEmacs est un clône d'Emacs, mais avec une interface graphique plus facile<br>
à utiliser.  Toutefois, les dialogues de sélections d'XEmacs ont un défaut,<br>
pour sélectionner il faut utiliser le bouton du milieu de votre souris et<br>
non le bouton gauche (si vous n'avez que deux boutons, il faut cliquer les<br>
deux en même temps pour simuler le 3e bouton).<br>
<br>
<br>
3.2 Vi / Vim / gVim<br>
-------------------<br>
<br>
Vi est un éditeur très minimaliste, mais extrêmement puissant. Avec le temps,<br>
Vim (Vi iMproved) est venu remplacer Vi et est beaucoup plus convivial. Il<br>
comprend aussi une interface graphique (optionnelle), gVim, qui a l'apparence<br>
du Notepad dans Windows, mais avec ayant quand mêmes les commandes de<br>
réputations obscures de Vi.<br>
<br>
Les avantages de Vim par rapport à Vi sont nombreux. Pour en nommer quelques<br>
uns, Vim permet de surligner la syntaxe, plusieurs niveaux de "undo" (et <br>
"redo") et permet d'afficher plusieurs fichiers dans le même cadre (surtout<br>
pratique pour le mode texte).<br>
<br>
Voici quelques commandes essentielles à Vi:<br>
<br>
:e foo.c : ouvre un fichier (ou le crée)<br>
:w       : sauver le fichier<br>
:w bar.c : sauver le fichier sous le nom bar.c<br>
:q       : quitter vi (ou fermer la fenêtre active)<br>
:q!      : quitter vi sans sauver<br>
i        : insérer avant le curseur    (I   : insérer au début de la ligne)<br>
a        : insérer après le curseur    (A   : insérer à la fin de la ligne)<br>
o        : ouvrir une ligne en-dessous (O   : ouvrir une ligne au-dessus)<br>
J        : joindre la ligne suivante après la ligne courante<br>
u        : undo (annuler la dernière commande)<br>
U        : undo global pour toute la ligne<br>
Ctrl+R   : redo (annuler la dernière commande annulée)<br>
Ctrl+G   : Affiche des informations sur le fichier et la position du curseur<br>
ESC      : quitter le mode d'insertion<br>
<br>
Chercher et remplacer:<br>
<br>
:n       : Aller à la n-ième ligne. (:1 aller au début du texte)<br>
/foo     : Recherche le mot "foo" dans le texte (?foo cherche en arrière)<br>
:s/ab/ba : Substituer la première occurence de "ab" par "ba"<br>
           Pour remplacer toutes les occurences sur la ligne, :s/ab/ba/g<br>
           (où 'g' signifie 'global')<br>
:4,10s/ab/ba/g : Remplace toutes les occurences de "ab" par "ba" sur les lignes<br>
                 de 4 à 10. (:1,$s/ab/ba/g pour tout le texte, $ = fin)<br>
%s/ab/ba : Remplacer toutes les occurences. <br>
<br>
Couper/Coller, supprimer:<br>
<br>
x        : Coupe le caractère sous le curseur (10x en supprime 10)<br>
dd       : Coupe la ligne courante (10dd en supprime 10)<br>
D        : Coupe à partir du curseur jusqu'à la fin de la ligne courante<br>
yy       : Copie la ligne courante<br>
Y        : Copie à partir du curseur jusqu'à la fin de la ligne courante<br>
p        : Colle (paste) la dernière chaine de texte coupée/copiée<br>
:1,4y    : Copie les lignes 1 à 5 (ce genre de préfixe s'applique à toutes les<br>
           commandes)<br>
<br>
Se promener dans plusieurs fenêtres (spécifique à vim) :<br>
<br>
:new foo : Ouvrir une nouvelle fenêtre et lire le fichier "foo"<br>
Ctrl+w   : Changer de fenêtre. Faire deux fois pour aller à la prochaine,<br>
           ou faire Ctrl+w+flèche_haut pour aller à la fenêtre du haut.<br>
<br>
Les préfixes de lignes tels que "1,30" (qui signifie "de la ligne 1 à 30")<br>
s'appliquent à la majorité des commandes qui commencent par ":".<br>
<br>
Sous Vim, il est aussi possible d'activer la vérification et la colorisation<br>
de la syntaxe avec ":syntax on" (pour automatiser cette commande, il suffit<br>
de l'ajouter dans le fichier "~/.vimrc" avec la commande:<br>
$ echo "syntax on" >> ~/.vimrc<br>
<br>
Bref, les commandes de Vi sont très excentriques, mais par la quantité de<br>
combinaisons possibles, Vi devient un outil très efficace.<br>
<br>
<br>
4.0 Compiler<br>
============<br>
<br>
<br>
4.1 GNU gcc<br>
-----------<br>
<br>
Généralement appelé gcc pour le "Gnu C Compiler", gcc peut aussi compiler<br>
du C++ (g++), Java (gcj), Assembleur AT&T (gas), Fortran (g77) et autres.<br>
Si vous utilisez un IDE, vous n'aurez pas vraiment à vous soucier de cette<br>
section, mais c'est quand même utile de savoir comment les outils que vous<br>
ne voyez pas fonctionnent, ça peut faciliter le déboguage et mieux comprendre<br>
le processus global de la programmation. C'est aussi pratique de connaître<br>
ces outils si vous travaillez par telnet où vous ne pourrez pas utiliser<br>
votre IDE préféré.<br>
<br>
Voici quelques exemples de compilation d'applications, du plus simple vers<br>
des exemples plus complexes:<br>
<br>
    $ g++ foo.cxx<br>
<br>
Par défaut le compilateur nomme l'exécutable "a.out", ajoutons l'options<br>
-o pour spécifier le nom du fichier à la sortie:<br>
<br>
    $ g++ foo.cxx -o toto<br>
<br>
Si nous avons plusieurs fichiers sources pour le même exécutable:<br>
<br>
    $ g++ foo.cxx bar.cxx -o toto<br>
<br>
L'usage de -Wall est très fortement suggéré pour éviter les erreurs de<br>
syntaxe et afficher le maximum d'avertissements:<br>
<br>
    $ g++ -Wall foo.cxx -o toto<br>
<br>
Lorsque l'on doit déboguer avec gdb, on peut savoir exactement à quelle <br>
ligne de code le programme a planté, et quelles étaient les variables en<br>
ajoutant l'option -g:<br>
<br>
    $ g++ -Wall -g foo.cxx -o toto<br>
<br>
Vous pouvez aussi demander à gcc d'optimiser le code machine généré, mais<br>
étant donné que ça demande plus de temps pour compiler, il est suggéré<br>
d'utiliser cette option que lorsque vous faites la commpilation finale de<br>
votre programme. Ceci se fait par l'option -O{1,2,3}:<br>
<br>
	$ g++ -Wall -O1 foo.cxx toto<br>
<br>
Pour exécuter l'application, il suffit de faire "./toto". Le "./" signifie<br>
que l'on veut exécuter une application qui se situe dans le répertoire<br>
courant.<br>
<br>
Nous verrons dans la prochaine section comment automatiser la compilation<br>
d'une application.<br>
<br>
<br>
4.2 GNU make<br>
------------<br>
<br>
Make est un outil qui permet de simplifier et accélérer la compilation d'une <br>
application. Pour ce faire, l'application cherche un fichier "Makefile" qui<br>
indique comment compiler l'application. Tout comme GCC, make est souvent<br>
facilité par les IDE.<br>
<br>
Voici un exemple de Makefile:<br>
<br>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Makefile .<br>
<br>
OBJS = fichier1.o fichier2.o<br>
EXEC = toto                # nom exécutable de l'application<br>
CC = g++                   # nom du compilateur, aurait pû être gcc, gcj, etc..<br>
CFLAGS = -Wall -g          # voir le "man page" de gcc pour la liste complète<br>
DEL = rm -f                # peut varier d'un système d'exploitation à l'autre<br>
<br>
all : $(OBJS)<br>
      $(CC) $(OBJS) -o $(EXEC)<br>
<br>
# les fichiers à compiler :<br>
<br>
fichier1.o : fichier1.cxx fichier1.h<br>
      $(CC) $(CFLAGS) -c fichier1.cxx -o fichier1.o<br>
<br>
fichier2.o : fichier2.cxx fichier2.h<br>
      $(CC) $(CFLAGS) -c fichier2.cxx -o fichier2.o<br>
<br>
# petite fonction pour faire le ménage des exécutables:<br>
<br>
clean :<br>
      $(DEL) $(EXEC) $(OBJS) core <br>
<br>
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fin . . <br>
<br>
Maintenant, faire <br>
<br>
    $ make <br>
<br>
Compilera notre application, car "make" sans paramètre exécute la première<br>
section qu'il trouve, soit "all" (ceci est une convention), puis<br>
<br>
    $ make clean<br>
<br>
supprimera les fichiers exécutables et "objects" (.o).<br>
<br>
Make est un bon outil pour les petits projets de 2 à 10 fichiers source,<br>
mais ça peut facilement devenir encombrant lorsqu'il y a des dépendances<br>
externes. Il y a de nombreux programmes pour simplifier la gestion d'un<br>
Makefile tels que la combinaison de autoconf[2] et automake[3].<br>
<br>
<br>
5.0 Déboguer<br>
============<br>
<br>
<br>
5.1 GNU gdb<br>
-----------<br>
<br>
Gdb est le "Gnu Debugger". Il peut être particulièrement efficace pour<br>
déboguer des applications multi-thread ou des programmes extrêment complexes,<br>
mais puisqu'il faut limiter la taille de cet article, il y a principalement <br>
deux commandes à connaître pour gdb:<br>
<br>
Si notre programme toto plante:<br>
<br>
$ ./toto <br>
segmentation fault<br>
<br>
Pas très descriptif...<br>
<br>
$ gdb toto<br>
GNU gdb 5.0<br>
[snip, information sur gdb]<br>
This GDB was configured as "i686-pc-linux-gnu"...<br>
<br>
(gdb) run<br>
Program received signal SIGFPE, Arithmetic exception.<br>
0x804883f in main (argc=1, argv=0xbffffa24) at main.cxx:27<br>
27              int foo = 5 / 0;<br>
<br>
Ce qui nous permet de voir qu'à la ligne 27 de main.cxx, il y a une division<br>
par zéro.<br>
<br>
Cet exemple était peut-être un peu trop facile, prenons un exemple plus<br>
obscur qui se produit souvent en C++:<br>
<br>
$ gdb toto<br>
GNU gdb 5.0<br>
[snip, information sur gdb]<br>
This GDB was configured as "i686-pc-linux-gnu"...<br>
<br>
(gdb) run<br>
Program received signal SIGSEGV, Segmentation fault.<br>
0x400f501d in free () from /lib/libc.so.6<br>
<br>
Le programme a buggé dans une fonction qui est dans la librairie C (une<br>
librairie de très bas niveau qui est appelée par des appels intermédiaires<br>
dans une application, mais c'est probablement la fonction qui a fait cet<br>
appel qui est la source du problème. Pour voir par où le programme a passé<br>
avant de planter, utiliser la commande "bt", soit "backtrace", qui permet<br>
de tracer l'exécution:<br>
<br>
(gdb) bt<br>
#0  0x400f501d in free () from /lib/libc.so.6<br>
#1  0x40048814 in __builtin_delete () from /usr/lib/libstdc++-libc6.2-2.so.3<br>
#2  0x8048a94 in Pile<int>::depiler (this=0xbffff9b8, valeur=@0xbffff948) at pile.cxx:88<br>
#3  0x8048b01 in Pile<int>::vider (this=0xbffff9b8) at pile.cxx:114<br>
#4  0x8048b4b in Pile<int>::~Pile (this=0xbffff9b8, __in_chrg=2) at pile.cxx:32<br>
#5  0x8048947 in main (argc=1, argv=0xbffffa24) at main.cxx:43<br>
#6  0x400a1bcc in __libc_start_main () from /lib/libc.so.6<br>
<br>
La réponse n'est peut-être pas aussi évidente que l'exemple précédent, mais<br>
au moins nous pouvons voir qu'à la ligne #1 qu'il y a eu un problème lors de <br>
la désallcation de l'objet, d'où l'erreur fréquente en C ou C++ d'accéder à<br>
un espace mémoire du système qui n'appartient pas.<br>
<br>
<br>
5.2 lclint<br>
----------<br>
<br>
Lclint vérifie la solidité d'applications écrites en C et permet de trouver<br>
plusieurs erreurs de sémantique et autres erreurs fréquentes. Toutefois, lclint<br>
analyse que le C.<br>
<br>
<br>
6.0 Conclusion<br>
==============<br>
<br>
N'oubliez pas que chaque application possède une courbe d'apprentissage. Il y<br>
a généralement deux catégories: soit l'apprentissage est difficile au début,<br>
mais l'application est très flexible et efficace (courbe de la fonction <br>
exponentielle), tandis que d'autres sont très faciles dès le début, mais les<br>
fonctionalités plus avancées sont sont inexistantes ou inutilement complexes<br>
(courbe de la fonction racine carrée).<br>
<br>
Sous Linux (et Unix en général) vous avez le choix entre une multitude <br>
d'applications, il suffit de faire une bonne combinaison de logiciels pour<br>
ainsi combiner les deux courbes à votre avantage.<br>
<br>
<br>
7.0 Références<br>
==============<br>
<br>
7.1 Général<br>
-----------<br>
<br>
Linux         : http://www.linux.org/, http://www.linux.com/<br>
FreeBSD       : http://www.freebsd.org/<br>
OpenBSD       : http://www.openbsd.org/<br>
NetBSD        : http://www.netbsd.org/<br>
<br>
Gnome         : http://www.gnome.org/<br>
KDE           : http://www.kde.org/<br>
<br>
<br>
7.2 Éditeurs<br>
------------<br>
<br>
Code Crusader : http://www.newplanetsoftware.com/<br>
KDevelop      : http://www.kdevelop.org/<br>
jEdit         : http://jedit.sourceforge.net/<br>
NEdit         : http://nedit.org/<br>
Emacs         : http://www.gnu.org/software/emacs/emacs.html<br>
XEmacs        : http://www.xemacs.org/<br>
Vim/gVim      : http://www.vim.org/<br>
<br>
<br>
7.3 Autres applications<br>
-----------------------<br>
<br>
GCC           : http://www.gnu.org/software/gcc/gcc.html<br>
GJC           : http://sources.redhat.com/java/<br>
lclint        : http://lclint.cs.virginia.edu/<br>
<br>
<br>
7.4 Sites mentionnés dans ce texte<br>
----------------------------------<br>
<br>
1   - The Art of Unix Programming: http://www.tuxedo.org/~esr/writing/taoup/<br>
2   - GNU : http://www.gnu.org/<br>
3   - OpenSource : http://www.opensource.org/<br>
<br>
<br>
7.5 Sites complémentaires<br>
-------------------------<br>
<br>
- Cartes de références (gdb, emacs et autres): http://www.refcards.com/<br>
- Répertoire d'applications Linux: http://freshmeat.net/<br>
- Répertoire d'applications scientifiques: http://sal.kachinatech.com/index.shtml<br>
<br>
<br>
8.0 Remerciements<br>
=================<br>
<br>
Je tiens à remercier les personnes suivantes dont les contributions sont<br>
grandement appréciées.<br>
<br>
Vincent Labrecque (limitln at cooptel.qc.ca)<br>
Benoit des Ligneris (benoit.des.ligneris at physique.usherb.ca)<br>
Guillaume Pratte (pratg00 at dmi.usherb.ca)<br>
<br>




See more files for this project here

Gulus

Groupe d\'Utilisateurs de Linux de l\'Universit? de Sherbrooke. http://www.gulus.org/

Project homepage: http://sourceforge.net/projects/gulus
Programming language(s): PHP,Shell Script
License: other

  arcadia/
    Entrer-Title.jpg
    EntrevueArcadia.tar.gz
    NWN_bataille.jpg
    NWN_bataille_tn.jpg
    NWN_chat.jpg
    NWN_chat_tn.jpg
    NWN_donjon1.jpg
    NWN_donjon1_tn.jpg
    NWN_donjon2.jpg
    NWN_donjon2_tn.jpg
    arcadia.html
    lily.gif
    logo_gulus.png
  bgm/
    intro_crypto_partie1.txt
    intro_crypto_partie2.txt
    intro_prog_linux.txt
  conferences/
    gulus_cluster/
      index.html
      mgp00001.html
      mgp00001.idx.jpg
      mgp00001.jpg
      mgp00001.txt
      mgp00002.html
      mgp00002.idx.jpg
      mgp00002.jpg
      mgp00002.txt
      mgp00003.html
      mgp00003.idx.jpg
      mgp00003.jpg
      mgp00003.txt
      mgp00004.html
      mgp00004.idx.jpg
      mgp00004.jpg
      mgp00004.txt
      mgp00005.html
      mgp00005.idx.jpg
      mgp00005.jpg
      mgp00005.txt
      mgp00006.html
      mgp00006.idx.jpg
      mgp00006.jpg
      mgp00006.txt
      mgp00007.html
      mgp00007.idx.jpg
      mgp00007.jpg
      mgp00007.txt
      mgp00008.html
      mgp00008.idx.jpg
      mgp00008.jpg
      mgp00008.txt
      mgp00009.html
      mgp00009.idx.jpg
      mgp00009.jpg
      mgp00009.txt
      mgp00010.html
      mgp00010.idx.jpg
      mgp00010.jpg
      mgp00010.txt
      mgp00011.html
      mgp00011.idx.jpg
      mgp00011.jpg
      mgp00011.txt
      mgp00012.html
      mgp00012.idx.jpg
      mgp00012.jpg
      mgp00012.txt
      mgp00013.html
      mgp00013.idx.jpg
      mgp00013.jpg
      mgp00013.txt
      mgp00014.html
      mgp00014.idx.jpg
      mgp00014.jpg
      mgp00014.txt
      mgp00015.html
      mgp00015.idx.jpg
      mgp00015.jpg
      mgp00015.txt
    gulus_latex/
      index.html
      mgp00001.html
      mgp00001.idx.jpg
      mgp00001.jpg
      mgp00001.txt
      mgp00002.html
      mgp00002.idx.jpg
      mgp00002.jpg
      mgp00002.txt
      mgp00003.html
      mgp00003.idx.jpg
      mgp00003.jpg
      mgp00003.txt
      mgp00004.html
      mgp00004.idx.jpg
      mgp00004.jpg
      mgp00004.txt
      mgp00005.html
      mgp00005.idx.jpg
      mgp00005.jpg
      mgp00005.txt
      mgp00006.html
      mgp00006.idx.jpg
      mgp00006.jpg
      mgp00006.txt
      mgp00007.html
      mgp00007.idx.jpg
      mgp00007.jpg
      mgp00007.txt
      mgp00008.html
      mgp00008.idx.jpg
      mgp00008.jpg
      mgp00008.txt
      mgp00009.html
      mgp00009.idx.jpg
      mgp00009.jpg
      mgp00009.txt
      mgp00010.html
      mgp00010.idx.jpg
      mgp00010.jpg
      mgp00010.txt
      mgp00011.html
      mgp00011.idx.jpg
      mgp00011.jpg
      mgp00011.txt
      mgp00012.html
      mgp00012.idx.jpg
      mgp00012.jpg
      mgp00012.txt
      mgp00013.html
      mgp00013.idx.jpg
      mgp00013.jpg
      mgp00013.txt
      mgp00014.html
      mgp00014.idx.jpg
      mgp00014.jpg
      mgp00014.txt
      mgp00015.html
      mgp00015.idx.jpg
      mgp00015.jpg
      mgp00015.txt
      mgp00016.html
      mgp00016.idx.jpg
      mgp00016.jpg
      mgp00016.txt
      mgp00017.html
      mgp00017.idx.jpg
      mgp00017.jpg
      mgp00017.txt
    gulus_shellbashintro/
      icons/
    imlib2_nov2000/
    lyx/
    mosix/
    mutt/
    urpmi/
    Gulus_eObservation.pdf
    debian_apt.html
    gcc_gdb.pdf
  festivals/
  genie/
  gulus_hebdo/
  gulus_news/
  linux_entreprise/
  listes_de_securite/
  ljnb/
  mac/
  mdkuserguide/
  mozilla_fr/
  prive/
  proces-verbaux/
  protocole_ssh/
  Aide_FAQ.html
  aide.php
  aidelinux.html
  aidelinux.txt
  directionsMtlVersUdeS.html
  installer_mandrake.html
  intro_prog_linux.html
  intro_prog_linux.txt
  linux-history.txt
  midi_linux_mpi.pdf
  ols_dd.html