반응형
#ifdef
사용되는 형태는 아래와 같다.
#ifdef {NAME}
...
#else
...
#endif
{NAME} 선언 여부에 따라 컴파일 되는 부분이 달라진다.
#define에서 선언여부와 관계 있지 정의 여부와는 관계가 없다.
#define TEST
#define TEST 3
Q) 이러한 전처리기 언제 사용할까?
인터넷에서 파일을 다운받는 프로그램을 만든다고 했을 때,
다운받는 최대 속도(MAX_SPEED)를 배포 유형에 따라 설정할 수 있다.
- 무료 버전 최대 속도 10 / 유료 버전 최대 속도 100
#ifdef __FREE__
#define MAX_SPEED 10
#else
#define MAX_SPEED 100
#endif
int speed;
int main() {
// 최고 속도이하로 수치조정
if (speed > MAX_SPEED)
speed = MAX_SPEED;
}
컴파일러 옵션에서 __FREE__를 참으로 지정해서 컴파일 하면 무료버전으로 생성되는 것이다.
또 다른 예시로는 윈도우 버전과 리눅스 버전을 예로 들 수 있다.
C 코드를 기반으로 하기 때문에 일부 코드만 다르게 코딩하면 될 때,
굳이 동일한 내용을 2개의 파일로 관리하기 보다는 하나의 파일에서 전처리기를 통해서 제어하면 된다.
#ifdef WINDOWS
// 윈도우일때 필요한 코드
#else
// 리눅스일때 필요한 코드
#endif
이러한 처리는 웹 상에서 개발 / 디바이스에서 테스트 등 다양하게 활용할 수 있다.
ex) __DEBUG__ / __TEST__ / __KERNEL
Visual Studio는 아래 이미지와 같이 컴파일 옵션을 설정할 수 있다.
각 상태를 #ifdef _DEBUG 통해 컴파일 되는 영역을 구분할 수 있다.
#include <stdio.h>
#ifdef _DEBUG
char MODE[30] = "Debug Mode";
#else
char MODE[30] = "Release Mode";
#endif
int main() {
printf("%s\n", MODE);
}
▶ "Release" 상태에서 실행 결과
반응형
'프로그래밍 언어 > C 언어' 카테고리의 다른 글
[C] 포인터와 배열의 관계 (0) | 2021.03.20 |
---|---|
[C] 동적 할당 필요성 (0) | 2021.03.20 |
[C] calloc( ) & realloc( ) (0) | 2021.03.20 |
[C] 문자열 (0) | 2021.03.20 |
[C] 배열과 문자열 관계 (0) | 2021.03.20 |
댓글