Я заметил, что этот код:
#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;
}
компилируется просто отлично. Может ли кто-нибудь прояснить это, потому что, насколько мне известно, статические массивы должны иметь постоянный размер.
clang и gcc поддерживают массивы переменной длины в качестве расширения в C++, хотя это функция C99. Если вы скомпилируете флаг -pedantic
они оба -pedantic
предупреждение, например, это говорит clang
:
warning: ISO C++ forbids variable length array 'n' [-Wvla]
int n[k];
^
Вы можете превратить его в ошибку, используя флаг -pedantic-errors
.