Options avancées du compilateur C++

De Appmethod Topics
Aller à : navigation, rechercher

Remonter à Options de projet du compilateur C++


Projet > Options > Compilateur C++ > Avancées

Utilisez cette boîte de dialogue pour définir les options de compilation avancées du compilateur C++.

Options Description

Cible, Appliquer, Enregistrer

Voir Options de la cible.

Eléments communs

Voir Eléments communs des pages Options de projet.


Options de l'assembleur

Options de l'assembleur Description Support du compilateur
bcc32 bcc64 bccosx bcciosarm bcciosarm64 bccaarm

Options de l'assembleur

Entrez les options d'assembleur supplémentaires (telles que -TX ou -T) pour le projet en cours. Transmet les options spécifiées à l'assembleur spécifié avec l'option Spécifier l'assembleur à utiliser ou l'assembleur par défaut (TASM32 dans Windows 32 bits).

YesC++11Feature.png

Compiler en .ASM, puis assembler en .OBJ

Demande au compilateur de générer d'abord un fichier .ASM à partir de votre code source C++ ou C. Le compilateur appelle ensuite TASM32 (ou l'assembleur spécifié par l'option Spécifier l'assembleur à utiliser) pour créer un fichier .OBJ à partir du fichier .ASM. Le fichier .ASM est ensuite supprimé.

La compilation de votre programme avec l'option -B échouera si votre code source C ou C++ déclare des variables statiques globales qui sont des mots clés de l'assembleur. Ceci s'explique par le fait que le compilateur ne fait pas précéder les variables statiques globales d'un caractère de soulignement (comme il le fait avec les autres variables). Les mots clés de l'assembleur vont donc générer des erreurs lorsque le code sera assemblé. La valeur par défaut est False.

YesC++11Feature.png

Spécifier l'assembleur à utiliser

Assemble les instructions en utilisant le nom de fichier spécifié comme assembleur. Le compilateur Windows 32 bits utilise TASM32 comme assembleur par défaut. Le bouton pop-up Points de suspension est décrit dans Eléments communs des pages Options de projet.

YesC++11Feature.png

Options Virgule flottante

Options Virgule flottante Description Support du compilateur
  bcc32     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

Corriger le défaut FDIV

Certains des premiers processeurs Pentium n'effectuent pas les divisions en virgule flottante avec précision. Bien que les risques de rencontrer ce problème soient faibles, ce commutateur insère le code qui émule la division en virgule flottante et assure un résultat correct. Cette option diminue les performances des instructions FDIV de votre programme. L'utilisation de cette option ne corrige que les instructions FDIV contenues dans les modules que vous compilez. La bibliothèque d'exécution contient aussi des instructions FDIV qui ne sont pas modifiées lors de la définition de ce commutateur. Pour corriger les bibliothèques d'exécution, vous devez les recompiler en utilisant ce commutateur.

Les fonctions suivantes utilisent les instructions FDIV en langage assembleur et ne seront pas corrigées si vous utilisez cette option :

acos, acosl, acos, asin, asinl, atan, atan2, atan2l, atanl, cos, cosh, coshl, cosl, exp, expl, fmod, fmodl, pow, pow10, pow10l, powl, sin, sinh, sinhl, sinl, tan, tanh, tanhl, tanl

De plus, ce commutateur ne corrige pas les fonctions qui convertissent un nombre en virgule flottante en chaîne et vice versa (comme printf ou scanf).
La valeur par défaut est False.

YesC++11Feature.png
YesC++11Feature.png

Virgule flottante rapide

Les opérations en virgule flottante sont optimisées sans tenir compte des conversions de types, implicites ou explicites. Il en résulte des temps de réponse parfois plus rapides qu'en mode d'exploitation ANSI.

Le but de cette option est de permettre certaines optimisations techniquement contraires à l'usage correct de la sémantique C.

double x; x = (float) (3.5*x);

x est multiplié par 3.5, donne un double qui sera tronqué pour cause de précision flottante, puis stocké en x en tant que double. Par contre, avec les opérations en virgule flottante rapides, le double long est directement converti en double. Comme très peu de programmes risquent de souffrir de la perte de précision résultant de ce passage par un type virgule flottante plus court, l'option Virgule flottante rapide est activée par défaut.

Quand cette option est désactivée , le compilateur respecte strictement les règles ANSI de conversion des nombres à virgule flottante.
La valeur par défaut est True.

YesC++11Feature.png
YesC++11Feature.png

Comparaisons en virgule flottante silencieuses

Utilise l'instruction en virgule flottante silencieuse (FUCOMP).

La valeur par défaut est True.

YesC++11Feature.png
YesC++11Feature.png

Autres options

Autres options Description Support du compilateur
     bcc32          bcc64         bccosx         bcciosarm         bcciosarm64         bccaarm    

Autres options à transmettre au compilateur

Entrez les options de compilation supplémentaires que vous souhaitez ajouter pour le projet en cours.

YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png
YesC++11Feature.png

Page de code

Définit le jeu de caractères texte par défaut qui est utilisé dans le code source ANSI si le code source ne contient pas un BOM (byte order mark).

Active la prise en charge des pages de codes définies par l'utilisateur. Son usage premier est d'indiquer au compilateur comment analyser et convertir les chaînes de caractères multi-octets (MBCS, Multi-Byte Character Strings).

Dans le champ d'entrée, vous pouvez spécifier l'un des éléments suivants :

  • Le numéro de page de code (EN) réel. Par exemple :
    • 1250 pour Européen
    • 932 pour Japonais
  • Les identificateurs de texte pour les encodages de page de code, tels que UTF8 (EN), UTF32 ou SJIS (représentant Shift-JIS pour la langue Japonais)

Par exemple, si vous spécifiez 65001 ou UTF8 pour l'option -CP, le compilateur prend en charge l'encodage UTF8 pour le code source sans BOM.

Il y a deux zones distinctes où les pages de codes sont utilisées :

  • Constantes chaîne, commentaires, directives #error et #pragma
Pour les chaînes MBCS appartenant à cet ensemble, vous devez spécifier la page de code appropriée en appelant la fonction API de Windows IsDBCSLeadByteEx. En utilisant cette fonction, spécifiez la page de code permettant d'analyser correctement les chaînes MBCS dans une langue locale particulière (par exemple, cela active le compilateur pour analyser correctement les barres obliques inversées dans les octets de fin MBCS).
  • Constantes chaînes caractère larges
Pour les chaînes MBCS appartenant à cet ensemble (constantes chaîne à caractères étendus), spécifiez la page de code appropriée pour convertir les chaînes MBCS en chaînes Unicode en utilisant la fonction API Windows MultiByteToWideChar.


Les règles suivantes s'appliquent :

  1. Lorsque vous définissez une page de code, les valeurs numériques doivent correspondre aux valeurs des ID des pages de codes NLS de Microsoft. Par exemple :
    • Utilisez la page de code 437 pour les applications MS-DOS destinées aux Etats-Unis.
    • Utilisez 932 pour le Japon.
  2. La valeur numérique doit être une page de code correcte prise en charge par le système d'exploitation.
  3. Les utilisateurs doivent installer les fichiers NLS Windows appropriés pour pouvoir accéder à certaines langues et pages de codes asiatiques. Pour obtenir des informations spécifiques, reportez-vous à la liste Microsoft NLS Code Page (EN).
  4. Si vous ne spécifiez pas de valeur de page de code, le compilateur appelle la fonction API Windows GetACP pour retrouver la page de code par défaut du système et utilise cette valeur lors de la gestion des chaînes comme indiqué ci-dessus.

La valeur par défaut est la non utilisation d'une page de code.

YesC++11Feature.png
YesC++11Feature.png

Jeu de caractères d'exécution

Définit le jeu de caractères d'exécution, qui est utilisé pour les chaînes ANSI du fichier exécutable.

L'option Jeu de caractères d'exécution est conçue pour être utilisée avec les applications multi-périphériques.
Pour l'hôte Windows ou une cible Windows, l'encodage de texte par défaut correspond à l'encodage ANSI de l'application (l'option Page de code).
Toutefois, pour une application multi-périphériques, l'encodage ANSI de la cible peut ne pas être le même que l'encodage ANSI de l'hôte.
Par exemple, les systèmes POSIX (incluant OS X et le dernier Linux) utilisent UTF8 comme encodage système. L'option Jeu de caractères d'exécution doit donc être "UTF8".

Si vous compilez une application avec "932" comme Jeu de caractères d'exécution, tous les littéraux chaîne sont compilés sous l'encodage "932" (SJIS japonais), que l'environnement de compilation soit "932", ou pas. Les littéraux chaîne étendue (par exemple L"Test") ne sont pas affectés par cette option.

Dans certaines instances, la valeur de l'option Page de code est utilisée pour l'option Jeu de caractères d'exécution. La matrice suivante représente la relation entre les options Page de code et Jeu de caractères d'exécution :

L'option est-elle définie ? Description
Page de code Jeu de caractères d'exécution
  • Pour une cible Windows, le compilateur utilise la page de code système Windows (CP_ACP) en tant que jeu de caractères texte et jeu de caractères d'exécution.
  • Pour une cible Mac OS X, le compilateur utilise la page de code système Windows (CP_ACP) en tant que jeu de caractères texte, et UTF8 en tant que jeu de caractères d'exécution sur Mac OS X.
YesC++11Feature.png

Le compilateur utilise la valeur de l'option Page de code en tant que jeu de caractères texte et jeu de caractères d'exécution.

YesC++11Feature.png

Le compilateur utilise la valeur de l'option Jeu de caractères d'exécution en tant que jeu de caractères d'exécution, et il utilise la page de code système (CP_ACP) pour une cible Windows, ou un encodage spécifique à la plate-forme pour une cible multi-périphérique (LC_CTYPE sur Mac OS X).

YesC++11Feature.png
YesC++11Feature.png

Le compilateur utilise la valeur de l'option Page de code en tant que jeu de caractères texte, et la valeur de l'option Jeu de caractères d'exécution en tant que jeu de caractères d'exécution.

YesC++11Feature.png
YesC++11Feature.png

Taille de bloc d'allocation mémoire contiguë minimale

Spécifie la taille minimale utilisée pour l'allocation mémoire contiguë.

La valeur par défaut est (no =nMo), c'est-à-dire l'utilisation du plus grand segment possible.

Par exemple, vous pouvez définir cette option pour la compilation de gros projets qui n'utilisent pas PCH ou de très gros fichiers source (probablement générés par la machine), ceux ayant beaucoup de code inclus amenant de nombreuses déclarations par fichier.

YesC++11Feature.png
YesC++11Feature.png

Type char non signé

Le compilateur traite les déclarations char comme si elles étaient de type unsigned char afin d'assurer la compatibilité avec d'autres compilateurs.
La valeur par défaut est False (type char signé).

YesC++11Feature.png
YesC++11Feature.png

Générer le fichier binaire universel iOS (armv7 + arm64)

Le compilateur crée un fichier binaire universel pour iOS 32 bits et 64 bits.
La valeur par défaut est False (seul le fichier binaire 64 bits est créé).

YesC++11Feature.png

Options du source

Options du source Description Support du compilateur
  bcc32     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

Activer les commentaires imbriqués

Imbrique les commentaires dans vos fichiers source C et C++. Les commentaires imbriqués ne sont pas autorisés dans les implémentations C standard, et ils ne sont pas portables.
La valeur par défaut est False.

Remarque : Vous pouvez utiliser les directives de compilation conditionnelle pour "commenter" un large bloc de code contenant des commentaires :

 #if 0
 // ...
 /* ... */
 #endif
YesC++11Feature.png
YesC++11Feature.png

Longueur d'identificateur

Spécifie le nombre de caractères significatifs (ceux reconnus par le compilateur) d'un identificateur. Excepté dans C++, qui reconnaît les identificateurs de longueur illimitée, tous les identificateurs sont traités comme distincts seulement si leurs caractères significatifs sont distincts. Cette règle s'applique aux variables, aux noms de macros du préprocesseur, et aux noms des membres de structures.

Les nombres valides pour la longueur sont 0, et de 8 à 250, où 0 indique la longueur d'identificateur maximale de 250. Par défaut, Appmethod C++ utilise 250 caractères par identificateur. D'autres systèmes (notamment certains compilateurs UNIX) ignorent les caractères situés après les huit premiers. Si vous effectuez un portage vers d'autres environnements, vous pouvez compiler votre code avec un nombre de caractères significatifs plus faible, ceci afin de repérer les conflits de noms qui pourraient être induits par des identificateurs longs tronqués. La valeur par défaut est 250.

YesC++11Feature.png
YesC++11Feature.png

Options de chaînes

Options de chaînes Description Support du compilateur
  bcc32     bcc64     bccosx     bcciosarm     bcciosarm64     bccaarm  

Fusionner les chaînes dupliquées

Fusionne deux chaînes littérales quand l'une correspond à l'autre. Cela produit des programmes plus compacts, en contrepartie d'un temps de compilation plus long, mais peut introduire des erreurs si vous modifiez une chaîne.
La valeur par défaut est False.

YesC++11Feature.png
YesC++11Feature.png

Chaînes en lecture seule

Place la mémoire allouée pour les chaînes dans le segment de données en lecture seule. La valeur par défaut est False.

YesC++11Feature.png
YesC++11Feature.png

Chaînes en écriture

Place la mémoire allouée pour les chaînes dans le segment de données en écriture.
La valeur par défaut est False.

YesC++11Feature.png
YesC++11Feature.png

Voir aussi