2013-01-17 3 views
1

어떻게 든 아이디어를 얻을 수 없으며 설명서를 읽지 않아도 도움이되지 않습니다. 그것은 의미C++ : #include 및 다른 파일 형식

  1. 내가 헤더 파일 사용법 #include "general.h"를 ​​포함 할 때, 내 프로젝트의 디렉토리에이 파일 general.h 및 general.cpp가, 않습니다

    내 질문은 나는 프리 컴파일러가 자동으로 .cpp 파일을 찾을 것인가?

  2. 확장명이없는 파일을 포함 할 수 있습니까? #include "general"?
  3. 헤더 파일없이 파일을 포함 할 수 있습니까? #include "general.cpp"?
  4. txt 파일을 포함 할 수 있습니까? #include "general.txt"?

Visual Studio 2010에서이 모든 것을 시도했습니다. 적어도 구문 오류는 없습니다. 그러나 나는 설명을하고 싶다. 그래서 친절하게 도와주세요.

+0

@jonhopkins Woops, 나는 바보처럼 보인다. – antonijn

+0

1.의 경우 전 처리기에는 .cpp가 자동으로 포함되지 않지만 컴파일러에서 .h 파일의 선언을 찾아서 해당 정의를 원할 경우 일부 컴파일러 (예 : Oracle)에서 .cc 또는 .c 파일은 .h 파일의 이름과 일치합니다. 이것은 대부분 실제로 매우 혼란스럽고 피해야합니다. –

답변

0
  1. 아니, 프리 D 파일러는 .cpp 파일에 대해 아무것도 몰라

  2. 파일이 더 확장

  3. 이없는 경우 예, 당신은 당신이 원하는 모든 파일을 포함 할 수 있습니다. 그것은 당신이 그것에서 유용한 것을 얻을 것이라는 것을 의미하지는 않습니다.

  4. 위의 3 번을 참조하십시오.

1

#include 지시어는 전처리기에 파일을 읽도록 지시합니다. 그게 다야.

+0

"읽는 것"보다 더 많은 일을합니다. 실제로 포함 된 파일의 전체 내용을 * 삽입합니다. 컴파일러가 어떤 방식 으로든 내부적으로 처리 할 수있는 C++ 표준 라이브러리 헤더에 대한 잠재적 인 예외가 있습니다. –

+0

@NikBougalis - 더 자세한 설명은 분명 가능하지만 "파일 읽기"는 "파일 읽기 및 내용 무시"를 의미하는 것으로 해석하는 것은 어리석은 일입니다. –

1

전 처리기는 #include 지시어를 만났을 때 주어진 파일의 전체 내용을 삽입합니다.

6

표준 정말 파일이 .cpp 또는 .h 또는 .monkeyface인지에 대해 많이 걱정하지 않는다 컴파일러. 소스 코드를 구현 및 헤더 파일로 구조화하는 기본 개념은 소스를 관리하는 데 실제로 허용되는 방법입니다. 그럼에도 불구하고, 허용 된 방식으로 소스를 구조화하지 않는 것이 종종 잘못된 C++로 간주됩니다.

모두 #include은 현재 파일에 지정한 파일의 내용을 포함하도록 전 처리기에 지시합니다. 다른 파일을 복사하여 붙여 넣는 것과 같습니다. #include "foo.h"이라고 말하면 단지 foo.h의 내용을 포함하며 foo.cpp은 전혀 신경 쓰지 않습니다. 존재한다는 것을 전혀 모릅니다 (존재할 이유가 없습니다).

구현 및 헤더 파일에서 소스 코드를 구조화하는 것은 매우 유용합니다. 종속성 및 다중 정의 문제를 방지하고 컴파일 시간을 다소 향상시킵니다. 코드에서 다른 클래스를 사용하는 경우 해당 클래스의 헤더 파일 만 #include이면됩니다. 그 이유는 코드가 클래스의 구현을 신경 쓸 필요가 없기 때문에 코드가 어떻게 보이는지 (이름, 멤버, 기본 클래스 등) 알아야하기 때문입니다. 멤버 함수가 얼마나 정확하게 구현되는지는 관련이 없습니다.

확장자 .cpp.h은 단지 규칙 일뿐입니다. 어떤 사람들은 헤더 파일에 .hpp을 선호합니다.어떤 사람들은 심지어 템플릿 구현을 위해 .tpp을 사용합니다. 원하는대로 이름을 지정할 수 있습니다. 예, .txt 파일을 포함 할 수도 있습니다. 컴파일러는 아마도 파일 확장자에서 파일을 컴파일 할 언어 (예 : 어떤 언어로 컴파일할지)를 추측하려고 시도하지만 일반적으로이를 재정의 할 수 있습니다.

따라서 main.cppfoo 클래스를 사용하므로 foo.h이 포함 된 경우 어떤 시점에 foo.cpp에 참여하게됩니까? 글쎄, main.cpp의 편집에서 전혀 개입하지 않습니다. main.cpp은 앞서 설명한 것처럼 클래스의 구현에 대해 알 필요가 없습니다. 그러나 전체 프로그램을 컴파일 할 때 컴파일러에 각각 .cpp 개의 파일을 전달하여 별도로 컴파일 할 수 있습니다. 즉, g++ main.cpp foo.cpp과 같은 것을 할 것입니다. foo.cpp을 컴파일하면 의 컴파일이 필요한 헤더가 포함됩니다.

.cpp 파일이 컴파일 된 후 (종속 된 헤더 포함) 컴파일 된 파일은 함께 연결됩니다. main.cpp에있는 멤버 함수 foo::bar()의 사용은이 단계에서 foo.cpp에 주어진 foo::bar()의 구현과 연결됩니다.

0

#include은 "주어진 파일의 내용을 여기에 삽입하십시오"메커니즘이므로 전처리 기는 지정한 파일을 정확하게 포함합니다. .h 파일을 포함 시키면 전처리 기나 컴파일러 모두 해당 .cpp 파일에 대해 알지 못합니다. 각 .cpp 파일은 별도로 컴파일됩니다. (.h 파일의 목적은 컴파일러에 외부에있는 함수를 컴파일러에 알리는 것입니다. 현재 .cpp 파일). 컴파일이 끝나면 링커이 호출되고 다른 .cpp 파일의 컴파일 결과 만 결합됩니다.