Можно создать дубликат:
C/C++: Array size at run time w/o dynamic allocation is allowed?время выполнения Const определить размер массива
В следующем листинге, явно размер buf
определяется время выполнения постоянной j
. Как компилятор генерирует код для размещения хранилища в стеке (не зная значения j
во время компиляции)?
#include<iostream>
#include<cstdlib>
using namespace std;
int main(){
srandom(time(NULL));
int i = random();
cout<< "random number: "<<i<<endl;
if(i%2==0)
i=2;
else
i=1;
const int j=i;
char buf[j];
std::cout<<"size of buf array: "<<sizeof(buf)<<endl;
return 0;
}
Позвольте мне угадать ... вы компилируете это с помощью g ++? Это нестандартное расширение, позволяющее VLA C99. C++ не позволяет их. Скомпилируйте с -pedantic и/или -Wall – Praetorian
@ Prætorian: Yep yep –
'objdump -d -S my_file', если вы хотите увидеть код, сгенерированный компилятором для этой строки. Кроме того, с '-pedantic' (при условии g ++):' предупреждение: ISO C++ запрещает массив переменной длины 'buf'' – AusCBloke