본문 바로가기

Other Programming/C C++

[C/C++] ::변수 C#의 this 키워드와 비슷한 개념이라고 보면 될듯 / 지역변수 전역변수 구분

반응형

C 언어에서는 전역변수와 지역변수의 이름이 중복될 때 지역변수가 선언된 함수에서 전역변수를 참조

할 수 없다
.
위 예의 func 함수는 전역변수 i를 읽거나 참조할 수 없는데 전역 i가 지역 i에 의해 완전히 가

려져 있기 때문이다. 변수가 아직 존재하지만 가려져 있어 쓸 수 없는 상태이며 이 상황을 가시성

(Visibility) 이 없다고 표현한다.

그러나 C++에서는 가려져 있는 전역변수를 참조할 수 있는 별도의 범위 연산자 :: 을 사용하면

전역 i를 읽을 수 있다. func 함수의 끝에 다음 코드를 추가해 보자.

 

printf("global i=%d\n",::i);

 

::i라는 명칭은 전역변수 i라는 뜻이다.

:: 연산자에 대해서는 차후에 C++에서 다시 다루게 될 것이다. 통용 범위 규칙은 아주 상식적이기 때문에

비교적 이해하기 쉽다. 요약하자면 "같은 통용 범위내에서는 명칭이

중복될 수 없으며 전역, 지역 명칭이 중복된 경우는 지역이 우선이다"라고 할 수 있다.



from http://winapi.co.kr