static 함수
Language/C 2011. 8. 23. 10:52static의 원초적인 목적은 함수내에서 선언되어 그 함수가 return되었다가
다시 그 함수가 불리워도 그 변수가 값을 유지하고 있도록 하기 위함입니다.
그런데 이런 static 변수는 기본적으로 해당 프로그램이 초기화될때
메모리에서 제일 먼저 만들어두는게 규칙이죠. 그래서 이 변수가 원래의 목적과 다르게
Global 변수를 선언할 때 static을 선언하는 것처럼 오용되어 변질되어 왔습니다.
사실 Global은 static선언과 관계없이 처음부터 끝까지 존재하니까요.
더 엄격히 말하면 static이 붙은 변수가 속한 범위(코딩 내부구조에 따른 유효범위)내에서만
계속 값이 유지된다는 의미입니다.
static이 함수에 붙었다고 해서 같은 파일이어도 컴파일되고 하는 것은 단순히 그 현상일 뿐입니다
static이 어떤 파일에 존재하는 함수에 붙은 경우,
특히 c경우에는 함수는 함수가 기록된 파일 자체가 범위가 되는 것입니다.
어떤 클래스이든, 변수이든, 그것이 static으로 선언되었을 때에는 그 선언된 클래스나 변수가
기본적으로 어떠한 상황이든 값이나 기능을 메모리에 계속해서 유지하고자 함이라는
기본적인 static의 목적을 명심하시고,
이 경우 해당 유효범위내에서 메모리에 제일 먼저 생성되고 초기화되어 존재하는 것이라는 것만
생각하시면 됩니다.
여기에서 파생된 여러가지 현상을 이해하면
좀더 static 선언의 의미를 확실히 알수 있을 것 같습니다.
또한 static 선언을 남발하지 않고 정확하게 사용할 수 있지 않을까요?
물론 현재 윈도우 프로그램이 메모리에 비교적 자유롭게 한다지만
아무래도 메모리를 간결하게 사용하는 것이 프로가 아닐까 생각합니다
//printf("file1 \n");
//printf("file2 \n");
func();
'Language > C' 카테고리의 다른 글
[Linux/Unix]make 명령 코드 구현하기 (0) | 2011.08.23 |
---|---|
make (Makefile) (1) | 2011.08.23 |
gcc 컴파일 과정 (0) | 2011.08.23 |
Pthread API Reference (0) | 2011.08.23 |
static 전역 변수 (0) | 2011.08.23 |