g ++ и Clang относительно размера массива [дубликаты]

0

Я заметил, что этот код:

#include <iostream>
using namespace std;

int main () {
    int k;
    cin >> k;
    int n[k];
    for (int i = 0; i < k; i++)
        n[i] = i;

    for (int i = 0; i < k; i++)
        cout << n[i] << " ";
    return 0;
}

компилируется просто отлично. Может ли кто-нибудь прояснить это, потому что, насколько мне известно, статические массивы должны иметь постоянный размер.

Теги:

1 ответ

6
Лучший ответ

clang и gcc поддерживают массивы переменной длины в качестве расширения в C++, хотя это функция C99. Если вы скомпилируете флаг -pedantic они оба -pedantic предупреждение, например, это говорит clang:

warning: ISO C++ forbids variable length array 'n' [-Wvla]
 int n[k];
        ^

Вы можете превратить его в ошибку, используя флаг -pedantic-errors.

  • 0
    Спасибо, есть ли способ включить -pedantic по умолчанию, я только недавно переключился на clang?
  • 0
    Это будет зависеть от того, какой интерфейс вы используете. Я обычно использую командную строку, поэтому мне придется самому в этом разобраться.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню