#if와 #endif가 쓰인 것을 볼 수 있다.
그냥 if문을 사용하면 되는게 아닌가? 싶다만..
조건절이 이상하다.
과연 뭘까?
아래 글을 참고하였다.
#if / #elif / #else / #endif
같은 구문을 조건부 컴파일이라고 한다
조건부 컴파일은 언리얼의 기능이 아닌 CPP의 기능이다
if문과 가장 중요한 차이는
#if에는 조건절이 아닌, #define된 상수가 오게 된다.
따라서 상수 평가시, 0이 아니면 #if문을 처리한다.
#elif문도 똑같다
Draw Debug는 위처럼 DrawDebugHelpers에 정의되어있는데,
#ifndef로 만약 ENABLE_DRAW_DEBUG가 정의되어있지않다면,
#define으로 ENABLE_DRAW_DEBUG를 정의한다.
주로 위와 같은 방식으로 사용한다
따라서 해당 DrawDebugHelpers 헤더를 포함하고
사용하게 되면, 이미 정의된 ENABLE_DRAW_DEBUG를
#if문에 사용할 수 있다.
// #if문에서 벗어난 코드
#if 조건1
//코드 1
#elif 조건2
//코드 2
#else
//코드 3
#endif
// #if문에서 벗어난 코드
기본적인 구조는 위와 같다.
아래의 글을 참고하였다.
https://hydroponicglass.tistory.com/entry/C-ifdef-if-defined-%ED%99%9C%EC%9A%A9
#define 변수와 #ifdef를 사용하여 버튼처럼 코드를 on/off할 수 있다.
그 방법은 특정기능 off시엔 #define된 변수를 주석처리하는 것
그러면 #ifdef문이 동작하지 않게된다.
만약 꺼졌을때의 기능을 추가하고자 한다면,
#ifndef를 사용하여 추가기능을 정의해두어도 될 것이다.
아래의 글을 참고하였다.
https://zoosso.tistory.com/1201
#ifdef에서 하나의 항목만 비교했던 것을
개선하여 생성된 조건부 컴파일 키워드.
주의할 점은 #ifdef에 여러항목을 넣어도 컴파일러가 오류를 잡지 못한다
따라서 본인이 주의해야만 한다.
따라서 #if defined에선 여러 항목을 비교할 수 있다.
#if defined에선 defined뒤에 오는 변수가 정의되었는지를 확인한다.
해당 변수가 정의되어있으면 1, 그렇지 않으면 0으로 처리된다.
#if defined(RADIUS) || defined(CALC) && defined(TIMER)
위처럼 여러 항목의 값을 0 1 0 논리연산을 하고
값을 파악하여 #if defined문 내의 코드를 실행할지 결정한다.