TRACE macro non Compilato correttamente nella Release Build - C ++
-
10-10-2019 - |
Domanda
Quando faccio una build di rilascio del mio Visual Studio 2008 soluzione ho un mucchio di errori in questo modo:
l'errore C2059: errore di sintassi: ''
Questo è come io di solito uso TRACE
:
TRACE(_T("My error message.\r\n\tError: %d\r\n\tFile: %s\r\n\tLine: %d\r\n"), ::GetLastError(), __WFILE__, __LINE__);
C'è anche un caso in cui lo uso con 5 parametri.
Ho pensato TRACE
era credono di compilare completamente per build di rilascio. Che cosa devo fare per rendere la compilazione fuori completa? Grazie.
Soluzione
La definizione della macro __WFILE__
è la causa del problema. Ci sono due modi per risolvere questo. In primo luogo, è possibile definire la macro come illustrato di seguito:
http://msdn.microsoft.com /en-us/library/b0084kay(v=vs.80).aspx
Si noti che non avvolgono la macro in #ifdef _DEBUG
, che ha senso in quanto la corrispondente macro __FILE__
non viene rimosso in modo di scatto sia.
Ma che la documentazione è per VS2005. E 'stato rimosso da versioni più recenti della documentazione. Ecco perché si consiglia di fare questo:
_T(__FILE__)
Altri suggerimenti
Prima di tutto, è __FILE__
per quanto ne so, non è __WFILE__
. è per questo che si ottiene che l'errore virgola. Dal momento che preprocessore è in grado di trovarlo.
In secondo luogo, perché scrivi gli ultimi tre parametri in ogni TRACE? TRACE è una macro, giusto?
Così si può definire in questo modo: (si veda anche il definire __WFILE__
macro)
#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__)
Ora, è possibile rintracciare in questo modo
TRACE("Error in I/O file")
E il gioco è fatto!