在发布版本中没有正确编译TRACE宏 - C ++

时间:2010-12-14 16:40:57

标签: c++ visual-studio-2008 trace release-builds

当我执行Visual Studio 2008解决方案的发布版本时,我遇到了一堆这样的错误:

  

错误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假设完全针对Release版本进行编译。我需要做什么才能使编译完整?感谢。

2 个答案:

答案 0 :(得分:2)

__WFILE__宏的定义导致了问题。有两种方法可以解决这个问题。首先,您可以定义宏,如下所示:

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

请注意,它们不会将宏包装在#ifdef _DEBUG中,这是有道理的,因为在发布模式下也不会删除相应的__FILE__宏。

但该文档适用于VS2005。它已从较新版本的文档中删除。这就是你可能想要这样做的原因:

_T(__FILE__)

答案 1 :(得分:0)

首先,据我所知,它是__FILE__,而不是__WFILE__。这就是你得到逗号错误的原因。由于预处理器无法找到它。

其次,为什么要在每个TRACE中写下最后三个参数? TRACE是一个MACRO,对吧?

所以你可以像这样定义:(另见定义__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__)

现在,您可以像这样进行跟踪

TRACE("Error in I/O file")

你已经完成了!