Compilateurs pour les projets Smart Device
Mise à jour : novembre 2007
Visual Studio inclut les compilateurs suivants qui ciblent les microprocesseurs utilisés dans les applications de type Smart Device :
Compilateur C/C++ 32 bits utilisé pour compiler et lier des programmes ARM C 32 bits et C++.
Compilateur C/C++ 32 bits utilisé pour compiler et lier des programmes Renesas SH-4 C 32 bits et C++.
Compilateur C/C++ utilisé pour compiler et lier des programmes MIPS16, MIPS32, MIPS64 C et C++.
Les compilateurs génèrent des fichiers objets au format COFF (Common Object File Format). Les programmes du compilateur compilent chaque fichier source et, sauf indication contraire, un fichier objet pour chaque compilation. Les compilateurs incluent les options répertoriées à la ligne de commande, dans la variable d'environnement de la ligne de commande et tous les fichiers réponse spécifiés.
Différences du compilateur Visual Studio pour le bureau et les appareils
Différence |
Description |
---|---|
Liste déroulante Compilation pour une architecture de l'onglet Avancé. |
Les projets Smart Device situés sous le nœud C/C++ de la liste déroulante Compilation pour une architecture, sous l'onglet Avancé des Propriétés du projet, possèdent les options suivantes dans la liste déroulante : Arm4 (/QRarch4), ARM5 (/QRarch5), Arm4t (/QRarch4t), ARM5t (/QRarch5t). |
Liste déroulante Interfonctionnement des appels ARM et ARM-Thumb de l'onglet Avancé. |
Les projets Smart Device situés sous le nœud C/C++ de la liste déroulante Interfonctionnement des appels ARM et ARM-Thumb, sous l'onglet Avancé des Propriétés du projet, possèdent les options suivantes dans la liste déroulante : Oui (/QRInterwork-return) et Non. Lorsqu'il a la valeur Oui, le compilateur génère un code médiateur (thunking code) permettant d'assurer l'interfonctionnement du code ARM 16 et 32 bits. |
Liste déroulante Activer l'émulation de la virgule flottante de l'onglet Avancé. |
Les projets Smart Device situés sous le nœud C/C++ de la liste déroulante Activer l'émulation de la virgule flottante, sous l'onglet Avancé des Propriétés du projet, possèdent les options suivantes dans la zone de liste déroulante : Oui et Non. Lorsqu'il a la valeur Oui, le compilateur active l'émulation des opérations de virgule flottante. |
Zone de texte Définitions dupréprocesseur de l'onglet Préprocesseur. |
Les projets Smart Device situés sous le nœud C/C++ de la zone de texte Définitions dupréprocesseur, sous l'onglet Préprocesseur des Propriétés du projet, possèdent une case à cocher permettant d'Hériter des paramètres par défaut du parent ou du projet et un bouton Macros permettant d'ajouter des macros. |
Liste déroulante Cohérence en virgule flottanteDéfinitions de l'onglet Optimisation. |
Les projets Smart Device situés sous le nœud C/C++ de la liste déroulante Cohérence en virgule flottanteDéfinitions, sous l'onglet Optimisation des Propriétés du projet, possèdent une liste déroulante permettant de sélectionner Cohérence par défaut ou Améliorer la cohérence (/Op). |
Pour plus d'informations, consultez Options du compilateur classées par ordre alphabétique.
Modifications de versions antérieures de Visual Studio
Modifications du compilateur entre Visual Studio 2003 et Visual Studio 2005
Comme les compilateurs Smart Device reposent sur le compilateur Visual C++ de l'ordinateur de bureau, l'examen des différences entre les versions des compilateurs de bureau fournit une bonne représentation des changements entre les compilateurs Smart Device eMbedded Visual C++ et les compilateurs Smart Device Visual Studio 2005. Pour plus d'informations sur les modifications entre Visual Studio 6.0 et Visual Studio 2003, consultez Compatibility and Compliance Issues in Visual C++.
Le tableau suivant résume les modifications du compilateur entre Visual Studio 2003 et Visual Studio 2005.
Problème |
Description |
---|---|
Les pointeurs de membres nécessitent désormais un nom qualifié, un opérateur d'adresse (&) et des parenthèses dans les appels de fonction. |
Le code qui a été écrit pour les versions précédentes du compilateur où seul le nom de méthode était utilisé générera une erreur du compilateur C3867 ou un avertissement du compilateur C4867. Ce diagnostic est requis par la norme ISO C++. Pour créer un pointeur vers une fonction membre, l'opérateur d'adresse (&) et le nom qualifié complet de la méthode doivent être utilisés. Des erreurs peuvent résulter de l'absence de l'opérateur & et du nom qualifié complet de la méthode, ou de l'absence de parenthèses dans les appels de fonction. L'utilisation du nom de la fonction sans une liste d'arguments provoque un pointeur fonction qui est convertible en plusieurs types. Par conséquent, le code peut produire un comportement inattendu au moment de l'exécution. |
Une classe doit être accessible à une déclaration friend. |
Les compilateurs Visual C++ antérieurs activaient une déclaration friend pour une classe qui n'était pas accessible dans la portée de la classe qui contenait la déclaration. Dans Visual C++ 2005, le compilateur génère l'erreur de compilateur C2248 dans ces circonstances. Pour résoudre cette erreur, modifiez l'accessibilité de la classe qui est spécifiée dans la déclaration friend. Cette modification a été apportée pour se conformer à la norme ISO C++. |
La spécialisation explicite n'est pas autorisée comme un constructeur de copie et opérateur d'assignation de copie. |
Le code qui dépend d'une spécialisation explicite de modèle pour un constructeur de copie ou un opérateur d'assignation de copie générera maintenant l'erreur de compilateur C2299. La norme ISO C++ n'autorise pas cette utilisation. Cette modification a été apportée pour les raisons de conformité, pour améliorer la portabilité de code. |
Un modèle de classe non spécialisé ne peut pas être utilisé comme argument template dans une liste de classes de base. |
L'utilisation d'un nom de classe de modèle non spécialisé dans la liste de classes de base pour une définition de classe entraînera l'erreur de compilateur C3203. L'utilisation d'un nom de classe de modèle non spécialisé comme paramètre de modèle dans une liste de classes de base n'est pas permise. Vous devez ajouter explicitement les paramètres de type de modèle au nom de classe de modèle lorsque vous l'utilisez comme paramètre de modèle dans une liste de classes de base. Cette modification a été apportée pour les raisons de conformité et pour améliorer la portabilité de code. |
Une déclaration using de type imbriqué n'est plus autorisée. |
Le code qui contient une déclaration using de type imbriqué générera maintenant l'erreur de compilateur C2885. Pour résoudre cette erreur, vous devez utiliser un nom qualifié complet pour les références à des types imbriqués, placer le type dans un espace de noms ou créer un typedef. Cette modification a été apportée pour les raisons de conformité, pour améliorer la portabilité de code. |
L'option du compilateur /YX est supprimée. |
L'option du compilateur /YX a généré une prise en charge automatique d'en-têtes précompilés. Elle a été utilisée par défaut dans l'environnement de développement. Si vous supprimez l'option du compilateur /YX de vos configurations de génération, les générations peuvent être plus rapides. En plus des problèmes de performances, l'option du compilateur /YX introduit le risque d'un comportement inattendu au moment de l'exécution. Il est préférable d'utiliser les options /Yc (Créer un en-tête précompilé) et /Yu(Utiliser un en-tête précompilé) qui vous offrent plus de contrôle sur l'utilisation des en-têtes précompilés. |
Les options du compilateur /Oa et /Ow sont supprimées. |
Les options du compilateur /Oa et /Ow ont été supprimées et seront ignorées. Utilisez les modificateurs noalias, restrict ou declspec pour spécifier la façon dont le compilateur effectue le crénelage. |
L'option du compilateur /Op est supprimée. |
L'option du compilateur /Op a été supprimée. Vous pouvez utiliser /fp:precise à la place. |
Les options du compilateur /ML et /MLd ont été supprimées. |
Visual C++ 2005 n'assure plus la prise en charge de la bibliothèque CRT monothread liée statiquement. Vous pouvez utiliser /MT et /MTd à la place. |
Les options du compilateur /G3, /G4, /G5, /G6, /G7 et /GB ont été supprimées. |
Le compilateur utilise maintenant un modèle fusionné qui essaie de créer le meilleur fichier de sortie pour toutes les architectures. |
L'option du compilateur /Gf a été supprimée. |
Vous pouvez utiliser /GF à la place. /GF place les chaînes regroupées dans une section en lecture seule, plus sûre que la section accessible en écriture où /Gf les a ajoutées. |
L'option du compilateur /GS est activée par défaut. |
Le contrôle du dépassement de capacité de la mémoire tampon est maintenant activé par défaut. Vous pouvez désactiver le contrôle du dépassement de mémoire tampon avec /GS-. |
La variable /Zc:wchar_t est maintenant activée par défaut. |
Il s'agit d'un comportement standard ISO C++ : une variable wchar_t prend par défaut le type intégré au lieu d'un entier non signé court. Cette modification interrompt la compatibilité binaire lorsque le code client est lié aux bibliothèques qui ont été compilées sans /Zc:wchar_t. Vous pouvez utiliser /Zc:wchar_t- pour rétablir l'ancien comportement non standard. Cette modification a été introduite pour créer un code conforme par défaut. |
La variable /Zc:forScope est maintenant activée par défaut. |
Il s'agit d'un comportement de la norme ISO C++ : le code qui dépend de l'utilisation d'une variable déclarée dans une boucle for après la fin de la portée de la boucle for ne pourra plus désormais être compilé. Vous pouvez utiliser /Zc:forScope pour rétablir l'ancien comportement non standard. Cette modification a été introduite pour créer un code conforme par défaut. |
Application de la vérification des paramètres pour les attributs Visual C++. |
Le code qui passe des attributs nommés au constructeur d'attribut entre guillemets lorsque le type n'est pas une chaîne et sans guillemets lorsque le type est une chaîne générera maintenant une erreur de compilateur C2065 ou un avertissement du compilateur (niveau 1) C4581. Auparavant, tous les attributs de compilateur étaient analysés en tant que chaînes, et le compilateur insérait les guillemets manquants le cas échéant. La prise en charge des attributs a été améliorée par l'ajout de la validation de la vérification des paramètres. Cette modification empêchera un comportement inattendu à cause des arguments inexacts qui sont passés à un constructeur d'attribut. |
Le compilateur n'injectera pas le type int comme type par défaut dans les déclarations. |
Le code dont le type est manquant dans une déclaration ne prendra plus par défaut le type int. Le compilateur générera un avertissement du compilateur C4430 ou un avertissement du compilateur (niveau 4) C4431. La norme ISO C++ ne prend pas en charge un type int par défaut et cette modification permet de garantir que vous obtenez le type que vous avez spécifié explicitement. |
Pour plus d'informations, consultez Modifications avec rupture dans le compilateur Visual C++ 2005.