2016-11-04 53 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

相关问题