[완료] static 변수에 대한 질문..
글쓴이: SonaGius / 작성시간: 목, 2011/06/30 - 8:48오전
test.h
#include
void sonagius();
static public int abf = 0;
//////////////////////////////////////
test.c
void sonagius(){
printf("\nsonagius -> %d\n",abf);
}
//////////////////////////////////////
test2.c
#include "test.h"
void main(){
abf = 10;
printf("main -> %d\n",abf);
sonagius();
}
//////////////////////////////////////////
이렇게 abf라는 변수를 출력했을때 main에서 출력되는 값은 10인데
sonagius()함수가 출력하는 값이 0인 이유는 무엇일까요?
static 변수라함은 프로그램이 끝날때 까지 메모리에 남아있는 유일의 변수로 알고있는데
변수의 값을 변경했음에도
다른 변수를 갖고 있는 듯(?)한 출력을 보여줍니다..
Forums:
너무 당연한 이야기겠지만 :D
sonagius()함수를 test2.c 소스에 포함시켜서 출력을 할 경우에는 변경된 값으로 출력됩니다.
함수가 존재하는 소스 위치가 다르더라도 같은 프로잭트이고 한 프로세스이니 같은 메모리를 공유하는게 아닌지요?
static 키워드의 Scope이 C 파일이기 때문에
static 키워드의 Scope이 C 파일이기 때문에 각 Header 를 include 할때마다 새로운 변수가 생기는 겁니다.
죄송합니다 scope라는 표현을 모르겠습니다.
조금 더 쉬운 설명 부탁드리겠습니다..
http://www.google.co.kr/#hl=k
http://www.google.co.kr/#hl=ko&newwindow=1&q=c+%EB%B3%80%EC%88%98+scope&aq=f&aqi=&aql=&oq=&fp=5b94d080806faedd&biw=1280&bih=919
기본적인건 검색먼저 해보는 습관이 좋습니다.
----------------------
얇은 사 하이얀 고깔은 고이 접어서 나빌레라
답변 감사합니다..
Global static은 여전히 생존기간은 recipes.c 전체이지만, 일반 Global 변수와 다르게, 다른 file에서 extern을 선언하여 가져갈 수 없습니다. Global static은 다른 file로 부터 감추는 역할을 합니다. 이런 Global static의 이용은 보통 여러 사람이 같이 큰 project를 진행 할 때, 자신의 file에서만 사용하고, 다른 사람이 가져다 쓰지 못하게 하는데 사용 하는 예가 많습니다 .C++로 따지자면, protect 와 같은 원리라고 보면 되겠습니다요.
결국 static으로 선언하게 되면 값은 항상 유지 하되, 그 변수를 선언한 함수 또는 파일에서만 사용하도록 국한 시키는 속성을 지니게 합니다. 참 재미 있습니다. 다시 말해, 변수를 static을 붙여 넣어 선언을 하면 Global 변수처럼 항상 자기 값을 기억할 수 있게 되지요. 대신 접근성은 선언한 곳에서만 가능합니다. 함수 안에서 선언하면 함수 안에서만, file안에서 선언하면 file안에서만 가능하구요, extern으로 가져다 쓰지 못하죠. 다시 말하지만 protect된 것과 마찬가지입니다.
출처:변수의 scope와 그 생애 (Memory Map)
이렇게 된거 였군요..!!
앞으로는 좀 더 검색해서 알아보고 질문 올리겠습니다.
댓글 달기