2010-02-11 3 views
5

일부 ASSERTION 코드에 부작용이 있다고 의심됩니다. 내 코드를 컴파일하는 방법을 변경하지 않고 ASSERT를 해제하고 싶습니다. MSVS2008을 사용하고 있습니다. 디버그에서 릴리스로 전환하는 것은 메모리가 초기화되는 방식을 변경하므로 수행하지 않습니다.C++에서 ASSERT (x)를 해제하려면 어떻게합니까?

답변

6

는 아무것도로 확장되도록 어설 션 마르코을 재정의

#undef assert 
#define assert(x) ((void)0) 

.

+0

내가 잘못하지 않으면 어설 션 (프로그램 종료)이 해제되지만 평가에서 제외되고 제거되지 않습니다. 아마도 :'#define assert (x) (void) 0'? – UncleBens

+0

@UncleBens Ak, 당신 말이 맞지만'(void) 0'은 필요하지 않습니다. 그러나'(x)'는 있습니다. – Yacoby

+2

@ Yacoby : 일반적으로 문장을 확장하면 어설 션 등이 도움이되기 때문에 필요합니다. 예를 들어,'assert'가 해제 모드에서 아무것도 확장하지 않으면'if (foo) assert (bar); else assert (baz);'는 빈 if 및/또는 else 절에 대해 경고 할 수 있습니다. C 표준의 최신 초안은 적어도 * 내장 된 어설 션이 그렇게 구현되어야한다고 요구합니다. –

6

assert을 의미하는 경우 NDEBUG 매크로로 제어해야합니다.

(즉 cassert를 포함하면 나) cassert의 흠 후 헤더 파일의 상단에이를 넣어
+1

NDEBUG도 메모리 초기화를 변경합니다. – jbcoe

관련 문제