Compiladores para proyectos de Smart Device
Actualización: noviembre 2007
Visual Studio incluye los compiladores siguientes destinados a los microprocesadores que se utilizan en dispositivos inteligentes:
Compilador de C/C++ de 32 bits utilizado para compilar y vincular programas de C++ y ARM C de 32 bits.
Compilador de C/C++ de 32 bits utilizado para compilar y vincular programas de C++ y Renesas SH-4 C de 32 bits.
Compilador de C/C++ utilizado para compilar y vincular programas de C++, MIPS16, MIPS32 y MIPS64 C.
Los compiladores generan archivos objeto en formato de archivo objeto común. Los programas de compilador compilan cada archivo de código fuente y, salvo que se especifique lo contrario, un archivo objeto para cada compilación. Los compiladores incluyen las opciones enumeradas en la línea de comandos (CL), en la variable de entorno de CL y en los archivos de respuesta especificados.
El compilador de Visual Studio establece diferencias entre el escritorio y los dispositivos
Diferencia |
Description |
---|---|
Ficha Avanzadas, lista desplegable Compilar para arquitectura. |
Proyectos de dispositivos en Propiedades del proyecto, ficha Avanzadas, lista desplegable Compilar para arquitectura, en el nodo C/C++, en el cuadro desplegable aparecen las siguientes opciones: Arm4 (/QRarch4), ARM5 (/QRarch5), Arm4t (/QRarch4t), ARM5t (/QRarch5t). |
Ficha Avanzadas, lista desplegable ARM Thumb y ARM Interwork. |
Proyectos de dispositivos en Propiedades del proyecto, ficha Avanzadas, lista desplegable ARM Thumb y ARM Interwork en el nodo C/C++, en el cuadro desplegable aparecen las siguientes opciones: Sí (/QRInterwork-return) y la opción No. Cuando se establece a sí, el compilador genera código thunk para el código ARM interwork de 16 y 32 bits. |
Ficha Avanzadas, lista desplegable Habilitar emulación de punto flotante. |
Proyectos de dispositivos en Propiedades del proyecto, ficha Avanzadas, lista desplegable Habilitar emulación de punto flotante en el nodo C/C++, en el cuadro desplegable aparecen las siguientes opciones: Sí y No. Cuando se establece en Sí, el compilador habilita operaciones de emulación de punto flotante. |
Ficha Preprocesador, cuadro de texto de entrada Definicionesdel preprocesador. |
Proyectos de dispositivos en Propiedades del proyecto, ficha Preprocesador, cuadro de texto de entrada Definicionesdel preprocesador, en el nodo C/C++, hay una casilla para Heredar de primario o valores pred. del proyecto y un botón Macros para agregar macros. |
Ficha Optimización, lista desplegable Definicionesde coherencia de punto flotante. |
Proyectos de dispositivos en Propiedades del proyecto, ficha Optimización, lista desplegable Definicionesde coherencia de punto flotante, en el nodo C/C++, aparece una lista desplegable para seleccionar Coherencia predeterminada o Mejorar coherencia (/Op). |
Para obtener más información, vea Opciones del compilador, por orden alfabético.
Cambios respecto a versiones anteriores de Visual Studio
Cambios del compilador entre Visual Studio 2003 y Visual Studio 2005
Debido a que los compiladores de dispositivos se basan en el compilador de Visual C++ para equipos de escritorio, examinar las diferencias entre versiones de compiladores de escritorio proporciona una buena imagen de los cambios existentes entre los compiladores de dispositivos de eMbedded Visual C++ y los compiladores de dispositivos de Visual Studio 2005. Para obtener información acerca de los cambios entre Visual Studio 6.0 y Visual Studio 2003, vea Compatibility and Compliance Issues in Visual C++.
En la tabla siguiente se resumen los cambios de compilador entre Visual Studio 2003 y Visual Studio 2005.
Problema |
Descripción |
---|---|
Los punteros a miembros requieren ahora el nombre completo, el operador de dirección (&) y paréntesis en las llamadas a funciones. |
El código que se escribió para versiones anteriores del compilador que sólo utilizaba el nombre del método generará ahora el Error del compilador C3867 o la Advertencia del compilador C4867. La norma ISO C++ requiere este diagnóstico. Para crear un puntero a una función miembro, se deben utilizar el operador de dirección (&) y el nombre completo del método. Pueden producirse errores si no se requieren el operador & y el nombre completo del método, o si se omiten paréntesis en las llamadas a funciones. El uso del nombre de la función sin una lista de argumentos produce un puntero a función que se puede convertir a varios tipos. Por consiguiente, el código puede dar lugar a un comportamiento inesperado en tiempo de ejecución. |
Una clase debe ser accesible a una declaración friend. |
Los compiladores anteriores de Visual C++ habilitaban una declaración friend a una clase que no era accesible en el ámbito de la clase que contenía la declaración. En Visual C++ 2005, estas circunstancias harán que el compilador genere el Error del compilador C2248. Para solucionarlo, se debe cambiar la accesibilidad de la clase que se especifica en la declaración friend. Este cambio se ha realizado para cumplir los requisitos de la norma ISO C++. |
No se permite la especialización explícita como constructor de copias ni como operador de asignación de copia. |
El código que depende de una especialización explícita de plantilla para un constructor de copias o un operador de asignación de copia generará ahora el Error del compilador C2299. La norma ISO C++ no permite este uso. Este cambio se ha realizado por razones de compatibilidad y para mejorar la portabilidad del código. |
Una plantilla de clase no especializada no se puede utilizar como argumento de plantilla en una lista de clases base. |
El uso del nombre de una clase de plantilla no especializada en la lista de clases base para una definición de clase producirá el Error del compilador C3203. No se puede utilizar el nombre de una clase de plantilla no especializada como parámetro de plantilla en una lista de clases base. Se deben agregar explícitamente los parámetros de tipo de plantilla al nombre de clase de plantilla cuando se utilice como parámetro de plantilla en una lista de clases base. Este cambio se ha realizado por razones de compatibilidad y para mejorar la portabilidad del código. |
Ya no se permite una declaración using de tipo anidado. |
El código que tiene una declaración using a un tipo anidado generará ahora el Error del compilador C2885. Para solucionarlo, es necesario utilizar referencias completas a tipos anidados, colocar el tipo en un espacio de nombres o crear un objeto typedef. Este cambio se ha realizado por razones de compatibilidad y para mejorar la portabilidad del código. |
Se quita la opción del compilador /YX. |
La opción del compilador /YX generaba compatibilidad automática de los encabezados precompilados. Se utilizaba de manera predeterminada desde el entorno de desarrollo. Si se quita la opción del compilador /YXde las configuraciones de compilación, puede que las compilaciones sean más rápidas. Además de los problemas de rendimiento, la opción del compilador /YX introduce la posibilidad de un comportamiento inesperado en tiempo de ejecución. Es preferible utilizar /Yc, Crear archivo de encabezado precompilado, y /Yu,Utilizar archivo de encabezado precompilado, ya que proporciona un mayor control sobre la forma de utilizar los encabezados precompilados. |
Se quitan las opciones del compilador /Oa y /Ow. |
Se han quitado las opciones del compilador /Oa y /Ow, y se omitirán. Utilice los modificadores noalias, restrict o declspec para especificar cómo realiza el compilador el efecto escalonado (aliasing). |
Se quita la opción del compilador /Op. |
Se ha quitado la opción del compilador /Op. Se puede utilizar /fp:precise en su lugar. |
Se han quitado las opciones del compilador /ML y /MLd. |
Visual C++ 2005 ya no proporciona compatibilidad con la biblioteca CRT vinculada estáticamente de un único subproceso. Se puede utilizar /MT y /MTd en su lugar. |
Se han quitado las opciones del compilador /G3, /G4, /G5, /G6, /G7 y /GB. |
El compilador ahora utiliza un modelo mixto que intenta crear el mejor archivo de resultados para todas las arquitecturas. |
Se ha quitado la opción del compilador /Gf. |
Puede utilizar /GF en su lugar. /GF coloca las cadenas agrupadas en una sección de sólo lectura, que es más segura que la sección de escritura donde las agrega /Gf. |
Ahora, la opción predeterminada del compilador es /GS. |
La comprobación del desbordamiento del búfer está activada de manera predeterminada. Puede desactivar la comprobación de la saturación del búfer con /GS-. |
La variable /Zc:wchar_t está ahora activada de manera predeterminada. |
Este es el comportamiento conforme a la norma ISO C++: El valor predeterminado de una variable wchar_t será el tipo integrado en lugar de un entero corto sin signo. Este cambio interrumpirá la compatibilidad binaria cuando el código de cliente se vincule a bibliotecas que se compilaron sin /Zc:wchar_t. Se puede utilizar /Zc:wchar_t- para revertir al comportamiento anterior no conforme a la norma. Este cambio se ha introducido para crear código compatible de manera predeterminada. |
La variable /Zc:forScope está ahora activada de manera predeterminada. |
Este es el comportamiento conforme a la norma ISO C++: El código que depende del uso de una variable declarada en un bucle for después de la finalización del ámbito del bucle for ya no se compilará. Se puede utilizar /Zc:forScope para revertir al comportamiento anterior no conforme a la norma. Este cambio se ha introducido para crear código compatible de manera predeterminada. |
Forzar la comprobación de parámetros para los atributos de Visual C++. |
El código que pasa atributos con nombre al constructor de atributos entre comillas cuando el tipo no es una cadena, y sin comillas cuando el tipo es una cadena, generará ahora el Error del compilador C2065 o la Advertencia del compilador (nivel 1) C4581. Anteriormente, todos los atributos del compilador se analizaban como cadenas y, si era necesario, el compilador insertaba las comillas que faltasen. La compatibilidad con atributos se ha mejorado al agregar la validación de comprobación de parámetros. Este cambio evitará que se produzca un comportamiento inesperado por pasar argumentos incorrectos a un constructor de atributos. |
El compilador no insertará el tipo int como tipo predeterminado en declaraciones. |
El código que omite el tipo en una declaración ya no tiene como tipo predeterminado int. El compilador generará la Advertencia del compilador C4430 o la Advertencia del compilador (nivel 4) C4431. La norma ISO C++ no admite un tipo int predeterminado y este cambio ayudará a garantizar que se obtiene el tipo especificado explícitamente. |
Para obtener más información, vea Cambios importantes en el compilador de Visual C++ 2005.