une gestion manuelle des ressources (RAM, fd …) > pointeurs Le C, un langage permissif > cast > void* > pointeurs de fonctions Le C, un langage exigeant > Écrasement mémoire, fuites mémoires, > Corruption de la pile d'exécution …
repeat yourself > Identifier les doublons, factoriser et refactorer > Utiliser des outils pour refactorer (NetBeans, Eclipse, Vim, …) Identifier le code mort avec LCOV > Créer des tests instrumentés avec LCOV dans votre chaîne de génération.
> gcc propose des flags de compilation • -Wall -Werror … • activer sur certaines cibles un maximum de flags de contrôles > clang est compatible gcc Tester pendant la génération > créer des tests pour vérifier la logique > créer des exemples basiques • une documentation utilisateur toujours à jour • des moyens d'investiguer certains bugs > instrumenter certains tests ou exemples avec des outils de détections de corruption mémoire (Valgrind)
clang est compatible gcc CMake pour générer dans plusieurs plateformes > activation des traitements en fonction du contexte • tests, options de génération > généreration hors des répertoires sources ne reconstruit que le nécessaire (rapidité de construction) > support de MinGW
partir d'une référence commune Jenkins pour orchestrer et publier le résultat des générations > Jenkins déclenche des constructions sur modification de la base de code