산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> C 언어

C# 전처리기 지시문 마스터하기: 조건부 컴파일과 코드 제어

전처리기 지시문(Preprocessor Directives)은 실제 컴파일이 시작되기 전 컴파일러에게 정보를 미리 처리하도록 지시합니다.

C# 전처리기 지시문 목록

번호지시문 및 설명
1#define - 심볼(기호) 정의
2#undef - 심볼 정의 해제
3#if - 심볼이 true로 평가되는지 테스트
4#else - #if와 함께 복합 조건부 지시문 생성
5#elif - 복합 조건부 지시문 생성 (else if)
6#endif - 조건부 지시문 끝 지정
7#line - 컴파일러 줄 번호와 파일명 출력 수정 (에러/경고용)
8#error - 코드 특정 위치에서 에러 발생
9#warning - 코드 특정 위치에서 1단계 경고 발생
10#region - Visual Studio에서 접기/펼치기 가능한 코드 블록 지정
11#endregion - #region 블록 끝 표시

#define 전처리기

심볼 상수를 정의합니다. #if 지시문에 표현식으로 전달되어 true로 평가되게 합니다.

#define 심볼_이름

예제

#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

조건부 지시문 (Conditional Directives)

#if로 조건부 컴파일 블록을 만듭니다. 심볼이 true로 평가되면 #if와 다음 지시문 사이의 코드를 컴파일합니다.

#if 심볼 [연산자 심볼]...

연산자: == (등가), != (부등), && (AND), || (OR). 괄호로 그룹화 가능.

디버그 빌드나 특정 구성에서만 컴파일할 때 유용합니다. #if로 시작한 블록은 반드시 #endif로 끝나야 합니다.

조건부 지시문 종합 예제

#define DEBUG
#define VC_V10
using System;

public class TestClass
{
    public static void Main()
    {
#if (DEBUG && !VC_V10)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V10)
        Console.WriteLine("VC_V10 is defined");
#elif (DEBUG && VC_V10)
        Console.WriteLine("DEBUG and VC_V10 are defined");
#else
        Console.WriteLine("DEBUG and VC_V10 are not defined");
#endif
        Console.ReadKey();
    }
}

출력: DEBUG and VC_V10 are defined

주요 활용 패턴

1. 디버그 전용 코드

#if DEBUG
    Console.WriteLine("디버그 정보: {0}", variable);
    Logger.Debug("상세 로그");
#endif

2. 플랫폼/버전별 코드

#if NETCOREAPP3_1
    // .NET Core 3.1 전용 코드
#elif NET5_0_OR_GREATER
    // .NET 5+ 전용 코드
#else
    // 폴백 코드
#endif

3. 실험적 기능 토글

#define EXPERIMENTAL_FEATURE

#if EXPERIMENTAL_FEATURE
    // 새 알고리즘 테스트
#else
    // 기존 안정 버전
#endif

4. #region으로 코드 영역 구분 (IDE 지원)

#region 생성자
public MyClass() { ... }
public MyClass(int x) { ... }
#endregion

#region 공개 메서드
public void DoWork() { ... }
#endregion

5. #error, #warning으로 컴파일 타임 검증

#if !DEBUG
#error "이 코드는 디버그 모드에서만 컴파일되어야 합니다."
#endif

#warning "이 메서드는 곧 사용되지 않습니다. NewMethod()를 사용하세요."

6. #line으로 디버깅 정보 제어

#line 100 "CustomFile.cs"
int x = 10;  // 에러 발생 시 100번째 줄, CustomFile.cs로 표시
#line default  // 기본값 복원
모범 사례: 조건부 컴파일은 최소화하세요. 런타임 설정(설정 파일, 의존성 주입)으로 대체 가능한 경우가 많습니다. #region은 코드 숨기기용이 아닌 논리적 그룹화용으로만 사용하세요.

C 언어

  1. C# Hello World – 첫 C# 애플리케이션 만들기
  2. C# 키워드와 식별자 이해: 규칙, 목록, 모범 사례
  3. C# 변수와 기본 데이터 타입 완벽 가이드
  4. C# 연산자 – C# 연산자 종합 가이드
  5. C# 비트 연산자와 시프트 연산자 완전 정복: 종합 가이드
  6. C# 기초: 입출력(Essential Input/Output) 완벽 가이드
  7. C# 식, 문, 블록: 개념과 실전 예제로 완벽 이해
  8. C# 주석 마스터하기: 종류, 모범 사례, XML 문서화
  9. C# switch 문 마스터하기: 문법, 예제, 모범 사례
  10. C# 삼항 연산자: 조건부 표현식을 간결하게 작성하는 법