
ifndef는 C/C++(및 유사한 전처리기 환경)에서 쓰이는 전처리 지시자로, “if not defined”의 의미입니다. 즉 특정 매크로(심볼)가 정의되어 있지 않을 때 그 다음 블록을 포함(또는 컴파일 대상에 포함)하라는 조건부 컴파일 지시입니다. 전처리 단계에서만 동작하며 컴파일러가 실제 코드 생성 전에 평가합니다. 주요 특징과 사용법 - 문법: ifndef MACRO_NAME /* MACRO_NAME이 정의되어 있지 않을 때만 이 블록이 처리됨 */ endif - 흔한 용도(헤더 가드): 헤더 파일의 중복 포함을 방지하기 위해 자주 사용됩니다. 예: ifndef MY_HEADER_H define MY_HEADER_H /* 헤더 내용 */ endif - ifdef와의 차이: ifdef는 “if defined” (매크로가 정의되어 있을 때)이고, ifndef는 그 반대입니다. - 대체 표현: if !defined(MACRO_NAME) 는 동일한 의미로 사용 가능합니다. - 매크로 정의 방법: 매크로는 소스 내에서 define으로 정의되거나 컴파일러의 -D 옵션(예: gcc -DMY_MACRO)으로 정의될 수 있습니다. - 기타: - 블록은 반드시 endif로 닫아야 합니다. else, elif 등과 함께 쓸 수도 있습니다. - 전처리기 수준에서 결정되므로 런타임에 영향을 주지 않습니다. - 요즘은 일부 컴파일러에서 지원하는 pragma once로도 헤더 중복 포함을 방지할 수 있습니다(간단하지만 표준은 아님). 주의사항 - 매크로 이름 오타나 충돌로 의도치 않은 동작이 발생할 수 있으므로 고유한 이름(보통 파일명 기반의 대문자와 언더스코어)을 사용하는 것이 권장됩니다.