.\" -*- 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-01-23 binutils-2.45.1 "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) در ابتدای هر نام قرار می‌دهند. برای نمونه، نام \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 هنگام بازگردانی نام تابع از حالت درهم‌ریخته (demangle)، انواع پارامترهای تابع را نمایش نده. .IP \fB\-t\fR 4 .IX Item "-t" .PD 0 .IP \fB\-\-types\fR 4 .IX Item "--types" .PD تلاش برای بازگردانی انواع داده‌ها (types) علاوه بر نام توابع از حالت درهم‌ریخته. این گزینه به‌طور پیش‌فرض غیرفعال است زیرا انواع درهم‌ریخته (mangled) معمولاً فقط به‌صورت داخلی در کامپایلر استفاده می‌شوند و ممکن است با نام‌های عادی اشتباه گرفته شوند. برای نمونه، اگر با تابعی به نام «a» مانند یک نام نوع درهم‌ریخته رفتار شود، به «signed char» بازگردانده (demangle) می‌شود. .IP \fB\-i\fR 4 .IX Item "-i" .PD 0 .IP \fB\-\-no\-verbose\fR 4 .IX Item "--no-verbose" .PD جزئیات پیاده‌سازی (در صورت وجود) را در خروجی بازگردانی‌شده (demangled) لحاظ نکن. .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) حین بازگردانی رشته‌ها (demangling) را فعال یا غیرفعال می‌کند. از آنجا که ساختارهای درهم‌ریزی نام سطوح نامحدودی از بازگشت را ممکن می‌سازند، ایجاد رشته‌هایی که رمزگشایی آن‌ها تمام فضای پشته (stack) موجود در ماشین میزبان را مصرف کرده و باعث خطای حافظه شود، امکان‌پذیر است. این محدودیت با محدود کردن بازگشت به ۲۰۴۸ سطح تودرتو، تلاش می‌کند تا از وقوع این مشکل جلوگیری کند. .Sp حالت پیش‌فرض فعال بودن این محدودیت است، اما غیرفعال کردن آن برای بازگردانی نام‌های واقعاً پیچیده ممکن است ضروری باشد. با این حال توجه داشته باشید که اگر محدودیت بازگشت غیرفعال شود، سرریز پشته (stack exhaustion) محتمل است و هرگونه گزارش باگ دربارهٔ چنین رخدادی رد خواهد شد. .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 می‌تواند روش‌های مختلف درهم‌ریزی (mangling) که توسط کامپایلرهای گوناگون استفاده می‌شوند را رمزگشایی کند. آرگومان ارائه‌شده به این گزینه روش مورد استفاده را مشخص می‌کند: .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++ 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" روشی که توسط کامپایلر GNU C++ (g++) با رابط برنامه ABI نسخه V3 استفاده می‌شود. .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 با نویسه‌های فاصله خالی (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" Copyright (c) 1991\-2025 Free Software Foundation, Inc. .PP مجوز نسخه‌برداری، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخهٔ 1.3 یا هر نسخهٔ جدیدتر منتشرشده توسط بنیاد نرم‌افزار آزاد (Free Software Foundation)؛ بدون بخش‌های تغییرناپذیر (Invariant Sections)، بدون متون روی جلد (Front\-Cover Texts)، و بدون متون پشت جلد (Back\-Cover Texts) اعطا می‌شود. یک نسخه از این مجوز در بخشی تحت عنوان "GNU Free Documentation License" گنجانده شده است.