int testError(int i, ...);
如果这样调用「 testError(1, 2);」。那么语句「 va_start(arg_ptr, i); 」初始化后arg_ptr指向 ... 部分的参数表。
如果这样调用「 testError(1);」呢? ... 部分的参数表是空的,那么语句「 va_start(arg_ptr, i); 」初始化后arg_ptr是指向?
C99标准里并没有给va_start()初始化后arg_ptr的值作明确定义,只说:The va_start macro initializes ap for subsequent use by va_arg and va_end.
MSDN上也没有指明可变部分的参数表为空时arg_ptr是指向什么。
而实际运行时在win2000环境下arg_ptr是个空指针,winXP环境下arg_ptr是个指向随机的内存。