2010-12-14 12 views
0

가 나는 이런 오류의 무리 얻을 :TRACE 매크로가 제대로 릴리스 빌드에서 컴파일되지 않음 - 내 비주얼 스튜디오 2008 솔루션의 릴리스 빌드를 수행 할 때 C++

오류 C2059 : 구문 오류 : ','

이 내가 일반적으로 TRACE를 사용하는 방법은 다음과 같습니다

TRACE(_T("My error message.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), ::GetLastError(), __WFILE__, __LINE__); 

내가 5 개 매개 변수와 함께 사용 인스턴스도 있습니다.

나는 TRACE가 릴리스 빌드를 위해 완전히 컴파일한다고 생각했습니다. 컴파일이 완료 되려면 어떻게해야합니까? 감사.

+0

잘 모르겠습니다. 다른 오류는 무엇입니까? –

+0

게시물에 설명 된 오류는'TRACE'가 사용될 때마다 한 번만 얻을 수 있습니다. –

+0

은 올바르게 정의 된'__WFILE__'입니까? 당신은 사전 처리 패스를 수행하여 확인할 수 있습니다 ... – lijie

답변

2

__WFILE__ 매크로의 정의로 인해 문제가 발생합니다. 이것을 해결할 수있는 두 가지 방법이 있습니다. 먼저, 다음과 같이 당신은 매크로를 정의 할 수 있습니다 :

http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.80).aspx

주들은 해당 __FILE__ 매크로 중 하나를 릴리스 모드에서 제거되지 않기 때문에 의미가 #ifdef _DEBUG에서 매크로를 포장하지 않습니다.

그러나 설명서는 VS2005 용입니다. 새로운 버전의 문서에서 제거되었습니다. 그래서 다음과 같이 할 수 있습니다 :

_T(__FILE__) 
0

우선, 내가 알고있는 한 __FILE__이 아니며 __WFILE__이 아닙니다. 그래서 쉼표 오류가 발생합니다. 전처리기를 찾지 못하기 때문에.

둘째, 왜 각 추적에서 마지막 세 매개 변수를 작성합니까? 추적은 매크로 야, 맞지?

그래서 당신은 다음과 같이 정의 할 수 있습니다 : 이제

#define FULL_TRACE //define FULL_TRACE here 
#define __WFILE__ L##__FILE__ //since __WFILE__ is not a real macro in MCVC++ 
#define TRACE(msg) FULL_TRACE(msg, ::GetLastError(), __WFILE__, __FUNCTION__, __LINE__) 

(매크로 __WFILE__를 정의도 참조),이

TRACE("Error in I/O file") 

처럼 추적 할 수 있습니다 그리고 당신은 완료!