#define 전처리기 지시문이란?
C#의 #define 전처리기 지시문은 심볼(symbol)이라고 불리는 일련의 문자를 정의하는 역할을 합니다. 이를 통해 심볼릭 상수를 만들 수 있습니다.
#define으로 심볼을 정의하면, 해당 심볼을 #if 지시문에 전달되는 표현식으로 사용할 때 그 표현식이 true로 평가됩니다. 반대로 정의되지 않은 심볼은 false로 평가되며, #undef 지시문을 사용하면 이미 정의된 심볼을 해제할 수 있습니다.
다음 예제를 통해 자세히 살펴보겠습니다.
예제
#define ONE
#undef TWO
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
#if (ONE && TWO)
Console.WriteLine("둘 다 정의되어 있습니다");
#elif (ONE && !TWO)
Console.WriteLine("ONE은 정의되어 있고 TWO는 정의되어 있지 않습니다");
#elif (!ONE && TWO)
Console.WriteLine("TWO는 정의되어 있고 ONE은 정의되어 있지 않습니다");
#else
Console.WriteLine("둘 다 정의되어 있지 않습니다");
#endif
}
}
}
출력 결과
ONE은 정의되어 있고 TWO는 정의되어 있지 않습니다
코드 설명
#define ONE: 심볼 ONE을 정의합니다.#undef TWO: 심볼 TWO의 정의를 해제합니다.#if / #elif / #else / #endif: 조건부 컴파일 지시문으로, 심볼의 정의 여부에 따라 컴파일할 코드 블록을 결정합니다.
위 코드에서는 ONE만 정의되어 있고 TWO는 해제된 상태이므로, 조건식 (ONE && !TWO)가 참이 되어 두 번째 분기의 문장이 실행됩니다.
사용 시 주의사항
C#에서 #define 지시문은 파일 내 다른 모든 코드보다 먼저 위치해야 하며, #define PI 3.14처럼 값을 할당하는 용도로는 사용할 수 없습니다. 단순히 심볼의 존재 여부만 정의할 뿐입니다. 실제 상수 값이 필요하다면 const 키워드를 사용해야 합니다.