2014-12-12 2 views
2

C/C + 사용하지 않은 변수 경고에 대한 솔루션을 검색했지만 필요한 것은 없습니다. 상황은 다음과 같습니다.디버그 코드 및 C++ 사용되지 않은 매개 변수 경고

PC에서 알고리즘을 개발하고 있으며이를 실제 임베디드 플랫폼으로 이식합니다. PC 버전에는 PC의 모니터에 이미지를 보여주는 디버그 코드가 있습니다. 임베디드 플랫폼에는 불행히도 모니터가 없습니다. 물론 임베디드 플랫폼에는 디버그 코드가 전혀 필요하지 않습니다.

코드를 구별하기 위해, 우리는이 작업을 수행 할 수 있습니다

#ifndef EMBEDED 
    MyDebugCode(parameter1, parameter2, parameter3); 
#endif 

그러나, 나는 그 디버그 기능의 많은 호출이 있기 때문에이 너무 형편없는 것을 결정한다. 그 EMBEDED 조건 코드를 오염시킬 것입니다. 대신에, 나는 다음과 같은 디버그 기능 내부 조건부 컴파일 플래그를 작성하려고 :

inline void MyDebugCode(type1 p1, type2 p2, type3 p3) 
{ 
#ifndef EMBEDED 
    DisplaySomethingOnMonitor(p1, p2, p3); 
    ... 
    ... 
    ... 
#endif 
} 

을 나는 기능에, 한 번 #ifndef/#ifdef를 작성하고, 그 #ifndef/#ifdef없이 여러 번 호출 할 수 있도록.

이제 EMBEDED이 정의되면 사용하지 않을 가능성이 있습니다 p1, p2p3입니다. 이게 문제 야.

또한 EMBEDDED이 정의되어있을 때 inline이 존재하지 않더라도 전체 디버그 기능을 완전히 최적화 할 수 있기를 바랍니다. 이것은 보조이지만.

누구나 더 나은 솔루션/사례가 있습니까?

이러한 매개 변수는 클래스 인스턴스에 대한 참조 일 수 있습니다.

컴파일러는이 그것을 원하지 않는 경우 아무것도로 확장 MyDebugCode 매크로를 만드는 것입니다 할 수있는 g ++

+0

컴파일러에 특정 파일에 대한 특정 경고를 무시하는 pragma가 없습니까? – OldProgrammer

+0

컴파일러는 g ++ –

+0

g ++의 pragma를 검색하는 것을 잊어 버립니다. 잠깐 ... –

답변

1

컴파일러가 더있는 경우 경고를 해제하는 다른 방법이 작동합니다 : 사용할 수있는 방법이 없기 때문에

#ifdef EMBEDED 
inline void MyDebugCode(type1, type2, type3) {} 
#else 
inline void MyDebugCode(type1 p1, type2 p2, type3 p3) 
{ 
    DisplaySomethingOnMonitor(p1, p2, p3); 
    ... 
    ... 
    ... 
} 
#endif 

합리적인 컴파일러는 사용되지 않는 익명의 매개 변수에 경고를하지 않아야합니다.

1

한 가능성이 우아하지만 일반적인 방법입니다. 간단한 경우는 없을 것입니다 :

#ifdef EMBEDDED 
# define MyDebugCode(a,b,c) 
#else 
inline void MyDebugCode(type1 p1, type2 p2, type3 p3) 
{ 
    DisplaySomethingOnMonitor(p1, p2, p3); 
    ... 
    ... 
    ... 
} 
#endif 

가 (. 어떤 사람들은 항상 매크로를 MyDebugCode를 만들기 위해 중 아무것도하지 않고 또는 아마도 다른 이름으로 함수를 호출 YMMV을 선호하는 것이다.)

+0

예. 나는 이것을 알고 있으며,이 해결책을 고려하고있다. 문제는 함수가 네임 스페이스에 있다는 것입니다. '#define MyNameSpace :: MyDebugCode (a, b, c)'는 작동하지 않습니다. 그러나 나는 이것을 네임 스페이스 밖으로 옮기거나이 문제를 극복하기 위해'use namespace MyNameSpace; '를 사용하는 것을 고려하고있다. 어쨌든 고마워. –

관련 문제