C#의 전처리기 지시문(Preprocessor Directive)은 실제 컴파일 작업이 시작되기 전에 컴파일러에게 특정 정보를 미리 처리하도록 지시하는 명령어입니다. 조건부 컴파일, 오류 및 경고 제어 등 다양한 용도로 활용됩니다.
모든 전처리기 지시문은 # 기호로 시작하며, 한 줄에서 지시문 앞에는 공백 문자(white-space)만 위치할 수 있습니다. 또한 전처리기 지시문은 일반적인 코드 문장(statement)이 아니기 때문에 세미콜론(;)으로 끝내지 않습니다.
C#의 주요 전처리기 지시문
다음은 C#에서 자주 사용되는 대표적인 전처리기 지시문 목록입니다.
| 번호 | 지시문 및 설명 |
|---|---|
| 1 | #define 심볼(symbol)이라 불리는 문자 시퀀스를 정의합니다. |
| 2 | #undef 정의된 심볼을 해제(undefine)할 수 있게 합니다. |
| 3 | #if 하나 이상의 심볼을 검사하여 참(true)으로 평가되는지 확인합니다. |
| 4 | #else #if와 함께 사용하여 복합 조건부 지시문을 구성합니다. |
| 5 | #elif 복합 조건부 지시문을 만들 수 있게 합니다. |
| 6 | #endif 조건부 지시문의 끝을 지정합니다. |
| 7 | #line 오류 및 경고 출력에 표시되는 컴파일러의 줄 번호와 (선택적으로) 파일 이름을 수정할 수 있습니다. |
| 8 | #error 코드의 특정 위치에서 오류를 생성할 수 있습니다. |
#define 전처리기 예제
아래 예제는 #define 전처리기를 사용하여 심볼 PI를 정의하고, #if 지시문으로 해당 심볼의 정의 여부를 확인하는 코드입니다.
#define PI
using System;
namespace PreprocessorDAppl {
class Program {
static void Main(string[] args) {
#if (PI)
Console.WriteLine("PI is defined");
#else
Console.WriteLine("PI is not defined");
#endif
Console.ReadKey();
}
}
}
실행 결과
PI is defined
위 코드에서는 #define PI로 심볼 PI가 정의되어 있으므로 #if (PI) 조건이 참이 되어 "PI is defined"가 출력됩니다. 반대로 #define PI 구문을 제거하면 #else 블록이 실행되어 "PI is not defined"가 출력됩니다. 이처럼 전처리기 지시문을 활용하면 컴파일 시점에 코드의 포함 여부를 유연하게 제어할 수 있습니다.