.\" 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)" 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 اگر پیش‌پردازنده را از طریق یک پوسته (shell) یا برنامه‌ای مشابه فراخوانی می‌کنید، ممکن است برای محافظت از نویسه‌هایی مانند فاصله که در نحو پوسته معنای خاصی دارند، نیاز به استفاده از ساختار نقل‌قول (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 نادیده گرفته شده و دور ریخته می‌شود. ماکروهایی که در آن تعریف شده‌اند همچنان تعریف‌شده باقی می‌مانند. این امر به شما امکان می‌دهد تمام ماکروهای یک سرآیند (header) را بدون پردازش اعلان‌های آن دریافت کنید. .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 تولید می‌کند که شامل نام فایل شیء (object file) برای آن فایل منبع، یک دو‌نقطه، و نام تمامی فایل‌های گنجانده‌شده (از جمله مواردی که از طریق گزینه‌های خط فرمان \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 این بدان معناست که استفاده از علامت‌های کوچکتر/بزرگتر (angle brackets) یا نقل‌قول دوتایی در دستورالعمل \&\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 را حذف می‌کند، و پسوند معمول فایل‌های شیء در آن پلتفرم را به آن می‌افزاید. نتیجه، هدف نهایی خواهد بود. .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" نام‌های نویسه جهانی (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# را تعیین می‌کند. مقدار پیش‌فرض ۲۰۰ است. .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) را مشخص می‌کند. این به پیش‌پردازنده کمک می‌کند تا شماره ستون‌ها را در هشدارها یا خطاها به درستی گزارش دهد، حتی اگر در خط از نویسه تب استفاده شده باشد. اگر مقدار کمتر از ۱ یا بیشتر از ۱۰۰ باشد، گزینه نادیده گرفته می‌شود. مقدار پیش‌فرض ۸ است. .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 بهره برد که می‌تواند منجر به ایجاد ساخت‌های بازتولیدپذیرتر (reproducible) و مستقل از مکان شود. این گزینه همچنین بر \&\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" مجموعه نویسه‌های زمان اجرای پهن را برای ثابت‌های رشته‌ای و نویسه‌ای پهن تعیین می‌کند. مقدار پیش‌فرض یکی از گزینه‌های \s-1UTF\-32BE\s0، \s-1UTF\-32LE\s0، \s-1UTF\-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" تولید نشانگرهای خط (linemarkers) را در خروجی پیش‌پردازنده فعال می‌کند تا کامپایلر از دایرکتوری کاری جاری در زمان پیش‌پردازش مطلع شود. هنگامی که این گزینه فعال باشد، پیش‌پردازنده پس از نشانگر خط اولیه، یک نشانگر خط دوم با دایرکتوری کاری جاری که دو اسلش در انتهای آن قرار دارد صادر می‌کند. در صورت وجود این دایرکتوری در ورودی پیش‌پردازش‌شده، \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" لغو یک گزاره (assertion) با محمول \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" از تولید نشانگرهای خط (linemarkers) در خروجی پیش‌پردازنده جلوگیری می‌کند. این گزینه ممکن است زمانی مفید باشد که پیش‌پردازنده روی چیزی اجرا می‌شود که کد 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" علاوه بر سایر فعالیت‌های عادی، نام هر فایل سرایند (header) استفاده‌شده را چاپ می‌کند. هر نام تورفتگی دارد تا مشخص شود در چه عمقی از پشتهٔ \&\fB#include\fR قرار دارد. فایل‌های سرایند پیش‌کامپایل‌شده نیز چاپ می‌شوند، حتی اگر نامعتبر تشخیص داده شوند؛ یک فایل سرایند پیش‌کامپایل‌شدهٔ نامعتبر با \fB...x\fR و فایل معتبر با \fB...!\fR چاپ می‌شود. .IP "\fB\-d\fR\fIletters\fR" 4 .IX Item "-dletters" تعیین می‌کند که در طول کامپایل، رونوشت‌های اشکال‌زدایی (debugging dumps) مطابق با \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) یافت شوند که ممکن است معنای برنامه را تغییر دهند، هشدار می‌دهد. سه‌نگاره‌های درون کامنت‌ها هشداری در پی ندارند، به‌جز آن‌هایی که یک خط‌جدید گریزدار (escaped newline) تشکیل می‌دهند. .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 بسط داده می‌شود)، هشدار می‌دهد. چنین کاربردی سازگار (portable) نیست. این هشدار همچنین با \fB\-Wpedantic\fR و \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wunused\-macros\fR" 4 .IX Item "-Wunused-macros" دربارهٔ ماکروهای تعریف‌شده در فایل اصلی که استفاده نشده‌اند هشدار می‌دهد. یک ماکرو در صورتی \fIاستفاده‌شده\fR تلقی می‌شود که حداقل یک‌بار بسط داده شده یا وجود آن بررسی شده باشد. پیش‌پردازنده همچنین اگر ماکرو در زمان بازتعریف یا لغو تعریف (undefine) استفاده نشده باشد، هشدار می‌دهد. .Sp ماکروهای توکار (built-in)، ماکروهای تعریف‌شده در خط فرمان، و ماکروهای تعریف‌شده در فایل‌های include هشداری به همراه ندارند. .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 تأثیر می‌گذارند. می‌توانید از آن‌ها برای تعیین دایرکتوری‌ها یا پیشوندهای مورد استفاده هنگام جستجوی فایل‌های 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، که فایل‌های سرآیند در آن‌ها جستجو می‌شوند. نویسهٔ ویژه، \f(CW\*(C`PATH_SEPARATOR\*(C'\fR، وابسته به هدف است و در زمان ساخت \s-1GCC\s0 تعیین می‌شود. برای مقصدهای مبتنی بر Microsoft Windows این نویسه یک نقطه‌ویرگول (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\-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 استفاده شود، تا برچسب‌های زمانی تعبیه‌شده بازتولیدپذیر (reproducible) گردند. .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) گنجانده شده است. این راهنما فاقد هرگونه بخش ناوردا (Invariant Sections) است. متن‌های روی جلد در بند (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