.\" -*- 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 "GCC 1" .TH GCC 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)" gcc \- کامپایلر زبان‌های C و ++C در پروژهٔ گنو .SH "خلاصه دستور (SYNOPSIS)" .IX Header "SYNOPSIS" gcc [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] [\fB\-std=\fR\fIstandard\fR] [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR] [\fB\-W\fR\fIwarn\fR...] [\fB\-Wpedantic\fR] [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...] [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR] [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine\-option\fR...] [\fB\-o\fR \fIoutfile\fR] [@\fIfile\fR] \fIinfile\fR... .PP تنها کاربردی‌ترین گزینه‌ها در اینجا فهرست شده‌اند؛ برای سایر موارد به بخش‌های پایین‌تر مراجعه کنید. \fBg++\fR عمدتاً همان گزینه‌های مشابه با \fBgcc\fR را می‌پذیرد. .SH "توضیحات (DESCRIPTION)" .IX Header "DESCRIPTION" هنگامی که GCC را فراخوانی می‌کنید، معمولاً پیش‌پردازش، کامپایل، اسمبلی و پیونددهی را انجام می‌دهد. «گزینه‌های سراسری» (overall options) به شما این امکان را می‌دهند که این فرایند را در یک مرحلهٔ میانی متوقف کنید. برای نمونه، گزینهٔ \fB\-c\fR مشخص می‌کند که پیونددهنده اجرا نشود. در این صورت، خروجی شامل فایل‌های شیء تولیدشده توسط اسمبلر خواهد بود. .PP سایر گزینه‌ها به یک یا چند مرحله از پردازش تحویل داده می‌شوند. برخی گزینه‌ها پیش‌پردازنده و برخی دیگر خود کامپایلر را کنترل می‌کنند. گزینه‌های دیگری نیز اسمبلر و پیونددهنده را کنترل می‌کنند؛ بیشتر این موارد در اینجا مستند نشده‌اند، چرا که به ندرت به استفاده از هیچ‌یک از آن‌ها نیاز پیدا خواهید کرد. .PP بیشتر گزینه‌های خط فرمانی که می‌توانید با GCC به کار ببرید برای برنامه‌های C کاربرد دارند؛ هنگامی که یک گزینه تنها برای زبان دیگری (معمولاً ++C) مفید است، در توضیحات صراحتاً به آن اشاره می‌شود. اگر توضیحات مربوط به یک گزینهٔ مشخص، نامی از زبان مبدأ نبرد، می‌توانید از آن گزینه برای همهٔ زبان‌های پشتیبانی‌شده استفاده کنید. .PP روش معمول برای اجرای GCC، اجرای فایل اجرایی موسوم به \fBgcc\fR است، یا \&\fImachine\fR\fB\-gcc\fR هنگام کامپایل متقابل (cross-compiling)، یا \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR برای اجرای یک نسخهٔ مشخص از GCC. هنگامی که برنامه‌های ++C را کامپایل می‌کنید، باید در عوض GCC را به صورت \fBg++\fR فراخوانی کنید. .PP برنامهٔ \fBgcc\fR گزینه‌ها و نام‌های فایل را به عنوان عملوند می‌پذیرد. بسیاری از گزینه‌ها نام‌های چندحرفی دارند؛ بنابراین چندین گزینهٔ تک‌حرفی \fIنمی‌توانند\fR با یکدیگر گروه‌بندی شوند: \fB\-dv\fR بسیار متفاوت از \fB\-d\ \-v\fR است. .PP شما می‌توانید گزینه‌ها و سایر آرگومان‌ها را ترکیب کنید. در بیشتر موارد، ترتیبی که استفاده می‌کنید اهمیتی ندارد. با این حال، هنگامی که از چندین گزینه از یک نوع استفاده می‌کنید، ترتیب اهمیت پیدا می‌کند؛ برای نمونه اگر \fB\-L\fR را بیش از یک بار مشخص کنید، دایرکتوری‌ها به ترتیبی که مشخص شده‌اند جستجو می‌شوند. همچنین، محل قرارگیری گزینهٔ \fB\-l\fR نیز دارای اهمیت است. .PP بسیاری از گزینه‌ها نام‌های طولانی دارند که با \fB\-f\fR یا با \&\fB\-W\fR آغاز می‌شوند\-\-\-برای نمونه، \&\fB\-fmove\-loop\-invariants\fR، \fB\-Wformat\fR و غیره. بیشتر این گزینه‌ها هم فرم مثبت و هم فرم منفی دارند؛ فرم منفی \&\fB\-ffoo\fR به صورت \fB\-fno\-foo\fR است. این راهنما تنها یکی از این دو فرم را مستند می‌کند، یعنی هر کدام که پیش‌فرض نباشد. .PP برخی گزینه‌ها یک یا چند آرگومان دریافت می‌کنند که معمولاً با یک فاصله یا علامت مساوی (\fB=\fR) از نام گزینه جدا می‌شوند. مگر آنکه به‌گونهٔ دیگری مستند شده باشد، یک آرگومان می‌تواند عددی یا رشته باشد. آرگومان‌های عددی معمولاً باید اعداد صحیح کوچک نامنفی (unsigned) در مبنای ۱۰ یا ۱۶ (هگزادسیمال) باشند. آرگومان‌های هگزادسیمال باید با پیشوند \fB0x\fR آغاز شوند. آرگومان‌های گزینه‌هایی که نوعی آستانهٔ اندازه را تعیین می‌کنند می‌توانند اعداد صحیح در مبنای ۱۰ یا ۱۶ به دلخواه بزرگ باشند که یک پسوند اندازهٔ بایت به دنبال آن‌ها می‌آید و مضربی از بایت‌ها را مشخص می‌کند؛ مانند \f(CW\*(C`kB\*(C'\fR و \f(CW\*(C`KiB\*(C'\fR به ترتیب برای کیلوبایت و کیبی‌بایت، \&\f(CW\*(C`MB\*(C'\fR و \f(CW\*(C`MiB\*(C'\fR برای مگابایت و مبی‌بایت، \f(CW\*(C`GB\*(C'\fR و \&\f(CW\*(C`GiB\*(C'\fR برای گیگابایت و گیبی‌بایت، و الی آخر. چنین آرگومان‌هایی در متن پیش رو با \fIbyte\-size\fR مشخص شده‌اند. برای فهرست کامل و توضیحات پیشوندهای باینری و ده‌دهی اندازهٔ بایت، به استانداردهای NIST، IEC و سایر استانداردهای ملی و بین‌المللی مرتبط مراجعه کنید..SH "گزینه‌ها (OPTIONS)" .IX Header "OPTIONS" .SS "خلاصه گزینه‌ها (Option Summary)" .IX Subsection "Option Summary" در اینجا خلاصه‌ای از تمام گزینه‌ها، گروه‌بندی‌شده بر اساس نوع، آورده شده است. توضیحات مربوطه در بخش‌های بعدی آمده است. .IP "\fIگزینه‌های کلی (Overall Options)\fR" 4 .IX Item "Overall Options" \&\fB\-c \-S \-E \-o\fR \fIfile\fR \&\fB\-dumpbase\fR \fIdumpbase\fR \fB\-dumpbase\-ext\fR \fIauxdropsuf\fR \&\fB\-dumpdir\fR \fIdumppfx\fR \fB\-x\fR \fIlanguage\fR \&\fB\-v \-### \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]] \fB\-\-target\-help \-\-version \&\-pass\-exit\-codes \-pipe \-wrapper @\fR\fIfile\fR \fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \fB\-fcanon\-prefix\-map \&\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR \&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fada\-spec\-parent=\fR\fIunit\fR \&\fB\-fdump\-go\-spec=\fR\fIfile\fR \&\fB\-\-assemble \-\-compile \-\-dumpbase\fR \fIdumpbase\fR \&\fB\-\-dumpbase\-ext\fR \fIauxdropsuf\fR \fB\-\-dumpdir\fR \fIdumppfx\fR \&\fB\-\-language=\fR\fIlanguage\fR \fB\-\-output=\fR\fIfile\fR \fB\-\-pass\-exit\-codes \&\-\-pipe \-\-preprocess \-\-verbose\fR .IP "\fIگزینه‌های زبان C (C Language Options)\fR" 4 .IX Item "C Language Options" \&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-aux\-info\fR \fIfilename\fR \&\fB\-fno\-asm \&\-fno\-builtin \-fno\-builtin\-\fR\fIfunction\fR \fB\-fcond\-mismatch \&\-ffreestanding \-fgimple \-fgnu\-tm \-fgnu89\-inline \-fhosted \&\-flax\-vector\-conversions \-fms\-extensions \&\-fpermitted\-flt\-eval\-methods=\fR\fIstandard\fR \&\fB\-fplan9\-extensions \-fsigned\-bitfields \-funsigned\-bitfields \&\-fsigned\-char \-funsigned\-char \-fstrict\-flex\-arrays[=\fR\fIn\fR\fB] \&\-fsso\-struct=\fR\fIendianness\fR \fB\-\-ansi\fR .IP "\fIگزینه‌های زبان ++C (C++ Language Options)\fR" 4 .IX Item "C++ Language Options" \&\fB\-\-compile\-std\-module \&\-fabi\-compat\-version=\fR\fIn\fR \fB\-fabi\-version=\fR\fIn\fR \&\fB\-fno\-access\-control \-faligned\-new=\fR[\fIn\fR] \&\fB\-fno\-assume\-sane\-operators\-new\-delete \&\-fchar8_t \-fcheck\-new \&\-fconcepts \-fconcepts\-diagnostics\-depth=\fR\fIn\fR \&\fB\-fconstexpr\-depth=\fR\fIn\fR \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR \&\fB\-fconstexpr\-loop\-limit=\fR\fIn\fR \fB\-fconstexpr\-ops\-limit=\fR\fIn\fR \&\fB\-fcontracts \&\-fcontract\-evaluation\-semantic=\fR[\fBignore\fR|\fBobserve\fR|\fBenforce\fR|\fBquick_enforce\fR] \&\fB\-fcontracts\-conservative\-ipa \-fcontract\-checks\-outlined \&\-fcontract\-disable\-optimized\-checks \&\-fcontracts\-client\-check=\fR[\fBnone\fR|\fBpre\fR|\fBall\fR] \&\fB\-fcontracts\-definition\-check=\fR[\fBon\fR|\fBoff\fR] \&\fB\-fcoroutines \-fdiagnostics\-all\-candidates \&\-fno\-elide\-constructors \&\-fno\-enforce\-eh\-specs \&\-fext\-numeric\-literals \&\-fno\-gnu\-keywords \&\-fno\-immediate\-escalation \&\-fno\-implement\-inlines \&\-fimplicit\-constexpr \&\-fno\-implicit\-inline\-templates \&\-fno\-implicit\-templates \&\-fmodule\-header\fR[\fB=\fR\fIkind\fR] \&\fB\-fmodule\-implicit\-inline \&\-fno\-module\-lazy \&\-fmodule\-mapper=\fR\fIspecification\fR \&\fB\-fmodule\-only \&\-fmodules \&\-fms\-extensions \&\-fnew\-inheriting\-ctors \&\-fnew\-ttp\-matching \&\-fno\-nonansi\-builtins \-fnothrow\-opt \-fno\-operator\-names \&\-fno\-optional\-diags \&\-fno\-pretty\-templates \-frange\-for\-ext\-temps \-freflection \&\-fno\-rtti \-fsized\-deallocation \&\-fstrict\-enums \-fstrong\-eval\-order\fR[\fB=\fR\fIkind\fR] \&\fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR \&\fB\-ftemplate\-depth=\fR\fIn\fR \&\fB\-fno\-threadsafe\-statics \-fuse\-cxa\-atexit \-fno\-use\-cxa\-get\-exception\-ptr \&\-fno\-weak \-nostdinc++ \&\-fvisibility\-inlines\-hidden \&\-fvisibility\-ms\-compat \&\-flang\-info\-include\-translate\fR[\fB=\fR\fIheader\fR] \&\fB\-flang\-info\-include\-translate\-not \&\-flang\-info\-module\-cmi\fR[\fB=\fR\fImodule\fR] \&\fB\-stdlib=\fR\fIlibstdc++,libc++\fR \&\fB\-Wabbreviated\-auto\-in\-template\-arg \&\-Wabi\-tag \-Waligned\-new\fR[\fB=\fR\fIkind\fR] \&\fB\-Wcatch\-value \-Wcatch\-value=\fR\fIn\fR \&\fB\-Wno\-class\-conversion \-Wclass\-memaccess \&\-Wcomma\-subscript \-Wconditionally\-supported \&\-Wno\-conversion\-null \-Wctad\-maybe\-unsupported \&\-Wctor\-dtor\-privacy \-Wdangling\-reference \&\-Wno\-defaulted\-function\-deleted \&\-Wno\-delete\-incomplete \&\-Wdelete\-non\-virtual\-dtor \-Wno\-deprecated\-array\-compare \&\-Wdeprecated\-copy \-Wdeprecated\-copy\-dtor \&\-Wno\-deprecated\-enum\-enum\-conversion \-Wno\-deprecated\-enum\-float\-conversion \&\-Wno\-deprecated\-literal\-operator \-Wdeprecated\-variadic\-comma\-omission \&\-Weffc++ \-Wno\-elaborated\-enum\-base \&\-Wno\-exceptions \-Wno\-expose\-global\-module\-tu\-local \-Wno\-external\-tu\-local \&\-Wextra\-semi \-Wno\-global\-module \-Wno\-inaccessible\-base \&\-Wno\-inherited\-variadic\-ctor \-Wno\-init\-list\-lifetime \&\-Winvalid\-constexpr \-Winvalid\-imported\-macros \&\-Wno\-invalid\-offsetof \-Wno\-literal\-suffix \&\-Wmismatched\-new\-delete \-Wmismatched\-tags \&\-Wmultiple\-inheritance \-Wnamespaces \-Wnarrowing \&\-Wnoexcept \-Wnoexcept\-type \-Wnon\-virtual\-dtor \&\-Wpessimizing\-move \-Wno\-placement\-new \-Wplacement\-new=\fR\fIn\fR \&\fB\-Wrange\-loop\-construct \-Wredundant\-move \-Wredundant\-tags \&\-Wreorder \-Wregister \-Wno\-sfinae\-incomplete \&\-Wstrict\-null\-sentinel \-Wno\-subobject\-linkage \-Wtemplates \&\-Wno\-non\-c\-typedef\-for\-linkage \-Wno\-non\-template\-friend \-Wold\-style\-cast \&\-Woverloaded\-virtual \-Wno\-pmf\-conversions \-Wself\-move \-Wsign\-promo \&\-Wsized\-deallocation \-Wsuggest\-final\-methods \&\-Wsuggest\-final\-types \-Wsuggest\-override \-Wno\-template\-body \&\-Wno\-template\-id\-cdtor \-Wtemplate\-names\-tu\-local \&\-Wno\-terminate \-Wno\-vexing\-parse \-Wvirtual\-inheritance \&\-Wno\-virtual\-move\-assign \-Wvolatile\fR .IP "\fIگزینه‌های زبان‌های Objective\-C و ++Objective\-C (Objective\-C and Objective\-C++ Language Options)\fR" 4 .IX Item "Objective-C and Objective-C++ Language Options" \&\fB\-fconstant\-string\-class=\fR\fIclass\-name\fR \&\fB\-fgnu\-runtime \-fnext\-runtime \&\-fno\-nil\-receivers \&\-fobjc\-abi\-version=\fR\fIn\fR \&\fB\-fobjc\-call\-cxx\-cdtors \&\-fobjc\-direct\-dispatch \&\-fobjc\-exceptions \&\-fobjc\-gc \&\-fobjc\-nilcheck \&\-fobjc\-std=objc1 \&\-fno\-local\-ivars \&\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] \&\fB\-freplace\-objc\-classes \&\-fzero\-link \&\-gen\-decls \&\-Wassign\-intercept \-Wno\-property\-assign\-default \&\-Wno\-protocol \-Wobjc\-root\-class \-Wselector \&\-Wstrict\-selector\-match \&\-Wundeclared\-selector\fR .IP "\fIگزینه‌های OpenMP و OpenACC (OpenMP and OpenACC Options)\fR" 4 .IX Item "OpenMP and OpenACC Options" \&\fB\-foffload=\fR\fIarg\fR \fB\-foffload\-options=\fR\fIarg\fR \&\fB\-fopenacc \-fopenacc\-dim=\fR\fIgeom\fR \&\fB\-fopenmp \-fopenmp\-simd \-fopenmp\-target\-simd\-clone\fR[\fB=\fR\fIdevice\-type\fR] .IP "\fIگزینه‌های قالب‌بندی پیام‌های عیب‌یابی (Diagnostic Message Formatting Options)\fR" 4 .IX Item "Diagnostic Message Formatting Options" \&\fB\-fmessage\-length=\fR\fIn\fR \&\fB\-fdiagnostics\-plain\-output \&\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery\-line\fR] \&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR] \&\fB\-fdiagnostics\-urls=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR] \&\fB\-fdiagnostics\-format=\fR[\fBtext\fR|\fBsarif\-stderr\fR|\fBsarif\-file\fR] \&\fB\-fdiagnostics\-add\-output=\fR\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR \&\fB\-fdiagnostics\-set\-output=\fR\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR \&\fB\-fno\-diagnostics\-json\-formatting \&\-fno\-diagnostics\-show\-option \-fno\-diagnostics\-show\-caret \&\-fno\-diagnostics\-show\-event\-links \&\-fno\-diagnostics\-show\-labels \-fno\-diagnostics\-show\-line\-numbers \&\-fno\-diagnostics\-show\-cwe \&\-fno\-diagnostics\-show\-rules \&\-fno\-diagnostics\-show\-highlight\-colors \&\-fno\-diagnostics\-show\-nesting \&\-fno\-diagnostics\-show\-nesting\-locations \&\-fdiagnostics\-show\-nesting\-levels \&\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR \&\fB\-fdiagnostics\-parseable\-fixits \-fdiagnostics\-generate\-patch \&\-fdiagnostics\-show\-template\-tree \-fno\-elide\-type \&\-fdiagnostics\-path\-format=\fR[\fBnone\fR|\fBseparate\-events\fR|\fBinline\-events\fR] \&\fB\-fdiagnostics\-show\-path\-depths \&\-fno\-show\-column \&\-fdiagnostics\-column\-unit=\fR[\fBdisplay\fR|\fBbyte\fR] \&\fB\-fdiagnostics\-column\-origin=\fR\fIorigin\fR \&\fB\-fdiagnostics\-escape\-format=\fR[\fBunicode\fR|\fBbytes\fR] \&\fB\-fdiagnostics\-text\-art\-charset=\fR[\fBnone\fR|\fBascii\fR|\fBunicode\fR|\fBemoji\fR] \&\fB\-fdiagnostics\-show\-context\fR[\fB=\fR\fIdepth\fR] .IP "\fIگزینه‌های هشدار (Warning Options)\fR" 4 .IX Item "Warning Options" \&\fB\-fsyntax\-only \-fmax\-errors=\fR\fIn\fR \fB\-Wpedantic \&\-pedantic\-errors \-fpermissive \&\-w \-Wextra \-Wall \-Wabi=\fR\fIn\fR \&\fB\-Waddress \-Wno\-address\-of\-packed\-member \-Waggregate\-return \&\-Walloc\-size \-Walloc\-size\-larger\-than=\fR\fIbyte\-size\fR \fB\-Walloc\-zero \&\-Walloca \-Walloca\-larger\-than=\fR\fIbyte\-size\fR \fB\-Wauto\-profile \&\-Wno\-aggressive\-loop\-optimizations \&\-Warith\-conversion \&\-Warray\-bounds \-Warray\-bounds=\fR\fIn\fR \fB\-Warray\-compare \&\-Warray\-parameter \-Warray\-parameter=\fR\fIn\fR \&\fB\-Wno\-attributes \-Wattribute\-alias=\fR\fIn\fR \fB\-Wno\-attribute\-alias \&\-Wno\-attribute\-warning \&\-Wbidi\-chars=\fR[\fBnone\fR|\fBunpaired\fR|\fBany\fR|\fBucn\fR] \&\fB\-Wbool\-compare \-Wbool\-operation \&\-Wno\-builtin\-declaration\-mismatch \&\-Wno\-builtin\-macro\-redefined \-Wc90\-c99\-compat \-Wc99\-c11\-compat \&\-Wc11\-c23\-compat \-Wc23\-c2y\-compat \&\-Wc++\-compat \-Wc++11\-compat \-Wc++14\-compat \-Wc++17\-compat \&\-Wc++20\-compat \-Wc++26\-compat \&\-Wno\-c++11\-extensions \-Wno\-c++14\-extensions \-Wno\-c++17\-extensions \&\-Wno\-c++20\-extensions \-Wno\-c++23\-extensions \&\-Wcalloc\-transposed\-args \-Wcannot\-profile \&\-Wcast\-align \-Wcast\-align=strict \-Wcast\-function\-type \-Wcast\-qual \&\-Wchar\-subscripts \&\-Wclobbered \-Wcomment \&\-Wcompare\-distinct\-pointer\-types \&\-Wno\-complain\-wrong\-lang \&\-Wconversion \-Wno\-coverage\-mismatch \-Wno\-cpp \&\-Wdangling\-else \-Wdangling\-pointer \-Wdangling\-pointer=\fR\fIn\fR \&\fB\-Wdate\-time \&\-Wno\-deprecated \-Wno\-deprecated\-declarations \-Wno\-designated\-init \&\-Wno\-deprecated\-openmp \&\-Wdisabled\-optimization \&\-Wno\-discarded\-array\-qualifiers \-Wno\-discarded\-qualifiers \&\-Wno\-div\-by\-zero \-Wdouble\-promotion \&\-Wduplicated\-branches \-Wduplicated\-cond \&\-Wempty\-body \-Wno\-endif\-labels \-Wenum\-compare \-Wenum\-conversion \&\-Wenum\-int\-mismatch \&\-Werror \-Werror=* \-Wexpansion\-to\-defined \-Wfatal\-errors \&\-Wflex\-array\-member\-not\-at\-end \&\-Wfloat\-conversion \-Wfloat\-equal \-Wformat \-Wformat=2 \&\-Wno\-format\-contains\-nul \-Wno\-format\-diag \-Wno\-format\-extra\-args \&\-Wformat\-nonliteral \-Wformat\-overflow=\fR\fIn\fR \&\fB\-Wformat\-security \-Wformat\-signedness \-Wformat\-truncation=\fR\fIn\fR \&\fB\-Wformat\-y2k \-Wframe\-address \&\-Wframe\-larger\-than=\fR\fIbyte\-size\fR \fB\-Wno\-free\-nonheap\-object \&\-Wheader\-guard \-Wno\-if\-not\-aligned \-Wno\-ignored\-attributes \&\-Wignored\-qualifiers \-Wno\-incompatible\-pointer\-types \-Whardened \&\-Wimplicit \-Wimplicit\-fallthrough \-Wimplicit\-fallthrough=\fR\fIn\fR \&\fB\-Wno\-implicit\-function\-declaration \-Wno\-implicit\-int \&\-Winfinite\-recursion \&\-Winit\-self \-Winline \-Wno\-int\-conversion \-Wint\-in\-bool\-context \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-memory\-model \&\-Winvalid\-pch \-Winvalid\-utf8 \-Wno\-unicode \-Wjump\-misses\-init \&\-Wkeyword\-macro \&\-Wlarger\-than=\fR\fIbyte\-size\fR \fB\-Wleading\-whitespace=\fR\fIkind\fR \&\fB\-Wlogical\-not\-parentheses \-Wlogical\-op \&\-Wlong\-long \-Wno\-lto\-type\-mismatch \-Wmain \-Wmaybe\-uninitialized \&\-Wmemset\-elt\-size \-Wmemset\-transposed\-args \&\-Wmisleading\-indentation \-Wmissing\-attributes \-Wmissing\-braces \&\-Wmissing\-field\-initializers \-Wmissing\-format\-attribute \&\-Wmissing\-include\-dirs \-Wmissing\-noreturn \-Wmusttail\-local\-addr \&\-Wmaybe\-musttail\-local\-addr \-Wno\-missing\-profile \&\-Wno\-multichar \-Wmultistatement\-macros \-Wnonnull \-Wnonnull\-compare \&\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR] \&\fB\-Wnull\-dereference \-Wno\-odr \&\-Wopenacc\-parallelism \&\-Wopenmp \-Wopenmp\-simd \&\-Wno\-overflow \-Woverlength\-strings \-Wno\-override\-init\-side\-effects \&\-Wpacked \-Wno\-packed\-bitfield\-compat \-Wpacked\-not\-aligned \-Wpadded \&\-Wparentheses \-Wno\-pedantic\-ms\-format \&\-Wpointer\-arith \-Wno\-pointer\-compare \-Wno\-pointer\-to\-int\-cast \&\-Wno\-pragmas \-Wno\-pragma\-once\-outside\-header \-Wno\-prio\-ctor\-dtor \&\-Wno\-psabi \&\-Wredundant\-decls \-Wrestrict \&\-Wno\-return\-local\-addr \-Wreturn\-type \&\-Wno\-scalar\-storage\-order \-Wsequence\-point \&\-Wshadow \-Wshadow=global \-Wshadow=local \-Wshadow=compatible\-local \&\-Wno\-shadow\-ivar \&\-Wno\-shift\-count\-negative \-Wno\-shift\-count\-overflow \&\-Wshift\-negative\-value \-Wno\-shift\-overflow \-Wshift\-overflow=\fR\fIn\fR \&\fB\-Wsign\-compare \-Wsign\-conversion \&\-Wno\-sizeof\-array\-argument \&\-Wsizeof\-array\-div \&\-Wsizeof\-pointer\-div \-Wsizeof\-pointer\-memaccess \&\-Wstack\-protector \-Wstack\-usage=\fR\fIbyte\-size\fR \fB\-Wstrict\-aliasing \&\-Wstrict\-aliasing=\fR\fIn\fR \fB\-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR \&\fB\-Wstring\-compare \&\-Wno\-stringop\-overflow \-Wno\-stringop\-overread \&\-Wno\-stringop\-truncation \-Wstrict\-flex\-arrays \&\-Wsuggest\-attribute=\fR\fIattribute\-name\fR \&\fB\-Wswitch \-Wno\-switch\-bool \-Wswitch\-default \-Wswitch\-enum \&\-Wno\-switch\-outside\-range \-Wno\-switch\-unreachable \-Wsync\-nand \&\-Wsystem\-headers \-Wtautological\-compare \-Wtrailing\-whitespace \&\-Wtrailing\-whitespace=\fR\fIkind\fR \fB\-Wtrampolines \-Wtrigraphs \&\-Wtrivial\-auto\-var\-init \-Wno\-tsan \-Wtype\-limits \-Wundef \&\-Wuninitialized \-Wunknown\-pragmas \&\-Wunsuffixed\-float\-constants \&\-Wunterminated\-string\-initialization \&\-Wunused \&\-Wunused\-but\-set\-parameter \-Wunused\-but\-set\-parameter=\fR\fIn\fR \&\fB\-Wunused\-but\-set\-variable \-Wunused\-but\-set\-variable=\fR\fIn\fR \&\fB\-Wunused\-const\-variable \-Wunused\-const\-variable=\fR\fIn\fR \&\fB\-Wunused\-function \-Wunused\-label \-Wunused\-local\-typedefs \&\-Wunused\-macros \&\-Wunused\-parameter \-Wno\-unused\-result \&\-Wunused\-value \-Wunused\-variable \&\-Wuse\-after\-free \-Wuse\-after\-free=\fR\fIn\fR \fB\-Wuseless\-cast \&\-Wno\-varargs \-Wvariadic\-macros \&\-Wvector\-operation\-performance \&\-Wvla \-Wvla\-larger\-than=\fR\fIbyte\-size\fR \fB\-Wno\-vla\-larger\-than \&\-Wvolatile\-register\-var \-Wwrite\-strings \&\-Wno\-xor\-used\-as\-pow \&\-Wzero\-as\-null\-pointer\-constant \&\-Wzero\-length\-bounds \&\-\-all\-warnings \-\-extra\-warnings \-\-no\-warnings \&\-\-pedantic \-\-pedantic\-errors\fR.IP "\fIگزینه‌های تحلیل‌گر ایستا\fR" 4 .IX Item "گزینه‌های تحلیل‌گر ایستا" \&\fB\-fanalyzer \&\-fanalyzer\-assume\-nothrow \&\-fanalyzer\-call\-summaries \&\-fanalyzer\-checker=\fR\fIname\fR \&\fB\-fno\-analyzer\-feasibility \&\-fanalyzer\-show\-events\-in\-system\-headers \&\-fno\-analyzer\-state\-merge \&\-fno\-analyzer\-state\-purge \&\-fno\-analyzer\-suppress\-followups \&\-fanalyzer\-transitivity \&\-fno\-analyzer\-undo\-inlining \&\-fanalyzer\-verbose\-edges \&\-fanalyzer\-verbose\-state\-changes \&\-fanalyzer\-verbosity=\fR\fIlevel\fR \&\fB\-fdump\-analyzer \&\-fdump\-analyzer\-callgraph \&\-fdump\-analyzer\-exploded\-graph \&\-fdump\-analyzer\-exploded\-nodes \&\-fdump\-analyzer\-exploded\-nodes\-2 \&\-fdump\-analyzer\-exploded\-nodes\-3 \&\-fdump\-analyzer\-exploded\-paths \&\-fdump\-analyzer\-feasibility \&\-fdump\-analyzer\-infinite\-loop \&\-fdump\-analyzer\-json \&\-fdump\-analyzer\-state\-purge \&\-fdump\-analyzer\-stderr \&\-fdump\-analyzer\-supergraph \&\-fdump\-analyzer\-untracked \&\-Wno\-analyzer\-double\-fclose \&\-Wno\-analyzer\-double\-free \&\-Wno\-analyzer\-exposure\-through\-output\-file \&\-Wno\-analyzer\-exposure\-through\-uninit\-copy \&\-Wno\-analyzer\-fd\-access\-mode\-mismatch \&\-Wno\-analyzer\-fd\-double\-close \&\-Wno\-analyzer\-fd\-leak \&\-Wno\-analyzer\-fd\-phase\-mismatch \&\-Wno\-analyzer\-fd\-type\-mismatch \&\-Wno\-analyzer\-fd\-use\-after\-close \&\-Wno\-analyzer\-fd\-use\-without\-check \&\-Wno\-analyzer\-file\-leak \&\-Wno\-analyzer\-free\-of\-non\-heap \&\-Wno\-analyzer\-imprecise\-fp\-arithmetic \&\-Wno\-analyzer\-infinite\-loop \&\-Wno\-analyzer\-infinite\-recursion \&\-Wno\-analyzer\-jump\-through\-null \&\-Wno\-analyzer\-malloc\-leak \&\-Wno\-analyzer\-mismatching\-deallocation \&\-Wno\-analyzer\-null\-argument \&\-Wno\-analyzer\-null\-dereference \&\-Wno\-analyzer\-out\-of\-bounds \&\-Wno\-analyzer\-overlapping\-buffers \&\-Wno\-analyzer\-possible\-null\-argument \&\-Wno\-analyzer\-possible\-null\-dereference \&\-Wno\-analyzer\-putenv\-of\-auto\-var \&\-Wno\-analyzer\-shift\-count\-negative \&\-Wno\-analyzer\-shift\-count\-overflow \&\-Wno\-analyzer\-stale\-setjmp\-buffer \&\-Wno\-analyzer\-tainted\-allocation\-size \&\-Wno\-analyzer\-tainted\-assertion \&\-Wno\-analyzer\-tainted\-array\-index \&\-Wno\-analyzer\-tainted\-divisor \&\-Wno\-analyzer\-tainted\-offset \&\-Wno\-analyzer\-tainted\-size \&\-Wno\-analyzer\-throw\-of\-unexpected\-type \&\-Wanalyzer\-symbol\-too\-complex \&\-Wanalyzer\-too\-complex \&\-Wno\-analyzer\-undefined\-behavior\-ptrdiff \&\-Wno\-analyzer\-undefined\-behavior\-strtok \&\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler \&\-Wno\-analyzer\-use\-after\-free \&\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame \&\-Wno\-analyzer\-use\-of\-uninitialized\-value \&\-Wno\-analyzer\-va\-arg\-type\-mismatch \&\-Wno\-analyzer\-va\-list\-exhausted \&\-Wno\-analyzer\-va\-list\-leak \&\-Wno\-analyzer\-va\-list\-use\-after\-va\-end \&\-Wno\-analyzer\-write\-to\-const \&\-Wno\-analyzer\-write\-to\-string\-literal\fR .IP "\fIگزینه‌های هشدار ویژهٔ C و Objective\-C\fR" 4 .IX Item "گزینه‌های هشدار ویژهٔ C و Objective-C" \&\fB\-Wbad\-function\-cast \-Wdeprecated\-non\-prototype \-Wfree\-labels \&\-Wmissing\-declarations \-Wmissing\-parameter\-name \-Wmissing\-parameter\-type \&\-Wdeclaration\-missing\-parameter\-type \-Wmissing\-prototypes \&\-Wmissing\-variable\-declarations \&\-Wmultiple\-parameter\-fwd\-decl\-lists \&\-Wnested\-externs \-Wold\-style\-declaration \&\-Wold\-style\-definition \-Wstrict\-prototypes \-Wtraditional \&\-Wtraditional\-conversion \-Wdeclaration\-after\-statement \-Wpointer\-sign\fR .IP "\fIگزینه‌های اشکال‌زدایی\fR" 4 .IX Item "گزینه‌های اشکال‌زدایی" \&\fB\-g \-g\fR\fIlevel\fR \fB\-gdwarf \-gdwarf\-\fR\fIversion\fR \&\fB\-gbtf \-gctf \-gctf\fR\fIlevel\fR \&\fB\-gno\-prune\-btf \-ggdb \-gno\-record\-gcc\-switches \&\-gstrict\-dwarf \-gas\-loc\-support \-gas\-locview\-support \&\-gcodeview \-gcolumn\-info \-gdwarf32 \-gdwarf64 \&\-gno\-statement\-frontiers \&\-gno\-variable\-location\-views \-gvariable\-location\-views=incompat5 \&\-ginternal\-reset\-location\-views \-ginline\-points \&\-gvms \-gz\fR[\fB=\fR\fItype\fR] \&\fB\-gsplit\-dwarf \-gdescribe\-dies \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \fB\-fdebug\-types\-section \&\-fno\-eliminate\-unused\-debug\-types \&\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec\-list\fR] \&\fB\-fno\-eliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always \&\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm \&\-fvar\-tracking \-fvar\-tracking\-assignments \-fvar\-tracking\-uninit \&\-\-debug\fR .IP "\fIگزینه‌های بهینه‌سازی\fR" 4 .IX Item "گزینه‌های بهینه‌سازی" \&\fB\-faggressive\-loop\-optimizations \&\-falign\-functions[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] \&\-falign\-jumps[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] \&\-falign\-labels[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] \&\-falign\-loops[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] \&\-fmin\-function\-alignment=[\fR\fIn\fR\fB] \&\-fno\-allocation\-dce \-fallow\-store\-data\-races \&\-fassociative\-math \-fauto\-profile \-fauto\-profile[=\fR\fIpath\fR\fB] \&\-fauto\-profile\-inlining \-fauto\-inc\-dec \-fbranch\-probabilities \&\-fcaller\-saves \&\-fcombine\-stack\-adjustments \-fconserve\-stack \&\-ffold\-mem\-offsets \&\-fcompare\-elim \-fcprop\-registers \-fcrossjumping \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules \&\-fcx\-limited\-range \-fcx\-method \&\-fdata\-sections \-fdce \-fdelayed\-branch \&\-fdelete\-null\-pointer\-checks \-fdep\-fusion \-fdevirtualize \&\-fdevirtualize\-speculatively \-fdevirtualize\-at\-ltrans \-fdse \&\-fearly\-inlining \-fexcess\-precision=\fR\fIstyle\fR \&\fB\-fexpensive\-optimizations \-fext\-dce \&\-ffast\-math \-ffat\-lto\-objects \-ffinite\-loops \&\-ffinite\-math\-only \-ffloat\-store \&\-fforward\-propagate \-ffp\-contract=\fR\fIstyle\fR \fB\-ffp\-int\-builtin\-inexact \&\-ffunction\-sections \-ffuse\-ops\-with\-volatile\-access \&\-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm \-fgraphite\-identity \&\-fgcse\-sm \-fhoist\-adjacent\-loads \-fif\-conversion \&\-fif\-conversion2 \-findirect\-inlining \&\-finline\-atomics \-finline\-functions \-finline\-functions\-called\-once \&\-finline\-limit=\fR\fIn\fR \fB\-finline\-small\-functions \&\-finline\-stringops\fR[\fB=\fR\fIfn\fR] \&\fB\-fipa\-modref \-fipa\-cp \-fipa\-cp\-clone \&\-fipa\-bit\-cp \-fipa\-vrp \-fipa\-pta \-fipa\-profile \-fipa\-pure\-const \&\-fipa\-reference \-fipa\-reference\-addressable \-fipa\-reorder\-for\-locality \&\-fipa\-sra \-fipa\-stack\-alignment \&\-fipa\-icf \-fipa\-icf\-functions \-fipa\-icf\-variables \&\-fira\-algorithm=\fR\fIalgorithm\fR \&\fB\-flate\-combine\-instructions \-flifetime\-dse \-flive\-patching=\fR\fIlevel\fR \&\fB\-fira\-region=\fR\fIregion\fR \fB\-fira\-hoist\-pressure \&\-fira\-loop\-pressure \-fno\-ira\-share\-save\-slots \&\-fno\-ira\-share\-spill\-slots \&\-fisolate\-erroneous\-paths\-dereference \-fisolate\-erroneous\-paths\-attribute \&\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-functions \&\-fkeep\-static\-consts \-flimit\-function\-alignment \-flive\-range\-shrinkage \&\-floop\-block \-floop\-interchange \-floop\-strip\-mine \&\-floop\-unroll\-and\-jam \-floop\-nest\-optimize \&\-floop\-parallelize\-all \-flra\-remat \-flto \-flto\-compression\-level=\fR\fIn\fR \&\fB\-flto\-toplevel\-asm\-heuristics \&\-flto\-partition=\fR\fIalg\fR \fB\-flto\-incremental=\fR\fIpath\fR \&\fB\-flto\-incremental\-cache\-size=\fR\fIn\fR \fB\-fmalloc\-dce \-fmerge\-all\-constants \&\-fmerge\-constants \-fmodulo\-sched \-fmodulo\-sched\-allow\-regmoves \&\-fmove\-loop\-invariants \-fmove\-loop\-stores \-fno\-branch\-count\-reg \&\-fno\-defer\-pop \-fno\-function\-cse \&\-fno\-guess\-branch\-probability \-fno\-inline \-fno\-math\-errno \-fno\-peephole \&\-fno\-peephole2 \-fno\-printf\-return\-value \-fno\-sched\-interblock \&\-fno\-sched\-spec \-fno\-signed\-zeros \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss \&\-fomit\-frame\-pointer \-foptimize\-crc \-foptimize\-sibling\-calls \&\-fpartial\-inlining \-fpeel\-loops \-fpredictive\-commoning \&\-fprefetch\-loop\-arrays \&\-fprofile\-correction \&\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-partial\-training \&\-fprofile\-values \-fprofile\-reorder\-functions \&\-freciprocal\-math \-free \-frename\-registers \-freorder\-blocks \&\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR \&\fB\-freorder\-blocks\-and\-partition \-freorder\-functions \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops \&\-frounding\-math \-fsave\-optimization\-record \&\-fsched2\-use\-superblocks \-fsched\-pressure \&\-fsched\-spec\-load \-fsched\-spec\-load\-dangerous \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] \&\-fsched\-group\-heuristic \-fsched\-critical\-path\-heuristic \&\-fsched\-spec\-insn\-heuristic \-fsched\-rank\-heuristic \&\-fsched\-last\-insn\-heuristic \-fsched\-dep\-count\-heuristic \&\-fschedule\-fusion \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors \&\-fselective\-scheduling \-fselective\-scheduling2 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops \&\-fsemantic\-interposition \-fshrink\-wrap \-fshrink\-wrap\-separate \&\-fsignaling\-nans \&\-fsingle\-precision\-constant \-fsplit\-ivs\-in\-unroller \-fsplit\-loops \&\-fspeculatively\-call\-stored\-functions \-fsplit\-paths \&\-fsplit\-wide\-types \-fsplit\-wide\-types\-early \-fssa\-backprop \-fssa\-phiopt \&\-fstdarg\-opt \-fstore\-merging \-fstrict\-aliasing \-fipa\-strict\-aliasing \&\-fthread\-jumps \-ftracer \-ftree\-bit\-ccp \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-coalesce\-vars \&\-ftree\-copy\-prop \-ftree\-cselim \-ftree\-dce \-ftree\-dominator\-opts \&\-ftree\-dse \-ftree\-forwprop \-ftree\-fre \-fcode\-hoisting \&\-ftree\-loop\-if\-convert \-ftree\-loop\-im \&\-ftree\-phiprop \-ftree\-loop\-distribution \-ftree\-loop\-distribute\-patterns \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize \&\-ftree\-loop\-vectorize \&\-ftree\-parallelize\-loops[=\fR\fIn\fR\fB] \-ftree\-pre \-ftree\-partial\-pre \-ftree\-pta \&\-ftree\-reassoc \-ftree\-scev\-cprop \-ftree\-sink \-ftree\-slsr \-ftree\-sra \&\-ftree\-switch\-conversion \-ftree\-tail\-merge \&\-ftree\-ter \-ftree\-vectorize \-ftree\-vrp \-ftrivial\-auto\-var\-init \&\-funconstrained\-commons \-funit\-at\-a\-time \-funroll\-all\-loops \&\-funroll\-loops \-funsafe\-math\-optimizations \-funswitch\-loops \&\-fipa\-ra \-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt \&\-fweb \-fwhole\-program \-fwpa \-fuse\-linker\-plugin \-fzero\-call\-used\-regs \&\-O \-O0 \-O1 \-O2 \-O3 \-Os \-Ofast \-Og \-Oz \-\-optimize\fR.IP "\fIگزینه‌های ابزارگذاری برنامه\fR" 4 .IX Item "گزینه‌های ابزارگذاری برنامه" \&\fB\-p \-pg \-fprofile\-arcs \-coverage \-ftest\-coverage \&\-fcondition\-coverage \&\-fpath\-coverage \&\-fprofile \-fprofile\-abs\-path \&\-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate \-fprofile\-generate=\fR\fIpath\fR \&\fB\-fprofile\-info\-section \-fprofile\-info\-section=\fR\fIname\fR \&\fB\-fprofile\-note=\fR\fIpath\fR \fB\-fprofile\-prefix\-path=\fR\fIpath\fR \&\fB\-fprofile\-update=\fR\fImethod\fR \fB\-fprofile\-filter\-files=\fR\fIregex\fR \&\fB\-fprofile\-exclude\-files=\fR\fIregex\fR \&\fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel\-runs\fR|\fBserial\fR] \&\fB\-fsanitize=\fR\fIstyle\fR \fB\-fsanitize\-recover \-fsanitize\-recover=\fR\fIstyle\fR \&\fB\-fsanitize\-trap \-fsanitize\-trap=\fR\fIstyle\fR \&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,... \&\-fsanitize\-undefined\-trap\-on\-error \-fcf\-protection \&\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR|\fBcheck\fR] \&\fB\-fharden\-compares \-fharden\-conditional\-branches \-fhardened \&\-fharden\-control\-flow\-redundancy \-fhardcfr\-skip\-leaf \&\-fhardcfr\-check\-exceptions \-fhardcfr\-check\-returning\-calls \&\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno\-xthrow\fR|\fBnothrow\fR|\fBnever\fR] \&\fB\-fstack\-protector \-fstack\-protector\-all \-fstack\-protector\-strong \&\-fstack\-protector\-explicit \-fstack\-check \&\-fstack\-limit\-register=\fR\fIreg\fR \fB\-fstack\-limit\-symbol=\fR\fIsym\fR \&\fB\-fno\-stack\-limit \-fsplit\-stack \&\-fstrub=disable \-fstrub=strict \-fstrub=relaxed \&\-fstrub=all \-fstrub=at\-calls \-fstrub=internal \&\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] \&\fB\-fvtv\-counts \-fvtv\-debug \&\-finstrument\-functions \-finstrument\-functions\-once \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... \&\-fprofile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \&\fB\-fpatchable\-function\-entry=\fR\fIN\fR[\fB,\fR\fIM\fR] \&\fB\-\-coverage \-\-profile\fR .IP "\fIگزینه‌های پیش‌پردازنده\fR" 4 .IX Item "گزینه‌های پیش‌پردازنده" \&\fB\-C \-CC \-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \&\fB\-dD \-dI \-dM \-dN \-dU \&\-fdebug\-cpp \-fdirectives\-only \-fdollars\-in\-identifiers \&\-fexec\-charset=\fR\fIcharset\fR \fB\-fextended\-identifiers \&\-finput\-charset=\fR\fIcharset\fR \&\fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \fB\-fmax\-include\-depth=\fR\fIdepth\fR \&\fB\-fno\-canonical\-system\-headers \-fpch\-deps \-fpch\-preprocess \&\-fpreprocessed \-ftabstop=\fR\fIwidth\fR \fB\-ftrack\-macro\-expansion \&\-fwide\-exec\-charset=\fR\fIcharset\fR \fB\-fworking\-directory \&\-H \-imacros\fR \fIfile\fR \fB\-include\fR \fIfile\fR \&\fB\-M \-MD \-MF \-MG \-MM \-MMD \-MP \-MQ \-MT \-Mno\-modules \&\-no\-integrated\-cpp \-P \-pthread \-remap \&\-traditional \-traditional\-cpp \-trigraphs \&\-U\fR\fImacro\fR \fB\-undef \&\-Wp,\fR\fIoption\fR \fB\-Xpreprocessor\fR \fIoption\fR \&\fB\-\-comments \-\-comments\-in\-macros \&\-\-define\-macro=\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \&\fB\-\-dependencies \-\-dump=\fR\fIletters\fR \&\fB\-\-imacros=\fR\fIfile\fR \fB\-\-include=\fR\fIfile\fR \&\fB\-\-no\-integrated\-cpp \-\-no\-line\-commands \&\-\-print\-missing\-file\-dependencies \&\-\-traditional \-\-traditional\-cpp \-\-trigraphs \-\-trace\-includes \&\-\-undefine\-macro=\fR\fImacro\fR \&\fB\-\-user\-dependencies \-\-write\-dependencies \-\-write\-user\-dependencies\fR .IP "\fIگزینه‌های اسمبلر\fR" 4 .IX Item "گزینه‌های اسمبلر" \&\fB\-Wa,\fR\fIoption\fR \fB\-Xassembler\fR \fIoption\fR \&\fB\-\-for\-assembler=\fR\fIoption\fR .IP "\fIگزینه‌های پیونددهنده\fR" 4 .IX Item "گزینه‌های پیونددهنده" \&\fIobject\-file\-name\fR \fB\-flink\-libatomic \-fuse\-ld=\fR\fIlinker\fR \fB\-l\fR\fIlibrary\fR \&\fB\-nostartfiles \-nodefaultlibs \-nolibc \-nostdlib \-nostdlib++ \&\-e\fR \fIentry\fR \&\fB\-pie \-pthread \-r \-rdynamic \&\-s \-static \-static\-pie \-static\-libgcc \-static\-libstdc++ \&\-static\-libasan \-static\-libhwasan \-static\-liblsan \&\-static\-libtsan \-static\-libubsan \&\-shared \-shared\-libgcc \-symbolic \&\-T\fR \fIscript\fR \fB\-Wl,\fR\fIoption\fR \fB\-Xlinker\fR \fIoption\fR \&\fB\-u\fR \fIsymbol\fR \&\fB\-Tbss=\fR\fIaddr\fR \fB\-Tdata=\fR\fIaddr\fR \fB\-Ttext=\fR\fIaddr\fR \&\fB\-N \-n \-t \-Z \-z\fR \fIkeyword\fR \&\fB\-\-entry=\fR\fIentry\fR \fB\-\-for\-linker=\fR\fIoption\fR \&\fB\-\-force\-link=\fR\fIsymbol\fR \fB\-\-no\-standard\-library \&\-\-pie \-\-static \-\-static\-pie \-\-symbolic\fR .IP "\fIگزینه‌های دایرکتوری\fR" 4 .IX Item "گزینه‌های دایرکتوری" \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-I\- \&\-idirafter\fR \fIdir\fR \&\fB\-imacros\fR \fIfile\fR \fB\-imultilib\fR \fIdir\fR \fB\-imultiarch\fR \fIdir\fR \&\fB\-iplugindir=\fR\fIdir\fR \fB\-iprefix\fR \fIfile\fR \&\fB\-iquote\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR \fB\-isystem\fR \fIdir\fR \&\fB\-iwithprefix\fR \fIdir\fR \fB\-iwithprefixbefore\fR \fIdir\fR \&\fB\-L\fR\fIdir\fR \fB\-no\-canonical\-prefixes \-\-no\-sysroot\-suffix \&\-nostdinc \-nostdinc++ \&\-\-embed\-dir=\fR\fIdir\fR \fB\-\-embed\-directory=\fR\fIdir\fR \&\fB\-\-include\-barrier \-\-include\-directory=\fR\fIdir\fR \&\fB\-\-include\-directory\-after=\fR\fIdir\fR \fB\-\-include\-prefix=\fR\fIprefix\fR \&\fB\-\-include\-with\-prefix=\fR\fIprefix\fR \fB\-\-include\-with\-prefix\-after=\fR\fIprefix\fR \&\fB\-\-include\-with\-prefix\-before=\fR\fIprefix\fR \&\fB\-\-no\-canonical\-prefixes \-\-no\-standard\-includes \&\-\-prefix=\fR\fIprefix\fR \fB\-\-sysroot=\fR\fIdir\fR .IP "\fIگزینه‌های تولید کد\fR" 4 .IX Item "گزینه‌های تولید کد" \&\fB\-fcall\-saved\-\fR\fIreg\fR \fB\-fcall\-used\-\fR\fIreg\fR \&\fB\-ffixed\-\fR\fIreg\fR \fB\-fexceptions \&\-fnon\-call\-exceptions \-fdelete\-dead\-exceptions \-funwind\-tables \&\-fasynchronous\-unwind\-tables \&\-fno\-gnu\-unique \&\-finhibit\-size\-directive \-fcommon \-fno\-ident \&\-fpcc\-struct\-return \-fpic \-fPIC \-fpie \-fPIE \-fno\-plt \&\-fno\-jump\-tables \-fno\-bit\-tests \&\-frecord\-gcc\-switches \&\-freg\-struct\-return \-fshort\-enums \-fshort\-wchar \&\-fverbose\-asm \-fpack\-struct[=\fR\fIn\fR\fB] \&\-fleading\-underscore \-ftls\-model=\fR\fImodel\fR \&\fB\-fstack\-reuse=\fR\fIreuse_level\fR \&\fB\-ftrampolines \-ftrampoline\-impl=\fR[\fBstack\fR|\fBheap\fR] \&\fB\-ftrapv \-fwrapv \-fwrapv\-pointer \&\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] \&\fB\-fstrict\-volatile\-bitfields \-fsync\-libcalls \&\-fzero\-init\-padding\-bits=\fR\fIvalue\fR \&\fB\-Qy \-Qn\fR .IP "\fIگزینه‌های توسعه‌دهنده\fR" 4 .IX Item "گزینه‌های توسعه‌دهنده" \&\fB\-d\fR\fIletters\fR \fB\-dumpspecs \-dumpmachine \-dumpversion \&\-dumpfullversion \-fcallgraph\-info\fR[\fB=su,da\fR] \&\fB\-fchecking \-fchecking=\fR\fIn\fR \&\fB\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter\-value\-list\fR \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR \&\fB\-fdisable\-rtl\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR \&\fB\-fdisable\-tree\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR \&\fB\-fdump\-debug \-fdump\-earlydebug \&\-fdump\-noaddr \-fdump\-unnumbered \-fdump\-unnumbered\-links \&\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR] \&\fB\-fdump\-internal\-locations \&\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline \&\-fdump\-lang\-all \&\-fdump\-lang\-\fR\fIswitch\fR \&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR \&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR \&\fB\-fdump\-passes \&\-fdump\-rtl\-\fR\fIpass\fR \fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR \&\fB\-fdump\-statistics \&\-fdump\-tree\-all \&\-fdump\-tree\-\fR\fIswitch\fR \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR] \fB\-fcompare\-debug\-second \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR \&\fB\-fira\-verbose=\fR\fIn\fR \&\fB\-flto\-report \-flto\-report\-wpa \-fmem\-report\-wpa \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \&\-fopt\-info \-fopt\-info\-\fR\fIoptions\fR[\fB=\fR\fIfile\fR] \&\fB\-fmultiflags \-fprofile\-report \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose \&\-fstats \-fstack\-usage \-ftime\-report \-ftime\-report\-details \&\-fvar\-tracking\-assignments\-toggle \-gtoggle \&\-print\-autofdo\-gcov\-version \&\-print\-file\-name=\fR\fIlibrary\fR \fB\-print\-libgcc\-file\-name \&\-print\-multi\-directory \-print\-multi\-lib \-print\-multi\-os\-directory \&\-print\-multiarch \&\-print\-prog\-name=\fR\fIprogram\fR \fB\-print\-search\-dirs \-Q \&\-print\-sysroot \-print\-sysroot\-headers\-suffix \&\-save\-temps \-save\-temps=cwd \-save\-temps=obj \&\-specs=\fR\fIfile\fR \fB\-time\fR[\fB=\fR\fIfile\fR] \&\fB\-\-dump=\fR\fIletters\fR \&\fB\-\-print\-autofdo\-gcov\-version \&\-\-print\-file\-name=\fR\fIlibrary\fR \fB\-\-print\-libgcc\-file\-file\-name \&\-\-print\-multi\-directory \-\-print\-multi\-lib \-\-print\-multi\-os\-directory \&\-\-print\-multiarch \-\-print\-prog\-name=\fR\fIprogram\fR \&\fB\-\-print\-search\-dirs \-\-print\-sysroot \-\-print\-sysroot\-headers\-suffix \&\-\-save\-temps \-\-specs=\fR\fIfile\fR \&\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR\fB \fR .IP "\fIگزینه‌های مختص معماری هدف\fR" 4 .IX Item "گزینه‌های مختص معماری هدف" \&\fIگزینه‌های AArch64\fR (\fBAArch64 Options\fR) \&\fB\-mabi=\fR\fIname\fR \fB\-mbig\-endian \-mlittle\-endian \&\-menable\-sysreg\-checking \&\-mgeneral\-regs\-only \&\-mcmodel=tiny \-mcmodel=small \-mcmodel=large \&\-mstrict\-align \-momit\-leaf\-frame\-pointer \&\-mtls\-dialect=desc \-mtls\-dialect=traditional \&\-mtls\-size=\fR\fIsize\fR \fB\-mtp=\fR\fIname\fR \&\fB\-mfix\-cortex\-a53\-835769 \-mfix\-cortex\-a53\-843419 \&\-mlow\-precision\-recip\-sqrt \-mlow\-precision\-sqrt \-mlow\-precision\-div \&\-mmax\-vectorization \-mautovec\-preference=\fR\fIname\fR \&\fB\-mpc\-relative\-literal\-loads \&\-msign\-return\-address=\fR\fIscope\fR \&\fB\-mbranch\-protection=\fR\fIfeatures\fR \&\fB\-mharden\-sls=\fR\fIopts\fR \&\fB\-march=\fR\fIname\fR \fB\-mcpu=\fR\fIname\fR \fB\-mtune=\fR\fIname\fR \&\fB\-moverride=\fR\fIstring\fR \&\fB\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIsysreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \fB\-mtrack\-speculation \&\-moutline\-atomics \-mearly\-ra \-mearly\-ldp\-fusion \-mlate\-ldp\-fusion \-mnarrow\-gp\-writes \&\-msve\-vector\-bits=\fR\fIbits\fR .Sp \&\fIگزینه‌های Adapteva Epiphany\fR (\fBAdapteva Epiphany Options\fR) \&\fB\-mhalf\-reg\-file \-mprefer\-short\-insn\-regs \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcmove \-mnops=\fR\fInum\fR \fB\-msoft\-cmpsf \&\-msplit\-lohi \-mpost\-inc \-mpost\-modify \-mstack\-offset=\fR\fInum\fR \&\fB\-mround\-nearest \-mlong\-calls \-mshort\-calls \-msmall16 \&\-mfp\-mode=\fR\fImode\fR \fB\-mmay\-round\-for\-trunc \-mfp\-iarith \&\-mvect\-double \-max\-vect\-align=\fR\fInum\fR \&\fB\-msplit\-vecmove\-early \-m1reg\-\fR\fIreg\fR .Sp \&\fIگزینه‌های AMD GCN\fR (\fBAMD GCN Options\fR) \&\fB\-march=\fR\fIgpu\fR \fB\-mtune=\fR\fIgpu\fR \&\fB\-mgang\-private\-size=\fR\fIbytes\fR \&\fB\-msram\-ecc=\fR[\fBon\fR|\fBoff\fR|\fBany\fR] \&\fB\-mxnack=\fR[\fBon\fR|\fBoff\fR|\fBany\fR] \&\fB\-Wopenacc\-dims\fR .Sp \&\fIگزینه‌های ARC\fR (\fBARC Options\fR) \&\fB\-mbarrel\-shifter \-mjli\-always \&\-mcpu=\fR\fIcpu\fR \fB\-mA6 \-mARC600 \-mA7 \-mARC700 \&\-mdpfp \-mdpfp\-compact \-mdpfp\-fast \-mno\-dpfp\-lrsr \&\-mea \-mmul32x16 \-mmul64 \-matomic \&\-mnorm \-mspfp \-mspfp\-compact \-mspfp\-fast \-msimd \-msoft\-float \-mswap \&\-mlock \-mswape \&\-mxy \-misize \-marclinux \-marclinux_prof \&\-mlong\-calls \-mmedium\-calls \-msdata \-mirq\-ctrl\-saved \&\-mrgf\-banked\-regs \-mlpc\-width=\fR\fIwidth\fR \fB\-G\fR \fInum\fR \&\fB\-mvolatile\-cache \-mtp\-regno=\fR\fIregno\fR \&\fB\-mbitops \-mcmem \-munaligned\-access \&\-mauto\-modify\-reg \-mno\-brcc \&\-mcase\-vector\-pcrel \-mno\-cond\-exec \-mearly\-cbranchsi \&\-mindexed\-loads \-mlra\-priority\-none \&\-mlra\-priority\-compact \-mlra\-priority\-noncompact \-mmillicode \&\-msize\-level=\fR\fIlevel\fR \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmultcost=\fR\fInum\fR \fB\-mcode\-density\-frame \&\-mmpy\-option=\fR\fImulto\fR \&\fB\-mdiv\-rem \-mcode\-density \-mll64 \-mfpu=\fR\fIfpu\fR \fB\-mrf16 \-mbranch\-index\fR .Sp \&\fIگزینه‌های ARM\fR (\fBARM Options\fR) \&\fB\-mapcs\-frame \-mapcs \&\-mabi=\fR\fIname\fR \&\fB\-mgeneral\-regs\-only \-mno\-sched\-prolog \&\-mlittle\-endian \-mbig\-endian \&\-mbe8 \-mbe32 \&\-mfloat\-abi=\fR\fIname\fR \&\fB\-mfp16\-format=\fR\fIname\fR \&\fB\-mthumb\-interwork \&\-mcpu=\fR\fIname\fR \fB\-march=\fR\fIname\fR \fB\-mfpu=\fR\fIname\fR \fB\-mtune=\fR\fIname\fR \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR \&\fB\-mabort\-on\-noreturn \-mlong\-calls \&\-msingle\-pic\-base \-mpic\-register=\fR\fIreg\fR \&\fB\-mpic\-data\-is\-text\-relative \&\-mnop\-fun\-dllimport \&\-mpoke\-function\-name \&\-mthumb \-marm \&\-mtpcs\-frame \-mtpcs\-leaf\-frame \&\-mcaller\-super\-interworking \-mcallee\-super\-interworking \&\-mtp=\fR\fIname\fR \fB\-mtls\-dialect=\fR\fIdialect\fR \&\fB\-mword\-relocations \&\-mfix\-cortex\-m3\-ldrd \&\-mfix\-cortex\-a57\-aes\-1742098 \&\-mfix\-cortex\-a72\-aes\-1655431 \&\-munaligned\-access \&\-mslow\-flash\-data \&\-masm\-syntax\-unified \&\-mrestrict\-it \&\-mpure\-code \&\-mcmse \&\-mfix\-cmse\-cve\-2021\-35465 \&\-mstack\-protector\-guard=\fR\fIguard\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \&\fB\-mfdpic \&\-mbranch\-protection=\fR\fIfeatures\fR \&\fB\-mvectorize\-with\-neon\-quad \-mvectorize\-with\-neon\-double\fR.Sp \&\fIگزینه‌های AVR\fR (\fBAVR Options\fR) \&\fB\-mmcu=\fR\fImcu\fR \fB\-mabsdata \-maccumulate\-args \-mcvt \&\-mbranch\-cost=\fR\fIcost\fR \fB\-mfuse\-add=\fR\fIlevel\fR \fB\-mfuse\-move=\fR\fIlevel\fR \&\fB\-mfuse\-move2 \-mcall\-prologues \-mgas\-isr\-prologues \-mint8 \-mflmap \&\-mdouble=\fR\fIbits\fR \fB\-mlong\-double=\fR\fIbits\fR \fB\-mno\-call\-main \&\-mn_flash=\fR\fIsize\fR \fB\-mfract\-convert\-truncate \-mno\-interrupts \&\-mmain\-is\-OS_task \-mrelax \-mpmem\-wrap\-around \&\-mrmw \-mstrict\-X \-mtiny\-stack \&\-mrodata\-in\-ram \-msplit\-bit\-shift \-msplit\-ldst \-mshort\-calls \&\-mskip\-bug \-muse\-nonzero\-bits \-nodevicelib \-nodevicespecs \&\-Waddr\-space\-convert \-Wmisspelled\-isr\fR .Sp \&\fIگزینه‌های Blackfin\fR (\fBBlackfin Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] \&\fB\-msim \-momit\-leaf\-frame\-pointer \&\-mspecld\-anomaly \-mcsync\-anomaly \&\-mlow\-64k \-mstack\-check\-l1 \-mid\-shared\-library \&\-mleaf\-id\-shared\-library \&\-mshared\-library\-id=\fR\fIn\fR \&\fB\-msep\-data \-mlong\-calls \&\-mfast\-fp \-minline\-plt \-mmulticore \-mcorea \-mcoreb \-msdram \&\-micplb\fR .Sp \&\fIگزینه‌های C6X\fR (\fBC6X Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \-march=\fR\fIcpu\fR \&\fB\-msim \-msdata=\fR\fIsdata\-type\fR \fB\-mdsbt \-mlong\-calls\fR .Sp \&\fIگزینه‌های CRIS\fR (\fBCRIS Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR \fB\-march=\fR\fIcpu\fR \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmax\-stackframe=\fR\fIn\fR \&\fB\-metrax4 \-metrax100 \-mpdebug \-mcc\-init \-mno\-side\-effects \&\-mstack\-align \-mdata\-align \-mconst\-align \&\-m32\-bit \-m16\-bit \-m8\-bit \-mno\-prologue\-epilogue \&\-mbest\-lib\-options \-moverride\-best\-lib\-options \&\-mtrap\-using\-break8 \-mtrap\-unaligned\-atomic \&\-munaligned\-atomic\-may\-use\-library \&\-sim \-sim2 \&\-mmul\-bug\-workaround\fR .Sp \&\fIگزینه‌های C\-SKY\fR (\fBC\-SKY Options\fR) \&\fB\-march=\fR\fIarch\fR \fB\-mcpu=\fR\fIcpu\fR \&\fB\-mbig\-endian \-mlittle\-endian \&\-mfpu=\fR\fIfpu\fR \fB\-mdouble\-float \-mfdivdu \&\-mfloat\-abi=\fR\fIname\fR \&\fB\-melrw \-mistack \-mmp \-mcp \-mcache \-msecurity \-mtrust \&\-mdsp \-medsp \-mvdsp \&\-mdiv \-msmart \-mhigh\-registers \-manchor \&\-mpushpop \-mmultiple\-stld \-mconstpool \-mstack\-size \-mccrt \&\-mbranch\-cost=\fR\fIn\fR \fB\-msched\-prolog \-msim\fR .Sp \&\fIگزینه‌های Cygwin و MinGW\fR (\fBCygwin and MinGW Options\fR) \&\fB\-mconsole \-mcrtdll=\fR\fIlibrary\fR \fB\-mdll \&\-mnop\-fun\-dllimport \-mthreads \&\-municode \-mwin32 \-mwindows \-fno\-set\-stack\-executable \&\-fwritable\-relocated\-rdata \-mpe\-aligned\-commons \&\-muse\-libstdc\-wrappers\fR .Sp \&\fIگزینه‌های Darwin\fR (\fBDarwin Options\fR) \&\fB\-all_load \-allowable_client \-arch\fR \fIname\fR \&\fB\-arch_errors_fatal \-asm_macosx_version_min=\fR\fIversion\fR \&\fB\-bind_at_load \-bundle \-bundle_loader \&\-client_name \-compatibility_version \-current_version \&\-dead_strip \&\-dependency\-file \-dylib_file \-dylinker \-dylinker_install_name \&\-dynamic \-dynamiclib \-exported_symbols_list \&\-fapple\-kext \-fconstant\-cfstrings \-ffix\-and\-continue \&\-filelist \-findirect\-data \-flat_namespace \-force_cpusubtype_ALL \&\-force_flat_namespace \-framework\fR \fIname\fR \fB\-gfull \-gused \&\-headerpad_max_install_names \-iframework \&\-image_base \-init\fR \fIsymbol\-name\fR \fB\-install_name \-keep_private_externs \&\-matt\-stubs \-mconstant\-cfstrings \-mdynamic\-no\-pic \&\-mfix\-and\-continue \-mkernel \-mmacosx\-version\-min=\fR\fIversion\fR \&\fB\-mone\-byte\-bool \-msymbol\-stubs \-mtarget\-linker\fR[\fB=\fR]\fIversion\fR \&\fB\-nodefaultexport \-nodefaultrpaths \&\-pagezero_size \-preload \-read_only_relocs \&\-sectalign \-sectcreate \&\-seg_addr_table \&\-seg1addr \-segaddr \&\-segprot \-segs_read_only_addr \-segs_read_write_addr \&\-sub_library \-sub_umbrella \&\-twolevel_namespace \-twolevel_namespace_hints \&\-umbrella \-undefined \-unexported_symbols_list \&\-weak_framework\fR \fIname\fR \fB\-weak_reference_mismatches \&\-whatsloaded \-whyload \&\-F \-ObjC \-ObjC++ \-Wnonportable\-cfstrings\fR .Sp \&\fIگزینه‌های DEC Alpha\fR (\fBDEC Alpha Options\fR) \&\fB\-mno\-fp\-regs \-msoft\-float \&\-mieee \-mieee\-with\-inexact \-mieee\-conformant \&\-mfp\-trap\-mode=\fR\fImode\fR \fB\-mfp\-rounding\-mode=\fR\fImode\fR \&\fB\-mtrap\-precision=\fR\fImode\fR \fB\-mbuild\-constants \&\-mcpu=\fR\fIcpu\-type\fR \fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mbwx \-mmax \-mfix \-mcix \&\-msafe\-bwa \-msafe\-partial \&\-mfloat\-vax \-mfloat\-ieee \&\-mexplicit\-relocs \-msmall\-data \-mlarge\-data \&\-msmall\-text \-mlarge\-text \&\-mmemory\-latency=\fR\fItime\fR \&\fB\-mtls\-kernel \-mtls\-size=\fR\fIbitsize\fR \&\fB\-mlong\-double\-128 \-mlong\-double\-64\fR .Sp \&\fIگزینه‌های eBPF\fR (\fBeBPF Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \&\-mframe\-limit=\fR\fIbytes\fR \fB\-mxbpf \-mco\-re \-mjmpext \-mjmp32 \&\-malu32 \-mv3\-atomics \-mbswap \-msdiv \-msmov \-mcpu=\fR\fIversion\fR \&\fB\-masm=\fR\fIdialect\fR \fB\-minline\-memops\-threshold=\fR\fIbytes\fR \&\fB\-Wco\-re\fR .Sp \&\fIگزینه‌های FR30\fR (\fBFR30 Options\fR) \&\fB\-msmall\-model \-mno\-lsim\fR .Sp \&\fIگزینه‌های FRV\fR (\fBFRV Options\fR) \&\fB\-mgpr\-32 \-mgpr\-64 \-mfpr\-32 \-mfpr\-64 \&\-mhard\-float \-msoft\-float \&\-malloc\-cc \-mfixed\-cc \-mdword \-mdouble \-mmedia \-mmuladd \&\-mfdpic \-minline\-plt \-mgprel\-ro \-multilib\-library\-pic \&\-mlinked\-fp \-mlong\-calls \-malign\-labels \&\-mlibrary\-pic \-macc\-4 \-macc\-8 \&\-mpack \-mno\-eflags \-mno\-cond\-move \&\-mno\-optimize\-membar \-mno\-scc \-mno\-cond\-exec \&\-mno\-vliw\-branch \-mno\-multi\-cond\-exec \-mno\-nested\-cond\-exec \&\-mtomcat\-stats \&\-mTLS \-mtls \&\-mcpu=\fR\fIcpu\fR .Sp \&\fIگزینه‌های FT32\fR (\fBFT32 Options\fR) \&\fB\-msim \-mnodiv \-mft32b \-mcompress \-mnopm\fR .Sp \&\fIگزینه‌های GNU/Linux\fR (\fBGNU/Linux Options\fR) \&\fB\-mglibc \-muclibc \-mmusl \-mbionic \-mandroid \&\-tno\-android\-cc \-tno\-android\-ld\fR .Sp \&\fIگزینه‌های H8/300\fR (\fBH8/300 Options\fR) \&\fB\-mrelax \-mh \-ms \-mn \-msx \-ms2600 \&\-mquickcall \-mslowbyte \-mexr \-mint32 \-malign\-300\fR .Sp \&\fIگزینه‌های HPPA\fR (\fBHPPA Options\fR) \&\fB\-march=\fR\fIarchitecture\-type\fR \&\fB\-mno\-atomic\-libcalls \&\-mcaller\-copies \-mdisable\-fpregs \-mdisable\-indexing \&\-mordered \-mfast\-indirect\-calls \-mgas \-mgnu\-ld \-mhp\-ld \&\-mfixed\-range=\fR\fIregister\-range\fR \&\fB\-mcoherent\-ldcw \-mlinker\-opt \-mlong\-calls \&\-mlong\-load\-store \&\-mno\-space\-regs \-msoft\-float \-mpa\-risc\-1\-0 \&\-mpa\-risc\-1\-1 \-mpa\-risc\-2\-0 \-mportable\-runtime \&\-mschedule=\fR\fIcpu\-type\fR \fB\-msoft\-mult \-msio \-mwsio \&\-munix=\fR\fIunix\-std\fR \fB\-nolibdld \-static \-threads\fR .Sp \&\fIگزینه‌های IA\-64\fR (\fBIA\-64 Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \-mgnu\-as \-mgnu\-ld \-mno\-pic \&\-mvolatile\-asm\-stop \-mregister\-names \-msdata \&\-mconstant\-gp \-mauto\-pic \&\-minline\-float\-divide\-min\-latency \&\-minline\-float\-divide\-max\-throughput \&\-mno\-inline\-float\-divide \&\-minline\-int\-divide\-min\-latency \&\-minline\-int\-divide\-max\-throughput \&\-mno\-inline\-int\-divide \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput \&\-mno\-inline\-sqrt \&\-mdwarf2\-asm \-mearly\-stop\-bits \&\-mfixed\-range=\fR\fIregister\-range\fR \fB\-mtls\-size=\fR\fItls\-size\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-milp32 \-mlp64 \&\-msched\-br\-data\-spec \-msched\-ar\-data\-spec \-msched\-control\-spec \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec \&\-msched\-spec\-ldc \-msched\-spec\-control\-ldc \&\-msched\-stop\-bits\-after\-every\-cycle \-msched\-count\-spec\-in\-critical\-path \&\-msel\-sched\-dont\-check\-control\-spec \-msched\-fp\-mem\-deps\-zero\-cost \&\-msched\-max\-memory\-insns\-hard\-limit \-msched\-max\-memory\-insns=\fR\fImax\-insns\fR .Sp \&\fIگزینه‌های LM32\fR (\fBLM32 Options\fR) \&\fB\-mbarrel\-shift\-enabled \-mdivide\-enabled \-mmultiply\-enabled \&\-msign\-extend\-enabled \-muser\-enabled\fR .Sp \&\fIگزینه‌های LoongArch\fR (\fBLoongArch Options\fR) \&\fB\-march=\fR\fIarch\-type\fR \fB\-mtune=\fR\fItune\-type\fR \fB\-mabi=\fR\fIbase\-abi\-type\fR \&\fB\-mfpu=\fR\fIfpu\-type\fR \fB\-msimd=\fR\fIsimd\-type\fR \&\fB\-msoft\-float \-msingle\-float \-mdouble\-float \-mlsx \-mlasx \&\-mbranch\-cost=\fR\fIn\fR \fB\-maddr\-reg\-reg\-cost=\fR\fIn\fR \fB\-mcheck\-zero\-division \&\-mbreak\-code=\fR\fIcode\fR \&\fB\-mcond\-move\-int \-mcond\-move\-float \&\-memcpy \-mstrict\-align \-G\fR \fInum\fR \&\fB\-mmax\-inline\-memcpy\-size=\fR\fIn\fR \&\fB\-mexplicit\-relocs=\fR\fIstyle\fR \fB\-mexplicit\-relocs \-mno\-explicit\-relocs \&\-mdirect\-extern\-access \&\-mcmodel=\fR\fIcode\-model\fR \fB\-mrelax \-mpass\-mrelax\-to\-as \&\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mfrecipe \-mdiv32 \&\-mlam\-bh \-mlamcas \-mld\-seq\-sa \&\-mscq \-mtls\-dialect=\fR\fIopt\fR \&\fB\-mannotate\-tablejump\fR .Sp \&\fIگزینه‌های LynxOS\fR (\fBLynxOS Options\fR) \&\fB\-mshared \-mthreads \-mlegacy\-threads\fR .Sp \&\fIگزینه‌های M32C\fR (\fBM32C Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR .Sp \&\fIگزینه‌های M32R/D\fR (\fBM32R/D Options\fR) \&\fB\-m32r2 \-m32rx \-m32r \&\-mdebug \&\-malign\-loops \&\-missue\-rate=\fR\fInumber\fR \&\fB\-mbranch\-cost=\fR\fInumber\fR \&\fB\-mmodel=\fR\fIcode\-size\-model\-type\fR \&\fB\-msdata=\fR\fIsdata\-type\fR \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR \&\fB\-G\fR \fInum\fR .Sp \&\fIگزینه‌های M680x0\fR (\fBM680x0 Options\fR) \&\fB\-march=\fR\fIarch\fR \fB\-mcpu=\fR\fIcpu\fR \fB\-mtune=\fR\fItune\fR \&\fB\-m68000 \-m68020 \-m68020\-40 \-m68020\-60 \-m68030 \-m68040 \&\-m68060 \-m68302 \-m68332 \-m68851 \&\-mcpu32 \-mfidoa \-m5200 \-m5206e \-m528x \-m5307 \-m5407 \&\-mcfv4e \-mbitfield \-mc68000 \-mc68020 \&\-mrtd \-mdiv \-mshort \&\-mhard\-float \-m68881 \-msoft\-float \-mpcrel \&\-malign\-int \-mstrict\-align \-msep\-data \&\-mshared\-library\-id=\fR\fIn\fR \fB\-mid\-shared\-library \&\-mxgot \-mxtls \-mlong\-jump\-table\-offsets\fR .Sp \&\fIگزینه‌های MCore\fR (\fBMCore Options\fR) \&\fB\-mhardlit \-mdiv \-mrelax\-immediates \&\-mwide\-bitfields \&\-m4byte\-functions \-mcallgraph\-data \&\-mslow\-bytes \-mno\-lsim \&\-mlittle\-endian \-mbig\-endian \-m210 \-m340 \-mstack\-increment\fR .Sp \&\fIگزینه‌های MicroBlaze\fR (\fBMicroBlaze Options\fR) \&\fB\-msoft\-float \-mhard\-float \-msmall\-divides \-mcpu=\fR\fIcpu\fR \&\fB\-mmemcpy \-mxl\-soft\-mul \-mxl\-soft\-div \-mxl\-barrel\-shift \&\-mxl\-pattern\-compare \-mxl\-gp\-opt \&\-mxl\-multiply\-high \-mxl\-float\-convert \-mxl\-float\-sqrt \&\-mbig\-endian \-mlittle\-endian \-mxl\-reorder \-mxl\-mode\-\fR\fIapp\-model\fR \&\fB\-mxl\-prefetch \-mpic\-data\-is\-text\-relative\fR .Sp \&\fIگزینه‌های MIPS\fR (\fBMIPS Options\fR) \&\fB\-EL \-EB \-mel \-meb \-march=\fR\fIarch\fR \fB\-mtune=\fR\fIarch\fR \&\fB\-mips1 \-mips2 \-mips3 \-mips4 \-mips32 \-mips32r2 \-mips32r3 \-mips32r5 \&\-mips32r6 \-mips64 \-mips64r2 \-mips64r3 \-mips64r5 \-mips64r6 \&\-mips16 \-mmips16e2 \-mflip\-mips16 \&\-minterlink\-compressed \-minterlink\-mips16 \&\-mabi=\fR\fIabi\fR \fB\-mabicalls \-mshared \-mplt \-mxgot \&\-mgp32 \-mgp64 \-mfp32 \-mfpxx \-mfp64 \-mhard\-float \-msoft\-float \&\-mno\-float \-msingle\-float \-mdouble\-float \-modd\-spreg \&\-mabs=\fR\fImode\fR \fB\-mnan=\fR\fIencoding\fR \&\fB\-mdsp \-mdspr2 \-mmcu \-meva \-mvirt \-mxpa \-mcrc \-mginv \&\-mmicromips \-mmsa \&\-mloongson\-mmi \-mloongson\-ext \-mloongson\-ext2 \&\-mfpu=\fR\fIfpu\-type\fR \&\fB\-msmartmips \-mpaired\-single \-mdmx \-mips3d \-mmt \-mllsc \&\-mlong64 \-mlong32 \-msym32 \&\-G\fR\fInum\fR \fB\-mno\-local\-sdata \-mno\-extern\-sdata \-mno\-gopt \&\-membedded\-data \-muninit\-const\-in\-rodata \&\-mcode\-readable=\fR\fIsetting\fR \fB\-mno\-data\-in\-code \-mcode\-xonly \&\-msplit\-addresses \-mexplicit\-relocs \-mexplicit\-relocs=\fR\fIrelease\fR \&\fB\-mno\-check\-zero\-division \-mdivide\-traps \-mdivide\-breaks \&\-mno\-load\-store\-pairs \&\-mstrict\-align \-mno\-unaligned\-access \&\-mmemcpy \-mlong\-calls \&\-mmad \-mimadd \-mno\-fused\-madd \-nocpp \&\-mfix\-24k \-mfix\-r4000 \-mfix\-r4400 \-mfix\-r5900 \&\-mfix\-r10000 \-mfix\-rm7000 \-mfix\-vr4120 \-mfix\-vr4130 \-mfix\-sb1 \&\-mfix4300 \-mr10k\-cache\-barrier=\fR\fIsetting\fR \&\fB\-mflush\-func=\fR\fIfunc\fR \fB\-mno\-flush\-func \&\-mbranch\-cost=\fR\fInum\fR \fB\-mbranch\-likely \&\-mcompact\-branches=\fR\fIpolicy\fR \&\fB\-mno\-fp\-exceptions \-mvr4130\-align \-msynci \-mno\-lxc1\-sxc1 \-mno\-madd4 \&\-mno\-relax\-pic\-calls \-mmcount\-ra\-address \&\-mframe\-header\-opt\fR.Sp \&\fIگزینه‌های MMIX\fR (\fBگزینه‌های MMIX\fR) \&\fB\-mlibfuncs \-mepsilon \-mabi=gnu \-mabi=mmixware \&\-mzero\-extend \-mknuthdiv \-mtoplevel\-symbols \&\-melf \-mbranch\-predict \-mbase\-addresses \&\-msingle\-exit \-mset\-data\-start=\fR\fIaddress\fR \&\fB\-mset\-program\-start=\fR\fIaddress\fR \fB\-mno\-set\-program\-start\fR .Sp \&\fIگزینه‌های MN10300\fR (\fBگزینه‌های MN10300\fR) \&\fB\-mmult\-bug \-mno\-mult\-bug \&\-mam33 \-mam33\-2 \-mam34 \&\-mtune=\fR\fIcpu\-type\fR \&\fB\-mno\-return\-pointer\-on\-d0 \&\-mno\-crt0 \-mrelax \-mno\-liw \-mno\-setlb\fR .Sp \&\fIگزینه‌های Moxie\fR (\fBگزینه‌های Moxie\fR) \&\fB\-meb \-mel \-mmul.x \-mno\-crt0\fR .Sp \&\fIگزینه‌های MSP430\fR (\fBگزینه‌های MSP430\fR) \&\fB\-msim \-masm\-hex \-mmcu=\fR\fIname\fR \fB\-mlarge \-msmall \-mrelax \&\-mwarn\-mcu \-mwarn\-devices\-csv \&\-mcode\-region=\fR\fIwhere\fR \fB\-mdata\-region=\fR\fIwhere\fR \&\fB\-muse\-lower\-region\-prefix \&\-msilicon\-errata=\fR\fIname\fR[\fB,\fR\fIname\fR\fB...\fR] \&\fB\-msilicon\-errata\-warn=\fR\fIname\fR[\fB,\fR\fIname\fR\fB...\fR] \&\fB\-mhwmult=\fR\fItype\fR \fB\-minrt \-mtiny\-printf \-mmax\-inline\-shift=\fR\fIn\fR .Sp \&\fIگزینه‌های NDS32\fR (\fBگزینه‌های NDS32\fR) \&\fB\-mbig\-endian \-mlittle\-endian \-EB \-EL \&\-mabi=\fR\fIname\fR \fB\-mfloat\-abi=\fR\fIname\fR \&\fB\-mreduced\-regs \-mfull\-regs \&\-malways\-align \-malign\-functions \&\-mfp\-as\-gp \-mcmov \-mhw\-abs \&\-mext\-perf \-mext\-perf2 \-mext\-string \-mext\-dsp \&\-mext\-fpu\-fma \-mext\-fpu\-sp \-mext\-fpu\-dp \&\-mv3push \-m16\-bit \-mvh \&\-misr\-vector\-size=\fR\fInum\fR \fB\-misr\-secure=\fR\fInum\fR \&\fB\-mcache\-block\-size=\fR\fInum\fR \&\fB\-march=\fR\fIarch\fR \fB\-mcpu=\fR\fIcpu\fR \&\fB\-mconfig\-fpu=\fR\fInum\fR \fB\-mconfig\-mul=\fR\fItype\fR \&\fB\-mconfig\-register\-ports=\fR\fIkind\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \&\fB\-mctor\-dtor \-mrelax \-mrelax\-hint \&\-msched\-prolog\-epilog \-mno\-ret\-in\-naked\-func \&\-malways\-save\-lp \-munaligned\-access \-minline\-asm\-r15\fR .Sp \&\fIگزینه‌های Nvidia PTX\fR (\fBگزینه‌های Nvidia PTX\fR) \&\fB\-m64 \-march=\fR\fIarch\fR \fB\-misa=\fR\fIarch\fR \fB\-march\-map=\fR\fIarch\fR \&\fB\-mptx=\fR\fIversion\fR \fB\-mmainkernel \-moptimize \&\-msoft\-stack \-msoft\-stack\-reserve\-local=\fR\fIsize\fR \&\fB\-muniform\-simt \-mgomp\fR .Sp \&\fIگزینه‌های OpenRISC\fR (\fBگزینه‌های OpenRISC\fR) \&\fB\-mboard=\fR\fIname\fR \fB\-mhard\-mul \-mhard\-div \&\-msoft\-mul \-msoft\-div \&\-msoft\-float \-mhard\-float \-mdouble\-float \-munordered\-float \&\-mcmov \-mror \-mrori \-msext \-msfimm \-mshftimm \&\-mcmodel=\fR\fIcode\-model\fR .Sp \&\fIگزینه‌های PDP\-11\fR (\fBگزینه‌های PDP\-11\fR) \&\fB\-mfpu \-msoft\-float \-mac0 \-m40 \-m45 \-m10 \&\-mint32 \-mint16 \&\-msplit \-munix\-asm \-mdec\-asm \-mgnu\-asm \-mlra\fR .Sp \&\fIگزینه‌های Picolibc\fR (\fBگزینه‌های Picolibc\fR) \&\fB\-\-oslib=\fR\fIlibrary\fR \fB\-\-crt0=\fR[\fBnone\fR|\fBminimal\fR|\fBhosted\fR|\fBsemihost\fR] \&\fB\-\-printf=\fR[\fBd\fR|\fBf\fR|\fBl\fR|\fBi\fR|\fBm\fR] \fB\-\-scanf=\fR[\fBd\fR|\fBf\fR|\fBl\fR|\fBi\fR|\fBm\fR] .Sp \&\fIگزینه‌های PowerPC\fR گزینه‌های RS/6000 و PowerPC را ببینید. .Sp \&\fIگزینه‌های PRU\fR (\fBگزینه‌های PRU\fR) \&\fB\-mmcu=\fR\fImcu\fR \fB\-minrt \-mno\-relax \-mloop \&\-mmul \-mfillzero \-mabi=\fR\fIvariant\fR .Sp \&\fIگزینه‌های RISC\-V\fR (\fBگزینه‌های RISC\-V\fR) \&\fB\-mbranch\-cost=\fR\fIN\-instruction\fR \&\fB\-mabi=\fR\fIABI\-string\fR \&\fB\-mfdiv \-mdiv \&\-mno\-fence\-tso \&\-misa\-spec=\fR\fIISA\-spec\-string\fR \&\fB\-march=\fR[\fIISA\fR|\fIProfile\fR|\fIProfile_ISA\fR|\fIprocessor\-string\fR] \&\fB\-mcpu=\fR\fIprocessor\-string\fR \fB\-mtune=\fR\fIprocessor\-string\fR \&\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR \&\fB\-msmall\-data\-limit=\fR\fIN\-bytes\fR \&\fB\-msave\-restore \-mno\-shorten\-memrefs \&\-mstrict\-align \-mscalar\-strict\-align \-mno\-vector\-strict\-align \&\-mcmodel=medlow \-mcmodel=medany \-mcmodel=large \&\-mexplicit\-relocs \-mrelax \-mriscv\-attribute \&\-malign\-data=\fR\fItype\fR \&\fB\-mbig\-endian \-mlittle\-endian \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \&\fB\-mcsr\-check \-momit\-leaf\-frame\-pointer \-mmovcc \&\-mno\-inline\-atomics \-mno\-inline\-strlen \&\-mno\-inline\-strcmp \-mno\-inline\-strncmp \&\-mstringop\-strategy=\fR\fIstrategy\fR \&\fB\-mtls\-dialect=desc \-mtls\-dialect=trad \&\-mrvv\-vector\-bits=\fR\fIvalue\fR \fB\-mrvv\-max\-lmul=\fR\fIvalue\fR \&\fB\-madjust\-lmul\-cost \-mmax\-vectorization \-mno\-autovec\-segment\fR .Sp \&\fIگزینه‌های RL78\fR (\fBگزینه‌های RL78\fR) \&\fB\-msim \-mallregs \-mrelax \-mes0 \&\-mmul=none \-mmul=g13 \-mmul=g14 \-mmul=rl78 \&\-mcpu=g10 \-mcpu=g13 \-mcpu=g14 \-mcpu=rl78 \&\-mg10 \-mg13 \-mg14 \-mrl78 \&\-msave\-mduc\-in\-interrupts\fR .Sp \&\fIگزینه‌های RS/6000 و PowerPC\fR (\fBگزینه‌های RS/6000 و PowerPC\fR) \&\fB\-mcpu=\fR\fIcpu\-type\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \fB\-mprofile\-kernel \&\-mpowerpc64 \&\-maltivec \&\-mpowerpc\-gpopt \-mpowerpc\-gfxopt \-mmfcrf \-mpopcntb \-mpopcntd \&\-mfprnd \-mcmpb \-mhard\-dfp \&\-mfull\-toc \-mminimal\-toc \-mno\-fp\-in\-toc \-mno\-sum\-in\-toc \&\-maix64 \-maix32 \-m64 \-m32 \-mxl\-compat \-mpe \&\-malign\-power \-malign\-natural \&\-msoft\-float \-mhard\-float \-mmultiple \-mupdate \&\-mavoid\-indexed\-addresses \&\-mfused\-madd \-mbit\-align \-mbit\-word \&\-mstrict\-align \-mrelocatable \-mrelocatable\-lib \&\-mlittle \-mlittle\-endian \-mbig \-mbig\-endian \&\-mdynamic\-no\-pic \-msingle\-pic\-base \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR \&\fB\-mcall\-aixdesc \-mcall\-eabi \-mcall\-freebsd \&\-mcall\-linux \-mcall\-netbsd \-mcall\-openbsd \&\-mcall\-sysv \-mcall\-sysv\-eabi \-mcall\-sysv\-noeabi \&\-mtraceback=\fR\fItraceback_type\fR \&\fB\-maix\-struct\-return \-msvr4\-struct\-return \&\-mabi=\fR\fIabi\-type\fR \fB\-msecure\-plt \-mbss\-plt \&\-msplit\-patch\-nops \&\-mregnames \-mlongcall \-mpltseq \-mtls\-markers \&\-mblock\-move\-inline\-limit=\fR\fInum\fR \&\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR \&\fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR \&\fB\-mblock\-ops\-unaligned\-vsx \&\-mstring\-compare\-inline\-limit=\fR\fInum\fR \&\fB\-misel \-mvsx \-mvrsave \-mmulhw \-mdlmzb \-mprototype \&\-msim \-mmvme \-mads \-myellowknife \-memb \-meabi \-msdata \&\-msdata=\fR\fIopt\fR \fB\-mreadonly\-in\-sdata \-mvxworks \-G\fR \fInum\fR \&\fB\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mno\-recip \-mrecip\-precision \&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \&\-mpointers\-to\-nested\-functions \-msave\-toc\-indirect \-mpower8\-fusion \&\-mcrypto \-mhtm \-mquad\-memory \-mquad\-memory\-atomic \&\-mcompat\-align\-parm \&\-mfloat128 \-mfloat128\-hardware \&\-mgnu\-attribute \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \fB\-mprefixed \&\-mpcrel \-mmma \-mdense\-math \-mrop\-protect \-mprivileged \&\-mno\-splat\-word\-constant \-mno\-splat\-float\-constant \&\-mno\-ieee128\-constant \-mno\-warn\-altivec\-long\fR .Sp \&\fIگزینه‌های RX\fR (\fBگزینه‌های RX\fR) \&\fB\-m64bit\-doubles \-m32bit\-doubles \-fpu \-nofpu \&\-mcpu=\fR\fIname\fR \&\fB\-mbig\-endian\-data \-mlittle\-endian\-data \&\-msmall\-data\-limit=\fR\fIN\fR \&\fB\-msim \-mas100\-syntax \-mrelax \&\-mmax\-constant\-size=\fR\fIN\fR \fB\-mint\-register=\fR\fIN\fR \&\fB\-mpid \-mno\-allow\-string\-insns \-mjsr \&\-mno\-warn\-multiple\-fast\-interrupts \-msave\-acc\-in\-interrupts \&\-mlra\fR .Sp \&\fIگزینه‌های S/390 و zSeries\fR (\fBگزینه‌های S/390 و zSeries\fR) \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-march=\fR\fIcpu\-type\fR \&\fB\-mhard\-float \-msoft\-float \-mhard\-dfp \&\-mlong\-double\-64 \-mlong\-double\-128 \&\-mbackchain \-mpacked\-stack \&\-msmall\-exec \-mmvcle \&\-m64 \-m31 \-mdebug \-mesa \-mzarch \&\-mhtm \-mvx \-mzvector \&\-mtpf\-trace \-mtpf\-trace\-skip \-mmain \&\-mfused\-madd \-mno\-fused\-madd \&\-mwarn\-framesize=\fR\fIframesize\fR \fB\-mwarn\-dynamicstack \&\-mstack\-size=\fR\fIstack\-size\fR \fB\-mno\-stack\-size \&\-mstack\-guard=\fR\fIstack\-guard\fR \fB\-mno\-stack\-guard \&\-mstack\-protector\-guard=\fR\fIguard\fR \&\fB\-mstack\-protector\-guard\-record \&\-mhotpatch=\fR\fIpre\-halfwords\fR\fB,\fR\fIpost\-halfwords\fR \&\fB\-mno\-pic\-data\-is\-text\-relative \&\-mindirect\-branch=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-jump=\fR\fIchoice\fR \fB\-mindirect\-branch\-call=\fR\fIchoice\fR \&\fB\-mfunction\-return=\fR\fIchoice\fR \&\fB\-mfunction\-return\-mem=\fR\fIchoice\fR \fB\-mfunction\-return\-reg=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-table \&\-mfentry \-mrecord\-mcount \-mnop\-mcount \&\-mpreserve\-args \-munaliged\-symbols\fR .Sp \&\fIگزینه‌های SH\fR (\fBگزینه‌های SH\fR) \&\fB\-m1 \-m2 \-m2e \&\-m2a \-m2a\-nofpu \-m2a\-single \-m2a\-single\-only \&\-m3 \-m3e \&\-m4 \-m4\-nofpu \-m4\-single \-m4\-single\-only \&\-m4\-100 \-m4\-100\-nofpu \-m4\-100\-single \-m4\-100\-single\-only \&\-m4\-200 \-m4\-200\-nofpu \-m4\-200\-single \-m4\-200\-single\-only \&\-m4\-300 \-m4\-300\-nofpu \-m4\-300\-single \-m4\-300\-single\-only \&\-m4\-340 \-m4\-400 \-m4\-500 \&\-m4a \-m4al \-m4a\-nofpu \-m4a\-single \-m4a\-single\-only \&\-mb \-ml \-mdalign \-mrelax \&\-mbigtable \-mbitops \-mfmovd \-mrenesas \-mnomacsave \&\-mieee \-misize \-minline\-ic_invalidate \&\-mprefergot \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister\-range\fR \&\fB\-maccumulate\-outgoing\-args \&\-matomic\-model=\fR\fIatomic\-model\fR \&\fB\-mbranch\-cost=\fR\fInum\fR \fB\-mzdcbranch \&\-mcbranch\-force\-delay\-slot \&\-mfsca \-mfsrra \&\-mpretend\-cmove \-mfdpic \-mtas \-mlra\fR .Sp \&\fIگزینه‌های Solaris 2\fR (\fBگزینه‌های Solaris 2\fR) \&\fB\-mclear\-hwcap \-mno\-clear\-hwcap \-mimpure\-text \-mno\-impure\-text \&\-gsctf\fR .Sp \&\fIگزینه‌های SPARC\fR (\fBگزینه‌های SPARC\fR) \&\fB\-mcpu=\fR\fIcpu\-type\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \&\fB\-mmemory\-model=\fR\fImem\-model\fR \&\fB\-m32 \-m64 \-mptr32 \-mptr64 \-mapp\-regs \&\-mfaster\-structs \-mflat \&\-mfpu \-mhard\-float \-msoft\-float \&\-mhard\-quad\-float \-msoft\-quad\-float \&\-mstack\-bias \-mstd\-struct\-return \&\-munaligned\-doubles \-muser\-mode \&\-mv8plus \-mvis \&\-mvis2 \-mvis3 \-mvis3b \-mvis4 \-mvis4b \&\-mcbcond \-mfmaf \-mfsmuld \-mpopc \-msubxc \&\-mfix\-at697f \-mfix\-ut699 \-mfix\-ut700 \-mfix\-gr712rc\fR .Sp \&\fIگزینه‌های System V\fR (\fBگزینه‌های System V\fR) \&\fB\-YP,\fR\fIpaths\fR \fB\-Ym,\fR\fIdir\fR .Sp \&\fIگزینه‌های V850\fR (\fBگزینه‌های V850\fR) \&\fB\-mlong\-calls \-mep \&\-mprolog\-function \-mspace \&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR \&\fB\-mv850 \-mv850e3v5 \-m850e2v4 \-mv850e2v3 \&\-mv850e2 \-mv850e1 \-mv850es \-mv850e \&\-mdisable\-callt \-mrelax \-mlong\-jumps \&\-msoft\-float \-mhard\-float \-mloop \&\-mrh850\-abi \-mghs \-mgcc\-abi \&\-m8byte\-align \-mbig\-switch \-mapp\-regs \-msmall\-sld \&\-mno\-strict\-align \-mjump\-tables\-in\-data\-section\fR .Sp \&\fIگزینه‌های VAX\fR (\fBگزینه‌های VAX\fR) \&\fB\-munix \-mgnu \-md \-md\-float \-mg \-mg\-float \-mlra \&\-mvaxc\-alignment \-mqmath\fR.Sp \&\fIگزینه‌های Visium\fR (\fBVisium Options\fR) \&\fB\-mdebug \-msim \-mfpu \-mhard\-float \-msoft\-float \&\-mcpu=\fR\fIcpu\-type\fR \fB\-mtune=\fR\fIcpu\-type\fR \fB\-msv\-mode \-muser\-mode\fR .Sp \&\fIگزینه‌های VMS\fR (\fBVMS Options\fR) \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64 \&\-mpointer\-size=\fR\fIsize\fR .Sp \&\fIگزینه‌های VxWorks\fR (\fBVxWorks Options\fR) \&\fB\-mrtp \-msmp \-mvthreads \-non\-static \-Bstatic \-Bdynamic \&\-Xbind\-lazy \-Xbind\-now\fR .Sp \&\fIگزینه‌های x86\fR (\fBx86 Options\fR) \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-march=\fR\fIcpu\-type\fR \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR \fB\-mdump\-tune\-features \-mno\-default \&\-mfpmath=\fR\fIunit\fR \&\fB\-masm=\fR\fIdialect\fR \fB\-mno\-fancy\-math\-387 \&\-mno\-fp\-ret\-in\-387 \-m80387 \-mhard\-float \-msoft\-float \-mieee\-fp \&\-mrtd \-malign\-double \&\-mpreferred\-stack\-boundary=\fR\fInum\fR \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR \&\fB\-mcld \-mcx16 \-msahf \-mmovbe \-mcrc32 \-mmwait \&\-mrecip \-mrecip=\fR\fIopt\fR \&\fB\-mvzeroupper \-mstv \-mprefer\-avx128 \-mprefer\-vector\-width=\fR\fIopt\fR \&\fB\-mpartial\-vector\-fp\-math \&\-mmove\-max=\fR\fIbits\fR \fB\-mstore\-max=\fR\fIbits\fR \&\fB\-mnoreturn\-no\-callee\-saved\-registers \&\-mmmx \-msse \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx \&\-mavx2 \-mavx512f \-mavx512cd \-mavx512vl \&\-mavx512bw \-mavx512dq \-mavx512ifma \-mavx512vbmi \-msha \-maes \&\-mpclmul \-mfsgsbase \-mrdrnd \-mf16c \-mfma \-mpconfig \-mwbnoinvd \&\-mptwrite \-mclflushopt \-mclwb \-mxsavec \-mxsaves \&\-msse4a \-m3dnow \-m3dnowa \-mpopcnt \-mabm \-mbmi \-mtbm \-mfma4 \-mxop \&\-madx \-mlzcnt \-mbmi2 \-mfxsr \-mxsave \-mxsaveopt \-mrtm \-mhle \-mlwp \&\-mmwaitx \-mclzero \-mpku \-mgfni \-mvaes \-mwaitpkg \&\-mshstk \-mmanual\-endbr \-mcet\-switch \-mforce\-indirect\-call \&\-mavx512vbmi2 \-mavx512bf16 \-menqcmd \&\-mvpclmulqdq \-mavx512bitalg \-mmovdiri \-mmovdir64b \-mavx512vpopcntdq \&\-mavx512vnni \-mprfchw \-mrdpid \&\-mrdseed \-msgx \-mavx512vp2intersect \-mserialize \-mtsxldtrk \&\-mamx\-tile \-mamx\-int8 \-mamx\-bf16 \-muintr \-mhreset \&\-mavxvnni \-mamx\-fp8 \-mavx512fp16 \-mavxifma \-mavxvnniint8 \&\-mavxneconvert \-mcmpccxadd \-mamx\-fp16 \-mprefetchi \-mraoint \&\-mamx\-complex \-mavxvnniint16 \-msm3 \-msha512 \-msm4 \-mapxf \&\-musermsr \-mavx10.1 \-mavx10.2 \-mamx\-avx512 \-mamx\-tf32 \-mmovrs \&\-mamx\-movrs \-mavx512bmm \-mcldemote \-mms\-bitfields \&\-mno\-align\-stringops \-minline\-all\-stringops \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR \&\fB\-mkl \-mwidekl \&\-mmemcpy\-strategy=\fR\fIstrategy\fR \fB\-mmemset\-strategy=\fR\fIstrategy\fR \&\fB\-mpush\-args \-maccumulate\-outgoing\-args \-m128bit\-long\-double \&\-m96bit\-long\-double \-mlong\-double\-64 \-mlong\-double\-80 \-mlong\-double\-128 \&\-mregparm=\fR\fInum\fR \fB\-msseregparm \&\-mveclibabi=\fR\fItype\fR \fB\-mvect8\-ret\-in\-mem \&\-mpc32 \-mpc64 \-mpc80 \-mdaz\-ftz \-mstackrealign \-mstack\-arg\-probe \&\-momit\-leaf\-frame\-pointer \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs \&\-mcmodel=\fR\fIcode\-model\fR \fB\-mabi=\fR\fIname\fR \fB\-maddress\-mode=\fR\fImode\fR \&\fB\-m32 \-m64 \-mx32 \-m16 \-miamcu \-mlarge\-data\-threshold=\fR\fInum\fR \&\fB\-msse2avx \-mfentry \-mrecord\-mcount \-mnop\-mcount \-m8bit\-idiv \&\-minstrument\-return=\fR\fItype\fR \fB\-mrecord\-return \&\-mfentry\-name=\fR\fIname\fR \fB\-mfentry\-section=\fR\fIname\fR \&\fB\-mskip\-rax\-setup \&\-mavx256\-split\-unaligned\-load \-mavx256\-split\-unaligned\-store \&\-malign\-data=\fR\fItype\fR \fB\-mstack\-protector\-guard=\fR\fIguard\fR \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \&\fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR \&\fB\-mgeneral\-regs\-only \-mcall\-ms2sysv\-xlogues \-mtls\-dialect=\fR\fItype\fR \&\fB\-mrelax\-cmpxchg\-loop \&\-mindirect\-branch=\fR\fIchoice\fR \fB\-mfunction\-return=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-register \-mharden\-sls=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-cs\-prefix \-mapx\-inline\-asm\-use\-gpr32 \&\-mgather \-mscatter \&\-mneeded \-mno\-direct\-extern\-access \&\-munroll\-only\-small\-loops \-mdispatch\-scheduler \-mlam=\fR\fIchoice\fR .Sp \&\fIگزینه‌های x86 ویندوز\fR گزینه‌های Cygwin و MinGW را ببینید. .Sp \&\fIگزینه‌های Xstormy16\fR (\fBXstormy16 Options\fR) \&\fB\-msim\fR .Sp \&\fIگزینه‌های Xtensa\fR (\fBXtensa Options\fR) \&\fB\-mconst16 \-mforce\-no\-pic \-mno\-serialize\-volatile \&\-mtext\-section\-literals \-mauto\-litpools \-mno\-target\-align \&\-mlongcalls \-mabi=\fR\fIabi\-type\fR \&\fB\-mextra\-l32r\-costs=\fR\fIcycles\fR \fB\-mstrict\-align\fR .Sp \&\fIگزینه‌های zSeries\fR گزینه‌های S/390 و zSeries را ببینید..SS "گزینه‌های کنترل نوع خروجی (Options Controlling the Kind of Output)" .IX Subsection "Options Controlling the Kind of Output" کامپایل می‌تواند تا چهار مرحله را شامل شود: پیش‌پردازش، کامپایل اصلی، اسمبلی و پیونددهی، همواره به همین ترتیب. GCC قادر است چندین فایل را پیش‌پردازش کرده و در قالب چند فایل ورودی اسمبلر، یا یک فایل ورودی اسمبلر کامپایل کند؛ سپس هر فایل ورودی اسمبلر یک فایل شیء (object file) تولید می‌کند، و پیونددهی، تمامی فایل‌های شیء (چه آن‌هایی که تازه کامپایل شده‌اند و چه آن‌هایی که به عنوان ورودی مشخص شده‌اند) را در یک فایل اجرایی ترکیب می‌کند. .PP برای هر فایل ورودی مشخص، پسوند نام فایل تعیین می‌کند که چه نوع کامپایلی باید انجام گیرد: .IP \fIfile\fR\fB.c\fR 4 .IX Item "file.c" کد منبع C که باید پیش‌پردازش شود. .IP \fIfile\fR\fB.i\fR 4 .IX Item "file.i" کد منبع C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.ii\fR 4 .IX Item "file.ii" کد منبع ++C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.m\fR 4 .IX Item "file.m" کد منبع Objective\-C. توجه داشته باشید که برای کارکرد یک برنامهٔ Objective\-C باید پیونددهی با کتابخانهٔ \fIlibobjc\fR انجام شود. .IP \fIfile\fR\fB.mi\fR 4 .IX Item "file.mi" کد منبع Objective\-C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.mm\fR 4 .IX Item "file.mm" .PD 0 .IP \fIfile\fR\fB.M\fR 4 .IX Item "file.M" .PD کد منبع ++Objective\-C. توجه داشته باشید که برای کارکرد یک برنامهٔ ++Objective\-C باید پیونددهی با کتابخانهٔ \fIlibobjc\fR انجام شود. توجه کنید که \fB.M\fR دقیقاً به یک حرف بزرگ M اشاره دارد. .IP \fIfile\fR\fB.mii\fR 4 .IX Item "file.mii" کد منبع ++Objective\-C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.h\fR 4 .IX Item "file.h" فایل سرآیند (header) زبان‌های C، ++C، Objective\-C یا ++Objective\-C برای تبدیل شدن به یک سرآیند پیش‌کامپایل‌شده (پیش‌فرض)، یا فایل سرآیند C و ++C برای تبدیل شدن به یک مشخصهٔ Ada (از طریق سوییچ \fB\-fdump\-ada\-spec\fR). .IP \fIfile\fR\fB.cc\fR 4 .IX Item "file.cc" .PD 0 .IP \fIfile\fR\fB.cp\fR 4 .IX Item "file.cp" .IP \fIfile\fR\fB.cxx\fR 4 .IX Item "file.cxx" .IP \fIfile\fR\fB.cpp\fR 4 .IX Item "file.cpp" .IP \fIfile\fR\fB.CPP\fR 4 .IX Item "file.CPP" .IP \fIfile\fR\fB.c++\fR 4 .IX Item "file.c++" .IP \fIfile\fR\fB.C\fR 4 .IX Item "file.C" .PD کد منبع ++C که باید پیش‌پردازش شود. توجه داشته باشید که در \fB.cxx\fR، هر دو حرف آخر باید دقیقاً \fBx\fR باشند. به همین ترتیب، \&\fB.C\fR دقیقاً به یک حرف بزرگ C اشاره دارد. .IP \fIfile\fR\fB.mm\fR 4 .IX Item "file.mm" .PD 0 .IP \fIfile\fR\fB.M\fR 4 .IX Item "file.M" .PD کد منبع ++Objective\-C که باید پیش‌پردازش شود. .IP \fIfile\fR\fB.mii\fR 4 .IX Item "file.mii" کد منبع ++Objective\-C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.hh\fR 4 .IX Item "file.hh" .PD 0 .IP \fIfile\fR\fB.H\fR 4 .IX Item "file.H" .IP \fIfile\fR\fB.hp\fR 4 .IX Item "file.hp" .IP \fIfile\fR\fB.hxx\fR 4 .IX Item "file.hxx" .IP \fIfile\fR\fB.hpp\fR 4 .IX Item "file.hpp" .IP \fIfile\fR\fB.HPP\fR 4 .IX Item "file.HPP" .IP \fIfile\fR\fB.h++\fR 4 .IX Item "file.h++" .IP \fIfile\fR\fB.tcc\fR 4 .IX Item "file.tcc" .PD فایل سرآیند ++C برای تبدیل شدن به یک سرآیند پیش‌کامپایل‌شده یا مشخصهٔ Ada. .IP \fIfile\fR\fB.f\fR 4 .IX Item "file.f" .PD 0 .IP \fIfile\fR\fB.for\fR 4 .IX Item "file.for" .IP \fIfile\fR\fB.ftn\fR 4 .IX Item "file.ftn" .IP \fIfile\fR\fB.fi\fR 4 .IX Item "file.fi" .PD کد منبع Fortran با قالب ثابت (fixed form) که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.F\fR 4 .IX Item "file.F" .PD 0 .IP \fIfile\fR\fB.FOR\fR 4 .IX Item "file.FOR" .IP \fIfile\fR\fB.fpp\fR 4 .IX Item "file.fpp" .IP \fIfile\fR\fB.FPP\fR 4 .IX Item "file.FPP" .IP \fIfile\fR\fB.FTN\fR 4 .IX Item "file.FTN" .PD کد منبع Fortran با قالب ثابت که باید پیش‌پردازش شود (با پیش‌پردازندهٔ سنتی). .IP \fIfile\fR\fB.f90\fR 4 .IX Item "file.f90" .PD 0 .IP \fIfile\fR\fB.f95\fR 4 .IX Item "file.f95" .IP \fIfile\fR\fB.f03\fR 4 .IX Item "file.f03" .IP \fIfile\fR\fB.f08\fR 4 .IX Item "file.f08" .IP \fIfile\fR\fB.fii\fR 4 .IX Item "file.fii" .PD کد منبع Fortran با قالب آزاد (free form) که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.F90\fR 4 .IX Item "file.F90" .PD 0 .IP \fIfile\fR\fB.F95\fR 4 .IX Item "file.F95" .IP \fIfile\fR\fB.F03\fR 4 .IX Item "file.F03" .IP \fIfile\fR\fB.F08\fR 4 .IX Item "file.F08" .PD کد منبع Fortran با قالب آزاد که باید پیش‌پردازش شود (با پیش‌پردازندهٔ سنتی). .IP \fIfile\fR\fB.cob\fR 4 .IX Item "file.cob" .PD 0 .IP \fIfile\fR\fB.COB\fR 4 .IX Item "file.COB" .IP \fIfile\fR\fB.cbl\fR 4 .IX Item "file.cbl" .IP \fIfile\fR\fB.CBL\fR 4 .IX Item "file.CBL" .PD کد منبع COBOL. .IP \fIfile\fR\fB.go\fR 4 .IX Item "file.go" کد منبع Go. .IP \fIfile\fR\fB.d\fR 4 .IX Item "file.d" کد منبع D. .IP \fIfile\fR\fB.di\fR 4 .IX Item "file.di" فایل رابط (interface) زبان D. .IP \fIfile\fR\fB.dd\fR 4 .IX Item "file.dd" کد مستندات زبان D (به صورت Ddoc). .IP \fIfile\fR\fB.ads\fR 4 .IX Item "file.ads" فایل کد منبع Ada شامل اعلان یک واحد کتابخانه‌ای (اعلان یک بسته، زیربرنامه یا generic، یا نمونه‌سازی generic)، یا اعلان تغییر نام یک واحد کتابخانه‌ای (اعلان تغییر نام یک بسته، generic یا زیربرنامه). به چنین فایل‌هایی \fIspecs\fR نیز می‌گویند. .IP \fIfile\fR\fB.adb\fR 4 .IX Item "file.adb" فایل کد منبع Ada شامل بدنهٔ یک واحد کتابخانه‌ای (بدنهٔ یک زیربرنامه یا بسته). به چنین فایل‌هایی \fIbodies\fR نیز می‌گویند. .IP \fIfile\fR\fB.s\fR 4 .IX Item "file.s" کد اسمبلی..IP \fIfile\fR\fB.S\fR 4 .IX Item "file.S" .PD 0 .IP \fIfile\fR\fB.sx\fR 4 .IX Item "file.sx" .PD کد اسمبلی که باید پیش‌پردازش شود. .IP \fIother\fR 4 .IX Item "other" یک فایل شیء که مستقیماً به مرحلهٔ پیوند داده می‌شود. با هر نام فایلی بدون پسوند شناخته‌شده، به این صورت رفتار می‌شود. .PP می‌توانید زبان ورودی را با گزینهٔ \fB\-x\fR به‌طور صریح مشخص کنید: .IP "\fB\-x\fR \fIlanguage\fR" 4 .IX Item "-x language" .PD 0 .IP \fB\-\-language=\fR\fIlanguage\fR 4 .IX Item "--language=language" .IP "\fB\-\-language\fR \fIlanguage\fR" 4 .IX Item "--language language" .PD زبان (\fIlanguage\fR) را به‌طور صریح برای فایل‌های ورودی پس از آن مشخص می‌کند (به‌جای اینکه به کامپایلر اجازه دهد بر اساس پسوند نام فایل، یک پیش‌فرض را انتخاب کند). این گزینه بر تمام فایل‌های ورودی بعدی اعمال می‌شود تا زمانی که گزینهٔ \fB\-x\fR بعدی مشخص شود. مقادیر ممکن برای \fIlanguage\fR عبارتند از: .Sp .Vb 10 \& c c\-header cpp\-output \& c++ c++\-header c++\-system\-header c++\-user\-header c++\-cpp\-output \& c++\-system\-module \& objective\-c objective\-c\-header objective\-c\-cpp\-output objc\-cpp\-output \& objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output \& objc++\-cpp\-output \& assembler assembler\-with\-cpp \& ada adascil adawhy \& cobol \& d \& f77 f77\-cpp\-input f95 f95\-cpp\-input \& go \& modula\-2 modula\-2\-cpp\-output \& rust \& algol68 \& lto .Ve .Sp توجه داشته باشید که \fB\-x\fR بر یک استاندارد زبانی خاص دلالت نمی‌کند. برای مثال، ممکن است \fB\-x f77\fR برای برخی از کدهای منبع قدیمی‌تر به \fB\-std=legacy\fR نیز نیاز داشته باشد. .IP "\fB\-x none\fR" 4 .IX Item "-x none" هرگونه تعیین صریح زبان را لغو می‌کند، به‌طوری که با فایل‌های بعدی بر اساس پسوند نام فایل آن‌ها برخورد می‌شود (گویی اصلاً از \fB\-x\fR استفاده نشده است). .PP اگر تنها برخی از مراحل کامپایل را می‌خواهید، می‌توانید از \&\fB\-x\fR (یا پسوندهای نام فایل) استفاده کنید تا به \fBgcc\fR بگویید از کجا شروع کند، و از یکی از گزینه‌های \fB\-c\fR، \fB\-S\fR، یا \fB\-E\fR استفاده نمایید تا مشخص کنید \&\fBgcc\fR در کجا باید متوقف شود. توجه داشته باشید که برخی از ترکیب‌ها (برای مثال، \&\fB\-x cpp\-output \-E\fR) به \fBgcc\fR دستور می‌دهند که اصلاً هیچ کاری انجام ندهد. .IP \fB\-c\fR 4 .IX Item "-c" .PD 0 .IP \fB\-\-compile\fR 4 .IX Item "--compile" .PD فایل‌های منبع را کامپایل یا اسمبلی می‌کند، اما پیوند نمی‌زند. مرحلهٔ پیوند اصلاً انجام نمی‌شود. خروجی نهایی به صورت یک فایل شیء برای هر فایل منبع خواهد بود. .Sp به‌طور پیش‌فرض، نام فایل شیء برای یک فایل منبع با جایگزین کردن پسوند \fB.c\fR، \fB.i\fR، \fB.s\fR و غیره با \fB.o\fR ساخته می‌شود. .Sp فایل‌های ورودی ناشناخته که نیازی به کامپایل یا اسمبلی ندارند، نادیده گرفته می‌شوند. .IP \fB\-S\fR 4 .IX Item "-S" .PD 0 .IP \fB\-\-assemble\fR 4 .IX Item "--assemble" .PD پس از مرحلهٔ کامپایلِ صرف متوقف می‌شود؛ سرهم‌بندی (assemble) نمی‌کند. خروجی به صورت یک فایل کد اسمبلی برای هر فایل ورودیِ غیر اسمبلیِ مشخص‌شده خواهد بود. .Sp به‌طور پیش‌فرض، نام فایل اسمبلی برای یک فایل منبع با جایگزین کردن پسوند \fB.c\fR، \fB.i\fR و غیره با \fB.s\fR ساخته می‌شود. .Sp فایل‌های ورودی که نیازی به کامپایل ندارند، نادیده گرفته می‌شوند. .IP \fB\-E\fR 4 .IX Item "-E" .PD 0 .IP \fB\-\-preprocess\fR 4 .IX Item "--preprocess" .PD پس از مرحلهٔ پیش‌پردازش متوقف می‌شود؛ خود کامپایلر را اجرا نمی‌کند. خروجی به صورت کد منبع پیش‌پردازش‌شده است که به خروجی استاندارد ارسال می‌شود. .Sp فایل‌های ورودی که نیازی به پیش‌پردازش ندارند، نادیده گرفته می‌شوند. .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" .PD 0 .IP \fB\-\-output=\fR\fIfile\fR 4 .IX Item "--output=file" .IP "\fB\-\-output\fR \fIfile\fR" 4 .IX Item "--output file" .PD خروجی اصلی را در فایل \fIfile\fR قرار می‌دهد. این امر برای هر نوع خروجی تولیدشده اعمال می‌شود، خواه یک فایل اجرایی باشد، یک فایل شیء، یک فایل اسمبلی، یا کد C پیش‌پردازش‌شده. .Sp اگر \fB\-o\fR مشخص نشود، پیش‌فرض این است که یک فایل اجرایی در \fIa.out\fR، فایل شیء برای \&\fIsource.suffix\fR در \fIsource.o\fR، فایل اسمبلی آن در \fIsource.s\fR، یک فایل سرآیند پیش‌کامپایل‌شده در \&\fIsource.suffix.gch\fR، و تمام کدهای منبع C پیش‌پردازش‌شده در خروجی استاندارد قرار گیرند. .Sp اگرچه \fB\-o\fR فقط خروجی اصلی را نام‌گذاری می‌کند، اما بر نام‌گذاری خروجی‌های کمکی و رونوشت (dump) نیز تأثیر می‌گذارد. مثال‌های زیر را ببینید. مگر در صورت بازنویسی، هر دو خروجی کمکی و رونوشت در همان دایرکتوری خروجی اصلی قرار می‌گیرند. در خروجی‌های کمکی، پسوند فایل ورودی با پسوند نوع فایل خروجی کمکی جایگزین می‌شود؛ در خروجی‌های رونوشت، پسوند فایل رونوشت به پسوند فایل ورودی الحاق می‌گردد. در دستورهای کامپایل، نام پایهٔ هر دو خروجی کمکی و رونوشت همان نام پایهٔ خروجی اصلی است؛ در دستورهای کامپایل و پیوند، نام خروجی اصلی (منهای پسوند اجرایی) با نام فایل ورودی ترکیب می‌شود. اگر هر دو نام پایهٔ یکسانی داشته باشند (بدون در نظر گرفتن پسوند)، نتیجهٔ ترکیب همان نام پایه خواهد بود؛ در غیر این صورت، با یک خط تیره از هم جدا و به یکدیگر الحاق می‌شوند. .Sp .Vb 1 \& gcc \-c foo.c ... .Ve .Sp از \fIfoo.o\fR به عنوان خروجی اصلی استفاده می‌کند و خروجی‌های کمکی و رونوشت‌ها را در کنار آن قرار می‌دهد؛ مثلاً فایل کمکی \fIfoo.dwo\fR برای \&\fB\-gsplit\-dwarf\fR، و فایل رونوشت \fIfoo.c.???r.final\fR برای \&\fB\-fdump\-rtl\-final\fR. .Sp اگر یک فایل خروجیِ غیرپیونددهنده به‌طور صریح مشخص شده باشد، فایل‌های کمکی و رونوشت به‌طور پیش‌فرض همان نام پایه را می‌گیرند: .Sp .Vb 1 \& gcc \-c foo.c \-o dir/foobar.o ... .Ve .Sp خروجی‌های کمکی را به نام \fIdir/foobar.*\fR و خروجی‌های رونوشت را به نام \&\fIdir/foobar.c.*\fR نام‌گذاری خواهد کرد. .Sp یک خروجی پیونددهنده در عوض خروجی‌های کمکی و رونوشت را پیشوندگذاری می‌کند: .Sp .Vb 1 \& gcc foo.c bar.c \-o dir/foobar ... .Ve .Sp به‌طور کلی خروجی‌های کمکی را به نام \fIdir/foobar\-foo.*\fR و \&\fIdir/foobar\-bar.*\fR، و خروجی‌های رونوشت را به نام \fIdir/foobar\-foo.c.*\fR و \&\fIdir/foobar\-bar.c.*\fR نام‌گذاری خواهد کرد. .Sp تنها استثنای موارد بالا زمانی است که فایل اجرایی با تک فایل ورودی، نام پایهٔ مشترکی داشته باشد: .Sp .Vb 1 \& gcc foo.c \-o dir/foo ... .Ve .Sp که در این صورت خروجی‌های کمکی به نام \fIdir/foo.*\fR و خروجی‌های رونوشت به نام \fIdir/foo.c.*\fR نام‌گذاری می‌شوند. .Sp مکان و نام‌های خروجی‌های کمکی و رونوشت را می‌توان با گزینه‌های \fB\-dumpbase\fR، \fB\-dumpbase\-ext\fR، \&\fB\-dumpdir\fR، \fB\-save\-temps=cwd\fR، و \&\fB\-save\-temps=obj\fR تنظیم کرد. .IP "\fB\-dumpbase\fR \fIdumpbase\fR" 4 .IX Item "-dumpbase dumpbase" .PD 0 .IP "\fB\-\-dumpbase\fR \fIdumpbase\fR" 4 .IX Item "--dumpbase dumpbase" .PD این گزینه نام پایه را برای فایل‌های خروجی کمکی و رونوشت تنظیم می‌کند. این گزینه بر نام فایل خروجی اصلی تأثیری ندارد. خروجی‌های میانی، در صورت نگه‌داری، به عنوان خروجی اصلی در نظر گرفته نمی‌شوند، بلکه به عنوان خروجی‌های کمکی محسوب می‌شوند: .Sp.Vb 1 \& gcc \-save\-temps \-S foo.c .Ve .Sp فایل پیش‌پردازش‌شدهٔ (دیگر غیر) موقت را در \fIfoo.i\fR ذخیره می‌کند و سپس در فایل خروجی (ضمنی) \fIfoo.s\fR کامپایل می‌نماید، در حالی که: .Sp .Vb 1 \& gcc \-save\-temps \-dumpbase save\-foo \-c foo.c .Ve .Sp پیش‌پردازش را در \fIsave\-foo.i\fR انجام می‌دهد، به \fIsave\-foo.s\fR (که اکنون یک خروجی میانی و در نتیجه کمکی است) کامپایل می‌کند و سپس در فایل خروجی (ضمنی) \fIfoo.o\fR اسمبل می‌نماید. .Sp در نبود این گزینه، فایل‌های dump و کمکی (aux) نام خود را از فایل ورودی، یا از فایل خروجی (غیرپیونددهنده، در صورتی که به‌صراحت مشخص شده باشد) می‌گیرند: فایل‌های خروجی dump (مثلاً مواردی که با گزینه‌های \fB\-fdump\-*\fR درخواست شده‌اند) با پسوند نام ورودی، و فایل‌های خروجی کمکی (مواردی که با سایر گزینه‌های غیر dump درخواست شده‌اند، مانند \f(CW\*(C`\-save\-temps\*(C'\fR، \&\f(CW\*(C`\-gsplit\-dwarf\*(C'\fR، \f(CW\*(C`\-fcallgraph\-info\*(C'\fR) بدون آن. .Sp تمایز مشابه پسوند خروجی‌های dump و کمکی را می‌توان برای \&\fB\-dumpbase basename.suf\fR که به‌صراحت داده شده است، با مشخص کردن \&\fB\-dumpbase\-ext .suf\fR نیز به دست آورد. .Sp اگر \fIdumpbase\fR به‌صراحت با هر مؤلفهٔ دایرکتوری مشخص شود، هرگونه مشخصهٔ \fIdumppfx\fR (مانند \fB\-dumpdir\fR یا \&\fB\-save\-temps=*\fR) نادیده گرفته می‌شود، و \fIdumpbase\fR به‌جای الحاق به آن، کاملاً جایگزین آن می‌شود: .Sp .Vb 2 \& gcc foo.c \-c \-o dir/foo.o \-dumpbase alt/foo \e \& \-dumpdir pfx\- \-save\-temps=cwd ... .Ve .Sp خروجی‌های کمکی و dump به نام \fIalt/foo.*\fR ایجاد می‌کند، و \&\fIdir/\fR در \fB\-o\fR، پیشوند \fI./\fR ضمنی ناشی از \&\fB\-save\-temps=cwd\fR، و \fIpfx\-\fR در \fB\-dumpdir\fR را نادیده می‌گیرد. .Sp هنگامی که \fB\-dumpbase\fR در دستوری مشخص شود که چندین ورودی را کامپایل می‌کند، یا کامپایل کرده و سپس پیوند می‌دهد، ممکن است با \&\fIdumppfx\fR ترکیب شود، همان‌طور که ذیل \fB\-dumpdir\fR مشخص شده است. سپس، هر فایل ورودی با استفاده از \fIdumppfx\fR ترکیبی کامپایل می‌شود، و مقادیر پیش‌فرض برای \fIdumpbase\fR و \fIauxdropsuf\fR برای هر فایل ورودی محاسبه می‌گردد: .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpbase main ... .Ve .Sp \fIfoo.o\fR و \fIbar.o\fR را به عنوان خروجی‌های اصلی ایجاد می‌کند، و با استفاده از \fIdumpbase\fR به عنوان پیشوند، از رونویسی خروجی‌های کمکی و dump جلوگیری کرده و خروجی‌های کمکی و dump با نام‌های \fImain\-foo.*\fR و \fImain\-bar.*\fR می‌سازد. .Sp یک رشتهٔ خالی که به عنوان \fIdumpbase\fR مشخص شود، از تأثیر نام پایهٔ خروجی در نام‌گذاری خروجی‌های کمکی و dump حین کامپایل جلوگیری می‌کند، و مقادیر پیش‌فرض را محاسبه می‌نماید: .Sp .Vb 1 \& gcc \-c foo.c \-o dir/foobar.o \-dumpbase " ... .Ve .Sp خروجی‌های کمکی را به نام \fIdir/foo.*\fR و خروجی‌های dump را به نام \&\fIdir/foo.c.*\fR نام‌گذاری خواهد کرد. توجه کنید که چگونه نام‌های پایهٔ آن‌ها از نام ورودی گرفته می‌شود، اما دایرکتوری همچنان به‌طور پیش‌فرض همان دایرکتوری خروجی است. .Sp dumpbase با رشتهٔ خالی مانع از استفاده از نام پایهٔ خروجی برای خروجی‌های مرحلهٔ پیوند نمی‌شود: .Sp .Vb 1 \& gcc foo.c bar.c \-o dir/foobar \-dumpbase " \-flto ... .Ve .Sp کامپایل فایل‌های مبدأ، خروجی‌های کمکی را به نام \&\fIdir/foo.*\fR و \&\fIdir/bar.*\fR، و خروجی‌های dump را به نام \&\fIdir/foo.c.*\fR و \&\fIdir/bar.c.*\fR نام‌گذاری خواهد کرد. بازکامپایل‌سازی LTO در حین پیوند از \fIdir/foobar.\fR به عنوان پیشوند برای فایل‌های dump و کمکی استفاده خواهد کرد. .IP "\fB\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4 .IX Item "-dumpbase-ext auxdropsuf" .PD 0 .IP "\fB\-\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4 .IX Item "--dumpbase-ext auxdropsuf" .PD هنگام ساخت نام یک فایل خروجی کمکی (و نه dump)، پیش از افزودن هر پسوندی، \&\fIauxdropsuf\fR انتهایی را از \fIdumpbase\fR حذف می‌کند. در صورت عدم تعیین، مقدار پیش‌فرض این گزینه پسوندِ یک \fIdumpbase\fR پیش‌فرض خواهد بود؛ یعنی پسوند فایل ورودی هنگامی که \fB\-dumpbase\fR در خط فرمان وجود ندارد، یا زمانی که \fIdumpbase\fR با \fIdumppfx\fR ترکیب شده است. .Sp .Vb 1 \& gcc foo.c \-c \-o dir/foo.o \-dumpbase x\-foo.c \-dumpbase\-ext .c ... .Ve .Sp \fIdir/foo.o\fR را به عنوان خروجی اصلی ایجاد کرده و خروجی‌های کمکی را در \&\fIdir/x\-foo.*\fR تولید می‌کند، مکان خروجی اصلی را اتخاذ می‌نماید، و پسوند \fI.c\fR را از \fIdumpbase\fR حذف می‌کند. خروجی‌های dump پسوند را حفظ می‌کنند: \fIdir/x\-foo.c.*\fR. .Sp اگر این گزینه با پسوند \fIdumpbase\fR مشخص‌شده مطابقت نداشته باشد، نادیده گرفته می‌شود، مگر به عنوان جایگزینی برای پسوند فایل اجرایی هنگام الحاق نام پایهٔ خروجی پیونددهنده به \fIdumppfx\fR، همان‌طور که در زیر شرح داده شده است: .Sp .Vb 1 \& gcc foo.c bar.c \-o main.out \-dumpbase\-ext .out ... .Ve .Sp \fImain.out\fR را به عنوان خروجی اصلی ایجاد می‌کند، و با استفاده از نام فایل اجرایی منهای \fIauxdropsuf\fR به عنوان پیشوند، از رونویسی خروجی‌های کمکی و dump جلوگیری کرده و خروجی‌های کمکی با نام‌های \&\fImain\-foo.*\fR و \&\fImain\-bar.*\fR و خروجی‌های dump با نام‌های \&\fImain\-foo.c.*\fR و \&\fImain\-bar.c.*\fR تولید می‌کند. .IP "\fB\-dumpdir\fR \fIdumppfx\fR" 4 .IX Item "-dumpdir dumppfx" .PD 0 .IP "\fB\-\-dumpdir\fR \fIdumppfx\fR" 4 .IX Item "--dumpdir dumppfx" .PD هنگام شکل‌دهی نام یک فایل خروجی کمکی یا dump، از \&\fIdumppfx\fR به عنوان پیشوند استفاده می‌کند: .Sp .Vb 1 \& gcc \-dumpdir pfx\- \-c foo.c ... .Ve .Sp \fIfoo.o\fR را به عنوان خروجی اصلی و خروجی‌های کمکی را به نام \&\fIpfx\-foo.*\fR ایجاد می‌کند، و \fIdumppfx\fR داده‌شده را با \fIdumpbase\fR پیش‌فرض مشتق‌شده از خروجی اصلی پیش‌فرض (که خود از نام ورودی مشتق شده) ترکیب می‌نماید. خروجی‌های dump همچنین پسوند نام ورودی را به خود می‌گیرند: \&\fIpfx\-foo.c.*\fR. .Sp اگر قرار است از \fIdumppfx\fR به عنوان نام دایرکتوری استفاده شود، باید به یک جداکنندهٔ دایرکتوری ختم گردد: .Sp .Vb 1 \& gcc \-dumpdir dir/ \-c foo.c \-o obj/bar.o ... .Ve .Sp \fIobj/bar.o\fR را به عنوان خروجی اصلی و خروجی‌های کمکی را به نام \&\fIdir/bar.*\fR ایجاد می‌کند، و \fIdumppfx\fR داده‌شده را با \fIdumpbase\fR پیش‌فرض مشتق‌شده از نام خروجی اصلی ترکیب می‌نماید. خروجی‌های dump همچنین پسوند نام ورودی را دریافت می‌کنند: \fIdir/bar.c.*\fR. .Sp مقدار پیش‌فرض آن مکان فایل خروجی است، مگر اینکه فایل خروجی یک فایل خاص مانند \f(CW\*(C`/dev/null\*(C'\fR باشد. گزینه‌های \&\fB\-save\-temps=cwd\fR و \fB\-save\-temps=obj\fR دقیقاً مانند یک گزینهٔ صریح \fB\-dumpdir\fR این پیش‌فرض را بازنویسی می‌کنند. در صورتی که چندین گزینه از این دست داده شود، آخرین گزینه اعمال خواهد شد: .Sp .Vb 1 \& gcc \-dumpdir pfx\- \-c foo.c \-save\-temps=obj ... .Ve .Sp فایل \fIfoo.o\fR را خروجی می‌دهد، با خروجی‌های کمکی به نام \fIfoo.*\fR چرا که \&\fB\-save\-temps=*\fR مقدار \fIdumppfx\fR ارائه‌شده توسط گزینهٔ قبلی \&\fB\-dumpdir\fR را لغو می‌کند. اهمیتی ندارد که \fB=obj\fR پیش‌فرضِ \&\fB\-save\-temps\fR است، یا اینکه دایرکتوری خروجی به‌طور ضمنی دایرکتوری جاری است. خروجی‌های dump به نام \&\fIfoo.c.*\fR نام‌گذاری می‌شوند. .Sp هنگام کامپایل از چندین فایل ورودی، اگر \fB\-dumpbase\fR مشخص شده باشد، \&\fIdumpbase\fR، منهای پسوند \fIauxdropsuf\fR، و یک خط تیره به یک \&\fIdumppfx\fR صریح یا پیش‌فرض الحاق می‌شوند (یا اگر شامل مؤلفه‌های دایرکتوری باشند، آن را بازنویسی می‌کنند)، به‌طوری که هر یک از کامپایل‌های چندگانه خروجی‌های کمکی و dump با نام‌های متفاوتی دریافت می‌کنند. .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp خروجی‌های کمکی dump را به \fIdir/pfx\-main\-foo.*\fR و \&\fIdir/pfx\-main\-bar.*\fR می‌دهد، و \fIdumpbase\fR\- را به \fIdumppfx\fR الحاق می‌کند. خروجی‌های dump پسوند فایل ورودی را حفظ می‌کنند: به ترتیب \&\fIdir/pfx\-main\-foo.c.*\fR و \fIdir/pfx\-main\-bar.c.*\fR. با کامپایل تک‌ورودی مقایسه کنید: .Sp.Vb 1 \& gcc foo.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp که با اعمال \fB\-dumpbase\fR به یک منبع منفرد، یک \fIdumpbase\fR جداگانه به ازای هر فایل ورودی محاسبه و الحاق نمی‌کند. خروجی‌های کمکی و dump آن در \fIdir/pfx\-main.*\fR قرار می‌گیرند. .Sp هنگام کامپایل و سپس پیوند دادنِ چندین فایل ورودی، یک \fIdumppfx\fR پیش‌فرض یا صراحتاً مشخص‌شده نیز تحت تبدیل \fIdumpbase\fR در بالا قرار می‌گیرد (مثلاً کامپایل \fIfoo.c\fR و \&\fIbar.c\fR در بالا، اما بدون \fB\-c\fR). اگر نه \&\fB\-dumpdir\fR و نه \fB\-dumpbase\fR داده نشده باشند، نام پایه خروجی پیونددهنده منهای \fIauxdropsuf\fR (در صورت تعیین) یا پسوند فایل اجرایی (در غیر این صورت)، به‌علاوه یک خط تیره، در عوض به \fIdumppfx\fR پیش‌فرض الحاق می‌شود. با این حال توجه داشته باشید که برخلاف موارد پیشین پیوند دادن: .Sp .Vb 1 \& gcc foo.c bar.c \-dumpdir dir/pfx\- \-o main ... .Ve .Sp نام خروجی \fImain\fR را به \fIdumppfx\fR الحاق نمی‌کند، زیرا \&\fB\-dumpdir\fR صراحتاً مشخص شده است. هدف این است که \fIdumppfx\fR صراحتاً مشخص‌شده بتواند در صورت تمایل شامل نام خروجی مشخص‌شده به عنوان بخشی از پیشوند باشد؛ تنها یک \&\fB\-dumpbase\fR صراحتاً مشخص‌شده با آن ترکیب می‌شود تا از نادیده گرفتنِ ساده یک گزینه معنادار جلوگیری شود. .Sp هنگام کامپایل و سپس پیوند دادن از یک فایل ورودی واحد، نام پایه خروجی پیونددهنده تنها در صورتی مانند بالا به \fIdumppfx\fR پیش‌فرض الحاق می‌شود که نام پایه مشترکی با نام فایل ورودی واحد نداشته باشد. این موضوع در موارد پیوند تک‌ورودی در بالا پوشش داده شد، اما نه با یک \fB\-dumpdir\fR صریح که مانع این ترکیب می‌شود، حتی اگر توسط \fB\-save\-temps=*\fR لغو شده باشد: .Sp .Vb 1 \& gcc foo.c \-dumpdir alt/pfx\- \-o dir/main.exe \-save\-temps=cwd ... .Ve .Sp خروجی‌های کمکی با نام \fIfoo.*\fR و خروجی‌های dump با نام \&\fIfoo.c.*\fR در دایرکتوری کاری فعلی ایجاد می‌شوند، همان‌گونه که در نهایت توسط \fB\-save\-temps=cwd\fR درخواست شده است. .Sp برای جمع‌بندی همه‌چیز در قالب یک جریان داده شهودی هرچند اندکی غیردقیق: نام خروجی اصلی به یک بخش دایرکتوری و یک بخش نام پایه (basename) تقسیم می‌شود؛ \fIdumppfx\fR روی اولی تنظیم می‌شود، مگر اینکه توسط \&\fB\-dumpdir\fR یا \fB\-save\-temps=*\fR جایگزین شود، و \fIdumpbase\fR روی دومی تنظیم می‌شود، مگر اینکه توسط \fB\-dumpbase\fR جایگزین شود. اگر چندین ورودی یا پیونددهی وجود داشته باشد، این \fIdumpbase\fR ممکن است با \&\fIdumppfx\fR ترکیب شود و از هر فایل ورودی گرفته شود. نام خروجی‌های کمکی برای هر ورودی با ترکیب \fIdumppfx\fR، \fIdumpbase\fR منهای پسوند، و پسوند خروجی کمکی تشکیل می‌شود؛ نام خروجی‌های dump تنها از این جهت تفاوت دارند که پسوند \fIdumpbase\fR در آن‌ها حفظ می‌شود. .Sp در مورد خروجی‌های کمکی و dump که هنگام بازکامپایل LTO ایجاد می‌شوند، ترکیبی از \fIdumppfx\fR و \fIdumpbase\fR، همان‌طور که داده شده یا از نام خروجی پیونددهنده (و نه از ورودی‌ها) مشتق شده است، حتی در مواردی که این ترکیب در غیر این صورت بدین شکل استفاده نمی‌شد، با یک نقطه انتهایی به جای خط تیره افزوده‌شده توسط کامپایلر (در صورت وجود)، به عنوان گزینه \fB\-dumpdir\fR به \fBlto\-wrapper\fR ارسال می‌شود؛ از آنجا که این برنامه در فرآیند پیوند درگیر است، معمولاً هیچ \&\fB\-dumpbase\fR و \fB\-dumpbase\-ext\fR دریافت نمی‌کند و آن‌ها را نادیده می‌گیرد. .Sp هنگام اجرای زیرکامپایلرها، \fBlto\-wrapper\fR نام مراحل LTO را به \fIdumppfx\fR دریافتی الحاق می‌کند، اطمینان حاصل می‌کند که شامل یک مؤلفه دایرکتوری باشد تا هرگونه \fB\-dumpdir\fR را لغو کند، و آن را به عنوان \&\fB\-dumpbase\fR به زیرکامپایلرها ارسال می‌کند. .IP \fB\-v\fR 4 .IX Item "-v" .PD 0 .IP \fB\-\-verbose\fR 4 .IX Item "--verbose" .PD دستورهای اجراشده برای اجرای مراحل کامپایل را (روی خروجی خطای استاندارد) چاپ می‌کند. همچنین شماره نسخه برنامه راه‌انداز کامپایلر، پیش‌پردازنده و خود کامپایلر را چاپ می‌کند. .IP \fB\-###\fR 4 .IX Item "-###" مانند \fB\-v\fR است، با این تفاوت که دستورها اجرا نمی‌شوند و آرگومان‌ها درون علامت نقل‌قول قرار می‌گیرند، مگر اینکه تنها حاوی نویسه‌های الفبایی\-عددی یا \f(CW\*(C`./\-_\*(C'\fR باشند. این گزینه برای اسکریپت‌های پوسته جهت دریافت خطوط فرمان تولیدشده توسط راه‌انداز مفید است. .IP \fB\-\-help\fR 4 .IX Item "--help" توضیحاتی درباره گزینه‌های خط فرمان شناخته‌شده توسط \fBgcc\fR را (روی خروجی استاندارد) چاپ می‌کند. اگر گزینه \fB\-v\fR نیز مشخص شده باشد، \fB\-\-help\fR به فرایندهای گوناگون فراخوانی‌شده توسط \fBgcc\fR نیز منتقل می‌شود تا آن‌ها بتوانند گزینه‌های خط فرمانی را که می‌پذیرند نمایش دهند. اگر گزینه \fB\-Wextra\fR نیز (پیش از گزینه \fB\-\-help\fR) مشخص شده باشد، گزینه‌های خط فرمانی که هیچ مستنداتی به آن‌ها مرتبط نیست نیز نمایش داده می‌شوند. .IP \fB\-\-target\-help\fR 4 .IX Item "--target-help" توضیحاتی از گزینه‌های خط فرمان خاصِ هدف را برای هر ابزار (روی خروجی استاندارد) چاپ می‌کند. برای برخی اهداف ممکن است اطلاعات تکمیلی خاص هدف نیز چاپ شود. .IP \fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR] 4 .IX Item "--help={class|[^]qualifier}[,...]" توضیحاتی درباره گزینه‌های خط فرمان شناخته‌شده توسط کامپایلر که در تمام کلاس‌ها و تعیین‌کننده‌های مشخص‌شده می‌گنجند را (روی خروجی استاندارد) چاپ می‌کند. کلاس‌های پشتیبانی‌شده عبارتند از: .RS 4 .IP \fBoptimizers\fR 4 .IX Item "optimizers" تمام گزینه‌های بهینه‌سازی پشتیبانی‌شده توسط کامپایلر را نمایش می‌دهد. .IP \fBwarnings\fR 4 .IX Item "warnings" تمام گزینه‌های مهارکننده پیام‌های هشدار تولیدشده توسط کامپایلر را نمایش می‌دهد. .IP \fBtarget\fR 4 .IX Item "target" گزینه‌های خاصِ هدف را نمایش می‌دهد. با این حال، برخلاف گزینه \&\fB\-\-target\-help\fR، گزینه‌های خاصِ هدفِ پیونددهنده و اسمبلر نمایش داده نمی‌شوند؛ زیرا این ابزارها در حال حاضر از نحو گسترش‌یافته \fB\-\-help=\fR پشتیبانی نمی‌کنند. .IP \fBparams\fR 4 .IX Item "params" مقدارهای شناخته‌شده توسط گزینه \fB\-\-param\fR را نمایش می‌دهد. .IP \fIlanguage\fR 4 .IX Item "language" گزینه‌های پشتیبانی‌شده برای \fIlanguage\fR را نمایش می‌دهد، که در آن \&\fIlanguage\fR نام یکی از زبان‌های پشتیبانی‌شده در این نسخه از GCC است. اگر گزینه‌ای توسط همه زبان‌ها پشتیبانی شود، باید کلاس \fBcommon\fR انتخاب شود. .IP \fBcommon\fR 4 .IX Item "common" گزینه‌هایی را که میان تمام زبان‌ها مشترک هستند نمایش می‌دهد. .RE .RS 4 .Sp تعیین‌کننده‌های پشتیبانی‌شده عبارتند از: .IP \fBundocumented\fR 4 .IX Item "undocumented" فقط گزینه‌هایی را نمایش می‌دهد که مستندسازی نشده‌اند. .IP \fBjoined\fR 4 .IX Item "joined" گزینه‌هایی را نمایش می‌دهد که آرگومانی را می‌پذیرند که پس از علامت مساوی در همان قطعه متن پیوسته قرار دارد، مانند: \&\fB\-\-help=target\fR. .IP \fBseparate\fR 4 .IX Item "separate" گزینه‌هایی را نمایش می‌دهد که آرگومانی را می‌پذیرند که به صورت یک کلمه مجزا پس از گزینه اصلی قرار می‌گیرد، مانند: \fB\-o output\-file\fR. .RE .RS 4 .Sp بنابراین به عنوان مثال برای نمایش تمام سوئیچ‌های مستندنشده خاصِ هدف که توسط کامپایلر پشتیبانی می‌شوند، از این دستور استفاده کنید: .Sp .Vb 1 \& \-\-help=target,undocumented .Ve .Sp معنای یک تعیین‌کننده را می‌توان با قرار دادن نویسه \&\fB^\fR به عنوان پیشوند معکوس کرد؛ بنابراین به عنوان مثال برای نمایش تمام گزینه‌های هشدار دودویی (یعنی مواردی که یا روشن هستند یا خاموش و هیچ آرگومانی نمی‌پذیرند) که دارای توضیحات هستند، از این دستور استفاده کنید: .Sp .Vb 1 \& \-\-help=warnings,^joined,^undocumented .Ve .Sp آرگومان \fB\-\-help=\fR نباید صرفاً از تعیین‌کننده‌های معکوس‌شده تشکیل شود. .Sp ترکیب چندین کلاس امکان‌پذیر است، هرچند که این کار معمولاً خروجی را آن‌چنان محدود می‌کند که چیزی برای نمایش باقی نمی‌ماند. با این حال، یک مورد که کارساز است، زمانی است که یکی از کلاس‌ها \&\fItarget\fR باشد. به عنوان مثال، برای نمایش تمام گزینه‌های بهینه‌سازی خاصِ هدف، از این دستور استفاده کنید: .Sp .Vb 1 \& \-\-help=target,optimizers .Ve .Sp گزینه \fB\-\-help=\fR می‌تواند در خط فرمان تکرار شود. هر بار استفاده متوالی، کلاس درخواستی گزینه‌های خود را نمایش می‌دهد و مواردی را که قبلاً نمایش داده شده‌اند نادیده می‌گیرد. اگر \fB\-\-help\fR نیز در هر کجای خط فرمان مشخص شده باشد، بر هر گزینه \fB\-\-help=\fR اولویت دارد. .Sp اگر گزینه \fB\-Q\fR در خط فرمان پیش از گزینه \&\fB\-\-help=\fR ظاهر شود، متن توصیفی نمایش داده شده توسط \&\fB\-\-help=\fR تغییر می‌کند. به جای توصیف گزینه‌های نمایش داده شده، مشخص می‌شود که آیا آن گزینه فعال، غیرفعال یا روی مقدار خاصی تنظیم شده است (به شرطی که کامپایلر در نقطه‌ای که گزینه \fB\-\-help=\fR استفاده می‌شود این موضوع را بداند). .Sp در اینجا یک مثال کوتاه شده از پورت ARM برای \fBgcc\fR آورده شده است: .Sp.Vb 5 \& % gcc \-Q \-mabi=2 \-\-help=target \-c \& The following options are target specific: \& \-mabi= 2 \& \-mabort\-on\-noreturn [disabled] \& \-mapcs [disabled] .Ve .Sp خروجی نسبت به اثرات گزینه‌های پیشین خط فرمان حساس است، بنابراین به عنوان مثال می‌توان با استفاده از دستور زیر دریافت که چه بهینه‌سازی‌هایی در \fB\-O2\fR فعال هستند: .Sp .Vb 1 \& \-Q \-O2 \-\-help=optimizers .Ve .Sp همچنین می‌توانید با استفاده از دستورهای زیر پی ببرید کدام بهینه‌سازی‌های دودویی توسط \fB\-O3\fR فعال می‌شوند: .Sp .Vb 3 \& gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts \& gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts \& diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled .Ve .RE .IP \fB\-\-version\fR 4 .IX Item "--version" شماره نسخه و کپی‌رایت GCC فراخوانی‌شده را نمایش می‌دهد. .IP \fB\-pass\-exit\-codes\fR 4 .IX Item "-pass-exit-codes" .PD 0 .IP \fB\-\-pass\-exit\-codes\fR 4 .IX Item "--pass-exit-codes" .PD به طور معمول برنامهٔ \fBgcc\fR در صورتی که هر یک از مراحل کامپایلر یک کد خروج ناموفق بازگرداند، با کد ۱ خارج می‌شود. اگر \&\fB\-pass\-exit\-codes\fR را مشخص کنید، برنامهٔ \fBgcc\fR در عوض با بزرگ‌ترین کد خطای عددی تولیدشده توسط هر مرحله‌ای که نشان‌دهندهٔ خطا باشد خارج خواهد شد. فرانت‌اندهای C، C++‎ و Fortran در صورت مواجهه با خطای داخلی کامپایلر، کد ۴ را بازمی‌گردانند. .IP \fB\-pipe\fR 4 .IX Item "-pipe" .PD 0 .IP \fB\-\-pipe\fR 4 .IX Item "--pipe" .PD به جای فایل‌های موقت، از لوله‌ها (pipeها) برای ارتباط میان مراحل مختلف کامپایل استفاده می‌کند. این گزینه در برخی سیستم‌ها که اسمبلر قادر به خواندن از یک لوله نیست کار نخواهد کرد؛ اما اسمبلر GNU مشکلی در این باره ندارد. .IP \fB\-wrapper\fR 4 .IX Item "-wrapper" همهٔ زیرفرمان‌ها را زیر یک برنامهٔ لفاف (wrapper) اجرا می‌کند. نام برنامهٔ لفاف و پارامترهای آن به صورت یک فهرست جداشده با کاما ارسال می‌شوند. .Sp .Vb 1 \& gcc \-c t.c \-wrapper gdb,\-\-args .Ve .Sp این دستور تمامی زیربرنامه‌های \fBgcc\fR را تحت \&\fBgdb \-\-args\fR فراخوانی می‌کند؛ بنابراین فراخوانی \fBcc1\fR به صورت \&\fBgdb \-\-args cc1 ...\fR خواهد بود. .IP \fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4 .IX Item "-ffile-prefix-map=old=new" هنگام کامپایل فایل‌های قرارگرفته در دایرکتوری \fIold\fR، هرگونه ارجاع به آن‌ها در نتیجهٔ کامپایل طوری ثبت می‌شود که گویی فایل‌ها در دایرکتوری \fInew\fR قرار داشته‌اند. مشخص کردن این گزینه معادل مشخص کردن تک‌تک گزینه‌های \&\fB\-f*\-prefix\-map\fR است. از این گزینه می‌توان برای ساخت‌های بازتولیدپذیر (reproducible builds) مستقل از مکان استفاده کرد. دایرکتوری‌هایی که توسط دستورالعمل‌ها (directives) ارجاع داده شده‌اند تحت تأثیر این گزینه‌ها قرار نمی‌گیرند. همچنین ببینید: \&\fB\-fmacro\-prefix\-map\fR، \fB\-fdebug\-prefix\-map\fR، \&\fB\-fprofile\-prefix\-map\fR و \fB\-fcanon\-prefix\-map\fR. .IP \fB\-fcanon\-prefix\-map\fR 4 .IX Item "-fcanon-prefix-map" برای گزینه‌های \fB\-f*\-prefix\-map\fR، مقایسهٔ پیشوند \fIold\fR با نام فایلی که معمولاً در نتیجهٔ کامپایل به آن ارجاع داده می‌شود، با مقایسهٔ متنی پیشوندها یا نادیده گرفتن بزرگی و کوچکی حروف در فایل‌سیستم‌های ناپذیرای حروف کوچک و بزرگ و برابر دانستن اسلش‌ها و بک‌اسلش‌ها در فایل‌سیستم‌های مبتنی بر DOS انجام می‌شود. گزینهٔ \fB\-fcanon\-prefix\-map\fR باعث می‌شود این‌گونه مقایسه‌ها روی مسیرهای استانداردسازی‌شدهٔ (canonicalized) \fIold\fR و نام فایل ارجاع‌داده‌شده انجام شوند. .IP \fB\-fplugin=\fR\fIname\fR\fB.so\fR 4 .IX Item "-fplugin=name.so" کد پلاگین موجود در فایل \fIname\fR.so را بارگذاری می‌کند، با این فرض که یک شیء مشترک (shared object) است که باید توسط کامپایلر dlopen\*(Aq شود. نام پایهٔ فایل شیء مشترک برای شناسایی پلاگین به منظور تجزیهٔ آرگومان‌ها استفاده می‌شود (به بخش \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR در زیر مراجعه کنید). هر پلاگین باید توابع فراخوان (callback) مشخص‌شده در رابط برنامه‌نویسی پلاگین‌ها (Plugins API) را تعریف کند. .IP \fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR 4 .IX Item "-fplugin-arg-name-key=value" یک آرگومان به نام \fIkey\fR با مقدار \fIvalue\fR برای پلاگینی به نام \fIname\fR تعریف می‌کند. .IP \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] 4 .IX Item "-fdump-ada-spec[-slim]" برای فایل‌های منبع و شمول (include) مربوط به C و C++‎، فایل‌های مشخصات معادل Ada (موسوم به Ada specs) را تولید می‌کند. .IP \fB\-fada\-spec\-parent=\fR\fIunit\fR 4 .IX Item "-fada-spec-parent=unit" در ترکیب با \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] در بالا، مشخصات Ada را به عنوان واحدهای فرزندِ واحد والد \fIunit\fR تولید می‌کند. .IP \fB\-fdump\-go\-spec=\fR\fIfile\fR 4 .IX Item "-fdump-go-spec=file" برای فایل‌های ورودی در هر زبانی، اعلان‌های معادل Go را در \fIfile\fR تولید می‌کند. این گزینه اعلان‌های \f(CW\*(C`const\*(C'\fR، \&\f(CW\*(C`type\*(C'\fR، \f(CW\*(C`var\*(C'\fR و \f(CW\*(C`func\*(C'\fR زبان Go را ایجاد می‌کند که می‌تواند روش مفیدی برای آغاز نوشتن یک رابط Go برای کدهای نوشته‌شده به زبان‌های دیگر باشد. .IP \fB@\fR\fIfile\fR 4 .IX Item "@file" گزینه‌های خط فرمان را از \fIfile\fR می‌خواند. گزینه‌های خوانده‌شده به جای گزینهٔ اصلی @\fIfile\fR درج می‌شوند. اگر \fIfile\fR وجود نداشته باشد یا قابل خواندن نباشد، با این گزینه به صورت تحت‌اللفظی رفتار شده و حذف نخواهد شد. .Sp گزینه‌ها در \fIfile\fR با نویسه‌های فاصله (whitespace) از یکدیگر جدا می‌شوند. یک نویسهٔ فاصله را می‌توان با قرار دادن کل گزینه در نقل‌قول تکی یا دوتایی در داخل گزینه گنجاند. هر نویسه‌ای (از جمله بک‌اسلش) را می‌توان با افزودن یک بک‌اسلش در ابتدای آن، در گزینه قرار داد. خود \fIfile\fR نیز می‌تواند شامل گزینه‌های @\fIfile\fR اضافی باشد؛ هر نوع از این گزینه‌ها به صورت بازگشتی پردازش خواهند شد..SS "کامپایل برنامه‌های C++ (Compiling C++ Programs)" .IX Subsection "Compiling C++ Programs" فایل‌های منبع C++ طبق قرارداد از یکی از پسوندهای \fB.C\fR، \&\fB.cc\fR، \fB.cpp\fR، \fB.CPP\fR، \fB.c++\fR، \fB.cp\fR یا \&\fB.cxx\fR استفاده می‌کنند؛ فایل‌های سرآیند C++ اغلب از \fB.hh\fR، \fB.hpp\fR، \&\fB.H\fR یا (برای کدهای قالب مشترک) \fB.tcc\fR استفاده می‌کنند؛ فایل‌های پیش‌پردازش‌شدهٔ C++ از پسوند \fB.ii\fR استفاده می‌کنند؛ و واحدهای واسط ماژول C++20 گاهی از \fB.ixx\fR، \fB.cppm\fR، \fB.cxxm\fR، \fB.c++m\fR یا \fB.ccm\fR استفاده می‌کنند. .PP کامپایلر GCC فایل‌هایی با این نام‌ها را شناسایی کرده و آن‌ها را به‌عنوان برنامه‌های C++ کامپایل می‌کند، حتی اگر کامپایلر را دقیقاً همانند کامپایل برنامه‌های C (معمولاً با نام \fBgcc\fR) فراخوانی کنید. .PP با این حال، استفاده از \fBgcc\fR کتابخانهٔ C++ را اضافه نمی‌کند. \&\fBg++\fR برنامه‌ای است که GCC را فراخوانی کرده و به‌طور خودکار پیوند دادن (linking) با کتابخانهٔ C++ را مشخص می‌سازد. این برنامه با فایل‌های \fB.c\fR، \&\fB.h\fR و \fB.i\fR به‌جای فایل‌های منبع C، مانند فایل‌های منبع C++ رفتار می‌کند مگر اینکه از گزینهٔ \fB\-x\fR استفاده شود. این برنامه همچنین هنگام پیش‌کامپایل کردن یک فایل سرآیند C با پسوند \fB.h\fR جهت استفاده در کامپایل‌های C++ مفید است. در بسیاری از سیستم‌ها، \fBg++\fR با نام \fBc++\fR نیز نصب شده است. .PP هنگام کامپایل برنامه‌های C++، می‌توانید بسیاری از همان گزینه‌های خط فرمانی را که برای کامپایل برنامه‌ها در هر زبانی به کار می‌برید مشخص کنید؛ یا گزینه‌های خط فرمانی که برای C و زبان‌های وابسته معنادار هستند؛ یا گزینه‌هایی که منحصراً برای برنامه‌های C++ معنا دارند. .SS "گزینه‌های کنترل لهجهٔ C (Options Controlling C Dialect)" .IX Subsection "Options Controlling C Dialect" گزینه‌های زیر لهجهٔ زبان C (یا زبان‌های مشتق‌شده از C، مانند C++، Objective\-C و Objective\-C++) را که کامپایلر می‌پذیرد کنترل می‌کنند: .IP \fB\-ansi\fR 4 .IX Item "-ansi" .PD 0 .IP \fB\-\-ansi\fR 4 .IX Item "--ansi" .PD در حالت C، این گزینه معادل \fB\-std=c90\fR است. در حالت C++، معادل \fB\-std=c++98\fR است. .IP \fB\-std=\fR 4 .IX Item "-std=" استاندارد زبان را تعیین می‌کند. این گزینه در حال حاضر تنها هنگام کامپایل C یا C++ پشتیبانی می‌شود. .Sp کامپایلر می‌تواند چندین استاندارد پایه، مانند \fBc90\fR یا \&\fBc++98\fR، و لهجه‌های GNU از آن استانداردها مانند \&\fBgnu90\fR یا \fBgnu++98\fR را بپذیرد. هنگامی که یک استاندارد پایه تعیین می‌شود، کامپایلر تمام برنامه‌های منطبق با آن استاندارد را به علاوهٔ برنامه‌هایی که از افزونه‌های GNU ناسازگار با آن استفاده نمی‌کنند، می‌پذیرد. برای نمونه، \&\fB\-std=c90\fR قابلیت‌های خاصی از GCC را که با استاندارد ISO C90 ناسازگار هستند، مانند کلیدواژه‌های \f(CW\*(C`asm\*(C'\fR و \f(CW\*(C`typeof\*(C'\fR غیرفعال می‌کند؛ اما سایر افزونه‌های GNU را که معنایی در ISO C90 ندارند، مانند حذف عبارت میانی در عبارت شرطی \f(CW\*(C`?:\*(C'\fR، غیرفعال نمی‌سازد. از سوی دیگر، هنگامی که لهجه‌ای از GNU برای یک استاندارد مشخص می‌شود، تمام قابلیت‌های پشتیبانی‌شده توسط کامپایلر فعال می‌شوند، حتی اگر این قابلیت‌ها معنای استاندارد پایه را تغییر دهند. در نتیجه، ممکن است برخی برنامه‌هایی که انطباق دقیقی دارند رد شوند. این استاندارد خاص توسط \fB\-Wpedantic\fR برای شناسایی اینکه کدام قابلیت‌ها با توجه به آن نسخه از استاندارد افزونه‌های GNU محسوب می‌شوند، به کار می‌رود. برای نمونه، \&\fB\-std=gnu90 \-Wpedantic\fR دربارهٔ یادداشت‌های (کامنت‌های) سبک C++ با \fB//\fR هشدار می‌دهد، در حالی که \fB\-std=gnu99 \-Wpedantic\fR هشداری صادر نمی‌کند. .Sp ارائهٔ یک مقدار برای این گزینه الزامی است؛ مقادیر مجاز عبارتند از: .RS 4 .IP \fBc90\fR 4 .IX Item "c90" .PD 0 .IP \fBc89\fR 4 .IX Item "c89" .IP \fBiso9899:1990\fR 4 .IX Item "iso9899:1990" .PD پشتیبانی از تمام برنامه‌های ISO C90 (برخی افزونه‌های GNU که با ISO C90 ناسازگاری دارند غیرفعال می‌شوند). همانند \fB\-ansi\fR برای کدهای C. .IP \fBiso9899:199409\fR 4 .IX Item "iso9899:199409" استاندارد ISO C90 با اصلاحات اعمال‌شده در اصلاحیهٔ شماره ۱. .IP \fBc99\fR 4 .IX Item "c99" .PD 0 .IP \fBc9x\fR 4 .IX Item "c9x" .IP \fBiso9899:1999\fR 4 .IX Item "iso9899:1999" .IP \fBiso9899:199x\fR 4 .IX Item "iso9899:199x" .PD استاندارد ISO C99. این استاندارد به جز باگ‌ها و مسائل مربوط به محاسبات ممیز شناور (floating\-point) (عمدتاً، ولی نه کاملاً، مرتبط با قابلیت‌های اختیاری C99 از پیوست‌های F و G)، اساساً به‌طور کامل پشتیبانی می‌شود. برای اطلاعات بیشتر <\fBhttps://gcc.gnu.org/projects/c\-status.html\fR> را ببینید. نام‌های \fBc9x\fR و \fBiso9899:199x\fR منسوخ شده‌اند. .IP \fBc11\fR 4 .IX Item "c11" .PD 0 .IP \fBc1x\fR 4 .IX Item "c1x" .IP \fBiso9899:2011\fR 4 .IX Item "iso9899:2011" .PD استاندارد ISO C11، بازنگری سال ۲۰۱۱ از استاندارد ISO C. این استاندارد به جز باگ‌ها، مسائل مربوط به محاسبات ممیز شناور (عمدتاً، ولی نه کاملاً، مرتبط با قابلیت‌های اختیاری C11 از پیوست‌های F و G) و پیوست‌های اختیاری K (واسط‌های بررسی محدوده) و L (قابلیت تحلیل‌پذیری)، اساساً به‌طور کامل پشتیبانی می‌شود. نام \fBc1x\fR منسوخ شده است. .IP \fBc17\fR 4 .IX Item "c17" .PD 0 .IP \fBc18\fR 4 .IX Item "c18" .IP \fBiso9899:2017\fR 4 .IX Item "iso9899:2017" .IP \fBiso9899:2018\fR 4 .IX Item "iso9899:2018" .PD استاندارد ISO C17، بازنگری سال ۲۰۱۷ از استاندارد ISO C (منتشر شده در ۲۰۱۸). این استاندارد به جز رفع ایرادات (که تمام آن‌ها با \fB\-std=c11\fR نیز اعمال می‌شوند) و مقدار جدیدی برای \&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR، همانند C11 است و بنابراین تا همان میزان C11 پشتیبانی می‌شود. .IP \fBc23\fR 4 .IX Item "c23" .PD 0 .IP \fBc2x\fR 4 .IX Item "c2x" .IP \fBiso9899:2024\fR 4 .IX Item "iso9899:2024" .PD استاندارد ISO C23، بازنگری سال ۲۰۲۳ از استاندارد ISO C (منتشر شده در ۲۰۲۴). نام \fBc2x\fR منسوخ شده است. .IP \fBc2y\fR 4 .IX Item "c2y" نسخهٔ بعدی استاندارد ISO C که همچنان در حال توسعه است. پشتیبانی از این نسخه آزمایشی و ناکامل است. .IP \fBgnu90\fR 4 .IX Item "gnu90" .PD 0 .IP \fBgnu89\fR 4 .IX Item "gnu89" .PD لهجهٔ GNU از استاندارد ISO C90 (شامل برخی از قابلیت‌های C99). .IP \fBgnu99\fR 4 .IX Item "gnu99" .PD 0 .IP \fBgnu9x\fR 4 .IX Item "gnu9x" .PD لهجهٔ GNU از استاندارد ISO C99. نام \fBgnu9x\fR منسوخ شده است. .IP \fBgnu11\fR 4 .IX Item "gnu11" .PD 0 .IP \fBgnu1x\fR 4 .IX Item "gnu1x" .PD لهجهٔ GNU از استاندارد ISO C11. نام \fBgnu1x\fR منسوخ شده است. .IP \fBgnu17\fR 4 .IX Item "gnu17" .PD 0 .IP \fBgnu18\fR 4 .IX Item "gnu18" .PD لهجهٔ GNU از استاندارد ISO C17. .IP \fBgnu23\fR 4 .IX Item "gnu23" .PD 0 .IP \fBgnu2x\fR 4 .IX Item "gnu2x" .PD لهجهٔ GNU از استاندارد ISO C23. این گزینه پیش‌فرض برای کدهای C است. نام \&\fBgnu2x\fR منسوخ شده است. .IP \fBgnu2y\fR 4 .IX Item "gnu2y" نسخهٔ بعدی استاندارد ISO C که همچنان در حال توسعه است، به‌همراه افزونه‌های GNU. پشتیبانی از این نسخه آزمایشی و ناکامل است. نام \fBgnu2x\fR منسوخ شده است. .IP \fBc++98\fR 4 .IX Item "c++98".PD 0 .IP \fBc++03\fR 4 .IX Item "c++03" .PD استاندارد ISO C++ سال ۱۹۹۸ به‌همراه تصحیح فنی سال ۲۰۰۳ و برخی گزارش‌های نقص اضافی. همانند \fB\-ansi\fR برای کد C++. .IP \fBgnu++98\fR 4 .IX Item "gnu++98" .PD 0 .IP \fBgnu++03\fR 4 .IX Item "gnu++03" .PD گویش GNU از \fB\-std=c++98\fR. .IP \fBc++11\fR 4 .IX Item "c++11" .PD 0 .IP \fBc++0x\fR 4 .IX Item "c++0x" .PD استاندارد ISO C++ سال ۲۰۱۱ به‌همراه اصلاحیه‌ها. نام \fBc++0x\fR منسوخ شده است. .IP \fBgnu++11\fR 4 .IX Item "gnu++11" .PD 0 .IP \fBgnu++0x\fR 4 .IX Item "gnu++0x" .PD گویش GNU از \fB\-std=c++11\fR. نام \fBgnu++0x\fR منسوخ شده است. .IP \fBc++14\fR 4 .IX Item "c++14" .PD 0 .IP \fBc++1y\fR 4 .IX Item "c++1y" .PD استاندارد ISO C++ سال ۲۰۱۴ به‌همراه اصلاحیه‌ها. نام \fBc++1y\fR منسوخ شده است. .IP \fBgnu++14\fR 4 .IX Item "gnu++14" .PD 0 .IP \fBgnu++1y\fR 4 .IX Item "gnu++1y" .PD گویش GNU از \fB\-std=c++14\fR. نام \fBgnu++1y\fR منسوخ شده است. .IP \fBc++17\fR 4 .IX Item "c++17" .PD 0 .IP \fBc++1z\fR 4 .IX Item "c++1z" .PD استاندارد ISO C++ سال ۲۰۱۷ به‌همراه اصلاحیه‌ها. نام \fBc++1z\fR منسوخ شده است. .IP \fBgnu++17\fR 4 .IX Item "gnu++17" .PD 0 .IP \fBgnu++1z\fR 4 .IX Item "gnu++1z" .PD گویش GNU از \fB\-std=c++17\fR. نام \fBgnu++1z\fR منسوخ شده است. .IP \fBc++20\fR 4 .IX Item "c++20" .PD 0 .IP \fBc++2a\fR 4 .IX Item "c++2a" .PD استاندارد ISO C++ سال ۲۰۲۰ به‌همراه اصلاحیه‌ها. پشتیبانی از ماژول‌های C++20 هنوز آزمایشی است و باید با گزینه \fB\-fmodules\fR فعال شود. نام \fBc++2a\fR منسوخ شده است. .IP \fBgnu++20\fR 4 .IX Item "gnu++20" .PD 0 .IP \fBgnu++2a\fR 4 .IX Item "gnu++2a" .PD گویش GNU از \fB\-std=c++20\fR. این مقدار پیش‌فرض برای کد C++ است. پشتیبانی از ماژول‌های C++20 هنوز آزمایشی است و باید با گزینه \fB\-fmodules\fR فعال شود. نام \fBgnu++2a\fR منسوخ شده است. .IP \fBc++23\fR 4 .IX Item "c++23" .PD 0 .IP \fBc++2b\fR 4 .IX Item "c++2b" .PD استاندارد ISO C++ سال ۲۰۲۳ به‌همراه اصلاحیه‌ها (منتشر شده در سال ۲۰۲۴). پشتیبانی از آن آزمایشی است، و ممکن است در انتشارهای آینده به شیوه‌های ناسازگار تغییر کند. نام \fBc++2b\fR منسوخ شده است. .IP \fBgnu++23\fR 4 .IX Item "gnu++23" .PD 0 .IP \fBgnu++2b\fR 4 .IX Item "gnu++2b" .PD گویش GNU از \fB\-std=c++23\fR. پشتیبانی از آن آزمایشی است، و ممکن است در انتشارهای آینده به شیوه‌های ناسازگار تغییر کند. نام \fBgnu++2b\fR منسوخ شده است. .IP \fBc++2c\fR 4 .IX Item "c++2c" .PD 0 .IP \fBc++26\fR 4 .IX Item "c++26" .PD بازنگری بعدی استاندارد ISO C++، برنامه‌ریزی‌شده برای سال ۲۰۲۶. پشتیبانی از آن بسیار آزمایشی است و تقریباً به طور قطع در انتشارهای بعدی به روش‌های ناسازگار تغییر خواهد کرد. .IP \fBgnu++2c\fR 4 .IX Item "gnu++2c" .PD 0 .IP \fBgnu++26\fR 4 .IX Item "gnu++26" .PD گویش GNU از \fB\-std=c++2c\fR. پشتیبانی از آن بسیار آزمایشی است، و تقریباً به طور قطع در انتشارهای بعدی به روش‌های ناسازگار تغییر خواهد کرد. .RE .RS 4 .RE .IP "\fB\-aux\-info\fR \fIfilename\fR" 4 .IX Item "-aux-info filename" اعلان‌های دارای پیش‌نمونه (prototyped) را برای همه توابع اعلان‌شده و/یا تعریف‌شده در یک واحد ترجمه (translation unit)، از جمله موارد موجود در فایل‌های سرآیند، در نام فایل داده‌شده خروجی می‌دهد. این گزینه برای هر زبانی غیر از C بدون هشدار نادیده گرفته می‌شود. .Sp علاوه بر اعلان‌ها، این فایل در قالب توضیح (کامنت)، مبدأ هر اعلان (فایل مبدأ و شماره خط)، ضمنی بودن، دارای پیش‌نمونه یا بدون پیش‌نمونه بودن اعلان را مشخص می‌کند (به‌ترتیب \fBI\fR، \fBN\fR برای جدید یا \&\fBO\fR برای قدیمی، در نخستین نویسه پس از شماره خط و دونقطه)، و این که از یک اعلان آمده است یا از یک تعریف (\fBC\fR یا \fBF\fR به‌ترتیب، در نویسه بعدی). در صورت تعریف توابع، فهرستی از آرگومان‌ها به سبک K&R به همراه اعلان‌هایشان نیز درون توضیحات، پس از اعلان ارائه می‌شود. .IP \fB\-fno\-asm\fR 4 .IX Item "-fno-asm" کلمات \f(CW\*(C`asm\*(C'\fR، \f(CW\*(C`inline\*(C'\fR یا \f(CW\*(C`typeof\*(C'\fR را به عنوان کلمه کلیدی شناسایی نمی‌کند، تا کد بتواند از این کلمات به عنوان شناسه استفاده کند. می‌توانید به جای آن‌ها از کلمات کلیدی \f(CW\*(C`_\|_asm_\|_\*(C'\fR، \f(CW\*(C`_\|_inline_\|_\*(C'\fR و \f(CW\*(C`_\|_typeof_\|_\*(C'\fR استفاده کنید. در C، گزینه \fB\-ansi\fR شامل \fB\-fno\-asm\fR می‌شود. .Sp در C++، کلمه \f(CW\*(C`inline\*(C'\fR یک کلمه کلیدی استاندارد است و تحت تأثیر این سوییچ قرار نمی‌گیرد. ممکن است بخواهید به جای آن از پرچم \fB\-fno\-gnu\-keywords\fR استفاده کنید که \f(CW\*(C`typeof\*(C'\fR را غیرفعال می‌کند اما به \f(CW\*(C`asm\*(C'\fR و \&\f(CW\*(C`inline\*(C'\fR کاری ندارد. در حالت C99 (\fB\-std=c99\fR یا \fB\-std=gnu99\fR)، این سوییچ تنها روی کلمات کلیدی \f(CW\*(C`asm\*(C'\fR و \f(CW\*(C`typeof\*(C'\fR اثر می‌گذارد، زیرا \f(CW\*(C`inline\*(C'\fR در ISO C99 یک کلمه کلیدی استاندارد است. در حالت C23 (\fB\-std=c23\fR یا \fB\-std=gnu23\fR)، این سوییچ تنها بر کلمه کلیدی \f(CW\*(C`asm\*(C'\fR تأثیر می‌گذارد، چرا که \f(CW\*(C`typeof\*(C'\fR در ISO C23 یک کلمه کلیدی استاندارد است. .IP \fB\-fno\-builtin\fR 4 .IX Item "-fno-builtin" .PD 0 .IP \fB\-fno\-builtin\-\fR\fIfunction\fR 4 .IX Item "-fno-builtin-function" .PD توابع توکاری (built\-in) را که پیشوند آن‌ها با \&\fB_\|_builtin_\fR آغاز نمی‌شود، شناسایی نمی‌کند. .Sp GCC به‌طور معمول کدهای ویژه‌ای تولید می‌کند تا برخی توابع توکار را با کارایی بیشتری مدیریت کند؛ به عنوان مثال، فراخوانی‌های \f(CW\*(C`alloca\*(C'\fR ممکن است تبدیل به دستورالعمل‌های تکی شوند که پشته را مستقیماً تنظیم می‌کنند، و فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR ممکن است به حلقه‌های کپی درون‌خطی (inline) تبدیل شوند. کد حاصل اغلب هم کوچک‌تر و هم سریع‌تر است، اما چون فراخوانی‌های تابع دیگر به شکل واقعی ظاهر نمی‌شوند، شما نمی‌توانید روی آن فراخوانی‌ها نقطه توقف (breakpoint) بگذارید، و همچنین نمی‌توانید رفتار توابع را با پیوند زدن به یک کتابخانه دیگر تغییر دهید. علاوه بر این، هنگامی که یک تابع به عنوان تابع توکار شناخته می‌شود، ممکن است GCC از اطلاعات مربوط به آن تابع برای هشدار دادن درباره مشکلات مربوط به فراخوانی‌های آن تابع، یا برای تولید کد کارآمدتر استفاده کند، حتی اگر کد حاصل همچنان حاوی فراخوانی‌هایی به آن تابع باشد. برای نمونه، هشدارهایی با \fB\-Wformat\fR برای فراخوانی‌های نادرست به \&\f(CW\*(C`printf\*(C'\fR داده می‌شود زمانی که \f(CW\*(C`printf\*(C'\fR توکار است و مشخص شده است که \f(CW\*(C`strlen\*(C'\fR حافظه سراسری (global memory) را تغییر نمی‌دهد. .Sp با گزینه \fB\-fno\-builtin\-\fR\fIfunction\fR فقط تابع توکار \fIfunction\fR غیرفعال می‌شود. نام \fIfunction\fR نباید با \fB_\|_builtin_\fR آغاز شود. اگر نام تابعی برده شود که در این نسخه از GCC توکار نیست، این گزینه نادیده گرفته می‌شود. گزینه متناظر \&\fB\-fbuiltin\-\fR\fIfunction\fR وجود ندارد؛ اگر می‌خواهید هنگام استفاده از \fB\-fno\-builtin\fR یا \&\fB\-ffreestanding\fR توابع توکار را به صورت گزینشی فعال کنید، می‌توانید ماکروهایی از قبیل زیر را تعریف کنید: .Sp.Vb 2 \& #define abs(n) _\|_builtin_abs ((n)) \& #define strcpy(d, s) _\|_builtin_strcpy ((d), (s)) .Ve .IP \fB\-fcond\-mismatch\fR 4 .IX Item "-fcond-mismatch" اجازه دادن به عبارت‌های شرطی با نوع‌های ناهمخوان در آرگومان‌های دوم و سوم. مقدار چنین عبارتی \f(CWvoid\fR خواهد بود. این گزینه برای C++ پشتیبانی نمی‌شود. .IP \fB\-ffreestanding\fR 4 .IX Item "-ffreestanding" تصریح می‌کند که کامپایل یک محیط مستقل (freestanding) را هدف قرار می‌دهد. این گزینه متضمن \fB\-fno\-builtin\fR است. محیط مستقل محیطی است که در آن ممکن است کتابخانهٔ استاندارد وجود نداشته باشد، و نقطهٔ آغاز برنامه لزوماً تابع \f(CW\*(C`main\*(C'\fR نباشد. بارزترین نمونه، هستهٔ سیستم‌عامل است. این گزینه معادل \fB\-fno\-hosted\fR است. .IP \fB\-fgimple\fR 4 .IX Item "-fgimple" فعال‌سازی تجزیهٔ تعاریف توابعی که با \f(CW\*(C`_\|_GIMPLE\*(C'\fR علامت‌گذاری شده‌اند. این یک ویژگی آزمایشی است که امکان آزمون واحد گذرگاه‌های GIMPLE را فراهم می‌آورد. .IP \fB\-fgnu\-tm\fR 4 .IX Item "-fgnu-tm" هنگامی که گزینهٔ \fB\-fgnu\-tm\fR مشخص شود، کامپایلر کدی برای گونهٔ لینوکسی سند مشخصات فعلی ABI حافظهٔ تراکنشی (Transactional Memory) اینتل (نگارش ۱.۱، ۶ مه ۲۰۰۹) تولید می‌کند. این یک ویژگی آزمایشی است که با تغییر مشخصات رسمی، ممکن است رابط آن در نگارش‌های آیندهٔ GCC تغییر کند. لطفاً توجه داشته باشید که این ویژگی روی همهٔ معماری‌ها پشتیبانی نمی‌شود. .Sp برای اطلاعات بیشتر دربارهٔ پشتیبانی GCC از حافظهٔ تراکنشی، .Sp توجه داشته باشید که ویژگی حافظهٔ تراکنشی همراه با استثناهای غیرفراخوانی (\fB\-fnon\-call\-exceptions\fR) پشتیبانی نمی‌شود. .IP \fB\-fgnu89\-inline\fR 4 .IX Item "-fgnu89-inline" گزینهٔ \fB\-fgnu89\-inline\fR به GCC دستور می‌دهد که در حالت C99 از معناشناسی سنتی GNU برای توابع \f(CW\*(C`inline\*(C'\fR استفاده کند. .Sp استفاده از این گزینه تقریباً معادل افزودن صفت تابع \f(CW\*(C`gnu_inline\*(C'\fR به تمام توابع درون‌خطی (inline) است. .Sp گزینهٔ \fB\-fno\-gnu89\-inline\fR صراحتاً به GCC دستور می‌دهد که در حالت C99 یا gnu99 از معناشناسی C99 برای \f(CW\*(C`inline\*(C'\fR استفاده کند (یعنی رفتار پیش‌فرض را تعیین می‌کند). این گزینه در حالت‌های \fB\-std=c90\fR یا \fB\-std=gnu90\fR پشتیبانی نمی‌شود. .Sp ماکروهای پیش‌پردازندهٔ \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR و \f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR می‌توانند برای بررسی این که کدام معناشناسی برای توابع \f(CW\*(C`inline\*(C'\fR حاکم است، استفاده شوند. .IP \fB\-fhosted\fR 4 .IX Item "-fhosted" تصریح می‌کند که کامپایل یک محیط میزبانی‌شده (hosted) را هدف قرار می‌دهد. این گزینه متضمن \fB\-fbuiltin\fR است. محیط میزبان محیطی است که در آن تمام کتابخانهٔ استاندارد در دسترس است و در آن نوع بازگشتی \f(CW\*(C`main\*(C'\fR از نوع \f(CW\*(C`int\*(C'\fR است. تقریباً همه چیز به‌جز هسته نمونه‌ای از آن هستند. این گزینه معادل \fB\-fno\-freestanding\fR است. .IP \fB\-flax\-vector\-conversions\fR 4 .IX Item "-flax-vector-conversions" اجازه دادن به تبدیل‌های ضمنی بین بردارهایی با تعداد عناصر متفاوت و/یا نوع‌های عنصر ناسازگار. این گزینه نباید برای کدهای جدید استفاده شود. .IP \fB\-fms\-extensions\fR 4 .IX Item "-fms-extensions" پذیرش برخی ساختارهای غیراستاندارد مورد استفاده در فایل‌های سرآیند مایکروسافت. .Sp در کد ++C، این گزینه اجازه می‌دهد نام اعضا در ساختارها مشابه با اعلان‌های نوع پیشین باشند. .Sp .Vb 4 \& typedef int UOW; \& struct ABC { \& UOW UOW; \& }; .Ve .Sp برخی موارد از فیلدهای بدون نام در ساختارها و اجتماع‌ها (unions) تنها با این گزینه پذیرفته می‌شوند. .Sp توجه داشته باشید که این گزینه برای همهٔ هدف‌ها غیرفعال است به‌جز هدف‌های x86 که از ms\-abi استفاده می‌کنند. .IP \fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR 4 .IX Item "-fpermitted-flt-eval-methods=style" استاندارد ISO/IEC TS 18661\-3 مقادیر مجاز جدیدی را برای \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR تعریف می‌کند که نشان می‌دهند عملیات و ثوابت دارای یک نوع معنایی که قالب مبادله‌ای (interchange) یا گسترش‌یافته است، باید با دقت و دامنهٔ آن نوع ارزیابی شوند. این مقادیر جدید فوق‌مجموعه‌ای از مقادیر مجاز تحت C99/C11 هستند، که معنای سایر مقادیر مثبت \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR را مشخص نمی‌کند. از این رو، ممکن است کدهای منطبق بر C11 با در نظر گرفتن احتمال این مقادیر جدید نوشته نشده باشند. .Sp گزینهٔ \fB\-fpermitted\-flt\-eval\-methods\fR مشخص می‌کند که آیا کامپایلر تنها باید به مقادیر \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR مشخص‌شده در C99/C11 اجازه دهد، یا مجموعهٔ گسترش‌یافتهٔ مقادیر مشخص‌شده در ISO/IEC TS 18661\-3 را نیز مجاز بداند. .Sp مقدار \fIstyle\fR بر حسب مورد \f(CW\*(C`c11\*(C'\fR یا \f(CW\*(C`ts\-18661\-3\*(C'\fR است. .Sp پیش‌فرض در حالت منطبق با استانداردها (\fB\-std=c11\fR یا مانند آن) \fB\-fpermitted\-flt\-eval\-methods=c11\fR است. پیش‌فرض در حالت گویش گنو (\fB\-std=gnu11\fR یا مانند آن) \fB\-fpermitted\-flt\-eval\-methods=ts\-18661\-3\fR است. .Sp گزینه‌های \fB\-fdeps\-*\fR برای استخراج اطلاعات وابستگی ساختاریافته برای یک سورس استفاده می‌شوند. این شامل تعیین این است که چه منابعی که توسط سایر فایل‌های سورس ارائه شده‌اند برای کامپایل سورس لازم خواهند بود، و همچنین چه منابعی توسط خود سورس ارائه می‌شوند. این اطلاعات می‌تواند برای افزودن وابستگی‌های لازم بین قواعد کامپایل سورس‌های وابسته بر پایهٔ محتوای آن‌ها استفاده شود، به‌جای اینکه نیاز باشد چنین اطلاعاتی در ابزارهای ساخت نیز منعکس شوند. .IP \fB\-fdeps\-file=\fR\fIfile\fR 4 .IX Item "-fdeps-file=file" محل نوشتن اطلاعات وابستگی ساختاریافته. .IP \fB\-fdeps\-format=\fR\fIformat\fR 4 .IX Item "-fdeps-format=format" قالبی که برای اطلاعات وابستگی ساختاریافته استفاده می‌شود. در حال حاضر \fBp1689r5\fR تنها قالب پشتیبانی‌شده است. توجه داشته باشید هنگامی که این آرگومان مشخص شود، خروجی \fB\-MF\fR از برخی اطلاعات (به‌ویژه ماژول‌های C++) پاک‌سازی می‌شود تا از نحو توسعه‌یافتهٔ makefile که توسط بیشتر ابزارها پشتیبانی نمی‌شود، استفاده نکند. .IP \fB\-fdeps\-target=\fR\fIfile\fR 4 .IX Item "-fdeps-target=file" مشابه \fB\-MT\fR اما برای اطلاعات وابستگی ساختاریافته. این گزینه هدفی را مشخص می‌کند که در نهایت به هر منبع مورد نیازی احتیاج خواهد داشت و هر منبع استخراج‌شده از سورس را که ممکن است توسط سایر سورس‌ها مورد نیاز باشد فراهم می‌کند. .IP \fB\-fplan9\-extensions\fR 4 .IX Item "-fplan9-extensions" پذیرش برخی ساختارهای غیراستاندارد مورد استفاده در کدهای Plan 9. .Sp این گزینه \fB\-fms\-extensions\fR را فعال می‌کند، اجازهٔ ارسال اشاره‌گر به ساختارهای با فیلدهای ناشناس را به توابعی که انتظار اشاره‌گر به عناصر نوع آن فیلد را دارند می‌دهد، و ارجاع به فیلدهای ناشناس اعلان‌شده با استفاده از typedef را ممکن می‌سازد. این گزینه تنها برای C پشتیبانی می‌شود، نه C++. .IP \fB\-fsigned\-bitfields\fR 4 .IX Item "-fsigned-bitfields" .PD 0 .IP \fB\-funsigned\-bitfields\fR 4 .IX Item "-funsigned-bitfields" .IP \fB\-fno\-signed\-bitfields\fR 4 .IX Item "-fno-signed-bitfields" .IP \fB\-fno\-unsigned\-bitfields\fR 4 .IX Item "-fno-unsigned-bitfields" .PD این گزینه‌ها کنترل می‌کنند که آیا یک میدان‌بیت (bit-field) علامت‌دار است یا بدون علامت، زمانی که اعلان از هیچ‌یک از \f(CW\*(C`signed\*(C'\fR یا \f(CW\*(C`unsigned\*(C'\fR استفاده نمی‌کند. به‌طور پیش‌فرض، چنین میدان‌بیتی علامت‌دار است، زیرا این حالت سازگار است: نوع‌های صحیح پایه‌ای مانند \f(CW\*(C`int\*(C'\fR نوع‌های علامت‌دار هستند. .IP \fB\-fsigned\-char\fR 4 .IX Item "-fsigned-char" .PD 0 .IP \fB\-funsigned\-char\fR 4 .IX Item "-funsigned-char" .PD \&\fB\-fsigned\-char\fR باعث می‌شود نوع \f(CW\*(C`char\*(C'\fR مانند \f(CW\*(C`signed char\*(C'\fR علامت‌دار باشد، در حالی که \fB\-funsigned\-char\fR باعث می‌شود نوع \f(CW\*(C`char\*(C'\fR مانند \f(CW\*(C`unsigned char\*(C'\fR بدون علامت باشد. .Sp توجه داشته باشید که \fB\-fsigned\-char\fR معادل \fB\-fno\-unsigned\-char\fR است، که حالت نقیض \fB\-funsigned\-char\fR محسوب می‌شود. به همین ترتیب، گزینهٔ \fB\-fno\-signed\-char\fR معادل \fB\-funsigned\-char\fR است. .Sp هر مقصدی که توسط GCC پشتیبانی می‌شود یک پیش‌فرض برای نوع \f(CW\*(C`char\*(C'\fR دارد، که معمولاً در سند ABI ویژهٔ پردازنده برای آن مقصد مشخص می‌شود. این نوع به‌طور پیش‌فرض یا مانند \f(CW\*(C`unsigned char\*(C'\fR است یا مانند \f(CW\*(C`signed char\*(C'\fR. .Sp در حالت آرمانی، یک برنامهٔ چندسکویی (portable) هنگامی که به علامت‌دار بودن یک شیء وابسته است باید همواره از \f(CW\*(C`signed char\*(C'\fR یا \f(CW\*(C`unsigned char\*(C'\fR استفاده کند. اما برنامه‌های بسیاری نوشته شده‌اند که از \f(CW\*(C`char\*(C'\fR معمولی استفاده می‌کنند و بسته به ماشین‌هایی که برای آن‌ها نوشته شده‌اند، انتظار دارند علامت‌دار یا بدون علامت باشد. این گزینه‌ها به شما اجازه می‌دهند چنین برنامه‌ای را با پیش‌فرض مخالف به کار بیندازید. .Sp نوع \f(CW\*(C`char\*(C'\fR همواره نوعی مجزا از هر یک از \f(CW\*(C`signed char\*(C'\fR یا \f(CW\*(C`unsigned char\*(C'\fR است، حتی اگر رفتار آن همواره دقیقاً شبیه به یکی از آن دو باشد. .IP "\fB\-fstrict\-flex\-arrays\fR (فقط C و C++)" 4 .IX Item "-fstrict-flex-arrays (C and C++ only)".PD 0 .IP "\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR\fB \fR(فقط C و C++)" 4 .IX Item "-fstrict-flex-arrays=level (C and C++ only)" .PD تعیین می‌کند که در دسترسی به عناصر یک آرایه، آرایهٔ انتهایی یک ساختار چه زمانی به عنوان عضو آرایهٔ انعطاف‌پذیر (flexible array member) در نظر گرفته شود. مقدار \fIlevel\fR سطح سخت‌گیری را کنترل می‌کند. .Sp گزینهٔ \&\fB\-fstrict\-flex\-arrays\fR معادل \&\fB\-fstrict\-flex\-arrays=3\fR است که بیشترین سخت‌گیری را اعمال می‌کند؛ در این حالت، یک آرایهٔ انتهایی تنها زمانی به عنوان عضو آرایهٔ انعطاف‌پذیر در نظر گرفته می‌شود که طبق استاندارد C99 به بعد به عنوان عضو آرایهٔ انعطاف‌پذیر اعلان شده باشد. .Sp فرم منفی \fB\-fno\-strict\-flex\-arrays\fR معادل \&\fB\-fstrict\-flex\-arrays=0\fR است که کمترین سخت‌گیری را دارد. در این حالت، تمام آرایه‌های انتهایی ساختارها به عنوان اعضای آرایهٔ انعطاف‌پذیر تلقی می‌شوند. .Sp دو سطح دیگر بین 0 و 3 وجود دارد که برای پشتیبانی از کدهای قدیمی‌تر ارائه شده‌اند؛ کدهایی که از افزونهٔ آرایه با طول صفر GCC (\fB[0]\fR) یا آرایهٔ تک‌عنصری (\fB[1]\fR) به عنوان اعضای آرایهٔ انعطاف‌پذیر استفاده می‌کنند. هنگامی که \fIlevel\fR برابر 1 باشد، آرایهٔ انتهایی زمانی به عنوان عضو آرایهٔ انعطاف‌پذیر در نظر گرفته می‌شود که به صورت \fB[]\fR، \&\fB[0]\fR، یا \fB[1]\fR اعلان شده باشد. هنگامی که \fIlevel\fR برابر 2 باشد، آرایهٔ انتهایی تنها زمانی به عنوان عضو آرایهٔ انعطاف‌پذیر تلقی می‌شود که به صورت \&\fB[]\fR یا \fB[0]\fR اعلان شده باشد. .Sp شما می‌توانید این رفتار را برای یک فیلد آرایهٔ انتهایی خاص از یک ساختار با استفاده از صفت متغیر \f(CW\*(C`strict_flex_array\*(C'\fR کنترل کنید. .Sp گزینهٔ \fB\-fstrict_flex_arrays\fR با گزینهٔ \&\fB\-Wstrict\-flex\-arrays\fR تعامل دارد. .IP \fB\-fsso\-struct=\fR\fIendianness\fR 4 .IX Item "-fsso-struct=endianness" ترتیب پیش‌فرض ذخیره‌سازی اسکالرِ ساختارها و اجتماع‌ها (unions) را روی ترتیب بایت (endianness) مشخص‌شده تنظیم می‌کند. مقادیر مجاز عبارتند از \fBbig\-endian\fR، \&\fBlittle\-endian\fR و \fBnative\fR برای ترتیب بایت بومی معماری هدف (پیش‌فرض). این گزینه برای C++ پشتیبانی نمی‌شود. .Sp \&\fBهشدار:\fR اگر ترتیب بایت مشخص‌شده با ترتیب بایت بومی هدف یکسان نباشد، سوییچ \fB\-fsso\-struct\fR باعث می‌شود GCC کدی تولید کند که با کد تولیدشده بدون این سوییچ سازگاری باینری ندارد. .SS "گزینه‌های کنترل گویش C++ (Options Controlling C++ Dialect)" .IX Subsection "Options Controlling C++ Dialect" این بخش گزینه‌های خط فرمانی را شرح می‌دهد که تنها برای برنامه‌های C++ معنادار هستند. شما همچنین می‌توانید از بیشتر گزینه‌های کامپایلر GNU صرف‌نظر از زبان برنامه‌تان استفاده کنید. برای مثال، ممکن است فایلی به نام \fIfirstClass.C\fR را این‌گونه کامپایل کنید: .PP .Vb 1 \& g++ \-g \-fstrict\-enums \-O \-c firstClass.C .Ve .PP در این مثال، تنها \fB\-fstrict\-enums\fR گزینه‌ای است که فقط برای برنامه‌های C++ در نظر گرفته شده است؛ سایر گزینه‌ها را می‌توانید با هر زبانی که توسط GCC پشتیبانی می‌شود به کار ببرید. .PP برخی از گزینه‌ها برای کامپایل برنامه‌های C، مانند \fB\-std\fR، برای برنامه‌های C++ نیز کاربرد دارند. .PP در ادامه فهرستی از گزینه‌هایی آمده است که \fIصرفاً\fR برای کامپایل برنامه‌های C++ هستند: .IP \fB\-\-compile\-std\-module\fR 4 .IX Item "--compile-std-module" پیش از کامپایل هر فایل مبدئی که صراحتاً در خط فرمان مشخص شده باشد، رابط‌های ماژول کامپایل‌شده (compiled module interfaces) را برای واحد سرآیند \&\fB\fR و ماژول‌های \fBstd\fR و \&\fBstd.compat\fR می‌سازد. هدف این است که برای ساخت برنامه‌های ساده‌ای که با یک دستور از \fBimport std;\fR استفاده می‌کنند، کاربردی و مفید باشد. .IP \fB\-fabi\-version=\fR\fIn\fR 4 .IX Item "-fabi-version=n" از نسخهٔ \fIn\fR رابط دودویی برنامه (ABI) زبان C++ استفاده می‌کند. مقدار پیش‌فرض نسخهٔ 0 است. .Sp نسخهٔ 0 به نسخه‌ای اشاره دارد که بیشترین انطباق را با مشخصات C++ ABI دارد. بنابراین، ABI به‌دست‌آمده با استفاده از نسخهٔ 0 با برطرف شدن باگ‌های ABI در نسخه‌های مختلف G++ تغییر خواهد کرد. .Sp نسخهٔ 1، نسخه‌ای از C++ ABI است که نخستین‌بار در G++ 3.2 ظاهر شد. .Sp نسخهٔ 2، نسخه‌ای از C++ ABI است که نخستین‌بار در G++ 3.4 ظاهر شد و تا G++ 4.9 نسخهٔ پیش‌فرض بود. .Sp نسخهٔ 3، خطایی را در درهم‌سازی (mangling) یک آدرس ثابت به عنوان آرگومان الگو تصحیح می‌کند. .Sp نسخهٔ 4، که نخستین‌بار در G++ 4.5 ظاهر شد، یک درهم‌سازی استاندارد برای نوع‌های برداری (vector types) پیاده‌سازی می‌کند. .Sp نسخهٔ 5، که نخستین‌بار در G++ 4.6 ظاهر شد، درهم‌سازی صفت const/volatile روی نوع‌های اشاره‌گر تابع، decltype یک اعلان ساده (plain decl)، و استفاده از یک پارامتر تابع در اعلان پارامتری دیگر را تصحیح می‌کند. .Sp نسخهٔ 6، که نخستین‌بار در G++ 4.7 ظاهر شد، رفتار ارتقای شمارش‌های با حوزه (scoped enums) در C++11 و درهم‌سازی بسته‌های آرگومان الگو (template argument packs)، const/static_cast، پیشوندهای ++ و \-\-، و تابع حوزهٔ کلاسِ استفاده‌شده به عنوان آرگومان الگو را تصحیح می‌کند. .Sp نسخهٔ 7، که نخستین‌بار در G++ 4.8 ظاهر شد، nullptr_t را به عنوان یک نوع توکار در نظر می‌گیرد و درهم‌سازی لانبداها (lambdas) را در حوزهٔ آرگومان پیش‌فرض تصحیح می‌کند. .Sp نسخهٔ 8، که نخستین‌بار در G++ 4.9 ظاهر شد، رفتار جایگزینی نوع‌های تابع دارای توصیف‌کننده‌های function\-cv\-qualifiers را تصحیح می‌کند. .Sp نسخهٔ 9، که نخستین‌بار در G++ 5.2 ظاهر شد، ترازسازی (alignment) \&\f(CW\*(C`nullptr_t\*(C'\fR را تصحیح می‌کند. .Sp نسخهٔ 10، که نخستین‌بار در G++ 6.1 ظاهر شد، درهم‌سازی صفت‌هایی که بر هویت نوع تأثیر می‌گذارند، مانند صفت‌های قرارداد فراخوانی ia32 (مانند \fBstdcall\fR) را اضافه می‌کند. .Sp نسخهٔ 11، که نخستین‌بار در G++ 7 ظاهر شد، درهم‌سازی عبارت‌های ...sizeof و نام عملگرها را تصحیح می‌کند. برای چندین موجودیت با نام یکسان درون یک تابع که در حوزه‌های متفاوتی اعلان شده‌اند، درهم‌سازی اکنون از دوازدهمین رخداد به بعد تغییر می‌کند. همچنین این گزینه فعال بودن \fB\-fnew\-inheriting\-ctors\fR را نیز در پی دارد. .Sp نسخهٔ 12، که نخستین‌بار در G++ 8 ظاهر شد، قراردادهای فراخوانی را برای کلاس‌های خالی روی معماری هدف x86_64 و برای کلاس‌هایی که تنها دارای سازنده‌های رونوشت/انتقال حذف‌شده (deleted copy/move constructors) هستند تصحیح می‌کند. این نسخه به طور تصادفی قرارداد فراخوانی را برای کلاس‌های دارای سازندهٔ رونوشت حذف‌شده و سازندهٔ انتقال بدیهی (trivial move constructor) تغییر می‌دهد. .Sp نسخهٔ 13، که نخستین‌بار در G++ 8.2 ظاهر شد، تغییر تصادفی در نسخهٔ 12 را برطرف می‌کند. .Sp نسخهٔ 14، که نخستین‌بار در G++ 10 ظاهر شد، درهم‌سازی عبارت nullptr را تصحیح می‌کند. .Sp نسخهٔ 15، که نخستین‌بار در G++ 10.3 ظاهر شد، پس‌رفت (regression) برچسب ABI در G++ 10 را تصحیح می‌کند. .Sp نسخهٔ 16، که نخستین‌بار در G++ 11 ظاهر شد، درهم‌سازی \&\f(CW\*(C`_\|_alignof_\|_\*(C'\fR را تغییر می‌دهد تا از \f(CW\*(C`alignof\*(C'\fR و نام‌های عملگر وابسته (dependent operator names) متمایز شود. .Sp نسخهٔ 17، که نخستین‌بار در G++ 12 ظاهر شد، چیدمان (layout) کلاس‌هایی را که از کلاس‌های تجمیعی (aggregate classes) با مقداردهنده‌های پیش‌فرض عضو در C++14 به بالا ارث‌بری می‌کنند، اصلاح می‌کند. .Sp نسخهٔ 18، که نخستین‌بار در G++ 13 ظاهر شد، درهم‌سازی لانبداهایی را که زمینهٔ (context) اضافی دارند، اصلاح می‌کند. .Sp نسخهٔ 19، که نخستین‌بار در G++ 14 ظاهر شد، درهم‌سازی متصل‌کننده‌های ساختاریافته (structured bindings) جهت دربرگرفتن برچسب‌های ABI، مدیریت اعضای [[no_unique_address]] دارای توصیف‌کنندهٔ cv، و درهم‌سازی قیدهای C++20 روی الگوهای توابع را اصلاح و اضافه می‌کند. .Sp نسخهٔ 20، که نخستین‌بار در G++ 15 ظاهر شد، درهم‌سازی لانبداها در مقداردهنده‌های عضو داده‌ای ایستا (static data member initializers) را اصلاح می‌کند. .Sp نسخهٔ 21، که نخستین‌بار در G++ 16 ظاهر شد، شکار (capture) غیرضروری در لانبداهای noexcept ‏(c++/119764)، چیدمان یک کلاس پایه با تمام سازنده‌های صراحتاً پیش‌فرض‌شده (c++/120012)، و درهم‌سازی شیءهای کلاسی و آرایه‌ای با زیرشیءهای غیرانتهایی به‌طور ضمنی صفر-مقداردهی‌شده (c++/121231) را برطرف می‌کند. .Sp همچنین ببینید: \fB\-Wabi\fR. .IP \fB\-fabi\-compat\-version=\fR\fIn\fR 4 .IX Item "-fabi-compat-version=n" در معماری‌های هدفی که از نام‌های مستعار قوی (strong aliases) پشتیبانی می‌کنند، G++ تغییرات درهم‌سازی را با ایجاد یک نام مستعار با نام درهم‌سازی‌شدهٔ صحیح هنگام تعریف یک نماد با نام درهم‌سازی‌شدهٔ نادرست، دور می‌زند. این سوئیچ مشخص می‌کند که کدام نسخهٔ ABI برای نام مستعار استفاده شود. .Sp با \fB\-fabi\-version=0\fR (پیش‌فرض)، مقدار این گزینه به طور پیش‌فرض 13 (سازگاری با GCC 8.2) است. اگر نسخهٔ ABI دیگری صراحتاً انتخاب شود، این مقدار به طور پیش‌فرض 0 خواهد بود. برای سازگاری با نسخه‌های GCC از 3.2 تا 4.9، از \fB\-fabi\-compat\-version=2\fR استفاده کنید. .Sp اگر این گزینه مشخص نشود اما \fB\-Wabi=\fR\fIn\fR داده شده باشد، آن نسخه برای نام‌های مستعار سازگاری به کار می‌رود. اگر این گزینه به همراه \fB\-Wabi\fR (بدون نسخه) مشخص شود، نسخهٔ مشخص‌شده در این گزینه برای اخطار مورد استفاده قرار می‌گیرد. .IP \fB\-fno\-access\-control\fR 4 .IX Item "-fno-access-control" تمام بررسی‌های دسترسی را خاموش می‌کند. این سوئیچ عمدتاً برای دور زدن باگ‌ها در کد کنترل دسترسی مفید است. .IP \fB\-faligned\-new\fR 4 .IX Item "-faligned-new" .PD 0.IP \fB\-faligned\-new=\fR\fIalignment\fR 4 .IX Item "-faligned-new=alignment" .PD فعال‌سازی پشتیبانی از \f(CW\*(C`new\*(C'\fR در C++17 برای انواعی که به هم‌ترازی بیشتری نسبت به آنچه \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR فراهم می‌کند، نیاز دارند. یک آرگومان عددی مانند \f(CW\*(C`\-faligned\-new=32\*(C'\fR می‌تواند برای تعیین میزان هم‌ترازی (به بایت) که توسط آن تابع ارائه می‌شود به کار رود، اما کاربران کمی نیاز به بازنویسی مقدار پیش‌فرض \&\f(CWalignof(std::max_align_t)\fR خواهند داشت. .Sp این پرچم به‌طور پیش‌فرض برای \fB\-std=c++17\fR فعال است. .IP \fB\-fno\-assume\-sane\-operators\-new\fR 4 .IX Item "-fno-assume-sane-operators-new" استاندارد C++ اجازهٔ جایگزینی عملگرهای سراسری \f(CW\*(C`new\*(C'\fR، \f(CW\*(C`new[]\*(C'\fR، \&\f(CW\*(C`delete\*(C'\fR و \f(CW\*(C`delete[]\*(C'\fR را می‌دهد، هرچند بسیاری از برنامه‌های C++ آن‌ها را جایگزین نکرده و صرفاً از نسخهٔ ارائه‌شده توسط پیاده‌سازی استفاده می‌کنند. علاوه بر این، استاندارد C++ اجازه می‌دهد در صورتی که این فراخوانی‌ها از عبارت‌های new یا delete انجام شده باشند، نادیده گرفته و حذف شوند (و تعمیم آن، اگر توابع \f(CW\*(C`_\|_builtin_operator_new\*(C'\fR یا \f(CW\*(C`_\|_builtin_operator_delete\*(C'\fR استفاده شوند نیز همین فرض در نظر گرفته می‌شود). این گزینه امکان کنترل برخی از بهینه‌سازی‌ها را در پیرامون فراخوانی این عملگرها فراهم می‌کند. با گزینهٔ \f(CW\*(C`\-fassume\-sane\-operators\-new\-delete\*(C'\fR ممکن است GCC فرض کند که فراخوانی‌های عملگرهای سراسریِ قابل جایگزینی از عبارت‌های new یا delete یا از فراخوانی‌های \f(CW\*(C`_\|_builtin_operator_new\*(C'\fR یا \f(CW\*(C`_\|_builtin_operator_delete\*(C'\fR هیچ متغیر سراسری یا متغیرهایی را که آدرسشان ممکن است به عملگرها نشت کند (وضعیت سراسری؛ به جز \f(CW\*(C`errno\*(C'\fR برای عملگرهای \&\f(CW\*(C`new\*(C'\fR و \f(CW\*(C`new[]\*(C'\fR) نمی‌خوانند یا تغییر نمی‌دهند. این امر اجازهٔ بیشتر بهینه‌سازی‌ها را در طول این فراخوانی‌ها می‌دهد و چیزی است که عملگرهای ارائه‌شده توسط پیاده‌سازی آن را برآورده می‌کنند، مگر اینکه جزئیات پیاده‌سازی \f(CW\*(C`malloc\*(C'\fR در کد قابل مشاهده باشد یا از قلاب‌های (hooks) \f(CW\*(C`malloc\*(C'\fR استفاده شده باشد، اما اگر برنامه‌ای این عملگرها را جایگزین کند ممکن است برآورده نشود. این رفتار به‌طور پیش‌فرض فعال است. با گزینهٔ \f(CW\*(C`\-fno\-assume\-sane\-operators\-new\-delete\*(C'\fR کامپایلر GCC باید فرض کند همهٔ این فراخوانی‌ها (چه از عبارت‌های new یا delete و چه فراخوانی مستقیم) ممکن است وضعیت سراسری را بخوانند و بنویسند، مگر اینکه خلاف آن ثابت شود (مثلاً هنگامی که GCC پیاده‌سازی آن‌ها را کامپایل می‌کند). اگر آن عملگرها جایگزین شده‌اند یا ممکن است جایگزین شوند و کد باید چنین رفتاری را انتظار داشته باشد، از این گزینه استفاده کنید. .IP \fB\-fchar8_t\fR 4 .IX Item "-fchar8_t" .PD 0 .IP \fB\-fno\-char8_t\fR 4 .IX Item "-fno-char8_t" .PD فعال‌سازی پشتیبانی از \f(CW\*(C`char8_t\*(C'\fR مطابق با تصویب آن در C++20. این شامل افزودن نوع پایه‌ایِ جدید \f(CW\*(C`char8_t\*(C'\fR، تغییراتی در انواع لیترال‌های نویسه‌ای و رشته‌ای UTF\-8، امضاهای جدید برای لیترال‌های تعریف‌شده توسط کاربر (user\-defined literals)، به‌روزرسانی‌های کتابخانهٔ استانداردِ مرتبط و ماکروهای آزمون ویژگیِ جدید \&\f(CW\*(C`_\|_cpp_char8_t\*(C'\fR و \f(CW\*(C`_\|_cpp_lib_char8_t\*(C'\fR است. .Sp این گزینه امکان سربارگذاری توابع را برای رشته‌های معمولی و UTF\-8 فراهم می‌سازد: .Sp .Vb 4 \& int f(const char *); // #1 \& int f(const char8_t *); // #2 \& int v1 = f("text"); // Calls #1 \& int v2 = f(u8"text"); // Calls #2 .Ve .Sp و امضاهای جدیدی را برای لیترال‌های تعریف‌شده توسط کاربر معرفی می‌کند: .Sp .Vb 6 \& int operator""_udl1(char8_t); \& int v3 = u8\*(Aqx\*(Aq_udl1; \& int operator""_udl2(const char8_t*, std::size_t); \& int v4 = u8"text"_udl2; \& template int operator""_udl3(); \& int v5 = u8"text"_udl3; .Ve .Sp تغییر نوع لیترال‌های رشته‌ای و نویسه‌ای UTF\-8 ناسازگاری‌هایی را با استانداردهای ISO C++11 و پس از آن ایجاد می‌کند. به عنوان مثال، کد زیر در ISO C++11 خوش‌ساخت است، اما هنگام مشخص کردن \&\fB\-fchar8_t\fR بدساخت است. .Sp .Vb 11 \& const char *cp = u8"xx";// error: invalid conversion from \& // \`const char8_t*\*(Aq to \`const char*\*(Aq \& int f(const char*); \& auto v = f(u8"xx"); // error: invalid conversion from \& // \`const char8_t*\*(Aq to \`const char*\*(Aq \& std::string s{u8"xx"}; // error: no matching function for call to \& // \`std::basic_string::basic_string()\*(Aq \& using namespace std::literals; \& s = u8"xx"s; // error: conversion from \& // \`basic_string\*(Aq to non\-scalar \& // type \`basic_string\*(Aq requested .Ve .IP \fB\-fcheck\-new\fR 4 .IX Item "-fcheck-new" بررسی می‌کند که اشاره‌گر بازگردانده شده توسط \f(CW\*(C`operator new\*(C'\fR قبل از تلاش برای تغییر حافظهٔ تخصیص‌یافته، غیرتهی (non\-null) باشد. این بررسی معمولاً غیرضروری است زیرا استاندارد C++ مشخص می‌کند که \&\f(CW\*(C`operator new\*(C'\fR تنها در صورتی \f(CW0\fR را برمی‌گرداند که به‌صورت \&\f(CWthrow()\fR اعلان شده باشد، که در این حالت کامپایلر حتی بدون این گزینه نیز همیشه مقدار بازگشتی را بررسی می‌کند. در تمام موارد دیگر، هنگامی که \&\f(CW\*(C`operator new\*(C'\fR مشخصات استثنای غیرخالی دارد، اتمام حافظه با پرتاب \f(CW\*(C`std::bad_alloc\*(C'\fR اعلام می‌شود. همچنین نگاه کنید به \&\fBnew (nothrow)\fR. .IP \fB\-fconcepts\fR 4 .IX Item "-fconcepts" فعال‌سازی پشتیبانی از ویژگی C++ Concepts برای محدود کردن آرگومان‌های الگو. با \fB\-std=c++20\fR و بالاتر، مفاهیم (Concepts) بخشی از استاندارد زبان هستند، بنابراین \fB\-fconcepts\fR به‌طور پیش‌فرض فعال است. .Sp برخی سازه‌ها که در مشخصات فنی قبلی افزونه‌های مفاهیم برای C++،‏ ISO 19217 (2015)، مجاز بودند اما وارد استاندارد نشدند، قبلاً می‌توانستند با \&\fB\-fconcepts\-ts\fR فعال شوند. گزینهٔ \fB\-fconcepts\-ts\fR در GCC 14 منسوخ و در GCC 15 حذف شد؛ از کاربران انتظار می‌رود کدهای خود را به مفاهیم C++20 تبدیل کنند. .IP \fB\-fconcepts\-diagnostics\-depth=\fR\fIn\fR 4 .IX Item "-fconcepts-diagnostics-depth=n" تعیین بیشینهٔ عمق بازپخش خطا در طول عیب‌یابی بازگشتیِ برآورده نشدن یک قید. مقدار پیش‌فرض 1 است. .IP \fB\-fconstexpr\-depth=\fR\fIn\fR 4 .IX Item "-fconstexpr-depth=n" تنظیم بیشینهٔ عمق ارزیابی تو در تو برای توابع constexpr در C++11 روی \fIn\fR. یک حد مجاز برای تشخیص بازگشت بی‌پایان در حین ارزیابی عبارت ثابت لازم است. کمینهٔ مشخص‌شده توسط استاندارد 512 است. .IP \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR 4 .IX Item "-fconstexpr-cache-depth=n" تنظیم بیشینهٔ سطح عمق ارزیابی تو در تو برای توابع constexpr در C++11 که در حافظه‌پنهان نگهداری خواهند شد، روی \fIn\fR. این یک روش ابتکاری است که تعادلی بین سرعت کامپایل (هنگامی که حافظه‌پنهان از محاسبات تکراری جلوگیری می‌کند) در برابر مصرف حافظه (هنگامی که حافظه‌پنهان به دلیل ارزیابی‌های بسیار بازگشتی بسیار بزرگ می‌شود) برقرار می‌کند. مقدار پیش‌فرض 8 است. کاربران بسیار کمی مایل به تغییر آن هستند، اما اگر کد شما محاسبات سنگین constexpr انجام می‌دهد ممکن است بخواهید آزمایش کنید تا دریابید کدام مقدار برای شما بهتر عمل می‌کند. .IP \fB\-fconstexpr\-fp\-except\fR 4 .IX Item "-fconstexpr-fp-except" پیوست F از استاندارد C مشخص می‌کند که استثناهای ممیز شناور IEC559 که در زمان کامپایل رخ می‌دهند نباید کامپایل را متوقف کنند. کامپایلرهای C++ در طول تاریخ از این راهنما پیروی نکرده‌اند و در عوض تقسیم ممیز شناور بر صفر را غیرثابت تلقی کرده‌اند، هرچند که مقدار کاملاً تعریف‌شده‌ای دارد. این پرچم به کامپایلر اعلام می‌کند که به پیوست F نسبت به قوانین دیگری که می‌گویند یک عملیات خاص تعریف‌نشده است، اولویت دهد. .Sp .Vb 1 \& constexpr float inf = 1./0.; // OK with \-fconstexpr\-fp\-except .Ve .IP \fB\-fconstexpr\-loop\-limit=\fR\fIn\fR 4 .IX Item "-fconstexpr-loop-limit=n" تنظیم بیشینهٔ تعداد تکرارهای یک حلقه در توابع constexpr در C++14 روی \fIn\fR. یک حد مجاز برای تشخیص حلقه‌های بی‌پایان در حین ارزیابی عبارت ثابت لازم است. مقدار پیش‌فرض 262144 (1<<18) است. .IP \fB\-fconstexpr\-ops\-limit=\fR\fIn\fR 4 .IX Item "-fconstexpr-ops-limit=n" تنظیم بیشینهٔ تعداد عملیات در طول یک ارزیابیِ تکینِ constexpr. حتی زمانی که تعداد تکرارهای یک حلقه با محدودیت فوق محدود شده است، اگر چندین حلقهٔ تو در تو وجود داشته باشد و هر یک از آن‌ها تکرارهای زیادی کمتر از حد بالا داشته باشد، یا اگر در بدنهٔ حلقه‌ای یا حتی خارج از یک حلقه نیاز به ارزیابی عبارت‌های بسیار زیادی باشد، ارزیابی حاصل از constexpr ممکن است بیش از حد طول بکشد. مقدار پیش‌فرض 33554432 (1<<25) است. .IP \fB\-fcontracts\fR 4 .IX Item "-fcontracts" فعال‌سازی پشتیبانی از ویژگی C++ Contracts، همان‌طور که در پیش‌نویس کاری C++26 (N5003) مشخص شده است. .Sp در صورت نقض یک قرارداد اعمال‌شده یا مشاهده‌شده (به \fB\-fcontract\-evaluation\-semantic\fR در زیر مراجعه کنید)، یک گردانندهٔ نقض فراخوانی می‌شود؛ کتابخانهٔ استاندارد یک گردانندهٔ پیش‌فرض ارائه می‌دهد که اطلاعات مربوط به قراردادی را که شکست خورده است منتشر می‌کند. .Sp کاربران می‌توانند گردانندهٔ نقض پیش‌فرض را با تعریف زیر جایگزین کنند: .Sp .Vb 2 \& void \& handle_contract_violation (const std::contracts::contract_violation&); .Ve .IP \fB\-fcontract\-evaluation\-semantic=\fR\fIsemantic\fR 4 .IX Item "-fcontract-evaluation-semantic=semantic" تنظیم معنایی (semantic) که قراردادها با آن ارزیابی می‌شوند روی \fIsemantic\fR. .Sp مقادیر در دسترس برای حالت ارزیابی عبارتند از: .Sp \&\*(Aq\f(CW\*(C`ignored\*(C'\fR\*(Aq بررسی‌های قرارداد حذف خواهند شد، بدون اینکه هیچ بررسی‌ای در زمان کامپایل یا زمان اجرا اضافه شود. .Sp \&\*(Aq\f(CW\*(C`observed\*(C'\fR\*(Aq بررسی‌های قرارداد (در زمان اجرا) انجام می‌شوند و در صورت ناموفق بودن، گرداننده‌ای فراخوانی می‌شود که امکان انجام اقداماتی مانند ثبت وقایع یا انتشار هشدارهای زمان اجرا را فراهم می‌کند. هنگامی که گرداننده بازگردد، اجرای کد ادامه می‌یابد. در زمان کامپایل، بررسی‌ها برای ارزیابی‌های \f(CW\*(C`constexpr\*(C'\fR انجام می‌شوند، در این حالت در صورت ناموفق بودن بررسی، یک پیام تشخیصی صادر می‌شود. .Sp \&\*(Aq\f(CW\*(C`enforce\*(C'\fR\*(Aq بررسی‌های قرارداد انجام می‌شوند و در صورت ناموفق بودن، گرداننده فراخوانی می‌شود. هنگامی که گرداننده بازگردد، اجرای کد پایان می‌یابد و از ادامهٔ آن فراتر از مورد ناموفق جلوگیری می‌شود. در زمان کامپایل، بررسی‌ها روی \f(CW\*(C`constexpr\*(C'\fR اعمال می‌شوند و در صورت ناموفق بودن، برنامه بدساخت تلقی شده و یک خطا صادر می‌شود. .Sp \&\*(Aq\f(CW\*(C`quick_enforce\*(C'\fR\*(Aq بررسی‌های قرارداد (در زمان اجرا) انجام می‌شوند و در صورت ناموفق بودن، اجرا بلافاصله (بدون فراخوانی هیچ گرداننده‌ای) پایان می‌یابد. در زمان کامپایل تفاوتی در رفتار بین این گزینه و حالت \f(CW\*(C`enforce\*(C'\fR وجود ندارد، زیرا هیچ گرداننده‌ای در زمان کامپایل فراخوانی نمی‌شود..IP \fB\-fcontracts\-conservative\-ipa\fR 4 .IX Item "-fcontracts-conservative-ipa" این گزینه از اقدام تحلیل بین‌رویه‌ای (inter\-procedural analysis یا IPA) هنگامی که بدنهٔ یک تابع درون‌خطی (\f(CWinline\fR) در یک TU مشخص قابل مشاهده است، جلوگیری می‌کند. این امر شرایطی را پوشش می‌دهد که شرایط ارزیابی قرارداد مجاز به تفاوت بین TUهای مختلف باشند، که به این معنی است که چنین اقداماتی بالقوه نادرست خواهند بود. .IP \fB\-fcontract\-checks\-outlined\fR 4 .IX Item "-fcontract-checks-outlined" به‌طور پیش‌فرض، بررسی‌های قرارداد برای شرایط \f(CW\*(C`pre\*(C'\fR و \f(CW\*(C`post\*(C'\fR به‌صورت درون‌خطی (in\-line) در بدنهٔ توابع بسط می‌یابند. این گزینه باعث می‌شود در عوض یک تابع کوچک (شامل بررسی‌ها) ایجاد شود که در موقعیت مربوطه فراخوانی گردد. این امر اجازه می‌دهد معیارهای متفاوتی برای کامپایل بخش بررسی و بقیهٔ بدنهٔ تابع اعمال شود. .IP \fB\-fcontract\-disable\-optimized\-checks\fR 4 .IX Item "-fcontract-disable-optimized-checks" هنگامی که بررسی‌های شرایط \f(CW\*(C`pre\*(C'\fR و \f(CW\*(C`post\*(C'\fR برون‌خط (outlined) می‌شوند (با استفاده از \&\fB\-fcontract\-checks\-outlined\fR)، این گزینه مراحل بهینه‌سازی را برای آن توابع غیرفعال می‌کند که می‌تواند از حذف ناخواستهٔ مراحل بررسی جلوگیری نماید. .IP \fB\-fcontracts\-client\-check=\fR\fImode\fR 4 .IX Item "-fcontracts-client-check=mode" این گزینه درج بررسی‌ها را در محل‌های فراخوانی (بررسی در سمت فراخواننده یا caller\-side) فعال می‌کند. .Sp مقدار \fImode\fR مشخص می‌کند کدام بررسی‌های قرارداد انجام شوند: \&\*(Aq\f(CW\*(C`none\*(C'\fR\*(Aq بدون بررسی در سمت فراخواننده/کلاینت (پیش‌فرض) .Sp \&\*(Aq\f(CW\*(C`pre\*(C'\fR\*(Aq پیش‌شرط‌ها در سمت فراخواننده/کلاینت بررسی می‌شوند. .Sp \&\*(Aq\f(CW\*(C`all\*(C'\fR\*(Aq هر دو پیش‌شرط‌ها و پس‌شرط‌ها در سمت فراخواننده/کلاینت بررسی می‌شوند. .IP \fB\-fcontracts\-definition\-check=\fR\fImode\fR 4 .IX Item "-fcontracts-definition-check=mode" این گزینه امکان غیرفعال کردن بررسی‌های سمت فراخوانده/تعریف (callee/definition\-side) را فراهم می‌کند، که در غیر این صورت هنگام فعال بودن قابلیت قراردادها به‌طور پیش‌فرض فعال هستند. .Sp متغیر \fImode\fR مقادیر \*(Aq\f(CW\*(C`on\*(C'\fR\*(Aq و \*(Aq\f(CW\*(C`off\*(C'\fR\*(Aq را می‌پذیرد. .IP \fB\-fcoroutines\fR 4 .IX Item "-fcoroutines" پشتیبانی از افزونهٔ کوروتین‌های C++ را فعال می‌کند. با \fB\-std=c++20\fR و بالاتر، کوروتین‌ها بخشی از استاندارد زبان هستند، بنابراین \&\fB\-fcoroutines\fR به‌طور پیش‌فرض فعال است. .IP \fB\-fdiagnostics\-all\-candidates\fR 4 .IX Item "-fdiagnostics-all-candidates" به بخش پیشانی (front end) C++ اجازه می‌دهد هنگام شکست در رفع ابهام بارگذاری بیش‌ازحد (overload resolution)، تمام کاندیداها را ذکر کند، از جمله هنگامی که یک تابع حذف‌شده (deleted function) انتخاب می‌شود. .IP \fB\-fdump\-lang\-\fR 4 .IX Item "-fdump-lang-" .PD 0 .IP \fB\-fdump\-lang\-\fR\fIswitch\fR 4 .IX Item "-fdump-lang-switch" .IP \fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4 .IX Item "-fdump-lang-switch-options" .IP \fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4 .IX Item "-fdump-lang-switch-options=filename" .PD تخلیهٔ (dump) اطلاعات مختص C++ را کنترل می‌کند. بخش‌های \fIoptions\fR و \fIfilename\fR همان‌طور که در گزینهٔ \&\fB\-fdump\-tree\fR شرح داده شده رفتار می‌کنند. مقادیر \fIswitch\fR زیر پذیرفته می‌شوند: .RS 4 .IP \fBall\fR 4 .IX Item "all" تمام موارد زیر را فعال می‌کند. .IP \fBclass\fR 4 .IX Item "class" اطلاعات سلسله‌مراتب کلاس را تخلیه می‌کند. اطلاعات جدول مجازی (virtual table) صادر می‌شود مگر آن‌که \*(Aq\fBslim\fR\*(Aq مشخص شده باشد. .IP \fBmodule\fR 4 .IX Item "module" اطلاعات ماژول را تخلیه می‌کند. گزینه‌های \fBlineno\fR (مکان‌ها)، \&\fBgraph\fR (دسترس‌پذیری)، \fBblocks\fR (خوشه‌ها)، \&\fBuid\fR (سریال‌سازی)، \fBalias\fR (قابل ادغام)، \&\fBasmname\fR (Elrond)، \fBeh\fR (نگاشت‌کننده) و \fBvops\fR (ماکروها) ممکن است اطلاعات بیشتری ارائه دهند. .IP \fBraw\fR 4 .IX Item "raw" داده‌های خام درخت درونی را تخلیه می‌کند. .IP \fBtinst\fR 4 .IX Item "tinst" توالی نمونه‌سازی‌های قالب (template instantiations) را تخلیه می‌کند که برای نمایش عمق بازگشت تورفتگی دارند. گزینهٔ \fBlineno\fR مکان در کد منبع را که نمونه‌سازی در آن آغاز شده اضافه می‌کند، و گزینهٔ \&\fBdetails\fR همچنین جایگزینی‌های پیش‌از‌نمونه‌سازی را، مانند مواردی که هنگام استنتاج آرگومان قالب انجام شده، تخلیه می‌کند. .Sp خطوط در تخلیهٔ .tinst با \fBI\fR برای یک نمونه‌سازی، \&\fBS\fR برای یک جایگزینی دیگر، و \fBR[IS]\fR برای زمینهٔ بازگشایی‌شدهٔ یک نمونه‌سازی به‌تعویق‌افتاده آغاز می‌شوند. .RE .RS 4 .RE .IP \fB\-fno\-elide\-constructors\fR 4 .IX Item "-fno-elide-constructors" استاندارد C++ به یک پیاده‌سازی اجازه می‌دهد از ایجاد شیء موقتی که تنها برای مقداردهی اولیهٔ شیء دیگری از همان نوع استفاده می‌شود صرف‌نظر کند. مشخص کردن این گزینه آن بهینه‌سازی را غیرفعال کرده و G++ را مجبور می‌کند در تمام موارد سازندهٔ رونوشت (copy constructor) را فراخوانی کند. این گزینه همچنین باعث می‌شود G++ توابع عضو بدیهی (trivial member functions) را فراخوانی کند که در غیر این صورت به‌صورت درون‌خطی بسط می‌یافتند. .Sp در C++17، کامپایلر ملزم به حذف این اشیای موقت است، اما این گزینه همچنان بر توابع عضو بدیهی تأثیر می‌گذارد. .IP \fB\-fno\-enforce\-eh\-specs\fR 4 .IX Item "-fno-enforce-eh-specs" کدی برای بررسی نقض مشخصات استثنا (exception specifications) در زمان اجرا تولید نمی‌کند. این گزینه استاندارد C++ را نقض می‌کند، اما ممکن است برای کاهش اندازهٔ کد در ساخت‌های نهایی مفید باشد، بسیار شبیه به تعریف \&\f(CW\*(C`NDEBUG\*(C'\fR. این امر به کد کاربر اجازهٔ پرتاب استثناها در نقض مشخصات استثنا را نمی‌دهد؛ کامپایلر همچنان بر اساس مشخصات استثنا بهینه‌سازی انجام می‌دهد، بنابراین پرتاب یک استثنای غیرمنتظره منجر به رفتار تعریف‌نشده (undefined behavior) در زمان اجرا خواهد شد. .IP \fB\-fextern\-tls\-init\fR 4 .IX Item "-fextern-tls-init" .PD 0 .IP \fB\-fno\-extern\-tls\-init\fR 4 .IX Item "-fno-extern-tls-init" .PD استانداردهای C++11 و OpenMP به متغیرهای \f(CW\*(C`thread_local\*(C'\fR و \&\f(CW\*(C`threadprivate\*(C'\fR اجازه می‌دهند دارای مقداردهی اولیهٔ پویا (زمان اجرا) باشند. برای پشتیبانی از این امر، هرگونه استفاده از چنین متغیری از طریق یک تابع لفاف (wrapper) انجام می‌شود که هرگونه مقداردهی اولیهٔ لازم را انجام می‌دهد. هنگامی که استفاده و تعریف متغیر در یک واحد ترجمه (TU) یکسان باشد، این سربار می‌تواند با بهینه‌سازی حذف شود، اما هنگامی که استفاده در یک واحد ترجمهٔ متفاوت باشد، سربار قابل توجهی وجود دارد حتی اگر متغیر در واقع نیازی به مقداردهی اولیهٔ پویا نداشته باشد. اگر برنامه‌نویس مطمئن باشد که هیچ استفاده‌ای از متغیر در یک TU غیرتعریف‌کننده نیازی به راه‌اندازی مقداردهی اولیهٔ پویا ندارد (خواه به این دلیل که متغیر به‌صورت ایستا مقداردهی اولیه شده است، یا استفاده از متغیر در TU تعریف‌کننده پیش از هرگونه استفاده در TU دیگر اجرا خواهد شد)، می‌تواند با گزینهٔ \&\fB\-fno\-extern\-tls\-init\fR از این سربار جلوگیری کند. .Sp در اهدافی که از نام‌های مستعار نماد (symbol aliases) پشتیبانی می‌کنند، مقدار پیش‌فرض \&\fB\-fextern\-tls\-init\fR است. در اهدافی که از نام‌های مستعار نماد پشتیبانی نمی‌کنند، مقدار پیش‌فرض \fB\-fno\-extern\-tls\-init\fR است. .IP \fB\-ffold\-simple\-inlines\fR 4 .IX Item "-ffold-simple-inlines" .PD 0 .IP \fB\-fno\-fold\-simple\-inlines\fR 4 .IX Item "-fno-fold-simple-inlines" .PD به بخش پیشانی C++ اجازه می‌دهد فراخوانی‌های \f(CW\*(C`std::move\*(C'\fR، \f(CW\*(C`std::forward\*(C'\fR، \&\f(CW\*(C`std::addressof\*(C'\fR، \f(CW\*(C`std::to_underlying\*(C'\fR و \f(CW\*(C`std::as_const\*(C'\fR را تا کند (fold). در مقایسه با درون‌خط‌سازی، این بدان معناست که هیچ اطلاعات اشکال‌زدایی برای چنین فراخوانی‌هایی تولید نخواهد شد. از آنجا که این توابع به‌ندرت برای اشکال‌زدایی جالب توجه هستند، این پرچم به‌طور پیش‌فرض فعال است مگر آن‌که \fB\-fno\-inline\fR فعال باشد. .IP \fB\-fno\-gnu\-keywords\fR 4 .IX Item "-fno-gnu-keywords" \&\f(CW\*(C`typeof\*(C'\fR را به‌عنوان کلیدواژه شناسایی نمی‌کند، تا کد بتواند از این کلمه به‌عنوان یک شناسه استفاده کند. می‌توانید به‌جای آن از کلیدواژهٔ \f(CW\*(C`_\|_typeof_\|_\*(C'\fR استفاده کنید. این گزینه توسط لهجه‌های اکید ISO C++ اعمال می‌شود: \fB\-ansi\fR، \&\fB\-std=c++98\fR، \fB\-std=c++11\fR و غیره. .IP \fB\-fno\-immediate\-escalation\fR 4 .IX Item "-fno-immediate-escalation" ارتقای تابع فوری (immediate function escalation) را که به موجب آن توابع خاصی می‌توانند مطابق آنچه در P2564R3 مشخص شده به consteval ارتقا یابند، فعال نمی‌کند. برای مثال: .Sp .Vb 1 \& consteval int id(int i) { return i; } \& \& constexpr int f(auto t) \& { \& return t + id(t); // id causes f to be promoted to consteval \& } \& \& void g(int i) \& { \& f (3); \& } .Ve .Sp در C++20 کامپایل می‌شود: تابع \f(CW\*(C`f\*(C'\fR یک تابع ارتقایابندهٔ فوری است (به‌دلیل وجود \f(CW\*(C`auto\*(C'\fR، یک قالب تابع است و به‌صورت \f(CW\*(C`constexpr\*(C'\fR اعلان شده است) و \f(CWid(t)\fR یک عبارت ارتقایابندهٔ فوری است، بنابراین \f(CW\*(C`f\*(C'\fR به \&\f(CW\*(C`consteval\*(C'\fR ارتقا می‌یابد. در نتیجه، فراخوانی \f(CWid(t)\fR در یک زمینهٔ فوری (immediate context) قرار دارد، بنابراین مجبور نیست یک مقدار ثابت تولید کند (این همان سازوکاری است که امکان ترکیب توابع consteval را فراهم می‌کند). با این حال، با \fB\-fno\-immediate\-escalation\fR، تابع \f(CW\*(C`f\*(C'\fR به \&\f(CW\*(C`consteval\*(C'\fR ارتقا نمی‌یابد، و از آنجا که فراخوانی تابع consteval یعنی \f(CWid(t)\fR یک عبارت ثابت نیست، کامپایلر کد را رد می‌کند. .Sp این گزینه به‌طور پیش‌فرض روشن است؛ تنها در حالت C++20 یا بالاتر مؤثر واقع می‌شود..IP \fB\-fimplicit\-constexpr\fR 4 .IX Item "-fimplicit-constexpr" توابع inline را در صورتی که شرایط یک تابع constexpr را برآورده کنند، به‌طور ضمنی constexpr در نظر می‌گیرد. این گزینه می‌تواند در حالت C++14 یا بالاتر استفاده شود. این امر می‌تواند منجر به تغییر مقداردهی اولیه از پویا به ایستا و بهینه‌سازی‌های دیگر شود. .IP \fB\-fno\-implicit\-templates\fR 4 .IX Item "-fno-implicit-templates" هرگز برای الگوهای غیر\-inline که به‌طور ضمنی (یعنی از طریق استفاده) نمونه‌سازی شده‌اند، کد تولید نمی‌کند؛ تنها برای نمونه‌سازی‌های صریح کد تولید می‌کند. اگر از این گزینه استفاده می‌کنید، باید ساختار کد خود را طوری تنظیم کنید که شامل تمام نمونه‌سازی‌های صریح لازم باشد تا در زمان پیوند با نمادهای تعریف‌نشده مواجه نشوید. .IP \fB\-fno\-implicit\-inline\-templates\fR 4 .IX Item "-fno-implicit-inline-templates" برای نمونه‌سازی‌های ضمنی الگوهای inline نیز کدی تولید نمی‌کند. پیش‌فرض این است که با توابع inline متفاوت رفتار شود تا کامپایل با بهینه‌سازی و بدون آن، به مجموعه یکسانی از نمونه‌سازی‌های صریح نیاز داشته باشد. .IP \fB\-fno\-implement\-inlines\fR 4 .IX Item "-fno-implement-inlines" برای صرفه‌جویی در فضا، نسخه‌های برون‌خط (out\-of\-line) توابع inline تحت کنترل \f(CW\*(C`#pragma implementation\*(C'\fR را تولید نمی‌کند. این امر در صورتی که این توابع در تمام جاهایی که فراخوانی می‌شوند inline نشوند، باعث خطاهای پیونددهنده می‌شود. .IP \fB\-fmodules\fR 4 .IX Item "-fmodules" .PD 0 .IP \fB\-fno\-modules\fR 4 .IX Item "-fno-modules" .PD پشتیبانی از ماژول‌های C++20 را فعال می‌کند. معمولاً نیازی به \&\fB\-fno\-modules\fR نیست، چرا که این مقدار پیش‌فرض است. با وجود اینکه این یک قابلیت C++20 است، در حال حاضر با انتخاب آن نسخه استاندارد، به‌طور ضمنی فعال نمی‌شود. .IP \fB\-fmodule\-header\fR 4 .IX Item "-fmodule-header" .PD 0 .IP \fB\-fmodule\-header=user\fR 4 .IX Item "-fmodule-header=user" .IP \fB\-fmodule\-header=system\fR 4 .IX Item "-fmodule-header=system" .PD کامپایل کردن یک فایل سرآیند برای ایجاد یک واحد سرآیند (header unit) قابل وارد کردن. .IP \fB\-fmodule\-implicit\-inline\fR 4 .IX Item "-fmodule-implicit-inline" توابع عضوی که در تعاریف کلاس خود تعریف شده‌اند، در کدهای ماژولار به‌طور ضمنی inline نیستند. این امر بنا به دلایل موجهی با رفتار سنتی C++ متفاوت است. با این حال، ممکن است در هنگام پورت کردن کد باعث دشواری شود. این گزینه چنین تعاریف تابعی را به‌طور ضمنی inline می‌کند. البته این کار ناسازگاری ABI ایجاد می‌کند، بنابراین باید در همه‌جا یا هیچ‌جا استفاده شود. (چنین تعاریفی در خارج از یک ماژول نام‌گذاری‌شده در هر حال به‌طور ضمنی inline باقی می‌مانند.) .IP \fB\-fno\-module\-lazy\fR 4 .IX Item "-fno-module-lazy" غیرفعال کردن واردسازی تنبل (lazy importing) ماژول و ایجاد نگاشت‌کننده ماژول (module mapper). .IP \fB\-fmodule\-mapper=\fR[\fIhostname\fR]\fB:\fR\fIport\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=[hostname]:port[?ident]" .PD 0 .IP "\fB\-fmodule\-mapper=|\fR\fIprogram\fR[\fB?\fR\fIident\fR]\fB \fR\fIargs...\fR" 4 .IX Item "-fmodule-mapper=|program[?ident] args..." .IP \fB\-fmodule\-mapper==\fR\fIsocket\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper==socket[?ident]" .IP \fB\-fmodule\-mapper=<>\fR[\fIinout\fR][\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=<>[inout][?ident]" .IP \fB\-fmodule\-mapper=<\fR\fIin\fR\fB>\fR\fIout\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=out[?ident]" .IP \fB\-fmodule\-mapper=\fR\fIfile\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=file[?ident]" .PD یک مرجع (oracle) برای پرس‌وجوی نگاشت‌های نام ماژول به نام فایل. در صورت مشخص نشدن، متغیر محیطی \fBCXX_MODULE_MAPPER\fR استفاده می‌شود، و اگر آن هم تنظیم نشده باشد، یک پیش‌فرض درون‌پردازشی ارائه می‌گردد. .IP \fB\-fmodule\-only\fR 4 .IX Item "-fmodule-only" فقط رابط ماژول کامپایل‌شده (Compiled Module Interface) را تولید می‌کند و از ایجاد هرگونه فایل شیء جلوگیری می‌نماید. .IP \fB\-fms\-extensions\fR 4 .IX Item "-fms-extensions" هشدارهای Wpedantic درباره ساختارهای استفاده‌شده در MFC، مانند int ضمنی و گرفتن اشاره‌گر به تابع عضو از طریق نحو غیر استاندارد را غیرفعال می‌کند. .IP \fB\-fnew\-inheriting\-ctors\fR 4 .IX Item "-fnew-inheriting-ctors" اصلاحیه P0136 بر معناشناسی وراثت سازنده C++11 را فعال می‌کند. این بخشی از C++17 است اما همچنین یک گزارش نقص (Defect Report) در برابر C++11 و C++14 به شمار می‌رود. این پرچم به‌طور پیش‌فرض فعال است مگر اینکه \fB\-fabi\-version=10\fR یا پایین‌تر مشخص شده باشد. .IP \fB\-fnew\-ttp\-matching\fR 4 .IX Item "-fnew-ttp-matching" راهکار P0522 برای مسئله Core issue 150 (پارامترهای قالبِ قالب و آرگومان‌های پیش‌فرض) را فعال می‌کند: این به قالبی با آرگومان‌های قالب پیش‌فرض اجازه می‌دهد تا به عنوان آرگومانی برای پارامتر قالبِ قالبی با پارامترهای قالب کمتر استفاده شود. این پرچم به‌طور پیش‌فرض برای \&\fB\-std=c++17\fR فعال است. .IP \fB\-fno\-nonansi\-builtins\fR 4 .IX Item "-fno-nonansi-builtins" اعلان‌های توکار توابعی که توسط ANSI/ISO C الزامی نشده‌اند را غیرفعال می‌کند. این توابع شامل \f(CW\*(C`ffs\*(C'\fR، \f(CW\*(C`alloca\*(C'\fR، \f(CW\*(C`_exit\*(C'\fR، \&\f(CW\*(C`index\*(C'\fR، \f(CW\*(C`bzero\*(C'\fR، \f(CW\*(C`conjf\*(C'\fR و سایر توابع مرتبط هستند. .IP \fB\-fnothrow\-opt\fR 4 .IX Item "-fnothrow-opt" مشخصه استثنای \f(CWthrow()\fR را به‌گونه‌ای در نظر می‌گیرد که گویی یک مشخصه \&\f(CW\*(C`noexcept\*(C'\fR است تا بار اضافی اندازه بخش کد را نسبت به تابعی بدون مشخصه استثنا کاهش داده یا حذف کند. اگر تابع دارای متغیرهای محلی از نوع‌هایی با تخریب‌کننده‌های غیربدیهی باشد، مشخصه استثنا در واقع تابع را کوچک‌تر می‌کند زیرا پاک‌سازی‌های EH برای آن متغیرها می‌توانند بهینه‌سازی و حذف شوند. اثر معنایی این است که پرتاب استثنا از تابعی با چنین مشخصه استثنایی منجر به فراخوانی \f(CW\*(C`terminate\*(C'\fR به جای \f(CW\*(C`unexpected\*(C'\fR می‌شود. .IP \fB\-fno\-operator\-names\fR 4 .IX Item "-fno-operator-names" با کلمات کلیدی نام عملگر شامل \f(CW\*(C`and\*(C'\fR، \f(CW\*(C`bitand\*(C'\fR، \&\f(CW\*(C`bitor\*(C'\fR، \f(CW\*(C`compl\*(C'\fR، \f(CW\*(C`not\*(C'\fR، \f(CW\*(C`or\*(C'\fR و \f(CW\*(C`xor\*(C'\fR به عنوان کلمات کلیدی هم‌معنی رفتار نمی‌کند. .IP \fB\-fno\-optional\-diags\fR 4 .IX Item "-fno-optional-diags" پیام‌های تشخیصی و هشدارهایی را که استاندارد می‌گوید نیازی به صدور آن‌ها توسط کامپایلر نیست، غیرفعال می‌کند. در حال حاضر تنها چنین هشداری که توسط G++ صادر می‌شود مربوط به نامی است که معانی متعددی در یک کلاس دارد. .IP \fB\-fno\-pretty\-templates\fR 4 .IX Item "-fno-pretty-templates" هنگامی که یک پیام خطا به تخصیص یک الگوی تابع اشاره دارد، کامپایلر معمولاً امضای الگو را به همراه آرگومان‌های الگو و هرگونه typedef یا typename موجود در امضا چاپ می‌کند (برای مثال \f(CW\*(C`void f(T) [with T = int]\*(C'\fR به جای \f(CW\*(C`void f(int)\*(C'\fR) تا مشخص باشد کدام الگو درگیر است. هنگامی که یک پیام خطا به تخصیص یک الگوی کلاس اشاره دارد، کامپایلر هرگونه آرگومان الگویی را که با آرگومان‌های الگوی پیش‌فرض آن الگو مطابقت دارند، حذف می‌کند. اگر هر یک از این رفتارها به جای آسان‌تر کردن درک پیام خطا، آن را دشوارتر کند، می‌توانید از \fB\-fno\-pretty\-templates\fR برای غیرفعال کردن آن‌ها استفاده کنید. .IP \fB\-frange\-for\-ext\-temps\fR 4 .IX Item "-frange-for-ext-temps" تمدید طول عمر اشیاء موقت در حلقه‌های مبتنی بر بازه (range-based for) در C++ را فعال می‌کند. با \fB\-std=c++23\fR و بالاتر این بخشی از استاندارد زبان است، بنابراین طول عمر اشیاء موقت به‌طور پیش‌فرض تا انتهای حلقه تمدید می‌شود. این گزینه امکان فعال‌سازی این رفتار را در نسخه‌های قدیمی‌تر استاندارد نیز فراهم می‌کند. .IP \fB\-freflection\fR 4 .IX Item "-freflection" قابلیت بازتابی (Reflection) آزمایشی C++26 را فعال می‌کند. .IP \fB\-fno\-rtti\fR 4 .IX Item "-fno-rtti" تولید اطلاعات مربوط به هر کلاس دارای توابع مجازی را برای استفاده توسط قابلیت‌های شناسایی نوع زمان اجرا (RTTI) در C++ (\f(CW\*(C`dynamic_cast\*(C'\fR و \f(CW\*(C`typeid\*(C'\fR) غیرفعال می‌کند. اگر از این بخش‌های زبان استفاده نمی‌کنید، می‌توانید با استفاده از این پرچم مقداری در فضا صرفه‌جویی کنید. توجه داشته باشید که مدیریت استثنا نیز از همین اطلاعات استفاده می‌کند، اما G++ آن را در صورت نیاز تولید می‌نماید. عملگر \f(CW\*(C`dynamic_cast\*(C'\fR همچنان می‌تواند برای تبدیل‌هایی که نیازی به اطلاعات نوع در زمان اجرا ندارند، یعنی تبدیل به \f(CW\*(C`void *\*(C'\fR یا به کلاس‌های پایه غیرمبهم، استفاده شود. .Sp ترکیب کدهای کامپایل‌شده با \fB\-frtti\fR با کدهای کامپایل‌شده با \&\fB\-fno\-rtti\fR ممکن است کار نکند. برای مثال، اگر کلاسی که با \fB\-fno\-rtti\fR کامپایل شده است به عنوان پایه برای کلاسی که با \fB\-frtti\fR کامپایل شده استفاده شود، ممکن است پیوند برنامه‌ها با شکست مواجه شود. .IP \fB\-fsized\-deallocation\fR 4 .IX Item "-fsized-deallocation" اعلان‌های عمومی توکارِ .Sp .Vb 2 \& void operator delete (void *, std::size_t) noexcept; \& void operator delete[] (void *, std::size_t) noexcept; .Ve .Sp معرفی‌شده در C++14 را فعال می‌کند. این گزینه برای توابع آزادسازی حافظه جایگزین تعریف‌شده توسط کاربر که مثلاً از اندازه شیء برای تسریع آزادسازی استفاده می‌کنند، مفید است. این گزینه به‌طور پیش‌فرض در \&\fB\-std=c++14\fR و بالاتر فعال است. پرچم \fB\-Wsized\-deallocation\fR درباره مکان‌هایی که ممکن است بخواهند تعریفی اضافه کنند هشدار می‌دهد. .IP \fB\-fstrict\-enums\fR 4 .IX Item "-fstrict-enums" به کامپایلر اجازه می‌دهد تا با استفاده از این فرض بهینه‌سازی کند که مقدار یک نوع شمارشی (enumerated type) تنها می‌تواند یکی از مقادیر شمارش (طبق تعریف در استاندارد C++؛ اساساً مقداری که می‌تواند با حداقل تعداد بیت‌های لازم برای نمایش تمام شمارنده‌ها نمایش داده شود) باشد. در صورتی که برنامه از یک تبدیل صریح برای تبدیل یک مقدار عدد صحیح دلخواه به نوع شمارشی استفاده کند، این فرض ممکن است نامعتبر باشد. این گزینه برای نوع‌های شمارشی با نوع زیرین (underlying type) ثابت هیچ تأثیری ندارد. .IP \fB\-fstrong\-eval\-order\fR 4 .IX Item "-fstrong-eval-order".PD 0 .IP \fB\-fstrong\-eval\-order=\fR\fIkind\fR 4 .IX Item "-fstrong-eval-order=kind" .PD دسترسی به اعضا، اندیس‌گذاری آرایه‌ها و عبارت‌های شیفت را به ترتیب چپ\-به\-راست و انتساب را به ترتیب راست\-به\-چپ، همان‌طور که در C++17 به تصویب رسید، ارزیابی می‌کند. گزینهٔ \fB\-fstrong\-eval\-order\fR معادل \fB\-fstrong\-eval\-order=all\fR است و به‌طور پیش‌فرض در \fB\-std=c++17\fR یا بالاتر فعال است. .Sp گزینهٔ \fB\-fstrong\-eval\-order=some\fR صرفاً ترتیب دسترسی به اعضا و عبارت‌های شیفت را فعال می‌کند، و برای گویش‌های C++ پیش از C++17 پیش‌فرض است. .Sp گزینهٔ \fB\-fstrong\-eval\-order=none\fR معادل \fB\-fno\-strong\-eval\-order\fR است. .IP \fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR 4 .IX Item "-ftemplate-backtrace-limit=n" حداکثر تعداد یادداشت‌های نمونه‌سازی الگو را برای یک اخطار یا خطای منفرد روی \fIn\fR تنظیم می‌کند. مقدار پیش‌فرض ۱۰ است. .IP \fB\-ftemplate\-depth=\fR\fIn\fR 4 .IX Item "-ftemplate-depth=n" حداکثر عمق نمونه‌سازی را برای کلاس‌های الگو روی \fIn\fR تنظیم می‌کند. تعیین محدودیت برای عمق نمونه‌سازی الگو جهت تشخیص بازگشت‌های بی‌پایان هنگام نمونه‌سازی کلاس‌های الگو ضروری است. برنامه‌های منطبق با استاندارد ANSI/ISO C++ نباید به عمق حداکثری بیش از ۱۷ (در C++11 به ۱۰۲۴ تغییر کرد) اتکا کنند. مقدار پیش‌فرض ۹۰۰ است، زیرا در برخی شرایط کامپایلر ممکن است پیش از رسیدن به ۱۰۲۴ با کمبود فضای پشته (stack) مواجه شود. .IP \fB\-fno\-threadsafe\-statics\fR 4 .IX Item "-fno-threadsafe-statics" کد اضافی را برای استفاده از روال‌های مشخص‌شده در C++ ABI جهت مقداردهی اولیه‌ی نخ‌امن (thread-safe) متغیرهای ایستای محلی تولید نمی‌کند. می‌توانید از این گزینه برای کاهش جزئی اندازهٔ کد در برنامه‌هایی که نیازی به نخ‌امن بودن ندارند استفاده کنید. .IP \fB\-fuse\-cxa\-atexit\fR 4 .IX Item "-fuse-cxa-atexit" مخرب‌ها (destructors) را برای اشیائی با طول عمر ذخیره‌سازی ایستا به‌جای تابع \f(CW\*(C`atexit\*(C'\fR با تابع \f(CW\*(C`_\|_cxa_atexit\*(C'\fR ثبت می‌کند. این گزینه برای مدیریت کاملاً منطبق با استانداردِ مخرب‌های ایستا مورد نیاز است، اما تنها در صورتی کار می‌کند که کتابخانهٔ C شما از \f(CW\*(C`_\|_cxa_atexit\*(C'\fR پشتیبانی کند. .IP \fB\-fno\-use\-cxa\-get\-exception\-ptr\fR 4 .IX Item "-fno-use-cxa-get-exception-ptr" از روال زمان اجرای \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR استفاده نمی‌کند. این امر باعث می‌شود \f(CW\*(C`std::uncaught_exception\*(C'\fR نادرست عمل کند، اما اگر این روال زمان اجرا در دسترس نباشد، ضروری است. .IP \fB\-fvisibility\-inlines\-hidden\fR 4 .IX Item "-fvisibility-inlines-hidden" این سوئیچ اعلام می‌کند که کاربر تلاشی برای مقایسهٔ اشاره‌گرها به توابع یا متدهای درون‌خطی (inline) در مواردی که آدرس‌های دو تابع در اشیاء اشتراکی متفاوتی گرفته شده‌اند، انجام نمی‌دهد. .Sp اثر این گزینه این است که GCC می‌تواند عملاً متدهای درون‌خطی را با \f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR نشانه‌گذاری کند تا در جدول صادرات (export table) یک DSO ظاهر نشوند و هنگام استفاده در داخل همان DSO نیازی به ارجاع غیرمستقیم PLT نداشته باشند. فعال‌سازی این گزینه می‌تواند تأثیر چشمگیری بر زمان بارگذاری و پیوند یک DSO بگذارد، زیرا هنگامی که کتابخانه استفادهٔ گسترده‌ای از الگوها می‌کند، اندازهٔ جدول صادرات پویا را به‌شدت کاهش می‌دهد. .Sp رفتار این سوئیچ کاملاً با نشانه‌گذاری مستقیم متدها به‌عنوان پنهان (hidden) یکسان نیست، چرا که بر متغیرهای ایستای محلی تابع اثر نمی‌گذارد و باعث نمی‌شود کامپایلر استنتاج کند که تابع تنها در یک شئ اشتراکی تعریف شده است. .Sp می‌توانید برای لغو اثر این سوئیچ روی یک متد، آن را به‌طور صریح با یک وضعیت دیداری نشانه‌گذاری کنید. برای نمونه، اگر می‌خواهید اشاره‌گرها به یک متد درون‌خطی خاص را مقایسه کنید، می‌توانید آن را با دیداری پیش‌فرض نشانه‌گذاری نمایید. نشانه‌گذاری کلاس دربرگیرنده با دیداری صریح اثری ندارد. .Sp متدهای درون‌خطی که به‌طور صریح نمونه‌سازی شده‌اند (explicitly instantiated) تحت تأثیر این گزینه قرار نمی‌گیرند، چرا که پیوند آن‌ها در غیر این صورت ممکن است از مرز کتابخانهٔ اشتراکی عبور کند. .IP \fB\-fvisibility\-ms\-compat\fR 4 .IX Item "-fvisibility-ms-compat" این پرچم تلاش می‌کند با استفاده از تنظیمات دیداری، مدل پیوند C++ در GCC را با Microsoft Visual Studio سازگار کند. .Sp این پرچم تغییرات زیر را در مدل پیوند GCC اعمال می‌کند: .RS 4 .IP 1. 4 .IX Item "1." دیداری پیش‌فرض را مانند \fB\-fvisibility=hidden\fR روی \f(CW\*(C`hidden\*(C'\fR تنظیم می‌کند. .IP 2. 4 .IX Item "2." انواع، اما نه اعضای آن‌ها، به‌طور پیش‌فرض پنهان نیستند. .IP 3. 4 .IX Item "3." قاعدهٔ تعریف واحد (One Definition Rule یا ODR) برای انواعی بدون مشخصات دیداری صریح که در بیش از یک شئ اشتراکی تعریف شده‌اند، آسان‌تر می‌شود: این اعلان‌ها در صورتی مجاز هستند که هنگام عدم استفاده از این گزینه نیز مجاز باشند. .RE .RS 4 .Sp در کدهای جدید بهتر است از \fB\-fvisibility=hidden\fR استفاده شود و کلاس‌هایی که قرار است از بیرون نمایان باشند صادر (export) شوند. متأسفانه این احتمال وجود دارد که کدها، شاید تصادفاً، به رفتار Visual Studio وابسته باشند. .Sp از پیامدهای این تغییرات این است که اعضای داده‌ای ایستای یکسان از نظر نوع و نام که در اشیاء اشتراکی متفاوتی تعریف شده‌اند مجزا خواهند بود، بنابراین تغییر یکی دیگری را تغییر نمی‌دهد؛ و این‌که اشاره‌گرها به توابع عضو تعریف‌شده در اشیاء اشتراکی مختلف ممکن است برابر مقایسه نشوند. هنگامی که این پرچم اعمال شود، تعریف متفاوت انواعِ دارای نام یکسان نقض ODR محسوب می‌شود. .RE .IP \fB\-fno\-weak\fR 4 .IX Item "-fno-weak" از پشتیبانی نماد ضعیف (weak symbol) استفاده نمی‌کند، حتی اگر توسط پیونددهنده ارائه شده باشد. به‌طور پیش‌فرض، G++ در صورت در دسترس بودن از نمادهای ضعیف استفاده می‌کند. این گزینه صرفاً برای آزمایش وجود دارد و نباید توسط کاربران نهایی استفاده شود؛ چرا که منجر به کدی ضعیف‌تر شده و هیچ مزیتی ندارد. این گزینه ممکن است در نسخه‌های بعدی G++ حذف شود. .IP "\fB\-fext\-numeric\-literals\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-fext-numeric-literals (C++ and Objective-C++ only)" پسوندهای لیترال عددی موهومی (imaginary)، ممیز ثابت (fixed-point) یا تعریف‌شده توسط ماشین را به عنوان افزونه‌های GNU می‌پذیرد. وقتی این گزینه خاموش باشد، با این پسوندها مانند پسوندهای لیترال عددی تعریف‌شده توسط کاربر در C++11 رفتار می‌شود. این گزینه به‌طور پیش‌فرض برای تمامی گویش‌های پیش از C++11 و تمامی گویش‌های GNU فعال است: \&\fB\-std=c++98\fR، \fB\-std=gnu++98\fR، \fB\-std=gnu++11\fR، \&\fB\-std=gnu++14\fR. این گزینه به‌طور پیش‌فرض برای ISO C++11 به بعد (\fB\-std=c++11\fR، ...) غیرفعال است. .IP \fB\-nostdinc++\fR 4 .IX Item "-nostdinc++" در دایرکتوری‌های استاندارد مخصوص C++ به دنبال فایل‌های سرایند (header files) جستجو نمی‌کند، اما سایر دایرکتوری‌های استاندارد را همچنان جستجو می‌نماید. (این گزینه هنگام ساخت کتابخانهٔ C++ استفاده می‌شود.) .IP \fB\-flang\-info\-include\-translate\fR 4 .IX Item "-flang-info-include-translate" .PD 0 .IP \fB\-flang\-info\-include\-translate\-not\fR 4 .IX Item "-flang-info-include-translate-not" .IP \fB\-flang\-info\-include\-translate=\fR\fIheader\fR 4 .IX Item "-flang-info-include-translate=header" .PD دربارهٔ رویدادهای ترجمهٔ include اطلاع‌رسانی می‌کند. اولی ترجمه‌های include پذیرفته‌شده را ذکر می‌کند، دومی ترجمه‌های include ردشده را ثبت می‌کند. شکل \fIheader\fR ترجمه‌های include مربوط به آن سرایند مشخص را گزارش می‌دهد. اگر \fIheader\fR به شکل \f(CW"user"\fR یا \f(CW\*(C`\*(C'\fR باشد، با استفاده از مسیر include به یک سرایند کاربری یا سیستمی خاص تطبیق داده می‌شود. .IP \fB\-flang\-info\-module\-cmi\fR 4 .IX Item "-flang-info-module-cmi" .PD 0 .IP \fB\-flang\-info\-module\-cmi=\fR\fImodule\fR 4 .IX Item "-flang-info-module-cmi=module" .PD دربارهٔ نام مسیرهای واسط ماژول کامپایل‌شده (CMI) اطلاع می‌دهد. اولی تمام نام مسیرهای CMI خوانده‌شده را ثبت می‌کند. شکل \fImodule\fR خواندن CMI یک ماژول مشخص را گزارش می‌دهد. \fImodule\fR می‌تواند یک ماژول نام‌گذاری‌شده یا یک واحد سرایند (header-unit) باشد (مورد اخیر یا با نام مسیری حاوی جداکننده‌های دایرکتوری یا با قرارگیری در \f(CW\*(C`<>\*(C'\fR یا \f(CW""\fR مشخص می‌شود). .IP \fB\-stdlib=\fR\fIlibstdc++,libc++\fR 4 .IX Item "-stdlib=libstdc++,libc++" هنگامی که G++ برای پشتیبانی از این گزینه پیکربندی شده باشد، امکان تعیین کتابخانه‌های زمان اجرای جایگزین C++ را فراهم می‌کند. دو گزینه موجود است: \fIlibstdc++\fR (زمان اجرای پیش‌فرض و بومی C++ برای G++) و \fIlibc++\fR که زمان اجرای C++ نصب‌شده روی برخی سیستم‌های عامل است (مثلاً نسخه‌های Darwin از Darwin11 به بعد). این گزینه G++ را تغییر می‌دهد تا از سرایندهای کتابخانهٔ مشخص‌شده استفاده کند و هنگام نیاز به زمان اجرای C++ برای پیوند دادن، به‌ترتیب \f(CW\*(C`\-lstdc++\*(C'\fR یا \f(CW\*(C`\-lc++\*(C'\fR را صادر نماید. .PP علاوه بر این، این گزینه‌های هشدار تنها برای برنامه‌های C++ کاربرد دارند: .IP "\fB\-Wabi\-tag\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wabi-tag (C++ and Objective-C++ only)" هنگامی که نوعی با یک برچسب ABI در زمینه‌ای استفاده شود که فاقد آن برچسب ABI است، هشدار می‌دهد. برای اطلاعات بیشتر دربارهٔ برچسب‌های ABI، بخش \fBC++ Attributes\fR را ببینید. .IP \fB\-Wno\-abbreviated\-auto\-in\-template\-arg\fR 4 .IX Item "-Wno-abbreviated-auto-in-template-arg" خطا را برای یک نوع جای‌نگهدار \f(CW\*(C`auto\*(C'\fR استفاده‌شده در فهرست آرگومان‌های الگو برای اعلان یک الگوی تابع خلاصه‌شدهٔ C++20 غیرفعال می‌کند؛ برای نمونه: .Sp .Vb 1 \& void f(S); .Ve .Sp این قابلیت در Concepts TS پیشنهاد شده بود، اما در C++20 پذیرفته نشد؛ در استاندارد، یک جای‌نگهدار در اعلان پارامتر باید به عنوان یک decl\-specifier ظاهر شود. این خطا را همچنین می‌توان با \fB\-fpermissive\fR یا \fB\-Wno\-error=abbreviated\-auto\-in\-template\-arg\fR به یک هشدار کاهش داد..IP "\fB\-Wcomma\-subscript\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wcomma-subscript (C++ and Objective-C++ only)" درباره استفاده از عبارت کاما (comma expression) در داخل یک عبارت اندیس‌گذاری هشدار می‌دهد. این شیوه استفاده در C++20 منسوخ شده است و در C++23 حذف خواهد شد. با این حال، عبارت کامایی که در \f(CW\*(C`( )\*(C'\fR محصور شده باشد منسوخ نیست. مثال: .Sp .Vb 4 \& void f(int *a, int b, int c) { \& a[b,c]; // deprecated in C++20, invalid in C++23 \& a[(b,c)]; // OK \& } .Ve .Sp در C++23، قرار دادن عبارت‌های جداشده با کاما در داخل کروشه اندیس‌گذاری زمانی معتبر است که یک عملگر اندیس‌گذاری سربارگذاری‌شده (overloaded) یافت شود و از تعداد و انواع درست آرگومان‌ها پشتیبانی کند. کامپایلر G++ نحو سابقاً معتبری را که در C++23 نامعتبر است اما پیش‌تر در C++20 معتبر ولی منسوخ بوده است، همراه با یک هشدار وسواسی (pedantic) می‌پذیرد؛ این هشدار را می‌توان با \&\fB\-Wno\-comma\-subscript\fR غیرفعال کرد. .Sp به‌طور پیش‌فرض با \fB\-std=c++20\fR فعال است، مگر با \&\fB\-Wno\-deprecated\fR؛ و پس از \fB\-std=c++23\fR صرف‌نظر از \&\fB\-Wno\-deprecated\fR فعال خواهد بود. قبل از \fB\-std=c++20\fR، با \fB\-Wdeprecated\fR صریح فعال می‌شود. .Sp این هشدار با \fB\-pedantic\-errors\fR در حالت C++23 یا بالاتر به یک خطا ارتقا می‌یابد. .IP "\fB\-Wctad\-maybe\-unsupported\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wctad-maybe-unsupported (C++ and Objective-C++ only)" هنگام انجام استنتاج آرگومان الگوی کلاس (CTAD) روی نوعی که هیچ راهنمای استنتاج (deduction guide) صریحی برای آن نوشته نشده است، هشدار می‌دهد. این هشدار مواردی را مشخص می‌کند که در آن‌ها CTAD تنها به این دلیل موفق شده است که کامپایلر راهنماهای استنتاج ضمنی را سنتز کرده است، که ممکن است مد نظر برنامه‌نویس نبوده باشد. برخی راهنماهای شیوه‌نامه، CTAD را تنها روی انواعی مجاز می‌دانند که صراحتاً «اعلام آمادگی» (opt\-in) کرده باشند؛ یعنی روی انواعی که برای پشتیبانی از CTAD طراحی شده‌اند. این هشدار را می‌توان با الگوی زیر فرونشاند: .Sp .Vb 6 \& struct allow_ctad_t; // any name works \& template struct S { \& S(T) { } \& }; \& // Guide with incomplete parameter type will never be considered. \& S(allow_ctad_t) \-> S; .Ve .IP "\fB\-Wctor\-dtor\-privacy\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wctor-dtor-privacy (C++ and Objective-C++ only)" زمانی هشدار می‌دهد که یک کلاس غیرقابل استفاده به نظر برسد چرا که تمام سازنده‌ها یا مخرب‌های آن کلاس خصوصی (private) هستند و کلاس فاقد هرگونه تابع یا کلاس دوست (friend) یا توابع عضو ایستا و عمومی (public static) است. همچنین اگر هیچ متد غیرخصوصی وجود نداشته باشد و دست‌کم یک تابع عضو خصوصی که سازنده یا مخرب نیست موجود باشد، هشدار می‌دهد. .IP "\fB\-Wdangling\-reference\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wdangling-reference (C++ and Objective-C++ only)" زمانی که یک مرجع (reference) به یک شیء موقت که طول عمر آن به پایان رسیده است مقید (bound) شود، هشدار می‌دهد. برای مثال: .Sp .Vb 2 \& int n = 1; \& const int& r = std::max(n \- 1, n + 1); // r is dangling .Ve .Sp در مثال بالا، دو شیء موقت ایجاد می‌شود (یکی برای هر آرگومان) و مرجعی به یکی از آن اشیای موقت بازگردانده می‌شود. با این حال، هر دو شیء موقت در انتهای عبارت کامل (full expression) نابود می‌شوند، بنابراین مرجع \f(CW\*(C`r\*(C'\fR معلق (dangling) باقی می‌ماند. این هشدار همچنین مراجع معلق را در فهرست‌های راه‌اندازی اعضا (member initializer lists) تشخیص می‌دهد: .Sp .Vb 5 \& const int& f(const int& i) { return i; } \& struct S { \& const int &r; // r is dangling \& S() : r(f(10)) { } \& }; .Ve .Sp توابع عضو نیز بررسی می‌شوند، اما تنها آرگومان شیء آن‌ها: .Sp .Vb 4 \& struct S { \& const S& self () { return *this; } \& }; \& const S& s = S().self(); // s is dangling .Ve .Sp برخی توابع از این نظر ایمن هستند، برای نمونه \f(CW\*(C`std::use_facet\*(C'\fR: آن‌ها یک مرجع می‌گیرند و یک مرجع بازمی‌گردانند، اما یکی از آرگومان‌های خود را بازنمی‌گردانند، که این امر می‌تواند هشدار را به اشتباه بیندازد. چنین توابعی را می‌توان با قرار دادن آن‌ها در یک \f(CW\*(C`#pragma\*(C'\fR از این هشدار مستثنی کرد: .Sp .Vb 4 \& #pragma GCC diagnostic push \& #pragma GCC diagnostic ignored "\-Wdangling\-reference" \& const T& foo (const T&) { ... } \& #pragma GCC diagnostic pop .Ve .Sp دستور \f(CW\*(C`#pragma\*(C'\fR همچنین می‌تواند کلاس را در بر گیرد؛ در آن صورت، هشدار برای تمامی توابع عضو غیرفعال خواهد شد. .Sp \&\fB\-Wdangling\-reference\fR همچنین درباره کدهایی مانند زیر هشدار می‌دهد: .Sp .Vb 1 \& auto p = std::minmax(1, 2); .Ve .Sp که در آن \f(CW\*(C`std::minmax\*(C'\fR نوع \f(CW\*(C`std::pair\*(C'\fR را برمی‌گرداند و هر دو مرجع پس از پایان عبارت کاملی که شامل فراخوانی \f(CW\*(C`std::minmax\*(C'\fR است، معلق می‌شوند. .Sp این هشدار برای کلاس‌های شبیه به \f(CW\*(C`std::span\*(C'\fR اخطار صادر نمی‌کند. ما کلاس‌هایی با ساختار زیر را: .Sp .Vb 5 \& template \& struct Span { \& T* data_; \& std::size len_; \& }; .Ve .Sp شبیه به \f(CW\*(C`std::span\*(C'\fR در نظر می‌گیریم؛ یعنی کلاسی غیر از نوع union که دارای یک عضو داده‌ای اشاره‌گر و یک مخرب بدیهی (trivial) است. .Sp این هشدار را می‌توان با استفاده از مشخصه (attribute) \f(CW\*(C`gnu::no_dangling\*(C'\fR غیرفعال کرد. .Sp این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)" هنگامی که از \f(CW\*(C`delete\*(C'\fR برای تخریب یک نمونه از کلاسی استفاده می‌شود که دارای توابع مجازی و مخرب غیرمجازی است، هشدار می‌دهد. اگر کلاس پایه فاقد مخرب مجازی باشد، حذف نمونه‌ای از کلاس مشتق‌شده از طریق اشاره‌گری به کلاس پایه ناامن است. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wdeprecated\-copy\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-copy (C++ and Objective-C++ only)" در C++11 و بالاتر، هشدار می‌دهد که اعلان ضمنی سازنده کپی یا عملگر انتساب کپی در صورتی که کلاس دارای یک سازنده کپی یا عملگر انتساب کپی تعریف‌شده توسط کاربر باشد، منسوخ است. این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wdeprecated\-copy\-dtor\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-copy-dtor (C++ and Objective-C++ only)" مشابه \fB\-Wdeprecated\-copy\fR است، اما همچنین در صورتی که کلاس دارای یک مخرب تعریف‌شده توسط کاربر باشد نیز آن را منسوخ در نظر می‌گیرد. .IP "\fB\-Wno\-deprecated\-enum\-enum\-conversion\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-deprecated-enum-enum-conversion (C++ and Objective-C++ only)" هشدار مربوط به حالتی را غیرفعال می‌کند که در آن تبدیل‌های حسابی معمول روی عملوندهایی اعمال می‌شود که یکی از نوع شمارشی (enumeration) و دیگری از نوع شمارشی متفاوتی است. این تبدیل در C++20 منسوخ شده است. برای مثال: .Sp .Vb 3 \& enum E1 { e }; \& enum E2 { f }; \& int k = f \- e; .Ve .Sp گزینه \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR به‌طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است. در لهجه‌های پیش از C++20، این هشدار می‌تواند توسط \fB\-Wenum\-conversion\fR یا \fB\-Wdeprecated\fR فعال شود. .IP "\fB\-Wno\-deprecated\-enum\-float\-conversion\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)" هشدار مربوط به حالتی را غیرفعال می‌کند که در آن تبدیل‌های حسابی معمول روی عملوندهایی اعمال می‌شود که یکی از نوع شمارشی و دیگری از نوع ممیز شناور (floating\-point) است. این تبدیل در C++20 منسوخ شده است. برای مثال: .Sp .Vb 3 \& enum E1 { e }; \& enum E2 { f }; \& bool b = e <= 3.7; .Ve .Sp گزینه \&\fB\-Wdeprecated\-enum\-float\-conversion\fR به‌طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است. در لهجه‌های پیش از C++20، این هشدار می‌تواند توسط \fB\-Wenum\-conversion\fR یا \fB\-Wdeprecated\fR فعال شود. .IP "\fB\-Wdeprecated\-literal\-operator\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-literal-operator (C++ and Objective-C++ only)" هشدار می‌دهد که اعلان عملگر لیترال تعریف‌شده توسط کاربر با یک فاصله قبل از پسوند، منسوخ شده است. این هشدار به‌طور پیش‌فرض در C++23، یا با \fB\-Wdeprecated\fR صریح فعال می‌شود. .Sp.Vb 2 \& string operator "" _i18n(const char*, std::size_t); // deprecated \& string operator ""_i18n(const char*, std::size_t); // preferred .Ve .IP "\fB\-Wdeprecated\-variadic\-comma\-omission\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-variadic-comma-omission (تنها C++ و Objective-C++)" هشدار می‌دهد که حذف کاما پیش از آرگومان‌های متغیر \f(CW\*(C`...\*(C'\fR در انتهای فهرست پارامترهای تابع منسوخ شده است. این هشدار به‌طور پیش‌فرض در C++26، یا با گزینهٔ صریح \fB\-Wdeprecated\fR فعال می‌شود. .Sp .Vb 6 \& void f1(int...); // deprecated \& void f1(int, ...); // preferred \& template \& void f2(T...); // ok \& template \& void f3(T......); // deprecated .Ve .IP \fB\-Wno\-elaborated\-enum\-base\fR 4 .IX Item "-Wno-elaborated-enum-base" برای C++11 و بالاتر، در صورتی که یک enum\-base اضافی (نامعتبر) در یک elaborated\-type\-specifier به کار رود، هشدار می‌دهد؛ یعنی اگر یک enum با نوع زیربنایی مشخص‌شده و بدون فهرست اعضا، در اعلانی غیر از یک اعلان مستقل از enum استفاده شود. به‌طور پیش‌فرض فعال است. این هشدار با \-pedantic\-errors به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-init\-list\-lifetime\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-init-list-lifetime (تنها C++ و Objective-C++)" دربارهٔ استفاده‌هایی از \f(CW\*(C`std::initializer_list\*(C'\fR که احتمالاً منجر به اشاره‌گرهای معلق (dangling pointers) می‌شوند، هشدار نمی‌دهد. از آنجا که با آرایهٔ زیربنایی یک \f(CW\*(C`initializer_list\*(C'\fR مانند یک شیء موقت معمولی در C++ رفتار می‌شود، ممکن است اشاره‌گری به آرایه به‌طور ناخواسته پس از پایان طول‌عمر آن نگه داشته شود. برای مثال: .RS 4 .IP * 4 اگر تابعی یک \f(CW\*(C`initializer_list\*(C'\fR موقت یا یک متغیر محلی \&\f(CW\*(C`initializer_list\*(C'\fR را برگرداند، طول‌عمر آرایه در انتهای دستور return پایان می‌یابد، بنابراین مقدار بازگردانده‌شده دارای یک اشاره‌گر معلق خواهد بود. .IP * 4 اگر یک عبارت new یک \f(CW\*(C`initializer_list\*(C'\fR ایجاد کند، آرایه تنها تا پایان عبارت کامل (full\-expression) دربرگیرنده زنده می‌ماند، بنابراین \&\f(CW\*(C`initializer_list\*(C'\fR در heap دارای یک اشاره‌گر معلق خواهد بود. .IP * 4 هنگامی که به یک متغیر \f(CW\*(C`initializer_list\*(C'\fR مقداری از یک فهرست مقداردهی محصور در آکولاد انتساب داده شود، آرایهٔ موقت ایجادشده برای سمت راستِ انتساب تنها تا پایان عبارت کامل دوام می‌آورد، بنابراین در دستور بعدی متغیر \f(CW\*(C`initializer_list\*(C'\fR یک اشاره‌گر معلق دارد. .Sp .Vb 6 \& // li\*(Aqs initial underlying array lives as long as li \& std::initializer_list li = { 1,2,3 }; \& // assignment changes li to point to a temporary array \& li = { 4, 5 }; \& // now the temporary is gone and li has a dangling pointer \& int i = li.begin()[0] // undefined behavior .Ve .IP * 4 هنگامی که یک سازندهٔ فهرست (list constructor) اشاره‌گر \f(CW\*(C`begin\*(C'\fR را از آرگومان \f(CW\*(C`initializer_list\*(C'\fR ذخیره می‌کند، این کار طول‌عمر آرایه را افزایش نمی‌دهد؛ بنابراین اگر یک متغیر کلاس از روی یک \f(CW\*(C`initializer_list\*(C'\fR موقت ساخته شود، اشاره‌گر در انتهای عبارتِ اعلان متغیر معلق می‌ماند. .RE .RS 4 .RE .IP \fB\-Winvalid\-constexpr\fR 4 .IX Item "-Winvalid-constexpr" هنگامی که یک تابع هرگز یک عبارت ثابت (constant expression) تولید نمی‌کند، هشدار می‌دهد. در C++20 و پیش از آن، برای هر تابع و قالب تابعِ \f(CW\*(C`constexpr\*(C'\fR، باید حداقل یک مجموعه از آرگومان‌های تابع در دست‌کم یک نمونه‌سازی (instantiation) وجود داشته باشد به‌گونه‌ای که فراخوانی تابع یا سازنده بتواند یک زیرعبارتِ ارزیابی‌شده از یک عبارت ثابت هسته (core constant expression) باشد. C++23 این محدودیت را حذف کرد، بنابراین ممکن است تابع یا قالب تابعی با \f(CW\*(C`constexpr\*(C'\fR وجود داشته باشد که هیچ فراخوانی از آن شرایط لازم برای یک core constant expression را برآورده نکند. .Sp این هشدار به‌طور پیش‌فرض در C++20 و پیش از آن به عنوان یک هشدار دقیق (pedantic) فعال است. در C++23، می‌توان \fB\-Winvalid\-constexpr\fR را فعال کرد که در آن حالت یک هشدار معمولی خواهد بود. برای مثال: .Sp .Vb 7 \& void f (int& i); \& constexpr void \& g (int& i) \& { \& // Warns by default in C++20, in C++23 only with \-Winvalid\-constexpr. \& f(i); \& } .Ve .IP \fB\-Winvalid\-imported\-macros\fR 4 .IX Item "-Winvalid-imported-macros" معتبر بودن تمام تعاریف ماکروهای واردشده (imported) را در پایان کامپایل بررسی می‌کند. این گزینه به‌طور پیش‌فرض فعال نیست، چرا که تعیین آن نیازمند پردازش اضافه است. این گزینه ممکن است هنگام آماده‌سازی مجموعه‌هایی از header\-unitها برای اطمینان از سازگاری ماکروها مفید باشد. .IP "\fB\-Wno\-literal\-suffix\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-literal-suffix (تنها C++ و Objective-C++)" هنگامی که پس از یک لیترال رشته‌ای یا نویسه‌ای یک ud\-suffix قرار می‌گیرد که با زیرخط (_) آغاز نمی‌شود، هشدار نمی‌دهد. به عنوان یک افزونهٔ مطابق با استاندارد، GCC با چنین پسوندهایی به عنوان توکن‌های پیش‌پردازش جداگانه رفتار می‌کند تا سازگاری عقبرو با کدهایی که از ماکروهای قالب‌بندی در \f(CW\*(C`\*(C'\fR استفاده می‌کنند حفظ شود. برای مثال: .Sp .Vb 3 \& #define _\|_STDC_FORMAT_MACROS \& #include \& #include \& \& int main() { \& int64_t i64 = 123; \& printf("My int64: %" PRId64"\en", i64); \& } .Ve .Sp در این حالت، با \f(CW\*(C`PRId64\*(C'\fR مانند یک توکن پیش‌پردازش جداگانه رفتار می‌شود. .Sp این گزینه همچنین هشدارهایی را که هنگام اعلان یک عملگر لیترال تعریف‌شده توسط کاربر با شناسهٔ پسوند لیترالی که با زیرخط آغاز نمی‌شود صادر می‌شوند، کنترل می‌کند. شناسه‌های پسوند لیترال که با زیرخط آغاز نمی‌شوند برای استانداردسازی‌های آینده رزرو شده‌اند. .Sp این هشدارها به‌طور پیش‌فرض فعال هستند. .IP "\fB\-Wno\-narrowing\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-narrowing (تنها C++ و Objective-C++)" برای استانداردهای C++11 و پس از آن، تبدیلات محدودکننده (narrowing conversions) همان‌طور که توسط استاندارد الزامی شده است، به‌طور پیش‌فرض تشخیص داده می‌شوند. تبدیل محدودکننده از یک مقدار ثابت خطا تولید می‌کند و تبدیل محدودکننده از یک مقدار غیرثابت هشدار می‌دهد، اما \fB\-Wno\-narrowing\fR این گزارش خطا یا هشدار را متوقف می‌سازد. توجه داشته باشید که این گزینه معنای کد خوش‌ساخت (well\-formed) را تغییر نمی‌دهد؛ تبدیلات محدودکننده همچنان در زمینه‌های SFINAE نادرست‌ساخت (ill\-formed) به شمار می‌روند. .Sp با \fB\-Wnarrowing\fR در C++98، هنگامی که یک تبدیل محدودکننده که توسط C++11 ممنوع شده است درون \&\fB{ }\fR رخ دهد، هشدار می‌دهد؛ مانند: .Sp .Vb 1 \& int i = { 2.2 }; // error: narrowing from double to int .Ve .Sp این پرچم در \fB\-Wall\fR و \fB\-Wc++11\-compat\fR گنجانده شده است. .IP "\fB\-Wnoexcept\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wnoexcept (تنها C++ و Objective-C++)" هنگامی که یک noexcept\-expression به دلیل فراخوانی تابعی که فاقد مشخصهٔ استثنای بدون پرتاب است (یعنی \f(CWthrow()\fR یا \f(CW\*(C`noexcept\*(C'\fR)، اما کامپایلر می‌داند که هرگز استثنایی پرتاب نمی‌کند، به نادرست (false) ارزیابی شود، هشدار می‌دهد. .IP "\fB\-Wnoexcept\-type\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wnoexcept-type (تنها C++ و Objective-C++)" هشدار می‌دهد اگر ویژگی C++17 که \f(CW\*(C`noexcept\*(C'\fR را بخشی از نوع تابع قرار می‌دهد، نام درهم‌پیچیده (mangled name) یک نماد را نسبت به C++14 تغییر دهد. با گزینه‌های \fB\-Wabi\fR و \fB\-Wc++17\-compat\fR فعال می‌شود. .Sp به عنوان یک مثال: .Sp .Vb 3 \& template void f(T t) { t(); }; \& void g() noexcept; \& void h() { f(g); } .Ve .Sp در C++14، تابع \f(CW\*(C`f\*(C'\fR عبارت \f(CW\*(C`f\*(C'\fR را فراخوانی می‌کند، اما در C++17 عبارت \f(CW\*(C`f\*(C'\fR را فرامی‌خواند. .IP "\fB\-Wclass\-memaccess\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wclass-memaccess (تنها C++ و Objective-C++)" هنگامی که مقصد فراخوانی یک تابع حافظهٔ خام مانند \f(CW\*(C`memset\*(C'\fR یا \&\f(CW\*(C`memcpy\*(C'\fR یک شیء از نوع کلاس باشد و نوشتن در چنین شیئی ممکن است سازندهٔ غیربدیهی (non\-trivial) یا حذف‌شده (deleted) یا انتساب کپی کلاس را دور بزند، صحت const یا کپسوله‌سازی را نقض کند، یا اشاره‌گرهای جدول مجازی (vtable) را خراب کند، هشدار می‌دهد. تغییر دادن نمایش حافظه‌ای چنین اشیائی ممکن است ناورداهایی (invariants) را که توسط توابع عضو کلاس حفظ می‌شوند، نقض کند. برای مثال، فراخوانی \f(CW\*(C`memset\*(C'\fR در زیر تعریف‌نشده است زیرا یک شیء کلاس غیربدیهی را تغییر می‌دهد و بنابراین گزارش می‌شود. روش امن برای مقداردهی اولیه یا پاک‌کردن حافظهٔ اشیائی از این نوع، استفاده از سازنده یا عملگر انتساب مناسب در صورت وجود است. .Sp .Vb 2 \& std::string str = "abc"; \& memset (&str, 0, sizeof str); .Ve .Sp گزینهٔ \fB\-Wclass\-memaccess\fR با \fB\-Wall\fR فعال می‌شود. تبدیل صریح (cast) اشاره‌گر شیء کلاس به \f(CW\*(C`void *\*(C'\fR یا به نوعی که بتواند به‌طور ایمن توسط تابع حافظهٔ خام مورد دسترسی قرار گیرد، این هشدار را متوقف می‌کند..IP "\fB\-Wnon\-virtual\-dtor\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wnon-virtual-dtor (C++ and Objective-C++ only)" هنگامی که یک کلاس دارای توابع مجازی و یک مخرب غیرمجازی در دسترس در خود یا در یک کلاس پایهٔ چندریختی در دسترس باشد هشدار می‌دهد، که در این حالت حذف یک نمونه از کلاس مشتق‌شده از طریق اشاره‌گری به خود کلاس یا کلاس پایه ممکن اما ناامن است. اگر \fB\-Weffc++\fR مشخص شده باشد، این هشدار به‌طور خودکار فعال می‌شود. گزینهٔ \fB\-Wdelete\-non\-virtual\-dtor\fR (فعال‌شده توسط \fB\-Wall\fR) باید ترجیح داده شود زیرا بدون هشدارهای کاذب، موارد ناامن را هشدار می‌دهد. .IP "\fB\-Wregister\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wregister (C++ and Objective-C++ only)" در صورت استفاده از مشخص‌کنندهٔ کلاس حافظهٔ \f(CW\*(C`register\*(C'\fR هشدار می‌دهد، مگر زمانی که بخشی از افزونهٔ \fBExplicit Register Variables\fR در GNU باشد. استفاده از کلمهٔ کلیدی \f(CW\*(C`register\*(C'\fR به عنوان مشخص‌کنندهٔ کلاس حافظه در C++11 منسوخ شده و در C++17 حذف شده است. به‌طور پیش‌فرض با \fB\-std=c++17\fR فعال می‌شود. .IP "\fB\-Wreorder\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wreorder (C++ and Objective-C++ only)" هنگامی که ترتیب مقداردهنده‌های اعضا در کد با ترتیبی که باید اجرا شوند مطابقت ندارد، هشدار می‌دهد. برای نمونه: .Sp .Vb 5 \& struct A { \& int i; \& int j; \& A(): j (0), i (1) { } \& }; .Ve .Sp کامپایلر مقداردهنده‌های اعضا را برای \f(CW\*(C`i\*(C'\fR و \f(CW\*(C`j\*(C'\fR به‌گونه‌ای بازآرایی می‌کند تا با ترتیب اعلان اعضا مطابقت داشته باشد، و هشداری مبنی بر این موضوع صادر می‌کند. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-pessimizing\-move\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-pessimizing-move (C++ and Objective-C++ only)" این هشدار زمانی اعلام می‌شود که فراخوانی \f(CW\*(C`std::move\*(C'\fR مانع از حذف کپی (copy elision) شود. یک سناریوی متداول برای رخداد حذف کپی، بازگشت از تابعی با نوع بازگشتی کلاس است، به شرطی که عبارت بازگردانده‌شده نام یک شیء خودکار غیر-\&volatile باشد، پارامتر تابع نباشد، و نوع آن با نوع بازگشتی تابع یکسان باشد. .Sp .Vb 9 \& struct T { \& ... \& }; \& T fn() \& { \& T t; \& ... \& return std::move (t); \& } .Ve .Sp اما در این مثال، فراخوانی \f(CW\*(C`std::move\*(C'\fR مانع از حذف کپی می‌شود. .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-redundant\-move\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-redundant-move (C++ and Objective-C++ only)" این هشدار دربارهٔ فراخوانی‌های زائد \f(CW\*(C`std::move\*(C'\fR اخطار می‌دهد؛ یعنی زمانی که عملیات انتقال (move) حتی بدون فراخوانی \f(CW\*(C`std::move\*(C'\fR نیز انجام می‌شد. این اتفاق به این دلیل می‌افتد که کامپایلر در موقعیت‌های خاصی مانند بازگرداندن یک متغیر محلی که در آن حذف کپی قابل اعمال نیست، مجبور است با شیء طوری رفتار کند که گویی یک rvalue است. این مورد را در نظر بگیرید: .Sp .Vb 8 \& struct T { \& ... \& }; \& T fn(T t) \& { \& ... \& return std::move (t); \& } .Ve .Sp در اینجا، فراخوانی \f(CW\*(C`std::move\*(C'\fR زائد است. از آنجا که G++ مورد Core Issue 1579 را پیاده‌سازی می‌کند، مثال دیگر به این صورت است: .Sp .Vb 12 \& struct T { // convertible to U \& ... \& }; \& struct U { \& ... \& }; \& U fn() \& { \& T t; \& ... \& return std::move (t); \& } .Ve .Sp در این مثال، حذف کپی قابل اعمال نیست زیرا نوع عبارت بازگردانده‌شده و نوع بازگشتی تابع متفاوت هستند، با این حال G++ با مقدار بازگشتی طوری رفتار می‌کند که گویی با یک rvalue مشخص شده است. .Sp این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wrange\-loop\-construct\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wrange-loop-construct (C++ and Objective-C++ only)" این هشدار زمانی اخطار می‌دهد که یک حلقهٔ for مبتنی بر بازه در C++ یک کپی غیرضروری ایجاد کند. این وضعیت زمانی رخ می‌دهد که اعلان بازه یک مرجع نباشد، در حالی که احتمالاً باید باشد. برای نمونه: .Sp .Vb 5 \& struct S { char arr[128]; }; \& void fn () { \& S arr[5]; \& for (const auto x : arr) { ... } \& } .Ve .Sp زمانی که نوع کپی‌شده یک نوع به صورت ناچیز قابل کپی (trivially-copyable) باشد که اندازهٔ آن کمتر از ۶۴ بایت است، هشدار نمی‌دهد. .Sp این هشدار همچنین زمانی اخطار می‌دهد که متغیر حلقه در یک حلقهٔ for مبتنی بر بازه، با مقداری از یک نوع متفاوت مقداردهی اولیه شود که منجر به کپی شدن گردد. برای نمونه: .Sp .Vb 4 \& void fn() { \& int arr[10]; \& for (const double &x : arr) { ... } \& } .Ve .Sp در مثال بالا، در هر تکرار حلقه یک مقدار موقت از نوع \f(CW\*(C`double\*(C'\fR ایجاد و نابود می‌شود، که مرجع \&\f(CW\*(C`const double &\*(C'\fR به آن متصل می‌گردد. .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wredundant\-tags\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wredundant-tags (C++ and Objective-C++ only)" دربارهٔ class\-key و enum\-key زائد در ارجاع به انواع کلاس و انواع شمارشی در زمینه‌هایی که می‌توان کلید را بدون ایجاد ابهام حذف کرد، هشدار می‌دهد. برای نمونه: .Sp .Vb 2 \& struct foo; \& struct foo *p; // warn that keyword struct can be eliminated .Ve .Sp از سوی دیگر، در این مثال هیچ هشداری صادر نمی‌شود: .Sp .Vb 3 \& struct foo; \& void foo (); // "hides" struct foo \& void bar (struct foo&); // no warning, keyword struct is necessary .Ve .IP "\fB\-Wno\-subobject\-linkage\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-subobject-linkage (C++ and Objective-C++ only)" اگر یک نوع کلاس دارای کلاس پایه یا فیلدی باشد که نوع آن از فضای نام ناشناس (anonymous namespace) استفاده می‌کند یا به نوعی بدون پیوند (linkage) وابسته است، هشدار نده. اگر نوع A به نوع B با پیوند داخلی یا بدون پیوند وابسته باشد، تعریف آن در چندین واحد ترجمه نقض ODR خواهد بود، زیرا معنای B در هر واحد ترجمه متفاوت است. اگر A فقط در یک واحد ترجمه ظاهر شود، بهترین راه برای خاموش کردن هشدار این است که با قرار دادن آن در یک فضای نام ناشناس، به آن نیز پیوند داخلی داده شود. کامپایلر این هشدار را برای انواع تعریف‌شده در فایل اصلی .C صادر نمی‌کند، زیرا بعید است که آن‌ها دارای تعاریف چندگانه باشند. \&\fB\-Wsubobject\-linkage\fR به‌طور پیش‌فرض فعال است. .IP "\fB\-Weffc++\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Weffc++ (C++ and Objective-C++ only)" دربارهٔ نقض رهنمودهای شیوه‌نامهٔ زیر برگرفته از سری کتاب‌های \fIEffective C++\fR نوشتهٔ Scott Meyers هشدار می‌دهد: .RS 4 .IP * 4 برای کلاس‌هایی با حافظهٔ تخصیص‌یافته به‌صورت پویا، یک سازندهٔ کپی و یک عملگر انتساب تعریف کنید. .IP * 4 مقداردهی اولیه را به انتساب در سازنده‌ها ترجیح دهید. .IP * 4 کاری کنید که \f(CW\*(C`operator=\*(C'\fR مرجعی به \f(CW*this\fR بازگرداند. .IP * 4 هنگامی که باید یک شیء را بازگردانید، سعی نکنید مرجع بازگردانید. .IP * 4 بین حالت‌های پیشوندی و پسوندی عملگرهای افزایش و کاهش تمایز قائل شوید. .IP * 4 هرگز \f(CW\*(C`&&\*(C'\fR، \f(CW\*(C`||\*(C'\fR، یا \f(CW\*(C`,\*(C'\fR را سربارگذاری نکنید. .RE .RS 4 .Sp این گزینه همچنین \fB\-Wnon\-virtual\-dtor\fR را فعال می‌کند، که آن هم یکی از توصیه‌های Effective C++ است. با این حال، بررسی گسترش یافته است تا دربارهٔ عدم وجود مخرب مجازی در کلاس‌های پایهٔ غیرچندریختی در دسترس نیز هشدار دهد. .Sp هنگام انتخاب این گزینه، توجه داشته باشید که سرآیندهای کتابخانهٔ استاندارد از همهٔ این رهنمودها پیروی نمی‌کنند؛ از \fBgrep \-v\fR برای فیلتر کردن این هشدارها استفاده کنید. .RE.IP "\fB\-Wno\-exceptions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-exceptions (C++ and Objective-C++ only)" غیرفعال کردن هشدار درباره مواردی که یک کنترل‌کننده استثنا توسط کنترل‌کننده دیگری سایه‌اندازی (shadow) می‌شود، که می‌تواند نشان‌دهنده ترتیب نادرست کنترل‌کننده‌های استثنا باشد. .IP "\fB\-Wsfinae\-incomplete\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wsfinae-incomplete (C++ and Objective-C++ only)" هشدار درباره کلاسی که ناقص تشخیص داده می‌شود، یا تابعی با نوع بازگشتی auto که هنوز استنتاج نشده است، در زمینه‌ای که منجر به شکست جایگزینی (substitution failure) به جای خطا می‌شود، و سپس کلاس یا تابع بعداً در واحد ترجمه (translation unit) تعریف می‌گردد. این امر مشکل‌ساز است چرا که نمونه‌سازی‌های قالب یا بررسی‌های concept بسته به اینکه ابتدا قبل یا بعد از تعریف رخ دهند ممکن است نتایج متفاوتی داشته باشند. .Sp این هشدار به‌طور پیش‌فرض فعال است. \fB\-Wsfinae\-incomplete=2\fR هشداری را در نقطه شکست جایگزینی اضافه می‌کند تا پیگیری مشکلات نشان‌گذاری‌شده توسط حالت پیش‌فرض آسان‌تر شود. .IP "\fB\-Wstrict\-null\-sentinel\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wstrict-null-sentinel (C++ and Objective-C++ only)" هشدار درباره استفاده از یک \f(CW\*(C`NULL\*(C'\fR بدون تبدیل نوع (uncasted) به‌عنوان نشانه پایانی (sentinel). هنگام کامپایل صرفاً با GCC، این یک sentinel معتبر است، زیرا \f(CW\*(C`NULL\*(C'\fR به \f(CW\*(C`_\|_null\*(C'\fR تعریف شده است. اگرچه این مقدار یک ثابت اشاره‌گر تهی است و نه یک اشاره‌گر تهی، تضمین می‌شود که اندازه‌ای برابر با یک اشاره‌گر داشته باشد. با این حال این استفاده در میان کامپایلرهای مختلف قابل‌حمل (portable) نیست. .IP "\fB\-Wno\-non\-c\-typedef\-for\-linkage\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-non-c-typedef-for-linkage (C++ and Objective-C++ only)" غیرفعال کردن pedwarn برای کلاس‌های بدون نام دارای نام typedef برای اهداف پیوند (linkage) که شامل اعضای خاص C++، کلاس‌های پایه، مقداردهنده‌های پیش‌فرض عضو یا عبارات لامبدا (از جمله موارد موجود در کلاس‌های عضو تودرتو) هستند. .Sp .Vb 10 \& typedef struct { \& int a; // non\-static data members are ok \& struct T { int b; }; // member classes too \& enum E { E1, E2, E3 }; // member enumerations as well \& int c = 42; // default member initializers are not ok \& struct U : A { int c; }; // classes with base classes are not ok \& typedef int V; // typedef is not ok \& using W = int; // using declaration is not ok \& decltype([](){}) x; // lambda expressions not ok \& } S; .Ve .Sp در تمام این موارد، نام تگ S باید پس از کلیدواژه struct اضافه شود. .IP "\fB\-Wno\-non\-template\-friend\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-non-template-friend (C++ and Objective-C++ only)" غیرفعال کردن هشدارها هنگامی که توابع دوست غیرقالبی (non-template friend functions) درون یک قالب اعلان می‌شوند. در نسخه‌های بسیار قدیمی GCC که پیش از پیاده‌سازی استاندارد ISO بودند، اعلان‌هایی مانند \fBfriend int foo(int)\fR، که در آن‌ها نام دوست یک شناسه غیرواجد شرایط (unqualified-id) است، می‌توانستند به‌عنوان یک تخصیص خاص (specialization) از یک تابع قالب تفسیر شوند؛ این هشدار برای تشخیص مشکلات سازگاری وجود دارد و به‌طور پیش‌فرض فعال است. .IP "\fB\-Wold\-style\-cast\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wold-style-cast (C++ and Objective-C++ only)" هشدار در صورت استفاده از تبدیل نوع قدیمی (سبک C) به یک نوع غیر void در یک برنامه C++. تبدیل نوع‌های سبک جدید (\f(CW\*(C`dynamic_cast\*(C'\fR، \&\f(CW\*(C`static_cast\*(C'\fR، \f(CW\*(C`reinterpret_cast\*(C'\fR و \f(CW\*(C`const_cast\*(C'\fR) کمتر در معرض اثرات ناخواسته هستند و جستجوی آن‌ها بسیار آسان‌تر است. .IP "\fB\-Woverloaded\-virtual\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Woverloaded-virtual (C++ and Objective-C++ only)" .PD 0 .IP \fB\-Woverloaded\-virtual=\fR\fIn\fR 4 .IX Item "-Woverloaded-virtual=n" .PD هشدار هنگامی که یک اعلان تابع، توابع مجازی را از یک کلاس پایه پنهان (hide) می‌کند. برای مثال، در: .Sp .Vb 3 \& struct A { \& virtual void f(); \& }; \& \& struct B: public A { \& void f(int); // does not override \& }; .Ve .Sp نسخه کلاس \f(CW\*(C`A\*(C'\fR از \f(CW\*(C`f\*(C'\fR در \f(CW\*(C`B\*(C'\fR پنهان می‌شود و کدی مانند: .Sp .Vb 2 \& B* b; \& b\->f(); .Ve .Sp کامپایل نمی‌شود. .Sp در مواردی که امضاهای متفاوت تصادفی نیستند، ساده‌ترین راه‌حل افزودن یک using-declaration به کلاس مشتق‌شده برای آشکار کردن مجدد تابع پایه است، مانند افزودن \f(CW\*(C`using A::f;\*(C'\fR به \f(CW\*(C`B\*(C'\fR. .Sp پسوند سطح اختیاری رفتار را هنگامی که تمام اعلان‌ها در کلاس مشتق‌شده توابع مجازی کلاس پایه را بازنویسی (override) می‌کنند کنترل می‌کند، حتی اگر تمام توابع پایه بازنویسی نشده باشند: .Sp .Vb 4 \& struct C { \& virtual void f(); \& virtual void f(int); \& }; \& \& struct D: public C { \& void f(int); // does override \& } .Ve .Sp این الگو کمتر احتمال دارد یک اشتباه باشد؛ اگر D صرفاً به‌صورت مجازی استفاده شود، ممکن است کاربر به این نتیجه رسیده باشد که معناشناسی کلاس پایه برای برخی از بارگذاری‌های بیش از حد (overloads) مناسب است. .Sp در سطح ۱، این حالت هشداری صادر نمی‌کند؛ در سطح ۲ هشدار می‌دهد. گزینه \&\fB\-Woverloaded\-virtual\fR به‌تنهایی سطح ۲ را انتخاب می‌کند. سطح ۱ در \fB\-Wall\fR گنجانده شده است. .IP "\fB\-Wno\-pmf\-conversions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-pmf-conversions (C++ and Objective-C++ only)" غیرفعال کردن پیام تشخیصی برای تبدیل یک اشاره‌گر مقید به تابع عضو (bound pointer to member function) به یک اشاره‌گر معمولی. .IP "\fB\-Wsign\-promo\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wsign-promo (C++ and Objective-C++ only)" هشدار هنگامی که حل بارگذاری بیش از حد (overload resolution) ارتقا از یک نوع بدون علامت یا شمارشی به یک نوع علامت‌دار را به تبدیل به یک نوع بدون علامت با اندازه یکسان ترجیح می‌دهد. نسخه‌های قبلی G++ سعی در حفظ وضعیت بدون علامت داشتند، اما استاندارد رفتار فعلی را الزامی کرده است. .IP "\fB\-Wtemplates\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wtemplates (C++ and Objective-C++ only)" هشدار هنگام مواجهه با اعلان یک قالب اولیه (primary template). برخی از قوانین کدنویسی استفاده از قالب‌ها را منع می‌کنند و این گزینه می‌تواند برای اعمال آن قانون استفاده شود. این هشدار درون فایل‌های سرایند سیستمی، مانند STL، غیرفعال است، بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان قالب‌ها را نمونه‌سازی یا تخصیص داد. .IP "\fB\-Wmismatched\-new\-delete\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wmismatched-new-delete (C++ and Objective-C++ only)" هشدار برای عدم تطابق بین فراخوانی‌های \f(CW\*(C`operator new\*(C'\fR یا \f(CW\*(C`operator delete\*(C'\fR و فراخوانی متناظر با تابع تخصیص یا آزادسازی حافظه. این هشدار شامل فراخوانی‌های \f(CW\*(C`operator delete\*(C'\fR در C++ با اشاره‌گرهای بازگردانده شده از شکل‌های ناسازگار \f(CW\*(C`operator new\*(C'\fR، یا از توابع دیگری است که شیء‌هایی را تخصیص می‌دهند که \f(CW\*(C`operator delete\*(C'\fR برای آن‌ها آزادساز مناسبی نیست، و همچنین شامل فراخوانی سایر توابع آزادسازی با اشاره‌گرهای برگشتی از \f(CW\*(C`operator new\*(C'\fR می‌شود که تابع آزادسازی برای آن‌ها مناسب نیست. .Sp برای مثال، عبارت \f(CW\*(C`delete\*(C'\fR در تابع زیر تشخیص داده می‌شود زیرا با شکل آرایه‌ای عبارت \f(CW\*(C`new\*(C'\fR که آرگومان اشاره‌گر از آن دریافت شده است مطابقت ندارد. به همین ترتیب، فراخوانی تابع \f(CW\*(C`free\*(C'\fR نیز تشخیص داده می‌شود. .Sp .Vb 4 \& void f () \& { \& int *a = new int[n]; \& delete a; // warning: mismatch in array forms of expressions \& \& char *p = new char[n]; \& free (p); // warning: mismatch between new and free \& } .Ve .Sp گزینه مرتبط \fB\-Wmismatched\-dealloc\fR عدم تطابق‌های مربوط به توابع تخصیص و آزادسازی حافظه به غیر از \f(CW\*(C`operator new\*(C'\fR و \f(CW\*(C`operator delete\*(C'\fR را تشخیص می‌دهد. .Sp گزینه \&\fB\-Wmismatched\-new\-delete\fR در \fB\-Wall\fR گنجانده شده است. .IP "\fB\-Wmismatched\-tags\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wmismatched-tags (C++ and Objective-C++ only)" هشدار برای اعلان‌های structها، کلاس‌ها و قالب‌های کلاس و تخصیص‌های آن‌ها با یک class\-key که با تعریف یا با اولین اعلان (در صورت عدم ارائه تعریف) مطابقت ندارد. .Sp برای مثال، اعلان \f(CW\*(C`struct Object\*(C'\fR در فهرست آرگومان‌های \f(CW\*(C`draw\*(C'\fR موجب این هشدار می‌شود. برای جلوگیری از آن، یا class\-key زائد \f(CW\*(C`struct\*(C'\fR را حذف کنید یا آن را با \f(CW\*(C`class\*(C'\fR جایگزین نمایید تا با تعریف آن مطابقت داشته باشد. .Sp .Vb 5 \& class Object { \& public: \& virtual ~Object () = 0; \& }; \& void draw (struct Object*); .Ve .Sp همان‌طور که مثال بالا نشان می‌دهد، اعلان یک کلاس با class\-key به‌صورت \f(CW\*(C`struct\*(C'\fR اشتباه نیست. هدف از گزینه \fB\-Wmismatched\-tags\fR کمک به دستیابی به سبکی یکدست در اعلان‌های کلاس است. در کدی که قرار است به کامپایلرهای مبتنی بر Windows پورت شود، این هشدار به جلوگیری از ارجاعات حل‌نشده (unresolved references) ناشی از تفاوت در درهم‌سازی نام‌ها (mangling) برای نمادهای اعلان‌شده با class\-keyهای مختلف کمک می‌کند. این گزینه می‌تواند به‌تنهایی یا همراه با \fB\-Wredundant\-tags\fR استفاده شود..IP "\fB\-Wmultiple\-inheritance\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wmultiple-inheritance (C++ and Objective-C++ only)" هنگامی که یک کلاس با چندین کلاس پایهٔ مستقیم تعریف شود، هشدار می‌دهد. برخی قواعد کدنویسی وراثت چندگانه را مجاز نمی‌دانند، و این گزینه می‌تواند برای اعمال آن قاعده به کار رود. این هشدار درون فایل‌های سرایند سیستمی، مانند STL، غیرفعال است؛ بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان کلاس‌هایی تعریف کرد که به طور غیرمستقیم از وراثت چندگانه استفاده می‌کنند. .IP \fB\-Wvirtual\-inheritance\fR 4 .IX Item "-Wvirtual-inheritance" هنگامی که یک کلاس با یک کلاس پایهٔ مستقیم مجازی تعریف شود، هشدار می‌دهد. برخی قواعد کدنویسی وراثت مجازی را مجاز نمی‌دانند، و این گزینه می‌تواند برای اعمال آن قاعده به کار رود. این هشدار درون فایل‌های سرایند سیستمی، مانند STL، غیرفعال است؛ بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان کلاس‌هایی تعریف کرد که به طور غیرمستقیم از وراثت مجازی استفاده می‌کنند. .IP \fB\-Wno\-virtual\-move\-assign\fR 4 .IX Item "-Wno-virtual-move-assign" هشدارهای مربوط به ارث‌بری از یک پایهٔ مجازی دارای عملگر انتساب انتقال (move assignment) غیربدیهی در C++11 را سرکوب می‌کند. این مورد خطرناک است زیرا اگر کلاس پایهٔ مجازی از بیش از یک مسیر قابل دسترسی باشد، چندین بار منتقل (move) می‌شود؛ این بدان معناست که هر دو شیء در وضعیت منتقل‌شده (moved\-from) قرار می‌گیرند. اگر عملگر انتساب انتقال به گونه‌ای نوشته شده باشد که از انتقال از یک شیء منتقل‌شده اجتناب کند، می‌توان این هشدار را غیرفعال کرد. .IP \fB\-Wnamespaces\fR 4 .IX Item "-Wnamespaces" هنگامی که تعریف یک فضای‌نام (namespace) باز می‌شود، هشدار می‌دهد. برخی قواعد کدنویسی استفاده از فضاهای‌نام را منع می‌کنند، و این گزینه می‌تواند برای اعمال آن قاعده به کار رود. این هشدار درون فایل‌های سرایند سیستمی، مانند STL، غیرفعال است؛ بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان از دستورهای using و نام‌های واجد شرایط (qualified names) استفاده کرد. .IP "\fB\-Wno\-template\-body\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-template-body (C++ and Objective-C++ only)" تشخیص خطاها را هنگام تجزیهٔ یک الگو (template) غیرفعال کرده و در عوض تنها هنگام نمونه‌سازی (instantiation) الگو خطا صادر می‌کند. این پرچم همچنین می‌تواند برای تنزل دادن این خطاها به هشدار با \fBWno\-error=\fR یا \&\fB\-fpermissive\fR استفاده شود. .IP "\fB\-Wno\-template\-id\-cdtor\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-template-id-cdtor (C++ and Objective-C++ only)" هشدار دربارهٔ استفاده از simple\-template\-id به عنوان declarator\-id یک سازنده یا مخرب را غیرفعال می‌کند؛ این مورد در C++20 از طریق DR 2237 نامعتبر شد. برای نمونه: .Sp .Vb 4 \& template struct S { \& S(); // should be S(); \& ~S(); // should be ~S(); \& }; .Ve .Sp \&\fB\-Wtemplate\-id\-cdtor\fR به طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است؛ همچنین توسط \fB\-Wc++20\-compat\fR نیز فعال می‌شود. .IP \fB\-Wtemplate\-names\-tu\-local\fR 4 .IX Item "-Wtemplate-names-tu-local" هنگامی که بدنهٔ یک الگو، افشای (exposure) یک موجودیت محلی واحد ترجمه (translation\-unit\-local) را پنهان می‌کند، هشدار می‌دهد. در بیشتر موارد، ارجاع به یک موجودیت محلی واحد ترجمه (مانند یک اعلان با پیوند درونی / internal linkage) درون موجودیتی که به CMI یک ماژول فرستاده می‌شود، خطا است. با این حال، درون مقداردهندهٔ اولیهٔ یک متغیر یا در بدنهٔ یک تابع غیرخطی (non\-inline)، این یک افشا محسوب نمی‌شود و خطایی صادر نمی‌گردد. .Sp این وضعیت می‌تواند موجب شود الگوهای متغیر یا تابع در صورت ارجاع به چنین موجودیتی به طور تصادفی غیرقابل استفاده شوند، زیرا سایر واحدهای ترجمه‌ای که الگو را وارد (import) می‌کنند، هرگز قادر به نمونه‌سازی آن نخواهند بود. این هشدار تلاش می‌کند مواردی را که این حالت ممکن است رخ دهد شناسایی کند. وجود یک نمونه‌سازی صریح (explicit instantiation) این هشدار را خاموش می‌کند. .Sp این پرچم توسط \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wno\-expose\-global\-module\-tu\-local\fR 4 .IX Item "-Wno-expose-global-module-tu-local" افشای یک موجودیت محلی واحد ترجمه از طریق رابط ماژول نامعتبر است، زیرا این کار ممکن است باعث نقض ODR شده و به شکل خطاهای پیوند یا رفتارهای غیرمنتظرهٔ دیگر بروز پیدا کند. با این وجود، بسیاری از کتابخانه‌های موجود، موجودیت‌های TU\-local را در رابط خود اعلان می‌کنند، و اجتناب از افشای این موجودیت‌ها در برخی موارد ممکن است دشوار باشد. .Sp به عنوان یک افزونه، GCC اجازهٔ افشای متغیرها و توابع درونی اعلان‌شده در قطعهٔ ماژول سراسری (global module fragment) را می‌دهد. این هشدار رخ دادن چنین افشای نامعتبری را نشان می‌دهد و می‌تواند با استفاده از عملوندهای پیش‌پردازندهٔ تشخیصی (diagnostic pragmas) در محل افشا، یا در نقطهٔ اعلان اعلانِ درونی خاموش شود. این قاعده در مورد اعلان‌های \f(CW\*(C`export using\*(C'\fR که چنین موجودیت‌هایی را نام می‌برند نیز اعمال می‌شود. .Sp در صورت ترکیب با \fB\-Wtemplate\-names\-tu\-local\fR، کامپایلر GCC همچنین دربارهٔ ارجاعات غیر از نوع افشا به موجودیت‌های TU\-local در بدنهٔ الگوها هشدار خواهد داد. چنین الگوهایی همچنان می‌توانند در سایر TUها نمونه‌سازی شوند اما خطرات فوق در رابطه با افشای موجودیت‌های محلی واحد ترجمه همچنان برقرار است. .Sp این هشدار به طور پیش‌فرض فعال است و توسط \&\fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wno\-external\-tu\-local\fR 4 .IX Item "-Wno-external-tu-local" هنگام نام بردن از یک موجودیت TU\-local در خارج از واحد ترجمه‌ای که در آن اعلان شده است، هشدار می‌دهد. چنین اعلان‌هایی در طول جستجوی نام (name lookup) نادیده گرفته خواهند شد. این حالت می‌تواند هنگام انجام ADL از یک الگوی اعلان‌شده در همان TU تابع درونی رخ دهد: .Sp .Vb 6 \& export module M; \& template void foo(T t) { \& bar(t); \& } \& struct S {} s; \& static void bar(S) {} // internal linkage \& \& // instantiating foo(s) from outside this TU can see ::bar, \& // but naming it there is ill\-formed. .Ve .Sp برای دور زدن این مشکل می‌توان \f(CW\*(C`bar\*(C'\fR را با استفاده از \&\f(CW\*(C`extern "C++"\*(C'\fR به ماژول سراسری متصل کرد. .Sp این هشدار به طور پیش‌فرض فعال است و توسط \&\fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-terminate\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-terminate (C++ and Objective-C++ only)" هشدار دربارهٔ عبارت throw را که بلافاصله منجر به فراخوانی \&\f(CW\*(C`terminate\*(C'\fR می‌شود، غیرفعال می‌کند. .IP "\fB\-Wno\-vexing\-parse\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-vexing-parse (C++ and Objective-C++ only)" دربارهٔ ابهام نحوی «آزاردهنده‌ترین تجزیه» (most vexing parse) هشدار می‌دهد. این گزینه دربارهٔ مواردی هشدار می‌دهد که در آن‌ها یک اعلان شبیه به تعریف یک متغیر به نظر می‌رسد، اما زبان C++ ایجاب می‌کند که به عنوان یک اعلان تابع تفسیر شود. برای نمونه: .Sp .Vb 4 \& void f(double a) { \& int i(); // extern int i (void); \& int n(int(a)); // extern int n (int); \& } .Ve .Sp نمونه‌ای دیگر: .Sp .Vb 6 \& struct S { S(int); }; \& void f(double a) { \& S x(int(a)); // extern struct S x (int); \& S y(int()); // extern struct S y (int (*) (void)); \& S z(); // extern struct S z (void); \& } .Ve .Sp این هشدار گزینه‌هایی را برای نحوهٔ برخورد با چنین ابهامی پیشنهاد می‌دهد؛ برای مثال، می‌تواند پیشنهاد دهد که پرانتزها حذف شوند یا به جای آن از آکولادها استفاده شود. .Sp این هشدار به طور پیش‌فرض فعال است. .IP "\fB\-Wno\-class\-conversion\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-class-conversion (C++ and Objective-C++ only)" هنگامی که یک تابع تبدیل (conversion function) یک شیء را به همان نوع، به یک کلاس پایه از آن نوع، یا به void تبدیل می‌کند، هشدار ندهد؛ چنین تابع تبدیلی هرگز فراخوانی نخواهد شد. .IP "\fB\-Wvolatile\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wvolatile (C++ and Objective-C++ only)" دربارهٔ استفاده‌های منسوخ‌شده از توصیف‌گر \f(CW\*(C`volatile\*(C'\fR هشدار می‌دهد. این شامل عبارت‌های پسوندی و پیشوندی \f(CW\*(C`++\*(C'\fR و \f(CW\*(C`\-\-\*(C'\fR برای انواع دارای توصیف‌گر \&\f(CW\*(C`volatile\*(C'\fR، استفاده از انتساب‌های ساده در مواردی که عملوند سمت چپ یک نوع غیرکلاسیِ توصیف‌شده با \f(CW\*(C`volatile\*(C'\fR است برای مقدار آن‌ها، انتساب‌های مرکب که عملوند سمت چپ آن‌ها یک نوع غیرکلاسیِ توصیف‌شده با \&\f(CW\*(C`volatile\*(C'\fR است، نوع بازگشتی تابع توصیف‌شده با \f(CW\*(C`volatile\*(C'\fR، نوع پارامتر توصیف‌شده با \&\f(CW\*(C`volatile\*(C'\fR، و اتصال‌های ساخت‌یافته (structured bindings) از یک نوع توصیف‌شده با \&\f(CW\*(C`volatile\*(C'\fR می‌شود. این کاربرد در C++20 منسوخ شده است. .Sp این گزینه به طور پیش‌فرض با \fB\-std=c++20\fR فعال می‌شود. پیش از \&\fB\-std=c++20\fR، با مشخص کردن صریح \fB\-Wdeprecated\fR فعال می‌گردد. .IP \fB\-Waligned\-new\fR 4 .IX Item "-Waligned-new" .PD 0 .IP \fB\-Waligned\-new=\fR[\fBnone\fR|\fBglobal\fR|\fBall\fR] 4 .IX Item "-Waligned-new=[none|global|all]" .PD دربارهٔ عبارت new از نوعی که به ترازبندی (alignment) بزرگ‌تری نسبت به \&\f(CWalignof(std::max_align_t)\fR نیاز دارد اما از یک تابع تخصیص بدون پارامتر ترازبندی صریح استفاده می‌کند، هشدار می‌دهد. این گزینه توسط \fB\-Wall\fR فعال می‌شود. .Sp به طور معمول این گزینه تنها دربارهٔ توابع تخصیص سراسری هشدار می‌دهد، اما \&\fB\-Waligned\-new=all\fR دربارهٔ توابع تخصیص عضو کلاس نیز هشدار صادر می‌کند. .IP \fB\-Wno\-placement\-new\fR 4 .IX Item "-Wno-placement-new" .PD 0 .IP \fB\-Wplacement\-new=\fR\fIn\fR 4 .IX Item "-Wplacement-new=n".PD هشدار درباره عبارت‌های placement new با رفتار تعریف‌نشده (undefined behavior)، مانند ساخت یک شیء در بافری که از نوع آن شیء کوچکتر است. برای مثال، عبارت placement new زیر تشخیص داده می‌شود زیرا سعی می‌کند آرایه‌ای از ۶۴ عدد صحیح را در بافری بسازد که اندازه آن تنها ۶۴ بایت است. .Sp .Vb 2 \& char buf [64]; \& new (buf) int[64]; .Ve .Sp این هشدار به‌طور پیش‌فرض فعال است. .RS 4 .IP \fB\-Wplacement\-new=1\fR 4 .IX Item "-Wplacement-new=1" این سطح هشدار پیش‌فرض \fB\-Wplacement\-new\fR است. در این سطح، هشدار برای برخی ساختارهای اکیداً تعریف‌نشده که GCC آن‌ها را به عنوان افزونه‌هایی (extensions) برای سازگاری با کدهای قدیمی مجاز می‌داند، صادر نمی‌شود. برای نمونه، عبارت \f(CW\*(C`new\*(C'\fR زیر در این سطح تشخیص داده نمی‌شود، هرچند که طبق استاندارد C++ رفتار تعریف‌نشده دارد زیرا فراتر از انتهای آرایه تک‌عنصری می‌نویسد. .Sp .Vb 3 \& struct S { int n, a[1]; }; \& S *s = (S *)malloc (sizeof *s + 31 * sizeof s\->a[0]); \& new (s\->a)int [32](); .Ve .IP \fB\-Wplacement\-new=2\fR 4 .IX Item "-Wplacement-new=2" در این سطح، علاوه بر تشخیص تمام ساختارهایی که در سطح ۱ بررسی می‌شوند، هشداری نیز برای عبارت‌های placement new صادر می‌شود که شیئی را در آخرین عضو ساختار می‌سازند، در صورتی که نوع آن یک آرایه تک‌عنصری بوده و اندازه آن کمتر از اندازه شیء در حال ساخت باشد. در حالی که مثال قبلی در این سطح گزارش می‌شود، ساختار زیر از افزونه آرایه با عضو منعطف (flexible member array) استفاده می‌کند تا از بروز هشدار در سطح ۲ جلوگیری کند. .Sp .Vb 3 \& struct S { int n, a[]; }; \& S *s = (S *)malloc (sizeof *s + 32 * sizeof s\->a[0]); \& new (s\->a)int [32](); .Ve .RE .RS 4 .RE .IP \fB\-Wcatch\-value\fR 4 .IX Item "-Wcatch-value" .PD 0 .IP "\fB\-Wcatch\-value=\fR\fIn\fR\fB \fR(فقط C++ و Objective\-C++)" 4 .IX Item "-Wcatch-value=n (C++ and Objective-C++ only)" .PD هشدار درباره کنترل‌کننده‌های catch که دریافت را از طریق مرجع (reference) انجام نمی‌دهند. با \fB\-Wcatch\-value=1\fR (یا به‌طور خلاصه \fB\-Wcatch\-value\fR) درباره نوع‌های کلاس چندریختی (polymorphic) که به صورت مقداری (by value) دریافت می‌شوند، هشدار می‌دهد. با \fB\-Wcatch\-value=2\fR درباره تمام نوع‌های کلاس که به صورت مقداری دریافت می‌شوند، هشدار می‌دهد. با \fB\-Wcatch\-value=3\fR درباره تمام نوع‌هایی که از طریق مرجع دریافت نمی‌شوند، هشدار می‌دهد. \fB\-Wcatch\-value\fR با \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wconditionally\-supported\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wconditionally-supported (C++ and Objective-C++ only)" هشدار برای ساختارهای مشروط‌به‌پشتیبانی (conditionally\-supported طبق C++11 [intro.defs]). .IP "\fB\-Wno\-defaulted\-function\-deleted\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-defaulted-function-deleted (C++ and Objective-C++ only)" هشدار هنگامی که یک تابع صراحتاً پیش‌فرض‌شده (defaulted) توسط کامپایلر حذف (deleted) می‌شود. این وضعیت زمانی می‌تواند رخ دهد که نوع اعلان‌شدهٔ تابع با نوع تابعی که به‌طور ضمنی اعلان می‌شد مطابقت نداشته باشد. این هشدار به‌طور پیش‌فرض فعال است. .IP "\fB\-Wno\-delete\-incomplete\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-delete-incomplete (C++ and Objective-C++ only)" عدم صدور هشدار هنگام حذف (delete) یک اشاره‌گر به نوع ناقص (incomplete type)، که ممکن است در زمان اجرا منجر به رفتار تعریف‌نشده شود. این هشدار به‌طور پیش‌فرض فعال است. .IP "\fB\-Wextra\-semi\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wextra-semi (C++, Objective-C++ only)" هشدار درباره نقطه‌ویرگول‌های اضافه. زمینه‌های گوناگونی وجود دارد که یک نقطه‌ویرگول اضافه ممکن است در آن‌ها رخ دهد. یکی از آن‌ها نقطه‌ویرگول پس از تعاریف توابع درون‌کلاسی (in\-class) است که در تمام گویش‌های C++ معتبر است (و هرگز یک pedwarn محسوب نمی‌شود): .Sp .Vb 3 \& struct S { \& void foo () {}; \& }; .Ve .Sp مورد دیگر نقطه‌ویرگول اضافه در دامنهٔ فضای نام (namespace scope) است که از C++11 به بعد مجاز شده است (بنابراین در C++98 یک pedwarn است): .Sp .Vb 3 \& struct S { \& }; \& ; .Ve .Sp و مورد دیگر نقطه‌ویرگول اضافه در تعاریف کلاس است که از C++11 به بعد مجاز شده است (بنابراین در C++98 یک pedwarn است): .Sp .Vb 4 \& struct S { \& int a; \& ; \& }; .Ve .IP "\fB\-Wno\-global\-module\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-global-module (C++ and Objective-C++ only)" غیرفعال کردن پیام اخطار برای زمانی که قطعهٔ ماژول سراسری (global module fragment) یک واحد ماژول، فقط از دستورالعمل‌های پیش‌پردازنده تشکیل نشده باشد. .IP "\fB\-Wno\-inaccessible\-base\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-inaccessible-base (C++, Objective-C++ only)" این گزینه هشدارهایی را کنترل می‌کند که هنگام غیرقابل دسترس بودن یک کلاس پایه در کلاس مشتق‌شده از آن به دلیل ابهام رخ می‌دهد. این هشدار به‌طور پیش‌فرض فعال است. توجه داشته باشید که هشدار برای کلاس‌های پایه مجازی مبهم، با گزینه \fB\-Wextra\fR فعال می‌شود. .Sp .Vb 1 \& struct A { int a; }; \& \& struct B : A { }; \& \& struct C : B, A { }; .Ve .IP \fB\-Wno\-inherited\-variadic\-ctor\fR 4 .IX Item "-Wno-inherited-variadic-ctor" نادیده گرفتن هشدارها درباره استفاده از سازنده‌های ارث‌بری‌شدهٔ C++11، هنگامی که کلاس پایه موروثی دارای یک سازنده با آرگومان‌های متغیر به سبک C (variadic constructor) باشد؛ این هشدار به‌طور پیش‌فرض فعال است زیرا سه‌نقطه (...) به ارث برده نمی‌شود. .IP "\fB\-Wno\-invalid\-offsetof\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-invalid-offsetof (C++ and Objective-C++ only)" نادیده گرفتن هشدارهای ناشی از اِعمال ماکروی \f(CW\*(C`offsetof\*(C'\fR روی یک نوع غیر POD (یا non\-POD). بر اساس استاندارد ISO C++ سال ۲۰۱۴، اعمال \f(CW\*(C`offsetof\*(C'\fR روی نوعی که چیدمان غیراستاندارد (non\-standard\-layout) دارد تعریف‌نشده است. با این حال، در پیاده‌سازی‌های موجود C++، معمولاً \f(CW\*(C`offsetof\*(C'\fR نتایج معناداری می‌دهد. این پرچم برای کاربرانی است که می‌دانند در حال نوشتن کد غیرقابل‌حمل (nonportable) هستند و عمداً تصمیم گرفته‌اند هشدار مربوط به آن را نادیده بگیرند. .Sp ممکن است محدودیت‌های مربوط به \f(CW\*(C`offsetof\*(C'\fR در نسخهٔ آیندهٔ استاندارد C++ کاهش یابد. .IP "\fB\-Wsized\-deallocation\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wsized-deallocation (C++ and Objective-C++ only)" هشدار درباره تعریف یک تابع آزادسازی حافظه بدون اندازه (unsized deallocation function) .Sp .Vb 2 \& void operator delete (void *) noexcept; \& void operator delete[] (void *) noexcept; .Ve .Sp بدون تعریف تابع متناظر آزادسازی با اندازه (sized deallocation function) .Sp .Vb 2 \& void operator delete (void *, std::size_t) noexcept; \& void operator delete[] (void *, std::size_t) noexcept; .Ve .Sp یا برعکس. این هشدار با \fB\-Wextra\fR همراه با \&\fB\-fsized\-deallocation\fR فعال می‌شود. .IP \fB\-Wsuggest\-final\-types\fR 4 .IX Item "-Wsuggest-final-types" هشدار درباره نوع‌هایی با متدهای مجازی که اگر نوع با مشخص‌کنندهٔ \f(CW\*(C`final\*(C'\fR در C++11 اعلان می‌شد، یا در صورت امکان در یک فضای نام ناشناس (anonymous namespace) اعلان می‌شد، کیفیت کد بهبود می‌یافت. این کار به GCC اجازه می‌دهد فراخوانی‌های چندریختی را با تهاجم بیشتری غیرمجازی‌سازی (devirtualize) کند. این هشدار همراه با بهینه‌سازی زمان پیوند (link\-time optimization)، جایی که اطلاعات مربوط به گراف سلسله‌مراتب کلاس‌ها کامل‌تر است، اثربخشی بیشتری دارد. .IP \fB\-Wsuggest\-final\-methods\fR 4 .IX Item "-Wsuggest-final-methods" هشدار درباره متدهای مجازی که اگر متد با مشخص‌کنندهٔ \f(CW\*(C`final\*(C'\fR در C++11 اعلان می‌شد، یا در صورت امکان نوع آن در یک فضای نام ناشناس یا با مشخص‌کنندهٔ \f(CW\*(C`final\*(C'\fR اعلان می‌شد، کیفیت کد بهبود می‌یافت. این هشدار همراه با بهینه‌سازی زمان پیوند (link\-time optimization)، جایی که اطلاعات مربوط به گراف سلسله‌مراتب کلاس‌ها کامل‌تر است، اثربخشی بیشتری دارد. توصیه می‌شود ابتدا پیشنهادهای \fB\-Wsuggest\-final\-types\fR را بررسی کرده و سپس با نشانه‌گذاری‌های جدید برنامه را دوباره بسازید (rebuild). .IP \fB\-Wsuggest\-override\fR 4 .IX Item "-Wsuggest-override" هشدار درباره بازنویسی (override) توابع مجازی که با کلمهٔ کلیدی \&\f(CW\*(C`override\*(C'\fR مشخص نشده‌اند. .IP "\fB\-Wno\-conversion\-null\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-conversion-null (C++ and Objective-C++ only)" عدم صدور هشدار برای تبدیل‌های بین \f(CW\*(C`NULL\*(C'\fR و نوع‌های غیر اشاره‌گر. گزینه \fB\-Wconversion\-null\fR به‌طور پیش‌فرض فعال است..SS "گزینه‌های واپایش گویش‌های Objective\-C و Objective\-C++ (Options Controlling Objective-C and Objective-C++ Dialects)" .IX Subsection "Options Controlling Objective-C and Objective-C++ Dialects" (یادداشت: این راهنما خودِ زبان‌های Objective\-C و Objective\-C++ را شرح نمی‌دهد.) .PP این بخش گزینه‌های خط فرمانی را شرح می‌دهد که تنها برای برنامه‌های Objective\-C و Objective\-C++ معنادار هستند. شما همچنین می‌توانید از بیشتر گزینه‌های مستقل از زبانِ کامپایلر GNU استفاده کنید. برای نمونه، ممکن است فایلی مانند \fIsome_class.m\fR را به این صورت کامپایل کنید: .PP .Vb 1 \& gcc \-g \-fgnu\-runtime \-O \-c some_class.m .Ve .PP در این مثال، \fB\-fgnu\-runtime\fR گزینه‌ای است که تنها برای برنامه‌های Objective\-C و Objective\-C++ در نظر گرفته شده است؛ سایر گزینه‌ها را می‌توانید با هر زبان دیگری که توسط GCC پشتیبانی می‌شود به کار ببرید. .PP توجه داشته باشید از آنجا که Objective\-C افزونه‌ای بر زبان C است، کامپایل‌های Objective\-C ممکن است از گزینه‌های مخصوص فرانت‌اند C نیز استفاده کنند (برای نمونه، \&\fB\-Wtraditional\fR). به‌طور مشابه، کامپایل‌های Objective\-C++ نیز می‌توانند از گزینه‌های مخصوص C++ بهره ببرند (برای نمونه، \fB\-Wabi\fR). .PP در اینجا فهرستی از گزینه‌هایی آمده است که \fIتنها\fR برای کامپایل برنامه‌های Objective\-C و Objective\-C++ کاربرد دارند: .IP \fB\-fconstant\-string\-class=\fR\fIclass\-name\fR 4 .IX Item "-fconstant-string-class=class-name" از \fIclass\-name\fR به‌عنوان نام کلاسی که باید برای هر رشتهٔ لیترال مشخص‌شده با نحو \f(CW\*(C`@"..."\*(C'\fR نمونه‌سازی شود، استفاده می‌کند. در صورت استفاده از زمان اجرای GNU، نام کلاس پیش‌فرض \f(CW\*(C`NXConstantString\*(C'\fR است و در صورت استفاده از زمان اجرای NeXT، نام آن \&\f(CW\*(C`NSConstantString\*(C'\fR خواهد بود (پایین‌تر را ببینید). روی پلتفرم‌های Darwin / macOS، در صورت وجود گزینهٔ \fB\-fconstant\-cfstrings\fR، این گزینه بر تنظیمات \fB\-fconstant\-string\-class\fR تقدم می‌یابد و موجب می‌شود تا لیترال‌های \&\f(CW\*(C`@"..."\*(C'\fR به‌صورت رشته‌های ثابت CoreFoundation چیده شوند. توجه داشته باشید که \fB\-fconstant\-cfstrings\fR یک نام مستعار برای گزینهٔ معادل وابسته به مقصدِ \&\fB\-mconstant\-cfstrings\fR است. .IP \fB\-fgnu\-runtime\fR 4 .IX Item "-fgnu-runtime" تولید کد شیء سازگار با زمان اجرای استاندارد GNU Objective\-C. این حالت برای بیشتر انواع سیستم‌ها پیش‌فرض است. .IP \fB\-fnext\-runtime\fR 4 .IX Item "-fnext-runtime" تولید خروجی سازگار با زمان اجرای NeXT. این حالت برای سیستم‌های مبتنی بر NeXT، از جمله Darwin / macOS، پیش‌فرض است. ماکروی \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR تنها زمانی از پیش تعریف می‌شود که از این گزینه استفاده شود. .IP \fB\-fno\-nil\-receivers\fR 4 .IX Item "-fno-nil-receivers" فرض می‌کند که تمام ارسال‌های پیام در Objective\-C (\f(CW\*(C`[receiver message:arg]\*(C'\fR) در این واحد ترجمه اطمینان می‌دهند که گیرنده \f(CW\*(C`nil\*(C'\fR نیست. این امر امکان استفاده از نقاط ورود کارآمدتر در زمان اجرا را فراهم می‌سازد. این گزینه تنها همراه با زمان اجرای NeXT و نسخهٔ 0 یا 1 از ABI در دسترس است. .IP \fB\-fobjc\-abi\-version=\fR\fIn\fR 4 .IX Item "-fobjc-abi-version=n" استفاده از نسخهٔ \fIn\fR از ABI مربوط به Objective\-C برای زمان اجرای انتخاب‌شده. این گزینه در حال حاضر تنها برای زمان اجرای NeXT پشتیبانی می‌شود. در آن حالت، نسخهٔ 0 همان ABI سنتی (۳۲ بیتی) بدون پشتیبانی از مشخصه‌ها (properties) و دیگر امکانات اضافه‌شده در Objective\-C 2.0 است. نسخهٔ 1 همان ABI سنتی (۳۲ بیتی) همراه با پشتیبانی از مشخصه‌ها و دیگر امکانات اضافه‌شده در Objective\-C 2.0 است. نسخهٔ 2 همان ABI مدرن (۶۴ بیتی) است. اگر چیزی تعیین نشود، مقدار پیش‌فرض روی ماشین‌های مقصد ۳۲ بیتی نسخهٔ 0 و روی ماشین‌های مقصد ۶۴ بیتی نسخهٔ 2 خواهد بود. .IP \fB\-fobjc\-call\-cxx\-cdtors\fR 4 .IX Item "-fobjc-call-cxx-cdtors" برای هر کلاس Objective\-C، بررسی می‌کند که آیا متغیر نمونه‌ای از آن، یک شیء C++ با یک سازندهٔ پیش‌فرض غیربدیهی (non-trivial) است یا خیر. در این صورت، یک متد نمونهٔ ویژهٔ \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR تولید می‌کند که سازنده‌های پیش‌فرض غیربدیهی را به ترتیب روی تمامی این‌گونه متغیرهای نمونه اجرا کرده و سپس \f(CW\*(C`self\*(C'\fR را برمی‌گرداند. به‌طور مشابه، بررسی می‌کند که آیا متغیر نمونه‌ای شیء C++ با یک ویرانگر (destructor) غیربدیهی است یا خیر، و اگر چنین باشد، متد ویژهٔ \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR را تولید می‌کند که تمامی چنین ویرانگرهای پیش‌فرضی را به ترتیب معکوس اجرا می‌نماید. .Sp متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR که بدین‌گونه تولید شده‌اند، تنها روی متغیرهای نمونه‌ای عمل می‌کنند که در کلاس فعلی Objective\-C اعلان شده‌اند و نه متغیرهایی که از ابرکلاس‌ها به ارث رسیده‌اند. فراخوانی همهٔ چنین متدهایی در سلسله‌مراتب وراثت یک شیء بر عهدهٔ زمان اجرای Objective\-C است. متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR بلافاصله پس از تخصیص نمونهٔ شیء جدید توسط زمان اجرا فراخوانی می‌شوند؛ متدهای \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR بلافاصله پیش از آنکه زمان اجرا نمونهٔ شیء را آزاد سازد، فراخوانی می‌گردند. .Sp تا زمان نگارش این راهنما، تنها زمان اجرای NeXT در Mac OS X 10.4 و جدیدتر از فراخوانی متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR پشتیبانی می‌کند. .IP \fB\-fobjc\-direct\-dispatch\fR 4 .IX Item "-fobjc-direct-dispatch" امکان پرش‌های سریع به توزیع‌کنندهٔ پیام (message dispatcher) را فراهم می‌کند. در Darwin این کار از طریق comm page انجام می‌شود. .IP \fB\-fobjc\-exceptions\fR 4 .IX Item "-fobjc-exceptions" پشتیبانی نحوی برای مدیریت ساختاریافتهٔ استثناها در Objective\-C را، مشابه آنچه توسط C++ ارائه می‌شود، فعال می‌کند. این گزینه برای استفاده از کلیدواژه‌های Objective\-C شامل \f(CW@try\fR، \&\f(CW@throw\fR، \f(CW@catch\fR، \f(CW@finally\fR و \&\f(CW@synchronized\fR الزامی است. این گزینه با هر دو زمان اجرای GNU و NeXT در دسترس است (اما در Mac OS X 10.2 و قدیمی‌تر همراه با زمان اجرای NeXT در دسترس نیست). .IP \fB\-fobjc\-gc\fR 4 .IX Item "-fobjc-gc" فعال‌سازی بازیافت حافظه (garbage collection یا GC) در برنامه‌های Objective\-C و Objective\-C++. این گزینه تنها با زمان اجرای NeXT در دسترس است؛ زمان اجرای GNU پیاده‌سازی متفاوتی از بازیافت حافظه دارد که به پرچم‌های خاص کامپایلر نیازی ندارد. .IP \fB\-fobjc\-nilcheck\fR 4 .IX Item "-fobjc-nilcheck" برای زمان اجرای NeXT با نسخهٔ 2 از ABI، گیرندهٔ nil را در فراخوانی‌های متد پیش از انجام فراخوانی واقعی متد بررسی می‌کند. این رفتار پیش‌فرض است و می‌توان آن را با استفاده از \&\fB\-fno\-objc\-nilcheck\fR غیرفعال کرد. متدهای کلاس و فراخوانی‌های super صرف نظر از اینکه این پرچم روی چه مقداری تنظیم شده باشد، هرگز برای nil بررسی نمی‌شوند. در حال حاضر زمانی که از زمان اجرای GNU یا نسخهٔ قدیمی‌تر ABI زمان اجرای NeXT استفاده شود، این پرچم اثری ندارد. .IP \fB\-fobjc\-std=objc1\fR 4 .IX Item "-fobjc-std=objc1" پیروی از نحو زبان Objective\-C 1.0، زبانی که توسط GCC 4.0 شناسایی می‌شود. این مورد تنها بر امکانات افزوده‌شدهٔ Objective\-C به زبان C/C++ تأثیر می‌گذارد؛ این گزینه بر پیروی از استانداردهای C/C++ تأثیری ندارد، که آن مورد با پرچم‌های مجزای گزینه‌های گویش C/C++ واپایش می‌شود. هنگامی که از این گزینه همراه با کامپایلر Objective\-C یا Objective\-C++ استفاده شود، هرگونه نحو Objective\-C که برای GCC 4.0 شناخته‌شده نباشد رد می‌شود. این گزینه زمانی مفید است که بخواهید اطمینان حاصل کنید کد Objective\-C شما می‌تواند با نسخه‌های قدیمی‌تر GCC کامپایل شود. .IP \fB\-freplace\-objc\-classes\fR 4 .IX Item "-freplace-objc-classes" تولید یک نشانگر ویژه که به \fBld\|(1)\fR دستور می‌دهد فایل شیء حاصل را به‌صورت ایستا پیوند نزند، و در عوض به \fBdyld\|(1)\fR اجازه دهد که آن را در زمان اجرا بارگذاری کند. این گزینه همراه با حالت اشکال‌زدایی Fix\-and\-Continue به کار می‌رود، جایی که فایل شیء مورد نظر ممکن است در طول اجرای برنامه بازکامپایل شده و به‌صورت پویا بازبارگذاری شود، بدون آنکه نیازی به راه‌اندازی مجدد خود برنامه باشد. در حال حاضر، قابلیت Fix\-and\-Continue تنها همراه با زمان اجرای NeXT در Mac OS X 10.3 و جدیدتر در دسترس است. .IP \fB\-fzero\-link\fR 4 .IX Item "-fzero-link" هنگام کامپایل برای زمان اجرای NeXT، کامپایلر به‌طور معمول فراخوانی‌های \f(CWobjc_getClass("...")\fR را (هنگامی که نام کلاس در زمان کامپایل معلوم باشد) با ارجاع‌های ایستای کلاسی که در زمان بارگذاری مقداردهی اولیه می‌شوند جایگزین می‌کند، که این امر کارایی زمان اجرا را بهبود می‌بخشد. مشخص کردن پرچم \fB\-fzero\-link\fR این رفتار را لغو کرده و موجب می‌شود فراخوانی‌های \f(CWobjc_getClass("...")\fR حفظ شوند. این گزینه در حالت اشکال‌زدایی Zero\-Link مفید است، زیرا اجازه می‌دهد پیاده‌سازی‌های منفرد کلاس در حین اجرای برنامه تغییر داده شوند. زمان اجرای GNU در حال حاضر بدون در نظر گرفتن گزینه‌های خط فرمان، همواره فراخوانی‌های \f(CWobjc_get_class("...")\fR را حفظ می‌کند. .IP \fB\-fno\-local\-ivars\fR 4 .IX Item "-fno-local-ivars" به‌طور پیش‌فرض در Objective\-C می‌توان به متغیرهای نمونه از درون متدهای کلاسی که در آن اعلان شده‌اند دسترسی داشت، درست گویی که آن‌ها متغیرهای محلی هستند. این امر می‌تواند منجر به سایه‌اندازی (shadowing) میان متغیرهای نمونه و سایر متغیرهایی شود که با همان نام یا به‌صورت محلی درون یک متد کلاس یا به‌صورت سراسری اعلان شده‌اند. مشخص کردن پرچم \fB\-fno\-local\-ivars\fR این رفتار را غیرفعال کرده و بدین‌ترتیب از مشکلات سایه‌اندازی متغیرها جلوگیری می‌کند. .IP \fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] 4 .IX Item "-fivar-visibility=[public|protected|private|package]" میزان دیدِ پیش‌فرض متغیر نمونه را روی گزینهٔ مشخص‌شده تنظیم می‌کند، تا متغیرهای نمونه‌ای که خارج از دامنهٔ هرگونه دستورالعمل اصلاح‌کنندهٔ دسترسی اعلان شده‌اند، به‌طور پیش‌فرض دیدِ تعیین‌شده را داشته باشند. .IP \fB\-gen\-decls\fR 4 .IX Item "-gen-decls" تخلیهٔ (dump) اعلان‌های رابط (interface declarations) برای همهٔ کلاس‌های مشاهده‌شده در فایل منبع، در فایلی به نام \fIsourcename.decl\fR. .IP "\fB\-Wassign\-intercept\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wassign-intercept (Objective-C and Objective-C++ only)" هشدار در هر زمانی که یک انتساب در Objective\-C توسط بازیافت‌کنندهٔ حافظه (garbage collector) رهگیری شود. .IP "\fB\-Wno\-property\-assign\-default\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wno-property-assign-default (Objective-C and Objective-C++ only)" اگر برای مشخصهٔ (property) یک شیء Objective\-C هیچ معناشناسی انتسابی (assign semantics) مشخص نشده باشد، هشداری داده نشود. .IP "\fB\-Wno\-protocol\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wno-protocol (Objective-C and Objective-C++ only)" اگر کلاسی اعلان کند که یک پروتکل را پیاده‌سازی می‌کند، برای هر متدی در پروتکل که توسط کلاس پیاده‌سازی نشده باشد، یک هشدار صادر می‌شود. رفتار پیش‌فرض این است که برای هر متدی که به‌طور صریح در کلاس پیاده‌سازی نشده هشدار صادر شود، حتی اگر پیاده‌سازی متد از ابرکلاس به ارث رسیده باشد. اگر از گزینهٔ \fB\-Wno\-protocol\fR استفاده کنید، متدهای به ارث رسیده از ابرکلاس، پیاده‌سازی‌شده تلقی می‌شوند و هشداری برای آنها صادر نخواهد شد..IP "\fB\-Wobjc\-root\-class\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wobjc-root-class (Objective-C and Objective-C++ only)" چنانچه یک رابط کلاس (class interface) فاقد ابرکلاس باشد، هشدار می‌دهد. به عنوان مثال، بیشتر کلاس‌ها از \f(CW\*(C`NSObject\*(C'\fR (یا \f(CW\*(C`Object\*(C'\fR) ارث‌بری می‌کنند. هنگام اعلان کلاس‌هایی که قرار است کلاس ریشه باشند، می‌توان با نشانه‌گذاری رابط آن‌ها توسط \f(CW\*(C`_\|_attribute_\|_((objc_root_class))\*(C'\fR از این هشدار صرف‌نظر کرد. .IP "\fB\-Wselector\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wselector (Objective-C and Objective-C++ only)" اگر در حین کامپایل، چند متد با انواع مختلف برای یک انتخاب‌گر (selector) یکسان یافت شود، هشدار می‌دهد. این بررسی بر روی فهرست متدها در مرحله نهایی کامپایل انجام می‌شود. علاوه بر این، بررسی جداگانه‌ای برای هر انتخاب‌گری که در یک عبارت \f(CW@selector(...)\fR ظاهر شده و متد متناظر با آن در طول کامپایل یافت شده باشد، انجام می‌گیرد. از آنجا که این بررسی‌ها جدول متدها را تنها در پایان کامپایل پیمایش می‌کنند، چنانچه مرحله نهایی کامپایل حاصل نشود (مثلاً به دلیل بروز خطا هنگام کامپایل یا استفاده از گزینه \fB\-fsyntax\-only\fR)، این هشدارها تولید نمی‌شوند. .IP "\fB\-Wstrict\-selector\-match\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wstrict-selector-match (Objective-C and Objective-C++ only)" هنگام تلاش برای ارسال پیام با استفاده از یک انتخاب‌گر به گیرنده‌ای از نوع \f(CW\*(C`id\*(C'\fR یا \f(CW\*(C`Class\*(C'\fR، چنانچه چندین متد با انواع آرگومان و/یا انواع بازگشتی متفاوت برای آن انتخاب‌گر یافت شود، هشدار می‌دهد. هنگامی که این پرچم غیرفعال است (که رفتار پیش‌فرض می‌باشد)، کامپایلر در صورتی که تفاوت‌های یافت‌شده محدود به انواعی باشد که اندازه و تراز (alignment) یکسانی دارند، از این هشدارها چشم‌پوشی می‌کند. .IP "\fB\-Wundeclared\-selector\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wundeclared-selector (Objective-C and Objective-C++ only)" اگر یک عبارت \f(CW@selector(...)\fR که به یک انتخاب‌گر اعلان‌نشده اشاره دارد یافت شود، هشدار می‌دهد. یک انتخاب‌گر زمانی اعلان‌نشده تلقی می‌شود که هیچ متدی با آن نام پیش از عبارت \&\f(CW@selector(...)\fR، چه به صراحت در یک اعلان \&\f(CW@interface\fR یا \f(CW@protocol\fR، یا به طور ضمنی در یک بخش \f(CW@implementation\fR اعلان نشده باشد. این گزینه همواره بررسی‌های خود را به محض یافتن عبارت \f(CW@selector(...)\fR انجام می‌دهد، در حالی که \fB\-Wselector\fR این بررسی‌ها را تنها در مرحله نهایی کامپایل به انجام می‌رساند. این کار همچنین این شیوه نگارش کد را اعمال می‌کند که متدها و انتخاب‌گرها باید حتماً پیش از استفاده اعلان شوند. .IP \fB\-print\-objc\-runtime\-info\fR 4 .IX Item "-print-objc-runtime-info" یک هدر C تولید می‌کند که بزرگ‌ترین ساختار پاس‌داده‌شده با مقدار (by value) را، در صورت وجود، توصیف می‌نماید. .SS "گزینه‌های مهار OpenMP و OpenACC (Options Controlling OpenMP and OpenACC)" .IX Subsection "Options Controlling OpenMP and OpenACC" کامپایلر GCC با گزینه \fB\-fopenmp\fR از افزونه‌های OpenMP برای زبان‌های C، C++ و Fortran پشتیبانی می‌کند. به طور مشابه، افزونه‌های OpenACC در هر سه زبان با گزینه \fB\-fopenacc\fR پشتیبانی می‌شوند. .IP \fB\-foffload=disable\fR 4 .IX Item "-foffload=disable" .PD 0 .IP \fB\-foffload=default\fR 4 .IX Item "-foffload=default" .IP \fB\-foffload=\fR\fItarget\-list\fR 4 .IX Item "-foffload=target-list" .PD مشخص می‌کند که برای کدام مقصدهای برون‌سپاری (offload targets) در OpenMP و OpenACC باید کد تولید شود. رفتار پیش‌فرض، معادل \fB\-foffload=default\fR، تولید کد برای تمامی مقصدهای برون‌سپاری پشتیبانی‌شده است. حالت \fB\-foffload=disable\fR کد را تنها برای میزبان پشتیبان (host fallback) تولید می‌کند، در حالی که \&\fB\-foffload=\fR\fItarget\-list\fR کد را فقط برای فهرست مشخص‌شده‌ای از مقصدهای برون‌سپاری که با کاما جدا شده‌اند، تولید می‌نماید. .Sp مقصدهای برون‌سپاری در قالب سه‌تایی هدف (target\-triplet) درونی GCC مشخص می‌شوند. می‌توانید کامپایلر را با گزینه \fB\-v\fR اجرا کنید تا فهرست مقصدهای برون‌سپاری پیکربندی‌شده را ذیل \f(CW\*(C`OFFLOAD_TARGET_NAMES\*(C'\fR مشاهده نمایید. .IP \fB\-foffload\-options=\fR\fIoptions\fR 4 .IX Item "-foffload-options=options" .PD 0 .IP \fB\-foffload\-options=\fR\fItarget\-triplet\-list\fR\fB=\fR\fIoptions\fR 4 .IX Item "-foffload-options=target-triplet-list=options" .PD با استفاده از \fB\-foffload\-options=\fR\fIoptions\fR، کامپایلر GCC گزینه‌های (\fIoptions\fR) مشخص‌شده را به کامپایلرهای تمامی مقصدهای برون‌سپاریِ فعال منتقل می‌کند. می‌توانید با ساختار \fB\-foffload\-options=\fR\fItarget\-list\fR\fB=\fR\fIoptions\fR گزینه‌هایی را مشخص کنید که تنها بر روی یک یا چند مقصد معین اعمال شوند. \&\fItarget\-list\fR فهرستی جداشده با کاما در همان قالب گزینه \&\fB\-foffload=\fR است. .Sp خطوط فرمان متداول عبارتند از: .Sp .Vb 3 \& \-foffload\-options=\*(Aq\-fno\-math\-errno \-ffinite\-math\-only\*(Aq \e \& \-foffload\-options=nvptx\-none=\-latomic \& \-foffload\-options=amdgcn\-amdhsa=\-march=gfx906 .Ve .IP \fB\-fopenacc\fR 4 .IX Item "-fopenacc" پردازش راهنماهای (directives) دستورالعمل‌های OpenACC شامل \fB#pragma acc\fR در C/C++ و \&\fB!$acc\fR در فرترن با فرم آزاد (free\-form) و \fB!$acc\fR، \fBc$acc\fR و \&\fB*$acc\fR در فرترن با فرم ثابت (fixed\-form) را فعال می‌کند. این گزینه مستلزم \fB\-pthread\fR است، بنابراین تنها روی مقصدهایی پشتیبانی می‌شود که از \fB\-pthread\fR پشتیبانی می‌کنند. .IP \fB\-fopenacc\-dim=\fR\fIgeom\fR 4 .IX Item "-fopenacc-dim=geom" ابعاد محاسباتی پیش‌فرض را برای نواحی موازی برون‌سپاری‌شده‌ای که صریحاً آن‌ها را تعیین نکرده‌اند، مشخص می‌کند. مقدار \fIgeom\fR یک سه‌تایی از اندازه‌های جداشده با \&\fB:\fR به ترتیب برای \fIgang\fR، \fIworker\fR و \fIvector\fR است. برای استفاده از مقدار پیش‌فرض مختص به یک مقصد، می‌توان یک اندازه را حذف کرد. .IP \fB\-fopenmp\fR 4 .IX Item "-fopenmp" پردازش راهنماهای OpenMP شامل \fB#pragma omp\fR، \&\fB[[omp::decl(...)]]\fR، \fB[[omp::directive(...)]]\fR و \fB[[omp::sequence(...)]]\fR را در C/C++ فعال می‌کند. در Fortran، راهنمای \&\fB!$omp\fR و نشانگر کامپایل شرطی (sentinel) \fB!$\fR را فعال می‌سازد. در فرترن با فرم منبع ثابت، نشانگرها همچنین می‌توانند با \&\fBc\fR یا \fB*\fR آغاز شوند. .Sp این گزینه مستلزم \fB\-pthread\fR است و در نتیجه فقط روی مقصدهایی پشتیبانی می‌شود که از \fB\-pthread\fR پشتیبانی کنند. \fB\-fopenmp\fR متضمن گزینه \fB\-fopenmp\-simd\fR نیز هست. .IP \fB\-fopenmp\-simd\fR 4 .IX Item "-fopenmp-simd" پردازش راهنماهای \f(CW\*(C`simd\*(C'\fR، \f(CW\*(C`declare simd\*(C'\fR، \&\f(CW\*(C`declare reduction\*(C'\fR، \f(CW\*(C`assume\*(C'\fR، \f(CW\*(C`ordered\*(C'\fR، \f(CW\*(C`scan\*(C'\fR و \f(CW\*(C`loop\*(C'\fR در OpenMP، و همچنین راهنماهای ترکیبی یا مرکبی که شامل \&\f(CW\*(C`simd\*(C'\fR هستند را با \f(CW\*(C`#pragma omp\*(C'\fR، \&\f(CW\*(C`[[omp::directive(...)]]\*(C'\fR، \f(CW\*(C`[[omp::sequence(...)]]\*(C'\fR و \&\f(CW\*(C`[[omp::decl(...)]]\*(C'\fR در C/C++ و \f(CW\*(C`!$omp\*(C'\fR در Fortran فعال می‌کند. علاوه بر این، نشانگر کامپایل شرطی \fB!$\fR را در Fortran فعال می‌سازد. در فرترن با فرم منبع ثابت، نشانگرها می‌توانند با \&\fBc\fR یا \fB*\fR نیز آغاز شوند. سایر راهنماهای OpenMP نادیده گرفته می‌شوند. مگر اینکه \fB\-fopenmp\fR نیز به طور جداگانه مشخص شده باشد، ناحیه \f(CW\*(C`loop\*(C'\fR مستقل از بند (clause) تعیین‌شده \f(CW\*(C`bind\*(C'\fR، به ناحیه وظیفه جاری متصل (bind) می‌شود. .IP \fB\-fopenmp\-target\-simd\-clone\fR 4 .IX Item "-fopenmp-target-simd-clone" .PD 0 .IP \fB\-fopenmp\-target\-simd\-clone=\fR\fIdevice\-type\fR 4 .IX Item "-fopenmp-target-simd-clone=device-type" .PD علاوه بر تولید نسخه‌های همسان (clones) SIMD برای توابعی که با راهنمای \&\f(CW\*(C`declare simd\*(C'\fR نشانه‌گذاری شده‌اند، هنگام فعال بودن این گزینه، کامپایلر GCC همچنین نسخه‌های همسانی را برای توابع نشانه‌گذاری‌شده با راهنمای OpenMP به نام \f(CW\*(C`declare target\*(C'\fR که برای برداری‌سازی (vectorization) مناسب هستند تولید می‌کند. \&\fIdevice\-type\fR می‌تواند یکی از مقادیر \f(CW\*(C`none\*(C'\fR، \f(CW\*(C`host\*(C'\fR، \f(CW\*(C`nohost\*(C'\fR و \f(CW\*(C`any\*(C'\fR باشد که با کلمات کلیدی بند \f(CW\*(C`device_type\*(C'\fR در راهنمای \f(CW\*(C`declare target\*(C'\fR مطابقت دارند؛ نسخه‌های همسان برای اشتراک دستگاه‌های مشخص‌شده تولید می‌گردند. \&\fB\-fopenmp\-target\-simd\-clone\fR معادل \&\fB\-fopenmp\-target\-simd\-clone=any\fR و \&\fB\-fno\-openmp\-target\-simd\-clone\fR معادل \&\fB\-fopenmp\-target\-simd\-clone=none\fR است. .Sp در سطح بهینه‌سازی \fB\-O2\fR و بالاتر (به جز \fB\-Os\fR یا \fB\-Og\fR)، این بهینه‌سازی به طور پیش‌فرض بر روی \fB\-fopenmp\-target\-simd\-clone=nohost\fR تنظیم می‌شود؛ در غیر این صورت به طور پیش‌فرض غیرفعال است..SS "گزینه‌های کنترل قالب‌بندی پیام‌های عیب‌یابی" .IX Subsection "Options to Control Diagnostic Messages Formatting" به‌طور سنتی، پیام‌های عیب‌یابی بدون در نظر گرفتن ویژگی‌های دستگاه خروجی (مانند عرض آن و غیره) قالب‌بندی می‌شدند. می‌توانید از گزینه‌های شرح‌داده‌شده در زیر برای کنترل الگوریتم قالب‌بندی پیام‌های عیب‌یابی استفاده کنید؛ برای نمونه، تعداد نویسه‌ها در هر خط، یا اینکه اطلاعات مکان در کد منبع هر چند وقت یک‌بار باید گزارش شوند. توجه داشته باشید که ممکن است برخی پیشرانه‌های (front end) زبان‌ها این گزینه‌ها را رعایت نکنند. .IP \fB\-fmessage\-length=\fR\fIn\fR 4 .IX Item "-fmessage-length=n" تلاش می‌کند پیام‌های خطا را طوری قالب‌بندی کند که در خطوطی با حدود \&\fIn\fR نویسه جای گیرند. اگر \&\fIn\fR صفر باشد، هیچ شکست خطی (line\-wrapping) انجام نمی‌شود؛ هر پیام خطا در یک خط تکی نمایش می‌یابد. این رفتار پیش‌فرض برای همهٔ پیشرانه‌ها است. .Sp نکته \- این گزینه بر نمایش دستورالعمل‌های پیش‌پردازندهٔ \fB#error\fR و \&\fB#warning\fR، و ویژگی (attribute) \fBdeprecated\fR برای توابع/نوع‌ها/متغیرها نیز اثر می‌گذارد. با این حال، بر عملگرهای عمل‌یافتهٔ \&\fBpragma GCC warning\fR و \fBpragma GCC error\fR تأثیری ندارد. .IP \fB\-fdiagnostics\-plain\-output\fR 4 .IX Item "-fdiagnostics-plain-output" این گزینه درخواست می‌کند که خروجی عیب‌یابی تا حد امکان ساده و ابتدایی باشد، که ممکن است هنگام اجرای \fBdejagnu\fR یا ابزارهای دیگری که نیاز به تجزیهٔ خروجی عیب‌یابی دارند و ترجیح می‌دهند این خروجی در گذر زمان پایدارتر بماند، مفید واقع شود. \&\fB\-fdiagnostics\-plain\-output\fR در حال حاضر معادل گزینه‌های زیر است: \&\fB\-fno\-diagnostics\-show\-caret \&\-fno\-diagnostics\-show\-line\-numbers \&\-fdiagnostics\-color=never \&\-fdiagnostics\-urls=never \&\-fdiagnostics\-path\-format=separate\-events \&\-fdiagnostics\-text\-art\-charset=none \&\-fno\-diagnostics\-show\-event\-links \&\-fno\-diagnostics\-show\-nesting\fR در آینده، اگر GCC ظاهر پیش‌فرض عیب‌یابی‌های خود را تغییر دهد، گزینهٔ متناظر برای غیرفعال‌کردن رفتار جدید به این فهرست افزوده خواهد شد. .IP \fB\-fdiagnostics\-show\-location=once\fR 4 .IX Item "-fdiagnostics-show-location=once" تنها در حالت شکست خط (line\-wrapping) معنادار است. به گزارشگر پیام‌های عیب‌یابی دستور می‌دهد که اطلاعات مکان در کد منبع را تنها \fIیک‌بار\fR درج کند؛ یعنی در صورتی که پیام برای جا گرفتن در یک خط فیزیکی بیش از حد طولانی باشد و شکسته شود، مکان در منبع مجدداً و به‌طور پیاپی در خطوط ادامهٔ بعدی (به عنوان پیشوند) درج نخواهد شد. این رفتار پیش‌فرض است. .IP \fB\-fdiagnostics\-show\-location=every\-line\fR 4 .IX Item "-fdiagnostics-show-location=every-line" تنها در حالت شکست خط معنادار است. به گزارشگر پیام‌های عیب‌یابی دستور می‌دهد که همان اطلاعات مکان در منبع را (به‌عنوان پیشوند) برای تمام خطوط فیزیکی حاصل از فرآیند شکستن پیامی که در یک خط جا نشده است، درج کند. .IP \fB\-fdiagnostics\-color[=\fR\fIWHEN\fR\fB]\fR 4 .IX Item "-fdiagnostics-color[=WHEN]" .PD 0 .IP \fB\-fno\-diagnostics\-color\fR 4 .IX Item "-fno-diagnostics-color" .PD استفاده از رنگ در پیام‌های عیب‌یابی. مقدار \fIWHEN\fR یکی از مقادیر \fBnever\fR، \fBalways\fR یا \fBauto\fR است. مقدار پیش‌فرض به نحوهٔ پیکربندی کامپایلر بستگی دارد؛ می‌تواند هر یک از مقادیر فوق برای \fIWHEN\fR باشد یا در صورتی که متغیر محیطی \fBGCC_COLORS\fR در محیط وجود نداشته باشد برابر با \fBnever\fR، و در غیر این صورت \fBauto\fR باشد. مقدار \&\fBauto\fR باعث می‌شود GCC تنها زمانی از رنگ استفاده کند که خروجی خطای استاندارد (standard error) یک پایانه باشد و دستور در شل emacs اجرا نشود. شکل‌های \fB\-fdiagnostics\-color\fR و \fB\-fno\-diagnostics\-color\fR به‌ترتیب نام‌های مستعاری برای \fB\-fdiagnostics\-color=always\fR و \&\fB\-fdiagnostics\-color=never\fR هستند. .Sp رنگ‌ها با متغیر محیطی \fBGCC_COLORS\fR تعریف می‌شوند. مقدار آن فهرستی جداشده با دونقطه (:) از قابلیت‌ها و زیررشته‌های Select Graphic Rendition (SGR) است. دستورهای SGR توسط پایانه یا شبیه‌ساز پایانه تفسیر می‌شوند. (برای اطلاع از مقادیر مجاز و معانی آنها به عنوان ویژگی‌های نویسه، بخش مربوطه را در مستندات پایانه متنی خود مشاهده کنید.) مقادیر این زیررشته‌ها اعدادی صحیح در مبنای ده هستند و می‌توانند با نقطه‌ویرگول (;) به یکدیگر متصل شوند. مقادیر رایج برای اتصال عبارتند از: \&\fB1\fR برای برجسته (bold)، \&\fB4\fR برای زیرخط (underline)، \&\fB5\fR برای چشمک‌زن (blink)، \&\fB7\fR برای رنگ معکوس (inverse)، \&\fB39\fR برای رنگ پیش‌فرض پیش‌زمینه، \&\fB30\fR تا \fB37\fR برای رنگ‌های پیش‌زمینه، \&\fB90\fR تا \fB97\fR برای رنگ‌های پیش‌زمینه در حالت ۱۶ رنگ، \&\fB38;5;0\fR تا \fB38;5;255\fR برای رنگ‌های پیش‌زمینه در حالت‌های ۸۸ رنگ و ۲۵۶ رنگ، \&\fB49\fR برای رنگ پیش‌فرض پس‌زمینه، \&\fB40\fR تا \fB47\fR برای رنگ‌های پس‌زمینه، \&\fB100\fR تا \fB107\fR برای رنگ‌های پس‌زمینه در حالت ۱۶ رنگ، و \fB48;5;0\fR تا \fB48;5;255\fR برای رنگ‌های پس‌زمینه در حالت‌های ۸۸ رنگ و ۲۵۶ رنگ. .Sp مقدار پیش‌فرض \fBGCC_COLORS\fR برابر است با: .Sp .Vb 5 \& error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e \& quote=01:path=01;36:fixit\-insert=32:fixit\-delete=31:\e \& diff\-filename=01:diff\-hunk=32:diff\-delete=31:diff\-insert=32:\e \& type\-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32\e \& highlight\-a=01;32:highlight\-b=01;34 .Ve .Sp که در آن \fB01;31\fR قرمز برجسته، \fB01;35\fR ارغوانی برجسته، \&\fB01;36\fR فیروزه‌ای برجسته، \fB32\fR سبز، \fB34\fR آبی، \&\fB01\fR برجسته، و \fB31\fR قرمز است. تنظیم \fBGCC_COLORS\fR روی یک رشتهٔ خالی رنگ‌ها را غیرفعال می‌کند. قابلیت‌های پشتیبانی‌شده به شرح زیر هستند: .RS 4 .ie n .IP """error=""" 4 .el .IP \f(CWerror=\fR 4 .IX Item "error=" زیررشتهٔ SGR برای نشانگرهای :error. .ie n .IP """warning=""" 4 .el .IP \f(CWwarning=\fR 4 .IX Item "warning=" زیررشتهٔ SGR برای نشانگرهای :warning. .ie n .IP """note=""" 4 .el .IP \f(CWnote=\fR 4 .IX Item "note=" زیررشتهٔ SGR برای نشانگرهای :note. .ie n .IP """path=""" 4 .el .IP \f(CWpath=\fR 4 .IX Item "path=" زیررشتهٔ SGR برای رنگ‌آمیزی مسیرهای رویدادهای جریان کنترل آن‌طور که توسط \fB\-fdiagnostics\-path\-format=\fR چاپ می‌شوند؛ مانند شناسهٔ رویدادهای منفرد و خطوط نشان‌دهندهٔ فراخوانی‌ها و بازگشت‌های میان‌روال‌ها (interprocedural). .ie n .IP """range1=""" 4 .el .IP \f(CWrange1=\fR 4 .IX Item "range1=" زیررشتهٔ SGR برای نخستین محدودهٔ اضافی. .ie n .IP """range2=""" 4 .el .IP \f(CWrange2=\fR 4 .IX Item "range2=" زیررشتهٔ SGR برای دومین محدودهٔ اضافی. .ie n .IP """locus=""" 4 .el .IP \f(CWlocus=\fR 4 .IX Item "locus=" زیررشتهٔ SGR برای اطلاعات مکان، مانند \fBfile:line\fR یا \&\fBfile:line:column\fR و غیره. .ie n .IP """quote=""" 4 .el .IP \f(CWquote=\fR 4 .IX Item "quote=" زیررشتهٔ SGR برای اطلاعات چاپ‌شده در میان علامت‌های نقل‌قول. .ie n .IP """fnname=""" 4 .el .IP \f(CWfnname=\fR 4 .IX Item "fnname=" زیررشتهٔ SGR برای نام‌های توابع ++C. .ie n .IP """targs=""" 4 .el .IP \f(CWtargs=\fR 4 .IX Item "targs=" زیررشتهٔ SGR برای مقیدسازی‌های پارامتر قالب تابع ++C. .ie n .IP """fixit\-insert=""" 4 .el .IP \f(CWfixit\-insert=\fR 4 .IX Item "fixit-insert=" زیررشتهٔ SGR برای راهنمایی‌های تصحیح (fix\-it) که متنی را برای درج یا جایگزینی پیشنهاد می‌دهند. .ie n .IP """fixit\-delete=""" 4 .el .IP \f(CWfixit\-delete=\fR 4 .IX Item "fixit-delete=" زیررشتهٔ SGR برای راهنمایی‌های تصحیح (fix\-it) که متنی را برای حذف پیشنهاد می‌دهند. .ie n .IP """diff\-filename=""" 4 .el .IP \f(CWdiff\-filename=\fR 4 .IX Item "diff-filename=" زیررشتهٔ SGR برای سرآیند نام فایل‌ها درون وصله‌های (patch) تولیدشده. .ie n .IP """diff\-hunk=""" 4 .el .IP \f(CWdiff\-hunk=\fR 4 .IX Item "diff-hunk=" زیررشتهٔ SGR برای ابتدای قطعه‌ها (hunk) درون وصله‌های تولیدشده. .ie n .IP """diff\-delete=""" 4 .el .IP \f(CWdiff\-delete=\fR 4 .IX Item "diff-delete=" زیررشتهٔ SGR برای خطوط حذف‌شده درون وصله‌های تولیدشده. .ie n .IP """diff\-insert=""" 4 .el .IP \f(CWdiff\-insert=\fR 4 .IX Item "diff-insert=" زیررشتهٔ SGR برای خطوط درج‌شده درون وصله‌های تولیدشده. .ie n .IP """type\-diff=""" 4 .el .IP \f(CWtype\-diff=\fR 4 .IX Item "type-diff=" زیررشتهٔ SGR برای برجسته‌سازی نوع‌های ناهمخوان درون آرگومان‌های قالب در پیشرانهٔ ++C. .ie n .IP """valid=""" 4 .el .IP \f(CWvalid=\fR 4 .IX Item "valid=" زیررشتهٔ SGR برای برجسته‌سازی عناصر معتبر درون نمودارهای هنر متنی (text art). .ie n .IP """invalid=""" 4 .el .IP \f(CWinvalid=\fR 4 .IX Item "invalid=" زیررشتهٔ SGR برای برجسته‌سازی عناصر نامعتبر درون نمودارهای هنر متنی (text art). .ie n .IP """highlight\-a=""" 4 .el .IP \f(CWhighlight\-a=\fR 4 .IX Item "highlight-a=".PD 0 .ie n .IP """highlight\-b=""" 4 .el .IP \f(CWhighlight\-b=\fR 4 .IX Item "highlight-b=" .PD زیررشته‌های SGR برای ایجاد تضاد دیداری میان دو چیز متفاوت در پیام‌های تشخیصی، مانند یک جفت نوع داده‌ای ناهمخوان. ببینید: \fB\-fdiagnostics\-show\-highlight\-colors\fR. .RE .RS 4 .RE .IP \fB\-fdiagnostics\-urls[=\fR\fIWHEN\fR\fB]\fR 4 .IX Item "-fdiagnostics-urls[=WHEN]" از توالی‌های فرار برای جاسازی پیوندها (URLها) در پیام‌های تشخیصی استفاده می‌کند. برای مثال، هنگامی که \&\fB\-fdiagnostics\-show\-option\fR متنی را شامل گزینهٔ خط فرمانی که آن پیام تشخیصی را کنترل می‌کند نمایش می‌دهد، یک URL برای مستندات آن گزینه جاسازی می‌کند. .Sp مقدار \&\fIWHEN\fR می‌تواند \fBnever\fR، \fBalways\fR یا \fBauto\fR باشد. مقدار \&\fBauto\fR باعث می‌شود GCC توالی‌های فرار URL را تنها زمانی به کار ببرد که خطای استاندارد یک ترمینال باشد، و کامپایلر در پوستهٔ emacs یا هر ترمینال گرافیکی دیگری که ناسازگاری آن با این قابلیت شناخته‌شده است اجرا نشود؛ به زیر نگاه کنید. .Sp مقدار پیش‌فرض به نحوهٔ پیکربندی کامپایلر بستگی دارد. این مقدار می‌تواند هر یک از گزینه‌های \fIWHEN\fR بالا باشد. .Sp همچنین GCC می‌تواند (از طریق گزینهٔ زمان پیکربندی \&\fB\-\-with\-diagnostics\-urls=auto\-if\-env\fR) به گونه‌ای پیکربندی شود که مقدار پیش‌فرض آن تحت تأثیر متغیرهای محیطی قرار گیرد. تحت چنین پیکربندی، در صورتی که هر یک از متغیرهای محیطی \fBGCC_URLS\fR یا \fBTERM_URLS\fR در محیط کامپایلر موجود و غیرخالی باشند، پیش‌فرض GCC به \fBauto\fR تغییر می‌کند، یا اگر هیچ‌کدام موجود نباشند پیش‌فرض \fBnever\fR خواهد بود. .Sp با این حال، حتی با تعیین \fB\-fdiagnostics\-urls=always\fR نیز این رفتار وابسته به متغیرهای محیطی مذکور است: اگر \fBGCC_URLS\fR روی مقدار خالی یا \fBno\fR تنظیم شده باشد، هیچ پیوندی در پیام‌های تشخیصی جاسازی نمی‌شود. اگر روی \fBst\fR تنظیم شده باشد، پیوندها از توالی‌های فرار ST استفاده می‌کنند. اگر روی \fBbel\fR (پیش‌فرض) تنظیم شده باشد، پیوندها از توالی‌های فرار BEL استفاده می‌کنند. هر مقدار غیرخالی دیگر این قابلیت را فعال می‌کند. اگر \fBGCC_URLS\fR تنظیم نشده باشد، از \fBTERM_URLS\fR به عنوان پشتیبان استفاده می‌شود. نکته: ST یک توالی فرار ANSI با عنوان پایان‌دهندهٔ رشته \fBESC \e\fR است، و BEL یک نویسهٔ ASCII به صورت CTRL\-G است که معمولاً صدایی مانند بوق ایجاد می‌کند. .Sp در حال حاضر GCC تلاش می‌کند برخی ترمینال‌ها را نیز شناسایی کند که مشخص است ویژگی URL را پیاده‌سازی نکرده‌اند و دارای باگ هستند (یا دست‌کم در نسخه‌هایی که هنوز در حال استفاده‌اند باگ داشته‌اند)، به طوری که توالی‌های فرار URL احتمالاً عملکرد نادرستی خواهند داشت، یعنی نویسه‌های نامفهوم روی صفحه چاپ می‌کنند. این فهرست در حال حاضر شامل xfce4\-terminal، برخی نسخه‌های اشکال‌دار شناخته‌شدهٔ gnome\-terminal، کنسول لینوکس (linux console) و mingw است. این بررسی را می‌توان با استفاده از \fB\-fdiagnostics\-urls=always\fR نادیده گرفت. .IP \fB\-fno\-diagnostics\-show\-option\fR 4 .IX Item "-fno-diagnostics-show-option" به‌طور پیش‌فرض، هر پیام تشخیصی صادرشده شامل متنی است که گزینهٔ خط فرمانیِ کنترل‌کنندهٔ مستقیم آن پیام تشخیصی را نشان می‌دهد (در صورتی که چنین گزینه‌ای برای سازوکار پیام‌های تشخیصی شناخته‌شده باشد). تعیین پرچم \&\fB\-fno\-diagnostics\-show\-option\fR از این رفتار جلوگیری می‌کند. .IP \fB\-fno\-diagnostics\-show\-caret\fR 4 .IX Item "-fno-diagnostics-show-caret" به‌طور پیش‌فرض، هر پیام تشخیصی صادرشده شامل خط مبدأ کد اصلی و یک علامت کرت \fB^\fR برای نشان دادن ستون مربوطه است. این گزینه نمایش این اطلاعات را غیرفعال می‌کند. در صورتی که گزینهٔ \fB\-fmessage\-length=n\fR داده شده باشد، خط کد مبدأ به \fIn\fR نویسه کوتاه می‌شود. هنگامی که خروجی به ترمینال ارسال می‌شود، پهنای آن به اندازهٔ تعیین‌شده توسط متغیر محیطی \&\fBCOLUMNS\fR یا در صورت تنظیم نشدن، به پهنای ترمینال محدود می‌شود. .IP \fB\-fno\-diagnostics\-show\-labels\fR 4 .IX Item "-fno-diagnostics-show-labels" به‌طور پیش‌فرض، هنگام چاپ کد مبدأ (از طریق \fB\-fdiagnostics\-show\-caret\fR)، پیام‌های تشخیصی می‌توانند محدوده‌هایی از کد مبدأ را با اطلاعات مرتبط برچسب‌گذاری کنند؛ مانند نوع داده‌ای عبارت‌ها: .Sp .Vb 4 \& printf ("foo %s bar", long_i + long_j); \& ~^ ~~~~~~~~~~~~~~~ \& | | \& char * long int .Ve .Sp این گزینه چاپ این برچسب‌ها را متوقف می‌کند (در مثال بالا، خط‌های عمودی و متن‌های "char *" و "long int"). .IP \fB\-fno\-diagnostics\-show\-event\-links\fR 4 .IX Item "-fno-diagnostics-show-event-links" به‌طور پیش‌فرض، هنگام چاپ مسیرهای اجرا (از طریق \&\fB\-fdiagnostics\-path\-format=inline\-events\fR)، GCC خطوطی را رسم می‌کند که رویدادهای مرتبط را به یکدیگر متصل می‌کنند؛ مانند خطی که رویدادهای ۱ و ۲ را در نمونهٔ زیر متصل می‌کند: .Sp .Vb 10 \& 3 | if (p) \& | ^ \& | | \& | (1) following \`false\*(Aq branch (when \`p\*(Aq is NULL)... \->\-+ \& | | \& | | \& |+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ \& 4 || return 0; \& 5 || return *p; \& || ~ \& || | \& |+\-\-\-\-\-\-\-\->(2) ...to here \& | (3) dereference of NULL \`p\*(Aq .Ve .Sp این گزینه از چاپ چنین خطوط اتصال‌دهنده‌ای جلوگیری می‌کند. .IP \fB\-fno\-diagnostics\-show\-cwe\fR 4 .IX Item "-fno-diagnostics-show-cwe" پیام‌های تشخیصی می‌توانند به‌طور اختیاری شناسهٔ CWE (\f(CW\*(C`https://cwe.mitre.org/index.html\*(C'\fR) مرتبط داشته باشند. خود GCC چنین فراداده‌ای را تنها برای برخی از تشخیص‌های \fB\-fanalyzer\fR ارائه می‌دهد. افزایه‌های GCC نیز ممکن است پیام‌های تشخیصی را همراه با چنین فراداده‌ای ارائه دهند. به‌طور پیش‌فرض، اگر این اطلاعات موجود باشد، همراه با پیام تشخیصی چاپ خواهد شد. این گزینه چاپ این فراداده را غیرفعال می‌کند. .IP \fB\-fno\-diagnostics\-show\-rules\fR 4 .IX Item "-fno-diagnostics-show-rules" پیام‌های تشخیصی می‌توانند به‌طور اختیاری قواعدی مرتبط با خود داشته باشند، مانند قواعد ناشی از یک استاندارد کدنویسی یا یک مشخصهٔ فنی. خود GCC این کار را برای هیچ‌یک از پیام‌های تشخیصی خود انجام نمی‌دهد، اما افزایه‌ها ممکن است چنین کنند. به‌طور پیش‌فرض، اگر این اطلاعات موجود باشد، همراه با پیام تشخیصی چاپ خواهد شد. این گزینه چاپ این فراداده را غیرفعال می‌کند. .IP \fB\-fno\-diagnostics\-show\-highlight\-colors\fR 4 .IX Item "-fno-diagnostics-show-highlight-colors" کامپایلر GCC می‌تواند هنگام چاپ پیام‌های تشخیصی و نقل‌قول کردن کد مبدأ کاربر، از رنگ برای تأکید و ایجاد تمایز دیداری استفاده کند. .Sp برای نمونه، در: .Sp .Vb 7 \& demo.c: In function \`test_bad_format_string_args\*(Aq: \& ../../src/demo.c:25:18: warning: format \`%i\*(Aq expects argument of type \`int\*(Aq, but argument 2 has type \`const char *\*(Aq [\-Wformat=] \& 25 | printf("hello %i", msg); \& | ~^ ~~~ \& | | | \& | int const char * \& | %s .Ve .RS 4 .IP * 4 موارد \f(CW%i\fR و \f(CW\*(C`int\*(C'\fR در پیام و عبارت \f(CW\*(C`int\*(C'\fR در کد مبدأ نقل‌قول‌شده با استفاده از \f(CW\*(C`highlight\-a\*(C'\fR (به‌طور پیش‌فرض سبز پررنگ) رنگ‌آمیزی می‌شوند، و .IP * 4 عبارت \f(CW\*(C`const char *\*(C'\fR در پیام و در کد مبدأ نقل‌قول‌شده هر دو با استفاده از \f(CW\*(C`highlight\-b\*(C'\fR (به‌طور پیش‌فرض آبی پررنگ) رنگ‌آمیزی می‌شوند. .RE .RS 4 .Sp هدف جلب نگاه خواننده به روابط میان جنبه‌های گوناگون پیام تشخیصی و کد مبدأ است، با بهره‌گیری از رنگ برای گروه‌بندی عناصر مرتبط و تمایز بخشیدن میان موارد ناهمخوان. .Sp این رنگ‌آمیزی اضافی در صورتی که چاپ رنگی فعال باشد (مطابق با \fB\-fdiagnostics\-color=\fR) به‌طور پیش‌فرض فعال است، اما می‌توان آن را به‌طور جداگانه از طریق \fB\-fno\-diagnostics\-show\-highlight\-colors\fR غیرفعال کرد. .RE .IP \fB\-fno\-diagnostics\-show\-line\-numbers\fR 4 .IX Item "-fno-diagnostics-show-line-numbers" به‌طور پیش‌فرض، هنگام چاپ کد مبدأ (از طریق \fB\-fdiagnostics\-show\-caret\fR)، حاشیهٔ چپی چاپ می‌شود که شماره خطوط را نشان می‌دهد. این گزینه نمایش این حاشیهٔ چپ را غیرفعال می‌کند. .IP \fB\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR 4 .IX Item "-fdiagnostics-minimum-margin-width=width" این گزینه حداقل پهنای حاشیهٔ چپ چاپ‌شده توسط \&\fB\-fdiagnostics\-show\-line\-numbers\fR را کنترل می‌کند. مقدار پیش‌فرض آن ۶ است. .IP \fB\-fdiagnostics\-show\-context[=\fR\fIdepth\fR\fB]\fR 4 .IX Item "-fdiagnostics-show-context[=depth]" .PD 0 .IP \fB\-fno\-diagnostics\-show\-context\fR 4 .IX Item "-fno-diagnostics-show-context" .PD با این گزینه، کامپایلر ممکن است زنجیرهٔ جریان کنترلیِ مهمی را چاپ کند که از بلوک پایهٔ دستور دارای هشدار محافظت می‌کند. \&\fIdepth\fR بیشینهٔ عمق زنجیرهٔ جریان کنترل است. در حال حاضر، فهرست گزینه‌های هشدار تحت تأثیر شامل این موارد است: \&\fB\-Warray\-bounds\fR، \fB\-Wstringop\-overflow\fR، \&\fB\-Wstringop\-overread\fR، \fB\-Wstringop\-truncation\fR و \fB\-Wrestrict\fR. ممکن است در انتشار‌های بعدی گزینه‌های هشدار بیشتری به این فهرست افزوده شوند. شکل‌های \fB\-fdiagnostics\-show\-context\fR و \&\fB\-fno\-diagnostics\-show\-context\fR به ترتیب نام‌های مستعاری برای \&\fB\-fdiagnostics\-show\-context=1\fR و \&\fB\-fdiagnostics\-show\-context=0\fR هستند..IP \fB\-fdiagnostics\-parseable\-fixits\fR 4 .IX Item "-fdiagnostics-parseable-fixits" انتشار راهنماهای تصحیح (fix\-it hints) در قالبی قابل تجزیه با ماشین، مناسب برای استفاده توسط محیط‌های توسعه یکپارچه (IDE). برای هر تصحیح، یک سطر پس از پیام تشخیصی مربوطه چاپ خواهد شد که با رشته‌ی «fix\-it:» آغاز می‌شود. برای مثال: .Sp .Vb 1 \& fix\-it:"test.c":{45:3\-45:21}:"gtk_widget_show_all" .Ve .Sp موقعیت به صورت یک بازه نیمه‌باز، بیان‌شده به تعداد بایت‌ها و با شروع از بایت ۱ برای ستون نخست نشان داده می‌شود. در مثال بالا، بایت‌های ۳ تا ۲۰ از سطر ۴۵ فایل «test.c» باید با رشته داده‌شده جایگزین شوند: .Sp .Vb 5 \& 00000000011111111112222222222 \& 12345678901234567890123456789 \& gtk_widget_showall (dlg); \& ^^^^^^^^^^^^^^^^^^ \& gtk_widget_show_all .Ve .Sp نام فایل و رشته جایگزین، نویسه بک‌اسلش را به صورت «\e\e»، تب را به صورت «\et»، خط جدید را به صورت «\en»، نقل‌قول دوتایی را به صورت «\e"» و نویسه‌های غیرقابل چاپ را به صورت هشت‌هشتی (مانند تب عمودی به صورت «\e013») گریز (escape) می‌دهند. .Sp یک رشته جایگزین خالی نشان می‌دهد که بازه داده‌شده باید حذف شود. یک بازه خالی (مانند «45:3\-45:3») نشان می‌دهد که رشته باید در موقعیت داده‌شده درج گردد. .IP \fB\-fdiagnostics\-generate\-patch\fR 4 .IX Item "-fdiagnostics-generate-patch" چاپ راهنماهای تصحیح در stderr با قالب یکپارچه تفاوت (unified diff)، پس از چاپ هر پیام تشخیصی. برای مثال: .Sp .Vb 3 \& \-\-\- test.c \& +++ test.c \& @ \-42,5 +42,5 @ \& \& void show_cb(GtkDialog *dlg) \& { \& \- gtk_widget_showall(dlg); \& + gtk_widget_show_all(dlg); \& } .Ve .Sp خروجی diff ممکن است طبق همان قواعد پیام‌های تشخیصی رنگی شود یا نشود (نگاه کنید به \fB\-fdiagnostics\-color\fR). .IP \fB\-fdiagnostics\-show\-template\-tree\fR 4 .IX Item "-fdiagnostics-show-template-tree" در فرانت‌اند C++، هنگام چاپ پیام‌های تشخیصی که عدم تطابق انواع الگو (template types) را نشان می‌دهند، مانند: .Sp .Vb 2 \& could not convert \*(Aqstd::map >()\*(Aq \& from \*(Aqmap<[...],vector>\*(Aq to \*(Aqmap<[...],vector> .Ve .Sp پرچم \fB\-fdiagnostics\-show\-template\-tree\fR چاپ یک ساختار درخت‌مانند را فعال می‌کند که بخش‌های مشترک و متفاوت انواع را نشان می‌دهد، مانند: .Sp .Vb 4 \& map< \& [...], \& vector< \& [double != float]>> .Ve .Sp بخش‌هایی که متفاوت هستند با رنگ برجسته می‌شوند (در این مورد «double» و «float»). .IP \fB\-fno\-elide\-type\fR 4 .IX Item "-fno-elide-type" به‌طور پیش‌فرض، هنگامی که فرانت‌اند C++ پیام‌های تشخیصی مربوط به عدم تطابق انواع الگو را چاپ می‌کند، بخش‌های مشترک انواع به صورت «[...]» چاپ می‌شوند تا پیام خطا ساده‌تر شود. برای مثال: .Sp .Vb 2 \& could not convert \*(Aqstd::map >()\*(Aq \& from \*(Aqmap<[...],vector>\*(Aq to \*(Aqmap<[...],vector> .Ve .Sp مشخص کردن پرچم \fB\-fno\-elide\-type\fR مانع از این رفتار می‌شود. این پرچم همچنین بر خروجی پرچم \&\fB\-fdiagnostics\-show\-template\-tree\fR تأثیر می‌گذارد. .IP \fB\-fdiagnostics\-path\-format=\fR\fIKIND\fR 4 .IX Item "-fdiagnostics-path-format=KIND" تعیین نحوه چاپ مسیرهای رخدادهای جریان کنترل (control\-flow events) برای پیام‌های تشخیصی که چنین مسیری به آن‌ها مرتبط است. .Sp مقدار \&\fIKIND\fR می‌تواند \fBnone\fR، \fBseparate\-events\fR، یا حالت پیش‌فرض \fBinline\-events\fR باشد. .Sp مقدار \&\fBnone\fR به این معنی است که مسیرهای تشخیصی چاپ نشوند. .Sp مقدار \&\fBseparate\-events\fR به معنای چاپ یک پیام تشخیصی جداگانه از نوع «note» برای هر رخداد در داخل پیام تشخیصی است. برای مثال: .Sp .Vb 4 \& test.c:29:5: error: passing NULL as argument 1 to \*(AqPyList_Append\*(Aq which requires a non\-NULL parameter \& test.c:25:10: note: (1) when \*(AqPyList_New\*(Aq fails, returning NULL \& test.c:27:3: note: (2) when \*(Aqi < count\*(Aq \& test.c:29:5: note: (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1 .Ve .Sp مقدار \&\fBinline\-events\fR به معنای چاپ رخدادها به صورت درون‌خطی (inline) در داخل کد منبع است. این نما تلاش می‌کند رخدادها را در توالی‌هایی از رخدادهای به اندازه کافی نزدیک یکپارچه کند، و آن‌ها را به عنوان بازه‌های برچسب‌دار در کد منبع چاپ نماید. .Sp برای مثال، همان رخدادهای بالا ممکن است به صورت زیر چاپ شوند: .Sp .Vb 10 \& \*(Aqtest\*(Aq: events 1\-3 \& 25 | list = PyList_New(0); \& | ^~~~~~~~~~~~~ \& | | \& | (1) when \*(AqPyList_New\*(Aq fails, returning NULL \& 26 | \& 27 | for (i = 0; i < count; i++) { \& | ~~~ \& | | \& | (2) when \*(Aqi < count\*(Aq \& 28 | item = PyLong_FromLong(random()); \& 29 | PyList_Append(list, item); \& | ~~~~~~~~~~~~~~~~~~~~~~~~~ \& | | \& | (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1 .Ve .Sp جریان کنترل بین‌روالی با گروه‌بندی رخدادها بر اساس فریم پشته (stack frame)، و استفاده از تورفتگی برای نمایش چگونگی تودرتو شدن، قرارگیری در پشته (push) و برداشته شدن از پشته (pop) نشان داده می‌شود. .Sp برای مثال: .Sp .Vb 10 \& \*(Aqtest\*(Aq: events 1\-2 \& | \& | 133 | { \& | | ^ \& | | | \& | | (1) entering \*(Aqtest\*(Aq \& | 134 | boxed_int *obj = make_boxed_int (i); \& | | ~~~~~~~~~~~~~~~~~~ \& | | | \& | | (2) calling \*(Aqmake_boxed_int\*(Aq \& | \& +\-\-> \*(Aqmake_boxed_int\*(Aq: events 3\-4 \& | \& | 120 | { \& | | ^ \& | | | \& | | (3) entering \*(Aqmake_boxed_int\*(Aq \& | 121 | boxed_int *result = (boxed_int *)wrapped_malloc (sizeof (boxed_int)); \& | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \& | | | \& | | (4) calling \*(Aqwrapped_malloc\*(Aq \& | \& +\-\-> \*(Aqwrapped_malloc\*(Aq: events 5\-6 \& | \& | 7 | { \& | | ^ \& | | | \& | | (5) entering \*(Aqwrapped_malloc\*(Aq \& | 8 | return malloc (size); \& | | ~~~~~~~~~~~~~ \& | | | \& | | (6) calling \*(Aqmalloc\*(Aq \& | \& <\-\-\-\-\-\-\-\-\-\-\-\-\-+ \& | \& \*(Aqtest\*(Aq: event 7 \& | \& | 138 | free_boxed_int (obj); \& | | ^~~~~~~~~~~~~~~~~~~~ \& | | | \& | | (7) calling \*(Aqfree_boxed_int\*(Aq \& | \& (etc) .Ve.IP \fB\-fdiagnostics\-show\-path\-depths\fR 4 .IX Item "-fdiagnostics-show-path-depths" این گزینه هنگام چاپ مسیرهای جریان کنترل (control\-flow) مرتبط با یک پیام تشخیصی، اطلاعات بیشتری ارائه می‌دهد. .Sp اگر این گزینه مشخص شود، عمق پشته برای هر توالی از رخدادها در \fB\-fdiagnostics\-path\-format=inline\-events\fR چاپ خواهد شد. اگر همراه با \fB\-fdiagnostics\-path\-format=separate\-events\fR مشخص شود، عمق پشته و اعلان تابع هنگام چاپ هر رخداد ضمیمه خواهد شد. .Sp این گزینه برای استفادهٔ توسعه‌دهندگان GCC و توسعه‌دهندگان افزونه در هنگام اشکال‌زدایی پیام‌های تشخیصی که جریان کنترل میان‌روالی (interprocedural) را گزارش می‌کنند، در نظر گرفته شده است. .IP \fB\-fno\-show\-column\fR 4 .IX Item "-fno-show-column" شمارهٔ ستون‌ها را در پیام‌های تشخیصی چاپ نمی‌کند. اگر پیام‌های تشخیصی توسط برنامه‌ای که شمارهٔ ستون‌ها را درک نمی‌کند (مانند \fBdejagnu\fR) پایش (اسکن) می‌شوند، این گزینه ممکن است ضروری باشد. .IP \fB\-fdiagnostics\-column\-unit=\fR\fIUNIT\fR 4 .IX Item "-fdiagnostics-column-unit=UNIT" واحد شمارهٔ ستون را انتخاب می‌کند. این گزینه بر پیام‌های تشخیصی سنتی (در صورت عدم وجود \fB\-fno\-show\-column\fR) تأثیر می‌گذارد. .Sp مقدار پیش‌فرض \fIUNIT\fR، یعنی \fBdisplay\fR، تعداد ستون‌های نمایشی اشغال‌شده توسط هر نویسه را در نظر می‌گیرد. این مقدار ممکن است در مورد نویسه‌های تب (tab)، از تعداد بایت‌های مورد نیاز برای کدگذاری نویسه بیشتر باشد، یا در مورد نویسه‌های چندبایتی، کمتر باشد. برای نمونه، نویسهٔ «GREEK SMALL LETTER PI (U+03C0)» یک ستون نمایشی را اشغال می‌کند و کدگذاری UTF\-8 آن نیازمند دو بایت است؛ نویسهٔ «SLIGHTLY SMILING FACE (U+1F642)» دو ستون نمایشی را اشغال می‌کند و کدگذاری UTF\-8 آن نیازمند چهار بایت است. .Sp تنظیم \fIUNIT\fR روی \fBbyte\fR، شمارهٔ ستون را در همهٔ حالات به تعداد بایت‌های خام تغییر می‌دهد، همان‌گونه که در نسخه‌های پیش از 11.1.0 توسط GCC به‌طور سنتی در خروجی چاپ می‌شد. .IP \fB\-fdiagnostics\-column\-origin=\fR\fIORIGIN\fR 4 .IX Item "-fdiagnostics-column-origin=ORIGIN" مبدأ شمارهٔ ستون‌ها را تعیین می‌کند، یعنی شمارهٔ ستونی که به ستون نخست اختصاص می‌یابد. مقدار پیش‌فرض 1 مطابق با رفتار سنتی GCC و راهنمای سبک GNU است. برخی ابزارها ممکن است با مبدأ 0 عملکرد بهتری داشته باشند؛ هر مقدار غیرمنفی را می‌توان مشخص کرد. .IP \fB\-fdiagnostics\-escape\-format=\fR\fIFORMAT\fR 4 .IX Item "-fdiagnostics-escape-format=FORMAT" هنگامی که GCC خطوط کد مبدأ مربوط به یک پیام تشخیصی را چاپ می‌کند، معمولاً سعی دارد بایت‌های مبدأ را مستقیماً چاپ کند. با این حال، برخی از پیام‌های تشخیصی به مشکلات کدگذاری در پروندهٔ مبدأ مربوط می‌شوند، مانند UTF\-8 ناهنجار (malformed) یا مشکلات مربوط به یکسان‌سازی یونیکد (Unicode normalization). این پیام‌های تشخیصی نشانه‌گذاری می‌شوند تا GCC هنگام چاپ خطوط مبدأ مربوطه، بایت‌هایی را که اسکی قابل چاپ نیستند نویسه‌گردانی (escape) کند. .Sp این گزینه نحوهٔ نویسه‌گردانی چنین بایت‌هایی را کنترل می‌کند. .Sp قالب پیش‌فرض \fIFORMAT\fR، یعنی \fBunicode\fR، نویسه‌های یونیکدی را که اسکی قابل چاپ نیستند به صورت \fB\fR نمایش می‌دهد، و بایت‌هایی را که با نویسهٔ یونیکدی دارای کدگذاری معتبر UTF\-8 مطابقت ندارند، به صورت شانزده‌شانزدهی و به شکل \fB\fR نمایش می‌دهد. .Sp برای مثال، خطی از کد مبدأ که شامل رشتهٔ \fBbefore\fR و به دنبال آن نویسهٔ یونیکد U+03C0 (یعنی «GREEK SMALL LETTER PI» با کدگذاری UTF\-8 برابر با 0xCF 0x80) و سپس بایت 0xBF (یک بایت دنبالهٔ سرگردان UTF\-8) و به دنبال آن رشتهٔ \fBafter\fR باشد، برای چنین پیام تشخیصی به این صورت چاپ خواهد شد: .Sp .Vb 1 \& beforeafter .Ve .Sp تنظیم \fIFORMAT\fR روی \fBbytes\fR تمام بایت‌های اسکی غیرقابل‌چاپ را به صورت \fB\fR نمایش می‌دهد و در نتیجه کدگذاری زیربنایی نویسه‌های یونیکد غیراسکی را نشان می‌دهد. برای مثال بالا، مورد زیر چاپ خواهد شد: .Sp .Vb 1 \& before<80>after .Ve .IP \fB\-fdiagnostics\-text\-art\-charset=\fR\fICHARSET\fR 4 .IX Item "-fdiagnostics-text-art-charset=CHARSET" برخی پیام‌های تشخیصی می‌توانند شامل نمودارهای «هنر متنی» (text art) باشند: مصورسازی‌هایی که از متن ایجاد شده‌اند و برای مشاهده با قلم‌های تک‌عرض (monospaced) در نظر گرفته شده‌اند. .Sp این گزینه تعیین می‌کند در صورت وجود، از چه نویسه‌هایی برای چاپ چنین نمودارهایی استفاده شود. مقدار \fICHARSET\fR برابر با \fBnone\fR، \fBascii\fR، \fBunicode\fR، یا \fBemoji\fR است. .Sp مقدار \fBnone\fR از چاپ چنین نمودارهایی جلوگیری می‌کند. مقدار \fBascii\fR اطمینان حاصل می‌کند که چنین نمودارهایی صرفاً اسکی («هنر اسکی») باشند. مقدار \fBunicode\fR اجازهٔ استفادهٔ محتاطانه از نویسه‌های ترسیمی یونیکد (مانند نویسه‌های رسم کادر) را می‌دهد. مقدار \fBemoji\fR علاوه بر این، امکان استفاده از ایموجی را در خروجی می‌افزاید (مانند ارسال U+26A0 WARNING SIGN و به دنبال آن U+FE0F VARIATION SELECTOR\-16 جهت انتخاب گونهٔ ایموجی نویسه). .Sp پیش‌فرض \fBemoji\fR است، به جز زمانی که متغیر محیطی \fBLANG\fR روی \fBC\fR تنظیم شده باشد که در آن صورت پیش‌فرض \fBascii\fR خواهد بود. .IP \fB\-fno\-diagnostics\-show\-nesting\fR 4 .IX Item "-fno-diagnostics-show-nesting" برخی پیام‌های تشخیصی GCC دارای ساختار درختی داخلی از زیرتشخیص‌های تو‌در‌تو هستند، مانند مشکلاتی که هنگام نمونه‌سازی الگوهای ++C رخ می‌دهند. .Sp به‌طور پیش‌فرض، GCC از تورفتگی و نشانه‌های گلوله‌ای (bullet points) در خروجی متنی خود برای نمایش ساختار تو‌در‌توی این پیام‌های تشخیصی استفاده می‌کند، اطلاعات مکان را برای شفاف‌تر شدن ساختار به خطوط جداگانه منتقل می‌نماید، و اطلاعات تکراری زائد را حذف می‌کند. .Sp انتخاب \fB\-fno\-diagnostics\-show\-nesting\fR این تورفتگی، قالب‌بندی دوباره و حذف اطلاعات را غیرفعال کرده و ظاهر قدیمی‌تر پیام‌های تشخیصی را بازیابی می‌کند. .IP \fB\-fno\-diagnostics\-show\-nesting\-locations\fR 4 .IX Item "-fno-diagnostics-show-nesting-locations" هنگامی که \fBfdiagnostics\-show\-nesting\fR فعال باشد، نام پرونده‌ها و شماره‌های خط و ستون در خطوطی جداگانه از پیام‌ها نمایش داده می‌شوند. این اطلاعات مکانی را می‌توان با \&\fB\-fno\-diagnostics\-show\-nesting\-locations\fR به‌طور کلی غیرفعال کرد. این گزینه برای استفادهٔ توسعه‌دهندگان GCC و جهت نگارش آزمایه‌های DejaGnu وجود دارد. .IP \fB\-fdiagnostics\-show\-nesting\-levels\fR 4 .IX Item "-fdiagnostics-show-nesting-levels" هنگامی که \fBfdiagnostics\-show\-nesting\fR فعال باشد، از \&\fBfdiagnostics\-show\-nesting\-levels\fR برای نمایش اعدادی که عمق تو‌در‌تویی را نشان می‌دهند نیز استفاده می‌شود. این گزینه برای استفادهٔ توسعه‌دهندگان GCC به منظور اشکال‌زدایی پیام‌های تشخیصی تو‌در‌تو وجود دارد، اما ممکن است برای نویسندگان افزونه‌ها نیز مفید باشد. .IP \fB\-fdiagnostics\-format=\fR\fIFORMAT\fR 4 .IX Item "-fdiagnostics-format=FORMAT" قالبی متفاوت را برای چاپ پیام‌های تشخیصی انتخاب می‌کند. \&\fIFORMAT\fR یکی از مقادیر \fBtext\fR، \fBsarif\-stderr\fR یا \fBsarif\-file\fR است. .Sp استفاده از این گزینه، هر «مقصد خروجی» اضافی افزوده شده با \&\fB\-fdiagnostics\-add\-output=\fR یا خروجی تنظیم‌شده با \&\fB\-fdiagnostics\-set\-output=\fR را جایگزین می‌کند. .Sp پیش‌فرض \fBtext\fR است. .Sp قالب‌های \fBsarif\-stderr\fR و \fBsarif\-file\fR هر دو پیام‌های تشخیصی را در قالب SARIF نسخهٔ 2.1.0، به ترتیب در stderr یا پرونده‌ای به نام \fIsource.sarif\fR صادر می‌کنند. .IP \fB\-fdiagnostics\-add\-output=\fR\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR 4 .IX Item "-fdiagnostics-add-output=DIAGNOSTICS-OUTPUT-SPEC" یک «مقصد خروجی» اضافی برای ارسال پیام‌های تشخیصی می‌افزاید. .Sp \&\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR باید یک طرح‌واره را مشخص کند که به‌صورت اختیاری با \f(CW\*(C`:\*(C'\fR و یک یا چند جفت \fIKEY\fR=\fIVALUE\fR دنبال می‌شود، به این شکل: .Sp .Vb 3 \& \& := \& :=,= .Ve .Sp و غیره. .Sp طرح‌واره‌ها، کلیدها یا مقادیری که نام آن‌ها دارای پیشوند «experimental» است ممکن است بدون اطلاع قبلی تغییر کنند یا حذف شوند. کلیدها می‌توانند مختص هر طرح‌واره باشند یا به GCC به‌طور کلی مرتبط باشند. .Sp \&\fISCHEME\fR می‌تواند موارد زیر باشد: .RS 4 .IP \fBtext\fR 4 .IX Item "text" پیام‌های تشخیصی را با استفاده از قالب متنی سنتی GCC به stderr ارسال می‌کند. .Sp کلیدهای پشتیبانی‌شده برای طرح‌وارهٔ \f(CW\*(C`text\*(C'\fR عبارتند از: .RS 4 .IP \fBcolor=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "color=[yes|no]" تنظیمات رنگ‌آمیزی برگرفته از \fB\-fdiagnostics\-color\fR را برای این خروجی متنی بازنویسی می‌کند. .IP \fBshow\-nesting=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "show-nesting=[yes|no]" حالتی را فعال می‌کند که بر روابط سلسله‌مراتبی درون پیام‌های تشخیصی تأکید دارد، مطابق با \fB\-fdiagnostics\-show\-nesting\fR. پیش‌فرض \f(CW\*(C`yes\*(C'\fR است. .IP \fBshow\-nesting\-locations=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "show-nesting-locations=[yes|no]" اگر \f(CW\*(C`show\-nesting=yes\*(C'\fR باشد، مکان‌ها به‌طور پیش‌فرض نشان داده می‌شوند؛ این کلید را روی \f(CW\*(C`no\*(C'\fR تنظیم کنید تا چاپ این مکان‌ها غیرفعال شود. این گزینه برای استفادهٔ توسعه‌دهندگان GCC و جهت نگارش آزمایه‌های DejaGnu وجود دارد. .IP \fBshow\-nesting\-levels=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "show-nesting-levels=[yes|no]" این یک گزینهٔ اشکال‌زدایی برای استفاده به همراه \f(CW\*(C`show\-nesting=yes\*(C'\fR است. این کلید را روی \f(CW\*(C`yes\*(C'\fR تنظیم کنید تا سطوح تو‌در‌تویی آشکار در خروجی چاپ شوند. این گزینه برای استفادهٔ توسعه‌دهندگان GCC در نظر گرفته شده است. .RE .RS 4 .RE.IP \fBsarif\fR 4 .IX Item "sarif" ارسال پیام‌های عیب‌یابی به یک فایل در قالب SARIF. .Sp کلیدهای پشتیبانی‌شده برای طرحوارهٔ \f(CW\*(C`sarif\*(C'\fR عبارتند از: .RS 4 .IP \fBfile=\fR\fIFILENAME\fR 4 .IX Item "file=FILENAME" نام فایلی را مشخص می‌کند که خروجی SARIF در آن نوشته شود، که می‌تواند با یک مسیر مطلق یا نسبی در ابتدا همراه باشد. در صورت عدم تعیین، مقدار پیش‌فرض آن \&\fIsource.sarif\fR است. .IP \fBserialization=\fR[\fBjson\fR] 4 .IX Item "serialization=[json]" قالب سریال‌سازی مورد استفاده هنگام نوشتن خروجی SARIF را مشخص می‌کند. در حال حاضر این مقدار تنها می‌تواند \f(CW\*(C`json\*(C'\fR باشد، اما به عنوان یک نقطهٔ توسعه برای آزمایش با سایر سریال‌سازی‌ها قرار داده شده است. .IP \fBversion=\fR[\fB2.1\fR|\fB2.2\-prerelease\fR] 4 .IX Item "version=[2.1|2.2-prerelease]" نسخهٔ SARIF مورد استفاده برای خروجی را مشخص می‌کند. در صورت عدم تعیین، پیش‌فرض 2.1 است. \f(CW\*(C`2.2\-prerelease\*(C'\fR از یک پیش‌نویس غیررسمی از مشخصات آیندهٔ SARIF 2.2 استفاده می‌کند و در این انتشار فقط باید برای اهداف آزمایشی استفاده شود. .RE .RS 4 .Sp همچنین این کلید برای استفادهٔ توسعه‌دهندگان GCC به جای کاربران نهایی در نظر گرفته شده است و ممکن است بدون اطلاع قبلی تغییر کرده یا حذف شود: .IP \fBstate\-graphs=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "state-graphs=[yes|no]" این یک قابلیت اشکال‌زدایی است و به طور پیش‌فرض \f(CW\*(C`no\*(C'\fR است. اگر \f(CW\*(C`state\-graphs=yes\*(C'\fR باشد، تلاش می‌شود تا اطلاعات دقیق وضعیت از \fB\-fanalyzer\fR در SARIF تولیدشده ثبت شود. .RE .RS 4 .RE .IP \fBexperimental\-html\fR 4 .IX Item "experimental-html" صدور پیام‌های عیب‌یابی به یک فایل در قالب HTML. این طرحواره آزمایشی است و ممکن است در انتشارهای آیندهٔ GCC حذف شود. کلیدها و جزئیات خروجی نیز ممکن است تغییر کنند. .Sp کلیدهای پشتیبانی‌شده برای طرحوارهٔ \f(CW\*(C`experimental\-html\*(C'\fR عبارتند از: .RS 4 .IP \fBcss=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "css=[yes|no]" افزودن یک