您能否向我解释为什么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;
}
答案 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
标志用于打开功能,而不是禁用它们。