본문 바로가기
  • _^**_
IT지식창고/잡지식

C언어와 Java 스코프 범위 차이에 대하여

by 크리드로얄워터 2023. 4. 9.
반응형

 

void f(){
    int a = 3;
    int c = 0;
    for(int i = 0; i < a; i++) {
        int a = 10;
        c += a;
    }
}

질문 ==> 

이 똑같은 코드를 자바와 c에서 돌린다고 하면, 
C은 왜 실행이 되고 자바는 왜 for문안쪽의 a에서 오류가 날까요?

 

 

답변 ==> 

위 코드는 C와 자바에서 실행 결과가 다를 수 있는 코드입니다. 이는 C와 자바의 변수 스코프(scope)가 다르기 때문입니다.

C에서는 변수의 스코프가 블록(block) 단위로 구분됩니다. 위 코드에서 변수 a는 함수 f()의 블록 안에서 정의되었으며, for문 안에서 정의된 변수 a는 for문의 블록 안에서만 유효합니다. 따라서, for문 안에서 정의된 변수 a와 함수 f() 안에서 정의된 변수 a는 이름이 같아도 서로 다른 변수로 간주됩니다.

반면, 자바에서는 변수의 스코프가 중괄호({})로 구분되는 블록 단위로 구분되지 않습니다. 따라서, for문 안에서 정의된 변수 a는 함수 f() 안에서 정의된 변수 a와 이름이 같아서 충돌이 발생합니다.

자바에서는 이러한 충돌을 막기 위해 변수의 이름을 중복되지 않도록 하거나, 변수의 스코프를 블록 단위로 구분할 수 있는 중괄호를 추가하여 코드를 작성해야 합니다.

반응형

댓글