본문 바로가기
dev, tech

<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> 변수의 종류

by 구띵 2006. 6. 8.

1. 변수의 종류에 대한 답변

 

auto, static, extern은 변수의 종류를 구분하는 키워드입니다. 키워드 설명에 앞서 알아두어야 할 내용을 간략하게 말씀드리겠습니다.

 

C에서 변수는 값이 저장되는 메모리 영역이나 변수의 유효범위에 따라 구분됩니다. 메모리의 종류는 스택(Stack)과 힙(Heap)로 나뉘고, 유효범위 구분은 크게 지역변수(Local Variable)와 전역변수(Global Variable)가 있습니다. 지역변수는 선언된 블럭({}) 또는 함수 안에서만 의미를 갖는 변수이고, 전역변수는 프로그램 전체에서 사용 가능한 변수입니다.

 

1) auto (자동변수)

    - 일반적인 변수 형태로 블럭 안에서만 유효하며 블럭의 실행이 끝나면 소멸

    - 스택(Stack)에 메모리 할당

    - auto 키워드는 생략할 수 있음.  즉 아무 표시가 없으면 자동변수가 됨

 

2) static (정적변수)

    - 블럭 안에서만 유효한 값을 가지지만 자동변수와 같이 없어지지 않고 블럭으로 다시

      돌아왔을 때 이전 값을 다시 이용 가능

    - 초기화를 생략하면 0으로 자동 초기화

    - 힙(Heap)에 메모리 할당

    - 선언된 위치에 따라 다음과 같이 구분됨

        . 내부정적변수 : 함수 내부에서 선언되며, 함수 내부에서만 사용이 가능. 하지만,

                                       프로그램이 실행되는 동안 존재

        . 외부정적변수 : 함수 외부에서 선언되며, 다른 소스파일에서는 참조할 수 없음

 

3) extern (외부변수)

    - 함수 밖에서 선언되며, 프로그램 전체에서 유효하고 다른 파일에서도 참조 가능

    - 초기화를 생략하면 0으로 자동 초기화

    - 힙(Heap)에 메모리 할당

    - extern 변수는 편리하지만 남발하면 프로그램을 복잡하게 하고 나중에 유지보수가

      힘들기 때문에 사용을 최소화 하는 것이 바람직함

 

간단히 요약하면 auto는 함수 내부에서 임시로 사용할 변수를 선언할 때 사용하는 가장 일반적인 변수 형태이며, static은 함수 또는 파일에서 값을 보존할 필요가 있을 때(예를 들어 어떤 함수를 몇 번 호출했는지 알고 싶을 때 static 변수로 하나 선언해서 호출될 때마다 1씩 더해주면 Counter를 쉽게 만들 수 있습니다) 사용되며, extern은 유효 범위에 신경쓰지 않고 전체 프로그램에서 변수를 참조할 수 있지만 프로그램을 이해하기 어렵게 만드는 원인이 되므로 꼭 필요한 경우가 아니면 사용을 자제하는게 좋습니다. 

 

변수의 종류에 대한 키워드로 register가 더 있지만 많이 쓰이지 않으므로 설명은 생략하겠습니다.

  

댓글