2009-04-09 15 views
6

Últimamente estoy enfrentando los problemas que apuntan al compilador VC6.¿Es hora de decir adiós al compilador VC6?

Pocos de ellos son:

  1. Una función try-bloque no funciona. Related Q
  2. constante en la clase no funciona.
  3. __FUNCTION_ (macro para obtener el nombre de la función) no funciona
  4. La última incorporación es que no permite que las funciones de vacío que se pasan como parte de for_each.

El ejemplo siguiente no se está compilando con el compilador VC6. Dice "error C2562: '()': función 'void' que devuelve un valor". Parece que a VC6 no le gusta que las funciones vacías pasen a 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; 
} 

¿Ha tenido algún otro problema relacionado con VC6.0. ¿Alguna solución para resolver estos problemas? ¿O es hora de cambiar el compilador?

+3

De la misma manera: ¿Es hora de decir goobye a Commodore 64 Basic? VC6 es tecnología del siglo XX, superarlo. – MSalters

+0

¿Qué tan grande es el proyecto, cuánto tiempo hasta que lo envíe? –

+0

Pruebe STLPort, podría ser útil. –

Respuesta

36

Francamente me cuesta entender por qué no iba a comprar un ordenador moderno y cambiar a Visual Studio 2008.

VC6 tiene un STL deficiente, pobre cumplimiento de C++ estándar y GUI obsoleto.

No debe permitir que sus competidores utilicen mejores herramientas que usted.

+3

Algunos usuarios no tienen otra opción porque trabajan en general, corporaciones conservadoras que no siempre actúan en lo que creemos que es su mejor interés. Las empresas con grandes inversiones en código no las abandonan fácilmente. Algunos ejecutan Cobol en mainframes de entre 30 y 40 años. – duffymo

+0

Su proyecto heredado. ¡Necesito persuadir a mi gerente! –

+0

Tiene la opción de irse. –

3

VC6 no puede hacer mucho de cualquier tipo de C++ moderno. Recuerdo que traté de usar una de las bibliotecas de refuerzo hace mucho tiempo, como probablemente Graph, y estaba dando "ERROR DE COMPILADOR INTERNO" por todas partes, así que eventualmente lo dejé.

+0

Sería ICE para casi cualquier template-ish que arrojara. ¡Blech! ¡Buen viaje, digo! – Macke

2

Cambié de VC++ 6.0 a Code :: Blocks (que es FOSS) con g ++ hace unos meses y realmente no han mirado hacia atrás. Extraño un poco el depurador de VC++, ya que la implementación de gdb en CB no es para nada ingeniosa, pero eso es todo. Algunas cosas en el IDE funcionan mejor (finalización de código, información sobre herramientas, xalculación de dependencias) y el compilador es obviamente mucho mejor.

En cuanto a sus puntos, los bloques de prueba de función no son una característica ampliamente utilizada, y la mayoría de las personas piensan que son bastante inútiles. Y la macro __FUNCTION__ no es parte del estándar C++, por lo que no debe depender demasiado si la portabilidad es un problema.

1

A menos que tenga un programa grande para mantener, sí. ¡Cambia hoy!

Las versiones Express de VC++ son una descarga gratuita de Microsoft.

3

La respuesta obvia es sí, y ASAP. Tiene alternativas gratuitas como VC++ express y Code :: Blocks, si el costo es el problema. La molestia de resolver problemas de compatibilidad es IMO, no hay razón para no actualizar porque tendrá que hacerlo algún día de todos modos y solo se vuelve más difícil.

La única razón que veo para un posible obstáculo es si tiene un código MFC que será difícil/lento de transportar. En ese caso, no puede usar VC++ express (no es compatible con MFC) y debe realizar la inversión al menos para VS estándar. edición. Eso le costará alrededor de 300 euros (dependiendo del lugar donde viva).

1

Puedes aprender a vivir con las debilidades del VC6. Casi tiene cierto encanto retro en estos días.Hemos estado brindando repetidamente "solo un último lanzamiento de VC6" de algunas bibliotecas a un cliente durante años. Es difícil discutir con un cliente preparado para pagar el trabajo extra de respaldo y mantenimiento de una sucursal. Pero en algún momento, el costo para nosotros de respaldar las características más nuevas desarrolladas en los VCs más nuevos excederá el costo de actualizarse en su extremo (especialmente a medida que aumente la potencia e Intel TBB en la cabeza de la base de código). ¡O al menos espero que eso sea lo que sucederá! En el peor de los casos sucederá al igual que aparece el soporte escaso de C++ 0x y nos quedaremos atrapados soportando eso durante 10 años ...

0

La regla general parece ser que una nueva versión es una actualización y es por lo tanto vale la pena.

¡Sin embargo! tienes que elegir el momento adecuado para ello, hay tantos errores corregidos, pero debes ser consciente de los nuevos errores y variaciones del estándar.

Reserve tiempo para la actualización. La actualización de las versiones del compilador bien podría ser un proyecto en sí mismo, asegúrese de tener un código estable y buenas pruebas antes de realizar una actualización y cuando termine de probar que todavía funciona de la misma manera.

Es posible que se vea obligado a actualizar cuando comience a desarrollar para Vista, ya que VC6 no proporciona la firma de código fácilmente y la redistribución no tiene el formato que le gusta a Vista. (quiere al menos VC2K5)

0

¿Está actualizando el sistema operativo en el corto plazo? Cuando investigué sobre cómo mover nuestras aplicaciones a Vista, descubrí que Vista no admite oficialmente nada antes de VS 2005 (excepto VB 6), y tiene una lista de una página de posibles pequeños problemas con VS 2005 que pueden morder o no. . Recomendé demorar hasta que el VS 2008 SP1 estuviera disponible (es decir, cuando VS 2008 fuera realmente utilizable) y hacer primero el cambio de compilador.

Si el proyecto es especial para algunos clientes que solo lo utilizan en máquinas NT antiguas, es posible que desee mantenerlo en VS 6. Si lo está vendiendo para cualquier tipo de consumo general, necesitará haga que sea compatible con Vista en algún momento (o compatible con 7, o lo que sea), y tendrá que actualizar.

7

Bueno, aquí está la cosa. El compilador VC6 apesta. Sin embargo ... el IDE es bastante bueno.

VS2005 tiene un soporte de control de fuente mucho mejor. De lo contrario, es mucho más lento para depurar, tiene un panel de salida que decae exponencialmente al insertar líneas de salida (¿qué codificación de basura absoluta es eso?), El sistema de ayuda es mucho más lento y depura y continúa (posiblemente la mejor característica de Microsoft sobre otros IDEs) está considerablemente más roto.

.NET? Claro, VS20xx es el único camino a seguir. Sin embargo, para un cliente pequeño que se está quedando con VC6/MFC (para interfaces a sistemas integrados, etc.) realmente disfruto trabajando con VC6. Es simplemente RÁPIDO.

2008? Me gustaría ... pero lleva un tiempo para que mis clientes migren. Nadie lo ha hecho todavía.

6

¿Es hora de decir adiós al compilador VC6 ?

Sí.

1

Supongo que esta es la razón por la que tantas aplicaciones en Windows apestan porque la gente todavía usa VC6. Por qué meterse con la quiebra, nunca mantuvieron MFC o incluso Win32 cuando son wxWidgets y Qt4 mejor que MFC y usted puede incluso usar las adiciones gratuitas de Visual Studio 2005+

+0

Um. Porque el cliente nos paga dinero para hacerlo? – EvilTeach

2

No, era hora de di adiós a eso hace una década.Aquí hay algunas razones por las cuales:

  • No son libres, los compiladores compatibles con los estándares disponibles, tanto de Microsoft y otros
  • VC6 fue escrito antes de que el lenguaje C++ se ha normalizado, y no es en absoluto compatible con las normas. Especialmente las plantillas y la biblioteca estándar viven en un mundo propio, sin relación con la forma en que estas funciones realmente funcionan en ISO C++. El lenguaje que compila no es C++. Es un híbrido de C++ pre-estándar, extensiones de Microsoft, limitaciones de compilación y errores. Ninguno de los cuales es deseable.
  • Se sabe que VC6 genera código no válido en algunos casos. No solo compila un lenguaje casero, con errores y no estándar, también hace que las optimizaciones no válidas causen bloqueos o, en algunos casos, produce un ensamblaje defectuoso que simplemente no se puede ejecutar.

Está roto, y fue siempre roto. Fue diseñado para compilar un lenguaje que dejó de existir casi al mismo tiempo que el compilador fue reajustado (cuando el lenguaje estaba estandarizado), y falló incluso en esa tarea, con innumerables errores, algunos de los cuales se han corregido en la mitad -dozen paquetes de servicio que fueron lanzados. Pero no todos, y ni siquiera todos los críticos.

Por supuesto, la desventaja de esto es que su aplicación probablemente esté igual de rota. (No porque sean malos programadores, sino porque se dirige a un compilador roto. Se tiene que ser roto para ser aceptado por VC6)

portar a que un compilador compatible con los estándares es probable que sea mucho trabajo . No asuma que solo puede importar sus proyectos anteriores, haga clic en "compilar" y funcionará.

Así que si formas parte de un gran negocio que no puede simplemente tomarse un mes para cambiar los compiladores, es posible que tengas que portarlo como un proyecto paralelo, mientras que parte del equipo mantiene la versión VC6. No elimine VC6 hasta que haya portado todo correctamente y funcione.

Cuestiones relacionadas