.\" -*- 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-08-26 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 \- بازگردانی نمادهای درهم‌ریخته‌ی 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++‎ یک خط زیرین (underscore) در ابتدای هر نام قرار می‌دهند. برای نمونه، نام C با عنوان \f(CW\*(C`foo\*(C'\fR نام سطح‌پایین \f(CW\*(C`_foo\*(C'\fR را می‌گیرد. این گزینه خط زیرین آغازین را حذف می‌کند. اینکه آیا \&\fBc++filt\fR به‌طور پیش‌فرض خط زیرین را حذف می‌کند یا خیر، وابسته به معماری مقصد (target) است. .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 هنگام بازگردانی نام تابع (demangling)، انواع پارامترهای تابع را نمایش نمی‌دهد. .IP \fB\-t\fR 4 .IX Item "-t" .PD 0 .IP \fB\-\-types\fR 4 .IX Item "--types" .PD تلاش برای بازگردانی (demangle) انواع داده‌ها علاوه بر نام توابع. این گزینه به‌طور پیش‌فرض غیرفعال است، زیرا انواع نام‌های درهم‌سازی‌شده (mangled types) معمولاً فقط درون کامپایلر استفاده می‌شوند و ممکن است با نام‌های درهم‌سازی‌نشده اشتباه گرفته شوند. برای نمونه، تابعی به نام "a" اگر به عنوان یک نام نوع درهم‌سازی‌شده تلقی شود، به "signed char" تبدیل خواهد شد. .IP \fB\-i\fR 4 .IX Item "-i" .PD 0 .IP \fB\-\-no\-verbose\fR 4 .IX Item "--no-verbose" .PD جزئیات پیاده‌سازی (در صورت وجود) را در خروجی demangle شده لحاظ نمی‌کند. .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) انجام‌شده در حین demangle کردن رشته‌ها را فعال یا غیرفعال می‌کند. از آنجا که ساختار قالب‌های درهم‌سازی نام امکان بازگشت نامحدود را می‌دهند، ممکن است رشته‌هایی ایجاد شوند که رمزگشایی آن‌ها تمام فضای پشته (stack) موجود روی ماشین میزبان را مصرف کرده و موجب خطای حافظه (memory fault) شود. این محدودیت با تحدید بازگشت به ۲۰۴۸ سطح تودرتو، سعی می‌کند از این رخداد جلوگیری کند. .Sp این محدودیت به‌طور پیش‌فرض فعال است، اما غیرفعال کردن آن برای demangle کردن نام‌های واقعاً پیچیده ممکن است ضروری باشد. با این حال توجه داشته باشید که در صورت غیرفعال بودن محدودیت بازگشت، سرریز پشته امکان‌پذیر خواهد بود و هرگونه گزارش باگ در مورد چنین رویدادی رد خواهد شد. .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" روشی که توسط کامپایلر 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++‎» (C++ Annotated Reference Manual) مشخص شده است .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" روشی که توسط کامپایلر C++‎ گنو (g++) با V3 ABI استفاده می‌شود. .ie n .IP """java""" 4 .el .IP \f(CWjava\fR 4 .IX Item "java" روشی که توسط کامپایلر Java گنو (gcj) استفاده می‌شود .ie n .IP """gnat""" 4 .el .IP \f(CWgnat\fR 4 .IX Item "gnat" روشی که توسط کامپایلر 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 با نویسه‌های فاصله خالی (whitespace) از یکدیگر جدا می‌شوند. یک نویسه فاصله خالی می‌تواند با قرار دادن کل گزینه درون گیومه تکی یا جفتی، درون یک گزینه گنجانده شود. هر نویسه‌ای (از جمله بک‌اسلش) را می‌توان با افزودن پیشوند بک‌اسلش به آن اضافه کرد. خود \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" کپی‌رایت (c) 1991\-2026 Free Software Foundation, Inc. .PP اجازه کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز مستندات آزاد گنو (GNU Free Documentation License)، نسخه ۱.۳ یا هر نسخهٔ پسین منتشرشده توسط بنیاد نرم‌افزارهای آزاد (Free Software Foundation)؛ بدون بخش‌های ناوردا، بدون متون روی جلد، و بدون متون پشت جلد اعطا می‌شود. نسخه‌ای از مجوز در بخش تحت عنوان «GNU Free Documentation License» گنجانده شده است.