바람이 머문 언덕

c/c++ 변수의 종류. 본문

컴퓨터 IT/C++ 언어

c/c++ 변수의 종류.

알 수 없는 사용자 2010. 1. 1. 01:33
반응형

변수는 크게 로칼 변수와 글로벌 변수가 있는데 로칼 변수는 사용 범위에 제한이 있다.
c 언어에서는 변수를 함수 시작 부분에 정의 해주어야 하기 때문에 변수의 사용 범위는 함수 내라고 할 수 있으나
c++에서는 함수 내의 어느 곳이나 선언 할 수 있기 때문에 변수의 사용 범위는 변수 선언 이후라고 할 수 있다.

간단한 예)
int b = 0;    // 글로벌 변수는 함수 밖에서 선언되며 프로그램 종료시 소멸 된다. 
      int main(void)
{
       int i = 0;                             // i의 사용 범위는 main 함수 내이다.
       for( int k = 0; k < 5; k++)     // k는 for문 내에 선언 하였기 때문에 for문이 종료되면 소멸되기 때문에 
       {                                       // for 문 밖에서 사용하면 에러가 난다.
             i += k;
        }
       return 0;
}

글로벌 변수는 프로그램과 같이 생명을 같이 한다고 보아도 된다.
그러나 변수 선언이 변수를 사용하고자 하는 함수 이후에 선언 했을 경우에는 변수를 익식 못 한다.
 
레지스터 변수는 프로세스의 레지스터에서 처리되는 변수로 처리 속도를 빨리하기 위해서 사용는 로칼 변수이다.
반드시 레지스터 변수로 처리하라는게 아니라 남는 레지스터가 없을 경우에는 일반 변수로 처리 된다. 
선언 예) register int i;

메모리 변수는 레지스터 변수로 처리 할 수 있는 경우에도 그렇게 하지 말고, 메모리 변수(일반 변수)로 처리하기 위해
사용하는 로칼 변수로 일반적으로 인트럽트 루틴에서 사용한다.
 인트렙트 루틴에서 레지스트 변수로 선언을 해서 사용하다가 값이 바뀐 경우 레지스터 변수의 값을 바꾼 것이므로
언제 없어 질지 몰라서 메모리 변수를 사용하는 것이다.   
선언 예) volatile int i;

스태틱 변수
는 로칼 변수는 변수의 생성되고 소멸되는 범위가 선언 형식에 따라 함수 안일 수도 있고 제어문  안일 수도 있다.
그런데 변수가 그 범위를 벗어나도 소멸되지 않고 있어야 할 경우가 있있다.
특정 함수 안에서만 사용하는서 굳이 글로벌 변수로 선언해서 다른 곳에서 실수로 변경 할 위험을 안어면서까지 선언 할
필요 없이 프로그램 종료시까지 소멸되지 않는 로칼 변수를 static이라는 키워드로 만들어서 사용하면 된다. 
static 변수는 함수를 호출 할 때마다 초기화 하지 않고 프로그램 실행시 한번만 초기화 된다.
선언 예) static int i;

외부 변수는 글로벌 변수 중 하나로 다른 모듈에 선언 되어 있는 글로벌 변수를 사용한다는 것을 컴파일러에게 알려주기 위한 키워드이다.  선언 예) extern int iCount;
예와 같이 선언하면 int iCount라는 다른 모듈에 선언 되어 있는 변수를 사용한다고 켐파일러에게 알려 주는 것이다.