반응형
C 언어에서는 전역변수와 지역변수의 이름이 중복될 때 지역변수가 선언된 함수에서 전역변수를 참조
할 수 없다. 위 예의 func 함수는 전역변수 i를 읽거나 참조할 수 없는데 전역 i가 지역 i에 의해 완전히 가
려져 있기 때문이다. 변수가 아직 존재하지만 가려져 있어 쓸 수 없는 상태이며 이 상황을 가시성
(Visibility) 이 없다고 표현한다.
그러나 C++에서는 가려져 있는 전역변수를 참조할 수 있는 별도의 범위 연산자 :: 을 사용하면
전역 i를 읽을 수 있다. func 함수의 끝에 다음 코드를 추가해 보자.
printf("global i=%d\n",::i);
::i라는 명칭은 전역변수 i라는 뜻이다.
:: 연산자에 대해서는 차후에 C++에서 다시 다루게 될 것이다. 통용 범위 규칙은 아주 상식적이기 때문에
비교적 이해하기 쉽다. 요약하자면 "같은 통용 범위내에서는 명칭이
중복될 수 없으며 전역, 지역 명칭이 중복된 경우는 지역이 우선이다"라고 할 수 있다.
from http://winapi.co.kr
'Other Programming > C C++' 카테고리의 다른 글
[C] C는 포인터에 대한 증감 연산을 산술 연산과는 달리 아주 특수하게 수행한다. /포인터 연산 (0) | 2009.05.03 |
---|---|
[C] AlphaNum 문제 (0) | 2009.04.29 |
[C] 배열명이 단독으로 사용되면 배열의 시작번지값을 가지는 포인터 상수이다. /배열명이 그 자체로 포인터이므로 scanf의 인수로 넘길 때 &연산자를 붙이지 않는다 (0) | 2009.04.29 |
[C] 배열을 정의 할때 sizeof 연산자를 사용하면 유지보수가 쉬워진다 (0) | 2009.04.29 |
[C] Turboc 터보c 터보씨 헤더파일 닷넷 추가 디렉토리 참고 / turboc.h 파일 포함 (0) | 2009.04.28 |
[C] entern (0) | 2009.04.28 |
[C] #define 전처리문 예제 (0) | 2009.04.28 |
[c] C의 추억의 함수 스타일 (0) | 2009.04.28 |