5. #if / #endif

JUSTICE_DER·2023년 7월 21일
0

🌵UNREAL

목록 보기
36/42

🐸

#if와 #endif가 쓰인 것을 볼 수 있다.
그냥 if문을 사용하면 되는게 아닌가? 싶다만..
조건절이 이상하다.
과연 뭘까?

1. 조건부 컴파일

아래 글을 참고하였다.

#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문에 사용할 수 있다.

A. 기능 설명

			// #if문에서 벗어난 코드

#if 조건1

     //코드 1

#elif 조건2

     //코드 2

#else

     //코드 3

#endif

			// #if문에서 벗어난 코드

기본적인 구조는 위와 같다.

  • #if
    • 조건에는 미리 정의된 상수가 와야한다.
    • #if자리에는 대신에 다른 조건부컴파일 키워드를 넣을 수 있다.
      • #ifdef
        • 해당 상수가 정의되어 있다면 코드실행
      • #ifndef
        • 해당 상수가 정의되어있지 않다면 코드실행
  • #elif / #else
    • 기존 CPP문법과 같다
  • #endif
    • #if문(조건부 컴파일문)이 종료되었음을 명시

B. 활용법

아래의 글을 참고하였다.
https://hydroponicglass.tistory.com/entry/C-ifdef-if-defined-%ED%99%9C%EC%9A%A9

#define 변수와 #ifdef를 사용하여 버튼처럼 코드를 on/off할 수 있다.

그 방법은 특정기능 off시엔 #define된 변수를 주석처리하는 것
그러면 #ifdef문이 동작하지 않게된다.

만약 꺼졌을때의 기능을 추가하고자 한다면,
#ifndef를 사용하여 추가기능을 정의해두어도 될 것이다.

C. #if defined()

아래의 글을 참고하였다.
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문 내의 코드를 실행할지 결정한다.

profile
Time Waits for No One

0개의 댓글