【问题标题】:Using vfprintf without a wrapper function?在没有包装函数的情况下使用 vfprintf?
【发布时间】:2011-09-16 23:51:27
【问题描述】:

我想用vfprintf(FILE * stream, const char * format, va_list arg) 替换fprintf(stderr, "Error occured with file %s\n", file); 中的fprintf 调用,因为fprintf 继承了膨胀。 是否可以使用 vfprintf 而不必为此编写包装函数,例如以某种方式创建 va_list 参数?

【问题讨论】:

  • fprintf 本身就是vfprintf 的一个非常薄的包装器,因此“fprintf 继承的膨胀”实际上是 vfprintf 之一。否则,您需要解释您认为膨胀的确切原因。
  • 我不知道,谢谢。我将我的代码与dietlibc 链接起来,它在编译printf 膨胀时会警告我:/opt/diet/lib-x86_64/libc.a(vfprintf.o): In function `vfprintf': (.text+0x2e): warning: warning: the printf functions add several kilobytes of bloat. 有什么解决方案可以减少膨胀并且没有警告?
  • 所指的“膨胀”来自整个 printf 家族,包括 vfprintf。避免它的唯一方法是根本不使用字符串格式化函数。

标签: c stderr stdio printf


【解决方案1】:

从上面的 cmets 看来,您实际上想完全避免使用 printf 系列函数。

在这种情况下,您可以使用以下方式:

fputs("Error occured with file ", stderr);
fputs(file, stderr);
fputc('\n', stderr);

【讨论】:

    猜你喜欢
    • 2021-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 2015-12-30
    • 2015-04-13
    相关资源
    最近更新 更多