summaryrefslogtreecommitdiff
path: root/d
diff options
context:
space:
mode:
Diffstat (limited to 'd')
-rw-r--r--d/dev/tools/tools.txt152
1 files changed, 79 insertions, 73 deletions
diff --git a/d/dev/tools/tools.txt b/d/dev/tools/tools.txt
index e266d16..d0538ba 100644
--- a/d/dev/tools/tools.txt
+++ b/d/dev/tools/tools.txt
@@ -6,9 +6,9 @@
* Introduction
Pour coder au Robot et en général, il existe certain outils, certain sont
-indispensable. Je vais ici montrer comment fonctionne quelques outils que
+indispensables. Je vais ici montrer comment fonctionnent quelques outils que
j'utilise personnellement, le but n'étant pas de faire un guide complet mais
-plutôt une présentation assez détaillé pour les utiliser d'outils utiles.
+plutôt une présentation assez détaillée pour les utiliser.
* Editeurs
@@ -19,18 +19,20 @@ du C.
*** Fonctionnement
-taper vim dans un bash. Attention, pour coder en C il est nécessaire de modifier
-quelques options dans le .vimrc, notamment
- * syntax on ,pour avoir de la couleurs en codant
- * set shiftwidth=4 ,pour une indentation de 4 caractères(voir les
- standards du robot)
+Taper vim dans un bash. Attention, pour coder en C il est nécessaire de modifier
+quelques options dans le .vimrc, notamment :
+ * _syntax on_, pour avoir de la couleurs en codant ;
+ * _set shiftwidth=4_, pour une indentation de 4 caractères (voir les
+ standards du robot) ;
+ * _set cinoptions={.5s:.5sg.5sh.5st0(0=.5s_, pour le style Efrei
+ Robotique.
*** Quelques commandes
-Pour vim et pour coder, quelques commandes
+Pour vim et pour coder, quelques commandes :
* :q quitter
* :x sauvegarder et quitter
- * :w enregistré
+ * :w enregistrer
* :e ouvrir
* == pour indenter une ligne
* =G indente du curseur à la fin du fichier
@@ -47,34 +49,38 @@ Y'en a plein d'autre mais si vous utilisez vim, elles viendront vite.
** Pour le C
Pour coder en C, gcc, le GNU C Compiler. C'est un compilateur très puissant
-avec un beaucoup d'option.
+avec un beaucoup d'options.
** Pour le C++
Pour coder en C il faut juste remplacer gcc par g++.
** Comment ça marche
-Il suffit de taper gcc(ou g++) et le nom du fichier source(on ne met pas
-les headers.) Si il n'y a qu'un seul fichier source, ça marche, et il y aura
-comme résultat un fichier a.out, bon a part pour faire un Hello World, ça sert
-à rien, pour des projets plus conséquent, le Makefile est tout indiqué.
+
+Il suffit de taper gcc (ou g++) et le nom du fichier source (on ne met pas les
+headers). Si il n'y a qu'un seul fichier source, ça marche, et il y aura comme
+résultat un fichier a.out, bon a part pour faire un Hello World, ça sert à
+rien, pour des projets plus conséquent, le Makefile est tout indiqué.
Si la compilation foire, le compilateur fera en sorte d'afficher les erreurs
-avec le nom des fichiers et les lignes ou se trouve à 3 lignes près l'erreur.
-Il se peut aussi qu'il annonce des warnings, c'est pas bon!! Les warnings
-portent bien leurs noms, et généralement, laisser des warnings dans un programme
-est suicidaire, donc, à éviter.
-
-** quelques options
-
-Dans la ligne de commandes gcc, il y a quelques options et librairies indispensables:
- * -o <fichier> permet de nommer le fichier exécutable, sinon il s'appelle a.out
- * -W et -Wall pour voir tout les warnings qui pourrait passer
- * -g permet d'ajouter les info de debuggage
- * -Olevel Permet d'optimiser le programme plus level est grand plus c'est optimiser
- (level 3 max)
- * -Os permet d'optimiser le code pour obtenir un exécutable plus petit
- * -lm permet d'inclure la librairie mathématique
+avec le nom des fichiers et les lignes où se trouve à 3 lignes près l'erreur.
+Il se peut aussi qu'il annonce des warnings, c'est pas bon !! Les warnings
+portent bien leurs noms, et généralement, laisser des warnings dans un
+programme est suicidaire, donc, à éviter.
+
+** Quelques options
+
+Dans la ligne de commandes gcc, il y a quelques options et librairies
+indispensables :
+ * -o <fichier> permet de nommer le fichier exécutable, sinon il
+ s'appelle a.out ;
+ * -W et -Wall pour voir tout les warnings qui pourrait passer ;
+ * -g permet d'ajouter les info de debuggage ;
+ * -Olevel Permet d'optimiser le programme, plus level est grand plus
+ c'est optimiser (level 3 max);
+ * -Os permet d'optimiser le code pour obtenir un exécutable plus
+ petit ;
+ * -lm permet d'inclure la librairie mathématique ;
* make
@@ -85,22 +91,21 @@ C'est avec elle que sont compiler la plupart des programmes.
** Comment ça marche
-taper make et si il y a un makefile qui va bien ça s'exécute.
+Taper make et si il y a un makefile qui va bien ça s'exécute.
make tente de faire de la divination, pour un programme composé d'un
code source, il suffit de taper make nomdufichiersansextension.
Sinon, l'écriture d'un makefile est obligatoire.
** Le makefile
-Le makefile s'appelle Makefile(n'oublier pas la majuscule, c'est mieux).
-Dans le fichier ont trouve des variables et des règles. Les variables
-sont défini et utilisé comme dans les scripts bash, mais certaines
-variables sont standard et nous servirons plus tard.
-Pour faire simple, un makefile pour compiler un programme en C ressemble
-à ça.
+Le makefile s'appelle Makefile (n'oublier pas la majuscule, c'est mieux). Dans
+le fichier ont trouve des variables et des règles. Les variables sont définies
+et utilisées comme dans les scripts bash, mais certaines variables sont
+standards et nous serviront plus tard. Pour faire simple, un makefile pour
+compiler un programme en C ressemble à ça.
^<<
-barbecue:main.o merguez.o thermostat.o
+barbecue: main.o merguez.o thermostat.o
gcc -o barbecue main.o merguez.o thermostat.o
^>>
@@ -111,7 +116,7 @@ tabulation est la ou les actions à exécuter.
make étant très intelligent, il va essayer de voir si il peut résoudre
les dépendances, ici, il va compiler les sources pour produire les .o requis.
Cela dit pour un projet plus important, le Makefile peut contenir
-plusieurs cible et plusieurs actions, pour éviter de réécrire les choses
+plusieurs cibles et plusieurs actions, pour éviter de réécrire les choses
plusieurs fois, il y a les variables.
Les variables fonctionnent comme pour les scripts bash à peu près.
Pour reprendre l'exemple au dessus on pourrait marquer
@@ -119,7 +124,7 @@ Pour reprendre l'exemple au dessus on pourrait marquer
OBJECTS=main.o merguez.o thermostat.o
-barbecue:${OBJECTS}
+barbecue: ${OBJECTS}
gcc -o $@ $^
^>>
@@ -154,19 +159,17 @@ spéciales.
** Quelques variables utiles
Pour dire à make comment faire ses trucs intelligents, certaines
-variables sont bien utiles, en voici quelques une:
- * CC permet de définir le compilateur C(exemple: CC=gcc)
- * CLIBS permet de définir les librairie C à utiliser (exemple:CLIBS=-lm)
- * CFLAGS qui permet de définir les flags(exemple CFLAGS=-g -W -Wall)
+variables sont bien utiles, en voici quelques une :
+ * CC permet de définir le compilateur C (exemple: CC=gcc) ;
+ * CLIBS permet de définir les librairie C à utiliser (exemple:CLIBS=-lm) ;
+ * CFLAGS qui permet de définir les flags (exemple CFLAGS=-g -W -Wall).
-
Pour le C++ il y a les équivalents
- * CXX pour le compilo C++
- * CXXLIBS pour les librairies C++
- * CXXFLAGS pour les flags C++
+ * CXX pour le compilo C++ ;
+ * CXXLIBS pour les librairies C++ ;
+ * CXXFLAGS pour les flags C++.
Mais il en existe bien d'autre.
-
En définitive, notre Makefile pour un programme en C pourrait ressembler
à ça:
@@ -176,7 +179,7 @@ CC=gcc
CLIBS=-lm
CFLAGS=-g -W -Wall -pipe
-barbecue:main.o merguez.o thermostat.o
+barbecue: main.o merguez.o thermostat.o
${CC} ${CLIBS} ${CFLAGS} -o $@ $^
^>>
@@ -195,8 +198,8 @@ société.
* Le débugueur
-Pour debugguer le jolie code qui marche pas comme prévu, il y a le
-débuggueur GDB(pour GNU Debbuger, ouais ils ont vachement
+Pour debuguer le jolie code qui marche pas comme prévu, il y a le
+débuggueur GDB (pour GNU Debbuger, ouais ils ont vachement
d'imagination). Pour l'utiliser, il est utile de sortir le -g lors de
la compilation du programme foireux.
GDB permet plusieurs chose comme examiner les cadavre (les fichiers core
@@ -270,7 +273,7 @@ Par exemple
nicolas@hermes:~\valgrind --tool=memcheck --leak-check=yes -v barbecue
^>>
-La j'utilise l'outil memcheck pour vérifier la mémoire(mais c'est l'option
+La j'utilise l'outil memcheck pour vérifier la mémoire (mais c'est l'option
par défaut), j'aurais pu mettre cachegrind pour profiler le cache.
leak-check permet d'afficher les fuites de mémoire et v c'est verbose.
@@ -287,12 +290,12 @@ segfault qu'il n'y a pas d'erreur grave.
Pratiquement toutes les erreurs liées à la mémoire, c'est à dire:
* les tests sur des variables qui ne sont pas initialisés exemple
^<<
-#include <stdlib.h>
-int main()
+int
+main (void)
{
int p, t;
- if (p == 5) /*Ho une erreur*/
- t = p+1;
+ if (p == 5) /* Ho une erreur. */
+ t = p + 1;
return 0;
}
^>>
@@ -301,13 +304,14 @@ int main()
mémoires qui ne sont pas allouée pour ça. exemple
^<<
#include <stdlib.h>
-int main()
+int
+main (void)
{
int *p, i, a;
- p = malloc(10*sizeof(int));
- p[11] = 1; /* Ecriture dans l'espace */
- a = p[11]; /* Lecture dans l'espace */
- free(p);
+ p = malloc (10 * sizeof (int));
+ p[11] = 1; /* Ecriture dans l'espace. */
+ a = p[11]; /* Lecture dans l'espace. */
+ free (p);
return 0;
}
^>>
@@ -315,29 +319,31 @@ int main()
Vous essayez de libérer un blocs qui n'est pas alloué. Exemple:
^<<
#include <stdlib.h>
-int main()
+int
+main (void)
{
int *p, i;
- p = malloc(10*sizeof(int));
- for(i = 0;i < 10;i++)
+ p = malloc (10 * sizeof (int));
+ for (i = 0; i < 10; i++)
p[i] = i;
- free(p);
- free(p); /* Oui mais non, p est déjà libéré */
+ free (p);
+ free (p); /* Oui mais non, p est déjà libéré. */
return 0;
}
^>>
- * Les mauvaises utilisations de fonctions
- Typiquement, les allocations par malloc qui sont libérées par delete.
- Exemple:
+ * Les mauvaises utilisations de fonctions
+ Typiquement, les allocations par malloc qui sont libérées par delete.
+ Exemple:
^<<
#include <stdlib.h>
-int main()
+int
+main (void)
{
int *p, i;
- p = ( int* ) malloc(10*sizeof(int));
- for(i = 0;i < 10;i++)
+ p = (int*) malloc (10 * sizeof (int));
+ for (i = 0; i < 10; i++)
p[i] = i;
- delete(p); /* C'est pas la bonne fonction */
+ delete p; /* C'est pas la bonne fonction (non, c'est un opérateur !). */
return 0;
}
^>>