c++ 소스파일에서 cpp, h파일 질문입니다.
클래스를 사용한건 아니고 간단한 실행 cpp파일들을 만들고있었는데
tool.h 라는 파일을 만들어서 그 안에 각종 .cpp파일들을 명시적으로 선언해 놓고 main()파일에서 호출해서 사용하는 방식으로 해왔었습니다.
그런데 의문점이 드는게 저는 cpp파일에서 [#include "tool.h"] 를 하지 않았는데도 tool.h파일에서 오류가 생성되지 않더군요 혹시 이유가 있을까요??
프로젝트안에 소스파일에 cpp파일 main파일 tool.h파일을 같이 생성해서 사용하고 있습니다.
예시
1.cpp 파일
#include
using namespace std;
void dd() {
cout << "cpp" << endl;
}
----------------------
tool.h 파일
void dd();
void ...
.
.
. /* 다른 .cpp 파일들*/
------------------------
main.cpp 파일
#include
#incldue "tool.h" /*tool.h를 인클루드해서 필요한 cpp파일을 불러서 실행*/
using namespace std;
int main() {
dd();
}
위의 3파일들은 프로젝트의 소스 파일에 같이 보관하고 있습니다.
다시한번 말하면 궁금한건 1.cpp에서 tool.h를 인클루드하지 않았는데 main에서 tool을 인클루드 한다고 해서 main.h -> tool.h --(cpp가 include를안함)-> 1.cpp -> 실행후 main함수로 값 전달에서 .h->.cpp파일로의 이동이 가능한가요?
클래스는 반드시 헤더파일을 인클루드 해야하는데 혹시 이것과는 차이가 있을까요??
감사합니다.
kldp에서 소스코드는 code 태그 안에 넣어야
kldp에서 소스코드는 code 태그 안에 넣어야 제대로 보입니다.
세벌 https://sebuls.blogspot.kr/
그 두 가지는 다른 이유고요
둘다 핵심은 컴파일러가 -c로 그 컴파일 모듈만 컴파일할 때, 함수의 type을 알 수 있느냐는 부분입니다.
본문의 예는 void dd()의 정의가 선언의 역할까지 해주는 거라서 .cpp 파일 안에선 굳이 dd의 선언이 별도로 필요하지 않은 상황일 거고요.
printf나 그밖의 함수를 선언없이 사용하는 게 C++에서는 by default로는 허용이 안 되는 걸로 기억합니다. 어쨌거나 이런 경우는 컴파일러가 타입을 추측하게 됩니다. 리턴 타입은 그냥 일괄로 int로 추측할 수도 있고, assign이 어디론가 된다면 그 variable의 타입을 보고 할 수도 있습니다. (C는 그냥 int로 추측할 거고요) 패러미터는 call site를 보고 거기에서 실제로 들어가는 패러미터를 따라 추측할 수도 있고, 혹은 더 안전하게 varidic function으로 추측할 수도 있고, 또는 printf나 scanf 같은 건 컴파일러가 미리 기억하고 있다가 기억해 둔 타입을 사용할 수도 있습니다.
답변 감사합니다!!
덕분에 완벽히는 아니지만 이해가 됐어요 완벽히 이해될 수 있도록 공부해야겠네요 ㅠㅠ
댓글 달기