Блог пользователя PavelKunyavskiy

Автор PavelKunyavskiy, 14 лет назад, По-русски
Пишу на MinGW.
Уже несколько раз за последнее время получаю от компилятора (с параметром -Wall) непонятные сообщения.

C:/Program Files/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_uninitialized.h: In member function `void std::vector<_Tp, _Alloc>::_M_fill_insert(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, size_t, const _Tp&) [with _Tp = std::vector<int, std::allocator<int> >, _Alloc = std::allocator<std::vector<int, std::allocator<int> > >]':
C:/Program Files/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_uninitialized.h:82: warning: '__cur' might be used uninitialized in this function
C:/Program Files/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../../include/c++/3.4.5/bits/stl_uninitialized.h:82: warning: '__cur' might be used uninitialized in this function

Получив вот такое в котрый раз решил спросить, знает ди кто-либо чем такое может быть вызванно.
  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А что тут неясно? В какой-то STL'ной функции что-то там не инициализировано,
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Неясно что с этим делать. Врядли стл написан с ошибками, которые он сам замечает.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Логично, чтобы библиотеки, которые входят в стандарт, компилировались с -Wall -Werror. Как минимум потому, что есть разработчики, у которых такие опции компиляции для своих проектов. И эти разработчики пользуются стандартными библиотеками.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Это, видимо, какой-то баг gcc 3.4.x. Я тоже часто его видел, когда использовал старый MinGW. Возможно, этот: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22207

Возможно, при этом баг был только в порте под винду (cygwin / mingw).

Таких предупреждений нет в gcc 4.x.
  • 14 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    говоря проще такие варнинги чтоит просто проигнрировать?
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      Лучше поставить другой gcc, или как-нибудь отключить этот конкретный warning руками.

      Просто если пытаться игнорировать, то на остальные ворнинги смотреть неудобно. А они могут быть полезны.
14 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
А где же каноничный минимальный кусок кода, на котором такое поведение воспроизводится?
  • 14 лет назад, # ^ |
      Проголосовать: нравится +3 Проголосовать: не нравится
    Например так.

    vector<vector<int> > g;
    int main(){
        int n;
        scanf("%d",&n);
        g.resize(n);
        return 0;
    }
    • 14 лет назад, # ^ |
        Проголосовать: нравится 0 Проголосовать: не нравится
      У меня gcc 3.4.2 из dev-cpp, варнингов нет.
      • 14 лет назад, # ^ |
          Проголосовать: нравится 0 Проголосовать: не нравится
        Использую Far. Версию MinGW сказать не смогу. Скачивал давно. на файлах где-то стоит 5.1.6 где-то  3.4.5 где-то 3.1.17.
        • 14 лет назад, # ^ |
            Проголосовать: нравится 0 Проголосовать: не нравится
          На gcc-g++ написанно 3.4.5
          • 14 лет назад, # ^ |
              Проголосовать: нравится 0 Проголосовать: не нравится
            Рекомендую всё-таки поставить gcc 4.x. Например, отсюда. Там инсталлятор, который ставит всё в пару кликов. А 4.4.1 — довольно свежая версия gcc. Дополнительный бонус в том, что Миша Мирзаянов недавно говорил, что эта версия используется и на саратовских серверах (то есть, вероятно, и на CodeForces).

            При переходе с 3.x — из заметного на олимпиадах — разве что убьются операторы <?= и >?=, немного поменяется поведение ворнингов, а также придётся вставить пару инклудов типа <algorithm>, которые раньше подключались автомагически через другие инклуды.