下面是定义数组的简单代码。我注意到这段代码可以在Linux(OpenSue,gcc编译器)下编译和运行,但在Windows系统下不能运行。编译器给出了错误提示。有人知道原因吗?谢谢!
#include <iostream>
using namespace std;
int main()
{
int N;
cin>>N;
int ar[N];
ar[0]=0;
cout<<"ar[0]= "<<ar[0]<<endl;
return 0;
}发布于 2010-11-17 01:12:45
该代码不是有效的C++,因为C++不允许像您那样声明一个(堆栈分配的)大小可变的数组。这是因为C++使用其标准库中的std::vector类,提供了更好的声明动态大小数组的机制:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
int N;
cin >> N;
vector<int> ar(N);
ar[0] = 0;
cout << "ar[0] = " << ar[0] << endl;
return 0;
}默认情况下,g++ (您在Linux上使用的编译器)通过编译器扩展允许这样做。
发布于 2010-11-17 01:33:39
这实际上并不是Linux和Windows之间的区别。这是gcc和VC++女士的区别。
这种类型的代码是合法的,并且允许在C中使用(从C99开始)。然而,在C++中是不允许的--但是无论如何,在C++中,gcc提供了它作为一个扩展。在这一特定方面,MS VC++试图更严格地遵循(C++)标准,并且不提供此特定扩展。
然而,如果你在Windows上运行gcc (例如,Cygwin或MinGW),你会得到与你目前在Linux上观察到的行为相同的行为。
正如@Konrad Rudolph已经指出的,在C++下处理这个问题的正确方法几乎肯定是从使用数组切换到使用向量。
发布于 2010-11-17 01:13:07
可变长度数组(例如int ar[N];)在C++中是不允许的,但GCC无论如何都可以做到。
https://stackoverflow.com/questions/4196882
复制相似问题