MinGW GCC compiles a faulty code without warning or error
Can you explain to me why doesn't MingW GCC produce warning in this code:
int main()
{
int num;
int people[ num ];
cout << people[ 0 ];
cin >> num;
}
But here, I only replaced the last st开发者_StackOverflowatement with num = 1
and now there is a warning...
int main()
{
int num;
int people[ num ]; //warning: 'num is used uninitialized..'
cout << people[ 0 ];
num = 1;
}
I think because you are only using the first element, it optimizes out the num in the first example. It just creates a single element array. In the second case since you actually use the num, it gives the error
This code:
#include <iostream>
using namespace std;
int main()
{
int num;
int people[ num ];
cout << people[ 0 ];
cin >> num;
}
will only produce an error (in fact a warning) in g++ if the -pedantic
flag is used. The warning is:
ISO C++ forbids variable length array 'people'
which is correct. The use of variable length arrays is a GCC extension, which is turned off by -pedantic
. Note that successful compilation with -std=whatever
does not guarantee your code complies with that standard - the -std
flag is used to turn features on, not disable them.
精彩评论