C는 {}마다 stack이 할당 되나요?

조회수 1412회

소스코드

void foo() {
   int c[100];
   {
       int d[200];
   }
   //d[0]=1; //에러
   return;
}

if나 for같은 상황이아니라 그냥 {}를 하나 더 썼을 뿐인데 블록을 빠져나오니까 d를 못쓰게 됬습니다.

교수님이 강의시간에 {}는 블록이라고 했는데 그럼 이 블록마다 스택이 올라갔다가 내려갔다가 하는 건가요?

1 답변

  • 좋아요

    0

    싫어요
    채택 취소하기

    질문하신 것 같이 brace의 맨 윗줄에 변수등을 선언할 수 있고, 영역을 벗어나면 더 이상 그 식별자를 쓸 수 없기 때문에 프로그래머가 보기에는 스택과 비슷한 느낌일 수 있지만.

    C의 brace({, })는 stack frame이 아니고 naming scope이기 때문에 brace에 진입했다고 해서 스택에 push/pop하는 일은 없습니다.

    질문하신 코드는 이론적으로 배열 dfoo함수 전체에서 메모리를 잡고 있습니다.

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.