2014-04-30 3 views
3

내 C++ 프로젝트에서 "테스트 모드"를 사용해야합니다.전 처리기 지시문과 함수 코드를 혼합하는 것은 바람직하지 않습니까?

일반적으로 다른 프로세스에서 생성해야하는 프로세스가 있습니다. 다른 응용 프로그램에서 시작한 응용 프로그램을 디버깅하는 것이 약간 까다 롭기 때문에 기본적으로 콘솔을 할당하고 임의의 데이터를 만드는 다른 프로세스의 존재를 시뮬레이션하므로 IPC 기능을 사용할 필요가없는 테스트 모드가 필요합니다.

내가 좋아하는 코드에 처리기 지시문을 사용하기 시작 :

int APIENTRY _tWinMain(...) { 
#ifdef TEST_MODE_ON 
    AllocConsole(); 
    ... 
#endif 
... 
#ifdef TEST_MODE_ON 
    FreeConsole(); 
    ... 
#endif 
} 

하지만이 뷰의 코드 가독성 지점에서 가장 좋은 방법은 아니라고 생각. 이것은 나쁜 습관입니까? (왜?) 다른 좋은 방법이 있습니까? 감사!

+1

고대 Windows 프로그램을 포팅하지 않는 한'TCHAR'과 그 ilk를 사용하지 마십시오. – Deduplicator

+0

예, Windows 8에 실제로 오래된 코드를 포팅하겠습니다.하지만 내 질문에 대한 링크가 표시되지 않습니다. BTW 왜 tchar의 사용을 피해야합니까? – Chaplin89

+0

''을 보셨습니까? – Deduplicator

답변

5

나쁜 습관 일 필요는 없으며 단지 코드를 읽을 수 없도록 만듭니다.

그리고 물론 당신의 컴파일이 필요

#include <stdio.h> 

#ifdef TEST_MODE_ON 
#define DEBUG_CALL(x) x; 
#else 
#define DEBUG_CALL(x) 
#endif 

int main(int argc, char** argv) 
{ 
    DEBUG_CALL(printf("Hello")); 
} 

(예, 나는 그것이 추한 안전하지 않은 건 알지만 그럼에도 불구하고 작동) : 나는 TEST_MODE_ON에 따라하는 것은 뭔가 다른 평가 방법 발신자 매크로 같은으로 갈 것 정의의 배려 TEST_MODE_ON.

+0

좋은 것 같습니다. – Chaplin89

0

이 유형의 문제를 해결하는 일반적인 방법입니다. 그것은 쓸 읽을 비트 모드입니다 : TEST_MODE

#ifdef TEST_MODE 
// ... 
#endif 

정의되는이 ON 있다고 유추합니다.