.\" -*- 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 را فراخوانی می‌کنید، معمولاً پیش‌پردازش، کامپایل، اسمبل و پیونددهی را انجام می‌دهد. «گزینه‌های کلی» به شما امکان می‌دهند این فرآیند را در یک مرحلهٔ میانی متوقف کنید. برای نمونه، گزینهٔ \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) از نام گزینه جدا می‌شوند. مگر اینکه خلاف آن مستند شده باشد، یک آرگومان می‌تواند عددی یا یک رشته باشد. آرگومان‌های عددی معمولاً باید اعداد صحیح بدون علامتِ کوچکِ ده‌دهی یا هگزادسیمال باشند. آرگومان‌های هگزادسیمال باید با پیشوند \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 (\fBMMIX Options\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 (\fBMN10300 Options\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 (\fBMoxie Options\fR) \&\fB\-meb \-mel \-mmul.x \-mno\-crt0\fR .Sp \&\fIگزینه‌های MSP430\fR (\fBMSP430 Options\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 (\fBNDS32 Options\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 (\fBNvidia PTX Options\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 (\fBOpenRISC Options\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 (\fBPDP\-11 Options\fR) \&\fB\-mfpu \-msoft\-float \-mac0 \-m40 \-m45 \-m10 \&\-mint32 \-mint16 \&\-msplit \-munix\-asm \-mdec\-asm \-mgnu\-asm \-mlra\fR .Sp \&\fIگزینه‌های Picolibc\fR (\fBPicolibc Options\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 (\fBPRU Options\fR) \&\fB\-mmcu=\fR\fImcu\fR \fB\-minrt \-mno\-relax \-mloop \&\-mmul \-mfillzero \-mabi=\fR\fIvariant\fR .Sp \&\fIگزینه‌های RISC\-V\fR (\fBRISC\-V Options\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 (\fBRL78 Options\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 (\fBRS/6000 and PowerPC Options\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 (\fBRX Options\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 (\fBS/390 and zSeries Options\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 (\fBSH Options\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 (\fBSolaris 2 Options\fR) \&\fB\-mclear\-hwcap \-mno\-clear\-hwcap \-mimpure\-text \-mno\-impure\-text \&\-gsctf\fR .Sp \&\fIگزینه‌های SPARC\fR (\fBSPARC Options\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 (\fBSystem V Options\fR) \&\fB\-YP,\fR\fIpaths\fR \fB\-Ym,\fR\fIdir\fR .Sp \&\fIگزینه‌های V850\fR (\fBV850 Options\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 (\fBVAX Options\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 Windows\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 "گزینه‌های کنترل نوع خروجی" .IX Subsection "Options Controlling the Kind of Output" همگردانی می‌تواند تا چهار مرحله را در بر گیرد: پیش‌پردازش، خودِ همگردانی، اسمبل و پیوند، که همواره به همین ترتیب انجام می‌شوند. GCC قادر است چندین فایل را پیش‌پردازش و همگردانی کرده و آن‌ها را به چند فایل ورودی اسمبلر، یا به یک فایل ورودی اسمبلر تبدیل کند؛ سپس هر فایل ورودی اسمبلر یک فایل شیء تولید می‌کند و در نهایت، مرحلهٔ پیوند تمام فایل‌های شیء (چه آن‌هایی که به‌تازگی همگردانی شده‌اند و چه آن‌هایی که به عنوان ورودی تعیین شده‌اند) را در قالب یک فایل اجرایی با هم ترکیب می‌کند. .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" فایل سرآیند 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 با قالب ثابت که نباید پیش‌پردازش شود. .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 با قالب آزاد که نباید پیش‌پردازش شود. .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" فایل واسط 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)، یا نمونه‌سازی یک شیء عام)، یا اعلان تغییرنام واحد کتابخانه‌ای (اعلان تغییرنام یک بسته، عام، یا زیربرنامه) است. به چنین فایل‌هایی \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" یک فایل شیء (object file) که مستقیماً به مرحلهٔ پیوند (linking) فرستاده می‌شود. با هر نام فایلی بدون پسوند شناخته‌شده، به این صورت رفتار می‌شود. .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 فایل‌های منبع را کامپایل یا اسمبل می‌کند، اما آن‌ها را پیوند (link) نمی‌دهد. مرحلهٔ پیونددهی اساساً انجام نمی‌شود. خروجی نهایی به شکل یک فایل شیء (object file) به ازای هر فایل منبع خواهد بود. .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 پس از مرحلهٔ کامپایل واقعی متوقف می‌شود؛ اسمبل انجام نمی‌دهد. خروجی به شکل یک فایل کد اسمبلی برای هر فایل ورودی مشخص‌شدهٔ غیر اسمبلی خواهد بود. .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 تنها خروجی اصلی را نام‌گذاری می‌کند، اما بر نام‌گذاری خروجی‌های کمکی (auxiliary) و تخلیه (dump) نیز تأثیر می‌گذارد. به مثال‌های زیر نگاه کنید. مگر اینکه بازنویسی شوند، هر دو خروجی کمکی و تخلیه در همان دایرکتوری خروجی اصلی قرار می‌گیرند. در خروجی‌های کمکی، پسوند فایل ورودی با پسوند نوع فایل خروجی کمکی جایگزین می‌شود؛ در خروجی‌های تخلیه، پسوند فایل تخلیه به پسوند فایل ورودی الحاق می‌گردد. در دستورهای کامپایل، نام پایهٔ (base name) هر دو خروجی کمکی و تخلیه همان نام پایهٔ خروجی اصلی است؛ در دستورهای کامپایل و پیوند، نام خروجی اصلی منهای پسوند فایل اجرایی، با نام فایل ورودی ترکیب می‌شود. اگر هر دو نام پایهٔ یکسانی داشته باشند (بدون در نظر گرفتن پسوند)، نتیجهٔ ترکیب همان نام پایه خواهد بود؛ در غیر این صورت، آن‌ها با یک خط تیره از هم جدا و به یکدیگر متصل می‌شوند. .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 درخواست شده‌اند) با پسوند نام ورودی، و فایل‌های خروجی aux (آن‌هایی که با دیگر گزینه‌های غیر dump درخواست شده‌اند، مانند \f(CW\*(C`\-save\-temps\*(C'\fR، \&\f(CW\*(C`\-gsplit\-dwarf\*(C'\fR و \f(CW\*(C`\-fcallgraph\-info\*(C'\fR) بدون آن. .Sp تمایز مشابه پسوند برای خروجی‌های dump و aux را می‌توان با مشخص کردن \&\fB\-dumpbase\-ext .suf\fR علاوه بر \fB\-dumpbase basename.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 در دستوری مشخص شود که چندین ورودی را کامپایل می‌کند، یا کامپایل کرده و سپس پیوند می‌دهد، ممکن است همان‌طور که تحت \fB\-dumpdir\fR شرح داده شده با \&\fIdumppfx\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 خروجی‌های aux را \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 صریح یا پیش‌فرض الحاق می‌شوند (یا در صورت داشتن هرگونه مؤلفه دایرکتوری، جایگزین آن می‌شوند)، تا هر یک از کامپایل‌های متعدد، خروجی‌های aux و 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 بازنویسی (override) شود: .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 برای جمع‌بندی همهٔ این موارد جهت دستیابی به یک جریان دادهٔ شهودی اما تا حدی تقریبی: نام خروجی اصلی به یک بخش دایرکتوری و یک بخش نام پایه شکسته می‌شود؛ \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" شرحی از گزینه‌های خط فرمان مختص به هدف (target-specific) را برای هر ابزار (در خروجی استاندارد) چاپ می‌کند. برای برخی اهداف ممکن است اطلاعات اضافی مربوط به آن معماری هدف نیز چاپ شود. .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 برای ارتباط میان مراحل گوناگون کامپایل، به‌جای فایل‌های موقت از لوله‌ها (pipes) استفاده می‌کند. این ویژگی در برخی سامانه‌ها که در آن‌ها اسمبلر قادر به خواندن از لوله نیست با شکست مواجه می‌شود؛ اما اسمبلر گنو (GNU assembler) مشکلی با آن ندارد. .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 شود. نام پایهٔ فایل شیء اشتراکی برای شناسایی افزونه به‌منظور تجزیهٔ آرگومان‌ها استفاده می‌شود (گزینهٔ \&\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++‎، مشخصات (spec) متناظر زبان Ada را تولید می‌کند. .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 تولید می‌کند. این گزینه اعلان‌های Go از نوع \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 برای کدهایی باشد که به زبان‌های دیگر نوشته شده‌اند. .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 را فراخوانی کرده و پیوند با کتابخانه 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 به همان شکلی که در اصلاحیه ۱ (amendment 1) تغییر یافته است. .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. این استاندارد اساساً به‌طور کامل پشتیبانی می‌شود، به جز باگ‌ها و مشکلات ممیز شناور (عمدتاً اما نه منحصراً مربوط به ویژگی‌های اختیاری 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 برای new یا \&\fBO\fR برای old، به‌ترتیب در اولین نویسه پس از شماره خط و دو‌نقطه)، و اینکه آیا از یک اعلان آمده یا یک تعریف (\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 ممکن است به حلقه‌های رونوشت درون‌خطی تبدیل گردند. کد حاصل معمولاً هم کوچک‌تر و هم سریع‌تر است، اما از آنجا که فراخوانی‌های تابع دیگر به این شکل ظاهر نمی‌شوند، نمی‌توانید روی آن فراخوانی‌ها نقطهٔ توقف (breakpoint) بگذارید، و همچنین نمی‌توانید رفتار توابع را با پیوند دادن به یک کتابخانهٔ دیگر تغییر دهید. علاوه بر این، هنگامی که یک تابع به‌عنوان تابع توکار شناخته می‌شود، GCC ممکن است از اطلاعات مربوط به آن تابع برای هشدار دادن دربارهٔ اشکالات فراخوانی‌های آن، یا تولید کد کارآمدتر استفاده کند، حتی اگر کد حاصل همچنان حاوی فراخوانی به آن تابع باشد. برای نمونه، هشدارهایی با \fB\-Wformat\fR برای فراخوانی‌های نادرست به \&\f(CW\*(C`printf\*(C'\fR داده می‌شود هنگامی که \f(CW\*(C`printf\*(C'\fR توکار است و مشخص است که \f(CW\*(C`strlen\*(C'\fR حافظهٔ سراسری را تغییر نمی‌دهد. .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" عبارات شرطی با نوع‌های ناسازگار در آرگومان‌های دوم و سوم را مجاز می‌کند. مقدار چنین عبارتی void است. این گزینه برای 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 نشانه‌گذاری شده‌اند، فعال می‌کند. این یک ویژگی آزمایشی است که امکان آزمون واحد (unit testing) برای گذرگاه‌های 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 به تمام توابع درون‌خطی است. .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 برخی موارد فیلدهای بدون نام در ساختارها و اجتماع‌ها تنها با این گزینه پذیرفته می‌شوند. .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 تعریف می‌کند که نشان می‌دهند عملیات و مقادیر ثابت با نوع معناییِ قالب تبادلی یا گسترش‌یافته باید با دقت و دامنهٔ آن نوع ارزیابی شوند. این مقادیر جدید، ابرمجموعه‌ای از مقادیر مجاز تحت 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 است. پیش‌فرض در گویش‌های GNU (\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 دو سطح دیگر بین ۰ و ۳ وجود دارد که برای پشتیبانی از کدهای قدیمی‌تر ارائه شده‌اند؛ کدهایی که از افزونهٔ آرایه با طول صفر GCC (\fB[0]\fR) یا آرایه‌های تک‌عضوی به عنوان اعضای آرایهٔ انعطاف‌پذیر (\fB[1]\fR) استفاده می‌کنند. هنگامی که \fIlevel\fR برابر ۱ باشد، آرایهٔ انتهایی در صورتی به عنوان عضو آرایهٔ انعطاف‌پذیر تلقی می‌شود که به صورت \fB[]\fR، \&\fB[0]\fR یا \fB[1]\fR اعلان شده باشد. هنگامی که \fIlevel\fR برابر ۲ باشد، آرایهٔ انتهایی در صورتی به عنوان عضو آرایهٔ انعطاف‌پذیر تلقی می‌شود که به صورت \&\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" ترتیب ذخیره‌سازی اسکالر پیش‌فرضِ ساختارها و اجتماع‌ها را روی ترتیب بایت (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" رابط‌های ماژول کامپایل‌شده را برای واحد سرایند \&\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 مربوط به C++ ABI استفاده می‌کند. پیش‌فرض، نسخهٔ 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 ظاهر شد، یک درهم‌سازی استاندارد برای نوع‌های برداری پیاده‌سازی می‌کند. .Sp نسخهٔ 5، که نخستین بار در G++ 4.6 ظاهر شد، درهم‌سازی صفت const/volatile روی نوع‌های اشاره‌گر تابع، decltype یک اعلان ساده، و استفاده از یک پارامتر تابع در اعلان پارامتری دیگر را تصحیح می‌کند. .Sp نسخهٔ 6، که نخستین بار در G++ 4.7 ظاهر شد، رفتار ارتقای (promotion) نوع‌های شمارشی محدوده‌دارِ C++11 و درهم‌سازی بسته‌های آرگومان الگو، const/static_cast، عملگرهای پیشوندی ++ و \-\-، و تابع در محدودهٔ کلاس مورد استفاده به عنوان آرگومان الگو را تصحیح می‌کند. .Sp نسخهٔ 7، که نخستین بار در G++ 4.8 ظاهر شد، با nullptr_t به عنوان یک نوع توکار رفتار کرده و درهم‌سازی لامبداها را در محدودهٔ آرگومان پیش‌فرض تصحیح می‌کند. .Sp نسخهٔ 8، که نخستین بار در G++ 4.9 ظاهر شد، رفتار جایگزینی نوع‌های تابع با توصیف‌کننده‌های cv تابع (function\-cv\-qualifiers) را تصحیح می‌کند. .Sp نسخهٔ 9، که نخستین بار در G++ 5.2 ظاهر شد، هم‌ترازی \&\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 و برای کلاس‌هایی که تنها دارای سازنده‌های رونوشت/انتقال حذف‌شده هستند را تصحیح می‌کند. این نسخه به طور تصادفی قرارداد فراخوانی را برای کلاس‌هایی با یک سازندهٔ رونوشت حذف‌شده و یک سازندهٔ انتقال ناچیز (trivial) تغییر می‌دهد. .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 و نام‌های عملگر وابسته متمایز باشد. .Sp نسخهٔ 17، که نخستین بار در G++ 12 ظاهر شد، چیدمان کلاس‌هایی را که در C++14 به بالا از کلاس‌های تجمیعی (aggregate) با مقداردهنده‌های اولیهٔ پیش‌فرضِ عضو ارث‌بری می‌کنند، تصحیح می‌کند. .Sp نسخهٔ 18، که نخستین بار در G++ 13 ظاهر شد، درهم‌سازی لامبداهایی را که دارای زمینهٔ اضافی هستند تصحیح می‌کند. .Sp نسخهٔ 19، که نخستین بار در G++ 14 ظاهر شد، درهم‌سازی مقیدسازی‌های ساختاریافته را به گونه‌ای که شامل برچسب‌های ABI باشند اصلاح می‌کند، مدیریت اعضای cv\-qualified دارای [[no_unique_address]] را تصحیح کرده و درهم‌سازی قیود C++20 را روی الگوهای تابع اضافه می‌کند. .Sp نسخهٔ 20، که نخستین بار در G++ 15 ظاهر شد، درهم‌سازی لامبداها را در مقداردهنده‌های اولیهٔ عضو داده‌ای ایستا تصحیح می‌کند. .Sp نسخهٔ 21، که نخستین بار در G++ 16 ظاهر شد، شکار غیرضروری متغیرها در لامبداهای 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 در کد قابل مشاهده باشد یا از قلاب‌های \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، امضاهای جدید برای لیترال‌های تعریف‌شده توسط کاربر، به‌روزرسانی‌های مرتبط در کتابخانهٔ استاندارد، و ماکروهای آزمون ویژگیِ جدید \&\f(CW\*(C`_\|_cpp_char8_t\*(C'\fR و \f(CW\*(C`_\|_cpp_lib_char8_t\*(C'\fR است. .Sp این گزینه امکان اورلود (overload) توابع را برای رشته‌های معمولی و 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 کاملاً خوش‌ساخت (well\-formed) است، اما در صورت تعیین \&\fB\-fchar8_t\fR بدساخت (ill\-formed) محسوب می‌شود. .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 پیش از تلاش برای تغییر فضای ذخیره‌سازی تخصیص‌یافته، تهی (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 و بالاتر، مفاهیم بخشی از استاندارد زبان هستند، بنابراین \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 که در حافظهٔ موقت ذخیره (cache) می‌شوند را روی \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" معناشناسی‌ای که قراردادها بر اساس آن ارزیابی می‌شوند را روی \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 اعمال می‌شوند و در صورت شکست، برنامه بدساخت (ill\-formed) محسوب شده و خطایی صادر می‌شود. .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" این گزینه از اقدام «تحلیل بین‌رویه‌ای» (IPA) در زمانی که بدنه یک تابع inline در یک 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 به‌صورت درون‌خطی در بدنه توابع بسط می‌یابند. این گزینه باعث می‌شود در عوض یک تابع کوچک (شامل بررسی‌ها) ایجاد شود که در موقعیت مربوطه فراخوانی گردد. این امر اجازه می‌دهد معیارهای متفاوتی برای کامپایل بخش بررسی و باقیمانده بدنه تابع اعمال شود. .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" این گزینه درج بررسی‌ها را در محل‌های فراخوانی (بررسی در سمت فراخواننده) فعال می‌کند. .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" این گزینه قابلیت غیرفعال کردن بررسی‌های سمت فراخوانده/تعریف را فراهم می‌کند، که در غیر این صورت هنگام فعال بودن ویژگی قراردادها به‌طور پیش‌فرض فعال هستند. .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++ coroutines را فعال می‌کند. در \fB\-std=c++20\fR و بالاتر، coroutines بخشی از استاندارد زبان هستند، بنابراین \&\fB\-fcoroutines\fR به‌طور پیش‌فرض فعال است. .IP \fB\-fdiagnostics\-all\-candidates\fR 4 .IX Item "-fdiagnostics-all-candidates" به فرانت‌اند 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 تخلیهٔ اطلاعات مختص 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" اطلاعات سلسله‌مراتب کلاس را تخلیه می‌کند. اطلاعات جدول مجازی صادر می‌شود مگر آنکه \*(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" دنباله نمونه‌سازی‌های الگو را به صورت تورفته برای نمایش عمق بازگشت تخلیه می‌کند. گزینهٔ \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++ را مجبور می‌کند سازنده رونوشت را در همه موارد فراخوانی کند. این گزینه همچنین باعث می‌شود G++ توابع عضو بدیهی را فراخوانی کند که در غیر این صورت به‌صورت درون‌خطی بسط داده می‌شدند. .Sp در C++17، کامپایلر موظف است از این اشیاء موقت صرف‌نظر کند، اما این گزینه همچنان بر توابع عضو بدیهی تأثیر می‌گذارد. .IP \fB\-fno\-enforce\-eh\-specs\fR 4 .IX Item "-fno-enforce-eh-specs" کدی برای بررسی نقض مشخصات استثنا در زمان اجرا تولید نمی‌کند. این گزینه استاندارد C++ را نقض می‌کند، اما ممکن است برای کاهش اندازه کد در ساخت‌های نهایی، همانند تعریف \&\f(CW\*(C`NDEBUG\*(C'\fR مفید باشد. این کار به کد کاربر اجازه پرتاب استثناها بر خلاف مشخصات استثنا را نمی‌دهد؛ کامپایلر همچنان بر اساس مشخصات بهینه‌سازی را انجام می‌دهد، بنابراین پرتاب یک استثنای غیرمنتظره منجر به رفتار تعریف‌نشده در زمان اجرا خواهد شد. .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 اجازه می‌دهند دارای مقداردهی اولیه پویا (زمان اجرا) باشند. برای پشتیبانی از این ویژگی، هرگونه استفاده از چنین متغیری از طریق یک تابع پوششی انجام می‌شود که مقداردهی اولیه لازم را انجام می‌دهد. هنگامی که استفاده و تعریف متغیر در یک واحد ترجمه باشند، این بار اضافه می‌تواند با بهینه‌سازی حذف شود، اما هنگامی که استفاده در یک واحد ترجمه دیگر باشد، بار اضافهٔ قابل توجهی وجود دارد حتی اگر متغیر در واقع نیازی به مقداردهی اولیه پویا نداشته باشد. اگر برنامه‌نویس اطمینان داشته باشد که هیچ استفاده‌ای از متغیر در یک TU غیرتعریف‌کننده نیازی به راه‌اندازی مقداردهی اولیه پویا ندارد (خواه به این دلیل که متغیر به‌صورت ایستا مقداردهی اولیه شده است، یا استفاده از متغیر در TU تعریف‌کننده پیش از هر استفاده‌ای در TU دیگر اجرا خواهد شد)، می‌تواند با استفاده از گزینهٔ \&\fB\-fno\-extern\-tls\-init\fR از این بار اضافه جلوگیری کند. .Sp در مقصدهایی که از نام‌های مستعار نماد پشتیبانی می‌کنند، مقدار پیش‌فرض \&\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 را فشرده/تا کند. برخلاف درون‌خطی‌سازی، این بدان معناست که هیچ اطلاعات اشکال‌زدایی برای چنین فراخوانی‌هایی تولید نخواهد شد. از آنجا که این توابع به‌ندرت برای اشکال‌زدایی مورد توجه هستند، این پرچم به‌طور پیش‌فرض فعال است مگر اینکه \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" «ترفیع تابع فوری» را که به موجب آن برخی توابع می‌توانند طبق 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 در یک بافت فوری قرار دارد، بنابراین مجبور نیست یک مقدار ثابت تولید کند (این همان سازوکاری است که امکان ترکیب توابع 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 یا بالاتر استفاده شود. این امر می‌تواند منجر به تغییر مقداردهی اولیه از پویا (dynamic) به ایستا (static) و سایر بهینه‌سازی‌ها گردد. .IP \fB\-fno\-implicit\-templates\fR 4 .IX Item "-fno-implicit-templates" هرگز کدی برای الگوهای غیر inline که به صورت ضمنی نمونه‌سازی می‌شوند (یعنی از طریق استفاده)، تولید نمی‌کند؛ تنها برای نمونه‌سازی‌های صریح کد تولید می‌کند. اگر از این گزینه استفاده می‌کنید، باید مراقب باشید که کد خود را طوری ساختاردهی کنید تا شامل تمام نمونه‌سازی‌های صریح لازم باشد و در زمان پیوند با نمادهای تعریف‌نشده (undefined symbols) مواجه نشوید. .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 module 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" اعلان‌های توکار (built\-in) توابعی که توسط 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 است تا سربار اندازه متن (text size) را در مقایسه با تابعی بدون مشخصه استثنا، کاهش دهد یا حذف کند. اگر تابع دارای متغیرهای محلی با نوع‌هایی باشد که تخریب‌کننده‌های (destructors) غیربدیهی دارند، این مشخصه استثنا در واقع تابع را کوچک‌تر می‌کند زیرا پاک‌سازی‌های 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" هنگامی که یک پیام خطا به یک تخصیصِ (specialization) الگوی تابع اشاره دارد، کامپایلر معمولاً امضای الگو و به دنبال آن آرگومان‌های الگو و هرگونه 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" تمدید طول عمر متغیرهای موقت حلقهٔ for مبتنی بر بازه (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" تولید اطلاعات درباره هر کلاس دارای توابع مجازی را که برای ویژگی‌های شناسایی نوع زمان اجرای 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 معرفی شده‌اند، فعال می‌کند. این گزینه برای توابع آزادسازی حافظه (deallocation) جایگزینِ تعریف‌شده توسط کاربر که مثلاً از اندازه شیء برای تسریع آزادسازی استفاده می‌کنند، مفید است. این گزینه به طور پیش‌فرض در \&\fB\-std=c++14\fR و بالاتر فعال است. پرچم \fB\-Wsized\-deallocation\fR در مورد مکان‌هایی که ممکن است تمایل به افزودن یک تعریف داشته باشند، هشدار می‌دهد. .IP \fB\-fstrict\-enums\fR 4 .IX Item "-fstrict-enums" به کامپایلر اجازه می‌دهد تا با این فرض بهینه‌سازی کند که یک مقدار از نوع شمارشی (enumerated type) تنها می‌تواند یکی از مقادیر شمارش باشد (همان‌طور که در استاندارد C++ تعریف شده است؛ اساساً، مقداری که بتوان آن را با حداقل تعداد بیت‌های لازم برای نمایش همه شمارنده‌ها نمایش داد). اگر برنامه از یک تبدیل صریح (cast) برای تبدیل یک مقدار صحیح دلخواه به نوع شمارشی استفاده کند، ممکن است این فرض معتبر نباشد. این گزینه برای یک نوع شمارشی با نوع زیرین (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" حداکثر تعداد یادداشت‌های نمونه‌سازی الگو (template instantiation notes) برای یک هشدار یا خطای منفرد را روی \fIn\fR تنظیم می‌کند. مقدار پیش‌فرض ۱۰ است. .IP \fB\-ftemplate\-depth=\fR\fIn\fR 4 .IX Item "-ftemplate-depth=n" حداکثر عمق نمونه‌سازی برای کلاس‌های الگو را روی \fIn\fR تنظیم می‌کند. تعیین محدودیت روی عمق نمونه‌سازی الگو برای تشخیص بازگشت‌های بی‌پایان در حین نمونه‌سازی کلاس الگو ضروری است. برنامه‌های منطبق با ANSI/ISO C++ نباید به عمق حداکثری بیش از ۱۷ متکی باشند (در C++11 به ۱۰۲۴ تغییر یافت). مقدار پیش‌فرض ۹۰۰ است، چرا که کامپایلر ممکن است در برخی شرایط پیش از رسیدن به ۱۰۲۴ با کمبود فضای پشته (stack space) مواجه شود. .IP \fB\-fno\-threadsafe\-statics\fR 4 .IX Item "-fno-threadsafe-statics" کد اضافی لازم برای استفاده از روتین‌های مشخص‌شده در C++ ABI جهت مقداردهی اولیهٔ متغیرهای محلی ایستای امن برای نخ‌ها (thread-safe initialization of local statics) را تولید نمی‌کند. می‌توانید از این گزینه برای کاهش جزئی اندازهٔ کد در کدهایی که نیازی به امنیت نخ‌ها ندارند استفاده کنید. .IP \fB\-fuse\-cxa\-atexit\fR 4 .IX Item "-fuse-cxa-atexit" مخرب‌ها (destructors) را برای اشیائی با طول عمر ذخیره‌سازی ایستا با تابع \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR به جای تابع \f(CW\*(C`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) را در مواردی که آدرس‌های دو تابع در اشیاء مشترک (shared objects) متفاوتی گرفته شده‌اند، ندارد. .Sp اثر این کار این است که GCC می‌تواند در عمل، متدهای inline را با \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR نشانه‌گذاری کند تا در جدول صادرات (export table) یک DSO ظاهر نشوند و هنگام استفاده در درون DSO نیازی به ارجاع غیرمستقیم PLT نداشته باشند. فعال کردن این گزینه می‌تواند تأثیر چشمگیری بر زمان بارگذاری و پیوند یک DSO بگذارد، چرا که در صورت استفادهٔ زیاد کتابخانه از الگوها، اندازهٔ جدول صادرات پویا را به‌شدت کاهش می‌دهد. .Sp رفتار این سوییچ دقیقاً مشابه نشانه‌گذاری مستقیم متدها به عنوان hidden نیست، چرا که بر متغیرهای ایستای محلی تابع تأثیری ندارد و باعث نمی‌شود کامپایلر استنباط کند که تابع تنها در یک شیء مشترک تعریف شده است. .Sp می‌توانید یک متد را به‌طور صریح با یک سطح پدیداری (visibility) نشانه‌گذاری کنید تا اثر این سوییچ را برای آن متد خنثی سازید. برای نمونه، اگر می‌خواهید اشاره‌گرها به یک متد درون‌خطی خاص را مقایسه کنید، می‌توانید آن را دارای پدیداری default نشانه‌گذاری کنید. نشانه‌گذاری کلاس دربرگیرنده با پدیداری صریح هیچ تأثیری ندارد. .Sp متدهای درون‌خطی که به‌طور صریح نمونه‌سازی شده‌اند تحت تأثیر این گزینه قرار نمی‌گیرند، چرا که پیوند آن‌ها در غیر این صورت ممکن است از مرز یک کتابخانهٔ مشترک عبور کند. .IP \fB\-fvisibility\-ms\-compat\fR 4 .IX Item "-fvisibility-ms-compat" این پرچم تلاش می‌کند با استفاده از تنظیمات پدیداری، مدل پیوند (linkage model) زبان 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." نوع‌ها (types)، اما نه اعضای آن‌ها، به‌طور پیش‌فرض پنهان نیستند. .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 symbols) استفاده نمی‌کند، حتی اگر توسط پیونددهنده فراهم شده باشد. به‌طور پیش‌فرض، 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++ جستجو نمی‌کند، اما سایر دایرکتوری‌های استاندارد را همچنان جستجو می‌کند. (این گزینه هنگام ساخت کتابخانهٔ 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 tag) در زمینه‌ای استفاده شود که فاقد آن برچسب 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++ و Objective-C++)" درباره استفاده از عبارت کاما در درون یک عبارت اندیس‌گذاری هشدار می‌دهد. این کاربرد در 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 وجود عبارت‌های جداشده با کاما در یک اندیس، زمانی که یک عملگر اندیس سربارگذاری‌شده یافت شود و از تعداد و انواع مناسب آرگومان‌ها پشتیبانی کند، معتبر است. 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++ و Objective-C++)" هنگام انجام استنتاج آرگومان قالب کلاس (CTAD) روی نوعی که هیچ راهنمای استنتاج صریحی برای آن نوشته نشده است، هشدار می‌دهد. این هشدار مواردی را مشخص می‌کند که در آن‌ها 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++ و Objective-C++)" زمانی که یک کلاس غیرقابل‌استفاده به نظر برسد هشدار می‌دهد، زیرا تمام سازنده‌ها یا مخرب‌ها در آن کلاس خصوصی هستند و کلاس فاقد توابع دوست (friends) یا توابع عضو ایستای عمومی است. همچنین در صورتی که هیچ متد غیرخصوصی وجود نداشته باشد و حداقل یک تابع عضو خصوصی وجود داشته باشد که سازنده یا مخرب نباشد، هشدار می‌دهد. .IP "\fB\-Wdangling\-reference\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdangling-reference (فقط C++ و Objective-C++)" زمانی که یک ارجاع به یک شیء موقت مقید شود که طول عمر آن به پایان رسیده است، هشدار می‌دهد. برای مثال: .Sp .Vb 2 \& int n = 1; \& const int& r = std::max(n \- 1, n + 1); // r is dangling .Ve .Sp در مثال بالا، دو شیء موقت ایجاد می‌شود (یکی به ازای هر آرگومان) و ارجاعی به یکی از اشیاء موقت بازگردانده می‌شود. با این حال، هر دو شیء موقت در انتهای عبارت کامل نابود می‌شوند، بنابراین ارجاع \f(CW\*(C`r\*(C'\fR معلق (dangling) است. این هشدار همچنین ارجاع‌های معلق را در فهرست‌های مقداردهی اولیه عضو تشخیص می‌دهد: .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 destructor) باشد. .Sp این هشدار را می‌توان با استفاده از مشخصه \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++ و Objective-C++)" هنگامی که از \f(CW\*(C`delete\*(C'\fR برای نابودی نمونه‌ای از یک کلاس استفاده شود که دارای توابع مجازی و مخرب غیرمجازی است، هشدار می‌دهد. در صورتی که کلاس پایه فاقد مخرب مجازی باشد، نابودی نمونه‌ای از کلاس مشتق‌شده از طریق اشاره‌گری به کلاس پایه ناامن است. این هشدار با \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wdeprecated\-copy\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-copy (فقط C++ و Objective-C++)" هشدار می‌دهد که در C++11 و بالاتر، اعلان ضمنی یک سازنده کپی یا عملگر انتساب کپی در صورتی که کلاس دارای یک سازنده کپی یا عملگر انتساب کپی ارائه‌شده توسط کاربر باشد، منسوخ است. این هشدار با \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wdeprecated\-copy\-dtor\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-copy-dtor (فقط C++ و Objective-C++)" مشابه با \fB\-Wdeprecated\-copy\fR است، اما در صورتی که کلاس دارای یک مخرب ارائه‌شده توسط کاربر باشد نیز آن را منسوخ در نظر می‌گیرد. .IP "\fB\-Wno\-deprecated\-enum\-enum\-conversion\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-deprecated-enum-enum-conversion (فقط C++ و Objective-C++)" هشدار مربوط به حالتی را که تبدیل‌های حسابی معمول روی عملوندهایی اعمال می‌شوند که یکی از نوع شمارشی و دیگری از یک نوع شمارشی متفاوت است، غیرفعال می‌کند. این تبدیل در 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++ و Objective-C++)" هشدار مربوط به حالتی را که تبدیل‌های حسابی معمول روی عملوندهایی اعمال می‌شوند که یکی از نوع شمارشی و دیگری از نوع ممیز شناور است، غیرفعال می‌کند. این تبدیل در 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++ و Objective-C++)" هشدار می‌دهد که اعلان عملگر لیترال تعریف‌شده توسط کاربر با یک فاصله قبل از پسوند منسوخ شده است. این هشدار به‌طور پیش‌فرض در 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++ and Objective-C++ only)" هشدار می‌دهد که حذف کاما پیش از آرگومان‌های متغیر \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 با نوع پایه‌ای مشخص‌شده و بدون فهرست شمارنده‌ها (enumerator list)، در اعلانی غیر از صرفاً یک اعلان مستقل از آن enum به کار رود. به‌طور پیش‌فرض فعال است. این هشدار با \-pedantic\-errors به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-init\-list\-lifetime\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-init-list-lifetime (C++ and Objective-C++ only)" درباره استفاده‌هایی از \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\-expression یک \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 از یک فهرست مقداردهی اولیه محصور در آکولاد انتساب می‌یابد، آرایه موقت ایجادشده برای سمت راست انتساب فقط تا انتهای full\-expression زنده می‌ماند، بنابراین در دستور بعدی متغیر \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 هنگامی که یک سازنده فهرست، اشاره‌گر \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 وجود داشته باشد که هیچ فراخوانی از آن الزامات یک عبارت ثابت هسته‌ای را برآورده نکند. .Sp این هشدار به‌طور پیش‌فرض به عنوان یک هشدار سخت‌گیرانه (pedantic) در C++20 و پیش از آن فعال است. در 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 macros) در پایان کامپایل معتبر باشند. این گزینه به‌طور پیش‌فرض فعال نیست، زیرا تعیین آن نیازمند پردازش اضافی است. این گزینه ممکن است هنگام آماده‌سازی مجموعه‌هایی از header\-unitها برای اطمینان از سازگاری ماکروها مفید باشد. .IP "\fB\-Wno\-literal\-suffix\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-literal-suffix (C++ and Objective-C++ only)" هنگامی که پس از یک لیترال رشته‌ای یا نویسه‌ای یک 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++ and Objective-C++ only)" برای 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++ and Objective-C++ only)" هنگامی که یک 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++ and Objective-C++ only)" اگر ویژگی 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++ and Objective-C++ only)" هنگامی که مقصد فراخوانی یک تابع حافظه خام مانند \f(CW\*(C`memset\*(C'\fR یا \f(CW\*(C`memcpy\*(C'\fR شیئی از نوع کلاس باشد، و نوشتن در چنین شیئی ممکن است سازنده یا انتساب رونوشت (copy assignment) غیربدیهی یا حذف‌شده کلاس را دور بزند، درستیِ const یا کپسوله‌سازی را نقض کند، یا اشاره‌گرهای جدول مجازی را مخدوش نماید، هشدار می‌دهد. اصلاح بازنمود چنین اشیایی ممکن است ناورداهایی (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 فعال می‌شود. تبدیل نوع صریح اشاره‌گر شیء کلاس به \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)" زمانی که یک کلاس توابع مجازی (virtual functions) و یک مخرب (destructor) غیرمجازی دردسترس در خود یا در یک کلاس پایه چندریختی (polymorphic) دردسترس داشته باشد، هشدار می‌دهد؛ در چنین حالتی حذف نمونه‌ای از کلاس مشتق‌شده از طریق اشاره‌گری به خود کلاس یا کلاس پایه امکان‌پذیر اما ناامن است. این هشدار در صورت تعیین \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)" زمانی که ترتیب مقداردهنده‌های اولیهٔ عضو (member initializers) ارائه‌شده در کد با ترتیبی که باید اجرا شوند مطابقت ندارد، هشدار می‌دهد. به عنوان مثال: .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) شود. سناریوی متداولی که در آن حذف کپی رخ می‌دهد هنگام بازگشت از تابعی با نوع بازگشتی کلاسی است، مشروط بر اینکه عبارتِ بازگردانده‌شده نام یک شیء خودکار (automatic) غیرفرّار (non\-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 مبتنی بر بازه (range\-based for\-loop) در C++ یک کپی غیرضروری ایجاد کند. این حالت می‌تواند زمانی رخ دهد که اعلان بازه یک ارجاع (reference) نباشد، در حالی که احتمالاً باید ارجاع باشد. به عنوان مثال: .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 به آن متصل (bind) می‌گردد. .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) استفاده می‌کند یا به نوعی بدون پیوند (no linkage) وابسته است، هشدار ندهد. اگر نوع A به نوع B با پیوند داخلی یا بدون پیوند وابسته باشد، تعریف آن در چندین واحد ترجمه (translation unit) نقض 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 را سربارگذاری (overload) نکنید. .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)" هشدار مربوط به حالتی را که در آن یک گردانندهٔ استثنا (exception handler) توسط گردانندهٔ دیگری پوشانده (shadow) می‌شود، غیرفعال می‌کند؛ این حالت می‌تواند نشان‌دهندهٔ ترتیب نادرست گرداننده‌های استثنا باشد. .IP "\fB\-Wsfinae\-incomplete\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wsfinae-incomplete (C++ and Objective-C++ only)" دربارهٔ کلاسی که ناقص (incomplete) تشخیص داده شده است، یا تابعی با نوع بازگشتی auto که هنوز استنتاج نشده است، در زمینه‌ای که منجر به شکست جایگزینی (substitution failure) به‌جای خطا می‌شود و سپس آن کلاس یا تابع بعداً در همان واحد ترجمه (translation unit) تعریف می‌گردد، هشدار می‌دهد. این مسئله مشکل‌ساز است چرا که نمونه‌سازی‌های قالب (template instantiations) یا بررسی‌های مفهوم (concept checks) بسته به این‌که قبل یا بعد از تعریف رخ دهند، ممکن است نتایج متفاوتی داشته باشند. .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، این یک نگه‌بان معتبر است، زیرا \f(CW\*(C`NULL\*(C'\fR به‌صورت \f(CW\*(C`_\|_null\*(C'\fR تعریف شده است. اگرچه این یک ثابت اشاره‌گر تهی است نه خود اشاره‌گر تهی، اما تضمین می‌شود که اندازه‌ای یکسان با یک اشاره‌گر دارد. با این حال، این کاربرد میان کامپایلرهای گوناگون سازگار و قابل‌حمل نیست. .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)" هشدارهای مربوط به زمانی را که توابع دوست (friend) غیرقالبی درون یک قالب اعلان می‌شوند، غیرفعال می‌کند. در نسخه‌های بسیار قدیمی 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++ از تبدیل نوع سبک قدیمی (سبک C) به یک نوع غیر void استفاده شود، هشدار می‌دهد. تبدیل نوع‌های سبک جدید (\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 زمانی که یک اعلان تابع، توابع مجازی (virtual) یک کلاس پایه را پنهان (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 به کلاس مشتق‌شده برای خارج کردن تابع پایه از حالت پنهان است؛ مانند افزودن \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 صرفاً به‌صورت مجازی استفاده شود، کاربر ممکن است تشخیص داده باشد که معناشناسی (semantics) کلاس پایه برای برخی از سربارگذاری‌ها مناسب است. .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)، ترفیع (promotion) از یک نوع بدون علامت یا نوع شمارشی به یک نوع علامت‌دار را نسبت به تبدیل به یک نوع بدون علامت هم‌اندازه ترجیح می‌دهد، هشدار می‌دهد. نسخه‌های پیشین 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ها، و قالب‌های کلاس و تخصیص‌های آن‌ها با 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 یک ماژول فرستاده می‌شود، یک خطا است. با این حال، درون مقداردهنده اولیه یک متغیر یا در بدنه یک تابع غیر-inline، این یک افشا محسوب نمی‌شود و خطایی صادر نمی‌گردد. .Sp این وضعیت می‌تواند باعث شود الگوهای متغیر یا تابع در صورت ارجاع به چنین موجودیتی به طور تصادفی غیرقابل استفاده شوند، زیرا سایر واحدهای ترجمه‌ای که الگو را وارد (import) می‌کنند هرگز قادر به نمونه‌سازی آن نخواهند بود. این هشدار تلاش می‌کند مواردی را که ممکن است این اتفاق رخ دهد شناسایی کند. وجود یک نمونه‌سازی صریح هشدار را بی‌اثر می‌کند. .Sp این پرچم توسط \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wno\-expose\-global\-module\-tu\-local\fR 4 .IX Item "-Wno-expose-global-module-tu-local" افشای یک موجودیت محلیِ واحدِ ترجمه از طریق واسط یک ماژول نامعتبر است، زیرا ممکن است باعث نقض ODR شده و منجر به خطاهای پیوند (link) یا رفتارهای غیرمنتظره دیگر شود. با این حال، بسیاری از کتابخانه‌های موجود، موجودیت‌های TU\-local را در واسط خود اعلان می‌کنند، و اجتناب از افشای این موجودیت‌ها در برخی موارد ممکن است دشوار باشد. .Sp به عنوان یک افزونه، GCC اجازه افشای متغیرها و توابع درونی را که در بخش ماژول سراسری (global module fragment) اعلان شده بودند می‌دهد. این هشدار نشان می‌دهد که چه زمانی چنین افشای نامعتبری رخ داده است، و می‌تواند با استفاده از عملگرهای پراگمای تشخیصی در محل افشا یا در نقطه اعلان درونی خاموش شود. این موضوع همچنین برای اعلان‌های \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 خارج از واحد ترجمه‌ای که در آن اعلان شده است نام برده شود، هشدار می‌دهد. چنین اعلان‌هایی در طول جستجوی نام نادیده گرفته می‌شوند. این امر می‌تواند هنگام انجام 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)" هنگامی که یک تابع تبدیل شیء را به همان نوع، به یک کلاس پایه از آن نوع، یا به 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 از نوعی که به ترازبندی بزرگ‌تری نسبت به \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 با رفتار تعریف‌نشده، مانند ساخت یک شیء در بافری که از نوع شیء کوچک‌تر است، هشدار می‌دهد. برای نمونه، عبارت 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 جهت سازگاری با کدهای قدیمی به عنوان افزونه مجاز می‌داند صادر نمی‌شود. برای نمونه، عبارت \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 که از طریق ارجاع دریافت نمی‌کنند، هشدار می‌دهد. با \fB\-Wcatch\-value=1\fR (یا به اختصار \fB\-Wcatch\-value\fR) درباره انواع کلاس‌های چندریختی که با مقدار دریافت می‌شوند هشدار می‌دهد. با \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)" درباره ساختارهای با پشتیبانی مشروط (طبق 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) توسط کامپایلر حذف (delete) می‌شود، هشدار می‌دهد. این حالت زمانی رخ می‌دهد که نوع اعلان‌شده تابع با نوع تابعی که به‌طور ضمنی اعلان می‌شد مطابقت نداشته باشد. این هشدار به‌طور پیش‌فرض فعال است. .IP "\fB\-Wno\-delete\-incomplete\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-delete-incomplete (C++ and Objective-C++ only)" هنگام حذف یک اشاره‌گر به نوع ناقص (incomplete type)، که ممکن است موجب رفتار تعریف‌نشده در زمان اجرا شود، هشدار نمی‌دهد. این هشدار به‌طور پیش‌فرض فعال است. .IP "\fB\-Wextra\-semi\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wextra-semi (C++, Objective-C++ only)" درباره نقطه‌ویرگول‌های اضافی هشدار می‌دهد. زمینه‌های مختلفی وجود دارد که در آن‌ها یک نقطه‌ویرگول اضافی می‌تواند رخ دهد. یکی نقطه‌ویرگول پس از تعاریف توابع درون کلاس است که در همه گویش‌های 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 داشته باشد سرکوب می‌کند؛ این هشدار به‌طور پیش‌فرض فعال است زیرا علامت سه‌نقطه (ellipsis) به ارث برده نمی‌شود. .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) را نادیده می‌گیرد. طبق استاندارد 2014 ISO C++، اعمال \f(CW\*(C`offsetof\*(C'\fR به یک نوع با چیدمان غیراستاندارد (non\-standard\-layout) تعریف‌نشده است. با این وجود، در پیاده‌سازی‌های موجود C++، معمولاً \f(CW\*(C`offsetof\*(C'\fR نتایج معناداری ارائه می‌دهد. این پرچم برای کاربرانی است که آگاهند کدی غیرقابل‌حمل می‌نویسند و عمداً تصمیم گرفته‌اند هشدار درباره آن را نادیده بگیرند. .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)" درباره تعریف یک تابع آزادسازی بدون اندازه .Sp .Vb 2 \& void operator delete (void *) noexcept; \& void operator delete[] (void *) noexcept; .Ve .Sp بدون تعریف تابع متناظر آزادسازی همراه با اندازه .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، کیفیت کد بهبود می‌یابد. این هشدار با بهینه‌سازی زمان پیوند مؤثرتر خواهد بود، چرا که اطلاعات درباره گراف سلسله‌مراتب کلاس‌ها در آن کامل‌تر است. توصیه می‌شود ابتدا پیشنهادهای \fB\-Wsuggest\-final\-types\fR را بررسی کرده و سپس با نشانه‌گذاری‌های جدید برنامه را بازسازی (rebuild) کنید. .IP \fB\-Wsuggest\-override\fR 4 .IX Item "-Wsuggest-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 runtime)، نام کلاس پیش‌فرض \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" تولید کد شیء (object code) سازگار با زمان اجرای استاندارد 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" فرض را بر این می‌گذارد که تمام ارسال‌های پیام (message dispatches) در Objective\-C (\f(CW\*(C`[receiver message:arg]\*(C'\fR) در این واحد ترجمه تضمین می‌کنند که گیرنده (receiver) برابر با \f(CW\*(C`nil\*(C'\fR نیست. این کار امکان استفاده از نقاط ورودی کارآمدتر در زمان اجرا را فراهم می‌کند. این گزینه تنها در ترکیب با زمان اجرای NeXT و نسخهٔ ABI برابر با 0 یا 1 در دسترس است. .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 default constructor) هستند یا خیر. در این صورت، یک متد نمونهٔ ویژه به نام \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 عمل می‌کنند، نه متغیرهای به ارث رسیده از ابرکلاس‌ها (superclasses). فراخوانی تمام این متدها در سلسله‌مراتب وراثت یک شیء بر عهدهٔ زمان اجرای 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 الزامی است. این گزینه هم با زمان اجرای گنو و هم زمان اجرای NeXT در دسترس است (اما همراه با زمان اجرای NeXT در Mac OS X 10.2 و قبل‌تر موجود نیست). .IP \fB\-fobjc\-gc\fR 4 .IX Item "-fobjc-gc" بازیافت حافظه (garbage collection یا GC) را در برنامه‌های Objective\-C و Objective\-C++ فعال می‌کند. این گزینه تنها با زمان اجرای NeXT در دسترس است؛ زمان اجرای گنو پیاده‌سازی متفاوتی برای بازیافت حافظه دارد که نیازی به پرچم‌های ویژه کامپایلر ندارد. .IP \fB\-fobjc\-nilcheck\fR 4 .IX Item "-fobjc-nilcheck" برای زمان اجرای NeXT با نسخهٔ 2 از ABI، پیش از فراخوانی واقعی متد، بررسی می‌کند که گیرنده در فراخوانی‌های متد nil نباشد. این رفتار پیش‌فرض است و می‌توان آن را با \&\fB\-fno\-objc\-nilcheck\fR غیرفعال کرد. متدهای کلاس و فراخوانی‌های super بدون توجه به اینکه این پرچم چگونه تنظیم شده است، هرگز از این طریق برای nil بررسی نمی‌شوند. در حال حاضر، هنگام استفاده از زمان اجرای گنو یا نسخه‌های قدیمی‌تر 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 سودمند است، زیرا امکان تغییر پیاده‌سازی‌های کلاس‌های مجزا را در طول اجرای برنامه فراهم می‌سازد. زمان اجرای گنو در حال حاضر صرف‌نظر از گزینه‌های خط فرمان، همیشه فراخوانی‌های \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]" دیداری‌بودن (visibility) پیش‌فرض متغیرهای نمونه را روی گزینهٔ مشخص‌شده تنظیم می‌کند تا متغیرهای نمونه‌ای که خارج از محدودهٔ هرگونه دستور اصلاح‌کنندهٔ دسترسی اعلان شده‌اند، به طور پیش‌فرض دارای دیداری‌بودن تعیین‌شده باشند. .IP \fB\-gen\-decls\fR 4 .IX Item "-gen-decls" اعلان‌های رابط (interface declarations) را برای تمام کلاس‌های دیده‌شده در فایل مبدأ، در فایلی به نام \fIsourcename.decl\fR ذخیره (dump) می‌کند. .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)" اگر برای یک ویژگی در شیء 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)" اگر واسط یک کلاس فاقد کلاس والد (superclass) باشد، هشدار می‌دهد. برای نمونه بیشتر کلاس‌ها از \f(CW\*(C`NSObject\*(C'\fR (یا \f(CW\*(C`Object\*(C'\fR) ارث‌بری می‌کنند. هنگام اعلان کلاس‌هایی که قرار است کلاس ریشه (root class) باشند، می‌توان با نشانه‌گذاری واسط آن‌ها با \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)" اگر در حین کامپایل چندین متد با انواع داده‌ایِ متفاوت برای یک سلکتور مشابه یافت شود، هشدار می‌دهد. این بررسی بر روی فهرست متدها در مرحله نهایی کامپایل انجام می‌شود. علاوه بر این، بررسی برای هر سلکتوری که در یک عبارت \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" .IX Subsection "گزینه‌های کنترل OpenMP و OpenACC" کامپایلر GCC افزونه‌های OpenMP را برای زبان‌های C، C++ و Fortran با گزینه \fB\-fopenmp\fR پشتیبانی می‌کند. به طور مشابه، افزونه‌های 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 در OpenMP و OpenACC باید تولید شود. رفتار پیش‌فرض، معادل با \fB\-foffload=default\fR، تولید کد برای تمامی مقصدهای offload پشتیبانی‌شده است. ساختار \fB\-foffload=disable\fR کد را صرفاً برای حالت بازگشتی میزبان (host fallback) تولید می‌کند، در حالی که \&\fB\-foffload=\fR\fItarget\-list\fR کد را تنها برای فهرست مشخص‌شده‌ای از مقصدهای offload که با کاما از هم جدا شده‌اند، تولید می‌نماید. .Sp مقصدهای offload در قالب سه‌گانه مقصد (target-triplet) داخلی GCC مشخص می‌شوند. می‌توانید کامپایلر را با گزینه \fB\-v\fR اجرا کنید تا فهرست مقصدهای offload پیکربندی‌شده در زیر \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 را به کامپایلرهای مربوط به تمام مقصدهای offload فعال پاس می‌دهد. می‌توانید گزینه‌هایی را که فقط برای یک یا چند مقصد خاص اعمال می‌شوند با استفاده از فرمت \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" مدیریت دیرکتیوهای OpenACC شامل \fB#pragma acc\fR در C/C++ و \&\fB!$acc\fR در فرمت آزاد Fortran و \&\fB!$acc\fR، \fBc$acc\fR و \&\fB*$acc\fR در فرمت ثابت Fortran را فعال می‌کند. این گزینه مستلزم \fB\-pthread\fR است و بنابراین تنها روی مقصدهایی پشتیبانی می‌شود که دارای پشتیبانی از \fB\-pthread\fR باشند. .IP \fB\-fopenacc\-dim=\fR\fIgeom\fR 4 .IX Item "-fopenacc-dim=geom" ابعاد محاسباتی پیش‌فرض را برای نواحی موازی offload که آن‌ها را صریحاً تعیین نکرده‌اند، مشخص می‌کند. مقدار \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 و نشانه‌گذار کامپایل شرطی \fB!$\fR را فعال می‌کند. در فرمت منبع ثابت Fortran، نشانه‌گذارها می‌توانند با \&\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 فعال می‌نماید. در فرمت منبع ثابت Fortran، نشانه‌گذارها می‌توانند با \&\fBc\fR یا \fB*\fR نیز آغاز شوند. سایر دیرکتیوهای OpenMP نادیده گرفته می‌شوند. مگر در حالتی که \&\fB\-fopenmp\fR نیز مشخص شده باشد، ناحیه \f(CW\*(C`loop\*(C'\fR مستقل از بند (clause) تعیین‌شده برای \f(CW\*(C`bind\*(C'\fR، به ناحیه وظیفه جاری مقید می‌شود. .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 در صورت فعال بودن این گزینه، علاوه بر تولید کلون‌های SIMD برای توابع نشانه‌گذاری‌شده با دیرکتیو \&\f(CW\*(C`declare simd\*(C'\fR، کامپایلر GCC برای توابع نشانه‌گذاری‌شده با دیرکتیو \f(CW\*(C`declare target\*(C'\fR در OpenMP که برای برداری‌سازی مناسب هستند نیز کلون تولید می‌کند. مقدار \&\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 "گزینه‌های واپایش قالب‌بندی پیام‌های تشخیصی (Options to Control Diagnostic Messages Formatting)" .IX Subsection "Options to Control Diagnostic Messages Formatting" به‌طور سنتی، پیام‌های تشخیصی بدون در نظر گرفتن وضعیت دستگاه خروجی (مانند پهنای آن و...) قالب‌بندی می‌شدند. می‌توانید از گزینه‌های شرح‌داده‌شده در زیر برای واپایش الگوریتم قالب‌بندی پیام‌های تشخیصی استفاده کنید؛ برای نمونه، تعداد نویسه‌ها در هر خط، یا اینکه اطلاعات مکان در کد مبدأ با چه بسامدی گزارش شوند. توجه داشته باشید که ممکن است برخی فرانت‌اندهای زبان از این گزینه‌ها پشتیبانی نکنند. .IP \fB\-fmessage\-length=\fR\fIn\fR 4 .IX Item "-fmessage-length=n" تلاش می‌کند پیام‌های خطا را طوری قالب‌بندی کند که در خطوطی با حدود \fIn\fR نویسه جای گیرند. اگر \fIn\fR صفر باشد، هیچ شکست خطی انجام نمی‌شود؛ هر پیام خطا در یک خط تکی نمایش می‌یابد. این رفتار پیش‌فرض برای تمامی فرانت‌اندها است. .Sp توجه \- این گزینه همچنین بر نمایش دستورات پیش‌پردازندهٔ \fB#error\fR و \&\fB#warning\fR، و صفت \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 برای رنگ‌آمیزی مسیرهای رخدادهای جریان واپایش (control\-flow) که از طریق \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 برای برجسته‌سازی عناصر نامعتبر در نمودارهای هنر متنی. .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) به‌گونه‌ای پیکربندی شود که پیش‌فرض آن تحت تأثیر متغیرهای محیطی قرار گیرد. تحت چنین پیکربندی‌ای، پیش‌فرض GCC استفاده از \fBauto\fR خواهد بود اگر هر یک از متغیرهای محیطی \fBGCC_URLS\fR یا \fBTERM_URLS\fR در محیط کامپایلر موجود و غیرخالی باشند، و در صورت عدم وجود هر دو، روی \fBnever\fR قرار می‌گیرد. .Sp با این حال، حتی با \fB\-fdiagnostics\-urls=always\fR نیز این رفتار وابسته به این متغیرهای محیطی است: اگر \fBGCC_URLS\fR روی مقدار خالی یا \fBno\fR تنظیم شده باشد، نشانی‌های وب را در پیام‌های تشخیصی قرار نده. اگر روی \fBst\fR تنظیم شده باشد، URLها از توالی‌های گریز ST استفاده می‌کنند. اگر روی \fBbel\fR (حالت پیش‌فرض) تنظیم شده باشد، URLها از توالی‌های گریز 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 را کنترل می‌کند. مقدار پیش‌فرض آن 6 است. .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) را در قالبی ماشین‌خوان (machine\-parseable) و مناسب برای استفاده در IDEها صادر می‌کند. به ازای هر fix\-it، خطی پس از پیام عیب‌یابی مربوطه چاپ می‌شود که با رشته‌ی "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" راهنمایی‌های تصحیح را پس از چاپ هرگونه پیام عیب‌یابی، در قالب unified diff روی stderr چاپ می‌کند. برای نمونه: .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) را نشان می‌دهند، مانند: .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" این گزینه اطلاعات بیشتری را هنگام چاپ مسیرهای جریان کنترل مرتبط با یک پیام عیب‌یابی فراهم می‌کند. .Sp اگر این گزینه مشخص شود، عمق پشته برای هر توالی از رویدادها در \fB\-fdiagnostics\-path\-format=inline\-events\fR چاپ خواهد شد. اگر همراه با \fB\-fdiagnostics\-path\-format=separate\-events\fR مشخص شود، هنگام چاپ هر رویداد، عمق پشته و اعلان تابع ضمیمه خواهد شد. .Sp این گزینه برای استفادهٔ توسعه‌دهندگان GCC و توسعه‌دهندگان افزونه‌ها هنگام اشکال‌زدایی پیام‌های عیب‌یابی که جریان کنترل بین‌رویه‌ای را گزارش می‌دهند، در نظر گرفته شده است. .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 و راهنمای سبک نگارش گنو مطابقت دارد. برخی ابزارها ممکن است با مبدأ 0 بهتر کار کنند؛ هر مقدار غیرمنفی را می‌توان مشخص کرد. .IP \fB\-fdiagnostics\-escape\-format=\fR\fIFORMAT\fR 4 .IX Item "-fdiagnostics-escape-format=FORMAT" هنگامی که GCC خطوط سورس مرتبط با یک پیام عیب‌یابی را چاپ می‌کند، معمولاً تلاش می‌کند بایت‌های سورس را مستقیماً چاپ کند. با این حال، برخی از پیام‌های عیب‌یابی به مشکلات کدگذاری در فایل سورس، مانند UTF\-8 ناهنجار یا مشکلات استانداردسازی یونیکد مربوط می‌شوند. این پیام‌های عیب‌یابی علامت‌گذاری می‌شوند تا GCC هنگام چاپ خطوط سورس مربوط به آن‌ها، بایت‌هایی را که اسکی قابل‌چاپ نیستند گریزدهی کند. .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" برخی پیام‌های عیب‌یابی می‌توانند شامل نمودارهای «هنر متنی» باشند: تجسم‌هایی ایجادشده از متن، که برای مشاهده در یک قلم با عرض ثابت (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 از تورفتگی و نشانه‌های گلوله‌ای در خروجی متنی خود برای نمایش ساختار تو‌در‌توی این پیام‌ها استفاده می‌کند، اطلاعات مکان را برای شفاف‌تر شدن ساختار به خطوط جداگانه منتقل می‌کند، و اطلاعات تکراری اضافی را حذف می‌نماید. .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]" افزودن یک عنصر توکار