2010-12-14 5 views
0

Wenn ich einen Releasebuild meiner Visual Studio 2008-Lösung bekomme ich ein paar Fehler wie folgt aus:TRACE Makro Zusammengestellt nicht richtig, in Releasebuild - C++

Fehler C2059: Syntaxfehler: ‚‘

Dies ist, wie ich TRACE verwenden in der Regel:

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

es gibt auch einen Fall, in dem ich es mit 5 Parameter verwenden.

Ich dachte, TRACE sollte komplett für Release-Build kompilieren. Was muss ich tun, damit es vollständig kompiliert wird? Vielen Dank.

+0

Ich bin mir nicht sicher. Welche anderen Fehler bekommst du? –

+0

Der im Post beschriebene Fehler ist der einzige, den ich bekomme, eine ganze Reihe von ihnen, einmal für jedes Mal, wenn "TRACE" verwendet wird. –

+0

ist '__WFILE__' korrekt definiert? Sie können dies überprüfen, indem Sie eine Vorverarbeitung durchführen ... – lijie

Antwort

2

Die Definition Ihres Makros __WFILE__ verursacht das Problem. Es gibt zwei Möglichkeiten, dies zu lösen. Erstens können Sie das Makro definieren, wie hier gezeigt:

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

Hinweis sie wickeln nicht das Makro in #ifdef _DEBUG, was Sinn macht, da der entsprechende __FILE__ Makro nicht entweder im Release-Modus entfernt wird.

Aber diese Dokumentation ist für VS2005. Es wurde aus neueren Versionen der Dokumentation entfernt. Vielleicht möchten Sie dies tun:

_T(__FILE__) 
0

Zunächst einmal ist es __FILE__, soweit ich weiß, nicht __WFILE__. deshalb erhalten Sie diesen Komma-Fehler. Da Präprozessor es nicht finden kann.

Zweitens, warum schreiben Sie die letzten drei Parameter in jeder TRACE? TRACE ist ein MACRO, oder?

So können Sie es wie folgt definieren:

#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__) 

nun (auch die definieren __WFILE__ Makro sehen), können Sie wie TRACE

TRACE("Error in I/O file") 

Und Sie sind fertig!