2009-11-18 2 views
4

컴파일러에게 알려줄 수있는 방법이 있는지 궁금합니다 (gcc 버전 4.1.2 20080704 (Red Hat 4.1.2-46) 또는 icc 11.1) long-to-int 암시 적 변환이 발생할 때마다 경고.C : 암시 적 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; 
} 

과 :

gcc -Wall -Wconversion test.c -o test 

이 경고를 생성하지 않습니다 예를 들어, 코드가 포함 된 파일 test.c을 컴파일. 예상대로,

./test 12345678901 

내가 얻을 같은 결과 바이너리를 실행 : 번호 12345678901가 긴을 INT를 오버 플로워하지만하지

int: -539222987 
long: 12345678901 

한다. 컴파일러에서 이와 같은 일이 발생할 때마다 알려주고 싶습니다. 의외로 옵션 -Wconversion은 (저에게) 그렇게하지 않습니다.

감사합니다,

미셸

답변

4

확인하여 GCC 버전이 -Wshorten-64-to-32이있는 경우. 코드에서 부동 소수점을 사용하면 실수로 이중 -> 부동 변환 경고의 대홍수를 대비하십시오.

편집 :shorten-64-to-32은 메인 라인이 슬프게도 집어 들지 않는 Apple 확장 일 것입니다. 따라서 gcc-4.3 이상으로 업그레이드하지 않는 한 운이 좋지 않을 수 있습니다.

0

-Wconversionchanged with GCC4.3의 동작 - 컴파일러를 업데이트하고 다시 시도하십시오 (I은 32 비트 시스템에있어로 정말 자신을 작동하는지 확인할 수는 없지만, 경고가 제대로 atoll에 대한 방출됩니다로서, 그것은해야한다) .. .