首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux和Windows下定义数组的区别

在Linux和Windows下定义数组的区别
EN

Stack Overflow用户
提问于 2010-11-17 01:10:47
回答 4查看 320关注 0票数 1

下面是定义数组的简单代码。我注意到这段代码可以在Linux(OpenSue,gcc编译器)下编译和运行,但在Windows系统下不能运行。编译器给出了错误提示。有人知道原因吗?谢谢!

代码语言:javascript
复制
#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;
}
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-17 01:12:45

该代码不是有效的C++,因为C++不允许像您那样声明一个(堆栈分配的)大小可变的数组。这是因为C++使用其标准库中的std::vector类,提供了更好的声明动态大小数组的机制:

代码语言:javascript
复制
#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上使用的编译器)通过编译器扩展允许这样做。

票数 12
EN

Stack Overflow用户

发布于 2010-11-17 01:33:39

这实际上并不是Linux和Windows之间的区别。这是gcc和VC++女士的区别。

这种类型的代码是合法的,并且允许在C中使用(从C99开始)。然而,在C++中是不允许的--但是无论如何,在C++中,gcc提供了它作为一个扩展。在这一特定方面,MS VC++试图更严格地遵循(C++)标准,并且不提供此特定扩展。

然而,如果你在Windows上运行gcc (例如,CygwinMinGW),你会得到与你目前在Linux上观察到的行为相同的行为。

正如@Konrad Rudolph已经指出的,在C++下处理这个问题的正确方法几乎肯定是从使用数组切换到使用向量。

票数 2
EN

Stack Overflow用户

发布于 2010-11-17 01:13:07

可变长度数组(例如int ar[N];)在C++中是不允许的,但GCC无论如何都可以做到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4196882

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档