.cpp 파일 포함: 중복이 발생합니까?
프로그래밍 컨텍스트에서 헤더 파일(.h) 및 소스 파일(. cpp)는 중요한 역할을 합니다. 헤더 파일에는 함수 및 클래스 선언이 포함되어 있어 다른 모듈이 상호 작용할 수 있습니다. 일반적으로 헤더 파일을 포함하는 것이 권장되지만, 대신 소스 파일(.cpp)을 직접 포함할 수 있습니까?
대답은 "아니요"입니다. .cpp 파일을 포함하면 여러 정의 오류가 발생할 수 있습니다. 이유를 이해하기 위해 다음 코드를 살펴보겠습니다.
// main.cpp #include <iostream> #include "foop.h" int main() { int x = 42; std::cout << x << std::endl; std::cout << foo(x) << std::endl; return 0; }
// foop.h #ifndef FOOP_H #define FOOP_H int foo(int a); #endif
// foop.cpp int foo(int a) { return ++a; }
헤더 파일이 포함되어 있으면 코드가 문제 없이 컴파일되고 실행됩니다. 그러나 실수로 헤더 파일 대신 소스 파일(.cpp)을 포함했다고 가정해 보겠습니다.
// main.cpp #include <iostream> #include "foop.cpp" int main() { int x = 42; std::cout << x << std::endl; std::cout << foo(x) << std::endl; return 0; }
이 시나리오에서는 컴파일러에서 오류가 발생합니다.
multiple definition of foo(int) first defined here
원인은 무엇입니까? 이 오류? 전처리기가 소스 파일(.cpp)을 포함하는 경우 해당 파일의 전체 내용을 현재 파일에 복사합니다. 따라서 기본적으로 다음 코드가 생성됩니다.
// main.cpp #include <iostream> int foo(int a) { return ++a; } int main() { int x = 42; std::cout << x << std::endl; std::cout << foo(x) << std::endl; return 0; }
보시다시피 foo() 함수는 이제 동일한 파일에 두 번 정의되어 다중 정의 오류가 발생합니다. 이 문제를 방지하려면 소스 파일(.cpp) 대신 헤더 파일(.h)을 포함하는 것이 중요합니다. 헤더 파일은 구현 없이 함수와 클래스를 선언하여 중복을 방지하고 전체 프로그램에 각 함수에 대한 정의가 하나만 존재하도록 보장합니다.
위 내용은 .h 파일 대신 .cpp 파일을 포함하지 말아야 하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!