.\" -*- 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-03 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)" i686-w64-mingw32-c++filt \- بازگردانی نام‌های درهم‌ریخته (Demangle) نمادهای C++ و Java برای MinGW-w64 .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" \&\fBc++filt\fR [\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 برای تشخیص این توابع هم‌نام، آن‌ها را به یک نام سطح پایین در زبان اسمبلی تبدیل (کدگذاری) می‌کنند که هر نسخه متفاوت را به طور منحصر‌به‌فرد مشخص می‌سازد. این فرآیند به عنوان \fIدرهم‌ریزی نام‌ها (Mangling)\fR شناخته می‌شود. برنامه \&\fBc++filt\fR [1] نگاشت معکوس را انجام می‌دهد: این برنامه نام‌های سطح پایین را رمزگشایی (\fIبازگردانی یا Demangle\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++ یک زیرخط (_) در ابتدای هر نام قرار می‌دهند. برای مثال، نام \f(CW\*(C`foo\*(C'\fR در زبان C به نام سطح پایین \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 تلاش برای بازگردانی انواع داده‌ها (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 جزئیات پیاده‌سازی (در صورت وجود) را در خروجی بازگردانی‌شده نگنجان. .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) هنگام بازگردانی رشته‌ها. از آن‌جا که قالب‌های درهم‌ریزی نام اجازه سطح بازگشت نامحدود را می‌دهند، ممکن است رشته‌هایی تولید شوند که رمزگشایی آن‌ها تمام فضای پشته (Stack) ماشین میزبان را مصرف کرده و باعث خطای حافظه (Memory Fault) شود. این محدودیت با محدود کردن بازگشت به ۲۰۴۸ سطح تودرتو از بروز این مشکل جلوگیری می‌کند. .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" روش استفاده‌شده توسط کامپایلر 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++ Annotated .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 با نویسه‌های فاصله سفید جدا می‌شوند. می‌توان یک نویسه فاصله سفید را با قرار دادن کل گزینه در داخل علامت نقل قول تکی یا دوتایی درج کرد. هر نویسه‌ای (از جمله ممیز وارونه یا بک‌اسلش) را می‌توان با افزودن پیشوند ممیز وارونه به عنوان بخشی از گزینه گنجاند. خود \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" حق نشر \(co 1991\-2026 Free Software Foundation, Inc. .PP مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط مجوز اسناد آزاد گنو (GNU Free Documentation License)، نسخه 1.3 یا هر نسخه متأخر دیگر منتشر شده توسط بنیاد نرم‌افزار آزاد اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد و بدون متون پشت جلد. یک نسخه از این مجوز در بخش با عنوان "GNU Free Documentation License" گنجانده شده است.