Posts tagged with cpp

Recompiler plus vite ?

Feb 22, 2009 in cpp, linux, programmation, unix | Informatique

Si il vous arrive régulièrement de recompiler un logiciel développé en C ou C++, ccache pourrait vous intéresser. Concrètement, il s’agit d’un programme que vous allez appeler à la place du compilateur et qui va regarder si il n’a pas déjà dans son cache un objet binaire correspondant au fichier à compiler. Ainsi, vous éviterez le temps de compilation pour ce fichier! Au final, on obtient un gain plus ou moins sensible en fonction des projets.

Le cache est par défaut stocké dans le répertoire ~/.ccache/.

Pour utiliser ccache, rien de plus simple sous Debian et ses dérivés comme Ubuntu :)

Il suffit de l’installer

sudo aptitude install ccache

et d’ajouter la ligne suivante dans son fichier ~/.bashrc

PATH=/usr/lib/ccache/:$PATH

Voilà, maintenant ccache remplacera de manière transparente votre gcc qui ne sera appelé qu’en cas de besoin réel :)

Howto génération de bugs - épisode 3

Nov 13, 2007 in cpp, bug, programmation | Informatique

Petit exemple de code qui ne fait pas ce pourquoi il a été écrit

[cpp]
void MoveCharacter(Character& character, bool slowly)
{
   ...
   // Check we can move (to go not too fast)
   while (character.CanStillMoveRL(walking_pause) && ComputeHeightMovement (character, height, true));
   {
       // Move !
       Game::GetInstance()->character_already_chosen = true;
       // Eventually moves the character
       character.SetXY( Point2i(character.GetX() +character.GetDirection(),
                                character.GetY() +height) );
       // If no collision, let gravity do its job
       character.UpdatePosition();
   }
   ...
}

Le bug se situe ici dans le ; à la fin du while. La suite est alors considérée comme un bloc indépendant qui sera exécuté 1 seul fois et systématiquement à chaque fois que la fonction MoveCharacter() est appelée, ignorant complètement le résultat du test du while

PS: ce code a été écrit et modifié pour http://www.wormux.org Wormux. Je me suis bien pris la tête à chercher cette erreur bête (dont je suis l’auteur)!