if 조건과 중괄호가없는 변수를 선언 할 때 컴파일러 오류
첫 번째 if
는 잘 컴파일되고 두 번째는 실패하는 이유는 무엇 입니까?
if(proceed) {int i;} // This compiles fine.
if(proceed) int i;// This gives an error. (Syntax error on token ")", { expected after this token)
언어 사양에 다음과 같이 명시되어 있기 때문입니다.
http://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html
선언은 엔터티를 프로그램에 소개하고이 엔터티를 참조하기 위해 이름에 사용할 수있는 식별자 (§3.8)를 포함합니다. 선언 된 엔티티는 다음 중 하나입니다.
...
지역 변수, 다음 중 하나 :
* 블록에서 선언 된
지역 변수 (§14.4) * for 문에서 선언 된 지역 변수 (§14.14)
첫 번째 예는 i
블록 내부에서 선언 하는 것입니다 (중괄호로 표시됨). 두 번째는 for
진술 도 아닙니다 .
추가하기 위해 편집 : 상식적으로 이해됩니다. 허용된다면 쓸모가 없을 것입니다. 즉시 범위를 벗어납니다.
로부터 Java 언어 사양 .
블록 : { BlockStatements 선택 } BlockStatements : BlockStatement BlockStatements BlockStatement BlockStatement : LocalVariableDeclarationStatement ClassDeclaration 문
과
IfThenStatement : if ( 표현식 ) 문
것 같다 int i
A는 LocalVariableDeclarationStatement
하는 수 없습니다 Statement
. 그래서 작동하지 않습니다.
유용한 코드가 아니기 때문입니다. 중괄호 ({})가없는 if 문이있는 경우 if 다음의 첫 번째 줄 / 문만 실행됩니다. 따라서 지역 변수 만 선언하면 다른 곳에서는 사용할 수 없습니다. 그래서 그것을 선언하는 것은 절대적으로 불필요합니다.
if(proceed){
int i= 0;
// variable i can be used here
//...
}
if (proceed) int i; // i can not be used anywhere as it is a local variable
if (계속) int i;
if
중괄호없이 문을 사용 if
하면 조건부 방식으로 첫 줄만 실행됩니다 . 다른 라인은 정상적으로 실행됩니다.
지역 변수 선언이 조건부 방식으로 발생하고 컴파일러가 false 문으로 도달 할 수 없다고 가정하기 때문에 이것은 컴파일 실패입니다.
중괄호를 사용하면 블록 내에서 변수 선언과 지역 변수를 사용하므로 컴파일러는 도달 가능한 코드라고 가정합니다. 그런 다음 컴파일러 오류가 없습니다.
자바 / C ++ 에서처럼 중괄호없이 if를 쓰면 첫 번째 문만 실행된다.이 경우 변수 i는 쓸모가 없다. if 문에서 선언하고 범위는이 문 다음에 끝납니다.
C ++에서는 허용되지만 Java에서는 허용되지 않습니다.
'IT Share you' 카테고리의 다른 글
Rails를 사용하여 이메일에 이미지를 삽입하는 올바른 방법은 무엇입니까? (0) | 2020.12.10 |
---|---|
32 비트 정수에 대해 왼쪽 비트 시프트 "<<"가 32 회 이상 사용될 때 예상대로 작동하지 않는 이유는 무엇입니까? (0) | 2020.12.10 |
Jenkins에서 프로젝트를 특정 디렉터리로 체크 아웃하는 방법 (GIT 사용) (0) | 2020.12.10 |
파이썬 문자열에서 쉼표를 제거하는 방법 (0) | 2020.12.10 |
node.js에서 지원하는 AWS Lambda 함수를 사용하여 SNS 주제에 메시지를 게시 할 수 있습니까? (0) | 2020.12.10 |