C의 부호 있는 정수와 부호 없는 정수 비교 경고
"Accelerated C"의 연습 2-3 컨텍스트에서 오류가 발생했습니다. 컴파일하는 동안 부호 있는 정수 표현식과 부호 없는 정수 표현식 간의 비교로 인해 발생합니다. 이 문제와 그 의미를 살펴보겠습니다.
문제가 있는 코드는 int 유형의 정수 변수 padtopbottom을 string::size_type 유형의 문자열 크기 변수 c와 비교합니다. string::size_type은 부호 없는 정수 유형인 반면 int는 부호 있는 정수 유형입니다.
이 비교가 왜 문제가 됩니까?
기본적으로 int 변수는 두 가지를 모두 담을 수 있습니다. unsigned int 변수는 양수 값과 음수 값만 가질 수 있지만, unsigned int 변수는 양수 값만 가질 수 있습니다. 이러한 범위 차이로 인해 두 유형을 비교할 때 예상치 못한 동작이 발생할 수 있습니다.
비교 모범 사례
부호-무부호 비교에서 잠재적인 문제를 방지하려면 다음을 수행하는 것이 좋습니다. 특히 문자열 크기 또는 기타 부호 없는 값과 비교할 때 음수 값을 유지하지 않는 변수에 부호 없는 정수를 사용합니다. 값을 사용합니다.
또한 일반적으로 비교할 정확한 유형을 사용하는 것이 좋습니다. 예를 들어 문자열의 길이를 비교할 때 std::string::size_type을 변수 유형으로 사용하세요.
암시적 변환 및 명시적 형변환
컴파일러는 암시적 변환을 수행할 수 있습니다. 부호 없는 유형이 필요한 표현식에서 피연산자 중 하나가 사용되는 경우와 같은 특정 상황에서 부호 있는 유형과 부호 없는 유형 간의 변환입니다. 그러나 필요한 경우 값 중 하나를 호환 가능한 유형으로 명시적으로 캐스팅하는 것이 더 안전합니다. 이렇게 하면 동작이 명확하고 의도된 것인지 확인할 수 있습니다.
연습 문제 해결
제공된 연습 코드의 경고를 해결하려면 int padtopbottom을 unsigned int padtopbottom으로 변경할 수 있습니다. 비교의 두 피연산자가 모두 동일한 부호 없는 정수인지 확인하기 위해 type.
이 문제는 나중에 "Accelerated C"에서 설명됩니까?
안타깝게도 이 특정 주제가 "의 이후 장에서 직접 다루어지는지는 확실하지 않습니다. 가속 C ." 하지만 이 책은 일반적으로 중요한 C 개념을 다루고 있으며, 이해를 돕기 위해 부호-비부호 비교에 대한 추가 읽기를 권장합니다.
위 내용은 부호 있는 정수와 부호 없는 정수를 비교하면 C에서 경고가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!