GCC v4.4.5와 함께 일하고 있는데 예상하지 못한 기본 정수 승격 계획에 주목했습니다.GCC, 이상한 정수 승격 계획
암시 적 버그를 방지하기 위해 충분한 경고를 활성화하려면 -Wconversion 옵션을 활성화하고 그 이후로 아래 코드를 수행 할 때 경고문 "int에서 'short int'로의 변환이 값 "이 있습니다.
는signed short sA, sB=1, sC=2;
sA = sB + sC;
이 "SB + sC 여기"이 INT로 승진 한 후 짧은 서명 입니다 SA에 할당 된 것을 의미한다. 이 경고를 수정하려면 다음과 같이 캐스팅해야합니다.
signed short sA, sB=1, sC=2; sA = (signed short)(sB + sC);
이 경고
또한 아래의 코드에 존재합니다.signed short sA=2;
sA += 5;
오퍼레이터 이로써 + =을 제거함으로써 해결 될 수있다 .. I는 연산자를 사용할 수없는 다소 성가신 원인이
sA = (signed short)(sA + 1);
+ =, - =.
필자는 GCC가 피연산자에 따라 올바른 정수 프로모션을 선택할 것으로 예상했습니다. 내 말은, SA = SB + sC 여기 및 SA + = 5이 모두가 이 짧은 서명만큼 INT으로 승진 할 수 없습니다.
나는 기본적으로 INT에 홍보하는 오버 플로우 버그를 방지하지만 내가 INT 내 변수를 내 코드의 대부분을 주조하거나 변경해야 조금 짜증나 원인이 있다고 알고 있습니다.
이 정수 승격 계획을 나타 내기 위해 사용할 수있는 GCC 옵션이 있습니까?
도움 주셔서 감사합니다.
나는 해결책이 없지만,'signed short' 대신'short'를 쓸 수 있습니다. 이렇게하면 약간 짜증나게 할 수 있습니다. 나는 아직도 그것을 괴롭히는 것을 인정한다. –