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 ...