happy coding

[c] 조건부 컴파일(conditional compile) 본문

self study/언어의 기본부터

[c] 조건부 컴파일(conditional compile)

yeoonii 2022. 11. 28. 00:45

조건부 컴파일을 사용하면 지정한 조건에 따라 코드의 일정 부분을 컴파일할지 안할지를 지정할 수 있느데, 이러한 조건부 컴파일에 사용할 수 있는 조건부 컴파일 지시자(conditional compile directive)는 1. #if 2. #ifdef 3. #ifndef 가 있다.

#if

#if 조건식1	//#if 지시자를 이용한 조건부 컴파일 형식
	컴파일할 명령문1
#elif 조건식2
	컴파일할 명령문2
#else
	컴파일할 명령문3
#endif

#if 지시자 다음에 나오는 조건식1의 결과가 0이 아니면 참, 0이면 거짓으로 간주한다. 또한, #elif 지시자를 사용해 조건식을 여러 개 사용할 수도 있다. #else 지시자를 사용해 모든 조건에 해당하지 않는 경우를 지정할 수도 있다. 여기서 주의할 점은 #endif 지시자를 사용하여 반드시 조건부 컴파일의 끝을 명시해야 한다는 점이다.

#ifdef

여러 개의 헤더 파일을 작성한 후에 전부 합치다 보면, 같은 이름의 변수나 함수가 중복으로 선언되어 있을 가능성이 있다. 이러한 경우에는 #ifdef 지시자를 사용하여 중복 선언의 가능성을 없앨 수 있다.

#ifdef 매크로이름	//#ifdef 지시자를 이용한 조건부 컴파일의 형식
	컴파일할 명령문1
#elif 조건식
	컴파일할 명령문2
#else
	컴파일할 명령문3
#endif

ifdef는 if defined 라는 문장을 줄여 만든 것으로 #ifdef 지시자 다음에 나오는 매크로 이름과 같은 이름의 매크로가 이미 정의되어 있으면, 컴파일할 명령문1이 컴파일될 것이다. 만약 매크로 이름과 같은 이름의 매크로가 정의되어 있지 않다면, 컴파일할 명령문1은 컴파일되지 않고 넘어갈 것이다. 또한, #elif 지시자와 #else 지시자를 사용해 컴파일 조건을 확장할 수도 있다.

#ifndef

#ifndef 지시자를 이용한 조건부 컴파일의 사용법은 #ifdef 지시자를 이용한 조건부 컴파일과 거의 같지만, #ifndef 지시자는 #ifdef 지시자와는 정반대의 조건을 검사한다.

#ifndef 매크로 이름	//#ifndef 지시자를 이용한 조건부 컴파일의 형식
	컴파일할 명령문1
#elif 조건식
	컴파일할 명령문2
#else
	컴파일할 명령문3
#endif

ifndef는 if not defined 라는 문장을 줄여 만든 것으로 #ifndef 지시자 다음에 나오는 매크로 이름과 같은 이름의 매크로가 앞서 정의되어 있지 않으면, 컴파일할 명령문1이 컴파일될 것이다. 만약 매크로 이름과 같은 이름의 매크로가 앞서 정의되어 있다면, 컴파일할 명령문1은 컴파일되지 않고 넘어갈 것이고, #elif 지시자와 #else 지시자를 사용해 컴파일의 조건을 확장할 수 있다.

사용자 헤더 파일을 선언할 때에는 중복 선언을 피하기 위해 파일 내의 모든 내용을 #ifdef나 #ifndef, #endif 지시자로 감싸는 것이 좋다.

'self study > 언어의 기본부터' 카테고리의 다른 글

[c] 비트 단위 연산  (0) 2022.11.30
[c] 바이트 저장 순서  (0) 2022.11.30
[c] 분할 컴파일  (0) 2022.11.28
[c] 헤더 파일  (0) 2022.11.28
[c] 미리 정의된 매크로(predefined macro)  (0) 2022.11.27
Comments