아니요, 헤더 파일을 제거하지 않을 것입니다. 동일한 파일에서 클래스/함수를 선언 할 때 헤더를 사용하지 않아도됩니다. 헤더의 가장 큰 이유는 이 아니기 때문에 동일한 파일에있는 내용을 선언하는 데는이 아닙니다. 헤더의 주된 이유는 기타 파일에 정의 된 것을 선언하는 것입니다.
C (및 C++)의 의미 규칙은 "단일 단계"스타일 동작을 요구합니다. 그냥 예를 들어, 다음과 같은 코드를 고려하십시오 글로벌에
int i;
int f() {
i = 1;
int i = 2;
}
i=1
양수인, 하지f()
의 내부에 정의 된 하나. 이는 할당 시점에 i
의 로컬 정의가 아직 보이지 않았기 때문에 고려되지 않았기 때문입니다. 당신은 여전히 2 패스 컴파일러로 이러한 규칙을 따를 수 있지만 그렇게하는 것은 결코 쉬운 일이 아닙니다. 필자는 스펙을 확인하지 않았지만 Java와 C#은 C 및 C++과 다르다는 것을 당연시합니다.
편집 : 의견에 내 추측이 잘못되었다고했기 때문에 약간 확인했습니다. 자바 언어 참조 설명서에 따르면, §14.4.2, 자바 (++ 가까운 C와 같은 규칙을 조금 다른 꽤을 따르는 것,하지만 훨씬.
나는 C# language specification을, (읽기 이상으로 경고 : Word 파일) 그러나 은입니다. (§7.7.1)은 다음과 같이 말합니다 : "지역 변수 선언 (§8.5.1)에서 선언 된 지역 변수의 범위는 선언 발생합니다. "
이것은 C#에서 로컬 변수가 블록 전체에 표시되어야한다고 나타내며, 예를 들어 비슷한 코드를 사용하면 assignme이 선언됩니다 nt는 전역 변수가 아닌 지역 변수입니다. 자바는이 점에서 C로 (꽤 much0 같은 규칙을 ++ 다음,하지만 C#을하지 않습니다
C++ 컴파일러가 순차적으로 [즉, 그것은 위에서 아래로 읽을 것입니다 읽습니다 :
그래서, 내 생각 엔 반 옳았다. ...] 언어가 어떻게 작동하는지 그럴 것입니다. 두 번 지나가고 함수 프로토 타입을 살펴 보았으면 좋겠지 만 불행히도 언어가 작동하는 방식이 아닙니다. – Warty
중복 : http://stackoverflow.com/questions/752793 –
C 언어가 기본 기술이 현재보다 훨씬 적은 비용과 훨씬 비싼 30 년 전 표준화되었습니다. 완고한 제안 : 사물의 역사에 대해 조금 배우고 이해합니다. 세상은 엄청나게 바뀌었다. e 결정이 내려졌으며 개발 노력을 결정한 후에도 계속 변경 될 것입니다. 누군가 언젠가는 * "WTF?"를 궁금해 할 것입니다. 귀하의 결정에 대해 .... ;-) – DaveE