Пора попрощаться с компилятором VC6? - PullRequest
6 голосов
/ 09 апреля 2009

В последнее время я сталкиваюсь с проблемами, которые указывают на компилятор VC6.

Немногие из них:

  1. Функция-try-block не работает. В связи с Q
  2. константа в классе не работает.
  3. __ FUNCTION_ (макрос для получения имени функции) не работает
  4. Последнее добавление - , оно не позволяет передавать пустые функции как часть for_each.

Приведенный ниже пример не компилируется с помощью компилятора VC6. Там написано "ошибка C2562: функция '()': 'void', возвращающая значение". Похоже, VC6 не нравится, когда void функции передаются в for_each.

class Temp
{
public:
    Temp(int i):m_ii(i)
    {}

    int getI() const
    {
        return m_ii;
    }

    void printWithVoid()
    {
        cout<< "i = "<<m_ii<<endl;

    }
    bool printWithBool()
    {
        cout<< "i = "<<m_ii<<endl;
        return true;
    }
private:
    int m_ii;
};

int main(void) 
{
    std::vector<Temp>  arrTempObjects;

    arrTempObjects.push_back(Temp(0));
    arrTempObjects.push_back(Temp(2));

    //Doesnot work, compiler error 
    std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithVoid));

    //Works
    std::for_each(arrTempObjects.begin(), arrTempObjects.end(), std::mem_fun_ref(&Temp::printWithBool));

    return 0;
}

Сталкивались ли вы с какими-либо другими проблемами, связанными с VC6.0. Любой обходной путь для решения этих проблем? Или пора менять компилятор?

Ответы [ 12 ]

36 голосов
/ 09 апреля 2009

Честно говоря, я не могу понять, почему вы не купили бы современный компьютер и не переключились на Visual Studio 2008.

VC6 имеет дефект STL, плохое соответствие стандарту C ++ и устаревший графический интерфейс.

Вы не должны позволять вашим конкурентам использовать лучшие инструменты, чем вы.

7 голосов
/ 15 апреля 2009

Ну, вот в чем дело. Компилятор VC6 отстой. Однако ... IDE довольно хорош.

VS2005 имеет гораздо лучшую поддержку контроля версий. В противном случае, это намного медленнее отладки, имеет дрянную панель вывода, которая экспоненциально затухает при вставке строк вывода (что это за абсолютное кодирование мусора?), Система помощи во много раз медленнее, отладка и продолжение (возможно, лучшая функция Microsoft по сравнению с другими IDE) значительно более сломан.

.NET? Конечно, VS20xx - единственный путь. Однако для одного маленького клиента, который придерживается VC6 / MFC (для интерфейсов со встроенными системами и т. Д.), Мне действительно нравится работать с VC6. Это просто БЫСТРО.

2008? Я бы хотел ... но мои клиенты мигрируют. Никто не имеет, пока.

6 голосов
/ 15 апреля 2009

Пора прощаться с VC6 компилятор?

Да.

3 голосов
/ 09 апреля 2009

Простой ответ - да, и как можно скорее. У вас есть бесплатные альтернативы, такие как VC ++ express и Code :: Blocks, если стоимость как в выпуске. Боль в решении проблем совместимости - это IMO без причины не обновлять, потому что вам все равно придется делать это когда-нибудь, и это только становится сложнее.

Единственная причина, по которой я вижу возможное препятствие, это наличие у вас кода MFC, который будет трудным / трудоемким для переноса. В этом случае вы не можете использовать VC ++ Express (без поддержки MFC), и вам нужно инвестировать хотя бы в VS std. издание. Это будет стоить вам около 300 евро (в зависимости от того, где вы живете).

3 голосов
/ 09 апреля 2009

VC6 не может сделать ничего из современного C ++. Я вспоминаю, что давным-давно пытался использовать одну из библиотек наддува, например, Graph, и она давала повсеместную «ОШИБКУ ВНУТРЕННЕГО КОМПИЛЕРА», так что в конце концов я добавил это.

2 голосов
/ 27 мая 2009

Нет, пора было прощаться с ним десять лет назад. Вот несколько причин, почему:

  • Доступны бесплатные, совместимые со стандартами компиляторы, как от Microsoft, так и от других
  • VC6 был написан до того, как язык C ++ был стандартизирован, и он далеко не соответствует стандартам. Особенно шаблоны и стандартная библиотека живут в своем собственном мире, без связи с тем, как эти функции на самом деле работают в ISO C ++. Язык, который он компилирует, не является C ++. Это гибрид стандартных стандартов C ++, расширений Microsoft, ограничений компилятора и ошибок. Ни то, ни другое не желательно.
  • Известно, что VC6 генерирует неверный код в некоторых случаях. Он не только компилирует самодельный, с ошибками и нестандартный язык, но также делает недопустимую оптимизацию, приводящую к сбоям, или в некоторых случаях фактически создает плохую сборку, которая просто не может быть выполнена.

Он сломан, и он был всегда сломан. Он был разработан для компиляции языка, который прекратил свое существование примерно в то же время, что и компилятор (когда язык был стандартизирован), и потерпел неудачу даже при этой задаче с бесчисленными ошибками, некоторые которых были исправлено в полдюжине пакетов обновлений, которые были выпущены. Но не все, и даже не все критические.

Конечно, недостатком этого является то, что ваше приложение, скорее всего, так же сломано. (не потому, что вы плохие программисты, а потому, что он нацелен на сломанный компилятор. У него есть , который нужно разбить, чтобы принять VC6)

Перенос этого на совместимый со стандартами компилятор, вероятно, будет большой работой. Не думайте, что вы можете просто импортировать ваши старые проекты, нажать «построить», и все заработает.

Так что, если вы являетесь частью большого бизнеса, который не может просто взять месяц на переключение компиляторов, вам, возможно, придется перенести его как побочный проект, пока часть команды поддерживает версию VC6. Не удаляйте VC6 до тех пор, пока вы все не перенесете успешно, и это работает.

2 голосов
/ 09 апреля 2009

Я перешел с VC ++ 6.0 на Code :: Blocks (который является FOSS) с g ++ несколько месяцев назад и на самом деле не оглядывался назад. Я немного скучаю по отладчику VC ++, так как реализация gdb в CB далеко не так хороша, но это все. Некоторые вещи в IDE работают лучше (завершение кода, всплывающие подсказки, вычисление зависимостей), и компилятор, очевидно, намного лучше.

Что касается ваших очков, блоки функциональных проб вряд ли являются широко используемой функцией, и большинство людей считают их довольно бесполезными. И макрос __FUNCTION__ не является частью стандарта C ++, поэтому вы не должны слишком сильно зависеть от него, если переносимость является проблемой.

1 голос
/ 21 апреля 2009

Наверное, поэтому так много приложений в Windows отстой, потому что люди все еще используют VC6. Зачем возиться с поломкой, никогда не поддерживать MFC или даже Win32, если их wxWidgets и Qt4 намного лучше, чем MFC, и вы даже можете использовать бесплатные дополнения Visual Studio 2005 +

1 голос
/ 09 апреля 2009

Вы можете научиться жить с недостатками VC6s. В наши дни он почти обладает определенным ретро-шармом. В течение многих лет мы неоднократно поставляли заказчику «только один последний выпуск VC6» некоторых библиотек. Трудно спорить с заказчиком, готовым заплатить за дополнительную работу бэкпорт и поддержание филиала. Но в какой-то момент стоимость для нас, чтобы поддержать новые функции, разработанные в более новых VCs, превысит стоимость их обновления в конце (особенно, когда повышение производительности и Intel TBB проникают в голову кодовой базы). Или, по крайней мере, я надеюсь, что так и будет! В худшем случае это произойдет, когда появится слабая поддержка C ++ 0x, и мы застрянем, поддерживая ее в течение 10 лет ...

1 голос
/ 09 апреля 2009

Если у вас нет большой программы для поддержки, да. Переключитесь сегодня!

Экспресс-версии VC ++ можно бесплатно загрузить с сайта Microsoft.

...