>백엔드 개발 >C++ >C의 \'if\' 문이 여러 변수 선언을 처리할 수 있습니까?

C의 \'if\' 문이 여러 변수 선언을 처리할 수 있습니까?

Patricia Arquette
Patricia Arquette원래의
2024-11-27 17:58:14741검색

Can C  's

"if" 표현식의 변수 선언: 표준 및 컴파일러 문제

문제

C에서 "if" 문 조건 내의 변수 선언은 다음과 같습니다. 혼란과 컴파일러 제한의 대상이었습니다. 다음과 같은 코드 조각은 종종 질문을 제기합니다.

if (int a = Func1()) { ... } // Works
if ((int a = Func1())) { ... } // Fails to compile
if ((int a = Func1()) && (int b = Func2())) { ... } // Works

C 03 표준은 "if" 조건에서 변수 선언을 허용하며 범위는 조건에 의해 제어되는 하위 명령문의 끝까지 확장됩니다. 그러나 괄호나 다중 선언에 대한 제한 사항은 지정하지 않습니다.

제한 사항

표준의 자동 허용에도 불구하고 VS2008을 포함한 많은 컴파일러에서는 제한 사항을 적용합니다.

  • 괄호로 선언을 묶을 수 없습니다.
  • 한 개당 하나의 선언만 허용됩니다. 조건.

더 짜증나는 예

이 제한은 조건 내에서 여러 변수를 선언하고 특정 값을 할당할 때 특히 짜증날 수 있습니다. 고려 사항:

bool a = false, b = true;
if (bool x = a || b) { ... }

x가 false로 설정된 "if" 본문을 입력하려면 선언 주위에 괄호가 필요합니다. 다만 괄호가 허용되지 않기 때문에 x는 본문 외부에서 선언해야 하므로 더 넓은 범위로 유출됩니다.

결론

C 17 이전에는 "if에서 여러 변수 선언에 원하는 구문이 필요했습니다. " 조건이 표준에 부합하지 않았습니다. 그러나 컴파일러는 종종 추가 제한 사항을 부과했습니다.

C 17 솔루션

다행히 C 17에서는 이 문제를 해결하는 새로운 구문을 도입했습니다.

if (int a = Func1(), b = Func2(); a && b) { ... }

C 17에서는 이제 세미콜론을 사용하여 선언과 실제 조건을 구분할 수 있으므로 여러 변수 선언과 괄호를 사용할 수 있습니다.

위 내용은 C의 \'if\' 문이 여러 변수 선언을 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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