MinGW GCC编译错误的代码,没有警告或错误

时间:2011-04-10 17:36:18

标签: c++ g++ mingw

您能否向我解释为什么MingW GCC不会在此代码中发出警告:

int main()
{
    int num;
    int people[ num ];
    cout << people[ 0 ];
    cin >> num;
}

但是在这里,我只用num = 1替换了最后一个语句,现在有一个警告......

int main()
{
    int num;
    int people[ num ];  //warning: 'num is used uninitialized..'
    cout << people[ 0 ];
    num = 1;
}

2 个答案:

答案 0 :(得分:2)

我认为因为您只使用第一个元素,所以它会优化第一个示例中的num。它只是创建一个单元素数组。在第二种情况下,因为您实际使用num,它会给出错误

答案 1 :(得分:1)

此代码:

#include <iostream>
using namespace std;

int main()
{
    int num;
    int people[ num ];
    cout << people[ 0 ];
    cin >> num;
}
如果使用-pedantic标志,

只会在g ++中产生错误(实际上是警告)。警告是:

ISO C++ forbids variable length array 'people'

这是正确的。可变长度数组的使用是GCC扩展,由-pedantic关闭。请注意,使用-std=whatever成功编译并不能保证您的代码符合该标准 - std标志用于打开功能,而不是禁用它们。