C 언어 기초
#ifndef SENSOR_H
#define SENSOR_H
typedef struct { int id; int value; } Sensor;
int sensor_read(Sensor *s);
#endif헤더 파일 sensor.h를 위와 같이 작성했다. #ifndef, #define, #endif의 세 줄의 목적으로 올바른 것은?
- A헤더를 컴파일한 결과를 파일에 저장해 두고, 같은 헤더를 사용하는 다른 소스 파일의 컴파일을 빠르게 한다
- BSENSOR_H를 정의한 소스 파일만 이 헤더를 사용할 수 있게 한다
- C같은 헤더가 하나의 소스 파일에 몇 번 인클루드되어도 내용을 한 번만 받아들여, 중복 정의 오류를 막는다
정답과 해설 보기
정답: C. 같은 헤더가 하나의 소스 파일에 몇 번 인클루드되어도 내용을 한 번만 받아들여, 중복 정의 오류를 막는다
a.h와 b.h가 모두 sensor.h를 인클루드하고, 어떤 소스 파일이 a.h와 b.h를 인클루드하면 sensor.h의 내용이 두 번 받아들여집니다. 첫 번째에 SENSOR_H가 정의되므로, 두 번째에는 #ifndef SENSOR_H의 조건이 거짓이 되어 #endif까지를 건너뜁니다. 이 장치가 없으면 구조체 형 Sensor가 두 번 정의되어 컴파일 오류가 됩니다. 이러한 작성 방식을 인클루드 가드라고 하며, 많은 컴파일러에서는 #pragma once도 같은 목적으로 사용할 수 있습니다.