1. 헤더파일에는 선언만 들어가야 한다. 변수의 정의나 함수의 정의가 들어가면 안된다
(정의 자체가 문제가 되지는 않지만, 동일한 헤더를 여러 파일에 삽입시 중복 정의가 되어버리는 문제
가 발생할 수 있음)
2. 헤더파일의 #ifndef~ 구문은 하나의 코드파일에서 같은 헤더를 중복해서 include 하려고 할 때 헤더
파일의 중복 삽입을 막아주는 역할을 한다. 하나의 헤더파일은 여러 개의 코드파일에 include 될 수 있
다. #ifndef~으로 중복을 막는다는 것은 전체 코드파일에서 중복적으로 include 되는 것을 막는다는 것
이 아니고, 한 코드파일 내에서 중복적으로 include 되는 것을 막는 다는 의미이다.
------------------------------------
그동안 잘 안쓰던 C로 과제를 짤 일이 생겼었는데, 실수로 헤더파일 안에다가 변수를 정의했다.
그래놓고서는 변수가 중복 정의되었다는 컴파일 에러가 왜 뜨는지 이해를 못하고 있었다...
(나는 #ifndef으로 전체 코드파일에 헤더가 하나만 include되는걸로 착각하고 있었던것)
아마 C++을 하면서 헤더파일 안에다가 클래스와 멤버함수의 정의까지 넣어놓는 습관이 있어서 착각을
했던 것 같다
그나마 다행인건 헤더파일 안에다가 static 변수로 정의를 해놨다는거... 머 임시방편이지만
암튼 그래서 과제를 제출하고 나서야 뭐가 문제였는지를 알 수 있었다
'C > 공개글' 카테고리의 다른 글
프롬프트창에서 실행 시 fopen 에러가 나는 이유? (0) | 2013.02.19 |
---|---|
if(a==0) 와 if(0==a)의 차이? (0) | 2013.01.23 |
난수를 발생시키는 법(rand, srand, time, random, randomize) (0) | 2013.01.23 |
gets와 fgets (0) | 2013.01.23 |
데이터를 정렬할 때 유의사항 (0) | 2013.01.23 |