.\" به‌طور خودکار توسط Pod::Man 4.09 (Pod::Simple 3.35) تولید شده است .\" .\" مقدمه استاندارد: .\" ======================================================================== .de Sp \" فاصله عمودی (زمانی که نمی‌توان از .PP استفاده کرد) .if t .sp .5v .if n .sp .. .de Vb \" آغاز متن عینا (verbatim) .ft CW .nf .ne \\$1 .. .de Ve \" پایان متن عینا (verbatim) .ft R .fi .. .\" تنظیم برخی تبدیل‌های نویسه و رشته‌های از پیش تعریف‌شده. \*(-- یک .\" خط فاصله نشکن ایجاد می‌کند، \*(PI مقدار pi را می‌دهد، \*(L" علامت نقل‌قول .\" دوتایی چپ و \*(R" علامت نقل‌قول دوتایی راست را ایجاد می‌کند. \*(C+ نگارش .\" بهتری از C++ را نمایش می‌دهد. امگای بزرگ برای ایجاد خط‌های تیره نشکن استفاده .\" می‌شود و بنابراین در دسترس نخواهد بود. \*(C` و \*(C' در nroff به `' .\" و در troff به هیچ گسترش می‌یابند، برای استفاده با 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) از علامت‌های نقل‌قول تکی در رشته‌های لفظی از تبدیل یونیکد groff. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" اگر ثبات F بزرگ‌تر از ۰ باشد، ورودی‌های نمایه را در stderr برای .\" عنوان‌ها (.TH)، سربرگ‌ها (.SH)، زیربخش‌ها (.SS)، موارد (.Ip) و ورودی‌های نمایه .\" علامت‌گذاری‌شده با X<> در POD تولید می‌کنیم. البته، باید خروجی را .\" خودتان به شیوه‌ای معنادار پردازش کنید. .\" .\" جلوگیری از هشدار groff در مورد ثبات تعریف‌نشده '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 . \} .\} .\" .\" تعاریف علامت اکسنت (@(#)ms.acc 1.5 88/02/08 SMI؛ برگرفته از UCB 4.2). .\" بترسید. فرار کنید. جان خود را نجات دهید. هیچ بخش قابل تعمیری توسط کاربر وجود ندارد. . \" ضرایب تصحیح برای nroff و 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 #] \& .\} . \" اکسنت‌های ساده برای nroff و 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 و nroff (چرخ آفتابگردانی) .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 . \" تصحیحات برای 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' . \" برای دستگاه‌های با وضوح پایین (crt و 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" .\" برای nroff، تراز کردن متن را غیرفعال کنید. پیوند با خط فاصله را همیشه غیرفعال کنید؛ .\" در اسناد فنی خطاهای بسیار زیادی ایجاد می‌کند. .if n .ad l .nh.SH "نام (NAME)" cpp \- پیش‌پردازنده C .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 پیش‌پردازش شود، تمام فاصله‌های تب (hard tabs) حذف خواهند شد و 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 می‌پردازد که یک ابرمجموعهٔ کوچک از قابلیت‌های استاندارد \s-1ISO\s0 زبان C را ارائه می‌دهد. در حالت پیش‌فرض، پیش‌پردازندهٔ \s-1GNU C\s0 چند مورد الزامی استاندارد را اعمال نمی‌کند. این‌ها قابلیت‌هایی هستند که به‌ندرت (یا هرگز) استفاده می‌شوند و ممکن است تغییرات غیرمنتظره‌ای در مفهوم برنامه‌ای که انتظار آن‌ها را ندارد پدید آورند. برای دستیابی به استاندارد دقیق \s-1ISO\s0 زبان C، بسته به نسخهٔ استاندارد مورد نظرتان، باید از گزینه‌های \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 با معناشناسی سنتی تعارضی ندارد، پیش‌پردازندهٔ سنتی نیز باید به همان صورت عمل کند. تفاوت‌های موجود، در بخش \fBTraditional 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 نشانه‌گذاری و پردازش می‌شود، درست مانند آنکه در مرحلهٔ سوم ترجمه درون دستورالعمل \fB#define\fR ظاهر شده باشد. به‌ویژه، وجود نویسه‌های خط جدید (newline) باعث قطع تعریف می‌شود. .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 را تعریف می‌کند. باید از این گزینه به‌طور یکنواخت هم برای کامپایل و هم برای پیوند دادن (linking) استفاده کنید. این گزینه در اهداف GNU/Linux، بیشتر مشتقات دیگر Unix و همچنین اهداف 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\-newline به چند سطر شکسته می‌شود. این قاعده فاقد دستور اجرایی است. .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 دستور می‌دهد تا برای هر وابستگی غیر از فایل اصلی، یک هدف ساختگی (phony target) اضافه کند، که باعث می‌شود هر یک از آن‌ها به هیچ‌چیز وابسته نباشد. این قواعد ساختگی خطاهایی را دور می‌زنند که \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 را حذف می‌کند، و پسوند فایل شیء (object) معمول پلتفرم را به آن می‌افزاید. نتیجه همان هدف (target) خواهد بود. .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 به عنوان مشخص‌کننده یک فایل شیء (object) مقصد در نظر گرفته می‌شود. .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)، پیوستن خطوط جدید فرار داده شده، و پردازش بیشتر دستورالعمل‌ها را مهار می‌کند. پیش‌پردازنده همچنان توضیح‌ها (comments) را تشخیص داده و حذف می‌کند، به طوری که می‌توانید فایلی را که با \fB\-C\fR پیش‌پردازش شده است بدون مشکل به کامپایلر ارسال کنید. در این حالت، پیش‌پردازنده یکپارچه چیزی بیش از یک نشانه‌گذار (tokenizer) برای بخش‌های جلویی (front ends) نیست. .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 محدود می‌شود. سایر عملیات‌های پیش‌پردازنده، مانند بسط ماکرو و تبدیل سه‌نگاره‌ها (trigraph) انجام نمی‌شوند. علاوه بر این، گزینه \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" پذیرش نام‌های نویسه جهانی (universal character names) و نویسه‌های گسترش‌یافته در شناسه‌ها. این گزینه به‌طور پیش‌فرض برای 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]" ردیابی موقعیت نشانه‌ها (tokens) در سراسر بسط‌های ماکرو. این به کامپایلر اجازه می‌دهد در صورت بروز خطای کامپایل در یک بسط ماکرو، اطلاعات تشخیصی درباره پشته بسط ماکروی فعلی صادر کند. استفاده از این گزینه باعث مصرف حافظه بیشتری توسط پیش‌پردازنده و کامپایلر می‌شود. پارامتر \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" تنظیم مجموعه نویسه اجرایی (execution character set)، مورد استفاده برای ثابت‌های رشته‌ای و نویسه‌ای. پیش‌فرض \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 execution character set)، مورد استفاده برای ثابت‌های رشته‌ای و نویسه‌ای عریض. پیش‌فرض یکی از گزینه‌های \s-1UTF\-32BE، UTF\-32LE، UTF\-16BE\s0 یا \s-1UTF\-16LE\s0 است، بسته به این‌که کدام‌یک با عرض \f(CW\*(C`wchar_t\*(C'\fR و ترتیب بایت big-endian یا little-endian استفاده‌شده برای تولید کد مطابقت داشته باشد. همانند \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" یک ادعا (assertion) با گزاره \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 رزرو شده‌اند و بنابراین نادیده گرفته می‌شوند. اگر \fIletters\fR مشخص‌شده رفتار متناقض داشته باشند، نتیجه تعریف‌نشده است. .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" اگر با سه‌نویسه‌هایی (trigraphs) برخورد شود که ممکن است معنای برنامه را تغییر دهند، هشدار می‌دهد. نویسه‌های سه‌تایی درون توضیح‌ها هشدار داده نمی‌شوند، مگر آن‌هایی که یک سطر جدیدِ گریز‌خورده ایجاد کنند. .Sp این گزینه به صورت ضمنی توسط \fB\-Wall\fR فعال می‌شود. اگر \fB\-Wall\fR داده نشود، این گزینه همچنان فعال است مگر اینکه trigraphها فعال شده باشند. برای دریافت تبدیل سه‌نویسه‌ای بدون هشدار، اما حفظ سایر هشدارهای \&\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 برای ماکروهای درونی (built-in)، ماکروهای تعریف‌شده در خط فرمان، و ماکروهای تعریف‌شده در فایل‌های include هشداری داده نمی‌شود. .Sp \&\fIنکته:\fR اگر ماکرویی واقعاً استفاده شده باشد اما فقط در بلوک‌های شرطی نادیده‌گرفته‌شده به کار رفته باشد، پیش‌پردازنده آن را بلااستفاده گزارش می‌کند. برای اجتناب از این هشدار در چنین حالتی، می‌توانید محدودهٔ تعریف ماکرو را مثلاً با انتقال آن به درون نخستین بلوک نادیده‌گرفته‌شده بهبود دهید. روش دیگر این است که یک استفادهٔ ساختگی (dummy) مانند زیر ارائه دهید: .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 تأثیر می‌گذارند. می‌توانید از آن‌ها برای مشخص کردن دایرکتوری‌ها یا پیشوندهایی جهت جستجوی فایل‌های include، یا برای کنترل خروجی وابستگی‌ها استفاده کنید. .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، از یکدیگر جدا شده‌اند و در آن‌ها به دنبال فایل‌های سرآیند (header) جستجو می‌شود. این نویسهٔ ویژه، \f(CW\*(C`PATH_SEPARATOR\*(C'\fR، وابسته به مقصد است و در زمان ساخت \s-1GCC\s0 تعیین می‌شود. برای مقصدهای مبتنی بر Microsoft Windows این نویسه یک نقطه-ویرگول و برای تقریباً همهٔ مقصدهای دیگر دونقطه است. .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 باشد، که در این صورت قوانین با استفاده از \&\fItarget\fR به عنوان نام هدف، در فایل \fIfile\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\-MM\fR بر \fB\-M\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)، نگارش ۱٫۳ یا هر نگارش بعدی منتشرشده توسط بنیاد نرم‌افزار آزاد صادر می‌شود. نسخه‌ای از این مجوز در صفحهٔ راهنمای \fIgfdl\fR\|(7) گنجانده شده است. این راهنما هیچ بخش ناوردایی ندارد. متن‌های روی جلد (a) (زیر را ببینید) و متن‌های پشت جلد (b) (زیر را ببینید) هستند. .PP (a) متن روی جلد \s-1FSF\s0 عبارت است از: .PP .Vb 1 \& A GNU Manual .Ve .PP (b) متن پشت جلد \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