해결된 질문
작성
·
307
0
int TestFunc(){
static int a = 10;
++a;
return a;
}
int main(){
printf("%d\n",TestFunc());
printf("%d\n",TestFunc());
printf("%d\n",TestFunc());
}
위 예제에서의 질문입니다.
1. Compile시에 정적영역이 결정되는 건가요?
질문이유 : a의 주소에 코드가 실행되지 않았음에도 이미 10이라는 값이 들어가있어서 질문을 드립니다.
2. TestFunc()이 실행될 때 static int a = 10
가 매번 평가되는게 아닌건가요?
질문이유 : 제 생각으로는 정적영역에 있더라도, 할당 연산자 때문에 10을 매번 넣어서, 출력값이 11 ,11 ,11이 될거라고 생각했습니다.
답변 1
1
네, 맞습니다. 정적 메모리 영역에 관한 정보는 실행파일에 포함됩니다. 즉, 해당 코드가 연산하기 전 이라 하더라도 프로세스 인스턴스가 생성되는 시점에 이미 잡혀있고 초기화 되어 있습니다.
변수의 선언은 평가의 대상의 아닙니다. 정적 변수에 대한 선언 및 정의는 연산식이 아닙니다. 변수 선언 시 기술하는 = 기호를 단순 대입 연산자로 생각하시면 안 되겠습니다.
참고하시기 바랍니다. :)
컴파일 타임에 딱 한번 정의가 되어야한다는 특성에서 나온거군용.. 감사합니다