> 백엔드 개발 > C++ > 본문

C에서 '부호 있는 정수 표현식과 부호 없는 정수 표현식 간의 비교' 경고가 나타나는 이유는 무엇입니까?

Barbara Streisand
풀어 주다: 2024-11-10 13:00:03
원래의
725명이 탐색했습니다.

Why do I get a

주의: 부호 있는 정수형과 부호 없는 정수형 비교

소개

운동 중 "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) {
    // ...
}
로그인 후 복사

추가 참고

  • 정수를 부호 없는 것으로 선언하면 정수를 문자열 길이와 비교할 때 예기치 않은 동작이 발생할 가능성을 피할 수 있습니다.
  • 비교에 사용할 정확한 유형은 비교에 따라 다릅니다. 작업 중인 데이터 유형입니다.
  • Linux Mint의 경우 string::size_type은 일반적으로 unsigned int로 정의됩니다. 비교를 안전하게 만듭니다. 그러나 정수를 명시적으로 선언하는 것은 여전히 ​​좋은 습관입니다.
  • "Accelerated C" 책은 데이터 유형 처리와 관련된 주제를 다루지만 부호 있는 유형과 부호 없는 유형 간의 비교에 대한 포괄적인 설명을 제공하지 않을 수 있습니다.

위 내용은 C에서 '부호 있는 정수 표현식과 부호 없는 정수 표현식 간의 비교' 경고가 나타나는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿