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가 더 있지만 많이 쓰이지 않으므로 설명은 생략하겠습니다.
'dev, tech' 카테고리의 다른 글
<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> 즐겨찾기1 (0) | 2006.06.10 |
---|---|
<img src="http://blogimgs.naver.com/nblog/ico_scrap01.gif" class="i_scrap" width="50" height="15" alt="본문스크랩" /> qsort() (0) | 2006.06.09 |
11 (0) | 2006.05.22 |
[펌] float형과 double의 표현 범위 (0) | 2006.05.16 |
행의 갯수 세기 (0) | 2006.05.03 |
댓글