C Programming Header
1. 클래스 위자드를 통해서 클래스를 새로 생성하시면 클래스 위자드가 관리를 해줍니다.
하지만, 클래스 위자드로 만들 수 이는 클래스는 한계가 있습니다.
그래서 보통은 클래스 위자드로 만들어야 좋은 것들, 예를 들어서 CEdit에서 상속 받는 클래스라든지, 그러니까 MFC 클래스에서 상속받아 클래스를 만들 때는 클래스 위자드를 쓰고,
그밖의 선조 클래스가 없는 새로운 클래스를 만든다든가 할 때는 그냥 파일을 새로 만들어서 저장하고 프로젝트에 추가하는 식으로 합니다.
이렇게 파일로 저장해서 프로젝트에 추가한 경우는, 탐색기에서 프로젝트가 있는 디렉토리의 *.clw 파일을 삭제해주세요.
이 파일은 클래스 위자드가 클래스들의 정보를 모아두는 파일입니다.
이 파일을 삭제하고 클래스 위자드를 실행하면, 클래스 위자드는 관리하고자 하는 소스 파일들을 추가해달라고 다이얼로그를 띄웁니다.
이 다이얼로그에서 소스파일들을 선택해주시면 클래스 위자드가 다시 정보를 모아서 *.clw 파일을 만들게 됩니다.
2. 헤더 파일에 #ifndef와 #define을 사용하는 이유는, 동일한 헤더 파일이 두번 인크루드 되는 것을 막기 위함입니다.
예를 들어서, a.cpp 파일에서 b.h와 c.h를 인크루드한다고 하죠.
그리고 c.h 파일에서도 b.h를 인크루드하고 있다고 하죠.
그러면 a.cpp 파일에는 b.h와 c.h, 그리고 c.h에서 인크루드하는 b.h까지 인크루드됩니다.
#include가 전처리자이기 때문에 컴파일 전에 소스를 복사하게 되니까,
a.cpp 파일에는 b.h파일의 내용이 두번 복사되어 들어가게 됩니다.
그럼 에러가 나겠죠?
이렇게 헤더 파일들이 여러번 인크루드되는 것을 막기 위해서,
#ifndef와 #define을 사용합니다.
#ifndef를 사용해서, 특정 매크로 이름이 정의되어 있는지 확인하고,
만약 정의되어 있지 않다면 #define으로 그 매크로 이름을 정의하는 것이죠.
그리고 이어서 클래스 정의 부분이 나올 것이고, #endif로 끝날 것입니다.
그리도 다시 어떤 코드에 의해 같은 파일이 인크루드 되면,
#ifndef가 FALSE가 될 것이기 때문에, #endif까지의 내용이 추가되지 않죠.
이런 메커니즘입니다.
3. 헤더 파일을 사용하는 것은, 여러곳에서 쓰기 위함입니다.
작은 프로그램이라면 상관 없지만, 큰 프로그램이 될 수록 cpp 파일도 많아지고, cpp 파일간 데이터를 공유할 필요도 많아지죠.
특히 c++을 이용할 때는 데이터가 곧 클래스 변수입니다.
그런데 클래스 변수는 반드시 그 클래스가 어떤 구조인지 컴파일러에게 알려줘야 컴파일이 되죠.
결국 어떤 클래스를 만들었을 때 그 클래스를 쓰는 모든 cpp파일에는 그 클래스의 구조를 알려줘야 합니다.
그래서 헤더 파일이라고 별도로 만들고, 그 클래스에서 class ABC { ....}; 이렇게 클래스를 정의해 놓고, 이 클래스를 쓰는 cpp에서는 이 헤더 파일을 인크루드하는 식으로 프로그래밍을 합니다.
댓글 달기