可能重複:
Variably modified array at file scope可變長度陣列(VLA)在C和C++
我對VLA和它的行爲,我需要澄清的一些概念。
AFIK因爲C99有可能VLA申報到本地範圍:
int main(int argc, char **argv)
{
// function 'main' scope
int size = 100;
int array[size];
return 0;
}
但它在全球範圍禁止:
const int global_size = 100;
int global_array[global_size]; // forbidden in C99, allowed in C++
int main(int argc, char **argv)
{
int local_size = 100;
int local_array[local_size];
return 0;
}
上面的代碼聲明瞭一個VLA在C99因爲const
修改不會創建編譯時值。在C++ global_size
中是編譯時的值,所以global_array
不會變成VLA。
我需要知道的是:我的推理是否正確?我所描述的行爲是正確的?
我也想知道:爲什麼全球範圍內的VLA是不允許的?在C和C++中都被禁止?數組在全局和局部範圍內行爲的原因有什麼不同?
讓我們假設全球的VLA是允許的。他們的(可變)大小何時實際定義? – cnicutar
@cnicutar ......就像所有的VLA一樣,在執行時間裏,就像其他的範圍一樣。我知道這不是答案,但我想知道爲什麼。 –
http://stackoverflow.com/a/5052083/174605 – coelhudo