.\" Automatically generated by Pod::Man 4.09 (Pod::Simple 3.35) .\" .\" 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 .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . 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 .. .if !\nF .nr F 0 .if \nF>0 \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} .\} .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "CPP 1" .TH CPP 1 "2025-08-08" "gcc-15.2.0" "GNU" .\" 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)" or1k-elf-cpp \- پیش‌پردازنده C برای معماری OpenRISC .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" cpp [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR] [\fB\-I\fR\fIdir\fR...] [\fB\-iquote\fR\fIdir\fR...] [\fB\-M\fR|\fB\-MM\fR] [\fB\-MG\fR] [\fB\-MF\fR \fIfilename\fR] [\fB\-MP\fR] [\fB\-MQ\fR \fItarget\fR...] [\fB\-MT\fR \fItarget\fR...] \fIinfile\fR [[\fB\-o\fR] \fIoutfile\fR] .PP در بالا تنها مفیدترین گزینه‌ها آورده شده‌اند؛ برای فهرست کامل‌تری از گزینه‌های مختص پیش‌پردازنده به بخش‌های پایین مراجعه کنید. علاوه بر این، \fBcpp\fR اکثر گزینه‌های گرداننده \fBgcc\fR را که در اینجا ذکر نشده‌اند نیز می‌پذیرد. برای جزئیات به مستندات \s-1GCC\s0 مراجعه نمایید. .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" پیش‌پردازنده C، که اغلب با نام \fIcpp\fR شناخته می‌شود، یک \fIپردازنده ماکرو\fR است که توسط کامپایلر C به صورت خودکار برای دگرگون‌سازی برنامه شما پیش از کامپایل به کار می‌رود. این ابزار از این رو پردازنده ماکرو نامیده می‌شود که به شما امکان می‌دهد \fIماکروها\fR را تعریف کنید؛ اختصارات کوتاهی برای ساختارهای طولانی‌تر. .PP پیش‌پردازنده C تنها برای استفاده با کدهای منبع C، \*(C+ و Objective-C در نظر گرفته شده است. در گذشته، از آن به عنوان یک پردازنده متنی عمومی استفاده نابجا می‌شد. این پردازنده روی ورودی‌هایی که از قواعد واژگانی C پیروی نمی‌کنند متوقف می‌شود. برای نمونه، آپاستروف‌ها به عنوان آغاز ثوابت نویسه‌ای تفسیر می‌شوند و خطاساز خواهند شد. همچنین نمی‌توانید برای حفظ ویژگی‌هایی از ورودی که برای زبان‌های خانواده C اهمیتی ندارند به آن اعتماد کنید. اگر یک Makefile پیش‌پردازش شود، تمام تب‌های واقعی حذف می‌شوند و Makefile کار نخواهد کرد. .PP با این اوصاف، در موارد زیادی می‌توانید از cpp برای مواردی غیر از C نیز بهره ببرید. سایر زبان‌های برنامه‌نویسی مشابه آلگول (مانند Ada و غیره) اغلب ایمن هستند. اسمبلی نیز با احتیاط قابل استفاده است. حالت \fB\-traditional\-cpp\fR فاصله‌های سفید بیشتری را حفظ کرده و در کل سهل‌گیرتر است. با نوشتن کامنت‌ها به سبک C یا \*(C+ به جای کامنت‌های زبان بومی و ساده نگه داشتن ماکروها، می‌توان از بسیاری از مشکلات جلوگیری کرد. .PP در هر جا که ممکن باشد، باید از پیش‌پردازنده‌ای متناسب با زبانی که با آن می‌نویسید استفاده کنید. نسخه‌های مدرن اسمبلر \s-1GNU\s0 دارای امکانات ماکرو هستند. بیشتر زبان‌های برنامه‌نویسی سطح بالا سازوکار گنجاندن و کامپایل شرطی مخصوص خود را دارند. اگر هیچ‌یک نتیجه نداد، یک پردازنده متنی واقعاً عمومی مانند \s-1GNU M4\s0 را امتحان کنید. .PP پیش‌پردازنده‌های C در برخی جزئیات متفاوت هستند. این راهنما به پیش‌پردازنده \s-1GNU C\s0 می‌پردازد، که فرامجموعه کوچکی از ویژگی‌های C استاندارد \s-1ISO\s0 را فراهم می‌آورد. در حالت پیش‌فرض، پیش‌پردازنده \s-1GNU C\s0 چند موردی را که استاندارد الزام کرده انجام نمی‌دهد؛ این‌ها ویژگی‌هایی هستند که به ندرت، یا شاید هرگز، استفاده نمی‌شوند و ممکن است تغییرات شگفت‌آوری در معنای برنامه‌ای که انتظار آن‌ها را ندارد ایجاد نمایند. برای به دست آوردن C دقیقاً منطبق بر استاندارد \s-1ISO\s0، باید بسته به نسخه استانداردی که می‌خواهید، از گزینه‌های \fB\-std=c90\fR، \fB\-std=c99\fR، \&\fB\-std=c11\fR یا \fB\-std=c17\fR استفاده نمایید. برای دریافت تمام پیام‌های تشخیصی الزامی، باید از \fB\-pedantic\fR نیز استفاده کنید. .PP این راهنما رفتار پیش‌پردازنده \s-1ISO\s0 را توصیف می‌کند. برای به حداقل رساندن تفاوت‌های بی‌مورد، هر جا که رفتار پیش‌پردازنده \s-1ISO\s0 با معناشناسی سنتی مغایرت نداشته باشد، پیش‌پردازنده سنتی باید به همان شکل عمل کند. تفاوت‌های متعددی که وجود دارند، به تفصیل در بخش \fBحالت سنتی (Traditional Mode)\fR بیان شده‌اند. .PP برای شفافیت، مگر در مواردی که خلاف آن ذکر شده باشد، ارجاعات به \fB\s-1CPP\s0\fR در این راهنما به \s-1GNU CPP\s0 اشاره دارد. .SH "گزینه‌ها (OPTIONS)" .IX Header "OPTIONS" دستور \fBcpp\fR دو نام فایل را به عنوان آرگومان انتظار دارد: \fIinfile\fR و \&\fIoutfile\fR. پیش‌پردازنده \fIinfile\fR را همراه با هر فایل دیگری که با \fB#include\fR مشخص می‌کند می‌خواند. تمام خروجی تولیدشده توسط فایل‌های ورودی ترکیب‌شده در \fIoutfile\fR نوشته می‌شود. .PP هر یک از \fIinfile\fR یا \fIoutfile\fR می‌توانند \fB\-\fR باشند؛ که به عنوان \fIinfile\fR به معنای خواندن از ورودی استاندارد و به عنوان \fIoutfile\fR به معنای نوشتن در خروجی استاندارد است. اگر هر یک از فایل‌ها حذف شود، به معنای همان است که \fB\-\fR برای آن فایل تعیین شده باشد. همچنین می‌توانید از گزینه \fB\-o\fR \fIoutfile\fR برای مشخص کردن فایل خروجی استفاده کنید. .PP مگر در مواردی که خلاف آن ذکر شده باشد، یا گزینه با \fB=\fR پایان یابد، تمام گزینه‌هایی که یک آرگومان می‌گیرند می‌توانند آن آرگومان را بلافاصله پس از گزینه یا با یک فاصله بین گزینه و آرگومان داشته باشند: \&\fB\-Ifoo\fR و \fB\-I foo\fR اثر یکسانی دارند. .PP بسیاری از گزینه‌ها دارای نام‌های چندحرفی هستند؛ بنابراین چندین گزینه تک‌حرفی را \fIنمی‌توان\fR با یکدیگر گروه‌بندی کرد: \fB\-dM\fR تفاوت بسیار زیادی با \&\fB\-d\ \-M\fR دارد. .IP "\fB\-D\fR \fIname\fR" 4 .IX Item "-D name" تعریف پیش‌فرض \fIname\fR به عنوان یک ماکرو، با مقدار \f(CW1\fR. .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4 .IX Item "-D name=definition" محتوای \fIdefinition\fR نشانه‌گذاری (tokenize) شده و طوری پردازش می‌شود که گویی در فاز سوم ترجمه در یک دستور \fB#define\fR ظاهر شده است. به‌ویژه، تعریف با نویسه‌های خط جدید درون‌متنی بریده می‌شود. .Sp اگر پیش‌پردازنده را از یک شل یا برنامه شبیه‌شل فراخوانی می‌کنید، ممکن است لازم باشد از نحو نقل‌قول (quoting) شل برای محافظت از نویسه‌هایی مانند فاصله‌ها که در نحو شل معنا دارند استفاده کنید. .Sp اگر مایل به تعریف یک ماکروی تابع‌مانند در خط فرمان هستید، فهرست آرگومان‌های آن را داخل پرانتز قبل از علامت مساوی (در صورت وجود) بنویسید. پرانتزها برای بیشتر شل‌ها معنادار هستند، بنابراین باید گزینه را داخل علامت نقل‌قول قرار دهید. با \fBsh\fR و \fBcsh\fR، ساختار \&\fB\-D'\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB'\fR کار می‌کند. .Sp گزینه‌های \&\fB\-D\fR و \fB\-U\fR به همان ترتیبی که در خط فرمان داده شده‌اند پردازش می‌شوند. تمام گزینه‌های \fB\-imacros\fR \fIfile\fR و \&\fB\-include\fR \fIfile\fR پس از تمام گزینه‌های \&\fB\-D\fR و \fB\-U\fR پردازش می‌شوند. .IP "\fB\-U\fR \fIname\fR" 4 .IX Item "-U name" لغو هرگونه تعریف پیشین برای \fIname\fR، چه توکار باشد چه با گزینه \fB\-D\fR تعیین شده باشد. .IP "\fB\-include\fR \fIfile\fR" 4 .IX Item "-include file" پردازش \fIfile\fR به گونه‌ای که گویی \f(CW\*(C`#include "file"\*(C'\fR در خط اول فایل منبع اصلی قرار گرفته است. با این حال، نخستین دایرکتوری جستجو شده برای \fIfile\fR دایرکتوری کاری پیش‌پردازنده است \fIبه جای\fR دایرکتوری حاوی فایل منبع اصلی. اگر در آنجا یافت نشد، در ادامه زنجیره جستجوی \f(CW\*(C`#include "..."\*(C'\fR طبق معمول جستجو می‌شود. .Sp اگر چند گزینه \fB\-include\fR داده شود، فایل‌ها به ترتیبی که در خط فرمان ظاهر می‌شوند گنجانده خواهند شد. .IP "\fB\-imacros\fR \fIfile\fR" 4 .IX Item "-imacros file" دقیقاً مانند \fB\-include\fR، به جز اینکه هر خروجی حاصل از پویش \fIfile\fR دور ریخته می‌شود. ماکروهایی که تعریف می‌کند همچنان تعریف‌شده باقی می‌مانند. این به شما امکان می‌دهد تمام ماکروها را از یک فایل سرآیند بدون پردازش اعلان‌های آن به دست آورید. .Sp تمام فایل‌های تعیین‌شده با \fB\-imacros\fR پیش از تمام فایل‌های تعیین‌شده با \fB\-include\fR پردازش می‌شوند. .IP "\fB\-undef\fR" 4 .IX Item "-undef" هیچ ماکروی مختص سیستم یا مختص GCC را از پیش تعریف نکنید. ماکروهای استاندارد از پیش تعریف‌شده همچنان باقی می‌مانند. .IP "\fB\-pthread\fR" 4 .IX Item "-pthread" تعریف ماکروهای اضافی مورد نیاز برای استفاده از کتابخانه نخ‌های \s-1POSIX\s0. باید از این گزینه به طور هماهنگ هم برای کامپایل و هم برای پیوند استفاده کنید. این گزینه در اهداف GNU/Linux، اکثر مشتقات یونیکس و همچنین در اهداف x86 Cygwin و MinGW پشتیبانی می‌شود. .IP "\fB\-M\fR" 4 .IX Item "-M" به جای ارائه خروجی حاصل از پیش‌پردازش، یک قاعده مناسب برای \fBmake\fR خروجی می‌دهد که وابستگی‌های فایل منبع اصلی را توصیف می‌کند. پیش‌پردازنده یک قاعده \fBmake\fR شامل نام فایل شیء برای آن فایل منبع، یک دونقطه و نام تمام فایل‌های گنجانده‌شده، از جمله آن‌هایی که از گزینه‌های خط فرمان \fB\-include\fR یا \&\fB\-imacros\fR می‌آیند، تولید می‌کند. .Sp مگر اینکه صراحتاً (با \fB\-MT\fR یا \fB\-MQ\fR) مشخص شده باشد، نام فایل شیء متشکل از نام فایل منبع با جایگزینی هر پسوندی با پسوند فایل شیء و حذف هر بخش دایرکتوری در ابتدا است. اگر فایل‌های گنجانده‌شده زیادی وجود داشته باشد، قاعده با استفاده از \fB\e\fR\-خط‌جدید به چند خط شکسته می‌شود. این قاعده هیچ فرمانی ندارد. .Sp این گزینه مانع از خروجی اشکال‌زدایی پیش‌پردازنده، مانند \&\fB\-dM\fR نمی‌شود. برای جلوگیری از تداخل چنین خروجی اشکال‌زدایی با قواعد وابستگی، باید صراحتاً فایل خروجی وابستگی را با \&\fB\-MF\fR مشخص کنید، یا از یک متغیر محیطی مانند \&\fB\s-1DEPENDENCIES_OUTPUT\s0\fR استفاده نمایید. خروجی اشکال‌زدایی همچنان طبق معمول به جریان خروجی استاندارد فرستاده می‌شود. .Sp دادن گزینه \fB\-M\fR به گرداننده مستلزم \fB\-E\fR است و هشدارها را با یک \fB\-w\fR ضمنی غیرفعال می‌کند. .IP "\fB\-MM\fR" 4 .IX Item "-MM" مانند \fB\-M\fR است اما به فایل‌های سرآیندی که در دایرکتوری‌های سرآیند سیستم وجود دارند یا فایل‌های سرآیندی که مستقیماً یا غیرمستقیم از چنین سرآیندی گنجانده شده‌اند اشاره نمی‌کند. .Sp این بدان معناست که انتخاب پرانتزهای شکسته یا علامت نقل‌قول در یک دستور \&\fB#include\fR به خودی خود تعیین نمی‌کند که آیا آن سرآیند در خروجی وابستگی \fB\-MM\fR ظاهر شود یا خیر. .IP "\fB\-MF\fR \fIfile\fR" 4 .IX Item "-MF file" هنگامی که همراه با \fB\-M\fR یا \fB\-MM\fR استفاده شود، فایلی را برای نوشتن وابستگی‌ها در آن مشخص می‌کند. اگر هیچ سوییچ \fB\-MF\fR داده نشود، پیش‌پردازنده قواعد را به همان جایی ارسال می‌کند که خروجی پیش‌پردازش‌شده را ارسال می‌کرد. .Sp هنگامی که با گزینه‌های گرداننده \fB\-MD\fR یا \fB\-MMD\fR استفاده شود، \&\fB\-MF\fR فایل پیش‌فرض خروجی وابستگی را بازنویسی می‌کند. .Sp اگر \fIfile\fR برابر \fI\-\fR باشد، وابستگی‌ها در \fIstdout\fR نوشته می‌شوند. .IP "\fB\-MG\fR" 4 .IX Item "-MG" در همراهی با گزینه‌ای مانند \fB\-M\fR که درخواست تولید وابستگی می‌کند، \fB\-MG\fR فرض می‌کند فایل‌های سرآیند ناموجود، فایل‌های تولیدشده هستند و آن‌ها را بدون ایجاد خطا به فهرست وابستگی‌ها اضافه می‌کند. نام فایل وابستگی مستقیماً از دستور \&\f(CW\*(C`#include\*(C'\fR بدون افزودن هیچ مسیری در ابتدا گرفته می‌شود. \fB\-MG\fR همچنین خروجی پیش‌پردازش‌شده را متوقف می‌کند، زیرا نبود فایل سرآیند آن را بی‌فایده می‌سازد. .Sp این قابلیت در به‌روزرسانی خودکار makefileها استفاده می‌شود. .IP "\fB\-Mno\-modules\fR" 4 .IX Item "-Mno-modules" غیرفعال‌سازی تولید وابستگی برای رابط‌های ماژول کامپایل‌شده. .IP "\fB\-MP\fR" 4 .IX Item "-MP" این گزینه به \s-1CPP\s0 دستور می‌دهد تا یک هدف ساختگی برای هر وابستگی غیر از فایل اصلی اضافه کند، که باعث می‌شود هر کدام به هیچ چیز وابسته نباشند. این قواعد ساختگی خطاهایی را که \fBmake\fR در صورت حذف فایل‌های سرآیند بدون به‌روزرسانی \fIMakefile\fR صادر می‌کند دور می‌زنند. .Sp خروجی نمونه چنین است: .Sp .Vb 1 \& test.o: test.c test.h \& \& test.h: .Ve .IP "\fB\-MT\fR \fItarget\fR" 4 .IX Item "-MT target" تغییر هدف قاعده‌ای که توسط تولید وابستگی صادر شده است. به طور پیش‌فرض \s-1CPP\s0 نام فایل ورودی اصلی را می‌گیرد، هرگونه بخش دایرکتوری و هر پسوند فایل مانند \fB.c\fR را حذف می‌کند و پسوند شیء متداول پلتفرم را می‌افزاید. نتیجه همان هدف است. .Sp گزینه \fB\-MT\fR هدف را دقیقاً روی همان رشته‌ای که شما مشخص می‌کنید تنظیم می‌کند. اگر چندین هدف می‌خواهید، می‌توانید آن‌ها را به صورت یک آرگومان به \fB\-MT\fR بدهید یا از گزینه‌های متعدد \fB\-MT\fR استفاده نمایید. .Sp برای نمونه، \fB\-MT\ '$(objpfx)foo.o'\fR ممکن است چنین خروجی دهد: .Sp .Vb 1 \& $(objpfx)foo.o: foo.c .Ve .IP "\fB\-MQ\fR \fItarget\fR" 4 .IX Item "-MQ target" همانند \fB\-MT\fR است، اما هر نویسه‌ای را که برای Make خاص است علامت‌گذاری (quote) می‌کند. \fB\-MQ\ '$(objpfx)foo.o'\fR چنین خروجی می‌دهد: .Sp .Vb 1 \& $$(objpfx)foo.o: foo.c .Ve .Sp هدف پیش‌فرض به صورت خودکار نقل‌قول می‌شود، درست مانند اینکه با \&\fB\-MQ\fR داده شده باشد. .IP "\fB\-MD\fR" 4 .IX Item "-MD" گزینه \&\fB\-MD\fR معادل \fB\-M \-MF\fR \fIfile\fR است، به جز اینکه \&\fB\-E\fR ضمنی نیست. گرداننده فایل \fIfile\fR را بر اساس اینکه گزینه \fB\-o\fR داده شده یا خیر تعیین می‌کند. اگر داده شده باشد، گرداننده از آرگومان آن اما با پسوند \fI.d\fR استفاده می‌کند، در غیر این صورت نام فایل ورودی را می‌گیرد، هر بخش دایرکتوری و پسوند را حذف می‌کند و پسوند \fI.d\fR را اعمال می‌نماید. .Sp اگر \fB\-MD\fR همراه با \fB\-E\fR استفاده شود، هر سوییچ \&\fB\-o\fR برای تعیین فایل خروجی وابستگی در نظر گرفته می‌شود، اما اگر بدون \fB\-E\fR استفاده شود، هر \fB\-o\fR به عنوان تعیین‌کننده یک فایل شیء هدف شناخته می‌شود. .Sp از آنجا که \fB\-E\fR ضمنی نیست، \fB\-MD\fR می‌تواند برای تولید فایل خروجی وابستگی به عنوان یک اثر جانبی فرایند کامپایل استفاده شود. .IP "\fB\-MMD\fR" 4 .IX Item "-MMD" همانند \fB\-MD\fR است، با این تفاوت که تنها فایل‌های سرآیند کاربر را ذکر می‌کند، نه فایل‌های سرآیند سیستم. .IP "\fB\-fpreprocessed\fR" 4 .IX Item "-fpreprocessed" به پیش‌پردازنده اعلام می‌کند که فایل ورودی قبلاً پیش‌پردازش شده است. این امر مانع از مواردی مانند بسط ماکرو، تبدیل سه‌نویسه‌ای (trigraph)، اتصال خطوط جدید با کاراکتر گریز و پردازش اکثر دستورات پیش‌پردازنده می‌شود. پیش‌پردازنده همچنان کامنت‌ها را تشخیص داده و حذف می‌کند، به طوری که می‌توانید فایلی را که با \fB\-C\fR پیش‌پردازش شده است بدون مشکل به کامپایلر ارسال کنید. در این حالت، پیش‌پردازنده یکپارچه چیزی بیش از یک نشانه‌گذار (tokenizer) برای بخش‌های پیشین نیست. .Sp اگر فایل ورودی یکی از پسوندهای \fB.i\fR، \fB.ii\fR یا \fB.mi\fR را داشته باشد، \&\fB\-fpreprocessed\fR به صورت ضمنی اعمال می‌شود. این‌ها پسوندهایی هستند که \s-1GCC\s0 برای فایل‌های پیش‌پردازش‌شده ایجادشده با \&\fB\-save\-temps\fR استفاده می‌کند. .IP "\fB\-fdirectives\-only\fR" 4 .IX Item "-fdirectives-only" هنگام پیش‌پردازش، دستورات پیش‌پردازنده رسیدگی شوند، اما ماکروها بسط داده نشوند. .Sp رفتار این گزینه به گزینه‌های \fB\-E\fR و \fB\-fpreprocessed\fR بستگی دارد. .Sp با \fB\-E\fR، پیش‌پردازش محدود به رسیدگی به دستوراتی مانند \f(CW\*(C`#define\*(C'\fR، \f(CW\*(C`#ifdef\*(C'\fR و \f(CW\*(C`#error\*(C'\fR می‌شود. سایر عملیات پیش‌پردازنده مانند بسط ماکرو و تبدیل سه‌نویسه‌ای انجام نمی‌شوند. علاوه بر این، گزینه \fB\-dD\fR به طور ضمنی فعال می‌شود. .Sp با \fB\-fpreprocessed\fR، پیش‌تعریف ماکروهای خط فرمان و اکثر ماکروهای توکار غیرفعال می‌شود. ماکروهایی مانند \f(CW\*(C`_\|_LINE_\|_\*(C'\fR، که وابسته به زمینه هستند، به طور عادی رسیدگی می‌شوند. این کار امکان کامپایل فایل‌هایی را فراهم می‌کند که قبلاً با \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR پیش‌پردازش شده‌اند. .Sp با هر دو گزینه \fB\-E\fR و \fB\-fpreprocessed\fR، قواعد مربوط به \&\fB\-fpreprocessed\fR اولویت دارند. این امر امکان پیش‌پردازش کامل فایل‌هایی را که قبلاً با \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR پیش‌پردازش شده‌اند فراهم می‌کند. .IP "\fB\-fdollars\-in\-identifiers\fR" 4 .IX Item "-fdollars-in-identifiers" پذیرش \fB$\fR در شناسه‌ها. .IP "\fB\-fextended\-identifiers\fR" 4 .IX Item "-fextended-identifiers" پذیرش نام‌های نویسه‌ای جهانی و نویسه‌های گسترش‌یافته در شناسه‌ها. این گزینه به طور پیش‌فرض برای C99 (و نسخه‌های بعدی استاندارد C) و \*(C+ فعال است. .IP "\fB\-fno\-canonical\-system\-headers\fR" 4 .IX Item "-fno-canonical-system-headers" هنگام پیش‌پردازش، مسیرهای سرآیند سیستم با متعارف‌سازی (canonicalization) کوتاه نشوند. .IP "\fB\-fmax\-include\-depth=\fR\fIdepth\fR" 4 .IX Item "-fmax-include-depth=depth" تنظیم بیشینه عمق تودرتویی دستورات #include. پیش‌فرض 200 است. .IP "\fB\-fsearch\-include\-path\fR[\fB=\fR\fIkind\fR]" 4 .IX Item "-fsearch-include-path[=kind]" جستجو برای فایل‌های ورودی در مسیر #include، نه فقط در دایرکتوری جاری. این قابلیت به‌ویژه برای ماژول‌های \*(C+20 مفید است که برای آن‌ها هم واحدهای سرآیند و هم واحدهای رابط ماژول باید مستقیماً کامپایل شوند: .Sp .Vb 1 \& g++ \-c \-std=c++20 \-fmodules \-fsearch\-include\-path bits/stdc++.h bits/std.cc .Ve .Sp مقدار \&\fIkind\fR به طور پیش‌فرض \fBuser\fR است، که در مسیر جستجوی \f(CW\*(C`#include "..."\*(C'\fR جستجو می‌کند؛ شما همچنین می‌توانید صراحتاً \fBsystem\fR را برای مسیر جستجوی \f(CW\*(C`#include <...>\*(C'\fR مشخص کنید. .IP "\fB\-ftabstop=\fR\fIwidth\fR" 4 .IX Item "-ftabstop=width" تنظیم فاصله بین ایستگاه‌های تب (tab stops). این به پیش‌پردازنده کمک می‌کند تا شماره ستون‌های صحیح را در هشدارها یا خطاها گزارش کند، حتی اگر تب‌هایی در خط وجود داشته باشند. اگر مقدار کمتر از 1 یا بیشتر از 100 باشد، این گزینه نادیده گرفته می‌شود. مقدار پیش‌فرض 8 است. .IP "\fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR]" 4 .IX Item "-ftrack-macro-expansion[=level]" ردیابی موقعیت توکن‌ها در طول بسط ماکرو. این به کامپایلر اجازه می‌دهد تا هنگام وقوع خطای کامپایل در بسط ماکرو، اطلاعات تشخیصی مربوط به پشته جاری بسط ماکرو را گزارش کند. استفاده از این گزینه باعث مصرف حافظه بیشتری توسط پیش‌پردازنده و کامپایلر می‌شود. پارامتر \fIlevel\fR می‌تواند برای انتخاب سطح دقت ردیابی مکان توکن و در نتیجه کاهش مصرف حافظه در صورت لزوم استفاده شود. مقدار \fB0\fR برای \fIlevel\fR این گزینه را غیرفعال می‌کند. مقدار \fB1\fR مکان توکن‌ها را در یک حالت تنزل‌یافته برای حداقل بار اضافی حافظه ردیابی می‌کند. در این حالت تمام توکن‌های حاصل از بسط یک آرگومان از ماکروی تابع‌مانند مکان یکسانی دارند. مقدار \fB2\fR مکان توکن‌ها را به طور کامل ردیابی می‌کند؛ این مقدار بیشترین حافظه را مصرف می‌کند. هنگامی که هیچ آرگومانی به این گزینه داده نشود، مقدار پیش‌فرض پارامتر \&\fB2\fR است. .Sp توجه داشته باشید که \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR به صورت پیش‌فرض فعال است. .IP "\fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR" 4 .IX Item "-fmacro-prefix-map=old=new" هنگام پیش‌پردازش فایل‌های مقیم در دایرکتوری \fI\fIold\fI\fR، ماکروهای \f(CW\*(C`_\|_FILE_\|_\*(C'\fR و \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR را طوری بسط دهید که گویی فایل‌ها در دایرکتوری \fI\fInew\fI\fR مقیم هستند. این می‌تواند برای تغییر یک مسیر مطلق به یک مسیر نسبی با استفاده از \fI.\fR برای \&\fInew\fR به کار رود که ممکن است به ساخت‌های بازتولیدپذیرتر و مستقل از مکان منجر شود. این گزینه همچنین بر \&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR در طول کامپایل اثر می‌گذارد. همچنین به \&\fB\-ffile\-prefix\-map\fR و \fB\-fcanon\-prefix\-map\fR مراجعه کنید. .IP "\fB\-fexec\-charset=\fR\fIcharset\fR" 4 .IX Item "-fexec-charset=charset" تنظیم مجموعه نویسه‌های اجرایی، مورد استفاده برای ثوابت رشته‌ای و نویسه‌ای. پیش‌فرض \s-1UTF\-8\s0 است. \fIcharset\fR می‌تواند هر نوع رمزگذاری پشتیبانی‌شده توسط تابع کتابخانه‌ای \f(CW\*(C`iconv\*(C'\fR سیستم باشد. .IP "\fB\-fwide\-exec\-charset=\fR\fIcharset\fR" 4 .IX Item "-fwide-exec-charset=charset" تنظیم مجموعه نویسه‌های اجرایی پهن (wide)، مورد استفاده برای ثوابت نویسه‌ای و رشته‌ای پهن. پیش‌فرض یکی از گزینه‌های \s-1UTF\-32BE, UTF\-32LE, UTF\-16BE,\s0 یا \s-1UTF\-16LE\s0 است، هرکدام که با عرض \f(CW\*(C`wchar_t\*(C'\fR و ترتیب بایتی بزرگ‌انتهایی یا کوچک‌انتهایی مورد استفاده برای تولید کد مطابقت داشته باشد. مانند \fB\-fexec\-charset\fR، \fIcharset\fR می‌تواند هر نوع رمزگذاری پشتیبانی‌شده توسط تابع کتابخانه‌ای \f(CW\*(C`iconv\*(C'\fR سیستم باشد؛ با این حال، با رمزگذاری‌هایی که دقیقاً در \f(CW\*(C`wchar_t\*(C'\fR نمی‌گنجند با مشکل مواجه خواهید شد. .IP "\fB\-finput\-charset=\fR\fIcharset\fR" 4 .IX Item "-finput-charset=charset" تنظیم مجموعه نویسه‌های ورودی، مورد استفاده برای ترجمه از مجموعه نویسه‌های فایل ورودی به مجموعه نویسه‌های مبدأ مورد استفاده \s-1GCC\s0. اگر محلی‌سازی (locale) مشخص نکند، یا \s-1GCC\s0 نتواند این اطلاعات را از محلی‌سازی دریافت کند، پیش‌فرض \s-1UTF\-8\s0 است. این مقدار می‌تواند توسط محلی‌سازی یا این گزینه خط فرمان بازنویسی شود. در حال حاضر در صورت وجود تعارض، گزینه خط فرمان اولویت دارد. \fIcharset\fR می‌تواند هر نوع رمزگذاری پشتیبانی‌شده توسط تابع کتابخانه‌ای \f(CW\*(C`iconv\*(C'\fR سیستم باشد. .IP "\fB\-fworking\-directory\fR" 4 .IX Item "-fworking-directory" فعال‌سازی تولید نشانگرهای خط در خروجی پیش‌پردازنده تا به کامپایلر اجازه دهد از دایرکتوری کاری جاری در زمان پیش‌پردازش مطلع شود. هنگامی که این گزینه فعال است، پیش‌پردازنده پس از نشانگر خط اولیه، یک نشانگر خط دوم همراه با دایرکتوری کاری جاری به دنبال دو اسلش صادر می‌کند. \s-1GCC\s0 از این دایرکتوری، در صورت وجود در ورودی پیش‌پردازش‌شده، به عنوان دایرکتوری کاری جاری در برخی قالب‌های اطلاعات خطایابی استفاده می‌کند. این گزینه اگر اطلاعات خطایابی فعال باشد به طور ضمنی فعال می‌شود، اما می‌توان با شکل نقیض \fB\-fno\-working\-directory\fR از آن جلوگیری کرد. اگر سوییچ \fB\-P\fR در خط فرمان وجود داشته باشد، این گزینه هیچ اثری ندارد، زیرا اصلاً هیچ دستور \&\f(CW\*(C`#line\*(C'\fR صادر نمی‌شود. .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A predicate=answer" ایجاد یک ادعا با گزاره \fIpredicate\fR و پاسخ \&\fIanswer\fR. این قالب بر قالب قدیمی‌تر \fB\-A\fR \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR، که همچنان پشتیبانی می‌شود، ترجیح داده می‌شود زیرا از نویسه‌های خاص شل استفاده نمی‌کند. .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A -predicate=answer" لغو یک ادعا با گزاره \fIpredicate\fR و پاسخ \&\fIanswer\fR. .IP "\fB\-C\fR" 4 .IX Item "-C" کامنت‌ها دور ریخته نشوند. تمام کامنت‌ها به فایل خروجی منتقل می‌شوند، به جز کامنت‌های موجود در دستورات پیش‌پردازنده پردازش‌شده که همراه با دستور حذف می‌شوند. .Sp هنگام استفاده از \fB\-C\fR باید برای عوارض جانبی آماده باشید؛ این گزینه باعث می‌شود پیش‌پردازنده با کامنت‌ها به عنوان توکن رفتار کند. برای مثال، کامنت‌هایی که در ابتدای یک خط دستور پیش‌پردازنده ظاهر می‌شوند، این اثر را دارند که آن خط را به یک خط منبع معمولی تبدیل کنند، زیرا نخستین توکن روی خط دیگر یک \fB#\fR نیست. .IP "\fB\-CC\fR" 4 .IX Item "-CC" کامنت‌ها دور ریخته نشوند، حتی در حین بسط ماکرو. این مانند \fB\-C\fR است، با این تفاوت که کامنت‌های موجود در داخل ماکروها نیز در جایی که ماکرو بسط می‌یابد به فایل خروجی ارسال می‌شوند. .Sp علاوه بر عوارض جانبی گزینه \fB\-C\fR، گزینه \&\fB\-CC\fR باعث می‌شود تمام کامنت‌های سبک \*(C+ داخل یک ماکرو به کامنت‌های سبک C تبدیل شوند. این کار برای جلوگیری از آن است که استفاده بعدی از آن ماکرو به طور ناخواسته بقیه خط منبع را کامنت کند. .Sp گزینه \fB\-CC\fR معمولاً برای پشتیبانی از کامنت‌های lint استفاده می‌شود. .IP "\fB\-P\fR" 4 .IX Item "-P" جلوگیری از تولید نشانگرهای خط در خروجی حاصل از پیش‌پردازنده. این ممکن است هنگام اجرای پیش‌پردازنده بر روی چیزی که کد C نیست و به برنامه‌ای ارسال می‌شود که ممکن است توسط نشانگرهای خط دچار سردرگمی شود، سودمند باشد. .IP "\fB\-traditional\fR" 4 .IX Item "-traditional" .PD 0 .IP "\fB\-traditional\-cpp\fR" 4 .IX Item "-traditional-cpp" .PD تلاش برای شبیه‌سازی رفتار پیش‌پردازنده‌های C پیش از استاندارد، در برابر پیش‌پردازنده‌های \s-1ISO C\s0. .Sp توجه داشته باشید که \s-1GCC\s0 در غیر این صورت تلاشی برای شبیه‌سازی کامپایلر C پیش از استاندارد نمی‌کند، و این گزینه‌ها تنها با سوییچ \fB\-E\fR یا هنگام فراخوانی صریح \s-1CPP\s0 پشتیبانی می‌شوند. .IP "\fB\-trigraphs\fR" 4 .IX Item "-trigraphs" پشتیبانی از سه‌نویسه‌های (trigraphs) استاندارد \s-1ISO C\s0. این‌ها توالی‌های سه‌نویسه‌ای هستند که همگی با \fB??\fR آغاز می‌شوند و توسط \s-1ISO C\s0 تعریف شده‌اند تا نشان‌دهنده یک نویسه واحد باشند. برای نمونه، \&\fB??/\fR نشان‌دهنده \fB\e\fR است، بنابراین \fB'??/n'\fR یک ثابت نویسه‌ای برای خط جدید است. .Sp به طور پیش‌فرض، \s-1GCC\s0 سه‌نویسه‌ها را نادیده می‌گیرد، اما در حالت‌های منطبق بر استاندارد آن‌ها را تبدیل می‌کند. گزینه‌های \fB\-std\fR و \&\fB\-ansi\fR را ببینید. .IP "\fB\-remap\fR" 4 .IX Item "-remap" فعال‌سازی کد ویژه برای سازگاری با سیستم‌های فایلی که فقط نام‌های فایل بسیار کوتاه را مجاز می‌دانند، مانند MS-DOS. .IP "\fB\-H\fR" 4 .IX Item "-H" چاپ نام هر فایل سرآیند استفاده‌شده، علاوه بر سایر فعالیت‌های عادی. هر نام دندانه‌دار می‌شود تا نشان دهد در چه عمقی از پشته \&\fB#include\fR قرار دارد. فایل‌های سرآیند از پیش کامپایل‌شده نیز چاپ می‌شوند، حتی اگر نامعتبر تشخیص داده شوند؛ یک فایل سرآیند از پیش کامپایل‌شده نامعتبر با \fB...x\fR و یک فایل معتبر با \fB...!\fR چاپ می‌شود. .IP "\fB\-d\fR\fIletters\fR" 4 .IX Item "-dletters" دستور برای تهیه رونوشت‌های اشکال‌زدایی در طول کامپایل بر اساس حروف تعیین‌شده توسط \&\fIletters\fR. فلگ‌های مستندشده در اینجا مواردی هستند که به پیش‌پردازنده مربوط می‌شوند. سایر \fIletters\fR توسط خود کامپایلر تفسیر می‌شوند، یا برای نسخه‌های آینده \s-1GCC\s0 رزرو شده‌اند و بنابراین بدون هشدار نادیده گرفته می‌شوند. اگر حروفی را تعیین کنید که رفتار آن‌ها در تضاد است، نتیجه تعریف‌نشده خواهد بود. .RS 4 .IP "\fB\-dM\fR" 4 .IX Item "-dM" به جای خروجی عادی، فهرستی از دستورات \fB#define\fR را برای تمامی ماکروهای تعریف‌شده در طول اجرای پیش‌پردازنده، از جمله ماکروهای از پیش تعریف‌شده، تولید می‌کند. این به شما راهی برای فهمیدن مواردی که در نسخه پیش‌پردازنده شما از پیش تعریف شده‌اند می‌دهد. با فرض اینکه هیچ فایل \fIfoo.h\fR ندارید، دستور .Sp .Vb 1 \& touch foo.h; cpp \-dM foo.h .Ve .Sp تمام ماکروهای از پیش تعریف‌شده را نشان می‌دهد. .IP "\fB\-dD\fR" 4 .IX Item "-dD" مانند \fB\-dM\fR است به جز اینکه \fIهر دو\fR دستورات \fB#define\fR و نتیجه پیش‌پردازش را در خروجی می‌آورد. هر دو نوع خروجی به فایل خروجی استاندارد ارسال می‌شوند. .IP "\fB\-dN\fR" 4 .IX Item "-dN" مانند \fB\-dD\fR است، اما تنها نام ماکروها را صادر می‌کند، نه بسط آن‌ها را. .IP "\fB\-dI\fR" 4 .IX Item "-dI" صادر کردن دستورات \fB#include\fR علاوه بر نتیجه پیش‌پردازش. .IP "\fB\-dU\fR" 4 .IX Item "-dU" مانند \fB\-dD\fR است با این تفاوت که تنها ماکروهایی که بسط داده شده‌اند یا وضعیت تعریف بودن آن‌ها در دستورات پیش‌پردازنده بررسی شده است صادر می‌شوند؛ خروجی تا زمان استفاده یا بررسی ماکرو به تعویق می‌افتد؛ و دستورات \&\fB#undef\fR نیز برای ماکروهایی که بررسی شده اما در آن زمان تعریف نشده‌اند صادر می‌شوند. .RE .RS 4 .RE .IP "\fB\-fdebug\-cpp\fR" 4 .IX Item "-fdebug-cpp" این گزینه تنها برای اشکال‌زدایی \s-1GCC\s0 کاربرد دارد. هنگامی که از \s-1CPP\s0 یا با \&\fB\-E\fR استفاده شود، اطلاعات اشکال‌زدایی مربوط به نقشه‌های موقعیت را تخلیه می‌کند. هر توکن در خروجی با رونوشت نقشه‌ای که موقعیت آن متعلق به آن است مقدم می‌شود. .Sp هنگامی که از \s-1GCC\s0 بدون \fB\-E\fR استفاده شود، این گزینه هیچ تأثیری ندارد. .IP "\fB\-I\fR \fIdir\fR" 4 .IX Item "-I dir" .PD 0 .IP "\fB\-iquote\fR \fIdir\fR" 4 .IX Item "-iquote dir" .IP "\fB\-isystem\fR \fIdir\fR" 4 .IX Item "-isystem dir" .IP "\fB\-idirafter\fR \fIdir\fR" 4 .IX Item "-idirafter dir" .PD افزودن دایرکتوری \fIdir\fR به فهرست دایرکتوری‌هایی که برای فایل‌های سرآیند در طول پیش‌پردازش جستجو می‌شوند. .Sp اگر \fIdir\fR با \fB=\fR یا \f(CW$SYSROOT\fR آغاز شود، آنگاه \fB=\fR یا \f(CW$SYSROOT\fR با پیشوند sysroot جایگزین می‌شود؛ به \&\fB\-\-sysroot\fR و \fB\-isysroot\fR مراجعه کنید. .Sp دایرکتوری‌های مشخص‌شده با \fB\-iquote\fR تنها برای شکل نقل‌قولی دستور، \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR اعمال می‌شوند. دایرکتوری‌های مشخص‌شده با \fB\-I\fR، \fB\-isystem\fR یا \fB\-idirafter\fR هم برای دستورهای \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR و هم \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR اعمال می‌شوند. .Sp می‌توانید هر تعداد یا ترکیبی از این گزینه‌ها را در خط فرمان برای جستجوی فایل‌های سرآیند در چندین دایرکتوری مشخص کنید. ترتیب جستجو به شرح زیر است: .RS 4 .IP "1." 4 .IX Item "1." برای شکل نقل‌قولی دستور include، ابتدا دایرکتوری فایل جاری جستجو می‌شود. .IP "2." 4 .IX Item "2." برای شکل نقل‌قولی دستور include، دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-iquote\fR به ترتیب چپ به راست، همان‌گونه که در خط فرمان ظاهر شده‌اند، جستجو می‌شوند. .IP "3." 4 .IX Item "3." دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-I\fR به ترتیب چپ به راست پویش می‌شوند. .IP "4." 4 .IX Item "4." دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-isystem\fR به ترتیب چپ به راست پویش می‌شوند. .IP "5." 4 .IX Item "5." دایرکتوری‌های استاندارد سیستم پویش می‌شوند. .IP "6." 4 .IX Item "6." دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-idirafter\fR به ترتیب چپ به راست پویش می‌شوند. .RE .RS 4 .Sp می‌توانید از \fB\-I\fR برای بازنویسی یک فایل سرآیند سیستم با نسخه خودتان استفاده کنید، زیرا این دایرکتوری‌ها پیش از دایرکتوری‌های استاندارد فایل‌های سرآیند سیستم جستجو می‌شوند. با این حال، نباید از این گزینه برای افزودن دایرکتوری‌های حاوی فایل‌های سرآیند سیستم ارائه‌شده توسط توزیع‌کننده استفاده کنید؛ برای این منظور از \fB\-isystem\fR استفاده نمایید. .Sp گزینه‌های \fB\-isystem\fR و \fB\-idirafter\fR همچنین دایرکتوری را به عنوان یک دایرکتوری سیستم علامت‌گذاری می‌کنند تا همان رفتار ویژه‌ای را که برای دایرکتوری‌های استاندارد سیستم اعمال می‌شود دریافت کند. .Sp اگر یک دایرکتوری include استاندارد سیستم، یا دایرکتوری مشخص‌شده با \&\fB\-isystem\fR، با \fB\-I\fR نیز مشخص شود، گزینه \fB\-I\fR نادیده گرفته می‌شود. دایرکتوری همچنان جستجو می‌شود اما به عنوان یک دایرکتوری سیستم در موقعیت معمول خود در زنجیره include سیستم. این برای اطمینان از آن است که روال \s-1GCC\s0 برای رفع اشکال سرآیندهای سیستم معیوب و ترتیب دستور \f(CW\*(C`#include_next\*(C'\fR به طور ناخواسته تغییر نکند. اگر واقعاً نیاز به تغییر ترتیب جستجوی دایرکتوری‌های سیستم دارید، از گزینه‌های \fB\-nostdinc\fR یا \fB\-isystem\fR استفاده کنید. .RE .IP "\fB\-I\-\fR" 4 .IX Item "-I-" تقسیم مسیر include. این گزینه منسوخ شده است. لطفاً به جای آن برای دایرکتوری‌های \&\fB\-I\fR پیش از \fB\-I\-\fR از \fB\-iquote\fR استفاده کرده و گزینه \fB\-I\-\fR را حذف کنید. .Sp هر دایرکتوری مشخص‌شده با گزینه‌های \fB\-I\fR پیش از \fB\-I\-\fR تنها برای سرآیندهای درخواست‌شده با \&\f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR جستجو می‌شوند؛ آن‌ها برای \&\f(CW\*(C`#include\ <\f(CIfile\f(CW>\*(C'\fR جستجو نمی‌شوند. اگر دایرکتوری‌های بیشتری با گزینه‌های \fB\-I\fR بعد از \fB\-I\-\fR مشخص شوند، آن دایرکتوری‌ها برای تمامی دستورات \fB#include\fR جستجو خواهند شد. .Sp علاوه بر این، \fB\-I\-\fR مانع از استفاده از دایرکتوری فایل جاری به عنوان اولین دایرکتوری جستجو برای \f(CW\*(C`#include\ "\f(CIfile\f(CW"\*(C'\fR می‌شود. هیچ راهی برای لغو این اثر \fB\-I\-\fR وجود ندارد. .IP "\fB\-iprefix\fR \fIprefix\fR" 4 .IX Item "-iprefix prefix" مشخص کردن \fIprefix\fR به عنوان پیشوند برای گزینه‌های بعدی \fB\-iwithprefix\fR. اگر پیشوند نمایانگر یک دایرکتوری است، باید علامت پایانی \fB/\fR را قرار دهید. .IP "\fB\-iwithprefix\fR \fIdir\fR" 4 .IX Item "-iwithprefix dir" .PD 0 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4 .IX Item "-iwithprefixbefore dir" .PD افزودن \fIdir\fR به پیشوند مشخص‌شده پیشین با \&\fB\-iprefix\fR، و اضافه کردن دایرکتوری حاصل به مسیر جستجوی include. گزینه \fB\-iwithprefixbefore\fR آن را در همان جایی قرار می‌دهد که \fB\-I\fR قرار می‌داد؛ و \fB\-iwithprefix\fR آن را در جایی قرار می‌دهد که \fB\-idirafter\fR می‌گذاشت. .IP "\fB\-isysroot\fR \fIdir\fR" 4 .IX Item "-isysroot dir" این گزینه شبیه به گزینه \fB\-\-sysroot\fR است، اما تنها برای فایل‌های سرآیند اعمال می‌شود (به جز اهداف Darwin، که در آنجا هم برای فایل‌های سرآیند و هم برای کتابخانه‌ها اعمال می‌شود). برای اطلاعات بیشتر گزینه \fB\-\-sysroot\fR را ببینید. .IP "\fB\-imultilib\fR \fIdir\fR" 4 .IX Item "-imultilib dir" استفاده از \fIdir\fR به عنوان یک زیردایرکتوری از دایرکتوری حاوی سرآیندهای \*(C+ مختص هدف. .IP "\fB\-nostdinc\fR" 4 .IX Item "-nostdinc" عدم جستجو در دایرکتوری‌های استاندارد سیستم برای فایل‌های سرآیند. تنها دایرکتوری‌هایی که صراحتاً با گزینه‌های \fB\-I\fR، \&\fB\-iquote\fR، \fB\-isystem\fR یا \fB\-idirafter\fR مشخص شده‌اند (و در صورت مناسب بودن، دایرکتوری فایل جاری) جستجو می‌شوند. .IP "\fB\-nostdinc++\fR" 4 .IX Item "-nostdinc++" عدم جستجو برای فایل‌های سرآیند در دایرکتوری‌های استاندارد مختص \*(C+، اما همچنان جستجو در سایر دایرکتوری‌های استاندارد. (این گزینه هنگام ساخت کتابخانه \*(C+ استفاده می‌شود.) .IP "\fB\-\-embed\-dir=\fR\fIdir\fR" 4 .IX Item "--embed-dir=dir" افزودن دایرکتوری \fIdir\fR به فهرست دایرکتوری‌های جستجوشده برای دستور پیش‌پردازنده \&\f(CW\*(C`#embed\*(C'\fR یا ماکروی \f(CW\*(C`_\|_has_embed\*(C'\fR. هیچ دایرکتوری پیش‌فرضی برای \f(CW\*(C`#embed\*(C'\fR وجود ندارد. .Sp اگر \fIdir\fR با \fB=\fR یا \f(CW$SYSROOT\fR آغاز شود، آنگاه \fB=\fR یا \f(CW$SYSROOT\fR با پیشوند sysroot جایگزین می‌شود؛ به \&\fB\-\-sysroot\fR و \fB\-isysroot\fR مراجعه کنید. .IP "\fB\-Wcomment\fR" 4 .IX Item "-Wcomment" .PD 0 .IP "\fB\-Wcomments\fR" 4 .IX Item "-Wcomments" .PD هشدار هر زمان که یک توالی آغاز توضیح \fB/*\fR درون یک توضیح \fB/*\fR بیاید، یا هر زمان که یک بک‌اسلش-خط‌جدید در یک توضیح \fB//\fR ظاهر شود. این هشدار با \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wtrigraphs\fR" 4 .IX Item "-Wtrigraphs" هشدار در صورتی که با هر سه‌نویسه‌ای مواجه شود که ممکن است معنای برنامه را تغییر دهد. سه‌نویسه‌های درون توضیحات هشدار داده نمی‌شوند، به جز مواردی که خطوط جدید گریزیافته تشکیل می‌دهند. .Sp این گزینه به صورت ضمنی توسط \fB\-Wall\fR فعال می‌شود. اگر \fB\-Wall\fR داده نشده باشد، این گزینه همچنان فعال است مگر اینکه سه‌نویسه‌ها فعال شده باشند. برای تبدیل سه‌نویسه بدون هشدار، اما دریافت سایر هشدارهای \&\fB\-Wall\fR، از \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR استفاده کنید. .IP "\fB\-Wundef\fR" 4 .IX Item "-Wundef" هشدار در صورتی که یک شناسه تعریف‌نشده در دستور \f(CW\*(C`#if\*(C'\fR ارزیابی شود. چنین شناسه‌هایی با صفر جایگزین می‌شوند. .IP "\fB\-Wexpansion\-to\-defined\fR" 4 .IX Item "-Wexpansion-to-defined" هشدار هر زمان که \fBdefined\fR در بسط یک ماکرو دیده شود (از جمله حالتی که ماکرو توسط دستور \fB#if\fR بسط داده شود). چنین کاربردی قابل‌حمل نیست. این هشدار همچنین توسط \fB\-Wpedantic\fR و \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wunused\-macros\fR" 4 .IX Item "-Wunused-macros" هشدار درباره ماکروهای تعریف‌شده در فایل اصلی که استفاده نشده‌اند. یک ماکرو در صورتی \fIاستفاده‌شده\fR است که حداقل یک بار بسط داده شود یا وجود آن بررسی شود. پیش‌پردازنده همچنین در صورتی که ماکرو در زمان بازتعریف یا حذف تعریف استفاده نشده باشد هشدار می‌دهد. .Sp درباره ماکروهای توکار، ماکروهای تعریف‌شده در خط فرمان، و ماکروهای تعریف‌شده در فایل‌های گنجانده‌شده هشداری داده نمی‌شود. .Sp \&\fIنکته:\fR اگر یک ماکرو در عمل استفاده شود، اما تنها در بلوک‌های شرطی نادیده‌گرفته‌شده به کار رود، پیش‌پردازنده آن را به عنوان استفاده‌نشده گزارش می‌کند. برای اجتناب از هشدار در چنین موردی، می‌توانید دامنه تعریف ماکرو را مثلاً با انتقال آن به نخستین بلوک نادیده‌گرفته‌شده بهبود بخشید. در غیر این صورت، می‌توانید با کدی مشابه زیر یک کاربرد صوری ایجاد کنید: .Sp .Vb 2 \& #if defined the_macro_causing_the_warning \& #endif .Ve .IP "\fB\-Wno\-endif\-labels\fR" 4 .IX Item "-Wno-endif-labels" عدم ارسال هشدار هر زمان که پس از یک \f(CW\*(C`#else\*(C'\fR یا \f(CW\*(C`#endif\*(C'\fR متن قرار گیرد. این مورد گاهی در برنامه‌های قدیمی‌تر با کدهایی به شکل زیر پیش می‌آید: .Sp .Vb 5 \& #if FOO \& ... \& #else FOO \& ... \& #endif FOO .Ve .Sp مورد دوم و سوم \f(CW\*(C`FOO\*(C'\fR باید در کامنت قرار گیرند. این هشدار به طور پیش‌فرض روشن است. .SH "محیط (ENVIRONMENT)" .IX Header "ENVIRONMENT" این بخش متغیرهای محیطی اثرگذار بر نحوه عملکرد \s-1CPP\s0 را شرح می‌دهد. می‌توانید از آن‌ها برای تعیین دایرکتوری‌ها یا پیشوندهای مورد استفاده در هنگام جستجوی فایل‌های گنجانده‌شده، یا برای کنترل خروجی وابستگی استفاده کنید. .PP توجه داشته باشید که همچنین می‌توانید مکان‌های جستجو را با گزینه‌هایی مانند \&\fB\-I\fR تعیین کنید، و خروجی وابستگی را با گزینه‌هایی مانند \&\fB\-M\fR کنترل نمایید. این گزینه‌ها بر متغیرهای محیطی تقدم دارند، که آن‌ها نیز به نوبه خود بر پیکربندی \s-1GCC\s0 اولویت دارند. .IP "\fB\s-1CPATH\s0\fR" 4 .IX Item "CPATH" .PD 0 .IP "\fBC_INCLUDE_PATH\fR" 4 .IX Item "C_INCLUDE_PATH" .IP "\fB\s-1CPLUS_INCLUDE_PATH\s0\fR" 4 .IX Item "CPLUS_INCLUDE_PATH" .IP "\fB\s-1OBJC_INCLUDE_PATH\s0\fR" 4 .IX Item "OBJC_INCLUDE_PATH" .PD مقدار هر متغیر فهرستی از دایرکتوری‌ها است که با یک نویسه ویژه، دقیقاً مانند \fB\s-1PATH\s0\fR، از هم جدا شده‌اند و در آن‌ها برای یافتن فایل‌های سرآیند جستجو می‌شود. نویسه ویژه، \f(CW\*(C`PATH_SEPARATOR\*(C'\fR، وابسته به هدف است و در زمان ساخت \s-1GCC\s0 تعیین می‌شود. برای اهداف مبتنی بر مایکروسافت ویندوز یک نقطه-ویرگول (semicolon) و تقریباً برای تمامی اهداف دیگر دو نقطه (colon) است. .Sp متغیر \&\fB\s-1CPATH\s0\fR فهرستی از دایرکتوری‌ها را برای جستجو تعیین می‌کند، درست گویی با \fB\-I\fR تعیین شده باشند، اما پس از هر مسیری که با گزینه‌های \fB\-I\fR در خط فرمان داده شده باشد. این متغیر محیطی صرف نظر از زبانی که پیش‌پردازش می‌شود به کار می‌رود. .Sp بقیه متغیرهای محیطی تنها در هنگام پیش‌پردازش زبان خاص تعیین‌شده اعمال می‌شوند. هر کدام فهرستی از دایرکتوری‌ها را برای جستجو مشخص می‌کنند، گویی با \fB\-isystem\fR تعیین شده باشند، اما پس از هر مسیری که با گزینه‌های \fB\-isystem\fR در خط فرمان داده شده باشد. .Sp در تمامی این متغیرها، یک عنصر خالی به کامپایلر دستور می‌دهد تا دایرکتوری کاری جاری خود را جستجو کند. عناصر خالی می‌توانند در ابتدا یا انتهای یک مسیر ظاهر شوند. برای نمونه، اگر مقدار \&\fB\s-1CPATH\s0\fR برابر با \f(CW\*(C`:/special/include\*(C'\fR باشد، اثری مشابه با \fB\-I.\ \-I/special/include\fR دارد. .IP "\fB\s-1DEPENDENCIES_OUTPUT\s0\fR" 4 .IX Item "DEPENDENCIES_OUTPUT" اگر این متغیر تنظیم شود، مقدار آن نحوه صدور خروجی وابستگی‌ها را برای Make بر اساس فایل‌های سرآیند غیرسیستمی پردازش‌شده توسط کامپایلر تعیین می‌کند. فایل‌های سرآیند سیستم در خروجی وابستگی نادیده گرفته می‌شوند. .Sp مقدار \fB\s-1DEPENDENCIES_OUTPUT\s0\fR می‌تواند صرفاً یک نام فایل باشد، که در این حالت قواعد Make در آن فایل نوشته می‌شوند و نام هدف از نام فایل منبع حدس زده می‌شود. یا مقدار می‌تواند به شکل \&\fIfile\fR\fB \fR\fItarget\fR باشد، که در این حالت قواعد در فایل \fIfile\fR با استفاده از \fItarget\fR به عنوان نام هدف نوشته می‌شوند. .Sp به بیان دیگر، این متغیر محیطی معادل ترکیب گزینه‌های \fB\-MM\fR و \fB\-MF\fR، همراه با یک سوییچ اختیاری \fB\-MT\fR است. .IP "\fB\s-1SUNPRO_DEPENDENCIES\s0\fR" 4 .IX Item "SUNPRO_DEPENDENCIES" این متغیر مشابه \fB\s-1DEPENDENCIES_OUTPUT\s0\fR (در بالا) است، با این تفاوت که فایل‌های سرآیند سیستم نادیده گرفته نمی‌شوند، بنابراین مستلزم \&\fB\-M\fR است به جای \fB\-MM\fR. با این حال، وابستگی به فایل ورودی اصلی حذف می‌شود. .IP "\fB\s-1SOURCE_DATE_EPOCH\s0\fR" 4 .IX Item "SOURCE_DATE_EPOCH" اگر این متغیر تنظیم شود، مقدار آن یک برچسب زمانی \s-1UNIX\s0 را مشخص می‌کند تا به جای تاریخ و زمان جاری در ماکروهای \f(CW\*(C`_\|_DATE_\|_\*(C'\fR و \f(CW\*(C`_\|_TIME_\|_\*(C'\fR استفاده شود، به طوری که برچسب‌های زمانی گنجانده‌شده بازتولیدپذیر گردند. .Sp مقدار \fB\s-1SOURCE_DATE_EPOCH\s0\fR باید یک برچسب زمانی \s-1UNIX\s0 باشد، تعریف‌شده به عنوان تعداد ثانیه‌ها (به استثنای ثانیه‌های کبیسه) از 01 Jan 1970 00:00:00 که در قالب \s-1ASCII\s0 نشان داده می‌شود؛ همسان با خروجی \&\f(CW\*(C`date +%s\*(C'\fR در GNU/Linux و سایر سیستم‌هایی که از پسوند \&\f(CW%s\fR در دستور \f(CW\*(C`date\*(C'\fR پشتیبانی می‌کنند. .Sp این مقدار باید یک برچسب زمانی شناخته‌شده مانند آخرین زمان ویرایش منبع یا بسته باشد و باید توسط فرایند ساخت تنظیم شود. .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf\-funding\fR\|(7), \&\fIgcc\fR\|(1) و مدخل‌های Info برای \fIcpp\fR و \fIgcc\fR. .SH "حق نشر (COPYRIGHT)" .IX Header "COPYRIGHT" Copyright (c) 1987\-2025 Free Software Foundation, Inc. .PP مجوز کپی، توزیع و/یا اصلاح این سند تحت شرایط «مجوز مستندات آزاد گنو» (\s-1GNU\s0 Free Documentation License)، نسخه 1.3 یا هر نسخه بالاتر منتشر شده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود. نسخه‌ای از این مجوز در صفحه راهنمای \fIgfdl\fR\|(7) گنجانده شده است. این راهنما فاقد هرگونه بخش ناگسستنی (Invariant Sections) است. متن‌های روی جلد (الف) (در زیر) و متن‌های پشت جلد (ب) (در زیر) هستند. .PP (الف) متن روی جلد \s-1FSF\s0 عبارت است از: .PP .Vb 1 \& A GNU Manual .Ve .PP (ب) متن پشت جلد \s-1FSF\s0 عبارت است از: .PP .Vb 3 \& You have freedom to copy and modify this GNU Manual, like GNU \& software. Copies published by the Free Software Foundation raise \& funds for GNU development. .Ve