请勿使用 C 样式变量参数(f.55)。
注解
有关详细信息,请参阅 C++ Core Guidelines 中的 F.55:请勿使用 va_arg 参数。
此检查会针对 va_list、va_start、va_arg 和 va_end 的所有使用发出警告,阻止使用 C 样式变量参数。 C 样式变量参数不安全,因为它们要求程序员假定这些参数都以正确的类型传递和读取。
警告 C26826 自 Visual Studio 2022 版本 17.1 起可用。
示例
int sum(int n, ...) {
va_list l; // C26826 Don't use C-style variable arguments
va_start(l, n); // C26826 Don't use C-style variable arguments
int s = 0;
for (int i = 0; i < n; ++i) {
// BAD, assumes the variable arguments will be passed as ints
s += va_arg(l, int); // C26826 Don't use C-style variable arguments
}
va_end(l); // C26826 Don't use C-style variable arguments
return s;
}
int main() {
sum(2, 1, 2, 3); // ok
sum(2, 1.5, 3.14159, 2.71828); // BAD, undefined
}
C 样式变量参数的替代项包括:
- 函数重载
- 可变参数模板
-
std::variant参数 std::initializer_list