Blog Haypo

Aller au contenu | Aller au menu | Aller à la recherche

lundi 3 décembre 2007

Mes liens favoris (del.icio.us)

Pour noter mes liens favoris, j'avais trouvé une bonne méthode : ajouter des liens externes à l'article Wikipédia associé. En particulier, j'avais noté de chouettes liens sur le noyau Linux.

Malheureusement (pour moi), ce qui devait arriver arriva, j'ai été découvert : « 22 novembre 2007 à 18:50. Chtit draco. (Annulation des modifications 23234174 de Haypo : lien externe absolument pas de référence, anecdotique et sans utilité, cfr Wikipédia:Liens externes) » (commentaire du changement de l'article). Fort heureusement, j'avais choisi Wikipédia comme base de donnée car chaque modification est archivée et je peux donc retrouver les liens même après effacement ;-)

Mais bon, faut pas abuser alors j'ai décidé de migrer mes liens sur le site Delicious : voir mes favoris del.ico.us. Forcément, j'ai retrouvé d'autres amis geeks ce qui me permet de votre quels liens ils apprécient. Et puis, les outils pour trouver des liens proches des miens, grâce aux tags, ont l'air bien foutus. Je me suis déjà abonné aux liens concernant le fuzzing pour voir.

Options de GCC

J'adore GCC ! C'est une collection de compilateurs pour de nombreux langages : C, ObjectiveC, C++, Java, Pascal, Ada, Fortran, etc. Il n'est peut être pas le compilateur le plus rapide (quoique...), mais celui qui supporte le plus d'architectures (processeurs et systèmes d'exploitation). Il permet d'ailleurs de compiler pour une architecture différente du système hôte (cross-compilation). Exemples : compiler depuis Linux pour Windows, compiler depuis Linux sur un processeur IA32 pour un ARM, etc. Je pense également qu'il respecte au plus près les standards (comme ISO C99).

Options -Wall -Wextra -Werror

Chaque nouvelle version de GCC détecte un peu plus de bugs. Ils sont soit rapportés sous forme d'avertissements, soit sous forme d'erreurs (bloque la compilation). Par expérience, je vous conseille d'activer tous les avertissements et de les corriger au plus tôt. L'option « -Wall » est censée activer tous les avertissements (vu son nom)... mais il existe « -Wextra » qui active encore plus d'avertissements ! Notez que -Wextra s'appellait « -W » tout court pour les versions inférieures à GCC 4.0. Si vous êtes pointilleux, vous pouvez utiliser « -Werror » qui va traduire les avertissements en erreur. Ceci oblige à corriger les avertissements sous peine de ne pas pouvoir compiler le programme.

Avec « -Wall -Wextra -Werror » on pourrait penser que GCC a fait de son mieux, mais que neni ! Il existe encore d'autres options « secrètes » comme par exemple l'option « -Wconversion » qui est pourtant utile : elle détecte les conversions de type dangereuses. Je pense que cette option est désactivée par défaut car elle produit beaucoup d'avertissements dont une bonne partie de faux positifs.

Détails de quelques options

Si je ne me trompe pas, les options suivantes sont toutes activées par « -Wall -Wextra ».

  • -Waddress détecte les comparaisons de pointeur (et non pas de la valeur pointée) comme dans « char *hello="Hello"; if (hello == "Hello") ... »
  • -Wuninitialized détecte l'utilisation de variable non initialisée : « char *x; printf("x=%s\n", x); »
  • -Wunused détecte les varibles inutiliséees : « void rien() { char x = 42; } »
  • -Wno-int-to-pointer-cast / -Wpointer-to-int-cast avertit des conversions implicites entre pointeur et entier : « void *x = NULL; int y = x; ». Ceci est problématique sur certaines architectures telle qu'AMD64 où un entier int fait 32 bits alors qu'un pointeur fait 64 bits !
  • -Wparentheses et -Wmissing-braces proposent d'ajouter des parenthèses / accolades pour du code prêtant à confusion
  • -Wformat détecte appels erronés à printf (argument manquant ou en trop, ou encore type incompatible) : « printf("Bonjour %s\n"); »

Notez que vous pouvez écrire « -Wno-(...) » pour désactiver un avertissement, comme par exemple : « -Wno-format ».

Lire également mon autre article sur GCC