Code

Erreurs C++

Il arrive souvent que les messages d'erreurs des compilateurs C++ ne soient pas évident pour les néophytes (ce qui est mon cas du moins). Cette page listera donc certains messages d'erreurs avec des explications et solutions possible :

  • undefined reference to `vtable
    Une fonction abstraite n'est pas implémentée.
  • error: multiple types in one declaration
    Oublie du ";" qui ferme la class

Taille de code (ligne & octet)

Fait la liste de tous les fichiers .c et .h et donne leur taille en ligne et en octet plus le total

find . -iname "*\.[ch]" -exec wc -lc '{}' \+
 105 2228 ./bdd.c
  10  189 ./bdd.h
  41  938 ./mysql/plop.c
   8  262 ./temps.c
  12  202 ./temps.h
  63 1190 ./sqlite.c
  20  479 ./sqlite.h
  30  609 ./mysql.c
   9  248 ./mysql.h
  64 1915 ./sqlite/bdd.c
  14  272 ./sqlite/bdd.h
 376 8532 total

Trouver une fonction dans du code

De manière générale

Vous avez plusieurs fichiers de code et vous recherchez une fonction particulière, vous connaissez sa signature, mais vous ne savez pas où elle se trouve.
grep peut vous aider !

grep mafonction *.c

Exemple :

furet@clubnix9 ~/bidon/trunk/src $ grep fillInitData *.c
conf.c: * \fn void fillInitData(log *infos)
conf.c:void fillInitData(log *infos){
main.c:         fillInitData(infos);

Il est même possible de coupler ça avec find, si plusieurs niveaux de dossiers :

find . -name "*\.[ch]" -exec grep -nH --color '{}' \;

La commande ultime :D

En C

Les fonctions précédentes fonctionnent bien évidement, mais il est également possible d'utiliser cscope qui est spécialement prévu pour ça.

Trouver le bon exemple

Dans votre dossier de sources vous cherchez un exemple de l'utilisation d'une fonction X. Oula chercher dans tous les fichiers c'est long, mais nous avons vu comment les choisir. Mais vous être encore plus fainéant que ça, vous voulez avoir le fichier le plus court. La commande ultime de la mort qui tue !

find . -iname "Makefile.am" -exec grep -q "check_PROGRAM" {} \; -printf "%s %h/%f\n" |sort -n 

find . -iname "Makefile.am" ne demande que les fichiers Makefile.am

-exec grep -q "check_PROGRAM" '{}' \; cherche la chaine "check_PROGRAM" dans les fichiers trouvés en n'affichant rien "-q"

-printf "%s %h/%f\n" Pour chaque fichier ou grep a réussit sa recherche imprime : la taille en octet ("%s") les dossiers menant au fichier ("%h") et le nom du fichier ("%f")