2009-11-18 2 views
4

Je me demandais s'il y a un moyen de dire au compilateur (je suis sur gcc version 4.1.2 20080704 (Red Hat 4.1.2-46) ou icc 11.1) pour lancer un avertissement chaque fois qu'une conversion implicite long-à-int a lieu. Par exemple, la compilation du fichier test.c qui contient le code:C: avertit de la conversion implicite long à int

#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char** argv) 
{ 
    int n = atol(argv[1]); 
    printf("int: %d\n", n); 
    long int N = atol(argv[1]); 
    printf("long: %ld\n", N); 

    return 0; 
} 

avec:

gcc -Wall -Wconversion test.c -o test 

ne produit pas d'avertissement. L'exécution du binaire résultant comme

./test 12345678901 

je reçois, comme prévu:

int: -539222987 
long: 12345678901 

que le nombre 12345678901 a survolée l'int, mais pas long. Je voudrais que le compilateur me dise quand quelque chose comme ça pourrait arriver. L'option -Wconversion de manière inattendue (pour moi) ne le fait pas.

Merci,

Michele

Répondre

4

Vérifiez si votre version de gcc a -Wshorten-64-to-32. Préparez-vous à un déluge d'avertissements de conversion double -> float éventuellement faux si vous utilisez le point flottant dans votre code.

éditer: Je pense que shorten-64-to-32 peut être une extension Apple que la ligne principale n'a jamais ramassé, malheureusement. Vous risquez donc de ne pas avoir de chance, sauf si vous passez à gcc-4.3 ou supérieur.

0

Le comportement de -Wconversionchanged with GCC4.3 - mettre à jour votre compilateur et essayez à nouveau (ne peut pas vérifier si elle fonctionne vraiment moi-même que je suis sur un système 32 bits, mais comme l'avertissement émis correctement pour se atoll, il se doit) .. .

Questions connexes