#ifndef MY_HEADER_H
#define MY_HEADER_H
...
...
#endif
영어로는 include guard라고 부르는 것 같다. (참고: 위키페이지)
처음엔 my_header.h 라는 파일명과 MY_HEADER_H 사이에 어떤 관계가 있는 줄 알았다. 밑줄이 wildcard characeter 역할이라도 하는건가 싶어서 구글링을 해봤으나 원하는 정보는 찾을 수 없고... 이 기법은 헤더파일 작성에 있어 거의 공식 수준인데 이렇게까지 검색이 안 되나 싶어 이상하다 싶던 찰나,
"잠깐, 꼭 파일명이랑 관련된게 아니라도 상관없잖아...?"
그렇다. 그냥 식별자 역할을 할 뿐이었다. 일종의 태그. MY_HEADER_H라는게 정의된 적이 있냐 없냐를 판단하기 위한 것일 뿐, 이름은 뭘 해도 상관은 없다. 그럼에도 불구하고 헤더파일과 같은 이름으로 만드는 이유는? 왜긴, 다른 식별자랑 안 겹치게 하려는 거지. 파일명이 동일한 두 개의 헤더파일이 있을리가 없으니, 식별자를 헤더와 같게 하면 식별자가 겹칠 걱정도 없다. 하여튼 사람들 머리 좋아.
이 간단한 걸 왜 난...
참고로, #ifndef MY_HEADER.H는 안 되는 것 같다. 저렇게 쓰면 .H는 무시하고 MY_HEADER만 되는 듯. 돌려보진 않았다. 하지만 저렇게 쓰면 자동완성으로 #endif // MY_HEADER가 나오는걸 봐선 어느 정도 유추가 가능하다. 헤더 식별자를 모두 대문자로 하고 밑줄을 쓰는건 말 그대로 관습, convention이라고 한다.
아, 그리고 밑줄문자(_)는 underscore라고 부르더라. 지금까지 underbar인줄... (참고: 위키페이지)
그리고 하나 더. 이 식별자를 underscore로 시작하지 말라고 한다. 시스템이 쓰려고 미리 잡아놨단다.
'나는 공돌이다' 카테고리의 다른 글
파이썬으로 Coupon collector's problem 코딩 해보기 (0) | 2016.03.13 |
---|---|
오늘 알파고 vs. 이세돌 2차전을 보고 궁금한 점 (0) | 2016.03.11 |
아이맥의 절전모드와 대기모드 (0) | 2016.02.25 |
리만가설 이야기를 읽다가 (0) | 2016.02.21 |
스크립트 언어 vs. 컴파일 언어 (0) | 2016.02.21 |