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_startva_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 argumentos
  • std::initializer_list