table of contents
| C++FILT(1) | Outils de développement GNU | C++FILT(1) |
NOM¶
c++filt – Décodage (demangle) des symboles de C++ et Java
SYNOPSIS¶
c++filt [-_|--strip-underscore]
[-n|--no-strip-underscore]
[-p|--no-params]
[-t|--types]
[-i|--no-verbose]
[-r|--no-recurse-limit]
[-R|--recurse-limit]
[-s format|--format=format]
[--help] [--version] [symbole...]
DESCRIPTION¶
Les langages C++ et Java fournissent la surcharge de fonction, ce qui signifie qu’il est possible d’écrire plusieurs fonctions de même nom, à condition que chaque fonction prenne des paramètres de types différents. Pour pouvoir distinguer ces fonctions de nom similaire, C++ et Java les encodent dans un nom d’assembleur de bas niveau qui identifie de manière unique chaque version différente. Ce processus est connu comme décoration de nom (mangling). Le programme c++filt(1) réalise l’opération inverse : il décode (demangle) les noms de bas niveau en nom de niveau utilisateur de façon qu’ils puissent être lus.
Chaque mot alphanumérique (constitué de lettres, de chiffres, de tiret_bas, de S barrés ou de points) aperçu en entrée est un nom potentiellement codé. Si le nom se décode en un nom C++, ce nom remplace le nom de bas niveau dans la sortie ; sinon, le mot original est produit. De cette manière, il est possible de passer un fichier source entier d’assembleur, contenant des noms codés, à travers le programme c++filt et voir le même fichier source contenant les noms décodés.
c++filt peut aussi être utilisé pour déchiffrer des symboles individuels en les passant sur la ligne de commande :
c++filt <symbole>
Si aucun argument symbole n’est fourni, c++filt lit les noms de symbole sur l’entrée standard. Tous les résultats sont affichés sur la sortie standard. La différence entre lire les noms à partir de la ligne de commande et les lire à partir de l’entrée standard, est que les arguments en ligne de commande sont supposés être simplement des noms codés et aucune vérification n’est faite pour les séparer du texte avoisinant. Par exemple :
c++filt -n _Z1fv
fonctionne et décode le nom en « f() », tandis que :
c++filt -n _Z1fv,
ne fonctionne pas (notez la virgule supplémentaire à la fin du nom codé qui le rend inapproprié). Cette commande par contre fonctionne :
echo _Z1fv, | c++filt -n
et affiche « f(), », c’est-à-dire le nom décodé suivi d’une virgule. La raison de ce comportement est que lorsque les noms sont lus de l’entrée standard, il est attendu qu’ils fassent partie d’un fichier source d’assembleur où il peut exister des caractères supplémentaires externes après un nom codé. Par exemple :
.type _Z1fv, @fonction
OPTIONS¶
- -_
- --strip-underscore
- Sur certains systèmes, les compilateurs C et C++ mettent un tiret_bas devant chaque nom. Par exemple, le nom en C « machin » devient le nom de bas niveau « _machin ». Cette option supprime le tiret_bas initial. La suppression par défaut par c++filt dépend de la cible.
- -n
- --no-strip-underscore
- Ne pas supprimer le tiret_bas initial.
- -p
- --no-params
- Lors du décodage du nom de la fonction, ne pas afficher les types des paramètres de fonction.
- -t
- --types
- Tenter de décoder les types ainsi que les noms de fonction. Cela est désactivé par défaut, car les types codés ne sont normalement utilisés qu’en interne dans le compilateur, et ils peuvent être confondus avec des noms non codés. Par exemple, un fonction appelée « a » traitée comme un nom de type codé serait décodée en « signed char ».
- -i
- --no-verbose
- Ne pas inclure les détails de mise en œuvre, s’ils existent, dans la sortie décodée.
- -r
- -R
- --recurse-limit
- --no-recurse-limit
- --recursion-limit
- --no-recursion-limit
- Poser ou non une limite du nombre de récursions
réalisées pendant le décodage des chaines. Puisque le
format de codage de nom permet une infinité de niveaux de
récursion, il est possible de créer des chaines dont le
décodage épuiserait l’espace de pile disponible sur
la machine hôte, déclenchant une erreur de mémoire.
Cette limite essaie d’empêcher cela en restreignant la
récursion à 2048 niveaux d’imbrication.
Par défaut, cette limite est posée, mais la supprimer peut être nécessaire pour décoder des noms vraiment compliqués. Notez cependant que, sans cette limite, l’épuisement de pile est possible et que tout rapport de bogue à propos d’un tel évènement sera rejeté.
L’option -r est un synonyme de l’option --no-recurse-limit. L’option -R est un synonyme de l’option --recurse-limit.
- -s format
- --format=format
- c++filt peut décoder diverses méthodes de codage utilisées par les différents compilateurs. L’argument de cette option détermine quelle méthode est utilisée :
- "auto"
- sélection automatique basée sur l’exécutable (méthode par défaut)
- "gnu"
- celle utilisée par le compilateur GNU C++ (g++)
- "lucid"
- celle utilisée par le compilateur Lucid (lcc)
- "arm"
- celle spécifiée par le « C++ Annotated Reference Manual »
- "hp"
- celle utilisée par le compilateur HP (aCC)
- "edg"
- celle utilisée par le compilateur EDG
- "gnu-v3"
- celle utilisée par le compilateur GNU C++ (g++) avec l’ABI V3
- "java"
- celle utilisée par le compilateur GNU Java (gcj)
- "gnat"
- celle utilisée par le compilateur GNU Ada (GNAT)
- --help
- Afficher un sommaire de toutes les options de c++filt et quitter.
- --version
- Afficher la version de c++filt puis quitter.
- @fichier
- Lire les options de ligne de commande dans le fichier. Les options
lues sont insérées à la place de l’option
@fichier originelle. Si fichier n’existe pas ou ne
peut être lu, l’option est traitée
littéralement et n’est pas supprimée.
Les options dans fichier sont séparées par des espaces. Un caractère espace peut être inclus dans une option en entourant l’option entière par des guillemets droits, simples ou doubles. Tout caractère (dont les controbliques) peut être inclus en préfixant ce caractère à inclure par une controblique. Le fichier peut lui-même contenir des options @fichier supplémentaires. De telles options seront traitées de manière récursive.
NOTES¶
- 1.
- MS-DOS n’autorise pas de caractère « + » dans les noms de fichier, aussi pour MS-DOS ce programme est appelé CXXFILT.
VOIR AUSSI¶
Les entrées Info pour binutils.
COPYRIGHT¶
Copyright (c) 1991-2026 Free Software Foundation, Inc.
Autorisation est donnée de copier, distribuer et/ou modifier ce document sous les termes de la licence GNU Free Documentation License, version 1.3 ou ultérieure publiée par la fondation Free Software Foundation, sans sections invariantes, sans texte de couverture et sans texte de dos de couverture. Une copie de la licence figure dans la section « GNU Free Documentation License ».
TRADUCTION¶
La traduction française de cette page de manuel a été créée par Jean-Paul Guillonneau <guillonneau.jeanpaul@free.fr>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.
| 21 octobre 2026 | binutils-2.47.50 |