【问题标题】:Pass along arguments of varargs functions [duplicate]传递可变参数函数的参数[重复]
【发布时间】:2017-07-05 06:41:55
【问题描述】:

说我要实现一个功能

void myprintf(const char* format, ...){
   printf("Hello world!\n"),
   printf(format, ...);
}

即我想将可变参数列表传递给 printf。有什么方便的方法吗?

【问题讨论】:

标签: c


【解决方案1】:

没有。但是printf 系列中的库函数提供了一个vprintf varaint,它接受va_list 作为参数而不是省略号。如果您碰巧正在编写自己的变量参数函数,那么提供这样的变体实际上是一种很好的做法。

你的包装器会是这样的:

void myprintf(const char* format, ...){
   printf("Hello world!\n"),
   va_list args;
   va_start(args, format);
   vprintf(format, args);
   va_end(args);
}

【讨论】:

    【解决方案2】:

    在预处理器的帮助下:

    #include <stdio.h>
    
    #define myprintf(...) \
    do { \
       printf("Hello world!\n"), \
       printf(__VA_ARGS__); \
    } while (0)
    
    int main(void)
    {    
        myprintf("%s %d\n", "Hello", 1);
        return 0;
    }
    

    【讨论】:

    • 你得到了我的投票,但我仍然真的不喜欢这种思路会导致...
    • 谢谢@StoryTeller,我同意也更喜欢va_list
    • 这很酷,但我不是很明白 :) while(0)?
    • @embedded_crysis,它是一个多语句操作:stackoverflow.com/q/257418/1606345
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2014-10-20
    • 2015-09-26
    • 1970-01-01
    • 2015-09-22
    • 2023-01-24
    • 2015-12-13
    相关资源
    最近更新 更多