Menu
CoddyTech

인클루드 가드

Coddy C 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 61개 중 2번째.

헤더 파일이 프로젝트에 여러 번 포함되면 컴파일러가 동일한 선언을 반복해서 확인하여 오류가 발생합니다. 이는 여러 파일이 같은 헤더를 포함하거나 헤더끼리 서로 포함할 때 흔히 발생합니다. 인클루드 가드가 이 문제를 해결합니다.

인클루드 가드는 세 가지 전처리기 지시문을 사용하여 헤더의 내용이 한 번만 처리되도록 합니다.

// math_utils.h
#ifndef MATH_UTILS_H
#define MATH_UTILS_H

int add(int a, int b);

#endif

작동 방식은 다음과 같습니다. #ifndef MATH_UTILS_H는 기호 MATH_UTILS_H가 아직 정의되지 않았는지 확인합니다. 정의되지 않았다면 전처리기가 계속 진행하여 즉시 #define MATH_UTILS_H로 정의합니다. 이 지점부터 #endif 사이의 모든 내용이 컴파일에 포함됩니다.

이 헤더가 두 번째로 포함될 때는 MATH_UTILS_H가 이미 정의되어 있으므로 블록 전체를 건너뜁니다. 가드 이름은 일반적으로 파일 이름을 대문자로 쓰고 점과 특수 문자를 밑줄로 바꾼 것입니다.

직접 만드는 모든 헤더 파일에는 인클루드 가드가 있어야 합니다. 이는 컴파일 오류를 방지하고 프로젝트 어디에서든 코드를 안전하게 포함할 수 있도록 하는 표준 관행입니다.

challenge icon

챌린지

쉬움

include guard를 추가하여 헤더 파일이 두 번 포함되지 않도록 보호해 봅시다. 이전 강의의 인사말 유틸리티를 바탕으로 만들되, 이번에는 헤더를 여러 번 포함해도 안전하도록 하세요.

두 개의 파일을 만듭니다.

  • greet.h: greet 함수 선언이 포함된 헤더 파일입니다. 이번에는 GREET_H 기호를 사용하여 전체 내용을 include guard로 감싸세요.
  • main.c: 헤더를 포함하고, greet 함수를 구현하며, main()에서 호출하는 메인 파일입니다.

greet 함수는 이름을 위한 const char* 매개변수를 받아 다음을 출력해야 합니다.

Hello, Alice!

헤더 파일은 다음 구조를 따라야 합니다.

#ifndef GREET_H
#define GREET_H

// function declaration here

#endif

입력은 하나입니다. 이름(문자열)입니다.

위 형식에 표시된 대로 인사말 메시지를 정확히 출력하고, Alice를 제공된 이름으로 바꾸세요.

직접 해보기

#include <stdio.h>
#include "greet.h"

// TODO: "Hello, <name>!"를 출력하는 greet 함수를 구현하세요

int main() {
    char name[100];
    scanf("%s", name);
    
    // TODO: name을 인자로 전달하여 greet 함수를 호출하세요
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러