인프런 커뮤니티 질문&답변

Kumma님의 프로필 이미지
Kumma

작성한 질문수

독하게 시작하는 C 프로그래밍

정적 메모리와 기억부류 지정자

static 변수에 관해서 질문이 있습니다.

해결된 질문

작성

·

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

널널한 개발자님의 프로필 이미지
널널한 개발자
지식공유자

  1. 네, 맞습니다. 정적 메모리 영역에 관한 정보는 실행파일에 포함됩니다. 즉, 해당 코드가 연산하기 전 이라 하더라도 프로세스 인스턴스가 생성되는 시점에 이미 잡혀있고 초기화 되어 있습니다.

  2. 변수의 선언은 평가의 대상의 아닙니다. 정적 변수에 대한 선언 및 정의는 연산식이 아닙니다. 변수 선언 시 기술하는 = 기호를 단순 대입 연산자로 생각하시면 안 되겠습니다.

참고하시기 바랍니다. :)

Kumma님의 프로필 이미지
Kumma
질문자

컴파일 타임에 딱 한번 정의가 되어야한다는 특성에서 나온거군용.. 감사합니다

Kumma님의 프로필 이미지
Kumma

작성한 질문수

질문하기