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

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

Barbara Streisand
Barbara Streisand원래의
2024-11-10 13:00:03757검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.