.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "CPP 1" .TH CPP 1 2026-08-10 gcc-16.2.1 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 بیشتر گزینه‌های گرداننده (driver) \fBgcc\fR را می‌پذیرد که در اینجا فهرست نشده‌اند. برای جزئیات بیشتر به مستندات GCC مراجعه کنید..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 با این وجود، در اغلب موارد می‌توانید برای مواردی غیر از C نیز با موفقیت از cpp استفاده کنید. سایر زبان‌های برنامه‌نویسی شبه‌آلگول معمولاً امن هستند (Ada و غیره). زبان اسمبلی نیز با رعایت احتیاط همین‌گونه است. حالت \fB\-traditional\-cpp\fR فاصله‌های خالی بیشتری را حفظ می‌کند و در سایر موارد نیز آسان‌گیرتر است. با نوشتن کامنت‌ها به شیوهٔ C یا C++ به‌جای کامنت‌های زبان بومی و ساده نگه داشتن ماکروها، می‌توان از بسیاری از مشکلات جلوگیری کرد. .PP تا جای ممکن، باید از پیش‌پردازنده‌ای متناسب با زبانی که با آن کد می‌نویسید استفاده کنید. نسخه‌های مدرن اسمبلر GNU دارای امکانات ماکرو هستند. بیشتر زبان‌های برنامه‌نویسی سطح بالا سازوکار کامپایل شرطی و گنجاندن فایل مخصوص به خود را دارند. اگر هیچ‌کدام کارساز نبود، یک پردازندهٔ متنی عمومی واقعی مانند GNU M4 را امتحان کنید. .PP پیش‌پردازنده‌های C در برخی جزئیات با هم تفاوت دارند. این راهنما به بررسی پیش‌پردازندهٔ GNU C می‌پردازد که فرامجموعهٔ کوچکی از ویژگی‌های استاندارد ISO C را ارائه می‌دهد. پیش‌پردازندهٔ GNU C در حالت پیش‌فرض خود، چند مورد الزامی استاندارد را انجام نمی‌دهد. این‌ها ویژگی‌هایی هستند که به ندرت (یا شاید هرگز) استفاده می‌شوند و ممکن است تغییرات غافلگیرکننده‌ای در معنای برنامه‌ای که انتظار آن‌ها را ندارد ایجاد کنند. برای دستیابی به استاندارد دقیق ISO C، باید بسته به اینکه کدام نسخه از استاندارد را می‌خواهید، از گزینه‌های \fB\-std=c90\fR، \fB\-std=c99\fR، \&\fB\-std=c11\fR یا \fB\-std=c17\fR استفاده کنید. برای دریافت تمام هشدارهای تشخیصی اجباری، باید از \fB\-pedantic\fR نیز استفاده کنید. .PP این راهنما رفتار پیش‌پردازندهٔ ISO را توصیف می‌کند. برای به حداقل رساندن تفاوت‌های بی‌مورد، هر جا که رفتار پیش‌پردازندهٔ ISO با معناشناسی سنتی در تضاد نباشد، پیش‌پردازندهٔ سنتی نیز باید به همان شیوه رفتار کند. تفاوت‌های گوناگونی که وجود دارند در بخش \fBTraditional Mode\fR به تفصیل شرح داده شده‌اند. .PP برای شفافیت، مگر در مواردی که خلاف آن ذکر شده باشد، اشاره به \fBCPP\fR در این راهنما به GNU CPP دلالت دارد. .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" .PD 0 .IP \fB\-\-define\-macro=\fR\fIname\fR 4 .IX Item "--define-macro=name" .IP "\fB\-\-define\-macro\fR \fIname\fR" 4 .IX Item "--define-macro name" .PD ماکروی \fIname\fR را با مقدار اولیهٔ \f(CW1\fR از پیش تعریف می‌کند. .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4 .IX Item "-D name=definition" .PD 0 .IP \fB\-\-define\-macro=\fR\fIname\fR\fB=\fR\fIdefinition\fR 4 .IX Item "--define-macro=name=definition" .IP "\fB\-\-define\-macro\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4 .IX Item "--define-macro name=definition" .PD محتوای \fIdefinition\fR نشانه‌گذاری شده و به‌گونه‌ای پردازش می‌شود که گویی در فاز سوم ترجمه در یک دستورالعمل \fB#define\fR ظاهر شده است. به‌ویژه، تعریف ماکرو با نویسه‌های خط جدید (newline) تعبیه‌شده بریده می‌شود. .Sp اگر پیش‌پردازنده را از یک پوسته یا برنامه‌ای شبیه به آن فراخوانی می‌کنید، ممکن است لازم باشد از نحو نقل‌قول پوسته برای محافظت از نویسه‌هایی مانند فاصله‌ها که در نحو پوسته معنای خاصی دارند استفاده نمایید. .Sp اگر مایلید یک ماکروی تابع‌گونه را در خط فرمان تعریف کنید، فهرست آرگومان‌های آن را با پرانتزهای احاطه‌کننده پیش از علامت مساوی (در صورت وجود) بنویسید. پرانتزها برای بیشتر پوسته‌ها معنای خاصی دارند، بنابراین باید گزینه را در نقل‌قول قرار دهید. در \fBsh\fR و \fBcsh\fR، عبارت \&\fB\-D\*(Aq\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB\*(Aq\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" .PD 0 .IP \fB\-\-undefine\-macro=\fR\fIname\fR 4 .IX Item "--undefine-macro=name" .IP "\fB\-\-undefine\-macro\fR \fIname\fR" 4 .IX Item "--undefine-macro name" .PD هرگونه تعریف قبلی از \fIname\fR، چه توکار باشد و چه با یک گزینهٔ \fB\-D\fR ارائه شده باشد را لغو می‌کند. .IP "\fB\-include\fR \fIfile\fR" 4 .IX Item "-include file" .PD 0 .IP \fB\-\-include=\fR\fIfile\fR 4 .IX Item "--include=file" .IP "\fB\-\-include\fR \fIfile\fR" 4 .IX Item "--include file" .PD فایل \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" .PD 0 .IP \fB\-\-imacros=\fR\fIfile\fR 4 .IX Item "--imacros=file" .IP "\fB\-\-imacros\fR \fIfile\fR" 4 .IX Item "--imacros file" .PD دقیقاً مانند \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" ماکروهای اضافی مورد نیاز برای استفاده از کتابخانهٔ ریسه‌های POSIX را تعریف می‌کند. شما باید از این گزینه به‌طور هماهنگ برای هر دو مرحلهٔ کامپایل و پیوند (linking) استفاده کنید. این گزینه روی مقصدهای GNU/Linux، بیشتر سایر مشتقات یونیکس و همچنین روی مقصدهای Cygwin و MinGW در معماری x86 پشتیبانی می‌شود. .IP \fB\-M\fR 4 .IX Item "-M" .PD 0 .IP \fB\-\-dependencies\fR 4 .IX Item "--dependencies" .PD به جای خروجی دادن نتیجهٔ پیش‌پردازش، قاعده‌ای مناسب برای \fBmake\fR خروجی می‌دهد که وابستگی‌های فایل منبع اصلی را توصیف می‌کند. پیش‌پردازنده یک قاعدهٔ \fBmake\fR شامل نام فایل شیء (object file) برای آن فایل منبع، یک دونقطه و نام تمامی فایل‌های گنجانده‌شده را خروجی می‌دهد؛ از جمله فایل‌هایی که از گزینه‌های خط فرمان \fB\-include\fR یا \&\fB\-imacros\fR آمده‌اند. .Sp مگر آنکه صریحاً مشخص شده باشد (با \fB\-MT\fR یا \fB\-MQ\fR)، نام فایل شیء شامل نام فایل منبع است که هر پسوندی در آن با پسوند فایل شیء جایگزین شده و هر بخش دایرکتوری آغازین آن حذف شده است. اگر فایل‌های گنجانده‌شدهٔ زیادی وجود داشته باشند، قاعده با استفاده از \fB\e\fR\-خط‌جدید به چند خط تقسیم می‌شود. این قاعده هیچ فرمانی ندارد. .Sp این گزینه خروجی اشکال‌زدایی پیش‌پردازنده مانند \&\fB\-dM\fR را متوقف نمی‌کند. برای جلوگیری از آمیخته شدن چنین خروجی اشکال‌زدایی با قواعد وابستگی، باید با گزینهٔ \&\fB\-MF\fR فایل خروجی وابستگی را صریحاً مشخص کنید یا از متغیر محیطی مانند \&\fBDEPENDENCIES_OUTPUT\fR استفاده نمایید. خروجی اشکال‌زدایی همچنان طبق معمول به جریان خروجی عادی ارسال می‌شود. .Sp ارسال \fB\-M\fR به درایور مستلزم \fB\-E\fR است و هشدارها را با یک \fB\-w\fR ضمنی فرو می‌نشاند..IP \fB\-MM\fR 4 .IX Item "-MM" .PD 0 .IP \fB\-\-user\-dependencies\fR 4 .IX Item "--user-dependencies" .PD مشابه \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" .PD 0 .IP \fB\-\-print\-missing\-file\-dependencies\fR 4 .IX Item "--print-missing-file-dependencies" .PD در همراهی با گزینه‌ای مانند \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" این گزینه به CPP دستور می‌دهد که برای هر وابستگی به‌جز فایل اصلی، یک هدف ساختگی (phony target) اضافه کند، که باعث می‌شود هر یک به چیزی وابسته نباشند. این قواعد صوری خطاهایی را که در صورت حذف فایل‌های سرآیند بدون به‌روزرسانی متناظر در \fIMakefile\fR توسط \fBmake\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" تغییر هدف (target) قاعده‌ای که با تولید وابستگی منتشر می‌شود. به‌طور پیش‌فرض، CPP نام فایل ورودی اصلی را می‌گیرد، هر بخش دایرکتوری و هر پسوند فایل مانند \fB.c\fR را حذف می‌کند، و پسوند فایل شیء (object) معمول پلتفرم را اضافه می‌کند. نتیجه، هدف خواهد بود. .Sp گزینه \fB\-MT\fR هدف را دقیقاً همان رشته‌ای که مشخص می‌کنید تنظیم می‌کند. اگر چندین هدف می‌خواهید، می‌توانید آن‌ها را به‌عنوان یک آرگومان واحد برای \fB\-MT\fR مشخص کنید، یا از چندین گزینه \fB\-MT\fR بهره ببرید. .Sp برای مثال، \fB\-MT\ \*(Aq$(objpfx)foo.o\*(Aq\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 خاص هستند نقل‌قول‌گذاری (کوتیشن) می‌کند. دستور \fB\-MQ\ \*(Aq$(objpfx)foo.o\*(Aq\fR چنین نتیجه‌ای می‌دهد: .Sp .Vb 1 \& $$(objpfx)foo.o: foo.c .Ve .Sp هدف پیش‌فرض به‌طور خودکار نقل‌قول‌گذاری می‌شود، درست مانند اینکه با \&\fB\-MQ\fR مشخص شده باشد. .IP \fB\-MD\fR 4 .IX Item "-MD" .PD 0 .IP \fB\-\-write\-dependencies\fR 4 .IX Item "--write-dependencies" .PD گزینه \&\fB\-MD\fR معادل \fB\-M \-MF\fR \fIfile\fR است، با این تفاوت که \&\fB\-E\fR به‌طور ضمنی اعمال نمی‌شود. گرداننده (driver) \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" .PD 0 .IP \fB\-\-write\-user\-dependencies\fR 4 .IX Item "--write-user-dependencies" .PD مشابه \fB\-MD\fR است با این تفاوت که تنها فایل‌های سرآیند کاربر را ذکر می‌کند، نه فایل‌های سرآیند سیستم را. .IP \fB\-fpreprocessed\fR 4 .IX Item "-fpreprocessed" به پیش‌پردازنده اعلام می‌کند که فایل ورودی از قبل پیش‌پردازش شده است. این گزینه مواردی مانند بسط ماکروها، تبدیل نویسه‌های سه‌تایی (trigraph)، چسباندن خطوط جدید با نویسه گریز (escaped newline splicing)، و پردازش بیشتر دستورات را متوقف می‌کند. پیش‌پردازنده همچنان کامنت‌ها را شناسایی و حذف می‌کند، بنابراین می‌توانید فایلی را که با \fB\-C\fR پیش‌پردازش شده بدون مشکل به کامپایلر ارسال کنید. در این حالت، پیش‌پردازنده یکپارچه چیزی بیش از یک نشانه‌گذار (tokenizer) برای فرانت‌اندها نیست. .Sp اگر فایل ورودی یکی از پسوندهای \fB.i\fR، \fB.ii\fR یا \fB.mi\fR را داشته باشد، \&\fB\-fpreprocessed\fR به‌طور ضمنی فعال می‌شود. این‌ها پسوندهایی هستند که GCC برای فایل‌های پیش‌پردازش‌شده ایجادشده توسط \&\fB\-save\-temps\fR استفاده می‌کند. .IP \fB\-fdirectives\-only\fR 4 .IX Item "-fdirectives-only" هنگام پیش‌پردازش، دستورات پیش‌پردازنده (directives) را مدیریت می‌کند، اما ماکروها را بسط نمی‌دهد. .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#include "..."\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" هنگام پیش‌پردازش فایل‌های مستقر در دایرکتوری \fIold\fR، ماکروهای \f(CW\*(C`_\|_FILE_\|_\*(C'\fR و \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR را طوری بسط می‌دهد که گویی فایل‌ها در دایرکتوری \fInew\fR قرار دارند. از این گزینه می‌توان برای تبدیل یک مسیر مطلق به یک مسیر نسبی با استفاده از \fI.\fR به جای \&\fInew\fR بهره برد که می‌تواند منجر به ساخت‌های بازتولیدپذیرتر (reproducible builds) و مستقل از مکان شود. این گزینه همچنین بر \&\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) را که برای ثابت‌های رشته‌ای و نویسه‌ای استفاده می‌شود، تنظیم می‌کند. مقدار پیش‌فرض UTF\-8 است. \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) را برای ثابت‌های نویسه‌ای و رشته‌ای عریض تنظیم می‌کند. مقدار پیش‌فرض یکی از UTF\-32BE، UTF\-32LE، UTF\-16BE یا UTF\-16LE است، هرکدام که با عرض \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" مجموعه نویسه ورودی را که برای تبدیل از مجموعه نویسه فایل ورودی به مجموعه نویسه منبع مورد استفاده توسط GCC به کار می‌رود، تعیین می‌کند. پیش‌فرض UTF\-8 است. \fIcharset\fR می‌تواند هر کدگذاری پشتیبانی‌شده توسط روتین کتابخانه \f(CW\*(C`iconv\*(C'\fR سیستم باشد. .Sp اگر مجموعه نویسه ورودی UTF\-8 باشد، در صورت فعال بودن \fB\-Winvalid\-utf8\fR هشدارهایی درباره دنباله‌های واحد کد ناصحیح (ill\-formed code unit sequences) صادر می‌شود. در غیر این صورت، وقتی مجموعه نویسه ورودی با مجموعه نویسه اجرایی مطابقت داشته باشد، هیچ پیام تشخیصی صادر نمی‌شود. اگر آن‌ها متفاوت باشند، دنباله‌های واحد کد ناصحیح در حین تبدیل کد به مجموعه نویسه اجرایی منجر به خطا می‌شوند. .IP \fB\-fworking\-directory\fR 4 .IX Item "-fworking-directory" تولید نشانگرهای خط (linemarkers) را در خروجی پیش‌پردازنده فعال می‌کند تا کامپایلر از دایرکتوری کاری جاری در زمان پیش‌پردازش مطلع شود. هنگامی که این گزینه فعال باشد، پیش‌پردازنده پس از نشانگر خط اولیه، یک نشانگر خط دوم با دایرکتوری کاری جاری به همراه دو اسلش صادر می‌کند. GCC در صورت وجود این دایرکتوری در ورودی پیش‌پردازش‌شده، از آن به عنوان دایرکتوری صادرشده به عنوان دایرکتوری کاری جاری در برخی قالب‌های اطلاعات اشکال‌زدایی استفاده می‌کند. این گزینه در صورت فعال بودن اطلاعات اشکال‌زدایی به طور ضمنی فعال می‌شود، اما می‌توان با شکل نقیض \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" .PD 0 .IP "\fB\-\-assert\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "--assert predicate=answer" .IP \fB\-\-assert=\fR\fIpredicate\fR\fB=\fR\fIanswer\fR 4 .IX Item "--assert=predicate=answer" .PD یک گزاره شرطی (assertion) با محمول \fIpredicate\fR و پاسخ \&\fIanswer\fR ایجاد می‌کند. این قالب نسبت به شکل قدیمی‌تر \fB\-A\fR \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR، که هنوز پشتیبانی می‌شود، ترجیح داده می‌شود زیرا از نویسه‌های ویژه پوسته استفاده نمی‌کند. .Sp گزاره‌های شرطی قابلیتی منسوخ‌شده در پیش‌پردازنده هستند که تنها برای سازگاری با هدرهای سیستمی قدیمی در برخی مقصدها پشتیبانی می‌شوند. .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A -predicate=answer" .PD 0 .IP "\fB\-\-assert \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "--assert -predicate=answer" .IP \fB\-\-assert=\-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR 4 .IX Item "--assert=-predicate=answer" .PD یک گزاره شرطی با محمول \fIpredicate\fR و پاسخ \&\fIanswer\fR را لغو می‌کند. .IP \fB\-C\fR 4 .IX Item "-C" .PD 0 .IP \fB\-\-comments\fR 4 .IX Item "--comments" .PD کامنت‌ها را حذف نمی‌کند. همه کامنت‌ها به فایل خروجی منتقل می‌شوند، به جز کامنت‌های درون دستورالعمل‌های پردازش‌شده، که همراه با دستورالعمل حذف می‌شوند. .Sp هنگام استفاده از \fB\-C\fR باید آماده عوارض جانبی باشید؛ این گزینه باعث می‌شود پیش‌پردازنده با کامنت‌ها به عنوان نشانه‌ها (توکن‌ها)ی مستقل رفتار کند. به عنوان مثال، کامنت‌هایی که در ابتدای یک خط دستورالعمل ظاهر می‌شوند، این اثر را دارند که آن خط را به یک خط کد منبع معمولی تبدیل کنند، زیرا نخستین نشانه در آن خط دیگر \fB#\fR نخواهد بود. .IP \fB\-CC\fR 4 .IX Item "-CC" .PD 0 .IP \fB\-\-comments\-in\-macros\fR 4 .IX Item "--comments-in-macros" .PD کامنت‌ها را دور نمی‌ریزد، از جمله در طول بسط ماکروها. این گزینه شبیه به \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" .PD 0 .IP \fB\-\-no\-line\-commands\fR 4 .IX Item "--no-line-commands" .PD از تولید نشانگرهای خط در خروجی پیش‌پردازنده جلوگیری می‌کند. این گزینه ممکن است هنگام اجرای پیش‌پردازنده بر روی مواردی که کد C نیستند و قرار است به برنامه‌ای ارسال شوند که ممکن است با نشانگرهای خط دچار سردرگمی شود، مفید باشد. .IP \fB\-traditional\fR 4 .IX Item "-traditional" .PD 0 .IP \fB\-\-traditional\fR 4 .IX Item "--traditional" .IP \fB\-traditional\-cpp\fR 4 .IX Item "-traditional-cpp" .IP \fB\-\-traditional\-cpp\fR 4 .IX Item "--traditional-cpp" .PD تلاش می‌کند تا رفتار پیش‌پردازنده‌های C پیش از استاندارد را در مقایسه با پیش‌پردازنده‌های ISO C شبیه‌سازی کند. .Sp توجه داشته باشید که GCC در موارد دیگر تلاشی برای شبیه‌سازی یک کامپایلر C پیش از استاندارد نمی‌کند، و این گزینه‌ها فقط با سوئیچ \fB\-E\fR یا هنگام فراخوانی صریح CPP پشتیبانی می‌شوند. .IP \fB\-trigraphs\fR 4 .IX Item "-trigraphs" .PD 0 .IP \fB\-\-trigraphs\fR 4 .IX Item "--trigraphs" .PD از سه‌نگاره‌های (trigraphs) استاندارد ISO C پشتیبانی می‌کند. این‌ها دنباله‌های سه‌نویسه‌ای هستند که همگی با \fB??\fR شروع می‌شوند و توسط استاندارد ISO C تعریف شده‌اند تا نمایانگر نویسه‌های تکی باشند. برای مثال، \&\fB??/\fR نمایانگر \fB\e\fR است، بنابراین \fB\*(Aq??/n\*(Aq\fR یک ثابت نویسه‌ای برای خط جدید است. .Sp به طور پیش‌فرض، GCC سه‌نگاره‌ها را نادیده می‌گیرد، اما در حالت‌های منطبق بر استاندارد آن‌ها را تبدیل می‌کند. گزینه‌های \fB\-std\fR و \&\fB\-ansi\fR را ببینید. .IP \fB\-remap\fR 4 .IX Item "-remap" کد ویژه‌ای را برای دور زدن محدودیت‌های سیستم‌های فایلی که فقط نام‌های فایل بسیار کوتاه را مجاز می‌دانند، مانند MS\-DOS، فعال می‌کند. .IP \fB\-H\fR 4 .IX Item "-H" .PD 0 .IP \fB\-\-trace\-includes\fR 4 .IX Item "--trace-includes" .PD علاوه بر فعالیت‌های معمول دیگر، نام هر فایل هدر استفاده‌شده را چاپ می‌کند. هر نام به گونه‌ای تورفته می‌شود تا نشان دهد در چه عمقی از پشته \&\fB#include\fR قرار دارد. فایل‌های هدر پیش‌کامپایل‌شده نیز چاپ می‌شوند، حتی اگر نامعتبر تشخیص داده شوند؛ یک فایل هدر پیش‌کامپایل‌شده نامعتبر با \fB...x\fR و یک فایل معتبر با \fB...!\fR چاپ می‌شود. .IP \fB\-d\fR\fIletters\fR 4 .IX Item "-dletters" .PD 0 .IP \fB\-\-dump=\fR\fIletters\fR 4 .IX Item "--dump=letters" .IP "\fB\-\-dump\fR \fIletters\fR" 4 .IX Item "--dump letters" .PD دستور می‌دهد که در حین کامپایل، خروجی‌های اشکال‌زدایی (dumps) همان‌طور که توسط \&\fIletters\fR مشخص شده است ایجاد شوند. پرچم‌های مستندشده در اینجا مواردی هستند که به پیش‌پردازنده مربوط می‌شوند. سایر \fIletters\fR توسط خود کامپایلر تفسیر می‌شوند یا برای نسخه‌های آینده GCC رزرو شده‌اند و بنابراین بدون هشدار نادیده گرفته می‌شوند. اگر حروفی را در \fIletters\fR مشخص کنید که رفتارهای متناقض دارند، نتیجه نامشخص خواهد بود. .RS 4 .IP \fB\-dM\fR 4 .IX Item "-dM".PD 0 .IP \fB\-\-dump=M\fR 4 .IX Item "--dump=M" .PD به جای خروجی معمول، فهرستی از دستورالعمل‌های \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" .PD 0 .IP \fB\-\-dump=D\fR 4 .IX Item "--dump=D" .PD مانند \fB\-dM\fR است، با این تفاوت که \fIهم\fR دستورالعمل‌های \fB#define\fR و \fIهم\fR نتیجه پیش‌پردازش را در خروجی می‌آورد. هر دو نوع خروجی به فایل خروجی استاندارد هدایت می‌شوند. .IP \fB\-dN\fR 4 .IX Item "-dN" .PD 0 .IP \fB\-\-dump=N\fR 4 .IX Item "--dump=N" .PD مانند \fB\-dD\fR است، اما تنها نام ماکروها را صادر می‌کند و نه بسط آن‌ها را. .IP \fB\-dI\fR 4 .IX Item "-dI" .PD 0 .IP \fB\-\-dump=I\fR 4 .IX Item "--dump=I" .PD علاوه بر نتیجه پیش‌پردازش، دستورالعمل‌های \fB#include\fR را نیز در خروجی درج می‌کند. .IP \fB\-dU\fR 4 .IX Item "-dU" .PD 0 .IP \fB\-\-dump=U\fR 4 .IX Item "--dump=U" .PD مانند \fB\-dD\fR است، به جز اینکه فقط ماکروهایی که بسط یافته‌اند یا وضعیت تعریف آن‌ها در دستورالعمل‌های پیش‌پردازنده آزموده شده است در خروجی قرار می‌گیرند؛ خروجی تا زمان استفاده یا آزمایش ماکرو به تعویق می‌افتد؛ و دستورالعمل‌های \&\fB#undef\fR نیز برای ماکروهایی که آزموده شده‌اند اما در آن زمان تعریف‌نشده بوده‌اند در خروجی درج می‌شوند. .RE .RS 4 .RE .IP \fB\-fdebug\-cpp\fR 4 .IX Item "-fdebug-cpp" این گزینه تنها برای اشکال‌زدایی GCC مفید است. هنگامی که از CPP یا به همراه \&\fB\-E\fR استفاده شود، اطلاعات اشکال‌زدایی درباره نقشه‌های مکان (location maps) را تخلیه می‌کند. پیش از هر نشانه (token) در خروجی، اطلاعات نقشه‌ای که مکانش به آن تعلق دارد درج می‌شود. .Sp هنگامی که از GCC بدون \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" .IP \fB\-\-include\-directory\-after=\fR\fIdir\fR 4 .IX Item "--include-directory-after=dir" .IP "\fB\-\-include\-directory\-after\fR \fIdir\fR" 4 .IX Item "--include-directory-after dir" .IP \fB\-\-include\-directory=\fR\fIdir\fR 4 .IX Item "--include-directory=dir" .IP "\fB\-\-include\-directory\fR \fIdir\fR" 4 .IX Item "--include-directory dir" .PD دایرکتوری \fIdir\fR را به فهرست دایرکتوری‌هایی که در طول پیش‌پردازش برای فایل‌های سرایند جستجو می‌شوند، می‌افزاید. گزینه \fB\-\-include\-directory\fR نام مستعاری برای \fB\-I\fR است، در حالی که \fB\-\-include\-directory\-after\fR نام مستعاری برای \fB\-idirafter\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\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR اعمال می‌شوند. دایرکتوری‌های مشخص‌شده با \fB\-I\fR، \fB\-isystem\fR یا \fB\-idirafter\fR برای جستجوی هر دو دستورالعمل \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR و \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\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 سیستم. این امر برای اطمینان از آن است که سازوکار GCC برای رفع اشکال سرایندهای سیستمی معیوب و همچنین ترتیب دستورالعمل \f(CW\*(C`#include_next\*(C'\fR به طور ناخواسته تغییر نیابند. اگر واقعاً نیاز به تغییر ترتیب جستجوی دایرکتوری‌های سیستمی دارید، از گزینه‌های \fB\-nostdinc\fR و/یا \fB\-isystem\fR استفاده کنید. .RE .IP \fB\-I\-\fR 4 .IX Item "-I-" .PD 0 .IP \fB\-\-include\-barrier\fR 4 .IX Item "--include-barrier" .PD مسیر include را تقسیم می‌کند. این گزینه منسوخ شده است. لطفاً به جای دایرکتوری‌های \fB\-I\fR پیش از \fB\-I\-\fR از \fB\-iquote\fR استفاده کنید و گزینه \fB\-I\-\fR را حذف نمایید. .Sp هر دایرکتوری مشخص‌شده با گزینه‌های \fB\-I\fR پیش از \fB\-I\-\fR فقط برای سرایندهای درخواست‌شده با \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR جستجو می‌شوند؛ این دایرکتوری‌ها برای \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR جستجو نخواهند شد. اگر دایرکتوری‌های دیگری با گزینه‌های \fB\-I\fR بعد از \fB\-I\-\fR مشخص شوند، آن دایرکتوری‌ها برای تمامی دستورالعمل‌های \fB#include\fR جستجو می‌شوند. .Sp علاوه بر این، \fB\-I\-\fR مانع استفاده از دایرکتوریِ فایل جاری به عنوان نخستین دایرکتوری جستجو برای \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR می‌شود. هیچ راهی برای لغو این اثرِ \fB\-I\-\fR وجود ندارد. .IP "\fB\-iprefix\fR \fIprefix\fR" 4 .IX Item "-iprefix prefix" .PD 0 .IP \fB\-\-include\-prefix=\fR\fIprefix\fR 4 .IX Item "--include-prefix=prefix" .IP "\fB\-\-include\-prefix\fR \fIprefix\fR" 4 .IX Item "--include-prefix prefix" .PD مقدار \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" .IP \fB\-\-include\-with\-prefix=\fR\fIprefix\fR 4 .IX Item "--include-with-prefix=prefix" .IP "\fB\-\-include\-with\-prefix\fR \fIprefix\fR" 4 .IX Item "--include-with-prefix prefix" .IP \fB\-\-include\-with\-prefix\-after=\fR\fIprefix\fR 4 .IX Item "--include-with-prefix-after=prefix" .IP "\fB\-\-include\-with\-prefix\-after\fR \fIprefix\fR" 4 .IX Item "--include-with-prefix-after prefix" .IP \fB\-\-include\-with\-prefix\-before=\fR\fIprefix\fR 4 .IX Item "--include-with-prefix-before=prefix" .IP "\fB\-\-include\-with\-prefix\-before\fR \fIprefix\fR" 4 .IX Item "--include-with-prefix-before prefix" .PD دایرکتوری \fIdir\fR را به پیشوندی که قبلاً با \&\fB\-iprefix\fR مشخص شده اضافه می‌کند و دایرکتوری حاصل را به مسیر جستجوی include می‌افزاید. \fB\-iwithprefixbefore\fR آن را در همان جایی قرار می‌دهد که \fB\-I\fR قرار می‌داد؛ \fB\-iwithprefix\fR آن را در جایی قرار می‌دهد که \fB\-idirafter\fR می‌گذاشت. .Sp گزینه‌های \&\fB\-\-include\-with\-prefix\fR و \fB\-\-include\-with\-prefix\-after\fR هر دو نام‌های مستعاری برای \fB\-iwithprefix\fR هستند، در حالی که \&\fB\-\-include\-with\-prefix\-before\fR یک نام مستعار برای \&\fB\-iwithprefixbefore\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\-imultiarch\fR \fIdir\fR" 4 .IX Item "-imultiarch dir" از \fIdir\fR به عنوان یک زیردایرکتوری از دایرکتوریِ حاوی سرآیندهای ++C مختص معماری استفاده می‌کند. .IP \fB\-nostdinc\fR 4 .IX Item "-nostdinc" .PD 0 .IP \fB\-\-no\-standard\-includes\fR 4 .IX Item "--no-standard-includes" .PD دایرکتوری‌های استاندارد سیستم را برای فایل‌های سرآیند جستجو نمی‌کند. تنها دایرکتوری‌هایی جستجو می‌شوند که به‌طور صریح با گزینه‌های \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" .PD 0 .IP \fB\-\-embed\-directory=\fR\fIdir\fR 4 .IX Item "--embed-directory=dir" .IP "\fB\-\-embed\-directory\fR \fIdir\fR" 4 .IX Item "--embed-directory dir" .PD دایرکتوری \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" در صورت برخورد با هرگونه سه‌نویسه‌ای (trigraph) که ممکن است معنای برنامه را تغییر دهد، هشدار می‌دهد. در مورد سه‌نویسه‌های درون توضیحات هشداری داده نمی‌شود، مگر مواردی که یک خط جدیدِ گریزخورده ایجاد کنند. .Sp این گزینه به‌طور ضمنی توسط \fB\-Wall\fR فعال می‌شود. اگر \fB\-Wall\fR مشخص نشده باشد، این گزینه همچنان فعال است مگر اینکه trigraphها فعال شده باشند. برای تبدیل 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 بسط داده می‌شود)، هشدار می‌دهد. چنین کاربردی قابل‌حمل (portable) نیست. این هشدار همچنین توسط \fB\-Wpedantic\fR و \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wunused\-macros\fR 4 .IX Item "-Wunused-macros" دربارهٔ ماکروهای تعریف‌شده در فایل اصلی که استفاده نشده‌اند هشدار می‌دهد. یک ماکرو زمانی \fIاستفاده‌شده\fR تلقی می‌شود که حداقل یک بار بسط داده شود یا وجود آن بررسی گردد. پیش‌پردازنده همچنین اگر ماکرو در زمان بازتعریف یا لغو تعریف (undefined) استفاده نشده باشد، هشدار می‌دهد. .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" این بخش متغیرهای محیطی را شرح می‌دهد که بر نحوهٔ کارکرد CPP تأثیر می‌گذارند. می‌توانید از آن‌ها برای تعیین دایرکتوری‌ها یا پیشوندهایی که هنگام جستجوی فایل‌های include استفاده می‌شوند، یا برای کنترل خروجی وابستگی‌ها استفاده کنید. .PP توجه داشته باشید که همچنین می‌توانید مکان‌های جستجو را با استفاده از گزینه‌هایی مانند \&\fB\-I\fR مشخص کرده و خروجی وابستگی را با گزینه‌هایی مانند \&\fB\-M\fR کنترل کنید. این گزینه‌ها بر متغیرهای محیطی اولویت دارند و متغیرهای محیطی نیز به نوبهٔ خود بر پیکربندی GCC تقدم دارند. .IP \fBCPATH\fR 4 .IX Item "CPATH" .PD 0 .IP \fBC_INCLUDE_PATH\fR 4 .IX Item "C_INCLUDE_PATH" .IP \fBCPLUS_INCLUDE_PATH\fR 4 .IX Item "CPLUS_INCLUDE_PATH" .IP \fBOBJC_INCLUDE_PATH\fR 4 .IX Item "OBJC_INCLUDE_PATH" .PD مقدار هر متغیر فهرستی از دایرکتوری‌هاست که با یک نویسهٔ ویژه از هم جدا شده‌اند (بسیار شبیه به \fBPATH\fR)، که در آن‌ها فایل‌های سرایند (header files) جستجو می‌شوند. این نویسهٔ ویژه، \f(CW\*(C`PATH_SEPARATOR\*(C'\fR، وابسته به مقصد (target\-dependent) است و هنگام ساخت GCC تعیین می‌شود. برای مقصدهای مبتنی بر Microsoft Windows، این نویسه یک نقطه‌ویرگول (semicolon) است و برای تقریباً تمامی مقصدهای دیگر دو‌نقطه (colon) می‌باشد. .Sp متغیر \&\fBCPATH\fR فهرستی از دایرکتوری‌ها را مشخص می‌کند که باید مانند زمانی که با \fB\-I\fR مشخص شده‌اند جستجو شوند، اما پس از هر مسیری که با گزینه‌های \fB\-I\fR در خط فرمان داده شده است. این متغیر محیطی صرف‌نظر از اینکه چه زبانی در حال پیش‌پردازش است استفاده می‌شود. .Sp بقیهٔ متغیرهای محیطی تنها هنگام پیش‌پردازش زبان مشخص‌شده اعمال می‌شوند. هر یک فهرستی از دایرکتوری‌ها را مشخص می‌کند که باید مانند زمانی که با \fB\-isystem\fR مشخص شده‌اند جستجو شوند، اما پس از هر مسیری که با گزینه‌های \fB\-isystem\fR در خط فرمان داده شده است. .Sp در تمامی این متغیرها، یک مؤلفهٔ خالی به کامپایلر دستور می‌دهد تا دایرکتوری کاری جاری خود را جستجو کند. مؤلفه‌های خالی می‌توانند در ابتدا یا انتهای یک مسیر ظاهر شوند. به عنوان مثال، اگر مقدار \&\fBCPATH\fR برابر با \f(CW\*(C`:/special/include\*(C'\fR باشد، اثری مشابه با \fB\-I.\ \-I/special/include\fR دارد. .IP \fBDEPENDENCIES_OUTPUT\fR 4 .IX Item "DEPENDENCIES_OUTPUT" اگر این متغیر مقداردهی شده باشد، مقدار آن نحوهٔ خروجی دادن وابستگی‌ها برای Make را بر اساس فایل‌های سرایند غیرسیستمیِ پردازش‌شده توسط کامپایلر مشخص می‌کند. فایل‌های سرایند سیستمی در خروجی وابستگی نادیده گرفته می‌شوند. .Sp مقدار \fBDEPENDENCIES_OUTPUT\fR می‌تواند فقط نام یک فایل باشد، که در این حالت قواعد Make در آن فایل نوشته می‌شوند و نام هدف (target) از روی نام فایل مبدأ حدس زده می‌شود. یا اینکه این مقدار می‌تواند به صورت \&\fIfile\fR\fB \fR\fItarget\fR باشد که در این حالت قواعد در فایل \fIfile\fR و با استفاده از \fItarget\fR به عنوان نام هدف نوشته می‌شوند. .Sp به عبارت دیگر، این متغیر محیطی معادل با ترکیب گزینه‌های \fB\-MM\fR و \fB\-MF\fR، به همراه یک گزینهٔ اختیاری \fB\-MT\fR است. .IP \fBSUNPRO_DEPENDENCIES\fR 4 .IX Item "SUNPRO_DEPENDENCIES" این متغیر مشابه \fBDEPENDENCIES_OUTPUT\fR است (به بالا مراجعه کنید)، با این تفاوت که فایل‌های سرایند سیستمی نادیده گرفته نمی‌شوند، بنابراین بیانگر \&\fB\-M\fR به جای \fB\-MM\fR است. با این حال، وابستگی به فایل ورودی اصلی حذف می‌شود. .IP \fBSOURCE_DATE_EPOCH\fR 4 .IX Item "SOURCE_DATE_EPOCH" اگر این متغیر تنظیم شده باشد، مقدار آن یک برچسب زمان یونیکس (UNIX timestamp) را مشخص می‌کند تا به جای تاریخ و زمان جاری در ماکروهای \f(CW\*(C`_\|_DATE_\|_\*(C'\fR و \f(CW\*(C`_\|_TIME_\|_\*(C'\fR استفاده شود، به طوری که برچسب‌های زمانی تعبیه‌شده بازتولیدپذیر (reproducible) شوند. .Sp مقدار \fBSOURCE_DATE_EPOCH\fR باید یک برچسب زمان یونیکس باشد، تعریف‌شده به عنوان تعداد ثانیه‌ها (بدون احتساب ثانیه‌های کبیسه) از 01 Jan 1970 00:00:00 که در قالب ASCII نشان داده می‌شود؛ دقیقاً همسان با خروجی \&\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" \&\fBgpl\fR\|(7)، \fBgfdl\fR\|(7)، \fBfsf\-funding\fR\|(7)، \&\fBgcc\fR\|(1) و مدخل‌های Info برای \fIcpp\fR و \fIgcc\fR. .SH "کپی‌رایت و تکثیر (COPYRIGHT)" .IX Header "COPYRIGHT" کپی‌رایت (c) 1987\-2026 Free Software Foundation, Inc. .PP اجازه‌ی نسخه‌برداری، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نگارش 1.3 یا هر نگارش بعدیِ منتشرشده توسط بنیاد نرم‌افزارهای آزاد (Free Software Foundation) اعطا می‌شود. نسخه‌ای از این مجوز در صفحهٔ راهنمای \fBgfdl\fR\|(7) گنجانده شده است. این راهنما هیچ بخش تغییرناپذیری (Invariant Sections) ندارد. متن‌های روی جلد (a) (پایین را ببینید) و متن‌های پشت جلد (b) (پایین را ببینید) هستند. .PP (a) متن روی جلد FSF عبارت است از: .PP .Vb 1 \& یک راهنمای گنو .Ve .PP (b) متن پشت جلد FSF عبارت است از: .PP .Vb 3 \& شما آزادی نسخه‌برداری و ویرایش این راهنمای گنو را دارید، مانند نرم‌افزار \& گنو. نسخه‌های منتشرشده توسط بنیاد نرم‌افزارهای آزاد، برای توسعهٔ \& گنو بودجه جمع‌آوری می‌کنند. .Ve