.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "C++FILT 1" .TH C++FILT 1 2026-07-30 binutils-2.47 "GNU Development Tools" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" c++filt \- بازگردانی نام نمادهای درهم‌ریخته (demangle) زبان‌های ++C و Java .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" c++filt [\fB\-_\fR|\fB\-\-strip\-underscore\fR] [\fB\-n\fR|\fB\-\-no\-strip\-underscore\fR] [\fB\-p\fR|\fB\-\-no\-params\fR] [\fB\-t\fR|\fB\-\-types\fR] [\fB\-i\fR|\fB\-\-no\-verbose\fR] [\fB\-r\fR|\fB\-\-no\-recurse\-limit\fR] [\fB\-R\fR|\fB\-\-recurse\-limit\fR] [\fB\-s\fR \fIformat\fR|\fB\-\-format=\fR\fIformat\fR] [\fB\-\-help\fR] [\fB\-\-version\fR] [\fIsymbol\fR...] .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" زبان‌های ++C و Java قابلیت بارگذاری بیش از حد توابع (function overloading) را فراهم می‌کنند، به این معنا که شما می‌توانید چندین تابع با یک نام مشترک بنویسید، مشروط بر اینکه هر تابع پارامترهایی از انواع مختلف دریافت کند. زبان‌های ++C و Java برای تفکیک این توابع هم‌نام، آن‌ها را به یک نام اسمبلی سطح پایین تبدیل و کدگذاری می‌کنند که هر نسخه متفاوت را به طور یکتا مشخص می‌سازد. به این فرآیند درهم‌ریزی نام یا \fImangling\fR می‌گویند. برنامه \&\fBc++filt\fR [1] نگاشت معکوس را انجام می‌دهد: این برنامه نام‌های سطح پایین را رمزگشایی (\fIdemangle\fR) کرده و به نام‌های سطح کاربر تبدیل می‌کند تا خوانا شوند. .PP هر کلمه حرفی‌عددی (شامل حروف، ارقام، زیرخط، علامت دلار یا نقطه) که در ورودی دیده شود، یک نام درهم‌ریخته بالقوه است. اگر نام به یک نام ++C رمزگشایی شود، نام ++C در خروجی جایگزین نام سطح پایین می‌شود، در غیر این صورت همان کلمه اصلی چاپ می‌شود. بدین ترتیب می‌توانید یک پرونده مبدا اسمبلی کامل را که حاوی نام‌های درهم‌ریخته است از طریق \fBc++filt\fR عبور دهید و همان پرونده را با نام‌های بازگردانی‌شده و خوانا مشاهده کنید. .PP شما همچنین می‌توانید با ارسال نمادها در خط فرمان، نمادهای مجزا را توسط \fBc++filt\fR رمزگشایی کنید: .PP .Vb 1 \& c++filt .Ve .PP اگر هیچ آرگومان \fIsymbol\fR مشخص نشود، \fBc++filt\fR نام‌های نماد را از ورودی استاندارد می‌خواند. همه نتایج در خروجی استاندارد چاپ می‌شوند. تفاوت میان خواندن نام‌ها از خط فرمان در برابر خواندن نام‌ها از ورودی استاندارد در این است که از آرگومان‌های خط فرمان انتظار می‌رود تنها نام‌های درهم‌ریخته باشند و هیچ بررسی برای جدا کردن آن‌ها از متن پیرامون انجام نمی‌گیرد. بنابراین برای نمونه: .PP .Vb 1 \& c++filt \-n _Z1fv .Ve .PP کار خواهد کرد و نام را به "()f" بازمی‌گرداند در حالی که: .PP .Vb 1 \& c++filt \-n _Z1fv, .Ve .PP کار نخواهد کرد (به کامای اضافی در انتهای نام درهم‌ریخته دقت کنید که آن را نامعتبر می‌سازد). با این حال این دستور کار خواهد کرد: .PP .Vb 1 \& echo _Z1fv, | c++filt \-n .Ve .PP و مقدار ",()f" را نمایش می‌دهد، یعنی نام بازگردانی‌شده که یک کاما به دنبال آن آمده است. این رفتار به این دلیل است که وقتی نام‌ها از ورودی استاندارد خوانده می‌شوند، این انتظار وجود دارد که ممکن است بخشی از یک پرونده کد مبدا اسمبلی باشند که در آن نویسه‌های اضافی پس از یک نام درهم‌ریخته قرار گرفته است. برای نمونه: .PP .Vb 1 \& .type _Z1fv, @function .Ve .SH "گزینه‌ها (OPTIONS)" .IX Header "OPTIONS" .IP \fB\-_\fR 4 .IX Item "-_" .PD 0 .IP \fB\-\-strip\-underscore\fR 4 .IX Item "--strip-underscore" .PD در برخی سیستم‌ها، کامپایلرهای C و ++C یک زیرخط (_) در ابتدای هر نام قرار می‌دهند. برای نمونه، نام C با عنوان \f(CW\*(C`foo\*(C'\fR نام سطح پایین \f(CW\*(C`_foo\*(C'\fR را دریافت می‌کند. این گزینه زیرخط آغازین را حذف می‌کند. اینکه آیا \fBc++filt\fR به طور پیش‌فرض زیرخط را حذف می‌کند یا خیر، وابسته به معماری هدف است. .IP \fB\-n\fR 4 .IX Item "-n" .PD 0 .IP \fB\-\-no\-strip\-underscore\fR 4 .IX Item "--no-strip-underscore" .PD زیرخط آغازین را حذف نکن. .IP \fB\-p\fR 4 .IX Item "-p" .PD 0 .IP \fB\-\-no\-params\fR 4 .IX Item "--no-params" .PD هنگام بازگردانی نام یک تابع، انواع پارامترهای تابع را نمایش نده. .IP \fB\-t\fR 4 .IX Item "-t" .PD 0 .IP \fB\-\-types\fR 4 .IX Item "--types" .PD تلاش برای بازگردانی انواع داده‌ها علاوه بر نام توابع. این گزینه به طور پیش‌فرض غیرفعال است زیرا انواع داده‌های درهم‌ریخته معمولاً فقط به صورت درونی در کامپایلر استفاده می‌شوند و ممکن است با نام‌های درهم‌ریخته‌نشده اشتباه گرفته شوند. برای نمونه، تابعی به نام "a" اگر به عنوان یک نام نوع داده درهم‌ریخته در نظر گرفته شود، به "signed char" تبدیل می‌شود. .IP \fB\-i\fR 4 .IX Item "-i" .PD 0 .IP \fB\-\-no\-verbose\fR 4 .IX Item "--no-verbose" .PD جزئیات پیاده‌سازی (در صورت وجود) را در خروجی بازگردانی‌شده نگنجان. .IP \fB\-r\fR 4 .IX Item "-r" .PD 0 .IP \fB\-R\fR 4 .IX Item "-R" .IP \fB\-\-recurse\-limit\fR 4 .IX Item "--recurse-limit" .IP \fB\-\-no\-recurse\-limit\fR 4 .IX Item "--no-recurse-limit" .IP \fB\-\-recursion\-limit\fR 4 .IX Item "--recursion-limit" .IP \fB\-\-no\-recursion\-limit\fR 4 .IX Item "--no-recursion-limit" .PD محدودیت میزان بازگشت (recursion) انجام‌شده هنگام بازگردانی رشته‌ها را فعال یا غیرفعال می‌کند. از آنجا که قالب‌های درهم‌ریزی نام امکان سطح نامحدودی از بازگشت را فراهم می‌کنند، ممکن است رشته‌هایی ایجاد شوند که رمزگشایی آن‌ها فضای پشته موجود در رایانه میزبان را به اتمام رسانده و خطای حافظه ایجاد کند. این محدودیت تلاش می‌کند با محدود کردن بازگشت به ۲۰۴۸ سطح تودرتو، از وقوع این مسئله جلوگیری کند. .Sp حالت پیش‌فرض فعال بودن این محدودیت است، اما غیرفعال کردن آن ممکن است برای بازگردانی نام‌های واقعاً پیچیده لازم باشد. توجه داشته باشید که اگر محدودیت بازگشت غیرفعال شود، احتمال اتمام پشته وجود دارد و هرگونه گزارش باگ در رابطه با چنین رخدادی رد خواهد شد. .Sp گزینه \fB\-r\fR مترادف گزینه \fB\-\-no\-recurse\-limit\fR است. گزینه \fB\-R\fR مترادف گزینه \fB\-\-recurse\-limit\fR است. .IP "\fB\-s\fR \fIformat\fR" 4 .IX Item "-s format" .PD 0 .IP \fB\-\-format=\fR\fIformat\fR 4 .IX Item "--format=format" .PD دستور \fBc++filt\fR می‌تواند روش‌های گوناگون درهم‌ریزی را که توسط کامپایلرهای مختلف استفاده شده رمزگشایی کند. آرگومان این گزینه روش مورد استفاده را انتخاب می‌کند: .RS 4 .ie n .IP """auto""" 4 .el .IP \f(CWauto\fR 4 .IX Item "auto" انتخاب خودکار بر اساس پرونده اجرایی (روش پیش‌فرض) .ie n .IP """gnu""" 4 .el .IP \f(CWgnu\fR 4 .IX Item "gnu" روش مورد استفاده توسط کامپایلر GNU C++ (g++) .ie n .IP """lucid""" 4 .el .IP \f(CWlucid\fR 4 .IX Item "lucid" روش مورد استفاده توسط کامپایلر Lucid (lcc) .ie n .IP """arm""" 4 .el .IP \f(CWarm\fR 4 .IX Item "arm" روش مشخص‌شده در راهنمای مرجع تفسیری ++C .ie n .IP """hp""" 4 .el .IP \f(CWhp\fR 4 .IX Item "hp" روش مورد استفاده توسط کامپایلر HP (aCC) .ie n .IP """edg""" 4 .el .IP \f(CWedg\fR 4 .IX Item "edg" روش مورد استفاده توسط کامپایلر EDG .ie n .IP """gnu\-v3""" 4 .el .IP \f(CWgnu\-v3\fR 4 .IX Item "gnu-v3" روش مورد استفاده توسط کامپایلر GNU C++ (g++) با V3 ABI .ie n .IP """java""" 4 .el .IP \f(CWjava\fR 4 .IX Item "java" روش مورد استفاده توسط کامپایلر GNU Java (gcj) .ie n .IP """gnat""" 4 .el .IP \f(CWgnat\fR 4 .IX Item "gnat" روش مورد استفاده توسط کامپایلر GNU Ada (GNAT) .RE .RS 4 .RE .IP \fB\-\-help\fR 4 .IX Item "--help" چاپ خلاصه‌ای از گزینه‌های \fBc++filt\fR و خروج. .IP \fB\-\-version\fR 4 .IX Item "--version" چاپ شماره نسخه \fBc++filt\fR و خروج. .IP \fB@\fR\fIfile\fR 4 .IX Item "@file" خواندن گزینه‌های خط فرمان از \fIfile\fR. گزینه‌های خوانده‌شده به جای گزینه اصلی @\fIfile\fR درج می‌شوند. اگر \fIfile\fR وجود نداشته باشد یا خوانده نشود، با گزینه به صورت تحت‌اللفظی رفتار خواهد شد و حذف نمی‌شود. .Sp گزینه‌ها در \fIfile\fR با نویسه فاصله سفید از هم جدا می‌شوند. یک نویسه فاصله می‌تواند با قرار دادن کل گزینه در گیومه تکی یا جفتی گنجانده شود. هر نویسه‌ای (شامل اسلش معکوس) را می‌توان با قرار دادن یک اسلش معکوس قبل از آن درج کرد. پرونده \fIfile\fR خود می‌تواند شامل گزینه‌های @\fIfile\fR دیگر باشد؛ چنین گزینه‌هایی به صورت بازگشتی پردازش خواهند شد. .SH "پاورقی‌ها (FOOTNOTES)" .IX Header "FOOTNOTES" .IP 1. 4 سیستم‌عامل MS\-DOS نویسه \f(CW\*(C`+\*(C'\fR را در نام پرونده‌ها مجاز نمی‌داند، از این رو در MS\-DOS این برنامه \fBCXXFILT\fR نامیده شده است. .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" مدخل‌های Info برای \fIbinutils\fR. .SH "حق نشر (COPYRIGHT)" .IX Header "COPYRIGHT" Copyright (c) 1991\-2026 Free Software Foundation, Inc. .PP مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز اسناد آزاد گنو (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخه جدیدتر منتشرشده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متن‌های روی جلد، و بدون متن‌های پشت جلد. نسخه‌ای از این مجوز در بخش با عنوان "GNU Free Documentation License" گنجانده شده است.