2012-11-27 5 views
1

는 다음의 코드를 고려 경우GCC가 해상도 손실에 대한 경고를 생성하지 않는 이유는 무엇입니까?

long long someVar64 = 0LL; 
int someVar32 = someVar64; 

그것은 잠재적 버그가 64 비트 값의 비트 손실이 발생하는 32 비트 값에 할당되고 여기에있어 명백한 아니다. 이 경우 우리는 0의 상위 비트를 신경 쓰지 않기 때문에 괜찮습니다.하지만 상수를 변경하면 쉽게 버그를 만들 수 있습니다.

GCC (4.4.3)가이 코드에 대한 경고를 생성하지 않는 이유는 무엇입니까? 이전 버전에서는 익숙한 점을 기억합니다.

+3

가 명시 적으로이 경고'-Wconversion'을 가능하게하려고 했습니까? –

+0

GCC를 호출하기 위해 어떤 플래그를 사용할지 지정하지는 않지만 최소한 -Wall을 시작점으로 사용해야합니다. –

답변

3

이 경고는 -Wconversion에 의해 활성화됩니다. -Wall 또는 -Wextra에 의해 활성화되지 않습니다.

-Wconversion

는 값을 변경할 수 있습니다 암시 적 변환에 대한 경고. 여기에는 실수와 정수 사이의 변환이 포함됩니다 (예 : abs (x)). x가 인 경우 double; 사이의 변환 abs ((int) x)ui = (unsigned) -1, 같은 또는 명시 적 캐스트에 대해 경고하지 않음 sqrtf (M_PI).

처럼 작은 종류 unsigned ui = -1;과 전환처럼, 서명과 서명되지 않은 값이 abs (2.0)에서처럼 변환에 의해 변경되지 않은 경우.

[...]

출처 : http://gcc.gnu.org/onlinedocs/gcc-4.8.1/gcc/Warning-Options.html#Warning-Options

관련 문제