2016-11-04 50 views
2

在我的大學腳本中寫道,我們不允許在運行時創建一個只在運行時才知道大小的本地數組。爲什麼我能夠創建僅在運行時已知的大小數組?

float x [size] [2];
這不起作用,因爲聲明的數組不能有運行時大小。嘗試載體:

來源:C++ expected constant expression

但是這個代碼在蘋果LLVM 8.0.0

#include <iostream> 

int main(){ 
    int i = 5; 

    int x; 
    std::cin >> x; 

    int array[x]; 

    for(int i = 0; i<x; ++i){ 
     std::cout << array[i] << "\n"; 
    } 

} 

編輯編譯:與正常工作。按預期打印垃圾。

提醒:這個程序並不意味着任何意義。

+1

這是一個非標準的編譯器擴展。如果你用'-pedantic-errors'編譯它應該拒絕它。 – Galik

回答

2

該功能被稱爲「可變長度數組」,並且是一個編譯器擴展;它不是標準的一部分。

如果用-pedantic編譯,鏘爲您提供了這樣的警告:

main.cpp:9:14: warning: variable length arrays are a C99 feature [-Wvla-extension] 
    int array[x]; 

,如果你需要你的代碼是便攜式的,不要使用此功能。

+0

它是一個*編譯器擴展*,或者是C99標準*的一部分*?我手頭沒有這個標準,Clang警告與答案主體相矛盾。 – Kroltan

+0

@Kroltan兩者。它是C++代碼的編譯器擴展,在C99中有效。 – TartanLlama

相關問題