.\" -*- 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 بدهید و همان فایل منبع را با نام‌های رمزگشایی‌شده (demangled) دریافت کنید. .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 کار خواهد کرد و نام را به \(lqf()\(rq رمزگشایی می‌کند، در حالی که: .PP .Vb 1 \& c++filt \-n _Z1fv, .Ve .PP کار نخواهد کرد. (به ویرگول اضافه در انتهای نام درهم‌سازی‌شده دقت کنید که آن را نامعتبر می‌سازد). با این حال این دستور کار خواهد کرد: .PP .Vb 1 \& echo _Z1fv, | c++filt \-n .Ve .PP و عبارت \(lqf(),\(rq را نمایش می‌دهد، یعنی نام رمزگشایی‌شده به همراه ویرگول پایانی آن. این رفتار به این دلیل است که هنگام خواندن نام‌ها از ورودی استاندارد، انتظار می‌رود که آن‌ها ممکن است بخشی از یک فایل منبع اسمبلی باشند که در آن کاراکترهای اضافی و زائدی پس از یک نام درهم‌سازی‌شده قرار گرفته باشد. برای مثال: .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 به‌طور پیش‌فرض خط زیرین را حذف می‌کند یا خیر، به سیستم مقصد (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 هنگام نام‌گشایی (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" نام‌گشایی خواهد شد. .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 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" روشی که توسط کامپایلر جاوا گنو (gcj) استفاده می‌شود .ie n .IP """gnat""" 4 .el .IP \f(CWgnat\fR 4 .IX Item "gnat" روشی که توسط کامپایلر آدا گنو (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)، نسخهٔ ۱.۳ یا هر نسخهٔ بعدی منتشرشده توسط بنیاد نرم‌افزارهای آزاد (Free Software Foundation) اعطا می‌شود؛ بدون بخش‌های تغییرناپذیر، بدون متون روی جلد، و بدون متون پشت جلد. نسخه‌ای از این مجوز در بخشی با عنوان «GNU Free Documentation License» گنجانده شده است.