development

C #의 #ifdef

big-blog 2020. 7. 22. 07:37
반응형

C #의 #ifdef


C ++ 대신 C #에서 아래 작업을 수행하고 싶습니다.

#ifdef _DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif

#if DEBUG
bool bypassCheck=TRUE_OR_FALSE;//i will decide depending on what i am debugging
#else
bool bypassCheck = false; //NEVER bypass it
#endif

빌드 속성에서 DEBUG를 정의하는 확인란이 선택되어 있는지 확인하십시오.


조건부 속성 을 사용하는 것이 좋습니다 !

업데이트 : 3.5 년 후

다음 #if과 같이 사용할 수 있습니다 ( : MSDN에서 복사 ).

// preprocessor_if.cs
#define DEBUG
#define VC_V7
using System;
public class MyClass 
{
    static void Main() 
    {
#if (DEBUG && !VC_V7)
        Console.WriteLine("DEBUG is defined");
#elif (!DEBUG && VC_V7)
        Console.WriteLine("VC_V7 is defined");
#elif (DEBUG && VC_V7)
        Console.WriteLine("DEBUG and VC_V7 are defined");
#else
        Console.WriteLine("DEBUG and VC_V7 are not defined");
#endif
    }
}

메소드의 일부를 제외 할 때만 유용합니다.

#if컴파일에서 일부 메소드를 제외 하는 사용 하는 경우 해당 메소드를 호출하는 모든 코드 조각을 컴파일에서 제외해야합니다 (때때로 런타임에 일부 클래스를로드 할 수 있으며 "모든 참조 찾기"로 호출자를 찾을 수 없음). 그렇지 않으면 오류가 발생합니다.

반면에 조건부 컴파일을 사용하는 경우 메소드를 호출하는 모든 코드 조각을 그대로 둘 수 있습니다. 모든 매개 변수는 여전히 컴파일러에 의해 검증됩니다. 메소드는 런타임에 호출되지 않습니다 . 메소드를 한 번만 숨기고 호출하는 모든 코드를 제거 할 필요는 없다고 생각합니다. 값을 반환하는 메소드에는 조건부 속성을 사용할 수 없으며 void 메소드에서만 사용할 수 있습니다. 그러나 #if값을 반환하는 메서드와 함께 사용 하면 값을 호출하는 모든 코드 조각을 숨겨야 하기 때문에 이것이 큰 제한이라고 생각하지 않습니다 .

예를 들면 다음과 같습니다.


    // 런타임에 Class1.ConditionalMethod () 호출은 무시됩니다. 
    // DEBUG 상수가 정의되지 않은 경우


    System.Diagnostics 사용;
    Class1 클래스 
    {
       [조건 ( "DEBUG")]
       공개 정적 무효 ConditionalMethod () {
          Console.WriteLine ( "Executed Class1.ConditionalMethod");
       }
    }

요약:

#ifdefC ++에서는 사용 하지만 C # / VB에서는 조건부 속성을 사용합니다. 이렇게하면 메소드를 호출하는 코드를 숨기지 않고 메소드 정의를 숨길 수 있습니다. 호출 코드는 여전히 컴파일러에 의해 컴파일되고 유효성이 검사되지만 런타임에는 메소드가 호출되지 않습니다. #if조건부 속성 을 사용 하면 코드가 여전히 컴파일되므로 종속성을 피하기 위해 사용할 수 있습니다 .


C #에는 전처리 기가 있습니다. C ++ 및 C와 약간 다르게 작동합니다.

다음은 MSDN 링크 입니다. 모든 전 처리기 지시문 에 대한 섹션입니다 .

참고URL : https://stackoverflow.com/questions/975355/ifdef-in-c-sharp

반응형