달력

5

« 2024/5 »

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31

컴파일 할 때, 특정 조건에 따라 소스코드의 일부를 삽입할 수 있는 지시자들이 있다.

이 지시자에서 조건을 만족하지 않아서 삽입되지 않은 코드는 오류가 있더라도 전체 프로그램은 컴파일 오류가 생기지 않는다.


1. #if... #endif : 매크로가 참이면

#if (매크로)

코드

#endif

매크로가 참이라면 코드가 소스에 삽입되고, 거짓이면 코드는 삭제된다.

매크로 부분에 연산자는 사용가능하나 변수는 사용할 수 없다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#define ADD    
#define MIN    
 
int main(void)
{
    int num1, num2;
    //int add = 0, min = 1;
 
    printf("두 개의 정수 입력: ");
    scanf_s("%d %d"&num1, &num2);
 
 
 
#if ADD
    printf("%d + %d = %d\n", num1, num2, num1 + num2);
#endif // ADD
 
#if MIN
    printf("%d - %d = %d\n", num1, num2, num1 - num2);
#endif // MIN
 
    return 0;
}
 








2. #ifdef... #endif : 매크로가 정의되어 있다면

#ifdef (매크로)

코드

#endif

매크로가 #define으로 정의가 되어 있다면 코드가 삽입된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#define ADD    0
#define MIN    1
 
int main(void)
{
    int num1, num2;
    //int add = 0, min = 1;
 
    printf("두 개의 정수 입력: ");
    scanf_s("%d %d"&num1, &num2);
 
 
 
#ifdef ADD
    printf("%d + %d = %d\n", num1, num2, num1 + num2);
#endif // ADD
 
#ifdef MIN
    printf("%d - %d = %d\n", num1, num2, num1 - num2);
#endif // MIN
 
    while (1);
}
 
cs

3. #ifndef... #endif : 매크로가 정의되지 않았다면
#ifndef (매크로)
코드
#endif
위의 #ifdef... #endif와 비슷하지만 이 지시자는 매크로가 정의되지 않았다면 코드를 삽입한다.

4. #else의 삽입 : #if, #ifdef, #ifndef에 해당
#if (매크로)
코드1
#else
코드2
#endif
#if의 경우 매크로가 참이거나, #ifdef의 경우 매크로가 정의되어 있거나, #ifndef의 경우 매크로가 정의되어 있지 않으면 코드1을 삽입하고 아니면 코드2를 삽입한다.  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <stdio.h>
#define HIT_NUM 6
 
int main(void)
{
#if HIT_NUM == 5
    puts("1");
#else
    puts("2");
#endif
 
    while (1);
}
 
cs
위 코드를 실행하면 2가 출력된다.

5. #elif의 삽입 : #if에만 해당
#if (매크로1)
코드1
#elif (매크로2)
코드2
#endif

#else + if인 것으로 조건을 추가할 수 있다.

#if의 경우에만 사용할 수 있다.

매크로1이 참이면 코드1을 수행, 매크로1이 거짓이고 매크로2가 참이면 코드2를 수행한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#define HIT_NUM 6
 
int main(void)
{
#if HIT_NUM == 5
    puts("5");
#elif    HIT_NUM == 6
    puts("6");
#else
    puts("nope");
#endif
 
    while (1);
}
 
cs


:
Posted by youjin.A