주의: 부호 있는 정수형과 부호 없는 정수형 비교
소개
운동 중 "Accelerated C"의 2-3, 사용자가 컴파일러를 접했습니다. 경고: "부호 있는 정수 표현식과 부호 없는 정수 표현식을 비교합니다." 이 문제는 부호 있는 정수(int)를 문자열 길이에 일반적으로 사용되는 데이터 유형인 string::size_type과 비교할 때 발생합니다.
경고 원인
경고가 발생합니다. 부호 있는 정수 유형과 부호 없는 정수 유형의 범위가 다르기 때문입니다. 이러한 유형을 비교할 때 예상치 못한 결과가 나올 수 있습니다. 컴파일러는 프로그래머에게 혼란스러운 결과가 발생할 수 있음을 알리기 위해 이 경고를 발행합니다.
권장 방법
이 문제를 방지하려면 정수가 부호 있는 것인지 아니면 정수인지 명시적으로 지정하는 것이 좋습니다. 서명되지 않은. 정수를 문자열 길이 또는 기타 부호 없는 값과 비교할 때 비교되는 데이터 유형과 일치하도록 정수를 unsigned int 또는 size_t로 선언하십시오. 이렇게 하면 비교 결과가 의도한 결과를 얻을 수 있습니다.
예제 코드
제공된 코드에서 padtopbottom은 string::size_type 변수와 일치하도록 unsigned int로 선언되어야 합니다. c:
unsigned int padtopbottom; cin >> padtopbottom; unsigned int padsides; cin >> padsides; if (r == padtopbottom + 1 && c == padsides + 1) { // ... }
추가 참고
위 내용은 C에서 '부호 있는 정수 표현식과 부호 없는 정수 표현식 간의 비교' 경고가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!