免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2702 | 回复: 9
打印 上一主题 下一主题

[C++] 请教:如何在c++中实现 vprintf的功能 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-03-23 14:08 |只看该作者 |倒序浏览
请教:

如果不用extern "C"的方法,如何在c++中实现 vprintf的功能

如果能有使用g++编译通过的例子就更好了。
在vc6中,因为vc6本身是一个完全对c进行工程妥协的工具,它对c的支持非常好,似乎是对于需要extern "C"的库,全部自动转换了。所以不存在这样的问题。msdn里面就有使用vprintf的例子。

但是如果用g++应该怎么办呢

论坛徽章:
0
2 [报告]
发表于 2004-03-23 20:13 |只看该作者

请教:如何在c++中实现 vprintf的功能

试一试字符串流
头文件 sstream
std:stringstream str;
str<<整数<<字符<<字符串;

std::cout<<str.str()<<std::endl
可以流格式化
详细可以查一下相关资料,很好用,很方便

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2004-03-23 20:27 |只看该作者

请教:如何在c++中实现 vprintf的功能

你可以一样使用它呀。

论坛徽章:
0
4 [报告]
发表于 2004-03-24 09:42 |只看该作者

请教:如何在c++中实现 vprintf的功能

查了一下资料,发现我说的问题不正确。

我实际上想问的是,c++中怎么样才能支持
funcion(arg1, arg2, ...)
这样的可变参数序列?

我写了这样一个程序,编译时出错。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2004-03-24 10:01 |只看该作者

请教:如何在c++中实现 vprintf的功能

你就使用vprintf不行吗?

论坛徽章:
0
6 [报告]
发表于 2004-03-24 10:33 |只看该作者

请教:如何在c++中实现 vprintf的功能

下面这段程序就无法编译。

这段程序是 Richard Stevens在apue中使用的通用日志处理程序。他使用可变长参数,来打印程序中的日志信息。

vprintf是可以直接使用的。但是无法实现可变长参数。


  1. // 与系统相关的非致命的错误信息
  2. void
  3. log_ret(const char *fmt, ...)
  4. {
  5.    va_list     ap;

  6.    va_start(ap, fmt);
  7.    log_doit(1, LOG_ERR, fmt, ap);
  8.    va_end(ap);

  9.    return;
  10. }

复制代码


  1. // 写日志信息
  2. static void
  3. log_doit(int errnoflag, int priority, const char *fmt, va_list ap)
  4.    // errnoflag: 为1:系统错误。 为0:非系统错误
  5.    // priority: 错误级别。syslog必须用。其它日志格式暂时不使用。
  6. {
  7.    static char sBuf[MAXLINE];
  8.    int   errno_save;

  9.    errno_save = errno;
  10.    vsprintf(sBuf, fmt, ap);

  11.    if (errnoflag)
  12.    {
  13.       sprintf(sBuf+strlen(sBuf), ": %s\n", strerror(errno_save));
  14.    }
  15.    else
  16.    {
  17.       strcat(sBuf, "\n");
  18.    }

  19.    fputs(sBuf, pfLog);
  20. }
复制代码

论坛徽章:
0
7 [报告]
发表于 2004-03-24 10:34 |只看该作者

请教:如何在c++中实现 vprintf的功能

主要问题是
log_ret无法编译通过

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
8 [报告]
发表于 2004-03-24 10:37 |只看该作者

请教:如何在c++中实现 vprintf的功能

报什么错误,贴上来。

论坛徽章:
0
9 [报告]
发表于 2004-03-24 12:56 |只看该作者

请教:如何在c++中实现 vprintf的功能

[quote]原帖由 "lenovo"]报什么错误,贴上来。[/quote 发表:


非常感谢lenovo版主耐心的看我的这个贴子。

现在问题已经解决。

原因如下:
我昨天使用的g++33,是200402xx版的。昨天晚上将它升级为20040308版。

因为没有精确的记录当时的环境,所以没有办法复现当时的结果。至少现在使用是完全正常的。

我另外一个关于g++33的问题,也是lenovo版主解决的。多谢您的帮助。

论坛徽章:
0
10 [报告]
发表于 2004-03-24 12:58 |只看该作者

请教:如何在c++中实现 vprintf的功能

昨天如果把源码贴出来就好了。我觉得源码有些冗长,就没有这样做。但是这样不利于解决问题。以后会注意的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP