C26826
Não use argumentos de variável de estilo C (f. 55).
Para obter mais informações, consulte F. 55: não use va_arg
argumentos na diretrizes principais do C++.
Comentários
Essa verificação avisa sobre todos os usos de va_list
, va_start
va_arg
, e va_end
, discouraging o uso de argumentos de variáveis de estilo C. Argumentos de variáveis de estilo C não são seguros porque exigem que o programador assuma que os argumentos são todos passados e lidos com os tipos corretos.
o aviso C26826 está disponível a partir do Visual Studio 2022 versão 17,1.
Exemplo
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
}
Alternativas para argumentos de variáveis em estilo C incluem:
- sobrecarga de função
- modelos de Variadic
std::variant
argumentosstd::initializer_list