C# 컴파일러에는 별도의 전처리기(preprocessor)가 존재하지 않지만, 지시문은 마치 전처리기가 있는 것처럼 처리됩니다. C#에서 전처리기 지시문은 주로 조건부 컴파일을 지원하는 데 활용됩니다.
전처리기 지시문은 실제 컴파일이 시작되기 전에 특정 정보를 사전 처리하도록 컴파일러에 지시하는 역할을 합니다.
C#의 주요 전처리기 지시문
다음은 C#에서 사용할 수 있는 전처리기 지시문 목록입니다.
1. #define
심볼(symbol)이라 불리는 문자 시퀀스를 정의합니다.
2. #undef
정의된 심볼을 해제(undefine)할 수 있게 합니다.
3. #if
하나 이상의 심볼을 검사하여 해당 심볼이 참(true)으로 평가되는지 확인합니다.
4. #else
#if와 함께 사용하여 복합 조건부 지시문을 구성할 수 있습니다.
5. #elif
복합 조건부 지시문을 만들 수 있게 해줍니다.
6. #endif
조건부 지시문의 끝을 지정합니다.
7. #line
컴파일러의 줄 번호와 (선택적으로) 오류 및 경고 출력에 표시될 파일 이름을 수정할 수 있습니다.
8. #error
코드의 특정 위치에서 오류를 생성할 수 있습니다.
9. #warning
코드의 특정 위치에서 수준 1(level one) 경고를 생성할 수 있습니다.
10. #region
Visual Studio 코드 편집기의 개요(outlining) 기능을 사용할 때 확장하거나 축소할 수 있는 코드 블록을 지정합니다.
11. #endregion
#region 블록의 끝을 표시합니다.
전처리기 지시문 사용 예제
아래 예제를 통해 C#에서 전처리기 지시문을 실제로 어떻게 사용하는지 살펴보겠습니다.
#define PI
using System;
namespace Demo {
class Program {
static void Main(string[] args) {
#if (PI)
Console.WriteLine("PI is defined");
#else
Console.WriteLine("PI is not defined");
#endif
Console.ReadKey();
}
}
}
위 예제에서는 #define PI로 PI 심볼을 정의한 후, #if 지시문으로 해당 심볼의 정의 여부를 검사합니다. PI가 정의되어 있으므로 프로그램 실행 시 "PI is defined"라는 메시지가 출력됩니다. 만약 #define PI를 제거하면 #else 블록이 실행되어 "PI is not defined"가 출력됩니다.