UNIX下C++的可变参数的问题,大家都来看看阿

cloud_soft 2002-08-15 11:31:33
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(...)'

这是为什么阿?请高手来帮忙看看阿
...全文
130 4 打赏 收藏 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
pi1ot 2002-08-16
  • 打赏
  • 举报
回复
http://www.gnu.org/manual/
cloud_soft 2002-08-16
  • 打赏
  • 举报
回复
谢谢楼上的两位!
还有,谁知道哪里有unix下的c,c++的函数库的帮助阿:)
天外飞狐 2002-08-15
  • 打赏
  • 举报
回复
在windows下的函数和unix下的有些不同你注意一下。特别是在vc下编的
pi1ot 2002-08-15
  • 打赏
  • 举报
回复
不知道你用的是哪个C函数库,glibc没有_vsnprintf(),只有vsnprintf().
源码下载地址: https://pan.quark.cn/s/07e7935aff27 在Android应用开发过程中,`ImageView`作为一个基础组件被广泛运用,其主要功能是展示各种图像资源,这些资源可以来源于本地存储或通过网络获取。本文将详细阐述如何动态地变更`ImageView`所显示的图片内容,并借助自定义监听机制来监控和干预图片的加载流程。此类技术在应用开发中具有很高的实用价值,特别是在处理网络用户头像、商品展示图以及实时数据更新的场景下。 我们首先需要明确`ImageView`的基本操作方式。在Android平台,我们常通过`setImageResource()`、`setImageBitmap()`以及`setImageDrawable()`等函数来设定`ImageView`的图像内容。然而,这些方法主要适用于已加载至内存中的图像文件,对于网络图片,则需要借助更为复杂的处理逻辑。 在实现动态下载并更新`ImageView`中的图像时,我们普遍采用`AsyncTask`或`Loader`来执行后台任务,以此防止主线程被阻塞。本文将重点介绍自定义监听器的构建方法。自定义监听器能够让我们依据图片加载的进程或状态来执行特定的任务,例如显示加载进度指示器或处理加载失败的情况。 自定义监听器通常定义为一个接口,其中包含了若干个回调方法,例如`onStart()`、`onProgressUpdate()`、`onSuccess()`、`onError()`等。以下是一个示例接口定义: ```java public interface ImageDownloaderListener { void onStart(); void onProgress(int ...

70,040

社区成员

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

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