2011-09-30 2 views
9

나는이 지나치게 단순한 질문을 드려 죄송합니다,하지만 난 내가 읽고 있어요 책에서이 예제를 알아낼 수 없습니다누군가가이 스 니펫을 설명 할 수 있습니까 (왜이 괄호가 여기에 있습니까)?

void f5() 
{ 
    int x; 
    { 
     int y; 
    } 
} 

에 대한 int y을 둘러싼 괄호 무엇입니까? 당신이 원하는 곳에 중괄호를 둘 수 있습니까? 그렇다면 언제, 왜 그렇게 하시겠습니까? 아니면 책의 오류일까요?

+2

이것은 C 언어로 주로 적용되는 기술로 첫 번째 문 다음에 로컬 임시 값을 생성하는 기술입니다. 실행이 종료 중괄호를 종료하면 해당 범위 내에서 작성된 모든 변수가 사라집니다. –

답변

13

중괄호 안에있는 중괄호 안의 코드는 이제 다른 범위에 있음을 나타냅니다. 중괄호 밖의 y에 액세스하려고 시도하면 오류가 발생합니다.

+0

그건 의미가 있지만, 혼란 스럽다는 것은 함수 안에 있어야한다고 생각했습니다. 중괄호를 함수 안에 넣을 수 있다면 중첩 된 함수를 사용해야하는 이유를 알 수 없습니다. 아니면 왼쪽 필드에서 어딘가에 있을까요? – Gary

+4

함수 자체의 범위가 있지만 함수 내에 범위를 포함 할 수도 있습니다. 이것은 매우 유용 할 수 있습니다. 예를 들어 C++ 객체는 소멸자를 가지며 객체가 범위를 벗어날 때 특정 지점에서 리소스를 해제하는 데 사용할 수 있습니다. 이 중간 기능을 원할 수도 있습니다. – Benj

4

범위를 정의합니다. 변수 Y는 중} 호 외부에서 액세스 할 수 없습니다.

4

중괄호는 범위를 나타내며 변수 x는 내부 중괄호의 범위에서 볼 수 있지만 y는 중괄호 범위 밖에서는 볼 수 없습니다.

3

중괄호는 범위 수준을 정의합니다. 중괄호 바깥쪽에는 y을 사용할 수 없습니다. 당신이 그 괄호 안에 y 값을 박스 것을 이렇게 오류 (문맥을 모르고)

처럼 보이는, 그리고 같은

1

는 외부에서 사용할 수 없습니다. 내부 오브젝트가 파괴되는 범위 출구에서

void f5() 
{ 
    int x = 1; 
    { 
     int y = 3; 
     y = y + x;   // works 
     x = x + y;   // works 
    } 
    y = y + x;    // fails 
    x = x + y;    // fails 
} 
6

그것은 범위 지정 변수의 문제, 예를 들어 수 . 예를 들어, 중요한 섹션을 중괄호로 묶고 여기에 잠금 객체를 구성 할 수 있습니다. 그런 다음 잠금 해제를 잊어 버릴 염려가 없습니다. 소멸자는 정상적으로 또는 예외로 인해 범위를 벗어날 때 자동으로 호출됩니다.

3

: 그들은 범위를 설명하려고하는 경우 물론

, 그 유효한 코드

관련 문제