传递和使用可变数量的参数在C中起作用

Bri*_*ian 4 c

我不明白为什么这不打印"这是一个测试42",就像我期待的那样?

  1 #include <stdio.h>
  2 #include <stdarg.h>
  3 
  4 #define ME(x)   blah x
  5 
  6 void blah(const char *fmt, ...)
  7 {
  8         va_list arg;
  9 
 10         va_start(arg, fmt);
 11         printf(fmt, arg);
 12         va_end(arg);
 13 }
 14 
 15 int main()
 16 {
 17         ME(("this is a test %d\n", 42));
 18 
 19         return 0;
 20 }
Run Code Online (Sandbox Code Playgroud)

相反,它是这样的:

$ gcc blah.c
$ ./a.out
this is a test 1606416656 
Run Code Online (Sandbox Code Playgroud)

Uli*_*ter 8

您想要调用vprintf()而不是printf().