#ifndef ~ #endif 구문을 작성하고그 안에 함수나 변수의 정의를 넣어준다.2개의 코드파일에서 해당 헤더파일을 include 한다그렇게 하면 에러가 난다.#ifndef 때문에 헤더가 하나만 들어가는 것 같은데그 전에 미리 변수의 정의라던지 함수의 정의의 중복을 체크해서 에러를 내는 것 같다.
함수선언만해야지병시나 변수정의함수정의까지하면되냐?
내 질문의 요지는 컴파일러가 왜 링킹에러를 내는가? 임
제 경험상 WannaParty님 말씀이 맞습니다. 헤더파일에 함수는 물론이고 변수하나라도 정의한다면 컴파일 에러가 발생합니다. 해결방법은 헤더파일과 구현파일을 명확히 구분하는 것입니다.
정의 자체가 문제가 되지는 않음. 단지 2개 이상의 코드파일에서 include 했을때 링킹에러가 남
이상하게 include 한번쓰면 정의가 문제가 되지않는데 include 두번부터 에러나더라고요. 이문제가 아님말고
아 찾아보니 #ifndef~ 구문자체가 헤더파일의 중복을 막는데 그 기준이 한 파일 안에서 막는거네
그러니 당연히 링킹에러가 뜨지 ㅜㅜ
#ifndef이 전체 파일에서 헤더의 중복을 막는다는 건줄 착각하고 있었네
진짜? .h 한 파일에서만 적용되는 얘기라고요?? 헤더파일을 include하게되면 한파일로 취급되지 않습니까?
표준 라이브러리 헤더파일들을 보면 납득할 수가 없는 사실이네요
ㅇ// 무슨말 하시는지 이해가 잘 안되는데 제가 말하는 한 파일은 .c 같은 코드파일 얘기하는거임
그러니까 같은 코드파일에서 같은 헤더파일을 중복해서 include할때 그걸 막는게 #ifndef~ 구문 아님?
표준 라이브러리 헤더파일들을 보면 왜 납득할수가 없음?
한 파일에서 같은 헤더파일을 두번 선언하는것은 의미도 없고 순전히 코더의 실수 아닙니까? 전체 파일에 적용되야 지원해주는 의미가 있겠죠?
표준 라이브러리 같은거 보면 똑같이 #ifndef #define #endif같은거 썼고, 모든 파일의 중복을 막아주지 않습니까
님 말대로면 한파일에 어떤 라이브러리 헤더파일을 include하면 다른파일에서도 해당 라이브러리의 함수들을 사용할 수 있어야함
만약 a.cpp에 iostream include 해놨으면 b.cpp에는 iostream의 include 없이도 cout를 호출할 수 있어야함. 근데 그렇지 않음.
그러니까 헤더파일의 include가 전체 파일에 적용된다는 님의 말은 이해하기가 힘드네요
뭐 cout는 함수가 아니지만...
사실 그건 맞습니다. 해봤거든요. 어쩌피 모든 파일들이 #include 로 엮여있기 때문에 a.h헤더파일에 inlcude했다면 그 헤더파일을 include한 파일은 a.h에서 include 선언했던 함수들을 사용할 수 있습니다.
아 서로 뭐가 다른지 알음요 ㅋㅋㅋ
님은 구현파일(c, cpp)에 적었고, 전 헤더파일(h)에 적었던겁니다 ㅋㅋ
#include \"어쩌고.h\" 자체가 \'어쩌고.h\' 파일의 내용을 그대로 복붙해오겠다 라는 뜻 정도로 이해하면 될 것 같습니다.
뭐지.. 헤더파일로 생각하고 댓글 다시 읽어보고 있는데 그래도 하시려는 말이 뭔지 잘 모르겠네여..
#include 명령어가 해당 헤더파일의 내용을 그대로 복붙해오겠다는 뜻이니까, include된 헤더파일에 #ifndef 같은 문법을 적어뒀다면, 지금 파일에도 적용되는 것이 당연하겠죠? #ifndef같은 문법들을 cpp파일 말고 h파일에 적으면 될것같은데
선언도 두번하면 에러나니까
#ifndef은 원래 h파일에 적는 것 아닌가요? cpp파일에 적는걸로 생각하시고 댓글 다신건가
ㅇㅇ 58분 댓글때문에 그렇게 생각해버렸네요. 여튼 요점은 모든 헤더파일은 결국 하나의 파일로 취급된다. 고로 #ifndef는 모든 파일에 적용된다.
그러니까 한 헤더파일을 모든 파일에서 include 할수 있다는 얘기심?
네 그것도 맞습니다
그 뜻이시라면 41분~43분에서 제가 했던 말이 그 의미에요. 각각의 모든 파일들이 어떤 한 헤더파일을 include 할 수 있는데, 단지 하나의 파일안에서 같은 헤더파일을 중복해서 include 할 경우 그러한 중복을 막아주는게 #ifndef~ 구문이라는 의미입니다
난빨라는 빠릅니다 PqS
난빨라는 빠릅니다. ;\\>