如何让VC6.0支持宏定义TRACE

xxb249 2012-07-26 10:39:53
UINT32 TraceLog(const char *fname,const char *line,const char *fmt, ...)
{
/*************************************************************************/
/* 局部变量声明 */
/*************************************************************************/
UINT8 CurTime[20] = {0}; // 获取当前时间年月日时分秒
UINT8 Time_YMD[11] = {0}; //获取当前时间年月日
UINT8 Time_YM[8] = {0}; //获取当前时间年月
UINT8 Log_File_Name[50] = {0}; //log文件名
UINT8 Log_Dir_Name[50] = {0}; //log目录名
UINT8 LogInfo[120] = {0}; //写入log的文件信息
UINT8 msg[1024] = {0}; //保存TraceLog传来的信息
UINT8 Cur_File_Name[50] = {0}; //当前函数所在文件名
UINT32 ret = 0;
UINT8 *FunName = NULL;
va_list args;

/************************************************************************/
/* 获得文件名字 */
/************************************************************************/
strcpy(Cur_File_Name, fname);
StrTok(Cur_File_Name,"\\");

va_start(args, fmt);
ret = vsprintf(msg, fmt, args);
va_end(args);

GetSysTime(CurTime);
strncpy(Time_YM,CurTime,7);
strncpy(Time_YMD,CurTime,10);
sprintf(Log_Dir_Name,"%s%s",DIRPATHLOG,Time_YM);
sprintf(Log_File_Name,"%s\\%s.LOG",Log_Dir_Name,Time_YMD);

/************************************************************************/
/* 获得函数名字 */
/************************************************************************/
FunName = Pop_Stack();

/************************************************************************/
/* 格式化输出:时间 文件名称 函数名称 行号 以及日志信息 */
/************************************************************************/
sprintf(LogInfo,"%s %s %s <%d> %s\n",
CurTime,Cur_File_Name,FunName,line,msg);
CreateLogDir(Log_Dir_Name);
WriteLogInfo(Log_File_Name,LogInfo);
return ret;
}
上面函数记录日志的 函数

我想实现一个这样的操作,
#define TRACE(X) TraceLog(__FILE__,__LINE__,X)


使用方法 TRACE("The result is %d.",ii);

我想请问一下 在VC6.0下如何 定义一个这样的宏 TRACE 平台必须是VC6.0 对于gcc 或者vs 2005以上版本我都实现了
请各位高手们 出来秀一下吧
...全文
234 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xxb249 2012-07-26
  • 打赏
  • 举报
回复
楼上的不是我想要的结果,谢谢
赵4老师 2012-07-26
  • 打赏
  • 举报
回复
仅供参考
#include <stdio.h>
#define DEBUG2(x,y) "Line " #y " of File " x
#define DEBUG1(x,y) DEBUG2(x,y)
#define LINE_FILE DEBUG1( __FILE__ , __LINE__ )





const char *str = LINE_FILE;
void main() {
printf("%s\n",str);
}
//Line 10 of File c:\tmp\tmp\foo.c
xxb249 2012-07-26
  • 打赏
  • 举报
回复
vc 中定义的TRACE 有局限性
xxb249 2012-07-26
  • 打赏
  • 举报
回复
不想用 我想自己定义一个 用着比较方便
图灵狗 2012-07-26
  • 打赏
  • 举报
回复
VC本身就包含TRACE宏了啊。
xxb249 2012-07-26
  • 打赏
  • 举报
回复
自己顶一下!!
赵4老师 2012-07-26
  • 打赏
  • 举报
回复
IDE中,在不清楚的宏定义、结构体、类、函数名……上点鼠标右键,选转到定义。
赵4老师 2012-07-26
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
152: #define TRACE CONCRT_TRACE

CONCRT_TRACE 具体一下吧 本地没有安装 VS 10.0
[/Quote]
http://www.microsoft.com/visualstudio/en-us/products/2010-editions/visual-cpp-express
右边Visual C++ 2010 Express下面的Select language...下拉选‘简体中文’,再按Install Now按钮
xxb249 2012-07-26
  • 打赏
  • 举报
回复
152: #define TRACE CONCRT_TRACE

CONCRT_TRACE 具体一下吧 本地没有安装 VS 10.0
赵4老师 2012-07-26
  • 打赏
  • 举报
回复
参考(这个不是VC6)
File: "C:\Program Files\Microsoft Visual Studio 10.0\VC\crt\src\utils.h" 1 occurrences found on 1 lines
152: #define TRACE CONCRT_TRACE
赵4老师 2012-07-26
  • 打赏
  • 举报
回复
参考
File: "C:\Program Files\Microsoft Visual Studio\VC98\ATL\Include\ATLBASE.H" 1 occurrences found on 1 lines
366: #define ATLTRACE AtlTrace
xxb249 2012-07-26
  • 打赏
  • 举报
回复
#define TRACE(X...) TraceLog(__FILE__,__LINE__,##X)
这个是我曾经试验过的 ,在GCC下通过,但是在VC6下不行
赵4老师 2012-07-26
  • 打赏
  • 举报
回复
#define TRACE(X,...) TraceLog(LINE_FILE##X,...)
TRACE("The result is %d.",ii);
试试看。不保证对。

69,372

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧