77.6연습문제
, 박 진곤님이 작성연습문제입니다.
"하나의 헤더 파일을 여러 소스 파일에서 포함했을 때 구조체 등이 중복 정의되지 않도록 만드는 매크로로 올바른 것을 고르세요."라고 하는데
답은 알겠는데 구조체등이 중복된다라는 의미를 잘모르겠습니다.
예시를 코드를 통해서 설명해 주시면 감사하겠습니다.
또한 p1140에서 헤더파일을 여러 소스 파일에서 사용할 때 컴파일 에러 방지
Re: 77.6연습문제
, 도장_ 관리자님이 작성#ifdef를 이용한 매크로 가드를 하지 않으면 헤더 파일을 중복 로딩할 때 에러가 발생합니다.
calcdata.h 헤더 파일의 #ifdef 부분을 모두 제거하고, 예제 코드에서 #include "calc.h"를 두 번만 쓰면 컴파일 에러가 발생하는 것을 볼 수 있습니다.
더 간단한 예로는
my.h
struct mine {
int a;
};
main.c
#include "my.h"
#include "my.h"
#include "my.h"
int main()
{
return 0;
}
struct mine이 3번 선언되고 중복되니 컴파일 에러가 발생합니다.
1>------ 빌드 시작: 프로젝트: Project1, 구성: Debug Win32 ------
1>main.c
1>c:\users\mona\source\repos\project1\project1\my.h(1): error C2011: 'mine': 'struct' 형식 재정의
1>c:\users\mona\source\repos\project1\project1\my.h(1): note: 'mine' 선언을 참조하십시오.
1>c:\users\mona\source\repos\project1\project1\my.h(1): error C2011: 'mine': 'struct' 형식 재정의
1>c:\users\mona\source\repos\project1\project1\my.h(1): note: 'mine' 선언을 참조하십시오.
1>"Project1.vcxproj" 프로젝트를 빌드했습니다. - 실패
첫 번째 struct mine은 정상적으로 처리되고, 두 번째 struct mine부터 에러가 됩니다.
#include <stdio.h>를 여러 .c 파일에 써도 문제가 안 되는 것은 #ifdef를 사용해서 중복 로딩이 되지 않게 매크로 가드를 썼기 때문입니다.