Udostępnij za pośrednictwem


Ostrzeżenie C26826

Nie używaj argumentów zmiennych w stylu C (f.55).

Aby uzyskać więcej informacji, zobacz F.55: Nie używaj va_arg argumentów w wytycznych podstawowych języka C++.

Uwagi

Ta kontrola ostrzega przed wszystkimi użyciem argumentów va_listzmiennych w stylu C, va_start, va_argi va_end. Argumenty zmiennych w stylu C są niebezpieczne, ponieważ wymagają od programisty założenia, że wszystkie argumenty są przekazywane i odczytywane z poprawnymi typami.

Ostrzeżenie C26826 jest dostępne od wersji 17.1 programu Visual Studio 2022.

Przykład

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
}

Alternatywy dla argumentów zmiennych w stylu C obejmują:

  • przeciążanie funkcji
  • szablony wariadyczne
  • std::variant Argumenty
  • std::initializer_list