2015. 9. 4. 17:08
조건부 컴파일을 위한 매크로 프로그래밍/C언어2015. 9. 4. 17:08
컴파일 할 때, 특정 조건에 따라 소스코드의 일부를 삽입할 수 있는 지시자들이 있다.
이 지시자에서 조건을 만족하지 않아서 삽입되지 않은 코드는 오류가 있더라도 전체 프로그램은 컴파일 오류가 생기지 않는다.
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 |
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 |
'프로그래밍 > C언어' 카테고리의 다른 글
Visual Studio 설치시 설정 및 Hello world! (0) | 2015.09.11 |
---|---|
구조체 포인터의 선언과 접근( -> ) (0) | 2015.09.07 |
구조체 선언에 typedef 사용하기 (0) | 2015.09.07 |
[흐름 변화] - if, switch, while, for, do while, continue, break (0) | 2015.09.06 |
구조체의 정의 (0) | 2015.09.04 |