C\#\#define 조건 컴 파일 상세 설명

본문 안내:
C\#의 예비 프로세서 명령 은 실행 가능 한 코드 의 명령 으로 바 뀌 지 않 지만 컴 파일 과정 에 영향 을 줄 수 있 습 니 다.자주 사용 하 는 예비 프로세서 명령 은\#define,\#undef,\#if,\#elif,\#else 와\#endif 등 이 있 습 니 다.다음은 C\#에서 사용 하 는\#define 을 조건 으로 컴 파일 하 는 인 스 턴 스 를 소개 합 니 다.
C\#에서 조건 컴 파일 명령 은 원본 파일 의 일부분 을 조건 에 따라 포함 하거나 제거 하 는 데 사 용 됩 니 다.Visual Studio 에 서 는 제 외 된 코드 가 회색 으로 표 시 됩 니 다.
뭐 공부 해요?
1.두 버 전의 코드 를 발표 할 계획 일 때.즉,기본 판 과 더 많은 버 전 을 가 진 기업 판 은 조건 부 컴 파일 명령 을 사용 할 수 있다.
2.예 를 들 어 같은 파일 을 silverlight,wpf,winform 등에 사용 하고 Debug 와 Release 등 도 고려 하 며 대부분의 코드 가 같 습 니 다.
3.함수 와 속성 을 최종 제품 에 컴 파일 할 지 여 부 를 지정 합 니 다.
2.\#define 용법
문법:\#define 이름
메모:여기 이름 은 Debug 입 니 다.Dragon 과 같은 다른 이름 도 지 을 수 있 습 니 다.
#define Debug
설명:
1.Debug 는 성명 의 변수 로 볼 수 있 지만 이 변 수 는 실제 값 이 없습니다.존재 할 때\#if Debug 결 과 는 true 이 고 그렇지 않 으 면 false 입 니 다.
2.\#define 단독으로 사용 하 는 것 은 의미 가 없고 보통\#if 또는 Conditional 특성 과 결합 하여 사용 합 니 다.
3.\#define 은 모든 using 네 임 스페이스 앞 에 정의 해 야 합 니 다.
4.Debug 와 DEBUG 는 다 릅 니 다.C\#대소 문 자 를 구분 합 니 다.
3.\#define 조건 컴 파일 인 스 턴 스
방법 1、사용\#if

#define Dragon
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace ConditionalCompilation
{
  class Program
  {
    static void Main(string[] args)
    {
#if Dragon
      Console.WriteLine("Dragon is defined");
#else
      Console.WriteLine("Dragon is not defined");
#endif
      Console.ReadKey();
    }
  }
}
출력 결 과 는 다음 과 같 습 니 다.

설명 이 떨 어 지면//\#define Dragon,출력 결 과 는:

방식 2.사용 Conditional 특성
우 리 는 일부 함 수 를 격 리 시 켜 서 특정한 환경 변 수 를 정의 하거나 특정한 값 을 설정 한 후에 만 역할 을 발휘 할 수 있 습 니 다.Conditional 특성 을 사용 하 는 격 리 전략 은\#if/\#endif 보다 실수 하기 쉽 지 않 습 니 다.

#define Debug
#define Trace
#if (Debug && Trace)
#define DebugAndTrace
#endif
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;

namespace ConditionalCompilation
{
  class Program
  {
    static void Main(string[] args)
    {
      Print0();
      Print1();
      Print2();
      Print3();
      Console.ReadKey();
    }

    [Conditional("DEBUG")]
    static void Print0()
    {
      Console.WriteLine("DEBUG is defined");
    }

    [Conditional("Debug")]
    static void Print1()
    {
      Console.WriteLine("Debug is defined");
    }

    //   Debug  Trace        
    //     
    [Conditional("Debug"), Conditional("Trace")]
    static void Print2()
    {
      Console.WriteLine("Debug or Trace is defined");
    }

    //     Debug Trace        
    //     
    [Conditional("DebugAndTrace")]
    static void Print3()
    {
      Console.WriteLine("Debug and Trace is defined");
    }
  }
}
출력 결 과 는 다음 과 같 습 니 다.

설명:
1.코드 에 DEBUG 가 정의 되 지 않 았 는데 DEBUG 가 출력 된 것 은 DEBUG 버 전 으로 인해 DEBUG 가 자동 으로 정의 되 었 기 때 문 입 니 다."항목-오른쪽 단추-속성-생 성 옵션-일반 표시 줄 의 정의 DEBUG 상수(U)앞 에 있 는 체크 상자 가 선택 되 었 습 니 다.물론 선택 한 상 태 를 지 울 수 있 습 니 다.그러면 DEBUG 를 출력 하지 않 습 니 다.
2.Debug 와 Trace 가 정의 되 지 않 으 면 Debug or Trace 를 출력 하지 않 습 니 다.Debug 와 Trace 가 모두 정의 되 어야 Debug and Trace 를 출력 할 수 있 습 니 다.
3.Condition al 에 예제 코드[Condition al("Debug"),Condition al("Trace")]과 같은 여러 속성 을 추가 할 수 있 지만 여러 속성 간 의 관계 또는 관계,즉"Debug"또는"Trace"가 임의로 정의 되면 대응 방법 이 실 행 됩 니 다.
4.여러 개의 속성 을 추가 해 야 한다 면 Condition al 을 직접 사용 하 는 것 은 실현 할 수 없습니다.\#if/\#endif 를 통 해 간접 적 으로 완성 해 야 합 니 다.예 를 들 어 예제 코드 의 조합 작업 과 같 습 니 다.

#if (Debug && Trace)
#define DebugAndTrace
#endif
Condition al 속성 을 사용 하 는 방법 은 다음 과 같은 제한 을 받 습 니 다.
1.조건 방법 은 반드시 류 성명 또는 구조 성명 중의 방법 이 어야 한다.인터페이스 성명 의 방법 에 Condition al 속성 을 지정 하면 컴 파일 시 오류 가 발생 합 니 다.
2.조건 방법 은 인터페이스 방법의 실현 이 될 수 없다.그렇지 않 으 면 컴 파일 시 오류 가 발생 합 니 다.
3.조건 방법 은 void 반환 유형 이 있어 야 합 니 다.
4.override 수정자 로 조건 을 표시 할 수 없습니다.단,가상 수정자 로 조건 을 표시 할 수 있 습 니 다.이러한 방법의 재 작성 방법 은 조건 부 방법 으로 포함 되 어 있 으 며,Condition al 속성 으로 표시 할 수 없습니다.
환경 변수(또는 조건 컴 파일 기호)의 설정 방법 은 세 가지 가 있 습 니 다.
1)\#define 정의 및\#undef 로 정 의 를 취소 하고 모든 using 네 임 스페이스 앞에서 정의 합 니 다.
2)컴 파일 러 명령 행 옵션(예 를 들 어/define:DEBUG)을 사용 하여'항목-오른쪽 키-속성-옵션 카드 생 성-일반 표시 줄'의 조건 컴 파일 기호(Y)에 설정 합 니 다(여러 개 있 으 면 영어 쉼표 로 구분 할 수 있 습 니 다).DEBUG 버 전에 서 시스템 은 기본적으로 DEBUG 와 TRACE 를 설정 합 니 다.
3)운영 체제 케이스 프로그램의 환경 변수(예 를 들 어 set DEBUG=1)를 사용한다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기