매크로 지시자 중에는 특정 조건에 따라 소스코드의 일부를 삽입하거나 삭제할 수 있도록 디자인 된 지시자
#if... #endif: 참이라면
if문이 조건부 실행을 위한 것이라면, #if...#endif는 조건부 코드 삽입을 위한 지시자.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define ADD 1
#define MIN 0
int main(void)
{
int num1, num2;
printf("두 개의 정수 입력: ");
scanf("%d %d", &num1, &num2);
/*
if문의 뒤에는 반드시 #endif문이 등장해야 하고
이 두 지시자 사이에 존재하는 코드는 조건에 따라서 삽입 및 삭제가 된다.
ADD나 MIN이 참이면(=1) 코드가 삽입되고 거짓(=0)이면 코드가 삭제 된다.
*/
#if ADD // ADD가 '참'이라면
printf("%d + %d = %d \n", num1, num2, num1 + num2);
#endif
#if MIN // MIN이 '참'이라면
printf("%d - %d = %d \n", num1, num2, num1 - num2);
#endif
}
ADD가 1이기 때문에 덧셈 출력 코드가 삽입이 되지만
MIN가 0이기 때문에 뺄셈 출력 코드는 삭제가 된다.
#ifdef... #endif: 정의되었다면
#if는 매크로가 참이냐 거짓이냐를 기준으로 동작한다면,
#ifdef는 매크로가 정의되었느냐, 정의되지 않았느냐를 기준으로 동작한다
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
//#define ADD 1
#define MIN 0
int main(void)
{
int num1, num2;
printf("두 개의 정수 입력: ");
scanf("%d %d", &num1, &num2);
#ifdef ADD // 매크로 ADD가 정의되었다면
printf("%d + %d = %d \n", num1, num2, num1 + num2);
#endif
#ifdef MIN // MIN이 '참'이라면
printf("%d - %d = %d \n", num1, num2, num1 - num2);
#endif
return 0;
}
위 매크로로 정의된 값은 중요하지 않고, 매크로 자체가 정의되었느냐가 기준으로 작동된다.
따라서 아래와 같이 정의해도 된다.
#define ADD
#define MIN
이렇게 매크로가 정의되면 소스코드에 있는 ADD와 MIN은 선행처리 과정에서 공백으로 대체가 된다.
#ifndef... #endif
'매크로 ...가 정의되어 있지 않다면'
n은 not을 의미
#else의 삽입 : #if, #ifdef, #ifndef에 해당
#include <stdio.h>
#define HIT_NUM 5
int main(void)
{
#if HIT_NUM==5
puts("매크로 상수 HIT_NUM은 현재 5입니다.");
#else
puts("매크로 상수 HIT_NUM은 현재 5가 아닙니다");
#endif
return 0;
}
#elif의 삽입: #if에만 해당
#include <stdio.h>
#define HIT_NUM 7
int main(void)
{
#if HIT_NUM==5
puts("매크로 상수 HIT_NUM은 현재 5입니다.");
#elif HIT_NUM==6
puts("매크로 상수 HIT_NUM은 현재 6입니다.");
#elif HIT_NUM==7
puts("매크로 상수 HIT_NUM은 현재 7입니다.");
#else
puts("매크로 상수 HIT_NUM은 5, 6, 7이 아닙니다")
#endif
return 0;
}
참고 : [윤성우 열혈 C 프로그래밍] - 대부분의 내용 및 코드는 이 책에서 개인 공부 정리 목적으로 참고하였습니다.
'Language&Framework&Etc > C' 카테고리의 다른 글
파일의 분할과 헤더파일의 디자인(27-1) 파일의 분할 (0) | 2020.12.18 |
---|---|
매크로와 선행처리기(26-4) 매개변수의 결합과 문자열화 (0) | 2020.12.18 |
매크로와 선행처리기(26-2) 대표적인 선행처리 명령문 (0) | 2020.12.17 |
매크로와 선행처리기(26-1) 선행처리기와 매크로 (0) | 2020.12.17 |
메모리 관리와 메모리의 동적 할당(25-2) 메모리의 동적 할당 (0) | 2020.12.17 |