UNIX下C++的可变参数的问题,大家都来看看阿
CODE:
#include <io.h>
#include <sys/stat.h>
#include <algorithm>
#include <strstream>
#include <string.h>
#include <stdio.h>
#include <stdarg.h>
#include <ctime>
using namespace std;
void arf0Eve_TraceLog ( const char * szFormat , ... )
{
#define ARD0EVE_TRACELOG_PATH "D:\\ITS_TRACE"
#define ARD0EVE_TRACELOG_FULL "D:\\ITS_TRACE\\TraceLog.log"
char szTmp[1024]={0};
char szDateTime[2048]={0};
char szFormatEx[2048]={0};
char szWriteLog[4096]={0};
FILE *fpTraceLog = NULL ;
fpTraceLog = fopen(ARD0EVE_TRACELOG_FULL,"ab");
if (NULL == fpTraceLog)
{
return ;
}
tm *pobjTime = NULL;
time_t tnow = 0;
time(&tnow);
pobjTime = localtime(&tnow);
sprintf(szTmp,"%04d%s",pobjTime->tm_year+1900,"-");
strcat(szDateTime,szTmp);
memset(szTmp,0x00,sizeof(szTmp));
sprintf(szTmp,"%02d%s",pobjTime->tm_mon+1,"-");
strcat(szDateTime,szTmp);
memset(szTmp,0x00,sizeof(szTmp));
sprintf(szTmp,"%02d%s",pobjTime->tm_mday," ");
strcat(szDateTime,szTmp);
memset(szTmp,0x00,sizeof(szTmp));
sprintf(szTmp,"%02d%s",pobjTime->tm_hour,":");
strcat(szDateTime,szTmp);
memset(szTmp,0x00,sizeof(szTmp));
sprintf(szTmp,"%02d%s",pobjTime->tm_min,":");
strcat(szDateTime,szTmp);
memset(szTmp,0x00,sizeof(szTmp));
sprintf(szTmp,"%02d%s",pobjTime->tm_sec," ");
strcat(szDateTime,szTmp);
memset(szTmp,0x00,sizeof(szTmp));
strcat(szWriteLog,szDateTime);
va_list args;
va_start( args , szFormat );
_vsnprintf(szFormatEx,2048,szFormat,args);
va_end(args);
strcat(szWriteLog , szFormatEx);
fprintf(fpTraceLog,"%s\r\n",szWriteLog);
fflush(fpTraceLog);
fclose(fpTraceLog);
return ;
}
void main()
{
int i = 0;
for( ;i<=999;i++ ) arf0Eve_TraceLog ( "Log Test : %04d",i);
}
函数arf0Eve_TraceLog 在WINDOWS下测试通过,没有问题
但是在UNIX下用G++编译,出现一下的错误:
log.cpp: In function `void arf0Eve_TraceLog(const char *, ...)':
log.cpp:61: implicit declaration of function `int _vsnprintf(...)'
这是为什么阿?请高手来帮忙看看阿