MinGW GCC компилирует неисправный код без предупреждения или ошибки - PullRequest
6 голосов
/ 10 апреля 2011

Можете ли вы объяснить мне, почему 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 ]

2 голосов
/ 04 мая 2011

Я думаю, потому что вы используете только первый элемент, он оптимизирует число в первом примере. Он просто создает массив из одного элемента. Во втором случае, поскольку вы на самом деле используете num, выдается ошибка

1 голос
/ 04 мая 2011

Этот код:

#include <iostream>
using namespace std;

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

выдаст ошибку (фактически предупреждение) в g ++, если используется флаг -pedantic. Предупреждение:

ISO C++ forbids variable length array 'people'

что правильно. Использование массивов переменной длины является расширением GCC, которое отключено -pedantic. Обратите внимание, что успешная компиляция с -std=whatever не гарантирует, что ваш код соответствует этому стандарту - флаг - std используется для включения функций, а не их отключения.

...