>백엔드 개발 >C++ >C와 C99에서는 `bool`에서 `int`로의 변환이 항상 예상대로 작동합니까?

C와 C99에서는 `bool`에서 `int`로의 변환이 항상 예상대로 작동합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-16 16:07:17535검색

Will `bool` to `int` Conversions Always Behave Predictably in C   and C99?

Bool에서 Int로의 변환: 이식성 및 어설션

C와 심지어 C99에서도 개발자는 부울 값(bool)에서 정수(int)로의 암시적 변환을 활용하는 경우가 많습니다. . 그러나 코드 정확성을 보장하려면 이 변환의 이식성과 의미를 이해하는 것이 중요합니다.

다음 코드 조각을 고려하세요.

int x = 4 < 5;
assert(x == 1);

x = 4 > 5;
assert(x == 0);

이러한 주장의 예상 결과는 무엇입니까? 모든 컨텍스트에서 전달이 보장됩니까?

Bool에서 Int로의 변환 이식성

bool에서 int로의 암시적 변환은 C 표준에 정의되어 있습니다.

  • bool의 경우 "false"는 0으로 변환되고 "true"는 0으로 변환됩니다. 1.
  • _Bool이 bool을 대체하고 true/false가 매크로인 C99의 경우 동일한 변환 규칙이 적용됩니다.

이 변환은 완전히 이식 가능하며 모든 호환 컴파일러에서 올바른 동작을 보장합니다. .

평가 어설션

변환 규칙을 기반으로 어설션을 평가할 수 있습니다.

  • 4 < 5는 true로 평가되어 1로 변환됩니다. 따라서 x == 1이 성립합니다.
  • 4 > 5는 false로 평가되어 0으로 변환됩니다. 따라서 x == 0이 성립합니다.

결론

제공된 코드의 컨텍스트 내에서 어설션은 bool에서 int로의 변환이 암시적으로 수행되고 예상 값("true"의 경우 1, "false"의 경우 0)이 할당되기 때문에 통과합니다. 올바르게. 그러나 이 동작은 제시된 코드 조각에만 국한되지 않고 그러한 변환이 사용되는 모든 상황으로 확장된다는 점에 유의하는 것이 중요합니다.

위 내용은 C와 C99에서는 `bool`에서 `int`로의 변환이 항상 예상대로 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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