2010-07-19 3 views
15

전역 변수의 기본 저장소 클래스는 무엇입니까?글로벌 변수의 기본 저장소 클래스는 무엇입니까?

내가 발견 한 웹에서 검색하는 동안 일부 사이트는 static이라고합니다. 그러나 정적은 내부 연결을 의미하며 변수는 파일 범위 외부에서 사용할 수 없습니다. 즉 다른 개체 파일에서 사용할 수 없어야합니다. 하지만 그들은 여전히 ​​extern int i과 같은 선언을 사용하여 다른 파일에 액세스 할 수 있습니다.

전역 변수에 명시 적으로 언급하면 ​​을 파일 범위 밖에서 사용할 수 없습니다.

그런 다음 전역 변수에 대한 올바른 기본 저장소 클래스는 무엇입니까?

답변

15

기본 저장 기간은 정적이지만 기본 연결은 외부입니다. 조금 혼란 스럽다는 것을 아는 유일한 사람은 아닙니다. The C Book (항상 좋은 참조) 말한다 :

"당신은 아마 복잡하고 혼란 모두 으로 상호 작용에게 이러한 다양한 요소들 사이의 을 찾을 수 있습니다! 그들이 있기 때문에 그 있어"

해당 인용문이있는 섹션 Declarations, Definitions and Accessibility에는 유용한 테이블 (8.1)이 있습니다. 마지막 행은 관심있는 케이스를 설명합니다. 참고로 저장소 클래스 지정자가없는 데이터 개체는 외부 연결과 정적 기간이 있습니다.

+0

내부 연결을 가지고 우리는 전역을'static int i'로 정의하고 전역 변수의 기본 저장 클래스가 정적이라면 그 정의는 내부 연결을 의미하는'static int i'처럼 보일 것입니다. –

+0

내가 말했듯이 기본 연결은 외부입니다. 정적의 기본값은 기간에만 적용됩니다. –

+1

다른 스패너를 작업에 던지려면 : C++에서 상수 개체는 기본적으로 내부 연결을 사용합니다. –

16

일반적으로 "전역"변수로 알려진 "기본 저장소 클래스"는 없습니다. 변수가 네임 스페이스 범위에 정의되면 항상 정적 저장 기간이입니다. 이를 변경할 수있는 방법이 없기 때문에 "기본값"에 대한 아이디어가 여기에 적용되지 않습니다. 이미 정적이었고, 그것은 정적으로 유지 - 당신이 네임 스페이스 범위에 정의 된 변수에 키워드 static를 적용하면

은 그것의 저장 기간에 영향을주지 않습니다. (그리고 저장 기간가 올바르게 소위입니다) - 그러나 그것에 영향을 끼친다 결합. static 키워드는 외부 (기본값)에서 내부 변수로 연결을 변경합니다. 연결은 별도의 개념으로, 저장 기간은과 거의 관련이 없습니다.

관련 문제