#if RELEASE가 C #에서 #if DEBUG와 같은 방식으로 작동합니까? 예제에서 “DEBUG”를 사용합니다. 디버그 모드에서 컴파일

#if 컴파일러 지시문에서 본 모든 예제에서 “DEBUG”를 사용합니다. 디버그 모드에서 컴파일 할 때 실행하고 싶지 않은 코드를 제외하기 위해 같은 방법으로 “RELEASE”를 사용할 수 있습니까? 이 블록으로 둘러싸고 싶은 코드는 많은 양의 이메일을 전송하며 테스트 할 때 실수로 해당 코드를 전송하고 싶지 않습니다.



답변

아니, 당신이 몇 가지 일을하지 않으면 그렇지 않습니다.

여기서 중요한 부분은 DEBUG가 실제로 무엇이며 컴파일러가 확인할 수있는 일종의 상수입니다.

프로젝트 속성을 확인하면 빌드 탭 아래에 세 가지가 있습니다.

  • “조건부 컴파일 기호”라는 텍스트 상자
  • “DEBUG 상수 정의”라고 표시된 확인란
  • “TRACE 상수 정의”라고 표시된 확인란

이름이 RELEASE 인 그러한 확인란이나 상수 / 기호가 미리 정의되어 있지 않습니다.

그러나 조건부 컴파일 기호라는 텍스트 상자에 해당 이름을 쉽게 추가 할 수 있지만 구성별로 설정되므로 프로젝트 구성을 릴리스 모드로 설정해야합니다.

따라서 기본적으로 텍스트 상자에 추가하지 않으면 #if RELEASE구성에서 코드가 생성되지 않습니다.


답변

RELEASE 정의되어 있지 않지만 사용할 수 있습니다

#if (!DEBUG)
  ...
#endif

답변

아니.

디버그 구성에서는 DEBUG정의 된 상수 (Visual Studio에서 자동으로 정의 됨)가 있지만 릴리스 모드에 대해 정의 된 상수는 없습니다. 빌드중인 프로젝트 설정을 확인하십시오.

프로젝트-> 빌드 에서 [DEBUG 상수 정의]를 선택 하는 것은 모든 파일의 시작 부분에 #define DEBUG를 포함시키는 것과 같습니다.

릴리스 구성에 대한 RELEASE 상수를 정의하려면 다음으로 이동하십시오.

  • 프로젝트 속성-> 빌드
  • 릴리스 모드를 선택하십시오
  • 에서 조건부 컴파일 기호 입력 텍스트 상자 : RELEASE

답변

VS 설치 (VS 2008)에서 #if RELEASE작동하지 않습니다. 그러나 당신은 단지 사용할 수 있습니다#if !DEBUG

예:

#if !DEBUG
SendTediousEmail()
#endif

답변

전에는 본 적이 없지만 …

#if (DEBUG == FALSE)

#if (!DEBUG)

나중에 작동합니까?


답변

#if(!DEBUG)이 목적으로 사용할 수 있습니다 .


답변

“팝 카탈린”이 맞았습니다. 빌드 유형을 기반으로 정의를 제어하면 많은 유연성이 제공됩니다. 예를 들어, 동일한 솔루션에서 “DEBUG”, “DEMO”및 “RELEASE”구성을 모두 가질 수 있습니다. 따라서 두 가지 솔루션으로 중복 프로그래밍 할 필요가 없습니다.

따라서 RELEASE 조건부 컴파일 기호를 정의 할 때 와 동일 #if RELEASE하거나 #if (RELEASE)작동합니다 #if DEBUG.

다음은 “Pop Catalin”게시물에서 발췌 한 것입니다. 릴리스 구성에 대한 RELEASE 상수를 정의하려면 다음으로 이동하십시오. * 프로젝트 특성-> 빌드
* 릴리스 모드 선택 * 조건부 컴파일 기호 텍스트 상자에 RELEASE를 입력하십시오.