2017-04-19 12 views
9

Storage-class specifiers에서 : 저장 기간 및 연결 :왜 두 개의 독립적 인 속성을 결정하기 위해 스토리지 클래스 지정자가 사용됩니까?

스토리지 클래스 지정자들은 선언 이름의 두 개의 독립적 인 특성을 결정합니다. static 키워드가 (누가 스토리지 클래스 어쨌든 정적) 전역 변수와 함수에 사용하는 경우

그래서, 예를 들어, 내부 - 연결에 자신의 연결을 설정합니다. 함수 (링크가없는) 내부의 변수에 사용될 때 - 저장소 클래스를 정적으로 설정합니다.

제 질문은 : 두 가지 모두에 동일한 지정자가 사용되는 이유는 무엇입니까?

+0

두 개의 독립적 인 특성을 거의 독립적으로 사용할 필요가 없기 때문입니다. 결국, 왜 C가 이런 방식으로 수행되었는지를 묻습니다. - 나는 단순함을 의심하고 시간의 예술과 일치했습니다. – chux

+0

@chux, 좀 더 자세히 설명해 주시겠습니까? 나는 왜 "두 개의 독립적 인 특성을 독립적으로 사용할 필요가 거의 없다"고 이해하지 못한다. 나는 정적 스토리지와 내부 연결 사이의 관계를 이해하지 못하고 왜 두 가지가 단단히 묶여 있는지 이해하지 못한다. –

+0

아래의 대답으로 충분하다. – chux

답변

8

그 이유는 대부분 역사적입니다. 연동은 C 언어의 설계에 뒷얘기가되었습니다. 당신이 원하는대로 초기 버전에서는 여러 번 전역 변수를 재 선언 할 수 있으며, 링커는 당신을 위해 모든 선언을 병합 것 :

리치의 원래 의도는 이론이에, FORTRAN 공통 선언에 C의 규칙을 모델링 할 수 있었다 FORTRAN을 처리 할 수있는 모든 기계는 C를 사용할 수 있습니다. 공통 블록 모델에서 공용 변수는 여러 번 선언 될 수 있습니다. 동일한 선언이 링커에 의해 병합됩니다. (source)

단일 선언의 현재 규칙은 extern 키워드와 함께 나중에 제공됩니다. 이 시점에서 하위 호환성을 중요하게 생각할만큼 중요한 C 코드 본문이있었습니다. 이것이 언어 디자이너가 대신 링크를 처리하기 위해 새 키워드를 사용하지 않고 static을 재사용하는 이유입니다.

+2

아,'COMMON' 문 - 떨림. – chux