글쓴이 보관물: [호호] 야야

조건부 컴파일의 바로 가기로 C / C ++ 매크로를 사용하는 것이 좋습니다? 모드에서 컴파일 될 때만 인쇄됩니다. 보통은 다음과

내 코드에 여러 유형의 출력 메시지를 원한다고 가정 해 봅시다. 그중 하나는 DEBUG코드가 디버그 모드에서 컴파일 될 때만 인쇄됩니다.

보통은 다음과 같은 것을 작성해야합니다

#ifdef DEBUG
    std::cout << "Debug message" << std::endl;
#endif

많은 장소에서 사용하기가 번거롭고 성가시다.

코드 스 니펫에 대한 매크로를 정의하는 것이 좋은 방법이므로이 방법으로 사용 하시겠습니까?

MSG_DEBUG("Debug message")

아니면 매크로없이 처리하는 다른 더 우아한 방법이 있습니까? 다른 프로젝트에서 두 언어를 모두 사용하기 때문에 C 및 C ++의 가능한 솔루션에 관심이 있습니다.



답변

물론, 처음에 매크로를 사용하는 것이 좋다면 동일한 조건부 코드를 계속 반복하는 대신 매개 변수가있는 것을 정의하는 것이 좋은 코딩의 척도로 바람직합니다.

매크로를 사용해야합니까? 내 견해로는 C로 받아 들여지기 때문에 매크로가없는 솔루션은 디버그 모드 외부에서도 적어도 무언가 를 실행 해야하기 때문 입니다. 일반적인 C 프로그래머는 언제든지 불필요한 런타임 노력에 비해 약간 못생긴 매크로를 선택합니다.


답변

여기에는 개인 취향 요소가 있지만 C ++에서는 헤더 파일 에서이 작업을 선호합니다.

#ifdef _DEBUG
    void DebugMessage(...);
#else
    inline void DebugMessage(...) {}
#endif

따라서 릴리스 빌드에서는 함수가 인라인으로 표시되지만 디버그 빌드에서는 적절한 함수이므로 적절한 유형 확인, 적절한 오류 메시지 등이 있으며 나중에 추가 기능 (로깅 가능 여부)을 추가 할 수 있습니다.

분명히, .cpp파일에있는 함수의 해당 정의를 #ifdef _DEBUG블록 으로 묶어야합니다 .


답변

확실히, 팀에서 제공 한 코드 지침을 따르지 않도록하십시오. 시스템의 다른 코드가 일반 if 조건을 통해 동일한 기능에 도달하지 않도록하십시오.


답변