Chinaunix
标题:
请教:如何在c++中实现 vprintf的功能
[打印本页]
作者:
wangrujun
时间:
2004-03-23 14:08
标题:
请教:如何在c++中实现 vprintf的功能
请教:
如果不用extern "C"的方法,如何在c++中实现 vprintf的功能
如果能有使用g++编译通过的例子就更好了。
在vc6中,因为vc6本身是一个完全对c进行工程妥协的工具,它对c的支持非常好,似乎是对于需要extern "C"的库,全部自动转换了。所以不存在这样的问题。msdn里面就有使用vprintf的例子。
但是如果用g++应该怎么办呢
作者:
wjtmain
时间:
2004-03-23 20:13
标题:
请教:如何在c++中实现 vprintf的功能
试一试字符串流
头文件 sstream
std:
stringstream str;
str<<整数<<字符<<字符串;
std::cout<<str.str()<<std::endl
可以流格式化
详细可以查一下相关资料,很好用,很方便
作者:
lenovo
时间:
2004-03-23 20:27
标题:
请教:如何在c++中实现 vprintf的功能
你可以一样使用它呀。
作者:
wangrujun
时间:
2004-03-24 09:42
标题:
请教:如何在c++中实现 vprintf的功能
查了一下资料,发现我说的问题不正确。
我实际上想问的是,c++中怎么样才能支持
funcion(arg1, arg2, ...)
这样的可变参数序列?
我写了这样一个程序,编译时出错。
作者:
lenovo
时间:
2004-03-24 10:01
标题:
请教:如何在c++中实现 vprintf的功能
你就使用vprintf不行吗?
作者:
wangrujun
时间:
2004-03-24 10:33
标题:
请教:如何在c++中实现 vprintf的功能
下面这段程序就无法编译。
这段程序是 Richard Stevens在apue中使用的通用日志处理程序。他使用可变长参数,来打印程序中的日志信息。
vprintf是可以直接使用的。但是无法实现可变长参数。
// 与系统相关的非致命的错误信息
void
log_ret(const char *fmt, ...)
{
va_list ap;
va_start(ap, fmt);
log_doit(1, LOG_ERR, fmt, ap);
va_end(ap);
return;
}
复制代码
// 写日志信息
static void
log_doit(int errnoflag, int priority, const char *fmt, va_list ap)
// errnoflag: 为1:系统错误。 为0:非系统错误
// priority: 错误级别。syslog必须用。其它日志格式暂时不使用。
{
static char sBuf[MAXLINE];
int errno_save;
errno_save = errno;
vsprintf(sBuf, fmt, ap);
if (errnoflag)
{
sprintf(sBuf+strlen(sBuf), ": %s\n", strerror(errno_save));
}
else
{
strcat(sBuf, "\n");
}
fputs(sBuf, pfLog);
}
复制代码
作者:
wangrujun
时间:
2004-03-24 10:34
标题:
请教:如何在c++中实现 vprintf的功能
主要问题是
log_ret无法编译通过
作者:
lenovo
时间:
2004-03-24 10:37
标题:
请教:如何在c++中实现 vprintf的功能
报什么错误,贴上来。
作者:
wangrujun
时间:
2004-03-24 12:56
标题:
请教:如何在c++中实现 vprintf的功能
[quote]
原帖由 "lenovo"]报什么错误,贴上来。[/quote 发表:
非常感谢lenovo版主耐心的看我的这个贴子。
现在问题已经解决。
原因如下:
我昨天使用的g++33,是200402xx版的。昨天晚上将它升级为20040308版。
因为没有精确的记录当时的环境,所以没有办法复现当时的结果。至少现在使用是完全正常的。
我另外一个关于g++33的问题,也是lenovo版主解决的。多谢您的帮助。
作者:
wangrujun
时间:
2004-03-24 12:58
标题:
请教:如何在c++中实现 vprintf的功能
昨天如果把源码贴出来就好了。我觉得源码有些冗长,就没有这样做。但是这样不利于解决问题。以后会注意的。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2