2009-04-21 2 views
5

긴 변환에서 짧은 변환으로 인해 데이터 손실에 대한 경고가 생성되는 gcc 플래그가 있습니까?Visual Studio의 데이터 손실 가능성과 유사한 gcc 4.2 경고가 있습니까?

저는 Visual Studio (2005)와 GCC 4.2 (Mac OS X 용) 용으로 컴파일 된 C++ 응용 프로그램을 만들고 있습니다.

Visual Studio를 프린트 아웃이 패턴을 따르도록 경고 :

: warning C4244: 'argument' : conversion from 'long' to 'short', possible loss of data 

내가 -Wconversion을 시도했습니다,하지만 그건 내가 찾고 꽤 무엇되지 않습니다. 내가 지금까지 찾을 수 있었던 유일한 것은 실험적인 깃발, GCC 4.3 (우리가 아직 꽤 투자하고 싶은지 확실하지 않은)과 관련된 강제이다.

2009 년 4 월 22 일 @ 11:00 EST 편집 : 명확히하기 위해 경고를보고 싶습니다. 데이터 손실이 언제 발생하는지 알고 싶다면 코드를 작성하십시오. 나는 코드가있는 경우 :

    값 1 : 2147483647
    값 2 : 65535 우리의 코드에서

, 우리는 특별한이

unsigned long value1 = LONG_MAX; 
std::cout << "value1: " << value1 << std::endl; 

unsigned short value2 = value1; 
std::cout << "value2: " << value2 << std::endl; 

을 나는이 예상 결과를 얻을 수 강제 실행을 수행하고 실행 된 코드로 인해 데이터가 손실 될 경우 경고합니다. 우리는 Visual Studio의 경고를 사용하여 큰 코드 기반에 장소를 발견했습니다.

gcc 4.2에서 이러한 경고를 생성 할 수있는 방법이 있습니까?

답변

4

이 기능은 GCC 4.2에서 지원되지 않습니다 있지만 GCC 4.3에 추가되었습니다. Wiki page explaining it.

나를 인도 한 링크를 제공 한 schnaader와 Evan Teran에게 감사드립니다.

+1

가능한 데이터 손실 검증을 위해서'-Wshorten-64-to-32'를 시도하십시오. '-Wconversion'은 또한 signedness 에러 (잔인 함)를 검사 할 것입니다. – rustyx

+0

'-Wshorten-64-to-32'는 GCC에 의해 받아 들여지지 않고, Clang에 의해서만 받아 들여집니다. – Andy

4

이걸 보면 이 길거나 짧은 것으로 변환해도 경고로 이어지지 않는 이유를 이해하는 데 도움이 될 수 있습니다.

+3

더 나은 아직 그 버그 항목에있는 링크를 따르십시오 : http://gcc.gnu.org/wiki/Wercercion –

+0

이것은 실제로 내 질문에 대답하지 않습니다. 하지만 찾아 주셔서 감사합니다. –

4

-Wconversion을 사용하십시오. 벌써 -Wall을 지정해도 이걸 필요로하는 것 같습니다.

확실히 gcc4.3에서 작동합니다. 버전 4.2에서 수정되지 않은 경우 업그레이드하려면 업그레이드해야합니다.

예 경고 :

warning: conversion to 'short int' from 'int' may alter its value