c++ - c 语言可变参数?

 

问题描述:

既然 printf 原型是:printf(const char * restrict format, ...);那为什么不能printf(format, va_ptr)这样用呢?

#include <stdio.h>
#include <stdarg.h>

void foo(const char* format, ...) {
  va_list va_ptr;
  va_start(va_ptr, format);
  printf(format, va_ptr); // 为什么不能这样用呢?
  va_end(va_ptr);
}
int main()
{
    foo("%s, %d\n", "test", 100); //输出并不是:test 100

    return 0;
}

 

第 1 个答案:

接受 va_list 的时 vprintf:

        int vprintf(const char * restrict format, va_list arg);

__VA_ARGS__的展开是什么呢?... 和 __VA_ARGS__的区别是什么呢?直接使用printf(format, ....)不行吗?为什么还要重新定义下:#defi ...