Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C# #undef 지시문 사용법 – 심볼 정의 해제와 조건부 컴파일

C#의 #undef 지시문은 이전에 정의된 심볼(기호 상수)의 정의를 해제하는 전처리기 지시문입니다. 정의가 해제된 심볼은 #if 지시문과 함께 평가될 때 false로 처리되므로, 조건부 컴파일 시 해당 코드 블록이 컴파일되지 않습니다.

#undef 지시문 기본 문법

#undef SYMBOL

예를 들어 아래와 같이 작성하면 One이라는 심볼의 정의가 해제됩니다.

#undef One

#undef 지시문 예제

다음 예제에서는 One 심볼을 정의하고 Two 심볼의 정의를 해제한 뒤, #if / #elif / #else 지시문을 사용해 각 심볼의 정의 여부에 따라 서로 다른 메시지를 출력합니다.

#define One
#undef Two

using System;

namespace Demo {
    class Program {
        static void Main(string[] args) {
            #if (One && Two)
            Console.WriteLine("Both are defined");
            #elif (One && !Two)
            Console.WriteLine("One is defined and Two is undefined");
            #elif (!One && Two)
            Console.WriteLine("One is undefined and Two is defined");
            #else
            Console.WriteLine("Both are undefined");
            #endif
        }
    }
}

실행 결과

One is defined and Two is undefined

코드 설명

#define One으로 One 심볼을 정의했고, #undef TwoTwo 심볼의 정의를 해제했습니다. 따라서 첫 번째 조건 (One && Two)는 거짓이 되고, 두 번째 조건 (One && !Two)가 참이 되어 "One is defined and Two is undefined"가 출력됩니다. 이처럼 #undef는 특정 기능이나 디버그 코드를 조건부로 활성화하거나 비활성화할 때 유용하게 사용됩니다.

#undef 사용 시 주의 사항

  • 대소문자 구분: C# 전처리기 심볼은 대소문자를 엄격하게 구분합니다. TwoTWO는 서로 다른 심볼로 취급되므로, #if 조건식에서 반드시 동일한 철자를 사용해야 합니다.
  • 선언 위치 제한: #define과 마찬가지로 #undef는 네임스페이스나 클래스 등 실제 코드가 시작되기 전에 작성해야 하며, 그렇지 않으면 컴파일 오류가 발생합니다.
  • 컴파일러 옵션으로 정의된 심볼: 컴파일러 옵션(/define)으로 정의된 심볼은 소스 코드 내에서 #undef로 해제할 수 없습니다.
  • 정의되지 않은 심볼: 한 번도 정의된 적 없는 심볼에 #undef를 사용해도 컴파일 오류는 발생하지 않습니다.