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에서는 이 문제를 해결하는 새로운 구문을 도입했습니다.
if (int a = Func1(), b = Func2(); a && b) { ... }
C 17에서는 이제 세미콜론을 사용하여 선언과 실제 조건을 구분할 수 있으므로 여러 변수 선언과 괄호를 사용할 수 있습니다.
위 내용은 C의 \'if\' 문이 여러 변수 선언을 처리할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!