2012-11-23 2 views
1

나는 종종 이런 식으로 코드를 작성 :하지 않는 VAR는

#ifdef DEBUG 
#define assert(e) if(!e) printf("something's wrong"); 
#else 
#define assert(...) 
#endif 

코드의 첫 번째 조각은 줄 것이라고 :

int result = someMethod(arg1,arg2,...); 
assert(result==0) 

이의이 어설() 이런 식으로 뭔가를 정의한다고 가정 해 봅시다 '결과'가 사용되지 않는 var임을 경고합니다.

나는 다른 무엇을 할 수 ...

#ifdef DEBUG 
    int result = someMethod(arg1,arg2,...); 
#else 
    someMethod(arg1,arg2,...); 
#endif 
assert(result==0) 

하지만 그건 나에게 매우 비 건조 보인다

내가 좋아하는 뭔가를 할 수 있을까?

+0

왜 당신은'assert'를 재정의하고 있습니까? '#include '. 또한'DEBUG'보다는'NDEBUG'가 일반적으로 사용된다는 점에 유의하십시오. –

+0

미안하지만, C에는 방법이 없습니다. SomeMethod()는 someFunction()이라는 이름이어야합니다. –

+0

@WilliamPursell 맞아, 어리석은 짓이야 :-) – Grav

답변

4
int result = someMethod(arg1,arg2,...); 
assert(result==0); 
(void)result; 
0

공백과 줄 바꿈 assertion_code 같은 매크로는 디버그 구성에 특정 코드 조각을 사용하려면 컴파일러 관련이없는, 그래서 ...

#ifdef DEBUG 
    int result = 
#endif 
    someMethod(arg1,arg2,...); 
assert(result==0) 
+0

아마도 매크로를 사용 가능하게 만들려 고합니다. – pmr

+0

@pmr 역학을 보여 주지만, 매크로는 더 좋습니다. – HostileFork

1

.

이제
#if defined(NDEBUG) 
#define assertion_code(v) 
#else 
#define assertion_code(v) v 
#endif 

당신은 쓸 수

assertion_code(int result =) expr(); 
assert(result == 0); 
0

명시 적 방법이있다 : 그런 다음

static inline void debug(const char *msg) 
{ 
#ifdef DEBUG 
    printf("%s\n", msg); 
#else 
    (void)msg; 
#endif 
} 

: 공정한 기회 당신이하지 않습니다 존재하므로

if (someMethod(arg1,arg2,...) != 0) { 
    debug(message); 
} 

가 뭔가 잘못되었을 때 정상적으로 계속하고 싶다면, explici 어쨌든 t 조건절은 아마도 유용 할 것입니다. 아니면 DEBUG가 꺼져있을 때 오류를 무시할 계획입니까?