2016-12-28 153 views
1

這是我的理解,C++編譯器不會允許您用變量初始化數組,但此程序編譯並在我的計算機上運行,​​爲什麼?爲什麼這個C++程序編譯?

// this should not compile because there is a variable in the array declaration 

#include <iostream> 

int main(){ 
    int x = 5; 
    int ar[x]; 
    printf("hello world\n"); 
} 
+1

您正在使用哪種編譯器?其中一些擴展名爲*可變長度數組。* – jaggedSpire

+0

@fred這意味着編譯器有其自己的語言擴展,允許使用VLA。你應該關閉它們以獲得編譯器錯誤消息。 –

回答

2

在C++中,可變長度數組是不合法的。 G ++允許將其作爲 「擴展」(因爲C允許),所以在G ++中可以這樣做。

進一步檢查此answer/answer

+1

注意:在C允許之前,g ++允許這個擴展 –

+0

@ M.M .:是的。感謝您指點。 – coderredoc

-3

該數組的大小可能不是一個變量。

+4

OP不想知道標準是否允許它們 - 它們*已經*知道它是不允許的。他們想知道編譯器爲什麼讓它們出現。 – jaggedSpire