va_start 或 va_copy 应配合 va_end 使用
3.3.4 ID_incompleteVaMacros
可变参数列表相关的 va_start 或 va_copy 和 va_end 应在同一函数中使用,否则会导致标准未定义的行为。
示例:
int foo(int n, ...) {
va_list ap;
va_start(ap, n);
int sum = 0;
for (int i = 0; i < n; i++) {
sum += va_arg(ap, int);
}
return sum; // Non-compliant, missing ‘va_end(ap);’
}
应在函数返回前使用 va_end。
相关
依据
ISO/IEC 9899:1999 7.15.1.3(2)-undefined
ISO/IEC 9899:2011 7.16.1.3(2)-undefined