.\" -*- 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 2025-08-08 gcc-15.2.0 GNU .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "نام (NAME)" 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، یا \&\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 "خلاصه گزینه‌ها" .IX Subsection "خلاصه گزینه‌ها" در اینجا خلاصه‌ای از همهٔ گزینه‌ها، گروه‌بندی‌شده بر پایه نوع، آمده است. توضیحات مربوطه در بخش‌های بعدی ارائه شده است. .IP "\fIگزینه‌های کلی\fR" 4 .IX Item "گزینه‌های کلی" \&\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 \-specs=\fR\fIfile\fR \fB\-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 .IP "\fIگزینه‌های زبان C\fR" 4 .IX Item "گزینه‌های زبان C" \&\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 .IP "\fIگزینه‌های زبان C++\fR" 4 .IX Item "گزینه‌های زبان C++" \&\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 \-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\-fno\-elide\-constructors \&\-fno\-enforce\-eh\-specs \&\-fno\-gnu\-keywords \&\-fno\-immediate\-escalation \&\-fno\-implicit\-templates \&\-fno\-implicit\-inline\-templates \&\-fno\-implement\-inlines \&\-fmodule\-header\fR[\fB=\fR\fIkind\fR] \fB\-fmodule\-only \-fmodules \&\-fmodule\-implicit\-inline \&\-fno\-module\-lazy \&\-fmodule\-mapper=\fR\fIspecification\fR \&\fB\-fmodule\-version\-ignore \&\-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 \&\-fno\-rtti \-fsized\-deallocation \&\-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\-weak \-nostdinc++ \&\-fvisibility\-inlines\-hidden \&\-fvisibility\-ms\-compat \&\-fext\-numeric\-literals \&\-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\-Wabi\-tag \-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 \&\-Weffc++ \-Wno\-elaborated\-enum\-base \&\-Wno\-exceptions \-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 \&\-Wstrict\-null\-sentinel \-Wno\-subobject\-linkage \-Wtemplates \&\-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++\fR" 4 .IX Item "گزینه‌های زبان‌های Objective-C و Objective-C++" \&\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\fR" 4 .IX Item "گزینه‌های OpenMP و OpenACC" \&\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گزینه‌های قالب‌بندی پیام‌های عیب‌یابی\fR" 4 .IX Item "گزینه‌های قالب‌بندی پیام‌های عیب‌یابی" \&\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|\fBjson\fR|\fBjson\-stderr\fR|\fBjson\-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 \&\-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] .IP "\fIگزینه‌های هشدار\fR" 4 .IX Item "گزینه‌های هشدار" \&\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\-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 \&\-Wno\-c++11\-extensions \-Wno\-c++14\-extensions \-Wno\-c++17\-extensions \&\-Wno\-c++20\-extensions \-Wno\-c++23\-extensions \&\-Wcalloc\-transposed\-args \&\-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 \&\-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\-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 \&\-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=n \-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\-variable \&\-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\fR.IP "\fIگزینه‌های تحلیل‌گر ایستا\fR" 4 .IX Item "گزینه‌های تحلیل‌گر ایستا" \&\fB\-fanalyzer \&\-fanalyzer\-call\-summaries \&\-fanalyzer\-checker=\fR\fIname\fR \&\fB\-fno\-analyzer\-feasibility \&\-fanalyzer\-fine\-grained \&\-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 \&\-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 \-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\-gprune\-btf \-gno\-prune\-btf \&\-ggdb \-grecord\-gcc\-switches \-gno\-record\-gcc\-switches \&\-gstrict\-dwarf \-gno\-strict\-dwarf \&\-gas\-loc\-support \-gno\-as\-loc\-support \&\-gas\-locview\-support \-gno\-as\-locview\-support \&\-gcodeview \&\-gcolumn\-info \-gno\-column\-info \-gdwarf32 \-gdwarf64 \&\-gstatement\-frontiers \-gno\-statement\-frontiers \&\-gvariable\-location\-views \-gno\-variable\-location\-views \&\-ginternal\-reset\-location\-views \-gno\-internal\-reset\-location\-views \&\-ginline\-points \-gno\-inline\-points \&\-gvms \-gz\fR[\fB=\fR\fItype\fR] \&\fB\-gsplit\-dwarf \-gdescribe\-dies \-gno\-describe\-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\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\-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 \&\-fdata\-sections \-fdce \-fdelayed\-branch \&\-fdelete\-null\-pointer\-checks \-fdevirtualize \-fdevirtualize\-speculatively \&\-fdevirtualize\-at\-ltrans \-fdse \&\-fearly\-inlining \-fipa\-sra \-fexpensive\-optimizations \-ffat\-lto\-objects \&\-ffast\-math \-ffinite\-math\-only \-ffloat\-store \-fexcess\-precision=\fR\fIstyle\fR \&\fB\-ffinite\-loops \&\-fforward\-propagate \-ffp\-contract=\fR\fIstyle\fR \fB\-ffunction\-sections \&\-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm \-fgraphite\-identity \&\-fgcse\-sm \-fhoist\-adjacent\-loads \-fif\-conversion \&\-fif\-conversion2 \-findirect\-inlining \&\-finline\-stringops[=\fR\fIfn\fR\fB] \&\-finline\-functions \-finline\-functions\-called\-once \-finline\-limit=\fR\fIn\fR \&\fB\-finline\-small\-functions \-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\-stack\-alignment \-fipa\-icf \-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 \&\-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\-fp\-int\-builtin\-inexact \-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 \&\-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 \&\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR \&\fB\-O \-O0 \-O1 \-O2 \-O3 \-Os \-Ofast \-Og \-Oz\fR.IP "\fIگزینه‌های ابزارگذاری برنامه (Program Instrumentation Options)\fR" 4 .IX Item "گزینه‌های ابزارگذاری برنامه (Program Instrumentation Options)" \&\fB\-p \-pg \-fprofile\-arcs \-\-coverage \-ftest\-coverage \&\-fcondition\-coverage \&\-fpath\-coverage \&\-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 \-fbounds\-check \-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] .IP "\fIگزینه‌های پیش‌پردازنده (Preprocessor Options)\fR" 4 .IX Item "گزینه‌های پیش‌پردازنده (Preprocessor Options)" \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] \&\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 .IP "\fIگزینه‌های اسمبلر (Assembler Options)\fR" 4 .IX Item "گزینه‌های اسمبلر (Assembler Options)" \&\fB\-Wa,\fR\fIoption\fR \fB\-Xassembler\fR \fIoption\fR .IP "\fIگزینه‌های پیونددهنده (Linker Options)\fR" 4 .IX Item "گزینه‌های پیونددهنده (Linker Options)" \&\fIobject\-file\-name\fR \fB\-fuse\-ld=\fR\fIlinker\fR \fB\-l\fR\fIlibrary\fR \&\fB\-nostartfiles \-nodefaultlibs \-nolibc \-nostdlib \-nostdlib++ \&\-e\fR \fIentry\fR \fB\-\-entry=\fR\fIentry\fR \&\fB\-pie \-pthread \-r \-rdynamic \&\-s \-static \-static\-pie \-static\-libgcc \-static\-libstdc++ \&\-static\-libasan \-static\-libtsan \-static\-liblsan \-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\-z\fR \fIkeyword\fR .IP "\fIگزینه‌های دایرکتوری (Directory Options)\fR" 4 .IX Item "گزینه‌های دایرکتوری (Directory Options)" \&\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\-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\-\-embed\-dir=\fR\fIdir\fR \&\fB\-L\fR\fIdir\fR \fB\-no\-canonical\-prefixes \-\-no\-sysroot\-suffix \&\-nostdinc \-nostdinc++ \-\-sysroot=\fR\fIdir\fR .IP "\fIگزینه‌های تولید کد (Code Generation Options)\fR" 4 .IX Item "گزینه‌های تولید کد (Code Generation Options)" \&\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 \&\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] \&\fB\-fstrict\-volatile\-bitfields \-fsync\-libcalls \&\-fzero\-init\-padding\-bits=\fR\fIvalue\fR .IP "\fIگزینه‌های توسعه‌دهنده (Developer Options)\fR" 4 .IX Item "گزینه‌های توسعه‌دهنده (Developer Options)" \&\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\-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\-file\-name=\fR\fIlibrary\fR \fB\-print\-libgcc\-file\-name \&\-print\-multi\-directory \-print\-multi\-lib \-print\-multi\-os\-directory \&\-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 \-time\fR[\fB=\fR\fIfile\fR] .IP "\fIگزینه‌های وابسته به ماشین (Machine\-Dependent Options)\fR" 4 .IX Item "گزینه‌های وابسته به ماشین (Machine-Dependent Options)" \&\fIگزینه‌های AArch64\fR (\fBAArch64 Options\fR) \&\fB\-mabi=\fR\fIname\fR \fB\-mbig\-endian \-mlittle\-endian \&\-mgeneral\-regs\-only \&\-mcmodel=tiny \-mcmodel=small \-mcmodel=large \&\-mstrict\-align \-mno\-strict\-align \&\-momit\-leaf\-frame\-pointer \&\-mtls\-dialect=desc \-mtls\-dialect=traditional \&\-mtls\-size=\fR\fIsize\fR \&\fB\-mfix\-cortex\-a53\-835769 \-mfix\-cortex\-a53\-843419 \&\-mlow\-precision\-recip\-sqrt \-mlow\-precision\-sqrt \-mlow\-precision\-div \&\-mpc\-relative\-literal\-loads \&\-msign\-return\-address=\fR\fIscope\fR \&\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR \&\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR\fB|\fR\fIgcs\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\-mverbose\-cost\-dump \&\-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\-ldp\-fusion \-mlate\-ldp\-fusion \&\-Wexperimental\-fmv\-target\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\-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\-mstack\-size=\fR\fIbytes\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 \-mno\-mpy \-mmul32x16 \-mmul64 \-matomic \&\-mnorm \-mspfp \-mspfp\-compact \-mspfp\-fast \-msimd \-msoft\-float \-mswap \&\-mcrc \-mdsp\-packa \-mdvbf \-mlock \-mmac\-d16 \-mmac\-24 \-mrtsc \-mswape \&\-mtelephony \-mxy \-misize \-mannotate\-align \-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\-malign\-call \-mauto\-modify\-reg \-mbbit\-peephole \-mno\-brcc \&\-mcase\-vector\-pcrel \-mcompact\-casesi \-mno\-cond\-exec \-mearly\-cbranchsi \&\-mexpand\-adddi \-mindexed\-loads \-mlra \-mlra\-priority\-none \&\-mlra\-priority\-compact \-mlra\-priority\-noncompact \-mmillicode \&\-mmixed\-code \-mq\-class \-mRcq \-mRcw \-msize\-level=\fR\fIlevel\fR \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmultcost=\fR\fInum\fR \fB\-mcode\-density\-frame \&\-munalign\-prob\-threshold=\fR\fIprobability\fR \fB\-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 \-mno\-apcs\-frame \&\-mabi=\fR\fIname\fR \&\fB\-mapcs\-stack\-check \-mno\-apcs\-stack\-check \&\-mapcs\-reentrant \-mno\-apcs\-reentrant \&\-mgeneral\-regs\-only \&\-msched\-prolog \-mno\-sched\-prolog \&\-mlittle\-endian \-mbig\-endian \&\-mbe8 \-mbe32 \&\-mfloat\-abi=\fR\fIname\fR \&\fB\-mfp16\-format=\fR\fIname\fR \&\fB\-mthumb\-interwork \-mno\-thumb\-interwork \&\-mcpu=\fR\fIname\fR \fB\-march=\fR\fIname\fR \fB\-mfpu=\fR\fIname\fR \&\fB\-mtune=\fR\fIname\fR \fB\-mprint\-tune\-info \&\-mstructure\-size\-boundary=\fR\fIn\fR \&\fB\-mabort\-on\-noreturn \&\-mlong\-calls \-mno\-long\-calls \&\-msingle\-pic\-base \-mno\-single\-pic\-base \&\-mpic\-register=\fR\fIreg\fR \&\fB\-mnop\-fun\-dllimport \&\-mpoke\-function\-name \&\-mthumb \-marm \-mflip\-thumb \&\-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 \&\-mneon\-for\-64bits \&\-mslow\-flash\-data \&\-masm\-syntax\-unified \&\-mrestrict\-it \&\-mverbose\-cost\-dump \&\-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\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB] [+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB]]\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 \-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 \-mno\-omit\-leaf\-frame\-pointer \&\-mspecld\-anomaly \-mno\-specld\-anomaly \-mcsync\-anomaly \-mno\-csync\-anomaly \&\-mlow\-64k \-mno\-low64k \-mstack\-check\-l1 \-mid\-shared\-library \&\-mno\-id\-shared\-library \-mshared\-library\-id=\fR\fIn\fR \&\fB\-mleaf\-id\-shared\-library \-mno\-leaf\-id\-shared\-library \&\-msep\-data \-mno\-sep\-data \-mlong\-calls \-mno\-long\-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 .Sp \&\fIگزینه‌های CRIS\fR (\fBCRIS Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR \fB\-march=\fR\fIcpu\fR \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmax\-stack\-frame=\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 \&\-melf \-maout \-sim \-sim2 \&\-mmul\-bug\-workaround \-mno\-mul\-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 \-EB \-mlittle\-endian \-EL \&\-mhard\-float \-msoft\-float \-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\-mcse\-cc \-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 \-mthread \&\-municode \-mwin32 \-mwindows \-fno\-set\-stack\-executable\fR .Sp \&\fIگزینه‌های Darwin\fR (\fBDarwin Options\fR) \&\fB\-all_load \-allowable_client \-arch \-arch_errors_fatal \&\-arch_only \-bind_at_load \-bundle \-bundle_loader \&\-client_name \-compatibility_version \-current_version \&\-dead_strip \&\-dependency\-file \-dylib_file \-dylinker_install_name \&\-dynamic \-dynamiclib \-exported_symbols_list \&\-filelist \-flat_namespace \-force_cpusubtype_ALL \&\-force_flat_namespace \-headerpad_max_install_names \&\-iframework \&\-image_base \-init \-install_name \-keep_private_externs \&\-multi_module \-multiply_defined \-multiply_defined_unused \&\-noall_load \-no_dead_strip_inits_and_terms \-nodefaultrpaths \&\-nofixprebinding \-nomultidefs \-noprebind \-noseglinkedit \&\-pagezero_size \-prebind \-prebind_all_twolevel_modules \&\-private_bundle \-read_only_relocs \-sectalign \&\-sectobjectsymbols \-whyload \-seg1addr \&\-sectcreate \-sectobjectsymbols \-sectorder \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr \&\-seg_addr_table \-seg_addr_table_filename \-seglinkedit \&\-segprot \-segs_read_only_addr \-segs_read_write_addr \&\-single_module \-static \-sub_library \-sub_umbrella \&\-twolevel_namespace \-umbrella \-undefined \&\-unexported_symbols_list \-weak_reference_mismatches \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR \&\fB\-mkernel \-mone\-byte\-bool\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 .Sp \&\fIگزینه‌های eBPF\fR (\fBeBPF Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \&\-mframe\-limit=\fR\fIbytes\fR \fB\-mxbpf \-mco\-re \-mno\-co\-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 .Sp \&\fIگزینه‌های FR30\fR (\fBFR30 Options\fR) \&\fB\-msmall\-model \-mno\-lsim\fR .Sp \&\fIگزینه‌های FT32\fR (\fBFT32 Options\fR) \&\fB\-msim \-mlra \-mnodiv \-mft32b \-mcompress \-mnopm\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 \-mno\-dword \&\-mdouble \-mno\-double \&\-mmedia \-mno\-media \-mmuladd \-mno\-muladd \&\-mfdpic \-minline\-plt \-mgprel\-ro \-multilib\-library\-pic \&\-mlinked\-fp \-mlong\-calls \-malign\-labels \&\-mlibrary\-pic \-macc\-4 \-macc\-8 \&\-mpack \-mno\-pack \-mno\-eflags \-mcond\-move \-mno\-cond\-move \&\-moptimize\-membar \-mno\-optimize\-membar \&\-mscc \-mno\-scc \-mcond\-exec \-mno\-cond\-exec \&\-mvliw\-branch \-mno\-vliw\-branch \&\-mmulti\-cond\-exec \-mno\-multi\-cond\-exec \-mnested\-cond\-exec \&\-mno\-nested\-cond\-exec \-mtomcat\-stats \&\-mTLS \-mtls \&\-mcpu=\fR\fIcpu\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 \-mexr \-mno\-exr \-mint32 \-malign\-300\fR .Sp \&\fIگزینه‌های HPPA\fR (\fBHPPA Options\fR) \&\fB\-march=\fR\fIarchitecture\-type\fR \&\fB\-matomic\-libcalls \-mbig\-switch \&\-mcaller\-copies \-mdisable\-fpregs \-mdisable\-indexing \&\-mordered \-mfast\-indirect\-calls \-mgas \-mgnu\-ld \-mhp\-ld \&\-mfixed\-range=\fR\fIregister\-range\fR \&\fB\-mcoherent\-ldcw \-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls \&\-mlong\-load\-store \-mno\-atomic\-libcalls \-mno\-disable\-fpregs \&\-mno\-disable\-indexing \-mno\-fast\-indirect\-calls \-mno\-gas \&\-mno\-jump\-in\-delay \-mno\-long\-load\-store \&\-mno\-portable\-runtime \-mno\-soft\-float \&\-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\-mspace\-regs \-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 \-mno\-sdata \&\-mconstant\-gp \-mauto\-pic \-mfused\-madd \&\-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\-prefer\-non\-data\-spec\-insns \-msched\-prefer\-non\-control\-spec\-insns \&\-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 \-mno\-lsx \-mlasx \-mno\-lasx \&\-mbranch\-cost=\fR\fIn\fR \fB\-maddr\-reg\-reg\-cost=\fR\fIn\fR \fB\-mcheck\-zero\-division \&\-mno\-check\-zero\-division \&\-mcond\-move\-int \-mno\-cond\-move\-int \&\-mcond\-move\-float \-mno\-cond\-move\-float \&\-memcpy \-mno\-memcpy \-mstrict\-align \-mno\-strict\-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 \-mno\-direct\-extern\-access \&\-mcmodel=\fR\fIcode\-model\fR \fB\-mrelax \-mpass\-mrelax\-to\-as \&\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mfrecipe \-mno\-frecipe \-mdiv32 \-mno\-div32 \&\-mlam\-bh \-mno\-lam\-bh \-mlamcas \-mno\-lamcas \-mld\-seq\-sa \-mno\-ld\-seq\-sa \&\-mtls\-dialect=\fR\fIopt\fR \fB\-mannotate\-tablejump \-mno\-annotate\-tablejump\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 \-mno\-align\-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 \-mcpu32 \-m5200 \-m5206e \-m528x \-m5307 \-m5407 \&\-mcfv4e \-mbitfield \-mno\-bitfield \-mc68000 \-mc68020 \&\-mnobitfield \-mrtd \-mno\-rtd \-mdiv \-mno\-div \-mshort \&\-mno\-short \-mhard\-float \-m68881 \-msoft\-float \-mpcrel \&\-malign\-int \-mstrict\-align \-msep\-data \-mno\-sep\-data \&\-mshared\-library\-id=n \-mid\-shared\-library \-mno\-id\-shared\-library \&\-mxgot \-mno\-xgot \-mlong\-jump\-table\-offsets\fR .Sp \&\fIگزینه‌های MCore\fR (\fBMCore Options\fR) \&\fB\-mhardlit \-mno\-hardlit \-mdiv \-mno\-div \-mrelax\-immediates \&\-mno\-relax\-immediates \-mwide\-bitfields \-mno\-wide\-bitfields \&\-m4byte\-functions \-mno\-4byte\-functions \-mcallgraph\-data \&\-mno\-callgraph\-data \-mslow\-bytes \-mno\-slow\-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\-stack\-check \-mxl\-gp\-opt \-mno\-clearbss \&\-mxl\-multiply\-high \-mxl\-float\-convert \-mxl\-float\-sqrt \&\-mbig\-endian \-mlittle\-endian \-mxl\-reorder \-mxl\-mode\-\fR\fIapp\-model\fR \&\fB\-mpic\-data\-is\-text\-relative\fR .Sp \&\fIگزینه‌های MIPS\fR (\fBMIPS Options\fR) \&\fB\-EL \-EB \-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 \-mno\-mips16 \-mflip\-mips16 \&\-minterlink\-compressed \-mno\-interlink\-compressed \&\-minterlink\-mips16 \-mno\-interlink\-mips16 \&\-mabi=\fR\fIabi\fR \fB\-mabicalls \-mno\-abicalls \&\-mshared \-mno\-shared \-mplt \-mno\-plt \-mxgot \-mno\-xgot \&\-mgp32 \-mgp64 \-mfp32 \-mfpxx \-mfp64 \-mhard\-float \-msoft\-float \&\-mno\-float \-msingle\-float \-mdouble\-float \&\-modd\-spreg \-mno\-odd\-spreg \&\-mabs=\fR\fImode\fR \fB\-mnan=\fR\fIencoding\fR \&\fB\-mdsp \-mno\-dsp \-mdspr2 \-mno\-dspr2 \&\-mmcu \-mmno\-mcu \&\-meva \-mno\-eva \&\-mvirt \-mno\-virt \&\-mxpa \-mno\-xpa \&\-mcrc \-mno\-crc \&\-mginv \-mno\-ginv \&\-mmicromips \-mno\-micromips \&\-mmsa \-mno\-msa \&\-mloongson\-mmi \-mno\-loongson\-mmi \&\-mloongson\-ext \-mno\-loongson\-ext \&\-mloongson\-ext2 \-mno\-loongson\-ext2 \&\-mfpu=\fR\fIfpu\-type\fR \&\fB\-msmartmips \-mno\-smartmips \&\-mpaired\-single \-mno\-paired\-single \-mdmx \-mno\-mdmx \&\-mips3d \-mno\-mips3d \-mmt \-mno\-mt \-mllsc \-mno\-llsc \&\-mlong64 \-mlong32 \-msym32 \-mno\-sym32 \&\-G\fR\fInum\fR \fB\-mlocal\-sdata \-mno\-local\-sdata \&\-mextern\-sdata \-mno\-extern\-sdata \-mgpopt \-mno\-gopt \&\-membedded\-data \-mno\-embedded\-data \&\-muninit\-const\-in\-rodata \-mno\-uninit\-const\-in\-rodata \&\-mcode\-readable=\fR\fIsetting\fR \&\fB\-msplit\-addresses \-mno\-split\-addresses \&\-mexplicit\-relocs \-mno\-explicit\-relocs \&\-mexplicit\-relocs=\fR\fIrelease\fR \&\fB\-mcheck\-zero\-division \-mno\-check\-zero\-division \&\-mdivide\-traps \-mdivide\-breaks \&\-mload\-store\-pairs \-mno\-load\-store\-pairs \&\-mstrict\-align \-mno\-strict\-align \&\-mno\-unaligned\-access \-munaligned\-access \&\-mmemcpy \-mno\-memcpy \-mlong\-calls \-mno\-long\-calls \&\-mmad \-mno\-mad \-mimadd \-mno\-imadd \-mfused\-madd \-mno\-fused\-madd \-nocpp \&\-mfix\-24k \-mno\-fix\-24k \&\-mfix\-r4000 \-mno\-fix\-r4000 \-mfix\-r4400 \-mno\-fix\-r4400 \&\-mfix\-r5900 \-mno\-fix\-r5900 \&\-mfix\-r10000 \-mno\-fix\-r10000 \-mfix\-rm7000 \-mno\-fix\-rm7000 \&\-mfix\-vr4120 \-mno\-fix\-vr4120 \&\-mfix\-vr4130 \-mno\-fix\-vr4130 \-mfix\-sb1 \-mno\-fix\-sb1 \&\-mflush\-func=\fR\fIfunc\fR \fB\-mno\-flush\-func \&\-mbranch\-cost=\fR\fInum\fR \fB\-mbranch\-likely \-mno\-branch\-likely \&\-mcompact\-branches=\fR\fIpolicy\fR \&\fB\-mfp\-exceptions \-mno\-fp\-exceptions \&\-mvr4130\-align \-mno\-vr4130\-align \-msynci \-mno\-synci \&\-mlxc1\-sxc1 \-mno\-lxc1\-sxc1 \-mmadd4 \-mno\-madd4 \&\-mrelax\-pic\-calls \-mno\-relax\-pic\-calls \-mmcount\-ra\-address \&\-mframe\-header\-opt \-mno\-frame\-header\-opt\fR.Sp \&\fIگزینه‌های MMIX\fR (\fBگزینه‌های MMIX\fR) \&\fB\-mlibfuncs \-mno\-libfuncs \-mepsilon \-mno\-epsilon \-mabi=gnu \&\-mabi=mmixware \-mzero\-extend \-mknuthdiv \-mtoplevel\-symbols \&\-melf \-mbranch\-predict \-mno\-branch\-predict \-mbase\-addresses \&\-mno\-base\-addresses \-msingle\-exit \-mno\-single\-exit\fR .Sp \&\fIگزینه‌های MN10300\fR (\fBگزینه‌های MN10300\fR) \&\fB\-mmult\-bug \-mno\-mult\-bug \&\-mno\-am33 \-mam33 \-mam33\-2 \-mam34 \&\-mtune=\fR\fIcpu\-type\fR \&\fB\-mreturn\-pointer\-on\-d0 \&\-mno\-crt0 \-mrelax \-mliw \-msetlb\fR .Sp \&\fIگزینه‌های Moxie\fR (\fBگزینه‌های Moxie\fR) \&\fB\-meb \-mel \-mmul.x \-mno\-crt0\fR .Sp \&\fIگزینه‌های MSP430\fR (\fBگزینه‌های MSP430\fR) \&\fB\-msim \-masm\-hex \-mmcu= \-mcpu= \-mlarge \-msmall \-mrelax \&\-mwarn\-mcu \&\-mcode\-region= \-mdata\-region= \&\-msilicon\-errata= \-msilicon\-errata\-warn= \&\-mhwmult= \-minrt \-mtiny\-printf \-mmax\-inline\-shift=\fR .Sp \&\fIگزینه‌های NDS32\fR (\fBگزینه‌های NDS32\fR) \&\fB\-mbig\-endian \-mlittle\-endian \&\-mreduced\-regs \-mfull\-regs \&\-mcmov \-mno\-cmov \&\-mext\-perf \-mno\-ext\-perf \&\-mext\-perf2 \-mno\-ext\-perf2 \&\-mext\-string \-mno\-ext\-string \&\-mv3push \-mno\-v3push \&\-m16bit \-mno\-16bit \&\-misr\-vector\-size=\fR\fInum\fR \&\fB\-mcache\-block\-size=\fR\fInum\fR \&\fB\-march=\fR\fIarch\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \&\fB\-mctor\-dtor \-mrelax\fR .Sp \&\fIگزینه‌های Nvidia PTX\fR (\fBگزینه‌های Nvidia PTX\fR) \&\fB\-m64 \-mmainkernel \-moptimize\fR .Sp \&\fIگزینه‌های OpenRISC\fR (\fBگزینه‌های OpenRISC\fR) \&\fB\-mboard=\fR\fIname\fR \fB\-mnewlib \-mhard\-mul \-mhard\-div \&\-msoft\-mul \-msoft\-div \&\-msoft\-float \-mhard\-float \-mdouble\-float \-munordered\-float \&\-mcmov \-mror \-mrori \-msext \-msfimm \-mshftimm \&\-mcmodel=\fR\fIcode\-model\fR .Sp \&\fIگزینه‌های PDP\-11\fR (\fBگزینه‌های PDP\-11\fR) \&\fB\-mfpu \-msoft\-float \-mac0 \-mno\-ac0 \-m40 \-m45 \-m10 \&\-mint32 \-mno\-int16 \-mint16 \-mno\-int32 \&\-msplit \-munix\-asm \-mdec\-asm \-mgnu\-asm \-mlra\fR .Sp \&\fIگزینه‌های PowerPC\fR گزینه‌های RS/6000 و PowerPC را ببینید. .Sp \&\fIگزینه‌های PRU\fR (\fBگزینه‌های PRU\fR) \&\fB\-mmcu=\fR\fImcu\fR \fB\-minrt \-mno\-relax \-mloop \&\-mabi=\fR\fIvariant\fR .Sp \&\fIگزینه‌های RISC\-V\fR (\fBگزینه‌های RISC\-V\fR) \&\fB\-mbranch\-cost=\fR\fIN\-instruction\fR \&\fB\-mplt \-mno\-plt \&\-mabi=\fR\fIABI\-string\fR \&\fB\-mfdiv \-mno\-fdiv \&\-mfence\-tso \-mno\-fence\-tso \&\-mdiv \-mno\-div \&\-misa\-spec=\fR\fIISA\-spec\-string\fR \&\fB\-march=\fR\fIISA\-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\-save\-restore \&\-mshorten\-memrefs \-mno\-shorten\-memrefs \&\-mstrict\-align \-mno\-strict\-align \&\-mcmodel=medlow \-mcmodel=medany \-mcmodel=large \&\-mexplicit\-relocs \-mno\-explicit\-relocs \&\-mrelax \-mno\-relax \&\-mriscv\-attribute \-mno\-riscv\-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 \-mno\-csr\-check \&\-mmovcc \-mno\-movcc \&\-minline\-atomics \-mno\-inline\-atomics \&\-minline\-strlen \-mno\-inline\-strlen \&\-minline\-strcmp \-mno\-inline\-strcmp \&\-minline\-strncmp \-mno\-inline\-strncmp \&\-mtls\-dialect=desc \-mtls\-dialect=trad\fR .Sp \&\fIگزینه‌های RL78\fR (\fBگزینه‌های RL78\fR) \&\fB\-msim \-mmul=none \-mmul=g13 \-mmul=g14 \-mallregs \&\-mcpu=g10 \-mcpu=g13 \-mcpu=g14 \-mg10 \-mg13 \-mg14 \&\-m64bit\-doubles \-m32bit\-doubles \-msave\-mduc\-in\-interrupts\fR .Sp \&\fIگزینه‌های RS/6000 و PowerPC\fR (\fBگزینه‌های RS/6000 و PowerPC\fR) \&\fB\-mcpu=\fR\fIcpu\-type\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \&\fB\-mpowerpc64 \&\-maltivec \-mno\-altivec \&\-mpowerpc\-gpopt \-mno\-powerpc\-gpopt \&\-mpowerpc\-gfxopt \-mno\-powerpc\-gfxopt \&\-mmfcrf \-mno\-mfcrf \-mpopcntb \-mno\-popcntb \-mpopcntd \-mno\-popcntd \&\-mfprnd \-mno\-fprnd \&\-mcmpb \-mno\-cmpb \-mhard\-dfp \-mno\-hard\-dfp \&\-mfull\-toc \-mminimal\-toc \-mno\-fp\-in\-toc \-mno\-sum\-in\-toc \&\-m64 \-m32 \-mxl\-compat \-mno\-xl\-compat \-mpe \&\-malign\-power \-malign\-natural \&\-msoft\-float \-mhard\-float \-mmultiple \-mno\-multiple \&\-mupdate \-mno\-update \&\-mavoid\-indexed\-addresses \-mno\-avoid\-indexed\-addresses \&\-mfused\-madd \-mno\-fused\-madd \-mbit\-align \-mno\-bit\-align \&\-mstrict\-align \-mno\-strict\-align \-mrelocatable \&\-mno\-relocatable \-mrelocatable\-lib \-mno\-relocatable\-lib \&\-mtoc \-mno\-toc \-mlittle \-mlittle\-endian \-mbig \-mbig\-endian \&\-mdynamic\-no\-pic \-mswdiv \-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 \&\-mlongcall \-mno\-longcall \-mpltseq \-mno\-pltseq \&\-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\-mno\-block\-ops\-unaligned\-vsx \&\-mstring\-compare\-inline\-limit=\fR\fInum\fR \&\fB\-misel \-mno\-isel \&\-mvrsave \-mno\-vrsave \&\-mmulhw \-mno\-mulhw \&\-mdlmzb \-mno\-dlmzb \&\-mprototype \-mno\-prototype \&\-msim \-mmvme \-mads \-myellowknife \-memb \-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 \&\-mno\-recip\-precision \&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \-mno\-friz \&\-mpointers\-to\-nested\-functions \-mno\-pointers\-to\-nested\-functions \&\-msave\-toc\-indirect \-mno\-save\-toc\-indirect \&\-mpower8\-fusion \-mno\-mpower8\-fusion \&\-mcrypto \-mno\-crypto \-mhtm \-mno\-htm \&\-mquad\-memory \-mno\-quad\-memory \&\-mquad\-memory\-atomic \-mno\-quad\-memory\-atomic \&\-mcompat\-align\-parm \-mno\-compat\-align\-parm \&\-mfloat128 \-mno\-float128 \-mfloat128\-hardware \-mno\-float128\-hardware \&\-mgnu\-attribute \-mno\-gnu\-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 \-mno\-prefixed \&\-mpcrel \-mno\-pcrel \-mmma \-mno\-mmma \-mrop\-protect \-mno\-rop\-protect \&\-mprivileged \-mno\-privileged\fR .Sp \&\fIگزینه‌های RX\fR (\fBگزینه‌های RX\fR) \&\fB\-m64bit\-doubles \-m32bit\-doubles \-fpu \-nofpu \&\-mcpu= \&\-mbig\-endian\-data \-mlittle\-endian\-data \&\-msmall\-data \&\-msim \-mno\-sim \&\-mas100\-syntax \-mno\-as100\-syntax \&\-mrelax \&\-mmax\-constant\-size= \&\-mint\-register= \&\-mpid \&\-mallow\-string\-insns \-mno\-allow\-string\-insns \&\-mjsr \&\-mno\-warn\-multiple\-fast\-interrupts \&\-msave\-acc\-in\-interrupts\fR .Sp \&\fIگزینه‌های S/390 و zSeries\fR (\fBگزینه‌های S/390 و zSeries\fR) \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-march=\fR\fIcpu\-type\fR \&\fB\-mhard\-float \-msoft\-float \-mhard\-dfp \-mno\-hard\-dfp \&\-mlong\-double\-64 \-mlong\-double\-128 \&\-mbackchain \-mno\-backchain \-mpacked\-stack \-mno\-packed\-stack \&\-msmall\-exec \-mno\-small\-exec \-mmvcle \-mno\-mvcle \&\-m64 \-m31 \-mdebug \-mno\-debug \-mesa \-mzarch \&\-mhtm \-mvx \-mzvector \&\-mtpf\-trace \-mno\-tpf\-trace \-mtpf\-trace\-skip \-mno\-tpf\-trace\-skip \&\-mfused\-madd \-mno\-fused\-madd \&\-mwarn\-framesize \-mwarn\-dynamicstack \-mstack\-size \-mstack\-guard \&\-mhotpatch=\fR\fIhalfwords\fR\fB,\fR\fIhalfwords\fR .Sp \&\fIگزینه‌های SH\fR (\fBگزینه‌های SH\fR) \&\fB\-m1 \-m2 \-m2e \&\-m2a\-nofpu \-m2a\-single\-only \-m2a\-single \-m2a \&\-m3 \-m3e \&\-m4\-nofpu \-m4\-single\-only \-m4\-single \-m4 \&\-m4a\-nofpu \-m4a\-single\-only \-m4a\-single \-m4a \-m4al \&\-mb \-ml \-mdalign \-mrelax \&\-mbigtable \-mfmovd \-mrenesas \-mno\-renesas \-mnomacsave \&\-mieee \-mno\-ieee \-mbitops \-misize \-minline\-ic_invalidate \-mpadstruct \&\-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 \-mno\-zdcbranch \&\-mcbranch\-force\-delay\-slot \&\-mfused\-madd \-mno\-fused\-madd \-mfsca \-mno\-fsca \-mfsrra \-mno\-fsrra \&\-mpretend\-cmove \-mtas\fR .Sp \&\fIگزینه‌های Solaris 2\fR (\fBگزینه‌های Solaris 2\fR) \&\fB\-mclear\-hwcap \-mno\-clear\-hwcap \-mimpure\-text \-mno\-impure\-text \&\-pthreads\fR .Sp \&\fIگزینه‌های SPARC\fR (\fBگزینه‌های SPARC\fR) \&\fB\-mcpu=\fR\fIcpu\-type\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \&\fB\-mmemory\-model=\fR\fImem\-model\fR \&\fB\-m32 \-m64 \-mapp\-regs \-mno\-app\-regs \&\-mfaster\-structs \-mno\-faster\-structs \-mflat \-mno\-flat \&\-mfpu \-mno\-fpu \-mhard\-float \-msoft\-float \&\-mhard\-quad\-float \-msoft\-quad\-float \&\-mstack\-bias \-mno\-stack\-bias \&\-mstd\-struct\-return \-mno\-std\-struct\-return \&\-munaligned\-doubles \-mno\-unaligned\-doubles \&\-muser\-mode \-mno\-user\-mode \&\-mv8plus \-mno\-v8plus \-mvis \-mno\-vis \&\-mvis2 \-mno\-vis2 \&\-mvis3 \-mno\-vis3 \-mvis3b \-mno\-vis3b \&\-mvis4 \-mno\-vis4 \-mvis4b \-mno\-vis4b \&\-mcbcond \-mno\-cbcond \-mfmaf \-mno\-fmaf \-mfsmuld \-mno\-fsmuld \&\-mpopc \-mno\-popc \-msubxc \-mno\-subxc \&\-mfix\-at697f \-mfix\-ut699 \-mfix\-ut700 \-mfix\-gr712rc\fR .Sp \&\fIگزینه‌های System V\fR (\fBگزینه‌های System V\fR) \&\fB\-Qy \-Qn \-YP,\fR\fIpaths\fR \fB\-Ym,\fR\fIdir\fR .Sp \&\fIگزینه‌های V850\fR (\fBگزینه‌های V850\fR) \&\fB\-mlong\-calls \-mno\-long\-calls \-mep \-mno\-ep \&\-mprolog\-function \-mno\-prolog\-function \-mspace \&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR \&\fB\-mapp\-regs \-mno\-app\-regs \&\-mdisable\-callt \-mno\-disable\-callt \&\-mv850e2v3 \-mv850e2 \-mv850e1 \-mv850es \&\-mv850e \-mv850 \-mv850e3v5 \&\-mloop \&\-mrelax \&\-mlong\-jumps \&\-msoft\-float \&\-mhard\-float \&\-mgcc\-abi \&\-mrh850\-abi \&\-mbig\-switch\fR.Sp \&\fIگزینه‌های VAX\fR (\fBVAX Options\fR) \&\fB\-munix \-mgnu \-md \-md\-float \-mg \-mg\-float \-mlra\fR .Sp \&\fIگزینه‌های Visium\fR (\fBVisium Options\fR) \&\fB\-mdebug \-msim \-mfpu \-mno\-fpu \-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 \-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 \&\-mno\-wide\-multiply \-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 \-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 \-mthreads \-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.1\-256 \-mavx10.1\-512 \-mevex512 \-mavx10.2 \&\-mamx\-avx512 \-mamx\-tf32 \-mamx\-transpose \-mmovrs \-mamx\-movrs \&\-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 \&\-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\-mfentry\-name=\fR\fIname\fR \fB\-mfentry\-section=\fR\fIname\fR \&\fB\-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 \-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 \-mneeded \-mno\-direct\-extern\-access \&\-munroll\-only\-small\-loops \-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 \-mno\-const16 \&\-mfused\-madd \-mno\-fused\-madd \&\-mforce\-no\-pic \&\-mserialize\-volatile \-mno\-serialize\-volatile \&\-mtext\-section\-literals \-mno\-text\-section\-literals \&\-mauto\-litpools \-mno\-auto\-litpools \&\-mtarget\-align \-mno\-target\-align \&\-mlongcalls \-mno\-longcalls \&\-mabi=\fR\fIabi\-type\fR \&\fB\-mextra\-l32r\-costs=\fR\fIcycles\fR \&\fB\-mstrict\-align \-mno\-strict\-align\fR .Sp \&\fIگزینه‌های zSeries\fR گزینه‌های S/390 و zSeries را ببینید..SS "گزینه‌های کنترل نوع خروجی (Options Controlling the Kind of Output)" .IX Subsection "Options Controlling the Kind of Output" کامپایل می‌تواند شامل حداکثر چهار مرحله باشد: پیش‌پردازش، کامپایل اصلی، اسمبلی و پیوند دادن، که همواره به همین ترتیب انجام می‌شوند. GCC قادر است چندین فایل را پیش‌پردازش و کامپایل کرده و آن‌ها را به چند فایل ورودی اسمبلر یا یک فایل ورودی اسمبلر تبدیل کند؛ سپس هر فایل ورودی اسمبلر یک فایل شیء (object file) تولید می‌کند و مرحلهٔ پیوند، تمام فایل‌های شیء را (چه مواردی که به‌تازگی کامپایل شده‌اند و چه مواردی که به عنوان ورودی مشخص شده‌اند) در یک فایل اجرایی با یکدیگر ترکیب می‌کند. .PP برای هر فایل ورودی داده‌شده، پسوند نام فایل مشخص می‌کند که چه نوع کامپایلی انجام شود: .IP \fIfile\fR\fB.c\fR 4 .IX Item "file.c" کد منبع C که باید پیش‌پردازش شود. .IP \fIfile\fR\fB.i\fR 4 .IX Item "file.i" کد منبع C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.ii\fR 4 .IX Item "file.ii" کد منبع C++ که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.m\fR 4 .IX Item "file.m" کد منبع Objective\-C. توجه داشته باشید که برای کارکرد یک برنامهٔ Objective\-C، باید آن را با کتابخانهٔ \fIlibobjc\fR پیوند دهید. .IP \fIfile\fR\fB.mi\fR 4 .IX Item "file.mi" کد منبع Objective\-C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.mm\fR 4 .IX Item "file.mm" .PD 0 .IP \fIfile\fR\fB.M\fR 4 .IX Item "file.M" .PD کد منبع Objective\-C++. توجه داشته باشید که برای کارکرد یک برنامهٔ Objective\-C++، باید آن را با کتابخانهٔ \fIlibobjc\fR پیوند دهید. توجه داشته باشید که \fB.M\fR دقیقاً به حرف بزرگ M اشاره دارد. .IP \fIfile\fR\fB.mii\fR 4 .IX Item "file.mii" کد منبع Objective\-C++ که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.h\fR 4 .IX Item "file.h" فایل سرآیند C، C++، Objective\-C یا Objective\-C++ جهت تبدیل به یک سرآیند ازپیش‌کامپایل‌شده (پیش‌فرض)، یا فایل سرآیند C، C++ برای تبدیل به یک مشخصهٔ Ada (از طریق گزینهٔ \fB\-fdump\-ada\-spec\fR). .IP \fIfile\fR\fB.cc\fR 4 .IX Item "file.cc" .PD 0 .IP \fIfile\fR\fB.cp\fR 4 .IX Item "file.cp" .IP \fIfile\fR\fB.cxx\fR 4 .IX Item "file.cxx" .IP \fIfile\fR\fB.cpp\fR 4 .IX Item "file.cpp" .IP \fIfile\fR\fB.CPP\fR 4 .IX Item "file.CPP" .IP \fIfile\fR\fB.c++\fR 4 .IX Item "file.c++" .IP \fIfile\fR\fB.C\fR 4 .IX Item "file.C" .PD کد منبع C++ که باید پیش‌پردازش شود. توجه داشته باشید که در \fB.cxx\fR، دو حرف آخر باید دقیقاً هر دو \fBx\fR باشند. به همین ترتیب، \&\fB.C\fR دقیقاً به حرف بزرگ C اشاره دارد. .IP \fIfile\fR\fB.mm\fR 4 .IX Item "file.mm" .PD 0 .IP \fIfile\fR\fB.M\fR 4 .IX Item "file.M" .PD کد منبع Objective\-C++ که باید پیش‌پردازش شود. .IP \fIfile\fR\fB.mii\fR 4 .IX Item "file.mii" کد منبع Objective\-C++ که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.hh\fR 4 .IX Item "file.hh" .PD 0 .IP \fIfile\fR\fB.H\fR 4 .IX Item "file.H" .IP \fIfile\fR\fB.hp\fR 4 .IX Item "file.hp" .IP \fIfile\fR\fB.hxx\fR 4 .IX Item "file.hxx" .IP \fIfile\fR\fB.hpp\fR 4 .IX Item "file.hpp" .IP \fIfile\fR\fB.HPP\fR 4 .IX Item "file.HPP" .IP \fIfile\fR\fB.h++\fR 4 .IX Item "file.h++" .IP \fIfile\fR\fB.tcc\fR 4 .IX Item "file.tcc" .PD فایل سرآیند C++ جهت تبدیل به یک سرآیند ازپیش‌کامپایل‌شده یا مشخصهٔ Ada. .IP \fIfile\fR\fB.f\fR 4 .IX Item "file.f" .PD 0 .IP \fIfile\fR\fB.for\fR 4 .IX Item "file.for" .IP \fIfile\fR\fB.ftn\fR 4 .IX Item "file.ftn" .IP \fIfile\fR\fB.fi\fR 4 .IX Item "file.fi" .PD کد منبع Fortran با قالب ثابت (fixed form) که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.F\fR 4 .IX Item "file.F" .PD 0 .IP \fIfile\fR\fB.FOR\fR 4 .IX Item "file.FOR" .IP \fIfile\fR\fB.fpp\fR 4 .IX Item "file.fpp" .IP \fIfile\fR\fB.FPP\fR 4 .IX Item "file.FPP" .IP \fIfile\fR\fB.FTN\fR 4 .IX Item "file.FTN" .PD کد منبع Fortran با قالب ثابت که باید پیش‌پردازش شود (با پیش‌پردازندهٔ سنتی). .IP \fIfile\fR\fB.f90\fR 4 .IX Item "file.f90" .PD 0 .IP \fIfile\fR\fB.f95\fR 4 .IX Item "file.f95" .IP \fIfile\fR\fB.f03\fR 4 .IX Item "file.f03" .IP \fIfile\fR\fB.f08\fR 4 .IX Item "file.f08" .IP \fIfile\fR\fB.fii\fR 4 .IX Item "file.fii" .PD کد منبع Fortran با قالب آزاد (free form) که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.F90\fR 4 .IX Item "file.F90" .PD 0 .IP \fIfile\fR\fB.F95\fR 4 .IX Item "file.F95" .IP \fIfile\fR\fB.F03\fR 4 .IX Item "file.F03" .IP \fIfile\fR\fB.F08\fR 4 .IX Item "file.F08" .PD کد منبع Fortran با قالب آزاد که باید پیش‌پردازش شود (با پیش‌پردازندهٔ سنتی). .IP \fIfile\fR\fB.cob\fR 4 .IX Item "file.cob" .PD 0 .IP \fIfile\fR\fB.COB\fR 4 .IX Item "file.COB" .IP \fIfile\fR\fB.cbl\fR 4 .IX Item "file.cbl" .IP \fIfile\fR\fB.CBL\fR 4 .IX Item "file.CBL" .PD کد منبع COBOL. .IP \fIfile\fR\fB.go\fR 4 .IX Item "file.go" کد منبع Go. .IP \fIfile\fR\fB.d\fR 4 .IX Item "file.d" کد منبع D. .IP \fIfile\fR\fB.di\fR 4 .IX Item "file.di" فایل رابط 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 که شامل اعلان واحد کتابخانه (اعلان یک بسته، زیربرنامه یا جنریک، یا نمونه‌سازی یک جنریک) یا اعلان تغییر نام واحد کتابخانه (اعلان تغییر نام یک بسته، جنریک یا زیربرنامه) است. به چنین فایل‌هایی \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" کد اسمبلی (Assembler)..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" یک فایل شیء که مستقیماً به مرحلهٔ پیوند (linking) ارسال می‌شود. با هر نام فایلی بدون پسوند شناخته‌شده به همین روش رفتار می‌شود. .PP می‌توانید زبان ورودی را صریحاً با گزینهٔ \fB\-x\fR مشخص کنید: .IP "\fB\-x\fR \fIlanguage\fR" 4 .IX Item "-x language" زبان (\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 \& objective\-c objective\-c\-header objective\-c\-cpp\-output \& objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output \& assembler assembler\-with\-cpp \& ada \& cobol \& d \& f77 f77\-cpp\-input f95 f95\-cpp\-input \& go .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" فایل‌های منبع را کامپایل یا اسمبلی می‌کند، اما پیوند (link) نمی‌زند. مرحلهٔ پیوند اصلاً انجام نمی‌شود. خروجی نهایی به شکل یک فایل شیء به ازای هر فایل منبع خواهد بود. .Sp به‌طور پیش‌فرض، نام فایل شیء برای یک فایل منبع با جایگزین کردن پسوند \fB.c\fR، \fB.i\fR، \fB.s\fR و غیره با \fB.o\fR ساخته می‌شود. .Sp فایل‌های ورودی ناشناخته که نیازی به کامپایل یا اسمبلی ندارند، نادیده گرفته می‌شوند. .IP \fB\-S\fR 4 .IX Item "-S" پس از مرحلهٔ کامپایل واقعی متوقف می‌شود؛ اسمبلی را انجام نمی‌دهد. خروجی برای هر فایل ورودی مشخص‌شده که اسمبلی نیست، به شکل یک فایل کد اسمبلی خواهد بود. .Sp به‌طور پیش‌فرض، نام فایل اسمبلی برای یک فایل منبع با جایگزین کردن پسوند \fB.c\fR، \fB.i\fR و غیره با \fB.s\fR ساخته می‌شود. .Sp فایل‌های ورودی که نیازی به کامپایل ندارند، نادیده گرفته می‌شوند. .IP \fB\-E\fR 4 .IX Item "-E" پس از مرحلهٔ پیش‌پردازش متوقف می‌شود؛ کامپایلر اصلی را اجرا نمی‌کند. خروجی به شکل کد منبع پیش‌پردازش‌شده است که به خروجی استاندارد فرستاده می‌شود. .Sp فایل‌های ورودی که نیازی به پیش‌پردازش ندارند، نادیده گرفته می‌شوند. .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" خروجی اصلی را در فایل \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) نیز تأثیر می‌گذارد. مثال‌های زیر را ببینید. مگر اینکه بازنویسی شوند، هر دو خروجی کمکی و رونوشت در همان دایرکتوری خروجی اصلی قرار می‌گیرند. در خروجی‌های کمکی، پسوند فایل ورودی با پسوند نوع فایل خروجی کمکی جایگزین می‌شود؛ در خروجی‌های رونوشت، پسوند فایل رونوشت به پسوند فایل ورودی الحاق می‌گردد. در دستورهای کامپایل، نام پایهٔ هر دو خروجی کمکی و رونوشت همان نام پایه خروجی اصلی است؛ در دستورهای کامپایل و پیوند، نام خروجی اصلی منهای پسوند اجرایی با نام فایل ورودی ترکیب می‌شود. اگر هر دو بدون در نظر گرفتن پسوند، نام پایهٔ یکسانی داشته باشند، حاصل این ترکیب همان نام پایه خواهد بود؛ در غیر این صورت، آن‌ها با یک خط پیوند به هم متصل می‌شوند. .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" این گزینه نام پایه را برای فایل‌های خروجی کمکی و رونوشت تعیین می‌کند. این گزینه بر نام فایل خروجی اصلی تأثیری ندارد. خروجی‌های میانی، هنگام حفظ شدن، به عنوان خروجی اصلی در نظر گرفته نمی‌شوند، بلکه به عنوان خروجی کمکی به حساب می‌آیند: .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 در نبود این گزینه، فایل‌های رونوشت و کمکی نام خود را از فایل ورودی می‌گیرند، یا اگر فایلی صریحاً مشخص شده باشد، از فایل خروجی (غیرپیوندی): فایل‌های خروجی رونوشت (مانند مواردی که با گزینه‌های \fB\-fdump\-*\fR درخواست شده‌اند) با پسوند نام ورودی، و فایل‌های خروجی کمکی (مواردی که توسط گزینه‌های غیر رونوشت دیگر درخواست شده‌اند، مانند \f(CW\*(C`\-save\-temps\*(C'\fR، \&\f(CW\*(C`\-gsplit\-dwarf\*(C'\fR، \f(CW\*(C`\-fcallgraph\-info\*(C'\fR) بدون آن. .Sp تفکیک پسوند مشابهی برای خروجی‌های رونوشت و کمکی می‌تواند برای \fB\-dumpbase basename.suf\fR صریحاً داده‌شده، با مشخص کردن \&\fB\-dumpbase\-ext .suf\fR نیز حاصل شود. .Sp اگر \fIdumpbase\fR صریحاً با هرگونه مؤلفهٔ دایرکتوری مشخص شود، هرگونه مشخصهٔ \fIdumppfx\fR (مانند \fB\-dumpdir\fR یا \&\fB\-save\-temps=*\fR) نادیده گرفته می‌شود و به جای الحاق به آن، \&\fIdumpbase\fR کاملاً آن را بازنویسی می‌کند: .Sp.Vb 2 \& gcc foo.c \-c \-o dir/foo.o \-dumpbase alt/foo \e \& \-dumpdir pfx\- \-save\-temps=cwd ... .Ve .Sp خروجی‌های کمکی و تخلیه (dump) را با نام \fIalt/foo.*\fR ایجاد می‌کند، با نادیده گرفتن \fIdir/\fR در \fB\-o\fR، پیشوند \fI./\fR ضمنیِ ناشی از \fB\-save\-temps=cwd\fR، و \fIpfx\-\fR در \fB\-dumpdir\fR. .Sp هنگامی که \fB\-dumpbase\fR در دستوری مشخص شود که چندین ورودی را کامپایل می‌کند، یا کامپایل و سپس پیوند (link) انجام می‌دهد، ممکن است با \fIdumppfx\fR، همان‌طور که ذیل \fB\-dumpdir\fR مشخص شده، ترکیب شود. سپس، هر فایل ورودی با استفاده از \fIdumppfx\fR ترکیبی کامپایل شده، و مقادیر پیش‌فرض برای \fIdumpbase\fR و \fIauxdropsuf\fR به ازای هر فایل ورودی محاسبه می‌شود: .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpbase main ... .Ve .Sp فایل‌های \fIfoo.o\fR و \fIbar.o\fR را به‌عنوان خروجی‌های اصلی ایجاد می‌کند، و با استفاده از \fIdumpbase\fR به‌عنوان پیشوند، از بازنویسی خروجی‌های کمکی و dump جلوگیری کرده، و خروجی‌های کمکی و dump را با نام‌های \fImain\-foo.*\fR و \fImain\-bar.*\fR می‌سازد. .Sp مشخص کردن یک رشته خالی به‌عنوان \fIdumpbase\fR از تأثیر نام پایه (basename) خروجی در نام‌گذاری خروجی‌های کمکی و dump در طول کامپایل جلوگیری کرده و مقادیر پیش‌فرض را محاسبه می‌کند: .Sp .Vb 1 \& gcc \-c foo.c \-o dir/foobar.o \-dumpbase " ... .Ve .Sp خروجی‌های کمکی را \fIdir/foo.*\fR و خروجی‌های dump را \fIdir/foo.c.*\fR نام‌گذاری خواهد کرد. توجه داشته باشید که چگونه نام‌های پایه آن‌ها از نام ورودی گرفته شده، اما دایرکتوری همچنان به‌طور پیش‌فرض همان دایرکتوری خروجی است. .Sp رشتهٔ خالی dumpbase مانع استفاده از نام پایه خروجی برای خروجی‌ها در هنگام پیوند دادن (linking) نمی‌شود: .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" هنگام ساخت نام یک فایل خروجی کمکی (و نه 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" هنگام ساخت نام یک فایل خروجی کمکی یا 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 به‌همراه یک خط تیره (dash) به \fIdumppfx\fR صریح یا پیش‌فرض الحاق می‌شود (یا اگر شامل مؤلفه‌های دایرکتوری باشد، جایگزین آن می‌گردد)، به‌طوری که هر یک از کامپایل‌های چندگانه خروجی‌های کمکی و dump با نام‌های متفاوتی دریافت کنند. .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp خروجی‌های dump کمکی را با افزودن \fIdumpbase\fR\- به \fIdumppfx\fR، در \fIdir/pfx\-main\-foo.*\fR و \fIdir/pfx\-main\-bar.*\fR تولید می‌کند. خروجی‌های dump به‌ترتیب پسوند فایل ورودی را حفظ می‌کنند: \fIdir/pfx\-main\-foo.c.*\fR و \fIdir/pfx\-main\-bar.c.*\fR. این مورد را با کامپایل تک‌ورودی مقایسه کنید: .Sp .Vb 1 \& gcc foo.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp که با اعمال \fB\-dumpbase\fR بر یک فایل منبع واحد، یک \fIdumpbase\fR مجزا به ازای هر فایل ورودی محاسبه و الحاق نمی‌کند. خروجی‌های کمکی و dump آن در \fIdir/pfx\-main.*\fR قرار می‌گیرند. .Sp هنگام کامپایل و سپس پیوند دادن از چندین فایل ورودی، \fIdumppfx\fR پیش‌فرض یا صریحاً مشخص‌شده نیز تحت تبدیل \fIdumpbase\fR\- بالا قرار می‌گیرد (مانند کامپایل \fIfoo.c\fR و \fIbar.c\fR در بالا، اما بدون \fB\-c\fR). اگر نه \fB\-dumpdir\fR و نه \fB\-dumpbase\fR داده نشده باشند، در عوض نام پایه خروجی پیونددهنده منهای \fIauxdropsuf\fR (در صورت تعیین) یا منهای پسوند فایل اجرایی (در غیر این صورت) به‌همراه یک خط تیره به \fIdumppfx\fR پیش‌فرض الحاق می‌گردد. البته توجه داشته باشید که برخلاف موارد پیشین پیوند دادن: .Sp .Vb 1 \& gcc foo.c bar.c \-dumpdir dir/pfx\- \-o main ... .Ve .Sp نام خروجی \fImain\fR را به \fIdumppfx\fR الحاق نمی‌کند، زیرا \fB\-dumpdir\fR به‌صورت صریح مشخص شده است. هدف این است که \fIdumppfx\fR تعیین‌شده به‌صورت صریح بتواند در صورت تمایل نام خروجی مشخص‌شده را به‌عنوان بخشی از پیشوند شامل شود؛ تنها یک \fB\-dumpbase\fR صریحاً مشخص‌شده با آن ترکیب می‌شود تا از نادیده گرفتن یک گزینه معنادار پرهیز گردد. .Sp هنگام کامپایل و سپس پیوند دادن از یک فایل ورودی واحد، نام پایه خروجی پیونددهنده تنها در صورتی مانند بالا به \fIdumppfx\fR پیش‌فرض الحاق می‌شود که نام پایه مشترکی با نام فایل ورودی واحد نداشته باشد. این مسئله در موارد پیوند تک‌ورودی در بالا بیان شد، اما نه با یک \fB\-dumpdir\fR صریح که مانع ترکیب می‌شود، حتی اگر توسط \fB\-save\-temps=*\fR لغو شده باشد: .Sp .Vb 1 \& gcc foo.c \-dumpdir alt/pfx\- \-o dir/main.exe \-save\-temps=cwd ... .Ve .Sp خروجی‌های کمکی با نام \fIfoo.*\fR و خروجی‌های dump با نام \fIfoo.c.*\fR، در دایرکتوری کاری جاری همان‌طور که نهایتاً توسط \fB\-save\-temps=cwd\fR درخواست شده است، ذخیره می‌شوند. .Sp برای جمع‌بندی کلی به‌منظور درک شهودی گرچه با دقتی اندک از جریان داده: نام خروجی اصلی به یک بخش دایرکتوری و یک بخش نام پایه (basename) تقسیم می‌شود؛ \fIdumppfx\fR روی اولی تنظیم می‌گردد، مگر اینکه توسط \fB\-dumpdir\fR یا \fB\-save\-temps=*\fR لغو شود، و \fIdumpbase\fR روی دومی تنظیم می‌گردد، مگر اینکه توسط \fB\-dumpbase\fR لغو شود. اگر ورودی‌های چندگانه یا پیوند دادن در میان باشد، این \fIdumpbase\fR ممکن است با \fIdumppfx\fR ترکیب شده و از هر فایل ورودی گرفته شود. نام‌های خروجی کمکی برای هر ورودی با ترکیب \fIdumppfx\fR، \fIdumpbase\fR منهای پسوند، و پسوند خروجی کمکی ساخته می‌شوند؛ نام‌های خروجی dump تنها از این حیث تفاوت دارند که پسوند \fIdumpbase\fR در آن‌ها حفظ می‌شود. .Sp در خصوص خروجی‌های کمکی و dump ایجادشده حین کامپایل مجدد LTO، ترکیبی از \fIdumppfx\fR و \fIdumpbase\fR، همان‌طور که داده شده یا از نام خروجی پیونددهنده (و نه ورودی‌ها) مشتق شده باشد—حتی در مواردی که این ترکیب در غیر این صورت بدین شکل استفاده نمی‌شد—به‌همراه یک نقطه در انتها که جایگزین خط تیره افزوده‌شده توسط کامپایلر (در صورت وجود) می‌شود، به‌عنوان گزینه \fB\-dumpdir\fR به \fBlto\-wrapper\fR منتقل می‌گردد؛ با توجه به اینکه این برنامه درگیر پیوند دادن است، معمولاً هیچ \fB\-dumpbase\fR و \fB\-dumpbase\-ext\fR دریافت نمی‌کند و آن‌ها را نادیده می‌گیرد. .Sp هنگام اجرای زیرکامپایلرها، \fBlto\-wrapper\fR نام‌های مراحل LTO را به \fIdumppfx\fR دریافت‌شده الحاق می‌کند، اطمینان حاصل می‌نماید که حاوی مؤلفه دایرکتوری باشد تا هرگونه \fB\-dumpdir\fR را لغو کند، و آن را به‌عنوان \fB\-dumpbase\fR به زیرکامپایلرها ارسال می‌نماید..IP \fB\-v\fR 4 .IX Item "-v" دستورهای اجراشده برای پیشبرد مراحل کامپایل را (در خروجی خطای استاندارد) چاپ می‌کند. همچنین شماره نگارش برنامهٔ راه‌انداز کامپایلر، پیش‌پردازنده و خود کامپایلر را چاپ می‌کند. .IP \fB\-###\fR 4 .IX Item "-###" مانند \fB\-v\fR است، با این تفاوت که دستورها اجرا نمی‌شوند و آرگومان‌ها نقل‌قول‌بندی می‌شوند مگر آنکه فقط شامل نویسه‌های الفبایی\-عددی یا \f(CW\*(C`./\-_\*(C'\fR باشند. این گزینه برای اسکریپت‌های شل جهت ثبت خطوط دستور تولیدشده توسط راه‌انداز مفید است. .IP \fB\-\-help\fR 4 .IX Item "--help" توضیحاتی دربارهٔ گزینه‌های خط فرمانی که برای \fBgcc\fR قابل فهم است را (در خروجی استاندارد) چاپ می‌کند. اگر گزینهٔ \fB\-v\fR نیز مشخص شده باشد، \fB\-\-help\fR به فرایندهای گوناگونی که توسط \fBgcc\fR فراخوانی می‌شوند نیز ارسال می‌شود تا آن‌ها بتوانند گزینه‌های خط فرمان پذیرفته‌شده توسط خود را نمایش دهند. اگر گزینهٔ \fB\-Wextra\fR نیز (پیش از گزینهٔ \fB\-\-help\fR) مشخص شده باشد، گزینه‌های خط فرمانی که هیچ مستنداتی ندارند نیز نمایش داده می‌شوند. .IP \fB\-\-target\-help\fR 4 .IX Item "--target-help" شرحی از گزینه‌های خط فرمان ویژهٔ هر هدف را برای هر ابزار (در خروجی استاندارد) چاپ می‌کند. برای برخی اهداف، ممکن است اطلاعات ویژهٔ هدف بیشتری نیز چاپ شود. .IP \fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR] 4 .IX Item "--help={class|[^]qualifier}[,...]" توضیحاتی از گزینه‌های خط فرمان قابل فهم برای کامپایلر را که در تمام رده‌ها و توصیف‌کننده‌های مشخص‌شده می‌گنجند (در خروجی استاندارد) چاپ می‌کند. رده‌های پشتیبانی‌شده عبارتند از: .RS 4 .IP \fBoptimizers\fR 4 .IX Item "optimizers" تمام گزینه‌های بهینه‌سازی پشتیبانی‌شده توسط کامپایلر را نمایش می‌دهد. .IP \fBwarnings\fR 4 .IX Item "warnings" تمام گزینه‌های کنترل‌کنندهٔ پیام‌های هشداری که کامپایلر تولید می‌کند را نمایش می‌دهد. .IP \fBtarget\fR 4 .IX Item "target" گزینه‌های ویژهٔ هدف را نمایش می‌دهد. با این حال، بر خلاف گزینهٔ \&\fB\-\-target\-help\fR، گزینه‌های ویژهٔ هدف پیونددهنده و اسمبلر نمایش داده نمی‌شوند؛ زیرا این ابزارها در حال حاضر از نحو تعمیم‌یافتهٔ \&\fB\-\-help=\fR پشتیبانی نمی‌کنند. .IP \fBparams\fR 4 .IX Item "params" مقادیر شناخته‌شده توسط گزینهٔ \fB\-\-param\fR را نمایش می‌دهد. .IP \fIlanguage\fR 4 .IX Item "language" گزینه‌های پشتیبانی‌شده برای \fIlanguage\fR را نمایش می‌دهد، که در آن \&\fIlanguage\fR نام یکی از زبان‌های پشتیبانی‌شده در این نگارش از GCC است. اگر گزینه‌ای توسط همهٔ زبان‌ها پشتیبانی شود، باید ردهٔ \fBcommon\fR انتخاب شود. .IP \fBcommon\fR 4 .IX Item "common" گزینه‌هایی را که میان تمام زبان‌ها مشترک هستند نمایش می‌دهد. .RE .RS 4 .Sp توصیف‌کننده‌های پشتیبانی‌شده عبارتند از: .IP \fBundocumented\fR 4 .IX Item "undocumented" تنها آن دسته از گزینه‌هایی را نمایش می‌دهد که فاقد مستندات هستند. .IP \fBjoined\fR 4 .IX Item "joined" گزینه‌هایی را نمایش می‌دهد که آرگومانی را می‌پذیرند که پس از علامت مساوی در همان متن پیوسته می‌آید، مانند: \&\fB\-\-help=target\fR. .IP \fBseparate\fR 4 .IX Item "separate" گزینه‌هایی را نمایش می‌دهد که آرگومانی را به‌صورت کلمه‌ای جداگانه پس از گزینهٔ اصلی می‌پذیرند، مانند: \fB\-o output\-file\fR. .RE .RS 4 .Sp بنابراین برای مثال، جهت نمایش تمام سوییچ‌های ویژهٔ هدف مستندنشده که توسط کامپایلر پشتیبانی می‌شوند، استفاده کنید از: .Sp .Vb 1 \& \-\-help=target,undocumented .Ve .Sp معنای یک توصیف‌کننده می‌تواند با افزودن نویسهٔ \&\fB^\fR به ابتدای آن معکوس شود، بنابراین برای مثال جهت نمایش تمام گزینه‌های هشدار دوحالته (یعنی مواردی که یا روشن هستند یا خاموش و آرگومانی نمی‌پذیرند) که دارای توضیحات هستند، استفاده کنید از: .Sp .Vb 1 \& \-\-help=warnings,^joined,^undocumented .Ve .Sp آرگومان ورودی به \fB\-\-help=\fR نباید صرفاً از توصیف‌کننده‌های معکوس‌شده تشکیل شده باشد. .Sp ترکیب چندین رده امکان‌پذیر است، هرچند معمولاً خروجی را چنان محدود می‌کند که چیزی برای نمایش باقی نمی‌ماند. با این حال یک مورد که در آن کار می‌کند زمانی است که یکی از رده‌ها \&\fItarget\fR باشد. برای نمونه، جهت نمایش تمام گزینه‌های بهینه‌سازی ویژهٔ هدف، استفاده کنید از: .Sp .Vb 1 \& \-\-help=target,optimizers .Ve .Sp گزینهٔ \fB\-\-help=\fR می‌تواند در خط فرمان تکرار شود. هر بار استفادهٔ متوالی، ردهٔ درخواستی گزینه‌ها را نمایش می‌دهد و مواردی را که پیش‌تر نمایش داده شده‌اند نادیده می‌گیرد. اگر \fB\-\-help\fR نیز در هر کجای خط فرمان مشخص شده باشد، بر هر گزینهٔ \fB\-\-help=\fR دیگری اولویت خواهد داشت. .Sp اگر گزینهٔ \fB\-Q\fR در خط فرمان قبل از گزینهٔ \&\fB\-\-help=\fR ظاهر شود، متن توضیحی نمایش داده شده توسط \&\fB\-\-help=\fR تغییر می‌کند. به جای شرح گزینه‌های نمایش داده‌شده، مشخص می‌شود که آیا گزینه فعال، غیرفعال یا روی مقدار خاصی تنظیم شده است (با این فرض که کامپایلر در نقطه‌ای که گزینهٔ \&\fB\-\-help=\fR استفاده شده این موضوع را بداند). .Sp در اینجا یک مثال کوتاه‌شده از پورت ARM برای \fBgcc\fR آورده شده است: .Sp .Vb 5 \& % gcc \-Q \-mabi=2 \-\-help=target \-c \& The following options are target specific: \& \-mabi= 2 \& \-mabort\-on\-noreturn [disabled] \& \-mapcs [disabled] .Ve .Sp خروجی نسبت به اثرات گزینه‌های پیشین خط فرمان حساس است، بنابراین به عنوان مثال می‌توان فهمید که کدام بهینه‌سازی‌ها در \fB\-O2\fR فعال هستند با استفاده از: .Sp .Vb 1 \& \-Q \-O2 \-\-help=optimizers .Ve .Sp همچنین می‌توانید بهینه‌سازی‌های دوحالته‌ای را که توسط \fB\-O3\fR فعال می‌شوند کشف کنید با استفاده از: .Sp .Vb 3 \& gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts \& gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts \& diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled .Ve .RE .IP \fB\-\-version\fR 4 .IX Item "--version" شمارهٔ نگارش و حق تکثیر (کپی‌رایت) GCC فراخوانی‌شده را نمایش می‌دهد. .IP \fB\-pass\-exit\-codes\fR 4 .IX Item "-pass-exit-codes" به‌طور معمول اگر هر مرحله از کامپایلر یک کد بازگشتی غیرموفق بازگرداند، برنامهٔ \fBgcc\fR با کد خروج ۱ پایان می‌یابد. اگر \&\fB\-pass\-exit\-codes\fR را مشخص کنید، برنامهٔ \fBgcc\fR در عوض با بزرگ‌ترین کد خطای عددی حاصل از هر مرحله‌ای که نشانگر خطا بوده است خارج می‌شود. بخش‌های فرانت‌اند زبان‌های C، C++‎ و Fortran در صورت مواجهه با خطای داخلی کامپایلر، کد ۴ را بازمی‌گردانند. .IP \fB\-pipe\fR 4 .IX Item "-pipe" استفاده از لوله‌ها (pipe) به جای فایل‌های موقت برای برقراری ارتباط بین مراحل مختلف کامپایل. این گزینه در برخی سیستم‌هایی که اسمبلر قادر به خواندن از لوله نیست کار نمی‌کند؛ اما اسمبلر GNU مشکلی در این مورد ندارد. .IP \fB\-specs=\fR\fIfile\fR 4 .IX Item "-specs=file" پردازش \fIfile\fR پس از خواندن فایل استاندارد \fIspecs\fR توسط کامپایلر، به منظور بازنویسی و جایگزینی مقادیر پیش‌فرضی که برنامهٔ راه‌انداز \fBgcc\fR هنگام تعیین سوییچ‌های ارسالی به \fBcc1\fR، \&\fBcc1plus\fR، \fBas\fR، \&\fBld\fR و غیره استفاده می‌کند. بیش از یک \&\fB\-specs=\fR\fIfile\fR می‌تواند در خط فرمان مشخص شود و آن‌ها به ترتیب، از چپ به راست پردازش می‌شوند. .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) که مستقل از مکان هستند استفاده کرد. دایرکتوری‌های ارجاع‌شده توسط دیرکتیوها تحت تأثیر این گزینه‌ها قرار نمی‌گیرند. همچنین نگاه کنید به \&\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 را بارگذاری می‌کند، با این فرض که یک شیء اشتراکی است که باید توسط کامپایلر dlopen\*(Aq شود. نام پایهٔ فایل شیء اشتراکی برای شناسایی افزونه جهت تجزیهٔ آرگومان‌ها استفاده می‌شود (به \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR در زیر مراجعه کنید). هر افزونه باید توابع بازفراخوانی (callback) مشخص‌شده در Plugins API را تعریف کند. .IP \fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR 4 .IX Item "-fplugin-arg-name-key=value" یک آرگومان به نام \fIkey\fR با مقدار \fIvalue\fR را برای افزونه‌ای به نام \fIname\fR تعریف می‌کند. .IP \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] 4 .IX Item "-fdump-ada-spec[-slim]" برای فایل‌های منبع و گنجاندنی (include) زبان‌های C و C++، مشخصات متناظر زبان Ada را تولید می‌کند. .IP \fB\-fada\-spec\-parent=\fR\fIunit\fR 4 .IX Item "-fada-spec-parent=unit" در ترکیب با \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] بالا، مشخصات Ada را به عنوان واحدهای فرزند از واحد والد \fIunit\fR تولید می‌کند. .IP \fB\-fdump\-go\-spec=\fR\fIfile\fR 4 .IX Item "-fdump-go-spec=file" برای فایل‌های ورودی به هر زبانی، اعلان‌های متناظر زبان Go را در \fIfile\fR تولید می‌کند. این گزینه اعلان‌های \f(CW\*(C`const\*(C'\fR، \&\f(CW\*(C`type\*(C'\fR، \f(CW\*(C`var\*(C'\fR و \f(CW\*(C`func\*(C'\fR زبان Go را ایجاد می‌کند که می‌تواند روشی مفید برای آغاز نوشتن یک واسط Go برای کدهای نوشته‌شده به زبانی دیگر باشد. .IP \fB@\fR\fIfile\fR 4 .IX Item "@file" گزینه‌های خط فرمان را از \fIfile\fR می‌خواند. گزینه‌های خوانده‌شده به جای گزینهٔ اصلی @\fIfile\fR درج می‌شوند. اگر \fIfile\fR وجود نداشته باشد یا قابل خواندن نباشد، با این گزینه به صورت لفظی رفتار می‌شود و حذف نخواهد شد. .Sp گزینه‌ها در \fIfile\fR با نویسه‌های فاصله خالی (whitespace) از هم جدا می‌شوند. یک نویسهٔ فاصله می‌تواند با محصور کردن کل گزینه در علامت نقل‌قول تکی یا دوتایی درون یک گزینه گنجانده شود. هر نویسه‌ای (از جمله بک‌اسلش) می‌تواند با افزودن یک پیشوند بک‌اسلش به آن درج شود. خود \fIfile\fR می‌تواند شامل گزینه‌های @\fIfile\fR دیگری نیز باشد؛ هر نوع گزینه از این دست به صورت بازگشتی پردازش خواهد شد. .SS "کامپایل برنامه‌های C++ (Compiling C++ Programs)" .IX Subsection "Compiling C++ Programs" فایل‌های منبع C++ طبق قرارداد از یکی از پسوندهای \fB.C\fR، \&\fB.cc\fR، \fB.cpp\fR، \fB.CPP\fR، \fB.c++\fR، \fB.cp\fR یا \&\fB.cxx\fR استفاده می‌کنند؛ فایل‌های سرآیند C++ اغلب از \fB.hh\fR، \fB.hpp\fR، \&\fB.H\fR یا (برای کدهای قالب اشتراکی) \fB.tcc\fR استفاده می‌کنند؛ فایل‌های پیش‌پردازش‌شدهٔ C++ از پسوند \fB.ii\fR استفاده می‌کنند؛ و واحدهای واسط ماژول C++20 گاهی از \fB.ixx\fR، \fB.cppm\fR، \fB.cxxm\fR، \fB.c++m\fR یا \fB.ccm\fR استفاده می‌کنند. .PP ابزار GCC فایل‌هایی با این نام‌ها را شناسایی کرده و آن‌ها را به عنوان برنامه‌های C++ کامپایل می‌کند، حتی اگر کامپایلر را همانند روش کامپایل برنامه‌های C فراخوانی کنید (معمولاً با نام \fBgcc\fR). .PP با این حال، استفاده از \fBgcc\fR کتابخانهٔ C++ را اضافه نمی‌کند. \&\fBg++\fR برنامه‌ای است که GCC را فراخوانی کرده و پیوند دادن با کتابخانهٔ 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" در حالت 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 را بپذیرد. هنگامی که یک استاندارد پایه مشخص می‌شود، کامپایلر تمام برنامه‌های منطبق بر آن استاندارد و همچنین برنامه‌هایی را که از افزونه‌های گنوی غیرمتناقض با آن استفاده می‌کنند، می‌پذیرد. برای نمونه، \&\fB\-std=c90\fR برخی از ویژگی‌های GCC را که با ISO C90 ناسازگار هستند (مانند کلمات کلیدی \f(CW\*(C`asm\*(C'\fR و \f(CW\*(C`typeof\*(C'\fR) خاموش می‌کند، اما سایر افزونه‌های گنو را که در ISO C90 فاقد معنا هستند (مانند حذف عبارت میانی در یک عبارت \f(CW\*(C`?:\*(C'\fR)، غیرفعال نمی‌سازد. از سوی دیگر، هنگامی که یک گویش گنو از یک استاندارد مشخص می‌شود، تمام ویژگی‌های پشتیبانی‌شده توسط کامپایلر فعال می‌شوند، حتی اگر آن ویژگی‌ها معنای استاندارد پایه را تغییر دهند. در نتیجه، ممکن است برخی برنامه‌های کاملاً منطبق بر استاندارد (strict\-conforming) رد شوند. استاندارد مشخص‌شده توسط \fB\-Wpedantic\fR برای شناسایی اینکه کدام ویژگی‌ها با توجه به آن نسخه از استاندارد افزونه‌های گنو محسوب می‌شوند، استفاده می‌شود. برای نمونه، \&\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 (افزونه‌های خاص گنو که با ISO C90 در تضاد هستند غیرفعال می‌شوند). برای کد C معادل \fB\-ansi\fR است. .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. این استاندارد اساساً به طور کامل پشتیبانی می‌شود، به جز باگ‌ها و مسائل مربوط به ممیز شناور (floating\-point) (که عمدتاً، اما نه کاملاً، به ویژگی‌های اختیاری C99 در پیوست‌های F و G مربوط می‌شوند). برای اطلاعات بیشتر به <\fBhttps://gcc.gnu.org/c99status.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 (رابط‌های بررسی محدوده یا Bounds\-checking interfaces) و L (تحلیل‌پذیری یا Analyzability). نام \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 گویش گنو از ISO C90 (شامل برخی از ویژگی‌های C99). .IP \fBgnu99\fR 4 .IX Item "gnu99" .PD 0 .IP \fBgnu9x\fR 4 .IX Item "gnu9x" .PD گویش گنو از ISO C99. نام \fBgnu9x\fR منسوخ شده است. .IP \fBgnu11\fR 4 .IX Item "gnu11" .PD 0 .IP \fBgnu1x\fR 4 .IX Item "gnu1x" .PD گویش گنو از ISO C11. نام \fBgnu1x\fR منسوخ شده است. .IP \fBgnu17\fR 4 .IX Item "gnu17" .PD 0 .IP \fBgnu18\fR 4 .IX Item "gnu18" .PD گویش گنو از ISO C17. .IP \fBgnu23\fR 4 .IX Item "gnu23" .PD 0 .IP \fBgnu2x\fR 4 .IX Item "gnu2x" .PD گویش گنو از ISO C23. این مقدار پیش‌فرض برای کدهای C است. نام \&\fBgnu2x\fR منسوخ شده است. .IP \fBgnu2y\fR 4 .IX Item "gnu2y" نسخهٔ بعدی استاندارد ISO C، همچنان در حال توسعه، به علاوهٔ افزونه‌های گنو. پشتیبانی از این نسخه آزمایشی و ناقص است. نام \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++ به همراه اصلاحیهٔ فنی سال ۲۰۰۳ و برخی گزارش‌های رفع نقص اضافی. برای کدهای C++ معادل \fB\-ansi\fR است. .IP \fBgnu++98\fR 4 .IX Item "gnu++98" .PD 0 .IP \fBgnu++03\fR 4 .IX Item "gnu++03" .PD گویش گنو از \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 گویش گنو از \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 گویش گنو از \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 گویش گنو از \fB\-std=c++17\fR. این حالت پیش‌فرض برای کدهای C++ است. نام \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++ به‌همراه اصلاحیه‌ها. پشتیبانی آزمایشی است و ممکن است در انتشار‌های آینده به شیوه‌های ناسازگار تغییر کند. نام \fBc++2a\fR منسوخ شده است. .IP \fBgnu++20\fR 4 .IX Item "gnu++20" .PD 0 .IP \fBgnu++2a\fR 4 .IX Item "gnu++2a" .PD گویش گنو از \fB\-std=c++20\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 گویش گنو از \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 گویش گنو از \fB\-std=c++2c\fR. پشتیبانی کاملاً آزمایشی است و تقریباً به‌طور قطع در انتشار‌های آینده به شیوه‌های ناسازگار تغییر خواهد کرد. .RE .RS 4 .RE .IP "\fB\-aux\-info\fR \fIfilename\fR" 4 .IX Item "-aux-info filename" خروجی دادن اعلان‌های دارای پیش‌نمونه (prototyped) برای تمام توابع اعلان‌شده یا تعریف‌شده در یک واحد ترجمه، از جمله توابع موجود در فایل‌های سرایند (header)، در فایلی با نام داده‌شده. این گزینه در هر زبانی غیر از C بدون پیام نادیده گرفته می‌شود. .Sp علاوه بر اعلان‌ها، فایل در قالب توضیحات (کامنت)، مبدأ هر اعلان (فایل منبع و خط)، اینکه اعلان ضمنی بوده است، دارای پیش‌نمونه بوده یا فاقد پیش‌نمونه (\fBI\fR، \fBN\fR برای جدید یا \&\fBO\fR برای قدیمی، به‌ترتیب، در اولین نویسه پس از شماره خط و دونقطه)، و اینکه از یک اعلان آمده است یا یک تعریف (\fBC\fR یا \fBF\fR، به‌ترتیب، در نویسه بعدی) را مشخص می‌کند. در مورد تعاریف تابع، فهرستی از آرگومان‌ها به سبک K&R به‌همراه اعلان‌هایشان نیز در داخل توضیحات، پس از اعلان ارائه می‌شود. .IP \fB\-fno\-asm\fR 4 .IX Item "-fno-asm" کلمات \f(CW\*(C`asm\*(C'\fR، \f(CW\*(C`inline\*(C'\fR یا \f(CW\*(C`typeof\*(C'\fR را به‌عنوان کلیدواژه شناسایی نمی‌کند تا کد بتواند از این کلمات به‌عنوان شناسه استفاده کند. می‌توانید به‌جای آن‌ها از کلیدواژه‌های \f(CW\*(C`_\|_asm_\|_\*(C'\fR، \f(CW\*(C`_\|_inline_\|_\*(C'\fR و \f(CW\*(C`_\|_typeof_\|_\*(C'\fR استفاده کنید. در C، گزینه \fB\-ansi\fR متضمن \fB\-fno\-asm\fR است. .Sp در C++، کلمه \f(CW\*(C`inline\*(C'\fR یک کلیدواژه استاندارد است و تحت تأثیر این سوییچ قرار نمی‌گیرد. ممکن است بخواهید در عوض از پرچم \fB\-fno\-gnu\-keywords\fR استفاده کنید که \f(CW\*(C`typeof\*(C'\fR را غیرفعال می‌کند اما به \f(CW\*(C`asm\*(C'\fR و \&\f(CW\*(C`inline\*(C'\fR کاری ندارد. در حالت C99 (\fB\-std=c99\fR یا \fB\-std=gnu99\fR)، این سوییچ فقط بر کلیدواژه‌های \f(CW\*(C`asm\*(C'\fR و \f(CW\*(C`typeof\*(C'\fR تأثیر می‌گذارد، زیرا \f(CW\*(C`inline\*(C'\fR در ISO C99 یک کلیدواژه استاندارد است. در حالت C23 (\fB\-std=c23\fR یا \fB\-std=gnu23\fR)، این سوییچ فقط بر کلیدواژه \f(CW\*(C`asm\*(C'\fR تأثیر می‌گذارد، زیرا \f(CW\*(C`typeof\*(C'\fR در ISO C23 یک کلیدواژه استاندارد است. .IP \fB\-fno\-builtin\fR 4 .IX Item "-fno-builtin" .PD 0 .IP \fB\-fno\-builtin\-\fR\fIfunction\fR 4 .IX Item "-fno-builtin-function" .PD توابع توکار (built-in) را که پیشوند \&\fB_\|_builtin_\fR ندارند شناسایی نمی‌کند. .Sp کامپایلر GCC معمولاً کدهای ویژه‌ای تولید می‌کند تا برخی توابع توکار را با کارایی بیشتری مدیریت کند؛ برای مثال، فراخوانی‌های \f(CW\*(C`alloca\*(C'\fR ممکن است به تک‌دستورهایی تبدیل شوند که مستقیماً پشته را تنظیم می‌کنند، و فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR ممکن است به حلقه‌های کپی درون‌خطی تبدیل شوند. کد حاصل اغلب کوچک‌تر و سریع‌تر است، اما از آنجا که فراخوانی‌های تابع دیگر به همان شکل ظاهر نمی‌شوند، نمی‌توانید روی آن‌ها نقطه توقف (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" مجاز دانستن عبارات شرطی با انواع (types) ناهمخوان در آرگومان‌های دوم و سوم. مقدار چنین عبارتی 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" فعال‌سازی تجزیه (parsing) تعاریف توابع نشانه‌گذاری‌شده با \f(CW\*(C`_\|_GIMPLE\*(C'\fR. این یک قابلیت آزمایشی است که امکان آزمون واحد (unit testing) برای گذرگاه‌های (passes) GIMPLE را فراهم می‌کند. .IP \fB\-fgnu\-tm\fR 4 .IX Item "-fgnu-tm" هنگامی که گزینه \fB\-fgnu\-tm\fR مشخص می‌شود، کامپایلر برای گونهٔ لینوکسی از سند مشخصات فعلی ABI حافظه تراکنشی اینتل (Revision 1.1، ۶ مه ۲۰۰۹) کد تولید می‌کند. این یک ویژگی آزمایشی است که با تغییر مشخصات رسمی، ممکن است رابط آن در نسخه‌های آینده GCC تغییر کند. لطفاً توجه داشته باشید که این ویژگی روی همه معماری‌ها پشتیبانی نمی‌شود. .Sp برای اطلاعات بیشتر درباره پشتیبانی GCC از حافظه تراکنشی، .Sp توجه داشته باشید که ویژگی حافظه تراکنشی به‌همراه استثناهای غیرفراخوانی (\fB\-fnon\-call\-exceptions\fR) پشتیبانی نمی‌شود..IP \fB\-fgnu89\-inline\fR 4 .IX Item "-fgnu89-inline" گزینهٔ \fB\-fgnu89\-inline\fR به GCC می‌گوید که هنگام استفاده از حالت C99، از معناشناسی سنتی GNU برای توابع \f(CW\*(C`inline\*(C'\fR استفاده کند. .Sp استفاده از این گزینه تقریباً معادل افزودن مشخصهٔ تابع \f(CW\*(C`gnu_inline\*(C'\fR به تمامی توابع inline است. .Sp گزینهٔ \fB\-fno\-gnu89\-inline\fR صراحتاً به GCC می‌گوید که هنگام حضور در حالت C99 یا gnu99، از معناشناسی C99 برای \f(CW\*(C`inline\*(C'\fR استفاده کند (یعنی رفتار پیش‌فرض را تعیین می‌کند). این گزینه در حالت \fB\-std=c90\fR یا \&\fB\-std=gnu90\fR پشتیبانی نمی‌شود. .Sp ماکروهای پیش‌پردازندهٔ \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR و \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR می‌توانند برای بررسی این‌که کدام معناشناسی برای توابع \f(CW\*(C`inline\*(C'\fR فعال است، به کار روند. .IP \fB\-fhosted\fR 4 .IX Item "-fhosted" اعلان می‌کند که هدف کامپایل یک محیط میزبانی‌شده (hosted environment) است. این گزینه مستلزم \&\fB\-fbuiltin\fR است. محیط میزبانی‌شده محیطی است که در آن کل کتابخانهٔ استاندارد در دسترس است و در آن نوع بازگشتی \f(CW\*(C`main\*(C'\fR برابر با \f(CW\*(C`int\*(C'\fR می‌باشد. تقریباً همه چیز به جز هستهٔ سیستم‌عامل (kernel) نمونه‌هایی از آن هستند. این گزینه معادل \fB\-fno\-freestanding\fR است. .IP \fB\-flax\-vector\-conversions\fR 4 .IX Item "-flax-vector-conversions" تبدیل‌های ضمنی میان بردارهایی با تعداد عناصر متفاوت و/یا انواع عناصر ناسازگار را مجاز می‌کند. این گزینه نباید برای کدهای جدید استفاده شود. .IP \fB\-fms\-extensions\fR 4 .IX Item "-fms-extensions" برخی ساختارهای غیراستاندارد به‌کاررفته در فایل‌های سرایند مایکروسافت را می‌پذیرد. .Sp در کد ++C، این گزینه اجازه می‌دهد تا نام اعضای ساختارها مشابه با اعلان‌های انواع قبلی باشد. .Sp .Vb 4 \& typedef int UOW; \& struct ABC { \& UOW UOW; \& }; .Ve .Sp برخی موارد فیلدهای بدون نام در ساختارها و اجتماع‌ها (unions) تنها با این گزینه پذیرفته می‌شوند. .Sp توجه داشته باشید که این گزینه برای تمامی هدف‌ها به جز مقصدهای x86 که از ms\-abi استفاده می‌کنند، غیرفعال است. .IP \fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR 4 .IX Item "-fpermitted-flt-eval-methods=style" استاندارد ISO/IEC TS 18661\-3 مقادیر مجاز جدیدی را برای \&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR تعریف می‌کند که نشان می‌دهند عملیات و مقادیر ثابتی که دارای نوع معنایی تبادلی یا قالب گسترش‌یافته هستند باید با دقت و دامنهٔ همان نوع ارزیابی شوند. این مقادیر جدید، زبرمجموعه‌ای از مقادیر مجاز تحت 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" نوع \f(CW\*(C`char\*(C'\fR را مانند \f(CW\*(C`signed char\*(C'\fR علامت‌دار در نظر می‌گیرد. .Sp توجه داشته باشید که این معادل با \fB\-fno\-unsigned\-char\fR است که شکل منفی \fB\-funsigned\-char\fR می‌باشد. به همین ترتیب، گزینهٔ \&\fB\-fno\-signed\-char\fR معادل با \fB\-funsigned\-char\fR است. .IP \fB\-funsigned\-char\fR 4 .IX Item "-funsigned-char" نوع \f(CW\*(C`char\*(C'\fR را مانند \f(CW\*(C`unsigned char\*(C'\fR بدون‌علامت در نظر می‌گیرد. .Sp هر نوع ماشین پیش‌فرضی برای این‌که \f(CW\*(C`char\*(C'\fR چگونه باید باشد دارد. این نوع به طور پیش‌فرض یا مانند \f(CW\*(C`unsigned char\*(C'\fR است یا مانند \&\f(CW\*(C`signed char\*(C'\fR. .Sp در حالت ایده‌آل، یک برنامهٔ قابل‌حمل باید همیشه زمانی که به علامت‌دار بودن یک شیء وابسته است، از \f(CW\*(C`signed char\*(C'\fR یا \&\f(CW\*(C`unsigned char\*(C'\fR استفاده کند. اما برنامه‌های بسیاری نوشته شده‌اند که صرفاً از \f(CW\*(C`char\*(C'\fR معمولی استفاده کرده و بسته به ماشین‌هایی که برای آن‌ها نوشته شده‌اند، انتظار دارند علامت‌دار باشد یا بدون‌علامت. این گزینه و معکوس آن به شما اجازه می‌دهند کاری کنید که چنین برنامه‌ای با پیش‌فرض برعکس کار کند. .Sp نوع \f(CW\*(C`char\*(C'\fR همواره یک نوع متمایز از هر یک از \&\f(CW\*(C`signed char\*(C'\fR یا \f(CW\*(C`unsigned char\*(C'\fR است، حتی با وجود اینکه رفتارش همیشه دقیقاً مانند یکی از آن دو است. .IP "\fB\-fstrict\-flex\-arrays\fR (فقط C و ++C)" 4 .IX Item "-fstrict-flex-arrays (C and C++ only)" .PD 0 .IP "\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR\fB \fR(فقط C و ++C)" 4 .IX Item "-fstrict-flex-arrays=level (C and C++ only)" .PD کنترل می‌کند که چه زمانی به منظور دسترسی به عناصر یک آرایه، با آرایهٔ انتهایی ساختار به عنوان عضو آرایهٔ منعطف (flexible array member) برخورد شود. مقدار \fIlevel\fR سطح سخت‌گیری را کنترل می‌کند. .Sp گزینهٔ \&\fB\-fstrict\-flex\-arrays\fR معادل با \&\fB\-fstrict\-flex\-arrays=3\fR است که سخت‌گیرانه‌ترین حالت است؛ با آرایهٔ انتهایی تنها زمانی به عنوان عضو آرایهٔ منعطف برخورد می‌شود که مطابق با استاندارد C99 به بعد به عنوان عضو آرایهٔ منعطف اعلان شده باشد. .Sp شکل منفی \fB\-fno\-strict\-flex\-arrays\fR معادل با \&\fB\-fstrict\-flex\-arrays=0\fR است که کمترین سخت‌گیری را دارد. در این حالت با تمام آرایه‌های انتهایی ساختارها به عنوان اعضای آرایهٔ منعطف برخورد می‌شود. .Sp دو سطح دیگر بین 0 و 3 وجود دارد که برای پشتیبانی از کدهای قدیمی‌تر که از افزونهٔ آرایه با طول صفر GCC (\fB[0]\fR) یا آرایهٔ یک‌عنصری به عنوان اعضای آرایهٔ منعطف (\fB[1]\fR) استفاده می‌کنند، ارائه شده‌اند. زمانی که \fIlevel\fR برابر با 1 باشد، با آرایهٔ انتهایی به عنوان عضو آرایهٔ منعطف برخورد می‌شود چنانچه به صورت هر یک از \fB[]\fR، \&\fB[0]\fR، یا \fB[1]\fR اعلان شده باشد. زمانی که \fIlevel\fR برابر با 2 باشد، با آرایهٔ انتهایی به عنوان عضو آرایهٔ منعطف برخورد می‌شود چنانچه به صورت هر یک از \&\fB[]\fR، یا \fB[0]\fR اعلان شده باشد. .Sp شما می‌توانید این رفتار را برای یک فیلد آرایهٔ انتهایی مشخص از یک ساختار با استفاده از مشخصهٔ متغیر \f(CW\*(C`strict_flex_array\*(C'\fR کنترل کنید. .Sp گزینهٔ \fB\-fstrict_flex_arrays\fR با گزینهٔ \&\fB\-Wstrict\-flex\-arrays\fR در تعامل است. .IP \fB\-fsso\-struct=\fR\fIendianness\fR 4 .IX Item "-fsso-struct=endianness" ترتیب ذخیره‌سازی اسکالر پیش‌فرض برای ساختارها و اجتماع‌ها را روی ترتیب بایت (endianness) مشخص‌شده تنظیم می‌کند. مقادیر پذیرفته‌شده عبارتند از \fBbig\-endian\fR، \&\fBlittle\-endian\fR و \fBnative\fR برای ترتیب بایت بومیِ هدف (پیش‌فرض). این گزینه برای ++C پشتیبانی نمی‌شود. .Sp \&\fBهشدار:\fR در صورتی که ترتیب بایت مشخص‌شده، ترتیب بایت بومی هدف نباشد، سوییچ \fB\-fsso\-struct\fR باعث می‌شود GCC کدی تولید کند که با کد تولیدشده بدون این گزینه از نظر دودویی (binary) سازگار نباشد..SS "گزینه‌های کنترل گویش ++C (Options Controlling C++ Dialect)" .IX Subsection "Options Controlling C++ Dialect" این بخش گزینه‌های خط فرمانی را شرح می‌دهد که فقط برای برنامه‌های ++C معنی‌دار هستند. شما همچنین می‌توانید فارغ از اینکه برنامه‌تان به چه زبانی نوشته شده است، از اکثر گزینه‌های کامپایلر گنو استفاده کنید. برای نمونه، ممکن است یک فایل \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\-fabi\-version=\fR\fIn\fR 4 .IX Item "-fabi-version=n" استفاده از نسخهٔ \fIn\fR از ABI مربوط به ++C. مقدار پیش‌فرض نسخهٔ 0 است. .Sp نسخهٔ 0 به نسخه‌ای اشاره دارد که نزدیک‌ترین انطباق را با مشخصات C++ ABI دارد. بنابراین، ABI به‌دست‌آمده با استفاده از نسخهٔ 0 با رفع باگ‌های ABI در نسخه‌های مختلف G++ تغییر خواهد کرد. .Sp نسخهٔ 1 نسخه‌ای از C++ ABI است که نخستین بار در G++ 3.2 ظاهر شد. .Sp نسخهٔ 2 نسخه‌ای از C++ ABI است که نخستین بار در G++ 3.4 ظاهر شد و تا G++ 4.9 پیش‌فرض بود. .Sp نسخهٔ 3 خطایی را در درهم‌سازی نام (mangling) یک آدرس ثابت به عنوان آرگومان الگو تصحیح می‌کند. .Sp نسخهٔ 4، که نخستین بار در G++ 4.5 ظاهر شد، یک درهم‌سازی استاندارد را برای انواع برداری (vector types) پیاده‌سازی می‌کند. .Sp نسخهٔ 5، که نخستین بار در G++ 4.6 ظاهر شد، درهم‌سازی صفت const/volatile روی انواع اشاره‌گر تابع، decltype یک اعلان ساده، و استفاده از پارامتر تابع در اعلان یک پارامتر دیگر را تصحیح می‌کند. .Sp نسخهٔ 6، که نخستین بار در G++ 4.7 ظاهر شد، رفتار ارتقای نوع (promotion) برای شمارش‌های محدوده‌دار (scoped enums) در C++11 و درهم‌سازی بسته‌های آرگومان الگو، const/static_cast، عملگرهای پیشوندی ++ و \-\-، و تابع در محدودهٔ کلاس که به عنوان آرگومان الگو استفاده شده است را تصحیح می‌کند. .Sp نسخهٔ 7، که نخستین بار در G++ 4.8 ظاهر شد، با nullptr_t به عنوان یک نوع توکار برخورد می‌کند و درهم‌سازی لامبداها را در محدودهٔ آرگومان پیش‌فرض تصحیح می‌نماید. .Sp نسخهٔ 8، که نخستین بار در G++ 4.9 ظاهر شد، رفتار جایگزینی انواع تابع دارای صفت‌های تبیین‌کنندهٔ function\-cv را تصحیح می‌کند. .Sp نسخهٔ 9، که نخستین بار در G++ 5.2 ظاهر شد، تراز (alignment) نوع \&\f(CW\*(C`nullptr_t\*(C'\fR را تصحیح می‌کند. .Sp نسخهٔ 10، که نخستین بار در G++ 6.1 ظاهر شد، درهم‌سازی صفت‌هایی را که بر هویت نوع تأثیر می‌گذارند (مانند صفت‌های قرارداد فراخوانی ia32، برای مثال \fBstdcall\fR) اضافه می‌کند. .Sp نسخهٔ 11، که نخستین بار در G++ 7 ظاهر شد، درهم‌سازی عبارت‌های ...sizeof و نام‌های عملگرها را تصحیح می‌کند. برای چندین موجودیت با نام یکسان درون یک تابع که در محدوده‌های متفاوتی اعلان شده‌اند، درهم‌سازی اکنون از دوازدهمین رخداد به بعد تغییر می‌کند. این گزینه همچنین به طور ضمنی \fB\-fnew\-inheriting\-ctors\fR را فعال می‌کند. .Sp نسخهٔ 12، که نخستین بار در G++ 8 ظاهر شد، قراردادهای فراخوانی را برای کلاس‌های خالی روی معماری مقصد x86_64 و برای کلاس‌هایی که فقط سازنده‌های رونوشت/انتقال (copy/move) حذف‌شده دارند تصحیح می‌کند. این نسخه به طور تصادفی قرارداد فراخوانی را برای کلاس‌هایی با یک سازندهٔ رونوشت حذف‌شده و یک سازندهٔ انتقال پیش‌پاافتاده (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 ظاهر شد، ساختار و چیدمان (layout) کلاس‌هایی را اصلاح می‌کند که از کلاس‌های تجمیعی (aggregate) دارای مقداردهنده‌های اولیه پیش‌فرض اعضا در C++14 به بعد ارث‌بری می‌کنند. .Sp نسخهٔ 18، که نخستین بار در G++ 13 ظاهر شد، درهم‌سازی لامبداهایی را که دارای زمینه (context) اضافی هستند اصلاح می‌کند. .Sp نسخهٔ 19، که نخستین بار در G++ 14 ظاهر شد، درهم‌سازی پیوندهای ساختاریافته (structured bindings) را به گونه‌ای اصلاح می‌کند که شامل برچسب‌های ABI باشند. .Sp نسخهٔ 20، که نخستین بار در G++ 15 ظاهر شد، درهم‌سازی لامبداها را در مقداردهنده‌های اولیه اعضای داده‌ای ایستا (static) اصلاح می‌کند. .Sp همچنین ببینید: \fB\-Wabi\fR. .IP \fB\-fabi\-compat\-version=\fR\fIn\fR 4 .IX Item "-fabi-compat-version=n" در مقصدهایی که از نام‌های مستعار قوی (strong aliases) پشتیبانی می‌کنند، G++ هنگام تعریف یک نماد با نام درهم‌سازی‌شدهٔ نادرست، با ایجاد یک نام مستعار با نام درهم‌سازی‌شدهٔ صحیح، تغییرات mangling را دور می‌زند. این سوییچ مشخص می‌کند که از کدام نسخهٔ ABI برای این نام مستعار استفاده شود. .Sp با \fB\-fabi\-version=0\fR (پیش‌فرض)، مقدار این گزینه به طور پیش‌فرض روی 13 تنظیم می‌شود (سازگاری با GCC 8.2). اگر نسخهٔ ABI دیگری به صراحت انتخاب شده باشد، مقدار پیش‌فرض آن 0 خواهد بود. برای سازگاری با نسخه‌های 3.2 تا 4.9 کامپایلر GCC، از \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" فعال‌سازی پشتیبانی از \f(CW\*(C`new\*(C'\fR در C++17 برای انواعی که به ترازی (alignment) بیشتر از آنچه \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR فراهم می‌کند نیاز دارند. یک آرگومان عددی مانند \f(CW\*(C`\-faligned\-new=32\*(C'\fR می‌تواند برای مشخص کردن میزان تراز (به بایت) که توسط آن تابع فراهم می‌شود استفاده گردد، اما کاربران اندکی نیاز به بازنویسی مقدار پیش‌فرض \&\f(CWalignof(std::max_align_t)\fR خواهند داشت. .Sp این پرچم به طور پیش‌فرض برای \fB\-std=c++17\fR فعال است. .IP \fB\-fno\-assume\-sane\-operators\-new\fR 4 .IX Item "-fno-assume-sane-operators-new" استاندارد ++C جایگزین کردن عملگرهای سراسری \f(CW\*(C`new\*(C'\fR، \&\f(CW\*(C`new[]\*(C'\fR، \&\f(CW\*(C`delete\*(C'\fR و \f(CW\*(C`delete[]\*(C'\fR را مجاز می‌داند، اگرچه بسیاری از برنامه‌های ++C آن‌ها را جایگزین نکرده و فقط از نسخهٔ ارائه‌شده توسط پیاده‌سازی استفاده می‌کنند. علاوه‌براین، استاندارد ++C نادیده‌گرفتن و حذف این فراخوانی‌ها را در صورتی که از عبارت‌های new یا delete انجام شده باشند مجاز دانسته است (و به همین ترتیب، در صورت استفاده از توابع \f(CW\*(C`_\|_builtin_operator_new\*(C'\fR یا \&\f(CW\*(C`_\|_builtin_operator_delete\*(C'\fR نیز همین فرض در نظر گرفته می‌شود). این گزینه امکان کنترل برخی بهینه‌سازی‌ها را در خصوص فراخوانی این عملگرها فراهم می‌کند. با گزینهٔ \f(CW\*(C`\-fassume\-sane\-operators\-new\-delete\*(C'\fR کامپایلر GCC ممکن است فرض کند فراخوانی عملگرهای سراسریِ قابل‌جایگزینی از طریق عبارت‌های new یا delete، یا از فراخوانی‌های \f(CW\*(C`_\|_builtin_operator_new\*(C'\fR یا \f(CW\*(C`_\|_builtin_operator_delete\*(C'\fR، متغیرهای سراسری یا متغیرهایی را که ممکن است آدرس آن‌ها به این عملگرها درز کند نمی‌خوانند و تغییر نمی‌دهند (وضعیت سراسری؛ به‌جز \f(CW\*(C`errno\*(C'\fR برای عملگرهای \&\f(CW\*(C`new\*(C'\fR و \f(CW\*(C`new[]\*(C'\fR). این امر امکان انجام بیشترین بهینه‌سازی‌ها را در طول این فراخوانی‌ها فراهم می‌سازد و چیزی است که عملگرهای ارائه‌شده توسط پیاده‌سازی آن را برآورده می‌کنند؛ مگر اینکه جزئیات پیاده‌سازی \f(CW\*(C`malloc\*(C'\fR در کد قابل‌مشاهده باشد یا از قلاب‌های (hooks) \f(CW\*(C`malloc\*(C'\fR استفاده شده باشد، اما در صورتی که برنامه‌ای این عملگرها را جایگزین کرده باشد ممکن است این شرط برقرار نباشد. این رفتار به طور پیش‌فرض فعال است. با گزینهٔ \f(CW\*(C`\-fno\-assume\-sane\-operators\-new\-delete\*(C'\fR کامپایلر GCC باید فرض کند همهٔ این فراخوانی‌ها (چه از عبارت‌های new یا delete باشند یا مستقیماً فراخوانی شوند) ممکن است وضعیت سراسری را بخوانند و بنویسند، مگر اینکه خلاف آن ثابت شود (مثلاً هنگامی که GCC پیاده‌سازی آن‌ها را کامپایل می‌کند). اگر این عملگرها جایگزین شده‌اند یا ممکن است جایگزین شوند و کد باید چنین رفتاری را در نظر داشته باشد، از این گزینه استفاده کنید. .IP \fB\-fchar8_t\fR 4 .IX Item "-fchar8_t" .PD 0 .IP \fB\-fno\-char8_t\fR 4 .IX Item "-fno-char8_t" .PD فعال‌سازی پشتیبانی از \f(CW\*(C`char8_t\*(C'\fR مطابق با تصویب آن در C++20. این مورد شامل افزودن نوع بنیادین جدید \f(CW\*(C`char8_t\*(C'\fR، ایجاد تغییرات در انواع لیترال‌های رشته‌ای و نویسه‌ای UTF\-8، امضاهای جدید برای لیترال‌های تعریف‌شده توسط کاربر، به‌روزرسانی‌های مرتبط در کتابخانهٔ استاندارد، و ماکروهای آزمون ویژگیِ جدید \&\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 پیش از هرگونه تلاش برای تغییر حافظهٔ تخصیص‌یافته، غیرتهی (non\-null) باشد. این بررسی معمولاً غیرضروری است چرا که استاندارد ++C تصریح می‌کند \f(CW\*(C`operator new\*(C'\fR تنها در صورتی \f(CW0\fR بازمی‌گرداند که به‌صورت \f(CWthrow()\fR اعلان شده باشد؛ در این حالت کامپایلر حتی بدون این گزینه نیز همواره مقدار بازگشتی را بررسی می‌کند. در سایر موارد، هنگامی که \f(CW\*(C`operator new\*(C'\fR دارای مشخصهٔ استثنای غیرخالی باشد، اتمام حافظه با پرتاب \f(CW\*(C`std::bad_alloc\*(C'\fR اعلام می‌شود. همچنین ببینید: \&\fBnew (nothrow)\fR. .IP \fB\-fconcepts\fR 4 .IX Item "-fconcepts" پشتیبانی از ویژگی مفاهیم (Concepts) در ++C را برای محدود کردن آرگومان‌های قالب (template arguments) فعال می‌کند. با \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\-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 تنظیم می‌کند. این یک روش مکاشفه‌ای (heuristic) است که بین سرعت کامپایل (زمانی که حافظهٔ پنهان از محاسبات تکراری جلوگیری می‌کند) و مصرف حافظه (زمانی که حافظهٔ پنهان به دلیل ارزیابی‌های بسیار بازگشتی بسیار بزرگ می‌شود) تعادل برقرار می‌کند. مقدار پیش‌فرض 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" پشتیبانی آزمایشی از ویژگی قراردادها (Contracts) در ++C را فعال می‌کند؛ همان‌طور که برای مدتی کوتاه به پیش‌نویس کاری C++20 (سند N4820) افزوده و سپس حذف شد. این پیاده‌سازی همچنین شامل بهبودهای پیشنهادی از اسناد P1290، P1332 و P1429 است. این قابلیت عمدتاً برای کسانی در نظر گرفته شده که علاقه‌مند به آزمایش در جهت بهبود این ویژگی و رساندن آن به استانداردهای آیندهٔ ++C هستند. .Sp در صورت نقض یک قرارداد بررسی‌شده، گردانندهٔ نقض (violation handler) فراخوانی می‌شود. کاربران می‌توانند با تعریف تابع زیر، گردانندهٔ نقض را جایگزین کنند: .Sp .Vb 2 \& void \& handle_contract_violation (const std::experimental::contract_violation&); .Ve .Sp مجموعه‌های متفاوتی از پرچم‌های اضافی وجود دارند که می‌توانند برای مشخص کردن این که کدام قراردادها و چگونه برای قراردادهای N4820، قراردادهای P1332 یا قراردادهای P1429 بررسی شوند، به همراه یکدیگر استفاده گردند؛ این مجموعه‌ها را نمی‌توان به طور هم‌زمان با یکدیگر به کار برد. .RS 4 .IP \fB\-fcontract\-mode=[on|off]\fR 4 .IX Item "-fcontract-mode=[on|off]" کنترل می‌کند که آیا هیچ قراردادی اساساً دارای معناشناسی باشد یا خیر. پیش‌فرض on است. .IP \fB\-fcontract\-assumption\-mode=[on|off]\fR 4 .IX Item "-fcontract-assumption-mode=[on|off]" [N4820] کنترل می‌کند که آیا قراردادهای دارای سطح \fBaxiom\fR باید معناشناسی فرض (assume) داشته باشند یا خیر. پیش‌فرض on است. .IP \fB\-fcontract\-build\-level=[off|default|audit]\fR 4 .IX Item "-fcontract-build-level=[off|default|audit]" [N4820] مشخص می‌کند که برای کدام سطح از قراردادها بررسی تولید شود. پیش‌فرض \fBdefault\fR است. .IP \fB\-fcontract\-continuation\-mode=[on|off]\fR 4 .IX Item "-fcontract-continuation-mode=[on|off]" [N4820] کنترل می‌کند که آیا پس از نقض قرارداد، به برنامه اجازه داده شود به اجرا ادامه دهد یا خیر. یعنی آیا قراردادهای بررسی‌شده دارای معناشناسی \fBmaybe\fR شرح داده شده در زیر باشند یا معناشناسی \fBnever\fR. پیش‌فرض off است. .IP \fB\-fcontract\-role=:,,\fR 4 .IX Item "-fcontract-role=:,," [P1332] معناشناسی عینی (concrete semantics) را برای هر سطح از قرارداد در یک نقش قرارداد خاص مشخص می‌کند. .IP \fB\-fcontract\-semantic=[default|audit|axiom]:\fR 4 .IX Item "-fcontract-semantic=[default|audit|axiom]:" [P1429] معناشناسی عینی را برای یک سطح قرارداد مشخص معین می‌کند. .IP \fB\-fcontract\-strict\-declarations=[on|off]\fR 4 .IX Item "-fcontract-strict-declarations=[on|off]" کنترل می‌کند که آیا افزودن قرارداد به یک تابع پس از نخستین اعلان آن رد شود یا خیر. پیش‌فرض off است. .RE .RS 4 .Sp معناشناسی‌های عینی ممکنی که می‌توان با \&\fB\-fcontract\-role\fR یا \fB\-fcontract\-semantic\fR مشخص کرد عبارتند از: .ie n .IP """ignore""" 4 .el .IP \f(CWignore\fR 4 .IX Item "ignore" این قرارداد هیچ اثری ندارد. .ie n .IP """assume""" 4 .el .IP \f(CWassume\fR 4 .IX Item "assume" با این قرارداد مانند \f(CW\*(C`[[assume]]\*(C'\fR در C++23 رفتار می‌شود. .ie n .IP """check_never_continue""" 4 .el .IP \f(CWcheck_never_continue\fR 4 .IX Item "check_never_continue" .PD 0 .ie n .IP """never""" 4 .el .IP \f(CWnever\fR 4 .IX Item "never" .ie n .IP """abort""" 4 .el .IP \f(CWabort\fR 4 .IX Item "abort" .PD این قرارداد بررسی می‌شود. در صورت شکست، گردانندهٔ نقض فراخوانی می‌شود. اگر گرداننده بازگردد، \f(CW\*(C`std::terminate\*(C'\fR فراخوانی خواهد شد. .ie n .IP """check_maybe_continue""" 4 .el .IP \f(CWcheck_maybe_continue\fR 4 .IX Item "check_maybe_continue" .PD 0 .ie n .IP """maybe""" 4 .el .IP \f(CWmaybe\fR 4 .IX Item "maybe" .PD این قرارداد بررسی می‌شود. در صورت شکست، گردانندهٔ نقض فراخوانی می‌شود. اگر گرداننده بازگردد، اجرای برنامه به‌طور عادی ادامه می‌یابد. .RE .RS 4 .RE.IP \fB\-fcoroutines\fR 4 .IX Item "-fcoroutines" پشتیبانی از افزونهٔ همروندهای (coroutines) زبان C++ (آزمایشی) را فعال می‌کند. .IP \fB\-fdiagnostics\-all\-candidates\fR 4 .IX Item "-fdiagnostics-all-candidates" به فرانت‌اند C++ اجازه می‌دهد هنگام شکست در تفکیک بارگذاری بیش‌ازحد (overload resolution)، همهٔ کاندیداها را گزارش کند، از جمله زمانی که یک تابع حذف‌شده (deleted function) انتخاب شده باشد. .IP \fB\-fno\-elide\-constructors\fR 4 .IX Item "-fno-elide-constructors" استاندارد C++ به پیاده‌سازی اجازه می‌دهد از ایجاد شیء موقتی که تنها برای مقداردهی اولیهٔ شیء دیگری از همان نوع استفاده می‌شود، صرف‌نظر کند. تعیین این گزینه این بهینه‌سازی را غیرفعال کرده و G++ را وادار می‌کند در تمام حالات سازندهٔ رونوشت (copy constructor) را فراخوانی کند. این گزینه همچنین باعث می‌شود G++ توابع عضو بدیهی (trivial) را که در حالت عادی به‌صورت درون‌خطی بسط می‌یافتند، فراخوانی کند. .Sp در C++17، کامپایلر ملزم است از این اشیاء موقت صرف‌نظر کند، اما این گزینه همچنان بر توابع عضو بدیهی تأثیر می‌گذارد. .IP \fB\-fno\-enforce\-eh\-specs\fR 4 .IX Item "-fno-enforce-eh-specs" کدی برای بررسی نقض مشخصات استثناها (exception specifications) در زمان اجرا تولید نمی‌کند. این گزینه استاندارد C++ را نقض می‌کند، اما ممکن است برای کاهش حجم کد در بیلد‌های نهایی، بسیار شبیه به تعریف \&\f(CW\*(C`NDEBUG\*(C'\fR، مفید باشد. این گزینه به کد کاربر اجازهٔ پرتاب استثناهایی در نقض مشخصات استثناها را نمی‌دهد؛ کامپایلر همچنان بر اساس این مشخصات بهینه‌سازی می‌کند، بنابراین پرتاب یک استثنای غیرمنتظره منجر به رفتار تعریف‌نشده (undefined behavior) در زمان اجرا خواهد شد. .IP \fB\-fextern\-tls\-init\fR 4 .IX Item "-fextern-tls-init" .PD 0 .IP \fB\-fno\-extern\-tls\-init\fR 4 .IX Item "-fno-extern-tls-init" .PD استانداردهای C++11 و OpenMP به متغیرهای \f(CW\*(C`thread_local\*(C'\fR و \&\f(CW\*(C`threadprivate\*(C'\fR اجازه می‌دهند دارای مقداردهی اولیهٔ پویا (زمان اجرا) باشند. برای پشتیبانی از این ویژگی، هرگونه استفاده از چنین متغیری از طریق یک تابع پوششی انجام می‌شود که مقداردهی اولیهٔ لازم را اجرا می‌کند. هنگامی که استفاده و تعریف متغیر در یک واحد ترجمه (translation unit) باشند، این سربار می‌تواند با بهینه‌سازی حذف شود، اما هنگامی که استفاده در واحد ترجمهٔ متفاوتی باشد، سربار چشمگیری به وجود می‌آید حتی اگر متغیر در عمل نیازی به مقداردهی اولیهٔ پویا نداشته باشد. اگر برنامه‌نویس مطمئن باشد که هیچ استفاده‌ای از متغیر در یک TU غیرتعریف‌کننده نیازی به راه‌اندازی مقداردهی اولیهٔ پویا ندارد (خواه به این دلیل که متغیر به‌صورت ایستا مقداردهی اولیه شده است، یا اینکه استفاده از متغیر در TU تعریف‌کننده پیش از هر استفاده‌ای در TU دیگر اجرا خواهد شد)، می‌تواند با گزینهٔ \&\fB\-fno\-extern\-tls\-init\fR از این سربار جلوگیری کند. .Sp در مقصدهایی که از نام‌های مستعار نماد (symbol aliases) پشتیبانی می‌کنند، پیش‌فرض \&\fB\-fextern\-tls\-init\fR است. در مقصدهایی که از نام‌های مستعار نماد پشتیبانی نمی‌کنند، پیش‌فرض \fB\-fno\-extern\-tls\-init\fR است. .IP \fB\-ffold\-simple\-inlines\fR 4 .IX Item "-ffold-simple-inlines" .PD 0 .IP \fB\-fno\-fold\-simple\-inlines\fR 4 .IX Item "-fno-fold-simple-inlines" .PD به فرانت‌اند C++ اجازه می‌دهد فراخوانی‌های \f(CW\*(C`std::move\*(C'\fR، \&\f(CW\*(C`std::forward\*(C'\fR، \&\f(CW\*(C`std::addressof\*(C'\fR و \f(CW\*(C`std::as_const\*(C'\fR را ساده‌سازی و فولد (fold) کند. بر خلاف درون‌خطی‌سازی (inlining)، این به این معناست که هیچ اطلاعات اشکال‌زدایی برای این فراخوانی‌ها تولید نخواهد شد. از آن‌جا که اشکال‌زدایی این توابع به‌ندرت مورد نیاز است، این پرچم به‌طور پیش‌فرض فعال است مگر اینکه \fB\-fno\-inline\fR فعال باشد. .IP \fB\-fno\-gnu\-keywords\fR 4 .IX Item "-fno-gnu-keywords" شناسهٔ \f(CW\*(C`typeof\*(C'\fR را به عنوان کلمهٔ کلیدی در نظر نمی‌گیرد، تا کد بتواند از این کلمه به عنوان یک شناسه استفاده کند. می‌توانید به جای آن از کلمهٔ کلیدی \f(CW\*(C`_\|_typeof_\|_\*(C'\fR استفاده کنید. این گزینه به طور ضمنی توسط گویش‌های صریح استاندارد ISO C++ اعمال می‌شود: \fB\-ansi\fR، \&\fB\-std=c++98\fR، \&\fB\-std=c++11\fR و غیره. .IP \fB\-fno\-immediate\-escalation\fR 4 .IX Item "-fno-immediate-escalation" قابلیت ارتقای تابع فوری (immediate function escalation) را که به موجب آن برخی توابع می‌توانند مطابق با P2564R3 به consteval ارتقا یابند، فعال نمی‌کند. برای مثال: .Sp .Vb 1 \& consteval int id(int i) { return i; } \& \& constexpr int f(auto t) \& { \& return t + id(t); // id causes f to be promoted to consteval \& } \& \& void g(int i) \& { \& f (3); \& } .Ve .Sp در C++20 کامپایل می‌شود: تابع \f(CW\*(C`f\*(C'\fR یک تابع ارتقایابندهٔ فوری است (به دلیل وجود \f(CW\*(C`auto\*(C'\fR، یک قالب تابع بوده و به صورت \f(CW\*(C`constexpr\*(C'\fR اعلان شده است) و \f(CWid(t)\fR یک عبارت ارتقایابندهٔ فوری است، بنابراین \f(CW\*(C`f\*(C'\fR به \f(CW\*(C`consteval\*(C'\fR ارتقا می‌یابد. در نتیجه، فراخوانی \f(CWid(t)\fR در یک بافتار فوری (immediate context) قرار می‌گیرد و ملزم به تولید یک مقدار ثابت نیست (این همان سازوکاری است که امکان ترکیب توابع consteval را فراهم می‌سازد). با این حال، با گزینهٔ \fB\-fno\-immediate\-escalation\fR، تابع \f(CW\*(C`f\*(C'\fR به \&\f(CW\*(C`consteval\*(C'\fR ارتقا نمی‌یابد، و از آن‌جا که فراخوانی تابع consteval یعنی \f(CWid(t)\fR یک عبارت ثابت نیست، کامپایلر کد را رد می‌کند. .Sp این گزینه به صورت پیش‌فرض فعال است؛ این گزینه فقط در حالت C++20 یا بالاتر اثرگذار است. .IP \fB\-fimplicit\-constexpr\fR 4 .IX Item "-fimplicit-constexpr" توابع inline را در صورتی که شرایط لازم برای یک تابع constexpr را داشته باشند، به‌طور ضمنی constexpr می‌کند. این گزینه می‌تواند در حالت C++14 یا بالاتر استفاده شود. این امر می‌تواند به تغییر مقداردهی اولیه از پویا به ایستا و دیگر بهینه‌سازی‌ها بینجامد. .IP \fB\-fno\-implicit\-templates\fR 4 .IX Item "-fno-implicit-templates" هرگز برای قالب‌های غیردرون‌خطی (non-inline) که به‌طور ضمنی (یعنی بر اثر استفاده) نمونه‌سازی می‌شوند کدی تولید نمی‌کند؛ صرفاً برای نمونه‌سازی‌های صریح کد تولید می‌کند. در صورت استفاده از این گزینه، باید ساختار کد خود را با دقت طوری تنظیم کنید که تمام نمونه‌سازی‌های صریح لازم را در بر داشته باشد تا در هنگام پیوند با نمادهای تعریف‌نشده مواجه نشوید. .IP \fB\-fno\-implicit\-inline\-templates\fR 4 .IX Item "-fno-implicit-inline-templates" برای نمونه‌سازی‌های ضمنی قالب‌های درون‌خطی (inline) نیز کدی تولید نمی‌کند. حالت پیش‌فرض با توابع درون‌خطی به گونهٔ متفاوتی رفتار می‌کند تا کامپایل با بهینه‌سازی و بدون بهینه‌سازی به مجموعهٔ یکسانی از نمونه‌سازی‌های صریح نیاز داشته باشند. .IP \fB\-fno\-implement\-inlines\fR 4 .IX Item "-fno-implement-inlines" برای صرفه‌جویی در فضا، نسخه‌های برون‌خطی (out-of-line) توابع درون‌خطی تحت کنترل \f(CW\*(C`#pragma implementation\*(C'\fR را تولید نمی‌کند. اگر این توابع در تمام مکان‌هایی که فراخوانی شده‌اند درون‌خط نشوند، این امر موجب خطاهای پیونددهنده خواهد شد. .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) را برای ایجاد یک واحد سرایند قابل واردسازی (importable header unit) کامپایل می‌کند. .IP \fB\-fmodule\-implicit\-inline\fR 4 .IX Item "-fmodule-implicit-inline" توابع عضوی که در تعاریف کلاس خود تعریف شده‌اند، در کدهای ماژولار به‌طور ضمنی درون‌خطی (inline) نیستند. این تفاوت با رفتار سنتی C++ بنا به دلایل موجهی است. با این حال، ممکن است در هنگام انتقال (porting) کد موجب دشواری‌هایی شود. این گزینه این‌گونه تعاریف توابع را به‌طور ضمنی inline می‌کند. با این وجود، این کار ناسازگاری ABI ایجاد می‌کند، بنابراین باید از آن در همه‌جا یا هیچ‌جا استفاده کنید. (این تعاریف در خارج از یک ماژول نام‌گذاری‌شده در هر صورت به‌طور ضمنی inline باقی می‌مانند.) .IP \fB\-fno\-module\-lazy\fR 4 .IX Item "-fno-module-lazy" واردسازی تنبل (lazy importing) ماژول و ایجاد نگاشت‌کنندهٔ ماژول (module mapper) را غیرفعال می‌کند. .IP \fB\-fmodule\-mapper=\fR[\fIhostname\fR]\fB:\fR\fIport\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=[hostname]:port[?ident]" .PD 0 .IP "\fB\-fmodule\-mapper=|\fR\fIprogram\fR[\fB?\fR\fIident\fR]\fB \fR\fIargs...\fR" 4 .IX Item "-fmodule-mapper=|program[?ident] args..." .IP \fB\-fmodule\-mapper==\fR\fIsocket\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper==socket[?ident]" .IP \fB\-fmodule\-mapper=<>\fR[\fIinout\fR][\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=<>[inout][?ident]" .IP \fB\-fmodule\-mapper=<\fR\fIin\fR\fB>\fR\fIout\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=out[?ident]" .IP \fB\-fmodule\-mapper=\fR\fIfile\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=file[?ident]" .PD یک اوراکل برای پرس‌وجوی نگاشت نام ماژول به نام فایل. در صورت عدم تعیین، از متغیر محیطی \fBCXX_MODULE_MAPPER\fR استفاده می‌شود، و اگر تنظیم نشده باشد، یک پیش‌فرض درون‌فرآیندی ارائه می‌گردد. .IP \fB\-fmodule\-only\fR 4 .IX Item "-fmodule-only" صرفاً واسط ماژول کامپایل‌شده (Compiled Module Interface) را تولید می‌کند و از ایجاد هرگونه فایل شیء (object file) جلوگیری می‌کند. .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)، دربارهٔ پارامترهای قالبِ قالب (template template parameters) و آرگومان‌های پیش‌فرض را فعال می‌کند: این گزینه اجازه می‌دهد یک قالب دارای آرگومان‌های قالب پیش‌فرض، به عنوان آرگومان برای یک پارامتر قالبِ قالب با پارامترهای قالب کمتر استفاده شود. این پرچم به‌طور پیش‌فرض برای \&\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) را در مقایسه با تابعی بدون مشخصهٔ استثنا کاهش دهد یا حذف کند. اگر تابع دارای متغیرهای محلی از انواعی با مخرب‌های غیربدیهی (non\-trivial destructors) باشد، مشخصهٔ استثنا در عمل تابع را کوچک‌تر می‌کند زیرا پاک‌سازی‌های EH برای آن متغیرها می‌تواند از طریق بهینه‌سازی حذف شود. اثر معنایی این است که پرتاب یک استثنا به خارج از تابعی با چنین مشخصهٔ استثنایی، به جای \f(CW\*(C`unexpected\*(C'\fR منجر به فراخوانی \f(CW\*(C`terminate\*(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" پیام‌های خطایابی و هشداری (diagnostics) را که استاندارد می‌گوید نیازی به صدور آن‌ها توسط کامپایلر نیست، غیرفعال می‌کند. در حال حاضر، تنها پیام خطایابی از این دست که توسط 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\-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 را فعال می‌کند. این گزینه برای توابع آزادسازی حافظهٔ جایگزین و تعریف‌شده توسط کاربر مفید است که به عنوان نمونه، از اندازهٔ شیء برای سریع‌تر کردن آزادسازی استفاده می‌کنند. به‌طور پیش‌فرض تحت \&\fB\-std=c++14\fR و بالاتر فعال است. پرچم \fB\-Wsized\-deallocation\fR دربارهٔ جاهایی که ممکن است نیاز به افزودن یک تعریف داشته باشند هشدار می‌دهد. .IP \fB\-fstrict\-enums\fR 4 .IX Item "-fstrict-enums" به کامپایلر اجازه می‌دهد بر اساس این فرض بهینه‌سازی کند که مقدار یک نوع شمارشی (enumerated type) فقط می‌تواند یکی از مقادیر آن شمارش باشد (همان‌طور که در استاندارد ++C تعریف شده است؛ اساساً، مقداری که می‌تواند در حداقل تعداد بیت‌های مورد نیاز برای نمایش تمامی شمارنده‌ها قرار گیرد). این فرض ممکن است در صورتی که برنامه از یک تبدیل صریح (cast) برای تبدیل یک مقدار صحیح اختیاری به نوع شمارشی استفاده کند، معتبر نباشد. این گزینه روی نوع شمارشی با نوع زیربنایی مشخص (fixed 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 عبارت‌های دسترسی به اعضا، اندیس‌گذاری آرایه و جابجایی بیتی (shift) را به ترتیب چپ به راست، و انتساب را به ترتیب راست به چپ، طبق آنچه برای 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) مواجه شود. .IP \fB\-fno\-threadsafe\-statics\fR 4 .IX Item "-fno-threadsafe-statics" کد اضافی برای استفاده از روال‌های مشخص‌شده در C++ ABI به منظور مقداردهی اولیهٔ متغیرهای محلی ایستا به صورت امن در برابر ریسه‌ها (thread\-safe) را تولید نمی‌کند. می‌توانید از این گزینه برای کاهش اندک اندازهٔ کد در برنامه‌هایی که نیازی به امنیت ریسه ندارند استفاده کنید. .IP \fB\-fuse\-cxa\-atexit\fR 4 .IX Item "-fuse-cxa-atexit" مخرب‌های اشیاء دارای مدت ذخیره‌سازی ایستا را به جای تابع \f(CW\*(C`atexit\*(C'\fR، با تابع \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR ثبت می‌کند. این گزینه برای مدیریت کاملاً منطبق بر استاندارد مخرب‌های ایستا مورد نیاز است، اما تنها در صورتی کار می‌کند که کتابخانهٔ C شما از \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR پشتیبانی کند. .IP \fB\-fno\-use\-cxa\-get\-exception\-ptr\fR 4 .IX Item "-fno-use-cxa-get-exception-ptr" از روال زمان اجرای \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR استفاده نمی‌کند. این کار باعث نادرست کار کردن \f(CW\*(C`std::uncaught_exception\*(C'\fR می‌شود، اما در صورتی که این روال زمان اجرا در دسترس نباشد ضروری است. .IP \fB\-fvisibility\-inlines\-hidden\fR 4 .IX Item "-fvisibility-inlines-hidden" این سوئیچ اعلام می‌کند که کاربر قصد مقایسهٔ اشاره‌گرها به توابع یا متدهای درون‌خطی (inline) را که آدرس‌های آن‌ها در اشیاء اشتراکی متفاوتی گرفته شده است ندارد. .Sp اثر این کار این است که GCC ممکن است در عمل، متدهای درون‌خطی را با \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR نشانه‌گذاری کند تا در جدول صادرات یک DSO ظاهر نشوند و هنگام استفاده در همان DSO به ارجاع غیرمستقیم PLT نیازی نداشته باشند. فعال کردن این گزینه می‌تواند تأثیر چشمگیری بر زمان بارگذاری و پیوند یک DSO داشته باشد، زیرا وقتی کتابخانه به طور گسترده از قالب‌ها استفاده می‌کند، اندازهٔ جدول صادرات پویا را به شدت کاهش می‌دهد. .Sp رفتار این سوئیچ کاملاً مشابه نشانه‌گذاری مستقیم متدها به عنوان hidden نیست، زیرا روی متغیرهای ایستای محلیِ تابع اثری نمی‌گذارد و سبب نمی‌شود کامپایلر استنتاج کند که تابع تنها در یک شیء اشتراکی تعریف شده است. .Sp می‌توانید یک متد را به‌طور صریح با یک وضعیت دید (visibility) مشخص نشانه‌گذاری کنید تا اثر این سوئیچ برای آن متد خنثی شود. برای نمونه، اگر می‌خواهید اشاره‌گرها به یک متد درون‌خطی خاص را مقایسه کنید، می‌توانید آن را با دید پیش‌فرض (default visibility) نشانه‌گذاری نمایید. نشانه‌گذاری کلاس دربرگیرنده با دید صریح هیچ اثری ندارد. .Sp متدهای درون‌خطی که به‌طور صریح نمونه‌سازی شده‌اند از این گزینه تأثیر نمی‌پذیرند، زیرا در غیر این صورت پیوند آن‌ها ممکن است از مرز کتابخانهٔ اشتراکی عبور کند. .IP \fB\-fvisibility\-ms\-compat\fR 4 .IX Item "-fvisibility-ms-compat" این پرچم تلاش می‌کند با استفاده از تنظیمات دید، مدل پیوند ++C در GCC را با مدل Microsoft Visual Studio سازگار سازد. .Sp این پرچم تغییرات زیر را در مدل پیوند GCC ایجاد می‌کند: .RS 4 .IP 1. 4 .IX Item "1." دید پیش‌فرض را مانند \&\fB\-fvisibility=hidden\fR روی \f(CW\*(C`hidden\*(C'\fR تنظیم می‌کند. .IP 2. 4 .IX Item "2." انواع داده، به جز اعضایشان، به‌طور پیش‌فرض پنهان نیستند. .IP 3. 4 .IX Item "3." قاعدهٔ تعریف واحد (One Definition Rule) برای انواعی بدون مشخصات دید صریح که در بیش از یک شیء اشتراکی تعریف شده‌اند، ملایم‌تر گرفته می‌شود: این اعلان‌ها در صورتی مجاز هستند که در زمان عدم استفاده از این گزینه نیز مجاز باشند. .RE .RS 4 .Sp در کدهای جدید بهتر است از \fB\-fvisibility=hidden\fR استفاده شود و کلاس‌هایی که قرار است از بیرون قابل مشاهده باشند صادر گردند. متأسفانه این امکان وجود دارد که کدهای موجود، شاید به طور اتفاقی، به رفتار Visual Studio وابسته باشند. .Sp از جمله پیامدهای این تغییرات این است که اعضای داده‌ای ایستای هم‌نوع با نام یکسان اما تعریف‌شده در اشیاء اشتراکی متفاوت، متمایز خواهند بود؛ بنابراین تغییر یکی سبب تغییر دیگری نمی‌شود؛ و همچنین اشاره‌گرها به توابع عضوِ تعریف‌شده در اشیاء اشتراکی مختلف ممکن است در مقایسه برابر نباشند. هنگامی که این پرچم داده می‌شود، تعریف متفاوت انواع دارای نام یکسان، نقض ODR محسوب می‌شود. .RE.IP \fB\-fno\-weak\fR 4 .IX Item "-fno-weak" از پشتیبانی نماد ضعیف (weak symbol) استفاده نکن، حتی اگر توسط پیونددهنده ارائه شده باشد. به‌طور پیش‌فرض، G++ در صورت موجود بودن، از نمادهای ضعیف استفاده می‌کند. این گزینه صرفاً برای آزمایش وجود دارد و نباید توسط کاربران نهایی استفاده شود؛ این کار منجر به تولید کد ضعیف‌تر شده و هیچ مزیتی ندارد. این گزینه ممکن است در نسخه‌های بعدی G++ حذف شود. .IP "\fB\-fext\-numeric\-literals\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-fext-numeric-literals (C++ and Objective-C++ only)" پسوندهای لیترال عددی موهومی (imaginary)، ممیز ثابت (fixed\-point) یا تعریف‌شده توسط ماشین را به عنوان افزونه‌های GNU می‌پذیرد. هنگامی که این گزینه غیرفعال باشد، با این پسوندها به عنوان پسوندهای لیترال عددی تعریف‌شده توسط کاربر در C++11 رفتار می‌شود. این گزینه به‌طور پیش‌فرض برای تمام گویش‌های پیش از C++11 و تمام گویش‌های GNU فعال است: \&\fB\-std=c++98\fR، \fB\-std=gnu++98\fR، \fB\-std=gnu++11\fR، \&\fB\-std=gnu++14\fR. این گزینه به‌طور پیش‌فرض برای ISO C++11 به بعد (\fB\-std=c++11\fR، ...) غیرفعال است. .IP \fB\-nostdinc++\fR 4 .IX Item "-nostdinc++" برای فایل‌های سرآیند در دایرکتوری‌های استاندارد ویژه C++ جستجو نکن، اما سایر دایرکتوری‌های استاندارد را همچنان جستجو کن. (این گزینه هنگام ساخت کتابخانه 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 به یک سرآیند کاربری یا سیستمی خاص تبدیل (resolve) خواهد شد. .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 مسیرهای Compiled Module Interface را اطلاع بده. گزینه اول تمام مسیرهای CMI خوانده‌شده را ذکر می‌کند. قالب \fImodule\fR خواندن CMI یک ماژول خاص را ثبت می‌کند. \fImodule\fR ممکن است یک ماژول نام‌دار یا یک واحد سرآیند (header\-unit) باشد (مورد دوم یا با بودن نام مسیری حاوی جداکننده‌های دایرکتوری، یا با محصور بودن در \f(CW\*(C`<>\*(C'\fR یا \f(CW""\fR مشخص می‌شود). .IP \fB\-stdlib=\fR\fIlibstdc++,libc++\fR 4 .IX Item "-stdlib=libstdc++,libc++" هنگامی که G++ برای پشتیبانی از این گزینه پیکربندی شده باشد، امکان مشخص کردن کتابخانه‌های زمان اجرای جایگزین C++ را فراهم می‌کند. دو گزینه در دسترس است: \fIlibstdc++\fR (زمان اجرای پیش‌فرض و بومی C++ برای G++) و \fIlibc++\fR که کتابخانه زمان اجرای C++ نصب‌شده روی برخی سیستم‌عامل‌ها است (مانند نسخه‌های Darwin از Darwin11 به بعد). این گزینه G++ را تغییر می‌دهد تا از سرآیندهای کتابخانه مشخص‌شده استفاده کند و هنگامی که یک زمان اجرای C++ برای پیوند دادن لازم است، به‌ترتیب \f(CW\*(C`\-lstdc++\*(C'\fR یا \f(CW\*(C`\-lc++\*(C'\fR را صادر کند. .PP علاوه بر این، این گزینه‌های هشدار تنها برای برنامه‌های C++ معنا دارند: .IP "\fB\-Wabi\-tag\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wabi-tag (C++ and Objective-C++ only)" زمانی که یک نوع دارای یک برچسب ABI در زمینه‌ای استفاده شود که آن برچسب ABI را ندارد، هشدار بده. برای اطلاعات بیشتر در مورد برچسب‌های ABI، به \fBC++ Attributes\fR مراجعه کنید. .IP "\fB\-Wcomma\-subscript\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wcomma-subscript (C++ and Objective-C++ only)" درباره استفاده از عبارت ویرگول (comma expression) درون یک عبارت اندیس‌گذاری هشدار بده. این کاربرد در C++20 منسوخ شده و قرار است در C++23 حذف شود. با این حال، یک عبارت ویرگول که در \f(CW\*(C`( )\*(C'\fR قرار گرفته باشد منسوخ نیست. مثال: .Sp .Vb 4 \& void f(int *a, int b, int c) { \& a[b,c]; // deprecated in C++20, invalid in C++23 \& a[(b,c)]; // OK \& } .Ve .Sp در C++23 داشتن عبارت‌های جدا شده با ویرگول در اندیس‌گذاری مجاز است، مشروط بر آنکه یک عملگر اندیس سربارگذاری‌شده یافت شود و از تعداد و انواع درست آرگومان‌ها پشتیبانی کند. 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 این هشدار در حالت C++23 یا بالاتر با \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wctad\-maybe\-unsupported\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wctad-maybe-unsupported (C++ and Objective-C++ only)" هنگام انجام استنتاج آرگومان الگوی کلاس (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++ and Objective-C++ only)" زمانی که کلاسی به نظر غیرقابل استفاده می‌رسد زیرا تمام سازنده‌ها یا مخرب‌های آن کلاس خصوصی هستند و هیچ دوست (friend) یا تابع عضو استاتیک عمومی ندارد، هشدار بده. همچنین اگر هیچ متد غیرخصوصی وجود نداشته باشد و حداقل یک تابع عضو خصوصی وجود داشته باشد که سازنده یا مخرب نباشد، هشدار بده. .IP "\fB\-Wdangling\-reference\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdangling-reference (C++ and Objective-C++ only)" زمانی که یک مرجع به یک شیء موقت که طول عمر آن به پایان رسیده متصل شود، هشدار بده. برای مثال: .Sp .Vb 2 \& int n = 1; \& const int& r = std::max(n \- 1, n + 1); // r is dangling .Ve .Sp در مثال بالا، دو شیء موقت ایجاد می‌شود (یکی برای هر آرگومان) و مرجعی به یکی از اشیاء موقت بازگردانده می‌شود. با این حال، هر دو شیء موقت در انتهای کل عبارت (full expression) نابود می‌شوند، بنابراین مرجع \f(CW\*(C`r\*(C'\fR معلق (dangling) است. این هشدار همچنین مراجع معلق را در فهرست‌های مقداردهی اولیه اعضا تشخیص می‌دهد: .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 توابع عضو نیز بررسی می‌شوند، اما فقط آرگومان شیء (object argument) آنها: .Sp .Vb 4 \& struct S { \& const S& self () { return *this; } \& }; \& const S& s = S().self(); // s is dangling .Ve .Sp برخی توابع از این حیث ایمن هستند، برای مثال \f(CW\*(C`std::use_facet\*(C'\fR: آنها یک مرجع را دریافت کرده و بازمی‌گردانند، اما یکی از آرگومان‌های آن را بازنمی‌گردانند، که می‌تواند هشدار را گمراه کند. چنین توابعی را می‌توان با محصور کردن آنها در یک \f(CW\*(C`#pragma\*(C'\fR از هشدار مستثنی کرد: .Sp .Vb 4 \& #pragma GCC diagnostic push \& #pragma GCC diagnostic ignored "\-Wdangling\-reference" \& const T& foo (const T&) { ... } \& #pragma GCC diagnostic pop .Ve .Sp دستور \f(CW\*(C`#pragma\*(C'\fR همچنین می‌تواند کلاس را در بر بگیرد؛ در این حالت، هشدار برای تمام توابع عضو غیرفعال خواهد شد. .Sp گزینه \&\fB\-Wdangling\-reference\fR همچنین در مورد کدهایی مانند زیر هشدار می‌دهد: .Sp .Vb 1 \& auto p = std::minmax(1, 2); .Ve .Sp جایی که \f(CW\*(C`std::minmax\*(C'\fR مقدار \f(CW\*(C`std::pair\*(C'\fR را بازمی‌گرداند، و هر دو مرجع پس از پایان کل عبارتی که حاوی فراخوانی \f(CW\*(C`std::minmax\*(C'\fR است معلق می‌شوند. .Sp این هشدار برای کلاس‌های شبه\-\f(CW\*(C`std::span\*(C'\fR هشدار نمی‌دهد. ما کلاس‌هایی به شکل: .Sp .Vb 5 \& template \& struct Span { \& T* data_; \& std::size len_; \& }; .Ve .Sp را شبه\-\f(CW\*(C`std::span\*(C'\fR در نظر می‌گیریم؛ یعنی کلاس یک کلاس غیر union است که دارای یک عضو داده‌ای اشاره‌گر و یک مخرب بدیهی (trivial) است. .Sp این هشدار را می‌توان با استفاده از مشخصه \f(CW\*(C`gnu::no_dangling\*(C'\fR غیرفعال کرد. .Sp این هشدار با \fB\-Wextra\fR فعال می‌شود..IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)" هنگامی که از \f(CW\*(C`delete\*(C'\fR برای تخریب نمونه‌ای از یک کلاس استفاده می‌شود که دارای توابع مجازی و مخرب غیرمجازی است، هشدار می‌دهد. در صورتی که کلاس پایه فاقد مخرب مجازی باشد، حذف نمونه‌ای از یک کلاس مشتق‌شده از طریق اشاره‌گری به کلاس پایه ناامن است. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wdeprecated\-copy\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-copy (C++ and Objective-C++ only)" در C++11 و بالاتر، هشدار می‌دهد که اعلان ضمنی سازنده رونوشت یا عملگر انتساب رونوشت در صورتی که کلاس دارای یک سازنده رونوشت یا عملگر انتساب رونوشت تعریف‌شده توسط کاربر باشد، منسوخ است. این هشدار توسط \fB\-Wextra\fR فعال می‌شود. همراه با \&\fB\-Wdeprecated\-copy\-dtor\fR، اگر کلاس دارای یک مخرب تعریف‌شده توسط کاربر باشد نیز منسوخ در نظر گرفته می‌شود. .IP "\fB\-Wno\-deprecated\-enum\-enum\-conversion\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-deprecated-enum-enum-conversion (C++ and Objective-C++ only)" هشدار مربوط به حالتی را که در آن تبدیلات حسابی معمول روی عملوندهایی اعمال می‌شود که یکی از نوع شمارشی و دیگری از نوع شمارشی متفاوتی است، غیرفعال می‌کند. این تبدیل در C++20 منسوخ شد. برای مثال: .Sp .Vb 3 \& enum E1 { e }; \& enum E2 { f }; \& int k = f \- e; .Ve .Sp \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR به‌طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است. در نسخه‌های پیش از C++20، این هشدار می‌تواند توسط \fB\-Wenum\-conversion\fR یا \fB\-Wdeprecated\fR فعال شود. .IP "\fB\-Wno\-deprecated\-enum\-float\-conversion\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)" هشدار مربوط به حالتی را که در آن تبدیلات حسابی معمول روی عملوندهایی اعمال می‌شود که یکی از نوع شمارشی و دیگری از نوع ممیز شناور است، غیرفعال می‌کند. این تبدیل در C++20 منسوخ شد. برای مثال: .Sp .Vb 3 \& enum E1 { e }; \& enum E2 { f }; \& bool b = e <= 3.7; .Ve .Sp \&\fB\-Wdeprecated\-enum\-float\-conversion\fR به‌طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است. در نسخه‌های پیش از C++20، این هشدار می‌تواند توسط \fB\-Wenum\-conversion\fR یا \fB\-Wdeprecated\fR فعال شود. .IP "\fB\-Wdeprecated\-literal\-operator\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-literal-operator (C++ and Objective-C++ only)" هشدار می‌دهد که اعلان یک عملگر لفظی تعریف‌شده توسط کاربر (user\-defined literal operator) با وجود فاصله پیش از پسوند، منسوخ است. این هشدار به‌طور پیش‌فرض در 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 استفاده شود، هشدار می‌دهد. به این معنا که اگر یک شمارش با نوع زیربنایی مشخص و بدون فهرست مقادیر شمارشی، در اعلانی غیر از یک اعلان مستقل از آن شمارش به کار رود. به‌طور پیش‌فرض فعال است. این هشدار با \-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 یک \f(CW\*(C`initializer_list\*(C'\fR ایجاد کند، آرایه فقط تا پایان عبارت کاملِ (full\-expression) دربرگیرنده زنده می‌ماند؛ بنابراین \&\f(CW\*(C`initializer_list\*(C'\fR موجود در حافظه هیپ (heap) دارای یک اشاره‌گر معلق خواهد بود. .IP * 4 هنگامی که به یک متغیر \f(CW\*(C`initializer_list\*(C'\fR از یک فهرست مقداردهی درون آکولد مقداردهی شود، آرایه موقت ایجادشده برای سمت راست انتساب تنها تا پایان عبارت کامل زنده می‌ماند؛ بنابراین در دستور بعدی، متغیر \f(CW\*(C`initializer_list\*(C'\fR دارای یک اشاره‌گر معلق است. .Sp .Vb 6 \& // li\*(Aqs initial underlying array lives as long as li \& std::initializer_list li = { 1,2,3 }; \& // assignment changes li to point to a temporary array \& li = { 4, 5 }; \& // now the temporary is gone and li has a dangling pointer \& int i = li.begin()[0] // undefined behavior .Ve .IP * 4 هنگامی که یک سازنده فهرست، اشاره‌گر \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 این هشدار به‌طور پیش‌فرض در C++20 و پیش از آن به عنوان یک هشدار دقیق (pedantic) فعال است. در C++23، گزینه \fB\-Winvalid\-constexpr\fR می‌تواند فعال شود که در این صورت یک هشدار معمولی خواهد بود. برای مثال: .Sp .Vb 7 \& void f (int& i); \& constexpr void \& g (int& i) \& { \& // Warns by default in C++20, in C++23 only with \-Winvalid\-constexpr. \& f(i); \& } .Ve .IP \fB\-Winvalid\-imported\-macros\fR 4 .IX Item "-Winvalid-imported-macros" معتبر بودن تعاریف همه ماکروهای واردشده (imported 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 به دلیل فراخوانی تابعی که فاقد مشخصات استثنای بدون پرتاب (یعنی \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 شیئی از نوع کلاس باشد، و نوشتن در چنین شیئی ممکن است سازنده یا انتساب کپی غیربدیهی (non-trivial) یا حذف‌شدهٔ کلاس را دور بزند، درستیِ ثابت (const-correctness) یا کپسوله‌سازی را نقض کند، یا اشاره‌گرهای جدول مجازی را تخریب نماید. تغییر بازنمایی چنین اشیایی ممکن است ناورداهایی را که توسط توابع عضو کلاس حفظ می‌شوند نقض کند. برای مثال، فراخوانی \f(CW\*(C`memset\*(C'\fR در زیر تعریف‌نشده است زیرا یک شیء کلاس غیربدیهی را تغییر می‌دهد و از این رو تشخیص داده می‌شود. راه ایمن برای مقداردهی اولیه یا پاک کردن حافظهٔ اشیاء با چنین انواعی، استفاده از سازنده یا عملگر انتساب مناسب در صورت وجود است. .Sp .Vb 2 \& std::string str = "abc"; \& memset (&str, 0, sizeof str); .Ve .Sp گزینهٔ \fB\-Wclass\-memaccess\fR توسط \fB\-Wall\fR فعال می‌شود. تبدیل صریح نوعِ (cast) اشاره‌گر شیء کلاس به \f(CW\*(C`void *\*(C'\fR یا به نوعی که بتواند به طور ایمن توسط تابع حافظهٔ خام دسترسی یابد، هشدار را سرکوب می‌کند. .IP "\fB\-Wnon\-virtual\-dtor\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wnon-virtual-dtor (C++ and Objective-C++ only)" هنگامی هشدار می‌دهد که یک کلاس دارای توابع مجازی بوده و خودش یا کلاس پایهٔ چندریختی در دسترسش دارای یک مخرب غیرمجازی در دسترس باشد؛ در این حالت حذف نمونه‌ای از کلاس مشتق‌شده از طریق اشاره‌گری به خود کلاس یا کلاس پایه امکان‌پذیر اما ناامن است. این هشدار در صورت تعیین \fB\-Weffc++\fR به طور خودکار فعال می‌شود. گزینهٔ \fB\-Wdelete\-non\-virtual\-dtor\fR (فعال‌شده با \fB\-Wall\fR) باید ترجیح داده شود زیرا در مورد موارد ناامن بدون هشدارهای کاذب (false positives) هشدار می‌دهد. .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 گنو باشد. استفاده از کلیدواژهٔ \f(CW\*(C`register\*(C'\fR به عنوان مشخص‌کنندهٔ ردهٔ ذخیره‌سازی در C++11 منسوخ و در C++17 حذف شد. به طور پیش‌فرض با \fB\-std=c++17\fR فعال است. .IP "\fB\-Wreorder\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wreorder (C++ and Objective-C++ only)" هنگامی هشدار می‌دهد که ترتیب مقداردهنده‌های اولیهٔ اعضا مشخص‌شده در کد با ترتیبی که باید اجرا شوند مطابقت نداشته باشد. برای نمونه: .Sp .Vb 5 \& struct A { \& int i; \& int j; \& A(): j (0), i (1) { } \& }; .Ve .Sp کامپایلر مقداردهنده‌های اولیهٔ اعضا را برای \f(CW\*(C`i\*(C'\fR و \f(CW\*(C`j\*(C'\fR بازآرایی می‌کند تا با ترتیب اعلان اعضا مطابقت پیدا کند، و هشداری با همین مضمون صادر می‌نماید. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-pessimizing\-move\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-pessimizing-move (C++ and Objective-C++ only)" این هشدار زمانی صادر می‌شود که یک فراخوانی \f(CW\*(C`std::move\*(C'\fR مانع از حذف کپی (copy elision) شود. سناریوی معمولی که در آن حذف کپی می‌تواند رخ دهد، هنگام بازگشت از تابعی با نوع بازگشتی کلاس است، زمانی که عبارت بازگردانده‌شده نام یک شیء خودکارِ غیرفرار (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 هشدار می‌دهد؛ یعنی زمانی که عملیات انتقال حتی بدون فراخوانی \f(CW\*(C`std::move\*(C'\fR نیز انجام می‌شد. این اتفاق به این دلیل می‌افتد که کامپایلر در موقعیت‌های خاصی مانند بازگرداندن یک متغیر محلی در جایی که حذف کپی قابل اعمال نیست، ناچار است با شیء به‌گونه‌ای رفتار کند که گویی یک rvalue است. در نظر بگیرید: .Sp .Vb 8 \& struct T { \& ... \& }; \& T fn(T t) \& { \& ... \& return std::move (t); \& } .Ve .Sp در اینجا فراخوانی \f(CW\*(C`std::move\*(C'\fR زائد است. از آنجا که G++ مورد Core Issue 1579 را پیاده‌سازی می‌کند، مثال دیگر به این صورت است: .Sp .Vb 12 \& struct T { // convertible to U \& ... \& }; \& struct U { \& ... \& }; \& U fn() \& { \& T t; \& ... \& return std::move (t); \& } .Ve .Sp در این مثال، حذف کپی قابل اعمال نیست زیرا نوع عبارت بازگردانده‌شده و نوع بازگشتی تابع متفاوت است، با این حال G++ با مقدار بازگشتی طوری رفتار می‌کند که گویی توسط یک rvalue مشخص شده است. .Sp این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wrange\-loop\-construct\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wrange-loop-construct (C++ and Objective-C++ only)" این هشدار زمانی صادر می‌شود که یک حلقهٔ for بر پایهٔ دامنه در C++ در حال ایجاد یک کپی غیرضروری باشد. این حالت می‌تواند زمانی رخ دهد که اعلان دامنه یک مرجع نباشد، در حالی که احتمالاً باید باشد. برای مثال: .Sp .Vb 5 \& struct S { char arr[128]; }; \& void fn () { \& S arr[5]; \& for (const auto x : arr) { ... } \& } .Ve .Sp زمانی که نوعِ در حال کپی شدن یک نوع با قابلیت کپی بدیهی (trivially-copyable) باشد که اندازهٔ آن کمتر از ۶۴ بایت است، هشدار داده نمی‌شود. .Sp این هشدار همچنین زمانی صادر می‌شود که یک متغیر حلقه در یک حلقهٔ for بر پایهٔ دامنه با مقداری از یک نوع متفاوت مقداردهی اولیه شود که به یک کپی منجر گردد. برای مثال: .Sp .Vb 4 \& void fn() { \& int arr[10]; \& for (const double &x : arr) { ... } \& } .Ve .Sp در مثال بالا، در هر تکرار حلقه یک مقدار موقت از نوع \f(CW\*(C`double\*(C'\fR ایجاد و نابود می‌شود که مرجع \&\f(CW\*(C`const double &\*(C'\fR به آن متصل شده است. .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wredundant\-tags\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wredundant-tags (C++ and Objective-C++ only)" دربارهٔ class\-key و enum\-key زائد در ارجاع‌ها به انواع کلاس و انواع شمارشی در زمینه‌هایی که می‌توان کلید را بدون ایجاد ابهام حذف کرد، هشدار می‌دهد. برای مثال: .Sp.Vb 2 \& struct foo; \& struct foo *p; // warn that keyword struct can be eliminated .Ve .Sp از سوی دیگر، در این مثال هیچ هشداری داده نمی‌شود: .Sp .Vb 3 \& struct foo; \& void foo (); // "hides" struct foo \& void bar (struct foo&); // no warning, keyword struct is necessary .Ve .IP "\fB\-Wno\-subobject\-linkage\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-subobject-linkage (C++ and Objective-C++ only)" هشدار ندهد اگر نوع یک کلاس دارای یک پایه (base) یا فیلدی باشد که نوع آن از فضای نام بی‌نام (anonymous namespace) استفاده می‌کند یا به نوعی بدون پیوند (no linkage) وابسته است. اگر یک نوع A به یک نوع B بدون پیوند یا با پیوند درونی (internal linkage) وابسته باشد، تعریف آن در چندین واحد ترجمه (translation unit) نقض ODR خواهد بود؛ چرا که معنای B در هر واحد ترجمه متفاوت است. اگر A تنها در یک واحد ترجمه ظاهر شود، بهترین روش برای فرونشاندن هشدار این است که با قرار دادن آن در یک فضای نام بی‌نام، به آن نیز پیوند درونی داده شود. کامپایلر این هشدار را برای انواعی که در فایل اصلی \f(CW.C\fR تعریف شده‌اند صادر نمی‌کند، زیرا بعید است که آن‌ها چندین تعریف داشته باشند. \&\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 برای کلاس‌هایی با حافظهٔ تخصیص‌یافته به صورت پویا، یک سازندهٔ رونوشت (copy constructor) و یک عملگر انتساب (assignment operator) تعریف کنید. .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++ است. با این حال، این بررسی گسترش یافته است تا در مورد نبودِ ویران‌کنندهٔ مجازی (virtual destructor) در کلاس‌های پایهٔ غیرچندریختی (non-polymorphic) قابل‌دسترس نیز هشدار دهد. .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\-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 تعریف شده است. اگرچه این یک ثابتِ اشاره‌گر تهی (null pointer constant) است نه یک اشاره‌گر تهی (null pointer)، تضمین می‌شود که اندازه‌ای برابر با یک اشاره‌گر داشته باشد. اما این استفاده در میان کامپایلرهای گوناگون قابل‌حمل (portable) نیست. .IP "\fB\-Wno\-non\-template\-friend\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-non-template-friend (C++ and Objective-C++ only)" هشدارهای مربوط به زمانی را که توابع دوستِ غیرقالب (non-template friend functions) در داخل یک قالب اعلان می‌شوند، غیرفعال می‌کند. در نسخه‌های بسیار قدیمی GCC که پیش از پیاده‌سازی استاندارد ISO بودند، اعلان‌هایی مانند \&\fBfriend int foo(int)\fR که در آن‌ها نام تابع دوست یک شناسهٔ بدون صلاحیت (unqualified-id) است، می‌توانست به عنوان یک تخصیص ویژه (specialization) از تابع قالب تفسیر شود؛ این هشدار برای تشخیص مشکلات سازگاری وجود دارد و به طور پیش‌فرض فعال است. .IP "\fB\-Wold\-style\-cast\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wold-style-cast (C++ and Objective-C++ only)" اگر تبدیل نوع به سبک قدیمی (سبک C) به یک نوع غیر void در یک برنامهٔ C++ استفاده شود، هشدار می‌دهد. تبدیل‌های نوع سبک جدید (\f(CW\*(C`dynamic_cast\*(C'\fR، \&\f(CW\*(C`static_cast\*(C'\fR، \f(CW\*(C`reinterpret_cast\*(C'\fR و \f(CW\*(C`const_cast\*(C'\fR) کمتر در معرض اثرات ناخواسته هستند و جستجوی آن‌ها بسیار آسان‌تر است. .IP "\fB\-Woverloaded\-virtual\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Woverloaded-virtual (C++ and Objective-C++ only)" .PD 0 .IP \fB\-Woverloaded\-virtual=\fR\fIn\fR 4 .IX Item "-Woverloaded-virtual=n" .PD زمانی که اعلان یک تابع، توابع مجازی کلاس پایه را پنهان می‌کند هشدار می‌دهد. به عنوان مثال، در: .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 فقط به شکل مجازی استفاده شود، کاربر ممکن است به این نتیجه رسیده باشد که معناشناسی کلاس پایه برای برخی از سربارگذاری‌ها مناسب است. .Sp در سطح ۱، برای این حالت هشداری داده نمی‌شود؛ در سطح ۲ هشدار می‌دهد. \&\fB\-Woverloaded\-virtual\fR به تنهایی سطح ۲ را انتخاب می‌کند. سطح ۱ در \fB\-Wall\fR گنجانده شده است. .IP "\fB\-Wno\-pmf\-conversions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-pmf-conversions (C++ and Objective-C++ only)" پیام تشخیصی برای تبدیل یک اشاره‌گر مقید به تابع عضو (bound pointer to member function) به یک اشاره‌گر ساده را غیرفعال می‌کند. .IP "\fB\-Wsign\-promo\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wsign-promo (C++ and Objective-C++ only)" زمانی هشدار می‌دهد که تفکیک سربارگذاری (overload resolution)، ترفیع از یک نوع بدون‌علامت یا شمارشی به یک نوع علامت‌دار را به تبدیل به یک نوع بدون‌علامت هم‌اندازه ترجیح دهد. نسخه‌های قبلی G++ تلاش می‌کردند بدون‌علامت بودن را حفظ کنند، اما استاندارد رفتار فعلی را الزامی کرده است. .IP "\fB\-Wtemplates\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wtemplates (C++ and Objective-C++ only)" هنگام مواجهه با اعلان یک قالب اولیه (primary template) هشدار می‌دهد. برخی از قوانین کدنویسی استفاده از قالب‌ها را منع می‌کنند و این گزینه می‌تواند برای اعمال این قانون استفاده شود. این هشدار در داخل فایل‌های سرآیند سیستمی مانند STL غیرفعال است، بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان قالب‌ها را نمونه‌سازی (instantiate) یا تخصیص ویژه (specialize) کرد. .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ها، و الگوهای کلاس و تخصیص‌های (specializations) آن‌ها با یک کلیدواژه کلاس (class\-key) که با تعریف، یا با نخستین اعلان در صورت عدم ارائه تعریف، مطابقت ندارد هشدار می‌دهد. .Sp برای نمونه، اعلان \f(CW\*(C`struct Object\*(C'\fR در فهرست آرگومان‌های \f(CW\*(C`draw\*(C'\fR این هشدار را فعال می‌کند. برای جلوگیری از آن، یا کلیدواژه کلاس زاید \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 همان‌طور که مثال بالا نشان می‌دهد، اعلان یک کلاس با کلیدواژه کلاس \f(CW\*(C`struct\*(C'\fR لزوماً اشتباه نیست. گزینه \fB\-Wmismatched\-tags\fR با این هدف در نظر گرفته شده که به دستیابی به شیوه‌ای یکدست در اعلان‌های کلاس کمک کند. در کدهایی که قرار است برای کامپایلرهای مبتنی بر Windows قابل حمل باشند، این هشدار به جلوگیری از ارجاع‌های حل‌نشده ناشی از تفاوت در درهم‌سازی نمادهای (symbol mangling) اعلان‌شده با کلیدواژه‌های کلاس مختلف کمک می‌کند. این گزینه می‌تواند به تنهایی یا همراه با \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 operator) غیربدیهی در C++11 را سرکوب می‌کند. این امر خطرناک است زیرا اگر کلاس پایه مجازی در امتداد بیش از یک مسیر قابل دسترسی باشد، چندین بار منتقل (move) می‌شود، که می‌تواند بدین معنا باشد که هر دو شیء در وضعیتِ «منتقل‌شده» (moved\-from) قرار می‌گیرند. اگر عملگر انتساب انتقال طوری نوشته شده باشد که از انتقال یک شیءِ منتقل‌شده جلوگیری کند، می‌توان این هشدار را غیرفعال کرد. .IP \fB\-Wnamespaces\fR 4 .IX Item "-Wnamespaces" هنگامی که تعریف یک فضای نام باز می‌شود هشدار می‌دهد. برخی قواعد کدنویسی فضاهای نام را مجاز نمی‌دانند، و این گزینه می‌تواند برای اعمال آن قاعده به کار رود. این هشدار درون فایل‌های سرآیند سیستمی مانند 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)" تشخیص خطاها هنگام تجزیه (parse) یک الگو را غیرفعال می‌کند و به جای آن، تنها هنگام نمونه‌سازی الگو خطا صادر می‌نماید. این پرچم همچنین می‌تواند برای تنزل دادن چنین خطاهایی به هشدار با \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 برای یک سازنده (constructor) یا مخرب (destructor) را که در 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" هنگامی که بدنه الگو، افشای یک موجودیت محلی واحد ترجمه (translation\-unit\-local entity) را پنهان می‌کند، هشدار می‌دهد. در بیشتر موارد، ارجاع به یک موجودیت محلی واحد ترجمه (مانند یک اعلان با پیوند درونی) در موجودیتی که به CMI یک ماژول فرستاده می‌شود یک خطا است. با این حال، درون مقداردهنده اولیه (initializer) یک متغیر، یا درون بدنه یک تابع غیر inline، این امر یک افشا محسوب نمی‌شود و خطایی صادر نمی‌گردد. .Sp این امر در صورتی که الگوهای متغیر یا تابع به چنین موجودیتی ارجاع دهند می‌تواند باعث شود به طور تصادفی غیرقابل استفاده شوند، چرا که سایر واحدهای ترجمه که الگو را وارد (import) می‌کنند هرگز قادر به نمونه‌سازی آن نخواهند بود. این هشدار تلاش می‌کند مواردی را که این وضعیت در آن‌ها ممکن است رخ دهد شناسایی کند. وجود یک نمونه‌سازی صریح (explicit instantiation) این هشدار را بی‌صدا می‌کند. .Sp این پرچم توسط \fB\-Wextra\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، و مقیدسازی‌های ساختاریافته از یک نوع مقید به \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" درباره یک new\-expression از نوعی که به ترازبندی بزرگ‌تری نسبت به \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 که از طریق ارجاع (reference) دریافت نمی‌کنند هشدار می‌دهد. با \fB\-Wcatch\-value=1\fR (یا به‌طور خلاصه \fB\-Wcatch\-value\fR) درباره نوع‌های کلاس چندریختی (polymorphic) که با مقدار (by value) دریافت می‌شوند هشدار می‌دهد. با \fB\-Wcatch\-value=2\fR درباره همه نوع‌های کلاس که با مقدار دریافت می‌شوند هشدار می‌دهد. با \fB\-Wcatch\-value=3\fR درباره همه نوع‌هایی که با ارجاع دریافت نمی‌شوند هشدار می‌دهد. \fB\-Wcatch\-value\fR توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wconditionally\-supported\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wconditionally-supported (C++ and Objective-C++ only)" درباره ساختارهای با پشتیبانی مشروط (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)" هنگام حذف کردن (delete) اشاره‌گری به نوع ناقص (incomplete type)، که ممکن است باعث رفتار تعریف‌نشده در زمان اجرا شود، هشدار نمی‌دهد. این هشدار به صورت پیش‌فرض فعال است. .IP "\fB\-Wextra\-semi\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wextra-semi (C++, Objective-C++ only)" درباره نقطه‌ویرگول‌های (semicolon) اضافه و زائد هشدار می‌دهد. زمینه‌های گوناگونی وجود دارد که یک نقطه‌ویرگول اضافی می‌تواند در آن‌ها رخ دهد. یکی نقطه‌ویرگول پس از تعاریف توابع درون‌کلاسی است که در تمام گویش‌های C++ معتبر است (و هرگز یک pedwarn به شمار نمی‌رود): .Sp .Vb 3 \& struct S { \& void foo () {}; \& }; .Ve .Sp مورد دیگر نقطه‌ویرگول اضافی در حوزه فضای نام (namespace scope) است که از C++11 مجاز دانسته شده (بنابراین در C++98 یک pedwarn است): .Sp .Vb 3 \& struct S { \& }; \& ; .Ve .Sp و مورد دیگر نیز نقطه‌ویرگول اضافی در تعاریف کلاس است که از C++11 مجاز دانسته شده (بنابراین در C++98 یک pedwarn است): .Sp .Vb 4 \& struct S { \& int a; \& ; \& }; .Ve .IP "\fB\-Wno\-global\-module\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-global-module (C++ and Objective-C++ only)" هشدار مربوط به زمانی که قطعه ماژول سراسری (global module fragment) یک واحد ماژول صرفاً از دستورالعمل‌های پیش‌پردازنده تشکیل نشده باشد را غیرفعال می‌کند. .IP "\fB\-Wno\-inaccessible\-base\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-inaccessible-base (C++, Objective-C++ only)" این گزینه هشدارهای مربوط به زمانی را کنترل می‌کند که یک کلاس پایه به دلیل ابهام، در کلاسی که از آن مشتق شده غیرقابل دسترس باشد. این هشدار به صورت پیش‌فرض فعال است. توجه داشته باشید که هشدار مربوط به پایه‌های مجازی مبهم با گزینه \fB\-Wextra\fR فعال می‌شود. .Sp .Vb 1 \& struct A { int a; }; \& \& struct B : A { }; \& \& struct C : B, A { }; .Ve .IP \fB\-Wno\-inherited\-variadic\-ctor\fR 4 .IX Item "-Wno-inherited-variadic-ctor" هشدارهای مربوط به استفاده از سازنده‌های به ارث‌برده‌شده C++11 را در مواردی که کلاس پایه دارای یک سازنده متغیر C (variadic constructor) باشد، نادیده می‌گیرد؛ این هشدار به صورت پیش‌فرض فعال است زیرا بیضی سه‌نقطه (...) به ارث برده نمی‌شود. .IP "\fB\-Wno\-invalid\-offsetof\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-invalid-offsetof (C++ and Objective-C++ only)" هشدارهای ناشی از اعمال ماکروی \f(CW\*(C`offsetof\*(C'\fR بر روی نوع‌های غیر POD (non\-POD) را نادیده می‌گیرد. مطابق با استاندارد ۲۰۱۴ ISO C++، اعمال \f(CW\*(C`offsetof\*(C'\fR روی نوعی که دارای چیدمان غیراستاندارد است (non\-standard\-layout) تعریف‌نشده است. با این حال، در پیاده‌سازی‌های موجود C++، معمولاً \f(CW\*(C`offsetof\*(C'\fR نتایج معناداری ارائه می‌دهد. این پرچم برای کاربرانی است که آگاهند کدی غیرقابل‌حمل (nonportable) می‌نویسند و عمداً تصمیم گرفته‌اند هشدار مربوط به آن را نادیده بگیرند. .Sp محدودیت‌های روی \f(CW\*(C`offsetof\*(C'\fR ممکن است در نسخه آینده استاندارد C++ کاهش یابد. .IP "\fB\-Wsized\-deallocation\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wsized-deallocation (C++ and Objective-C++ only)" درباره تعریف یک تابع آزادسازی حافظه بدون اندازه (unsized deallocation) .Sp .Vb 2 \& void operator delete (void *) noexcept; \& void operator delete[] (void *) noexcept; .Ve .Sp بدون تعریف تابع آزادسازی اندازه مشخص (sized deallocation) متناظر .Sp .Vb 2 \& void operator delete (void *, std::size_t) noexcept; \& void operator delete[] (void *, std::size_t) noexcept; .Ve .Sp یا برعکس هشدار می‌دهد. به همراه \fB\-fsized\-deallocation\fR توسط \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wsuggest\-final\-types\fR 4 .IX Item "-Wsuggest-final-types" درباره نوع‌هایی با متدهای مجازی که در صورت اعلان نوع با مشخص‌کننده \f(CW\*(C`final\*(C'\fR در C++11 یا در صورت امکان اعلان در یک فضای نام ناشناس (anonymous namespace)، کیفیت کد بهبود می‌یابد هشدار می‌دهد. این به GCC اجازه می‌دهد فراخوانی‌های چندریختی را با تهاجم بیشتری مجازی‌زدایی (devirtualize) کند. این هشدار با بهینه‌سازی زمان پیوند (link\-time optimization)، که در آن اطلاعات مربوط به گراف سلسله‌مراتب کلاس‌ها کامل‌تر است، مؤثرتر خواهد بود. .IP \fB\-Wsuggest\-final\-methods\fR 4 .IX Item "-Wsuggest-final-methods" درباره متدهای مجازی که در صورت اعلان متد با مشخص‌کننده \f(CW\*(C`final\*(C'\fR در C++11، یا در صورت امکان، اعلان نوع آن در یک فضای نام ناشناس یا با مشخص‌کننده \f(CW\*(C`final\*(C'\fR، کیفیت کد بهبود می‌یابد هشدار می‌دهد. این هشدار با بهینه‌سازی زمان پیوند (link\-time optimization)، که در آن اطلاعات مربوط به گراف سلسله‌مراتب کلاس‌ها کامل‌تر است، مؤثرتر عمل می‌کند. توصیه می‌شود ابتدا پیشنهادات \fB\-Wsuggest\-final\-types\fR را بررسی کنید و سپس با نشانه‌گذاری‌های جدید دوباره کامپایل نمایید. .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++" .IX Subsection "Options Controlling Objective-C and Objective-C++ Dialects" (یادداشت: این راهنما خود زبان‌های Objective\-C و Objective\-C++ را توصیف نمی‌کند.) .PP این بخش گزینه‌های خط فرمانی را شرح می‌دهد که تنها برای برنامه‌های Objective\-C و Objective\-C++ معنادار هستند. شما همچنین می‌توانید از اغلب گزینه‌های مستقل از زبان کامپایلر GNU نیز استفاده کنید. برای نمونه، ممکن است فایلی مانند \fIsome_class.m\fR را این‌گونه کامپایل کنید: .PP .Vb 1 \& gcc \-g \-fgnu\-runtime \-O \-c some_class.m .Ve .PP در این مثال، \fB\-fgnu\-runtime\fR گزینه‌ای است که تنها برای برنامه‌های Objective\-C و Objective\-C++ کاربرد دارد؛ سایر گزینه‌ها را می‌توانید با هر زبان پشتیبانی‌شده توسط GCC به کار ببرید. .PP توجه داشته باشید که از آنجا که Objective\-C گسترشی از زبان C است، کامپایل‌های Objective\-C ممکن است از گزینه‌های مختص فرانت‌اند C نیز استفاده کنند (برای نمونه، \&\fB\-Wtraditional\fR). به طور مشابه، کامپایل‌های Objective\-C++ می‌توانند از گزینه‌های مختص C++ (مانند \fB\-Wabi\fR) بهره ببرند. .PP در اینجا فهرستی از گزینه‌هایی آمده است که \fIتنها\fR برای کامپایل برنامه‌های Objective\-C و Objective\-C++ به کار می‌روند: .IP \fB\-fconstant\-string\-class=\fR\fIclass\-name\fR 4 .IX Item "-fconstant-string-class=class-name" از \fIclass\-name\fR به عنوان نام کلاسی که باید برای هر رشته‌ی دقیق (لیترال) مشخص‌شده با نحو \f(CW\*(C`@"..."\*(C'\fR نمونه‌سازی شود، استفاده می‌کند. در صورت استفاده از زمان‌اجرای GNU، نام کلاس پیش‌فرض \f(CW\*(C`NXConstantString\*(C'\fR و در صورت استفاده از زمان‌اجرای NeXT برابر \f(CW\*(C`NSConstantString\*(C'\fR خواهد بود (پایین را ببینید). در سکوهای Darwin / macOS، در صورتی که گزینه \fB\-fconstant\-cfstrings\fR نیز ارائه شده باشد، اولویتی بالاتر از تنظیمات \fB\-fconstant\-string\-class\fR پیدا کرده و باعث می‌شود لیترال‌های \f(CW\*(C`@"..."\*(C'\fR به عنوان رشته‌های ثابت CoreFoundation پیاده‌سازی شوند. توجه داشته باشید که \fB\-fconstant\-cfstrings\fR نام مستعاری برای معادل وابسته به هدف \fB\-mconstant\-cfstrings\fR است. .IP \fB\-fgnu\-runtime\fR 4 .IX Item "-fgnu-runtime" تولید کد شیء (object code) سازگار با زمان‌اجرای استاندارد Objective\-C متعلق به GNU. این مقدار پیش‌فرض برای بیشتر انواع سیستم‌ها است. .IP \fB\-fnext\-runtime\fR 4 .IX Item "-fnext-runtime" تولید خروجی سازگار با زمان‌اجرای NeXT. این مقدار پیش‌فرض برای سیستم‌های مبتنی بر NeXT، از جمله Darwin / macOS است. ماکروی \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR تنها و تنها در صورتی از پیش تعریف می‌شود که از این گزینه استفاده شود. .IP \fB\-fno\-nil\-receivers\fR 4 .IX Item "-fno-nil-receivers" فرض می‌کند که تمام ارسال‌های پیام Objective\-C (\f(CW\*(C`[receiver message:arg]\*(C'\fR) در این واحد ترجمه تضمین می‌کنند که گیرنده (receiver) \f(CW\*(C`nil\*(C'\fR نیست. این کار امکان استفاده از نقاط ورودی کارآمدتر را در زمان‌اجرا فراهم می‌آورد. این گزینه تنها همراه با زمان‌اجرای NeXT و نسخه ۰ یا ۱ از ABI در دسترس است. .IP \fB\-fobjc\-abi\-version=\fR\fIn\fR 4 .IX Item "-fobjc-abi-version=n" استفاده از نسخه \fIn\fR از ABI مربوط به Objective\-C برای زمان‌اجرای انتخاب‌شده. این گزینه در حال حاضر تنها برای زمان‌اجرای NeXT پشتیبانی می‌شود. در آن حالت، نسخه ۰ همان ABI سنتی (۳۲ بیتی) بدون پشتیبانی از ویژگی‌ها (properties) و دیگر امکانات اضافه‌شده در Objective\-C 2.0 است. نسخه ۱ همان ABI سنتی (۳۲ بیتی) به همراه پشتیبانی از ویژگی‌ها و دیگر امکانات اضافه‌شده در Objective\-C 2.0 است. نسخه ۲ همان ABI مدرن (۶۴ بیتی) است. در صورت مشخص نشدن، پیش‌فرض روی ماشین‌های هدف ۳۲ بیتی نسخه ۰، و روی ماشین‌های هدف ۶۴ بیتی نسخه ۲ است. .IP \fB\-fobjc\-call\-cxx\-cdtors\fR 4 .IX Item "-fobjc-call-cxx-cdtors" برای هر کلاس Objective\-C، بررسی می‌کند که آیا متغیرهای نمونه آن شیئی از C++ با سازنده پیش‌فرض غیربدیهی (non\-trivial) هستند یا خیر. در این صورت، یک متد نمونه ویژه به نام \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR می‌سازد که سازنده‌های پیش‌فرض غیربدیهی را روی هر یک از این متغیرهای نمونه به ترتیب اجرا کرده و سپس \f(CW\*(C`self\*(C'\fR را برمی‌گرداند. به طور مشابه، بررسی می‌کند که آیا متغیر نمونه‌ای شیء C++ با ویرانگر غیربدیهی هست یا خیر، و در این صورت متد ویژه \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR را می‌سازد که همه این ویرانگرهای پیش‌فرض را به ترتیب معکوس اجرا می‌کند. .Sp متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR که بدین ترتیب تولید شده‌اند، تنها روی متغیرهای نمونه‌ای عمل می‌کنند که در کلاس جاری Objective\-C اعلان شده‌اند و نه متغیرهای به ارث رسیده از ابرکلاس‌ها. این مسئولیت زمان‌اجرای Objective\-C است که تمام این متدها را در سلسله‌مراتب وراثت شیء فراخوانی کند. متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR بلافاصله پس از تخصیص نمونه شیء جدید توسط زمان‌اجرا فراخوانی می‌شوند؛ متدهای \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR بلافاصله پیش از آنکه زمان‌اجرا نمونه شیء را آزاد کند فراخوانی می‌شوند. .Sp تا زمان نگارش این مستندات، تنها زمان‌اجرای NeXT در Mac OS X 10.4 و جدیدتر از فراخوانی متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR پشتیبانی می‌کند. .IP \fB\-fobjc\-direct\-dispatch\fR 4 .IX Item "-fobjc-direct-dispatch" اجازه پرش‌های سریع به توزیع‌کننده پیام (message dispatcher) را می‌دهد. در Darwin این کار از طریق comm page انجام می‌شود. .IP \fB\-fobjc\-exceptions\fR 4 .IX Item "-fobjc-exceptions" پشتیبانی نحوی را برای رسیدگی به استثناهای ساختاریافته در Objective\-C، مشابه آنچه در C++ ارائه می‌شود، فعال می‌کند. این گزینه برای استفاده از کلیدواژه‌های Objective\-C شامل \f(CW@try\fR، \&\f(CW@throw\fR، \f(CW@catch\fR، \f(CW@finally\fR و \&\f(CW@synchronized\fR الزامی است. این گزینه با هر دو زمان‌اجرای GNU و زمان‌اجرای NeXT در دسترس است (اما همراه با زمان‌اجرای NeXT روی Mac OS X 10.2 و قبل‌تر در دسترس نیست). .IP \fB\-fobjc\-gc\fR 4 .IX Item "-fobjc-gc" جمع‌آوری زباله (GC) را در برنامه‌های Objective\-C و Objective\-C++ فعال می‌کند. این گزینه تنها با زمان‌اجرای NeXT در دسترس است؛ زمان‌اجرای GNU پیاده‌سازی جمع‌آوری زباله متفاوتی دارد که به پرچم‌های خاص کامپایلر نیاز ندارد. .IP \fB\-fobjc\-nilcheck\fR 4 .IX Item "-fobjc-nilcheck" برای زمان‌اجرای NeXT با نسخه ۲ از ABI، قبل از انجام فراخوانی واقعی متد، گیرنده را برای مقادیر nil در فراخوانی‌های متد بررسی می‌کند. این مقدار پیش‌فرض است و می‌توان آن را با استفاده از \&\fB\-fno\-objc\-nilcheck\fR غیرفعال کرد. متدهای کلاس و فراخوانی‌های super، صرف نظر از نحوه تنظیم این پرچم، هرگز برای nil به این صورت بررسی نمی‌شوند. در حال حاضر، هنگامی که از زمان‌اجرای GNU یا نسخه‌ای قدیمی‌تر از ABI زمان‌اجرای NeXT استفاده می‌شود، این پرچم هیچ کاری انجام نمی‌دهد. .IP \fB\-fobjc\-std=objc1\fR 4 .IX Item "-fobjc-std=objc1" مطابقت با نحو زبان Objective\-C 1.0، زبانی که توسط GCC 4.0 شناخته می‌شود. این مورد تنها بر موارد افزوده‌شده Objective\-C به زبان C/C++ تأثیر می‌گذارد؛ و تأثیری بر انطباق با استانداردهای C/C++، که توسط پرچم‌های گزینه‌های مجزای گویش C/C++ کنترل می‌شوند، ندارد. هنگامی که از این گزینه با کامپایلر Objective\-C یا Objective\-C++ استفاده می‌شود، هر نحو Objective\-C که برای GCC 4.0 ناشناخته باشد رد خواهد شد. این گزینه برای اطمینان از اینکه کد Objective\-C شما با نسخه‌های قدیمی‌تر GCC قابل کامپایل است مفید خواهد بود. .IP \fB\-freplace\-objc\-classes\fR 4 .IX Item "-freplace-objc-classes" یک نشانگر ویژه درج می‌کند که به \fBld\|(1)\fR دستور می‌دهد فایل شیء حاصل را به طور ایستا پیوند نزند و در عوض به \fBdyld\|(1)\fR اجازه دهد تا آن را در زمان اجرا بارگذاری کند. این مورد همراه با حالت اشکال‌زدایی Fix\-and\-Continue به کار می‌رود، که در آن ممکن است فایل شیء مورد نظر در حین اجرای برنامه بدون نیاز به راه‌اندازی مجدد برنامه، دوباره کامپایل شده و به صورت پویا بارگذاری مجدد شود. در حال حاضر، قابلیت Fix\-and\-Continue تنها همراه با زمان‌اجرای NeXT در Mac OS X 10.3 و جدیدتر در دسترس است. .IP \fB\-fzero\-link\fR 4 .IX Item "-fzero-link" هنگام کامپایل برای زمان‌اجرای NeXT، کامپایلر معمولاً فراخوانی‌های \f(CWobjc_getClass("...")\fR را (در صورتی که نام کلاس در هنگام کامپایل مشخص باشد) با ارجاعات ایستای کلاس که در زمان بارگذاری مقداردهی اولیه می‌شوند جایگزین می‌کند، که کارایی زمان اجرا را بهبود می‌بخشد. مشخص کردن پرچم \fB\-fzero\-link\fR این رفتار را لغو کرده و سبب نگه‌داری فراخوانی‌های \f(CWobjc_getClass("...")\fR می‌شود. این در حالت اشکال‌زدایی Zero\-Link مفید است، زیرا امکان تغییر پیاده‌سازی‌های کلاس‌های مجزا را در طول اجرای برنامه فراهم می‌آورد. زمان‌اجرای GNU در حال حاضر بدون توجه به گزینه‌های خط فرمان، همواره فراخوانی‌های \f(CWobjc_get_class("...")\fR را حفظ می‌کند. .IP \fB\-fno\-local\-ivars\fR 4 .IX Item "-fno-local-ivars" به طور پیش‌فرض، به متغیرهای نمونه در Objective\-C می‌توان طوری دسترسی داشت که گویی متغیرهای محلی از درون متدهای کلاسی هستند که در آن اعلان شده‌اند. این امر می‌تواند منجر به سایه‌اندازی (shadowing) میان متغیرهای نمونه و سایر متغیرهایی شود که به صورت محلی در متد کلاس یا به طور سراسری با همان نام اعلان شده‌اند. مشخص کردن پرچم \fB\-fno\-local\-ivars\fR این رفتار را غیرفعال کرده و بنابراین از مشکلات سایه‌اندازی متغیرها جلوگیری می‌کند. .IP \fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] 4 .IX Item "-fivar-visibility=[public|protected|private|package]" میزان دید (visibility) پیش‌فرض متغیرهای نمونه را روی گزینه مشخص‌شده تنظیم می‌کند تا متغیرهای نمونه‌ای که بیرون از محدوده دستورالعمل‌های تعیین‌کننده دسترسی اعلان شده‌اند، به طور پیش‌فرض دارای دید مشخص‌شده باشند. .IP \fB\-gen\-decls\fR 4 .IX Item "-gen-decls" اعلان‌های رابط (interface) را برای تمام کلاس‌های دیده‌شده در فایل مبدأ، در فایلی با نام \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)" اگر رابط یک کلاس (class interface) فاقد ابرکلاس (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 (Options Controlling OpenMP and OpenACC)" .IX Subsection "Options Controlling OpenMP and 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 targets) در OpenMP و OpenACC باید تولید شود. رفتار پیش‌فرض، معادل با \fB\-foffload=default\fR، تولید کد برای تمامی مقصدهای برون‌سپاری پشتیبانی‌شده است. حالت \fB\-foffload=disable\fR کد را تنها برای میزبان جایگزین (host fallback) تولید می‌کند، در حالی که \&\fB\-foffload=\fR\fItarget\-list\fR کد را تنها برای فهرست مشخص‌شده‌ای از مقصدهای برون‌سپاری که با کاما از هم جدا شده‌اند، تولید می‌نماید. .Sp مقصدهای برون‌سپاری در قالب سه‌تایی مقصد (target-triplet) داخلی GCC مشخص می‌شوند. می‌توانید کامپایلر را با \fB\-v\fR اجرا کنید تا فهرست مقصدهای برون‌سپاری پیکربندی‌شده در زیر \f(CW\*(C`OFFLOAD_TARGET_NAMES\*(C'\fR نمایش داده شود. .IP \fB\-foffload\-options=\fR\fIoptions\fR 4 .IX Item "-foffload-options=options" .PD 0 .IP \fB\-foffload\-options=\fR\fItarget\-triplet\-list\fR\fB=\fR\fIoptions\fR 4 .IX Item "-foffload-options=target-triplet-list=options" .PD با گزینه \fB\-foffload\-options=\fR\fIoptions\fR، کامپایلر GCC گزینه‌های (\fIoptions\fR) مشخص‌شده را به کامپایلرها برای تمامی مقصدهای برون‌سپاریِ فعال ارسال می‌کند. می‌توانید با استفاده از ساختار \fB\-foffload\-options=\fR\fItarget\-list\fR\fB=\fR\fIoptions\fR گزینه‌هایی را تعیین کنید که تنها بر روی یک یا چند مقصد مشخص اعمال شوند. \&\fItarget\-list\fR فهرستی از مقادیر جداشده با کاما در همان قالب گزینه \&\fB\-foffload=\fR است. .Sp خطوط فرمان نمونه عبارتند از: .Sp .Vb 3 \& \-foffload\-options=\*(Aq\-fno\-math\-errno \-ffinite\-math\-only\*(Aq \e \& \-foffload\-options=nvptx\-none=\-latomic \& \-foffload\-options=amdgcn\-amdhsa=\-march=gfx906 .Ve .IP \fB\-fopenacc\fR 4 .IX Item "-fopenacc" پردازش دستورالعمل‌های 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" ابعاد محاسباتی پیش‌فرض را برای نواحی موازی برون‌سپاری که صراحتاً آن‌ها را تعیین نکرده‌اند، مشخص می‌کند. مقدار \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::directive(...)]]\fR، \fB[[omp::decl(...)]]\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 مستقل از بند \f(CW\*(C`bind\*(C'\fR مشخص‌شده، به ناحیه وظیفه جاری مقید (bind) می‌شود. .IP \fB\-fopenmp\-target\-simd\-clone\fR 4 .IX Item "-fopenmp-target-simd-clone" .PD 0 .IP \fB\-fopenmp\-target\-simd\-clone=\fR\fIdevice\-type\fR 4 .IX Item "-fopenmp-target-simd-clone=device-type" .PD علاوه بر تولید همزادهای (clones) SIMD برای توابعی که با دستورالعمل \&\f(CW\*(C`declare simd\*(C'\fR نشانه‌گذاری شده‌اند، هنگام فعال بودن این گزینه، GCC همچنین برای توابعی که با دستورالعمل OpenMP به نام \f(CW\*(C`declare target\*(C'\fR نشانه‌گذاری شده و برای برداری‌سازی (vectorization) مناسب هستند همزاد تولید می‌کند. مقدار \&\fIdevice\-type\fR می‌تواند یکی از مقادیر \f(CW\*(C`none\*(C'\fR، \f(CW\*(C`host\*(C'\fR، \f(CW\*(C`nohost\*(C'\fR و \f(CW\*(C`any\*(C'\fR باشد که با کلیدواژه‌های بند \f(CW\*(C`device_type\*(C'\fR در دستورالعمل \f(CW\*(C`declare target\*(C'\fR مطابقت دارند؛ همزادها برای اشتراک دستگاه‌های مشخص‌شده ایجاد می‌شوند. گزینه \&\fB\-fopenmp\-target\-simd\-clone\fR معادل با \&\fB\-fopenmp\-target\-simd\-clone=any\fR و گزینه \&\fB\-fno\-openmp\-target\-simd\-clone\fR معادل با \&\fB\-fopenmp\-target\-simd\-clone=none\fR است. .Sp در سطح بهینه‌سازی \fB\-O2\fR و بالاتر (به جز \fB\-Os\fR یا \fB\-Og\fR)، این بهینه‌سازی به طور پیش‌فرض روی \fB\-fopenmp\-target\-simd\-clone=nohost\fR تنظیم می‌شود؛ در غیر این صورت به طور پیش‌فرض غیرفعال است..SS "گزینه‌های کنترل قالب‌بندی پیام‌های عیب‌یابی (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 صفر باشد، هیچ شکست خطی (line\-wrapping) انجام نمی‌شود؛ هر پیام خطا در یک خط واحد ظاهر خواهد شد. این حالت پیش‌فرض برای تمام پیشخوان‌ها است. .Sp نکته \- این گزینه بر نمایش دستورهای پیش‌پردازندهٔ \fB#error\fR و \&\fB#warning\fR، و ویژگی (attribute) تابع/نوع/متغیر \fBdeprecated\fR نیز تأثیر می‌گذارد. با این وجود، بر پراگماهای \&\fBpragma GCC warning\fR و \fBpragma GCC error\fR اثری ندارد. .IP \fB\-fdiagnostics\-plain\-output\fR 4 .IX Item "-fdiagnostics-plain-output" این گزینه درخواست می‌کند که خروجی عیب‌یابی تا حد ممکن ساده و بدون تزئین باشد، که ممکن است هنگام اجرای \fBdejagnu\fR یا ابزارهای دیگری که نیاز به تجزیهٔ خروجی عیب‌یابی دارند و ترجیح می‌دهند این خروجی در طول زمان پایدارتر بماند، مفید باشد. گزینهٔ \&\fB\-fdiagnostics\-plain\-output\fR در حال حاضر معادل گزینه‌های زیر است: \&\fB\-fno\-diagnostics\-show\-caret \&\-fno\-diagnostics\-show\-line\-numbers \&\-fdiagnostics\-color=never \&\-fdiagnostics\-urls=never \&\-fdiagnostics\-path\-format=separate\-events \&\-fdiagnostics\-text\-art\-charset=none \&\-fno\-diagnostics\-show\-event\-links\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" تنها در حالت شکستن خط (line\-wrapping) معنادار است. به گزارشگر پیام‌های عیب‌یابی دستور می‌دهد که همان اطلاعات مکان در کد مبدأ را (به‌عنوان پیشوند) برای خطوط فیزیکی حاصل از شکستن پیامی که برای قرار گرفتن در یک خط واحد بیش از حد طولانی است، درج نماید. .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 تنها زمانی از رنگ استفاده کند که خروجی خطای استاندارد یک پایانه باشد و در یک پوستهٔ emacs اجرا نشود. شکل‌های \fB\-fdiagnostics\-color\fR و \fB\-fno\-diagnostics\-color\fR به‌ترتیب نام‌های مستعاری برای \fB\-fdiagnostics\-color=always\fR و \&\fB\-fdiagnostics\-color=never\fR هستند. .Sp رنگ‌ها توسط متغیر محیطی \fBGCC_COLORS\fR تعریف می‌شوند. مقدار آن فهرستی از قابلیت‌ها و زیررشته‌های بازنمایی گرافیکی برگزیده (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 برای برجسته‌سازی عناصر نامعتبر در نمودارهای هنر متنی (text art). .ie n .IP """highlight\-a=""" 4 .el .IP \f(CWhighlight\-a=\fR 4 .IX Item "highlight-a=".PD 0 .ie n .IP """highlight\-b=""" 4 .el .IP \f(CWhighlight\-b=\fR 4 .IX Item "highlight-b=" .PD زیررشته‌های SGR برای ایجاد تمایز بین دو مورد مختلف درون پیام‌های عیب‌یابی، مانند یک جفت نوع ناسازگار. گزینهٔ \fB\-fdiagnostics\-show\-highlight\-colors\fR را ببینید. .RE .RS 4 .RE .IP \fB\-fdiagnostics\-urls[=\fR\fIWHEN\fR\fB]\fR 4 .IX Item "-fdiagnostics-urls[=WHEN]" استفاده از دنباله‌های گریز برای جاسازی URLها در پیام‌های عیب‌یابی. برای نمونه، هنگامی که \&\fB\-fdiagnostics\-show\-option\fR متنی را منتشر می‌کند که گزینهٔ خط فرمان کنترل‌کنندهٔ یک عیب‌یابی را نشان می‌دهد، یک URL برای مستندات آن گزینه جاسازی می‌شود. .Sp مقدار \&\fIWHEN\fR می‌تواند \fBnever\fR، \fBalways\fR یا \fBauto\fR باشد. حالت \&\fBauto\fR باعث می‌شود GCC تنها زمانی از دنباله‌های گریز URL استفاده کند که خطای استاندارد یک پایانه باشد، و در یک شل emacs یا هر پایانهٔ گرافیکی دیگری که ناسازگاری آن با این قابلیت شناخته شده است اجرا نشود، به پایین مراجعه کنید. .Sp مقدار پیش‌فرض به نحوهٔ پیکربندی کامپایلر بستگی دارد. این مقدار می‌تواند هر یک از گزینه‌های \fIWHEN\fR بالا باشد. .Sp کامپایلر GCC همچنین می‌تواند (از طریق گزینهٔ زمان پیکربندی \&\fB\-\-with\-diagnostics\-urls=auto\-if\-env\fR) به‌گونه‌ای پیکربندی شود که مقدار پیش‌فرض تحت تأثیر متغیرهای محیط قرار گیرد. تحت چنین پیکربندی، اگر هر یک از متغیرهای محیط \fBGCC_URLS\fR یا \fBTERM_URLS\fR در محیط کامپایلر موجود و غیرخالی باشند، GCC به‌طور پیش‌فرض از \fBauto\fR استفاده می‌کند، یا اگر هیچ‌کدام نباشند از \fBnever\fR استفاده می‌کند. .Sp با این حال، حتی با \fB\-fdiagnostics\-urls=always\fR نیز رفتار برنامه وابسته به این متغیرهای محیط است: اگر \fBGCC_URLS\fR روی مقدار خالی یا \fBno\fR تنظیم شده باشد، URLها در پیام‌های عیب‌یابی جاسازی نمی‌شوند. اگر روی \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، و 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\-parseable\-fixits\fR 4 .IX Item "-fdiagnostics-parseable-fixits" راهنمایی‌های تصحیح (fix\-it hints) را در قالبی قابل تجزیه توسط ماشین، مناسب برای پردازش توسط IDEها منتشر می‌کند. برای هر اصلاح، خطی پس از پیام عیب‌یابی مربوطه چاپ می‌شود که با رشتهٔ "fix\-it:" آغاز می‌شود. برای مثال: .Sp .Vb 1 \& fix\-it:"test.c":{45:3\-45:21}:"gtk_widget_show_all" .Ve .Sp مکان به صورت یک بازهٔ نیمه‌باز، بیان‌شده بر حسب تعداد بایت‌ها مشخص می‌شود که از بایت ۱ برای ستون ابتدایی آغاز می‌گردد. در مثال بالا، بایت‌های ۳ تا ۲۰ از خط ۴۵ فایل "test.c" باید با رشتهٔ مشخص‌شده جایگزین شوند: .Sp .Vb 5 \& 00000000011111111112222222222 \& 12345678901234567890123456789 \& gtk_widget_showall (dlg); \& ^^^^^^^^^^^^^^^^^^ \& gtk_widget_show_all .Ve .Sp در نام فایل و رشتهٔ جایگزین، بک‌اسلش به صورت "\e\e"، تب به صورت "\et"، خط جدید به صورت "\en"، نقل‌قول دوگانه به صورت "\e""، و نویسه‌های غیرقابل چاپ به صورت مبنای هشت (مانند تب عمودی به صورت "\e013") با دنبالهٔ گریز مشخص می‌شوند. .Sp یک رشتهٔ جایگزین خالی نشان‌دهندهٔ آن است که بازهٔ داده‌شده باید حذف شود. یک بازهٔ خالی (برای مثال "45:3\-45:3") نشان‌دهندهٔ آن است که رشته باید در موقعیت داده‌شده درج گردد..IP \fB\-fdiagnostics\-generate\-patch\fR 4 .IX Item "-fdiagnostics-generate-patch" چاپ راهنمایی‌های اصلاحی (fix\-it hints) در stderr در قالب unified diff، پس از چاپ هرگونه پیام عیب‌یابی. برای نمونه: .Sp .Vb 3 \& \-\-\- test.c \& +++ test.c \& @ \-42,5 +42,5 @ \& \& void show_cb(GtkDialog *dlg) \& { \& \- gtk_widget_showall(dlg); \& + gtk_widget_show_all(dlg); \& } .Ve .Sp تفاوت (diff) ممکن است رنگی باشد یا نباشد، که از همان قوانین مربوط به پیام‌های عیب‌یابی پیروی می‌کند (ببینید \fB\-fdiagnostics\-color\fR). .IP \fB\-fdiagnostics\-show\-template\-tree\fR 4 .IX Item "-fdiagnostics-show-template-tree" در فرانت‌اند C++، هنگام چاپ پیام‌های عیب‌یابی که نشان‌دهندهٔ عدم تطابق انواع قالب (template types) هستند، مانند: .Sp .Vb 2 \& could not convert \*(Aqstd::map >()\*(Aq \& from \*(Aqmap<[...],vector>\*(Aq to \*(Aqmap<[...],vector> .Ve .Sp پرچم \fB\-fdiagnostics\-show\-template\-tree\fR چاپ یک ساختار درخت‌مانند را فعال می‌کند که بخش‌های مشترک و متفاوت انواع را نشان می‌دهد، مانند: .Sp .Vb 4 \& map< \& [...], \& vector< \& [double != float]>> .Ve .Sp بخش‌هایی که متفاوت هستند با رنگ برجسته می‌شوند (در این حالت \(lqdouble\(rq و \(lqfloat\(rq). .IP \fB\-fno\-elide\-type\fR 4 .IX Item "-fno-elide-type" به‌طور پیش‌فرض هنگامی که فرانت‌اند C++ پیام‌های عیب‌یابی نشان‌دهندهٔ عدم تطابق انواع قالب را چاپ می‌کند، بخش‌های مشترک انواع به‌صورت \(lq[...]\(rq چاپ می‌شوند تا پیام خطا ساده‌تر شود. برای نمونه: .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) برای پیام‌های عیب‌یابی دارای چنین مسیری، چگونه چاپ شود. .Sp مقدار \&\fIKIND\fR می‌تواند \fBnone\fR، \fBseparate\-events\fR یا \fBinline\-events\fR (پیش‌فرض) باشد. .Sp مقدار \&\fBnone\fR به معنای عدم چاپ مسیرهای عیب‌یابی است. .Sp مقدار \&\fBseparate\-events\fR به معنای چاپ یک پیام عیب‌یابی جداگانه از نوع \(lqnote\(rq برای هر رویداد درون عیب‌یابی است. برای نمونه: .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 به معنای چاپ رویدادها به‌صورت درون‌خطی (\(lqinline\(rq) در میان کد منبع است. این نما تلاش می‌کند تا رویدادها را در توالی‌هایی از رویدادهای به‌اندازه کافی نزدیک به یکدیگر ادغام کند و آن‌ها را به‌صورت محدوده‌های برچسب‌دار درون کد منبع نمایش دهد. .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 جریان کنترل بین‌روالی (Interprocedural) با گروه‌بندی رویدادها بر اساس فریم پشته (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، پویش (scan) شوند. .IP \fB\-fdiagnostics\-column\-unit=\fR\fIUNIT\fR 4 .IX Item "-fdiagnostics-column-unit=UNIT" انتخاب واحد شماره ستون. این گزینه بر پیام‌های عیب‌یابی سنتی (در صورت عدم استفاده از \fB\-fno\-show\-column\fR) و همچنین در صورت درخواست، بر پیام‌های عیب‌یابی با قالب JSON تأثیر می‌گذارد. .Sp واحد پیش‌فرض \fIUNIT\fR، یعنی \fBdisplay\fR، تعداد ستون‌های نمایشی اشغال‌شده توسط هر نویسه را در نظر می‌گیرد. این مقدار در مورد نویسه‌های برگه (tab) ممکن است بزرگ‌تر از تعداد بایت‌های مورد نیاز برای کدگذاری نویسه باشد، یا در مورد نویسه‌های چندبایتی ممکن است کوچک‌تر باشد. برای نمونه، نویسهٔ \(lqGREEK SMALL LETTER PI (U+03C0)\(rq یک ستون نمایش را اشغال می‌کند و کدگذاری UTF\-8 آن به دو بایت نیاز دارد؛ نویسهٔ \(lqSLIGHTLY SMILING FACE (U+1F642)\(rq دو ستون نمایش را اشغال می‌کند و کدگذاری UTF\-8 آن به چهار بایت نیاز دارد. .Sp تنظیم \fIUNIT\fR روی \fBbyte\fR شماره ستون را در تمام موارد به شمارش بایت خام تغییر می‌دهد، همان‌طور که پیش از نگارش 11.1.0 در GCC به‌طور سنتی در خروجی درج می‌شد..IP \fB\-fdiagnostics\-column\-origin=\fR\fIORIGIN\fR 4 .IX Item "-fdiagnostics-column-origin=ORIGIN" مبدأ شماره‌های ستون، یعنی شماره ستونی که به اولین ستون اختصاص داده می‌شود را تعیین می‌کند. مقدار پیش‌فرض 1 با رفتار سنتی GCC و راهنمای نگارش GNU مطابقت دارد. برخی ابزارها ممکن است با مبدأ 0 عملکرد بهتری داشته باشند؛ هر مقدار غیرمنفی را می‌توان مشخص کرد. .IP \fB\-fdiagnostics\-escape\-format=\fR\fIFORMAT\fR 4 .IX Item "-fdiagnostics-escape-format=FORMAT" هنگامی که GCC خطوط سورس مربوطه را برای یک پیام عیب‌یابی چاپ می‌کند، معمولاً سعی می‌کند بایت‌های منبع را مستقیماً چاپ کند. با این حال، برخی از پیام‌های عیب‌یابی به مشکلات کدگذاری در فایل منبع، مانند UTF\-8 بدریخت یا اشکالات نرمال‌سازی Unicode مربوط می‌شوند. این عیب‌یابی‌ها به گونه‌ای نشانه‌گذاری شده‌اند که GCC هنگام چاپ خطوط سورس مربوط به آن‌ها، بایت‌هایی را که اسکی (ASCII) قابل‌چاپ نیستند، به صورت گریز داده‌شده (escaped) چاپ می‌کند. .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 نمایش می‌دهد؛ بنابراین کدگذاری زیرین نویسه‌های یونیکد غیر\-ASCII را نشان می‌دهد. برای مثال بالا، عبارت زیر چاپ خواهد شد: .Sp .Vb 1 \& before<80>after .Ve .IP \fB\-fdiagnostics\-text\-art\-charset=\fR\fICHARSET\fR 4 .IX Item "-fdiagnostics-text-art-charset=CHARSET" برخی پیام‌های عیب‌یابی می‌توانند حاوی نمودارهای «هنر متنی» (text art) باشند: تصاویری ایجادشده از متن که برای نمایش در قلم‌های تک‌عرض (monospaced) در نظر گرفته شده‌اند. .Sp این گزینه نویسه‌هایی را که باید در صورت وجود برای چاپ چنین نمودارهایی استفاده شوند، انتخاب می‌کند. مقدار \fICHARSET\fR یکی از موارد \fBnone\fR، \fBascii\fR، \fBunicode\fR یا \fBemoji\fR است. .Sp مقدار \fBnone\fR از چاپ چنین نمودارهایی جلوگیری می‌کند. مقدار \fBascii\fR تضمین می‌کند که این نمودارها کاملاً اسکی («ASCII art») باشند. مقدار \fBunicode\fR امکان استفاده محتاطانه از نویسه‌های ترسیمی یونیکد (مانند نویسه‌های ترسیم جدول و چارچوب) را فراهم می‌آورد. مقدار \fBemoji\fR علاوه بر آن، امکان استفاده از ایموجی در خروجی را اضافه می‌کند (مانند درج U+26A0 WARNING SIGN و به دنبال آن U+FE0F VARIATION SELECTOR\-16 جهت انتخاب گونهٔ ایموجی آن نویسه). .Sp مقدار پیش‌فرض \fBemoji\fR است، مگر زمانی که متغیر محیطی \fBLANG\fR روی \fBC\fR تنظیم شده باشد که در آن صورت پیش‌فرض \fBascii\fR خواهد بود. .IP \fB\-fdiagnostics\-format=\fR\fIFORMAT\fR 4 .IX Item "-fdiagnostics-format=FORMAT" یک قالب متفاوت برای چاپ پیام‌های عیب‌یابی انتخاب می‌کند. \&\fIFORMAT\fR شامل \fBtext\fR، \fBsarif\-stderr\fR، \fBsarif\-file\fR، \&\fBjson\fR، \fBjson\-stderr\fR یا \fBjson\-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 ارسال می‌کنند. .Sp مقادیر مختلف \fBjson\fR، \fBjson\-stderr\fR و \fBjson\-file\fR منسوخ شده‌اند و به یک قالب خروجی قدیمی مبتنی بر JSON اشاره دارند. قالب \fBjson\fR مترادفی برای \fBjson\-stderr\fR است. قالب‌های \fBjson\-stderr\fR و \fBjson\-file\fR به‌جز محل ارسال داده‌های JSON، کاملاً یکسان هستند. با \fBjson\-stderr\fR، خروجی JSON به stderr ارسال می‌شود، در حالی که با \fBjson\-file\fR در \fIsource.gcc.json\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 باید یک طرحواره (scheme) را مشخص کند که می‌تواند اختیاری با \f(CW\*(C`:\*(C'\fR و یک یا چند جفت \fIKEY\fR=\fIVALUE\fR دنبال شود، به این صورت: .Sp .Vb 3 \& \& := \& :=,= .Ve .Sp و غیره. .Sp طرحواره‌ها، کلیدها یا مقادیری که نام آن‌ها دارای پیشوند «experimental» است، ممکن است بدون اطلاع قبلی تغییر کنند یا حذف شوند. .Sp \&\fISCHEME\fR می‌تواند مقادیر زیر باشد: .RS 4 .IP \fBtext\fR 4 .IX Item "text" ارسال پیام‌های عیب‌یابی به stderr با استفاده از قالب خروجی متنی سنتی GCC. .Sp کلیدهای پشتیبانی‌شده عبارتند از: .RS 4 .IP \fBcolor=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "color=[yes|no]" بازنویسی تنظیمات رنگ‌بندی مربوط به \fB\-fdiagnostics\-color\fR برای این خروجی متنی. .IP \fBexperimental\-nesting=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "experimental-nesting=[yes|no]" فعال‌سازی یک حالت آزمایشی که بر روابط سلسله‌مراتبی درون پیام‌های عیب‌یابی تأکید دارد، و اطلاعات موقعیت مکانی را در خطوط جداگانه نمایش می‌دهد. .IP \fBexperimental\-nesting\-show\-locations=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "experimental-nesting-show-locations=[yes|no]" اگر \f(CW\*(C`experimental\-nesting=yes\*(C'\fR باشد، مکان‌ها به صورت پیش‌فرض نمایش داده می‌شوند؛ این کلید را روی \f(CW\*(C`no\*(C'\fR تنظیم کنید تا چاپ این مکان‌ها غیرفعال شود. این ویژگی برای استفاده توسعه‌دهندگان GCC هنگام نگارش آزمون‌های DejaGnu تعبیه شده است. .IP \fBexperimental\-nesting\-show\-levels=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "experimental-nesting-show-levels=[yes|no]" این یک گزینه اشکال‌زدایی برای استفاده همراه با \f(CW\*(C`experimental\-nesting=yes\*(C'\fR است. این کلید را روی \f(CW\*(C`yes\*(C'\fR بگذارید تا سطوح تودرتویی به صراحت در خروجی چاپ شوند. این قابلیت برای استفاده توسعه‌دهندگان GCC در نظر گرفته شده است. .RE .RS 4 .RE .IP \fBsarif\fR 4 .IX Item "sarif" ارسال پیام‌های عیب‌یابی به یک فایل در قالب SARIF. .Sp کلیدهای پشتیبانی‌شده عبارتند از: .RS 4 .IP \fBfile=\fR\fIFILENAME\fR 4 .IX Item "file=FILENAME" مشخص کردن نام فایلی که خروجی SARIF در آن نوشته می‌شود؛ احتمالاً با یک مسیر مطلق یا نسبی در ابتدا. در صورت عدم تعیین، پیش‌فرض \fIsource.sarif\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 .RE .RE .RS 4 .Sp برای مثال: .Sp .Vb 2 \& \-fdiagnostics\-add\-output=sarif:version=2.1,file=foo.2.1.sarif \& \-fdiagnostics\-add\-output=sarif:version=2.2\-prerelease,file=foo.2.2.sarif .Ve .Sp یک جفت خروجی اضافه می‌کند که هرکدام در فایلی متفاوت می‌نویسند و به ترتیب از نسخه‌های 2.1 و 2.2 استاندارد SARIF استفاده می‌کنند. .Sp در قالب EBNF: .Sp .Vb 2 \& = \& | , ":", ; \& \& = "text" | "sarif"; \& \& = \& | "," ; \& \& = "=" ; \& \& = ? string without a \*(Aq=\*(Aq ? ; \& = ? string without a \*(Aq,\*(Aq ? ; .Ve .RE .IP \fB\-fdiagnostics\-set\-output=\fR\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR 4 .IX Item "-fdiagnostics-set-output=DIAGNOSTICS-OUTPUT-SPEC" این گزینه به روشی مشابه با \fB\-fdiagnostics\-add\-output=\fR کار می‌کند، با این تفاوت که به جای افزودن یک «مقصد خروجی» اضافی برای پیام‌های عیب‌یابی، تمام مقصدهای خروجی موجود را جایگزین می‌کند؛ مانند مقصدهایی که از \fB\-fdiagnostics\-format=\fR، \&\fB\-fdiagnostics\-add\-output=\fR یا یک فراخوانی قبلی \fB\-fdiagnostics\-set\-output=\fR تعریف شده‌اند..IP \fB\-fno\-diagnostics\-json\-formatting\fR 4 .IX Item "-fno-diagnostics-json-formatting" به‌طور پیش‌فرض، هنگامی که JSON برای پیام‌های عیب‌یابی صادر می‌شود (از طریق \&\fB\-fdiagnostics\-format=sarif\-stderr\fR، \&\fB\-fdiagnostics\-format=sarif\-file\fR، \&\fB\-fdiagnostics\-format=json\fR، \&\fB\-fdiagnostics\-format=json\-stderr\fR، \&\fB\-fdiagnostics\-format=json\-file\fR)، کامپایلر GCC خطوط جدید و فاصله‌های تورفتگی اضافه می‌کند تا ساختار سلسله‌مراتبی JSON از نظر بصری برجسته شود. .Sp از \fB\-fno\-diagnostics\-json\-formatting\fR برای حذف این نویسه‌های فاصله (whitespace) استفاده کنید. این گزینه باید پیش از گزینه‌ای که قرار است بر آن تأثیر بگذارد، مشخص شود. .Sp این گزینه به منظور سازگاری با ابزارهایی در نظر گرفته شده است که انتظار ندارند خروجی حاوی خطوط جدید باشد، مانند آنچه در نگارش‌های قدیمی‌تر GCC تولید می‌شد. .SS "گزینه‌هایی برای درخواست یا سرکوب هشدارها (Options to Request or Suppress Warnings)" .IX Subsection "Options to Request or Suppress Warnings" هشدارها پیام‌های عیب‌یابی هستند که ساختارهایی را گزارش می‌کنند که ذاتاً نادرست نیستند، اما خطرناک بوده یا نشان می‌دهند که ممکن است خطایی رخ داده باشد. .PP گزینه‌های مستقل از زبانِ زیر، هشدارهای خاصی را فعال نمی‌کنند، بلکه انواع پیام‌های عیب‌یابیِ تولیدشده توسط GCC را کنترل می‌کنند. .IP \fB\-fsyntax\-only\fR 4 .IX Item "-fsyntax-only" بررسی کد از نظر خطاهای نحوی، بدون انجام هیچ کار دیگری فراتر از آن. .IP \fB\-fmax\-errors=\fR\fIn\fR 4 .IX Item "-fmax-errors=n" حداکثر تعداد پیام‌های خطا را به \fIn\fR محدود می‌کند؛ در این نقطه GCC به جای تلاش برای ادامهٔ پردازش کد منبع، متوقف می‌شود. اگر مقدار \fIn\fR برابر 0 باشد (پیش‌فرض)، هیچ محدودیتی در تعداد پیام‌های خطای تولیدشده وجود نخواهد داشت. اگر \fB\-Wfatal\-errors\fR نیز مشخص شده باشد، \fB\-Wfatal\-errors\fR بر این گزینه تقدم دارد. .IP \fB\-w\fR 4 .IX Item "-w" سرکوب تمام پیام‌های هشدار. .IP \fB\-Werror\fR 4 .IX Item "-Werror" تبدیل تمام هشدارها به خطا. .IP \fB\-Werror=\fR 4 .IX Item "-Werror=" تبدیل هشدار مشخص‌شده به خطا. مشخصهٔ هشدار به انتها پیوست می‌شود؛ برای نمونه \fB\-Werror=switch\fR هشدارهای تحت کنترلِ \fB\-Wswitch\fR را به خطا تبدیل می‌کند. این گزینه شکلی منفی نیز دارد که برای لغو اثر \fB\-Werror\fR برای هشدارهای خاص به کار می‌رود؛ برای نمونه \fB\-Wno\-error=switch\fR سبب می‌شود هشدارهای \&\fB\-Wswitch\fR حتی زمانی که \fB\-Werror\fR فعال است، خطا به شمار نیایند. .Sp پیام هشدار برای هر هشدار قابل کنترل، شامل گزینه‌ای است که آن هشدار را کنترل می‌کند. سپس می‌توان آن گزینه را مطابق توضیحات بالا همراه با \&\fB\-Werror=\fR و \fB\-Wno\-error=\fR به کار برد. (چاپ گزینه در پیام هشدار را می‌توان با پرچم \&\fB\-fno\-diagnostics\-show\-option\fR غیرفعال کرد.) .Sp توجه داشته باشید که مشخص کردن \fB\-Werror=\fR\fIfoo\fR به‌طور خودکار مستلزم \&\fB\-W\fR\fIfoo\fR است. با این حال، \fB\-Wno\-error=\fR\fIfoo\fR متضمن هیچ موردی نیست. .IP \fB\-Wfatal\-errors\fR 4 .IX Item "-Wfatal-errors" این گزینه باعث می‌شود کامپایلر با رخ دادن نخستین خطا، به جای تلاش برای ادامه دادن و چاپ پیام‌های خطای بیشتر، فرایند کامپایل را لغو و متوقف کند. .PP می‌توانید هشدارهای خاص متعددی را با گزینه‌هایی که با \&\fB\-W\fR آغاز می‌شوند درخواست کنید؛ برای نمونه \fB\-Wunused\-variable\fR برای درخواست هشدار در مورد اعلان متغیرهایی که هرگز استفاده نشده‌اند. هر یک از این گزینه‌های هشدار خاص همچنین دارای یک شکل منفی است که برای غیرفعال کردن هشدارها با \fB\-Wno\-\fR آغاز می‌شود؛ برای نمونه، \fB\-Wno\-unused\-variable\fR. این دفترچهٔ راهنما تنها یکی از این دو شکل را (هرکدام که حالت پیش‌فرض نباشد) فهرست می‌کند. برای گزینه‌های خاص زبان‌های دیگر، به \fBC++ Dialect Options\fR و \&\fBObjective\-C and Objective\-C++ Dialect Options\fR نیز مراجعه کنید. هشدارهای تکمیلی را می‌توان با فعال‌سازی تحلیل‌گر ایستا (static analyzer) به دست آورد؛ .PP برخی گزینه‌ها، مانند \fB\-Wall\fR و \fB\-Wextra\fR، گزینه‌های دیگری مانند \fB\-Wunused\fR را فعال می‌کنند که آن هم ممکن است گزینه‌های بیشتری نظیر \fB\-Wunused\-variable\fR را فعال کند. اثر ترکیبی شکل‌های مثبت و منفی این است که گزینه‌های خاص‌تر، مستقل از جایگاهشان در خط فرمان، نسبت به گزینه‌های عام‌تر اولویت دارند. برای گزینه‌هایی با میزان ویژگی یکسان، آخرین گزینه اعمال می‌شود. گزینه‌هایی که از طریق پراگماها (pragmas) فعال یا غیرفعال می‌شوند، طوری عمل می‌کنند که گویی در انتهای خط فرمان آمده‌اند. .PP هنگامی که یک گزینهٔ هشدار ناشناخته درخواست شود (مانند \&\fB\-Wunknown\-warning\fR)، کامپایلر GCC خطایی مبنی بر ناشناخته بودن گزینه صادر می‌کند. با این حال، اگر شکل \fB\-Wno\-\fR به کار رود، رفتار اندکی متفاوت خواهد بود: هیچ پیام عیب‌یابی برای \fB\-Wno\-unknown\-warning\fR صادر نمی‌شود مگر اینکه پیام‌های عیب‌یابی دیگری در حال تولید باشند. این قابلیت اجازه می‌دهد گزینه‌های جدید \fB\-Wno\-\fR در کامپایلرهای قدیمی‌تر استفاده شوند، اما اگر مشکلی پیش بیاید، کامپایلر هشدار می‌دهد که یک گزینهٔ ناشناخته وجود دارد. .PP اثربخشی برخی هشدارها به فعال بودن بهینه‌سازی‌ها نیز بستگی دارد. برای نمونه، \fB\-Wsuggest\-final\-types\fR با بهینه‌سازی زمان پیوند (link-time optimization) مؤثرتر است. ممکن است برخی هشدارهای دیگر اصلاً صادر نشوند مگر اینکه بهینه‌سازی فعال شده باشد. اگرچه بهینه‌سازی به‌طور کلی اثربخشی هشدارها دربارهٔ مشکلات جریان کنترل و جریان داده را بهبود می‌بخشد، در برخی موارد ممکن است موجب خطاهای مثبت کاذب (false positive) نیز بشود. .IP \fB\-Wpedantic\fR 4 .IX Item "-Wpedantic" .PD 0 .IP \fB\-pedantic\fR 4 .IX Item "-pedantic" .PD صدور تمام هشدارهای خواسته‌شده توسط استانداردهای دقیق ISO C و ISO C++؛ عیب‌یابی تمام برنامه‌هایی که از افزونه‌های ممنوع استفاده می‌کنند و برخی برنامه‌های دیگر که از ISO C و ISO C++ پیروی نمی‌کنند. این گزینه از نگارش استاندارد ISO C یا C++ مشخص‌شده با هر گزینهٔ \fB\-std\fR به کار رفته پیروی می‌کند. .Sp برنامه‌های معتبر ISO C و ISO C++ باید بدون توجه به فعال یا غیرفعال بودن این گزینه به‌درستی کامپایل شوند (گرچه موارد نادری نیازمند \fB\-ansi\fR یا یک گزینهٔ \&\fB\-std\fR برای تعیین نگارش استاندارد هستند). با این حال، بدون این گزینه، افزونه‌های خاص GNU و قابلیت‌های سنتی C و C++ نیز پشتیبانی می‌شوند. با فعال بودن این گزینه، آن‌ها عیب‌یابی می‌شوند (یا با \fB\-pedantic\-errors\fR رد می‌شوند). .Sp گزینهٔ \&\fB\-Wpedantic\fR باعث صدور پیام هشدار برای استفاده از کلمات کلیدی جایگزینی که نام آن‌ها با \fB_\|_\fR آغاز و پایان می‌یابد، نمی‌شود. این قالب جایگزین را می‌توان همچنین برای غیرفعال کردن هشدارها برای انواع غیر-ISO مربوط به \fB_\|_intN\fR، یعنی \fB_\|_intN_\|_\fR به کار برد. هشدارهای pedantic همچنین در عبارتی که پس از \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR می‌آید غیرفعال می‌شوند. با این حال، تنها فایل‌های سرآیند سیستمی باید از این روش‌ها استفاده کنند؛ برنامه‌های کاربردی باید از آن‌ها اجتناب ورزند. .Sp برخی هشدارها دربارهٔ برنامه‌های ناسازگار توسط گزینه‌هایی غیر از \fB\-Wpedantic\fR کنترل می‌شوند؛ در بسیاری از موارد آن‌ها توسط \&\fB\-Wpedantic\fR فعال می‌شوند اما می‌توان آن‌ها را به‌طور جداگانه با گزینهٔ اختصاصی‌شان غیرفعال کرد، مانند \fB\-Wpedantic \-Wno\-pointer\-sign\fR. .Sp در جایی که استاندارد مشخص‌شده با \fB\-std\fR نشان‌دهندهٔ یک لهجهٔ گسترش‌یافتهٔ GNU از C باشد، مانند \fBgnu90\fR یا \fBgnu99\fR، یک \fIاستاندارد پایه\fR متناظر وجود دارد، یعنی نگارشی از ISO C که لهجهٔ گسترش‌یافتهٔ GNU بر پایهٔ آن استوار است. هشدارهای ناشی از \fB\-Wpedantic\fR در جاهایی صادر می‌شوند که توسط استاندارد پایه الزامی شده باشند. (منطقی نیست که چنین هشدارهایی تنها برای قابلیت‌هایی صادر شوند که در لهجهٔ GNU C مشخص‌شده نیستند، زیرا بنا بر تعریف، لهجه‌های GNU از C شامل تمام ویژگی‌هایی هستند که کامپایلر با گزینهٔ ارائه‌شده پشتیبانی می‌کند، و در نتیجه چیزی برای هشدار دادن وجود نخواهد داشت.) .IP \fB\-pedantic\-errors\fR 4 .IX Item "-pedantic-errors" صدور خطا در هر زمانی که \fIاستاندارد پایه\fR (به \fB\-Wpedantic\fR نگاه کنید) نیازمند یک پیام عیب‌یابی باشد؛ در برخی موارد که رفتار تعریف‌نشده (undefined behavior) در زمان کامپایل وجود دارد و در برخی موارد دیگر که مانع کامپایل برنامه‌های معتبر مطابق با استاندارد نمی‌شوند. این گزینه معادل \fB\-Werror=pedantic\fR نیست: گزینهٔ اخیر احتمالاً سودمند نخواهد بود، زیرا تنها عیب‌یابی‌هایی را به خطا تبدیل می‌کند که تحت کنترل \&\fB\-Wpedantic\fR هستند، در حالی که این گزینه بر عیب‌یابی‌های الزامی که همیشه فعال هستند یا توسط گزینه‌هایی غیر از \fB\-Wpedantic\fR کنترل می‌شوند نیز تأثیر می‌گذارد. .Sp اگر می‌خواهید عیب‌یابی‌های الزامی که به‌طور پیش‌فرض هشدار هستند، به خطا تبدیل شوند، اما تمایلی ندارید که عیب‌یابی‌های \fB\-Wpedantic\fR فعال شوند، می‌توانید \fB\-pedantic\-errors \-Wno\-pedantic\fR را مشخص کنید (یا \fB\-pedantic\-errors \-Wno\-error=pedantic\fR برای فعال کردن آن‌ها صرفاً به عنوان هشدار). .Sp برخی از عیب‌یابی‌های الزامی به‌طور پیش‌فرض خطا هستند، اما می‌توان با استفاده از \fB\-fpermissive\fR یا گزینهٔ هشدار اختصاصی آن‌ها، مثلاً \fB\-Wno\-error=narrowing\fR، آن‌ها را به هشدار تقلیل داد. .Sp برخی از عیب‌یابی‌ها برای شیوه‌های غیر-ISO توسط گزینه‌های هشدار خاصی غیر از \fB\-Wpedantic\fR کنترل می‌شوند، اما با \fB\-pedantic\-errors\fR نیز تبدیل به خطا می‌شوند. برای نمونه: .Sp \&\fB\-Wattributes\fR (برای صفت‌های استاندارد) \&\fB\-Wchanges\-meaning\fR (C++) \&\fB\-Wcomma\-subscript\fR (C++23 یا جدیدتر) \&\fB\-Wdeclaration\-after\-statement\fR (C90 یا قدیمی‌تر) \&\fB\-Welaborated\-enum\-base\fR (C++11 یا جدیدتر) \&\fB\-Wimplicit\-int\fR (C99 یا جدیدتر) \&\fB\-Wimplicit\-function\-declaration\fR (C99 یا جدیدتر) \&\fB\-Wincompatible\-pointer\-types \&\-Wint\-conversion \&\-Wlong\-long\fR (C90 یا قدیمی‌تر) \&\fB\-Wmain \&\-Wnarrowing\fR (C++11 یا جدیدتر) \&\fB\-Wpointer\-arith \&\-Wpointer\-sign \&\-Wincompatible\-pointer\-types \&\-Wregister\fR (C++17 یا جدیدتر) \&\fB\-Wvla\fR (C90 یا قدیمی‌تر) \&\fB\-Wwrite\-strings\fR (C++11 یا جدیدتر)\fB \fR.IP \fB\-fpermissive\fR 4 .IX Item "-fpermissive" تنزل دادن سطح برخی از پیام‌های تشخیصی اجباری مربوط به کدهای ناسازگار با استاندارد، از خطا به هشدار. بنابراین، استفاده از \fB\-fpermissive\fR اجازه می‌دهد برخی کدهای ناسازگار کامپایل شوند. برخی از پیام‌های تشخیصی C++ تنها با این پرچم کنترل می‌شوند، اما این گزینه سطح برخی از پیام‌های تشخیصی C و C++ را نیز که پرچم اختصاصی خود را دارند، تنزل می‌دهد: .Sp \&\fB\-Wdeclaration\-missing\-parameter\-type\fR (تنها C و Objective\-C) \&\fB\-Wimplicit\-function\-declaration\fR (تنها C و Objective\-C) \&\fB\-Wimplicit\-int\fR (تنها C و Objective\-C) \&\fB\-Wincompatible\-pointer\-types\fR (تنها C و Objective\-C) \&\fB\-Wint\-conversion\fR (تنها C و Objective\-C) \&\fB\-Wnarrowing\fR (تنها C++ و Objective\-C++) \&\fB\-Wreturn\-mismatch\fR (تنها C و Objective\-C) \&\fB\-Wtemplate\-body\fR (تنها C++ و Objective\-C++)\fB \fR .Sp گزینهٔ \fB\-fpermissive\fR در حالت‌های قدیمی زبان C (\fB\-std=c89\fR، \fB\-std=gnu89\fR، \fB\-std=c90\fR و \&\fB\-std=gnu90\fR) پیش‌فرض است. .IP \fB\-Wall\fR 4 .IX Item "-Wall" این گزینه تمام هشدارهای مربوط به ساختارهایی را که برخی کاربران آن‌ها را مشکوک می‌دانند و به‌سادگی قابل اجتناب هستند (یا می‌توان برای جلوگیری از هشدار، آن‌ها را اصلاح کرد)، حتی در هنگام استفاده همراه با ماکروها، فعال می‌کند. این گزینه همچنین برخی هشدارهای خاص زبان را که در \fBC++ Dialect Options\fR و \fBObjective\-C and Objective\-C++ Dialect Options\fR توصیف شده‌اند، فعال می‌سازد. .Sp \&\fB\-Wall\fR پرچم‌های هشدار زیر را روشن می‌کند: .Sp \&\fB\-Waddress \&\-Waligned\-new\fR (تنها C++ و Objective\-C++) \&\fB\-Warray\-bounds=1\fR (تنها با\fB \fR\fB\-O2\fR) \&\fB\-Warray\-compare \&\-Warray\-parameter=2 \&\-Wbool\-compare \&\-Wbool\-operation \&\-Wc++11\-compat \-Wc++14\-compat \-Wc++17compat \-Wc++20compat \&\-Wcatch\-value\fR (تنها C++ و Objective\-C++) \&\fB\-Wchar\-subscripts \&\-Wclass\-memaccess\fR (تنها C++ و Objective\-C++) \&\fB\-Wcomment \&\-Wdangling\-else \&\-Wdangling\-pointer=2 \&\-Wdelete\-non\-virtual\-dtor\fR (تنها C++ و Objective\-C++) \&\fB\-Wduplicate\-decl\-specifier\fR (تنها C و Objective\-C) \&\fB\-Wenum\-compare\fR (در C/ObjC؛ این گزینه به‌طور پیش‌فرض در C++ روشن است) \&\fB\-Wenum\-int\-mismatch\fR (تنها C و Objective\-C) \&\fB\-Wformat=1 \&\-Wformat\-contains\-nul \&\-Wformat\-diag \&\-Wformat\-extra\-args \&\-Wformat\-overflow=1 \&\-Wformat\-truncation=1 \&\-Wformat\-zero\-length \&\-Wframe\-address \&\-Wimplicit\fR (تنها C و Objective\-C) \&\fB\-Wimplicit\-function\-declaration\fR (تنها C و Objective\-C) \&\fB\-Wimplicit\-int\fR (تنها C و Objective\-C) \&\fB\-Winfinite\-recursion \&\-Winit\-self\fR (تنها C++ و Objective\-C++) \&\fB\-Wint\-in\-bool\-context \&\-Wlogical\-not\-parentheses \&\-Wmain\fR (تنها برای C/ObjC و مگر در صورت استفاده از\fB \fR\fB\-ffreestanding\fR) \&\fB\-Wmaybe\-uninitialized \&\-Wmemset\-elt\-size \&\-Wmemset\-transposed\-args \&\-Wmisleading\-indentation\fR (تنها برای C/C++) \&\fB\-Wmismatched\-dealloc \&\-Wmismatched\-new\-delete\fR (تنها C++ و Objective\-C++) \&\fB\-Wmissing\-attributes \&\-Wmissing\-braces\fR (تنها برای C/ObjC) \&\fB\-Wmultistatement\-macros \&\-Wnarrowing\fR (تنها C++ و Objective\-C++) \&\fB\-Wnonnull \&\-Wnonnull\-compare \&\-Wopenmp\-simd\fR (تنها C و C++) \&\fB\-Woverloaded\-virtual=1\fR (تنها C++ و Objective\-C++) \&\fB\-Wpacked\-not\-aligned \&\-Wparentheses \&\-Wpessimizing\-move\fR (تنها C++ و Objective\-C++) \&\fB\-Wpointer\-sign\fR (تنها برای C/ObjC) \&\fB\-Wrange\-loop\-construct\fR (تنها C++ و Objective\-C++) \&\fB\-Wreorder\fR (تنها C++ و Objective\-C++) \&\fB\-Wrestrict \&\-Wreturn\-type \&\-Wself\-move\fR (تنها C++ و Objective\-C++) \&\fB\-Wsequence\-point \&\-Wsign\-compare\fR (تنها C++ و Objective\-C++) \&\fB\-Wsizeof\-array\-div \&\-Wsizeof\-pointer\-div \&\-Wsizeof\-pointer\-memaccess \&\-Wstrict\-aliasing \&\-Wstrict\-overflow=1 \&\-Wswitch \&\-Wtautological\-compare \&\-Wtrigraphs \&\-Wuninitialized \&\-Wunknown\-pragmas \&\-Wunused \&\-Wunused\-but\-set\-variable \&\-Wunused\-const\-variable=1\fR (تنها برای C/ObjC) \&\fB\-Wunused\-function \&\-Wunused\-label \&\-Wunused\-local\-typedefs \&\-Wunused\-value \&\-Wunused\-variable \&\-Wuse\-after\-free=2 \&\-Wvla\-parameter \&\-Wvolatile\-register\-var \&\-Wzero\-length\-bounds\fR .Sp توجه داشته باشید که برخی از پرچم‌های هشدار توسط \fB\-Wall\fR در بر گرفته نمی‌شوند. برخی از آن‌ها در مورد ساختارهایی هشدار می‌دهند که کاربران عموماً آن‌ها را مشکوک نمی‌دانند، اما ممکن است گاهی بخواهید آن‌ها را بررسی کنید؛ برخی دیگر دربارهٔ ساختارهایی هشدار می‌دهند که در بعضی موارد ضروری هستند یا اجتناب از آن‌ها دشوار است، و هیچ راه ساده‌ای برای اصلاح کد جهت رفع هشدار وجود ندارد. برخی از آن‌ها توسط \fB\-Wextra\fR فعال می‌شوند، اما بسیاری از آن‌ها باید به‌صورت جداگانه فعال گردند. .IP \fB\-Wextra\fR 4 .IX Item "-Wextra" این گزینه برخی پرچم‌های هشدار اضافی را که توسط \&\fB\-Wall\fR فعال نمی‌شوند، فعال می‌کند. (این گزینه در گذشته \fB\-W\fR نامیده می‌شد. نام قدیمی‌تر همچنان پشتیبانی می‌شود، اما نام جدید گویاتر است.) .Sp \&\fB\-Wabsolute\-value\fR (تنها برای C/ObjC) \&\fB\-Walloc\-size \&\-Wcalloc\-transposed\-args \&\-Wcast\-function\-type \&\-Wclobbered \&\-Wdangling\-reference\fR (تنها C++) \&\fB\-Wdeprecated\-copy\fR (تنها C++ و Objective\-C++) \&\fB\-Wempty\-body \&\-Wenum\-conversion\fR (تنها برای C/ObjC) \&\fB\-Wexpansion\-to\-defined \&\-Wignored\-qualifiers\fR (تنها برای C/C++) \&\fB\-Wimplicit\-fallthrough=3 \&\-Wmaybe\-uninitialized \&\-Wmissing\-field\-initializers \&\-Wmissing\-parameter\-name\fR (تنها C/ObjC) \&\fB\-Wmissing\-parameter\-type\fR (تنها C/ObjC) \&\fB\-Wold\-style\-declaration\fR (تنها C/ObjC) \&\fB\-Woverride\-init\fR (تنها C/ObjC) \&\fB\-Wredundant\-move\fR (تنها C++ و Objective\-C++) \&\fB\-Wshift\-negative\-value\fR (در C++11 تا C++17 و در C99 و جدیدتر) \&\fB\-Wsign\-compare\fR (تنها C++ و Objective\-C++) \&\fB\-Wsized\-deallocation\fR (تنها C++ و Objective\-C++) \&\fB\-Wstring\-compare \&\-Wtype\-limits \&\-Wuninitialized \&\-Wunterminated\-string\-initialization \&\-Wunused\-parameter\fR (تنها با\fB \fR\fB\-Wunused\fR\fB \fRیا\fB \fR\fB\-Wall\fR) \&\fB\-Wunused\-but\-set\-parameter\fR (تنها با\fB \fR\fB\-Wunused\fR\fB \fRیا\fB \fR\fB\-Wall\fR) .Sp گزینهٔ \fB\-Wextra\fR همچنین برای موارد زیر پیام هشدار چاپ می‌کند: .RS 4 .IP * 4 یک اشاره‌گر با عدد صحیح صفر توسط \f(CW\*(C`<\*(C'\fR، \f(CW\*(C`<=\*(C'\fR، \&\f(CW\*(C`>\*(C'\fR یا \f(CW\*(C`>=\*(C'\fR مقایسه شود. .IP * 4 (تنها C++) یک شمارشگر (enumerator) و یک غیرشمارشگر هر دو در یک عبارت شرطی ظاهر شوند. .IP * 4 (تنها C++) کلاس‌های پایهٔ مجازی مبهم. .IP * 4 (تنها C++) اندیس‌گذاری روی آرایه‌ای که با \f(CW\*(C`register\*(C'\fR اعلان شده است. .IP * 4 (تنها C++) گرفتن آدرس متغیری که با \&\f(CW\*(C`register\*(C'\fR اعلان شده است. .IP * 4 (تنها C++) یک کلاس پایه در سازندهٔ رونوشت (copy constructor) یک کلاس مشتق‌شده مقداردهی اولیه نشده باشد. .RE .RS 4 .RE .IP "\fB\-Wabi\fR (تنها C، Objective\-C، C++ و Objective\-C++)" 4 .IX Item "-Wabi (C, Objective-C, C++ and Objective-C++ only)" دربارهٔ کدهایی که تحت تأثیر تغییرات ABI قرار می‌گیرند هشدار می‌دهد. این شامل کدهایی است که ممکن است با C++ ABI مستقل از سازنده و همچنین psABI برای مقصد خاص سازگار نباشند. هشدارهای مورد دوم به‌طور جداگانه توسط \fB\-Wpsabi\fR نیز کنترل می‌شوند، که درون \fB\-Wabi\fR گنجانده شده است. .Sp از آنجا که اکنون رفتار پیش‌فرض G++ به‌روزرسانی ABI در هر انتشار اصلی است، معمولاً \fB\-Wabi\fR تنها زمانی دربارهٔ مشکلات سازگاری C++ ABI هشدار می‌دهد که در سری یک انتشار، بررسی جدیدی برای یک مشکل ABI که پس از انتشار اولیه کشف شده است، اضافه گردد. اگر نسخهٔ قدیمی‌تری از ABI انتخاب شود (با \&\fB\-fabi\-version=\fR\fIn\fR)، گزینهٔ \fB\-Wabi\fR دربارهٔ موارد بیشتری هشدار می‌دهد. .Sp همچنین می‌توان \fB\-Wabi\fR را با یک شماره نسخهٔ صریح برای هشدار در مورد سازگاری C++ ABI با یک سطح خاص از \fB\-fabi\-version\fR به کار برد؛ مثلاً \fB\-Wabi=2\fR برای هشدار دربارهٔ تغییرات نسبت به \&\fB\-fabi\-version=2\fR. .Sp اگر یک شماره نسخهٔ صریح ارائه شده باشد و \&\fB\-fabi\-compat\-version\fR مشخص نشده باشد، شماره نسخهٔ این گزینه برای نام‌های مستعار سازگاری به کار می‌رود. اگر هیچ شماره نسخهٔ صریحی همراه با این گزینه ارائه نشود، اما \&\fB\-fabi\-compat\-version\fR تعیین شده باشد، آن شماره نسخه برای هشدارهای C++ ABI استفاده می‌شود. .Sp اگرچه تلاش شده است تا دربارهٔ تمام این موارد هشدار داده شود، اما احتمالاً مواردی وجود دارد که با وجود تولید کد ناسازگار توسط G++، هشداری برای آن‌ها داده نمی‌شود. همچنین ممکن است مواردی وجود داشته باشد که در آن‌ها هشدار صادر شود، اگرچه کد تولیدشده سازگار است. .Sp اگر نگران این موضوع هستید که کد تولیدشده توسط G++ ممکن است از نظر باینری با کد تولیدشده توسط کامپایلرهای دیگر سازگار نباشد، باید کد خود را برای اجتناب از این هشدارها بازنویسی کنید. .Sp ناسازگاری‌های شناخته‌شده در \fB\-fabi\-version=2\fR (که از GCC 3.4 تا 4.9 پیش‌فرض بود) شامل موارد زیر است: .RS 4.IP * 4 یک قالب با یک پارامتر قالب غیرنوعی از نوع ارجاعی به‌طور نادرست درهم‌سازی (mangle) می‌شد: .Sp .Vb 3 \& extern int N; \& template struct S {}; \& void n (S) {2} .Ve .Sp این مورد در \fB\-fabi\-version=3\fR برطرف شد. .IP * 4 نوع‌های برداری SIMD که با استفاده از \f(CW\*(C`_\|_attribute ((vector_size))\*(C'\fR اعلان می‌شدند، به روشی غیر استاندارد درهم‌سازی می‌شدند که اجازه بارگذاری بیش‌ازحد (overload) توابعی با بردارها در اندازه‌های متفاوت را نمی‌داد. .Sp روش درهم‌سازی در \fB\-fabi\-version=4\fR تغییر یافت. .IP * 4 \&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR و \f(CW\*(C`noreturn\*(C'\fR به عنوان توصیف‌کننده‌های نوع درهم‌سازی می‌شدند، و \f(CW\*(C`decltype\*(C'\fR مربوط به یک اعلان ساده حذف می‌شد (folded away). .Sp این مشکلات درهم‌سازی در \fB\-fabi\-version=5\fR رفع شدند. .IP * 4 شمارنده‌های دامنه‌دار (scoped enumerators) که به عنوان آرگومان به یک تابع چندآرگومانی (variadic) ارسال می‌شدند، مانند شمارنده‌های بدون دامنه ارتقا می‌یافتند و باعث ایجاد خطا در \f(CW\*(C`va_arg\*(C'\fR می‌شدند. روی اکثر مقصدها، این امر در عمل بر ABI ارسال پارامترها تأثیری نمی‌گذارد، زیرا راهی برای ارسال آرگومانی کوچک‌تر از \f(CW\*(C`int\*(C'\fR وجود ندارد. .Sp همچنین، ABI نحوه درهم‌سازی بسته‌های آرگومان قالب، \&\f(CW\*(C`const_cast\*(C'\fR، \f(CW\*(C`static_cast\*(C'\fR، افزایش/کاهش پیشوندی، و یک تابع در حوزه کلاس که به عنوان آرگومان قالب استفاده شده است را تغییر داد. .Sp این مشکلات در \fB\-fabi\-version=6\fR اصلاح شدند. .IP * 4 لامبداها در حوزه آرگومان پیش‌فرض به‌طور نادرست درهم‌سازی می‌شدند، و ABI نحوه درهم‌سازی \f(CW\*(C`nullptr_t\*(C'\fR را تغییر داد. .Sp این موارد در \fB\-fabi\-version=7\fR اصلاح شدند. .IP * 4 هنگام درهم‌سازی یک نوع تابع با توصیف‌کننده‌های cv تابع (function\-cv\-qualifiers)، نوع تابع بدون توصیف‌کننده به اشتباه به عنوان یک کاندیدای جایگزینی در نظر گرفته می‌شد. .Sp این مورد در \fB\-fabi\-version=8\fR، که پیش‌فرض GCC 5.1 است، برطرف شد. .IP * 4 \&\f(CWdecltype(nullptr)\fR به اشتباه دارای ترازبندی ۱ بود که منجر به دسترسی‌های ترازنشده می‌شد. توجه داشته باشید که این موضوع بر ABI تابعی با پارامتر \f(CW\*(C`nullptr_t\*(C'\fR تأثیری نگذاشت، زیرا پارامترها دارای حداقل ترازبندی هستند. .Sp این مورد در \fB\-fabi\-version=9\fR، که پیش‌فرض GCC 5.2 است، برطرف شد. .IP * 4 ویژگی‌های مختص مقصد که بر هویت یک نوع اثر می‌گذارند، مانند قراردادهای فراخوانی ia32 در نوع یک تابع (مانند stdcall، regparm و غیره)، بر نام درهم‌سازی‌شده تأثیری نداشتند که هنگام استفاده از اشاره‌گرهای تابع به عنوان آرگومان‌های قالب منجر به تداخل نام می‌شد. .Sp این مورد در \fB\-fabi\-version=10\fR، که پیش‌فرض GCC 6.1 است، رفع شد. .RE .RS 4 .RE .IP "\fB\-Wpsabi\fR (تنها C، Objective\-C، C++ و Objective\-C++)" 4 .IX Item "-Wpsabi (C, Objective-C, C++ and Objective-C++ only)" \&\fB\-Wpsabi\fR هشدارهای مربوط به تغییرات ABI مختص پردازنده را فعال می‌کند، مانند تغییرات در نیازمندی‌های ترازبندی یا نحوه ارسال آرگومان‌های تابع. در چندین مقصد از جمله AArch64، ARM، x86، MIPS، RS6000/PowerPC و S/390، این جزئیات در بین نگارش‌های مختلف GCC و/یا نگارش‌های مختلف استانداردهای زبان C یا C++ به‌گونه‌ای تغییر یافته‌اند که بر سازگاری باینری کدهای کامپایل‌شده تأثیر می‌گذارند. با \fB\-Wpsabi\fR، کامپایلر GCC می‌تواند استفاده‌های بالقوه ناسازگار را شناسایی کرده و درباره آن‌ها به شما هشدار دهد. .Sp گزینه \fB\-Wpsabi\fR به‌طور پیش‌فرض فعال است و همچنین به‌صورت ضمنی با \fB\-Wabi\fR فعال می‌شود. .IP "\fB\-Wno\-changes\-meaning\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-changes-meaning (C++ and Objective-C++ only)" زبان C++ ایجاب می‌کند که استفاده‌های بدون قید از یک نام در درون یک کلاس، در کل حوزه کلاس معنای یکسانی داشته باشند؛ بنابراین اعلان نام پس از استفاده از آن بدقواره (ill\-formed) است: .Sp .Vb 3 \& struct A; \& struct B1 { A a; typedef A A; }; // warning, \*(AqA\*(Aq changes meaning \& struct B2 { A a; struct A { }; }; // error, \*(AqA\*(Aq changes meaning .Ve .Sp به‌طور پیش‌فرض، حالت B1 تنها یک هشدار است زیرا هر دو اعلان نوع یکسانی دارند، در حالی که حالت B2 یک خطا به شمار می‌رود. هر دو پیام تشخیصی را می‌توان با \fB\-Wno\-changes\-meaning\fR غیرفعال کرد. همچنین می‌توان حالت خطا را با \&\fB\-Wno\-error=changes\-meaning\fR یا \fB\-fpermissive\fR به یک هشدار تقلیل داد. .Sp هر دو پیام تشخیصی توسط \fB\-fms\-extensions\fR نیز نادیده گرفته می‌شوند. .IP \fB\-Wchar\-subscripts\fR 4 .IX Item "-Wchar-subscripts" اگر اندیس یک آرایه از نوع \f(CW\*(C`char\*(C'\fR باشد، هشدار می‌دهد. این یکی از عوامل شایع خطا است، زیرا برنامه‌نویسان اغلب فراموش می‌کنند که این نوع در برخی ماشین‌ها علامت‌دار (signed) است. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-coverage\-mismatch\fR 4 .IX Item "-Wno-coverage-mismatch" اگر هنگام استفاده از گزینه \&\fB\-fprofile\-use\fR، پروفایل‌های بازخورد مطابقت نداشته باشند هشدار می‌دهد. اگر یک فایل مبدأ بین کامپایل با \fB\-fprofile\-generate\fR و کامپایل با \fB\-fprofile\-use\fR تغییر کند، ممکن است فایل‌های حاوی بازخورد پروفایل با فایل مبدأ مطابقت نداشته باشند و GCC نتواند از اطلاعات بازخورد پروفایل استفاده کند. به‌طور پیش‌فرض، این هشدار فعال است و به عنوان یک خطا تلقی می‌شود. از \fB\-Wno\-coverage\-mismatch\fR می‌توان برای غیرفعال کردن هشدار، یا از \fB\-Wno\-error=coverage\-mismatch\fR می‌توان برای غیرفعال کردن خطا استفاده کرد. غیرفعال کردن خطا برای این هشدار می‌تواند منجر به کدهای با بهینه‌سازی ضعیف شود و تنها در صورت وجود تغییرات بسیار جزئی، مانند رفع باگ در یک پایه‌کد موجود، مفید است. غیرفعال کردن کامل این هشدار توصیه نمی‌شود. .IP \fB\-Wno\-coverage\-too\-many\-conditions\fR 4 .IX Item "-Wno-coverage-too-many-conditions" اگر از \fB\-fcondition\-coverage\fR استفاده شود و یک عبارت دارای جملات بسیار زیادی باشد به‌طوری‌که GCC از پوشش صرف‌نظر کند، هشدار می‌دهد. صرف‌نظر از پوشش زمانی رخ می‌دهد که تعداد جملات در عبارت شرطی بیش از تعداد بیت‌های موجود در یک \f(CW\*(C`gcov_type_unsigned\*(C'\fR باشد. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wno\-coverage\-too\-many\-paths\fR 4 .IX Item "-Wno-coverage-too-many-paths" اگر از \fB\-fpath\-coverage\fR استفاده شود و یک تابع دارای مسیرهای بیش از حدی باشد به‌طوری‌که GCC از پوشش صرف‌نظر کند، هشدار می‌دهد. صرف‌نظر کردن توسط \&\fB\-fpath\-coverage\-limit\fR کنترل می‌شود. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wno\-coverage\-invalid\-line\-number\fR 4 .IX Item "-Wno-coverage-invalid-line-number" در صورتی که یک تابع به دلیل ماکروهای نامعتبر شماره خط (linenum) زودتر از آغازش به پایان برسد، هشدار می‌دهد. این هشدار تنها هنگامی صادر می‌شود که \fB\-\-coverage\fR فعال باشد. .Sp به‌طور پیش‌فرض، این هشدار فعال است و به عنوان یک خطا در نظر گرفته می‌شود. از \fB\-Wno\-coverage\-invalid\-line\-number\fR می‌توان برای غیرفعال کردن هشدار، یا از \fB\-Wno\-error=coverage\-invalid\-line\-number\fR می‌توان برای غیرفعال کردن خطا استفاده کرد. .IP "\fB\-Wno\-cpp\fR (تنها C، Objective\-C، C++، Objective\-C++ و Fortran)" 4 .IX Item "-Wno-cpp (C, Objective-C, C++, Objective-C++ and Fortran only)" پیام‌های هشدار صادرشده توسط دستورات هدایت‌کننده \f(CW\*(C`#warning\*(C'\fR را فرو می‌نشاند. .IP "\fB\-Wdouble\-promotion\fR (تنها C، C++، Objective\-C و Objective\-C++)" 4 .IX Item "-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)" هنگامی که مقداری از نوع \f(CW\*(C`float\*(C'\fR به‌طور ضمنی به \f(CW\*(C`double\*(C'\fR ارتقا می‌یابد، هشدار می‌دهد. پردازنده‌های دارای واحد ممیز شناور ۳۲ بیتی «دقت یگانه» (single\-precision)، نوع \f(CW\*(C`float\*(C'\fR را در سخت‌افزار پیاده‌سازی می‌کنند، اما \&\f(CW\*(C`double\*(C'\fR را در نرم‌افزار شبیه‌سازی می‌نمایند. در چنین ماشینی، انجام محاسبات با استفاده از مقادیر \f(CW\*(C`double\*(C'\fR به دلیل سربار لازم برای شبیه‌سازی نرم‌افزاری بسیار هزینه‌برتر است. .Sp انجام تصادفی محاسبات با \f(CW\*(C`double\*(C'\fR بسیار آسان رخ می‌دهد زیرا لیترال‌های ممیز شناور به‌طور ضمنی از نوع \f(CW\*(C`double\*(C'\fR هستند. برای نمونه، در: .Sp .Vb 4 \& float area(float radius) \& { \& return 3.14159 * radius * radius; \& } .Ve .Sp کامپایلر تمام محاسبات را با \f(CW\*(C`double\*(C'\fR انجام می‌دهد زیرا لیترال ممیز شناور از نوع \f(CW\*(C`double\*(C'\fR است. .IP "\fB\-Wduplicate\-decl\-specifier\fR (تنها C و Objective\-C)" 4 .IX Item "-Wduplicate-decl-specifier (C and Objective-C only)" اگر اعلانی دارای توصیف‌کننده تکراری \f(CW\*(C`const\*(C'\fR، \f(CW\*(C`volatile\*(C'\fR، \&\f(CW\*(C`restrict\*(C'\fR یا \f(CW\*(C`_Atomic\*(C'\fR باشد، هشدار می‌دهد. این هشدار توسط \&\fB\-Wall\fR فعال می‌شود. .IP \fB\-Wformat\fR 4 .IX Item "-Wformat" .PD 0 .IP \fB\-Wformat=\fR\fIn\fR 4 .IX Item "-Wformat=n" .PD فراخوانی‌های توابعی نظیر \f(CW\*(C`printf\*(C'\fR و \f(CW\*(C`scanf\*(C'\fR و غیره را بررسی می‌کند تا اطمینان حاصل شود نوع آرگومان‌های ارائه‌شده با رشته قالب مشخص‌شده مطابقت دارند و تبدیل‌های مشخص‌شده در رشته قالب معقول و معتبر هستند. این شامل توابع استاندارد و سایر توابع مشخص‌شده توسط ویژگی‌های قالب، در خانواده‌های \f(CW\*(C`printf\*(C'\fR، \&\f(CW\*(C`scanf\*(C'\fR، \f(CW\*(C`strftime\*(C'\fR و \f(CW\*(C`strfmon\*(C'\fR (یک افزونه X/Open که در استاندارد C نیست) (یا سایر خانواده‌های مختص مقصد) می‌شود. این‌که کدام توابع بدون داشتن صفت‌های قالب مشخص‌شده بررسی شوند به نگارش استاندارد انتخاب‌شده بستگی دارد، و این‌گونه بررسی‌های توابع بدون ویژگی‌های مشخص‌شده توسط \&\fB\-ffreestanding\fR یا \fB\-fno\-builtin\fR غیرفعال می‌شوند. .Sp قالب‌ها در برابر قابلیت‌های قالب‌بندی پشتیبانی‌شده توسط GNU libc نگارش 2.2 بررسی می‌شوند. این قابلیت‌ها شامل تمام ویژگی‌های ISO C90 و C99 و همچنین ویژگی‌هایی از مشخصات Single Unix و برخی افزونه‌های BSD و GNU است. سایر پیاده‌سازی‌های کتابخانه ممکن است از همه این ویژگی‌ها پشتیبانی نکنند؛ GCC از دادن هشدار در مورد ویژگی‌هایی که فراتر از محدودیت‌های یک کتابخانه خاص هستند پشتیبانی نمی‌کند. با این حال، اگر \fB\-Wpedantic\fR همراه با \fB\-Wformat\fR استفاده شود، در مورد ویژگی‌های قالبی که در نگارش استاندارد انتخابی وجود ندارند هشدار داده می‌شود (اما نه برای قالب‌های \f(CW\*(C`strfmon\*(C'\fR، زیرا در هیچ نگارشی از استاندارد C وجود ندارند). .RS 4.IP \fB\-Wformat=1\fR 4 .IX Item "-Wformat=1" .PD 0 .IP \fB\-Wformat\fR 4 .IX Item "-Wformat" .PD گزینهٔ \fB\-Wformat\fR معادل \fB\-Wformat=1\fR است، و \&\fB\-Wno\-format\fR معادل \fB\-Wformat=0\fR است. از آن‌جا که \&\fB\-Wformat\fR همچنین آرگومان‌های قالب تهی (null) را برای چندین تابع بررسی می‌کند، \fB\-Wformat\fR به طور ضمنی شامل \fB\-Wnonnull\fR نیز می‌شود. برخی جنبه‌های این سطح از بررسی قالب را می‌توان با گزینه‌های روبرو غیرفعال کرد: \fB\-Wno\-format\-contains\-nul\fR، \&\fB\-Wno\-format\-extra\-args\fR و \fB\-Wno\-format\-zero\-length\fR. گزینهٔ \&\fB\-Wformat\fR توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wformat=2\fR 4 .IX Item "-Wformat=2" فعال‌سازی \fB\-Wformat\fR به همراه بررسی‌های بیشتر قالب. در حال حاضر معادل \fB\-Wformat \-Wformat\-nonliteral \-Wformat\-security \&\-Wformat\-y2k\fR است. .RE .RS 4 .RE .IP \fB\-Wno\-format\-contains\-nul\fR 4 .IX Item "-Wno-format-contains-nul" اگر \fB\-Wformat\fR مشخص شده باشد، دربارهٔ رشته‌های قالبی که حاوی بایت‌های NUL هستند هشدار ندهد. .IP \fB\-Wno\-format\-extra\-args\fR 4 .IX Item "-Wno-format-extra-args" اگر \fB\-Wformat\fR مشخص شده باشد، دربارهٔ آرگومان‌های اضافی برای یک تابع قالب‌بندی \&\f(CW\*(C`printf\*(C'\fR یا \f(CW\*(C`scanf\*(C'\fR هشدار ندهد. استاندارد C مشخص می‌کند که این‌گونه آرگومان‌ها نادیده گرفته می‌شوند. .Sp در جایی که آرگومان‌های استفاده‌نشده بین آرگومان‌های استفاده‌شده‌ای قرار گیرند که با مشخصه‌های شماره عملوند \fB$\fR مشخص شده‌اند، معمولاً همچنان هشدار داده می‌شود، زیرا پیاده‌سازی نمی‌تواند بداند چه نوعی را باید برای رد کردن آرگومان‌های استفاده‌نشده به \f(CW\*(C`va_arg\*(C'\fR ارسال کند. با این حال، در مورد قالب‌های \f(CW\*(C`scanf\*(C'\fR، این گزینه هشدار را در صورتی که آرگومان‌های استفاده‌نشده همگی اشاره‌گر باشند سرکوب می‌کند، زیرا استاندارد Single Unix مشخص می‌کند که چنین آرگومان‌های استفاده‌نشده‌ای مجاز هستند. .IP \fB\-Wformat\-overflow\fR 4 .IX Item "-Wformat-overflow" .PD 0 .IP \fB\-Wformat\-overflow=\fR\fIlevel\fR 4 .IX Item "-Wformat-overflow=level" .PD هشدار دربارهٔ فراخوانی‌های توابع ورودی/خروجی قالب‌بندی‌شده مانند \f(CW\*(C`sprintf\*(C'\fR و \f(CW\*(C`vsprintf\*(C'\fR که ممکن است باعث سرریز بافر مقصد شوند. هنگامی که تعداد دقیق بایت‌های نوشته‌شده توسط یک دستورالعمل قالب را نتوان در زمان ترجمه تعیین کرد، بر اساس روش‌های اکتشافی که به آرگومان \&\fIlevel\fR و بهینه‌سازی وابسته‌اند تخمین زده می‌شود. در حالی که فعال کردن بهینه‌سازی در اکثر موارد دقت هشدار را بهبود می‌بخشد، همچنین ممکن است منجر به مثبت کاذب شود. .RS 4 .IP \fB\-Wformat\-overflow\fR 4 .IX Item "-Wformat-overflow" .PD 0 .IP \fB\-Wformat\-overflow=1\fR 4 .IX Item "-Wformat-overflow=1" .PD سطح \fI1\fR از \fB\-Wformat\-overflow\fR که توسط \fB\-Wformat\fR فعال می‌شود رویکردی محافظه‌کارانه را به کار می‌گیرد که فقط درباره فراخوانی‌هایی هشدار می‌دهد که به احتمال زیاد باعث سرریز بافر می‌شوند. در این سطح، آرگومان‌های عددی دستورالعمل‌های قالب با مقادیر نامشخص برابر یک فرض می‌شوند، و رشته‌های با طول ناشناخته، خالی در نظر گرفته می‌شوند. آرگومان‌های عددی که مشخص است به زیرمجموعه‌ای از نوع خود محدود هستند، یا آرگومان‌های رشته‌ای که خروجی آن‌ها چه با دقت دستورالعمل آن‌ها و چه با مجموعه‌ای متناهی از رشته‌های لفظی محدود شده باشد، مقداری درون آن محدوده در نظر گرفته می‌شوند که منجر به بیشترین بایت در خروجی گردد. برای مثال، فراخوانی زیر به \f(CW\*(C`sprintf\*(C'\fR شناسایی می‌شود زیرا حتی با برابر صفر بودن هر دو متغیر \fIa\fR و \fIb\fR، نویسهٔ پایانی NUL (\f(CW\*(Aq\e0\*(Aq\fR) اضافه شده توسط تابع به بافر مقصد، فراتر از انتهای آن نوشته خواهد شد. افزایش اندازهٔ بافر به میزان یک بایت برای جلوگیری از هشدار کافی است، هرچند ممکن است برای جلوگیری از سرریز کافی نباشد. .Sp .Vb 5 \& void f (int a, int b) \& { \& char buf [13]; \& sprintf (buf, "a = %i, b = %i\en", a, b); \& } .Ve .IP \fB\-Wformat\-overflow=2\fR 4 .IX Item "-Wformat-overflow=2" سطح \fI2\fR علاوه بر این، درباره فراخوانی‌هایی هشدار می‌دهد که ممکن است در صورت دریافت یک آرگومان با طول یا اندازهٔ کافی، بافر مقصد را سرریز کنند. در سطح \&\fI2\fR، برای آرگومان‌های عددی ناشناخته مقدار کمینهٔ قابل نمایش برای انواع علامت‌دار با دقتی بیشتر از ۱، و در غیر این صورت مقدار بیشینهٔ قابل نمایش فرض می‌شود. آرگومان‌های رشته‌ای ناشناخته که طول آن‌ها را نتوان محدود به دقت دستورالعمل، یا مجموعه‌ای متناهی از رشته‌های لفظی که ممکن است به آن‌ها ارزیابی شوند، یا آرایهٔ نویسه‌ای که ممکن است به آن اشاره کنند فرض کرد، ۱ نویسه طولانی در نظر گرفته می‌شوند. .Sp در سطح \fI2\fR، فراخوانی در مثال بالا مجدداً شناسایی و گزارش می‌شود، اما این بار به این دلیل که با برابر بودن \fIa\fR با یک مقدار ۳۲ بیتی \f(CW\*(C`INT_MIN\*(C'\fR، اولین دستورالعمل \&\f(CW%i\fR برخی از ارقام خود را فراتر از انتهای بافر مقصد خواهد نوشت. برای ایمن‌سازی این فراخوانی بدون توجه به مقادیر این دو متغیر، اندازهٔ بافر مقصد باید به حداقل ۳۴ بایت افزایش یابد. GCC اندازهٔ کمینهٔ بافر را در یک یادداشت اطلاعاتی پس از هشدار درج می‌کند. .Sp یک جایگزین برای افزایش اندازهٔ بافر مقصد، محدود کردن دامنهٔ مقادیر قالب‌بندی‌شده است. بیشینهٔ طول آرگومان‌های رشته‌ای را می‌توان با مشخص کردن دقت در دستورالعمل قالب محدود کرد. هنگامی که بتوان آرگومان‌های عددی دستورالعمل‌های قالب را محدود به کمتر از دقت نوع آن‌ها فرض کرد، انتخاب یک تغییردهندهٔ طول مناسب برای مشخص‌کنندهٔ قالب، اندازهٔ بافر مورد نیاز را کاهش خواهد داد. برای مثال، اگر در مثال بالا بتوان فرض کرد که \fIa\fR و \fIb\fR در محدودهٔ دقت نوع \f(CW\*(C`short int\*(C'\fR هستند، استفاده از دستورالعمل قالب \f(CW%hi\fR یا تبدیل صریح نوع آرگومان به \f(CW\*(C`short\*(C'\fR، بیشینهٔ اندازهٔ مورد نیاز بافر را به ۲۴ بایت کاهش می‌دهد. .Sp .Vb 5 \& void f (int a, int b) \& { \& char buf [23]; \& sprintf (buf, "a = %hi, b = %i\en", a, (short)b); \& } .Ve .RE .RS 4 .RE .IP \fB\-Wno\-format\-zero\-length\fR 4 .IX Item "-Wno-format-zero-length" اگر \fB\-Wformat\fR مشخص شده باشد، دربارهٔ قالب‌های با طول صفر هشدار ندهد. استاندارد C مشخص می‌کند که قالب‌های با طول صفر مجاز هستند. .IP \fB\-Wformat\-nonliteral\fR 4 .IX Item "-Wformat-nonliteral" اگر \fB\-Wformat\fR مشخص شده باشد، همچنین در صورتی که رشتهٔ قالب یک رشته لفظی نبوده و بنابراین قابل بررسی نباشد، هشدار می‌دهد، مگر این‌که تابع قالب آرگومان‌های قالب خود را به صورت یک \f(CW\*(C`va_list\*(C'\fR دریافت کند. .IP \fB\-Wformat\-security\fR 4 .IX Item "-Wformat-security" اگر \fB\-Wformat\fR مشخص شده باشد، همچنین دربارهٔ استفاده‌هایی از توابع قالب که نشان‌دهندهٔ مشکلات امنیتی احتمالی هستند هشدار می‌دهد. در حال حاضر، این گزینه دربارهٔ فراخوانی‌های توابع \f(CW\*(C`printf\*(C'\fR و \f(CW\*(C`scanf\*(C'\fR در جایی که رشتهٔ قالب یک رشته لفظی نباشد و هیچ آرگومان قالبی وجود نداشته باشد، مانند \f(CW\*(C`printf (foo);\*(C'\fR هشدار می‌دهد. این ممکن است در صورتی که رشتهٔ قالب از ورودی غیرقابل‌اعتماد آمده باشد و حاوی \fR\f(CB%n\fR\fB\fR باشد، یک رخنهٔ امنیتی باشد. (این مورد در حال حاضر زیرمجموعه‌ای از مواردی است که \fB\-Wformat\-nonliteral\fR دربارهٔ آن‌ها هشدار می‌دهد، اما در آینده ممکن است هشدارهایی به \fB\-Wformat\-security\fR اضافه شوند که در \fB\-Wformat\-nonliteral\fR گنجانده نشده‌اند.) .IP \fB\-Wformat\-signedness\fR 4 .IX Item "-Wformat-signedness" اگر \fB\-Wformat\fR مشخص شده باشد، همچنین در صورتی که رشتهٔ قالب نیازمند یک آرگومان بدون علامت باشد و آرگومان علامت‌دار باشد و بالعکس، هشدار می‌دهد. .IP \fB\-Wformat\-truncation\fR 4 .IX Item "-Wformat-truncation" .PD 0 .IP \fB\-Wformat\-truncation=\fR\fIlevel\fR 4 .IX Item "-Wformat-truncation=level" .PD هشدار دربارهٔ فراخوانی‌های توابع ورودی/خروجی قالب‌بندی‌شده مانند \f(CW\*(C`snprintf\*(C'\fR و \f(CW\*(C`vsnprintf\*(C'\fR که ممکن است منجر به بریده‌شدن خروجی شوند. هنگامی که نتوان تعداد دقیق بایت‌های نوشته‌شده توسط یک دستورالعمل قالب را در زمان ترجمه تعیین کرد، بر اساس روش‌های اکتشافی که به آرگومان \fIlevel\fR و بهینه‌سازی وابسته‌اند تخمین زده می‌شود. در حالی که فعال کردن بهینه‌سازی در بیشتر موارد دقت هشدار را بهبود می‌بخشد، همچنین ممکن است منجر به مثبت کاذب شود. به جز مواردی که خلاف آن ذکر شده باشد، این گزینه از همان منطق \fB\-Wformat\-overflow\fR استفاده می‌کند. .RS 4 .IP \fB\-Wformat\-truncation\fR 4 .IX Item "-Wformat-truncation" .PD 0 .IP \fB\-Wformat\-truncation=1\fR 4 .IX Item "-Wformat-truncation=1" .PD سطح \fI1\fR از \fB\-Wformat\-truncation\fR که توسط \fB\-Wformat\fR فعال می‌شود رویکردی محافظه‌کارانه را به کار می‌گیرد که فقط درباره فراخوانی‌هایی به توابع کران‌دار هشدار می‌دهد که مقدار بازگشتی آن‌ها استفاده نشده است و به احتمال زیاد منجر به بریده‌شدن خروجی می‌شوند. .IP \fB\-Wformat\-truncation=2\fR 4 .IX Item "-Wformat-truncation=2" سطح \fI2\fR علاوه بر این، درباره فراخوانی‌هایی به توابع کران‌دار هشدار می‌دهد که مقدار بازگشتی آن‌ها استفاده شده است و در صورت دریافت آرگومانی با طول یا اندازهٔ کافی، ممکن است به بریده‌شدن منجر شوند. .RE .RS 4 .RE .IP \fB\-Wformat\-y2k\fR 4 .IX Item "-Wformat-y2k" اگر \fB\-Wformat\fR مشخص شده باشد، همچنین دربارهٔ قالب‌های \f(CW\*(C`strftime\*(C'\fR که ممکن است سال را تنها به صورت دو رقمی تولید کنند، هشدار می‌دهد..IP \fB\-Wnonnull\fR 4 .IX Item "-Wnonnull" هشدار دربارهٔ ارسال یک اشاره‌گر null برای آرگومان‌هایی که با صفتِ تابع \f(CW\*(C`nonnull\*(C'\fR به عنوان نیازمند یک مقدار غیر null نشانه‌گذاری شده‌اند. .Sp گزینهٔ \&\fB\-Wnonnull\fR در \fB\-Wall\fR و \fB\-Wformat\fR گنجانده شده است. این گزینه می‌تواند با گزینهٔ \fB\-Wno\-nonnull\fR غیرفعال شود. .IP \fB\-Wnonnull\-compare\fR 4 .IX Item "-Wnonnull-compare" هشدار هنگام مقایسهٔ یک آرگومان نشانه‌گذاری‌شده با صفتِ تابع \f(CW\*(C`nonnull\*(C'\fR با null در داخل تابع. .Sp گزینهٔ \&\fB\-Wnonnull\-compare\fR در \fB\-Wall\fR گنجانده شده است. این گزینه می‌تواند با گزینهٔ \fB\-Wno\-nonnull\-compare\fR غیرفعال شود. .IP \fB\-Wnull\-dereference\fR 4 .IX Item "-Wnull-dereference" هشدار اگر کامپایلر مسیرهایی را تشخیص دهد که به دلیل ارجاع‌زدایی از یک اشاره‌گر null، موجب رفتار خطاساز یا تعریف‌نشده (undefined behavior) می‌شوند. این گزینه تنها زمانی فعال است که \fB\-fdelete\-null\-pointer\-checks\fR فعال باشد، که در بیشتر معماری‌های مقصد با بهینه‌سازی‌ها فعال می‌شود. دقت این هشدارها به گزینه‌های بهینه‌سازیِ استفاده‌شده بستگی دارد. .IP \fB\-Wno\-musttail\-local\-addr\fR 4 .IX Item "-Wno-musttail-local-addr" دربارهٔ ارسال اشاره‌گر (یا در C++، یک ارجاع/مرجع) به یک متغیر محلی یا برچسب به آرگومان یک فراخوانی \f(CW\*(C`musttail\*(C'\fR هشدار نده. آن متغیرها پیش از دستور فراخوانی پایانی (tail call) از حوزه (scope) خارج می‌شوند. .IP \fB\-Wmaybe\-musttail\-local\-addr\fR 4 .IX Item "-Wmaybe-musttail-local-addr" هشدار هنگامی که آدرس یک متغیر محلی می‌تواند به یک فراخوانی \f(CW\*(C`musttail\*(C'\fR نشت کند (escape)، مگر اینکه پیش از فراخوانی \f(CW\*(C`musttail\*(C'\fR از حوزه خارج شده باشد. .Sp .Vb 1 \& int foo (int *); \& \& int \& bar (int *x) \& { \& if (x[0] == 1) \& { \& int a = 42; \& foo (&a); \& /* Without the C attribute this call would not \& be tail called, because address of the C variable escapes \& and the second foo call could dereference it. With the attribute \& the local variables are assumed to go out of scope immediately \& before the tail call instruction and the compiler warns about \& this. */ \& [[gnu::musttail]] return foo (nullptr); \& } \& else \& { \& { \& int a = 42; \& foo (&a); \& } \& /* The C variable isn\*(Aqt already in scope, so even when it \& escaped, even without C attribute it would be \& undefined behavior to dereference it and the compiler could \& turn this into a tail call. No warning is diagnosed here. */ \& [[gnu::musttail]] return foo (nullptr); \& } \& } .Ve .Sp این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wnrvo\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wnrvo (C++ and Objective-C++ only)" هشدار اگر کامپایلر کپی از یک متغیر محلی به مقدار بازگشتی یک تابع را در زمینه‌ای که طبق [class.copy.elision] مجاز است، حذف نکند (elide نکند). این حذف کپی معمولاً به عنوان بهینه‌سازی مقدار بازگشتی نام‌گذاری‌شده (NRVO یا Named Return Value Optimization) شناخته می‌شود. برای نمونه، در مثال زیر کامپایلر نمی‌تواند کپی‌ها را از هر دوی v1 و v2 حذف کند، بنابراین هیچ‌کدام را حذف نمی‌کند. .Sp .Vb 7 \& std::vector f() \& { \& std::vector v1, v2; \& // ... \& if (cond) return v1; \& else return v2; // warning: not eliding copy \& } .Ve .IP \fB\-Winfinite\-recursion\fR 4 .IX Item "-Winfinite-recursion" هشدار دربارهٔ فراخوانی‌های بازگشتی بی‌نهایت. این هشدار در تمام سطوح بهینه‌سازی مؤثر است اما برای تشخیص بازگشت بی‌نهایت در فراخوانی‌های میان دو یا چند تابع، به بهینه‌سازی نیاز دارد. گزینهٔ \&\fB\-Winfinite\-recursion\fR در \fB\-Wall\fR گنجانده شده است. .Sp با \fB\-Wanalyzer\-infinite\-recursion\fR مقایسه شود که تشخیص مشابهی ارائه می‌دهد، اما به شیوه‌ای متفاوت پیاده‌سازی شده است (به عنوان بخشی از \fB\-fanalyzer\fR). .IP "\fB\-Winit\-self\fR (فقط C، C++، Objective\-C و Objective\-C++)" 4 .IX Item "-Winit-self (C, C++, Objective-C and Objective-C++ only)" هشدار دربارهٔ متغیرهای مقداردهی‌نشده‌ای که با خودشان مقداردهی اولیه می‌شوند. توجه داشته باشید که این گزینه تنها می‌تواند همراه با گزینهٔ \fB\-Wuninitialized\fR استفاده شود. .Sp برای مثال، GCC در قطعه‌کد زیر دربارهٔ مقداردهی‌نشده بودن \f(CW\*(C`i\*(C'\fR تنها زمانی هشدار می‌دهد که \fB\-Winit\-self\fR مشخص شده باشد: .Sp .Vb 5 \& int f() \& { \& int i = i; \& return i; \& } .Ve .Sp این هشدار در C++ توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-implicit\-int\fR (فقط C و Objective\-C)" 4 .IX Item "-Wno-implicit-int (C and Objective-C only)" این گزینه هشدارهایی را کنترل می‌کند که در آن‌ها اعلان، نوعی را مشخص نمی‌کند. این هشدار به صورت پیش‌فرض، به عنوان یک خطا، در C99 و گویش‌های بعدی C، و همچنین توسط \fB\-Wall\fR فعال می‌شود. این خطا می‌تواند با استفاده از \fB\-fpermissive\fR (همراه با برخی خطاهای دیگر)، یا فقط برای این خطا، با \fB\-Wno\-error=implicit\-int\fR به یک هشدار تنزل یابد. .Sp این هشدار توسط \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-implicit\-function\-declaration\fR (فقط C و Objective\-C)" 4 .IX Item "-Wno-implicit-function-declaration (C and Objective-C only)" این گزینه هشدارهایی را کنترل می‌کند که در آن‌ها یک تابع پیش از اعلان شدن استفاده شده است. این هشدار به صورت پیش‌فرض، به عنوان یک خطا، در C99 و گویش‌های بعدی C، و همچنین توسط \fB\-Wall\fR فعال می‌شود. این خطا می‌تواند با استفاده از \fB\-fpermissive\fR (همراه با برخی خطاهای دیگر)، یا فقط برای این خطا، با \&\fB\-Wno\-error=implicit\-function\-declaration\fR به یک هشدار تنزل یابد. .Sp این هشدار توسط \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wimplicit\fR (فقط C و Objective\-C)" 4 .IX Item "-Wimplicit (C and Objective-C only)" مشابه \fB\-Wimplicit\-int\fR و \fB\-Wimplicit\-function\-declaration\fR است. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Whardened\fR 4 .IX Item "-Whardened" هشدار هنگامی که \fB\-fhardened\fR گزینه‌ای از مجموعهٔ خود را فعال نکرده باشد (که برای آن به \fB\-fhardened\fR مراجعه کنید). برای نمونه، استفادهٔ هم‌زمان از \fB\-fhardened\fR و \fB\-fstack\-protector\fR در خط فرمان باعث می‌شود \&\fB\-Whardened\fR هشدار دهد زیرا \fB\-fstack\-protector\-strong\fR توسط \fB\-fhardened\fR فعال نخواهد شد. .Sp این هشدار به صورت پیش‌فرض فعال است و تنها زمانی اثر دارد که \fB\-fhardened\fR فعال باشد. .IP \fB\-Wimplicit\-fallthrough\fR 4 .IX Item "-Wimplicit-fallthrough" گزینهٔ \&\fB\-Wimplicit\-fallthrough\fR مشابه \fB\-Wimplicit\-fallthrough=3\fR است و \fB\-Wno\-implicit\-fallthrough\fR مشابه \&\fB\-Wimplicit\-fallthrough=0\fR است. .IP \fB\-Wimplicit\-fallthrough=\fR\fIn\fR 4 .IX Item "-Wimplicit-fallthrough=n" هشدار هنگامی که یک case در switch بدون وقفه به مورد بعدی ادامه یابد (fall through رخ دهد). برای مثال: .Sp .Vb 11 \& switch (cond) \& { \& case 1: \& a = 1; \& break; \& case 2: \& a = 2; \& case 3: \& a = 3; \& break; \& } .Ve .Sp این هشدار زمانی که آخرین دستور یک case نتواند به مورد بعدی سرریز کند، هشداری صادر نمی‌کند؛ مثلاً زمانی که یک دستور return یا فراخوانی تابعی که با صفت noreturn اعلان شده وجود داشته باشد. گزینهٔ \fB\-Wimplicit\-fallthrough=\fR همچنین دستورهای جریان کنترل مانند if را در نظر می‌گیرد و تنها در موارد مقتضی هشدار می‌دهد. به عنوان مثال: .Sp .Vb 10 \& switch (cond) \& { \& case 1: \& if (i > 3) { \& bar (5); \& break; \& } else if (i < 1) { \& bar (0); \& } else \& return; \& default: \& ... \& } .Ve .Sp از آنجا که مواردی وجود دارد که در آن‌ها ادامه‌یافتن یک switch case به مورد بعدی (fall through) مطلوب است، GCC صفتی با نام \f(CW\*(C`_\|_attribute_\|_ ((fallthrough))\*(C'\fR ارائه می‌دهد که به همراه یک دستور پوچ (null statement) برای فرونشاندن این هشداری که در حالت عادی رخ می‌دهد، استفاده می‌شود: .Sp.Vb 8 \& switch (cond) \& { \& case 1: \& bar (0); \& _\|_attribute_\|_ ((fallthrough)); \& default: \& ... \& } .Ve .Sp زبان C++17 روشی استاندارد برای فرونشاندن هشدار \fB\-Wimplicit\-fallthrough\fR با استفاده از \f(CW\*(C`[[fallthrough]];\*(C'\fR به جای صفت گنو فراهم می‌کند. در C++11 یا C++14 کاربران می‌توانند از \f(CW\*(C`[[gnu::fallthrough]];\*(C'\fR استفاده کنند، که یک افزونه گنو است. به جای این صفت‌ها، افزودن یک کامنت fallthrough نیز برای خاموش کردن هشدار امکان‌پذیر است. تمام بدنه کامنتِ سبک C یا C++ باید با عبارات منظم داده‌شده در زیر مطابقت داشته باشد. آرگومان گزینه \fIn\fR مشخص می‌کند چه نوع کامنت‌هایی پذیرفته می‌شوند: .RS 4 .IP "*<\fB\-Wimplicit\-fallthrough=0\fR هشدار را به‌طور کامل غیرفعال می‌کند.>" 4 .IX Item "*<-Wimplicit-fallthrough=0 disables the warning altogether.>" .PD 0 .ie n .IP "*<\fB\-Wimplicit\-fallthrough=1\fR با عبارت منظم "".*"" مطابقت دارد،>" 4 .el .IP "*<\fB\-Wimplicit\-fallthrough=1\fR با عبارت منظم \f(CW.*\fR مطابقت دارد،>" 4 .IX Item "*<-Wimplicit-fallthrough=1 matches .* regular>" .PD هر کامنتی به عنوان کامنت fallthrough در نظر گرفته می‌شود. .IP "*<\fB\-Wimplicit\-fallthrough=2\fR بدون حساسیت به حروف بزرگ و کوچک با>" 4 .IX Item "*<-Wimplicit-fallthrough=2 case insensitively matches>" عبارت منظم \&\f(CW\*(C`.*falls?[ \et\-]*thr(ough|u).*\*(C'\fR مطابقت دارد. .IP "*<\fB\-Wimplicit\-fallthrough=3\fR با حساسیت به حروف بزرگ و کوچک با یکی از>" 4 .IX Item "*<-Wimplicit-fallthrough=3 case sensitively matches one of the>" عبارات منظم زیر مطابقت دارد: .RS 4 .ie n .IP "*<""\-fallthrough"">" 4 .el .IP *<\f(CW\-fallthrough\fR> 4 .IX Item "*<-fallthrough>" .PD 0 .ie n .IP "*<""@fallthrough@"">" 4 .el .IP *<\f(CW@fallthrough@\fR> 4 .IX Item "*<@fallthrough@>" .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4 .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4 .IX Item "*" .ie n .IP "*<""[ \et.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |\-)?THR(OUGH|U)[ \et.!]*(\-[^\en\er]*)?"">" 4 .el .IP "*<\f(CW[ \et.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |\-)?THR(OUGH|U)[ \et.!]*(\-[^\en\er]*)?\fR>" 4 .IX Item "*<[ t.!]*(ELSE,? |INTENTIONAL(LY)? )?FALL(S | |-)?THR(OUGH|U)[ t.!]*(-[^nr]*)?>" .ie n .IP "*<""[ \et.!]*(Else,? |Intentional(ly)? )?Fall((s | |\-)[Tt]|t)hr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4 .el .IP "*<\f(CW[ \et.!]*(Else,? |Intentional(ly)? )?Fall((s | |\-)[Tt]|t)hr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4 .IX Item "*<[ t.!]*(Else,? |Intentional(ly)? )?Fall((s | |-)[Tt]|t)hr(ough|u)[ t.!]*(-[^nr]*)?>" .ie n .IP "*<""[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?"">" 4 .el .IP "*<\f(CW[ \et.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |\-)?thr(ough|u)[ \et.!]*(\-[^\en\er]*)?\fR>" 4 .IX Item "*<[ t.!]*([Ee]lse,? |[Ii]ntentional(ly)? )?fall(s | |-)?thr(ough|u)[ t.!]*(-[^nr]*)?>" .PD .RE .RS 4 .RE .IP "*<\fB\-Wimplicit\-fallthrough=4\fR با حساسیت به حروف بزرگ و کوچک با یکی از>" 4 .IX Item "*<-Wimplicit-fallthrough=4 case sensitively matches one of the>" عبارات منظم زیر مطابقت دارد: .RS 4 .ie n .IP "*<""\-fallthrough"">" 4 .el .IP *<\f(CW\-fallthrough\fR> 4 .IX Item "*<-fallthrough>" .PD 0 .ie n .IP "*<""@fallthrough@"">" 4 .el .IP *<\f(CW@fallthrough@\fR> 4 .IX Item "*<@fallthrough@>" .ie n .IP "*<""lint \-fallthrough[ \et]*"">" 4 .el .IP "*<\f(CWlint \-fallthrough[ \et]*\fR>" 4 .IX Item "*" .ie n .IP "*<""[ \et]*FALLTHR(OUGH|U)[ \et]*"">" 4 .el .IP "*<\f(CW[ \et]*FALLTHR(OUGH|U)[ \et]*\fR>" 4 .IX Item "*<[ t]*FALLTHR(OUGH|U)[ t]*>" .PD .RE .RS 4 .RE .IP "*<\fB\-Wimplicit\-fallthrough=5\fR هیچ کامنتی را به‌عنوان کامنت>" 4 .IX Item "*<-Wimplicit-fallthrough=5 doesn't recognize any comments as>" fallthrough تشخیص نمی‌دهد، تنها صفت‌ها هشدار را غیرفعال می‌کنند. .RE .RS 4 .Sp کامنت باید پس از فاصله‌های خالی اختیاری و سایر کامنت‌ها، با کلمات کلیدی \f(CW\*(C`case\*(C'\fR یا \f(CW\*(C`default\*(C'\fR، یا با یک برچسب کاربر که پیش از یک برچسب \f(CW\*(C`case\*(C'\fR یا \f(CW\*(C`default\*(C'\fR آمده است، دنبال شود. .Sp .Vb 8 \& switch (cond) \& { \& case 1: \& bar (0); \& /* FALLTHRU */ \& default: \& ... \& } .Ve .Sp هشدار \fB\-Wimplicit\-fallthrough=3\fR توسط \fB\-Wextra\fR فعال می‌شود. .RE .IP "\fB\-Wno\-if\-not\-aligned\fR (تنها C، C++، Objective\-C و Objective\-C++)" 4 .IX Item "-Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)" کنترل می‌کند که آیا هشدارهای ایجادشده توسط صفت \f(CW\*(C`warn_if_not_aligned\*(C'\fR باید صادر شوند یا خیر. این هشدارها به‌طور پیش‌فرض فعال هستند. .IP "\fB\-Wignored\-qualifiers\fR (تنها C و C++)" 4 .IX Item "-Wignored-qualifiers (C and C++ only)" اگر نوع بازگشتی یک تابع دارای توصیف‌گر نوع (type qualifier) مانند \f(CW\*(C`const\*(C'\fR باشد، هشدار می‌دهد. در ISO C چنین توصیف‌گر نوعی بی‌اثر است، زیرا مقدار بازگردانده‌شده توسط یک تابع lvalue نیست. در C++، این هشدار فقط برای نوع‌های اسکالر یا \f(CW\*(C`void\*(C'\fR صادر می‌شود. استاندارد ISO C نوع‌های بازگشتی مقیدشده (qualified) \f(CW\*(C`void\*(C'\fR را در تعاریف توابع ممنوع کرده است، بنابراین چنین نوع‌های بازگشتی حتی بدون این گزینه نیز همیشه هشدار دریافت می‌کنند. .Sp این هشدار همچنین توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wno\-ignored\-attributes\fR (تنها C و C++)" 4 .IX Item "-Wno-ignored-attributes (C and C++ only)" این گزینه هشدارها را هنگام نادیده گرفته شدن یک صفت کنترل می‌کند. این گزینه با گزینه \&\fB\-Wattributes\fR متفاوت است زیرا هر زمان کامپایلر تصمیم بگیرد یک صفت را کنار بگذارد، هشدار می‌دهد، نه فقط زمانی که صفت ناشناخته باشد، در جای نادرست استفاده شده باشد، و غیره. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wmain\fR 4 .IX Item "-Wmain" اگر نوع \f(CW\*(C`main\*(C'\fR مشکوک باشد هشدار می‌دهد. \f(CW\*(C`main\*(C'\fR باید تابعی با پیوند خارجی (external linkage) باشد، int بازگرداند، و صفر، دو یا سه آرگومان از نوع‌های مناسب دریافت کند. این هشدار به‌طور پیش‌فرض در C++ فعال است و توسط \fB\-Wall\fR یا \fB\-Wpedantic\fR نیز فعال می‌شود. .Sp این هشدار توسط \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wmisleading\-indentation\fR (تنها C و C++)" 4 .IX Item "-Wmisleading-indentation (C and C++ only)" زمانی که تورفتگی کد ساختار بلوک را منعکس نمی‌کند، هشدار می‌دهد. به‌طور مشخص، برای عبارت‌های \f(CW\*(C`if\*(C'\fR، \f(CW\*(C`else\*(C'\fR، \f(CW\*(C`while\*(C'\fR و \&\f(CW\*(C`for\*(C'\fR که دارای یک دستورِ تحتِ کنترلِ بدون آکولاد هستند و به دنبال آن یک دستور مهارنشده با همان میزان تورفتگی آمده باشد، هشدار صادر می‌شود. .Sp در مثال زیر، فراخوانی \(lqbar\(rq به شکلی گمراه‌کننده طوری تورفته شده است که گویی توسط شرط \(lqif\(rq مهار شده است. .Sp .Vb 3 \& if (some_condition ()) \& foo (); \& bar (); /* Gotcha: this is not guarded by the "if". */ .Ve .Sp در صورت ترکیب تب‌ها و فاصله‌ها، این هشدار از گزینه \&\fB\-ftabstop=\fR برای تعیین هم‌تراز بودن دستورها استفاده می‌کند (پیش‌فرض 8 است). .Sp این هشدار برای کدهایی که دارای منطق پیش‌پردازنده چندخطی هستند، مانند مثال زیر، صادر نمی‌شود. .Sp .Vb 6 \& if (flagA) \& foo (0); \& #if SOME_CONDITION_THAT_DOES_NOT_HOLD \& if (flagB) \& #endif \& foo (1); .Ve .Sp این هشدار پس از یک دستورالعمل \f(CW\*(C`#line\*(C'\fR صادر نمی‌شود، زیرا این دستورالعمل معمولاً نشان‌دهنده کد تولید خودکار است و هیچ فرضی درباره ساختار فایلی که دستورالعمل به آن ارجاع می‌دهد نمی‌توان داشت. .Sp این هشدار توسط \fB\-Wall\fR در C و C++ فعال می‌شود. .IP \fB\-Wmissing\-attributes\fR 4 .IX Item "-Wmissing-attributes" زمانی که در اعلان یک تابع، یک یا چند صفت که تابع مرتبط با آن اعلان شده است وجود نداشته باشد و نبودِ آن‌ها ممکن است بر صحت یا کارایی کد تولیدشده تأثیر نامطلوب بگذارد، هشدار می‌دهد. به عنوان مثال، این هشدار برای اعلان‌های نام‌های مستعاری (aliases) صادر می‌شود که از صفت‌ها برای مشخص کردن نیازمندی‌های با محدودیت کمتر نسبت به اهداف خود استفاده می‌کنند. این وضعیت معمولاً نشان‌دهنده یک فرصت بهینه‌سازی بالقوه است. در مقابل، گزینه \fB\-Wattribute\-alias=2\fR هشدارهایی را که در صورت محدودکننده‌تر بودن نام مستعار نسبت به هدف صادر می‌شوند کنترل می‌کند، وضعیتی که می‌تواند به تولید کد نادرست منجر شود. صفت‌های بررسی‌شده شامل \f(CW\*(C`alloc_align\*(C'\fR، \f(CW\*(C`alloc_size\*(C'\fR، \&\f(CW\*(C`cold\*(C'\fR، \f(CW\*(C`const\*(C'\fR، \f(CW\*(C`hot\*(C'\fR، \f(CW\*(C`leaf\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR، \&\f(CW\*(C`nonnull\*(C'\fR، \f(CW\*(C`noreturn\*(C'\fR، \f(CW\*(C`nothrow\*(C'\fR، \f(CW\*(C`pure\*(C'\fR، \&\f(CW\*(C`returns_nonnull\*(C'\fR و \f(CW\*(C`returns_twice\*(C'\fR هستند. .Sp در C++، این هشدار زمانی صادر می‌شود که یک تخصیص صریح (explicit specialization) از یک الگوی اولیه (primary template) که با صفت‌های \f(CW\*(C`alloc_align\*(C'\fR، \f(CW\*(C`alloc_size\*(C'\fR، \&\f(CW\*(C`assume_aligned\*(C'\fR، \f(CW\*(C`format\*(C'\fR، \f(CW\*(C`format_arg\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR یا \f(CW\*(C`nonnull\*(C'\fR اعلان شده، بدون آن صفت اعلان شود. صفت‌های \f(CW\*(C`deprecated\*(C'\fR، \&\f(CW\*(C`error\*(C'\fR و \f(CW\*(C`warning\*(C'\fR این هشدار را فرومی‌نشانند. .Sp می‌توانید از صفت \f(CW\*(C`copy\*(C'\fR برای اعمال همان مجموعه صفت‌های یک اعلان بر روی اعلانی دیگر استفاده کنید، بدون آنکه نیاز به برشمردن صریح صفت‌ها باشد. این صفت را می‌توان روی اعلان‌های توابع، متغیرها، یا نوع‌ها اعمال کرد. .Sp گزینه \&\fB\-Wmissing\-attributes\fR توسط \fB\-Wall\fR فعال می‌شود. .Sp برای مثال، از آنجا که اعلان الگوی تابع اولیه زیر از هر دو صفت \f(CW\*(C`malloc\*(C'\fR و \f(CW\*(C`alloc_size\*(C'\fR استفاده می‌کند، اعلان تخصیص صریح این الگو به دلیل نداشتن یکی از صفت‌ها تشخیص داده شده و هشدار دریافت می‌کند. .Sp.Vb 3 \& template \& T* _\|_attribute_\|_ ((malloc, alloc_size (1))) \& allocate (size_t); \& \& template <> \& void* _\|_attribute_\|_ ((malloc)) // missing alloc_size \& allocate (size_t); .Ve .IP \fB\-Wmissing\-braces\fR 4 .IX Item "-Wmissing-braces" اگر مقداردهندهٔ اولیه برای یک شیء تجمیعی (aggregate) یا union به طور کامل در آکولاد محصور نشده باشد، هشدار می‌دهد. در مثال زیر، مقداردهندهٔ اولیه برای \f(CW\*(C`a\*(C'\fR کاملاً درون آکولاد قرار نگرفته، اما برای \f(CW\*(C`b\*(C'\fR به طور کامل درون آکولاد است. .Sp .Vb 2 \& int a[2][2] = { 0, 1, 2, 3 }; \& int b[2][2] = { { 0, 1 }, { 2, 3 } }; .Ve .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wmissing\-include\-dirs\fR (تنها C، C++، Objective\-C، Objective\-C++ و Fortran)" 4 .IX Item "-Wmissing-include-dirs (C, C++, Objective-C, Objective-C++ and Fortran only)" اگر یک دایرکتوری include که توسط کاربر مشخص شده است وجود نداشته باشد، هشدار می‌دهد. این گزینه به طور پیش‌فرض برای C، C++، Objective\-C و Objective\-C++ غیرفعال است. برای Fortran، این گزینه به طور پیش‌فرض تا حدی فعال بوده و فقط برای \-I و \-J هشدار می‌دهد. .IP \fB\-Wno\-missing\-profile\fR 4 .IX Item "-Wno-missing-profile" این گزینه هشدارهای مربوط به نبود پروفایل‌های بازخورد را هنگام استفاده از گزینهٔ \fB\-fprofile\-use\fR کنترل می‌کند. این گزینه مواردی را شناسایی می‌کند که در آن یک تابع جدید یا یک فایل جدید در فاصلهٔ بین کامپایل با \fB\-fprofile\-generate\fR و \fB\-fprofile\-use\fR، بدون تولید مجدد پروفایل‌ها، اضافه شده باشد. در این موارد، فایل‌های دادهٔ بازخورد پروفایل به ترتیب هیچ اطلاعات بازخوردی برای تابع یا فایل تازه افزوده شده ندارند. همچنین، در حالتی که فایل‌های داده‌های شمارش پروفایل (.gcda) حذف شده باشند، GCC نمی‌تواند از هیچ اطلاعات بازخورد پروفایلی استفاده کند. در تمام این موارد، هشدارهایی صادر می‌شود تا اطلاع دهد که مرحلهٔ تولید پروفایل باید انجام شود. نادیده گرفتن این هشدار می‌تواند منجر به کدی با بهینه‌سازی ضعیف شود. می‌توان از \fB\-Wno\-missing\-profile\fR برای غیرفعال کردن این هشدار استفاده کرد، اما این کار توصیه نمی‌شود و تنها باید زمانی انجام گیرد که نبود داده‌های پروفایل موجه باشد. .IP \fB\-Wmismatched\-dealloc\fR 4 .IX Item "-Wmismatched-dealloc" برای فراخوانی‌های توابع آزادسازی با آرگومان‌های اشاره‌گری که از توابع تخصیص برگردانده شده‌اند در حالی که تابع اولی آزادساز مناسبی برای آن نیست، هشدار می‌دهد. یک جفت تابع را می‌توان با استفاده از صفت \f(CW\*(C`malloc\*(C'\fR به عنوان تخصیص‌دهنده و آزادساز منطبق با یکدیگر پیوند داد. به جز در مواردی که با گزینهٔ \fB\-fno\-builtin\fR غیرفعال شده باشد، توابع استاندارد \f(CW\*(C`calloc\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR، \f(CW\*(C`realloc\*(C'\fR و \f(CW\*(C`free\*(C'\fR و همچنین شکل‌های متناظر \f(CW\*(C`operator new\*(C'\fR و \f(CW\*(C`operator delete\*(C'\fR در C++ به طور ضمنی به عنوان تخصیص‌دهنده و آزادساز منطبق با یکدیگر در نظر گرفته می‌شوند. در مثال زیر، \f(CW\*(C`mydealloc\*(C'\fR آزادساز اشاره‌گرهای برگشتی از \f(CW\*(C`myalloc\*(C'\fR است. .Sp .Vb 1 \& void mydealloc (void*); \& \& _\|_attribute_\|_ ((malloc (mydealloc, 1))) void* \& myalloc (size_t); \& \& void f (void) \& { \& void *p = myalloc (32); \& // ...use p... \& free (p); // warning: not a matching deallocator for myalloc \& mydealloc (p); // ok \& } .Ve .Sp در C++، گزینهٔ مرتبط \fB\-Wmismatched\-new\-delete\fR ناهمخوانی‌های مربوط به \f(CW\*(C`operator new\*(C'\fR یا \f(CW\*(C`operator delete\*(C'\fR را تشخیص می‌دهد. .Sp گزینهٔ \fB\-Wmismatched\-dealloc\fR در \fB\-Wall\fR گنجانده شده است. .IP \fB\-Wmultistatement\-macros\fR 4 .IX Item "-Wmultistatement-macros" دربارهٔ ماکروهای چنددستوریِ ناامنی هشدار می‌دهد که به نظر می‌رسد توسط عبارتی مانند \f(CW\*(C`if\*(C'\fR، \f(CW\*(C`else\*(C'\fR، \f(CW\*(C`for\*(C'\fR، \f(CW\*(C`switch\*(C'\fR یا \f(CW\*(C`while\*(C'\fR محافظت شده‌اند، اما پس از بسط ماکرو، در واقع تنها دستور اول محافظت می‌شود. .Sp برای مثال: .Sp .Vb 3 \& #define DOIT x++; y++ \& if (c) \& DOIT; .Ve .Sp مقدار \f(CW\*(C`y\*(C'\fR را بدون قید و شرط افزایش می‌دهد، نه فقط در زمانی که شرط \f(CW\*(C`c\*(C'\fR برقرار باشد. این مسئله معمولاً با قرار دادن ماکرو درون یک حلقهٔ do\-while برطرف می‌شود: .Sp .Vb 3 \& #define DOIT do { x++; y++; } while (0) \& if (c) \& DOIT; .Ve .Sp این هشدار در C و C++ توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wparentheses\fR 4 .IX Item "-Wparentheses" هشدار می‌دهد اگر پرانتزها در بافت‌های خاصی جا افتاده باشند؛ مانند زمانی که در محلی که انتظار مقدار درستی (truth value) می‌رود یک انتساب قرار دارد، یا وقتی عملگرهایی به صورت تو در تو به کار رفته‌اند که اولویت تقدم آن‌ها اغلب افراد را به اشتباه می‌اندازد. .Sp همچنین اگر مقایسه‌ای مانند \f(CW\*(C`x<=y<=z\*(C'\fR دیده شود هشدار می‌دهد؛ این عبارت معادل \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR است، که تعبیری متفاوت از نشانه‌گذاری متداول ریاضی دارد. .Sp همچنین در مورد استفاده‌های خطرناک از افزونهٔ گنو برای \f(CW\*(C`?:\*(C'\fR که در آن عملوند میانی حذف شده است، هشدار می‌دهد. هنگامی که شرط درون عملگر \f(CW\*(C`?:\*(C'\fR یک عبارت بولی باشد، مقدار حذف‌شده همیشه 1 است. در حالی که برنامه‌نویسان اغلب انتظار دارند مقداری باشد که در داخل عبارت شرطی محاسبه شده است. .Sp برای C++ این گزینه همچنین دربارهٔ برخی موارد پرانتزهای غیرضروری در اعلان‌ها هشدار می‌دهد، که می‌تواند نشان‌دهندهٔ تلاش برای فراخوانی تابع به جای اعلان باشد: .Sp .Vb 5 \& { \& // Declares a local variable called mymutex. \& std::unique_lock (mymutex); \& // User meant std::unique_lock lock (mymutex); \& } .Ve .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-self\-move\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-self-move (C++ and Objective-C++ only)" این هشدار زمانی اعلام می‌شود که مقداری با استفاده از \f(CW\*(C`std::move\*(C'\fR به خودش منتقل شود. چنین \f(CW\*(C`std::move\*(C'\fR کردنی معمولاً هیچ اثری ندارد. .Sp .Vb 9 \& struct T { \& ... \& }; \& void fn() \& { \& T t; \& ... \& t = std::move (t); \& } .Ve .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wsequence\-point\fR 4 .IX Item "-Wsequence-point" دربارهٔ کدهایی که ممکن است به دلیل نقض قواعد نقاط توالی (sequence point) در استانداردهای C و C++ دارای معانی تعریف‌نشده باشند، هشدار می‌دهد. .Sp استانداردهای C و C++ ترتیب ارزیابی عبارت‌ها را در یک برنامهٔ C/C++ بر اساس \fIنقاط توالی (sequence points)\fR تعریف می‌کنند، که بیانگر یک ترتیب جزئی بین اجرای بخش‌های برنامه است: بخش‌هایی که پیش از نقطهٔ توالی اجرا می‌شوند، و بخش‌هایی که پس از آن اجرا می‌گردند. این نقاط پس از ارزیابی یک عبارت کامل (عبارتی که بخشی از یک عبارت بزرگ‌تر نیست)، پس از ارزیابی عملوند نخست عملگرهای \f(CW\*(C`&&\*(C'\fR، \f(CW\*(C`||\*(C'\fR، \f(CW\*(C`? :\*(C'\fR یا \f(CW\*(C`,\*(C'\fR (ویرگول)، پیش از فراخوانی یک تابع (اما پس از ارزیابی آرگومان‌های آن و عبارتی که تابع فراخوانی‌شده را مشخص می‌کند)، و در برخی جاهای دیگر رخ می‌دهند. به جز آنچه توسط قواعد نقطهٔ توالی بیان شده است، ترتیب ارزیابی زیرعبارت‌های یک عبارت تعیین نشده است. تمام این قواعد تنها یک ترتیب جزئی را توصیف می‌کنند نه یک ترتیب کلی؛ زیرا برای نمونه، اگر دو تابع درون یک عبارت بدون وجود نقطهٔ توالی در میان آن‌ها فراخوانی شوند، ترتیبی که توابع در آن فراخوانی می‌شوند نامشخص است. با این حال، کمیتهٔ استاندارد مقرر کرده است که فراخوانی توابع هم‌پوشانی ندارند. .Sp مشخص نشده است که در فاصلهٔ بین نقاط توالی، اعمال تغییرات بر مقادیر اشیاء دقیقاً چه زمانی اثرگذار می‌شوند. برنامه‌هایی که رفتارشان به این موضوع وابسته است، دارای رفتار تعریف‌نشده (undefined behavior) هستند؛ استانداردهای C و C++ تصریح می‌کنند که «بین نقطهٔ توالی قبلی و بعدی، مقدار ذخیره‌شدهٔ یک شیء با ارزیابی یک عبارت باید حداکثر یک بار تغییر کند. افزون بر این، مقدار قبلی تنها باید به منظور تعیین مقداری که قرار است ذخیره شود خوانده شود.». اگر برنامه‌ای این قوانین را نقض کند، نتایج روی هر پیاده‌سازی خاص کاملاً غیرقابل پیش‌بینی خواهد بود. .Sp نمونه‌هایی از کدهایی با رفتار تعریف‌نشده عبارتند از \f(CW\*(C`a = a++;\*(C'\fR، \f(CW\*(C`a[n] = b[n++]\*(C'\fR و \f(CW\*(C`a[i++] = i;\*(C'\fR. برخی موارد پیچیده‌تر توسط این گزینه شناسایی نمی‌شوند و ممکن است گاهی نتایج مثبت کاذب (false positive) ایجاد کند، اما در کل در شناسایی این گونه اشکالات در برنامه‌ها نسبتاً کارآمد ارزیابی شده است. .Sp استاندارد C++17 ترتیب ارزیابی عملوندها را در موارد بیشتری مشخص می‌کند: به ویژه ایجاب می‌کند که سمت راست یک انتساب پیش از سمت چپ آن ارزیابی شود، بنابراین مثال‌های بالا دیگر تعریف‌نشده به حساب نمی‌آیند. با این حال این گزینه همچنان دربارهٔ آن‌ها هشدار می‌دهد تا به افراد کمک کند از نوشتن کدهایی که در C و بازنگری‌های پیشین C++ تعریف‌نشده هستند خودداری نمایند. .Sp متن استاندارد به شکلی گیج‌کننده نگاشته شده است، بنابراین دربارهٔ معنای دقیق قواعد نقطهٔ توالی در موارد خاص و ظریف مباحثاتی وجود دارد. پیوندهایی به مباحث مربوط به این موضوع، از جمله تعاریف رسمی پیشنهادی، را می‌توان در صفحهٔ خواندنی‌های GCC در نشانی <\fBhttps://gcc.gnu.org/readings.html\fR> یافت. .Sp این هشدار برای C و C++ توسط \fB\-Wall\fR فعال می‌شود..IP \fB\-Wno\-return\-local\-addr\fR 4 .IX Item "-Wno-return-local-addr" در مورد بازگرداندن یک اشاره‌گر (یا در C++، یک ارجاع) به متغیری که پس از بازگشت تابع از حوزه خارج می‌شود، هشدار نمی‌دهد. .IP \fB\-Wreturn\-mismatch\fR 4 .IX Item "-Wreturn-mismatch" درباره دستورات \f(CW\*(C`return\*(C'\fR بدون عبارت در توابعی که مقدار بازگشتی آن‌ها غیر از \f(CW\*(C`void\*(C'\fR است، هشدار می‌دهد. همچنین درباره دستور \f(CW\*(C`return\*(C'\fR همراه با یک عبارت در تابعی که نوع بازگشتی آن \f(CW\*(C`void\*(C'\fR است هشدار می‌دهد، مگر اینکه نوع عبارت نیز \f(CW\*(C`void\*(C'\fR باشد. به عنوان یک افزونه گنو (GNU extension)، مورد دوم بدون هشدار پذیرفته می‌شود مگر اینکه \fB\-Wpedantic\fR استفاده شده باشد. .Sp تلاش برای استفاده از مقدار بازگشتی یک تابع غیر\-\f(CW\*(C`void\*(C'\fR به‌جز \f(CW\*(C`main\*(C'\fR که اجرای آن با رسیدن به آکولاد پایانی خاتمه‌دهنده تابع از انتهای آن خارج می‌شود، رفتاری تعریف‌نشده (undefined) است. .Sp این هشدار مختص C بوده و به‌طور پیش‌فرض فعال است. در C99 و گویش‌های جدیدتر زبان، این مورد به عنوان خطا در نظر گرفته می‌شود. می‌توان آن را با استفاده از \fB\-fpermissive\fR (همراه با هشدارهای دیگر)، یا فقط برای این هشدار با \fB\-Wno\-error=return\-mismatch\fR به یک هشدار تنزل داد. .IP \fB\-Wreturn\-type\fR 4 .IX Item "-Wreturn-type" هرگاه تابعی با نوع بازگشتی تعریف شود که به‌طور پیش‌فرض \f(CW\*(C`int\*(C'\fR است، هشدار می‌دهد (مگر اینکه \fB\-Wimplicit\-int\fR فعال باشد که اولویت دارد). همچنین اگر اجرای برنامه ممکن است به انتهای بدنه تابع برسد، یا اگر تابع اصلاً حاوی هیچ دستور \f(CW\*(C`return\*(C'\fR نباشد، هشدار می‌دهد. .Sp تلاش برای استفاده از مقدار بازگشتی یک تابع غیر\-\f(CW\*(C`void\*(C'\fR به‌جز \f(CW\*(C`main\*(C'\fR که با رسیدن به آکولاد پایانی خاتمه‌دهنده تابع از انتهای آن خارج می‌شود، تعریف‌نشده است. .Sp برخلاف C، در C++ خارج شدن جریان اجرا از انتهای یک تابع غیر\-\f(CW\*(C`void\*(C'\fR به‌جز \f(CW\*(C`main\*(C'\fR، حتی زمانی که از مقدار تابع استفاده نمی‌شود نیز به رفتار تعریف‌نشده منجر می‌شود. .Sp این هشدار در C++ به‌طور پیش‌فرض و در غیر این صورت با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-shift\-count\-negative\fR 4 .IX Item "-Wno-shift-count-negative" هشدارهای مربوط به منفی بودن تعداد شیفت را کنترل می‌کند. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wno\-shift\-count\-overflow\fR 4 .IX Item "-Wno-shift-count-overflow" هشدارهای مربوط به وضعیتی که در آن تعداد شیفت بزرگ‌تر یا مساوی با پهنای بیت نوع داده باشد را کنترل می‌کند. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wshift\-negative\-value\fR 4 .IX Item "-Wshift-negative-value" در صورت شیفت به چپ یک مقدار منفی، هشدار می‌دهد. این هشدار با \fB\-Wextra\fR در حالت‌های C99 (و جدیدتر) و C++11 تا C++17 فعال می‌شود. .IP \fB\-Wno\-shift\-overflow\fR 4 .IX Item "-Wno-shift-overflow" .PD 0 .IP \fB\-Wshift\-overflow=\fR\fIn\fR 4 .IX Item "-Wshift-overflow=n" .PD این گزینه‌ها هشدارهای مربوط به سرریزهای شیفت به چپ را کنترل می‌کنند. .RS 4 .IP \fB\-Wshift\-overflow=1\fR 4 .IX Item "-Wshift-overflow=1" این سطح هشدار \fB\-Wshift\-overflow\fR است و به‌طور پیش‌فرض در حالت‌های C99 و C++11 (و جدیدتر) فعال است. این سطح هشدار درباره شیفت به چپ ۱ به درون بیت علامت (sign bit) هشدار نمی‌دهد. (با این حال، در C، چنین سرریزی در زمینه‌هایی که یک عبارت ثابت صحیح الزامی است همچنان پذیرفته نمی‌شود.) در حالت C++20 (و جدیدتر) هیچ هشداری صادر نمی‌شود، زیرا شیفت‌های به چپ علامت‌دار همیشه سرریز چرخشی دارند (wrap). .IP \fB\-Wshift\-overflow=2\fR 4 .IX Item "-Wshift-overflow=2" این سطح هشدار همچنین در مورد شیفت به چپ ۱ به درون بیت علامت هشدار می‌دهد، مگر اینکه حالت C++14 (یا جدیدتر) فعال باشد. .RE .RS 4 .RE .IP \fB\-Wswitch\fR 4 .IX Item "-Wswitch" هرگاه یک دستور \f(CW\*(C`switch\*(C'\fR شاخصی از یک نوع شمارشی (enumerated type) داشته باشد و فاقد \f(CW\*(C`case\*(C'\fR برای یک یا چند کد نام‌گذاری‌شده از آن شمارش باشد، هشدار می‌دهد. (وجود برچسب \f(CW\*(C`default\*(C'\fR مانع این هشدار می‌شود.) برچسب‌های \f(CW\*(C`case\*(C'\fR که با مقادیر شمارشگر (enumerator) تطابق ندارند نیز در صورت استفاده از این گزینه باعث بروز هشدار می‌شوند، مگر اینکه نوع شمارشی با صفت \f(CW\*(C`flag_enum\*(C'\fR نشانه‌گذاری شده باشد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wswitch\-default\fR 4 .IX Item "-Wswitch-default" هرگاه یک دستور \f(CW\*(C`switch\*(C'\fR فاقد حالت \f(CW\*(C`default\*(C'\fR باشد، هشدار می‌دهد. .IP \fB\-Wswitch\-enum\fR 4 .IX Item "-Wswitch-enum" هرگاه یک دستور \f(CW\*(C`switch\*(C'\fR شاخصی از یک نوع شمارشی داشته باشد و فاقد \f(CW\*(C`case\*(C'\fR برای یک یا چند کد نام‌گذاری‌شده از آن شمارش باشد، هشدار می‌دهد. برچسب‌های \f(CW\*(C`case\*(C'\fR که با مقادیر شمارشگر تطابق ندارند نیز در صورت استفاده از این گزینه باعث بروز هشدار می‌شوند، مگر اینکه نوع شمارشی با صفت \f(CW\*(C`flag_enum\*(C'\fR نشانه‌گذاری شده باشد. تنها تفاوت بین \fB\-Wswitch\fR و این گزینه این است که این گزینه حتی در صورت وجود یک برچسب \f(CW\*(C`default\*(C'\fR نیز در مورد کدهای شمارشی از قلم افتاده هشدار می‌دهد. .IP \fB\-Wno\-switch\-bool\fR 4 .IX Item "-Wno-switch-bool" زمانی که یک دستور \f(CW\*(C`switch\*(C'\fR دارای شاخصی از نوع بولی (boolean) باشد و مقادیر case خارج از محدوده نوع بولی باشند، هشدار نمی‌دهد. می‌توان با تبدیل نوع (cast) عبارت کنترل‌کننده به نوعی غیر از \f(CW\*(C`bool\*(C'\fR، این هشدار را سرکوب کرد. برای مثال: .Sp .Vb 4 \& switch ((int) (a == 4)) \& { \& ... \& } .Ve .Sp این هشدار به‌طور پیش‌فرض برای برنامه‌های C و C++ فعال است. .IP \fB\-Wno\-switch\-outside\-range\fR 4 .IX Item "-Wno-switch-outside-range" این گزینه هشدارهایی را کنترل می‌کند که در آن مقدار یک \f(CW\*(C`case\*(C'\fR از دستور \f(CW\*(C`switch\*(C'\fR خارج از محدوده نوع مربوط به خود قرار دارد. این هشدار به‌طور پیش‌فرض برای برنامه‌های C و C++ فعال است. .IP \fB\-Wno\-switch\-unreachable\fR 4 .IX Item "-Wno-switch-unreachable" زمانی که یک دستور \f(CW\*(C`switch\*(C'\fR شامل دستوراتی بین عبارت کنترل‌کننده و اولین برچسب case باشد که هرگز اجرا نخواهند شد، هشدار نمی‌دهد. برای مثال: .Sp .Vb 7 \& switch (cond) \& { \& i = 15; \& ... \& case 5: \& ... \& } .Ve .Sp گزینه \fB\-Wswitch\-unreachable\fR در صورتی که دستور بین عبارت کنترل‌کننده و اولین برچسب case صرفاً یک اعلان (declaration) باشد، هشدار نمی‌دهد: .Sp .Vb 8 \& switch (cond) \& { \& int i; \& ... \& case 5: \& i = 5; \& ... \& } .Ve .Sp این هشدار به‌طور پیش‌فرض برای برنامه‌های C و C++ فعال است. .IP "\fB\-Wsync\-nand\fR (فقط C و C++)" 4 .IX Item "-Wsync-nand (C and C++ only)" هنگامی که توابع توکار \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR و \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR به کار روند، هشدار می‌دهد. معناشناسی این توابع در GCC 4.4 تغییر کرده است. .IP \fB\-Wtrivial\-auto\-var\-init\fR 4 .IX Item "-Wtrivial-auto-var-init" زمانی که \f(CW\*(C`\-ftrivial\-auto\-var\-init\*(C'\fR نتواند متغیر خودکار را مقداردهی اولیه کند، هشدار می‌دهد. یک وضعیت متداول، متغیر خودکاری است که بین عبارت کنترل‌کننده و اولین برچسب case از یک دستور \f(CW\*(C`switch\*(C'\fR اعلان شده باشد. .IP \fB\-Wunused\-but\-set\-parameter\fR 4 .IX Item "-Wunused-but-set-parameter" هرگاه به یک پارامتر تابع مقداری انتساب داده شود، اما در غیر این صورت (به‌جز در اعلان آن) استفاده نشود، هشدار می‌دهد. .Sp برای سرکوب این هشدار از صفت \f(CW\*(C`unused\*(C'\fR استفاده کنید. .Sp این هشدار همچنین با \fB\-Wunused\fR همراه با \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wunused\-but\-set\-variable\fR 4 .IX Item "-Wunused-but-set-variable" هرگاه به یک متغیر محلی مقداری انتساب داده شود، اما در غیر این صورت (به‌جز در اعلان آن) استفاده نشود، هشدار می‌دهد. این هشدار با \fB\-Wall\fR فعال می‌شود. .Sp برای سرکوب این هشدار از صفت \f(CW\*(C`unused\*(C'\fR استفاده کنید. .Sp این هشدار همچنین با \fB\-Wunused\fR که خود با \fB\-Wall\fR فعال می‌شود، فعال می‌گردد. .IP \fB\-Wunused\-function\fR 4 .IX Item "-Wunused-function" هرگاه یک تابع static اعلان شده اما تعریف نشود، یا یک تابع static غیر-inline استفاده نشده باقی بماند، هشدار می‌دهد. این هشدار با \fB\-Wall\fR فعال می‌شود..IP \fB\-Wunused\-label\fR 4 .IX Item "-Wunused-label" هرگاه یک برچسب (label) تعریف شده اما استفاده نشده باشد، هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .Sp برای نادیده گرفتن این هشدار از مشخصهٔ \f(CW\*(C`unused\*(C'\fR استفاده کنید. .IP "\fB\-Wunused\-local\-typedefs\fR (فقط در C، Objective\-C، C++ و Objective\-C++)" 4 .IX Item "-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)" هنگامی که یک typedef به‌صورت محلی در یک تابع تعریف شده اما استفاده نشود، هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wunused\-parameter\fR 4 .IX Item "-Wunused-parameter" هرگاه یک پارامتر تابع، جدا از اعلانش استفاده نشود، هشدار می‌دهد. این گزینه توسط \f(CW\*(C`\-Wunused\*(C'\fR فعال نمی‌شود مگر آن‌که \f(CW\*(C`\-Wextra\*(C'\fR نیز مشخص شده باشد. .Sp برای نادیده گرفتن این هشدار از مشخصهٔ \f(CW\*(C`unused\*(C'\fR استفاده کنید. .IP \fB\-Wno\-unused\-result\fR 4 .IX Item "-Wno-unused-result" اگر فراخوانندهٔ تابعی که با مشخصهٔ \&\f(CW\*(C`warn_unused_result\*(C'\fR نشانه‌گذاری شده از مقدار بازگشتی آن استفاده نکند، هشدار ندهد. پیش‌فرض \fB\-Wunused\-result\fR است. .IP \fB\-Wunused\-variable\fR 4 .IX Item "-Wunused-variable" هرگاه یک متغیر محلی یا static جدا از اعلانش استفاده نشود، هشدار می‌دهد. این گزینه برای C به معنای \fB\-Wunused\-const\-variable=1\fR است، اما برای C++ خیر. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .Sp برای نادیده گرفتن این هشدار از مشخصهٔ \f(CW\*(C`unused\*(C'\fR استفاده کنید. .IP \fB\-Wunused\-const\-variable\fR 4 .IX Item "-Wunused-const-variable" .PD 0 .IP \fB\-Wunused\-const\-variable=\fR\fIn\fR 4 .IX Item "-Wunused-const-variable=n" .PD هرگاه یک متغیر ثابت static جدا از اعلانش استفاده نشود، هشدار می‌دهد. .Sp برای نادیده گرفتن این هشدار از مشخصهٔ \f(CW\*(C`unused\*(C'\fR استفاده کنید. .RS 4 .IP \fB\-Wunused\-const\-variable=1\fR 4 .IX Item "-Wunused-const-variable=1" دربارهٔ متغیرهای static const استفاده‌نشده‌ای که در واحد ترجمهٔ اصلی تعریف شده‌اند هشدار می‌دهد، اما دربارهٔ متغیرهای static const اعلان‌شده در هر سرایند (header) گنجانده‌شده‌ای هشدار نمی‌دهد. .Sp \&\fB\-Wunused\-const\-variable=1\fR در C توسط \&\fB\-Wunused\-variable\fR یا \fB\-Wunused\fR فعال می‌شود، اما برای C++ خیر. در C این اعلان فضای ذخیره‌سازی متغیر را تعریف می‌کند، اما در C++ این مورد خطا نیست زیرا متغیرهای const جایگزین \f(CW\*(C`#define\*(C'\fRها می‌شوند. .IP \fB\-Wunused\-const\-variable=2\fR 4 .IX Item "-Wunused-const-variable=2" این سطح از هشدار همچنین دربارهٔ متغیرهای ثابت static استفاده‌نشده در سرایندها (به‌جز سرایندهای سیستمی) هشدار می‌دهد. این سطح معادل شکل کوتاه \&\fB\-Wunused\-const\-variable\fR است. این سطح هم در C و هم در C++ باید به‌صراحت درخواست شود زیرا پاک‌سازی تمام سرایندهای گنجانده‌شده ممکن است دشوار باشد. .RE .RS 4 .RE .IP \fB\-Wunused\-value\fR 4 .IX Item "-Wunused-value" هرگاه یک عبارت نتیجه‌ای را محاسبه کند که صراحتاً استفاده نمی‌شود، هشدار می‌دهد. برای نادیده گرفتن این هشدار عبارت استفاده‌نشده را به \&\f(CW\*(C`void\*(C'\fR تبدیل (cast) کنید. این شامل یک عبارت-دستور یا سمت چپ یک عبارت کاما است که هیچ اثر جانبی ندارد. برای مثال، عبارتی مانند \f(CW\*(C`x[i,j]\*(C'\fR باعث ایجاد هشدار می‌شود، در حالی که \&\f(CW\*(C`x[(void)i,j]\*(C'\fR هشداری تولید نمی‌کند. .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wunused\fR 4 .IX Item "-Wunused" ترکیب تمام گزینه‌های \fB\-Wunused\fR بالا، به‌جز مواردی که ذکر شده باید به‌صورت صریح تعیین شوند. .Sp برای دریافت هشدار دربارهٔ پارامتر استفاده‌نشدهٔ تابع، باید یا \fB\-Wextra \-Wunused\fR را تعیین کنید (توجه داشته باشید که \fB\-Wall\fR دربردارندهٔ \&\fB\-Wunused\fR است)، یا به‌صورت جداگانه \fB\-Wunused\-parameter\fR و/یا \&\fB\-Wunused\-but\-set\-parameter\fR را مشخص کنید. .Sp \&\fB\-Wunused\fR تنها \fB\-Wunused\-const\-variable=1\fR را فعال می‌کند و نه \&\fB\-Wunused\-const\-variable\fR، و آن هم فقط برای C، نه C++. .IP "\fB\-Wuse\-after\-free\fR (فقط در C، Objective\-C، C++ و Objective\-C++)" 4 .IX Item "-Wuse-after-free (C, Objective-C, C++ and Objective-C++ only)" .PD 0 .IP \fB\-Wuse\-after\-free=\fR\fIn\fR 4 .IX Item "-Wuse-after-free=n" .PD دربارهٔ استفاده از اشاره‌گرها به اشیایی با تخصیص پویا که توسط فراخوانی یک تابع آزادسازی حافظه نامعین شده‌اند هشدار می‌دهد. این هشدار در تمامی سطوح بهینه‌سازی فعال است اما ممکن است با بهینه‌سازی نتایج متفاوتی نسبت به حالت بدون بهینه‌سازی داشته باشد. .RS 4 .IP \fB\-Wuse\-after\-free=1\fR 4 .IX Item "-Wuse-after-free=1" در سطح ۱ این هشدار تلاش می‌کند فقط استفاده‌های غیرمشروط از اشاره‌گرهای نامعین‌شده توسط یک فراخوانی آزادسازی یا یک فراخوانی موفق به \f(CW\*(C`realloc\*(C'\fR را تشخیص دهد، صرف‌نظر از اینکه فراخوانی منجر به تخصیص مجدد واقعی حافظه شده باشد یا خیر. این شامل فراخوانی‌های double\-\f(CW\*(C`free\*(C'\fR و همچنین استفاده در عبارات محاسباتی و رابطه‌ای می‌شود. با وجود تعریف‌نشده بودن، استفاده از اشاره‌گرهای نامعین در عبارات برابری (یا نابرابری) در این سطح تشخیص داده نمی‌شود. .IP \fB\-Wuse\-after\-free=2\fR 4 .IX Item "-Wuse-after-free=2" در سطح ۲، علاوه بر استفاده‌های غیرمشروط، این هشدار استفاده‌های مشروط از اشاره‌گرهای نامعین‌شده با فراخوانی آزادسازی را نیز تشخیص می‌دهد. مشابه سطح ۱، استفاده در عبارات برابری (یا نابرابری) تشخیص داده نمی‌شود. برای مثال، دومین فراخوانی به \f(CW\*(C`free\*(C'\fR در تابع زیر در این سطح تشخیص داده می‌شود: .Sp .Vb 1 \& struct A { int refcount; void *data; }; \& \& void release (struct A *p) \& { \& int refcount = \-\-p\->refcount; \& free (p); \& if (refcount == 0) \& free (p\->data); // warning: p may be used after free \& } .Ve .IP \fB\-Wuse\-after\-free=3\fR 4 .IX Item "-Wuse-after-free=3" در سطح ۳، این هشدار استفاده از اشاره‌گرهای نامعین در عبارات برابری را نیز تشخیص می‌دهد. تمام استفاده‌ها از اشاره‌گرهای نامعین تعریف‌نشده هستند اما آزمون‌های برابری گاهی پس از فراخوانی‌های \f(CW\*(C`realloc\*(C'\fR به‌منظور تلاش برای تعیین اینکه آیا فراخوانی منجر به انتقال شیء به آدرس متفاوتی شده ظاهر می‌شوند. این موارد در یک سطح جداگانه تشخیص داده می‌شوند تا به گذار تدریجی کدهای قدیمی به جایگزین‌های امن کمک کنند. برای مثال، آزمون برابری در تابع زیر در این سطح تشخیص داده می‌شود: .Sp .Vb 1 \& void adjust_pointers (int**, int); \& \& void grow (int **p, int n) \& { \& int **q = (int**)realloc (p, n *= 2); \& if (q == p) \& return; \& adjust_pointers ((int**)q, n); \& } .Ve .Sp برای جلوگیری از هشدار در این سطح، به‌جای اشاره‌گرها، آفست‌ها را درون حافظهٔ تخصیص‌یافته ذخیره کنید. این رویکرد نیاز به تنظیم اشاره‌گرهای ذخیره‌شده پس از تخصیص مجدد را برطرف می‌کند. .RE .RS 4 .Sp \&\fB\-Wuse\-after\-free=2\fR در \fB\-Wall\fR گنجانده شده است. .RE .IP "\fB\-Wuseless\-cast\fR (فقط در C، Objective\-C، C++ و Objective\-C++)" 4 .IX Item "-Wuseless-cast (C, Objective-C, C++ and Objective-C++ only)" هنگامی که یک عبارت به نوع خودش تبدیل (cast) شود، هشدار می‌دهد. این هشدار زمانی که یک شیء کلاس به یک نوع غیرمرجع تبدیل شود رخ نمی‌دهد، زیرا آن روشی برای ایجاد یک متغیر موقت است: .Sp .Vb 6 \& struct S { }; \& void g (S&&); \& void f (S&& arg) \& { \& g (S(arg)); // make arg prvalue so that it can bind to S&& \& } .Ve .IP \fB\-Wuninitialized\fR 4 .IX Item "-Wuninitialized" اگر شیئی با مدت زمان ماندگاری خودکار یا تخصیص‌یافته بدون اینکه مقداردهی اولیه شده باشد استفاده شود، هشدار می‌دهد. در C++، همچنین اگر یک مرجع غیر-static یا یک عضو \f(CW\*(C`const\*(C'\fR غیر-static در کلاسی بدون سازنده وجود داشته باشد هشدار می‌دهد. .Sp علاوه بر این، ارسال یک اشاره‌گر (یا در C++ یک مرجع) به شیء مقداردهی‌نشده به یک آرگومان با مشخصهٔ \f(CW\*(C`const\*(C'\fR از یک تابع داخلی (built\-in) که مشخص است شیء را می‌خواند نیز توسط این هشدار تشخیص داده می‌شود. (برای توابع معمولی، \fB\-Wmaybe\-uninitialized\fR صادر می‌شود.) .Sp اگر می‌خواهید دربارهٔ کدی که از مقدار مقداردهی‌نشدهٔ متغیر در مقداردهی اولیهٔ خودش استفاده می‌کند هشدار دریافت کنید، از گزینهٔ \fB\-Winit\-self\fR استفاده کنید. .Sp این هشدارها هم برای تک‌تک عناصر مقداردهی‌نشدهٔ متغیرهای ساختار (struct)، اجتماع (union) یا آرایه‌ها رخ می‌دهند و هم برای متغیرهایی که به‌طور کامل مقداردهی اولیه نشده‌اند. این هشدارها برای متغیرها یا عناصری که به‌صورت \f(CW\*(C`volatile\*(C'\fR اعلان شده‌اند رخ نمی‌دهند. از آنجا که این هشدارها به بهینه‌سازی وابسته‌اند، متغیرها یا عناصر دقیقی که برای آن‌ها هشدار صادر می‌شود به گزینه‌های دقیق بهینه‌سازی و نسخهٔ GCC مورد استفاده بستگی دارند. .Sp توجه داشته باشید که ممکن است برای متغیری که تنها برای محاسبهٔ مقداری استفاده می‌شود که خود آن مقدار هرگز استفاده نمی‌شود هشداری داده نشود، زیرا چنین محاسباتی ممکن است پیش از چاپ هشدارها توسط تحلیل جریان داده حذف شوند. .Sp در C++، این گزینه همچنین دربارهٔ استفاده از اشیاء مقداردهی‌نشده در فهرست‌های مقداردهی اعضا (member\-initializer\-lists) هشدار می‌دهد. برای مثال، GCC دربارهٔ مقداردهی‌نشده بودن \f(CW\*(C`b\*(C'\fR در قطعه‌کد زیر هشدار می‌دهد: .Sp.Vb 5 \& struct A { \& int a; \& int b; \& A() : a(b) { } \& }; .Ve .IP \fB\-Wno\-invalid\-memory\-model\fR 4 .IX Item "-Wno-invalid-memory-model" این گزینه هشدارهای مربوط به فراخوانی‌های \fB_\|_atomic Builtins\fR، \fB_\|_sync Builtins\fR و توابع جنریک اتمیک C11 را با یک آرگومان سازگاری حافظه که یا برای آن عملیات نامعتبر است یا خارج از محدوده مقادیر نوع شمارشی \f(CW\*(C`memory_order\*(C'\fR قرار دارد، کنترل می‌کند. برای مثال، از آنجا که توابع توکار \f(CW\*(C`_\|_atomic_store\*(C'\fR و \&\f(CW\*(C`_\|_atomic_store_n\*(C'\fR فقط برای ترتیبات حافظه relaxed، release و sequentially consistent تعریف شده‌اند، در کد زیر خطا تشخیص داده می‌شود: .Sp .Vb 4 \& void store (int *i) \& { \& _\|_atomic_store_n (i, 0, memory_order_consume); \& } .Ve .Sp گزینه \fB\-Winvalid\-memory\-model\fR به‌طور پیش‌فرض فعال است. .IP \fB\-Wmaybe\-uninitialized\fR 4 .IX Item "-Wmaybe-uninitialized" برای شیئی با طول عمر ذخیره‌سازی خودکار (automatic) یا تخصیص‌یافته (allocated)، اگر مسیری از نقطه ورود تابع به محل استفاده از شیء وجود داشته باشد که مقداردهی اولیه شده است، اما مسیرهای دیگری نیز وجود داشته باشند که شیء در آن‌ها مقداردهی اولیه نشده باشد، در صورتی که کامپایلر نتواند اثبات کند که مسیرهای مقداردهی‌نشده در زمان اجرا اجرا نمی‌شوند، یک هشدار صادر می‌کند. .Sp علاوه بر این، ارسال اشاره‌گر (یا در ++C یک مرجع/reference) به یک شیء مقداردهی‌نشده به آرگومان تابعی با واجد شرایط \f(CW\*(C`const\*(C'\fR نیز توسط این هشدار تشخیص داده می‌شود. (هشدار \fB\-Wuninitialized\fR برای توابع توکاری صادر می‌شود که مشخص است شیء را می‌خوانند.) نشانه‌گذاری تابع با مشخصه \f(CW\*(C`access (none)\*(C'\fR نشان می‌دهد که از آرگومان برای دسترسی به شیء استفاده نمی‌شود و از صدور هشدار جلوگیری می‌کند. .Sp این هشدارها تنها در زمان کامپایل بهینه‌سازی‌شده امکان‌پذیر هستند، زیرا در غیر این صورت GCC وضعیت متغیرها را پیگیری نمی‌کند. .Sp این هشدارها اختیاری در نظر گرفته شده‌اند زیرا ممکن است GCC نتواند تشخیص دهد که چه زمانی کد با وجود اینکه به ظاهر دارای خطا است، در واقعیت درست کار می‌کند. در اینجا نمونه‌ای از چگونگی رخ دادن این حالت آمده است: .Sp .Vb 12 \& { \& int x; \& switch (y) \& { \& case 1: x = 1; \& break; \& case 2: x = 4; \& break; \& case 3: x = 5; \& } \& foo (x); \& } .Ve .Sp اگر مقدار \f(CW\*(C`y\*(C'\fR همیشه 1، 2 یا 3 باشد، آن‌گاه \f(CW\*(C`x\*(C'\fR همیشه مقداردهی اولیه شده است، اما GCC این موضوع را نمی‌داند. برای فرونشاندن هشدار، باید یک حالت پیش‌فرض (default case) با \&\fBassert\fR\|(0) یا کدی مشابه قرار دهید. .Sp این گزینه همچنین زمانی هشدار می‌دهد که ممکن است یک متغیر خودکارِ غیر-volatile بر اثر فراخوانی \f(CW\*(C`longjmp\*(C'\fR تغییر کند. کامپایلر فقط فراخوانی‌های \f(CW\*(C`setjmp\*(C'\fR را می‌بیند. کامپایلر نمی‌تواند بداند که \&\f(CW\*(C`longjmp\*(C'\fR در کجا فراخوانی خواهد شد؛ در واقع، یک گرداننده سیگنال می‌تواند آن را در هر نقطه‌ای از کد فراخوانی کند. در نتیجه، ممکن است هشداری دریافت کنید در حالی که در عمل هیچ مشکلی وجود ندارد، زیرا \f(CW\*(C`longjmp\*(C'\fR عملاً در نقطه‌ای که باعث ایجاد مشکل شود فراخوانی نخواهد شد. .Sp اگر تمام توابعی را که استفاده می‌کنید و هرگز بازنمی‌گردند به عنوان \f(CW\*(C`noreturn\*(C'\fR اعلان کنید، می‌توان از برخی هشدارهای کاذب جلوگیری کرد. .Sp این هشدار توسط \fB\-Wall\fR یا \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wunknown\-pragmas\fR 4 .IX Item "-Wunknown-pragmas" هنگامی که با یک دستورالعمل \f(CW\*(C`#pragma\*(C'\fR مواجه شود که برای GCC قابل فهم نیست، هشدار می‌دهد. در صورت استفاده از این گزینه خط فرمان، حتی برای عملگرهای pragma ناشناخته در فایل‌های سرآیند (header) سیستمی نیز هشدار صادر می‌شود. اما اگر هشدارها فقط از طریق گزینه خط فرمان \fB\-Wall\fR فعال شده باشند، چنین نخواهد بود. .IP \fB\-Wno\-pragmas\fR 4 .IX Item "-Wno-pragmas" در مورد استفاده‌های نادرست از pragma، مانند پارامترهای نادرست، نحو نامعتبر یا تداخل بین pragmaها هشدار نمی‌دهد. همچنین نگاه کنید به \fB\-Wunknown\-pragmas\fR. .IP \fB\-Wno\-pragma\-once\-outside\-header\fR 4 .IX Item "-Wno-pragma-once-outside-header" هنگامی که از \f(CW\*(C`#pragma once\*(C'\fR در فایلی غیر از فایل سرآیند، مانند یک فایل اصلی (main) استفاده شود، هشدار نمی‌دهد. .IP \fB\-Wno\-prio\-ctor\-dtor\fR 4 .IX Item "-Wno-prio-ctor-dtor" اگر از اولویت بین 0 تا 100 برای constructor یا destructor استفاده شود، هشدار نمی‌دهد. استفاده از مشخصه‌های constructor و destructor به شما امکان می‌دهد تا اولویتی را برای سازنده/ویرانگر تعیین کنید تا ترتیب اجرای آن‌ها قبل از فراخوانی \f(CW\*(C`main\*(C'\fR یا پس از بازگشت از آن کنترل شود. مقادیر اولویت باید بزرگ‌تر از 100 باشند، زیرا کامپایلر مقادیر اولویت بین 0\-\-100 را برای پیاده‌سازی خود رزرو کرده است. .IP \fB\-Wstrict\-aliasing\fR 4 .IX Item "-Wstrict-aliasing" این گزینه فقط هنگامی که \fB\-fstrict\-aliasing\fR فعال باشد کار می‌کند. این گزینه درباره کدهایی هشدار می‌دهد که ممکن است قوانین strict aliasing مورد استفاده کامپایلر برای بهینه‌سازی را نقض کنند. این هشدار تمام موارد را در بر نمی‌گیرد، اما تلاش می‌کند خطاهای رایج‌تر را بیابد. این گزینه در \fB\-Wall\fR گنجانده شده است. این گزینه معادل \fB\-Wstrict\-aliasing=3\fR است. .IP \fB\-Wstrict\-aliasing=n\fR 4 .IX Item "-Wstrict-aliasing=n" این گزینه فقط هنگامی که \fB\-fstrict\-aliasing\fR فعال باشد کار می‌کند. این گزینه درباره کدهایی هشدار می‌دهد که ممکن است قوانین strict aliasing مورد استفاده کامپایلر برای بهینه‌سازی را نقض کنند. سطوح بالاتر نشان‌دهنده دقت بالاتر (هشدارهای مثبت کاذب کمتر) هستند. سطوح بالاتر همچنین به تلاش پردازشی بیشتری نیاز دارند، مشابه روش عملکرد \fB\-O\fR. گزینه \fB\-Wstrict\-aliasing\fR معادل \fB\-Wstrict\-aliasing=3\fR است. .Sp سطح ۱: تهاجمی‌ترین، سریع، کمترین دقت. زمانی می‌تواند مفید باشد که سطوح بالاتر هشدار نمی‌دهند اما \fB\-fstrict\-aliasing\fR همچنان کد را دچار اختلال می‌کند، زیرا موارد منفی کاذب بسیار کمی دارد. با این حال، موارد مثبت کاذب زیادی دارد. برای تمام تبدیل‌های اشاره‌گر بین انواع احتمالاً ناسازگار، حتی اگر هرگز ارجاع‌زدایی نشوند، هشدار می‌دهد. تنها در front end اجرا می‌شود. .Sp سطح ۲: تهاجمی، سریع، دقت متوسط. ممکن است همچنان هشدارهای مثبت کاذب زیادی داشته باشد (البته نه به اندازه سطح ۱)، و موارد منفی کاذب کمی دارد (اما احتمالاً بیشتر از سطح ۱). برخلاف سطح ۱، فقط زمانی هشدار می‌دهد که یک آدرس گرفته شده باشد. درباره انواع ناقص هشدار می‌دهد. تنها در front end اجرا می‌شود. .Sp سطح ۳ (پیش‌فرض برای \fB\-Wstrict\-aliasing\fR): باید موارد مثبت کاذب بسیار کم و منفی کاذب اندکی داشته باشد. در صورت فعال بودن بهینه‌سازی، کمی کندتر از سطوح ۱ یا ۲ است. الگوی رایج تغییر نوع+ارجاع‌زدایی (pun+dereference) را در front end مدیریت می‌کند: \&\f(CW\*(C`*(int*)&some_float\*(C'\fR. اگر بهینه‌سازی فعال باشد، در back end نیز اجرا می‌شود و در آنجا به کمک اطلاعات points\-to حساس به جریان داده (flow\-sensitive) به موارد چند‌دستوری رسیدگی می‌کند. تنها زمانی هشدار می‌دهد که اشاره‌گر تبدیل‌شده ارجاع‌زدایی شود. درباره انواع ناقص هشدار نمی‌دهد. .IP \fB\-Wstrict\-overflow\fR 4 .IX Item "-Wstrict-overflow" .PD 0 .IP \fB\-Wstrict\-overflow=\fR\fIn\fR 4 .IX Item "-Wstrict-overflow=n" .PD این گزینه تنها زمانی فعال است که سرریز علامت‌دار (signed overflow) تعریف‌نشده باشد. این گزینه درباره مواردی هشدار می‌دهد که کامپایلر بر اساس این فرض که سرریز علامت‌دار رخ نمی‌دهد، بهینه‌سازی انجام می‌دهد. توجه داشته باشید که این گزینه برای تمام مواردی که ممکن است در کد سرریز رخ دهد هشدار نمی‌دهد: تنها در مواردی هشدار می‌دهد که کامپایلر بهینه‌سازی خاصی اعمال کند. بنابراین این هشدار به سطح بهینه‌سازی بستگی دارد. .Sp بهینه‌سازی‌ای که فرض می‌کند سرریز علامت‌دار رخ نمی‌دهد، در صورتی که مقادیر متغیرهای درگیر به گونه‌ای باشند که سرریز در عمل هرگز اتفاق نیفتد، کاملاً ایمن است. بنابراین این هشدار می‌تواند به سادگی یک نتیجه مثبت کاذب بدهد: هشداری درباره کدی که در عمل مشکلی ندارد. برای کمک به تمرکز بر مسائل مهم، چندین سطح هشدار تعریف شده است. هنگام تخمین این که یک حلقه به چند تکرار نیاز دارد، به ویژه هنگام تعیین اینکه آیا یک حلقه اصلاً اجرا خواهد شد یا خیر، هیچ هشداری برای استفاده از سرریز علامت‌دار تعریف‌نشده صادر نمی‌شود. .RS 4 .IP \fB\-Wstrict\-overflow=1\fR 4 .IX Item "-Wstrict-overflow=1" درباره مواردی هشدار می‌دهد که هم جای تردید دارند و هم پرهیز از آن‌ها آسان است. برای مثال کامپایلر عبارت \f(CW\*(C`x + 1 > x\*(C'\fR را به \f(CW1\fR ساده می‌کند. این سطح از \&\fB\-Wstrict\-overflow\fR توسط \fB\-Wall\fR فعال می‌شود؛ سطوح بالاتر فعال نمی‌شوند و باید صریحاً درخواست شوند. .IP \fB\-Wstrict\-overflow=2\fR 4 .IX Item "-Wstrict-overflow=2" همچنین درباره موارد دیگری که در آن‌ها یک مقایسه به یک مقدار ثابت ساده‌سازی می‌شود هشدار می‌دهد. برای مثال: \f(CW\*(C`abs (x) >= 0\*(C'\fR. این تنها زمانی می‌تواند ساده شود که سرریز عدد صحیح علامت‌دار تعریف‌نشده باشد، زیرا \f(CW\*(C`abs (INT_MIN)\*(C'\fR دچار سرریز شده و به \&\f(CW\*(C`INT_MIN\*(C'\fR تبدیل می‌شود که کمتر از صفر است. گزینه \fB\-Wstrict\-overflow\fR (بدون تعیین سطح) معادل \fB\-Wstrict\-overflow=2\fR است..IP \fB\-Wstrict\-overflow=3\fR 4 .IX Item "-Wstrict-overflow=3" همچنین درباره سایر مواردی که یک مقایسه ساده‌سازی می‌شود هشدار می‌دهد. برای نمونه: \f(CW\*(C`x + 1 > 1\*(C'\fR به \f(CW\*(C`x > 0\*(C'\fR ساده می‌شود. .IP \fB\-Wstrict\-overflow=4\fR 4 .IX Item "-Wstrict-overflow=4" همچنین درباره سایر ساده‌سازی‌هایی که توسط موارد بالا پوشش داده نشده‌اند هشدار می‌دهد. برای نمونه: \f(CW\*(C`(x * 10) / 5\*(C'\fR به \f(CW\*(C`x * 2\*(C'\fR ساده می‌شود. .IP \fB\-Wstrict\-overflow=5\fR 4 .IX Item "-Wstrict-overflow=5" همچنین درباره مواردی هشدار می‌دهد که کامپایلر اندازه یک مقدار ثابت دخیل در یک مقایسه را کاهش می‌دهد. برای نمونه: \f(CW\*(C`x + 2 > y\*(C'\fR به \f(CW\*(C`x + 1 >= y\*(C'\fR ساده می‌شود. این مورد تنها در بالاترین سطح هشدار گزارش می‌شود زیرا این ساده‌سازی بر روی مقایسه‌های بسیاری اعمال می‌گردد، بنابراین این سطح هشدار شمار بسیار زیادی از موارد مثبت کاذب (false positive) را ایجاد می‌کند. .RE .RS 4 .RE .IP \fB\-Wstring\-compare\fR 4 .IX Item "-Wstring-compare" برای فراخوانی‌هایی از \f(CW\*(C`strcmp\*(C'\fR و \f(CW\*(C`strncmp\*(C'\fR که نتیجه آن‌ها در بررسی‌های برابری، به دلیل بزرگ‌تر بودن طول یکی از آرگومان‌ها از اندازه آرایه‌ای که آرگومان دیگر در آن ذخیره شده (یا کران در مورد \f(CW\*(C`strncmp\*(C'\fR)، صفر یا غیرصفر تعیین می‌شود هشدار می‌دهد. چنین فراخوانی‌هایی ممکن است اشتباه باشند. برای نمونه، فراخوانی \f(CW\*(C`strcmp\*(C'\fR در زیر مشخص و گزارش می‌شود زیرا نتیجه آن صرف‌نظر از محتویات آرایه \f(CW\*(C`a\*(C'\fR لزوماً غیرصفر است. .Sp .Vb 8 \& extern char a[4]; \& void f (char *d) \& { \& strcpy (d, "string"); \& ... \& if (0 == strcmp (a, d)) // cannot be true \& puts ("a and d are the same"); \& } .Ve .Sp گزینه \&\fB\-Wstring\-compare\fR توسط \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wno\-stringop\-overflow\fR 4 .IX Item "-Wno-stringop-overflow" .PD 0 .IP \fB\-Wstringop\-overflow\fR 4 .IX Item "-Wstringop-overflow" .IP \fB\-Wstringop\-overflow=\fR\fItype\fR 4 .IX Item "-Wstringop-overflow=type" .PD برای کدهایی که بتوان به صورت ایستا تشخیص داد موجب سرریز بافر (buffer overflow) یا سرریز حافظه (memory overrun) می‌شوند، مانند فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR و \&\f(CW\*(C`strcpy\*(C'\fR که از بافر مقصد سرریز می‌کنند، هشدار می‌دهد. آرگومان اختیاری یک واحد بیشتر از نوع «بررسی اندازه شیء» (Object Size Checking) است که برای تعیین اندازه مقصد انجام می‌گیرد. این آرگومان تنها برای توابع رشته‌ای که روی آرایه‌های نویسه‌ای عمل می‌کنند معنی‌دار است؛ توابع حافظه خام مانند \f(CW\*(C`memcpy\*(C'\fR همیشه از بررسی اندازه شیء نوع صفر استفاده می‌کنند. .Sp این گزینه همچنین برای فراخوانی‌هایی که اندازه‌ای بیشتر از بزرگ‌ترین شیء ممکن یا حداکثر \f(CW\*(C`SIZE_MAX / 2\*(C'\fR بایت را مشخص می‌کنند هشدار می‌دهد. .Sp این گزینه در صورت فعال بودن بهینه‌سازی بهترین نتایج را ارائه می‌دهد، اما حتی بدون بهینه‌سازی نیز می‌تواند زیرمجموعه کوچکی از سرریزهای ساده بافر را در فراخوانی توابع توکار GCC مانند \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR که متناظر با توابع استاندارد هستند تشخیص دهد. در هر حال، این گزینه تنها درباره زیرمجموعه‌ای از سرریزهای بافر هشدار می‌دهد که توسط توابع توکار بررسی سرریز متناظر تشخیص داده می‌شوند، مانند \f(CW\*(C`_\|_builtin_\|_\|_memcpy_chk\*(C'\fR که در صورت عدم اطمینان از امن بودن دسترسی در زمان کامپایل، می‌توانند بررسی زمان اجرا انجام دهند. .Sp برای نمونه، این گزینه برای فراخوانی \f(CW\*(C`strcpy\*(C'\fR در زیر یک هشدار صادر می‌کند، زیرا حداقل ۵ نویسه (رشته \f(CW"blue"\fR شامل نویسه پایانی NUL) را درون بافری به اندازه ۴ کپی می‌کند. .Sp .Vb 11 \& enum Color { blue, purple, yellow }; \& const char* f (enum Color clr) \& { \& static char buf [4]; \& const char *str; \& switch (clr) \& { \& case blue: str = "blue"; break; \& case purple: str = "purple"; break; \& case yellow: str = "yellow"; break; \& } \& \& return strcpy (buf, str); // warning here \& } .Ve .Sp اثر این گزینه به توابع دستکاری رشته یا حافظه محدود نمی‌شود. در این مثال، یک هشدار صادر می‌شود زیرا یک آرایه ۱ عنصری به تابعی ارسال شده که نیازمند آرگومانی با دست‌کم ۴ عنصر است: .Sp .Vb 1 \& void f (int[static 4]); \& \& void g (void) \& { \& int *p = (int *) malloc (1 * sizeof(int)); \& f (p); // warning here \& } .Ve .Sp گزینه \fB\-Wstringop\-overflow=2\fR به طور پیش‌فرض فعال است. .RS 4 .IP \fB\-Wstringop\-overflow\fR 4 .IX Item "-Wstringop-overflow" .PD 0 .IP \fB\-Wstringop\-overflow=1\fR 4 .IX Item "-Wstringop-overflow=1" .PD گزینه \fB\-Wstringop\-overflow=1\fR از بررسی اندازه شیء نوع صفر برای تعیین اندازه‌های اشیاء مقصد استفاده می‌کند. در این تنظیم، این گزینه برای نوشتن فراتر از انتهای زیر‌اشیاءِ اشیاء بزرگ‌تر که با اشاره‌گر به آن‌ها دسترسی پیدا شده هشدار نمی‌دهد، مگر اینکه اندازه بزرگ‌ترین شیء دربرگیرنده معلوم باشد. هنگامی که مقصد ممکن است یکی از چندین شیء باشد، بزرگ‌ترین آن‌ها در نظر گرفته می‌شود. در سیستم‌های لینوکس، زمانی که بهینه‌سازی فعال باشد، این گزینه در این تنظیم برای همان کدهایی هشدار می‌دهد که ماکروی \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR با مقداری غیرصفر برای آن‌ها هشدار صادر می‌کند. .IP \fB\-Wstringop\-overflow=2\fR 4 .IX Item "-Wstringop-overflow=2" گزینه \fB\-Wstringop\-overflow=2\fR از بررسی اندازه شیء نوع یک برای تعیین اندازه‌های اشیاء مقصد استفاده می‌کند. در این تنظیم، این گزینه در مورد سرریزها هنگام نوشتن در اعضای بزرگ‌ترین اشیاء کاملی که اندازه دقیق آن‌ها معلوم است هشدار می‌دهد. با این حال، برای نوشتن‌های بیش‌از‌حد در همان اعضای اشیاء نامعلوم که توسط اشاره‌گر ارجاع داده شده‌اند هشدار نمی‌دهد، زیرا ممکن است به آرایه‌هایی حاوی شمار نامعلومی از عناصر اشاره کنند. این حالت، تنظیم پیش‌فرض گزینه است. .IP \fB\-Wstringop\-overflow=3\fR 4 .IX Item "-Wstringop-overflow=3" گزینه \fB\-Wstringop\-overflow=3\fR از بررسی اندازه شیء نوع دو برای تعیین اندازه‌های اشیاء مقصد استفاده می‌کند. در این تنظیم، این گزینه درباره سرریز از کوچک‌ترین شیء یا عضو داده‌ای هشدار می‌دهد. این محدودکننده‌ترین تنظیم این گزینه است که ممکن است به صدور هشدار برای کدهای امن منجر شود. .IP \fB\-Wstringop\-overflow=4\fR 4 .IX Item "-Wstringop-overflow=4" گزینه \fB\-Wstringop\-overflow=4\fR از بررسی اندازه شیء نوع سه برای تعیین اندازه‌های اشیاء مقصد استفاده می‌کند. در این تنظیم، این گزینه درباره سرریز از هر یک از اعضای داده‌ای هشدار می‌دهد، و هنگامی که مقصد یکی از چند شیء باشد از اندازه بزرگ‌ترین آن‌ها برای تصمیم‌گیری درباره صدور هشدار استفاده می‌کند. مشابه \fB\-Wstringop\-overflow=3\fR، این تنظیم از گزینه ممکن است به صدور هشدار برای کدهای بی‌خطر بیانجامد. .RE .RS 4 .RE .IP \fB\-Wno\-stringop\-overread\fR 4 .IX Item "-Wno-stringop-overread" برای فراخوانی توابع دستکاری رشته مانند \f(CW\*(C`memchr\*(C'\fR یا \&\f(CW\*(C`strcpy\*(C'\fR که مشخص شود فراتر از انتهای دنباله مبدأ می‌خوانند، هشدار می‌دهد. .Sp گزینه \fB\-Wstringop\-overread\fR به طور پیش‌فرض فعال است. .IP \fB\-Wno\-stringop\-truncation\fR 4 .IX Item "-Wno-stringop-truncation" درباره فراخوانی‌های توابع مقید دستکاری رشته مانند \f(CW\*(C`strncat\*(C'\fR، \&\f(CW\*(C`strncpy\*(C'\fR و \f(CW\*(C`stpncpy\*(C'\fR که ممکن است رشته کپی‌شده را کوتاه (truncate) کنند یا مقصد را بدون تغییر باقی بگذارند، هشدار نده. .Sp در مثال زیر، فراخوانی \f(CW\*(C`strncat\*(C'\fR کرانی را مشخص می‌کند که کمتر از طول رشته مبدأ است. در نتیجه، نسخه کپی‌شده مبدأ کوتاه خواهد شد و بنابراین این فراخوانی گزارش می‌شود. برای جلوگیری از این هشدار، از \f(CW\*(C`bufsize \- strlen (buf) \- 1)\*(C'\fR به عنوان کران استفاده کنید. .Sp .Vb 4 \& void append (char *buf, size_t bufsize) \& { \& strncat (buf, ".txt", 3); \& } .Ve .Sp به عنوان مثالی دیگر، فراخوانی زیر به \f(CW\*(C`strncpy\*(C'\fR منجر به کپی شدن تنها نویسه‌های پیش از NUL پایانی در \f(CW\*(C`d\*(C'\fR می‌شود، بدون اینکه NUL به انتهای آن افزوده گردد. فرض اینکه نتیجه \f(CW\*(C`strncpy\*(C'\fR لزوماً یک رشته خاتمه‌یافته با NUL است یک اشتباه متداول است و از این رو این فراخوانی گزارش می‌شود. برای جلوگیری از این هشدار زمانی که انتظار نمی‌رود نتیجه به NUL ختم شود، به جای آن \f(CW\*(C`memcpy\*(C'\fR را فراخوانی کنید. .Sp.Vb 4 \& void copy (char *d, const char *s) \& { \& strncpy (d, s, strlen (s)); \& } .Ve .Sp در مثال زیر، فراخوانی \f(CW\*(C`strncpy\*(C'\fR اندازهٔ بافر مقصد را به عنوان کران مشخص می‌کند. اگر طول رشتهٔ مبدأ برابر یا بزرگ‌تر از این اندازه باشد، نتیجهٔ رونوشت به \f(CW\*(C`NUL\*(C'\fR ختم نخواهد شد. از این رو، این فراخوانی نیز شناسایی و گزارش می‌شود. برای جلوگیری از هشدار، \f(CW\*(C`sizeof buf \- 1\*(C'\fR را به عنوان کران مشخص کرده و آخرین عنصر بافر را روی \f(CW\*(C`NUL\*(C'\fR تنظیم کنید. .Sp .Vb 6 \& void copy (const char *s) \& { \& char buf[80]; \& strncpy (buf, s, sizeof buf); \& ... \& } .Ve .Sp در شرایطی که یک آرایهٔ نویسه‌ای برای ذخیرهٔ دنباله‌ای از بایت‌ها بدون \f(CW\*(C`NUL\*(C'\fR پایانی در نظر گرفته شده باشد، می‌توان چنین آرایه‌ای را با صفت \f(CW\*(C`nonstring\*(C'\fR نشانه‌گذاری کرد تا از این هشدار جلوگیری شود. با این حال، چنین آرایه‌هایی آرگومان‌های مناسبی برای توابعی که انتظار رشته‌های مختوم به \f(CW\*(C`NUL\*(C'\fR را دارند نیستند. برای کمک به شناسایی استفاده‌های نادرست تصادفی از چنین آرایه‌هایی، GCC هشدارهایی صادر می‌کند مگر اینکه بتواند امن بودن استفاده را اثبات کند. .IP "\fB\-Wstrict\-flex\-arrays\fR (فقط C و C++)" 4 .IX Item "-Wstrict-flex-arrays (C and C++ only)" دربارهٔ استفاده‌های نادرست از اعضای آرایهٔ انعطاف‌پذیر (flexible array members) بر اساس \fIlevel\fR صفت \f(CW\*(C`strict_flex_array (\fR\f(CIlevel\fR\f(CW)\*(C'\fR متصل به فیلد آرایهٔ انتهایی یک ساختار در صورت وجود، و در غیر این صورت بر اساس \fIlevel\fR گزینهٔ \fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR هشدار می‌دهد. گزینهٔ \f(CW\*(C`\-Wstrict\-flex\-arrays\*(C'\fR تنها زمانی مؤثر است که \fIlevel\fR بزرگ‌تر از 0 باشد. .Sp وقتی \fIlevel\fR=1 باشد، اگر به آرایهٔ انتهایی به عنوان یک عضو آرایهٔ انعطاف‌پذیر ارجاع داده شود، برای ارجاع به آرایهٔ انتهایی ساختاری که ۲ یا چند عنصر دارد هشدار صادر می‌شود. .Sp وقتی \fIlevel\fR=2 باشد، علاوه بر \fIlevel\fR=1، اگر به آرایه به عنوان یک عضو آرایهٔ انعطاف‌پذیر ارجاع داده شود، هشدارهای بیشتری برای ارجاع به آرایهٔ انتهایی تک‌عنصری یک ساختار صادر می‌شود. .Sp وقتی \fIlevel\fR=3 باشد، علاوه بر \fIlevel\fR=2، اگر به آرایه به عنوان یک عضو آرایهٔ انعطاف‌پذیر ارجاع داده شود، هشدارهای بیشتری برای ارجاع به آرایهٔ انتهایی با طول صفر یک ساختار صادر می‌شود. .Sp این گزینه زمانی که \fB\-ftree\-vrp\fR فعال باشد مؤثرتر است (پیش‌فرض برای \fB\-O2\fR و بالاتر)، اما برخی از هشدارها حتی بدون بهینه‌سازی نیز ممکن است شناسایی شوند. .IP \fB\-Wsuggest\-attribute=\fR\fIattribute\-name\fR 4 .IX Item "-Wsuggest-attribute=attribute-name" در مواردی که افزودن یک صفت ممکن است سودمند باشد هشدار می‌دهد. مقدارهای \fIattribute\-name\fR که در حال حاضر پشتیبانی می‌شوند در زیر فهرست شده‌اند. .RS 4 .IP \fB\-Wsuggest\-attribute=pure\fR 4 .IX Item "-Wsuggest-attribute=pure" .PD 0 .IP \fB\-Wsuggest\-attribute=const\fR 4 .IX Item "-Wsuggest-attribute=const" .IP \fB\-Wsuggest\-attribute=noreturn\fR 4 .IX Item "-Wsuggest-attribute=noreturn" .IP \fB\-Wmissing\-noreturn\fR 4 .IX Item "-Wmissing-noreturn" .IP \fB\-Wsuggest\-attribute=malloc\fR 4 .IX Item "-Wsuggest-attribute=malloc" .IP \fB\-Wsuggest\-attribute=returns_nonnull\fR 4 .IX Item "-Wsuggest-attribute=returns_nonnull" .PD دربارهٔ توابعی که ممکن است نامزد دریافت صفت‌های \f(CW\*(C`pure\*(C'\fR، \f(CW\*(C`const\*(C'\fR، \f(CW\*(C`noreturn\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR یا \f(CW\*(C`returns_nonnull\*(C'\fR باشند هشدار می‌دهد. کامپایلر تنها برای توابعی که در سایر واحدهای کامپایل قابل مشاهده هستند هشدار می‌دهد، یا (در مورد \f(CW\*(C`pure\*(C'\fR و \f(CW\*(C`const\*(C'\fR) اگر نتواند اثبات کند که تابع به طور عادی بازمی‌گردد. یک تابع در صورتی به طور عادی بازمی‌گردد که حاوی یک حلقهٔ بی‌نهایت نباشد یا به طور غیرعادی با پرتاب استثنا، فراخوانی \f(CW\*(C`abort\*(C'\fR یا به دام افتادن (trapping) پایان نیابد. این تحلیل نیازمند گزینهٔ \fB\-fipa\-pure\-const\fR است که به طور پیش‌فرض در \fB\-O\fR و بالاتر فعال است. سطوح بهینه‌سازی بالاتر دقت تحلیل را افزایش می‌دهند. .IP \fB\-Wsuggest\-attribute=format\fR 4 .IX Item "-Wsuggest-attribute=format" .PD 0 .IP \fB\-Wmissing\-format\-attribute\fR 4 .IX Item "-Wmissing-format-attribute" .PD دربارهٔ اشاره‌گرهای تابعی که ممکن است نامزد دریافت صفت‌های \f(CW\*(C`format\*(C'\fR باشند هشدار می‌دهد. توجه داشته باشید که این‌ها فقط نامزدهای احتمالی هستند، نه قطعی. GCC حدس می‌زند اشاره‌گرهای تابعی با صفت‌های \f(CW\*(C`format\*(C'\fR که در انتساب، مقداردهی اولیه، ارسال پارامتر یا دستورهای بازگشت استفاده می‌شوند، باید صفت \f(CW\*(C`format\*(C'\fR متناظری در نوع حاصل داشته باشند. به این معنی که سمت چپ انتساب یا مقداردهی اولیه، نوع متغیر پارامتر، یا نوع بازگشتی تابعِ دربرگیرنده به ترتیب باید یک صفت \f(CW\*(C`format\*(C'\fR نیز داشته باشند تا از هشدار جلوگیری شود. .Sp کامپایلر GCC همچنین دربارهٔ تعاریف توابعی که ممکن است نامزد دریافت صفت‌های \f(CW\*(C`format\*(C'\fR باشند هشدار می‌دهد. مجدداً، این‌ها صرفاً نامزدهای احتمالی هستند. GCC حدس می‌زند که صفت‌های \f(CW\*(C`format\*(C'\fR ممکن است برای هر تابعی که تابعی مانند \f(CW\*(C`vprintf\*(C'\fR یا \f(CW\*(C`vscanf\*(C'\fR را فراخوانی می‌کند مناسب باشد، اما این ممکن است همیشه صادق نباشد و برخی از توابعی که صفت‌های \f(CW\*(C`format\*(C'\fR برای آن‌ها مناسب است ممکن است شناسایی نشوند. .IP \fB\-Wsuggest\-attribute=cold\fR 4 .IX Item "-Wsuggest-attribute=cold" دربارهٔ توابعی که ممکن است نامزد دریافت صفت \f(CW\*(C`cold\*(C'\fR باشند هشدار می‌دهد. این بر اساس تشخیص ایستا است و به طور کلی تنها دربارهٔ توابعی هشدار می‌دهد که همیشه منجر به فراخوانی یک تابع \f(CW\*(C`cold\*(C'\fR دیگر می‌شوند؛ مانند پوشش‌دهنده‌های (wrappers) دستور \f(CW\*(C`throw\*(C'\fR در ++C یا توابع گزارش خطای مهلک که منجر به \f(CW\*(C`abort\*(C'\fR می‌شوند. .RE .RS 4 .RE .IP \fB\-Walloc\-size\fR 4 .IX Item "-Walloc-size" دربارهٔ فراخوانی‌های توابع تخصیص حافظهٔ مزین به صفت \f(CW\*(C`alloc_size\*(C'\fR که اندازه‌ای ناکافی برای نوع هدفِ اشاره‌گری که نتیجه به آن تخصیص می‌یابد مشخص می‌کنند، هشدار می‌دهد؛ از جمله شکل‌های توکار (built-in) توابع \f(CW\*(C`aligned_alloc\*(C'\fR، \f(CW\*(C`alloca\*(C'\fR، \f(CW\*(C`calloc\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR و \f(CW\*(C`realloc\*(C'\fR. .IP \fB\-Walloc\-zero\fR 4 .IX Item "-Walloc-zero" دربارهٔ فراخوانی‌های توابع تخصیص حافظهٔ مزین به صفت \f(CW\*(C`alloc_size\*(C'\fR که صفر بایت را مشخص می‌کنند هشدار می‌دهد، از جمله شکل‌های توکار توابع \f(CW\*(C`aligned_alloc\*(C'\fR، \f(CW\*(C`alloca\*(C'\fR، \f(CW\*(C`calloc\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR و \f(CW\*(C`realloc\*(C'\fR. از آنجا که رفتار این توابع در هنگام فراخوانی با اندازهٔ صفر در پیاده‌سازی‌های مختلف متفاوت است (و در مورد \f(CW\*(C`realloc\*(C'\fR منسوخ شده است)، اتکا به آن ممکن است به باگ‌های نامحسوس در قابلیت حمل منجر شود و باید از آن اجتناب کرد. .IP \fB\-Wcalloc\-transposed\-args\fR 4 .IX Item "-Wcalloc-transposed-args" دربارهٔ فراخوانی‌های توابع تخصیص مزین به صفت \f(CW\*(C`alloc_size\*(C'\fR با دو آرگومان هشدار می‌دهد که از عملگر \f(CW\*(C`sizeof\*(C'\fR به عنوان آرگومان اندازهٔ اول استفاده کرده و از آن برای آرگومان اندازهٔ دوم استفاده نمی‌کنند. این یک هشدار مربوط به سبک کدنویسی است. طبق مستندات، آرگومان اول \f(CW\*(C`calloc\*(C'\fR تعداد عناصر در آرایه است، در حالی که آرگومان دوم اندازهٔ هر عنصر می‌باشد؛ بنابراین \f(CW\*(C`calloc (\fR\f(CIn\fR\f(CW, sizeof (int))\*(C'\fR بر \f(CW\*(C`calloc (sizeof (int), \fR\f(CIn\fR\f(CW)\*(C'\fR ترجیح داده می‌شود. اگر وجود \f(CW\*(C`sizeof\*(C'\fR در آرگومان اول و عدم وجود آن در دومی عمدی باشد، می‌توان با استفاده از \f(CW\*(C`calloc (sizeof (struct \fR\f(CIS\fR\f(CW) + 0, n)\*(C'\fR یا \f(CW\*(C`calloc (1 * sizeof (struct \fR\f(CIS\fR\f(CW), 4)\*(C'\fR یا استفاده از \f(CW\*(C`sizeof\*(C'\fR در آرگومان دوم نیز هشدار را برطرف کرد. .IP \fB\-Walloc\-size\-larger\-than=\fR\fIbyte\-size\fR 4 .IX Item "-Walloc-size-larger-than=byte-size" دربارهٔ فراخوانی‌های توابع مزین به صفت \f(CW\*(C`alloc_size\*(C'\fR که سعی در تخصیص شیءهایی بزرگ‌تر از تعداد بایت‌های مشخص‌شده دارند، یا در مواردی که نتیجهٔ محاسبهٔ اندازه در یک نوع عدد صحیح با دقت نامحدود از مقدار \fBPTRDIFF_MAX\fR در سامانهٔ مقصد فراتر می‌رود، هشدار می‌دهد. گزینهٔ \fB\-Walloc\-size\-larger\-than=\fR\fBPTRDIFF_MAX\fR به طور پیش‌فرض فعال است. هشدارهای کنترل‌شده توسط این گزینه را می‌توان با مشخص کردن \fIbyte\-size\fR برابر با \fBSIZE_MAX\fR یا بیشتر، یا با استفاده از \fB\-Wno\-alloc\-size\-larger\-than\fR غیرفعال کرد. .IP \fB\-Wno\-alloc\-size\-larger\-than\fR 4 .IX Item "-Wno-alloc-size-larger-than" هشدارهای \fB\-Walloc\-size\-larger\-than=\fR را غیرفعال می‌کند. این گزینه معادل \fB\-Walloc\-size\-larger\-than=\fR\fBSIZE_MAX\fR یا مقادیر بزرگ‌تر است. .IP \fB\-Walloca\fR 4 .IX Item "-Walloca" این گزینه در مورد تمامی استفاده‌ها از \f(CW\*(C`alloca\*(C'\fR در کد مبدأ هشدار می‌دهد. .IP \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR 4 .IX Item "-Walloca-larger-than=byte-size" این گزینه در مورد فراخوانی‌های \f(CW\*(C`alloca\*(C'\fR با آرگومان عدد صحیحی که مقدار آن صفر باشد، یا توسط یک گزارهٔ کنترلی که مقدار آن را حداکثر به \fIbyte\-size\fR محدود کند مقید نشده باشد، هشدار می‌دهد. همچنین برای فراخوانی‌هایی به \f(CW\*(C`alloca\*(C'\fR که مقدار کران در آن‌ها نامشخص است هشدار صادر می‌کند. آرگومان‌های با انواع غیرصحیح نامقید در نظر گرفته می‌شوند، حتی اگر به نظر برسد به محدودهٔ مورد انتظار محدود شده‌اند. .Sp برای نمونه، یک حالت مقید از \f(CW\*(C`alloca\*(C'\fR می‌تواند چنین باشد: .Sp .Vb 9 \& void func (size_t n) \& { \& void *p; \& if (n <= 1000) \& p = alloca (n); \& else \& p = malloc (n); \& f (p); \& } .Ve .Sp در مثال بالا، ارسال \f(CW\*(C`\-Walloca\-larger\-than=1000\*(C'\fR هشداری صادر نخواهد کرد زیرا مشخص است که فراخوانی \f(CW\*(C`alloca\*(C'\fR حداکثر ۱۰۰۰ بایت است. با این حال، اگر \f(CW\*(C`\-Walloca\-larger\-than=500\*(C'\fR ارسال می‌شد، کامپایلر یک هشدار صادر می‌کرد. .Sp از سوی دیگر، استفاده‌های نامقید مواردی از استفاده از \f(CW\*(C`alloca\*(C'\fR بدون هیچ گزارهٔ کنترلی برای محدود کردن آرگومان عدد صحیح آن هستند. برای نمونه: .Sp.Vb 5 \& void func () \& { \& void *p = alloca (n); \& f (p); \& } .Ve .Sp اگر \f(CW\*(C`\-Walloca\-larger\-than=500\*(C'\fR ارسال شود، کد بالا هشداری ایجاد می‌کند، اما این بار به دلیل نبود بررسی محدوده (bounds checking). .Sp توجه داشته باشید که حتی کدهایی که به‌ظاهر درست هستند و از اعداد صحیح علامت‌دار (signed integers) استفاده می‌کنند نیز ممکن است باعث ایجاد هشدار شوند: .Sp .Vb 8 \& void func (signed int n) \& { \& if (n < 500) \& { \& p = alloca (n); \& f (p); \& } \& } .Ve .Sp در مثال بالا، \fIn\fR می‌تواند منفی باشد که باعث می‌شود آرگومانی بزرگ‌تر از حد انتظار به‌صورت ضمنی به فراخوانی \f(CW\*(C`alloca\*(C'\fR ارسال (cast) شود. .Sp این گزینه همچنین هنگامی که \f(CW\*(C`alloca\*(C'\fR در یک حلقه استفاده شود، هشدار می‌دهد. .Sp گزینهٔ \&\fB\-Walloca\-larger\-than=\fR\fBPTRDIFF_MAX\fR به‌طور پیش‌فرض فعال است اما معمولاً تنها زمانی مؤثر است که \fB\-ftree\-vrp\fR فعال باشد (پیش‌فرض برای \fB\-O2\fR و بالاتر). .Sp همچنین ببینید: \fB\-Wvla\-larger\-than=\fR\fBbyte\-size\fR. .IP \fB\-Wno\-alloca\-larger\-than\fR 4 .IX Item "-Wno-alloca-larger-than" هشدارهای \fB\-Walloca\-larger\-than=\fR را غیرفعال می‌کند. این گزینه معادل \fB\-Walloca\-larger\-than=\fR\fBSIZE_MAX\fR یا بزرگ‌تر است. .IP \fB\-Warith\-conversion\fR 4 .IX Item "-Warith-conversion" دربارهٔ تبدیل‌های ضمنی ناشی از عملیات حسابی هشدار می‌دهد، حتی زمانی که تبدیل عملوندها به همان نوع نتواند مقادیر آن‌ها را تغییر دهد. این گزینه بر هشدارهای \fB\-Wconversion\fR، \&\fB\-Wfloat\-conversion\fR و \fB\-Wsign\-conversion\fR تأثیر می‌گذارد. .Sp .Vb 5 \& void f (char c, int i) \& { \& c = c + i; // warns with B<\-Wconversion> \& c = c + 1; // only warns with B<\-Warith\-conversion> \& } .Ve .IP \fB\-Warray\-bounds\fR 4 .IX Item "-Warray-bounds" .PD 0 .IP \fB\-Warray\-bounds=\fR\fIn\fR 4 .IX Item "-Warray-bounds=n" .PD دربارهٔ اندیس‌ها یا آفست‌های خارج از محدوده در آرایه‌ها هشدار می‌دهد. این هشدار با \fB\-Wall\fR فعال می‌شود. این گزینه زمانی که \fB\-ftree\-vrp\fR فعال باشد مؤثرتر است (پیش‌فرض برای \fB\-O2\fR و بالاتر)، اما زیرمجموعه‌ای از موارد حتی بدون بهینه‌سازی نیز صادر می‌شوند. .Sp به‌طور پیش‌فرض، آرایهٔ انتهایی یک ساختار در صورتی که بر اساس استاندارد C99 به بعد به عنوان عضو آرایهٔ منعطف (\fB[]\fR)، افزونهٔ آرایه با طول صفر در GCC (\fB[0]\fR)، یا یک آرایهٔ تک‌عضوی (\fB[1]\fR) اعلان شده باشد، توسط \fB\-Warray\-bounds\fR یا \fB\-Warray\-bounds=\fR\fIn\fR به عنوان عضو آرایهٔ منعطف (flexible array member) در نظر گرفته می‌شود. در نتیجه، دربارهٔ اندیس‌ها یا آفست‌های خارج از محدوده در آرایه‌های با طول صفر یا تک‌عضوی به‌طور پیش‌فرض هشداری داده نمی‌شود. .Sp می‌توانید گزینهٔ \fB\-fstrict\-flex\-arrays\fR یا \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR را اضافه کنید تا نحوهٔ رفتار این گزینه با آرایهٔ انتهایی یک ساختار به عنوان عضو آرایهٔ منعطف کنترل شود: .Sp زمانی که \fIlevel\fR<=1 باشد، تغییری در رفتار پیش‌فرض ایجاد نمی‌شود. .Sp زمانی که \fIlevel\fR=2 باشد، هشدارهای بیشتری برای اندیس‌ها یا آفست‌های خارج از محدوده در آرایه‌های تک‌عضوی صادر خواهد شد؛ .Sp زمانی که \fIlevel\fR=3 باشد، علاوه بر \fIlevel\fR=2، هشدارهای بیشتری برای اندیس‌ها یا آفست‌های خارج از محدوده در آرایه‌های با طول صفر صادر خواهد شد. .RS 4 .IP \fB\-Warray\-bounds=1\fR 4 .IX Item "-Warray-bounds=1" این سطح پیش‌فرض هشدار برای \fB\-Warray\-bounds\fR است و با \fB\-Wall\fR فعال می‌شود؛ سطوح بالاتر فعال نمی‌شوند و باید صراحتاً درخواست شوند. .IP \fB\-Warray\-bounds=2\fR 4 .IX Item "-Warray-bounds=2" این سطح هشدار همچنین دربارهٔ نتایج میانی محاسبات اشاره‌گر (pointer arithmetic) که ممکن است مقادیر خارج از محدوده تولید کنند، هشدار می‌دهد. این سطح هشدار ممکن است تعداد بیشتری مثبت کاذب (false positive) ایجاد کند و به‌طور پیش‌فرض غیرفعال است. .RE .RS 4 .RE .IP "\fB\-Wunterminated\-string\-initialization\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wunterminated-string-initialization (C and Objective-C only)" دربارهٔ آرایه‌های نویسه‌ای که با یک رشتهٔ لفظی (string literal) به عنوان دنباله‌های نویسه‌ای بدون پایان‌دهنده مقداردهی اولیه شده‌اند هشدار می‌دهد، مگر اینکه اعلانی که مقداردهی می‌شود دارای صفت \f(CW\*(C`nonstring\*(C'\fR باشد. برای مثال: .Sp .Vb 2 \& char arr[3] = "foo"; /* Warning. */ \& char arr2[3] _\|_attribute_\|_((nonstring)) = "bar"; /* No warning. */ .Ve .Sp این هشدار با \fB\-Wextra\fR فعال می‌شود. اگر \fB\-Wc++\-compat\fR فعال باشد، هشدار نگارش متفاوتی خواهد داشت و حتی در صورتی که اعلان در حال مقداردهی دارای صفت \f(CW\*(C`nonstring\*(C'\fR باشد نیز هشدار می‌دهد، زیرا در C++ چنین مقداردهی‌هایی یک خطا محسوب می‌شوند. .IP \fB\-Warray\-compare\fR 4 .IX Item "-Warray-compare" دربارهٔ مقایسه‌های برابری و رابطه‌ای بین دو عملوند از نوع آرایه هشدار می‌دهد. این مقایسه در C++20 منسوخ شده است. برای مثال: .Sp .Vb 3 \& int arr1[5]; \& int arr2[5]; \& bool same = arr1 == arr2; .Ve .Sp گزینهٔ \&\fB\-Warray\-compare\fR با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Warray\-parameter\fR 4 .IX Item "-Warray-parameter" .PD 0 .IP \fB\-Warray\-parameter=\fR\fIn\fR 4 .IX Item "-Warray-parameter=n" .PD دربارهٔ اعلان‌های مجدد توابع حاوی پارامترهایی از نوع آرایه یا اشاره‌گر با انواع یا اشکال ناسازگار هشدار می‌دهد، و تشخیص دسترسی‌های خارج از محدوده به چنین پارامترهایی را از طریق هشدارهایی مانند \&\fB\-Warray\-bounds\fR ممکن می‌سازد. .Sp اگر اولین اعلان تابع از شکل آرایه برای اعلان پارامتر استفاده کند، کران مشخص‌شده در آرایه به عنوان حداقل تعداد عناصر مورد انتظار در فراخوانی‌های تابع و حداکثر تعداد عناصر مورد دسترسی توسط آن در نظر گرفته می‌شود. عدم ارسال آرگومان‌هایی با اندازهٔ کافی یا دسترسی به بیش از حداکثر تعداد عناصر ممکن است توسط هشدارهایی مانند \fB\-Warray\-bounds\fR یا \fB\-Wstringop\-overflow\fR تشخیص داده شود. در سطح ۱، این هشدار ناسازگاری‌های مربوط به پارامترهای آرایه‌ای که با استفاده از شکل \f(CW\*(C`T[static N]\*(C'\fR اعلان شده‌اند را تشخیص می‌دهد. .Sp برای مثال، این هشدار برای اعلان دوم \f(CW\*(C`f\*(C'\fR به کار می‌افتد زیرا اعلان نخست با کلمهٔ کلیدی \f(CW\*(C`static\*(C'\fR مشخص می‌کند که آرگومان آرایه باید حداقل چهار عنصر داشته باشد، در حالی که اعلان دوم اجازه می‌دهد آرایه‌ای با هر اندازه‌ای به \f(CW\*(C`f\*(C'\fR ارسال شود. .Sp .Vb 2 \& void f (int[static 4]); \& void f (int[]); // warning (inconsistent array form) \& \& void g (void) \& { \& int *p = (int *)malloc (1 * sizeof (int)); \& f (p); // warning (array too small) \& ... \& } .Ve .Sp در سطح ۲، این هشدار همچنین برای اعلان‌های مجددی که شامل هرگونه ناسازگاری دیگر در اَشکال آرگومان آرایه یا اشاره‌گر نشان‌دهندهٔ اندازهٔ آرایه باشند صادر می‌شود. اشاره‌گرها و آرایه‌های با کران نامشخص یکسان در نظر گرفته می‌شوند و هشداری ایجاد نمی‌کنند. .Sp .Vb 3 \& void g (int*); \& void g (int[]); // no warning \& void g (int[8]); // warning (inconsistent array bound) .Ve .Sp گزینهٔ \&\fB\-Warray\-parameter=2\fR در \fB\-Wall\fR گنجانده شده است. گزینهٔ \&\fB\-Wvla\-parameter\fR هشدارهایی را برای ناسازگاری‌های مشابه شامل آرگومان‌های آرایه با طول متغیر (Variable Length Array) صادر می‌کند. .Sp شکل کوتاه گزینهٔ \fB\-Warray\-parameter\fR معادل \&\fB\-Warray\-parameter=2\fR است. شکل منفی \fB\-Wno\-array\-parameter\fR معادل \fB\-Warray\-parameter=0\fR است. .IP \fB\-Wattribute\-alias=\fR\fIn\fR 4 .IX Item "-Wattribute-alias=n".PD 0 .IP \fB\-Wno\-attribute\-alias\fR 4 .IX Item "-Wno-attribute-alias" .PD دربارهٔ اعلان‌هایی که از مشخصهٔ \f(CW\*(C`alias\*(C'\fR و مشخصه‌های مشابه استفاده می‌کنند و هدف آن‌ها با نوع نام‌مستعار ناسازگار است، هشدار می‌دهد. .RS 4 .IP \fB\-Wattribute\-alias=1\fR 4 .IX Item "-Wattribute-alias=1" سطح هشدار پیش‌فرض گزینهٔ \fB\-Wattribute\-alias\fR، ناسازگاری‌های بین نوع اعلان نام‌مستعار و نوع هدف آن را تشخیص می‌دهد. چنین ناسازگاری‌هایی معمولاً نشان‌دهندهٔ باگ هستند. .IP \fB\-Wattribute\-alias=2\fR 4 .IX Item "-Wattribute-alias=2" در این سطح، \fB\-Wattribute\-alias\fR مواردی را نیز تشخیص می‌دهد که مشخصه‌های اعلان نام‌مستعار محدودکننده‌تر از مشخصه‌های اعمال‌شده بر هدف آن باشند. این عدم تطابق‌ها می‌توانند بالقوه منجر به تولید کد نادرست شوند. در موارد دیگر ممکن است بی‌خطر بوده و صرفاً با افزودن مشخصهٔ مفقود به هدف حل شوند. برای مقایسه، گزینهٔ \fB\-Wmissing\-attributes\fR را ببینید که در شرایطی که اعلان نام‌مستعار نسبت به هدف کمتر محدودکننده باشد (به‌جای محدودکننده‌تر بودن)، پیام‌های تشخیصی را کنترل می‌کند. .Sp مشخصه‌های بررسی‌شده شامل \f(CW\*(C`alloc_align\*(C'\fR، \f(CW\*(C`alloc_size\*(C'\fR، \&\f(CW\*(C`cold\*(C'\fR، \f(CW\*(C`const\*(C'\fR، \f(CW\*(C`hot\*(C'\fR، \f(CW\*(C`leaf\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR، \&\f(CW\*(C`nonnull\*(C'\fR، \f(CW\*(C`noreturn\*(C'\fR، \f(CW\*(C`nothrow\*(C'\fR، \f(CW\*(C`pure\*(C'\fR، \&\f(CW\*(C`returns_nonnull\*(C'\fR و \f(CW\*(C`returns_twice\*(C'\fR هستند. .RE .RS 4 .Sp گزینهٔ \fB\-Wattribute\-alias\fR معادل \fB\-Wattribute\-alias=1\fR است. این مقدار پیش‌فرض است. می‌توانید این هشدارها را با \fB\-Wno\-attribute\-alias\fR یا \fB\-Wattribute\-alias=0\fR غیرفعال کنید. .RE .IP \fB\-Wbidi\-chars=\fR[\fBnone\fR|\fBunpaired\fR|\fBany\fR|\fBucn\fR] 4 .IX Item "-Wbidi-chars=[none|unpaired|any|ucn]" دربارهٔ نویسه‌های کنترلی دوجهتهٔ (bidirectional) احتمالاً گمراه‌کنندهٔ UTF\-8 در کامنت‌ها، رشته‌های متنی صریح (string literals)، ثابت‌های نویسه‌ای و شناسه‌ها هشدار می‌دهد. چنین نویسه‌هایی می‌توانند جهت نگارش چپ‌به‌راست را به راست‌به‌چپ (و برعکس) تغییر دهند، که این امر می‌تواند سبب سردرگمی میان ترتیب منطقی و ترتیب بصری شود. این موضوع ممکن است خطرناک باشد؛ برای مثال، ممکن است به نظر برسد که بخشی از کد کامنت نشده است، در حالی که در واقع کامنت شده است. .Sp سه سطح هشدار توسط GCC پشتیبانی می‌شود. حالت پیش‌فرض \fB\-Wbidi\-chars=unpaired\fR است که دربارهٔ بافت‌های دوجهته‌ای (bidi) که به‌درستی خاتمه نیافته‌اند هشدار می‌دهد. گزینهٔ \fB\-Wbidi\-chars=none\fR هشدار را غیرفعال می‌کند. گزینهٔ \fB\-Wbidi\-chars=any\fR دربارهٔ هرگونه استفاده از نویسه‌های کنترلی دوجهته هشدار می‌دهد. .Sp به‌طور پیش‌فرض، این هشدار دربارهٔ UCNها اخطار نمی‌دهد. با این حال، می‌توان با استفاده از \fB\-Wbidi\-chars=unpaired,ucn\fR یا \fB\-Wbidi\-chars=any,ucn\fR چنین بررسی را فعال کرد. استفاده از \fB\-Wbidi\-chars=ucn\fR معتبر است و در صورتی که پیش از آن \fB\-Wbidi\-chars=any\fR مشخص نشده باشد، معادل \fB\-Wbidi\-chars=unpaired,ucn\fR خواهد بود. .IP \fB\-Wbool\-compare\fR 4 .IX Item "-Wbool-compare" دربارهٔ مقایسهٔ یک عبارت بولی با یک مقدار عدد صحیح متفاوت با \f(CW\*(C`true\*(C'\fR/\f(CW\*(C`false\*(C'\fR هشدار می‌دهد. برای نمونه، مقایسهٔ زیر همواره نادرست (false) است: .Sp .Vb 3 \& int n = 5; \& ... \& if ((n > 1) == 2) { ... } .Ve .Sp این هشدار با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wbool\-operation\fR 4 .IX Item "-Wbool-operation" دربارهٔ عملیات مشکوک روی عبارت‌هایی از نوع بولی هشدار می‌دهد. برای نمونه، نقیض بیتی (bitwise negation) یک مقدار بولی به احتمال بسیار قوی یک باگ در برنامه است. برای زبان C، این گزینه همچنین دربارهٔ افزایش (increment) یا کاهش (decrement) یک مقدار بولی هشدار می‌دهد، که به‌ندرت معنادار است. (در ++C، کاهش یک مقدار بولی همواره نامعتبر است. افزایش یک مقدار بولی در C++17 نامعتبر بوده و در سایر نسخه‌ها منسوخ (deprecated) است.) .Sp این هشدار با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wduplicated\-branches\fR 4 .IX Item "-Wduplicated-branches" هنگامی که یک دستور if\-else دارای شاخه‌های یکسان باشد، هشدار می‌دهد. این هشدار مواردی مانند زیر را تشخیص می‌دهد: .Sp .Vb 4 \& if (p != NULL) \& return 0; \& else \& return 0; .Ve .Sp زمانی که هر دو شاخه تنها شامل یک دستور خالی (null statement) باشند هشدار نمی‌دهد. این هشدار همچنین برای عملگرهای شرطی نیز هشدار می‌دهد: .Sp .Vb 1 \& int i = x ? *p : *p; .Ve .IP \fB\-Wduplicated\-cond\fR 4 .IX Item "-Wduplicated-cond" دربارهٔ شرط‌های تکراری در یک زنجیرهٔ if\-else\-if هشدار می‌دهد. برای نمونه، برای کد زیر هشدار صادر می‌کند: .Sp .Vb 2 \& if (p\->q != NULL) { ... } \& else if (p\->q != NULL) { ... } .Ve .IP \fB\-Wframe\-address\fR 4 .IX Item "-Wframe-address" هنگامی که توابع درونی \fB_\|_builtin_frame_address\fR یا \fB_\|_builtin_return_address\fR با یک آرگومان بزرگ‌تر از 0 فراخوانی شوند، هشدار می‌دهد. چنین فراخوانی‌هایی ممکن است مقادیر نامعین بازگردانند یا باعث فروپاشی (crash) برنامه شوند. این هشدار در \fB\-Wall\fR گنجانده شده است. .IP "\fB\-Wno\-discarded\-qualifiers\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wno-discarded-qualifiers (C and Objective-C only)" اگر توصیف‌کننده‌های نوع (type qualifiers) در اشاره‌گرها نادیده گرفته شوند، هشدار نده. معمولاً کامپایلر زمانی که یک متغیر \f(CW\*(C`const char *\*(C'\fR به تابعی ارسال می‌شود که پارامتر \f(CW\*(C`char *\*(C'\fR می‌پذیرد هشدار می‌دهد. از این گزینه می‌توان برای فرونشاندن چنین هشداری استفاده کرد. .IP "\fB\-Wno\-discarded\-array\-qualifiers\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wno-discarded-array-qualifiers (C and Objective-C only)" اگر توصیف‌کننده‌های نوع در آرایه‌هایی که هدف اشاره‌گر هستند نادیده گرفته شوند، هشدار نده. معمولاً کامپایلر زمانی که یک متغیر \f(CW\*(C`const int (*)[]\*(C'\fR به تابعی ارسال می‌شود که پارامتر \f(CW\*(C`int (*)[]\*(C'\fR می‌پذیرد هشدار می‌دهد. از این گزینه می‌توان برای فرونشاندن چنین هشداری استفاده کرد. .IP "\fB\-Wno\-incompatible\-pointer\-types\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wno-incompatible-pointer-types (C and Objective-C only)" زمانی که تبدیلی بین اشاره‌گرهایی با انواع ناسازگار صورت می‌گیرد، هشدار نده. این هشدار برای مواردی است که توسط \fB\-Wno\-pointer\-sign\fR پوشش داده نمی‌شوند؛ گزینه‌ای که برای ارسال آرگومان یا انتساب اشاره‌گر با علامت‌داری (signedness) متفاوت هشدار می‌دهد. .Sp به‌طور پیش‌فرض، در C99 و گویش‌های بعدی C، کامپایلر GCC با این مسئله مانند یک خطا برخورد می‌کند. این خطا می‌تواند با استفاده از \fB\-fpermissive\fR (همراه با برخی خطاهای دیگر)، یا منحصراً برای این خطا با \fB\-Wno\-error=incompatible\-pointer\-types\fR به یک هشدار تنزل یابد. .Sp این هشدار با گزینهٔ \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-int\-conversion\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wno-int-conversion (C and Objective-C only)" دربارهٔ تبدیل‌های ناسازگار عدد صحیح به اشاره‌گر و اشاره‌گر به عدد صحیح هشدار نده. این هشدار مربوط به تبدیل‌های ضمنی (implicit conversions) است؛ برای تبدیل‌های صریح (explicit conversions) می‌توان از هشدارهای \fB\-Wno\-int\-to\-pointer\-cast\fR و \fB\-Wno\-pointer\-to\-int\-cast\fR استفاده کرد. .Sp به‌طور پیش‌فرض، در C99 و گویش‌های بعدی C، کامپایلر GCC با این مسئله مانند یک خطا برخورد می‌کند. این خطا می‌تواند با استفاده از \fB\-fpermissive\fR (همراه با برخی خطاهای دیگر)، یا منحصراً برای این خطا با \fB\-Wno\-error=int\-conversion\fR به یک هشدار تنزل یابد. .Sp این هشدار با گزینهٔ \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wzero\-as\-null\-pointer\-constant\fR 4 .IX Item "-Wzero-as-null-pointer-constant" هنگامی که یک مقدار مستقیم (literal) \fB0\fR به عنوان ثابت اشاره‌گر تهی (null pointer constant) استفاده شود، هشدار می‌دهد. .IP \fB\-Wzero\-length\-bounds\fR 4 .IX Item "-Wzero-length-bounds" دربارهٔ دسترسی به عناصر اعضای آرایهٔ با طول صفر که ممکن است با دیگر اعضای همان شیء هم‌پوشانی داشته باشند، هشدار می‌دهد. اعلان آرایه‌های با طول صفر درونی توصیه نمی‌شود، زیرا دسترسی به آن‌ها تعریف‌نشده (undefined) است. .Sp برای نمونه، دو ذخیره‌سازی اول در تابع \f(CW\*(C`bad\*(C'\fR شناسایی می‌شوند زیرا عناصر آرایه با اعضای پس از آن یعنی \f(CW\*(C`b\*(C'\fR و \f(CW\*(C`c\*(C'\fR هم‌پوشانی دارند. ذخیره‌سازی سوم توسط \fB\-Warray\-bounds\fR شناسایی می‌شود، زیرا فراتر از مرزهای شیء دربرگیرنده است. .Sp .Vb 2 \& struct X { int a[0]; int b, c; }; \& struct X x; \& \& void bad (void) \& { \& x.a[0] = 0; // \-Wzero\-length\-bounds \& x.a[1] = 1; // \-Wzero\-length\-bounds \& x.a[2] = 2; // \-Warray\-bounds \& } .Ve .Sp گزینهٔ \fB\-Wzero\-length\-bounds\fR توسط \fB\-Warray\-bounds\fR فعال می‌شود. .IP \fB\-Wno\-div\-by\-zero\fR 4 .IX Item "-Wno-div-by-zero" دربارهٔ تقسیم عدد صحیح بر صفر در زمان کامپایل هشدار نده. دربارهٔ تقسیم اعداد ممیز شناور بر صفر هشداری داده نمی‌شود، زیرا می‌تواند روشی معتبر برای دستیابی به مقادیر بی‌نهایت و NaN باشد. .IP \fB\-Wsystem\-headers\fR 4 .IX Item "-Wsystem-headers" پیام‌های هشدار را برای ساختارهای موجود در فایل‌های سرآیند (header) سیستم چاپ می‌کند. هشدارهای ناشی از سرآیندهای سیستم معمولاً با این فرض که مشکلات واقعی را نشان نمی‌دهند و تنها خواندن خروجی کامپایلر را دشوارتر می‌کنند، نادیده گرفته می‌شوند. استفاده از این گزینهٔ خط فرمان به GCC می‌گوید هشدارهای سرآیندهای سیستم را طوری صادر کند که گویی در کد کاربر رخ داده‌اند. با این حال، توجه داشته باشید که استفاده از \fB\-Wall\fR همراه با این گزینه، دربارهٔ پراگماهای ناشناخته در سرآیندهای سیستم هشدار \fIنمی‌دهد\fR\-\-\-برای آن، \fB\-Wunknown\-pragmas\fR نیز باید استفاده شود..IP \fB\-Wtautological\-compare\fR 4 .IX Item "-Wtautological-compare" در صورتی که یک مقایسه با خود همواره به درست (true) یا نادرست (false) ارزیابی شود، هشدار می‌دهد. این هشدار اشتباهات گوناگونی را شناسایی می‌کند، مانند: .Sp .Vb 3 \& int i = 1; \& ... \& if (i > i) { ... } .Ve .Sp این هشدار همچنین درباره مقایسه‌های بیتی که همواره به درست یا نادرست ارزیابی می‌شوند هشدار می‌دهد؛ برای نمونه: .Sp .Vb 1 \& if ((a & 16) == 10) { ... } .Ve .Sp همواره نادرست خواهد بود. .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wtrailing\-whitespace\fR 4 .IX Item "-Wtrailing-whitespace" .PD 0 .IP \fB\-Wtrailing\-whitespace=\fR\fIkind\fR 4 .IX Item "-Wtrailing-whitespace=kind" .PD درباره فاصله‌های خالی انتهایی در انتهای خطوط، از جمله درون کامنت‌ها، اما به جز فاصله‌های خالی انتهایی در لیترال‌های رشته‌ای خام هشدار می‌دهد. \&\f(CW\*(C`\-Wtrailing\-whitespace\*(C'\fR معادل \&\f(CW\*(C`\-Wtrailing\-whitespace=blanks\*(C'\fR است و تنها درباره نویسه‌های فاصله (space) و تب افقی (horizontal tab) در انتهای خط هشدار می‌دهد. \&\f(CW\*(C`\-Wtrailing\-whitespace=any\*(C'\fR علاوه بر آن‌ها درباره نویسه‌های انتهایی تغییر صفحه (form feed) یا تب عمودی نیز هشدار می‌دهد. \&\f(CW\*(C`\-Wno\-trailing\-whitespace\*(C'\fR یا \&\f(CW\*(C`\-Wtrailing\-whitespace=none\*(C'\fR این هشدار را غیرفعال می‌کنند، که حالت پیش‌فرض است. این یک هشدار مربوط به سبک کدنویسی است. .IP \fB\-Wleading\-whitespace=\fR\fIkind\fR 4 .IX Item "-Wleading-whitespace=kind" درباره ایرادهای سبکی در فاصله‌های خالی ابتدایی هشدار می‌دهد، اما نه درباره میزان تورفتگی. برخی پروژه‌ها از سبک‌های کدنویسی استفاده می‌کنند که در آن‌ها تنها از فاصله‌ها برای تورفتگی استفاده می‌شود، برخی دیگر تنها از تب‌ها، و برخی دیگر از صفر یا چند تب (برای مضارب \f(CW\*(C`\-ftabstop=\fR\f(CIn\fR\f(CW\*(C'\fR) و به دنبال آن صفر یا کمتر از \fIn\fR فاصله استفاده می‌کنند. روی خطوطی که منحصراً شامل فاصله‌های خالی هستند هشداری داده نمی‌شود (اگرچه ممکن است هشدار \f(CW\*(C`\-Wtrailing\-whitespace=\*(C'\fR صادر شود)، و درون لیترال‌های رشته‌ای خام نیز هشداری صادر نمی‌شود. همچنین برای فاصله‌های خالی ابتدایی درون کامنت‌های چندخطی نیز هشدار صادر می‌شود. \&\f(CW\*(C`\-Wleading\-whitespace=spaces\*(C'\fR برای پروژه‌هایی که می‌خواهند تورفتگی را فقط با فاصله انجام دهند، درباره فاصله‌های خالی ابتدایی غیر از فاصله هشدار می‌دهد. \&\f(CW\*(C`\-Wleading\-whitespace=tabs\*(C'\fR برای پروژه‌هایی که می‌خواهند تورفتگی را فقط با تب‌های افقی انجام دهند، درباره فاصله‌های خالی ابتدایی غیر از تب‌های افقی هشدار می‌دهد. \&\f(CW\*(C`\-Wleading\-whitespace=blanks\*(C'\fR درباره فاصله‌های خالی ابتدایی غیر از فاصله‌ها و تب‌های افقی، یا درباره قرار گرفتن تب افقی پس از یک فاصله در ابتدای خط، یا درباره \fIn\fR یا بیشتر فاصله متوالی در ابتدای خط (که \fIn\fR آرگومان \f(CW\*(C`\-ftabstop=\fR\f(CIn\fR\f(CW\*(C'\fR است، به‌طور پیش‌فرض ۸) هشدار می‌دهد. \&\f(CW\*(C`\-Wleading\-whitespace=none\*(C'\fR این هشدار را غیرفعال می‌کند، که حالت پیش‌فرض است. این یک هشدار مربوط به سبک کدنویسی است. .IP \fB\-Wtrampolines\fR 4 .IX Item "-Wtrampolines" درباره ترامپولین‌های (trampolines) تولیدشده برای اشاره‌گرها به توابع تو در تو هشدار می‌دهد. ترامپولین قطعه داده یا کد کوچکی است که در زمان اجرا بر روی پشته (stack) ایجاد می‌شود، هنگامی که نشانی یک تابع تو در تو گرفته شده است، و برای فراخوانی غیرمستقیم تابع تو در تو به کار می‌رود. برای برخی از مقاصد، این قطعه تنها از داده تشکیل شده است و بنابراین به رفتار ویژه‌ای نیاز ندارد. اما برای بیشتر مقاصد، از کد تشکیل شده و بنابراین لازم است پشته قابل اجرا (executable) باشد تا برنامه به‌درستی کار کند. .IP \fB\-Wfloat\-equal\fR 4 .IX Item "-Wfloat-equal" اگر مقادیر ممیز شناور در مقایسه‌های برابری به کار روند، هشدار می‌دهد. .Sp ایده پشت این هشدار این است که گاهی اوقات (برای برنامه‌نویس) راحت‌تر است که مقادیر ممیز شناور را به‌عنوان تقریب‌هایی از اعداد حقیقی با دقت نامحدود در نظر بگیرد. اگر چنین کاری می‌کنید، لازم است (از طریق تحلیل کد، یا روش‌های دیگر) حداکثر یا حداکثر خطای احتمالی ناشی از محاسبات را محاسبه کرده و هنگام انجام مقایسه‌ها (و هنگام تولید خروجی، که البته مسئله دیگری است) آن را لحاظ کنید. به‌ویژه، به‌جای بررسی برابری، باید بررسی کنید که آیا بازه این دو مقدار همپوشانی دارد یا خیر؛ و این کار با عملگرهای رابطه‌ای انجام می‌شود، بنابراین مقایسه‌های برابری احتمالاً نادرست هستند. .IP "\fB\-Wtraditional\fR (تنها C و Objective\-C)" 4 .IX Item "-Wtraditional (C and Objective-C only)" درباره ساختارهای خاصی که در C سنتی (traditional C) و ISO C رفتار متفاوتی دارند هشدار می‌دهد. همچنین درباره ساختارهای ISO C که هیچ معادلی در C سنتی ندارند، و/یا ساختارهای مسئله‌داری که باید از آن‌ها اجتناب شود هشدار می‌دهد. .RS 4 .IP * 4 پارامترهای ماکرو که درون لیترال‌های رشته‌ای در بدنه ماکرو ظاهر می‌شوند. در C سنتی جایگزینی ماکرو درون لیترال‌های رشته‌ای انجام می‌شود، اما در ISO C این‌گونه نیست. .IP * 4 در C سنتی، برخی دستورات پیش‌پردازنده وجود نداشتند. پیش‌پردازنده‌های سنتی تنها خطی را یک دستور به حساب می‌آوردند که \fB#\fR در ستون ۱ آن خط قرار داشت. بنابراین \fB\-Wtraditional\fR درباره دستوراتی که C سنتی می‌فهمد اما نادیده می‌گیرد چون \fB#\fR نویسه اول خط نیست، هشدار می‌دهد. همچنین پیشنهاد می‌کند دستوراتی مانند \&\f(CW\*(C`#pragma\*(C'\fR را که برای C سنتی قابل فهم نیستند با تورفتگی پنهان کنید. برخی پیاده‌سازی‌های سنتی \&\f(CW\*(C`#elif\*(C'\fR را تشخیص نمی‌دهند، بنابراین این گزینه پیشنهاد می‌کند به‌طور کلی از آن اجتناب کنید. .IP * 4 ماکروی تابع‌گونه‌ای که بدون آرگومان ظاهر شود. .IP * 4 عملگر مثبت یکانی (+). .IP * 4 پسوند ثابت صحیح \fBU\fR، یا پسوندهای ثابت ممیز شناور \fBF\fR یا \fBL\fR. (C سنتی از پسوند \fBL\fR روی ثابت‌های صحیح پشتیبانی می‌کند.) توجه داشته باشید که این پسوندها در ماکروهای تعریف‌شده در سرآیندهای سیستمی اکثر سیستم‌های امروزی ظاهر می‌شوند، مانند ماکروهای \fB_MIN\fR/\fB_MAX\fR در \f(CW\*(C`\*(C'\fR. استفاده از این ماکروها در کد کاربر معمولاً ممکن است به هشدارهای کاذب بیانجامد، اما پیش‌پردازنده یکپارچه GCC زمینه کافی برای جلوگیری از هشدار در این موارد را دارد. .IP * 4 تابعی که در یک بلوک به‌صورت external اعلان شده و سپس پس از پایان آن بلوک استفاده شده است. .IP * 4 یک عبارت \f(CW\*(C`switch\*(C'\fR عملوندی از نوع \f(CW\*(C`long\*(C'\fR داشته باشد. .IP * 4 یک اعلان تابع غیر\-\f(CW\*(C`static\*(C'\fR پس از یک اعلان \f(CW\*(C`static\*(C'\fR بیاید. این ساختار توسط برخی کامپایلرهای C سنتی پذیرفته نمی‌شود. .IP * 4 نوع ISO یک ثابت صحیح، پهنا یا علامت‌دار بودن متفاوتی نسبت به نوع سنتی آن داشته باشد. این هشدار تنها در صورتی صادر می‌شود که مبنای عدد ده باشد؛ یعنی درباره مقادیر هگزادسیمال یا هشت‌هشتی که معمولاً نشان‌دهنده الگوهای بیتی هستند، هشداری داده نمی‌شود. .IP * 4 استفاده از الحاق رشته در ISO شناسایی شود. .IP * 4 مقداردهی اولیه ساختارهای مرکب خودکار (automatic aggregates). .IP * 4 تداخل شناسه‌ها با برچسب‌ها (labels). C سنتی فاقد فضای‌نام مجزا برای برچسب‌ها است. .IP * 4 مقداردهی اولیه اجتماع‌ها (unions). اگر مقداردهی اولیه صفر باشد، هشدار نادیده گرفته می‌شود. این کار با این فرض انجام می‌شود که مقداردهی صفر در کد کاربر با شرط‌هایی مانند \f(CW\*(C`_\|_STDC_\|_\*(C'\fR قرار گرفته تا از هشدارهای مفقود بودن مقداردهی اولیه جلوگیری شود و در C سنتی به مقداردهی اولیه پیش‌فرض به صفر متکی است. .IP * 4 تبدیل‌ها توسط پیش‌نمونه‌ها (prototypes) میان مقادیر نقطه ثابت/ممیز شناور و برعکس. نبود این پیش‌نمونه‌ها هنگام کامپایل با C سنتی مشکلات جدی ایجاد می‌کند. این زیرمجموعه‌ای از هشدارهای تبدیل ممکن است؛ برای مجموعه کامل از \fB\-Wtraditional\-conversion\fR استفاده کنید. .IP * 4 استفاده از تعاریف تابع به سبک ISO C. این هشدار عمداً برای اعلان‌های پیش‌نمونه یا توابع با تعداد متغیر آرگومان (variadic) صادر \fIنمی‌شود\fR، زیرا این ویژگی‌های ISO C هنگام استفاده از ماکروهای سازگاری با C سنتی در libiberty یعنی \f(CW\*(C`PARAMS\*(C'\fR و \f(CW\*(C`VPARAMS\*(C'\fR در کد شما ظاهر می‌شوند. همچنین این هشدار برای توابع تو در تو نادیده گرفته می‌شود زیرا آن ویژگی در حال حاضر یک افزونه GCC است و بنابراین ارتباطی با سازگاری با C سنتی ندارد. .RE .RS 4 .RE .IP "\fB\-Wtraditional\-conversion\fR (تنها C و Objective\-C)" 4 .IX Item "-Wtraditional-conversion (C and Objective-C only)" اگر یک پیش‌نمونه باعث تبدیل نوعی شود که با آنچه در نبود پیش‌نمونه برای همان آرگومان رخ می‌داد متفاوت باشد، هشدار می‌دهد. این شامل تبدیل‌های نقطه ثابت به ممیز شناور و برعکس، و تبدیل‌هایی است که پهنا یا علامت‌دار بودن یک آرگومان نقطه ثابت را تغییر می‌دهند، مگر زمانی که با ارتقای نوع پیش‌فرض (default promotion) یکسان باشد. .IP "\fB\-Wdeclaration\-after\-statement\fR (تنها C و Objective\-C)" 4 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)" هنگامی که یک اعلان پس از یک دستور در یک بلوک قرار گیرد هشدار می‌دهد. این ساختار که از C++ شناخته شده است، در ISO C99 معرفی شد و به‌طور پیش‌فرض در GCC مجاز است. این ساختار توسط ISO C90 پشتیبانی نمی‌شود. .Sp این هشدار توسط \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wshadow\fR 4 .IX Item "-Wshadow" هر زمان که یک متغیر محلی یا اعلان نوع، متغیر دیگر، پارامتر، نوع، عضو کلاس (در C++)، یا متغیر نمونه (در Objective\-C) را بپوشاند (shadow کند)، یا هر زمان که یک تابع توکار (built-in) پوشانده شود، هشدار می‌دهد. توجه داشته باشید که در C++، کامپایلر در صورتی هشدار می‌دهد که یک متغیر محلی یک typedef صریح را بپوشاند، اما اگر یک struct/class/enum را بپوشاند هشدار نمی‌دهد. اگر این هشدار فعال باشد، شامل تمام موارد سایه‌اندازی محلی نیز می‌شود. این بدان معناست که در صورت استفاده از \fB\-Wshadow\fR، گزینه‌های \fB\-Wno\-shadow=local\fR و \fB\-Wno\-shadow=compatible\-local\fR نادیده گرفته می‌شوند. مشابه \fB\-Wshadow=global\fR است..IP "\fB\-Wno\-shadow\-ivar\fR (فقط Objective\-C)" 4 .IX Item "-Wno-shadow-ivar (Objective-C only)" هرگاه یک متغیر محلی بر روی یک متغیر نمونه (instance variable) در یک متد Objective\-C سایه بیندازد (shadow کند)، هشدار ندهد. .IP \fB\-Wshadow=global\fR 4 .IX Item "-Wshadow=global" برای هرگونه سایه‌اندازی هشدار می‌دهد. مشابه \fB\-Wshadow\fR است. .IP \fB\-Wshadow=local\fR 4 .IX Item "-Wshadow=local" هنگامی که یک متغیر محلی متغیر محلی دیگری یا یک پارامتر را بپوشاند (سایه‌اندازی کند)، هشدار می‌دهد. .IP \fB\-Wshadow=compatible\-local\fR 4 .IX Item "-Wshadow=compatible-local" هنگامی هشدار می‌دهد که یک متغیر محلی متغیر محلی دیگری یا پارامتری را که نوع آن با نوع متغیر سایه‌انداز سازگار است بپوشاند. در C++، سازگاری نوع در اینجا به این معناست که نوع متغیر سایه‌انداز قابل تبدیل به نوع متغیر سایه‌اندازی‌شده باشد. ایجاد این پرچم (علاوه بر \fB\-Wshadow=local\fR) بر این ایده استوار است که هرگاه یک متغیر محلی متغیر دیگری از نوع ناسازگار را بپوشاند، این کار به احتمال زیاد عمدی بوده و باگ یا غلط املایی نیست، همان‌طور که در مثال زیر نشان داده شده است: .Sp .Vb 8 \& for (SomeIterator i = SomeObj.begin(); i != SomeObj.end(); ++i) \& { \& for (int i = 0; i < N; ++i) \& { \& ... \& } \& ... \& } .Ve .Sp از آنجا که دو متغیر \f(CW\*(C`i\*(C'\fR در مثال بالا دارای نوع‌های ناسازگار هستند، فعال کردنِ تنها \fB\-Wshadow=compatible\-local\fR هشداری صادر نمی‌کند. به دلیل ناسازگار بودن نوع‌های آن‌ها، اگر برنامه‌نویس به اشتباه یکی را به جای دیگری به کار ببرد، انتظار می‌رود بررسی نوع (type checking) متوجه آن شده و یک خطا یا هشدار صادر کند. استفاده از این پرچم به جای \fB\-Wshadow=local\fR می‌تواند احتمالاً تعداد هشدارهای ناشی از سایه‌اندازی‌های عمدی را کاهش دهد. توجه داشته باشید که این به این معنی نیز هست که سایه‌اندازی روی \f(CW\*(C`const char *i\*(C'\fR توسط \&\f(CW\*(C`char *i\*(C'\fR هشداری صادر نمی‌کند. .Sp این هشدار توسط \fB\-Wshadow=local\fR نیز فعال می‌شود. .IP \fB\-Wlarger\-than=\fR\fIbyte\-size\fR 4 .IX Item "-Wlarger-than=byte-size" هرگاه شیئی تعریف شود که اندازهٔ آن از \fIbyte\-size\fR بیشتر باشد هشدار می‌دهد. گزینهٔ \&\fB\-Wlarger\-than=\fR\fBPTRDIFF_MAX\fR به طور پیش‌فرض فعال است. هشدارهای کنترل‌شده با این گزینه را می‌توان یا با تعیین \fIbyte\-size\fR به مقدار \&\fBSIZE_MAX\fR یا بیشتر، و یا با \fB\-Wno\-larger\-than\fR غیرفعال کرد. .Sp همچنین برای فراخوانی توابع دارای کران مانند \f(CW\*(C`memchr\*(C'\fR یا \&\f(CW\*(C`strnlen\*(C'\fR که کرانی بزرگ‌تر از بزرگ‌ترین شیء ممکن تعیین می‌کنند (که به طور پیش‌فرض \fBPTRDIFF_MAX\fR بایت است)، هشدار می‌دهد. این هشدارها تنها با \fB\-Wno\-larger\-than\fR قابل غیرفعال‌سازی هستند. .IP \fB\-Wno\-larger\-than\fR 4 .IX Item "-Wno-larger-than" هشدارهای \fB\-Wlarger\-than=\fR را غیرفعال می‌کند. این گزینه معادل \&\fB\-Wlarger\-than=\fR\fBSIZE_MAX\fR یا بزرگ‌تر است. .IP \fB\-Wframe\-larger\-than=\fR\fIbyte\-size\fR 4 .IX Item "-Wframe-larger-than=byte-size" اگر اندازهٔ یک قاب تابع (stack frame) از \fIbyte\-size\fR فراتر رود، هشدار می‌دهد. محاسبهٔ انجام‌شده برای تعیین اندازهٔ قاب پشته تقریبی بوده و محافظه‌کارانه (دست بالا) نیست. نیازمندی‌های واقعی ممکن است تا حدودی بیشتر از \fIbyte\-size\fR باشد، حتی اگر هشداری دریافت نکنید. علاوه بر این، هر فضایی که از طریق \f(CW\*(C`alloca\*(C'\fR، آرایه‌های با طول متغیر (variable-length arrays) یا ساختارهای مرتبط تخصیص یابد، توسط کامپایلر هنگام تعیین صدور یا عدم صدور هشدار لحاظ نمی‌شود. گزینهٔ \&\fB\-Wframe\-larger\-than=\fR\fBPTRDIFF_MAX\fR به طور پیش‌فرض فعال است. هشدارهای کنترل‌شده توسط این گزینه را می‌توان با مشخص کردن \fIbyte\-size\fR برابر با \fBSIZE_MAX\fR یا بیشتر، و یا توسط \&\fB\-Wno\-frame\-larger\-than\fR غیرفعال کرد. .IP \fB\-Wno\-frame\-larger\-than\fR 4 .IX Item "-Wno-frame-larger-than" هشدارهای \fB\-Wframe\-larger\-than=\fR را غیرفعال می‌کند. این گزینه معادل \&\fB\-Wframe\-larger\-than=\fR\fBSIZE_MAX\fR یا بزرگ‌تر است. .IP \fB\-Wfree\-nonheap\-object\fR 4 .IX Item "-Wfree-nonheap-object" هنگام تلاش برای آزادسازی شیئی که در هیپ (heap) تخصیص داده نشده است، یا با استفاده از اشاره‌گری که از فراخوانی پیشین تابع تخصیص متناظر بازگردانده نشده است، هشدار می‌دهد. برای نمونه، از آنجا که فراخوانی \f(CW\*(C`stpcpy\*(C'\fR اشاره‌گری به نویسهٔ پایانی nul بازمی‌گرداند و نه به ابتدای شیء، فراخوانی \f(CW\*(C`free\*(C'\fR در ادامه به عنوان خطا/هشدار تشخیص داده می‌شود. .Sp .Vb 6 \& void f (char *p) \& { \& p = stpcpy (p, "abc"); \& // ... \& free (p); // warning \& } .Ve .Sp گزینهٔ \&\fB\-Wfree\-nonheap\-object\fR در \fB\-Wall\fR گنجانده شده است. .IP \fB\-Wstack\-usage=\fR\fIbyte\-size\fR 4 .IX Item "-Wstack-usage=byte-size" اگر میزان مصرف پشته توسط یک تابع ممکن است از \fIbyte\-size\fR فراتر رود، هشدار می‌دهد. محاسبات انجام‌شده برای تعیین مصرف پشته محافظه‌کارانه (دست بالا) است. هر فضایی که از طریق \f(CW\*(C`alloca\*(C'\fR، آرایه‌های با طول متغیر یا ساختارهای مرتبط تخصیص یابد، هنگام تعیین صدور یا عدم صدور هشدار توسط کامپایلر لحاظ می‌شود. .Sp پیام خروجی مطابق با خروجی \fB\-fstack\-usage\fR است. .RS 4 .IP * 4 اگر مصرف پشته کاملاً ایستا باشد اما از مقدار مشخص‌شده فراتر رود: .Sp .Vb 1 \& warning: stack usage is 1120 bytes .Ve .IP * 4 اگر مصرف پشته (تا حدی) پویا ولی دارای کران باشد: .Sp .Vb 1 \& warning: stack usage might be 1648 bytes .Ve .IP * 4 اگر مصرف پشته (تا حدی) پویا و فاقد کران باشد: .Sp .Vb 1 \& warning: stack usage might be unbounded .Ve .RE .RS 4 .Sp گزینهٔ \&\fB\-Wstack\-usage=\fR\fBPTRDIFF_MAX\fR به صورت پیش‌فرض فعال است. هشدارهای کنترل‌شده با این گزینه را می‌توان یا با تعیین \fIbyte\-size\fR به میزان \&\fBSIZE_MAX\fR یا بیشتر، و یا توسط \&\fB\-Wno\-stack\-usage\fR غیرفعال کرد. .RE .IP \fB\-Wno\-stack\-usage\fR 4 .IX Item "-Wno-stack-usage" هشدارهای \fB\-Wstack\-usage=\fR را غیرفعال می‌کند. این گزینه معادل \&\fB\-Wstack\-usage=\fR\fBSIZE_MAX\fR یا بزرگ‌تر است. .IP \fB\-Wunsafe\-loop\-optimizations\fR 4 .IX Item "-Wunsafe-loop-optimizations" اگر حلقه به دلیل اینکه کامپایلر نمی‌تواند هیچ فرضی دربارهٔ کران شاخص‌های حلقه داشته باشد قابل بهینه‌سازی نباشد، هشدار می‌دهد. همراه با \&\fB\-funsafe\-loop\-optimizations\fR، اگر کامپایلر چنین فرضیاتی را اعمال کند هشدار می‌دهد. .IP "\fB\-Wno\-pedantic\-ms\-format\fR (فقط مقصدهای MinGW)" 4 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)" هنگامی که در ترکیب با \fB\-Wformat\fR و \fB\-pedantic\fR بدون افزونه‌های GNU استفاده شود، این گزینه هشدارهای مربوط به مشخص‌کننده‌های عرض قالب غیراستاندارد (non\-ISO) برای \f(CW\*(C`printf\*(C'\fR / \f(CW\*(C`scanf\*(C'\fR شامل \f(CW\*(C`I32\*(C'\fR، \f(CW\*(C`I64\*(C'\fR و \f(CW\*(C`I\*(C'\fR را که در مقصدهای Windows استفاده می‌شوند و به زمان‌اجرای مایکروسافت (MS runtime) وابسته هستند، غیرفعال می‌کند. .IP \fB\-Wpointer\-arith\fR 4 .IX Item "-Wpointer-arith" دربارهٔ هر چیزی که به «اندازهٔ» (size of) یک نوع تابع یا نوع \f(CW\*(C`void\*(C'\fR وابسته باشد هشدار می‌دهد. کامپایلر GNU C برای سهولت در محاسبات با اشاره‌گرهای \&\f(CW\*(C`void *\*(C'\fR و اشاره‌گرها به توابع، اندازهٔ این نوع‌ها را ۱ در نظر می‌گیرد. در C++، همچنین هنگامی که یک عملیات حسابی شامل \&\f(CW\*(C`NULL\*(C'\fR باشد هشدار می‌دهد. این هشدار توسط \fB\-Wpedantic\fR نیز فعال می‌شود. .Sp این هشدار توسط \fB\-pedantic\-errors\fR به یک خطا تبدیل می‌شود. .IP \fB\-Wno\-pointer\-compare\fR 4 .IX Item "-Wno-pointer-compare" اگر یک اشاره‌گر با یک ثابت نویسه‌ای صفر مقایسه شود، هشدار ندهد. این وضعیت معمولاً به این معناست که قصد برنامه‌نویس بازگشایی اشاره‌گر (dereference) بوده است. برای مثال: .Sp .Vb 3 \& const char *p = foo (); \& if (p == \*(Aq\e0\*(Aq) \& return 42; .Ve .Sp توجه داشته باشید که کد بالا در C++11 نامعتبر است. .Sp این هشدار به طور پیش‌فرض فعال است. .IP \fB\-Wno\-tsan\fR 4 .IX Item "-Wno-tsan" هشدارهای مربوط به قابلیت‌های پشتیبانی‌نشده در ThreadSanitizer را غیرفعال می‌کند. .Sp ابزار ThreadSanitizer از \f(CW\*(C`std::atomic_thread_fence\*(C'\fR پشتیبانی نمی‌کند و ممکن است موارد مثبت کاذب (false positive) گزارش کند. .IP \fB\-Wtype\-limits\fR 4 .IX Item "-Wtype-limits" اگر یک مقایسه به دلیل محدودهٔ محدود نوع داده همیشه درست یا همیشه نادرست باشد هشدار می‌دهد، اما برای عبارت‌های ثابت هشدار صادر نمی‌کند. برای مثال، اگر یک متغیر بدون علامت (unsigned) با استفاده از \&\f(CW\*(C`<\*(C'\fR یا \f(CW\*(C`>=\*(C'\fR با صفر مقایسه شود، هشدار می‌دهد. این هشدار توسط \&\fB\-Wextra\fR نیز فعال می‌شود..IP "\fB\-Wabsolute\-value\fR (فقط C و Objective\-C)" 4 .IX Item "-Wabsolute-value (فقط C و Objective-C)" هنگامی که تابع استاندارد مناسب‌تری در دسترس است، برای فراخوانی توابع استانداردی که قدر مطلق یک آرگومان را محاسبه می‌کنند، هشدار می‌دهد. برای نمونه، فراخوانی \f(CWabs(3.14)\fR این هشدار را فعال می‌کند چرا که تابع مناسب‌تر برای محاسبهٔ قدر مطلق یک آرگومان با نوع double تابع \f(CW\*(C`fabs\*(C'\fR است. این گزینه همچنین زمانی که آرگومانِ ارسالی به چنین تابعی دارای یک نوع بدون علامت (unsigned) باشد، هشدار می‌دهد. این هشدار را می‌توان با یک تبدیل نوع (type cast) صریح برطرف کرد و همچنین توسط \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wcomment\fR 4 .IX Item "-Wcomment" .PD 0 .IP \fB\-Wcomments\fR 4 .IX Item "-Wcomments" .PD هرگاه توالیِ آغاز کامنت \fB/*\fR درون یک کامنت \fB/*\fR ظاهر شود، یا هرگاه یک بک‌اسلش-خط‌جدید (backslash-newline) درون یک کامنت \fB//\fR قرار گیرد، هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wtrigraphs\fR 4 .IX Item "-Wtrigraphs" اگر هرگونه سه‌نگاره‌ای (trigraph) دیده شود که ممکن است معنای برنامه را تغییر دهد، هشدار می‌دهد. دربارهٔ سه‌نگاره‌های درون کامنت‌ها هشداری داده نمی‌شود، مگر مواردی که تشکیل یک خط‌جدید گریزخورده (escaped newline) را بدهند. .Sp این گزینه به‌طور ضمنی توسط \fB\-Wall\fR فعال می‌شود. اگر \fB\-Wall\fR داده نشود، این گزینه همچنان فعال است مگر اینکه سه‌نگاره‌ها فعال شده باشند. برای تبدیل سه‌نگاره‌ها بدون دریافت هشدار، اما همراه با دریافت سایر هشدارهای \&\fB\-Wall\fR، از \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR استفاده کنید. .IP \fB\-Wundef\fR 4 .IX Item "-Wundef" اگر یک شناسهٔ تعریف‌نشده در یک دستورالعمل \f(CW\*(C`#if\*(C'\fR ارزیابی شود، هشدار می‌دهد. چنین شناسه‌هایی با صفر جایگزین می‌شوند. .IP \fB\-Wexpansion\-to\-defined\fR 4 .IX Item "-Wexpansion-to-defined" هرگاه \fBdefined\fR در بسط یک ماکرو دیده شود (از جمله حالتی که ماکرو توسط یک دستورالعمل \fB#if\fR بسط داده می‌شود)، هشدار می‌دهد. چنین کاربردی قابل‌حمل (portable) نیست. این هشدار همچنین توسط \fB\-Wpedantic\fR و \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wunused\-macros\fR 4 .IX Item "-Wunused-macros" دربارهٔ ماکروهای تعریف‌شده در فایل اصلی که استفاده نشده‌اند، هشدار می‌دهد. یک ماکرو \fIاستفاده‌شده\fR محسوب می‌شود اگر دست‌کم یک‌بار بسط داده شده یا وجود آن بررسی شده باشد. پیش‌پردازنده همچنین اگر ماکرو در زمان بازتعریف یا حذف تعریف (undefined شدن) استفاده نشده باشد، هشدار می‌دهد. .Sp دربارهٔ ماکروهای توکار (built-in)، ماکروهای تعریف‌شده در خط فرمان، و ماکروهای تعریف‌شده در فایل‌های include هشداری داده نمی‌شود. .Sp \&\fIنکته:\fR اگر یک ماکرو در عمل استفاده شده باشد، اما صرفاً در بلوک‌های شرطی نادیده‌گرفته‌شده به کار رفته باشد، پیش‌پردازنده آن را به عنوان استفاده‌نشده گزارش می‌دهد. برای جلوگیری از این هشدار در چنین حالتی، می‌توانید محدودهٔ (scope) تعریف ماکرو را، برای نمونه با انتقال آن به اولین بلوک نادیده‌گرفته‌شده، بهبود بخشید. همچنین می‌توانید با چیزی شبیه به عبارت زیر، یک استفادهٔ ساختگی (dummy) ایجاد کنید: .Sp .Vb 2 \& #if defined the_macro_causing_the_warning \& #endif .Ve .IP \fB\-Wno\-endif\-labels\fR 4 .IX Item "-Wno-endif-labels" هرگاه متنی پس از یک \f(CW\*(C`#else\*(C'\fR یا یک \f(CW\*(C`#endif\*(C'\fR بیاید، هشدار نده. این حالت گاهی در برنامه‌های قدیمی‌تر با کدهایی به فرم زیر رخ می‌دهد: .Sp .Vb 5 \& #if FOO \& ... \& #else FOO \& ... \& #endif FOO .Ve .Sp دومین و سومین \f(CW\*(C`FOO\*(C'\fR باید درون کامنت قرار گیرند. این هشدار به‌طور پیش‌فرض فعال است. .IP "\fB\-Wbad\-function\-cast\fR (فقط C و Objective\-C)" 4 .IX Item "-Wbad-function-cast (فقط C و Objective-C)" هنگامی که فراخوانی یک تابع به یک نوع ناسازگار تبدیل (cast) شود، هشدار می‌دهد. برای نمونه، اگر فراخوانی تابعی که یک نوع عدد صحیح را برمی‌گرداند به یک نوع اشاره‌گر تبدیل شود، هشدار می‌دهد. .IP "\fB\-Wc90\-c99\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc90-c99-compat (فقط C و Objective-C)" دربارهٔ ویژگی‌هایی که در ISO C90 وجود ندارند اما در ISO C99 حاضرند، هشدار می‌دهد. برای نمونه، دربارهٔ استفاده از آرایه‌های با طول متغیر (variable length arrays)، نوع \f(CW\*(C`long long\*(C'\fR، نوع \f(CW\*(C`bool\*(C'\fR، لیترال‌های مرکب (compound literals)، مقداردهنده‌های اولیهٔ مشخص‌شده (designated initializers) و غیره هشدار می‌دهد. این گزینه مستقل از حالت استانداردها است. هشدارها در عبارتی که پس از \f(CW\*(C`_\|_extension_\|_\*(C'\fR می‌آید غیرفعال می‌شوند. .IP "\fB\-Wc99\-c11\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc99-c11-compat (فقط C و Objective-C)" دربارهٔ ویژگی‌هایی که در ISO C99 وجود ندارند اما در ISO C11 حاضرند، هشدار می‌دهد. برای نمونه، دربارهٔ استفاده از ساختارها و اجتماعات (unions) بی‌نام، توصیف‌کنندهٔ نوع \f(CW\*(C`_Atomic\*(C'\fR، مشخص‌کنندهٔ ردهٔ حافظهٔ \f(CW\*(C`_Thread_local\*(C'\fR، مشخص‌کنندهٔ \f(CW\*(C`_Alignas\*(C'\fR، عملگر \f(CW\*(C`Alignof\*(C'\fR، کلمهٔ کلیدی \f(CW\*(C`_Generic\*(C'\fR و غیره هشدار می‌دهد. این گزینه مستقل از حالت استانداردها است. هشدارها در عبارتی که پس از \f(CW\*(C`_\|_extension_\|_\*(C'\fR می‌آید غیرفعال می‌شوند. .IP "\fB\-Wc11\-c23\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc11-c23-compat (فقط C و Objective-C)" .PD 0 .IP "\fB\-Wc11\-c2x\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc11-c2x-compat (فقط C و Objective-C)" .PD دربارهٔ ویژگی‌هایی که در ISO C11 وجود ندارند اما در ISO C23 حاضرند، هشدار می‌دهد. برای نمونه، دربارهٔ حذف رشته در \f(CW\*(C`_Static_assert\*(C'\fR، استفاده از نحو \fB[[]]\fR برای صفت‌ها (attributes)، استفاده از انواع ممیز شناور ده‌دهی و غیره هشدار می‌دهد. این گزینه مستقل از حالت استانداردها است. هشدارها در عبارتی که پس از \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR می‌آید غیرفعال می‌شوند. نام \fB\-Wc11\-c2x\-compat\fR منسوخ شده است. .Sp هنگامی که کامپایل در حالت C23 نباشد، این هشدارها توسط \fB\-pedantic\-errors\fR به خطا (error) ارتقا می‌یابند. .IP "\fB\-Wc23\-c2y\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc23-c2y-compat (فقط C و Objective-C)" .PD 0 .IP "\fB\-Wc23\-c2y\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc23-c2y-compat (فقط C و Objective-C)" .PD دربارهٔ ویژگی‌هایی که در ISO C23 وجود ندارند اما در ISO C2Y حاضرند، هشدار می‌دهد. برای نمونه، دربارهٔ انتخاب بر اساس یک نام نوع به‌جای یک عبارت در \f(CW\*(C`_Generic\*(C'\fR هشدار می‌دهد. این گزینه مستقل از حالت استانداردها است. هشدارها در عبارتی که پس از \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR می‌آید غیرفعال می‌شوند. .Sp هنگامی که کامپایل در حالت C2Y نباشد، این هشدارها توسط \fB\-pedantic\-errors\fR به خطا ارتقا می‌یابند. .IP "\fB\-Wc++\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc++-compat (فقط C و Objective-C)" دربارهٔ ساختارهای ISO C که خارج از زیرمجموعهٔ مشترک ISO C و ISO C++ هستند هشدار می‌دهد؛ مانند درخواست برای تبدیل ضمنی از \&\f(CW\*(C`void *\*(C'\fR به یک اشاره‌گر به نوع غیر \f(CW\*(C`void\*(C'\fR. .IP "\fB\-Wc++11\-compat\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wc++11-compat (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++ که معنای آن‌ها میان ISO C++ 1998 و ISO C++ 2011 متفاوت است هشدار می‌دهد؛ مانند شناسه‌هایی در ISO C++ 1998 که در ISO C++ 2011 کلمهٔ کلیدی هستند. این هشدار گزینهٔ \fB\-Wnarrowing\fR را روشن کرده و توسط \fB\-Wall\fR نیز فعال می‌شود. .IP "\fB\-Wc++14\-compat\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wc++14-compat (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++ که معنای آن‌ها میان ISO C++ 2011 و ISO C++ 2014 متفاوت است هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wc++17\-compat\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wc++17-compat (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++ که معنای آن‌ها میان ISO C++ 2014 و ISO C++ 2017 متفاوت است هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wc++20\-compat\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wc++20-compat (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++ که معنای آن‌ها میان ISO C++ 2017 و ISO C++ 2020 متفاوت است هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-c++11\-extensions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-c++11-extensions (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++11 در کدی که با استفاده از یک استاندارد قدیمی‌تر C++ کامپایل می‌شود، هشدار نده. حتی بدون این گزینه، برخی از ساختارهای C++11 تنها در صورتی شناسایی خواهند شد که از \fB\-Wpedantic\fR استفاده شود. .IP "\fB\-Wno\-c++14\-extensions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-c++14-extensions (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++14 در کدی که با استفاده از یک استاندارد قدیمی‌تر C++ کامپایل می‌شود، هشدار نده. حتی بدون این گزینه، برخی از ساختارهای C++14 تنها در صورتی شناسایی خواهند شد که از \fB\-Wpedantic\fR استفاده شود. .IP "\fB\-Wno\-c++17\-extensions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-c++17-extensions (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++17 در کدی که با استفاده از یک استاندارد قدیمی‌تر C++ کامپایل می‌شود، هشدار نده. حتی بدون این گزینه، برخی از ساختارهای C++17 تنها در صورتی شناسایی خواهند شد که از \fB\-Wpedantic\fR استفاده شود. .IP "\fB\-Wno\-c++20\-extensions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-c++20-extensions (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++20 در کدی که با استفاده از یک استاندارد قدیمی‌تر C++ کامپایل می‌شود، هشدار نده. حتی بدون این گزینه، برخی از ساختارهای C++20 تنها در صورتی شناسایی خواهند شد که از \fB\-Wpedantic\fR استفاده شود. .IP "\fB\-Wno\-c++23\-extensions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-c++23-extensions (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++23 در کدی که با استفاده از یک استاندارد قدیمی‌تر C++ کامپایل می‌شود، هشدار نده. حتی بدون این گزینه، برخی از ساختارهای C++23 تنها در صورتی شناسایی خواهند شد که از \fB\-Wpedantic\fR استفاده شود. .IP "\fB\-Wno\-c++26\-extensions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-c++26-extensions (فقط C++ و Objective-C++)" دربارهٔ ساختارهای C++26 در کدی که با استفاده از یک استاندارد قدیمی‌تر C++ کامپایل می‌شود، هشدار نده. حتی بدون این گزینه، برخی از ساختارهای C++26 تنها در صورتی شناسایی خواهند شد که از \fB\-Wpedantic\fR استفاده شود. .IP \fB\-Wcast\-qual\fR 4 .IX Item "-Wcast-qual" هرگاه اشاره‌گری طوری تبدیل نوع (cast) شود که یک توصیف‌کنندهٔ نوع را از نوع مقصد حذف کند، هشدار می‌دهد. برای نمونه، اگر یک \f(CW\*(C`const char *\*(C'\fR به یک \f(CW\*(C`char *\*(C'\fR معمولی تبدیل شود، هشدار می‌دهد. .Sp همچنین هنگام انجام تبدیلی که یک توصیف‌کنندهٔ نوع را به شیوه‌ای ناامن معرفی می‌کند، هشدار می‌دهد. برای نمونه، تبدیل نوع \f(CW\*(C`char **\*(C'\fR به \f(CW\*(C`const char **\*(C'\fR مانند این مثال ناامن است: .Sp.Vb 6 \& /* p is char ** value. */ \& const char **q = (const char **) p; \& /* Assignment of readonly string to const char * is OK. */ \& *q = "string"; \& /* Now char** pointer points to read\-only memory. */ \& **p = \*(Aqb\*(Aq; .Ve .IP \fB\-Wcast\-align\fR 4 .IX Item "-Wcast-align" هرگاه اشاره‌گری به نحوی تبدیل نوع (cast) شود که تراز (alignment) موردنیاز مقصد افزایش یابد، هشدار می‌دهد. برای نمونه، اگر در ماشین‌هایی که اعداد صحیح تنها در مرزهای دو یا چهار بایتی قابل دسترس هستند، یک \f(CW\*(C`char *\*(C'\fR به یک \f(CW\*(C`int *\*(C'\fR تبدیل نوع شود، هشدار می‌دهد. .IP \fB\-Wcast\-align=strict\fR 4 .IX Item "-Wcast-align=strict" هرگاه اشاره‌گری به نحوی تبدیل نوع شود که تراز موردنیاز مقصد افزایش یابد، هشدار می‌دهد. برای نمونه، صرف‌نظر از ماشین مقصد، اگر یک \f(CW\*(C`char *\*(C'\fR به یک \f(CW\*(C`int *\*(C'\fR تبدیل نوع شود، هشدار می‌دهد. .IP \fB\-Wcast\-function\-type\fR 4 .IX Item "-Wcast-function-type" زمانی که یک اشاره‌گر تابع به یک اشاره‌گر تابع ناسازگار تبدیل نوع شود، هشدار می‌دهد. در تبدیل نوعی که شامل انواع توابعی با فهرست آرگومان متغیر است، تنها انواع آرگومان‌های اولیه‌ای که ارائه شده‌اند در نظر گرفته می‌شوند. هر پارامتری از نوع اشاره‌گر با هر نوع اشاره‌گر دیگری مطابقت دارد. هرگونه تفاوت بی‌ضرر در انواع صحیح نادیده گرفته می‌شود، مانند \f(CW\*(C`int\*(C'\fR در برابر \f(CW\*(C`long\*(C'\fR در مقصدهای ILP32. به همین ترتیب، توصیف‌کننده‌های نوع نادیده گرفته می‌شوند. نوع تابع \f(CW\*(C`void (*) (void)\*(C'\fR خاص است و با همه‌چیز مطابقت دارد، که می‌تواند برای فرونشاندن این هشدار استفاده شود. در تبدیل نوع شامل اشاره‌گر به انواع عضو، هرگاه تبدیل نوع، اشاره‌گر به نوع عضو را تغییر دهد، این هشدار صادر می‌شود. این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wcast\-user\-defined\fR 4 .IX Item "-Wcast-user-defined" زمانی که تبدیل نوع به یک نوع مرجع (reference type) شامل یک تبدیل تعریف‌شده توسط کاربر که برنامه‌نویس ممکن است انتظار فراخوانی آن را داشته باشد نباشد، هشدار می‌دهد. .Sp .Vb 2 \& struct A { operator const int&(); } a; \& auto r = (int&)a; // warning .Ve .Sp این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wwrite\-strings\fR 4 .IX Item "-Wwrite-strings" هنگام کامپایل C، به ثوابت رشته‌ای نوع \f(CW\*(C`const char[\fR\f(CIlength\fR\f(CW]\*(C'\fR اختصاص می‌دهد تا کپی کردن آدرس یکی از آن‌ها در یک اشاره‌گر غیر\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR هشداری ایجاد کند. این هشدارها به شما کمک می‌کنند در زمان کامپایل کدهایی را که ممکن است تلاش کنند در یک ثابت رشته‌ای بنویسند پیدا کنید، اما تنها در صورتی که در استفاده از \f(CW\*(C`const\*(C'\fR در اعلان‌ها و پیش‌نمونه‌ها بسیار دقیق بوده باشید. در غیر این صورت، این هشدارها فقط مزاحمت ایجاد می‌کنند. به همین دلیل است که ما \fB\-Wall\fR را وادار به درخواست این هشدارها نکرده‌ایم. .Sp هنگام کامپایل C++، درباره تبدیل منسوخ‌شده از رشته‌های حرفی به \f(CW\*(C`char *\*(C'\fR هشدار می‌دهد. این هشدار به‌طور پیش‌فرض برای برنامه‌های C++ فعال است. .Sp این هشدار با \fB\-pedantic\-errors\fR در حالت C++11 یا جدیدتر به یک خطا ارتقا می‌یابد. .IP \fB\-Wclobbered\fR 4 .IX Item "-Wclobbered" برای متغیرهایی که ممکن است توسط \f(CW\*(C`longjmp\*(C'\fR یا \&\f(CW\*(C`vfork\*(C'\fR تغییر کنند هشدار می‌دهد. این هشدار نیز توسط \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wno\-complain\-wrong\-lang\fR 4 .IX Item "-Wno-complain-wrong-lang" به‌طور پیش‌فرض، پیشخوان‌های زبان زمانی که یک گزینه خط فرمان معتبر باشد اما برای آن پیشخوان قابل اعمال نباشد، اعلام اشکال می‌کنند. این رفتار را می‌توان با \fB\-Wno\-complain\-wrong\-lang\fR غیرفعال کرد، که بیشتر زمانی مفید است که یک گرداننده کامپایلر واحد برای چندین فایل منبع نوشته‌شده به زبان‌های مختلف فراخوانی شود، برای نمونه: .Sp .Vb 1 \& $ g++ \-fno\-rtti a.cc b.f90 .Ve .Sp گرداننده \fIg++\fR پیشخوان C++ را برای کامپایل \fIa.cc\fR و پیشخوان Fortran را برای کامپایل \fIb.f90\fR فراخوانی می‌کند. پیشخوان دومی پیام \&\fBf951: Warning: command\-line option \*(Aq\-fno\-rtti\*(Aq is valid for C++/D/ObjC++ but not for Fortran\fR را تشخیص می‌دهد، که می‌توان آن را با \fB\-Wno\-complain\-wrong\-lang\fR غیرفعال کرد. .IP "\fB\-Wcompare\-distinct\-pointer\-types\fR (تنها C و Objective\-C)" 4 .IX Item "-Wcompare-distinct-pointer-types (C and Objective-C only)" اگر اشاره‌گرهایی از انواع متمایز بدون تبدیل نوع مقایسه شوند، هشدار می‌دهد. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wconversion\fR 4 .IX Item "-Wconversion" برای تبدیل‌های ضمنی که ممکن است مقداری را تغییر دهند هشدار می‌دهد. این شامل تبدیل بین اعداد حقیقی و صحیح، مانند \f(CW\*(C`abs (x)\*(C'\fR زمانی که \&\f(CW\*(C`x\*(C'\fR از نوع \f(CW\*(C`double\*(C'\fR است؛ تبدیل بین علامت‌دار و بدون‌علامت، مانند \f(CW\*(C`unsigned ui = \-1\*(C'\fR؛ و تبدیل به انواع کوچک‌تر، مانند \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR می‌شود. برای تبدیل‌های صریح مانند \f(CW\*(C`abs ((int) x)\*(C'\fR و \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR، یا اگر مقدار در اثر تبدیل تغییر نکند مانند \f(CW\*(C`abs (2.0)\*(C'\fR هشدار داده نمی‌شود. هشدارهای مربوط به تبدیل بین اعداد صحیح علامت‌دار و بدون‌علامت را می‌توان با استفاده از \fB\-Wno\-sign\-conversion\fR غیرفعال کرد. .Sp برای C++، همچنین در مورد رفع ابهام بارگذاری اضافی گیج‌کننده برای تبدیل‌های تعریف‌شده توسط کاربر؛ و تبدیل‌هایی که هرگز از عملگر تبدیل نوع استفاده نمی‌کنند: تبدیل به \f(CW\*(C`void\*(C'\fR، همان نوع، یک کلاس پایه یا یک مرجع به آن‌ها، هشدار می‌دهد. هشدارهای مربوط به تبدیل بین اعداد صحیح علامت‌دار و بدون‌علامت به‌طور پیش‌فرض در C++ غیرفعال هستند مگر اینکه \&\fB\-Wsign\-conversion\fR به‌صراحت فعال شده باشد. .Sp هشدارهای مربوط به تبدیل از محاسبات روی یک نوع کوچک به همان نوع، تنها با \fB\-Warith\-conversion\fR ارائه می‌شوند. .IP \fB\-Wdangling\-else\fR 4 .IX Item "-Wdangling-else" درباره ساختارهایی که ممکن است در آن‌ها ابهام وجود داشته باشد که شاخه \f(CW\*(C`else\*(C'\fR به کدام دستور \&\f(CW\*(C`if\*(C'\fR تعلق دارد، هشدار می‌دهد. در اینجا نمونه‌ای از چنین حالتی آورده شده است: .Sp .Vb 7 \& { \& if (a) \& if (b) \& foo (); \& else \& bar (); \& } .Ve .Sp در C/C++، هر شاخه \f(CW\*(C`else\*(C'\fR به درونی‌ترین دستور ممکن \&\f(CW\*(C`if\*(C'\fR تعلق دارد، که در این مثال \f(CW\*(C`if (b)\*(C'\fR است. این اغلب آن چیزی نیست که برنامه‌نویس انتظار داشته است، همان‌طور که در مثال بالا با تورفتگی انتخابی برنامه‌نویس نشان داده شده است. هنگامی که پتانسیل چنین سردرگمی وجود داشته باشد، با مشخص شدن این گزینه، GCC یک هشدار صادر می‌کند. برای رفع هشدار، آکولادهای صریح در اطراف درونی‌ترین دستور \f(CW\*(C`if\*(C'\fR اضافه کنید تا هیچ راهی وجود نداشته باشد که \f(CW\*(C`else\*(C'\fR بتواند به \f(CW\*(C`if\*(C'\fR دربرگیرنده تعلق یابد. کد حاصل به این شکل خواهد بود: .Sp .Vb 9 \& { \& if (a) \& { \& if (b) \& foo (); \& else \& bar (); \& } \& } .Ve .Sp این هشدار توسط \fB\-Wparentheses\fR فعال می‌شود. .IP \fB\-Wdangling\-pointer\fR 4 .IX Item "-Wdangling-pointer" .PD 0 .IP \fB\-Wdangling\-pointer=\fR\fIn\fR 4 .IX Item "-Wdangling-pointer=n" .PD درباره استفاده از اشاره‌گرها (یا مراجع C++) به اشیایی با طول عمر ذخیره‌سازی خودکار پس از پایان یافتن طول عمرشان هشدار می‌دهد. این شامل متغیرهای محلی اعلان‌شده در بلوک‌های تودرتو، لیترال‌های مرکب و سایر اشیاء موقت بدون‌نام می‌شود. علاوه بر این، درباره ذخیره آدرس چنین اشیایی در اشاره‌گرهای دررفته هشدار می‌دهد. این هشدار در تمام سطوح بهینه‌سازی فعال است اما ممکن است با بهینه‌سازی نتایج متفاوتی نسبت به حالت بدون بهینه‌سازی در پی داشته باشد. .RS 4 .IP \fB\-Wdangling\-pointer=1\fR 4 .IX Item "-Wdangling-pointer=1" در سطح ۱، این هشدار تنها استفاده‌های بدون شرط از اشاره‌گرهای معلق را تشخیص می‌دهد. .IP \fB\-Wdangling\-pointer=2\fR 4 .IX Item "-Wdangling-pointer=2" در سطح ۲، علاوه بر استفاده‌های بدون شرط، این هشدار استفاده‌های شرطی از اشاره‌گرهای معلق را نیز تشخیص می‌دهد. .RE .RS 4 .Sp فرم کوتاه \fB\-Wdangling\-pointer\fR معادل \&\fB\-Wdangling\-pointer=2\fR است، در حالی که \&\fB\-Wno\-dangling\-pointer\fR و \&\fB\-Wdangling\-pointer=0\fR اثر یکسانی در غیرفعال کردن هشدارها دارند. \&\fB\-Wdangling\-pointer=2\fR در \fB\-Wall\fR گنجانده شده است. .Sp این مثال هشدار را در سطح ۱ برمی‌انگیزد؛ آدرس شیء موقت بدون‌نام به‌طور غیرمشروط در خارج از حوزه آن ارجاع داده شده است. .Sp .Vb 9 \& char f (char c1, char c2, char c3) \& { \& char *p; \& { \& p = (char[]) { c1, c2, c3 }; \& } \& // warning: using dangling pointer \*(Aqp\*(Aq to an unnamed temporary \& return *p; \& } .Ve .Sp در تابع زیر، ذخیره کردن آدرس متغیر محلی \&\f(CW\*(C`x\*(C'\fR در اشاره‌گر دررفته \f(CW*p\fR هشدار را در سطح ۱ برمی‌انگیزد. .Sp.Vb 6 \& void g (int **p) \& { \& int x = 7; \& // warning: storing the address of local variable \*(Aqx\*(Aq in \*(Aq*p\*(Aq \& *p = &x; \& } .Ve .Sp در این مثال، آرایه \fIa\fR هنگام استفاده از اشاره‌گر \fIs\fR خارج از حوزه (scope) قرار دارد. از آنجا که کدی که \f(CW\*(C`s\*(C'\fR را تنظیم می‌کند شرطی است، این هشدار در سطح ۲ فعال می‌شود. .Sp .Vb 11 \& extern void frob (const char *); \& void h (char *s) \& { \& if (!s) \& { \& char a[12] = "tmpname"; \& s = a; \& } \& // warning: dangling pointer \*(Aqs\*(Aq to \*(Aqa\*(Aq may be used \& frob (s); \& } .Ve .RE .IP \fB\-Wdate\-time\fR 4 .IX Item "-Wdate-time" هنگام مواجهه با ماکروهای \f(CW\*(C`_\|_TIME_\|_\*(C'\fR، \f(CW\*(C`_\|_DATE_\|_\*(C'\fR یا \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR هشدار می‌دهد، چرا که ممکن است مانع از کامپایل‌های بازتولیدپذیرِ بیت‌به‌بیت یکسان شوند. .IP \fB\-Wempty\-body\fR 4 .IX Item "-Wempty-body" اگر یک بدنه خالی در عبارت‌های \f(CW\*(C`if\*(C'\fR، \f(CW\*(C`else\*(C'\fR یا \f(CW\*(C`do while\*(C'\fR رخ دهد هشدار می‌دهد. این هشدار با \fB\-Wextra\fR نیز فعال می‌شود. .IP \fB\-Wno\-endif\-labels\fR 4 .IX Item "-Wno-endif-labels" در مورد نشانه‌های سرگردان پس از \f(CW\*(C`#else\*(C'\fR و \f(CW\*(C`#endif\*(C'\fR هشدار نمی‌دهد. .IP \fB\-Wenum\-compare\fR 4 .IX Item "-Wenum-compare" درباره مقایسه بین مقادیرِ انواع شمارشی مختلف هشدار می‌دهد. در C++‎، عدم تطابق نوع شمارشی در عبارت‌های شرطی نیز تشخیص داده می‌شود و این هشدار به طور پیش‌فرض فعال است. در C این هشدار با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wenum\-conversion\fR 4 .IX Item "-Wenum-conversion" هنگامی که مقداری از یک نوع شمارشی به طور ضمنی به نوع شمارشی دیگری تبدیل شود، هشدار می‌دهد. این هشدار در C با \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wenum\-int\-mismatch\fR (تنها C و Objective\-C)" 4 .IX Item "-Wenum-int-mismatch (C and Objective-C only)" درباره عدم تطابق بین نوع شمارشی و نوع عدد صحیح در اعلان‌ها هشدار می‌دهد. برای نمونه: .Sp .Vb 3 \& enum E { l = \-1, z = 0, g = 1 }; \& int foo(void); \& enum E foo(void); .Ve .Sp در C، یک نوع شمارشی با \f(CW\*(C`char\*(C'\fR، یک نوع عدد صحیح علامت‌دار، یا یک نوع عدد صحیح بدون علامت سازگار است. با این حال، از آنجا که انتخاب نوع زیربنایی یک نوع شمارشی وابسته به پیاده‌سازی (implementation\-defined) است، چنین عدم تطابق‌هایی ممکن است موجب بروز مشکلات سازگاری و انتقال‌پذیری شوند. در C++‎، چنین عدم تطابق‌هایی یک خطا محسوب می‌شوند. در C، این هشدار با \fB\-Wall\fR و \&\fB\-Wc++\-compat\fR فعال می‌شود. .IP "\fB\-Wjump\-misses\-init\fR (تنها C و Objective\-C)" 4 .IX Item "-Wjump-misses-init (C, Objective-C only)" اگر یک عبارت \f(CW\*(C`goto\*(C'\fR یا یک عبارت \f(CW\*(C`switch\*(C'\fR به جلو از روی مقداردهی اولیه یک متغیر بپرد، یا به عقب به برچسبی بپرد که متغیر پس از آن مقداردهی اولیه شده است، هشدار می‌دهد. این گزینه تنها در مورد متغیرهایی هشدار می‌دهد که هنگام اعلان مقداردهی اولیه می‌شوند. این هشدار تنها برای C و Objective\-C پشتیبانی می‌شود؛ در C++‎ چنین انشعابی در هر صورت یک خطا است. .Sp گزینه \&\fB\-Wjump\-misses\-init\fR در \fB\-Wc++\-compat\fR گنجانده شده است. این هشدار را می‌توان با گزینه \fB\-Wno\-jump\-misses\-init\fR غیرفعال کرد. .IP \fB\-Wsign\-compare\fR 4 .IX Item "-Wsign-compare" هنگامی که مقایسه میان مقادیر علامت‌دار و بدون علامت بتواند نتیجه نادرستی به هنگام تبدیل مقدار علامت‌دار به بدون علامت ایجاد کند، هشدار می‌دهد. در C++‎، این هشدار با \fB\-Wall\fR نیز فعال می‌شود. در C، با \fB\-Wextra\fR نیز فعال است. .IP \fB\-Wsign\-conversion\fR 4 .IX Item "-Wsign-conversion" درباره تبدیل‌های ضمنی که ممکن است علامت یک مقدار عدد صحیح را تغییر دهند، مانند انتساب یک عبارت عدد صحیح علامت‌دار به یک متغیر عدد صحیح بدون علامت، هشدار می‌دهد. یک تبدیل نوع صریح (explicit cast) این هشدار را بی‌اثر می‌کند. در C، این گزینه همچنین با \fB\-Wconversion\fR فعال می‌شود. .IP "\fB\-Wflex\-array\-member\-not\-at\-end\fR (تنها C و C++)" 4 .IX Item "-Wflex-array-member-not-at-end (C and C++ only)" زمانی هشدار می‌دهد که ساختاری حاوی یک عضو آرایه انعطاف‌پذیر C99 به عنوان آخرین فیلد، در انتهای یک ساختار دیگر قرار نگرفته باشد. این هشدار به عنوان مثال در چنین مواردی هشدار می‌دهد: .Sp .Vb 2 \& struct flex { int length; char data[]; }; \& struct mid_flex { int m; struct flex flex_data; int n; }; .Ve .IP \fB\-Wfloat\-conversion\fR 4 .IX Item "-Wfloat-conversion" برای تبدیل‌های ضمنی که دقت یک مقدار حقیقی (اعشاری) را کاهش می‌دهند هشدار می‌دهد. این شامل تبدیل از حقیقی به عدد صحیح و از مقادیر حقیقی با دقت بالاتر به مقادیر حقیقی با دقت پایین‌تر است. این گزینه همچنین با \&\fB\-Wconversion\fR فعال می‌شود. .IP \fB\-Wno\-scalar\-storage\-order\fR 4 .IX Item "-Wno-scalar-storage-order" درباره ساختارهای مشکوک مربوط به ترتیب ذخیره‌سازی اسکالر معکوس هشدار نمی‌دهد. .IP \fB\-Wsizeof\-array\-div\fR 4 .IX Item "-Wsizeof-array-div" درباره تقسیم دو عملگر sizeof هنگامی که اولی روی یک آرایه اعمال شده و مقسوم‌علیه برابر با اندازه عنصر آرایه نباشد هشدار می‌دهد. در چنین حالتی، این محاسبه تعداد عناصر آرایه را که احتمالاً مقصود کاربر بوده به دست نخواهد داد. این هشدار به عنوان مثال در مورد زیر هشدار می‌دهد: .Sp .Vb 5 \& int fn () \& { \& int arr[10]; \& return sizeof (arr) / sizeof (short); \& } .Ve .Sp این هشدار با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wsizeof\-pointer\-div\fR 4 .IX Item "-Wsizeof-pointer-div" برای تقسیم‌های مشکوک دو عبارت sizeof که اندازه اشاره‌گر را بر اندازه عنصر تقسیم می‌کنند هشدار می‌دهد؛ روشی که شیوه معمول محاسبه اندازه آرایه است اما با اشاره‌گرها به درستی کار نخواهد کرد. این هشدار به عنوان مثال درباره \f(CW\*(C`sizeof (ptr) / sizeof (ptr[0])\*(C'\fR در صورتی که \f(CW\*(C`ptr\*(C'\fR نه یک آرایه، بلکه یک اشاره‌گر باشد هشدار می‌دهد. این هشدار با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wsizeof\-pointer\-memaccess\fR 4 .IX Item "-Wsizeof-pointer-memaccess" برای پارامترهای طول مشکوک به برخی توابع توکار رشته‌ای و حافظه در صورتی که آرگومان از \f(CW\*(C`sizeof\*(C'\fR استفاده کند هشدار می‌دهد. این هشدار برای مثال برای \f(CW\*(C`memset (ptr, 0, sizeof (ptr));\*(C'\fR در صورتی که \f(CW\*(C`ptr\*(C'\fR یک آرایه نبوده بلکه اشاره‌گر باشد فعال می‌شود و یک اصلاح احتمالی را پیشنهاد می‌دهد، یا در مورد \&\f(CW\*(C`memcpy (&foo, ptr, sizeof (&foo));\*(C'\fR. گزینه \fB\-Wsizeof\-pointer\-memaccess\fR همچنین درباره فراخوانی توابع رونوشت محدود رشته مانند \f(CW\*(C`strncat\*(C'\fR یا \f(CW\*(C`strncpy\*(C'\fR که کران را یک عبارت \f(CW\*(C`sizeof\*(C'\fR از آرایه مبدا تعیین می‌کنند هشدار می‌دهد. برای نمونه، در تابع زیر فراخوانی \&\f(CW\*(C`strncat\*(C'\fR اندازه رشته مبدا را به عنوان کران مشخص می‌کند. این کار تقریباً به طور قطع یک اشتباه است و بنابراین فراخوانی تشخیص داده شده و گزارش می‌شود. .Sp .Vb 7 \& void make_file (const char *name) \& { \& char path[PATH_MAX]; \& strncpy (path, name, sizeof path \- 1); \& strncat (path, ".text", sizeof ".text"); \& ... \& } .Ve .Sp گزینه \fB\-Wsizeof\-pointer\-memaccess\fR با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-sizeof\-array\-argument\fR 4 .IX Item "-Wno-sizeof-array-argument" زمانی که عملگر \f(CW\*(C`sizeof\*(C'\fR روی پارامتری اعمال شود که در تعریف تابع به عنوان یک آرایه اعلان شده است، هشدار نمی‌دهد. این هشدار به طور پیش‌فرض برای برنامه‌های C و C++‎ فعال است. .IP \fB\-Wmemset\-elt\-size\fR 4 .IX Item "-Wmemset-elt-size" برای فراخوانی‌های مشکوک به تابع توکار \f(CW\*(C`memset\*(C'\fR، در صورتی که آرگومان اول به یک آرایه ارجاع داشته باشد و آرگومان سوم عددی برابر با تعداد عناصر باشد اما با اندازه آرایه در حافظه برابر نباشد، هشدار می‌دهد. این امر نشان می‌دهد که کاربر ضرب در اندازه عنصر را فراموش کرده است. این هشدار با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wmemset\-transposed\-args\fR 4 .IX Item "-Wmemset-transposed-args" برای فراخوانی‌های مشکوک به تابع توکار \f(CW\*(C`memset\*(C'\fR که در آن‌ها آرگومان دوم صفر نبوده و آرگومان سوم صفر باشد هشدار می‌دهد. برای مثال، فراخوانی \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR تشخیص داده می‌شود زیرا در عوض منظور \&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR بوده است. این پیغام خطا تنها در صورتی صادر می‌شود که آرگومان سوم یک مقدار لفظی صفر (literal zero) باشد. در غیر این صورت، اگر عبارتی باشد که به صفر تاشده (folded) باشد، یا تبدیل نوعِ صفر به نوعی دیگر باشد، بسیار کمتر محتمل است که آرگومان‌ها به اشتباه جابه‌جا شده باشند و هشداری صادر نمی‌شود. این هشدار با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Waddress\fR 4 .IX Item "-Waddress" درباره استفاده‌های مشکوک از عبارت‌های آدرس هشدار می‌دهد. این موارد شامل مقایسه آدرس یک تابع یا یک شیء اعلان‌شده با ثابت اشاره‌گر پوچ (null pointer constant) است، مانند آنچه در .Sp.Vb 6 \& void f (void); \& void g (void) \& { \& if (!f) // warning: expression evaluates to false \& abort (); \& } .Ve .Sp مقایسه یک اشاره‌گر با یک لیترال رشته‌ای، مانند .Sp .Vb 5 \& void f (const char *x) \& { \& if (x == "abc") // warning: expression evaluates to false \& puts ("equal"); \& } .Ve .Sp و بررسی برابری نتیجه جمع یا تفریق اشاره‌گر با null، مانند .Sp .Vb 4 \& void f (const int *p, int i) \& { \& return p + i == NULL; \& } .Ve .Sp چنین استفاده‌هایی معمولاً نشان‌دهنده خطای برنامه‌نویس هستند: آدرس اکثر توابع و اشیاء لزوماً برابر با درست (true) ارزیابی می‌شود (استثنای آن نمادهای ضعیف یا weak symbols هستند)، بنابراین استفاده از آن‌ها در یک عبارت شرطی ممکن است نشان‌دهنده جا افتادن پرانتز در فراخوانی یک تابع یا جا افتادن ارجاع‌گشایی در یک عبارت آرایه‌ای باشد. زیرمجموعه این هشدار برای اشاره‌گرهای شیء را می‌توان با تبدیل نوع عملوند اشاره‌گر به یک نوع عدد صحیح مانند \f(CW\*(C`intptr_t\*(C'\fR یا \f(CW\*(C`uintptr_t\*(C'\fR سرکوب کرد. مقایسه در برابر لیترال‌های رشته‌ای به رفتار تعریف‌نشده منجر شده و قابل‌حمل نیست، و نشان می‌دهد که احتمالاً هدف فراخوانی \f(CW\*(C`strcmp\*(C'\fR بوده است. اگر عبارت مشکوک نتیجه گسترش یک ماکرو باشد، این هشدار سرکوب می‌شود. هشدار \&\fB\-Waddress\fR توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-address\-of\-packed\-member\fR 4 .IX Item "-Wno-address-of-packed-member" هنگامی که آدرس عضوی با بسته‌بندی فشرده (packed member) از یک struct یا union گرفته می‌شود، که معمولاً به مقدار اشاره‌گر ناتراز (unaligned) می‌انجامد، هشدار داده نشود. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-Wlogical\-op\fR 4 .IX Item "-Wlogical-op" درباره استفاده‌های مشکوک از عملگرهای منطقی در عبارات هشدار می‌دهد. این شامل استفاده از عملگرهای منطقی در زمینه‌هایی است که به احتمال زیاد انتظار یک عملگر بیتی (bit\-wise) می‌رود. همچنین زمانی که عملوندهای یک عملگر منطقی یکسان باشند، هشدار می‌دهد: .Sp .Vb 2 \& extern int a; \& if (a < 0 && a < 0) { ... } .Ve .IP \fB\-Wlogical\-not\-parentheses\fR 4 .IX Item "-Wlogical-not-parentheses" درباره استفاده از نقیض منطقی (logical not) روی عملوند سمت چپ یک مقایسه هشدار می‌دهد. این گزینه در صورتی که عملوند سمت راست یک عبارت بولی در نظر گرفته شود هشدار نمی‌دهد. هدف آن شناسایی کدهای مشکوکی مانند کد زیر است: .Sp .Vb 3 \& int a; \& ... \& if (!a > 1) { ... } .Ve .Sp می‌توان با قرار دادن عملوند سمت چپ (LHS) درون پرانتز، این هشدار را سرکوب کرد: .Sp .Vb 1 \& if ((!a) > 1) { ... } .Ve .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Waggregate\-return\fR 4 .IX Item "-Waggregate-return" اگر توابعی که ساختار (structure) یا اجتماع (union) بازمی‌گردانند تعریف یا فراخوانی شوند، هشدار می‌دهد. (در زبان‌هایی که می‌توانید یک آرایه را بازگردانید، این کار نیز باعث ایجاد هشدار می‌شود.) .IP \fB\-Wno\-aggressive\-loop\-optimizations\fR 4 .IX Item "-Wno-aggressive-loop-optimizations" اگر کامپایلر در حلقه‌ای با تعداد تکرار ثابت رفتار تعریف‌نشده‌ای شناسایی کند، هشدار ندهد. گزینه \fB\-Waggressive\-loop\-optimizations\fR به‌طور پیش‌فرض فعال است. .IP \fB\-Wno\-attributes\fR 4 .IX Item "-Wno-attributes" در صورت استفاده از یک \f(CW\*(C`_\|_attribute_\|_\*(C'\fR غیرمنتظره، مانند صفت‌های ناشناخته، صفت‌های تابع اعمال‌شده روی متغیرها و غیره، هشدار ندهد. این گزینه مانع از خطاهای ناشی از استفاده نادرست از صفت‌های پشتیبانی‌شده نمی‌شود. .Sp هشدارهای مربوط به استفاده‌های نادرست از صفت‌های استاندارد، با \fB\-pedantic\-errors\fR به خطا ارتقا می‌یابند. .Sp علاوه بر این، با استفاده از \fB\-Wno\-attributes=\fR، می‌توان هشدارهای مربوط به صفت‌های حوزه‌دارِ ناشناخته (scoped attributes) را (در C++11 و C23) سرکوب کرد. برای نمونه، \&\fB\-Wno\-attributes=vendor::attr\fR هشدار درباره اعلان زیر را غیرفعال می‌کند: .Sp .Vb 1 \& [[vendor::attr]] void f(); .Ve .Sp همچنین می‌توان با استفاده از \fB\-Wno\-attributes=vendor::\fR هشدار مربوط به تمامی صفت‌ها در یک فضای نام را غیرفعال کرد که مانع هشدار برای هر دوی این اعلان‌ها می‌شود: .Sp .Vb 2 \& [[vendor::safe]] void f(); \& [[vendor::unsafe]] void f2(); .Ve .Sp توجه داشته باشید که \fB\-Wno\-attributes=\fR به معنای فعال شدن \fB\-Wno\-attributes\fR نیست. .IP \fB\-Wno\-builtin\-declaration\-mismatch\fR 4 .IX Item "-Wno-builtin-declaration-mismatch" اگر یک تابع توکار (built\-in) با یک امضای ناسازگار یا به عنوان چیزی غیر از تابع اعلان شود، یا زمانی که یک تابع توکارِ اعلان‌شده با نوعی فاقد پیش‌نمونه (prototype)، با آرگومان‌هایی فراخوانی شود که نوع ارتقایافتهٔ آن‌ها با موارد مورد انتظار تابع همخوانی ندارد، هشدار دهد. هنگامی که \&\fB\-Wextra\fR مشخص شود، اگر یک تابع توکار که آرگومان می‌پذیرد بدون پیش‌نمونه اعلان شود نیز هشدار داده می‌شود. هشدار \fB\-Wbuiltin\-declaration\-mismatch\fR به‌طور پیش‌فرض فعال است. برای جلوگیری از این هشدار، سرآیند مناسب را درج کنید تا پیش‌نمونه‌های توابع توکار وارد حوزه (scope) شوند. .Sp برای نمونه، فراخوانی \f(CW\*(C`memset\*(C'\fR در زیر توسط این هشدار شناسایی می‌شود زیرا این تابع مقداری از نوع \f(CW\*(C`size_t\*(C'\fR را به عنوان آرگومان خود انتظار دارد اما نوع \f(CW32\fR برابر \f(CW\*(C`int\*(C'\fR است. با \fB\-Wextra\fR، اعلان تابع نیز مشمول این هشدار می‌شود. .Sp .Vb 5 \& extern void* memset (); \& void f (void *d) \& { \& memset (d, \*(Aq\e0\*(Aq, 32); \& } .Ve .IP \fB\-Wno\-builtin\-macro\-redefined\fR 4 .IX Item "-Wno-builtin-macro-redefined" در صورت بازتعریف برخی از ماکروهای توکار (built\-in)، هشدار ندهد. این گزینه هشدارها را برای بازتعریف \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR، \f(CW\*(C`_\|_TIME_\|_\*(C'\fR، \&\f(CW\*(C`_\|_DATE_\|_\*(C'\fR، \f(CW\*(C`_\|_FILE_\|_\*(C'\fR و \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR سرکوب می‌کند. .IP "\fB\-Wfree\-labels\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wfree-labels (C and Objective-C only)" اگر یک برچسب (label) به چیزی غیر از یک دستور اعمال شود، یا در انتهای یک دستور مرکب (compound statement) قرار گیرد، هشدار دهد. چنین برچسب‌هایی در C23 و گویش‌های بعدی C مجاز هستند، و در سایر گویش‌ها به عنوان یک قابلیت افزوده GCC در دسترس قرار دارند. .Sp این هشدار همچنین توسط \fB\-Wc11\-c23\-compat\fR فعال می‌شود. در صورت کامپایل برای نسخه‌ای از C قبل از C23، با استفاده از \&\fB\-pedantic\-errors\fR به یک خطا تبدیل می‌شود. .IP \fB\-Wheader\-guard\fR 4 .IX Item "-Wheader-guard" اگر یک محافظ معتبرِ درج چندگانهٔ سرآیند (multiple inclusion guard) در پیش‌پردازنده، بلافاصله بعد از دستورالعمل \f(CW\*(C`#ifndef\*(C'\fR یا \f(CW\*(C`#if !defined\*(C'\fR برای محافظ درج چندگانه، دستورالعمل \f(CW\*(C`#define\*(C'\fR داشته باشد که ماکرویی متفاوت از ماکروی محافظ اما با نام مشابه تعریف کند، و ماکروی واقعی محافظ درج چندگانه در دستورالعمل متناظر \f(CW\*(C`#ifndef\*(C'\fR در انتهای سرآیند تعریف نشده باشد، و دستورالعمل \f(CW\*(C`#define\*(C'\fR یک ماکروی شیء‌گونه (object\-like) با تعریف خالی تعیین کرده باشد، هشدار دهد. در چنین حالتی، اغلب تنها یک غلط املایی در نام محافظ وجود دارد، چه در دستورالعمل \f(CW\*(C`#ifndef\*(C'\fR یا \f(CW\*(C`#if !defined\*(C'\fR و چه در دستورالعمل متعاقب \f(CW\*(C`#define\*(C'\fR. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wstrict\-prototypes\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wstrict-prototypes (C and Objective-C only)" اگر تابعی بدون مشخص کردن انواع آرگومان اعلان یا تعریف شود، هشدار دهد. (تعریف تابع به سبک قدیمی بدون هشدار مجاز است در صورتی که پیش از آن اعلانی آمده باشد که انواع آرگومان‌ها را مشخص کند.) .IP "\fB\-Wold\-style\-declaration\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wold-style-declaration (C and Objective-C only)" برای کاربردهای منسوخ‌شونده (obsolescent) در یک اعلان، بر اساس استاندارد C، هشدار دهد. برای مثال، اگر مشخص‌کننده‌های ردهٔ ذخیره‌سازی (storage\-class specifiers) مانند \&\f(CW\*(C`static\*(C'\fR اولین بخش در یک اعلان نباشند هشدار می‌دهد. این هشدار همچنین توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wold\-style\-definition\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wold-style-definition (C and Objective-C only)" اگر از تعریف تابع به سبک قدیمی (old\-style) استفاده شود، هشدار دهد. حتی اگر پیش‌نمونه‌ای از قبل وجود داشته باشد نیز هشدار داده می‌شود. تعریفی که از \fB()\fR استفاده می‌کند در حالت C23 یک تعریف به سبک قدیمی تلقی نمی‌شود، زیرا در آن حالت معادل \fB(void)\fR است، اما برای استانداردهای قدیمی‌تر تعریفی به سبک قدیمی در نظر گرفته می‌شود..IP "\fB\-Wdeprecated\-non\-prototype\fR (تنها C و Objective\-C)" 4 .IX Item "-Wdeprecated-non-prototype (تنها C و Objective-C)" هشدار می‌دهد اگر تابعی که با فهرست پارامتر خالی \fB()\fR اعلان شده است، با یک یا چند آرگومان فراخوانی شود، یا اگر پس از چنین اعلانی با تعریف تابعی دارای یک یا چند پارامتر مواجه شود. هر دو مورد در C23 و گویش‌های بعدی C خطا محسوب می‌شوند. .Sp این هشدار همچنین توسط \fB\-Wc11\-c23\-compat\fR فعال می‌شود. .IP "\fB\-Wmissing\-parameter\-name\fR (تنها C و Objective\-C)" 4 .IX Item "-Wmissing-parameter-name (تنها C و Objective-C)" هشدار می‌دهد اگر در تعریف یک تابع از نام پارامتر صرف‌نظر شده و تنها نوع آن مشخص شده باشد. از این ویژگی می‌توان برای مستندسازی استفاده نشدن از یک پارامتر در تعریف تابع بهره برد. این قابلیت بخشی از C23 و گویش‌های بعدی C است و در تمامی گویش‌های دیگر به عنوان یک افزونهٔ GCC در دسترس قرار دارد. .Sp این هشدار همچنین توسط \fB\-Wc11\-c23\-compat\fR فعال می‌شود. هنگام ساخت برای نسخه‌های پیش از C23 در زبان C، با استفاده از \&\fB\-pedantic\-errors\fR به یک خطا تبدیل می‌شود. .IP "\fB\-Wmissing\-parameter\-type\fR (تنها C و Objective\-C)" 4 .IX Item "-Wmissing-parameter-type (تنها C و Objective-C)" یک پارامتر تابع بدون مشخص‌کنندهٔ نوع در توابع به سبک K&R اعلان شده است: .Sp .Vb 1 \& void foo(bar) { } .Ve .Sp این هشدار همچنین توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wno\-declaration\-missing\-parameter\-type\fR (تنها C و Objective\-C)" 4 .IX Item "-Wno-declaration-missing-parameter-type (تنها C و Objective-C)" اگر اعلان یک تابع شامل نام پارامتر بدون نوع باشد، هشدار نمی‌دهد. چنین اعلان‌هایی پیش‌نمونه‌ای برای تابع ارائه نمی‌دهند و از اکثر بررسی‌های نوع در فراخوانی‌های تابع جلوگیری می‌کنند. .Sp این هشدار به طور پیش‌فرض فعال است. در C99 و گویش‌های بعدی C، با آن به عنوان یک خطا برخورد می‌شود. این خطا می‌تواند با استفاده از \&\fB\-fpermissive\fR (به همراه برخی خطاهای دیگر)، یا فقط برای همین خطا با \fB\-Wno\-error=declaration\-missing\-parameter\-type\fR به یک هشدار تنزل یابد. .Sp این هشدار توسط \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wmissing\-prototypes\fR (تنها C و Objective\-C)" 4 .IX Item "-Wmissing-prototypes (تنها C و Objective-C)" هشدار می‌دهد اگر یک تابع سراسری بدون اعلان قبلی پیش‌نمونه تعریف شده باشد. این هشدار حتی در صورتی که خود تعریف یک پیش‌نمونه ارائه دهد نیز صادر می‌شود. از این گزینه برای یافتن توابع سراسری که اعلان پیش‌نمونهٔ متناظری در یک فایل سرآیند ندارند استفاده کنید. این گزینه برای C++ معتبر نیست زیرا تمام اعلان‌های تابع در آن پیش‌نمونه ارائه می‌دهند و یک اعلان نامتناظر به جای تداخل با اعلان قبلی، یک سربارگذاری (overload) را اعلان می‌کند. برای شناسایی اعلان‌های مفقود در C++ از \fB\-Wmissing\-declarations\fR استفاده کنید. .IP "\fB\-Wmissing\-variable\-declarations\fR (تنها C و Objective\-C)" 4 .IX Item "-Wmissing-variable-declarations (تنها C و Objective-C)" هشدار می‌دهد اگر یک متغیر سراسری بدون اعلان قبلی تعریف شده باشد. از این گزینه برای یافتن متغیرهای سراسری که اعلان extern متناظری در یک فایل سرآیند ندارند استفاده کنید. .IP \fB\-Wmissing\-declarations\fR 4 .IX Item "-Wmissing-declarations" هشدار می‌دهد اگر یک تابع سراسری بدون اعلان قبلی تعریف شده باشد؛ حتی در صورتی که خود تعریف یک پیش‌نمونه ارائه دهد، چنین هشداری صادر می‌شود. از این گزینه برای شناسایی توابع سراسری که در فایل‌های سرآیند اعلان نشده‌اند استفاده کنید. در C، برای توابعی که دارای اعلان‌های غیر‌پیش‌نمونه‌ای قبلی هستند هیچ هشداری صادر نمی‌شود؛ برای یافتن پیش‌نمونه‌های مفقود از \fB\-Wmissing\-prototypes\fR استفاده کنید. در C++، برای الگوهای تابع، توابع درون‌خطی (inline)، یا توابع موجود در فضاهای نام ناشناس (anonymous namespaces) هشداری صادر نمی‌شود. .IP \fB\-Wmissing\-field\-initializers\fR 4 .IX Item "-Wmissing-field-initializers" هشدار می‌دهد اگر مقدارده‌اولیهٔ یک ساختار فاقد برخی از فیلدها باشد. برای نمونه، کد زیر چنین هشداری را ایجاد می‌کند، زیرا \&\f(CW\*(C`x.h\*(C'\fR به صورت ضمنی صفر است: .Sp .Vb 2 \& struct s { int f, g, h; }; \& struct s x = { 3, 4 }; .Ve .Sp در C این گزینه دربارهٔ مقدارده‌های اولیهٔ نام‌دار (designated initializers) هشدار نمی‌دهد، بنابراین اصلاحیهٔ زیر هشداری ایجاد نمی‌کند: .Sp .Vb 2 \& struct s { int f, g, h; }; \& struct s x = { .f = 3, .g = 4 }; .Ve .Sp در C این گزینه دربارهٔ مقدارده‌اولیهٔ صفر فراگیر \&\fB{ 0 }\fR هشدار نمی‌دهد: .Sp .Vb 2 \& struct s { int f, g, h; }; \& struct s x = { 0 }; .Ve .Sp به همین ترتیب، در C++ این گزینه دربارهٔ مقدارده‌اولیهٔ خالی { } هشدار نمی‌دهد، برای نمونه: .Sp .Vb 2 \& struct s { int f, g, h; }; \& s x = { }; .Ve .Sp این هشدار در \fB\-Wextra\fR گنجانده شده است. برای دریافت سایر هشدارهای \fB\-Wextra\fR بدون این هشدار، از \fB\-Wextra \-Wno\-missing\-field\-initializers\fR استفاده کنید. .IP \fB\-Wno\-missing\-requires\fR 4 .IX Item "-Wno-missing-requires" به طور پیش‌فرض، کامپایلر در صورت ظاهر شدن یک concept\-id به عنوان یک simple\-requirement در C++20 هشدار می‌دهد: .Sp .Vb 1 \& bool satisfied = requires { C }; .Ve .Sp در اینجا در صورتی که \fBC\fR یک عبارت معتبر باشد (که برای تمام Tها چنین است)، مقدار \fBsatisfied\fR برابر با true خواهد بود. احتمالاً منظور کاربر نوشتن این عبارت بوده است: .Sp .Vb 1 \& bool satisfied = requires { requires C }; .Ve .Sp تا \fBsatisfied\fR تنها در صورتی true باشد که مفهوم (concept) \fBC\fR برای نوع \fBT\fR برآورده شود. .Sp این هشدار را می‌توان با \fB\-Wno\-missing\-requires\fR غیرفعال کرد. .IP \fB\-Wno\-missing\-template\-keyword\fR 4 .IX Item "-Wno-missing-template-keyword" نشانه‌های دستیابی به عضو شامل .، \-> و :: در صورتی که شیء والد وابسته (dependent) باشد و عضوی که نام برده می‌شود یک الگو (template) باشد، باید با کلیدواژهٔ \f(CW\*(C`template\*(C'\fR دنبال شوند. .Sp .Vb 6 \& template \& void DoStuff (X x) \& { \& x.template DoSomeOtherStuff(); // Good. \& x.DoMoreStuff(); // Warning, x is dependent. \& } .Ve .Sp در موارد نادر ممکن است مثبت‌های کاذب (false positives) رخ دهد. برای فرونشاندن این هشدار، عبارت را درون پرانتز قرار دهید. برای نمونه، کد زیر حتی در جایی که m و N عدد صحیح هستند، به عنوان یک الگو در نظر گرفته می‌شود: .Sp .Vb 3 \& void NotATemplate (my_class t) \& { \& int N = 5; \& \& bool test = t.m < N > (0); // Treated as a template. \& test = (t.m < N) > (0); // Same meaning, but not treated as a template. \& } .Ve .Sp این هشدار را می‌توان با \fB\-Wno\-missing\-template\-keyword\fR غیرفعال کرد. .IP \fB\-Wno\-multichar\fR 4 .IX Item "-Wno-multichar" در صورت استفاده از یک ثابت چندنویسه‌ای (\fB\*(AqFOOF\*(Aq\fR) هشدار نمی‌دهد. معمولاً این ثابت‌ها نشان‌دهندهٔ یک اشتباه نگارشی در کد کاربر هستند، زیرا مقادیر وابسته به پیاده‌سازی (implementation\-defined) دارند و نباید در کدهای قابل‌حمل استفاده شوند. .IP \fB\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR] 4 .IX Item "-Wnormalized=[none|id|nfc|nfkc]" در ISO C و ISO C++، دو شناسه در صورتی متفاوت هستند که دنباله‌های متفاوتی از نویسه‌ها باشند. با این حال، گاهی اوقات هنگام استفاده از نویسه‌های خارج از مجموعه نویسه‌های پایهٔ ASCII، ممکن است دو دنباله نویسهٔ متفاوت داشته باشید که ظاهری یکسان دارند. برای جلوگیری از سردرگمی، استاندارد ISO 10646 برخی \fIقواعد نرمال‌سازی\fR را تعیین کرده است که با اعمال آن‌ها اطمینان حاصل می‌شود که دو دنباله با ظاهر یکسان، به دنباله‌ای یکسان تبدیل می‌شوند. GCC می‌تواند در صورت استفاده از شناسه‌هایی که نرمال‌سازی نشده‌اند به شما هشدار دهد؛ این گزینه این هشدار را کنترل می‌کند. .Sp چهار سطح هشدار توسط GCC پشتیبانی می‌شود. حالت پیش‌فرض \&\fB\-Wnormalized=nfc\fR است که دربارهٔ هر شناسه‌ای که در فرم نرمال‌شدهٔ "C" از استاندارد ISO 10646، یعنی \fINFC\fR نباشد هشدار می‌دهد. NFC فرم توصیه‌شده برای بیشتر کاربردها است و با \&\fB\-Wnormalized\fR معادل است. .Sp متأسفانه برخی نویسه‌ها توسط ISO C و ISO C++ در شناسه‌ها مجاز دانسته شده‌اند که پس از تبدیل به NFC، دیگر در شناسه‌ها مجاز نیستند. به این معنا که هیچ راهی وجود ندارد که از این نمادها در ISO C یا C++ قابل‌حمل استفاده کنید و همهٔ شناسه‌هایتان نیز در قالب NFC باشند. گزینهٔ \&\fB\-Wnormalized=id\fR هشدار مربوط به این نویسه‌ها را فرومی‌نشاند. امید می‌رود که نسخه‌های آیندهٔ استانداردهای مربوطه این مشکل را تصحیح کنند، و به همین دلیل این گزینه پیش‌فرض نیست. .Sp می‌توانید با نوشتن \&\fB\-Wnormalized=none\fR یا \fB\-Wno\-normalized\fR این هشدار را برای تمام نویسه‌ها خاموش کنید. تنها زمانی باید این کار را انجام دهید که از طرح نرمال‌سازی دیگری (مانند "D") استفاده می‌کنید، زیرا در غیر این صورت به سادگی ممکن است اشکالاتی ایجاد کنید که به معنای واقعی کلمه دیدن آن‌ها غیرممکن است. .Sp برخی نویسه‌ها در ISO 10646 معانی متفاوتی دارند اما در برخی قلم‌ها یا روش‌های نمایش، به ویژه پس از اعمال قالب‌بندی، یکسان به نظر می‌رسند. برای نمونه \f(CW\*(C`\eu207F\*(C'\fR، یعنی "SUPERSCRIPT LATIN SMALL LETTER N"، دقیقاً مانند یک \f(CW\*(C`n\*(C'\fR معمولی نمایش داده می‌شود که در بالانویس قرار گرفته است. استاندارد ISO 10646 طرح نرمال‌سازی \fINFKC\fR را نیز برای تبدیل همهٔ این‌ها به یک فرم استاندارد تعریف کرده است، و اگر از \&\fB\-Wnormalized=nfkc\fR استفاده کنید، در صورتی که کد شما در قالب NFKC نباشد GCC هشدار می‌دهد. این هشدار با هشدار دادن در مورد هر شناسه‌ای که حاوی حرف O است به این دلیل که ممکن است با رقم 0 اشتباه گرفته شود قابل مقایسه است، و بنابراین پیش‌فرض نیست؛ اما اگر نتوان محیط برنامه‌نویسی را برای نمایش متمایز این نویسه‌ها اصلاح کرد، ممکن است به عنوان یک قرارداد کدنویسی محلی مفید باشد..IP \fB\-Wno\-attribute\-warning\fR 4 .IX Item "-Wno-attribute-warning" درباره استفاده از توابعی که با مشخصه \f(CW\*(C`warning\*(C'\fR اعلان شده‌اند هشدار نده. به‌طور پیش‌فرض، این هشدار فعال است. می‌توان از \fB\-Wno\-attribute\-warning\fR برای غیرفعال کردن هشدار، یا از \fB\-Wno\-error=attribute\-warning\fR برای جلوگیری از ایجاد خطا در زمان همگردانی با پرچم \fB\-Werror\fR استفاده کرد. .IP \fB\-Wno\-deprecated\fR 4 .IX Item "-Wno-deprecated" درباره استفاده از قابلیت‌های منسوخ‌شده هشدار نده. .Sp در ++C، مشخص کردن صریح \fB\-Wdeprecated\fR همچنین هشدارهایی را درباره برخی از قابلیت‌هایی که در استانداردهای بعدی زبان منسوخ شده‌اند فعال می‌کند، به‌ویژه \fB\-Wcomma\-subscript\fR، \&\fB\-Wvolatile\fR، \fB\-Wdeprecated\-enum\-float\-conversion\fR، \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR، \&\fB\-Wdeprecated\-literal\-operator\fR و \&\fB\-Wdeprecated\-variadic\-comma\-omission\fR. .IP \fB\-Wno\-deprecated\-declarations\fR 4 .IX Item "-Wno-deprecated-declarations" درباره استفاده از توابع، متغیرها و انواعی که با استفاده از مشخصه \f(CW\*(C`deprecated\*(C'\fR به‌عنوان منسوخ علامت‌گذاری شده‌اند هشدار نده. .IP \fB\-Wno\-overflow\fR 4 .IX Item "-Wno-overflow" درباره سرریز زمان همگردانی در عبارت‌های ثابت هشدار نده. .IP \fB\-Wno\-odr\fR 4 .IX Item "-Wno-odr" درباره نقض‌های «قاعده یک تعریف» (One Definition Rule) در طول بهینه‌سازی زمان پیوند هشدار بده. به‌طور پیش‌فرض فعال است. .IP \fB\-Wopenacc\-parallelism\fR 4 .IX Item "-Wopenacc-parallelism" درباره انتخاب‌های بالقوه نامطلوب و غیربهینه مربوط به موازی‌سازی OpenACC هشدار بده. .IP \fB\-Wno\-openmp\fR 4 .IX Item "-Wno-openmp" درباره کدهای مشکوک OpenMP هشدار بده. .IP \fB\-Wopenmp\-simd\fR 4 .IX Item "-Wopenmp-simd" اگر مدل هزینه بردارساز (vectorizer) بر دستورالعمل simd مربوط به OpenMP که توسط کاربر تعیین شده ارجحیت یابد، هشدار بده. گزینه \fB\-fsimd\-cost\-model=unlimited\fR می‌تواند برای تسهیل و کاهش سخت‌گیری مدل هزینه استفاده شود. .IP "\fB\-Woverride\-init\fR (تنها C و Objective\-C)" 4 .IX Item "-Woverride-init (C and Objective-C only)" اگر یک فیلد مقداردهی‌شده بدون اثرات جانبی هنگام استفاده از مقداردهنده‌های معین (designated initializers) بازنویسی شود، هشدار بده. .Sp این هشدار در \fB\-Wextra\fR گنجانده شده است. برای دریافت سایر هشدارهای \&\fB\-Wextra\fR بدون این مورد، از \fB\-Wextra \&\-Wno\-override\-init\fR استفاده کنید. .IP "\fB\-Wno\-override\-init\-side\-effects\fR (تنها C و Objective\-C)" 4 .IX Item "-Wno-override-init-side-effects (C and Objective-C only)" اگر یک فیلد مقداردهی‌شده دارای اثرات جانبی هنگام استفاده از مقداردهنده‌های معین بازنویسی شود، هشدار نده. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wpacked\fR 4 .IX Item "-Wpacked" اگر به یک ساختار (structure) مشخصه packed داده شود، اما این مشخصه هیچ تأثیری بر چینش یا اندازه ساختار نداشته باشد، هشدار بده. چنین ساختارهایی ممکن است با فایده بسیار ناچیز، دچار عدم تراز (misaligned) شوند. برای نمونه، در این کد، متغیر \f(CW\*(C`f.x\*(C'\fR در \f(CW\*(C`struct bar\*(C'\fR تراز نیست حتی اگر خود \f(CW\*(C`struct bar\*(C'\fR مشخصه packed را نداشته باشد: .Sp .Vb 8 \& struct foo { \& int x; \& char a, b, c, d; \& } _\|_attribute_\|_((packed)); \& struct bar { \& char z; \& struct foo f; \& }; .Ve .IP \fB\-Wnopacked\-bitfield\-compat\fR 4 .IX Item "-Wnopacked-bitfield-compat" سری‌های 4.1، 4.2 و 4.3 کامپایلر GCC مشخصه \f(CW\*(C`packed\*(C'\fR را روی میدان‌های بیتی از نوع \f(CW\*(C`char\*(C'\fR نادیده می‌گیرند. این مورد در GCC 4.4 برطرف شد، اما این تغییر می‌تواند منجر به تفاوت‌هایی در چینش ساختار شود. GCC در صورتی که آفست چنین فیلدی در GCC 4.4 تغییر کرده باشد، شما را مطلع می‌کند. برای نمونه، در این ساختار دیگر فاصله لایه پرکننده (padding) ۴ بیتی بین فیلد \f(CW\*(C`a\*(C'\fR و \f(CW\*(C`b\*(C'\fR وجود ندارد: .Sp .Vb 5 \& struct foo \& { \& char a:4; \& char b:8; \& } _\|_attribute_\|_ ((packed)); .Ve .Sp این هشدار به‌طور پیش‌فرض فعال است. از \&\fB\-Wno\-packed\-bitfield\-compat\fR برای غیرفعال کردن این هشدار استفاده کنید. .IP "\fB\-Wpacked\-not\-aligned\fR (تنها C، C++، Objective\-C و Objective\-C++)" 4 .IX Item "-Wpacked-not-aligned (C, C++, Objective-C and Objective-C++ only)" اگر یک فیلد ساختار با ترازبندی صریحاً مشخص‌شده در یک struct یا union فشرده (packed) تراز نباشد، هشدار بده. برای نمونه، در این کد هشداری روی \f(CW\*(C`struct S\*(C'\fR صادر می‌شود، مانند \f(CW\*(C`warning: alignment 1 of \&\*(Aqstruct S\*(Aq is less than 8\*(C'\fR: .Sp .Vb 4 \& struct _\|_attribute_\|_ ((aligned (8))) S8 { char a[8]; }; \& struct _\|_attribute_\|_ ((packed)) S { \& struct S8 s8; \& }; .Ve .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wpadded\fR 4 .IX Item "-Wpadded" اگر فاصله‌گذاری پرکننده (padding) در یک ساختار گنجانده شود، چه برای تراز کردن عضوی از ساختار و چه برای تراز کردن کل ساختار، هشدار بده. گاهی در چنین مواقعی می‌توان فیلدهای ساختار را بازآرایی کرد تا فاصله پرکننده کاهش یابد و در نتیجه اندازه ساختار کوچک‌تر شود. .IP \fB\-Wredundant\-decls\fR 4 .IX Item "-Wredundant-decls" اگر چیزی بیش از یک بار در همان حوزه (scope) اعلان شود، حتی در مواردی که اعلان چندگانه معتبر بوده و چیزی را تغییر نمی‌دهد، هشدار بده. .IP \fB\-Wrestrict\fR 4 .IX Item "-Wrestrict" هنگامی که شیء ارجاع‌شده توسط یک پارامتر مقید به \f(CW\*(C`restrict\*(C'\fR (یا در ++C، یک پارامتر مقید به \f(CW\*(C`_\|_restrict\*(C'\fR) با آرگومان دیگری هم‌پوشانی نامی (aliased) پیدا کند، یا زمانی که کپی‌ها میان چنین اشیایی با هم همپوشانی داشته باشند، هشدار بده. برای نمونه، فراخوانی تابع \f(CW\*(C`strcpy\*(C'\fR در ادامه سعی می‌کند تا رشته را با جایگزینی نویسه‌های ابتدایی با چهار نویسه آخر کوتاه کند. با این حال، به دلیل اینکه فراخوانی نویسه NUL پایان‌بخش را در \f(CW\*(C`a[4]\*(C'\fR می‌نویسد، کپی‌ها همپوشانی پیدا کرده و این فراخوانی به‌عنوان خطا گزارش می‌شود. .Sp .Vb 6 \& void foo (void) \& { \& char a[] = "abcd1234"; \& strcpy (a, a + 4); \& ... \& } .Ve .Sp گزینه \fB\-Wrestrict\fR حتی بدون بهینه‌سازی هم مواردی از همپوشانی ساده را تشخیص می‌دهد، اما بهترین عملکرد را در \fB\-O2\fR و بالاتر دارد. این گزینه در \fB\-Wall\fR گنجانده شده است. .IP "\fB\-Wnested\-externs\fR (تنها C و Objective\-C)" 4 .IX Item "-Wnested-externs (C and Objective-C only)" اگر یک اعلان \f(CW\*(C`extern\*(C'\fR درون یک تابع مشاهده شود، هشدار بده. .IP \fB\-Winline\fR 4 .IX Item "-Winline" اگر تابعی که به‌صورت inline اعلان شده است نتواند درون‌خطی شود، هشدار بده. حتی با این گزینه، کامپایلر شکست در درون‌خطی کردن توابعی را که در سرآیندهای سیستمی اعلان شده‌اند گزارش نمی‌کند. .Sp کامپایلر از روش‌های اکتشافی متعددی برای تعیین این که تابعی درون‌خطی شود یا خیر استفاده می‌کند. برای نمونه، کامپایلر اندازه تابعی که قرار است درون‌خطی شود و میزان درون‌خطی‌سازی‌ای که پیش‌تر در تابع فعلی انجام شده را در نظر می‌گیرد. بنابراین، تغییرات به‌ظاهر بی‌اهمیت در برنامه مبدأ می‌تواند باعث ظاهر شدن یا پنهان شدن هشدارهای ایجادشده توسط \fB\-Winline\fR شود. .IP \fB\-Winterference\-size\fR 4 .IX Item "-Winterference-size" درباره استفاده از \f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR مربوط به C++17 بدون تعیین مقدار آن با \fB\-\-param destructive\-interference\-size\fR هشدار بده. همچنین درباره مقادیر مشکوک برای آن گزینه هشدار بده. .Sp این متغیر برای استفاده در کنترل چینش کلاس در نظر گرفته شده است، تا از اشتراک‌گذاری کاذب (false sharing) در کدهای همروند جلوگیری شود: .Sp .Vb 6 \& struct independent_fields { \& alignas(std::hardware_destructive_interference_size) \& std::atomic one; \& alignas(std::hardware_destructive_interference_size) \& std::atomic two; \& }; .Ve .Sp در اینجا هدف این است که \fBone\fR و \fBtwo\fR به اندازه کافی از هم دور باشند تا عملیات ذخیره‌سازی در یکی نیازمند دسترسی به دیگری برای بارگذاری مجدد خط حافظه نهان (cache line) نباشد. .Sp به‌طور پیش‌فرض، \fB\-\-param destructive\-interference\-size\fR و \&\fB\-\-param constructive\-interference\-size\fR بر اساس گزینه جاری \fB\-mtune\fR تنظیم می‌شوند؛ معمولاً متناسب با اندازه خط حافظه نهان L1 برای CPU مقصد مشخص، و گاهی به صورت یک محدوده در صورت تنظیم برای یک مقصد عمومی. بنابراین، همه واحدهای ترجمه (translation units) که برای استفاده از این متغیرها به سازگاری ABI وابسته‌اند، باید با همان \fB\-mtune\fR (یا \fB\-mcpu\fR) همگردانی شوند. .Sp اگر پایداری ABI اهمیت دارد، برای نمونه اگر کاربرد آن در سرآیند یک کتابخانه است، احتمالاً اصلاً نباید از متغیرهای hardware interference size استفاده کنید. همچنین می‌توانید با استفاده از \fB\-\-param\fR مقداری معین را اجبار نمایید. .Sp اگر مطمئن هستید که استفاده شما از این متغیر تأثیری بر ABI خارج از ساخت واحد پروژه شما نمی‌گذارد، می‌توانید هشدار را با \fB\-Wno\-interference\-size\fR غیرفعال کنید..IP \fB\-Wint\-in\-bool\-context\fR 4 .IX Item "-Wint-in-bool-context" درباره استفاده مشکوک از مقادیر عدد صحیح در مواردی که مقادیر بولی مورد انتظار است هشدار می‌دهد؛ مانند عبارت‌های شرطی (?:) با استفاده از ثابت‌های صحیح غیربولی در یک بافت بولی، مانند \f(CW\*(C`if (a <= b ? 2 : 3)\*(C'\fR. یا شیفت به چپ اعداد صحیح علامت‌دار در یک بافت بولی، مانند \f(CW\*(C`for (a = 0; 1 << a; a++);\*(C'\fR. به همین ترتیب برای همه انواع ضرب‌ها بدون در نظر گرفتن نوع داده. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-int\-to\-pointer\-cast\fR 4 .IX Item "-Wno-int-to-pointer-cast" هشدارهای ناشی از تبدیل نوع (cast) یک عدد صحیح با اندازه متفاوت به نوع اشاره‌گر را نادیده می‌گیرد. در C++، تبدیل نوع به یک نوع اشاره‌گر با اندازه کوچک‌تر یک خطا است. گزینه \fBWint\-to\-pointer\-cast\fR به‌طور پیش‌فرض فعال است. .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (تنها C و Objective\-C)" 4 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)" هشدارهای ناشی از تبدیل نوع یک اشاره‌گر به نوع عدد صحیح با اندازه متفاوت را نادیده می‌گیرد. .IP \fB\-Winvalid\-pch\fR 4 .IX Item "-Winvalid-pch" اگر یک سرآیند از پیش کامپایل‌شده (precompiled header) در مسیر جستجو یافت شود اما قابل استفاده نباشد، هشدار می‌دهد. .IP \fB\-Winvalid\-utf8\fR 4 .IX Item "-Winvalid-utf8" اگر یک نویسه UTF\-8 نامعتبر یافت شود، هشدار می‌دهد. این هشدار برای C++23 در صورت استفاده از \fB\-finput\-charset=UTF\-8\fR به‌طور پیش‌فرض فعال است و با \fB\-pedantic\-errors\fR به خطا تبدیل می‌شود. .IP \fB\-Wno\-unicode\fR 4 .IX Item "-Wno-unicode" اشکال نامعتبر توالی‌های گریز محدودشده یا نام‌گذاری‌شده را که به عنوان نشانه‌های (tokens) مجزا در نظر گرفته می‌شوند، عیب‌یابی و گزارش نمی‌کند. گزینه \fBWunicode\fR به‌طور پیش‌فرض فعال است. .IP \fB\-Wlong\-long\fR 4 .IX Item "-Wlong-long" اگر از نوع \f(CW\*(C`long long\*(C'\fR استفاده شود، هشدار می‌دهد. این گزینه توسط هر یک از \&\fB\-Wpedantic\fR یا \fB\-Wtraditional\fR در حالت‌های ISO C90 و C++98 فعال می‌شود. برای جلوگیری از پیام‌های هشدار، از \fB\-Wno\-long\-long\fR استفاده کنید. .Sp این هشدار با \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wvariadic\-macros\fR 4 .IX Item "-Wvariadic-macros" اگر از ماکروهای با تعداد آرگومان متغیر (variadic macros) در حالت ISO C90 استفاده شود، یا ساختار نحو جایگزین GNU در حالت ISO C99 به کار رود، هشدار می‌دهد. این گزینه توسط هر یک از \&\fB\-Wpedantic\fR یا \fB\-Wtraditional\fR فعال می‌شود. برای جلوگیری از پیام‌های هشدار، از \fB\-Wno\-variadic\-macros\fR استفاده کنید. .IP \fB\-Wno\-varargs\fR 4 .IX Item "-Wno-varargs" درباره استفاده‌های مشکوک از ماکروهای مورد استفاده برای مدیریت آرگومان‌های متغیر مانند \f(CW\*(C`va_start\*(C'\fR هشدار نمی‌دهد. این هشدارها به‌طور پیش‌فرض فعال هستند. .IP \fB\-Wvector\-operation\-performance\fR 4 .IX Item "-Wvector-operation-performance" اگر عملیات برداری از طریق قابلیت‌های SIMD معماری پیاده‌سازی نشده باشد، هشدار می‌دهد. عمدتاً برای بهینه‌سازی کارایی کاربرد دارد. عملیات برداری می‌تواند به صورت \f(CW\*(C`piecewise\*(C'\fR (تکه‌به‌تکه) پیاده‌سازی شود، یعنی عملیات اسکالر روی هر عنصر بردار اعمال شود؛ \&\f(CW\*(C`in parallel\*(C'\fR (موازی)، یعنی عملیات برداری با استفاده از اسکالرهای با نوع عریض‌تر پیاده‌سازی شود که معمولاً از نظر کارایی بهینه‌تر است؛ و \f(CW\*(C`as a single scalar\*(C'\fR (به عنوان یک اسکالر منفرد)، یعنی بردار در یک نوع اسکالر جای می‌گیرد. .IP \fB\-Wvla\fR 4 .IX Item "-Wvla" اگر از یک آرایه با طول متغیر در کد استفاده شود، هشدار می‌دهد. \&\fB\-Wno\-vla\fR از هشدار \fB\-Wpedantic\fR درباره آرایه‌های با طول متغیر جلوگیری می‌کند. .Sp این هشدار با \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wvla\-larger\-than=\fR\fIbyte\-size\fR 4 .IX Item "-Wvla-larger-than=byte-size" در صورت استفاده از این گزینه، کامپایلر برای اعلان‌های آرایه‌های با طول متغیر که اندازه آن‌ها یا نامحدود است، یا توسط آرگومانی محدود شده که اجازه می‌دهد اندازه آرایه از \fIbyte\-size\fR بایت فراتر رود، هشدار می‌دهد. این عملکرد شبیه به نحوه کارکرد \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR است، اما برای آرایه‌های با طول متغیر. .Sp توجه داشته باشید که GCC ممکن است آرایه‌های کوچک با طول متغیر با مقدار مشخص را به آرایه‌های معمولی بهینه‌سازی کند، بنابراین این هشدار ممکن است برای چنین آرایه‌هایی صادر نشود. .Sp گزینه \&\fB\-Wvla\-larger\-than=\fR\fBPTRDIFF_MAX\fR به‌طور پیش‌فرض فعال است، اما معمولاً تنها زمانی اثرگذار است که \fB\-ftree\-vrp\fR فعال باشد (پیش‌فرض برای \fB\-O2\fR و بالاتر). .Sp همچنین ببینید: \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR. .IP \fB\-Wno\-vla\-larger\-than\fR 4 .IX Item "-Wno-vla-larger-than" هشدارهای \fB\-Wvla\-larger\-than=\fR را غیرفعال می‌کند. این گزینه معادل \&\fB\-Wvla\-larger\-than=\fR\fBSIZE_MAX\fR یا بزرگ‌تر است. .IP \fB\-Wvla\-parameter\fR 4 .IX Item "-Wvla-parameter" درباره اعلان‌های مجدد توابعی که شامل آرگومان‌هایی با نوع آرایه با طول متغیر (VLA) با انواع یا اشکال ناسازگار هستند هشدار می‌دهد، و امکان تشخیص دسترسی‌های خارج از محدوده به چنین پارامترهایی را توسط هشدارهایی مانند \&\fB\-Warray\-bounds\fR فعال می‌سازد. .Sp اگر نخستین اعلان تابع از قالب VLA استفاده کند، کران مشخص‌شده در آرایه به عنوان حداقل تعداد عناصر مورد انتظار برای ارسال در فراخوانی‌های تابع و حداکثر تعداد عناصری که توسط آن قابل دسترسی است در نظر گرفته می‌شود. عدم ارسال آرگومان‌هایی با اندازه کافی یا دسترسی به بیش از حداکثر تعداد عناصر ممکن است تشخیص داده و گزارش شود. .Sp برای مثال، این هشدار برای اعلان‌های مجدد زیر صادر می‌شود، زیرا نخستین اعلان اجازه می‌دهد آرایه‌ای با هر اندازه‌ای به \f(CW\*(C`f\*(C'\fR ارسال شود در حالی که اعلان دوم مشخص می‌کند آرگومان آرایه باید حداقل \f(CW\*(C`n\*(C'\fR عنصر داشته باشد. علاوه بر این، فراخوانی \f(CW\*(C`f\*(C'\fR با پارامتر کران VLA مرتبط فراتر از کران واقعی VLA نیز موجب ایجاد یک هشدار می‌شود. .Sp .Vb 3 \& void f (int n, int[n]); \& // warning: argument 2 previously declared as a VLA \& void f (int, int[]); \& \& void g (int n) \& { \& if (n > 4) \& return; \& int a[n]; \& // warning: access to a by f may be out of bounds \& f (sizeof a, a); \& ... \& } .Ve .Sp گزینه \&\fB\-Wvla\-parameter\fR در \fB\-Wall\fR گنجانده شده است. گزینه \&\fB\-Warray\-parameter\fR هشدارهای مشابهی را برای آرگومان‌های آرایه معمولی صادر می‌کند. .IP \fB\-Wvolatile\-register\-var\fR 4 .IX Item "-Wvolatile-register-var" اگر یک متغیر ثبات (register variable) به صورت volatile اعلان شود، هشدار می‌دهد. اصلاح‌کننده volatile از تمام بهینه‌سازی‌هایی که ممکن است خواندن و/یا نوشتن در متغیرهای ثبات را حذف کنند جلوگیری نمی‌کند. این هشدار توسط \&\fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-xor\-used\-as\-pow\fR (تنها C، C++، Objective\-C و Objective\-C++)" 4 .IX Item "-Wno-xor-used-as-pow (C, C++, Objective-C and Objective-C++ only)" هشدارهای مربوط به استفاده از \f(CW\*(C`^\*(C'\fR (عملگر XOR) را در جایی که به نظر می‌رسد هدف کد به توان رساندن بوده است، غیرفعال می‌کند. به‌طور خاص، این هشدار زمانی رخ می‌دهد که سمت چپ، ثابت ده‌دهی ۲ یا ۱۰ باشد و سمت راست نیز یک ثابت ده‌دهی باشد. .Sp در C و C++، عملگر \f(CW\*(C`^\*(C'\fR به معنای XOR است، در حالی که در برخی زبان‌های دیگر (مانند TeX و برخی نگارش‌های BASIC) به معنای به توان رساندن است. .Sp این هشدار را می‌توان با تبدیل یکی از عملوندها به هگزادسیمال و همچنین با کامپایل کردن با \fB\-Wno\-xor\-used\-as\-pow\fR غیرفعال کرد. .IP \fB\-Wdisabled\-optimization\fR 4 .IX Item "-Wdisabled-optimization" اگر یک مرحله بهینه‌سازی (optimization pass) درخواست‌شده غیرفعال شود، هشدار می‌دهد. این هشدار عموماً نشان‌دهنده وجود اشکالی در کد شما نیست؛ بلکه صرفاً نشان می‌دهد که بهینه‌سازهای GCC قادر به پردازش کارآمد کد نیستند. اغلب، مشکل این است که کد شما بسیار بزرگ یا بیش از حد پیچیده است؛ هنگامی که خود بهینه‌سازی احتمالاً زمان بسیار زیادی صرف می‌کند، GCC از بهینه‌سازی برنامه‌ها خودداری می‌کند. .IP "\fB\-Wpointer\-sign\fR (تنها C و Objective\-C)" 4 .IX Item "-Wpointer-sign (C and Objective-C only)" برای ارسال آرگومان یا انتساب اشاره‌گر با علامت‌داری (signedness) متفاوت، هشدار می‌دهد. این گزینه تنها برای C و Objective\-C پشتیبانی می‌شود. این هشدار به صورت ضمنی توسط \&\fB\-Wall\fR و \fB\-Wpedantic\fR فعال می‌شود، و می‌توان آن را با \&\fB\-Wno\-pointer\-sign\fR غیرفعال کرد. .Sp این هشدار با \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wstack\-protector\fR 4 .IX Item "-Wstack-protector" این گزینه تنها زمانی اثرگذار است که \fB\-fstack\-protector\fR فعال باشد. این گزینه درباره توابعی که در برابر کوبش پشته (stack smashing) محافظت نشده‌اند هشدار می‌دهد. .IP \fB\-Woverlength\-strings\fR 4 .IX Item "-Woverlength-strings" درباره ثابت‌های رشته‌ای که از طول «حداقل حداکثر» (minimum maximum) تعیین‌شده در استاندارد C طولانی‌تر هستند هشدار می‌دهد. کامپایلرهای امروزی عموماً به ثابت‌های رشته‌ای بسیار طولانی‌تر از حد مجاز استاندارد اجازه می‌دهند، اما برنامه‌هایی با قابلیت حمل بالا باید از استفاده از رشته‌های طولانی‌تر خودداری کنند. .Sp این محدودیت \fIپس از\fR الحاق ثابت‌های رشته‌ای اعمال می‌شود و نویسه NUL پایانی را محاسبه نمی‌کند. در C90، این حد ۵۰۹ نویسه بود؛ در C99، به ۴۰۹۵ افزایش یافت. در C++98 هیچ حداقل حداکثر استانداردی مشخص نشده است، بنابراین برای رشته‌های بیش از حد مجاز در C++ هشداری داده نمی‌شود. .Sp این گزینه به صورت ضمنی توسط \fB\-Wpedantic\fR فعال می‌شود، و می‌توان با \&\fB\-Wno\-overlength\-strings\fR آن را غیرفعال کرد. .IP "\fB\-Wunsuffixed\-float\-constants\fR (تنها C و Objective\-C)" 4 .IX Item "-Wunsuffixed-float-constants (C and Objective-C only)" برای هر ثابت ممیز شناوری که پسوند ندارد، یک هشدار صادر می‌کند. هنگامی که همراه با \fB\-Wsystem\-headers\fR استفاده شود، درباره چنین ثابت‌هایی در فایل‌های سرآیند سیستم نیز هشدار می‌دهد. این امر می‌تواند هنگام آماده‌سازی کد برای استفاده با عملگر کاربردی (pragma) به نام \f(CW\*(C`FLOAT_CONST_DECIMAL64\*(C'\fR برگرفته از افزونه ممیز شناور ده‌دهی برای C99، مفید باشد..IP \fB\-Wno\-lto\-type\-mismatch\fR 4 .IX Item "-Wno-lto-type-mismatch" در طول بهینه‌سازی زمان پیوند (link\-time optimization)، دربارهٔ عدم تطابق نوع در اعلان‌های سراسری از واحدهای ترجمهٔ گوناگون هشدار نمی‌دهد. نیازمند فعال بودن \fB\-flto\fR است. به‌طور پیش‌فرض فعال است. .IP "\fB\-Wno\-designated\-init\fR (فقط C و Objective\-C)" 4 .IX Item "-Wno-designated-init (C and Objective-C only)" فرونشاندن هشدارها هنگامی که از یک مقداردهی اولیه‌ی ترتیبی برای مقداردهی اولیه‌ی ساختاری که با مشخصهٔ \f(CW\*(C`designated_init\*(C'\fR علامت‌گذاری شده، استفاده شود. .SS "گزینه‌های مهار تحلیل ایستا" .IX Subsection "Options That Control Static Analysis" .IP \fB\-fanalyzer\fR 4 .IX Item "-fanalyzer" این گزینه تحلیلی ایستا بر جریان برنامه را فعال می‌کند که به دنبال مسیرهای میان‌رویه‌ای «جالب توجه» در میان کد می‌گردد و برای مشکلات یافت‌شده در آن‌ها هشدار صادر می‌کند. .Sp این تحلیل بسیار پرهزینه‌تر از سایر هشدارهای GCC است. .Sp از دید فنی، این گزینه یک اجرای نمادین مبتنی بر پوشش از کد در حال ترجمه انجام می‌دهد. این تحلیل نه معتبر است و نه کامل: می‌تواند مثبت‌های کاذب و منفی‌های کاذب داشته باشد. این ابزار به جای اثبات درستی برنامه، ابزاری برای اشکال‌یابی است. .Sp تحلیل‌گر در این انتشار، تنها برای استفاده بر روی کد C مناسب است. .Sp فعال کردن این گزینه در عمل هشدارهای زیر را فعال می‌کند: .Sp \&\fB\-Wanalyzer\-allocation\-size \&\-Wanalyzer\-deref\-before\-check \&\-Wanalyzer\-double\-fclose \&\-Wanalyzer\-double\-free \&\-Wanalyzer\-exposure\-through\-output\-file \&\-Wanalyzer\-exposure\-through\-uninit\-copy \&\-Wanalyzer\-fd\-access\-mode\-mismatch \&\-Wanalyzer\-fd\-double\-close \&\-Wanalyzer\-fd\-leak \&\-Wanalyzer\-fd\-phase\-mismatch \&\-Wanalyzer\-fd\-type\-mismatch \&\-Wanalyzer\-fd\-use\-after\-close \&\-Wanalyzer\-fd\-use\-without\-check \&\-Wanalyzer\-file\-leak \&\-Wanalyzer\-free\-of\-non\-heap \&\-Wanalyzer\-imprecise\-fp\-arithmetic \&\-Wanalyzer\-infinite\-loop \&\-Wanalyzer\-infinite\-recursion \&\-Wanalyzer\-jump\-through\-null \&\-Wanalyzer\-malloc\-leak \&\-Wanalyzer\-mismatching\-deallocation \&\-Wanalyzer\-null\-argument \&\-Wanalyzer\-null\-dereference \&\-Wanalyzer\-out\-of\-bounds \&\-Wanalyzer\-overlapping\-buffers \&\-Wanalyzer\-possible\-null\-argument \&\-Wanalyzer\-possible\-null\-dereference \&\-Wanalyzer\-putenv\-of\-auto\-var \&\-Wanalyzer\-shift\-count\-negative \&\-Wanalyzer\-shift\-count\-overflow \&\-Wanalyzer\-stale\-setjmp\-buffer \&\-Wanalyzer\-tainted\-allocation\-size \&\-Wanalyzer\-tainted\-array\-index \&\-Wanalyzer\-tainted\-assertion \&\-Wanalyzer\-tainted\-divisor \&\-Wanalyzer\-tainted\-offset \&\-Wanalyzer\-tainted\-size \&\-Wanalyzer\-undefined\-behavior\-ptrdiff \&\-Wanalyzer\-undefined\-behavior\-strtok \&\-Wanalyzer\-unsafe\-call\-within\-signal\-handler \&\-Wanalyzer\-use\-after\-free \&\-Wanalyzer\-use\-of\-pointer\-in\-stale\-stack\-frame \&\-Wanalyzer\-use\-of\-uninitialized\-value \&\-Wanalyzer\-va\-arg\-type\-mismatch \&\-Wanalyzer\-va\-list\-exhausted \&\-Wanalyzer\-va\-list\-leak \&\-Wanalyzer\-va\-list\-use\-after\-va\-end \&\-Wanalyzer\-write\-to\-const \&\-Wanalyzer\-write\-to\-string\-literal\fR .Sp این گزینه تنها زمانی در دسترس است که GCC همراه با پشتیبانی از تحلیل‌گر پیکربندی شده باشد. .IP \fB\-Wanalyzer\-symbol\-too\-complex\fR 4 .IX Item "-Wanalyzer-symbol-too-complex" اگر \fB\-fanalyzer\fR فعال باشد، تحلیل‌گر از روش‌های مکاشفه‌ای گوناگون برای تلاش در جهت ردگیری وضعیت حافظه استفاده می‌کند، اما کدهای به اندازهٔ کافی پیچیده می‌توانند این تلاش‌ها را ناکام بگذارند. .Sp به‌طور پیش‌فرض، اگر مقادیر عبارت‌ها از آستانهٔ تعیین‌شده توسط \&\fB\-\-param analyzer\-max\-svalue\-depth=\fR\fIvalue\fR فراتر رود، تحلیل به‌طور خاموش از ردگیری آن‌ها دست می‌کشد و به یک نمایش غیردقیق برای چنین عباراتی عقب‌نشینی می‌کند. گزینهٔ \fB\-Wanalyzer\-symbol\-too\-complex\fR در صورت رخداد این حالت هشدار می‌دهد. .IP \fB\-Wanalyzer\-too\-complex\fR 4 .IX Item "-Wanalyzer-too-complex" اگر \fB\-fanalyzer\fR فعال باشد، تحلیل‌گر از روش‌های مکاشفه‌ای گوناگون برای تلاش در جهت کاوش جریان مهار و جریان داده در برنامه استفاده می‌کند، اما کدهای به اندازهٔ کافی پیچیده می‌توانند این تلاش‌ها را ناکام بگذارند. .Sp به‌طور پیش‌فرض، اگر کد برای کاوش کامل تحلیل‌گر بیش از حد پیچیده باشد و به یک حد درونی برسد، تحلیل بدون اعلام متوقف می‌شود. گزینهٔ \fB\-Wanalyzer\-too\-complex\fR در صورت رخداد این حالت هشدار می‌دهد. .IP \fB\-Wno\-analyzer\-allocation\-size\fR 4 .IX Item "-Wno-analyzer-allocation-size" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن، از \fB\-Wno\-analyzer\-allocation\-size\fR استفاده کنید. .Sp این پیام تشخیصی برای مسیرهایی در کد هشدار می‌دهد که در آن‌ها اشاره‌گری به یک بافر مقداردهی می‌شود تا به بافری با اندازه‌ای که مضربی از \f(CW\*(C`sizeof (*pointer)\*(C'\fR نیست اشاره کند. .Sp ببینید: CWE\-131: Incorrect Calculation of Buffer Size (\f(CW\*(C`https://cwe.mitre.org/data/definitions/131.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-deref\-before\-check\fR 4 .IX Item "-Wno-analyzer-deref-before-check" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردنش از \&\fB\-Wno\-analyzer\-deref\-before\-check\fR استفاده کنید. .Sp این پیام تشخیصی برای مسیرهایی در کد هشدار می‌دهد که در آن‌ها یک اشاره‌گر *پس از* اینکه مورد ارجاع‌زدایی قرار گرفته است، برای \f(CW\*(C`NULL\*(C'\fR بررسی می‌شود؛ امری که نشان می‌دهد اشاره‌گر می‌توانسته NULL باشد. چنین مواردی بیانگر آن است که بررسی برای NULL یا زائد است، یا باید به پیش از ارجاع‌زدایی اشاره‌گر منتقل شود. .Sp این پیام تشخیصی همچنین مقادیر دریافت‌شده توسط آرگومان تابعی را که با \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR علامت‌گذاری شده، نیازمند مقداری غیر از NULL در نظر می‌گیرد و بنابراین در صورتی که چنین مقادیری پس از بازگشت از فراخوانی چنان تابعی برای \f(CW\*(C`NULL\*(C'\fR بررسی شوند، اعلام اشکال خواهد کرد. .Sp این پیام تشخیصی بعید است در صورت فعال بودن هر سطحی از بهینه‌سازی گزارش شود، زیرا منطق بهینه‌سازی GCC معمولاً چنین بررسی‌هایی برای NULL را زائد در نظر گرفته و پیش از آنکه تحلیل‌گر آن‌ها را «ببیند»، آن‌ها را حذف می‌کند. از این رو هنگام تلاش برای برانگیختن این پیام تشخیصی، بهینه‌سازی باید غیرفعال باشد. .IP \fB\-Wno\-analyzer\-double\-fclose\fR 4 .IX Item "-Wno-analyzer-double-fclose" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردنش از \&\fB\-Wno\-analyzer\-double\-fclose\fR استفاده کنید. .Sp این پیام تشخیصی برای مسیرهایی در کد هشدار می‌دهد که در آن‌ها ممکن است تابع \f(CW\*(C`fclose\*(C'\fR بیش از یک بار بر روی یک \f(CW\*(C`FILE *\*(C'\fR فراخوانی شود. .Sp ببینید: CWE\-1341: Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-double\-free\fR 4 .IX Item "-Wno-analyzer-double-free" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردنش از \&\fB\-Wno\-analyzer\-double\-free\fR استفاده کنید. .Sp این پیام تشخیصی برای مسیرهایی در کد هشدار می‌دهد که در آن‌ها ممکن است بیش از یک بار تابع آزادسازی بر روی یک اشاره‌گر فراخوانی شود، چه تابع \f(CW\*(C`free\*(C'\fR و چه آزادسازی ارجاع‌شده توسط مشخصهٔ \f(CW\*(C`malloc\*(C'\fR. .Sp ببینید: CWE\-415: Double Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/415.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR 4 .IX Item "-Wno-analyzer-exposure-through-output-file" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردنش از \&\fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR استفاده کنید. .Sp این پیام تشخیصی برای مسیرهایی در میان کد هشدار می‌دهد که در آن‌ها مقداری حساس از نظر امنیتی در یک فایل خروجی نوشته می‌شود (مانند نوشتن یک گذرواژه در یک پروندهٔ ثبت گزارش). .Sp ببینید: CWE\-532: Information Exposure Through Log Files (\f(CW\*(C`https://cwe.mitre.org/data/definitions/532.html\*(C'\fR). .IP \fB\-Wanalyzer\-exposure\-through\-uninit\-copy\fR 4 .IX Item "-Wanalyzer-exposure-through-uninit-copy" این هشدار نیازمند هر دو گزینهٔ \fB\-fanalyzer\fR و استفاده از یک افزایه برای مشخص کردن تابعی است که از میان یک «مرز اعتماد» رونوشت انجام می‌دهد. برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-exposure\-through\-uninit\-copy\fR استفاده کنید. .Sp این پیام تشخیصی برای «نشت اطلاعات» هشدار می‌دهد \- مسیرهایی در میان کد که در آن‌ها مقادیر مقداردهی‌نشده در میان یک مرز امنیتی رونوشت می‌شوند (مانند کدی در هستهٔ سیستم‌عامل که یک struct با مقداردهی ناقص را از پشته به فضای کاربری رونوشت می‌کند). .Sp ببینید: CWE\-200: Exposure of Sensitive Information to an Unauthorized Actor (\f(CW\*(C`https://cwe.mitre.org/data/definitions/200.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR 4 .IX Item "-Wno-analyzer-fd-access-mode-mismatch" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردنش از \&\fB\-Wno\-analyzer\-fd\-access\-mode\-mismatch\fR استفاده کنید. .Sp این پیام تشخیصی برای مسیرهایی در کد هشدار می‌دهد که در آن‌ها برای یک توصیف‌گر فایلِ فقط‌نوشتنی عملیات \&\f(CW\*(C`read\*(C'\fR امتحان می‌شود، یا بالعکس. .Sp این پیام تشخیصی همچنین برای مسیرهایی در کد هشدار می‌دهد که در آن‌ها تابعی با مشخصهٔ \&\f(CW\*(C`fd_arg_read (N)\*(C'\fR با یک توصیف‌گر فایل بازشده با \&\f(CW\*(C`O_WRONLY\*(C'\fR در آرگومان مورد ارجاع \f(CW\*(C`N\*(C'\fR فراخوانی شود، یا تابعی با مشخصهٔ \&\f(CW\*(C`fd_arg_write (N)\*(C'\fR با یک توصیف‌گر فایل بازشده با \&\f(CW\*(C`O_RDONLY\*(C'\fR در آرگومان مورد ارجاع \fIN\fR فراخوانی گردد..IP \fB\-Wno\-analyzer\-fd\-double\-close\fR 4 .IX Item "-Wno-analyzer-fd-double-close" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-fd\-double\-close\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها یک توصیف‌گر فایل می‌تواند بیش از یک بار بسته شود. .Sp ببینید: CWE\-1341: Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-fd\-leak\fR 4 .IX Item "-Wno-analyzer-fd-leak" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-fd\-leak\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها یک توصیف‌گر فایلِ باز، نشت (leak) پیدا می‌کند. .Sp ببینید: CWE\-775: Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR 4 .IX Item "-Wno-analyzer-fd-phase-mismatch" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-fd\-phase\-mismatch\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها عملیاتی در فاز نادرستی از چرخه حیات یک توصیف‌گر فایل انجام می‌شود. برای مثال، در صورت تلاش برای فراخوانی \f(CW\*(C`accept\*(C'\fR روی یک سوکت جریانی (stream socket) که هنوز \f(CW\*(C`listen\*(C'\fR روی آن با موفقیت فراخوانی نشده است، هشدار خواهد داد. .Sp ببینید: CWE\-666: Operation on Resource in Wrong Phase of Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/666.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-fd\-type\-mismatch\fR 4 .IX Item "-Wno-analyzer-fd-type-mismatch" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-fd\-type\-mismatch\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها عملیاتی روی نوع نادرستی از توصیف‌گر فایل انجام می‌شود. برای مثال، در صورت تلاش برای استفاده از عملیات‌های سوکت روی یک توصیف‌گر فایل دریافت‌شده از طریق \f(CW\*(C`open\*(C'\fR، یا هنگام تلاش برای استفاده از عملیات سوکت جریانی روی یک سوکت دیتاگرام (datagram socket)، هشدار خواهد داد. .IP \fB\-Wno\-analyzer\-fd\-use\-after\-close\fR 4 .IX Item "-Wno-analyzer-fd-use-after-close" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-fd\-use\-after\-close\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها یک عملیات خواندن یا نوشتن روی یک توصیف‌گر فایل بسته‌شده فراخوانی می‌شود. .Sp همچنین این هشدار تشخیصی برای مسیرهایی از کد که در آن‌ها تابعی با ویژگی \f(CW\*(C`fd_arg (N)\*(C'\fR یا \f(CW\*(C`fd_arg_read (N)\*(C'\fR یا \f(CW\*(C`fd_arg_write (N)\*(C'\fR با یک توصیف‌گر فایل بسته‌شده در آرگومان ارجاع‌شده‌ی \f(CW\*(C`N\*(C'\fR فراخوانی می‌شود، هشدار می‌دهد. .IP \fB\-Wno\-analyzer\-fd\-use\-without\-check\fR 4 .IX Item "-Wno-analyzer-fd-use-without-check" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-fd\-use\-without\-check\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها یک توصیف‌گر فایل بدون بررسی معتبر بودنش استفاده می‌شود. .Sp همچنین این هشدار تشخیصی برای مسیرهایی از کد که در آن‌ها تابعی با ویژگی \f(CW\*(C`fd_arg (N)\*(C'\fR یا \f(CW\*(C`fd_arg_read (N)\*(C'\fR یا \f(CW\*(C`fd_arg_write (N)\*(C'\fR با یک توصیف‌گر فایل، در آرگومان ارجاع‌شده‌ی \f(CW\*(C`N\*(C'\fR، بدون بررسی معتبر بودن آن فراخوانی می‌شود، هشدار می‌دهد. .IP \fB\-Wno\-analyzer\-file\-leak\fR 4 .IX Item "-Wno-analyzer-file-leak" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-file\-leak\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها یک شیء جریان \f(CW\*(C`FILE *\*(C'\fR از \f(CW\*(C`\*(C'\fR نشت پیدا می‌کند. .Sp ببینید: CWE\-775: Missing Release of File Descriptor or Handle after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/775.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-free\-of\-non\-heap\fR 4 .IX Item "-Wno-analyzer-free-of-non-heap" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-free\-of\-non\-heap\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها \f(CW\*(C`free\*(C'\fR روی یک اشاره‌گر غیرهیپ (non\-heap) (مانند یک بافر روی پشته یا متغیری سراسری) فراخوانی می‌شود. .Sp ببینید: CWE\-590: Free of Memory not on the Heap (\f(CW\*(C`https://cwe.mitre.org/data/definitions/590.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR 4 .IX Item "-Wno-analyzer-imprecise-fp-arithmetic" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-imprecise\-fp\-arithmetic\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها محاسبات ممیز شناور (floating\-point) در مکان‌هایی که به محاسبات دقیق نیاز است استفاده می‌شود. این هشدار تشخیصی در حال حاضر تنها درباره استفاده از عملوندهای ممیز شناور درون محاسبه اندازه یک تخصیص حافظه هشدار می‌دهد. .IP \fB\-Wno\-analyzer\-infinite\-loop\fR 4 .IX Item "-Wno-analyzer-infinite-loop" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-infinite\-loop\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که به نظر می‌رسد به یک حلقه بی‌پایان (infinite loop) منجر می‌شوند. .Sp به‌طور خاص، تحلیل‌گر زمانی این هشدار را صادر می‌کند که حلقه‌ای را «مشاهده کند» که در آن: .RS 4 .IP * 4 هیچ کار قابل‌مشاهده‌ای از بیرون در داخل حلقه انجام نشود .IP * 4 هیچ راهی برای خروج از حلقه وجود نداشته باشد .IP * 4 تحلیل‌گر در سراسر حلقه از وضعیت برنامه به اندازه کافی اطمینان داشته باشد که بداند موارد بالا صادق هستند .RE .RS 4 .Sp یک حالت برای صدور این هشدار زمانی است که مسیر اجرایی درون یک حلقه وجود داشته باشد که طی کردن آن در یک تکرار به این معنی باشد که همان مسیر در تمام تکرارهای بعدی نیز طی خواهد شد. .Sp برای مثال در نظر بگیرید: .Sp .Vb 10 \& while (1) \& { \& char opcode = *cpu_state.pc; \& switch (opcode) \& { \& case OPCODE_FOO: \& handle_opcode_foo (&cpu_state); \& break; \& case OPCODE_BAR: \& handle_opcode_bar (&cpu_state); \& break; \& } \& } .Ve .Sp تحلیل‌گر برای مورد بالا هشدار صادر خواهد کرد زیرا اگر \f(CW\*(C`opcode\*(C'\fR با هیچ‌یک از موارد مطابقت نداشته باشد، دستور \f(CW\*(C`switch\*(C'\fR از شاخه ضمنی \f(CW\*(C`default\*(C'\fR پیروی می‌کند و باعث می‌شود بدنه حلقه با بدون تغییر ماندن \&\f(CW\*(C`cpu_state.pc\*(C'\fR به یک «no\-op» تبدیل شود و در نتیجه از همان مقدار \&\f(CW\*(C`opcode\*(C'\fR در تمام تکرارهای بعدی استفاده کرده و منجر به یک حلقه بی‌پایان شود. .Sp ببینید: CWE\-835: Loop with Unreachable Exit Condition (\*(AqInfinite Loop\*(Aq) (\f(CW\*(C`https://cwe.mitre.org/data/definitions/835.html\*(C'\fR). .RE .IP \fB\-Wno\-analyzer\-infinite\-recursion\fR 4 .IX Item "-Wno-analyzer-infinite-recursion" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-infinite\-recursion\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که به نظر می‌رسد به بازگشت بی‌پایان (infinite recursion) منجر می‌شوند. .Sp به‌طور خاص، هنگامی که تحلیل‌گر یک فراخوانی بازگشتی را «مشاهده کند»، وضعیت حافظه در ورود به قاب (frame) جدید را با وضعیت آن در ورود به قاب قبلی آن تابع روی پشته مقایسه می‌کند. اگر به نظر برسد هیچ چیزی در حافظه تغییر نمی‌کند، هشدار صادر می‌شود؛ فرض بر این است که هرگونه تغییر مشاهده‌شده در پارامترها یا متغیرهای سراسری منجر به پایان بازگشت می‌شود و در نتیجه از صدور هشدار جلوگیری می‌کند. .Sp این هشدار تشخیصی احتمالاً مواردی از بازگشت بی‌پایان را که پیش از «مشاهده» توسط تحلیل‌گر، به دست بهینه‌ساز به حلقه و تکرار تبدیل شده‌اند از دست می‌دهد. بنابراین هنگام تلاش برای برانگیختن این هشدار تشخیصی، بهینه‌سازی باید غیرفعال شود. .Sp با \fB\-Winfinite\-recursion\fR مقایسه کنید که هشدار تشخیصی مشابهی ارائه می‌دهد، اما به روش متفاوتی پیاده‌سازی شده است. .Sp ببینید: CWE\-674: Uncontrolled Recursion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/674.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-jump\-through\-null\fR 4 .IX Item "-Wno-analyzer-jump-through-null" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-jump\-through\-null\fR برای غیرفعال کردن آن استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها یک اشاره‌گر تابع \f(CW\*(C`NULL\*(C'\fR فراخوانی می‌شود..IP \fB\-Wno\-analyzer\-malloc\-leak\fR 4 .IX Item "-Wno-analyzer-malloc-leak" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-malloc\-leak\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها اشاره‌گری که از طریق یک تخصیص‌دهنده حافظه تخصیص یافته، نشت کرده است: خواه از طریق \f(CW\*(C`malloc\*(C'\fR، یا تابعی که با مشخصه \f(CW\*(C`malloc\*(C'\fR علامت‌گذاری شده باشد. .Sp ببینید CWE\-401: Missing Release of Memory after Effective Lifetime (\f(CW\*(C`https://cwe.mitre.org/data/definitions/401.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-mismatching\-deallocation\fR 4 .IX Item "-Wno-analyzer-mismatching-deallocation" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-mismatching\-deallocation\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها بر اساس تابعی که برای تخصیص مقدار یک اشاره‌گر استفاده شده، تابع آزادسازی اشتباهی روی مقدار آن اشاره‌گر فراخوانی شده است. این هشدار عدم تطابق بین \f(CW\*(C`free\*(C'\fR، عملگر اسکالر \f(CW\*(C`delete\*(C'\fR و عملگر برداری \f(CW\*(C`delete[]\*(C'\fR، و مواردی که با استفاده از مشخصه \f(CW\*(C`malloc\*(C'\fR به عنوان جفت‌های تخصیص‌دهنده/آزادکننده مشخص شده‌اند را اعلام می‌کند. .Sp ببینید CWE\-762: Mismatched Memory Management Routines (\f(CW\*(C`https://cwe.mitre.org/data/definitions/762.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-out\-of\-bounds\fR 4 .IX Item "-Wno-analyzer-out-of-bounds" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-out\-of\-bounds\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها یک بافر قطعاً خارج از محدوده خوانده یا نوشته می‌شود. این هشدار برای مواردی اعمال می‌شود که تحلیل‌گر قادر به تعیین یک آفست ثابت باشد و برای دسترسی‌های فراتر از انتهای یک بافر، گنجایش نیز مقداری ثابت باشد. علاوه بر این، تحلیل‌گر بررسی‌های محدودی را برای دسترسی‌های فراتر از انتها هنگامی که آفست و گنجایش نمادین باشند انجام می‌دهد. .Sp ببینید CWE\-119: Improper Restriction of Operations within the Bounds of a Memory Buffer (\f(CW\*(C`https://cwe.mitre.org/data/definitions/119.html\*(C'\fR). .Sp در مواردی که تحلیل‌گر قادر باشد، یک نمودار متنی ایجاد می‌کند که رابطه مکانی بین ناحیه حافظه‌ای که تحلیل‌گر پیش‌بینی می‌کند به آن دسترسی پیدا شود را در برابر محدوده حافظه‌ای که دسترسی به آن مجاز است به تصویر می‌کشد: اینکه آیا هم‌پوشانی دارند، مماس هستند، به هم نزدیک یا دور هستند؛ کدام یک در حافظه قبل یا بعد از دیگری است، اندازه‌های نسبی درگیر، جهت دسترسی (خواندن در برابر نوشتن)، و در برخی موارد، مقادیر داده‌های درگیر. این نمودار را می‌توان با استفاده از \fB\-fdiagnostics\-text\-art\-charset=none\fR غیرفعال کرد. .IP \fB\-Wno\-analyzer\-overlapping\-buffers\fR 4 .IX Item "-Wno-analyzer-overlapping-buffers" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-overlapping\-buffers\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها بافرهای هم‌پوشان به یک رابط برنامه‌نویسی کاربردی (API) ارسال می‌شوند که رفتار آن روی چنین بافرهایی تعریف‌نشده است. .Sp به‌طور مشخص، این هشدار هنگام فراخوانی توابع زیر رخ می‌دهد .RS 4 .ie n .IP "*<""memcpy"">" 4 .el .IP *<\f(CWmemcpy\fR> 4 .IX Item "*" .PD 0 .ie n .IP "*<""strcat"">" 4 .el .IP *<\f(CWstrcat\fR> 4 .IX Item "*" .ie n .IP "*<""strcpy"">" 4 .el .IP *<\f(CWstrcpy\fR> 4 .IX Item "*" .PD .RE .RS 4 .Sp برای مواردی که مشخص است بافرها هم‌پوشانی دارند. .RE .IP \fB\-Wno\-analyzer\-possible\-null\-argument\fR 4 .IX Item "-Wno-analyzer-possible-null-argument" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-possible\-null\-argument\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها مقداری که احتمالاً NULL است به آرگومان تابعی ارسال می‌شود که با \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR به عنوان نیازمند مقدار غیر\-NULL علامت‌گذاری شده است. .Sp ببینید CWE\-690: Unchecked Return Value to NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-possible\-null\-dereference\fR 4 .IX Item "-Wno-analyzer-possible-null-dereference" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-possible\-null\-dereference\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها مقداری که احتمالاً NULL است ارجاع‌زدایی می‌شود. .Sp ببینید CWE\-690: Unchecked Return Value to NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/690.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-null\-argument\fR 4 .IX Item "-Wno-analyzer-null-argument" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-null\-argument\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها مقداری که مشخصاً NULL است به آرگومان تابعی ارسال می‌شود که با \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR به عنوان نیازمند مقدار غیر\-NULL علامت‌گذاری شده است. .Sp ببینید CWE\-476: NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-null\-dereference\fR 4 .IX Item "-Wno-analyzer-null-dereference" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-null\-dereference\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها مقداری که مشخصاً NULL است ارجاع‌زدایی می‌شود. .Sp ببینید CWE\-476: NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR 4 .IX Item "-Wno-analyzer-putenv-of-auto-var" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در فراخوانی \f(CW\*(C`putenv\*(C'\fR، اشاره‌گری به یک متغیر خودکار (automatic) یا بافری روی پشته به آن ارسال می‌شود. .Sp ببینید POS34\-C. Do not call \fBputenv()\fR with a pointer to an automatic variable as the argument (\f(CW\*(C`https://wiki.sei.cmu.edu/confluence/x/6NYxBQ\*(C'\fR). .IP \fB\-Wno\-analyzer\-shift\-count\-negative\fR 4 .IX Item "-Wno-analyzer-shift-count-negative" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-shift\-count\-negative\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها تلاش برای انجام عملیات شیفت با شمارش منفی صورت می‌گیرد. این هشدار مشابه با پیام \fB\-Wshift\-count\-negative\fR پیاده‌سازی‌شده در فرانت‌اندهای C/C++ است، اما به جای بررسی ساده درخت نحو، بر اساس تحلیل مسیرهای میان‌روالی پیاده‌سازی شده است. با این حال، تحلیل‌گر اولویتی برای تشخیص چنین مسیرهایی قائل نمی‌شود، بنابراین موارد منفی کاذب نسبت به هشدارهای دیگر محتمل‌تر است. .IP \fB\-Wno\-analyzer\-shift\-count\-overflow\fR 4 .IX Item "-Wno-analyzer-shift-count-overflow" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-shift\-count\-overflow\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها تلاش برای انجام عملیات شیفت با شمارشی بزرگ‌تر یا مساوی با دقت نوع عملوند صورت می‌گیرد. این هشدار مشابه با پیام \fB\-Wshift\-count\-overflow\fR پیاده‌سازی‌شده در فرانت‌اندهای C/C++ است، اما به جای بررسی ساده درخت نحو، بر اساس تحلیل مسیرهای میان‌روالی پیاده‌سازی شده است. با این حال، تحلیل‌گر اولویتی برای تشخیص چنین مسیرهایی قائل نمی‌شود، بنابراین موارد منفی کاذب نسبت به هشدارهای دیگر محتمل‌تر است. .IP \fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR 4 .IX Item "-Wno-analyzer-stale-setjmp-buffer" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها \&\f(CW\*(C`longjmp\*(C'\fR برای بازگشت به یک \f(CW\*(C`jmp_buf\*(C'\fR فراخوانی می‌شود که مربوط به یک فراخوانی \f(CW\*(C`setjmp\*(C'\fR در تابعی است که مقدار خود را برگردانده و خاتمه یافته است. .Sp هنگامی که \f(CW\*(C`setjmp\*(C'\fR روی یک \f(CW\*(C`jmp_buf\*(C'\fR برای ثبت موقعیت بازگشت فراخوانی می‌شود، فریم پشته را ثبت می‌کند. هنگامی که تابع حاوی فراخوانی \f(CW\*(C`setjmp\*(C'\fR بازمی‌گردد، فریم پشته نامعتبر می‌شود. تلاش برای بازگشت به آن از طریق \f(CW\*(C`longjmp\*(C'\fR به فریم پشته‌ای ارجاع می‌دهد که دیگر وجود ندارد، و به احتمال زیاد منجر به فروپاشی برنامه (یا وضعیتی وخیم‌تر) می‌شود. .IP \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR 4 .IX Item "-Wno-analyzer-tainted-allocation-size" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها مقداری که می‌تواند تحت کنترل یک مهاجم باشد، بدون پالایش و پاک‌سازی به عنوان اندازه تخصیص حافظه استفاده می‌شود؛ به طوری که یک مهاجم می‌تواند یک تخصیص بیش از حد بزرگ را تزریق کرده و به طور بالقوه موجب حمله انکار سرویس (DoS) شود. .Sp ببینید CWE\-789: Memory Allocation with Excessive Size Value (\f(CW\*(C`https://cwe.mitre.org/data/definitions/789.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-tainted\-assertion\fR 4 .IX Item "-Wno-analyzer-tainted-assertion" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \fB\-Wno\-analyzer\-tainted\-assertion\fR استفاده کنید. .Sp این هشدار برای مسیرهایی از کد صادر می‌شود که در آن‌ها مقداری که می‌تواند تحت کنترل یک مهاجم باشد، بدون اینکه ابتدا پالایش و پاک‌سازی شود به عنوان بخشی از یک شرط استفاده شده است، و آن شرط از فراخوانی تابعی محافظت می‌کند که با مشخصه \f(CW\*(C`noreturn\*(C'\fR علامت‌گذاری شده است (مانند تابع \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR). چنین توابعی معمولاً نشان‌دهنده خاتمه غیرعادی برنامه هستند، مانند گرداننده‌های شکست ادعا (assertion failure). برای مثال: .Sp.Vb 1 \& assert (some_tainted_value < SOME_LIMIT); .Ve .Sp در چنین مواردی: .RS 4 .IP * 4 هنگامی که بررسی اعتبارسنجی (assertion\-checking) فعال است: مهاجم می‌تواند با تزریق شکست در اعتبارسنجی، یک منع سرویس (denial of service) ایجاد کند .IP * 4 هنگامی که بررسی اعتبارسنجی غیرفعال است، مانند زمان تعریف \f(CW\*(C`NDEBUG\*(C'\fR، مهاجم می‌تواند داده‌هایی را تزریق کند که فرآیند را تخریب کند، زیرا احتمالاً پیش‌شرطی را که توسط کد فرض شده است نقض می‌کند. .RE .RS 4 .Sp توجه داشته باشید زمانی که بررسی اعتبارسنجی غیرفعال است، اعتبارسنجی‌ها (assertions) معمولاً پیش از آن‌که تحلیل‌گر فرصت «دیدن» آن‌ها را پیدا کند توسط پیش‌پردازنده حذف می‌شوند؛ بنابراین این هشدار عیب‌یابی تنها می‌تواند روی ساخت‌هایی هشدار تولید کند که بررسی اعتبارسنجی در آن‌ها فعال است. .Sp برای اهداف این هشدار، هر تابعی که با ویژگی \&\f(CW\*(C`noreturn\*(C'\fR مشخص شده باشد، از جمله \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR، به‌عنوان یک مدیر خطای اعتبارسنجی احتمالی در نظر گرفته می‌شود. توجه داشته باشید که این توابع گاهی اوقات پیش از آن‌که تحلیل‌گر آن‌ها را «ببیند»، توسط بهینه‌ساز حذف می‌شوند. از این رو، هنگام تلاش برای فعال‌سازی این پیام عیب‌یابی، بهینه‌سازی باید غیرفعال شود. .Sp ببینید CWE\-617: Reachable Assertion (\f(CW\*(C`https://cwe.mitre.org/data/definitions/617.html\*(C'\fR). .Sp این هشدار همچنین می‌تواند ساختارهای مشکل‌سازی مانند موارد زیر را گزارش دهد: .Sp .Vb 4 \& switch (some_tainted_value) { \& case 0: \& /* [...etc; various valid cases omitted...] */ \& break; \& \& default: \& _\|_builtin_unreachable (); /* BUG: attacker can trigger this */ \& } .Ve .Sp اگرچه از نظر فنی و دقیق، مورد بالا شکست اعتبارسنجی محسوب نمی‌شود. .RE .IP \fB\-Wno\-analyzer\-tainted\-array\-index\fR 4 .IX Item "-Wno-analyzer-tainted-array-index" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \fB\-Wno\-analyzer\-tainted\-array\-index\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهایی در کد هشدار می‌دهد که در آن‌ها مقداری که ممکن است تحت کنترل مهاجم باشد، بدون پاک‌سازی به‌عنوان نمایه (index) دسترسی به یک آرایه استفاده می‌شود، به‌گونه‌ای که مهاجم می‌تواند یک دسترسی خارج از محدوده (out\-of\-bounds) تزریق کند. .Sp ببینید CWE\-129: Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-tainted\-divisor\fR 4 .IX Item "-Wno-analyzer-tainted-divisor" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \fB\-Wno\-analyzer\-tainted\-divisor\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهایی در کد هشدار می‌دهد که در آن‌ها مقداری که ممکن است تحت کنترل مهاجم باشد، بدون پاک‌سازی به‌عنوان مقسوم‌علیه در یک عملیات تقسیم یا باقی‌مانده استفاده می‌شود، به‌گونه‌ای که مهاجم می‌تواند یک تقسیم بر صفر تزریق کند. .Sp ببینید CWE\-369: Divide By Zero (\f(CW\*(C`https://cwe.mitre.org/data/definitions/369.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-tainted\-offset\fR 4 .IX Item "-Wno-analyzer-tainted-offset" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \fB\-Wno\-analyzer\-tainted\-offset\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهایی در کد هشدار می‌دهد که در آن‌ها مقداری که ممکن است تحت کنترل مهاجم باشد، بدون پاک‌سازی به‌عنوان آفست (انحراف) اشاره‌گر استفاده می‌شود، به‌گونه‌ای که مهاجم می‌تواند یک دسترسی خارج از محدوده تزریق کند. .Sp ببینید CWE\-823: Use of Out\-of\-range Pointer Offset (\f(CW\*(C`https://cwe.mitre.org/data/definitions/823.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-tainted\-size\fR 4 .IX Item "-Wno-analyzer-tainted-size" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \fB\-Wno\-analyzer\-tainted\-size\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهایی در کد هشدار می‌دهد که در آن‌ها مقداری که ممکن است تحت کنترل مهاجم باشد، بدون پاک‌سازی به‌عنوان اندازه عملیاتی مانند \f(CW\*(C`memset\*(C'\fR استفاده می‌شود، به‌طوری که مهاجم می‌تواند یک دسترسی خارج از محدوده تزریق کند. .Sp ببینید CWE\-129: Improper Validation of Array Index (\f(CW\*(C`https://cwe.mitre.org/data/definitions/129.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-undefined\-behavior\-ptrdiff\fR 4 .IX Item "-Wno-analyzer-undefined-behavior-ptrdiff" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-undefined\-behavior\-ptrdiff\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهایی در کد هشدار می‌دهد که در آن‌ها تفریق اشاره‌گرها رخ می‌دهد در حالی که اشاره‌گرها به بلوک‌های متفاوتی از حافظه اشاره دارند. چنین کدی بر رفتار تعریف‌نشده متکی است، زیرا تفریق اشاره‌گر فقط برای مواردی تعریف شده است که هر دو اشاره‌گر به درون (یا بلافاصله پس از) همان آرایه اشاره داشته باشند. .Sp ببینید CWE\-469: Use of Pointer Subtraction to Determine Size (\f(CW\*(C`https://cwe.mitre.org/data/definitions/469.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR 4 .IX Item "-Wno-analyzer-undefined-behavior-strtok" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-undefined\-behavior\-strtok\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهایی در کد هشدار می‌دهد که در آن‌ها فراخوانی به تابع \f(CW\*(C`strtok\*(C'\fR با رفتار تعریف‌نشده انجام گرفته است. .Sp به‌طور خاص، ارسال NULL به‌عنوان اولین پارامتر برای فراخوانی اولیه \f(CW\*(C`strtok\*(C'\fR در یک فرآیند، دارای رفتار تعریف‌نشده است. .IP \fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR 4 .IX Item "-Wno-analyzer-unsafe-call-within-signal-handler" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهایی در کد هشدار می‌دهد که در آن‌ها تابعی که ناامن در برابر سیگنال‌های ناهمگام (async\-signal\-unsafe) شناخته شده است (مانند \f(CW\*(C`fprintf\*(C'\fR)، از درون یک کنترل‌کننده سیگنال (signal handler) فراخوانی می‌شود. .Sp ببینید CWE\-479: Signal Handler Use of a Non\-reentrant Function (\f(CW\*(C`https://cwe.mitre.org/data/definitions/479.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-use\-after\-free\fR 4 .IX Item "-Wno-analyzer-use-after-free" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-use\-after\-free\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهایی در کد هشدار می‌دهد که در آن‌ها پس از فراخوانی یک آزادساز (deallocator) بر روی یک اشاره‌گر، مجدداً از آن اشاره‌گر استفاده می‌شود: چه \f(CW\*(C`free\*(C'\fR باشد، یا یک آزادساز که با ویژگی \f(CW\*(C`malloc\*(C'\fR به آن ارجاع داده شده است. .Sp ببینید CWE\-416: Use After Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/416.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR 4 .IX Item "-Wno-analyzer-use-of-pointer-in-stale-stack-frame" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهایی در کد هشدار می‌دهد که در آن‌ها اشاره‌گری که به یک متغیر در فریم پشته بیات‌شده (stale stack frame) اشاره دارد، ارجاع‌زدایی (dereference) می‌شود. .IP \fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR 4 .IX Item "-Wno-analyzer-va-arg-type-mismatch" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-va\-arg\-type\-mismatch\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهای بین‌رویه‌ای (interprocedural) در کد هشدار می‌دهد که تحلیل‌گر در آن‌ها تلاشی برای استفاده از \f(CW\*(C`va_arg\*(C'\fR جهت استخراج مقداری که به یک فراخوانی با تعداد آرگومان متغیر (variadic) ارسال شده را شناسایی می‌کند، اما از نوعی استفاده می‌شود که با نوع عبارت ارسال‌شده به فراخوانی همخوانی ندارد. .Sp ببینید CWE\-686: Function Call With Incorrect Argument Type (\f(CW\*(C`https://cwe.mitre.org/data/definitions/686.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-va\-list\-exhausted\fR 4 .IX Item "-Wno-analyzer-va-list-exhausted" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-va\-list\-exhausted\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهای بین‌رویه‌ای در کد هشدار می‌دهد که تحلیل‌گر در آن‌ها تلاشی برای استفاده از \f(CW\*(C`va_arg\*(C'\fR جهت دسترسی به مقدار بعدی ارسال‌شده به یک فراخوانی با آرگومان متغیر را شناسایی می‌کند، در حالی که تمام مقادیر درون \&\f(CW\*(C`va_list\*(C'\fR پیش‌تر مصرف شده‌اند. .Sp ببینید CWE\-685: Function Call With Incorrect Number of Arguments (\f(CW\*(C`https://cwe.mitre.org/data/definitions/685.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-va\-list\-leak\fR 4 .IX Item "-Wno-analyzer-va-list-leak" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-va\-list\-leak\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهای بین‌رویه‌ای در کد هشدار می‌دهد که تحلیل‌گر در آن‌ها تشخیص می‌دهد \f(CW\*(C`va_start\*(C'\fR یا \f(CW\*(C`va_copy\*(C'\fR بر روی یک \f(CW\*(C`va_list\*(C'\fR فراخوانی شده است بدون این‌که فراخوانی متناظری برای \f(CW\*(C`va_end\*(C'\fR وجود داشته باشد. .IP \fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR 4 .IX Item "-Wno-analyzer-va-list-use-after-va-end" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-va\-list\-use\-after\-va\-end\fR استفاده کنید. .Sp این عیب‌یابی درباره مسیرهای بین‌رویه‌ای در کد هشدار می‌دهد که تحلیل‌گر در آن‌ها تلاشی برای استفاده از یک \f(CW\*(C`va_list\*(C'\fR را پس از آن‌که \&\f(CW\*(C`va_end\*(C'\fR روی آن فراخوانی شده است، شناسایی می‌کند. \&\f(CW\*(C`va_list\*(C'\fR..IP \fB\-Wno\-analyzer\-write\-to\-const\fR 4 .IX Item "-Wno-analyzer-write-to-const" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-write\-to\-const\fR استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها تحلیل‌گر تلاشی برای نوشتن در یک شیء \f(CW\*(C`const\*(C'\fR از طریق اشاره‌گر را شناسایی کند. با این حال، تحلیل‌گر شناسایی چنین مسیرهایی را در اولویت قرار نمی‌دهد، بنابراین احتمال موارد منفی کاذب در مقایسه با سایر هشدارها بیشتر است. .IP \fB\-Wno\-analyzer\-write\-to\-string\-literal\fR 4 .IX Item "-Wno-analyzer-write-to-string-literal" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-write\-to\-string\-literal\fR استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها تحلیل‌گر تلاشی برای نوشتن در یک رشته لفظی (string literal) از طریق اشاره‌گر را شناسایی کند. با این حال، تحلیل‌گر شناسایی چنین مسیرهایی را در اولویت قرار نمی‌دهد، بنابراین احتمال موارد منفی کاذب در مقایسه با سایر هشدارها بیشتر است. .IP \fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR 4 .IX Item "-Wno-analyzer-use-of-uninitialized-value" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن از \&\fB\-Wno\-analyzer\-use\-of\-uninitialized\-value\fR استفاده کنید. .Sp این هشدار تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها از مقداری مقداردهی‌نشده استفاده شده باشد. .Sp ببینید: CWE\-457: Use of Uninitialized Variable (\f(CW\*(C`https://cwe.mitre.org/data/definitions/457.html\*(C'\fR). .PP تحلیل‌گر دارای اطلاعاتی تعبیه‌شده درباره رفتار توابع مدیریت حافظه زیر است: .ie n .IP "*<""alloca"">" 4 .el .IP *<\f(CWalloca\fR> 4 .IX Item "*" .PD 0 .ie n .IP "*<توابع توکار ""_\|_builtin_alloc""،>" 4 .el .IP "*<توابع توکار \f(CW_\|_builtin_alloc\fR،>" 4 .IX Item "*" .PD \&\f(CW\*(C`_\|_builtin_alloc_with_align\*(C'\fR، \f(CW@item\fR \f(CW\*(C`_\|_builtin_calloc\*(C'\fR، \&\f(CW\*(C`_\|_builtin_free\*(C'\fR، \f(CW\*(C`_\|_builtin_malloc\*(C'\fR، \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR، \&\f(CW\*(C`_\|_builtin_memcpy_chk\*(C'\fR، \f(CW\*(C`_\|_builtin_memset\*(C'\fR، \&\f(CW\*(C`_\|_builtin_memset_chk\*(C'\fR، \f(CW\*(C`_\|_builtin_realloc\*(C'\fR، \&\f(CW\*(C`_\|_builtin_stack_restore\*(C'\fR و \f(CW\*(C`_\|_builtin_stack_save\*(C'\fR .ie n .IP "*<""calloc"">" 4 .el .IP *<\f(CWcalloc\fR> 4 .IX Item "*" .PD 0 .ie n .IP "*<""free"">" 4 .el .IP *<\f(CWfree\fR> 4 .IX Item "*" .ie n .IP "*<""malloc"">" 4 .el .IP *<\f(CWmalloc\fR> 4 .IX Item "*" .ie n .IP "*<""memset"">" 4 .el .IP *<\f(CWmemset\fR> 4 .IX Item "*" .ie n .IP "*<""operator delete"">" 4 .el .IP "*<\f(CWoperator delete\fR>" 4 .IX Item "*" .ie n .IP "*<""operator delete []"">" 4 .el .IP "*<\f(CWoperator delete []\fR>" 4 .IX Item "*" .ie n .IP "*<""operator new"">" 4 .el .IP "*<\f(CWoperator new\fR>" 4 .IX Item "*" .ie n .IP "*<""operator new []"">" 4 .el .IP "*<\f(CWoperator new []\fR>" 4 .IX Item "*" .ie n .IP "*<""realloc"">" 4 .el .IP *<\f(CWrealloc\fR> 4 .IX Item "*" .ie n .IP "*<""strdup"">" 4 .el .IP *<\f(CWstrdup\fR> 4 .IX Item "*" .ie n .IP "*<""strndup"">" 4 .el .IP *<\f(CWstrndup\fR> 4 .IX Item "*" .PD .PP درباره توابع زیر برای کار با توصیف‌کننده‌های فایل: .ie n .IP "*<""open"">" 4 .el .IP *<\f(CWopen\fR> 4 .IX Item "*" .PD 0 .ie n .IP "*<""close"">" 4 .el .IP *<\f(CWclose\fR> 4 .IX Item "*" .ie n .IP "*<""creat"">" 4 .el .IP *<\f(CWcreat\fR> 4 .IX Item "*" .ie n .IP "*<""dup""، ""dup2"" و ""dup3"">" 4 .el .IP "*<\f(CWdup\fR، \f(CWdup2\fR و \f(CWdup3\fR>" 4 .IX Item "*" .ie n .IP "*<""isatty"">" 4 .el .IP *<\f(CWisatty\fR> 4 .IX Item "*" .ie n .IP "*<""pipe"" و ""pipe2"">" 4 .el .IP "*<\f(CWpipe\fR و \f(CWpipe2\fR>" 4 .IX Item "*" .ie n .IP "*<""read"">" 4 .el .IP *<\f(CWread\fR> 4 .IX Item "*" .ie n .IP "*<""write"">" 4 .el .IP *<\f(CWwrite\fR> 4 .IX Item "*" .ie n .IP "*<""socket""، ""bind""، ""listen""، ""accept"" و ""connect"">" 4 .el .IP "*<\f(CWsocket\fR، \f(CWbind\fR، \f(CWlisten\fR، \f(CWaccept\fR و \f(CWconnect\fR>" 4 .IX Item "*" .PD .PP درباره توابع زیر برای کار با جریان‌های \f(CW\*(C`\*(C'\fR: .ie n .IP "*<توابع توکار ""_\|_builtin_fprintf""،>" 4 .el .IP "*<توابع توکار \f(CW_\|_builtin_fprintf\fR،>" 4 .IX Item "*" \&\f(CW\*(C`_\|_builtin_fprintf_unlocked\*(C'\fR، \f(CW\*(C`_\|_builtin_fputc\*(C'\fR، \&\f(CW\*(C`_\|_builtin_fputc_unlocked\*(C'\fR، \f(CW\*(C`_\|_builtin_fputs\*(C'\fR، \&\f(CW\*(C`_\|_builtin_fputs_unlocked\*(C'\fR، \f(CW\*(C`_\|_builtin_fwrite\*(C'\fR، \&\f(CW\*(C`_\|_builtin_fwrite_unlocked\*(C'\fR، \f(CW\*(C`_\|_builtin_printf\*(C'\fR، \&\f(CW\*(C`_\|_builtin_printf_unlocked\*(C'\fR، \f(CW\*(C`_\|_builtin_putc\*(C'\fR، \&\f(CW\*(C`_\|_builtin_putchar\*(C'\fR، \f(CW\*(C`_\|_builtin_putchar_unlocked\*(C'\fR، \&\f(CW\*(C`_\|_builtin_putc_unlocked\*(C'\fR، \f(CW\*(C`_\|_builtin_puts\*(C'\fR، \&\f(CW\*(C`_\|_builtin_puts_unlocked\*(C'\fR، \f(CW\*(C`_\|_builtin_vfprintf\*(C'\fR و \&\f(CW\*(C`_\|_builtin_vprintf\*(C'\fR .ie n .IP "*<""fopen"">" 4 .el .IP *<\f(CWfopen\fR> 4 .IX Item "*" .PD 0 .ie n .IP "*<""fclose"">" 4 .el .IP *<\f(CWfclose\fR> 4 .IX Item "*" .ie n .IP "*<""ferror"">" 4 .el .IP *<\f(CWferror\fR> 4 .IX Item "*" .ie n .IP "*<""fgets"">" 4 .el .IP *<\f(CWfgets\fR> 4 .IX Item "*" .ie n .IP "*<""fgets_unlocked"">" 4 .el .IP *<\f(CWfgets_unlocked\fR> 4 .IX Item "*" .ie n .IP "*<""fileno"">" 4 .el .IP *<\f(CWfileno\fR> 4 .IX Item "*" .ie n .IP "*<""fread"">" 4 .el .IP *<\f(CWfread\fR> 4 .IX Item "*" .ie n .IP "*<""getc"">" 4 .el .IP *<\f(CWgetc\fR> 4 .IX Item "*" .ie n .IP "*<""getchar"">" 4 .el .IP *<\f(CWgetchar\fR> 4 .IX Item "*" .ie n .IP "*<""fprintf"">" 4 .el .IP *<\f(CWfprintf\fR> 4 .IX Item "*" .ie n .IP "*<""printf"">" 4 .el .IP *<\f(CWprintf\fR> 4 .IX Item "*" .ie n .IP "*<""fwrite"">" 4 .el .IP *<\f(CWfwrite\fR> 4 .IX Item "*" .PD .PP و درباره توابع زیر: .ie n .IP "*<توابع توکار ""_\|_builtin_expect""،>" 4 .el .IP "*<توابع توکار \f(CW_\|_builtin_expect\fR،>" 4 .IX Item "*" \&\f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR، \f(CW\*(C`_\|_builtin_strchr\*(C'\fR، \&\f(CW\*(C`_\|_builtin_strcpy\*(C'\fR، \f(CW\*(C`_\|_builtin_strcpy_chk\*(C'\fR، \&\f(CW\*(C`_\|_builtin_strlen\*(C'\fR، \f(CW\*(C`_\|_builtin_va_copy\*(C'\fR و \&\f(CW\*(C`_\|_builtin_va_start\*(C'\fR .ie n .IP "*<افزونه‌های گنو ""error"" و ""error_at_line"">" 4 .el .IP "*<افزونه‌های گنو \f(CWerror\fR و \f(CWerror_at_line\fR>" 4 .IX Item "*" .PD 0 .ie n .IP "*<""getpass"">" 4 .el .IP *<\f(CWgetpass\fR> 4 .IX Item "*" .ie n .IP "*<""longjmp"">" 4 .el .IP *<\f(CWlongjmp\fR> 4 .IX Item "*" .ie n .IP "*<""putenv"">" 4 .el .IP *<\f(CWputenv\fR> 4 .IX Item "*" .ie n .IP "*<""setjmp"">" 4 .el .IP *<\f(CWsetjmp\fR> 4 .IX Item "*" .ie n .IP "*<""siglongjmp"">" 4 .el .IP *<\f(CWsiglongjmp\fR> 4 .IX Item "*" .ie n .IP "*<""signal"">" 4 .el .IP *<\f(CWsignal\fR> 4 .IX Item "*" .ie n .IP "*<""sigsetjmp"">" 4 .el .IP *<\f(CWsigsetjmp\fR> 4 .IX Item "*" .ie n .IP "*<""strcat"">" 4 .el .IP *<\f(CWstrcat\fR> 4 .IX Item "*" .ie n .IP "*<""strchr"">" 4 .el .IP *<\f(CWstrchr\fR> 4 .IX Item "*" .ie n .IP "*<""strlen"">" 4 .el .IP *<\f(CWstrlen\fR> 4 .IX Item "*".PD .PP علاوه بر این، توابع گوناگونی با پیشوند \f(CW\*(C`_\|_analyzer_\*(C'\fR معنای ویژه‌ای برای تحلیل‌گر دارند که در دفترچه راهنمای درونیات GCC (GCC Internals) توصیف شده‌اند. .PP پارامترهای مرتبط برای کنترل کاوش عبارت‌اند از: .IP "*<\fB\-\-param analyzer\-bb\-explosion\-factor=\fR\fIvalue\fR>" 4 .IX Item "*<--param analyzer-bb-explosion-factor=value>" .PD 0 .IP "*<\fB\-\-param analyzer\-max\-enodes\-per\-program\-point=\fR\fIvalue\fR>" 4 .IX Item "*<--param analyzer-max-enodes-per-program-point=value>" .IP "*<\fB\-\-param analyzer\-max\-recursion\-depth=\fR\fIvalue\fR>" 4 .IX Item "*<--param analyzer-max-recursion-depth=value>" .IP "*<\fB\-\-param analyzer\-min\-snodes\-for\-call\-summary=\fR\fIvalue\fR>" 4 .IX Item "*<--param analyzer-min-snodes-for-call-summary=value>" .PD .PP گزینه‌های زیر تحلیل‌گر را کنترل می‌کنند: .IP \fB\-fanalyzer\-call\-summaries\fR 4 .IX Item "-fanalyzer-call-summaries" ساده‌سازی تحلیل میان‌رویه‌ای با محاسبه اثر برخی فراخوانی‌ها، به‌جای کاوش تمامی مسیرها در طول تابع از نقطه فراخوانی تا هر بازگشت ممکن. .Sp در صورت فعال بودن، خلاصه فراخوانی‌ها تنها برای توابعی استفاده می‌شوند که بیش از یک نقطه فراخوانی داشته باشند و به اندازه کافی پیچیده باشند (طبق \&\fB\-\-param analyzer\-min\-snodes\-for\-call\-summary=\fR\fIvalue\fR). .IP \fB\-fanalyzer\-checker=\fR\fIname\fR 4 .IX Item "-fanalyzer-checker=name" محدود کردن تحلیل‌گر به اجرای تنها بررسی‌کننده (checker) نام‌برده، و فعال‌سازی آن. .IP \fB\-fanalyzer\-debug\-text\-art\-headings\fR 4 .IX Item "-fanalyzer-debug-text-art-headings" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است. در صورت فعال بودن، تحلیل‌گر یادداشت‌های بیشتری را به هر نموداری که تولید می‌کند خواهد افزود. .IP \fB\-fno\-analyzer\-feasibility\fR 4 .IX Item "-fno-analyzer-feasibility" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است. .Sp به‌طور پیش‌فرض، تحلیل‌گر بررسی می‌کند که آیا برای هر تشخیص صادرشده یک مسیر جریان کنترل امکان‌پذیر وجود دارد یا خیر: به این معنی که شرایط برقرارشده ناسازگار (مانعة‌الجمع) نباشند. تشخیص‌هایی که هیچ مسیر امکان‌پذیری برای آن‌ها یافت نشود، رد می‌شوند. این پالایش را می‌توان با \fB\-fno\-analyzer\-feasibility\fR برای اشکال‌زدایی مسائل موجود در این کد لغو کرد. .IP \fB\-fanalyzer\-fine\-grained\fR 4 .IX Item "-fanalyzer-fine-grained" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است. .Sp تحلیل‌گر به‌طور درونی یک «گراف تفکیک‌شده» (exploded graph) می‌سازد که گراف‌های جریان کنترل را با اطلاعات جریان داده ترکیب می‌کند. .Sp به‌طور پیش‌فرض، یک یال در این گراف می‌تواند شامل اثرات اجرای چندین دستورالعمل در یک بلوک پایه (basic block) باشد. با \&\fB\-fanalyzer\-fine\-grained\fR، هر دستورالعمل یال اختصاصی خود را دریافت می‌کند. .IP \fB\-fanalyzer\-show\-duplicate\-count\fR 4 .IX Item "-fanalyzer-show-duplicate-count" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است: اگر چند مورد تشخیص به عنوان همزاد (تکراری) یکدیگر شناسایی شوند، هنگام گزارش بهترین مورد، یادداشتی صادر می‌کند که تعداد تشخیص‌های اضافی سرکوب‌شده توسط منطق حذف موارد تکراری را نشان می‌دهد. .IP \fB\-fanalyzer\-show\-events\-in\-system\-headers\fR 4 .IX Item "-fanalyzer-show-events-in-system-headers" به‌طور پیش‌فرض، تحلیل‌گر با پنهان کردن رخدادهایی که کاملاً در یک سرایند سیستمی (system header) قرار دارند، مسیرهای تشخیصی ساده‌شده‌ای را صادر می‌کند. با \fB\-fanalyzer\-show\-events\-in\-system\-headers\fR چنین رخدادهایی دیگر پنهان (سرکوب) نمی‌شوند. .IP \fB\-fno\-analyzer\-state\-merge\fR 4 .IX Item "-fno-analyzer-state-merge" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است. .Sp به‌طور پیش‌فرض، تحلیل‌گر تلاش می‌کند با ادغام وضعیت‌های به‌اندازه کافی مشابه در هر نقطه برنامه در حین ساخت «گراف تفکیک‌شده» خود، تحلیل را ساده‌تر کند. با \fB\-fno\-analyzer\-state\-merge\fR می‌توان این ادغام را برای اشکال‌زدایی مسائل مدیریت وضعیت غیرفعال کرد. .IP \fB\-fno\-analyzer\-state\-purge\fR 4 .IX Item "-fno-analyzer-state-purge" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است. .Sp به‌طور پیش‌فرض، تحلیل‌گر سعی می‌کند با پاک‌سازی جنبه‌هایی از وضعیت در یک نقطه برنامه که به نظر می‌رسد دیگر مرتبط نیستند (مانند مقادیر متغیرهای محلی که در ادامه تابع به آن‌ها دسترسی پیدا نمی‌شود و به تحلیل نشت حافظه نیز مربوط نیستند)، تحلیل را ساده کند. .Sp با \fB\-fno\-analyzer\-state\-purge\fR می‌توان این پاک‌سازی وضعیت را برای اشکال‌زدایی مسائل مدیریت وضعیت غیرفعال کرد. .IP \fB\-fno\-analyzer\-suppress\-followups\fR 4 .IX Item "-fno-analyzer-suppress-followups" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است. .Sp به‌طور پیش‌فرض تحلیل‌گر پس از مواجهه با برخی تشخیص‌های معین، کاوش در یک مسیر اجرا را متوقف می‌کند تا از صدور احتمالی آبشاری از تشخیص‌های تکمیلی بعدی جلوگیری شود. .Sp تشخیص‌هایی که تحلیل را در امتداد یک مسیر متوقف می‌کنند عبارت‌اند از: .RS 4 .IP *<\fB\-Wanalyzer\-null\-argument\fR> 4 .IX Item "*<-Wanalyzer-null-argument>" .PD 0 .IP *<\fB\-Wanalyzer\-null\-dereference\fR> 4 .IX Item "*<-Wanalyzer-null-dereference>" .IP *<\fB\-Wanalyzer\-use\-after\-free\fR> 4 .IX Item "*<-Wanalyzer-use-after-free>" .IP *<\fB\-Wanalyzer\-use\-of\-pointer\-in\-stale\-stack\-frame\fR> 4 .IX Item "*<-Wanalyzer-use-of-pointer-in-stale-stack-frame>" .IP *<\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR> 4 .IX Item "*<-Wanalyzer-use-of-uninitialized-value>" .PD .RE .RS 4 .Sp با \fB\-fno\-analyzer\-suppress\-followups\fR تحلیل‌گر حتی پس از چنین تشخیص‌هایی به کاوش در این مسیرها ادامه خواهد داد، که این امر ممکن است برای اشکال‌زدایی مسائل درون تحلیل‌گر یا در آزمون‌های ارزیابی خرد (microbenchmarks) برای تشخیص رفتارهای تعریف‌نشده مفید باشد. .RE .IP \fB\-fanalyzer\-transitivity\fR 4 .IX Item "-fanalyzer-transitivity" این گزینه خاصیت تعدی (transitivity) قیدها را در تحلیل‌گر فعال می‌کند. .IP \fB\-fno\-analyzer\-undo\-inlining\fR 4 .IX Item "-fno-analyzer-undo-inlining" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است. .Sp \&\fB\-fanalyzer\fR در مقایسه با سایر ابزارهای تحلیل کد نسبتاً دیر اجرا می‌شود و برخی بهینه‌سازی‌ها از پیش روی کد اعمال شده‌اند. به‌ویژه درون‌خط‌سازی توابع (inlining) ممکن است رخ داده باشد، که منجر می‌شود مسیرهای اجرای میان‌رویه‌ای صادرشده توسط تحلیل‌گر حاوی فریم‌های تابعی باشند که با فریم‌های موجود در کد مبدأ اصلی مطابقت ندارند. .Sp به‌طور پیش‌فرض، تحلیل‌گر تلاش می‌کند فریم‌های تابع اصلی را بازسازی کرده و رخدادهایی را که فراخوانی‌های درون‌خط‌شده را نشان می‌دهند صادر کند. .Sp با \fB\-fno\-analyzer\-undo\-inlining\fR این تلاش برای بازسازی اطلاعات فریم اصلی می‌تواند غیرفعال شود، که می‌تواند هنگام اشکال‌زدایی مشکلات موجود در تحلیل‌گر کمک‌کننده باشد. .IP \fB\-fanalyzer\-verbose\-edges\fR 4 .IX Item "-fanalyzer-verbose-edges" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است. این گزینه جزئیات مشروح‌تر و سطح‌پایین‌تری را در توصیف جریان کنترل درون مسیرهای تشخیصی فعال می‌کند. .IP \fB\-fanalyzer\-verbose\-state\-changes\fR 4 .IX Item "-fanalyzer-verbose-state-changes" این گزینه برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است. این گزینه جزئیات مشروح‌تر و سطح‌پایین‌تری را در توصیف رخدادهای مربوط به ماشین‌های وضعیت درون مسیرهای تشخیصی فعال می‌کند. .IP \fB\-fanalyzer\-verbosity=\fR\fIlevel\fR 4 .IX Item "-fanalyzer-verbosity=level" این گزینه پیچیدگی مسیرهای جریان کنترلی را که برای تشخیص‌های تحلیل‌گر صادر می‌شوند کنترل می‌کند. .Sp مقدار \fIlevel\fR می‌تواند یکی از موارد زیر باشد: .RS 4 .IP \fB0\fR 4 .IX Item "0" در این سطح، رخدادهای فراخوانی و بازگشت میان‌رویه‌ای همراه با مرتبط‌ترین رخدادهای تغییر وضعیت مربوط به یک تشخیص نمایش داده می‌شوند. برای نمونه، برای یک تشخیص \f(CW\*(C`free\*(C'\fR مضاعف (double\-free)، هر دو فراخوانی به \f(CW\*(C`free\*(C'\fR نشان داده خواهند شد. .IP \fB1\fR 4 .IX Item "1" مشابه سطح قبلی، اما رخدادهای مربوط به ورود به هر تابع را نیز نمایش می‌دهد. .IP \fB2\fR 4 .IX Item "2" مشابه سطح قبلی، اما رخدادهای مربوط به جریان کنترلی را که در برانگیختن مشکل نقش اساسی دارند نیز نمایش می‌دهد (مانند «طی‌شدن مسیر درست» در یک شرط). .Sp این سطح پیش‌فرض است. .IP \fB3\fR 4 .IX Item "3" مشابه سطح قبلی، اما همه رخدادهای جریان کنترل را نمایش می‌دهد، نه فقط موارد مهم را. .IP \fB4\fR 4 .IX Item "4" این سطح برای توسعه‌دهندگان تحلیل‌گر در نظر گرفته شده است؛ این سطح رخدادهای گوناگون دیگری را که برای اشکال‌زدایی تحلیل‌گر در نظر گرفته شده‌اند، می‌افزاید. .RE .RS 4 .RE .IP \fB\-fdump\-analyzer\fR 4 .IX Item "-fdump-analyzer" جزئیات درونی اقدامات انجام‌شده توسط تحلیل‌گر را در \&\fIfile.analyzer.txt\fR تخلیه می‌کند. گزینه \&\fB\-fdump\-analyzer\-stderr\fR این گزینه را لغو و جایگزین می‌کند..IP \fB\-fdump\-analyzer\-stderr\fR 4 .IX Item "-fdump-analyzer-stderr" جزئیات درونی درباره آنچه تحلیل‌گر انجام می‌دهد را در stderr تخلیه (dump) می‌کند. این گزینه \fB\-fdump\-analyzer\fR را لغو می‌کند. .IP \fB\-fdump\-analyzer\-callgraph\fR 4 .IX Item "-fdump-analyzer-callgraph" نمایشی از گراف فراخوانی (call graph) مناسب برای مشاهده با GraphViz را در \fIfile.callgraph.dot\fR تخلیه می‌کند. .IP \fB\-fdump\-analyzer\-exploded\-graph\fR 4 .IX Item "-fdump-analyzer-exploded-graph" نمایشی از «گراف بسط‌یافته» (exploded graph) مناسب برای مشاهده با GraphViz را در \fIfile.eg.dot\fR تخلیه می‌کند. گره‌ها بر اساس وضعیت‌های ماشین حالت با رنگ کدگذاری می‌شوند تا تغییرات وضعیت برجسته شود. .IP \fB\-fdump\-analyzer\-exploded\-nodes\fR 4 .IX Item "-fdump-analyzer-exploded-nodes" پیام‌های تشخیصی صادر می‌کند که نشان می‌دهند گره‌های «گراف بسط‌یافته» در چه موقعیتی نسبت به کد مبدأ برنامه قرار دارند. .IP \fB\-fdump\-analyzer\-exploded\-nodes\-2\fR 4 .IX Item "-fdump-analyzer-exploded-nodes-2" نمایشی متنی از «گراف بسط‌یافته» را در \&\fIfile.eg.txt\fR تخلیه می‌کند. .IP \fB\-fdump\-analyzer\-exploded\-nodes\-3\fR 4 .IX Item "-fdump-analyzer-exploded-nodes-3" نمایشی متنی از «گراف بسط‌یافته» را در قالب یک فایل تخلیه به ازای هر گره، در \fIfile.eg\-id.txt\fR تخلیه می‌کند. این گزینه معمولاً تعداد زیادی فایل تخلیه ایجاد می‌کند. .IP \fB\-fdump\-analyzer\-exploded\-paths\fR 4 .IX Item "-fdump-analyzer-exploded-paths" نمایشی متنی از «مسیر بسط‌یافته» (exploded path) را برای هر پیام تشخیصی در \fIfile.idx.kind.epath.txt\fR تخلیه می‌کند. .IP \fB\-fdump\-analyzer\-feasibility\fR 4 .IX Item "-fdump-analyzer-feasibility" جزئیات درونی جست‌وجوی تحلیل‌گر برای یافتن مسیرهای امکان‌پذیر را تخلیه می‌کند. این جزئیات در قالبی مناسب برای مشاهده با GraphViz در فایل‌هایی با قالب نام‌گذاری \fIfile.*.fg.dot\fR، \&\fIfile.*.tg.dot\fR و \fIfile.*.fpath.txt\fR نوشته می‌شوند. .IP \fB\-fdump\-analyzer\-infinite\-loop\fR 4 .IX Item "-fdump-analyzer-infinite-loop" جزئیات درونی جست‌وجوی تحلیل‌گر برای یافتن حلقه‌های بی‌پایان را تخلیه می‌کند. این جزئیات در قالبی مناسب برای مشاهده با GraphViz در فایل‌هایی با قالب نام‌گذاری \fIfile.*.infinite\-loop.dot\fR نوشته می‌شوند. .IP \fB\-fdump\-analyzer\-json\fR 4 .IX Item "-fdump-analyzer-json" نمایشی فشرده‌شده با ساختار JSON از جزئیات درونی تحلیل‌گر را در \&\fIfile.analyzer.json.gz\fR تخلیه می‌کند. قالب دقیق آن ممکن است تغییر کند. .IP \fB\-fdump\-analyzer\-state\-purge\fR 4 .IX Item "-fdump-analyzer-state-purge" مشابه با \fB\-fdump\-analyzer\-supergraph\fR، نمایشی از «ابرگراف» (supergraph) مناسب برای مشاهده با GraphViz را تخلیه می‌کند، اما گراف را با اطلاعاتی درباره اینکه چه وضعیتی در هر گره پاکسازی خواهد شد حاشیه‌نویسی می‌کند. گراف در \fIfile.state\-purge.dot\fR نوشته می‌شود. .IP \fB\-fdump\-analyzer\-supergraph\fR 4 .IX Item "-fdump-analyzer-supergraph" نمایش‌هایی از «ابرگراف» مناسب برای مشاهده با GraphViz را در \fIfile.supergraph.dot\fR و \&\fIfile.supergraph\-eg.dot\fR تخلیه می‌کند. این فایل‌ها تمام گراف‌های جریان کنترل برنامه را همراه با یال‌های بین‌روالی برای فراخوانی‌ها و بازگشت‌ها نشان می‌دهند. تخلیه دوم شامل حاشیه‌نویسی‌هایی است که گره‌های «گراف بسط‌یافته» و پیام‌های تشخیصی مرتبط با آن‌ها را نمایش می‌دهد. .IP \fB\-fdump\-analyzer\-untracked\fR 4 .IX Item "-fdump-analyzer-untracked" هشدارهای سفارشی همراه با جزئیات درونی ویژه توسعه‌دهندگان تحلیل‌گر صادر می‌کند. .SS "گزینه‌های اشکال‌زدایی برنامه (Options for Debugging Your Program)" .IX Subsection "Options for Debugging Your Program" برای اینکه به GCC اعلام کنید اطلاعات اضافی جهت استفاده توسط اشکال‌زدا تولید کند، تقریباً در تمام موارد تنها کافی است گزینه \fB\-g\fR را به سایر گزینه‌های خود بیفزایید. برخی از قالب‌های اشکال‌زدایی می‌توانند هم‌زمان وجود داشته باشند (مانند DWARF با CTF)، مشروط بر آنکه هر یک از آن‌ها به صراحت با افزودن گزینه خط فرمان مربوطه به دیگر گزینه‌هایتان فعال شده باشند. .PP کامپایلر GCC به شما اجازه می‌دهد از \fB\-g\fR همراه با \&\fB\-O\fR استفاده کنید. میان‌برهای حاصل از بهینه‌سازی کد ممکن است گاهی غافلگیرکننده باشند: ممکن است برخی از متغیرهای تعریف‌شده اصلاً وجود نداشته باشند؛ جریان کنترل ممکن است لحظه‌ای به جایی برود که انتظارش را نداشتید؛ برخی عبارات ممکن است اجرا نشوند زیرا نتایج ثابتی را محاسبه می‌کنند یا مقادیر آن‌ها از پیش آماده است؛ برخی عبارات ممکن است به دلیل انتقال به بیرون از حلقه‌ها در مکان‌های متفاوتی اجرا شوند. با این وجود، اشکال‌زدایی خروجیِ بهینه‌شده امکان‌پذیر است. این امر استفاده از بهینه‌ساز را برای برنامه‌هایی که ممکن است باگ داشته باشند منطقی می‌سازد. .PP اگر از گزینه بهینه‌سازی دیگری استفاده نمی‌کنید، استفاده از \fB\-Og\fR همراه با \fB\-g\fR را مد نظر قرار دهید. بدون هیچ گزینه \fB\-O\fRای، برخی از مراحل کامپایلر که اطلاعات مفید برای اشکال‌زدایی را جمع‌آوری می‌کنند اصلاً اجرا نمی‌شوند؛ بنابراین استفاده از \&\fB\-Og\fR ممکن است تجربه اشکال‌زدایی بهتری به همراه داشته باشد. .IP \fB\-g\fR 4 .IX Item "-g" اطلاعات اشکال‌زدایی را در قالب بومی سیستم‌عامل (stabs، COFF، XCOFF یا DWARF) تولید می‌کند. GDB می‌تواند با این اطلاعات اشکال‌زدایی کار کند. .Sp در بیشتر سیستم‌هایی که از قالب stabs استفاده می‌کنند، \fB\-g\fR اطلاعات اشکال‌زدایی اضافه‌ای را فعال می‌کند که تنها GDB قادر به استفاده از آن است؛ این اطلاعات اضافه باعث کارکرد بهتر در GDB می‌شود، اما احتمالاً موجب فروپاشی (crash) سایر اشکال‌زداها شده یا مانع از خواندن برنامه توسط آن‌ها می‌گردد. اگر می‌خواهید به طور قطع تولید شدن یا نشدن این اطلاعات اضافی را کنترل کنید، از \fB\-gvms\fR استفاده کنید (به زیر مراجعه کنید). .IP \fB\-ggdb\fR 4 .IX Item "-ggdb" اطلاعات اشکال‌زدایی را برای استفاده توسط GDB تولید می‌کند. این یعنی استفاده از گویاترین قالب در دسترس (DWARF، stabs یا قالب بومی در صورتی که هیچ‌یک از آن‌ها پشتیبانی نشوند)، شامل افزونه‌های GDB در صورت امکان. .IP \fB\-gdwarf\fR 4 .IX Item "-gdwarf" .PD 0 .IP \fB\-gdwarf\-\fR\fIversion\fR 4 .IX Item "-gdwarf-version" .PD اطلاعات اشکال‌زدایی را در قالب DWARF تولید می‌کند (در صورت پشتیبانی). مقدار \fIversion\fR می‌تواند 2، 3، 4 یا 5 باشد؛ نسخه پیش‌فرض برای بیشتر هدف‌ها 5 است (به استثنای VxWorks، TPF و Darwin / macOS که نسخه پیش‌فرض آن‌ها 2 است، و AIX که پیش‌فرض آن نسخه 4 است). .Sp توجه داشته باشید که با DWARF نسخه 2، برخی پورت‌ها به برخی افزونه‌های غیرمتعارض DWARF 3 در جدول‌های بازپیچی (unwind tables) نیاز دارند و همواره از آن‌ها استفاده می‌کنند. .Sp نسخه 4 برای بهره‌برداری حداکثری ممکن است به GDB 7.0 و \fB\-fvar\-tracking\-assignments\fR نیاز داشته باشد. نسخه 5 به GDB 8.0 یا بالاتر نیاز دارد. .Sp کامپایلر GCC دیگر از نسخه 1 DWARF که تفاوت‌های بنیادینی با نسخه 2 و نسخه‌های پس از آن دارد پشتیبانی نمی‌کند. به دلایل تاریخی، برخی دیگر از گزینه‌های مرتبط با DWARF مانند \&\fB\-fno\-dwarf2\-cfi\-asm\fR) ارجاع به نسخه 2 DWARF را در نام خود حفظ کرده‌اند، اما بر تمام نسخه‌های DWARF که در حال حاضر پشتیبانی می‌شوند اعمال می‌گردند. .IP \fB\-gbtf\fR 4 .IX Item "-gbtf" درخواست تولید اطلاعات اشکال‌زدایی BTF. فرمت BTF قالب اشکال‌زدایی پیش‌فرض برای هدف eBPF است. در دیگر هدف‌ها مانند x86، اطلاعات اشکال‌زدایی BTF می‌تواند همراه با اطلاعات اشکال‌زدایی DWARF تولید شود، به شرطی که هر دو قالب اشکال‌زدایی به طور صریح از طریق گزینه‌های خط فرمان مربوطه‌شان فعال شده باشند. .IP \fB\-gprune\-btf\fR 4 .IX Item "-gprune-btf" .PD 0 .IP \fB\-gno\-prune\-btf\fR 4 .IX Item "-gno-prune-btf" .PD هرس کردن اطلاعات BTF پیش از انتشار. هنگام هرس، تنها اطلاعات نوع برای انواعی که توسط متغیرهای سراسری و توابع در دامنه فایل (file\-scope) استفاده شده‌اند صادر خواهد شد. در صورت کامپایل برای هدف BPF با فعال بودن BPF CO\-RE، اطلاعات نوع برای انواع استفاده‌شده در بازنشانی‌های BPF CO\-RE نیز صادر می‌شود. علاوه بر این، انواع struct و union که تنها از طریق اشاره‌گرها از اعضای سایر انواع struct یا union به آن‌ها ارجاع شده است، هرس شده و با BTF_KIND_FWD جایگزین می‌شوند، گویی که این انواع تنها به عنوان اعلان‌های رو به جلو (forward declarations) در ورودی حضور داشته‌اند. .Sp این گزینه حجم اطلاعات BTF تولیدشده را به میزان چشمگیری کاهش می‌دهد، اما با از دست رفتن قابل‌توجه جزئیات اطلاعات نوع همراه است. این گزینه اصولاً هنگام کامپایل برای هدف BPF مفید است تا اندازه شیء نهایی به حداقل رسیده و اطلاعات BTF که بلافاصله به فرایند بارگذاری برنامه BPF مرتبط نیستند حذف شوند. .Sp این گزینه به صورت پیش‌فرض هنگام تولید اطلاعات BTF برای هدف BPF فعال است. .IP \fB\-gctf\fR 4 .IX Item "-gctf" .PD 0 .IP \fB\-gctf\fR\fIlevel\fR 4 .IX Item "-gctflevel" .PD درخواست اطلاعات اشکال‌زدایی CTF و استفاده از \fIlevel\fR برای تعیین میزان اطلاعات اشکال‌زدایی CTF تولیدی. اگر \fB\-gctf\fR بدون مقداری برای \fIlevel\fR مشخص شود، سطح پیش‌فرض اطلاعات اشکال‌زدایی CTF برابر با 2 است. .Sp اطلاعات اشکال‌زدایی CTF می‌تواند همراه با اطلاعات اشکال‌زدایی DWARF تولید شود، مشروط بر آنکه هر دو قالب اشکال‌زدایی به صورت صریح از طریق گزینه‌های خط فرمان مربوطه فعال شده باشند. .Sp سطح 0 هیچ‌گونه اطلاعات اشکال‌زدایی CTF تولید نمی‌کند. بنابراین، \fB\-gctf0\fR اثر \fB\-gctf\fR را خنثی می‌کند. .Sp سطح 1 اطلاعات CTF را صرفاً برای ردگیری‌ها (tracebacks) تولید می‌کند. این اطلاعات شامل محل فراخوانی (callsite) است، اما شامل اطلاعات نوع نیست. .Sp سطح 2 اطلاعات نوع را منحصراً برای موجودیت‌ها (توابع، اشیاء داده و غیره) در دامنه فایل (file\-scope) یا دامنه سراسری (global\-scope) تولید می‌کند. .IP \fB\-gvms\fR 4 .IX Item "-gvms" اطلاعات اشکال‌زدایی را در قالب اشکال‌زدایی Alpha/VMS تولید می‌کند (در صورت پشتیبانی). این قالبی است که توسط DEBUG در سیستم‌های Alpha/VMS استفاده می‌شود..IP \fB\-gcodeview\fR 4 .IX Item "-gcodeview" اطلاعات اشکال‌زدایی را در قالب اشکال‌زدایی CodeView (در صورت پشتیبانی) تولید می‌کند. این قالبی است که توسط Microsoft Visual C++ در Windows استفاده می‌شود. .IP \fB\-g\fR\fIlevel\fR 4 .IX Item "-glevel" .PD 0 .IP \fB\-ggdb\fR\fIlevel\fR 4 .IX Item "-ggdblevel" .IP \fB\-gvms\fR\fIlevel\fR 4 .IX Item "-gvmslevel" .PD درخواست اطلاعات اشکال‌زدایی و همچنین استفاده از \fIlevel\fR برای مشخص کردن میزان اطلاعات. سطح پیش‌فرض ۲ است. .Sp سطح ۰ اصلاً هیچ اطلاعات اشکال‌زدایی تولید نمی‌کند؛ بنابراین، \fB\-g0\fR اثر \&\fB\-g\fR را خنثی می‌کند. .Sp سطح ۱ کمترین مقدار اطلاعات را تولید می‌کند، به اندازه‌ای که برای ایجاد ردیابی پشته (backtrace) در بخش‌هایی از برنامه که قصد اشکال‌زدایی آن‌ها را ندارید کافی باشد. این شامل توصیف توابع و متغیرهای خارجی، و جدول‌های شماره خط است، اما حاوی هیچ اطلاعاتی درباره متغیرهای محلی نیست. .Sp سطح ۳ شامل اطلاعات اضافی است، مانند تمامی تعاریف ماکرو موجود در برنامه. برخی از اشکال‌زداها هنگام استفاده از \fB\-g3\fR از بسط ماکرو پشتیبانی می‌کنند. .Sp اگر از چندین گزینه \fB\-g\fR، همراه با شماره سطح یا بدون آن، استفاده کنید، آخرین گزینه از این دست مؤثر خواهد بود. .Sp گزینه \&\fB\-gdwarf\fR برای جلوگیری از سردرگمی با \fB\-gdwarf\-\fR\fIlevel\fR سطح اشکال‌زدایی متصل را نمی‌پذیرد. در عوض از یک گزینه اضافی \fB\-g\fR\fIlevel\fR برای تغییر سطح اشکال‌زدایی DWARF استفاده کنید. .IP \fB\-fno\-eliminate\-unused\-debug\-symbols\fR 4 .IX Item "-fno-eliminate-unused-debug-symbols" به‌طور پیش‌فرض، برای نمادهایی که عملاً استفاده نمی‌شوند هیچ اطلاعات اشکال‌زدایی تولید نمی‌شود. اگر می‌خواهید اطلاعات اشکال‌زدایی برای تمام نمادها تولید شود، از این گزینه استفاده کنید. .IP \fB\-femit\-class\-debug\-always\fR 4 .IX Item "-femit-class-debug-always" به جای انتشار اطلاعات اشکال‌زدایی برای یک کلاس C++ تنها در یک فایل شیء (object file)، آن را در تمامی فایل‌های شیءِ استفاده‌کننده از آن کلاس منتشر می‌کند. این گزینه باید تنها با اشکال‌زداهایی استفاده شود که قادر به مدیریت روش عادی GCC در انتشار اطلاعات اشکال‌زدایی کلاس‌ها نیستند، زیرا استفاده از این گزینه حجم اطلاعات اشکال‌زدایی را تا دو برابر افزایش می‌دهد. .IP \fB\-fno\-merge\-debug\-strings\fR 4 .IX Item "-fno-merge-debug-strings" به پیونددهنده هدایت می‌دهد که رشته‌های یکسان در اطلاعات اشکال‌زدایی در فایل‌های شیء مختلف را با یکدیگر ادغام نکند. ادغام توسط همه اسمبلرها یا پیونددهنده‌ها پشتیبانی نمی‌شود. ادغام، اندازه اطلاعات اشکال‌زدایی را در فایل خروجی به بهای افزایش زمان پردازش پیوند کاهش می‌دهد. ادغام به‌طور پیش‌فرض فعال است. .IP \fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4 .IX Item "-fdebug-prefix-map=old=new" هنگام کامپایل فایل‌های مستقر در دایرکتوری \fIold\fR، اطلاعات اشکال‌زدایی توصیف‌کننده آن‌ها را طوری ثبت می‌کند که گویی فایل‌ها به جای آن در دایرکتوری \fInew\fR قرار دارند. این گزینه می‌تواند برای جایگزینی یک مسیر زمان ساخت (build\-time) با یک مسیر زمان نصب (install\-time) در اطلاعات اشکال‌زدایی به کار رود. همچنین می‌تواند با استفاده از \&\fI.\fR برای \fInew\fR، جهت تبدیل یک مسیر مطلق به یک مسیر نسبی استفاده شود. این کار می‌تواند منجر به ساخت‌های بازتولیدپذیرتری (reproducible builds) شود که مستقل از مکان هستند، اما ممکن است به یک دستور اضافی نیاز داشته باشد تا به GDB بگوید فایل‌های منبع را در کجا پیدا کند. همچنین \fB\-ffile\-prefix\-map\fR و \fB\-fcanon\-prefix\-map\fR را ببینید. .IP \fB\-fvar\-tracking\fR 4 .IX Item "-fvar-tracking" گذرگاه ردیابی متغیر (variable tracking pass) را اجرا می‌کند. این مرحله محاسبه می‌کند که متغیرها در هر موقعیت از کد در کجا ذخیره شده‌اند. سپس اطلاعات اشکال‌زدایی بهتری تولید می‌شود (در صورتی که قالب اطلاعات اشکال‌زدایی از این اطلاعات پشتیبانی کند). .Sp این گزینه به‌طور پیش‌فرض هنگام کامپایل با بهینه‌سازی (\fB\-Os\fR، \&\fB\-O\fR، \fB\-O2\fR، ...)، فعال بودن اطلاعات اشکال‌زدایی (\fB\-g\fR) و در صورت پشتیبانیِ قالب اطلاعات اشکال‌زدایی از آن، فعال است. .IP \fB\-fvar\-tracking\-assignments\fR 4 .IX Item "-fvar-tracking-assignments" انتساب‌ها به متغیرهای کاربر را در مراحل اولیه کامپایل نشانه‌گذاری می‌کند و تلاش می‌کند این نشانه‌ها را در سرتاسر فرایند کامپایل تا انتها حفظ کند تا اطلاعات اشکال‌زدایی در حین بهینه‌سازی بهبود یابد. استفاده از \fB\-gdwarf\-4\fR به همراه آن توصیه می‌شود. .Sp این ویژگی حتی در صورت غیرفعال بودن var\-tracking نیز می‌تواند فعال شود، که در این حالت نشانه‌ها ایجاد و نگهداری می‌شوند، اما در پایان کنار گذاشته می‌شوند. به‌طور پیش‌فرض، این پرچم به همراه \fB\-fvar\-tracking\fR فعال است، مگر زمانی که زمان‌بندی انتخابی (selective scheduling) فعال باشد. .IP \fB\-gsplit\-dwarf\fR 4 .IX Item "-gsplit-dwarf" در صورت فعال بودن اطلاعات اشکال‌زدایی DWARF، تا حد امکان اطلاعات اشکال‌زدایی را در یک فایل خروجی جداگانه با پسوند \&\fI.dwo\fR تفکیک می‌کند. این گزینه به سامانه ساخت اجازه می‌دهد تا از پیوند دادن فایل‌های حاوی اطلاعات اشکال‌زدایی اجتناب کند. برای سودمند بودن، این گزینه نیازمند اشکال‌زدایی است که توانایی خواندن فایل‌های \fI.dwo\fR را داشته باشد. .IP \fB\-gdwarf32\fR 4 .IX Item "-gdwarf32" .PD 0 .IP \fB\-gdwarf64\fR 4 .IX Item "-gdwarf64" .PD در صورت فعال بودن اطلاعات اشکال‌زدایی DWARF، گزینه \fB\-gdwarf32\fR قالب ۳۲ بیتی DWARF و گزینه \fB\-gdwarf64\fR قالب ۶۴ بیتی DWARF را انتخاب می‌کند. مقدار پیش‌فرض به هدف (target) بستگی دارد، هرچند در اکثر هدف‌ها \&\fB\-gdwarf32\fR است. قالب ۳۲ بیتی DWARF کوچک‌تر است، اما نمی‌تواند بیش از ۲ گیبی‌بایت (2GiB) اطلاعات اشکال‌زدایی را در هیچ‌یک از بخش‌های اطلاعات اشکال‌زدایی DWARF پشتیبانی کند. قالب ۶۴ بیتی DWARF امکان ثبت اطلاعات اشکال‌زدایی بزرگ‌تر را فراهم می‌کند اما ممکن است هنوز توسط همه مصرف‌کنندگان به خوبی پشتیبانی نشود. .IP \fB\-gdescribe\-dies\fR 4 .IX Item "-gdescribe-dies" ویژگی‌های توصیف (description attributes) را به برخی از DIEهای DWARF که فاقد ویژگی نام هستند، مانند متغیرهای مصنوعی (artificial variables)، ارجاع‌های خارجی، و DIEهای پارامتر نقطه فراخوانی (call site parameter)، اضافه می‌کند. .IP \fB\-gpubnames\fR 4 .IX Item "-gpubnames" بخش‌های \f(CW\*(C`.debug_pubnames\*(C'\fR و \f(CW\*(C`.debug_pubtypes\*(C'\fR را در DWARF تولید می‌کند. .IP \fB\-ggnu\-pubnames\fR 4 .IX Item "-ggnu-pubnames" بخش‌های \f(CW\*(C`.debug_pubnames\*(C'\fR و \f(CW\*(C`.debug_pubtypes\*(C'\fR را در قالبی مناسب برای تبدیل به یک نمایه (index) جی‌دی‌بی GDB تولید می‌کند. این گزینه تنها همراه با پیونددهنده‌ای مفید است که بتواند نمایه GDB نسخه ۷ را تولید کند. .IP \fB\-fdebug\-types\-section\fR 4 .IX Item "-fdebug-types-section" هنگام استفاده از DWARF نسخه ۴ یا بالاتر، DIEهای نوع می‌توانند به جای قرار گرفتن در بخش \&\f(CW\*(C`.debug_info\*(C'\fR، در بخش اختصاصی خود به نام \f(CW\*(C`.debug_types\*(C'\fR قرار گیرند. قرار دادن آن‌ها در یک بخش comdat جداگانه کارآمدتر است، زیرا پیونددهنده می‌تواند موارد تکراری را حذف کند. اما همه مصرف‌کنندگان DWARF هنوز از بخش‌های \f(CW\*(C`.debug_types\*(C'\fR پشتیبانی نمی‌کنند و در برخی شیءها، \f(CW\*(C`.debug_types\*(C'\fR به جای کوچک‌تر کردن، اطلاعات اشکال‌زدایی بزرگ‌تری تولید می‌کند. .IP \fB\-grecord\-gcc\-switches\fR 4 .IX Item "-grecord-gcc-switches" .PD 0 .IP \fB\-gno\-record\-gcc\-switches\fR 4 .IX Item "-gno-record-gcc-switches" .PD این کلید باعث می‌شود گزینه‌های خط فرمانی که برای فراخوانی کامپایلر استفاده شده و ممکن است بر تولید کد تأثیر بگذارند، به ویژگی DW_AT_producer در اطلاعات اشکال‌زدایی DWARF ضمیمه شوند. گزینه‌ها با فاصله از یکدیگر و از نسخه کامپایلر جدا شده و متصل می‌گردند. این گزینه به‌طور پیش‌فرض فعال است. همچنین برای روش دیگری از ذخیره گزینه‌های کامپایلر در فایل شیء، \fB\-frecord\-gcc\-switches\fR را ببینید. .IP \fB\-gstrict\-dwarf\fR 4 .IX Item "-gstrict-dwarf" استفاده از افزونه‌های نسخه‌های استاندارد DWARF جدیدتر از نسخه انتخاب‌شده با \fB\-gdwarf\-\fR\fIversion\fR را منع می‌کند. در بیشتر هدف‌ها، استفاده از افزونه‌های DWARF بدون تداخل از نسخه‌های استاندارد بعدی مجاز است. .IP \fB\-gno\-strict\-dwarf\fR 4 .IX Item "-gno-strict-dwarf" استفاده از افزونه‌های نسخه‌های استاندارد DWARF جدیدتر از نسخه انتخاب‌شده با \&\fB\-gdwarf\-\fR\fIversion\fR را مجاز می‌داند. .IP \fB\-gas\-loc\-support\fR 4 .IX Item "-gas-loc-support" به کامپایلر اطلاع می‌دهد که اسمبلر از دستورالعمل‌های \f(CW\*(C`.loc\*(C'\fR پشتیبانی می‌کند. در این صورت ممکن است از آن‌ها استفاده کند تا اسمبلر جدول‌های شماره خط DWARF2+ را تولید کند. .Sp این امر عموماً مطلوب است، زیرا جدول‌های شماره خط تولیدشده توسط اسمبلر بسیار فشرده‌تر از آن‌هایی است که خود کامپایلر می‌تواند تولید کند. .Sp اگر در زمان پیکربندی GCC مشخص شود که اسمبلر از چنین دستورالعمل‌هایی پشتیبانی می‌کند، این گزینه به‌طور پیش‌فرض فعال خواهد شد. .IP \fB\-gno\-as\-loc\-support\fR 4 .IX Item "-gno-as-loc-support" در صورتی که قرار باشد جدول‌های شماره خط DWARF2+ تولید شوند، GCC را مجبور می‌کند تا این جدول‌ها را به‌صورت داخلی تولید کند. .IP \fB\-gas\-locview\-support\fR 4 .IX Item "-gas-locview-support" به کامپایلر اطلاع می‌دهد که اسمبلر از انتساب \f(CW\*(C`view\*(C'\fR و بررسی ادعای بازنشانی (reset assertion) در دستورالعمل‌های \f(CW\*(C`.loc\*(C'\fR پشتیبانی می‌کند. .Sp اگر در زمان پیکربندی GCC مشخص شود که اسمبلر از آن‌ها پشتیبانی می‌کند، این گزینه به‌طور پیش‌فرض فعال خواهد شد. .IP \fB\-gno\-as\-locview\-support\fR 4 .IX Item "-gno-as-locview-support" در صورتی که \&\fB\-gvariable\-location\-views\fR به‌صراحت درخواست شده باشد، GCC را مجبور می‌کند تا شماره‌های view را به‌صورت داخلی اختصاص دهد. .IP \fB\-gcolumn\-info\fR 4 .IX Item "-gcolumn-info" .PD 0.IP \fB\-gno\-column\-info\fR 4 .IX Item "-gno-column-info" .PD اطلاعات ستون موقعیت را علاوه بر فایل و سطر، در اطلاعات اشکال‌زدایی DWARF درج می‌کند. این گزینه به صورت پیش‌فرض فعال است. .IP \fB\-gstatement\-frontiers\fR 4 .IX Item "-gstatement-frontiers" .PD 0 .IP \fB\-gno\-statement\-frontiers\fR 4 .IX Item "-gno-statement-frontiers" .PD این گزینه باعث می‌شود GCC نشانگرهایی را در نمایش درونی (internal representation) در آغاز دستورها ایجاد کند و آن‌ها را در طول فرایند کامپایل تقریباً در جای خود نگه دارد، تا از آن‌ها برای هدایت خروجی نشانگرهای \f(CW\*(C`is_stmt\*(C'\fR در جدول شماره سطرها استفاده کند. این قابلیت هنگام کامپایل با بهینه‌سازی (\fB\-Os\fR، \fB\-O1\fR، \fB\-O2\fR، \&...) و تولید اطلاعات اشکال‌زدایی DWARF 2 در سطح عادی، به طور پیش‌فرض فعال است. .IP \fB\-gvariable\-location\-views\fR 4 .IX Item "-gvariable-location-views" .PD 0 .IP \fB\-gvariable\-location\-views=incompat5\fR 4 .IX Item "-gvariable-location-views=incompat5" .IP \fB\-gno\-variable\-location\-views\fR 4 .IX Item "-gno-variable-location-views" .PD فهرست‌های مکان متغیر را با شماره‌های نمای افزایشیِ مستخرج از جدول شماره سطرها تکمیل می‌کند. این کار به مصرف‌کنندگان اطلاعات اشکال‌زدایی امکان می‌دهد تا وضعیت برنامه را در نقاط خاصی بررسی کنند، حتی اگر هیچ دستورالعمل مرتبط با مکان‌های سورسِ متناظر در آن نقطه وجود نداشته باشد. اگر اسمبلر فاقد پشتیبانی از شماره‌های نما در جداول شماره سطر باشد، این امر باعث می‌شود کامپایلر جدول شماره سطر را تولید کند که عموماً فشردگی آن‌ها را تا حدی کاهش می‌دهد. جداول شماره سطر و فهرست‌های مکان ارتقایافته کاملاً سازگار با گذشته هستند، بنابراین مصرف‌کنندگانی از اطلاعات اشکال‌زدایی که از این افزونه‌ها آگاه نیستند نیز می‌توانند آن‌ها را به کار گیرند، اما هیچ بهره‌ای از آن‌ها نخواهند برد. .Sp این گزینه هنگام تولید اطلاعات اشکال‌زدایی DWARF 2 در سطح عادی، تا زمانی که پشتیبانی در اسمبلر وجود داشته باشد، \&\fB\-fvar\-tracking\-assignments\fR فعال باشد و \&\fB\-gstrict\-dwarf\fR غیرفعال باشد، به طور پیش‌فرض فعال است. هنگامی که پشتیبانی اسمبلر در دسترس نیست، این ویژگی ممکن است همچنان فعال باشد، اما GCC را مجبور به خروجی دادن جداول داخلی شماره سطر می‌کند، و اگر \&\fB\-ginternal\-reset\-location\-views\fR فعال نباشد، مطمئناً منجر به عدم تطابق خاموش نماهای مکان خواهد شد. .Sp یک نمایش پیشنهادی برای شماره‌های نما وجود دارد که با قالب فهرست مکان معرفی‌شده در DWARF 5 سازگار با گذشته نیست و می‌تواند با \fB\-gvariable\-location\-views=incompat5\fR فعال شود. این گزینه ممکن است در آینده حذف شود و صرفاً به عنوان یک پیاده‌سازی مرجع از نمایش پیشنهادی ارائه شده است. انتظار نمی‌رود مصرف‌کنندگان اطلاعات اشکال‌زدایی از این قالب توسعه‌یافته پشتیبانی کنند و استفاده از آن، آن‌ها را از رمزگشایی فهرست‌های مکان ناتوان خواهد کرد. .IP \fB\-ginternal\-reset\-location\-views\fR 4 .IX Item "-ginternal-reset-location-views" .PD 0 .IP \fB\-gno\-internal\-reset\-location\-views\fR 4 .IX Item "-gno-internal-reset-location-views" .PD تلاش می‌کند نماهای مکانی را که می‌توان از فهرست‌های نمای مکان حذف کرد، تعیین کند. این امر مستلزم آن است که کامپایلر تخمین‌های بسیار دقیقی از طول دستورالعمل‌ها داشته باشد که همیشه این‌طور نیست، و ممکن است در هنگام استفاده از اسمبلری که از فهرست‌های نمای مکان پشتیبانی نمی‌کند، باعث تولید بی‌سروصدای فهرست‌های نمای نادرست شود. اسمبلر گنو (GNU assembler) هر گونه خطایی از این دست را با عنوان \f(CW\*(C`view number mismatch\*(C'\fR علامت‌گذاری خواهد کرد. این ویژگی تنها روی پورت‌هایی فعال است که یک تابع تخمین قابل اعتماد تعریف کرده باشند. .IP \fB\-ginline\-points\fR 4 .IX Item "-ginline-points" .PD 0 .IP \fB\-gno\-inline\-points\fR 4 .IX Item "-gno-inline-points" .PD اطلاعات اشکال‌زدایی گسترش‌یافته را برای توابع درون‌خطی‌شده (inlined) تولید می‌کند. نشانگرهای ردیابی نمای مکان در نقاط ورود درون‌خطی درج می‌شوند، تا بتوان شماره‌های آدرس و نما را محاسبه کرده و در اطلاعات اشکال‌زدایی خروجی داد. این گزینه می‌تواند مستقل از نماهای مکان فعال شود که در این حالت شماره‌های نما خروجی داده نخواهند شد، اما تنها می‌تواند همراه با statement frontiers فعال شود، و به طور پیش‌فرض تنها در صورتی فعال است که نماهای مکان فعال باشند. .IP \fB\-gz\fR[\fB=\fR\fItype\fR] 4 .IX Item "-gz[=type]" در صورت پشتیبانی، بخش‌های اشکال‌زدایی فشرده‌شده را در قالب DWARF تولید می‌کند. اگر \fItype\fR مشخص نشده باشد، نوع پیش‌فرض به قابلیت‌های اسمبلر و پیونددهندهٔ مورداستفاده بستگی دارد. \fItype\fR می‌تواند یکی از مقادیر \&\fBnone\fR (عدم فشرده‌سازی بخش‌های اشکال‌زدایی) یا \fBzlib\fR (استفاده از فشرده‌سازی zlib در قالب ELF gABI) باشد. اگر پیونددهنده از نوشتن بخش‌های اشکال‌زدایی فشرده پشتیبانی نکند، گزینه رد می‌شود. در غیر این صورت، چنانچه اسمبلر از آن‌ها پشتیبانی نکند، \fB\-gz\fR هنگام تولید فایل‌های شیء (object files) به صورت خاموش نادیده گرفته می‌شود. .IP \fB\-femit\-struct\-debug\-baseonly\fR 4 .IX Item "-femit-struct-debug-baseonly" اطلاعات اشکال‌زدایی را برای انواع شبیه به ساختار (struct\-like types) تنها زمانی منتشر می‌کند که نام پایه (base name) فایل سورس کامپایل با نام پایه فایلی که ساختار در آن تعریف شده است مطابقت داشته باشد. .Sp این گزینه اندازه اطلاعات اشکال‌زدایی را به طور چشمگیری کاهش می‌دهد، اما با احتمال از دست رفتن قابل توجه اطلاعات نوع برای اشکال‌زدا همراه است. برای گزینه‌ای با شدت کمتر، \fB\-femit\-struct\-debug\-reduced\fR را ببینید. برای کنترل دقیق‌تر، \fB\-femit\-struct\-debug\-detailed\fR را ببینید. .Sp این گزینه تنها با خروجی اشکال‌زدایی DWARF کار می‌کند. .IP \fB\-femit\-struct\-debug\-reduced\fR 4 .IX Item "-femit-struct-debug-reduced" اطلاعات اشکال‌زدایی را برای انواع شبیه به ساختار تنها زمانی منتشر می‌کند که نام پایه فایل سورس کامپایل با نام پایه فایلی که نوع در آن تعریف شده است مطابقت داشته باشد، مگر اینکه ساختار یک قالب (template) باشد یا در یک سرایند سیستمی تعریف شده باشد. .Sp این گزینه اندازه اطلاعات اشکال‌زدایی را به طور قابل توجهی کاهش می‌دهد، همراه با مقداری احتمالِ از دست رفتن اطلاعات نوع برای اشکال‌زدا. برای گزینه‌ای با شدت بیشتر، \fB\-femit\-struct\-debug\-baseonly\fR را ببینید. برای کنترل دقیق‌تر، \fB\-femit\-struct\-debug\-detailed\fR را ببینید. .Sp این گزینه تنها با خروجی اشکال‌زدایی DWARF کار می‌کند. .IP \fB\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec\-list\fR] 4 .IX Item "-femit-struct-debug-detailed[=spec-list]" انواع شبیه به ساختار را که کامپایلر برای آن‌ها اطلاعات اشکال‌زدایی تولید می‌کند، مشخص می‌نماید. هدف، کاهش اطلاعات اشکال‌زدایی تکراریِ ساختارها میان فایل‌های شیء مختلف در یک برنامه یکسان است. .Sp این گزینه نسخه‌ای دقیق‌تر و با جزئیات بیشتر از \&\fB\-femit\-struct\-debug\-reduced\fR و \fB\-femit\-struct\-debug\-baseonly\fR است که برای اکثر نیازها کافی است. .Sp یک مشخصه دارای نحو [\fBdir:\fR|\fBind:\fR][\fBord:\fR|\fBgen:\fR](\fBany\fR|\fBsys\fR|\fBbase\fR|\fBnone\fR) است. .Sp کلمه اختیاری اول، مشخصه را به ساختارهایی که به صورت مستقیم استفاده می‌شوند (\fBdir:\fR) یا به صورت غیرمستقیم استفاده می‌شوند (\fBind:\fR) محدود می‌کند. یک نوع ساختار زمانی مستقیماً استفاده می‌شود که نوع یک متغیر یا عضو باشد. کاربردهای غیرمستقیم از طریق اشاره‌گرها به ساختارها ناشی می‌شوند؛ بدین معنا که هرگاه استفاده از یک ساختار ناکامل (incomplete struct) معتبر باشد، استفاده غیرمستقیم است. یک مثال عبارت است از: \&\fBstruct one direct; struct two * indirect;\fR. .Sp کلمه اختیاری دوم، مشخصه را به ساختارهای معمولی (\fBord:\fR) یا ساختارهای جنریک (\fBgen:\fR) محدود می‌کند. توضیح ساختارهای جنریک کمی پیچیده است. برای ++C، این‌ها تخصیص‌های غیرصریح (non\-explicit specializations) کلاس‌های قالب، یا کلاس‌های غیرقالب در درون موارد فوق هستند. زبان‌های برنامه‌نویسی دیگر دارای generics هستند، اما \fB\-femit\-struct\-debug\-detailed\fR هنوز آن‌ها را پیاده‌سازی نکرده است. .Sp کلمه سوم فایل‌های سورس را برای آن دسته از ساختارهایی تعیین می‌کند که کامپایلر باید اطلاعات اشکال‌زدایی را برایشان تولید کند. مقادیر \fBnone\fR و \fBany\fR معنای معمول خود را دارند. مقدار \fBbase\fR به این معنی است که نام پایه فایلی که اعلان نوع در آن قرار دارد، باید با نام پایه فایل کامپایل اصلی مطابقت داشته باشد. در عمل، این یعنی هنگام کامپایل \fIfoo.c\fR، اطلاعات اشکال‌زدایی برای انواع اعلان‌شده در همان فایل و \fIfoo.h\fR تولید می‌شود، اما برای سایر فایل‌های سرایند تولید نمی‌شود. مقدار \fBsys\fR شامل انواعی است که شرط \fBbase\fR را برآورده می‌کنند یا در سرایندهای سیستمی یا کامپایلر اعلان شده‌اند. .Sp ممکن است برای تعیین بهترین تنظیمات برای برنامهٔ خود نیاز به آزمون و بررسی داشته باشید. .Sp مقدار پیش‌فرض \fB\-femit\-struct\-debug\-detailed=all\fR است. .Sp این گزینه تنها با خروجی اشکال‌زدایی DWARF کار می‌کند. .IP \fB\-fno\-dwarf2\-cfi\-asm\fR 4 .IX Item "-fno-dwarf2-cfi-asm" اطلاعات بازگردانی (unwind info) ساختار DWARF را به جای استفاده از دستورهای \f(CW\*(C`.cfi_*\*(C'\fR در GAS، به صورت بخش \f(CW\*(C`.eh_frame\*(C'\fR تولیدشده توسط کامپایلر منتشر می‌کند. .IP \fB\-fno\-eliminate\-unused\-debug\-types\fR 4 .IX Item "-fno-eliminate-unused-debug-types" به طور معمول، هنگام تولید خروجی DWARF، کامپایلر GCC از تولید خروجی نماد اشکال‌زدایی برای انواعی که در هیچ جای فایل سورس در حال کامپایل استفاده نشده‌اند، خودداری می‌کند. گاهی اوقات مفید است که GCC اطلاعات اشکال‌زدایی را برای تمام انواع اعلان‌شده در یک واحد کامپایل (compilation unit) منتشر کند، صرف‌نظر از اینکه عملاً در آن واحد کامپایل استفاده شده باشند یا خیر؛ به عنوان مثال اگر در اشکال‌زدا بخواهید مقداری را به نوعی که در برنامه استفاده نشده (اما اعلان شده است) تبدیل (cast) کنید. با این حال، در اغلب موارد این کار به هدررفت حجم زیادی از فضا منجر می‌شود..SS "گزینه‌های کنترل بهینه‌سازی (Options That Control Optimization)" .IX Subsection "Options That Control Optimization" این گزینه‌ها انواع مختلفی از بهینه‌سازی‌ها را کنترل می‌کنند. .PP بدون هیچ گزینه بهینه‌سازی، هدف کامپایلر کاهش هزینه کامپایل و حصول اطمینان از دستیابی به نتایج مورد انتظار در هنگام اشکال‌زدایی (دیباگ) است. دستورها مستقل هستند: اگر برنامه را با یک نقطه توقف (breakpoint) بین دستورها متوقف کنید، می‌توانید مقداری جدید به هر متغیری انتساب دهید یا شمارنده برنامه (program counter) را به هر دستور دیگری در تابع هدایت کنید و دقیقاً همان نتایجی را دریافت کنید که بر اساس کد منبع انتظار دارید. .PP فعال کردن پرچم‌های بهینه‌سازی باعث می‌شود کامپایلر تلاش کند کارایی و/یا اندازه کد را به بهای زمان کامپایل و احتمالاً کاهش توانایی اشکال‌زدایی برنامه بهبود بخشد. .PP کامپایلر بهینه‌سازی را بر اساس شناختی که از برنامه دارد انجام می‌دهد. کامپایل هم‌زمان چندین فایل به حالت یک فایل خروجی واحد، به کامپایلر امکان می‌دهد هنگام کامپایل هر یک از آن‌ها، از اطلاعات کسب‌شده از تمام فایل‌ها بهره ببرد. .PP همه بهینه‌سازی‌ها مستقیماً با یک پرچم کنترل نمی‌شوند. تنها بهینه‌سازی‌هایی که دارای پرچم هستند در این بخش فهرست شده‌اند. .PP بیشتر بهینه‌سازی‌ها در سطح \fB\-O0\fR یا در صورتی که سطح \&\fB\-O\fR در خط فرمان مشخص نشده باشد، به‌طور کامل غیرفعال می‌شوند، حتی اگر پرچم‌های بهینه‌سازی منفرد به‌طور صریح تعیین شده باشند. به‌طور مشابه، \fB\-Og\fR از اجرای بسیاری از مراحل بهینه‌سازی جلوگیری می‌کند. .PP بسته به معماری هدف و نحوه پیکربندی GCC، ممکن است در هر سطح \fB\-O\fR مجموعه کمی متفاوتی از بهینه‌سازی‌ها نسبت به موارد ذکرشده در اینجا فعال شوند. می‌توانید GCC را با \fB\-Q \-\-help=optimizers\fR فراخوانی کنید تا از مجموعه دقیق بهینه‌سازی‌های فعال‌شده در هر سطح مطلع شوید. .IP \fB\-O\fR 4 .IX Item "-O" .PD 0 .IP \fB\-O1\fR 4 .IX Item "-O1" .PD بهینه‌سازی. کامپایل بهینه‌سازی‌شده زمان تا حدی بیشتر و برای یک تابع بزرگ، حافظه بسیار بیشتری مصرف می‌کند. .Sp با \fB\-O\fR، کامپایلر تلاش می‌کند اندازه کد و زمان اجرا را کاهش دهد، بدون این که بهینه‌سازی‌هایی انجام دهد که زمان کامپایل زیادی می‌طلبند. .Sp سطح \&\fB\-O\fR سطح بهینه‌سازی توصیه‌شده برای کدهای بزرگ تولیدشده توسط ماشین (machine\-generated) است، زیرا تعادلی منطقی بین زمان صرف‌شده برای کامپایل و مصرف حافظه برقرار می‌کند: سطوح بالاتر بهینه‌سازی، عملیات بهینه‌سازی را با پیچیدگی الگوریتمی بالاتری نسبت به \fB\-O\fR انجام می‌دهند. .Sp گزینه \&\fB\-O\fR پرچم‌های بهینه‌سازی زیر را فعال می‌کند: .Sp \&\fB\-fauto\-inc\-dec \&\-fbranch\-count\-reg \&\-fcombine\-stack\-adjustments \&\-fcompare\-elim \&\-fcprop\-registers \&\-fdce \&\-fdefer\-pop \&\-fdelayed\-branch \&\-fdse \&\-fforward\-propagate \&\-fguess\-branch\-probability \&\-fif\-conversion \&\-fif\-conversion2 \&\-finline\-functions\-called\-once \&\-fipa\-modref \&\-fipa\-profile \&\-fipa\-pure\-const \&\-fipa\-reference \&\-fipa\-reference\-addressable \&\-fivopts \&\-fmerge\-constants \&\-fmove\-loop\-invariants \&\-fmove\-loop\-stores \&\-fomit\-frame\-pointer \&\-freorder\-blocks \&\-fshrink\-wrap \&\-fshrink\-wrap\-separate \&\-fsplit\-wide\-types \&\-fssa\-backprop \&\-fssa\-phiopt \&\-ftree\-bit\-ccp \&\-ftree\-ccp \&\-ftree\-ch \&\-ftree\-coalesce\-vars \&\-ftree\-copy\-prop \&\-ftree\-dce \&\-ftree\-dominator\-opts \&\-ftree\-dse \&\-ftree\-forwprop \&\-ftree\-fre \&\-ftree\-phiprop \&\-ftree\-pta \&\-ftree\-scev\-cprop \&\-ftree\-sink \&\-ftree\-slsr \&\-ftree\-sra \&\-ftree\-ter \&\-funit\-at\-a\-time\fR .IP \fB\-O2\fR 4 .IX Item "-O2" بهینه‌سازی حتی بیشتر. GCC تقریباً تمام بهینه‌سازی‌های پشتیبانی‌شده را که موازنه‌ای بین فضا و سرعت (space\-speed tradeoff) ایجاد نمی‌کنند، انجام می‌دهد. در مقایسه با \fB\-O\fR، این گزینه هم زمان کامپایل و هم کارایی کد تولیدشده را افزایش می‌دهد. .Sp گزینه \&\fB\-O2\fR تمام پرچم‌های بهینه‌سازی مشخص‌شده توسط \fB\-O1\fR را فعال می‌کند. این گزینه همچنین پرچم‌های بهینه‌سازی زیر را فعال می‌نماید: .Sp \&\fB\-falign\-functions \-falign\-jumps \&\-falign\-labels \-falign\-loops \&\-fcaller\-saves \&\-fcode\-hoisting \&\-fcrossjumping \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \&\-fdelete\-null\-pointer\-checks \&\-fdevirtualize \-fdevirtualize\-speculatively \&\-fexpensive\-optimizations \&\-ffinite\-loops \&\-fgcse \-fgcse\-lm \&\-fhoist\-adjacent\-loads \&\-finline\-functions \&\-finline\-small\-functions \&\-findirect\-inlining \&\-fipa\-bit\-cp \-fipa\-cp \-fipa\-icf \&\-fipa\-ra \-fipa\-sra \-fipa\-vrp \&\-fisolate\-erroneous\-paths\-dereference \&\-flra\-remat \&\-foptimize\-crc \&\-foptimize\-sibling\-calls \&\-foptimize\-strlen \&\-fpartial\-inlining \&\-fpeephole2 \&\-freorder\-blocks\-algorithm=stc \&\-freorder\-blocks\-and\-partition \-freorder\-functions \&\-frerun\-cse\-after\-loop \&\-fschedule\-insns \-fschedule\-insns2 \&\-fsched\-interblock \-fsched\-spec \&\-fstore\-merging \&\-fstrict\-aliasing \&\-fthread\-jumps \&\-ftree\-builtin\-call\-dce \&\-ftree\-loop\-vectorize \&\-ftree\-pre \&\-ftree\-slp\-vectorize \&\-ftree\-switch\-conversion \-ftree\-tail\-merge \&\-ftree\-vrp \&\-fvect\-cost\-model=very\-cheap\fR .Sp لطفاً به هشدار ذیل \fB\-fgcse\fR در رابطه با فراخوانی \fB\-O2\fR بر روی برنامه‌هایی که از دستورهای پرش محاسبه‌شده (computed gotos) استفاده می‌کنند، توجه داشته باشید. .IP \fB\-O3\fR 4 .IX Item "-O3" بهینه‌سازی باز هم بیشتر. گزینه \fB\-O3\fR تمام بهینه‌سازی‌های مشخص‌شده توسط \fB\-O2\fR را اعمال کرده و همچنین پرچم‌های بهینه‌سازی زیر را روشن می‌کند: .Sp \&\fB\-fgcse\-after\-reload \&\-fipa\-cp\-clone \&\-floop\-interchange \&\-floop\-unroll\-and\-jam \&\-fpeel\-loops \&\-fpredictive\-commoning \&\-fsplit\-loops \&\-fsplit\-paths \&\-ftree\-loop\-distribution \&\-ftree\-partial\-pre \&\-funswitch\-loops \&\-fvect\-cost\-model=dynamic \&\-fversion\-loops\-for\-strides\fR .IP \fB\-O0\fR 4 .IX Item "-O0" کاهش زمان کامپایل و حصول اطمینان از ارائه نتایج مورد انتظار در هنگام اشکال‌زدایی. این حالت پیش‌فرض است. .Sp در سطح \fB\-O0\fR، کامپایلر GCC بیشتر مراحل بهینه‌سازی را کاملاً غیرفعال می‌کند؛ این مراحل حتی در صورتی که صراحتاً در خط فرمان فعال شوند یا خروجی دستور \fB\-Q \-\-help=optimizers\fR آن‌ها را به‌صورت پیش‌فرض فعال نشان دهد، اجرا نخواهند شد. بسیاری از بهینه‌سازی‌های انجام‌شده توسط GCC به تحلیل کد یا مراحل استانداردسازی (canonicalization) وابسته هستند که توسط \fB\-O\fR فعال می‌شوند، و اجرای مجزای هر مرحله از بهینه‌سازی به‌تنهایی فایده‌ای نخواهد داشت..IP \fB\-Os\fR 4 .IX Item "-Os" بهینه‌سازی برای اندازه. \fB\-Os\fR تمام بهینه‌سازی‌های \fB\-O2\fR را فعال می‌کند، به جز مواردی که غالباً اندازهٔ کد را افزایش می‌دهند: .Sp \&\fB\-falign\-functions \-falign\-jumps \&\-falign\-labels \-falign\-loops \&\-fprefetch\-loop\-arrays \-freorder\-blocks\-algorithm=stc\fR .Sp همچنین \fB\-finline\-functions\fR را فعال می‌کند، کامپایلر را وادار می‌سازد تا به جای سرعت اجرا برای اندازهٔ کد تنظیم شود، و بهینه‌سازی‌های بیشتری را که برای کاهش اندازهٔ کد طراحی شده‌اند انجام می‌دهد. .IP \fB\-Ofast\fR 4 .IX Item "-Ofast" نادیده گرفتن انطباق دقیق با استانداردها. \fB\-Ofast\fR تمام بهینه‌سازی‌های \fB\-O3\fR را فعال می‌کند. همچنین بهینه‌سازی‌هایی را فعال می‌سازد که برای تمام برنامه‌های منطبق بر استاندارد معتبر نیستند. این گزینه \fB\-ffast\-math\fR، \fB\-fallow\-store\-data\-races\fR و گزینهٔ ویژهٔ فرترن \fB\-fstack\-arrays\fR (مگر اینکه \fB\-fmax\-stack\-var\-size\fR مشخص شده باشد)، و \fB\-fno\-protect\-parens\fR را روشن می‌کند. این گزینه \fB\-fsemantic\-interposition\fR را خاموش می‌کند. .IP \fB\-Og\fR 4 .IX Item "-Og" بهینه‌سازی تجربهٔ اشکال‌زدایی. \fB\-Og\fR باید سطح بهینه‌سازی انتخابی برای چرخهٔ استاندارد ویرایش\-کامپایل\-اشکال‌زدایی باشد، که سطح معقولی از بهینه‌سازی را هم‌زمان با حفظ سرعت بالای کامپایل و تجربهٔ اشکال‌زدایی مناسب ارائه می‌دهد. این گزینه نسبت به \fB\-O0\fR انتخاب بهتری برای تولید کد قابل اشکال‌زدایی است زیرا برخی از گذرهای کامپایلر که اطلاعات اشکال‌زدایی را جمع‌آوری می‌کنند در \fB\-O0\fR غیرفعال هستند. .Sp مانند \fB\-O0\fR، گزینهٔ \fB\-Og\fR نیز تعدادی از گذرهای بهینه‌سازی را به‌طور کامل غیرفعال می‌کند تا گزینه‌های مجزایی که آن‌ها را کنترل می‌کنند بی‌اثر شوند. در غیر این صورت \fB\-Og\fR تمام پرچم‌های بهینه‌سازی \fB\-O1\fR را به جز مواردی که ممکن است با اشکال‌زدایی تداخل داشته باشند، فعال می‌کند: .Sp \&\fB\-fbranch\-count\-reg \-fdelayed\-branch \&\-fdse \-fif\-conversion \-fif\-conversion2 \&\-finline\-functions\-called\-once \&\-fmove\-loop\-invariants \-fmove\-loop\-stores \-fssa\-phiopt \&\-ftree\-bit\-ccp \-ftree\-dse \-ftree\-pta \-ftree\-sra\fR .IP \fB\-Oz\fR 4 .IX Item "-Oz" بهینه‌سازی تهاجمی برای اندازه به جای سرعت. این کار در صورتی که دستورالعمل‌ها برای کدگذاری به بایت‌های کمتری نیاز داشته باشند، ممکن است تعداد دستورالعمل‌های اجراشده را افزایش دهد. رفتار \fB\-Oz\fR مشابه \fB\-Os\fR است و شامل فعال‌سازی اکثر بهینه‌سازی‌های \fB\-O2\fR می‌شود. .PP اگر از چندین گزینهٔ \fB\-O\fR، همراه با شمارهٔ سطح یا بدون آن استفاده کنید، آخرین گزینه از این نوع مؤثر خواهد بود. .PP گزینه‌هایی به فرم \fB\-f\fR\fIflag\fR پرچم‌های مستقل از ماشین را مشخص می‌کنند. اکثر پرچم‌ها دارای دو حالت مثبت و منفی هستند؛ حالت منفی \fB\-ffoo\fR به‌صورت \fB\-fno\-foo\fR است. در جدول زیر، تنها یکی از حالت‌ها فهرست شده است\-\-\-حالتی که معمولاً از آن استفاده می‌کنید. شما می‌توانید حالت دیگر را با حذف \fBno\-\fR یا اضافه کردن آن بیابید. .PP گزینه‌های زیر بهینه‌سازی‌های خاصی را کنترل می‌کنند. آن‌ها یا توسط گزینه‌های \fB\-O\fR فعال می‌شوند یا با مواردی که فعال شده‌اند ارتباط دارند. می‌توانید در موارد نادری که «تنظیم دقیق» بهینه‌سازی‌های مورد نظر لازم است، از پرچم‌های زیر استفاده کنید. .IP \fB\-fno\-defer\-pop\fR 4 .IX Item "-fno-defer-pop" برای ماشین‌هایی که باید آرگومان‌ها را پس از فراخوانی تابع از پشته بردارند (pop)، همیشه به‌محض بازگشت هر تابع، آرگومان‌ها را فوراً pop می‌کند. در سطوح \fB\-O1\fR و بالاتر، گزینهٔ \fB\-fdefer\-pop\fR پیش‌فرض است؛ این ویژگی به کامپایلر اجازه می‌دهد تا بگذارد آرگومان‌ها برای چندین فراخوانی تابع روی پشته انباشته شوند و سپس همه را یک‌باره pop کند. .IP \fB\-fforward\-propagate\fR 4 .IX Item "-fforward-propagate" یک گذر انتشار رو به جلو (forward propagation) روی RTL انجام می‌دهد. این گذر تلاش می‌کند تا دو دستورالعمل را ترکیب کرده و بررسی کند که آیا نتیجه قابل ساده‌سازی است یا خیر. اگر باز کردن حلقه (loop unrolling) فعال باشد، دو گذر انجام می‌شود و دومی پس از باز کردن حلقه زمان‌بندی می‌گردد. .Sp این گزینه به‌طور پیش‌فرض در سطوح بهینه‌سازی \fB\-O1\fR، \&\fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-favoid\-store\-forwarding\fR 4 .IX Item "-favoid-store-forwarding" .PD 0 .IP \fB\-fno\-avoid\-store\-forwarding\fR 4 .IX Item "-fno-avoid-store-forwarding" .PD بسیاری از CPUها هنگامی که یک بارگذاری (load) تا حدی به ذخیره‌سازی‌های (stores) کوچک‌تر قبلی وابسته باشد، برای چرخه‌های متعددی متوقف (stall) می‌شوند. این گذر تلاش می‌کند تا چنین مواردی را شناسایی کرده و با تغییر ترتیب load و store و سپس تصحیح مقدار بارگذاری‌شده، از این جریمهٔ کارایی جلوگیری نماید. .Sp به‌طور پیش‌فرض غیرفعال است. .IP \fB\-ffp\-contract=\fR\fIstyle\fR 4 .IX Item "-ffp-contract=style" \&\fB\-ffp\-contract=off\fR انقباض و ادغام عبارات ممیز شناور را غیرفعال می‌کند. \&\fB\-ffp\-contract=fast\fR ادغام عبارات ممیز شناور مانند تشکیل عملیات‌های ضرب و جمع ادغام‌شده (fused multiply\-add) را در صورتی که مقصد از آن‌ها پشتیبانی سخت‌افزاری بومی داشته باشد، فعال می‌سازد. \&\fB\-ffp\-contract=on\fR ادغام عبارات ممیز شناور را در صورتی که استاندارد زبان اجازه دهد فعال می‌کند. این ویژگی برای C و ++C پیاده‌سازی شده است، جایی که ادغام را درون یک عبارت فعال می‌کند، اما نه در سراسر دستورهای مختلف. .Sp پیش‌فرض برای زبان C در حالت منطبق بر استاندارد (\fB\-std=c11\fR یا مشابه آن) مقدار \fB\-ffp\-contract=off\fR و در غیر این صورت \fB\-ffp\-contract=fast\fR است. .IP \fB\-fomit\-frame\-pointer\fR 4 .IX Item "-fomit-frame-pointer" اشاره‌گر فریم (frame pointer) را در توابعی که به آن نیازی ندارند حذف می‌کند. این کار از دستورالعمل‌های ذخیره، راه‌اندازی و بازیابی اشاره‌گر فریم جلوگیری می‌کند؛ همچنین در بسیاری از معماری‌های مقصد یک ثبات اضافی را در دسترس قرار می‌دهد. .Sp در برخی از معماری‌های مقصد این پرچم هیچ اثری ندارد زیرا توالی فراخوانی استاندارد همواره از یک اشاره‌گر فریم استفاده می‌کند، بنابراین نمی‌توان آن را حذف کرد. .Sp توجه داشته باشید که \fB\-fno\-omit\-frame\-pointer\fR تضمین نمی‌کند که اشاره‌گر فریم در همهٔ توابع استفاده شود. چندین معماری مقصد همواره اشاره‌گر فریم را در توابع برگ (leaf functions) حذف می‌کنند. .Sp به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-foptimize\-crc\fR 4 .IX Item "-foptimize-crc" حلقه‌های محاسبه‌کنندهٔ CRC (انجام‌دهندهٔ تقسیم طولانی چندجمله‌ای) را شناسایی کرده و آن‌ها را با یک پیاده‌سازی سریع‌تر جایگزین می‌کند. CRCهای ۸، ۱۶، ۳۲ و ۶۴ بیتی با یک چندجمله‌ای ثابت بدون بیت پیشرو ۱، برای هر دو حالت bit\-forward و bit\-reversed شناسایی می‌شوند. اگر معماری مقصد از دستورالعمل CRC پشتیبانی کند و چندجمله‌ای استفاده‌شده در کد منبع با چندجمله‌ای دستورالعمل CRC مطابقت داشته باشد، آن دستورالعمل CRC را تولید می‌کند. در غیر این صورت، اگر مقصد از دستورالعمل carry\-less\-multiplication پشتیبانی کند، CRC را با استفاده از آن تولید می‌نماید؛ در غیر این صورت CRC مبتنی بر جدول تولید می‌کند. .Sp به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است. .IP \fB\-foptimize\-sibling\-calls\fR 4 .IX Item "-foptimize-sibling-calls" فراخوانی‌های هم‌سطح (sibling) و بازگشتی دمی (tail recursive) را بهینه‌سازی می‌کند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-foptimize\-strlen\fR 4 .IX Item "-foptimize-strlen" توابع مختلف رشته‌ای استاندارد C (مانند \f(CW\*(C`strlen\*(C'\fR، \&\f(CW\*(C`strchr\*(C'\fR یا \f(CW\*(C`strcpy\*(C'\fR) و معادل‌های \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR آن‌ها را به گزینه‌های جایگزین سریع‌تر بهینه‌سازی می‌کند. .Sp در سطوح \fB\-O2\fR و \fB\-O3\fR فعال است. .IP \fB\-finline\-stringops[=\fR\fIfn\fR\fB]\fR 4 .IX Item "-finline-stringops[=fn]" عملیات‌های حافظه و رشته (در حال حاضر تنها \f(CW\*(C`memset\*(C'\fR) را به‌صورت درون‌خطی باز می‌کند، حتی زمانی که طول متغیر باشد یا به اندازه‌ای بزرگ باشد که به حلقه نیاز پیدا کند. این گزینه بیش از همه همراه با \fB\-ffreestanding\fR و \fB\-fno\-builtin\fR کاربرد دارد. .Sp در برخی شرایط، این گزینه به کامپایلر امکان می‌دهد کدی تولید کند که از هم‌ترازی‌های مشخص و مضرب‌های طول بهره می‌برد، اما حتی در این حالت نیز ممکن است کارایی کمتری نسبت به پیاده‌سازی‌های بهینه‌شدهٔ زمان اجرا داشته باشد، و اندازهٔ کد را آن‌قدر افزایش دهد که حتی یک پیاده‌سازی با کارایی کمتر اما مشترک، به دلیل استفادهٔ بهتر از حافظه‌های نهان کد (code caches)، سریع‌تر اجرا شود. این گزینه به‌طور پیش‌فرض غیرفعال است. .IP \fB\-fno\-inline\fR 4 .IX Item "-fno-inline" هیچ تابعی را به‌صورت درون‌خطی باز نمی‌کند، مگر توابعی که با مشخصهٔ \f(CW\*(C`always_inline\*(C'\fR علامت‌گذاری شده باشند. این حالت در زمان عدم بهینه‌سازی، پیش‌فرض است. .Sp می‌توان توابع منفرد را با علامت‌گذاری توسط مشخصهٔ \f(CW\*(C`noinline\*(C'\fR از درون‌خطی‌سازی مستثنی کرد. .IP \fB\-finline\-small\-functions\fR 4 .IX Item "-finline-small-functions" توابع را در صورتی که بدنهٔ آن‌ها از کد مورد نیاز برای فراخوانی تابع کوچک‌تر باشد، درون فراخواننده‌های آن‌ها ادغام می‌کند (به طوری که اندازهٔ کلی برنامه کوچک‌تر شود). کامپایلر به‌صورت اکتشافی (heuristic) تصمیم می‌گیرد کدام توابع به اندازهٔ کافی ساده هستند که ارزش ادغام به این روش را داشته باشند. این درون‌خطی‌سازی برای همهٔ توابع اعمال می‌شود، حتی توابعی که inline تعریف نشده‌اند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-findirect\-inlining\fR 4 .IX Item "-findirect-inlining" فراخوانی‌های غیرمستقیمی را نیز که به لطف درون‌خطی‌سازی‌های قبلی مشخص می‌شود در زمان کامپایل شناخته‌شده هستند، درون‌خطی می‌کند. این گزینه تنها زمانی اثرگذار است که خود درون‌خطی‌سازی توسط گزینه‌های \fB\-finline\-functions\fR یا \fB\-finline\-small\-functions\fR روشن شده باشد. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-finline\-functions\fR 4 .IX Item "-finline-functions" تمام توابع را برای درون‌خطی‌سازی در نظر می‌گیرد، حتی اگر inline اعلام نشده باشند. کامپایلر به‌صورت اکتشافی تصمیم می‌گیرد چه توابعی ارزش ادغام به این روش را دارند. .Sp اگر تمام فراخوانی‌ها به یک تابع مشخص ادغام شوند و آن تابع به‌صورت \f(CW\*(C`static\*(C'\fR اعلام شده باشد، در این صورت معمولاً آن تابع دیگر به عنوان یک کد اسمبلی مستقل تولید نمی‌شود. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود..IP \fB\-finline\-functions\-called\-once\fR 4 .IX Item "-finline-functions-called-once" همه توابع \f(CW\*(C`static\*(C'\fR را که تنها یک‌بار فراخوانی شده‌اند، حتی در صورتی که با \f(CW\*(C`inline\*(C'\fR مشخص نشده باشند، برای درون‌نشانی در فراخواننده‌شان در نظر می‌گیرد. اگر فراخوانیِ یک تابع مفروض ادغام (درون‌نشانی) شود، آن تابع به‌طور مستقل به عنوان کد اسمبلی در خروجی تولید نمی‌شود. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود، اما در \fB\-Og\fR فعال نیست. .IP \fB\-fearly\-inlining\fR 4 .IX Item "-fearly-inlining" توابع مشخص‌شده با \f(CW\*(C`always_inline\*(C'\fR و توابعی را که بدنه آن‌ها کوچک‌تر از سربار فراخوانی تابع به نظر می‌رسد، پیش از انجام ابزارگذاری \fB\-fprofile\-generate\fR و گذر اصلی درون‌نشانی، به‌صورت زودهنگام درون‌نشانی می‌کند. انجام این کار فرآیند تحلیل کارایی (profiling) را بسیار کم‌هزینه‌تر کرده و معمولاً سرعت درون‌نشانی را در برنامه‌هایی که زنجیره‌های بزرگی از توابع پوششی (wrapper) تودرتو دارند، افزایش می‌دهد. .Sp به‌طور پیش‌فرض فعال است. .IP \fB\-fipa\-sra\fR 4 .IX Item "-fipa-sra" جایگزینی اسکالر میان‌روال‌ها برای ساختارهای تجمیعی، حذف پارامترهای بلااستفاده و جایگزینی پارامترهای ارجاعی با پارامترهای مقداری را انجام می‌دهد. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-finline\-limit=\fR\fIn\fR 4 .IX Item "-finline-limit=n" به‌طور پیش‌فرض، GCC اندازه توابعی را که امکان درون‌نشانی دارند محدود می‌کند. این پرچم امکان کنترل کلی این محدودیت را فراهم می‌سازد. \fIn\fR حداکثر اندازه توابعی است که می‌توانند بر حسب تعداد شبه‌دستورالعمل‌ها درون‌نشانی شوند. .Sp درون‌نشانی در عمل توسط چندین پارامتر کنترل می‌شود که می‌توان آن‌ها را با استفاده از \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR به‌صورت جداگانه تعیین کرد. گزینه \fB\-finline\-limit=\fR\fIn\fR برخی از این پارامترها را به شرح زیر تنظیم می‌کند: .RS 4 .IP \fBmax\-inline\-insns\-single\fR 4 .IX Item "max-inline-insns-single" روی \fIn\fR/2 تنظیم می‌شود. .IP \fBmax\-inline\-insns\-auto\fR 4 .IX Item "max-inline-insns-auto" روی \fIn\fR/2 تنظیم می‌شود. .RE .RS 4 .Sp برای مستندات مربوط به پارامترهای منفرد کنترل‌کننده درون‌نشانی و مقادیر پیش‌فرض آن‌ها، به بخش‌های بعدی مراجعه کنید. .Sp \&\fIنکته:\fR ممکن است هیچ مقداری برای \fB\-finline\-limit\fR وجود نداشته باشد که دقیقاً معادل رفتار پیش‌فرض باشد. .Sp \&\fIنکته:\fR شبه‌دستورالعمل در این زمینه خاص، نشان‌دهنده یک معیار انتزاعی از اندازه تابع است؛ به هیچ عنوان نشان‌دهنده شمار دستورالعمل‌های اسمبلی واقعی نبوده و به همین ترتیب ممکن است معنای دقیق آن از یک نسخه به نسخه دیگر تغییر کند. .RE .IP \fB\-fno\-keep\-inline\-dllexport\fR 4 .IX Item "-fno-keep-inline-dllexport" این یک نگارش ریزدانه‌تر از \fB\-fkeep\-inline\-functions\fR است که فقط برای توابعی که با استفاده از صفت یا declspec از نوع \f(CW\*(C`dllexport\*(C'\fR اعلان شده‌اند اعمال می‌شود. .IP \fB\-fkeep\-inline\-functions\fR 4 .IX Item "-fkeep-inline-functions" در C، توابع \f(CW\*(C`static\*(C'\fR اعلان‌شده با \f(CW\*(C`inline\*(C'\fR را حتی اگر در تمامی فراخواننده‌هایشان درون‌نشانی شده باشند، در فایل شیء (object file) صادر می‌کند. این سوئیچ بر توابعی که از افزونه \f(CW\*(C`extern inline\*(C'\fR در GNU C90 استفاده می‌کنند تأثیری ندارد. در C++، تمام توابع درون‌نشانی‌شده را بدون استثنا در فایل شیء صادر می‌کند. .IP \fB\-fkeep\-static\-functions\fR 4 .IX Item "-fkeep-static-functions" توابع \f(CW\*(C`static\*(C'\fR را در فایل شیء صادر می‌کند، حتی اگر آن تابع هرگز استفاده نشده باشد. .IP \fB\-fkeep\-static\-consts\fR 4 .IX Item "-fkeep-static-consts" متغیرهای اعلان‌شده به‌صورت \f(CW\*(C`static const\*(C'\fR را در زمانی که بهینه‌سازی فعال نیست صادر می‌کند، حتی اگر به آن متغیرها ارجاع داده نشده باشد. .Sp ‏GCC این گزینه را به‌طور پیش‌فرض فعال می‌کند. چنانچه مایلید بدون در نظر گرفتن وضعیت بهینه‌سازی، کامپایلر را ملزم به بررسی ارجاع به متغیر کنید، از گزینه \fB\-fno\-keep\-static\-consts\fR استفاده نمایید. .IP \fB\-fmerge\-constants\fR 4 .IX Item "-fmerge-constants" تلاش می‌کند ثوابت یکسان (ثوابت رشته‌ای و ثوابت ممیز شناور) را در سراسر واحدهای کامپایل ادغام کند. .Sp اگر اسمبلر و پیونددهنده از این قابلیت پشتیبانی کنند، این گزینه در کامپایل بهینه‌سازی‌شده پیش‌فرض است. برای جلوگیری از این رفتار از \fB\-fno\-merge\-constants\fR استفاده کنید. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-fmerge\-all\-constants\fR 4 .IX Item "-fmerge-all-constants" تلاش می‌کند ثوابت یکسان و متغیرهای یکسان را ادغام کند. .Sp این گزینه متضمن \fB\-fmerge\-constants\fR است. علاوه بر موارد \fB\-fmerge\-constants\fR، این گزینه حتی مواردی چون آرایه‌های مقداردهی‌شده با مقادیر ثابت یا متغیرهای ثابت مقداردهی‌شده از انواع صحیح یا ممیز شناور را نیز در نظر می‌گیرد. زبان‌هایی مانند C یا C++ الزام می‌کنند که هر متغیر، از جمله نمونه‌های چندگانه یک متغیر در فراخوانی‌های بازگشتی، موقعیت‌های حافظه مجزایی داشته باشند؛ بنابراین استفاده از این گزینه منجر به رفتاری ناسازگار با استاندارد می‌شود. .IP \fB\-fmodulo\-sched\fR 4 .IX Item "-fmodulo-sched" زمان‌بندی پیمانه‌ای نوسانی (swing modulo scheduling) را درست پیش از نخستین گذر زمان‌بندی اجرا می‌کند. این گذر درونی‌ترین حلقه‌ها را بررسی کرده و با همپوشانی تکرارهای گوناگون، دستورالعمل‌های آن‌ها را بازآرایی می‌کند. .IP \fB\-fmodulo\-sched\-allow\-regmoves\fR 4 .IX Item "-fmodulo-sched-allow-regmoves" زمان‌بندی پیمانه‌ای تهاجمی‌تری را بر پایه SMS با مجاز شمردن انتقال‌های ثبات اجرا می‌کند. با فعال کردن این پرچم، برخی یال‌های پادوابستگی حذف می‌شوند که این امر به تولید دستورات انتقال ثبات بر مبنای تحلیل طول عمر متغیرها منجر می‌گردد. این گزینه تنها در صورت فعال بودن \fB\-fmodulo\-sched\fR اثربخش خواهد بود. .IP \fB\-fno\-branch\-count\-reg\fR 4 .IX Item "-fno-branch-count-reg" گذر بهینه‌سازی بررسی‌کننده فرصت‌های استفاده از دستورالعمل‌های «کاهش و پرش» روی یک ثبات شمارنده را به جای توالی دستوراتی که یک ثبات را کاهش داده، با صفر مقایسه کرده و سپس بر مبنای نتیجه پرش می‌کنند، غیرفعال می‌سازد. این گزینه تنها در معماری‌هایی مفهوم دارد که از چنین دستوراتی پشتیبانی می‌کنند، از جمله x86، PowerPC، IA\-64 و S/390. توجه داشته باشید که گزینه \fB\-fno\-branch\-count\-reg\fR دستورالعمل‌های کاهش و پرشی را که توسط دیگر گذرهای بهینه‌سازی به جریان دستورات تولیدشده افزوده شده‌اند، حذف نمی‌کند. .Sp پیش‌فرض در سطوح \fB\-O1\fR و بالاتر، به‌جز \fB\-Og\fR، فعال بودن \fB\-fbranch\-count\-reg\fR است. .IP \fB\-fno\-function\-cse\fR 4 .IX Item "-fno-function-cse" نشانی توابع را در ثبات‌ها قرار نمی‌دهد؛ به این ترتیب هر دستوری که یک تابع ثابت را فراخوانی می‌کند، صراحتاً نشانی تابع را در بر خواهد داشت. .Sp این گزینه منجر به کدی با کارایی کمتر می‌شود، اما برخی ترفندهای نامتعارف که خروجی اسمبلی را دستکاری می‌کنند ممکن است با بهینه‌سازی‌های اعمال‌شده در غیاب این گزینه دچار ناسازگاری شوند. .Sp پیش‌فرض \fB\-ffunction\-cse\fR است. .IP \fB\-fno\-zero\-initialized\-in\-bss\fR 4 .IX Item "-fno-zero-initialized-in-bss" چنانچه معماری مقصد از بخش BSS پشتیبانی کند، GCC به‌طور پیش‌فرض متغیرهایی را که با صفر مقداردهی اولیه شده‌اند درون BSS قرار می‌دهد. این کار می‌تواند حجم فایل نهایی را کاهش دهد. .Sp این گزینه رفتار فوق را غیرفعال می‌کند، چرا که برخی برنامه‌ها صراحتاً به قرار گرفتن متغیرها در بخش داده وابسته هستند؛ مثلاً برای اینکه برنامه اجرایی بتواند ابتدای آن بخش را پیدا کند و/یا مفروضاتی بر آن اساس در نظر بگیرد. .Sp پیش‌فرض، به‌جز در زبان Ada، گزینه \fB\-fzero\-initialized\-in\-bss\fR است. .IP \fB\-fthread\-jumps\fR 4 .IX Item "-fthread-jumps" بهینه‌سازی‌هایی را انجام می‌دهد که بررسی می‌کنند آیا یک پرش به مکانی منشعب می‌شود که مقایسه دیگری تحت پوشش مقایسه اول در آن یافت شود یا خیر. در صورت برقراری این شرط، بسته به اینکه وضعیت شرط درست یا نادرست تشخیص داده شود، شاخه اول به مقصد شاخه دوم یا نقطه‌ای بلافاصله پس از آن بازهدایت می‌شود. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-fsplit\-wide\-types\fR 4 .IX Item "-fsplit-wide-types" هنگام استفاده از نوع داده‌ای که چندین ثبات را اشغال می‌کند، مانند \f(CW\*(C`long long\*(C'\fR در سامانه‌های ۳۲ بیتی، ثبات‌ها را تفکیک کرده و آن‌ها را به‌طور مستقل تخصیص می‌دهد. این کار معمولاً کدی با کارایی بهتر برای آن نوع‌ها تولید می‌کند، اما ممکن است عیب‌یابی را دشوارتر سازد. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-fsplit\-wide\-types\-early\fR 4 .IX Item "-fsplit-wide-types-early" نوع‌های عریض را در مراحل اولیه کامپایل به‌طور کامل تفکیک می‌کند، نه در مراحل بسیار پایانی. این گزینه هیچ اثری ندارد مگر آنکه \fB\-fsplit\-wide\-types\fR فعال باشد. .Sp این گزینه در برخی مقاصد به‌طور پیش‌فرض فعال است. .IP \fB\-fcse\-follow\-jumps\fR 4 .IX Item "-fcse-follow-jumps" در حذف زیرعبارت‌های مشترک (CSE)، دستورات پرش را در شرایطی که به مقصد پرش از هیچ مسیر دیگری دسترسی وجود نداشته باشد، دنبال و بررسی می‌کند. برای نمونه، هنگامی که CSE با یک گزاره \f(CW\*(C`if\*(C'\fR دارای بند \f(CW\*(C`else\*(C'\fR روبرو می‌شود، در صورتی که شرط آزمایش‌شده نادرست باشد، پرش را دنبال می‌کند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود..IP \fB\-fcse\-skip\-blocks\fR 4 .IX Item "-fcse-skip-blocks" این گزینه مشابه \fB\-fcse\-follow\-jumps\fR است، اما باعث می‌شود CSE پرش‌هایی را که به‌طور شرطی از روی بلوک‌ها رد می‌شوند دنبال کند. هنگامی که CSE با یک عبارت سادهٔ \f(CW\*(C`if\*(C'\fR بدون بند else مواجه می‌شود، \fB\-fcse\-skip\-blocks\fR باعث می‌شود CSE پرش اطراف بدنهٔ \f(CW\*(C`if\*(C'\fR را دنبال کند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-frerun\-cse\-after\-loop\fR 4 .IX Item "-frerun-cse-after-loop" اجرای مجدد حذف زیرعبارت‌های مشترک (CSE) پس از انجام بهینه‌سازی‌های حلقه. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-fgcse\fR 4 .IX Item "-fgcse" انجام یک مرحلهٔ سراسریِ حذف زیرعبارت‌های مشترک (GCSE). این مرحله همچنین انتشار سراسری مقادیر ثابت و رونوشت (copy and constant propagation) را انجام می‌دهد. .Sp \&\fIنکته:\fR هنگام کامپایل برنامه‌ای که از computed gotos (یک افزونهٔ GCC) استفاده می‌کند، ممکن است با غیرفعال کردن مرحلهٔ سراسری حذف زیرعبارت‌های مشترک از طریق افزودن \fB\-fno\-gcse\fR به خط فرمان، به کارایی زمان اجرای بهتری دست یابید. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-fgcse\-lm\fR 4 .IX Item "-fgcse-lm" هنگامی که \fB\-fgcse\-lm\fR فعال است، حذف سراسری زیرعبارت‌های مشترک تلاش می‌کند بارگذاری‌هایی (loads) را که فقط توسط ذخیره‌سازی‌ها (stores) درون خود از بین می‌روند، جابه‌جا کند. این امر امکان می‌دهد حلقه‌ای حاوی توالی بارگذاری/ذخیره‌سازی به یک بارگذاری بیرون از حلقه و یک رونوشت/ذخیره‌سازی درون حلقه تبدیل شود. .Sp به‌طور پیش‌فرض زمانی که \fB\-fgcse\fR فعال باشد، فعال است. .IP \fB\-fgcse\-sm\fR 4 .IX Item "-fgcse-sm" هنگامی که \fB\-fgcse\-sm\fR فعال باشد، مرحله‌ای برای انتقال ذخیره‌سازی (store motion) پس از حذف سراسری زیرعبارت‌های مشترک اجرا می‌شود. این مرحله تلاش می‌کند ذخیره‌سازی‌ها را به خارج از حلقه‌ها منتقل کند. هنگامی که در کنار \fB\-fgcse\-lm\fR استفاده شود، حلقه‌های حاوی توالی بارگذاری/ذخیره‌سازی می‌توانند به یک بارگذاری پیش از حلقه و یک ذخیره‌سازی پس از حلقه تبدیل شوند. .Sp در هیچ سطح بهینه‌سازی فعال نیست. .IP \fB\-fgcse\-las\fR 4 .IX Item "-fgcse-las" هنگامی که \fB\-fgcse\-las\fR فعال است، مرحلهٔ حذف سراسری زیرعبارت‌های مشترک، بارگذاری‌های زائدی را که پس از ذخیره‌سازی در همان مکان حافظه رخ می‌دهند (چه زائد جزئی و چه کامل) حذف می‌کند. .Sp در هیچ سطح بهینه‌سازی فعال نیست. .IP \fB\-fgcse\-after\-reload\fR 4 .IX Item "-fgcse-after-reload" هنگامی که \fB\-fgcse\-after\-reload\fR فعال است، یک مرحلهٔ حذف بارگذاری‌های زائد پس از reload انجام می‌شود. هدف این مرحله پاک‌سازی بیرون‌ریزی‌های (spilling) زائد به حافظه است. .Sp توسط \fB\-O3\fR، \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-faggressive\-loop\-optimizations\fR 4 .IX Item "-faggressive-loop-optimizations" این گزینه به بهینه‌ساز حلقه اعلام می‌کند که از محدودیت‌های زبان برای استخراج کران‌های تعداد تکرارهای یک حلقه استفاده کند. این فرض می‌کند که کد حلقه با ایجاد مواردی چون سرریز عدد صحیح علامت‌دار یا دسترسی به آرایه خارج از محدوده، رفتار تعریف‌نشده (undefined behavior) ایجاد نمی‌کند. کران‌های تعداد تکرار یک حلقه برای هدایت باز کردن حلقه (loop unrolling)، پوسته‌کنی حلقه (peeling) و بهینه‌سازی‌های آزمون خروج از حلقه استفاده می‌شوند. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-funconstrained\-commons\fR 4 .IX Item "-funconstrained-commons" این گزینه به کامپایلر اعلام می‌کند متغیرهای تعریف‌شده در بلوک‌های اشتراکی (مانند common blocks در فرترن) ممکن است بعداً با آرایه‌های طولانی‌تر در انتها جایگزین شوند. این امر از برخی بهینه‌سازی‌ها که وابسته به دانستن کران‌های آرایه هستند جلوگیری می‌کند. .IP \fB\-fcrossjumping\fR 4 .IX Item "-fcrossjumping" انجام تبدیل پرش متقاطع (cross\-jumping). این تبدیل کدهای یکسان را یکپارچه کرده و حجم کد را کاهش می‌دهد. ممکن است کارایی کد نهایی بهتر از حالت بدون پرش متقاطع باشد یا نباشد. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-fauto\-inc\-dec\fR 4 .IX Item "-fauto-inc-dec" ترکیب افزایش یا کاهش آدرس‌ها با دسترسی‌های حافظه. این مرحله در معماری‌هایی که دستورالعملی برای پشتیبانی از این قابلیت ندارند همیشه نادیده گرفته می‌شود. به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر روی معماری‌هایی که از آن پشتیبانی می‌کنند فعال است. .IP \fB\-fdce\fR 4 .IX Item "-fdce" انجام حذف کدهای مرده (DCE) روی RTL. به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fdse\fR 4 .IX Item "-fdse" انجام حذف ذخیره‌سازی‌های مرده (DSE) روی RTL. به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fif\-conversion\fR 4 .IX Item "-fif-conversion" تلاش برای تبدیل پرش‌های شرطی به معادل‌های بدون انشعاب (branch\-less). این شامل استفاده از دستورالعمل‌های انتقال شرطی (conditional moves)، min، max، تنظیم پرچم‌ها و abs، و برخی شگردهای قابل انجام با محاسبات حسابی استاندارد است. استفاده از اجرای شرطی روی تراشه‌هایی که از آن پشتیبانی می‌کنند توسط \fB\-fif\-conversion2\fR کنترل می‌شود. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است، اما با \fB\-Og\fR فعال نمی‌شود. .IP \fB\-fif\-conversion2\fR 4 .IX Item "-fif-conversion2" استفاده از اجرای شرطی (در صورت در دسترس بودن) برای تبدیل پرش‌های شرطی به معادل‌های بدون انشعاب. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است، اما با \fB\-Og\fR فعال نمی‌شود. .IP \fB\-fdeclone\-ctor\-dtor\fR 4 .IX Item "-fdeclone-ctor-dtor" مشخصات ABI زبان C++ نیازمند چندین نقطهٔ ورود برای سازنده‌ها و مخرب‌ها است: یکی برای زیرشیء پایه، یکی برای شیء کامل، و یکی برای مخرب مجازی که پس از آن operator delete را فراخوانی می‌کند. برای یک سلسله‌مراتب دارای پایه‌های مجازی، انواع پایه و کامل همزاد یکدیگرند، که به معنای وجود دو نسخه از تابع است. با این گزینه، انواع پایه و کامل به thunkهایی تبدیل می‌شوند که یک پیاده‌سازی مشترک را فراخوانی می‌کنند. .Sp توسط \fB\-Os\fR فعال می‌شود. .IP \fB\-fdelete\-null\-pointer\-checks\fR 4 .IX Item "-fdelete-null-pointer-checks" فرض می‌کند برنامه‌ها نمی‌توانند با اطمینان اشاره‌گرهای تهی (null) را ارجاع‌زدایی کنند، و هیچ کد یا عنصر داده‌ای در آدرس صفر قرار ندارد. این گزینه بهینه‌سازی‌های سادهٔ ادغام مقادیر ثابت (constant folding) را در تمام سطوح بهینه‌سازی فعال می‌کند. علاوه بر این، سایر مراحل بهینه‌سازی در GCC از این پرچم برای کنترل تحلیل‌های سراسری جریان داده استفاده می‌کنند که بررسی‌های بیهوده برای اشاره‌گرهای تهی را حذف می‌کنند؛ این مراحل فرض می‌کنند دسترسی حافظه به آدرس صفر همیشه منجر به یک تله (trap) می‌شود، به‌طوری که اگر اشاره‌گری پس از ارجاع‌زدایی شدن بررسی شود، نمی‌تواند تهی باشد. .Sp با این حال توجه داشته باشید که در برخی محیط‌ها این فرض درست نیست. برای برنامه‌هایی که به چنین رفتاری وابسته‌اند، از \fB\-fno\-delete\-null\-pointer\-checks\fR برای غیرفعال کردن این بهینه‌سازی استفاده کنید. .Sp این گزینه به‌طور پیش‌فرض در اکثر معماری‌های مقصد فعال است. روی AVR و MSP430، این گزینه کاملاً غیرفعال است. .Sp مراحلی که از اطلاعات جریان داده استفاده می‌کنند، به‌طور مستقل در سطوح بهینه‌سازی مختلف فعال می‌شوند. .IP \fB\-fdevirtualize\fR 4 .IX Item "-fdevirtualize" تلاش برای تبدیل فراخوانی توابع مجازی به فراخوانی‌های مستقیم. این کار هم در درون یک رویه و هم بین رویه‌ها (interprocedurally) به‌عنوان بخشی از جای‌گذاری غیرمستقیم (\fB\-findirect\-inlining\fR) و انتشار مقادیر ثابت بین‌رویه‌ای (\fB\-fipa\-cp\fR) انجام می‌شود. در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-fdevirtualize\-speculatively\fR 4 .IX Item "-fdevirtualize-speculatively" تلاش برای تبدیل فراخوانی توابع مجازی به فراخوانی‌های مستقیم حدسی (speculative). بر اساس تحلیل گراف وراثت نوع‌ها، برای یک فراخوانی مشخص مجموعه‌ای از مقصدهای احتمالی تعیین می‌شود. اگر این مجموعه کوچک باشد، ترجیحاً با اندازهٔ ۱، فراخوانی به یک عبارت شرطی تبدیل می‌شود که بین فراخوانی مستقیم و غیرمستقیم تصمیم‌گیری می‌کند. فراخوانی‌های حدسی بهینه‌سازی‌های بیشتری مانند درون‌خطی‌سازی (inlining) را امکان‌پذیر می‌سازند. چنانچه پس از بهینه‌سازی‌های بیشتر بی‌فایده به نظر برسند، دوباره به شکل اولیه برگردانده می‌شوند. .IP \fB\-fdevirtualize\-at\-ltrans\fR 4 .IX Item "-fdevirtualize-at-ltrans" ارسال جریان داده‌های اضافی مورد نیاز برای غیرمجازی‌سازی تهاجمی هنگام اجرای بهینه‌ساز زمان پیوند در حالت تبدیل محلی (local transformation mode). این گزینه غیرمجازی‌سازی‌های بیشتری را امکان‌پذیر می‌کند اما اندازهٔ داده‌های ارسال‌شده را به‌طور چشمگیری افزایش می‌دهد. به همین دلیل به‌طور پیش‌فرض غیرفعال است. .IP \fB\-fexpensive\-optimizations\fR 4 .IX Item "-fexpensive-optimizations" انجام تعدادی از بهینه‌سازی‌های جزئی که از نظر محاسباتی نسبتاً هزینه‌بر هستند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-free\fR 4 .IX Item "-free" تلاش برای حذف دستورالعمل‌های گسترش (extension) زائد. این قابلیت به‌ویژه برای معماری x86\-64 مفید است که پس از نوشتن در نیمهٔ ۳۲ بیتی پایینی ثبات‌های ۶۴ بیتی، به‌طور ضمنی گسترش با صفر (zero\-extend) انجام می‌دهد. .Sp برای معماری‌های Alpha، AArch64، LoongArch، PowerPC، RISC\-V، SPARC، h83000 و x86 در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fno\-lifetime\-dse\fR 4 .IX Item "-fno-lifetime-dse" در C++ مقدار یک شیء تنها تحت تأثیر تغییراتی است که درون دورهٔ حیات آن رخ می‌دهد: هنگامی که سازنده آغاز می‌شود، شیء دارای مقداری نامعین است و هرگونه تغییر در طول حیات شیء، با تخریب آن مرده (بی‌اثر) محسوب می‌شود. به‌طور معمول حذف ذخیره‌سازی‌های مرده (DSE) از این ویژگی بهره می‌برد؛ اگر کد شما به ماندگاری مقدار حافظهٔ شیء فراتر از طول حیات آن متکی است، می‌توانید از این پرچم برای غیرفعال کردن این بهینه‌سازی استفاده کنید. برای حفظ ذخیره‌سازی‌های قبل از شروع سازنده (برای مثال اگر operator new شما حافظهٔ شیء را پاک‌سازی می‌کند) اما همچنان مرده تلقی کردن شیء پس از مخرب، می‌توانید از \fB\-flifetime\-dse=1\fR استفاده کنید. رفتار پیش‌فرض را می‌توان به‌طور صریح با \fB\-flifetime\-dse=2\fR مشخص کرد. پرچم \fB\-flifetime\-dse=0\fR معادل \fB\-fno\-lifetime\-dse\fR است..IP \fB\-flive\-range\-shrinkage\fR 4 .IX Item "-flive-range-shrinkage" تلاش برای کاهش فشار ثبات از طریق کوچک‌سازی دامنه حیات ثبات (live range shrinkage). این گزینه برای پردازنده‌های سریع با مجموعه ثبات‌های کوچک یا متوسط مفید است. .IP \fB\-fira\-algorithm=\fR\fIalgorithm\fR 4 .IX Item "-fira-algorithm=algorithm" استفاده از الگوریتم رنگ‌آمیزی مشخص‌شده برای تخصیص‌دهنده یکپارچه ثبات (IRA). آرگومان \fIalgorithm\fR می‌تواند \fBpriority\fR باشد که رنگ‌آمیزی اولویتی Chow را تعیین می‌کند، یا \fBCB\fR باشد که رنگ‌آمیزی Chaitin\-Briggs را مشخص می‌سازد. رنگ‌آمیزی Chaitin\-Briggs برای همه معماری‌ها پیاده‌سازی نشده است، اما برای اهدافی که از آن پشتیبانی می‌کنند پیش‌فرض است، زیرا کد بهتری تولید می‌کند. .IP \fB\-fira\-region=\fR\fIregion\fR 4 .IX Item "-fira-region=region" استفاده از ناحیه‌های مشخص‌شده برای تخصیص‌دهنده یکپارچه ثبات. آرگومان \&\fIregion\fR باید یکی از موارد زیر باشد: .RS 4 .IP \fBall\fR 4 .IX Item "all" استفاده از تمام حلقه‌ها به عنوان ناحیه‌های تخصیص ثبات. این گزینه می‌تواند بهترین نتایج را برای ماشین‌هایی با مجموعه ثبات‌های کوچک یا نامنظم ارائه دهد. .IP \fBmixed\fR 4 .IX Item "mixed" استفاده از تمام حلقه‌ها به جز حلقه‌هایی با فشار ثبات کم به عنوان ناحیه‌ها. این مقدار معمولاً در اکثر موارد و برای بیشتر معماری‌ها بهترین نتایج را ارائه می‌دهد و هنگام کامپایل با بهینه‌سازی برای سرعت (\fB\-O\fR، \fB\-O2\fR و...) به طور پیش‌فرض فعال است. .IP \fBone\fR 4 .IX Item "one" استفاده از تمام توابع به عنوان یک ناحیه واحد. این گزینه معمولاً به کوچک‌ترین اندازه کد منجر می‌شود و به طور پیش‌فرض برای \&\fB\-Os\fR یا \fB\-O0\fR فعال است. .RE .RS 4 .RE .IP \fB\-fira\-hoist\-pressure\fR 4 .IX Item "-fira-hoist-pressure" استفاده از IRA برای ارزیابی فشار ثبات در گذر بالابردن کد (code hoisting pass) جهت تصمیم‌گیری برای بالا بردن عبارات. این گزینه معمولاً منجر به کد کوچک‌تری می‌شود، اما می‌تواند سرعت کامپایلر را کاهش دهد. .Sp این گزینه در سطح \fB\-Os\fR برای همه اهداف فعال است. .IP \fB\-fira\-loop\-pressure\fR 4 .IX Item "-fira-loop-pressure" استفاده از IRA برای ارزیابی فشار ثبات در حلقه‌ها جهت تصمیم‌گیری در مورد انتقال عبارات نامتغیر حلقه (loop invariants). این گزینه معمولاً به تولید کدی سریع‌تر و کوچک‌تر در ماشین‌هایی با فایل‌های ثبات بزرگ (بزرگ‌تر یا مساوی ۳۲ ثبات) منجر می‌شود، اما می‌تواند سرعت کامپایلر را کاهش دهد. .Sp این گزینه در سطح \fB\-O3\fR برای برخی اهداف فعال است. .IP \fB\-fno\-ira\-share\-save\-slots\fR 4 .IX Item "-fno-ira-share-save-slots" غیرفعال کردن اشتراک‌گذاری شکاف‌های پشته که برای ذخیره ثبات‌های سخت‌افزاری call\-used زنده در طول یک فراخوانی استفاده می‌شوند. هر ثبات سخت‌افزاری یک شکاف پشته جداگانه دریافت می‌کند و در نتیجه فریم‌های پشته توابع بزرگ‌تر می‌شوند. .IP \fB\-fno\-ira\-share\-spill\-slots\fR 4 .IX Item "-fno-ira-share-spill-slots" غیرفعال کردن اشتراک‌گذاری شکاف‌های پشته تخصیص‌یافته به شبه‌ثبات‌ها (pseudo\-registers). هر شبه‌ثباتی که ثبات سخت‌افزاری دریافت نکند، یک شکاف پشته جداگانه می‌گیرد و در نتیجه فریم‌های پشته توابع بزرگ‌تر می‌شوند. .IP \fB\-flra\-remat\fR 4 .IX Item "-flra-remat" فعال کردن بازتولید حساس به CFG در LRA. به‌جای بارگذاری مقادیر شبه‌ثبات‌های سرریز شده (spilled)، LRA در صورت سودمند بودن تلاش می‌کند تا مقادیر را دوباره بازتولید (محاسبه مجدد) کند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fdelayed\-branch\fR 4 .IX Item "-fdelayed-branch" در صورت پشتیبانی در ماشین هدف، تلاش برای بازآرایی دستورالعمل‌ها جهت بهره‌برداری از شکاف‌های دستورالعمل موجود پس از دستورالعمل‌های پرش با تاخیر (delayed branch). .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است، اما در \fB\-Og\fR فعال نیست. .IP \fB\-fschedule\-insns\fR 4 .IX Item "-fschedule-insns" در صورت پشتیبانی در ماشین هدف، تلاش برای بازآرایی دستورالعمل‌ها به منظور حذف توقف‌های اجرایی ناشی از در دسترس نبودن داده‌های مورد نیاز. این به ماشین‌هایی که دستورالعمل‌های بارگذاری حافظه یا ممیز شناور کُندی دارند با صدور سایر دستورالعمل‌ها تا زمان آماده شدن نتیجه بارگذاری یا دستورالعمل ممیز شناور کمک می‌کند. .Sp به‌طور سنتی در سطوح بهینه‌سازی \fB\-O2\fR و \fB\-O3\fR فعال است. با این حال، بسیاری از اهداف این رفتار را لغو می‌کنند. برای مثال، در x86 در تمام سطوح غیرفعال است، در حالی که در AArch64 تنها در \fB\-O3\fR فعال است. .IP \fB\-fschedule\-insns2\fR 4 .IX Item "-fschedule-insns2" مشابه با \fB\-fschedule\-insns\fR، اما درخواست یک گذر اضافی برای زمان‌بندی دستورالعمل‌ها پس از انجام تخصیص ثبات را می‌دهد. این گزینه به‌ویژه در ماشین‌هایی با تعداد نسبتاً کمی ثبات و در شرایطی که دستورالعمل‌های بارگذاری حافظه بیش از یک چرخه زمان می‌برند، مفید است. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fno\-sched\-interblock\fR 4 .IX Item "-fno-sched-interblock" غیرفعال کردن زمان‌بندی دستورالعمل‌ها در میان بلوک‌های پایه (basic blocks)، که معمولاً هنگام زمان‌بندی پیش از تخصیص ثبات (یعنی با \fB\-fschedule\-insns\fR یا در سطح \fB\-O2\fR یا بالاتر) فعال است. .IP \fB\-fno\-sched\-spec\fR 4 .IX Item "-fno-sched-spec" غیرفعال کردن جابه‌جایی گمانه‌زنانه (speculative motion) دستورالعمل‌های غیربارگذاری، که معمولاً هنگام زمان‌بندی پیش از تخصیص ثبات (یعنی با \fB\-fschedule\-insns\fR یا در سطح \fB\-O2\fR یا بالاتر) فعال است. .IP \fB\-fsched\-pressure\fR 4 .IX Item "-fsched-pressure" فعال کردن زمان‌بندی دستورالعمل‌ها با در نظر گرفتن فشار ثبات قبل از تخصیص ثبات. این گزینه تنها زمانی کاربرد دارد که زمان‌بندی قبل از تخصیص ثبات فعال باشد، یعنی با \fB\-fschedule\-insns\fR یا در \&\fB\-O2\fR یا بالاتر. استفاده از این گزینه می‌تواند با جلوگیری از افزایش فشار ثبات به بیش از تعداد ثبات‌های سخت‌افزاری موجود و جلوگیری از سرریزهای بعدی در تخصیص ثبات، کد تولیدشده را بهبود بخشیده و اندازه آن را کاهش دهد. .IP \fB\-fsched\-spec\-load\fR 4 .IX Item "-fsched-spec-load" اجازه دادن به جابه‌جایی گمانه‌زنانه برخی از دستورالعمل‌های بارگذاری. این گزینه تنها زمانی کاربرد دارد که زمان‌بندی پیش از تخصیص ثبات فعال باشد، یعنی با \&\fB\-fschedule\-insns\fR یا در \fB\-O2\fR یا بالاتر. .IP \fB\-fsched\-spec\-load\-dangerous\fR 4 .IX Item "-fsched-spec-load-dangerous" اجازه دادن به جابه‌جایی گمانه‌زنانه دستورالعمل‌های بارگذاری بیشتر. این گزینه تنها زمانی کاربرد دارد که زمان‌بندی پیش از تخصیص ثبات فعال باشد، یعنی با \&\fB\-fschedule\-insns\fR یا در \fB\-O2\fR یا بالاتر. .IP \fB\-fsched\-stalled\-insns\fR 4 .IX Item "-fsched-stalled-insns" .PD 0 .IP \fB\-fsched\-stalled\-insns=\fR\fIn\fR 4 .IX Item "-fsched-stalled-insns=n" .PD تعیین این که چه تعداد دستورالعمل (در صورت وجود) می‌توانند در طول گذر دوم زمان‌بندی، پیش از موعد از صف دستورالعمل‌های متوقف‌شده به فهرست آماده منتقل شوند. \&\fB\-fno\-sched\-stalled\-insns\fR به این معنی است که هیچ دستورالعملی پیش از موعد جابه‌جا نمی‌شود، و \fB\-fsched\-stalled\-insns=0\fR به این معنی است که هیچ محدودیتی برای انتقال زودهنگام دستورالعمل‌های صف‌بندی‌شده وجود ندارد. \&\fB\-fsched\-stalled\-insns\fR بدون مقدار معادل با \&\fB\-fsched\-stalled\-insns=1\fR است. .IP \fB\-fsched\-stalled\-insns\-dep\fR 4 .IX Item "-fsched-stalled-insns-dep" .PD 0 .IP \fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR 4 .IX Item "-fsched-stalled-insns-dep=n" .PD تعیین این که چند گروه دستورالعمل (چرخه) برای بررسی وابستگی به دستورالعمل متوقف‌شده‌ای که نامزد حذف زودهنگام از صف دستورالعمل‌های متوقف‌شده است، ارزیابی شوند. این گزینه فقط در گذر دوم زمان‌بندی و تنها در صورتی که \fB\-fsched\-stalled\-insns\fR استفاده شده باشد مؤثر است. \&\fB\-fno\-sched\-stalled\-insns\-dep\fR معادل با \&\fB\-fsched\-stalled\-insns\-dep=0\fR است. \&\fB\-fsched\-stalled\-insns\-dep\fR بدون مقدار معادل با \&\fB\-fsched\-stalled\-insns\-dep=1\fR است. .IP \fB\-fsched2\-use\-superblocks\fR 4 .IX Item "-fsched2-use-superblocks" هنگام زمان‌بندی پس از تخصیص ثبات، از زمان‌بندی سوپربلوک (superblock) استفاده می‌کند. این کار جابه‌جایی در میان مرزهای بلوک پایه را مجاز می‌سازد و به زمان‌بندی‌های سریع‌تری منجر می‌شود. این گزینه آزمایشی است، زیرا همه توصیف‌های ماشین مورد استفاده در GCC پردازنده را به اندازه کافی دقیق مدل‌سازی نمی‌کنند تا از نتایج نامطمئن الگوریتم جلوگیری شود. .Sp این گزینه تنها زمانی معنادار است که زمان‌بندی پس از تخصیص ثبات فعال باشد، یعنی با \&\fB\-fschedule\-insns2\fR یا در \fB\-O2\fR یا بالاتر. .IP \fB\-fsched\-group\-heuristic\fR 4 .IX Item "-fsched-group-heuristic" فعال‌سازی روش اکتشافی گروهی در زمان‌بند. این روش اکتشافی به دستورالعملی که به یک گروه زمان‌بندی تعلق دارد اولویت می‌دهد. این گزینه به طور پیش‌فرض هنگام فعال بودن زمان‌بندی، یعنی با \fB\-fschedule\-insns\fR یا \fB\-fschedule\-insns2\fR یا در \fB\-O2\fR یا بالاتر، فعال است. .IP \fB\-fsched\-critical\-path\-heuristic\fR 4 .IX Item "-fsched-critical-path-heuristic" فعال‌سازی روش اکتشافی مسیر بحرانی در زمان‌بند. این روش اکتشافی به دستورالعمل‌های روی مسیر بحرانی اولویت می‌دهد. این گزینه به طور پیش‌فرض هنگام فعال بودن زمان‌بندی، یعنی با \fB\-fschedule\-insns\fR یا \fB\-fschedule\-insns2\fR یا در \fB\-O2\fR یا بالاتر، فعال است. .IP \fB\-fsched\-spec\-insn\-heuristic\fR 4 .IX Item "-fsched-spec-insn-heuristic" فعال‌سازی روش اکتشافی دستورالعمل‌های گمانه‌زنانه در زمان‌بند. این روش اکتشافی به دستورالعمل‌های گمانه‌زنانه با ضعف وابستگی بیشتر اولویت می‌دهد. این گزینه به طور پیش‌فرض هنگام فعال بودن زمان‌بندی، یعنی با \fB\-fschedule\-insns\fR یا \fB\-fschedule\-insns2\fR یا در \fB\-O2\fR یا بالاتر، فعال است..IP \fB\-fsched\-rank\-heuristic\fR 4 .IX Item "-fsched-rank-heuristic" روش ابتکاری رتبه (rank heuristic) را در زمان‌بند فعال می‌کند. این روش ابتکاری دستوری را ترجیح می‌دهد که به یک بلوک پایه (basic block) با اندازه یا بسامد بزرگ‌تر تعلق دارد. این گزینه به‌طور پیش‌فرض با فعال بودن زمان‌بندی (یعنی همراه با \fB\-fschedule\-insns\fR یا \fB\-fschedule\-insns2\fR یا در سطح \fB\-O2\fR یا بالاتر) فعال است. .IP \fB\-fsched\-last\-insn\-heuristic\fR 4 .IX Item "-fsched-last-insn-heuristic" روش ابتکاری آخرین دستورالعمل (last\-instruction heuristic) را در زمان‌بند فعال می‌کند. این روش ابتکاری دستوری را ترجیح می‌دهد که وابستگی کمتری به آخرین دستور زمان‌بندی‌شده داشته باشد. این گزینه به‌طور پیش‌فرض با فعال بودن زمان‌بندی (یعنی با \fB\-fschedule\-insns\fR یا \fB\-fschedule\-insns2\fR یا در سطح \fB\-O2\fR یا بالاتر) فعال است. .IP \fB\-fsched\-dep\-count\-heuristic\fR 4 .IX Item "-fsched-dep-count-heuristic" روش ابتکاری تعداد وابستگی‌ها (dependent\-count heuristic) را در زمان‌بند فعال می‌کند. این روش ابتکاری دستوری را ترجیح می‌دهد که دستورالعمل‌های بیشتری به آن وابسته باشند. این گزینه به‌طور پیش‌فرض با فعال بودن زمان‌بندی (یعنی با \fB\-fschedule\-insns\fR یا \fB\-fschedule\-insns2\fR یا در سطح \fB\-O2\fR یا بالاتر) فعال است. .IP \fB\-freschedule\-modulo\-scheduled\-loops\fR 4 .IX Item "-freschedule-modulo-scheduled-loops" زمان‌بندی پیمانه‌ای (modulo scheduling) پیش از زمان‌بندی سنتی انجام می‌شود. اگر حلقه‌ای به‌صورت پیمانه‌ای زمان‌بندی شود، گذرهای بعدی زمان‌بندی ممکن است زمان‌بندی آن را تغییر دهند. از این گزینه برای کنترل این رفتار استفاده کنید. .IP \fB\-fselective\-scheduling\fR 4 .IX Item "-fselective-scheduling" دستورالعمل‌ها را با استفاده از الگوریتم زمان‌بندی انتخابی (selective scheduling) زمان‌بندی می‌کند. زمان‌بندی انتخابی به‌جای اولین گذر زمان‌بند اجرا می‌شود. .IP \fB\-fselective\-scheduling2\fR 4 .IX Item "-fselective-scheduling2" دستورالعمل‌ها را با استفاده از الگوریتم زمان‌بندی انتخابی زمان‌بندی می‌کند. زمان‌بندی انتخابی به‌جای دومین گذر زمان‌بند اجرا می‌شود. .IP \fB\-fsel\-sched\-pipelining\fR 4 .IX Item "-fsel-sched-pipelining" خط‌لوله‌سازی نرم‌افزاری (software pipelining) درونی‌ترین حلقه‌ها را در حین زمان‌بندی انتخابی فعال می‌کند. این گزینه هیچ اثری ندارد مگر اینکه یکی از گزینه‌های \fB\-fselective\-scheduling\fR یا \&\fB\-fselective\-scheduling2\fR فعال باشد. .IP \fB\-fsel\-sched\-pipelining\-outer\-loops\fR 4 .IX Item "-fsel-sched-pipelining-outer-loops" هنگام خط‌لوله‌سازی حلقه‌ها در زمان‌بندی انتخابی، حلقه‌های بیرونی را نیز خط‌لوله‌سازی می‌کند. این گزینه هیچ اثری ندارد مگر اینکه \fB\-fsel\-sched\-pipelining\fR فعال باشد. .IP \fB\-fsemantic\-interposition\fR 4 .IX Item "-fsemantic-interposition" برخی از قالب‌های اشیاء، مانند ELF، اجازهٔ بازتعریف یا مداخله در نمادها (interposing of symbols) را توسط پیونددهندهٔ پویا می‌دهند. این بدان معناست که برای نمادهای صادرشده از DSO، کامپایلر نمی‌تواند انتشار بین‌رویه‌ای (interprocedural propagation)، درون‌خطی‌سازی (inlining) و سایر بهینه‌سازی‌ها را با این فرض انجام دهد که ممکن است تابع یا متغیر مربوطه تغییر کند. هرچند این ویژگی مفید است (به‌عنوان مثال برای بازنویسی توابع تخصیص حافظه توسط پیاده‌سازی عیب‌یابی)، اما از نظر کیفیت کد پرهزینه است. با \fB\-fno\-semantic\-interposition\fR کامپایلر فرض می‌کند در صورتی که مداخله‌ای برای توابع رخ دهد، تابع بازنویسی‌کننده دقیقاً همان معناشناسی (و اثرات جانبی) را خواهد داشت. به همین ترتیب، اگر مداخله برای متغیرها رخ دهد، سازندهٔ (constructor) متغیر یکسان خواهد بود. این پرچم روی توابعی که صراحتاً به‌صورت inline اعلام شده‌اند (که در آن‌ها مداخله هرگز مجاز به تغییر معناشناسی نیست) و برای نمادهایی که صراحتاً به‌صورت weak اعلام شده‌اند، هیچ اثری ندارد. .IP \fB\-fshrink\-wrap\fR 4 .IX Item "-fshrink-wrap" مقدمهٔ توابع (prologues) را فقط قبل از بخش‌هایی از تابع که به آن نیاز دارند درج می‌کند، نه در ابتدای تابع. این پرچم به‌طور پیش‌فرض در سطوح \&\fB\-O\fR و بالاتر فعال است. .IP \fB\-fshrink\-wrap\-separate\fR 4 .IX Item "-fshrink-wrap-separate" بخش‌های مجزای مقدمه (prologue) و مؤخره (epilogue) را به‌طور جداگانه بسته‌بندی انقباضی (shrink\-wrap) می‌کند، به‌گونه‌ای که آن بخش‌ها تنها در صورت نیاز اجرا شوند. این گزینه به‌طور پیش‌فرض فعال است، اما هیچ اثری ندارد مگر اینکه \fB\-fshrink\-wrap\fR نیز فعال باشد و معماری مقصد از آن پشتیبانی کند. .IP \fB\-fcaller\-saves\fR 4 .IX Item "-fcaller-saves" تخصیص مقادیر به ثبات‌هایی (registers) که با فراخوانی توابع بازنویسی می‌شوند (clobbered) را با درج دستورالعمل‌های اضافه برای ذخیره و بازیابی ثبات‌ها در اطراف چنین فراخوانی‌هایی فعال می‌کند. چنین تخصیصی تنها زمانی انجام می‌شود که به نظر برسد به تولید کد بهتری منجر خواهد شد. .Sp این گزینه در برخی ماشین‌ها به‌طور پیش‌فرض همواره فعال است؛ معمولاً آن‌هایی که ثبات‌های حفظ‌شده در فراخوانی (call\-preserved registers) برای استفادهٔ جایگزین ندارند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fcombine\-stack\-adjustments\fR 4 .IX Item "-fcombine-stack-adjustments" تعدیل‌های پشته (pushها و popها) و ارجاعات حافظهٔ پشته را ردیابی کرده و سپس تلاش می‌کند راه‌هایی برای ترکیب آن‌ها بیابد. .Sp به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-ra\fR 4 .IX Item "-fipa-ra" از ثبات‌های caller\-save برای تخصیص استفاده می‌کند، در صورتی که آن ثبات‌ها توسط هیچ‌یک از توابع فراخوانی‌شده استفاده نشده باشند. در این صورت نیازی به ذخیره و بازیابی آن‌ها در اطراف فراخوانی‌ها نیست. این کار تنها در صورتی امکان‌پذیر است که توابع فراخوانی‌شده بخشی از همان واحد ترجمه (compilation unit) تابع جاری بوده و پیش از آن کامپایل شده باشند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است، با این حال اگر کد تولیدشده برای پروفایل‌سازی نشانه‌گذاری (instrument) شود (\fB\-p\fR یا \fB\-pg\fR) یا اگر میزان استفادهٔ تابع فراخوانی‌شده (callee) از ثبات‌ها دقیقاً مشخص نباشد (این مورد در مقصدهایی رخ می‌دهد که مقدمه‌ها و مؤخره‌ها را در RTL آشکار نمی‌کنند)، این گزینه غیرفعال می‌شود. .IP \fB\-fconserve\-stack\fR 4 .IX Item "-fconserve-stack" تلاش برای کمینه‌سازی مصرف پشته. کامپایلر تلاش می‌کند از فضای پشتهٔ کمتری استفاده کند، حتی اگر این کار باعث کندتر شدن برنامه شود. این گزینه به معنی تنظیم پارامتر \fBlarge\-stack\-frame\fR روی 100 و پارامتر \fBlarge\-stack\-frame\-growth\fR روی 400 است. .IP \fB\-ftree\-reassoc\fR 4 .IX Item "-ftree-reassoc" انجام بازپیوسته‌سازی (reassociation) روی درخت‌ها. این پرچم به‌طور پیش‌فرض در سطوح \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fcode\-hoisting\fR 4 .IX Item "-fcode-hoisting" انجام بالاکشی کد (code hoisting). بالاکشی کد تلاش می‌کند ارزیابی عبارت‌هایی را که در تمام مسیرهای منتهی به خروج تابع اجرا می‌شوند، در اولین فرصت ممکن انجام دهد. این بهینه‌سازی به‌ویژه برای کاهش اندازهٔ کد مفید است، اما اغلب به سرعت اجرای کد نیز کمک می‌کند. این پرچم به‌طور پیش‌فرض در سطوح \fB\-O2\fR و بالاتر فعال است. .IP \fB\-ftree\-pre\fR 4 .IX Item "-ftree-pre" انجام حذف حشو جزئی (PRE) روی درخت‌ها. این پرچم به‌طور پیش‌فرض در سطوح \fB\-O2\fR و \fB\-O3\fR فعال است. .IP \fB\-ftree\-partial\-pre\fR 4 .IX Item "-ftree-partial-pre" تهاجمی‌تر کردن فرایند حذف حشو جزئی (PRE). این پرچم به‌طور پیش‌فرض در \fB\-O3\fR فعال است. .IP \fB\-ftree\-forwprop\fR 4 .IX Item "-ftree-forwprop" انجام انتشار روبه‌جلو (forward propagation) روی درخت‌ها. این پرچم به‌طور پیش‌فرض در سطوح \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-fre\fR 4 .IX Item "-ftree-fre" انجام حذف حشو کامل (FRE) روی درخت‌ها. تفاوت بین FRE و PRE در این است که FRE تنها عبارت‌هایی را در نظر می‌گیرد که در تمام مسیرهای منتهی به محاسبهٔ حشو، محاسبه می‌شوند. این تحلیل سریع‌تر از PRE است، هرچند حشوهای کمتری را کشف می‌کند. این پرچم به‌طور پیش‌فرض در سطوح \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-phiprop\fR 4 .IX Item "-ftree-phiprop" انجام بالاکشی بارگذاری‌ها (loads) از اشاره‌گرهای شرطی روی درخت‌ها. این گذر به‌طور پیش‌فرض در سطوح \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fhoist\-adjacent\-loads\fR 4 .IX Item "-fhoist-adjacent-loads" بالاکشی گمانه‌زنانهٔ بارگذاری‌ها از هر دو شاخهٔ یک ساختار if\-then\-else در صورتی که بارگذاری‌ها از مکان‌های مجاور در یک ساختار مشترک باشند و معماری مقصد دارای دستور انتقال شرطی (conditional move) باشد. این پرچم به‌طور پیش‌فرض در سطوح \fB\-O2\fR و بالاتر فعال است. .IP \fB\-ftree\-copy\-prop\fR 4 .IX Item "-ftree-copy-prop" انجام انتشار کپی (copy propagation) روی درخت‌ها. این گذر عملیات کپی غیرضروری را حذف می‌کند. این پرچم به‌طور پیش‌فرض در سطوح \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-pure\-const\fR 4 .IX Item "-fipa-pure-const" شناسایی اینکه کدام توابع سره (pure) یا ثابت (constant) هستند. به‌طور پیش‌فرض در سطوح \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-reference\fR 4 .IX Item "-fipa-reference" شناسایی متغیرهای ایستایی (static) که از واحد ترجمه (compilation unit) خارج نمی‌شوند. به‌طور پیش‌فرض در سطوح \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-reference\-addressable\fR 4 .IX Item "-fipa-reference-addressable" شناسایی متغیرهای ایستای (static) فقط‌خواندنی، فقط‌نوشتنی و غیرقابل‌آدرس‌دهی. به‌طور پیش‌فرض در سطوح \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-reorder\-for\-locality\fR 4 .IX Item "-fipa-reorder-for-locality" دسته‌بندی زنجیره‌های فراخوانی نزدیک به یکدیگر در چیدمان فایل دودویی (binary layout) به منظور بهبود محلی‌سازی کد و کمینه‌سازی فواصل پرش بین توابعی که مکرراً فراخوانی می‌شوند. برخلاف \fB\-freorder\-functions\fR، این گذر زنجیره‌های فراخوانی بین توابع را در نظر گرفته و آن‌ها را گروه‌بندی می‌کند، به‌جای اینکه تمام توابع داغ/عادی/سرد/هرگز اجرا نشده را در بخش‌های جداگانه قرار دهد. برخلاف \fB\-fprofile\-reorder\-functions\fR، این گزینه بهبود محلی‌سازی کد در کل زمان اجرای برنامه را هدف قرار می‌دهد نه اینکه تنها بر راه‌اندازی برنامه تمرکز کند. این گزینه با مشخص کردن صریح گزینهٔ \&\fB\-flto\-partition=\fR ناسازگار است، زیرا یک طرح پارتیشن‌بندی سفارشی را تحمیل می‌کند. در صورت استفاده از این گزینه، استفاده از بازخورد پروفایل (profile feedback) نیز توصیه می‌شود، اما در غیر این صورت این گزینه به‌طور پیش‌فرض فعال نیست. .IP \fB\-fipa\-stack\-alignment\fR 4 .IX Item "-fipa-stack-alignment" کاهش تراز پشته (stack alignment) در محل‌های فراخوانی در صورت امکان. به‌طور پیش‌فرض فعال است..IP \fB\-fipa\-pta\fR 4 .IX Item "-fipa-pta" تحلیل اشاره‌گر بین‌پرویه‌ای و تحلیل تغییر و ارجاع بین‌پرویه‌ای را انجام می‌دهد. این گزینه می‌تواند در واحدهای ترجمه بزرگ باعث مصرف بیش از حد حافظه و زمان کامپایل شود. این گزینه به‌طور پیش‌فرض در هیچ سطح بهینه‌سازی فعال نیست. .IP \fB\-fipa\-profile\fR 4 .IX Item "-fipa-profile" انتشار پروفایل بین‌پرویه‌ای را انجام می‌دهد. توابعی که فقط از توابع سرد (cold) فراخوانی می‌شوند به عنوان سرد علامت‌گذاری می‌شوند. همچنین توابعی که یک بار اجرا می‌شوند (مانند \&\f(CW\*(C`cold\*(C'\fR، \f(CW\*(C`noreturn\*(C'\fR، سازنده‌ها یا ویران‌کننده‌های ایستا) شناسایی می‌شوند. سپس توابع سرد و بخش‌های بدون حلقه از توابعی که یک بار اجرا می‌شوند برای اندازه بهینه‌سازی می‌شوند. به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-modref\fR 4 .IX Item "-fipa-modref" تحلیل mod/ref بین‌پرویه‌ای را انجام می‌دهد. این بهینه‌سازی اثرات جانبی توابع (مکان‌هایی از حافظه که تغییر یافته یا به آن‌ها ارجاع شده است) را تحلیل کرده و بهینه‌سازی بهتری را در مرز فراخوانی توابع ممکن می‌سازد. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-cp\fR 4 .IX Item "-fipa-cp" انتشار ثوابت بین‌پرویه‌ای را انجام می‌دهد. این بهینه‌سازی برنامه را تحلیل می‌کند تا مشخص شود چه زمانی مقادیر ارسال‌شده به توابع ثابت هستند و سپس بر این اساس بهینه‌سازی می‌کند. اگر برنامه مقادیر ثابتی داشته باشد که به توابع ارسال می‌شوند، این بهینه‌سازی می‌تواند کارایی را به‌طور چشمگیری افزایش دهد. این پرچم به‌طور پیش‌فرض در \fB\-O2\fR، \fB\-Os\fR و \fB\-O3\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌شود. .IP \fB\-fipa\-cp\-clone\fR 4 .IX Item "-fipa-cp-clone" همتاسازی تابع (function cloning) را برای قوی‌تر کردن انتشار ثوابت بین‌پرویه‌ای انجام می‌دهد. در صورت فعال بودن، زمانی که یک تابعِ از نظر بیرونی قابل مشاهده بتواند با آرگومان‌های ثابت فراخوانی شود، انتشار ثوابت بین‌پرویه‌ای همتاسازی تابع را انجام می‌دهد. از آنجا که این بهینه‌سازی می‌تواند چندین رونوشت از توابع ایجاد کند، ممکن است اندازه کد را به‌طور چشمگیری افزایش دهد (ببینید \fB\-\-param ipa\-cp\-unit\-growth=\fR\fIvalue\fR). این پرچم به‌طور پیش‌فرض در \fB\-O3\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌شود. .IP \fB\-fipa\-bit\-cp\fR 4 .IX Item "-fipa-bit-cp" در صورت فعال بودن، انتشار ثوابت بیتی بین‌پرویه‌ای را انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O2\fR و توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. این پرچم مستلزم فعال بودن \fB\-fipa\-cp\fR است. .IP \fB\-fipa\-vrp\fR 4 .IX Item "-fipa-vrp" در صورت فعال بودن، انتشار بین‌پرویه‌ای محدوده‌های مقادیر را انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O2\fR فعال است. مستلزم این است که \fB\-fipa\-cp\fR فعال باشد. .IP \fB\-fipa\-icf\fR 4 .IX Item "-fipa-icf" ادغام کدهای همسان (Identical Code Folding) را برای توابع و متغیرهای فقط‌خواندنی انجام می‌دهد. این بهینه‌سازی اندازه کد را کاهش می‌دهد و ممکن است با جایگزین کردن یک تابع با تابعی معادل با نامی متفاوت، پشته‌های بازپیچی (unwind stacks) را مختل کند. این بهینه‌سازی در صورت فعال بودن بهینه‌سازی زمان پیوند با اثربخشی بیشتری کار می‌کند. .Sp اگرچه این رفتار مشابه بهینه‌سازی ICF در پیونددهنده Gold است، اما ICF در GCC در سطوح متفاوتی کار می‌کند و بنابراین این بهینه‌سازی‌ها یکسان نیستند \- هم‌ارزی‌هایی وجود دارند که فقط توسط GCC یافت می‌شوند و هم‌ارزی‌هایی که فقط توسط Gold پیدا می‌شوند. .Sp این پرچم به‌طور پیش‌فرض در \fB\-O2\fR و \fB\-Os\fR فعال است. .IP \fB\-flate\-combine\-instructions\fR 4 .IX Item "-flate-combine-instructions" دو گذر ترکیب دستورالعمل را که نسبتاً در اواخر فرایند کامپایل اجرا می‌شوند، فعال می‌کند. یکی از گذرها پیش از تخصیص ثبات و دیگری پس از تخصیص ثبات اجرا می‌شود. هدف اصلی این گذرها، جایگزین کردن تعاریف در تمام موارد استفاده است. .Sp بیشتر اهداف این پرچم را به‌طور پیش‌فرض در \fB\-O2\fR و \fB\-Os\fR فعال می‌کنند. .IP \fB\-flive\-patching=\fR\fIlevel\fR 4 .IX Item "-flive-patching=level" بهینه‌سازی‌های GCC را برای تولید خروجی مناسب وصله‌زنی زنده (live\-patching) کنترل می‌کند. .Sp اگر بهینه‌سازی کامپایلر از بدنه یک تابع یا اطلاعات استخراج‌شده از بدنه آن برای بهینه‌سازی/تغییر تابعی دیگر استفاده کند، تابع دوم یک تابع تحت تأثیر از تابع اول نامیده می‌شود. اگر تابعی وصله شود، توابع تحت تأثیر آن نیز باید وصله شوند. .Sp توابع تحت تأثیر توسط بهینه‌سازی‌های بین‌پرویه‌ای کامپایلر تعیین می‌شوند. برای مثال، هنگامی که تابعی درون فراخواننده‌اش جای‌گذاری درون‌خطی می‌شود، تابعی همتاسازی می‌شود و فراخواننده‌اش برای فراخوانی این رونوشتِ همتا تغییر می‌یابد، یا اطلاعات خلوص/ثابت بودن (pureness/constness) یک تابع برای بهینه‌سازی فراخواننده‌های مستقیم یا غیرمستقیم آن استخراج می‌شود و غیره، فراخواننده تحت تأثیر قرار می‌گیرد. .Sp معمولاً هر چه بهینه‌سازی‌های IPA بیشتری فعال باشند، تعداد توابع تحت تأثیر برای هر تابع بیشتر می‌شود. به‌منظور کنترل تعداد توابع تحت تأثیر و محاسبه آسان‌تر فهرست توابع تحت تأثیر، بهینه‌سازی‌های IPA را می‌توان تا حدی در دو سطح مختلف فعال کرد. .Sp آرگومان \fIlevel\fR باید یکی از موارد زیر باشد: .RS 4 .IP \fBinline\-clone\fR 4 .IX Item "inline-clone" فقط بهینه‌سازی‌های جای‌گذاری درون‌خطی و همتاسازی را فعال می‌کند که شامل درون‌خطی‌سازی، همتاسازی، جایگزینی اسکالر تجمعی بین‌پرویه‌ای و درون‌خطی‌سازی جزئی است. در نتیجه، هنگام وصله‌زنی یک تابع، تمام فراخواننده‌های آن و فراخواننده‌های همتاهای آن تحت تأثیر قرار می‌گیرند و بنابراین باید آن‌ها نیز وصله شوند. .Sp \&\fB\-flive\-patching=inline\-clone\fR پرچم‌های بهینه‌سازی زیر را غیرفعال می‌کند: \&\fB\-fwhole\-program \-fipa\-pta \-fipa\-reference \-fipa\-ra \&\-fipa\-icf \-fipa\-icf\-functions \-fipa\-icf\-variables \&\-fipa\-bit\-cp \-fipa\-vrp \-fipa\-pure\-const \&\-fipa\-reference\-addressable \&\-fipa\-stack\-alignment \-fipa\-modref\fR .IP \fBinline\-only\-static\fR 4 .IX Item "inline-only-static" فقط جای‌گذاری درون‌خطی توابع ایستا (static) را فعال می‌کند. در نتیجه، هنگام وصله‌زنی یک تابع ایستا، تمام فراخواننده‌های آن تحت تأثیر قرار می‌گیرند و بنابراین باید آن‌ها نیز وصله شوند. .Sp علاوه بر تمام پرچم‌هایی که توسط \fB\-flive\-patching=inline\-clone\fR غیرفعال می‌شوند، \&\fB\-flive\-patching=inline\-only\-static\fR این پرچم‌های بهینه‌سازی اضافی را نیز غیرفعال می‌کند: \&\fB\-fipa\-cp\-clone \-fipa\-sra \-fpartial\-inlining \-fipa\-cp\fR .RE .RS 4 .Sp زمانی که \fB\-flive\-patching\fR بدون مقدار مشخص شود، مقدار پیش‌فرض \&\fIinline\-clone\fR است. .Sp این پرچم به‌طور پیش‌فرض غیرفعال است. .Sp توجه داشته باشید که \fB\-flive\-patching\fR به همراه بهینه‌سازی زمان پیوند (\fB\-flto\fR) پشتیبانی نمی‌شود. .RE .IP \fB\-fisolate\-erroneous\-paths\-dereference\fR 4 .IX Item "-fisolate-erroneous-paths-dereference" مسیرهایی را شناسایی می‌کند که به دلیل ارجاع‌زدایی از یک اشاره‌گر تهی (null pointer)، رفتاری نادرست یا تعریف‌نشده ایجاد می‌کنند. آن مسیرها را از جریان اصلی کنترل جدا کرده و دستور دارای رفتار نادرست یا تعریف‌نشده را به یک تله (trap) تبدیل می‌کند. این پرچم به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است و به فعال بودن \&\fB\-fdelete\-null\-pointer\-checks\fR نیز وابسته است. .IP \fB\-fisolate\-erroneous\-paths\-attribute\fR 4 .IX Item "-fisolate-erroneous-paths-attribute" مسیرهایی را شناسایی می‌کند که به دلیل استفاده از یک مقدار تهی به شیوه‌ای که توسط یک صفت \f(CW\*(C`returns_nonnull\*(C'\fR یا \f(CW\*(C`nonnull\*(C'\fR منع شده است، رفتاری نادرست یا تعریف‌نشده ایجاد می‌کنند. آن مسیرها را از جریان اصلی کنترل جدا کرده و دستور دارای رفتار نادرست یا تعریف‌نشده را به یک تله تبدیل می‌کند. این گزینه در حال حاضر فعال نیست، اما ممکن است در آینده توسط \fB\-O2\fR فعال شود. .IP \fB\-ftree\-sink\fR 4 .IX Item "-ftree-sink" انتقال رو به جلوی ذخیره‌سازی (forward store motion) را روی درخت‌ها انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-bit\-ccp\fR 4 .IX Item "-ftree-bit-ccp" انتشار ثوابت بیتی شرطی تنک را روی درخت‌ها انجام داده و اطلاعات تراز اشاره‌گر را منتشر می‌کند. این گذر تنها روی متغیرهای اسکالر محلی عمل می‌کند و به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر، به جز \fB\-Og\fR، فعال است. مستلزم این است که \fB\-ftree\-ccp\fR فعال باشد. .IP \fB\-ftree\-ccp\fR 4 .IX Item "-ftree-ccp" انتشار ثوابت شرطی تنک (CCP) را روی درخت‌ها انجام می‌دهد. این گذر تنها روی متغیرهای اسکالر محلی عمل می‌کند و به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fssa\-backprop\fR 4 .IX Item "-fssa-backprop" اطلاعات مربوط به موارد استفاده یک مقدار را به بالای زنجیره تعریف منتشر می‌کند تا تعاریف ساده‌سازی شوند. برای مثال، اگر علامت یک مقدار هرگز اهمیتی نداشته باشد، این گذر عملیات علامت را حذف می‌کند. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fssa\-phiopt\fR 4 .IX Item "-fssa-phiopt" تطبیق الگو را روی گره‌های PHI در SSA انجام می‌دهد تا کد شرطی بهینه‌سازی شود. این گذر به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر، به جز \fB\-Og\fR، فعال است. .IP \fB\-ftree\-switch\-conversion\fR 4 .IX Item "-ftree-switch-conversion" تبدیل مقداردهی‌های اولیه ساده در یک دستور switch را به مقداردهی‌های اولیه از یک آرایه اسکالر انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است. .IP \fB\-ftree\-tail\-merge\fR 4 .IX Item "-ftree-tail-merge" به دنبال توالی‌های کد همسان می‌گردد. در صورت یافت شدن، یکی را با پرشی به دیگری جایگزین می‌کند. این بهینه‌سازی به ادغام دم (tail merging) یا پرش متقاطع (cross jumping) معروف است. این پرچم به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است. زمان کامپایل در این گذر را می‌توان با استفاده از پارامتر \fBmax\-tail\-merge\-comparisons\fR و پارامتر \&\fBmax\-tail\-merge\-iterations\fR محدود کرد..IP \fB\-ftree\-cselim\fR 4 .IX Item "-ftree-cselim" حذف ذخیره‌سازی شرطی (conditional store elimination) را روی درخت‌ها انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر روی مقصدهایی که دارای دستورالعمل‌های انتقال شرطی هستند فعال است. .IP \fB\-ftree\-dce\fR 4 .IX Item "-ftree-dce" حذف کد مرده (DCE) را روی درخت‌ها انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-builtin\-call\-dce\fR 4 .IX Item "-ftree-builtin-call-dce" حذف کد مردهٔ (DCE) شرطی را برای فراخوانی‌های توابع توکار (built\-in) که ممکن است \f(CW\*(C`errno\*(C'\fR را مقداردهی کنند ولی در غیر این صورت فاقد اثر جانبی هستند، انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر، در صورتی که \fB\-Os\fR نیز مشخص نشده باشد، فعال است. .IP \fB\-ffinite\-loops\fR 4 .IX Item "-ffinite-loops" فرض می‌کند حلقه‌ای که دارای خروج است، سرانجام از حلقه خارج خواهد شد و تا ابد تکرار نمی‌شود. این به کامپایلر اجازه می‌دهد حلقه‌هایی را که در غیر این صورت هیچ اثر جانبی ندارند حذف کند، بدون آنکه حلقه زدن بی‌پایان احتمالی را اثر جانبی تلقی کند. .Sp این گزینه به‌طور پیش‌فرض در \fB\-O2\fR برای ++C با \-std=c++11 یا بالاتر فعال است. .IP \fB\-ftree\-dominator\-opts\fR 4 .IX Item "-ftree-dominator-opts" انواع پاک‌سازی‌های سادهٔ اسکالر (انتشار ثابت/کپی، حذف افزونگی، انتشار بازه و ساده‌سازی عبارت) را بر پایهٔ پیمایش درخت تسلط (dominator tree) انجام می‌دهد. همچنین ریسه‌بندی پرش (jump threading) را برای کاهش پرش به پرش‌ها انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-dse\fR 4 .IX Item "-ftree-dse" حذف ذخیره‌سازی مرده (DSE) را روی درخت‌ها انجام می‌دهد. ذخیره‌سازی مرده، ذخیره‌سازی در مکانی از حافظه است که بعداً بدون هیچ بارگذاری مداخله‌گری، با یک ذخیره‌سازی دیگر بازنویسی می‌شود. در این حالت می‌توان ذخیره‌سازی اولیه را حذف کرد. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-ch\fR 4 .IX Item "-ftree-ch" کپی سرآیند حلقه (loop header copying) را روی درخت‌ها انجام می‌دهد. این کار سودمند است چرا که اثربخشی بهینه‌سازی‌های انتقال کد را افزایش می‌دهد. همچنین باعث صرفه‌جویی در یک پرش می‌شود. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. برای \fB\-Os\fR فعال نیست، زیرا معمولاً اندازهٔ کد را افزایش می‌دهد. .IP \fB\-ftree\-loop\-optimize\fR 4 .IX Item "-ftree-loop-optimize" بهینه‌سازی‌های حلقه را روی درخت‌ها انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-loop\-linear\fR 4 .IX Item "-ftree-loop-linear" .PD 0 .IP \fB\-floop\-strip\-mine\fR 4 .IX Item "-floop-strip-mine" .IP \fB\-floop\-block\fR 4 .IX Item "-floop-block" .PD بهینه‌سازی‌های حلقه‌های تو در تو را انجام می‌دهد. همانند \&\fB\-floop\-nest\-optimize\fR است. برای استفاده از این تبدیل کد، GCC باید با \fB\-\-with\-isl\fR پیکربندی شده باشد تا زیرساخت تبدیل حلقهٔ Graphite فعال شود. .IP \fB\-fgraphite\-identity\fR 4 .IX Item "-fgraphite-identity" تبدیل همانی را برای graphite فعال می‌کند. برای هر SCoP نمایش چندوجهی (polyhedral representation) تولید شده و دوباره به gimple تبدیل می‌شود. با استفاده از \&\fB\-fgraphite\-identity\fR می‌توان هزینه‌ها یا مزایای تبدیل GIMPLE \-> GRAPHITE \-> GIMPLE را بررسی کرد. همچنین برخی بهینه‌سازی‌های حداقلی توسط تولیدکنندهٔ کد isl انجام می‌شود، مانند تفکیک نمایه و حذف کد مرده در حلقه‌ها. .IP \fB\-floop\-nest\-optimize\fR 4 .IX Item "-floop-nest-optimize" بهینه‌ساز حلقه‌های تو در تو مبتنی بر isl را فعال می‌کند. این یک بهینه‌ساز عمومی حلقه‌های تو در تو بر پایهٔ الگوریتم‌های بهینه‌سازی Pluto است. ساختار حلقه‌ای را محاسبه می‌کند که برای محلی‌سازی داده و موازی‌سازی بهینه‌سازی شده باشد. این گزینه آزمایشی است. .IP \fB\-floop\-parallelize\-all\fR 4 .IX Item "-floop-parallelize-all" از تحلیل وابستگی دادهٔ Graphite برای شناسایی حلقه‌های قابل موازی‌سازی استفاده می‌کند. تمام حلقه‌هایی را که پس از تحلیل مشخص شود فاقد وابستگی‌های بین‌تکراری هستند موازی می‌کند، بدون آنکه سودمند بودن موازی‌سازی حلقه‌ها را بررسی کند. .IP \fB\-ftree\-coalesce\-vars\fR 4 .IX Item "-ftree-coalesce-vars" هنگام تبدیل برنامه به خارج از نمایش SSA، تلاش می‌کند تا به‌جای متغیرهای موقت کامپایلر، با ادغام (coalescing) نسخه‌های مختلف متغیرهای تعریف‌شده توسط کاربر کپی‌برداری را کاهش دهد. این کار ممکن است توانایی اشکال‌زدایی برنامه‌ای بهینه‌شده را که با \&\fB\-fno\-var\-tracking\-assignments\fR کامپایل شده است به‌شدت محدود کند. در حالت نقیض، این پرچم از ادغام متغیرهای کاربر در SSA جلوگیری می‌کند. این گزینه در صورت فعال بودن بهینه‌سازی، به‌طور پیش‌فرض فعال است و در غیر این صورت کار چندانی انجام نمی‌دهد. .IP \fB\-ftree\-loop\-if\-convert\fR 4 .IX Item "-ftree-loop-if-convert" تلاش می‌کند پرش‌های شرطی را در درونی‌ترین حلقه‌ها به معادل‌های بدون انشعاب تبدیل کند. هدف، حذف جریان کنترل از درونی‌ترین حلقه‌ها به منظور بهبود توانایی گذر بردارسازی (vectorization pass) در رسیدگی به این حلقه‌ها است. این گزینه در صورت فعال بودن بردارسازی، به‌طور پیش‌فرض فعال است. .IP \fB\-ftree\-loop\-distribution\fR 4 .IX Item "-ftree-loop-distribution" توزیع حلقه (loop distribution) را انجام می‌دهد. این پرچم می‌تواند کارایی حافظهٔ نهان (cache) را روی بدنهٔ حلقه‌های بزرگ بهبود بخشیده و امکان انجام بهینه‌سازی‌های بیشتر حلقه، مانند موازی‌سازی یا بردارسازی را فراهم کند. برای نمونه، حلقهٔ .Sp .Vb 4 \& DO I = 1, N \& A(I) = B(I) + C \& D(I) = E(I) * F \& ENDDO .Ve .Sp به این صورت تبدیل می‌شود: .Sp .Vb 6 \& DO I = 1, N \& A(I) = B(I) + C \& ENDDO \& DO I = 1, N \& D(I) = E(I) * F \& ENDDO .Ve .Sp این پرچم به‌طور پیش‌فرض در \fB\-O3\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌شود. .IP \fB\-ftree\-loop\-distribute\-patterns\fR 4 .IX Item "-ftree-loop-distribute-patterns" توزیع حلقه را روی الگوهایی انجام می‌دهد که تولید کد آن‌ها می‌تواند با فراخوانی‌هایی به یک کتابخانه انجام شود. این پرچم به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر، و همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .Sp این گذر حلقه‌های مقداردهی اولیه را توزیع کرده و فراخوانی به memset با مقدار صفر تولید می‌کند. برای نمونه، حلقهٔ .Sp .Vb 4 \& DO I = 1, N \& A(I) = 0 \& B(I) = A(I) + I \& ENDDO .Ve .Sp به این صورت تبدیل شده: .Sp .Vb 6 \& DO I = 1, N \& A(I) = 0 \& ENDDO \& DO I = 1, N \& B(I) = A(I) + I \& ENDDO .Ve .Sp و حلقهٔ مقداردهی اولیه به فراخوانی به memset با صفر تبدیل می‌شود. .IP \fB\-floop\-interchange\fR 4 .IX Item "-floop-interchange" جابه‌جایی حلقه (loop interchange) را بیرون از graphite انجام می‌دهد. این پرچم می‌تواند کارایی حافظهٔ نهان را روی حلقه‌های تو در تو بهبود بخشیده و امکان انجام بهینه‌سازی‌های بیشتر حلقه، مانند بردارسازی را فراهم کند. برای نمونه، حلقهٔ .Sp .Vb 4 \& for (int i = 0; i < N; i++) \& for (int j = 0; j < N; j++) \& for (int k = 0; k < N; k++) \& c[i][j] = c[i][j] + a[i][k]*b[k][j]; .Ve .Sp به این صورت تبدیل می‌شود: .Sp .Vb 4 \& for (int i = 0; i < N; i++) \& for (int k = 0; k < N; k++) \& for (int j = 0; j < N; j++) \& c[i][j] = c[i][j] + a[i][k]*b[k][j]; .Ve .Sp این پرچم به‌طور پیش‌فرض در \fB\-O3\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌شود. .IP \fB\-floop\-unroll\-and\-jam\fR 4 .IX Item "-floop-unroll-and-jam" تبدیل‌های باز کردن و ادغام حلقه (unroll and jam) را روی حلقه‌های مناسب اعمال می‌کند. در یک حلقهٔ تو در تو، این کار حلقهٔ بیرونی را با یک ضریب مشخص باز کرده و حلقه‌های درونی حاصل را با یکدیگر ترکیب می‌کند. این پرچم به‌طور پیش‌فرض در \fB\-O3\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌شود. .IP \fB\-ftree\-loop\-im\fR 4 .IX Item "-ftree-loop-im" انتقال نامتغیرهای حلقه (loop invariant motion) را روی درخت‌ها انجام می‌دهد. این گذر تنها نامتغیرهایی را منتقل می‌کند که رسیدگی به آن‌ها در سطح RTL دشوار است (فراخوانی توابع، عملیاتی که به توالی‌های غیربدیهی از دستورالعمل‌ها بسط می‌یابند). با \fB\-funswitch\-loops\fR همچنین عملوندهای شرایطی را که نامتغیر هستند به خارج از حلقه منتقل می‌کند تا بتوان صرفاً از تحلیل سادهٔ نامتغیر بودن در جابه‌جایی شرط حلقه (loop unswitching) استفاده کرد. این گذر انتقال ذخیره‌سازی را نیز شامل می‌شود..IP \fB\-ftree\-loop\-ivcanon\fR 4 .IX Item "-ftree-loop-ivcanon" ایجاد یک شمارنده کانونیکال برای تعداد تکرارها در حلقه‌هایی که تعیین تعداد تکرار آن‌ها نیازمند تحلیل پیچیده است. بهینه‌سازی‌های بعدی پس از آن می‌توانند این تعداد را به سادگی تعیین کنند. این گزینه به‌ویژه در ارتباط با باز کردن حلقه (unrolling) سودمند است. .IP \fB\-ftree\-scev\-cprop\fR 4 .IX Item "-ftree-scev-cprop" انجام جایگزینی مقدار نهایی. اگر متغیری در یک حلقه به گونه‌ای تغییر یابد که مقدار آن هنگام خروج از حلقه تنها با استفاده از مقدار اولیه و تعداد تکرارهای حلقه قابل تعیین باشد، استفاده‌ها از مقدار نهایی را با چنین محاسباتی جایگزین می‌کند، مشروط بر اینکه هزینه محاسباتی آن به اندازه کافی کم باشد. این کار وابستگی‌های داده‌ای را کاهش داده و ممکن است امکان ساده‌سازی‌های بیشتری را فراهم آورد. این گزینه به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fivopts\fR 4 .IX Item "-fivopts" انجام بهینه‌سازی‌های متغیر القایی (کاهش توان محاسباتی [strength reduction]، ادغام متغیر القایی و حذف متغیر القایی) روی درخت‌ها. این گزینه به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-parallelize\-loops=n\fR 4 .IX Item "-ftree-parallelize-loops=n" موازی‌سازی حلقه‌ها؛ یعنی تقسیم فضای تکرار آن‌ها برای اجرا در n ریسه (thread). این امر تنها برای حلقه‌هایی امکان‌پذیر است که تکرارهای آن‌ها مستقل از یکدیگر بوده و بتوان آن‌ها را بدون ترتیب خاصی بازآرایی کرد. این بهینه‌سازی تنها روی ماشین‌های چندپردازنده‌ای و برای حلقه‌هایی با بار پردازشی سنگین (CPU\-intensive) سودمند است، نه حلقه‌هایی که به عنوان مثال به دلیل پهنای باند حافظه محدود شده‌اند. این گزینه مستلزم \fB\-pthread\fR است و بنابراین تنها روی مقصدهایی که از \fB\-pthread\fR پشتیبانی می‌کنند کارایی دارد. .IP \fB\-ftree\-pta\fR 4 .IX Item "-ftree-pta" انجام تحلیل محلی-تابعِ اشاره‌گرها (points-to analysis) روی درخت‌ها. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر، به استثنای \fB\-Og\fR، فعال است. .IP \fB\-ftree\-sra\fR 4 .IX Item "-ftree-sra" انجام جایگزینی اسکالر مجموعه‌ها (aggregates). این گذر ارجاعات به ساختارها را با مقادیر اسکالر جایگزین می‌کند تا از ارسال زودهنگام ساختارها به حافظه جلوگیری کند. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر، به استثنای \fB\-Og\fR، فعال است. .IP \fB\-fstore\-merging\fR 4 .IX Item "-fstore-merging" انجام ادغام ذخیره‌سازی‌های باریک در آدرس‌های متوالی حافظه. این گذر، ذخیره‌سازی‌های متوالی مقادیر بی‌واسطه که باریک‌تر از یک کلمه (word) هستند را در ذخیره‌سازی‌های عریض‌تر و با تعداد کمتر ادغام می‌کند تا تعداد دستورالعمل‌ها کاهش یابد. این گزینه به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر و همچنین در \fB\-Os\fR فعال است. .IP \fB\-ftree\-ter\fR 4 .IX Item "-ftree-ter" انجام جایگزینی عبارت موقت در طول فاز SSA\->normal. متغیرهای موقت تک‌استفاده/تک‌تعریف در محل استفاده‌شان با عبارت تعریف‌کننده خود جایگزین می‌شوند. این کار منجر به تولید کدی غیر از GIMPLE می‌شود، اما درخت‌های بسیار پیچیده‌تری را در اختیار بسط‌دهنده‌ها قرار می‌دهد که به تولید RTL بهتری می‌انجامد. این گزینه به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-slsr\fR 4 .IX Item "-ftree-slsr" انجام کاهش توان محاسباتی مستقیم (straight-line strength reduction) روی درخت‌ها. این گزینه عبارت‌های مرتبطِ حاوی عمل ضرب را شناسایی کرده و در صورت امکان آن‌ها را با محاسباتی کم‌هزینه‌تر جایگزین می‌کند. این گزینه به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-vectorize\fR 4 .IX Item "-ftree-vectorize" انجام برداری‌سازی روی درخت‌ها. این پرچم در صورت عدم تعیین صریح، گزینه‌های \fB\-ftree\-loop\-vectorize\fR و \fB\-ftree\-slp\-vectorize\fR را فعال می‌کند. .IP \fB\-ftree\-loop\-vectorize\fR 4 .IX Item "-ftree-loop-vectorize" انجام برداری‌سازی حلقه روی درخت‌ها. این پرچم به‌طور پیش‌فرض در \&\fB\-O2\fR و توسط \fB\-ftree\-vectorize\fR، \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-ftree\-slp\-vectorize\fR 4 .IX Item "-ftree-slp-vectorize" انجام برداری‌سازی بلوک پایه روی درخت‌ها. این پرچم به‌طور پیش‌فرض در \&\fB\-O2\fR و توسط \fB\-ftree\-vectorize\fR، \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-ftrivial\-auto\-var\-init=\fR\fIchoice\fR 4 .IX Item "-ftrivial-auto-var-init=choice" مقداردهی اولیه متغیرهای خودکار با یک الگو یا با صفر جهت افزایش امنیت و پیش‌بینی‌پذیری برنامه از طریق جلوگیری از افشا و استفاده از حافظه مقداردهی‌نشده. کامپایلر GCC همچنان متغیر خودکاری را که مقداردهی صریح ندارد مقداردهی‌نشده در نظر می‌گیرد؛ گزینه‌های \fB\-Wuninitialized\fR و \&\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR همچنان پیام‌های هشدار را روی چنین متغیرهایی گزارش می‌دهند و کامپایلر بهینه‌سازی را طوری انجام می‌دهد که گویی متغیر مقداردهی نشده است. با فعال‌سازی این گزینه، GCC همچنین لایه‌بندی‌ها (padding) متغیرهای خودکاری را که از انواع ساختار یا اجتماع هستند با صفر مقداردهی اولیه می‌کند. با این وجود، پیاده‌سازی فعلی نمی‌تواند متغیرهای خودکاری را که بین عبارت کنترلی و اولین مورد (case) در یک دستور \&\f(CW\*(C`switch\*(C'\fR تعریف شده‌اند مقداردهی کند. از \fB\-Wtrivial\-auto\-var\-init\fR برای گزارش تمام چنین مواردی استفاده کنید. .Sp سه مقدار ممکن برای \fIchoice\fR عبارتند از: .RS 4 .IP * 4 \&\fBuninitialized\fR هیچ‌یک از متغیرهای خودکار را مقداردهی اولیه نمی‌کند. این رفتار پیش‌فرض در زبان‌های C و C++ است. .IP * 4 \&\fBpattern\fR متغیرهای خودکار را با مقادیری مقداردهی می‌کند که احتمالاً باگ‌های منطقی را در ادامه مسیر به کرش تبدیل می‌کنند، در گزارش‌های کرش (crash dump) به راحتی قابل شناسایی هستند و مقادیری نیستند که برنامه‌نویسان بتوانند برای عملکرد معنادار برنامه به آن‌ها تکیه کنند. مقدار فعلی یک الگوی تکرارشونده بایتی با بایت «0xFE» است. مقادیر مورد استفاده برای مقداردهی اولیه الگو ممکن است در آینده تغییر کنند. .IP * 4 \&\fBzero\fR متغیرهای خودکار را با صفر مقداردهی اولیه می‌کند. .RE .RS 4 .Sp پیش‌فرض \fBuninitialized\fR است. .Sp توجه داشته باشید که مقادیر آغازگر، چه \fBzero\fR و چه \fBpattern\fR، به بازنمایی داده (در حافظه یا ثبات‌های ماشین) اشاره دارند تا تفسیر آن‌ها به عنوان مقادیر عددی. این تمایز ممکن است در زبان‌هایی که از انواع دارای اریب (biases) یا ضرایب پنهان پشتیبانی می‌کنند و همچنین با افزونه‌هایی نظیر \fBhardbool\fR حائز اهمیت باشد. به عنوان مثال، متغیری که از ۸ بیت برای نمایش کمیت‌های (اریب‌دار) در بازه \f(CW\*(C`range 160..400\*(C'\fR استفاده می‌کند، بسته به \fIchoice\fR با الگوهای بیتی \f(CW0x00\fR یا \f(CW0xFE\fR مقداردهی می‌شود، فارغ از اینکه این بازنمایی‌ها نشان‌دهنده مقادیری در آن بازه باشند یا خیر؛ و حتی اگر باشند، تفسیر مقدار موجود در متغیر به مقدار اریب بستگی خواهد داشت. یک متغیر \fBhardbool\fR که فرضا از \f(CW\*(C`0X5A\*(C'\fR و \f(CW0xA5\fR به ترتیب برای \f(CW\*(C`false\*(C'\fR و \f(CW\*(C`true\*(C'\fR استفاده می‌کند، با هر دو حالت \fBchoice\fR برای مقداردهی اولیه ناچیز به تله (trap) منجر می‌شود؛ یعنی مقداردهی اولیه با \fBzero\fR به بازنمایی معادل برای \f(CW\*(C`false\*(C'\fR تبدیل نمی‌شود، حتی اگر برای یک متغیر \f(CW\*(C`static\*(C'\fR از همان نوع چنین تبدیلی رخ می‌داد. این بدان معناست که الگوی آغازگر عموماً به نوع متغیرِ مقداردهی‌شده وابسته نیست. یک استثنای بارز این است که متغیرهای بولی (غیرمقاوم‌سازی‌شده) که در ثبات‌ها جای می‌گیرند، حتی در صورت درخواست \fBpattern\fR، با \f(CW\*(C`false\*(C'\fR (صفر) مقداردهی می‌شوند. .Sp می‌توانید این رفتار را برای یک متغیر خاص با استفاده از ویژگی متغیر \f(CW\*(C`uninitialized\*(C'\fR کنترل کنید. .RE .IP \fB\-fvect\-cost\-model=\fR\fImodel\fR 4 .IX Item "-fvect-cost-model=model" تغییر مدل هزینه مورد استفاده برای برداری‌سازی. آرگومان \fImodel\fR باید یکی از مقادیر \fBunlimited\fR، \fBdynamic\fR، \fBcheap\fR یا \&\fBvery\-cheap\fR باشد. در مدل \fBunlimited\fR فرض بر این است که مسیر کد برداری‌شده همواره سودمند است، در حالی که در مدل \fBdynamic\fR یک بررسی در زمان اجرا از مسیر کد برداری‌شده محافظت می‌کند تا آن را تنها برای تعداد تکرارهایی فعال سازد که اجرای آن‌ها محتملاً سریع‌تر از اجرای حلقه اسکالر اصلی خواهد بود. مدل \fBcheap\fR برداری‌سازی حلقه‌هایی را غیرفعال می‌کند که انجام آن به عنوان مثال به دلیل نیاز به بررسی‌های زمان اجرا برای وابستگی داده یا تراز بودن، هزینه‌ای بسیار سنگین داشته باشد، اما در غیر این صورت هم‌ارز با مدل \fBdynamic\fR است. مدل \fBvery\-cheap\fR برداری‌سازی حلقه‌ها را در صورتی که به هرگونه بررسی زمان اجرا برای وابستگی داده یا تراز بودن نیاز باشد غیرفعال می‌کند؛ همچنین برداری‌سازی حلقه‌های فرود پایانی (epilogue) را نیز غیرفعال می‌سازد، اما در سایر موارد معادل با مدل \fBcheap\fR است. .Sp مدل هزینه پیش‌فرض به سایر پرچم‌های بهینه‌سازی بستگی دارد و یکی از مقادیر \fBdynamic\fR یا \fBcheap\fR است. .IP \fB\-fsimd\-cost\-model=\fR\fImodel\fR 4 .IX Item "-fsimd-cost-model=model" تغییر مدل هزینه مورد استفاده برای برداری‌سازی حلقه‌های مشخص‌شده با دستور OpenMP simd. آرگومان \fImodel\fR باید یکی از مقادیر \&\fBunlimited\fR، \fBdynamic\fR یا \fBcheap\fR باشد. تمام مقادیر \fImodel\fR دارای همان معانی ذکرشده در \fB\-fvect\-cost\-model\fR هستند و به‌طور پیش‌فرض مدل هزینه تعیین‌شده با \fB\-fvect\-cost\-model\fR مورد استفاده قرار می‌گیرد. .IP \fB\-ftree\-vrp\fR 4 .IX Item "-ftree-vrp" انجام انتشار محدوده مقادیر (Value Range Propagation) روی درخت‌ها. این گذر مشابه با گذر انتشار مقادیر ثابت است، اما به جای مقادیر، محدوده‌ای از مقادیر منتشر می‌شوند. این امر به بهینه‌سازها اجازه می‌دهد تا بررسی‌های غیرضروری محدوده مانند بررسی مرزهای آرایه و بررسی اشاره‌گر تهی (null pointer) را حذف کنند. این گزینه به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است. حذف بررسی اشاره‌گر تهی تنها در صورتی انجام می‌شود که \fB\-fdelete\-null\-pointer\-checks\fR فعال باشد. .IP \fB\-fsplit\-paths\fR 4 .IX Item "-fsplit-paths" جداسازی مسیرهای منتهی به یال‌های بازگشتی حلقه (loop backedges). این کار می‌تواند حذف کدهای مرده و حذف عبارات فرعی مشترک را بهبود بخشد. این گزینه به‌طور پیش‌فرض در \fB\-O3\fR و بالاتر فعال است. .IP \fB\-fsplit\-ivs\-in\-unroller\fR 4 .IX Item "-fsplit-ivs-in-unroller" بیان مقادیر متغیرهای القایی در تکرارهای بعدی حلقه بازشده با استفاده از مقدار موجود در تکرار اول را فعال می‌کند. این کار زنجیره‌های طولانی وابستگی را می‌شکند و در نتیجه کارایی گذرهای زمان‌بندی را بهبود می‌بخشد. .Sp ترکیبی از \fB\-fweb\fR و CSE اغلب برای دستیابی به همین نتیجه کافی است. با این حال، این کار در مواردی که بدنه حلقه پیچیده‌تر از یک بلوک پایه منفرد باشد قابل اطمینان نیست. همچنین در برخی معماری‌ها به دلیل محدودیت‌های موجود در گذر CSE اصلاً عمل نمی‌کند. .Sp این بهینه‌سازی به‌طور پیش‌فرض فعال است..IP \fB\-fvariable\-expansion\-in\-unroller\fR 4 .IX Item "-fvariable-expansion-in-unroller" با این گزینه، کامپایلر هنگام باز کردن حلقه (loop unrolling)، چندین رونوشت از برخی متغیرهای محلی ایجاد می‌کند که می‌تواند به کُد بهتری منجر شود. .Sp این بهینه‌سازی به طور پیش‌فرض برای اهداف PowerPC فعال است، اما در غیر این صورت به طور پیش‌فرض غیرفعال است. .IP \fB\-fpartial\-inlining\fR 4 .IX Item "-fpartial-inlining" درون‌ریزی بخش‌هایی از توابع. این گزینه تنها زمانی اثرگذار است که خودِ درون‌ریزی با گزینه‌های \fB\-finline\-functions\fR یا \fB\-finline\-small\-functions\fR فعال شده باشد. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fpredictive\-commoning\fR 4 .IX Item "-fpredictive-commoning" بهینه‌سازی اشتراک‌گذاری پیش‌گویانه (predictive commoning) را انجام می‌دهد، یعنی استفادهٔ مجدد از محاسبات (به‌ویژه بارگذاری‌ها و ذخیره‌سازی‌های حافظه) انجام شده در تکرارهای قبلی حلقه‌ها. .Sp این گزینه در سطح \fB\-O3\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌شود. .IP \fB\-fprefetch\-loop\-arrays\fR 4 .IX Item "-fprefetch-loop-arrays" در صورت پشتیبانی ماشین مقصد، دستورالعمل‌هایی برای پیش‌واکشی (prefetch) حافظه جهت بهبود کارایی حلقه‌هایی که به آرایه‌های بزرگ دسترسی دارند تولید می‌کند. .Sp این گزینه ممکن است کُد بهتر یا بدتری تولید کند؛ نتایج به‌شدت به ساختار حلقه‌ها در کُد منبع وابسته است. .Sp در سطح \fB\-Os\fR غیرفعال است. .IP \fB\-fno\-printf\-return\-value\fR 4 .IX Item "-fno-printf-return-value" مقادیر ثابت را به جای مقدار بازگشتی شناخته‌شدهٔ توابع خروجی قالب‌بندی‌شده مانند \f(CW\*(C`sprintf\*(C'\fR، \f(CW\*(C`snprintf\*(C'\fR، \f(CW\*(C`vsprintf\*(C'\fR و \&\f(CW\*(C`vsnprintf\*(C'\fR (اما نه \f(CW\*(C`printf\*(C'\fR یا \f(CW\*(C`fprintf\*(C'\fR) جایگزین نکن. این تبدیل به GCC اجازه می‌دهد تا شاخه‌ها را بر اساس مقدار بازگشتی شناخته‌شدهٔ این توابع هنگامی که با آرگومان‌های ثابت یا مقادیری در بازه‌ای مشخص فراخوانی می‌شوند که تعیین مقدار بازگشتی دقیق را ممکن می‌سازد، بهینه‌سازی کرده یا حتی حذف کند. برای نمونه، هنگامی که \&\fB\-fprintf\-return\-value\fR فعال است، هم شاخه و هم بدنهٔ دستور \f(CW\*(C`if\*(C'\fR (اما نه فراخوانی \f(CW\*(C`snprintf\*(C'\fR) را می‌توان در صورتی که \f(CW\*(C`i\*(C'\fR یک عدد صحیح ۳۲ بیتی یا کوچک‌تر باشد، حذف و بهینه‌سازی کرد؛ چرا که تضمین می‌شود مقدار بازگشتی حداکثر ۸ است. .Sp .Vb 3 \& char buf[9]; \& if (snprintf (buf, "%08x", i) >= sizeof buf) \& ... .Ve .Sp گزینهٔ \fB\-fprintf\-return\-value\fR به بهینه‌سازی‌های دیگر وابسته است و با \fB\-O2\fR و بالاتر بهترین نتیجه را به همراه دارد. این گزینه همگام با گزینه‌های \fB\-Wformat\-overflow\fR و \fB\-Wformat\-truncation\fR عمل می‌کند. گزینهٔ \fB\-fprintf\-return\-value\fR به طور پیش‌فرض فعال است. .IP \fB\-fno\-peephole\fR 4 .IX Item "-fno-peephole" .PD 0 .IP \fB\-fno\-peephole2\fR 4 .IX Item "-fno-peephole2" .PD هرگونه بهینه‌سازی روزنه‌ای (peephole) مختص ماشین را غیرفعال کن. تفاوت بین \fB\-fno\-peephole\fR و \fB\-fno\-peephole2\fR در نحوه پیاده‌سازی آن‌ها در کامپایلر است؛ برخی از اهداف از یکی، برخی از دیگری و تعداد اندکی از هر دو استفاده می‌کنند. .Sp \&\fB\-fpeephole\fR به طور پیش‌فرض فعال است. \&\fB\-fpeephole2\fR در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fno\-guess\-branch\-probability\fR 4 .IX Item "-fno-guess-branch-probability" احتمال شاخه‌ها را با استفاده از روش‌های ابتکاری (heuristics) حدس نزن. .Sp در صورتی که احتمالات شاخه از طریق بازخورد پروفایل‌سازی (\fB\-fprofile\-arcs\fR) ارائه نشده باشد، GCC از روش‌های ابتکاری برای حدس زدن آن‌ها استفاده می‌کند. این روش‌های ابتکاری بر پایه نمودار جریان کنترل (control flow graph) هستند. اگر برخی از احتمالات شاخه توسط \f(CW\*(C`_\|_builtin_expect\*(C'\fR مشخص شده باشند، روش‌های ابتکاری با در نظر گرفتن اطلاعات \f(CW\*(C`_\|_builtin_expect\*(C'\fR، برای حدس زدن احتمالات بقیهٔ نمودار جریان کنترل به کار گرفته می‌شوند. برهم‌کنش‌های میان روش‌های ابتکاری و \f(CW\*(C`_\|_builtin_expect\*(C'\fR می‌تواند پیچیده باشد و در برخی موارد، غیرفعال کردن روش‌های ابتکاری ممکن است مفید باشد تا اثرات \f(CW\*(C`_\|_builtin_expect\*(C'\fR آسان‌تر درک شود. .Sp همچنین می‌توان با تابع توکار \f(CW\*(C`_\|_builtin_expect_with_probability\*(C'\fR احتمال مورد انتظار عبارت را مشخص کرد. .Sp پیش‌فرض در سطوح \&\fB\-O\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR گزینهٔ \fB\-fguess\-branch\-probability\fR است. .IP \fB\-freorder\-blocks\fR 4 .IX Item "-freorder-blocks" بلاک‌های پایه (basic blocks) را در تابع کامپایل‌شده مرتب‌سازی مجدد می‌کند تا تعداد شاخه‌های طی‌شده کاهش یافته و محلی بودن کُد (code locality) بهبود یابد. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR 4 .IX Item "-freorder-blocks-algorithm=algorithm" از الگوریتم مشخص‌شده برای مرتب‌سازی مجدد بلاک‌های پایه استفاده می‌کند. آرگومان \fIalgorithm\fR می‌تواند \fBsimple\fR باشد که اندازه کُد را افزایش نمی‌دهد (مگر گاهی به دلیل اثرات جانبی مانند ترازسازی)، یا \fBstc\fR، الگوریتم "software trace cache"، که تلاش می‌کند تمام کُدهای پرتکرار را در کنار یکدیگر قرار دهد و با ایجاد رونوشت‌های اضافی از کُد، تعداد شاخه‌های اجراشده را به حداقل برساند. .Sp پیش‌فرض در سطوح \fB\-O1\fR و \fB\-Os\fR مقدار \fBsimple\fR، و در سطوح \fB\-O2\fR و \fB\-O3\fR مقدار \&\fBstc\fR است. .IP \fB\-freorder\-blocks\-and\-partition\fR 4 .IX Item "-freorder-blocks-and-partition" علاوه بر مرتب‌سازی مجدد بلاک‌های پایه در تابع کامپایل‌شده به منظور کاهش تعداد شاخه‌های طی‌شده، بلاک‌های پایه داغ (hot) و سرد (cold) را در بخش‌های جداگانه‌ای از فایل‌های اسمبلی و \fI.o\fR افرازش (partition) می‌کند تا کارایی صفحه‌بندی (paging) و محلی بودن حافظه پنهان (cache locality) را بهبود بخشد. .Sp این بهینه‌سازی به طور خودکار در حضور مدیریت استثنا یا جدول‌های unwind (در اهدافی که از setjump/longjump یا طرح‌های مختص هدف استفاده می‌کنند)، برای بخش‌های linkonce، برای توابعی با صفت بخش تعریف‌شده توسط کاربر (user-defined section attribute) و در هر معماری که از بخش‌های نام‌گذاری‌شده پشتیبانی نمی‌کند، غیرفعال می‌شود. هنگامی که \fB\-fsplit\-stack\fR استفاده می‌شود، این گزینه به طور پیش‌فرض فعال نیست (برای جلوگیری از خطاهای پیونددهنده)، اما می‌توان آن را به طور صریح فعال کرد (در صورت استفاده از یک پیونددهنده کارآمد). .Sp برای x86 در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-freorder\-functions\fR 4 .IX Item "-freorder-functions" توابع را در فایل هدف (object file) به منظور بهبود محلی بودن کُد مرتب‌سازی مجدد می‌کند. بر خلاف \fB\-fipa\-reorder\-for\-locality\fR، این گزینه گروه‌بندی تمام توابع در یک دسته‌بندی خاص (hot/normal/cold/never\-executed) را در اولویت قرار می‌دهد. این کار با استفاده از زیربخش‌های ویژهٔ \f(CW\*(C`.text.hot\*(C'\fR برای پرتکرارترین توابع اجراشده و \f(CW\*(C`.text.unlikely\*(C'\fR برای توابعی که اجرای آن‌ها بعید است پیاده‌سازی شده است. مرتب‌سازی مجدد توسط پیونددهنده انجام می‌شود، بنابراین قالب فایل هدف باید از بخش‌های نام‌گذاری‌شده پشتیبانی کند و پیونددهنده باید آن‌ها را به شکلی معقول قرار دهد. .Sp این گزینه مؤثر نخواهد بود مگر اینکه بازخورد پروفایل‌سازی ارائه دهید (برای جزئیات به \fB\-fprofile\-arcs\fR مراجعه کنید) یا توابع را دستی با صفت‌های \&\f(CW\*(C`hot\*(C'\fR یا \f(CW\*(C`cold\*(C'\fR مشخص نمایید. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fstrict\-aliasing\fR 4 .IX Item "-fstrict-aliasing" به کامپایلر اجازه می‌دهد تا سخت‌گیرانه‌ترین قواعد نام مستعار (aliasing) متناسب با زبان در حال کامپایل را فرض کند. برای C (و ++C)، این گزینه بهینه‌سازی‌ها را بر اساس نوع عبارت‌ها فعال می‌سازد. به طور خاص، فرض می‌شود شیئی از یک نوع، هرگز در همان آدرس شیئی از نوع دیگر قرار ندارد، مگر اینکه انواع تقریباً یکسان باشند. برای مثال، یک \f(CW\*(C`unsigned int\*(C'\fR می‌تواند نام مستعار یک \f(CW\*(C`int\*(C'\fR باشد، اما نمی‌تواند برای \&\f(CW\*(C`void*\*(C'\fR یا یک \f(CW\*(C`double\*(C'\fR چنین باشد. یک نوع نویسه‌ای (character type) می‌تواند نام مستعار هر نوع دیگری باشد. .Sp به کُدهایی شبیه به این توجه ویژه داشته باشید: .Sp .Vb 4 \& union a_union { \& int i; \& double d; \& }; \& \& int f() { \& union a_union t; \& t.d = 3.0; \& return t.i; \& } .Ve .Sp رویکرد خواندن از عضوی از union متفاوت با عضوی که اخیراً در آن نوشته شده است (به نام "type\-punning") رایج است. حتی با \&\fB\-fstrict\-aliasing\fR نیز type\-punning مجاز است، به شرطی که دسترسی به حافظه از طریق نوعِ union انجام شود؛ بنابراین، کُد بالا طبق انتظار کار می‌کند. با این حال، کُد زیر ممکن است چنین نباشد: .Sp .Vb 7 \& int f() { \& union a_union t; \& int* ip; \& t.d = 3.0; \& ip = &t.i; \& return *ip; \& } .Ve .Sp به طور مشابه، دسترسی با گرفتن آدرس، تبدیل نوع (cast) اشاره‌گر حاصل و ارجاع‌زدایی (dereference) نتیجه، دارای رفتار تعریف‌نشده (undefined behavior) است، حتی اگر تبدیل نوع از نوعِ یک union استفاده کند، مانند: .Sp.Vb 4 \& int f() { \& double d = 3.0; \& return ((union a_union *) &d)\->i; \& } .Ve .Sp گزینهٔ \fB\-fstrict\-aliasing\fR در سطوح \&\fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fipa\-strict\-aliasing\fR 4 .IX Item "-fipa-strict-aliasing" کنترل می‌کند که آیا قواعد \fB\-fstrict\-aliasing\fR در سراسر مرزهای توابع اعمال شوند یا خیر. توجه داشته باشید که اگر چند تابع در یک تابع درون‌خطی (inline) شوند، دسترسی‌های حافظه دیگر به عنوان عبور از مرز تابع در نظر گرفته نمی‌شوند. .Sp گزینهٔ \fB\-fipa\-strict\-aliasing\fR به‌طور پیش‌فرض فعال است و تنها در ترکیب با \fB\-fstrict\-aliasing\fR اثرگذار خواهد بود. .IP \fB\-falign\-functions\fR 4 .IX Item "-falign-functions" .PD 0 .IP \fB\-falign\-functions=\fR\fIn\fR 4 .IX Item "-falign-functions=n" .IP \fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR 4 .IX Item "-falign-functions=n:m" .IP \fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4 .IX Item "-falign-functions=n:m:n2" .IP \fB\-falign\-functions=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4 .IX Item "-falign-functions=n:m:n2:m2" .PD شروع توابع را با نادیده گرفتن حداکثر \fIm\fR\-1 بایت، به توان دو بعدی بزرگ‌تر یا مساوی با \fIn\fR تراز می‌کند. این تضمین می‌کند که دست‌کم \fIm\fR بایت نخست تابع بتواند توسط پردازنده بدون گذر از مرز تراز \fIn\fR\-بایتی واکشی شود. این یک بهینه‌سازی در کارایی کد است و ترازسازی برای توابعی که سرد (cold) در نظر گرفته می‌شوند نادیده گرفته می‌شود. اگر ترازسازی برای همهٔ توابع نیاز است، از \fB\-fmin\-function\-alignment\fR استفاده کنید. .Sp اگر \fIm\fR مشخص نشده باشد، مقدار پیش‌فرض آن \fIn\fR خواهد بود. .Sp مثال‌ها: \fB\-falign\-functions=32\fR توابع را با مرز بعدی ۳۲\-بایتی تراز می‌کند، \&\fB\-falign\-functions=24\fR تنها در صورتی با مرز ۳۲\-بایتی بعدی تراز می‌کند که این کار با رد کردن ۲۳ بایت یا کمتر امکان‌پذیر باشد، و \&\fB\-falign\-functions=32:7\fR تنها در صورتی با مرز ۳۲\-بایتی بعدی تراز می‌کند که این کار با رد کردن ۶ بایت یا کمتر امکان‌پذیر باشد. .Sp جفت دوم مقادیر \fIn2\fR:\fIm2\fR به شما امکان می‌دهد یک ترازسازی ثانویه مشخص کنید: \fB\-falign\-functions=64:7:32:3\fR در صورتی که با رد کردن ۶ بایت یا کمتر امکان‌پذیر باشد با مرز ۶۴\-بایتی بعدی تراز می‌کند؛ در غیر این صورت، اگر با رد کردن ۲ بایت یا کمتر ممکن باشد، با مرز ۳۲\-بایتی بعدی تراز می‌کند. اگر \fIm2\fR مشخص نشده باشد، مقدار پیش‌فرض آن \fIn2\fR خواهد بود. .Sp برخی از اسمبلرها تنها زمانی از این پرچم پشتیبانی می‌کنند که \fIn\fR توانی از دو باشد؛ در این حالت، مقدار به بالا گرد می‌شود. .Sp \&\fB\-fno\-align\-functions\fR و \fB\-falign\-functions=1\fR معادل یکدیگر هستند و به این معنی‌اند که توابع تراز نمی‌شوند. .Sp اگر \fIn\fR مشخص نشده یا صفر باشد، از یک پیش‌فرض وابسته به ماشین استفاده می‌شود. حداکثر مقدار مجاز برای گزینهٔ \fIn\fR برابر با 65536 است. .Sp در سطوح \fB\-O2\fR و \fB\-O3\fR فعال است. .IP \fB\-flimit\-function\-alignment\fR 4 .IX Item "-flimit-function-alignment" اگر این گزینه فعال باشد، کامپایلر تلاش می‌کند از ترازسازی بیش از حد و غیرضروری توابع خودداری کند. این گزینه سعی می‌کند به اسمبلر دستور دهد به میزان مشخص‌شده در \&\fB\-falign\-functions\fR ترازسازی کند، اما بیشتر از اندازهٔ خود تابع بایت رد نکند. .IP \fB\-falign\-labels\fR 4 .IX Item "-falign-labels" .PD 0 .IP \fB\-falign\-labels=\fR\fIn\fR 4 .IX Item "-falign-labels=n" .IP \fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR 4 .IX Item "-falign-labels=n:m" .IP \fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4 .IX Item "-falign-labels=n:m:n2" .IP \fB\-falign\-labels=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4 .IX Item "-falign-labels=n:m:n2:m2" .PD تمام مقصدهای انشعاب (branch targets) را به مرز توان دو تراز می‌کند. .Sp پارامترهای این گزینه مشابه با گزینهٔ \fB\-falign\-functions\fR هستند. \&\fB\-fno\-align\-labels\fR و \fB\-falign\-labels=1\fR معادل هستند و به این معنی‌اند که برچسب‌ها تراز نمی‌شوند. .Sp اگر \fB\-falign\-loops\fR یا \fB\-falign\-jumps\fR قابل اعمال بوده و بزرگ‌تر از این مقدار باشند، مقادیر آن‌ها به جای این مقدار استفاده می‌شوند. .Sp اگر \fIn\fR مشخص نشده یا صفر باشد، از یک مقدار پیش‌فرض وابسته به ماشین استفاده می‌شود که به احتمال زیاد \fB1\fR خواهد بود، به معنای عدم ترازسازی. حداکثر مقدار مجاز برای گزینهٔ \fIn\fR برابر با 65536 است. .Sp در سطوح \fB\-O2\fR و \fB\-O3\fR فعال است. .IP \fB\-falign\-loops\fR 4 .IX Item "-falign-loops" .PD 0 .IP \fB\-falign\-loops=\fR\fIn\fR 4 .IX Item "-falign-loops=n" .IP \fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR 4 .IX Item "-falign-loops=n:m" .IP \fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4 .IX Item "-falign-loops=n:m:n2" .IP \fB\-falign\-loops=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4 .IX Item "-falign-loops=n:m:n2:m2" .PD حلقه‌ها را به یک مرز توان دو تراز می‌کند. اگر حلقه‌ها به دفعات زیادی اجرا شوند، این کار اثر منفی اجرای دستورالعمل‌های لایی‌گذاری ساختگی (dummy padding) را جبران می‌کند. این یک بهینه‌سازی در کارایی کد است و ترازسازی برای حلقه‌هایی که سرد (cold) در نظر گرفته می‌شوند نادیده گرفته می‌شود. .Sp اگر \fB\-falign\-labels\fR بزرگ‌تر از این مقدار باشد، مقدار آن به جای این مقدار استفاده خواهد شد. .Sp پارامترهای این گزینه مشابه گزینهٔ \fB\-falign\-functions\fR هستند. \&\fB\-fno\-align\-loops\fR و \fB\-falign\-loops=1\fR معادل یکدیگر هستند و به این معنی‌اند که حلقه‌ها تراز نمی‌شوند. حداکثر مقدار مجاز برای گزینهٔ \fIn\fR برابر با 65536 است. .Sp اگر \fIn\fR مشخص نشده یا صفر باشد، از یک پیش‌فرض وابسته به ماشین استفاده می‌شود. .Sp در سطوح \fB\-O2\fR و \fB\-O3\fR فعال است. .IP \fB\-falign\-jumps\fR 4 .IX Item "-falign-jumps" .PD 0 .IP \fB\-falign\-jumps=\fR\fIn\fR 4 .IX Item "-falign-jumps=n" .IP \fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR 4 .IX Item "-falign-jumps=n:m" .IP \fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR 4 .IX Item "-falign-jumps=n:m:n2" .IP \fB\-falign\-jumps=\fR\fIn\fR\fB:\fR\fIm\fR\fB:\fR\fIn2\fR\fB:\fR\fIm2\fR 4 .IX Item "-falign-jumps=n:m:n2:m2" .PD مقصدهای انشعاب را به یک مرز توان دو تراز می‌کند؛ برای مقصدهایی که تنها از طریق پرش می‌توان به آن‌ها رسید. در این حالت، هیچ دستورالعمل ساختگی نیازی به اجرا ندارد. این یک بهینه‌سازی در کارایی کد است و ترازسازی برای پرش‌هایی که سرد (cold) در نظر گرفته می‌شوند نادیده گرفته می‌شود. .Sp اگر \fB\-falign\-labels\fR بزرگ‌تر از این مقدار باشد، مقدار آن به جای این مقدار استفاده خواهد شد. .Sp پارامترهای این گزینه مشابه گزینهٔ \fB\-falign\-functions\fR هستند. \&\fB\-fno\-align\-jumps\fR و \fB\-falign\-jumps=1\fR معادل یکدیگر هستند و به این معنی‌اند که پرش‌ها تراز نمی‌شوند. .Sp اگر \fIn\fR مشخص نشده یا صفر باشد، از یک پیش‌فرض وابسته به ماشین استفاده می‌شود. حداکثر مقدار مجاز برای گزینهٔ \fIn\fR برابر با 65536 است. .Sp در سطوح \fB\-O2\fR و \fB\-O3\fR فعال است. .IP \fB\-fmin\-function\-alignment\fR 4 .IX Item "-fmin-function-alignment" حداقل هم‌ترازی توابع را با توان دو بعدی بزرگ‌تر یا مساوی با \fIn\fR تعیین می‌کند. برخلاف \fB\-falign\-functions\fR این هم‌ترازی برای تمام توابع (حتی آن‌هایی که سرد در نظر گرفته شده‌اند) اعمال می‌شود. این هم‌ترازی همچنین تحت تأثیر \&\fB\-flimit\-function\-alignment\fR قرار نمی‌گیرد. .IP \fB\-fno\-allocation\-dce\fR 4 .IX Item "-fno-allocation-dce" تخصیص‌های استفاده‌نشده در ++C (با استفاده از عملگرهای \f(CW\*(C`new\*(C'\fR و \f(CW\*(C`delete\*(C'\fR) را در حذف کدهای مرده (dead code elimination) پاک نمی‌کند. .Sp همچنین \fB\-fmalloc\-dce\fR را ببینید. .IP \fB\-fallow\-store\-data\-races\fR 4 .IX Item "-fallow-store-data-races" به کامپایلر اجازه می‌دهد بهینه‌سازی‌هایی را انجام دهد که ممکن است باعث ایجاد رقابت‌های داده‌ای (data races) جدید در عملیات ذخیره‌سازی (stores) شوند، بدون آنکه اثبات کند متغیر نمی‌تواند هم‌زمان توسط ریسمان‌های دیگر مورد دسترسی قرار گیرد. بر بهینه‌سازی داده‌های محلی تأثیری ندارد. استفاده از این گزینه در صورتی ایمن است که مشخص باشد داده‌های سراسری توسط چندین ریسمان دسترسی نخواهند شد. .Sp نمونه‌هایی از بهینه‌سازی‌های فعال‌شده توسط \fB\-fallow\-store\-data\-races\fR شامل بالاکشی (hoisting) یا تبدیل‌های شرطی (if-conversions) است که ممکن است باعث شوند مقداری که هم‌اکنون در حافظه بوده مجدداً با همان مقدار بازنویسی شود. چنین بازنویسی‌ای در یک زمینهٔ تک‌ریسمانی ایمن است اما ممکن است در یک زمینهٔ چندریسمانی ناامن باشد. توجه داشته باشید که در برخی پردازنده‌ها، تبدیل‌های شرطی ممکن است برای فعال‌سازی برداری‌سازی (vectorization) الزامی باشند. .Sp در سطح \fB\-Ofast\fR فعال است..IP \fB\-funit\-at\-a\-time\fR 4 .IX Item "-funit-at-a-time" این گزینه به دلایل سازگاری باقی مانده است. \fB\-funit\-at\-a\-time\fR هیچ تأثیری ندارد، در حالی که \fB\-fno\-unit\-at\-a\-time\fR به معنای فعال شدن \&\fB\-fno\-toplevel\-reorder\fR و \fB\-fno\-section\-anchors\fR است. .Sp به‌طور پیش‌فرض فعال است. .IP \fB\-fno\-toplevel\-reorder\fR 4 .IX Item "-fno-toplevel-reorder" توابع، متغیرها و دستورات \f(CW\*(C`asm\*(C'\fR در سطح بالا (top\-level) را بازترتیب نکن. آن‌ها را با همان ترتیبی که در فایل ورودی ظاهر شده‌اند خروجی بده. هنگامی که این گزینه استفاده می‌شود، متغیرهای ایستا (static) که به آن‌ها ارجاعی داده نشده حذف نمی‌شوند. این گزینه برای پشتیبانی از کدهای موجود که به ترتیب خاصی وابسته هستند در نظر گرفته شده است. برای کدهای جدید، بهتر است در صورت امکان از ویژگی‌ها (attributes) استفاده شود. .Sp گزینهٔ \&\fB\-ftoplevel\-reorder\fR در \fB\-O1\fR و بالاتر، و همچنین در \fB\-O0\fR اگر \fB\-fsection\-anchors\fR صراحتاً درخواست شده باشد، پیش‌فرض است. علاوه بر این، \&\fB\-fno\-toplevel\-reorder\fR مستلزم \&\fB\-fno\-section\-anchors\fR است. .IP \fB\-funreachable\-traps\fR 4 .IX Item "-funreachable-traps" با این گزینه، کامپایلر فراخوانی‌های \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR را به جای استفاده برای بهینه‌سازی، به تله‌ها (traps) تبدیل می‌کند. این موضوع بر تمام این‌گونه فراخوانی‌ها که به صورت ضمنی توسط کامپایلر تولید می‌شوند نیز تأثیر می‌گذارد. .Sp این گزینه همان اثر \fB\-fsanitize=unreachable \&\-fsanitize\-trap=unreachable\fR را دارد، اما مقادیر آن گزینه‌ها را تغییر نمی‌دهد. اگر \fB\-fsanitize=unreachable\fR فعال باشد، آن گزینه بر این یکی اولویت دارد. .Sp این گزینه به‌طور پیش‌فرض در \fB\-O0\fR و \fB\-Og\fR فعال است. .IP \fB\-fweb\fR 4 .IX Item "-fweb" تارهایی (webs) ایجاد می‌کند که معمولاً برای تخصیص ثبات‌ها استفاده می‌شوند و به هر تار یک ثبات شبه‌کد (pseudo register) مجزا تخصیص می‌دهد. این کار به مرحلهٔ تخصیص ثبات اجازه می‌دهد تا مستقیماً روی pseudoها عمل کند، اما چند مرحلهٔ بهینه‌سازی دیگر مانند CSE، بهینه‌ساز حلقه و حذف‌کنندهٔ کدهای مردهٔ بدیهی را نیز تقویت می‌کند. با این حال، می‌تواند اشکال‌زدایی را غیرممکن کند، زیرا متغیرها دیگر در یک «ثبات خانگی» باقی نمی‌مانند. .Sp به‌طور پیش‌فرض با \fB\-funroll\-loops\fR فعال است. .IP \fB\-fwhole\-program\fR 4 .IX Item "-fwhole-program" فرض می‌کند واحد کامپایل فعلی، کل برنامه‌ای است که در حال کامپایل است. تمام توابع و متغیرهای عمومی به استثنای \f(CW\*(C`main\*(C'\fR و مواردی که با ویژگی \&\f(CW\*(C`externally_visible\*(C'\fR مشخص شده‌اند، به توابع ایستا تبدیل می‌شوند و در عمل با تهاجم بیشتری توسط بهینه‌سازهای بین‌روالی بهینه‌سازی می‌گردند. .Sp با \fB\-flto\fR این گزینه کاربرد محدودی دارد. در بیشتر موارد، فهرست دقیق نمادهای استفاده‌شده یا صادرشده از باینری، از طریق اطلاعات تفکیک‌پذیری که توسط افزونهٔ پیونددهنده به بهینه‌ساز زمان پیوند ارسال می‌شود، مشخص است. این گزینه همچنان زمانی که هیچ افزونهٔ پیونددهنده‌ای استفاده نمی‌شود، یا در طول مرحلهٔ پیوند تدریجی هنگام تولید کد نهایی (با \fB\-flto\fR \&\fB\-flinker\-output=nolto\-rel\fR) مفید است. .IP \fB\-flto[=\fR\fIn\fR\fB]\fR 4 .IX Item "-flto[=n]" این گزینه بهینه‌ساز استاندارد زمان پیوند (LTO) را اجرا می‌کند. هنگام فراخوانی با کد منبع، نمایش GIMPLE (یکی از نمایش‌های داخلی GCC) را تولید کرده و آن را در بخش‌های ویژهٔ ELF در فایل شیء می‌نویسد. هنگامی که فایل‌های شیء به یکدیگر پیوند داده می‌شوند، تمام بدنهٔ توابع از این بخش‌های ELF خوانده شده و طوری نمونه‌سازی می‌شوند که گویی بخشی از یک واحد ترجمهٔ یکسان بوده‌اند. .Sp برای استفاده از بهینه‌ساز زمان پیوند، \fB\-flto\fR و گزینه‌های بهینه‌سازی باید در زمان کامپایل و در طول پیوند نهایی مشخص شوند. توصیه می‌شود تمام فایل‌های دخیل در یک پیوند را با گزینه‌های یکسان کامپایل کنید و آن گزینه‌ها را در زمان پیوند نیز مشخص نمایید. برای مثال: .Sp .Vb 3 \& gcc \-c \-O2 \-flto foo.c \& gcc \-c \-O2 \-flto bar.c \& gcc \-o myprog \-flto \-O2 foo.o bar.o .Ve .Sp دو فراخوانی نخست GCC، یک نمایش بایت‌کد از GIMPLE را در بخش‌های ویژهٔ ELF در درون \&\fIfoo.o\fR و \&\fIbar.o\fR ذخیره می‌کنند. فراخوانی نهایی، بایت‌کد GIMPLE را از \&\fIfoo.o\fR و \fIbar.o\fR می‌خواند، دو فایل را در یک تصویر داخلی ادغام می‌کند و نتیجه را مانند معمول کامپایل می‌نماید. از آنجا که هر دو فایل \fIfoo.o\fR و \&\fIbar.o\fR در یک تصویر واحد ادغام شده‌اند، این امر باعث می‌شود تمام تحلیل‌ها و بهینه‌سازی‌های بین‌روالی در GCC در سراسر هر دو فایل طوری کار کنند که گویی یک فایل واحد هستند. برای مثال، این بدان معناست که درخط‌کننده (inliner) می‌تواند توابع موجود در \fIbar.o\fR را در توابع موجود در \fIfoo.o\fR و برعکس، درون‌خط (inline) کند. .Sp یک روش دیگر (و ساده‌تر) برای فعال‌سازی بهینه‌سازی زمان پیوند عبارت است از: .Sp .Vb 1 \& gcc \-o myprog \-flto \-O2 foo.c bar.c .Ve .Sp دستور بالا برای \fIfoo.c\fR و \fIbar.c\fR بایت‌کد تولید می‌کند، آن‌ها را در یک نمایش GIMPLE واحد ادغام کرده و طبق معمول بهینه‌سازی می‌کند تا \fImyprog\fR تولید شود. .Sp نکتهٔ مهمی که باید به خاطر داشت این است که برای فعال‌سازی بهینه‌سازی‌های زمان پیوند، لازم است از راه‌انداز GCC برای انجام مرحلهٔ پیوند استفاده کنید. اگر هر یک از اشیاء دخیل با گزینهٔ خط فرمانی \fB\-flto\fR کامپایل شده باشند، GCC به‌طور خودکار بهینه‌سازی زمان پیوند را انجام می‌دهد. شما همیشه می‌توانید تصمیم خودکار برای انجام بهینه‌سازی زمان پیوند را با ارسال \fB\-fno\-lto\fR به دستور پیوند بازنویسی (override) کنید. .Sp برای اثربخشی بهینه‌سازی کل برنامه، لازم است فرضیات مشخصی دربارهٔ کل برنامه در نظر گرفته شود. کامپایلر باید بداند چه توابع و متغیرهایی ممکن است توسط کتابخانه‌ها و زمان‌اجرا در خارج از واحد بهینه‌سازی‌شده در زمان پیوند مورد دسترسی قرار گیرند. در صورت پشتیبانی توسط پیونددهنده، افزونهٔ پیونددهنده (ببینید: \fB\-fuse\-linker\-plugin\fR) اطلاعات مربوط به نمادهای استفاده‌شده و نمادهای از بیرون قابل مشاهده را به کامپایلر ارسال می‌کند. در صورتی که افزونهٔ پیونددهنده در دسترس نباشد، باید از \fB\-fwhole\-program\fR استفاده شود تا به کامپایلر اجازه دهد این فرضیات را اتخاذ کند، که این امر به تصمیمات بهینه‌سازی تهاجمی‌تری منجر می‌شود. .Sp هنگامی که یک فایل با \fB\-flto\fR و بدون \&\fB\-fuse\-linker\-plugin\fR کامپایل می‌شود، فایل شیء تولیدشده از یک فایل شیء معمولی بزرگ‌تر است زیرا شامل بایت‌کدهای GIMPLE و کد نهایی معمول است (ببینید: \fB\-ffat\-lto\-objects\fR). این بدان معناست که فایل‌های شیء حاوی اطلاعات LTO را می‌توان به عنوان فایل‌های شیء عادی پیوند داد؛ اگر \fB\-fno\-lto\fR به پیونددهنده ارسال شود، هیچ بهینه‌سازی بین‌روالی اعمال نمی‌شود. توجه داشته باشید که با فعال بودن \&\fB\-fno\-fat\-lto\-objects\fR مرحلهٔ کامپایل سریع‌تر است، اما نمی‌توانید یک پیوند معمولی و غیر LTO روی آن‌ها انجام دهید. .Sp هنگام تولید باینری نهایی، GCC بهینه‌سازی‌های زمان پیوند را تنها روی فایل‌هایی اعمال می‌کند که حاوی بایت‌کد هستند. بنابراین، می‌توانید فایل‌های شیء و کتابخانه‌ها را با بایت‌کدهای GIMPLE و کدهای شیء نهایی ترکیب کنید. GCC به‌طور خودکار انتخاب می‌کند که کدام فایل‌ها در حالت LTO بهینه‌سازی شوند و کدام فایل‌ها بدون پردازش بیشتر پیوند داده شوند. .Sp به‌طور کلی، گزینه‌های مشخص‌شده در زمان پیوند، بر گزینه‌های تعیین‌شده در زمان کامپایل اولویت دارند، هرچند در برخی موارد GCC تلاش می‌کند گزینه‌های زمان پیوند را از تنظیمات به‌کاررفته در کامپایل فایل‌های ورودی استنتاج کند. .Sp اگر گزینهٔ سطح بهینه‌سازی \fB\-O\fR را در زمان پیوند مشخص نکنید، GCC از بالاترین سطح بهینه‌سازی استفاده‌شده در هنگام کامپایل فایل‌های شیء استفاده می‌کند. توجه داشته باشید که مشخص کردن گزینهٔ سطح بهینه‌سازی صرفاً در زمان پیوند و نه در زمان کامپایل، عموماً به دو دلیل بی‌اثر است. نخست، کامپایل بدون بهینه‌سازی مراحلی از کامپایلر را که اطلاعات لازم برای بهینه‌سازی مؤثر در زمان پیوند را جمع‌آوری می‌کنند، غیرفعال می‌کند. دوم، برخی از مراحل اولیهٔ بهینه‌سازی تنها در زمان کامپایل قابل انجام هستند و در زمان پیوند امکان‌پذیر نیستند. .Sp برخی از پرچم‌های تولید کد وجود دارند که GCC هنگام تولید بایت‌کدها آن‌ها را حفظ می‌کند، زیرا باید در طول پیوند نهایی استفاده شوند. در حال حاضر، گزینه‌های زیر و تنظیمات آن‌ها از اولین فایل شیئی که صراحتاً آن‌ها را مشخص کرده باشد گرفته می‌شوند: \&\fB\-fcommon\fR، \fB\-fexceptions\fR، \fB\-fnon\-call\-exceptions\fR، \&\fB\-fgnu\-tm\fR و تمام پرچم‌های هدف \fB\-m\fR. .Sp گزینه‌های \fB\-fPIC\fR، \fB\-fpic\fR، \fB\-fpie\fR و \&\fB\-fPIE\fR بر اساس طرح زیر ترکیب می‌شوند: .Sp .Vb 6 \& B<\-fPIC> + B<\-fpic> = B<\-fpic> \& B<\-fPIC> + B<\-fno\-pic> = B<\-fno\-pic> \& B<\-fpic/\-fPIC> + (no option) = (no option) \& B<\-fPIC> + B<\-fPIE> = B<\-fPIE> \& B<\-fpic> + B<\-fPIE> = B<\-fpie> \& B<\-fPIC/\-fpic> + B<\-fpie> = B<\-fpie> .Ve .Sp برخی از پرچم‌های تغییردهندهٔ ABI باید در تمام واحدهای کامپایل یکسان باشند، و تلاش برای نادیده گرفتن این مورد در زمان پیوند با یک مقدار متناقض، نادیده گرفته می‌شود. این شامل گزینه‌هایی مانند \fB\-freg\-struct\-return\fR و \fB\-fpcc\-struct\-return\fR است. .Sp گزینه‌های دیگر مانند \fB\-ffp\-contract\fR، \fB\-fno\-strict\-overflow\fR، \&\fB\-fwrapv\fR، \fB\-fno\-trapv\fR یا \fB\-fno\-strict\-aliasing\fR به مرحلهٔ پیوند منتقل شده و برای واحدهای ترجمهٔ متناقض به‌طور محافظه‌کارانه‌ای ادغام می‌شوند. به‌طور مشخص \&\fB\-fno\-strict\-overflow\fR، \fB\-fwrapv\fR و \&\fB\-fno\-trapv\fR اولویت دارند؛ و برای مثال \fB\-ffp\-contract=off\fR بر \fB\-ffp\-contract=fast\fR اولویت دارد. می‌توانید آن‌ها را در زمان پیوند بازنویسی کنید. .Sp گزینه‌های تشخیصی مانند \fB\-Wstringop\-overflow\fR به مرحلهٔ پیوند منتقل می‌شوند و تنظیمات آن‌ها با مرحلهٔ کامپایل در سطح دانه‌بندی تابع تطابق دارد. توجه داشته باشید که این موضوع فقط برای هشدارهایی که در طول بهینه‌سازی صادر می‌شوند اهمیت دارد. دقت کنید که تبدیلات کد مانند درون‌خط‌سازی (inlining) می‌تواند باعث فعال یا غیرفعال شدن هشدارها برای بخش‌هایی از کد شود، به گونه‌ای که با تنظیمات زمان کامپایل سازگار نباشد. .Sp هنگامی که لازم است گزینه‌ها را از طریق \fB\-Wa\fR یا \&\fB\-Xassembler\fR به اسمبلر ارسال کنید، مطمئن شوید که چنین واحدهای ترجمه‌ای را با \fB\-fno\-lto\fR کامپایل کرده‌اید یا به‌طور یکنواخت از همان گزینه‌های اسمبلر در تمام واحدهای ترجمه استفاده کنید. به عنوان یک روش جایگزین، می‌توانید گزینه‌های اسمبلر را در زمان پیوند LTO نیز مشخص نمایید. .Sp برای فعال‌سازی تولید اطلاعات اشکال‌زدایی، باید \fB\-g\fR را در زمان کامپایل ارائه دهید. اگر هر یک از فایل‌های ورودی در زمان پیوند با فعال بودن تولید اطلاعات اشکال‌زدایی ساخته شده باشند، پیوند نیز تولید اطلاعات اشکال‌زدایی را فعال خواهد کرد. هرگونه تنظیمات پیشرفتهٔ اطلاعات اشکال‌زدایی مانند سطح dwarf در \fB\-gdwarf\-5\fR باید صراحتاً در خط فرمان پیونددهنده تکرار شود و ترکیب تنظیمات مختلف در واحدهای ترجمهٔ گوناگون توصیه نمی‌شود. .Sp اگر LTO با اشیائی با پیوند C مواجه شود که با انواع ناسازگار در واحدهای ترجمهٔ جداگانه اعلان شده‌اند تا به یکدیگر پیوند داده شوند (رفتار تعریف‌نشده بر اساس ISO C99 6.2.7)، ممکن است یک پیام تشخیصی غیرکشنده صادر شود. رفتار برنامه در زمان اجرا همچنان تعریف‌نشده باقی می‌ماند. هشدارهای تشخیصی مشابهی ممکن است برای زبان‌های دیگر نیز صادر شود. .Sp یکی دیگر از قابلیت‌های LTO این است که می‌توان بهینه‌سازی‌های بین‌روالی را روی فایل‌هایی که با زبان‌های متفاوتی نوشته شده‌اند اعمال کرد: .Sp.Vb 4 \& gcc \-c \-flto foo.c \& g++ \-c \-flto bar.cc \& gfortran \-c \-flto baz.f90 \& g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran .Ve .Sp توجه داشته باشید که پیوند نهایی با \fBg++\fR انجام می‌شود تا کتابخانه‌های زمان اجرای ++C دریافت شوند و \fB\-lgfortran\fR برای دریافت کتابخانه‌های زمان اجرای Fortran اضافه شده است. به‌طور کلی، هنگام ترکیب زبان‌ها در حالت LTO، باید از همان گزینه‌های دستور پیوند استفاده کنید که هنگام ترکیب زبان‌ها در یک کامپایل عادی (غیر\-LTO) استفاده می‌کنید. .Sp اگر فایل‌های شیء حاوی بایت‌کد GIMPLE در یک بایگانی کتابخانه، مثلاً \&\fIlibfoo.a\fR، ذخیره شده باشند، در صورتی که از یک پیونددهنده با پشتیبانی از افزونه استفاده کنید، امکان استخراج و استفاده از آن‌ها در پیوند LTO وجود دارد. برای ایجاد کتابخانه‌های ایستا مناسب برای LTO، از \fBgcc\-ar\fR و \fBgcc\-ranlib\fR به جای \fBar\fR و \fBranlib\fR استفاده کنید؛ برای نمایش نمادهای فایل‌های شیء دارای بایت‌کد GIMPLE، از \&\fBgcc\-nm\fR استفاده کنید. این دستورها نیازمند آن هستند که \fBar\fR، \fBranlib\fR و \fBnm\fR با پشتیبانی از افزونه کامپایل شده باشند. در زمان پیوند، از پرچم \fB\-fuse\-linker\-plugin\fR استفاده کنید تا اطمینان حاصل شود که کتابخانه در فرایند بهینه‌سازی LTO شرکت می‌کند: .Sp .Vb 1 \& gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo .Ve .Sp با فعال بودن افزونه پیونددهنده، پیونددهنده فایل‌های GIMPLE مورد نیاز را از \fIlibfoo.a\fR استخراج کرده و آن‌ها را به GCC در حال اجرا تحویل می‌دهد تا آن‌ها را به بخشی از تصویر تجمیع‌شده GIMPLE برای بهینه‌سازی تبدیل کند. .Sp اگر از پیونددهنده‌ای با پشتیبانی از افزونه استفاده نمی‌کنید و/یا افزونه پیونددهنده را فعال نکرده‌اید، اشیاء درون \fIlibfoo.a\fR طبق روال معمول استخراج و پیوند داده می‌شوند، اما در فرایند بهینه‌سازی LTO شرکت نمی‌کنند. برای اینکه یک کتابخانه ایستا هم برای بهینه‌سازی LTO و هم پیوند معمول مناسب باشد، فایل‌های شیء آن را با \&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR کامپایل کنید. .Sp بهینه‌سازی‌های زمان پیوند برای عمل کردن نیازی به حضور کل برنامه ندارند. اگر برنامه نیازی به برون‌ریزی هیچ نمادی نداشته باشد، می‌توان \fB\-flto\fR و \fB\-fwhole\-program\fR را ترکیب کرد تا به بهینه‌سازهای بین‌روالی اجازه دهد از فرضیات تهاجمی‌تری استفاده کنند که ممکن است به فرصت‌های بهینه‌سازی بهتری منجر شود. زمانی که افزونه پیونددهنده فعال است، نیازی به استفاده از \fB\-fwhole\-program\fR نیست (نگاه کنید به \fB\-fuse\-linker\-plugin\fR). .Sp پیاده‌سازی فعلی LTO هیچ تلاشی برای تولید بایت‌کدی که بین انواع مختلف میزبان‌ها قابل‌حمل باشد نمی‌کند. فایل‌های بایت‌کد نسخه‌بندی شده‌اند و بررسی دقیق نسخه وجود دارد، بنابراین فایل‌های بایت‌کد تولیدشده در یک نسخه از GCC با نسخه قدیمی‌تر یا جدیدتر GCC کار نمی‌کنند. .Sp بهینه‌سازی زمان پیوند در سیستم‌هایی به جز آن‌هایی که از ترکیب ELF و DWARF استفاده می‌کنند، به‌خوبی با تولید اطلاعات اشکال‌زدایی کار نمی‌کند. .Sp اگر مقدار اختیاری \fIn\fR را مشخص کنید، بهینه‌سازی و تولید کد انجام‌شده در زمان پیوند با استفاده از برنامه نصب‌شده \fBmake\fR و از طریق \fIn\fR کار موازی به‌صورت هم‌روند اجرا می‌شود. متغیر محیطی \fBMAKE\fR می‌تواند برای لغو و جایگزینی برنامه استفاده‌شده به کار رود. .Sp همچنین می‌توانید \fB\-flto=jobserver\fR را برای استفاده از حالت job server مربوط به GNU make جهت تعیین تعداد کارهای موازی مشخص کنید. این مورد زمانی مفید است که Makefile فراخواننده GCC از قبل به‌صورت موازی در حال اجرا باشد. برای اینکه این قابلیت کار کند، باید یک \fB+\fR به ابتدای دستور در Makefile والد اضافه کنید. این گزینه احتمالاً تنها در صورتی کار می‌کند که \fBMAKE\fR همان GNU make باشد. حتی بدون این مقدار گزینه، GCC تلاش می‌کند به‌طور خودکار سرور وظیفه در حال اجرای GNU make را شناسایی کند. .Sp از \fB\-flto=auto\fR برای استفاده از job server در GNU make (در صورت در دسترس بودن) استفاده کنید، یا در غیر این صورت به شناسایی خودکار تعداد ریسه‌های CPU موجود در سیستم شما بازمی‌گردد. .IP \fB\-flto\-partition=\fR\fIalg\fR 4 .IX Item "-flto-partition=alg" الگوریتم پارتیشن‌بندی مورد استفاده توسط بهینه‌ساز زمان پیوند را مشخص می‌کند. این مقدار می‌تواند \fB1to1\fR برای مشخص کردن پارتیشن‌بندی متناظر با فایل‌های منبع اصلی، یا \fBbalanced\fR برای مشخص کردن پارتیشن‌بندی به تکه‌هایی با اندازه برابر (تا حد امکان)، یا \fBmax\fR برای ایجاد پارتیشن جدید برای هر نماد در صورت امکان، یا \fBcache\fR برای متعادل کردن اندازه تکه‌ها در عین نگه‌داشتن نمادهای مرتبط در کنار هم جهت حافظه‌نهان‌سازی بهتر در LTO افزایشی باشد. مشخص کردن \fBnone\fR به عنوان الگوریتم، پارتیشن‌بندی و استریمینگ را به‌طور کامل غیرفعال می‌کند. مقدار پیش‌فرض \fBbalanced\fR است. در حالی که \fB1to1\fR می‌تواند به عنوان یک راهکار موقت برای مشکلات مختلف ترتیب کد استفاده شود، پارتیشن‌بندی \fBmax\fR تنها برای آزمایش‌های داخلی در نظر گرفته شده است. مقدار \fBone\fR مشخص می‌کند که دقیقاً یک پارتیشن باید استفاده شود، در حالی که مقدار \fBnone\fR پارتیشن‌بندی را دور می‌زند و مرحله بهینه‌سازی زمان پیوند را مستقیماً از فاز WPA اجرا می‌کند. .IP \fB\-flto\-incremental=\fR\fIpath\fR 4 .IX Item "-flto-incremental=path" فعال‌سازی LTO افزایشی، با ذخیره حافظه نهان آن در دایرکتوری موجود مشخص‌شده. این کار می‌تواند چرخه‌های ویرایش\-کامپایل را با LTO به‌میزان قابل‌توجهی کوتاه کند. .Sp هنگامی که همراه با LTO (\fB\-flto\fR) استفاده شود، خروجی واحدهای ترجمه در داخل LTO در حافظه نهان ذخیره می‌شود. واحدهای ترجمه ذخیره‌شده در حافظه نهان هنگام کامپایل مجدد با تغییرات کوچک در کد به احتمال زیاد دوباره استفاده می‌شوند که به کاهش زمان کامپایل مجدد می‌انجامد. .Sp چندین نمونه از GCC می‌توانند به‌طور موازی از یک حافظه نهان یکسان استفاده کنند. .IP \fB\-flto\-incremental\-cache\-size=\fR\fIn\fR 4 .IX Item "-flto-incremental-cache-size=n" تعداد مدخل‌های حافظه نهان در LTO افزایشی را مشخص می‌کند که پس از رسیدن به آن، مدخل‌های قدیمی هرس می‌شوند. این یک حد نرم است و ممکن است موقتاً ورودی‌های بیشتری وجود داشته باشد. .IP \fB\-flto\-compression\-level=\fR\fIn\fR 4 .IX Item "-flto-compression-level=n" این گزینه سطح فشرده‌سازی مورد استفاده برای زبان واسط نوشته‌شده در فایل‌های شیء LTO را مشخص می‌کند و تنها همراه با حالت LTO (\fB\-flto\fR) معنادار است. در حال حاضر GCC از دو الگوریتم فشرده‌سازی LTO پشتیبانی می‌کند. برای zstd، مقادیر معتبر از 0 (بدون فشرده‌سازی) تا 19 (حداکثر فشرده‌سازی) است، در حالی که zlib از مقادیر 0 تا 9 پشتیبانی می‌کند. مقادیر خارج از این محدوده به کمینه یا بیشینه مقادیر پشتیبانی‌شده محدود می‌شوند. اگر گزینه داده نشود، یک تنظیم فشرده‌سازی متوازن پیش‌فرض استفاده می‌شود. .IP \fB\-fuse\-linker\-plugin\fR 4 .IX Item "-fuse-linker-plugin" استفاده از افزونه پیونددهنده را در طول بهینه‌سازی زمان پیوند فعال می‌کند. این گزینه به پشتیبانی از افزونه در پیونددهنده متکی است که در gold یا در GNU ld 2.21 یا جدیدتر در دسترس است. .Sp این گزینه استخراج فایل‌های شیء حاوی بایت‌کد GIMPLE را از بایگانی‌های کتابخانه فعال می‌کند. این امر با نمایان ساختن کد بیشتری برای بهینه‌ساز زمان پیوند، کیفیت بهینه‌سازی را بهبود می‌بخشد. این اطلاعات مشخص می‌کند چه نمادهایی می‌توانند به‌صورت خارجی قابل دسترسی باشند (توسط شیء غیر\-LTO یا در طول پیوند پویا). بهبودهای حاصل در کیفیت کد روی باینری‌ها (و کتابخانه‌های اشتراکی که از دید پنهان استفاده می‌کنند) مشابه \fB\-fwhole\-program\fR است. برای توضیحی درباره اثر این پرچم و نحوه استفاده از آن، \fB\-flto\fR را ببینید. .Sp این گزینه به‌طور پیش‌فرض فعال است هنگامی که پشتیبانی LTO در GCC فعال باشد و GCC برای استفاده با یک پیونددهنده پشتیبانی‌کننده از افزونه‌ها (GNU ld 2.21 یا جدیدتر، یا gold) پیکربندی شده باشد. .IP \fB\-ffat\-lto\-objects\fR 4 .IX Item "-ffat-lto-objects" اشیاء Fat LTO فایل‌های شیئی هستند که هم زبان واسط و هم کد شیء را شامل می‌شوند. این کار آن‌ها را هم برای پیوند LTO و هم پیوند معمولی قابل استفاده می‌کند. این گزینه تنها در زمان کامپایل با \fB\-flto\fR مؤثر است و در زمان پیوند نادیده گرفته می‌شود. .Sp گزینه \&\fB\-fno\-fat\-lto\-objects\fR زمان کامپایل را نسبت به LTO ساده بهبود می‌بخشد، اما نیازمند آن است که کل زنجیره ابزار از LTO آگاه باشد. این گزینه برای عملکرد پایه‌ای به پیونددهنده‌ای با پشتیبانی از افزونه پیونددهنده نیاز دارد. علاوه بر این، \&\fBnm\fR، \fBar\fR و \fBranlib\fR باید از افزونه‌های پیونددهنده پشتیبانی کنند تا یک محیط ساخت با امکانات کامل (توانا در ساخت کتابخانه‌های ایستا و غیره) فراهم شود. GCC بسته‌بندهای \&\fBgcc\-ar\fR، \&\fBgcc\-nm\fR و \fBgcc\-ranlib\fR را برای ارسال گزینه‌های مناسب به این ابزارها فراهم می‌کند. با LTO غیر حجیم، پرونده‌های ساخت باید برای استفاده از آن‌ها اصلاح شوند. .Sp توجه داشته باشید که binutils مدرن سازوکار بارگذاری خودکار افزونه را فراهم می‌کند. نصب افزونه پیونددهنده در \fR\f(CI$libdir\fR\fI/bfd\-plugins\fR اثری مشابه با استفاده از بسته‌بندهای دستور (\fBgcc\-ar\fR، \fBgcc\-nm\fR و \&\fBgcc\-ranlib\fR) دارد. .Sp پیش‌فرض در مقصدهای دارای پشتیبانی از افزونه پیونددهنده، \fB\-fno\-fat\-lto\-objects\fR است. .IP \fB\-fcompare\-elim\fR 4 .IX Item "-fcompare-elim" پس از تخصیص ثبات و تفکیک دستورالعمل پس از تخصیص ثبات، دستورالعمل‌های حسابی را شناسایی می‌کند که پرچم‌های پردازنده را مشابه یک عملیات مقایسه بر اساس آن حساب محاسبه می‌کنند. در صورت امکان، عملیات مقایسه صریح را حذف می‌کند. .Sp این گذر فقط برای مقصدهای خاصی اعمال می‌شود که نمی‌توانند عملیات مقایسه را پیش از اتمام تخصیص ثبات به‌صورت صریح نمایش دهند. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR، \fB\-Os\fR فعال می‌شود. .IP \fB\-ffold\-mem\-offsets\fR 4 .IX Item "-ffold-mem-offsets" .PD 0 .IP \fB\-fno\-fold\-mem\-offsets\fR 4 .IX Item "-fno-fold-mem-offsets" .PD تلاش می‌کند دستورالعمل‌های add را با ادغام آن‌ها در بارگذاری‌ها/ذخیره‌سازی‌های حافظه حذف کند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR فعال می‌شود. .IP \fB\-fcprop\-registers\fR 4 .IX Item "-fcprop-registers" پس از تخصیص ثبات و تفکیک دستورالعمل پس از تخصیص ثبات، یک گذر انتشار رونوشت را اجرا می‌کند تا وابستگی‌های زمان‌بندی را کاهش داده و در مواردی رونوشت را حذف کند. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR، \fB\-Os\fR فعال می‌شود..IP \fB\-fprofile\-correction\fR 4 .IX Item "-fprofile-correction" پروفایل‌های جمع‌آوری‌شده با استفاده از دودویی سنجش‌شده (instrumented binary) برای برنامه‌های چندنخی ممکن است به دلیل به‌روزرسانی‌های از دست‌رفتهٔ شمارنده، ناهمگون باشند. هنگامی که این گزینه مشخص شود، GCC از روش‌های اکتشافی برای تصحیح یا هموارسازی چنین ناهمگونی‌هایی استفاده می‌کند. به‌طور پیش‌فرض، GCC در صورت تشخیص یک پروفایل ناهمگون، یک پیام خطا صادر می‌کند. .Sp این گزینه توسط \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-fprofile\-partial\-training\fR 4 .IX Item "-fprofile-partial-training" با \f(CW\*(C`\-fprofile\-use\*(C'\fR تمام بخش‌هایی از برنامه که در طول اجرای آموزشی اجرا نشده‌اند، به‌شدت به جای سرعت، برای اندازه بهینه‌سازی می‌شوند. در برخی موارد آموزش تمام مسیرهای داغ (hot paths) ممکن در برنامه امکان‌پذیر نیست. (به عنوان مثال، ممکن است برنامه شامل توابعی مخصوص یک سخت‌افزار خاص باشد و آموزش نتواند تمام پیکربندی‌های سخت‌افزاری که برنامه روی آن‌ها اجرا می‌شود را پوشش دهد.) با \&\f(CW\*(C`\-fprofile\-partial\-training\*(C'\fR بازخورد پروفایل برای تمام توابعی که در طول اجرای آموزشی اجرا نشده‌اند نادیده گرفته می‌شود، که باعث می‌شود به گونه‌ای بهینه‌سازی شوند که گویی بدون بازخورد پروفایل کامپایل شده‌اند. این امر زمانی که اجرای آموزشی نمایندهٔ واقعی برنامه نباشد به عملکرد بهتر، اما به کدی با حجم به مراتب بزرگ‌تر منجر می‌شود. .IP \fB\-fprofile\-use\fR 4 .IX Item "-fprofile-use" .PD 0 .IP \fB\-fprofile\-use=\fR\fIpath\fR 4 .IX Item "-fprofile-use=path" .PD فعال‌سازی بهینه‌سازی‌های هدایت‌شده با بازخورد پروفایل، و بهینه‌سازی‌های زیر که بسیاری از آن‌ها عموماً تنها با در دسترس بودن بازخورد پروفایل سودمند هستند: .Sp \&\fB\-fbranch\-probabilities \-fprofile\-values \&\-funroll\-loops \-fpeel\-loops \-ftracer \-fvpt \&\-finline\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-bit\-cp \&\-fpredictive\-commoning \-fsplit\-loops \-funswitch\-loops \&\-fgcse\-after\-reload \-ftree\-loop\-vectorize \-ftree\-slp\-vectorize \&\-fvect\-cost\-model=dynamic \-ftree\-loop\-distribute\-patterns \&\-fprofile\-reorder\-functions\fR .Sp پیش از آنکه بتوانید از این گزینه استفاده کنید، ابتدا باید اطلاعات پروفایل‌سازی را تولید کرده باشید. .Sp به‌طور پیش‌فرض، اگر پروفایل‌های بازخورد با کد منبع همخوانی نداشته باشند، GCC یک پیام خطا صادر می‌کند. این خطا می‌تواند با استفاده از \&\fB\-Wno\-error=coverage\-mismatch\fR به یک هشدار تبدیل شود. توجه داشته باشید که این کار ممکن است به کدی با بهینه‌سازی ضعیف بینجامد. علاوه‌بر این، به‌طور پیش‌فرض، در صورتی که پروفایل‌های بازخورد وجود نداشته باشند نیز GCC یک پیام هشدار صادر می‌کند (نگاه کنید به \fB\-Wmissing\-profile\fR). .Sp اگر \fIpath\fR مشخص شده باشد، GCC به \fIpath\fR برای یافتن فایل‌های دادهٔ بازخورد پروفایل نگاه می‌کند. نگاه کنید به \fB\-fprofile\-dir\fR. .IP \fB\-fauto\-profile\fR 4 .IX Item "-fauto-profile" .PD 0 .IP \fB\-fauto\-profile=\fR\fIpath\fR 4 .IX Item "-fauto-profile=path" .PD فعال‌سازی بهینه‌سازی‌های هدایت‌شده با بازخورد مبتنی بر نمونه‌برداری، و بهینه‌سازی‌های زیر که بسیاری از آن‌ها عموماً تنها با در دسترس بودن بازخورد پروفایل سودمند هستند: .Sp \&\fB\-fbranch\-probabilities \-fprofile\-values \&\-funroll\-loops \-fpeel\-loops \-ftracer \-fvpt \&\-finline\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-bit\-cp \&\-fpredictive\-commoning \-fsplit\-loops \-funswitch\-loops \&\-fgcse\-after\-reload \-ftree\-loop\-vectorize \-ftree\-slp\-vectorize \&\-fvect\-cost\-model=dynamic \-ftree\-loop\-distribute\-patterns \&\-fprofile\-correction\fR .Sp \&\fIpath\fR نام فایلی حاوی اطلاعات پروفایل AutoFDO است. در صورت حذف شدن، مقدار پیش‌فرض آن \fIfbdata.afdo\fR در دایرکتوری جاری خواهد بود. .Sp تولید یک فایل دادهٔ پروفایل AutoFDO نیازمند اجرای برنامهٔ شما با ابزار \fBperf\fR بر روی یک سیستم مقصد گنو/لینوکس پشتیبانی‌شده است. برای اطلاعات بیشتر، <\fBhttps://perf.wiki.kernel.org\fR> را ببینید. .Sp برای مثال: .Sp .Vb 2 \& perf record \-e br_inst_retired:near_taken \-b \-o perf.data \e \& \-\- your_program .Ve .Sp سپس از ابزار \fBcreate_gcov\fR برای تبدیل داده‌های خام پروفایل به قالبی که برای GCC قابل استفاده باشد، استفاده کنید. همچنین باید باینریِ نمادزدایی‌نشده (unstripped) برنامهٔ خود را به این ابزار ارائه دهید. <\fBhttps://github.com/google/autofdo\fR> را ببینید. .Sp برای مثال: .Sp .Vb 2 \& create_gcov \-\-binary=your_program.unstripped \-\-profile=perf.data \e \& \-\-gcov=profile.afdo .Ve .PP گزینه‌های زیر رفتار کامپایلر را در رابطه با محاسبات ممیز شناور کنترل می‌کنند. این گزینه‌ها میان سرعت و دقت/صحت مصالحه برقرار می‌کنند. همهٔ آن‌ها باید به‌طور صریح فعال شوند. .IP \fB\-fexcess\-precision=\fR\fIstyle\fR 4 .IX Item "-fexcess-precision=style" این گزینه امکان کنترل دقت مازاد را بر روی ماشین‌هایی فراهم می‌کند که در آن‌ها محاسبات ممیز شناور در قالبی با دقت یا دامنهٔ بیشتری نسبت به استاندارد IEEE و انواع ممیز شناور مبادله‌ای انجام می‌شوند. نمونه‌ای از چنین مقصدی، ممیز شناور x87 در پردازنده‌های x86 است که در داخل به جای قالب ۶۴ بیتی IEEE از یک نمایش ۸۰ بیتی استفاده می‌کند. برای اغلب برنامه‌ها، دقت مازاد بی‌ضرر است، اما برخی برنامه‌ها ممکن است به الزامات استانداردهای زبان C یا C++ برای مدیریت مقادیر IEEE وابسته باشند. .Sp به‌طور پیش‌فرض، \fB\-fexcess\-precision=fast\fR فعال است؛ این بدان معناست که در صورت تولید کدی سریع‌تر، ممکن است محاسبات با دقتی فراتر از انواع مشخص‌شده در کد مبدأ انجام شوند، و زمان گرد کردن مقادیر به انواع مشخص‌شده در کد مبدأ غیرقابل‌پیش‌بینی است. هنگام کامپایل C یا C++، اگر \fB\-fexcess\-precision=standard\fR مشخص شده باشد، دقت مازاد از قوانین مشخص‌شده در ISO C99 یا C++ پیروی می‌کند؛ به‌ویژه، هم تبدیل‌های نوع (casts) و هم انتساب‌ها موجب گرد شدن مقادیر به انواع معنایی آن‌ها می‌شوند (در حالی که \fB\-ffloat\-store\fR فقط بر انتساب‌ها اثر می‌گذارد). این گزینه به‌طور پیش‌فرض برای C یا C++ در صورتی که گزینه‌ای برای انطباق دقیق مانند \fB\-std=c99\fR یا \fB\-std=c++17\fR استفاده شده باشد، فعال است. \&\fB\-ffast\-math\fR صرف‌نظر از اینکه گزینهٔ انطباق دقیق استفاده شده باشد یا خیر، به‌طور پیش‌فرض \fB\-fexcess\-precision=fast\fR را فعال می‌کند. اگر \fB\-fexcess\-precision=16\fR مشخص شود، مقادیر ثابت و نتایج عبارات با انواع \f(CW\*(C`_Float16\*(C'\fR و \f(CW\*(C`_\|_bf16\*(C'\fR بدون دقت مازاد محاسبه می‌شوند. .Sp \&\fB\-fexcess\-precision=standard\fR برای زبان‌هایی غیر از C یا C++ پیاده‌سازی نشده است. در معماری x86، اگر \fB\-mfpmath=sse\fR یا \fB\-mfpmath=sse+387\fR مشخص شده باشد، هیچ اثری ندارد؛ در حالت اول، معناشناسی IEEE بدون دقت مازاد اعمال می‌شود و در حالت دوم، گرد کردن غیرقابل‌پیش‌بینی است. .IP \fB\-ffloat\-store\fR 4 .IX Item "-ffloat-store" متغیرهای ممیز شناور را در ثبات‌ها ذخیره نکنید، و سایر گزینه‌هایی را که ممکن است برداشتن مقدار ممیز شناور از یک ثبات یا حافظه را تغییر دهند مهار کنید. این گزینه عموماً جای خود را به \&\fB\-fexcess\-precision=standard\fR داده است که کلی‌تر می‌باشد. اگر از \&\fB\-ffloat\-store\fR استفاده می‌کنید، ممکن است نیاز باشد برنامهٔ خود را تغییر دهید تا محاسبات میانی را صریحاً در متغیرهای موقت ذخیره کند، زیرا \&\fB\-ffloat\-store\fR گرد کردن به قالب IEEE را فقط روی انتساب‌ها مدیریت می‌کند، نه تبدیل‌های نوع، برخلاف رویکردی که \fB\-fexcess\-precision=standard\fR در پیش می‌گیرد. .IP \fB\-ffast\-math\fR 4 .IX Item "-ffast-math" گزینه‌های \fB\-fno\-math\-errno\fR، \fB\-funsafe\-math\-optimizations\fR، \&\fB\-ffinite\-math\-only\fR، \fB\-fno\-rounding\-math\fR، \&\fB\-fno\-signaling\-nans\fR، \fB\-fcx\-limited\-range\fR و \&\fB\-fexcess\-precision=fast\fR را تنظیم می‌کند. .Sp این گزینه باعث تعریف ماکروی پیش‌پردازندهٔ \f(CW\*(C`_\|_FAST_MATH_\|_\*(C'\fR می‌شود. .Sp این گزینه به جز \&\fB\-Ofast\fR با هیچ گزینهٔ \fB\-O\fR دیگری روشن نمی‌شود، چرا که می‌تواند به خروجی نادرست برای برنامه‌هایی بینجامد که به پیاده‌سازی دقیق قواعد/مشخصات IEEE یا ISO برای توابع ریاضی وابسته هستند. با این حال، ممکن است برای برنامه‌هایی که به ضمانت‌های این مشخصات نیازی ندارند، کدی سریع‌تر تولید کند. .IP \fB\-fno\-math\-errno\fR 4 .IX Item "-fno-math-errno" پس از فراخوانی توابع ریاضیاتی که با یک تک‌دستورالعمل اجرا می‌شوند (مانند \f(CW\*(C`sqrt\*(C'\fR)، متغیر \f(CW\*(C`errno\*(C'\fR تنظیم نشود. برنامه‌ای که برای مدیریت خطاهای ریاضی به استثناهای IEEE وابسته است، ممکن است بخواهد از این پرچم برای سرعت بیشتر ضمن حفظ سازگاری محاسباتی با IEEE استفاده کند. .Sp این گزینه به جز \&\fB\-Ofast\fR با هیچ گزینهٔ \fB\-O\fR دیگری فعال نمی‌شود، زیرا می‌تواند به خروجی نادرست برای برنامه‌هایی که به پیاده‌سازی دقیق قواعد/مشخصات IEEE یا ISO برای توابع ریاضی وابسته هستند منجر شود. هرچند ممکن است برای برنامه‌هایی که به تضمین‌های این مشخصات نیاز ندارند، کد سریع‌تری به همراه داشته باشد. .Sp حالت پیش‌فرض \fB\-fmath\-errno\fR است. .Sp در سیستم‌های Darwin، کتابخانهٔ ریاضی هرگز \f(CW\*(C`errno\*(C'\fR را تنظیم نمی‌کند. بنابراین هیچ دلیلی وجود ندارد که کامپایلر این احتمال را در نظر بگیرد، و \fB\-fno\-math\-errno\fR حالت پیش‌فرض است. .IP \fB\-funsafe\-math\-optimizations\fR 4 .IX Item "-funsafe-math-optimizations" اجازه بهینه‌سازی‌هایی برای محاسبات ممیز شناور را می‌دهد که (الف) فرض می‌کنند آرگومان‌ها و نتایج معتبر هستند و (ب) ممکن است استانداردهای IEEE یا ANSI را نقض کنند. در صورت استفاده در زمان پیوند، ممکن است کتابخانه‌ها یا فایل‌های راه‌اندازی‌ای را شامل شود که کلمه کنترلی پیش‌فرض FPU یا سایر بهینه‌سازی‌های مشابه را تغییر می‌دهند. .Sp این گزینه به جز \&\fB\-Ofast\fR با هیچ گزینهٔ \fB\-O\fR دیگری روشن نمی‌شود، زیرا می‌تواند به خروجی نادرست برای برنامه‌های وابسته به پیاده‌سازی دقیق قواعد/مشخصات IEEE یا ISO برای توابع ریاضی بینجامد. هرچند ممکن است برای برنامه‌هایی که نیازی به ضمانت‌های این مشخصات ندارند کدی سریع‌تر به دست دهد. این گزینه \fB\-fno\-signed\-zeros\fR، \fB\-fno\-trapping\-math\fR، \&\fB\-fassociative\-math\fR و \fB\-freciprocal\-math\fR را فعال می‌کند. .Sp حالت پیش‌فرض \fB\-fno\-unsafe\-math\-optimizations\fR است..IP \fB\-fassociative\-math\fR 4 .IX Item "-fassociative-math" اجازه شرکت‌پذیری مجدد (re\-association) عملوندها را در دنباله‌ای از عملیات ممیز شناور می‌دهد. این کار با احتمال تغییر در نتیجهٔ محاسبات، استانداردهای زبان ISO C و C++ را نقض می‌کند. نکته: بازآرایی ممکن است علامت صفر را تغییر دهد، مقادیر NaN را نادیده بگیرد و سرریز زیرین (underflow) یا سرریز (overflow) را مهار کرده یا ایجاد کند (و در نتیجه نباید در کدهایی استفاده شود که به رفتار گرد کردن متکی هستند، مانند \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR). همچنین ممکن است مقایسه‌های ممیز شناور را بازآرایی کند و بنابراین در مواردی که مقایسه‌های مرتب (ordered comparisons) مورد نیاز است، نباید استفاده شود. این گزینه نیازمند فعال بودن هر دو گزینهٔ \fB\-fno\-signed\-zeros\fR و \&\fB\-fno\-trapping\-math\fR است. به‌علاوه، استفاده از آن همراه با \fB\-frounding\-math\fR چندان منطقی نیست. برای Fortran، این گزینه در صورتی که هر دو گزینهٔ \fB\-fno\-signed\-zeros\fR و \&\fB\-fno\-trapping\-math\fR فعال باشند، به‌طور خودکار فعال می‌شود. .Sp پیش‌فرض \fB\-fno\-associative\-math\fR است. .IP \fB\-freciprocal\-math\fR 4 .IX Item "-freciprocal-math" اجازه می‌دهد در صورتی که منجر به بهینه‌سازی شود، به‌جای تقسیم بر یک مقدار از معکوس آن مقدار استفاده شود. برای نمونه، \f(CW\*(C`x / y\*(C'\fR می‌تواند با \f(CW\*(C`x * (1/y)\*(C'\fR جایگزین شود؛ این امر زمانی مفید است که \f(CW\*(C`(1/y)\*(C'\fR مشمول حذف زیرعبارت‌های مشترک (common subexpression elimination) باشد. توجه داشته باشید که این کار باعث کاهش دقت شده و تعداد عملیات‌های ممیز شناور (flops) روی آن مقدار را افزایش می‌دهد. .Sp پیش‌فرض \fB\-fno\-reciprocal\-math\fR است. .IP \fB\-ffinite\-math\-only\fR 4 .IX Item "-ffinite-math-only" بهینه‌سازی‌هایی را برای محاسبات ممیز شناور مجاز می‌کند که فرض می‌کنند آرگومان‌ها و نتایج، مقادیر NaN یا +\-Inf نیستند. .Sp این گزینه توسط هیچ‌یک از گزینه‌های \fB\-O\fR به‌جز \&\fB\-Ofast\fR فعال نمی‌شود، زیرا می‌تواند برای برنامه‌هایی که به پیاده‌سازی دقیق قواعد/مشخصات IEEE یا ISO برای توابع ریاضی وابسته هستند، به خروجی نادرست منجر شود. با این حال، ممکن است برای برنامه‌هایی که به تضمین‌های این مشخصات نیاز ندارند، کد سریع‌تری تولید کند. .Sp پیش‌فرض \fB\-fno\-finite\-math\-only\fR است. .IP \fB\-fno\-signed\-zeros\fR 4 .IX Item "-fno-signed-zeros" بهینه‌سازی‌هایی را برای محاسبات ممیز شناور مجاز می‌کند که علامت‌دار بودن صفر را نادیده می‌گیرند. محاسبات استاندارد IEEE رفتار مقادیر متمایز +0.0 و \-0.0 را مشخص می‌کند، که مانع از ساده‌سازی عباراتی مانند x+0.0 یا 0.0*x می‌شود (حتی همراه با \fB\-ffinite\-math\-only\fR). این گزینه به این معناست که علامت نتیجهٔ صفر اهمیت ندارد. .Sp پیش‌فرض \fB\-fsigned\-zeros\fR است. .IP \fB\-fno\-trapping\-math\fR 4 .IX Item "-fno-trapping-math" کد را با این فرض کامپایل می‌کند که عملیات ممیز شناور نمی‌توانند تله‌های (traps) قابل مشاهده برای کاربر تولید کنند. این تله‌ها شامل تقسیم بر صفر، سرریز، سرریز زیرین، نتیجهٔ غیردقیق (inexact result) و عملیات نامعتبر است. این گزینه نیازمند فعال بودن \fB\-fno\-signaling\-nans\fR است. تنظیم این گزینه ممکن است در صورت اتکا به محاسبات «بدون توقف» (non\-stop) استاندارد IEEE، امکان تولید کد سریع‌تر را فراهم کند. .Sp این گزینه توسط هیچ‌یک از گزینه‌های \fB\-O\fR به‌جز \&\fB\-Ofast\fR فعال نمی‌شود، زیرا می‌تواند برای برنامه‌هایی که به پیاده‌سازی دقیق قواعد/مشخصات IEEE یا ISO برای توابع ریاضی وابسته‌اند، خروجی نادرست تولید کند. .Sp پیش‌فرض \fB\-ftrapping\-math\fR است. .Sp نسخه‌های آیندهٔ GCC ممکن است کنترل دقیق‌تری روی این تنظیم با استفاده از پراگمای \f(CW\*(C`FENV_ACCESS\*(C'\fR در استاندارد C99 ارائه دهند. این گزینهٔ خط فرمان همراه با \fB\-frounding\-math\fR برای تعیین وضعیت پیش‌فرض \f(CW\*(C`FENV_ACCESS\*(C'\fR به کار خواهد رفت. .IP \fB\-frounding\-math\fR 4 .IX Item "-frounding-math" تبدیل‌ها و بهینه‌سازی‌هایی را که رفتار پیش‌فرض گرد کردن ممیز شناور (گرد کردن به نزدیک‌ترین یا round\-to\-nearest) را فرض می‌کنند، غیرفعال می‌کند. این گزینه باید برای برنامه‌هایی تعیین شود که حالت گرد کردن FP را به‌صورت پویا تغییر می‌دهند، یا ممکن است با حالتی غیر از حالت پیش‌فرض گرد کردن اجرا شوند. این گزینه ادغام ثوابت (constant folding) عبارات ممیز شناور در زمان کامپایل (که ممکن است تحت تأثیر حالت گرد کردن قرار گیرند) و تبدیل‌های محاسباتی که در حضور حالت‌های گرد کردن وابسته به علامت ناامن هستند را غیرفعال می‌سازد. .Sp پیش‌فرض \fB\-fno\-rounding\-math\fR است. .Sp این گزینه آزمایشی است و در حال حاضر غیرفعال شدن تمامی بهینه‌سازی‌های GCC را که تحت تأثیر حالت گرد کردن قرار دارند تضمین نمی‌کند. نسخه‌های آیندهٔ GCC ممکن است کنترل دقیق‌تری روی این تنظیم با استفاده از پراگمای \f(CW\*(C`FENV_ACCESS\*(C'\fR در استاندارد C99 ارائه دهند. این گزینهٔ خط فرمان همراه با \fB\-ftrapping\-math\fR برای مشخص کردن وضعیت پیش‌فرض \f(CW\*(C`FENV_ACCESS\*(C'\fR به کار خواهد رفت. .IP \fB\-fsignaling\-nans\fR 4 .IX Item "-fsignaling-nans" کد را با این فرض کامپایل می‌کند که مقادیر IEEE signaling NaNs ممکن است حین انجام عملیات ممیز شناور، تله‌های قابل مشاهده برای کاربر تولید کنند. فعال کردن این گزینه، بهینه‌سازی‌هایی را که ممکن است تعداد استثناهای قابل رؤیت با signaling NaNها را تغییر دهند، غیرفعال می‌کند. این گزینه مستلزم فعال بودن \fB\-ftrapping\-math\fR است. .Sp این گزینه باعث تعریف ماکروی پیش‌پردازندهٔ \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR می‌شود. .Sp پیش‌فرض \fB\-fno\-signaling\-nans\fR است. .Sp این گزینه آزمایشی است و در حال حاضر غیرفعال شدن تمام بهینه‌سازی‌های GCC را که بر رفتار signaling NaN اثر می‌گذارند تضمین نمی‌کند. .IP \fB\-fno\-fp\-int\-builtin\-inexact\fR 4 .IX Item "-fno-fp-int-builtin-inexact" به توابع داخلی (built\-in) \f(CW\*(C`ceil\*(C'\fR، \f(CW\*(C`floor\*(C'\fR، \&\f(CW\*(C`round\*(C'\fR و \f(CW\*(C`trunc\*(C'\fR، و گونه‌های \f(CW\*(C`float\*(C'\fR و \&\f(CW\*(C`long double\*(C'\fR آن‌ها اجازه نمی‌دهد کدی تولید کنند که برای آرگومان‌های غیرصحیح، استثنای ممیز شناور «inexact» (غیردقیق) را صادر کند. استانداردهای ISO C99 و C11 به این توابع اجازه می‌دهند استثنای «inexact» را صادر نمایند، اما ISO/IEC TS 18661\-1:2014 (پیوندهای C برای IEEE 754\-2008، آن‌گونه که در ISO C23 ادغام شده است) به این توابع چنین اجازه‌ای نمی‌دهد. .Sp پیش‌فرض \fB\-ffp\-int\-builtin\-inexact\fR است که اجازه صدور استثنا را می‌دهد، مگر اینکه استاندارد C23 یا نسخه‌های پس از آن انتخاب شده باشد. این گزینه هیچ اثری ندارد مگر اینکه \fB\-ftrapping\-math\fR فعال باشد. .Sp حتی در صورت استفاده از \fB\-fno\-fp\-int\-builtin\-inexact\fR، چنانچه توابع، فراخوانی به یک تابع کتابخانه‌ای تولید کنند، در صورتی که پیاده‌سازی کتابخانه از TS 18661 پیروی نکند ممکن است استثنای «inexact» برانگیخته شود. .IP \fB\-fsingle\-precision\-constant\fR 4 .IX Item "-fsingle-precision-constant" با ثوابت ممیز شناور به‌صورت دقت تکی (single precision) رفتار می‌کند، به‌جای اینکه آن‌ها را به‌طور ضمنی به ثوابت با دقت دوگانه (double precision) تبدیل کند. .IP \fB\-fcx\-limited\-range\fR 4 .IX Item "-fcx-limited-range" در صورت فعال بودن، این گزینه بیان می‌کند که هنگام انجام تقسیم اعداد مختلط، به مرحلهٔ کاهش دامنه (range reduction) نیازی نیست. همچنین هیچ بررسی برای اینکه آیا نتیجهٔ ضرب یا تقسیم اعداد مختلط برابر با \f(CW\*(C`NaN + I*NaN\*(C'\fR است و تلاشی برای تصحیح وضعیت در آن حالت صورت نمی‌گیرد. پیش‌فرض \fB\-fno\-cx\-limited\-range\fR است، اما توسط \&\fB\-ffast\-math\fR فعال می‌شود. .Sp این گزینه تنظیم پیش‌فرض پراگمای \f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR در استاندارد ISO C99 را کنترل می‌کند. با این حال، این گزینه برای تمامی زبان‌ها اعمال می‌شود. .IP \fB\-fcx\-fortran\-rules\fR 4 .IX Item "-fcx-fortran-rules" ضرب و تقسیم اعداد مختلط از قوانین Fortran پیروی می‌کنند. کاهش دامنه به‌عنوان بخشی از تقسیم مختلط انجام می‌شود، اما هیچ بررسی برای اینکه آیا نتیجهٔ ضرب یا تقسیم اعداد مختلط برابر با \f(CW\*(C`NaN + I*NaN\*(C'\fR است و تلاشی برای بهبود وضعیت در آن صورت نمی‌گیرد. .Sp پیش‌فرض \fB\-fno\-cx\-fortran\-rules\fR است. .PP گزینه‌های زیر بهینه‌سازی‌هایی را کنترل می‌کنند که ممکن است کارایی را بهبود بخشند، اما توسط هیچ‌یک از گزینه‌های \fB\-O\fR فعال نمی‌شوند. این بخش شامل گزینه‌های آزمایشی است که ممکن است کدهای معیوب تولید کنند. .IP \fB\-fbranch\-probabilities\fR 4 .IX Item "-fbranch-probabilities" پس از اجرای برنامه‌ای که با \fB\-fprofile\-arcs\fR کامپایل شده است، می‌توانید آن را برای بار دوم با استفاده از \&\fB\-fbranch\-probabilities\fR کامپایل کنید تا بهینه‌سازی‌ها بر اساس تعداد دفعاتی که هر شاخه اجرا شده است بهبود یابد. هنگامی که برنامه‌ای که با \fB\-fprofile\-arcs\fR کامپایل شده است خاتمه می‌یابد، شمارش‌های اجرای کمان را برای هر فایل منبع در فایلی به نام \fIsourcename.gcda\fR ذخیره می‌کند. اطلاعات موجود در این فایل داده بسیار وابسته به ساختار کد تولید شده است، بنابراین باید برای هر دو کامپایل از کد منبع یکسان و گزینه‌های بهینه‌سازی یکسانی استفاده کنید. جزئیات مربوط به نام‌گذاری فایل را در \fB\-fprofile\-arcs\fR مشاهده کنید. .Sp با گزینهٔ \fB\-fbranch\-probabilities\fR، کامپایلر GCC یک یادداشت \fBREG_BR_PROB\fR روی هر \fBJUMP_INSN\fR و \fBCALL_INSN\fR قرار می‌دهد. این موارد می‌توانند برای بهبود بهینه‌سازی استفاده شوند. در حال حاضر، آن‌ها فقط در یک جا استفاده می‌شوند: در \fIreorg.cc\fR، به‌جای حدس زدن این‌که کدام مسیر توسط یک شاخه محتمل‌تر است، از مقادیر \fBREG_BR_PROB\fR برای تعیین دقیق مسیری که دفعات بیشتری طی شده است استفاده می‌شود. .Sp توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-fprofile\-values\fR 4 .IX Item "-fprofile-values" در صورت ترکیب با \fB\-fprofile\-arcs\fR، کدی اضافه می‌کند تا داده‌هایی دربارهٔ مقادیر عبارات درون برنامه جمع‌آوری شوند. .Sp همراه با \fB\-fbranch\-probabilities\fR، داده‌های جمع‌آوری‌شده از تحلیل مقادیر عبارات را جهت استفاده در بهینه‌سازی‌ها بازخوانی می‌کند. .Sp توسط \fB\-fprofile\-generate\fR، \fB\-fprofile\-use\fR و \&\fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-fprofile\-reorder\-functions\fR 4 .IX Item "-fprofile-reorder-functions" بازآرایی توابع بر اساس سنجش پروفایل (profile instrumentation)، نخستین زمان اجرای یک تابع را جمع‌آوری کرده و این توابع را به ترتیب صعودی مرتب می‌کند، با این هدف که راه‌اندازی برنامه از طریق بارگذاری کارآمدتر بخش‌های متنی (text segments) بهینه‌سازی شود. .Sp با \fB\-fprofile\-use\fR فعال می‌شود..IP \fB\-fvpt\fR 4 .IX Item "-fvpt" در صورت ترکیب با \fB\-fprofile\-arcs\fR، این گزینه به کامپایلر دستور می‌دهد تا کدی برای جمع‌آوری اطلاعات درباره مقادیر عبارت‌ها اضافه کند. .Sp به همراه \fB\-fbranch\-probabilities\fR، داده‌های جمع‌آوری‌شده را بازخوانی کرده و بهینه‌سازی‌ها را بر اساس آن‌ها اعمال می‌کند. در حال حاضر، این بهینه‌سازی‌ها شامل تخصیص ویژه عملیات تقسیم با استفاده از آگاهی درباره مقدار مخرج است. .Sp با \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-frename\-registers\fR 4 .IX Item "-frename-registers" تلاش برای جلوگیری از وابستگی‌های کاذب در کد زمان‌بندی‌شده از طریق بهره‌گیری از ثبات‌های باقی‌مانده پس از تخصیص ثبات. این بهینه‌سازی بیشترین سود را برای پردازنده‌های دارای ثبات‌های زیاد دارد. با این حال، بسته به قالب اطلاعات اشکال‌زدایی اتخاذشده توسط هدف، می‌تواند اشکال‌زدایی را غیرممکن کند، زیرا متغیرها دیگر در یک «ثبات اصلی» باقی نمی‌مانند. .Sp به‌طور پیش‌فرض با \fB\-funroll\-loops\fR فعال می‌شود. .IP \fB\-fschedule\-fusion\fR 4 .IX Item "-fschedule-fusion" یک گذر وابسته به معماری مقصد را روی جریان دستورالعمل‌ها انجام می‌دهد تا دستورالعمل‌های هم‌نوع را در کنار یکدیگر زمان‌بندی کند، زیرا ماشین مقصد در صورتی که این دستورات در جریان دستورالعمل‌ها در مجاورت هم باشند می‌تواند آن‌ها را با کارایی بیشتری اجرا کند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-ftracer\fR 4 .IX Item "-ftracer" برای افزایش اندازه اَبَربلوک (superblock)، تکثیر دُم (tail duplication) را انجام می‌دهد. این دگرگونی، جریان کنترل تابع را ساده‌تر کرده و به سایر بهینه‌سازی‌ها امکان می‌دهد عملکرد بهتری داشته باشند. .Sp توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-funroll\-loops\fR 4 .IX Item "-funroll-loops" حلقه‌هایی را که تعداد تکرارهای آن‌ها در زمان کامپایل یا هنگام ورود به حلقه قابل تعیین است، باز (unroll) می‌کند. گزینه \fB\-funroll\-loops\fR به طور ضمنی شامل \&\fB\-frerun\-cse\-after\-loop\fR، \fB\-fweb\fR و \fB\-frename\-registers\fR است. همچنین لایه‌برداری کامل حلقه (یعنی حذف کامل حلقه‌هایی با تعداد تکرار ثابت و کم) را فعال می‌کند. این گزینه اندازه کد را افزایش می‌دهد و ممکن است سرعت اجرای آن را بیشتر کند یا نکند. .Sp توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-funroll\-all\-loops\fR 4 .IX Item "-funroll-all-loops" تمامی حلقه‌ها را باز می‌کند، حتی اگر تعداد تکرارهای آن‌ها هنگام ورود به حلقه نامشخص باشد. این کار معمولاً اجرای برنامه‌ها را کندتر می‌کند. \&\fB\-funroll\-all\-loops\fR به طور ضمنی شامل همان گزینه‌های \&\fB\-funroll\-loops\fR است. .IP \fB\-fpeel\-loops\fR 4 .IX Item "-fpeel-loops" حلقه‌هایی را که بر اساس بازخورد پروفایلینگ یا تحلیل ایستا اطلاعات کافی مبنی بر کم بودن تکرار آن‌ها وجود دارد، لایه‌برداری (peel) می‌کند. همچنین لایه‌برداری کامل حلقه (یعنی حذف کامل حلقه‌هایی با تعداد تکرار ثابت و کم) را فعال می‌سازد. .Sp توسط \fB\-O3\fR، \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-fmalloc\-dce\fR 4 .IX Item "-fmalloc-dce" کنترل می‌کند که آیا فراخوانی‌های \f(CW\*(C`malloc\*(C'\fR (و گونه‌های آن مانند \f(CW\*(C`calloc\*(C'\fR یا \&\f(CW\*(C`strdup\*(C'\fR)، به شرطی که مقدار بازگشتی آن‌ها فقط به عنوان آرگومان فراخوانی \f(CW\*(C`free\*(C'\fR استفاده شده یا با \f(CW\*(C`NULL\*(C'\fR مقایسه شود، می‌توانند از طریق بهینه‌سازی حذف شوند یا خیر. اگر از \&\fB\-fmalloc\-dce=1\fR استفاده شود، فقط فراخوانی‌های \f(CW\*(C`free\*(C'\fR مجاز هستند، در حالی که با \fB\-fmalloc\-dce=2\fR مقایسه‌ها با اشاره‌گر \f(CW\*(C`NULL\*(C'\fR نیز برای حذف ایمن در نظر گرفته می‌شوند. .Sp پیش‌فرض \fB\-fmalloc\-dce=2\fR است. همچنین نگاه کنید به \fB\-fallocation\-dce\fR. .IP \fB\-fmove\-loop\-invariants\fR 4 .IX Item "-fmove-loop-invariants" گذر انتقال مقادیر پایای حلقه (loop invariant motion) را در بهینه‌ساز حلقه RTL فعال می‌کند. در سطح \fB\-O1\fR و بالاتر، به جز \fB\-Og\fR فعال است. .IP \fB\-fmove\-loop\-stores\fR 4 .IX Item "-fmove-loop-stores" گذر انتقال ذخیره‌سازی‌های حلقه (loop store motion) را در بهینه‌ساز حلقه GIMPLE فعال می‌کند. این کار ذخیره‌سازی‌های پایا را به بعد از پایان حلقه منتقل کرده و در عوض مقدار ذخیره‌شده را در طول تکرارها درون یک ثبات نگه می‌دارد. توجه داشته باشید که برای اثرگذاری این گزینه، \fB\-ftree\-loop\-im\fR نیز باید فعال باشد. در سطح \fB\-O1\fR و بالاتر، به جز \fB\-Og\fR فعال است. .IP \fB\-fsplit\-loops\fR 4 .IX Item "-fsplit-loops" اگر حلقه‌ای شامل شرطی باشد که برای یک بخش از فضای تکرار همیشه درست و برای بخش دیگر نادرست است، آن را به دو حلقه تقسیم می‌کند. .Sp توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-funswitch\-loops\fR 4 .IX Item "-funswitch-loops" شاخه‌های دارای شرایط پایای حلقه را به بیرون حلقه منتقل می‌کند، همراه با نسخه‌های تکراری از حلقه در هر دو شاخه (که بر اساس نتیجه شرط تغییر یافته‌اند). .Sp توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-fversion\-loops\-for\-strides\fR 4 .IX Item "-fversion-loops-for-strides" اگر یک حلقه روی آرایه‌ای با گام (stride) متغیر تکرار شود، نسخه دیگری از حلقه ایجاد می‌کند که فرض می‌کند گام همیشه یک است. برای مثال: .Sp .Vb 2 \& for (int i = 0; i < n; ++i) \& x[i * stride] = ...; .Ve .Sp تبدیل می‌شود به: .Sp .Vb 6 \& if (stride == 1) \& for (int i = 0; i < n; ++i) \& x[i] = ...; \& else \& for (int i = 0; i < n; ++i) \& x[i * stride] = ...; .Ve .Sp این گزینه به ویژه برای آرایه‌های assumed\-shape در فرترن مفید است که در آنجا (برای نمونه) با فرض دسترسی‌های پیوسته، برداری‌سازی بهتری را امکان‌پذیر می‌سازد. این پرچم به‌طور پیش‌فرض در \fB\-O3\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌شود. .IP \fB\-ffunction\-sections\fR 4 .IX Item "-ffunction-sections" .PD 0 .IP \fB\-fdata\-sections\fR 4 .IX Item "-fdata-sections" .PD اگر معماری مقصد از بخش‌های (sections) دلخواه پشتیبانی کند، هر تابع یا مورد داده را در بخش اختصاصی خود در فایل خروجی قرار می‌دهد. نام تابع یا نام مورد داده، نام بخش مربوطه را در فایل خروجی تعیین می‌کند. .Sp از این گزینه‌ها در سیستم‌هایی استفاده کنید که پیونددهنده (linker) می‌تواند بهینه‌سازی‌هایی را برای بهبود محلی‌بودن ارجاع در فضای دستورالعمل انجام دهد. بیشتر سیستم‌هایی که از قالب شیء ELF استفاده می‌کنند پیونددهنده‌هایی با چنین بهینه‌سازی‌هایی دارند. در AIX، پیونددهنده بخش‌ها (CSECTها) را بر اساس گراف فراخوانی بازآرایی می‌کند. تأثیر آن بر کارایی متفاوت است. .Sp همراه با جمع‌آوری زباله پیونددهنده (گزینه \fB\-\-gc\-sections\fR در پیونددهنده)، این گزینه‌ها می‌توانند منجر به فایل‌های اجرایی پیوندایستای کوچک‌تر (پس از strip کردن) شوند. .Sp در سیستم‌های ELF/DWARF این گزینه‌ها کیفیت اطلاعات اشکال‌زدایی را کاهش نمی‌دهند. با این حال ممکن است در سایر قالب‌های فایل شیء/اطلاعات اشکال‌زدایی مشکلاتی وجود داشته باشد. .Sp تنها زمانی از این گزینه‌ها استفاده کنید که مزایای قابل‌توجهی از انجام آن حاصل شود. هنگام مشخص کردن این گزینه‌ها، اسمبلر و پیونددهنده فایل‌های شیء و اجرایی بزرگ‌تری ایجاد می‌کنند و کندتر نیز خواهند بود. این گزینه‌ها روی تولید کد تأثیر می‌گذارند. آن‌ها از بهینه‌سازی‌هایی توسط کامپایلر و اسمبلر که از مکان‌های نسبی داخل یک واحد ترجمه استفاده می‌کنند جلوگیری به عمل می‌آورند، زیرا مکان‌ها تا زمان پیوند ناشناخته هستند. نمونه‌ای از این بهینه‌سازی‌ها، تبدیل فراخوانی‌ها به دستورالعمل‌های فراخوانی کوتاه است. .IP \fB\-fstdarg\-opt\fR 4 .IX Item "-fstdarg-opt" پیش‌درآمد توابع با آرگومان‌های متغیر (variadic) را با توجه به نحوه استفاده از آن آرگومان‌ها بهینه‌سازی می‌کند. .IP \fB\-fsection\-anchors\fR 4 .IX Item "-fsection-anchors" تلاش می‌کند تا با استفاده از نمادهای لنگرگاه مشترک برای آدرس‌دهی اشیای نزدیک به هم، تعداد محاسبات آدرس نمادین را کاهش دهد. این دگرگونی می‌تواند به کاهش تعداد مدخل‌های GOT و دسترسی‌های GOT در برخی معماری‌های مقصد کمک کند. .Sp برای مثال، پیاده‌سازی تابع زیر با نام \f(CW\*(C`foo\*(C'\fR: .Sp .Vb 2 \& static int a, b, c; \& int foo (void) { return a + b + c; } .Ve .Sp معمولاً آدرس‌های هر سه متغیر را محاسبه می‌کند، اما اگر آن را با \fB\-fsection\-anchors\fR کامپایل کنید، در عوض از طریق یک نقطه لنگرگاه مشترک به متغیرها دسترسی می‌یابد. اثر آن مشابه شبه‌کد زیر است (که کد معتبر C نیست): .Sp .Vb 5 \& int foo (void) \& { \& register int *xr = &x; \& return xr[&a \- &x] + xr[&b \- &x] + xr[&c \- &x]; \& } .Ve .Sp همه اهداف از این گزینه پشتیبانی نمی‌کنند..IP \fB\-fzero\-call\-used\-regs=\fR\fIchoice\fR 4 .IX Item "-fzero-call-used-regs=choice" صفر کردن ثبات‌های استفاده‌شده در فراخوانی (call\-used registers) هنگام بازگشت از تابع جهت افزایش امنیت برنامه، چه از طریق کاهش اثر حملات «برنامه‌نویسی مبتنی بر بازگشت» (Return\-Oriented Programming یا ROP) و چه از طریق جلوگیری از نشت اطلاعات از طریق ثبات‌ها. .Sp مقادیر ممکن برای \fIchoice\fR همانند مقادیر مشخصهٔ \&\f(CW\*(C`zero_call_used_regs\*(C'\fR است. پیش‌فرض \fBskip\fR است. .Sp می‌توانید این رفتار را برای یک تابع خاص با استفاده از مشخصهٔ تابع \f(CW\*(C`zero_call_used_regs\*(C'\fR کنترل کنید. .IP "\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR" 4 .IX Item "--param name=value" در برخی موارد، GCC از ثابت‌های گوناگونی برای کنترل میزان بهینه‌سازی انجام‌شده استفاده می‌کند. برای مثال، GCC توابعی را که بیش از تعداد مشخصی دستورالعمل دارند درون‌خطی (inline) نمی‌کند. شما می‌توانید برخی از این ثابت‌ها را در خط فرمان با استفاده از گزینهٔ \&\fB\-\-param\fR کنترل کنید. .Sp نام‌های پارامترهای خاص و معنای مقادیر به ساختار درونی کامپایلر وابسته هستند و ممکن است در نسخه‌های بعدی بدون اطلاع قبلی تغییر کنند. .Sp برای به‌دست آوردن مقادیر کمینه، بیشینه و پیش‌فرض یک پارامتر، از گزینه‌های \fB\-\-help=param \-Q\fR استفاده کنید. .Sp در هر حالت، \fIvalue\fR یک عدد صحیح است. انتخاب‌های زیر برای \fIname\fR برای تمامی اهداف (targets) شناخته‌شده هستند: .RS 4 .IP \fBphiopt\-factor\-max\-stmts\-live\fR 4 .IX Item "phiopt-factor-max-stmts-live" هنگام فاکتورگیری عبارات از if/then/else، این بیشینهٔ تعداد دستورات پس از دستور تعریف‌کننده است که اجازه دارند طول عمر یک نام را افزایش دهند. .IP \fBpredictable\-branch\-outcome\fR 4 .IX Item "predictable-branch-outcome" هنگامی که پیش‌بینی می‌شود یک شاخه با احتمالی کمتر از این آستانه (به درصد) انتخاب شود (taken)، آنگاه به عنوان شاخه‌ای با پیش‌بینی‌پذیری مناسب در نظر گرفته می‌شود. .IP \fBmax\-rtl\-if\-conversion\-insns\fR 4 .IX Item "max-rtl-if-conversion-insns" تبدیل شرطی RTL سعی می‌کند شاخه‌های شرطی پیرامون یک بلوک را حذف کرده و آن‌ها را با دستورالعمل‌های دارای اجرای شرطی جایگزین کند. این پارامتر بیشینهٔ تعداد دستورالعمل‌ها در یک بلوک را مشخص می‌کند که باید برای تبدیل شرطی بررسی شوند. کامپایلر همچنین از سایر روش‌های ابتکاری (heuristics) برای تصمیم‌گیری دربارهٔ سودمند بودن احتمالی تبدیل شرطی استفاده خواهد کرد. .IP \fBfile\-cache\-files\fR 4 .IX Item "file-cache-files" بیشینهٔ تعداد فایل‌ها در حافظهٔ پنهان فایل (file cache). حافظهٔ پنهان فایل برای چاپ خطوط منبع در پیام‌های تشخیصی و انجام برخی بررسی‌های کد منبع مانند \fB\-Wmisleading\-indentation\fR استفاده می‌شود. .IP \fBfile\-cache\-lines\fR 4 .IX Item "file-cache-lines" بیشینهٔ تعداد خطوط برای نمایه‌سازی در حافظهٔ پنهان فایل. مقدار 0 اندازه را به‌طور خودکار تعیین می‌کند. حافظهٔ پنهان فایل برای چاپ خطوط منبع در پیام‌های تشخیصی و انجام برخی بررسی‌های کد منبع مانند \fB\-Wmisleading\-indentation\fR استفاده می‌شود. .IP \fBmax\-rtl\-if\-conversion\-predictable\-cost\fR 4 .IX Item "max-rtl-if-conversion-predictable-cost" تبدیل شرطی RTL تلاش می‌کند تا شاخه‌های شرطی پیرامون یک بلوک را حذف کرده و آن‌ها را با دستورالعمل‌های دارای اجرای شرطی جایگزین کند. این پارامترها بیشینهٔ هزینهٔ مجاز را برای توالی تولیدشده توسط تبدیل شرطی، بسته به اینکه شاخه به صورت ایستا پیش‌بینی‌پذیر تشخیص داده شده باشد یا خیر، تعیین می‌کنند. واحد این پارامتر همانند معیار درونی seq_cost در GCC است. کامپایلر تلاش خواهد کرد با استفاده از ماکروی هدف BRANCH_COST یک پیش‌فرض منطقی برای این پارامتر فراهم کند. .IP \fBmax\-crossjump\-edges\fR 4 .IX Item "max-crossjump-edges" بیشینهٔ تعداد یال‌های ورودی جهت بررسی برای پرش متقاطع (cross\-jumping). الگوریتم مورد استفاده توسط \fB\-fcrossjumping\fR بر حسب تعداد یال‌های ورودی به هر بلوک از مرتبهٔ O(N^2) است. مقادیر بزرگ‌تر به معنای بهینه‌سازی تهاجمی‌تر هستند که زمان کامپایل را با بهبود احتمالاً اندک در اندازهٔ فایل اجرایی افزایش می‌دهد. .IP \fBmin\-crossjump\-insns\fR 4 .IX Item "min-crossjump-insns" کمینهٔ تعداد دستورالعمل‌هایی که باید در انتهای دو بلوک مطابقت داشته باشند تا پرش متقاطع روی آن‌ها انجام شود. در حالتی که تمام دستورالعمل‌های بلوکی که پرش متقاطع از آن انجام می‌شود منطبق باشند، این مقدار نادیده گرفته می‌شود. .IP \fBmax\-grow\-copy\-bb\-insns\fR 4 .IX Item "max-grow-copy-bb-insns" بیشینهٔ ضریب گسترش اندازهٔ کد هنگام کپی کردن بلوک‌های پایه (basic blocks) به جای پرش. این گسترش نسبت به یک دستورالعمل پرش سنجیده می‌شود. .IP \fBmax\-goto\-duplication\-insns\fR 4 .IX Item "max-goto-duplication-insns" بیشینهٔ تعداد دستورالعمل‌ها برای تکثیر در بلوکی که به یک goto محاسبه‌شده (computed goto) می‌پرد. برای جلوگیری از رفتار O(N^2) در چندین گذر، GCC دستورات goto محاسبه‌شده را در مراحل اولیهٔ فرآیند کامپایل فاکتورگیری می‌کند و تا حد امکان دیر آن‌ها را از حالت فاکتور خارج می‌سازد. تنها پرش‌های محاسبه‌شده در انتهای بلوک‌های پایه‌ای که بیش از max\-goto\-duplication\-insns دستورالعمل ندارند از حالت فاکتور خارج می‌شوند. .IP \fBmax\-delay\-slot\-insn\-search\fR 4 .IX Item "max-delay-slot-insn-search" بیشینهٔ تعداد دستورالعمل‌ها برای بررسی هنگام جستجوی دستورالعملی جهت پر کردن شکاف تأخیر (delay slot). اگر بیش از این تعداد دلخواه از دستورالعمل‌ها جستجو شوند، صرفه‌جویی زمانی حاصل از پر کردن شکاف تأخیر بسیار ناچیز خواهد بود، بنابراین جستجو متوقف می‌شود. مقادیر بزرگ‌تر به معنای بهینه‌سازی تهاجمی‌تر هستند که زمان کامپایل را با بهبود احتمالاً ناچیز در زمان اجرا افزایش می‌دهد. .IP \fBmax\-delay\-slot\-live\-search\fR 4 .IX Item "max-delay-slot-live-search" هنگام تلاش برای پر کردن شکاف‌های تأخیر، بیشینهٔ تعداد دستورالعمل‌ها برای بررسی هنگام جستجوی بلوکی با اطلاعات ثبات‌های زندهٔ (live register) معتبر. افزایش این مقدار دلخواه به معنای بهینه‌سازی تهاجمی‌تر بوده و زمان کامپایل را افزایش می‌دهد. هنگامی که کد شکاف تأخیر برای نگهداری گراف جریان کنترل بازنویسی شود، این پارامتر باید حذف گردد. .IP \fBmax\-gcse\-memory\fR 4 .IX Item "max-gcse-memory" میزان تقریبی بیشینهٔ حافظه به \f(CW\*(C`kB\*(C'\fR که می‌تواند برای انجام بهینه‌سازی «حذف سراسری عبارت‌های فرعی مشترک» (global common subexpression elimination) تخصیص یابد. اگر حافظه‌ای بیش از مقدار مشخص‌شده نیاز باشد، این بهینه‌سازی انجام نمی‌شود. .IP \fBmax\-gcse\-insertion\-ratio\fR 4 .IX Item "max-gcse-insertion-ratio" اگر نسبت درج عبارات به حذف آن‌ها برای هر عبارتی بزرگ‌تر از این مقدار باشد، آنگاه RTL PRE عبارت را درج یا حذف می‌کند و بدین ترتیب محاسبات تا حدی تکراری را در جریان دستورالعمل‌ها باقی می‌گذارد. .IP \fBmax\-pending\-list\-length\fR 4 .IX Item "max-pending-list-length" بیشینهٔ تعداد وابستگی‌های معلقی که زمان‌بندی (scheduling) پیش از تخلیهٔ وضعیت فعلی و شروع دوباره مجاز می‌داند. توابع بزرگ با انشعاب‌ها یا فراخوانی‌های اندک می‌توانند فهرست‌های بسیار بزرگی ایجاد کنند که بی‌دلیل حافظه و منابع را مصرف می‌کنند. .IP \fBmax\-modulo\-backtrack\-attempts\fR 4 .IX Item "max-modulo-backtrack-attempts" بیشینهٔ تعداد تلاش‌ها برای پس‌گرد (backtrack) که زمان‌بند هنگام زمان‌بندی پیمانه‌ای (modulo scheduling) یک حلقه باید انجام دهد. مقادیر بزرگ‌تر می‌توانند زمان کامپایل را به‌طور نمایی افزایش دهند. .IP \fBmax\-inline\-functions\-called\-once\-loop\-depth\fR 4 .IX Item "max-inline-functions-called-once-loop-depth" بیشینهٔ عمق حلقهٔ یک فراخوانی که توسط روش‌های ابتکاری درون‌خطی‌سازی (که سعی در درون‌خطی کردن تمامی توابع با یک‌بار فراخوانی دارند) در نظر گرفته می‌شود. .IP \fBmax\-inline\-functions\-called\-once\-insns\fR 4 .IX Item "max-inline-functions-called-once-insns" بیشینهٔ اندازهٔ تخمینی توابع تولیدشده هنگام درون‌خطی کردن توابعی که تنها یک بار فراخوانی شده‌اند. .IP \fBmax\-inline\-insns\-single\fR 4 .IX Item "max-inline-insns-single" چندین پارامتر، مؤلفهٔ tree inliner مورد استفاده در GCC را کنترل می‌کنند. این عدد بیشینهٔ تعداد دستورالعمل‌ها (شمارش‌شده در نمایش درونی GCC) در یک تک‌تابع را تعیین می‌کند که tree inliner برای درون‌خطی‌سازی در نظر می‌گیرد. این مورد تنها بر توابع اعلان‌شده به صورت inline و متدهایی که در اعلان کلاس (C++) پیاده‌سازی شده‌اند تأثیر می‌گذارد. .IP \fBmax\-inline\-insns\-auto\fR 4 .IX Item "max-inline-insns-auto" هنگامی که از \fB\-finline\-functions\fR (گنجانده‌شده در \fB\-O3\fR) استفاده می‌کنید، توابع فراوانی که در غیر این صورت برای درون‌خطی‌سازی توسط کامپایلر بررسی نمی‌شدند، ارزیابی می‌شوند. برای این توابع، می‌توان حد متفاوتی (محدودکننده‌تر) در مقایسه با توابع اعلان‌شده به صورت inline اعمال کرد (\fB\-\-param max\-inline\-insns\-auto\fR). .IP \fBmax\-inline\-insns\-small\fR 4 .IX Item "max-inline-insns-small" این کرانی است که بر فراخوانی‌های در نظر گرفته‌شده به عنوان مرتبط با \&\fB\-finline\-small\-functions\fR اعمال می‌شود. .IP \fBmax\-inline\-insns\-size\fR 4 .IX Item "max-inline-insns-size" این کرانی است که بر فراخوانی‌های بهینه‌سازی‌شده برای اندازه اعمال می‌شود. رشد اندک اندازه ممکن است برای پیش‌بینی فرصت‌های بهینه‌سازی که توسط درون‌خطی‌سازی پدیدار می‌شوند، مطلوب باشد. .IP \fBuninlined\-function\-insns\fR 4 .IX Item "uninlined-function-insns" تعداد دستورالعمل‌هایی که درون‌خطی‌ساز برای سربار تابع مانند مقدمه (prologue) و مؤخره (epilogue) تابع به حساب می‌آورد. .IP \fBuninlined\-function\-time\fR 4 .IX Item "uninlined-function-time" زمان اضافه‌ای که درون‌خطی‌ساز برای سربار تابع، مانند زمان لازم برای اجرای مقدمه و مؤخرهٔ تابع، به حساب می‌آورد. .IP \fBinline\-heuristics\-hint\-percent\fR 4 .IX Item "inline-heuristics-hint-percent" مقیاس (به درصد) اعمال‌شده به \fBinline\-insns\-single\fR، \&\fBinline\-insns\-single\-O2\fR و \fBinline\-insns\-auto\fR هنگامی که روش‌های ابتکاری درون‌خطی اشاره می‌کنند که درون‌خطی‌سازی بسیار سودمند است (بهینه‌سازی‌های بعدی را ممکن می‌سازد). .IP \fBuninlined\-thunk\-insns\fR 4 .IX Item "uninlined-thunk-insns" .PD 0 .IP \fBuninlined\-thunk\-time\fR 4 .IX Item "uninlined-thunk-time" .PD مشابه \fB\-\-param uninlined\-function\-insns\fR و \&\fB\-\-param uninlined\-function\-time\fR اما برای thunkهای تابع اعمال می‌شود..IP \fBinline\-min\-speedup\fR 4 .IX Item "inline-min-speedup" هنگامی که بهبود تخمینی کارایی در زمان اجرای فراخواننده (caller) + فراخوانده‌شده (callee) از این آستانه (به درصد) فراتر رود، تابع می‌تواند صرف‌نظر از محدودیت روی \&\fB\-\-param max\-inline\-insns\-single\fR و \fB\-\-param max\-inline\-insns\-auto\fR درون‌خطی شود. .IP \fBlarge\-function\-insns\fR 4 .IX Item "large-function-insns" حد تعیین‌کنندهٔ توابع واقعاً بزرگ. برای توابعی که پس از درون‌خطی‌سازی بزرگ‌تر از این حد باشند، درون‌خطی‌سازی توسط \&\fB\-\-param large\-function\-growth\fR محدود می‌شود. این پارامتر عمدتاً برای جلوگیری از زمان کامپایل بیش از حد ناشی از الگوریتم‌های غیرخطی مورد استفاده در بخش پشتی (back end) مفید است. .IP \fBlarge\-function\-growth\fR 4 .IX Item "large-function-growth" بیشینهٔ رشد توابع بزرگ ناشی از درون‌خطی‌سازی را بر حسب درصد مشخص می‌کند. برای مثال، مقدار پارامتر 100 رشد تابع بزرگ را به 2.0 برابر اندازهٔ اصلی محدود می‌کند. .IP \fBlarge\-unit\-insns\fR 4 .IX Item "large-unit-insns" حد تعیین‌کنندهٔ واحد ترجمه (translation unit) بزرگ. رشد ناشی از درون‌خطی‌سازی واحدهایی که از این حد بزرگ‌تر هستند، توسط \fB\-\-param inline\-unit\-growth\fR محدود می‌شود. برای واحدهای کوچک ممکن است این محدودیت بیش از حد سخت‌گیرانه باشد. برای مثال، واحدی متشکل از تابع A که درون‌خطی است و تابع B که صرفاً ۳ بار A را فراخوانی می‌کند در نظر بگیرید. اگر B نسبت به A کوچک باشد، رشد واحد 300\e% خواهد بود و با این وجود چنین درون‌خطی‌سازی بسیار معقول است. با این حال، برای واحدهای بسیار بزرگ متشکل از توابع کوچکِ قابل درون‌خطی، محدودیت کلی رشد واحد برای جلوگیری از انفجار نمایی اندازهٔ کد الزامی است. بنابراین برای واحدهای کوچک‌تر، اندازه قبل از اعمال \fB\-\-param inline\-unit\-growth\fR تا \fB\-\-param large\-unit\-insns\fR افزایش داده می‌شود. .IP \fBlazy\-modules\fR 4 .IX Item "lazy-modules" بیشینهٔ تعداد فایل‌های ماژول C++ که در بارگذاری تنبل (lazy loading) می‌توانند به‌طور هم‌زمان باز باشند. .IP \fBinline\-unit\-growth\fR 4 .IX Item "inline-unit-growth" بیشینهٔ رشد کلی واحد کامپایل ناشی از درون‌خطی‌سازی را مشخص می‌کند. برای مثال، مقدار پارامتر 20 رشد واحد را به 1.2 برابر اندازهٔ اصلی محدود می‌کند. توابع سرد (cold) (که یا از طریق یک صفت یا توسط بازخورد پروفایل علامت‌گذاری شده‌اند) در اندازهٔ واحد به حساب نمی‌آیند. .IP \fBipa\-cp\-unit\-growth\fR 4 .IX Item "ipa-cp-unit-growth" بیشینهٔ رشد کلی واحد کامپایل ناشی از انتشار ثابت‌های بین‌روالی (interprocedural constant propagation) را مشخص می‌کند. برای مثال، مقدار پارامتر 10 رشد واحد را به 1.1 برابر اندازهٔ اصلی محدود می‌کند. .IP \fBipa\-cp\-large\-unit\-insns\fR 4 .IX Item "ipa-cp-large-unit-insns" اندازهٔ واحد ترجمه‌ای که گذر IPA\-CP آن را بزرگ در نظر می‌گیرد. .IP \fBlarge\-stack\-frame\fR 4 .IX Item "large-stack-frame" حد تعیین‌کنندهٔ فریم‌های پشتهٔ بزرگ. در حین درون‌خطی‌سازی، الگوریتم تلاش می‌کند بیش از حد فراتر از این حد رشد نکند. .IP \fBlarge\-stack\-frame\-growth\fR 4 .IX Item "large-stack-frame-growth" بیشینهٔ رشد فریم‌های پشتهٔ بزرگ ناشی از درون‌خطی‌سازی را بر حسب درصد مشخص می‌کند. برای مثال، مقدار پارامتر 1000 رشد فریم پشتهٔ بزرگ را به 11 برابر اندازهٔ اصلی محدود می‌کند. .IP \fBmax\-inline\-insns\-recursive\fR 4 .IX Item "max-inline-insns-recursive" .PD 0 .IP \fBmax\-inline\-insns\-recursive\-auto\fR 4 .IX Item "max-inline-insns-recursive-auto" .PD بیشینهٔ تعداد دستورالعمل‌هایی را تعیین می‌کند که یک نسخهٔ خارج از خط (out\-of\-line) از یک تابع درون‌خطی بازگشتی به خود، می‌تواند با انجام درون‌خطی‌سازی بازگشتی به آن اندازه رشد کند. .Sp \&\fB\-\-param max\-inline\-insns\-recursive\fR برای توابعی که به عنوان inline اعلام شده‌اند اعمال می‌شود. برای توابعی که inline اعلام نشده‌اند، درون‌خطی‌سازی بازگشتی تنها زمانی اتفاق می‌افتد که \fB\-finline\-functions\fR (گنجانده‌شده در \fB\-O3\fR) فعال باشد؛ در این حالت به جای آن \fB\-\-param max\-inline\-insns\-recursive\-auto\fR اعمال می‌شود. .IP \fBmax\-inline\-recursive\-depth\fR 4 .IX Item "max-inline-recursive-depth" .PD 0 .IP \fBmax\-inline\-recursive\-depth\-auto\fR 4 .IX Item "max-inline-recursive-depth-auto" .PD بیشینهٔ عمق بازگشت مورد استفاده برای درون‌خطی‌سازی بازگشتی را مشخص می‌کند. .Sp \&\fB\-\-param max\-inline\-recursive\-depth\fR برای توابعی که به صورت inline تعریف شده‌اند اعمال می‌شود. برای توابعی که به صورت inline تعریف نشده‌اند، درون‌خطی‌سازی بازگشتی تنها زمانی انجام می‌شود که \fB\-finline\-functions\fR (موجود در \fB\-O3\fR) فعال باشد؛ در این حالت به جای آن \fB\-\-param max\-inline\-recursive\-depth\-auto\fR اعمال می‌شود. .IP \fBmin\-inline\-recursive\-probability\fR 4 .IX Item "min-inline-recursive-probability" درون‌خطی‌سازی بازگشتی تنها برای توابعی سودمند است که به طور میانگین بازگشت عمیقی دارند، و می‌تواند با افزایش اندازهٔ پیش‌درآمد (prologue) یا پیچیدگی بدنهٔ تابع برای سایر بهینه‌سازها، به توابعی با عمق بازگشت کم آسیب برساند. .Sp هنگامی که بازخورد پروفایل در دسترس است (به \fB\-fprofile\-generate\fR مراجعه کنید)، عمق واقعی بازگشت را می‌توان از روی احتمال بازگشت تابع از طریق یک عبارت فراخوانی معین تخمین زد. این پارامتر درون‌خطی‌سازی را فقط به عبارت‌های فراخوانی محدود می‌کند که احتمال آن‌ها از آستانهٔ مشخص‌شده (به درصد) فراتر رود. .IP \fBearly\-inlining\-insns\fR 4 .IX Item "early-inlining-insns" میزان رشدی را مشخص می‌کند که درون‌خطی‌ساز زودهنگام (early inliner) می‌تواند ایجاد کند. در عمل، این پارامتر میزان درون‌خطی‌سازی را برای کدهایی که جریمهٔ انتزاع (abstraction penalty) زیادی دارند، افزایش می‌دهد. .IP \fBmax\-early\-inliner\-iterations\fR 4 .IX Item "max-early-inliner-iterations" محدودیت تکرارهای درون‌خطی‌ساز زودهنگام. این پارامتر اساساً تعداد فراخوانی‌های غیرمستقیم تو در تو را که درون‌خطی‌ساز زودهنگام می‌تواند برطرف کند، محدود می‌سازد. زنجیره‌های عمیق‌تر همچنان توسط درون‌خطی‌سازی دیرهنگام (late inlining) مدیریت می‌شوند. .IP \fBcomdat\-sharing\-probability\fR 4 .IX Item "comdat-sharing-probability" احتمال (به درصد) این‌که توابع درون‌خطی C++ با دیداریِ comdat در میان چندین واحد کامپایل به اشتراک گذاشته شوند. .IP \fBmodref\-max\-bases\fR 4 .IX Item "modref-max-bases" .PD 0 .IP \fBmodref\-max\-refs\fR 4 .IX Item "modref-max-refs" .IP \fBmodref\-max\-accesses\fR 4 .IX Item "modref-max-accesses" .PD بیشینهٔ تعداد اشاره‌گرهای پایه، ارجاع‌ها و دسترسی‌های ذخیره‌شده برای یک تابع منفرد توسط تحلیل mod/ref را مشخص می‌کند. .IP \fBmodref\-max\-tests\fR 4 .IX Item "modref-max-tests" بیشینهٔ تعداد آزمون‌هایی را که اوراکل نام مستعار (alias oracle) می‌تواند برای رفع ابهام مکان‌های حافظه با استفاده از اطلاعات mod/ref انجام دهد مشخص می‌کند. این پارامتر باید بزرگ‌تر از \fB\-\-param modref\-max\-bases\fR و \fB\-\-param modref\-max\-refs\fR باشد. .IP \fBmodref\-max\-depth\fR 4 .IX Item "modref-max-depth" بیشینهٔ عمق پیمایش DFS مورد استفاده توسط تحلیل گریز (escape analysis) در modref را مشخص می‌کند. مقدار 0 این تحلیل را به‌طور کامل غیرفعال می‌کند. .IP \fBmodref\-max\-escape\-points\fR 4 .IX Item "modref-max-escape-points" بیشینهٔ تعداد نقاط گریز ردگیری‌شده توسط modref به ازای هر SSA\-name را مشخص می‌کند. .IP \fBmodref\-max\-adjustments\fR 4 .IX Item "modref-max-adjustments" بیشینهٔ دفعاتی را مشخص می‌کند که محدودهٔ دسترسی در طول تحلیل جریان دادهٔ modref گسترش می‌یابد. .IP \fBprofile\-func\-internal\-id\fR 4 .IX Item "profile-func-internal-id" پارامتری برای کنترل استفاده از شناسهٔ داخلی تابع در جستجوی پایگاه دادهٔ پروفایل. اگر مقدار 0 باشد، کامپایلر از شناسه‌ای استفاده می‌کند که مبتنی بر نام اسمبلی تابع و نام فایل است، که باعث می‌شود داده‌های قدیمی پروفایل در برابر تغییرات سورس مانند تغییر ترتیب توابع و غیره سازگارتر باشند. .IP \fBmin\-vect\-loop\-bound\fR 4 .IX Item "min-vect-loop-bound" حداقل تعداد تکرارهایی که در صورت کمتر بودن از آن، هنگام استفاده از \fB\-ftree\-vectorize\fR حلقه‌ها برداری‌سازی نمی‌شوند. تعداد تکرارها پس از برداری‌سازی باید بزرگ‌تر از مقدار تعیین‌شده توسط این گزینه باشد تا برداری‌سازی مجاز شود. .IP \fBgcse\-cost\-distance\-ratio\fR 4 .IX Item "gcse-cost-distance-ratio" ضریب مقیاس‌بندی در محاسبهٔ بیشینهٔ مسافتی که یک عبارت می‌تواند توسط بهینه‌سازی‌های GCSE جابجا شود. این مورد در حال حاضر فقط در گذر برافراشتن کد (code hoisting pass) پشتیبانی می‌شود. هرچه نسبت بزرگ‌تر باشد، برافراشتن کد در مواجهه با عبارت‌های ساده، یعنی عبارت‌هایی که هزینه‌ای کمتر از \fBgcse\-unrestricted\-cost\fR دارند، تهاجمی‌تر خواهد بود. تعیین مقدار 0 برافراشتن عبارت‌های ساده را غیرفعال می‌کند. .IP \fBgcse\-unrestricted\-cost\fR 4 .IX Item "gcse-unrestricted-cost" هزینه‌ای که به طور تقریبی به اندازهٔ هزینهٔ یک تک‌دستورالعمل ماشین معمولی برآورد می‌شود، و در آن بهینه‌سازی‌های GCSE مسافتی را که یک عبارت می‌تواند طی کند محدود نمی‌کنند. این ویژگی در حال حاضر تنها در گذر برافراشتن کد پشتیبانی می‌شود. هرچه هزینه کمتر باشد، برافراشتن کد تهاجمی‌تر است. تعیین مقدار 0 به همهٔ عبارت‌ها اجازه می‌دهد تا فواصل نامحدود را طی کنند. .IP \fBmax\-hoist\-depth\fR 4 .IX Item "max-hoist-depth" عمق جستجو در درخت تسلط (dominator tree) برای عبارت‌هایی که باید برافراشته شوند. این پارامتر برای جلوگیری از رفتار درجه دوم در الگوریتم برافراشتن استفاده می‌شود. مقدار 0 جستجو را محدود نمی‌کند، اما ممکن است کامپایل توابع بسیار بزرگ را کُند سازد. .IP \fBmax\-tail\-merge\-comparisons\fR 4 .IX Item "max-tail-merge-comparisons" بیشینهٔ تعداد bbsهای مشابه برای مقایسهٔ یک bb با آن‌ها. این پارامتر برای جلوگیری از رفتار درجه دوم در ادغام دم در درخت (tree tail merging) به کار می‌رود. .IP \fBmax\-tail\-merge\-iterations\fR 4 .IX Item "max-tail-merge-iterations" بیشینهٔ تعداد تکرارهای گذر روی تابع. این پارامتر برای محدود کردن زمان کامپایل در ادغام دم در درخت استفاده می‌شود. .IP \fBstore\-merging\-allow\-unaligned\fR 4 .IX Item "store-merging-allow-unaligned" به گذر ادغام ذخیره‌سازی (store merging) اجازه می‌دهد تا در صورت مجاز بودن، ذخیره‌سازی‌های ناتراز (unaligned stores) ایجاد کند..IP \fBmax\-stores\-to\-merge\fR 4 .IX Item "max-stores-to-merge" بیشینهٔ تعداد ذخیره‌سازی‌ها جهت تلاش برای ادغام در ذخیره‌سازی‌های عریض‌تر در گذر ادغام ذخیره‌سازی (store merging pass). .IP \fBmax\-store\-chains\-to\-track\fR 4 .IX Item "max-store-chains-to-track" بیشینهٔ تعداد زنجیره‌های ذخیره‌سازی برای ردگیری هم‌زمان در هنگام تلاش برای ادغام آن‌ها در ذخیره‌سازی‌های عریض‌تر در گذر ادغام ذخیره‌سازی. .IP \fBmax\-stores\-to\-track\fR 4 .IX Item "max-stores-to-track" بیشینهٔ تعداد ذخیره‌سازی‌ها برای ردگیری هم‌زمان در هنگام تلاش برای ادغام آن‌ها در ذخیره‌سازی‌های عریض‌تر در گذر ادغام ذخیره‌سازی. .IP \fBmax\-unrolled\-insns\fR 4 .IX Item "max-unrolled-insns" بیشینهٔ تعداد دستورالعمل‌هایی که یک حلقه می‌تواند داشته باشد تا باز شود (unrolled). اگر حلقه‌ای باز شود، این پارامتر همچنین تعیین می‌کند که کد حلقه چند بار باز شود. .IP \fBmax\-average\-unrolled\-insns\fR 4 .IX Item "max-average-unrolled-insns" بیشینهٔ تعداد دستورالعمل‌ها، وزن‌دهی‌شده بر اساس احتمال اجرای آن‌ها، که یک حلقه می‌تواند داشته باشد تا باز شود. اگر حلقه‌ای باز شود، این پارامتر همچنین تعیین می‌کند که کد حلقه چند بار باز شود. .IP \fBmax\-unroll\-times\fR 4 .IX Item "max-unroll-times" بیشینهٔ دفعات باز کردن (unrolling) یک حلقهٔ منفرد. .IP \fBmax\-peeled\-insns\fR 4 .IX Item "max-peeled-insns" بیشینهٔ تعداد دستورالعمل‌هایی که یک حلقه می‌تواند داشته باشد تا پوسته‌کنی (peeled) شود. اگر حلقه‌ای پوسته‌کنی شود، این پارامتر همچنین تعیین می‌کند که کد حلقه چند بار پوسته‌کنی شود. .IP \fBmax\-peel\-times\fR 4 .IX Item "max-peel-times" بیشینهٔ دفعات پوسته‌کنی (peeling) یک حلقهٔ منفرد. .IP \fBmax\-peel\-branches\fR 4 .IX Item "max-peel-branches" بیشینهٔ تعداد شاخه‌ها در مسیر داغ (hot path) در امتداد توالی پوسته‌کنی‌شده. .IP \fBmax\-completely\-peeled\-insns\fR 4 .IX Item "max-completely-peeled-insns" بیشینهٔ تعداد دستورالعمل‌های یک حلقهٔ کاملاً پوسته‌کنی‌شده. .IP \fBmax\-completely\-peel\-times\fR 4 .IX Item "max-completely-peel-times" بیشینهٔ تعداد تکرارهای یک حلقه برای اینکه مناسب پوسته‌کنی کامل باشد. .IP \fBmax\-completely\-peel\-loop\-nest\-depth\fR 4 .IX Item "max-completely-peel-loop-nest-depth" بیشینهٔ عمق یک آشیانهٔ حلقه که برای پوسته‌کنی کامل مناسب است. .IP \fBmax\-unswitch\-insns\fR 4 .IX Item "max-unswitch-insns" بیشینهٔ تعداد دستورالعمل‌های یک حلقهٔ برون‌بری‌شده از شرط (unswitched loop). .IP \fBmax\-unswitch\-depth\fR 4 .IX Item "max-unswitch-depth" بیشینهٔ عمق یک آشیانهٔ حلقه جهت برون‌بری شرط (unswitch). .IP \fBlim\-expensive\fR 4 .IX Item "lim-expensive" کمینهٔ هزینهٔ یک عبارت گران‌قیمت در انتقال عبارات نامتغیر حلقه (loop invariant motion). .IP \fBmin\-loop\-cond\-split\-prob\fR 4 .IX Item "min-loop-cond-split-prob" هنگامی که اطلاعات پروفایل FDO در دسترس باشد، \fBmin\-loop\-cond\-split\-prob\fR کمینهٔ آستانهٔ احتمال را برای یک دستور شرطی شبه‌نامتغیر جهت راه‌اندازی شکافتن حلقه (loop split) مشخص می‌کند. .IP \fBiv\-consider\-all\-candidates\-bound\fR 4 .IX Item "iv-consider-all-candidates-bound" حد آستانه برای تعداد نامزدهای متغیرهای استقرایی (induction variables)، که زیر آن همهٔ نامزدها برای هر مورد استفاده در بهینه‌سازی‌های متغیر استقرایی در نظر گرفته می‌شوند. اگر تعداد نامزدها بیشتر از این مقدار باشد، برای جلوگیری از پیچیدگی زمانی درجه دو، تنها مرتبط‌ترین آن‌ها در نظر گرفته می‌شوند. .IP \fBiv\-max\-considered\-uses\fR 4 .IX Item "iv-max-considered-uses" بهینه‌سازی‌های متغیر استقرایی از بررسی حلقه‌هایی که تعداد کاربردهای متغیر استقرایی در آن‌ها بیشتر از این باشد، صرف‌نظر می‌کنند. .IP \fBiv\-always\-prune\-cand\-set\-bound\fR 4 .IX Item "iv-always-prune-cand-set-bound" اگر تعداد نامزدها در مجموعه کمتر از این مقدار باشد، هنگام افزودن یک متغیر استقرایی جدید، همیشه تلاش می‌شود تا موارد غیرضروری از مجموعه هرس (prune) شوند. .IP \fBavg\-loop\-niter\fR 4 .IX Item "avg-loop-niter" میانگین تعداد تکرارهای یک حلقه. .IP \fBdse\-max\-object\-size\fR 4 .IX Item "dse-max-object-size" بیشینهٔ اندازه (به بایت) اشیائی که به‌صورت بایتی توسط حذف ذخیره‌سازی مرده (dead store elimination) ردگیری می‌شوند. مقادیر بزرگ‌تر ممکن است به زمان‌های کامپایل طولانی‌تر منجر شوند. .IP \fBdse\-max\-alias\-queries\-per\-store\fR 4 .IX Item "dse-max-alias-queries-per-store" بیشینهٔ تعداد پرس‌وجوها از پیشگوی نام مستعار (alias oracle) به ازای هر ذخیره‌سازی. مقادیر بزرگ‌تر باعث افزایش زمان کامپایل شده و ممکن است به حذف ذخیره‌سازی‌های مردهٔ بیشتری بیانجامد. .IP \fBscev\-max\-expr\-size\fR 4 .IX Item "scev-max-expr-size" حد آستانه برای اندازهٔ عبارت‌های مورد استفاده در تحلیل‌گر تکامل نرده‌ای (scalar evolutions analyzer). عبارت‌های بزرگ سرعت تحلیل‌گر را کاهش می‌دهند. .IP \fBscev\-max\-expr\-complexity\fR 4 .IX Item "scev-max-expr-complexity" حد آستانه برای پیچیدگی عبارت‌ها در تحلیل‌گر تکامل نرده‌ای. عبارت‌های پیچیده سرعت تحلیل‌گر را کاهش می‌دهند. .IP \fBmax\-tree\-if\-conversion\-phi\-args\fR 4 .IX Item "max-tree-if-conversion-phi-args" بیشینهٔ تعداد آرگومان‌ها در یک PHI که توسط تبدیلِ if در درخت (TREE if conversion) پشتیبانی می‌شود، مگر اینکه حلقه با عملگر pragmaی simd مشخص شده باشد. .IP \fBvect\-max\-layout\-candidates\fR 4 .IX Item "vect-max-layout-candidates" بیشینهٔ تعداد چیدمان‌های برداری ممکن (مانند جایگشت‌ها) جهت بررسی هنگام بهینه‌سازی کدهای آمادهٔ برداری‌سازی. .IP \fBvect\-max\-version\-for\-alignment\-checks\fR 4 .IX Item "vect-max-version-for-alignment-checks" بیشینهٔ تعداد بررسی‌های زمان اجرا که می‌توان هنگام نسخه‌بندی حلقه برای هم‌ترازی در برداری‌ساز (vectorizer) انجام داد. .IP \fBvect\-max\-version\-for\-alias\-checks\fR 4 .IX Item "vect-max-version-for-alias-checks" بیشینهٔ تعداد بررسی‌های زمان اجرا که می‌توان هنگام نسخه‌بندی حلقه برای نام مستعار (alias) در برداری‌ساز انجام داد. .IP \fBvect\-max\-peeling\-for\-alignment\fR 4 .IX Item "vect-max-peeling-for-alignment" بیشینهٔ دفعات پوسته‌کنی حلقه برای بهبود هم‌ترازی دسترسی در برداری‌ساز. مقدار \-1 به معنای نبود محدودیت است. .IP \fBmax\-iterations\-to\-track\fR 4 .IX Item "max-iterations-to-track" بیشینهٔ تعداد تکرارهای یک حلقه که الگوریتم جستجوی جامع (brute\-force) برای تحلیل تعداد تکرارهای حلقه تلاش می‌کند آن را ارزیابی کند. .IP \fBhot\-bb\-count\-fraction\fR 4 .IX Item "hot-bb-count-fraction" مخرج n از کسر 1/n بیشینهٔ تعداد اجرای یک بلوک پایه در کل برنامه که یک بلوک پایه حداقل باید داشته باشد تا داغ (hot) در نظر گرفته شود. مقدار پیش‌فرض 10000 است، به این معنی که اگر تعداد اجرای یک بلوک پایه بیشتر از 1/10000 بیشینهٔ تعداد اجرا باشد، داغ تلقی می‌شود. 0 به این معنی است که هرگز داغ در نظر گرفته نمی‌شود. در حالت غیر LTO استفاده می‌شود. .IP \fBhot\-bb\-count\-ws\-permille\fR 4 .IX Item "hot-bb-count-ws-permille" تعداد در‌هزار پر‌اجراترین، در محدودهٔ 0 تا 1000، از اجرای پروفایل‌شدهٔ کل برنامه که تعداد اجرای یک بلوک پایه باید بخشی از آن باشد تا داغ در نظر گرفته شود. مقدار پیش‌فرض 990 است، به این معنی که اگر تعداد اجرای یک بلوک پایه در بالاترین 990 در‌هزار، یا 99.0% از اجرای پروفایل‌شدهٔ کل برنامه سهم داشته باشد، داغ محسوب می‌شود. 0 به این معنی است که هرگز داغ در نظر گرفته نمی‌شود. در حالت LTO استفاده می‌شود. .IP \fBhot\-bb\-frequency\-fraction\fR 4 .IX Item "hot-bb-frequency-fraction" مخرج n از کسر 1/n بسامد اجرای بلوک ورودی یک تابع که یک بلوک پایه از این تابع باید حداقل داشته باشد تا داغ در نظر گرفته شود. مقدار پیش‌فرض 1000 است، به این معنی که اگر یک بلوک پایه در یک تابع با بسامدی بیشتر از 1/1000 بسامد بلوک ورودی تابع اجرا شود، داغ تلقی می‌شود. 0 به این معنی است که هرگز داغ در نظر گرفته نمی‌شود. .IP \fBunlikely\-bb\-count\-fraction\fR 4 .IX Item "unlikely-bb-count-fraction" مخرج n از کسر 1/n تعداد اجراهای پروفایل‌شدهٔ کل برنامه که تعداد اجرای یک بلوک پایه باید کمتر از آن باشد تا اجرای آن بلوک پایه کم‌احتمال (unlikely executed) تلقی شود. مقدار پیش‌فرض 20 است، به این معنی که اگر یک بلوک پایه در کمتر از 1/20، یا 5% از اجراهای برنامه اجرا شود، کم‌احتمال برای اجرا در نظر گرفته می‌شود. 0 به این معنی است که همیشه اجرای آن کم‌احتمال تلقی می‌شود. .IP \fBmax\-predicted\-iterations\fR 4 .IX Item "max-predicted-iterations" بیشینهٔ تعداد تکرارهای حلقه که به‌صورت ایستا پیش‌بینی می‌کنیم. این ویژگی در مواردی مفید است که یک تابع شامل یک حلقه با کران مشخص و حلقهٔ دیگری با کران نامشخص باشد. تعداد تکرارهای مشخص به‌درستی پیش‌بینی می‌شود، در حالی که میانگین تعداد تکرارهای نامشخص تقریباً 10 تخمین زده می‌شود. این بدان معناست که حلقهٔ بدون کران در مقایسه با دیگری به‌طور مصنوعی سرد به نظر می‌رسد. .IP \fBbuiltin\-expect\-probability\fR 4 .IX Item "builtin-expect-probability" کنترل احتمال اینکه عبارت دارای مقدار مشخص‌شده باشد. این پارامتر یک درصد (یعنی 0 ... 100) را به عنوان ورودی دریافت می‌کند. .IP \fBbuiltin\-string\-cmp\-inline\-length\fR 4 .IX Item "builtin-string-cmp-inline-length" بیشینهٔ طول یک رشتهٔ ثابت برای فراخوانیِ توکار cmp رشته که واجد شرایط جایگذاری درون‌خطی (inlining) است. .IP \fBalign\-threshold\fR 4 .IX Item "align-threshold" انتخاب کسری از بیشینهٔ بسامد اجراهای یک بلوک پایه در یک تابع جهت هم‌تراز کردن بلوک پایه. .IP \fBalign\-loop\-iterations\fR 4 .IX Item "align-loop-iterations" حلقه‌ای که انتظار می‌رود حداقل به تعداد تکرارهای انتخابی تکرار شود، هم‌تراز می‌گردد. .IP \fBtracer\-dynamic\-coverage\fR 4 .IX Item "tracer-dynamic-coverage" .PD 0 .IP \fBtracer\-dynamic\-coverage\-feedback\fR 4 .IX Item "tracer-dynamic-coverage-feedback".PD این مقدار برای محدود کردن تشکیل اَبَربلوک (superblock) پس از پوشش‌دهی درصد مشخص‌شده‌ای از دستورالعمل‌های اجراشده استفاده می‌شود. این کار گسترش غیرضروری اندازه کد را محدود می‌کند. .Sp پارامتر \fBtracer\-dynamic\-coverage\-feedback\fR تنها زمانی استفاده می‌شود که بازخورد پروفایل (profile feedback) در دسترس باشد. پروفایل‌های واقعی (برخلاف موارد تخمین‌زده‌شده به صورت ایستا) توازن بسیار کمتری دارند که اجازه می‌دهد آستانه مقدار بزرگ‌تری داشته باشد. .IP \fBtracer\-max\-code\-growth\fR 4 .IX Item "tracer-max-code-growth" تکثیر دنباله (tail duplication) را به محض اینکه رشد کد به درصد مشخص‌شده رسید متوقف می‌کند. این یک محدودیت تا حدی مصنوعی است، چرا که بیشتر نسخه‌های تکراری بعداً در جهش متقاطع (cross jumping) حذف می‌شوند، بنابراین ممکن است روی مقادیر بسیار بالاتری نسبت به رشد کد مورد نظر تنظیم شود. .IP \fBtracer\-min\-branch\-ratio\fR 4 .IX Item "tracer-min-branch-ratio" هنگامی که احتمال معکوسِ بهترین یال کمتر از این آستانه (به درصد) باشد، رشد معکوس را متوقف می‌کند. .IP \fBtracer\-min\-branch\-probability\fR 4 .IX Item "tracer-min-branch-probability" .PD 0 .IP \fBtracer\-min\-branch\-probability\-feedback\fR 4 .IX Item "tracer-min-branch-probability-feedback" .PD رشد روبه‌جلو را در صورتی که بهترین یال احتمالی کمتر از این آستانه داشته باشد متوقف می‌کند. .Sp مشابه \fBtracer\-dynamic\-coverage\fR دو پارامتر ارائه شده است. \fBtracer\-min\-branch\-probability\-feedback\fR برای کامپایل با بازخورد پروفایل، و \fBtracer\-min\-branch\-probability\fR برای کامپایل بدون آن استفاده می‌شود. مقدار برای کامپایل با بازخورد پروفایل باید محافظه‌کارانه‌تر (بزرگ‌تر) باشد تا ردیاب (tracer) مؤثر واقع شود. .IP \fBstack\-clash\-protection\-guard\-size\fR 4 .IX Item "stack-clash-protection-guard-size" اندازه محافظ پشته (stack guard) ارائه‌شده توسط سیستم‌عامل را بر مبنای ۲ به توان \fInum\fR بایت مشخص می‌کند. مقادیر بالاتر ممکن است تعداد کاوش‌های (probes) صریح را کاهش دهند، اما مقداری بزرگ‌تر از محافظ ارائه‌شده توسط سیستم‌عامل، کد را در برابر حملات نوع برخورد پشته (stack clash) آسیب‌پذیر می‌گذارد. .IP \fBstack\-clash\-protection\-probe\-interval\fR 4 .IX Item "stack-clash-protection-probe-interval" محافظت از برخورد پشته شامل کاوش فضای پشته هم‌زمان با تخصیص آن است. این پارامتر حداکثر فاصله بین کاوش‌ها در پشته را به صورت ۲ به توان \fInum\fR بایت کنترل می‌کند. مقادیر بالاتر ممکن است تعداد کاوش‌های صریح را کاهش دهند، اما مقداری بزرگ‌تر از محافظ ارائه‌شده توسط سیستم‌عامل، کد را در برابر حملات نوع برخورد پشته آسیب‌پذیر می‌گذارد. .IP \fBmax\-cse\-path\-length\fR 4 .IX Item "max-cse-path-length" حداکثر تعداد بلوک‌های پایه‌ای در مسیری که CSE در نظر می‌گیرد. .IP \fBmax\-cse\-insns\fR 4 .IX Item "max-cse-insns" حداکثر تعداد دستورالعمل‌هایی که CSE قبل از تخلیه (flushing) پردازش می‌کند. .IP \fBggc\-min\-expand\fR 4 .IX Item "ggc-min-expand" کامپایلر GCC از یک زباله‌روب (garbage collector) برای مدیریت تخصیص حافظه خود استفاده می‌کند. این پارامتر حداقل درصدی را مشخص می‌کند که هِیپ (heap) زباله‌روب مجاز است در بین دو جمع‌آوری زباله منبسط شود. تنظیم این گزینه ممکن است سرعت کامپایل را بهبود بخشد؛ اما هیچ تاثیری بر تولید کد ندارد. .Sp مقدار پیش‌فرض 30% + 70% * (RAM/1GB) با کران بالای 100% هنگام RAM >= 1GB است. اگر \f(CW\*(C`getrlimit\*(C'\fR در دسترس باشد، مفهوم «RAM» برابر با کوچک‌ترین مقدار از میان RAM واقعی و \f(CW\*(C`RLIMIT_DATA\*(C'\fR یا \f(CW\*(C`RLIMIT_AS\*(C'\fR است. اگر GCC قادر به محاسبه RAM در یک پلتفرم خاص نباشد، کران پایین 30% استفاده می‌شود. تنظیم این پارامتر و \&\fBggc\-min\-heapsize\fR روی صفر باعث می‌شود که در هر فرصت ممکن، یک جمع‌آوری کامل زباله رخ دهد. این کار بسیار کند است، اما می‌تواند برای اشکال‌زدایی مفید باشد. .IP \fBggc\-min\-heapsize\fR 4 .IX Item "ggc-min-heapsize" حداقل اندازه هِیپ زباله‌روب پیش از آنکه شروع به جمع‌آوری زباله کند. اولین جمع‌آوری پس از آن رخ می‌دهد که هیپ به اندازه \fBggc\-min\-expand\fR% بیش از \fBggc\-min\-heapsize\fR منبسط شود. باز هم، تنظیم این مقدار ممکن است سرعت کامپایل را بهبود بخشد، و هیچ تاثیری بر تولید کد ندارد. .Sp مقدار پیش‌فرض، کوچک‌ترین مقدار از میان RAM/8، RLIMIT_RSS یا محدودیتی است که سعی می‌کند اطمینان حاصل کند از RLIMIT_DATA یا RLIMIT_AS تجاوز نشود، اما با کران پایین 4096 (چهار مگابایت) و کران بالای 131072 (128 مگابایت). اگر GCC قادر به محاسبه RAM روی یک پلتفرم خاص نباشد، از کران پایین استفاده می‌شود. تنظیم بسیار بزرگ این پارامتر عملاً زباله‌روبی را غیرفعال می‌کند. تنظیم این پارامتر و \fBggc\-min\-expand\fR روی صفر باعث می‌شود که در هر فرصت یک جمع‌آوری کامل رخ دهد. .IP \fBmax\-reload\-search\-insns\fR 4 .IX Item "max-reload-search-insns" حداکثر تعداد دستورالعمل‌هایی که بازبارگذاری (reload) باید برای یافتن ثبات معادل به عقب جستجو کند. افزایش مقادیر به معنای بهینه‌سازی تهاجمی‌تر است که زمان کامپایل را با احتمال بهبود اندک در کارایی افزایش می‌دهد. .IP \fBmax\-cselib\-memory\-locations\fR 4 .IX Item "max-cselib-memory-locations" حداکثر تعداد مکان‌های حافظه‌ای که cselib باید در نظر بگیرد. افزایش مقادیر به معنای بهینه‌سازی تهاجمی‌تر است که زمان کامپایل را با احتمال بهبود اندک در کارایی افزایش می‌دهد. .IP \fBmax\-sched\-ready\-insns\fR 4 .IX Item "max-sched-ready-insns" حداکثر تعداد دستورالعمل‌های آماده صدور که زمان‌بند باید در هر زمان مشخص در طول اولین گذر زمان‌بندی در نظر بگیرد. مقادیر بالاتر به معنای جستجوهای دقیق‌تر است که زمان کامپایل را با سودی احتمالاً ناچیز افزایش می‌دهد. .IP \fBmax\-sched\-region\-blocks\fR 4 .IX Item "max-sched-region-blocks" حداکثر تعداد بلوک‌ها در یک ناحیه (region) که برای زمان‌بندی بین‌بلوکی در نظر گرفته می‌شوند. .IP \fBmax\-pipeline\-region\-blocks\fR 4 .IX Item "max-pipeline-region-blocks" حداکثر تعداد بلوک‌ها در یک ناحیه که برای خط‌لوله‌ای‌سازی (pipelining) در زمان‌بند انتخابی (selective scheduler) در نظر گرفته می‌شوند. .IP \fBmax\-sched\-region\-insns\fR 4 .IX Item "max-sched-region-insns" حداکثر تعداد دستورالعمل‌ها (insns) در یک ناحیه که برای زمان‌بندی بین‌بلوکی در نظر گرفته می‌شوند. .IP \fBmax\-pipeline\-region\-insns\fR 4 .IX Item "max-pipeline-region-insns" حداکثر تعداد دستورالعمل‌ها (insns) در یک ناحیه که برای خط‌لوله‌ای‌سازی در زمان‌بند انتخابی در نظر گرفته می‌شوند. .IP \fBmin\-spec\-prob\fR 4 .IX Item "min-spec-prob" حداقل احتمال (به درصد) برای رسیدن به یک بلوک مبدا برای زمان‌بندی گمانه‌زنانه (speculative scheduling) بین‌بلوکی. .IP \fBmax\-sched\-extend\-regions\-iters\fR 4 .IX Item "max-sched-extend-regions-iters" حداکثر تعداد تکرارها در CFG برای گسترش ناحیه‌ها. مقدار 0 گسترش ناحیه‌ها را غیرفعال می‌کند. .IP \fBmax\-sched\-insn\-conflict\-delay\fR 4 .IX Item "max-sched-insn-conflict-delay" حداکثر تاخیر تداخل برای یک دستورالعمل (insn) جهت در نظر گرفتن آن برای جابه‌جایی گمانه‌زنانه. .IP \fBsched\-spec\-prob\-cutoff\fR 4 .IX Item "sched-spec-prob-cutoff" حداقل احتمال موفقیت گمانه‌زنی (به درصد)، به گونه‌ای که دستورالعمل‌های گمانه‌زنانه زمان‌بندی شوند. .IP \fBsched\-state\-edge\-prob\-cutoff\fR 4 .IX Item "sched-state-edge-prob-cutoff" حداقل احتمالی که یک یال باید داشته باشد تا زمان‌بند وضعیت خود را در امتداد آن ذخیره کند. .IP \fBsched\-mem\-true\-dep\-cost\fR 4 .IX Item "sched-mem-true-dep-cost" حداقل فاصله (بر حسب چرخه‌های CPU) میان store و load که مکان‌های حافظه یکسانی را هدف قرار می‌دهند. .IP \fBselsched\-max\-lookahead\fR 4 .IX Item "selsched-max-lookahead" حداکثر اندازه پنجره پیش‌نگری (lookahead window) در زمان‌بندی انتخابی. این مقدار، عمق جستجو برای دستورالعمل‌های در دسترس است. .IP \fBselsched\-max\-sched\-times\fR 4 .IX Item "selsched-max-sched-times" حداکثر دفعاتی که یک دستورالعمل در طول زمان‌بندی انتخابی زمان‌بندی می‌شود. این حد بر تعداد تکرارهایی است که دستورالعمل ممکن است در آن‌ها به صورت خط‌لوله‌ای اجرا شود. .IP \fBselsched\-insns\-to\-rename\fR 4 .IX Item "selsched-insns-to-rename" حداکثر تعداد بهترین دستورالعمل‌ها در لیست آماده (ready list) که برای تغییر نام در زمان‌بند انتخابی در نظر گرفته می‌شوند. .IP \fBsms\-min\-sc\fR 4 .IX Item "sms-min-sc" حداقل مقدار تعداد مراحل (stage count) که زمان‌بند پیمانه‌ای نوسانی (swing modulo scheduler) تولید می‌کند. .IP \fBmax\-last\-value\-rtl\fR 4 .IX Item "max-last-value-rtl" حداکثر اندازه اندازه‌گیری‌شده بر حسب تعداد RTLهایی که می‌توانند در یک عبارت در ترکیب‌کننده (combiner) برای یک شبه‌ثبات (pseudo register) به عنوان آخرین مقدار شناخته‌شده آن ثبات ثبت شوند. .IP \fBmax\-combine\-insns\fR 4 .IX Item "max-combine-insns" حداکثر تعداد دستورالعمل‌هایی که ترکیب‌کننده RTL سعی می‌کند با هم ترکیب کند. .IP \fBmax\-combine\-search\-insns\fR 4 .IX Item "max-combine-search-insns" حداکثر تعداد دستورالعمل‌هایی که ترکیب‌کننده RTL برای یافتن استفاده بعدی از یک تعریف ثبات مشخص جستجو می‌کند. اگر این محدودیت بدون یافتن چنین استفاده‌ای حاصل شود، ترکیب‌کننده تلاش برای بهینه‌سازی تعریف را متوقف خواهد کرد. .Sp در حال حاضر این محدودیت فقط پس از برخی تلاش‌های موفق برای ترکیب اعمال می‌شود، اما می‌تواند در آینده به موارد دیگر نیز گسترش یابد. .IP \fBinteger\-share\-limit\fR 4 .IX Item "integer-share-limit" ثابت‌های صحیح کوچک می‌توانند از یک ساختار داده مشترک استفاده کنند که مصرف حافظه کامپایلر را کاهش داده و سرعت آن را افزایش می‌دهد. این گزینه حداکثر مقدار یک ثابت صحیح مشترک را تنظیم می‌کند. .IP \fBssp\-buffer\-size\fR 4 .IX Item "ssp-buffer-size" حداقل اندازه بافرها (یعنی آرایه‌ها) که هنگام استفاده از \fB\-fstack\-protector\fR محافظت در برابر خرد شدن پشته (stack smashing) را دریافت می‌کنند..IP \fBmin\-size\-for\-stack\-sharing\fR 4 .IX Item "min-size-for-stack-sharing" حداقل اندازه متغیرهایی که هنگام عدم بهینه‌سازی در اشتراک‌گذاری شیار پشته (stack slot sharing) شرکت می‌کنند. .IP \fBmax\-jump\-thread\-duplication\-stmts\fR 4 .IX Item "max-jump-thread-duplication-stmts" حداکثر تعداد دستورهای مجاز در یک بلوک که هنگام نخ‌بندی پرش‌ها (jump threading) نیاز به تکثیر دارد. .IP \fBmax\-jump\-thread\-paths\fR 4 .IX Item "max-jump-thread-paths" حداکثر تعداد مسیرهایی که هنگام جستجو برای فرصت‌های نخ‌بندی پرش در نظر گرفته می‌شوند. هنگام رسیدن به یک بلوک، یال‌های ورودی تنها در صورتی بررسی می‌شوند که حاصل‌ضرب تعداد مسیرهای جستجو شده تا کنون در تعداد یال‌های ورودی، از حداکثر تعداد مسیرهای مشخص‌شده فراتر نرود. .IP \fBmax\-fields\-for\-field\-sensitive\fR 4 .IX Item "max-fields-for-field-sensitive" حداکثر تعداد فیلدها در یک ساختار که در طول تحلیل اشاره‌گرها به صورت حساس به فیلد (field-sensitive) با آن‌ها برخورد می‌شود. .IP \fBprefetch\-latency\fR 4 .IX Item "prefetch-latency" تخمین میانگین تعداد دستورالعمل‌هایی که پیش از پایان پیش‌واکشی (prefetch) اجرا می‌شوند. فاصله پیش‌واکشی رو به جلو با این مقدار ثابت متناسب است. افزایش این مقدار ممکن است به پیش‌واکشی جریان‌های کمتری نیز منجر شود (گزینه \fBsimultaneous\-prefetches\fR را ببینید). .IP \fBsimultaneous\-prefetches\fR 4 .IX Item "simultaneous-prefetches" حداکثر تعداد پیش‌واکشی‌هایی که می‌توانند به طور هم‌زمان اجرا شوند. .IP \fBl1\-cache\-line\-size\fR 4 .IX Item "l1-cache-line-size" اندازه خط حافظه نهان در حافظه نهان داده L1، به بایت. .IP \fBl1\-cache\-size\fR 4 .IX Item "l1-cache-size" اندازه حافظه نهان داده L1، به کیلوبایت. .IP \fBl2\-cache\-size\fR 4 .IX Item "l2-cache-size" اندازه حافظه نهان داده L2، به کیلوبایت. .IP \fBprefetch\-dynamic\-strides\fR 4 .IX Item "prefetch-dynamic-strides" مشخص می‌کند که آیا مرحله پیش‌واکشی آرایه در حلقه باید راهنمایی‌های پیش‌واکشی نرم‌افزاری را برای گام‌های (strides) غیرثابت صادر کند یا خیر. در برخی موارد این کار ممکن است سودمند باشد، هرچند غیرثابت بودن گام ممکن است پیش‌بینی زمان سودمندی قطعی صدور این راهنمایی‌ها را دشوار کند. .Sp اگر راهنمایی‌های پیش‌واکشی باید برای گام‌های غیرثابت صادر شوند، مقدار را 1 قرار دهید. اگر راهنمایی‌های پیش‌واکشی فقط باید برای گام‌هایی صادر شوند که ثابت شناخته شده و کمتر از \fBprefetch\-minimum\-stride\fR هستند، آن را برابر 0 قرار دهید. .IP \fBprefetch\-minimum\-stride\fR 4 .IX Item "prefetch-minimum-stride" حداقل گام ثابت، به بایت، برای شروع استفاده از راهنمایی‌های پیش‌واکشی. اگر گام کمتر از این آستانه باشد، راهنمایی‌های پیش‌واکشی صادر نخواهند شد. .Sp این تنظیم برای پردازنده‌های دارای پیش‌واکِش‌های سخت‌افزاری مفید است؛ در چنین حالتی ممکن است تداخلاتی بین پیش‌واکِش‌های سخت‌افزاری و پیش‌واکِش‌های نرم‌افزاری به وجود آید. اگر پیش‌واکِش‌های سخت‌افزاری حداکثر گام قابل مدیریتی دارند، باید در اینجا استفاده شود تا بهره‌وری از پیش‌واکِش‌های نرم‌افزاری بهبود یابد. .Sp مقدار \-1 به این معنی است که آستانه‌ای وجود ندارد و بنابراین راهنمایی‌های پیش‌واکشی می‌توانند برای هر گام ثابتی صادر شوند. .Sp این تنظیم تنها برای گام‌هایی که شناخته‌شده و ثابت هستند کاربرد دارد. .IP \fBdestructive\-interference\-size\fR 4 .IX Item "destructive-interference-size" .PD 0 .IP \fBconstructive\-interference\-size\fR 4 .IX Item "constructive-interference-size" .PD مقادیر مربوط به متغیرهای C++17 به نام‌های \&\f(CW\*(C`std::hardware_destructive_interference_size\*(C'\fR و \&\f(CW\*(C`std::hardware_constructive_interference_size\*(C'\fR. اندازه تداخل مخرب، حداقل آفست توصیه‌شده بین دو شیء مستقل است که به صورت هم‌روند مورد دسترسی قرار می‌گیرند؛ اندازه تداخل سازنده، حداکثر اندازه توصیه‌شده از حافظه پیوسته است که با هم مورد دسترسی قرار می‌گیرند. به طور معمول هر دو برابر با اندازه یک خط حافظه نهان L1 معماری مقصد، به بایت، خواهند بود. برای یک مقصد عمومی که دامنه‌ای از اندازه‌های خط حافظه نهان L1 را پوشش می‌دهد، اندازه تداخل سازنده معمولاً در انتهای کوچک دامنه و اندازه تداخل مخرب در انتهای بزرگ دامنه خواهد بود. .Sp اندازه تداخل مخرب برای استفاده در چینش (layout) در نظر گرفته شده است و بنابراین بر ABI تأثیر می‌گذارد. انتظار نمی‌رود مقدار پیش‌فرض پایدار باشد، و در برخی مقاصد با \fB\-mtune\fR تغییر می‌کند؛ بنابراین استفاده از این متغیر در زمینه‌ای که پایداری ABI مهم است (مانند رابط عمومی یک کتابخانه) اکیداً منع می‌شود؛ در صورت استفاده در چنین زمینه‌ای، کاربران می‌توانند با این گزینه مقدار را تثبیت کنند. .Sp اندازه تداخل سازنده حساسیت کمتری دارد، زیرا معمولاً تنها در یک \fBstatic_assert\fR برای اطمینان از جا شدن یک نوع در یک خط حافظه نهان به کار می‌رود. .Sp همچنین \fB\-Winterference\-size\fR را ببینید. .IP \fBloop\-interchange\-max\-num\-stmts\fR 4 .IX Item "loop-interchange-max-num-stmts" حداکثر تعداد دستورها در حلقه‌ای که قرار است جابه‌جا (interchange) شود. .IP \fBloop\-interchange\-stride\-ratio\fR 4 .IX Item "loop-interchange-stride-ratio" حداقل نسبت بین گام‌های دو حلقه برای این که جابه‌جایی حلقه‌ها سودمند باشد. .IP \fBmin\-insn\-to\-prefetch\-ratio\fR 4 .IX Item "min-insn-to-prefetch-ratio" حداقل نسبت بین تعداد دستورالعمل‌ها و تعداد پیش‌واکشی‌ها برای فعال‌سازی پیش‌واکشی در یک حلقه. .IP \fBprefetch\-min\-insn\-to\-mem\-ratio\fR 4 .IX Item "prefetch-min-insn-to-mem-ratio" حداقل نسبت بین تعداد دستورالعمل‌ها و تعداد ارجاعات حافظه برای فعال‌سازی پیش‌واکشی در یک حلقه. .IP \fBuse\-canonical\-types\fR 4 .IX Item "use-canonical-types" مشخص می‌کند که آیا کامپایلر باید از سیستم انواع «قانونمند» (canonical) استفاده کند یا خیر. مقدار این گزینه باید همواره 1 باشد که از یک سازوکار داخلی کارآمدتر برای مقایسه انواع در C++ و Objective\-C++ استفاده می‌کند. با این حال، اگر اشکالات موجود در سیستم انواع قانونمند موجب شکست کامپایل می‌شود، این مقدار را 0 قرار دهید تا انواع قانونمند غیرفعال شوند. .IP \fBswitch\-conversion\-max\-branch\-ratio\fR 4 .IX Item "switch-conversion-max-branch-ratio" تبدیل مقداردهی اولیه switch از ایجاد آرایه‌هایی که بزرگتر از حاصل‌ضرب \fBswitch\-conversion\-max\-branch\-ratio\fR در تعداد شاخه‌های switch باشند، خودداری می‌کند. .IP \fBswitch\-lower\-slow\-alg\-max\-cases\fR 4 .IX Item "switch-lower-slow-alg-max-cases" حداکثر تعداد موارد (cases) مجاز برای استفاده از الگوریتم‌های کند کاهش سطح (lowering) ساختار switch. .IP \fBmax\-partial\-antic\-length\fR 4 .IX Item "max-partial-antic-length" حداکثر طول مجموعه antic جزئی محاسبه‌شده در طول بهینه‌سازی حذف افزونگی جزئی درختی (\fB\-ftree\-pre\fR) هنگام بهینه‌سازی در سطح \fB\-O3\fR و بالاتر. برای برخی انواع کدهای منبع، بهینه‌سازی پیشرفته حذف افزونگی جزئی ممکن است از کنترل خارج شده و تمام حافظه در دسترس سیستم میزبان را مصرف کند. این پارامتر محدودیتی روی طول مجموعه‌های محاسبه‌شده قرار می‌دهد که مانع از این رفتار مهارگسیخته می‌شود. تنظیم مقدار 0 برای این پارامتر اجازه طول نامحدود را به مجموعه می‌دهد. .IP \fBrpo\-vn\-max\-loop\-depth\fR 4 .IX Item "rpo-vn-max-loop-depth" حداکثر عمق حلقه‌ای که به صورت خوش‌بینانه شماره‌گذاری مقدار (value numbering) می‌شود. وقتی به این حد برسد، درونی‌ترین \&\fIrpo\-vn\-max\-loop\-depth\fR حلقه و بیرونی‌ترین حلقه در آشیانه حلقه (loop nest) به صورت خوش‌بینانه شماره‌گذاری مقدار می‌شوند و باقی حلقه‌ها به این شکل پردازش نمی‌شوند. .IP \fBsccvn\-max\-alias\-queries\-per\-access\fR 4 .IX Item "sccvn-max-alias-queries-per-access" حداکثر تعداد پرس‌وجوهای alias-oracle که هنگام جستجوی افزونگی‌ها برای بارگذاری‌ها (loads) و ذخیره‌سازی‌ها (stores) انجام می‌دهیم. اگر این محدودیت پر شود، جستجو لغو شده و بارگذاری یا ذخیره‌سازی مذکور افزونه در نظر گرفته نمی‌شود. تعداد پرس‌وجوها از نظر الگوریتمی به تعداد ذخیره‌سازی‌ها در تمامی مسیرها از بارگذاری تا نقطه ورود تابع محدود است. .IP \fBira\-max\-loops\-num\fR 4 .IX Item "ira-max-loops-num" ‏IRA به طور پیش‌فرض از تخصیص ثبات ناحیه‌ای (regional register allocation) استفاده می‌کند. اگر یک تابع شامل حلقه‌های بیشتری از تعداد مشخص‌شده با این پارامتر باشد، حداکثر به همان تعداد مشخص‌شده از حلقه‌های با بیشترین بسامد اجرا، نواحی مربوط به تخصیص ثبات ناحیه‌ای را تشکیل می‌دهند. .IP \fBira\-max\-conflict\-table\-size\fR 4 .IX Item "ira-max-conflict-table-size" اگرچه IRA از الگوریتمی پیشرفته برای فشرده‌سازی جدول تداخل استفاده می‌کند، این جدول همچنان می‌تواند مقادیر زیادی حافظه را برای توابع عظیم مصرف کند. اگر اندازه جدول تداخل برای یک تابع بتواند بیشتر از مقدار به مگابایت ارائه‌شده با این پارامتر باشد، تخصیص‌دهنده ثبات در عوض از یک الگوریتم سریع‌تر، ساده‌تر و با کیفیت پایین‌تر استفاده می‌کند که نیازی به ساخت جدول تداخل شبه‌ثبات‌ها (pseudo-register) ندارد. .IP \fBira\-loop\-reserved\-regs\fR 4 .IX Item "ira-loop-reserved-regs" می‌توان از IRA برای ارزیابی دقیق‌تر فشار ثبات‌ها در حلقه‌ها جهت تصمیم‌گیری درباره جابه‌جایی مقادیر ناوردا در حلقه (loop invariants) استفاده کرد (گزینه \fB\-O3\fR را ببینید). تعداد ثبات‌های در دسترسی که برای اهداف دیگر رزرو شده‌اند با این پارامتر تعیین می‌شود. مقدار پیش‌فرض این پارامتر بهترین مقدار به‌دست‌آمده از آزمایش‌های متعدد است. .IP \fBira\-consider\-dup\-in\-all\-alts\fR 4 .IX Item "ira-consider-dup-in-all-alts" موجب می‌شود IRA محدودیت تطابق (شماره عملوند تکراری) را در تمام جایگزین‌های موجود برای کلاس ثبات ترجیحی به‌طور جدی در نظر بگیرد. اگر روی صفر تنظیم شود، به این معنی است که IRA محدودیت تطابق را تنها زمانی رعایت می‌کند که در تنها جایگزین در دسترس با یک کلاس ثبات مناسب باشد. در غیر این صورت، بدین معناست که IRA تمام جایگزین‌های موجود برای کلاس ثبات ترجیحی را بررسی خواهد کرد حتی اگر گزینه‌ای با کلاس ثبات مناسب پیدا کرده باشد، و محدودیت تطابق واجد شرایط یافته‌شده را رعایت می‌کند. .IP \fBira\-simple\-lra\-insn\-threshold\fR 4 .IX Item "ira-simple-lra-insn-threshold" تعداد تقریبی دستورالعمل‌های تابع در واحدهای 1K که تخصیص ثبات محلی ساده (simple local RA) را فعال می‌کند. .IP \fBlra\-inheritance\-ebb\-probability\-cutoff\fR 4 .IX Item "lra-inheritance-ebb-probability-cutoff" ‏LRA تلاش می‌کند مقادیر بازبارگذاری‌شده در ثبات‌ها را در دستورالعمل‌های بعدی دوباره استفاده کند. این بهینه‌سازی وراثت (inheritance) نامیده می‌شود. از EBB به عنوان ناحیه‌ای برای انجام این بهینه‌سازی استفاده می‌شود. این پارامتر حداقل احتمال یال پیوسته‌گذر (fall-through edge) را بر حسب درصد تعیین می‌کند که برای افزودن BB به EBB وراثت در LRA استفاده می‌شود. مقدار پیش‌فرض بر اساس اجراهای متعدد SPEC2000 روی x86\-64 انتخاب شده است..IP \fBloop\-invariant\-max\-bbs\-in\-loop\fR 4 .IX Item "loop-invariant-max-bbs-in-loop" انتقال ناورداهای حلقه (Loop invariant motion) می‌تواند برای حلقه‌های بسیار بزرگ، هم از نظر زمان کامپایل و هم از نظر میزان حافظهٔ مورد نیاز در زمان کامپایل بسیار پرهزینه باشد. برای حلقه‌هایی با تعداد بلوک‌های پایه‌ای بیش از این پارامتر، بهینه‌سازی انتقال ناوردای حلقه انجام نخواهد شد. .IP \fBloop\-max\-datarefs\-for\-datadeps\fR 4 .IX Item "loop-max-datarefs-for-datadeps" ایجاد وابستگی‌های داده برای حلقه‌های بسیار بزرگ پرهزینه است. این پارامتر تعداد ارجاعات داده در حلقه‌ها را که برای تحلیل وابستگی داده در نظر گرفته می‌شوند محدود می‌کند. چنین حلقه‌های بزرگی توسط بهینه‌سازی‌هایی که از وابستگی‌های دادهٔ حلقه استفاده می‌کنند، پردازش نمی‌شوند. .IP \fBmax\-vartrack\-size\fR 4 .IX Item "max-vartrack-size" حداکثر تعداد خانه‌های جدول درهم‌سازی را برای استفاده در طول تحلیل جریان دادهٔ ردیابی متغیرها در هر تابع تنظیم می‌کند. اگر این حد با فعال بودن ردیابی متغیرها در انتساب‌ها نقض شود، تحلیل برای آن تابع پس از حذف تمام دستورالعمل‌های اشکال‌زدایی (debug insns) از تابع، بدون آن دوباره امتحان می‌شود. اگر این حد حتی بدون دستورالعمل‌های اشکال‌زدایی نیز نقض شود، تحلیل ردیابی متغیرها برای آن تابع به‌طور کامل غیرفعال می‌گردد. تنظیم این پارامتر روی صفر آن را نامحدود می‌کند. .IP \fBmax\-vartrack\-expr\-depth\fR 4 .IX Item "max-vartrack-expr-depth" حداکثر تعداد سطوح بازگشت را هنگام تلاش برای نگاشت نام متغیرها یا متغیرهای موقت اشکال‌زدایی به عبارات مقداری تعیین می‌کند. این کار زمان کامپایل را با اطلاعات اشکال‌زدایی کامل‌تر مبادله می‌کند. اگر این مقدار بیش از حد کم تنظیم شود، عبارات مقداری که در دسترس هستند و می‌توانستند در اطلاعات اشکال‌زدایی نشان داده شوند ممکن است در نهایت استفاده نشوند؛ تنظیم این مقدار روی عددی بزرگ‌تر ممکن است کامپایلر را قادر سازد تا عبارات اشکال‌زدایی پیچیده‌تری پیدا کند، اما زمان کامپایل و مصرف حافظه ممکن است افزایش یابد. .IP \fBmax\-debug\-marker\-count\fR 4 .IX Item "max-debug-marker-count" آستانه‌ای برای تعداد نشانگرهای اشکال‌زدایی (مانند نشانگرهای شروع عبارت) تعیین می‌کند تا از انفجار پیچیدگی هنگام درون‌خطی‌سازی (inlining) یا گسترش به RTL جلوگیری شود. اگر تابعی تعداد عبارات gimple بیشتری از حد تعیین‌شده داشته باشد، چنین عباراتی از نسخهٔ درون‌خطی‌شدهٔ تابع و از گسترش RTL آن حذف خواهند شد. .IP \fBmin\-nondebug\-insn\-uid\fR 4 .IX Item "min-nondebug-insn-uid" از uidهایی که از این پارامتر شروع می‌شوند برای دستورالعمل‌های غیر اشکال‌زدایی (nondebug insns) استفاده می‌کند. محدودهٔ زیر این پارامتر منحصراً برای دستورالعمل‌های اشکال‌زدایی ایجادشده توسط \&\fB\-fvar\-tracking\-assignments\fR رزرو شده است، اما در صورت تمام شدن محدودهٔ رزروشده، دستورالعمل‌های اشکال‌زدایی ممکن است uidهای بالاتر از آن (بدون همپوشانی) دریافت کنند. .IP \fBipa\-sra\-deref\-prob\-threshold\fR 4 .IX Item "ipa-sra-deref-prob-threshold" بهینه‌سازی IPA\-SRA اشاره‌گری را که مشخص است NULL نیست، تنها زمانی با یک یا چند پارامتر جدید جایگزین می‌کند که احتمال (بر حسب درصد، نسبت به ورودی تابع) ارجاع‌زدایی شدن آن بیشتر از این پارامتر باشد. .IP \fBipa\-sra\-ptr\-growth\-factor\fR 4 .IX Item "ipa-sra-ptr-growth-factor" بهینه‌سازی IPA\-SRA اشاره‌گر به یک دادهٔ تجمیعی (aggregate) را با یک یا چند پارامتر جدید تنها زمانی جایگزین می‌کند که اندازهٔ تجمیعی آن‌ها کمتر یا مساوی با \&\fBipa\-sra\-ptr\-growth\-factor\fR برابرِ اندازهٔ پارامتر اشاره‌گر اصلی باشد. .IP \fBipa\-sra\-ptrwrap\-growth\-factor\fR 4 .IX Item "ipa-sra-ptrwrap-growth-factor" حداکثر رشد مجاز اضافی اندازهٔ کل پارامترهای جدیدی که ipa\-sra یک اشاره‌گر به یک دادهٔ تجمیعی را با آن‌ها جایگزین می‌کند، در صورتی که به یک متغیر محلی اشاره کند که فراخواننده فقط در آن می‌نویسد و آن را به عنوان آرگومان به توابع دیگر ارسال می‌کند. .IP \fBipa\-sra\-max\-replacements\fR 4 .IX Item "ipa-sra-max-replacements" حداکثر بخش‌هایی از یک دادهٔ تجمیعی که IPA\-SRA ردیابی می‌کند. در نتیجه، این مقدار حداکثر تعداد جایگزینی‌های یک پارامتر صوری (formal parameter) نیز هست. .IP \fBsra\-max\-scalarization\-size\-Ospeed\fR 4 .IX Item "sra-max-scalarization-size-Ospeed" .PD 0 .IP \fBsra\-max\-scalarization\-size\-Osize\fR 4 .IX Item "sra-max-scalarization-size-Osize" .PD دو گذر کاهش اسکالر تجمیع‌ها (SRA و IPA\-SRA) با هدف جایگزینی بخش‌های اسکالر تجمیع‌ها با استفاده از متغیرهای اسکالر مستقل عمل می‌کنند. این پارامترها حداکثر اندازه (بر حسب واحدهای ذخیره‌سازی) دادهٔ تجمیعی را که برای جایگزینی هنگام کامپایل برای سرعت (\fBsra\-max\-scalarization\-size\-Ospeed\fR) یا اندازه (\fBsra\-max\-scalarization\-size\-Osize\fR) در نظر گرفته می‌شود، کنترل می‌کنند. .IP \fBsra\-max\-propagations\fR 4 .IX Item "sra-max-propagations" حداکثر تعداد دسترسی‌های ساختگی که بهینه‌سازی جایگزینی اسکالر تجمیع‌ها (SRA) به ازای هر متغیر محلی به منظور تسهیل انتشار کپی (copy propagation) ردیابی می‌کند. .IP \fBtm\-max\-aggregate\-size\fR 4 .IX Item "tm-max-aggregate-size" هنگام کپی کردن متغیرهای محلی نخ (thread\-local) در یک تراکنش، این پارامتر اندازه‌ای را بر حسب بایت مشخص می‌کند که متغیرها فراتر از آن، برخلاف جفت‌های توالی کد ذخیره/بازیابی، با استفاده از توابع ثبت وقایع (logging) ذخیره می‌شوند. این گزینه فقط هنگام استفاده از \&\fB\-fgnu\-tm\fR اعمال می‌شود. .IP \fBgraphite\-max\-nb\-scop\-params\fR 4 .IX Item "graphite-max-nb-scop-params" برای جلوگیری از اثرات نمایی در تبدیلات حلقهٔ Graphite، تعداد پارامترها در یک بخش کنترل ایستا (SCoP) محدود شده است. مقدار صفر می‌تواند برای برداشتن این محدودیت استفاده شود. متغیری که مقدار آن در زمان کامپایل ناشناخته بوده و خارج از یک SCoP تعریف شده باشد، یک پارامترِ آن SCoP محسوب می‌شود. .IP \fBhardcfr\-max\-blocks\fR 4 .IX Item "hardcfr-max-blocks" غیرفعال کردن \fB\-fharden\-control\-flow\-redundancy\fR برای توابعی که تعداد بلوک‌های آن‌ها بیشتر از مقدار مشخص‌شده است. مقدار صفر هرگونه محدودیتی را برمی‌دارد. .IP \fBhardcfr\-max\-inline\-blocks\fR 4 .IX Item "hardcfr-max-inline-blocks" اجبار \fB\-fharden\-control\-flow\-redundancy\fR به استفاده از بررسی برون‌خطی (out\-of\-line) برای توابعی با تعداد بلوک‌های پایه‌ای بیشتر از مقدار مشخص‌شده. .IP \fBloop\-block\-tile\-size\fR 4 .IX Item "loop-block-tile-size" تبدیلات بلوک‌بندی حلقه (Loop blocking) یا نواری‌سازی (strip mining)، که با \&\fB\-floop\-block\fR یا \fB\-floop\-strip\-mine\fR فعال می‌شوند، هر حلقه در یک آشیانهٔ حلقه را بر اساس تعداد تکرار مشخصی نواری‌سازی می‌کنند. طول نوار را می‌توان با استفاده از پارامتر \fBloop\-block\-tile\-size\fR تغییر داد. .IP \fBipa\-jump\-function\-lookups\fR 4 .IX Item "ipa-jump-function-lookups" تعداد دستورهایی را مشخص می‌کند که در طول کشف آفست تابع پرش (jump function offset discovery) بررسی می‌شوند. .IP \fBipa\-cp\-value\-list\-size\fR 4 .IX Item "ipa-cp-value-list-size" تحلیل IPA\-CP سعی می‌کند تمام مقادیر و انواع ممکن را که به پارامتر یک تابع ارسال می‌شوند ردیابی کند تا آن‌ها را منتشر کرده و مجازی‌زدایی (devirtualization) را انجام دهد. \&\fBipa\-cp\-value\-list\-size\fR حداکثر تعداد مقادیر و انواعی است که به ازای هر پارامتر صوری یک تابع ذخیره می‌کند. .IP \fBipa\-cp\-eval\-threshold\fR 4 .IX Item "ipa-cp-eval-threshold" تحلیل IPA\-CP امتیاز ابتکاری سودمندی همزادسازی (cloning profitability) خود را محاسبه کرده و آن دسته از فرصت‌های همزادسازی را اجرا می‌کند که امتیاز آن‌ها از \&\fBipa\-cp\-eval\-threshold\fR فراتر رود. .IP \fBipa\-cp\-max\-recursive\-depth\fR 4 .IX Item "ipa-cp-max-recursive-depth" حداکثر عمق همزادسازی بازگشتی برای توابع خودبازگشتی (self\-recursive). .IP \fBipa\-cp\-min\-recursive\-probability\fR 4 .IX Item "ipa-cp-min-recursive-probability" انجام همزادسازی بازگشتی تنها زمانی که احتمال اجرای فراخوانی بیش از این پارامتر باشد. .IP \fBipa\-cp\-profile\-count\-base\fR 4 .IX Item "ipa-cp-profile-count-base" هنگام استفاده از گزینهٔ \fB\-fprofile\-use\fR، تحلیل IPA\-CP تعداد اجرای اندازه‌گیری‌شدهٔ یک یال در گراف فراخوانی را در این موقعیت درصدی در بافت‌نگار (histogram) آن‌ها به عنوان پایه‌ای برای محاسبات ابتکاری خود در نظر می‌گیرد. .IP \fBipa\-cp\-recursive\-freq\-factor\fR 4 .IX Item "ipa-cp-recursive-freq-factor" تعداد دفعاتی که انتشار کپی بین‌روالی (interprocedural copy propagation) انتظار دارد توابع بازگشتی خود را فراخوانی کنند. .IP \fBipa\-cp\-recursion\-penalty\fR 4 .IX Item "ipa-cp-recursion-penalty" جریمهٔ درصدی که توابع بازگشتی هنگام ارزیابی برای همزادسازی دریافت می‌کنند. .IP \fBipa\-cp\-single\-call\-penalty\fR 4 .IX Item "ipa-cp-single-call-penalty" جریمهٔ درصدی که توابع حاوی یک فراخوانی منفرد به تابعی دیگر، هنگام ارزیابی برای همزادسازی دریافت خواهند کرد. .IP \fBipa\-max\-agg\-items\fR 4 .IX Item "ipa-max-agg-items" تحلیل IPA\-CP همچنین قادر است تعدادی از مقادیر اسکالر ارسال‌شده در یک دادهٔ تجمیعی را منتشر کند. پارامتر \fBipa\-max\-agg\-items\fR حداکثر تعداد چنین مقادیری را به ازای هر پارامتر کنترل می‌کند. .IP \fBipa\-cp\-loop\-hint\-bonus\fR 4 .IX Item "ipa-cp-loop-hint-bonus" هنگامی که IPA\-CP تعیین کند که یک نامزد همزادسازی باعث مشخص شدن تعداد تکرارهای یک حلقه می‌شود، پاداشی به اندازهٔ \&\fBipa\-cp\-loop\-hint\-bonus\fR به امتیاز سودمندی آن نامزد اضافه می‌کند. .IP \fBipa\-max\-loop\-predicates\fR 4 .IX Item "ipa-max-loop-predicates" حداکثر تعداد گزاره‌های (predicates) متفاوتی که IPA برای توصیف زمان داشتن ویژگی‌های مشخص توسط حلقه‌ها در یک تابع، استفاده خواهد کرد. .IP \fBipa\-max\-aa\-steps\fR 4 .IX Item "ipa-max-aa-steps" در طول تحلیل بدنهٔ توابع، IPA\-CP از تحلیل نام مستعار (alias analysis) به منظور ردیابی مقادیری که توسط پارامترهای تابع به آن‌ها اشاره می‌شود، بهره می‌گیرد. برای اینکه زمان بیش از حدی صرف تحلیل توابع عظیم نشود، پس از بررسی \&\fBipa\-max\-aa\-steps\fR عبارت تغییردهندهٔ حافظه، کار را متوقف کرده و تمام حافظه را رونویسی‌شده (clobbered) فرض می‌کند. .IP \fBipa\-max\-switch\-predicate\-bounds\fR 4 .IX Item "ipa-max-switch-predicate-bounds" حداکثر تعداد نقاط پایانی مرزی دامنه‌های case در دستور switch. برای دستورات switch فراتر از این حد، IPA\-CP گزارهٔ هزینهٔ همزادسازی را (که برای تخمین سودمندی همزادسازی به کار می‌رود) برای حالت پیش‌فرض (default) دستور switch ایجاد نخواهد کرد..IP \fBipa\-max\-param\-expr\-ops\fR 4 .IX Item "ipa-max-param-expr-ops" بخش IPA\-CP عبارت‌های شرطی را که به پارامتری از یک تابع ارجاع می‌دهند تحلیل می‌کند تا سود حاصل از همزادسازی (cloning) بر اساس مقداری ثابت را تخمین بزند. اما اگر تعداد عملیات در یک عبارت پارامتر از \&\fBipa\-max\-param\-expr\-ops\fR فراتر رود، عبارت پیچیده در نظر گرفته شده و توسط تحلیل IPA پردازش نمی‌شود. .IP \fBlto\-partitions\fR 4 .IX Item "lto-partitions" تعداد افرازهای (partitions) مطلوب ایجاد شده در طول کامپایل WHOPR را مشخص می‌کند. تعداد افرازها باید بیشتر از تعداد پردازنده‌های مورد استفاده برای کامپایل باشد. .IP \fBlto\-min\-partition\fR 4 .IX Item "lto-min-partition" اندازهٔ کمینهٔ افراز برای WHOPR (بر حسب دستورالعمل‌های تخمینی). این کار از هزینه‌های ناشی از تقسیم برنامه‌های بسیار کوچک به افرازهای بیش از حد جلوگیری می‌کند. .IP \fBlto\-max\-partition\fR 4 .IX Item "lto-max-partition" اندازهٔ بیشینهٔ افراز برای WHOPR (بر حسب دستورالعمل‌های تخمینی)، به منظور تعیین یک حد بالا برای اندازهٔ هر افراز به‌صورت مجزا. این گزینه تنها برای استفاده با افراز‌بندی متعادل در نظر گرفته شده است. .IP \fBlto\-partition\-locality\-frequency\-cutoff\fR 4 .IX Item "lto-partition-locality-frequency-cutoff" مخرج n از کسر 1/n بسامد اجرای تابع فراخوانده‌شده (callee) جهت همزادسازی برای یک فراخوانندهٔ (caller) خاص. مقدار ویژهٔ 0 تعیین می‌کند که همزادسازی همواره و بدون نقطهٔ برش (cut\-off) انجام شود. .IP \fBlto\-partition\-locality\-size\-cutoff\fR 4 .IX Item "lto-partition-locality-size-cutoff" نقطهٔ برش اندازه برای تابع فراخوانده‌شده، شامل فراخوانی‌های درون‌خطی‌شده (inlined)، جهت همزادسازی برای یک فراخوانندهٔ خاص. .IP \fBlto\-max\-locality\-partition\fR 4 .IX Item "lto-max-locality-partition" بیشینهٔ اندازهٔ یک افراز محلی برای LTO (بر حسب دستورالعمل‌های تخمینی). مقدار 0 باعث استفاده از مقدار پیش‌فرض می‌شود. .IP \fBlto\-max\-streaming\-parallelism\fR 4 .IX Item "lto-max-streaming-parallelism" بیشینهٔ تعداد فرآیندهای موازی مورد استفاده برای جریان‌سازی (streaming) در LTO. .IP \fBcxx\-max\-namespaces\-for\-diagnostic\-help\fR 4 .IX Item "cxx-max-namespaces-for-diagnostic-help" بیشینهٔ تعداد فضاهای نام (namespaces) برای بررسی جهت ارائهٔ پیشنهاد هنگامی که جستجوی نام (name lookup) در ++C برای یک شناسه با شکست مواجه می‌شود. .IP \fBsink\-frequency\-threshold\fR 4 .IX Item "sink-frequency-threshold" بیشینهٔ بسامد نسبی اجرای بلوک مقصد (به درصد) نسبت به بلوک اصلی یک عبارت، جهت مجاز شمردن پایین‌کشی عبارت (statement sinking). مقادیر بزرگ‌تر منجر به پایین‌کشی تهاجمی‌تر عبارات می‌شوند. یک تنظیم مثبت کوچک برای عبارات دارای عملوندهای حافظه اعمال می‌شود، زیرا پایین کشیدن آن‌ها حتی سودمندتر است. .IP \fBmax\-stores\-to\-sink\fR 4 .IX Item "max-stores-to-sink" بیشینهٔ تعداد جفت‌های ذخیره‌سازی شرطی که می‌توانند پایین کشیده شوند. در صورتی که برداری‌سازی (\fB\-ftree\-vectorize\fR) یا تبدیل شرطی (\fB\-ftree\-loop\-if\-convert\fR) غیرفعال باشد، روی 0 تنظیم می‌شود. .IP \fBcase\-values\-threshold\fR 4 .IX Item "case-values-threshold" کوچک‌ترین تعداد مقادیر متفاوتی که برای آن، استفاده از جدول پرش (jump\-table) به‌جای درختی از شاخه‌های شرطی بهینه‌تر است. اگر مقدار 0 باشد، از پیش‌فرض ماشین استفاده می‌شود. .IP \fBjump\-table\-max\-growth\-ratio\-for\-size\fR 4 .IX Item "jump-table-max-growth-ratio-for-size" بیشینهٔ نسبت رشد اندازهٔ کد هنگام بسط به یک جدول پرش (به درصد). این پارامتر هنگام بهینه‌سازی برای اندازه استفاده می‌شود. .IP \fBjump\-table\-max\-growth\-ratio\-for\-speed\fR 4 .IX Item "jump-table-max-growth-ratio-for-speed" بیشینهٔ نسبت رشد اندازهٔ کد هنگام بسط به یک جدول پرش (به درصد). این پارامتر هنگام بهینه‌سازی برای سرعت استفاده می‌شود. .IP \fBtree\-reassoc\-width\fR 4 .IX Item "tree-reassoc-width" بیشینهٔ تعداد دستورالعمل‌هایی را که به صورت موازی در درخت بازپیوندشده (reassociated tree) اجرا می‌شوند تنظیم می‌کند. این پارامتر در صورت داشتن مقداری غیرصفر، قواعد تجربی (heuristics) وابسته به هدف را که به طور پیش‌فرض استفاده می‌شوند بازنویسی می‌کند. .IP \fBsched\-pressure\-algorithm\fR 4 .IX Item "sched-pressure-algorithm" انتخاب بین دو پیاده‌سازی موجود برای \&\fB\-fsched\-pressure\fR. الگوریتم ۱ پیاده‌سازی اصلی است و احتمال بیشتری دارد که از بازآرایی دستورالعمل‌ها جلوگیری کند. الگوریتم ۲ به عنوان سازشی بین رویکرد نسبتاً محافظه‌کارانهٔ الگوریتم ۱ و رویکرد نسبتاً تهاجمی زمان‌بند پیش‌فرض طراحی شده است. این الگوریتم اتکای بیشتری بر داشتن مجموعه‌ثبات‌های (register file) منظم و رده‌های دقیق فشار ثبات دارد. برای جزئیات بیشتر به \fIhaifa\-sched.cc\fR در منابع GCC مراجعه کنید. .Sp انتخاب پیش‌فرض به هدف بستگی دارد. .IP \fBmax\-slsr\-cand\-scan\fR 4 .IX Item "max-slsr-cand-scan" بیشینهٔ تعداد کاندیداهای موجود را که هنگام جستجوی یک پایه برای کاندیدای جدید کاهش توان خط مستقیم (straight\-line strength reduction) بررسی می‌شوند، تعیین می‌کند. .IP \fBasan\-globals\fR 4 .IX Item "asan-globals" تشخیص سرریز بافر را برای اشیاء سراسری (global) فعال می‌کند. این نوع محافظت در صورت استفاده از گزینهٔ \&\fB\-fsanitize=address\fR به طور پیش‌فرض فعال است. برای غیرفعال‌سازی محافظت از اشیاء سراسری از \fB\-\-param asan\-globals=0\fR استفاده کنید. .IP \fBasan\-stack\fR 4 .IX Item "asan-stack" تشخیص سرریز بافر را برای اشیاء پشته (stack) فعال می‌کند. این نوع محافظت هنگام استفاده از \fB\-fsanitize=address\fR به طور پیش‌فرض فعال است. برای غیرفعال کردن محافظت از پشته از گزینهٔ \fB\-\-param asan\-stack=0\fR استفاده کنید. .IP \fBasan\-instrument\-reads\fR 4 .IX Item "asan-instrument-reads" تشخیص سرریز بافر را برای خواندن‌های حافظه فعال می‌کند. این نوع محافظت هنگام استفاده از \fB\-fsanitize=address\fR به طور پیش‌فرض فعال است. برای غیرفعال کردن محافظت از خواندن‌های حافظه از \&\fB\-\-param asan\-instrument\-reads=0\fR استفاده کنید. .IP \fBasan\-instrument\-writes\fR 4 .IX Item "asan-instrument-writes" تشخیص سرریز بافر را برای نوشتن‌های حافظه فعال می‌کند. این نوع محافظت هنگام استفاده از \fB\-fsanitize=address\fR به طور پیش‌فرض فعال است. برای غیرفعال کردن محافظت از نوشتن‌های حافظه از گزینهٔ \&\fB\-\-param asan\-instrument\-writes=0\fR استفاده کنید. .IP \fBasan\-memintrin\fR 4 .IX Item "asan-memintrin" تشخیص را برای توابع درونی (built\-in) فعال می‌کند. این نوع محافظت هنگام استفاده از \fB\-fsanitize=address\fR به طور پیش‌فرض فعال است. برای غیرفعال کردن محافظت از توابع درونی از \&\fB\-\-param asan\-memintrin=0\fR استفاده کنید. .IP \fBasan\-use\-after\-return\fR 4 .IX Item "asan-use-after-return" تشخیص استفاده پس از بازگشت (use\-after\-return) را فعال می‌کند. این نوع محافظت هنگام استفاده از گزینهٔ \fB\-fsanitize=address\fR به طور پیش‌فرض فعال است. برای غیرفعال کردن آن از \fB\-\-param asan\-use\-after\-return=0\fR استفاده کنید. .Sp نکته: این بررسی به طور پیش‌فرض در زمان اجرا غیرفعال است. برای فعال کردن آن، \f(CW\*(C`detect_stack_use_after_return=1\*(C'\fR را به متغیر محیطی \&\fBASAN_OPTIONS\fR اضافه کنید. .IP \fBasan\-instrumentation\-with\-call\-threshold\fR 4 .IX Item "asan-instrumentation-with-call-threshold" اگر تعداد دسترسی‌ها به حافظه در تابعی که ابزارگذاری می‌شود بزرگ‌تر یا مساوی این عدد باشد، به جای بررسی‌های درون‌خطی از فراخوانی‌های بازگشتی (callbacks) استفاده می‌شود. برای مثال، جهت غیرفعال کردن کد درون‌خطی از \&\fB\-\-param asan\-instrumentation\-with\-call\-threshold=0\fR استفاده کنید. .IP \fBasan\-kernel\-mem\-intrinsic\-prefix\fR 4 .IX Item "asan-kernel-mem-intrinsic-prefix" در صورت غیرصفر بودن، پیشوند فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR، \f(CW\*(C`memset\*(C'\fR و \f(CW\*(C`memmove\*(C'\fR را به ترتیب برای \fB\-fsanitize=kernel\-address\fR یا \fB\-fsanitize=kernel\-hwaddress\fR با \fB_\|_asan_\fR یا \fB_\|_hwasan_\fR قرار می‌دهد. .IP \fBhwasan\-instrument\-stack\fR 4 .IX Item "hwasan-instrument-stack" ابزارگذاری hwasan را برای متغیرهای تخصیص‌یافته در پشته با اندازهٔ ایستا فعال می‌کند. این نوع ابزارگذاری هنگام استفاده از \&\fB\-fsanitize=hwaddress\fR به طور پیش‌فرض فعال و هنگام استفاده از \&\fB\-fsanitize=kernel\-hwaddress\fR به طور پیش‌فرض غیرفعال است. برای غیرفعال کردن ابزارگذاری پشته از \&\fB\-\-param hwasan\-instrument\-stack=0\fR و برای فعال کردن آن از \&\fB\-\-param hwasan\-instrument\-stack=1\fR استفاده کنید. .IP \fBhwasan\-random\-frame\-tag\fR 4 .IX Item "hwasan-random-frame-tag" هنگام استفاده از ابزارگذاری پشته، برچسب‌های متغیرهای پشته را با استفاده از دنباله‌ای معین (deterministic) که برای هر فریم با یک برچسب تصادفی آغاز می‌شود تعیین می‌کند. در صورت عدم تنظیم این پارامتر، برچسب‌ها با استفاده از همان دنباله ولی با شروع از ۱ انتخاب می‌شوند. این ویژگی به طور پیش‌فرض برای \fB\-fsanitize=hwaddress\fR فعال بوده و برای \fB\-fsanitize=kernel\-hwaddress\fR در دسترس نیست. برای غیرفعال کردن آن از \fB\-\-param hwasan\-random\-frame\-tag=0\fR استفاده کنید. .IP \fBhwasan\-instrument\-allocas\fR 4 .IX Item "hwasan-instrument-allocas" ابزارگذاری hwasan را برای متغیرهای تخصیص‌یافته در پشته با اندازهٔ پویا فعال می‌کند. این نوع ابزارگذاری هنگام استفاده از \&\fB\-fsanitize=hwaddress\fR به طور پیش‌فرض فعال و هنگام استفاده از \&\fB\-fsanitize=kernel\-hwaddress\fR به طور پیش‌فرض غیرفعال است. برای غیرفعال کردن ابزارگذاری چنین متغیرهایی از \&\fB\-\-param hwasan\-instrument\-allocas=0\fR و برای فعال کردن آن از \&\fB\-\-param hwasan\-instrument\-allocas=1\fR استفاده کنید. .IP \fBhwasan\-instrument\-reads\fR 4 .IX Item "hwasan-instrument-reads" بررسی‌های hwasan را بر روی خواندن‌های حافظه فعال می‌کند. ابزارگذاری خواندن‌ها به طور پیش‌فرض هم برای \fB\-fsanitize=hwaddress\fR و هم برای \&\fB\-fsanitize=kernel\-hwaddress\fR فعال است. برای غیرفعال کردن بررسی خواندن‌های حافظه از \&\fB\-\-param hwasan\-instrument\-reads=0\fR استفاده کنید. .IP \fBhwasan\-instrument\-writes\fR 4 .IX Item "hwasan-instrument-writes" بررسی‌های hwasan را بر روی نوشتن‌های حافظه فعال می‌کند. ابزارگذاری نوشتن‌ها به طور پیش‌فرض هم برای \fB\-fsanitize=hwaddress\fR و هم برای \&\fB\-fsanitize=kernel\-hwaddress\fR فعال است. برای غیرفعال کردن بررسی نوشتن‌های حافظه از \&\fB\-\-param hwasan\-instrument\-writes=0\fR استفاده کنید. .IP \fBhwasan\-instrument\-mem\-intrinsics\fR 4 .IX Item "hwasan-instrument-mem-intrinsics" ابزارگذاری hwasan را برای توابع درونی فعال می‌کند. ابزارگذاری این توابع درونی به طور پیش‌فرض هم برای \fB\-fsanitize=hwaddress\fR و هم برای \fB\-fsanitize=kernel\-hwaddress\fR فعال است. برای غیرفعال کردن ابزارگذاری توابع درونی از \&\fB\-\-param hwasan\-instrument\-mem\-intrinsics=0\fR استفاده کنید..IP \fBuse\-after\-scope\-direct\-emission\-threshold\fR 4 .IX Item "use-after-scope-direct-emission-threshold" اگر اندازه یک متغیر محلی بر حسب بایت، کوچک‌تر یا مساوی این عدد باشد، به‌جای استفاده از فراخوانی‌های بازگشتی زمان اجرا (run\-time callbacks)، حافظه سایه (shadow memory) را مستقیماً آلوده (یا پاک‌سازی) می‌کند. .IP \fBtsan\-distinguish\-volatile\fR 4 .IX Item "tsan-distinguish-volatile" تولید ابزاردقیق‌سازی (instrumentation) ویژه برای دسترسی‌ها به متغیرهای فرّار (volatiles). .IP \fBtsan\-instrument\-func\-entry\-exit\fR 4 .IX Item "tsan-instrument-func-entry-exit" تولید فراخوانی‌های ابزاردقیق‌سازی به _\|\fB_tsan_func_entry()\fR و _\|\fB_tsan_func_exit()\fR. .IP \fBmax\-fsm\-thread\-path\-insns\fR 4 .IX Item "max-fsm-thread-path-insns" حداکثر تعداد دستورالعمل‌ها برای کپی هنگام تکثیر بلوک‌ها در یک مسیر رشته پرش اتوماتای حالت متناهی (FSM jump thread path). .IP \fBthreader\-debug\fR 4 .IX Item "threader-debug" threader\-debug=[none|all] خروجی مفصل تحلیل‌گر threader را فعال می‌کند. .IP \fBparloops\-chunk\-size\fR 4 .IX Item "parloops-chunk-size" اندازه تکه (chunk size) در زمان‌بندی omp برای حلقه‌های موازی‌شده توسط parloops. .IP \fBparloops\-schedule\fR 4 .IX Item "parloops-schedule" نوع زمان‌بندی در برنامه زمان‌بندی omp برای حلقه‌های موازی‌شده توسط parloops (شامل static، dynamic، guided، auto و runtime). .IP \fBparloops\-min\-per\-thread\fR 4 .IX Item "parloops-min-per-thread" حداقل تعداد تکرارهای به ازای هر ریسه از درونی‌ترین حلقه موازی‌شده که برای آن، حالت موازی‌شده بر حالت تک‌ریسه‌ای ترجیح داده می‌شود. توجه داشته باشید که برای یک آشیانه حلقه (loop nest) موازی‌شده، حداقل تعداد تکرارهای بیرونی‌ترین حلقه به ازای هر ریسه دو است. .IP \fBmax\-ssa\-name\-query\-depth\fR 4 .IX Item "max-ssa-name-query-depth" حداکثر عمق بازگشت هنگام پرس‌وجوی ویژگی‌های نام‌های SSA در مواردی مانند روال‌های fold. یک سطح از بازگشت معادل پیمایش یک زنجیره use\-def است. .IP \fBmax\-speculative\-devirt\-maydefs\fR 4 .IX Item "max-speculative-devirt-maydefs" حداکثر تعداد may\-defهایی که هنگام جستجو برای یک must\-def جهت تعیین نوع پویای شیئی که یک فراخوانی مجازی (virtual call) را فرا می‌خواند تحلیل می‌شوند، تا بتوان آن را به‌صورت حدسی مجازی‌زدایی (speculatively devirtualize) کرد. .IP \fBranger\-debug\fR 4 .IX Item "ranger-debug" نوع خروجی اشکال‌زدایی صادر شده برای محدوده‌ها (ranges) را مشخص می‌کند. .IP \fBunroll\-jam\-min\-percent\fR 4 .IX Item "unroll-jam-min-percent" حداقل درصد ارجاعات به حافظه که باید بهینه‌سازی و حذف شوند تا تبدیل unroll\-and\-jam سودمند در نظر گرفته شود. .IP \fBunroll\-jam\-max\-unroll\fR 4 .IX Item "unroll-jam-max-unroll" حداکثر دفعاتی که حلقه بیرونی باید توسط تبدیل unroll\-and\-jam باز شود (unroll شود). .IP \fBmax\-rtl\-if\-conversion\-unpredictable\-cost\fR 4 .IX Item "max-rtl-if-conversion-unpredictable-cost" حداکثر هزینه مجاز برای توالی تولیدشده توسط گذرگاه if\-conversion در RTL برای شاخه‌ای که غیرقابل‌پیش‌بینی در نظر گرفته شده است. .IP \fBmax\-variable\-expansions\-in\-unroller\fR 4 .IX Item "max-variable-expansions-in-unroller" در صورت استفاده از \fB\-fvariable\-expansion\-in\-unroller\fR، حداکثر دفعاتی که یک متغیر منفرد در حین باز کردن حلقه (loop unrolling) گسترش می‌یابد. .IP \fBpartial\-inlining\-entry\-probability\fR 4 .IX Item "partial-inlining-entry-probability" حداکثر احتمال بلوک پایه ورودی (entry BB) ناحیه تقسیم‌شده (به درصد نسبت به BB ورودی تابع) برای انجام درون‌خطی‌سازی جزئی (partial inlining). .IP \fBmax\-tracked\-strlens\fR 4 .IX Item "max-tracked-strlens" حداکثر تعداد رشته‌هایی که گذرگاه بهینه‌سازی strlen طول آن‌ها را ردگیری می‌کند. .IP \fBgcse\-after\-reload\-partial\-fraction\fR 4 .IX Item "gcse-after-reload-partial-fraction" نسبت آستانه برای انجام حذف افزونگی جزئی (partial redundancy elimination) پس از reload. .IP \fBgcse\-after\-reload\-critical\-fraction\fR 4 .IX Item "gcse-after-reload-critical-fraction" نسبت آستانه تعداد دفعات اجرای یال‌های بحرانی (critical edges) که اجازه انجام حذف افزونگی پس از reload را می‌دهد. .IP \fBmax\-loop\-header\-insns\fR 4 .IX Item "max-loop-header-insns" حداکثر تعداد دستورالعمل‌ها (insns) در سرآیند حلقه که توسط گذرگاه کپی سرآیند حلقه تکثیر می‌شوند. .IP \fBvect\-epilogues\-nomask\fR 4 .IX Item "vect-epilogues-nomask" فعال‌سازی برداری‌سازی پس‌گفتار حلقه با استفاده از اندازه بردار کوچک‌تر. .IP \fBvect\-partial\-vector\-usage\fR 4 .IX Item "vect-partial-vector-usage" کنترل می‌کند که برداری‌ساز حلقه چه زمانی استفاده از بارگذاری‌ها و ذخیره‌سازی‌های برداری جزئی را به عنوان جایگزینی برای پس‌روی به کد اسکالر در نظر بگیرد. مقدار 0 مانع از استفاده برداری‌ساز از بارگذاری‌ها و ذخیره‌سازی‌های برداری جزئی می‌شود. مقدار 1 به بارگذاری‌ها و ذخیره‌سازی‌های برداری جزئی اجازه می‌دهد در صورتی که برداری‌سازی نیاز به تکرار کد را برطرف کند. مقدار 2 استفاده از بارگذاری‌ها و ذخیره‌سازی‌های برداری جزئی را در تمام حلقه‌ها مجاز می‌کند. این پارامتر تنها روی مقصدهایی اثر دارد که از بارگذاری‌ها و ذخیره‌سازی‌های برداری جزئی پشتیبانی می‌کنند. .IP \fBvect\-inner\-loop\-cost\-factor\fR 4 .IX Item "vect-inner-loop-cost-factor" حداکثر ضریبی که برداری‌ساز حلقه برای هزینه عبارات در یک حلقه داخلی نسبت به حلقه در حال برداری‌سازی اعمال می‌کند. ضریب اعمال‌شده بیشینه تعداد تکرارهای تخمینی حلقه داخلی و این پارامتر است. مقدار پیش‌فرض این پارامتر 50 است. .IP \fBvect\-induction\-float\fR 4 .IX Item "vect-induction-float" فعال‌سازی برداری‌سازی حلقه برای متغیرهای استقرایی ممیز شناور. .IP \fBvect\-force\-slp\fR 4 .IX Item "vect-force-slp" اجبار به استفاده از SLP هنگام برداری‌سازی؛ در صورت عدم امکان، با شکست مواجه می‌شود. .IP \fBvrp\-block\-limit\fR 4 .IX Item "vrp-block-limit" حداکثر تعداد بلوک‌های پایه قبل از اینکه VRP به الگوریتمی با مصرف حافظه کمتر تغییر حالت دهد. .IP \fBvrp\-sparse\-threshold\fR 4 .IX Item "vrp-sparse-threshold" حداکثر تعداد بلوک‌های پایه قبل از اینکه VRP از یک حافظه موقت نگاشت‌بیتی خلوت (sparse bitmap cache) استفاده کند. .IP \fBvrp\-switch\-limit\fR 4 .IX Item "vrp-switch-limit" حداکثر تعداد یال‌های خروجی در یک switch پیش از اینکه VRP از پردازش آن صرف‌نظر کند. .IP \fBvrp\-vector\-threshold\fR 4 .IX Item "vrp-vector-threshold" حداکثر تعداد بلوک‌های پایه برای اینکه VRP از یک بردار حافظه موقت پایه استفاده کند. .IP \fBavoid\-fma\-max\-bits\fR 4 .IX Item "avoid-fma-max-bits" حداکثر تعداد بیت‌هایی که برای آن‌ها از ایجاد FMAها اجتناب می‌شود. .IP \fBfully\-pipelined\-fma\fR 4 .IX Item "fully-pipelined-fma" مشخص می‌کند که آیا مقصد به‌طور کامل دستورالعمل‌های FMA را خط‌لوله‌ای (pipeline) می‌کند یا خیر. اگر غیرصفر باشد، بازهم‌بستگی (reassociation) با فرض اینکه FMUL و FMA از همان واحدهایی استفاده می‌کنند که می‌توانند FADD را نیز انجام دهند، مزیت موازی‌سازی بخش ضرب و بخش جمع FMA را در نظر می‌گیرد. .IP \fBsms\-loop\-average\-count\-threshold\fR 4 .IX Item "sms-loop-average-count-threshold" یک مقدار آستانه برای میانگین تعداد تکرارهای حلقه که توسط swing modulo scheduler در نظر گرفته می‌شود. .IP \fBsms\-dfa\-history\fR 4 .IX Item "sms-dfa-history" تعداد دورهایی که swing modulo scheduler هنگام بررسی تعارض‌ها با استفاده از DFA در نظر می‌گیرد. .IP \fBgraphite\-allow\-codegen\-errors\fR 4 .IX Item "graphite-allow-codegen-errors" مشخص می‌کند که آیا خطاهای تولید کد (codegen) در صورت فعال بودن \fB\-fchecking\fR باید خطاهای کامپایلر داخلی (ICE) در نظر گرفته شوند یا خیر. .IP \fBsms\-max\-ii\-factor\fR 4 .IX Item "sms-max-ii-factor" ضریبی برای تنظیم حد بالای فاصله شروع (initiation interval) که swing modulo scheduler جهت زمان‌بندی یک حلقه استفاده می‌کند. .IP \fBlra\-max\-considered\-reload\-pseudos\fR 4 .IX Item "lra-max-considered-reload-pseudos" حداکثر تعداد شبه‌ثبات‌های reload که هنگام سرریز کردن (spilling) یک شبه‌ثبات غیر reload در نظر گرفته می‌شوند. .IP \fBmax\-pow\-sqrt\-depth\fR 4 .IX Item "max-pow-sqrt-depth" حداکثر عمق زنجیره‌های sqrt جهت استفاده هنگام ترکیب توان‌رسانی با یک ثابت حقیقی. .IP \fBmax\-dse\-active\-local\-stores\fR 4 .IX Item "max-dse-active-local-stores" حداکثر تعداد ذخیره‌سازی‌های محلی فعال در حذف ذخیره‌سازی‌های مرده (dead store elimination) در سطح RTL. .IP \fBasan\-instrument\-allocas\fR 4 .IX Item "asan-instrument-allocas" فعال‌سازی حفاظت allocaها و VLAها در asan. .IP \fBmax\-iterations\-computation\-cost\fR 4 .IX Item "max-iterations-computation-cost" کران هزینه یک عبارت جهت محاسبه تعداد تکرارها. .IP \fBmax\-isl\-operations\fR 4 .IX Item "max-isl-operations" حداکثر تعداد عملیات‌های isl؛ مقدار 0 به معنای نامحدود است. .IP \fBgraphite\-max\-arrays\-per\-scop\fR 4 .IX Item "graphite-max-arrays-per-scop" حداکثر تعداد آرایه‌ها به ازای هر scop. .IP \fBmax\-vartrack\-reverse\-op\-size\fR 4 .IX Item "max-vartrack-reverse-op-size" حداکثر اندازه loc list که باید برای آن عملیات‌های معکوس افزوده شوند. .IP \fBfsm\-scale\-path\-stmts\fR 4 .IX Item "fsm-scale-path-stmts" ضریب مقیاسی که باید بر تعداد دستورهای یک مسیر threading عبورکننده از یال بازگشتی حلقه (loop backedge) هنگام مقایسه با \&\fB\-\-param=max\-jump\-thread\-duplication\-stmts\fR اعمال شود. .IP \fBuninit\-control\-dep\-attempts\fR 4 .IX Item "uninit-control-dep-attempts" حداکثر تعداد فراخوانی‌های تو‌در‌تو برای جستجوی وابستگی‌های کنترلی در طول تحلیل متغیرهای مقداردهی‌نشده. .IP \fBuninit\-max\-chain\-len\fR 4 .IX Item "uninit-max-chain-len" حداکثر تعداد محمول‌هایی که برای هر محمولِ با عملگر OR، در زنجیره محمول‌های نرمال‌شده با عملگر AND ترکیب می‌شوند. .IP \fBuninit\-max\-num\-chains\fR 4 .IX Item "uninit-max-num-chains" حداکثر تعداد محمول‌هایی که در زنجیره محمول‌های نرمال‌شده با عملگر OR ترکیب می‌شوند..IP \fBuninit\-max\-prune\-work\fR 4 .IX Item "uninit-max-prune-work" حداکثر حجم کاری که برای هرس کردن مسیرهایی که متغیر در آن‌ها همواره مقداردهی اولیه شده است، انجام می‌شود. .IP \fBsched\-autopref\-queue\-depth\fR 4 .IX Item "sched-autopref-queue-depth" پرچم کنترلی مدل زمان‌بند واکشی پیش‌دستانهٔ سخت‌افزاری (autoprefetcher). تعداد چرخه‌های نگاه به آینده (lookahead) که مدل بررسی می‌کند؛ در \*(Aq \&\*(Aq فقط روش ابتکاری مرتب‌سازی دستورالعمل‌ها فعال می‌شود. .IP \fBloop\-versioning\-max\-inner\-insns\fR 4 .IX Item "loop-versioning-max-inner-insns" حداکثر تعداد دستورالعمل‌هایی که یک حلقهٔ درونی می‌تواند داشته باشد، پیش از آن‌که گذر نسخه‌بندی حلقه آن را برای رونوشت‌برداری بیش از حد بزرگ بداند. .IP \fBloop\-versioning\-max\-outer\-insns\fR 4 .IX Item "loop-versioning-max-outer-insns" حداکثر تعداد دستورالعمل‌هایی که یک حلقهٔ بیرونی می‌تواند داشته باشد، پیش از آن‌که گذر نسخه‌بندی حلقه آن را برای رونوشت‌برداری بیش از حد بزرگ بداند، بدون احتساب هرگونه دستورالعمل در حلقه‌های درونی که مستقیماً از نسخه‌بندی بهره‌مند می‌شوند. .IP \fBssa\-name\-def\-chain\-limit\fR 4 .IX Item "ssa-name-def-chain-limit" حداکثر تعداد انتساب‌های SSA_NAME برای دنبال کردن جهت تعیین یک ویژگی متغیر مانند مقدار آن. این گزینه تعداد تکرارها یا فراخوانی‌های بازگشتی انجام‌شده توسط GCC را هنگام بهینه‌سازی برخی عبارات یا هنگام تعیین اعتبار آن‌ها پیش از صدور پیام‌های تشخیصی محدود می‌کند. .IP \fBstore\-merging\-max\-size\fR 4 .IX Item "store-merging-max-size" حداکثر اندازهٔ یک ناحیهٔ ادغام ذخیره‌سازی (store merging) بر حسب بایت. .IP \fBstore\-forwarding\-max\-distance\fR 4 .IX Item "store-forwarding-max-distance" حداکثر فاصله بر حسب تعداد دستورالعمل که ارسال یک ذخیره‌سازی کوچک (store) به یک بارگذاری (load) بزرگ‌تر ممکن است باعث توقف (stall) شود. مقدار \*(Aq0\*(Aq بررسی‌های هزینه را برای گذر avoid\-store\-forwarding غیرفعال می‌کند. .IP \fBhash\-table\-verification\-limit\fR 4 .IX Item "hash-table-verification-limit" تعداد عنصرهایی که برای هر عنصر جستجوشده، اعتبارسنجی جدول درهم‌سازی برای آن‌ها انجام می‌شود. .IP \fBmax\-find\-base\-term\-values\fR 4 .IX Item "max-find-base-term-values" حداکثر تعداد VALUEهایی که در طول یک فراخوانی find_base_term پردازش می‌شوند. .IP \fBanalyzer\-max\-enodes\-per\-program\-point\fR 4 .IX Item "analyzer-max-enodes-per-program-point" حداکثر تعداد گره‌های گسترده (exploded nodes) در هر نقطه از برنامه در تحلیل‌گر، پیش از پایان دادن به تحلیل آن نقطه. .IP \fBanalyzer\-max\-constraints\fR 4 .IX Item "analyzer-max-constraints" حداکثر تعداد قیدها به ازای هر وضعیت (state). .IP \fBanalyzer\-min\-snodes\-for\-call\-summary\fR 4 .IX Item "analyzer-min-snodes-for-call-summary" حداقل تعداد ابرگره‌ها (supernodes) در یک تابع تا تحلیل‌گر خلاصه‌سازی اثرات آن را در نقاط فراخوانی (call sites) در نظر بگیرد. .IP \fBanalyzer\-max\-enodes\-for\-full\-dump\fR 4 .IX Item "analyzer-max-enodes-for-full-dump" حداکثر عمق گره‌های گسترده که باید در یک رونوشت dot ظاهر شوند، پیش از تغییر حالت به قالبی با پرگویی کمتر. .IP \fBanalyzer\-max\-recursion\-depth\fR 4 .IX Item "analyzer-max-recursion-depth" حداکثر تعداد دفعاتی که یک نقطهٔ فراخوانی می‌تواند در پشتهٔ فراخوانی در تحلیل‌گر ظاهر شود، پیش از پایان دادن به تحلیل فراخوانی‌ای که بازگشت عمیق‌تری ایجاد کند. .IP \fBanalyzer\-max\-svalue\-depth\fR 4 .IX Item "analyzer-max-svalue-depth" حداکثر عمق یک مقدار نمادین (symbolic value)، پیش از تخمین زدن آن مقدار به عنوان مقدار ناشناخته. .IP \fBanalyzer\-max\-infeasible\-edges\fR 4 .IX Item "analyzer-max-infeasible-edges" حداکثر تعداد یال‌های غیرممکنی (infeasible edges) که باید رد شوند پیش از آن‌که یک مورد تشخیصی به عنوان غیرممکن اعلام شود. .IP \fBgimple\-fe\-computed\-hot\-bb\-threshold\fR 4 .IX Item "gimple-fe-computed-hot-bb-threshold" تعداد دفعات اجرای یک بلوک پایه (basic block) که داغ (hot) در نظر گرفته می‌شود. این پارامتر فقط در GIMPLE FE استفاده می‌شود. .IP \fBanalyzer\-bb\-explosion\-factor\fR 4 .IX Item "analyzer-bb-explosion-factor" حداکثر تعداد گره‌های گستردهٔ \*(Aqafter supernode\*(Aq در تحلیل‌گر به ازای هر ابرگره، پیش از پایان دادن به تحلیل. .IP \fBanalyzer\-text\-art\-string\-ellipsis\-threshold\fR 4 .IX Item "analyzer-text-art-string-ellipsis-threshold" تعداد بایت‌هایی که در آن لیترال‌های رشته‌ای در نمودارهای هنر متنی (text art) تحلیل‌گر خلاصه (...) می‌شوند. .IP \fBanalyzer\-text\-art\-ideal\-canvas\-width\fR 4 .IX Item "analyzer-text-art-ideal-canvas-width" عرض ایده‌آل نمودارهای هنر متنی تولیدشده توسط تحلیل‌گر بر حسب نویسه. .IP \fBanalyzer\-text\-art\-string\-ellipsis\-head\-len\fR 4 .IX Item "analyzer-text-art-string-ellipsis-head-len" تعداد بایت‌های لیترالی که هنگام خلاصه کردن یک لیترال رشته‌ای در هنر متنی، در ابتدای آن نمایش داده می‌شوند. .IP \fBanalyzer\-text\-art\-string\-ellipsis\-tail\-len\fR 4 .IX Item "analyzer-text-art-string-ellipsis-tail-len" تعداد بایت‌های لیترالی که هنگام خلاصه کردن یک لیترال رشته‌ای در هنر متنی، در انتهای آن نمایش داده می‌شوند. .IP \fBranger\-logical\-depth\fR 4 .IX Item "ranger-logical-depth" حداکثر عمق ارزیابی عبارات منطقی که ranger هنگام ارزیابی محدوده‌های یال‌های خروجی بررسی خواهد کرد. .IP \fBranger\-recompute\-depth\fR 4 .IX Item "ranger-recompute-depth" حداکثر عمق زنجیره‌های دستورالعمل برای در نظر گرفتن جهت محاسبهٔ مجدد در محاسبه‌گر محدودهٔ خروجی. .IP \fBrelation\-block\-limit\fR 4 .IX Item "relation-block-limit" حداکثر تعداد رابطه‌هایی که اوراکل در یک بلوک پایه ثبت خواهد کرد. .IP \fBtransitive\-relations\-work\-bound\fR 4 .IX Item "transitive-relations-work-bound" محدودهٔ کاری هنگام کشف رابطه‌های تعدی‌پذیر از رابطه‌های موجود. .IP \fBmin\-pagesize\fR 4 .IX Item "min-pagesize" حداقل اندازهٔ صفحه برای اهداف هشدار و برداری‌سازی با خروج زودهنگام (early break). .IP \fBopenacc\-kernels\fR 4 .IX Item "openacc-kernels" تعیین حالت رسیدگی به سازه‌های \`kernels\*(Aq در OpenACC. با \fB\-\-param=openacc\-kernels=decompose\fR، سازه‌های \`kernels\*(Aq در OpenACC به بخش‌هایی تجزیه می‌شوند، توالی‌ای از سازه‌های محاسباتی، که سپس هر یک به صورت جداگانه رسیدگی می‌شوند. این ویژگی در حال توسعه است. با \fB\-\-param=openacc\-kernels=parloops\fR، سازه‌های \`kernels\*(Aq در OpenACC به صورت یک‌جا توسط گذر \fBparloops\fR رسیدگی می‌شوند. این مقدار پیش‌فرض فعلی است. .IP \fBopenacc\-privatization\fR 4 .IX Item "openacc-privatization" کنترل این‌که آیا گزینه‌های \fB\-fopt\-info\-omp\-note\fR و \&\fB\-fdump\-tree\-*\-details\fR مربوطه پیام‌های تشخیصی خصوصی‌سازی OpenACC را صادر کنند یا خیر. با \fB\-\-param=openacc\-privatization=quiet\fR، پیامی صادر نمی‌شود. این مقدار پیش‌فرض فعلی است. با \fB\-\-param=openacc\-privatization=noisy\fR، پیام‌های تشخیصی صادر می‌شوند. .IP \fBcycle\-accurate\-model\fR 4 .IX Item "cycle-accurate-model" مشخص می‌کند که آیا GCC باید فرض کند شرح زمان‌بندی در غیاب خطاهای حافظهٔ نهان (cache misses)، تا حد زیادی یک مدل دقیق بر حسب چرخه (cycle\-accurate) از پردازندهٔ مقصد است که کد برای اجرا بر روی آن در نظر گرفته شده است یا خیر. مقادیر غیرصفر به این معنی است که مدل زمان‌بندیِ انتخاب‌شده دقیق بوده و احتمالاً یک پردازندهٔ با اجرای ترتیبی (in\-order) را توصیف می‌کند، و این‌که زمان‌بندی باید برای پر کردن حباب‌های خط لوله (pipeline bubbles) به صورت تهاجمی متغیرها را به حافظه سرریز کند (spill). این مقدار پیش‌فرض فعلی است. مقدار صفر به این معنی است که شرح زمان‌بندی ممکن است در دسترس نبوده یا دقیق نباشد و یا شاید اصلاً قابل اعمال نباشد، مانند پردازنده‌های مدرن با اجرای غیرترتیبی (out\-of\-order). .RE .RS 4 .Sp انتخاب‌های زیر برای \fIname\fR بر روی مقصدهای AArch64 در دسترس هستند: .IP \fBaarch64\-vect\-compare\-costs\fR 4 .IX Item "aarch64-vect-compare-costs" هنگام برداری‌سازی، استفاده از چندین روش مختلف را در نظر می‌گیرد و از مدل هزینه برای انتخاب ارزان‌ترین روش استفاده می‌کند. این شامل موارد زیر است: .RS 4 .IP * 4 آزمودن هر دو روش SVE و Advanced SIMD، زمانی که SVE در دسترس باشد. .IP * 4 تلاش برای استفاده از بردارهای ۶۴ بیتی Advanced SIMD برای کوچک‌ترین عناصر داده، به جای استفاده از بردارهای ۱۲۸ بیتی برای همه چیز. .IP * 4 تلاش برای استفاده از بردارهای "unpacked" در SVE برای عناصر کوچک‌تر. این شامل ذخیره کردن عناصر کوچک‌تر در ظرف‌های بزرگ‌تر و دسترسی به عناصر با بارگذاری‌های گسترش‌دهنده (extending loads) و ذخیره‌سازی‌های برش‌دهنده (truncating stores) می‌شود. .RE .RS 4 .RE .IP \fBaarch64\-float\-recp\-precision\fR 4 .IX Item "aarch64-float-recp-precision" تعداد تکرارهای نیوتن برای محاسبهٔ معکوس در نوع float. دقت تقسیم متناسب با این پارامتر است زمانی که تقریب تقسیم فعال باشد. مقدار پیش‌فرض ۱ است. .IP \fBaarch64\-double\-recp\-precision\fR 4 .IX Item "aarch64-double-recp-precision" تعداد تکرارهای نیوتن برای محاسبهٔ معکوس در نوع double. دقت تقسیم متناسب با این پارامتر است زمانی که تقریب تقسیم فعال باشد. مقدار پیش‌فرض ۲ است. .IP \fBaarch64\-autovec\-preference\fR 4 .IX Item "aarch64-autovec-preference" تحمیل یک راهبرد انتخاب ISA برای برداری‌سازی خودکار (auto\-vectorization). .RS 4 .IP \fBdefault\fR 4 .IX Item "default" استفاده از روش‌های ابتکاری پیش‌فرض. .IP \fBasimd\-only\fR 4 .IX Item "asimd-only" فقط استفاده از Advanced SIMD برای برداری‌سازی خودکار. .IP \fBsve\-only\fR 4 .IX Item "sve-only" فقط استفاده از SVE برای برداری‌سازی خودکار. .IP \fBprefer\-asimd\fR 4 .IX Item "prefer-asimd" استفاده از هر دو Advanced SIMD و SVE. ترجیح دادن Advanced SIMD زمانی که هزینه‌ها برابر تشخیص داده شوند..IP \fBprefer\-sve\fR 4 .IX Item "prefer-sve" استفاده از هر دو Advanced SIMD و SVE. هنگامی که هزینه‌ها برابر در نظر گرفته شوند، SVE ترجیح داده می‌شود. .RE .RS 4 .RE .IP \fBaarch64\-ldp\-policy\fR 4 .IX Item "aarch64-ldp-policy" سیاست دقیق (ریز‌دانه) برای جفت‌های بارگذاری (load pairs). با \fB\-\-param=aarch64\-ldp\-policy=default\fR، از سیاست ساختار تنظیم استفاده می‌کند. این مقدار، پیش‌فرض فعلی است. با \fB\-\-param=aarch64\-ldp\-policy=always\fR، صرف‌نظر از تراز بودن، دستور ldp را تولید می‌کند. با \fB\-\-param=aarch64\-ldp\-policy=never\fR، دستور ldp را تولید نمی‌کند. با \fB\-\-param=aarch64\-ldp\-policy=aligned\fR، دستور ldp را تنها در صورتی تولید می‌کند که اشاره‌گر مبدا حداقل به اندازه دو برابر تراز نوع مربوطه، تراز شده باشد. .IP \fBaarch64\-stp\-policy\fR 4 .IX Item "aarch64-stp-policy" سیاست دقیق (ریز‌دانه) برای جفت‌های ذخیره‌سازی (store pairs). با \fB\-\-param=aarch64\-stp\-policy=default\fR، از سیاست ساختار تنظیم استفاده می‌کند. این مقدار، پیش‌فرض فعلی است. با \fB\-\-param=aarch64\-stp\-policy=always\fR، صرف‌نظر از تراز بودن، دستور stp را تولید می‌کند. با \fB\-\-param=aarch64\-stp\-policy=never\fR، دستور stp را تولید نمی‌کند. با \fB\-\-param=aarch64\-stp\-policy=aligned\fR، دستور stp را تنها در صورتی تولید می‌کند که اشاره‌گر مبدا حداقل به اندازه دو برابر تراز نوع مربوطه، تراز شده باشد. .IP \fBaarch64\-ldp\-alias\-check\-limit\fR 4 .IX Item "aarch64-ldp-alias-check-limit" محدودیت تعداد بررسی‌های نام مستعار (alias checks) که توسط گام ادغام جفت‌های بارگذاری/ذخیره‌سازی در AArch64 هنگام تلاش برای تشکیل یک ldp/stp انجام می‌شود. مقادیر بالاتر باعث می‌شوند که این گذر در بازآرایی بارگذاری‌ها نسبت به ذخیره‌سازی‌ها تهاجمی‌تر عمل کند، به بهای افزایش زمان کامپایل. .IP \fBaarch64\-ldp\-writeback\fR 4 .IX Item "aarch64-ldp-writeback" پارامتری برای کنترل اینکه کدام فرصت‌های پس‌نویسی (writeback) در گام ادغام جفت‌های بارگذاری/ذخیره‌سازی AArch64 مدیریت شوند. مقدار صفر، مدیریت writeback را غیرفعال می‌کند. مقدار یک به این معنی است که در صورت امکان تلاش می‌شود جفت‌هایی شامل یک یا چند دسترسی writeback منفردِ موجود تشکیل شوند. مقدار دو بدین معناست که علاوه بر این، تلاش می‌شود با ادغام به‌روزرسانی‌های تخریبیِ پسین در ثبات پایه (base register) مورد استفاده توسط یک جفت، فرصت‌های writeback به صورت بهینه‌جویانه ایجاد شوند. .IP \fBaarch64\-loop\-vect\-issue\-rate\-niters\fR 4 .IX Item "aarch64-loop-vect-issue-rate-niters" تنظیمات (tuning) برخی از پردازنده‌های AArch64 هنگام تصمیم‌گیری درباره اینکه یک حلقه باید با استفاده از SVE برداری‌سازی شود، یا با Advanced SIMD برداری‌سازی شود، یا اصلاً برداری‌سازی نشود، تلاش می‌کند هم تاخیرها (latencies) و هم نرخ صدور دستورالعمل‌ها (issue rates) را در نظر بگیرد. اگر این پارامتر روی \fIn\fR تنظیم شود، GCC از این روش مکاشفه‌ای برای حلقه‌هایی که مشخص است در کمتر از \fIn\fR تکرار Advanced SIMD اجرا می‌شوند، استفاده نخواهد کرد. .IP \fBaarch64\-vect\-unroll\-limit\fR 4 .IX Item "aarch64-vect-unroll-limit" برداری‌ساز از اطلاعات تنظیم موجود برای تعیین اینکه آیا باز کردن (unroll) حلقهٔ برداری‌شدهٔ اصلی سودمند خواهد بود و تا چه اندازه، استفاده می‌کند. این پارامتر، حد بالای میزان باز کردن حلقهٔ اصلی توسط برداری‌ساز را مشخص می‌کند. مقدار پیش‌فرض برابر چهار است. .RE .RS 4 .Sp گزینه‌های زیر برای \fIname\fR در هدف‌های GCN در دسترس هستند: .IP \fBgcn\-preferred\-vectorization\-factor\fR 4 .IX Item "gcn-preferred-vectorization-factor" ضریب برداری‌سازی ترجیحی: \fBdefault\fR، \fB32\fR، \fB64\fR. .RE .RS 4 .Sp گزینه‌های زیر برای \fIname\fR در هدف‌های i386 و x86_64 در دسترس هستند: .IP \fBx86\-stlf\-window\-ninsns\fR 4 .IX Item "x86-stlf-window-ninsns" تعداد دستورالعمل‌هایی که فراتر از آن، جریمهٔ توقف ناشی از STFL قابل جبران است. .IP \fBx86\-stv\-max\-visits\fR 4 .IX Item "x86-stv-max-visits" حداکثر تعداد پیمایش‌های use و def هنگام کشف یک زنجیرهٔ STV پیش از آنکه فرآیند کشف لغو شود. .RE .RS 4 .RE .SS "گزینه‌های ابزارسازی برنامه (Program Instrumentation Options)" .IX Subsection "Program Instrumentation Options" کامپایلر GCC از چندین گزینهٔ خط فرمان پشتیبانی می‌کند که افزودن ابزارسازی زمان اجرا (run\-time instrumentation) به کدی را که معمولاً تولید می‌کند، کنترل می‌نمایند. برای نمونه، یکی از اهداف ابزارسازی، گردآوری آمارهای پروفایل‌سازی (profiling) برای استفاده در یافتن نقاط داغ برنامه (hot spots)، تحلیل پوشش کد، یا بهینه‌سازی‌های هدایت‌شده با پروفایل است. دستهٔ دیگری از ابزارسازی برنامه، افزودن بررسی‌های زمان اجرا برای تشخیص خطاهای برنامه‌نویسی نظیر ارجاع‌های نامعتبر اشاره‌گر یا دسترسی‌های خارج از محدودهٔ آرایه، و نیز حملات عمدی خصمانه مانند درهم‌شکستن پشته (stack smashing) یا سرقت vtable در C++ است. همچنین یک قلاب (hook) عمومی وجود دارد که می‌تواند برای پیاده‌سازی شکل‌های دیگر ردیابی (tracing) یا ابزارسازی در سطح تابع، برای اهداف اشکال‌زدایی یا تحلیل برنامه استفاده شود. .IP \fB\-p\fR 4 .IX Item "-p" .PD 0 .IP \fB\-pg\fR 4 .IX Item "-pg" .PD تولید کد اضافی برای نوشتن اطلاعات پروفایل مناسب برای برنامهٔ تحلیل \fBprof\fR (برای \fB\-p\fR) یا \fBgprof\fR (برای \fB\-pg\fR). شما باید هنگام کامپایل فایل‌های منبعی که مایل به دریافت اطلاعات دربارهٔ آن‌ها هستید از این گزینه استفاده کنید، و همچنین باید هنگام پیوند دادن (linking) نیز آن را به کار ببرید. .Sp می‌توانید از صفت تابع با نام \f(CW\*(C`no_instrument_function\*(C'\fR برای جلوگیری از پروفایل‌سازی توابع خاص هنگام کامپایل با این گزینه‌ها استفاده کنید. .IP \fB\-fprofile\-arcs\fR 4 .IX Item "-fprofile-arcs" افزودن کد تا کمان‌های (\fIarcs\fR) جریان برنامه ابزارسازی شوند. در طول اجرا، برنامه ثبت می‌کند که هر انشعاب و فراخوانی چند بار اجرا شده و چند بار منشعب شده یا بازگشته است. در هدف‌هایی که از سازنده‌ها با اولویت پشتیبانی می‌کنند، پروفایل‌سازی به درستی سازنده‌ها، نابودکننده‌ها و سازنده‌های کلاس‌های C++ (و نابودکننده‌ها) را که به عنوان نوعی از یک متغیر سراسری استفاده شده‌اند، مدیریت می‌کند. .Sp هنگامی که برنامهٔ کامپایل‌شده خارج می‌شود، این داده‌ها را در فایلی به نام \&\fIauxname.gcda\fR برای هر فایل منبع ذخیره می‌کند. این داده‌ها می‌توانند برای بهینه‌سازی‌های هدایت‌شده با پروفایل (\fB\-fbranch\-probabilities\fR)، یا برای تحلیل پوشش آزمون (\fB\-ftest\-coverage\fR) استفاده شوند. نام \&\fIauxname\fR برای هر فایل شیء، در صورتی که به صراحت مشخص شده باشد و فایل اجرایی نهایی نباشد، از نام فایل خروجی تولید می‌شود، در غیر این صورت نام پایه (basename) فایل منبع خواهد بود. در هر دو حالت، هرگونه پسوند حذف می‌شود (به عنوان مثال \fIfoo.gcda\fR برای فایل ورودی \fIdir/foo.c\fR، یا \&\fIdir/foo.gcda\fR برای فایل خروجی مشخص‌شده به صورت \fB\-o dir/foo.o\fR). .Sp توجه داشته باشید که اگر خط فرمان مستقیماً فایل‌های منبع را پیوند دهد، فایل‌های \&\fI.gcda\fR مربوطه پیشوندی از نام بدون پسوندِ فایل خروجی خواهند داشت؛ برای مثال، دستور \f(CW\*(C`gcc a.c b.c \-o binary\*(C'\fR فایل‌های \fIbinary\-a.gcda\fR و \&\fIbinary\-b.gcda\fR را تولید می‌کند. .IP \fB\-fcondition\-coverage\fR 4 .IX Item "-fcondition-coverage" افزودن کد تا شرایط برنامه ابزارسازی شوند. در طول اجرا، برنامه ثبت می‌کند که چه عبارت‌هایی در یک شرط در تصمیم‌گیری نقش داشته‌اند، که می‌توان از آن برای تایید اینکه همهٔ عبارت‌ها در یک تابع بولی آزمایش شده‌اند و اثری مستقل بر نتیجهٔ یک تصمیم دارند، استفاده کرد. نتیجه را می‌توان با \f(CW\*(C`gcov \-\-conditions\*(C'\fR خواند. .IP \fB\-fpath\-coverage\fR 4 .IX Item "-fpath-coverage" افزودن کد تا مسیرهای طی‌شده ردیابی شوند. در طول اجرا، برنامه مسیرهای اول (prime paths) طی‌شده را ثبت می‌کند. تعداد مسیرها با افزایش پیچیدگی بسیار سریع رشد می‌کند، و برای جلوگیری از انفجار زمان‌های کامپایل، اگر تعداد تقریبی مسیرها از حد کنترل‌شده توسط \fB\-fpath\-coverage\-limit\fR فراتر رود، GCC از ابزارسازی صرف‌نظر خواهد کرد. نتیجه را می‌توان با \f(CW\*(C`gcov \-\-prime\-paths \-\-prime\-paths\-lines \-\-prime\-paths\-source\*(C'\fR خواند. .IP \fB\-fpath\-coverage\-limit=\fR\fIlimit\fR 4 .IX Item "-fpath-coverage-limit=limit" آستانه‌ای که در آن نقطه \fB\-fpath\-coverage\fR از ابزارسازی یک تابع صرف‌نظر می‌کند. این حد تقریبی و محتاطانه است، زیرا GCC از یک روش مکاشفه‌ای بدبینانه استفاده می‌کند که تعداد جاری مسیرها را کمی بیشتر می‌شمارد، و اگر این آستانه پیش از یافتن همهٔ مسیرها فرا برسد، متوقف می‌شود. این گزینه برای کنترل دقیق و ریز‌دانه روی اینکه کدام توابع ابزارسازی شوند نیست \- بلکه هدف آن محدود کردن اثر انفجار مسیر و منطقی نگه داشتن زمان کامپایل است. مقدار پیش‌فرض \fI250000\fR است. .IP \fB\-\-coverage\fR 4 .IX Item "--coverage" این گزینه برای کامپایل و پیوند دادن کدهای ابزارسازی‌شده به منظور تحلیل پوشش استفاده می‌شود. این گزینه معادل \fB\-fprofile\-arcs\fR \&\fB\-ftest\-coverage\fR (هنگام کامپایل) و \fB\-lgcov\fR (هنگام پیوند دادن) است. برای جزئیات بیشتر به مستندات آن گزینه‌ها مراجعه کنید. .RS 4 .IP * 4 فایل‌های منبع را با \fB\-fprofile\-arcs\fR به همراه گزینه‌های بهینه‌سازی و تولید کد کامپایل کنید. برای تحلیل پوشش آزمون، از گزینهٔ اضافی \fB\-ftest\-coverage\fR استفاده کنید. نیازی نیست همهٔ فایل‌های منبع موجود در یک برنامه را پروفایل‌سازی کنید. .IP * 4 فایل‌های منبع را همچنین با \fB\-fprofile\-abs\-path\fR کامپایل کنید تا نام مسیرهای مطلق در فایل‌های \fI.gcno\fR ایجاد شوند. این کار به \fBgcov\fR اجازه می‌دهد تا در پروژه‌هایی که کامپایل با دایرکتوری‌های کاری متفاوتی انجام می‌شود، منابع درست را بیابد. .IP * 4 فایل‌های شیء خود را با \fB\-lgcov\fR یا \fB\-fprofile\-arcs\fR پیوند دهید (مورد دوم مستلزم مورد اول است). .IP * 4 برنامه را با یک بار کاری نمونه اجرا کنید تا اطلاعات پروفایل کمان تولید شود. این کار را می‌توان به هر تعداد بار تکرار کرد. می‌توانید نمونه‌های هم‌روند از برنامهٔ خود را اجرا کنید، و تا زمانی که فایل سیستم از قفل‌گذاری پشتیبانی کند، فایل‌های داده به درستی به‌روزرسانی خواهند شد. فراخوانی‌های \f(CW\*(C`fork\*(C'\fR شناسایی شده و بدون شمارش دوباره به درستی مدیریت می‌شوند، مگر اینکه گزینهٔ گویش اکید ISO C فعال باشد. .Sp علاوه بر این، یک فایل شیء می‌تواند چندین بار بازکامپایل شود و تا زمانی که فایل منبع و گزینه‌های کامپایلر بدون تغییر باقی بمانند، فایل \fI.gcda\fR مربوطه ادغام می‌گردد..IP * 4 برای بهینه‌سازی‌های هدایت‌شده با نمایه (profile\-directed optimizations)، فایل‌های مبدأ را دوباره با همان گزینه‌های بهینه‌سازی و تولید کد به همراه \&\fB\-fbranch\-probabilities\fR کامپایل کنید. .IP * 4 برای تحلیل پوشش آزمون، از \fBgcov\fR برای تولید اطلاعات خوانا برای انسان از فایل‌های \fI.gcno\fR و \fI.gcda\fR استفاده کنید. برای اطلاعات بیشتر به مستندات \&\fBgcov\fR مراجعه کنید. .RE .RS 4 .Sp با \fB\-fprofile\-arcs\fR، کامپایلر GCC برای هر تابع برنامه شما یک گراف جریان برنامه ایجاد کرده، سپس یک درخت پوشا (spanning tree) برای گراف پیدا می‌کند. تنها یال‌هایی که روی درخت پوشا نیستند نیاز به ابزارگذاری (instrumentation) دارند: کامپایلر کدی برای شمارش تعداد دفعات اجرای این یال‌ها اضافه می‌کند. هنگامی که یک یال تنها خروجی یا تنها ورودی به یک بلوک باشد، کد ابزارگذاری می‌تواند به همان بلوک اضافه شود؛ در غیر این صورت، برای نگهداری کد ابزارگذاری باید یک بلوک پایه‌ای جدید ایجاد شود. .Sp با \fB\-fcondition\-coverage\fR، کامپایلر GCC برای هر شرط در برنامه شما یک مجموعه بیتی ایجاد کرده و مقادیر بولی آزمایش‌شده‌ای را که تأثیری مستقل بر نتیجه آن عبارت دارند، ثبت می‌کند. .Sp با \fB\-fpath\-coverage\fR، کامپایلر GCC مسیرهای اول (prime paths) طی‌شده هر تابع را پیدا، شمارش و ثبت می‌کند، مگر اینکه تعداد مسیرها از حد کنترل‌شده توسط \fB\-fpath\-coverage\-limit\fR فراتر رود. اگر از این حد فراتر رود، تابع ابزارگذاری نمی‌شود؛ درست مانند اینکه از \&\fB\-fpath\-coverage\fR استفاده نشده باشد. یک مسیر اول طولانی‌ترین توالی از بلوک‌های یکتا است (به‌جز احتمالاً بلوک اول و آخر) که زیرمسیر هیچ مسیر دیگری نباشد. .RE .IP \fB\-ftest\-coverage\fR 4 .IX Item "-ftest-coverage" یک فایل یادداشت تولید می‌کند که ابزار پوشش کد \fBgcov\fR می‌تواند از آن برای نمایش پوشش برنامه استفاده کند. فایل یادداشت هر فایل مبدأ \&\fIauxname.gcno\fR نامیده می‌شود. برای توضیحات مربوط به \fIauxname\fR و دستورالعمل‌های نحوه تولید داده‌های پوشش آزمون، به گزینه \fB\-fprofile\-arcs\fR در بالا مراجعه کنید. اگر بهینه‌سازی انجام ندهید، داده‌های پوشش با دقت بیشتری با فایل‌های مبدأ مطابقت خواهند داشت. .IP \fB\-fprofile\-abs\-path\fR 4 .IX Item "-fprofile-abs-path" به‌طور خودکار نام فایل‌های مبدأ نسبی را به نام مسیرهای مطلق در فایل‌های \fI.gcno\fR تبدیل می‌کند. این به \fBgcov\fR اجازه می‌دهد تا در پروژه‌هایی که کامپایل‌ها در دایرکتوری‌های کاری متفاوتی انجام می‌شوند، فایل‌های مبدأ درست را پیدا کند. .IP \fB\-fprofile\-dir=\fR\fIpath\fR 4 .IX Item "-fprofile-dir=path" دایرکتوری جستجو برای فایل‌های داده نمایه را روی \fIpath\fR تنظیم می‌کند. این گزینه فقط بر داده‌های نمایه‌ای تأثیر می‌گذارد که توسط \&\fB\-fprofile\-generate\fR، \fB\-ftest\-coverage\fR، \fB\-fprofile\-arcs\fR تولید شده و توسط \fB\-fprofile\-use\fR و \fB\-fbranch\-probabilities\fR و گزینه‌های مرتبط با آن استفاده می‌شوند. هم مسیرهای مطلق و هم نسبی قابل استفاده هستند. به‌طور پیش‌فرض، GCC از دایرکتوری فعلی به عنوان \fIpath\fR استفاده می‌کند، بنابراین فایل داده نمایه در همان دایرکتوری فایل شیء (object file) ظاهر می‌شود. به منظور جلوگیری از تداخل نام فایل‌ها، اگر نام فایل شیء یک مسیر مطلق نباشد، مسیر مطلق فایل \&\fIsourcename.gcda\fR درهم‌ریخته (mangle) شده و به عنوان نام فایل یک فایل \&\fI.gcda\fR استفاده می‌شود. جزئیات نام‌گذاری فایل را در \fB\-fprofile\-arcs\fR ببینید. گزینه مشابه \fB\-fprofile\-note\fR را نیز ببینید. .Sp هنگامی که یک فایل اجرایی در یک محیط موازی گسترده اجرا می‌شود، توصیه می‌شود نمایه در پوشه‌های مختلف ذخیره شود. این کار را می‌توان با متغیرهایی در \fIpath\fR انجام داد که در زمان اجرا صادر (export) می‌شوند: .RS 4 .ie n .IP \fR\fB%p\fR\fB\fR 4 .el .IP \fR\f(CB%p\fR\fB\fR 4 .IX Item "%p" شناسه فرایند (process ID). .ie n .IP \fR\fB%q\fR\fB{VAR}\fR 4 .el .IP \fR\f(CB%q\fR\fB{VAR}\fR 4 .IX Item "%q{VAR}" مقدار متغیر محیطی \fIVAR\fR .RE .RS 4 .RE .IP \fB\-fprofile\-generate\fR 4 .IX Item "-fprofile-generate" .PD 0 .IP \fB\-fprofile\-generate=\fR\fIpath\fR 4 .IX Item "-fprofile-generate=path" .PD گزینه‌هایی را فعال می‌کند که معمولاً برای ابزارگذاری برنامه به منظور تولید نمایه‌ای که برای کامپایل مجدد بعدی همراه با بهینه‌سازی مبتنی بر بازخورد نمایه مفید است، استفاده می‌شوند. شما باید از \fB\-fprofile\-generate\fR هم هنگام کامپایل و هم هنگام پیوند زدن (link) برنامه خود استفاده کنید. .Sp گزینه‌های زیر فعال می‌شوند: \&\fB\-fprofile\-arcs\fR، \fB\-fprofile\-values\fR، \&\fB\-finline\-functions\fR و \fB\-fipa\-bit\-cp\fR. .Sp اگر \fIpath\fR مشخص شده باشد، GCC برای یافتن فایل‌های داده بازخورد نمایه، مسیر \fIpath\fR را بررسی می‌کند. گزینه \fB\-fprofile\-dir\fR را ببینید. .Sp برای بهینه‌سازی برنامه بر اساس اطلاعات نمایه جمع‌آوری‌شده، از \&\fB\-fprofile\-use\fR استفاده کنید. .IP \fB\-fprofile\-info\-section\fR 4 .IX Item "-fprofile-info-section" .PD 0 .IP \fB\-fprofile\-info\-section=\fR\fIname\fR 4 .IX Item "-fprofile-info-section=name" .PD اطلاعات نمایه را به جای استفاده از سازنده/تخریب‌کننده (constructor/destructor) در بخش (section) مشخص‌شده ثبت می‌کند. نام بخش در صورت مشخص شدن \fIname\fR است، در غیر این صورت نام بخش به‌طور پیش‌فرض \f(CW\*(C`.gcov_info\*(C'\fR خواهد بود. یک اشاره‌گر به اطلاعات نمایه تولیدشده توسط \fB\-fprofile\-arcs\fR برای هر واحد ترجمه در بخش مشخص‌شده قرار می‌گیرد. این گزینه ثبت اطلاعات نمایه از طریق constructor و پردازش اطلاعات نمایه از طریق destructor را غیرفعال می‌کند. این گزینه برای استفاده در محیط‌های میزبانی‌شده (hosted) مانند GNU/Linux در نظر گرفته نشده است. این گزینه محیط‌های مستقل (freestanding مانند سامانه‌های تعبیه‌شده) با منابع محدود را هدف قرار می‌دهد که از constructors/destructors یا ورودی/خروجی فایل کتابخانه C پشتیبانی نمی‌کنند. .Sp پیونددهنده (linker) می‌تواند بخش‌های ورودی را در یک بلوک حافظه پیوسته جمع‌آوری کرده و نمادهای آغاز و پایان را تعریف کند. یک نمونه اسکریپت پیونددهنده گنو (GNU linker script) که یک بخش خروجی پیونددهنده را تعریف می‌کند به صورت زیر است: .Sp .Vb 6 \& .gcov_info : \& { \& PROVIDE (_\|_gcov_info_start = .); \& KEEP (*(.gcov_info)) \& PROVIDE (_\|_gcov_info_end = .); \& } .Ve .Sp برنامه می‌تواند اطلاعات نمایه‌سازی ثبت‌شده در این مجموعه پیونددهنده را برای نمونه به این شکل تخلیه (dump) کند: .Sp .Vb 3 \& #include \& #include \& #include \& \& extern const struct gcov_info *const _\|_gcov_info_start[]; \& extern const struct gcov_info *const _\|_gcov_info_end[]; \& \& static void \& dump (const void *d, unsigned n, void *arg) \& { \& const unsigned char *c = d; \& \& for (unsigned i = 0; i < n; ++i) \& printf ("%02x", c[i]); \& } \& \& static void \& filename (const char *f, void *arg) \& { \& _\|_gcov_filename_to_gcfn (f, dump, arg ); \& } \& \& static void * \& allocate (unsigned length, void *arg) \& { \& return malloc (length); \& } \& \& static void \& dump_gcov_info (void) \& { \& const struct gcov_info *const *info = _\|_gcov_info_start; \& const struct gcov_info *const *end = _\|_gcov_info_end; \& \& /* Obfuscate variable to prevent compiler optimizations. */ \& _\|_asm_\|_ ("" : "+r" (info)); \& \& while (info != end) \& { \& void *arg = NULL; \& _\|_gcov_info_to_gcda (*info, filename, dump, allocate, arg); \& putchar (\*(Aq\en\*(Aq); \& ++info; \& } \& } \& \& int \& main (void) \& { \& dump_gcov_info (); \& return 0; \& } .Ve .Sp از زیرفرمان \fBmerge\-stream\fR در \fBgcov\-tool\fR می‌توان برای وا‌سریال‌سازی جریان داده تولیدشده توسط توابع \f(CW\*(C`_\|_gcov_filename_to_gcfn\*(C'\fR و \&\f(CW\*(C`_\|_gcov_info_to_gcda\*(C'\fR و ادغام اطلاعات نمایه در فایل‌های \&\fI.gcda\fR روی سیستم‌فایل میزبان استفاده کرد..IP \fB\-fprofile\-note=\fR\fIpath\fR 4 .IX Item "-fprofile-note=path" اگر \fIpath\fR مشخص شود، GCC فایل \fI.gcno\fR را در مکان \fIpath\fR ذخیره می‌کند. در صورت استفادهٔ هم‌زمان از این گزینه با چندین فایل مبدأ، فایل \fI.gcno\fR بازنویسی خواهد شد. .IP \fB\-fprofile\-prefix\-path=\fR\fIpath\fR 4 .IX Item "-fprofile-prefix-path=path" این گزینه می‌تواند در ترکیب با \&\fBprofile\-generate=\fR\fIprofile_dir\fR و \&\fBprofile\-use=\fR\fIprofile_dir\fR استفاده شود تا به GCC اطلاع دهد دایرکتوری پایهٔ درخت مبدأ ساخته‌شده کجاست. به‌طور پیش‌فرض، \fIprofile_dir\fR حاوی فایل‌هایی با مسیرهای مطلق درهم‌ریخته‌شدهٔ (mangled) تمام فایل‌های شیء پروژهٔ ساخته‌شده خواهد بود. این حالت زمانی که دایرکتوری استفاده‌شده برای ساخت دودوییِ ابزارگذاری‌شده (instrumented) با دایرکتوری استفاده‌شده برای ساخت باینریِ بهینه‌شده با بازخورد پروفایل تفاوت داشته باشد، مطلوب نیست؛ چرا که داده‌های پروفایل در طول ساخت بهینه‌شده یافت نخواهند شد. در چنین شرایطی، \fB\-fprofile\-prefix\-path=\fR\fIpath\fR در حالی که \fIpath\fR به دایرکتوری پایهٔ ساخت اشاره می‌کند، می‌تواند برای حذف بخش نامربوط مسیر و نسبی نگه‌داشتن تمامی نام‌های فایل نسبت به دایرکتوری اصلی ساخت استفاده شود. .IP \fB\-fprofile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4 .IX Item "-fprofile-prefix-map=old=new" هنگام کامپایل فایل‌های واقع در دایرکتوری \fIold\fR، اطلاعات پروفایل‌سازی (با \fB\-\-coverage\fR) را طوری ثبت می‌کند که گویی این فایل‌ها در دایرکتوری \fInew\fR قرار دارند. همچنین نگاه کنید به \fB\-ffile\-prefix\-map\fR و \fB\-fcanon\-prefix\-map\fR. .IP \fB\-fprofile\-update=\fR\fImethod\fR 4 .IX Item "-fprofile-update=method" روش به‌روزرسانی را برای برنامه‌ای که جهت بهینه‌سازی بر پایهٔ بازخورد پروفایل ابزارگذاری شده است تغییر می‌دهد. آرگومان \fImethod\fR باید یکی از مقادیر \&\fBsingle\fR، \fBatomic\fR یا \fBprefer\-atomic\fR باشد. مقدار نخست برای برنامه‌های تک‌رشته‌ای مفید است، در حالی که مقدار دوم با تولید کد امن از نظر رشته (thread-safe)، از خراب شدن پروفایل جلوگیری می‌کند. .Sp \&\fBهشدار:\fR زمانی که یک برنامه تمام رشته‌ها را به‌درستی الحاق (join) نکند (یا یک رشتهٔ منفصل/detached ایجاد کند)، فایل پروفایل همچنان ممکن است مخدوش شود. .Sp استفاده از \fBprefer\-atomic\fR در صورت پشتیبانی توسط پلتفرم مقصد به \fBatomic\fR و در غیر این صورت به \fBsingle\fR تبدیل می‌شود. راه‌انداز GCC هنگامی که \fB\-pthread\fR در خط فرمان وجود داشته باشد، به‌طور خودکار \fBprefer\-atomic\fR را انتخاب می‌کند، در غیر این صورت روش پیش‌فرض \fBsingle\fR است. .Sp اگر \fBatomic\fR انتخاب شود، اطلاعات پروفایل با استفاده از عملیات اتمی بر پایهٔ بیشترین تلاش ممکن (best-effort) به‌روزرسانی می‌شوند. در حالت ایده‌آل، اطلاعات پروفایل از طریق عملیات اتمی در سخت‌افزار به‌روزرسانی می‌شوند. با این حال، اگر پلتفرم مقصد از عملیات اتمی مورد نیاز در سخت‌افزار پشتیبانی نکند ولی \fIlibatomic\fR در دسترس باشد، اطلاعات پروفایل از طریق فراخوانی‌های \&\fIlibatomic\fR به‌روزرسانی خواهند شد. اگر پلتفرم مقصد نه از عملیات اتمی در سخت‌افزار و نه از \fIlibatomic\fR پشتیبانی کند، اطلاعات پروفایل به‌صورت اتمی به‌روزرسانی نمی‌شوند و یک هشدار صادر می‌شود. در این حالت، اطلاعات پروفایل‌سازی به‌دست‌آمده ممکن است برای برنامه‌های چندرشته‌ای مخدوش باشد. .Sp به دلایل کارایی، اگر از شمارنده‌های ۶۴ بیتی برای اطلاعات پروفایل‌سازی استفاده شود و پلتفرم مقصد تنها از عملیات اتمی ۳۲ بیتی در سخت‌افزار پشتیبانی کند، به‌روزرسانی‌های حساس به کاراییِ پروفایل با استفاده از دو عملیات اتمی ۳۲ بیتی برای به‌روزرسانی هر شمارنده انجام می‌شوند. اگر سیگنالی این دو عملیات به‌روزرسانیِ یک شمارنده را قطع کند، اطلاعات پروفایل‌سازی ممکن است در وضعیتی متناقض و ناپایدار قرار گیرند. .IP \fB\-fprofile\-filter\-files=\fR\fIregex\fR 4 .IX Item "-fprofile-filter-files=regex" تنها توابعی از فایل‌ها را ابزارگذاری می‌کند که نام آن‌ها با هر یک از عبارات باقاعده (که با نقطه\-ویرگول از هم جدا شده‌اند) مطابقت داشته باشد. .Sp برای مثال، \fB\-fprofile\-filter\-files=main\e.c;module.*\e.c\fR تنها \fImain.c\fR و تمام فایل‌های C را که با \*(Aqmodule\*(Aq آغاز می‌شوند ابزارگذاری خواهد کرد. .IP \fB\-fprofile\-exclude\-files=\fR\fIregex\fR 4 .IX Item "-fprofile-exclude-files=regex" تنها توابعی از فایل‌ها را ابزارگذاری می‌کند که نام آن‌ها با هیچ‌یک از عبارات باقاعده (که با نقطه\-ویرگول از هم جدا شده‌اند) مطابقت نداشته باشد. .Sp برای مثال، \fB\-fprofile\-exclude\-files=/usr/.*\fR از ابزارگذاری تمام فایل‌هایی که در پوشهٔ \fI/usr/\fR قرار دارند جلوگیری می‌کند. .IP \fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel\-runs\fR|\fBserial\fR] 4 .IX Item "-fprofile-reproducible=[multithreaded|parallel-runs|serial]" سطح تکرارپذیری پروفایل جمع‌آوری‌شده توسط \&\f(CW\*(C`\-fprofile\-generate\*(C'\fR را کنترل می‌کند. این امر امکان بازسازی برنامه با نتیجه‌ای یکسان را فراهم می‌سازد که به‌عنوان مثال برای بسته‌های توزیع مفید است. .Sp با \fB\-fprofile\-reproducible=serial\fR، پروفایل جمع‌آوری‌شده توسط \&\fB\-fprofile\-generate\fR تکرارپذیر خواهد بود، به شرطی که برنامهٔ آموزش‌داده‌شده در هر بار اجرای مرحلهٔ آموزش رفتاری یکسان داشته باشد، چندرشته‌ای نباشد و ارسال جریانیِ داده‌های پروفایل همواره به همان ترتیب انجام شود. توجه داشته باشید که ارسال جریانی داده‌های پروفایل در پایان اجرای برنامه و همچنین پیش از فراخوانی تابع \f(CW\*(C`fork\*(C'\fR رخ می‌دهد. .Sp توجه داشته باشید که بسیار متداول است تعداد دفعات اجرای برخی بخش‌های برنامه، برای نمونه به طول نام فایل‌های موقت یا تصادفی‌سازی فضای حافظه (که ممکن است بر نرخ برخورد در جدول هش تأثیر بگذارد) وابسته باشد. چنین بخش‌های غیرتکرارپذیری از برنامه را می‌توان با صفتِ تابع \&\f(CW\*(C`no_instrument_function\*(C'\fR مشخص کرد. از \fBgcov\-dump\fR همراه با \&\fB\-l\fR می‌توان برای تخلیهٔ داده‌های جمع‌آوری‌شده و بررسی اینکه آیا واقعاً تکرارپذیر هستند استفاده کرد. .Sp با \fB\-fprofile\-reproducible=parallel\-runs\fR، پروفایل جمع‌آوری‌شده بدون در نظر گرفتن ترتیب ارسال جریانی داده‌ها به فایل‌های gcda تکرارپذیر می‌ماند. این تنظیم امکان اجرای چندین نمونه از برنامهٔ ابزارگذاری‌شده را به‌طور موازی (مانند استفاده از \f(CW\*(C`make \-j\*(C'\fR) فراهم می‌کند. این امر کیفیت داده‌های جمع‌آوری‌شده را، به‌ویژه در پروفایل‌سازی فراخوانی‌های غیرمستقیم، کاهش می‌دهد. .IP \fB\-fsanitize=address\fR 4 .IX Item "-fsanitize=address" فعال‌سازی AddressSanitizer، یک شناساگر سریع خطاهای حافظه. دستورالعمل‌های دسترسی به حافظه برای تشخیص باگ‌های خارج از محدوده (out-of-bounds) و استفاده پس از آزادسازی (use-after-free) ابزارگذاری می‌شوند. این گزینه \fB\-fsanitize\-address\-use\-after\-scope\fR را فعال می‌کند. برای جزئیات بیشتر به <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizer\fR> مراجعه کنید. رفتار زمان اجرا را می‌توان با استفاده از متغیر محیطی \&\fBASAN_OPTIONS\fR کنترل کرد. در صورت مقداردهی به \f(CW\*(C`help=1\*(C'\fR، گزینه‌های موجود در زمان راه‌اندازی برنامهٔ ابزارگذاری‌شده نمایش داده می‌شوند. برای فهرستی از گزینه‌های پشتیبانی‌شده، <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR> را ببینید. این گزینه نمی‌تواند با \fB\-fsanitize=thread\fR یا \&\fB\-fsanitize=hwaddress\fR ترکیب شود. توجه داشته باشید تنها مقاصدی که \fB\-fsanitize=hwaddress\fR در حال حاضر روی آن‌ها پشتیبانی می‌شود x86\-64 (تنها با گزینه‌های \f(CW\*(C`\-mlam=u48\*(C'\fR یا \f(CW\*(C`\-mlam=u57\*(C'\fR) و AArch64 هستند، و در هر دو مورد تنها در ABIهایی با اشاره‌گرهای ۶۴ بیتی. .Sp هنگام کامپایل با \fB\-fsanitize=address\fR، باید از \fB\-g\fR نیز استفاده کنید تا خروجیِ معنادارتری ایجاد شود. برای به‌دست آوردن ردپای پشتهٔ (stack trace) دقیق‌تر، می‌توان از گزینه‌هایی مانند \&\fB\-O0\fR، \fB\-O1\fR یا \fB\-Og\fR (که برای نمونه، از درون‌خطی‌سازی اکثر توابع جلوگیری می‌کنند)، \fB\-fno\-optimize\-sibling\-calls\fR (که از بهینه‌سازی فراخوانی‌های هم‌سطح و بازگشتی انتهایی جلوگیری می‌کند؛ این گزینه به‌طور ضمنی برای \&\fB\-O0\fR، \fB\-O1\fR یا \fB\-Og\fR فعال است)، یا \fB\-fno\-ipa\-icf\fR (که تاشدگی کدهای یکسان برای توابع را غیرفعال می‌کند) استفاده کرد. استفاده از \fB\-fno\-omit\-frame\-pointer\fR نیز ردپای پشته را بهبود می‌بخشد. از آنجا که اجراهای مکرر برنامه ممکن است به دلیل ASLR (تصادفی‌سازی چیدمان فضای آدرس) ردپاهایی با آدرس‌های متفاوت تولید کنند، ممکن است خاموش کردن ASLR مطلوب باشد. در لینوکس، این کار با \fBsetarch \`uname \-m\` \-R ./prog\fR قابل دستیابی است. .IP \fB\-fsanitize=kernel\-address\fR 4 .IX Item "-fsanitize=kernel-address" فعال‌سازی AddressSanitizer برای هستهٔ لینوکس. برای جزئیات بیشتر به <\fBhttps://github.com/google/kernel\-sanitizers\fR> مراجعه کنید. .IP \fB\-fsanitize=hwaddress\fR 4 .IX Item "-fsanitize=hwaddress" فعال‌سازی AddressSanitizer به کمک سخت‌افزار، که از قابلیت سخت‌افزاری نادیده گرفتن بایت بالای یک اشاره‌گر استفاده می‌کند تا امکان تشخیص خطاهای حافظه با سربار حافظهٔ اندک فراهم شود. دستورالعمل‌های دسترسی به حافظه برای تشخیص خطاهای خارج از محدوده و استفاده پس از آزادسازی ابزارگذاری می‌شوند. این گزینه \fB\-fsanitize\-address\-use\-after\-scope\fR را فعال می‌کند. برای جزئیات بیشتر به <\fBhttps://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html\fR> مراجعه کنید. رفتار زمان اجرا را می‌توان با استفاده از متغیر محیطی \&\fBHWASAN_OPTIONS\fR تحت تأثیر قرار داد. در صورت مقداردهی به \f(CW\*(C`help=1\*(C'\fR، گزینه‌های موجود در زمان راه‌اندازی برنامهٔ ابزارگذاری‌شده نشان داده می‌شوند. این گزینه نمی‌تواند با \fB\-fsanitize=thread\fR یا \&\fB\-fsanitize=address\fR ترکیب شود، و در حال حاضر تنها روی AArch64 در دسترس است. .IP \fB\-fsanitize=kernel\-hwaddress\fR 4 .IX Item "-fsanitize=kernel-hwaddress" فعال‌سازی AddressSanitizer به کمک سخت‌افزار برای کامپایل هستهٔ لینوکس. مشابه \fB\-fsanitize=kernel\-address\fR اما با استفاده از یک روش ابزارگذاری جایگزین، و مشابه \fB\-fsanitize=hwaddress\fR اما با تفاوت‌های ابزارگذاری لازم برای کامپایل هستهٔ لینوکس. این تفاوت‌ها برای جلوگیری از فراخوانی‌های مقداردهی اولیهٔ کتابخانهٔ hwasan و در نظر گرفتن این نکته است که اشاره‌گر پشته در بایت بالایی خود مقدار متفاوتی دارد. .Sp \&\fIنکته:\fR این گزینه مقادیر پیش‌فرض متفاوتی نسبت به \fB\-fsanitize=hwaddress\fR دارد. ابزارگذاری پشته و فراخوانی‌های alloca به‌طور پیش‌فرض فعال نیستند، اما همچنان با مشخص کردن گزینه‌های خط فرمانِ \&\fB\-\-param hwasan\-instrument\-stack=1\fR و \&\fB\-\-param hwasan\-instrument\-allocas=1\fR به‌ترتیب ممکن هستند. استفاده از برچسب فریم تصادفی برای ابزارگذاری هسته پیاده‌سازی نشده است. .IP \fB\-fsanitize=pointer\-compare\fR 4 .IX Item "-fsanitize=pointer-compare" عملیات مقایسه (<، <=، >، >=) با عملوندهای اشاره‌گر را ابزارگذاری می‌کند. این گزینه باید با یکی از گزینه‌های \fB\-fsanitize=kernel\-address\fR یا \&\fB\-fsanitize=address\fR ترکیب شود. این گزینه نمی‌تواند با \fB\-fsanitize=thread\fR ترکیب شود. نکته: به‌طور پیش‌فرض این بررسی در زمان اجرا غیرفعال است. برای فعال‌سازی آن، \&\f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR را به متغیر محیطی \&\fBASAN_OPTIONS\fR اضافه کنید. استفاده از \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR تنها زمانی عملیات نامعتبر را تشخیص می‌دهد که هر دو اشاره‌گر غیرتهی (non-null) باشند. .IP \fB\-fsanitize=pointer\-subtract\fR 4 .IX Item "-fsanitize=pointer-subtract" تفریق با عملوندهای اشاره‌گر را ابزارگذاری می‌کند. این گزینه باید با یکی از گزینه‌های \fB\-fsanitize=kernel\-address\fR یا \&\fB\-fsanitize=address\fR ترکیب شود. این گزینه نمی‌تواند با \fB\-fsanitize=thread\fR ترکیب شود. نکته: به‌طور پیش‌فرض این بررسی در زمان اجرا غیرفعال است. برای فعال‌سازی آن، \&\f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR را به متغیر محیطی \&\fBASAN_OPTIONS\fR اضافه کنید. استفاده از \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR تنها زمانی عملیات نامعتبر را تشخیص می‌دهد که هر دو اشاره‌گر غیرتهی (non-null) باشند..IP \fB\-fsanitize=shadow\-call\-stack\fR 4 .IX Item "-fsanitize=shadow-call-stack" سازوکار ShadowCallStack را فعال می‌کند؛ یک سازوکار امنیتی برای محافظت از برنامه‌ها در برابر رونویسی آدرس بازگشت (مانند سرریزهای بافر پشته). این سازوکار با ذخیره آدرس بازگشت تابع در یک پشته فراخوانی سایه با تخصیص جداگانه در مقدمه تابع (function prologue) و بازیابی مجدد آدرس بازگشت از پشته فراخوانی سایه در مؤخره تابع (function epilogue) کار می‌کند. ابزار دقیق‌سازی (Instrumentation) تنها در توابعی رخ می‌دهد که نیاز به ذخیره آدرس بازگشت در پشته دارند. .Sp در حال حاضر این ویژگی فقط از بستر aarch64 پشتیبانی می‌کند. این سازوکار به‌طور خاص برای هسته‌های لینوکسی طراحی شده که گزینه CONFIG_SHADOW_CALL_STACK را فعال کرده‌اند. برای برنامه‌های فضای کاربری، در حال حاضر پشتیبانی زمان اجرا در libc و libgcc ارائه نشده است. کاربرانی که می‌خواهند از این ویژگی در فضای کاربری استفاده کنند، باید پشتیبانی زمان اجرای خودشان را فراهم کنند. باید توجه داشت که این کار ممکن است منجر به نقض قوانین ABI شود. .Sp در aarch64، ابزار دقیق‌سازی از ثبات پلتفرم \f(CW\*(C`x18\*(C'\fR استفاده می‌کند. این امر به‌طور کلی بدین معنی است که هر کدی که ممکن است بر روی همان ریسه کدهای کامپایل‌شده با ShadowCallStack اجرا شود، باید با پرچم \&\fB\-ffixed\-x18\fR کامپایل شود؛ در غیر این صورت، توابعی که بدون \&\fB\-ffixed\-x18\fR کامپایل شده‌اند ممکن است ثبات \f(CW\*(C`x18\*(C'\fR را مخدوش (clobber) کرده و بدین‌ترتیب اشاره‌گر پشته سایه را تخریب کنند. .Sp همچنین، از آنجا که هیچ پشتیبانی زمان اجرایی در فضای کاربری وجود ندارد، کدهای کامپایل‌شده با ShadowCallStack نمی‌توانند از مدیریت استثنا استفاده کنند. برای غیرفعال کردن استثناها از \fB\-fno\-exceptions\fR استفاده کنید. .Sp برای جزئیات بیشتر به <\fBhttps://clang.llvm.org/docs/ShadowCallStack.html\fR> مراجعه کنید. .IP \fB\-fsanitize=thread\fR 4 .IX Item "-fsanitize=thread" قابلیت ThreadSanitizer را فعال می‌کند که یک تشخیص‌دهنده سریع رقابت داده (data race) است. دستورالعمل‌های دسترسی به حافظه برای تشخیص باگ‌های رقابت داده ابزار دقیق‌سازی می‌شوند. برای جزئیات بیشتر به <\fBhttps://github.com/google/sanitizers/wiki#threadsanitizer\fR> مراجعه کنید. رفتار زمان اجرا را می‌توان با استفاده از متغیر محیطی \fBTSAN_OPTIONS\fR تحت تأثیر قرار داد؛ برای دیدن فهرست گزینه‌های پشتیبانی‌شده به <\fBhttps://github.com/google/sanitizers/wiki/ThreadSanitizerFlags\fR> مراجعه کنید. این گزینه نمی‌تواند با \fB\-fsanitize=address\fR و \&\fB\-fsanitize=leak\fR ترکیب شود. .Sp هنگام کامپایل با \fB\-fsanitize=thread\fR، بهتر است از \&\fB\-g\fR نیز استفاده کنید تا خروجی مفهومی‌تری تولید شود. .Sp توجه داشته باشید که توابع توکار اتمیِ ابزار دقیق‌سازی‌شده، هنگام کار روی آدرس‌های نامعتبر حافظه به همراه استثناهای غیرفراخوانی (\fB\-fnon\-call\-exceptions\fR)، نمی‌توانند استثنا پرتاب کنند. .IP \fB\-fsanitize=leak\fR 4 .IX Item "-fsanitize=leak" قابلیت LeakSanitizer را فعال می‌کند که یک تشخیص‌دهنده نشت حافظه است. این گزینه تنها برای پیوند دادن (linking) فایل‌های اجرایی اهمیت دارد. فایل اجرایی در برابر کتابخانه‌ای پیوند می‌خورد که \f(CW\*(C`malloc\*(C'\fR و سایر توابع تخصیص حافظه را بازنویسی (override) می‌کند. برای جزئیات بیشتر به <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer\fR> مراجعه کنید. رفتار زمان اجرا را می‌توان با استفاده از متغیر محیطی \&\fBLSAN_OPTIONS\fR تحت تأثیر قرار داد. این گزینه نمی‌تواند با \fB\-fsanitize=thread\fR ترکیب شود. .IP \fB\-fsanitize=undefined\fR 4 .IX Item "-fsanitize=undefined" قابلیت UndefinedBehaviorSanitizer را فعال می‌کند که یک تشخیص‌دهنده سریع رفتار تعریف‌نشده (undefined behavior) است. محاسبات گوناگون برای تشخیص رفتار تعریف‌نشده در زمان اجرا ابزار دقیق‌سازی می‌شوند. برای جزئیات بیشتر به <\fBhttps://clang.llvm.org/docs/UndefinedBehaviorSanitizer.html\fR> مراجعه کنید. رفتار زمان اجرا را می‌توان با استفاده از متغیر محیطی \&\fBUBSAN_OPTIONS\fR تحت تأثیر قرار داد. زیرگزینه‌های فعلی عبارتند از: .RS 4 .IP \fB\-fsanitize=shift\fR 4 .IX Item "-fsanitize=shift" این گزینه بررسی تعریف‌نشده نبودن نتیجه عملیات شیفت را فعال می‌کند. توجه داشته باشید که تعریف دقیق رفتار تعریف‌نشده بین C و ++C و همچنین بین استاندارد ISO C90 و C99 و غیره کمی متفاوت است. این گزینه دارای دو زیرگزینه است: \fB\-fsanitize=shift\-base\fR و \&\fB\-fsanitize=shift\-exponent\fR. .IP \fB\-fsanitize=shift\-exponent\fR 4 .IX Item "-fsanitize=shift-exponent" این گزینه بررسی منفی نبودن آرگومان دوم یک عملیات شیفت و کوچک‌تر بودن آن از دقتِ آرگومان اولِ ارتقایافته (promoted) را فعال می‌کند. .IP \fB\-fsanitize=shift\-base\fR 4 .IX Item "-fsanitize=shift-base" اگر آرگومان دوم عملیات شیفت در محدوده مجاز باشد، بررسی می‌کند که نتیجه عملیات شیفت تعریف‌نشده نباشد. توجه داشته باشید که آنچه دقیقاً تعریف‌نشده در نظر گرفته می‌شود بین C و ++C و همچنین بین ISO C90 و C99 و غیره کمی متفاوت است. .IP \fB\-fsanitize=integer\-divide\-by\-zero\fR 4 .IX Item "-fsanitize=integer-divide-by-zero" تقسیم عدد صحیح بر صفر را تشخیص می‌دهد. .IP \fB\-fsanitize=unreachable\fR 4 .IX Item "-fsanitize=unreachable" با این گزینه، کامپایلر فراخوانی \f(CW\*(C`_\|_builtin_unreachable\*(C'\fR را به یک فراخوانی پیام تشخیصی تبدیل می‌کند. هنگام رسیدن به فراخوانی \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR، رفتار برنامه تعریف‌نشده است. .IP \fB\-fsanitize=vla\-bound\fR 4 .IX Item "-fsanitize=vla-bound" این گزینه به کامپایلر دستور می‌دهد تا مثبت بودن اندازه آرایه‌های با طول متغیر (variable length array) را بررسی کند. .IP \fB\-fsanitize=null\fR 4 .IX Item "-fsanitize=null" این گزینه بررسی اشاره‌گرها را فعال می‌کند. به‌ویژه، برنامه‌ای که با این گزینه ساخته شده باشد، در صورتی که بخواهد یک اشاره‌گر NULL را ارجاع‌زدایی (dereference) کند، یا اگر یک ارجاع (احتمالاً ارجاع rvalue) به یک اشاره‌گر NULL متصل شود، یا اگر متدی روی شیئی که توسط یک اشاره‌گر NULL اشاره شده فراخوانی گردد، یک پیام خطا صادر می‌کند. .IP \fB\-fsanitize=return\fR 4 .IX Item "-fsanitize=return" این گزینه بررسی عبارت return را فعال می‌کند. برنامه‌هایی که با این گزینه ساخته شده باشند، هنگامی که به پایان یک تابع غیر void برسند بدون آنکه مقداری را برگردانند، پیام خطایی صادر خواهند کرد. این گزینه فقط در ++C کار می‌کند. .IP \fB\-fsanitize=signed\-integer\-overflow\fR 4 .IX Item "-fsanitize=signed-integer-overflow" این گزینه بررسی سرریز اعداد صحیح علامت‌دار را فعال می‌کند. بررسی می‌شود که نتیجه عملیات \f(CW\*(C`+\*(C'\fR، \f(CW\*(C`*\*(C'\fR، و هر دو عملگر \f(CW\*(C`\-\*(C'\fR یکانی و دودویی در محاسبات علامت‌دار سرریز نکند. این گزینه همچنین تقسیم علامت‌دار \&\f(CW\*(C`INT_MIN / \-1\*(C'\fR را تشخیص می‌دهد. توجه داشته باشید که قواعد ارتقای اعداد صحیح باید در نظر گرفته شوند؛ یعنی مورد زیر یک سرریز به شمار نمی‌رود: .Sp .Vb 2 \& signed char a = SCHAR_MAX; \& a++; .Ve .IP \fB\-fsanitize=bounds\fR 4 .IX Item "-fsanitize=bounds" این گزینه ابزار دقیق‌سازی حدود آرایه‌ها را فعال می‌کند. دسترسی‌های گوناگون به خارج از محدوده تشخیص داده می‌شوند. اعضای آرایه انعطاف‌پذیر (flexible array members)، آرایه‌های شبیه عضو آرایه انعطاف‌پذیر، و مقداردهنده‌های متغیرهایی با فضای ذخیره‌سازی ایستا (static storage) ابزار دقیق‌سازی نمی‌شوند؛ به استثنای آرایه‌های شبیه عضو آرایه انعطاف‌پذیر که گزینه‌های \f(CW\*(C`\-fstrict\-flex\-arrays\*(C'\fR یا \f(CW\*(C`\-fstrict\-flex\-arrays=\*(C'\fR یا مشخصه‌های \f(CW\*(C`strict_flex_array\*(C'\fR تعیین کنند نباید مانند آرایه‌های شبیه عضو آرایه انعطاف‌پذیر با آن‌ها رفتار شود. .IP \fB\-fsanitize=bounds\-strict\fR 4 .IX Item "-fsanitize=bounds-strict" این گزینه ابزار دقیق‌سازی سخت‌گیرانه حدود آرایه‌ها را فعال می‌کند. بیشتر دسترسی‌های خارج از محدوده تشخیص داده می‌شوند، از جمله آرایه‌های شبیه عضو آرایه انعطاف‌پذیر. مقداردهنده‌های متغیرها با ذخیره‌سازی ایستا ابزار دقیق‌سازی نمی‌شوند. .IP \fB\-fsanitize=alignment\fR 4 .IX Item "-fsanitize=alignment" این گزینه بررسی ترازسازی (alignment) اشاره‌گرها را هنگام ارجاع‌زدایی از آن‌ها، یا هنگامی که یک ارجاع به هدفی با تراز ناکافی متصل می‌شود، یا زمانی که متد یا سازنده‌ای روی شیئی با تراز ناکافی فراخوانی می‌گردد، فعال می‌کند. .IP \fB\-fsanitize=object\-size\fR 4 .IX Item "-fsanitize=object-size" این گزینه ابزار دقیق‌سازی ارجاعات حافظه را با استفاده از تابع \&\f(CW\*(C`_\|_builtin_dynamic_object_size\*(C'\fR فعال می‌کند. دسترسی‌های گوناگونِ خارج از محدوده اشاره‌گر تشخیص داده می‌شوند. .IP \fB\-fsanitize=float\-divide\-by\-zero\fR 4 .IX Item "-fsanitize=float-divide-by-zero" تقسیم ممیز شناور بر صفر را تشخیص می‌دهد. برخلاف سایر گزینه‌های مشابه، \&\fB\-fsanitize=float\-divide\-by\-zero\fR توسط \&\fB\-fsanitize=undefined\fR فعال نمی‌شود، زیرا تقسیم ممیز شناور بر صفر می‌تواند روشی مجاز برای به‌دست آوردن بی‌نهایت‌ها (infinities) و NaNها باشد. .IP \fB\-fsanitize=float\-cast\-overflow\fR 4 .IX Item "-fsanitize=float-cast-overflow" این گزینه بررسی تبدیل نوع ممیز شناور به عدد صحیح را فعال می‌کند. بررسی می‌شود که نتیجه تبدیل سرریز نکند. برخلاف گزینه‌های مشابه دیگر، \fB\-fsanitize=float\-cast\-overflow\fR توسط \fB\-fsanitize=undefined\fR فعال نمی‌شود. این گزینه با فعال بودن استثناهای \f(CW\*(C`FE_INVALID\*(C'\fR به‌خوبی کار نمی‌کند. .IP \fB\-fsanitize=nonnull\-attribute\fR 4 .IX Item "-fsanitize=nonnull-attribute" این گزینه ابزار دقیق‌سازی فراخوانی‌ها را فعال می‌کند، و بررسی می‌کند که مقادیر null به آرگومان‌هایی که با مشخصه تابع \&\f(CW\*(C`nonnull\*(C'\fR به عنوان نیازمند مقدار غیر null علامت‌گذاری شده‌اند، پاس داده نشوند. .IP \fB\-fsanitize=returns\-nonnull\-attribute\fR 4 .IX Item "-fsanitize=returns-nonnull-attribute" این گزینه ابزار دقیق‌سازی عبارات return را در توابعی که با مشخصه تابع \f(CW\*(C`returns_nonnull\*(C'\fR علامت‌گذاری شده‌اند فعال می‌کند، تا بازگرداندن مقادیر null از چنین توابعی تشخیص داده شود. .IP \fB\-fsanitize=bool\fR 4 .IX Item "-fsanitize=bool" این گزینه ابزار دقیق‌سازی بارگذاری‌ها از نوع bool را فعال می‌کند. اگر مقداری غیر از 0 یا 1 بارگذاری شود، یک خطای زمان اجرا صادر می‌گردد. .IP \fB\-fsanitize=enum\fR 4 .IX Item "-fsanitize=enum" این گزینه ابزار دقیق‌سازی بارگذاری‌ها از یک نوع enum را فعال می‌کند. اگر مقداری خارج از محدوده مقادیر معتبر نوع enum بارگذاری شود، یک خطای زمان اجرا صادر می‌گردد. .IP \fB\-fsanitize=vptr\fR 4 .IX Item "-fsanitize=vptr" این گزینه ابزار دقیق‌سازی فراخوانی توابع عضو ++C، دسترسی‌های به عضو و برخی تبدیل‌ها میان اشاره‌گرهای کلاس‌های پایه و مشتق‌شده را فعال می‌کند، تا بررسی شود که شیء ارجاع‌شده دارای نوع پویای (dynamic type) صحیحی است..IP \fB\-fsanitize=pointer\-overflow\fR 4 .IX Item "-fsanitize=pointer-overflow" این گزینه ابزارگذاری محاسبات اشاره‌گر را فعال می‌کند. اگر در محاسبات اشاره‌گر سرریزی رخ دهد، یک خطای زمان اجرا صادر می‌شود. .IP \fB\-fsanitize=builtin\fR 4 .IX Item "-fsanitize=builtin" این گزینه ابزارگذاری آرگومان‌های توابع توکار (builtin) منتخب را فعال می‌کند. اگر مقدار نامعتبری به چنین آرگومان‌هایی ارسال شود، یک خطای زمان اجرا صادر می‌شود. برای نمونه ارسال مقدار 0 به‌عنوان آرگومان به \f(CW\*(C`_\|_builtin_ctz\*(C'\fR یا \f(CW\*(C`_\|_builtin_clz\*(C'\fR رفتار تعریف‌نشده (undefined behavior) ایجاد می‌کند و توسط این گزینه تشخیص داده می‌شود. .RE .RS 4 .Sp توجه داشته باشید که سنیتایزرها تمایل دارند نرخ هشدارهای مثبت کاذب را افزایش دهند، به‌ویژه هشدارهای مربوط به \fB\-Wmaybe\-uninitialized\fR. توصیه می‌کنیم از ترکیب \fB\-Werror\fR و [استفاده از] سنیتایزرها خودداری کنید. .Sp در حالی که \fB\-ftrapv\fR باعث صدور تله‌ها (traps) برای سرریزهای علامت‌دار می‌شود، \&\fB\-fsanitize=undefined\fR یک پیام تشخیصی صادر می‌کند. این قابلیت در حال حاضر تنها برای خانواده زبان‌های C کار می‌کند. .RE .IP \fB\-fno\-sanitize=all\fR 4 .IX Item "-fno-sanitize=all" این گزینه تمام سنیتایزرهایی را که پیش‌تر فعال شده‌اند، غیرفعال می‌کند. گزینهٔ \&\fB\-fsanitize=all\fR مجاز نیست، چرا که برخی از سنیتایزرها را نمی‌توان هم‌زمان با یکدیگر استفاده کرد. .IP \fB\-fasan\-shadow\-offset=\fR\fInumber\fR 4 .IX Item "-fasan-shadow-offset=number" این گزینه GCC را وادار می‌کند تا از آفست سایه (shadow offset) سفارشی در بررسی‌های AddressSanitizer استفاده کند. این گزینه برای آزمایش طرح‌بندی‌های مختلف حافظه سایه در Kernel AddressSanitizer کاربردی است. .IP \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...\fR 4 .IX Item "-fsanitize-sections=s1,s2,..." متغیرهای سراسری را در بخش‌های (sections) سفارشی انتخاب‌شده پالایش می‌کند. \fIsi\fR ممکن است شامل نویسه‌های عام (wildcards) باشد. .IP \fB\-fsanitize\-recover\fR[\fB=\fR\fIopts\fR] 4 .IX Item "-fsanitize-recover[=opts]" گزینهٔ \&\fB\-fsanitize\-recover=\fR حالت بازیابی از خطا را برای سنیتایزرهای ذکرشده در فهرستِ جداشده با ویرگولِ \fIopts\fR کنترل می‌کند. فعال‌سازی این گزینه برای یک جزء سنیتایزر سبب می‌شود تا برنامه تلاش کند به اجرای خود ادامه دهد، گویی هیچ خطایی رخ نداده است. این بدان معناست که در یک بار اجرای برنامه، چندین خطای زمان اجرا می‌توانند گزارش شوند، و کد خروج برنامه حتی با وجود گزارش خطاها ممکن است نشان‌دهنده موفقیت باشد. گزینهٔ \fB\-fno\-sanitize\-recover=\fR می‌تواند برای تغییر این رفتار استفاده شود: فقط نخستین خطای شناسایی‌شده گزارش می‌شود و سپس برنامه با یک کد خروج غیرصفر خارج می‌گردد. .Sp در حال حاضر این ویژگی فقط برای \fB\-fsanitize=undefined\fR (و زیرگزینه‌های آن به‌جز \fB\-fsanitize=unreachable\fR و \fB\-fsanitize=return\fR)، \&\fB\-fsanitize=float\-cast\-overflow\fR، \fB\-fsanitize=float\-divide\-by\-zero\fR، \&\fB\-fsanitize=bounds\-strict\fR، \&\fB\-fsanitize=kernel\-address\fR و \fB\-fsanitize=address\fR کار می‌کند. برای این سنیتایزرها بازیابی از خطا به‌طور پیش‌فرض فعال است، به‌جز \fB\-fsanitize=address\fR که این ویژگی برای آن آزمایشی است. گزینه‌های \&\fB\-fsanitize\-recover=all\fR و \fB\-fno\-sanitize\-recover=all\fR نیز پذیرفته می‌شوند؛ اولی بازیابی را برای همه سنیتایزرهای پشتیبانی‌کننده فعال می‌کند، و دومی بازیابی را برای تمام سنیتایزرهای پشتیبانی‌کننده غیرفعال می‌سازد. .Sp حتی اگر حالت بازیابی در سمت کامپایلر فعال باشد، باید در سمت کتابخانه زمان اجرا نیز فعال شده باشد، در غیر این صورت شکست‌ها همچنان مهلک (fatal) خواهند بود. پیش‌فرض کتابخانه زمان اجرا برای ThreadSanitizer و UndefinedBehaviorSanitizer برابر با \f(CW\*(C`halt_on_error=0\*(C'\fR است، در حالی که مقدار پیش‌فرض برای AddressSanitizer برابر با \f(CW\*(C`halt_on_error=1\*(C'\fR می‌باشد. این مقدار را می‌توان با تنظیم پرچم \f(CW\*(C`halt_on_error\*(C'\fR در متغیر محیطی متناظر بازنویسی کرد. .Sp نحو بدون پارامتر صریح \fIopts\fR منسوخ شده است. این معادل مشخص کردن فهرستی از \fIopts\fR به این صورت است: .Sp .Vb 1 \& undefined,float\-cast\-overflow,float\-divide\-by\-zero,bounds\-strict .Ve .IP \fB\-fsanitize\-address\-use\-after\-scope\fR 4 .IX Item "-fsanitize-address-use-after-scope" پالایش متغیرهای محلی را برای تشخیص باگ‌های استفاده پس از پایان حوزه (use\-after\-scope) فعال می‌کند. این گزینه \fB\-fstack\-reuse\fR را روی \fBnone\fR تنظیم می‌کند. .IP \fB\-fsanitize\-trap\fR[\fB=\fR\fIopts\fR] 4 .IX Item "-fsanitize-trap[=opts]" گزینهٔ \fB\-fsanitize\-trap=\fR به کامپایلر دستور می‌دهد تا برای سنیتایزرهای ذکرشده در فهرست جداشده با ویرگولِ \fIopts\fR، رفتار تعریف‌نشده را به جای یک روال کتابخانهٔ \f(CW\*(C`libubsan\*(C'\fR، با استفاده از \f(CW\*(C`_\|_builtin_trap\*(C'\fR گزارش کند. اگر این گزینه برای سنیتایزر خاصی فعال باشد، بر \fB\-fsanitizer\-recover=\fR برای آن سنیتایزر اولویت دارد؛ \f(CW\*(C`_\|_builtin_trap\*(C'\fR تولید خواهد شد و صرف‌نظر از اینکه بازیابی با \fB\-fsanitize\-recover=\fR فعال یا غیرفعال باشد، مهلک خواهد بود. .Sp مزیت این روش آن است که به کتابخانهٔ \f(CW\*(C`libubsan\*(C'\fR نیازی نیست و پیوند داده نمی‌شود، بنابراین حتی در محیط‌های مستقل (freestanding) نیز قابل استفاده است. .Sp در حال حاضر این ویژگی با \fB\-fsanitize=undefined\fR (و زیرگزینه‌های آن به‌جز \fB\-fsanitize=vptr\fR)، \fB\-fsanitize=float\-cast\-overflow\fR، \&\fB\-fsanitize=float\-divide\-by\-zero\fR و \&\fB\-fsanitize=bounds\-strict\fR کار می‌کند. مقدار \f(CW\*(C`\-fsanitize\-trap=all\*(C'\fR را نیز می‌توان مشخص کرد، که آن را برای زیرگزینه‌های \f(CW\*(C`undefined\*(C'\fR، \&\fB\-fsanitize=float\-cast\-overflow\fR، \&\fB\-fsanitize=float\-divide\-by\-zero\fR و \&\fB\-fsanitize=bounds\-strict\fR فعال می‌کند. اگر \f(CW\*(C`\-fsanitize\-trap=undefined\*(C'\fR یا \f(CW\*(C`\-fsanitize\-trap=all\*(C'\fR استفاده شود و \f(CW\*(C`\-fsanitize=vptr\*(C'\fR در خط فرمان فعال باشد، ابزارگذاری در سکوت نادیده گرفته می‌شود چرا که این ابزارگذاری همواره به پشتیبانی \&\f(CW\*(C`libubsan\*(C'\fR نیاز دارد؛ گزینهٔ \fB\-fsanitize\-trap=vptr\fR مجاز نیست. .IP \fB\-fsanitize\-undefined\-trap\-on\-error\fR 4 .IX Item "-fsanitize-undefined-trap-on-error" گزینهٔ \fB\-fsanitize\-undefined\-trap\-on\-error\fR معادلِ منسوخ‌شدهٔ \fB\-fsanitize\-trap=all\fR است. .IP \fB\-fsanitize\-coverage=trace\-pc\fR 4 .IX Item "-fsanitize-coverage=trace-pc" ابزارگذاری کد برای آزمون تصادفی هدایت‌شده با پوشش (coverage\-guided fuzzing) را فعال می‌کند. یک فراخوانی به \f(CW\*(C`_\|_sanitizer_cov_trace_pc\*(C'\fR را درون هر بلوک پایه درج می‌کند. .IP \fB\-fsanitize\-coverage=trace\-cmp\fR 4 .IX Item "-fsanitize-coverage=trace-cmp" ابزارگذاری کد برای آزمون تصادفی هدایت‌شده با جریان داده (dataflow guided fuzzing) را فعال می‌کند. یک فراخوانی به \f(CW\*(C`_\|_sanitizer_cov_trace_cmp1\*(C'\fR، \&\f(CW\*(C`_\|_sanitizer_cov_trace_cmp2\*(C'\fR، \f(CW\*(C`_\|_sanitizer_cov_trace_cmp4\*(C'\fR یا \&\f(CW\*(C`_\|_sanitizer_cov_trace_cmp8\*(C'\fR برای مقایسهٔ اعداد صحیح با هر دو عملوند متغیر؛ یا \f(CW\*(C`_\|_sanitizer_cov_trace_const_cmp1\*(C'\fR، \&\f(CW\*(C`_\|_sanitizer_cov_trace_const_cmp2\*(C'\fR، \&\f(CW\*(C`_\|_sanitizer_cov_trace_const_cmp4\*(C'\fR یا \&\f(CW\*(C`_\|_sanitizer_cov_trace_const_cmp8\*(C'\fR برای مقایسهٔ اعداد صحیح با یک عملوند ثابت؛ \f(CW\*(C`_\|_sanitizer_cov_trace_cmpf\*(C'\fR یا \&\f(CW\*(C`_\|_sanitizer_cov_trace_cmpd\*(C'\fR برای مقایسه‌های float یا double؛ و \&\f(CW\*(C`_\|_sanitizer_cov_trace_switch\*(C'\fR برای عبارت‌های switch درج می‌کند. .IP \fB\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR|\fBcheck\fR] 4 .IX Item "-fcf-protection=[full|branch|return|none|check]" .PD 0 .IP \fB\-fcf\-protection\fR 4 .IX Item "-fcf-protection" .PD ابزارگذاری کد را برای افزایش امنیت برنامه از طریق بررسی معتبر بودن آدرس‌های مقصد دستورالعمل‌های انتقال جریان کنترل (مانند فراخوانی غیرمستقیم تابع، بازگشت از تابع، و پرش غیرمستقیم) فعال می‌کند. این کار مانع از انحراف جریان کنترل به یک مقصد غیرمنتظره می‌شود و هدف آن محافظت در برابر تهدیداتی چون برنامه‌نویسی مبتنی بر بازگشت (ROP) و به‌طور مشابه برنامه‌نویسی مبتنی بر call/jmp (یا همان COP/JOP) است. .Sp کلمات کلیدی \fB\-fcf\-protection=\fR به صورت زیر تفسیر می‌شوند. .Sp مقدار \f(CW\*(C`branch\*(C'\fR به کامپایلر دستور می‌دهد تا بررسی اعتبار انتقال جریان کنترل را در نقطهٔ دستورالعمل‌های انشعاب غیرمستقیم، یعنی دستورالعمل‌های call/jmp پیاده‌سازی کند. .Sp مقدار \f(CW\*(C`return\*(C'\fR بررسی اعتبار را در نقطهٔ بازگشت از یک تابع پیاده‌سازی می‌کند. .Sp مقدار \f(CW\*(C`full\*(C'\fR نام مستعاری برای مشخص کردن همزمان هر دو مقدار \&\f(CW\*(C`branch\*(C'\fR و \f(CW\*(C`return\*(C'\fR است. .Sp مقدار \f(CW\*(C`check\*(C'\fR برای پیوند نهایی به همراه بهینه‌سازی زمان پیوند (LTO) استفاده می‌شود. اگر فایل‌های شیء LTO با مقادیر مختلف \fB\-fcf\-protection\fR کامپایل شده باشند، یک خطا صادر می‌شود. مقدار \f(CW\*(C`check\*(C'\fR در زمان کامپایل نادیده گرفته می‌شود. .Sp مقدار \f(CW\*(C`none\*(C'\fR ابزارگذاری را غیرفعال می‌کند. .Sp گزینهٔ \&\fB\-fcf\-protection\fR نام مستعاری برای \fB\-fcf\-protection=full\fR است. برای لغو و بازنویسی گزینهٔ قبلی \fB\-fcf\-protection\fR در خط فرمان، ابتدا \fB\-fcf\-protection=none\fR و سپس \&\fB\-fcf\-protection=\fR\fIkind\fR را اضافه کنید. .Sp ماکروی \f(CW\*(C`_\|_CET_\|_\*(C'\fR هنگامی که \fB\-fcf\-protection\fR استفاده می‌شود تعریف می‌گردد. بیت اول \f(CW\*(C`_\|_CET_\|_\*(C'\fR برای مقدار \&\f(CW\*(C`branch\*(C'\fR روی 1 تنظیم می‌شود و بیت دوم \f(CW\*(C`_\|_CET_\|_\*(C'\fR برای مقدار \f(CW\*(C`return\*(C'\fR روی 1 تنظیم می‌گردد. .Sp همچنین می‌توانید از مشخصهٔ \f(CW\*(C`nocf_check\*(C'\fR برای تعیین توابع و فراخوانی‌هایی که باید از ابزارگذاری مستثنی شوند، استفاده کنید. .Sp در حال حاضر مقصد x86 GNU/Linux پیاده‌سازی مبتنی بر Intel Control\-flow Enforcement Technology (CET) را ارائه می‌دهد که برای پردازنده‌های i686 یا جدیدتر کار می‌کند. .IP \fB\-fharden\-compares\fR 4 .IX Item "-fharden-compares" برای هر آزمون منطقی که از بهینه‌سازی‌های gimple باقی می‌ماند و شرطی در یک انشعاب شرطی \fIنیست\fR (برای نمونه، شرط‌های بررسی‌شده برای جابه‌جایی‌های شرطی، یا برای ذخیره در متغیرهای دودویی/بولی)، کد اضافه‌ای برای محاسبه و راستی‌آزمایی شرط معکوس صادر می‌کند، و در صورت عدم تطابق نتایج، \f(CW\*(C`_\|_builtin_trap\*(C'\fR را فراخوانی می‌نماید. برای پوشش تمام عبارات شرطی، همراه با \fB\-fharden\-conditional\-branches\fR استفاده شود..IP \fB\-fharden\-conditional\-branches\fR 4 .IX Item "-fharden-conditional-branches" برای هر شاخه شرطی غیربرداری که از بهینه‌سازی‌های gimple باقی می‌ماند، کد اضافی برای محاسبه و اعتبارسنجی شرط معکوس درج می‌کند، و اگر نتیجه غیرمنتظره باشد، \f(CW\*(C`_\|_builtin_trap\*(C'\fR را فراخوانی می‌کند. برای پوشش تمام عبارات شرطی، همراه با \fB\-fharden\-compares\fR استفاده کنید. .IP \fB\-fharden\-control\-flow\-redundancy\fR 4 .IX Item "-fharden-control-flow-redundancy" کد اضافی برای تنظیم مقادیر بولی هنگام ورود به بلوک‌های پایه، و بررسی و تله‌گذاری (trap) در خروجی‌های تابع در صورتی که مقادیر بولی مسیر اجرایی سازگاری با گراف جریان کنترل تشکیل ندهند، تولید می‌کند. .Sp اعتبارسنجی قبل از بازگشت‌ها، قبل از فراخوانی‌های پایانی اجباری (زیر را ببینید) و به صورت اختیاری، قبل از خروج استثناها با \&\fB\-fhardcfr\-check\-exceptions\fR، قبل از فراخوانی‌های بازگشتی با \&\fB\-fhardcfr\-check\-returning\-calls\fR و قبل از فراخوانی‌های noreturn با \&\fB\-fhardcfr\-check\-noreturn\-calls\fR انجام می‌شود. گزینه‌های تنظیم \&\fB\-\-param hardcfr\-max\-blocks\fR و \fB\-\-param hardcfr\-max\-inline\-blocks\fR در دسترس هستند. .Sp بهینه‌سازی فراخوانی پایانی بسیار دیر رخ می‌دهد و نمی‌تواند بر افزونگی جریان کنترل اثر بگذارد، اما فراخوانی‌هایی که توسط فرانت‌اند زبان به عنوان فراخوانی پایانی اجباری نشانه‌گذاری شده‌اند، و هر فراخوانی که به اندازه کافی زود به عنوان فراخوانی پایانی بالقوه مشخص شده باشد نیز اعتبارسنجی را پیش از فراخوانی صادر خواهند کرد؛ البته این احتمالات صرفاً جنبه نظری دارند، چرا که این شرایط تنها هنگام استفاده از پلاگین‌های سفارشی کامپایلر ممکن است برآورده شوند. .IP \fB\-fhardcfr\-skip\-leaf\fR 4 .IX Item "-fhardcfr-skip-leaf" غیرفعال کردن \fB\-fharden\-control\-flow\-redundancy\fR در توابع برگی (leaf functions). .IP \fB\-fhardcfr\-check\-exceptions\fR 4 .IX Item "-fhardcfr-check-exceptions" هنگامی که \fB\-fharden\-control\-flow\-redundancy\fR فعال باشد، مسیر اجرای ثبت‌شده را در نقاط فرار استثنا در برابر گراف جریان کنترل بررسی می‌کند؛ گویی بدنه تابع درون یک گرداننده پاک‌سازی (cleanup handler) قرار گرفته که بررسی را انجام داده و استثنا را مجدداً پرتاب کرده است. این گزینه به‌طور پیش‌فرض فعال است؛ برای غیرفعال کردن آن از \fB\-fno\-hardcfr\-check\-exceptions\fR استفاده کنید. .IP \fB\-fhardcfr\-check\-returning\-calls\fR 4 .IX Item "-fhardcfr-check-returning-calls" هنگامی که \fB\-fharden\-control\-flow\-redundancy\fR فعال باشد، مسیر اجرای ثبت‌شده را در برابر گراف جریان کنترل، قبل از هر فراخوانی تابعی که بلافاصله با بازگشت نتیجه‌اش (در صورت وجود) دنبال می‌شود، بررسی می‌کند تا مانع بهینه‌سازی فراخوانی پایانی نشود، صرف‌نظر از اینکه در نهایت به فراخوانی پایانی بهینه‌سازی شود یا خیر. .Sp این گزینه به‌طور پیش‌فرض در هر زمانی که بهینه‌سازی‌های فراخوانی همزاد (sibling call) فعال باشند فعال است (گزینه \fB\-foptimize\-sibling\-calls\fR را ببینید)، اما می‌توان آن را صراحتاً، مستقل از بهینه‌سازی‌ها، فعال (یا با شکل نفی‌شده‌اش، غیرفعال) کرد. .IP \fB\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno\-xthrow\fR|\fBnothrow\fR|\fBnever\fR] 4 .IX Item "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]" هنگامی که \fB\-fharden\-control\-flow\-redundancy\fR فعال باشد، مسیر اجرای ثبت‌شده را در برابر گراف جریان کنترل قبل از فراخوانی‌های \&\f(CW\*(C`noreturn\*(C'\fR بررسی می‌کند؛ یا برای همه آن‌ها (\fBalways\fR)، یا مواردی که انتظار نمی‌رود کنترل را از طریق استثنا به فراخواننده بازگردانند (\fBno\-xthrow\fR، پیش‌فرض)، یا مواردی که ممکن است کنترل را از طریق استثنا نیز به فراخواننده بازنگردانند (\fBnothrow\fR)، یا هیچ‌یک از آن‌ها (\fBnever\fR). .Sp بررسی پیش از یک تابع \f(CW\*(C`noreturn\*(C'\fR که ممکن است کنترل را از طریق استثنا به فراخواننده بازگرداند، در صورتی که استثنا در فراخواننده گرفته شود (چه با گرداننده یا با پاک‌سازی)، ممکن است باعث بیش از یک بار انجام شدن بررسی شود. هنگامی که \fB\-fhardcfr\-check\-exceptions\fR نیز فعال باشد، کامپایلر از پیوند دادن فراخوانی \f(CW\*(C`noreturn\*(C'\fR با گرداننده پاک‌سازی افزوده‌شده به صورت ضمنی خودداری می‌کند، زیرا با بررسی انجام‌شده قبل از فراخوانی افزونه و زائد خواهد بود؛ اما گرداننده‌ها یا پاک‌سازی‌های دیگر در تابع، در صورت فعال شدن، مسیر اجرای ثبت‌شده را تغییر داده و با رسیدن به نقطه بازرسی دیگر مجدداً آن را بررسی می‌کنند. این نقطه بازرسی حتی ممکن است فراخوانی \f(CW\*(C`noreturn\*(C'\fR دیگری باشد، بنابراین بررسی ممکن است چند باره انجام شود. .Sp بهینه‌سازهای گوناگون ممکن است سبب شوند فراخوانی‌ها، حتی در صورت نبود ویژگی‌های متناظر، با \f(CW\*(C`noreturn\*(C'\fR و/یا \f(CW\*(C`nothrow\*(C'\fR نشانه‌گذاری شوند، که این امر می‌تواند بر جای‌گذاری بررسی‌ها پیش از فراخوانی و افزودن گرداننده‌های پاک‌سازی ضمنی برای آن‌ها اثر بگذارد. این غیرقابل‌پیش‌بینی بودن، در کنار این واقعیت که پرتاب و پرتاب مجدد مکرر استثناها عملاً به مثابه فراخوانی ضمنی توابع \f(CW\*(C`noreturn\*(C'\fR است، \fBno\-xthrow\fR را به مقدار پیش‌فرض این گزینه تبدیل کرده است: این گزینه از سازوکار \f(CW\*(C`noreturn\*(C'\fR تنها توابع داخلی مربوط به پرتاب (مجدد) استثناها را که تحت تأثیر این بهینه‌سازی‌ها نیستند مستثنی می‌کند. .IP \fB\-fhardened\fR 4 .IX Item "-fhardened" مجموعه‌ای از پرچم‌ها را برای C و C++ فعال می‌کند که امنیت کد تولیدشده را بدون تأثیر بر ABI آن ارتقا می‌دهند. پرچم‌های مشخصاً فعال‌شده ممکن است بین نسخه‌های اصلی GCC تغییر کنند، اما در حال حاضر عبارتند از: .Sp \&\fB\-D_FORTIFY_SOURCE=3 \&\-D_GLIBCXX_ASSERTIONS \&\-ftrivial\-auto\-var\-init=zero \&\-fPIE \-pie \-Wl,\-z,relro,\-z,now \&\-fstack\-protector\-strong \&\-fstack\-clash\-protection \&\-fcf\-protection=full\fR (تنها در x86 GNU/Linux)\fB \fR .Sp فهرست گزینه‌های فعال‌شده به دست \fB\-fhardened\fR را می‌توان با استفاده از گزینه \fB\-\-help=hardened\fR به دست آورد. .Sp هنگامی که glibc سیستم قدیمی‌تر از نسخه 2.35 باشد، به‌جای آن از \fB\-D_FORTIFY_SOURCE=2\fR استفاده می‌شود. .Sp این گزینه برای استفاده در ساخت‌های توزیع نهایی (production) در نظر گرفته شده است، نه صرفاً در ساخت‌های اشکال‌زدایی (debug). .Sp در حال حاضر، \fB\-fhardened\fR تنها بر روی مقصدهای GNU/Linux پشتیبانی می‌شود. .Sp \&\fB\-fhardened\fR تنها گزینه‌ای را فعال می‌کند که پیش‌تر در خط فرمان تعیین نشده باشد. برای نمونه، \&\fB\-fhardened\fR \fB\-fstack\-protector\fR فقط \&\fB\-fstack\-protector\fR را فعال خواهد کرد، نه \&\fB\-fstack\-protector\-strong\fR را. .IP \fB\-fstack\-protector\fR 4 .IX Item "-fstack-protector" کد اضافی برای بررسی سرریزهای بافر، مانند حملات تخریب پشته (stack smashing) صادر می‌کند. این عمل با افزودن یک متغیر نگهبان (guard variable) به توابعی با اشیاء آسیب‌پذیر انجام می‌پذیرد. این توابع شامل مواردی هستند که \f(CW\*(C`alloca\*(C'\fR را فرامی‌خوانند، و توابعی با بافرهای بزرگ‌تر یا مساوی ۸ بایت. متغیرهای نگهبان هنگام ورود به تابع مقداردهی اولیه شده و هنگام خروج از آن بررسی می‌شوند. اگر بررسی نگهبان ناموفق باشد، پیامی چاپ شده و برنامه خاتمه می‌یابد. تنها متغیرهایی در نظر گرفته می‌شوند که واقعاً بر روی پشته تخصیص یافته باشند؛ متغیرهای حذف‌شده از طریق بهینه‌سازی یا متغیرهای تخصیص‌یافته در ثبات‌ها به حساب نمی‌آیند. .IP \fB\-fstack\-protector\-all\fR 4 .IX Item "-fstack-protector-all" مشابه \fB\-fstack\-protector\fR، با این تفاوت که تمام توابع محافظت می‌شوند. .IP \fB\-fstack\-protector\-strong\fR 4 .IX Item "-fstack-protector-strong" مشابه \fB\-fstack\-protector\fR، اما توابع بیشتری را برای محافظت دربرمی‌گیرد \-\-\- توابعی که دارای تعاریف آرایه محلی هستند، یا ارجاعاتی به آدرس‌های فریم محلی دارند. تنها متغیرهایی که واقعاً روی پشته تخصیص یافته‌اند در نظر گرفته می‌شوند؛ متغیرهای بهینه‌سازی‌شده یا متغیرهای تخصیص‌یافته در ثبات‌ها محاسبه نمی‌شوند. .IP \fB\-fstack\-protector\-explicit\fR 4 .IX Item "-fstack-protector-explicit" مشابه \fB\-fstack\-protector\fR، اما تنها از توابعی محافظت می‌کند که ویژگی \f(CW\*(C`stack_protect\*(C'\fR را دارند. .IP \fB\-fstack\-check\fR 4 .IX Item "-fstack-check" کدی برای حصول اطمینان از فراتر نرفتن از مرز پشته تولید می‌کند. در صورتی که در محیطی با چندین رشته (multithreaded) اجرا می‌شوید، باید این پرچم را تعیین کنید؛ اما در یک محیط تک‌رشته‌ای به ندرت به مشخص کردن آن نیاز خواهید داشت، چرا که سرریز پشته در صورت وجود تنها یک پشته تقریباً در تمامی سیستم‌ها به صورت خودکار شناسایی می‌شود. .Sp توجه داشته باشید که این سوییچ در عمل باعث انجام بررسی نمی‌شود؛ سیستم‌عامل یا زمان‌اجرای (runtime) زبان باید این کار را انجام دهد. این سوییچ کدی تولید می‌کند تا اطمینان یابد که آن‌ها گسترش پشته را می‌بینند. .Sp می‌توانید علاوه بر این یک پارامتر رشته‌ای نیز مشخص کنید: \fBno\fR به معنای عدم بررسی، \fBgeneric\fR به معنای اجبار به استفاده از بررسی سبک قدیمی، و \&\fBspecific\fR به معنای استفاده از بهترین شیوه بررسی و معادل استفاده از \fB\-fstack\-check\fR خالی است. .Sp بررسی سبک قدیمی سازوکاری عمومی است که نیازی به پشتیبانی مقصد خاصی در کامپایلر ندارد، اما معایب زیر را به همراه دارد: .RS 4 .IP 1. 4 .IX Item "1." راهبرد تخصیص تغییریافته برای اشیاء بزرگ: در صورتی که اندازه آن‌ها از یک آستانه ثابت فراتر رود، همواره به صورت پویا تخصیص می‌یابند. توجه داشته باشید که این امر ممکن است معناشناسی برخی کدها را تغییر دهد. .IP 2. 4 .IX Item "2." محدودیت ثابت در اندازه فریم ایستای توابع: وقتی فریم تابعی خاص از این حد فراتر رود، بررسی پشته دیگر قابل اعتماد نیست و هشداری توسط کامپایلر صادر می‌شود. .IP 3. 4 .IX Item "3." ناکارآمدی: هم به دلیل راهبرد تخصیص تغییریافته و هم به دلیل پیاده‌سازی عمومی، کارایی کد دچار افت می‌شود. .RE .RS 4 .Sp توجه داشته باشید که بررسی سبک قدیمی پشته، در صورتی که هیچ پشتیبانی مقصدی در کامپایلر تعریف نشده باشد، به عنوان روش پشتیبان (fallback) برای \&\fBspecific\fR عمل می‌کند. .Sp \&\fB\-fstack\-check=\fR برای برآوردن نیازهای زبان Ada جهت تشخیص بازگشت‌های بی‌نهایت و سرریزهای پشته طراحی شده است. گزینه \fBspecific\fR انتخابی عالی هنگام کامپایل کدهای Ada به شمار می‌رود. این گزینه عموماً برای محافظت در برابر حملات stack\-clash کافی نیست. جهت محافظت در برابر این دسته از حملات، باید از \fB\-fstack\-clash\-protection\fR استفاده کنید. .RE .IP \fB\-fstack\-clash\-protection\fR 4 .IX Item "-fstack-clash-protection" کدی برای پیشگیری از حملات سبک برخورد پشته (stack clash) تولید می‌کند. با فعال‌سازی این گزینه، کامپایلر در هر لحظه تنها یک صفحه از فضای پشته را تخصیص می‌دهد و هر صفحه بلافاصله پس از تخصیص مورد دسترسی قرار می‌گیرد. در نتیجه، از پرش تخصیص‌ها روی هرگونه صفحه محافظ پشته (guard page) ارائه‌شده از سوی سیستم‌عامل جلوگیری می‌شود. .Sp بیشتر مقصدهای کامپایل از حفاظت در برابر برخورد پشته به طور کامل پشتیبانی نمی‌کنند. با این حال، در این مقاصد نیز \fB\-fstack\-clash\-protection\fR از تخصیص‌های پویای پشته محافظت خواهد کرد. همچنین در صورتی که مقصد از \&\fB\-fstack\-check=specific\fR پشتیبانی کند، \fB\-fstack\-clash\-protection\fR ممکن است حفاظت محدودی برای تخصیص‌های ایستای پشته نیز ارائه دهد..IP \fB\-fstack\-limit\-register=\fR\fIreg\fR 4 .IX Item "-fstack-limit-register=reg" .PD 0 .IP \fB\-fstack\-limit\-symbol=\fR\fIsym\fR 4 .IX Item "-fstack-limit-symbol=sym" .IP \fB\-fno\-stack\-limit\fR 4 .IX Item "-fno-stack-limit" .PD کدی تولید می‌کند تا اطمینان حاصل شود پشته فراتر از یک مقدار معین، خواه مقدار یک ثبات باشد یا نشانی یک نماد، رشد نکند. اگر به پشتهٔ بزرگ‌تری نیاز باشد، یک سیگنال در زمان اجرا برانگیخته می‌شود. برای بیشتر معماری‌های هدف، این سیگنال پیش از تجاوز پشته از مرز ارسال می‌شود؛ بنابراین امکان گرفتن سیگنال بدون اتخاذ تمهیدات ویژه وجود دارد. .Sp به عنوان مثال، اگر پشته از نشانی مطلق \fB0x80000000\fR آغاز شده و رو به پایین رشد کند، می‌توانید از پرچم‌های \&\fB\-fstack\-limit\-symbol=_\|_stack_limit\fR و \&\fB\-Wl,\-\-defsym,_\|_stack_limit=0x7ffe0000\fR برای اعمال محدودیت پشتهٔ ۱۲۸ کیلوبایتی استفاده کنید. توجه داشته باشید که این کار ممکن است تنها با پیونددهنده گنو (GNU linker) کار کند. .Sp می‌توانید بررسی محدودیت پشته را به‌طور محلی با استفاده از مشخصهٔ تابع \&\f(CW\*(C`no_stack_limit\*(C'\fR نادیده بگیرید. .IP \fB\-fsplit\-stack\fR 4 .IX Item "-fsplit-stack" کدی تولید می‌کند تا پیش از سرریز شدن، پشته را به‌طور خودکار تقسیم کند. برنامهٔ حاصل دارای پشته‌ای ناپیوسته خواهد بود که تنها در صورتی ممکن است سرریز شود که برنامه دیگر قادر به تخصیص حافظه نباشد. این گزینه هنگام اجرای برنامه‌های چندنخی (threaded) بسیار مفید است، زیرا دیگر نیازی به محاسبه اندازهٔ مناسب پشته برای هر نخ نخواهد بود. این قابلیت در حال حاضر تنها برای معماری‌های x86 که گنو/لینوکس را اجرا می‌کنند پیاده‌سازی شده است. .Sp هنگامی که کد کامپایل‌شده با \fB\-fsplit\-stack\fR کدی را فراخوانی می‌کند که بدون \fB\-fsplit\-stack\fR کامپایل شده است، ممکن است فضای پشتهٔ چندانی برای اجرای کد دوم در دسترس نباشد. اگر کامپایل تمام کدها، از جمله کد کتابخانه‌ها، با \fB\-fsplit\-stack\fR مقدور نباشد، پیونددهنده می‌تواند این فراخوانی‌ها را به‌گونه‌ای اصلاح کند تا کدی که بدون \fB\-fsplit\-stack\fR کامپایل شده همواره پشتهٔ بزرگی در اختیار داشته باشد. پشتیبانی از این قابلیت در پیونددهنده gold در نسخه 2.21 و نسخه‌های بعدی GNU binutils پیاده‌سازی شده است. .IP \fB\-fstrub=disable\fR 4 .IX Item "-fstrub=disable" پاک‌سازی پشته (stack scrubbing) را به‌طور کامل غیرفعال کرده و هرگونه مشخصهٔ \f(CW\*(C`strub\*(C'\fR را نادیده می‌گیرد. ببینید: .IP \fB\-fstrub=strict\fR 4 .IX Item "-fstrub=strict" توابع به‌طور پیش‌فرض در حالت \f(CW\*(C`disabled\*(C'\fR برای \f(CW\*(C`strub\*(C'\fR قرار می‌گیرند، و این محدودیت را به‌طور \fBسخت‌گیرانه\fR اعمال می‌کند که تنها توابع مرتبط با حالت‌های \f(CW\*(C`callable\*(C'\fR در \f(CW\*(C`strub\*(C'\fR (شامل \f(CW\*(C`at\-calls\*(C'\fR، \f(CW\*(C`callable\*(C'\fR و \&\f(CW\*(C`always_inline\*(C'\fR \f(CW\*(C`internal\*(C'\fR) توسط توابعی با حالت‌های فعال‌شدهٔ \f(CW\*(C`strub\*(C'\fR (\f(CW\*(C`at\-calls\*(C'\fR و \f(CW\*(C`internal\*(C'\fR) فراخوانی‌پذیر (\f(CW\*(C`callable\*(C'\fR) باشند. .IP \fB\-fstrub=relaxed\fR 4 .IX Item "-fstrub=relaxed" تنظیمات پیش‌فرض پاک‌سازی پشته (\f(CW\*(C`strub\*(C'\fR) را بازمی‌گرداند؛ بدین معنا که \&\f(CW\*(C`strub\*(C'\fR تنها در صورتی فعال می‌شود که توسط مشخصه‌های \f(CW\*(C`strub\*(C'\fR مرتبط با توابع و انواع داده درخواست شده باشد. حالت آسان‌گیر (\f(CW\*(C`Relaxed\*(C'\fR) بدان معناست که بافت‌های strub تنها از فراخوانی توابعی بازداشته می‌شوند که صریحاً با حالت \f(CW\*(C`strub\*(C'\fR از نوع \f(CW\*(C`disabled\*(C'\fR مرتبط شده‌اند. این گزینه تنها برای بازنویسی و بی‌اثر کردن سایر گزینه‌های \fB\-fstrub=*\fR که پیش از آن در خط فرمان آمده‌اند مفید است. .IP \fB\-fstrub=at\-calls\fR 4 .IX Item "-fstrub=at-calls" حالت \f(CW\*(C`at\-calls\*(C'\fR را برای \f(CW\*(C`strub\*(C'\fR در صورت امکان‌پذیر بودن فعال می‌کند. کاربرد اصلی این گزینه برای آزمایش است. این گزینه سازوکار \f(CW\*(C`strub\*(C'\fR را در سناریوهایی که کاملاً محلی در یک واحد ترجمه (translation unit) هستند به کار می‌گیرد. این حالت \f(CW\*(C`strub\*(C'\fR رابط‌های توابع را تغییر می‌دهد، بنابراین هر تابعی که برای سایر واحدهای ترجمه مرئی باشد، یا نشانی آن گرفته شده باشد، تحت تأثیر این گزینه قرار \fIنخواهد گرفت\fR. گزینه‌های بهینه‌سازی نیز ممکن است بر امکان‌پذیری تأثیر بگذارند. برای جزئیات مربوط به نیازمندی‌های امکان‌پذیری و شرایط لازم، به مستندات مشخصهٔ \f(CW\*(C`strub\*(C'\fR مراجعه کنید. .IP \fB\-fstrub=internal\fR 4 .IX Item "-fstrub=internal" حالت \f(CW\*(C`internal\*(C'\fR را برای \f(CW\*(C`strub\*(C'\fR در صورت امکان‌پذیر بودن فعال می‌کند. کاربرد اصلی این گزینه برای آزمایش است. هدف این گزینه آزمودن دقیق بخش‌هایی از سازوکار \f(CW\*(C`strub\*(C'\fR است که حالت کم‌بازده‌تر اما حفظ‌کنندهٔ رابط (interface-preserving) \f(CW\*(C`strub\*(C'\fR را پیاده‌سازی می‌کنند. توابعی که تحت تأثیر این گزینه قرار نگیرند بسیار نادر هستند. .IP \fB\-fstrub=all\fR 4 .IX Item "-fstrub=all" یکی از حالت‌های \f(CW\*(C`strub\*(C'\fR را در صورت امکان‌پذیر بودن فعال می‌کند. هنگامی که هر دو حالت strub امکان‌پذیر باشند، \f(CW\*(C`at\-calls\*(C'\fR ترجیح داده می‌شود. گزینهٔ \fB\-fdump\-ipa\-strubm\fR مشخصه‌های تابعی را اضافه می‌کند که مشخص می‌سازد کدام حالت برای هر تابع انتخاب شده است. کاربرد اصلی این گزینه برای مقاصد آزمایشی و ارزیابی همه‌جانبهٔ سازوکار \f(CW\*(C`strub\*(C'\fR است. .IP \fB\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] 4 .IX Item "-fvtable-verify=[std|preinit|none]" این گزینه تنها هنگام کامپایل کد ++C در دسترس است. این گزینه ویژگی امنیتی‌ای را فعال (یا با استفاده از \fB\-fvtable\-verify=none\fR غیرفعال) می‌کند که در زمان اجرا، برای هر فراخوانی مجازی (virtual call)، بررسی می‌کند اشاره‌گر vtable که فراخوانی از طریق آن انجام می‌شود برای نوع شیء معتبر بوده و دستکاری یا بازنویسی نشده باشد. اگر یک اشاره‌گر vtable نامعتبر در زمان اجرا شناسایی شود، خطایی گزارش شده و اجرای برنامه بلافاصله متوقف می‌شود. .Sp این گزینه باعث می‌شود که ساختارهای دادهٔ زمان اجرا در هنگام شروع برنامه ساخته شوند، که برای اعتبارسنجی اشاره‌گرهای vtable استفاده می‌شوند. گزینه‌های \fBstd\fR و \fBpreinit\fR زمان ساخته شدن این ساختارهای داده را کنترل می‌کنند. در هر دو حالت، ساختارهای داده پیش از رسیدن اجرا به \f(CW\*(C`main\*(C'\fR ساخته می‌شوند. استفاده از \&\fB\-fvtable\-verify=std\fR باعث می‌شود ساختارهای داده پس از بارگذاری و مقداردهی اولیهٔ کتابخانه‌های مشترک ساخته شوند. \&\fB\-fvtable\-verify=preinit\fR باعث می‌شود آنها پیش از بارگذاری و مقداردهی اولیهٔ کتابخانه‌های مشترک ساخته شوند. .Sp اگر این گزینه چندین بار در خط فرمان با مقادیر متفاوتی مشخص شود، \fBnone\fR بالاترین اولویت را نسبت به هر دو مقدار \fBstd\fR و \&\fBpreinit\fR دارد؛ و \fBpreinit\fR بر \fBstd\fR اولویت خواهد داشت. .IP \fB\-fvtv\-debug\fR 4 .IX Item "-fvtv-debug" هنگامی که همراه با \fB\-fvtable\-verify=std\fR یا \&\fB\-fvtable\-verify=preinit\fR استفاده شود، باعث فراخوانی نسخه‌های اشکال‌زدایی توابع زمان اجرا برای قابلیت اعتبارسنجی vtable می‌شود. این پرچم همچنین باعث می‌شود کامپایلر اطلاعات مربوط به اشاره‌گرهای vtable کشف‌شده برای هر کلاس را ثبت کند. این اطلاعات در فایلی به نام \fIvtv_set_ptr_data.log\fR در دایرکتوری مشخص‌شده توسط متغیر محیطی \fBVTV_LOGS_DIR\fR (در صورت تعریف شدن) یا در غیر این صورت در دایرکتوری کاری فعلی نوشته می‌شود. .Sp نکته: این ویژگی داده‌ها را به فایل گزارش \fIالحاق می‌کند\fR (append). اگر به یک فایل گزارش تازه نیاز دارید، حتماً فایل‌های موجود را حذف کنید. .IP \fB\-fvtv\-counts\fR 4 .IX Item "-fvtv-counts" این یک پرچم اشکال‌زدایی است. هنگامی که همراه با \&\fB\-fvtable\-verify=std\fR یا \fB\-fvtable\-verify=preinit\fR استفاده شود، باعث می‌شود کامپایلر تعداد کل فراخوانی‌های مجازی که با آن‌ها مواجه می‌شود و تعداد اعتبارسنجی‌هایی را که درج می‌کند پیگیری کند. همچنین تعداد فراخوانی‌های توابع خاص کتابخانه زمان اجرا را که درج می‌کند می‌شمارد و این اطلاعات را برای هر واحد کامپایل ثبت می‌کند. کامپایلر این اطلاعات را در فایلی به نام \&\fIvtv_count_data.log\fR در دایرکتوری مشخص‌شده توسط متغیر محیطی \fBVTV_LOGS_DIR\fR (در صورت تعریف شدن) یا در غیر این صورت در دایرکتوری کاری فعلی می‌نویسد. این گزینه همچنین اندازهٔ مجموعه‌های اشاره‌گر vtable را برای هر کلاس شمارش کرده و این اطلاعات را در \fIvtv_class_set_sizes.log\fR در همان دایرکتوری ثبت می‌کند. .Sp نکته: این ویژگی داده‌ها را به فایل‌های گزارش \fIالحاق می‌کند\fR. برای داشتن فایل‌های گزارش تازه، حتماً فایل‌های موجود را حذف کنید. .IP \fB\-finstrument\-functions\fR 4 .IX Item "-finstrument-functions" فراخوانی‌های سنجش کد (instrumentation) را برای ورود و خروج به توابع تولید می‌کند. دقیقاً پس از ورود به تابع و درست پیش از خروج از آن، توابع پروفایل‌سازی زیر با نشانی تابع فعلی و محل فراخوانی (call site) آن فراخوانی می‌شوند. (در برخی پلتفرم‌ها، \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR فراتر از تابع فعلی کار نمی‌کند، بنابراین ممکن است اطلاعات محل فراخوانی در غیر این صورت در دسترس توابع پروفایل‌سازی نباشد.) .Sp .Vb 4 \& void _\|_cyg_profile_func_enter (void *this_fn, \& void *call_site); \& void _\|_cyg_profile_func_exit (void *this_fn, \& void *call_site); .Ve .Sp آرگومان اول، نشانی آغاز تابع فعلی است که می‌توان دقیقاً آن را در جدول نمادها جستجو کرد. .Sp این سنجش کد همچنین برای توابعی که به‌صورت درون‌خطی (inline) در توابع دیگر گسترش یافته‌اند نیز انجام می‌شود. فراخوانی‌های پروفایل‌سازی از نظر مفهومی نشان می‌دهند که تابع درون‌خطی در چه نقطه‌ای وارد و خارج شده است. این بدان معناست که نسخه‌های آدرس‌پذیر از چنین توابعی باید در دسترس باشند. اگر تمام استفاده‌های شما از یک تابع به‌صورت درون‌خطی گسترش یابد، این امر ممکن است منجر به افزایش اندازهٔ کد شود. اگر در کد C خود از \f(CW\*(C`extern inline\*(C'\fR استفاده کنید، باید یک نسخهٔ آدرس‌پذیر از چنین توابعی ارائه شود. (در هر صورت معمولاً وضعیت همین‌گونه است، اما اگر خوش‌شانس باشید و بهینه‌ساز همیشه توابع را درون‌خطی گسترش دهد، ممکن است بدون ارائه نسخه‌های ایستا هم مشکلی پیش نیامده باشد.) .Sp می‌توان مشخصهٔ \f(CW\*(C`no_instrument_function\*(C'\fR را به یک تابع اختصاص داد که در این صورت این سنجش کد برای آن انجام نمی‌شود. این کار می‌تواند برای مثال برای توابع پروفایل‌سازی ذکرشده در بالا، روال‌های وقفه با اولویت بالا، و هر تابعی که توابع پروفایل‌سازی را نمی‌توان به‌طور ایمن از درون آن فراخوانی کرد (احتمالاً گرداننده‌های سیگنال، در صورتی که روال‌های پروفایل‌سازی خروجی تولید کرده یا حافظه تخصیص دهند)، استفاده شود. .IP \fB\-finstrument\-functions\-once\fR 4 .IX Item "-finstrument-functions-once" این گزینه مشابه \fB\-finstrument\-functions\fR است، اما توابع پروفایل‌سازی تنها یک بار برای هر تابع سنجیده‌شده فراخوانی می‌شوند؛ بدین معنا که اولین تابع پروفایل‌سازی پس از نخستین ورود به تابع سنجیده‌شده فراخوانی می‌شود و دومین تابع پروفایل‌سازی پیش از خروج متناظر با این اولین ورود، فراخوانی می‌شود. .Sp تعریف «یک‌بار» (\f(CW\*(C`once\*(C'\fR) برای هدف این گزینه کمی مبهم است زیرا پیاده‌سازی در برابر رقابت داده‌ای (data race) محافظت نشده است. در نتیجه، پیاده‌سازی تنها تضمین می‌کند که توابع پروفایل‌سازی \fIحداقل\fR یک بار برای هر فرآیند و \fIحداکثر\fR یک بار برای هر نخ فراخوانی شوند، اما این فراخوانی‌ها همواره جفت هستند؛ بدین معنا که اگر نخی تابع اول را فراخوانی کند، تابع دوم را نیز فراخوانی خواهد کرد، مگر اینکه هرگز به نقطهٔ خروج از تابع سنجیده‌شده نرسد..IP \fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR 4 .IX Item "-finstrument-functions-exclude-file-list=file,file,..." فهرست توابعی را که از ابزارگذاری (instrumentation) مستثنی می‌شوند، تعیین می‌کند (توضیحات \fB\-finstrument\-functions\fR را ببینید). اگر فایلی که شامل تعریف یک تابع است با یکی از \fIfile\fRها مطابقت داشته باشد، آن تابع ابزارگذاری نمی‌شود. تطبیق بر روی زیررشته‌ها انجام می‌شود: اگر پارامتر \fIfile\fR زیررشته‌ای از نام فایل باشد، تطابق در نظر گرفته می‌شود. .Sp برای مثال: .Sp .Vb 1 \& \-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys .Ve .Sp هر تابع درون‌خطی (inline) تعریف‌شده در فایل‌هایی را که مسیر آن‌ها شامل \fI/bits/stl\fR یا \fIinclude/sys\fR باشد، مستثنی می‌کند. .Sp اگر به هر دلیلی می‌خواهید نویسهٔ \fB,\fR را در یکی از \&\fIsym\fRها بگنجانید، \fB,\fR را بنویسید. برای مثال، \&\fB\-finstrument\-functions\-exclude\-file\-list=\*(Aq,,tmp\*(Aq\fR (به علامت نقل‌قول تکی در اطراف گزینه دقت کنید). .IP \fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR 4 .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..." این گزینه مشابه \fB\-finstrument\-functions\-exclude\-file\-list\fR است، اما فهرست نام‌های توابعی را که باید از ابزارگذاری مستثنی شوند تعیین می‌کند. نام تابعی که باید تطبیق داده شود، نام قابل مشاهده برای کاربر است، مانند \f(CW\*(C`vector blah(const vector &)\*(C'\fR، نه نام درهم‌پیچیدهٔ داخلی (مانند \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR). تطبیق بر روی زیررشته‌ها انجام می‌شود: اگر پارامتر \fIsym\fR زیررشته‌ای از نام تابع باشد، تطابق در نظر گرفته می‌شود. برای شناسه‌های گسترش‌یافتهٔ C99 و C++، نام تابع باید در قالب UTF\-8 ارائه شود، نه با استفاده از نام‌های نویسهٔ فراگیر (universal character names). .IP \fB\-fpatchable\-function\-entry=\fR\fIN\fR\fB[,\fR\fIM\fR\fB]\fR 4 .IX Item "-fpatchable-function-entry=N[,M]" تعداد \fIN\fR دستور NOP را درست در ابتدای هر تابع تولید می‌کند، به‌طوری که نقطهٔ ورود تابع پیش از \fIM\fRاُمین NOP قرار می‌گیرد. اگر \fIM\fR حذف شود، مقدار پیش‌فرض آن \f(CW0\fR خواهد بود تا نقطهٔ ورود تابع دقیقاً به آدرس نخستین NOP اشاره کند. دستورهای NOP فضای اضافه‌ای را رزرو می‌کنند که در صورت قابل نوشتن بودن قطعه کد (code segment)، می‌تواند برای وصله‌زدن هرگونه ابزارگذاری دلخواه در زمان اجرا استفاده شود. مقدار فضا به‌طور غیرمستقیم از طریق تعداد NOPها قابل کنترل است؛ دستور NOP استفاده‌شده با دستور تولیدشده توسط رابط باطنی داخلی GCC به نام \f(CW\*(C`gen_nop\*(C'\fR مطابقت دارد. این رفتار مختص مقصد (target\-specific) است و ممکن است به گونهٔ معماری و/یا سایر گزینه‌های کامپایل نیز وابسته باشد. .Sp برای شناسایی در زمان اجرا، آدرس‌های آغازین این ناحیه‌ها که با ورودی‌های توابع مربوطه منهای \fIM\fR مطابقت دارند، علاوه بر این در بخش \f(CW\*(C`_\|_patchable_function_entries\*(C'\fR از باینری حاصل جمع‌آوری می‌شوند. .Sp توجه داشته باشید که مقدار \f(CW\*(C`_\|_attribute_\|_ ((patchable_function_entry (N,M)))\*(C'\fR نسبت به گزینهٔ خط فرمان \&\fB\-fpatchable\-function\-entry=N,M\fR اولویت دارد. از این ویژگی می‌توان برای افزایش اندازهٔ ناحیه یا حذف کامل آن در یک تابع منفرد استفاده کرد. اگر \f(CW\*(C`N=0\*(C'\fR باشد، هیچ مکان لایه‌گذاری (pad location) ثبت نمی‌شود. .Sp دستورهای NOP در آدرس ورود تابع \- و شاید بسته به \fIM\fR پیش از آن \- حتی قبل از پیش‌درآمد (prologue) درج می‌شوند. در PowerPC با ELFv2 ABI، برای تابعی با نقاط ورود دوگانه، نقطهٔ ورود محلی به‌طور پیش‌فرض همان آدرس ورود تابع است. برای تغییر این حالت، گزینهٔ \fB\-msplit\-patch\-nops\fR را ببینید. .Sp بیشینهٔ مقدار \fIN\fR و \fIM\fR برابر ۶۵۵۳۵ است. در PowerPC با ELFv2 ABI، برای تابعی با نقاط ورود دوگانه، مقادیر پشتیبانی‌شده برای \fIM\fR در صورت عدم استفاده از \fB\-msplit\-patch\-nops\fR برابر ۰، ۲، ۶ و ۱۴ هستند. .SS "گزینه‌های کنترل پیش‌پردازنده (Options Controlling the Preprocessor)" .IX Subsection "Options Controlling the Preprocessor" این گزینه‌ها پیش‌پردازندهٔ C را که پیش از کامپایل واقعی روی هر فایل مبدأ C اجرا می‌شود، کنترل می‌کنند. .PP اگر از گزینهٔ \fB\-E\fR استفاده کنید، هیچ کاری به‌جز پیش‌پردازش انجام نمی‌شود. برخی از این گزینه‌ها تنها در کنار \fB\-E\fR معنا دارند، چرا که باعث می‌شوند خروجی پیش‌پردازنده برای کامپایل واقعی نامناسب باشد. .PP علاوه بر گزینه‌های فهرست‌شده در اینجا، تعدادی گزینه برای کنترل مسیرهای جستجوی فایل‌های include وجود دارد که در بخش \fBDirectory Options\fR مستند شده‌اند. گزینه‌های کنترل هشدارهای پیش‌پردازنده در بخش \fBWarning Options\fR فهرست شده‌اند. .IP "\fB\-D\fR \fIname\fR" 4 .IX Item "-D name" نام \fIname\fR را به‌عنوان یک ماکرو با تعریف \f(CW1\fR از پیش تعریف می‌کند. .IP "\fB\-D\fR \fIname\fR\fB=\fR\fIdefinition\fR" 4 .IX Item "-D name=definition" محتوای \fIdefinition\fR نشانه‌گذاری (tokenize) شده و طوری پردازش می‌شود که گویی در فاز سوم ترجمه در یک دستور \fB#define\fR ظاهر شده است. به‌ویژه، تعریف با نویسه‌های خط‌جدیدِ تعبیه‌شده بریده (truncate) می‌شود. .Sp اگر پیش‌پردازنده را از یک شل یا برنامه‌ای شبیه شل فراخوانی می‌کنید، ممکن است لازم باشد از نحو نقل‌قول شل برای محافظت از نویسه‌هایی مانند فاصله که در نحو شل معنای خاصی دارند، استفاده کنید. .Sp اگر می‌خواهید یک ماکروی تابع‌گونه (function\-like) را در خط فرمان تعریف کنید، فهرست آرگومان‌های آن را درون پرانتز پیش از علامت مساوی (در صورت وجود) بنویسید. پرانتزها برای اکثر شل‌ها دارای معنی هستند، بنابراین باید گزینه را نقل‌قول کنید. در \fBsh\fR و \fBcsh\fR، ساختار \&\fB\-D\*(Aq\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB\*(Aq\fR کار می‌کند. .Sp گزینه‌های \fB\-D\fR و \fB\-U\fR به ترتیبی که در خط فرمان داده شده‌اند پردازش می‌شوند. تمام گزینه‌های \fB\-imacros\fR \fIfile\fR و \&\fB\-include\fR \fIfile\fR پس از همهٔ گزینه‌های \&\fB\-D\fR و \fB\-U\fR پردازش می‌شوند. .IP "\fB\-U\fR \fIname\fR" 4 .IX Item "-U name" هرگونه تعریف پیشین از \fIname\fR را، چه توکار باشد و چه با گزینهٔ \fB\-D\fR ارائه شده باشد، لغو می‌کند. .IP "\fB\-include\fR \fIfile\fR" 4 .IX Item "-include file" فایل \fIfile\fR را به‌گونه‌ای پردازش می‌کند که گویی \f(CW\*(C`#include "file"\*(C'\fR در نخستین خط فایل مبدأ اصلی آمده است. با این حال، نخستین دایرکتوری مورد جستجو برای یافتن \fIfile\fR، \fIبه‌جای\fR دایرکتوری حاوی فایل مبدأ اصلی، دایرکتوری کاری پیش‌پردازنده است. اگر در آنجا یافت نشود، طبق معمول در ادامهٔ زنجیرهٔ جستجوی \f(CW\*(C`#include "..."\*(C'\fR جستجو می‌شود. .Sp اگر چندین گزینهٔ \fB\-include\fR داده شود، فایل‌ها به همان ترتیبی که در خط فرمان آمده‌اند گنجانده (include) می‌شوند. .IP "\fB\-imacros\fR \fIfile\fR" 4 .IX Item "-imacros file" دقیقاً مانند \fB\-include\fR است، با این تفاوت که هر خروجی حاصل از پویش \fIfile\fR دور ریخته می‌شود. ماکروهایی که تعریف می‌کند همچنان تعریف‌شده باقی می‌مانند. این امر به شما امکان می‌دهد تا تمام ماکروهای یک سرآیند را بدون پردازش اعلان‌های آن به دست آورید. .Sp تمام فایل‌های مشخص‌شده با \fB\-imacros\fR پیش از همهٔ فایل‌های مشخص‌شده با \fB\-include\fR پردازش می‌شوند. .IP \fB\-undef\fR 4 .IX Item "-undef" هیچ‌یک از ماکروهای مخصوص سیستم یا مخصوص GCC را از پیش تعریف نمی‌کند. ماکروهای استانداردِ از پیش تعریف‌شده، همچنان تعریف‌شده باقی می‌مانند. .IP \fB\-pthread\fR 4 .IX Item "-pthread" ماکروهای اضافی مورد نیاز برای استفاده از کتابخانهٔ ریسه‌های پازیکس (POSIX threads) را تعریف می‌کند. باید از این گزینه به‌طور پیوسته هم برای کامپایل و هم برای پیوند (linking) استفاده کنید. این گزینه در مقصدهای GNU/Linux، بیشتر مشتقات دیگر یونیکس و همچنین در مقصدهای Cygwin و MinGW برای معماری x86 پشتیبانی می‌شود. .IP \fB\-M\fR 4 .IX Item "-M" به‌جای خروجی دادن نتیجهٔ پیش‌پردازش، قاعده‌ای مناسب برای \fBmake\fR خروجی می‌دهد که وابستگی‌های فایل مبدأ اصلی را توصیف می‌کند. پیش‌پردازنده یک قاعدهٔ \fBmake\fR شامل نام فایل شیء (object file) برای آن فایل مبدأ، یک دونقطه و نام تمام فایل‌های گنجانده‌شده (از جمله مواردی که از گزینه‌های خط فرمان \fB\-include\fR یا \&\fB\-imacros\fR می‌آیند) تولید می‌کند. .Sp مگر اینکه صراحتاً (با \fB\-MT\fR یا \fB\-MQ\fR) مشخص شده باشد، نام فایل شیء متشکل از نام فایل مبدأ است که پسوند آن با پسوند فایل شیء جایگزین شده و هرگونه بخش‌های دایرکتوری ابتدایی آن حذف شده است. اگر فایل‌های گنجانده‌شدهٔ زیادی وجود داشته باشد، قاعده با استفاده از \fB\e\fR\-خط‌جدید به چندین خط تقسیم می‌شود. این قاعده فاقد دستور اجرایی است. .Sp این گزینه خروجی اشکال‌زدایی پیش‌پردازنده، مانند \fB\-dM\fR را غیرفعال نمی‌کند. برای جلوگیری از تداخل چنین خروجی اشکال‌زدایی با قواعد وابستگی، باید فایل خروجی وابستگی را صراحتاً با \fB\-MF\fR مشخص کنید، یا از یک متغیر محیطی مانند \&\fBDEPENDENCIES_OUTPUT\fR استفاده نمایید. خروجی اشکال‌زدایی همچنان طبق معمول به جریان خروجی عادی فرستاده می‌شود. .Sp ارسال \fB\-M\fR به درایور مستلزم \fB\-E\fR است و با یک \fB\-w\fR ضمنی، هشدارها را فرو می‌نشاند (غیرفعال می‌کند). .IP \fB\-MM\fR 4 .IX Item "-MM" مانند \fB\-M\fR است، اما از ذکر فایل‌های سرآیندی که در دایرکتوری‌های سرآیند سیستم یافت می‌شوند و نیز فایل‌های سرآیندی که به‌طور مستقیم یا غیرمستقیم از چنین سرآیندی گنجانده شده‌اند، خودداری می‌کند. .Sp این بدان معناست که انتخاب قلاب‌ها (قوسک‌ها) یا نقل‌قول دوتایی در یک دستور \&\fB#include\fR به‌خودی‌خود تعیین نمی‌کند که آیا آن سرآیند در خروجی وابستگی \fB\-MM\fR ظاهر می‌شود یا خیر. .IP "\fB\-MF\fR \fIfile\fR" 4 .IX Item "-MF file" هنگامی که همراه با \fB\-M\fR یا \fB\-MM\fR استفاده شود، فایلی را برای نوشتن وابستگی‌ها در آن مشخص می‌کند. اگر هیچ سوئیچ \fB\-MF\fR داده نشود، پیش‌پردازنده قواعد را به همان جایی ارسال می‌کند که خروجی پیش‌پردازش‌شده را ارسال می‌کرد. .Sp هنگامی که با گزینه‌های درایور \fB\-MD\fR یا \fB\-MMD\fR استفاده شود، \&\fB\-MF\fR فایل پیش‌فرض خروجی وابستگی را بازنویسی (override) می‌کند. .Sp اگر \fIfile\fR برابر \fI\-\fR باشد، وابستگی‌ها در \fIstdout\fR نوشته می‌شوند..IP \fB\-MG\fR 4 .IX Item "-MG" در ترکیب با گزینه‌ای مانند \fB\-M\fR که درخواست ایجاد وابستگی دارد، \fB\-MG\fR فرض می‌کند فایل‌های هدر یافت‌نشده، فایل‌های تولیدشده هستند و آن‌ها را بدون ایجاد خطا به فهرست وابستگی‌ها اضافه می‌کند. نام فایل وابستگی مستقیماً از دستورالعمل \&\f(CW\*(C`#include\*(C'\fR بدون افزودن هیچ مسیری به ابتدای آن برداشته می‌شود. \fB\-MG\fR همچنین خروجی پیش‌پردازش‌شده را متوقف می‌کند، زیرا نبود یک فایل هدر آن را بی‌فایده می‌سازد. .Sp این ویژگی در به‌روزرسانی خودکار makefileها استفاده می‌شود. .IP \fB\-Mno\-modules\fR 4 .IX Item "-Mno-modules" غیرفعال‌سازی ایجاد وابستگی برای رابط‌های ماژول کامپایل‌شده. .IP \fB\-MP\fR 4 .IX Item "-MP" این گزینه به CPP دستور می‌دهد تا برای هر وابستگی غیر از فایل اصلی، یک هدف ساختگی (phony target) اضافه کند که باعث می‌شود هر کدام به هیچ‌چیز وابسته نباشند. این قواعد ساختگی خطاهایی را دور می‌زنند که \fBmake\fR در صورت حذف فایل‌های هدر بدون به‌روزرسانی متناظر در \fIMakefile\fR صادر می‌کند. .Sp این یک نمونه خروجی معمول است: .Sp .Vb 1 \& test.o: test.c test.h \& \& test.h: .Ve .IP "\fB\-MT\fR \fItarget\fR" 4 .IX Item "-MT target" تغییر هدف قاعده‌ای که در ایجاد وابستگی تولید می‌شود. به‌طور پیش‌فرض CPP نام فایل ورودی اصلی را می‌گیرد، هرگونه بخش دایرکتوری و پسوند فایل مانند \fB.c\fR را حذف می‌کند، و پسوند شیء (object) معمول پلتفرم را الحاق می‌نماید. نتیجه، هدف نهایی خواهد بود. .Sp گزینهٔ \fB\-MT\fR هدف را دقیقاً همان رشته‌ای قرار می‌دهد که مشخص می‌کنید. اگر چندین هدف می‌خواهید، می‌توانید آن‌ها را به‌عنوان یک آرگومان واحد به \fB\-MT\fR بدهید، یا از چند گزینهٔ \fB\-MT\fR استفاده کنید. .Sp برای مثال، \fB\-MT\ \*(Aq$(objpfx)foo.o\*(Aq\fR ممکن است چنین خروجی دهد: .Sp .Vb 1 \& $(objpfx)foo.o: foo.c .Ve .IP "\fB\-MQ\fR \fItarget\fR" 4 .IX Item "-MQ target" مشابه \fB\-MT\fR است، اما هر نویسه‌ای را که برای Make ویژه باشد نقل‌قول (quote) می‌کند. \fB\-MQ\ \*(Aq$(objpfx)foo.o\*(Aq\fR این خروجی را می‌دهد: .Sp .Vb 1 \& $$(objpfx)foo.o: foo.c .Ve .Sp هدف پیش‌فرض به‌طور خودکار نقل‌قول می‌شود، گویی با \&\fB\-MQ\fR مشخص شده باشد. .IP \fB\-MD\fR 4 .IX Item "-MD" گزینهٔ \&\fB\-MD\fR معادل \fB\-M \-MF\fR \fIfile\fR است، با این تفاوت که \&\fB\-E\fR به‌طور ضمنی فعال نمی‌شود. گرداننده بر این اساس که آیا گزینهٔ \fB\-o\fR داده شده است یا خیر، مقدار \fIfile\fR را تعیین می‌کند. اگر داده شده باشد، گرداننده از آرگومان آن اما با پسوند \fI.d\fR استفاده می‌کند؛ در غیر این صورت نام فایل ورودی را گرفته، مؤلفه‌های دایرکتوری و پسوند را حذف کرده، و پسوند \fI.d\fR را اعمال می‌کند. .Sp اگر \fB\-MD\fR در ترکیب با \fB\-E\fR استفاده شود، هر سوییچ \&\fB\-o\fR برای تعیین فایل خروجی وابستگی در نظر گرفته می‌شود، اما اگر بدون \fB\-E\fR استفاده شود، هر \fB\-o\fR به عنوان مشخص‌کنندهٔ فایل شیء هدف شناخته می‌شود. .Sp از آنجا که \fB\-E\fR ضمنی نیست، \fB\-MD\fR می‌تواند برای تولید یک فایل خروجی وابستگی به‌عنوان یک اثر جانبی از فرایند کامپایل استفاده شود. .IP \fB\-MMD\fR 4 .IX Item "-MMD" مانند \fB\-MD\fR است، با این تفاوت که فقط فایل‌های هدر کاربر را ذکر می‌کند، نه فایل‌های هدر سیستم را. .IP \fB\-fpreprocessed\fR 4 .IX Item "-fpreprocessed" به پیش‌پردازنده اعلام می‌کند که فایل ورودی قبلاً پیش‌پردازش شده است. این گزینه مواردی مانند بسط ماکروها، تبدیل trigraph، الحاق خطوط جدید فرار داده‌شده، و پردازش اکثر دستورالعمل‌ها را متوقف می‌کند. پیش‌پردازنده همچنان توضیح‌ها (کامنت‌ها) را شناسایی و حذف می‌کند، به طوری که می‌توانید فایلی را که با \fB\-C\fR پیش‌پردازش شده است بدون مشکل به کامپایلر ارسال کنید. در این حالت، پیش‌پردازندهٔ یکپارچه چیزی فراتر از یک توکن‌ساز (tokenizer) برای بخش‌های جلویی (front ends) نیست. .Sp در صورتی که فایل ورودی یکی از پسوندهای \fB.i\fR، \fB.ii\fR یا \fB.mi\fR را داشته باشد، \&\fB\-fpreprocessed\fR به‌طور ضمنی فعال است. این‌ها همان پسوندهایی هستند که GCC برای فایل‌های پیش‌پردازش‌شده حاصل از \&\fB\-save\-temps\fR استفاده می‌کند. .IP \fB\-fdirectives\-only\fR 4 .IX Item "-fdirectives-only" هنگام پیش‌پردازش، دستورالعمل‌ها را پردازش می‌کند، اما ماکروها را بسط نمی‌دهد. .Sp رفتار این گزینه به گزینه‌های \fB\-E\fR و \fB\-fpreprocessed\fR بستگی دارد. .Sp با \fB\-E\fR، پیش‌پردازش به پردازش دستورالعمل‌هایی مانند \f(CW\*(C`#define\*(C'\fR، \f(CW\*(C`#ifdef\*(C'\fR و \f(CW\*(C`#error\*(C'\fR محدود می‌شود. سایر عملیات‌های پیش‌پردازنده مانند بسط ماکرو و تبدیل trigraph انجام نمی‌شوند. علاوه بر این، گزینهٔ \fB\-dD\fR به‌طور ضمنی فعال می‌شود. .Sp با \fB\-fpreprocessed\fR، تعریف پیش‌فرض ماکروهای خط فرمان و اکثر ماکروهای توکار (builtin) غیرفعال می‌شود. ماکروهایی مانند \f(CW\*(C`_\|_LINE_\|_\*(C'\fR که وابسته به متن هستند، به‌طور معمول پردازش می‌شوند. این امر کامپایل فایل‌هایی را ممکن می‌سازد که قبلاً با \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR پیش‌پردازش شده‌اند. .Sp با فعال بودن هر دو گزینهٔ \fB\-E\fR و \fB\-fpreprocessed\fR، قواعد مربوط به \&\fB\-fpreprocessed\fR اولویت دارند. این کار پیش‌پردازش کامل فایل‌هایی را فراهم می‌کند که پیش‌تر با \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR پیش‌پردازش شده‌اند. .IP \fB\-fdollars\-in\-identifiers\fR 4 .IX Item "-fdollars-in-identifiers" پذیرش \fB$\fR در شناسه‌ها. .IP \fB\-fextended\-identifiers\fR 4 .IX Item "-fextended-identifiers" پذیرش نام‌های نویسهٔ فراگیر (universal character names) و نویسه‌های گسترش‌یافته در شناسه‌ها. این گزینه به‌طور پیش‌فرض برای C99 (و نسخه‌های بعدی استاندارد C) و ++C فعال است. .IP \fB\-fno\-canonical\-system\-headers\fR 4 .IX Item "-fno-canonical-system-headers" هنگام پیش‌پردازش، مسیرهای هدر سیستم را با متعارف‌سازی (canonicalization) کوتاه نکن. .IP \fB\-fmax\-include\-depth=\fR\fIdepth\fR 4 .IX Item "-fmax-include-depth=depth" تعیین حداکثر عمق دستورهای تو در توی #include. مقدار پیش‌فرض ۲۰۰ است. .IP \fB\-fsearch\-include\-path\fR[\fB=\fR\fIkind\fR] 4 .IX Item "-fsearch-include-path[=kind]" جستجوی فایل‌های ورودی در مسیر #include، نه فقط در دایرکتوری جاری. این به‌ویژه با ماژول‌های C++20 کاربردی است، که در آن‌ها هر دو واحد هدر و واحد رابط ماژول باید مستقیماً کامپایل شوند: .Sp .Vb 1 \& g++ \-c \-std=c++20 \-fmodules \-fsearch\-include\-path bits/stdc++.h bits/std.cc .Ve .Sp مقدار پیش‌فرض \&\fIkind\fR برابر \fBuser\fR است که مسیر جستجوی \f(CW#include "..."\fR را بررسی می‌کند؛ همچنین می‌توانید برای مسیر جستجوی \f(CW\*(C`#include <...>\*(C'\fR صراحتاً \fBsystem\fR را مشخص کنید. .IP \fB\-ftabstop=\fR\fIwidth\fR 4 .IX Item "-ftabstop=width" تعیین فاصلهٔ بین ایستگاه‌های تب (tab stops). این امر به پیش‌پردازنده کمک می‌کند تا شماره ستون‌های صحیح را در هشدارها یا خطاها گزارش کند، حتی اگر تب‌ها در خط وجود داشته باشند. اگر مقدار کمتر از ۱ یا بیشتر از ۱۰۰ باشد، این گزینه نادیده گرفته می‌شود. مقدار پیش‌فرض ۸ است. .IP \fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR] 4 .IX Item "-ftrack-macro-expansion[=level]" ردیابی مکان‌های توکن‌ها در طول بسط‌های ماکرو. این امر به کامپایلر اجازه می‌دهد در صورت بروز خطای کامپایل درون یک بسط ماکرو، اطلاعات تشخیصی مربوط به پشتهٔ فعلی بسط ماکرو را گزارش کند. استفاده از این گزینه باعث مصرف حافظهٔ بیشتر توسط پیش‌پردازنده و کامپایلر می‌شود. پارامتر \fIlevel\fR می‌تواند برای انتخاب سطح دقت ردیابی مکان توکن استفاده شود و در صورت نیاز مصرف حافظه را کاهش دهد. مقدار \fB0\fR برای \fIlevel\fR این گزینه را غیرفعال می‌کند. مقدار \fB1\fR مکان‌های توکن‌ها را در حالتی تقلیل‌یافته برای دستیابی به کمترین سربار حافظه ردیابی می‌کند. در این حالت، تمام توکن‌های حاصل از بسط یک آرگومان از یک ماکروی شبه‌تابع دارای مکان یکسانی هستند. مقدار \fB2\fR مکان‌های توکن‌ها را به‌طور کامل ردیابی می‌کند. این مقدار بیشترین مصرف حافظه را دارد. هنگامی که این گزینه بدون آرگومان داده شود، مقدار پیش‌فرض پارامتر \&\fB2\fR است. .Sp توجه داشته باشید که \f(CW\*(C`\-ftrack\-macro\-expansion=2\*(C'\fR به‌طور پیش‌فرض فعال است. .IP \fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4 .IX Item "-fmacro-prefix-map=old=new" هنگام پیش‌پردازش فایل‌های واقع در دایرکتوری \fIold\fR، ماکروهای \f(CW\*(C`_\|_FILE_\|_\*(C'\fR و \f(CW\*(C`_\|_BASE_FILE_\|_\*(C'\fR را طوری بسط می‌دهد که گویی فایل‌ها در دایرکتوری \fInew\fR قرار دارند. این گزینه می‌تواند با استفاده از \fI.\fR برای \&\fInew\fR جهت تغییر یک مسیر مطلق به یک مسیر نسبی استفاده شود، که می‌تواند به ساخت‌های بازتولیدپذیرتر (reproducible builds) و مستقل از مکان منجر شود. این گزینه همچنین بر \&\f(CW\*(C`_\|_builtin_FILE()\*(C'\fR در حین کامپایل اثر می‌گذارد. همچنین نگاه کنید به \&\fB\-ffile\-prefix\-map\fR و \fB\-fcanon\-prefix\-map\fR. .IP \fB\-fexec\-charset=\fR\fIcharset\fR 4 .IX Item "-fexec-charset=charset" تنظیم مجموعه نویسهٔ اجرایی، مورد استفاده برای ثابت‌های رشته‌ای و نویسه‌ای. مقدار پیش‌فرض UTF\-8 است. \fIcharset\fR می‌تواند هر کدگذاری پشتیبانی‌شده توسط تابع کتابخانه‌ای \f(CW\*(C`iconv\*(C'\fR سیستم باشد. .IP \fB\-fwide\-exec\-charset=\fR\fIcharset\fR 4 .IX Item "-fwide-exec-charset=charset" تنظیم مجموعه نویسهٔ اجرایی عریض، مورد استفاده برای ثابت‌های رشته‌ای و نویسه‌ای عریض. مقدار پیش‌فرض یکی از گزینه‌های UTF\-32BE، UTF\-32LE، UTF\-16BE یا UTF\-16LE است، هرکدام که با عرض \f(CW\*(C`wchar_t\*(C'\fR و ترتیب بایت big\-endian یا little\-endian مورد استفاده در تولید کد مطابقت داشته باشد. همانند \fB\-fexec\-charset\fR، \fIcharset\fR می‌تواند هر کدگذاری پشتیبانی‌شده توسط تابع کتابخانه‌ای \f(CW\*(C`iconv\*(C'\fR سیستم باشد؛ با این حال، با کدگذاری‌هایی که دقیقاً در \f(CW\*(C`wchar_t\*(C'\fR جا نمی‌شوند، دچار مشکل خواهید شد..IP \fB\-finput\-charset=\fR\fIcharset\fR 4 .IX Item "-finput-charset=charset" مجموعه نویسه‌های ورودی را تنظیم می‌کند، که برای تبدیل از مجموعه نویسه‌های فایل ورودی به مجموعه نویسه‌های مبدأ مورد استفاده توسط GCC به کار می‌رود. اگر لوکال آن را مشخص نکند، یا GCC نتواند این اطلاعات را از لوکال دریافت کند، پیش‌فرض UTF\-8 است. این مقدار می‌تواند توسط لوکال یا این گزینهٔ خط فرمان بازنویسی شود. در حال حاضر در صورت وجود تعارض، گزینهٔ خط فرمان اولویت دارد. \fIcharset\fR می‌تواند هر کدگذاری پشتیبانی‌شده توسط روال کتابخانه‌ای \f(CW\*(C`iconv\*(C'\fR سیستم باشد. .IP \fB\-fpch\-deps\fR 4 .IX Item "-fpch-deps" هنگام استفاده از سرآیندهای از‌پیش‌کامپایل‌شده، این پرچم باعث می‌شود که پرچم‌های خروجیِ وابستگی، فایل‌های حاصل از وابستگی‌های سرآیند از‌پیش‌کامپایل‌شده را نیز فهرست کنند. در صورت عدم تعیین، تنها خود سرآیند از‌پیش‌کامپایل‌شده فهرست می‌شود و نه فایل‌هایی که برای ایجاد آن استفاده شده‌اند، زیرا در زمان استفاده از یک سرآیند از‌پیش‌کامپایل‌شده، به آن فایل‌ها رجوع نمی‌شود. .IP \fB\-fpch\-preprocess\fR 4 .IX Item "-fpch-preprocess" این گزینه امکان استفاده از سرآیند از‌پیش‌کامپایل‌شده را به همراه \fB\-E\fR فراهم می‌کند. این گزینه یک \f(CW\*(C`#pragma\*(C'\fR ویژه، \&\f(CW\*(C`#pragma GCC pch_preprocess "\fR\f(CIfilename\fR\f(CW"\*(C'\fR را در خروجی درج می‌کند تا مکانی که سرآیند از‌پیش‌کامپایل‌شده در آن یافت شده و \fIfilename\fR آن مشخص شود. هنگامی که \fB\-fpreprocessed\fR در حال استفاده است، GCC این \f(CW\*(C`#pragma\*(C'\fR را تشخیص داده و PCH را بارگذاری می‌کند. .Sp این گزینه به طور پیش‌فرض غیرفعال است، زیرا خروجی پیش‌پردازش‌شدهٔ حاصل تنها برای ارائه به عنوان ورودی به GCC واقعاً مناسب است. این گزینه توسط \&\fB\-save\-temps\fR فعال می‌شود. .Sp شما نباید این \f(CW\*(C`#pragma\*(C'\fR را در کد خود بنویسید، اما در صورتی که فایل PCH در مکان دیگری موجود باشد، ویرایش نام فایل خطری ندارد. نام فایل ممکن است مطلق یا نسبت به دایرکتوری جاری GCC باشد. .IP \fB\-fworking\-directory\fR 4 .IX Item "-fworking-directory" تولید نشانگرهای خط را در خروجی پیش‌پردازنده فعال می‌کند که به کامپایلر اجازه می‌دهد از دایرکتوری کاری جاری در زمان پیش‌پردازش مطلع شود. هنگامی که این گزینه فعال باشد، پیش‌پردازنده پس از نشانگر خط اولیه، دومین نشانگر خط را به همراه دایرکتوری کاری جاری و به دنبال آن دو اسلش صادر می‌کند. GCC از این دایرکتوری، در صورت حضور در ورودی پیش‌پردازش‌شده، به عنوان دایرکتوری صادرشده برای دایرکتوری کاری جاری در برخی قالب‌های اطلاعات اشکال‌زدایی استفاده می‌کند. این گزینه در صورت فعال بودن اطلاعات اشکال‌زدایی به طور ضمنی فعال می‌شود، اما با فرم نفی آن \fB\-fno\-working\-directory\fR قابل جلوگیری است. اگر پرچم \fB\-P\fR در خط فرمان حضور داشته باشد، این گزینه هیچ اثری ندارد، چرا که اساساً هیچ دستورالعمل \&\f(CW\*(C`#line\*(C'\fR صادر نمی‌شود. .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A predicate=answer" یک گزاره (assertion) با محمول \fIpredicate\fR و پاسخ \&\fIanswer\fR ایجاد می‌کند. این فرم بر فرم قدیمی‌تر \fB\-A\fR \&\fIpredicate\fR\fB(\fR\fIanswer\fR\fB)\fR ترجیح داده می‌شود (که هنوز پشتیبانی می‌شود)، زیرا از نویسه‌های ویژهٔ پوسته استفاده نمی‌کند. .IP "\fB\-A \-\fR\fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A -predicate=answer" یک گزاره با محمول \fIpredicate\fR و پاسخ \&\fIanswer\fR را لغو می‌کند. .IP \fB\-C\fR 4 .IX Item "-C" کامنت‌ها را حذف نکن. همهٔ کامنت‌ها به فایل خروجی منتقل می‌شوند، به جز کامنت‌های درون دستورالعمل‌های پردازش‌شده، که همراه با خود دستورالعمل حذف می‌شوند. .Sp هنگام استفاده از \fB\-C\fR باید آمادهٔ عوارض جانبی باشید؛ این گزینه باعث می‌شود پیش‌پردازنده با کامنت‌ها به عنوان نشانه‌ها (توکن‌ها)ی مستقل رفتار کند. برای مثال، کامنت‌هایی که در ابتدای یک خط دستورالعمل ظاهر می‌شوند، باعث تبدیل شدن آن خط به یک خط مبدأ معمولی می‌شوند، زیرا اولین نشانه در خط دیگر \fB#\fR نیست. .IP \fB\-CC\fR 4 .IX Item "-CC" کامنت‌ها را دور نریز، از جمله در حین باز شدن ماکروها. این گزینه مانند \fB\-C\fR است، به جز این‌که کامنت‌های درون ماکروها نیز به فایل خروجی در جایی که ماکرو گسترش می‌یابد منتقل می‌شوند. .Sp علاوه بر عوارض جانبی گزینهٔ \fB\-C\fR، گزینهٔ \&\fB\-CC\fR باعث می‌شود تمام کامنت‌های سبک ++C در درون یک ماکرو به کامنت‌های سبک C تبدیل شوند. این کار برای جلوگیری از آن است که استفادهٔ بعدی از آن ماکرو، به طور ناخواسته ادامهٔ خط کد مبدأ را کامنت کند. .Sp گزینهٔ \fB\-CC\fR عموماً برای پشتیبانی از کامنت‌های lint استفاده می‌شود. .IP \fB\-P\fR 4 .IX Item "-P" از تولید نشانگرهای خط در خروجی پیش‌پردازنده جلوگیری می‌کند. این گزینه ممکن است هنگام اجرای پیش‌پردازنده بر روی چیزی غیر از کد C، و ارسال آن به برنامه‌ای که ممکن است توسط نشانگرهای خط سردرگم شود، مفید باشد. .IP \fB\-traditional\fR 4 .IX Item "-traditional" .PD 0 .IP \fB\-traditional\-cpp\fR 4 .IX Item "-traditional-cpp" .PD تلاش می‌کند تا رفتار پیش‌پردازنده‌های C پیش از استاندارد را، بر خلاف پیش‌پردازنده‌های ISO C، تقلید کند. برای جزئیات به دفترچه راهنمای GNU CPP مراجعه کنید. .Sp توجه داشته باشید که GCC در موارد دیگر تلاشی برای شبیه‌سازی یک کامپایلر C پیش از استاندارد نمی‌کند، و این گزینه‌ها تنها با سوئیچ \fB\-E\fR، یا هنگام فراخوانی صریح CPP پشتیبانی می‌شوند. .IP \fB\-trigraphs\fR 4 .IX Item "-trigraphs" پشتیبانی از سه‌نگاره‌ها (trigraphs) در ISO C. این‌ها دنباله‌هایی سه‌نویسه‌ای هستند که همگی با \fB??\fR آغاز می‌شوند و توسط ISO C برای نمایش تک‌نویسه‌ها تعریف شده‌اند. برای مثال، \&\fB??/\fR به جای \fB\e\fR قرار دارد، بنابراین \fB\*(Aq??/n\*(Aq\fR یک ثابت نویسه‌ای برای خط جدید (newline) است. .Sp نه سه‌نگاره و جایگزین‌های آن‌ها عبارتند از: .Sp .Vb 2 \& Trigraph: ??( ??) ??< ??> ??= ??/ ??\*(Aq ??! ??\- \& Replacement: [ ] { } # \e ^ | ~ .Ve .Sp به طور پیش‌فرض، GCC سه‌نگاره‌ها را نادیده می‌گیرد، اما در حالت‌های منطبق بر استاندارد آن‌ها را تبدیل می‌کند. گزینه‌های \fB\-std\fR و \&\fB\-ansi\fR را ببینید. .IP \fB\-remap\fR 4 .IX Item "-remap" کد ویژه‌ای را برای دور زدن محدودیت سیستم‌فایل‌هایی که تنها نام‌های بسیار کوتاه فایل را مجاز می‌دانند (مانند MS\-DOS)، فعال می‌کند. .IP \fB\-H\fR 4 .IX Item "-H" علاوه بر سایر فعالیت‌های معمول، نام هر فایل سرآیند استفاده‌شده را چاپ می‌کند. هر نام دندانه‌دار می‌شود تا عمق آن در پشتهٔ \&\fB#include\fR نشان داده شود. فایل‌های سرآیند از‌پیش‌کامپایل‌شده نیز چاپ می‌شوند، حتی اگر نامعتبر تشخیص داده شوند؛ یک فایل سرآیند از‌پیش‌کامپایل‌شدهٔ نامعتبر با \fB...x\fR و یک فایل معتبر با \fB...!\fR چاپ می‌شود. .IP \fB\-d\fR\fIletters\fR 4 .IX Item "-dletters" دستور می‌دهد تا در طول کامپایل، دامپ‌های اشکال‌زدایی طبق آنچه توسط \&\fIletters\fR مشخص شده ایجاد شوند. پرچم‌های مستندشده در اینجا مواردی هستند که به پیش‌پردازنده مربوط می‌شوند. سایر \fIletters\fR توسط خود کامپایلر تفسیر می‌شوند یا برای نسخه‌های بعدی GCC رزرو شده‌اند، و بنابراین بدون هشدار نادیده گرفته می‌شوند. اگر حروفی (\fIletters\fR) را مشخص کنید که رفتار آن‌ها در تعارض باشد، نتیجه تعریف‌نشده خواهد بود. .RS 4 .IP \fB\-dM\fR 4 .IX Item "-dM" به جای خروجی معمول، فهرستی از دستورالعمل‌های \fB#define\fR را برای تمام ماکروهای تعریف‌شده در طول اجرای پیش‌پردازنده، از جمله ماکروهای از‌پیش‌تعریف‌شده، تولید می‌کند. این امر راهکاری به شما می‌دهد تا دریابید چه مواردی در نسخهٔ پیش‌پردازندهٔ شما از پیش تعریف شده‌اند. با فرض اینکه فایلی به نام \fIfoo.h\fR ندارید، دستور .Sp .Vb 1 \& touch foo.h; cpp \-dM foo.h .Ve .Sp همهٔ ماکروهای از‌پیش‌تعریف‌شده را نمایش می‌دهد. .Sp اگر از \fB\-dM\fR بدون گزینهٔ \fB\-E\fR استفاده کنید، \fB\-dM\fR به عنوان مترادفی برای \fB\-fdump\-rtl\-mach\fR تفسیر می‌شود. .IP \fB\-dD\fR 4 .IX Item "-dD" مانند \fB\-dM\fR عمل می‌کند، به جز اینکه \fIهم\fR دستورالعمل‌های \fB#define\fR و هم نتیجهٔ پیش‌پردازش را خروجی می‌دهد. هر دو نوع خروجی به فایل خروجی استاندارد ارسال می‌شوند. .IP \fB\-dN\fR 4 .IX Item "-dN" مانند \fB\-dD\fR است، اما تنها نام ماکروها را صادر می‌کند و نه گسترش (باز شدن) آن‌ها را. .IP \fB\-dI\fR 4 .IX Item "-dI" علاوه بر نتیجهٔ پیش‌پردازش، دستورالعمل‌های \fB#include\fR را نیز در خروجی درج می‌کند. .IP \fB\-dU\fR 4 .IX Item "-dU" مانند \fB\-dD\fR است، به جز اینکه تنها ماکروهایی که گسترش می‌یابند، یا وضعیت تعریف آن‌ها در دستورالعمل‌های پیش‌پردازنده آزمایش می‌شود، در خروجی قرار می‌گیرند؛ خروجی تا زمان استفاده یا آزمایش ماکرو به تعویق می‌افتد؛ و دستورالعمل‌های \&\fB#undef\fR نیز برای ماکروهایی که آزمایش شده‌اند اما در آن زمان تعریف نشده‌اند، خروجی داده می‌شوند. .RE .RS 4 .RE .IP \fB\-fdebug\-cpp\fR 4 .IX Item "-fdebug-cpp" این گزینه تنها برای اشکال‌زدایی GCC مفید است. هنگامی که از طریق CPP یا همراه با \&\fB\-E\fR استفاده شود، اطلاعات اشکال‌زدایی را دربارهٔ نقشه‌های مکان (location maps) دامپ می‌کند. پیش از هر نشانه در خروجی، دامپ نقشه‌ای که مکان آن نشانه به آن تعلق دارد قرار می‌گیرد. .Sp هنگامی که از طریق GCC بدون \fB\-E\fR استفاده شود، این گزینه هیچ اثری ندارد..IP \fB\-Wp,\fR\fIoption\fR 4 .IX Item "-Wp,option" می‌توانید از \fB\-Wp,\fR\fIoption\fR برای دور زدن راه‌انداز کامپایلر و ارسال مستقیم \fIoption\fR به پیش‌پردازنده استفاده کنید. اگر \&\fIoption\fR شامل کاما باشد، در محل کاماها به چند گزینه تقسیم می‌شود. با این حال، بسیاری از گزینه‌ها پیش از ارسال به پیش‌پردازنده توسط راه‌انداز کامپایلر اصلاح، ترجمه یا تفسیر می‌شوند و \&\fB\-Wp\fR این مرحله را به اجبار دور می‌زند. واسط مستقیم پیش‌پردازنده مستند نشده و در معرض تغییر است؛ بنابراین در صورت امکان باید از استفاده از \fB\-Wp\fR خودداری کرده و اجازه دهید راه‌انداز گزینه‌ها را مدیریت کند. .IP "\fB\-Xpreprocessor\fR \fIoption\fR" 4 .IX Item "-Xpreprocessor option" گزینهٔ \fIoption\fR را به عنوان یک گزینه به پیش‌پردازنده ارسال می‌کند. می‌توانید از این مورد برای ارائهٔ گزینه‌های پیش‌پردازندهٔ مختص سیستم که GCC آن‌ها را شناسایی نمی‌کند، استفاده کنید. .Sp اگر می‌خواهید گزینه‌ای ارسال کنید که یک آرگومان می‌گیرد، باید دو بار از \&\fB\-Xpreprocessor\fR استفاده کنید؛ یک‌بار برای گزینه و یک‌بار برای آرگومان. .IP \fB\-no\-integrated\-cpp\fR 4 .IX Item "-no-integrated-cpp" پیش‌پردازش را به عنوان یک مرحلهٔ مجزا پیش از کامپایل انجام می‌دهد. به‌طور پیش‌فرض، GCC پیش‌پردازش را به عنوان بخشی یکپارچه از نشانه‌گذاری ورودی و تجزیه (parsing) انجام می‌دهد. اگر این گزینه مشخص شود، فرانت‌اند زبان مربوطه (\fBcc1\fR، \fBcc1plus\fR یا \fBcc1obj\fR به ترتیب برای C، C++ و Objective\-C) در عوض دو بار فراخوانی می‌شود؛ یک‌بار فقط برای پیش‌پردازش و یک‌بار برای کامپایل واقعی ورودیِ پیش‌پردازش‌شده. این گزینه ممکن است همراه با گزینه‌های \fB\-B\fR یا \&\fB\-wrapper\fR برای تعیین یک پیش‌پردازندهٔ جایگزین یا انجام پردازش‌های اضافی روی کد منبع برنامه بین پیش‌پردازش عادی و کامپایل مفید باشد. .SS "ارسال گزینه‌ها به اسمبلر (Passing Options to the Assembler)" .IX Subsection "Passing Options to the Assembler" می‌توانید گزینه‌ها را به اسمبلر ارسال کنید. .IP \fB\-Wa,\fR\fIoption\fR 4 .IX Item "-Wa,option" گزینهٔ \fIoption\fR را به عنوان یک گزینه به اسمبلر ارسال می‌کند. اگر \fIoption\fR شامل کاما باشد، در محل کاماها به چند گزینه تقسیم می‌شود. .IP "\fB\-Xassembler\fR \fIoption\fR" 4 .IX Item "-Xassembler option" گزینهٔ \fIoption\fR را به عنوان یک گزینه به اسمبلر ارسال می‌کند. می‌توانید از این مورد برای ارائهٔ گزینه‌های اسمبلر مختص سیستم که GCC آن‌ها را شناسایی نمی‌کند، استفاده کنید. .Sp اگر می‌خواهید گزینه‌ای ارسال کنید که یک آرگومان می‌گیرد، باید دو بار از \&\fB\-Xassembler\fR استفاده کنید؛ یک‌بار برای گزینه و یک‌بار برای آرگومان. .SS "گزینه‌های پیوند (Options for Linking)" .IX Subsection "Options for Linking" این گزینه‌ها زمانی وارد عمل می‌شوند که کامپایلر فایل‌های شیء را به یک فایل خروجی اجرایی پیوند می‌دهد. در صورتی که کامپایلر مرحلهٔ پیوند را انجام ندهد، این گزینه‌ها بی‌اثر خواهند بود. .IP \fIobject\-file\-name\fR 4 .IX Item "object-file-name" نام فایلی که به یک پسوند شناخته‌شدهٔ خاص ختم نشود، به عنوان یک فایل شیء یا کتابخانه در نظر گرفته می‌شود. (فایل‌های شیء بر اساس محتویات فایل توسط پیونددهنده از کتابخانه‌ها متمایز می‌شوند.) در صورت انجام پیوند، این فایل‌های شیء به عنوان ورودی پیونددهنده استفاده می‌شوند. .IP \fB\-c\fR 4 .IX Item "-c" .PD 0 .IP \fB\-S\fR 4 .IX Item "-S" .IP \fB\-E\fR 4 .IX Item "-E" .PD در صورت استفاده از هر یک از این گزینه‌ها، پیونددهنده اجرا نمی‌شود و نباید از نام فایل‌های شیء به عنوان آرگومان استفاده کرد. .IP \fB\-flinker\-output=\fR\fItype\fR 4 .IX Item "-flinker-output=type" این گزینه تولید کد بهینه‌ساز زمان پیوند را کنترل می‌کند. به‌طور پیش‌فرض، خروجی پیونددهنده به‌طور خودکار توسط افزونهٔ پیونددهنده تعیین می‌شود. برای اشکال‌زدایی کامپایلر و در صورتی که پیوند افزایشی با یک فایل شیء غیر LTO مد نظر باشد، کنترل دستی نوع خروجی می‌تواند مفید باشد. .Sp اگر \fItype\fR برابر با \fBexec\fR باشد، تولید کد یک باینری ایستا ایجاد می‌کند. در این حالت \fB\-fpic\fR و \fB\-fpie\fR هر دو غیرفعال می‌شوند. .Sp اگر \fItype\fR برابر با \fBdyn\fR باشد، تولید کد یک کتابخانهٔ اشتراکی ایجاد می‌کند. در این حالت \fB\-fpic\fR یا \fB\-fPIC\fR حفظ می‌شود، اما به‌طور خودکار فعال نمی‌گردد. این امر امکان ساخت کتابخانه‌های اشتراکی بدون کد مستقل از موقعیت را در معماری‌هایی که این قابلیت را پشتیبانی می‌کنند (مانند x86) فراهم می‌سازد. .Sp اگر \fItype\fR برابر با \fBpie\fR باشد، تولید کد یک فایل اجرایی با \fB\-fpie\fR ایجاد می‌کند. این کار به بهینه‌سازی‌هایی مشابه با \fBexec\fR منجر می‌شود، با این تفاوت که اگر \fB\-fpie\fR در زمان کامپایل مشخص شده باشد غیرفعال نمی‌گردد. .Sp اگر \fItype\fR برابر با \fBrel\fR باشد، کامپایلر فرض می‌کند که پیوند افزایشی در حال انجام است. بخش‌های حاوی کد میانی برای بهینه‌سازی زمان پیوند با یکدیگر ادغام شده، پیش‌بهینه‌سازی می‌شوند و در فایل شیء حاصل خروجی داده می‌شوند. علاوه بر این، اگر \&\fB\-ffat\-lto\-objects\fR مشخص شده باشد، کد باینری برای پیوندهای غیر LTO آتی تولید می‌شود. فایل شیء حاصل از پیوند افزایشی کوچک‌تر از کتابخانهٔ ایستای تولیدشده از همان فایل‌های شیء است. در زمان پیوند، نتیجهٔ پیوند افزایشی در صورتی که بیشتر اشیاء موجود در کتابخانه استفاده شوند، سریع‌تر از یک کتابخانهٔ ایستا بارگذاری می‌شود. .Sp در نهایت، \fBnolto\-rel\fR کامپایلر را برای پیوند افزایشی به گونه‌ای پیکربندی می‌کند که تولید کد اجباری شده، یک باینری نهایی تولید می‌شود و کد میانی برای بهینه‌سازی زمان پیوند بعدی حذف می‌گردد. هنگامی که چندین فایل شیء به یکدیگر پیوند داده می‌شوند، کد حاصل بهتر از حالتی که بهینه‌سازی‌های زمان پیوند غیرفعال است بهینه‌سازی می‌شود (برای مثال، درون‌ریزی میان‌مدولی صورت می‌گیرد)، اما بیشتر مزایای بهینه‌سازی کل برنامه از دست می‌رود. .Sp در طول پیوند افزایشی (توسط \fB\-r\fR)، افزونهٔ پیونددهنده به‌طور پیش‌فرض از \&\fBrel\fR استفاده می‌کند. با این حال، با واسط‌های فعلی GNU Binutils امکان پیوند افزایشی اشیاء LTO و اشیاء غیر LTO در یک فایل شیء واحد و ترکیبی وجود ندارد. اگر هر یک از فایل‌های شیء در پیوند افزایشی نتواند برای بهینه‌سازی زمان پیوند استفاده شود، افزونهٔ پیونددهنده یک هشدار صادر کرده و از \fBnolto\-rel\fR استفاده می‌کند. برای حفظ بهینه‌سازی کل برنامه، توصیه می‌شود چنین اشیایی در عوض به یک کتابخانهٔ ایستا پیوند داده شوند. روش دیگر، استفاده از نسخهٔ binutils ارائه‌شده توسط H.J. Lu با پشتیبانی از اشیاء ترکیبی است. .IP \fB\-fuse\-ld=bfd\fR 4 .IX Item "-fuse-ld=bfd" استفاده از پیونددهندهٔ \fBbfd\fR به جای پیونددهندهٔ پیش‌فرض. .IP \fB\-fuse\-ld=gold\fR 4 .IX Item "-fuse-ld=gold" استفاده از پیونددهندهٔ \fBgold\fR به جای پیونددهندهٔ پیش‌فرض. .IP \fB\-fuse\-ld=lld\fR 4 .IX Item "-fuse-ld=lld" استفاده از پیونددهندهٔ LLVM \fBlld\fR به جای پیونددهندهٔ پیش‌فرض. .IP \fB\-fuse\-ld=mold\fR 4 .IX Item "-fuse-ld=mold" استفاده از پیونددهندهٔ مدرن (\fBmold\fR) به جای پیونددهندهٔ پیش‌فرض. .IP \fB\-l\fR\fIlibrary\fR 4 .IX Item "-llibrary" .PD 0 .IP "\fB\-l\fR \fIlibrary\fR" 4 .IX Item "-l library" .PD جستجوی کتابخانه‌ای به نام \fIlibrary\fR هنگام پیوند دادن. (حالت دوم با قرار گرفتن نام کتابخانه به عنوان یک آرگومان جداگانه، صرفاً برای سازگاری با POSIX بوده و توصیه نمی‌شود.) .Sp گزینهٔ \fB\-l\fR مستقیماً توسط GCC به پیونددهنده ارسال می‌شود. برای جزئیات دقیق به مستندات پیونددهندهٔ خود مراجعه کنید. توضیحات کلی زیر در مورد پیونددهندهٔ GNU صدق می‌کند. .Sp پیونددهنده فهرستی استاندارد از دایرکتوری‌ها را برای یافتن کتابخانه جستجو می‌کند. دایرکتوری‌های جستجوشده شامل چندین دایرکتوری استاندارد سیستم به اضافهٔ هر دایرکتوری مشخص‌شده با \fB\-L\fR هستند. .Sp کتابخانه‌های ایستا آرشیوهایی از فایل‌های شیء هستند و نام‌هایی مانند \fIliblibrary.a\fR دارند. برخی مقصدها از کتابخانه‌های اشتراکی نیز پشتیبانی می‌کنند که معمولاً نام‌هایی مانند \fIliblibrary.so\fR دارند. اگر هر دو نوع کتابخانهٔ ایستا و اشتراکی یافت شوند، پیونددهنده اولویت را به پیوند با کتابخانهٔ اشتراکی می‌دهد، مگر اینکه از گزینهٔ \&\fB\-static\fR استفاده شده باشد. .Sp محل قرارگیری این گزینه در دستور اهمیت دارد؛ پیونددهنده کتابخانه‌ها و فایل‌های شیء را دقیقاً به همان ترتیبی که مشخص شده‌اند جستجو و پردازش می‌کند. بنابراین، دستور \fBfoo.o \-lz bar.o\fR کتابخانهٔ \fBz\fR را پس از فایل \fIfoo.o\fR اما پیش از \fIbar.o\fR جستجو می‌کند. اگر \fIbar.o\fR به توابعی در \fBz\fR ارجاع دهد، ممکن است آن توابع بارگذاری نشوند. .IP \fB\-lobjc\fR 4 .IX Item "-lobjc" برای پیوند دادن یک برنامهٔ Objective\-C یا Objective\-C++ به این حالت خاص از گزینهٔ \fB\-l\fR نیاز دارید. .IP \fB\-nostartfiles\fR 4 .IX Item "-nostartfiles" هنگام پیوند دادن از فایل‌های استاندارد راه‌اندازی سیستم استفاده نمی‌شود. کتابخانه‌های استاندارد سیستم به‌طور عادی استفاده می‌شوند، مگر اینکه از گزینه‌های \fB\-nostdlib\fR، \&\fB\-nolibc\fR یا \fB\-nodefaultlibs\fR استفاده شود. .IP \fB\-nodefaultlibs\fR 4 .IX Item "-nodefaultlibs" هنگام پیوند دادن از کتابخانه‌های استاندارد سیستم استفاده نمی‌شود. تنها کتابخانه‌هایی که مشخص می‌کنید به پیونددهنده ارسال می‌شوند و گزینه‌های تعیین‌کنندهٔ پیوند کتابخانه‌های سیستم، مانند \fB\-static\-libgcc\fR یا \fB\-shared\-libgcc\fR، نادیده گرفته می‌شوند. فایل‌های استاندارد راه‌اندازی به‌طور عادی استفاده می‌شوند، مگر اینکه از گزینهٔ \fB\-nostartfiles\fR استفاده شده باشد. .Sp کامپایلر ممکن است فراخوانی‌هایی برای \f(CW\*(C`memcmp\*(C'\fR، \&\f(CW\*(C`memset\*(C'\fR، \f(CW\*(C`memcpy\*(C'\fR و \f(CW\*(C`memmove\*(C'\fR تولید کند. این مدخل‌ها معمولاً توسط تعاریف موجود در libc برطرف می‌شوند. هنگام مشخص کردن این گزینه، این نقاط ورود باید از طریق سازوکار دیگری تأمین شوند..IP \fB\-nolibc\fR 4 .IX Item "-nolibc" هنگام پیوند دادن، از کتابخانه C یا کتابخانه‌های سیستمی وابسته به آن استفاده نکنید. پیوند با فایل‌های راه‌اندازی، \fIlibgcc\fR یا کتابخانه‌های پشتیبانی زبان ارائه‌شده توسط زنجیره ابزار مانند \fIlibgnat\fR، \fIlibgfortran\fR یا \fIlibstdc++\fR همچنان انجام می‌شود، مگر اینکه از گزینه‌هایی که از گنجاندن آن‌ها جلوگیری می‌کنند نیز استفاده شده باشد. این گزینه معمولاً \fB\-lc\fR و همچنین کتابخانه‌های سیستمی همراه با آن را که در صورت عدم وجود کتابخانه C بی‌معنی می‌شوند (مانند \fB\-lpthread\fR یا \&\fB\-lm\fR در برخی پیکربندی‌ها) از خط فرمان پیوند حذف می‌کند. این گزینه برای مقاصد bare\-board در مواردی که واقعاً هیچ کتابخانه C در دسترس نیست در نظر گرفته شده است. .IP \fB\-nostdlib\fR 4 .IX Item "-nostdlib" هنگام پیوند دادن، از فایل‌های راه‌اندازی یا کتابخانه‌های استاندارد سیستم استفاده نکنید. هیچ فایل راه‌اندازی ارسال نمی‌شود و تنها کتابخانه‌هایی که مشخص می‌کنید به پیونددهنده ارسال می‌شوند؛ همچنین گزینه‌های تعیین‌کننده پیوند کتابخانه‌های سیستمی، مانند \&\fB\-static\-libgcc\fR یا \fB\-shared\-libgcc\fR، نادیده گرفته می‌شوند. .Sp کامپایلر ممکن است فراخوانی‌هایی برای \f(CW\*(C`memcmp\*(C'\fR، \f(CW\*(C`memset\*(C'\fR، \&\f(CW\*(C`memcpy\*(C'\fR و \f(CW\*(C`memmove\*(C'\fR تولید کند. این مدخل‌ها معمولاً توسط مدخل‌های درون libc برطرف می‌شوند. در صورت مشخص شدن این گزینه، این نقاط ورود باید از طریق سازوکار دیگری فراهم گردند. .Sp یکی از کتابخانه‌های استانداردی که توسط \fB\-nostdlib\fR و \&\fB\-nodefaultlibs\fR نادیده گرفته می‌شود \fIlibgcc.a\fR است؛ کتابخانه‌ای از زیرروال‌های داخلی که GCC از آن برای غلبه بر کاستی‌های ماشین‌های خاص یا نیازهای ویژه برخی زبان‌ها استفاده می‌کند. .Sp در بیشتر موارد، حتی زمانی که می‌خواهید از سایر کتابخانه‌های استاندارد اجتناب کنید، به \fIlibgcc.a\fR نیاز دارید. به عبارت دیگر، وقتی \fB\-nostdlib\fR یا \fB\-nodefaultlibs\fR را مشخص می‌کنید، معمولاً باید \fB\-lgcc\fR را نیز مشخص کنید. این کار تضمین می‌کند که هیچ ارجاع حل‌نشده‌ای به زیرروال‌های داخلی کتابخانه GCC نخواهید داشت. (نمونه‌ای از چنین زیرروال داخلی، \f(CW\*(C`_\|_main\*(C'\fR است که برای اطمینان از فراخوانی سازنده‌های ++C استفاده می‌شود.) .IP \fB\-nostdlib++\fR 4 .IX Item "-nostdlib++" به‌طور ضمنی با کتابخانه‌های استاندارد ++C پیوند داده نشود. .IP "\fB\-e\fR \fIentry\fR" 4 .IX Item "-e entry" .PD 0 .IP \fB\-\-entry=\fR\fIentry\fR 4 .IX Item "--entry=entry" .PD مشخص می‌کند که نقطه ورود برنامه \fIentry\fR است. این آرگومان توسط پیونددهنده تفسیر می‌شود؛ پیونددهنده GNU نام یک نماد یا یک آدرس را می‌پذیرد. .IP \fB\-pie\fR 4 .IX Item "-pie" در مقاصدی که پشتیبانی می‌کنند، یک فایل اجرایی مستقل از موقعیت با پیوند پویا تولید کنید. برای دستیابی به نتایج قابل پیش‌بینی، هنگام مشخص کردن این گزینه پیونددهنده، باید همان مجموعه گزینه‌های استفاده‌شده برای کامپایل (\fB\-fpie\fR، \fB\-fPIE\fR، یا زیرگزینه‌های مدل) را نیز مشخص کنید. .IP \fB\-no\-pie\fR 4 .IX Item "-no-pie" یک فایل اجرایی مستقل از موقعیت با پیوند پویا تولید نکنید. .IP \fB\-static\-pie\fR 4 .IX Item "-static-pie" در مقاصدی که پشتیبانی می‌کنند، یک فایل اجرایی مستقل از موقعیت ایستا تولید کنید. یک فایل اجرایی مستقل از موقعیت ایستا شبیه به یک فایل اجرایی ایستا است، اما می‌تواند بدون نیاز به یک پیونددهنده پویا در هر آدرسی بارگذاری شود. برای دستیابی به نتایج قابل پیش‌بینی، هنگام مشخص کردن این گزینه پیونددهنده، باید همان مجموعه گزینه‌های استفاده‌شده برای کامپایل (\fB\-fpie\fR، \fB\-fPIE\fR، یا زیرگزینه‌های مدل) را نیز مشخص کنید. .IP \fB\-pthread\fR 4 .IX Item "-pthread" پیوند با کتابخانه ریسمان‌های پازیکس (POSIX threads). این گزینه در مقاصد GNU/Linux، اکثر مشتقات یونیکس دیگر و همچنین مقاصد x86 در Cygwin و MinGW پشتیبانی می‌شود. در برخی مقاصد این گزینه پرچم‌هایی را نیز برای پیش‌پردازنده تنظیم می‌کند، بنابراین باید به طور هماهنگ هم برای کامپایل و هم برای پیوند استفاده شود. .IP \fB\-r\fR 4 .IX Item "-r" یک شیء بازتعیین‌پذیر (relocatable object) را به عنوان خروجی تولید کنید. این عمل با عنوان پیوند جزئی نیز شناخته می‌شود. .IP \fB\-rdynamic\fR 4 .IX Item "-rdynamic" در مقاصدی که پشتیبانی می‌کنند، پرچم \fB\-export\-dynamic\fR را به پیونددهنده ELF ارسال کنید. این به پیونددهنده دستور می‌دهد که تمام نمادها، و نه فقط نمادهای استفاده‌شده را به جدول نمادهای پویا بیفزاید. این گزینه برای برخی از موارد استفاده از \f(CW\*(C`dlopen\*(C'\fR یا برای امکان دریافت backtrace از داخل برنامه مورد نیاز است. .IP \fB\-s\fR 4 .IX Item "-s" تمام جدول نمادها و اطلاعات بازتعیین را از فایل اجرایی حذف کنید. .IP \fB\-static\fR 4 .IX Item "-static" در سیستم‌هایی که از پیوند پویا پشتیبانی می‌کنند، این گزینه بر \fB\-pie\fR اولویت دارد و از پیوند با کتابخانه‌های اشتراکی جلوگیری می‌کند. در سایر سیستم‌ها، این گزینه هیچ اثری ندارد. .IP \fB\-shared\fR 4 .IX Item "-shared" یک شیء اشتراکی (shared object) تولید کنید که سپس بتوان آن را با اشیاء دیگر پیوند داد تا یک فایل اجرایی تشکیل شود. همه سیستم‌ها از این گزینه پشتیبانی نمی‌کنند. برای دستیابی به نتایج قابل پیش‌بینی، هنگام مشخص کردن این گزینه پیونددهنده، باید همان مجموعه گزینه‌های استفاده‌شده برای کامپایل (\fB\-fpic\fR، \fB\-fPIC\fR، یا زیرگزینه‌های مدل) را نیز مشخص کنید.[1] .IP \fB\-shared\-libgcc\fR 4 .IX Item "-shared-libgcc" .PD 0 .IP \fB\-static\-libgcc\fR 4 .IX Item "-static-libgcc" .PD در سیستم‌هایی که \fIlibgcc\fR را به عنوان یک کتابخانه اشتراکی ارائه می‌دهند، این گزینه‌ها به ترتیب استفاده از نسخه اشتراکی یا ایستا را اجباری می‌کنند. اگر در زمان پیکربندی کامپایلر، نسخه اشتراکی \fIlibgcc\fR ساخته نشده باشد، این گزینه‌ها هیچ اثری ندارند. .Sp موقعیت‌های متعددی وجود دارد که در آن‌ها یک برنامه کاربردی باید از نسخه اشتراکی \fIlibgcc\fR به جای نسخه ایستا استفاده کند. رایج‌ترین آن‌ها زمانی است که برنامه قصد دارد استثناها را در میان کتابخانه‌های اشتراکی مختلف پرتاب و دریافت کند. در آن صورت، هر یک از کتابخانه‌ها و همچنین خود برنامه باید از نسخه اشتراکی \fIlibgcc\fR استفاده کنند. .Sp بنابراین، راه‌انداز G++ هر زمان که یک کتابخانه اشتراکی یا یک فایل اجرایی اصلی بسازید، به‌طور خودکار \fB\-shared\-libgcc\fR را اضافه می‌کند؛ زیرا برنامه‌های ++C معمولاً از استثناها استفاده می‌کنند و در نتیجه این کار مناسب است. .Sp اگر در عوض، از راه‌انداز GCC برای ایجاد کتابخانه‌های اشتراکی استفاده کنید، ممکن است متوجه شوید که آن‌ها همیشه با نسخه اشتراکی \fIlibgcc\fR پیوند داده نمی‌شوند. اگر GCC در زمان پیکربندی خود تشخیص دهد که پیونددهنده غیر GNU یا پیونددهنده GNU فاقد پشتیبانی از گزینه \fB\-\-eh\-frame\-hdr\fR دارید، به‌طور پیش‌فرض نسخه اشتراکی \fIlibgcc\fR را به کتابخانه‌های اشتراکی پیوند می‌دهد. در غیر این صورت، از پیونددهنده بهره برده و پیوند با نسخه اشتراکی \fIlibgcc\fR را بهینه‌سازی و حذف می‌کند و به‌طور پیش‌فرض با نسخه ایستای libgcc پیوند برقرار می‌نماید. این امر به استثناها اجازه می‌دهد تا بدون تحمیل هزینه‌های بازتعیین در زمان بارگذاری کتابخانه، در میان چنین کتابخانه‌های اشتراکی منتشر شوند. .Sp با این حال، اگر قرار است یک کتابخانه یا فایل اجرایی اصلی استثناها را پرتاب یا دریافت کند، باید آن را با استفاده از راه‌انداز G++ یا با استفاده از گزینه \&\fB\-shared\-libgcc\fR پیوند دهید، به گونه‌ای که با نسخه اشتراکی \&\fIlibgcc\fR پیوند داده شود. .IP \fB\-static\-libasan\fR 4 .IX Item "-static-libasan" هنگامی که گزینه \fB\-fsanitize=address\fR برای پیوند دادن یک برنامه استفاده می‌شود، راه‌انداز GCC به طور خودکار با \fBlibasan\fR پیوند برقرار می‌کند. اگر \&\fIlibasan\fR به عنوان یک کتابخانه اشتراکی در دسترس باشد و از گزینه \fB\-static\fR استفاده نشود، در این صورت پیوند با نسخه اشتراکی \&\fIlibasan\fR انجام می‌شود. گزینه \fB\-static\-libasan\fR به راه‌انداز GCC دستور می‌دهد که \fIlibasan\fR را به صورت ایستا پیوند دهد، بدون اینکه لزوماً سایر کتابخانه‌ها به صورت ایستا پیوند داده شوند. .IP \fB\-static\-libtsan\fR 4 .IX Item "-static-libtsan" هنگامی که گزینه \fB\-fsanitize=thread\fR برای پیوند دادن یک برنامه استفاده می‌شود، راه‌انداز GCC به طور خودکار با \fBlibtsan\fR پیوند برقرار می‌کند. اگر \&\fIlibtsan\fR به عنوان یک کتابخانه اشتراکی در دسترس باشد و از گزینه \fB\-static\fR استفاده نشود، در این صورت پیوند با نسخه اشتراکی \&\fIlibtsan\fR انجام می‌شود. گزینه \fB\-static\-libtsan\fR به راه‌انداز GCC دستور می‌دهد که \fIlibtsan\fR را به صورت ایستا پیوند دهد، بدون اینکه لزوماً سایر کتابخانه‌ها به صورت ایستا پیوند داده شوند. .IP \fB\-static\-liblsan\fR 4 .IX Item "-static-liblsan" هنگامی که گزینه \fB\-fsanitize=leak\fR برای پیوند دادن یک برنامه استفاده می‌شود، راه‌انداز GCC به طور خودکار با \fBliblsan\fR پیوند برقرار می‌کند. اگر \&\fIliblsan\fR به عنوان یک کتابخانه اشتراکی در دسترس باشد و از گزینه \fB\-static\fR استفاده نشود، در این صورت پیوند با نسخه اشتراکی \&\fIliblsan\fR انجام می‌شود. گزینه \fB\-static\-liblsan\fR به راه‌انداز GCC دستور می‌دهد که \fIliblsan\fR را به صورت ایستا پیوند دهد، بدون اینکه لزوماً سایر کتابخانه‌ها به صورت ایستا پیوند داده شوند. .IP \fB\-static\-libubsan\fR 4 .IX Item "-static-libubsan" هنگامی که گزینه \fB\-fsanitize=undefined\fR برای پیوند دادن یک برنامه استفاده می‌شود، راه‌انداز GCC به طور خودکار با \fBlibubsan\fR پیوند برقرار می‌کند. اگر \&\fIlibubsan\fR به عنوان یک کتابخانه اشتراکی در دسترس باشد و از گزینه \fB\-static\fR استفاده نشود، در این صورت پیوند با نسخه اشتراکی \&\fIlibubsan\fR انجام می‌شود. گزینه \fB\-static\-libubsan\fR به راه‌انداز GCC دستور می‌دهد که \fIlibubsan\fR را به صورت ایستا پیوند دهد، بدون اینکه لزوماً سایر کتابخانه‌ها به صورت ایستا پیوند داده شوند. .IP \fB\-static\-libstdc++\fR 4 .IX Item "-static-libstdc++" هنگامی که برنامه \fBg++\fR برای پیوند دادن یک برنامه ++C استفاده می‌شود، معمولاً به طور خودکار با \fBlibstdc++\fR پیوند برقرار می‌کند. اگر \&\fIlibstdc++\fR به عنوان یک کتابخانه اشتراکی در دسترس باشد و از گزینه \&\fB\-static\fR استفاده نشود، در این صورت پیوند با نسخه اشتراکی \fIlibstdc++\fR انجام می‌شود. این حالت معمولاً مناسب است. با این حال، گاهی اوقات تثبیت نسخه \fIlibstdc++\fR مورد استفاده برنامه بدون پیش رفتن به سوی پیوند کاملاً ایستا مفید است. گزینه \&\fB\-static\-libstdc++\fR به راه‌انداز \fBg++\fR دستور می‌دهد که \fIlibstdc++\fR را به صورت ایستا پیوند دهد، بدون اینکه لزوماً سایر کتابخانه‌ها به صورت ایستا پیوند داده شوند..IP \fB\-symbolic\fR 4 .IX Item "-symbolic" هنگام ساخت یک شیء اشتراکی (shared object)، ارجاعات به نمادهای سراسری را مقید (bind) می‌کند. در صورت وجود هرگونه ارجاع حل‌نشده هشدار می‌دهد (مگر اینکه توسط گزینه پیونددهنده \fB\-Xlinker \-z \-Xlinker defs\fR لغو شده باشد). تنها شمار اندکی از سیستم‌ها از این گزینه پشتیبانی می‌کنند. .IP "\fB\-T\fR \fIscript\fR" 4 .IX Item "-T script" از \fIscript\fR به عنوان اسکریپت پیونددهنده (linker script) استفاده می‌کند. این گزینه در اکثر سیستم‌هایی که از پیونددهنده GNU استفاده می‌کنند پشتیبانی می‌شود. در برخی مقصدها، مانند مقصدهای bare\-board بدون سیستم‌عامل، ممکن است گزینه \fB\-T\fR هنگام پیوند دادن برای جلوگیری از ارجاع به نمادهای تعریف‌نشده الزامی باشد. .IP "\fB\-Xlinker\fR \fIoption\fR" 4 .IX Item "-Xlinker option" \fIoption\fR را به عنوان یک گزینه به پیونددهنده ارسال می‌کند. می‌توانید از این گزینه برای ارائه گزینه‌های پیونددهنده مختص سیستم که GCC آن‌ها را نمی‌شناسد، استفاده کنید. .Sp اگر می‌خواهید گزینه‌ای را ارسال کنید که یک آرگومان جداگانه می‌پذیرد، باید دو بار از \&\fB\-Xlinker\fR استفاده کنید؛ یک‌بار برای گزینه و یک‌بار برای آرگومان. برای نمونه، جهت ارسال \fB\-assert definitions\fR، باید بنویسید \&\fB\-Xlinker \-assert \-Xlinker definitions\fR. نوشتن \&\fB\-Xlinker "\-assert definitions"\fR کار نخواهد کرد، زیرا کل رشته را به عنوان یک آرگومان واحد ارسال می‌کند که آن چیزی نیست که پیونددهنده انتظار دارد. .Sp هنگام استفاده از پیونددهنده GNU، معمولاً راحت‌تر است که آرگومان‌ها را به جای آرگومان‌های جداگانه، با نحو \fIoption\fR\fB=\fR\fIvalue\fR به گزینه‌های پیونددهنده ارسال کنید. برای نمونه، می‌توانید به جای \&\fB\-Xlinker \-Map \-Xlinker output.map\fR عبارت \&\fB\-Xlinker \-Map=output.map\fR را مشخص کنید. ممکن است پیونددهنده‌های دیگر از این نحو برای گزینه‌های خط فرمان پشتیبانی نکنند. .IP \fB\-Wl,\fR\fIoption\fR 4 .IX Item "-Wl,option" \fIoption\fR را به عنوان یک گزینه به پیونددهنده ارسال می‌کند. اگر \fIoption\fR حاوی کاما باشد، در محل کاماها به چند گزینه تقسیم می‌شود. می‌توانید از این نحو برای ارسال یک آرگومان به گزینه استفاده کنید. برای نمونه، \fB\-Wl,\-Map,output.map\fR گزینه \fB\-Map output.map\fR را به پیونددهنده ارسال می‌کند. هنگام استفاده از پیونددهنده GNU، همچنین می‌توانید با \&\fB\-Wl,\-Map=output.map\fR به همان نتیجه برسید. .IP "\fB\-u\fR \fIsymbol\fR" 4 .IX Item "-u symbol" چنین وانمود می‌کند که نماد \fIsymbol\fR تعریف‌نشده است، تا پیونددهی ماژول‌های کتابخانه‌ای برای تعریف آن اجباری شود. می‌توانید چندین بار از \fB\-u\fR با نمادهای مختلف استفاده کنید تا بارگذاری ماژول‌های کتابخانه‌ای اضافی تحمیل شود. .IP "\fB\-z\fR \fIkeyword\fR" 4 .IX Item "-z keyword" گزینه \&\fB\-z\fR همراه با کلمه کلیدی \&\fIkeyword\fR مستقیماً به پیونددهنده ارسال می‌شود. برای مقادیر مجاز و معانی آن‌ها، بخش مربوطه را در مستندات پیونددهنده خود ببینید. .SS "گزینه‌های جستجوی دایرکتوری (Options for Directory Search)" .IX Subsection "Options for Directory Search" این گزینه‌ها دایرکتوری‌هایی را برای جستجوی فایل‌های سرایند (header files)، کتابخانه‌ها و بخش‌هایی از کامپایلر مشخص می‌کنند: .IP "\fB\-I\fR \fIdir\fR" 4 .IX Item "-I dir" .PD 0 .IP "\fB\-iquote\fR \fIdir\fR" 4 .IX Item "-iquote dir" .IP "\fB\-isystem\fR \fIdir\fR" 4 .IX Item "-isystem dir" .IP "\fB\-idirafter\fR \fIdir\fR" 4 .IX Item "-idirafter dir" .PD دایرکتوری \fIdir\fR را به فهرست دایرکتوری‌هایی که در طول پیش‌پردازش برای فایل‌های سرایند جستجو می‌شوند، اضافه می‌کند. اگر \fIdir\fR با \fB=\fR یا \f(CW$SYSROOT\fR آغاز شود، آن‌گاه \fB=\fR یا \f(CW$SYSROOT\fR با پیشوند sysroot جایگزین می‌شود؛ به \&\fB\-\-sysroot\fR و \fB\-isysroot\fR مراجعه کنید. .Sp دایرکتوری‌های مشخص‌شده با \fB\-iquote\fR تنها برای شکل نقل‌قولی دستور، یعنی \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR، اعمال می‌شوند. دایرکتوری‌های مشخص‌شده با \fB\-I\fR، \fB\-isystem\fR یا \fB\-idirafter\fR هم برای جستجوی دستور \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR و هم \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR اعمال می‌شوند. .Sp می‌توانید هر تعداد یا ترکیبی از این گزینه‌ها را در خط فرمان برای جستجوی فایل‌های سرایند در چندین دایرکتوری مشخص کنید. ترتیب جستجو به شرح زیر است: .RS 4 .IP 1. 4 .IX Item "1." برای شکل نقل‌قولی دستور include، ابتدا دایرکتوری فایل فعلی جستجو می‌شود. .IP 2. 4 .IX Item "2." برای شکل نقل‌قولی دستور include، دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-iquote\fR به ترتیب از چپ به راست، همان‌گونه که در خط فرمان آمده‌اند، جستجو می‌شوند. .IP 3. 4 .IX Item "3." دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-I\fR به ترتیب از چپ به راست پیمایش می‌شوند. .IP 4. 4 .IX Item "4." دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-isystem\fR به ترتیب از چپ به راست پیمایش می‌شوند. .IP 5. 4 .IX Item "5." دایرکتوری‌های استاندارد سیستم پیمایش می‌شوند. .IP 6. 4 .IX Item "6." دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-idirafter\fR به ترتیب از چپ به راست پیمایش می‌شوند. .RE .RS 4 .Sp می‌توانید از \fB\-I\fR برای بازنویسی و جایگزینی یک فایل سرایند سیستم با نسخه خودتان استفاده کنید، چرا که این دایرکتوری‌ها قبل از دایرکتوری‌های استاندارد فایل‌های سرایند سیستم جستجو می‌شوند. با این حال، نباید از این گزینه برای افزودن دایرکتوری‌های حاوی فایل‌های سرایند سیستمی ارائه‌شده توسط ارائه‌دهنده (vendor) استفاده کنید؛ برای این منظور از \fB\-isystem\fR استفاده نمایید. .Sp گزینه‌های \fB\-isystem\fR و \fB\-idirafter\fR همچنین دایرکتوری را به عنوان یک دایرکتوری سیستمی علامت‌گذاری می‌کنند، به طوری که همان رفتار ویژه‌ای را دریافت می‌کند که برای دایرکتوری‌های استاندارد سیستم اعمال می‌شود. .Sp اگر یک دایرکتوری include استاندارد سیستم، یا یک دایرکتوری مشخص‌شده با \&\fB\-isystem\fR، هم‌زمان با \fB\-I\fR نیز مشخص شود، گزینه \fB\-I\fR نادیده گرفته می‌شود. دایرکتوری همچنان جستجو می‌شود اما به عنوان یک دایرکتوری سیستمی در جایگاه عادی خود در زنجیره include سیستم. این امر برای اطمینان از این است که سازوکار GCC برای اصلاح سرایندهای معیوب سیستم و ترتیب مربوط به دستور \f(CW\*(C`#include_next\*(C'\fR به طور ناخواسته تغییر نکند. اگر واقعاً نیاز به تغییر ترتیب جستجوی دایرکتوری‌های سیستمی دارید، از گزینه‌های \fB\-nostdinc\fR و/یا \fB\-isystem\fR استفاده کنید. .RE .IP \fB\-I\-\fR 4 .IX Item "-I-" مسیر include را تفکیک می‌کند. این گزینه منسوخ شده است. لطفاً برای دایرکتوری‌های \fB\-I\fR پیش از \fB\-I\-\fR از \fB\-iquote\fR استفاده کرده و گزینه \fB\-I\-\fR را حذف نمایید. .Sp هر دایرکتوری مشخص‌شده با گزینه‌های \fB\-I\fR پیش از \fB\-I\-\fR فقط برای سرایندهای درخواست‌شده با \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR جستجو می‌شود؛ آن‌ها برای \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR جستجو نمی‌شوند. اگر دایرکتوری‌های بیشتری با گزینه‌های \fB\-I\fR پس از \fB\-I\-\fR مشخص شوند، آن دایرکتوری‌ها برای همه دستورهای \fB#include\fR جستجو خواهند شد. .Sp علاوه بر این، \fB\-I\-\fR مانع از استفاده از دایرکتوریِ فایل فعلی به عنوان اولین دایرکتوری جستجو برای \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR می‌شود. هیچ راهی برای باطل کردن این اثر \fB\-I\-\fR وجود ندارد. .IP "\fB\-iprefix\fR \fIprefix\fR" 4 .IX Item "-iprefix prefix" عبارت \fIprefix\fR را به عنوان پیشوند برای گزینه‌های بعدی \fB\-iwithprefix\fR مشخص می‌کند. اگر این پیشوند نمایانگر یک دایرکتوری باشد، باید اسلش پایانی \fB/\fR را نیز بگنجانید. .IP "\fB\-iwithprefix\fR \fIdir\fR" 4 .IX Item "-iwithprefix dir" .PD 0 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4 .IX Item "-iwithprefixbefore dir" .PD \fIdir\fR را به پیشوندی که پیش‌تر با \&\fB\-iprefix\fR مشخص شده الحاق می‌کند و دایرکتوری حاصل را به مسیر جستجوی include می‌افزاید. گزینه \fB\-iwithprefixbefore\fR آن را در همان جایی قرار می‌دهد که \fB\-I\fR قرار می‌داد؛ گزینه \fB\-iwithprefix\fR آن را در جایی قرار می‌دهد که \fB\-idirafter\fR قرار می‌داد. .IP "\fB\-isysroot\fR \fIdir\fR" 4 .IX Item "-isysroot dir" این گزینه شبیه به گزینه \fB\-\-sysroot\fR است، اما تنها برای فایل‌های سرایند اعمال می‌شود (به جز در مقصدهای Darwin، که در آنجا هم برای فایل‌های سرایند و هم کتابخانه‌ها اعمال می‌گردد). برای اطلاعات بیشتر، گزینه \fB\-\-sysroot\fR را ببینید. .IP "\fB\-imultilib\fR \fIdir\fR" 4 .IX Item "-imultilib dir" از \fIdir\fR به عنوان یک زیردایرکتوری از دایرکتوریِ حاوی سرایندهای ++C مختص مقصد استفاده می‌کند. .IP \fB\-nostdinc\fR 4 .IX Item "-nostdinc" دایرکتوری‌های استاندارد سیستم را برای فایل‌های سرایند جستجو نمی‌کند. تنها دایرکتوری‌هایی جستجو می‌شوند که به طور صریح با گزینه‌های \fB\-I\fR، \&\fB\-iquote\fR، \fB\-isystem\fR و/یا \fB\-idirafter\fR مشخص شده‌اند (و در صورت لزوم، دایرکتوری فایل فعلی). .IP \fB\-nostdinc++\fR 4 .IX Item "-nostdinc++" فایل‌های سرایند را در دایرکتوری‌های استاندارد مختص ++C جستجو نمی‌کند، اما سایر دایرکتوری‌های استاندارد را همچنان جستجو می‌کند. (این گزینه هنگام ساخت کتابخانه ++C استفاده می‌شود.).IP \fB\-\-embed\-dir=\fR\fIdir\fR 4 .IX Item "--embed-dir=dir" دایرکتوری \fIdir\fR را به فهرست دایرکتوری‌های مورد جستجو برای دستور پیش‌پردازندهٔ \&\f(CW\*(C`#embed\*(C'\fR یا ماکروی \f(CW\*(C`_\|_has_embed\*(C'\fR اضافه می‌کند. هیچ دایرکتوری پیش‌فرضی برای \f(CW\*(C`#embed\*(C'\fR وجود ندارد. .Sp اگر \fIdir\fR با \fB=\fR یا \f(CW$SYSROOT\fR آغاز شود، آنگاه \fB=\fR یا \f(CW$SYSROOT\fR با پیشوند sysroot جایگزین می‌شود؛ گزینه‌های \&\fB\-\-sysroot\fR و \fB\-isysroot\fR را ببینید. .IP \fB\-iplugindir=\fR\fIdir\fR 4 .IX Item "-iplugindir=dir" دایرکتوریِ مورد جستجو برای افزایه‌هایی (plugins) را مشخص می‌کند که به جای \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR از طریق \fB\-fplugin=\fR\fIname\fR ارسال می‌شوند. این گزینه برای استفاده توسط کاربر در نظر گرفته نشده است، بلکه تنها توسط گرداننده (driver) ارسال می‌شود. .IP \fB\-L\fR\fIdir\fR 4 .IX Item "-Ldir" دایرکتوری \fIdir\fR را به فهرست دایرکتوری‌های مورد جستجو برای \fB\-l\fR اضافه می‌کند. .IP \fB\-B\fR\fIprefix\fR 4 .IX Item "-Bprefix" این گزینه مشخص می‌کند که فایل‌های اجرایی، کتابخانه‌ها، فایل‌های سرایند (include) و فایل‌های داده‌ایِ خودِ کامپایلر در کجا پیدا شوند. .Sp برنامهٔ گردانندهٔ کامپایلر یک یا چند زیربرنامه از میان \&\fBcpp\fR، \fBcc1\fR، \fBas\fR و \fBld\fR را اجرا می‌کند. این برنامه \&\fIprefix\fR را به عنوان پیشوند برای هر برنامه‌ای که اجرا می‌کند، هم با و هم بدون \fImachine\fR\fB/\fR\fIversion\fR\fB/\fR برای ماشین هدف و نسخهٔ کامپایلر مربوطه می‌آزماید. .Sp برای هر زیربرنامه‌ای که باید اجرا شود، گردانندهٔ کامپایلر ابتدا پیشوند \&\fB\-B\fR را (در صورت وجود) امتحان می‌کند. اگر آن نام پیدا نشود، یا اگر \fB\-B\fR مشخص نشده باشد، گرداننده دو پیشوند استاندارد \&\fI/usr/lib/gcc/\fR و \fI/usr/local/lib/gcc/\fR را امتحان می‌کند. اگر هیچ‌یک از آن‌ها به نام فایلی که پیدا شود ختم نشود، نام دست‌نخوردهٔ برنامه با استفاده از دایرکتوری‌های مشخص‌شده در متغیر محیطی \&\fBPATH\fR شما جستجو می‌شود. .Sp کامپایلر بررسی می‌کند که آیا مسیر ارائه‌شده توسط \fB\-B\fR به یک دایرکتوری اشاره دارد یا خیر، و در صورت لزوم نویسهٔ جداکنندهٔ دایرکتوری را به انتهای مسیر می‌افزاید. .Sp پیشوندهای \&\fB\-B\fR که عملاً نام دایرکتوری‌ها را مشخص می‌کنند، بر روی کتابخانه‌ها در پیونددهنده (linker) نیز اعمال می‌شوند، زیرا کامپایلر این گزینه‌ها را به گزینه‌های \fB\-L\fR برای پیونددهنده ترجمه می‌کند. آن‌ها همچنین بر روی فایل‌های سرایند در پیش‌پردازنده اعمال می‌شوند، زیرا کامپایلر این گزینه‌ها را به گزینه‌های \fB\-isystem\fR برای پیش‌پردازنده ترجمه می‌کند. در این حالت، کامپایلر \fBinclude\fR را به انتهای پیشوند الحاق می‌کند. .Sp فایل پشتیبانی زمان اجرای \fIlibgcc.a\fR نیز می‌تواند در صورت نیاز با استفاده از پیشوند \fB\-B\fR جستجو شود. اگر در آنجا یافت نشد، دو پیشوند استاندارد فوق آزمایش می‌شوند و تمام. اگر این فایل از آن طریق‌ها پیدا نشود، از فرآیند پیوند کنار گذاشته می‌شود. .Sp روش دیگر برای مشخص کردن پیشوندی بسیار شبیه به پیشوند \fB\-B\fR، استفاده از متغیر محیطی \fBGCC_EXEC_PREFIX\fR است. .Sp به عنوان یک راهکار موقت و ویژه (kludge)، اگر مسیر ارائه‌شده توسط \fB\-B\fR به صورت \&\fI[dir/]stageN/\fR باشد، که در آن \fIN\fR عددی در محدودهٔ 0 تا 9 است، آنگاه با \fI[dir/]include\fR جایگزین می‌شود. این ویژگی برای کمک به خودراه‌اندازی (boot\-strapping) کامپایلر است. .IP \fB\-no\-canonical\-prefixes\fR 4 .IX Item "-no-canonical-prefixes" هنگام ایجاد یک پیشوند نسبی، هیچ پیوند نمادینی را باز نکند، ارجاعات به \fB/../\fR یا \fB/./\fR را حل‌وفصل ننماید، و مسیر را به مسیر مطلق تبدیل نکند. .IP \fB\-\-sysroot=\fR\fIdir\fR 4 .IX Item "--sysroot=dir" از \fIdir\fR به عنوان دایرکتوری ریشهٔ منطقی برای سرایندها و کتابخانه‌ها استفاده می‌کند. برای مثال، اگر کامپایلر به طور معمول سرایندها را در \&\fI/usr/include\fR و کتابخانه‌ها را در \fI/usr/lib\fR جستجو کند، به جای آن \&\fIdir/usr/include\fR و \fIdir/usr/lib\fR را جستجو می‌کند. .Sp اگر هم از این گزینه و هم از گزینهٔ \fB\-isysroot\fR استفاده کنید، آنگاه گزینهٔ \fB\-\-sysroot\fR بر روی کتابخانه‌ها اعمال می‌شود، اما گزینهٔ \&\fB\-isysroot\fR بر روی فایل‌های سرایند اعمال می‌گردد. .Sp پیونددهندهٔ GNU (با شروع از نسخهٔ 2.16) از پشتیبانی لازم برای این گزینه برخوردار است. اگر پیونددهندهٔ شما از این گزینه پشتیبانی نکند، بخش مربوط به فایل‌های سرایند در \fB\-\-sysroot\fR همچنان کار می‌کند، اما بخش مربوط به کتابخانه‌ها کار نخواهد کرد. .IP \fB\-\-no\-sysroot\-suffix\fR 4 .IX Item "--no-sysroot-suffix" برای برخی هدف‌ها، بسته به گزینه‌های دیگری که استفاده شده است، پسوندی به دایرکتوری ریشهٔ مشخص‌شده با \fB\-\-sysroot\fR اضافه می‌شود، به گونه‌ای که سرایندها برای مثال ممکن است به جای \&\fIdir/usr/include\fR در \&\fIdir/suffix/usr/include\fR پیدا شوند. این گزینه اضافه شدن چنین پسوندی را غیرفعال می‌کند..SS "گزینه‌های مربوط به قراردادهای تولید کد (Options for Code Generation Conventions)" .IX Subsection "Options for Code Generation Conventions" این گزینه‌های مستقل از ماشین، قراردادهای واسط به‌کاررفته در تولید کد را کنترل می‌کنند. .PP بیشتر آن‌ها هم دارای شکل مثبت و هم شکل منفی هستند؛ شکل منفی \fB\-ffoo\fR به‌صورت \fB\-fno\-foo\fR است. در جدول زیر، تنها یکی از شکل‌ها فهرست شده است\-\-\-شکلی که پیش‌فرض نیست. شما می‌توانید شکل دیگر را با حذف \fBno\-\fR یا اضافه کردن آن مشخص کنید. .IP \fB\-fstack\-reuse=\fR\fIreuse\-level\fR 4 .IX Item "-fstack-reuse=reuse-level" این گزینه استفادهٔ مجدد از فضای پشته را برای متغیرهای محلی/اتوماتیک تعریف‌شده توسط کاربر و متغیرهای موقت تولیدشده توسط کامپایلر کنترل می‌کند. \fIreuse_level\fR می‌تواند \fBall\fR، \&\fBnamed_vars\fR یا \fBnone\fR باشد. مقدار \fBall\fR استفادهٔ مجدد از پشته را برای تمام متغیرهای محلی و متغیرهای موقت فعال می‌کند، \fBnamed_vars\fR استفادهٔ مجدد را تنها برای متغیرهای محلی نام‌دار تعریف‌شده توسط کاربر فعال می‌سازد، و \fBnone\fR استفادهٔ مجدد از پشته را به‌طور کامل غیرفعال می‌کند. مقدار پیش‌فرض \fBall\fR است. این گزینه زمانی مورد نیاز است که برنامه طول عمر یک متغیر محلی دارای حوزه یا یک شیء موقت تولیدشده توسط کامپایلر را فراتر از نقطهٔ پایان تعریف‌شده توسط زبان گسترش دهد. هنگامی که طول عمر یک متغیر به پایان می‌رسد، در صورتی که متغیر در حافظه مقیم باشد، کامپایلر بهینه‌ساز این آزادی را دارد که از فضای پشتهٔ آن برای متغیرهای موقت دیگر یا متغیرهای محلی درون حوزه‌ای که بازهٔ حیات آن‌ها با آن هم‌پوشانی ندارد، مجدداً استفاده کند. کدهای قدیمی (legacy) که طول عمر متغیرهای محلی را گسترش می‌دهند، احتمالاً با بهینه‌سازی استفادهٔ مجدد از پشته دچار شکست می‌شوند. .Sp به عنوان مثال، .Sp .Vb 3 \& int *p; \& { \& int local1; \& \& p = &local1; \& local1 = 10; \& .... \& } \& { \& int local2; \& local2 = 20; \& ... \& } \& \& if (*p == 10) // out of scope use of local1 \& { \& \& } .Ve .Sp مثالی دیگر: .Sp .Vb 6 \& struct A \& { \& A(int k) : i(k), j(k) { } \& int i; \& int j; \& }; \& \& A *ap; \& \& void foo(const A& ar) \& { \& ap = &ar; \& } \& \& void bar() \& { \& foo(A(10)); // temp object\*(Aqs lifetime ends when foo returns \& \& { \& A a(20); \& .... \& } \& ap\->i+= 10; // ap references out of scope temp whose space \& // is reused with a. What is the value of ap\->i? \& } .Ve .Sp طول عمر یک شیء موقت تولیدشده توسط کامپایلر به‌خوبی در استاندارد ++C تعریف شده است. هنگامی که طول عمر یک شیء موقت به پایان می‌رسد، اگر شیء موقت در حافظه مقیم باشد، کامپایلر بهینه‌ساز این آزادی را دارد که از فضای پشتهٔ آن برای اشیاء موقت دیگر یا متغیرهای محلی درون حوزه‌ای که دامنهٔ حیات آن‌ها هم‌پوشانی ندارد، دوباره استفاده کند. با این حال، از آنجا که برخی از کدهای قدیمی به رفتار کامپایلرهای قدیمی‌تر وابسته هستند که در آن‌ها فضای پشتهٔ متغیرهای موقت بازیافت نمی‌شد، استفادهٔ مجدد تهاجمی از پشته می‌تواند به خطاهای زمان اجرا منجر شود. این گزینه برای کنترل بهینه‌سازی استفادهٔ مجدد از پشته برای متغیرهای موقت استفاده می‌شود. .IP \fB\-ftrapv\fR 4 .IX Item "-ftrapv" این گزینه برای سرریز علامت‌دار در عملیات جمع، تفریق و ضرب تله (trap) تولید می‌کند. گزینه‌های \fB\-ftrapv\fR و \fB\-fwrapv\fR یکدیگر را لغو (override) می‌کنند؛ بنابراین، استفاده از \&\fB\-ftrapv\fR \fB\-fwrapv\fR در خط فرمان منجر به اعمال \fB\-fwrapv\fR می‌شود. توجه داشته باشید که تنها گزینه‌های فعال یکدیگر را لغو می‌کنند، بنابراین استفاده از \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR در خط فرمان منجر به اعمال \fB\-ftrapv\fR خواهد شد. .IP \fB\-fwrapv\fR 4 .IX Item "-fwrapv" این گزینه به کامپایلر دستور می‌دهد فرض کند که سرریز محاسبات علامت‌دار در جمع، تفریق و ضرب با استفاده از نمایش مکمل دو (twos\-complement) به‌صورت چرخشی (wrap around) رفتار می‌کند. این پرچم برخی بهینه‌سازی‌ها را فعال و برخی دیگر را غیرفعال می‌کند. گزینه‌های \fB\-ftrapv\fR و \fB\-fwrapv\fR یکدیگر را لغو می‌کنند؛ بنابراین، استفاده از \&\fB\-ftrapv\fR \fB\-fwrapv\fR در خط فرمان منجر به اعمال \fB\-fwrapv\fR می‌شود. توجه داشته باشید که تنها گزینه‌های فعال یکدیگر را لغو می‌کنند، بنابراین استفاده از \fB\-ftrapv\fR \fB\-fwrapv\fR \fB\-fno\-wrapv\fR در خط فرمان منجر به اعمال \fB\-ftrapv\fR خواهد شد. .IP \fB\-fwrapv\-pointer\fR 4 .IX Item "-fwrapv-pointer" این گزینه به کامپایلر دستور می‌دهد فرض کند که سرریز محاسبات اشاره‌گر در جمع و تفریق با استفاده از نمایش مکمل دو به‌صورت چرخشی رفتار می‌کند. این پرچم برخی بهینه‌سازی‌ها را که فرض می‌کنند سرریز اشاره‌گر نامعتبر است غیرفعال می‌کند. .IP \fB\-fstrict\-overflow\fR 4 .IX Item "-fstrict-overflow" این گزینه به معنی اعمال \fB\-fno\-wrapv\fR \fB\-fno\-wrapv\-pointer\fR است و در صورت منفی شدن، به معنی اعمال \fB\-fwrapv\fR \fB\-fwrapv\-pointer\fR خواهد بود. .IP \fB\-fexceptions\fR 4 .IX Item "-fexceptions" مدیریت استثناها (exception handling) را فعال می‌کند. این گزینه کدهای اضافی مورد نیاز برای انتشار استثناها را تولید می‌کند. برای برخی اهداف، این امر موجب می‌شود که GCC اطلاعات بازپیچی فریم (frame unwind information) را برای تمام توابع تولید کند که می‌تواند سربار اندازهٔ دادهٔ قابل‌توجهی به همراه داشته باشد، اگرچه تأثیری بر اجرا نمی‌گذارد. اگر این گزینه را تعیین نکنید، GCC به‌طور پیش‌فرض آن را برای زبان‌هایی مانند ++C که معمولاً به مدیریت استثنا نیاز دارند فعال، و برای زبان‌هایی مانند C که معمولاً به آن نیازی ندارند غیرفعال می‌کند. با این حال، ممکن است هنگام کامپایل کد C که باید به‌درستی با گرداننده‌های استثنای نوشته‌شده در ++C تعامل داشته باشد، به فعال کردن این گزینه نیاز پیدا کنید. همچنین اگر در حال کامپایل برنامه‌های قدیمی‌تر ++C هستید که از مدیریت استثنا استفاده نمی‌کنند، ممکن است مایل به غیرفعال کردن این گزینه باشید. .IP \fB\-fnon\-call\-exceptions\fR 4 .IX Item "-fnon-call-exceptions" کدی تولید می‌کند که به دستورالعمل‌های تله‌انداز اجازهٔ پرتاب استثناها را می‌دهد. توجه داشته باشید که این به پشتیبانی زمان اجرای مختص هر بستر نیاز دارد که در همه جا وجود ندارد. علاوه بر این، تنها به دستورالعمل‌های \fIتله‌انداز\fR اجازه می‌دهد استثنا پرتاب کنند، یعنی ارجاعات حافظه یا دستورالعمل‌های ممیز شناور. این گزینه اجازه نمی‌دهد استثناها از گرداننده‌های سیگنال دلخواه مانند \f(CW\*(C`SIGALRM\*(C'\fR پرتاب شوند. این گزینه \fB\-fexceptions\fR را فعال می‌کند. .IP \fB\-fdelete\-dead\-exceptions\fR 4 .IX Item "-fdelete-dead-exceptions" در نظر می‌گیرد که دستورالعمل‌هایی که ممکن است استثنا پرتاب کنند اما در غیر این صورت نقشی در اجرای برنامه ندارند، می‌توانند از طریق بهینه‌سازی حذف شوند. این امر بر فراخوانی توابع تأثیری ندارد، مگر توابعی که دارای ویژگی‌های \&\f(CW\*(C`pure\*(C'\fR یا \f(CW\*(C`const\*(C'\fR باشند. این گزینه به‌طور پیش‌فرض برای کامپایلرهای Ada و ++C، بر اساس مجوزی که مشخصات زبان داده است، فعال است. گذارهای بهینه‌سازی که باعث حذف استثناهای مرده می‌شوند، به‌طور مستقل در سطوح بهینه‌سازی مختلف فعال می‌گردند. .IP \fB\-funwind\-tables\fR 4 .IX Item "-funwind-tables" مشابه \fB\-fexceptions\fR است، با این تفاوت که تنها داده‌های ایستای مورد نیاز را تولید می‌کند و به هیچ روش دیگری بر کد تولیدشده تأثیر نمی‌گذارد. شما معمولاً نیازی به فعال کردن این گزینه ندارید؛ در عوض، پردازشگر زبانی که به این پردازش نیاز دارد، آن را از جانب شما فعال می‌کند. .IP \fB\-fasynchronous\-unwind\-tables\fR 4 .IX Item "-fasynchronous-unwind-tables" در صورت پشتیبانی توسط ماشین مقصد، جدول بازپیچی را در قالب DWARF تولید می‌کند. این جدول در هر مرز دستورالعمل دقیق است، بنابراین می‌تواند برای بازپیچی پشته از رویدادهای ناهمگام (مانند اشکال‌زدا یا زباله‌روب) استفاده شود. .IP \fB\-fno\-gnu\-unique\fR 4 .IX Item "-fno-gnu-unique" در سیستم‌هایی با اسمبلر GNU و کتابخانهٔ C جدید، کامپایلر ++C از پیوند \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR استفاده می‌کند تا اطمینان یابد که تعاریف اعضای داده‌ای ایستای الگو و متغیرهای محلی ایستا در توابع درون‌خطی حتی در حضور \f(CW\*(C`RTLD_LOCAL\*(C'\fR یکتا هستند؛ این امر برای جلوگیری از بروز مشکل در کتابخانه‌ای که توسط دو افزونهٔ \f(CW\*(C`RTLD_LOCAL\*(C'\fR مختلف استفاده می‌شود و وابسته به تعریفی در یکی از آن‌هاست و در نتیجه با دیگری دربارهٔ پیوند نماد اختلاف دارد، ضروری است. اما این باعث نادیده گرفته شدن \f(CW\*(C`dlclose\*(C'\fR برای اشیاء اشتراکی پویای (DSO) متأثر می‌شود؛ اگر برنامهٔ شما به مقداردهی اولیهٔ مجدد یک DSO از طریق \f(CW\*(C`dlclose\*(C'\fR و \f(CW\*(C`dlopen\*(C'\fR وابسته است، می‌توانید از \&\fB\-fno\-gnu\-unique\fR استفاده کنید. .IP \fB\-fpcc\-struct\-return\fR 4 .IX Item "-fpcc-struct-return" مقادیر «کوتاه» \f(CW\*(C`struct\*(C'\fR و \f(CW\*(C`union\*(C'\fR را مانند مقادیر طولانی‌تر به جای ثبات‌ها در حافظه برمی‌گرداند. این قرارداد کارایی کمتری دارد، اما این مزیت را داراست که امکان فراخوانی متقابل میان فایل‌های کامپایل‌شده با GCC و فایل‌های کامپایل‌شده با سایر کامپایلرها، به‌ویژه Portable C Compiler (pcc) را فراهم می‌کند. .Sp قرارداد دقیق برای بازگرداندن ساختارها در حافظه به ماکروهای پیکربندی مقصد وابسته است. .Sp ساختارها و اجتماعات کوتاه آن‌هایی هستند که اندازه و هم‌ترازی آن‌ها با اندازه‌ها و هم‌ترازی یکی از انواع عدد صحیح مطابقت دارد. .Sp \&\fBهشدار:\fR کدی که با سوییچ \fB\-fpcc\-struct\-return\fR کامپایل شده است، از نظر دودویی با کدی که با سوییچ \&\fB\-freg\-struct\-return\fR کامپایل شده سازگار نیست. از آن برای انطباق با یک رابط باینری کاربردی (ABI) غیرپیش‌فرض استفاده کنید..IP \fB\-freg\-struct\-return\fR 4 .IX Item "-freg-struct-return" در صورت امکان، مقادیر \f(CW\*(C`struct\*(C'\fR و \f(CW\*(C`union\*(C'\fR را در ثبات‌ها (registers) بازمی‌گرداند. این روش برای ساختارهای کوچک، کارآمدتر از \&\fB\-fpcc\-struct\-return\fR است. .Sp اگر نه \fB\-fpcc\-struct\-return\fR و نه \&\fB\-freg\-struct\-return\fR را مشخص کنید، GCC به قراردادی که برای معماری مقصد استاندارد است، پیش‌فرض می‌شود. اگر قرارداد استانداردی وجود نداشته باشد، GCC به \fB\-fpcc\-struct\-return\fR پیش‌فرض خواهد شد، مگر در مقصدهایی که GCC کامپایلر اصلی است. در آن موارد، می‌توانیم استاندارد را انتخاب کنیم و گزینه کارآمدتر بازگرداندن از طریق ثبات را انتخاب کرده‌ایم. .Sp \&\fBهشدار:\fR کدی که با سوییچ \fB\-freg\-struct\-return\fR کامپایل شده است با کدی که با سوییچ \&\fB\-fpcc\-struct\-return\fR کامپایل شده، سازگاری باینری ندارد. از آن برای سازگاری با یک رابط دودویی کاربردی (ABI) غیرپیش‌فرض استفاده کنید. .IP \fB\-fshort\-enums\fR 4 .IX Item "-fshort-enums" به یک نوع \f(CW\*(C`enum\*(C'\fR فقط به همان تعداد بایتی که برای محدوده مقادیر اعلام‌شده‌اش نیاز دارد، فضا اختصاص می‌دهد. به‌طور مشخص، نوع \f(CW\*(C`enum\*(C'\fR معادل کوچک‌ترین نوع عدد صحیحی خواهد بود که فضای کافی داشته باشد. این گزینه برای یک نوع شمارشی با نوع پایه‌ای ثابت (fixed underlying type) هیچ تاثیری ندارد. .Sp \&\fBهشدار:\fR سوییچ \fB\-fshort\-enums\fR باعث می‌شود GCC کدی تولید کند که با کد تولیدشده بدون این سوییچ سازگاری باینری ندارد. از آن برای سازگاری با یک رابط دودویی کاربردی (ABI) غیرپیش‌فرض استفاده کنید. .IP \fB\-fshort\-wchar\fR 4 .IX Item "-fshort-wchar" نوع پایه‌ای \f(CW\*(C`wchar_t\*(C'\fR را بازنویسی کرده و آن را به‌جای پیش‌فرض سیستم مقصد، برابر با \f(CW\*(C`short unsigned int\*(C'\fR قرار می‌دهد. این گزینه برای ساخت برنامه‌هایی که قرار است تحت WINE اجرا شوند مفید است. .Sp \&\fBهشدار:\fR سوییچ \fB\-fshort\-wchar\fR باعث می‌شود GCC کدی تولید کند که با کد تولیدشده بدون این سوییچ سازگاری باینری ندارد. از آن برای سازگاری با یک رابط دودویی کاربردی (ABI) غیرپیش‌فرض استفاده کنید. .IP \fB\-fcommon\fR 4 .IX Item "-fcommon" در کد C، این گزینه جای‌گذاری متغیرهای سراسری تعریف‌شده بدون مقدار اولیه‌ساز، موسوم به \fItentative definitions\fR (تعریف‌های موقت) در استاندارد C را کنترل می‌کند. تعریف‌های موقت متمایز از اعلان‌های متغیر با کلیدواژه \f(CW\*(C`extern\*(C'\fR هستند که هیچ فضایی تخصیص نمی‌دهند. .Sp حالت پیش‌فرض \fB\-fno\-common\fR است که مشخص می‌کند کامپایلر متغیرهای سراسری مقداردهی‌نشده را در بخش BSS از فایل شیء قرار دهد. این کار مانع از ادغام تعریف‌های موقت توسط پیونددهنده می‌شود، بنابراین اگر یک متغیر به‌طور تصادفی در بیش از یک واحد کامپایل تعریف شده باشد، خطای چندباره تعریف‌شدن (multiple\-definition) دریافت می‌کنید. .Sp گزینه \fB\-fcommon\fR متغیرهای سراسری مقداردهی‌نشده را در یک بلوک مشترک (common block) قرار می‌دهد. این به پیونددهنده اجازه می‌دهد تمام تعریف‌های موقت یک متغیر یکسان در واحدهای کامپایل مختلف را به یک شیء واحد یا به یک تعریف غیرموقت پیوند دهد. این رفتار با C++ ناسازگار است و در بسیاری از معماری‌های مقصد جریمه‌هایی بر سرعت و اندازه کد در ارجاع به متغیرهای سراسری تحمیل می‌کند. کاربرد اصلی آن، امکان‌پذیر ساختن پیوند دادن کدهای قدیمی (legacy) بدون خطا است. .IP \fB\-fno\-ident\fR 4 .IX Item "-fno-ident" دستورالعمل \f(CW\*(C`#ident\*(C'\fR را نادیده می‌گیرد. .IP \fB\-finhibit\-size\-directive\fR 4 .IX Item "-finhibit-size-directive" دستورالعمل اسمبلی \f(CW\*(C`.size\*(C'\fR یا هر چیز دیگری را که در صورت نصف شدن تابع در میانه و قرار گرفتن دو نیمه آن در مکان‌های دور از هم در حافظه مشکل ایجاد می‌کند، تولید نمی‌کند. این گزینه هنگام کامپایل \fIcrtstuff.c\fR استفاده می‌شود؛ نباید برای هیچ کاربرد دیگری به آن نیاز پیدا کنید. .IP \fB\-fverbose\-asm\fR 4 .IX Item "-fverbose-asm" اطلاعات تفسیری اضافی در کد اسمبلی تولیدشده قرار می‌دهد تا خوانایی آن بیشتر شود. این گزینه عموماً فقط برای کسانی مفید است که واقعاً به خواندن کد اسمبلی تولیدشده نیاز دارند (احتمالاً هنگام اشکال‌زدایی خود کامپایلر). .Sp گزینه پیش‌فرض، \&\fB\-fno\-verbose\-asm\fR، باعث حذف اطلاعات اضافی می‌شود و هنگام مقایسه دو فایل اسمبلی مفید است. .Sp توضیحات اضافه‌شده شامل موارد زیر است: .RS 4 .IP * 4 اطلاعات مربوط به نسخه کامپایلر و گزینه‌های خط فرمان، .IP * 4 خطوط کد منبع مرتبط با دستورالعمل‌های اسمبلی، در قالب FILENAME:LINENUMBER:CONTENT OF LINE، .IP * 4 نکاتی درباره اینکه کدام عبارات سطح بالا با عملوندهای مختلف دستورالعمل اسمبلی مطابقت دارند. .RE .RS 4 .Sp برای نمونه، با این فایل منبع C: .Sp .Vb 4 \& int test (int n) \& { \& int i; \& int total = 0; \& \& for (i = 0; i < n; i++) \& total += i * i; \& \& return total; \& } .Ve .Sp کامپایل به اسمبلی (x86_64) از طریق \fB\-S\fR و ارسال مستقیم نتیجه به stdout با \fB\-o\fR \fB\-\fR .Sp .Vb 1 \& gcc \-S test.c \-fverbose\-asm \-Os \-o \- .Ve .Sp خروجی‌ای مشابه این تولید می‌کند: .Sp .Vb 5 \& .file "test.c" \& # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64\-pc\-linux\-gnu) \& [...snip...] \& # options passed: \& [...snip...] \& \& .text \& .globl test \& .type test, @function \& test: \& .LFB0: \& .cfi_startproc \& # test.c:4: int total = 0; \& xorl %eax, %eax # \& # test.c:6: for (i = 0; i < n; i++) \& xorl %edx, %edx # i \& .L2: \& # test.c:6: for (i = 0; i < n; i++) \& cmpl %edi, %edx # n, i \& jge .L5 #, \& # test.c:7: total += i * i; \& movl %edx, %ecx # i, tmp92 \& imull %edx, %ecx # i, tmp92 \& # test.c:6: for (i = 0; i < n; i++) \& incl %edx # i \& # test.c:7: total += i * i; \& addl %ecx, %eax # tmp92, \& jmp .L2 # \& .L5: \& # test.c:10: } \& ret \& .cfi_endproc \& .LFE0: \& .size test, .\-test \& .ident "GCC: (GNU) 7.0.0 20160809 (experimental)" \& .section .note.GNU\-stack,"",@progbits .Ve .Sp این توضیحات برای انسان‌ها در نظر گرفته شده‌اند نه ماشین‌ها، و بنابراین فرمت دقیق آن‌ها ممکن است تغییر کند. .RE .IP \fB\-frecord\-gcc\-switches\fR 4 .IX Item "-frecord-gcc-switches" این سوییچ باعث می‌شود خط فرمانی که برای فراخوانی کامپایلر استفاده شده است، در فایل شیء در حال ساخت ضبط و ذخیره شود. این سوییچ تنها روی برخی از معماری‌های مقصد پیاده‌سازی شده است و قالب دقیق ذخیره‌سازی به معماری مقصد و قالب فایل باینری بستگی دارد، اما معمولاً به شکل بخشی حاوی متن ASCII است. این سوییچ با سوییچ \fB\-fverbose\-asm\fR مرتبط است، اما آن سوییچ اطلاعات را فقط به‌عنوان توضیح در فایل خروجی اسمبلی ثبت می‌کند، بنابراین هرگز به فایل شیء راه پیدا نمی‌کند. همچنین برای روش دیگری جهت ذخیره گزینه‌های کامپایلر در فایل شیء، \fB\-grecord\-gcc\-switches\fR را ببینید. .IP \fB\-fpic\fR 4 .IX Item "-fpic" کد مستقل از موقعیت (PIC) مناسب برای استفاده در یک کتابخانه مشترک را در صورت پشتیبانی توسط ماشین مقصد تولید می‌کند. چنین کدی به تمام آدرس‌های ثابت از طریق یک جدول افست سراسری (GOT) دسترسی پیدا می‌کند. بارگذار پویا در زمان شروع برنامه، مدخل‌های GOT را حل می‌کند (بارگذار پویا بخشی از GCC نیست؛ بلکه بخشی از سیستم‌عامل است). اگر اندازه GOT برای فایل اجرایی پیوند داده شده از بیشینه مقدار مشخص‌شده برای آن ماشین فراتر رود، پیامی از طرف پیونددهنده دریافت می‌کنید که نشان می‌دهد \&\fB\-fpic\fR کار نمی‌کند؛ در این حالت، به‌جای آن با \fB\-fPIC\fR بازکامپایل کنید. (این مقادیر بیشینه در SPARC برابر با 8k، در AArch64 برابر با 28k و در m68k و RS/6000 برابر با 32k است. معماری x86 چنین محدودیتی ندارد.) .Sp کد مستقل از موقعیت به پشتیبانی ویژه‌ای نیاز دارد، و بنابراین فقط روی ماشین‌های خاصی کار می‌کند. برای x86، کامپایلر GCC از PIC برای System V پشتیبانی می‌کند اما برای Sun 386i پشتیبانی نمی‌کند. کد تولیدشده برای IBM RS/6000 همیشه مستقل از موقعیت است. .Sp هنگامی که این پرچم تنظیم شود، ماکروهای \f(CW\*(C`_\|_pic_\|_\*(C'\fR و \f(CW\*(C`_\|_PIC_\|_\*(C'\fR با مقدار 1 تعریف می‌شوند..IP \fB\-fPIC\fR 4 .IX Item "-fPIC" در صورت پشتیبانی توسط ماشین مقصد، کد مستقل از موقعیت (position\-independent) مناسب برای پیوند پویا و بدون محدودیت روی اندازه جدول آفست سراسری (GOT) تولید می‌کند. این گزینه در AArch64، m68k، PowerPC و SPARC تفاوت ایجاد می‌کند. .Sp کد مستقل از موقعیت نیازمند پشتیبانی ویژه‌ای است، و بنابراین فقط روی ماشین‌های خاصی کار می‌کند. .Sp هنگامی که این پرچم تنظیم شود، ماکروهای \f(CW\*(C`_\|_pic_\|_\*(C'\fR و \f(CW\*(C`_\|_PIC_\|_\*(C'\fR با مقدار 2 تعریف می‌شوند. .IP \fB\-fpie\fR 4 .IX Item "-fpie" .PD 0 .IP \fB\-fPIE\fR 4 .IX Item "-fPIE" .PD این گزینه‌ها مشابه \fB\-fpic\fR و \fB\-fPIC\fR هستند، اما کد مستقل از موقعیت تولیدشده تنها می‌تواند در فایل‌های اجرایی پیوند داده شود. معمولاً این گزینه‌ها برای کامپایل کدی استفاده می‌شوند که با استفاده از گزینه \fB\-pie\fR در GCC پیوند خواهد خورد. .Sp هر دوی \&\fB\-fpie\fR و \fB\-fPIE\fR ماکروهای \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR و \f(CW\*(C`_\|_PIE_\|_\*(C'\fR را تعریف می‌کنند. مقدار این ماکروها برای \fB\-fpie\fR برابر 1 و برای \fB\-fPIE\fR برابر 2 است. .IP \fB\-fno\-plt\fR 4 .IX Item "-fno-plt" برای فراخوانی توابع خارجی در کد مستقل از موقعیت، از PLT استفاده نمی‌کند. در عوض، آدرس تابع فراخوانی‌شده را در محل فراخوانی از GOT بارگذاری کرده و به آن انشعاب می‌دهد (branch). این کار با حذف کدهای واسط (stubهای) PLT و قرار دادن بارگذاری‌های GOT در معرض بهینه‌سازی‌ها، منجر به تولید کد کارآمدتر می‌شود. در معماری‌هایی مانند x86 ۳۲بیتی که در آن‌ها استاب‌های PLT انتظار دارند اشاره‌گر GOT در یک ثبات خاص قرار داشته باشد، این کار آزادی عمل بیشتری در تخصیص ثبات به کامپایلر می‌دهد. اتصال دیرهنگام (Lazy binding) نیازمند استفاده از PLT است؛ با \fB\-fno\-plt\fR تمام نمادهای خارجی در زمان بارگذاری حل‌وفصل می‌شوند. .Sp به عنوان جایگزین، می‌توان از مشخصه تابع \f(CW\*(C`noplt\*(C'\fR برای جلوگیری از فراخوانی‌های مبتنی بر PLT برای توابع خارجی خاص استفاده کرد. .Sp در کد وابسته به موقعیت، چند مقصد نیز فراخوانی توابعی را که برای عدم استفاده از PLT نشانه‌گذاری شده‌اند، به استفاده از GOT تبدیل می‌کنند. .IP \fB\-fno\-jump\-tables\fR 4 .IX Item "-fno-jump-tables" از جدول‌های پرش (jump tables) برای دستورات switch استفاده نمی‌کند، حتی در مواردی که نسبت به سایر راهبردهای تولید کد کارآمدتر باشد. این گزینه در ترکیب با \fB\-fpic\fR یا \fB\-fPIC\fR برای ساخت کدی که بخشی از یک پیونددهنده پویا را تشکیل می‌دهد و نمی‌تواند به آدرس یک جدول پرش ارجاع دهد مفید است. در برخی از مقصدهای معماری، جدول‌های پرش نیازی به GOT ندارند و این گزینه مورد نیاز نیست. .IP \fB\-fno\-bit\-tests\fR 4 .IX Item "-fno-bit-tests" از آزمون‌های بیتی (bit tests) برای دستورات switch استفاده نمی‌کند، حتی در مواردی که نسبت به سایر راهبردهای تولید کد کارآمدتر باشد. .IP \fB\-ffixed\-\fR\fIreg\fR 4 .IX Item "-ffixed-reg" با ثبات با نام \fIreg\fR مانند یک ثبات ثابت (fixed register) رفتار می‌کند؛ کد تولیدشده هرگز نباید به آن ارجاع دهد (مگر احتمالاً به عنوان اشاره‌گر پشته، اشاره‌گر فریم یا در نقشی ثابت از نوعی دیگر). .Sp \&\fIreg\fR باید نام یک ثبات باشد. نام‌های ثبات قابل قبول مختص ماشین بوده و در ماکروی \f(CW\*(C`REGISTER_NAMES\*(C'\fR در فایل ماکروی توصیف ماشین تعریف شده‌اند. .Sp این پرچم شکل نقیض ندارد، زیرا یک انتخاب سه‌حالته را مشخص می‌کند. .IP \fB\-fcall\-used\-\fR\fIreg\fR 4 .IX Item "-fcall-used-reg" با ثبات با نام \fIreg\fR مانند یک ثبات قابل تخصیص رفتار می‌کند که توسط فراخوانی‌های توابع رونویسی (clobbered) می‌شود. ممکن است این ثبات برای متغیرهای موقت یا متغیرهایی که در طول یک فراخوانی زنده نمی‌مانند تخصیص یابد. توابعی که با این روش کامپایل می‌شوند، ثبات \fIreg\fR را ذخیره و بازیابی نمی‌کنند. .Sp استفاده از این پرچم برای اشاره‌گر فریم یا اشاره‌گر پشته یک خطا است. استفاده از این پرچم برای سایر ثبات‌ها که نقش‌های ثابت و فراگیری در مدل اجرای ماشین دارند، نتایج فاجعه‌باری به همراه خواهد داشت. .Sp این پرچم شکل نقیض ندارد، زیرا یک انتخاب سه‌حالته را مشخص می‌کند. .IP \fB\-fcall\-saved\-\fR\fIreg\fR 4 .IX Item "-fcall-saved-reg" با ثبات با نام \fIreg\fR مانند یک ثبات قابل تخصیص که توسط توابع ذخیره می‌شود رفتار می‌کند. ممکن است حتی برای مقادیر موقت یا متغیرهایی که در طول یک فراخوانی زنده می‌مانند تخصیص یابد. توابعی که به این روش کامپایل می‌شوند، در صورت استفاده از ثبات \fIreg\fR آن را ذخیره و بازیابی می‌کنند. .Sp استفاده از این پرچم برای اشاره‌گر فریم یا اشاره‌گر پشته یک خطا است. استفاده از این پرچم برای سایر ثبات‌ها که نقش‌های ثابت و فراگیری در مدل اجرای ماشین دارند، نتایج فاجعه‌باری به همراه خواهد داشت. .Sp نوع متفاوتی از فاجعه از استفاده از این پرچم برای ثباتی حاصل می‌شود که مقادیر بازگشتی توابع ممکن است در آن قرار گیرند. .Sp این پرچم شکل نقیض ندارد، زیرا یک انتخاب سه‌حالته را مشخص می‌کند. .IP \fB\-fpack\-struct[=\fR\fIn\fR\fB]\fR 4 .IX Item "-fpack-struct[=n]" بدون تعیین یک مقدار، تمام اعضای ساختار (structure) را بدون هیچ فاصله‌ای در کنار هم فشرده (pack) می‌کند. هنگامی که مقداری مشخص شود (که باید توان کوچکی از ۲ باشد)، اعضای ساختار را مطابق با این مقدار که نمایانگر حداکثر تراز (alignment) است فشرده می‌کند (یعنی اشیایی با نیازمندی‌های تراز پیش‌فرض بزرگ‌تر از این مقدار، به صورت بالقوه ترازنشده در نزدیک‌ترین مکان مناسب قرار می‌گیرند). .Sp \&\fBهشدار:\fR گزینه \fB\-fpack\-struct\fR باعث می‌شود GCC کدی تولید کند که با کد تولیدشده بدون این گزینه از نظر باینری سازگار نیست. علاوه بر این، کد حاصل غیربهینه خواهد بود. از آن تنها برای مطابقت با یک رابط باینری برنامه (ABI) غیرپیش‌فرض استفاده کنید. .IP \fB\-fleading\-underscore\fR 4 .IX Item "-fleading-underscore" این گزینه و نقطه مقابل آن، \fB\-fno\-leading\-underscore\fR، نحوه نمایش نمادهای C را در فایل شیء (object file) به طور اجباری تغییر می‌دهند. یکی از کاربردهای آن، کمک به پیوند با کدهای اسمبلی قدیمی است. .Sp \&\fBهشدار:\fR گزینه \fB\-fleading\-underscore\fR باعث می‌شود GCC کدی تولید کند که با کد تولیدشده بدون این گزینه از نظر باینری سازگار نیست. از آن برای مطابقت با یک رابط باینری برنامه غیرپیش‌فرض استفاده کنید. همه مقصدهای معماری پشتیبانی کاملی از این گزینه ارائه نمی‌دهند. .IP \fB\-ftls\-model=\fR\fImodel\fR 4 .IX Item "-ftls-model=model" مدل ذخیره‌سازی محلی ریسمان (TLS) مورد استفاده را تغییر می‌دهد. آرگومان \fImodel\fR باید یکی از \fBglobal\-dynamic\fR، \&\fBlocal\-dynamic\fR، \fBinitial\-exec\fR یا \fBlocal\-exec\fR باشد. توجه داشته باشید که این انتخاب مشمول بهینه‌سازی است: کامپایلر ممکن است برای نمادهایی که در خارج از واحد ترجمه (translation unit) قابل مشاهده نیستند، یا اگر \fB\-fpic\fR در خط فرمان مشخص نشده باشد، از مدل کارآمدتری استفاده کند. .Sp حالت پیش‌فرض بدون \fB\-fpic\fR برابر با \fBinitial\-exec\fR است؛ همراه با \&\fB\-fpic\fR، مقدار پیش‌فرض \fBglobal\-dynamic\fR خواهد بود. .IP \fB\-ftrampolines\fR 4 .IX Item "-ftrampolines" برای مقصدهایی که معمولاً برای توابع تودرتو (nested functions) به ترامپولین‌ها (trampolines) نیاز دارند، همیشه به جای استفاده از توصیف‌کننده‌ها (descriptors) آن‌ها را تولید می‌کند. در غیر این صورت، برای مقصدهایی که به آن‌ها نیازی ندارند، مانند HP\-PA یا IA\-64، کاری انجام نمی‌دهد. .Sp ترامپولین قطعه کد کوچکی است که در زمان اجرا، هنگامی که آدرس یک تابع تودرتو گرفته می‌شود، روی پشته ایجاد می‌شود و برای فراخوانی غیرمستقیم تابع تودرتو به کار می‌رود. بنابراین، برای عملکرد صحیح برنامه نیاز است که پشته قابل اجرا (executable) باشد. .Sp گزینه \&\fB\-fno\-trampolines\fR به صورت زبان‌به‌زبان به طور پیش‌فرض فعال است تا به کامپایلر اجازه دهد در صورت تشخیص بی‌خطر بودن، از تولید آن‌ها خودداری کند و آن‌ها را با توصیف‌کننده‌ها جایگزین سازد. توصیف‌کننده‌ها تنها از داده تشکیل شده‌اند، اما کد تولیدشده باید برای کار با آن‌ها آماده باشد. تا زمان نگارش این متن، \fB\-fno\-trampolines\fR فقط برای زبان Ada به صورت پیش‌فرض فعال است. .Sp علاوه بر این، در صورت وجود توابع تودرتو، کد کامپایل‌شده با \fB\-ftrampolines\fR و کد کامپایل‌شده با \&\fB\-fno\-trampolines\fR از نظر باینری با یکدیگر سازگار نیستند. بنابراین این گزینه باید در سطح کل برنامه استفاده شود و با احتیاط بسیار به کار رود. .Sp برای زبان‌هایی غیر از Ada، گزینه‌های \f(CW\*(C`\-ftrampolines\*(C'\fR و \&\f(CW\*(C`\-fno\-trampolines\*(C'\fR در حال حاضر هیچ اثری ندارند و روی پلتفرم‌هایی که برای توابع تودرتو به ترامپولین‌ها نیاز دارند، ترامپولین‌ها همیشه تولید می‌شوند. .IP \fB\-ftrampoline\-impl=\fR[\fBstack\fR|\fBheap\fR] 4 .IX Item "-ftrampoline-impl=[stack|heap]" به‌طور پیش‌فرض، ترامپولین‌ها روی پشته تولید می‌شوند. با این حال، برخی از پلتفرم‌ها (مانند Apple M1) اجازه پشته قابل اجرا را نمی‌دهند. کامپایل با \&\fB\-ftrampoline\-impl=heap\fR فراخوانی‌هایی به \&\f(CW\*(C`_\|_gcc_nested_func_ptr_created\*(C'\fR و \&\f(CW\*(C`_\|_gcc_nested_func_ptr_deleted\*(C'\fR ایجاد می‌کند تا فضای ترامپولین را روی هیپ قابل اجرا تخصیص داده و آزاد کند. این توابع در libgcc پیاده‌سازی شده‌اند و فقط در مقصدهای خاصی ارائه می‌شوند: x86_64 Darwin، و x86_64 و aarch64 Linux. \fIتوجه داشته باشید\fR: در صورتی که از \&\f(CW\*(C`setjmp\*(C'\fR استفاده کنید، توابع تودرتو را نمونه‌سازی نمایید، و سپس با \&\f(CW\*(C`longjmp\*(C'\fR به حالتی قبل از تخصیص آن توابع تودرتو برگردید، تضمینی وجود \fIندارد\fR که ترامپولین‌های هیپ به درستی آزاد شوند. .IP \fB\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] 4 .IX Item "-fvisibility=[default|internal|hidden|protected]" دیداری‌پذیری پیش‌فرض نمادهای تصویر ELF را روی گزینه مشخص‌شده تنظیم می‌کند\-\-\-تمام نمادها با این مشخصه علامت‌گذاری می‌شوند مگر اینکه در داخل کد لغو شده باشند. استفاده از این ویژگی می‌تواند زمان پیوند و بارگذاری کتابخانه‌های شیء اشتراکی (shared object) را به طور چشمگیری بهبود بخشد، کد بهینه‌تری تولید کند، صدور API تقریباً بی‌نقصی ارائه دهد و از تداخل نمادها جلوگیری کند. \fBاکیداً\fR توصیه می‌شود که در تمام اشیاء اشتراکی که توزیع می‌کنید از این گزینه استفاده نمایید. .Sp علیرغم نام‌گذاری، \fBdefault\fR همیشه به معنای عمومی (public) است؛ یعنی برای پیوند از خارج از شیء اشتراکی در دسترس است. گزینه‌های \&\fBprotected\fR و \fBinternal\fR در عمل چندان کاربردی ندارند، بنابراین تنها گزینه پرکاربرد دیگر \fBhidden\fR است. اگر \fB\-fvisibility\fR مشخص نشده باشد، حالت پیش‌فرض \&\fBdefault\fR است، یعنی تمام نمادها عمومی می‌شوند. .Sp توضیح خوبی درباره مزایای حاصل از اطمینان از داشتن دیداری‌پذیری صحیح نمادهای ELF در «How To Write Shared Libraries» نوشته Ulrich Drepper (که در <\fBhttps://www.akkadia.org/drepper\fR> قابل یافتن است) ارائه شده است\-\-\-با این حال، راه‌حل برتری که این گزینه فراهم می‌کند، به جای مخفی کردن موارد در حالی که پیش‌فرض عمومی است، این است که پیش‌فرض را مخفی (hidden) کرده و موارد را عمومی (public) نشانه‌گذاری کنید. این امر در DLLها در ویندوز معمول است و با \fB\-fvisibility=hidden\fR و \f(CW\*(C`_\|_attribute_\|_ ((visibility("default")))\*(C'\fR به جای \&\f(CW\*(C`_\|_declspec(dllexport)\*(C'\fR تقریباً همان معناشناسی را با نحوی یکسان به دست می‌آورید. این امر موهبت بزرگی برای کسانی است که روی پروژه‌های چندسکویی کار می‌کنند. .Sp برای کسانی که پشتیبانی از دیداری‌پذیری را به کدهای موجود اضافه می‌کنند، دستور \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR می‌تواند مفید باشد. نحوه عملکرد آن به این صورت است که اعلان‌هایی را که می‌خواهید دیداری‌پذیری آن‌ها را تنظیم کنید (برای مثال) بین \&\f(CW\*(C`#pragma GCC visibility push(hidden)\*(C'\fR و \&\f(CW\*(C`#pragma GCC visibility pop\*(C'\fR قرار می‌دهید. به یاد داشته باشید که دیداری‌پذیری نمادها باید \fBبه عنوان بخشی از قرارداد رابط API\fR در نظر گرفته شود و بنابراین تمام کدهای جدید باید همیشه در صورتی که دیداری‌پذیری غیرپیش‌فرض است آن را مشخص کنند؛ یعنی اعلان‌هایی که صرفاً برای استفاده در DSO محلی هستند، \fBهمیشه\fR باید صراحتاً به عنوان hidden علامت‌گذاری شوند تا از سربار ارجاع غیرمستقیم PLT جلوگیری شود\-\-\-شفاف‌سازی کامل این موضوع همچنین به خوانایی و خودسندسازی کد کمک می‌کند. توجه داشته باشید که با توجه به الزامات استاندارد ISO C++، عملگرهای \f(CW\*(C`operator new\*(C'\fR و \&\f(CW\*(C`operator delete\*(C'\fR همیشه باید دارای دیداری‌پذیری default باشند. .Sp آگاه باشید که هدرهای خارج از پروژه شما، به ویژه هدرهای سیستمی و هدرهای هر کتابخانه دیگری که استفاده می‌کنید، ممکن است انتظار نداشته باشند با دیداری‌پذیری غیر از پیش‌فرض کامپایل شوند. ممکن است لازم باشد پیش از گنجاندن چنین هدرهایی صراحتاً از \f(CW\*(C`#pragma GCC visibility push(default)\*(C'\fR استفاده کنید. .Sp اعلان‌های \&\f(CW\*(C`extern\*(C'\fR تحت تأثیر \fB\-fvisibility\fR قرار نمی‌گیرند، بنابراین بسیاری از کدها را می‌توان بدون تغییر مجدداً با \fB\-fvisibility=hidden\fR کامپایل کرد. با این حال، این بدان معناست که فراخوانی توابع \f(CW\*(C`extern\*(C'\fR بدون دیداری‌پذیری صریح از PLT استفاده می‌کند، بنابراین مؤثرتر است که از \f(CW\*(C`_\|_attribute ((visibility))\*(C'\fR و/یا \&\f(CW\*(C`#pragma GCC visibility\*(C'\fR استفاده کنید تا به کامپایلر بگویید کدام اعلان‌های \f(CW\*(C`extern\*(C'\fR باید مخفی تلقی شوند. .Sp توجه داشته باشید که \fB\-fvisibility\fR بر موجودیت‌های پیوند مبهم (vague linkage) در C++ تأثیر می‌گذارد. این بدان معناست که برای نمونه، یک کلاس استثنا که بین چند DSO پرتاب (throw) می‌شود باید صراحتاً با دیداری‌پذیری default علامت‌گذاری شود تا گره‌های \fBtype_info\fR بین DSOها یکپارچه شوند. .Sp مروری بر این روش‌ها، مزایای آن‌ها و نحوه استفاده از آن‌ها در <\fBhttps://gcc.gnu.org/wiki/Visibility\fR> موجود است..IP \fB\-fstrict\-volatile\-bitfields\fR 4 .IX Item "-fstrict-volatile-bitfields" این گزینه زمانی باید استفاده شود که دسترسی‌ها به فیلدهای بیتیِ فرّار (volatile bit\-fields) (یا سایر فیلدهای ساختار، اگرچه کامپایلر معمولاً در هر حال آن نوع‌ها را رعایت می‌کند) باید از یک دسترسی منفرد با پهنای نوعِ فیلد، در صورت امکان هم‌تراز شده با هم‌ترازی طبیعی استفاده کنند. برای مثال، هدف‌هایی با ثبات‌های جانبی نگاشت‌شده در حافظه (memory\-mapped peripheral registers) ممکن است نیازمند این باشند که تمام این دسترسی‌ها ۱۶ بیتی باشند؛ با این پرچم می‌توانید تمام فیلدهای بیتیِ جانبی را به‌صورت \f(CW\*(C`unsigned short\*(C'\fR اعلان کنید (با این فرض که short روی این هدف‌ها ۱۶ بیتی است) تا GCC را مجبور کنید به‌جای مثلاً یک دسترسیِ کارآمدتر ۳۲ بیتی، از دسترسی‌های ۱۶ بیتی استفاده کند. .Sp اگر این گزینه غیرفعال باشد، کامپایلر از کارآمدترین دستورالعمل استفاده می‌کند. در مثال قبلی، این ممکن است یک دستورالعمل بارگذاری ۳۲ بیتی باشد، حتی اگر به بایت‌هایی دسترسی پیدا کند که شامل هیچ بخشی از فیلد بیتی نیستند، یا ثبات‌های نگاشت‌شده در حافظه‌ای را در بر گیرد که ارتباطی با ثباتِ در حال به‌روزرسانی ندارند. .Sp در برخی موارد، مانند زمانی که ویژگی \f(CW\*(C`packed\*(C'\fR روی یک فیلد ساختار اعمال شده است، ممکن است دسترسی به فیلد با یک خواندن یا نوشتنِ منفرد که به‌درستی برای ماشین هدف هم‌تراز شده باشد، امکان‌پذیر نباشد. در این حالت GCC به‌جای کدی که در زمان اجرا دچار خطا شده یا نتیجه را کوتاه (truncate) کند، به تولید چندین دسترسی بازمی‌گردد. .Sp نکته: به‌دلیل محدودیت‌های مدل حافظهٔ C/C++11، دسترسی‌های نوشتن مجاز نیستند اعضای غیر فیلد بیتی را تغییر دهند. بنابراین توصیه می‌شود تمام بیت‌های نوعِ فیلد را به‌عنوان اعضای فیلد بیتی تعریف کنید. .Sp مقدار پیش‌فرض این گزینه توسط رابط دودویی برنامه (ABI) برای پردازندهٔ هدف تعیین می‌شود. .IP \fB\-fsync\-libcalls\fR 4 .IX Item "-fsync-libcalls" این گزینه کنترل می‌کند که آیا هرگونه نمونهٔ برون‌خط (out\-of\-line) از خانوادهٔ توابع \f(CW\*(C`_\|_sync\*(C'\fR ممکن است برای پیاده‌سازی خانوادهٔ توابع \f(CW\*(C`_\|_atomic\*(C'\fR در C++11 استفاده شوند یا خیر. .Sp مقدار پیش‌فرض این گزینه فعال است، بنابراین تنها شکل کاربردی این گزینه \fB\-fno\-sync\-libcalls\fR است. این گزینه در پیاده‌سازی کتابخانهٔ زمان اجرای \fIlibatomic\fR استفاده می‌شود. .IP \fB\-fzero\-init\-padding\-bits=\fR\fIvalue\fR 4 .IX Item "-fzero-init-padding-bits=value" مقداردهی اولیه با صفر را برای بیت‌های فاصله‌ساز (padding bits) در مقداردهنده‌های متغیرهای خودکار تضمین می‌کند. برخی زبان‌ها مقداردهی با صفر بیت‌های فاصله‌ساز را در موارد خاصی تضمین می‌کنند؛ برای نمونه، C23 هنگام استفاده از مقداردهنده‌های خالی (\f(CW\*(C`{}\*(C'\fR)، یا C++ هنگام استفاده از مقداردهی صفر، یا C تضمین می‌کند فیلدهایی که در مقداردهنده مشخص نشده‌اند، بیت‌های فاصله‌ساز آن‌ها با صفر مقداردهی اولیه می‌شوند. این گزینه امکان تغییر شرایطی را فراهم می‌کند که در آن بیت‌های فاصله‌ساز در مقداردهنده‌ها تضمین می‌شود با صفر مقداردهی اولیه شوند. پیش‌فرض \f(CW\*(C`\-fzero\-init\-padding\-bits=standard\*(C'\fR است، که تضمینی فراتر از استاندارد مربوطه ارائه نمی‌دهد. برای مثال: .Sp .Vb 6 \& struct A { char a; unsigned long long b; char c; }; \& union B { char a; unsigned long long b; }; \& struct A a = {}; // C23 guarantees padding bits are zero. \& struct A b = { 1, 2, 3 }; // No guarantees. \& union B c = {}; // C23 guarantees padding bits are zero. \& union B d = { 1 }; // No guarantees. .Ve .Sp گزینهٔ \&\f(CW\*(C`\-fzero\-init\-padding\-bits=unions\*(C'\fR علاوه بر آنچه استانداردها تضمین می‌کنند، مقداردهی اولیه با صفر را برای بیت‌های فاصله‌ساز در unionها تضمین می‌کند، در صورتی که مقداردهندهٔ union خالی باشد (که در این صورت تمام بیت‌های union با صفر مقداردهی می‌شوند) یا اگر عضو مقداردهی‌شدهٔ union کوچک‌تر از اندازهٔ union باشد (که در این صورت صفر شدن بیت‌های فاصله‌ساز خارج از عضو مقداردهی‌شده را تضمین می‌کند). این رفتار GCC پیش از GCC 15 بود و در مثال بالا مقداردهی اولیه با صفر آخرین \f(CW\*(C`sizeof (unsigned long long) \- 1\*(C'\fR بایت را در union تضمین می‌کند. .Sp گزینهٔ \&\f(CW\*(C`\-fzero\-init\-padding\-bits=all\*(C'\fR علاوه بر این، مقداردهی با صفر بیت‌های فاصله‌ساز سایر داده‌های تجمیعی (aggregates) را تضمین می‌کند؛ بنابراین فاصله‌گذاری بین \f(CW\*(C`b.a\*(C'\fR و \f(CW\*(C`b.b\*(C'\fR (در صورت وجود) و فاصله‌گذاری انتهایی در ساختار (در صورت وجود) با صفر مقداردهی می‌شوند. .SS "گزینه‌های توسعه‌دهندگان GCC (GCC Developer Options)" .IX Subsection "GCC Developer Options" این بخش گزینه‌های خط فرمانی را شرح می‌دهد که عمدتاً مورد توجه توسعه‌دهندگان GCC هستند، از جمله گزینه‌هایی برای پشتیبانی از آزمایش کامپایلر و بررسی باگ‌های کامپایلر و مشکلات کارایی در زمان کامپایل. این موارد شامل گزینه‌هایی است که در مراحل مختلف کامپایل رونوشت‌های اشکال‌زدایی (debug dumps) ایجاد می‌کنند؛ آمارهایی مانند مصرف حافظه و زمان اجرا را چاپ می‌کنند؛ و اطلاعاتی دربارهٔ پیکربندی GCC، مانند مسیرهای جستجوی کتابخانه‌ها ارائه می‌دهند. به‌ندرت پیش می‌آید که برای کارهای عادی کامپایل و پیونددهی به استفاده از هیچ‌یک از این گزینه‌ها نیاز داشته باشید. .PP بسیاری از گزینه‌های توسعه‌دهنده که باعث می‌شوند GCC خروجی را در یک فایل رونوشت (dump) بنویسد، یک پسوند اختیاری به‌صورت \fB=\fR\fIfilename\fR می‌پذیرند. می‌توانید \fBstdout\fR یا \fB\-\fR را برای رونوشت در خروجی استاندارد، و \fBstderr\fR را برای خطای استاندارد مشخص کنید. .PP اگر \fB=\fR\fIfilename\fR حذف شود، یک نام فایل رونوشت پیش‌فرض با الحاق نام پایهٔ فایل رونوشت، شمارهٔ گذر (pass number)، حرف فاز (phase letter) و نام گذر ساخته می‌شود. نام پایهٔ فایل رونوشت، در صورتی که به‌طور صریح مشخص شده باشد و یک فایل اجرایی نباشد، نام فایل خروجی تولیدشده توسط کامپایلر است؛ در غیر این صورت نام فایل منبع خواهد بود. شمارهٔ گذر بر اساس ترتیبی که گذرها در مدیر گذرهای کامپایلر ثبت می‌شوند تعیین می‌گردد. این ترتیب عموماً با ترتیب اجرا یکسان است، اما گذرهایی که توسط افزونه‌ها ثبت می‌شوند، گذرهای مختص هدف، یا گذرهایی که به هر شکل دیرتر ثبت می‌شوند، شماره‌ای بالاتر از گذر با نام \&\fBfinal\fR دریافت می‌کنند، حتی اگر زودتر اجرا شوند. حرف فاز یکی از موارد \fBi\fR (تحلیل بین‌رویه‌ای)، \fBl\fR (مختص زبان)، \fBr\fR (RTL) یا \fBt\fR (درخت) است. فایل‌ها در دایرکتوری فایل خروجی ایجاد می‌شوند. .IP \fB\-fcallgraph\-info\fR 4 .IX Item "-fcallgraph-info" .PD 0 .IP \fB\-fcallgraph\-info=\fR\fIMARKERS\fR 4 .IX Item "-fcallgraph-info=MARKERS" .PD باعث می‌شود کامپایلر اطلاعات گراف فراخوانی (callgraph) را برای برنامه، به‌ازای هر فایل شیء خروجی دهد. این اطلاعات در قالب رایج VCG تولید می‌شود. در صورتی که فهرستی از نشانگرهای جداشده با کاما نیز مشخص شود، می‌توان آن را با اطلاعات اضافی به‌ازای هر گره یا به‌ازای هر یال آراست. هنگامی که نشانگر \f(CW\*(C`su\*(C'\fR مشخص شود، گراف فراخوانی با اطلاعات میزان مصرف پشته آراسته می‌شود؛ این حالت معادل \&\fB\-fstack\-usage\fR است. هنگامی که نشانگر \f(CW\*(C`da\*(C'\fR مشخص شود، گراف فراخوانی با اطلاعات مربوط به شیءهای تخصیص‌یافته به‌صورت پویا آراسته می‌شود. .Sp هنگام کامپایل با \fB\-flto\fR، هیچ اطلاعات گراف فراخوانی به همراه فایل شیء خروجی داده نمی‌شود. در زمان پیوند LTO، گزینهٔ \fB\-fcallgraph\-info\fR ممکن است چندین فایل اطلاعات گراف فراخوانی را در کنار فایل‌های خروجی واسط LTO تولید کند. .IP \fB\-d\fR\fIletters\fR 4 .IX Item "-dletters" .PD 0 .IP \fB\-fdump\-rtl\-\fR\fIpass\fR 4 .IX Item "-fdump-rtl-pass" .IP \fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR 4 .IX Item "-fdump-rtl-pass=filename" .PD مشخص می‌کند که در حین کامپایل و در زمان‌هایی که توسط \&\fIletters\fR تعیین شده است، رونوشت‌های اشکال‌زدایی ایجاد شوند. این گزینه برای اشکال‌زدایی گذرهای مبتنی بر RTL کامپایلر استفاده می‌شود. .Sp برخی از سوئیچ‌های \fB\-d\fR\fIletters\fR هنگامی که از \&\fB\-E\fR برای پیش‌پردازش استفاده می‌شود، معنای متفاوتی دارند. .Sp رونوشت‌های اشکال‌زدایی را می‌توان با یک سوئیچ \fB\-fdump\-rtl\fR یا برخی حروف در گزینهٔ \&\fB\-d\fR (\fIletters\fR) فعال کرد. در اینجا حروف ممکن برای استفاده در \fIpass\fR و \fIletters\fR و معانی آن‌ها آورده شده است: .RS 4 .IP \fB\-fdump\-rtl\-alignments\fR 4 .IX Item "-fdump-rtl-alignments" رونوشت پس از محاسبهٔ هم‌ترازی‌های پرش (branch alignments). .IP \fB\-fdump\-rtl\-asmcons\fR 4 .IX Item "-fdump-rtl-asmcons" رونوشت پس از اصلاح گزاره‌های rtl که محدودیت‌های ورودی/خروجی برآورده‌نشده دارند. .IP \fB\-fdump\-rtl\-auto_inc_dec\fR 4 .IX Item "-fdump-rtl-auto_inc_dec" رونوشت پس از شناسایی افزایش/کاهش خودکار (auto\-inc\-dec). این گذر تنها روی معماری‌هایی اجرا می‌شود که دستورالعمل‌های افزایش خودکار یا کاهش خودکار دارند. .IP \fB\-fdump\-rtl\-barriers\fR 4 .IX Item "-fdump-rtl-barriers" رونوشت پس از پاک‌سازی دستورالعمل‌های مانع (barrier instructions). .IP \fB\-fdump\-rtl\-bbpart\fR 4 .IX Item "-fdump-rtl-bbpart" رونوشت پس از افرازبندی بلوک‌های پایه‌ای داغ و سرد (hot and cold basic blocks). .IP \fB\-fdump\-rtl\-bbro\fR 4 .IX Item "-fdump-rtl-bbro" رونوشت پس از بازآرایی بلوک‌ها (block reordering). .IP \fB\-fdump\-rtl\-btl1\fR 4 .IX Item "-fdump-rtl-btl1" .PD 0 .IP \fB\-fdump\-rtl\-btl2\fR 4 .IX Item "-fdump-rtl-btl2" .PD گزینه‌های \&\fB\-fdump\-rtl\-btl1\fR و \fB\-fdump\-rtl\-btl2\fR رونوشت‌گیری را پس از دو گذر بهینه‌سازی بارگذاری مقصد پرش فعال می‌کنند. .IP \fB\-fdump\-rtl\-bypass\fR 4 .IX Item "-fdump-rtl-bypass" رونوشت پس از میان‌بُر زدن پرش (jump bypassing) و بهینه‌سازی‌های جریان کنترل. .IP \fB\-fdump\-rtl\-combine\fR 4 .IX Item "-fdump-rtl-combine" رونوشت پس از گذر ترکیب دستورالعمل‌های RTL. .IP \fB\-fdump\-rtl\-compgotos\fR 4 .IX Item "-fdump-rtl-compgotos" رونوشت پس از تکثیر gotoهای محاسباتی (computed gotos)..IP \fB\-fdump\-rtl\-ce1\fR 4 .IX Item "-fdump-rtl-ce1" .PD 0 .IP \fB\-fdump\-rtl\-ce2\fR 4 .IX Item "-fdump-rtl-ce2" .IP \fB\-fdump\-rtl\-ce3\fR 4 .IX Item "-fdump-rtl-ce3" .PD \&\fB\-fdump\-rtl\-ce1\fR، \fB\-fdump\-rtl\-ce2\fR و \&\fB\-fdump\-rtl\-ce3\fR تخلیه اطلاعات را پس از سه گذر تبدیل if فعال می‌کنند. .IP \fB\-fdump\-rtl\-cprop_hardreg\fR 4 .IX Item "-fdump-rtl-cprop_hardreg" تخلیه اطلاعات پس از انتشار کپی ثبات سخت‌افزاری (hard register copy propagation). .IP \fB\-fdump\-rtl\-csa\fR 4 .IX Item "-fdump-rtl-csa" تخلیه اطلاعات پس از ترکیب تنظیمات پشته (stack adjustments). .IP \fB\-fdump\-rtl\-cse1\fR 4 .IX Item "-fdump-rtl-cse1" .PD 0 .IP \fB\-fdump\-rtl\-cse2\fR 4 .IX Item "-fdump-rtl-cse2" .PD \&\fB\-fdump\-rtl\-cse1\fR و \fB\-fdump\-rtl\-cse2\fR تخلیه اطلاعات را پس از دو گذر حذف زیرعبارت‌های مشترک (common subexpression elimination) فعال می‌کنند. .IP \fB\-fdump\-rtl\-dce\fR 4 .IX Item "-fdump-rtl-dce" تخلیه اطلاعات پس از گذرهای مستقل حذف کد مرده (dead code elimination). .IP \fB\-fdump\-rtl\-dbr\fR 4 .IX Item "-fdump-rtl-dbr" تخلیه اطلاعات پس از زمان‌بندی انشعاب‌های با تاخیر (delayed branch scheduling). .IP \fB\-fdump\-rtl\-dce1\fR 4 .IX Item "-fdump-rtl-dce1" .PD 0 .IP \fB\-fdump\-rtl\-dce2\fR 4 .IX Item "-fdump-rtl-dce2" .PD \&\fB\-fdump\-rtl\-dce1\fR و \fB\-fdump\-rtl\-dce2\fR تخلیه اطلاعات را پس از دو گذر حذف ذخیره‌سازی‌های مرده (dead store elimination) فعال می‌کنند. .IP \fB\-fdump\-rtl\-eh\fR 4 .IX Item "-fdump-rtl-eh" تخلیه اطلاعات پس از نهایی‌سازی کد مدیریت استثنا (EH). .IP \fB\-fdump\-rtl\-eh_ranges\fR 4 .IX Item "-fdump-rtl-eh_ranges" تخلیه اطلاعات پس از تبدیل محدوده‌های مدیریت استثنا (EH). .IP \fB\-fdump\-rtl\-expand\fR 4 .IX Item "-fdump-rtl-expand" تخلیه اطلاعات پس از تولید RTL. .IP \fB\-fdump\-rtl\-fwprop1\fR 4 .IX Item "-fdump-rtl-fwprop1" .PD 0 .IP \fB\-fdump\-rtl\-fwprop2\fR 4 .IX Item "-fdump-rtl-fwprop2" .PD \&\fB\-fdump\-rtl\-fwprop1\fR و \fB\-fdump\-rtl\-fwprop2\fR تخلیه اطلاعات را پس از دو گذر انتشار رو به جلو (forward propagation) فعال می‌کنند. .IP \fB\-fdump\-rtl\-gcse1\fR 4 .IX Item "-fdump-rtl-gcse1" .PD 0 .IP \fB\-fdump\-rtl\-gcse2\fR 4 .IX Item "-fdump-rtl-gcse2" .PD \&\fB\-fdump\-rtl\-gcse1\fR و \fB\-fdump\-rtl\-gcse2\fR تخلیه اطلاعات را پس از حذف سراسری زیرعبارت‌های مشترک فعال می‌کنند. .IP \fB\-fdump\-rtl\-init\-regs\fR 4 .IX Item "-fdump-rtl-init-regs" تخلیه اطلاعات پس از مقداردهی اولیه ثبات‌ها. .IP \fB\-fdump\-rtl\-initvals\fR 4 .IX Item "-fdump-rtl-initvals" تخلیه اطلاعات پس از محاسبه مجموعه‌های مقادیر اولیه. .IP \fB\-fdump\-rtl\-into_cfglayout\fR 4 .IX Item "-fdump-rtl-into_cfglayout" تخلیه اطلاعات پس از تبدیل به حالت cfglayout. .IP \fB\-fdump\-rtl\-ira\fR 4 .IX Item "-fdump-rtl-ira" تخلیه اطلاعات پس از تخصیص تکرارشونده ثبات (iterated register allocation). .IP \fB\-fdump\-rtl\-jump\fR 4 .IX Item "-fdump-rtl-jump" تخلیه اطلاعات پس از بهینه‌سازی دوم پرش‌ها. .IP \fB\-fdump\-rtl\-loop2\fR 4 .IX Item "-fdump-rtl-loop2" \&\fB\-fdump\-rtl\-loop2\fR تخلیه اطلاعات پس از گذرهای بهینه‌سازی حلقه‌های rtl را فعال می‌کند. .IP \fB\-fdump\-rtl\-mach\fR 4 .IX Item "-fdump-rtl-mach" تخلیه اطلاعات پس از اجرای گذر بازسازماندهی وابسته به ماشین، در صورت وجود آن گذر. .IP \fB\-fdump\-rtl\-mode_sw\fR 4 .IX Item "-fdump-rtl-mode_sw" تخلیه اطلاعات پس از حذف تعویض‌های زاید حالت. .IP \fB\-fdump\-rtl\-rnreg\fR 4 .IX Item "-fdump-rtl-rnreg" تخلیه اطلاعات پس از شماره‌گذاری مجدد ثبات‌ها. .IP \fB\-fdump\-rtl\-outof_cfglayout\fR 4 .IX Item "-fdump-rtl-outof_cfglayout" تخلیه اطلاعات پس از تبدیل از حالت cfglayout. .IP \fB\-fdump\-rtl\-peephole2\fR 4 .IX Item "-fdump-rtl-peephole2" تخلیه اطلاعات پس از گذر روزنه‌ای (peephole). .IP \fB\-fdump\-rtl\-postreload\fR 4 .IX Item "-fdump-rtl-postreload" تخلیه اطلاعات پس از بهینه‌سازی‌های پس از بارگذاری مجدد (post\-reload). .IP \fB\-fdump\-rtl\-pro_and_epilogue\fR 4 .IX Item "-fdump-rtl-pro_and_epilogue" تخلیه اطلاعات پس از تولید مقدمه‌ها و موخره‌های تابع. .IP \fB\-fdump\-rtl\-sched1\fR 4 .IX Item "-fdump-rtl-sched1" .PD 0 .IP \fB\-fdump\-rtl\-sched2\fR 4 .IX Item "-fdump-rtl-sched2" .PD \&\fB\-fdump\-rtl\-sched1\fR و \fB\-fdump\-rtl\-sched2\fR تخلیه اطلاعات را پس از گذرهای زمان‌بندی بلوک‌های پایه فعال می‌کنند. .IP \fB\-fdump\-rtl\-ree\fR 4 .IX Item "-fdump-rtl-ree" تخلیه اطلاعات پس از حذف بسط علامت/صفر (sign/zero extension elimination). .IP \fB\-fdump\-rtl\-seqabstr\fR 4 .IX Item "-fdump-rtl-seqabstr" تخلیه اطلاعات پس از کشف توالی‌های مشترک. .IP \fB\-fdump\-rtl\-shorten\fR 4 .IX Item "-fdump-rtl-shorten" تخلیه اطلاعات پس از کوتاه‌سازی انشعاب‌ها. .IP \fB\-fdump\-rtl\-split1\fR 4 .IX Item "-fdump-rtl-split1" .PD 0 .IP \fB\-fdump\-rtl\-split2\fR 4 .IX Item "-fdump-rtl-split2" .IP \fB\-fdump\-rtl\-split3\fR 4 .IX Item "-fdump-rtl-split3" .IP \fB\-fdump\-rtl\-split4\fR 4 .IX Item "-fdump-rtl-split4" .IP \fB\-fdump\-rtl\-split5\fR 4 .IX Item "-fdump-rtl-split5" .PD این گزینه‌ها تخلیه اطلاعات را پس از پنج دور تقسیم دستورالعمل‌ها فعال می‌کنند. .IP \fB\-fdump\-rtl\-sms\fR 4 .IX Item "-fdump-rtl-sms" تخلیه اطلاعات پس از زمان‌بندی پیمانه‌ای (modulo scheduling). این گذر تنها روی برخی معماری‌ها اجرا می‌شود. .IP \fB\-fdump\-rtl\-stack\fR 4 .IX Item "-fdump-rtl-stack" تخلیه اطلاعات پس از تبدیل ثبات‌های «پرونده ثبات مسطح» GCC به ثبات‌های پشته‌مانند x87. این گذر تنها روی مشتقات x86 اجرا می‌شود. .IP \fB\-fdump\-rtl\-subreg1\fR 4 .IX Item "-fdump-rtl-subreg1" .PD 0 .IP \fB\-fdump\-rtl\-subreg2\fR 4 .IX Item "-fdump-rtl-subreg2" .PD \&\fB\-fdump\-rtl\-subreg1\fR و \fB\-fdump\-rtl\-subreg2\fR تخلیه اطلاعات را پس از دو گذر بسط subreg فعال می‌کنند. .IP \fB\-fdump\-rtl\-vartrack\fR 4 .IX Item "-fdump-rtl-vartrack" تخلیه اطلاعات پس از ردگیری متغیرها. .IP \fB\-fdump\-rtl\-vregs\fR 4 .IX Item "-fdump-rtl-vregs" تخلیه اطلاعات پس از تبدیل ثبات‌های مجازی به ثبات‌های سخت‌افزاری. .IP \fB\-fdump\-rtl\-web\fR 4 .IX Item "-fdump-rtl-web" تخلیه اطلاعات پس از تقسیم محدوده حیات (live range splitting). .IP \fB\-fdump\-rtl\-regclass\fR 4 .IX Item "-fdump-rtl-regclass" .PD 0 .IP \fB\-fdump\-rtl\-subregs_of_mode_init\fR 4 .IX Item "-fdump-rtl-subregs_of_mode_init" .IP \fB\-fdump\-rtl\-subregs_of_mode_finish\fR 4 .IX Item "-fdump-rtl-subregs_of_mode_finish" .IP \fB\-fdump\-rtl\-dfinit\fR 4 .IX Item "-fdump-rtl-dfinit" .IP \fB\-fdump\-rtl\-dfinish\fR 4 .IX Item "-fdump-rtl-dfinish" .PD این تخلیه‌ها تعریف شده‌اند اما همواره فایل‌های خالی تولید می‌کنند. .IP \fB\-da\fR 4 .IX Item "-da" .PD 0 .IP \fB\-fdump\-rtl\-all\fR 4 .IX Item "-fdump-rtl-all" .PD تولید تمام تخلیه‌های فهرست‌شده در بالا..IP \fB\-dA\fR 4 .IX Item "-dA" خروجی اسمبلر را با اطلاعات اشکال‌زدایی گوناگون حاشیه‌نویسی می‌کند. .IP \fB\-dD\fR 4 .IX Item "-dD" در پایان پیش‌پردازش، علاوه بر خروجی عادی، تمام تعاریف ماکرو را برون‌ریزی می‌کند. .IP \fB\-dH\fR 4 .IX Item "-dH" هر زمان که خطایی رخ دهد، یک core dump تولید می‌کند. .IP \fB\-dp\fR 4 .IX Item "-dp" خروجی اسمبلر را با توضیحی که نشان می‌دهد از کدام الگو و گزینه جایگزین استفاده شده است، حاشیه‌نویسی می‌کند. طول و هزینه هر دستورالعمل نیز چاپ می‌شود. .IP \fB\-dP\fR 4 .IX Item "-dP" نمایش RTL را در خروجی اسمبلر به عنوان یک توضیح پیش از هر دستورالعمل برون‌ریزی می‌کند. همچنین حاشیه‌نویسی \fB\-dp\fR را نیز فعال می‌سازد. .IP \fB\-dx\fR 4 .IX Item "-dx" فقط برای یک تابع RTL تولید می‌کند به جای اینکه آن را کامپایل کند. معمولاً همراه با \fB\-fdump\-rtl\-expand\fR استفاده می‌شود. .RE .RS 4 .RE .IP \fB\-fdump\-debug\fR 4 .IX Item "-fdump-debug" اطلاعات اشکال‌زدایی تولیدشده در طول فاز تولید اشکال‌زدایی را برون‌ریزی می‌کند. .IP \fB\-fdump\-earlydebug\fR 4 .IX Item "-fdump-earlydebug" اطلاعات اشکال‌زدایی تولیدشده در طول فاز اولیه تولید اشکال‌زدایی را برون‌ریزی می‌کند. .IP \fB\-fdump\-noaddr\fR 4 .IX Item "-fdump-noaddr" هنگام برون‌ریزی‌های اشکال‌زدایی، از چاپ آدرس‌ها جلوگیری می‌کند. این کار مقایسه با diff را روی برون‌ریزی‌های اشکال‌زدایی برای فراخوانی‌های کامپایلر با باینری‌های کامپایلر مختلف و/یا مکان‌های شروع متفاوت text / bss / data / heap / stack / dso امکان‌پذیرتر می‌سازد. .IP \fB\-freport\-bug\fR 4 .IX Item "-freport-bug" در صورت وقوع خطای داخلی کامپایلر (ICE)، اطلاعات اشکال‌زدایی را جمع‌آوری کرده و در یک فایل موقت برون‌ریزی می‌کند. .IP \fB\-fdump\-unnumbered\fR 4 .IX Item "-fdump-unnumbered" هنگام برون‌ریزی‌های اشکال‌زدایی، از چاپ شماره دستورالعمل‌ها و آدرس‌ها جلوگیری می‌کند. این کار مقایسه برون‌ریزی‌های اشکال‌زدایی با diff را برای فراخوانی‌های کامپایلر با گزینه‌های متفاوت، به ویژه با و بدون \&\fB\-g\fR، آسان‌تر می‌سازد. .IP \fB\-fdump\-unnumbered\-links\fR 4 .IX Item "-fdump-unnumbered-links" هنگام برون‌ریزی‌های اشکال‌زدایی (گزینه \fB\-d\fR در بالا را ببینید)، از نمایش شماره دستورالعمل‌ها برای پیوندها به دستورالعمل‌های پیشین و پسین در یک توالی جلوگیری می‌کند. .IP \fB\-fdump\-ipa\-\fR\fIswitch\fR 4 .IX Item "-fdump-ipa-switch" .PD 0 .IP \fB\-fdump\-ipa\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4 .IX Item "-fdump-ipa-switch-options" .PD برون‌ریزی درخت زبان تحلیل میان‌رویه‌ای (inter\-procedural analysis) را در مراحل مختلف در یک فایل کنترل می‌کند. نام فایل با افزودن یک پسوند ویژه سوییچ به نام فایل منبع تولید می‌شود، و فایل در همان دایرکتوری فایل خروجی ایجاد می‌گردد. برون‌ریزی‌های زیر امکان‌پذیر هستند: .RS 4 .IP \fBall\fR 4 .IX Item "all" تمام برون‌ریزی‌های تحلیل میان‌رویه‌ای را فعال می‌کند. .IP \fBcgraph\fR 4 .IX Item "cgraph" اطلاعات مربوط به بهینه‌سازی گراف فراخوانی (call\-graph)، حذف توابع استفاده‌نشده، و تصمیمات درون‌خطی‌سازی (inlining) را برون‌ریزی می‌کند. .IP \fBinline\fR 4 .IX Item "inline" برون‌ریزی پس از درون‌خطی‌سازی تابع. .IP \fBstrubm\fR 4 .IX Item "strubm" برون‌ریزی پس از انتخاب حالت‌های \f(CW\*(C`strub\*(C'\fR و ثبت انتخاب‌ها به عنوان مشخصه‌های تابع. .IP \fBstrub\fR 4 .IX Item "strub" برون‌ریزی تبدیلات \f(CW\*(C`strub\*(C'\fR: تغییرات رابط، بسته‌بندی توابع (function wrapping)، و درج فراخوانی‌های توکار (builtin) برای پاک‌سازی پشته (stack scrubbing) و واترمارک‌گذاری. .RE .RS 4 .Sp علاوه بر این، گزینه‌های \fB\-optimized\fR، \fB\-missed\fR، \&\fB\-note\fR و \fB\-all\fR را می‌توان مشخص کرد که مفهومی مشابه با \fB\-fopt\-info\fR دارند، و مقدار پیش‌فرض آنها \fB\-optimized\fR است. .Sp برای نمونه، \fB\-fdump\-ipa\-inline\-optimized\-missed\fR اطلاعات مربوط به نقاط فراخوانی درون‌خطی‌شده را به همراه نقاط فراخوانی که درون‌خطی نشده‌اند منتشر می‌کند. .Sp به طور پیش‌فرض، برون‌ریزی شامل پیام‌هایی درباره بهینه‌سازی‌های موفقیت‌آمیز (معادل \fB\-optimized\fR) به همراه جزئیات سطح پایین درباره تحلیل خواهد بود. .RE .IP \fB\-fdump\-ipa\-clones\fR 4 .IX Item "-fdump-ipa-clones" یک فایل برون‌ریزی حاوی اطلاعاتی درباره ایجاد همتاهای (clones) گره‌های گراف فراخوانی و حذف گره‌های گراف فراخوانی در طول بهینه‌سازی‌ها و تبدیلات میان‌رویه‌ای ایجاد می‌کند. کاربرد اصلی آن این است که ابزارهای ایجاد وصله زنده (live\-patch) بتوانند مجموعه توابعی را که برای جایگزینی کامل یک تابع خاص نیاز به وصله زنده دارند، تعیین کنند (نگاه کنید به \&\fB\-flive\-patching\fR). نام فایل با افزودن پسوند \f(CW\*(C`ipa\-clones\*(C'\fR به نام فایل منبع تولید می‌شود و فایل در همان دایرکتوری فایل خروجی ایجاد می‌گردد. هر مدخل در فایل روی یک خط مجزا شامل فیلدهایی است که با نقطه ویرگول (semicolon) از یکدیگر جدا شده‌اند. .Sp در صورت ایجاد همتا در گراف فراخوانی، فیلدهای مجزا عبارتند از: .RS 4 .IP 1. 4 .IX Item "1." رشته \f(CW\*(C`Callgraph clone\*(C'\fR. .IP 2. 4 .IX Item "2." نام تابعی که از آن همتاسازی می‌شود، همان‌گونه که به اسمبلر ارائه شده است. .IP 3. 4 .IX Item "3." عددی که به صورت یکتا تابع در حال همتاسازی را در گراف فراخوانی مشخص می‌کند. توجه داشته باشید که این عدد فقط درون یک واحد کامپایل یا در تحلیل کل برنامه یکتا است، اما احتمالاً در این دو فاز متفاوت خواهد بود. .IP 4. 4 .IX Item "4." نام فایل منبعی که تابع در آن تعریف شده است. .IP 5. 4 .IX Item "5." شماره خطی که تعریف تابع در آن قرار دارد. .IP 6. 4 .IX Item "6." شماره ستونی که تعریف تابع در آن قرار دارد. .IP 7. 4 .IX Item "7." نام همتای جدید تابع، همان‌گونه که به اسمبلر ارائه شده است. .IP 8. 4 .IX Item "8." عددی که به صورت یکتا همتای جدید تابع را در گراف فراخوانی مشخص می‌کند. توجه داشته باشید که این عدد فقط درون یک واحد کامپایل یا در تحلیل کل برنامه یکتا است، اما احتمالاً در این دو فاز متفاوت خواهد بود. .IP 9. 4 .IX Item "9." نام فایل منبعی که مکان کد منبعِ همتای جدید به آن اشاره دارد. .IP 10. 4 .IX Item "10." شماره خطی که مکان کد منبعِ همتای جدید به آن اشاره دارد. .IP 11. 4 .IX Item "11." شماره ستونی که مکان کد منبعِ همتای جدید به آن اشاره دارد. .IP 12. 4 .IX Item "12." رشته‌ای که دلیل همتاسازی را مشخص می‌کند. .RE .RS 4 .Sp در صورت حذف همتا در گراف فراخوانی، فیلدهای مجزا عبارتند از: .IP 1. 4 .IX Item "1." رشته \f(CW\*(C`Callgraph removal\*(C'\fR. .IP 2. 4 .IX Item "2." نام تابعی که حذف می‌شود، همان‌گونه که به اسمبلر ارائه می‌شد. .IP 3. 4 .IX Item "3." عددی که به صورت یکتا تابع همتاسازی‌شده را در گراف فراخوانی مشخص می‌کند. توجه داشته باشید که این عدد فقط درون یک واحد کامپایل یا در تحلیل کل برنامه یکتا است، اما احتمالاً در این دو فاز متفاوت خواهد بود. .IP 4. 4 .IX Item "4." نام فایل منبعی که تابع در آن تعریف شده است. .IP 5. 4 .IX Item "5." شماره خطی که تعریف تابع در آن قرار دارد. .IP 6. 4 .IX Item "6." شماره ستونی که تعریف تابع در آن قرار دارد. .RE .RS 4 .RE.IP \fB\-fdump\-lang\fR 4 .IX Item "-fdump-lang" تخلیه اطلاعات وابسته به زبان برنامه‌نویسی. نام فایل با افزودن \&\fI.lang\fR به نام فایل منبع ساخته می‌شود. .IP \fB\-fdump\-lang\-all\fR 4 .IX Item "-fdump-lang-all" .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 کنترل تخلیه اطلاعات وابسته به زبان. بخش‌های \fIoptions\fR و \fIfilename\fR همان‌طور که در گزینه \&\fB\-fdump\-tree\fR شرح داده شده است عمل می‌کنند. مقادیر \fIswitch\fR زیر پذیرفته می‌شوند: .RS 4 .IP \fBall\fR 4 .IX Item "all" فعال‌سازی تمام تخلیه‌های وابسته به زبان. .IP \fBclass\fR 4 .IX Item "class" تخلیه اطلاعات سلسله‌مراتب کلاس‌ها. اطلاعات جدول مجازی (virtual table) صادر می‌شود مگر آن‌که \*(Aq\fBslim\fR\*(Aq مشخص شده باشد. این گزینه فقط برای C++ کاربرد دارد. .IP \fBmodule\fR 4 .IX Item "module" تخلیه اطلاعات ماژول. گزینه‌های \fBlineno\fR (مکان‌ها)، \&\fBgraph\fR (دسترس‌پذیری)، \fBblocks\fR (خوشه‌ها)، \&\fBuid\fR (سریال‌سازی)، \fBalias\fR (ادغام‌پذیر)، \&\fBasmname\fR (الروند)، \fBeh\fR (نگاشت‌کننده) و \fBvops\fR (ماکروها) ممکن است اطلاعات بیشتری ارائه دهند. این گزینه فقط برای C++ کاربرد دارد. .IP \fBraw\fR 4 .IX Item "raw" تخلیه داده‌های خام درخت داخلی. این گزینه فقط برای C++ کاربرد دارد. .RE .RS 4 .RE .IP \fB\-fdump\-passes\fR 4 .IX Item "-fdump-passes" چاپ فهرست گذرهای بهینه‌سازی که توسط گزینه‌های خط فرمان فعلی روشن یا خاموش شده‌اند در \fIstderr\fR. .IP \fB\-fdump\-statistics\-\fR\fIoption\fR 4 .IX Item "-fdump-statistics-option" فعال‌سازی و کنترل تخلیه آمار گذرها در یک فایل جداگانه. نام فایل با افزودن پسوندی که به \&\fB.statistics\fR ختم می‌شود به نام فایل منبع ایجاد می‌شود، و فایل در همان دایرکتوری فایل خروجی ایجاد می‌گردد. اگر از قالب \fB\-\fR\fIoption\fR استفاده شود، \fB\-stats\fR باعث می‌شود شمارنده‌ها در سرتاسر کل واحد ترجمه جمع بسته شوند، در حالی که \fB\-details\fR هر رویداد را همان‌طور که گذرها تولید می‌کنند تخلیه می‌کند. حالت پیش‌فرض بدون هیچ گزینه‌ای، جمع بستن شمارنده‌ها برای هر تابع کامپایل‌شده است. .IP \fB\-fdump\-tree\-all\fR 4 .IX Item "-fdump-tree-all" .PD 0 .IP \fB\-fdump\-tree\-\fR\fIswitch\fR 4 .IX Item "-fdump-tree-switch" .IP \fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4 .IX Item "-fdump-tree-switch-options" .IP \fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4 .IX Item "-fdump-tree-switch-options=filename" .PD کنترل تخلیه درخت زبان میانی به یک فایل در مراحل مختلف پردازش. اگر از قالب \fB\-\fR\fIoptions\fR استفاده شود، \fIoptions\fR فهرستی از گزینه‌های جداشده با \&\fB\-\fR است که جزئیات تخلیه را کنترل می‌کنند. همه گزینه‌ها برای همه تخلیه‌ها قابل اعمال نیستند؛ مواردی که بی‌معنی باشند نادیده گرفته می‌شوند. گزینه‌های زیر در دسترس هستند: .RS 4 .IP \fBaddress\fR 4 .IX Item "address" چاپ آدرس هر گره. معمولاً این مورد بی‌معنی است چرا که با توجه به محیط و فایل منبع تغییر می‌کند. کاربرد اصلی آن برای تطبیق دادن یک فایل تخلیه با محیط اشکال‌زدایی است. .IP \fBasmname\fR 4 .IX Item "asmname" اگر \f(CW\*(C`DECL_ASSEMBLER_NAME\*(C'\fR برای یک اعلان مشخص تنظیم شده باشد، به‌جای \f(CW\*(C`DECL_NAME\*(C'\fR از آن در تخلیه استفاده شود. کاربرد اصلی آن، سهولت استفاده هنگام ردیابی به عقب از نام‌های درهم‌ریخته (mangled names) در فایل اسمبلی است. .IP \fBslim\fR 4 .IX Item "slim" هنگام تخلیه نمایش‌های میانی بخش فرانت‌اند، از تخلیه اعضای یک حوزه یا بدنه یک تابع صرفاً به این دلیل که به آن حوزه رسیده شده است، جلوگیری می‌کند. چنین مواردی را تنها زمانی تخلیه می‌کند که مستقیماً از طریق مسیر دیگری قابل دسترس باشند. .Sp هنگام تخلیه درخت‌های زیباسازی‌شده، این گزینه از تخلیه بدنه ساختارهای کنترلی جلوگیری می‌کند. .Sp هنگام تخلیه RTL، زبان RTL را به‌جای نمایش پیش‌فرض شبیه LISP، در قالب فشرده (slim) چاپ می‌کند. .IP \fBraw\fR 4 .IX Item "raw" چاپ نمایشی خام از درخت. به‌طور پیش‌فرض، درخت‌ها به‌صورت نمایشی شبیه C زیباسازی شده و چاپ می‌شوند. .IP \fBdetails\fR 4 .IX Item "details" فعال‌سازی تخلیه‌های با جزئیات بیشتر (توسط همه گزینه‌های تخلیه رعایت نمی‌شود). همچنین اطلاعات حاصل از گذرهای بهینه‌سازی را شامل می‌شود. .IP \fBstats\fR 4 .IX Item "stats" فعال‌سازی تخلیه آمارهای گوناگون درباره گذر (توسط همه گزینه‌های تخلیه رعایت نمی‌شود). .IP \fBblocks\fR 4 .IX Item "blocks" فعال‌سازی نمایش مرزهای بلوک‌های پایه‌ای (در تخلیه‌های خام غیرفعال است). .IP \fBgraph\fR 4 .IX Item "graph" برای هر یک از سایر فایل‌های تخلیه مشخص‌شده (\fB\-fdump\-rtl\-\fR\fIpass\fR)، نمایشی از گراف جریان کنترل مناسب برای مشاهده با GraphViz را در \fIfile.passid.pass.dot\fR تخلیه می‌کند. هر تابع در فایل به‌صورت یک زیرگراف زیباسازی می‌شود تا GraphViz بتواند همه آن‌ها را در یک نمودار واحد رسم کند. .Sp این گزینه در حال حاضر فقط برای تخلیه‌های RTL کار می‌کند و RTL همیشه به صورت فشرده (slim) تخلیه می‌شود. .IP \fBvops\fR 4 .IX Item "vops" فعال‌سازی نمایش عملوندهای مجازی برای هر گزاره. .IP \fBlineno\fR 4 .IX Item "lineno" فعال‌سازی نمایش شماره خطوط برای گزاره‌ها. .IP \fBuid\fR 4 .IX Item "uid" فعال‌سازی نمایش شناسه یکتا (\f(CW\*(C`DECL_UID\*(C'\fR) برای هر متغیر. .IP \fBverbose\fR 4 .IX Item "verbose" فعال‌سازی نمایش تخلیه درخت برای هر گزاره. .IP \fBeh\fR 4 .IX Item "eh" فعال‌سازی نمایش شماره ناحیه EH که شامل هر گزاره است. .IP \fBscev\fR 4 .IX Item "scev" فعال‌سازی نمایش جزئیات تحلیل تکامل اسکالر (scalar evolution). .IP \fBoptimized\fR 4 .IX Item "optimized" فعال‌سازی نمایش اطلاعات بهینه‌سازی (فقط در گذرهای خاصی در دسترس است). .IP \fBmissed\fR 4 .IX Item "missed" فعال‌سازی نمایش اطلاعات بهینه‌سازی‌های ازدست‌رفته (فقط در گذرهای خاصی در دسترس است). .IP \fBnote\fR 4 .IX Item "note" فعال‌سازی سایر اطلاعات تفصیلی بهینه‌سازی (فقط در گذرهای خاصی در دسترس است). .IP \fBall\fR 4 .IX Item "all" روشن کردن همه گزینه‌ها، به جز \fBraw\fR، \fBslim\fR، \fBverbose\fR و \fBlineno\fR. .IP \fBoptall\fR 4 .IX Item "optall" روشن کردن همه گزینه‌های بهینه‌سازی، یعنی \fBoptimized\fR، \&\fBmissed\fR و \fBnote\fR. .RE .RS 4 .Sp برای تعیین این‌که چه تخلیه‌های درختی در دسترس هستند یا یافتن تخلیه برای گذر مورد نظر، مراحل زیر را دنبال کنید: .IP 1. 4 .IX Item "1." دستور GCC را با \fB\-fdump\-passes\fR اجرا کنید و در خروجی \fIstderr\fR به دنبال کدی بگردید که با گذر مورد نظر شما مطابقت دارد. برای مثال، کدهای \f(CW\*(C`tree\-evrp\*(C'\fR، \f(CW\*(C`tree\-vrp1\*(C'\fR و \&\f(CW\*(C`tree\-vrp2\*(C'\fR متناظر با سه گذر انتشار دامنه مقادیر (Value Range Propagation) هستند. عدد انتهای نام، فراخوانی‌های مجزای همان گذر را از یکدیگر متمایز می‌کند. .IP 2. 4 .IX Item "2." برای فعال‌سازی ایجاد فایل تخلیه، کد گذر را به پیشوند گزینه \&\fB\-fdump\-\fR الحاق کرده و GCC را با آن اجرا کنید. برای مثال، جهت فعال‌سازی تخلیه حاصل از گذر Early Value Range Propagation، دستور GCC را با گزینه \fB\-fdump\-tree\-evrp\fR اجرا کنید. به صورت اختیاری، می‌توانید نام فایل تخلیه را مشخص کنید. اگر نامی تعیین نکنید، GCC آن را طبق توضیحات زیر ایجاد می‌کند. .IP 3. 4 .IX Item "3." فایل تخلیه گذر را در فایلی بیابید که نام آن از سه جزء جداشده با نقطه تشکیل شده است: نام فایل منبعی که GCC برای کامپایل آن فراخوانی شده بود، یک پسوند عددی نشان‌دهنده شماره گذر به همراه حرف \fBt\fR برای گذرهای درختی (و حرف \fBr\fR برای گذرهای RTL)، و در نهایت کد گذر. برای مثال، تخلیه گذر Early VRP ممکن است در فایلی به نام \fImyfile.c.038t.evrp\fR در دایرکتوری کاری فعلی قرار داشته باشد. توجه داشته باشید که کدهای عددی پایدار نیستند و ممکن است از نسخه‌ای از GCC به نسخه دیگر تغییر کنند. .RE .RS 4 .RE.IP \fB\-fopt\-info\fR 4 .IX Item "-fopt-info" .PD 0 .IP \fB\-fopt\-info\-\fR\fIoptions\fR 4 .IX Item "-fopt-info-options" .IP \fB\-fopt\-info\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4 .IX Item "-fopt-info-options=filename" .PD خروجی‌های گزارش بهینه‌سازی را از گذرهای مختلف بهینه‌سازی کنترل می‌کند. اگر از قالب \&\fB\-\fR\fIoptions\fR استفاده شود، \fIoptions\fR فهرستی از کلیدواژه‌های گزینه است که با \&\fB\-\fR از هم جدا شده‌اند تا جزئیات گزارش و بهینه‌سازی‌ها را انتخاب کنند. .Sp گزینه‌های \fIoptions\fR را می‌توان به سه گروه تقسیم کرد: .RS 4 .IP 1. 4 .IX Item "1." گزینه‌هایی که مشخص می‌کنند چه نوع پیام‌هایی باید صادر شوند، .IP 2. 4 .IX Item "2." گزینه‌هایی که میزان جزئیات گزارش را تعیین می‌کنند، و .IP 3. 4 .IX Item "3." گزینه‌هایی که تعیین می‌کنند کدام بهینه‌سازی‌ها باید گنجانده شوند. .RE .RS 4 .Sp گزینه‌های هر گروه را می‌توان آزادانه با یکدیگر ترکیب کرد زیرا این گزینه‌ها هم‌پوشانی ندارند. با این حال، در صورت بروز هرگونه تعارض، گزینه‌های متأخرتر در خط فرمان بر گزینه‌های متقدم اولویت دارند. .Sp گزینه‌های زیر کنترل می‌کنند که چه نوع پیام‌هایی باید صادر شوند: .IP \fBoptimized\fR 4 .IX Item "optimized" چاپ اطلاعات هنگام اعمال موفقیت‌آمیز یک بهینه‌سازی. این‌که چه اطلاعاتی مرتبط است به خود گذر بهینه‌سازی بستگی دارد. برای نمونه، گذرهای برداری‌ساز (vectorizer) مکان مبدأ حلقه‌هایی را که با موفقیت برداری‌سازی شده‌اند چاپ می‌کنند. .IP \fBmissed\fR 4 .IX Item "missed" چاپ اطلاعات درباره بهینه‌سازی‌های ازدست‌رفته. هر گذر بهینه‌سازی مشخص می‌کند چه اطلاعاتی در خروجی گنجانده شود. .IP \fBnote\fR 4 .IX Item "note" چاپ اطلاعات با جزئیات بیشتر درباره بهینه‌سازی‌ها، مانند برخی دگرگونی‌ها، پیام‌های دقیق‌تر درباره تصمیم‌گیری‌ها و غیره. .IP \fBall\fR 4 .IX Item "all" چاپ اطلاعات تفصیلی بهینه‌سازی. این گزینه شامل \&\fBoptimized\fR، \fBmissed\fR و \fBnote\fR است. .RE .RS 4 .Sp گزینه زیر میزان پرگویی (verbosity) گزارش را کنترل می‌کند: .IP \fBinternals\fR 4 .IX Item "internals" به‌طور پیش‌فرض، فقط پیام‌های «سطح بالا» صادر می‌شوند. این گزینه پیام‌های اضافی با جزئیات بیشتر را فعال می‌کند که احتمالاً فقط برای توسعه‌دهندگان GCC جالب توجه خواهد بود. .RE .RS 4 .Sp یک یا چند مورد از کلیدواژه‌های گزینه‌ای زیر را می‌توان برای توصیف یک گروه از بهینه‌سازی‌ها به کار برد: .IP \fBipa\fR 4 .IX Item "ipa" فعال‌سازی گزارش‌ها از تمام بهینه‌سازی‌های بین‌رویه‌ای (interprocedural). .IP \fBloop\fR 4 .IX Item "loop" فعال‌سازی گزارش‌ها از تمام بهینه‌سازی‌های حلقه (loop). .IP \fBinline\fR 4 .IX Item "inline" فعال‌سازی گزارش‌ها از تمام بهینه‌سازی‌های درون‌خطی‌سازی (inlining). .IP \fBomp\fR 4 .IX Item "omp" فعال‌سازی گزارش‌ها از تمام بهینه‌سازی‌های OMP (تخلیه بار پردازشی و چندپردازشی). .IP \fBvec\fR 4 .IX Item "vec" فعال‌سازی گزارش‌ها از تمام بهینه‌سازی‌های برداری‌سازی (vectorization). .IP \fBoptall\fR 4 .IX Item "optall" فعال‌سازی گزارش‌ها از تمام بهینه‌سازی‌ها. این گزینه یک ابرمجموعه از گروه‌های بهینه‌سازی فهرست‌شده در بالا است. .RE .RS 4 .Sp اگر \fIoptions\fR حذف شود، مقدار پیش‌فرض آن \fBoptimized\-optall\fR خواهد بود، به این معنی که پیام‌های مربوط به بهینه‌سازی‌های موفقیت‌آمیز از همه گذرها ثبت می‌شوند و پیام‌هایی که به عنوان «داخلی» (internals) در نظر گرفته می‌شوند نادیده گرفته خواهند شد. .Sp اگر \fIfilename\fR مشخص شود، گزارش‌های تمام بهینه‌سازی‌های منطبق در انتهای \fIfilename\fR الحاق می‌شوند. در غیر این صورت، گزارش در \fIstderr\fR خروجی داده می‌شود. اگرچه استفاده از چندین گزینه \&\fB\-fopt\-info\fR مجاز است، تنها یکی از آن‌ها می‌تواند حاوی یک \fIfilename\fR باشد. اگر نام‌فایل‌های دیگری ارائه شوند، تمام گزینه‌ها به جز اولین گزینه نادیده گرفته می‌شوند. .Sp توجه داشته باشید که فایل خروجی \fIfilename\fR در صورت وجود چندین واحد ترجمه بازنویسی می‌شود. اگر خروجی یکپارچه از چندین واحد ترجمه مورد نظر است، باید به‌جای آن از \fIstderr\fR استفاده شود. .Sp در مثال زیر، اطلاعات بهینه‌سازی در \&\fIstderr\fR خروجی داده می‌شود: .Sp .Vb 1 \& gcc \-O3 \-fopt\-info .Ve .Sp این مثال: .Sp .Vb 1 \& gcc \-O3 \-fopt\-info\-missed=missed.all .Ve .Sp گزارش بهینه‌سازی‌های ازدست‌رفته را از تمام گذرها در \&\fImissed.all\fR ذخیره می‌کند، و این مثال: .Sp .Vb 1 \& gcc \-O2 \-ftree\-vectorize \-fopt\-info\-vec\-missed .Ve .Sp اطلاعات مربوط به فرصت‌های بهینه‌سازی ازدست‌رفته از گذرهای برداری‌سازی را در \fIstderr\fR چاپ می‌کند. توجه داشته باشید که \fB\-fopt\-info\-vec\-missed\fR معادل \&\fB\-fopt\-info\-missed\-vec\fR است. ترتیب نام گروه‌های بهینه‌سازی و انواع پیام‌های ذکرشده پس از \fB\-fopt\-info\fR اهمیتی ندارد. .Sp به عنوان مثالی دیگر: .Sp .Vb 1 \& gcc \-O3 \-fopt\-info\-inline\-optimized\-missed=inline.txt .Ve .Sp اطلاعات مربوط به بهینه‌سازی‌های ازدست‌رفته و همچنین مکان‌های بهینه‌سازی‌شده را از تمام گذرهای درون‌خطی‌سازی به \&\fIinline.txt\fR می‌فرستد. .Sp در نهایت، این دستور را در نظر بگیرید: .Sp .Vb 1 \& gcc \-fopt\-info\-vec\-missed=vec.miss \-fopt\-info\-loop\-optimized=loop.opt .Ve .Sp در اینجا دو نام فایل خروجی \fIvec.miss\fR و \fIloop.opt\fR دچار تعارض هستند، چرا که تنها یک فایل خروجی مجاز است. در این حالت، فقط گزینه اول اعمال می‌شود و گزینه‌های بعدی نادیده گرفته می‌شوند. بنابراین فقط فایل \fIvec.miss\fR ایجاد می‌شود که حاوی گزارش‌های برداری‌ساز درباره فرصت‌های ازدست‌رفته است. .RE .IP \fB\-fsave\-optimization\-record\fR 4 .IX Item "-fsave-optimization-record" یک فایل SRCFILE.opt\-record.json.gz ایجاد می‌کند که جزئیات بهینه‌سازی‌های انجام‌شده را برای بهینه‌سازی‌هایی که از \fB\-fopt\-info\fR پشتیبانی می‌کنند، ثبت می‌نماید. .Sp این گزینه آزمایشی است و ساختار داده‌ها در فایل فشرده JSON ممکن است تغییر کند. .Sp این گزینه تقریباً معادل یک نسخه ماشین‌خوان از \&\fB\-fopt\-info\-all\fR است؛ به صورت مجموعه‌ای از پیام‌ها به همراه فایل مبدأ، شماره خط و شماره ستون، همراه با داده‌های اضافی زیر برای هر پیام: .RS 4 .IP * 4 تعداد دفعات اجرای کدی که در حال بهینه‌سازی است، به همراه فراداده‌ای درباره این‌که آیا این داده از پروفایل واقعی به دست آمده یا صرفاً یک تخمین است، تا به مصرف‌کنندگان داده امکان اولویت‌بندی پیام‌ها بر اساس میزان پرکاربرد بودن (hotness) کد را بدهد، .IP * 4 نام تابع مربوط به کدی که در حال بهینه‌سازی است، در صورت کاربرد، .IP * 4 «زنجیره درون‌خطی‌سازی» (inlining chain) برای کدی که در حال بهینه‌سازی است، به‌طوری که وقتی یک تابع در چندین مکان مختلف درون‌خطی می‌شود (که خود ممکن است درون‌خطی شده باشند)، خواننده بتواند بین نسخه‌ها تمایز قائل شود، .IP * 4 اشیایی که بخش‌هایی از پیام را که به عبارت‌ها (expressions)، دستورها (statements) یا گره‌های جدول نماد (symbol\-table nodes) ارجاع دارند مشخص می‌کنند؛ این‌که به کدام‌یک از این دسته‌ها تعلق دارند و، در صورت دسترسی، مکان آن‌ها در کد مبدأ، .IP * 4 گذر GCC که پیام را صادر کرده است، و.IP * 4 موقعیت در کد خود GCC که پیام از آنجا صادر شده است .RE .RS 4 .Sp علاوه بر این، برخی پیام‌ها به طور منطقی درون پیام‌های دیگر تودرتو شده‌اند که بازتاب‌دهندهٔ جزئیات پیاده‌سازی گذرهای بهینه‌سازی است. .RE .IP \fB\-fsched\-verbose=\fR\fIn\fR 4 .IX Item "-fsched-verbose=n" در مقصدهایی که از زمان‌بندی دستورالعمل‌ها استفاده می‌کنند، این گزینه میزان خروجی اشکال‌زدایی‌ای را که زمان‌بند در فایل‌های رونوشت چاپ می‌کند، کنترل می‌کند. .Sp به ازای \fIn\fR بزرگ‌تر از صفر، \fB\-fsched\-verbose\fR همان اطلاعات \fB\-fdump\-rtl\-sched1\fR و \fB\-fdump\-rtl\-sched2\fR را خروجی می‌دهد. برای \fIn\fR بزرگ‌تر از یک، همچنین احتمالات بلوک پایه، اطلاعات تفصیلی فهرست آماده و اطلاعات unit/insn را خروجی می‌دهد. برای \fIn\fR بزرگ‌تر از دو، شامل RTL در نقطهٔ توقف (abort point)، جریان کنترل و اطلاعات نواحی می‌شود. و برای \fIn\fR بیشتر از چهار، \fB\-fsched\-verbose\fR همچنین شامل اطلاعات وابستگی است. .IP \fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR 4 .IX Item "-fenable-kind-pass" .PD 0 .IP \fB\-fdisable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4 .IX Item "-fdisable-kind-pass=range-list" .PD این مجموعه‌ای از گزینه‌ها است که برای فعال یا غیرفعال کردن صریح گذرهای بهینه‌سازی به کار می‌روند. این گزینه‌ها برای استفاده در اشکال‌زدایی GCC در نظر گرفته شده‌اند. کاربران کامپایلر در عوض باید از گزینه‌های معمولی برای فعال یا غیرفعال کردن گذرها استفاده کنند. .RS 4 .IP \fB\-fdisable\-ipa\-\fR\fIpass\fR 4 .IX Item "-fdisable-ipa-pass" گذر IPA با نام \fIpass\fR را غیرفعال می‌کند. \fIpass\fR نام گذر است. اگر همان گذر به صورت ایستا چندین بار در کامپایلر فراخوانی شود، باید یک شمارهٔ ترتیبی که از ۱ شروع می‌شود به انتهای نام گذر افزوده شود. .IP \fB\-fdisable\-rtl\-\fR\fIpass\fR 4 .IX Item "-fdisable-rtl-pass" .PD 0 .IP \fB\-fdisable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4 .IX Item "-fdisable-rtl-pass=range-list" .PD گذر RTL با نام \fIpass\fR را غیرفعال می‌کند. \fIpass\fR نام گذر است. اگر همان گذر به صورت ایستا چندین بار در کامپایلر فراخوانی شود، باید یک شمارهٔ ترتیبی که از ۱ شروع می‌شود به انتهای نام گذر افزوده شود. \fIrange\-list\fR فهرستی جداشده با کاما از بازه‌های توابع یا نام‌های اسمبلی است. هر بازه یک جفت‌عدد جداشده با دو‌نقطه است. بازه در هر دو انتها بسته (شامل دو عدد انتهایی) است. اگر بازه بدیهی باشد، جفت‌عدد می‌تواند به یک عدد تنها ساده شود. اگر \fIuid\fR گره گراف فراخوانی تابع درون یکی از بازه‌های مشخص‌شده قرار گیرد، آن \fIpass\fR برای آن تابع غیرفعال می‌شود. مقدار \fIuid\fR در سرآیند تابع در یک فایل رونوشت نشان داده می‌شود، و نام‌های گذر را می‌توان با استفاده از گزینهٔ \fB\-fdump\-passes\fR رونوشت گرفت. .IP \fB\-fdisable\-tree\-\fR\fIpass\fR 4 .IX Item "-fdisable-tree-pass" .PD 0 .IP \fB\-fdisable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4 .IX Item "-fdisable-tree-pass=range-list" .PD گذر tree با نام \fIpass\fR را غیرفعال می‌کند. برای شرح آرگومان‌های گزینه، \fB\-fdisable\-rtl\fR را ببینید. .IP \fB\-fenable\-ipa\-\fR\fIpass\fR 4 .IX Item "-fenable-ipa-pass" گذر IPA با نام \fIpass\fR را فعال می‌کند. \fIpass\fR نام گذر است. اگر همان گذر به صورت ایستا چندین بار در کامپایلر فراخوانی شود، باید یک شمارهٔ ترتیبی که از ۱ شروع می‌شود به انتهای نام گذر افزوده شود. .IP \fB\-fenable\-rtl\-\fR\fIpass\fR 4 .IX Item "-fenable-rtl-pass" .PD 0 .IP \fB\-fenable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4 .IX Item "-fenable-rtl-pass=range-list" .PD گذر RTL با نام \fIpass\fR را فعال می‌کند. برای شرح آرگومان‌های گزینه و مثال‌ها، \fB\-fdisable\-rtl\fR را ببینید. .IP \fB\-fenable\-tree\-\fR\fIpass\fR 4 .IX Item "-fenable-tree-pass" .PD 0 .IP \fB\-fenable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4 .IX Item "-fenable-tree-pass=range-list" .PD گذر tree با نام \fIpass\fR را فعال می‌کند. برای شرح آرگومان‌های گزینه، \fB\-fdisable\-rtl\fR را ببینید. .RE .RS 4 .Sp در اینجا چند مثال از کاربرد این گزینه‌ها آورده شده است. .Sp .Vb 10 \& # disable ccp1 for all functions \& \-fdisable\-tree\-ccp1 \& # disable complete unroll for function whose cgraph node uid is 1 \& \-fenable\-tree\-cunroll=1 \& # disable gcse2 for functions at the following ranges [1,1], \& # [300,400], and [400,1000] \& # disable gcse2 for functions foo and foo2 \& \-fdisable\-rtl\-gcse2=foo,foo2 \& # disable early inlining \& \-fdisable\-tree\-einline \& # disable ipa inlining \& \-fdisable\-ipa\-inline \& # enable tree full unroll \& \-fenable\-tree\-unroll .Ve .RE .IP \fB\-fchecking\fR 4 .IX Item "-fchecking" .PD 0 .IP \fB\-fchecking=\fR\fIn\fR 4 .IX Item "-fchecking=n" .PD بررسی سازگاری داخلی را فعال می‌کند. مقدار پیش‌فرض به پیکربندی کامپایلر بستگی دارد. \fB\-fchecking=2\fR بررسی‌های سازگاری داخلی بیشتری را فعال می‌کند که ممکن است بر تولید کد تأثیر بگذارد. .IP \fB\-frandom\-seed=\fR\fIstring\fR 4 .IX Item "-frandom-seed=string" این گزینه بذری (seed) را فراهم می‌کند که GCC به جای اعداد تصادفی در تولید نام نمادهای مشخصی که باید در هر فایل کامپایل‌شده متفاوت باشند، استفاده می‌کند. همچنین برای قرار دادن مُهرهای یکتا در فایل‌های داده‌های پوشش (coverage data) و فایل‌های شیءِ تولیدکنندهٔ آن‌ها به کار می‌رود. می‌توانید از گزینهٔ \fB\-frandom\-seed\fR برای تولید فایل‌های شیءِ یکسان و بازتولیدپذیر استفاده کنید. .Sp مقدار \fIstring\fR می‌تواند یک عدد (ده‌دهی، هشت‌هشتی یا شانزده‌شانزدهی) یا یک رشتهٔ دلخواه باشد (که در این صورت با محاسبهٔ CRC32 به یک عدد تبدیل می‌شود). .Sp مقدار \fIstring\fR باید برای هر فایلی که کامپایل می‌کنید متفاوت باشد. .IP \fB\-save\-temps\fR 4 .IX Item "-save-temps" فایل‌های واسط معمولِ «موقتی» را به طور دائمی ذخیره می‌کند؛ آن‌ها را همان‌گونه که در ذیل \fB\-dumpbase\fR و \fB\-dumpdir\fR شرح داده شده، به عنوان فایل‌های خروجی کمکی نام‌گذاری می‌کند. .Sp هنگامی که در ترکیب با گزینهٔ خط فرمان \fB\-x\fR استفاده می‌شود، \fB\-save\-temps\fR به اندازهٔ کافی هوشمند است که از بازنویسی روی فایل منبع ورودی با همان پسوند فایل واسط جلوگیری کند. فایل واسط متناظر را می‌توان با تغییر نام فایل منبع پیش از استفاده از \fB\-save\-temps\fR به دست آورد. .IP \fB\-save\-temps=cwd\fR 4 .IX Item "-save-temps=cwd" معادل با \fB\-save\-temps \-dumpdir ./\fR است. .IP \fB\-save\-temps=obj\fR 4 .IX Item "-save-temps=obj" معادل با \fB\-save\-temps \-dumpdir \fR\f(BIoutdir/\fR است، که در آن \fIoutdir/\fR دایرکتوریِ فایل خروجی مشخص‌شده پس از گزینهٔ \fB\-o\fR است، شامل هرگونه جداکنندهٔ دایرکتوری. اگر از گزینهٔ \fB\-o\fR استفاده نشود، سوئیچ \fB\-save\-temps=obj\fR مانند \fB\-save\-temps=cwd\fR عمل می‌کند. .IP \fB\-time\fR[\fB=\fR\fIfile\fR] 4 .IX Item "-time[=file]" زمان CPU مصرف‌شده توسط هر زیرپردازش در توالی کامپایل را گزارش می‌دهد. برای فایل‌های منبع C، این شامل خود کامپایلر و اسمبلر است (به علاوهٔ پیونددهنده در صورتی که پیونددهی انجام شود). .Sp بدون مشخص کردن یک فایل خروجی، خروجی به این صورت خواهد بود: .Sp .Vb 2 \& # cc1 0.12 0.01 \& # as 0.00 0.01 .Ve .Sp اولین عدد در هر سطر «زمان کاربر» (user time) است، یعنی زمانی که صرف اجرای خود برنامه شده است. عدد دوم «زمان سیستم» (system time) است، زمانی که صرف اجرای روال‌های سیستم‌عامل به نیابت از برنامه شده است. هر دو عدد به ثانیه هستند. .Sp با مشخص کردن یک فایل خروجی، خروجی به انتهای فایل نام‌برده پیوست می‌شود و به این صورت خواهد بود: .Sp .Vb 2 \& 0.12 0.01 cc1 \& 0.00 0.01 as .Ve .Sp «زمان کاربر» و «زمان سیستم» به قبل از نام برنامه منتقل می‌شوند، و گزینه‌های فرستاده‌شده به برنامه نمایش داده می‌شوند، تا بعداً بتوان فهمید چه فایلی در حال کامپایل بوده و با چه گزینه‌هایی. .IP \fB\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR] 4 .IX Item "-fdump-final-insns[=file]" نمایش درونی نهایی (RTL) را در \fIfile\fR رونوشت می‌گیرد. اگر آرگومان اختیاری حذف شود (یا اگر \fIfile\fR برابر با \f(CW\*(C`.\*(C'\fR باشد)، نام فایل رونوشت با پیوست کردن \f(CW\*(C`.gkd\*(C'\fR به نام پایهٔ رونوشت تعیین می‌شود، \fB\-dumpbase\fR را ببینید..IP \fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR] 4 .IX Item "-fcompare-debug[=opts]" اگر در طول کامپایل هیچ خطایی رخ ندهد، کامپایلر را برای بار دوم اجرا می‌کند و \fIopts\fR و \fB\-fcompare\-debug\-second\fR را به آرگومان‌های ارسال‌شده به کامپایل دوم می‌افزاید. نمایش درونی نهایی را در هر دو کامپایل برون‌ریزی (dump) کرده و در صورت وجود تفاوت میان آن‌ها، یک خطا چاپ می‌کند. .Sp اگر علامت مساوی درج نشود، گزینهٔ پیش‌فرض \fB\-gtoggle\fR استفاده می‌شود. .Sp متغیر محیطی \fBGCC_COMPARE_DEBUG\fR در صورت تعریف شدن، غیرخالی بودن و غیرصفر بودن، به‌طور ضمنی \fB\-fcompare\-debug\fR را فعال می‌کند. اگر \fBGCC_COMPARE_DEBUG\fR با رشته‌ای مقداردهی شود که با یک خط تیره شروع می‌شود، آن رشته برای \fIopts\fR استفاده می‌شود؛ در غیر این صورت مقدار پیش‌فرض \fB\-gtoggle\fR به کار می‌رود. .Sp گزینهٔ \&\fB\-fcompare\-debug=\fR، با علامت مساوی اما بدون \fIopts\fR، معادل \fB\-fno\-compare\-debug\fR است که برون‌ریزی نمایش درونی نهایی و کامپایل دوم را غیرفعال کرده و حتی از اعمال اثر \fBGCC_COMPARE_DEBUG\fR نیز جلوگیری می‌کند. .Sp برای بررسی پوشش کامل در هنگام آزمایش با \fB\-fcompare\-debug\fR، متغیر \&\fBGCC_COMPARE_DEBUG\fR را مثلاً روی \fB\-fcompare\-debug\-not\-overridden\fR تنظیم کنید، که GCC آن را به عنوان یک گزینهٔ نامعتبر در هر کامپایل واقعی (به جای پیش‌پردازش، اسمبلی یا پیوند) رد می‌کند. برای دریافت صرفاً یک هشدار، تنظیم \fBGCC_COMPARE_DEBUG\fR به \fB\-w%n\-fcompare\-debug not overridden\fR کافی خواهد بود. .IP \fB\-fcompare\-debug\-second\fR 4 .IX Item "-fcompare-debug-second" این گزینه به‌طور ضمنی برای کامپایل دومی که توسط \fB\-fcompare\-debug\fR درخواست شده است، همراه با گزینه‌هایی برای بی‌صدا کردن هشدارها و حذف سایر گزینه‌هایی که باعث می‌شوند کامپایلر به عنوان یک اثر جانبی خروجی در فایل یا خروجی استاندارد تولید کند، به کامپایلر ارسال می‌شود. فایل‌های دامپ و فایل‌های موقت حفظ‌شده تغییر نام می‌یابند تا شامل پسوند اضافی \&\f(CW\*(C`.gk\*(C'\fR در حین کامپایل دوم باشند و از بازنویسی روی فایل‌های تولیدشده توسط کامپایل اول جلوگیری شود. .Sp هنگامی که این گزینه به گردانندهٔ کامپایلر (compiler driver) ارسال شود، باعث می‌شود کامپایل \fIاول\fR نادیده گرفته شود، که این امر کاربردی به جز اشکال‌زدایی خود کامپایلر ندارد. .IP \fB\-gtoggle\fR 4 .IX Item "-gtoggle" تولید اطلاعات اشکال‌زدایی را در صورتی که بدون این گزینه تولید می‌شد خاموش می‌کند، یا در غیر این صورت آن را در سطح ۲ فعال می‌سازد. جایگاه این آرگومان در خط فرمان اهمیتی ندارد؛ این گزینه پس از پردازش تمام گزینه‌های دیگر اعمال می‌شود و صرف‌نظر از این‌که چند بار مشخص شده باشد، تنها یک‌بار اعمال می‌گردد. کاربرد اصلی این گزینه همراه با \&\fB\-fcompare\-debug\fR است. .IP \fB\-fvar\-tracking\-assignments\-toggle\fR 4 .IX Item "-fvar-tracking-assignments-toggle" وضعیت \fB\-fvar\-tracking\-assignments\fR را تغییر وضعیت (toggle) می‌دهد، همان‌طور که \&\fB\-gtoggle\fR وضعیت \fB\-g\fR را تغییر می‌دهد. .IP \fB\-Q\fR 4 .IX Item "-Q" هنگامی که در خط فرمان پیش از \fB\-\-help=\fR استفاده شود، \fB\-Q\fR به عنوان تغییردهندهٔ خروجی راهنما عمل می‌کند. .Sp در غیر این صورت، این گزینه باعث می‌شود که کامپایلر نام هر تابع را هنگام کامپایل شدن چاپ کند و آمارهایی دربارهٔ هر گذر (pass) پس از پایان یافتن آن نمایش دهد. .IP \fB\-ftime\-report\fR 4 .IX Item "-ftime-report" باعث می‌شود کامپایلر پس از اتمام کار، آمارهایی دربارهٔ زمان مصرف‌شده توسط هر گذر (pass) در stderr چاپ کند. .Sp اگر خروجی SARIF برای تشخیص‌ها از طریق \&\fB\-fdiagnostics\-format=sarif\-file\fR یا \&\fB\-fdiagnostics\-format=sarif\-stderr\fR درخواست شده باشد، اطلاعات \fB\-ftime\-report\fR در قالب JSON به عنوان بخشی از خروجی SARIF صادر می‌شود. فرمت دقیق این داده‌های JSON ممکن است دستخوش تغییر شود، و به دلیل ثبت شدن در نقطه‌ای کمی متفاوت در درون کامپایلر، مقادیر ممکن است دقیقاً با مقادیر ارسال‌شده به stderr مطابقت نداشته باشند. .IP \fB\-ftime\-report\-details\fR 4 .IX Item "-ftime-report-details" زمان مصرف‌شده توسط بخش‌های زیرساختی را برای هر گذر (pass) به‌طور جداگانه ثبت می‌کند. .IP \fB\-fira\-verbose=\fR\fIn\fR 4 .IX Item "-fira-verbose=n" میزان جزئیات (verbosity) فایل دامپ را برای تخصیص‌دهندهٔ یکپارچهٔ ثبات (integrated register allocator) کنترل می‌کند. مقدار پیش‌فرض ۵ است. اگر مقدار \fIn\fR بزرگ‌تر یا مساوی ۱۰ باشد، خروجی دامپ با همان فرمت \fIn\fR منهای ۱۰ به stderr ارسال می‌شود. .IP \fB\-flto\-report\fR 4 .IX Item "-flto-report" گزارشی حاوی جزئیات درونی دربارهٔ عملکرد بهینه‌ساز زمان پیوند (link-time optimizer) چاپ می‌کند. محتویات این گزارش از نسخه‌ای به نسخهٔ دیگر متفاوت است. این گزینه برای استفادهٔ توسعه‌دهندگان GCC هنگام پردازش فایل‌های شیء در حالت LTO (از طریق \fB\-flto\fR) در نظر گرفته شده است. .Sp به‌طور پیش‌فرض غیرفعال است. .IP \fB\-flto\-report\-wpa\fR 4 .IX Item "-flto-report-wpa" مانند \fB\-flto\-report\fR است، اما تنها برای فاز WPA در بهینه‌سازی زمان پیوند خروجی چاپ می‌کند. .IP \fB\-fmem\-report\fR 4 .IX Item "-fmem-report" باعث می‌شود کامپایلر پس از اتمام کار، آمارهایی دربارهٔ تخصیص حافظهٔ دائمی چاپ کند. .IP \fB\-fmem\-report\-wpa\fR 4 .IX Item "-fmem-report-wpa" باعث می‌شود کامپایلر آمارهایی دربارهٔ تخصیص حافظهٔ دائمی را صرفاً برای فاز WPA چاپ کند. .IP \fB\-fpre\-ipa\-mem\-report\fR 4 .IX Item "-fpre-ipa-mem-report" .PD 0 .IP \fB\-fpost\-ipa\-mem\-report\fR 4 .IX Item "-fpost-ipa-mem-report" .PD باعث می‌شود کامپایلر آمارهایی دربارهٔ تخصیص حافظهٔ دائمی را قبل یا بعد از بهینه‌سازی میان‌روالی (interprocedural optimization) چاپ کند. .IP \fB\-fmultiflags\fR 4 .IX Item "-fmultiflags" این گزینه استفاده از \f(CW\*(C`TFLAGS\*(C'\fR آگاه از multilib را برای ساخت کتابخانه‌های مقصد با گزینه‌هایی متفاوت از آنچه کامپایلر به‌طور پیش‌فرض پیکربندی شده است، از طریق به‌کارگیری مشخصه‌های (specs) تعیین‌شده توسط بخش‌های درونی کامپایلر، مقصد (target) یا سازندگان در زمان پیکربندی (configure time) امکان‌پذیر می‌سازد. .Sp مانند \f(CW\*(C`TFLAGS\*(C'\fR، این قابلیت اجازه می‌دهد کتابخانه‌های مقصد برای محیط‌های پایه و سازگار ساخته شوند، در حالی که کامپایلر به‌طور پیش‌فرض از گزینه‌های پیشرفته‌تر استفاده می‌کند. این ویژگی از آن جهت کاربردی است که کاربران در صورت نامناسب بودن مقادیر پیش‌فرض برای محیط مقصد، می‌توانند به سادگی پیش‌فرض‌های پیکربندی کامپایلر را هنگام ساخت برنامه‌های خود بازنویسی (override) کنند، در حالی که بازسازی کتابخانه‌های زمان اجرا معمولاً آسان یا مطلوب نیست. .Sp برخلاف \f(CW\*(C`TFLAGS\*(C'\fR، استفاده از مشخصه‌ها (specs) امکان انتخاب پرچم‌های متفاوت را برای multilibهای گوناگون فراهم می‌کند. روش انجام این کار، ساخت برنامه با \fBmake TFLAGS=\-fmultiflags\fR پس از پیکربندی با \&\fB\-\-with\-specs=%{fmultiflags:...}\fR است. .Sp این گزینه پس از اینکه گرداننده (driver) پردازش driver self spec را تمام کرد، کنار گذاشته می‌شود. .Sp این گزینه همچنین برای بررسی این‌که آیا \f(CW\*(C`TFLAGS\*(C'\fR برای ساخت تمام کتابخانه‌های مقصد استفاده می‌شوند یا خیر، با پیکربندی یک کامپایلر غیر-bootstrap به صورت \&\fB\-\-with\-specs=\*(Aq%{!fmultiflags:%emissing TFLAGS}\*(Aq\fR و ساخت کامپایلر و کتابخانه‌های مقصد مفید است. .IP \fB\-fprofile\-report\fR 4 .IX Item "-fprofile-report" باعث می‌شود کامپایلر آمارهایی دربارهٔ سازگاری پروفایل (تخمینی) و اثر گذرهای مجزا چاپ کند. .IP \fB\-fstack\-usage\fR 4 .IX Item "-fstack-usage" باعث می‌شود کامپایلر اطلاعات میزان مصرف پشته (stack) را برای برنامه، بر پایهٔ هر تابع، در خروجی ارائه دهد. نام فایل دامپ با افزودن \&\fI.su\fR به انتهای \fIauxname\fR ساخته می‌شود. در صورتی که نام فایل خروجی صراحتاً تعیین شده باشد و فایل اجرایی نباشد، \fIauxname\fR از نام آن مشتق می‌شود؛ در غیر این صورت نام پایه (basename) فایل مبدأ خواهد بود. هر مدخل از سه فیلد تشکیل شده است: .RS 4 .IP * 4 نام تابع. .IP * 4 تعداد بایت‌ها. .IP * 4 یک یا چند توصیف‌گر: \f(CW\*(C`static\*(C'\fR، \f(CW\*(C`dynamic\*(C'\fR، \f(CW\*(C`bounded\*(C'\fR. .RE .RS 4 .Sp توصیف‌گر \f(CW\*(C`static\*(C'\fR به این معنی است که تابع پشته را به‌طور ایستا دست‌کاری می‌کند: تعداد مشخص و ثابتی بایت در هنگام ورود به تابع برای فریم تخصیص می‌یابد و هنگام خروج از تابع آزاد می‌شود؛ هیچ‌گونه تغییر دیگری روی پشته درون تابع اعمال نمی‌گردد. فیلد دوم نمایانگر همین تعداد بایت ثابت است. .Sp توصیف‌گر \f(CW\*(C`dynamic\*(C'\fR به این معنی است که تابع پشته را به‌طور پویا دست‌کاری می‌کند: علاوه بر تخصیص ایستای شرح‌داده‌شده در بالا، تغییراتی در پشته درون بدنهٔ تابع انجام می‌شود، برای مثال قرار دادن یا برداشتن آرگومان‌ها (push/pop) در هنگام فراخوانی توابع. اگر توصیف‌گر \f(CW\*(C`bounded\*(C'\fR نیز موجود باشد، میزان این تنظیمات در زمان کامپایل کران‌دار است و فیلد دوم کران بالای کل پشتهٔ مصرف‌شده توسط تابع را نشان می‌دهد. اگر این توصیف‌گر موجود نباشد، میزان این تنظیمات در زمان کامپایل کران‌دار نیست و فیلد دوم تنها نمایانگر بخش کران‌دار خواهد بود. .RE .IP \fB\-fstats\fR 4 .IX Item "-fstats" در پایان کامپایل، آمارهایی دربارهٔ پردازش فرانت‌اند (front-end) صادر می‌کند. این گزینه فقط توسط فرانت‌اند C++ پشتیبانی می‌شود و اطلاعات آن به‌طور کلی صرفاً برای تیم توسعهٔ G++ کاربرد دارد. .IP \fB\-fdbg\-cnt\-list\fR 4 .IX Item "-fdbg-cnt-list" نام و کران بالای شمارنده را برای تمام شمارنده‌های اشکال‌زدایی چاپ می‌کند. .IP \fB\-fdbg\-cnt=\fR\fIcounter\-value\-list\fR 4 .IX Item "-fdbg-cnt=counter-value-list" کران پایین و بالای شمارندهٔ اشکال‌زدایی داخلی را تعیین می‌کند. آرگومان \fIcounter\-value\-list\fR فهرستی جداشده با کاما از چندتایی‌های \fIname\fR:\fIlower_bound1\fR\-\fIupper_bound1\fR[:\fIlower_bound2\fR\-\fIupper_bound2\fR...] است که نام شمارنده و فهرست بازه‌های بسته را تعیین می‌کند. مقدار \fIlower_bound\fR اختیاری است و در صورت تعیین نشدن، با صفر مقداردهی اولیه می‌شود. به عنوان مثال، با \fB\-fdbg\-cnt=dce:2\-4:10\-11,tail_call:10\fR، عبارت \&\f(CWdbg_cnt(dce)\fR تنها برای فراخوانی‌های دوم، سوم، چهارم، دهم و یازدهم مقدار true برمی‌گرداند. برای \f(CWdbg_cnt(tail_call)\fR، برای ۱۰ فراخوانی اول مقدار true برگردانده می‌شود..IP \fB\-print\-file\-name=\fR\fIlibrary\fR 4 .IX Item "-print-file-name=library" نام کامل و مطلق فایل کتابخانهٔ \fIlibrary\fR را که هنگام پیوند استفاده می‌شود چاپ می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. با این گزینه، GCC هیچ چیز را کامپایل یا پیوند نمی‌زند؛ بلکه تنها نام فایل را چاپ می‌کند. .IP \fB\-print\-multi\-directory\fR 4 .IX Item "-print-multi-directory" نام دایرکتوری متناظر با multilib انتخاب‌شده توسط سایر سوئیچ‌های موجود در خط فرمان را چاپ می‌کند. فرض بر این است که این دایرکتوری در \fBGCC_EXEC_PREFIX\fR وجود دارد. .IP \fB\-print\-multi\-lib\fR 4 .IX Item "-print-multi-lib" نگاشت میان نام دایرکتوری‌های multilib و سوئیچ‌های کامپایلری که آن‌ها را فعال می‌کنند چاپ می‌کند. نام دایرکتوری با یک \&\fB;\fR از سوئیچ‌ها جدا می‌شود، و هر سوئیچ به جای \&\fB\-\fR با یک \fB@\fR آغاز می‌شود، بدون هیچ فاصله‌ای میان چندین سوئیچ. این قالب‌بندی برای تسهیل پردازش در شل در نظر گرفته شده است. .IP \fB\-print\-multi\-os\-directory\fR 4 .IX Item "-print-multi-os-directory" مسیر کتابخانه‌های سیستم‌عامل برای multilib انتخاب‌شده را به صورت نسبی به یک زیردایرکتوری \fIlib\fR چاپ می‌کند. اگر کتابخانه‌های سیستم‌عامل در زیردایرکتوری \fIlib\fR موجود باشند و از هیچ multilib استفاده نشود، این مقدار معمولاً فقط \fI.\fR است؛ اگر کتابخانه‌های سیستم‌عامل در دایرکتوری‌های هم‌سطح \fIlibsuffix\fR حضور داشته باشند، این گزینه مثلاً \fI../lib64\fR، \fI../lib\fR یا \&\fI../lib32\fR را چاپ می‌کند، یا اگر کتابخانه‌های سیستم‌عامل در زیردایرکتوری‌های \fIlib/subdir\fR باشند، مثلاً \fIamd64\fR، \fIsparcv9\fR یا \fIev6\fR را چاپ می‌کند. .IP \fB\-print\-multiarch\fR 4 .IX Item "-print-multiarch" مسیر کتابخانه‌های سیستم‌عامل برای چندمعماری (multiarch) انتخاب‌شده را به صورت نسبی به یک زیردایرکتوری \fIlib\fR چاپ می‌کند. .IP \fB\-print\-prog\-name=\fR\fIprogram\fR 4 .IX Item "-print-prog-name=program" مشابه \fB\-print\-file\-name\fR، اما برای برنامه‌ای مانند \fBcpp\fR جستجو می‌کند. .IP \fB\-print\-libgcc\-file\-name\fR 4 .IX Item "-print-libgcc-file-name" همانند \fB\-print\-file\-name=libgcc.a\fR است. .Sp این گزینه زمانی مفید است که از \fB\-nostdlib\fR یا \fB\-nodefaultlibs\fR استفاده می‌کنید اما همچنان می‌خواهید با \fIlibgcc.a\fR پیوند برقرار کنید. می‌توانید چنین کاری انجام دهید: .Sp .Vb 1 \& gcc \-nostdlib ... \`gcc \-print\-libgcc\-file\-name\` .Ve .IP \fB\-print\-search\-dirs\fR 4 .IX Item "-print-search-dirs" نام دایرکتوری نصب پیکربندی‌شده و فهرستی از دایرکتوری‌های برنامه و کتابخانه را که \fBgcc\fR در آن‌ها جستجو می‌کند چاپ می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. .Sp این گزینه زمانی مفید است که \fBgcc\fR پیام خطای \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR را چاپ می‌کند. برای رفع این مشکل، یا باید \fIcpp0\fR و دیگر اجزای کامپایلر را در جایی که \fBgcc\fR انتظار دارد قرار دهید، یا می‌توانید متغیر محیطی \fBGCC_EXEC_PREFIX\fR را روی دایرکتوری محل نصب آن‌ها تنظیم کنید. اسلش انتهایی \fB/\fR را فراموش نکنید. .IP \fB\-print\-sysroot\fR 4 .IX Item "-print-sysroot" دایرکتوری sysroot هدف را که در طول کامپایل استفاده می‌شود، چاپ می‌کند. این همان sysroot هدفی است که در زمان پیکربندی یا با استفاده از گزینهٔ \fB\-\-sysroot\fR تعیین شده است، احتمالاً به همراه یک پسوند اضافی که به گزینه‌های کامپایل بستگی دارد. اگر هیچ sysroot هدفی مشخص نشده باشد، این گزینه چیزی چاپ نمی‌کند. .IP \fB\-print\-sysroot\-headers\-suffix\fR 4 .IX Item "-print-sysroot-headers-suffix" پسوند افزوده‌شده به sysroot هدف را هنگام جستجوی سرآیندها چاپ می‌کند، یا اگر کامپایلر با چنین پسوندی پیکربندی نشده باشد خطایی صادر می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. .IP \fB\-dumpmachine\fR 4 .IX Item "-dumpmachine" ماشین هدف کامپایلر را چاپ می‌کند (برای نمونه، \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-و کار دیگری انجام نمی‌دهد. .IP \fB\-dumpversion\fR 4 .IX Item "-dumpversion" نسخهٔ کامپایلر را چاپ می‌کند (برای نمونه، \f(CW3.0\fR، \f(CW6.3.0\fR یا \f(CW7\fR)\-\-\-و کار دیگری انجام نمی‌دهد. این نسخهٔ کامپایلری است که در مسیرهای فایل‌سیستم و specs استفاده می‌شود. بسته به نحوهٔ پیکربندی کامپایلر، می‌تواند تنها یک تک‌عدد (نسخهٔ اصلی یا major)، دو عدد جداشده با نقطه (نسخهٔ اصلی و فرعی یا major و minor) یا سه عدد جداشده با نقطه (نسخه‌های major، minor و patchlevel) باشد. .IP \fB\-dumpfullversion\fR 4 .IX Item "-dumpfullversion" نسخهٔ کامل کامپایلر را چاپ می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. خروجی همیشه سه عدد جداشده با نقطه است: نسخه‌های major، minor و patchlevel. .IP \fB\-dumpspecs\fR 4 .IX Item "-dumpspecs" مشخصات درونی (built\-in specs) کامپایلر را چاپ می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. (این گزینه هنگام ساخت خود GCC استفاده می‌شود.).SS "گزینه‌های وابسته به ماشین (Machine\-Dependent Options)" .IX Subsection "Machine-Dependent Options" هر ماشین مقصدی که توسط GCC پشتیبانی می‌شود می‌تواند گزینه‌های خاص خود را داشته باشد\-\-\-برای نمونه، برای اینکه به شما امکان دهد برای گونه‌ای خاص از پردازنده یا ABI کامپایل کنید، یا بهینه‌سازی‌های ویژهٔ آن ماشین را کنترل نمایید. طبق قرارداد، نام گزینه‌های وابسته به ماشین با \&\fB\-m\fR آغاز می‌شود. .PP برخی از پیکربندی‌های کامپایلر همچنین از گزینه‌های ویژهٔ مقصد بیشتری پشتیبانی می‌کنند، که معمولاً برای سازگاری با سایر کامپایلرها روی همان پلتفرم است. .PP \fIگزینه‌های AArch64 (AArch64 Options)\fR .IX Subsection "AArch64 Options" .PP این گزینه‌ها برای پیاده‌سازی‌های AArch64 تعریف شده‌اند: .IP \fB\-mabi=\fR\fIname\fR 4 .IX Item "-mabi=name" تولید کد برای مدل دادهٔ مشخص‌شده. مقادیر مجاز عبارتند از \fBilp32\fR برای مدل دادهٔ شبه SysV که در آن int، long int و اشاره‌گرها ۳۲ بیتی هستند، و \fBlp64\fR برای مدل دادهٔ شبه SysV که در آن int، ۳۲ بیتی است اما long int و اشاره‌گرها ۶۴ بیتی هستند. .Sp مقدار پیش‌فرض به پیکربندی مقصد خاص بستگی دارد. توجه داشته باشید که ABIهای LP64 و ILP32 سازگار با پیوند (link\-compatible) نیستند؛ شما باید کل برنامهٔ خود را با یک ABI یکسان کامپایل کرده و با مجموعه‌ای از کتابخانه‌های سازگار پیوند (link) دهید. .Sp مدل \fBilp32\fR منسوخ شده است. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد بزرگ‌پایان (big\-endian). این حالت پیش‌فرض است هنگامی که GCC برای یک مقصد \&\fBaarch64_be\-*\-*\fR پیکربندی شده باشد. .IP \fB\-mgeneral\-regs\-only\fR 4 .IX Item "-mgeneral-regs-only" تولید کدی که تنها از ثبات‌های همه‌منظوره (general\-purpose registers) استفاده می‌کند. این کار مانع از استفادهٔ کامپایلر از ثبات‌های ممیز شناور (floating\-point) و Advanced SIMD خواهد شد، اما هیچ محدودیتی بر اسمبلر اعمال نخواهد کرد. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد کوچک‌پایان (little\-endian). این حالت پیش‌فرض است هنگامی که GCC برای یک مقصد \&\fBaarch64\-*\-*\fR و نه مقصد \&\fBaarch64_be\-*\-*\fR پیکربندی شده باشد. .IP \fB\-mcmodel=tiny\fR 4 .IX Item "-mcmodel=tiny" تولید کد برای مدل کد tiny. برنامه و نمادهای ایستا تعریف‌شدهٔ آن باید در فاصلهٔ ۱ مگابایتی از یکدیگر باشند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند (link) داده شوند. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" تولید کد برای مدل کد small. برنامه و نمادهای ایستا تعریف‌شدهٔ آن باید در فاصلهٔ ۴ گیگابایتی از یکدیگر باشند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. این، مدل کد پیش‌فرض است. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" تولید کد برای مدل کد large. این مدل هیچ فرضی دربارهٔ آدرس‌ها و اندازهٔ بخش‌ها در نظر نمی‌گیرد. برنامه‌ها فقط می‌توانند به‌صورت ایستا پیوند داده شوند. گزینهٔ \&\fB\-mcmodel=large\fR با گزینه‌های \fB\-mabi=ilp32\fR، \&\fB\-fpic\fR و \fB\-fPIC\fR ناسازگار است. .IP \fB\-mtp=\fR\fIname\fR 4 .IX Item "-mtp=name" مشخص کردن ثبات سیستمی مورد استفاده به‌عنوان اشاره‌گر ریسه (thread pointer). مقادیر معتبر عبارتند از \fBtpidr_el0\fR، \fBtpidrro_el0\fR، \fBtpidr_el1\fR، \fBtpidr_el2\fR، و \&\fBtpidr_el3\fR. برای سازگاری با نسخه‌های پیشین، نام‌های مستعار \fBel0\fR، \&\fBel1\fR، \fBel2\fR، و \fBel3\fR نیز پذیرفته می‌شوند. تنظیم پیش‌فرض \fBtpidr_el0\fR است. توصیه می‌شود تمام کدهایی که قرار است با هم تعامل داشته باشند، با مقدار یکسانی از این گزینه کامپایل شوند تا از دسترسی به یک اشاره‌گر ریسهٔ متفاوت از یک سطح استثناء (exception level) نادرست جلوگیری شود. .IP \fB\-mstrict\-align\fR 4 .IX Item "-mstrict-align" .PD 0 .IP \fB\-mno\-strict\-align\fR 4 .IX Item "-mno-strict-align" .PD جلوگیری از تولید دسترسی‌های حافظه‌ای که ممکن است بر روی مرز طبیعی شیء تراز نشده باشند (یا مجاز ساختن آن)، همان‌گونه که در مشخصات معماری شرح داده شده است. .IP \fB\-momit\-leaf\-frame\-pointer\fR 4 .IX Item "-momit-leaf-frame-pointer" .PD 0 .IP \fB\-mno\-omit\-leaf\-frame\-pointer\fR 4 .IX Item "-mno-omit-leaf-frame-pointer" .PD حذف یا نگه‌داشتن اشاره‌گر چارچوب (frame pointer) در توابع برگ (leaf functions). رفتار اول پیش‌فرض است. .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4 .IX Item "-mstack-protector-guard=guard" .PD 0 .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4 .IX Item "-mstack-protector-guard-reg=reg" .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4 .IX Item "-mstack-protector-guard-offset=offset" .PD تولید کد محافظت از پشته با استفاده از قناری (canary) در \fIguard\fR. مکان‌های پشتیبانی‌شده عبارتند از \fBglobal\fR برای یک قناری سراسری یا \fBsysreg\fR برای یک قناری در یک ثبات سیستمی مناسب. .Sp با انتخاب حالت دوم، گزینه‌های \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR و \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR علاوه بر این مشخص می‌کنند که از کدام ثبات سیستمی به‌عنوان ثبات پایه برای خواندن قناری، و از چه آفستی نسبت به آن ثبات پایه استفاده شود. هیچ ثبات یا آفست پیش‌فرضی وجود ندارد چرا که این گزینه کاملاً برای استفاده درون کرنل لینوکس است. .IP \fB\-mtls\-dialect=desc\fR 4 .IX Item "-mtls-dialect=desc" استفاده از توصیف‌کننده‌های TLS به عنوان سازوکار حافظهٔ محلی ریسه (thread\-local storage) برای دسترسی‌های پویای متغیرهای TLS. این پیش‌فرض است. .IP \fB\-mtls\-dialect=traditional\fR 4 .IX Item "-mtls-dialect=traditional" استفاده از TLS سنتی به‌عنوان سازوکار حافظهٔ محلی ریسه برای دسترسی‌های پویای متغیرهای TLS. .IP \fB\-mtls\-size=\fR\fIsize\fR 4 .IX Item "-mtls-size=size" مشخص کردن اندازهٔ بیتی آفست‌های بی‌واسطهٔ (immediate) متغیرهای TLS. مقادیر معتبر عبارتند از 12، 24، 32، 48. این گزینه به binutils نسخهٔ 2.26 یا جدیدتر نیاز دارد. .IP \fB\-mfix\-cortex\-a53\-835769\fR 4 .IX Item "-mfix-cortex-a53-835769" .PD 0 .IP \fB\-mno\-fix\-cortex\-a53\-835769\fR 4 .IX Item "-mno-fix-cortex-a53-835769" .PD فعال یا غیرفعال کردن راهکار ترمیمی (workaround) برای خطای سخت‌افزاری (erratum) شمارهٔ 835769 در ARM Cortex\-A53. این مورد شامل درج یک دستور NOP میان دستورهای حافظه و دستورهای ضرب و جمع انباشته (multiply\-accumulate) صحیح ۶۴ بیتی است. در صورتی که معماری یا پردازنده‌ای در خط فرمان مشخص شده باشد که به این راهکار ترمیمی نیازی ندارد، این پرچم نادیده گرفته خواهد شد. .IP \fB\-mfix\-cortex\-a53\-843419\fR 4 .IX Item "-mfix-cortex-a53-843419" .PD 0 .IP \fB\-mno\-fix\-cortex\-a53\-843419\fR 4 .IX Item "-mno-fix-cortex-a53-843419" .PD فعال یا غیرفعال کردن راهکار ترمیمی برای خطای سخت‌افزاری (erratum) شمارهٔ 843419 در ARM Cortex\-A53. این راهکار ترمیمی در زمان پیوند (link time) انجام می‌شود و این گزینه صرفاً پرچم مربوطه را به پیونددهنده (linker) ارسال خواهد کرد. در صورتی که معماری یا پردازنده‌ای در خط فرمان مشخص شده باشد که به این راهکار ترمیمی نیازی ندارد، این پرچم نادیده گرفته خواهد شد. .IP \fB\-mlow\-precision\-recip\-sqrt\fR 4 .IX Item "-mlow-precision-recip-sqrt" .PD 0 .IP \fB\-mno\-low\-precision\-recip\-sqrt\fR 4 .IX Item "-mno-low-precision-recip-sqrt" .PD فعال یا غیرفعال کردن تقریب جذر معکوس (reciprocal square root). این گزینه تنها در صورتی اثرگذار است که \fB\-ffast\-math\fR یا \&\fB\-funsafe\-math\-optimizations\fR نیز استفاده شده باشد. فعال کردن این گزینه، دقت نتایج جذر معکوس را برای دقت یگانه (single precision) به حدود ۱۶ بیت و برای دقت مضاعف (double precision) به ۳۲ بیت کاهش می‌دهد. .IP \fB\-mlow\-precision\-sqrt\fR 4 .IX Item "-mlow-precision-sqrt" .PD 0 .IP \fB\-mno\-low\-precision\-sqrt\fR 4 .IX Item "-mno-low-precision-sqrt" .PD فعال یا غیرفعال کردن تقریب ریشه دوم (square root). این گزینه تنها در صورتی اثرگذار است که \fB\-ffast\-math\fR یا \&\fB\-funsafe\-math\-optimizations\fR نیز استفاده شده باشد. فعال کردن این گزینه، دقت نتایج ریشه دوم را برای دقت یگانه به حدود ۱۶ بیت و برای دقت مضاعف به ۳۲ بیت کاهش می‌دهد. در صورت فعال بودن، به‌طور ضمنی \fB\-mlow\-precision\-recip\-sqrt\fR را نیز اعمال می‌کند. .IP \fB\-mlow\-precision\-div\fR 4 .IX Item "-mlow-precision-div" .PD 0 .IP \fB\-mno\-low\-precision\-div\fR 4 .IX Item "-mno-low-precision-div" .PD فعال یا غیرفعال کردن تقریب تقسیم. این گزینه تنها در صورتی اثرگذار است که \fB\-ffast\-math\fR یا \&\fB\-funsafe\-math\-optimizations\fR نیز استفاده شده باشد. فعال کردن این گزینه، دقت نتایج تقسیم را برای دقت یگانه به حدود ۱۶ بیت و برای دقت مضاعف به ۳۲ بیت کاهش می‌دهد. .IP \fB\-mtrack\-speculation\fR 4 .IX Item "-mtrack-speculation" .PD 0 .IP \fB\-mno\-track\-speculation\fR 4 .IX Item "-mno-track-speculation" .PD فعال یا غیرفعال کردن تولید کد اضافی برای ردیابی اجرای حدسی (speculative execution) از میان شاخه‌های شرطی. سپس این وضعیت ردیابی می‌تواند هنگام بسط فراخوانی‌های \&\f(CW\*(C`_\|_builtin_speculation_safe_copy\*(C'\fR توسط کامپایلر مورد استفاده قرار گیرد تا امکان تولید توالی کد بهینه‌تری فراهم شود..IP \fB\-moutline\-atomics\fR 4 .IX Item "-moutline-atomics" .PD 0 .IP \fB\-mno\-outline\-atomics\fR 4 .IX Item "-mno-outline-atomics" .PD فعال یا غیرفعال کردن فراخوانی توابع کمکی برون‌خط (out\-of\-line helpers) برای پیاده‌سازی عملیات اتمیک. این توابع کمکی در زمان اجرا بررسی می‌کنند که آیا دستورالعمل‌های LSE از ARMv8.1\-A قابل استفاده هستند یا خیر؛ در غیر این صورت، از دستورالعمل‌های load/store\-exclusive موجود در ISA پایهٔ ARMv8.0 استفاده خواهند کرد. .Sp این گزینه تنها هنگام کامپایل برای مجموعه دستورالعمل‌های پایهٔ ARMv8.0 کاربرد دارد. در صورت استفاده از نگارش‌های جدیدتر، مانند \fB\-march=armv8.1\-a\fR یا \fB\-march=armv8\-a+lse\fR، دستورالعمل‌های ARMv8.1\-Atomics به‌طور مستقیم به کار گرفته خواهند شد. همین امر هنگام استفاده از \fB\-mcpu=\fR در صورتی که پردازندهٔ انتخاب‌شده از ویژگی \fBlse\fR پشتیبانی کند نیز صدق می‌کند. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-march=\fR\fIname\fR 4 .IX Item "-march=name" تعیین نام معماری مقصد و در صورت تمایل، یک یا چند اصلاح‌کنندهٔ ویژگی (feature modifier). این گزینه ساختار \&\fB\-march=\fR\fIarch\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}* را دارد. .Sp جدول زیر مقادیر مجاز برای \fIarch\fR و ویژگی‌هایی را که به‌طور پیش‌فرض فعال می‌کنند خلاصه می‌کند: .RS 4 .IP "\fIمقدار arch\fR : \fIمعماری\fR : \fIشامل‌شده به‌طور پیش‌فرض\fR" 4 .IX Item "arch value : Architecture : Includes by default" .PD 0 .IP "\fBarmv8\-a\fR : Armv8\-A : \fB+fp\fR, \fB+simd\fR" 4 .IX Item "armv8-a : Armv8-A : +fp, +simd" .IP "\fBarmv8.1\-a\fR : Armv8.1\-A : \fBarmv8\-a\fR, \fB+crc\fR, \fB+lse\fR, \fB+rdma\fR" 4 .IX Item "armv8.1-a : Armv8.1-A : armv8-a, +crc, +lse, +rdma" .IP "\fBarmv8.2\-a\fR : Armv8.2\-A : \fBarmv8.1\-a\fR" 4 .IX Item "armv8.2-a : Armv8.2-A : armv8.1-a" .IP "\fBarmv8.3\-a\fR : Armv8.3\-A : \fBarmv8.2\-a\fR, \fB+pauth\fR, \fB+fcma\fR, \fB+jscvt\fR" 4 .IX Item "armv8.3-a : Armv8.3-A : armv8.2-a, +pauth, +fcma, +jscvt" .IP "\fBarmv8.4\-a\fR : Armv8.4\-A : \fBarmv8.3\-a\fR, \fB+flagm\fR, \fB+fp16fml\fR, \fB+dotprod\fR, \fB+rcpc2\fR" 4 .IX Item "armv8.4-a : Armv8.4-A : armv8.3-a, +flagm, +fp16fml, +dotprod, +rcpc2" .IP "\fBarmv8.5\-a\fR : Armv8.5\-A : \fBarmv8.4\-a\fR, \fB+sb\fR, \fB+ssbs\fR, \fB+predres\fR, \fB+frintts\fR, \fB+flagm2\fR" 4 .IX Item "armv8.5-a : Armv8.5-A : armv8.4-a, +sb, +ssbs, +predres, +frintts, +flagm2" .IP "\fBarmv8.6\-a\fR : Armv8.6\-A : \fBarmv8.5\-a\fR, \fB+bf16\fR, \fB+i8mm\fR" 4 .IX Item "armv8.6-a : Armv8.6-A : armv8.5-a, +bf16, +i8mm" .IP "\fBarmv8.7\-a\fR : Armv8.7\-A : \fBarmv8.6\-a\fR, \fB+wfxt\fR, \fB+xs\fR" 4 .IX Item "armv8.7-a : Armv8.7-A : armv8.6-a, +wfxt, +xs" .IP "\fBarmv8.8\-a\fR : Armv8.8\-a : \fBarmv8.7\-a\fR, \fB+mops\fR" 4 .IX Item "armv8.8-a : Armv8.8-a : armv8.7-a, +mops" .IP "\fBarmv8.9\-a\fR : Armv8.9\-a : \fBarmv8.8\-a\fR" 4 .IX Item "armv8.9-a : Armv8.9-a : armv8.8-a" .IP "\fBarmv9\-a\fR : Armv9\-A : \fBarmv8.5\-a\fR, \fB+sve\fR, \fB+sve2\fR" 4 .IX Item "armv9-a : Armv9-A : armv8.5-a, +sve, +sve2" .IP "\fBarmv9.1\-a\fR : Armv9.1\-A : \fBarmv9\-a\fR, \fB+bf16\fR, \fB+i8mm\fR" 4 .IX Item "armv9.1-a : Armv9.1-A : armv9-a, +bf16, +i8mm" .IP "\fBarmv9.2\-a\fR : Armv9.2\-A : \fBarmv9.1\-a\fR, \fB+wfxt\fR, \fB+xs\fR" 4 .IX Item "armv9.2-a : Armv9.2-A : armv9.1-a, +wfxt, +xs" .IP "\fBarmv9.3\-a\fR : Armv9.3\-A : \fBarmv9.2\-a\fR, \fB+mops\fR" 4 .IX Item "armv9.3-a : Armv9.3-A : armv9.2-a, +mops" .IP "\fBarmv9.4\-a\fR : Armv9.4\-A : \fBarmv9.3\-a\fR, \fB+sve2p1\fR" 4 .IX Item "armv9.4-a : Armv9.4-A : armv9.3-a, +sve2p1" .IP "\fBarmv9.5\-a\fR : Armv9.4\-A : \fBarmv9.4\-a\fR, \fBcpa\fR, \fB+faminmax\fR, \fB+lut\fR" 4 .IX Item "armv9.5-a : Armv9.4-A : armv9.4-a, cpa, +faminmax, +lut" .IP "\fBarmv8\-r\fR : Armv8\-R : \fBarmv8\-r\fR" 4 .IX Item "armv8-r : Armv8-R : armv8-r" .PD .RE .RS 4 .Sp مقدار \fBnative\fR در سیستم‌های محلی AArch64 GNU/Linux در دسترس است و باعث می‌شود کامپایلر معماری سیستم میزبان را انتخاب کند. این گزینه در صورتی که کامپایلر نتواند معماری سیستم میزبان را شناسایی کند، هیچ تأثیری ندارد. هنگامی که \fB\-march=native\fR مشخص شود و هیچ گزینهٔ \fB\-mcpu\fR یا \fB\-mtune\fR دیگری داده نشود، GCC پردازندهٔ میزبان را هم به عنوان پردازندهٔ بهینه‌سازی و هم برای انتخاب ویژگی‌های معماری در نظر می‌گیرد؛ بدین معنا که با \fB\-march=native\fR همانند \fB\-mcpu=native\fR رفتار می‌شود. .Sp مقادیر مجاز برای \fIfeature\fR در زیربخش مربوط به \&\fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR \&\fBFeature Modifiers\fR فهرست شده‌اند. در صورت تعیین اصلاح‌کننده‌های ویژگی متناقض، راست‌ترین ویژگی اعمال خواهد شد. .Sp کامپایلر GCC از \fIname\fR برای تعیین نوع دستورالعمل‌هایی که می‌تواند هنگام تولید کد اسمبلی استفاده کند، بهره می‌برد. اگر \fB\-march\fR بدون مشخص کردن هیچ‌کدام از \fB\-mtune\fR یا \fB\-mcpu\fR تعیین شود، کد به‌گونه‌ای بهینه‌سازی می‌شود که در طیف وسیعی از پردازنده‌های مقصد که معماری هدف را پیاده‌سازی کرده‌اند عملکرد مطلوبی داشته باشد. .RE .IP \fB\-mtune=\fR\fIname\fR 4 .IX Item "-mtune=name" تعیین نام پردازندهٔ مقصدی که GCC باید کارایی کد را برای آن بهینه‌سازی کند. مقادیر مجاز برای این گزینه عبارتند از: \&\fBgeneric\fR، \fBcortex\-a35\fR، \fBcortex\-a53\fR، \fBcortex\-a55\fR، \&\fBcortex\-a57\fR، \fBcortex\-a72\fR، \fBcortex\-a73\fR، \fBcortex\-a75\fR، \&\fBcortex\-a76\fR، \fBcortex\-a76ae\fR، \fBcortex\-a77\fR، \&\fBcortex\-a65\fR، \fBcortex\-a65ae\fR، \fBcortex\-a34\fR، \&\fBcortex\-a78\fR، \fBcortex\-a78ae\fR، \fBcortex\-a78c\fR، \&\fBares\fR، \fBexynos\-m1\fR، \fBemag\fR، \fBfalkor\fR، \&\fBoryon\-1\fR، \&\fBneoverse\-512tvb\fR، \fBneoverse\-e1\fR، \fBneoverse\-n1\fR، \&\fBneoverse\-n2\fR، \fBneoverse\-v1\fR، \fBneoverse\-v2\fR، \fBgrace\fR، \&\fBneoverse\-v3\fR، \fBneoverse\-v3ae\fR، \fBneoverse\-n3\fR، \fBolympus\fR، \&\fBcortex\-a725\fR، \fBcortex\-x925\fR، \&\fBqdf24xx\fR، \fBsaphira\fR، \fBphecda\fR، \fBxgene1\fR، \fBvulcan\fR، \&\fBocteontx\fR، \fBocteontx81\fR، \fBocteontx83\fR، \&\fBocteontx2\fR، \fBocteontx2t98\fR، \fBocteontx2t96\fR، \&\fBocteontx2t93\fR، \fBocteontx2f95\fR، \fBocteontx2f95n\fR، \&\fBocteontx2f95mm\fR، \&\fBa64fx\fR، \fBfujitsu\-monaka\fR، \&\fBthunderx\fR، \fBthunderxt88\fR، \&\fBthunderxt88p1\fR، \fBthunderxt81\fR، \fBtsv110\fR، \&\fBthunderxt83\fR، \fBthunderx2t99\fR، \fBthunderx3t110\fR، \fBzeus\fR، \&\fBcortex\-a57.cortex\-a53\fR، \fBcortex\-a72.cortex\-a53\fR، \&\fBcortex\-a73.cortex\-a35\fR، \fBcortex\-a73.cortex\-a53\fR، \&\fBcortex\-a75.cortex\-a55\fR، \fBcortex\-a76.cortex\-a55\fR، \&\fBcortex\-r82\fR، \fBcortex\-r82ae\fR، \fBcortex\-x1\fR، \fBcortex\-x1c\fR، \&\fBcortex\-x2\fR، \fBcortex\-x3\fR، \fBcortex\-x4\fR، \fBcortex\-a510\fR، \&\fBcortex\-a520\fR، \fBcortex\-a520ae\fR، \fBcortex\-a710\fR، \fBcortex\-a715\fR، \&\fBcortex\-a720\fR، \fBcortex\-a720ae\fR، \fBampere1\fR، \fBampere1a\fR، \&\fBampere1b\fR، \fBcobalt\-100\fR، \fBapple\-m1\fR، \fBapple\-m2\fR، \&\fBapple\-m3\fR و \fBnative\fR. .Sp مقادیر \fBcortex\-a57.cortex\-a53\fR، \fBcortex\-a72.cortex\-a53\fR، \&\fBcortex\-a73.cortex\-a35\fR، \fBcortex\-a73.cortex\-a53\fR، \&\fBcortex\-a75.cortex\-a55\fR، \fBcortex\-a76.cortex\-a55\fR، \&\fBapple\-m1\fR، \fBapple\-m2\fR، \fBapple\-m3\fR و \fBgb10\fR مشخص می‌کنند که GCC باید برای یک سامانهٔ big.LITTLE بهینه‌سازی کند. .Sp مقدار \fBneoverse\-512tvb\fR مشخص می‌کند که GCC باید برای هسته‌های Neoverse که (الف) SVE را پیاده‌سازی کرده و (ب) پهنای باند برداری کل آن‌ها ۵۱۲ بیت در هر چرخه است، بهینه‌سازی کند. به عبارت دیگر، این گزینه به GCC اعلام می‌کند که برای هسته‌های Neoverse که توانایی اجرای ۴ دستورالعمل محاسباتی ۱۲۸ بیتی Advanced SIMD در هر چرخه و اجرای تعداد معادل آن از دستورالعمل‌های محاسباتی SVE در هر چرخه را دارند (۲ مورد برای SVE ۲۵۶ بیتی، ۴ مورد برای SVE ۱۲۸ بیتی)، بهینه‌سازی انجام دهد. این حالت کلی‌تر از بهینه‌سازی برای یک هستهٔ خاص مانند Neoverse V1 است، اما مشخص‌تر از بهینه‌سازی پیش‌فرضی است که در زیر شرح داده شده است. .Sp علاوه بر این، در سیستم‌های محلی AArch64 GNU/Linux، مقدار \&\fBnative\fR کارایی را برای سیستم میزبان بهینه‌سازی می‌کند. این گزینه در صورتی که کامپایلر قادر به شناسایی پردازندهٔ سیستم میزبان نباشد، هیچ تأثیری ندارد. .Sp در حالتی که هیچ‌یک از گزینه‌های \fB\-mtune=\fR، \fB\-mcpu=\fR یا \fB\-march=\fR تعیین نشده باشند، کد به‌گونه‌ای بهینه‌سازی می‌شود که در میان طیف وسیعی از پردازنده‌های مقصد عملکرد مطلوبی ارائه دهد. .Sp این گزینه نمی‌تواند اصلاح‌کنندهٔ ویژگی به عنوان پسوند دریافت کند. .IP \fB\-mcpu=\fR\fIname\fR 4 .IX Item "-mcpu=name" تعیین نام پردازندهٔ مقصد که می‌تواند به‌طور اختیاری دارای یک یا چند پسوند اصلاح‌کنندهٔ ویژگی باشد. این گزینه ساختار \&\fB\-mcpu=\fR\fIcpu\fR{\fB+\fR[\fBno\fR]\fIfeature\fR}* را دارد، که در آن مقادیر مجاز برای \fIcpu\fR همان مقادیر موجود برای \fB\-mtune\fR هستند. مقادیر مجاز برای \fIfeature\fR در زیربخش مربوط به \&\fBaarch64\-feature\-modifiers,,\fR\fB\-march\fR \fBand\fR \fB\-mcpu\fR \&\fBFeature Modifiers\fR مستند شده‌اند. در صورت تعیین اصلاح‌کننده‌های ویژگی متناقض، راست‌ترین ویژگی اعمال خواهد شد. .Sp کامپایلر GCC از \fIname\fR هم برای تعیین نوع دستورالعمل‌هایی که می‌تواند هنگام تولید کد اسمبلی منتشر کند (مانند \fB\-march\fR) و هم برای تعیین پردازندهٔ مقصدی که باید کارایی برای آن بهینه‌سازی شود (مانند \fB\-mtune\fR) استفاده می‌کند. در صورتی که این گزینه همراه با \fB\-march\fR یا \fB\-mtune\fR استفاده شود، آن گزینه‌ها بر بخش متناظر از این گزینه ارجحیت خواهند داشت. .Sp گزینهٔ \&\fB\-mcpu=neoverse\-512tvb\fR از این نظر خاص است که به یک هستهٔ مشخص اشاره ندارد، بلکه به تمام هسته‌های Neoverse اشاره می‌کند که (الف) SVE را پیاده‌سازی کرده و (ب) دارای پهنای باند برداری کل ۵۱۲ بیت در هر چرخه هستند. مگر اینکه توسط \fB\-march\fR بازنویسی شود، \&\fB\-mcpu=neoverse\-512tvb\fR کدی تولید می‌کند که روی هستهٔ Neoverse V1 قابل اجرا است؛ زیرا Neoverse V1 نخستین هستهٔ Neoverse دارای این ویژگی‌ها است. مگر اینکه توسط \fB\-mtune\fR بازنویسی شود، \&\fB\-mcpu=neoverse\-512tvb\fR کد را به همان شیوهٔ \&\fB\-mtune=neoverse\-512tvb\fR بهینه‌سازی می‌کند. .IP \fB\-moverride=\fR\fIstring\fR 4 .IX Item "-moverride=string" بازنویسی تصمیمات بهینه‌سازی اتخاذشده توسط بخش پشتی (back\-end) در پاسخ به سوییچ \&\fB\-mtune=\fR. ساختار، معناشناسی، و مقادیر پذیرفته‌شده برای \fIstring\fR در این گزینه تضمین نمی‌شود که در تمام نگارش‌ها یکسان بمانند. .Sp این گزینه صرفاً برای استفاده در زمان توسعهٔ GCC طراحی شده است..IP \fB\-mverbose\-cost\-dump\fR 4 .IX Item "-mverbose-cost-dump" فعال‌سازی تخلیهٔ مفصل مدل هزینه در فایل‌های تخلیهٔ اشکال‌زدایی. این گزینه برای استفاده در اشکال‌زدایی کامپایلر فراهم شده است. .IP \fB\-mpc\-relative\-literal\-loads\fR 4 .IX Item "-mpc-relative-literal-loads" .PD 0 .IP \fB\-mno\-pc\-relative\-literal\-loads\fR 4 .IX Item "-mno-pc-relative-literal-loads" .PD فعال یا غیرفعال کردن بارگذاری مقادیر ثابت وابسته به PC (شمارندهٔ برنامه). با این گزینه استخرهای مقادیر ثابت (literal pools) با استفاده از یک تک‌دستورالعمل قابل دسترسی بوده و پس از هر تابع صادر می‌شوند. این امر حداکثر اندازهٔ توابع را به 1MB محدود می‌کند. این گزینه به‌طور پیش‌فرض برای \&\fB\-mcmodel=tiny\fR فعال است. .IP \fB\-msign\-return\-address=\fR\fIscope\fR 4 .IX Item "-msign-return-address=scope" حوزهٔ تابعی را که امضای نشانی بازگشت بر آن اعمال می‌شود انتخاب می‌کند. مقادیر مجاز عبارتند از: \fBnone\fR که امضای نشانی بازگشت را غیرفعال می‌کند، \&\fBnon\-leaf\fR که امضای اشاره‌گر را برای توابعی که تابع برگ (leaf) نیستند فعال می‌کند، و \fBall\fR که امضای اشاره‌گر را برای همهٔ توابع فعال می‌سازد. مقدار پیش‌فرض \fBnone\fR است. این گزینه به نفع \&\-mbranch\-protection منسوخ شده است. .IP \fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR\fB|\fR\fIgcs\fR 4 .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf+b-key]|bti|gcs" انتخاب ویژگی‌های محافظت از انشعاب مورد استفاده. \&\fBnone\fR مقدار پیش‌فرض است و تمام انواع محافظت از انشعاب را خاموش می‌کند. \&\fBstandard\fR تمام انواع ویژگی‌های محافظت از انشعاب را روشن می‌کند. اگر یک ویژگی دارای گزینه‌های تنظیم دقیق اضافی باشد، \fBstandard\fR آن را در سطح استانداردش تنظیم می‌کند. \&\fBpac\-ret[+\fR\fIleaf\fR\fB]\fR امضای نشانی بازگشت را در سطح استانداردش روشن می‌کند: امضای توابعی که نشانی بازگشت را در حافظه ذخیره می‌کنند (توابع non\-leaf عملاً همواره این کار را انجام می‌دهند) با استفاده از a\-key. از آرگومان اختیاری \fBleaf\fR می‌توان برای تعمیم امضا جهت در بر گرفتن توابع برگ (leaf) استفاده کرد. از آرگومان اختیاری \fBb\-key\fR می‌توان برای امضای توابع با B\-key به جای A\-key استفاده کرد. \&\fBbti\fR سازوکار شناسایی هدف انشعاب (branch target identification) را روشن می‌کند. \&\fBgcs\fR تولید کد سازگار با پشتهٔ کنترلی محافظت‌شده (guarded control stack) را فعال می‌کند. .IP \fB\-mharden\-sls=\fR\fIopts\fR 4 .IX Item "-mharden-sls=opts" فعال‌سازی مقاوم‌سازی کامپایلر در برابر حدس و گمان مستقیم خطی (SLS). \&\fIopts\fR فهرستی از گزینه‌های زیر است که با کاما از هم جدا شده‌اند: .RS 4 .IP \fBretbr\fR 4 .IX Item "retbr" .PD 0 .IP \fBblr\fR 4 .IX Item "blr" .PD .RE .RS 4 .Sp علاوه بر این، \fB\-mharden\-sls=all\fR تمام مقاوم‌سازی‌های SLS را فعال می‌کند، در حالی که \&\fB\-mharden\-sls=none\fR تمام مقاوم‌سازی‌های SLS را غیرفعال می‌سازد. .RE .IP \fB\-mearly\-ra=\fR\fIscope\fR 4 .IX Item "-mearly-ra=scope" تعیین زمان فعال‌سازی گذر تخصیص زودهنگام ثبات (early register allocation pass). این گذر پیش از زمان‌بندی دستورالعمل‌ها اجرا می‌شود و تلاش می‌کند یک تخصیص بدون سرریز (spill\-free) برای کدهای ممیز شناور و برداری بیابد. همچنین تلاش می‌کند از دستورالعمل‌های چندثباتی گام‌دار (strided)، مانند دستورهای گام‌دار LD1 و ST1 در SME2\*(Aq بهره ببرد. .Sp مقادیر ممکن برای \fIscope\fR عبارتند از: \fIall\fR که گذر را روی تمامی توابع اجرا می‌کند؛ \fIstrided\fR که گذر را روی توابعی که به دستورالعمل‌های چندثباتی گام‌دار دسترسی دارند اجرا می‌کند؛ و \fInone\fR که گذر را غیرفعال می‌سازد. .Sp \&\fB\-mearly\-ra=all\fR مقدار پیش‌فرض برای \fB\-O2\fR و بالاتر، و برای \&\fB\-Os\fR است. در غیر این صورت، مقدار پیش‌فرض \fB\-mearly\-ra=none\fR است. .IP \fB\-mearly\-ldp\-fusion\fR 4 .IX Item "-mearly-ldp-fusion" فعال‌سازی نسخهٔ گذر ادغام جفت load/store در AArch64 که قبل از تخصیص ثبات اجرا می‌شود. به‌طور پیش‌فرض در \fB\-O\fR و بالاتر فعال است. .IP \fB\-mlate\-ldp\-fusion\fR 4 .IX Item "-mlate-ldp-fusion" فعال‌سازی نسخهٔ گذر ادغام جفت load/store در AArch64 که بعد از تخصیص ثبات اجرا می‌شود. به‌طور پیش‌فرض در \fB\-O\fR و بالاتر فعال است. .IP \fB\-msve\-vector\-bits=\fR\fIbits\fR 4 .IX Item "-msve-vector-bits=bits" تعداد بیت‌ها را در یک ثبات برداری SVE مشخص می‌کند. این گزینه تنها زمانی مؤثر است که SVE فعال باشد. .Sp کامپایلر GCC از دو شیوهٔ تولید کد SVE پشتیبانی می‌کند: خروجی «مستقل از طول بردار» (vector\-length agnostic) که با هر اندازه‌ای از ثبات برداری کار می‌کند و خروجی «وابسته به طول بردار» (vector\-length specific) که به GCC اجازه می‌دهد در مواردی که برای بهینه‌سازی مفید است، فرضیاتی دربارهٔ طول بردار در نظر بگیرد. مقادیر ممکن برای \fBbits\fR عبارتند از: \fBscalable\fR، \fB128\fR، \&\fB256\fR، \fB512\fR، \fB1024\fR و \fB2048\fR. مشخص کردن \fBscalable\fR خروجی مستقل از طول بردار را انتخاب می‌کند. در حال حاضر \&\fB\-msve\-vector\-bits=128\fR نیز برای مقصدهای big\-endian خروجی مستقل از طول بردار تولید می‌کند. تمامی مقادیر دیگر کدی وابسته به طول بردار تولید می‌کنند. رفتار این مقادیر ممکن است در انتشار‌های آینده تغییر کند و برای تولید کدی که بین طول‌های مختلف ثبات برداری SVE در سخت‌افزارهای مختلف سازگار و قابل حمل باشد، نباید به هیچ مقداری جز \fBscalable\fR اتکا کرد. .Sp پیش‌فرض \fB\-msve\-vector\-bits=scalable\fR است که کدی مستقل از طول بردار تولید می‌کند. .IP \fB\-Wexperimental\-fmv\-target\fR 4 .IX Item "-Wexperimental-fmv-target" هشدار دربارهٔ استفاده از قابلیت چندنسخه‌ای کردن توابع (Function Multi Versioning) آزمایشی. مشخصات Arm C Language Extension برای Function Multi Versioning در وضعیت بتا بوده و ممکن است تغییر کند. هرگونه استفاده از FMV مشروط به این هشدار است که احتمال تغییر رفتار و ناسازگاری در آینده وجود دارد. .PP اصلاح‌کننده‌های ویژگی \fB\-march\fR و \fB\-mcpu\fR .IX Subsection "-march and -mcpu Feature Modifiers" .PP اصلاح‌کننده‌های ویژگی که با \fB\-march\fR و \fB\-mcpu\fR استفاده می‌شوند می‌توانند هر یک از موارد زیر و معکوس آن‌ها یعنی \fBno\fR\fIfeature\fR باشند: .IP \fBcrc\fR 4 .IX Item "crc" فعال‌سازی افزونهٔ CRC. این گزینه به‌طور پیش‌فرض برای \&\fB\-march=armv8.1\-a\fR فعال است. .IP \fBcrypto\fR 4 .IX Item "crypto" فعال‌سازی افزونهٔ Crypto. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fBfp\fR 4 .IX Item "fp" فعال‌سازی دستورالعمل‌های ممیز شناور. این گزینه به‌طور پیش‌فرض برای تمام مقادیر ممکنِ گزینه‌های \fB\-march\fR و \fB\-mcpu\fR فعال است. .IP \fBsimd\fR 4 .IX Item "simd" فعال‌سازی دستورالعمل‌های Advanced SIMD. این گزینه همچنین دستورالعمل‌های ممیز شناور را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای تمام مقادیر ممکنِ گزینه‌های \&\fB\-march\fR و \fB\-mcpu\fR فعال است. .IP \fBsve\fR 4 .IX Item "sve" فعال‌سازی دستورالعمل‌های Scalable Vector Extension. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fBlse\fR 4 .IX Item "lse" فعال‌سازی دستورالعمل‌های Large System Extension. این گزینه به‌طور پیش‌فرض برای \&\fB\-march=armv8.1\-a\fR فعال است. .IP \fBrdma\fR 4 .IX Item "rdma" فعال‌سازی دستورالعمل‌های Round Double Multiply Accumulate. این گزینه به‌طور پیش‌فرض برای \fB\-march=armv8.1\-a\fR فعال است. .IP \fBfp16\fR 4 .IX Item "fp16" فعال‌سازی افزونهٔ FP16. این گزینه همچنین دستورالعمل‌های ممیز شناور را فعال می‌کند. .IP \fBfp16fml\fR 4 .IX Item "fp16fml" فعال‌سازی افزونهٔ FP16 fmla. این گزینه همچنین افزونه‌های FP16 و دستورالعمل‌های ممیز شناور را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای \fB\-march=armv8.4\-a\fR فعال است. استفاده از این گزینه با معماری‌های پیش از Armv8.2\-A پشتیبانی نمی‌شود. .IP \fBrcpc\fR 4 .IX Item "rcpc" فعال‌سازی افزونهٔ RCpc. این گزینه استفاده از دستورالعمل‌های LDAPR را برای معناشناسی اتمی load\-acquire فعال کرده و آن را به اسمبلر منتقل می‌کند تا دستورهای asm درون‌خطی بتوانند از دستورالعمل‌های افزونهٔ RCpc استفاده کنند. .IP \fBdotprod\fR 4 .IX Item "dotprod" فعال‌سازی افزونهٔ Dot Product. این گزینه همچنین دستورالعمل‌های Advanced SIMD را فعال می‌کند. .IP \fBaes\fR 4 .IX Item "aes" فعال‌سازی افزونهٔ رمزنگاری aes و pmull در Armv8\-a. این گزینه همچنین دستورالعمل‌های Advanced SIMD را فعال می‌کند. .IP \fBsha2\fR 4 .IX Item "sha2" فعال‌سازی افزونهٔ رمزنگاری sha2 در Armv8\-a. این گزینه همچنین دستورالعمل‌های Advanced SIMD را فعال می‌کند. .IP \fBsha3\fR 4 .IX Item "sha3" فعال‌سازی افزونهٔ رمزنگاری sha512 و sha3. این گزینه همچنین دستورالعمل‌های Advanced SIMD را فعال می‌کند. استفاده از این گزینه با معماری‌های پیش از Armv8.2\-A پشتیبانی نمی‌شود. .IP \fBsm4\fR 4 .IX Item "sm4" فعال‌سازی افزونهٔ رمزنگاری sm3 و sm4. این گزینه همچنین دستورالعمل‌های Advanced SIMD را فعال می‌کند. استفاده از این گزینه با معماری‌های پیش از Armv8.2\-A پشتیبانی نمی‌شود. .IP \fBprofile\fR 4 .IX Item "profile" فعال‌سازی افزونهٔ Statistical Profiling. این گزینه تنها برای فعال‌سازی افزونه در سطح اسمبلر است و بر تولید کد تأثیری ندارد. .IP \fBrng\fR 4 .IX Item "rng" فعال‌سازی دستورالعمل‌های تولید عدد تصادفی (Random Number) در Armv8.5\-a. این گزینه تنها برای فعال‌سازی افزونه در سطح اسمبلر است و بر تولید کد تأثیری ندارد. .IP \fBmemtag\fR 4 .IX Item "memtag" فعال‌سازی افزونه‌های Memory Tagging در Armv8.5\-a. استفاده از این گزینه با معماری‌های پیش از Armv8.5\-A پشتیبانی نمی‌شود..IP \fBsb\fR 4 .IX Item "sb" فعال‌سازی دستور Speculation Barrier در Armv8\-a. این گزینه صرفاً برای فعال‌سازی افزونه در سطح اسمبلی است و روی تولید کد تأثیری نمی‌گذارد. این گزینه به‌طور پیش‌فرض برای \fB\-march=armv8.5\-a\fR فعال است. .IP \fBssbs\fR 4 .IX Item "ssbs" فعال‌سازی دستور Speculative Store Bypass Safe در Armv8\-a. این گزینه صرفاً برای فعال‌سازی افزونه در سطح اسمبلی است و روی تولید کد تأثیری نمی‌گذارد. این گزینه به‌طور پیش‌فرض برای \fB\-march=armv8.5\-a\fR فعال است. .IP \fBpredres\fR 4 .IX Item "predres" فعال‌سازی دستورهای Execution and Data Prediction Restriction در Armv8\-a. این گزینه صرفاً برای فعال‌سازی افزونه در سطح اسمبلی است و روی تولید کد تأثیری نمی‌گذارد. این گزینه به‌طور پیش‌فرض برای \&\fB\-march=armv8.5\-a\fR فعال است. .IP \fBsve2\fR 4 .IX Item "sve2" فعال‌سازی Armv8\-a Scalable Vector Extension 2. این گزینه دستورهای SVE را نیز فعال می‌کند. .IP \fBsve2\-bitperm\fR 4 .IX Item "sve2-bitperm" فعال‌سازی دستورهای SVE2 bitperm. این گزینه دستورهای SVE2 را نیز فعال می‌کند. .IP \fBsve2\-sm4\fR 4 .IX Item "sve2-sm4" فعال‌سازی دستورهای SVE2 sm4. این گزینه دستورهای SVE2 را نیز فعال می‌کند. .IP \fBsve2\-aes\fR 4 .IX Item "sve2-aes" فعال‌سازی دستورهای SVE2 aes. این گزینه دستورهای SVE2 را نیز فعال می‌کند. .IP \fBsve2\-sha3\fR 4 .IX Item "sve2-sha3" فعال‌سازی دستورهای SVE2 sha3. این گزینه دستورهای SVE2 را نیز فعال می‌کند. .IP \fBsve2p1\fR 4 .IX Item "sve2p1" فعال‌سازی دستورهای SVE2.1. این گزینه دستورهای SVE2 را نیز فعال می‌کند. .IP \fBtme\fR 4 .IX Item "tme" فعال‌سازی Transactional Memory Extension. .IP \fBi8mm\fR 4 .IX Item "i8mm" فعال‌سازی دستورهای ضرب ماتریسی اعداد صحیح ۸ بیتی (8\-bit Integer Matrix Multiply). این گزینه همچنین دستورهای ممیز شناور و Advanced SIMD را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای \fB\-march=armv8.6\-a\fR فعال است. استفاده از این گزینه با معماری‌های قبل از Armv8.2\-A پشتیبانی نمی‌شود. .IP \fBf32mm\fR 4 .IX Item "f32mm" فعال‌سازی دستورهای ضرب ماتریسی ممیز شناور ۳۲ بیتی. این گزینه همچنین دستورهای SVE را فعال می‌کند. استفاده از این گزینه با معماری‌های قبل از Armv8.2\-A پشتیبانی نمی‌شود. .IP \fBf64mm\fR 4 .IX Item "f64mm" فعال‌سازی دستورهای ضرب ماتریسی ممیز شناور ۶۴ بیتی. این گزینه همچنین دستورهای SVE را فعال می‌کند. استفاده از این گزینه با معماری‌های قبل از Armv8.2\-A پشتیبانی نمی‌شود. .IP \fBbf16\fR 4 .IX Item "bf16" فعال‌سازی دستورهای ممیز شناور دقت نیمه brain. این گزینه همچنین دستورهای Advanced SIMD و ممیز شناور را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای \fB\-march=armv8.6\-a\fR فعال است. استفاده از این گزینه با معماری‌های قبل از Armv8.2\-A پشتیبانی نمی‌شود. .IP \fBls64\fR 4 .IX Item "ls64" فعال‌سازی دستورهای بارگذاری و ذخیره‌سازی اتمیک ۶۴ بایتی برای شتاب‌دهنده‌ها. .IP \fBmops\fR 4 .IX Item "mops" فعال‌سازی دستورها برای شتاب‌بخشی به عملیات‌های حافظه مانند \f(CW\*(C`memcpy\*(C'\fR، \&\f(CW\*(C`memmove\*(C'\fR و \f(CW\*(C`memset\*(C'\fR. این گزینه به‌طور پیش‌فرض برای \&\fB\-march=armv8.8\-a\fR فعال است. .IP \fBflagm\fR 4 .IX Item "flagm" فعال‌سازی افزونه دستورهای دستکاری پرچم (Flag Manipulation instructions Extension). .IP \fBflagm2\fR 4 .IX Item "flagm2" فعال‌سازی دستورهای تبدیل پرچم FlagM2. .IP \fBpauth\fR 4 .IX Item "pauth" فعال‌سازی Pointer Authentication Extension. .IP \fBcssc\fR 4 .IX Item "cssc" فعال‌سازی دستورهای Common Short Sequence Compression. .IP \fBsme\fR 4 .IX Item "sme" فعال‌سازی Scalable Matrix Extension. این مورد تنها زمانی پشتیبانی می‌شود که SVE2 نیز فعال باشد. .IP \fBsme\-i16i64\fR 4 .IX Item "sme-i16i64" فعال‌سازی افزونه FEAT_SME_I16I64 برای SME. این گزینه دستورهای SME را نیز فعال می‌کند. .IP \fBsme\-f64f64\fR 4 .IX Item "sme-f64f64" فعال‌سازی افزونه FEAT_SME_F64F64 برای SME. این گزینه دستورهای SME را نیز فعال می‌کند. .IP \fBsme2\fR 4 .IX Item "sme2" فعال‌سازی Scalable Matrix Extension 2. این گزینه دستورهای SME را نیز فعال می‌کند. .IP \fBsme\-b16b16\fR 4 .IX Item "sme-b16b16" فعال‌سازی افزونه FEAT_SME_B16B16 برای SME. این گزینه دستورهای SME2 و SVE_B16B16 را نیز فعال می‌کند. .IP \fBsme\-f16f16\fR 4 .IX Item "sme-f16f16" فعال‌سازی افزونه FEAT_SME_F16F16 برای SME. این گزینه دستورهای SME2 را نیز فعال می‌کند. .IP \fBsme2p1\fR 4 .IX Item "sme2p1" فعال‌سازی Scalable Matrix Extension نگارش 2.1. این گزینه دستورهای SME2 را نیز فعال می‌کند. .IP \fBfcma\fR 4 .IX Item "fcma" فعال‌سازی افزونه‌های SIMD برای اعداد مختلط. .IP \fBjscvt\fR 4 .IX Item "jscvt" فعال‌سازی دستور تبدیل جاوااسکریپت \f(CW\*(C`fjcvtzs\*(C'\fR. .IP \fBfrintts\fR 4 .IX Item "frintts" فعال‌سازی دستورهای گرد کردن ممیز شناور به مقدار صحیح. .IP \fBwfxt\fR 4 .IX Item "wfxt" فعال‌سازی دستورهای \f(CW\*(C`wfet\*(C'\fR و \f(CW\*(C`wfit\*(C'\fR. .IP \fBxs\fR 4 .IX Item "xs" فعال‌سازی افزونه صفت حافظه XS. .IP \fBlse128\fR 4 .IX Item "lse128" فعال‌سازی افزونه دستورهای اتمیک ۱۲۸ بیتی LSE128. این گزینه دستورهای LSE را نیز فعال می‌کند. .IP \fBd128\fR 4 .IX Item "d128" فعال‌سازی پشتیبانی از دستورهای خواندن/نوشتن ثبات سیستم ۱۲۸ بیتی. این گزینه افزونه LSE128 را نیز فعال می‌کند. .IP \fBgcs\fR 4 .IX Item "gcs" فعال‌سازی پشتیبانی از افزونه Guarded Control Stack در Armv9.4\-a. .IP \fBthe\fR 4 .IX Item "the" فعال‌سازی پشتیبانی از افزونه translation hardening در Armv8.9\-a/9.4\-a. .IP \fBrcpc2\fR 4 .IX Item "rcpc2" فعال‌سازی افزونه RCpc2. .IP \fBrcpc3\fR 4 .IX Item "rcpc3" فعال‌سازی افزونه RCpc3 (Release Consistency). .IP \fBfp8\fR 4 .IX Item "fp8" فعال‌سازی افزونه fp8 (ممیز شناور ۸ بیتی). .IP \fBfp8fma\fR 4 .IX Item "fp8fma" فعال‌سازی افزونه ضرب و انباشت ممیز شناور ۸ بیتی (fp8). .IP \fBssve\-fp8fma\fR 4 .IX Item "ssve-fp8fma" فعال‌سازی افزونه ضرب و انباشت ممیز شناور ۸ بیتی (fp8) در حالت جاری (streaming mode). .IP \fBfp8dot4\fR 4 .IX Item "fp8dot4" فعال‌سازی افزونه ضرب داخلی ۴ جهته ممیز شناور ۸ بیتی (fp8) به دقت یگانه. .IP \fBssve\-fp8dot4\fR 4 .IX Item "ssve-fp8dot4" فعال‌سازی افزونه ضرب داخلی ۴ جهته ممیز شناور ۸ بیتی (fp8) به دقت یگانه در حالت جاری. .IP \fBfp8dot2\fR 4 .IX Item "fp8dot2" فعال‌سازی افزونه ضرب داخلی ۲ جهته ممیز شناور ۸ بیتی (fp8) به دقت نیمه. .IP \fBssve\-fp8dot2\fR 4 .IX Item "ssve-fp8dot2" فعال‌سازی افزونه ضرب داخلی ۲ جهته ممیز شناور ۸ بیتی (fp8) به دقت نیمه در حالت جاری. .IP \fBfaminmax\fR 4 .IX Item "faminmax" فعال‌سازی افزونه Floating Point Absolute Maximum/Minimum. .IP \fBlut\fR 4 .IX Item "lut" فعال‌سازی افزونه Lookup Table. .IP \fBcpa\fR 4 .IX Item "cpa" فعال‌سازی دستورهای Checked Pointer Arithmetic. .IP \fBsve\-b16b16\fR 4 .IX Item "sve-b16b16" فعال‌سازی افزونه SVE non\-widening brain floating\-point (\f(CW\*(C`bf16\*(C'\fR). این مورد تنها زمانی اثرگذار است که \f(CW\*(C`sve2\*(C'\fR یا \f(CW\*(C`sme2\*(C'\fR نیز فعال باشند..PP قابلیت \fBcrypto\fR مستلزم \fBaes\fR، \fBsha2\fR و \fBsimd\fR است که خود مستلزم \fBfp\fR می‌باشد. برعکس، \fBnofp\fR مستلزم \fBnosimd\fR است که خود مستلزم \&\fBnocrypto\fR، \fBnoaes\fR و \fBnosha2\fR خواهد بود. .PP \fIگزینه‌های Adapteva Epiphany\fR .IX Subsection "Adapteva Epiphany Options" .PP این گزینه‌های \fB\-m\fR برای Adapteva Epiphany تعریف شده‌اند: .IP \fB\-mhalf\-reg\-file\fR 4 .IX Item "-mhalf-reg-file" هیچ ثباتی را در محدوده \f(CW\*(C`r32\*(C'\fR...\f(CW\*(C`r63\*(C'\fR تخصیص ندهید. این کار اجازه می‌دهد تا کد روی نسخه‌های سخت‌افزاری که فاقد این ثبات‌ها هستند اجرا شود. .IP \fB\-mprefer\-short\-insn\-regs\fR 4 .IX Item "-mprefer-short-insn-regs" ترجیحاً ثبات‌هایی را تخصیص دهید که امکان تولید دستورالعمل‌های کوتاه را فراهم می‌کنند. این کار می‌تواند منجر به افزایش تعداد دستورالعمل‌ها شود، بنابراین ممکن است اندازه کلی کد را کاهش یا افزایش دهد. .IP \fB\-mbranch\-cost=\fR\fInum\fR 4 .IX Item "-mbranch-cost=num" هزینه انشعاب‌ها را تقریباً برابر با \fInum\fR دستورالعمل «ساده» تنظیم می‌کند. این هزینه صرفاً یک تخمین تقریبی است و تضمینی برای ایجاد نتایج یکسان در انتشارها و نگارش‌های مختلف وجود ندارد. .IP \fB\-mcmove\fR 4 .IX Item "-mcmove" تولید دستورالعمل‌های انتقال شرطی را فعال می‌کند. .IP \fB\-mnops=\fR\fInum\fR 4 .IX Item "-mnops=num" پیش از هر دستورالعمل تولیدشده دیگر، به تعداد \fInum\fR دستور NOP درج می‌کند. .IP \fB\-mno\-soft\-cmpsf\fR 4 .IX Item "-mno-soft-cmpsf" برای مقایسه‌های ممیز شناور با دقت یگانه (single\-precision)، یک دستور \f(CW\*(C`fsub\*(C'\fR صادر کرده و پرچم‌ها را بررسی می‌کند. این کار سریع‌تر از مقایسه نرم‌افزاری است، اما می‌تواند در حضور مقادیر NaN، یا هنگامی که دو عدد کوچکِ متفاوت به گونه‌ای مقایسه می‌شوند که تفاضل آن‌ها صفر محاسبه می‌شود، نتایج نادرستی ایجاد کند. پیش‌فرض \fB\-msoft\-cmpsf\fR است که از مقایسه‌های نرم‌افزاری کندتر، ولی منطبق بر استاندارد IEEE استفاده می‌کند. .IP \fB\-mstack\-offset=\fR\fInum\fR 4 .IX Item "-mstack-offset=num" آفست بین بالای پشته و اشاره‌گر پشته (stack pointer) را تنظیم می‌کند. برای نمونه، مقدار 8 بدین معناست که هشت بایت در محدوده \f(CW\*(C`sp+0...sp+7\*(C'\fR می‌تواند توسط توابع برگ (leaf functions) بدون تخصیص پشته استفاده شود. مقادیر غیر از \fB8\fR یا \fB16\fR آزمایش‌نشده هستند و بعید است کار کنند. همچنین توجه داشته باشید که این گزینه ABI را تغییر می‌دهد؛ کامپایل یک برنامه با یک آفست پشته متفاوت از کتابخانه‌هایی که قبلاً با آن کامپایل شده‌اند، عموماً کار نخواهد کرد. این گزینه در صورتی که بخواهید بررسی کنید آیا یک آفست پشته متفاوت کد بهتری ایجاد می‌کند یا خیر می‌تواند مفید باشد، اما برای استفاده واقعی از آفست پشته متفاوت جهت ساخت برنامه‌های کارآمد، توصیه می‌شود زنجیره ابزار با گزینه مناسب \fB\-\-with\-stack\-offset=\fR\fInum\fR پیکربندی شود. .IP \fB\-mno\-round\-nearest\fR 4 .IX Item "-mno-round-nearest" باعث می‌شود زمان‌بند فرض کند که حالت گرد کردن روی کوتاه‌کردن (truncating) تنظیم شده است. پیش‌فرض \fB\-mround\-nearest\fR است. .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" اگر خلاف آن توسط یک ویژگی (attribute) مشخص نشده باشد، فرض می‌کند که تمام فراخوانی‌ها ممکن است فراتر از محدوده آفست دستورالعمل‌های \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR باشند، و بنابراین نشانی تابع را پیش از اجرای یک فراخوانی (که در غیر این صورت مستقیم می‌بود) در یک ثبات بارگذاری می‌کند. این مقدار پیش‌فرض است. .IP \fB\-mshort\-calls\fR 4 .IX Item "-mshort-calls" اگر خلاف آن توسط یک ویژگی مشخص نشده باشد، فرض می‌کند تمام فراخوانی‌های مستقیم در محدوده دستورالعمل‌های \f(CW\*(C`b\*(C'\fR / \f(CW\*(C`bl\*(C'\fR قرار دارند، بنابراین از این دستورالعمل‌ها برای فراخوانی‌های مستقیم استفاده می‌کند. پیش‌فرض \fB\-mlong\-calls\fR است. .IP \fB\-msmall16\fR 4 .IX Item "-msmall16" فرض می‌کند که نشانی‌ها می‌توانند به صورت مقادیر بدون علامت ۱۶ بیتی بارگذاری شوند. این مورد برای نشانی‌های تابعی که معنای \fB\-mlong\-calls\fR روی آن‌ها مؤثر است اعمال نمی‌شود. .IP \fB\-mfp\-mode=\fR\fImode\fR 4 .IX Item "-mfp-mode=mode" حالت غالب واحد ممیز شناور را تنظیم می‌کند. این مشخص می‌کند که چه حالت ممیز شناوری در زمان فراخوانی تابع و بازگشت از آن ارائه شده و مورد انتظار است. تطبیق این حالت با حالتی که عمدتاً در ابتدای تابع به آن نیاز دارید می‌تواند با جلوگیری از تعویض‌های غیرضروری حالت، برنامه‌های شما را کوچک‌تر و سریع‌تر کند. .Sp \&\fImode\fR می‌تواند یکی از مقادیر زیر باشد: .RS 4 .IP \fBcaller\fR 4 .IX Item "caller" هر حالتی در ورودی تابع معتبر است، و هنگام بازگشت تابع و زمانی که توابع دیگر را فراخوانی می‌کند، حفظ یا بازیابی می‌شود. این حالت برای کامپایل کتابخانه‌ها یا سایر واحدهای کامپایلی که ممکن است بخواهید در برنامه‌های مختلف با حالت‌های غالب FPU متفاوت ادغام کنید مفید است، و راحتی استفاده از یک فایل شیء واحد، بر سربار اندازه و سرعت برای تعویض‌های حالت اضافی که ممکن است مورد نیاز باشد (در مقایسه با انتخابی خاص‌تر برای حالت غالب FPU)، برتری دارد. .IP \fBtruncate\fR 4 .IX Item "truncate" این حالتی است که برای محاسبات ممیز شناور با روش گرد کردنِ کوتاه‌سازی (یعنی گرد کردن به سمت صفر) استفاده می‌شود. این مورد شامل تبدیل از ممیز شناور به عدد صحیح نیز می‌شود. .IP \fBround\-nearest\fR 4 .IX Item "round-nearest" این حالتی است که برای محاسبات ممیز شناور با روش گرد کردن به نزدیک‌ترین یا زوج (round\-to\-nearest\-or\-even) استفاده می‌شود. .IP \fBint\fR 4 .IX Item "int" این حالتی است که برای انجام محاسبات صحیح در FPU استفاده می‌شود، مانند ضرب اعداد صحیح، یا ضرب و جمع انباشته صحیح (multiply\-and\-accumulate). .RE .RS 4 .Sp پیش‌فرض \fB\-mfp\-mode=caller\fR است. .RE .IP \fB\-mno\-split\-lohi\fR 4 .IX Item "-mno-split-lohi" .PD 0 .IP \fB\-mno\-postinc\fR 4 .IX Item "-mno-postinc" .IP \fB\-mno\-postmodify\fR 4 .IX Item "-mno-postmodify" .PD بهینه‌سازی‌های جزئی تولید کد که به ترتیب تقسیم بارگذاری‌های ۳۲ بیتی، تولید نشانی‌های پس‌افزایشی (post\-increment)، و تولید نشانی‌های پس‌تغییری (post\-modify) را غیرفعال می‌کنند. پیش‌فرض‌ها \fBmsplit\-lohi\fR، \&\fB\-mpost\-inc\fR و \fB\-mpost\-modify\fR هستند. .IP \fB\-mnovect\-double\fR 4 .IX Item "-mnovect-double" حالت برداری SIMD ترجیحی را به SImode تغییر می‌دهد. پیش‌فرض \&\fB\-mvect\-double\fR است که از DImode به عنوان حالت ترجیحی SIMD استفاده می‌کند. .IP \fB\-max\-vect\-align=\fR\fInum\fR 4 .IX Item "-max-vect-align=num" بیشینه تراز برای انواع حالت برداری SIMD. \&\fInum\fR می‌تواند ۴ یا ۸ باشد. پیش‌فرض ۸ است. توجه داشته باشید که این یک تغییر در ABI است، اگرچه بسیاری از رابط‌های توابع کتابخانه‌ای در صورتی که از حالت‌های برداری SIMD در جاهایی که بر اندازه یا تراز انواع مربوطه تأثیر می‌گذارد استفاده نکنند، تحت تأثیر قرار نمی‌گیرند. .IP \fB\-msplit\-vecmove\-early\fR 4 .IX Item "-msplit-vecmove-early" انتقال‌های برداری را پیش از مرحله reload به انتقال‌های تک‌کلمه‌ای تقسیم می‌کند. در تئوری این می‌تواند تخصیص ثبات بهتری ارائه دهد، اما تاکنون به طور کلی عکس این موضوع مشاهده شده است. .IP \fB\-m1reg\-\fR\fIreg\fR 4 .IX Item "-m1reg-reg" یک ثبات را برای نگه‌داری مقدار ثابت \-1 تعیین می‌کند که بارگذاری مقادیر منفی کوچک و ماسک‌های بیتی خاص را سریع‌تر می‌سازد. مقادیر مجاز برای \fIreg\fR شامل \fBr43\fR و \fBr63\fR است که استفاده از آن ثبات را به عنوان یک ثبات ثابت تعیین می‌کند، و \fBnone\fR که به معنی عدم استفاده از هیچ ثباتی برای این منظور است. پیش‌فرض \fB\-m1reg\-none\fR است. .PP \fIگزینه‌های AMD GCN\fR .IX Subsection "AMD GCN Options" .PP این گزینه‌ها به طور ویژه برای پورت AMD GCN تعریف شده‌اند. .IP \fB\-march=\fR\fIgpu\fR 4 .IX Item "-march=gpu" .PD 0 .IP \fB\-mtune=\fR\fIgpu\fR 4 .IX Item "-mtune=gpu" .PD نوع معماری یا تنظیم عملکرد (tuning) را برای \fIgpu\fR تعیین می‌کند. مقادیر پشتیبانی‌شده برای \fIgpu\fR عبارت‌اند از: .RS 4 .IP \fBgfx900\fR 4 .IX Item "gfx900" کامپایل برای دستگاه‌های GCN5 Vega 10 (gfx900). .IP \fBgfx902\fR 4 .IX Item "gfx902" کامپایل برای دستگاه‌های GCN5 Vega gfx902. (آزمایشی) .IP \fBgfx904\fR 4 .IX Item "gfx904" کامپایل برای دستگاه‌های GCN5 Vega gfx904. (آزمایشی) .IP \fBgfx906\fR 4 .IX Item "gfx906" کامپایل برای دستگاه‌های GCN5 Vega 20 (gfx906). .IP \fBgfx908\fR 4 .IX Item "gfx908" کامپایل برای دستگاه‌های سری CDNA1 Instinct MI100 (gfx908). .IP \fBgfx909\fR 4 .IX Item "gfx909" کامپایل برای دستگاه‌های GCN5 Vega gfx909. (آزمایشی) .IP \fBgfx90a\fR 4 .IX Item "gfx90a" کامپایل برای دستگاه‌های سری CDNA2 Instinct MI200 (gfx90a)..IP \fBgfx90c\fR 4 .IX Item "gfx90c" کامپایل برای دستگاه‌های GCN5 Vega 7 (gfx90c). .IP \fBgfx9\-generic\fR 4 .IX Item "gfx9-generic" کامپایل کد عمومی برای دستگاه‌های Vega، قابل اجرا روی زیرمجموعه زیر از دستگاه‌های GFX9: gfx900، gfx902، gfx904، gfx906، gfx909 و gfx90c. (آزمایشی) .IP \fBgfx1030\fR 4 .IX Item "gfx1030" کامپایل برای دستگاه‌های RDNA2 gfx1030 (سری GFX10). .IP \fBgfx1031\fR 4 .IX Item "gfx1031" کامپایل برای دستگاه‌های RDNA2 gfx1031 (سری GFX10). (آزمایشی) .IP \fBgfx1032\fR 4 .IX Item "gfx1032" کامپایل برای دستگاه‌های RDNA2 gfx1032 (سری GFX10). (آزمایشی) .IP \fBgfx1033\fR 4 .IX Item "gfx1033" کامپایل برای دستگاه‌های RDNA2 gfx1033 (سری GFX10). (آزمایشی) .IP \fBgfx1034\fR 4 .IX Item "gfx1034" کامپایل برای دستگاه‌های RDNA2 gfx1034 (سری GFX10). (آزمایشی) .IP \fBgfx1035\fR 4 .IX Item "gfx1035" کامپایل برای دستگاه‌های RDNA2 gfx1035 (سری GFX10). (آزمایشی) .IP \fBgfx1036\fR 4 .IX Item "gfx1036" کامپایل برای دستگاه‌های RDNA2 gfx1036 (سری GFX10). .IP \fBgfx10\-3\-generic\fR 4 .IX Item "gfx10-3-generic" کامپایل کد عمومی برای دستگاه‌های GFX10\-3، قابل اجرا روی gfx1030، gfx1031، gfx1032، gfx1033، gfx1034، gfx1035 و gfx1036. (آزمایشی) .IP \fBgfx1100\fR 4 .IX Item "gfx1100" کامپایل برای دستگاه‌های RDNA3 gfx1100 (سری GFX11). .IP \fBgfx1101\fR 4 .IX Item "gfx1101" کامپایل برای دستگاه‌های RDNA3 gfx1101 (سری GFX11). (آزمایشی) .IP \fBgfx1102\fR 4 .IX Item "gfx1102" کامپایل برای دستگاه‌های RDNA3 gfx1102 (سری GFX11). (آزمایشی) .IP \fBgfx1103\fR 4 .IX Item "gfx1103" کامپایل برای دستگاه‌های RDNA3 gfx1103 (سری GFX11). .IP \fBgfx1150\fR 4 .IX Item "gfx1150" کامپایل برای دستگاه‌های RDNA3 gfx1150 (سری GFX11). (آزمایشی) .IP \fBgfx1151\fR 4 .IX Item "gfx1151" کامپایل برای دستگاه‌های RDNA3 gfx1151 (سری GFX11). (آزمایشی) .IP \fBgfx1152\fR 4 .IX Item "gfx1152" کامپایل برای دستگاه‌های RDNA3 gfx1152 (سری GFX11). (آزمایشی) .IP \fBgfx1153\fR 4 .IX Item "gfx1153" کامپایل برای دستگاه‌های RDNA3 gfx1153 (سری GFX11). (آزمایشی) .IP \fBgfx11\-generic\fR 4 .IX Item "gfx11-generic" کامپایل کد عمومی برای دستگاه‌های GFX11، قابل اجرا روی gfx1100، gfx1101، gfx1102، gfx1103، gfx1150، gfx1151، gfx1152 و gfx1153. (آزمایشی) .RE .RS 4 .RE .IP \fB\-msram\-ecc=on\fR 4 .IX Item "-msram-ecc=on" .PD 0 .IP \fB\-msram\-ecc=off\fR 4 .IX Item "-msram-ecc=off" .IP \fB\-msram\-ecc=any\fR 4 .IX Item "-msram-ecc=any" .PD کامپایل باینری‌های مناسب برای دستگاه‌هایی با ویژگی SRAM\-ECC فعال، غیرفعال یا هر یک از این دو حالت. این ویژگی در برخی دستگاه‌ها می‌تواند به‌ازای هر پردازش فعال شود. کد کامپایل‌شده باید با حالت دستگاه مطابقت داشته باشد. مقدار پیش‌فرض برای دستگاه‌هایی که از آن پشتیبانی می‌کنند، \&\fBany\fR است. .IP \fB\-mstack\-size=\fR\fIbytes\fR 4 .IX Item "-mstack-size=bytes" تعیین می‌کند چه تعداد \fIبایت\fR از فضای پشته برای هر ریسه GPU (wave\-front) درخواست شود. توجه داشته باشید که ممکن است ریسه‌های بسیار و حافظه محدودی در دسترس باشد. اندازه تخصیص پشته همچنین می‌تواند بر کارایی زمان اجرا تأثیر بگذارد. مقدار پیش‌فرض هنگام استفاده از OpenACC یا OpenMP برابر 32KB و در غیر این صورت 1MB است. .IP \fB\-mxnack=on\fR 4 .IX Item "-mxnack=on" .PD 0 .IP \fB\-mxnack=off\fR 4 .IX Item "-mxnack=off" .IP \fB\-mxnack=any\fR 4 .IX Item "-mxnack=any" .PD کامپایل باینری‌های مناسب برای دستگاه‌هایی با قابلیت XNACK فعال، غیرفعال یا در هر دو حالت. برخی دستگاه‌ها همیشه به XNACK نیاز دارند و برخی به کاربر اجازه می‌دهند XNACK را پیکربندی کند. کد کامپایل‌شده باید با حالت دستگاه مطابقت داشته باشد. پیش‌فرض در دستگاه‌هایی که از Unified Shared Memory پشتیبانی می‌کنند \fB\-mxnack=any\fR و در غیر این صورت \fB\-mxnack=no\fR است. .PP \fIگزینه‌های ARC\fR .IX Subsection "ARC Options" .PP گزینه‌های زیر نگارش معماری را که کد برای آن کامپایل می‌شود، کنترل می‌کنند: .IP \fB\-mbarrel\-shifter\fR 4 .IX Item "-mbarrel-shifter" تولید دستورالعمل‌های پشتیبانی‌شده توسط barrel shifter. این حالت پیش‌فرض است مگر اینکه \fB\-mcpu=ARC601\fR یا \fB\-mcpu=ARCEM\fR فعال باشد. .IP \fB\-mjli\-always\fR 4 .IX Item "-mjli-always" اجبار به فراخوانی تابع با استفاده از دستورالعمل jli_s. این گزینه فقط برای معماری ARCv2 معتبر است. .IP \fB\-mcpu=\fR\fIcpu\fR 4 .IX Item "-mcpu=cpu" تنظیم نوع معماری، نحوه استفاده از ثبات‌ها (رجیسترها)، و پارامترهای زمان‌بندی دستورالعمل‌ها برای \fIcpu\fR. همچنین گزینه‌های میان‌بر نام‌مستعار (alias) برای سازگاری با گذشته و راحتی کار در دسترس هستند. مقادیر پشتیبانی‌شده برای \fIcpu\fR عبارت‌اند از: .RS 4 .IP \fBarc600\fR 4 .IX Item "arc600" کامپایل برای ARC600. نام‌های مستعار: \fB\-mA6\fR، \fB\-mARC600\fR. .IP \fBarc601\fR 4 .IX Item "arc601" کامپایل برای ARC601. نام مستعار: \fB\-mARC601\fR. .IP \fBarc700\fR 4 .IX Item "arc700" کامپایل برای ARC700. نام‌های مستعار: \fB\-mA7\fR، \fB\-mARC700\fR. هنگام پیکربندی با \fB\-\-with\-cpu=arc700\fR، این مقدار پیش‌فرض است. .IP \fBarcem\fR 4 .IX Item "arcem" کامپایل برای ARC EM. .IP \fBarchs\fR 4 .IX Item "archs" کامپایل برای ARC HS. .IP \fBem\fR 4 .IX Item "em" کامپایل برای پردازنده ARC EM بدون افزونه‌های سخت‌افزاری. .IP \fBem4\fR 4 .IX Item "em4" کامپایل برای پردازنده ARC EM4. .IP \fBem4_dmips\fR 4 .IX Item "em4_dmips" کامپایل برای پردازنده ARC EM4 DMIPS. .IP \fBem4_fpus\fR 4 .IX Item "em4_fpus" کامپایل برای پردازنده ARC EM4 DMIPS با افزونه ممیز شناور با دقت یگانه (single\-precision). .IP \fBem4_fpuda\fR 4 .IX Item "em4_fpuda" کامپایل برای پردازنده ARC EM4 DMIPS با ممیز شناور دقت یگانه و دستورالعمل‌های کمکی دقت مضاعف (double assist). .IP \fBhs\fR 4 .IX Item "hs" کامپایل برای پردازنده ARC HS بدون افزونه‌های سخت‌افزاری، به‌جز دستورالعمل‌های اتمیک (atomic). .IP \fBhs34\fR 4 .IX Item "hs34" کامپایل برای پردازنده ARC HS34. .IP \fBhs38\fR 4 .IX Item "hs38" کامپایل برای پردازنده ARC HS38. .IP \fBhs38_linux\fR 4 .IX Item "hs38_linux" کامپایل برای پردازنده ARC HS38 با فعال بودن تمامی افزونه‌های سخت‌افزاری. .IP \fBhs4x\fR 4 .IX Item "hs4x" کامپایل برای پردازنده ARC HS4x. .IP \fBhs4xd\fR 4 .IX Item "hs4xd" کامپایل برای پردازنده ARC HS4xD. .IP \fBhs4x_rel31\fR 4 .IX Item "hs4x_rel31" کامپایل برای پردازنده ARC HS4x نگارش 3.10a. .IP \fBarc600_norm\fR 4 .IX Item "arc600_norm" کامپایل برای پردازنده ARC 600 با فعال بودن دستورالعمل‌های \f(CW\*(C`norm\*(C'\fR. .IP \fBarc600_mul32x16\fR 4 .IX Item "arc600_mul32x16" کامپایل برای پردازنده ARC 600 با فعال بودن دستورالعمل‌های \f(CW\*(C`norm\*(C'\fR و ضرب 32x16\-bit. .IP \fBarc600_mul64\fR 4 .IX Item "arc600_mul64" کامپایل برای پردازنده ARC 600 با فعال بودن دستورالعمل‌های \f(CW\*(C`norm\*(C'\fR و خانواده \f(CW\*(C`mul64\*(C'\fR..IP \fBarc601_norm\fR 4 .IX Item "arc601_norm" کامپایل برای پردازندهٔ ARC 601 با فعال بودن دستورهای \f(CW\*(C`norm\*(C'\fR. .IP \fBarc601_mul32x16\fR 4 .IX Item "arc601_mul32x16" کامپایل برای پردازندهٔ ARC 601 با فعال بودن دستورهای \f(CW\*(C`norm\*(C'\fR و ضرب 32x16\-bit. .IP \fBarc601_mul64\fR 4 .IX Item "arc601_mul64" کامپایل برای پردازندهٔ ARC 601 با فعال بودن دستورهای \f(CW\*(C`norm\*(C'\fR و خانوادهٔ دستورهای \f(CW\*(C`mul64\*(C'\fR. .IP \fBnps400\fR 4 .IX Item "nps400" کامپایل برای ARC 700 روی تراشهٔ NPS400. .IP \fBem_mini\fR 4 .IX Item "em_mini" کامپایل برای پیکربندی کمینه‌گرای ARC EM با مجموعه ثبات‌های کاهش‌یافته. .RE .RS 4 .RE .IP \fB\-mdpfp\fR 4 .IX Item "-mdpfp" .PD 0 .IP \fB\-mdpfp\-compact\fR 4 .IX Item "-mdpfp-compact" .PD تولید دستورهای FPX با دقت مضاعف (double\-precision)، بهینه‌سازی‌شده برای پیاده‌سازی فشرده (compact). .IP \fB\-mdpfp\-fast\fR 4 .IX Item "-mdpfp-fast" تولید دستورهای FPX با دقت مضاعف، بهینه‌سازی‌شده برای پیاده‌سازی سریع (fast). .IP \fB\-mno\-dpfp\-lrsr\fR 4 .IX Item "-mno-dpfp-lrsr" غیرفعال کردن استفادهٔ دستورهای \f(CW\*(C`lr\*(C'\fR و \f(CW\*(C`sr\*(C'\fR از ثبات‌های کمکی افزونهٔ FPX. .IP \fB\-mea\fR 4 .IX Item "-mea" تولید دستورهای محاسباتی گسترش‌یافته. در حال حاضر تنها \&\f(CW\*(C`divaw\*(C'\fR، \f(CW\*(C`adds\*(C'\fR، \f(CW\*(C`subs\*(C'\fR و \f(CW\*(C`sat16\*(C'\fR پشتیبانی می‌شوند. تنها برای \fB\-mcpu=ARC700\fR معتبر است. .IP \fB\-mno\-mpy\fR 4 .IX Item "-mno-mpy" عدم تولید دستورهای خانوادهٔ \f(CW\*(C`mpy\*(C'\fR برای ARC700. این گزینه منسوخ شده است. .IP \fB\-mmul32x16\fR 4 .IX Item "-mmul32x16" تولید دستورهای ضرب و ضرب\-انباشت (multiply\-accumulate) 32x16\-bit. .IP \fB\-mmul64\fR 4 .IX Item "-mmul64" تولید دستورهای \f(CW\*(C`mul64\*(C'\fR و \f(CW\*(C`mulu64\*(C'\fR. تنها برای \fB\-mcpu=ARC600\fR معتبر است. .IP \fB\-mnorm\fR 4 .IX Item "-mnorm" تولید دستورهای \f(CW\*(C`norm\*(C'\fR. اگر \fB\-mcpu=ARC700\fR اعمال شده باشد، این حالت پیش‌فرض است. .IP \fB\-mspfp\fR 4 .IX Item "-mspfp" .PD 0 .IP \fB\-mspfp\-compact\fR 4 .IX Item "-mspfp-compact" .PD تولید دستورهای FPX با دقت یگانه (single\-precision)، بهینه‌سازی‌شده برای پیاده‌سازی فشرده (compact). .IP \fB\-mspfp\-fast\fR 4 .IX Item "-mspfp-fast" تولید دستورهای FPX با دقت یگانه، بهینه‌سازی‌شده برای پیاده‌سازی سریع (fast). .IP \fB\-msimd\fR 4 .IX Item "-msimd" فعال‌سازی تولید دستورهای ARC SIMD از طریق توابع توکار (builtins) ویژهٔ مقصد. تنها برای \fB\-mcpu=ARC700\fR معتبر است. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" این گزینه نادیده گرفته می‌شود؛ صرفاً برای سازگاری ارائه شده است. کد ممیز شناور نرم‌افزاری به‌طور پیش‌فرض تولید می‌شود، و این پیش‌فرض می‌تواند با گزینه‌های FPX لغو شود؛ \fB\-mspfp\fR، \fB\-mspfp\-compact\fR یا \&\fB\-mspfp\-fast\fR برای دقت یگانه، و \fB\-mdpfp\fR، \&\fB\-mdpfp\-compact\fR یا \fB\-mdpfp\-fast\fR برای دقت مضاعف. .IP \fB\-mswap\fR 4 .IX Item "-mswap" تولید دستورهای \f(CW\*(C`swap\*(C'\fR. .IP \fB\-matomic\fR 4 .IX Item "-matomic" این گزینه استفاده از افزونهٔ شرطی بارگذاری/ذخیره‌سازی قفل‌شده (locked load/store conditional) را برای پیاده‌سازی توابع توکار حافظهٔ اتمی فعال می‌کند. برای هسته‌های ARC 6xx یا ARC EM در دسترس نیست. .IP \fB\-mdiv\-rem\fR 4 .IX Item "-mdiv-rem" فعال‌سازی دستورهای \f(CW\*(C`div\*(C'\fR و \f(CW\*(C`rem\*(C'\fR برای هسته‌های ARCv2. .IP \fB\-mcode\-density\fR 4 .IX Item "-mcode-density" فعال‌سازی دستورهای فشردگی کد (code density) برای ARC EM. این گزینه به‌طور پیش‌فرض برای ARC HS فعال است. .IP \fB\-mll64\fR 4 .IX Item "-mll64" فعال‌سازی عملیات بارگذاری/ذخیره‌سازی مضاعف (double load/store) برای هسته‌های ARC HS. .IP \fB\-mtp\-regno=\fR\fIregno\fR 4 .IX Item "-mtp-regno=regno" مشخص کردن شمارهٔ ثبات اشاره‌گر رشته (thread pointer). .IP \fB\-mmpy\-option=\fR\fImulto\fR 4 .IX Item "-mmpy-option=multo" کامپایل کد ARCv2 با یک گزینهٔ طراحی ضرب‌کننده (multiplier). می‌توانید این گزینه را با استفاده از یک رشته یا یک مقدار عددی برای \fImulto\fR مشخص کنید. مقدار پیش‌فرض \&\fBwlh1\fR است. مقادیر شناخته‌شده عبارتند از: .RS 4 .IP \fB0\fR 4 .IX Item "0" .PD 0 .IP \fBnone\fR 4 .IX Item "none" .PD هیچ ضرب‌کننده‌ای در دسترس نیست. .IP \fB1\fR 4 .IX Item "1" .PD 0 .IP \fBw\fR 4 .IX Item "w" .PD ضرب‌کنندهٔ 16x16، کاملاً خط‌لوله‌ای (fully pipelined). دستورهای زیر فعال می‌شوند: \f(CW\*(C`mpyw\*(C'\fR و \f(CW\*(C`mpyuw\*(C'\fR. .IP \fB2\fR 4 .IX Item "2" .PD 0 .IP \fBwlh1\fR 4 .IX Item "wlh1" .PD ضرب‌کنندهٔ 32x32، کاملاً خط‌لوله‌ای (۱ مرحله). دستورهای زیر علاوه بر این فعال می‌شوند: \f(CW\*(C`mpy\*(C'\fR، \f(CW\*(C`mpyu\*(C'\fR، \f(CW\*(C`mpym\*(C'\fR، \f(CW\*(C`mpymu\*(C'\fR و \f(CW\*(C`mpy_s\*(C'\fR. .IP \fB3\fR 4 .IX Item "3" .PD 0 .IP \fBwlh2\fR 4 .IX Item "wlh2" .PD ضرب‌کنندهٔ 32x32، کاملاً خط‌لوله‌ای (۲ مرحله). دستورهای زیر علاوه بر این فعال می‌شوند: \f(CW\*(C`mpy\*(C'\fR، \&\f(CW\*(C`mpyu\*(C'\fR، \f(CW\*(C`mpym\*(C'\fR، \f(CW\*(C`mpymu\*(C'\fR و \f(CW\*(C`mpy_s\*(C'\fR. .IP \fB4\fR 4 .IX Item "4" .PD 0 .IP \fBwlh3\fR 4 .IX Item "wlh3" .PD دو ضرب‌کنندهٔ 16x16، مسدودکننده (blocking)، ترتیبی (sequential). دستورهای زیر علاوه بر این فعال می‌شوند: \f(CW\*(C`mpy\*(C'\fR، \&\f(CW\*(C`mpyu\*(C'\fR، \f(CW\*(C`mpym\*(C'\fR، \f(CW\*(C`mpymu\*(C'\fR و \f(CW\*(C`mpy_s\*(C'\fR. .IP \fB5\fR 4 .IX Item "5" .PD 0 .IP \fBwlh4\fR 4 .IX Item "wlh4" .PD یک ضرب‌کنندهٔ 16x16، مسدودکننده، ترتیبی. دستورهای زیر علاوه بر این فعال می‌شوند: \f(CW\*(C`mpy\*(C'\fR، \&\f(CW\*(C`mpyu\*(C'\fR، \f(CW\*(C`mpym\*(C'\fR، \f(CW\*(C`mpymu\*(C'\fR و \f(CW\*(C`mpy_s\*(C'\fR. .IP \fB6\fR 4 .IX Item "6" .PD 0 .IP \fBwlh5\fR 4 .IX Item "wlh5" .PD یک ضرب‌کنندهٔ 32x4، مسدودکننده، ترتیبی. دستورهای زیر علاوه بر این فعال می‌شوند: \f(CW\*(C`mpy\*(C'\fR، \&\f(CW\*(C`mpyu\*(C'\fR، \f(CW\*(C`mpym\*(C'\fR، \f(CW\*(C`mpymu\*(C'\fR و \f(CW\*(C`mpy_s\*(C'\fR. .IP \fB7\fR 4 .IX Item "7" .PD 0 .IP \fBplus_dmpy\fR 4 .IX Item "plus_dmpy" .PD پشتیبانی از ARC HS SIMD. .IP \fB8\fR 4 .IX Item "8" .PD 0 .IP \fBplus_macd\fR 4 .IX Item "plus_macd" .PD پشتیبانی از ARC HS SIMD..IP \fB9\fR 4 .IX Item "9" .PD 0 .IP \fBplus_qmacw\fR 4 .IX Item "plus_qmacw" .PD پشتیبانی از ARC HS SIMD. .RE .RS 4 .Sp این گزینه تنها برای هسته‌های ARCv2 در دسترس است. .RE .IP \fB\-mfpu=\fR\fIfpu\fR 4 .IX Item "-mfpu=fpu" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور خاص را برای هسته‌های ARCv2 فعال می‌کند. مقادیر پشتیبانی‌شده برای \fIfpu\fR عبارتند از: .RS 4 .IP \fBfpus\fR 4 .IX Item "fpus" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه را فعال می‌کند. .IP \fBfpud\fR 4 .IX Item "fpud" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت دوگانه را فعال می‌کند. افزونهٔ ممیز شناور با دقت یگانه نیز فعال می‌شود. برای ARC EM در دسترس نیست. .IP \fBfpuda\fR 4 .IX Item "fpuda" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت دوگانه را با استفاده از دستورالعمل‌های کمکی دقت دوگانه فعال می‌کند. افزونهٔ ممیز شناور با دقت یگانه نیز فعال می‌شود. این گزینه تنها برای ARC EM در دسترس است. .IP \fBfpuda_div\fR 4 .IX Item "fpuda_div" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت دوگانه را با استفاده از دستورالعمل‌های کمکی دقت دوگانه فعال می‌کند. افزونه‌های ممیز شناور با دقت یگانه، ریشهٔ دوم و تقسیم نیز فعال می‌شوند. این گزینه تنها برای ARC EM در دسترس است. .IP \fBfpuda_fma\fR 4 .IX Item "fpuda_fma" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت دوگانه را با استفاده از دستورالعمل‌های کمکی دقت دوگانه فعال می‌کند. افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه و ضرب و جمع ترکیب‌شده نیز فعال می‌شوند. این گزینه تنها برای ARC EM در دسترس است. .IP \fBfpuda_all\fR 4 .IX Item "fpuda_all" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت دوگانه را با استفاده از دستورالعمل‌های کمکی دقت دوگانه فعال می‌کند. تمام افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه نیز فعال می‌شوند. این گزینه تنها برای ARC EM در دسترس است. .IP \fBfpus_div\fR 4 .IX Item "fpus_div" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه، ریشهٔ دوم و تقسیم را فعال می‌کند. .IP \fBfpud_div\fR 4 .IX Item "fpud_div" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت دوگانه، ریشهٔ دوم و تقسیم را فعال می‌کند. این گزینه شامل گزینهٔ \fBfpus_div\fR نیز می‌شود. برای ARC EM در دسترس نیست. .IP \fBfpus_fma\fR 4 .IX Item "fpus_fma" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه و ضرب و جمع ترکیب‌شده را فعال می‌کند. .IP \fBfpud_fma\fR 4 .IX Item "fpud_fma" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت دوگانه و ضرب و جمع ترکیب‌شده را فعال می‌کند. این گزینه شامل گزینهٔ \fBfpus_fma\fR نیز می‌شود. برای ARC EM در دسترس نیست. .IP \fBfpus_all\fR 4 .IX Item "fpus_all" پشتیبانی از تمام افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه را فعال می‌کند. .IP \fBfpud_all\fR 4 .IX Item "fpud_all" پشتیبانی از تمام افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه و دوگانه را فعال می‌کند. برای ARC EM در دسترس نیست. .RE .RS 4 .RE .IP "\fB\-mirq\-ctrl\-saved=\fR\fIregister\-range\fR\fB,\fR \fIblink\fR\fB,\fR \fIlp_count\fR" 4 .IX Item "-mirq-ctrl-saved=register-range, blink, lp_count" ثبات‌های همه‌منظوره‌ای را مشخص می‌کند که پردازنده هنگام ورود به وقفه و خروج از آن، به‌طور خودکار ذخیره/بازیابی می‌کند. \fIregister\-range\fR به صورت دو ثبات که با یک خط تیره از هم جدا شده‌اند مشخص می‌شود. محدودهٔ ثبات‌ها همواره با \f(CW\*(C`r0\*(C'\fR آغاز می‌شود و حد بالایی آن ثبات \f(CW\*(C`fp\*(C'\fR است. \&\fIblink\fR و \fIlp_count\fR اختیاری هستند. این گزینه تنها برای هسته‌های ARC EM و ARC HS معتبر است. .IP \fB\-mrgf\-banked\-regs=\fR\fInumber\fR 4 .IX Item "-mrgf-banked-regs=number" تعداد ثبات‌های تکثیرشده در بانک دوم ثبات‌ها را هنگام ورود به وقفهٔ سریع مشخص می‌کند. وقفه‌های سریع، وقفه‌هایی با بالاترین سطح اولویت P0 هستند. این وقفه‌ها تنها ثبات‌های PC و STATUS32 را ذخیره می‌کنند تا از تراکنش‌های حافظه در طول توالی ورود و خروج وقفه جلوگیری شود. زمانی که از وقفه‌های سریع در پردازنده‌ای از خانوادهٔ ARC V2 استفاده می‌کنید، از این گزینه بهره ببرید. مقادیر مجاز عبارتند از 4، 8، 16 و 32. .IP \fB\-mlpc\-width=\fR\fIwidth\fR 4 .IX Item "-mlpc-width=width" عرض ثبات \f(CW\*(C`lp_count\*(C'\fR را مشخص می‌کند. مقادیر معتبر برای \&\fIwidth\fR عبارتند از 8، 16، 20، 24، 28 و 32 بیت. عرض پیش‌فرض روی 32 بیت ثابت است. اگر عرض کمتر از 32 باشد، کامپایلر تلاشی برای تبدیل حلقه‌ها در برنامهٔ شما جهت استفاده از سازوکار حلقه با تاخیر صفر (zero\-delay loop) نمی‌کند، مگر آنکه مشخص باشد ثبات \f(CW\*(C`lp_count\*(C'\fR می‌تواند مقدار شمارندهٔ حلقهٔ مورد نیاز را در خود نگه دارد. بسته به عرض مشخص‌شده، ممکن است کامپایلر و کتابخانهٔ زمان‌اجرا همچنان برای نیازهای گوناگون به استفاده از این سازوکار حلقه ادامه دهند. این گزینه ماکروی \&\f(CW\*(C`_\|_ARC_LPC_WIDTH_\|_\*(C'\fR را با مقدار \fIwidth\fR تعریف می‌کند. .IP \fB\-mrf16\fR 4 .IX Item "-mrf16" این گزینه به کامپایلر دستور می‌دهد کدی برای یک فایل ثبات (register file) با 16 مدخل تولید کند. این گزینه ماکروی پیش‌پردازندهٔ \f(CW\*(C`_\|_ARC_RF16_\|_\*(C'\fR را تعریف می‌کند. .IP \fB\-mbranch\-index\fR 4 .IX Item "-mbranch-index" استفاده از دستورالعمل‌های \f(CW\*(C`bi\*(C'\fR یا \f(CW\*(C`bih\*(C'\fR را برای پیاده‌سازی جدول‌های پرش فعال می‌کند. .PP گزینه‌های زیر به اسمبلر منتقل می‌شوند و همچنین نمادهای ماکروی پیش‌پردازنده را تعریف می‌کنند: .IP \fB\-mdsp\-packa\fR 4 .IX Item "-mdsp-packa" برای فعال‌سازی افزونه‌های DSP Pack A به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \f(CW\*(C`_\|_Xdsp_packa\*(C'\fR را تنظیم می‌کند. این گزینه منسوخ شده است. .IP \fB\-mdvbf\fR 4 .IX Item "-mdvbf" برای فعال‌سازی افزونهٔ پروانه‌ای دوگانهٔ ویتربی به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \f(CW\*(C`_\|_Xdvbf\*(C'\fR را تنظیم می‌کند. این گزینه منسوخ شده است. .IP \fB\-mlock\fR 4 .IX Item "-mlock" برای فعال‌سازی افزونهٔ بارگذاری/ذخیره‌سازی شرطی قفل‌شده به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \&\f(CW\*(C`_\|_Xlock\*(C'\fR را تنظیم می‌کند. .IP \fB\-mmac\-d16\fR 4 .IX Item "-mmac-d16" به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \&\f(CW\*(C`_\|_Xxmac_d16\*(C'\fR را تنظیم می‌کند. این گزینه منسوخ شده است. .IP \fB\-mmac\-24\fR 4 .IX Item "-mmac-24" به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \&\f(CW\*(C`_\|_Xxmac_24\*(C'\fR را تنظیم می‌کند. این گزینه منسوخ شده است. .IP \fB\-mrtsc\fR 4 .IX Item "-mrtsc" برای فعال‌سازی دستورالعمل افزونهٔ شمارندهٔ برچسب زمان 64 بیتی به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \&\f(CW\*(C`_\|_Xrtsc\*(C'\fR را تنظیم می‌کند. این گزینه منسوخ شده است. .IP \fB\-mswape\fR 4 .IX Item "-mswape" برای فعال‌سازی دستورالعمل افزونهٔ جابه‌جایی ترتیب بایت‌ها به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \&\f(CW\*(C`_\|_Xswape\*(C'\fR را تنظیم می‌کند. .IP \fB\-mtelephony\fR 4 .IX Item "-mtelephony" برای فعال‌سازی دستورالعمل‌های تک‌عملوندی و دوعملوندی تلفنی به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \&\f(CW\*(C`_\|_Xtelephony\*(C'\fR را تنظیم می‌کند. این گزینه منسوخ شده است. .IP \fB\-mxy\fR 4 .IX Item "-mxy" برای فعال‌سازی افزونهٔ حافظهٔ XY به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \f(CW\*(C`_\|_Xxy\*(C'\fR را تنظیم می‌کند. .PP گزینه‌های زیر نحوهٔ حاشیه‌نویسی کد اسمبلی را کنترل می‌کنند: .IP \fB\-misize\fR 4 .IX Item "-misize" دستورالعمل‌های اسمبلر را با آدرس‌های تخمینی حاشیه‌نویسی می‌کند. .IP \fB\-mannotate\-align\fR 4 .IX Item "-mannotate-align" کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های پیشین حفظ شده است. .PP گزینه‌های زیر به پیونددهنده منتقل می‌شوند: .IP \fB\-marclinux\fR 4 .IX Item "-marclinux" به پیونددهنده منتقل می‌شود تا استفاده از شبیه‌سازی \f(CW\*(C`arclinux\*(C'\fR را مشخص کند. این گزینه به‌طور پیش‌فرض در زنجیره‌های ابزار ساخته‌شده برای مقصدهای \&\f(CW\*(C`arc\-linux\-uclibc\*(C'\fR و \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR هنگامی که پروفایل‌گیری درخواست نشده باشد، فعال است. .IP \fB\-marclinux_prof\fR 4 .IX Item "-marclinux_prof" به پیونددهنده منتقل می‌شود تا استفاده از شبیه‌سازی \&\f(CW\*(C`arclinux_prof\*(C'\fR را مشخص کند. این گزینه به‌طور پیش‌فرض در زنجیره‌های ابزار ساخته‌شده برای مقصدهای \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR و \&\f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR هنگامی که پروفایل‌گیری درخواست شده باشد، فعال است..PP گزینه‌های زیر معناشناسی کد تولیدشده را کنترل می‌کنند: .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" فراخوانی‌ها را به‌صورت فراخوانی غیرمستقیم با ثبات (register indirect calls) تولید می‌کند، و بدین ترتیب دسترسی به کل محدوده آدرس ۳۲ بیتی را فراهم می‌سازد. .IP \fB\-mmedium\-calls\fR 4 .IX Item "-mmedium-calls" برای فراخوانی‌ها از محدوده آدرس‌دهی کمتر از ۲۵ بیت، که آفست موجود برای یک دستور غیرشرطی branch\-and\-link است، استفاده نمی‌کند. اجرای شرطی فراخوانی توابع سرکوب می‌شود تا امکان استفاده از محدوده ۲۵ بیتی، به جای محدوده ۲۱ بیتی در branch\-and\-link شرطی، فراهم گردد. این مقدار پیش‌فرض برای زنجیره‌های ابزار ساخته‌شده برای اهداف \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR و \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR است. .IP "\fB\-G\fR \fInum\fR" 4 .IX Item "-G num" در صورتی که داده‌های در دسترس از بیرون (externally\-visible) بزرگ‌تر از \fInum\fR بایت نباشند، تعاریف آن‌ها را در یک بخش داده‌های کوچک (small data section) قرار می‌دهد. مقدار پیش‌فرض \&\fInum\fR برای هر پیکربندی ARC برابر ۴ است، یا در صورتی که عملیات دوگانه load/store داشته باشیم ۸ خواهد بود. .IP \fB\-mno\-sdata\fR 4 .IX Item "-mno-sdata" ارجاعات sdata را تولید نمی‌کند. این مقدار پیش‌فرض برای زنجیره‌های ابزار ساخته‌شده برای اهداف \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR و \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR است. .IP \fB\-mvolatile\-cache\fR 4 .IX Item "-mvolatile-cache" برای ارجاعات فرار (volatile)، از دسترسی‌های حافظه به صورت کش‌شده‌ی معمولی استفاده می‌کند. این حالت پیش‌فرض است. .IP \fB\-mno\-volatile\-cache\fR 4 .IX Item "-mno-volatile-cache" دور زدن کش (cache bypass) را برای ارجاعات فرار فعال می‌کند. .PP گزینه‌های زیر تولید کد را دقیق‌تر تنظیم می‌کنند: .IP \fB\-malign\-call\fR 4 .IX Item "-malign-call" کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های قبلی حفظ شده است. .IP \fB\-mauto\-modify\-reg\fR 4 .IX Item "-mauto-modify-reg" استفاده از تغییر قبل/بعد (pre/post modify) را با جابه‌جایی ثبات فعال می‌کند. .IP \fB\-mbbit\-peephole\fR 4 .IX Item "-mbbit-peephole" کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های قبلی حفظ شده است. .IP \fB\-mno\-brcc\fR 4 .IX Item "-mno-brcc" این گزینه یک گذر (pass) ویژه هدف را در \fIarc_reorg\fR برای تولید دستورات مقایسه و انشعاب (\f(CW\*(C`br\fR\f(CIcc\fR\f(CW\*(C'\fR) غیرفعال می‌کند. این گزینه هیچ اثری بر تولید این دستورات توسط گذر ترکیب‌کننده (combiner pass) ندارد. .IP \fB\-mcase\-vector\-pcrel\fR 4 .IX Item "-mcase-vector-pcrel" از جدول‌های switch case نسبی به PC برای فعال‌سازی کوتاه‌سازی جدول case استفاده می‌کند. این حالت پیش‌فرض برای \fB\-Os\fR است. .IP \fB\-mcompact\-casesi\fR 4 .IX Item "-mcompact-casesi" الگوی فشرده \f(CW\*(C`casesi\*(C'\fR را فعال می‌کند. این حالت پیش‌فرض برای \fB\-Os\fR است، و فقط برای هسته‌های ARCv1 در دسترس است. این گزینه منسوخ شده است. .IP \fB\-mno\-cond\-exec\fR 4 .IX Item "-mno-cond-exec" گذر ویژه ARCompact را برای تولید دستورات اجرای شرطی غیرفعال می‌کند. .Sp به‌دلیل زمان‌بندی شکاف تاخیر (delay slot) و برهم‌کنش میان تعداد عملوندها، اندازه مقادیر ثابت، طول دستورات و پشتیبانی از اجرای شرطی، گذر مستقل از هدف برای تولید اجرای شرطی معمولاً ناکافی است؛ بنابراین پورت ARC یک گذر اختصاصی را حفظ کرده است که پس از انجام تخصیص ثبات، کوتاه‌سازی انشعاب و زمان‌بندی شکاف تاخیر، تلاش می‌کند فرصت‌های بیشتری برای تولید اجرای شرطی بیابد. این گذر معمولاً، اما نه همیشه، کارایی و اندازه کد را به بهای زمان کامپایل بیشتر بهبود می‌بخشد، که دلیل وجود گزینه‌ای برای خاموش کردن آن همین است. اگر با دستورات فراخوانی که به دلیل شرطی شدن از محدوده آفست مجاز خود فراتر می‌روند مشکل دارید، باید به جای آن استفاده از \&\fB\-mmedium\-calls\fR را در نظر بگیرید. .IP \fB\-mearly\-cbranchsi\fR 4 .IX Item "-mearly-cbranchsi" استفاده از الگوی \f(CW\*(C`cbranchsi\*(C'\fR پیش از مرحله reload را فعال می‌کند. .IP \fB\-mexpand\-adddi\fR 4 .IX Item "-mexpand-adddi" دستورات \f(CW\*(C`adddi3\*(C'\fR و \f(CW\*(C`subdi3\*(C'\fR را در زمان تولید RTL به \&\f(CW\*(C`add.f\*(C'\fR، \f(CW\*(C`adc\*(C'\fR و غیره بسط می‌دهد. این گزینه منسوخ شده است. .IP \fB\-mindexed\-loads\fR 4 .IX Item "-mindexed-loads" استفاده از بارگذاری‌های نمایه‌دار (indexed loads) را فعال می‌کند. این امر می‌تواند مشکل‌ساز باشد زیرا برخی بهینه‌سازها فرض می‌کنند که ذخیره‌سازی‌های نمایه‌دار (indexed stores) نیز وجود دارند، در حالی که چنین نیست. .IP \fB\-mlra\fR 4 .IX Item "-mlra" کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های قبلی حفظ شده است. .IP \fB\-mlra\-priority\-none\fR 4 .IX Item "-mlra-priority-none" هیچ اولویتی برای ثبات‌های هدف مشخص نمی‌کند. .IP \fB\-mlra\-priority\-compact\fR 4 .IX Item "-mlra-priority-compact" اولویت ثبات‌های هدف را برای r0..r3 / r12..r15 مشخص می‌کند. .IP \fB\-mlra\-priority\-noncompact\fR 4 .IX Item "-mlra-priority-noncompact" اولویت ثبات‌های هدف را برای r0..r3 / r12..r15 کاهش می‌دهد. .IP \fB\-mmillicode\fR 4 .IX Item "-mmillicode" هنگام بهینه‌سازی برای اندازه (با استفاده از \fB\-Os\fR)، پیش‌درآمدها (prologues) و پس‌درآمدها (epilogues) که باید تعداد زیادی ثبات را ذخیره یا بازیابی کنند، اغلب با استفاده از فراخوانی یک تابع ویژه در libgcc کوتاه می‌شوند؛ این فراخوانی با عنوان فراخوانی \fImillicode\fR شناخته می‌شود. از آنجا که این فراخوانی‌ها می‌توانند مسائلی در زمینه کارایی ایجاد کنند، یا هنگام پیوند زدن به شیوه‌ای غیر استاندارد باعث بروز مشکلاتی در پیونددهی شوند، این گزینه برای روشن یا خاموش کردن تولید فراخوانی millicode ارائه شده است. .IP \fB\-mcode\-density\-frame\fR 4 .IX Item "-mcode-density-frame" این گزینه کامپایلر را قادر می‌سازد تا دستورات \f(CW\*(C`enter\*(C'\fR و \f(CW\*(C`leave\*(C'\fR را صادر کند. این دستورات فقط برای پردازنده‌های دارای قابلیت code\-density معتبر هستند. .IP \fB\-mmixed\-code\fR 4 .IX Item "-mmixed-code" کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های قبلی حفظ شده است. .IP \fB\-mq\-class\fR 4 .IX Item "-mq-class" این گزینه منسوخ شده است. گزینه‌های جایگزین دستور \fBq\fR را فعال می‌کند. این حالت پیش‌فرض برای \fB\-Os\fR است. .IP \fB\-mRcq\fR 4 .IX Item "-mRcq" کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های قبلی حفظ شده است. .IP \fB\-mRcw\fR 4 .IX Item "-mRcw" کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های قبلی حفظ شده است. .IP \fB\-msize\-level=\fR\fIlevel\fR 4 .IX Item "-msize-level=level" بهینه‌سازی اندازه را با توجه به طول دستورالعمل‌ها و هم‌ترازی (alignment) دقیق‌تر تنظیم می‌کند. مقادیر شناخته‌شده برای \fIlevel\fR عبارتند از: .RS 4 .IP \fB0\fR 4 .IX Item "0" بدون بهینه‌سازی اندازه. این سطح منسوخ شده و مانند \fB1\fR با آن رفتار می‌شود. .IP \fB1\fR 4 .IX Item "1" از دستورالعمل‌های کوتاه به صورت فرصت‌طلبانه استفاده می‌شود. .IP \fB2\fR 4 .IX Item "2" علاوه بر این، هم‌ترازی حلقه‌ها و کدِ پس از سدها (barriers) نادیده گرفته می‌شود. .IP \fB3\fR 4 .IX Item "3" علاوه بر این، هم‌ترازی اختیاری داده‌ها نادیده گرفته شده و گزینه \fBOs\fR فعال می‌شود. .RE .RS 4 .Sp هنگامی که \fB\-Os\fR برقرار باشد، این گزینه به‌طور پیش‌فرض \fB3\fR است. در غیر این صورت، رفتار در صورت تنظیم نشدن معادل سطح \fB1\fR خواهد بود. .RE .IP \fB\-mtune=\fR\fIcpu\fR 4 .IX Item "-mtune=cpu" پارامترهای زمان‌بندی دستورالعمل را برای \fIcpu\fR تنظیم می‌کند، و هر موردی را که توسط \fB\-mcpu=\fR به صورت ضمنی تعیین شده است لغو و بازنویسی می‌کند. .Sp مقادیر پشتیبانی‌شده برای \fIcpu\fR عبارتند از: .RS 4 .IP \fBARC600\fR 4 .IX Item "ARC600" تنظیم برای پردازنده ARC600. .IP \fBARC601\fR 4 .IX Item "ARC601" تنظیم برای پردازنده ARC601. .IP \fBARC700\fR 4 .IX Item "ARC700" تنظیم برای پردازنده ARC700 با بلوک ضرب‌کننده استاندارد. .IP \fBARC700\-xmac\fR 4 .IX Item "ARC700-xmac" تنظیم برای پردازنده ARC700 با بلوک XMAC. .IP \fBARC725D\fR 4 .IX Item "ARC725D" تنظیم برای پردازنده ARC725D. .IP \fBARC750D\fR 4 .IX Item "ARC750D" تنظیم برای پردازنده ARC750D. .IP \fBcore3\fR 4 .IX Item "core3" تنظیم برای پردازنده نوع core3 در ARCv2. این گزینه استفاده از دستور \&\f(CW\*(C`dbnz\*(C'\fR را فعال می‌کند. .IP \fBrelease31a\fR 4 .IX Item "release31a" تنظیم برای ARC4x نگارش 3.10a. .RE .RS 4 .RE.IP \fB\-mmultcost=\fR\fInum\fR 4 .IX Item "-mmultcost=num" هزینه‌ای که برای یک دستورالعمل ضرب در نظر گرفته می‌شود، به طوری که مقدار \fB4\fR برابر با یک دستورالعمل معمولی است. .IP \fB\-munalign\-prob\-threshold=\fR\fIprobability\fR 4 .IX Item "-munalign-prob-threshold=probability" کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های پیشین حفظ شده است. .PP گزینه‌های زیر برای سازگاری با نسخه‌های پیشین نگه‌داشته شده‌اند، اما اکنون منسوخ شده‌اند و در نسخه‌های آینده حذف خواهند شد: .IP \fB\-margonaut\fR 4 .IX Item "-margonaut" واحد FPX منسوخ‌شده. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" .PD 0 .IP \fB\-EB\fR 4 .IX Item "-EB" .PD کامپایل کد برای مقصدهای big\-endian. استفاده از این گزینه‌ها اکنون منسوخ شده است. کد big\-endian با پیکربندی GCC برای ساخت مقصدهای \&\f(CW\*(C`arceb\-elf32\*(C'\fR و \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR که در آن‌ها big endian پیش‌فرض است، پشتیبانی می‌شود. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" .PD 0 .IP \fB\-EL\fR 4 .IX Item "-EL" .PD کامپایل کد برای مقصدهای little\-endian. استفاده از این گزینه‌ها اکنون منسوخ شده است. کد little\-endian با پیکربندی GCC برای ساخت مقصدهای \&\f(CW\*(C`arc\-elf32\*(C'\fR و \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR که در آن‌ها little endian پیش‌فرض است، پشتیبانی می‌شود. .IP \fB\-mbarrel_shifter\fR 4 .IX Item "-mbarrel_shifter" با \fB\-mbarrel\-shifter\fR جایگزین شده است. .IP \fB\-mdpfp_compact\fR 4 .IX Item "-mdpfp_compact" با \fB\-mdpfp\-compact\fR جایگزین شده است. .IP \fB\-mdpfp_fast\fR 4 .IX Item "-mdpfp_fast" با \fB\-mdpfp\-fast\fR جایگزین شده است. .IP \fB\-mdsp_packa\fR 4 .IX Item "-mdsp_packa" با \fB\-mdsp\-packa\fR جایگزین شده است. .IP \fB\-mEA\fR 4 .IX Item "-mEA" با \fB\-mea\fR جایگزین شده است. .IP \fB\-mmac_24\fR 4 .IX Item "-mmac_24" با \fB\-mmac\-24\fR جایگزین شده است. .IP \fB\-mmac_d16\fR 4 .IX Item "-mmac_d16" با \fB\-mmac\-d16\fR جایگزین شده است. .IP \fB\-mspfp_compact\fR 4 .IX Item "-mspfp_compact" با \fB\-mspfp\-compact\fR جایگزین شده است. .IP \fB\-mspfp_fast\fR 4 .IX Item "-mspfp_fast" با \fB\-mspfp\-fast\fR جایگزین شده است. .IP \fB\-mtune=\fR\fIcpu\fR 4 .IX Item "-mtune=cpu" مقادیر \fBarc600\fR، \fBarc601\fR، \fBarc700\fR و \&\fBarc700\-xmac\fR برای \fIcpu\fR به ترتیب با \fBARC600\fR، \&\fBARC601\fR، \fBARC700\fR و \fBARC700\-xmac\fR جایگزین شده‌اند. .IP \fB\-multcost=\fR\fInum\fR 4 .IX Item "-multcost=num" با \fB\-mmultcost\fR جایگزین شده است. .PP \fIگزینه‌های ARM\fR .IX Subsection "ARM Options" .PP این گزینه‌های \fB\-m\fR برای پورت ARM تعریف شده‌اند: .IP \fB\-mabi=\fR\fIname\fR 4 .IX Item "-mabi=name" تولید کد برای ABI مشخص‌شده. مقادیر مجاز عبارت‌اند از: \fBapcs\-gnu\fR، \&\fBatpcs\fR، \fBaapcs\fR، \fBaapcs\-linux\fR و \fBiwmmxt\fR. .IP \fB\-mapcs\-frame\fR 4 .IX Item "-mapcs-frame" تولید یک فریم پشته (stack frame) منطبق با استاندارد فراخوانی رویه ARM برای همه توابع، حتی اگر این کار برای اجرای صحیح کد کاملاً ضروری نباشد. مشخص کردن \fB\-fomit\-frame\-pointer\fR همراه با این گزینه باعث می‌شود که فریم پشته برای توابع برگ (leaf) تولید نشود. مقدار پیش‌فرض \fB\-mno\-apcs\-frame\fR است. این گزینه منسوخ شده است. .IP \fB\-mapcs\fR 4 .IX Item "-mapcs" این گزینه مترادفی برای \fB\-mapcs\-frame\fR است و منسوخ شده است. .IP \fB\-mthumb\-interwork\fR 4 .IX Item "-mthumb-interwork" تولید کدی که از فراخوانی متقابل بین مجموعه‌های دستورالعمل ARM و Thumb پشتیبانی می‌کند. بدون این گزینه، در معماری‌های پیش از نسخه ۵ (pre\-v5)، نمی‌توان با اطمینان از هر دو مجموعه دستورالعمل درون یک برنامه استفاده کرد. مقدار پیش‌فرض \fB\-mno\-thumb\-interwork\fR است، چرا که در صورت تعیین \fB\-mthumb\-interwork\fR کدی با حجم اندکی بیشتر تولید می‌شود. در پیکربندی‌های AAPCS این گزینه بی‌اثر است. .IP \fB\-mno\-sched\-prolog\fR 4 .IX Item "-mno-sched-prolog" جلوگیری از بازآرایی دستورالعمل‌ها در پیش‌درآمد تابع (prologue)، یا ادغام آن دستورالعمل‌ها با دستورالعمل‌های بدنه تابع. این بدان معناست که همه توابع با مجموعه‌ای قابل تشخیص از دستورالعمل‌ها شروع می‌شوند (یا در واقع با انتخابی از یک مجموعه کوچک از پیش‌درآمدهای مختلف توابع)، و می‌توان از این اطلاعات برای تعیین محل آغاز توابع درون یک قطعه کد اجرایی استفاده کرد. مقدار پیش‌فرض \fB\-msched\-prolog\fR است. .IP \fB\-mfloat\-abi=\fR\fIname\fR 4 .IX Item "-mfloat-abi=name" مشخص می‌کند که از کدام ABI ممیز شناور (floating\-point) استفاده شود. مقادیر مجاز عبارت‌اند از: \fBsoft\fR، \fBsoftfp\fR و \fBhard\fR. .Sp تعیین \fBsoft\fR باعث می‌شود GCC خروجی‌ای تولید کند که حاوی فراخوانی‌های کتابخانه‌ای برای عملیات ممیز شناور است. \&\fBsoftfp\fR اجازه تولید کد با استفاده از دستورالعمل‌های سخت‌افزاری ممیز شناور را می‌دهد، اما همچنان از قراردادهای فراخوانی soft\-float استفاده می‌کند. \&\fBhard\fR امکان تولید دستورالعمل‌های ممیز شناور را فراهم ساخته و از قراردادهای فراخوانی مخصوص FPU استفاده می‌کند. .Sp مقدار پیش‌فرض به پیکربندی خاص معماری مقصد بستگی دارد. توجه داشته باشید که ABIهای hard\-float و soft\-float از نظر پیونددهی (link) با یکدیگر سازگار نیستند؛ شما باید تمام برنامه خود را با یک ABI یکسان کامپایل کرده و با مجموعه‌ای سازگار از کتابخانه‌ها پیوند دهید. .IP \fB\-mgeneral\-regs\-only\fR 4 .IX Item "-mgeneral-regs-only" تولید کدی که تنها از ثبات‌های همه‌منظوره استفاده می‌کند. این گزینه مانع از استفاده کامپایلر از ثبات‌های ممیز شناور و Advanced SIMD می‌شود، اما هیچ محدودیتی بر اسمبلر اعمال نمی‌کند. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد برای پردازنده‌ای که در حالت little\-endian اجرا می‌شود. این مقدار پیش‌فرض برای تمام پیکربندی‌های استاندارد است. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد برای پردازنده‌ای که در حالت big\-endian اجرا می‌شود؛ پیش‌فرض این است که کد برای یک پردازنده little\-endian کامپایل شود. .IP \fB\-mbe8\fR 4 .IX Item "-mbe8" .PD 0 .IP \fB\-mbe32\fR 4 .IX Item "-mbe32" .PD هنگام پیوند دادن یک ایمیج big\-endian، قالب را بین BE8 و BE32 انتخاب می‌کند. این گزینه روی ایمیج‌های little\-endian بی‌تأثیر بوده و نادیده گرفته می‌شود. مقدار پیش‌فرض به معماری مقصد انتخاب‌شده بستگی دارد. برای معماری‌های ARMv6 و جدیدتر مقدار پیش‌فرض BE8 است، و برای معماری‌های قدیمی‌تر مقدار پیش‌فرض BE32 است. قالب BE32 توسط ARM منسوخ شده است. .IP \fB\-march=\fR\fIname\fR[\fB+extension...\fR] 4 .IX Item "-march=name[+extension...]" این گزینه نام معماری ARM مقصد را مشخص می‌کند. GCC از این نام برای تعیین نوع دستورالعمل‌هایی که می‌تواند هنگام تولید کد اسمبلی ایجاد کند، استفاده می‌کند. این گزینه می‌تواند در کنار یا به جای گزینه \fB\-mcpu=\fR به کار رود. .Sp نام‌های مجاز عبارت‌اند از: \&\fBarmv4t\fR، \&\fBarmv5t\fR، \fBarmv5te\fR، \&\fBarmv6\fR، \fBarmv6j\fR، \fBarmv6k\fR، \fBarmv6kz\fR، \fBarmv6t2\fR، \&\fBarmv6z\fR، \fBarmv6zk\fR، \&\fBarmv7\fR، \fBarmv7\-a\fR، \fBarmv7ve\fR، \&\fBarmv8\-a\fR، \fBarmv8.1\-a\fR، \fBarmv8.2\-a\fR، \fBarmv8.3\-a\fR، \&\fBarmv8.4\-a\fR، \&\fBarmv8.5\-a\fR، \&\fBarmv8.6\-a\fR، \&\fBarmv9\-a\fR، \&\fBarmv7\-r\fR، \&\fBarmv8\-r\fR، \&\fBarmv6\-m\fR، \fBarmv6s\-m\fR، \&\fBarmv7\-m\fR، \fBarmv7e\-m\fR، \&\fBarmv8\-m.base\fR، \fBarmv8\-m.main\fR، \&\fBarmv8.1\-m.main\fR، \&\fBiwmmxt\fR و \fBiwmmxt2\fR. .Sp علاوه بر این، معماری‌های زیر که فاقد پشتیبانی از حالت اجرای Thumb هستند شناسایی می‌شوند، اما پشتیبانی از آن‌ها منسوخ شده است: \fBarmv4\fR. .Sp بسیاری از معماری‌ها از افزونه‌ها پشتیبانی می‌کنند. این موارد را می‌توان با افزودن \fB+\fR\fIextension\fR به انتهای نام معماری مشخص کرد. گزینه‌های مربوط به افزونه به ترتیب پردازش می‌شوند و قابلیت‌ها انباشته می‌گردند. یک افزونه همچنین هر افزونه پایه لازمی را که به آن وابسته است فعال می‌کند. برای مثال، افزونه \fB+crypto\fR همواره افزونه \fB+simd\fR را فعال خواهد کرد. تنها استثنا در این قاعده افزایشی، افزونه‌هایی هستند که دارای پیشوند \&\fB+no...\fR می‌باشند: این افزونه‌ها گزینه مشخص‌شده و هر افزونه دیگری را که ممکن است به حضور آن افزونه وابسته باشد غیرفعال می‌کنند. .Sp برای مثال، \fB\-march=armv7\-a+simd+nofp+vfpv4\fR معادل با نوشتن \fB\-march=armv7\-a+vfpv4\fR است، زیرا گزینه \fB+simd\fR کاملاً توسط گزینه بعدی یعنی \fB+nofp\fR غیرفعال می‌شود. .Sp بیشتر نام‌های افزونه‌ها به صورت عمومی نام‌گذاری شده‌اند، اما اثری متناسب با معماری اعمال‌شده دارند. برای نمونه، گزینه \fB+simd\fR می‌تواند هم برای معماری \fBarmv7\-a\fR و هم برای معماری‌های \&\fBarmv8\-a\fR به کار رود، اما افزونه‌های اصلی Advanced SIMD (Neon) معماری ARMv7\-A را برای \fBarmv7\-a\fR و گونه متناسب با ARMv8\-A را برای \fBarmv8\-a\fR فعال می‌کند. .Sp جدول زیر افزونه‌های پشتیبانی‌شده برای هر معماری را فهرست می‌کند. معماری‌هایی که نام برده نشده‌اند از هیچ افزونه‌ای پشتیبانی نمی‌کنند. .RS 4.IP \fBarmv5te\fR 4 .IX Item "armv5te" .PD 0 .IP \fBarmv6\fR 4 .IX Item "armv6" .IP \fBarmv6j\fR 4 .IX Item "armv6j" .IP \fBarmv6k\fR 4 .IX Item "armv6k" .IP \fBarmv6kz\fR 4 .IX Item "armv6kz" .IP \fBarmv6t2\fR 4 .IX Item "armv6t2" .IP \fBarmv6z\fR 4 .IX Item "armv6z" .IP \fBarmv6zk\fR 4 .IX Item "armv6zk" .RS 4 .IP \fB+fp\fR 4 .IX Item "+fp" .PD دستورالعمل‌های ممیز شناور VFPv2. از افزونه‌ی \fB+vfpv2\fR می‌توان به عنوان یک نام مستعار برای این افزونه استفاده کرد. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال کردن دستورالعمل‌های ممیز شناور. .RE .RS 4 .RE .IP \fBarmv7\fR 4 .IX Item "armv7" زیرمجموعه‌ی مشترک معماری‌های ARMv7\-A، ARMv7\-R و ARMv7\-M. .RS 4 .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور VFPv3، با ۱۶ ثبات دقت مضاعف (double\-precision). از افزونه‌ی \fB+vfpv3\-d16\fR می‌توان به عنوان یک نام مستعار برای این افزونه استفاده کرد. توجه داشته باشید که ممیز شناور توسط معماری پایه‌ی ARMv7\-M پشتیبانی نمی‌شود، اما با هر دو معماری ARMv7\-A و ARMv7\-R سازگار است. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال کردن دستورالعمل‌های ممیز شناور. .RE .RS 4 .RE .IP \fBarmv7\-a\fR 4 .IX Item "armv7-a" .RS 4 .PD 0 .IP \fB+mp\fR 4 .IX Item "+mp" .PD افزونه‌ی چندپردازشی (multiprocessing). .IP \fB+sec\fR 4 .IX Item "+sec" افزونه‌ی امنیتی (security). .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور VFPv3، با ۱۶ ثبات دقت مضاعف (double\-precision). از افزونه‌ی \fB+vfpv3\-d16\fR می‌توان به عنوان یک نام مستعار برای این افزونه استفاده کرد. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD (Neon) v1 و ممیز شناور VFPv3. از افزونه‌های \fB+neon\fR و \fB+neon\-vfpv3\fR می‌توان به عنوان نام‌های مستعار برای این افزونه استفاده کرد. .IP \fB+vfpv3\fR 4 .IX Item "+vfpv3" دستورالعمل‌های ممیز شناور VFPv3، با ۳۲ ثبات دقت مضاعف (double\-precision). .IP \fB+vfpv3\-d16\-fp16\fR 4 .IX Item "+vfpv3-d16-fp16" دستورالعمل‌های ممیز شناور VFPv3، با ۱۶ ثبات دقت مضاعف (double\-precision) و عملیات تبدیل ممیز شناور با نیمه‌دقت (half\-precision). .IP \fB+vfpv3\-fp16\fR 4 .IX Item "+vfpv3-fp16" دستورالعمل‌های ممیز شناور VFPv3، با ۳۲ ثبات دقت مضاعف (double\-precision) و عملیات تبدیل ممیز شناور با نیمه‌دقت (half\-precision). .IP \fB+vfpv4\-d16\fR 4 .IX Item "+vfpv4-d16" دستورالعمل‌های ممیز شناور VFPv4، با ۱۶ ثبات دقت مضاعف (double\-precision). .IP \fB+vfpv4\fR 4 .IX Item "+vfpv4" دستورالعمل‌های ممیز شناور VFPv4، با ۳۲ ثبات دقت مضاعف (double\-precision). .IP \fB+neon\-fp16\fR 4 .IX Item "+neon-fp16" دستورالعمل‌های Advanced SIMD (Neon) v1 و ممیز شناور VFPv3، همراه با عملیات تبدیل ممیز شناور با نیمه‌دقت (half\-precision). .IP \fB+neon\-vfpv4\fR 4 .IX Item "+neon-vfpv4" دستورالعمل‌های Advanced SIMD (Neon) v2 و ممیز شناور VFPv4. .IP \fB+nosimd\fR 4 .IX Item "+nosimd" غیرفعال کردن دستورالعمل‌های Advanced SIMD (دستورالعمل‌های ممیز شناور را غیرفعال نمی‌کند). .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال کردن دستورالعمل‌های ممیز شناور و Advanced SIMD. .RE .RS 4 .RE .IP \fBarmv7ve\fR 4 .IX Item "armv7ve" نسخه‌ی گسترش‌یافته‌ی معماری ARMv7\-A با پشتیبانی از مجازی‌سازی (virtualization). .RS 4 .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور VFPv4، با ۱۶ ثبات دقت مضاعف (double\-precision). از افزونه‌ی \fB+vfpv4\-d16\fR می‌توان به عنوان یک نام مستعار برای این افزونه استفاده کرد. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD (Neon) v2 و ممیز شناور VFPv4. از افزونه‌ی \fB+neon\-vfpv4\fR می‌توان به عنوان یک نام مستعار برای این افزونه استفاده کرد. .IP \fB+vfpv3\-d16\fR 4 .IX Item "+vfpv3-d16" دستورالعمل‌های ممیز شناور VFPv3، با ۱۶ ثبات دقت مضاعف (double\-precision). .IP \fB+vfpv3\fR 4 .IX Item "+vfpv3" دستورالعمل‌های ممیز شناور VFPv3، با ۳۲ ثبات دقت مضاعف (double\-precision). .IP \fB+vfpv3\-d16\-fp16\fR 4 .IX Item "+vfpv3-d16-fp16" دستورالعمل‌های ممیز شناور VFPv3، با ۱۶ ثبات دقت مضاعف (double\-precision) و عملیات تبدیل ممیز شناور با نیمه‌دقت (half\-precision). .IP \fB+vfpv3\-fp16\fR 4 .IX Item "+vfpv3-fp16" دستورالعمل‌های ممیز شناور VFPv3، با ۳۲ ثبات دقت مضاعف (double\-precision) و عملیات تبدیل ممیز شناور با نیمه‌دقت (half\-precision). .IP \fB+vfpv4\-d16\fR 4 .IX Item "+vfpv4-d16" دستورالعمل‌های ممیز شناور VFPv4، با ۱۶ ثبات دقت مضاعف (double\-precision). .IP \fB+vfpv4\fR 4 .IX Item "+vfpv4" دستورالعمل‌های ممیز شناور VFPv4، با ۳۲ ثبات دقت مضاعف (double\-precision). .IP \fB+neon\fR 4 .IX Item "+neon" دستورالعمل‌های Advanced SIMD (Neon) v1 و ممیز شناور VFPv3. از افزونه‌ی \fB+neon\-vfpv3\fR می‌توان به عنوان یک نام مستعار برای این افزونه استفاده کرد. .IP \fB+neon\-fp16\fR 4 .IX Item "+neon-fp16" دستورالعمل‌های Advanced SIMD (Neon) v1 و ممیز شناور VFPv3، همراه با عملیات تبدیل ممیز شناور با نیمه‌دقت (half\-precision). .IP \fB+nosimd\fR 4 .IX Item "+nosimd" غیرفعال کردن دستورالعمل‌های Advanced SIMD (دستورالعمل‌های ممیز شناور را غیرفعال نمی‌کند). .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال کردن دستورالعمل‌های ممیز شناور و Advanced SIMD. .RE .RS 4 .RE .IP \fBarmv8\-a\fR 4 .IX Item "armv8-a" .RS 4 .PD 0 .IP \fB+crc\fR 4 .IX Item "+crc" .PD دستورالعمل‌های بررسی افزونگی چرخه‌ای (CRC). .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور در ARMv8\-A. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری (cryptographic). .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" غیرفعال کردن دستورالعمل‌های رمزنگاری. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال کردن دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری. .IP \fB+sb\fR 4 .IX Item "+sb" دستورالعمل سد اجرای حدسی (Speculation Barrier Instruction)..IP \fB+predres\fR 4 .IX Item "+predres" دستورالعمل‌های محدودسازی پیش‌بینی اجرا و داده. .RE .RS 4 .RE .IP \fBarmv8.1\-a\fR 4 .IX Item "armv8.1-a" .RS 4 .PD 0 .IP \fB+simd\fR 4 .IX Item "+simd" .PD دستورالعمل‌های Advanced SIMD و ممیز شناور ARMv8.1\-A. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" غیرفعال‌سازی دستورالعمل‌های رمزنگاری. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال‌سازی دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری. .IP \fB+sb\fR 4 .IX Item "+sb" دستورالعمل حائل حدس‌وگمان (Speculation Barrier). .IP \fB+predres\fR 4 .IX Item "+predres" دستورالعمل‌های محدودسازی پیش‌بینی اجرا و داده. .RE .RS 4 .RE .IP \fBarmv8.2\-a\fR 4 .IX Item "armv8.2-a" .PD 0 .IP \fBarmv8.3\-a\fR 4 .IX Item "armv8.3-a" .RS 4 .IP \fB+fp16\fR 4 .IX Item "+fp16" .PD دستورالعمل‌های پردازش داده‌های ممیز شناور با دقت نیمه. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+fp16fml\fR 4 .IX Item "+fp16fml" افزونهٔ fmla ممیز شناور با دقت نیمه. این گزینه همچنین افزونهٔ ممیز شناور با دقت نیمه و دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور ARMv8.1\-A. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+dotprod\fR 4 .IX Item "+dotprod" فعال‌سازی افزونهٔ ضرب داخلی (Dot Product). این گزینه همچنین دستورالعمل‌های Advanced SIMD را فعال می‌کند. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" غیرفعال‌سازی افزونهٔ رمزنگاری. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال‌سازی دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری. .IP \fB+sb\fR 4 .IX Item "+sb" دستورالعمل حائل حدس‌وگمان (Speculation Barrier). .IP \fB+predres\fR 4 .IX Item "+predres" دستورالعمل‌های محدودسازی پیش‌بینی اجرا و داده. .IP \fB+i8mm\fR 4 .IX Item "+i8mm" دستورالعمل‌های ضرب ماتریسی اعداد صحیح ۸ بیتی. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+bf16\fR 4 .IX Item "+bf16" دستورالعمل‌های ممیز شناور با دقت نیمهٔ Brain. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8.4\-a\fR 4 .IX Item "armv8.4-a" .RS 4 .PD 0 .IP \fB+fp16\fR 4 .IX Item "+fp16" .PD دستورالعمل‌های پردازش داده‌های ممیز شناور با دقت نیمه. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور، و نیز افزونهٔ ضرب داخلی (Dot Product) و افزونهٔ fmla ممیز شناور با دقت نیمه را فعال می‌کند. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور ARMv8.3\-A و همچنین افزونهٔ ضرب داخلی (Dot Product). .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور، و نیز افزونهٔ ضرب داخلی (Dot Product) را فعال می‌کند. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" غیرفعال‌سازی افزونهٔ رمزنگاری. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال‌سازی دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری. .IP \fB+sb\fR 4 .IX Item "+sb" دستورالعمل حائل حدس‌وگمان (Speculation Barrier). .IP \fB+predres\fR 4 .IX Item "+predres" دستورالعمل‌های محدودسازی پیش‌بینی اجرا و داده. .IP \fB+i8mm\fR 4 .IX Item "+i8mm" دستورالعمل‌های ضرب ماتریسی اعداد صحیح ۸ بیتی. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+bf16\fR 4 .IX Item "+bf16" دستورالعمل‌های ممیز شناور با دقت نیمهٔ Brain. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8.5\-a\fR 4 .IX Item "armv8.5-a" .RS 4 .PD 0 .IP \fB+fp16\fR 4 .IX Item "+fp16" .PD دستورالعمل‌های پردازش داده‌های ممیز شناور با دقت نیمه. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور، و نیز افزونهٔ ضرب داخلی (Dot Product) و افزونهٔ fmla ممیز شناور با دقت نیمه را فعال می‌کند. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور ARMv8.3\-A و همچنین افزونهٔ ضرب داخلی (Dot Product). .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور، و نیز افزونهٔ ضرب داخلی (Dot Product) را فعال می‌کند. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" غیرفعال‌سازی افزونهٔ رمزنگاری. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال‌سازی دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری. .IP \fB+i8mm\fR 4 .IX Item "+i8mm" دستورالعمل‌های ضرب ماتریسی اعداد صحیح ۸ بیتی. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+bf16\fR 4 .IX Item "+bf16" دستورالعمل‌های ممیز شناور با دقت نیمهٔ Brain. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8.6\-a\fR 4 .IX Item "armv8.6-a" .RS 4 .PD 0 .IP \fB+fp16\fR 4 .IX Item "+fp16" .PD دستورالعمل‌های پردازش داده‌های ممیز شناور با دقت نیمه. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور، و نیز افزونهٔ ضرب داخلی (Dot Product) و افزونهٔ fmla ممیز شناور با دقت نیمه را فعال می‌کند. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور ARMv8.3\-A و همچنین افزونهٔ ضرب داخلی (Dot Product). .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور، و نیز افزونهٔ ضرب داخلی (Dot Product) را فعال می‌کند. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" غیرفعال‌سازی افزونهٔ رمزنگاری..IP \fB+nofp\fR 4 .IX Item "+nofp" دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری را غیرفعال می‌کند. .IP \fB+i8mm\fR 4 .IX Item "+i8mm" دستورالعمل‌های ضرب ماتریسی عدد صحیح ۸ بیتی. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+bf16\fR 4 .IX Item "+bf16" دستورالعمل‌های ممیز شناور با دقت نیمه Brain. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv7\-r\fR 4 .IX Item "armv7-r" .RS 4 .PD 0 .IP \fB+fp.sp\fR 4 .IX Item "+fp.sp" .PD دستورالعمل‌های ممیز شناور VFPv3 با دقت تکی. افزونهٔ \&\fB+vfpv3xd\fR می‌تواند به عنوان یک نام مستعار برای این افزونه استفاده شود. .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور VFPv3 با ۱۶ ثبات با دقت مضاعف. افزونهٔ +vfpv3\-d16 می‌تواند به عنوان یک نام مستعار برای این افزونه استفاده شود. .IP \fB+vfpv3xd\-d16\-fp16\fR 4 .IX Item "+vfpv3xd-d16-fp16" دستورالعمل‌های ممیز شناور VFPv3 با دقت تکی همراه با ۱۶ ثبات با دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه. .IP \fB+vfpv3\-d16\-fp16\fR 4 .IX Item "+vfpv3-d16-fp16" دستورالعمل‌های ممیز شناور VFPv3 با ۱۶ ثبات با دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه. .IP \fB+nofp\fR 4 .IX Item "+nofp" افزونهٔ ممیز شناور را غیرفعال می‌کند. .IP \fB+idiv\fR 4 .IX Item "+idiv" دستورالعمل‌های تقسیم عدد صحیح در حالت ARM. .IP \fB+noidiv\fR 4 .IX Item "+noidiv" افزونهٔ تقسیم عدد صحیح در حالت ARM را غیرفعال می‌کند. .RE .RS 4 .RE .IP \fBarmv7e\-m\fR 4 .IX Item "armv7e-m" .RS 4 .PD 0 .IP \fB+fp\fR 4 .IX Item "+fp" .PD دستورالعمل‌های ممیز شناور VFPv4 با دقت تکی. .IP \fB+fpv5\fR 4 .IX Item "+fpv5" دستورالعمل‌های ممیز شناور FPv5 با دقت تکی. .IP \fB+fp.dp\fR 4 .IX Item "+fp.dp" دستورالعمل‌های ممیز شناور FPv5 با دقت تکی و مضاعف. .IP \fB+nofp\fR 4 .IX Item "+nofp" افزونه‌های ممیز شناور را غیرفعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8.1\-m.main\fR 4 .IX Item "armv8.1-m.main" .RS 4 .PD 0 .IP \fB+dsp\fR 4 .IX Item "+dsp" .PD دستورالعمل‌های DSP. .IP \fB+mve\fR 4 .IX Item "+mve" دستورالعمل‌های عدد صحیح افزونهٔ برداری نمایهٔ M ‏(MVE). .IP \fB+mve.fp\fR 4 .IX Item "+mve.fp" دستورالعمل‌های عدد صحیح و ممیز شناور با دقت تکی افزونهٔ برداری نمایهٔ M ‏(MVE). .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور با دقت تکی. .IP \fB+fp.dp\fR 4 .IX Item "+fp.dp" دستورالعمل‌های ممیز شناور با دقت تکی و مضاعف. .IP \fB+nofp\fR 4 .IX Item "+nofp" افزونهٔ ممیز شناور را غیرفعال می‌کند. .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4 .IX Item "+cdecp0, +cdecp1, ... , +cdecp7" افزونهٔ مسیر دادهٔ سفارشی (CDE) را روی کمک‌پردازنده‌های انتخاب‌شده بر پایهٔ شماره‌های داده‌شده در گزینه‌ها در بازهٔ 0 تا 7 فعال می‌کند. .IP \fB+pacbti\fR 4 .IX Item "+pacbti" افزونهٔ احراز هویت اشاره‌گر و شناسایی هدف شاخه (PACBTI) را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8\-m.main\fR 4 .IX Item "armv8-m.main" .RS 4 .PD 0 .IP \fB+dsp\fR 4 .IX Item "+dsp" .PD دستورالعمل‌های DSP. .IP \fB+nodsp\fR 4 .IX Item "+nodsp" افزونهٔ DSP را غیرفعال می‌کند. .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور با دقت تکی. .IP \fB+fp.dp\fR 4 .IX Item "+fp.dp" دستورالعمل‌های ممیز شناور با دقت تکی و مضاعف. .IP \fB+nofp\fR 4 .IX Item "+nofp" افزونهٔ ممیز شناور را غیرفعال می‌کند. .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4 .IX Item "+cdecp0, +cdecp1, ... , +cdecp7" افزونهٔ مسیر دادهٔ سفارشی (CDE) را روی کمک‌پردازنده‌های انتخاب‌شده بر پایهٔ شماره‌های داده‌شده در گزینه‌ها در بازهٔ 0 تا 7 فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8\-r\fR 4 .IX Item "armv8-r" .RS 4 .PD 0 .IP \fB+crc\fR 4 .IX Item "+crc" .PD دستورالعمل‌های بررسی افزونگی چرخشی (CRC). .IP \fB+fp.sp\fR 4 .IX Item "+fp.sp" دستورالعمل‌های ممیز شناور FPv5 با دقت تکی. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور ARMv8\-A. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" دستورالعمل‌های رمزنگاری را غیرفعال می‌کند. .IP \fB+nofp\fR 4 .IX Item "+nofp" دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری را غیرفعال می‌کند. .RE .RS 4 .RE .RE .RS 4 .Sp گزینهٔ \&\fB\-march=native\fR باعث می‌شود کامپایلر معماری رایانهٔ ساخت را به‌طور خودکار تشخیص دهد. در حال حاضر، این قابلیت تنها روی GNU/Linux پشتیبانی می‌شود و همهٔ معماری‌ها شناسایی نمی‌شوند. اگر تشخیص خودکار ناموفق باشد، این گزینه هیچ تأثیری نخواهد داشت. .Sp گزینهٔ \&\fB\-march=unset\fR باعث می‌شود کامپایلر هرگونه گزینهٔ \&\fB\-march=...\fR را که پیش‌تر در خط فرمان آمده است نادیده بگیرد و به گونه‌ای رفتار کند که گویی این گزینه هرگز داده نشده است. این ویژگی برای جلوگیری از هشدارهای مربوط به تداخل میان گزینه‌های CPU و معماری، در شرایطی که این دو مشخصات معماری متفاوتی تولید می‌کنند، مفید است. .RE .IP \fB\-mtune=\fR\fIname\fR 4 .IX Item "-mtune=name" این گزینه نام پردازندهٔ هدف ARM را مشخص می‌کند که GCC باید کارایی کد را برای آن بهینه‌سازی (tune) کند. برای برخی از پیاده‌سازی‌های ARM، می‌توان با استفاده از این گزینه به کارایی بهتری دست یافت. نام‌های مجاز عبارتند از: \fBarm7tdmi\fR، \fBarm7tdmi\-s\fR، \fBarm710t\fR، \&\fBarm720t\fR، \fBarm740t\fR، \fBstrongarm\fR، \fBstrongarm110\fR، \&\fBstrongarm1100\fR، \fBstrongarm1110\fR، \fBarm8\fR، \fBarm810\fR، \&\fBarm9\fR، \fBarm9e\fR، \fBarm920\fR، \fBarm920t\fR، \fBarm922t\fR، \&\fBarm946e\-s\fR، \fBarm966e\-s\fR، \fBarm968e\-s\fR، \fBarm926ej\-s\fR، \&\fBarm940t\fR، \fBarm9tdmi\fR، \fBarm10tdmi\fR، \fBarm1020t\fR، \&\fBarm1026ej\-s\fR، \fBarm10e\fR، \fBarm1020e\fR، \fBarm1022e\fR، \&\fBarm1136j\-s\fR، \fBarm1136jf\-s\fR، \fBmpcore\fR، \fBmpcorenovfp\fR، \&\fBarm1156t2\-s\fR، \fBarm1156t2f\-s\fR، \fBarm1176jz\-s\fR، \fBarm1176jzf\-s\fR، \&\fBgeneric\-armv7\-a\fR، \fBcortex\-a5\fR، \fBcortex\-a7\fR، \fBcortex\-a8\fR، \&\fBcortex\-a9\fR، \fBcortex\-a12\fR، \fBcortex\-a15\fR، \fBcortex\-a17\fR، \&\fBcortex\-a32\fR، \fBcortex\-a35\fR، \fBcortex\-a53\fR، \fBcortex\-a55\fR، \&\fBcortex\-a57\fR، \fBcortex\-a72\fR، \fBcortex\-a73\fR، \fBcortex\-a75\fR، \&\fBcortex\-a76\fR، \fBcortex\-a76ae\fR، \fBcortex\-a77\fR، \&\fBcortex\-a78\fR، \fBcortex\-a78ae\fR، \fBcortex\-a78c\fR، \fBcortex\-a710\fR، \&\fBares\fR، \fBcortex\-r4\fR، \fBcortex\-r4f\fR، \fBcortex\-r5\fR، \&\fBcortex\-r7\fR، \fBcortex\-r8\fR، \fBcortex\-r52\fR، \fBcortex\-r52plus\fR، \&\fBcortex\-m0\fR، \fBcortex\-m0plus\fR، \fBcortex\-m1\fR، \fBcortex\-m3\fR، \&\fBcortex\-m4\fR، \fBcortex\-m7\fR، \fBcortex\-m23\fR، \fBcortex\-m33\fR، \&\fBcortex\-m35p\fR، \fBcortex\-m52\fR، \fBcortex\-m55\fR، \fBcortex\-m85\fR، \fBcortex\-x1\fR، \&\fBcortex\-x1c\fR، \fBcortex\-m1.small\-multiply\fR، \fBcortex\-m0.small\-multiply\fR، \&\fBcortex\-m0plus.small\-multiply\fR، \fBexynos\-m1\fR، \fBmarvell\-pj4\fR، \&\fBneoverse\-n1\fR، \fBneoverse\-n2\fR، \fBneoverse\-v1\fR، \fBxscale\fR، \&\fBiwmmxt\fR، \fBiwmmxt2\fR، \fBep9312\fR، \fBfa526\fR، \fBfa626\fR، \&\fBfa606te\fR، \fBfa626te\fR، \fBfmp626\fR، \fBfa726te\fR، \fBstar\-mc1\fR، \&\fBxgene1\fR. .Sp علاوه بر این، این گزینه می‌تواند مشخص کند که GCC باید کارایی کد را برای یک سامانهٔ big.LITTLE بهینه‌سازی کند. نام‌های مجاز عبارتند از: \&\fBcortex\-a15.cortex\-a7\fR، \&\fBcortex\-a17.cortex\-a7\fR، \&\fBcortex\-a57.cortex\-a53\fR، \&\fBcortex\-a72.cortex\-a53\fR، \&\fBcortex\-a72.cortex\-a35\fR، \&\fBcortex\-a73.cortex\-a53\fR، \&\fBcortex\-a75.cortex\-a55\fR، \&\fBcortex\-a76.cortex\-a55\fR. .Sp گزینهٔ \&\fB\-mtune=generic\-\fR\fIarch\fR مشخص می‌کند که GCC باید کارایی را برای ترکیبی از پردازنده‌های درون معماری \fIarch\fR بهینه‌سازی کند. هدف، تولید کدی است که روی رایج‌ترین پردازنده‌های کنونی به خوبی اجرا شود، به طوری که تعادلی میان بهینه‌سازی‌های سودمند برای برخی از CPUها در این محدوده و اجتناب از تله‌های کارایی سایر پردازنده‌ها ایجاد شود. اثرات این گزینه ممکن است در نسخه‌های آیندهٔ GCC با ظهور و کنار رفتن مدل‌های CPU تغییر کند. .Sp گزینهٔ \&\fB\-mtune\fR همان گزینه‌های افزونهٔ مجاز در \fB\-mcpu\fR را می‌پذیرد، اما این گزینه‌های افزونه تأثیری بر تنظیم کارایی کد تولیدشده ندارند. .Sp گزینهٔ \&\fB\-mtune=native\fR باعث می‌شود کامپایلر CPU رایانهٔ ساخت را به‌طور خودکار تشخیص دهد. در حال حاضر، این قابلیت تنها روی GNU/Linux پشتیبانی می‌شود و همهٔ معماری‌ها شناسایی نمی‌شوند. اگر تشخیص خودکار ناموفق باشد، این گزینه هیچ تأثیری نخواهد داشت..IP \fB\-mcpu=\fR\fIname\fR[\fB+extension...\fR] 4 .IX Item "-mcpu=name[+extension...]" این گزینه نام پردازندهٔ ARM مقصد را مشخص می‌کند. GCC از این نام برای استخراج نام معماری ARM مقصد (همانند وقتی که با \fB\-march\fR مشخص شده باشد) و نوع پردازندهٔ ARM جهت بهینه‌سازی کارایی (همانند وقتی که با \fB\-mtune\fR مشخص شده باشد) استفاده می‌کند. در صورتی که این گزینه همراه با \fB\-march\fR یا \fB\-mtune\fR به کار رود، آن گزینه‌ها بر بخش مربوطه از این گزینه اولویت دارند. .Sp بسیاری از پردازنده‌های پشتیبانی‌شده، افزونه‌های معماری اختیاری را پیاده‌سازی می‌کنند. در این حالت، افزونه‌های معماری معمولاً به صورت پیش‌فرض فعال هستند. اگر پیاده‌سازی‌هایی وجود داشته باشند که فاقد این افزونه‌ها باشند، می‌توان از نحو افزونه‌ها برای غیرفعال کردن مواردی که حذف شده‌اند استفاده کرد. برای دستورالعمل‌های ممیز شناور (floating\-point) و Advanced SIMD (Neon)، تنظیمات گزینه‌های \&\fB\-mfloat\-abi\fR و \fB\-mfpu\fR نیز باید در نظر گرفته شوند: دستورالعمل‌های ممیز شناور و Advanced SIMD تنها در صورتی استفاده خواهند شد که \&\fB\-mfloat\-abi\fR روی \fBsoft\fR تنظیم نشده باشد؛ و هر تنظیمی از \&\fB\-mfpu\fR به‌جز \fBauto\fR، دستورالعمل‌های افزونهٔ ممیز شناور و SIMD در دسترس را بازنویسی (override) خواهد کرد. .Sp برای مثال، \fBcortex\-a9\fR را می‌توان در سه پیکربندی اصلی یافت: فقط اعداد صحیح (integer only)، فقط با یک واحد ممیز شناور، یا با ممیز شناور و Advanced SIMD. حالت پیش‌فرض فعال‌سازی همهٔ دستورالعمل‌ها است، اما افزونه‌های \fB+nosimd\fR و \fB+nofp\fR می‌توانند به ترتیب برای غیرفعال کردن تنها SIMD یا هر دوی دستورالعمل‌های SIMD و ممیز شناور استفاده شوند. .Sp نام‌های مجاز برای این گزینه مشابه نام‌های مجاز برای \&\fB\-mtune\fR هستند. .Sp گزینه‌های افزونهٔ زیر میان پردازنده‌های فهرست‌شده مشترک هستند: .RS 4 .IP \fB+nodsp\fR 4 .IX Item "+nodsp" دستورالعمل‌های DSP را در \fBcortex\-m33\fR، \fBcortex\-m35p\fR، \&\fBcortex\-m52\fR، \fBcortex\-m55\fR و \fBcortex\-m85\fR غیرفعال می‌کند. همچنین دستورالعمل‌های اعداد صحیح و ممیز شناور با دقت یگانه مربوط به افزونهٔ برداری مشخصهٔ M (MVE یا M\-Profile Vector Extension) را در \&\fBcortex\-m52\fR، \fBcortex\-m55\fR و \fBcortex\-m85\fR غیرفعال می‌کند. .IP \fB+nopacbti\fR 4 .IX Item "+nopacbti" افزونهٔ احراز هویت اشاره‌گر و شناسایی مقصد پرش (Pointer Authentication and Branch Target Identification Extension) را در \fBcortex\-m52\fR و \fBcortex\-m85\fR غیرفعال می‌کند. .IP \fB+nomve\fR 4 .IX Item "+nomve" دستورالعمل‌های اعداد صحیح و ممیز شناور با دقت یگانه مربوط به افزونهٔ برداری مشخصهٔ M (MVE) را در \fBcortex\-m52\fR، \fBcortex\-m55\fR و \&\fBcortex\-m85\fR غیرفعال می‌کند. .IP \fB+nomve.fp\fR 4 .IX Item "+nomve.fp" دستورالعمل‌های ممیز شناور با دقت یگانهٔ افزونهٔ برداری مشخصهٔ M (MVE) را در \fBcortex\-m52\fR، \fBcortex\-m55\fR و \fBcortex\-m85\fR غیرفعال می‌کند. .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4 .IX Item "+cdecp0, +cdecp1, ... , +cdecp7" افزونهٔ مسیر دادهٔ سفارشی (CDE یا Custom Datapath Extension) را روی هم‌پردارنده‌های (coprocessors) انتخاب‌شده طبق شماره‌های ارائه‌شده در گزینه‌ها در بازهٔ ۰ تا ۷ روی \fBcortex\-m52\fR، \&\fBcortex\-m55\fR و \fBstar\-mc1\fR فعال می‌کند. .IP \fB+nofp\fR 4 .IX Item "+nofp" دستورالعمل‌های ممیز شناور را در \fBarm9e\fR، \&\fBarm946e\-s\fR، \fBarm966e\-s\fR، \fBarm968e\-s\fR، \fBarm10e\fR، \&\fBarm1020e\fR، \fBarm1022e\fR، \fBarm926ej\-s\fR، \&\fBarm1026ej\-s\fR، \fBcortex\-r5\fR، \fBcortex\-r7\fR، \fBcortex\-r8\fR، \&\fBcortex\-m4\fR، \fBcortex\-m7\fR، \fBcortex\-m33\fR، \fBcortex\-m35p\fR، \&\fBcortex\-m52\fR، \fBcortex\-m55\fR و \fBcortex\-m85\fR غیرفعال می‌کند. دستورالعمل‌های ممیز شناور و SIMD را در \&\fBgeneric\-armv7\-a\fR، \fBcortex\-a5\fR، \fBcortex\-a7\fR، \&\fBcortex\-a8\fR، \fBcortex\-a9\fR، \fBcortex\-a12\fR، \&\fBcortex\-a15\fR، \fBcortex\-a17\fR، \fBcortex\-a15.cortex\-a7\fR، \&\fBcortex\-a17.cortex\-a7\fR، \fBcortex\-a32\fR، \fBcortex\-a35\fR، \&\fBcortex\-a53\fR و \fBcortex\-a55\fR غیرفعال می‌کند. .IP \fB+nofp.dp\fR 4 .IX Item "+nofp.dp" بخش دقت دوگانهٔ (double\-precision) دستورالعمل‌های ممیز شناور را در \fBcortex\-r5\fR، \fBcortex\-r7\fR، \fBcortex\-r8\fR، \fBcortex\-r52\fR، \&\fBcortex\-r52plus\fR و \fBcortex\-m7\fR غیرفعال می‌کند. .IP \fB+nosimd\fR 4 .IX Item "+nosimd" دستورالعمل‌های SIMD (اما نه ممیز شناور) را در \&\fBgeneric\-armv7\-a\fR، \fBcortex\-a5\fR، \fBcortex\-a7\fR و \fBcortex\-a9\fR غیرفعال می‌کند. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری را در \fBcortex\-a32\fR، \&\fBcortex\-a35\fR، \fBcortex\-a53\fR، \fBcortex\-a55\fR، \fBcortex\-a57\fR، \&\fBcortex\-a72\fR، \fBcortex\-a73\fR، \fBcortex\-a75\fR، \fBexynos\-m1\fR، \&\fBxgene1\fR، \fBcortex\-a57.cortex\-a53\fR، \fBcortex\-a72.cortex\-a53\fR، \&\fBcortex\-a73.cortex\-a35\fR، \fBcortex\-a73.cortex\-a53\fR و \&\fBcortex\-a75.cortex\-a55\fR فعال می‌کند. .RE .RS 4 .Sp علاوه بر این، شبه‌مقصد \fBgeneric\-armv7\-a\fR به صورت پیش‌فرض روی VFPv3 با ۱۶ ثبات با دقت دوگانه تنظیم شده است. این شبه‌مقصد از گزینه‌های افزونهٔ زیر پشتیبانی می‌کند: \fBmp\fR، \fBsec\fR، \fBvfpv3\-d16\fR، \&\fBvfpv3\fR، \fBvfpv3\-d16\-fp16\fR، \fBvfpv3\-fp16\fR، \&\fBvfpv4\-d16\fR، \fBvfpv4\fR، \fBneon\fR، \fBneon\-vfpv3\fR، \&\fBneon\-fp16\fR، \fBneon\-vfpv4\fR. معانی آن‌ها مشابه افزونه‌های \fB\-march=armv7\-a\fR است. .Sp گزینهٔ \&\fB\-mcpu=generic\-\fR\fIarch\fR نیز مجاز است و معادل \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR می‌باشد. برای اطلاعات بیشتر \fB\-mtune\fR را ببینید. .Sp گزینهٔ \&\fB\-mcpu=native\fR باعث می‌شود کامپایلر CPU رایانهٔ ساخت را به‌طور خودکار شناسایی کند. در حال حاضر، این قابلیت تنها در GNU/Linux پشتیبانی می‌شود و همهٔ معماری‌ها شناسایی نمی‌شوند. در صورت ناموفق بودن تشخیص خودکار، این گزینه هیچ اثری نخواهد داشت. .Sp گزینهٔ \&\fB\-mcpu=unset\fR باعث می‌شود کامپایلر هرگونه گزینهٔ \&\fB\-mcpu=...\fR که پیش‌تر در خط فرمان آمده است را نادیده بگیرد و به گونه‌ای رفتار کند که گویی این گزینه هرگز ارسال نشده است. این مورد برای جلوگیری از هشدارهای مربوط به تداخل گزینه‌های CPU و معماری، زمانی که هر دو مشخصات معماری متفاوتی تولید می‌کنند، مفید است. .RE .IP \fB\-mfpu=\fR\fIname\fR 4 .IX Item "-mfpu=name" این گزینه مشخص می‌کند چه سخت‌افزار ممیز شناوری (یا شبیه‌ساز سخت‌افزاری) روی مقصد در دسترس است. نام‌های مجاز عبارتند از: \fBauto\fR، \fBvfpv2\fR، \&\fBvfpv3\fR، \&\fBvfpv3\-fp16\fR، \fBvfpv3\-d16\fR، \fBvfpv3\-d16\-fp16\fR، \fBvfpv3xd\fR، \&\fBvfpv3xd\-fp16\fR، \fBneon\-vfpv3\fR، \fBneon\-fp16\fR، \fBvfpv4\fR، \&\fBvfpv4\-d16\fR، \fBfpv4\-sp\-d16\fR، \fBneon\-vfpv4\fR، \&\fBfpv5\-d16\fR، \fBfpv5\-sp\-d16\fR، \&\fBfp\-armv8\fR، \fBneon\-fp\-armv8\fR و \fBcrypto\-neon\-fp\-armv8\fR. توجه داشته باشید که \fBneon\fR یک نام مستعار برای \fBneon\-vfpv3\fR و \fBvfp\fR یک نام مستعار برای \fBvfpv2\fR است. .Sp تنظیم \fBauto\fR پیش‌فرض بوده و خاص است. این تنظیم باعث می‌شود کامپایلر دستورالعمل‌های ممیز شناور و Advanced SIMD را بر اساس تنظیمات \fB\-mcpu\fR و \fB\-march\fR انتخاب کند. .Sp اگر سخت‌افزار ممیز شناورِ انتخاب‌شده شامل افزونهٔ NEON باشد (مانند \fB\-mfpu=neon\fR)، توجه داشته باشید که عملیات ممیز شناور توسط مرحلهٔ بردارسازی خودکار GCC تولید نمی‌شوند مگر اینکه \&\fB\-funsafe\-math\-optimizations\fR نیز مشخص شده باشد. دلیل این امر آن است که سخت‌افزار NEON استاندارد IEEE 754 را برای محاسبات ممیز شناور به طور کامل پیاده‌سازی نمی‌کند (به‌ویژه مقادیر غیرعادی یا denormal به عنوان صفر در نظر گرفته می‌شوند)، بنابراین استفاده از دستورالعمل‌های NEON ممکن است منجر به کاهش دقت شود. .Sp شما همچنین می‌توانید نام fpu را در سطح تابع با استفاده از صفت‌های تابع یا پراگماهای \f(CWtarget("fpu=")\fR تنظیم کنید. .IP \fB\-mfp16\-format=\fR\fIname\fR 4 .IX Item "-mfp16-format=name" قالب نوع ممیز شناور با نیم‌دقت (half\-precision) یعنی \f(CW\*(C`_\|_fp16\*(C'\fR را مشخص می‌کند. نام‌های مجاز عبارتند از \fBnone\fR، \fBieee\fR و \fBalternative\fR؛ مقدار پیش‌فرض \fBnone\fR است که در این حالت نوع \f(CW\*(C`_\|_fp16\*(C'\fR تعریف نشده است. .IP \fB\-mstructure\-size\-boundary=\fR\fIn\fR 4 .IX Item "-mstructure-size-boundary=n" اندازهٔ همهٔ ساختارها (structures) و اجتماع‌ها (unions) به مضربی از تعداد بیت‌های تعیین‌شده توسط این گزینه رو به بالا گرد می‌شود. مقادیر مجاز عبارتند از ۸، ۳۲ و ۶۴. مقدار پیش‌فرض برای زنجیره‌های ابزار مختلف، متفاوت است. برای زنجیرهٔ ابزاری که COFF را هدف قرار می‌دهد مقدار پیش‌فرض ۸ است. مقدار ۶۴ تنها در صورتی مجاز است که ABI زیربنایی از آن پشتیبانی کند. .Sp مشخص کردن عددی بزرگ‌تر می‌تواند کدی سریع‌تر و کارآمدتر تولید کند، اما ممکن است اندازهٔ برنامه را نیز افزایش دهد. مقادیر مختلف به طور بالقوه ناسازگار هستند. کدی که با یک مقدار کامپایل شده است، لزوماً نمی‌تواند انتظار داشته باشد با کد یا کتابخانه‌هایی که با مقدار دیگری کامپایل شده‌اند کار کند، در صورتی که آن‌ها اطلاعات را از طریق ساختارها یا اجتماع‌ها تبادل کنند. .Sp این گزینه منسوخ شده است (deprecated). .IP \fB\-mabort\-on\-noreturn\fR 4 .IX Item "-mabort-on-noreturn" یک فراخوانی به تابع \f(CW\*(C`abort\*(C'\fR در انتهای یک تابع \&\f(CW\*(C`noreturn\*(C'\fR تولید می‌کند. این فراخوانی در صورتی که تابع تلاش کند مقداری برگرداند یا بازگردد، اجرا می‌شود. .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" .PD 0 .IP \fB\-mno\-long\-calls\fR 4 .IX Item "-mno-long-calls" .PD به کامپایلر می‌گوید که فراخوانی‌های تابع را ابتدا با بارگذاری نشانی تابع در یک ثبات و سپس انجام یک فراخوانی زیرروال (subroutine call) روی این ثبات انجام دهد. این سوییچ زمانی لازم است که تابع مقصد خارج از محدودهٔ آدرس‌دهی ۶۴ مگابایتی نسخهٔ مبتنی بر آفست از دستورالعمل فراخوانی زیرروال قرار داشته باشد. .Sp حتی اگر این سوییچ فعال باشد، همهٔ فراخوانی‌های تابع به فراخوانی‌های طولانی (long calls) تبدیل نمی‌شوند. قاعدهٔ اکتشافی (heuristic) این است که توابع ایستا (static)، توابعی که دارای صفت \f(CW\*(C`short_call\*(C'\fR هستند، توابعی که در محدودهٔ یک رهنمود \f(CW\*(C`#pragma no_long_calls\*(C'\fR قرار دارند، و توابعی که تعاریف آن‌ها قبلاً در واحد ترجمهٔ جاری کامپایل شده است، به فراخوانی‌های طولانی تبدیل نمی‌شوند. استثنائات این قاعده عبارتند از تعاریف توابع ضعیف (weak)، توابع با صفت \f(CW\*(C`long_call\*(C'\fR یا صفت \f(CW\*(C`section\*(C'\fR، و توابعی که در دامنهٔ یک رهنمود \f(CW\*(C`#pragma long_calls\*(C'\fR هستند، که همواره به فراخوانی‌های طولانی تبدیل می‌شوند. .Sp این قابلیت به صورت پیش‌فرض فعال نیست. مشخص کردن \&\fB\-mno\-long\-calls\fR رفتار پیش‌فرض را بازمی‌گرداند، همان‌طور که قرار دادن فراخوانی‌های تابع در دامنهٔ یک رهنمود \f(CW\*(C`#pragma long_calls_off\*(C'\fR این کار را انجام می‌دهد. توجه داشته باشید این سوییچ‌ها هیچ تاثیری بر نحوهٔ تولید کد توسط کامپایلر برای مدیریت فراخوانی‌های تابع از طریق اشاره‌گرهای تابع ندارند..IP \fB\-msingle\-pic\-base\fR 4 .IX Item "-msingle-pic-base" با ثبات مورد استفاده برای آدرس‌دهی PIC به عنوان فقط‌خواندنی برخورد می‌کند، به جای این‌که آن را در مقدمه (prologue) هر تابع بارگذاری کند. سیستم زمان اجرا مسئول مقداردهی اولیهٔ این ثبات با یک مقدار مناسب پیش از شروع اجرا است. .IP \fB\-mpic\-register=\fR\fIreg\fR 4 .IX Item "-mpic-register=reg" ثبات مورد استفاده برای آدرس‌دهی PIC را مشخص می‌کند. برای حالت استاندارد پایهٔ PIC، پیش‌فرض هر ثبات مناسبی است که توسط کامپایلر تعیین شود. برای حالت پایهٔ تک‌PIC، در صورتی که هدف مبتنی بر EABI باشد یا بررسی پشته (stack-checking) فعال باشد، پیش‌فرض \&\fBR9\fR است؛ در غیر این صورت پیش‌فرض \fBR10\fR خواهد بود. .IP \fB\-mpic\-data\-is\-text\-relative\fR 4 .IX Item "-mpic-data-is-text-relative" فرض می‌کند که جابه‌جایی میان بخش‌های text و data در زمان پیوند ایستا (static link time) ثابت است. این امر اجازه می‌دهد تا از عملیات آدرس‌دهی نسبی به PC برای دسترسی به داده‌هایی که مشخص است در بخش داده قرار دارند استفاده شود. برای اهداف غیر VxWorks RTP، این گزینه به طور پیش‌فرض فعال است. هنگامی که روی چنین اهدافی غیرفعال شود، \fB\-msingle\-pic\-base\fR را به طور پیش‌فرض فعال خواهد کرد. .IP \fB\-mpoke\-function\-name\fR 4 .IX Item "-mpoke-function-name" نام هر تابع را مستقیماً پیش از مقدمهٔ تابع (function prologue)، در بخش text می‌نویسد. کد تولیدشده شبیه به این است: .Sp .Vb 9 \& t0 \& .ascii "arm_poke_function_name", 0 \& .align \& t1 \& .word 0xff000000 + (t1 \- t0) \& arm_poke_function_name \& mov ip, sp \& stmfd sp!, {fp, ip, lr, pc} \& sub fp, ip, #4 .Ve .Sp هنگام انجام ردگیری به عقب پشته (stack backtrace)، کد می‌تواند مقدار \&\f(CW\*(C`pc\*(C'\fR ذخیره‌شده در \f(CW\*(C`fp + 0\*(C'\fR را بازرسی کند. اگر تابع ردگیری سپس به مکان \f(CW\*(C`pc \- 12\*(C'\fR نگاه کند و ۸ بیت بالایی تنظیم شده باشند، درمی‌یابیم که یک نام تابع بلافاصله پیش از این مکان جاسازی شده است و طولی برابر با \f(CW\*(C`((pc[\-3]) & 0xff000000)\*(C'\fR دارد. .IP \fB\-mthumb\fR 4 .IX Item "-mthumb" .PD 0 .IP \fB\-marm\fR 4 .IX Item "-marm" .PD بین تولید کدی که در وضعیت‌های ARM و Thumb اجرا می‌شود، انتخاب می‌کند. پیش‌فرض در بیشتر پیکربندی‌ها تولید کدی است که در وضعیت ARM اجرا شود، اما این پیش‌فرض را می‌توان با پیکربندی GCC با استفاده از گزینهٔ پیکربندی \fB\-\-with\-mode=\fR\fIstate\fR تغییر داد. .Sp همچنین می‌توانید حالت ARM و Thumb را برای هر تابع با استفاده از مشخصه‌های تابع یا پراگماهای \f(CWtarget("thumb")\fR و \f(CWtarget("arm")\fR بازنویسی کنید. .IP \fB\-mflip\-thumb\fR 4 .IX Item "-mflip-thumb" حالت‌های ARM/Thumb را در توابع به صورت متناوب تغییر می‌دهد. این گزینه برای آزمون پسرفت (regression testing) تولید کد ترکیبی Thumb/ARM ارائه شده است و برای استفادهٔ عادی در کامپایل کد در نظر گرفته نشده است. .IP \fB\-mtpcs\-frame\fR 4 .IX Item "-mtpcs-frame" برای تمام توابع غیربرگ (non-leaf)، یک فریم پشته مطابق با استاندارد فراخوانی رویهٔ Thumb (Thumb Procedure Call Standard) تولید می‌کند. (تابع برگ تابعی است که هیچ تابع دیگری را فراخوانی نمی‌کند.) پیش‌فرض \fB\-mno\-tpcs\-frame\fR است. .IP \fB\-mtpcs\-leaf\-frame\fR 4 .IX Item "-mtpcs-leaf-frame" برای تمام توابع برگ (leaf)، یک فریم پشته مطابق با استاندارد فراخوانی رویهٔ Thumb تولید می‌کند. (تابع برگ تابعی است که هیچ تابع دیگری را فراخوانی نمی‌کند.) پیش‌فرض \fB\-mno\-apcs\-leaf\-frame\fR است. .IP \fB\-mcallee\-super\-interworking\fR 4 .IX Item "-mcallee-super-interworking" به تمامی توابع با دید بیرونی در فایل در حال کامپایل، یک سرآیند از مجموعه دستورالعمل ARM می‌دهد که پیش از اجرای بقیهٔ تابع به حالت Thumb تغییر وضعیت می‌دهد. این امکان را فراهم می‌آورد تا این توابع از کدهای non-interworking فراخوانی شوند. این گزینه در پیکربندی‌های AAPCS معتبر نیست زیرا interworking به طور پیش‌فرض فعال است. .IP \fB\-mcaller\-super\-interworking\fR 4 .IX Item "-mcaller-super-interworking" به فراخوانی‌ها از طریق اشاره‌گرهای تابع (شامل توابع مجازی) اجازه می‌دهد بدون در نظر گرفتن این‌که کد مقصد برای interworking کامپایل شده است یا خیر، به درستی اجرا شوند. در صورت فعال بودن این گزینه، هزینهٔ اجرای یک اشاره‌گر تابع اندکی بار اضافی دارد. این گزینه در پیکربندی‌های AAPCS معتبر نیست زیرا interworking به طور پیش‌فرض فعال است. .IP \fB\-mtp=\fR\fIname\fR 4 .IX Item "-mtp=name" مدل دسترسی را برای اشاره‌گر حافظه محلی نخ (thread local storage) مشخص می‌کند. مدل \&\fBsoft\fR فراخوانی‌هایی به \f(CW\*(C`_\|_aeabi_read_tp\*(C'\fR تولید می‌کند. مدل‌های پذیرفته‌شدهٔ دیگر \fBtpidrurw\fR، \fBtpidruro\fR و \fBtpidrprw\fR هستند که اشاره‌گر نخ را مستقیماً از ثبات سیستمی مربوطه واکشی می‌کنند (از معماری arm6k به بعد پشتیبانی می‌شود). این ثبات‌های سیستمی از طریق رابط کمک‌پردازندهٔ CP15 قابل دسترسی هستند و آرگومان \&\fBcp15\fR نیز به عنوان یک نام مستعار مناسب برای \fBtpidruro\fR پذیرفته می‌شود. آرگومان \fBauto\fR از بهترین روش موجود برای پردازندهٔ انتخاب‌شده استفاده می‌کند. تنظیم پیش‌فرض \fBauto\fR است. .IP \fB\-mtls\-dialect=\fR\fIdialect\fR 4 .IX Item "-mtls-dialect=dialect" گویش مورد استفاده برای دسترسی به حافظه محلی نخ را مشخص می‌کند. دو \&\fIdialect\fR پشتیبانی می‌شوند\-\-\-\fBgnu\fR و \fBgnu2\fR. گویش \&\fBgnu\fR طرح اصلی GNU را برای پشتیبانی از مدل‌های TLS پویای محلی و سراسری انتخاب می‌کند. گویش \fBgnu2\fR طرح توصیف‌کنندهٔ GNU را انتخاب می‌کند که کارایی بهتری برای کتابخانه‌های اشتراکی فراهم می‌سازد. طرح توصیف‌کنندهٔ GNU با طرح اصلی سازگار است، اما به پشتیبانی از سوی اسمبلر، پیونددهنده و کتابخانهٔ جدید نیاز دارد. مدل‌های TLS نوع Initial و local exec تحت تأثیر این گزینه قرار نمی‌گیرند و همیشه از طرح اصلی استفاده می‌کنند. .IP \fB\-mword\-relocations\fR 4 .IX Item "-mword-relocations" تنها بازنشانی‌های مطلق (absolute relocations) را روی مقادیر به اندازهٔ کلمه (یعنی R_ARM_ABS32) تولید می‌کند. این گزینه به طور پیش‌فرض روی اهدافی (uClinux، SymbianOS) که بارگذار زمان اجرا این محدودیت را اعمال می‌کند، و هنگامی که \fB\-fpic\fR یا \fB\-fPIC\fR مشخص شده باشد فعال است. این گزینه با \fB\-mslow\-flash\-data\fR تداخل دارد. .IP \fB\-mfix\-cortex\-m3\-ldrd\fR 4 .IX Item "-mfix-cortex-m3-ldrd" برخی هسته‌های Cortex\-M3 می‌توانند در هنگام استفاده از دستورالعمل‌های \f(CW\*(C`ldrd\*(C'\fR با ثبات‌های مقصد و پایهٔ هم‌پوشان، موجب خرابی داده‌ها شوند. این گزینه از تولید این دستورالعمل‌ها جلوگیری می‌کند. این گزینه به طور پیش‌فرض هنگامی که \&\fB\-mcpu=cortex\-m3\fR مشخص شده باشد، فعال است. .IP \fB\-mfix\-cortex\-a57\-aes\-1742098\fR 4 .IX Item "-mfix-cortex-a57-aes-1742098" .PD 0 .IP \fB\-mno\-fix\-cortex\-a57\-aes\-1742098\fR 4 .IX Item "-mno-fix-cortex-a57-aes-1742098" .IP \fB\-mfix\-cortex\-a72\-aes\-1655431\fR 4 .IX Item "-mfix-cortex-a72-aes-1655431" .IP \fB\-mno\-fix\-cortex\-a72\-aes\-1655431\fR 4 .IX Item "-mno-fix-cortex-a72-aes-1655431" .PD کاهش اثر (یا غیرفعال کردن آن برای) یک نقص فنی (erratum) در Cortex\-A57 و Cortex\-A72 را که بر دستورالعمل‌های رمزنگاری AES اثر می‌گذارد، فعال (یا غیرفعال) می‌کند. این گزینه به طور پیش‌فرض زمانی که هر یک از گزینه‌های \fB\-mcpu=cortex\-a57\fR یا \&\fB\-mcpu=cortex\-a72\fR مشخص شده باشند، فعال است. .IP \fB\-munaligned\-access\fR 4 .IX Item "-munaligned-access" .PD 0 .IP \fB\-mno\-unaligned\-access\fR 4 .IX Item "-mno-unaligned-access" .PD خواندن و نوشتن مقادیر ۱۶ و ۳۲ بیتی را از نشانی‌هایی که تراز ۱۶ یا ۳۲ بیتی ندارند فعال (یا غیرفعال) می‌کند. به طور پیش‌فرض دسترسی ناتراز برای تمام معماری‌های پیش از ARMv6، تمام ARMv6\-M و معماری‌های ARMv8\-M Baseline غیرفعال بوده و برای تمام معماری‌های دیگر فعال است. اگر دسترسی ناتراز فعال نباشد، دسترسی به کلمات در ساختارهای دادهٔ فشرده (packed) هر بار به صورت یک بایت انجام می‌شود. .Sp مشخصهٔ ARM با نام \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR در فایل شیء تولیدشده بسته به تنظیم این گزینه، روی true یا false تنظیم می‌شود. در صورت فعال بودن دسترسی ناتراز، نماد پیش‌پردازندهٔ \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR نیز تعریف می‌گردد. .IP \fB\-mneon\-for\-64bits\fR 4 .IX Item "-mneon-for-64bits" این گزینه منسوخ شده است و هیچ اثری ندارد. .IP \fB\-mslow\-flash\-data\fR 4 .IX Item "-mslow-flash-data" فرض می‌کند که بارگذاری داده از حافظهٔ فلش کندتر از واکشی دستورالعمل است. بنابراین برای کارایی بهتر، بارگذاری مقادیر لفظی (literal load) به حداقل می‌رسد. این گزینه تنها هنگام کامپایل برای ARMv7 M\-profile پشتیبانی می‌شود و به طور پیش‌فرض خاموش است. این گزینه با \fB\-mword\-relocations\fR تداخل دارد. .IP \fB\-masm\-syntax\-unified\fR 4 .IX Item "-masm-syntax-unified" فرض می‌کند که اسمبلر درون‌خطی از نحو unified asm استفاده می‌کند. پیش‌فرض در حال حاضر خاموش است که بر نحو تقسیم‌شده (divided syntax) دلالت دارد. این گزینه هیچ اثری روی Thumb2 ندارد. با این حال، ممکن است در نگارش‌های آیندهٔ GCC تغییر کند. نحو تقسیم‌شده باید منسوخ تلقی شود. .IP \fB\-mrestrict\-it\fR 4 .IX Item "-mrestrict-it" تولید بلوک‌های IT را محدود می‌کند تا با قوانین ARMv8\-A مطابقت داشته باشد. بلوک‌های IT تنها می‌توانند شامل یک دستورالعمل ۱۶ بیتی منفرد از مجموعه‌ای منتخب از دستورالعمل‌ها باشند. این گزینه به طور پیش‌فرض برای حالت Thumb در ARMv8\-A روشن است. .IP \fB\-mprint\-tune\-info\fR 4 .IX Item "-mprint-tune-info" اطلاعات تنظیم دقیق پردازنده را به صورت توضیح (کامنت) در فایل اسمبلر چاپ می‌کند. این گزینه تنها برای آزمون پسرفت کامپایلر استفاده می‌شود و برای استفادهٔ عادی در کامپایل کد در نظر گرفته نشده است. این گزینه به طور پیش‌فرض غیرفعال است. .IP \fB\-mverbose\-cost\-dump\fR 4 .IX Item "-mverbose-cost-dump" تخلیهٔ دقیق مدل هزینه را در فایل‌های تخلیهٔ اشکال‌زدایی فعال می‌کند. این گزینه برای استفاده در اشکال‌زدایی کامپایلر ارائه شده است..IP \fB\-mpure\-code\fR 4 .IX Item "-mpure-code" اجازه قرار گرفتن داده‌های ثابت در بخش‌های کد داده نمی‌شود. علاوه بر این، هنگام کامپایل برای قالب شیء ELF، به تمامی بخش‌های متنی (text sections) صفتِ بخشیِ مختص به پردازندهٔ ELF با عنوان \f(CW\*(C`SHF_ARM_PURECODE\*(C'\fR اختصاص داده می‌شود. این گزینه فقط هنگام تولید کد غیر\-PIC (non\-pic) برای مقصدهای M\-profile در دسترس است. .IP \fB\-mcmse\fR 4 .IX Item "-mcmse" تولید کد امن بر اساس «ARMv8\-M Security Extensions: Requirements on Development Tools Engineering Specification»، که می‌توان آن را در <\fBhttps://developer.arm.com/documentation/ecm0359818/latest\fR> یافت. .IP \fB\-mfix\-cmse\-cve\-2021\-35465\fR 4 .IX Item "-mfix-cmse-cve-2021-35465" کاهش اثر یک آسیب‌پذیری امنیتی احتمالی با دستورالعمل \f(CW\*(C`VLLDM\*(C'\fR در برخی دستگاه‌های M\-profile هنگام استفاده از CMSE (CVE\-2021\-365465). این گزینه به صورت پیش‌فرض زمانی که گزینهٔ \fB\-mcpu=\fR همراه با \&\f(CW\*(C`cortex\-m33\*(C'\fR، \f(CW\*(C`cortex\-m35p\*(C'\fR، \f(CW\*(C`cortex\-m52\*(C'\fR، \f(CW\*(C`cortex\-m55\*(C'\fR، \&\f(CW\*(C`cortex\-m85\*(C'\fR یا \f(CW\*(C`star\-mc1\*(C'\fR استفاده شود، فعال است. از گزینهٔ \fB\-mno\-fix\-cmse\-cve\-2021\-35465\fR می‌توان برای غیرفعال کردن این کاهش اثر استفاده کرد. .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4 .IX Item "-mstack-protector-guard=guard" .PD 0 .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4 .IX Item "-mstack-protector-guard-offset=offset" .PD تولید کد محافظت از پشته با استفاده از قناری (canary) در \fIguard\fR. مکان‌های پشتیبانی‌شده عبارتند از \fBglobal\fR برای یک قناری سراسری یا \fBtls\fR برای یک قناری قابل دسترسی از طریق ثبات TLS. گزینهٔ \&\fB\-mstack\-protector\-guard\-offset=\fR برای استفاده همراه با \&\fB\-fstack\-protector\-guard=tls\fR است و برای استفاده در کدهای فضای کاربری (user\-land) در نظر گرفته نشده است. .IP \fB\-mfdpic\fR 4 .IX Item "-mfdpic" .PD 0 .IP \fB\-mno\-fdpic\fR 4 .IX Item "-mno-fdpic" .PD انتخاب FDPIC ABI، که از توصیف‌کننده‌های تابع ۶۴ بیتی برای نمایش اشاره‌گرها به توابع استفاده می‌کند. هنگامی که کامپایلر برای مقصدهای \&\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR پیکربندی شده باشد، این گزینه به طور پیش‌فرض فعال است و در صورتی که هیچ‌یک از گزینه‌های مرتبط با PIC/PIE مشخص نشده باشند، متضمن \fB\-fPIE\fR خواهد بود. در سایر مقصدها، این گزینه تنها ویژگی‌های اختصاصی تولید کد FDPIC را فعال می‌کند و کاربر باید در صورت نیاز، گزینه‌های مرتبط با PIC/PIE را صراحتاً مشخص کند. .Sp توجه داشته باشید که پیوند ایستا پشتیبانی نمی‌شود، زیرا هنگام بازنشانیِ خودکار برنامه، همچنان پیونددهندهٔ پویا درگیر خواهد شد. اگر چنین رفتاری قابل قبول است، از گزینه‌های \-static و \-Wl,\-dynamic\-linker استفاده کنید. .Sp گزینهٔ متقابل \fB\-mno\-fdpic\fR برای ساخت هستهٔ لینوکس با استفاده از همان زنجیره ابزاری (\f(CW\*(C`arm\-*\-uclinuxfdpiceabi\*(C'\fR) که برای ساخت برنامه‌های کاربردی فضای کاربری استفاده شده است، مفید (و الزامی) است. .IP \fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB][+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR 4 .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf][+bti]|bti[+pac-ret[+leaf]]" فعال‌سازی ویژگی‌های محافظت از انشعاب (فقط armv8.1\-m.main). \&\fBnone\fR تولید کد بدون محافظت از انشعاب یا امضای نشانی بازگشت. \&\fBstandard[+\fR\fIleaf\fR\fB]\fR تولید کد با تمام ویژگی‌های محافظت از انشعابِ فعال‌شده در سطح استانداردشان. \&\fBpac\-ret[+\fR\fIleaf\fR\fB]\fR تولید کد با امضای نشانی بازگشت تنظیم‌شده روی سطح استاندارد آن، یعنی امضای تمام توابعی که نشانی بازگشت را در حافظه ذخیره می‌کنند. \&\fBleaf\fR هنگامی که امضای نشانی بازگشت فعال است، توابع برگ (leaf) را نیز حتی اگر نشانی بازگشت را در حافظه ننویسند، امضا می‌کند. +\fBbti\fR افزودن دستورالعمل‌های landing\-pad در مقصدهای مجاز دستورالعمل‌های انشعاب غیرمستقیم. .Sp اگر افزونهٔ معماری \fB+pacbti\fR فعال نباشد، آن‌گاه تمام عملیات‌های محافظت از انشعاب و امضای نشانی بازگشت محدود به استفاده از دستورالعمل‌هایی هستند که در فضای معادل NOP معماری تعریف شده‌اند. کد تولیدشده با نسخه‌های قبلی معماری سازگار رو به عقب باقی می‌ماند، اما امنیت تکمیلی می‌تواند در زمان اجرا روی پردازنده‌هایی که از افزونهٔ \fBPACBTI\fR پشتیبانی می‌کنند فعال شود. .Sp اعمال مقصد انشعاب با استفاده از BTI تنها در زمان اجرا قابل فعال‌سازی است اگر تمام کدهای برنامه دست‌کم با \&\fB\-mbranch\-protection=bti\fR کامپایل شده باشند. .Sp هر تنظیمی به جز \fBnone\fR تنها در armv8\-m.main یا بالاتر پشتیبانی می‌شود. .Sp حالت پیش‌فرض تولید کد بدون محافظت از انشعاب یا امضای نشانی بازگشت است. .PP \fIگزینه‌های AVR\fR .IX Subsection "AVR Options" .PP این گزینه‌ها برای پیاده‌سازی‌های AVR تعریف شده‌اند: .IP \fB\-mmcu=\fR\fImcu\fR 4 .IX Item "-mmcu=mcu" معماری مجموعه دستورالعمل (ISA) یا نوع قطعهٔ AVR را مشخص می‌کند. مقدار پیش‌فرض این گزینه \f(CW\*(C`avr2\*(C'\fR است. .Sp دستگاه‌ها و ISAهای AVR زیر پشتیبانی می‌شوند. \&\fIنکته:\fR پشتیبانی کامل از یک دستگاه شامل کد راه‌اندازی \f(CW\*(C`crt\fR\f(CImcu\fR\f(CW.o\*(C'\fR، یک سرآیند دستگاه \f(CW\*(C`avr/io*.h\*(C'\fR، یک کتابخانهٔ دستگاه \f(CW\*(C`lib\fR\f(CImcu\fR\f(CW.a\*(C'\fR و یک فایل مشخصات دستگاه (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR) با نام \&\f(CW\*(C`specs\-\fR\f(CImcu\fR\f(CW\*(C'\fR است. تنها مورد آخر بر اساس \f(CW\*(C`\fR\f(CImcu\fR\f(CW\*(C'\fRهای پشتیبانی‌شده در زیر توسط کامپایلر ارائه می‌شود. سایر موارد توسط AVR\-LibC (\f(CW\*(C`https://github.com/avrdudes/avr\-libc\*(C'\fR) یا از طریق فایل‌های \&\f(CW\*(C`atpack\*(C'\fR (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#atpack\*(C'\fR) از سوی سازندهٔ سخت‌افزار پشتیبانی می‌شوند. .RS 4 .ie n .IP """avr2""" 4 .el .IP \f(CWavr2\fR 4 .IX Item "avr2" دستگاه‌های «Classic» با حداکثر 8 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR, \f(CW\*(C`at90s2313\*(C'\fR, \f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR, \f(CW\*(C`at90s2343\*(C'\fR, \f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR, \f(CW\*(C`at90s4434\*(C'\fR, \f(CW\*(C`at90c8534\*(C'\fR, \f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR. .ie n .IP """avr25""" 4 .el .IP \f(CWavr25\fR 4 .IX Item "avr25" دستگاه‌های «Classic» با حداکثر 8 KiB حافظهٔ برنامه و دارای دستورالعمل \f(CW\*(C`MOVW\*(C'\fR. \&\fImcu\fR = \f(CW\*(C`attiny13\*(C'\fR, \f(CW\*(C`attiny13a\*(C'\fR, \f(CW\*(C`attiny24\*(C'\fR, \f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR, \f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR, \f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny441\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR, \f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR, \f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR, \f(CW\*(C`attiny88\*(C'\fR, \f(CW\*(C`attiny828\*(C'\fR, \f(CW\*(C`attiny841\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`ata5272\*(C'\fR, \f(CW\*(C`ata6616c\*(C'\fR, \f(CW\*(C`at86rf401\*(C'\fR. .ie n .IP """avr3""" 4 .el .IP \f(CWavr3\fR 4 .IX Item "avr3" دستگاه‌های «Classic» با 16 KiB تا 64 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`at76c711\*(C'\fR, \f(CW\*(C`at43usb355\*(C'\fR. .ie n .IP """avr31""" 4 .el .IP \f(CWavr31\fR 4 .IX Item "avr31" دستگاه‌های «Classic» با 128 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR. .ie n .IP """avr35""" 4 .el .IP \f(CWavr35\fR 4 .IX Item "avr35" دستگاه‌های «Classic» با 16 KiB تا 64 KiB حافظهٔ برنامه و دارای دستورالعمل \f(CW\*(C`MOVW\*(C'\fR. \&\fImcu\fR = \f(CW\*(C`attiny167\*(C'\fR, \f(CW\*(C`attiny1634\*(C'\fR, \f(CW\*(C`atmega8u2\*(C'\fR, \f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR, \f(CW\*(C`ata5505\*(C'\fR, \f(CW\*(C`ata6617c\*(C'\fR, \f(CW\*(C`ata664251\*(C'\fR, \f(CW\*(C`at90usb82\*(C'\fR, \f(CW\*(C`at90usb162\*(C'\fR. .ie n .IP """avr4""" 4 .el .IP \f(CWavr4\fR 4 .IX Item "avr4" دستگاه‌های «Enhanced» با حداکثر 8 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`atmega48\*(C'\fR, \f(CW\*(C`atmega48a\*(C'\fR, \f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega48pa\*(C'\fR, \f(CW\*(C`atmega48pb\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8a\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR, \f(CW\*(C`atmega88a\*(C'\fR, \f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR, \f(CW\*(C`atmega88pb\*(C'\fR, \f(CW\*(C`atmega8515\*(C'\fR, \f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`ata6285\*(C'\fR, \f(CW\*(C`ata6286\*(C'\fR, \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`ata6612c\*(C'\fR, \f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR, \f(CW\*(C`at90pwm3\*(C'\fR, \f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR. .ie n .IP """avr5""" 4 .el .IP \f(CWavr5\fR 4 .IX Item "avr5" دستگاه‌های «Enhanced» با 16 KiB تا 64 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega168pb\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega324pb\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega325pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega328pb\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64hve2\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega644rfr2\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5791\*(C'\fR, \f(CW\*(C`ata6613c\*(C'\fR, \f(CW\*(C`ata6614q\*(C'\fR, \f(CW\*(C`ata5782\*(C'\fR, \f(CW\*(C`ata5831\*(C'\fR, \f(CW\*(C`ata8210\*(C'\fR, \f(CW\*(C`ata8510\*(C'\fR, \f(CW\*(C`ata5787\*(C'\fR, \f(CW\*(C`ata5835\*(C'\fR, \f(CW\*(C`ata5700m322\*(C'\fR, \f(CW\*(C`ata5702m322\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR. .ie n .IP """avr51""" 4 .el .IP \f(CWavr51\fR 4 .IX Item "avr51" دستگاه‌های «Enhanced» با 128 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega128a\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR, \f(CW\*(C`atmega128rfr2\*(C'\fR, \f(CW\*(C`atmega1280\*(C'\fR, \f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR, \f(CW\*(C`atmega1284rfr2\*(C'\fR, \f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR, \f(CW\*(C`at90usb1287\*(C'\fR. .ie n .IP """avr6""" 4 .el .IP \f(CWavr6\fR 4 .IX Item "avr6" دستگاه‌های «Enhanced» با PC سه‌بایتی، یعنی با بیش از 128 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`atmega256rfr2\*(C'\fR, \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR, \f(CW\*(C`atmega2564rfr2\*(C'\fR. .ie n .IP """avrxmega2""" 4 .el .IP \f(CWavrxmega2\fR 4 .IX Item "avrxmega2" دستگاه‌های «XMEGA» با بیش از 8 KiB و تا حداکثر 64 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da28s\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da32s\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da48s\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64da64s\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR, \f(CW\*(C`avr64sd28\*(C'\fR, \f(CW\*(C`avr64sd32\*(C'\fR, \f(CW\*(C`avr64sd48\*(C'\fR. .ie n .IP """avrxmega3""" 4 .el .IP \f(CWavrxmega3\fR 4 .IX Item "avrxmega3" دستگاه‌های «XMEGA» با حداکثر 64 KiB مجموع حافظهٔ برنامه و RAM، و با حافظهٔ برنامهٔ قابل مشاهده در فضای نشانی RAM. \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da28s\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da32s\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32da48s\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR, \f(CW\*(C`avr32sd20\*(C'\fR, \f(CW\*(C`avr32sd28\*(C'\fR, \f(CW\*(C`avr32sd32\*(C'\fR. .ie n .IP """avrxmega4""" 4 .el .IP \f(CWavrxmega4\fR 4 .IX Item "avrxmega4" دستگاه‌های «XMEGA» با بیش از 64 KiB و تا حداکثر 128 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64a3u\*(C'\fR, \f(CW\*(C`atxmega64a4u\*(C'\fR, \f(CW\*(C`atxmega64b1\*(C'\fR, \f(CW\*(C`atxmega64b3\*(C'\fR, \f(CW\*(C`atxmega64c3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR, \f(CW\*(C`atxmega64d4\*(C'\fR, \f(CW\*(C`avr128da28\*(C'\fR, \f(CW\*(C`avr128da28s\*(C'\fR, \f(CW\*(C`avr128da32\*(C'\fR, \f(CW\*(C`avr128da32s\*(C'\fR, \f(CW\*(C`avr128da48\*(C'\fR, \f(CW\*(C`avr128da48s\*(C'\fR, \f(CW\*(C`avr128da64\*(C'\fR, \f(CW\*(C`avr128da64s\*(C'\fR, \f(CW\*(C`avr128db28\*(C'\fR, \f(CW\*(C`avr128db32\*(C'\fR, \f(CW\*(C`avr128db48\*(C'\fR, \f(CW\*(C`avr128db64\*(C'\fR. .ie n .IP """avrxmega5""" 4 .el .IP \f(CWavrxmega5\fR 4 .IX Item "avrxmega5" دستگاه‌های «XMEGA» با بیش از 64 KiB و تا حداکثر 128 KiB حافظهٔ برنامه و بیش از 64 KiB حافظهٔ RAM. \&\fImcu\fR = \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR. .ie n .IP """avrxmega6""" 4 .el .IP \f(CWavrxmega6\fR 4 .IX Item "avrxmega6" دستگاه‌های «XMEGA» با بیش از 128 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128a3u\*(C'\fR, \f(CW\*(C`atxmega128b1\*(C'\fR, \f(CW\*(C`atxmega128b3\*(C'\fR, \f(CW\*(C`atxmega128c3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR, \f(CW\*(C`atxmega128d4\*(C'\fR, \f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192a3u\*(C'\fR, \f(CW\*(C`atxmega192c3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR, \f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256a3u\*(C'\fR, \f(CW\*(C`atxmega256c3\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR, \f(CW\*(C`atxmega384c3\*(C'\fR, \f(CW\*(C`atxmega384d3\*(C'\fR. .ie n .IP """avrxmega7""" 4 .el .IP \f(CWavrxmega7\fR 4 .IX Item "avrxmega7" دستگاه‌های «XMEGA» با بیش از 128 KiB حافظهٔ برنامه و بیش از 64 KiB حافظهٔ RAM. \&\fImcu\fR = \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR, \f(CW\*(C`atxmega128a4u\*(C'\fR. .ie n .IP """avrtiny""" 4 .el .IP \f(CWavrtiny\fR 4 .IX Item "avrtiny" دستگاه‌های هستهٔ Tiny از نوع «Reduced Tiny» تنها با ۱۶ ثبات همه‌منظوره و 512 B تا 4 KiB حافظهٔ برنامه. \&\fImcu\fR = \f(CW\*(C`attiny4\*(C'\fR, \f(CW\*(C`attiny5\*(C'\fR, \f(CW\*(C`attiny9\*(C'\fR, \f(CW\*(C`attiny10\*(C'\fR, \f(CW\*(C`attiny102\*(C'\fR, \f(CW\*(C`attiny104\*(C'\fR, \f(CW\*(C`attiny20\*(C'\fR, \f(CW\*(C`attiny40\*(C'\fR. .ie n .IP """avr1""" 4 .el .IP \f(CWavr1\fR 4 .IX Item "avr1" این ISA توسط هستهٔ کمینهٔ AVR پیاده‌سازی شده و فقط برای اسمبلر پشتیبانی می‌شود. \&\fImcu\fR = \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR, \f(CW\*(C`attiny15\*(C'\fR, \f(CW\*(C`attiny28\*(C'\fR, \f(CW\*(C`at90s1200\*(C'\fR. .RE .RS 4 .RE.IP \fB\-mabsdata\fR 4 .IX Item "-mabsdata" فرض می‌کند که تمام داده‌ها در حافظهٔ ایستا می‌توانند توسط دستورالعمل‌های LDS / STS قابل دسترسی باشند. این گزینه تنها روی دستگاه‌های تقلیل‌یافتهٔ Tiny مانند ATtiny40 اثر دارد. همچنین ویژگی متغیر \f(CW\*(C`absdata\*(C'\fR را در \&\fBAVR Variable Attributes,variable attribute\fR ببینید. .IP \fB\-mcvt\fR 4 .IX Item "-mcvt" از یک \fIجدول بردار فشرده (compact vector table)\fR استفاده می‌کند. برخی دستگاه‌ها از CVT با تنها چهار مدخل پشتیبانی می‌کنند: 0=Reset، 1=NMI، 2=Prio1 IRQ، 3=Prio0 IRQs. این گزینه کد راه‌اندازی را به جای \f(CW\*(C`crt\fR\f(CImcu\fR\f(CW.o\*(C'\fR معمول، از \f(CW\*(C`crt\fR\f(CImcu\fR\f(CW\-cvt.o\*(C'\fR پیوند می‌دهد. کد راه‌اندازی علاوه بر ارائه یک جدول بردار فشرده، بیت \&\f(CW\*(C`CPUINT_CTRLA.CPUINT_CVT\*(C'\fR را تنظیم خواهد کرد که CVT را روی دستگاه فعال می‌کند. .Sp هنگامی که نمی‌خواهید کد راه‌اندازی \f(CW\*(C`CPUINT_CTRLA.CPUINT_CVT\*(C'\fR را تنظیم کند، می‌توانید نماد \f(CW\*(C`_\|_init_cvt\*(C'\fR را تأمین کنید تا کد مربوطه دیگر از \f(CW\*(C`lib\fR\f(CImcu\fR\f(CW.a\*(C'\fR فراخوانده نشود. برای مثال، می‌توانید با \f(CW\*(C`\-Wl,\-\-defsym,_\|_init_cvt=0\*(C'\fR پیوند دهید. .Sp کد راه‌اندازی CVT از AVR\-LibC\ v2.3 در دسترس است (\f(CW\*(C`https://github.com/avrdudes/avr\-libc/issues/1010\*(C'\fR). .IP \fB\-mdouble=\fR\fIbits\fR 4 .IX Item "-mdouble=bits" .PD 0 .IP \fB\-mlong\-double=\fR\fIbits\fR 4 .IX Item "-mlong-double=bits" .PD اندازهٔ (بر حسب بیت) نوع‌های \f(CW\*(C`double\*(C'\fR یا \f(CW\*(C`long double\*(C'\fR را به ترتیب تعیین می‌کند. مقادیر ممکن برای \fIbits\fR برابر ۳۲ و ۶۴ هستند. اینکه آیا یک مقدار خاص برای \fIbits\fR مجاز است یا خیر، به گزینه‌های پیکربندی \f(CW\*(C`\-\-with\-double=\*(C'\fR و \f(CW\*(C`\-\-with\-long\-double=\*(C'\fR در configure بستگی دارد (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR)، و همین قاعده برای مقادیر پیش‌فرض گزینه‌ها نیز صدق می‌کند. .IP \fB\-mgas\-isr\-prologues\fR 4 .IX Item "-mgas-isr-prologues" روال‌های خدمت وقفه (ISRs) می‌توانند از شبه‌دستورالعمل \f(CW\*(C`_\|_gcc_isr\*(C'\fR که توسط GNU Binutils پشتیبانی می‌شود استفاده کنند. اگر این گزینه روشن باشد، این قابلیت همچنان می‌تواند برای تک‌تک ISRها با استفاده از ویژگی تابع \fBAVR Function Attributes,,\fR\f(CB\*(C`no_gccisr\*(C'\fR غیرفعال شود. این قابلیت چنانچه بهینه‌سازی روشن باشد به‌طور پیش‌فرض فعال است (اما نه با \fB\-Og\fR، \f(CW@pxref\fR{Optimize Options})، و در صورتی که GNU Binutils از PR21683 پشتیبانی کند (\f(CW\*(C`https://sourceware.org/PR21683\*(C'\fR). .IP \fB\-mint8\fR 4 .IX Item "-mint8" نوع \f(CW\*(C`int\*(C'\fR را یک عدد صحیح ۸ بیتی فرض می‌کند. این امر بر اندازهٔ تمام انواع داده تأثیر می‌گذارد: یک \&\f(CW\*(C`char\*(C'\fR برابر با ۱ بایت، یک \f(CW\*(C`int\*(C'\fR برابر با ۱ بایت، یک \f(CW\*(C`long\*(C'\fR برابر با ۲ بایت، و یک \f(CW\*(C`long long\*(C'\fR برابر با ۴ بایت است. لطفاً توجه داشته باشید که این گزینه با استانداردهای C مطابقت ندارد، اما منجر به کاهش اندازهٔ کد می‌شود. .IP \fB\-mmain\-is\-OS_task\fR 4 .IX Item "-mmain-is-OS_task" ثبات‌ها را در \f(CW\*(C`main\*(C'\fR ذخیره نمی‌کند. اثر آن مشابه الصاق ویژگی \&\fBAVR Function Attributes,,\fR\f(CB\*(C`OS_task\*(C'\fR به \f(CW\*(C`main\*(C'\fR است. در صورت روشن بودن بهینه‌سازی، این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-mno\-call\-main\fR 4 .IX Item "-mno-call-main" تابع \f(CW\*(C`main\*(C'\fR را با دستورهای زیر اجرا نمی‌کند: .Sp .Vb 2 \& XCALL main \& XJMP exit .Ve .Sp در عوض، \f(CW\*(C`main\*(C'\fR را در بخش \&\f(CW\*(C`.init9\*(C'\fR قرار می‌دهد (\f(CW\*(C`https://avrdudes.github.io/avr\-libc/avr\-libc\-user\-manual/mem_sections.html#sec_dot_init\*(C'\fR) تا نیازی به فراخوانی نباشد. با تنظیم این گزینه، کاربر تعهد می‌دهد که \f(CW\*(C`main\*(C'\fR بازگشتی نخواهد داشت. .Sp از این گزینه می‌توان برای دستگاه‌هایی با منابع بسیار محدود به منظور صرفه‌جویی در چند بایت کد و فضای پشته استفاده کرد. این گزینه از AVR\-LibC\ v2.3 طبق انتظار عمل خواهد کرد (\f(CW\*(C`https://github.com/avrdudes/avr\-libc/issues/1012\*(C'\fR). در نسخه‌های قدیمی‌تر، هیچ بهبودی در عملکرد حاصل نخواهد شد. .IP \fB\-mno\-interrupts\fR 4 .IX Item "-mno-interrupts" کد تولیدشده با وقفه‌های سخت‌افزاری سازگار نیست. اندازهٔ کد کوچک‌تر است. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" تلاش می‌کند در صورت امکان، دستورالعمل‌های \f(CW\*(C`CALL\*(C'\fR یا \f(CW\*(C`JMP\*(C'\fR را به ترتیب با دستورالعمل‌های کوتاه‌تر \&\f(CW\*(C`RCALL\*(C'\fR یا \f(CW\*(C`RJMP\*(C'\fR جایگزین کند. تنظیم \fB\-mrelax\fR صرفاً گزینهٔ \fB\-\-mlink\-relax\fR را به خط فرمان اسمبلر و گزینهٔ \fB\-\-relax\fR را به خط فرمان پیونددهنده اضافه می‌کند. .Sp تعدیل پرش (Jump relaxing) توسط پیونددهنده انجام می‌گیرد، زیرا آفست‌های پرش پیش از جای‌گذاری کد مشخص نیستند. بنابراین، کد اسمبلی تولیدشده توسط کامپایلر یکسان است، اما دستورالعمل‌های موجود در فایل اجرایی ممکن است با دستورالعمل‌های کد اسمبلی تفاوت داشته باشند. .Sp در صورتی که به خردّه‌های پیونددهنده (linker stubs) نیاز باشد، تعدیل باید فعال شود؛ بخش مربوط به \f(CW\*(C`EIND\*(C'\fR و خردّه‌های پیونددهنده را در زیر مشاهده کنید. .IP \fB\-mrodata\-in\-ram\fR 4 .IX Item "-mrodata-in-ram" .PD 0 .IP \fB\-mno\-rodata\-in\-ram\fR 4 .IX Item "-mno-rodata-in-ram" .PD بخش‌های \f(CW\*(C`.rodata\*(C'\fR مربوط به داده‌های فقط‌خواندنی را به ترتیب در RAM یا در حافظهٔ برنامه قرار می‌دهد. برای بیشتر دستگاه‌ها انتخابی وجود ندارد و این گزینه بیشتر شبیه به یک گزارهٔ تأییدی عمل می‌کند. .Sp از نسخهٔ ۱۴ و برای دستگاه‌های *AVR64 و *AVR128، چنانچه پشتیبانی لازم در GNU Binutils موجود باشد (PR31124 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR))، بخش \f(CW\*(C`.rodata\*(C'\fR به‌طور پیش‌فرض در حافظهٔ فلش قرار می‌گیرد. در این حالت، می‌توان از \fB\-mrodata\-in\-ram\fR برای بازگشت به چیدمان قبلی با قرار گرفتن \f(CW\*(C`.rodata\*(C'\fR در RAM استفاده کرد. .IP \fB\-mtiny\-stack\fR 4 .IX Item "-mtiny-stack" تنها ۸ بیت پایینی اشاره‌گر پشته را تغییر می‌دهد. .IP \fB\-mfract\-convert\-truncate\fR 4 .IX Item "-mfract-convert-truncate" امکان استفاده از کوتاه‌سازی (truncation) به جای گرد کردن به سمت صفر را برای انواع ممیز ثابت کسری فراهم می‌کند. .IP \fB\-nodevicelib\fR 4 .IX Item "-nodevicelib" با کتابخانهٔ مختص به دستگاه \f(CW\*(C`lib\fR\f(CImcu\fR\f(CW.a\*(C'\fR در AVR\-LibC پیوند انجام نمی‌دهد. .Sp توجه داشته باشید که از نسخهٔ AVR\-LibC v2.3، این کتابخانه حاوی کدهایی است که برای عملکرد صحیح برنامه ضروری هستند. به‌ویژه، شامل بخش‌هایی از کد راه‌اندازی مانند این موارد است: \&\f(CW\*(C`_\|_init_sp\*(C'\fR (\f(CW\*(C`https://github.com/avrdudes/avr\-libc/issues/1011\*(C'\fR) برای مقداردهی اولیهٔ اشاره‌گر پشته با نماد \f(CW\*(C`_\|_stack\*(C'\fR، \&\f(CW\*(C`_\|_init_cvt\*(C'\fR (\f(CW\*(C`https://github.com/avrdudes/avr\-libc/issues/1010\*(C'\fR) برای تنظیم سخت‌افزار جهت استفاده از یک جدول بردار فشرده با \fB\-mcvt\fR، \&\f(CW\*(C`_\|_call_main\*(C'\fR (\f(CW\*(C`https://github.com/avrdudes/avr\-libc/issues/1012\*(C'\fR) برای فراخوانی \f(CW\*(C`main\*(C'\fR و \f(CW\*(C`exit\*(C'\fR، و \&\f(CW\*(C`_\|_do_flmap_init\*(C'\fR (\f(CW\*(C`https://github.com/avrdudes/avr\-libc/issues/931\*(C'\fR) برای راه‌اندازی FLMAP مطابق با نماد \f(CW\*(C`_\|_flmap\*(C'\fR. .IP \fB\-nodevicespecs\fR 4 .IX Item "-nodevicespecs" عبارت \fB\-specs=device\-specs/specs\-\fR\fImcu\fR را به خط فرمان راه‌انداز کامپایلر اضافه نمی‌کند. مسئولیت تأمین گزینه‌های مناسب خط فرمان برای زیرفرآیندهایی مانند خودِ کامپایلر، اسمبلر و پیونددهنده بر عهدهٔ کاربر خواهد بود. این بدان معناست که کاربر باید فایل مشخصات دستگاه اختصاصی خود را از طریق \fB\-specs=\fR\fIpath\-to\-specs\-file\fR مشخص کند. در این حالت دیگر نیازی به گزینهٔ \fB\-mmcu=\fR\fImcu\fR نیست. .Sp این گزینه همچنین می‌تواند جایگزینی برای روش قدیمی‌تر تعیین فایل‌های سفارشی device-specs باشد که در آن نیاز بود \fB\-B\fR \fIsome\-path\fR به دایرکتوری‌ای اشاره کند که شامل پوشه‌ای به نام \f(CW\*(C`device\-specs\*(C'\fR بود و آن نیز شامل یک فایل مشخصات با نام \&\f(CW\*(C`specs\-\fR\f(CImcu\fR\f(CW\*(C'\fR می‌شد، که در آن \fImcu\fR توسط \fB\-mmcu=\fR\fImcu\fR تعیین شده بود. .IP \fB\-Waddr\-space\-convert\fR 4 .IX Item "-Waddr-space-convert" در مواردی که فضای آدرس حاصل در فضای آدرس ورودی گنجانده نشده باشد، دربارهٔ تبدیل‌های بین فضاهای آدرس هشدار می‌دهد. .IP \fB\-Wmisspelled\-isr\fR 4 .IX Item "-Wmisspelled-isr" اگر نام ISR اشتباه نوشته شده باشد (یعنی بدون پیشوند _\|_vector باشد)، هشدار می‌دهد. به‌طور پیش‌فرض فعال است. .PP گزینه‌های بهینه‌سازی AVR .IX Subsection "AVR Optimization Options" .PP گزینه‌های زیر گزینه‌های بهینه‌سازی خالص هستند. گزینه‌های \fB\-mgas\-isr\-prologues\fR، \fB\-mmain\-is\-OS_task\fR، \&\fB\-mno\-call\-main\fR و \fB\-mrelax\fR که در بالا ذکر شدند تنها \&\fIتقریباً\fR گزینه‌های بهینه‌سازی محسوب می‌شوند، زیرا به ندرت پیش می‌آید که تفاوت تولید کد توسط آن‌ها اهمیتی داشته باشد. .IP \fB\-maccumulate\-args\fR 4 .IX Item "-maccumulate-args" آرگومان‌های خروجی تابع را انباشته کرده و فضای پشتهٔ مورد نیاز برای آرگومان‌های خروجی را یک بار در پیش‌درآمد/پس‌درآمد (prologue/epilogue) تابع تخصیص داده و آزاد می‌کند. بدون این گزینه، آرگومان‌های خروجی پیش از فراخوانی یک تابع روی پشته قرار گرفته و پس از آن برداشته می‌شوند. همچنین گزینهٔ بهینه‌سازی \fB\-fdefer\-pop\fR را در \&\fBOptimize Options,,optimization option\fR ببینید. .Sp برداشتن آرگومان‌ها از پشته پس از فراخوانی تابع می‌تواند در AVR هزینه‌بر باشد، بنابراین تجمیع فضای پشته ممکن است به کوچک‌تر شدن اندازهٔ فایل‌های اجرایی منجر شود زیرا نیازی نیست آرگومان‌ها پس از چنین فراخوانی تابعی از پشته حذف شوند. .Sp این گزینه می‌تواند برای توابعی که چندین بار توابعی با آرگومان‌های روی پشته را فراخوانی می‌کنند (مانند فراخوانی توابع مشابه printf)، به کاهش اندازهٔ کد بیانجامد. .IP \fB\-mbranch\-cost=\fR\fIcost\fR 4 .IX Item "-mbranch-cost=cost" هزینهٔ انشعاب را برای دستورالعمل‌های انشعاب شرطی روی \&\fIcost\fR تنظیم می‌کند. مقادیر منطقی برای \fIcost\fR، اعداد صحیح کوچک و غیرمنفی هستند. هزینهٔ پیش‌فرض انشعاب 0 است..IP \fB\-mcall\-prologues\fR 4 .IX Item "-mcall-prologues" پیش‌درآمدها/پس‌درآمدهای توابع به صورت فراخوانی به زیرروال‌های مناسب بسط می‌یابند. اندازه کد کوچک‌تر می‌شود. .IP \fB\-mfuse\-add\fR 4 .IX Item "-mfuse-add" .PD 0 .IP \fB\-mno\-fuse\-add\fR 4 .IX Item "-mno-fuse-add" .IP \fB\-mfuse\-add=\fR\fIlevel\fR 4 .IX Item "-mfuse-add=level" .PD دسترسی‌های غیرمستقیم به حافظه را روی دستگاه‌های تقلیل‌یافته Tiny بهینه‌سازی می‌کند. حالت پیش‌فرض از \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=1\*(C'\fR برای بهینه‌سازی‌های \fB\-Og\fR و \fB\-O1\fR، و از \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=2\*(C'\fR برای بهینه‌سازی‌های بالاتر استفاده می‌کند. مقادیر معتبر برای \fIlevel\fR شامل \f(CW0\fR، \f(CW1\fR و \f(CW2\fR هستند. .IP \fB\-mfuse\-move\fR 4 .IX Item "-mfuse-move" .PD 0 .IP \fB\-mno\-fuse\-move\fR 4 .IX Item "-mno-fuse-move" .IP \fB\-mfuse\-move=\fR\fIlevel\fR 4 .IX Item "-mfuse-move=level" .PD یک گذر بهینه‌سازی پس از بارگذاری مجدد (post reload) را اجرا می‌کند که تلاش می‌نماید دستورالعمل‌های انتقال (move) را ادغام کرده و دستورالعمل‌های چندبایتی را به عملیات‌های ۸ بیتی تقسیم کند. حالت پیش‌فرض از \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=3\*(C'\fR برای بهینه‌سازی \fB\-O1\fR، و از \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=23\*(C'\fR برای بهینه‌سازی‌های بالاتر استفاده می‌کند. مقادیر معتبر برای \fIlevel\fR در محدوده \f(CW0\fR ... \f(CW23\fR هستند که مقداری با مبنای مختلط (mixed radix) 3:2:2:2 است. هر رقم جنبه‌ای از بهینه‌سازی را کنترل می‌کند. .IP \fB\-mfuse\-move2\fR 4 .IX Item "-mfuse-move2" یک گذر بهینه‌سازی پس از ترکیب (post combine) را اجرا می‌کند که تلاش می‌نماید دستورالعمل‌های انتقال (move) را ادغام کند. .IP \fB\-mstrict\-X\fR 4 .IX Item "-mstrict-X" از ثبات آدرس \f(CW\*(C`X\*(C'\fR به شیوه‌ای که توسط سخت‌افزار پیشنهاد شده استفاده می‌کند. این بدان معناست که \f(CW\*(C`X\*(C'\fR تنها در آدرس‌دهی‌های غیرمستقیم، پس‌افزایشی (post\-increment) یا پیش‌کاهشی (pre\-decrement) به کار می‌رود. .Sp بدون این گزینه، ثبات \f(CW\*(C`X\*(C'\fR ممکن است به همان شیوهٔ \f(CW\*(C`Y\*(C'\fR یا \f(CW\*(C`Z\*(C'\fR استفاده شود که در این صورت توسط دستورالعمل‌های اضافی شبیه‌سازی می‌گردد. برای مثال، بارگذاری یک مقدار با آدرس‌دهی \f(CW\*(C`X+const\*(C'\fR با یک مقدار نامنفی کوچک \f(CW\*(C`const < 64\*(C'\fR درون یک ثبات \fIRn\fR به صورت زیر انجام می‌شود: .Sp .Vb 3 \& adiw r26, const ; X += const \& ld , X ; = *X \& sbiw r26, const ; X \-= const .Ve .IP \fB\-msplit\-bit\-shift\fR 4 .IX Item "-msplit-bit-shift" شیفت‌های چندبایتی با آفست ثابت را به یک شیفت با آفست بایتی و یک شیفت باقی‌مانده با آفست غیربایتی تقسیم می‌کند. این بهینه‌سازی به‌طور پیش‌فرض برای \fB\-O2\fR و بالاتر فعال است، شامل \fB\-Os\fR اما بدون \fB\-Oz\fR. تقسیم شیفت‌های دارای آفست ثابت که مضربی از ۸ باشند توسط \fB\-mfuse\-move\fR کنترل می‌شود. .IP \fB\-msplit\-ldst\fR 4 .IX Item "-msplit-ldst" بارگذاری‌ها و ذخیره‌سازی‌های چندبایتی را به چند بارگذاری و ذخیره‌سازی بایتی تقسیم می‌کند. این بهینه‌سازی به‌طور پیش‌فرض برای \fB\-O2\fR و بالاتر فعال است. .IP \fB\-muse\-nonzero\-bits\fR 4 .IX Item "-muse-nonzero-bits" بهینه‌سازی‌هایی را فعال می‌کند که تنها زمانی امکان‌پذیر هستند که برخی بیت‌ها در یک ثبات همواره صفر باشند. این بهینه‌سازی به‌طور پیش‌فرض برای \fB\-O2\fR و بالاتر فعال است. .PP \f(CW\*(C`EIND\*(C'\fR و دستگاه‌هایی با بیش از ۱۲۸ کیبی‌بایت حافظه فلش .IX Subsection "EIND and Devices with More Than 128 Ki Bytes of Flash" .PP اشاره‌گرها در این پیاده‌سازی پهنای ۱۶ بیتی دارند. آدرس یک تابع یا برچسب به عنوان آدرس کلمه‌ای (word address) نشان داده می‌شود تا پرش‌ها و فراخوانی‌های غیرمستقیم بتوانند هر آدرس کدی در محدوده ۶۴ کیبی‌کلمه را هدف قرار دهند. .PP به منظور تسهیل پرش‌های غیرمستقیم روی دستگاه‌هایی با بیش از ۱۲۸ کیبی‌بایت فضای حافظه برنامه، یک ثبات با تابع ویژه به نام \&\f(CW\*(C`EIND\*(C'\fR وجود دارد که هنگام استفاده از دستورالعمل‌های \f(CW\*(C`EICALL\*(C'\fR یا \f(CW\*(C`EIJMP\*(C'\fR، به عنوان باارزش‌ترین بخش آدرس هدف عمل می‌کند. .PP پرش‌ها و فراخوانی‌های غیرمستقیم روی این دستگاه‌ها توسط کامپایلر به شرح زیر مدیریت می‌شوند و مشمول برخی محدودیت‌ها هستند: .IP * 4 کامپایلر هرگز \f(CW\*(C`EIND\*(C'\fR را مقداردهی نمی‌کند. .IP * 4 کامپایلر از \f(CW\*(C`EIND\*(C'\fR به‌طور ضمنی در دستورالعمل‌های \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR استفاده می‌کند یا ممکن است برای شبیه‌سازی یک فراخوانی/پرش غیرمستقیم از طریق یک دستورالعمل \f(CW\*(C`RET\*(C'\fR، مقدار \f(CW\*(C`EIND\*(C'\fR را مستقیماً بخواند. .IP * 4 کامپایلر فرض می‌کند که \f(CW\*(C`EIND\*(C'\fR هرگز در حین اجرای کد راه‌اندازی (startup) یا در حین اجرای برنامه تغییر نمی‌کند. به‌ویژه، \f(CW\*(C`EIND\*(C'\fR در پیش‌درآمد/پس‌درآمد توابع یا روتین‌های مدیریت وقفه (ISR) ذخیره یا بازیابی نمی‌شود. .IP * 4 برای فراخوانی‌های غیرمستقیم به توابع و goto محاسباتی، پیونددهنده \fIstub\fRها (تکه‌کدهای واسط) را تولید می‌کند. واسط‌ها سکوهای پرش هستند که گاهی اوقات \&\fItrampoline\fR نیز نامیده می‌شوند. بنابراین، فراخوانی/پرش غیرمستقیم به چنین stubای می‌پرد. این stub حاوی یک پرش مستقیم به آدرس مورد نظر است. .IP * 4 بهینه‌سازی relaxation پیونددهنده باید فعال باشد تا پیونددهنده بتواند stubها را در همه وضعیت‌ها به درستی بسازد. گزینه کامپایلر \&\fB\-mrelax\fR و گزینه پیونددهنده \fB\-\-relax\fR را ببینید. موارد خاصی وجود دارند که در آن‌ها پیونددهنده باید stubها را تولید کند اما بدون فعال بودن relaxation و بدون پیام خطای مفید متوقف می‌شود. .IP * 4 اسکریپت پیش‌فرض پیونددهنده برای کدهایی با \f(CW\*(C`EIND = 0\*(C'\fR تنظیم شده است. اگر قرار باشد کد در تنظیمی با \f(CW\*(C`EIND != 0\*(C'\fR کار کند، باید از یک اسکریپت پیونددهنده سفارشی استفاده شود تا بخش‌هایی که نام آن‌ها با \f(CW\*(C`.trampolines\*(C'\fR شروع می‌شود را در قطعه‌ای قرار دهد که \f(CW\*(C`EIND\*(C'\fR به آن اشاره می‌کند. .IP * 4 کد راه‌اندازی از libgcc هرگز \f(CW\*(C`EIND\*(C'\fR را مقداردهی نمی‌کند. توجه داشته باشید که کد راه‌اندازی آمیزه‌ای از کدهای libgcc و AVR\-LibC است. برای تأثیر AVR\-LibC بر \f(CW\*(C`EIND\*(C'\fR، به راهنمای کاربر AVR\-LibC\ (\f(CW\*(C`https://avrdudes.github.io/avr\-libc/avr\-libc\-user\-manual\*(C'\fR) مراجعه کنید. .IP * 4 برای کد راه‌اندازی اختصاصی کاربر مجاز است که \f(CW\*(C`EIND\*(C'\fR را در همان ابتدا تنظیم کند، برای مثال از طریق کد مقداردهی اولیه‌ای که در بخش \f(CW\*(C`.init3\*(C'\fR قرار دارد. چنین کدی قبل از کد راه‌اندازی عمومی که RAM را مقداردهی اولیه کرده و سازنده‌ها را فراخوانی می‌کند اجرا می‌شود، اما بعد از آن بخش از کد راه‌اندازی AVR\-LibC اجرا می‌گردد که \f(CW\*(C`EIND\*(C'\fR را روی قطعه‌ای که جدول بردار در آن قرار دارد تنظیم می‌کند. .Sp .Vb 1 \& #include \& \& static void \& _\|_attribute_\|_((section(".init3"),naked,used,no_instrument_function)) \& init3_set_eind (void) \& { \& _\|_asm volatile ("ldi r24,pm_hh8(_\|_trampolines_start)\en\et" \& "out %i0,r24" :: "n" (&EIND) : "r24","memory"); \& } .Ve .Sp نماد \f(CW\*(C`_\|_trampolines_start\*(C'\fR در اسکریپت پیونددهنده تعریف شده است. .IP * 4 واسط‌ها (stubs) در صورتی به‌طور خودکار توسط پیونددهنده تولید می‌شوند که هر دو شرط زیر برقرار باشد: .RS 4 .ie n .IP "\-<آدرس یک برچسب با استفاده از اصلاح‌گر ""gs"" گرفته شده باشد>" 4 .el .IP "\-<آدرس یک برچسب با استفاده از اصلاح‌گر \f(CWgs\fR گرفته شده باشد>" 4 .IX Item "-" (کوتاه‌شدهٔ \fIgenerate stubs\fR) مانند زیر: .Sp .Vb 2 \& LDI r24, lo8(gs()) \& LDI r25, hi8(gs()) .Ve .IP "\-<مکان نهایی آن برچسب در یک قطعه کد باشد>" 4 .IX Item "-" \&\fIخارج\fR از قطعه‌ای که stubها در آن قرار دارند. .RE .RS 4 .RE .IP * 4 کامپایلر چنین اصلاح‌گرهای \f(CW\*(C`gs\*(C'\fR را برای برچسب‌های کد در موقعیت‌های زیر صادر می‌کند: .RS 4 .IP "\-<گرفتن آدرس یک تابع یا برچسب کد.>" 4 .IX Item "-" .PD 0 .IP "\-<دستور goto محاسباتی.>" 4 .IX Item "-" .IP "\-<اگر تابع ذخیره پیش‌درآمد استفاده شود، گزینه خط فرمان \fB\-mcall\-prologues\fR>" 4 .IX Item "-" .PD را ببینید. .IP "\-<جدول‌های توزیع switch/case. اگر چنین جدول‌های توزیعی را نمی‌خواهید،>" 4 .IX Item "-" می‌توانید گزینه خط فرمان \fB\-fno\-jump\-tables\fR را مشخص کنید. .IP "\-<سازنده‌ها/ویرانگرهای C و ++C که در حین راه‌اندازی/خاموشی فراخوانی می‌شوند.>" 4 .IX Item "-" .PD 0 .ie n .IP "\-<اگر ابزارها با یک اصلاح‌گر ()gs که در بالا توضیح داده شد مواجه شوند.>" 4 .el .IP "\-<اگر ابزارها با یک اصلاح‌گر \f(CWgs()\fR که در بالا توضیح داده شد مواجه شوند.>" 4 .IX Item "-".PD .RE .RS 4 .RE .IP * 4 پریدن به آدرس‌های غیرنمادین مانند زیر پشتیبانی \fIنمی‌شود\fR: .Sp .Vb 5 \& int main (void) \& { \& /* Call function at word address 0x2 */ \& return ((int(*)(void)) 0x2)(); \& } .Ve .Sp در عوض، باید یک رابط میانی (stub) ایجاد شود، یعنی تابع باید از طریق یک نماد فراخوانی گردد (در مثال، \f(CW\*(C`func_4\*(C'\fR): .Sp .Vb 3 \& int main (void) \& { \& extern int func_4 (void); \& \& /* Call function at byte address 0x4 */ \& return func_4(); \& } .Ve .Sp و برنامه با \fB\-Wl,\-\-defsym,func_4=0x4\fR پیوند داده شود. همچنین، می‌توان \f(CW\*(C`func_4\*(C'\fR را در اسکریپت پیونددهنده (linker script) تعریف کرد. .PP مدیریت ثبات‌های با کاربرد خاص \f(CW\*(C`RAMPD\*(C'\fR، \f(CW\*(C`RAMPX\*(C'\fR، \f(CW\*(C`RAMPY\*(C'\fR و \f(CW\*(C`RAMPZ\*(C'\fR .IX Subsection "Handling of the RAMPD, RAMPX, RAMPY and RAMPZ Special Function Registers" .PP برخی از دستگاه‌های AVR از حافظه‌های بزرگ‌تر از محدوده ۶۴ کیبی‌بایت (64 KiB) که با اشاره‌گرهای ۱۶ بیتی قابل دسترسی هستند پشتیبانی می‌کنند. برای دسترسی به مکان‌های حافظه خارج از این محدوده ۶۴ کیبی‌بایتی، محتوای یک ثبات \f(CW\*(C`RAMP\*(C'\fR به‌عنوان بخش بالایی آدرس استفاده می‌شود: ثبات‌های آدرس \f(CW\*(C`X\*(C'\fR، \f(CW\*(C`Y\*(C'\fR، \f(CW\*(C`Z\*(C'\fR به ترتیب با ثبات‌های با کاربرد خاص \f(CW\*(C`RAMPX\*(C'\fR، \f(CW\*(C`RAMPY\*(C'\fR و \f(CW\*(C`RAMPZ\*(C'\fR الحاق می‌شوند تا یک آدرس عریض تشکیل شود. به‌طور مشابه، \&\f(CW\*(C`RAMPD\*(C'\fR به همراه آدرس‌دهی مستقیم به کار می‌رود. .IP * 4 کد راه‌اندازی (startup code) ثبات‌های با کاربرد خاص \f(CW\*(C`RAMP\*(C'\fR را با صفر مقداردهی اولیه می‌کند. .IP * 4 اگر یک \fBAVR Named Address Spaces,فضای آدرس نام‌گذاری شده\fR غیر از عمومی (generic) یا \f(CW\*(C`_\|_flash\*(C'\fR استفاده شود، آن‌گاه \f(CW\*(C`RAMPZ\*(C'\fR در صورت نیاز پیش از عملیات مقداردهی می‌شود. .IP * 4 اگر دستگاه از حافظه RAM بزرگ‌تر از ۶۴ کیبی‌بایت پشتیبانی کند و کامپایلر برای انجام یک عملیات نیاز به تغییر \f(CW\*(C`RAMPZ\*(C'\fR داشته باشد، \f(CW\*(C`RAMPZ\*(C'\fR پس از پایان عملیات مجدداً به صفر بازنشانی می‌شود. .IP * 4 اگر دستگاه دارای یک ثبات خاص \f(CW\*(C`RAMP\*(C'\fR باشد، بخش آغازین/پایانی روتین وقفه (ISR prologue/epilogue) آن SFR را ذخیره/بازیابی کرده و آن را با صفر مقداردهی می‌کند، مبادا کد ISR (به‌طور ضمنی) از آن استفاده کند. .IP * 4 حافظه RAM بزرگ‌تر از ۶۴ کیبی‌بایت توسط GCC برای اهداف AVR پشتیبانی نمی‌شود. اگر از اسمبلی درون‌خطی (inline assembler) برای خواندن از مکان‌هایی خارج از محدوده آدرس ۱۶ بیتی استفاده می‌کنید و یکی از ثبات‌های \f(CW\*(C`RAMP\*(C'\fR را تغییر می‌دهید، باید پس از دسترسی آن را به صفر بازنشانی کنید. .PP ماکروهای توکار AVR .IX Subsection "AVR Built-in Macros" .PP کامپایلر GCC چندین ماکروی توکار را تعریف می‌کند تا کد کاربر بتواند وجود یا عدم وجود قابلیت‌ها را بررسی کند. تقریباً تمام ماکروهای توکار زیر از قابلیت‌های دستگاه استنتاج شده و بنابراین با گزینه خط فرمان \fB\-mmcu=\fR فعال می‌شوند. .PP برای ماکروهای توکار اختصاصی بیشتر در AVR، بخش‌های \&\fBAVR Named Address Spaces\fR و \fBAVR Built\-in Functions\fR را ببینید. .ie n .IP """_\|_AVR_ARCH_\|_""" 4 .el .IP \f(CW_\|_AVR_ARCH_\|_\fR 4 .IX Item "__AVR_ARCH__" ماکروی توکاری که به یک عدد ده‌دهی شناسایی‌کننده معماری بسط می‌یابد و به گزینه \fB\-mmcu=\fR\fImcu\fR بستگی دارد. مقادیر ممکن عبارتند از: .Sp \&\f(CW2\fR, \f(CW25\fR, \f(CW3\fR, \f(CW31\fR, \f(CW35\fR, \&\f(CW4\fR, \f(CW5\fR, \f(CW51\fR, \f(CW6\fR .Sp به ترتیب برای \fImcu\fR=\f(CW\*(C`avr2\*(C'\fR، \f(CW\*(C`avr25\*(C'\fR، \f(CW\*(C`avr3\*(C'\fR، \f(CW\*(C`avr31\*(C'\fR، \&\f(CW\*(C`avr35\*(C'\fR، \f(CW\*(C`avr4\*(C'\fR، \f(CW\*(C`avr5\*(C'\fR، \f(CW\*(C`avr51\*(C'\fR، \f(CW\*(C`avr6\*(C'\fR، .Sp و .Sp \&\f(CW100\fR, \&\f(CW102\fR, \f(CW103\fR, \f(CW104\fR, \&\f(CW105\fR, \f(CW106\fR, \f(CW107\fR .Sp به ترتیب برای \fImcu\fR=\f(CW\*(C`avrtiny\*(C'\fR، \&\f(CW\*(C`avrxmega2\*(C'\fR، \f(CW\*(C`avrxmega3\*(C'\fR، \f(CW\*(C`avrxmega4\*(C'\fR، \&\f(CW\*(C`avrxmega5\*(C'\fR، \f(CW\*(C`avrxmega6\*(C'\fR، \f(CW\*(C`avrxmega7\*(C'\fR. اگر \fImcu\fR یک دستگاه را مشخص کند، این ماکروی توکار بر همان اساس تنظیم می‌شود. برای نمونه، با \fB\-mmcu=atmega8\fR این ماکرو برابر با \f(CW4\fR تعریف می‌شود. .ie n .IP """_\|_AVR_\fIDevice\fR_\|_""" 4 .el .IP \f(CW_\|_AVR_\fR\f(CIDevice\fR\f(CW_\|_\fR 4 .IX Item "__AVR_Device__" تنظیم \fB\-mmcu=\fR\fIdevice\fR این ماکروی توکار را تعریف می‌کند که نمایانگر نام دستگاه است. برای نمونه، \fB\-mmcu=atmega8\fR ماکروی توکار \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR را تعریف می‌کند، \fB\-mmcu=attiny261a\fR ماکروی \&\f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR را تعریف می‌کند، و غیره. .Sp نام ماکروهای توکار از الگوی \f(CW\*(C`_\|_AVR_\fR\f(CIDevice\fR\f(CW_\|_\*(C'\fR پیروی می‌کند که در آن \fIDevice\fR نام دستگاه مطابق با دفترچه راهنمای کاربر AVR است. تفاوت بین \&\fIDevice\fR در ماکروی توکار و \fIdevice\fR در \&\fB\-mmcu=\fR\fIdevice\fR این است که دومی همیشه با حروف کوچک نوشته می‌شود. .Sp اگر \fIdevice\fR یک دستگاه نبوده بلکه صرفاً یک معماری هسته مانند \&\fBavr51\fR باشد، این ماکرو تعریف نخواهد شد. .ie n .IP """_\|_AVR_DEVICE_NAME_\|_""" 4 .el .IP \f(CW_\|_AVR_DEVICE_NAME_\|_\fR 4 .IX Item "__AVR_DEVICE_NAME__" تنظیم \fB\-mmcu=\fR\fIdevice\fR این ماکروی توکار را برابر با نام دستگاه قرار می‌دهد. برای نمونه، با \fB\-mmcu=atmega8\fR این ماکرو برابر با \f(CW\*(C`atmega8\*(C'\fR تعریف می‌شود. .Sp اگر \fIdevice\fR یک دستگاه نبوده بلکه صرفاً یک معماری هسته مانند \&\fBavr51\fR باشد، این ماکرو تعریف نخواهد شد. .ie n .IP """_\|_AVR_CVT_\|_""" 4 .el .IP \f(CW_\|_AVR_CVT_\|_\fR 4 .IX Item "__AVR_CVT__" کد با گزینه \f(CW\*(C`\-mcvt\*(C'\fR برای استفاده از یک \&\fIجدول بردار فشرده\fR (compact vector table) کامپایل می‌شود. .ie n .IP """_\|_AVR_XMEGA_\|_""" 4 .el .IP \f(CW_\|_AVR_XMEGA_\|_\fR 4 .IX Item "__AVR_XMEGA__" دستگاه / معماری متعلق به خانواده دستگاه‌های XMEGA است. .ie n .IP """_\|_AVR_HAVE_ADIW_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_ADIW_\|_\fR 4 .IX Item "__AVR_HAVE_ADIW__" دستگاه دارای دستورالعمل‌های \f(CW\*(C`ADIW\*(C'\fR و \f(CW\*(C`SBIW\*(C'\fR است. .ie n .IP """_\|_AVR_HAVE_ELPM_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_ELPM_\|_\fR 4 .IX Item "__AVR_HAVE_ELPM__" دستگاه دارای دستورالعمل \f(CW\*(C`ELPM\*(C'\fR است. .ie n .IP """_\|_AVR_HAVE_ELPMX_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_ELPMX_\|_\fR 4 .IX Item "__AVR_HAVE_ELPMX__" دستگاه دارای دستورالعمل‌های \f(CW\*(C`ELPM R\fR\f(CIn\fR\f(CW,Z\*(C'\fR و \f(CW\*(C`ELPM R\fR\f(CIn\fR\f(CW,Z+\*(C'\fR است. .ie n .IP """_\|_AVR_HAVE_LPMX_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_LPMX_\|_\fR 4 .IX Item "__AVR_HAVE_LPMX__" دستگاه دارای دستورالعمل‌های \f(CW\*(C`LPM R\fR\f(CIn\fR\f(CW,Z\*(C'\fR و \&\f(CW\*(C`LPM R\fR\f(CIn\fR\f(CW,Z+\*(C'\fR است. .ie n .IP """_\|_AVR_HAVE_MOVW_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_MOVW_\|_\fR 4 .IX Item "__AVR_HAVE_MOVW__" دستگاه دارای دستورالعمل \f(CW\*(C`MOVW\*(C'\fR برای انجام انتقال‌های ۱۶ بیتی ثبات به ثبات است. .ie n .IP """_\|_AVR_HAVE_MUL_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_MUL_\|_\fR 4 .IX Item "__AVR_HAVE_MUL__" دستگاه دارای یک ضرب‌کننده سخت‌افزاری است. .ie n .IP """_\|_AVR_HAVE_JMP_CALL_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_JMP_CALL_\|_\fR 4 .IX Item "__AVR_HAVE_JMP_CALL__" دستگاه دارای دستورالعمل‌های \f(CW\*(C`JMP\*(C'\fR و \f(CW\*(C`CALL\*(C'\fR است. این مورد برای دستگاه‌هایی با بیش از ۸ کیبی‌بایت حافظه برنامه صدق می‌کند. .ie n .IP """_\|_AVR_HAVE_EIJMP_EICALL_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_EIJMP_EICALL_\|_\fR 4 .IX Item "__AVR_HAVE_EIJMP_EICALL__" .PD 0 .ie n .IP """_\|_AVR_3_BYTE_PC_\|_""" 4 .el .IP \f(CW_\|_AVR_3_BYTE_PC_\|_\fR 4 .IX Item "__AVR_3_BYTE_PC__" .PD دستگاه دارای دستورالعمل‌های \f(CW\*(C`EIJMP\*(C'\fR و \f(CW\*(C`EICALL\*(C'\fR است. این مورد برای دستگاه‌هایی با بیش از ۱۲۸ کیبی‌بایت حافظه برنامه صدق می‌کند. این امر همچنین بدان معنی است که شمارنده برنامه (PC) دارای پهنای ۳ بایت است. .ie n .IP """_\|_AVR_2_BYTE_PC_\|_""" 4 .el .IP \f(CW_\|_AVR_2_BYTE_PC_\|_\fR 4 .IX Item "__AVR_2_BYTE_PC__" شمارنده برنامه (PC) دارای پهنای ۲ بایت است. این مورد برای دستگاه‌هایی با حداکثر ۱۲۸ کیبی‌بایت حافظه برنامه صدق می‌کند. .ie n .IP """_\|_AVR_HAVE_8BIT_SP_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_8BIT_SP_\|_\fR 4 .IX Item "__AVR_HAVE_8BIT_SP__".PD 0 .ie n .IP """_\|_AVR_HAVE_16BIT_SP_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_16BIT_SP_\|_\fR 4 .IX Item "__AVR_HAVE_16BIT_SP__" .PD ثبات اشاره‌گر پشته (SP) به ترتیب به عنوان ثبات ۸ بیتی یا ۱۶ بیتی توسط کامپایلر در نظر گرفته می‌شود. تعریف این ماکروها تحت تأثیر \fB\-mtiny\-stack\fR قرار دارد. .ie n .IP """_\|_AVR_HAVE_SPH_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_SPH_\|_\fR 4 .IX Item "__AVR_HAVE_SPH__" .PD 0 .ie n .IP """_\|_AVR_SP8_\|_""" 4 .el .IP \f(CW_\|_AVR_SP8_\|_\fR 4 .IX Item "__AVR_SP8__" .PD افزاره به ترتیب دارای ثبات تابع خاص SPH (بخش بالایی اشاره‌گر پشته) است یا دارای یک اشاره‌گر پشتهٔ ۸ بیتی می‌باشد. تعریف این ماکروها تحت تأثیر \fB\-mmcu=\fR و در موارد \fB\-mmcu=avr2\fR و \fB\-mmcu=avr25\fR همچنین تحت تأثیر \fB\-msp8\fR قرار می‌گیرد. .ie n .IP """_\|_AVR_HAVE_RAMPD_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_RAMPD_\|_\fR 4 .IX Item "__AVR_HAVE_RAMPD__" .PD 0 .ie n .IP """_\|_AVR_HAVE_RAMPX_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_RAMPX_\|_\fR 4 .IX Item "__AVR_HAVE_RAMPX__" .ie n .IP """_\|_AVR_HAVE_RAMPY_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_RAMPY_\|_\fR 4 .IX Item "__AVR_HAVE_RAMPY__" .ie n .IP """_\|_AVR_HAVE_RAMPZ_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_RAMPZ_\|_\fR 4 .IX Item "__AVR_HAVE_RAMPZ__" .PD افزاره به ترتیب دارای ثبات‌های تابع خاص \f(CW\*(C`RAMPD\*(C'\fR، \f(CW\*(C`RAMPX\*(C'\fR، \f(CW\*(C`RAMPY\*(C'\fR و\&\f(CW\*(C`RAMPZ\*(C'\fR است. .ie n .IP """_\|_NO_INTERRUPTS_\|_""" 4 .el .IP \f(CW_\|_NO_INTERRUPTS_\|_\fR 4 .IX Item "__NO_INTERRUPTS__" این ماکرو بازتاب‌دهندهٔ گزینهٔ خط فرمان \fB\-mno\-interrupts\fR است. .ie n .IP """_\|_AVR_ERRATA_SKIP_\|_""" 4 .el .IP \f(CW_\|_AVR_ERRATA_SKIP_\|_\fR 4 .IX Item "__AVR_ERRATA_SKIP__" .PD 0 .ie n .IP """_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_""" 4 .el .IP \f(CW_\|_AVR_ERRATA_SKIP_JMP_CALL_\|_\fR 4 .IX Item "__AVR_ERRATA_SKIP_JMP_CALL__" .PD برخی از افزاره‌های AVR (مانند AT90S8515 و ATmega103) نباید دستورالعمل‌های ۳۲ بیتی را به دلیل یک نقص سخت‌افزاری نادیده بگیرند (skip کنند). دستورالعمل‌های رد کردن عبارتند از \&\f(CW\*(C`SBRS\*(C'\fR، \f(CW\*(C`SBRC\*(C'\fR، \f(CW\*(C`SBIS\*(C'\fR، \f(CW\*(C`SBIC\*(C'\fR و \f(CW\*(C`CPSE\*(C'\fR. ماکروی دوم تنها زمانی تعریف می‌شود که \f(CW\*(C`_\|_AVR_HAVE_JMP_CALL_\|_\*(C'\fR نیز تنظیم شده باشد. .ie n .IP """_\|_AVR_ISA_RMW_\|_""" 4 .el .IP \f(CW_\|_AVR_ISA_RMW_\|_\fR 4 .IX Item "__AVR_ISA_RMW__" افزاره دارای دستورالعمل‌های خواندن\-تغییر\-نوشتن (شامل XCH، LAC، LAS و LAT) است. .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\fIoffset\fR""" 4 .el .IP \f(CW_\|_AVR_SFR_OFFSET_\|_=\fR\f(CIoffset\fR\f(CW\fR 4 .IX Item "__AVR_SFR_OFFSET__=offset" دستورالعمل‌هایی که می‌توانند مستقیماً ثبات‌های تابع خاص I/O را آدرس‌دهی کنند مانند \f(CW\*(C`IN\*(C'\fR، \f(CW\*(C`OUT\*(C'\fR، \f(CW\*(C`SBI\*(C'\fR و غیره، ممکن است از آدرسی متفاوت نسبت به زمانی که با دستورالعمل دسترسی به RAM مانند \f(CW\*(C`LD\*(C'\fR یا \f(CW\*(C`STS\*(C'\fR آدرس‌دهی می‌شوند استفاده کنند. این آفست به معماری افزاره بستگی دارد و باید از آدرس RAM کم شود تا آدرس I/O مربوطه به دست آید. .ie n .IP """_\|_AVR_SHORT_CALLS_\|_""" 4 .el .IP \f(CW_\|_AVR_SHORT_CALLS_\|_\fR 4 .IX Item "__AVR_SHORT_CALLS__" گزینه خط فرمان \fB\-mshort\-calls\fR تنظیم شده است. .ie n .IP """_\|_AVR_PM_BASE_ADDRESS_\|_=\fIaddr\fR""" 4 .el .IP \f(CW_\|_AVR_PM_BASE_ADDRESS_\|_=\fR\f(CIaddr\fR\f(CW\fR 4 .IX Item "__AVR_PM_BASE_ADDRESS__=addr" برخی از افزاره‌ها خواندن از حافظه فلش را به کمک دستورالعمل‌های \f(CW\*(C`LD*\*(C'\fR پشتیبانی می‌کنند. حافظه فلش در فضای آدرس داده با آفست \f(CW\*(C`_\|_AVR_PM_BASE_ADDRESS_\|_\*(C'\fR دیده می‌شود. اگر این ماکرو تعریف نشده باشد، این ویژگی در دسترس نیست. اگر تعریف شده باشد، فضای آدرس خطی است و نیازی به قرار دادن \&\f(CW\*(C`.rodata\*(C'\fR در RAM وجود ندارد. این مورد توسط پرونده توصیف پیونددهنده پیش‌فرض مدیریت می‌شود و در حال حاضر برای \&\f(CW\*(C`avrtiny\*(C'\fR و \f(CW\*(C`avrxmega3\*(C'\fR در دسترس است. حتی ساده‌تر از آن، نیازی به استفاده از فضاهای آدرس مانند \f(CW\*(C`_\|_flash\*(C'\fR یا ویژگی‌هایی چون صفت \f(CW\*(C`progmem\*(C'\fR و \f(CW\*(C`pgm_read_*\*(C'\fR نیست. .ie n .IP """_\|_AVR_HAVE_FLMAP_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_FLMAP_\|_\fR 4 .IX Item "__AVR_HAVE_FLMAP__" این ماکرو در صورتی تعریف می‌شود که شرایط زیر برقرار باشند: .RS 4 .ie n .IP "*<افزاره دارای میدان‌بیتی ""NVMCTRL_CTRLB.FLMAP"" باشد.>" 4 .el .IP "*<افزاره دارای میدان‌بیتی \f(CWNVMCTRL_CTRLB.FLMAP\fR باشد.>" 4 .IX Item "*" این مورد برای افزاره‌های AVR64* و AVR128* صدق می‌کند. .IP "*<در زمان اسمبل مشخص نباشد که کدام شبیه‌سازی استفاده خواهد شد.>" 4 .IX Item "*" .RE .RS 4 .Sp این بدین معناست که کامپایلر با GNU Binutils که PR31124 را پیاده‌سازی می‌کند (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR) پیکربندی شده است. .RE .ie n .IP """_\|_AVR_RODATA_IN_RAM_\|_""" 4 .el .IP \f(CW_\|_AVR_RODATA_IN_RAM_\|_\fR 4 .IX Item "__AVR_RODATA_IN_RAM__" این ماکرو هنگامی که کد برای یک معماری پایه کامپایل می‌شود، تعریف‌نشده است. .Sp هنگامی که کد برای یک افزاره کامپایل شود، در صورتی که بخش‌های \f(CW\*(C`.rodata\*(C'\fR برای داده‌های فقط‌خواندنی در RAM قرار گیرند، این ماکرو با مقدار 1 تعریف می‌شود؛ و در غیر این صورت با مقدار 0 تعریف خواهد شد. .ie n .IP """_\|_WITH_AVRLIBC_\|_""" 4 .el .IP \f(CW_\|_WITH_AVRLIBC_\|_\fR 4 .IX Item "__WITH_AVRLIBC__" کامپایلر برای استفاده همراه با AVR\-LibC پیکربندی شده است. گزینهٔ پیکربندی \fB\-\-with\-avrlibc\fR را ببینید. .ie n .IP """_\|_HAVE_SIGNAL_N_\|_""" 4 .el .IP \f(CW_\|_HAVE_SIGNAL_N_\|_\fR 4 .IX Item "__HAVE_SIGNAL_N__" کامپایلر از صفت‌های تابع \f(CWsignal(\fR\f(CInum\fR\f(CW)\fR و \&\f(CWinterrupt(\fR\f(CInum\fR\f(CW)\fR در \&\fBAVR Function Attributes,,function attributes\fR با آرگومان \fInum\fR که شمارهٔ روتین سرویس وقفه را مشخص می‌کند، پشتیبانی می‌کند. .ie n .IP """_\|_HAVE_DOUBLE_MULTILIB_\|_""" 4 .el .IP \f(CW_\|_HAVE_DOUBLE_MULTILIB_\|_\fR 4 .IX Item "__HAVE_DOUBLE_MULTILIB__" تعریف می‌شود اگر \fB\-mdouble=\fR به عنوان یک گزینهٔ multilib عمل کند. .ie n .IP """_\|_HAVE_DOUBLE32_\|_""" 4 .el .IP \f(CW_\|_HAVE_DOUBLE32_\|_\fR 4 .IX Item "__HAVE_DOUBLE32__" .PD 0 .ie n .IP """_\|_HAVE_DOUBLE64_\|_""" 4 .el .IP \f(CW_\|_HAVE_DOUBLE64_\|_\fR 4 .IX Item "__HAVE_DOUBLE64__" .PD تعریف می‌شود اگر کامپایلر به ترتیب از double ۳۲ بیتی یا ۶۴ بیتی پشتیبانی کند. چیدمان واقعی توسط گزینه \fB\-mdouble=\fR مشخص می‌شود. .ie n .IP """_\|_DEFAULT_DOUBLE_\|_""" 4 .el .IP \f(CW_\|_DEFAULT_DOUBLE_\|_\fR 4 .IX Item "__DEFAULT_DOUBLE__" اندازهٔ \f(CW\*(C`double\*(C'\fR بر حسب بیت، در صورتی که \fB\-mdouble=\fR تنظیم نشده باشد. برای بررسی چیدمان \f(CW\*(C`double\*(C'\fR در یک برنامه، از ماکروی توکار \&\f(CW\*(C`_\|_SIZEOF_DOUBLE_\|_\*(C'\fR استفاده کنید. .ie n .IP """_\|_HAVE_LONG_DOUBLE32_\|_""" 4 .el .IP \f(CW_\|_HAVE_LONG_DOUBLE32_\|_\fR 4 .IX Item "__HAVE_LONG_DOUBLE32__" .PD 0 .ie n .IP """_\|_HAVE_LONG_DOUBLE64_\|_""" 4 .el .IP \f(CW_\|_HAVE_LONG_DOUBLE64_\|_\fR 4 .IX Item "__HAVE_LONG_DOUBLE64__" .ie n .IP """_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_""" 4 .el .IP \f(CW_\|_HAVE_LONG_DOUBLE_MULTILIB_\|_\fR 4 .IX Item "__HAVE_LONG_DOUBLE_MULTILIB__" .ie n .IP """_\|_DEFAULT_LONG_DOUBLE_\|_""" 4 .el .IP \f(CW_\|_DEFAULT_LONG_DOUBLE_\|_\fR 4 .IX Item "__DEFAULT_LONG_DOUBLE__" .PD مشابه مورد بالا، اما به جای \f(CW\*(C`double\*(C'\fR برای \f(CW\*(C`long double\*(C'\fR. .ie n .IP """_\|_WITH_DOUBLE_COMPARISON_\|_""" 4 .el .IP \f(CW_\|_WITH_DOUBLE_COMPARISON_\|_\fR 4 .IX Item "__WITH_DOUBLE_COMPARISON__" نمایانگر گزینهٔ پیکربندی \f(CW\*(C`\-\-with\-double\-comparison={tristate|bool|libf7}\*(C'\fR (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR) بوده و با مقدار \f(CW2\fR یا \f(CW3\fR تعریف می‌شود. .ie n .IP """_\|_WITH_LIBF7_LIBGCC_\|_""" 4 .el .IP \f(CW_\|_WITH_LIBF7_LIBGCC_\|_\fR 4 .IX Item "__WITH_LIBF7_LIBGCC__" .PD 0 .ie n .IP """_\|_WITH_LIBF7_MATH_\|_""" 4 .el .IP \f(CW_\|_WITH_LIBF7_MATH_\|_\fR 4 .IX Item "__WITH_LIBF7_MATH__" .ie n .IP """_\|_WITH_LIBF7_MATH_SYMBOLS_\|_""" 4 .el .IP \f(CW_\|_WITH_LIBF7_MATH_SYMBOLS_\|_\fR 4 .IX Item "__WITH_LIBF7_MATH_SYMBOLS__" .PD نمایانگر گزینهٔ پیکربندی \f(CW\*(C`\-\-with\-libf7={libgcc|math|math\-symbols}\*(C'\fR (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR) است. .PP گزینه‌های داخلی AVR .IX Subsection "AVR Internal Options" .PP گزینه‌های زیر به صورت داخلی توسط کامپایلر و برای برقراری ارتباط بین پرونده‌های مشخصات افزاره (device specs) و خود کامپایلر استفاده می‌شوند. نیازی به تنظیم دستی این گزینه‌ها ندارید؛ به‌ویژه آنکه آن‌ها گزینه‌های بهینه‌سازی نیستند. استفاده نادرست از این گزینه‌ها ممکن است به کدهای غیربهینه یا اشتباه منجر شود. این گزینه‌ها صرفاً جهت کامل بودن مستندات و به منظور درک بهتر پرونده‌های device\ specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR) مستند شده‌اند..IP \fB\-mn\-flash=\fR\fInum\fR 4 .IX Item "-mn-flash=num" فرض می‌کند که حافظه فلش دارای اندازه‌ای برابر با \fInum\fR ضرب در ۶۴ کیبی‌بایت (KiB) است. این گزینه مشخص می‌کند کدام فضاهای آدرس \f(CW\*(C`_\|_flash\fR\f(CIN\fR\f(CW\*(C'\fR در دسترس هستند. .IP \fB\-mflmap\fR 4 .IX Item "-mflmap" دستگاه دارای میدان بیتی \f(CW\*(C`FLMAP\*(C'\fR واقع در ثبات عملکرد خاص \f(CW\*(C`NVMCTRL_CTRLB\*(C'\fR است. .IP \fB\-mrmw\fR 4 .IX Item "-mrmw" فرض می‌کند که دستگاه از دستورالعمل‌های خواندن\-تغییر\-نوشتن (Read\-Modify\-Write) شامل \f(CW\*(C`XCH\*(C'\fR، \f(CW\*(C`LAC\*(C'\fR، \f(CW\*(C`LAS\*(C'\fR و \f(CW\*(C`LAT\*(C'\fR پشتیبانی می‌کند. .IP \fB\-mshort\-calls\fR 4 .IX Item "-mshort-calls" فرض می‌کند که \f(CW\*(C`RJMP\*(C'\fR و \f(CW\*(C`RCALL\*(C'\fR می‌توانند کل حافظه برنامه را هدف قرار دهند. این گزینه برای تولید و انتخاب multilib برای دستگاه‌های معماری \f(CW\*(C`avrxmega3\*(C'\fR استفاده می‌شود. .IP \fB\-mskip\-bug\fR 4 .IX Item "-mskip-bug" کد را بدون پرش (\f(CW\*(C`CPSE\*(C'\fR، \f(CW\*(C`SBRS\*(C'\fR، \&\f(CW\*(C`SBRC\*(C'\fR، \f(CW\*(C`SBIS\*(C'\fR، \f(CW\*(C`SBIC\*(C'\fR) روی دستورالعمل‌های ۳۲ بیتی تولید می‌کند. .IP \fB\-msp8\fR 4 .IX Item "-msp8" با ثبات اشاره‌گر پشته به عنوان یک ثبات ۸ بیتی رفتار می‌کند، یعنی بایت بالای اشاره‌گر پشته صفر فرض می‌شود. این گزینه توسط کامپایلر برای انتخاب و ساخت multilibها برای معماری‌های \f(CW\*(C`avr2\*(C'\fR و \f(CW\*(C`avr25\*(C'\fR استفاده می‌شود. این معماری‌ها دستگاه‌های با و بدون \f(CW\*(C`SPH\*(C'\fR را ترکیب می‌کنند. .PP \fIگزینه‌های Blackfin\fR .IX Subsection "Blackfin Options" .IP \fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 4 .IX Item "-mcpu=cpu[-sirevision]" نام پردازنده Blackfin هدف را مشخص می‌کند. در حال حاضر، \fIcpu\fR می‌تواند یکی از مقادیر \fBbf512\fR، \fBbf514\fR، \fBbf516\fR، \fBbf518\fR، \&\fBbf522\fR، \fBbf523\fR، \fBbf524\fR، \fBbf525\fR، \fBbf526\fR، \&\fBbf527\fR، \fBbf531\fR، \fBbf532\fR، \fBbf533\fR، \&\fBbf534\fR، \fBbf536\fR، \fBbf537\fR، \fBbf538\fR، \fBbf539\fR، \&\fBbf542\fR، \fBbf544\fR، \fBbf547\fR، \fBbf548\fR، \fBbf549\fR، \&\fBbf542m\fR، \fBbf544m\fR، \fBbf547m\fR، \fBbf548m\fR، \fBbf549m\fR، \&\fBbf561\fR یا \fBbf592\fR باشد. .Sp بخش اختیاری \fIsirevision\fR نسخه سیلیکون پردازنده Blackfin هدف را مشخص می‌کند. تمام راهکارهای دور زدن مشکل (workaround) موجود برای نسخه سیلیکون هدف فعال می‌شوند. اگر \fIsirevision\fR برابر با \fBnone\fR باشد، هیچ راهکاری فعال نخواهد شد. اگر \fIsirevision\fR برابر با \fBany\fR باشد، تمام راهکارها برای پردازنده هدف فعال می‌شوند. ماکروی \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR به صورت دو رقم هگزادسیمال نشان‌دهنده اعداد اصلی و فرعی در نسخه سیلیکون تعریف می‌شود. اگر \fIsirevision\fR برابر با \fBnone\fR باشد، ماکروی \&\f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR تعریف نمی‌شود. اگر \fIsirevision\fR برابر با \fBany\fR باشد، \f(CW\*(C`_\|_SILICON_REVISION_\|_\*(C'\fR به صورت \f(CW0xffff\fR تعریف می‌گردد. اگر این \fIsirevision\fR اختیاری استفاده نشود، GCC جدیدترین نسخه سیلیکون شناخته‌شده از پردازنده Blackfin هدف را فرض می‌کند. .Sp کامپایلر GCC یک ماکروی پیش‌پردازنده برای \fIcpu\fR مشخص‌شده تعریف می‌کند. برای زنجیره ابزار \fBbfin\-elf\fR، این گزینه باعث می‌شود در صورت عدم تعیین \&\fB\-msim\fR، بسته پشتیبانی سخت‌افزار (BSP) ارائه‌شده توسط libgloss پیوند زده شود. .Sp بدون این گزینه، به‌طور پیش‌فرض از \fBbf532\fR به عنوان پردازنده استفاده می‌شود. .Sp توجه داشته باشید که پشتیبانی از \fBbf561\fR ناقص است. برای \fBbf561\fR، تنها ماکروی پیش‌پردازنده تعریف شده است. .IP \fB\-msim\fR 4 .IX Item "-msim" مشخص می‌کند که برنامه روی شبیه‌ساز اجرا خواهد شد. این گزینه باعث پیوند خوردن BSP شبیه‌ساز ارائه‌شده توسط libgloss می‌شود. این گزینه فقط برای زنجیره ابزار \fBbfin\-elf\fR اثر دارد. برخی گزینه‌های دیگر مانند \fB\-mid\-shared\-library\fR و \&\fB\-mfdpic\fR متضمن \fB\-msim\fR هستند. .IP \fB\-momit\-leaf\-frame\-pointer\fR 4 .IX Item "-momit-leaf-frame-pointer" اشاره‌گر فریم را در ثباتی برای توابع برگ (leaf) نگه نمی‌دارد. این کار از دستورالعمل‌های ذخیره، راه‌اندازی و بازیابی اشاره‌گرهای فریم جلوگیری کرده و یک ثبات اضافه را در توابع برگ در دسترس قرار می‌دهد. .IP \fB\-mspecld\-anomaly\fR 4 .IX Item "-mspecld-anomaly" در صورت فعال بودن، کامپایلر اطمینان حاصل می‌کند که کد تولیدشده شامل بارهای حدسی (speculative loads) پس از دستورالعمل‌های پرش نباشد. در صورت استفاده از این گزینه، \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR تعریف می‌شود. .IP \fB\-mno\-specld\-anomaly\fR 4 .IX Item "-mno-specld-anomaly" کد اضافی برای جلوگیری از وقوع بارهای حدسی تولید نمی‌کند. .IP \fB\-mcsync\-anomaly\fR 4 .IX Item "-mcsync-anomaly" در صورت فعال بودن، کامپایلر اطمینان حاصل می‌کند که کد تولیدشده بلافاصله پس از شاخه‌های شرطی شامل دستورالعمل‌های CSYNC یا SSYNC نباشد. در صورت استفاده از این گزینه، \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR تعریف می‌شود. .IP \fB\-mno\-csync\-anomaly\fR 4 .IX Item "-mno-csync-anomaly" کد اضافی برای جلوگیری از وقوع دستورالعمل‌های CSYNC یا SSYNC بلافاصله پس از یک شاخه شرطی تولید نمی‌کند. .IP \fB\-mlow64k\fR 4 .IX Item "-mlow64k" در صورت فعال بودن، کامپایلر مجاز است با تکیه بر این آگاهی که کل برنامه در ۶۴ کیلوبایت پایینی حافظه جا می‌گیرد، کد را بهینه‌سازی کند. .IP \fB\-mno\-low64k\fR 4 .IX Item "-mno-low64k" فرض می‌کند که برنامه می‌تواند به هر اندازه بزرگ باشد. این حالت پیش‌فرض است. .IP \fB\-mstack\-check\-l1\fR 4 .IX Item "-mstack-check-l1" بررسی پشته را با استفاده از اطلاعات قرارگرفته در حافظه چرک‌نویس (scratchpad) L1 توسط کرنل uClinux انجام می‌دهد. .IP \fB\-mid\-shared\-library\fR 4 .IX Item "-mid-shared-library" کدی تولید می‌کند که از طریق روش شناسه کتابخانه (library ID method) از کتابخانه‌های اشتراکی پشتیبانی می‌کند. این کار امکان اجرای درجا (execute in place) و استفاده از کتابخانه‌های اشتراکی را در محیط‌های بدون مدیریت حافظه مجازی فراهم می‌سازد. این گزینه متضمن \fB\-fPIC\fR است. با هدف \fBbfin\-elf\fR، این گزینه متضمن \fB\-msim\fR است. .IP \fB\-mno\-id\-shared\-library\fR 4 .IX Item "-mno-id-shared-library" کدی تولید می‌کند که فرض نمی‌کند کتابخانه‌های اشتراکی مبتنی بر ID در حال استفاده هستند. این حالت پیش‌فرض است. .IP \fB\-mleaf\-id\-shared\-library\fR 4 .IX Item "-mleaf-id-shared-library" کدی تولید می‌کند که از طریق روش شناسه کتابخانه از کتابخانه‌های اشتراکی پشتیبانی می‌کند، اما فرض را بر این می‌گذارد که این کتابخانه یا فایل اجرایی به هیچ کتابخانه اشتراکی مبتنی بر ID دیگری پیوند نخواهد خورد. این به کامپایلر اجازه می‌دهد از کد سریع‌تری برای پرش‌ها و فراخوانی‌ها استفاده کند. .IP \fB\-mno\-leaf\-id\-shared\-library\fR 4 .IX Item "-mno-leaf-id-shared-library" فرض نمی‌کند که کد در حال کامپایل به کتابخانه‌های اشتراکی مبتنی بر ID دیگر پیوند نخواهد خورد. برای دستورالعمل‌های پرش و فراخوانی کد کندتری تولید می‌شود. .IP \fB\-mshared\-library\-id=n\fR 4 .IX Item "-mshared-library-id=n" شماره شناسایی کتابخانه اشتراکی مبتنی بر ID در حال کامپایل را مشخص می‌کند. تعیین مقدار 0 کد فشرده‌تری تولید می‌کند؛ تعیین مقادیر دیگر تخصیص آن شماره را به کتابخانه فعلی اجباری می‌کند اما از نظر فضا یا زمان بهینه‌تر از حذف این گزینه نیست. .IP \fB\-msep\-data\fR 4 .IX Item "-msep-data" کدی تولید می‌کند که امکان قرارگیری قطعه داده (data segment) را در ناحیه‌ای از حافظه متفاوت با قطعه متن (text segment) فراهم می‌سازد. این ویژگی با حذف بازنشانی‌ها (relocations) نسبت به بخش متن، امکان اجرای درجا را در محیطی بدون مدیریت حافظه مجازی فراهم می‌کند. .IP \fB\-mno\-sep\-data\fR 4 .IX Item "-mno-sep-data" کدی تولید می‌کند که فرض می‌کند قطعه داده بلافاصله پس از قطعه متن قرار دارد. این حالت پیش‌فرض است. .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" .PD 0 .IP \fB\-mno\-long\-calls\fR 4 .IX Item "-mno-long-calls" .PD به کامپایلر اعلام می‌کند که فراخوانی‌های تابع را با بارگذاری اولیه آدرس تابع در یک ثبات و سپس انجام فراخوانی زیرروال بر روی این ثبات انجام دهد. این گزینه در صورتی مورد نیاز است که تابع هدف خارج از محدوده آدرس‌دهی ۲۴ بیتیِ نسخه مبتنی بر آفست دستورالعمل فراخوانی زیرروال قرار داشته باشد. .Sp این قابلیت به‌طور پیش‌فرض فعال نیست. تعیین \fB\-mno\-long\-calls\fR رفتار پیش‌فرض را بازمی‌گرداند. توجه داشته باشید این گزینه‌ها تاثیری بر چگونگی تولید کد توسط کامپایلر جهت مدیریت فراخوانی‌های تابع از طریق اشاره‌گرهای تابع ندارند. .IP \fB\-mfast\-fp\fR 4 .IX Item "-mfast-fp" با کتابخانه ممیز شناور سریع پیوند می‌دهد. این کتابخانه به جهت بهبود کارایی، برخی از قوانین استاندارد ممیز شناور IEEE را برای بررسی ورودی‌ها در برابر «ناعدد» (NAN) نادیده می‌گیرد یا ساده‌تر می‌کند. .IP \fB\-minline\-plt\fR 4 .IX Item "-minline-plt" درون‌خط‌سازی مدخل‌های PLT را در فراخوانی‌های مربوط به توابعی که مشخص نیست به صورت محلی پیوند می‌خورند فعال می‌کند. این گزینه بدون \fB\-mfdpic\fR هیچ اثری ندارد. .IP \fB\-mmulticore\fR 4 .IX Item "-mmulticore" یک برنامه مستقل برای پردازنده‌های چند‌هسته‌ای Blackfin می‌سازد. این گزینه باعث می‌شود فایل‌های راه‌اندازی و اسکریپت‌های پیونددهنده مناسب برای پشتیبانی از چندهسته‌ای استفاده شوند، و ماکروی \f(CW\*(C`_\|_BFIN_MULTICORE\*(C'\fR را تعریف می‌کند. این گزینه تنها همراه با \fB\-mcpu=bf561\fR[\fB\-\fR\fIsirevision\fR] قابل استفاده است. .Sp این گزینه می‌تواند همراه با \fB\-mcorea\fR یا \fB\-mcoreb\fR استفاده شود که مدل برنامه‌نویسی «یک برنامه به ازای هر هسته» را انتخاب می‌کند. بدون \&\fB\-mcorea\fR یا \fB\-mcoreb\fR، مدل برنامه‌نویسی «تک‌برنامه/دو‌هسته‌ای» استفاده می‌شود. در این مدل، تابع اصلی Core B باید با نام \f(CW\*(C`coreb_main\*(C'\fR تعریف شود. .Sp اگر از این گزینه استفاده نشود، مدل برنامه‌نویسی برنامه تک‌هسته‌ای به کار گرفته می‌شود. .IP \fB\-mcorea\fR 4 .IX Item "-mcorea" هنگام استفاده از مدل برنامه‌نویسی یک برنامه به ازای هر هسته، یک برنامه مستقل برای Core A از BF561 می‌سازد. از فایل‌های راه‌اندازی و اسکریپت‌های پیونددهنده مناسب برای پشتیبانی از Core A استفاده می‌شود، و ماکروی \&\f(CW\*(C`_\|_BFIN_COREA\*(C'\fR تعریف می‌گردد. این گزینه فقط در ترکیب با \fB\-mmulticore\fR قابل استفاده است..IP \fB\-mcoreb\fR 4 .IX Item "-mcoreb" یک برنامه مستقل (standalone) را برای Core B از پردازنده BF561 هنگام استفاده از مدل برنامه‌نویسی یک\-برنامه\-به\-ازای\-هر\-هسته می‌سازد. فایل‌های راه‌اندازی مناسب و اسکریپت‌های پیوند برای پشتیبانی از Core B به کار گرفته می‌شوند و ماکروی \&\f(CW\*(C`_\|_BFIN_COREB\*(C'\fR تعریف می‌شود. هنگامی که از این گزینه استفاده شود، باید به جای \f(CW\*(C`main\*(C'\fR از \f(CW\*(C`coreb_main\*(C'\fR استفاده گردد. این گزینه تنها می‌تواند در ترکیب با \fB\-mmulticore\fR به کار رود. .IP \fB\-msdram\fR 4 .IX Item "-msdram" یک برنامه مستقل برای SDRAM می‌سازد. فایل‌های راه‌اندازی و اسکریپت‌های پیوند مناسب برای قرار دادن برنامه در SDRAM به کار گرفته می‌شوند و ماکروی \&\f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR تعریف می‌شود. بارگذار (loader) باید پیش از بارگذاری برنامه، SDRAM را مقداردهی اولیه کند. .IP \fB\-micplb\fR 4 .IX Item "-micplb" فرض می‌کند که ICPLBها در زمان اجرا فعال هستند. این امر بر راهکارهای دور زدن ناهنجاری‌های (anomaly workarounds) خاصی تأثیر دارد. برای مقصدهای Linux، پیش‌فرض این است که فرض شود ICPLBها فعال هستند؛ برای برنامه‌های مستقل پیش‌فرض غیرفعال است. .PP \fIگزینه‌های C6X\fR .IX Subsection "C6X Options" .IP \fB\-march=\fR\fIname\fR 4 .IX Item "-march=name" نام معماری مقصد را مشخص می‌کند. GCC از این نام برای تعیین نوع دستورالعمل‌هایی که می‌تواند هنگام تولید کد اسمبلی صادر کند، استفاده می‌کند. نام‌های مجاز عبارتند از: \fBc62x\fR، \&\fBc64x\fR، \fBc64x+\fR، \fBc67x\fR، \fBc67x+\fR و \fBc674x\fR. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد برای یک مقصد big\-endian. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد برای یک مقصد little\-endian. این حالت پیش‌فرض است. .IP \fB\-msim\fR 4 .IX Item "-msim" انتخاب فایل‌های راه‌اندازی و اسکریپت پیونددهنده مناسب برای شبیه‌ساز. .IP \fB\-msdata=default\fR 4 .IX Item "-msdata=default" قرار دادن داده‌های سراسری و ایستای کوچک در بخش \f(CW\*(C`.neardata\*(C'\fR که ثبات \f(CW\*(C`B14\*(C'\fR به آن اشاره می‌کند. داده‌های سراسری و ایستای کوچک مقداردهی‌نشده را در بخش \f(CW\*(C`.bss\*(C'\fR که مجاور بخش \f(CW\*(C`.neardata\*(C'\fR است قرار می‌دهد. داده‌های کوچک فقط‌خواندنی را در بخش \&\f(CW\*(C`.rodata\*(C'\fR قرار می‌دهد. بخش‌های متناظر مورد استفاده برای داده‌های بزرگ عبارتند از \f(CW\*(C`.fardata\*(C'\fR، \f(CW\*(C`.far\*(C'\fR و \f(CW\*(C`.const\*(C'\fR. .IP \fB\-msdata=all\fR 4 .IX Item "-msdata=all" قرار دادن تمام داده‌ها، و نه فقط اشیاء کوچک، در بخش‌های رزروشده برای داده‌های کوچک، و استفاده از آدرس‌دهی نسبی به ثبات \f(CW\*(C`B14\*(C'\fR برای دسترسی به آن‌ها. .IP \fB\-msdata=none\fR 4 .IX Item "-msdata=none" عدم استفاده از بخش‌های رزروشده برای داده‌های کوچک، و استفاده از آدرس‌های مطلق برای دسترسی به تمام داده‌ها. تمام داده‌های سراسری و ایستای مقداردهی‌شده را در بخش \f(CW\*(C`.fardata\*(C'\fR و تمام داده‌های مقداردهی‌نشده را در بخش \&\f(CW\*(C`.far\*(C'\fR قرار می‌دهد. تمام داده‌های ثابت را در بخش \f(CW\*(C`.const\*(C'\fR قرار می‌دهد. .PP \fIگزینه‌های CRIS\fR .IX Subsection "CRIS Options" .PP این گزینه‌ها به طور خاص برای پورت‌های CRIS تعریف شده‌اند. .IP \fB\-march=\fR\fIarchitecture\-type\fR 4 .IX Item "-march=architecture-type" .PD 0 .IP \fB\-mcpu=\fR\fIarchitecture\-type\fR 4 .IX Item "-mcpu=architecture-type" .PD تولید کد برای معماری مشخص‌شده. گزینه‌های انتخابی برای \&\fIarchitecture\-type\fR به ترتیب عبارتند از \fBv3\fR، \fBv8\fR و \fBv10\fR برای ETRAX\ 4، ETRAX\ 100 و ETRAX\ 100\ LX. پیش‌فرض \fBv0\fR است. .IP \fB\-mtune=\fR\fIarchitecture\-type\fR 4 .IX Item "-mtune=architecture-type" تنظیم بهینه (tune) تمامی موارد قابل اعمال در کد تولیدشده برای \fIarchitecture\-type\fR، به جز ABI و مجموعه دستورالعمل‌های در دسترس. گزینه‌های انتخابی برای \fIarchitecture\-type\fR همانند گزینه‌های \&\fB\-march=\fR\fIarchitecture\-type\fR هستند. .IP \fB\-mmax\-stack\-frame=\fR\fIn\fR 4 .IX Item "-mmax-stack-frame=n" هشدار دادن در صورتی که فریم پشته (stack frame) یک تابع از \fIn\fR بایت فراتر رود. .IP \fB\-metrax4\fR 4 .IX Item "-metrax4" .PD 0 .IP \fB\-metrax100\fR 4 .IX Item "-metrax100" .PD گزینه‌های \fB\-metrax4\fR و \fB\-metrax100\fR به ترتیب مترادف‌های \&\fB\-march=v3\fR و \fB\-march=v8\fR هستند. .IP \fB\-mmul\-bug\-workaround\fR 4 .IX Item "-mmul-bug-workaround" .PD 0 .IP \fB\-mno\-mul\-bug\-workaround\fR 4 .IX Item "-mno-mul-bug-workaround" .PD دور زدن یک باگ در دستورالعمل‌های \f(CW\*(C`muls\*(C'\fR و \f(CW\*(C`mulu\*(C'\fR برای مدل‌های پردازنده‌ای که در آن‌ها رخ می‌دهد. این گزینه به طور پیش‌فرض غیرفعال است. .IP \fB\-mpdebug\fR 4 .IX Item "-mpdebug" فعال‌سازی اطلاعات مفصل اشکال‌زدایی مخصوص CRIS در کد اسمبلی. این گزینه همچنین اثر غیرفعال کردن نشانگر کد قالب‌بندی‌شده‌ی \fB#NO_APP\fR به اسمبلر در ابتدای فایل اسمبلی را دارد. .IP \fB\-mcc\-init\fR 4 .IX Item "-mcc-init" عدم استفاده از نتایج کدهای وضعیت (condition codes) حاصل از دستورالعمل قبلی؛ همواره پیش از استفاده از کدهای وضعیت، دستورالعمل‌های مقایسه و آزمون را صادر می‌کند. .IP \fB\-mno\-side\-effects\fR 4 .IX Item "-mno-side-effects" عدم صدور دستورالعمل‌های دارای اثرات جانبی در حالت‌های آدرس‌دهی غیر از پس‌افزایش (post\-increment). .IP \fB\-mstack\-align\fR 4 .IX Item "-mstack-align" .PD 0 .IP \fB\-mno\-stack\-align\fR 4 .IX Item "-mno-stack-align" .IP \fB\-mdata\-align\fR 4 .IX Item "-mdata-align" .IP \fB\-mno\-data\-align\fR 4 .IX Item "-mno-data-align" .IP \fB\-mconst\-align\fR 4 .IX Item "-mconst-align" .IP \fB\-mno\-const\-align\fR 4 .IX Item "-mno-const-align" .PD این گزینه‌ها (گزینه‌های \fBno\-\fR) ترتیب هم‌ترازی (حذف ترتیب هم‌ترازی) فریم پشته، تک‌تک داده‌ها و مقادیر ثابت را برای حداکثر اندازه دسترسی تکی به داده در مدل پردازنده انتخاب‌شده فراهم می‌کنند. پیش‌فرض، تنظیم هم‌ترازی ۳۲ بیتی است. جزئیات ABI مانند چیدمان ساختار تحت تأثیر این گزینه‌ها قرار نمی‌گیرند. .IP \fB\-m32\-bit\fR 4 .IX Item "-m32-bit" .PD 0 .IP \fB\-m16\-bit\fR 4 .IX Item "-m16-bit" .IP \fB\-m8\-bit\fR 4 .IX Item "-m8-bit" .PD مشابه گزینه‌های تراز stack\-، data\- و const\- در بالا، این گزینه‌ها فریم پشته، داده‌های قابل نوشتن و ثوابت را به گونه‌ای تنظیم می‌کنند که همگی ۳۲ بیتی، ۱۶ بیتی یا ۸ بیتی تراز شوند. پیش‌فرض، تراز ۳۲ بیتی است. .IP \fB\-mno\-prologue\-epilogue\fR 4 .IX Item "-mno-prologue-epilogue" .PD 0 .IP \fB\-mprologue\-epilogue\fR 4 .IX Item "-mprologue-epilogue" .PD با گزینه \fB\-mno\-prologue\-epilogue\fR، پیش‌درآمد (prologue) و پس‌درآمد (epilogue) عادی تابع که فریم پشته را برپا می‌کنند حذف می‌شوند و هیچ دستور بازگشت یا دنباله بازگشتی در کد تولید نمی‌شود. از این گزینه تنها به همراه بررسی چشمی کد کامپایل‌شده استفاده کنید: هیچ هشدار یا خطایی در هنگامی که ثبات‌های فراخوانی‌محفوظ (call\-saved registers) باید ذخیره شوند یا فضا برای متغیرهای محلی باید تخصیص یابد، تولید نمی‌شود. .IP \fB\-melf\fR 4 .IX Item "-melf" گزینه بدون عملیات (no\-op) قدیمی. .IP \fB\-sim\fR 4 .IX Item "-sim" این گزینه پیوند دادن با توابع ورودی\-خروجی کتابخانه شبیه‌ساز را ترتیب می‌دهد. کد، داده‌های مقداردهی‌شده و داده‌های مقداردهی‌شده با صفر به صورت متوالی تخصیص می‌یابند. .IP \fB\-sim2\fR 4 .IX Item "-sim2" مانند \fB\-sim\fR، اما گزینه‌های پیونددهنده‌ای را ارسال می‌کند تا داده‌های مقداردهی‌شده را در 0x40000000 و داده‌های مقداردهی‌شده با صفر را در 0x80000000 جای‌گذاری کند. .PP \fIگزینه‌های C\-SKY\fR .IX Subsection "C-SKY Options" .PP کامپایلر GCC هنگام کامپایل برای پردازنده‌های C\-SKY V2 از این گزینه‌ها پشتیبانی می‌کند. .IP \fB\-march=\fR\fIarch\fR 4 .IX Item "-march=arch" معماری مقصد C\-SKY را مشخص می‌کند. مقادیر معتبر برای \fIarch\fR عبارتند از: \&\fBck801\fR، \fBck802\fR، \fBck803\fR، \fBck807\fR و \fBck810\fR. پیش‌فرض \fBck810\fR است. .IP \fB\-mcpu=\fR\fIcpu\fR 4 .IX Item "-mcpu=cpu" پردازنده مقصد C\-SKY را مشخص می‌کند. مقادیر معتبر برای \fIcpu\fR عبارتند از: \&\fBck801\fR، \fBck801t\fR، \&\fBck802\fR، \fBck802t\fR، \fBck802j\fR، \&\fBck803\fR، \fBck803h\fR، \fBck803t\fR، \fBck803ht\fR، \&\fBck803f\fR، \fBck803fh\fR، \fBck803e\fR، \fBck803eh\fR، \&\fBck803et\fR، \fBck803eht\fR، \fBck803ef\fR، \fBck803efh\fR، \&\fBck803ft\fR، \fBck803eft\fR، \fBck803efht\fR، \fBck803r1\fR، \&\fBck803hr1\fR، \fBck803tr1\fR، \fBck803htr1\fR، \fBck803fr1\fR، \&\fBck803fhr1\fR، \fBck803er1\fR، \fBck803ehr1\fR، \fBck803etr1\fR، \&\fBck803ehtr1\fR، \fBck803efr1\fR، \fBck803efhr1\fR، \fBck803ftr1\fR، \&\fBck803eftr1\fR، \fBck803efhtr1\fR، \&\fBck803s\fR، \fBck803st\fR، \fBck803se\fR، \fBck803sf\fR، \&\fBck803sef\fR، \fBck803seft\fR، \&\fBck807e\fR، \fBck807ef\fR، \fBck807\fR، \fBck807f\fR، \&\fBck810e\fR، \fBck810et\fR، \fBck810ef\fR، \fBck810eft\fR، \&\fBck810\fR، \fBck810v\fR، \fBck810f\fR، \fBck810t\fR، \fBck810fv\fR، \&\fBck810tv\fR، \fBck810ft\fR و \fBck810ftv\fR..IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" .PD 0 .IP \fB\-EB\fR 4 .IX Item "-EB" .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" .IP \fB\-EL\fR 4 .IX Item "-EL" .PD کد big\-endian یا little\-endian را انتخاب می‌کند. حالت پیش‌فرض little\-endian است. .IP \fB\-mfloat\-abi=\fR\fIname\fR 4 .IX Item "-mfloat-abi=name" مشخص می‌کند کدام ABI ممیز شناور استفاده شود. مقادیر مجاز عبارتند از: \&\fBsoft\fR، \fBsoftfp\fR و \fBhard\fR. .Sp مشخص کردن \fBsoft\fR باعث می‌شود GCC خروجی‌ای حاوی فراخوانی‌های کتابخانه‌ای برای عملیات ممیز شناور تولید کند. \&\fBsoftfp\fR امکان تولید کد با استفاده از دستورالعمل‌های سخت‌افزاری ممیز شناور را فراهم می‌کند، اما همچنان از قراردادهای فراخوانی soft\-float استفاده می‌نماید. \&\fBhard\fR اجازه تولید دستورالعمل‌های ممیز شناور را داده و از قراردادهای فراخوانی مختص FPU استفاده می‌کند. .Sp مقدار پیش‌فرض به پیکربندی مقصد خاص بستگی دارد. توجه داشته باشید که ABIهای hard\-float و soft\-float از نظر پیوند (link) با یکدیگر سازگار نیستند؛ باید کل برنامه خود را با همان ABI کامپایل کرده و با مجموعه‌ای سازگار از کتابخانه‌ها پیوند دهید. .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD 0 .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD پیاده‌سازی‌های سخت‌افزاری یا نرم‌افزاری ممیز شناور را انتخاب می‌کند. پیش‌فرض soft float است. .IP \fB\-mdouble\-float\fR 4 .IX Item "-mdouble-float" .PD 0 .IP \fB\-mno\-double\-float\fR 4 .IX Item "-mno-double-float" .PD هنگامی که \fB\-mhard\-float\fR فعال است، تولید دستورالعمل‌های ممیز شناور با دقت مضاعف (double\-precision) را فعال می‌کند. این حالت پیش‌فرض است مگر هنگام کامپایل برای CK803. .IP \fB\-mfdivdu\fR 4 .IX Item "-mfdivdu" .PD 0 .IP \fB\-mno\-fdivdu\fR 4 .IX Item "-mno-fdivdu" .PD هنگامی که \fB\-mhard\-float\fR فعال است، تولید دستورالعمل‌های \&\f(CW\*(C`frecipd\*(C'\fR، \f(CW\*(C`fsqrtd\*(C'\fR و \f(CW\*(C`fdivd\*(C'\fR را فعال می‌کند. این حالت پیش‌فرض است مگر هنگام کامپایل برای CK803. .IP \fB\-mfpu=\fR\fIfpu\fR 4 .IX Item "-mfpu=fpu" پردازنده ممیز شناور را انتخاب می‌کند. این گزینه فقط همراه با \&\fB\-mhard\-float\fR قابل استفاده است. مقادیر مجاز برای \fIfpu\fR عبارتند از: \&\fBfpv2_sf\fR (معادل با \fB\-mno\-double\-float \-mno\-fdivdu\fR)، \&\fBfpv2\fR (\fB\-mdouble\-float \-mno\-divdu\fR) و \&\fBfpv2_divd\fR (\fB\-mdouble\-float \-mdivdu\fR). .IP \fB\-melrw\fR 4 .IX Item "-melrw" .PD 0 .IP \fB\-mno\-elrw\fR 4 .IX Item "-mno-elrw" .PD دستورالعمل گسترش‌یافتهٔ \f(CW\*(C`lrw\*(C'\fR را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای CK801 فعال و در غیر این صورت غیرفعال است. .IP \fB\-mistack\fR 4 .IX Item "-mistack" .PD 0 .IP \fB\-mno\-istack\fR 4 .IX Item "-mno-istack" .PD دستورالعمل‌های پشته وقفه را فعال می‌کند؛ پیش‌فرض غیرفعال است. .Sp گزینه \fB\-mistack\fR برای رسیدگی به ویژگی‌های تابعی \&\f(CW\*(C`interrupt\*(C'\fR و \f(CW\*(C`isr\*(C'\fR الزامی است. .IP \fB\-mmp\fR 4 .IX Item "-mmp" دستورالعمل‌های چندپردازنده‌ای را فعال می‌کند؛ پیش‌فرض غیرفعال است. .IP \fB\-mcp\fR 4 .IX Item "-mcp" دستورالعمل‌های کمک‌پردازنده را فعال می‌کند؛ پیش‌فرض غیرفعال است. .IP \fB\-mcache\fR 4 .IX Item "-mcache" دستورالعمل‌های کمک‌پردازنده را فعال می‌کند؛ پیش‌فرض غیرفعال است. .IP \fB\-msecurity\fR 4 .IX Item "-msecurity" دستورالعمل‌های امنیتی C\-SKY را فعال می‌کند؛ پیش‌فرض غیرفعال است. .IP \fB\-mtrust\fR 4 .IX Item "-mtrust" دستورالعمل‌های اعتمادسنجی C\-SKY را فعال می‌کند؛ پیش‌فرض غیرفعال است. .IP \fB\-mdsp\fR 4 .IX Item "-mdsp" .PD 0 .IP \fB\-medsp\fR 4 .IX Item "-medsp" .IP \fB\-mvdsp\fR 4 .IX Item "-mvdsp" .PD به ترتیب دستورالعمل‌های C\-SKY DSP، ‏Enhanced DSP یا Vector DSP را فعال می‌کند. تمام این گزینه‌ها به‌طور پیش‌فرض غیرفعال هستند. .IP \fB\-mdiv\fR 4 .IX Item "-mdiv" .PD 0 .IP \fB\-mno\-div\fR 4 .IX Item "-mno-div" .PD دستورالعمل‌های تقسیم را تولید می‌کند. پیش‌فرض غیرفعال است. .IP \fB\-msmart\fR 4 .IX Item "-msmart" .PD 0 .IP \fB\-mno\-smart\fR 4 .IX Item "-mno-smart" .PD کد را برای حالت Smart تولید می‌کند که تنها از ثبات‌های شماره‌گذاری‌شده 0\-7 برای امکان استفاده از دستورالعمل‌های ۱۶ بیتی استفاده می‌کند. این گزینه برای CK801 که این رفتار برای آن الزامی است نادیده گرفته می‌شود، و به‌طور پیش‌فرض برای CK802 فعال است. برای سایر مقاصد، پیش‌فرض غیرفعال است. .IP \fB\-mhigh\-registers\fR 4 .IX Item "-mhigh-registers" .PD 0 .IP \fB\-mno\-high\-registers\fR 4 .IX Item "-mno-high-registers" .PD کد را با استفاده از ثبات‌های بالایی شماره‌گذاری‌شده 16\-31 تولید می‌کند. این گزینه در CK801، ‏CK802 یا CK803 پشتیبانی نمی‌شود، و به‌طور پیش‌فرض برای سایر پردازنده‌ها فعال است. .IP \fB\-manchor\fR 4 .IX Item "-manchor" .PD 0 .IP \fB\-mno\-anchor\fR 4 .IX Item "-mno-anchor" .PD کد را با استفاده از آدرس‌های نماد لنگر سراسری (global anchor symbol) تولید می‌کند. .IP \fB\-mpushpop\fR 4 .IX Item "-mpushpop" .PD 0 .IP \fB\-mno\-pushpop\fR 4 .IX Item "-mno-pushpop" .PD کد را با استفاده از دستورالعمل‌های \f(CW\*(C`push\*(C'\fR و \f(CW\*(C`pop\*(C'\fR تولید می‌کند. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-mmultiple\-stld\fR 4 .IX Item "-mmultiple-stld" .PD 0 .IP \fB\-mstm\fR 4 .IX Item "-mstm" .IP \fB\-mno\-multiple\-stld\fR 4 .IX Item "-mno-multiple-stld" .IP \fB\-mno\-stm\fR 4 .IX Item "-mno-stm" .PD کد را با استفاده از دستورالعمل‌های \f(CW\*(C`stm\*(C'\fR و \f(CW\*(C`ldm\*(C'\fR تولید می‌کند. این گزینه در CK801 پشتیبانی نمی‌شود اما به‌طور پیش‌فرض در سایر پردازنده‌ها فعال است. .IP \fB\-mconstpool\fR 4 .IX Item "-mconstpool" .PD 0 .IP \fB\-mno\-constpool\fR 4 .IX Item "-mno-constpool" .PD استخرهای مقادیر ثابت (constant pools) را درون کامپایلر ایجاد می‌کند به جای آنکه آن را به اسمبلر موکول کند. این گزینه حالت پیش‌فرض بوده و برای تولید کد صحیح روی CK801 و CK802 الزامی است، و در سایر پردازنده‌ها اختیاری می‌باشد. .IP \fB\-mstack\-size\fR 4 .IX Item "-mstack-size" .PD 0 .IP \fB\-mno\-stack\-size\fR 4 .IX Item "-mno-stack-size" .PD دستورات راهنمای \f(CW\*(C`.stack_size\*(C'\fR را برای هر تابع در خروجی اسمبلی درج می‌کند. این گزینه به‌طور پیش‌فرض غیرفعال است. .IP \fB\-mccrt\fR 4 .IX Item "-mccrt" .PD 0 .IP \fB\-mno\-ccrt\fR 4 .IX Item "-mno-ccrt" .PD کد را به جای libgcc برای زمان‌اجرای (runtime) کامپایلر C\-SKY تولید می‌کند. این گزینه به‌طور پیش‌فرض غیرفعال است..IP \fB\-mbranch\-cost=\fR\fIn\fR 4 .IX Item "-mbranch-cost=n" هزینهٔ انشعاب‌ها را تقریباً به اندازهٔ \f(CW\*(C`n\*(C'\fR دستورالعمل تنظیم می‌کند. مقدار پیش‌فرض 1 است. .IP \fB\-msched\-prolog\fR 4 .IX Item "-msched-prolog" .PD 0 .IP \fB\-mno\-sched\-prolog\fR 4 .IX Item "-mno-sched-prolog" .PD اجازهٔ زمان‌بندی توالی‌های مقدمه (prologue) و مؤخره (epilogue) تابع را صادر می‌کند. استفاده از این گزینه می‌تواند منجر به تولید کدی شود که با الزامات مقدمه در C\-SKY V2 ABI سازگار نیست و قابلیت اشکال‌زدایی یا ردگیری به عقب (backtrace) ندارد. این گزینه به‌طور پیش‌فرض غیرفعال است. .IP \fB\-msim\fR 4 .IX Item "-msim" کتابخانهٔ libsemi.a را که با شبیه‌ساز سازگار است پیوند می‌دهد. این گزینه فقط برای کامپایلر ELF کاربرد دارد. .PP \fIگزینه‌های Cygwin و MinGW\fR .IX Subsection "Cygwin and MinGW Options" .PP این گزینه‌های اضافی برای مقصدهای Microsoft Windows در دسترس هستند: .IP \fB\-mconsole\fR 4 .IX Item "-mconsole" این گزینه مشخص می‌کند که یک برنامهٔ کنسولی باید تولید شود؛ این کار با دستور دادن به پیونددهنده برای تنظیم نوع زیرسیستم سرآیند PE به موارد مورد نیاز برنامه‌های کنسولی انجام می‌گیرد. این گزینه برای مقصدهای Cygwin و MinGW در دسترس است و در آن مقصدها به‌طور پیش‌فرض فعال می‌باشد. .IP \fB\-mcrtdll=\fR\fIlibrary\fR 4 .IX Item "-mcrtdll=library" پیش‌پردازش، کامپایل یا پیوند دادن با \fIlibrary\fR مشخص‌شده از C RunTime DLL. این گزینه ماکروهای از پیش تعریف‌شدهٔ \f(CW\*(C`_\|_CRTDLL_\|_\*(C'\fR، \f(CW\*(C`_\|_MSVCRT_\|_\*(C'\fR، \&\f(CW\*(C`_UCRT\*(C'\fR و \f(CW\*(C`_\|_MSVCRT_VERSION_\|_\*(C'\fR را برای \fIlibrary\fR CRT مشخص‌شده تنظیم می‌کند، فایل راه‌انداز را برای \fIlibrary\fR CRT برمی‌گزیند و با \fIlibrary\fR CRT پیوند برقرار می‌سازد. نام‌های شناخته‌شدهٔ کتابخانهٔ CRT برای پیش‌پردازنده عبارتند از: \&\f(CW\*(C`crtdll*\*(C'\fR، \f(CW\*(C`msvcrt10*\*(C'\fR، \f(CW\*(C`msvcrt20*\*(C'\fR، \f(CW\*(C`msvcrt40*\*(C'\fR، \&\f(CW\*(C`msvcr40*\*(C'\fR، \f(CW\*(C`msvcrtd*\*(C'\fR، \f(CW\*(C`msvcrt\-os*\*(C'\fR، \&\f(CW\*(C`msvcr70*\*(C'\fR، \f(CW\*(C`msvcr71*\*(C'\fR، \f(CW\*(C`msvcr80*\*(C'\fR، \f(CW\*(C`msvcr90*\*(C'\fR، \&\f(CW\*(C`msvcr100*\*(C'\fR، \f(CW\*(C`msvcr110*\*(C'\fR، \f(CW\*(C`msvcr120*\*(C'\fR و \f(CW\*(C`ucrt*\*(C'\fR. اگر این گزینه مشخص نشود، کتابخانهٔ واردات (import library) پیش‌فرض MinGW یعنی \&\f(CW\*(C`msvcrt\*(C'\fR برای پیوند دادن استفاده می‌شود و هیچ تنظیم دیگری برای پیش‌پردازنده انجام نمی‌گیرد. کتابخانهٔ واردات MinGW با نام \f(CW\*(C`msvcrt\*(C'\fR صرفاً یک پیوند نمادین (یا کپی) از یک کتابخانهٔ واردات CRT دیگر در MinGW است که حین کامپایل MinGW انتخاب شده است. کتابخانهٔ واردات \f(CW\*(C`msvcrt\-os\*(C'\fR مربوط به کتابخانهٔ سیستمی \f(CW\*(C`msvcrt.dll\*(C'\fR در Windows است و در بیشتر موارد کتابخانهٔ واردات پیش‌فرض MinGW به شمار می‌رود. به‌طور کلی، تغییر DLL مربوط به CRT نیازمند کامپایل مجدد کل MinGW CRT است. این گزینه صرفاً برای مقاصد آزمایشی و ارزیابی در نظر گرفته شده است. این گزینه برای مقصدهای MinGW در دسترس است. .IP \fB\-mdll\fR 4 .IX Item "-mdll" این گزینه برای مقصدهای Cygwin و MinGW در دسترس است. این گزینه مشخص می‌کند که یک DLL \(en یک کتابخانهٔ پیوند پویا (dynamic link library) \(en باید تولید شود، و انتخاب شیء راه‌انداز زمان اجرا و نقطهٔ ورود لازم را فعال می‌کند. .IP \fB\-mnop\-fun\-dllimport\fR 4 .IX Item "-mnop-fun-dllimport" این گزینه برای مقصدهای Cygwin و MinGW در دسترس است. این گزینه مشخص می‌کند که صفت \f(CW\*(C`dllimport\*(C'\fR باید نادیده گرفته شود. .IP \fB\-mthreads\fR 4 .IX Item "-mthreads" این گزینه برای مقصدهای MinGW در دسترس است. این گزینه مشخص می‌کند که پشتیبانی از ریسمان‌ها (threads) ویژهٔ MinGW باید استفاده شود. .IP \fB\-municode\fR 4 .IX Item "-municode" این گزینه برای مقصدهای MinGW\-w64 در دسترس است. این گزینه سبب می‌شود که ماکروی پیش‌پردازندهٔ \f(CW\*(C`UNICODE\*(C'\fR به‌طور پیش‌فرض تعریف گردد، و کد راه‌انداز زمان اجرای سازگار با یونیکد انتخاب شود. .IP \fB\-mwin32\fR 4 .IX Item "-mwin32" این گزینه برای مقصدهای Cygwin و MinGW در دسترس است. این گزینه مشخص می‌کند که ماکروهای از پیش تعریف‌شدهٔ معمول Microsoft Windows باید در پیش‌پردازنده تنظیم شوند، اما تأثیری بر انتخاب کتابخانهٔ زمان اجرا یا کد راه‌انداز ندارد. .IP \fB\-mwindows\fR 4 .IX Item "-mwindows" این گزینه برای مقصدهای Cygwin و MinGW در دسترس است. این گزینه مشخص می‌کند که یک برنامهٔ دارای رابط کاربری گرافیکی (GUI) باید با دستور دادن به پیونددهنده جهت تنظیم مناسب نوع زیرسیستم سرآیند PE تولید شود. .IP \fB\-fno\-set\-stack\-executable\fR 4 .IX Item "-fno-set-stack-executable" این گزینه برای مقصدهای MinGW در دسترس است. این گزینه مشخص می‌کند که پرچم قابل‌اجرا بودن برای پشته‌ای که توسط توابع تو در تو استفاده می‌شود، تنظیم نگردد. این مورد برای باینری‌هایی که در حالت هستهٔ (kernel mode) Microsoft Windows اجرا می‌شوند ضروری است، زیرا در آنجا API مربوط به User32 که برای تنظیم امتیازات اجرایی استفاده می‌شود، در دسترس نیست. .IP \fB\-fwritable\-relocated\-rdata\fR 4 .IX Item "-fwritable-relocated-rdata" این گزینه برای مقصدهای MinGW و Cygwin در دسترس است. این گزینه مشخص می‌کند که داده‌های بازنشانی‌شده در بخش فقط‌خواندنی، درون بخش \f(CW\*(C`.data\*(C'\fR قرار گیرند. این قابلیت برای محیط‌های زمان اجرای قدیمی‌تری که از اصلاح بخش‌های \f(CW\*(C`.rdata\*(C'\fR برای بازنشانی شبه‌مکانی (pseudo-relocation) پشتیبانی نمی‌کنند، ضروری است. .IP \fB\-mpe\-aligned\-commons\fR 4 .IX Item "-mpe-aligned-commons" این گزینه برای مقصدهای Cygwin و MinGW در دسترس است. این گزینه مشخص می‌کند که پسوند GNU به قالب فایل PE که اجازهٔ هم‌ترازی صحیح متغیرهای COMMON را می‌دهد، هنگام تولید کد استفاده شود. این گزینه به‌طور پیش‌فرض فعال است اگر GCC تشخیص دهد که اسمبلر مقصدِ شناسایی‌شده در حین پیکربندی از این قابلیت پشتیبانی می‌کند. .PP برای گزینه‌های استاندارد، همچنین بخش \fBگزینه‌های x86\fR را ببینید. .PP \fIگزینه‌های Darwin\fR .IX Subsection "Darwin Options" .PP این گزینه‌ها برای تمام معماری‌هایی که سیستم‌عامل Darwin را اجرا می‌کنند تعریف شده‌اند. .PP نسخهٔ FSF GCC در Darwin فایل‌های شیء چندمعماری («fat») ایجاد نمی‌کند؛ بلکه برای تک‌معماری خاصی که GCC برای آن ساخته شده، فایل شیء تولید می‌کند. نسخهٔ Apple GCC در Darwin در صورت استفاده از چند گزینهٔ \&\fB\-arch\fR، فایل‌های «fat» ایجاد می‌کند؛ این کار با چندین بار اجرای کامپایلر یا پیونددهنده و ادغام نتایج با یکدیگر به‌وسیلهٔ \&\fIlipo\fR انجام می‌گیرد. .PP زیرنوع (subtype) فایل ایجادشده (مانند \fBppc7400\fR یا \fBppc970\fR یا \&\fBi686\fR) با پرچم‌هایی تعیین می‌شود که معماری مجموعه دستورالعمل‌ها (ISA) هدف GCC را مشخص می‌کنند، مانند \fB\-mcpu\fR یا \fB\-march\fR. گزینهٔ \&\fB\-force_cpusubtype_ALL\fR می‌تواند برای نادیده گرفتن این رفتار به کار رود. .PP ابزارهای Darwin هنگام مواجهه با عدم تطابق ISA رفتارهای متفاوتی دارند. اسمبلر، \fIas\fR، فقط اجازهٔ استفاده از دستورالعمل‌هایی را می‌دهد که برای زیرنوعِ فایل در حال تولید معتبر باشند؛ بنابراین نمی‌توان دستورالعمل‌های ۶۴ بیتی را در یک فایل شیء \fBppc750\fR قرار داد. پیونددهندهٔ کتابخانه‌های اشتراکی، یعنی \fI/usr/bin/libtool\fR، اگر خواسته شود کتابخانه‌ای اشتراکی با زیرنوعی با محدودیت کمتر نسبت به فایل‌های ورودی‌اش ایجاد کند، شکست خورده و خطایی را چاپ می‌کند (به عنوان مثال، تلاش برای قرار دادن یک فایل شیء \fBppc970\fR در یک کتابخانهٔ \fBppc7400\fR). پیونددهندهٔ فایل‌های اجرایی، \fBld\fR، بدون اخطار، محدودکننده‌ترین زیرنوع را از میان تمام فایل‌های ورودی به فایل اجرایی اختصاص می‌دهد. .IP \fB\-F\fR\fIdir\fR 4 .IX Item "-Fdir" دایرکتوری چارچوب (framework) با نام \fIdir\fR را به ابتدای فهرست دایرکتوری‌های مورد جستجو برای فایل‌های سرآیند اضافه می‌کند. این دایرکتوری‌ها با موارد مشخص‌شده توسط گزینه‌های \fB\-I\fR درهم‌آمیخته شده و به ترتیب از چپ به راست پویش می‌شوند. .Sp دایرکتوری چارچوب دایرکتوری‌ای است که چارچوب‌ها در آن قرار دارند. یک چارچوب، دایرکتوری‌ای است که مستقیماً شامل یک دایرکتوری \fIHeaders\fR و/یا \&\fIPrivateHeaders\fR بوده و نام آن با \&\fI.framework\fR پایان می‌یابد. نام یک چارچوب، همان نام این دایرکتوری با حذف پسوند \fI.framework\fR است. سرآیندهای مربوط به چارچوب در یکی از این دو دایرکتوری یافت می‌شوند، به‌طوری که \&\fIHeaders\fR زودتر جستجو می‌شود. یک زیرچارچوب (subframework) یک دایرکتوری چارچوب است که در دایرکتوری \fIFrameworks\fR یک چارچوب دیگر قرار دارد. گنجاندن سرآیندهای زیرچارچوب تنها می‌تواند در سرآیندِ چارچوبی که حاوی آن زیرچارچوب است رخ دهد، یا در سرآیندِ یک زیرچارچوبِ هم‌ردیف (sibling). دو زیرچارچوب زمانی هم‌ردیف محسوب می‌شوند که در یک چارچوب یکسان قرار داشته باشند. یک زیرچارچوب نباید همنام با یک چارچوب باشد؛ در صورت تخطی از این قاعده، هشداری صادر می‌شود. در حال حاضر یک زیرچارچوب نمی‌تواند دارای زیرچارچوب باشد؛ در آینده، ممکن است این سازوکار برای پشتیبانی از این قابلیت گسترش یابد. چارچوب‌های استاندارد را می‌توان در \fI/System/Library/Frameworks\fR و \&\fI/Library/Frameworks\fR یافت. یک نمونه از گنجاندن سرآیند به صورت \&\f(CW\*(C`#include \*(C'\fR است، که در آن \fIFramework\fR نشان‌دهندهٔ نام چارچوب بوده و \fIheader.h\fR در دایرکتوری \&\fIPrivateHeaders\fR یا \fIHeaders\fR قرار دارد. .IP \fB\-iframework\fR\fIdir\fR 4 .IX Item "-iframeworkdir" مانند \fB\-F\fR عمل می‌کند با این تفاوت که با دایرکتوری مانند یک دایرکتوری سیستمی رفتار می‌شود. تفاوت اصلی بین \fB\-iframework\fR و \&\fB\-F\fR در این است که با \fB\-iframework\fR کامپایلر هیچ هشداری دربارهٔ سازه‌های موجود در فایل‌های سرآیندِ یافت‌شده از طریق \&\fIdir\fR صادر نمی‌کند. این گزینه فقط برای زبان‌های خانوادهٔ C معتبر است. .IP \fB\-gused\fR 4 .IX Item "-gused" اطلاعات اشکال‌زدایی را برای نمادهایی که استفاده شده‌اند تولید می‌کند. برای قالب اشکال‌زدایی stabs، این گزینه \fB\-feliminate\-unused\-debug\-symbols\fR را فعال می‌کند. این گزینه به‌طور پیش‌فرض روشن (ON) است. .IP \fB\-gfull\fR 4 .IX Item "-gfull" اطلاعات اشکال‌زدایی را برای تمام نمادها و نوع‌ها تولید می‌کند. .IP \fB\-fconstant\-cfstrings\fR 4 .IX Item "-fconstant-cfstrings" گزینهٔ \fB\-fconstant\-cfstrings\fR نام مستعاری برای \fB\-mconstant\-cfstrings\fR است..IP \fB\-mconstant\-cfstrings\fR 4 .IX Item "-mconstant-cfstrings" هنگامی که زمان‌اجرای NeXT استفاده می‌شود (که در این سیستم‌ها حالت پیش‌فرض است)، هرگونه تنظیمات \fB\-fconstant\-string\-class\fR نادیده گرفته شده و باعث می‌شود لیترال‌های \f(CW\*(C`@"..."\*(C'\fR به‌صورت رشته‌های ثابت CoreFoundation چیدمان شوند. .IP \fB\-mmacosx\-version\-min=\fR\fIversion\fR 4 .IX Item "-mmacosx-version-min=version" قدیمی‌ترین نسخهٔ MacOS X که این فایل اجرایی روی آن اجرا خواهد شد، \&\fIversion\fR است. مقادیر معمول پشتیبانی‌شده برای \fIversion\fR شامل \f(CW12\fR، \&\f(CW10.12\fR و \f(CW10.5.8\fR است. .Sp اگر کامپایلر طوری ساخته شده باشد که به‌طور پیش‌فرض از هدرهای سیستم استفاده کند، مقدار پیش‌فرض این گزینه نسخهٔ سیستمی خواهد بود که کامپایلر روی آن در حال اجراست؛ در غیر این صورت، حالت پیش‌فرض انتخاب گزینه‌هایی است که با بیشترین تعداد سیستم‌ها و پایگاه‌های کد سازگار باشند. .IP \fB\-mkernel\fR 4 .IX Item "-mkernel" فعال‌سازی حالت توسعه هسته (kernel). گزینهٔ \fB\-mkernel\fR در صورت کاربرد، گزینه‌های \&\fB\-static\fR، \fB\-fno\-common\fR، \fB\-fno\-use\-cxa\-atexit\fR، \&\fB\-fno\-exceptions\fR، \fB\-fno\-non\-call\-exceptions\fR، \&\fB\-fapple\-kext\fR، \fB\-fno\-weak\fR و \fB\-fno\-rtti\fR را تنظیم می‌کند. این حالت همچنین گزینه‌های \fB\-mno\-altivec\fR، \&\fB\-msoft\-float\fR، \fB\-fno\-builtin\fR و \&\fB\-mlong\-branch\fR را برای اهداف PowerPC تنظیم می‌نماید. .IP \fB\-mone\-byte\-bool\fR 4 .IX Item "-mone-byte-bool" نادیده گرفتن مقادیر پیش‌فرض برای \f(CW\*(C`bool\*(C'\fR به‌گونه‌ای که \f(CW\*(C`sizeof(bool)==1\*(C'\fR برقرار باشد. به‌طور پیش‌فرض مقدار \f(CWsizeof(bool)\fR هنگام کامپایل برای Darwin/PowerPC برابر \f(CW4\fR و هنگام کامپایل برای Darwin/x86 برابر \f(CW1\fR است، بنابراین این گزینه بر روی x86 تأثیری ندارد. .Sp \&\fBهشدار:\fR سوئیچ \fB\-mone\-byte\-bool\fR باعث می‌شود GCC کدی تولید کند که از نظر باینری با کد تولیدشده بدون این سوئیچ سازگار نیست. استفاده از این سوئیچ ممکن است نیازمند کامپایل دوبارهٔ تمام ماژول‌های دیگر یک برنامه، از جمله کتابخانه‌های سیستم باشد. از این سوئیچ برای سازگاری با یک مدل داده‌ای غیرپیش‌فرض استفاده کنید. .IP \fB\-mfix\-and\-continue\fR 4 .IX Item "-mfix-and-continue" .PD 0 .IP \fB\-ffix\-and\-continue\fR 4 .IX Item "-ffix-and-continue" .IP \fB\-findirect\-data\fR 4 .IX Item "-findirect-data" .PD تولید کد مناسب برای چرخه توسعهٔ سریع، مانند اجازه دادن به GDB برای بارگذاری پویای فایل‌های \fI.o\fR در برنامه‌هایی که در حال اجرا هستند. گزینه‌های \fB\-findirect\-data\fR و \fB\-ffix\-and\-continue\fR برای سازگاری رو به عقب ارائه شده‌اند. .IP \fB\-all_load\fR 4 .IX Item "-all_load" تمام اعضای کتابخانه‌های آرشیو ایستا را بارگذاری می‌کند. برای اطلاعات بیشتر به راهنمای \fBld\fR\|(1) مراجعه کنید. .IP \fB\-arch_errors_fatal\fR 4 .IX Item "-arch_errors_fatal" باعث می‌شود خطاهای مربوط به فایل‌هایی با معماری نادرست، مهلک (fatal) تلقی شوند. .IP \fB\-bind_at_load\fR 4 .IX Item "-bind_at_load" باعث می‌شود فایل خروجی به‌گونه‌ای علامت‌گذاری شود که پیونددهندهٔ پویا هنگام بارگذاری یا اجرای فایل، تمام ارجاعات تعریف‌نشده را متصل (bind) کند. .IP \fB\-bundle\fR 4 .IX Item "-bundle" فایلی با قالب Mach\-o bundle تولید می‌کند. برای اطلاعات بیشتر به راهنمای \fBld\fR\|(1) مراجعه کنید. .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4 .IX Item "-bundle_loader executable" این گزینه فایل اجرایی (\fIexecutable\fR) را مشخص می‌کند که فایل خروجی ساختِ در حال پیوند را بارگذاری خواهد کرد. برای اطلاعات بیشتر به راهنمای \fBld\fR\|(1) مراجعه کنید. .IP \fB\-dynamiclib\fR 4 .IX Item "-dynamiclib" با دریافت این گزینه، GCC هنگام پیوند، با استفاده از دستور \fIlibtool\fR در Darwin، به‌جای فایل اجرایی یک کتابخانهٔ پویا ایجاد می‌کند. .IP \fB\-force_cpusubtype_ALL\fR 4 .IX Item "-force_cpusubtype_ALL" این گزینه باعث می‌شود فایل خروجی GCC به‌جای زیرنوعی که توسط گزینهٔ \fB\-mcpu\fR یا \fB\-march\fR تعیین می‌شود، دارای زیرنوع \fBALL\fR باشد. .IP \fB\-nodefaultrpaths\fR 4 .IX Item "-nodefaultrpaths" مسیرهای اجرای پیش‌فرض (run paths) مربوط به دایرکتوری‌های کتابخانهٔ کامپایلر را به فایل‌های اجرایی، ماژول‌ها یا کتابخانه‌های پویا اضافه نمی‌کند. در macOS 10.5 و جدیدتر، مسیر اجرای تعبیه‌شده به‌طور پیش‌فرض اضافه می‌شود مگر اینکه کاربر \&\fB\-nodefaultrpaths\fR را به خط پیوند اضافه کند. مسیرهای اجرا برای ساخت روی macOS نسخهٔ 10.11 یا بالاتر لازم هستند (و بنابراین اجباری شده‌اند). .IP "\fB\-allowable_client\fR \fIclient_name\fR" 4 .IX Item "-allowable_client client_name" .PD 0 .IP \fB\-client_name\fR 4 .IX Item "-client_name" .IP \fB\-compatibility_version\fR 4 .IX Item "-compatibility_version" .IP \fB\-current_version\fR 4 .IX Item "-current_version" .IP \fB\-dead_strip\fR 4 .IX Item "-dead_strip" .IP \fB\-dependency\-file\fR 4 .IX Item "-dependency-file" .IP \fB\-dylib_file\fR 4 .IX Item "-dylib_file" .IP \fB\-dylinker_install_name\fR 4 .IX Item "-dylinker_install_name" .IP \fB\-dynamic\fR 4 .IX Item "-dynamic" .IP \fB\-exported_symbols_list\fR 4 .IX Item "-exported_symbols_list" .IP \fB\-filelist\fR 4 .IX Item "-filelist" .IP \fB\-flat_namespace\fR 4 .IX Item "-flat_namespace" .IP \fB\-force_flat_namespace\fR 4 .IX Item "-force_flat_namespace" .IP \fB\-headerpad_max_install_names\fR 4 .IX Item "-headerpad_max_install_names" .IP \fB\-image_base\fR 4 .IX Item "-image_base" .IP \fB\-init\fR 4 .IX Item "-init" .IP \fB\-install_name\fR 4 .IX Item "-install_name" .IP \fB\-keep_private_externs\fR 4 .IX Item "-keep_private_externs" .IP \fB\-multi_module\fR 4 .IX Item "-multi_module" .IP \fB\-multiply_defined\fR 4 .IX Item "-multiply_defined" .IP \fB\-multiply_defined_unused\fR 4 .IX Item "-multiply_defined_unused" .IP \fB\-noall_load\fR 4 .IX Item "-noall_load" .IP \fB\-no_dead_strip_inits_and_terms\fR 4 .IX Item "-no_dead_strip_inits_and_terms" .IP \fB\-nofixprebinding\fR 4 .IX Item "-nofixprebinding" .IP \fB\-nomultidefs\fR 4 .IX Item "-nomultidefs" .IP \fB\-noprebind\fR 4 .IX Item "-noprebind" .IP \fB\-noseglinkedit\fR 4 .IX Item "-noseglinkedit" .IP \fB\-pagezero_size\fR 4 .IX Item "-pagezero_size" .IP \fB\-prebind\fR 4 .IX Item "-prebind" .IP \fB\-prebind_all_twolevel_modules\fR 4 .IX Item "-prebind_all_twolevel_modules" .IP \fB\-private_bundle\fR 4 .IX Item "-private_bundle" .IP \fB\-read_only_relocs\fR 4 .IX Item "-read_only_relocs" .IP \fB\-sectalign\fR 4 .IX Item "-sectalign" .IP \fB\-sectobjectsymbols\fR 4 .IX Item "-sectobjectsymbols" .IP \fB\-whyload\fR 4 .IX Item "-whyload" .IP \fB\-seg1addr\fR 4 .IX Item "-seg1addr" .IP \fB\-sectcreate\fR 4 .IX Item "-sectcreate" .IP \fB\-sectobjectsymbols\fR 4 .IX Item "-sectobjectsymbols" .IP \fB\-sectorder\fR 4 .IX Item "-sectorder" .IP \fB\-segaddr\fR 4 .IX Item "-segaddr" .IP \fB\-segs_read_only_addr\fR 4 .IX Item "-segs_read_only_addr" .IP \fB\-segs_read_write_addr\fR 4 .IX Item "-segs_read_write_addr" .IP \fB\-seg_addr_table\fR 4 .IX Item "-seg_addr_table" .IP \fB\-seg_addr_table_filename\fR 4 .IX Item "-seg_addr_table_filename" .IP \fB\-seglinkedit\fR 4 .IX Item "-seglinkedit" .IP \fB\-segprot\fR 4 .IX Item "-segprot" .IP \fB\-segs_read_only_addr\fR 4 .IX Item "-segs_read_only_addr" .IP \fB\-segs_read_write_addr\fR 4 .IX Item "-segs_read_write_addr".IP \fB\-single_module\fR 4 .IX Item "-single_module" .IP \fB\-static\fR 4 .IX Item "-static" .IP \fB\-sub_library\fR 4 .IX Item "-sub_library" .IP \fB\-sub_umbrella\fR 4 .IX Item "-sub_umbrella" .IP \fB\-twolevel_namespace\fR 4 .IX Item "-twolevel_namespace" .IP \fB\-umbrella\fR 4 .IX Item "-umbrella" .IP \fB\-undefined\fR 4 .IX Item "-undefined" .IP \fB\-unexported_symbols_list\fR 4 .IX Item "-unexported_symbols_list" .IP \fB\-weak_reference_mismatches\fR 4 .IX Item "-weak_reference_mismatches" .IP \fB\-whatsloaded\fR 4 .IX Item "-whatsloaded" .PD این گزینه‌ها به پیونددهنده Darwin ارسال می‌شوند. صفحه راهنمای پیونددهنده Darwin آن‌ها را با جزئیات شرح می‌دهد. .PP \fIگزینه‌های DEC Alpha\fR .IX Subsection "DEC Alpha Options" .PP این گزینه‌های \fB\-m\fR برای پیاده‌سازی‌های DEC Alpha تعریف شده‌اند: .IP \fB\-mno\-soft\-float\fR 4 .IX Item "-mno-soft-float" .PD 0 .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD استفاده از (عدم استفاده از) دستورالعمل‌های سخت‌افزاری ممیز شناور برای محاسبات ممیز شناور. هنگامی که \fB\-msoft\-float\fR مشخص شود، از توابع موجود در \fIlibgcc.a\fR برای انجام محاسبات ممیز شناور استفاده می‌شود. این روتین‌ها دستورالعمل‌های سخت‌افزاری ممیز شناور صادر می‌کنند، مگر اینکه با روتین‌هایی که محاسبات ممیز شناور را شبیه‌سازی می‌کنند جایگزین شده باشند، یا طوری کامپایل شده باشند که چنین روتین‌های شبیه‌سازی را فراخوانی کنند. اگر برای پردازنده Alpha بدون قابلیت محاسبات ممیز شناور کامپایل می‌کنید، باید مطمئن شوید که کتابخانه به گونه‌ای ساخته شده است که آن‌ها را فراخوانی نکند. .Sp توجه داشته باشید که پیاده‌سازی‌های Alpha حتی بدون قابلیت محاسبات ممیز شناور نیز ملزم به داشتن ثبات‌های ممیز شناور هستند. .IP \fB\-mfp\-reg\fR 4 .IX Item "-mfp-reg" .PD 0 .IP \fB\-mno\-fp\-regs\fR 4 .IX Item "-mno-fp-regs" .PD تولید کدی که از مجموعه ثبات‌های ممیز شناور استفاده می‌کند (استفاده نمی‌کند). \&\fB\-mno\-fp\-regs\fR مستلزم \fB\-msoft\-float\fR است. اگر از مجموعه ثبات‌های ممیز شناور استفاده نشود، عملوندهای ممیز شناور همانند اعداد صحیح در ثبات‌های عدد صحیح ارسال می‌شوند و نتایج ممیز شناور به جای \f(CW$f0\fR در \f(CW$0\fR برگردانده می‌شوند. این یک توالی فراخوانی غیراستاندارد است، بنابراین هر تابعی با آرگومان یا مقدار بازگشتی ممیز شناور که توسط کد کامپایل‌شده با \fB\-mno\-fp\-regs\fR فراخوانی می‌شود نیز باید با این گزینه کامپایل شده باشد. .Sp کاربرد معمول این گزینه در ساخت هسته‌ای است که از هیچ‌یک از ثبات‌های ممیز شناور استفاده نمی‌کند و بنابراین نیازی به ذخیره و بازیابی آن‌ها ندارد. .IP \fB\-mieee\fR 4 .IX Item "-mieee" معماری Alpha سخت‌افزار ممیز شناور را بهینه‌سازی‌شده برای حداکثر کارایی پیاده‌سازی می‌کند. این معماری تا حد زیادی با استاندارد ممیز شناور IEEE سازگار است. با این حال، برای سازگاری کامل به کمک‌های نرم‌افزاری نیاز دارد. این گزینه کدی کاملاً سازگار با IEEE تولید می‌کند، \fIبه جز\fR این که \fIinexact\-flag\fR حفظ نمی‌شود (پایین را ببینید). اگر این گزینه فعال باشد، ماکروی پیش‌پردازنده \f(CW\*(C`_IEEE_FP\*(C'\fR در حین کامپایل تعریف می‌شود. کد حاصل بازدهی کمتری دارد، اما می‌تواند به درستی از اعداد غیرنرمال (denormalized) و مقادیر استثنایی IEEE مانند «ناعدد» (NaN) و مثبت/منفی بی‌نهایت پشتیبانی کند. سایر کامپایلرهای Alpha این گزینه را \fB\-ieee_with_no_inexact\fR می‌نامند. .IP \fB\-mieee\-with\-inexact\fR 4 .IX Item "-mieee-with-inexact" این گزینه مشابه \fB\-mieee\fR است، با این تفاوت که کد تولید شده \fIinexact\-flag\fR استاندارد IEEE را نیز حفظ می‌کند. فعال کردن این گزینه باعث می‌شود کد تولید شده محاسبات کاملاً منطبق بر استاندارد ریاضی IEEE را پیاده‌سازی کند. علاوه بر \f(CW\*(C`_IEEE_FP\*(C'\fR، ماکروی پیش‌پردازنده \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR نیز تعریف می‌شود. در برخی پیاده‌سازی‌های Alpha، کد حاصل ممکن است به طور چشمگیری کندتر از کد پیش‌فرض اجرا شود. از آنجا که کدهای بسیار اندکی به \fIinexact\-flag\fR وابسته هستند، معمولاً نباید این گزینه را تعیین کنید. سایر کامپایلرهای Alpha این گزینه را \fB\-ieee_with_inexact\fR می‌نامند. .IP \fB\-mfp\-trap\-mode=\fR\fItrap\-mode\fR 4 .IX Item "-mfp-trap-mode=trap-mode" این گزینه کنترل می‌کند که چه تله‌های مربوط به ممیز شناور فعال باشند. سایر کامپایلرهای Alpha این گزینه را به صورت \fB\-fptm\fR \fItrap\-mode\fR می‌نامند. حالت تله را می‌توان روی یکی از چهار مقدار زیر تنظیم کرد: .RS 4 .IP \fBn\fR 4 .IX Item "n" تنظیم پیش‌فرض (عادی). تنها تله‌هایی فعال می‌شوند که در نرم‌افزار قابل غیرفعال‌سازی نیستند (مانند تله تقسیم بر صفر). .IP \fBu\fR 4 .IX Item "u" علاوه بر تله‌های فعال‌شده با \fBn\fR، تله‌های زیرریز (underflow) نیز فعال می‌شوند. .IP \fBsu\fR 4 .IX Item "su" مشابه \fBu\fR، با این تفاوت که دستورالعمل‌ها به عنوان ایمن برای تکمیل نرم‌افزاری علامت‌گذاری می‌شوند (برای جزئیات به راهنمای معماری Alpha مراجعه کنید). .IP \fBsui\fR 4 .IX Item "sui" مشابه \fBsu\fR، اما تله‌های نادقیق (inexact) نیز فعال می‌شوند. .RE .RS 4 .RE .IP \fB\-mfp\-rounding\-mode=\fR\fIrounding\-mode\fR 4 .IX Item "-mfp-rounding-mode=rounding-mode" حالت گرد کردن IEEE را انتخاب می‌کند. سایر کامپایلرهای Alpha این گزینه را \fB\-fprm\fR \fIrounding\-mode\fR می‌نامند. گزینه \fIrounding\-mode\fR می‌تواند یکی از موارد زیر باشد: .RS 4 .IP \fBn\fR 4 .IX Item "n" حالت عادی گرد کردن IEEE. اعداد ممیز شناور به سمت نزدیک‌ترین عدد ماشین، یا در صورت تساوی به سمت نزدیک‌ترین عدد ماشین زوج گرد می‌شوند. .IP \fBm\fR 4 .IX Item "m" گرد کردن به سمت منفی بی‌نهایت. .IP \fBc\fR 4 .IX Item "c" حالت گرد کردن برشی (Chopped). اعداد ممیز شناور به سمت صفر گرد می‌شوند. .IP \fBd\fR 4 .IX Item "d" حالت گرد کردن پویا (Dynamic). یک فیلد در ثبات کنترل ممیز شناور (\fIfpcr\fR، به راهنمای مرجع معماری Alpha مراجعه کنید) حالت گرد کردن فعال را تعیین می‌کند. کتابخانه C این ثبات را برای گرد کردن به سمت مثبت بی‌نهایت مقداردهی اولیه می‌کند. بنابراین، مگر اینکه برنامه شما \fIfpcr\fR را تغییر دهد، \fBd\fR متناظر با گرد کردن به سمت مثبت بی‌نهایت خواهد بود. .RE .RS 4 .RE .IP \fB\-mtrap\-precision=\fR\fItrap\-precision\fR 4 .IX Item "-mtrap-precision=trap-precision" در معماری Alpha، تله‌های ممیز شناور غیردقیق (imprecise) هستند. این بدان معناست که بدون کمک نرم‌افزاری، بازیابی از یک تله ممیز شناور غیرممکن است و اجرای برنامه معمولاً باید خاتمه یابد. GCC می‌تواند کدی تولید کند که به گرداننده‌های تله در سیستم‌عامل در تعیین محل دقیقی که باعث ایجاد تله ممیز شناور شده است کمک کند. بسته به نیازمندی‌های برنامه، سطوح مختلفی از دقت را می‌توان انتخاب کرد: .RS 4 .IP \fBp\fR 4 .IX Item "p" دقت برنامه. این گزینه پیش‌فرض است و بدین معناست که یک گرداننده تله فقط می‌تواند تشخیص دهد کدام برنامه موجب استثنای ممیز شناور شده است. .IP \fBf\fR 4 .IX Item "f" دقت تابع. گرداننده تله می‌تواند تابعی را که باعث استثنای ممیز شناور شده است تعیین کند. .IP \fBi\fR 4 .IX Item "i" دقت دستورالعمل. گرداننده تله می‌تواند دستورالعمل دقیقی را که باعث ایجاد استثنای ممیز شناور شده است تعیین کند. .RE .RS 4 .Sp سایر کامپایلرهای Alpha گزینه‌های معادلی به نام‌های \&\fB\-scope_safe\fR و \fB\-resumption_safe\fR را ارائه می‌دهند. .RE .IP \fB\-mieee\-conformant\fR 4 .IX Item "-mieee-conformant" این گزینه کد تولید شده را به عنوان منطبق بر IEEE نشانه‌گذاری می‌کند. نباید از این گزینه استفاده کنید مگر اینکه \fB\-mtrap\-precision=i\fR و یکی از گزینه‌های \&\fB\-mfp\-trap\-mode=su\fR یا \fB\-mfp\-trap\-mode=sui\fR را نیز تعیین کرده باشید. تنها اثر آن درج خط \fB.eflag 48\fR در مقدمه تابع (function prologue) فایل اسمبلی تولید شده است. .IP \fB\-mbuild\-constants\fR 4 .IX Item "-mbuild-constants" به طور معمول، GCC یک ثابت عدد صحیح ۳۲ یا ۶۴ بیتی را بررسی می‌کند تا ببیند آیا می‌تواند آن را در دو یا سه دستورالعمل از ثابت‌های کوچک‌تر بسازد یا خیر. اگر نتواند، ثابت را به صورت لیترال در خروجی قرار می‌دهد و کدی تولید می‌کند تا آن را در زمان اجرا از بخش داده (data segment) بارگذاری کند. .Sp از این گزینه برای الزام کردن GCC به ساخت \fIتمامی\fR ثابت‌های عدد صحیح با استفاده از کد استفاده کنید، حتی اگر به دستورالعمل‌های بیشتری نیاز داشته باشد (حداکثر شش دستورالعمل). .Sp معمولاً از این گزینه برای ساخت بارگذار پویای کتابخانه مشترک استفاده می‌شود. از آنجا که این بارگذار خود یک کتابخانه مشترک است، باید پیش از آنکه بتواند متغیرها و ثابت‌ها را در بخش داده خود پیدا کند، خود را در حافظه بازنشانی (relocate) کند..IP \fB\-mbwx\fR 4 .IX Item "-mbwx" .PD 0 .IP \fB\-mno\-bwx\fR 4 .IX Item "-mno-bwx" .IP \fB\-mcix\fR 4 .IX Item "-mcix" .IP \fB\-mno\-cix\fR 4 .IX Item "-mno-cix" .IP \fB\-mfix\fR 4 .IX Item "-mfix" .IP \fB\-mno\-fix\fR 4 .IX Item "-mno-fix" .IP \fB\-mmax\fR 4 .IX Item "-mmax" .IP \fB\-mno\-max\fR 4 .IX Item "-mno-max" .PD مشخص می‌کند که آیا GCC باید کدی تولید کند که از مجموعه‌دستورالعمل‌های اختیاری BWX، CIX، FIX و MAX استفاده نماید یا خیر. حالت پیش‌فرض، استفاده از مجموعه‌دستورالعمل‌های پشتیبانی‌شده توسط نوع پردازنده‌ای (CPU) است که با گزینهٔ \fB\-mcpu=\fR مشخص شده، یا پردازنده‌ای که GCC روی آن ساخته شده است در صورتی که هیچ نوعی مشخص نشده باشد. .IP \fB\-msafe\-bwa\fR 4 .IX Item "-msafe-bwa" .PD 0 .IP \fB\-mno\-safe\-bwa\fR 4 .IX Item "-mno-safe-bwa" .PD مشخص می‌کند که آیا در صورت عدم وجود مجموعه‌دستورالعمل اختیاری BWX، کامپایلر GCC باید کدی تولید کند که برای دسترسی‌های حافظه به بایت‌ها و کلمات هم‌تراز، در برابر چندنخی (multi\-thread) و سیگنال‌های ناهمگام (async\-signal) امن باشد یا خیر. .IP \fB\-msafe\-partial\fR 4 .IX Item "-msafe-partial" .PD 0 .IP \fB\-mno\-safe\-partial\fR 4 .IX Item "-mno-safe-partial" .PD مشخص می‌کند که آیا GCC باید برای دسترسی‌های جزئی به حافظه کدی امن در برابر چندنخی و سیگنال‌های ناهمگام تولید کند یا خیر؛ این شامل دسترسی‌های تکه‌تکه به داده‌های هم‌ترازشده‌نبوده و همچنین دسترسی‌های بلوکی به بخش‌های ابتدایی و انتهایی نوع‌های تجمیعی یا سایر اشیاء در حافظه می‌شود که به ترتیب در مرز داده‌های هم‌تراز ۶۴ بیتی شروع و پایان نمی‌یابند. .IP \fB\-mfloat\-vax\fR 4 .IX Item "-mfloat-vax" .PD 0 .IP \fB\-mfloat\-ieee\fR 4 .IX Item "-mfloat-ieee" .PD کدی تولید می‌کند که به جای ممیز شناور تک‌دقت و دودقت IEEE، از محاسبات ممیز شناور VAX F و G استفاده می‌کند (یا استفاده نمی‌کند). .IP \fB\-mexplicit\-relocs\fR 4 .IX Item "-mexplicit-relocs" .PD 0 .IP \fB\-mno\-explicit\-relocs\fR 4 .IX Item "-mno-explicit-relocs" .PD اسمبلرهای قدیمی‌تر Alpha هیچ راهی برای تولید بازنشانی‌های نمادها (symbol relocations) به جز از طریق ماکروهای اسمبلر ارائه نمی‌دادند. استفاده از این ماکروها اجازهٔ زمان‌بندی بهینهٔ دستورالعمل‌ها را نمی‌دهد. بستهٔ GNU binutils از نسخهٔ 2.12 به بعد، از نحو جدیدی پشتیبانی می‌کند که به کامپایلر اجازه می‌دهد به‌طور صریح مشخص کند کدام بازنشانی‌ها باید برای کدام دستورالعمل‌ها اعمال شوند. این گزینه بیشتر برای اشکال‌زدایی مفید است، زیرا GCC در هنگام ساخته‌شدن قابلیت‌های اسمبلر را تشخیص داده و پیش‌فرض را بر این اساس تنظیم می‌کند. .IP \fB\-msmall\-data\fR 4 .IX Item "-msmall-data" .PD 0 .IP \fB\-mlarge\-data\fR 4 .IX Item "-mlarge-data" .PD هنگامی که \fB\-mexplicit\-relocs\fR فعال باشد، داده‌های ایستا از طریق بازنشانی‌های \fIgp\-relative\fR در دسترس قرار می‌گیرند. وقتی \fB\-msmall\-data\fR استفاده می‌شود، اشیایی با اندازهٔ ۸ بایت یا کمتر در یک \fIناحیهٔ داده‌های کوچک\fR (بخش‌های \f(CW\*(C`.sdata\*(C'\fR و \f(CW\*(C`.sbss\*(C'\fR) قرار می‌گیرند و از طریق بازنشانی‌های ۱۶ بیتی از رجیستر \f(CW$gp\fR در دسترس خواهند بود. این کار اندازهٔ ناحیهٔ داده‌های کوچک را به ۶۴ کیلوبایت محدود می‌کند، اما به متغیرها اجازه می‌دهد که مستقیماً از طریق یک تک‌دستورالعمل قابل دسترسی باشند. .Sp حالت پیش‌فرض \fB\-mlarge\-data\fR است. با این گزینه، ناحیهٔ داده به کمی کمتر از ۲ گیگابایت محدود می‌شود. برنامه‌هایی که به بیش از ۲ گیگابایت داده نیاز دارند باید از \f(CW\*(C`malloc\*(C'\fR یا \f(CW\*(C`mmap\*(C'\fR برای تخصیص داده در هیپ (heap) به جای بخش داده‌های برنامه استفاده کنند. .Sp هنگام تولید کد برای کتابخانه‌های اشتراکی، \fB\-fpic\fR متضمن \&\fB\-msmall\-data\fR و \fB\-fPIC\fR متضمن \fB\-mlarge\-data\fR است. .IP \fB\-msmall\-text\fR 4 .IX Item "-msmall-text" .PD 0 .IP \fB\-mlarge\-text\fR 4 .IX Item "-mlarge-text" .PD هنگامی که \fB\-msmall\-text\fR استفاده می‌شود، کامپایلر فرض می‌کند که کد کل برنامه (یا کتابخانهٔ اشتراکی) در ۴ مگابایت جا می‌شود، و در نتیجه با یک دستور انشعاب (branch) قابل دسترس است. وقتی \fB\-msmall\-data\fR استفاده می‌شود، کامپایلر می‌تواند فرض کند که تمام نمادهای محلی مقدار یکسانی از \f(CW$gp\fR را به اشتراک می‌گذارند، و بدین ترتیب تعداد دستورالعمل‌های مورد نیاز برای فراخوانی تابع را از ۴ به ۱ کاهش می‌دهد. .Sp حالت پیش‌فرض \fB\-mlarge\-text\fR است. .IP \fB\-mcpu=\fR\fIcpu_type\fR 4 .IX Item "-mcpu=cpu_type" مجموعه‌دستورالعمل و پارامترهای زمان‌بندی دستورالعمل را برای نوع ماشین \fIcpu_type\fR تنظیم می‌کند. می‌توانید نام با سبک \fBEV\fR یا شمارهٔ تراشهٔ متناظر را مشخص کنید. کامپایلر GCC از پارامترهای زمان‌بندی برای خانواده‌های پردازندهٔ EV4، EV5 و EV6 پشتیبانی می‌کند و مقادیر پیش‌فرض برای مجموعه‌دستورالعمل را بر اساس پردازنده‌ای که مشخص کرده‌اید انتخاب می‌نماید. اگر نوع پردازنده‌ای را مشخص نکنید، GCC به‌طور پیش‌فرض به پردازنده‌ای برمی‌گردد که کامپایلر روی آن ساخته شده است. .Sp مقادیر پشتیبانی‌شده برای \fIcpu_type\fR عبارتند از: .RS 4 .IP \fBev4\fR 4 .IX Item "ev4" .PD 0 .IP \fBev45\fR 4 .IX Item "ev45" .IP \fB21064\fR 4 .IX Item "21064" .PD مانند EV4 زمان‌بندی می‌شود و هیچ افزونهٔ مجموعه‌دستورالعملی ندارد. .IP \fBev5\fR 4 .IX Item "ev5" .PD 0 .IP \fB21164\fR 4 .IX Item "21164" .PD مانند EV5 زمان‌بندی می‌شود و هیچ افزونهٔ مجموعه‌دستورالعملی ندارد. .IP \fBev56\fR 4 .IX Item "ev56" .PD 0 .IP \fB21164a\fR 4 .IX Item "21164a" .PD مانند EV5 زمان‌بندی می‌شود و از افزونهٔ BWX پشتیبانی می‌کند. .IP \fBpca56\fR 4 .IX Item "pca56" .PD 0 .IP \fB21164pc\fR 4 .IX Item "21164pc" .IP \fB21164PC\fR 4 .IX Item "21164PC" .PD مانند EV5 زمان‌بندی می‌شود و از افزونه‌های BWX و MAX پشتیبانی می‌کند. .IP \fBev6\fR 4 .IX Item "ev6" .PD 0 .IP \fB21264\fR 4 .IX Item "21264" .PD مانند EV6 زمان‌بندی می‌شود و از افزونه‌های BWX، FIX و MAX پشتیبانی می‌کند. .IP \fBev67\fR 4 .IX Item "ev67" .PD 0 .IP \fB21264a\fR 4 .IX Item "21264a" .PD مانند EV6 زمان‌بندی می‌شود و از افزونه‌های BWX، CIX، FIX و MAX پشتیبانی می‌کند. .RE .RS 4 .Sp زنجیره‌ابزارهای بومی (native toolchains) از مقدار \fBnative\fR نیز پشتیبانی می‌کنند، که بهترین گزینهٔ معماری را برای پردازندهٔ میزبان انتخاب می‌کند. در صورتی که GCC پردازنده را شناسایی نکند، گزینهٔ \&\fB\-mcpu=native\fR هیچ اثری نخواهد داشت. .RE .IP \fB\-mtune=\fR\fIcpu_type\fR 4 .IX Item "-mtune=cpu_type" تنها پارامترهای زمان‌بندی دستورالعمل را برای نوع ماشین \&\fIcpu_type\fR تنظیم می‌کند. مجموعه‌دستورالعمل تغییری نمی‌کند. .Sp زنجیره‌ابزارهای بومی نیز از مقدار \fBnative\fR پشتیبانی می‌کنند که بهترین گزینهٔ معماری را برای پردازندهٔ میزبان انتخاب می‌کند. در صورتی که GCC پردازنده را شناسایی نکند، گزینهٔ \&\fB\-mtune=native\fR هیچ اثری نخواهد داشت. .IP \fB\-mmemory\-latency=\fR\fItime\fR 4 .IX Item "-mmemory-latency=time" تاخیر (latency) فرضی زمان‌بند برای مراجعات معمول به حافظه را از دیدگاه برنامه تنظیم می‌کند. این عدد وابستگی شدیدی به الگوهای دسترسی به حافظهٔ مورد استفاده توسط برنامه و اندازهٔ حافظهٔ نهان (cache) خارجی روی ماشین دارد. .Sp گزینه‌های معتبر برای \fItime\fR عبارتند از: .RS 4.IP \fInumber\fR 4 .IX Item "number" یک عدد ده‌دهی که نشان‌دهنده چرخه‌های ساعت است. .IP \fBL1\fR 4 .IX Item "L1" .PD 0 .IP \fBL2\fR 4 .IX Item "L2" .IP \fBL3\fR 4 .IX Item "L3" .IP \fBmain\fR 4 .IX Item "main" .PD کامپایلر شامل تخمین‌هایی از تعداد چرخه‌های ساعت برای سخت‌افزارهای «معمول» EV4 و EV5 برای حافظه‌های پنهان سطح ۱، ۲ و ۳ (که Dcache، Scache و Bcache نیز نامیده می‌شوند) و همچنین حافظه اصلی است. توجه داشته باشید که L3 فقط برای EV5 معتبر است. .RE .RS 4 .RE .PP \fIگزینه‌های eBPF\fR .IX Subsection "eBPF Options" .IP \fB\-mframe\-limit=\fR\fIbytes\fR 4 .IX Item "-mframe-limit=bytes" این گزینه حد سخت‌گیرانه (hard limit) اندازه فریم‌ها را بر حسب بایت مشخص می‌کند. در حال حاضر، مقداری که می‌توان تعیین کرد باید کمتر یا مساوی با \&\fB32767\fR باشد. پیش‌فرض، همان محدودیتی است که توسط نسخه هسته لینوکس هدف اعمال شده است. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد برای یک هدف big\-endian. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد برای یک هدف little\-endian. این حالت پیش‌فرض است. .IP \fB\-mjmpext\fR 4 .IX Item "-mjmpext" .PD 0 .IP \fB\-mno\-jmpext\fR 4 .IX Item "-mno-jmpext" .PD فعال یا غیرفعال کردن تولید دستورالعمل‌های پرش شرطی اضافی. برای CPU v2 و بالاتر فعال است. .IP \fB\-mjmp32\fR 4 .IX Item "-mjmp32" .PD 0 .IP \fB\-mno\-jmp32\fR 4 .IX Item "-mno-jmp32" .PD فعال یا غیرفعال کردن تولید دستورالعمل‌های پرش ۳۲ بیتی. برای CPU v3 و بالاتر فعال است. .IP \fB\-malu32\fR 4 .IX Item "-malu32" .PD 0 .IP \fB\-mno\-alu32\fR 4 .IX Item "-mno-alu32" .PD فعال یا غیرفعال کردن تولید دستورالعمل‌های ALU ۳۲ بیتی. برای CPU v3 و بالاتر فعال است. .IP \fB\-mv3\-atomics\fR 4 .IX Item "-mv3-atomics" .PD 0 .IP \fB\-mno\-v3\-atomics\fR 4 .IX Item "-mno-v3-atomics" .PD فعال یا غیرفعال کردن دستورالعمل‌های مربوط به عملیات اتمیک عمومی معرفی‌شده در CPU v3. برای CPU v3 و بالاتر فعال است. .IP \fB\-mbswap\fR 4 .IX Item "-mbswap" .PD 0 .IP \fB\-mno\-bswap\fR 4 .IX Item "-mno-bswap" .PD فعال یا غیرفعال کردن دستورالعمل‌های جابه‌جایی بایت (byte swap). برای CPU v4 و بالاتر فعال است. .IP \fB\-msdiv\fR 4 .IX Item "-msdiv" .PD 0 .IP \fB\-mno\-sdiv\fR 4 .IX Item "-mno-sdiv" .PD فعال یا غیرفعال کردن دستورالعمل‌های تقسیم علامت‌دار و باقیمانده (modulus). برای CPU v4 و بالاتر فعال است. .IP \fB\-msmov\fR 4 .IX Item "-msmov" .PD 0 .IP \fB\-mno\-smov\fR 4 .IX Item "-mno-smov" .PD فعال یا غیرفعال کردن دستورالعمل‌های انتقال با بسط علامت و بارگذاری حافظه. برای CPU v4 و بالاتر فعال است. .IP \fB\-mcpu=\fR\fIversion\fR 4 .IX Item "-mcpu=version" مشخص می‌کند که کدام نسخه از ISA متعلق به eBPF هدف قرار گیرد. ممکن است نسخه‌های جدیدتر توسط همه هسته‌ها پشتیبانی نشوند. مقدار پیش‌فرض \fBv4\fR است. .Sp مقادیر پشتیبانی‌شده برای \fIversion\fR عبارتند از: .RS 4 .IP \fBv1\fR 4 .IX Item "v1" نخستین ISA پایدار eBPF بدون قابلیت‌ها یا افزونه‌های ویژه. .IP \fBv2\fR 4 .IX Item "v2" پشتیبانی از افزونه‌های پرش، همانند \fB\-mjmpext\fR. .IP \fBv3\fR 4 .IX Item "v3" تمامی قابلیت‌های v2، به‌علاوه: .RS 4 .IP "\-<عملیات‌های پرش ۳۲ بیتی، مانند \fB\-mjmp32\fR>" 4 .IX Item "-<32-bit jump operations, as in -mjmp32>" .PD 0 .IP "\-<عملیات‌های ALU ۳۲ بیتی، مانند \fB\-malu32\fR>" 4 .IX Item "-<32-bit ALU operations, as in -malu32>" .IP "\-<عملیات‌های اتمیک عمومی، مانند \fB\-mv3\-atomics\fR>" 4 .IX Item "-" .PD .RE .RS 4 .RE .IP \fBv4\fR 4 .IX Item "v4" تمامی قابلیت‌های v3، به‌علاوه: .RS 4 .IP "\-<دستورالعمل‌های جابه‌جایی بایت، مانند \fB\-mbswap\fR>" 4 .IX Item "-" .PD 0 .IP "\-<دستورالعمل‌های تقسیم علامت‌دار و باقیمانده، مانند \fB\-msdiv\fR>" 4 .IX Item "-" .IP "\-<دستورالعمل‌های انتقال با بسط علامت و بارگذاری حافظه، مانند \fB\-msmov\fR>" 4 .IX Item "-" .PD .RE .RS 4 .RE .RE .RS 4 .RE .IP \fB\-mco\-re\fR 4 .IX Item "-mco-re" فعال کردن پشتیبانی از BPF Compile Once \- Run Everywhere (CO\-RE). به \fB\-gbtf\fR نیاز دارد و توسط آن به‌طور ضمنی فعال می‌شود. .IP \fB\-mno\-co\-re\fR 4 .IX Item "-mno-co-re" غیرفعال کردن پشتیبانی از BPF Compile Once \- Run Everywhere (CO\-RE). هنگام تولید اطلاعات اشکال‌زدایی BTF برای هدف BPF، پشتیبانی از BPF CO\-RE به‌طور پیش‌فرض فعال است. .IP \fB\-mxbpf\fR 4 .IX Item "-mxbpf" تولید کد برای نسخه گسترش‌یافته‌ای از BPF که برخی از محدودیت‌های تحمیل‌شده توسط معماری BPF را کاهش می‌دهد: .RS 4 .IP "\-<ذخیره و بازیابی ثبات‌های callee\-saved به‌ترتیب در ورود به تابع و>" 4 .IX Item "-" خروج از آن. .RE .RS 4 .RE .IP \fB\-masm=\fR\fIdialect\fR 4 .IX Item "-masm=dialect" دستورالعمل‌های اسمبلی را با استفاده از \fIdialect\fR (گویش) انتخاب‌شده eBPF در خروجی قرار می‌دهد. پیش‌فرض \fBpseudoc\fR است. .Sp مقادیر پشتیبانی‌شده برای \fIdialect\fR عبارتند از: .RS 4 .IP \fBnormal\fR 4 .IX Item "normal" گویش اسمبلی عادی را خروجی می‌دهد. .IP \fBpseudoc\fR 4 .IX Item "pseudoc" گویش اسمبلی pseudo\-c (شبه‌سی) را خروجی می‌دهد. .RE .RS 4 .RE .IP \fB\-minline\-memops\-threshold=\fR\fIbytes\fR 4 .IX Item "-minline-memops-threshold=bytes" آستانه اندازه‌ای را بر حسب بایت تعیین می‌کند که در آن یا کمتر از آن، memmove، memcpy و memset همواره باید به‌صورت درون‌خطی (inline) بسط داده شوند. عملیات‌هایی با اندازه‌های بزرگ‌تر از این آستانه باید به‌جای بسط درون‌خطی با استفاده از یک فراخوانی کتابخانه‌ای پیاده‌سازی شوند، اما از آنجا که BPF اجازه libcallها را نمی‌دهد، فراتر رفتن از این آستانه منجر به خطای زمان کامپایل می‌شود. مقدار پیش‌فرض \fB1024\fR بایت است..PP \fIگزینه‌های FR30\fR .IX Subsection "FR30 Options" .PP این گزینه‌ها به‌طور خاص برای پورت FR30 تعریف شده‌اند. .IP \fB\-msmall\-model\fR 4 .IX Item "-msmall-model" استفاده از مدل فضای آدرس‌دهی کوچک. این گزینه می‌تواند کد کوچک‌تری تولید کند، اما فرض می‌کند که تمامی مقادیر و نشانی‌های نمادین در یک محدودهٔ ۲۰ بیتی جای می‌گیرند. .IP \fB\-mno\-lsim\fR 4 .IX Item "-mno-lsim" فرض را بر این می‌گذارد که پشتیبانی زمان اجرا فراهم شده است و بنابراین نیازی به گنجاندن کتابخانهٔ شبیه‌ساز (\fIlibsim.a\fR) در خط فرمان پیونددهنده نیست. .PP \fIگزینه‌های FT32\fR .IX Subsection "FT32 Options" .PP این گزینه‌ها به‌طور خاص برای پورت FT32 تعریف شده‌اند. .IP \fB\-msim\fR 4 .IX Item "-msim" مشخص می‌کند که برنامه روی شبیه‌ساز اجرا خواهد شد. این امر موجب پیوند خوردن یک راه‌انداز زمان اجرا و کتابخانهٔ جایگزین می‌شود. هنگام تولید برنامه‌هایی که روی سخت‌افزار واقعی اجرا می‌شوند نباید از این گزینه استفاده کنید؛ باید کتابخانهٔ زمان اجرای خود را برای هر تابع ورودی/خروجی (I/O) مورد نیاز فراهم کنید. .IP \fB\-mlra\fR 4 .IX Item "-mlra" هیچ کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های پیشین حفظ شده است. .IP \fB\-mnodiv\fR 4 .IX Item "-mnodiv" از دستورالعمل‌های div و mod استفاده نشود. .IP \fB\-mft32b\fR 4 .IX Item "-mft32b" فعال‌سازی استفاده از دستورالعمل‌های گسترش‌یافتهٔ پردازندهٔ FT32B. .IP \fB\-mcompress\fR 4 .IX Item "-mcompress" فشرده‌سازی تمام کدها با استفاده از طرح فشرده‌سازی کد FT32B. .IP \fB\-mnopm\fR 4 .IX Item "-mnopm" کدی که حافظهٔ برنامه را می‌خواند تولید نشود. .PP \fIگزینه‌های FRV\fR .IX Subsection "FRV Options" .IP \fB\-mgpr\-32\fR 4 .IX Item "-mgpr-32" تنها از ۳۲ ثبات عمومی نخست استفاده شود. .IP \fB\-mgpr\-64\fR 4 .IX Item "-mgpr-64" استفاده از تمام ۶۴ ثبات عمومی. .IP \fB\-mfpr\-32\fR 4 .IX Item "-mfpr-32" تنها از ۳۲ ثبات ممیز شناور نخست استفاده شود. .IP \fB\-mfpr\-64\fR 4 .IX Item "-mfpr-64" استفاده از تمام ۶۴ ثبات ممیز شناور. .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" استفاده از دستورالعمل‌های سخت‌افزاری برای عملیات ممیز شناور. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" استفاده از توابع کتابخانه‌ای برای عملیات ممیز شناور. .IP \fB\-malloc\-cc\fR 4 .IX Item "-malloc-cc" تخصیص پویای ثبات‌های کد شرط. .IP \fB\-mfixed\-cc\fR 4 .IX Item "-mfixed-cc" ثبات‌های کد شرط به‌صورت پویا تخصیص داده نشوند؛ تنها از \f(CW\*(C`icc0\*(C'\fR و \f(CW\*(C`fcc0\*(C'\fR استفاده شود. .IP \fB\-mdword\fR 4 .IX Item "-mdword" تغییر ABI برای استفاده از دستورالعمل‌های کلمه دوگانه (double word). .IP \fB\-mno\-dword\fR 4 .IX Item "-mno-dword" از دستورالعمل‌های کلمه دوگانه استفاده نشود. .IP \fB\-mdouble\fR 4 .IX Item "-mdouble" استفاده از دستورالعمل‌های ممیز شناور با دقت مضاعف (double). .IP \fB\-mno\-double\fR 4 .IX Item "-mno-double" از دستورالعمل‌های ممیز شناور با دقت مضاعف استفاده نشود. .IP \fB\-mmedia\fR 4 .IX Item "-mmedia" استفاده از دستورالعمل‌های چندرسانه‌ای (media). .IP \fB\-mno\-media\fR 4 .IX Item "-mno-media" از دستورالعمل‌های چندرسانه‌ای استفاده نشود. .IP \fB\-mmuladd\fR 4 .IX Item "-mmuladd" استفاده از دستورالعمل‌های ضرب و جمع/تفریق. .IP \fB\-mno\-muladd\fR 4 .IX Item "-mno-muladd" از دستورالعمل‌های ضرب و جمع/تفریق استفاده نشود. .IP \fB\-mfdpic\fR 4 .IX Item "-mfdpic" انتخاب FDPIC ABI که از توصیف‌گرهای تابع برای نمایش اشاره‌گرها به توابع استفاده می‌کند. بدون هیچ‌یک از گزینه‌های مرتبط با PIC/PIE، این گزینه متضمن \fB\-fPIE\fR است. همراه با \fB\-fpic\fR یا \fB\-fpie\fR، فرض می‌کند که مدخل‌های GOT و داده‌های کوچک در یک محدودهٔ ۱۲ بیتی از نشانی پایهٔ GOT قرار دارند؛ همراه با \fB\-fPIC\fR یا \fB\-fPIE\fR، آفست‌های GOT به‌صورت ۳۲ بیتی محاسبه می‌شوند. در هدف \fBbfin\-elf\fR، این گزینه متضمن \fB\-msim\fR است. .IP \fB\-minline\-plt\fR 4 .IX Item "-minline-plt" فعال‌سازی درونی‌سازی (inlining) مدخل‌های PLT در فراخوانی توابعی که مشخص نیست به‌صورت محلی پیوند می‌خورند. این گزینه بدون \fB\-mfdpic\fR هیچ تأثیری ندارد. در صورت بهینه‌سازی برای سرعت و کامپایل برای کتابخانه‌های اشتراکی (یعنی \fB\-fPIC\fR یا \fB\-fpic\fR)، یا هنگامی که گزینهٔ بهینه‌سازی مانند \fB\-O3\fR یا بالاتر در خط فرمان مشخص شده باشد، به‌طور پیش‌فرض فعال است. .IP \fB\-mTLS\fR 4 .IX Item "-mTLS" هنگام تولید کد محلی رشته (thread-local)، قطعهٔ بزرگ TLS فرض شود. .IP \fB\-mtls\fR 4 .IX Item "-mtls" هنگام تولید کد محلی رشته، قطعهٔ بزرگ TLS فرض نشود. .IP \fB\-mgprel\-ro\fR 4 .IX Item "-mgprel-ro" فعال‌سازی استفاده از بازنشانی‌های \f(CW\*(C`GPREL\*(C'\fR در FDPIC ABI برای داده‌هایی که مشخصاً در بخش‌های فقط‌خواندنی قرار دارند. این گزینه به‌طور پیش‌فرض فعال است، به جز برای \fB\-fpic\fR یا \fB\-fpie\fR: حتی با اینکه ممکن است به کوچک‌تر شدن جدول آفست سراسری کمک کند، ۱ دستورالعمل را با ۴ دستورالعمل معاوضه می‌کند. همراه با \fB\-fPIC\fR یا \fB\-fPIE\fR، این گزینه ۳ دستورالعمل را با ۴ دستورالعمل معاوضه می‌کند که یکی از آن‌ها ممکن است بین چندین نماد به اشتراک گذاشته شود، و از نیاز به مدخل GOT برای نماد ارجاع‌شده جلوگیری می‌کند؛ بنابراین به احتمال زیاد یک مزیت خواهد بود. در غیر این صورت، می‌توان از \fB\-mno\-gprel\-ro\fR برای غیرفعال کردن آن استفاده کرد. .IP \fB\-multilib\-library\-pic\fR 4 .IX Item "-multilib-library-pic" پیوند با کتابخانه‌های pic (کتابخانه‌ای، نه FD). این گزینه توسط \&\fB\-mlibrary\-pic\fR و همچنین توسط \fB\-fPIC\fR و \&\fB\-fpic\fR بدون \fB\-mfdpic\fR به‌طور ضمنی اعمال می‌شود. هرگز نباید نیازی به استفادهٔ صریح از آن داشته باشید. .IP \fB\-mlinked\-fp\fR 4 .IX Item "-mlinked-fp" پیروی از الزامات EABI مبنی بر ایجاد همیشگی یک اشاره‌گر فریم هر زمان که یک فریم پشته تخصیص داده می‌شود. این گزینه به‌طور پیش‌فرض فعال است و می‌توان با \fB\-mno\-linked\-fp\fR آن را غیرفعال کرد. .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" استفاده از آدرس‌دهی غیرمستقیم برای فراخوانی توابع خارج از واحد ترجمهٔ کنونی. این گزینه اجازه می‌دهد توابع در هر نقطه‌ای از فضای آدرس‌دهی ۳۲ بیتی قرار گیرند. .IP \fB\-malign\-labels\fR 4 .IX Item "-malign-labels" تلاش برای تراز کردن برچسب‌ها با یک مرز ۸ بایتی از طریق درج NOPها در بستهٔ پیشین. این گزینه تنها زمانی تأثیر دارد که بسته‌بندی VLIW فعال باشد. بسته‌های جدیدی ایجاد نمی‌کند؛ صرفاً NOPها را به بسته‌های موجود اضافه می‌کند. .IP \fB\-mlibrary\-pic\fR 4 .IX Item "-mlibrary-pic" تولید کد مستقل از موقعیت بر پایهٔ EABI. .IP \fB\-macc\-4\fR 4 .IX Item "-macc-4" تنها از چهار ثبات نخست انباشتگر چندرسانه‌ای استفاده شود. .IP \fB\-macc\-8\fR 4 .IX Item "-macc-8" استفاده از تمامی هشت ثبات انباشتگر چندرسانه‌ای. .IP \fB\-mpack\fR 4 .IX Item "-mpack" بسته‌بندی دستورالعمل‌های VLIW. .IP \fB\-mno\-pack\fR 4 .IX Item "-mno-pack" دستورالعمل‌های VLIW بسته‌بندی نشوند. .IP \fB\-mno\-eflags\fR 4 .IX Item "-mno-eflags" سوئیچ‌های ABI در e_flags علامت‌گذاری نشوند. .IP \fB\-mcond\-move\fR 4 .IX Item "-mcond-move" فعال‌سازی استفاده از دستورالعمل‌های انتقال شرطی (پیش‌فرض). .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mno\-cond\-move\fR 4 .IX Item "-mno-cond-move" غیرفعال‌سازی استفاده از دستورالعمل‌های انتقال شرطی. .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mscc\fR 4 .IX Item "-mscc" فعال‌سازی استفاده از دستورالعمل‌های مقداردهی شرطی (پیش‌فرض). .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد..IP \fB\-mno\-scc\fR 4 .IX Item "-mno-scc" غیرفعال کردن استفاده از دستورالعمل‌های مقداردهی شرطی (conditional set). .Sp این سوییچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mcond\-exec\fR 4 .IX Item "-mcond-exec" فعال کردن استفاده از اجرای شرطی (پیش‌فرض). .Sp این سوییچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mno\-cond\-exec\fR 4 .IX Item "-mno-cond-exec" غیرفعال کردن استفاده از اجرای شرطی. .Sp این سوییچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mvliw\-branch\fR 4 .IX Item "-mvliw-branch" اجرای یک مرحله برای بسته‌بندی انشعاب‌ها در دستورالعمل‌های VLIW (پیش‌فرض). .Sp این سوییچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mno\-vliw\-branch\fR 4 .IX Item "-mno-vliw-branch" اجرا نکردن مرحله بسته‌بندی انشعاب‌ها در دستورالعمل‌های VLIW. .Sp این سوییچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mmulti\-cond\-exec\fR 4 .IX Item "-mmulti-cond-exec" فعال کردن بهینه‌سازی \f(CW\*(C`&&\*(C'\fR و \f(CW\*(C`||\*(C'\fR در اجرای شرطی (پیش‌فرض). .Sp این سوییچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mno\-multi\-cond\-exec\fR 4 .IX Item "-mno-multi-cond-exec" غیرفعال کردن بهینه‌سازی \f(CW\*(C`&&\*(C'\fR و \f(CW\*(C`||\*(C'\fR در اجرای شرطی. .Sp این سوییچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mnested\-cond\-exec\fR 4 .IX Item "-mnested-cond-exec" فعال کردن بهینه‌سازی‌های اجرای شرطی تودرتو (پیش‌فرض). .Sp این سوییچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mno\-nested\-cond\-exec\fR 4 .IX Item "-mno-nested-cond-exec" غیرفعال کردن بهینه‌سازی‌های اجرای شرطی تودرتو. .Sp این سوییچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-moptimize\-membar\fR 4 .IX Item "-moptimize-membar" این سوییچ دستورالعمل‌های زائد \f(CW\*(C`membar\*(C'\fR را از کد تولیدشده توسط کامپایلر حذف می‌کند. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-mno\-optimize\-membar\fR 4 .IX Item "-mno-optimize-membar" این سوییچ حذف خودکار دستورالعمل‌های زائد \f(CW\*(C`membar\*(C'\fR از کد تولیدشده را غیرفعال می‌کند. .IP \fB\-mtomcat\-stats\fR 4 .IX Item "-mtomcat-stats" باعث می‌شود gas آمار مربوط به tomcat را چاپ کند. .IP \fB\-mcpu=\fR\fIcpu\fR 4 .IX Item "-mcpu=cpu" انتخاب نوع پردازنده‌ای که کد برای آن تولید می‌شود. مقادیر ممکن عبارتند از: \&\fBfrv\fR، \fBfr550\fR، \fBtomcat\fR، \fBfr500\fR، \fBfr450\fR، \&\fBfr405\fR، \fBfr400\fR، \fBfr300\fR و \fBsimple\fR. .PP \fIگزینه‌های GNU/Linux\fR .IX Subsection "GNU/Linux Options" .PP این گزینه‌های \fB\-m\fR برای مقصدهای GNU/Linux تعریف شده‌اند: .IP \fB\-mglibc\fR 4 .IX Item "-mglibc" استفاده از کتابخانه سی گنو (GNU C library). این مقدار پیش‌فرض است مگر در مقصدهای \fB*\-*\-linux\-*uclibc*\fR، \fB*\-*\-linux\-*musl*\fR و \&\fB*\-*\-linux\-*android*\fR. .IP \fB\-muclibc\fR 4 .IX Item "-muclibc" استفاده از کتابخانه سی uClibc. این گزینه در مقصدهای \&\fB*\-*\-linux\-*uclibc*\fR پیش‌فرض است. .IP \fB\-mmusl\fR 4 .IX Item "-mmusl" استفاده از کتابخانه سی musl. این گزینه در مقصدهای \&\fB*\-*\-linux\-*musl*\fR پیش‌فرض است. .IP \fB\-mbionic\fR 4 .IX Item "-mbionic" استفاده از کتابخانه سی Bionic. این گزینه در مقصدهای \&\fB*\-*\-linux\-*android*\fR پیش‌فرض است. .IP \fB\-mandroid\fR 4 .IX Item "-mandroid" کامپایل کد سازگار با پلتفرم Android. این گزینه در مقصدهای \&\fB*\-*\-linux\-*android*\fR پیش‌فرض است. .Sp هنگام کامپایل، این گزینه به‌طور پیش‌فرض \fB\-mbionic\fR، \fB\-fPIC\fR، \&\fB\-fno\-exceptions\fR و \fB\-fno\-rtti\fR را فعال می‌کند. هنگام پیوند، این گزینه باعث می‌شود راه‌انداز GCC گزینه‌های مخصوص Android را به پیونددهنده ارسال کند. در نهایت، این گزینه باعث می‌شود ماکروی پیش‌پردازندهٔ \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR تعریف شود. .IP \fB\-tno\-android\-cc\fR 4 .IX Item "-tno-android-cc" غیرفعال کردن اثرات کامپایل \fB\-mandroid\fR؛ یعنی عدم فعال‌سازی پیش‌فرض \&\fB\-mbionic\fR، \fB\-fPIC\fR، \fB\-fno\-exceptions\fR و \&\fB\-fno\-rtti\fR. .IP \fB\-tno\-android\-ld\fR 4 .IX Item "-tno-android-ld" غیرفعال کردن اثرات پیوند \fB\-mandroid\fR؛ یعنی ارسال گزینه‌های پیوند استاندارد لینوکس به پیونددهنده. .PP \fIگزینه‌های H8/300\fR .IX Subsection "H8/300 Options" .PP این گزینه‌های \fB\-m\fR برای پیاده‌سازی‌های H8/300 تعریف شده‌اند: .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" کوتاه‌تر کردن برخی از ارجاعات آدرس در زمان پیوند در صورت امکان؛ از گزینهٔ پیونددهندهٔ \fB\-relax\fR استفاده می‌کند. .IP \fB\-mh\fR 4 .IX Item "-mh" تولید کد برای H8/300H. .IP \fB\-ms\fR 4 .IX Item "-ms" تولید کد برای H8S. .IP \fB\-mn\fR 4 .IX Item "-mn" تولید کد برای H8S و H8/300H در حالت عادی (normal mode). این سوییچ باید همراه با \fB\-mh\fR یا \fB\-ms\fR استفاده شود. .IP \fB\-ms2600\fR 4 .IX Item "-ms2600" تولید کد برای H8S/2600. این سوییچ باید همراه با \fB\-ms\fR استفاده شود. .IP \fB\-mexr\fR 4 .IX Item "-mexr" ثبات‌های گسترش‌یافته پیش از اجرای تابعی با صفت monitor روی پشته ذخیره می‌شوند. گزینهٔ پیش‌فرض \fB\-mexr\fR است. این گزینه فقط برای مقصدهای H8S معتبر است. .IP \fB\-mno\-exr\fR 4 .IX Item "-mno-exr" ثبات‌های گسترش‌یافته پیش از اجرای تابعی با صفت monitor روی پشته ذخیره نمی‌شوند. گزینهٔ پیش‌فرض \fB\-mno\-exr\fR است. این گزینه فقط برای مقصدهای H8S معتبر است. .IP \fB\-mint32\fR 4 .IX Item "-mint32" تنظیم پیش‌فرض داده‌های \f(CW\*(C`int\*(C'\fR روی ۳۲ بیت. .IP \fB\-malign\-300\fR 4 .IX Item "-malign-300" روی H8/300H و H8S، از همان قواعد ترازسازی مربوط به H8/300 استفاده می‌کند. پیش‌فرض برای H8/300H و H8S تراز کردن longها و floatها روی مرزهای ۴ بایتی است. \&\fB\-malign\-300\fR باعث می‌شود آن‌ها روی مرزهای ۲ بایتی تراز شوند. این گزینه تأثیری روی H8/300 ندارد. .PP \fIگزینه‌های HPPA\fR .IX Subsection "HPPA Options" .PP این گزینه‌های \fB\-m\fR برای خانوادهٔ رایانه‌های HPPA تعریف شده‌اند: .IP \fB\-march=\fR\fIarchitecture\-type\fR 4 .IX Item "-march=architecture-type" تولید کد برای معماری مشخص‌شده. انتخاب‌ها برای \&\fIarchitecture\-type\fR عبارتند از \fB1.0\fR برای پردازنده‌های PA 1.0، مقدار \fB1.1\fR برای PA 1.1، و \fB2.0\fR برای پردازنده‌های PA 2.0. برای تعیین گزینهٔ معماری مناسب برای ماشین خود، به \fI/usr/lib/sched.models\fR در یک سیستم HP\-UX مراجعه کنید. کدی که برای معماری‌های با شماره پایین‌تر کامپایل شده است روی معماری‌های با شماره بالاتر اجرا می‌شود، اما عکس آن ممکن نیست. .IP \fB\-mpa\-risc\-1\-0\fR 4 .IX Item "-mpa-risc-1-0" .PD 0 .IP \fB\-mpa\-risc\-1\-1\fR 4 .IX Item "-mpa-risc-1-1" .IP \fB\-mpa\-risc\-2\-0\fR 4 .IX Item "-mpa-risc-2-0" .PD به‌ترتیب مترادف‌هایی برای \fB\-march=1.0\fR، \fB\-march=1.1\fR و \fB\-march=2.0\fR. .IP \fB\-matomic\-libcalls\fR 4 .IX Item "-matomic-libcalls" تولید فراخوانی‌های کتابخانه‌ای (libcalls) برای بارگذاری‌ها و ذخیره‌سازی‌های اتمیک در صورت غیرفعال بودن فراخوانی‌های همگام‌سازی (sync). این گزینه به‌طور پیش‌فرض فعال است. این گزینه تنها بر تولید فراخوانی‌های کتابخانه‌ای اتمیک توسط بک‌اند HPPA تأثیر می‌گذارد. .Sp هر دو پیاده‌سازی فراخوانی کتابخانه‌ای sync و \fIlibatomic\fR از قفل‌گذاری استفاده می‌کنند. در نتیجه، ذخیره‌سازی‌های پردازنده نسبت به سایر عملیات اتمیک، اتمیک نیستند. بارگذاری‌های پردازنده تا اندازهٔ DImode نسبت به سایر عملیات اتمیک، به شرطی که به‌صورت یک دسترسی واحد پیاده‌سازی شوند، اتمیک هستند. .Sp معماری PA\-RISC در سخت‌افزار از هیچ عملیات اتمیکی به جز دستورالعمل \f(CW\*(C`ldcw\*(C'\fR پشتیبانی نمی‌کند. از این رو، تمام پشتیبانی اتمیک با استفاده از فراخوانی‌های کتابخانه‌ای sync و atomic پیاده‌سازی می‌شود. پشتیبانی فراخوانی کتابخانه‌ای sync در \fIlibgcc.a\fR قرار دارد. پشتیبانی فراخوانی کتابخانه‌ای atomic در \&\fIlibatomic\fR قرار دارد. .Sp این گزینه فراخوانی‌های \f(CW\*(C`_\|_atomic_exchange\*(C'\fR را برای ذخیره‌سازی‌های اتمیک تولید می‌کند. همچنین مدیریت ویژه‌ای برای دسترسی‌های اتمیک DImode روی مقصدهای ۳۲ بیتی ارائه می‌دهد..IP \fB\-mbig\-switch\fR 4 .IX Item "-mbig-switch" هیچ کاری انجام نمی‌دهد. برای سازگاری با نسخه‌های پیشین حفظ شده است. .IP \fB\-mcaller\-copies\fR 4 .IX Item "-mcaller-copies" فراخواننده، آرگومان‌های تابعی را که با ارجاع پنهان ارسال شده‌اند کپی می‌کند. این گزینه باید با احتیاط استفاده شود چرا که با محیط زمان اجرای ۳۲\-بیتی پیش‌فرض سازگار نیست. با این حال، تنها ساختارهای داده‌ای بزرگ‌تر از هشت بایت از طریق ارجاع پنهان ارسال می‌شوند و این گزینه سازگاری بهتری با OpenMP فراهم می‌کند. .IP \fB\-mcoherent\-ldcw\fR 4 .IX Item "-mcoherent-ldcw" از راهنمای کنترل حافظهٔ نهان منسجم ldcw/ldcd استفاده می‌کند. .IP \fB\-mdisable\-fpregs\fR 4 .IX Item "-mdisable-fpregs" رجیسترهای ممیز شناور را غیرفعال می‌کند. معادل \f(CW\*(C`\-msoft\-float\*(C'\fR است. .IP \fB\-mdisable\-indexing\fR 4 .IX Item "-mdisable-indexing" از استفادهٔ کامپایلر از حالت‌های آدرس‌دهی نمایه‌سازی جلوگیری می‌کند. این کار مانع از بروز برخی مشکلات مبهم در هنگام کامپایل کدهای تولیدشده توسط MIG تحت MACH می‌شود. .IP \fB\-mfast\-indirect\-calls\fR 4 .IX Item "-mfast-indirect-calls" کدی تولید می‌کند که فرض می‌گیرد فراخوانی‌ها هرگز از مرزهای فضا عبور نمی‌کنند. این به GCC اجازه می‌دهد کدی تولید کند که فراخوانی‌های غیرمستقیم را با سرعت بیشتری انجام دهد. .Sp این گزینه در حضور کتابخانه‌های اشتراکی یا توابع تودرتو کار نمی‌کند. .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4 .IX Item "-mfixed-range=register-range" کدی تولید می‌کند که بازهٔ رجیسترهای مشخص‌شده را به عنوان رجیسترهای ثابت در نظر می‌گیرد. یک رجیستر ثابت رجیستری است که تخصیص‌دهندهٔ رجیستر نمی‌تواند از آن استفاده کند. این قابلیت هنگام کامپایل کدهای هسته کاربردی است. یک بازهٔ رجیستر به‌صورت دو رجیستر که با یک خط تیره از هم جدا شده‌اند مشخص می‌شود. می‌توان چندین بازهٔ رجیستر را با کاما از یکدیگر جدا و مشخص کرد. .IP \fB\-mgas\fR 4 .IX Item "-mgas" استفاده از دستورالعمل‌های اسمبلری را که فقط GAS متوجه آن‌ها می‌شود، فعال می‌کند. .IP \fB\-mgnu\-ld\fR 4 .IX Item "-mgnu-ld" از گزینه‌های مخصوص به GNU \fBld\fR استفاده می‌کند. این کار هنگام ساخت یک کتابخانهٔ اشتراکی، \fB\-shared\fR را به \fBld\fR ارسال می‌کند. این حالت پیش‌فرض است زمانی که GCC به‌طور صریح یا ضمنی با پیونددهندهٔ GNU پیکربندی شده باشد. این گزینه بر این‌که کدام \fBld\fR فراخوانی شود تأثیری ندارد؛ بلکه تنها پارامترهایی را که به آن \fBld\fR ارسال می‌شوند تغییر می‌دهد. پیونددهندهٔ \fBld\fR فراخوانی‌شده توسط گزینهٔ پیکربندی \fB\-\-with\-ld\fR، مسیر جستجوی برنامه‌های GCC و در نهایت \fBPATH\fR کاربر تعیین می‌شود. پیونددهندهٔ مورداستفادهٔ GCC را می‌توان با استفاده از \fBwhich \`gcc \-print\-prog\-name=ld\`\fR چاپ کرد. این گزینه تنها در GCC ۶۴\-بیتی HP\-UX در دسترس است، یعنی نسخه‌ای که با \fBhppa*64*\-*\-hpux*\fR پیکربندی شده باشد. .IP \fB\-mhp\-ld\fR 4 .IX Item "-mhp-ld" از گزینه‌های مخصوص به HP \fBld\fR استفاده می‌کند. این کار هنگام ساخت یک کتابخانهٔ اشتراکی \fB\-b\fR را به \fBld\fR ارسال کرده و در تمامی پیوندها \fB+Accept TypeMismatch\fR را به \fBld\fR می‌فرستد. این حالت پیش‌فرض است زمانی که GCC به‌طور صریح یا ضمنی با پیونددهندهٔ HP پیکربندی شده باشد. این گزینه بر این‌که کدام \fBld\fR فراخوانی شود تأثیری ندارد؛ بلکه تنها پارامترهایی را که به آن \fBld\fR ارسال می‌شوند تغییر می‌دهد. پیونددهندهٔ \fBld\fR فراخوانی‌شده توسط گزینهٔ پیکربندی \fB\-\-with\-ld\fR، مسیر جستجوی برنامه‌های GCC و در نهایت \fBPATH\fR کاربر تعیین می‌شود. پیونددهندهٔ استفاده‌شده توسط GCC را می‌توان با دستور \fBwhich \&\`gcc \-print\-prog\-name=ld\`\fR چاپ کرد. این گزینه تنها در GCC ۶۴\-بیتی HP\-UX در دسترس است، یعنی نسخه‌ای که با \fBhppa*64*\-*\-hpux*\fR پیکربندی شده باشد. .IP \fB\-mlinker\-opt\fR 4 .IX Item "-mlinker-opt" گذر بهینه‌سازی را در پیونددهندهٔ HP\-UX فعال می‌کند. توجه داشته باشید که این کار اشکال‌زدایی نمادین را غیرممکن می‌سازد. .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" کدی تولید می‌کند که از توالی‌های فراخوانی طولانی استفاده می‌کند. این کار تضمین می‌کند که یک فراخوانی همواره قادر است به خردکدهای تولیدشده توسط پیونددهنده دسترسی پیدا کند. پیش‌فرض این است که فراخوانی‌های طولانی تنها زمانی تولید شوند که فاصلهٔ محل فراخوانی تا آغاز تابع یا واحد ترجمه (بسته به مورد)، از محدودیت از پیش تعریف‌شده توسط نوع شاخه‌بندی مورداستفاده فراتر رود. این محدودیت‌ها برای فراخوانی‌های عادی به ترتیب ۷٬۶۰۰٬۰۰۰ و ۲۴۰٬۰۰۰ بایت برای معماری‌های PA 2.0 و PA 1.X است. محدودیت فراخوانی‌های هم‌سطح (Sibcalls) همواره روی ۲۴۰٬۰۰۰ بایت تنظیم است. .Sp هنگام استفاده از گزینهٔ \fB\-ffunction\-sections\fR، یا هنگام استفادهٔ هم‌زمان از گزینه‌های \fB\-mgas\fR و \fB\-mno\-portable\-runtime\fR تحت HP\-UX به همراه پیونددهندهٔ SOM، فاصله‌ها از ابتدای توابع سنجیده می‌شوند. .Sp معمولاً استفاده از این گزینه مطلوب نیست چرا که کارایی را کاهش می‌دهد. با این حال، ممکن است در برنامه‌های بزرگ، به‌ویژه زمانی که از پیوند جزئی برای ساخت برنامه استفاده می‌شود، سودمند باشد. .Sp انواع فراخوانی‌های طولانی مورداستفاده به قابلیت‌های اسمبلر و پیونددهنده و نوع کد در حال تولید بستگی دارد. تأثیر این مورد روی سیستم‌هایی که از فراخوانی‌های مطلق طولانی و فراخوانی‌های طولانی تفاوت نماد pic یا فراخوانی‌های وابسته به pc پشتیبانی می‌کنند، باید نسبتاً اندک باشد. با این وجود، در سیستم‌های ۳۲\-بیتی ELF در کدهای pic از فراخوانی غیرمستقیم استفاده می‌شود که بسیار طولانی است. .IP \fB\-mlong\-load\-store\fR 4 .IX Item "-mlong-load-store" توالی‌های بارگذاری و ذخیره‌سازی ۳\-دستوری را، همان‌گونه که گاهی توسط پیونددهندهٔ HP\-UX 10 الزامی است، تولید می‌کند. این گزینه معادل گزینهٔ \fB+k\fR در کامپایلرهای HP است. .IP \fB\-mjump\-in\-delay\fR 4 .IX Item "-mjump-in-delay" این گزینه نادیده گرفته می‌شود و صرفاً برای اهداف سازگاری ارائه شده است. .IP \fB\-mno\-space\-regs\fR 4 .IX Item "-mno-space-regs" کدی تولید می‌کند که فرض می‌کند هدف فاقد رجیسترهای فضا است. این موضوع به GCC امکان می‌دهد فراخوانی‌های غیرمستقیم سریع‌تری تولید کرده و از حالت‌های آدرس‌دهی نمایه‌ای مقیاس‌بندی‌نشده استفاده کند. .Sp چنین کدی برای هسته‌ها و سیستم‌های PA سطح ۰ مناسب است. .IP \fB\-mordered\fR 4 .IX Item "-mordered" فرض می‌کند ارجاعات حافظه مرتب هستند و نیازی به موانع حافظه نیست. .IP \fB\-mportable\-runtime\fR 4 .IX Item "-mportable-runtime" از قراردادهای فراخوانی سازگار ارائه‌شده توسط HP برای سیستم‌های ELF استفاده می‌کند. .IP \fB\-mschedule=\fR\fIcpu\-type\fR 4 .IX Item "-mschedule=cpu-type" کد را بر اساس محدودیت‌های نوع ماشین \fIcpu\-type\fR زمان‌بندی می‌کند. گزینه‌های انتخابی برای \fIcpu\-type\fR عبارت‌اند از: \fB700\fR، \fB7100\fR، \fB7100LC\fR، \fB7200\fR، \fB7300\fR و \fB8000\fR. برای تعیین گزینهٔ زمان‌بندی مناسب برای دستگاه خود، به \fI/usr/lib/sched.models\fR در سیستم HP\-UX مراجعه کنید. زمان‌بندی پیش‌فرض \fB8000\fR است. .IP \fB\-msio\fR 4 .IX Item "-msio" پیش‌تعریف \f(CW\*(C`_SIO\*(C'\fR را برای ورودی/خروجی سرور تولید می‌کند. پیش‌فرض \fB\-mwsio\fR است. این پیش‌فرض، پیش‌تعریف‌های \f(CW\*(C`_\|_hp9000s700\*(C'\fR، \f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR و \f(CW\*(C`_WSIO\*(C'\fR را برای ورودی/خروجی ایستگاه‌های کاری ایجاد می‌کند. این گزینه‌ها تحت HP\-UX و HI\-UX در دسترس هستند. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" خروجی‌ای تولید می‌کند که شامل فراخوانی‌های کتابخانه‌ای برای محاسبات ممیز شناور است. \fBهشدار:\fR کتابخانه‌های مورد نیاز برای تمام اهداف HPPA در دسترس نیستند. به‌طور معمول از امکانات کامپایلر C عادی سیستم استفاده می‌شود، اما این کار را نمی‌توان مستقیماً در کامپایل متقاطع انجام داد. شما باید تمهیدات لازم را برای ارائهٔ توابع کتابخانه‌ای مناسب جهت کامپایل متقاطع فراهم کنید. .Sp گزینهٔ \fB\-msoft\-float\fR قراردادهای فراخوانی را در فایل خروجی تغییر می‌دهد؛ بنابراین تنها زمانی مفید است که \fIتمامی\fR یک برنامه را با این گزینه کامپایل کنید. به‌ویژه، لازم است کتابخانهٔ \fIlibgcc.a\fR که همراه GCC ارائه می‌شود را با \fB\-msoft\-float\fR کامپایل کنید تا این قابلیت کار کند. .IP \fB\-msoft\-mult\fR 4 .IX Item "-msoft-mult" از ضرب عدد صحیح نرم‌افزاری استفاده می‌کند. .Sp این گزینه استفاده از دستورالعمل \f(CW\*(C`xmpyu\*(C'\fR را غیرفعال می‌کند. .IP \fB\-munix=\fR\fIunix\-std\fR 4 .IX Item "-munix=unix-std" پیش‌تعریف‌های کامپایلر را تولید کرده و یک فایل آغازین برای استاندارد UNIX مشخص‌شده انتخاب می‌کند. انتخاب‌های موجود برای \fIunix\-std\fR عبارت‌اند از \fB93\fR، \fB95\fR و \fB98\fR. گزینهٔ \fB93\fR در تمام نسخه‌های HP\-UX پشتیبانی می‌شود. \fB95\fR در HP\-UX 10.10 و پس از آن در دسترس است. \fB98\fR در HP\-UX 11.11 و پس از آن موجود است. مقادیر پیش‌فرض شامل \fB93\fR برای HP\-UX 10.00، مقدار \fB95\fR برای HP\-UX 10.10 تا 11.00، و \fB98\fR برای HP\-UX 11.11 و پس از آن است. .Sp گزینهٔ \fB\-munix=93\fR همان پیش‌تعریف‌های GCC 3.3 و 3.4 را فراهم می‌کند. \fB\-munix=95\fR پیش‌تعریف‌های اضافی برای \f(CW\*(C`XOPEN_UNIX\*(C'\fR و \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR و فایل آغازین \fIunix95.o\fR را فراهم می‌سازد. \fB\-munix=98\fR پیش‌تعریف‌های اضافی برای \f(CW\*(C`_XOPEN_UNIX\*(C'\fR، \f(CW\*(C`_XOPEN_SOURCE_EXTENDED\*(C'\fR، \f(CW\*(C`_INCLUDE_\|_STDC_A1_SOURCE\*(C'\fR و \f(CW\*(C`_INCLUDE_XOPEN_SOURCE_500\*(C'\fR، و فایل آغازین \fIunix98.o\fR را فراهم می‌کند. .Sp \fIبسیار مهم\fR است بدانید که این گزینه رابط‌های توابع مختلف کتابخانه‌ای را تغییر می‌دهد. همچنین بر رفتار عملیاتی کتابخانهٔ C اثرگذار است. از این رو، در استفاده از این گزینه احتیاط \fIبسیار زیادی\fR لازم است. .Sp کد کتابخانه‌ای که قصد دارد با بیش از یک استاندارد UNIX سازگار باشد، باید متغیر \f(CW\*(C`_\|_xpg4_extended_mask\*(C'\fR را بر حسب لزوم بررسی، مقداردهی و بازیابی کند. بیشتر نرم‌افزارهای GNU چنین قابلیتی را فراهم نمی‌کنند. .IP \fB\-nolibdld\fR 4 .IX Item "-nolibdld" هنگامی که گزینهٔ \fB\-static\fR در HP\-UX 10 و پس از آن مشخص شده باشد، از تولید گزینه‌های پیوندی که به دنبال libdld.sl می‌گردند جلوگیری می‌کند. .IP \fB\-static\fR 4 .IX Item "-static" پیاده‌سازی setlocale در libc تحت HP\-UX به libdld.sl وابستگی دارد. هیچ نسخهٔ آرشیوی (ایستا) از libdld.sl وجود ندارد. بنابراین، هنگامی که گزینهٔ \fB\-static\fR مشخص می‌شود، به گزینه‌های پیوند خاصی برای رفع این وابستگی نیاز است. .Sp در HP\-UX 10 و پس از آن، درایور GCC در صورت تعیین گزینهٔ \fB\-static\fR، گزینه‌های لازم برای پیوند با libdld.sl را اضافه می‌کند. این امر موجب می‌شود فایل باینری حاصل، پویا شود. در پورت ۶۴\-بیتی، پیونددهنده‌ها در هر حال به‌طور پیش‌فرض باینری‌های پویا تولید می‌کنند. از گزینهٔ \fB\-nolibdld\fR می‌توان برای جلوگیری از افزودن این گزینه‌های پیوند توسط درایور GCC استفاده کرد..IP \fB\-threads\fR 4 .IX Item "-threads" افزودن پشتیبانی از چندنخی با کتابخانهٔ \fIdce thread\fR تحت HP\-UX. این گزینه پرچم‌هایی را هم برای پیش‌پردازنده و هم برای پیونددهنده تنظیم می‌کند. .PP \fIگزینه‌های IA\-64\fR .IX Subsection "IA-64 Options" .PP این‌ها گزینه‌های \fB\-m\fR هستند که برای معماری Intel IA\-64 تعریف شده‌اند. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد برای یک هدف big\-endian. این حالت پیش‌فرض برای HP\-UX است. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد برای یک هدف little\-endian. این حالت پیش‌فرض برای AIX5 و GNU/Linux است. .IP \fB\-mgnu\-as\fR 4 .IX Item "-mgnu-as" .PD 0 .IP \fB\-mno\-gnu\-as\fR 4 .IX Item "-mno-gnu-as" .PD تولید (یا عدم تولید) کد برای اسمبلر GNU. این حالت پیش‌فرض است. .IP \fB\-mgnu\-ld\fR 4 .IX Item "-mgnu-ld" .PD 0 .IP \fB\-mno\-gnu\-ld\fR 4 .IX Item "-mno-gnu-ld" .PD تولید (یا عدم تولید) کد برای پیونددهندهٔ GNU. این حالت پیش‌فرض است. .IP \fB\-mno\-pic\fR 4 .IX Item "-mno-pic" تولید کدی که از ثبات global pointer استفاده نمی‌کند. نتیجه، کد مستقل از موقعیت نبوده و با IA\-64 ABI مغایرت دارد. .IP \fB\-mvolatile\-asm\-stop\fR 4 .IX Item "-mvolatile-asm-stop" .PD 0 .IP \fB\-mno\-volatile\-asm\-stop\fR 4 .IX Item "-mno-volatile-asm-stop" .PD تولید (یا عدم تولید) یک stop bit بلافاصله قبل و بعد از عبارت‌های volatile asm. .IP \fB\-mregister\-names\fR 4 .IX Item "-mregister-names" .PD 0 .IP \fB\-mno\-register\-names\fR 4 .IX Item "-mno-register-names" .PD تولید (یا عدم تولید) نام‌های ثبات \fBin\fR، \fBloc\fR و \fBout\fR برای ثبات‌های پشته‌ای (stacked registers). این ممکن است خروجی اسمبلر را خواناتر کند. .IP \fB\-mno\-sdata\fR 4 .IX Item "-mno-sdata" .PD 0 .IP \fB\-msdata\fR 4 .IX Item "-msdata" .PD غیرفعال‌سازی (یا فعال‌سازی) بهینه‌سازی‌هایی که از بخش دادهٔ کوچک (small data section) استفاده می‌کنند. این ممکن است برای دور زدن باگ‌های بهینه‌ساز مفید باشد. .IP \fB\-mconstant\-gp\fR 4 .IX Item "-mconstant-gp" تولید کدی که از یک مقدار ثابت تکی برای global pointer استفاده می‌کند. این گزینه هنگام کامپایل کردن کد کرنل مفید است. .IP \fB\-mauto\-pic\fR 4 .IX Item "-mauto-pic" تولید کدی که خودجابجاپذیر (self\-relocatable) باشد. این گزینه مستلزم \fB\-mconstant\-gp\fR است. این مورد هنگام کامپایل کردن کد سفت‌افزار (firmware) مفید است. .IP \fB\-minline\-float\-divide\-min\-latency\fR 4 .IX Item "-minline-float-divide-min-latency" تولید کد برای تقسیم‌های درون‌خطی (inline) مقادیر ممیز شناور با استفاده از الگوریتم با حداقل تاخیر. .IP \fB\-minline\-float\-divide\-max\-throughput\fR 4 .IX Item "-minline-float-divide-max-throughput" تولید کد برای تقسیم‌های درون‌خطی مقادیر ممیز شناور با استفاده از الگوریتم با حداکثر توان عملیاتی. .IP \fB\-mno\-inline\-float\-divide\fR 4 .IX Item "-mno-inline-float-divide" برای تقسیم‌های مقادیر ممیز شناور کد درون‌خطی تولید نکن. .IP \fB\-minline\-int\-divide\-min\-latency\fR 4 .IX Item "-minline-int-divide-min-latency" تولید کد برای تقسیم‌های درون‌خطی مقادیر عدد صحیح با استفاده از الگوریتم با حداقل تاخیر. .IP \fB\-minline\-int\-divide\-max\-throughput\fR 4 .IX Item "-minline-int-divide-max-throughput" تولید کد برای تقسیم‌های درون‌خطی مقادیر عدد صحیح با استفاده از الگوریتم با حداکثر توان عملیاتی. .IP \fB\-mno\-inline\-int\-divide\fR 4 .IX Item "-mno-inline-int-divide" برای تقسیم‌های مقادیر عدد صحیح کد درون‌خطی تولید نکن. .IP \fB\-minline\-sqrt\-min\-latency\fR 4 .IX Item "-minline-sqrt-min-latency" تولید کد برای جذر‌های درون‌خطی با استفاده از الگوریتم با حداقل تاخیر. .IP \fB\-minline\-sqrt\-max\-throughput\fR 4 .IX Item "-minline-sqrt-max-throughput" تولید کد برای جذر‌های درون‌خطی با استفاده از الگوریتم با حداکثر توان عملیاتی. .IP \fB\-mno\-inline\-sqrt\fR 4 .IX Item "-mno-inline-sqrt" برای \f(CW\*(C`sqrt\*(C'\fR کد درون‌خطی تولید نکن. .IP \fB\-mfused\-madd\fR 4 .IX Item "-mfused-madd" .PD 0 .IP \fB\-mno\-fused\-madd\fR 4 .IX Item "-mno-fused-madd" .PD تولید (یا عدم تولید) کدی که از دستورالعمل‌های ضرب/جمع یا ضرب/تفریق ادغام‌شده (fused) استفاده می‌کند. حالت پیش‌فرض، استفاده از این دستورالعمل‌ها است. .IP \fB\-mno\-dwarf2\-asm\fR 4 .IX Item "-mno-dwarf2-asm" .PD 0 .IP \fB\-mdwarf2\-asm\fR 4 .IX Item "-mdwarf2-asm" .PD عدم تولید (یا تولید) کد اسمبلر برای اطلاعات دیباگ شماره خط DWARF. این گزینه ممکن است هنگام عدم استفاده از اسمبلر GNU مفید باشد. .IP \fB\-mearly\-stop\-bits\fR 4 .IX Item "-mearly-stop-bits" .PD 0 .IP \fB\-mno\-early\-stop\-bits\fR 4 .IX Item "-mno-early-stop-bits" .PD اجازه می‌دهد stop bitها زودتر از محل بلافاصله قبل از دستورالعملی که stop bit را فعال کرده است، قرار گیرند. این کار می‌تواند زمان‌بندی دستورالعمل را بهبود بخشد، اما همواره چنین نیست. .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4 .IX Item "-mfixed-range=register-range" تولید کدی که با محدودهٔ ثبات داده‌شده به عنوان ثبات‌های ثابت برخورد می‌کند. ثبات ثابت ثباتی است که تخصیص‌دهندهٔ ثبات نمی‌تواند از آن استفاده کند. این هنگام کامپایل کردن کد کرنل مفید است. محدودهٔ ثبات به صورت دو ثبات که با یک خط تیره جدا شده‌اند تعیین می‌شود. چندین محدودهٔ ثبات را می‌توان به صورت جداشده با کاما تعیین کرد. .IP \fB\-mtls\-size=\fR\fItls\-size\fR 4 .IX Item "-mtls-size=tls-size" تعیین اندازهٔ بیت آفست‌های بی‌واسطهٔ (immediate) TLS. مقادیر معتبر عبارتند از 14، 22 و 64. .IP \fB\-mtune=\fR\fIcpu\-type\fR 4 .IX Item "-mtune=cpu-type" تنظیم دقیق زمان‌بندی دستورالعمل برای یک پردازندهٔ خاص. مقادیر معتبر عبارتند از \&\fBitanium\fR، \fBitanium1\fR، \fBmerced\fR، \fBitanium2\fR و \fBmckinley\fR. .IP \fB\-milp32\fR 4 .IX Item "-milp32" .PD 0 .IP \fB\-mlp64\fR 4 .IX Item "-mlp64" .PD تولید کد برای یک محیط ۳۲بیتی یا ۶۴بیتی. محیط ۳۲بیتی int، long و pointer را روی ۳۲ بیت تنظیم می‌کند. محیط ۶۴بیتی int را روی ۳۲ بیت و long و pointer را روی ۶۴ بیت تنظیم می‌کند. این‌ها پرچم‌های مختص HP\-UX هستند. .IP \fB\-mno\-sched\-br\-data\-spec\fR 4 .IX Item "-mno-sched-br-data-spec" .PD 0 .IP \fB\-msched\-br\-data\-spec\fR 4 .IX Item "-msched-br-data-spec" .PD (غیرفعال/فعال‌سازی) زمان‌بندی حدسی داده‌ها پیش از reload. این منجر به تولید دستورالعمل‌های \f(CW\*(C`ld.a\*(C'\fR و دستورالعمل‌های بررسی متناظر (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR) می‌شود. تنظیم پیش‌فرض، غیرفعال است. .IP \fB\-msched\-ar\-data\-spec\fR 4 .IX Item "-msched-ar-data-spec" .PD 0 .IP \fB\-mno\-sched\-ar\-data\-spec\fR 4 .IX Item "-mno-sched-ar-data-spec" .PD (فعال/غیرفعال‌سازی) زمان‌بندی حدسی داده‌ها پس از reload. این منجر به تولید دستورالعمل‌های \f(CW\*(C`ld.a\*(C'\fR و دستورالعمل‌های بررسی متناظر (\f(CW\*(C`ld.c\*(C'\fR / \f(CW\*(C`chk.a\*(C'\fR) می‌شود. تنظیم پیش‌فرض، فعال است. .IP \fB\-mno\-sched\-control\-spec\fR 4 .IX Item "-mno-sched-control-spec" .PD 0 .IP \fB\-msched\-control\-spec\fR 4 .IX Item "-msched-control-spec" .PD (غیرفعال/فعال‌سازی) زمان‌بندی حدسی کنترلی. این ویژگی تنها در طول زمان‌بندی ناحیه‌ای (یعنی پیش از reload) در دسترس است. این منجر به تولید دستورالعمل‌های \f(CW\*(C`ld.s\*(C'\fR و دستورالعمل‌های بررسی متناظر \f(CW\*(C`chk.s\*(C'\fR می‌شود. تنظیم پیش‌فرض، غیرفعال است..IP \fB\-msched\-br\-in\-data\-spec\fR 4 .IX Item "-msched-br-in-data-spec" .PD 0 .IP \fB\-mno\-sched\-br\-in\-data\-spec\fR 4 .IX Item "-mno-sched-br-in-data-spec" .PD فعال/غیرفعال کردن زمان‌بندی حدسی دستورالعمل‌هایی که قبل از reload به بارگذاری‌های حدسی داده (data speculative loads) وابسته هستند. این گزینه تنها در صورت فعال بودن \fB\-msched\-br\-data\-spec\fR مؤثر است. مقدار پیش‌فرض، فعال است. .IP \fB\-msched\-ar\-in\-data\-spec\fR 4 .IX Item "-msched-ar-in-data-spec" .PD 0 .IP \fB\-mno\-sched\-ar\-in\-data\-spec\fR 4 .IX Item "-mno-sched-ar-in-data-spec" .PD فعال/غیرفعال کردن زمان‌بندی حدسی دستورالعمل‌هایی که پس از reload به بارگذاری‌های حدسی داده وابسته هستند. این گزینه تنها در صورت فعال بودن \fB\-msched\-ar\-data\-spec\fR مؤثر است. مقدار پیش‌فرض، فعال است. .IP \fB\-msched\-in\-control\-spec\fR 4 .IX Item "-msched-in-control-spec" .PD 0 .IP \fB\-mno\-sched\-in\-control\-spec\fR 4 .IX Item "-mno-sched-in-control-spec" .PD فعال/غیرفعال کردن زمان‌بندی حدسی دستورالعمل‌هایی که به بارگذاری‌های حدسی کنترلی (control speculative loads) وابسته هستند. این گزینه تنها در صورت فعال بودن \fB\-msched\-control\-spec\fR مؤثر است. مقدار پیش‌فرض، فعال است. .IP \fB\-mno\-sched\-prefer\-non\-data\-spec\-insns\fR 4 .IX Item "-mno-sched-prefer-non-data-spec-insns" .PD 0 .IP \fB\-msched\-prefer\-non\-data\-spec\-insns\fR 4 .IX Item "-msched-prefer-non-data-spec-insns" .PD در صورت فعال بودن، دستورالعمل‌های حدسی داده تنها زمانی برای زمان‌بندی انتخاب می‌شوند که در آن لحظه هیچ گزینهٔ دیگری وجود نداشته باشد. این کار استفاده از حدس داده را بسیار محافظه‌کارانه‌تر می‌کند. مقدار پیش‌فرض، غیرفعال است. .IP \fB\-mno\-sched\-prefer\-non\-control\-spec\-insns\fR 4 .IX Item "-mno-sched-prefer-non-control-spec-insns" .PD 0 .IP \fB\-msched\-prefer\-non\-control\-spec\-insns\fR 4 .IX Item "-msched-prefer-non-control-spec-insns" .PD در صورت فعال بودن، دستورالعمل‌های حدسی کنترلی تنها زمانی برای زمان‌بندی انتخاب می‌شوند که در آن لحظه هیچ گزینهٔ دیگری وجود نداشته باشد. این کار استفاده از حدس کنترلی را بسیار محافظه‌کارانه‌تر می‌کند. مقدار پیش‌فرض، غیرفعال است. .IP \fB\-mno\-sched\-count\-spec\-in\-critical\-path\fR 4 .IX Item "-mno-sched-count-spec-in-critical-path" .PD 0 .IP \fB\-msched\-count\-spec\-in\-critical\-path\fR 4 .IX Item "-msched-count-spec-in-critical-path" .PD در صورت فعال بودن، وابستگی‌های حدسی در طول محاسبهٔ اولویت دستورالعمل‌ها در نظر گرفته می‌شوند. این کار استفاده از حدس‌زنی را کمی محافظه‌کارانه‌تر می‌کند. مقدار پیش‌فرض، غیرفعال است. .IP \fB\-msched\-spec\-ldc\fR 4 .IX Item "-msched-spec-ldc" استفاده از یک بررسی ساده برای حدس داده. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-msched\-control\-spec\-ldc\fR 4 .IX Item "-msched-control-spec-ldc" استفاده از یک بررسی ساده برای حدس کنترلی. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-msched\-stop\-bits\-after\-every\-cycle\fR 4 .IX Item "-msched-stop-bits-after-every-cycle" قرار دادن یک بیت توقف (stop bit) پس از هر چرخه در هنگام زمان‌بندی. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-msched\-fp\-mem\-deps\-zero\-cost\fR 4 .IX Item "-msched-fp-mem-deps-zero-cost" فرض می‌کند که بارگذاری‌ها و ذخیره‌سازی‌های ممیز شناور در صورت قرارگیری در یک گروه دستورالعمل، احتمالاً باعث ایجاد تداخل نخواهند شد. این گزینه به‌طور پیش‌فرض غیرفعال است. .IP \fB\-msel\-sched\-dont\-check\-control\-spec\fR 4 .IX Item "-msel-sched-dont-check-control-spec" تولید بررسی‌ها برای حدس کنترلی در زمان‌بندی انتخابی (selective scheduling). این پرچم به‌طور پیش‌فرض غیرفعال است. .IP \fB\-msched\-max\-memory\-insns=\fR\fImax\-insns\fR 4 .IX Item "-msched-max-memory-insns=max-insns" محدود کردن تعداد دستورالعمل‌های حافظه در هر گروه دستورالعمل، با تخصیص اولویت پایین‌تر به دستورالعمل‌های حافظهٔ بعدی که تلاش می‌کنند در همان گروه دستورالعمل زمان‌بندی شوند. این گزینه اغلب برای جلوگیری از تداخل در بانک‌های حافظهٔ نهان (cache bank conflicts) مفید است. مقدار پیش‌فرض ۱ است. .IP \fB\-msched\-max\-memory\-insns\-hard\-limit\fR 4 .IX Item "-msched-max-memory-insns-hard-limit" محدودیت مشخص‌شده توسط \fBmsched\-max\-memory\-insns\fR را به یک محدودیت سخت (hard limit) تبدیل می‌کند، به‌طوری که وجود تعداد بیشتری از آن مقدار در یک گروه دستورالعمل غیرمجاز می‌شود. در غیر این صورت، محدودیت «نرم» (soft) است؛ بدین معنی که با رسیدن به حد نصاب، عملیات‌های غیر حافظه‌ای ترجیح داده می‌شوند، اما همچنان ممکن است عملیات‌های حافظه زمان‌بندی شوند. .PP \fIگزینه‌های LM32\fR .IX Subsection "LM32 Options" .PP این گزینه‌های \fB\-m\fR برای معماری LatticeMico32 تعریف شده‌اند: .IP \fB\-mbarrel\-shift\-enabled\fR 4 .IX Item "-mbarrel-shift-enabled" فعال‌سازی دستورالعمل‌های barrel\-shift (شیفت بشکه‌ای). .IP \fB\-mdivide\-enabled\fR 4 .IX Item "-mdivide-enabled" فعال‌سازی دستورالعمل‌های تقسیم و باقیمانده (modulus). .IP \fB\-mmultiply\-enabled\fR 4 .IX Item "-mmultiply-enabled" فعال‌سازی دستورالعمل‌های ضرب. .IP \fB\-msign\-extend\-enabled\fR 4 .IX Item "-msign-extend-enabled" فعال‌سازی دستورالعمل‌های بسط علامت (sign extend). .IP \fB\-muser\-enabled\fR 4 .IX Item "-muser-enabled" فعال‌سازی دستورالعمل‌های تعریف‌شده توسط کاربر. .PP \fIگزینه‌های LoongArch\fR .IX Subsection "LoongArch Options" .PP این گزینه‌های خط فرمان برای مقصدهای LoongArch تعریف شده‌اند: .IP \fB\-march=\fR\fIarch\-type\fR 4 .IX Item "-march=arch-type" تولید دستورالعمل‌ها برای نوع ماشین \fIarch\-type\fR. \&\fB\-march=\fR\fIarch\-type\fR به GCC اجازه می‌دهد کدی تولید کند که ممکن است روی پردازنده‌هایی غیر از پردازندهٔ مشخص‌شده اصلاً اجرا نشود. .Sp گزینه‌های موجود برای \fIarch\-type\fR عبارتند از: .RS 4 .IP \fBnative\fR 4 .IX Item "native" نوع پردازندهٔ محلی شناسایی‌شده توسط کامپایلر بومی. .IP \fBloongarch64\fR 4 .IX Item "loongarch64" پردازندهٔ ۶۴ بیتی عمومی LoongArch. .IP \fBla464\fR 4 .IX Item "la464" پردازندهٔ مبتنی بر LoongArch LA464 به همراه LSX و LASX. .IP \fBla664\fR 4 .IX Item "la664" پردازندهٔ مبتنی بر LoongArch LA664 به همراه LSX، LASX و تمام دستورالعمل‌های LoongArch v1.1. .IP \fBla64v1.0\fR 4 .IX Item "la64v1.0" معماری مجموعه دستورالعمل LoongArch64 (ISA) نسخهٔ 1.0. .IP \fBla64v1.1\fR 4 .IX Item "la64v1.1" معماری مجموعه دستورالعمل LoongArch64 (ISA) نسخهٔ 1.1. .RE .RS 4 .Sp اطلاعات بیشتر دربارهٔ نسخه‌های LoongArch ISA را می‌توان در <\fBhttps://github.com/loongson/la\-toolchain\-conventions\fR> یافت. .RE .IP \fB\-mtune=\fR\fItune\-type\fR 4 .IX Item "-mtune=tune-type" بهینه‌سازی کد تولیدشده برای پردازندهٔ مقصد مشخص‌شده. .Sp گزینه‌های موجود برای \fItune\-type\fR عبارتند از: .RS 4 .IP \fBnative\fR 4 .IX Item "native" نوع پردازندهٔ محلی شناسایی‌شده توسط کامپایلر بومی. .IP \fBgeneric\fR 4 .IX Item "generic" پردازندهٔ عمومی LoongArch. .IP \fBloongarch64\fR 4 .IX Item "loongarch64" پردازندهٔ ۶۴ بیتی عمومی LoongArch. .IP \fBla464\fR 4 .IX Item "la464" هستهٔ LoongArch LA464. .IP \fBla664\fR 4 .IX Item "la664" هستهٔ LoongArch LA664. .RE .RS 4 .RE .IP \fB\-mabi=\fR\fIbase\-abi\-type\fR 4 .IX Item "-mabi=base-abi-type" تولید کد برای قرارداد فراخوانی (calling convention) مشخص‌شده. \&\fIbase\-abi\-type\fR می‌تواند یکی از موارد زیر باشد: .RS 4 .IP \fBlp64d\fR 4 .IX Item "lp64d" استفاده از ثبات‌های ۶۴ بیتی عمومی و ثبات‌های ۳۲/۶۴ بیتی ممیز شناور برای ارسال پارامترها. مدل داده LP64 است، که در آن \fBint\fR ۳۲ بیتی، و \fBlong int\fR و اشاره‌گرها ۶۴ بیتی هستند..IP \fBlp64f\fR 4 .IX Item "lp64f" برای ارسال پارامترها از ثبات‌های همه‌منظورهٔ ۶۴ بیتی و ثبات‌های ممیز شناور ۳۲ بیتی استفاده می‌کند. مدل داده LP64 است، که در آن \fBint\fR برابر ۳۲ بیت و \fBlong int\fR و اشاره‌گرها ۶۴ بیتی هستند. .IP \fBlp64s\fR 4 .IX Item "lp64s" برای ارسال پارامترها از ثبات‌های همه‌منظورهٔ ۶۴ بیتی استفاده کرده و از ثبات‌های ممیز شناور استفاده نمی‌کند. مدل داده LP64 است، که در آن \fBint\fR برابر ۳۲ بیت و \fBlong int\fR و اشاره‌گرها ۶۴ بیتی هستند. .RE .RS 4 .RE .IP \fB\-mfpu=\fR\fIfpu\-type\fR 4 .IX Item "-mfpu=fpu-type" تولید کد برای نوع مشخص‌شدهٔ FPU، که می‌تواند یکی از موارد زیر باشد: .RS 4 .IP \fB64\fR 4 .IX Item "64" اجازه دادن به استفاده از دستورالعمل‌های سخت‌افزاری ممیز شناور برای عملیات‌های ۳۲ بیتی و ۶۴ بیتی. .IP \fB32\fR 4 .IX Item "32" اجازه دادن به استفاده از دستورالعمل‌های سخت‌افزاری ممیز شناور برای عملیات‌های ۳۲ بیتی. .IP \fBnone\fR 4 .IX Item "none" .PD 0 .IP \fB0\fR 4 .IX Item "0" .PD جلوگیری از استفاده از دستورالعمل‌های سخت‌افزاری ممیز شناور. .RE .RS 4 .RE .IP \fB\-msimd=\fR\fIsimd\-type\fR 4 .IX Item "-msimd=simd-type" فعال‌سازی تولید دستورالعمل‌های SIMD برای LoongArch جهت برداری‌سازی و از طریق توابع توکار (builtin functions). این مقدار می‌تواند یکی از موارد زیر باشد: .RS 4 .IP \fBlasx\fR 4 .IX Item "lasx" فعال‌سازی تولید دستورالعمل‌ها از افزونهٔ ۲۵۶ بیتی LoongArch Advanced SIMD Extension (LASX) و افزونهٔ ۱۲۸ بیتی LoongArch SIMD Extension (LSX). .IP \fBlsx\fR 4 .IX Item "lsx" فعال‌سازی تولید دستورالعمل‌ها از افزونهٔ ۱۲۸ بیتی LoongArch SIMD Extension (LSX). .IP \fBnone\fR 4 .IX Item "none" هیچ دستورالعمل LoongArch SIMD تولید نخواهد شد. .RE .RS 4 .RE .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" اجبار به \fB\-mfpu=none\fR و جلوگیری از استفاده از ثبات‌های ممیز شناور برای ارسال پارامترها. این گزینه ممکن است ABI هدف را تغییر دهد. .IP \fB\-msingle\-float\fR 4 .IX Item "-msingle-float" اجبار به \fB\-mfpu=32\fR و مجاز دانستن استفاده از ثبات‌های ممیز شناور ۳۲ بیتی برای ارسال پارامترها. این گزینه ممکن است ABI هدف را تغییر دهد. .IP \fB\-mdouble\-float\fR 4 .IX Item "-mdouble-float" اجبار به \fB\-mfpu=64\fR و مجاز دانستن استفاده از ثبات‌های ممیز شناور ۳۲/۶۴ بیتی برای ارسال پارامترها. این گزینه ممکن است ABI هدف را تغییر دهد. .IP \fB\-mlasx\fR 4 .IX Item "-mlasx" .PD 0 .IP \fB\-mno\-lasx\fR 4 .IX Item "-mno-lasx" .IP \fB\-mlsx\fR 4 .IX Item "-mlsx" .IP \fB\-mno\-lsx\fR 4 .IX Item "-mno-lsx" .PD محدودهٔ افزونه‌های SIMD (شامل none / LSX / LASX) را که توسط کامپایلر برای تولید کد قابل استفاده هستند، به‌صورت تدریجی تنظیم می‌کند. فعال‌سازی LASX با \&\fBmlasx\fR به‌طور خودکار LSX را فعال می‌کند، و غیرفعال کردن LSX با \fBmno\-lsx\fR به‌طور خودکار LASX را غیرفعال می‌سازد. این گزینه‌های مخصوص درایور بر روی وضعیت پیکربندی نهایی \&\fBmsimd\fR اعمال می‌شوند و به ترتیبی که در خط فرمان درایور GCC ظاهر شده‌اند تغییرات تدریجی ایجاد می‌کنند، تا گزینهٔ نهایی / استانداردسازی‌شدهٔ \&\fBmsimd\fR را که به خود کامپایلر تحویل داده می‌شود استخراج کنند. .IP \fB\-mbranch\-cost=\fR\fIn\fR 4 .IX Item "-mbranch-cost=n" هزینهٔ انشعاب‌ها را تقریباً برابر با \fIn\fR دستورالعمل تعیین می‌کند. .IP \fB\-maddr\-reg\-reg\-cost=\fR\fIn\fR 4 .IX Item "-maddr-reg-reg-cost=n" هزینهٔ ADDRESS_REG_REG را برابر با مقدار محاسبه‌شده توسط \fIn\fR قرار می‌دهد. .IP \fB\-mcheck\-zero\-division\fR 4 .IX Item "-mcheck-zero-division" .PD 0 .IP \fB\-mno\-check\-zero\-divison\fR 4 .IX Item "-mno-check-zero-divison" .PD تله‌گذاری (یا عدم تله‌گذاری) هنگام تقسیم عدد صحیح بر صفر. مقدار پیش‌فرض برای \fB\-O0\fR یا \fB\-Og\fR برابر \&\fB\-mcheck\-zero\-division\fR، و برای سایر سطوح بهینه‌سازی \&\fB\-mno\-check\-zero\-division\fR است. .IP \fB\-mcond\-move\-int\fR 4 .IX Item "-mcond-move-int" .PD 0 .IP \fB\-mno\-cond\-move\-int\fR 4 .IX Item "-mno-cond-move-int" .PD انتقال‌های شرطی برای داده‌های صحیح در ثبات‌های همه‌منظوره فعال (غیرفعال) می‌شوند. پیش‌فرض \fB\-mcond\-move\-int\fR است. .IP \fB\-mcond\-move\-float\fR 4 .IX Item "-mcond-move-float" .PD 0 .IP \fB\-mno\-cond\-move\-float\fR 4 .IX Item "-mno-cond-move-float" .PD انتقال‌های شرطی برای ثبات‌های ممیز شناور فعال (غیرفعال) می‌شوند. پیش‌فرض \fB\-mcond\-move\-float\fR است. .IP \fB\-mmemcpy\fR 4 .IX Item "-mmemcpy" .PD 0 .IP \fB\-mno\-memcpy\fR 4 .IX Item "-mno-memcpy" .PD اجبار (عدم اجبار) به استفاده از \f(CW\*(C`memcpy\*(C'\fR برای انتقال بلوک‌های غیربدیهی. پیش‌فرض \fB\-mno\-memcpy\fR است که به GCC امکان می‌دهد بیشتر رونوشت‌های با اندازهٔ ثابت را درون‌خطی کند. تنظیم سطح بهینه‌سازی به \fB\-Os\fR نیز استفاده از \f(CW\*(C`memcpy\*(C'\fR را اجباری می‌کند، اما در صورت مشخص شدن صریح، \fB\-mno\-memcpy\fR بدون توجه به ترتیب این گزینه‌ها در خط فرمان می‌تواند این رفتار را لغو کند. .IP \fB\-mstrict\-align\fR 4 .IX Item "-mstrict-align" .PD 0 .IP \fB\-mno\-strict\-align\fR 4 .IX Item "-mno-strict-align" .PD اجتناب از یا مجاز دانستن تولید دسترسی‌های حافظه‌ای که ممکن است بر مرز طبیعی شیء، آن‌طور که در مشخصات معماری بیان شده، تراز نشده باشند. مقدار پیش‌فرض \&\fB\-mno\-strict\-align\fR است. .IP "\fB\-G\fR \fInum\fR" 4 .IX Item "-G num" قرار دادن داده‌های سراسری و ایستا با اندازهٔ کوچک‌تر از \fInum\fR بایت در بخش داده‌های کوچک (small data section). مقدار پیش‌فرض 0 است. .IP \fB\-mmax\-inline\-memcpy\-size=\fR\fIn\fR 4 .IX Item "-mmax-inline-memcpy-size=n" درون‌خطی‌سازی تمامی انتقال‌های بلوکی (مانند فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR یا رونوشت ساختارها) با اندازهٔ کوچک‌تر یا مساوی \fIn\fR بایت. مقدار پیش‌فرض \fIn\fR برابر 1024 است. .IP \fB\-mcmodel=\fR\fIcode\-model\fR 4 .IX Item "-mcmodel=code-model" تنظیم مدل کد به یکی از موارد زیر: .RS 4 .IP "\fBtiny\-static (هنوز پیاده‌سازی نشده)\fR" 4 .IX Item "tiny-static (Not implemented yet)" .PD 0 .IP "\fBtiny (هنوز پیاده‌سازی نشده)\fR" 4 .IX Item "tiny (Not implemented yet)" .IP \fBnormal\fR 4 .IX Item "normal" .PD بخش کد (text segment) باید در فضای آدرس‌دهی 128MB باشد. بخش داده (data segment) باید در فضای آدرس‌دهی 2GB باشد. .IP \fBmedium\fR 4 .IX Item "medium" بخش کد و بخش داده باید در فضای آدرس‌دهی 2GB باشند. .IP "\fBlarge (هنوز پیاده‌سازی نشده)\fR" 4 .IX Item "large (Not implemented yet)" .PD 0 .IP \fBextreme\fR 4 .IX Item "extreme" .PD این حالت اندازهٔ بخش کد و بخش داده را محدود نمی‌کند. گزینهٔ \fB\-mcmodel=extreme\fR با \fB\-fplt\fR و/یا \fB\-mexplicit\-relocs=none\fR ناسازگار است. .RE .RS 4 .Sp مدل کد پیش‌فرض \f(CW\*(C`normal\*(C'\fR است. .RE .IP \fB\-mexplicit\-relocs=\fR\fIstyle\fR 4 .IX Item "-mexplicit-relocs=style" تعیین زمان استفاده از عملگرهای بازمکانی اسمبلر هنگام کار با آدرس‌های نمادین. روش جایگزین، استفاده از ماکروهای اسمبلر به جای آن‌ها است که ممکن است زمان‌بندی دستورالعمل‌ها را محدود کند اما امکان بهینه‌سازی پیونددهنده (linker relaxation) را فراهم می‌آورد. با \fB\-mexplicit\-relocs=none\fR همواره از ماکروهای اسمبلر استفاده می‌شود، با \fB\-mexplicit\-relocs=always\fR همواره عملگرهای بازمکانی اسمبلر به کار می‌روند، با \fB\-mexplicit\-relocs=auto\fR کامپایلر برای بهبود کیفیت کد در جایی که امکان بهینه‌سازی پیونددهنده وجود ندارد از عملگرهای بازمکانی و در جاهای دیگر از ماکروها استفاده می‌کند. مقدار پیش‌فرض این گزینه بر اساس قابلیت‌های اسمبلر که هنگام ساخت GCC تشخیص داده شده و نیز تنظیمات \fB\-mrelax\fR مشخص می‌شود: \&\fB\-mexplicit\-relocs=none\fR در صورتی که اسمبلر اصلاً از عملگرهای بازمکانی پشتیبانی نکند، \&\fB\-mexplicit\-relocs=always\fR در صورتی که اسمبلر از عملگرهای بازمکانی پشتیبانی کند اما \fB\-mrelax\fR فعال نباشد، \&\fB\-mexplicit\-relocs=auto\fR در صورتی که اسمبلر از عملگرهای بازمکانی پشتیبانی کند و \fB\-mrelax\fR فعال باشد..IP \fB\-mexplicit\-relocs\fR 4 .IX Item "-mexplicit-relocs" نام مستعاری برای \fB\-mexplicit\-relocs=always\fR جهت سازگاری با نسخه‌های پیشین. .IP \fB\-mno\-explicit\-relocs\fR 4 .IX Item "-mno-explicit-relocs" نام مستعاری برای \fB\-mexplicit\-relocs=none\fR جهت سازگاری با نسخه‌های پیشین. .IP \fB\-mdirect\-extern\-access\fR 4 .IX Item "-mdirect-extern-access" .PD 0 .IP \fB\-mno\-direct\-extern\-access\fR 4 .IX Item "-mno-direct-extern-access" .PD عدم استفاده یا استفاده از GOT برای دسترسی به نمادهای خارجی (external symbols). حالت پیش‌فرض \&\fB\-mno\-direct\-extern\-access\fR است: از GOT برای نمادهای خارجی با دیداری (visibility) پیش‌فرض استفاده می‌شود، اما برای سایر نمادهای خارجی استفاده نمی‌شود. .Sp با \fB\-mdirect\-extern\-access\fR، از GOT استفاده نمی‌شود و همهٔ نمادهای خارجی به صورت نسبت به PC آدرس‌دهی می‌شوند. این گزینه \fBفقط\fR برای محیط‌هایی مناسب است که در آن‌ها هیچ پیوند پویایی صورت نمی‌گیرد، مانند میان‌افزارها، هسته‌های سیستم‌عامل، یا فایل‌های اجرایی پیوند خورده با \fB\-static\fR یا \fB\-static\-pie\fR. گزینهٔ \&\fB\-mdirect\-extern\-access\fR با \fB\-fPIC\fR یا \&\fB\-fpic\fR سازگار نیست. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" .PD 0 .IP \fB\-mno\-relax\fR 4 .IX Item "-mno-relax" .PD بهره‌گیری (عدم بهره‌گیری) از بهینه‌سازی‌های ساده‌سازی پیونددهنده (linker relaxations). اگر \&\fB\-mpass\-mrelax\-to\-as\fR فعال باشد، این گزینه به اسمبلر نیز فرستاده می‌شود. حالت پیش‌فرض در زمان ساخت GCC با تشخیص پشتیبانی اسمبلر مربوطه تعیین می‌شود: اگر اسمبلر از هر دوی گزینهٔ \fB\-mrelax\fR و ساده‌سازی پرش شرطی پشتیبانی کند (این مورد لازم است، در غیر این صورت دستورهای \&\f(CW\*(C`.align\*(C'\fR و دستورهای پرش شرطی در کد اسمبلی خروجی GCC ممکن است به دلیل سرریز بازنشانی توسط اسمبلر رد شوند)، مقدار پیش‌فرض \&\fB\-mrelax\fR خواهد بود، و در غیر این صورت \fB\-mno\-relax\fR است. .IP \fB\-mpass\-mrelax\-to\-as\fR 4 .IX Item "-mpass-mrelax-to-as" .PD 0 .IP \fB\-mno\-pass\-mrelax\-to\-as\fR 4 .IX Item "-mno-pass-mrelax-to-as" .PD ارسال (عدم ارسال) گزینهٔ \fB\-mrelax\fR یا \fB\-mno\-relax\fR به اسمبلر. حالت پیش‌فرض در زمان ساخت GCC با تشخیص پشتیبانی اسمبلر مربوطه تعیین می‌شود: اگر اسمبلر از گزینهٔ \&\fB\-mrelax\fR پشتیبانی کند، مقدار \&\fB\-mpass\-mrelax\-to\-as\fR خواهد بود، و در غیر این صورت \fB\-mno\-pass\-mrelax\-to\-as\fR است. این گزینه بیشتر برای اشکال‌زدایی یا تعامل با اسمبلرهایی متفاوت از اسمبلر زمان ساخت کاربرد دارد. .IP \fB\-mrecip\fR 4 .IX Item "-mrecip" این گزینه استفاده از دستورالعمل‌های تخمین معکوس و تخمین معکوس ریشهٔ دوم را با گام‌های تکمیلی نیوتن\-رافسون جهت افزایش دقت، به جای انجام تقسیم یا ریشهٔ دوم و تقسیم برای آرگومان‌های ممیز شناور فعال می‌کند. این دستورالعمل‌ها تنها زمانی تولید می‌شوند که \fB\-funsafe\-math\-optimizations\fR همراه با \fB\-ffinite\-math\-only\fR و \&\fB\-fno\-trapping\-math\fR فعال شده باشد. این گزینه به صورت پیش‌فرض غیرفعال است. پیش از استفاده از این گزینه، باید مطمئن شوید که پردازندهٔ مقصد از دستورهای frecipe و frsqrte پشتیبانی می‌کند. توجه داشته باشید که هرچند توان عملیاتی (throughput) این توالی دستورها بالاتر از توان عملیاتی دستورالعمل غیرمعکوس است، اما دقت توالی می‌تواند تا ۲ ulp کاهش یابد (یعنی معکوس 1.0 برابر با 0.99999994 خواهد شد). .IP \fB\-mrecip=\fR\fIopt\fR 4 .IX Item "-mrecip=opt" این گزینه تعیین می‌کند که کدام دستورالعمل‌های تخمین معکوس می‌توانند استفاده شوند. \fIopt\fR فهرستی از گزینه‌ها است که با کاما از هم جدا شده‌اند و می‌توان یک \fB!\fR را برای معکوس کردن عملکرد گزینه در ابتدای آن قرار داد: .RS 4 .IP \fBall\fR 4 .IX Item "all" فعال‌سازی تمام دستورالعمل‌های تخمین. .IP \fBdefault\fR 4 .IX Item "default" فعال‌سازی دستورالعمل‌های پیش‌فرض، معادل با \fB\-mrecip\fR. .IP \fBnone\fR 4 .IX Item "none" غیرفعال‌سازی تمام دستورالعمل‌های تخمین، معادل با \fB\-mno\-recip\fR. .IP \fBdiv\fR 4 .IX Item "div" فعال‌سازی تقریب برای تقسیم اسکالر (عددی). .IP \fBvec\-div\fR 4 .IX Item "vec-div" فعال‌سازی تقریب برای تقسیم برداری. .IP \fBsqrt\fR 4 .IX Item "sqrt" فعال‌سازی تقریب برای ریشهٔ دوم اسکالر. .IP \fBvec\-sqrt\fR 4 .IX Item "vec-sqrt" فعال‌سازی تقریب برای ریشهٔ دوم برداری. .IP \fBrsqrt\fR 4 .IX Item "rsqrt" فعال‌سازی تقریب برای معکوس ریشهٔ دوم اسکالر. .IP \fBvec\-rsqrt\fR 4 .IX Item "vec-rsqrt" فعال‌سازی تقریب برای معکوس ریشهٔ دوم برداری. .RE .RS 4 .Sp بنابراین، به عنوان مثال، \fB\-mrecip=all,!sqrt\fR تمام تقریب‌های معکوس را به جز ریشهٔ دوم اسکالر فعال می‌کند. .RE .IP \fB\-mfrecipe\fR 4 .IX Item "-mfrecipe" .PD 0 .IP \fB\-mno\-frecipe\fR 4 .IX Item "-mno-frecipe" .PD استفاده (عدم استفاده) از دستورهای \f(CW\*(C`frecipe.{s/d}\*(C'\fR و \f(CW\*(C`frsqrte.{s/d}\*(C'\fR. هنگام ساخت با \fB\-march=la664\fR، این گزینه به صورت پیش‌فرض فعال است. حالت پیش‌فرض \fB\-mno\-frecipe\fR است. .IP \fB\-mdiv32\fR 4 .IX Item "-mdiv32" .PD 0 .IP \fB\-mno\-div32\fR 4 .IX Item "-mno-div32" .PD استفاده (عدم استفاده) از دستورهای \f(CW\*(C`div.w[u]\*(C'\fR و \f(CW\*(C`mod.w[u]\*(C'\fR با ورودی‌هایی که علامت آن‌ها بسط داده نشده باشد (sign\-extended نباشند). هنگام ساخت با \fB\-march=la664\fR، این گزینه به صورت پیش‌فرض فعال است. حالت پیش‌فرض \fB\-mno\-div32\fR است. .IP \fB\-mlam\-bh\fR 4 .IX Item "-mlam-bh" .PD 0 .IP \fB\-mno\-lam\-bh\fR 4 .IX Item "-mno-lam-bh" .PD استفاده (عدم استفاده) از دستورهای \f(CW\*(C`am{swap/add}[_db].{b/h}\*(C'\fR. هنگام ساخت با \fB\-march=la664\fR، این گزینه به صورت پیش‌فرض فعال است. حالت پیش‌فرض \&\fB\-mno\-lam\-bh\fR است. .IP \fB\-mlamcas\fR 4 .IX Item "-mlamcas" .PD 0 .IP \fB\-mno\-lamcas\fR 4 .IX Item "-mno-lamcas" .PD استفاده (عدم استفاده) از دستورهای \f(CW\*(C`amcas[_db].{b/h/w/d}\*(C'\fR. هنگام ساخت با \&\fB\-march=la664\fR، این گزینه به صورت پیش‌فرض فعال است. حالت پیش‌فرض \&\fB\-mno\-lamcas\fR است. .IP \fB\-mld\-seq\-sa\fR 4 .IX Item "-mld-seq-sa" .PD 0 .IP \fB\-mno\-ld\-seq\-sa\fR 4 .IX Item "-mno-ld-seq-sa" .PD نیاز یا عدم نیاز به یک مانع بارگذاری\-بارگذاری با نشانی یکسان (\f(CW\*(C`dbar 0x700\*(C'\fR). هنگام ساخت با \fB\-march=la664\fR، این گزینه به صورت پیش‌فرض فعال است. حالت پیش‌فرض \&\fB\-mno\-ld\-seq\-sa\fR است، که یعنی مانع بارگذاری\-بارگذاری مورد نیاز است. .IP \fB\-mtls\-dialect=\fR\fIopt\fR 4 .IX Item "-mtls-dialect=opt" این گزینه مشخص می‌کند که کدام گویش TLS برای مدل‌های TLS پویا عمومی (general dynamic) و پویا محلی (local dynamic) استفاده شود. .RS 4 .IP \fBtrad\fR 4 .IX Item "trad" استفاده از TLS سنتی. این مقدار پیش‌فرض است. .IP \fBdesc\fR 4 .IX Item "desc" استفاده از توصیف‌گرهای TLS. .RE .RS 4 .RE .IP \fB\-mannotate\-tablejump\fR 4 .IX Item "-mannotate-tablejump" .PD 0 .IP \fB\-mno\-annotate\-tablejump\fR 4 .IX Item "-mno-annotate-tablejump" .PD ایجاد یک بخش حاشیه‌نویسی به نام \f(CW\*(C`.discard.tablejump_annotate\*(C'\fR جهت برقراری ارتباط میان دستور \f(CW\*(C`jirl\*(C'\fR و جدول پرش، در زمانی که از یک جدول پرش برای بهینه‌سازی عبارت \f(CW\*(C`switch\*(C'\fR استفاده می‌شود. برخی ابزارهای خارجی، برای مثال \fIobjtool\fR در سامانهٔ ساخت هستهٔ لینوکس، برای تحلیل جریان کنترل به این حاشیه‌نویسی نیاز دارند. حالت پیش‌فرض \&\fB\-mno\-annotate\-tablejump\fR است. .IP "\fB\-\-param loongarch\-vect\-unroll\-limit=\fR\fIn\fR" 4 .IX Item "--param loongarch-vect-unroll-limit=n" بردارساز (vectorizer) از اطلاعات تنظیم کارایی موجود برای تشخیص این‌که آیا باز کردن حلقهٔ برداری اصلی سودمند است یا خیر و به چه میزان، استفاده خواهد کرد. این پارامتر کران بالای میزان باز کردن حلقهٔ اصلی توسط بردارساز را تعیین می‌کند. مقدار پیش‌فرض شش است..PP \fIگزینه‌های M32C\fR .IX Subsection "M32C Options" .IP \fB\-mcpu=\fR\fIname\fR 4 .IX Item "-mcpu=name" پردازنده‌ای را که کد برای آن تولید می‌شود انتخاب می‌کند. \fIname\fR می‌تواند یکی از مقادیر \&\fBr8c\fR برای سری R8C/Tiny، \fBm16c\fR برای سری M16C (تا 60/)، \fBm32cm\fR برای سری M16C/80، یا \fBm32c\fR برای سری M32C/80 باشد. .IP \fB\-msim\fR 4 .IX Item "-msim" مشخص می‌کند که برنامه روی شبیه‌ساز اجرا خواهد شد. این کار باعث پیوند خوردن یک کتابخانهٔ زمان اجرای جایگزین می‌شود که برای نمونه از ورودی/خروجی فایل پشتیبانی می‌کند. هنگام تولید برنامه‌هایی که روی سخت‌افزار واقعی اجرا خواهند شد نباید از این گزینه استفاده کنید؛ باید کتابخانهٔ زمان اجرای اختصاصی خود را برای هرگونه توابع ورودی/خروجی مورد نیاز ارائه دهید. .IP \fB\-memregs=\fR\fInumber\fR 4 .IX Item "-memregs=number" تعداد شبه‌ثبات‌های مبتنی بر حافظه را که GCC هنگام تولید کد استفاده می‌کند مشخص می‌سازد. این شبه‌ثبات‌ها مانند ثبات‌های واقعی استفاده می‌شوند، بنابراین موازنه‌ای میان توانایی GCC در جا دادن کد در ثبات‌های موجود و افت کاراییِ ناشی از استفاده از حافظه به جای ثبات‌ها وجود دارد. توجه داشته باشید که تمام پودمان‌های یک برنامه باید با مقدار یکسانی برای این گزینه همگردانی شوند. به همین دلیل، نباید از این گزینه همراه با کتابخانه‌های زمان اجرای پیش‌فرض GCC استفاده کنید. .PP \fIگزینه‌های M32R/D\fR .IX Subsection "M32R/D Options" .PP این گزینه‌های \fB\-m\fR برای معماری‌های Renesas M32R/D تعریف شده‌اند: .IP \fB\-m32r2\fR 4 .IX Item "-m32r2" تولید کد برای M32R/2. .IP \fB\-m32rx\fR 4 .IX Item "-m32rx" تولید کد برای M32R/X. .IP \fB\-m32r\fR 4 .IX Item "-m32r" تولید کد برای M32R. این پیش‌فرض است. .IP \fB\-mmodel=small\fR 4 .IX Item "-mmodel=small" فرض می‌کند همهٔ اشیاء در ۱۶ مگابایت ابتدایی حافظه قرار دارند (به طوری که نشانی آن‌ها بتواند با دستورالعمل \f(CW\*(C`ld24\*(C'\fR بارگذاری شود)، و فرض می‌کند تمام زیرروال‌ها با دستورالعمل \f(CW\*(C`bl\*(C'\fR قابل دسترسی هستند. این پیش‌فرض است. .Sp نشانی‌پذیری یک شیء خاص را می‌توان با مشخصهٔ \&\f(CW\*(C`model\*(C'\fR تعیین کرد. .IP \fB\-mmodel=medium\fR 4 .IX Item "-mmodel=medium" فرض می‌کند اشیاء ممکن است در هر کجای فضای نشانی ۳۲ بیتی باشند (کامپایلر دستورالعمل‌های \f(CW\*(C`seth/add3\*(C'\fR را برای بارگذاری نشانی‌های آن‌ها تولید می‌کند)، و فرض می‌کند تمام زیرروال‌ها با دستورالعمل \f(CW\*(C`bl\*(C'\fR قابل دسترسی هستند. .IP \fB\-mmodel=large\fR 4 .IX Item "-mmodel=large" فرض می‌کند اشیاء ممکن است در هر کجای فضای نشانی ۳۲ بیتی باشند (کامپایلر دستورالعمل‌های \f(CW\*(C`seth/add3\*(C'\fR را برای بارگذاری نشانی‌های آن‌ها تولید می‌کند)، و فرض می‌کند زیرروال‌ها ممکن است با دستورالعمل \f(CW\*(C`bl\*(C'\fR قابل دسترسی نباشند (کامپایلر دنباله دستورالعمل‌های بسیار کندترِ \f(CW\*(C`seth/add3/jl\*(C'\fR را تولید می‌کند). .IP \fB\-msdata=none\fR 4 .IX Item "-msdata=none" استفاده از ناحیهٔ داده‌های کوچک را غیرفعال می‌کند. متغیرها در یکی از بخش‌های \f(CW\*(C`.data\*(C'\fR، \f(CW\*(C`.bss\*(C'\fR یا \f(CW\*(C`.rodata\*(C'\fR قرار می‌گیرند (مگر اینکه مشخصهٔ \f(CW\*(C`section\*(C'\fR تعیین شده باشد). این پیش‌فرض است. .Sp ناحیهٔ داده‌های کوچک شامل بخش‌های \f(CW\*(C`.sdata\*(C'\fR و \f(CW\*(C`.sbss\*(C'\fR است. اشیاء را می‌توان با مشخصهٔ \f(CW\*(C`section\*(C'\fR و با استفاده از یکی از این بخش‌ها به‌طور صریح در ناحیهٔ داده‌های کوچک قرار داد. .IP \fB\-msdata=sdata\fR 4 .IX Item "-msdata=sdata" داده‌های سراسری و ایستا کوچک را در ناحیهٔ داده‌های کوچک قرار می‌دهد، اما کد خاصی برای ارجاع به آن‌ها تولید نمی‌کند. .IP \fB\-msdata=use\fR 4 .IX Item "-msdata=use" داده‌های سراسری و ایستا کوچک را در ناحیهٔ داده‌های کوچک قرار می‌دهد و دستورالعمل‌های ویژه‌ای برای ارجاع به آن‌ها تولید می‌کند. .IP "\fB\-G\fR \fInum\fR" 4 .IX Item "-G num" اشیاء سراسری و ایستا که کوچکتر یا مساوی \fInum\fR بایت باشند را به جای بخش‌های عادی داده یا BSS، در بخش‌های داده‌های کوچک یا BSS قرار می‌دهد. مقدار پیش‌فرض \fInum\fR برابر ۸ است. گزینهٔ \fB\-msdata\fR باید روی یکی از مقادیر \fBsdata\fR یا \fBuse\fR تنظیم شده باشد تا این گزینه اثرگذار شود. .Sp همهٔ پودمان‌ها باید با مقدار \fB\-G\fR \fInum\fR یکسانی همگردانی شوند. همگردانی با مقادیر مختلف \fInum\fR ممکن است کار کند یا نکند؛ اگر کار نکند، پیونددهنده یک پیام خطا می‌دهد\-\-\-کد نادرست تولید نمی‌شود. .IP \fB\-mdebug\fR 4 .IX Item "-mdebug" باعث می‌شود کد ویژهٔ M32R در کامپایلر آماره‌هایی را نمایش دهد که ممکن است در اشکال‌زدایی برنامه‌ها مفید باشد. .IP \fB\-malign\-loops\fR 4 .IX Item "-malign-loops" تمام حلقه‌ها را روی مرز ۳۲ بایتی تراز می‌کند. .IP \fB\-mno\-align\-loops\fR 4 .IX Item "-mno-align-loops" تراز ۳۲ بایتی را برای حلقه‌ها اجباری نمی‌کند. این پیش‌فرض است. .IP \fB\-missue\-rate=\fR\fInumber\fR 4 .IX Item "-missue-rate=number" در هر چرخه \fInumber\fR دستورالعمل صادر می‌کند. \fInumber\fR تنها می‌تواند ۱ یا ۲ باشد. .IP \fB\-mbranch\-cost=\fR\fInumber\fR 4 .IX Item "-mbranch-cost=number" \&\fInumber\fR تنها می‌تواند ۱ یا ۲ باشد. اگر ۱ باشد، انشعاب‌ها به کدهای شرطی ترجیح داده می‌شوند؛ اگر ۲ باشد، عکس آن اعمال می‌گردد. .IP \fB\-mflush\-trap=\fR\fInumber\fR 4 .IX Item "-mflush-trap=number" شمارهٔ تله‌ای را که برای تخلیهٔ حافظهٔ نهان استفاده می‌شود مشخص می‌کند. پیش‌فرض ۱۲ است. شماره‌های معتبر بین ۰ تا ۱۵ (شامل هر دو) هستند. .IP \fB\-mno\-flush\-trap\fR 4 .IX Item "-mno-flush-trap" مشخص می‌کند که حافظهٔ نهان با استفاده از یک تله تخلیه‌پذیر نیست. .IP \fB\-mflush\-func=\fR\fIname\fR 4 .IX Item "-mflush-func=name" نام تابع سیستم‌عامل را برای فراخوانی جهت تخلیهٔ حافظهٔ نهان مشخص می‌کند. پیش‌فرض \fB_flush_cache\fR است، اما فراخوانی تابع تنها در صورتی استفاده می‌شود که تله در دسترس نباشد. .IP \fB\-mno\-flush\-func\fR 4 .IX Item "-mno-flush-func" نشان می‌دهد که هیچ تابعی در سیستم‌عامل برای تخلیهٔ حافظهٔ نهان وجود ندارد. .PP \fIگزینه‌های M680x0\fR .IX Subsection "M680x0 Options" .PP این‌ها گزینه‌های \fB\-m\fR تعریف‌شده برای پردازنده‌های M680x0 و ColdFire هستند. تنظیمات پیش‌فرض بستگی دارد به این که هنگام پیکربندی کامپایلر کدام معماری انتخاب شده باشد؛ پیش‌فرض‌های مربوط به متداول‌ترین گزینه‌ها در زیر آمده است. .IP \fB\-march=\fR\fIarch\fR 4 .IX Item "-march=arch" تولید کد برای یک معماری مجموعه دستورالعمل خاصِ M680x0 یا ColdFire. مقادیر مجاز برای \fIarch\fR در معماری‌های M680x0 عبارتند از: \fB68000\fR، \fB68010\fR، \fB68020\fR، \&\fB68030\fR، \fB68040\fR، \fB68060\fR و \fBcpu32\fR. معماری‌های ColdFire مطابق با دسته‌بندی ISA شرکت Freescale انتخاب می‌شوند و مقادیر مجاز عبارتند از: \fBisaa\fR، \fBisaaplus\fR، \&\fBisab\fR و \fBisac\fR. .Sp کامپایلر GCC هر زمان که کدی برای مقصد ColdFire تولید کند، ماکروی \f(CW\*(C`_\|_mcf\fR\f(CIarch\fR\f(CW_\|_\*(C'\fR را تعریف می‌کند. مقدار \fIarch\fR در این ماکرو یکی از آرگومان‌های \fB\-march\fR است که در بالا ذکر شد. .Sp هنگامی که گزینه‌های \fB\-march\fR و \fB\-mtune\fR با هم استفاده شوند، کدی را انتخاب می‌کنند که روی خانواده‌ای از پردازنده‌های مشابه اجرا می‌شود اما برای یک ریزمعماری خاص بهینه‌سازی شده است. .IP \fB\-mcpu=\fR\fIcpu\fR 4 .IX Item "-mcpu=cpu" تولید کد برای یک پردازندهٔ خاصِ M680x0 یا ColdFire. پردازنده‌های \fIcpu\fR در M680x0 عبارتند از: \fB68000\fR، \fB68010\fR، \fB68020\fR، \&\fB68030\fR، \fB68040\fR، \fB68060\fR، \fB68302\fR، \fB68332\fR و \fBcpu32\fR. پردازنده‌های \fIcpu\fR در ColdFire در جدول زیر آورده شده‌اند، که پردازنده‌ها را در قالب خانواده‌ها نیز دسته‌بندی می‌کند: .RS 4 .IP "\fIخانواده\fR : آرگومان‌های \fB\-mcpu\fR" 4 .IX Item "Family : -mcpu arguments" .PD 0 .IP "\fB51\fR : \fB51\fR \fB51ac\fR \fB51ag\fR \fB51cn\fR \fB51em\fR \fB51je\fR \fB51jf\fR \fB51jg\fR \fB51jm\fR \fB51mm\fR \fB51qe\fR \fB51qm\fR" 4 .IX Item "51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm" .IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4 .IX Item "5206 : 5202 5204 5206" .IP "\fB5206e\fR : \fB5206e\fR" 4 .IX Item "5206e : 5206e" .IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4 .IX Item "5208 : 5207 5208" .IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4 .IX Item "5211a : 5210a 5211a" .IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4 .IX Item "5213 : 5211 5212 5213" .IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4 .IX Item "5216 : 5214 5216" .IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4 .IX Item "52235 : 52230 52231 52232 52233 52234 52235" .IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4 .IX Item "5225 : 5224 5225" .IP "\fB52259\fR : \fB52252\fR \fB52254\fR \fB52255\fR \fB52256\fR \fB52258\fR \fB52259\fR" 4 .IX Item "52259 : 52252 52254 52255 52256 52258 52259" .IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4 .IX Item "5235 : 5232 5233 5234 5235 523x".IP "\fB5249\fR : \fB5249\fR" 4 .IX Item "5249 : 5249" .IP "\fB5250\fR : \fB5250\fR" 4 .IX Item "5250 : 5250" .IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4 .IX Item "5271 : 5270 5271" .IP "\fB5272\fR : \fB5272\fR" 4 .IX Item "5272 : 5272" .IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4 .IX Item "5275 : 5274 5275" .IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4 .IX Item "5282 : 5280 5281 5282 528x" .IP "\fB53017\fR : \fB53011\fR \fB53012\fR \fB53013\fR \fB53014\fR \fB53015\fR \fB53016\fR \fB53017\fR" 4 .IX Item "53017 : 53011 53012 53013 53014 53015 53016 53017" .IP "\fB5307\fR : \fB5307\fR" 4 .IX Item "5307 : 5307" .IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4 .IX Item "5329 : 5327 5328 5329 532x" .IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4 .IX Item "5373 : 5372 5373 537x" .IP "\fB5407\fR : \fB5407\fR" 4 .IX Item "5407 : 5407" .IP "\fB5475\fR : \fB5470\fR \fB5471\fR \fB5472\fR \fB5473\fR \fB5474\fR \fB5475\fR \fB547x\fR \fB5480\fR \fB5481\fR \fB5482\fR \fB5483\fR \fB5484\fR \fB5485\fR" 4 .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485" .PD .RE .RS 4 .Sp در صورتی که \fIarch\fR با \fIcpu\fR سازگار باشد، \&\fB\-mcpu=\fR\fIcpu\fR بر \&\fB\-march=\fR\fIarch\fR اولویت یافته و جایگزین آن می‌شود. سایر ترکیب‌های \&\fB\-mcpu\fR و \&\fB\-march\fR رد می‌شوند. .Sp هنگامی که هدف ColdFire \fIcpu\fR انتخاب شود، GCC ماکروی \f(CW\*(C`_\|_mcf_cpu_\fR\f(CIcpu\fR\f(CW\*(C'\fR را تعریف می‌کند. همچنین \&\f(CW\*(C`_\|_mcf_family_\fR\f(CIfamily\fR\f(CW\*(C'\fR را نیز تعریف می‌کند که در آن مقدار \fIfamily\fR توسط جدول بالا مشخص شده است. .RE .IP \fB\-mtune=\fR\fItune\fR 4 .IX Item "-mtune=tune" کد را برای یک ریزمعماری خاص در چارچوب محدودیت‌های تعیین‌شده توسط \fB\-march\fR و \fB\-mcpu\fR بهینه‌سازی (tune) می‌کند. ریزمعماری‌های M680x0 عبارتند از: \fB68000\fR، \fB68010\fR، \&\fB68020\fR، \fB68030\fR، \fB68040\fR، \fB68060\fR و \fBcpu32\fR. ریزمعماری‌های ColdFire عبارتند از: \&\fBcfv1\fR، \fBcfv2\fR، \fBcfv3\fR، \fBcfv4\fR و \fBcfv4e\fR. .Sp شما همچنین می‌توانید از \fB\-mtune=68020\-40\fR برای کدی استفاده کنید که لازم است به طور نسبتاً مناسبی روی اهداف 68020، 68030 و 68040 اجرا شود. \&\fB\-mtune=68020\-60\fR نیز مشابه است اما اهداف 68060 را نیز شامل می‌شود. این دو گزینه به ترتیب همان تصمیمات بهینه‌سازی \&\fB\-m68020\-40\fR و \fB\-m68020\-60\fR را برمی‌گزینند. .Sp هنگام بهینه‌سازی برای معماری 680x0 \fIarch\fR، GCC ماکروهای \f(CW\*(C`_\|_mc\fR\f(CIarch\fR\f(CW\*(C'\fR و \f(CW\*(C`_\|_mc\fR\f(CIarch\fR\f(CW_\|_\*(C'\fR را تعریف می‌کند. همچنین ماکروی \&\f(CW\*(C`mc\fR\f(CIarch\fR\f(CW\*(C'\fR را نیز تعریف می‌کند، مگر آنکه گزینهٔ \fB\-ansi\fR یا یک گزینهٔ غیر گنوی \fB\-std\fR استفاده شده باشد. چنانچه GCC در حال بهینه‌سازی برای محدوده‌ای از معماری‌ها باشد (مانند آنچه توسط \fB\-mtune=68020\-40\fR یا \fB\-mtune=68020\-60\fR تعیین می‌شود)، ماکروها را برای تک‌تک معماری‌های موجود در آن بازه تعریف خواهد کرد. .Sp همچنین GCC هنگام بهینه‌سازی برای ریزمعماری ColdFire \fIuarch\fR، ماکروی \f(CW\*(C`_\|_m\fR\f(CIuarch\fR\f(CW_\|_\*(C'\fR را تعریف می‌کند که در آن \fIuarch\fR یکی از آرگومان‌های ارائه‌شده در بالا است. .IP \fB\-m68000\fR 4 .IX Item "-m68000" .PD 0 .IP \fB\-mc68000\fR 4 .IX Item "-mc68000" .PD تولید خروجی برای پردازندهٔ 68000. این حالت پیش‌فرض در زمانی است که کامپایلر برای سیستم‌های مبتنی بر 68000 پیکربندی شده باشد. این گزینه معادل \fB\-march=68000\fR است. .Sp از این گزینه برای میکروکنترلرهای دارای هستهٔ 68000 یا EC000 استفاده کنید، شامل 68008، 68302، 68306، 68307، 68322، 68328 و 68356. .IP \fB\-m68010\fR 4 .IX Item "-m68010" تولید خروجی برای پردازندهٔ 68010. این حالت پیش‌فرض در زمانی است که کامپایلر برای سیستم‌های مبتنی بر 68010 پیکربندی شده باشد. این گزینه معادل \fB\-march=68010\fR است. .IP \fB\-m68020\fR 4 .IX Item "-m68020" .PD 0 .IP \fB\-mc68020\fR 4 .IX Item "-mc68020" .PD تولید خروجی برای پردازندهٔ 68020. این حالت پیش‌فرض در زمانی است که کامپایلر برای سیستم‌های مبتنی بر 68020 پیکربندی شده باشد. این گزینه معادل \fB\-march=68020\fR است. .IP \fB\-m68030\fR 4 .IX Item "-m68030" تولید خروجی برای پردازندهٔ 68030. این حالت پیش‌فرض در زمانی است که کامپایلر برای سیستم‌های مبتنی بر 68030 پیکربندی شده باشد. این گزینه معادل \&\fB\-march=68030\fR است. .IP \fB\-m68040\fR 4 .IX Item "-m68040" تولید خروجی برای پردازندهٔ 68040. این حالت پیش‌فرض در زمانی است که کامپایلر برای سیستم‌های مبتنی بر 68040 پیکربندی شده باشد. این گزینه معادل \&\fB\-march=68040\fR است. .Sp این گزینه از به‌کارگیری دستورالعمل‌های 68881/68882 که باید در 68040 توسط نرم‌افزار شبیه‌سازی شوند جلوگیری می‌کند. اگر پردازندهٔ 68040 شما کدی برای شبیه‌سازی آن دستورالعمل‌ها ندارد، از این گزینه استفاده کنید. .IP \fB\-m68060\fR 4 .IX Item "-m68060" تولید خروجی برای پردازندهٔ 68060. این حالت پیش‌فرض در زمانی است که کامپایلر برای سیستم‌های مبتنی بر 68060 پیکربندی شده باشد. این گزینه معادل \&\fB\-march=68060\fR است. .Sp این گزینه از به‌کارگیری دستورالعمل‌های 68020 و 68881/68882 که باید در 68060 توسط نرم‌افزار شبیه‌سازی شوند جلوگیری می‌کند. اگر پردازندهٔ 68060 شما کدی برای شبیه‌سازی آن دستورالعمل‌ها ندارد، از این گزینه استفاده کنید. .IP \fB\-mcpu32\fR 4 .IX Item "-mcpu32" تولید خروجی برای یک CPU32. این حالت پیش‌فرض در زمانی است که کامپایلر برای سیستم‌های مبتنی بر CPU32 پیکربندی شده باشد. این گزینه معادل \fB\-march=cpu32\fR است. .Sp از این گزینه برای میکروکنترلرهای دارای هستهٔ CPU32 یا +CPU32 استفاده کنید، شامل 68330، 68331، 68332، 68333، 68334، 68336، 68340، 68341، 68349 و 68360. .IP \fB\-m5200\fR 4 .IX Item "-m5200" تولید خروجی برای یک پردازندهٔ ColdFire 520X. این حالت پیش‌فرض در زمانی است که کامپایلر برای سیستم‌های مبتنی بر 520X پیکربندی شده باشد. این گزینه معادل \fB\-mcpu=5206\fR است و اکنون به نفع آن گزینه منسوخ شده است. .Sp از این گزینه برای میکروکنترلرهای دارای هستهٔ 5200 استفاده کنید، شامل MCF5202، MCF5203، MCF5204 و MCF5206. .IP \fB\-m5206e\fR 4 .IX Item "-m5206e" تولید خروجی برای یک پردازندهٔ ColdFire 5206e. این گزینه اکنون به نفع گزینهٔ معادل \fB\-mcpu=5206e\fR منسوخ شده است. .IP \fB\-m528x\fR 4 .IX Item "-m528x" تولید خروجی برای عضوی از خانوادهٔ ColdFire 528X. این گزینه اکنون به نفع گزینهٔ معادل \&\fB\-mcpu=528x\fR منسوخ شده است. .IP \fB\-m5307\fR 4 .IX Item "-m5307" تولید خروجی برای یک پردازندهٔ ColdFire 5307. این گزینه اکنون به نفع گزینهٔ معادل \fB\-mcpu=5307\fR منسوخ شده است. .IP \fB\-m5407\fR 4 .IX Item "-m5407" تولید خروجی برای یک پردازندهٔ ColdFire 5407. این گزینه اکنون به نفع گزینهٔ معادل \fB\-mcpu=5407\fR منسوخ شده است. .IP \fB\-mcfv4e\fR 4 .IX Item "-mcfv4e" تولید خروجی برای پردازنده‌ای از خانوادهٔ ColdFire V4e (مانند 547x/548x). این شامل استفاده از دستورالعمل‌های سخت‌افزاری ممیز شناور می‌شود. این گزینه معادل \fB\-mcpu=547x\fR است و اکنون به نفع آن گزینه منسوخ شده است. .IP \fB\-m68020\-40\fR 4 .IX Item "-m68020-40" تولید خروجی برای یک 68040، بدون استفاده از هیچ‌یک از دستورالعمل‌های جدید. این کار منجر به تولید کدی می‌شود که می‌تواند با کارایی نسبتاً مناسبی روی 68020/68881، 68030 یا 68040 اجرا شود. کد تولیدشده از دستورالعمل‌های 68881 که روی 68040 شبیه‌سازی می‌شوند استفاده می‌کند. .Sp این گزینه معادل \fB\-march=68020\fR \fB\-mtune=68020\-40\fR است. .IP \fB\-m68020\-60\fR 4 .IX Item "-m68020-60" تولید خروجی برای یک 68060، بدون استفاده از هیچ‌یک از دستورالعمل‌های جدید. این کار منجر به تولید کدی می‌شود که می‌تواند با کارایی نسبتاً مناسبی روی 68020/68881، 68030 یا 68040 اجرا شود. کد تولیدشده از دستورالعمل‌های 68881 که روی 68060 شبیه‌سازی می‌شوند استفاده می‌کند. .Sp این گزینه معادل \fB\-march=68020\fR \fB\-mtune=68020\-60\fR است. .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD 0 .IP \fB\-m68881\fR 4 .IX Item "-m68881" .PD تولید دستورالعمل‌های ممیز شناور. این حالت پیش‌فرض برای 68020 و بالاتر، و برای دستگاه‌های ColdFire دارای FPU است. این گزینه ماکروی \f(CW\*(C`_\|_HAVE_68881_\|_\*(C'\fR را روی اهداف M680x0 و ماکروی \f(CW\*(C`_\|_mcffpu_\|_\*(C'\fR را روی اهداف ColdFire تعریف می‌کند. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" عدم تولید دستورالعمل‌های ممیز شناور؛ به جای آن از فراخوانی‌های کتابخانه‌ای استفاده می‌کند. این حالت پیش‌فرض برای اهداف 68000، 68010 و 68832 است. همچنین پیش‌فرض برای دستگاه‌های ColdFire فاقد FPU محسوب می‌شود..IP \fB\-mdiv\fR 4 .IX Item "-mdiv" .PD 0 .IP \fB\-mno\-div\fR 4 .IX Item "-mno-div" .PD دستورالعمل‌های سخت‌افزاری تقسیم و باقیمانده ColdFire را تولید می‌کند (تولید نمی‌کند). اگر \fB\-march\fR بدون \fB\-mcpu\fR استفاده شود، مقدار پیش‌فرض برای معماری‌های ColdFire برابر "on" (روشن) و برای معماری‌های M680x0 برابر "off" (خاموش) است. در غیر این صورت، مقدار پیش‌فرض از پردازنده هدف (یا پردازنده پیش‌فرض، یا پردازنده مشخص‌شده توسط \fB\-mcpu\fR) گرفته می‌شود. برای مثال، مقدار پیش‌فرض برای \fB\-mcpu=5206\fR برابر "off" و برای \&\fB\-mcpu=5206e\fR برابر "on" است. .Sp هنگامی که این گزینه فعال باشد، GCC ماکروی \f(CW\*(C`_\|_mcfhwdiv_\|_\*(C'\fR را تعریف می‌کند. .IP \fB\-mshort\fR 4 .IX Item "-mshort" نوع \f(CW\*(C`int\*(C'\fR را همانند \f(CW\*(C`short int\*(C'\fR دارای عرض ۱۶ بیتی در نظر می‌گیرد. علاوه بر این، پارامترهای ارسال‌شده روی پشته نیز در مرز ۱۶ بیتی تراز می‌شوند، حتی در اهدافی که API آن‌ها ارتقا به ۳۲ بیتی را الزامی می‌کند. .IP \fB\-mno\-short\fR 4 .IX Item "-mno-short" نوع \f(CW\*(C`int\*(C'\fR را ۱۶ بیتی در نظر نمی‌گیرد. این مقدار پیش‌فرض است. .IP \fB\-mnobitfield\fR 4 .IX Item "-mnobitfield" .PD 0 .IP \fB\-mno\-bitfield\fR 4 .IX Item "-mno-bitfield" .PD از دستورالعمل‌های بیتی (bit-field) استفاده نمی‌کند. گزینه‌های \fB\-m68000\fR، \fB\-mcpu32\fR و \fB\-m5200\fR مستلزم \fB\-mnobitfield\fR هستند. .IP \fB\-mbitfield\fR 4 .IX Item "-mbitfield" از دستورالعمل‌های بیتی استفاده می‌کند. گزینه \fB\-m68020\fR مستلزم \&\fB\-mbitfield\fR است. اگر از پیکربندی طراحی‌شده برای 68020 استفاده کنید، این حالت پیش‌فرض است. .IP \fB\-mrtd\fR 4 .IX Item "-mrtd" از یک قرارداد فراخوانی تابع متفاوت استفاده می‌کند که در آن، توابعی که تعداد ثابتی آرگومان می‌گیرند با دستورالعمل \f(CW\*(C`rtd\*(C'\fR بازمی‌گردند؛ این دستورالعمل آرگومان‌های آن‌ها را هنگام بازگشت از پشته برمی‌دارد. این کار یک دستورالعمل در فراخواننده صرفه‌جویی می‌کند، زیرا در آنجا نیازی به پاپ کردن آرگومان‌ها نیست. .Sp این قرارداد فراخوانی با قراردادی که معمولاً در Unix استفاده می‌شود ناسازگار است، بنابراین اگر نیاز به فراخوانی کتابخانه‌های کامپایل‌شده با کامپایلر Unix دارید، نمی‌توانید از آن استفاده کنید. .Sp همچنین، باید پیش‌نمونه تابع (prototype) را برای تمام توابعی که تعداد متغیری آرگومان می‌گیرند (از جمله \f(CW\*(C`printf\*(C'\fR) ارائه دهید؛ در غیر این صورت برای فراخوانی‌های آن توابع، کد نادرستی تولید می‌شود. .Sp علاوه بر این، اگر تابعی را با آرگومان‌های بیش از حد فراخوانی کنید، کد به شدت نادرستی تولید خواهد شد. (به‌طور معمول، آرگومان‌های اضافی بدون آسیب نادیده گرفته می‌شوند.) .Sp دستورالعمل \f(CW\*(C`rtd\*(C'\fR توسط پردازنده‌های 68010، 68020، 68030، 68040، 68060 و CPU32 پشتیبانی می‌شود، اما توسط 68000 یا 5200 پشتیبانی نمی‌شود. .Sp پیش‌فرض \fB\-mno\-rtd\fR است. .IP \fB\-malign\-int\fR 4 .IX Item "-malign-int" .PD 0 .IP \fB\-mno\-align\-int\fR 4 .IX Item "-mno-align-int" .PD کنترل می‌کند که آیا GCC متغیرهای \f(CW\*(C`int\*(C'\fR، \f(CW\*(C`long\*(C'\fR، \f(CW\*(C`long long\*(C'\fR، \&\f(CW\*(C`float\*(C'\fR، \f(CW\*(C`double\*(C'\fR و \f(CW\*(C`long double\*(C'\fR را روی مرز ۳۲ بیتی تراز کند (\fB\-malign\-int\fR) یا روی مرز ۱۶ بیتی (\fB\-mno\-align\-int\fR). تراز کردن متغیرها روی مرزهای ۳۲ بیتی، به قیمت مصرف حافظه بیشتر، کدی تولید می‌کند که روی پردازنده‌های دارای گذرگاه ۳۲ بیتی تا حدودی سریع‌تر اجرا می‌شود. .Sp \&\fBهشدار:\fR در صورت استفاده از گزینه \fB\-malign\-int\fR، کامپایلر GCC ساختارهای حاوی انواع فوق را به گونه‌ای تراز می‌کند که با بیشتر مشخصات رابط باینری کاربردی (ABI) منتشرشده برای m68k متفاوت است. .Sp به جای استفاده از جدول افست سراسری (GOT)، مستقیماً از حالت آدرس‌دهی وابسته به pc پردازنده 68000 استفاده می‌کند. در حال حاضر، این گزینه مستلزم \fB\-fpic\fR است که حداکثر یک افست ۱۶ بیتی را برای آدرس‌دهی وابسته به pc مجاز می‌داند. در حال حاضر \fB\-fPIC\fR به همراه \fB\-mpcrel\fR پشتیبانی نمی‌شود، هرچند که این امکان برای پردازنده‌های 68020 و بالاتر می‌تواند پشتیبانی شود. .IP \fB\-mno\-strict\-align\fR 4 .IX Item "-mno-strict-align" .PD 0 .IP \fB\-mstrict\-align\fR 4 .IX Item "-mstrict-align" .PD فرض نمی‌کند (فرض می‌کند) که ارجاعات حافظه ناتراز توسط سیستم مدیریت می‌شوند. .IP \fB\-msep\-data\fR 4 .IX Item "-msep-data" کدی تولید می‌کند که اجازه می‌دهد بخش داده (data segment) در ناحیه‌ای از حافظه متفاوت از بخش کد (text segment) قرار گیرد. این امر اجرای درجا (execute-in-place) را در محیط‌های بدون مدیریت حافظه مجازی امکان‌پذیر می‌سازد. این گزینه مستلزم \&\fB\-fPIC\fR است. .IP \fB\-mno\-sep\-data\fR 4 .IX Item "-mno-sep-data" کدی تولید می‌کند که فرض می‌کند بخش داده بلافاصله پس از بخش کد قرار می‌گیرد. این حالت پیش‌فرض است. .IP \fB\-mid\-shared\-library\fR 4 .IX Item "-mid-shared-library" کدی تولید می‌کند که از طریق روش شناسه کتابخانه (library ID) از کتابخانه‌های اشتراکی پشتیبانی می‌کند. این ویژگی امکان اجرای درجا و استفاده از کتابخانه‌های اشتراکی را در محیط‌های بدون مدیریت حافظه مجازی فراهم می‌سازد. این گزینه مستلزم \fB\-fPIC\fR است. .IP \fB\-mno\-id\-shared\-library\fR 4 .IX Item "-mno-id-shared-library" کدی تولید می‌کند که فرض نمی‌کند کتابخانه‌های اشتراکی مبتنی بر شناسه در حال استفاده هستند. این مقدار پیش‌فرض است. .IP \fB\-mshared\-library\-id=n\fR 4 .IX Item "-mshared-library-id=n" شماره شناسایی کتابخانه اشتراکی مبتنی بر شناسه‌ای را که در حال کامپایل است مشخص می‌کند. تعیین مقدار 0 کد فشرده‌تری تولید می‌کند؛ تعیین مقادیر دیگر تخصیص آن شماره را به کتابخانه فعلی تحمیل می‌کند، اما از نظر فضا یا زمان کارآمدتر از نادیده گرفتن این گزینه نیست. .IP \fB\-mxgot\fR 4 .IX Item "-mxgot" .PD 0 .IP \fB\-mno\-xgot\fR 4 .IX Item "-mno-xgot" .PD هنگام تولید کد مستقل از موقعیت (position-independent code) برای ColdFire، کدی تولید می‌کند که در صورت داشتن بیش از ۸۱۹۲ مدخل در جدول GOT کار کند. این کد بزرگ‌تر و کندتر از کد تولیدشده بدون این گزینه است. در پردازنده‌های M680x0، این گزینه مورد نیاز نیست؛ \fB\-fPIC\fR کفایت می‌کند. .Sp کامپایلر GCC معمولاً از یک دستورالعمل برای بارگذاری مقادیر از GOT استفاده می‌کند. اگرچه این روش نسبتاً کارآمد است، اما تنها در صورتی کار می‌کند که اندازه GOT کمتر از حدود 64k باشد. هر اندازه‌ای بزرگ‌تر از آن باعث می‌شود که پیونددهنده خطایی مانند زیر گزارش دهد: .Sp .Vb 1 \& relocation truncated to fit: R_68K_GOT16O foobar .Ve .Sp در صورت وقوع این اتفاق، باید کد خود را با \fB\-mxgot\fR دوباره کامپایل کنید. سپس باید با GOTهای بسیار بزرگ کار کند. با این حال، کد تولیدشده با \&\fB\-mxgot\fR کارایی کمتری دارد، زیرا واکشی مقدار یک نماد سراسری ۴ دستورالعمل طول می‌کشد. .Sp توجه داشته باشید که برخی از پیونددهنده‌ها، از جمله نسخه‌های جدیدتر پیونددهنده GNU، می‌توانند چندین GOT ایجاد کنند و مدخل‌های GOT را مرتب نمایند. اگر چنین پیونددهنده‌ای دارید، تنها زمانی نیاز به استفاده از \fB\-mxgot\fR خواهید داشت که یک فایل شیء منفرد را کامپایل کنید که به بیش از ۸۱۹۲ مدخل GOT دسترسی داشته باشد. موارد بسیار کمی این‌گونه هستند. .Sp این گزینه‌ها هیچ تاثیری ندارند مگر اینکه GCC در حال تولید کد مستقل از موقعیت باشد. .IP \fB\-mlong\-jump\-table\-offsets\fR 4 .IX Item "-mlong-jump-table-offsets" از افست‌های ۳۲ بیتی در جدول‌های \f(CW\*(C`switch\*(C'\fR استفاده می‌کند. پیش‌فرض استفاده از افست‌های ۱۶ بیتی است. .PP \fIگزینه‌های MCore\fR .IX Subsection "MCore Options" .PP این‌ها گزینه‌های \fB\-m\fR هستند که برای پردازنده‌های Motorola M*Core تعریف شده‌اند. .IP \fB\-mhardlit\fR 4 .IX Item "-mhardlit" .PD 0 .IP \fB\-mno\-hardlit\fR 4 .IX Item "-mno-hardlit" .PD ثابت‌ها را در جریان کد به‌صورت درون‌خطی (inline) قرار می‌دهد اگر این کار در دو دستورالعمل یا کمتر امکان‌پذیر باشد. .IP \fB\-mdiv\fR 4 .IX Item "-mdiv" .PD 0 .IP \fB\-mno\-div\fR 4 .IX Item "-mno-div" .PD از دستورالعمل تقسیم استفاده می‌کند. (به‌طور پیش‌فرض فعال است). .IP \fB\-mrelax\-immediate\fR 4 .IX Item "-mrelax-immediate" .PD 0 .IP \fB\-mno\-relax\-immediate\fR 4 .IX Item "-mno-relax-immediate" .PD مقادیر بی‌واسطه (immediate) با اندازه دلخواه را در عملیات بیتی مجاز می‌شمارد. .IP \fB\-mwide\-bitfields\fR 4 .IX Item "-mwide-bitfields".PD 0 .IP \fB\-mno\-wide\-bitfields\fR 4 .IX Item "-mno-wide-bitfields" .PD همیشه با میدان‌های بیتی (bit-fields) به اندازهٔ \f(CW\*(C`int\*(C'\fR رفتار می‌کند. .IP \fB\-m4byte\-functions\fR 4 .IX Item "-m4byte-functions" .PD 0 .IP \fB\-mno\-4byte\-functions\fR 4 .IX Item "-mno-4byte-functions" .PD تراز شدن تمام توابع در مرز ۴ بایتی را اجباری می‌کند. .IP \fB\-mcallgraph\-data\fR 4 .IX Item "-mcallgraph-data" .PD 0 .IP \fB\-mno\-callgraph\-data\fR 4 .IX Item "-mno-callgraph-data" .PD اطلاعات گراف فراخوانی (callgraph) را صادر می‌کند. .IP \fB\-mslow\-bytes\fR 4 .IX Item "-mslow-bytes" .PD 0 .IP \fB\-mno\-slow\-bytes\fR 4 .IX Item "-mno-slow-bytes" .PD هنگام خواندن مقادیر بایتی، دسترسی کلمه‌ای (word access) را ترجیح می‌دهد. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" .PD 0 .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" .PD کد را برای یک مقصد با ترتیب بایت کم‌ارزش (little\-endian) تولید می‌کند. .IP \fB\-m210\fR 4 .IX Item "-m210" .PD 0 .IP \fB\-m340\fR 4 .IX Item "-m340" .PD کد را برای پردازندهٔ 210 تولید می‌کند. .IP \fB\-mno\-lsim\fR 4 .IX Item "-mno-lsim" فرض می‌کند که پشتیبانی زمان اجرا فراهم شده است، بنابراین کتابخانهٔ شبیه‌ساز (\fIlibsim.a)\fR را از خط فرمان پیونددهنده حذف می‌کند. .IP \fB\-mstack\-increment=\fR\fIsize\fR 4 .IX Item "-mstack-increment=size" حداکثر مقدار برای یک عملیات افزایش پشته را تعیین می‌کند. مقادیر بزرگ می‌توانند سرعت برنامه‌هایی را که شامل توابعی با نیاز به فضای پشتهٔ زیاد هستند افزایش دهند، اما در صورتی که پشته بیش از اندازه گسترش یابد، می‌توانند خطای دسترسی به حافظه (segmentation fault) نیز ایجاد کنند. مقدار پیش‌فرض 0x1000 است. .PP \fIگزینه‌های MicroBlaze\fR .IX Subsection "MicroBlaze Options" .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" استفاده از شبیه‌سازی نرم‌افزاری برای ممیز شناور (پیش‌فرض). .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" استفاده از دستورالعمل‌های سخت‌افزاری ممیز شناور. .IP \fB\-mmemcpy\fR 4 .IX Item "-mmemcpy" انتقال بلوک‌ها را بهینه‌سازی نمی‌کند، از \f(CW\*(C`memcpy\*(C'\fR استفاده می‌کند. .IP \fB\-mno\-clearbss\fR 4 .IX Item "-mno-clearbss" این گزینه منسوخ شده است. به جای آن از \fB\-fno\-zero\-initialized\-in\-bss\fR استفاده کنید. .IP \fB\-mcpu=\fR\fIcpu\-type\fR 4 .IX Item "-mcpu=cpu-type" از ویژگی‌های CPU مشخص‌شده استفاده کرده و کد را برای آن زمان‌بندی می‌کند. مقادیر پشتیبانی‌شده در قالب \fBv\fR\fIX\fR\fB.\fR\fIYY\fR\fB.\fR\fIZ\fR هستند، که در آن \fIX\fR نسخهٔ اصلی، \fIYY\fR نسخهٔ فرعی و \&\fIZ\fR کد سازگاری است. مقادیر نمونه عبارتند از \fBv3.00.a\fR، \&\fBv4.00.b\fR، \fBv5.00.a\fR، \fBv5.00.b\fR، \fBv6.00.a\fR. .IP \fB\-mxl\-soft\-mul\fR 4 .IX Item "-mxl-soft-mul" استفاده از شبیه‌سازی نرم‌افزاری ضرب (پیش‌فرض). .IP \fB\-mxl\-soft\-div\fR 4 .IX Item "-mxl-soft-div" استفاده از شبیه‌سازی نرم‌افزاری تقسیم (پیش‌فرض). .IP \fB\-mxl\-barrel\-shift\fR 4 .IX Item "-mxl-barrel-shift" استفاده از شیفت‌دهندهٔ بشکه‌ای سخت‌افزاری. .IP \fB\-mxl\-pattern\-compare\fR 4 .IX Item "-mxl-pattern-compare" استفاده از دستورالعمل‌های مقایسهٔ الگو. .IP \fB\-msmall\-divides\fR 4 .IX Item "-msmall-divides" استفاده از بهینه‌سازی جدول جستجو برای تقسیم اعداد صحیح علامت‌دار کوچک. .IP \fB\-mxl\-stack\-check\fR 4 .IX Item "-mxl-stack-check" این گزینه منسوخ شده است. به جای آن از \fB\-fstack\-check\fR استفاده کنید. .IP \fB\-mxl\-gp\-opt\fR 4 .IX Item "-mxl-gp-opt" استفاده از بخش‌های \f(CW\*(C`.sdata\*(C'\fR/\f(CW\*(C`.sbss\*(C'\fR وابسته به GP. .IP \fB\-mxl\-multiply\-high\fR 4 .IX Item "-mxl-multiply-high" استفاده از دستورالعمل‌های ضرب بالا برای بخش بالایی ضرب 32x32. .IP \fB\-mxl\-float\-convert\fR 4 .IX Item "-mxl-float-convert" استفاده از دستورالعمل‌های سخت‌افزاری تبدیل ممیز شناور. .IP \fB\-mxl\-float\-sqrt\fR 4 .IX Item "-mxl-float-sqrt" استفاده از دستورالعمل سخت‌افزاری جذر ممیز شناور. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" کد را برای یک مقصد با ترتیب بایت پرارزش (big\-endian) تولید می‌کند. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" کد را برای یک مقصد با ترتیب بایت کم‌ارزش (little\-endian) تولید می‌کند. .IP \fB\-mxl\-reorder\fR 4 .IX Item "-mxl-reorder" استفاده از دستورالعمل‌های بازآرایی (swap و بارگذاری/ذخیره‌سازی با بایت معکوس). .IP \fB\-mxl\-mode\-\fR\fIapp\-model\fR 4 .IX Item "-mxl-mode-app-model" مدل برنامهٔ \fIapp\-model\fR را انتخاب می‌کند. مدل‌های معتبر عبارتند از: .RS 4 .IP \fBexecutable\fR 4 .IX Item "executable" برنامهٔ اجرایی معمولی (پیش‌فرض)، از کد راه‌اندازی \fIcrt0.o\fR استفاده می‌کند. .IP \fBxmdstub\fR 4 .IX Item "xmdstub" برای استفاده با عامل اشکال‌زدای تهاجمی نرم‌افزاری مبتنی بر Xilinx Microprocessor Debugger (XMD) موسوم به xmdstub. این مدل از فایل راه‌اندازی \&\fIcrt1.o\fR استفاده کرده و نشانی شروع برنامه را روی 0x800 تنظیم می‌کند. .IP \fBbootstrap\fR 4 .IX Item "bootstrap" برای برنامه‌هایی که با استفاده از بارگذار بوت بارگذاری می‌شوند. این مدل از فایل راه‌اندازی \fIcrt2.o\fR استفاده می‌کند که شامل گردانندهٔ بردار راه‌اندازی مجدد پردازنده نیست. این حالت برای واگذاری کنترل هنگام راه‌اندازی مجدد پردازنده به بارگذار بوت به جای برنامه مناسب است. .IP \fBnovectors\fR 4 .IX Item "novectors" برای برنامه‌هایی که به هیچ‌یک از بردارهای MicroBlaze نیازی ندارند. این گزینه ممکن است برای برنامه‌هایی که درون یک برنامهٔ نظارتی اجرا می‌شوند مفید باشد. این مدل از \fIcrt3.o\fR به عنوان فایل راه‌اندازی استفاده می‌کند. .RE .RS 4 .Sp گزینهٔ \fB\-xl\-mode\-\fR\fIapp\-model\fR یک نام مستعار منسوخ برای \&\fB\-mxl\-mode\-\fR\fIapp\-model\fR است. .RE .IP \fB\-mpic\-data\-is\-text\-relative\fR 4 .IX Item "-mpic-data-is-text-relative" فرض می‌کند که جابه‌جایی بین بخش‌های text و data در زمان پیوند ایستا ثابت است. این امر به داده‌ها اجازه می‌دهد به جای GOT، با آفست از نشانی شروع text ارجاع داده شوند؛ زیرا آدرس‌دهی وابسته به PC پشتیبانی نمی‌شود. .PP \fIگزینه‌های MIPS\fR .IX Subsection "MIPS Options" .IP \fB\-EB\fR 4 .IX Item "-EB" کد با ترتیب بایت پرارزش (big\-endian) تولید می‌کند. .IP \fB\-EL\fR 4 .IX Item "-EL" کد با ترتیب بایت کم‌ارزش (little\-endian) تولید می‌کند. این گزینه برای پیکربندی‌های \fBmips*el\-*\-*\fR پیش‌فرض است. .IP \fB\-march=\fR\fIarch\fR 4 .IX Item "-march=arch" کدی تولید می‌کند که روی \fIarch\fR اجرا شود، که می‌تواند نام یک ISA عمومی MIPS یا نام یک پردازندهٔ خاص باشد. نام‌های ISA عبارتند از: \&\fBmips1\fR، \fBmips2\fR، \fBmips3\fR، \fBmips4\fR، \&\fBmips32\fR، \fBmips32r2\fR، \fBmips32r3\fR، \fBmips32r5\fR، \&\fBmips32r6\fR، \fBmips64\fR، \fBmips64r2\fR، \fBmips64r3\fR، \&\fBmips64r5\fR و \fBmips64r6\fR. نام‌های پردازنده عبارتند از: \&\fB4kc\fR، \fB4km\fR، \fB4kp\fR، \fB4ksc\fR، \&\fB4kec\fR، \fB4kem\fR، \fB4kep\fR، \fB4ksd\fR، \&\fB5kc\fR، \fB5kf\fR، \&\fB20kc\fR، \&\fB24kc\fR، \fB24kf2_1\fR، \fB24kf1_1\fR، \&\fB24kec\fR، \fB24kef2_1\fR، \fB24kef1_1\fR، \&\fB34kc\fR، \fB34kf2_1\fR، \fB34kf1_1\fR، \fB34kn\fR، \&\fB74kc\fR، \fB74kf2_1\fR، \fB74kf1_1\fR، \fB74kf3_2\fR، \&\fB1004kc\fR، \fB1004kf2_1\fR، \fB1004kf1_1\fR، \&\fBi6400\fR، \fBi6500\fR، \&\fBinteraptiv\fR، \&\fBloongson2e\fR، \fBloongson2f\fR، \fBloongson3a\fR، \fBgs464\fR، \&\fBgs464e\fR، \fBgs264e\fR، \&\fBm4k\fR، \&\fBm14k\fR، \fBm14kc\fR، \fBm14ke\fR، \fBm14kec\fR، \&\fBm5100\fR، \fBm5101\fR، \&\fBocteon\fR، \fBocteon+\fR، \fBocteon2\fR، \fBocteon3\fR، \&\fBorion\fR، \&\fBp5600\fR، \fBp6600\fR، \&\fBr2000\fR، \fBr3000\fR، \fBr3900\fR، \fBr4000\fR، \fBr4400\fR، \&\fBr4600\fR، \fBr4650\fR، \fBr4700\fR، \fBr5900\fR، \&\fBr6000\fR، \fBr8000\fR، \&\fBrm7000\fR، \fBrm9000\fR، \&\fBr10000\fR، \fBr12000\fR، \fBr14000\fR، \fBr16000\fR، \&\fBsb1\fR، \&\fBsr71000\fR، \&\fBvr4100\fR، \fBvr4111\fR، \fBvr4120\fR، \fBvr4130\fR، \fBvr4300\fR، \&\fBvr5000\fR، \fBvr5400\fR، \fBvr5500\fR، \&\fBxlr\fR و \fBxlp\fR. مقدار ویژهٔ \fBfrom\-abi\fR سازگارترین معماری را برای ABI انتخاب‌شده برمی‌گزیند (یعنی \&\fBmips1\fR برای ABIهای ۳۲ بیتی و \fBmips3\fR برای ABIهای ۶۴ بیتی). .Sp مجموعه‌ابزار بومی Linux/GNU همچنین از مقدار \fBnative\fR پشتیبانی می‌کند، که بهترین گزینهٔ معماری را برای پردازندهٔ میزبان انتخاب می‌کند. اگر GCC پردازنده را شناسایی نکند، \fB\-march=native\fR هیچ تأثیری ندارد. .Sp در نام‌های پردازنده، \fB000\fR پایانی می‌تواند به صورت \fBk\fR خلاصه شود (برای مثال، \fB\-march=r2k\fR). پیشوندها اختیاری هستند و \&\fBvr\fR ممکن است به صورت \fBr\fR نوشته شود. .Sp نام‌هایی با قالب \fIn\fR\fBf2_1\fR به پردازنده‌هایی با FPUهایی اشاره دارند که با نیمی از فرکانس هسته کار می‌کنند، نام‌هایی با قالب \&\fIn\fR\fBf1_1\fR به پردازنده‌هایی با FPUهایی اشاره دارند که با همان فرکانس هسته کار می‌کنند، و نام‌هایی با قالب \fIn\fR\fBf3_2\fR به پردازنده‌هایی با FPUهایی اشاره دارند که نسبت فرکانس کلاک آن‌ها با هسته ۳:۲ است. به دلایل سازگاری، \fIn\fR\fBf\fR به عنوان مترادفی برای \&\fIn\fR\fBf2_1\fR پذیرفته می‌شود در حالی که \fIn\fR\fBx\fR و \fIb\fR\fBfx\fR به عنوان مترادف‌هایی برای \fIn\fR\fBf1_1\fR پذیرفته می‌شوند. .Sp کامپایلر GCC بر اساس مقدار این گزینه، دو ماکرو تعریف می‌کند. ماکروی اول \&\f(CW\*(C`_MIPS_ARCH\*(C'\fR است، که نام معماری هدف را به عنوان یک رشته ارائه می‌دهد. ماکروی دوم قالبی به صورت \f(CW\*(C`_MIPS_ARCH_\fR\f(CIfoo\fR\f(CW\*(C'\fR دارد، که در آن \fIfoo\fR مقدار بزرگ‌نویسی‌شدهٔ \f(CW\*(C`_MIPS_ARCH\*(C'\fR است. برای مثال، \fB\-march=r2000\fR مقدار \f(CW\*(C`_MIPS_ARCH\*(C'\fR را روی \f(CW"r2000"\fR تنظیم کرده و ماکروی \f(CW\*(C`_MIPS_ARCH_R2000\*(C'\fR را تعریف می‌کند. .Sp توجه داشته باشید که ماکروی \f(CW\*(C`_MIPS_ARCH\*(C'\fR از نام‌های پردازندهٔ ارائه‌شده در بالا استفاده می‌کند. به عبارت دیگر، دارای پیشوند کامل بوده و \fB000\fR را به صورت \fBk\fR خلاصه نمی‌کند. در مورد \fBfrom\-abi\fR، این ماکرو نام معماری حل‌شده (یا \f(CW"mips1"\fR یا \&\f(CW"mips3"\fR) را مشخص می‌سازد. در حالتی که هیچ گزینهٔ \&\fB\-march\fR مشخص نشده باشد، نام معماری پیش‌فرض را تعیین می‌کند..IP \fB\-mtune=\fR\fIarch\fR 4 .IX Item "-mtune=arch" برای \fIarch\fR بهینه‌سازی می‌کند. در میان موارد دیگر، این گزینه نحوه زمان‌بندی دستورالعمل‌ها و هزینه برآوردشده عملیات حسابی را کنترل می‌کند. فهرست مقادیر \fIarch\fR مشابه با \&\fB\-march\fR است. .Sp هنگامی که این گزینه استفاده نشود، GCC برای پردازنده‌ای که توسط \&\fB\-march\fR مشخص شده بهینه‌سازی می‌کند. با استفاده هم‌زمان از \&\fB\-march\fR و \&\fB\-mtune\fR، می‌توان کدی تولید کرد که روی یک خانواده از پردازنده‌ها اجرا شود، اما برای یکی از اعضای خاص آن خانواده بهینه‌سازی شده باشد. .Sp گزینه \&\fB\-mtune\fR ماکروهای \f(CW\*(C`_MIPS_TUNE\*(C'\fR و \&\f(CW\*(C`_MIPS_TUNE_\fR\f(CIfoo\fR\f(CW\*(C'\fR را تعریف می‌کند که همانند ماکروهای \&\fB\-march\fR که در بالا توضیح داده شد کار می‌کنند. .IP \fB\-mips1\fR 4 .IX Item "-mips1" معادل با \fB\-march=mips1\fR است. .IP \fB\-mips2\fR 4 .IX Item "-mips2" معادل با \fB\-march=mips2\fR است. .IP \fB\-mips3\fR 4 .IX Item "-mips3" معادل با \fB\-march=mips3\fR است. .IP \fB\-mips4\fR 4 .IX Item "-mips4" معادل با \fB\-march=mips4\fR است. .IP \fB\-mips32\fR 4 .IX Item "-mips32" معادل با \fB\-march=mips32\fR است. .IP \fB\-mips32r3\fR 4 .IX Item "-mips32r3" معادل با \fB\-march=mips32r3\fR است. .IP \fB\-mips32r5\fR 4 .IX Item "-mips32r5" معادل با \fB\-march=mips32r5\fR است. .IP \fB\-mips32r6\fR 4 .IX Item "-mips32r6" معادل با \fB\-march=mips32r6\fR است. .IP \fB\-mips64\fR 4 .IX Item "-mips64" معادل با \fB\-march=mips64\fR است. .IP \fB\-mips64r2\fR 4 .IX Item "-mips64r2" معادل با \fB\-march=mips64r2\fR است. .IP \fB\-mips64r3\fR 4 .IX Item "-mips64r3" معادل با \fB\-march=mips64r3\fR است. .IP \fB\-mips64r5\fR 4 .IX Item "-mips64r5" معادل با \fB\-march=mips64r5\fR است. .IP \fB\-mips64r6\fR 4 .IX Item "-mips64r6" معادل با \fB\-march=mips64r6\fR است. .IP \fB\-mips16\fR 4 .IX Item "-mips16" .PD 0 .IP \fB\-mno\-mips16\fR 4 .IX Item "-mno-mips16" .PD کد MIPS16 تولید می‌کند (تولید نمی‌کند). اگر GCC یک معماری MIPS32 یا MIPS64 را هدف قرار دهد، از MIPS16e ASE استفاده می‌کند. .Sp تولید کد MIPS16 می‌تواند به ازای هر تابع نیز به وسیله صفت‌های \f(CW\*(C`mips16\*(C'\fR و \f(CW\*(C`nomips16\*(C'\fR کنترل شود. .IP \fB\-mmips16e2\fR 4 .IX Item "-mmips16e2" .PD 0 .IP \fB\-mno\-mips16e2\fR 4 .IX Item "-mno-mips16e2" .PD از MIPS16e2 ASE استفاده می‌کند (استفاده نمی‌کند). این گزینه رفتار گزینه \&\fB\-mips16\fR را به گونه‌ای تغییر می‌دهد که MIPS16e2 ASE را هدف قرار دهد. .IP \fB\-mflip\-mips16\fR 4 .IX Item "-mflip-mips16" تولید کد MIPS16 را به صورت یک‌درمیان روی توابع انجام می‌دهد. این گزینه برای آزمون پس‌رفت (regression testing) تولید کد ترکیبی MIPS16/غیر\-MIPS16 ارائه شده است، و برای استفاده عادی در کامپایل کد کاربر در نظر گرفته نشده است. .IP \fB\-minterlink\-compressed\fR 4 .IX Item "-minterlink-compressed" .PD 0 .IP \fB\-mno\-interlink\-compressed\fR 4 .IX Item "-mno-interlink-compressed" .PD الزام می‌کند (الزام نمی‌کند) که کدهای استفاده‌کننده از MIPS ISA استاندارد (فشرده‌نشده) از نظر پیوند با کدهای MIPS16 و microMIPS سازگار باشند، و بالعکس. .Sp برای مثال، کدی که از کدگذاری ISA استاندارد استفاده می‌کند نمی‌تواند مستقیماً به کد MIPS16 یا microMIPS پرش کند؛ بلکه باید از یک فراخوانی یا یک پرش غیرمستقیم استفاده کند. بنابراین \&\fB\-minterlink\-compressed\fR پرش‌های مستقیم را غیرفعال می‌کند، مگر اینکه GCC بداند مقصد پرش فشرده نیست. .IP \fB\-minterlink\-mips16\fR 4 .IX Item "-minterlink-mips16" .PD 0 .IP \fB\-mno\-interlink\-mips16\fR 4 .IX Item "-mno-interlink-mips16" .PD نام‌های مستعار \fB\-minterlink\-compressed\fR و \&\fB\-mno\-interlink\-compressed\fR هستند. این گزینه‌ها پیش از microMIPS ASE وجود داشته‌اند و برای سازگاری با گذشته حفظ شده‌اند. .IP \fB\-mabi=32\fR 4 .IX Item "-mabi=32" .PD 0 .IP \fB\-mabi=o64\fR 4 .IX Item "-mabi=o64" .IP \fB\-mabi=n32\fR 4 .IX Item "-mabi=n32" .IP \fB\-mabi=64\fR 4 .IX Item "-mabi=64" .IP \fB\-mabi=eabi\fR 4 .IX Item "-mabi=eabi" .PD برای ABI داده‌شده کد تولید می‌کند. .Sp توجه داشته باشید که EABI دارای یک گونه ۳۲\-بیتی و یک گونه ۶۴\-بیتی است. GCC به طور معمول هنگام انتخاب یک معماری ۶۴\-بیتی، کد ۶۴\-بیتی تولید می‌کند، اما می‌توانید به جای آن از \fB\-mgp32\fR برای دریافت کد ۳۲\-بیتی استفاده کنید. .Sp برای اطلاعات در مورد O64 ABI، به <\fBhttps://gcc.gnu.org/projects/mipso64\-abi.html\fR> مراجعه کنید. .Sp GCC از گونه‌ای از o32 ABI پشتیبانی می‌کند که در آن ثبات‌های ممیز شناور به جای ۳۲ بیت، ۶۴ بیت پهنا دارند. می‌توانید این ترکیب را با \&\fB\-mabi=32\fR \fB\-mfp64\fR انتخاب کنید. این ABI به دستورالعمل‌های \f(CW\*(C`mthc1\*(C'\fR و \f(CW\*(C`mfhc1\*(C'\fR متکی است و بنابراین فقط برای پردازنده‌های MIPS32R2، MIPS32R3 و MIPS32R5 پشتیبانی می‌شود. .Sp تخصیص‌های ثبات برای آرگومان‌ها و مقادیر بازگشتی یکسان باقی می‌ماند، اما هر مقدار اسکالر به جای یک جفت ثبات ۳۲\-بیتی، در یک ثبات منفرد ۶۴\-بیتی ارسال می‌شود. برای مثال، مقادیر ممیز شناور اسکالر فقط در \fR\f(CB$f0\fR\fB\fR بازگردانده می‌شوند، نه در یک جفت \&\fB\fR\f(CB$f0\fR\fB\fR/\fB\fR\f(CB$f1\fR\fB\fR. مجموعه ثبات‌های حفظ‌شده در فراخوانی (call\-saved) نیز از این جهت که ثبات‌های زوج با دقت مضاعف ذخیره می‌شوند، یکسان باقی می‌ماند. .Sp دو گونه دیگر از o32 ABI برای امکان‌پذیر ساختن گذار از ثبات‌های ۳۲\-بیتی به ۶۴\-بیتی پشتیبانی می‌شوند. این‌ها FPXX (\fB\-mfpxx\fR) و FP64A (\fB\-mfp64\fR \fB\-mno\-odd\-spreg\fR) هستند. افزونه FPXX الزام می‌کند که همه کدها هنگام اجرا با ثبات‌های ۳۲\-بیتی یا ۶۴\-بیتی باید به درستی اجرا شوند. این کد می‌تواند با FP32 یا FP64 پیوند متقابل داشته باشد، اما نه با هر دو. افزونه FP64A شبیه به افزونه FP64 است اما استفاده از ثبات‌های دقت منفرد فرد را ممنوع می‌کند. این گزینه می‌تواند در کنار حالت \f(CW\*(C`FRE\*(C'\fR در FPUهای پردازنده‌های MIPS32R5 استفاده شود و به هر دو کد FP32 و FP64A اجازه می‌دهد بدون تغییر حالت‌های FPU، در یک فرایند پیوند یافته و اجرا شوند. .IP \fB\-mabicalls\fR 4 .IX Item "-mabicalls" .PD 0 .IP \fB\-mno\-abicalls\fR 4 .IX Item "-mno-abicalls" .PD کدی مناسب برای شیءهای پویا به سبک SVR4 تولید می‌کند (تولید نمی‌کند). گزینه \fB\-mabicalls\fR پیش‌فرض برای سیستم‌های مبتنی بر SVR4 است. .IP \fB\-mshared\fR 4 .IX Item "-mshared" .PD 0 .IP \fB\-mno\-shared\fR 4 .IX Item "-mno-shared" .PD کدی تولید می‌کند (تولید نمی‌کند) که کاملاً مستقل از موقعیت (position\-independent) است، و بنابراین می‌تواند در کتابخانه‌های مشترک پیوند داده شود. این گزینه فقط بر \fB\-mabicalls\fR اثر می‌گذارد. .Sp تمام کدهای \fB\-mabicalls\fR به طور سنتی، صرف‌نظر از گزینه‌هایی مانند \fB\-fPIC\fR و \fB\-fpic\fR، مستقل از موقعیت بوده‌اند. با این حال، به عنوان یک افزونه، زنجیره ابزار GNU به فایل‌های اجرایی اجازه می‌دهد از دسترسی‌های مطلق برای نمادهای با پیوند محلی استفاده کنند. همچنین می‌تواند از دنباله‌های کوتاه‌تر مقداردهی اولیه GP استفاده کرده و فراخوانی‌های مستقیم به توابع با تعریف محلی تولید کند. این حالت توسط \fB\-mno\-shared\fR انتخاب می‌شود. .Sp گزینه \&\fB\-mno\-shared\fR به binutils نسخه 2.16 یا بالاتر وابسته است و شیءهایی تولید می‌کند که فقط توسط پیونددهنده GNU می‌توانند پیوند داده شوند. با این حال، این گزینه بر ABI فایل اجرایی نهایی تأثیری ندارد؛ بلکه فقط بر ABI شیءهای بازآدرس‌پذیر تأثیر می‌گذارد. استفاده از \fB\-mno\-shared\fR عموماً فایل‌های اجرایی را هم کوچک‌تر و هم سریع‌تر می‌کند. .Sp گزینه \&\fB\-mshared\fR پیش‌فرض است..IP \fB\-mplt\fR 4 .IX Item "-mplt" .PD 0 .IP \fB\-mno\-plt\fR 4 .IX Item "-mno-plt" .PD فرض کردن (یا فرض نکردن) این‌که پیونددهنده‌های ایستا و پویا از PLTها و بازنشانی‌های کپی (copy relocations) پشتیبانی می‌کنند. این گزینه تنها بر \fB\-mno\-shared \-mabicalls\fR تأثیر می‌گذارد. برای n64 ABI، این گزینه بدون \fB\-msym32\fR هیچ تأثیری ندارد. .Sp می‌توانید با پیکربندی GCC با \fB\-\-with\-mips\-plt\fR، گزینهٔ \fB\-mplt\fR را پیش‌فرض کنید. در غیر این صورت، پیش‌فرض \fB\-mno\-plt\fR است. .IP \fB\-mxgot\fR 4 .IX Item "-mxgot" .PD 0 .IP \fB\-mno\-xgot\fR 4 .IX Item "-mno-xgot" .PD برداشتن (یا برنداشتن) محدودیت‌های معمول روی اندازهٔ جدول آفست سراسری (GOT). .Sp کامپایلر GCC معمولاً از یک تک‌دستورالعمل برای بارگذاری مقادیر از GOT استفاده می‌کند. اگرچه این کار نسبتاً کارآمد است، اما تنها زمانی کار می‌کند که GOT کوچک‌تر از حدود 64k باشد. هر اندازه‌ای بزرگ‌تر از آن باعث می‌شود پیونددهنده خطایی مانند زیر گزارش کند: .Sp .Vb 1 \& relocation truncated to fit: R_MIPS_GOT16 foobar .Ve .Sp اگر این اتفاق رخ داد، باید کد خود را با \fB\-mxgot\fR دوباره کامپایل کنید. این گزینه با GOTهای بسیار بزرگ کار می‌کند، گرچه کد تولیدی کارایی کمتری دارد، زیرا برای واکشی مقدار یک نماد سراسری به سه دستورالعمل نیاز است. .Sp توجه داشته باشید که برخی پیونددهنده‌ها می‌توانند چندین GOT ایجاد کنند. اگر از چنین پیونددهنده‌ای استفاده می‌کنید، تنها زمانی باید از \fB\-mxgot\fR استفاده کنید که یک فایل شیء (object file) منفرد به بیش از 64k ورودی GOT دسترسی داشته باشد، که این مورد بسیار نادر است. .Sp این گزینه‌ها هیچ تأثیری ندارند مگر این‌که GCC در حال تولید کد مستقل از موقعیت باشد. .IP \fB\-mgp32\fR 4 .IX Item "-mgp32" فرض کردن این‌که پهنای ثبات‌های همه‌منظوره ۳۲ بیت است. .IP \fB\-mgp64\fR 4 .IX Item "-mgp64" فرض کردن این‌که پهنای ثبات‌های همه‌منظوره ۶۴ بیت است. .IP \fB\-mfp32\fR 4 .IX Item "-mfp32" فرض کردن این‌که پهنای ثبات‌های ممیز شناور ۳۲ بیت است. .IP \fB\-mfp64\fR 4 .IX Item "-mfp64" فرض کردن این‌که پهنای ثبات‌های ممیز شناور ۶۴ بیت است. .IP \fB\-mfpxx\fR 4 .IX Item "-mfpxx" در نظر نگرفتن هیچ پیش‌فرضی دربارهٔ پهنای ثبات‌های ممیز شناور. .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" استفاده از دستورالعمل‌های پردازندهٔ کمکی ممیز شناور. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" عدم استفاده از دستورالعمل‌های پردازندهٔ کمکی ممیز شناور. در عوض، پیاده‌سازی محاسبات ممیز شناور با استفاده از فراخوانی‌های کتابخانه‌ای انجام می‌شود. .IP \fB\-mno\-float\fR 4 .IX Item "-mno-float" معادل با \fB\-msoft\-float\fR، اما همچنین تضمین می‌کند برنامهٔ در حال کامپایل هیچ‌گونه عملیات ممیز شناوری انجام ندهد. این گزینه در حال حاضر تنها در برخی پیکربندی‌های MIPS برهنه (bare\-metal) پشتیبانی می‌شود، جایی که ممکن است مجموعهٔ ویژه‌ای از کتابخانه‌ها را انتخاب کند که فاقد هرگونه پشتیبانی ممیز شناور هستند (برای نمونه، قالب‌های ممیز شناور در \f(CW\*(C`printf\*(C'\fR). اگر کدی که با \fB\-mno\-float\fR کامپایل شده است به طور تصادفی شامل عملیات ممیز شناور باشد، احتمالاً در زمان پیوند یا زمان اجرا با شکست مواجه خواهد شد. .IP \fB\-msingle\-float\fR 4 .IX Item "-msingle-float" فرض کردن این‌که پردازندهٔ کمکی ممیز شناور تنها از عملیات با دقت یگانه (single\-precision) پشتیبانی می‌کند. .IP \fB\-mdouble\-float\fR 4 .IX Item "-mdouble-float" فرض کردن این‌که پردازندهٔ کمکی ممیز شناور از عملیات با دقت مضاعف (double\-precision) پشتیبانی می‌کند. این پیش‌فرض است. .IP \fB\-modd\-spreg\fR 4 .IX Item "-modd-spreg" .PD 0 .IP \fB\-mno\-odd\-spreg\fR 4 .IX Item "-mno-odd-spreg" .PD فعال کردن استفاده از ثبات‌های ممیز شناور دقت یگانه با شماره‌های فرد برای o32 ABI. این گزینه برای پردازنده‌هایی که مشخصاً از این ثبات‌ها پشتیبانی می‌کنند پیش‌فرض است. هنگام استفاده از o32 FPXX ABI، گزینهٔ \fB\-mno\-odd\-spreg\fR به صورت پیش‌فرض فعال است. .IP \fB\-mabs=2008\fR 4 .IX Item "-mabs=2008" .PD 0 .IP \fB\-mabs=legacy\fR 4 .IX Item "-mabs=legacy" .PD این گزینه‌ها نحوهٔ رفتار با داده‌های ممیز شناور ویژهٔ غیرعدد (NaN) در IEEE 754 را توسط دستورالعمل‌های ماشینی \f(CW\*(C`abs.\fR\f(CIfmt\fR\f(CW\*(C'\fR و \&\f(CW\*(C`neg.\fR\f(CIfmt\fR\f(CW\*(C'\fR کنترل می‌کنند. .Sp به طور پیش‌فرض یا زمانی که از \fB\-mabs=legacy\fR استفاده می‌شود، رفتار موروثی (legacy) انتخاب می‌شود. در این حالت این دستورالعمل‌ها حسابی در نظر گرفته می‌شوند و در جاهایی که عملکرد صحیح نیاز است و عملوند ورودی ممکن است یک NaN باشد، از آن‌ها اجتناب می‌شود. در عوض توالی طولانی‌تری از دستورالعمل‌ها که بیت علامت دادهٔ ممیز شناور را به صورت دستی تغییر می‌دهند استفاده می‌شود، مگر این‌که گزینهٔ \fB\-ffinite\-math\-only\fR نیز مشخص شده باشد. .Sp گزینهٔ \fB\-mabs=2008\fR رفتار IEEE 754\-2008 را انتخاب می‌کند. در این حالت این دستورالعمل‌ها غیرحسابی تلقی می‌شوند و بنابراین در تمام شرایط، از جمله به‌ویژه زمانی که عملوند ورودی یک NaN باشد، به درستی عمل می‌کنند. در نتیجه این دستورالعمل‌ها همواره برای عملیات مربوطه استفاده می‌شوند. .IP \fB\-mnan=2008\fR 4 .IX Item "-mnan=2008" .PD 0 .IP \fB\-mnan=legacy\fR 4 .IX Item "-mnan=legacy" .PD این گزینه‌ها کدگذاری داده‌های ممیز شناور ویژهٔ غیرعدد (NaN) در IEEE 754 را کنترل می‌کنند. .Sp گزینهٔ \fB\-mnan=legacy\fR کدگذاری موروثی را انتخاب می‌کند. در این حالت، NaNهای ساکت (qNaNs) با 0 بودن بیت اول فیلد معنادار انتهایی (trailing significand) نشان داده می‌شوند، در حالی که NaNهای علامت‌دهنده (sNaNs) با 1 بودن اولین بیت فیلد معنادار انتهایی مشخص می‌شوند. .Sp گزینهٔ \fB\-mnan=2008\fR کدگذاری IEEE 754\-2008 را انتخاب می‌کند. در این حالت، qNaNها با 1 بودن بیت اول فیلد معنادار انتهایی و sNaNها با 0 بودن اولین بیت فیلد معنادار انتهایی مشخص می‌گردند. .Sp پیش‌فرض \fB\-mnan=legacy\fR است، مگر این‌که GCC با \&\fB\-\-with\-nan=2008\fR پیکربندی شده باشد. .IP \fB\-mllsc\fR 4 .IX Item "-mllsc" .PD 0 .IP \fB\-mno\-llsc\fR 4 .IX Item "-mno-llsc" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های \fBll\fR، \fBsc\fR و \fBsync\fR برای پیاده‌سازی توابع توکار حافظهٔ اتمیک. اگر هیچ‌یک از این گزینه‌ها مشخص نشود، چنانچه معماری مقصد از این دستورالعمل‌ها پشتیبانی کند، GCC از آن‌ها استفاده خواهد کرد. .Sp \&\fB\-mllsc\fR در مواردی مفید است که محیط زمان اجرا بتواند این دستورالعمل‌ها را شبیه‌سازی کند، و \fB\-mno\-llsc\fR می‌تواند هنگام کامپایل برای ISAهای غیراستاندارد کاربرد داشته باشد. شما می‌توانید با پیکربندی GCC به ترتیب با \fB\-\-with\-llsc\fR و \fB\-\-without\-llsc\fR هر یک از این گزینه‌ها را به صورت پیش‌فرض درآورید. \fB\-\-with\-llsc\fR در برخی پیکربندی‌ها پیش‌فرض است؛ برای جزئیات بیشتر به مستندات نصب مراجعه کنید. .IP \fB\-mdsp\fR 4 .IX Item "-mdsp" .PD 0 .IP \fB\-mno\-dsp\fR 4 .IX Item "-mno-dsp" .PD استفاده از (یا عدم استفاده از) نگارش ۱ افزونهٔ MIPS DSP ASE. این گزینه ماکروی پیش‌پردازندهٔ \f(CW\*(C`_\|_mips_dsp\*(C'\fR را تعریف می‌کند. همچنین \&\f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR را برابر با 1 تعریف می‌کند. .IP \fB\-mdspr2\fR 4 .IX Item "-mdspr2" .PD 0 .IP \fB\-mno\-dspr2\fR 4 .IX Item "-mno-dspr2" .PD استفاده از (یا عدم استفاده از) نگارش ۲ افزونهٔ MIPS DSP ASE. این گزینه ماکروهای پیش‌پردازندهٔ \f(CW\*(C`_\|_mips_dsp\*(C'\fR و \f(CW\*(C`_\|_mips_dspr2\*(C'\fR را تعریف می‌کند. همچنین \f(CW\*(C`_\|_mips_dsp_rev\*(C'\fR را برابر با 2 قرار می‌دهد. .IP \fB\-msmartmips\fR 4 .IX Item "-msmartmips" .PD 0 .IP \fB\-mno\-smartmips\fR 4 .IX Item "-mno-smartmips".PD استفاده از (یا عدم استفاده از) MIPS SmartMIPS ASE. .IP \fB\-mpaired\-single\fR 4 .IX Item "-mpaired-single" .PD 0 .IP \fB\-mno\-paired\-single\fR 4 .IX Item "-mno-paired-single" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های ممیز شناور paired\-single. این گزینه نیازمند فعال بودن پشتیبانی سخت‌افزاری از ممیز شناور است. .IP \fB\-mdmx\fR 4 .IX Item "-mdmx" .PD 0 .IP \fB\-mno\-mdmx\fR 4 .IX Item "-mno-mdmx" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های MIPS Digital Media Extension. این گزینه فقط هنگام تولید کد ۶۴\-بیتی قابل استفاده است و نیازمند فعال بودن پشتیبانی سخت‌افزاری از ممیز شناور است. .IP \fB\-mips3d\fR 4 .IX Item "-mips3d" .PD 0 .IP \fB\-mno\-mips3d\fR 4 .IX Item "-mno-mips3d" .PD استفاده از (یا عدم استفاده از) MIPS\-3D ASE. گزینهٔ \fB\-mips3d\fR مستلزم \fB\-mpaired\-single\fR است. .IP \fB\-mmicromips\fR 4 .IX Item "-mmicromips" .PD 0 .IP \fB\-mno\-micromips\fR 4 .IX Item "-mno-micromips" .PD تولید (یا عدم تولید) کد microMIPS. .Sp تولید کد MicroMIPS همچنین می‌تواند بر پایهٔ هر تابع به‌طور جداگانه از طریق مشخصه‌های \f(CW\*(C`micromips\*(C'\fR و \f(CW\*(C`nomicromips\*(C'\fR کنترل شود. .IP \fB\-mmt\fR 4 .IX Item "-mmt" .PD 0 .IP \fB\-mno\-mt\fR 4 .IX Item "-mno-mt" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های چندنخی MT Multithreading. .IP \fB\-mmcu\fR 4 .IX Item "-mmcu" .PD 0 .IP \fB\-mno\-mcu\fR 4 .IX Item "-mno-mcu" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های MIPS MCU ASE. .IP \fB\-meva\fR 4 .IX Item "-meva" .PD 0 .IP \fB\-mno\-eva\fR 4 .IX Item "-mno-eva" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های MIPS Enhanced Virtual Addressing. .IP \fB\-mvirt\fR 4 .IX Item "-mvirt" .PD 0 .IP \fB\-mno\-virt\fR 4 .IX Item "-mno-virt" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های مجازی‌سازی MIPS Virtualization (VZ). .IP \fB\-mxpa\fR 4 .IX Item "-mxpa" .PD 0 .IP \fB\-mno\-xpa\fR 4 .IX Item "-mno-xpa" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های MIPS eXtended Physical Address (XPA). .IP \fB\-mcrc\fR 4 .IX Item "-mcrc" .PD 0 .IP \fB\-mno\-crc\fR 4 .IX Item "-mno-crc" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های MIPS Cyclic Redundancy Check (CRC). .IP \fB\-mginv\fR 4 .IX Item "-mginv" .PD 0 .IP \fB\-mno\-ginv\fR 4 .IX Item "-mno-ginv" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های MIPS Global INValidate (GINV). .IP \fB\-mloongson\-mmi\fR 4 .IX Item "-mloongson-mmi" .PD 0 .IP \fB\-mno\-loongson\-mmi\fR 4 .IX Item "-mno-loongson-mmi" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های چندرسانه‌ای MIPS Loongson MultiMedia extensions Instructions (MMI). .IP \fB\-mloongson\-ext\fR 4 .IX Item "-mloongson-ext" .PD 0 .IP \fB\-mno\-loongson\-ext\fR 4 .IX Item "-mno-loongson-ext" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های MIPS Loongson EXTensions (EXT). .IP \fB\-mloongson\-ext2\fR 4 .IX Item "-mloongson-ext2" .PD 0 .IP \fB\-mno\-loongson\-ext2\fR 4 .IX Item "-mno-loongson-ext2" .PD استفاده از (یا عدم استفاده از) دستورالعمل‌های MIPS Loongson EXTensions r2 (EXT2). .IP \fB\-mlong64\fR 4 .IX Item "-mlong64" اجبار انواع \f(CW\*(C`long\*(C'\fR به داشتن اندازهٔ ۶۴ بیتی. برای توضیح حالت پیش‌فرض و چگونگی تعیین اندازهٔ اشاره‌گرها، به \fB\-mlong32\fR مراجعه کنید. .IP \fB\-mlong32\fR 4 .IX Item "-mlong32" اجبار انواع \f(CW\*(C`long\*(C'\fR، \f(CW\*(C`int\*(C'\fR و اشاره‌گر به داشتن اندازهٔ ۳۲ بیتی. .Sp اندازهٔ پیش‌فرض \f(CW\*(C`int\*(C'\fRها، \f(CW\*(C`long\*(C'\fRها و اشاره‌گرها به ABI بستگی دارد. همهٔ ABIهای پشتیبانی‌شده از \f(CW\*(C`int\*(C'\fRهای ۳۲\-بیتی استفاده می‌کنند. ABI با نام n64 از \f(CW\*(C`long\*(C'\fRهای ۶۴\-بیتی استفاده می‌کند، مانند EABI ۶۴\-بیتی؛ بقیه از \f(CW\*(C`long\*(C'\fRهای ۳۲\-بیتی استفاده می‌کنند. اشاره‌گرها هم‌اندازه با \f(CW\*(C`long\*(C'\fRها یا هم‌اندازه با ثبات‌های عدد صحیح (integer registers) هستند، هر کدام که کوچک‌تر باشد. .IP \fB\-msym32\fR 4 .IX Item "-msym32" .PD 0 .IP \fB\-mno\-sym32\fR 4 .IX Item "-mno-sym32" .PD فرض کردن (یا عدم فرض) این که همهٔ نمادها صرف‌نظر از ABI انتخاب‌شده دارای مقادیر ۳۲\-بیتی هستند. این گزینه در ترکیب با \&\fB\-mabi=64\fR و \fB\-mno\-abicalls\fR مفید است زیرا به GCC اجازه می‌دهد ارجاع‌های کوتاه‌تر و سریع‌تری به آدرس‌های نمادین ایجاد کند. .IP "\fB\-G\fR \fInum\fR" 4 .IX Item "-G num" قرار دادن تعاریف داده‌های با دید بیرونی (externally\-visible) در یک بخش داده‌های کوچک (small data section) در صورتی که آن داده‌ها بزرگ‌تر از \fInum\fR بایت نباشند. در این حالت GCC می‌تواند دسترسی‌های کارآمدتری به داده‌ها تولید کند؛ برای جزئیات به \fB\-mgpopt\fR مراجعه کنید. .Sp گزینهٔ \fB\-G\fR پیش‌فرض به پیکربندی بستگی دارد. .IP \fB\-mlocal\-sdata\fR 4 .IX Item "-mlocal-sdata" .PD 0 .IP \fB\-mno\-local\-sdata\fR 4 .IX Item "-mno-local-sdata" .PD گسترش دادن (یا ندادن) رفتار \fB\-G\fR به داده‌های محلی، مانند متغیرهای static در C. گزینهٔ \fB\-mlocal\-sdata\fR در تمام پیکربندی‌ها حالت پیش‌فرض است. .Sp اگر پیونددهنده هشدار دهد که برنامه بیش از اندازه از داده‌های کوچک استفاده می‌کند، می‌توانید بازسازی بخش‌هایی را که از نظر کارایی کمتر حیاتی هستند با \&\fB\-mno\-local\-sdata\fR امتحان کنید. همچنین ممکن است بخواهید کتابخانه‌های بزرگ را با \fB\-mno\-local\-sdata\fR بسازید تا کتابخانه‌ها فضای بیشتری برای برنامهٔ اصلی باقی بگذارند. .IP \fB\-mextern\-sdata\fR 4 .IX Item "-mextern-sdata" .PD 0 .IP \fB\-mno\-extern\-sdata\fR 4 .IX Item "-mno-extern-sdata" .PD فرض کردن (یا عدم فرض) این که داده‌های با تعریف بیرونی (externally\-defined) در صورت قرار داشتن اندازه‌شان درون محدودهٔ \fB\-G\fR، در یک بخش داده‌های کوچک قرار دارند. \&\fB\-mextern\-sdata\fR برای تمام پیکربندی‌ها حالت پیش‌فرض است. .Sp اگر پودمان \fIMod\fR را با \fB\-mextern\-sdata\fR \fB\-G\fR \&\fInum\fR \fB\-mgpopt\fR کامپایل کنید، و \fIMod\fR به متغیر \fIVar\fR که بزرگ‌تر از \fInum\fR بایت نیست ارجاع دهد، باید مطمئن شوید که \fIVar\fR در یک بخش داده‌های کوچک قرار گرفته است. اگر \fIVar\fR توسط پودمان دیگری تعریف شده است، باید آن پودمان را یا با تنظیم \fB\-G\fR به‌اندازهٔ کافی بزرگ کامپایل کنید یا مشخصهٔ \f(CW\*(C`section\*(C'\fR را به تعریف \fIVar\fR ضمیمه نمایید. اگر \fIVar\fR مشترک (common) است، باید برنامه را با تنظیم \fB\-G\fR به‌اندازهٔ کافی بزرگ پیوند دهید. .Sp ساده‌ترین راه برای برآورده کردن این محدودیت‌ها، کامپایل و پیوند دادن همهٔ پودمان‌ها با گزینهٔ یکسان \fB\-G\fR است. با این حال، ممکن است بخواهید کتابخانه‌ای بسازید که از چندین حد مختلف داده‌های کوچک پشتیبانی کند. می‌توانید این کار را با کامپایل کتابخانه با بالاترین حد پشتیبانی‌شدهٔ \&\fB\-G\fR و علاوه‌بر آن استفاده از \&\fB\-mno\-extern\-sdata\fR برای جلوگیری از فرض کتابخانه دربارهٔ داده‌های با تعریف بیرونی انجام دهید..IP \fB\-mgpopt\fR 4 .IX Item "-mgpopt" .PD 0 .IP \fB\-mno\-gpopt\fR 4 .IX Item "-mno-gpopt" .PD استفاده (عدم استفاده) از دسترسی‌های وابسته به GP برای نمادهایی که مشخص است در بخش داده‌های کوچک (small data) قرار دارند؛ گزینه‌های \fB\-G\fR، \fB\-mlocal\-sdata\fR و \&\fB\-mextern\-sdata\fR را ببینید. گزینهٔ \fB\-mgpopt\fR پیش‌فرض تمام پیکربندی‌ها است. .Sp گزینهٔ \&\fB\-mno\-gpopt\fR برای مواردی مفید است که رجیستر \f(CW$gp\fR ممکن است حاوی مقدار \f(CW\*(C`_gp\*(C'\fR نباشد. برای نمونه، اگر کد بخشی از کتابخانه‌ای باشد که ممکن است در یک پایشگر راه‌اندازی (boot monitor) استفاده شود، برنامه‌هایی که توابع پایشگر راه‌اندازی را فراخوانی می‌کنند مقداری نامشخص در \f(CW$gp\fR ارسال می‌کنند. (در چنین شرایطی، خودِ پایشگر راه‌اندازی معمولاً با \fB\-G0\fR کامپایل می‌شود.) .Sp گزینهٔ \&\fB\-mno\-gpopt\fR مستلزم گزینه‌های \fB\-mno\-local\-sdata\fR و \&\fB\-mno\-extern\-sdata\fR است. .IP \fB\-membedded\-data\fR 4 .IX Item "-membedded-data" .PD 0 .IP \fB\-mno\-embedded\-data\fR 4 .IX Item "-mno-embedded-data" .PD تخصیص متغیرها در صورت امکان ابتدا در بخش داده‌های فقط‌خواندنی (read\-only data section)، سپس در صورت امکان در بخش داده‌های کوچک، و در غیر این صورت در بخش data. این کار کدی اندکی کُندتر از حالت پیش‌فرض تولید می‌کند، اما میزان RAM مورد نیاز هنگام اجرا را کاهش می‌دهد، و بنابراین ممکن است برای برخی از سامانه‌های تعبیه‌شده (embedded) ترجیح داده شود. .IP \fB\-muninit\-const\-in\-rodata\fR 4 .IX Item "-muninit-const-in-rodata" .PD 0 .IP \fB\-mno\-uninit\-const\-in\-rodata\fR 4 .IX Item "-mno-uninit-const-in-rodata" .PD قرار دادن متغیرهای مقداردهی‌نشدهٔ \f(CW\*(C`const\*(C'\fR در بخش داده‌های فقط‌خواندنی. این گزینه تنها همراه با \fB\-membedded\-data\fR معنا دارد. .IP \fB\-mcode\-readable=\fR\fIsetting\fR 4 .IX Item "-mcode-readable=setting" مشخص می‌کند که آیا GCC مجاز است کدی تولید کند که از بخش‌های قابل‌اجرا بخواند یا خیر. سه مقدار ممکن برای این تنظیم وجود دارد: .RS 4 .IP \fB\-mcode\-readable=yes\fR 4 .IX Item "-mcode-readable=yes" دستورالعمل‌ها آزادند به بخش‌های قابل‌اجرا دسترسی پیدا کنند. این تنظیمِ پیش‌فرض است. .IP \fB\-mcode\-readable=pcrel\fR 4 .IX Item "-mcode-readable=pcrel" دستورالعمل‌های بارگذاری وابسته به PC در MIPS16 می‌توانند به بخش‌های قابل‌اجرا دسترسی داشته باشند، اما سایر دستورالعمل‌ها نباید چنین کنند. این گزینه روی پردازنده‌های 4KSc و 4KSd هنگامی که بیت Read Inhibit در TLBهای کد تنظیم شده باشد مفید است. همچنین روی پردازنده‌هایی که می‌توان آن‌ها را برای داشتن رابط دوگانهٔ SRAM دستورالعمل/داده پیکربندی کرد و مانند M4K، بارگذاری‌های وابسته به PC را به‌طور خودکار به RAM دستورالعمل هدایت می‌کنند، کاربرد دارد. .IP \fB\-mcode\-readable=no\fR 4 .IX Item "-mcode-readable=no" دستورالعمل‌ها نباید به بخش‌های قابل‌اجرا دسترسی داشته باشند. این گزینه می‌تواند در مقصدهایی مفید باشد که برای داشتن رابط دوگانهٔ SRAM دستورالعمل/داده پیکربندی شده‌اند، اما (برخلاف M4K) بارگذاری‌های وابسته به PC را به‌طور خودکار به RAM دستورالعمل هدایت نمی‌کنند. .RE .RS 4 .RE .IP \fB\-msplit\-addresses\fR 4 .IX Item "-msplit-addresses" .PD 0 .IP \fB\-mno\-split\-addresses\fR 4 .IX Item "-mno-split-addresses" .PD فعال‌سازی (غیرفعال‌سازی) استفاده از عملگرهای بازآرایی (relocation) اسمبلی \f(CW%hi()\fR و \f(CW%lo()\fR. این گزینه با \&\fB\-mexplicit\-relocs\fR جایگزین شده است، اما برای سازگاری با نسخه‌های پیشین حفظ شده است. .IP \fB\-mexplicit\-relocs=none\fR 4 .IX Item "-mexplicit-relocs=none" .PD 0 .IP \fB\-mexplicit\-relocs=base\fR 4 .IX Item "-mexplicit-relocs=base" .IP \fB\-mexplicit\-relocs=pcrel\fR 4 .IX Item "-mexplicit-relocs=pcrel" .IP \fB\-mexplicit\-relocs\fR 4 .IX Item "-mexplicit-relocs" .IP \fB\-mno\-explicit\-relocs\fR 4 .IX Item "-mno-explicit-relocs" .PD این گزینه‌ها استفاده از بازآرایی‌های صریح (مانند \f(CW%gp_rel\fR) را کنترل می‌کنند. مقدار پیش‌فرض به نسخهٔ GAS در زمان ساخته‌شدن خودِ GCC بستگی دارد. .Sp پشتیبانی از بازآرایی‌های صریح \f(CW\*(C`base\*(C'\fR در سال 2001 به GAS اضافه شد. پشتیبانی از بازآرایی‌های صریح \f(CW\*(C`pcrel\*(C'\fR در سال 2014 به GAS اضافه شد که از \f(CW%pcrel_hi\fR و \f(CW%pcrel_lo\fR پشتیبانی می‌کند. .IP \fB\-mcheck\-zero\-division\fR 4 .IX Item "-mcheck-zero-division" .PD 0 .IP \fB\-mno\-check\-zero\-division\fR 4 .IX Item "-mno-check-zero-division" .PD ایجاد (عدم ایجاد) تله (trap) هنگام تقسیم عدد صحیح بر صفر. .Sp پیش‌فرض \fB\-mcheck\-zero\-division\fR است. .IP \fB\-mdivide\-traps\fR 4 .IX Item "-mdivide-traps" .PD 0 .IP \fB\-mdivide\-breaks\fR 4 .IX Item "-mdivide-breaks" .PD سامانه‌های MIPS تقسیم بر صفر را با تولید یک تلهٔ شرطی یا یک دستورالعمل break بررسی می‌کنند. استفاده از trap منجر به تولید کد کوچک‌تری می‌شود، اما تنها در MIPS II و نسخه‌های پس از آن پشتیبانی می‌شود. همچنین، برخی از نسخه‌های هستهٔ لینوکس دارای باگی هستند که مانع از تولید سیگنال مناسب (\f(CW\*(C`SIGFPE\*(C'\fR) توسط تله می‌شود. برای مجاز کردن تله‌های شرطی روی معماری‌هایی که از آن‌ها پشتیبانی می‌کنند از \fB\-mdivide\-traps\fR و برای اجبار به استفاده از breakها از \&\fB\-mdivide\-breaks\fR استفاده کنید. .Sp پیش‌فرض معمولاً \fB\-mdivide\-traps\fR است، اما می‌توان در زمان پیکربندی با استفاده از \fB\-\-with\-divide=breaks\fR آن را تغییر داد. بررسی‌های تقسیم بر صفر را می‌توان با استفاده از \&\fB\-mno\-check\-zero\-division\fR به‌طور کامل غیرفعال کرد. .IP \fB\-mload\-store\-pairs\fR 4 .IX Item "-mload-store-pairs" .PD 0 .IP \fB\-mno\-load\-store\-pairs\fR 4 .IX Item "-mno-load-store-pairs" .PD فعال‌سازی (غیرفعال‌سازی) بهینه‌سازی‌ای که دستورالعمل‌های متوالی بارگذاری (load) یا ذخیره‌سازی (store) را جفت می‌کند تا پیوند بارگذاری/ذخیره‌سازی (load/store bonding) فعال شود. این گزینه به‌طور پیش‌فرض فعال است اما تنها زمانی اعمال می‌شود که مشخص باشد معماری انتخاب‌شده از پیوند (bonding) پشتیبانی می‌کند. .IP \fB\-mstrict\-align\fR 4 .IX Item "-mstrict-align" .PD 0 .IP \fB\-mno\-strict\-align\fR 4 .IX Item "-mno-strict-align" .IP \fB\-munaligned\-access\fR 4 .IX Item "-munaligned-access" .IP \fB\-mno\-unaligned\-access\fR 4 .IX Item "-mno-unaligned-access" .PD غیرفعال‌سازی (فعال‌سازی) دسترسی مستقیم ترازنشده (unaligned access) برای MIPS Release 6. معماری MIPSr6 به پشتیبانی از دسترسی ترازنشده برای بارگذاری/ذخیره‌سازی نیاز دارد، چه توسط سخت‌افزار یا از طریق trap&emulate. بنابراین ممکن است هسته به \fB\-mstrict\-align\fR نیاز داشته باشد. گزینه‌های \fB\-munaligned\-access\fR و \fB\-mno\-unaligned\-access\fR منسوخ شده‌اند و صرفاً برای سازگاری با گذشته هستند. .IP \fB\-mmemcpy\fR 4 .IX Item "-mmemcpy" .PD 0 .IP \fB\-mno\-memcpy\fR 4 .IX Item "-mno-memcpy" .PD اجبار (عدم اجبار) به استفاده از \f(CW\*(C`memcpy\*(C'\fR برای جابه‌جایی‌های بلوکیِ غیرجزئی. پیش‌فرض \fB\-mno\-memcpy\fR است که به GCC اجازه می‌دهد بیشتر کپی‌های با اندازهٔ ثابت را درون‌خطی (inline) کند. .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" .PD 0 .IP \fB\-mno\-long\-calls\fR 4 .IX Item "-mno-long-calls" .PD غیرفعال‌سازی (عدم غیرفعال‌سازی) استفاده از دستورالعمل \f(CW\*(C`jal\*(C'\fR. فراخوانی توابع با استفاده از \f(CW\*(C`jal\*(C'\fR کارآمدتر است اما نیازمند آن است که فراخواننده (caller) و فراخوانده‌شده (callee) در یک بخشِ (segment) یکسانِ 256 مگابایتی قرار داشته باشند. .Sp این گزینه هیچ تأثیری بر کدهای abicalls ندارد. پیش‌فرض \&\fB\-mno\-long\-calls\fR است. .IP \fB\-mmad\fR 4 .IX Item "-mmad" .PD 0 .IP \fB\-mno\-mad\fR 4 .IX Item "-mno-mad" .PD فعال‌سازی (غیرفعال‌سازی) استفاده از دستورالعمل‌های \f(CW\*(C`mad\*(C'\fR، \f(CW\*(C`madu\*(C'\fR و \f(CW\*(C`mul\*(C'\fR، به شکلی که توسط ISA پردازندهٔ R4650 ارائه شده است. .IP \fB\-mimadd\fR 4 .IX Item "-mimadd" .PD 0 .IP \fB\-mno\-imadd\fR 4 .IX Item "-mno-imadd" .PD فعال‌سازی (غیرفعال‌سازی) استفاده از دستورالعمل‌های اعداد صحیح \f(CW\*(C`madd\*(C'\fR و \f(CW\*(C`msub\*(C'\fR. پیش‌فرض روی معماری‌هایی که از \f(CW\*(C`madd\*(C'\fR و \f(CW\*(C`msub\*(C'\fR پشتیبانی می‌کنند \fB\-mimadd\fR است، به‌جز در معماری 74k که مشخص شد در آن کدی کُندتر تولید می‌کند..IP \fB\-mfused\-madd\fR 4 .IX Item "-mfused-madd" .PD 0 .IP \fB\-mno\-fused\-madd\fR 4 .IX Item "-mno-fused-madd" .PD استفاده از دستورالعمل‌های ضرب\-انباشت (multiply\-accumulate) ممیز شناور را در صورت در دسترس بودن، فعال (یا غیرفعال) می‌کند. پیش‌فرض \&\fB\-mfused\-madd\fR است. .Sp روی پردازندهٔ R8000 هنگام استفاده از دستورالعمل‌های ضرب\-انباشت، حاصل‌ضرب میانی با دقت نامحدود محاسبه می‌شود و تابع بیت FCSR Flush to Zero نیست. این امر ممکن است در برخی شرایط نامطلوب باشد. در پردازنده‌های دیگر، نتیجه از نظر عددی با محاسبهٔ معادل با استفاده از دستورالعمل‌های جداگانهٔ ضرب، جمع، تفریق و نقیض یکسان است. .IP \fB\-nocpp\fR 4 .IX Item "-nocpp" به اسمبلر MIPS می‌گوید هنگام اسمبل کردن فایل‌های اسمبلی کاربر (با پسوند \fB.s\fR)، پیش‌پردازندهٔ خود را روی آن‌ها اجرا نکند. .IP \fB\-mfix\-24k\fR 4 .IX Item "-mfix-24k" .PD 0 .IP \fB\-mno\-fix\-24k\fR 4 .IX Item "-mno-fix-24k" .PD خطای سخت‌افزاری 24K E48 (از دست رفتن داده در ذخیره‌سازی‌ها هنگام بازپُر کردن) را دور می‌زند. این راه‌حل‌ها به‌جای GCC توسط اسمبلر پیاده‌سازی می‌شوند. .IP \fB\-mfix\-r4000\fR 4 .IX Item "-mfix-r4000" .PD 0 .IP \fB\-mno\-fix\-r4000\fR 4 .IX Item "-mno-fix-r4000" .PD برخی خطاهای سخت‌افزاری پردازندهٔ R4000 را دور می‌زند: .RS 4 .IP \- 4 یک تغییر مکان (shift) کلمهٔ مضاعف یا متغیر، در صورتی که بلافاصله پس از شروع یک تقسیم عدد صحیح اجرا شود، ممکن است نتیجهٔ نادرستی تولید کند. .IP \- 4 یک تغییر مکان کلمهٔ مضاعف یا متغیر، در صورتی که در حین انجام یک ضرب عدد صحیح اجرا شود، ممکن است نتیجهٔ نادرستی تولید کند. .IP \- 4 یک تقسیم عدد صحیح در صورتی که در شکاف تاخیر (delay slot) یک انشعاب محقق‌شده یا یک پرش آغاز شود، ممکن است نتیجهٔ نادرستی تولید کند. .RE .RS 4 .RE .IP \fB\-mfix\-r4400\fR 4 .IX Item "-mfix-r4400" .PD 0 .IP \fB\-mno\-fix\-r4400\fR 4 .IX Item "-mno-fix-r4400" .PD برخی خطاهای سخت‌افزاری پردازندهٔ R4400 را دور می‌زند: .RS 4 .IP \- 4 یک تغییر مکان کلمهٔ مضاعف یا متغیر، در صورتی که بلافاصله پس از شروع یک تقسیم عدد صحیح اجرا شود، ممکن است نتیجهٔ نادرستی تولید کند. .RE .RS 4 .RE .IP \fB\-mfix\-r10000\fR 4 .IX Item "-mfix-r10000" .PD 0 .IP \fB\-mno\-fix\-r10000\fR 4 .IX Item "-mno-fix-r10000" .PD برخی خطاهای سخت‌افزاری R10000 را دور می‌زند: .RS 4 .IP \- 4 توالی‌های \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR ممکن است در بازبینی‌های پیش از 3.0 رفتار اتمیک نداشته باشند. آن‌ها در بازبینی‌های 2.6 و قدیمی‌تر ممکن است دچار بن‌بست شوند. .RE .RS 4 .Sp این گزینه تنها زمانی قابل استفاده است که معماری هدف از دستورالعمل‌های branch\-likely پشتیبانی کند. هنگام استفاده از \&\fB\-march=r10000\fR، گزینهٔ \fB\-mfix\-r10000\fR پیش‌فرض است؛ در غیر این صورت پیش‌فرض \fB\-mno\-fix\-r10000\fR خواهد بود. .RE .IP \fB\-mfix\-r5900\fR 4 .IX Item "-mfix-r5900" .PD 0 .IP \fB\-mno\-fix\-r5900\fR 4 .IX Item "-mno-fix-r5900" .PD تلاشی برای زمان‌بندی دستورالعمل قبلی در شکاف تاخیر یک دستورالعمل انشعاب که در انتهای یک حلقهٔ کوتاه با شش یا کمتر از شش دستورالعمل قرار دارد انجام نمی‌دهد و در عوض همواره یک دستورالعمل \f(CW\*(C`nop\*(C'\fR را در آنجا زمان‌بندی می‌کند. باگ حلقهٔ کوتاه تحت شرایط خاصی به دلیل یک نقص سخت‌افزاری در تراشهٔ R5900، باعث می‌شود حلقه‌ها تنها یک یا دو بار اجرا شوند. این راه‌حل به‌جای GCC توسط اسمبلر پیاده‌سازی می‌شود. .IP \fB\-mfix\-rm7000\fR 4 .IX Item "-mfix-rm7000" .PD 0 .IP \fB\-mno\-fix\-rm7000\fR 4 .IX Item "-mno-fix-rm7000" .PD خطاهای سخت‌افزاری \f(CW\*(C`dmult\*(C'\fR/\f(CW\*(C`dmultu\*(C'\fR در RM7000 را دور می‌زند. این راه‌حل‌ها به‌جای GCC توسط اسمبلر پیاده‌سازی می‌شوند. .IP \fB\-mfix\-vr4120\fR 4 .IX Item "-mfix-vr4120" .PD 0 .IP \fB\-mno\-fix\-vr4120\fR 4 .IX Item "-mno-fix-vr4120" .PD برخی خطاهای سخت‌افزاری VR4120 را دور می‌زند: .RS 4 .IP \- 4 دستور \&\f(CW\*(C`dmultu\*(C'\fR همیشه نتیجهٔ صحیح تولید نمی‌کند. .IP \- 4 دستورهای \&\f(CW\*(C`div\*(C'\fR و \f(CW\*(C`ddiv\*(C'\fR اگر یکی از عملوندها منفی باشد، همیشه نتیجهٔ صحیح تولید نمی‌کنند. .RE .RS 4 .Sp راه‌حل‌ها برای خطاهای سخت‌افزاری تقسیم به توابع ویژه‌ای در \&\fIlibgcc.a\fR وابسته هستند. در حال حاضر، این توابع فقط توسط پیکربندی‌های \f(CW\*(C`mips64vr*\-elf\*(C'\fR ارائه می‌شوند. .Sp سایر خطاهای سخت‌افزاری VR4120 مستلزم درج یک NOP میان جفت‌های خاصی از دستورالعمل‌ها هستند. این خطاها توسط اسمبلر مدیریت می‌شوند، نه خود GCC. .RE .IP \fB\-mfix\-vr4130\fR 4 .IX Item "-mfix-vr4130" خطاهای سخت‌افزاری \f(CW\*(C`mflo\*(C'\fR/\f(CW\*(C`mfhi\*(C'\fR در VR4130 را دور می‌زند. این راه‌حل‌ها به‌جای GCC توسط اسمبلر پیاده‌سازی می‌شوند، هرچند اگر دستورالعمل‌های \f(CW\*(C`macc\*(C'\fR، \f(CW\*(C`macchi\*(C'\fR، \f(CW\*(C`dmacc\*(C'\fR و \f(CW\*(C`dmacchi\*(C'\fR در VR4130 در دسترس باشند، GCC از استفاده از \f(CW\*(C`mflo\*(C'\fR و \f(CW\*(C`mfhi\*(C'\fR خودداری می‌کند. .IP \fB\-mfix\-sb1\fR 4 .IX Item "-mfix-sb1" .PD 0 .IP \fB\-mno\-fix\-sb1\fR 4 .IX Item "-mno-fix-sb1" .PD برخی خطاهای سخت‌افزاری هستهٔ پردازندهٔ SB\-1 را دور می‌زند. (این پرچم در حال حاضر خطاهای سخت‌افزاری ممیز شناور «F1» و «F2» در بازبینی ۲ پردازندهٔ SB\-1 را دور می‌زند.) .IP \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR 4 .IX Item "-mr10k-cache-barrier=setting" مشخص می‌کند که آیا GCC باید برای جلوگیری از عوارض جانبی اجرای گمانه‌زنانه (speculation) در پردازنده‌های R10K، مانع‌های حافظهٔ نهان (cache barriers) را درج کند یا خیر. .Sp مشابه بسیاری از پردازنده‌ها، R10K تلاش می‌کند نتیجهٔ یک انشعاب شرطی را پیش‌بینی کند و دستورالعمل‌های شاخهٔ اتخاذشده را به‌صورت گمانه‌زنانه اجرا نماید. در صورتی که نتیجهٔ پیش‌بینی‌شده نادرست باشد، پردازنده بعداً این دستورالعمل‌ها را لغو می‌کند. با این حال، در R10K حتی دستورالعمل‌های لغوشده نیز می‌توانند عوارض جانبی داشته باشند. .Sp این مشکل تنها بر ذخیره‌سازی‌های هسته و بسته به سیستم، بر بارگذاری‌های هسته تأثیر می‌گذارد. به عنوان مثال، یک ذخیره‌سازی که به‌صورت گمانه‌زنانه اجرا شده است ممکن است حافظهٔ مقصد را در حافظهٔ نهان بارگذاری کند و خط حافظهٔ نهان را به عنوان تغییریافته (dirty) علامت بزند، حتی اگر خودِ عملیات ذخیره بعداً لغو شود. اگر یک عملیات DMA پیش از تخلیه شدن خط «dirty» روی همان ناحیه از حافظه بنویسد، داده‌های موجود در حافظهٔ نهان، داده‌های نوشته‌شده توسط DMA را بازنویسی خواهند کرد. برای توضیحات کامل، از جمله سایر مشکلات احتمالی، به دفترچهٔ راهنمای پردازندهٔ R10K مراجعه کنید. .Sp یکی از راه‌حل‌ها درج دستورالعمل‌های مانع حافظهٔ نهان پیش از هر دسترسی به حافظه است که ممکن است به‌صورت گمانه‌زنانه اجرا شود و حتی در صورت لغو شدن نیز عوارض جانبی داشته باشد. گزینهٔ \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR پیاده‌سازی این راه‌حل توسط GCC را کنترل می‌کند. این گزینه فرض می‌کند دسترسی‌های لغوشده به هر بایتی در نواحی زیر فاقد عوارض جانبی است: .RS 4 .IP 1. 4 .IX Item "1." حافظهٔ اشغال‌شده توسط فریم پشتهٔ تابع جاری؛ .IP 2. 4 .IX Item "2." حافظهٔ اشغال‌شده توسط یک آرگومان ورودی پشته؛ .IP 3. 4 .IX Item "3." حافظهٔ اشغال‌شده توسط شیئی با آدرس ثابت در زمان پیوند (link\-time\-constant). .RE .RS 4 .Sp اطمینان از ایمن بودن دسترسی‌های گمانه‌زنانه به این نواحی بر عهدهٔ هسته است. .Sp اگر برنامهٔ ورودی شامل اعلان تابعی مانند زیر باشد: .Sp.Vb 1 \& void foo (void); .Ve .Sp آنگاه پیاده‌سازی \f(CW\*(C`foo\*(C'\fR باید به \f(CW\*(C`j foo\*(C'\fR و \&\f(CW\*(C`jal foo\*(C'\fR اجازه دهد که به‌صورت حدسی اجرا شوند. GCC این محدودیت را برای توابعی که خودش کامپایل می‌کند رعایت می‌نماید. این کامپایلر انتظار دارد توابع غیر GCC (مانند کدهای اسمبلی دست‌نویس) نیز همین کار را انجام دهند. .Sp این گزینه دارای سه حالت است: .IP \fB\-mr10k\-cache\-barrier=load\-store\fR 4 .IX Item "-mr10k-cache-barrier=load-store" درج یک حائل حافظه موقت (cache barrier) پیش از عملیات load یا store که ممکن است به‌صورت حدسی اجرا شود و حتی در صورت لغو شدن نیز اثرات جانبی داشته باشد. .IP \fB\-mr10k\-cache\-barrier=store\fR 4 .IX Item "-mr10k-cache-barrier=store" درج یک حائل حافظه موقت پیش از عملیات store که ممکن است به‌صورت حدسی اجرا شود و حتی در صورت لغو شدن نیز اثرات جانبی داشته باشد. .IP \fB\-mr10k\-cache\-barrier=none\fR 4 .IX Item "-mr10k-cache-barrier=none" غیرفعال کردن درج حائل‌های حافظه موقت. این مقدار پیش‌فرض است. .RE .RS 4 .RE .IP \fB\-mflush\-func=\fR\fIfunc\fR 4 .IX Item "-mflush-func=func" .PD 0 .IP \fB\-mno\-flush\-func\fR 4 .IX Item "-mno-flush-func" .PD تابعی را برای فراخوانی جهت تخلیه حافظه‌های موقت I و D مشخص می‌کند، یا تعیین می‌کند که هیچ تابعی فراخوانی نشود. در صورت فراخوانی، تابع باید همان آرگومان‌های تابع متداول \f(CW\*(C`_flush_func\*(C'\fR را بپذیرد، یعنی نشانی محدوده حافظه‌ای که حافظه موقت آن تخلیه می‌شود، اندازه محدوده حافظه، و عدد ۳ (برای تخلیه هر دو حافظه موقت). مقدار پیش‌فرض به مقصدی که GCC برای آن پیکربندی شده بستگی دارد، اما معمولاً \&\f(CW\*(C`_flush_func\*(C'\fR یا \&\f(CW\*(C`_\|_cpu_flush\*(C'\fR است. .IP \fB\-mbranch\-cost=\fR\fInum\fR 4 .IX Item "-mbranch-cost=num" تنظیم هزینه پرش‌ها تقریباً برابر با \fInum\fR دستورالعمل «ساده». این هزینه صرفاً یک تقریب (heuristic) است و تضمینی برای ایجاد نتایج یکسان در نگارش‌های مختلف وجود ندارد. هزینه صفر به‌طور اضافی مقدار پیش‌فرض را که بر اساس تنظیمات \fB\-mtune\fR است انتخاب می‌کند. .IP \fB\-mbranch\-likely\fR 4 .IX Item "-mbranch-likely" .PD 0 .IP \fB\-mno\-branch\-likely\fR 4 .IX Item "-mno-branch-likely" .PD فعال یا غیرفعال کردن استفاده از دستورالعمل‌های Branch Likely، صرف‌نظر از پیش‌فرض معماری انتخاب‌شده. به‌طور پیش‌فرض، اگر دستورالعمل‌های Branch Likely توسط معماری انتخاب‌شده پشتیبانی شوند، ممکن است تولید شوند. یک استثنا برای معماری‌های MIPS32 و MIPS64 و پردازنده‌هایی است که این معماری‌ها را پیاده‌سازی می‌کنند؛ برای آنها، دستورالعمل‌های Branch Likely به‌طور پیش‌فرض تولید نمی‌شوند، زیرا معماری‌های MIPS32 و MIPS64 صراحتاً استفاده از آنها را منسوخ اعلام کرده‌اند. .IP \fB\-mcompact\-branches=never\fR 4 .IX Item "-mcompact-branches=never" .PD 0 .IP \fB\-mcompact\-branches=optimal\fR 4 .IX Item "-mcompact-branches=optimal" .IP \fB\-mcompact\-branches=always\fR 4 .IX Item "-mcompact-branches=always" .PD این گزینه‌ها شکل پرش‌های تولیدی را کنترل می‌کنند. مقدار پیش‌فرض \fB\-mcompact\-branches=optimal\fR است. .Sp گزینه \fB\-mcompact\-branches=never\fR تضمین می‌کند که دستورالعمل‌های پرش فشرده هرگز تولید نشوند. .Sp گزینه \fB\-mcompact\-branches=always\fR تضمین می‌کند که در صورت موجود بودن برای MIPS Release 6 به بعد، یک دستورالعمل پرش فشرده تولید شود. اگر دستورالعمل پرش فشرده در دسترس نباشد (یا در نسخه‌های پیش از R6)، به‌جای آن شکلی از پرش با شکاف تأخیر (delay slot) استفاده خواهد شد. .Sp اگر برای مقصدهای MIPS16/microMIPS استفاده شود، در حال حاضر نادیده گرفته خواهد شد. رفتار برای MIPS16/microMIPS ممکن است در آینده تغییر کند، چرا که آنها دارای برخی دستورالعمل‌های پرش فشرده هستند. .Sp گزینه \fB\-mcompact\-branches=optimal\fR باعث می‌شود در صورتی که یک پرش با شکاف تأخیر در ISA فعلی موجود بوده و شکاف تأخیر با موفقیت پر شود، از آن استفاده گردد. اگر شکاف تأخیر پر نشود، در صورت موجود بودن، یک پرش فشرده انتخاب خواهد شد. .IP \fB\-mfp\-exceptions\fR 4 .IX Item "-mfp-exceptions" .PD 0 .IP \fB\-mno\-fp\-exceptions\fR 4 .IX Item "-mno-fp-exceptions" .PD مشخص می‌کند که آیا استثناهای ممیز شناور (FP exceptions) فعال هستند یا خیر. این گزینه بر نحوه زمان‌بندی دستورالعمل‌های FP برای برخی پردازنده‌ها تأثیر می‌گذارد. پیش‌فرض این است که استثناهای FP فعال هستند. .Sp برای نمونه در SB\-1، اگر استثناهای FP غیرفعال باشند و کد ۶۴ بیتی تولید کنیم، می‌توانیم از هر دو خط‌لوله (pipe) ممیز شناور استفاده کنیم. در غیر این صورت، تنها می‌توان از یک خط‌لوله FP استفاده کرد. .IP \fB\-mvr4130\-align\fR 4 .IX Item "-mvr4130-align" .PD 0 .IP \fB\-mno\-vr4130\-align\fR 4 .IX Item "-mno-vr4130-align" .PD خط‌لوله پردازنده VR4130 از نوع سوپراسکالر دوخطه (two\-way superscalar) است، اما تنها در صورتی می‌تواند دو دستورالعمل را هم‌زمان صادر کند که دستورالعمل نخست با مرز ۸ بایتی تراز باشد. با فعال بودن این گزینه، GCC جفت دستورالعمل‌هایی را که به تشخیص آن باید به‌طور موازی اجرا شوند تراز می‌کند. .Sp این گزینه تنها هنگام بهینه‌سازی برای VR4130 اثرگذار است. این گزینه معمولاً کد را سریع‌تر می‌کند، اما به قیمت افزایش حجم آن. این گزینه به‌طور پیش‌فرض در سطح بهینه‌سازی \fB\-O3\fR فعال است. .IP \fB\-msynci\fR 4 .IX Item "-msynci" .PD 0 .IP \fB\-mno\-synci\fR 4 .IX Item "-mno-synci" .PD فعال (غیرفعال) کردن تولید دستورالعمل‌های \f(CW\*(C`synci\*(C'\fR در معماری‌هایی که از آن پشتیبانی می‌کنند. دستورالعمل‌های \f(CW\*(C`synci\*(C'\fR (در صورت فعال بودن) هنگام کامپایل \f(CW\*(C`_\|_builtin_\|_\|_clear_cache\*(C'\fR تولید می‌شوند. .Sp پیش‌فرض این گزینه \fB\-mno\-synci\fR است، اما این مقدار پیش‌فرض می‌تواند با پیکربندی GCC با \fB\-\-with\-synci\fR بازنویسی شود. .Sp هنگام کامپایل کد برای سیستم‌های تک‌پردازنده‌ای، استفاده از \f(CW\*(C`synci\*(C'\fR عموماً ایمن است. با این حال، در بسیاری از سیستم‌های چند‌هسته‌ای (SMP)، این دستورالعمل حافظه موقت دستورالعمل را روی تمام هسته‌ها نامعتبر (invalidate) نمی‌کند و ممکن است به رفتار تعریف‌نشده بینجامد. .IP \fB\-mrelax\-pic\-calls\fR 4 .IX Item "-mrelax-pic-calls" .PD 0 .IP \fB\-mno\-relax\-pic\-calls\fR 4 .IX Item "-mno-relax-pic-calls" .PD تلاش برای تبدیل فراخوانی‌های PIC که معمولاً از طریق ثبات \&\f(CW$25\fR ارسال می‌شوند، به فراخوانی‌های مستقیم. این کار تنها در صورتی ممکن است که پیونددهنده بتواند مقصد را در زمان پیوند حل و فصل کند و مقصد در محدوده مجاز برای یک فراخوانی مستقیم باشد. .Sp در صورتی که GCC برای استفاده از یک اسمبلر و پیونددهنده‌ای پیکربندی شده باشد که از دستور اسمبلی \f(CW\*(C`.reloc\*(C'\fR پشتیبانی می‌کنند و \fB\-mexplicit\-relocs\fR برقرار باشد، \&\fB\-mrelax\-pic\-calls\fR پیش‌فرض خواهد بود. با \&\fB\-mno\-explicit\-relocs\fR، این بهینه‌سازی می‌تواند تنها توسط اسمبلر و پیونددهنده بدون کمک کامپایلر انجام شود. .IP \fB\-mmcount\-ra\-address\fR 4 .IX Item "-mmcount-ra-address" .PD 0 .IP \fB\-mno\-mcount\-ra\-address\fR 4 .IX Item "-mno-mcount-ra-address" .PD تولید (عدم تولید) کدی که به \f(CW\*(C`_mcount\*(C'\fR امکان می‌دهد نشانی بازگشت تابع فراخواننده را تغییر دهد. با فعال بودن، این گزینه رابط معمول \&\f(CW\*(C`_mcount\*(C'\fR را با یک پارامتر جدید \fIra\-address\fR گسترش می‌دهد که دارای نوع \f(CW\*(C`intptr_t *\*(C'\fR بوده و در ثبات \&\f(CW$12\fR ارسال می‌شود. آنگاه \f(CW\*(C`_mcount\*(C'\fR می‌تواند با انجام هر دو مورد زیر، نشانی بازگشت را تغییر دهد: .RS 4 .IP * 4 بازگرداندن نشانی جدید در ثبات \f(CW$31\fR. .IP * 4 ذخیره نشانی جدید در \f(CW\*(C`*\fR\f(CIra\-address\fR\f(CW\*(C'\fR، در صورتی که \fIra\-address\fR غیرتهی باشد. .RE .RS 4 .Sp پیش‌فرض \fB\-mno\-mcount\-ra\-address\fR است. .RE .IP \fB\-mframe\-header\-opt\fR 4 .IX Item "-mframe-header-opt" .PD 0 .IP \fB\-mno\-frame\-header\-opt\fR 4 .IX Item "-mno-frame-header-opt" .PD فعال (غیرفعال) کردن بهینه‌سازی سرآیند فریم (frame header) در o32 ABI. هنگام استفاده از o32 ABI، توابع فراخواننده ۱۶ بایت روی پشته برای تابع فراخوانی‌شده تخصیص می‌دهند تا آرگومان‌های ثبات را بنویسد. با فعال بودن، در صورتی که مشخص شود سرآیند فریم بدون استفاده است، این بهینه‌سازی از تخصیص آن جلوگیری خواهد کرد. .Sp این بهینه‌سازی به‌طور پیش‌فرض در تمام سطوح بهینه‌سازی خاموش است..IP \fB\-mlxc1\-sxc1\fR 4 .IX Item "-mlxc1-sxc1" .PD 0 .IP \fB\-mno\-lxc1\-sxc1\fR 4 .IX Item "-mno-lxc1-sxc1" .PD در صورت امکان، تولید دستورالعمل‌های \f(CW\*(C`lwxc1\*(C'\fR، \&\f(CW\*(C`swxc1\*(C'\fR، \f(CW\*(C`ldxc1\*(C'\fR و \f(CW\*(C`sdxc1\*(C'\fR را فعال (غیرفعال) می‌کند. به‌طور پیش‌فرض فعال است. .IP \fB\-mmadd4\fR 4 .IX Item "-mmadd4" .PD 0 .IP \fB\-mno\-madd4\fR 4 .IX Item "-mno-madd4" .PD در صورت امکان، تولید دستورالعمل‌های ۴\-عملوندی \f(CW\*(C`madd.s\*(C'\fR، \&\f(CW\*(C`madd.d\*(C'\fR و دستورالعمل‌های مرتبط را فعال (غیرفعال) می‌کند. به‌طور پیش‌فرض فعال است. .PP \fIگزینه‌های MMIX\fR .IX Subsection "MMIX Options" .PP این گزینه‌ها برای MMIX تعریف شده‌اند: .IP \fB\-mlibfuncs\fR 4 .IX Item "-mlibfuncs" .PD 0 .IP \fB\-mno\-libfuncs\fR 4 .IX Item "-mno-libfuncs" .PD مشخص می‌کند که توابع ذاتی کتابخانه در حال کامپایل هستند، که تمام مقادیر را بدون توجه به اندازه‌شان در ثبات‌ها ارسال می‌کند. .IP \fB\-mepsilon\fR 4 .IX Item "-mepsilon" .PD 0 .IP \fB\-mno\-epsilon\fR 4 .IX Item "-mno-epsilon" .PD دستورالعمل‌های مقایسه ممیز شناور را تولید می‌کند که با توجه به ثبات اپسیلون \f(CW\*(C`rE\*(C'\fR مقایسه را انجام می‌دهند. .IP \fB\-mabi=mmixware\fR 4 .IX Item "-mabi=mmixware" .PD 0 .IP \fB\-mabi=gnu\fR 4 .IX Item "-mabi=gnu" .PD کدی تولید می‌کند که پارامترهای تابع و مقادیر بازگشتی را به‌گونه‌ای ارسال می‌کند که (در تابع فراخوانی‌شده) به صورت ثبات‌های \f(CW$0\fR به بالا دیده می‌شوند، در مقابل GNU ABI که از ثبات‌های سراسری \f(CW$231\fR به بالا استفاده می‌کند. .IP \fB\-mzero\-extend\fR 4 .IX Item "-mzero-extend" .PD 0 .IP \fB\-mno\-zero\-extend\fR 4 .IX Item "-mno-zero-extend" .PD هنگام خواندن داده‌ها از حافظه در اندازه‌های کوچک‌تر از ۶۴ بیت، به‌طور پیش‌فرض به جای دستورالعمل‌های بارگذاری گسترش با علامت، از دستورالعمل‌های بارگذاری گسترش با صفر استفاده می‌کند (استفاده نمی‌کند). .IP \fB\-mknuthdiv\fR 4 .IX Item "-mknuthdiv" .PD 0 .IP \fB\-mno\-knuthdiv\fR 4 .IX Item "-mno-knuthdiv" .PD باعث می‌شود علامت باقی‌مانده حاصل از تقسیم با علامت مقسوم‌علیه یکسان باشد. در حالت پیش‌فرض، یعنی \fB\-mno\-knuthdiv\fR، علامت باقی‌مانده از علامت مقسوم پیروی می‌کند. هر دو روش از نظر محاسباتی معتبر هستند، اما روش دوم تقریباً به‌طور اختصاصی استفاده می‌شود. .IP \fB\-mtoplevel\-symbols\fR 4 .IX Item "-mtoplevel-symbols" .PD 0 .IP \fB\-mno\-toplevel\-symbols\fR 4 .IX Item "-mno-toplevel-symbols" .PD یک \fB:\fR را به ابتدای تمام نمادهای سراسری اضافه می‌کند (اضافه نمی‌کند)، تا کد اسمبلی بتواند با دستور اسمبلی \f(CW\*(C`PREFIX\*(C'\fR استفاده شود. .IP \fB\-melf\fR 4 .IX Item "-melf" یک فایل اجرایی در قالب ELF تولید می‌کند، به جای قالب پیش‌فرض \&\fBmmo\fR که توسط شبیه‌ساز \fBmmix\fR استفاده می‌شود. .IP \fB\-mbranch\-predict\fR 4 .IX Item "-mbranch-predict" .PD 0 .IP \fB\-mno\-branch\-predict\fR 4 .IX Item "-mno-branch-predict" .PD هنگامی که پیش‌بینی ایستان انشعاب یک انشعاب محتمل را نشان می‌دهد، از دستورالعمل‌های انشعاب محتمل استفاده می‌کند (استفاده نمی‌کند). .IP \fB\-mbase\-addresses\fR 4 .IX Item "-mbase-addresses" .PD 0 .IP \fB\-mno\-base\-addresses\fR 4 .IX Item "-mno-base-addresses" .PD کدی تولید می‌کند (تولید نمی‌کند) که از \fIآدرس‌های پایه\fR استفاده می‌کند. استفاده از یک آدرس پایه به‌طور خودکار درخواستی را (که توسط اسمبلر و پیونددهنده رسیدگی می‌شود) برای تنظیم یک مقدار ثابت در یک ثبات سراسری تولید می‌کند. این ثبات برای یک یا چند درخواست آدرس پایه در محدوده ۰ تا ۲۵۵ از مقدار نگهداری‌شده در ثبات استفاده می‌شود. این کار عموماً منجر به کدی کوتاه‌تر و سریع‌تر می‌شود، اما تعداد داده‌های مختلفی که می‌توان آدرس‌دهی کرد محدود است. این بدان معناست که برنامه‌ای که از داده‌های ایستان زیادی استفاده می‌کند ممکن است به \fB\-mno\-base\-addresses\fR نیاز داشته باشد. .IP \fB\-msingle\-exit\fR 4 .IX Item "-msingle-exit" .PD 0 .IP \fB\-mno\-single\-exit\fR 4 .IX Item "-mno-single-exit" .PD کد تولیدشده را مجبور می‌کند (مجبور نمی‌کند) که در هر تابع تنها یک نقطه خروج داشته باشد. .PP \fIگزینه‌های MN10300\fR .IX Subsection "MN10300 Options" .PP این گزینه‌های \fB\-m\fR برای معماری‌های Matsushita MN10300 تعریف شده‌اند: .IP \fB\-mmult\-bug\fR 4 .IX Item "-mmult-bug" کدی تولید می‌کند که از باگ‌های موجود در دستورالعمل‌های ضرب برای پردازنده‌های MN10300 جلوگیری کند. این حالت پیش‌فرض است. .IP \fB\-mno\-mult\-bug\fR 4 .IX Item "-mno-mult-bug" کدی برای جلوگیری از باگ‌های موجود در دستورالعمل‌های ضرب برای پردازنده‌های MN10300 تولید نمی‌کند. .IP \fB\-mam33\fR 4 .IX Item "-mam33" با استفاده از ویژگی‌های خاص پردازنده AM33 کد تولید می‌کند. .IP \fB\-mno\-am33\fR 4 .IX Item "-mno-am33" با استفاده از ویژگی‌های خاص پردازنده AM33 کد تولید نمی‌کند. این حالت پیش‌فرض است. .IP \fB\-mam33\-2\fR 4 .IX Item "-mam33-2" با استفاده از ویژگی‌های خاص پردازنده AM33/2.0 کد تولید می‌کند. .IP \fB\-mam34\fR 4 .IX Item "-mam34" با استفاده از ویژگی‌های خاص پردازنده AM34 کد تولید می‌کند. .IP \fB\-mtune=\fR\fIcpu\-type\fR 4 .IX Item "-mtune=cpu-type" هنگام زمان‌بندی دستورالعمل‌ها، از ویژگی‌های زمان‌بندی نوع CPU مشخص‌شده استفاده می‌کند. این کار نوع پردازنده هدف را تغییر نمی‌دهد. نوع CPU باید یکی از \fBmn10300\fR، \fBam33\fR، \&\fBam33\-2\fR یا \fBam34\fR باشد. .IP \fB\-mreturn\-pointer\-on\-d0\fR 4 .IX Item "-mreturn-pointer-on-d0" هنگام تولید تابعی که یک اشاره‌گر را برمی‌گرداند، اشاره‌گر را در هر دو ثبات \f(CW\*(C`a0\*(C'\fR و \f(CW\*(C`d0\*(C'\fR برمی‌گرداند. در غیر این صورت، اشاره‌گر فقط در \f(CW\*(C`a0\*(C'\fR بازگردانده می‌شود، و تلاش برای فراخوانی چنین توابعی بدون پیش‌نمونه منجر به خطا خواهد شد. توجه داشته باشید که این گزینه به‌طور پیش‌فرض فعال است؛ برای غیرفعال کردن آن از \&\fB\-mno\-return\-pointer\-on\-d0\fR استفاده کنید. .IP \fB\-mno\-crt0\fR 4 .IX Item "-mno-crt0" فایل شیء مقداردهی اولیه زمان اجرای C را پیوند نمی‌زند. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" به پیونددهنده اعلام می‌کند که باید یک مرحله بهینه‌سازی بازآرایی (relaxation) را برای کوتاه کردن انشعاب‌ها، فراخوانی‌ها و آدرس‌های حافظه مطلق انجام دهد. این گزینه فقط زمانی تأثیر دارد که در خط فرمان برای مرحله نهایی پیوند استفاده شود. .Sp این گزینه اشکال‌زدایی نمادین را غیرممکن می‌کند. .IP \fB\-mliw\fR 4 .IX Item "-mliw" به کامپایلر اجازه می‌دهد در صورتی که هدف \fBAM33\fR یا جدیدتر باشد، دستورالعمل‌های \fIکلمه دستورالعمل طولانی (LIW)\fR را تولید کند. این حالت پیش‌فرض است. این گزینه ماکروی پیش‌پردازنده \f(CW\*(C`_\|_LIW_\|_\*(C'\fR را تعریف می‌کند. .IP \fB\-mno\-liw\fR 4 .IX Item "-mno-liw" به کامپایلر اجازه نمی‌دهد دستورالعمل‌های \fIکلمه دستورالعمل طولانی (LIW)\fR را تولید کند. این گزینه ماکروی پیش‌پردازنده \&\f(CW\*(C`_\|_NO_LIW_\|_\*(C'\fR را تعریف می‌کند. .IP \fB\-msetlb\fR 4 .IX Item "-msetlb" به کامپایلر اجازه می‌دهد در صورتی که هدف \fBAM33\fR یا جدیدتر باشد، دستورالعمل‌های \fISETLB\fR و \fILcc\fR را تولید کند. این حالت پیش‌فرض است. این گزینه ماکروی پیش‌پردازنده \f(CW\*(C`_\|_SETLB_\|_\*(C'\fR را تعریف می‌کند. .IP \fB\-mno\-setlb\fR 4 .IX Item "-mno-setlb" به کامپایلر اجازه نمی‌دهد دستورالعمل‌های \fISETLB\fR یا \fILcc\fR را تولید کند. این گزینه ماکروی پیش‌پردازنده \&\f(CW\*(C`_\|_NO_SETLB_\|_\*(C'\fR را تعریف می‌کند. .PP \fIگزینه‌های Moxie\fR .IX Subsection "Moxie Options" .IP \fB\-meb\fR 4 .IX Item "-meb" کد بزرگ‌پایان (big\-endian) تولید می‌کند. این حالت پیش‌فرض برای پیکربندی‌های \fBmoxie\-*\-*\fR است..IP \fB\-mel\fR 4 .IX Item "-mel" تولید کد little\-endian. .IP \fB\-mmul.x\fR 4 .IX Item "-mmul.x" دستورالعمل‌های mul.x و umul.x را تولید می‌کند. این گزینه در پیکربندی‌های \&\fBmoxiebox\-*\-*\fR حالت پیش‌فرض است. .IP \fB\-mno\-crt0\fR 4 .IX Item "-mno-crt0" فایل شیء راه‌اندازی زمان اجرای C را پیوند نمی‌زند. .PP \fIگزینه‌های MSP430\fR .IX Subsection "گزینه‌های MSP430" .PP این گزینه‌ها برای MSP430 تعریف شده‌اند: .IP \fB\-masm\-hex\fR 4 .IX Item "-masm-hex" خروجی اسمبلی را وادار می‌کند تا همیشه از ثابت‌های هگزادسیمال استفاده کند. به‌طور معمول چنین ثابت‌هایی به‌صورت ده‌دهی علامت‌دار هستند، اما این گزینه برای مجموعهٔ آزمون (testsuite) و/یا مقاصد زیبایی‌شناختی در دسترس است. .IP \fB\-mmcu=\fR 4 .IX Item "-mmcu=" انتخاب MCU هدف. از این گزینه برای ایجاد یک نماد پیش‌پردازندهٔ C بر پایهٔ نام MCU استفاده می‌شود که به حروف بزرگ تبدیل شده و پیشوند و پسوند \fB_\|_\fR به آن اضافه می‌شود. این نماد به نوبهٔ خود توسط فایل سرآیند \&\fImsp430.h\fR برای انتخاب یک فایل سرآیند تکمیلی مختص به آن MCU به کار می‌رود. .Sp این گزینه همچنین ISA مورد استفاده را تعیین می‌کند. اگر نام MCU از مواردی باشد که مشخصاً تنها از 430 ISA پشتیبانی می‌کند، همان انتخاب می‌شود؛ در غیر این صورت 430X ISA انتخاب خواهد شد. نام عمومی MCU به‌صورت \fBmsp430\fR نیز می‌تواند برای انتخاب 430 ISA استفاده شود. به همین ترتیب، نام عمومی \fBmsp430x\fR برای MCU، معماری 430X ISA را انتخاب می‌کند. .Sp علاوه بر این، یک اسکریپت پیونددهندهٔ مختص MCU به خط فرمان پیونددهنده اضافه می‌شود. نام اسکریپت همان نام MCU همراه با پسوند \&\fI.ld\fR است. بنابراین تعیین \fB\-mmcu=xxx\fR در خط فرمان \fBgcc\fR، نماد پیش‌پردازندهٔ C با عنوان \f(CW\*(C`_\|_XXX_\|_\*(C'\fR را تعریف کرده و باعث می‌شود پیونددهنده به دنبال اسکریپتی به نام \fIxxx.ld\fR بگردد. .Sp پشتیبانی از ISA و ضرب سخت‌افزاری برای MCUهای مختلف به‌صورت درون‌کد (hard\-coded) در GCC گنجانده شده است. با این حال، می‌توان از یک فایل خارجی \fBdevices.csv\fR برای گسترش پشتیبانی از دستگاه‌ها فراتر از موارد درون‌کد شده استفاده کرد. .Sp برنامهٔ GCC فایل \fBdevices.csv\fR را با استفاده از روش‌های زیر و با رعایت ترتیب اولویت جستجو می‌کند، به‌طوری که روش اول بر روش دوم و روش دوم بر روش سوم اولویت دارد. .RS 4 .ie n .IP "مسیر include مشخص‌شده با ""\-I"" و ""\-L""" 4 .el .IP "مسیر include مشخص‌شده با \f(CW\-I\fR و \f(CW\-L\fR" 4 .IX Item "مسیر include مشخص‌شده با -I و -L" فایل \&\fBdevices.csv\fR در هر یک از دایرکتوری‌های مشخص‌شده توسط مسیرهای include و مسیرهای جستجوی کتابخانهٔ پیونددهنده جستجو می‌شود. .IP "مسیر مشخص‌شده توسط متغیر محیطی \fBMSP430_GCC_INCLUDE_DIR\fR" 4 .IX Item "مسیر مشخص‌شده توسط متغیر محیطی MSP430_GCC_INCLUDE_DIR" مقدار متغیر محیطی سراسری \&\fBMSP430_GCC_INCLUDE_DIR\fR را برابر با مسیر کامل دایرکتوری حاوی devices.csv تنظیم کنید تا GCC این دایرکتوری را برای devices.csv جستجو کند. اگر devices.csv پیدا شود، این دایرکتوری همچنین به عنوان مسیر include و مسیر کتابخانهٔ پیونددهنده ثبت می‌شود. بنابراین فایل‌های سرآیند و اسکریپت‌های پیونددهنده در این دایرکتوری می‌توانند بدون تعیین دستی \f(CW\*(C`\-I\*(C'\fR و \f(CW\*(C`\-L\*(C'\fR در خط فرمان استفاده شوند. .IP "دایرکتوری \fBmsp430\-elf{,bare}/include/devices\fR" 4 .IX Item "دایرکتوری msp430-elf{,bare}/include/devices" در نهایت، GCC مسیر \fBmsp430\-elf{,bare}/include/devices\fR را از دایرکتوری ریشهٔ زنجیره ابزار بررسی می‌کند. این دایرکتوری در نصب پیش‌فرض وجود ندارد، اما اگر کاربر آن را ایجاد کرده و \fBdevices.csv\fR را در آنجا کپی کرده باشد، داده‌های MCU خوانده می‌شوند. همانند بالا، این دایرکتوری نیز به عنوان مسیر include و مسیر کتابخانهٔ پیونددهنده ثبت می‌شود. .RE .RS 4 .Sp اگر هیچ‌یک از روش‌های جستجوی بالا فایل \fBdevices.csv\fR را پیدا نکنند، داده‌های درون‌کد شدهٔ MCU استفاده می‌شوند. .RE .IP \fB\-mwarn\-mcu\fR 4 .IX Item "-mwarn-mcu" .PD 0 .IP \fB\-mno\-warn\-mcu\fR 4 .IX Item "-mno-warn-mcu" .PD این گزینه هشدارهای مربوط به تداخل میان نام MCU مشخص‌شده توسط گزینهٔ \fB\-mmcu\fR و ISA تعیین‌شده با گزینهٔ \&\fB\-mcpu\fR و/یا پشتیبانی از ضرب سخت‌افزاری تعیین‌شده با گزینهٔ \&\fB\-mhwmult\fR را فعال یا غیرفعال می‌کند. همچنین هشدارهای مربوط به نام‌های ناشناختهٔ MCU را تغییر وضعیت می‌دهد. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-mcpu=\fR 4 .IX Item "-mcpu=" معماری ISA مورد استفاده را مشخص می‌کند. مقادیر پذیرفته‌شده عبارتند از \fBmsp430\fR، \&\fBmsp430x\fR و \fBmsp430xv2\fR. این گزینه منسوخ شده است. برای انتخاب ISA باید از گزینهٔ \&\fB\-mmcu=\fR استفاده شود. .IP \fB\-msim\fR 4 .IX Item "-msim" پیوند به کتابخانه‌های زمان اجرای شبیه‌ساز و اسکریپت پیونددهنده. این گزینه هر اسکریپتی را که توسط گزینهٔ \fB\-mmcu=\fR انتخاب شود نادیده می‌گیرد و جایگزین می‌کند. .IP \fB\-mlarge\fR 4 .IX Item "-mlarge" استفاده از آدرس‌دهی مدل بزرگ (اشاره‌گرهای ۲۰ بیتی، \f(CW\*(C`size_t\*(C'\fR ۲۰ بیتی). .IP \fB\-msmall\fR 4 .IX Item "-msmall" استفاده از آدرس‌دهی مدل کوچک (اشاره‌گرهای ۱۶ بیتی، \f(CW\*(C`size_t\*(C'\fR ۱۶ بیتی). .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" این گزینه به اسمبلر و پیونددهنده ارسال می‌شود و به پیونددهنده اجازه می‌دهد تا بهینه‌سازی‌های خاصی را که تا زمان پیوند نهایی قابل انجام نیستند، اعمال کند. .IP \fBmhwmult=\fR 4 .IX Item "mhwmult=" نوع ضرب سخت‌افزاری پشتیبانی‌شده توسط هدف را مشخص می‌کند. مقادیر پذیرفته‌شده عبارتند از \fBnone\fR برای عدم وجود ضرب سخت‌افزاری، \fB16bit\fR برای ضرب اولیه و صرفاً ۱۶ بیتی پشتیبانی‌شده در MCUهای نخستین، \&\fB32bit\fR برای ضرب ۱۶/۳۲ بیتی پشتیبانی‌شده در MCUهای بعدی و \&\fBf5series\fR برای ضرب ۱۶/۳۲ بیتی پشتیبانی‌شده در MCUهای سری F5. مقدار \fBauto\fR نیز می‌تواند داده شود؛ این مقدار به GCC اعلام می‌کند تا پشتیبانی ضرب سخت‌افزاری را بر اساس نام MCU مشخص‌شده با گزینهٔ \&\fB\-mmcu\fR استنتاج کند. اگر هیچ گزینهٔ \fB\-mmcu\fR مشخص نشده باشد یا نام MCU شناسایی نشود، هیچ پشتیبانی سخت‌افزاری برای ضرب فرض نخواهد شد. مقدار \f(CW\*(C`auto\*(C'\fR تنظیم پیش‌فرض است. .Sp عملیات ضرب سخت‌افزاری معمولاً با فراخوانی یک روال کتابخانه‌ای انجام می‌شود. این کار در فضای کد تولیدشده صرفه‌جویی می‌کند. با این حال هنگام کامپایل با \&\fB\-O3\fR یا بالاتر، ضرب سخت‌افزاری به‌صورت درون‌خطی (inline) فراخوانی می‌شود. این امر کدی حجیم‌تر اما سریع‌تر تولید می‌کند. .Sp روال‌های ضرب سخت‌افزاری هنگام اجرا وقفه‌ها را غیرفعال کرده و پس از اتمام، وضعیت پیشین وقفه را بازمی‌گردانند. این ویژگی استفاده از آن‌ها را هم درون گرداننده‌های وقفه و هم در کدهای عادی ایمن می‌سازد. .IP \fB\-minrt\fR 4 .IX Item "-minrt" فعال‌سازی استفاده از محیط زمان اجرای کمینه \- بدون مقداردهنده‌های اولیه یا سازنده‌های ایستا (static). این گزینه برای دستگاه‌های با محدودیت شدید حافظه در نظر گرفته شده است. کامپایلر نمادهای خاصی را در برخی اشیاء می‌گنجاند که به پیونددهنده و زمان اجرا اعلام می‌کنند کدام قطعه‌های کد مورد نیاز هستند. .IP \fB\-mtiny\-printf\fR 4 .IX Item "-mtiny-printf" فعال‌سازی توابع کتابخانه‌ای \f(CW\*(C`printf\*(C'\fR و \f(CW\*(C`puts\*(C'\fR با حجم کد کاهش‌یافته. پیاده‌سازی‌های \fBtiny\fR این توابع بازبسته‌ناپذیر (non-reentrant) هستند، بنابراین در برنامه‌های چندنخی باید با احتیاط استفاده شوند. .Sp پشتیبانی از جریان‌ها (streams) حذف شده است و رشته‌ای که باید چاپ شود همواره از طریق فراخوانی سیستمی \f(CW\*(C`write\*(C'\fR به stdout ارسال خواهد شد. این رشته پیش از ارسال به write بافر نمی‌شود. .Sp این گزینه به Newlib Nano IO نیاز دارد، بنابراین GCC باید با \&\fB\-\-enable\-newlib\-nano\-formatted\-io\fR پیکربندی شده باشد. .IP \fB\-mmax\-inline\-shift=\fR 4 .IX Item "-mmax-inline-shift=" این گزینه یک عدد صحیح بین ۰ تا ۶۴ (شامل هر دو) دریافت می‌کند و حداکثر تعداد دستورالعمل‌های شیفت درون‌خطی را که باید برای انجام عملیات شیفت با مقداری ثابت صادر شوند، تعیین می‌کند. هنگامی که نیاز به فراتر رفتن از این مقدار باشد، به‌جای آن از یک تابع کمکی mspabi استفاده می‌شود. مقدار پیش‌فرض ۴ است. .Sp این ویژگی تنها بر مواردی اثر می‌گذارد که شیفت به چندین موقعیت نتواند با یک دستور واحد انجام شود (مانند همهٔ شیفت‌های >1 در 430 ISA). .Sp شیفت‌های یک مقدار ۳۲ بیتی دست‌کم دو برابر هزینه‌برتر هستند، بنابراین مقدار داده‌شده به این گزینه بر ۲ تقسیم شده و مقدار حاصل استفاده می‌شود. .IP \fB\-mcode\-region=\fR 4 .IX Item "-mcode-region=" .PD 0 .IP \fB\-mdata\-region=\fR 4 .IX Item "-mdata-region=" .PD این گزینه‌ها به کامپایلر اعلام می‌کنند توابع و داده‌هایی را که فاقد یکی از مشخصه‌های \f(CW\*(C`lower\*(C'\fR، \f(CW\*(C`upper\*(C'\fR، \f(CW\*(C`either\*(C'\fR یا \&\f(CW\*(C`section\*(C'\fR هستند، در کجا قرار دهد. مقادیر ممکن عبارتند از \f(CW\*(C`lower\*(C'\fR، \&\f(CW\*(C`upper\*(C'\fR، \f(CW\*(C`either\*(C'\fR یا \f(CW\*(C`any\*(C'\fR. سه مقدار نخست مانند مشخصهٔ متناظر خود عمل می‌کنند. چهارمین مقدار ممکن \- \&\f(CW\*(C`any\*(C'\fR \- حالت پیش‌فرض است. این مقدار، جای‌گذاری را کاملاً به اسکریپت پیونددهنده و نحوهٔ تخصیص بخش‌های استاندارد (\f(CW\*(C`.text\*(C'\fR، \f(CW\*(C`.data\*(C'\fR و غیره) به نواحی حافظه واگذار می‌کند. .IP \fB\-msilicon\-errata=\fR 4 .IX Item "-msilicon-errata=" این گزینه درخواستی را به اسمبلر ارسال می‌کند تا اصلاحات مربوط به اشکالات سخت‌افزاری تراشه (silicon errata) مشخص‌شده را فعال سازد. .IP \fB\-msilicon\-errata\-warn=\fR 4 .IX Item "-msilicon-errata-warn=" این گزینه درخواستی را به اسمبلر ارسال می‌کند تا پیام‌های هشدار را در مواردی که ممکن است نیاز به اعمال یک اصلاح اشکال سخت‌افزاری تراشه (silicon errata) باشد، فعال کند. .IP \fB\-mwarn\-devices\-csv\fR 4 .IX Item "-mwarn-devices-csv".PD 0 .IP \fB\-mno\-warn\-devices\-csv\fR 4 .IX Item "-mno-warn-devices-csv" .PD اگر \fBdevices.csv\fR یافت نشود یا مشکلی در تجزیه آن وجود داشته باشد، هشدار می‌دهد (پیش‌فرض: فعال). .PP \fIگزینه‌های NDS32\fR .IX Subsection "NDS32 Options" .PP این گزینه‌ها برای پیاده‌سازی‌های NDS32 تعریف شده‌اند: .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد در حالت big\-endian. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد در حالت little\-endian. .IP \fB\-mreduced\-regs\fR 4 .IX Item "-mreduced-regs" استفاده از مجموعه کاهش‌یافته ثبات‌ها برای تخصیص ثبات. .IP \fB\-mfull\-regs\fR 4 .IX Item "-mfull-regs" استفاده از مجموعه کامل ثبات‌ها برای تخصیص ثبات. .IP \fB\-mcmov\fR 4 .IX Item "-mcmov" تولید دستورالعمل‌های انتقال شرطی. .IP \fB\-mno\-cmov\fR 4 .IX Item "-mno-cmov" عدم تولید دستورالعمل‌های انتقال شرطی. .IP \fB\-mext\-perf\fR 4 .IX Item "-mext-perf" تولید دستورالعمل‌های افزونه کارایی. .IP \fB\-mno\-ext\-perf\fR 4 .IX Item "-mno-ext-perf" عدم تولید دستورالعمل‌های افزونه کارایی. .IP \fB\-mext\-perf2\fR 4 .IX Item "-mext-perf2" تولید دستورالعمل‌های افزونه کارایی ۲. .IP \fB\-mno\-ext\-perf2\fR 4 .IX Item "-mno-ext-perf2" عدم تولید دستورالعمل‌های افزونه کارایی ۲. .IP \fB\-mext\-string\fR 4 .IX Item "-mext-string" تولید دستورالعمل‌های افزونه رشته. .IP \fB\-mno\-ext\-string\fR 4 .IX Item "-mno-ext-string" عدم تولید دستورالعمل‌های افزونه رشته. .IP \fB\-mv3push\fR 4 .IX Item "-mv3push" تولید دستورالعمل‌های push25/pop25 در نسخه v3. .IP \fB\-mno\-v3push\fR 4 .IX Item "-mno-v3push" عدم تولید دستورالعمل‌های push25/pop25 در نسخه v3. .IP \fB\-m16\-bit\fR 4 .IX Item "-m16-bit" تولید دستورالعمل‌های ۱۶ بیتی. .IP \fB\-mno\-16\-bit\fR 4 .IX Item "-mno-16-bit" عدم تولید دستورالعمل‌های ۱۶ بیتی. .IP \fB\-misr\-vector\-size=\fR\fInum\fR 4 .IX Item "-misr-vector-size=num" اندازه هر بردار وقفه را مشخص می‌کند، که باید ۴ یا ۱۶ باشد. .IP \fB\-mcache\-block\-size=\fR\fInum\fR 4 .IX Item "-mcache-block-size=num" اندازه هر بلوک حافظه موقت (cache block) را مشخص می‌کند، که باید توانی از ۲ بین ۴ و ۵۱۲ باشد. .IP \fB\-march=\fR\fIarch\fR 4 .IX Item "-march=arch" نام معماری مقصد را مشخص می‌کند. .IP \fB\-mcmodel=\fR\fIcode\-model\fR 4 .IX Item "-mcmodel=code-model" مدل کد را روی یکی از موارد زیر تنظیم می‌کند: .RS 4 .IP \fBsmall\fR 4 .IX Item "small" همه بخش‌های داده و بخش‌های داده فقط‌خواندنی باید در فضای آدرس‌دهی ۵۱۲ کیلوبایت باشند. بخش کد (text segment) باید در فضای آدرس‌دهی ۱۶ مگابایت باشد. .IP \fBmedium\fR 4 .IX Item "medium" بخش داده باید در محدوده ۵۱۲ کیلوبایت باشد در حالی که بخش داده فقط‌خواندنی می‌تواند در فضای آدرس‌دهی ۴ گیگابایت قرار گیرد. بخش کد همچنان باید در فضای آدرس‌دهی ۱۶ مگابایت باشد. .IP \fBlarge\fR 4 .IX Item "large" همه بخش‌های داده و کد می‌توانند در فضای آدرس‌دهی ۴ گیگابایت قرار گیرند. .RE .RS 4 .RE .IP \fB\-mctor\-dtor\fR 4 .IX Item "-mctor-dtor" قابلیت سازنده/ویرانگر (constructor/destructor) را فعال می‌کند. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" پیونددهنده (linker) را برای تخفیف (relax) دستورالعمل‌ها هدایت می‌کند. .PP \fIگزینه‌های Nvidia PTX\fR .IX Subsection "Nvidia PTX Options" .PP این گزینه‌ها برای Nvidia PTX تعریف شده‌اند: .IP \fB\-m64\fR 4 .IX Item "-m64" نادیده گرفته می‌شود، اما برای سازگاری عقبروی حفظ شده است. تنها ABI شصت و چهار بیتی پشتیبانی می‌شود. .IP \fB\-march=\fR\fIarchitecture\-string\fR 4 .IX Item "-march=architecture-string" تولید کد برای معماری مقصد PTX ISA مشخص‌شده. رشته‌های معماری معتبر عبارتند از: \&\fBsm_30\fR، \fBsm_35\fR، \fBsm_37\fR، \&\fBsm_52\fR، \fBsm_53\fR، \&\fBsm_61\fR، \&\fBsm_70\fR، \fBsm_75\fR، \&\fBsm_80\fR، و \fBsm_89\fR. مقدار پیش‌فرض بستگی به نحوه پیکربندی کامپایلر دارد، به \&\fB\-\-with\-arch\fR مراجعه کنید. .Sp این گزینه مقدار ماکروی پیش‌پردازنده \&\f(CW\*(C`_\|_PTX_SM_\|_\*(C'\fR را تنظیم می‌کند؛ به عنوان مثال، برای \fBsm_35\fR مقدار \&\fB350\fR را دارد. .IP \fB\-misa=\fR\fIarchitecture\-string\fR 4 .IX Item "-misa=architecture-string" نام مستعار \fB\-march=\fR. .IP \fB\-march\-map=\fR\fIarchitecture\-string\fR 4 .IX Item "-march-map=architecture-string" نزدیک‌ترین مقدار ممکن برای \fB\-march=\fR را انتخاب می‌کند که توانمندتر از مقدار مشخص‌شده نباشد. برای نمونه، برای \fB\-march\-map=sm_50\fR مقدار \&\fB\-march=sm_37\fR و برای \fB\-march\-map=sm_53\fR مقدار \&\fB\-march=sm_53\fR انتخاب می‌شود. .IP \fB\-mptx=\fR\fIversion\-string\fR 4 .IX Item "-mptx=version-string" تولید کد برای نسخه مشخص‌شده PTX ISA. رشته‌های نسخه معتبر عبارتند از: \&\fB3.1\fR، \&\fB4.1\fR، \fB4.2\fR، \&\fB5.0\fR، \&\fB6.0\fR، \fB6.3\fR، \&\fB7.0\fR، \fB7.3\fR، و \fB7.8\fR. نسخه پیش‌فرض PTX ISA نسخه‌ای است که پشتیبانی از معماری مقصد PTX ISA انتخاب‌شده را افزوده است (به \fB\-march=\fR مراجعه کنید)، اما دست‌کم \fB6.3\fR، یا برای \fB\-march=sm_52\fR و بالاتر حداقل \fB7.3\fR خواهد بود. .Sp این گزینه مقادیر ماکروهای پیش‌پردازنده \&\f(CW\*(C`_\|_PTX_ISA_VERSION_MAJOR_\|_\*(C'\fR و \f(CW\*(C`_\|_PTX_ISA_VERSION_MINOR_\|_\*(C'\fR را تعیین می‌کند؛ به عنوان مثال، برای \fB3.1\fR این ماکروها به ترتیب مقادیر \fB3\fR و \&\fB1\fR را خواهند داشت. .IP \fB\-mmainkernel\fR 4 .IX Item "-mmainkernel" کد مورد نیاز برای یک کرنل _\|_main را پیوند می‌دهد. این مورد برای اجرای مستقل (stand\-alone) به جای اجرای باراندازی‌شده (offloading) به کار می‌رود. .IP \fB\-moptimize\fR 4 .IX Item "-moptimize" بهینه‌سازی‌های اجرای تفکیک‌شده (partitioned execution) را اعمال می‌کند. در صورت انتخاب هر سطحی از بهینه‌سازی، این گزینه به عنوان پیش‌فرض فعال است. .IP \fB\-msoft\-stack\fR 4 .IX Item "-msoft-stack" .PD 0 .IP \fB\-mno\-soft\-stack\fR 4 .IX Item "-mno-soft-stack" .PD در صورت استفاده از \fB\-mno\-soft\-stack\fR (حالت پیش‌فرض، مگر آنکه \fB\-mgomp\fR مشخص شده باشد)، از پشته‌های «محلی» (native) در PTX استفاده می‌شود، یعنی کدی تولید می‌شود که از حافظه \f(CW\*(C`.local\*(C'\fR یا دستور \f(CW\*(C`alloca\*(C'\fR در PTX به صورت مستقیم برای ذخیره‌سازی پشته استفاده می‌کند. مگر اینکه \fB\-mptx=7.3\fR یا بالاتر و \fB\-march=sm_52\fR یا بالاتر فعال باشند، آرایه‌های با طول متغیر و تخصیص پویای حافظه روی پشته با استفاده از \f(CW\*(C`alloca\*(C'\fR پشتیبانی نمی‌شوند. .Sp در صورت استفاده از \fB\-msoft\-stack\fR (که توسط \fB\-mgomp\fR به طور ضمنی اعمال می‌شود)، کدی تولید می‌شود که از حافظه \f(CW\*(C`.local\*(C'\fR یا دستور \f(CW\*(C`alloca\*(C'\fR در PTX به صورت مستقیم برای ذخیره‌سازی پشته استفاده نمی‌کند. در عوض، یک اشاره‌گر پشته به ازای هر warp به صورت صریح نگهداری می‌شود. این کار امکان تخصیص پشته با طول متغیر (با آرایه‌های با طول متغیر یا \f(CW\*(C`alloca\*(C'\fR) را فراهم می‌آورد، و هنگامی که از حافظه سراسری (global memory) برای ذخیره‌سازی پایه‌ای استفاده شود، دسترسی به متغیرهای خودکار را از طریق سایر رشته‌ها یا با دستورالعمل‌های اتمیک ممکن می‌سازد. این شیوه تولید کد برای باراندازی (offloading) در OpenMP استفاده می‌شود، اما این گزینه به منظور آزمایش کامپایلر به صورت مجزا نیز در دسترس قرار گرفته است؛ برای تولید کد مناسب جهت پیوند در برنامه‌هایی که از باراندازی OpenMP استفاده می‌کنند، گزینه \fB\-mgomp\fR را به کار ببرید. .IP \fB\-muniform\-simt\fR 4 .IX Item "-muniform-simt" به شیوه تولید کدی تغییر وضعیت می‌دهد که به تمام رشته‌ها در هر warp اجازه اجرا می‌دهد، در حالی که وضعیت حافظه و عوارض جانبی را طوری حفظ می‌کند که گویی تنها یک رشته در هر warp در خارج از نواحی OpenMP SIMD فعال است. تمام عملیات‌های اتمیک و فراخوانی‌های زمان اجرا (مانند malloc، free، vprintf) به صورت مشروط اجرا می‌شوند (تنها در صورتی که شاخص lane جاری با شاخص lane اصلی برابر باشد)، و ثباتی که مقداردهی می‌شود، از طریق دستورالعمل shuffle از lane اصلی کپی می‌شود. در خارج از نواحی SIMD، مقدار lane 0 به عنوان اصلی عمل می‌کند؛ در درون آن، هر رشته خود را به عنوان اصلی تلقی می‌کند. آرایه حافظه اشتراکی \f(CW\*(C`int _\|_nvptx_uni[]\*(C'\fR ماسک‌های بیتی سراسر-صفر یا سراسر-یک را برای هر warp نگهداری می‌کند که نشان‌دهنده حالت فعلی است (۰ در خارج از نواحی SIMD). هر رشته می‌تواند ماسک بیتی واقع در موقعیت \f(CW\*(C`tid.y\*(C'\fR را با شاخص lane جاری AND بیتی کند تا شاخص lane اصلی محاسبه شود..IP \fB\-mgomp\fR 4 .IX Item "-mgomp" تولید کد برای استفاده در برون‌سپاری محاسبات به OpenMP: گزینه‌های \fB\-msoft\-stack\fR و \&\fB\-muniform\-simt\fR را فعال کرده و گونهٔ چندکتابخانه‌ای (multilib) متناظر را برمی‌گزیند. .PP \fIگزینه‌های OpenRISC\fR .IX Subsection "OpenRISC Options" .PP این گزینه‌ها برای OpenRISC تعریف شده‌اند: .IP \fB\-mboard=\fR\fIname\fR 4 .IX Item "-mboard=name" پیکربندی محیط زمان اجرای ویژهٔ برد. این مقدار برای پیوند زدن کتابخانهٔ برد newlib به پیونددهنده ارسال خواهد شد. پیش‌فرض \f(CW\*(C`or1ksim\*(C'\fR است. .IP \fB\-mnewlib\fR 4 .IX Item "-mnewlib" این گزینه نادیده گرفته می‌شود؛ و صرفاً برای اهداف سازگاری است. این گزینه قبلاً گزینه‌های پیونددهنده و پیش‌پردازنده را برای استفاده با newlib انتخاب می‌کرد. .IP \fB\-msoft\-div\fR 4 .IX Item "-msoft-div" .PD 0 .IP \fB\-mhard\-div\fR 4 .IX Item "-mhard-div" .PD انتخاب دستورالعمل‌های تقسیم نرم‌افزاری یا سخت‌افزاری (\f(CW\*(C`l.div\*(C'\fR، \f(CW\*(C`l.divu\*(C'\fR). پیش‌فرض، تقسیم سخت‌افزاری است. .IP \fB\-msoft\-mul\fR 4 .IX Item "-msoft-mul" .PD 0 .IP \fB\-mhard\-mul\fR 4 .IX Item "-mhard-mul" .PD انتخاب دستورالعمل‌های ضرب نرم‌افزاری یا سخت‌افزاری (\f(CW\*(C`l.mul\*(C'\fR، \f(CW\*(C`l.muli\*(C'\fR). پیش‌فرض، ضرب سخت‌افزاری است. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD 0 .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD انتخاب حالت نرم‌افزاری یا سخت‌افزاری برای عملیات ممیز شناور. پیش‌فرض، نرم‌افزاری است. .IP \fB\-mdouble\-float\fR 4 .IX Item "-mdouble-float" هنگامی که \fB\-mhard\-float\fR انتخاب شده باشد، تولید دستورالعمل‌های ممیز شناور با دقت مضاعف (double\-precision) را فعال می‌کند. به‌طور پیش‌فرض از توابع موجود در \fIlibgcc\fR برای انجام عملیات‌های ممیز شناور با دقت مضاعف استفاده می‌شود. .IP \fB\-munordered\-float\fR 4 .IX Item "-munordered-float" هنگامی که \fB\-mhard\-float\fR انتخاب شده باشد، تولید دستورالعمل‌های مقایسهٔ نامرتب ممیز شناور و تنظیم پرچم (\f(CW\*(C`lf.sfun*\*(C'\fR) را فعال می‌کند. به‌طور پیش‌فرض از توابع موجود در \fIlibgcc\fR برای انجام عملیات مقایسهٔ نامرتب ممیز شناور و تنظیم پرچم استفاده می‌شود. .IP \fB\-mcmov\fR 4 .IX Item "-mcmov" فعال‌سازی تولید دستورالعمل‌های انتقال شرطی (\f(CW\*(C`l.cmov\*(C'\fR). به‌طور پیش‌فرض معادل آن با استفاده از تنظیم و پرش (set and branch) تولید خواهد شد. .IP \fB\-mror\fR 4 .IX Item "-mror" فعال‌سازی تولید دستورالعمل‌های چرخش به راست (\f(CW\*(C`l.ror\*(C'\fR). به‌طور پیش‌فرض از توابع \fIlibgcc\fR برای انجام عملیات‌های چرخش به راست استفاده می‌شود. .IP \fB\-mrori\fR 4 .IX Item "-mrori" فعال‌سازی تولید دستورالعمل‌های چرخش به راست با مقدار بی‌واسطه (\f(CW\*(C`l.rori\*(C'\fR). به‌طور پیش‌فرض از توابع \fIlibgcc\fR برای انجام عملیات چرخش به راست با مقدار بی‌واسطه استفاده می‌شود. .IP \fB\-msext\fR 4 .IX Item "-msext" فعال‌سازی تولید دستورالعمل‌های بسط علامت (\f(CW\*(C`l.ext*\*(C'\fR). به‌طور پیش‌فرض از بارگذاری‌های حافظه برای انجام بسط علامت استفاده می‌شود. .IP \fB\-msfimm\fR 4 .IX Item "-msfimm" فعال‌سازی تولید دستورالعمل‌های مقایسه و تنظیم پرچم با مقدار بی‌واسطه (\f(CW\*(C`l.sf*i\*(C'\fR). به‌طور پیش‌فرض دستورالعمل‌های اضافه‌ای تولید می‌شوند تا ابتدا مقدار بی‌واسطه را در یک ثبات ذخیره کنند. .IP \fB\-mshftimm\fR 4 .IX Item "-mshftimm" فعال‌سازی تولید دستورالعمل‌های شیفت با مقدار بی‌واسطه (\f(CW\*(C`l.srai\*(C'\fR، \f(CW\*(C`l.srli\*(C'\fR، \&\f(CW\*(C`l.slli\*(C'\fR). به‌طور پیش‌فرض دستورالعمل‌های اضافه‌ای تولید می‌شوند تا ابتدا مقدار بی‌واسطه را در یک ثبات ذخیره کنند. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" تولید کد OpenRISC برای مدل کوچک (small): جدول GOT به 64k محدود است. این مدل پیش‌فرض است. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" تولید کد OpenRISC برای مدل بزرگ (large): اندازهٔ جدول GOT می‌تواند تا 4G رشد کند. .PP \fIگزینه‌های PDP\-11\fR .IX Subsection "PDP-11 Options" .PP این گزینه‌ها برای PDP\-11 تعریف شده‌اند: .IP \fB\-mfpu\fR 4 .IX Item "-mfpu" استفاده از ممیز شناور سخت‌افزاری FPP. این پیش‌فرض است. (ممیز شناور FIS در PDP\-11/40 پشتیبانی نمی‌شود.) مستلزم \-m45 است. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" عدم استفاده از ممیز شناور سخت‌افزاری. .IP \fB\-mac0\fR 4 .IX Item "-mac0" بازگرداندن نتایج ممیز شناور در ac0 (در نحو اسمبلر Unix معادل fr0 است). .IP \fB\-mno\-ac0\fR 4 .IX Item "-mno-ac0" بازگرداندن نتایج ممیز شناور در حافظه. این پیش‌فرض است. .IP \fB\-m40\fR 4 .IX Item "-m40" تولید کد برای یک PDP\-11/40. مستلزم \-msoft\-float \-mno\-split است. .IP \fB\-m45\fR 4 .IX Item "-m45" تولید کد برای یک PDP\-11/45. این پیش‌فرض است. .IP \fB\-m10\fR 4 .IX Item "-m10" تولید کد برای یک PDP\-11/10. مستلزم \-msoft\-float \-mno\-split است. .IP \fB\-mint16\fR 4 .IX Item "-mint16" .PD 0 .IP \fB\-mno\-int32\fR 4 .IX Item "-mno-int32" .PD استفاده از \f(CW\*(C`int\*(C'\fR ۱۶\-بیتی. این پیش‌فرض است. .IP \fB\-mint32\fR 4 .IX Item "-mint32" .PD 0 .IP \fB\-mno\-int16\fR 4 .IX Item "-mno-int16" .PD استفاده از \f(CW\*(C`int\*(C'\fR ۳۲\-بیتی. .IP \fB\-msplit\fR 4 .IX Item "-msplit" مقصد دارای فضای دستورالعمل و دادهٔ تفکیک‌شده (split) است. مستلزم \-m45 است. .IP \fB\-munix\-asm\fR 4 .IX Item "-munix-asm" استفاده از نحو اسمبلر Unix. .IP \fB\-mdec\-asm\fR 4 .IX Item "-mdec-asm" استفاده از نحو اسمبلر DEC. .IP \fB\-mgnu\-asm\fR 4 .IX Item "-mgnu-asm" استفاده از نحو اسمبلر GNU. این پیش‌فرض است. .IP \fB\-mlra\fR 4 .IX Item "-mlra" استفاده از تخصیص‌دهندهٔ جدید ثبات LRA. به‌طور پیش‌فرض، تخصیص‌دهندهٔ قدیمی \(lqreload\(rq به کار می‌رود. .PP \fIگزینه‌های PowerPC\fR .IX Subsection "PowerPC Options" .PP این موارد در بخش زیر فهرست شده‌اند .PP \fIگزینه‌های PRU\fR .IX Subsection "PRU Options" .PP این گزینه‌های خط فرمان برای معماری مقصد PRU تعریف شده‌اند: .IP \fB\-minrt\fR 4 .IX Item "-minrt" پیوند با حداقل محیط زمان اجرا. این کار می‌تواند اندازهٔ باینری نهایی ELF را به طور چشمگیری کاهش دهد، اما برخی از ویژگی‌های استاندارد زمان اجرای C حذف می‌شوند. .Sp این گزینه پشتیبانی از مقداردهنده‌های اولیه و سازنده‌های ایستا را غیرفعال می‌کند. آگاه باشید که کامپایلر همچنان ممکن است کدی با مقداردهنده‌های اولیه و سازنده‌های ایستا تولید کند. این وظیفه برنامه‌نویس است که اطمینان حاصل کند برنامهٔ مبدأ از این قابلیت‌ها استفاده نمی‌کند. .Sp کد راه‌اندازی حداقلی آرگومان‌های \f(CW\*(C`argc\*(C'\fR و \f(CW\*(C`argv\*(C'\fR را به \f(CW\*(C`main\*(C'\fR منتقل نمی‌کند، بنابراین تابع اخیر باید به صورت \f(CW\*(C`int main (void)\*(C'\fR اعلان شود. این موضوع در اکثر پروژه‌های سفت‌افزار (firmware) یک قاعدهٔ معمول است. .IP \fB\-mmcu=\fR\fImcu\fR 4 .IX Item "-mmcu=mcu" گونهٔ سخت‌افزاری PRU مورد استفاده را مشخص می‌کند. یک پروندهٔ مشخصات (spec) با نام متناظر بارگذاری خواهد شد که اندازه‌های ناحیهٔ حافظه را به پیونددهنده ارسال کرده و ماکروهای C ویژهٔ سخت‌افزار را تعریف می‌کند. .Sp کتابخانهٔ Newlib تنها مشخصهٔ \f(CW\*(C`sim\*(C'\fR را فراهم می‌کند که برای اجرای آزمون‌های پس‌رفت (regression) با استفاده از یک شبیه‌ساز در نظر گرفته شده است. مشخصات مربوط به سخت‌افزار واقعی را می‌توان با نصب بستهٔ GnuPruMcu (\f(CW\*(C`https://github.com/dinuxbg/gnuprumcu\*(C'\fR) به دست آورد. .IP \fB\-mno\-relax\fR 4 .IX Item "-mno-relax" باعث می‌شود GCC به‌جای گزینهٔ \fB\-\-relax\fR، گزینهٔ خط فرمان \fB\-\-no\-relax\fR را به پیونددهنده ارسال کند..IP \fB\-mloop\fR 4 .IX Item "-mloop" به GCC اجازه می‌دهد (یا نمی‌دهد) که از دستورالعمل LOOP استفاده کند. .IP \fB\-mabi=\fR\fIvariant\fR 4 .IX Item "-mabi=variant" گونهٔ ABI را برای تولید کد خروجی مشخص می‌کند. گزینهٔ \fB\-mabi=ti\fR گونهٔ دست‌نخوردهٔ TI ABI را انتخاب می‌کند، در حالی که \fB\-mabi=gnu\fR گونه‌ای از GNU را برمی‌گزیند که با فرضیات خاص GCC سازگاری طبیعی‌تری دارد. تفاوت‌ها از این قرارند: .RS 4 .IP "\fBاندازهٔ اشاره‌گر تابع\fR" 4 .IX Item "Function Pointer Size" مشخصات TI ABI تعیین می‌کند که اشاره‌گرهای تابع (کد) ۱۶ بیتی هستند، در حالی که GNU فقط از اشاره‌گرهای داده و کد ۳۲ بیتی پشتیبانی می‌کند. .IP "\fBاشاره‌گر اختیاری مقدار بازگشتی\fR" 4 .IX Item "Optional Return Value Pointer" مقادیر بازگشتی تابع که بزرگ‌تر از ۶۴ بیت باشند، با استفاده از یک اشاره‌گر پنهان به عنوان نخستین آرگومان تابع ارسال می‌شوند. با این حال، TI ABI الزامی می‌کند که اگر فراخواننده از مقدار بازگشتی استفاده نکند، این اشاره‌گر می‌تواند NULL باشد. GNU همواره یک اشاره‌گر معتبر برای مقدار بازگشتی ارسال کرده و انتظار دارد. .RE .RS 4 .Sp پیاده‌سازی فعلی \fB\-mabi=ti\fR هنگام شناسایی هر یک از ساختارهای کد بالا، صرفاً یک خطای کامپایل ایجاد می‌کند. در نتیجه، کتابخانهٔ استاندارد C قابل ساخت نبوده و هنگام پیوند دادن (link) با \&\fB\-mabi=ti\fR کنار گذاشته می‌شود. .Sp ویژگی Relaxation قابلیتی در GNU است و به دلایل ایمنی هنگام استفاده از \&\fB\-mabi=ti\fR غیرفعال می‌شود. زنجیره ابزار TI بازنشانی‌ها (relocations) را برای دستورالعمل‌های QBBx تولید نمی‌کند، بنابراین پیونددهندهٔ GNU هنگام کوتاه کردن دستورالعمل‌های شبه‌کد LDI32 مجاور، نمی‌تواند آن‌ها را تطبیق دهد. .RE .PP \fIگزینه‌های RISC\-V\fR .IX Subsection "RISC-V Options" .PP این گزینه‌های خط فرمان برای مقصدهای RISC\-V تعریف شده‌اند: .IP \fB\-mbranch\-cost=\fR\fIn\fR 4 .IX Item "-mbranch-cost=n" هزینهٔ انشعاب‌ها را تقریباً برابر با \fIn\fR دستورالعمل تعیین می‌کند. .IP \fB\-mplt\fR 4 .IX Item "-mplt" .PD 0 .IP \fB\-mno\-plt\fR 4 .IX Item "-mno-plt" .PD هنگام تولید کد PIC، اجازهٔ استفاده از PLTها را می‌دهد یا نمی‌دهد. برای کدهای غیر PIC نادیده گرفته می‌شود. مقدار پیش‌فرض \fB\-mplt\fR است. .IP \fB\-mabi=\fR\fIABI\-string\fR 4 .IX Item "-mabi=ABI-string" قرارداد فراخوانی اعداد صحیح و ممیز شناور را مشخص می‌کند. رشتهٔ \fIABI\-string\fR شامل دو بخش است: اندازهٔ انواع صحیح، و ثبات‌های مورد استفاده برای انواع ممیز شناور. برای نمونه، \fB\-march=rv64ifd \-mabi=lp64d\fR به این معناست که \&\fBlong\fR و اشاره‌گرها ۶۴ بیتی هستند (که به‌طور ضمنی \fBint\fR را ۳۲ بیتی تعریف می‌کند)، و مقادیر ممیز شناور تا پهنای ۶۴ بیت در ثبات‌های F منتقل می‌شوند. این را مقایسه کنید با \fB\-march=rv64ifd \-mabi=lp64f\fR، که همچنان به کامپایلر اجازه می‌دهد کدی تولید کند که از افزونه‌های F و D استفاده می‌کند، اما تنها به مقادیر ممیز شناور با طول حداکثر ۳۲ بیت اجازهٔ انتقال در ثبات‌ها را می‌دهد؛ یا \&\fB\-march=rv64ifd \-mabi=lp64\fR، که در آن هیچ آرگومان ممیز شناوری در ثبات‌ها منتقل نخواهد شد. .Sp پیش‌فرض این آرگومان وابسته به سیستم است؛ کاربرانی که خواهان قرارداد فراخوانی خاصی هستند باید آن را صراحتاً مشخص کنند. قراردادهای فراخوانی معتبر عبارتند از: \fBilp32\fR، \fBilp32f\fR، \fBilp32d\fR، \fBlp64\fR، \&\fBlp64f\fR و \fBlp64d\fR. پیاده‌سازی برخی از قراردادهای فراخوانی روی بعضی از ISAها غیرممکن است: برای نمونه، \fB\-march=rv32if \-mabi=ilp32d\fR نامعتبر است زیرا این ABI الزامی می‌کند مقادیر ۶۴ بیتی در ثبات‌های F منتقل شوند، در حالی که ثبات‌های F تنها ۳۲ بیت پهنا دارند. همچنین ABIهای \fBilp32e\fR وجود دارند که فقط با معماری \fBrv32e\fR قابل استفاده‌اند و \fBlp64e\fR که فقط با \fBrv64e\fR می‌تواند استفاده شود. این ABIها در حال حاضر به‌خوبی استانداردسازی نشده‌اند و دستخوش تغییر هستند. .IP \fB\-mfdiv\fR 4 .IX Item "-mfdiv" .PD 0 .IP \fB\-mno\-fdiv\fR 4 .IX Item "-mno-fdiv" .PD از دستورالعمل‌های سخت‌افزاری تقسیم و جذر ممیز شناور استفاده می‌کند یا نمی‌کند. این امر نیازمند افزونه‌های F یا D برای ثبات‌های ممیز شناور است. حالت پیش‌فرض در صورتی که معماری مشخص‌شده دارای این دستورالعمل‌ها باشد، استفاده از آن‌هاست. .IP \fB\-mfence\-tso\fR 4 .IX Item "-mfence-tso" .PD 0 .IP \fB\-mno\-fence\-tso\fR 4 .IX Item "-mno-fence-tso" .PD از دستورالعمل \fBfence.tso\fR استفاده می‌کند یا نمی‌کند؛ این دستورالعمل در برخی پردازنده‌ها (از جمله پردازنده‌های شرکت T\-Head) پیاده‌سازی نشده است. اگر دستورالعمل \fBfence.tso\fR در دسترس نباشد، به‌جای آن از یک fence قوی‌تر استفاده می‌شود. .IP \fB\-mdiv\fR 4 .IX Item "-mdiv" .PD 0 .IP \fB\-mno\-div\fR 4 .IX Item "-mno-div" .PD از دستورالعمل‌های سخت‌افزاری برای تقسیم اعداد صحیح استفاده می‌کند یا نمی‌کند. این امر نیازمند افزونهٔ M است. حالت پیش‌فرض در صورتی که معماری مشخص‌شده دارای این دستورالعمل‌ها باشد، استفاده از آن‌هاست. .IP \fB\-misa\-spec=\fR\fIISA\-spec\-string\fR 4 .IX Item "-misa-spec=ISA-spec-string" نسخهٔ مشخصات ISA غیرممتاز RISC\-V (پیش‌تر سطح کاربر یا User\-Level) را مشخص می‌کند تا کد مطابق با آن تولید شود. مقادیر ممکن برای \fIISA\-spec\-string\fR عبارتند از: .RS 4 .ie n .IP 2.2 4 .el .IP \f(CW2.2\fR 4 .IX Item "2.2" تولید کد منطبق بر نسخهٔ 2.2. .ie n .IP 20190608 4 .el .IP \f(CW20190608\fR 4 .IX Item "20190608" تولید کد منطبق بر نسخهٔ 20190608. .ie n .IP 20191213 4 .el .IP \f(CW20191213\fR 4 .IX Item "20191213" تولید کد منطبق بر نسخهٔ 20191213. .RE .RS 4 .Sp پیش‌فرض \fB\-misa\-spec=20191213\fR است، مگر آنکه GCC با گزینهٔ \fB\-\-with\-isa\-spec=\fR برای تعیین نسخهٔ پیش‌فرض متفاوتی پیکربندی شده باشد. .RE .IP \fB\-march=\fR\fIISA\-string\fR 4 .IX Item "-march=ISA-string" برای ISA مشخص‌شدهٔ RISC\-V (مانند \fBrv64im\fR) کد تولید می‌کند. رشته‌های ISA باید با حروف کوچک باشند. نمونه‌ها شامل \fBrv64i\fR، \fBrv32g\fR، \fBrv32e\fR و \&\fBrv32imaf\fR هستند. علاوه بر این، مقدار ویژهٔ \fBhelp\fR (\fB\-march=help\fR) برای فهرست کردن تمام افزونه‌های پشتیبانی‌شده پذیرفته می‌شود. .Sp نحو رشتهٔ ISA به صورت زیر تعریف می‌شود: .RS 4 .ie n .IP """رشته باید با \fBrv32\fR یا \fBrv64\fR آغاز شود، و به دنبال آن""" 4 .el .IP "\f(CWرشته باید با \fR\f(CBrv32\fR\f(CW یا \fR\f(CBrv64\fR\f(CW آغاز شود، و به دنبال آن\fR" 4 .IX Item "The string must start with rv32 or rv64, followed by" \&\fBi\fR، \fBe\fR، یا \fBg\fR بیاید، که به عنوان ISA پایه نامیده می‌شود. .ie n .IP """بخش بعدی رشته، فهرستی از نام‌های افزونه است. نام‌های""" 4 .el .IP "\f(CWبخش بعدی رشته، فهرستی از نام‌های افزونه است. نام‌های\fR" 4 .IX Item "The subsequent part of the string is a list of extension names. Extension" افزونه می‌توانند به صورت چندحرفی (مانند \fBzba\fR) و تک‌حرفی (مانند \fBv\fR) دسته‌بندی شوند. افزونه‌های تک‌حرفی می‌توانند پشت سر هم ظاهر شوند، اما افزونه‌های چندحرفی باید با زیرخط (underscore) از یکدیگر جدا شوند. .ie n .IP """یک خط زیر (underscore) می‌تواند در هر جایی پس از ISA پایه بیاید. این نویسه اثر""" 4 .el .IP "\f(CWیک خط زیر (underscore) می‌تواند در هر جایی پس از ISA پایه بیاید. این نویسه اثر\fR" 4 .IX Item "An underscore can appear anywhere after the base ISA. It has no specific" خاصی ندارد، اما برای بهبود خوانایی استفاده می‌شود و می‌تواند به عنوان یک جداکننده عمل کند. .ie n .IP """نام‌های افزونه ممکن است شامل یک شماره نسخهٔ اختیاری باشند، که از ساختار""" 4 .el .IP "\f(CWنام‌های افزونه ممکن است شامل یک شماره نسخهٔ اختیاری باشند، که از ساختار\fR" 4 .IX Item "Extension names may include an optional version number, following the" نحوی \fBp\fR یا \fB\fR پیروی می‌کند (مانند \fBm2p1\fR یا \&\fBm2\fR). .RE .RS 4 .Sp افزونه‌های پشتیبانی‌شده در زیر فهرست شده‌اند: .IP "\fIنام افزونه\fR : \fIنسخهٔ پشتیبانی‌شده\fR : \fIتوضیحات\fR" 4 .IX Item "Extension Name : Supported Version : Description" .PD 0 .IP i 4 .IX Item "i" .PD \&\f(CW@tab\fR 2.0, 2.1 \&\f(CW@tab\fR افزونهٔ پایهٔ اعداد صحیح. .IP e 4 .IX Item "e" \&\f(CW@tab\fR 2.0 \&\f(CW@tab\fR افزونهٔ پایهٔ کاهش‌یافتهٔ اعداد صحیح. .IP g 4 .IX Item "g" \&\f(CW@tab\fR \- \&\f(CW@tab\fR افزونهٔ پایهٔ محاسبات همه‌منظوره؛ \fBg\fR به \&\fBi\fR، \fBm\fR، \fBa\fR، \fBf\fR، \fBd\fR، \fBzicsr\fR و \&\fBzifencei\fR گسترش می‌یابد. .IP m 4 .IX Item "m" \&\f(CW@tab\fR 2.0 \&\f(CW@tab\fR افزونهٔ ضرب و تقسیم اعداد صحیح. .IP a 4 .IX Item "a" \&\f(CW@tab\fR 2.0, 2.1 \&\f(CW@tab\fR افزونهٔ اتمیک..IP f 4 .IX Item "f" \&\f(CW@tab\fR 2.0, 2.2 \&\f(CW@tab\fR افزونهٔ ممیز شناور با دقت یگانه. .IP d 4 .IX Item "d" \&\f(CW@tab\fR 2.0, 2.2 \&\f(CW@tab\fR افزونهٔ ممیز شناور با دقت مضاعف. .IP c 4 .IX Item "c" \&\f(CW@tab\fR 2.0 \&\f(CW@tab\fR افزونهٔ فشرده. .IP h 4 .IX Item "h" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ هایپروایزر. .IP v 4 .IX Item "v" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری. .IP zicsr 4 .IX Item "zicsr" \&\f(CW@tab\fR 2.0 \&\f(CW@tab\fR افزونهٔ دسترسی به ثبات کنترل و وضعیت. .IP zifencei 4 .IX Item "zifencei" \&\f(CW@tab\fR 2.0 \&\f(CW@tab\fR افزونهٔ سد واکشی دستورالعمل. .IP zicond 4 .IX Item "zicond" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ عملیات‌های شرطی عدد صحیح. .IP za64rs 4 .IX Item "za64rs" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR اندازهٔ مجموعهٔ رزرو ۶۴ بایت. .IP za128rs 4 .IX Item "za128rs" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR اندازهٔ مجموعهٔ رزرو ۱۲۸ بایت. .IP zawrs 4 .IX Item "zawrs" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ درنگ روی مجموعهٔ رزرو. .IP zba 4 .IX Item "zba" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ محاسبات آدرس. .IP zbb 4 .IX Item "zbb" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ دستکاری بیت پایه. .IP zbc 4 .IX Item "zbc" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ضرب بدون رقم نقلی. .IP zbs 4 .IX Item "zbs" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ عملیات تک‌بیتی. .IP zfinx 4 .IX Item "zfinx" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ممیز شناور با دقت یگانه در ثبات‌های عدد صحیح. .IP zdinx 4 .IX Item "zdinx" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ممیز شناور با دقت مضاعف در ثبات‌های عدد صحیح. .IP zhinx 4 .IX Item "zhinx" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ممیز شناور با نیم‌دقت در ثبات‌های عدد صحیح. .IP zhinxmin 4 .IX Item "zhinxmin" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ممیز شناور حداقلی با نیم‌دقت در ثبات‌های عدد صحیح. .IP zbkb 4 .IX Item "zbkb" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ دستکاری بیت برای رمزنگاری. .IP zbkc 4 .IX Item "zbkc" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ضرب بدون رقم نقلی برای رمزنگاری. .IP zbkx 4 .IX Item "zbkx" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ جایگشت متقاطع برای رمزنگاری. .IP zkne 4 .IX Item "zkne" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ رمزگذاری AES. .IP zknd 4 .IX Item "zknd" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ رمزگشایی AES. .IP zknh 4 .IX Item "zknh" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ تابع درهم‌سازی. .IP zkr 4 .IX Item "zkr" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ منبع آنتروپی. .IP zksed 4 .IX Item "zksed" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ رمز قالبی SM4. .IP zksh 4 .IX Item "zksh" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ تابع درهم‌سازی SM3. .IP zkt 4 .IX Item "zkt" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ زمان اجرای مستقل از داده. .IP zk 4 .IX Item "zk" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ استاندارد رمزنگاری اسکالر. .IP zkn 4 .IX Item "zkn" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ مجموعه الگوریتم‌های NIST. .IP zks 4 .IX Item "zks" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ مجموعه الگوریتم‌های ShangMi. .IP zihintntl 4 .IX Item "zihintntl" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ راهنماهای محلی‌بودن غیرزمانی. .IP zihintpause 4 .IX Item "zihintpause" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ راهنمای مکث. .IP zicboz 4 .IX Item "zicboz" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ صفرسازی بلوک حافظهٔ نهان. .IP zicbom 4 .IX Item "zicbom" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ مدیریت بلوک حافظهٔ نهان. .IP zicbop 4 .IX Item "zicbop" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ پیش‌واکشی بلوک حافظهٔ نهان. .IP zic64b 4 .IX Item "zic64b" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR اندازهٔ بلوک حافظهٔ نهان ۶۴ بایت است. .IP ziccamoa 4 .IX Item "ziccamoa" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR حافظهٔ اصلی از تمام عملیات‌های اتمی در A پشتیبانی می‌کند. .IP ziccif 4 .IX Item "ziccif" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR حافظهٔ اصلی از واکشی دستورالعمل با نیازمندی اتمی‌بودن پشتیبانی می‌کند. .IP zicclsm 4 .IX Item "zicclsm" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR حافظهٔ اصلی از بارگذاری‌ها/ذخیره‌سازی‌های غیرهم‌تراز پشتیبانی می‌کند. .IP ziccrse 4 .IX Item "ziccrse" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR حافظهٔ اصلی از پیشرفت رو به جلو در توالی‌های LR/SC پشتیبانی می‌کند. .IP zicntr 4 .IX Item "zicntr" \&\f(CW@tab\fR 2.0 \&\f(CW@tab\fR افزونهٔ استاندارد برای شمارنده‌ها و زمان‌سنج‌های پایه. .IP zihpm 4 .IX Item "zihpm" \&\f(CW@tab\fR 2.0 \&\f(CW@tab\fR افزونهٔ استاندارد برای شمارنده‌های عملکرد سخت‌افزاری. .IP ztso 4 .IX Item "ztso" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ترتیب کلی ذخیره‌سازی..IP zve32x 4 .IX Item "zve32x" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های برداری برای پردازنده‌های تعبیه‌شده. .IP zve32f 4 .IX Item "zve32f" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های برداری برای پردازنده‌های تعبیه‌شده. .IP zve64x 4 .IX Item "zve64x" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های برداری برای پردازنده‌های تعبیه‌شده. .IP zve64f 4 .IX Item "zve64f" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های برداری برای پردازنده‌های تعبیه‌شده. .IP zve64d 4 .IX Item "zve64d" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های برداری برای پردازنده‌های تعبیه‌شده. .IP zvl32b 4 .IX Item "zvl32b" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های استاندارد کمینهٔ طول بردار. .IP zvl64b 4 .IX Item "zvl64b" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های استاندارد کمینهٔ طول بردار. .IP zvl128b 4 .IX Item "zvl128b" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های استاندارد کمینهٔ طول بردار. .IP zvl256b 4 .IX Item "zvl256b" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های استاندارد کمینهٔ طول بردار. .IP zvl512b 4 .IX Item "zvl512b" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های استاندارد کمینهٔ طول بردار. .IP zvl1024b 4 .IX Item "zvl1024b" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های استاندارد کمینهٔ طول بردار. .IP zvl2048b 4 .IX Item "zvl2048b" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های استاندارد کمینهٔ طول بردار. .IP zvl4096b 4 .IX Item "zvl4096b" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های استاندارد کمینهٔ طول بردار. .IP zvbb 4 .IX Item "zvbb" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری دستکاری بیتی پایه. .IP zvbc 4 .IX Item "zvbc" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری ضرب بدون رقم نقلی. .IP zvkb 4 .IX Item "zvkb" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری دستکاری بیتی رمزنگاری. .IP zvkg 4 .IX Item "zvkg" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری GCM/GMAC. .IP zvkned 4 .IX Item "zvkned" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری رمز قالبی AES. .IP zvknha 4 .IX Item "zvknha" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری درهم‌سازی امن SHA\-2. .IP zvknhb 4 .IX Item "zvknhb" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری درهم‌سازی امن SHA\-2. .IP zvksed 4 .IX Item "zvksed" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری رمز قالبی SM4. .IP zvksh 4 .IX Item "zvksh" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری درهم‌سازی امن SM3. .IP zvkn 4 .IX Item "zvkn" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری مجموعه الگوریتم NIST؛ \fBzvkn\fR به \&\fBzvkned\fR، \fBzvknhb\fR، \fBzvkb\fR و \fBzvkt\fR بسط می‌یابد. .IP zvknc 4 .IX Item "zvknc" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری مجموعه الگوریتم NIST با ضرب بدون رقم نقلی؛ \fBzvknc\fR به \fBzvkn\fR و \fBzvbc\fR بسط می‌یابد. .IP zvkng 4 .IX Item "zvkng" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری مجموعه الگوریتم NIST با GCM؛ \fBzvkng\fR به \fBzvkn\fR و \fBzvkg\fR بسط می‌یابد. .IP zvks 4 .IX Item "zvks" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری مجموعه الگوریتم ShangMi؛ \fBzvks\fR به \&\fBzvksed\fR، \fBzvksh\fR، \fBzvkb\fR و \fBzvkt\fR بسط می‌یابد. .IP zvksc 4 .IX Item "zvksc" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری مجموعه الگوریتم ShangMi با ضرب بدون رقم نقلی؛ \&\fBzvksc\fR به \fBzvks\fR و \fBzvbc\fR بسط می‌یابد. .IP zvksg 4 .IX Item "zvksg" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری مجموعه الگوریتم ShangMi با GCM؛ \fBzvksg\fR به \&\fBzvks\fR و \fBzvkg\fR بسط می‌یابد. .IP zvkt 4 .IX Item "zvkt" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری تأخیر اجرای مستقل از داده. .IP zfh 4 .IX Item "zfh" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ممیز شناور با دقت نیمه. .IP zfhmin 4 .IX Item "zfhmin" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ کمینهٔ ممیز شناور با دقت نیمه. .IP zvfh 4 .IX Item "zvfh" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری ممیز شناور با دقت نیمه. .IP zvfhmin 4 .IX Item "zvfhmin" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری کمینهٔ ممیز شناور با دقت نیمه. .IP zvfbfmin 4 .IX Item "zvfbfmin" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری تبدیل‌های BF16. .IP zfa 4 .IX Item "zfa" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ممیز شناور اضافی. .IP zmmul 4 .IX Item "zmmul" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ضرب عدد صحیح. .IP zca 4 .IX Item "zca" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ دستورهای فشردهٔ عدد صحیح. .IP zcf 4 .IX Item "zcf" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ بارگذاری‌ها و ذخیره‌سازی‌های فشردهٔ ممیز شناور با دقت یگانه. .IP zcd 4 .IX Item "zcd" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ بارگذاری‌ها و ذخیره‌سازی‌های فشردهٔ ممیز شناور با دقت دوگانه. .IP zcb 4 .IX Item "zcb" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ دستورهای فشردهٔ ساده. .IP zce 4 .IX Item "zce" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونه‌های دستورهای فشرده برای پردازنده‌های تعبیه‌شده. .IP zcmp 4 .IX Item "zcmp" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ push و pop فشرده. .IP zcmt 4 .IX Item "zcmt" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ دستور پرش جدول. .IP smaia 4 .IX Item "smaia" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ معماری وقفهٔ پیشرفته..IP smepmp 4 .IX Item "smepmp" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR بهبودهای PMP برای دسترسی به حافظه و جلوگیری از اجرا در Machine mode. .IP smstateen 4 .IX Item "smstateen" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ فعال‌سازی وضعیت (State enable). .IP ssaia 4 .IX Item "ssaia" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ معماری پیشرفتهٔ وقفه برای supervisor\-mode. .IP sscofpmf 4 .IX Item "sscofpmf" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ شمارش سرریز و فیلترگذاری. .IP ssstateen 4 .IX Item "ssstateen" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ فعال‌سازی وضعیت برای supervisor\-mode. .IP sstc 4 .IX Item "sstc" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ وقفه‌های زمان‌سنج supervisor\-mode. .IP svinval 4 .IX Item "svinval" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ابطال دقیق حافظهٔ پنهانِ ترجمهٔ آدرس (Fine\-grained). .IP svnapot 4 .IX Item "svnapot" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ پیوستگی ترجمهٔ NAPOT. .IP svpbmt 4 .IX Item "svpbmt" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ انواع حافظهٔ مبتنی بر صفحه. .IP xcvmac 4 .IX Item "xcvmac" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ضرب و انباشت (multiply\-accumulate) در Core\-V. .IP xcvalu 4 .IX Item "xcvalu" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ عملیات متفرقهٔ ALU در Core\-V. .IP xcvelw 4 .IX Item "xcvelw" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ بارگذاری کلمهٔ رخداد (event load word) در Core\-V. .IP xtheadba 4 .IX Item "xtheadba" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ محاسبهٔ آدرس T\-head. .IP xtheadbb 4 .IX Item "xtheadbb" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ پایه‌ای دستکاری بیت T\-head. .IP xtheadbs 4 .IX Item "xtheadbs" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ دستورالعمل‌های تک‌بیتی T\-head. .IP xtheadcmo 4 .IX Item "xtheadcmo" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ عملیات مدیریت حافظهٔ پنهان T\-head. .IP xtheadcondmov 4 .IX Item "xtheadcondmov" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ انتقال شرطی T\-head. .IP xtheadfmemidx 4 .IX Item "xtheadfmemidx" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ عملیات حافظهٔ نمایه‌شده برای ثبات‌های ممیز شناور T\-head. .IP xtheadfmv 4 .IX Item "xtheadfmv" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ انتقال داده‌های بیت‌های بالایی ممیز شناور با دقت مضاعف T\-head. .IP xtheadint 4 .IX Item "xtheadint" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ شتاب‌دهی به وقفهٔ T\-head. .IP xtheadmac 4 .IX Item "xtheadmac" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ ضرب و انباشت T\-head. .IP xtheadmemidx 4 .IX Item "xtheadmemidx" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ عملیات حافظهٔ نمایه‌شدهٔ T\-head. .IP xtheadmempair 4 .IX Item "xtheadmempair" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ عملیات حافظهٔ دو\-GPR در T\-head. .IP xtheadsync 4 .IX Item "xtheadsync" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ همگام‌سازی چند‌هسته‌ای T\-head. .IP xventanacondops 4 .IX Item "xventanacondops" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ عملیات شرطی اعداد صحیح Ventana. .RE .RS 4 .Sp هنگامی که \fB\-march=\fR مشخص نشده باشد، از تنظیمات تعیین‌شده در \fB\-mcpu\fR استفاده می‌شود. .Sp اگر هر دو گزینهٔ \fB\-march\fR و \fB\-mcpu=\fR مشخص نشده باشند، مقدار پیش‌فرض این آرگومان وابسته به سیستم است؛ کاربرانی که خواهان افزونه‌های معماری خاصی هستند باید آن را به‌طور صریح مشخص کنند. .Sp هنگامی که مشخصات RISC\-V یک افزونه را وابسته به افزونه‌های دیگر تعریف کرده باشد، چنانچه این افزونه‌های وابسته به‌طور صریح اضافه نشده باشند، GCC آن‌ها را به‌طور ضمنی به مجموعه افزونه‌های فعال‌شده می‌افزاید. .RE .IP \fB\-mcpu=\fR\fIprocessor\-string\fR 4 .IX Item "-mcpu=processor-string" استفاده از معماری پردازندهٔ ارائه‌شده و بهینه‌سازی خروجی برای آن، که با نام پردازندهٔ خاص (CPU) مشخص می‌شود. مقادیر مجاز برای این گزینه عبارتند از: \fBsifive\-e20\fR، \fBsifive\-e21\fR، \&\fBsifive\-e24\fR، \fBsifive\-e31\fR، \fBsifive\-e34\fR، \fBsifive\-e76\fR، \&\fBsifive\-s21\fR، \fBsifive\-s51\fR، \fBsifive\-s54\fR، \fBsifive\-s76\fR، \&\fBsifive\-u54\fR، \fBsifive\-u74\fR، \fBsifive\-x280\fR، \fBsifive\-xp450\fR، \&\fBsifive\-x670\fR، \fBthead\-c906\fR، \fBtt\-ascalon\-d8\fR، \&\fBxiangshan\-nanhu\fR. .Sp توجه داشته باشید که \fB\-mcpu\fR گزینه‌های \fB\-march\fR یا \fB\-mtune\fR را لغو و بازنویسی نمی‌کند. .IP \fB\-mtune=\fR\fIprocessor\-string\fR 4 .IX Item "-mtune=processor-string" بهینه‌سازی خروجی برای پردازندهٔ ارائه‌شده، که بر اساس ریزمعماری یا نام پردازندهٔ خاص مشخص می‌شود. مقادیر مجاز برای این گزینه عبارتند از: \&\fBgeneric\-ooo\fR، \fBrocket\fR، \fBsifive\-3\-series\fR، \&\fBsifive\-5\-series\fR، \fBsifive\-7\-series\fR، \fBsize\fR، \&\fBsifive\-p400\-series\fR، \fBsifive\-p600\-series\fR و تمام گزینه‌های معتبر برای \&\fB\-mcpu=\fR. .Sp هنگامی که \fB\-mtune=\fR مشخص نشده باشد، از تنظیمات \fB\-mcpu\fR استفاده می‌شود؛ در صورتی که هیچ‌کدام مشخص نشده باشند، پیش‌فرض \fBrocket\fR است. .Sp انتخاب \fBsize\fR برای استفاده توسط کاربران نهایی در نظر گرفته نشده است. این مورد زمانی استفاده می‌شود که \fB\-Os\fR مشخص شده باشد. این انتخاب اطلاعات هزینهٔ دستورالعمل‌ها را که توسط \fB\-mtune=\fR ارائه می‌شود بازنویسی می‌کند، اما اطلاعات خط لوله (pipeline) را بازنویسی نمی‌کند. این قابلیت به کاهش حجم کد ضمن حفظ عملکرد مناسب کمک می‌کند. .IP \fB\-mpreferred\-stack\-boundary=\fR\fInum\fR 4 .IX Item "-mpreferred-stack-boundary=num" تلاش برای نگه‌داشتن تراز مرز پشته بر روی مرز ۲ به توان \fInum\fR بایت. اگر \fB\-mpreferred\-stack\-boundary\fR مشخص نشده باشد، مقدار پیش‌فرض 4 است (۱۶ بایت یا ۱۲۸ بیت). .Sp \&\fBهشدار:\fR اگر از این گزینه استفاده می‌کنید، باید تمام پودمان‌ها از جمله هرگونه کتابخانه را با همین مقدار بسازید. این امر شامل کتابخانه‌های سیستم و پودمان‌های راه‌اندازی (startup) نیز می‌شود. .IP \fB\-msmall\-data\-limit=\fR\fIn\fR 4 .IX Item "-msmall-data-limit=n" قرار دادن داده‌های سراسری و ایستا که کوچک‌تر از \fIn\fR بایت هستند در یک بخش (section) ویژه (در برخی هدف‌ها). .IP \fB\-msave\-restore\fR 4 .IX Item "-msave-restore" .PD 0 .IP \fB\-mno\-save\-restore\fR 4 .IX Item "-mno-save-restore" .PD استفاده یا عدم استفاده از کد کوچک‌تر اما کندترِ مقدمه (prologue) و مؤخره (epilogue) که از فراخوانی توابع کتابخانه‌ای بهره می‌برد. مقدار پیش‌فرض استفاده از مقدمه و مؤخره‌های سریعِ درون‌خطی (inline) است. .IP \fB\-mmovcc\fR 4 .IX Item "-mmovcc" .PD 0 .IP \fB\-mno\-movcc\fR 4 .IX Item "-mno-movcc" .PD تولید یا عدم تولید توالی‌های کدِ انتقال شرطی بدون انشعاب (branchless)، حتی در هدف‌هایی که دستورالعمل‌های خاصی برای عملیات شرطی ندارند. در صورت فعال بودن، در جاهایی که سودمند باشد توالی‌هایی از عملیات ALU با استفاده از دستورالعمل‌های پایهٔ عدد صحیح ISA تولید می‌شود. .IP \fB\-minline\-atomics\fR 4 .IX Item "-minline-atomics" .PD 0 .IP \fB\-mno\-inline\-atomics\fR 4 .IX Item "-mno-inline-atomics" .PD استفاده یا عدم استفاده از کد کوچک‌تر اما کندترِ شبیه‌سازی اتمیک زیرکلمه (subword atomic) که از فراخوانی توابع libatomic استفاده می‌کند. پیش‌فرض، استفاده از عملیات اتمیک زیرکلمهٔ سریع درون‌خطی است که نیازی به libatomic ندارند..IP \fB\-minline\-strlen\fR 4 .IX Item "-minline-strlen" .PD 0 .IP \fB\-mno\-inline\-strlen\fR 4 .IX Item "-mno-inline-strlen" .PD تلاش برای درون‌خطی‌سازی فراخوانی‌های strlen در صورت امکان، یا عدم انجام آن. درون‌خطی‌سازی تنها زمانی انجام می‌شود که رشته به‌درستی تراز شده باشد و دستورالعمل‌های پردازش شتاب‌یافته در دسترس باشند. حالت پیش‌فرض، درون‌خطی نکردن فراخوانی‌های strlen است. .IP \fB\-minline\-strcmp\fR 4 .IX Item "-minline-strcmp" .PD 0 .IP \fB\-mno\-inline\-strcmp\fR 4 .IX Item "-mno-inline-strcmp" .PD تلاش برای درون‌خطی‌سازی فراخوانی‌های strcmp در صورت امکان، یا عدم انجام آن. درون‌خطی‌سازی تنها زمانی انجام می‌شود که رشته‌ها به‌درستی تراز شده باشند و دستورالعمل‌های پردازش شتاب‌یافته در دسترس باشند. حالت پیش‌فرض، درون‌خطی نکردن فراخوانی‌های strcmp است. .Sp پارامتر \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR حداکثر تعداد بایت‌های مقایسه‌شده توسط کد درون‌خطی را کنترل می‌کند. مقدار پیش‌فرض 64 است. .IP \fB\-minline\-strncmp\fR 4 .IX Item "-minline-strncmp" .PD 0 .IP \fB\-mno\-inline\-strncmp\fR 4 .IX Item "-mno-inline-strncmp" .PD تلاش برای درون‌خطی‌سازی فراخوانی‌های strncmp در صورت امکان، یا عدم انجام آن. درون‌خطی‌سازی تنها زمانی انجام می‌شود که رشته‌ها به‌درستی تراز شده باشند و دستورالعمل‌های پردازش شتاب‌یافته در دسترس باشند. حالت پیش‌فرض، درون‌خطی نکردن فراخوانی‌های strncmp است. .Sp پارامتر \fB\-\-param riscv\-strcmp\-inline\-limit=\fR\fIn\fR حداکثر تعداد بایت‌های مقایسه‌شده توسط کد درون‌خطی را کنترل می‌کند. مقدار پیش‌فرض 64 است. .IP \fB\-mshorten\-memrefs\fR 4 .IX Item "-mshorten-memrefs" .PD 0 .IP \fB\-mno\-shorten\-memrefs\fR 4 .IX Item "-mno-shorten-memrefs" .PD تلاش برای استفاده بیشتر از دستورالعمل‌های بارگذاری/ذخیره‌سازی (load/store) فشرده‌شده، یا عدم انجام آن، با جایگزین کردن یک بارگذاری/ذخیره از نوع \*(Aqbase register + large offset\*(Aq با یک بارگذاری/ذخیره جدید از نوع \*(Aqnew base + small offset\*(Aq. اگر پایه جدید در یک ثبات فشرده‌شده ذخیره شود، آن‌گاه بارگذاری/ذخیره جدید می‌تواند فشرده شود. در حال حاضر فقط بارگذاری/ذخیره‌سازی‌های عدد صحیح ۳۲ بیتی را هدف قرار می‌دهد. .IP \fB\-mstrict\-align\fR 4 .IX Item "-mstrict-align" .PD 0 .IP \fB\-mno\-strict\-align\fR 4 .IX Item "-mno-strict-align" .PD تولید نکردن یا تولید کردن دسترسی‌های حافظه ناتراز. حالت پیش‌فرض بسته به این‌که پردازنده‌ای که برای آن بهینه‌سازی می‌کنیم از دسترسی سریع ناتراز پشتیبانی می‌کند یا خیر تعیین می‌شود. .IP \fB\-mscalar\-strict\-align\fR 4 .IX Item "-mscalar-strict-align" .PD 0 .IP \fB\-mno\-scalar\-strict\-align\fR 4 .IX Item "-mno-scalar-strict-align" .PD تولید نکردن یا تولید کردن دسترسی‌های حافظه ناتراز. حالت پیش‌فرض بسته به این‌که پردازنده‌ای که برای آن بهینه‌سازی می‌کنیم از دسترسی سریع ناتراز پشتیبانی می‌کند یا خیر تعیین می‌شود. این یک نام مستعار برای \fB\-mstrict\-align\fR است. .IP \fB\-mvector\-strict\-align\fR 4 .IX Item "-mvector-strict-align" .PD 0 .IP \fB\-mno\-vector\-strict\-align\fR 4 .IX Item "-mno-vector-strict-align" .PD تولید نکردن یا تولید کردن دسترسی‌های برداری ناتراز به حافظه. مقدار پیش‌فرض غیرفعال است، مگر این‌که پردازنده‌ای که برای آن بهینه‌سازی می‌کنیم صراحتاً از دسترسی برداری به حافظه با عناصر ناتراز پشتیبانی کند. .IP \fB\-mcmodel=medlow\fR 4 .IX Item "-mcmodel=medlow" تولید کد برای مدل کد medium\-low. برنامه و نمادهای تعریف‌شده به‌صورت ایستا باید در یک بازه آدرس ۲ گیبی‌بایتی (2 GiB) قرار بگیرند و باید بین آدرس‌های مطلق \-2 GiB و +2 GiB باشند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. این مدل کد پیش‌فرض است مگر این‌که GCC با گزینه \fB\-\-with\-cmodel=\fR مشخص‌کننده یک مدل کد پیش‌فرض دیگر پیکربندی شده باشد. .IP \fB\-mcmodel=medany\fR 4 .IX Item "-mcmodel=medany" تولید کد برای مدل کد medium\-any. برنامه و نمادهای تعریف‌شده به‌صورت ایستا باید در هر بازه آدرس منفرد ۲ گیبی‌بایتی قرار بگیرند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. .Sp کد تولیدشده توسط مدل کد medium\-any مستقل از موقعیت است، اما تضمین نمی‌شود هنگام پیوند در فایل‌های اجرایی یا کتابخانه‌های مستقل از موقعیت به‌درستی کار کند. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" تولید کد برای مدل کد بزرگ (large)، که هیچ محدودیتی در اندازه یا جایابی نمادها ندارد. .IP \fB\-mexplicit\-relocs\fR 4 .IX Item "-mexplicit-relocs" .PD 0 .IP \fB\-mno\-exlicit\-relocs\fR 4 .IX Item "-mno-exlicit-relocs" .PD استفاده یا عدم استفاده از عملگرهای بازآرایی اسمبلر هنگام کار با آدرس‌های نمادین. روش جایگزین، استفاده از ماکروهای اسمبلر است که ممکن است بهینه‌سازی را محدود کند. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" .PD 0 .IP \fB\-mno\-relax\fR 4 .IX Item "-mno-relax" .PD بهره‌گیری از ساده‌سازی‌های پیونددهنده (linker relaxations) برای کاهش تعداد دستورالعمل‌های مورد نیاز جهت تحقق آدرس‌های نمادین. حالت پیش‌فرض، بهره‌گیری از ساده‌سازی‌های پیونددهنده است. .IP \fB\-mriscv\-attribute\fR 4 .IX Item "-mriscv-attribute" .PD 0 .IP \fB\-mno\-riscv\-attribute\fR 4 .IX Item "-mno-riscv-attribute" .PD درج کردن (درج نکردن) مشخصه RISC\-V برای ثبت اطلاعات اضافی در اشیاء ELF. این قابلیت حداقل به binutils 2.32 نیاز دارد. .IP \fB\-mcsr\-check\fR 4 .IX Item "-mcsr-check" .PD 0 .IP \fB\-mno\-csr\-check\fR 4 .IX Item "-mno-csr-check" .PD بررسی CSR را فعال یا غیرفعال می‌کند. .IP \fB\-malign\-data=\fR\fItype\fR 4 .IX Item "-malign-data=type" کنترل نحوه تراز کردن متغیرها و مقادیر ثابت انواع آرایه، ساختار یا اجتماع توسط GCC. مقادیر پشتیبانی‌شده برای \fItype\fR عبارتند از \fBxlen\fR که از عرض ثبات x به‌عنوان مقدار تراز استفاده می‌کند، و \fBnatural\fR که از تراز طبیعی بهره می‌برد. \&\fBxlen\fR مقدار پیش‌فرض است. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد با ترتیب بایت بزرگ‌پایان (big\-endian). این حالت پیش‌فرض است زمانی که GCC برای یک هدف \fBriscv64be\-*\-*\fR یا \fBriscv32be\-*\-*\fR پیکربندی شده باشد. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد با ترتیب بایت کوچک‌پایان (little\-endian). این حالت پیش‌فرض است زمانی که GCC برای یک هدف \fBriscv64\-*\-*\fR یا \fBriscv32\-*\-*\fR پیکربندی شده باشد اما برای اهداف \fBriscv64be\-*\-*\fR یا \fBriscv32be\-*\-*\fR نباشد. .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4 .IX Item "-mstack-protector-guard=guard" .PD 0 .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4 .IX Item "-mstack-protector-guard-reg=reg" .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4 .IX Item "-mstack-protector-guard-offset=offset" .PD تولید کد محافظت از پشته با استفاده از قناری در \fIguard\fR. مکان‌های پشتیبانی‌شده عبارتند از \fBglobal\fR برای یک قناری سراسری یا \fBtls\fR برای قناری به ازای هر رشته در بلوک TLS. .Sp با انتخاب حالت دوم، گزینه‌های \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR و \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR علاوه بر این مشخص می‌کنند که از کدام ثبات به‌عنوان ثبات پایه برای خواندن قناری استفاده شود، و از چه آفستی نسبت به آن ثبات پایه. هیچ ثبات یا آفست پیش‌فرضی وجود ندارد چرا که این گزینه کاملاً برای استفاده درون هسته لینوکس در نظر گرفته شده است. .IP \fB\-mtls\-dialect=desc\fR 4 .IX Item "-mtls-dialect=desc" استفاده از توصیف‌کننده‌های TLS به عنوان سازوکار ذخیره‌سازی محلی رشته (TLS) برای دسترسی‌های پویا به متغیرهای TLS. .IP \fB\-mtls\-dialect=trad\fR 4 .IX Item "-mtls-dialect=trad" استفاده از TLS سنتی به عنوان سازوکار ذخیره‌سازی محلی رشته برای دسترسی‌های پویا به متغیرهای TLS. این مقدار پیش‌فرض است. .PP \fIگزینه‌های RL78\fR .IX Subsection "RL78 Options" .IP \fB\-msim\fR 4 .IX Item "-msim" کتابخانه‌های هدف اضافی را برای پشتیبانی از عملکرد درون یک شبیه‌ساز پیوند می‌دهد. .IP \fB\-mmul=none\fR 4 .IX Item "-mmul=none".PD 0 .IP \fB\-mmul=g10\fR 4 .IX Item "-mmul=g10" .IP \fB\-mmul=g13\fR 4 .IX Item "-mmul=g13" .IP \fB\-mmul=g14\fR 4 .IX Item "-mmul=g14" .IP \fB\-mmul=rl78\fR 4 .IX Item "-mmul=rl78" .PD نوع پشتیبانی سخت‌افزاری از ضرب و تقسیم را برای استفاده مشخص می‌کند. ساده‌ترین حالت \f(CW\*(C`none\*(C'\fR است که از نرم‌افزار برای هر دو عمل ضرب و تقسیم بهره می‌برد. این حالت پیش‌فرض است. مقدار \f(CW\*(C`g13\*(C'\fR مربوط به جانبی سخت‌افزاری ضرب/تقسیم موجود در اهداف RL78/G13 (هسته S2) است. مقدار \f(CW\*(C`g14\*(C'\fR استفاده از دستورالعمل‌های ضرب و تقسیم پشتیبانی‌شده توسط قطعات RL78/G14 (هسته S3) را انتخاب می‌کند. مقدار \f(CW\*(C`rl78\*(C'\fR نام مستعاری برای \f(CW\*(C`g14\*(C'\fR و مقدار \f(CW\*(C`mg10\*(C'\fR نام مستعاری برای \f(CW\*(C`none\*(C'\fR است. .Sp علاوه بر این، بر اساس تنظیم این گزینه یک ماکروی پیش‌پردازندهٔ C تعریف می‌شود. مقادیر ممکن عبارتند از: \f(CW\*(C`_\|_RL78_MUL_NONE_\|_\*(C'\fR، \&\f(CW\*(C`_\|_RL78_MUL_G13_\|_\*(C'\fR یا \f(CW\*(C`_\|_RL78_MUL_G14_\|_\*(C'\fR. .IP \fB\-mcpu=g10\fR 4 .IX Item "-mcpu=g10" .PD 0 .IP \fB\-mcpu=g13\fR 4 .IX Item "-mcpu=g13" .IP \fB\-mcpu=g14\fR 4 .IX Item "-mcpu=g14" .IP \fB\-mcpu=rl78\fR 4 .IX Item "-mcpu=rl78" .PD هستهٔ RL78 هدف را مشخص می‌کند. پیش‌فرض هستهٔ G14 است که به عنوان هستهٔ S3 یا صرفاً RL78 نیز شناخته می‌شود. هستهٔ G13 یا S2 دستورالعمل‌های ضرب یا تقسیم ندارد، بلکه برای این عملیات از یک جانبی سخت‌افزاری استفاده می‌کند. هستهٔ G10 یا S1 فاقد بانک‌های ثبات است، بنابراین از یک قرارداد فراخوانی (calling convention) متفاوت استفاده می‌کند. .Sp اگر این گزینه تنظیم شود، نوع پشتیبانی ضرب سخت‌افزاری مورد استفاده را نیز مشخص می‌کند، مگر اینکه با یک گزینهٔ صریح \&\fB\-mmul=none\fR در خط فرمان لغو شود. بدین ترتیب، مشخص کردن \&\fB\-mcpu=g13\fR استفاده از جانبی سخت‌افزاری ضرب G13 را فعال می‌کند و مشخص کردن \fB\-mcpu=g10\fR استفاده از ضرب‌های سخت‌افزاری را به‌طور کامل غیرفعال می‌سازد. .Sp توجه داشته باشید گرچه هستهٔ RL78/G14 هدف پیش‌فرض است، مشخص کردن \&\fB\-mcpu=g14\fR یا \fB\-mcpu=rl78\fR در خط فرمان رفتار زنجیره‌ابزار را تغییر می‌دهد چرا که پشتیبانی ضرب سخت‌افزاری G14 را نیز فعال می‌کند. اگر این گزینه‌ها در خط فرمان مشخص نشوند، حتی با وجود اینکه کد هستهٔ RL78 را هدف قرار می‌دهد، از روتین‌های ضرب نرم‌افزاری استفاده خواهد شد. این امر به منظور سازگاری پس‌رو با زنجیره‌ابزارهای قدیمی‌تر است که پشتیبانی ضرب و تقسیم سخت‌افزاری را نداشتند. .Sp علاوه بر این، بر اساس تنظیم این گزینه یک ماکروی پیش‌پردازندهٔ C تعریف می‌شود. مقادیر ممکن عبارتند از: \f(CW\*(C`_\|_RL78_G10_\|_\*(C'\fR، \&\f(CW\*(C`_\|_RL78_G13_\|_\*(C'\fR یا \f(CW\*(C`_\|_RL78_G14_\|_\*(C'\fR. .IP \fB\-mg10\fR 4 .IX Item "-mg10" .PD 0 .IP \fB\-mg13\fR 4 .IX Item "-mg13" .IP \fB\-mg14\fR 4 .IX Item "-mg14" .IP \fB\-mrl78\fR 4 .IX Item "-mrl78" .PD این‌ها نام‌های مستعاری برای گزینهٔ متناظر \fB\-mcpu=\fR هستند. آن‌ها برای سازگاری پس‌رو ارائه شده‌اند. .IP \fB\-mallregs\fR 4 .IX Item "-mallregs" به کامپایلر اجازه می‌دهد از همهٔ ثبات‌های در دسترس استفاده کند. به‌طور پیش‌فرض ثبات‌های \f(CW\*(C`r24..r31\*(C'\fR برای استفاده در گرداننده‌های وقفه رزرو شده‌اند. با فعال بودن این گزینه، این ثبات‌ها می‌توانند در توابع معمولی نیز استفاده شوند. .IP \fB\-m64bit\-doubles\fR 4 .IX Item "-m64bit-doubles" .PD 0 .IP \fB\-m32bit\-doubles\fR 4 .IX Item "-m32bit-doubles" .PD اندازه نوع دادهٔ \f(CW\*(C`double\*(C'\fR را ۶۴ بیت (\fB\-m64bit\-doubles\fR) یا ۳۲ بیت (\fB\-m32bit\-doubles\fR) قرار می‌دهد. پیش‌فرض \&\fB\-m32bit\-doubles\fR است. .IP \fB\-msave\-mduc\-in\-interrupts\fR 4 .IX Item "-msave-mduc-in-interrupts" .PD 0 .IP \fB\-mno\-save\-mduc\-in\-interrupts\fR 4 .IX Item "-mno-save-mduc-in-interrupts" .PD مشخص می‌کند که توابع گردانندهٔ وقفه باید ثبات‌های MDUC را حفظ کنند. این امر تنها در صورتی ضروری است که کدهای عادی ممکن است از ثبات‌های MDUC استفاده کنند، برای مثال به این دلیل که عملیات ضرب و تقسیم را انجام می‌دهند. پیش‌فرض نادیده گرفتن ثبات‌های MDUC است زیرا این کار گرداننده‌های وقفه را سریع‌تر می‌کند. برای کارکرد این قابلیت باید گزینهٔ هدف \-mg13 ارسال شود چرا که این ویژگی تنها روی هدف G13 (هسته S2) در دسترس است. ثبات‌های MDUC تنها در صورتی ذخیره خواهند شد که گردانندهٔ وقفه یک عملیات ضرب یا تقسیم انجام دهد یا تابع دیگری را فراخوانی کند. .PP \fIگزینه‌های IBM RS/6000 و PowerPC\fR .IX Subsection "IBM RS/6000 and PowerPC Options" .PP این گزینه‌های \fB\-m\fR برای IBM RS/6000 و PowerPC تعریف شده‌اند: .IP \fB\-mpowerpc\-gpopt\fR 4 .IX Item "-mpowerpc-gpopt" .PD 0 .IP \fB\-mno\-powerpc\-gpopt\fR 4 .IX Item "-mno-powerpc-gpopt" .IP \fB\-mpowerpc\-gfxopt\fR 4 .IX Item "-mpowerpc-gfxopt" .IP \fB\-mno\-powerpc\-gfxopt\fR 4 .IX Item "-mno-powerpc-gfxopt" .IP \fB\-mpowerpc64\fR 4 .IX Item "-mpowerpc64" .IP \fB\-mno\-powerpc64\fR 4 .IX Item "-mno-powerpc64" .IP \fB\-mmfcrf\fR 4 .IX Item "-mmfcrf" .IP \fB\-mno\-mfcrf\fR 4 .IX Item "-mno-mfcrf" .IP \fB\-mpopcntb\fR 4 .IX Item "-mpopcntb" .IP \fB\-mno\-popcntb\fR 4 .IX Item "-mno-popcntb" .IP \fB\-mpopcntd\fR 4 .IX Item "-mpopcntd" .IP \fB\-mno\-popcntd\fR 4 .IX Item "-mno-popcntd" .IP \fB\-mfprnd\fR 4 .IX Item "-mfprnd" .IP \fB\-mno\-fprnd\fR 4 .IX Item "-mno-fprnd" .IP \fB\-mcmpb\fR 4 .IX Item "-mcmpb" .IP \fB\-mno\-cmpb\fR 4 .IX Item "-mno-cmpb" .IP \fB\-mhard\-dfp\fR 4 .IX Item "-mhard-dfp" .IP \fB\-mno\-hard\-dfp\fR 4 .IX Item "-mno-hard-dfp" .PD شما از این گزینه‌ها برای مشخص کردن این‌که کدام دستورالعمل‌ها روی پردازندهٔ مورد استفاده شما در دسترس هستند، بهره می‌برید. مقدار پیش‌فرض این گزینه‌ها هنگام پیکربندی GCC تعیین می‌شود. مشخص کردن \&\fB\-mcpu=\fR\fIcpu_type\fR مشخصات این گزینه‌ها را لغو می‌کند. توصیه می‌کنیم به جای گزینه‌های فهرست‌شده در بالا از گزینهٔ \fB\-mcpu=\fR\fIcpu_type\fR استفاده کنید. .Sp مشخص کردن \fB\-mpowerpc\-gpopt\fR به GCC اجازه می‌دهد از دستورالعمل‌های اختیاری معماری PowerPC در گروه کاربرد عمومی (General Purpose)، از جمله جذر ممیز شناور استفاده کند. مشخص کردن \&\fB\-mpowerpc\-gfxopt\fR به GCC امکان می‌دهد از دستورالعمل‌های اختیاری معماری PowerPC در گروه گرافیک، از جمله انتخاب ممیز شناور استفاده کند. .Sp گزینهٔ \fB\-mmfcrf\fR به GCC اجازه می‌دهد دستورالعمل «انتقال از فیلد ثبات وضعیت» (move from condition register field) را که روی پردازندهٔ POWER4 و دیگر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.01 پیاده‌سازی شده است، تولید کند. گزینهٔ \fB\-mpopcntb\fR به GCC اجازه می‌دهد دستورالعمل popcount و تخمین معکوس ممیز شناور با دقت مضاعف را که روی پردازندهٔ POWER5 و دیگر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.02 پیاده‌سازی شده است، تولید کند. گزینهٔ \fB\-mpopcntd\fR به GCC اجازه می‌دهد دستورالعمل popcount را که روی پردازندهٔ POWER7 و دیگر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.06 پیاده‌سازی شده است، تولید کند. گزینهٔ \fB\-mfprnd\fR به GCC اجازه می‌دهد دستورالعمل‌های گرد کردن ممیز شناور به عدد صحیح را که روی پردازندهٔ +POWER5 و دیگر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.03 پیاده‌سازی شده است، تولید کند. گزینهٔ \fB\-mcmpb\fR به GCC اجازه می‌دهد دستورالعمل مقایسهٔ بایت‌ها را که روی پردازندهٔ POWER6 و دیگر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.05 پیاده‌سازی شده است، تولید کند. گزینهٔ \fB\-mhard\-dfp\fR به GCC اجازه می‌دهد دستورالعمل‌های ممیز شناور ده‌دهی را که روی برخی پردازنده‌های POWER پیاده‌سازی شده است، تولید کند. .Sp گزینهٔ \fB\-mpowerpc64\fR به GCC امکان می‌دهد دستورالعمل‌های ۶۴ بیتی اضافی موجود در معماری کامل PowerPC64 را تولید کند و با ثبات‌های همه‌منظوره (GPRها) به عنوان مقادیر ۶۴ بیتی و کلمه‌مضاعف (doubleword) رفتار کند. پیش‌فرض GCC گزینهٔ \&\fB\-mno\-powerpc64\fR است..IP \fB\-mcpu=\fR\fIcpu_type\fR 4 .IX Item "-mcpu=cpu_type" تنظیم نوع معماری، نحوهٔ استفاده از ثبات‌ها، و پارامترهای زمان‌بندی دستورالعمل‌ها برای نوع ماشین \fIcpu_type\fR. مقادیر پشتیبانی‌شده برای \fIcpu_type\fR عبارتند از \fB401\fR، \fB403\fR، \&\fB405\fR، \fB405fp\fR، \fB440\fR، \fB440fp\fR، \fB464\fR، \fB464fp\fR، \&\fB476\fR، \fB476fp\fR، \fB505\fR، \fB601\fR، \fB602\fR، \fB603\fR، \&\fB603e\fR، \fB604\fR، \fB604e\fR، \fB620\fR، \fB630\fR، \fB740\fR، \&\fB7400\fR، \fB7450\fR، \fB750\fR، \fB801\fR، \fB821\fR، \fB823\fR، \&\fB860\fR، \fB970\fR، \fB8540\fR، \fBa2\fR، \fBe300c2\fR، \&\fBe300c3\fR، \fBe500mc\fR، \fBe500mc64\fR، \fBe5500\fR، \&\fBe6500\fR، \fBec603e\fR، \fBG3\fR، \fBG4\fR، \fBG5\fR، \&\fBtitan\fR، \fBpower3\fR، \fBpower4\fR، \fBpower5\fR، \fBpower5+\fR، \&\fBpower6\fR، \fBpower6x\fR، \fBpower7\fR، \fBpower8\fR، \&\fBpower9\fR، \fBpower10\fR، \fBpower11\fR، \fBpowerpc\fR، \fBpowerpc64\fR، \&\fBpowerpc64le\fR، \fBrs64\fR، و \fBnative\fR. .Sp گزینه‌های \fB\-mcpu=powerpc\fR، \fB\-mcpu=powerpc64\fR، و \&\fB\-mcpu=powerpc64le\fR انواع ماشین با معماری PowerPC خالص ۳۲\-بیتی (هر ترتیب بایتی)، PowerPC ۶۴\-بیتی big endian و PowerPC ۶۴\-بیتی little endian را مشخص می‌کنند، که یک مدل پردازندهٔ عمومی و مناسب برای اهداف زمان‌بندی برای آن‌ها فرض می‌شود. .Sp مشخص کردن \fBnative\fR به عنوان نوع پردازنده، گزینهٔ معماری مربوط به پردازندهٔ میزبان سامانهٔ انجام‌دهندهٔ کامپایل را شناسایی و انتخاب می‌کند. اگر GCC پردازنده را شناسایی نکند، \fB\-mcpu=native\fR هیچ اثری ندارد. .Sp گزینه‌های دیگر یک پردازندهٔ خاص را مشخص می‌کنند. کدی که تحت این گزینه‌ها تولید می‌شود روی همان پردازنده بهترین اجرا را دارد و ممکن است روی پردازنده‌های دیگر اصلاً اجرا نشود. .Sp گزینه‌های \fB\-mcpu\fR به‌طور خودکار گزینه‌های زیر را فعال یا غیرفعال می‌کنند: .Sp \&\fB\-maltivec \-mfprnd \-mhard\-float \-mmfcrf \-mmultiple \&\-mpopcntb \-mpopcntd \-mpowerpc64 \&\-mpowerpc\-gpopt \-mpowerpc\-gfxopt \&\-mmulhw \-mdlmzb \-mmfpgpr \-mvsx \&\-mcrypto \-mhtm \-mpower8\-fusion \&\-mquad\-memory \-mquad\-memory\-atomic \-mfloat128 \&\-mfloat128\-hardware \-mprefixed \-mpcrel \-mmma \&\-mrop\-protect\fR .Sp گزینه‌های خاص تنظیم‌شده برای هر پردازندهٔ مشخص بین نسخه‌های مختلف کامپایلر متفاوت است، بسته به این که چه تنظیمی به نظر می‌رسد کد بهینه‌ای برای آن پردازنده تولید می‌کند؛ این لزوماً نشان‌دهندهٔ توانایی‌های واقعی سخت‌افزار نیست. اگر می‌خواهید یک گزینهٔ منفرد را روی مقدار خاصی تنظیم کنید، می‌توانید آن را پس از گزینهٔ \fB\-mcpu\fR مشخص کنید، مانند \fB\-mcpu=970 \-mno\-altivec\fR. .Sp در AIX، در حال حاضر گزینه‌های \fB\-maltivec\fR و \fB\-mpowerpc64\fR توسط گزینهٔ \fB\-mcpu\fR فعال یا غیرفعال نمی‌شوند، چرا که AIX پشتیبانی کاملی از این گزینه‌ها ندارد. اگر مطمئن هستید که در محیط شما کار خواهد کرد، همچنان می‌توانید آن‌ها را به‌طور جداگانه فعال یا غیرفعال کنید. .IP \fB\-mtune=\fR\fIcpu_type\fR 4 .IX Item "-mtune=cpu_type" پارامترهای زمان‌بندی دستورالعمل‌ها را برای نوع ماشین \fIcpu_type\fR تنظیم می‌کند، اما برخلاف \fB\-mcpu=\fR\fIcpu_type\fR نوع معماری یا نحوهٔ استفاده از ثبات‌ها را تنظیم نمی‌کند. همان مقادیر \fIcpu_type\fR که برای \fB\-mcpu\fR استفاده می‌شوند برای \fB\-mtune\fR نیز به کار می‌روند. اگر هر دو مشخص شوند، کد تولیدشده از معماری و ثبات‌های تعیین‌شده توسط \fB\-mcpu\fR استفاده می‌کند، اما پارامترهای زمان‌بندی تنظیم‌شده توسط \fB\-mtune\fR را اعمال می‌کند. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" کد PowerPC64 را برای مدل کوچک (small) تولید می‌کند: جدول TOC به 64k محدود می‌شود. .IP \fB\-mcmodel=medium\fR 4 .IX Item "-mcmodel=medium" کد PowerPC64 را برای مدل متوسط (medium) تولید می‌کند: جدول TOC و سایر داده‌های ایستا می‌توانند در مجموع تا 4G حجم داشته باشند. این پیش‌فرض برای لینوکس ۶۴\-بیتی است. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" کد PowerPC64 را برای مدل بزرگ (large) تولید می‌کند: جدول TOC می‌تواند تا حجم 4G باشد. سایر داده‌ها و کد تنها توسط فضای آدرس‌دهی ۶۴\-بیتی محدود می‌شوند. .IP \fB\-maltivec\fR 4 .IX Item "-maltivec" .PD 0 .IP \fB\-mno\-altivec\fR 4 .IX Item "-mno-altivec" .PD کدی تولید می‌کند که از دستورالعمل‌های AltiVec استفاده می‌کند (یا نمی‌کند)، و همچنین استفاده از توابع توکار (built\-in) را فعال می‌کند که اجازهٔ دسترسی مستقیم‌تر به مجموعه دستورالعمل‌های AltiVec را می‌دهند. همچنین ممکن است لازم باشد \&\fB\-mabi=altivec\fR را برای تنظیم ABI کنونی با قابلیت‌های افزودهٔ AltiVec ABI تعیین کنید. .Sp هنگامی که \fB\-maltivec\fR استفاده می‌شود، ترتیب عناصر برای توابع درونی AltiVec مانند \f(CW\*(C`vec_splat\*(C'\fR، \f(CW\*(C`vec_extract\*(C'\fR، و \f(CW\*(C`vec_insert\*(C'\fR با ترتیب عناصر آرایه متناسب با ترتیب بایت (endianness) مقصد مطابقت دارد. بدین معنا که هنگام هدف قرار دادن پلتفرم big\-endian، عنصر صفر نشان‌دهندهٔ چپ‌ترین عنصر در یک ثبات برداری است، و هنگام هدف قرار دادن پلتفرم little\-endian، عنصر صفر نشان‌دهندهٔ راست‌ترین عنصر در یک ثبات برداری است. .IP \fB\-mvrsave\fR 4 .IX Item "-mvrsave" .PD 0 .IP \fB\-mno\-vrsave\fR 4 .IX Item "-mno-vrsave" .PD تولید دستورالعمل‌های VRSAVE هنگام تولید کد AltiVec. .IP \fB\-msecure\-plt\fR 4 .IX Item "-msecure-plt" کدی تولید می‌کند که به \fBld\fR و \fBld.so\fR اجازه می‌دهد فایل‌های اجرایی و کتابخانه‌های اشتراکی را با بخش‌های غیرقابل‌اجرای \f(CW\*(C`.plt\*(C'\fR و \f(CW\*(C`.got\*(C'\fR ایجاد کنند. این یک گزینهٔ PowerPC 32\-bit SYSV ABI است. .IP \fB\-mbss\-plt\fR 4 .IX Item "-mbss-plt" کدی تولید می‌کند که از یک بخش BSS \f(CW\*(C`.plt\*(C'\fR استفاده می‌کند که \fBld.so\fR آن را پر می‌کند، و به بخش‌های \f(CW\*(C`.plt\*(C'\fR و \f(CW\*(C`.got\*(C'\fR نیاز دارد که هم قابل نوشتن و هم قابل اجرا باشند. این یک گزینهٔ PowerPC 32\-bit SYSV ABI است. .IP \fB\-msplit\-patch\-nops\fR 4 .IX Item "-msplit-patch-nops" هنگام افزودن NOPها برای یک ناحیهٔ وصله‌پذیر از طریق گزینهٔ \&\fB\-fpatchable\-function\-entry\fR، دستورهای NOP «قبل» را پیش از نقطهٔ ورود سراسری (global entry point) و NOPهای «بعد» را پس از نقطهٔ ورود محلی (local entry point) قرار می‌دهد. این کار باعث می‌شود در صورت تولید نقطهٔ ورود سراسری، توالی NOPها پشت‌سرهم نباشد. بدون این گزینه، NOPها مستقیماً قبل و بعد از نقطهٔ ورود محلی قرار می‌گیرند که آن‌ها را متوالی می‌کند اما نقطهٔ ورود سراسری و محلی را از یکدیگر دورتر می‌سازد. اگر فقط یک نقطهٔ ورود تولید شده باشد، این گزینه هیچ اثری ندارد. .IP \fB\-misel\fR 4 .IX Item "-misel" .PD 0 .IP \fB\-mno\-isel\fR 4 .IX Item "-mno-isel" .PD این سوئیچ تولید دستورالعمل‌های ISEL را فعال یا غیرفعال می‌کند. .IP \fB\-mvsx\fR 4 .IX Item "-mvsx" .PD 0 .IP \fB\-mno\-vsx\fR 4 .IX Item "-mno-vsx" .PD کدی تولید می‌کند که از دستورالعمل‌های برداری/اسکالر (VSX) استفاده می‌کند (یا نمی‌کند)، و همچنین استفاده از توابع توکار را که دسترسی مستقیم‌تر به مجموعه دستورالعمل‌های VSX را ممکن می‌سازند، فعال می‌کند. .IP \fB\-mcrypto\fR 4 .IX Item "-mcrypto" .PD 0 .IP \fB\-mno\-crypto\fR 4 .IX Item "-mno-crypto" .PD فعال کردن (یا غیرفعال کردن) استفاده از توابع توکار که اجازهٔ دسترسی مستقیم به دستورالعمل‌های رمزنگاری که در نسخهٔ 2.07 از PowerPC ISA اضافه شده‌اند را می‌دهند. .IP \fB\-mhtm\fR 4 .IX Item "-mhtm" .PD 0 .IP \fB\-mno\-htm\fR 4 .IX Item "-mno-htm" .PD فعال کردن (یا غیرفعال کردن) استفاده از توابع توکار که اجازهٔ دسترسی مستقیم به دستورالعمل‌های حافظهٔ تراکنشی سخت‌افزاری (HTM) که در نسخهٔ 2.07 از PowerPC ISA اضافه شده‌اند را می‌دهند. .IP \fB\-mpower8\-fusion\fR 4 .IX Item "-mpower8-fusion" .PD 0 .IP \fB\-mno\-power8\-fusion\fR 4 .IX Item "-mno-power8-fusion" .PD کدی تولید می‌کند که برخی از عملیات اعداد صحیح را کنار هم نگه می‌دارد (یا نگه نمی‌دارد) تا این دستورالعمل‌ها بتوانند در پردازنده‌های power8 و بعد از آن با یکدیگر ادغام شوند. .IP \fB\-mquad\-memory\fR 4 .IX Item "-mquad-memory" .PD 0 .IP \fB\-mno\-quad\-memory\fR 4 .IX Item "-mno-quad-memory" .PD کدی تولید می‌کند که از دستورالعمل‌های غیراتمیک حافظه با کلمهٔ چهارتایی (quad word) استفاده می‌کند (یا نمی‌کند). گزینهٔ \fB\-mquad\-memory\fR نیازمند استفاده از حالت ۶۴\-بیتی است..IP \fB\-mquad\-memory\-atomic\fR 4 .IX Item "-mquad-memory-atomic" .PD 0 .IP \fB\-mno\-quad\-memory\-atomic\fR 4 .IX Item "-mno-quad-memory-atomic" .PD تولید کدی که از دستورالعمل‌های حافظهٔ اتمیک چهارکلمه‌ای (quad word) استفاده می‌کند (یا نمی‌کند). گزینهٔ \fB\-mquad\-memory\-atomic\fR نیازمند استفاده از حالت 64\-bit است. .IP \fB\-mfloat128\fR 4 .IX Item "-mfloat128" .PD 0 .IP \fB\-mno\-float128\fR 4 .IX Item "-mno-float128" .PD فعال/غیرفعال کردن کلیدواژهٔ \fI_\|_float128\fR برای ممیز شناور 128 بیتی IEEE و استفاده از شبیه‌سازی نرم‌افزاری یا دستورالعمل‌های سخت‌افزاری برای ممیز شناور 128 بیتی IEEE. .Sp مجموعه دستورالعمل VSX (\fB\-mvsx\fR) برای استفاده از پشتیبانی ممیز شناور 128 بیتی IEEE باید فعال باشد. ممیز شناور 128 بیتی IEEE تنها روی Linux پشتیبانی می‌شود. .Sp مقدار پیش‌فرض برای \fB\-mfloat128\fR روی سیستم‌های PowerPC Linux با استفاده از مجموعه دستورالعمل VSX فعال، و روی سایر سیستم‌ها غیرفعال است. .Sp اگر از مجموعه دستورالعمل ISA 3.0 (\fB\-mcpu=power9\fR) روی یک سیستم ۶۴ بیتی استفاده کنید، پشتیبانی ممیز شناور 128 بیتی IEEE همچنین تولید دستورالعمل‌های سخت‌افزاری ممیز شناور 128 بیتی IEEE در ISA 3.0 را فعال خواهد کرد. در غیر این صورت، چنانچه تولید دستورالعمل‌های ISA 3.0 را مشخص نکنید یا یک سیستم ۳۲ بیتی big-endian را هدف قرار دهید، ممیز شناور 128 بیتی IEEE با شبیه‌سازی نرم‌افزاری انجام خواهد شد. .IP \fB\-mfloat128\-hardware\fR 4 .IX Item "-mfloat128-hardware" .PD 0 .IP \fB\-mno\-float128\-hardware\fR 4 .IX Item "-mno-float128-hardware" .PD فعال/غیرفعال کردن استفاده از دستورالعمل‌های سخت‌افزاری ISA 3.0 برای پشتیبانی از نوع دادهٔ \&\fI_\|_float128\fR. .Sp مقدار پیش‌فرض برای \fB\-mfloat128\-hardware\fR روی سیستم‌های PowerPC Linux با استفاده از مجموعه دستورالعمل ISA 3.0 فعال، و روی سایر سیستم‌ها غیرفعال است. .IP \fB\-m32\fR 4 .IX Item "-m32" .PD 0 .IP \fB\-m64\fR 4 .IX Item "-m64" .PD تولید کد برای محیط‌های ۳۲ بیتی یا ۶۴ بیتی مقصدهای Darwin و SVR4 (شامل GNU/Linux). محیط ۳۲ بیتی int، long و pointer را روی ۳۲ بیت تنظیم می‌کند و کدی تولید می‌کند که روی هر گونه‌ای از PowerPC اجرا می‌شود. محیط ۶۴ بیتی int را روی ۳۲ بیت و long و pointer را روی ۶۴ بیت تنظیم کرده و کدی برای PowerPC64 تولید می‌کند، مانند \&\fB\-mpowerpc64\fR. .IP \fB\-mfull\-toc\fR 4 .IX Item "-mfull-toc" .PD 0 .IP \fB\-mno\-fp\-in\-toc\fR 4 .IX Item "-mno-fp-in-toc" .IP \fB\-mno\-sum\-in\-toc\fR 4 .IX Item "-mno-sum-in-toc" .IP \fB\-mminimal\-toc\fR 4 .IX Item "-mminimal-toc" .PD تغییر شیوهٔ تولید TOC (جدول محتویات)، که برای هر فایل اجرایی ایجاد می‌شود. گزینهٔ \fB\-mfull\-toc\fR به‌طور پیش‌فرض انتخاب شده است. در این حالت، GCC حداقل یک مدخل TOC برای هر ارجاع یکتای متغیر غیرخودکار (non\-automatic) در برنامهٔ شما تخصیص می‌دهد. GCC همچنین مقادیر ثابت ممیز شناور را در TOC قرار می‌دهد. با این حال، تنها ۱۶٬۳۸۴ مدخل در TOC در دسترس است. .Sp اگر پیام خطایی از پیونددهنده دریافت کردید مبنی بر این که فضای موجود TOC سرریز شده است، می‌توانید مقدار فضای مصرفی TOC را با گزینه‌های \fB\-mno\-fp\-in\-toc\fR و \fB\-mno\-sum\-in\-toc\fR کاهش دهید. گزینهٔ \&\fB\-mno\-fp\-in\-toc\fR مانع از قرار دادن مقادیر ثابت ممیز شناور در TOC توسط GCC می‌شود و \fB\-mno\-sum\-in\-toc\fR کامپایلر GCC را وادار می‌کند تا به جای قرار دادن مجموع یک آدرس و یک مقدار ثابت در TOC، کدی برای محاسبهٔ آن در زمان اجرا تولید کند. می‌توانید یک یا هر دوی این گزینه‌ها را مشخص کنید. هر کدام باعث می‌شوند GCC به بهای صرفه‌جویی در فضای TOC، کدی اندکی کندتر و حجیم‌تر تولید کند. .Sp اگر حتی با مشخص کردن هر دوی این گزینه‌ها همچنان فضای TOC تمام شد، به جای آن \fB\-mminimal\-toc\fR را مشخص کنید. این گزینه باعث می‌شود GCC فقط یک مدخل TOC برای هر فایل ایجاد کند. با مشخص کردن این گزینه، GCC کدی کندتر و بزرگ‌تر تولید می‌کند که البته فضای بسیار ناچیزی از TOC را مصرف می‌نماید. شاید ترجیح دهید از این گزینه فقط برای فایل‌هایی استفاده کنید که شامل کدهای با اجرای کمتر هستند. .IP \fB\-maix64\fR 4 .IX Item "-maix64" .PD 0 .IP \fB\-maix32\fR 4 .IX Item "-maix32" .PD فعال کردن ABI و قرارداد فراخوانی ۶۴ بیتی AIX: اشاره‌گرهای ۶۴ بیتی، نوع \&\f(CW\*(C`long\*(C'\fR شصت و چهار بیتی، و زیرساخت لازم برای پشتیبانی از آن‌ها. مشخص کردن \fB\-maix64\fR مستلزم \fB\-mpowerpc64\fR است، در حالی که \fB\-maix32\fR رابط ABI شصت و چهار بیتی را غیرفعال کرده و مستلزم \fB\-mno\-powerpc64\fR است. پیش‌فرض GCC بر روی \fB\-maix32\fR است. .IP \fB\-mxl\-compat\fR 4 .IX Item "-mxl-compat" .PD 0 .IP \fB\-mno\-xl\-compat\fR 4 .IX Item "-mno-xl-compat" .PD تولید کدی که در هنگام استفاده از ABI سازگار با AIX، تطابق بیشتری با معناشناسی کامپایلر IBM XL داشته باشد. ارسال آرگومان‌های ممیز شناور به توابع دارای پیش‌نمونه علاوه بر FPRهای آرگومان، روی پشته و فراتر از ناحیهٔ ذخیرهٔ ثبات (RSA). عدم فرض این که باارزش‌ترین double در مقدار long double صد و بیست و هشت بیتی هنگام مقایسهٔ مقادیر و تبدیل به double به‌درستی گرد شده است. استفاده از نام نمادهای XL برای روال‌های پشتیبانی long double. .Sp قرارداد فراخوانی AIX برای مدیریت یک حالت مبهم در K&R C که تابعی آدرس آرگومان‌هایش را با آرگومان‌های کمتری نسبت به آنچه اعلان شده می‌گیرد، توسعه یافت اما در ابتدا مستندسازی نشد. کامپایلرهای IBM XL زمانی که یک زیرروال بدون بهینه‌سازی کامپایل می‌شود، به آرگومان‌های ممیز شناوری که در RSA جا نمی‌شوند از روی پشته دسترسی پیدا می‌کنند. از آنجا که ذخیره همیشگی آرگومان‌های ممیز شناور روی پشته ناکارآمد بوده و به‌ندرت مورد نیاز است، این گزینه به‌طور پیش‌فرض فعال نیست و تنها هنگام فراخوانی زیرروال‌های کامپایل‌شده توسط کامپایلرهای IBM XL بدون بهینه‌سازی ضرورت دارد. .IP \fB\-mpe\fR 4 .IX Item "-mpe" پشتیبانی از \fIIBM RS/6000 SP\fR \fIParallel Environment\fR (PE). پیوند دادن برنامه‌ای که برای استفاده از تبادل پیام (message passing) با کد راه‌اندازی خاصی نوشته شده است تا برنامه بتواند اجرا شود. سیستم باید PE را در محل استاندارد (\fI/usr/lpp/ppe.poe/\fR) نصب داشته باشد، یا فایل \fIspecs\fR باید با گزینهٔ \fB\-specs=\fR جهت مشخص کردن مسیر دایرکتوری مناسب بازنویسی شود. محیط Parallel Environment از ریسه‌ها (threads) پشتیبانی نمی‌کند، بنابراین گزینهٔ \fB\-mpe\fR و گزینهٔ \fB\-pthread\fR ناسازگار هستند. .IP \fB\-malign\-natural\fR 4 .IX Item "-malign-natural" .PD 0 .IP \fB\-malign\-power\fR 4 .IX Item "-malign-power" .PD در AIX، سیستم ۳۲ بیتی Darwin و سیستم ۶۴ بیتی PowerPC GNU/Linux، گزینهٔ \&\fB\-malign\-natural\fR تراز تعریف‌شده در ABI برای انواع بزرگ‌تر، مانند doubleهای ممیز شناور را لغو کرده و آن‌ها را بر اساس مرز اندازهٔ طبیعی‌شان تراز می‌کند. گزینهٔ \fB\-malign\-power\fR به GCC دستور می‌دهد از قواعد تراز مشخص‌شده در ABI پیروی کند. پیش‌فرض GCC تراز استاندارد تعریف‌شده در ABI است. .Sp در Darwin شصت و چهار بیتی، تراز طبیعی حالت پیش‌فرض است و \fB\-malign\-power\fR پشتیبانی نمی‌شود. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD 0 .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD تولید کدی که از مجموعه ثبات‌های ممیز شناور استفاده نمی‌کند (استفاده می‌کند). در صورتی که از گزینهٔ \&\fB\-msoft\-float\fR استفاده کرده و هنگام پیوند دادن این گزینه را به GCC ارسال کنید، شبیه‌سازی نرم‌افزاری ممیز شناور فراهم می‌شود. .IP \fB\-mmultiple\fR 4 .IX Item "-mmultiple" .PD 0 .IP \fB\-mno\-multiple\fR 4 .IX Item "-mno-multiple" .PD تولید کدی که از دستورالعمل‌های بارگذاری چندکلمه‌ای (load multiple word) و ذخیرهٔ چندکلمه‌ای (store multiple word) استفاده می‌کند (یا نمی‌کند). این دستورالعمل‌ها به‌طور پیش‌فرض روی سیستم‌های POWER تولید می‌شوند، و روی سیستم‌های PowerPC تولید نمی‌شوند. از \fB\-mmultiple\fR روی سیستم‌های PowerPC با ترتیب بایت little\-endian استفاده نکنید، زیرا این دستورالعمل‌ها هنگامی که پردازنده در حالت little\-endian است کار نمی‌کنند. استثناها PPC740 و PPC750 هستند که این دستورالعمل‌ها را در حالت little\-endian مجاز می‌دانند. .IP \fB\-mupdate\fR 4 .IX Item "-mupdate" .PD 0 .IP \fB\-mno\-update\fR 4 .IX Item "-mno-update" .PD تولید کدی که از دستورالعمل‌های بارگذاری یا ذخیره‌ای استفاده می‌کند (یا نمی‌کند) که ثبات پایه (base register) را به آدرس مکان محاسبه‌شده در حافظه به‌روزرسانی می‌کنند. این دستورالعمل‌ها به‌طور پیش‌فرض تولید می‌شوند. اگر از \&\fB\-mno\-update\fR استفاده کنید، شکاف زمانی کوتاهی بین زمان به‌روزرسانی اشاره‌گر پشته و زمان ذخیرهٔ آدرس فریم قبلی وجود دارد، بدین معنا که کدی که فریم پشته را در هنگام وقفه‌ها یا سیگنال‌ها پیمایش می‌کند ممکن است داده‌های نامعتبر دریافت نماید..IP \fB\-mavoid\-indexed\-addresses\fR 4 .IX Item "-mavoid-indexed-addresses" .PD 0 .IP \fB\-mno\-avoid\-indexed\-addresses\fR 4 .IX Item "-mno-avoid-indexed-addresses" .PD کدی تولید می‌کند که سعی در اجتناب (عدم اجتناب) از استفاده از دستورالعمل‌های بارگذاری یا ذخیره‌سازی نمایه‌شده (indexed load/store) دارد. این دستورالعمل‌ها ممکن است در پردازنده‌های Power6 در شرایط خاصی، مانند پیمایش در آرایه‌های بزرگی که از مرز 16M عبور می‌کنند، باعث افت کارایی شوند. این گزینه به‌طور پیش‌فرض هنگام هدف‌گذاری Power6 فعال و در غیر این صورت غیرفعال است. .IP \fB\-mfused\-madd\fR 4 .IX Item "-mfused-madd" .PD 0 .IP \fB\-mno\-fused\-madd\fR 4 .IX Item "-mno-fused-madd" .PD کدی تولید می‌کند که از دستورالعمل‌های ضرب و انباشت (multiply and accumulate) ممیز شناور استفاده می‌کند (استفاده نمی‌کند). این دستورالعمل‌ها در صورت استفاده از ممیز شناور سخت‌افزاری به‌طور پیش‌فرض تولید می‌شوند. گزینه وابسته به ماشین \&\fB\-mfused\-madd\fR اکنون به گزینه مستقل از ماشین \&\fB\-ffp\-contract=fast\fR نگاشت شده است، و \fB\-mno\-fused\-madd\fR به \fB\-ffp\-contract=off\fR نگاشت می‌شود. .IP \fB\-mmulhw\fR 4 .IX Item "-mmulhw" .PD 0 .IP \fB\-mno\-mulhw\fR 4 .IX Item "-mno-mulhw" .PD کدی تولید می‌کند که از دستورالعمل‌های ضرب و ضرب-انباشت نیم‌کلمه (half\-word) روی پردازنده‌های IBM 405، 440، 464 و 476 استفاده می‌کند (استفاده نمی‌کند). این دستورالعمل‌ها به‌طور پیش‌فرض هنگام هدف‌گذاری این پردازنده‌ها تولید می‌شوند. .IP \fB\-mdlmzb\fR 4 .IX Item "-mdlmzb" .PD 0 .IP \fB\-mno\-dlmzb\fR 4 .IX Item "-mno-dlmzb" .PD کدی تولید می‌کند که از دستورالعمل جستجوی رشته‌ای \fBdlmzb\fR روی پردازنده‌های IBM 405، 440، 464 و 476 استفاده می‌کند (استفاده نمی‌کند). این دستورالعمل به‌طور پیش‌فرض هنگام هدف‌گذاری این پردازنده‌ها تولید می‌شود. .IP \fB\-mno\-bit\-align\fR 4 .IX Item "-mno-bit-align" .PD 0 .IP \fB\-mbit\-align\fR 4 .IX Item "-mbit-align" .PD در سیستم‌های System V.4 و سامانه‌های توکار PowerPC ساختارها و اجتماع‌هایی (unions) که دارای میدان‌های بیتی (bit-fields) هستند را مجبور به تراز شدن با نوع پایه میدان بیتی نمی‌کند (می‌کند). .Sp به‌عنوان مثال، به‌طور پیش‌فرض ساختاری که تنها شامل ۸ میدان بیتی \&\f(CW\*(C`unsigned\*(C'\fR به طول ۱ است در یک مرز ۴ بایتی تراز شده و اندازه‌ای برابر با ۴ بایت دارد. با استفاده از \fB\-mno\-bit\-align\fR، این ساختار در یک مرز ۱ بایتی تراز شده و اندازه آن ۱ بایت خواهد بود. .IP \fB\-mno\-strict\-align\fR 4 .IX Item "-mno-strict-align" .PD 0 .IP \fB\-mstrict\-align\fR 4 .IX Item "-mstrict-align" .PD در سیستم‌های System V.4 و سامانه‌های توکار PowerPC فرض نمی‌کند (می‌کند) که ارجاعات حافظه ترازنشده توسط سیستم مدیریت می‌شوند. .IP \fB\-mrelocatable\fR 4 .IX Item "-mrelocatable" .PD 0 .IP \fB\-mno\-relocatable\fR 4 .IX Item "-mno-relocatable" .PD کدی تولید می‌کند که به یک فایل اجرایی ایستا اجازه بازآرایی (relocate) به یک آدرس دیگر در زمان اجرا را می‌دهد (نمی‌دهد). یک بارگذار ساده در سامانه توکار PowerPC باید کل محتویات \&\f(CW\*(C`.got2\*(C'\fR و موقعیت‌های ۴ بایتی فهرست‌شده در بخش \f(CW\*(C`.fixup\*(C'\fR (جدولی از آدرس‌های ۳۲ بیتی که توسط این گزینه تولید شده است) را بازآرایی کند. برای کارکرد صحیح، تمام اشیای پیوندخورده باید با \&\fB\-mrelocatable\fR یا \fB\-mrelocatable\-lib\fR کامپایل شوند. کد \&\fB\-mrelocatable\fR پشته را در یک مرز ۸ بایتی تراز می‌کند. .IP \fB\-mrelocatable\-lib\fR 4 .IX Item "-mrelocatable-lib" .PD 0 .IP \fB\-mno\-relocatable\-lib\fR 4 .IX Item "-mno-relocatable-lib" .PD همانند \fB\-mrelocatable\fR، گزینه \fB\-mrelocatable\-lib\fR یک بخش \&\f(CW\*(C`.fixup\*(C'\fR برای امکان بازآرایی فایل‌های اجرایی ایستا در زمان اجرا تولید می‌کند، اما \fB\-mrelocatable\-lib\fR از تراز پشته کوچک‌تر \fB\-mrelocatable\fR استفاده نمی‌کند. اشیای کامپایل‌شده با \&\fB\-mrelocatable\-lib\fR ممکن است با اشیایی که با هر ترکیبی از گزینه‌های \fB\-mrelocatable\fR کامپایل شده‌اند پیوند داده شوند. .IP \fB\-mno\-toc\fR 4 .IX Item "-mno-toc" .PD 0 .IP \fB\-mtoc\fR 4 .IX Item "-mtoc" .PD در سیستم‌های System V.4 و سامانه‌های توکار PowerPC فرض نمی‌کند (می‌کند) که ثبات ۲ حاوی اشاره‌گری به یک ناحیه سراسری است که به آدرس‌های مورد استفاده در برنامه اشاره دارد. .IP \fB\-mlittle\fR 4 .IX Item "-mlittle" .PD 0 .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" .PD در سیستم‌های System V.4 و سامانه‌های توکار PowerPC کد را برای پردازنده در حالت ریزانتهایی (little\-endian) کامپایل می‌کند. گزینه \fB\-mlittle\-endian\fR مشابه \fB\-mlittle\fR است. .IP \fB\-mbig\fR 4 .IX Item "-mbig" .PD 0 .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" .PD در سیستم‌های System V.4 و سامانه‌های توکار PowerPC کد را برای پردازنده در حالت کلان‌انتهایی (big\-endian) کامپایل می‌کند. گزینه \fB\-mbig\-endian\fR مشابه \fB\-mbig\fR است. .IP \fB\-mdynamic\-no\-pic\fR 4 .IX Item "-mdynamic-no-pic" در سیستم‌های Darwin / macOS، کد را به نحوی کامپایل می‌کند که خود قابل بازآرایی نباشد، اما ارجاعات خارجی آن قابل بازآرایی باشند. کد حاصل برای برنامه‌های کاربردی مناسب است، اما برای کتابخانه‌های اشتراکی مناسب نیست. .IP \fB\-msingle\-pic\-base\fR 4 .IX Item "-msingle-pic-base" با ثبات مورد استفاده برای آدرس‌دهی PIC به عنوان فقط‌خواندنی رفتار می‌کند، به جای اینکه در مقدمه (prologue) هر تابع بارگذاری شود. سامانه زمان اجرا مسئول مقداردهی اولیه این ثبات با یک مقدار مناسب پیش از شروع اجرا است. .IP \fB\-mprioritize\-restricted\-insns=\fR\fIpriority\fR 4 .IX Item "-mprioritize-restricted-insns=priority" این گزینه اولویتی را کنترل می‌کند که در طی دومین دور زمان‌بندی به دستورالعمل‌های دارای محدودیت در شیار ارسال (dispatch-slot restricted) اختصاص می‌یابد. آرگومان \fIpriority\fR مقادیر \fB0\fR، \fB1\fR یا \fB2\fR را دریافت می‌کند تا به ترتیب هیچ، بالاترین، یا دومین اولویت بالا را به این دستورالعمل‌ها اختصاص دهد. .IP \fB\-msched\-costly\-dep=\fR\fIdependence_type\fR 4 .IX Item "-msched-costly-dep=dependence_type" این گزینه کنترل می‌کند که کدام وابستگی‌ها در حین زمان‌بندی دستورالعمل‌ها توسط هدف پرهزینه در نظر گرفته شوند. آرگومان \&\fIdependence_type\fR یکی از مقادیر زیر را می‌پذیرد: .RS 4 .IP \fBno\fR 4 .IX Item "no" هیچ وابستگی‌ای پرهزینه نیست. .IP \fBall\fR 4 .IX Item "all" تمام وابستگی‌ها پرهزینه هستند. .IP \fBtrue_store_to_load\fR 4 .IX Item "true_store_to_load" وابستگی واقعی (true dependence) از ذخیره به بارگذاری پرهزینه است. .IP \fBstore_to_load\fR 4 .IX Item "store_to_load" هرگونه وابستگی از ذخیره به بارگذاری پرهزینه است. .IP \fInumber\fR 4 .IX Item "number" هر وابستگی که تأخیر (latency) آن بزرگ‌تر یا مساوی با \&\fInumber\fR باشد پرهزینه است. .RE .RS 4 .RE .IP \fB\-minsert\-sched\-nops=\fR\fIscheme\fR 4 .IX Item "-minsert-sched-nops=scheme" این گزینه کنترل می‌کند که کدام طرح درج NOP در طی دومین دور زمان‌بندی استفاده شود. آرگومان \fIscheme\fR یکی از مقادیر زیر را می‌پذیرد: .RS 4 .IP \fBno\fR 4 .IX Item "no" هیچ NOP درج نشود. .IP \fBpad\fR 4 .IX Item "pad" طبق گروه‌بندی زمان‌بند، هر گروه ارسالی که دارای شیارهای صدور خالی باشد با NOP پر شود. .IP \fBregroup_exact\fR 4 .IX Item "regroup_exact" دستورهای NOP را برای انتقال اجباری دستورالعمل‌های دارای وابستگی پرهزینه به گروه‌های جداگانه درج کند. دقیقاً به تعداد لازم NOP درج می‌شود تا بر اساس گروه‌بندی تخمینی پردازنده، دستور به یک گروه جدید رانده شود..IP \fInumber\fR 4 .IX Item "number" درج دستورهای NOP برای راندن دستورالعمل‌های وابستهٔ هزینه‌بر به گروه‌های مجزا. درج \fInumber\fR دستور NOP برای مجبور کردن یک دستورالعمل به رفتن به یک گروه جدید. .RE .RS 4 .RE .IP \fB\-mcall\-sysv\fR 4 .IX Item "-mcall-sysv" در سامانه‌های System V.4 و PowerPC تعبیه‌شده (embedded)، کد را با استفاده از قراردادهای فراخوانی (calling conventions) منطبق بر پیش‌نویس مارس ۱۹۹۵ از رابط باینری کاربردی System V (System V Application Binary Interface)، ضمیمهٔ پردازندهٔ PowerPC کامپایل می‌کند. این حالت پیش‌فرض است مگر اینکه GCC را با استفاده از \fBpowerpc\-*\-eabiaix\fR پیکربندی کرده باشید. .IP \fB\-mcall\-sysv\-eabi\fR 4 .IX Item "-mcall-sysv-eabi" .PD 0 .IP \fB\-mcall\-eabi\fR 4 .IX Item "-mcall-eabi" .PD مشخص کردن هر دو گزینهٔ \fB\-mcall\-sysv\fR و \fB\-meabi\fR. .IP \fB\-mcall\-sysv\-noeabi\fR 4 .IX Item "-mcall-sysv-noeabi" مشخص کردن هر دو گزینهٔ \fB\-mcall\-sysv\fR و \fB\-mno\-eabi\fR. .IP \fB\-mcall\-aixdesc\fR 4 .IX Item "-mcall-aixdesc" در سامانه‌های System V.4 و PowerPC تعبیه‌شده، کد را برای سیستم‌عامل AIX کامپایل می‌کند. .IP \fB\-mcall\-linux\fR 4 .IX Item "-mcall-linux" در سامانه‌های System V.4 و PowerPC تعبیه‌شده، کد را برای سامانهٔ GNU مبتنی بر Linux کامپایل می‌کند. .IP \fB\-mcall\-freebsd\fR 4 .IX Item "-mcall-freebsd" در سامانه‌های System V.4 و PowerPC تعبیه‌شده، کد را برای سیستم‌عامل FreeBSD کامپایل می‌کند. .IP \fB\-mcall\-netbsd\fR 4 .IX Item "-mcall-netbsd" در سامانه‌های System V.4 و PowerPC تعبیه‌شده، کد را برای سیستم‌عامل NetBSD کامپایل می‌کند. .IP \fB\-mcall\-openbsd\fR 4 .IX Item "-mcall-openbsd" در سامانه‌های System V.4 و PowerPC تعبیه‌شده، کد را برای سیستم‌عامل OpenBSD کامپایل می‌کند. .IP \fB\-mtraceback=\fR\fItraceback_type\fR 4 .IX Item "-mtraceback=traceback_type" انتخاب نوع جدول traceback. مقادیر معتبر برای \fItraceback_type\fR عبارتند از \fBfull\fR، \fBpart\fR و \fBno\fR. .IP \fB\-maix\-struct\-return\fR 4 .IX Item "-maix-struct-return" بازگرداندن تمام ساختارها در حافظه (همان‌طور که توسط ABI سیستم‌عامل AIX مشخص شده است). .IP \fB\-msvr4\-struct\-return\fR 4 .IX Item "-msvr4-struct-return" بازگرداندن ساختارهای کوچک‌تر از ۸ بایت در ثبات‌ها (همان‌طور که توسط SVR4 ABI مشخص شده است). .IP \fB\-mabi=\fR\fIabi\-type\fR 4 .IX Item "-mabi=abi-type" گسترش ABI فعلی با یک افزونهٔ خاص، یا حذف چنین افزونه‌ای. مقادیر معتبر عبارتند از: \fBaltivec\fR، \fBno\-altivec\fR، \&\fBibmlongdouble\fR، \fBieeelongdouble\fR، \&\fBelfv1\fR، \fBelfv2\fR، و برای AIX: \fBvec\-extabi\fR، \fBvec\-default\fR. .IP \fB\-mabi=ibmlongdouble\fR 4 .IX Item "-mabi=ibmlongdouble" تغییر ABI فعلی برای استفاده از long double با دقت گسترش‌یافتهٔ IBM. اگر سامانهٔ شما به‌طور پیش‌فرض از long double با دقت گسترش‌یافتهٔ IEEE استفاده کند، بعید است این گزینه کار کند. اگر نوع long double را از دقت گسترش‌یافتهٔ IEEE تغییر دهید، کامپایلر هشداری صادر می‌کند مگر اینکه از گزینهٔ \fB\-Wno\-psabi\fR استفاده کنید. نیازمند فعال بودن \fB\-mlong\-double\-128\fR است. .IP \fB\-mabi=ieeelongdouble\fR 4 .IX Item "-mabi=ieeelongdouble" تغییر ABI فعلی برای استفاده از long double با دقت گسترش‌یافتهٔ IEEE. اگر سامانهٔ شما به‌طور پیش‌فرض از long double با دقت گسترش‌یافتهٔ IBM استفاده کند، بعید است این گزینه کار کند. اگر نوع long double را از دقت گسترش‌یافتهٔ IBM تغییر دهید، کامپایلر هشداری صادر می‌کند مگر اینکه از گزینهٔ \fB\-Wno\-psabi\fR استفاده کنید. نیازمند فعال بودن \fB\-mlong\-double\-128\fR است. .IP \fB\-mabi=elfv1\fR 4 .IX Item "-mabi=elfv1" تغییر ABI فعلی برای استفاده از ELFv1 ABI. این ABI پیش‌فرض برای سامانه‌های ۶۴ بیتی big\-endian مبتنی بر معماری PowerPC در Linux است. نادیده‌گرفتن ABI پیش‌فرض نیازمند پشتیبانی ویژه در سامانه بوده و به احتمال قوی منجر به خطاهای فاحش خواهد شد. .IP \fB\-mabi=elfv2\fR 4 .IX Item "-mabi=elfv2" تغییر ABI فعلی برای استفاده از ELFv2 ABI. این ABI پیش‌فرض برای سامانه‌های ۶۴ بیتی little\-endian مبتنی بر معماری PowerPC در Linux است. نادیده‌گرفتن ABI پیش‌فرض نیازمند پشتیبانی ویژه در سامانه بوده و به احتمال قوی منجر به خطاهای فاحش خواهد شد. .IP \fB\-mgnu\-attribute\fR 4 .IX Item "-mgnu-attribute" .PD 0 .IP \fB\-mno\-gnu\-attribute\fR 4 .IX Item "-mno-gnu-attribute" .PD تولید دستورالعمل‌های اسمبلی .gnu_attribute برای تنظیم جفت‌های برچسب/مقدار در یک بخش \&.gnu.attributes که تغییرات ABI را در پارامترهای تابع یا مقادیر بازگشتی مشخص می‌کند. .IP \fB\-mprototype\fR 4 .IX Item "-mprototype" .PD 0 .IP \fB\-mno\-prototype\fR 4 .IX Item "-mno-prototype" .PD در سامانه‌های System V.4 و PowerPC تعبیه‌شده، فرض می‌کند که تمام فراخوانی‌های توابع با تعداد متغیر آرگومان به درستی پیش‌نمونه‌سازی (prototyped) شده‌اند. در غیر این صورت، کامپایلر باید پیش از هر فراخوانی فاقد پیش‌نمونه، یک دستورالعمل برای تنظیم یا پاک کردن بیت ۶ از ثبات کد وضعیت (\f(CW\*(C`CR\*(C'\fR) درج کند تا مشخص شود آیا در صورت پذیرش آرگومان‌های متغیر توسط تابع، مقادیر ممیز شناور در ثبات‌های ممیز شناور ارسال شده‌اند یا خیر. با \&\fB\-mprototype\fR، تنها فراخوانی‌های توابعِ پیش‌نمونه‌سازی‌شده با آرگومان‌های متغیر، این بیت را تنظیم یا پاک می‌کنند. .IP \fB\-msim\fR 4 .IX Item "-msim" در سامانه‌های تعبیه‌شدهٔ PowerPC، فرض می‌کند که ماژول راه‌انداز \&\fIsim\-crt0.o\fR نام دارد و کتابخانه‌های استاندارد C شامل \fIlibsim.a\fR و \&\fIlibc.a\fR هستند. این حالت پیش‌فرض برای پیکربندی‌های \fBpowerpc\-*\-eabisim\fR است. .IP \fB\-mmvme\fR 4 .IX Item "-mmvme" در سامانه‌های تعبیه‌شدهٔ PowerPC، فرض می‌کند که ماژول راه‌انداز \&\fIcrt0.o\fR نام دارد و کتابخانه‌های استاندارد C شامل \fIlibmvme.a\fR و \&\fIlibc.a\fR هستند. .IP \fB\-mads\fR 4 .IX Item "-mads" در سامانه‌های تعبیه‌شدهٔ PowerPC، فرض می‌کند که ماژول راه‌انداز \&\fIcrt0.o\fR نام دارد و کتابخانه‌های استاندارد C شامل \fIlibads.a\fR و \&\fIlibc.a\fR هستند. .IP \fB\-myellowknife\fR 4 .IX Item "-myellowknife" در سامانه‌های تعبیه‌شدهٔ PowerPC، فرض می‌کند که ماژول راه‌انداز \&\fIcrt0.o\fR نام دارد و کتابخانه‌های استاندارد C شامل \fIlibyk.a\fR و \&\fIlibc.a\fR هستند. .IP \fB\-mvxworks\fR 4 .IX Item "-mvxworks" در سامانه‌های System V.4 و PowerPC تعبیه‌شده، مشخص می‌کند که کامپایل برای سامانهٔ VxWorks انجام می‌شود. .IP \fB\-memb\fR 4 .IX Item "-memb" در سامانه‌های تعبیه‌شدهٔ PowerPC، بیت \f(CW\*(C`PPC_EMB\*(C'\fR را در سرآیند پرچم‌های ELF تنظیم می‌کند تا نشان دهد از بازآرایی‌های (relocations) گسترش‌یافتهٔ \fBeabi\fR استفاده شده است. .IP \fB\-meabi\fR 4 .IX Item "-meabi" .PD 0 .IP \fB\-mno\-eabi\fR 4 .IX Item "-mno-eabi" .PD در سامانه‌های System V.4 و PowerPC تعبیه‌شده، از رابط باینری کاربردی تعبیه‌شده (EABI) که مجموعه‌ای از اصلاحات بر مشخصات System V.4 است، پیروی می‌کند (یا نمی‌کند). انتخاب \fB\-meabi\fR به این معنی است که پشته بر روی یک مرز ۸ بایتی هم‌تراز می‌شود، تابع \&\f(CW\*(C`_\|_eabi\*(C'\fR از تابع \f(CW\*(C`main\*(C'\fR برای آماده‌سازی محیط EABI فراخوانی می‌شود، و گزینهٔ \fB\-msdata\fR می‌تواند از هر دو ثبات \f(CW\*(C`r2\*(C'\fR و \&\f(CW\*(C`r13\*(C'\fR برای اشاره به دو ناحیهٔ دادهٔ کوچک (small data) مجزا استفاده کند. انتخاب \&\fB\-mno\-eabi\fR به این معنی است که پشته بر روی یک مرز ۱۶ بایتی هم‌تراز می‌شود، هیچ تابع مقداردهی اولیهٔ EABI از \f(CW\*(C`main\*(C'\fR فراخوانی نمی‌شود، و گزینهٔ \&\fB\-msdata\fR تنها از \f(CW\*(C`r13\*(C'\fR برای اشاره به یک ناحیهٔ دادهٔ کوچکِ واحد استفاده می‌کند. اگر GCC را با استفاده از یکی از گزینه‌های \fBpowerpc*\-*\-eabi*\fR پیکربندی کرده باشید، گزینهٔ \fB\-meabi\fR به‌طور پیش‌فرض فعال است. .IP \fB\-msdata=eabi\fR 4 .IX Item "-msdata=eabi" در سامانه‌های System V.4 و PowerPC تعبیه‌شده، داده‌های عمومی و ایستای کوچکِ مقداردهی‌شده از نوع \&\f(CW\*(C`const\*(C'\fR را در بخش \f(CW\*(C`.sdata2\*(C'\fR قرار می‌دهد که توسط ثبات \f(CW\*(C`r2\*(C'\fR به آن اشاره می‌شود. داده‌های عمومی و ایستای کوچکِ مقداردهی‌شدهٔ غیر\-\f(CW\*(C`const\*(C'\fR را در بخش \f(CW\*(C`.sdata\*(C'\fR قرار می‌دهد که توسط ثبات \f(CW\*(C`r13\*(C'\fR به آن اشاره می‌شود. داده‌های عمومی و ایستای کوچکِ مقداردهی‌نشده را در بخش \f(CW\*(C`.sbss\*(C'\fR قرار می‌دهد که مجاور بخش \f(CW\*(C`.sdata\*(C'\fR است. گزینهٔ \fB\-msdata=eabi\fR با گزینهٔ \fB\-mrelocatable\fR ناسازگار است. گزینهٔ \&\fB\-msdata=eabi\fR همچنین گزینهٔ \fB\-memb\fR را فعال می‌کند. .IP \fB\-msdata=sysv\fR 4 .IX Item "-msdata=sysv" در سامانه‌های System V.4 و PowerPC تعبیه‌شده، داده‌های عمومی و ایستای کوچک را در بخش \f(CW\*(C`.sdata\*(C'\fR قرار می‌دهد که توسط ثبات \&\f(CW\*(C`r13\*(C'\fR به آن اشاره می‌شود. داده‌های عمومی و ایستای کوچکِ مقداردهی‌نشده را در بخش \&\f(CW\*(C`.sbss\*(C'\fR قرار می‌دهد که مجاور بخش \f(CW\*(C`.sdata\*(C'\fR است. گزینهٔ \fB\-msdata=sysv\fR با گزینهٔ \&\fB\-mrelocatable\fR ناسازگار است. .IP \fB\-msdata=default\fR 4 .IX Item "-msdata=default".PD 0 .IP \fB\-msdata\fR 4 .IX Item "-msdata" .PD در سامانه‌های System V.4 و PowerPC تعبیه‌شده، چنانچه \fB\-meabi\fR استفاده شود، کد را همانند \fB\-msdata=eabi\fR کامپایل می‌کند؛ در غیر این صورت کد را همانند \fB\-msdata=sysv\fR کامپایل می‌کند. .IP \fB\-msdata=data\fR 4 .IX Item "-msdata=data" در سامانه‌های System V.4 و PowerPC تعبیه‌شده، داده‌های سراسری کوچک را در بخش \f(CW\*(C`.sdata\*(C'\fR قرار می‌دهد. داده‌های سراسری مقداردهی‌نشدهٔ کوچک را در بخش \f(CW\*(C`.sbss\*(C'\fR قرار می‌دهد. با این حال، از ثبات \f(CW\*(C`r13\*(C'\fR برای آدرس‌دهی داده‌های کوچک استفاده نمی‌کند. این رفتار پیش‌فرض است مگر اینکه از سایر گزینه‌های \fB\-msdata\fR استفاده شود. .IP \fB\-msdata=none\fR 4 .IX Item "-msdata=none" .PD 0 .IP \fB\-mno\-sdata\fR 4 .IX Item "-mno-sdata" .PD در سامانه‌های PowerPC تعبیه‌شده، تمامی داده‌های سراسری و ایستا مقداردهی‌شده را در بخش \f(CW\*(C`.data\*(C'\fR، و تمامی داده‌های مقداردهی‌نشده را در بخش \&\f(CW\*(C`.bss\*(C'\fR قرار می‌دهد. .IP \fB\-mreadonly\-in\-sdata\fR 4 .IX Item "-mreadonly-in-sdata" اشیای فقط‌خواندنی را نیز در بخش \f(CW\*(C`.sdata\*(C'\fR قرار می‌دهد. این رفتار پیش‌فرض است. .IP \fB\-mblock\-move\-inline\-limit=\fR\fInum\fR 4 .IX Item "-mblock-move-inline-limit=num" تمامی انتقال‌های بلوکی (مانند فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR یا رونوشت‌های ساختار) که کمتر یا مساوی \fInum\fR بایت باشند را درون‌خطی می‌کند. کمینهٔ مقدار برای \&\fInum\fR در مقصدهای ۳۲ بیتی برابر با ۳۲ بایت و در مقصدهای ۶۴ بیتی برابر با ۶۴ بایت است. مقدار پیش‌فرض وابسته به معماری مقصد است. .IP \fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR 4 .IX Item "-mblock-compare-inline-limit=num" برای تمامی مقایسه‌های بلوکی (مانند فراخوانی‌های \f(CW\*(C`memcmp\*(C'\fR یا مقایسه‌های ساختار) که کمتر یا مساوی \fInum\fR بایت باشند، کد درون‌خطی بدون حلقه تولید می‌کند. اگر \fInum\fR برابر با ۰ باشد، تمامی بسط‌های درون‌خطی (حلقه‌ای و بدون حلقه) برای مقایسهٔ بلوک غیرفعال می‌شوند. مقدار پیش‌فرض وابسته به معماری مقصد است. .IP \fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR 4 .IX Item "-mblock-compare-inline-loop-limit=num" یک بسط درون‌خطی با استفاده از کد حلقه‌ای برای تمامی مقایسه‌های بلوکی تولید می‌کند که کمتر یا مساوی \fInum\fR بایت بوده، اما از حد بسط مقایسهٔ بلوکی درون‌خطیِ بدون حلقه بزرگ‌تر باشند. اگر طول بلوک ثابت نباشد، حداکثر \fInum\fR بایت پیش از فراخوانی \f(CW\*(C`memcmp\*(C'\fR جهت مقایسهٔ باقی‌ماندهٔ بلوک مقایسه خواهد شد. مقدار پیش‌فرض وابسته به معماری مقصد است. .IP \fB\-mstring\-compare\-inline\-limit=\fR\fInum\fR 4 .IX Item "-mstring-compare-inline-limit=num" حداکثر \fInum\fR بایت از رشته را با کد درون‌خطی مقایسه می‌کند. اگر تفاوت یا پایان رشته در انتهای مقایسهٔ درون‌خطی یافت نشود، یک فراخوانی به \f(CW\*(C`strcmp\*(C'\fR یا \f(CW\*(C`strncmp\*(C'\fR باقی‌ماندهٔ مقایسه را انجام خواهد داد. مقدار پیش‌فرض ۶۴ بایت است. .IP "\fB\-G\fR \fInum\fR" 4 .IX Item "-G num" در سامانه‌های PowerPC تعبیه‌شده، مؤلفه‌های سراسری و ایستای کمتر یا مساوی \fInum\fR بایت را به‌جای بخش‌های عادی داده یا BSS، در بخش‌های دادهٔ کوچک یا BSS قرار می‌دهد. به‌طور پیش‌فرض، \fInum\fR برابر با ۸ است. گزینهٔ \&\fB\-G\fR \fInum\fR به پیونددهنده نیز ارسال می‌شود. تمامی ماژول‌ها باید با یک مقدار یکسان برای \fB\-G\fR \fInum\fR کامپایل شوند. .IP \fB\-mregnames\fR 4 .IX Item "-mregnames" .PD 0 .IP \fB\-mno\-regnames\fR 4 .IX Item "-mno-regnames" .PD در سامانه‌های System V.4 و PowerPC تعبیه‌شده، نام ثبات‌ها را در خروجی زبان اسمبلی با قالب‌های نمادین درج می‌کند (درج نمی‌کند). .IP \fB\-mlongcall\fR 4 .IX Item "-mlongcall" .PD 0 .IP \fB\-mno\-longcall\fR 4 .IX Item "-mno-longcall" .PD به‌طور پیش‌فرض فرض می‌کند تمام فراخوانی‌ها دوردست هستند، به‌گونه‌ای که به یک دنبالهٔ فراخوانی طولانی‌تر و پرهزینه‌تر نیاز است. این امر برای فراخوانی‌های دورتر از ۳۲ مگابایت (۳۳٬۵۵۴٬۴۳۲ بایت) از مکان جاری الزامی است. اگر کامپایلر بداند که فراخوانی نمی‌تواند تا این حد دور باشد، یک فراخوانی کوتاه تولید می‌شود. این تنظیم را می‌توان توسط صفت تابع \f(CW\*(C`shortcall\*(C'\fR یا به‌وسیلهٔ \f(CW#pragma longcall(0)\fR لغو کرد. .Sp برخی پیونددهنده‌ها قادر به تشخیص فراخوانی‌های خارج از محدوده و تولید بی‌درنگ کد واسط (glue code) هستند. در این سامانه‌ها، فراخوانی‌های دوردست غیرضروری بوده و کد کندتری تولید می‌کنند. در زمان نگارش این متن، پیونددهندهٔ AIX و همچنین پیونددهندهٔ GNU برای PowerPC/64 قادر به انجام این کار هستند. برنامه‌ریزی شده است که این قابلیت به پیونددهندهٔ GNU برای سامانه‌های ۳۲ بیتی PowerPC نیز افزوده شود. .Sp در سامانه‌های PowerPC64 ELFv2 و سامانه‌های ۳۲ بیتی PowerPC با پیونددهنده‌های جدیدتر GNU، ابزار GCC می‌تواند فراخوانی‌های دوردست را با استفاده از یک دنبالهٔ فراخوانی درون‌خطی PLT تولید کند (گزینهٔ \&\fB\-mpltseq\fR را ببینید). معماری PowerPC با \fB\-mbss\-plt\fR و PowerPC64 ELFv1 (موتور بزرگ یا big\-endian) از فراخوانی‌های درون‌خطی PLT پشتیبانی نمی‌کنند. .Sp در سامانه‌های Darwin/PPC، دستور \f(CW\*(C`#pragma longcall\*(C'\fR عبارت \f(CW\*(C`jbsr callee, L42\*(C'\fR را به همراه یک \fIbranch island\fR (کد واسط) تولید می‌کند. این دو نشانی مقصد نشان‌دهندهٔ تابع فراخوانده‌شده و جزیرهٔ انشعاب هستند. پیونددهندهٔ Darwin/PPC نشانی اول را ترجیح می‌دهد و چنانچه دستور \f(CW\*(C`bl\*(C'\fR در PPC مستقیماً به تابع فراخوانده‌شده برسد، دستور \f(CW\*(C`bl callee\*(C'\fR را تولید می‌کند؛ در غیر این صورت، پیونددهنده \f(CW\*(C`bl L42\*(C'\fR را برای فراخوانی جزیرهٔ انشعاب تولید خواهد کرد. جزیرهٔ انشعاب به بدنهٔ تابع فراخواننده ضمیمه می‌شود؛ این بخش نشانی کامل ۳۲ بیتی تابع فراخوانده‌شده را محاسبه کرده و به آن پرش می‌کند. .Sp در سامانه‌های Mach\-O (Darwin)، این گزینه کامپایلر را هدایت می‌کند تا برای هر فراخوانی مستقیم کد واسط را درج کند، و پیونددهندهٔ Darwin تصمیم می‌گیرد که از آن استفاده کند یا آن را کنار بگذارد. .Sp در آینده، زمانی که مشخص باشد پیونددهنده کد واسط را تولید می‌کند، ممکن است GCC تمام مشخصه‌های longcall را نادیده بگیرد. .IP \fB\-mpltseq\fR 4 .IX Item "-mpltseq" .PD 0 .IP \fB\-mno\-pltseq\fR 4 .IX Item "-mno-pltseq" .PD پیاده‌سازی (عدم پیاده‌سازی) \-fno\-plt و فراخوانی‌های دوردست با استفاده از دنبالهٔ فراخوانی PLT درون‌خطی که از پیوند تنبل (lazy linking) و فراخوانی‌های دوردست به توابع در کتابخانه‌های اشتراکی بارگذاری‌شده با dlopen پشتیبانی می‌کند. فراخوانی‌های PLT درون‌خطی تنها در سامانه‌های PowerPC64 ELFv2 و سامانه‌های ۳۲ بیتی PowerPC با پیونددهنده‌های جدیدتر GNU پشتیبانی می‌شوند، و چنانچه در زمان پیکربندی GCC پشتیبانی از آن شناسایی شود به‌طور پیش‌فرض فعال هستند؛ همچنین در مورد PowerPC ۳۲ بیتی، در صورتی که GCC با \fB\-\-enable\-secureplt\fR پیکربندی شده باشد فعال خواهند بود. کدهای \fB\-mpltseq\fR و اشیای بازنشانی‌پذیر ۳۲ بیتی PowerPC با \fB\-mbss\-plt\fR را نباید با یکدیگر پیوند داد. .IP \fB\-mtls\-markers\fR 4 .IX Item "-mtls-markers" .PD 0 .IP \fB\-mno\-tls\-markers\fR 4 .IX Item "-mno-tls-markers" .PD نشانه‌گذاری (عدم نشانه‌گذاری) فراخوانی‌های \f(CW\*(C`_\|_tls_get_addr\*(C'\fR با یک بازنشانی (relocation) که آرگومان تابع را مشخص می‌کند. بازنشانی به پیونددهنده اجازه می‌دهد تا برای بهینه‌سازی TLS، فراخوانی تابع را به‌طور مطمئن با دستورهای آماده‌سازی آرگومان مرتبط سازد، که این امر به نوبهٔ خود به GCC اجازه می‌دهد ترتیب اجرای دنباله را بهتر زمان‌بندی کند. .IP \fB\-mrecip\fR 4 .IX Item "-mrecip" .PD 0 .IP \fB\-mno\-recip\fR 4 .IX Item "-mno-recip" .PD این گزینه استفاده از دستورالعمل‌های تخمین معکوس و تخمین ریشهٔ دوم معکوس با مراحل اضافی نیوتن\-رافسون را برای افزایش دقت، به‌جای انجام تقسیم یا ریشهٔ دوم و تقسیم برای آرگومان‌های ممیز شناور فعال می‌کند. هنگام استفاده از \fB\-mrecip\fR باید از گزینهٔ \fB\-ffast\-math\fR (یا دست‌کم \fB\-funsafe\-math\-optimizations\fR، \&\fB\-ffinite\-math\-only\fR، \fB\-freciprocal\-math\fR و \&\fB\-fno\-trapping\-math\fR) استفاده کنید. توجه داشته باشید در حالی که توان عملیاتی دنباله به‌طور کلی بیشتر از توان عملیاتی دستورالعمل‌های غیرمعکوس است، دقت دنباله برای ریشه‌های دوم معکوس می‌تواند تا 2 ulp کاهش یابد (به‌عنوان مثال، معکوس 1.0 برابر با 0.99999994 خواهد بود). .IP \fB\-mrecip=\fR\fIopt\fR 4 .IX Item "-mrecip=opt" این گزینه کنترل می‌کند که کدام دستورالعمل‌های تخمین معکوس می‌توانند استفاده شوند. \fIopt\fR فهرستی از گزینه‌ها است که با کاما از هم جدا شده‌اند، و ممکن است یک \f(CW\*(C`!\*(C'\fR در ابتدای آن‌ها برای معکوس کردن حالت گزینه قرار گیرد: .RS 4 .IP \fBall\fR 4 .IX Item "all" تمامی دستورالعمل‌های تخمین را فعال می‌کند. .IP \fBdefault\fR 4 .IX Item "default" دستورالعمل‌های پیش‌فرض را فعال می‌کند که معادل با \fB\-mrecip\fR است. .IP \fBnone\fR 4 .IX Item "none" تمامی دستورالعمل‌های تخمین را غیرفعال می‌کند که معادل با \fB\-mno\-recip\fR است. .IP \fBdiv\fR 4 .IX Item "div" دستورالعمل‌های تقریب معکوس را برای هر دو دقت یگانه و دقت مضاعف فعال می‌کند. .IP \fBdivf\fR 4 .IX Item "divf" دستورالعمل‌های تقریب معکوس با دقت یگانه را فعال می‌کند. .IP \fBdivd\fR 4 .IX Item "divd" دستورالعمل‌های تقریب معکوس با دقت مضاعف را فعال می‌کند. .IP \fBrsqrt\fR 4 .IX Item "rsqrt" دستورالعمل‌های تقریب ریشهٔ دوم معکوس را برای هر دو دقت یگانه و دقت مضاعف فعال می‌کند..IP \fBrsqrtf\fR 4 .IX Item "rsqrtf" دستورالعمل‌های تقریب جذر معکوس با دقت یگانه را فعال می‌کند. .IP \fBrsqrtd\fR 4 .IX Item "rsqrtd" دستورالعمل‌های تقریب جذر معکوس با دقت دوگانه را فعال می‌کند. .RE .RS 4 .Sp بنابراین، برای مثال، \fB\-mrecip=all,!rsqrtd\fR تمام دستورالعمل‌های تخمین معکوس را به جز دستورالعمل‌های \&\f(CW\*(C`FRSQRTE\*(C'\fR، \f(CW\*(C`XSRSQRTEDP\*(C'\fR و \f(CW\*(C`XVRSQRTEDP\*(C'\fR که محاسبات جذر معکوس با دقت دوگانه را مدیریت می‌کنند، فعال می‌سازد. .RE .IP \fB\-mrecip\-precision\fR 4 .IX Item "-mrecip-precision" .PD 0 .IP \fB\-mno\-recip\-precision\fR 4 .IX Item "-mno-recip-precision" .PD فرض می‌کند (فرض نمی‌کند) که دستورالعمل‌های تخمین معکوس، تخمین‌هایی با دقت بالاتر از آنچه توسط ABI در PowerPC تعیین شده ارائه می‌دهند. انتخاب \fB\-mcpu=power6\fR، \fB\-mcpu=power7\fR یا \&\fB\-mcpu=power8\fR به طور خودکار \fB\-mrecip\-precision\fR را فعال می‌کند. دستورالعمل‌های تخمین جذر با دقت دوگانه به طور پیش‌فرض روی ماشین‌های با دقت پایین تولید نمی‌شوند، زیرا تخمینی ارائه نمی‌دهند که پس از سه مرحله همگرا شود. .IP \fB\-mveclibabi=\fR\fItype\fR 4 .IX Item "-mveclibabi=type" نوع ABI مورد استفاده برای برداری‌سازی توابع درونی (intrinsics) با استفاده از یک کتابخانه خارجی را مشخص می‌کند. در حال حاضر تنها نوع پشتیبانی‌شده \fBmass\fR است که استفاده از کتابخانه‌های زیرسیستم شتاب‌دهی ریاضی شرکت IBM (موسوم به MASS) را برای برداری‌سازی توابع درونی با استفاده از کتابخانه‌های خارجی تعیین می‌کند. در حال حاضر GCC هنگام تولید کد برای power7، فراخوانی‌هایی را به \f(CW\*(C`acosd2\*(C'\fR، \f(CW\*(C`acosf4\*(C'\fR، \&\f(CW\*(C`acoshd2\*(C'\fR، \f(CW\*(C`acoshf4\*(C'\fR، \f(CW\*(C`asind2\*(C'\fR، \f(CW\*(C`asinf4\*(C'\fR، \&\f(CW\*(C`asinhd2\*(C'\fR، \f(CW\*(C`asinhf4\*(C'\fR، \f(CW\*(C`atan2d2\*(C'\fR، \f(CW\*(C`atan2f4\*(C'\fR، \&\f(CW\*(C`atand2\*(C'\fR، \f(CW\*(C`atanf4\*(C'\fR، \f(CW\*(C`atanhd2\*(C'\fR، \f(CW\*(C`atanhf4\*(C'\fR، \&\f(CW\*(C`cbrtd2\*(C'\fR، \f(CW\*(C`cbrtf4\*(C'\fR، \f(CW\*(C`cosd2\*(C'\fR، \f(CW\*(C`cosf4\*(C'\fR، \&\f(CW\*(C`coshd2\*(C'\fR، \f(CW\*(C`coshf4\*(C'\fR، \f(CW\*(C`erfcd2\*(C'\fR، \f(CW\*(C`erfcf4\*(C'\fR، \&\f(CW\*(C`erfd2\*(C'\fR، \f(CW\*(C`erff4\*(C'\fR، \f(CW\*(C`exp2d2\*(C'\fR، \f(CW\*(C`exp2f4\*(C'\fR، \&\f(CW\*(C`expd2\*(C'\fR، \f(CW\*(C`expf4\*(C'\fR، \f(CW\*(C`expm1d2\*(C'\fR، \f(CW\*(C`expm1f4\*(C'\fR، \&\f(CW\*(C`hypotd2\*(C'\fR، \f(CW\*(C`hypotf4\*(C'\fR، \f(CW\*(C`lgammad2\*(C'\fR، \f(CW\*(C`lgammaf4\*(C'\fR، \&\f(CW\*(C`log10d2\*(C'\fR، \f(CW\*(C`log10f4\*(C'\fR، \f(CW\*(C`log1pd2\*(C'\fR، \f(CW\*(C`log1pf4\*(C'\fR، \&\f(CW\*(C`log2d2\*(C'\fR، \f(CW\*(C`log2f4\*(C'\fR، \f(CW\*(C`logd2\*(C'\fR، \f(CW\*(C`logf4\*(C'\fR، \&\f(CW\*(C`powd2\*(C'\fR، \f(CW\*(C`powf4\*(C'\fR، \f(CW\*(C`sind2\*(C'\fR، \f(CW\*(C`sinf4\*(C'\fR، \f(CW\*(C`sinhd2\*(C'\fR، \&\f(CW\*(C`sinhf4\*(C'\fR، \f(CW\*(C`sqrtd2\*(C'\fR، \f(CW\*(C`sqrtf4\*(C'\fR، \f(CW\*(C`tand2\*(C'\fR، \&\f(CW\*(C`tanf4\*(C'\fR، \f(CW\*(C`tanhd2\*(C'\fR و \f(CW\*(C`tanhf4\*(C'\fR صادر می‌کند. هر دو گزینه \fB\-ftree\-vectorize\fR و \&\fB\-funsafe\-math\-optimizations\fR نیز باید فعال باشند. کتابخانه‌های MASS باید در زمان پیوند مشخص شوند. .IP \fB\-mfriz\fR 4 .IX Item "-mfriz" .PD 0 .IP \fB\-mno\-friz\fR 4 .IX Item "-mno-friz" .PD دستورالعمل \f(CW\*(C`friz\*(C'\fR را هنگامی که از گزینه \&\fB\-funsafe\-math\-optimizations\fR برای بهینه‌سازی گرد کردن مقادیر ممیز شناور به عدد صحیح ۶۴ بیتی و بازگشت به ممیز شناور استفاده می‌شود، تولید می‌کند (تولید نمی‌کند). اگر عدد ممیز شناور برای جا شدن در یک عدد صحیح بیش از حد بزرگ باشد، دستورالعمل \f(CW\*(C`friz\*(C'\fR مقدار یکسانی را بازنمی‌گرداند. .IP \fB\-mpointers\-to\-nested\-functions\fR 4 .IX Item "-mpointers-to-nested-functions" .PD 0 .IP \fB\-mno\-pointers\-to\-nested\-functions\fR 4 .IX Item "-mno-pointers-to-nested-functions" .PD کدی را برای بارگذاری ثبات زنجیره ایستا (\f(CW\*(C`r11\*(C'\fR) هنگام فراخوانی از طریق یک اشاره‌گر در سیستم‌های AIX و لینوکس ۶۴ بیتی تولید می‌کند (تولید نمی‌کند)؛ جایی که یک اشاره‌گر تابع به یک توصیف‌گر ۳ کلمه‌ای حاوی آدرس تابع، مقدار TOC برای بارگذاری در ثبات \f(CW\*(C`r2\*(C'\fR، و مقدار زنجیره ایستا برای بارگذاری در ثبات \f(CW\*(C`r11\*(C'\fR اشاره دارد. گزینه \&\fB\-mpointers\-to\-nested\-functions\fR به طور پیش‌فرض فعال است. اگر از \fB\-mno\-pointers\-to\-nested\-functions\fR استفاده کنید، نمی‌توانید از طریق اشاره‌گرها به توابع تودرتو یا اشاره‌گرها به توابعی که در سایر زبان‌ها کامپایل شده و از زنجیره ایستا استفاده می‌کنند، فراخوانی انجام دهید. .IP \fB\-msave\-toc\-indirect\fR 4 .IX Item "-msave-toc-indirect" .PD 0 .IP \fB\-mno\-save\-toc\-indirect\fR 4 .IX Item "-mno-save-toc-indirect" .PD در صورتی که تابع در سیستم‌های AIX و لینوکس ۶۴ بیتی از طریق یک اشاره‌گر فراخوانی کند، کدی برای ذخیره مقدار TOC در مکان رزروشده پشته در پیش‌درآمد تابع (prologue) تولید می‌کند (تولید نمی‌کند). اگر مقدار TOC در پیش‌درآمد ذخیره نشود، دقیقاً پیش از فراخوانی از طریق اشاره‌گر ذخیره خواهد شد. گزینه \fB\-mno\-save\-toc\-indirect\fR پیش‌فرض است. .IP \fB\-mcompat\-align\-parm\fR 4 .IX Item "-mcompat-align-parm" .PD 0 .IP \fB\-mno\-compat\-align\-parm\fR 4 .IX Item "-mno-compat-align-parm" .PD کدی را برای ارسال پارامترهای ساختار با حداکثر تراز ۶۴ بیتی، جهت سازگاری با نسخه‌های قدیمی‌تر GCC تولید می‌کند (تولید نمی‌کند). .Sp نسخه‌های قدیمی‌تر GCC (پیش از 4.9.0) زمانی که یک ساختار شامل عضوی نیازمند تراز ۱۲۸ بیتی بود، به اشتباه پارامتر ساختار را روی مرز ۱۲۸ بیتی تراز نمی‌کردند. این مورد در نسخه‌های جدیدتر GCC اصلاح شده است. این گزینه می‌تواند برای تولید کدی استفاده شود که با توابع کامپایل‌شده توسط نسخه‌های قدیمی‌تر GCC سازگار است. .Sp گزینه \fB\-mno\-compat\-align\-parm\fR پیش‌فرض است. .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4 .IX Item "-mstack-protector-guard=guard" .PD 0 .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4 .IX Item "-mstack-protector-guard-reg=reg" .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4 .IX Item "-mstack-protector-guard-offset=offset" .PD کد محافظت از پشته را با استفاده از قناری در \fIguard\fR تولید می‌کند. مکان‌های پشتیبانی‌شده عبارتند از \fBglobal\fR برای قناری سراسری یا \fBtls\fR برای قناری به ازای هر ریسه در بلوک TLS (پیش‌فرض در GNU libc نسخه 2.4 یا بالاتر). .Sp با انتخاب مورد دوم، گزینه‌های \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR و \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR افزون بر این مشخص می‌کنند که از کدام ثبات به عنوان ثبات پایه برای خواندن قناری، و از چه آفستی نسبت به آن ثبات پایه استفاده شود. مقدار پیش‌فرض آن‌ها همان است که در ABI مربوطه مشخص شده است. .IP \fB\-mpcrel\fR 4 .IX Item "-mpcrel" .PD 0 .IP \fB\-mno\-pcrel\fR 4 .IX Item "-mno-pcrel" .PD آدرس‌دهی وابسته به شمارنده برنامه (pc\-relative) را تولید می‌کند (تولید نمی‌کند). گزینه \fB\-mpcrel\fR نیازمند فعال بودن گزینه‌های مدل کد متوسط (\fB\-mcmodel=medium\fR) و آدرس‌دهی پیشوندی (\fB\-mprefixed\fR) است. .IP \fB\-mprefixed\fR 4 .IX Item "-mprefixed" .PD 0 .IP \fB\-mno\-prefixed\fR 4 .IX Item "-mno-prefixed" .PD حالت‌های آدرس‌دهی را با استفاده از دستورالعمل‌های بارگذاری و ذخیره‌سازی پیشوندی تولید می‌کند (تولید نمی‌کند). گزینه \fB\-mprefixed\fR مستلزم فعال بودن گزینه \fB\-mcpu=power10\fR (یا جدیدتر) است. .IP \fB\-mmma\fR 4 .IX Item "-mmma" .PD 0 .IP \fB\-mno\-mma\fR 4 .IX Item "-mno-mma" .PD دستورالعمل‌های MMA را تولید می‌کند (تولید نمی‌کند). گزینه \fB\-mma\fR مستلزم فعال بودن گزینه \fB\-mcpu=power10\fR (یا جدیدتر) است. .IP \fB\-mrop\-protect\fR 4 .IX Item "-mrop-protect" .PD 0 .IP \fB\-mno\-rop\-protect\fR 4 .IX Item "-mno-rop-protect" .PD دستورالعمل‌های محافظت در برابر ROP را در صورتی که پردازنده هدف از آن‌ها پشتیبانی کند، تولید می‌کند (تولید نمی‌کند). در حال حاضر این گزینه بهینه‌سازی shrink\-wrap (\fB\-fshrink\-wrap\fR) را غیرفعال می‌کند. .IP \fB\-mprivileged\fR 4 .IX Item "-mprivileged" .PD 0 .IP \fB\-mno\-privileged\fR 4 .IX Item "-mno-privileged" .PD کدی را تولید می‌کند (تولید نمی‌کند) که در وضعیت ممتاز (privileged state) اجرا خواهد شد. .IP \fB\-mblock\-ops\-unaligned\-vsx\fR 4 .IX Item "-mblock-ops-unaligned-vsx" .PD 0 .IP \fB\-mno\-block\-ops\-unaligned\-vsx\fR 4 .IX Item "-mno-block-ops-unaligned-vsx" .PD بارگذاری‌ها و ذخیره‌سازی‌های ترازنشده vsx را برای بسط درون‌خطی توابع \f(CW\*(C`memcpy\*(C'\fR و \f(CW\*(C`memmove\*(C'\fR تولید می‌کند (تولید نمی‌کند). .IP "\fB\-\-param rs6000\-vect\-unroll\-limit=\fR" 4 .IX Item "--param rs6000-vect-unroll-limit=" بردارساز با بررسی اطلاعات هدف تعیین می‌کند که آیا باز کردن حلقه اصلی برداری‌شده سودمند خواهد بود یا خیر و به چه میزان. این پارامتر کران بالای میزان باز کردن حلقه اصلی توسط بردارساز را تعیین می‌کند. مقدار پیش‌فرض چهار است..PP \fIگزینه‌های RX\fR .IX Subsection "RX Options" .PP این گزینه‌های خط فرمان برای مقصدهای RX تعریف شده‌اند: .IP \fB\-m64bit\-doubles\fR 4 .IX Item "-m64bit-doubles" .PD 0 .IP \fB\-m32bit\-doubles\fR 4 .IX Item "-m32bit-doubles" .PD اندازه نوع دادهٔ \f(CW\*(C`double\*(C'\fR را ۶۴ بیتی (\fB\-m64bit\-doubles\fR) یا ۳۲ بیتی (\fB\-m32bit\-doubles\fR) می‌کند. پیش‌فرض \&\fB\-m32bit\-doubles\fR است. \fIنکته\fR: سخت‌افزار ممیز شناور RX تنها روی مقادیر ۳۲ بیتی کار می‌کند، به همین دلیل پیش‌فرض \&\fB\-m32bit\-doubles\fR است. .IP \fB\-fpu\fR 4 .IX Item "-fpu" .PD 0 .IP \fB\-nofpu\fR 4 .IX Item "-nofpu" .PD استفاده از سخت‌افزار ممیز شناور RX را فعال (\fB\-fpu\fR) یا غیرفعال (\fB\-nofpu\fR) می‌کند. پیش‌فرض برای سری RX600 فعال و برای سری RX200 غیرفعال است. .Sp با این حال، دستورالعمل‌های ممیز شناور فقط برای مقادیر ممیز شناور ۳۲ بیتی تولید می‌شوند، بنابراین اگر از گزینهٔ \&\fB\-m64bit\-doubles\fR استفاده شود، سخت‌افزار FPU برای doubleها استفاده نمی‌شود. .Sp \&\fIنکته\fR: اگر گزینهٔ \fB\-fpu\fR فعال باشد، \&\fB\-funsafe\-math\-optimizations\fR نیز به‌طور خودکار فعال می‌شود. دلیل این امر این است که دستورالعمل‌های FPU در RX ذاتاً ناامن هستند. .IP \fB\-mcpu=\fR\fIname\fR 4 .IX Item "-mcpu=name" نوع پردازندهٔ RX مورد نظر برای هدف‌گیری را انتخاب می‌کند. در حال حاضر سه نوع پشتیبانی می‌شوند: سخت‌افزار عمومی سری \fBRX600\fR و \fBRX200\fR، و پردازندهٔ خاص \fBRX610\fR. پیش‌فرض \fBRX600\fR است. .Sp تنها تفاوت بین \fBRX600\fR و \fBRX610\fR این است که \&\fBRX610\fR از دستورالعمل \f(CW\*(C`MVTIPL\*(C'\fR پشتیبانی نمی‌کند. .Sp سری \fBRX200\fR دارای واحد سخت‌افزاری ممیز شناور نیست و بنابراین هنگام انتخاب این نوع، \fB\-nofpu\fR به‌طور پیش‌فرض فعال است. .IP \fB\-mbig\-endian\-data\fR 4 .IX Item "-mbig-endian-data" .PD 0 .IP \fB\-mlittle\-endian\-data\fR 4 .IX Item "-mlittle-endian-data" .PD داده‌ها (نه کد) را در قالب big\-endian ذخیره می‌کند. پیش‌فرض \&\fB\-mlittle\-endian\-data\fR است، یعنی ذخیره داده‌ها در قالب little\-endian. .IP \fB\-msmall\-data\-limit=\fR\fIN\fR 4 .IX Item "-msmall-data-limit=N" حداکثر اندازه (بر حسب بایت) متغیرهای سراسری و ایستا را که می‌توانند در ناحیهٔ داده‌های کوچک (small data area) قرار گیرند مشخص می‌کند. استفاده از ناحیهٔ داده‌های کوچک می‌تواند به کدی کوچک‌تر و سریع‌تر منجر شود، اما اندازهٔ این ناحیه محدود است و بر عهدهٔ برنامه‌نویس است که اطمینان حاصل کند ناحیه سرریز نشود. همچنین هنگامی که از ناحیهٔ داده‌های کوچک استفاده می‌شود، یکی از ثبات‌های RX (معمولاً \f(CW\*(C`r13\*(C'\fR) برای اشاره به این ناحیه رزرو می‌شود، بنابراین دیگر برای استفاده توسط کامپایلر در دسترس نیست. این امر در صورتی که متغیرها به جای نگهداری در این ثبات به درون پشته فرستاده شوند، می‌تواند منجر به کدی کُندتر و/یا بزرگ‌تر شود. .Sp توجه: متغیرهای عمومی (متغیرهایی که مقداردهی اولیه نشده‌اند) و ثابت‌ها در ناحیهٔ داده‌های کوچک قرار نمی‌گیرند، چرا که به بخش‌های دیگر در فایل اجرایی خروجی تخصیص داده می‌شوند. .Sp مقدار پیش‌فرض صفر است که این ویژگی را غیرفعال می‌کند. توجه داشته باشید این ویژگی با سطوح بهینه‌سازی بالاتر (\fB\-O2\fR و غیره) به‌طور پیش‌فرض فعال نمی‌شود، زیرا رزرو یک ثبات اثرات مخرب احتمالی دارد. این به عهدهٔ برنامه‌نویس است که آزمایش کرده و دریابد آیا این ویژگی به نفع برنامهٔ اوست یا خیر. برای شرح نحوهٔ انتخاب ثبات واقعی جهت نگهداری اشاره‌گر ناحیهٔ داده‌های کوچک، توضیحات گزینهٔ \fB\-mpid\fR را ببینید. .IP \fB\-msim\fR 4 .IX Item "-msim" .PD 0 .IP \fB\-mno\-sim\fR 4 .IX Item "-mno-sim" .PD از زمان اجرای شبیه‌ساز (simulator runtime) استفاده می‌کند. پیش‌فرض، استفاده از زمان اجرای خاصِ برد libgloss است. .IP \fB\-mas100\-syntax\fR 4 .IX Item "-mas100-syntax" .PD 0 .IP \fB\-mno\-as100\-syntax\fR 4 .IX Item "-mno-as100-syntax" .PD هنگام تولید خروجی اسمبلی، از نحو سازگار با اسمبلر AS100 شرکت Renesas استفاده می‌کند. این نحو توسط اسمبلر GAS نیز قابل پردازش است، اما محدودیت‌هایی دارد، بنابراین به‌طور پیش‌فرض تولید نمی‌شود. .IP \fB\-mmax\-constant\-size=\fR\fIN\fR 4 .IX Item "-mmax-constant-size=N" حداکثر اندازه (بر حسب بایت) ثابتی را مشخص می‌کند که می‌تواند به عنوان یک عملوند در یک دستورالعمل RX استفاده شود. اگرچه مجموعه دستورالعمل‌های RX اجازه می‌دهد ثابت‌هایی با طول حداکثر ۴ بایت در دستورالعمل‌ها استفاده شوند، مقدار طولانی‌تر معادل با دستورالعمل طولانی‌تر است. بنابراین در برخی شرایط محدود کردن اندازهٔ ثابت‌های مورد استفاده در دستورالعمل‌ها می‌تواند سودمند باشد. ثابت‌هایی که بیش از حد بزرگ هستند، در عوض در یک مخزن ثابت (constant pool) قرار گرفته و از طریق ارجاع باواسطهٔ ثبات به آن‌ها دسترسی پیدا می‌شود. .Sp مقدار \fIN\fR می‌تواند بین ۰ و ۴ باشد. مقدار ۰ (پیش‌فرض) یا ۴ بدان معناست که ثابت‌ها با هر اندازه‌ای مجاز هستند. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" بازآرایی پیونددهنده (linker relaxation) را فعال می‌کند. بازآرایی پیونددهنده فرآیندی است که طی آن پیونددهنده تلاش می‌کند با یافتن نگارش‌های کوتاه‌ترِ دستورالعمل‌های گوناگون، حجم برنامه را کاهش دهد. به‌طور پیش‌فرض غیرفعال است. .IP \fB\-mint\-register=\fR\fIN\fR 4 .IX Item "-mint-register=N" تعداد ثبات‌های رزرو شده برای توابع گردانندهٔ وقفهٔ سریع را مشخص می‌کند. مقدار \fIN\fR می‌تواند بین ۰ و ۴ باشد. مقدار ۱ بدین معناست که ثبات \f(CW\*(C`r13\*(C'\fR برای استفادهٔ اختصاصی گرداننده‌های وقفهٔ سریع رزرو می‌شود. مقدار ۲ ثبات‌های \f(CW\*(C`r13\*(C'\fR و \&\f(CW\*(C`r12\*(C'\fR را رزرو می‌کند. مقدار ۳ ثبات‌های \f(CW\*(C`r13\*(C'\fR، \f(CW\*(C`r12\*(C'\fR و \&\f(CW\*(C`r11\*(C'\fR، و مقدار ۴ ثبات‌های \f(CW\*(C`r13\*(C'\fR تا \f(CW\*(C`r10\*(C'\fR را رزرو می‌کند. مقدار ۰ که پیش‌فرض است، هیچ ثباتی را رزرو نمی‌کند. .IP \fB\-msave\-acc\-in\-interrupts\fR 4 .IX Item "-msave-acc-in-interrupts" مشخص می‌کند که توابع گردانندهٔ وقفه باید ثبات انباشتگر (accumulator) را حفظ کنند. این امر تنها در صورتی لازم است که کد عادی ممکن باشد از ثبات انباشتگر استفاده کند، به عنوان مثال چون ضرب‌های ۶۴ بیتی انجام می‌دهد. پیش‌فرض نادیده گرفتن انباشتگر است زیرا این کار گرداننده‌های وقفه را سریع‌تر می‌کند. .IP \fB\-mpid\fR 4 .IX Item "-mpid" .PD 0 .IP \fB\-mno\-pid\fR 4 .IX Item "-mno-pid" .PD تولید داده‌های مستقل از موقعیت (position independent data) را فعال می‌کند. هنگام فعال بودن، هرگونه دسترسی به داده‌های ثابت از طریق آفست نسبت به یک آدرس پایهٔ نگهداری‌شده در یک ثبات انجام می‌شود. این امکان می‌دهد مکان داده‌های ثابت در زمان اجرا بدون نیاز به بازنشانی (relocate) فایل اجرایی تعیین شود، که مزیتی برای برنامه‌های تعبیه‌شده با محدودیت‌های شدید حافظه است. داده‌هایی که قابل اصلاح هستند تحت تأثیر این گزینه قرار نمی‌گیرند. .Sp توجه: استفاده از این ویژگی یک ثبات، معمولاً \f(CW\*(C`r13\*(C'\fR، را برای آدرس پایهٔ داده‌های ثابت رزرو می‌کند. این می‌تواند منجر به کدی کُندتر و/یا بزرگ‌تر، به‌ویژه در توابع پیچیده، شود. .Sp ثبات واقعیِ انتخاب‌شده برای نگهداری آدرس پایهٔ داده‌های ثابت به این بستگی دارد که آیا گزینه‌های خط فرمان \fB\-msmall\-data\-limit\fR و/یا \&\fB\-mint\-register\fR فعال هستند یا خیر. تخصیص ثبات‌ها از ثبات \f(CW\*(C`r13\*(C'\fR آغاز شده و رو به پایین ادامه می‌یابد؛ ابتدا برای برآورده کردن نیازمندی‌های \fB\-mint\-register\fR، سپس \fB\-mpid\fR و در نهایت \fB\-msmall\-data\-limit\fR تخصیص می‌یابند. بنابراین اگر هر دو گزینهٔ \fB\-mint\-register=4\fR و \fB\-mpid\fR در خط فرمان مشخص شده باشند، ممکن است ثبات ناحیهٔ داده‌های کوچک \f(CW\*(C`r8\*(C'\fR باشد. .Sp این ویژگی به‌طور پیش‌فرض فعال نیست. مقدار پیش‌فرض را می‌توان از طریق گزینهٔ خط فرمان \fB\-mno\-pid\fR بازگرداند. .IP \fB\-mno\-warn\-multiple\-fast\-interrupts\fR 4 .IX Item "-mno-warn-multiple-fast-interrupts" .PD 0 .IP \fB\-mwarn\-multiple\-fast\-interrupts\fR 4 .IX Item "-mwarn-multiple-fast-interrupts" .PD از صدور پیام هشدار توسط GCC در صورتی که هنگام کامپایل یک فایل بیش از یک گردانندهٔ وقفهٔ سریع پیدا کند، جلوگیری می‌کند. پیش‌فرض این است که به ازای هر گردانندهٔ وقفهٔ سریع اضافیِ یافت‌شده یک هشدار صادر شود، زیرا RX تنها از یک وقفه از این نوع پشتیبانی می‌کند. .IP \fB\-mallow\-string\-insns\fR 4 .IX Item "-mallow-string-insns" .PD 0 .IP \fB\-mno\-allow\-string\-insns\fR 4 .IX Item "-mno-allow-string-insns" .PD استفاده از دستورالعمل‌های دستکاری رشتهٔ \&\f(CW\*(C`SMOVF\*(C'\fR، \f(CW\*(C`SCMPU\*(C'\fR، \f(CW\*(C`SMOVB\*(C'\fR، \f(CW\*(C`SMOVU\*(C'\fR، \f(CW\*(C`SUNTIL\*(C'\fR، \&\f(CW\*(C`SWHILE\*(C'\fR و همچنین دستورالعمل \f(CW\*(C`RMPA\*(C'\fR را فعال یا غیرفعال می‌کند. این دستورالعمل‌ها ممکن است داده‌ها را از پیش واکشی (prefetch) کنند که در صورت دسترسی به یک ثبات I/O ایمن نیست. (برای اطلاعات بیشتر به بخش 12.2.7 در RX62N Group User\*(Aqs Manual مراجعه کنید). .Sp پیش‌فرض مجاز بودن این دستورالعمل‌ها است، اما برای GCC ممکن نیست که همهٔ شرایطی را که ممکن است از یک دستورالعمل رشته برای دسترسی به یک ثبات I/O استفاده شود به‌طور مطمئن تشخیص دهد، بنابراین استفاده از آن‌ها نمی‌تواند به‌طور خودکار غیرفعال شود. در عوض به برنامه‌نویس واگذار شده است که در صورت دسترسی برنامه‌اش به فضای I/O، از گزینهٔ \fB\-mno\-allow\-string\-insns\fR استفاده کند. .Sp هنگامی که این دستورالعمل‌ها فعال هستند، GCC نماد پیش‌پردازندهٔ C با نام \f(CW\*(C`_\|_RX_ALLOW_STRING_INSNS_\|_\*(C'\fR را تعریف می‌کند، و در غیر این صورت نماد \f(CW\*(C`_\|_RX_DISALLOW_STRING_INSNS_\|_\*(C'\fR را تعریف می‌نماید..IP \fB\-mjsr\fR 4 .IX Item "-mjsr" .PD 0 .IP \fB\-mno\-jsr\fR 4 .IX Item "-mno-jsr" .PD فقط (یا نه فقط) از دستورالعمل‌های \f(CW\*(C`JSR\*(C'\fR برای دسترسی به توابع استفاده می‌کند. این گزینه را می‌توان زمانی استفاده کرد که اندازه کد از دامنه دستورالعمل‌های \f(CW\*(C`BSR\*(C'\fR فراتر می‌رود. توجه داشته باشید که \fB\-mno\-jsr\fR به معنای عدم استفاده از \&\f(CW\*(C`JSR\*(C'\fR نیست، بلکه بدین معناست که از هر نوع انشعابی می‌توان استفاده کرد. .PP \&\fIنکته:\fR گزینه خط فرمان عمومی GCC با عنوان \fB\-ffixed\-\fR\fIreg\fR در صورت استفاده با ویژگی تابع \f(CW\*(C`interrupt\*(C'\fR اهمیت خاصی برای پورت RX دارد. این ویژگی نشان‌دهنده تابعی است که برای پردازش وقفه‌های سریع در نظر گرفته شده است. GCC تضمین می‌کند که تنها از ثبات‌های \f(CW\*(C`r10\*(C'\fR، \f(CW\*(C`r11\*(C'\fR، \f(CW\*(C`r12\*(C'\fR و/یا \f(CW\*(C`r13\*(C'\fR استفاده کند و این تنها در صورتی است که استفاده معمول از ثبات‌های متناظر از طریق گزینه‌های خط فرمان \fB\-ffixed\-\fR\fIreg\fR یا \&\fB\-mint\-register\fR محدود شده باشد. .PP \fIگزینه‌های S/390 و zSeries\fR .IX Subsection "S/390 and zSeries Options" .PP این‌ها گزینه‌های \fB\-m\fR هستند که برای معماری S/390 و zSeries تعریف شده‌اند. .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD 0 .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD برای عملیات ممیز شناور از دستورالعمل‌ها و ثبات‌های ممیز شناور سخت‌افزاری استفاده می‌کند (یا نمی‌کند). وقتی \fB\-msoft\-float\fR مشخص شود، از توابع موجود در \fIlibgcc.a\fR برای انجام عملیات ممیز شناور استفاده می‌شود. وقتی \fB\-mhard\-float\fR مشخص شود، کامپایلر دستورالعمل‌های ممیز شناور IEEE را تولید می‌کند. این حالت پیش‌فرض است. .IP \fB\-mhard\-dfp\fR 4 .IX Item "-mhard-dfp" .PD 0 .IP \fB\-mno\-hard\-dfp\fR 4 .IX Item "-mno-hard-dfp" .PD برای عملیات ممیز شناور ده‌دهی از دستورالعمل‌های ممیز شناور ده‌دهی سخت‌افزاری استفاده می‌کند (یا نمی‌کند). وقتی \fB\-mno\-hard\-dfp\fR مشخص شود، از توابع موجود در \&\fIlibgcc.a\fR برای انجام عملیات ممیز شناور ده‌دهی استفاده می‌شود. وقتی \&\fB\-mhard\-dfp\fR مشخص شود، کامپایلر دستورالعمل‌های سخت‌افزاری ممیز شناور ده‌دهی تولید می‌کند. این حالت پیش‌فرض برای \fB\-march=z9\-ec\fR یا بالاتر است. .IP \fB\-mlong\-double\-64\fR 4 .IX Item "-mlong-double-64" .PD 0 .IP \fB\-mlong\-double\-128\fR 4 .IX Item "-mlong-double-128" .PD این سوئیچ‌ها اندازه نوع \f(CW\*(C`long double\*(C'\fR را کنترل می‌کنند. اندازه ۶۴ بیت باعث می‌شود نوع \f(CW\*(C`long double\*(C'\fR معادل نوع \f(CW\*(C`double\*(C'\fR شود. این حالت پیش‌فرض است. .IP \fB\-mbackchain\fR 4 .IX Item "-mbackchain" .PD 0 .IP \fB\-mno\-backchain\fR 4 .IX Item "-mno-backchain" .PD آدرس فریم فراخواننده را به عنوان اشاره‌گر زنجیره بازگشتی (backchain pointer) در فریم پشته فراخوانده‌شده ذخیره می‌کند (یا نمی‌کند). ممکن است برای امکان اشکال‌زدایی با استفاده از ابزارهایی که اطلاعات فریم فراخوانی DWARF را درک نمی‌کنند، یک backchain مورد نیاز باشد. هنگامی که \fB\-mno\-packed\-stack\fR فعال باشد، اشاره‌گر backchain در انتهای فریم پشته ذخیره می‌شود؛ هنگامی که \fB\-mpacked\-stack\fR فعال باشد، backchain در بالاترین کلمه ناحیه ذخیره ثبات ۹۶/۱۶۰ بایتی قرار می‌گیرد. .Sp به طور کلی، کدی که با \fB\-mbackchain\fR کامپایل شده است، با کدی که با \&\fB\-mno\-backchain\fR کامپایل شده از نظر فراخوانی سازگار است؛ با این حال، استفاده از backchain برای اهداف اشکال‌زدایی معمولاً نیازمند آن است که کل باینری با \&\fB\-mbackchain\fR ساخته شود. توجه داشته باشید که ترکیب \fB\-mbackchain\fR، \&\fB\-mpacked\-stack\fR و \fB\-mhard\-float\fR پشتیبانی نمی‌شود. برای ساخت کرنل لینوکس از \fB\-msoft\-float\fR استفاده کنید. .Sp پیش‌فرض این است که backchain نگهداری نشود. .IP \fB\-mpacked\-stack\fR 4 .IX Item "-mpacked-stack" .PD 0 .IP \fB\-mno\-packed\-stack\fR 4 .IX Item "-mno-packed-stack" .PD از طرح‌بندی پشته فشرده (packed stack layout) استفاده می‌کند (یا نمی‌کند). وقتی \fB\-mno\-packed\-stack\fR مشخص شود، کامپایلر از تمام فیلدهای ناحیه ذخیره ثبات ۹۶/۱۶۰ بایتی تنها برای هدف پیش‌فرض آن‌ها استفاده می‌کند؛ فیلدهای بلااستفاده همچنان فضای پشته را اشغال می‌کنند. وقتی \fB\-mpacked\-stack\fR مشخص شود، شیارهای ذخیره ثبات به طور متراکم در بالای ناحیه ذخیره ثبات بسته‌بندی می‌شوند؛ فضای استفاده‌نشده برای اهداف دیگر مجدداً استفاده می‌شود و امکان استفاده بهینه‌تر از فضای پشته در دسترس را فراهم می‌کند. با این حال، هنگامی که \fB\-mbackchain\fR نیز فعال باشد، بالاترین کلمه ناحیه ذخیره همیشه برای ذخیره backchain استفاده می‌شود و ثبات آدرس بازگشت همیشه دو کلمه پایین‌تر از backchain ذخیره می‌شود. .Sp تا زمانی که از backchain فریم پشته استفاده نشود، کد تولید شده با \&\fB\-mpacked\-stack\fR با کد تولید شده با \fB\-mno\-packed\-stack\fR از نظر فراخوانی سازگار است. توجه داشته باشید که برخی از نسخه‌های غیر FSF از GCC 2.95 برای S/390 یا zSeries کدی تولید می‌کردند که از backchain فریم پشته در زمان اجرا استفاده می‌کرد، نه صرفاً برای اهداف اشکال‌زدایی. چنین کدی با کد کامپایل شده با \&\fB\-mpacked\-stack\fR از نظر فراخوانی سازگار نیست. همچنین، توجه داشته باشید که ترکیب \fB\-mbackchain\fR، \fB\-mpacked\-stack\fR و \fB\-mhard\-float\fR پشتیبانی نمی‌شود. برای ساخت کرنل لینوکس از \fB\-msoft\-float\fR استفاده کنید. .Sp پیش‌فرض این است که از طرح‌بندی پشته فشرده استفاده نشود. .IP \fB\-msmall\-exec\fR 4 .IX Item "-msmall-exec" .PD 0 .IP \fB\-mno\-small\-exec\fR 4 .IX Item "-mno-small-exec" .PD کدی تولید می‌کند (یا تولید نمی‌کند) که از دستورالعمل \f(CW\*(C`bras\*(C'\fR برای فراخوانی زیرروال‌ها استفاده می‌کند. این کار تنها در صورتی با قابلیت اطمینان کار می‌کند که اندازه کل فایل اجرایی از 64k فراتر نرود. پیش‌فرض این است که به جای آن از دستورالعمل \f(CW\*(C`basr\*(C'\fR استفاده شود که این محدودیت را ندارد. .IP \fB\-m64\fR 4 .IX Item "-m64" .PD 0 .IP \fB\-m31\fR 4 .IX Item "-m31" .PD هنگامی که \fB\-m31\fR مشخص شود، کدی مطابق با ABI گنو/لینوکس برای S/390 تولید می‌کند. هنگامی که \fB\-m64\fR مشخص شود، کدی مطابق با ABI گنو/لینوکس برای zSeries تولید می‌کند. این امر به ویژه به GCC اجازه می‌دهد دستورالعمل‌های ۶۴ بیتی تولید کند. برای مقصدهای \fBs390\fR، پیش‌فرض \fB\-m31\fR است، در حالی که مقصدهای \&\fBs390x\fR به طور پیش‌فرض روی \fB\-m64\fR هستند. .IP \fB\-mzarch\fR 4 .IX Item "-mzarch" .PD 0 .IP \fB\-mesa\fR 4 .IX Item "-mesa" .PD هنگامی که \fB\-mzarch\fR مشخص شود، کدی را با استفاده از دستورالعمل‌های موجود در z/Architecture تولید می‌کند. هنگامی که \fB\-mesa\fR مشخص شود، کدی را با استفاده از دستورالعمل‌های موجود در ESA/390 تولید می‌کند. توجه داشته باشید که \fB\-mesa\fR همراه با \fB\-m64\fR امکان‌پذیر نیست. هنگام تولید کد سازگار با ABI گنو/لینوکس برای S/390، پیش‌فرض \fB\-mesa\fR است. هنگام تولید کد سازگار با ABI گنو/لینوکس برای zSeries، پیش‌فرض \fB\-mzarch\fR است. .IP \fB\-mhtm\fR 4 .IX Item "-mhtm" .PD 0 .IP \fB\-mno\-htm\fR 4 .IX Item "-mno-htm" .PD گزینه \fB\-mhtm\fR مجموعه‌ای از توابع درونی را فعال می‌کند که از دستورالعمل‌های موجود در امکانات اجرای تراکنشی معرفی‌شده با نسل ماشین IBM zEnterprise EC12 بهره می‌برند (بخش \fBS/390 System z Built\-in Functions\fR). \&\fB\-mhtm\fR هنگام استفاده از \fB\-march=zEC12\fR به طور پیش‌فرض فعال است. .IP \fB\-mvx\fR 4 .IX Item "-mvx" .PD 0 .IP \fB\-mno\-vx\fR 4 .IX Item "-mno-vx" .PD هنگامی که \fB\-mvx\fR مشخص شود، کدی را با استفاده از دستورالعمل‌های موجود در امکانات افزونه برداری معرفی‌شده با نسل ماشین IBM z13 تولید می‌کند. این گزینه ABI را برای برخی از مقادیر نوع برداری با توجه به هم‌ترازی و قراردادهای فراخوانی تغییر می‌دهد. در صورتی که مقادیر نوع برداری در زمینه‌ای مرتبط با ABI استفاده شوند، یک دستور GAS با نام \fB.gnu_attribute\fR برای نشانه‌گذاری باینری حاصل با ABI مورد استفاده اضافه خواهد شد. \&\fB\-mvx\fR هنگام استفاده از \fB\-march=z13\fR به طور پیش‌فرض فعال است. .IP \fB\-mzvector\fR 4 .IX Item "-mzvector" .PD 0 .IP \fB\-mno\-zvector\fR 4 .IX Item "-mno-zvector" .PD گزینه \fB\-mzvector\fR افزونه‌های زبانی برداری و توابع درونی را با استفاده از دستورالعمل‌های موجود در امکانات افزونه برداری معرفی‌شده با نسل ماشین IBM z13 فعال می‌کند. این گزینه امکان استفاده از \fBvector\fR را به عنوان کلمه کلیدی برای تعریف متغیرها و آرگومان‌های نوع برداری اضافه می‌کند. \fBvector\fR تنها زمانی در دسترس است که افزونه‌های GNU فعال باشند. در صورت درخواست انطباق دقیق با استاندارد مثلاً با \fB\-std=c99\fR، بسط داده نخواهد شد. علاوه بر توابع درونی سطح پایین GCC، گزینه \fB\-mzvector\fR مجموعه‌ای از توابع درونی اضافه‌شده برای سازگاری با پیاده‌سازی‌های سبک AltiVec مانند Power و Cell را نیز فعال می‌کند. برای استفاده از این توابع درونی، فایل سرآیند \fIvecintrin.h\fR باید گنجانده شود. \&\fB\-mzvector\fR به طور پیش‌فرض غیرفعال است..IP \fB\-mmvcle\fR 4 .IX Item "-mmvcle" .PD 0 .IP \fB\-mno\-mvcle\fR 4 .IX Item "-mno-mvcle" .PD تولید (یا عدم تولید) کدی که از دستور \f(CW\*(C`mvcle\*(C'\fR برای انجام جابه‌جایی‌های بلوکی استفاده می‌کند. هنگامی که \fB\-mno\-mvcle\fR مشخص شده باشد، به جای آن از یک حلقهٔ \f(CW\*(C`mvc\*(C'\fR استفاده می‌شود. این حالت پیش‌فرض است مگر اینکه بهینه‌سازی برای اندازه فعال باشد. .IP \fB\-mdebug\fR 4 .IX Item "-mdebug" .PD 0 .IP \fB\-mno\-debug\fR 4 .IX Item "-mno-debug" .PD چاپ کردن (یا عدم چاپ) اطلاعات اشکال‌زدایی اضافی هنگام کامپایل. حالت پیش‌فرض، عدم چاپ اطلاعات اشکال‌زدایی است. .IP \fB\-march=\fR\fIcpu\-type\fR 4 .IX Item "-march=cpu-type" تولید کدی که بر روی \fIcpu\-type\fR اجرا می‌شود، که نام سیستمی است که نوع خاصی از پردازنده را نشان می‌دهد. مقادیر ممکن برای \&\fIcpu\-type\fR عبارتند از \fBz900\fR/\fBarch5\fR، \fBz990\fR/\fBarch6\fR، \&\fBz9\-109\fR، \fBz9\-ec\fR/\fBarch7\fR، \fBz10\fR/\fBarch8\fR، \&\fBz196\fR/\fBarch9\fR، \fBzEC12\fR، \fBz13\fR/\fBarch11\fR، \&\fBz14\fR/\fBarch12\fR، \fBz15\fR/\fBarch13\fR، \&\fBz16\fR/\fBarch14\fR، \fBz17\fR/\fBarch15\fR، و \fBnative\fR. .Sp مقدار پیش‌فرض \fB\-march=z900\fR است. .Sp مشخص کردن \fBnative\fR به عنوان نوع پردازنده می‌تواند برای انتخاب بهترین گزینهٔ معماری برای پردازندهٔ میزبان استفاده شود. در صورتی که GCC پردازنده را شناسایی نکند، \&\fB\-march=native\fR هیچ اثری ندارد. .IP \fB\-mtune=\fR\fIcpu\-type\fR 4 .IX Item "-mtune=cpu-type" میزان‌سازی تمام جنبه‌های ممکن در کد تولیدشده متناسب با \fIcpu\-type\fR، به جز ABI و مجموعه دستورالعمل‌های دردسترس. فهرست مقادیر ممکن برای \fIcpu\-type\fR همانند \fB\-march\fR است. مقدار پیش‌فرض همان مقداری است که برای \fB\-march\fR استفاده شده است. .IP \fB\-mtpf\-trace\fR 4 .IX Item "-mtpf-trace" .PD 0 .IP \fB\-mno\-tpf\-trace\fR 4 .IX Item "-mno-tpf-trace" .PD تولید کدی که انشعاب‌های اختصاصی TPF OS را به روتین‌های ردیابی در سیستم‌عامل اضافه می‌کند (یا اضافه نمی‌کند). این گزینه به صورت پیش‌فرض غیرفعال است، حتی هنگام کامپایل برای TPF OS. .IP \fB\-mtpf\-trace\-skip\fR 4 .IX Item "-mtpf-trace-skip" .PD 0 .IP \fB\-mno\-tpf\-trace\-skip\fR 4 .IX Item "-mno-tpf-trace-skip" .PD تولید کدی که مقصدهای انشعاب پیش‌فرضِ فعال‌شده توسط \fB\-mtpf\-trace\fR را تغییر می‌دهد (یا تغییر نمی‌دهد) تا به روتین‌های ردیابی تخصصی اشاره کنند که امکان نادیده گرفتن انتخابیِ مدخل‌های ردیابی تابع را برای TPF OS فراهم می‌سازند. این گزینه به صورت پیش‌فرض غیرفعال است، حتی هنگام کامپایل برای TPF OS و مشخص کردن \fB\-mtpf\-trace\fR. .IP \fB\-mfused\-madd\fR 4 .IX Item "-mfused-madd" .PD 0 .IP \fB\-mno\-fused\-madd\fR 4 .IX Item "-mno-fused-madd" .PD تولید کدی که از دستورالعمل‌های ضرب و جمع ممیز شناور (multiply and accumulate) استفاده می‌کند (یا استفاده نمی‌کند). در صورت استفاده از ممیز شناور سخت‌افزاری، این دستورالعمل‌ها به صورت پیش‌فرض تولید می‌شوند. .IP \fB\-mwarn\-framesize=\fR\fIframesize\fR 4 .IX Item "-mwarn-framesize=framesize" ارائه یک هشدار در صورتی که تابع جاری از اندازهٔ فریم داده‌شده فراتر رود. از آنجا که این بررسی در زمان کامپایل انجام می‌شود، لزوماً به این معنی نیست که هنگام اجرای برنامه مشکلی واقعی رخ خواهد داد. هدف از آن شناسایی توابعی است که به احتمال زیاد باعث سرریز پشته (stack overflow) می‌شوند. این گزینه برای استفاده در محیط‌هایی با اندازهٔ پشتهٔ محدود، مانند هسته لینوکس، کاربردی است. .IP \fB\-mwarn\-dynamicstack\fR 4 .IX Item "-mwarn-dynamicstack" ارائه یک هشدار در صورتی که تابع \f(CW\*(C`alloca\*(C'\fR را فراخوانی کند یا از آرایه‌های با اندازهٔ پویا استفاده نماید. این کار معمولاً در شرایطی با اندازهٔ پشتهٔ محدود، ایدهٔ نامناسبی است. .IP \fB\-mstack\-guard=\fR\fIstack\-guard\fR 4 .IX Item "-mstack-guard=stack-guard" .PD 0 .IP \fB\-mstack\-size=\fR\fIstack\-size\fR 4 .IX Item "-mstack-size=stack-size" .PD اگر این گزینه‌ها مشخص شوند، بک‌اند S/390 دستورالعمل‌های اضافه‌ای در مقدمهٔ تابع صادر می‌کند که در صورتی که اندازهٔ پشته \fIstack\-guard\fR بایت فراتر از \fIstack\-size\fR باشد، یک تله (trap) ایجاد می‌کنند (به یاد داشته باشید که پشته در S/390 رو به پایین رشد می‌کند). اگر گزینهٔ \fIstack\-guard\fR مشخص نشود، کوچک‌ترین توان ۲ بزرگ‌تر از اندازهٔ فریم تابع کامپایل‌شده انتخاب می‌شود. این گزینه‌ها برای کمک به اشکال‌زدایی مشکلات سرریز پشته در نظر گرفته شده‌اند. کد اضافی تولیدشده سربار اندکی ایجاد می‌کند و بنابراین می‌تواند در سیستم‌های مشابه محیط عملیاتی نیز بدون افت چشمگیر کارایی استفاده شود. مقادیر داده‌شده باید دقیقاً توانی از ۲ باشند و \fIstack\-size\fR باید بزرگ‌تر از \&\fIstack\-guard\fR باشد بدون اینکه از 64k تجاوز کند. به منظور دستیابی به کارایی مناسب، کد اضافی این فرض را در نظر می‌گیرد که پشته در آدرسی هم‌تراز با مقدار ارائه‌شده توسط \fIstack\-size\fR آغاز می‌شود. گزینهٔ \fIstack\-guard\fR تنها همراه با \fIstack\-size\fR قابل استفاده است. .IP \fB\-mhotpatch=\fR\fIpre\-halfwords\fR\fB,\fR\fIpost\-halfwords\fR 4 .IX Item "-mhotpatch=pre-halfwords,post-halfwords" اگر گزینهٔ hotpatch فعال باشد، یک مقدمهٔ تابع برای «وصله‌زنی زنده» (hot-patching) برای تمام توابع موجود در واحد ترجمه تولید می‌شود. قبل از برچسب تابع، تعداد مشخصی از دستورالعمل‌های دو بایتی NOP قرار می‌گیرد (\fIpre\-halfwords\fR، حداکثر ۱۰۰۰۰۰۰). پس از برچسب، با استفاده از بزرگ‌ترین دستورالعمل‌های شبیه به NOP که معماری اجازه می‌دهد، به میزان 2 * \fIpost\-halfwords\fR بایت اضافه می‌شود (حداکثر ۱۰۰۰۰۰۰). .Sp اگر هر دو آرگومان صفر باشند، وصله‌زنی زنده غیرفعال می‌شود. .Sp این گزینه می‌تواند برای توابع مجزا با استفاده از صفت \&\f(CW\*(C`hotpatch\*(C'\fR بازنویسی شود. .PP \fIگزینه‌های SH\fR .IX Subsection "SH Options" .PP این گزینه‌های \fB\-m\fR برای پیاده‌سازی‌های SH تعریف شده‌اند: .IP \fB\-m1\fR 4 .IX Item "-m1" تولید کد برای SH1. .IP \fB\-m2\fR 4 .IX Item "-m2" تولید کد برای SH2. .IP \fB\-m2e\fR 4 .IX Item "-m2e" تولید کد برای SH2e. .IP \fB\-m2a\-nofpu\fR 4 .IX Item "-m2a-nofpu" تولید کد برای SH2a بدون FPU، یا برای یک SH2a\-FPU به گونه‌ای که از واحد ممیز شناور استفاده نشود. .IP \fB\-m2a\-single\-only\fR 4 .IX Item "-m2a-single-only" تولید کد برای SH2a\-FPU به گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف (double-precision) استفاده نشود. .IP \fB\-m2a\-single\fR 4 .IX Item "-m2a-single" تولید کد برای SH2a\-FPU با این فرض که واحد ممیز شناور به صورت پیش‌فرض در حالت دقت یگانه (single-precision) است. .IP \fB\-m2a\fR 4 .IX Item "-m2a" تولید کد برای SH2a\-FPU با این فرض که واحد ممیز شناور به صورت پیش‌فرض در حالت دقت مضاعف است. .IP \fB\-m3\fR 4 .IX Item "-m3" تولید کد برای SH3. .IP \fB\-m3e\fR 4 .IX Item "-m3e" تولید کد برای SH3e. .IP \fB\-m4\-nofpu\fR 4 .IX Item "-m4-nofpu" تولید کد برای SH4 بدون واحد ممیز شناور. .IP \fB\-m4\-single\-only\fR 4 .IX Item "-m4-single-only" تولید کد برای SH4 با واحد ممیز شناوری که تنها از محاسبات دقت یگانه پشتیبانی می‌کند. .IP \fB\-m4\-single\fR 4 .IX Item "-m4-single" تولید کد برای SH4 با این فرض که واحد ممیز شناور به صورت پیش‌فرض در حالت دقت یگانه است. .IP \fB\-m4\fR 4 .IX Item "-m4" تولید کد برای SH4. .IP \fB\-m4\-100\fR 4 .IX Item "-m4-100" تولید کد برای SH4\-100. .IP \fB\-m4\-100\-nofpu\fR 4 .IX Item "-m4-100-nofpu" تولید کد برای SH4\-100 به گونه‌ای که از واحد ممیز شناور استفاده نشود. .IP \fB\-m4\-100\-single\fR 4 .IX Item "-m4-100-single" تولید کد برای SH4\-100 با این فرض که واحد ممیز شناور به صورت پیش‌فرض در حالت دقت یگانه است. .IP \fB\-m4\-100\-single\-only\fR 4 .IX Item "-m4-100-single-only" تولید کد برای SH4\-100 به گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف استفاده نشود. .IP \fB\-m4\-200\fR 4 .IX Item "-m4-200" تولید کد برای SH4\-200..IP \fB\-m4\-200\-nofpu\fR 4 .IX Item "-m4-200-nofpu" تولید کد برای SH4\-200 به گونه‌ای که از واحد ممیز شناور استفاده نشود. .IP \fB\-m4\-200\-single\fR 4 .IX Item "-m4-200-single" تولید کد برای SH4\-200 با این فرض که واحد ممیز شناور به‌طور پیش‌فرض در حالت دقت منفرد (single\-precision) قرار دارد. .IP \fB\-m4\-200\-single\-only\fR 4 .IX Item "-m4-200-single-only" تولید کد برای SH4\-200 به گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف (double\-precision) استفاده نشود. .IP \fB\-m4\-300\fR 4 .IX Item "-m4-300" تولید کد برای SH4\-300. .IP \fB\-m4\-300\-nofpu\fR 4 .IX Item "-m4-300-nofpu" تولید کد برای SH4\-300 به گونه‌ای که از واحد ممیز شناور استفاده نشود. .IP \fB\-m4\-300\-single\fR 4 .IX Item "-m4-300-single" تولید کد برای SH4\-300 به گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف استفاده نشود. .IP \fB\-m4\-300\-single\-only\fR 4 .IX Item "-m4-300-single-only" تولید کد برای SH4\-300 به گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف استفاده نشود. .IP \fB\-m4\-340\fR 4 .IX Item "-m4-340" تولید کد برای SH4\-340 (بدون MMU، بدون FPU). .IP \fB\-m4\-500\fR 4 .IX Item "-m4-500" تولید کد برای SH4\-500 (بدون FPU). گزینهٔ \fB\-isa=sh4\-nofpu\fR را به اسمبلر منتقل می‌کند. .IP \fB\-m4a\-nofpu\fR 4 .IX Item "-m4a-nofpu" تولید کد برای SH4al\-dsp یا برای یک SH4a به گونه‌ای که از واحد ممیز شناور استفاده نشود. .IP \fB\-m4a\-single\-only\fR 4 .IX Item "-m4a-single-only" تولید کد برای SH4a، به گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف استفاده نشود. .IP \fB\-m4a\-single\fR 4 .IX Item "-m4a-single" تولید کد برای SH4a با این فرض که واحد ممیز شناور به‌طور پیش‌فرض در حالت دقت منفرد قرار دارد. .IP \fB\-m4a\fR 4 .IX Item "-m4a" تولید کد برای SH4a. .IP \fB\-m4al\fR 4 .IX Item "-m4al" مشابه \fB\-m4a\-nofpu\fR، به جز اینکه به‌طور ضمنی \fB\-dsp\fR را به اسمبلر ارسال می‌کند. GCC در حال حاضر هیچ دستورالعمل DSP تولید نمی‌کند. .IP \fB\-mb\fR 4 .IX Item "-mb" کامپایل کد برای پردازنده در حالت بزرگ‌پایان (big\-endian). .IP \fB\-ml\fR 4 .IX Item "-ml" کامپایل کد برای پردازنده در حالت کوچک‌پایان (little\-endian). .IP \fB\-mdalign\fR 4 .IX Item "-mdalign" تراز کردن متغیرهای double در مرزهای ۶۴ بیتی. توجه داشته باشید که این کار قراردادهای فراخوانی (calling conventions) را تغییر می‌دهد و بنابراین برخی از توابع کتابخانهٔ استاندارد C کار نخواهند کرد، مگر اینکه ابتدا آن را با \fB\-mdalign\fR دوباره کامپایل کنید. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" کوتاه‌تر کردن برخی از ارجاعات آدرس در زمان پیوند، در صورت امکان؛ از گزینهٔ لینکر \fB\-relax\fR استفاده می‌کند. .IP \fB\-mbigtable\fR 4 .IX Item "-mbigtable" استفاده از آفست‌های ۳۲ بیتی در جدول‌های \f(CW\*(C`switch\*(C'\fR. پیش‌فرض استفاده از آفست‌های ۱۶ بیتی است. .IP \fB\-mbitops\fR 4 .IX Item "-mbitops" فعال‌سازی استفاده از دستورالعمل‌های دستکاری بیتی روی SH2A. .IP \fB\-mfmovd\fR 4 .IX Item "-mfmovd" فعال‌سازی استفاده از دستورالعمل \f(CW\*(C`fmovd\*(C'\fR. برای محدودیت‌های ترازسازی، \fB\-mdalign\fR را بررسی کنید. .IP \fB\-mrenesas\fR 4 .IX Item "-mrenesas" پیروی از قراردادهای فراخوانی تعریف‌شده توسط Renesas. .IP \fB\-mno\-renesas\fR 4 .IX Item "-mno-renesas" پیروی از قراردادهای فراخوانی تعریف‌شده برای GCC پیش از دردسترس قرار گرفتن قراردادهای Renesas. این گزینه پیش‌فرض برای همهٔ مقصدهای زنجیره ابزار SH است. .IP \fB\-mnomacsave\fR 4 .IX Item "-mnomacsave" علامت‌گذاری ثبات \f(CW\*(C`MAC\*(C'\fR به عنوان call\-clobbered، حتی اگر \fB\-mrenesas\fR مشخص شده باشد. .IP \fB\-mieee\fR 4 .IX Item "-mieee" .PD 0 .IP \fB\-mno\-ieee\fR 4 .IX Item "-mno-ieee" .PD کنترل انطباق با استاندارد IEEE در مقایسه‌های ممیز شناور، که بر نحوهٔ مدیریت مواردی که نتیجه مقایسه نامرتب (unordered) است تأثیر می‌گذارد. به‌طور پیش‌فرض \fB\-mieee\fR به‌صورت ضمنی فعال است. اگر \fB\-ffinite\-math\-only\fR فعال باشد، \fB\-mno\-ieee\fR به‌طور ضمنی تنظیم می‌شود که منجر به مقایسه‌های ممیز شناور سریع‌تر برای بزرگتر یا مساوی و کوچکتر یا مساوی می‌گردد. تنظیمات ضمنی را می‌توان با تعیین \fB\-mieee\fR یا \fB\-mno\-ieee\fR بازنویسی کرد. .IP \fB\-minline\-ic_invalidate\fR 4 .IX Item "-minline-ic_invalidate" درون‌خط‌سازی (Inline) کد برای بی‌اعتبار کردن مدخل‌های حافظهٔ نهان دستورالعمل پس از برپایی ترامپولین‌های توابع تو در تو. این گزینه در صورتی که \fB\-musermode\fR اعمال شده باشد و گزینهٔ تولید کدِ انتخاب‌شده (مانند \fB\-m4\fR) اجازهٔ استفاده از دستورالعمل \f(CW\*(C`icbi\*(C'\fR را ندهد، هیچ اثری ندارد. اگر گزینهٔ تولید کدِ انتخاب‌شده اجازهٔ استفاده از دستورالعمل \f(CW\*(C`icbi\*(C'\fR را ندهد و \fB\-musermode\fR اعمال نشده باشد، کدِ درون‌خط‌شده مستقیماً آرایهٔ آدرس حافظهٔ نهان دستورالعمل را با یک نوشتن انجمنی دستکاری می‌کند. این کار نه‌تنها در زمان اجرا به حالت ممتاز (privileged mode) نیاز دارد، بلکه اگر خط کَش از طریق TLB نگاشت شده و سپس نگاشت آن حذف شده باشد، با شکست مواجه می‌شود. .IP \fB\-misize\fR 4 .IX Item "-misize" تخلیه اندازه و مکان دستورالعمل در کد اسمبلی. .IP \fB\-mpadstruct\fR 4 .IX Item "-mpadstruct" این گزینه منسوخ شده است. این گزینه ساختارها را به مضربی از ۴ بایت تراز/پد (pad) می‌کند، که با ABI معماری SH ناسازگار است. .IP \fB\-matomic\-model=\fR\fImodel\fR 4 .IX Item "-matomic-model=model" مدل عملیات اتمی و پارامترهای اضافی را به صورت فهرستی جداشده با کاما تعیین می‌کند. برای جزئیات در مورد توابع درونی (built-in) اتمی، به \fB_\|_atomic Builtins\fR مراجعه کنید. مدل‌ها و پارامترهای زیر پشتیبانی می‌شوند: .RS 4 .IP \fBnone\fR 4 .IX Item "none" غیرفعال کردن توالی‌های اتمیِ تولیدشده توسط کامپایلر و تولید فراخوانی‌های کتابخانه‌ای برای عملیات اتمی. این حالت در صورتی که مقصد \f(CW\*(C`sh*\-*\-linux*\*(C'\fR نباشد پیش‌فرض است. .IP \fBsoft\-gusa\fR 4 .IX Item "soft-gusa" تولید توالی‌های نرم‌افزاری اتمی gUSA سازگار با GNU/Linux برای توابع درونی اتمی. توالی‌های اتمی تولیدشده نیاز به پشتیبانی اضافی از کد مدیریت وقفه/استثنای سیستم دارند و فقط برای سیستم‌های تک‌هسته‌ای SH3* و SH4* مناسب هستند. این گزینه زمانی که مقصد \f(CW\*(C`sh*\-*\-linux*\*(C'\fR و SH3* یا SH4* باشد، به‌طور پیش‌فرض فعال است. هنگامی که مقصد SH4A باشد، این گزینه همچنین به منظور ایجاد کدی بهینه‌تر، تا حدی از دستورالعمل‌های سخت‌افزاری اتمی \f(CW\*(C`movli.l\*(C'\fR و \f(CW\*(C`movco.l\*(C'\fR بهره می‌برد، مگر اینکه \fBstrict\fR تعیین شده باشد. .IP \fBsoft\-tcb\fR 4 .IX Item "soft-tcb" تولید توالی‌های نرم‌افزاری اتمی که از یک متغیر در بلوک کنترل نخ (thread control block) استفاده می‌کنند. این گزینه‌ای دگرگون‌شده از توالی‌های gUSA است که می‌تواند روی مقصدهای SH1* و SH2* نیز استفاده شود. توالی‌های اتمی تولیدشده نیاز به پشتیبانی اضافی از سوی کد مدیریت وقفه/استثنای سیستم دارند و فقط برای سیستم‌های تک‌هسته‌ای مناسب هستند. هنگام استفاده از این مدل، پارامتر \fBgbr\-offset=\fR نیز باید مشخص شود. .IP \fBsoft\-imask\fR 4 .IX Item "soft-imask" تولید توالی‌های نرم‌افزاری اتمی که با تنظیم \f(CW\*(C`SR.IMASK = 1111\*(C'\fR به‌طور موقت وقفه‌ها را غیرفعال می‌کنند. این مدل تنها زمانی کار می‌کند که برنامه در حالت ممتاز (privileged mode) اجرا شود و فقط برای سیستم‌های تک‌هسته‌ای مناسب است. پشتیبانی اضافی از کد مدیریت وقفه/استثنای سیستم مورد نیاز نیست. این مدل زمانی که مقصد \f(CW\*(C`sh*\-*\-linux*\*(C'\fR و SH1* یا SH2* باشد به‌طور پیش‌فرض فعال است. .IP \fBhard\-llcs\fR 4 .IX Item "hard-llcs" تولید توالی‌های سخت‌افزاری اتمی صرفاً با استفاده از دستورالعمل‌های \f(CW\*(C`movli.l\*(C'\fR و \f(CW\*(C`movco.l\*(C'\fR. این مورد فقط در SH4A موجود است و برای سیستم‌های چندهسته‌ای مناسب است. از آنجا که دستورالعمل‌های سخت‌افزاری فقط از متغیرهای اتمی ۳۲ بیتی پشتیبانی می‌کنند، دسترسی به متغیرهای ۸ یا ۱۶ بیتی با دسترسی‌های ۳۲ بیتی شبیه‌سازی (emulate) می‌شود. کد کامپایل‌شده با این گزینه، در صورت اجرا روی سیستم SH4A، با سیستم‌های مدیریت وقفه/استثنای دیگر مدل‌های نرم‌افزاری اتمی نیز سازگار است. برای این مدل پشتیبانی اضافی از کد مدیریت وقفه/استثنای سیستم لازم نیست. .IP \fBgbr\-offset=\fR 4 .IX Item "gbr-offset=" این پارامتر آفست (بر حسب بایت) متغیر موجود در ساختار بلوک کنترل نخ را مشخص می‌کند که باید توسط توالی‌های اتمی تولیدشده در صورت انتخاب مدل \fBsoft\-tcb\fR مورد استفاده قرار گیرد. برای سایر مدل‌ها این پارامتر نادیده گرفته می‌شود. مقدار مشخص‌شده باید یک مضرب صحیح از چهار و در محدودهٔ ۰\-۱۰۲۰ باشد. .IP \fBstrict\fR 4 .IX Item "strict" این پارامتر از استفادهٔ ترکیبی چندین مدل اتمی، حتی در صورت سازگاری، جلوگیری می‌کند و کامپایلر را وادار می‌سازد تا توالی‌های اتمی را فقط طبق مدل تعیین‌شده تولید کند. .RE .RS 4 .RE.IP \fB\-mtas\fR 4 .IX Item "-mtas" آپ‌کد \f(CW\*(C`tas.b\*(C'\fR را برای \f(CW\*(C`_\|_atomic_test_and_set\*(C'\fR تولید می‌کند. توجه داشته باشید که بسته به پیکربندی سخت‌افزاری و نرم‌افزاری خاص، این امر می‌تواند به دلیل تخلیه خط حافظه نهان عملوند که ناشی از دستور \f(CW\*(C`tas.b\*(C'\fR است، کارایی کلی را کاهش دهد. در پردازنده‌های چند‌هسته‌ای SH4A، دستور \f(CW\*(C`tas.b\*(C'\fR باید با احتیاط استفاده شود، چرا که برای برخی از پیکربندی‌های حافظه نهان می‌تواند منجر به خرابی داده‌ها شود. .IP \fB\-mprefergot\fR 4 .IX Item "-mprefergot" هنگام تولید کد مستقل از موقعیت، فراخوانی‌های توابع را به جای جدول پیوند رویه (PLT) با استفاده از جدول آفست سراسری (GOT) صادر می‌کند. .IP \fB\-musermode\fR 4 .IX Item "-musermode" .PD 0 .IP \fB\-mno\-usermode\fR 4 .IX Item "-mno-usermode" .PD به کامپایلر اجازه تولید کد حالت ممتازه (privileged mode) را نمی‌دهد (اجازه می‌دهد). تعیین \fB\-musermode\fR همچنین در صورتی که کد درون‌خطی‌شده در حالت کاربر کار نکند، مستلزم \fB\-mno\-inline\-ic_invalidate\fR است. هنگامی که هدف \f(CW\*(C`sh*\-*\-linux*\*(C'\fR باشد، \fB\-musermode\fR پیش‌فرض است. اگر هدف *SH1 یا *SH2 باشد، گزینه \fB\-musermode\fR هیچ تأثیری ندارد، زیرا حالت کاربر وجود ندارد. .IP \fB\-multcost=\fR\fInumber\fR 4 .IX Item "-multcost=number" هزینه فرضی برای یک دستور ضرب را تعیین می‌کند. .IP \fB\-mdiv=\fR\fIstrategy\fR 4 .IX Item "-mdiv=strategy" راهبرد تقسیم مورد استفاده برای عملیات تقسیم عدد صحیح را تعیین می‌کند. \&\fIstrategy\fR می‌تواند یکی از موارد زیر باشد: .RS 4 .IP \fBcall\-div1\fR 4 .IX Item "call-div1" تابعی از کتابخانه را فراخوانی می‌کند که از دستور تقسیم تک‌مرحله‌ای \f(CW\*(C`div1\*(C'\fR برای انجام عملیات استفاده می‌کند. تقسیم بر صفر نتیجه‌ای نامشخص محاسبه کرده و تله (trap) ایجاد نمی‌کند. این حالت پیش‌فرض است، مگر برای SH4، SH2A و SHcompact. .IP \fBcall\-fp\fR 4 .IX Item "call-fp" تابعی از کتابخانه را فراخوانی می‌کند که عملیات را با ممیز شناور با دقت مضاعف انجام می‌دهد. تقسیم بر صفر باعث ایجاد یک استثنای ممیز شناور می‌شود. این حالت پیش‌فرض برای SHcompact دارای FPU است. تعیین این گزینه برای اهدافی که FPU با دقت مضاعف ندارند، به طور پیش‌فرض به \f(CW\*(C`call\-div1\*(C'\fR تغییر می‌یابد. .IP \fBcall\-table\fR 4 .IX Item "call-table" تابعی از کتابخانه را فراخوانی می‌کند که از یک جدول جستجو برای مقسوم‌علیه‌های کوچک و از دستور \f(CW\*(C`div1\*(C'\fR با تفکیک حالات برای مقسوم‌علیه‌های بزرگتر استفاده می‌کند. تقسیم بر صفر نتیجه‌ای نامشخص محاسبه کرده و trap ایجاد نمی‌کند. این حالت پیش‌فرض برای SH4 است. تعیین این گزینه برای اهدافی که دستورهای شیفت پویا ندارند، به طور پیش‌فرض به \f(CW\*(C`call\-div1\*(C'\fR برمی‌گردد. .RE .RS 4 .Sp هنگامی که راهبرد تقسیم مشخص نشده باشد، راهبرد پیش‌فرض بر اساس هدف جاری انتخاب می‌شود. برای SH2A، راهبرد پیش‌فرض استفاده از دستورهای \f(CW\*(C`divs\*(C'\fR و \f(CW\*(C`divu\*(C'\fR به جای فراخوانی‌های توابع کتابخانه‌ای است. .RE .IP \fB\-maccumulate\-outgoing\-args\fR 4 .IX Item "-maccumulate-outgoing-args" فضا را برای آرگومان‌های خروجی یک بار در مقدمه تابع (function prologue) رزرو می‌کند، نه در اطراف هر فراخوانی. این کار به طور کلی برای کارایی و اندازه کد مفید است. همچنین برای باز کردن پشته (unwinding) جهت جلوگیری از تغییر چارچوب پشته در اطراف کدهای شرطی مورد نیاز است. .IP \fB\-mdivsi3_libfunc=\fR\fIname\fR 4 .IX Item "-mdivsi3_libfunc=name" نام تابع کتابخانه‌ای مورد استفاده برای تقسیم علامت‌دار ۳۲ بیتی را روی \fIname\fR تنظیم می‌کند. این گزینه فقط بر نام استفاده‌شده در راهبردهای تقسیم \fBcall\fR تأثیر می‌گذارد و کامپایلر همچنان انتظار همان مجموعه‌های ثبات‌های ورودی/خروجی/تخریب‌شده (clobbered) را دارد که گویی این گزینه وجود نداشته است. .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4 .IX Item "-mfixed-range=register-range" کدی تولید می‌کند که با محدوده ثبات‌های ارائه‌شده به عنوان ثبات‌های ثابت برخورد می‌کند. یک ثبات ثابت ثباتی است که تخصیص‌دهنده ثبات (register allocator) نمی‌تواند از آن استفاده کند. این گزینه هنگام کامپایل کد هسته کاربرد دارد. یک محدوده ثبات به صورت دو ثبات جدا شده با خط تیره مشخص می‌شود. چندین محدوده ثبات را می‌توان با کاما از یکدیگر جدا کرد. .IP \fB\-mbranch\-cost=\fR\fInum\fR 4 .IX Item "-mbranch-cost=num" مقدار \fInum\fR را به عنوان هزینه یک دستور پرش (branch) در نظر می‌گیرد. مقادیر بالاتر باعث می‌شوند کامپایلر تلاش کند در صورت امکان کدهای بدون پرش بیشتری تولید کند. در صورت عدم تعیین، این مقدار بسته به نوع پردازنده‌ای که برای آن کامپایل انجام می‌شود، انتخاب می‌گردد. .IP \fB\-mzdcbranch\fR 4 .IX Item "-mzdcbranch" .PD 0 .IP \fB\-mno\-zdcbranch\fR 4 .IX Item "-mno-zdcbranch" .PD فرض می‌کند (فرض نمی‌کند) که دستورهای پرش شرطی با جابه‌جایی صفر (zero displacement) \&\f(CW\*(C`bt\*(C'\fR و \f(CW\*(C`bf\*(C'\fR سریع هستند. اگر \fB\-mzdcbranch\fR مشخص شود، کامپایلر توالی‌های کد پرش با جابه‌جایی صفر را ترجیح می‌دهد. این گزینه هنگام تولید کد برای SH4 و SH4A به طور پیش‌فرض فعال است. می‌توان آن را با تعیین صریح \fB\-mno\-zdcbranch\fR غیرفعال کرد. .IP \fB\-mcbranch\-force\-delay\-slot\fR 4 .IX Item "-mcbranch-force-delay-slot" استفاده از شکاف‌های تأخیر (delay slots) را برای پرش‌های شرطی اجباری می‌کند؛ که در صورت پیدا نشدن دستور مناسب، شکاف تأخیر را با یک \f(CW\*(C`nop\*(C'\fR پر می‌کند. به طور پیش‌فرض این گزینه غیرفعال است. می‌توان آن را برای دور زدن اشکالات سخت‌افزاری مانند آنچه در SH7055 اصلی یافت می‌شود فعال کرد. .IP \fB\-mfused\-madd\fR 4 .IX Item "-mfused-madd" .PD 0 .IP \fB\-mno\-fused\-madd\fR 4 .IX Item "-mno-fused-madd" .PD کدی تولید می‌کند که از دستورهای ضرب و جمع ممیز شناور استفاده می‌کند (استفاده نمی‌کند). در صورت استفاده از ممیز شناور سخت‌افزاری، این دستورها به طور پیش‌فرض تولید می‌شوند. گزینه وابسته به ماشین \fB\-mfused\-madd\fR اکنون به گزینه مستقل از ماشین \&\fB\-ffp\-contract=fast\fR و \fB\-mno\-fused\-madd\fR به \fB\-ffp\-contract=off\fR نگاشت شده است. .IP \fB\-mfsca\fR 4 .IX Item "-mfsca" .PD 0 .IP \fB\-mno\-fsca\fR 4 .IX Item "-mno-fsca" .PD به کامپایلر اجازه می‌دهد یا نمی‌دهد که دستور \f(CW\*(C`fsca\*(C'\fR را برای تقریب سینوس و کسینوس صادر کند. گزینه \fB\-mfsca\fR باید در ترکیب با \fB\-funsafe\-math\-optimizations\fR استفاده شود. این گزینه به طور پیش‌فرض هنگام تولید کد برای SH4A فعال است. استفاده از \&\fB\-mno\-fsca\fR تقریب‌های سینوس و کسینوس را غیرفعال می‌کند، حتی اگر \&\fB\-funsafe\-math\-optimizations\fR اعمال شده باشد. .IP \fB\-mfsrra\fR 4 .IX Item "-mfsrra" .PD 0 .IP \fB\-mno\-fsrra\fR 4 .IX Item "-mno-fsrra" .PD به کامپایلر اجازه می‌دهد یا نمی‌دهد که دستور \f(CW\*(C`fsrra\*(C'\fR را برای تقریب جذر معکوس (reciprocal square root) صادر کند. گزینه \fB\-mfsrra\fR باید در ترکیب با \&\fB\-funsafe\-math\-optimizations\fR و \fB\-ffinite\-math\-only\fR استفاده شود. این گزینه به طور پیش‌فرض هنگام تولید کد برای SH4A فعال است. استفاده از \fB\-mno\-fsrra\fR تقریب جذر معکوس را غیرفعال می‌کند حتی اگر \fB\-funsafe\-math\-optimizations\fR و \&\fB\-ffinite\-math\-only\fR اعمال شده باشند. .IP \fB\-mpretend\-cmove\fR 4 .IX Item "-mpretend-cmove" پرش‌های شرطی با جابه‌جایی صفر را برای الگوهای دستور انتقال شرطی (conditional move) ترجیح می‌دهد. این امر می‌تواند منجر به کدهای سریع‌تر در پردازنده SH4 شود. .IP \fB\-mfdpic\fR 4 .IX Item "-mfdpic" کد را با استفاده از ABI مربوط به FDPIC تولید می‌کند. .PP \fIگزینه‌های Solaris 2\fR .IX Subsection "Solaris 2 Options" .PP این گزینه‌های \fB\-m\fR در Solaris 2 پشتیبانی می‌شوند: .IP \fB\-mclear\-hwcap\fR 4 .IX Item "-mclear-hwcap" گزینه \fB\-mclear\-hwcap\fR به کامپایلر اعلام می‌کند قابلیت‌های سخت‌افزاری تولیدشده توسط اسمبلر Solaris را حذف کند. این گزینه فقط زمانی ضروری است که فایل‌های شیء از افزونه‌های معماری مجموعه دستورات (ISA) استفاده کنند که توسط ماشین فعلی پشتیبانی نمی‌شود، اما در زمان اجرا بررسی می‌کنند که آیا باید از آن‌ها استفاده شود یا خیر. .IP \fB\-mimpure\-text\fR 4 .IX Item "-mimpure-text" گزینه \fB\-mimpure\-text\fR که علاوه بر \fB\-shared\fR استفاده می‌شود، به کامپایلر می‌گوید هنگام پیوند یک شیء اشتراکی، \fB\-z text\fR را به پیونددهنده ارسال نکند. با استفاده از این گزینه، می‌توانید کدهای وابسته به موقعیت را در یک شیء اشتراکی پیوند دهید. .Sp گزینه \fB\-mimpure\-text\fR پیام خطای پیونددهنده مبنی بر "relocations remain against allocatable but non\-writable sections" را سرکوب می‌کند. با این حال، بازنشانی‌های ضروری باعث فعال شدن رونویسی در زمان نوشتن (copy\-on\-write) می‌شوند و شیء اشتراکی در واقع بین فرایندها به اشتراک گذاشته نمی‌شود. به جای استفاده از \&\fB\-mimpure\-text\fR، باید تمام کد منبع را با \fB\-fpic\fR یا \fB\-fPIC\fR کامپایل کنید. .PP علاوه بر موارد بالا، این سوئیچ‌ها در Solaris 2 پشتیبانی می‌شوند: .IP \fB\-pthreads\fR 4 .IX Item "-pthreads" این یک مترادف برای \fB\-pthread\fR است. .PP \fIگزینه‌های SPARC\fR .IX Subsection "SPARC Options" .PP این گزینه‌های \fB\-m\fR در SPARC پشتیبانی می‌شوند: .IP \fB\-mno\-app\-regs\fR 4 .IX Item "-mno-app-regs" .PD 0.IP \fB\-mapp\-regs\fR 4 .IX Item "-mapp-regs" .PD مشخص کردن \fB\-mapp\-regs\fR باعث تولید خروجی با استفاده از ثبات‌های سراسری (global registers) ۲ تا ۴ می‌شود، که SPARC SVR4 ABI آنها را برای برنامه‌های کاربردی رزرو کرده است. مشابه ثبات سراسری ۱، هر یک از ثبات‌های سراسری ۲ تا ۴ به عنوان یک ثبات قابل‌تخصیص در نظر گرفته می‌شوند که فراخوانی توابع مقدار آن‌ها را بازنویسی (clobber) می‌کند. این حالت پیش‌فرض است. .Sp برای سازگاری کامل با SVR4 ABI به قیمت مقداری افت کارایی، گزینه \fB\-mno\-app\-regs\fR را مشخص کنید. شما باید کتابخانه‌ها و نرم‌افزارهای سیستمی را با این گزینه کامپایل کنید. .IP \fB\-mflat\fR 4 .IX Item "-mflat" .PD 0 .IP \fB\-mno\-flat\fR 4 .IX Item "-mno-flat" .PD با \fB\-mflat\fR، کامپایلر دستورالعمل‌های save/restore را تولید نمی‌کند و از یک مدل «مسطح» (flat) یا پنجره ثبات تکی استفاده می‌کند. این مدل با مدل پنجره ثبات معمولی سازگار است. ثبات‌های محلی و ثبات‌های ورودی (۰\-\-۵) همچنان به عنوان ثبات‌های «حفظ‌شده در فراخوانی» (call\-saved) در نظر گرفته می‌شوند و در صورت نیاز روی پشته ذخیره می‌شوند. .Sp با \fB\-mno\-flat\fR (حالت پیش‌فرض)، کامپایلر دستورالعمل‌های save/restore را (به جز برای توابع برگ یا leaf) تولید می‌کند. این حالت کارکرد عادی است. .IP \fB\-mfpu\fR 4 .IX Item "-mfpu" .PD 0 .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD تولید خروجیِ حاوی دستورالعمل‌های ممیز شناور (floating\-point). این حالت پیش‌فرض است. .IP \fB\-mno\-fpu\fR 4 .IX Item "-mno-fpu" .PD 0 .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD تولید خروجیِ حاوی فراخوانی‌های کتابخانه‌ای برای ممیز شناور. \&\fBهشدار:\fR کتابخانه‌های مورد نیاز برای تمام اهداف SPARC در دسترس نیستند. به طور معمول از امکانات کامپایلر C پیش‌فرض ماشین استفاده می‌شود، اما این کار در کامپایل متقاطع (cross\-compilation) به طور مستقیم امکان‌پذیر نیست. برای کامپایل متقاطع، باید تمهیدات لازم را برای ارائه توابع کتابخانه‌ای مناسب فراهم کنید. اهداف توکار (embedded) شامل \fBsparc\-*\-aout\fR و \&\fBsparclite\-*\-*\fR از ممیز شناور نرم‌افزاری پشتیبانی می‌کنند. .Sp گزینه \&\fB\-msoft\-float\fR شیوه فراخوانی (calling convention) را در فایل خروجی تغییر می‌دهد؛ بنابراین، تنها در صورتی مفید است که \fIتمام\fR برنامه را با این گزینه کامپایل کنید. به ویژه، برای کارکرد درست لازم است \fIlibgcc.a\fR (کتابخانه‌ای که همراه GCC ارائه می‌شود) را با \fB\-msoft\-float\fR کامپایل کنید. .IP \fB\-mhard\-quad\-float\fR 4 .IX Item "-mhard-quad-float" تولید خروجیِ حاوی دستورالعمل‌های ممیز شناور چهارکلمه‌ای (quad\-word یا long double). .IP \fB\-msoft\-quad\-float\fR 4 .IX Item "-msoft-quad-float" تولید خروجیِ حاوی فراخوانی‌های کتابخانه‌ای برای دستورالعمل‌های ممیز شناور چهارکلمه‌ای (quad\-word یا long double). توابع فراخوانی‌شده همان‌هایی هستند که در SPARC ABI مشخص شده‌اند. این حالت پیش‌فرض است. .Sp تا زمان نگارش این متن، هیچ پیاده‌سازی از SPARC وجود ندارد که پشتیبانی سخت‌افزاری از دستورالعمل‌های ممیز شناور quad\-word داشته باشد. همه آن‌ها برای چنین دستورالعمل‌هایی یک گرداننده تله (trap handler) را فراخوانی می‌کنند، و سپس گرداننده تله اثر دستورالعمل را شبیه‌سازی می‌کند. به دلیل سربار گرداننده تله، این روش بسیار کندتر از فراخوانی توابع کتابخانه‌ای ABI است. بنابراین گزینه \&\fB\-msoft\-quad\-float\fR پیش‌فرض است. .IP \fB\-mno\-unaligned\-doubles\fR 4 .IX Item "-mno-unaligned-doubles" .PD 0 .IP \fB\-munaligned\-doubles\fR 4 .IX Item "-munaligned-doubles" .PD فرض می‌کند که مقادیر double هم‌ترازی (alignment) ۸ بایتی دارند. این حالت پیش‌فرض است. .Sp با \fB\-munaligned\-doubles\fR، کامپایلر GCC تنها زمانی فرض می‌کند که مقادیر double هم‌ترازی ۸ بایتی دارند که در نوع داده دیگری قرار گرفته باشند، یا دارای آدرس مطلق باشند. در غیر این صورت، فرض می‌کند که هم‌ترازی ۴ بایتی دارند. تعیین این گزینه از برخی مشکلات نادر سازگاری با کدهای تولیدشده توسط کامپایلرهای دیگر جلوگیری می‌کند. این گزینه به عنوان پیش‌فرض نیست زیرا باعث افت کارایی، به ویژه برای کدهای ممیز شناور، می‌شود. .IP \fB\-muser\-mode\fR 4 .IX Item "-muser-mode" .PD 0 .IP \fB\-mno\-user\-mode\fR 4 .IX Item "-mno-user-mode" .PD کدی را که فقط می‌تواند در حالت ناظر (supervisor mode) اجرا شود، تولید نمی‌کند. این موضوع فقط برای دستورالعمل \f(CW\*(C`casa\*(C'\fR که برای پردازنده LEON3 صادر می‌شود صدق می‌کند. این حالت پیش‌فرض است. .IP \fB\-mfaster\-structs\fR 4 .IX Item "-mfaster-structs" .PD 0 .IP \fB\-mno\-faster\-structs\fR 4 .IX Item "-mno-faster-structs" .PD با \fB\-mfaster\-structs\fR، کامپایلر فرض می‌کند که ساختارها (structures) باید هم‌ترازی ۸ بایتی داشته باشند. این امر استفاده از جفت‌دستورالعمل‌های \f(CW\*(C`ldd\*(C'\fR و \f(CW\*(C`std\*(C'\fR را برای کپی‌ها در انتساب ساختار، به جای دو برابر جفت‌های \f(CW\*(C`ld\*(C'\fR و \f(CW\*(C`st\*(C'\fR ممکن می‌سازد. با این حال، استفاده از این هم‌ترازیِ تغییریافته مستقیماً SPARC ABI را نقض می‌کند. از این رو، این گزینه فقط برای اهدافی در نظر گرفته شده است که توسعه‌دهنده می‌داند کد حاصل مستقیماً با قواعد ABI مطابقت ندارد. .IP \fB\-mstd\-struct\-return\fR 4 .IX Item "-mstd-struct-return" .PD 0 .IP \fB\-mno\-std\-struct\-return\fR 4 .IX Item "-mno-std-struct-return" .PD با \fB\-mstd\-struct\-return\fR، کامپایلر کدهای کنترلی را در توابعی که ساختار (structure) یا اجتماع (union) برمی‌گردانند تولید می‌کند تا بر اساس ABI ۳۲ بیتی، عدم تطابق اندازه میان دو طرف فراخوانی تابع را تشخیص دهد. .Sp حالت پیش‌فرض \fB\-mno\-std\-struct\-return\fR است. این گزینه در حالت ۶۴ بیتی هیچ تاثیری ندارد. .IP \fB\-mcpu=\fR\fIcpu_type\fR 4 .IX Item "-mcpu=cpu_type" مجموعه دستورالعمل، مجموعه ثبات‌ها و پارامترهای زمان‌بندی دستورالعمل را برای نوع ماشین \fIcpu_type\fR تنظیم می‌کند. مقادیر پشتیبانی‌شده برای \fIcpu_type\fR عبارتند از: \&\fBv7\fR، \fBcypress\fR، \fBv8\fR، \fBsupersparc\fR، \fBhypersparc\fR، \&\fBleon\fR، \fBleon3\fR، \fBleon3v7\fR، \fBleon5\fR، \fBsparclite\fR، \&\fBf930\fR، \fBf934\fR، \fBsparclite86x\fR، \fBsparclet\fR، \fBtsc701\fR، \&\fBv9\fR، \fBultrasparc\fR، \fBultrasparc3\fR، \fBniagara\fR، \&\fBniagara2\fR، \fBniagara3\fR، \fBniagara4\fR، \fBniagara7\fR و \&\fBm8\fR. .Sp زنجیره ابزارهای بومی Solaris و GNU/Linux از مقدار \fBnative\fR نیز پشتیبانی می‌کنند، که بهترین گزینه معماری را برای پردازنده میزبان انتخاب می‌کند. اگر GCC پردازنده را شناسایی نکند، \&\fB\-mcpu=native\fR تاثیری نخواهد داشت. .Sp برای مقادیری که یک معماری و نه یک پیاده‌سازی را انتخاب می‌کنند، از پارامترهای پیش‌فرض زمان‌بندی دستورالعمل استفاده می‌شود. این مقادیر عبارتند از: \fBv7\fR، \fBv8\fR، \&\fBsparclite\fR، \fBsparclet\fR، \fBv9\fR. .Sp در اینجا فهرستی از هر یک از معماری‌های پشتیبانی‌شده و پیاده‌سازی‌های مربوط به آن‌ها آورده شده است: .RS 4 .IP v7 4 .IX Item "v7" cypress, leon3v7 .IP v8 4 .IX Item "v8" supersparc, hypersparc, leon, leon3, leon5 .IP sparclite 4 .IX Item "sparclite" f930, f934, sparclite86x .IP sparclet 4 .IX Item "sparclet" tsc701 .IP v9 4 .IX Item "v9" ultrasparc, ultrasparc3, niagara, niagara2, niagara3, niagara4, niagara7, m8 .RE .RS 4 .Sp به طور پیش‌فرض (مگر اینکه به شکل دیگری پیکربندی شده باشد)، GCC کدی برای نسخه V7 از معماری SPARC تولید می‌کند. با \fB\-mcpu=cypress\fR، کامپایلر علاوه بر آن، کد را برای تراشه Cypress CY7C602 (که در سری SPARCStation/SPARCServer 3xx به کار رفته) بهینه‌سازی می‌کند. این مقدار برای سیستم‌های قدیمی‌تر مانند SPARCStation 1، 2، IPX و غیره نیز مناسب است. .Sp با \fB\-mcpu=v8\fR، کامپایلر GCC کد را برای نسخه V8 از معماری SPARC تولید می‌کند. تنها تفاوت آن با کد V7 در این است که کامپایلر دستورالعمل‌های ضرب عدد صحیح و تقسیم عدد صحیح را صادر می‌کند که در SPARC\-V8 وجود دارند اما در SPARC\-V7 نیستند. با \fB\-mcpu=supersparc\fR، کامپایلر علاوه بر آن، کد را برای تراشه SuperSPARC (که در سری SPARCStation 10، 1000 و 2000 استفاده شده) بهینه‌سازی می‌کند. .Sp با \fB\-mcpu=sparclite\fR، کامپایلر GCC کد را برای نسخه SPARClite از معماری SPARC تولید می‌کند. این گزینه دستورالعمل‌های ضرب عدد صحیح، گام تقسیم عدد صحیح (integer divide step) و پویش (\f(CW\*(C`ffs\*(C'\fR) را اضافه می‌کند که در SPARClite موجودند اما در SPARC\-V7 نیستند. با \fB\-mcpu=f930\fR، کامپایلر علاوه بر آن، کد را برای تراشه Fujitsu MB86930 (که همان SPARClite اصلی و فاقد FPU است) بهینه‌سازی می‌کند. با \&\fB\-mcpu=f934\fR، کامپایلر علاوه بر آن، کد را برای تراشه Fujitsu MB86934 (که SPARClite جدیدتر و دارای FPU است) بهینه‌سازی می‌کند. .Sp با \fB\-mcpu=sparclet\fR، کامپایلر GCC کد را برای نسخه SPARClet از معماری SPARC تولید می‌کند. این گزینه دستورالعمل‌های ضرب عدد صحیح، ضرب/انباشت (multiply/accumulate)، گام تقسیم عدد صحیح و پویش (\f(CW\*(C`ffs\*(C'\fR) را اضافه می‌کند که در SPARClet وجود دارند اما در SPARC\-V7 نیستند. با \fB\-mcpu=tsc701\fR، کامپایلر علاوه بر آن، کد را برای تراشه TEMIC SPARClet بهینه‌سازی می‌کند. .Sp با \fB\-mcpu=v9\fR، کامپایلر GCC کد را برای نسخه V9 از معماری SPARC تولید می‌کند. این گزینه دستورالعمل‌های انتقال ۶۴ بیتی عدد صحیح و ممیز شناور، ۳ ثبات کد وضعیت ممیز شناور اضافی، و دستورالعمل‌های انتقال شرطی را اضافه می‌کند. با \fB\-mcpu=ultrasparc\fR، کامپایلر علاوه بر آن، کد را برای تراشه‌های Sun UltraSPARC I/II/IIi بهینه‌سازی می‌کند. با \&\fB\-mcpu=ultrasparc3\fR، کامپایلر علاوه بر آن، کد را برای تراشه‌های Sun UltraSPARC III/III+/IIIi/IIIi+/IV/IV+ بهینه‌سازی می‌کند. با \&\fB\-mcpu=niagara\fR، کامپایلر علاوه بر آن، کد را برای تراشه‌های Sun UltraSPARC T1 بهینه‌سازی می‌کند. با \fB\-mcpu=niagara2\fR، کامپایلر علاوه بر آن، کد را برای تراشه‌های Sun UltraSPARC T2 بهینه‌سازی می‌کند. با \&\fB\-mcpu=niagara3\fR، کامپایلر علاوه بر آن، کد را برای تراشه‌های Sun UltraSPARC T3 بهینه‌سازی می‌کند. با \fB\-mcpu=niagara4\fR، کامپایلر علاوه بر آن، کد را برای تراشه‌های Sun UltraSPARC T4 بهینه‌سازی می‌کند. با \&\fB\-mcpu=niagara7\fR، کامپایلر علاوه بر آن، کد را برای تراشه‌های Oracle SPARC M7 بهینه‌سازی می‌کند. با \fB\-mcpu=m8\fR، کامپایلر علاوه بر آن، کد را برای تراشه‌های Oracle M8 بهینه‌سازی می‌کند. .RE.IP \fB\-mtune=\fR\fIcpu_type\fR 4 .IX Item "-mtune=cpu_type" پارامترهای زمان‌بندی دستورالعمل را برای نوع ماشین \fIcpu_type\fR تنظیم می‌کند، اما بر خلاف گزینهٔ \fB\-mcpu=\fR\fIcpu_type\fR، مجموعه دستورالعمل‌ها یا مجموعه ثبات‌ها را تغییر نمی‌دهد. .Sp همان مقادیر مجاز برای \fB\-mcpu=\fR\fIcpu_type\fR می‌توانند برای \&\fB\-mtune=\fR\fIcpu_type\fR نیز استفاده شوند، اما تنها مقادیر مفید آن‌هایی هستند که یک پیاده‌سازی خاص از پردازنده را انتخاب می‌کنند. این مقادیر عبارتند از \fBcypress\fR، \fBsupersparc\fR، \fBhypersparc\fR، \fBleon\fR، \&\fBleon3\fR، \fBleon3v7\fR، \fBleon5\fR، \fBf930\fR، \fBf934\fR، \&\fBsparclite86x\fR، \fBtsc701\fR، \fBultrasparc\fR، \&\fBultrasparc3\fR، \fBniagara\fR، \fBniagara2\fR، \fBniagara3\fR، \&\fBniagara4\fR، \fBniagara7\fR و \fBm8\fR. در زنجیره‌ابزارهای بومی Solaris و GNU/Linux، می‌توان از مقدار \fBnative\fR نیز استفاده کرد. .IP \fB\-mv8plus\fR 4 .IX Item "-mv8plus" .PD 0 .IP \fB\-mno\-v8plus\fR 4 .IX Item "-mno-v8plus" .PD با فعال بودن \fB\-mv8plus\fR، کامپایلر GCC برای ABI مربوط به SPARC\-V8+ کد تولید می‌کند. تفاوت آن با V8 ABI در این است که ثبات‌های سراسری (global) و خروجی (out) به‌صورت ۶۴ بیتی در نظر گرفته می‌شوند. این گزینه به‌طور پیش‌فرض در Solaris در حالت ۳۲ بیتی برای تمام پردازنده‌های SPARC\-V9 فعال است. .IP \fB\-mvis\fR 4 .IX Item "-mvis" .PD 0 .IP \fB\-mno\-vis\fR 4 .IX Item "-mno-vis" .PD با فعال بودن \fB\-mvis\fR، کامپایلر GCC کدی تولید می‌کند که از افزونه‌های مجموعه دستورالعمل‌های بصری (Visual Instruction Set) در UltraSPARC بهره می‌برد. مقدار پیش‌فرض \fB\-mno\-vis\fR است. .IP \fB\-mvis2\fR 4 .IX Item "-mvis2" .PD 0 .IP \fB\-mno\-vis2\fR 4 .IX Item "-mno-vis2" .PD با فعال بودن \fB\-mvis2\fR، کامپایلر GCC کدی تولید می‌کند که از نسخهٔ 2.0 افزونه‌های مجموعه دستورالعمل‌های بصری UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل‌ها پشتیبانی می‌کند (مانند UltraSPARC\-III و جدیدتر)، مقدار پیش‌فرض \&\fB\-mvis2\fR است. فعال‌سازی \fB\-mvis2\fR همچنین باعث فعال شدن \fB\-mvis\fR نیز می‌شود. .IP \fB\-mvis3\fR 4 .IX Item "-mvis3" .PD 0 .IP \fB\-mno\-vis3\fR 4 .IX Item "-mno-vis3" .PD با فعال بودن \fB\-mvis3\fR، کامپایلر GCC کدی تولید می‌کند که از نسخهٔ 3.0 افزونه‌های مجموعه دستورالعمل‌های بصری UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل‌ها پشتیبانی می‌کند (مانند niagara\-3 و جدیدتر)، مقدار پیش‌فرض \&\fB\-mvis3\fR است. فعال‌سازی \fB\-mvis3\fR همچنین باعث فعال شدن \fB\-mvis2\fR و \fB\-mvis\fR می‌شود. .IP \fB\-mvis3b\fR 4 .IX Item "-mvis3b" .PD 0 .IP \fB\-mno\-vis3b\fR 4 .IX Item "-mno-vis3b" .PD با فعال بودن \fB\-mvis3b\fR، کامپایلر GCC کدی تولید می‌کند که علاوه بر نسخهٔ 3.0 افزونه‌های مجموعه دستورالعمل‌های بصری UltraSPARC، از دستورالعمل‌های الحاقی VIS معرفی‌شده در Oracle SPARC Architecture 2011 نیز بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل‌ها پشتیبانی می‌کند (مانند niagara\-7 و جدیدتر)، مقدار پیش‌فرض \fB\-mvis3b\fR است. فعال‌سازی \fB\-mvis3b\fR همچنین باعث فعال شدن \fB\-mvis3\fR، \fB\-mvis2\fR و \fB\-mvis\fR می‌شود. .IP \fB\-mvis4\fR 4 .IX Item "-mvis4" .PD 0 .IP \fB\-mno\-vis4\fR 4 .IX Item "-mno-vis4" .PD با فعال بودن \fB\-mvis4\fR، کامپایلر GCC کدی تولید می‌کند که از نسخهٔ 4.0 افزونه‌های مجموعه دستورالعمل‌های بصری UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل‌ها پشتیبانی می‌کند (مانند niagara\-7 و جدیدتر)، مقدار پیش‌فرض \&\fB\-mvis4\fR است. فعال‌سازی \fB\-mvis4\fR همچنین باعث فعال شدن \fB\-mvis3b\fR، \&\fB\-mvis3\fR، \fB\-mvis2\fR و \fB\-mvis\fR می‌شود. .IP \fB\-mvis4b\fR 4 .IX Item "-mvis4b" .PD 0 .IP \fB\-mno\-vis4b\fR 4 .IX Item "-mno-vis4b" .PD با فعال بودن \fB\-mvis4b\fR، کامپایلر GCC کدی تولید می‌کند که علاوه بر نسخهٔ 4.0 افزونه‌های مجموعه دستورالعمل‌های بصری UltraSPARC، از دستورالعمل‌های الحاقی VIS معرفی‌شده در Oracle SPARC Architecture 2017 نیز بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل‌ها پشتیبانی می‌کند (مانند m8 و جدیدتر)، مقدار پیش‌فرض \fB\-mvis4b\fR است. فعال‌سازی \fB\-mvis4b\fR همچنین باعث فعال شدن \fB\-mvis4\fR، \fB\-mvis3b\fR، \&\fB\-mvis3\fR، \fB\-mvis2\fR و \fB\-mvis\fR می‌شود. .IP \fB\-mcbcond\fR 4 .IX Item "-mcbcond" .PD 0 .IP \fB\-mno\-cbcond\fR 4 .IX Item "-mno-cbcond" .PD با فعال بودن \fB\-mcbcond\fR، کامپایلر GCC کدی تولید می‌کند که از دستورالعمل‌های مقایسه و انشعاب شرطی (Compare\-and\-Branch\-on\-Condition) در UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل‌ها پشتیبانی می‌کند (مانند Niagara\-4 و جدیدتر)، مقدار پیش‌فرض \fB\-mcbcond\fR است. .IP \fB\-mfmaf\fR 4 .IX Item "-mfmaf" .PD 0 .IP \fB\-mno\-fmaf\fR 4 .IX Item "-mno-fmaf" .PD با فعال بودن \fB\-mfmaf\fR، کامپایلر GCC کدی تولید می‌کند که از دستورالعمل‌های ممیز شناور ضرب\-جمع ادغام‌شده (Fused Multiply\-Add Floating\-point) در UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل‌ها پشتیبانی می‌کند (مانند Niagara\-3 و جدیدتر)، مقدار پیش‌فرض \fB\-mfmaf\fR است. .IP \fB\-mfsmuld\fR 4 .IX Item "-mfsmuld" .PD 0 .IP \fB\-mno\-fsmuld\fR 4 .IX Item "-mno-fsmuld" .PD با فعال بودن \fB\-mfsmuld\fR، کامپایلر GCC کدی تولید می‌کند که از دستورالعمل ضرب ممیز شناور دقت‌تکی به دقت‌مضاعف (FsMULd) بهره می‌برد. مقدار پیش‌فرض هنگام هدف قرار دادن پردازنده‌ای که از نسخه‌های معماری V8 یا V9 با FPU پشتیبانی می‌کند، به جز در مورد \&\fB\-mcpu=leon\fR، برابر با \fB\-mfsmuld\fR است. .IP \fB\-mpopc\fR 4 .IX Item "-mpopc" .PD 0 .IP \fB\-mno\-popc\fR 4 .IX Item "-mno-popc" .PD با فعال بودن \fB\-mpopc\fR، کامپایلر GCC کدی تولید می‌کند که از دستورالعمل شمارش تعداد بیت‌های فعال (Population Count) در UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل پشتیبانی می‌کند (مانند Niagara\-2 و جدیدتر)، مقدار پیش‌فرض \&\fB\-mpopc\fR است. .IP \fB\-msubxc\fR 4 .IX Item "-msubxc" .PD 0 .IP \fB\-mno\-subxc\fR 4 .IX Item "-mno-subxc" .PD با فعال بودن \fB\-msubxc\fR، کامپایلر GCC کدی تولید می‌کند که از دستورالعمل تفریق گسترش‌یافته با رقم نقلی (Subtract\-Extended\-with\-Carry) در UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل پشتیبانی می‌کند (مانند Niagara\-7 و جدیدتر)، مقدار پیش‌فرض \fB\-msubxc\fR است. .IP \fB\-mfix\-at697f\fR 4 .IX Item "-mfix-at697f" راهکار مستندشده برای رفع تک‌نقص سخت‌افزاری (erratum) پردازندهٔ Atmel AT697F (که متناظر با نقص شمارهٔ ۱۳ پردازندهٔ AT697E است) را فعال می‌کند. .IP \fB\-mfix\-ut699\fR 4 .IX Item "-mfix-ut699" راهکارهای مستندشده برای رفع نقایص سخت‌افزاری ممیز شناور و نقایص باطل‌سازی حافظهٔ نهان داده (data cache nullify) در پردازندهٔ UT699 را فعال می‌کند. .IP \fB\-mfix\-ut700\fR 4 .IX Item "-mfix-ut700" راهکار مستندشده برای رفع نقایص سخت‌افزاری ذخیره‌سازی متوالی (back\-to\-back store) در پردازندهٔ UT699E/UT700 را فعال می‌کند. .IP \fB\-mfix\-gr712rc\fR 4 .IX Item "-mfix-gr712rc" راهکار مستندشده برای رفع نقایص سخت‌افزاری ذخیره‌سازی متوالی (back\-to\-back store) در پردازندهٔ GR712RC را فعال می‌کند. .PP علاوه بر موارد بالا، گزینه‌های \fB\-m\fR زیر نیز در پردازنده‌های SPARC\-V9 در محیط‌های ۶۴ بیتی پشتیبانی می‌شوند: .IP \fB\-m32\fR 4 .IX Item "-m32" .PD 0 .IP \fB\-m64\fR 4 .IX Item "-m64" .PD تولید کد برای یک محیط ۳۲ بیتی یا ۶۴ بیتی. محیط ۳۲ بیتی اندازه‌های int، long و اشاره‌گر را روی ۳۲ بیت تنظیم می‌کند. محیط ۶۴ بیتی اندازهٔ int را ۳۲ بیت و اندازه‌های long و اشاره‌گر را روی ۶۴ بیت تنظیم می‌نماید. .IP \fB\-mcmodel=\fR\fIwhich\fR 4 .IX Item "-mcmodel=which" مدل کد را روی یکی از موارد زیر تنظیم می‌کند: .RS 4 .IP \fBmedlow\fR 4 .IX Item "medlow" مدل کد Medium/Low: آدرس‌های ۶۴ بیتی، برنامه‌ها باید در ۳۲ بیت پایینی حافظه پیوند (link) داده شوند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند شوند..IP \fBmedmid\fR 4 .IX Item "medmid" مدل کد Medium/Middle: آدرس‌های ۶۴ بیتی، برنامه‌ها باید در ۴۴ بیت پایینی حافظه پیوند یابند، اندازه قطعه‌های text و data باید کمتر از ۲ گیگابایت باشد و قطعه data باید در فاصله حداکثر ۲ گیگابایتی از قطعه text قرار گیرد. .IP \fBmedany\fR 4 .IX Item "medany" مدل کد Medium/Anywhere: آدرس‌های ۶۴ بیتی، برنامه‌ها می‌توانند در هر کجای حافظه پیوند یابند، اندازه قطعه‌های text و data باید کمتر از ۲ گیگابایت باشد و قطعه data باید در فاصله حداکثر ۲ گیگابایتی از قطعه text قرار گیرد. .IP \fBembmedany\fR 4 .IX Item "embmedany" مدل کد Medium/Anywhere برای سامانه‌های تعبیه‌شده: آدرس‌های ۶۴ بیتی، اندازه قطعه‌های text و data باید کمتر از ۲ گیگابایت باشد و هر دو می‌توانند از هر کجای حافظه آغاز شوند (تعیین‌شده در زمان پیوند). ثبات سراسری \f(CW%g4\fR به ابتدای قطعه data اشاره می‌کند. برنامه‌ها به‌صورت ایستا پیوند داده می‌شوند و PIC پشتیبانی نمی‌شود. .RE .RS 4 .RE .IP \fB\-mmemory\-model=\fR\fImem\-model\fR 4 .IX Item "-mmemory-model=mem-model" مدل حافظه فعال روی پردازنده را روی یکی از موارد زیر تنظیم می‌کند: .RS 4 .IP \fBdefault\fR 4 .IX Item "default" مدل حافظه پیش‌فرض برای پردازنده و سیستم‌عامل. .IP \fBrmo\fR 4 .IX Item "rmo" ترتیب حافظه آسان‌گیر (Relaxed Memory Order) .IP \fBpso\fR 4 .IX Item "pso" ترتیب ذخیره‌سازی جزئی (Partial Store Order) .IP \fBtso\fR 4 .IX Item "tso" ترتیب ذخیره‌سازی کامل (Total Store Order) .IP \fBsc\fR 4 .IX Item "sc" سازگاری ترتیبی (Sequential Consistency) .RE .RS 4 .Sp این مدل‌های حافظه به‌طور رسمی در پیوست D راهنمای معماری SPARC\-V9، همان‌طور که در فیلد \f(CW\*(C`PSTATE.MM\*(C'\fR پردازنده مقداردهی می‌شود، تعریف شده‌اند. .RE .IP \fB\-mstack\-bias\fR 4 .IX Item "-mstack-bias" .PD 0 .IP \fB\-mno\-stack\-bias\fR 4 .IX Item "-mno-stack-bias" .PD با فعال بودن \fB\-mstack\-bias\fR، کامپایلر GCC فرض می‌کند که اشاره‌گر پشته (stack pointer)، و اشاره‌گر فریم در صورت وجود، دارای آفست \-2047 هستند که هنگام ارجاع به فریم پشته باید مجدداً اضافه شود. این حالت در حالت ۶۴ بیتی پیش‌فرض است. در غیر این صورت، فرض می‌شود که چنین آفستی وجود ندارد. .PP \fIگزینه‌های System V\fR .IX Subsection "Options for System V" .PP این گزینه‌های اضافی در System V Release 4 برای سازگاری با سایر کامپایلرها در آن سیستم‌ها در دسترس هستند: .IP \fB\-G\fR 4 .IX Item "-G" ایجاد یک شیء اشتراکی (shared object). توصیه می‌شود در عوض از \fB\-symbolic\fR یا \fB\-shared\fR استفاده شود. .IP \fB\-Qy\fR 4 .IX Item "-Qy" نسخه‌های هر ابزار استفاده‌شده توسط کامپایلر را در یک دستورالعمل اسمبلی \&\f(CW\*(C`.ident\*(C'\fR در خروجی مشخص می‌کند. .IP \fB\-Qn\fR 4 .IX Item "-Qn" از افزودن دستورالعمل‌های \f(CW\*(C`.ident\*(C'\fR به فایل خروجی خودداری می‌کند (این حالت پیش‌فرض است). .IP \fB\-YP,\fR\fIdirs\fR 4 .IX Item "-YP,dirs" برای کتابخانه‌های مشخص‌شده با \fB\-l\fR، تنها دایرکتوری‌های \fIdirs\fR را جستجو می‌کند و دایرکتوری‌های دیگر را نادیده می‌گیرد. .IP \fB\-Ym,\fR\fIdir\fR 4 .IX Item "-Ym,dir" برای یافتن پیش‌پردازنده M4 در دایرکتوری \fIdir\fR جستجو می‌کند. اسمبلر از این گزینه استفاده می‌کند. .PP \fIگزینه‌های V850\fR .IX Subsection "V850 Options" .PP این گزینه‌های \fB\-m\fR برای پیاده‌سازی‌های V850 تعریف شده‌اند: .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" .PD 0 .IP \fB\-mno\-long\-calls\fR 4 .IX Item "-mno-long-calls" .PD تمام فراخوانی‌ها را به عنوان دوردست (نزدیک) در نظر می‌گیرد. اگر فرض شود فراخوانی‌ها دوردست هستند، کامپایلر همیشه آدرس تابع را در یک ثبات بارگذاری کرده و به‌صورت غیرمستقیم از طریق اشاره‌گر فراخوانی می‌کند. .IP \fB\-mno\-ep\fR 4 .IX Item "-mno-ep" .PD 0 .IP \fB\-mep\fR 4 .IX Item "-mep" .PD بلوک‌های پایه‌ای را که از یک اشاره‌گر شاخص یکسان ۴ بار یا بیشتر استفاده می‌کنند بهینه‌سازی نمی‌کند (می‌کند) تا اشاره‌گر در ثبات \f(CW\*(C`ep\*(C'\fR کپی شده و از دستورالعمل‌های کوتاه‌تر \f(CW\*(C`sld\*(C'\fR و \f(CW\*(C`sst\*(C'\fR استفاده شود. گزینه \fB\-mep\fR در صورت بهینه‌سازی به‌طور پیش‌فرض فعال است. .IP \fB\-mno\-prolog\-function\fR 4 .IX Item "-mno-prolog-function" .PD 0 .IP \fB\-mprolog\-function\fR 4 .IX Item "-mprolog-function" .PD از توابع خارجی برای ذخیره و بازیابی ثبات‌ها در مقدمه (prologue) و مؤخره (epilogue) تابع استفاده نمی‌کند (استفاده می‌کند). توابع خارجی کندتر هستند، اما اگر بیش از یک تابع تعداد یکسانی از ثبات‌ها را ذخیره کنند، فضای کد کمتری مصرف می‌کنند. گزینه \fB\-mprolog\-function\fR در صورت بهینه‌سازی به‌طور پیش‌فرض فعال است. .IP \fB\-mspace\fR 4 .IX Item "-mspace" تلاش می‌کند تا حجم کد تا حد امکان کوچک شود. در حال حاضر، این گزینه صرفاً گزینه‌های \fB\-mep\fR و \fB\-mprolog\-function\fR را فعال می‌کند. .IP \fB\-mtda=\fR\fIn\fR 4 .IX Item "-mtda=n" متغیرهای ایستا یا سراسری را که اندازه آن‌ها \fIn\fR بایت یا کمتر است در ناحیه داده بسیار کوچک (tiny data area) که ثبات \f(CW\*(C`ep\*(C'\fR به آن اشاره می‌کند، قرار می‌دهد. ناحیه داده بسیار کوچک در مجموع می‌تواند تا ۲۵۶ بایت را در خود جای دهد (۱۲۸ بایت برای ارجاعات بایتی). .IP \fB\-msda=\fR\fIn\fR 4 .IX Item "-msda=n" متغیرهای ایستا یا سراسری را که اندازه آن‌ها \fIn\fR بایت یا کمتر است در ناحیه داده کوچک (small data area) که ثبات \f(CW\*(C`gp\*(C'\fR به آن اشاره می‌کند، قرار می‌دهد. ناحیه داده کوچک می‌تواند تا ۶۴ کیلوبایت را در خود جای دهد. .IP \fB\-mzda=\fR\fIn\fR 4 .IX Item "-mzda=n" متغیرهای ایستا یا سراسری را که اندازه آن‌ها \fIn\fR بایت یا کمتر است در ۳۲ کیلوبایت اول حافظه قرار می‌دهد. .IP \fB\-mv850\fR 4 .IX Item "-mv850" مشخص می‌کند که پردازنده هدف V850 است. .IP \fB\-mv850e3v5\fR 4 .IX Item "-mv850e3v5" مشخص می‌کند که پردازنده هدف V850E3V5 است. در صورت استفاده از این گزینه، ثابت پیش‌پردازنده \f(CW\*(C`_\|_v850e3v5_\|_\*(C'\fR تعریف می‌شود. .IP \fB\-mv850e2v4\fR 4 .IX Item "-mv850e2v4" مشخص می‌کند که پردازنده هدف V850E3V5 است. این یک نام مستعار برای گزینه \fB\-mv850e3v5\fR است. .IP \fB\-mv850e2v3\fR 4 .IX Item "-mv850e2v3" مشخص می‌کند که پردازنده هدف V850E2V3 است. در صورت استفاده از این گزینه، ثابت پیش‌پردازنده \f(CW\*(C`_\|_v850e2v3_\|_\*(C'\fR تعریف می‌شود. .IP \fB\-mv850e2\fR 4 .IX Item "-mv850e2" مشخص می‌کند که پردازنده هدف V850E2 است. در صورت استفاده از این گزینه، ثابت پیش‌پردازنده \f(CW\*(C`_\|_v850e2_\|_\*(C'\fR تعریف می‌شود. .IP \fB\-mv850e1\fR 4 .IX Item "-mv850e1" مشخص می‌کند که پردازنده هدف V850E1 است. در صورت استفاده از این گزینه، ثابت‌های پیش‌پردازنده \f(CW\*(C`_\|_v850e1_\|_\*(C'\fR و \f(CW\*(C`_\|_v850e_\|_\*(C'\fR تعریف می‌شوند. .IP \fB\-mv850es\fR 4 .IX Item "-mv850es" مشخص می‌کند که پردازنده هدف V850ES است. این یک نام مستعار برای گزینه \fB\-mv850e1\fR است. .IP \fB\-mv850e\fR 4 .IX Item "-mv850e" مشخص می‌کند که پردازنده هدف V850E است. در صورت استفاده از این گزینه، ثابت پیش‌پردازنده \f(CW\*(C`_\|_v850e_\|_\*(C'\fR تعریف می‌شود. .Sp اگر هیچ‌یک از گزینه‌های \fB\-mv850\fR، \fB\-mv850e\fR، \fB\-mv850e1\fR، \fB\-mv850e2\fR، \fB\-mv850e2v3\fR و \fB\-mv850e3v5\fR مشخص نشده باشند، یک پردازنده هدف پیش‌فرض انتخاب شده و ثابت پیش‌پردازنده مربوطه \fB_\|_v850*_\|_\fR تعریف می‌شود. .Sp ثابت‌های پیش‌پردازنده \f(CW\*(C`_\|_v850\*(C'\fR و \f(CW\*(C`_\|_v851_\|_\*(C'\fR فارغ از این‌که کدام گونه پردازنده هدف باشد، همیشه تعریف می‌شوند. .IP \fB\-mdisable\-callt\fR 4 .IX Item "-mdisable-callt" .PD 0 .IP \fB\-mno\-disable\-callt\fR 4 .IX Item "-mno-disable-callt".PD این گزینه از تولید دستورالعمل \f(CW\*(C`CALLT\*(C'\fR برای گونه‌های v850e، v850e1، v850e2، v850e2v3 و v850e3v5 از معماری v850 جلوگیری می‌کند. .Sp این گزینه هنگام استفاده از ABI مربوط به RH850 به‌طور پیش‌فرض فعال است (نگاه کنید به \fB\-mrh850\-abi\fR)، و هنگام استفاده از ABI مربوط به GCC به‌طور پیش‌فرض غیرفعال است. اگر دستورالعمل‌های \f(CW\*(C`CALLT\*(C'\fR تولید شوند، نماد پیش‌پردازندهٔ سی \f(CW\*(C`_\|_V850_CALLT_\|_\*(C'\fR تعریف می‌شود. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" .PD 0 .IP \fB\-mno\-relax\fR 4 .IX Item "-mno-relax" .PD گزینهٔ خط فرمان \fB\-mrelax\fR را به اسمبلر منتقل می‌کند (یا منتقل نمی‌کند). .IP \fB\-mlong\-jumps\fR 4 .IX Item "-mlong-jumps" .PD 0 .IP \fB\-mno\-long\-jumps\fR 4 .IX Item "-mno-long-jumps" .PD تولید دستورالعمل‌های پرش وابسته به PC را غیرفعال (یا دوباره فعال) می‌کند. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD 0 .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD تولید دستورالعمل‌های ممیز شناور سخت‌افزاری را غیرفعال (یا دوباره فعال) می‌کند. این گزینه تنها زمانی اهمیت دارد که معماری مقصد \fBV850E2V3\fR یا بالاتر باشد. اگر دستورالعمل‌های ممیز شناور سخت‌افزاری تولید شوند، نماد پیش‌پردازندهٔ سی \&\f(CW\*(C`_\|_FPU_OK_\|_\*(C'\fR تعریف می‌شود؛ در غیر این صورت نماد \&\f(CW\*(C`_\|_NO_FPU_\|_\*(C'\fR تعریف خواهد شد. .IP \fB\-mloop\fR 4 .IX Item "-mloop" استفاده از دستورالعمل LOOP در e3v5 را فعال می‌کند. هنگام انتخاب معماری e3v5 استفاده از این دستورالعمل به‌طور پیش‌فرض فعال نیست، زیرا به‌کارگیری آن هنوز آزمایشی است. .IP \fB\-mrh850\-abi\fR 4 .IX Item "-mrh850-abi" .PD 0 .IP \fB\-mghs\fR 4 .IX Item "-mghs" .PD پشتیبانی از نسخهٔ RH850 رابط باینری برنامه (ABI) مربوط به V850 را فعال می‌کند. این حالت پیش‌فرض است. با این نسخه از ABI، قواعد زیر اعمال می‌شوند: .RS 4 .IP * 4 ساختارها و اجتماع‌های هم‌اندازه با عدد صحیح، به‌جای ثبات، از طریق یک اشاره‌گر حافظه بازگردانده می‌شوند. .IP * 4 ساختارها و اجتماع‌های بزرگ (با اندازهٔ بیشتر از ۸ بایت) از طریق مقدار (by value) ارسال می‌شوند. .IP * 4 توابع روی مرزهای ۱۶\-بیتی هم‌تراز می‌شوند. .IP * 4 گزینهٔ خط فرمان \fB\-m8byte\-align\fR پشتیبانی می‌شود. .IP * 4 گزینهٔ خط فرمان \fB\-mdisable\-callt\fR به‌طور پیش‌فرض فعال است. گزینهٔ خط فرمان \fB\-mno\-disable\-callt\fR پشتیبانی نمی‌شود. .RE .RS 4 .Sp هنگامی که این نسخه از ABI فعال باشد، نماد پیش‌پردازندهٔ سی \&\f(CW\*(C`_\|_V850_RH850_ABI_\|_\*(C'\fR تعریف می‌شود. .RE .IP \fB\-mgcc\-abi\fR 4 .IX Item "-mgcc-abi" پشتیبانی از نسخهٔ قدیمی GCC رابط باینری برنامه (ABI) مربوط به V850 را فعال می‌کند. با این نسخه از ABI، قواعد زیر اعمال می‌شوند: .RS 4 .IP * 4 ساختارها و اجتماع‌های هم‌اندازه با عدد صحیح در ثبات \f(CW\*(C`r10\*(C'\fR بازگردانده می‌شوند. .IP * 4 ساختارها و اجتماع‌های بزرگ (با اندازهٔ بیشتر از ۸ بایت) از طریق ارجاع (by reference) ارسال می‌شوند. .IP * 4 توابع روی مرزهای ۳۲\-بیتی هم‌تراز می‌شوند، مگر آن‌که بهینه‌سازی برای اندازه انجام شود. .IP * 4 گزینهٔ خط فرمان \fB\-m8byte\-align\fR پشتیبانی نمی‌شود. .IP * 4 گزینهٔ خط فرمان \fB\-mdisable\-callt\fR پشتیبانی می‌شود اما به‌طور پیش‌فرض فعال نیست. .RE .RS 4 .Sp هنگامی که این نسخه از ABI فعال باشد، نماد پیش‌پردازندهٔ سی \&\f(CW\*(C`_\|_V850_GCC_ABI_\|_\*(C'\fR تعریف می‌شود. .RE .IP \fB\-m8byte\-align\fR 4 .IX Item "-m8byte-align" .PD 0 .IP \fB\-mno\-8byte\-align\fR 4 .IX Item "-mno-8byte-align" .PD پشتیبانی از هم‌ترازی انواع \f(CW\*(C`double\*(C'\fR و \f(CW\*(C`long long\*(C'\fR روی مرزهای ۸\-بایتی را فعال می‌کند. حالت پیش‌فرض، محدود کردن هم‌ترازی تمام اشیاء به حداکثر ۴\-بایت است. هنگامی که \&\fB\-m8byte\-align\fR در حال اجرا باشد، نماد پیش‌پردازندهٔ سی \&\f(CW\*(C`_\|_V850_8BYTE_ALIGN_\|_\*(C'\fR تعریف می‌شود. .IP \fB\-mbig\-switch\fR 4 .IX Item "-mbig-switch" کد مناسب برای جدول‌های سوئیچ بزرگ تولید می‌کند. تنها زمانی از این گزینه استفاده کنید که اسمبلر یا پیونددهنده در مورد انشعاب‌های خارج از محدوده در یک جدول switch خطا دهد. .IP \fB\-mapp\-regs\fR 4 .IX Item "-mapp-regs" این گزینه باعث می‌شود که r2 و r5 در کدهای تولیدشده توسط کامپایلر استفاده شوند. این تنظیم حالت پیش‌فرض است. .IP \fB\-mno\-app\-regs\fR 4 .IX Item "-mno-app-regs" این گزینه باعث می‌شود که با r2 و r5 به عنوان ثبات‌های ثابت رفتار شود. .PP \fIگزینه‌های VAX\fR .IX Subsection "VAX Options" .PP این گزینه‌های \fB\-m\fR برای VAX تعریف شده‌اند: .IP \fB\-munix\fR 4 .IX Item "-munix" از درج برخی دستورالعمل‌های پرش خاص (مانند \f(CW\*(C`aobleq\*(C'\fR و غیره) که اسمبلر Unix برای VAX نمی‌تواند آن‌ها را در دامنه‌های طولانی مدیریت کند، خودداری می‌کند. .IP \fB\-mgnu\fR 4 .IX Item "-mgnu" با فرض اینکه از اسمبلر GNU استفاده می‌شود، آن دستورالعمل‌های پرش را تولید می‌کند. .IP \fB\-md\fR 4 .IX Item "-md" .PD 0 .IP \fB\-md\-float\fR 4 .IX Item "-md-float" .PD به‌جای G_floating، از قالب داده‌ای D_floating برای اعداد ممیز شناور با دقت مضاعف استفاده می‌کند. .IP \fB\-mg\fR 4 .IX Item "-mg" .PD 0 .IP \fB\-mg\-float\fR 4 .IX Item "-mg-float" .PD به‌جای D_floating، از قالب داده‌ای G_floating برای اعداد ممیز شناور با دقت مضاعف استفاده می‌کند. .IP \fB\-mlra\fR 4 .IX Item "-mlra" .PD 0 .IP \fB\-mno\-lra\fR 4 .IX Item "-mno-lra" .PD تخصیص محلی ثبات‌ها (Local Register Allocation) را فعال می‌کند. این قابلیت برای VAX هنوز در مرحلهٔ آزمایشی است، بنابراین کامپایلر به‌طور پیش‌فرض از reload استاندارد استفاده می‌کند. .PP \fIگزینه‌های Visium\fR .IX Subsection "Visium Options" .IP \fB\-mdebug\fR 4 .IX Item "-mdebug" برنامه‌ای که ورودی/خروجی فایل انجام می‌دهد و قرار است روی یک مقصد MCM اجرا شود، باید با این گزینه پیوند داده شود. این کار باعث می‌شود کتابخانه‌های libc.a و libdebug.a پیوند یابند. برنامه باید روی مقصد و تحت کنترل استاب اشکال‌زدایی از راه دور GDB اجرا شود. .IP \fB\-msim\fR 4 .IX Item "-msim" برنامه‌ای که ورودی/خروجی فایل انجام می‌دهد و قرار است روی شبیه‌ساز اجرا شود، باید با این گزینه پیوند داده شود. این کار باعث پیوند خوردن کتابخانه‌های libc.a و libsim.a می‌شود. .IP \fB\-mfpu\fR 4 .IX Item "-mfpu" .PD 0 .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD کدهایی حاوی دستورالعمل‌های ممیز شناور تولید می‌کند. این حالت پیش‌فرض است. .IP \fB\-mno\-fpu\fR 4 .IX Item "-mno-fpu" .PD 0.IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD تولید کد حاوی فراخوانی‌های کتابخانه‌ای برای ممیز شناور (floating\-point). .Sp گزینهٔ \&\fB\-msoft\-float\fR شیوهٔ فراخوانی (calling convention) را در فایل خروجی تغییر می‌دهد؛ بنابراین تنها زمانی کاربرد دارد که \fIتمام\fR برنامه را با این گزینه کامپایل کنید. به‌ویژه، برای این‌که این قابلیت به درستی کار کند، لازم است کتابخانهٔ \fIlibgcc.a\fR (کتابخانه‌ای که همراه GCC ارائه می‌شود) را با \fB\-msoft\-float\fR کامپایل کنید. .IP \fB\-mcpu=\fR\fIcpu_type\fR 4 .IX Item "-mcpu=cpu_type" مجموعه دستورالعمل‌ها، مجموعه ثبات‌ها و پارامترهای زمان‌بندی دستورالعمل را برای نوع ماشین \fIcpu_type\fR تنظیم می‌کند. مقادیر پشتیبانی‌شده برای \fIcpu_type\fR عبارتند از \&\fBmcm\fR، \fBgr5\fR و \fBgr6\fR. .Sp مقدار \&\fBmcm\fR هم‌معنی \fBgr5\fR است که به منظور سازگاری رو به عقب در نظر گرفته شده است. .Sp به‌طور پیش‌فرض (مگر این‌که به گونه‌ای دیگر پیکربندی شده باشد)، GCC کدی برای گونهٔ GR5 از معماری Visium تولید می‌کند. .Sp با گزینهٔ \fB\-mcpu=gr6\fR، کامپایلر GCC برای گونهٔ GR6 از معماری Visium کد تولید می‌کند. تنها تفاوت با کد GR5 در این است که کامپایلر دستورالعمل‌های انتقال بلوکی (block move) را نیز تولید خواهد کرد. .IP \fB\-mtune=\fR\fIcpu_type\fR 4 .IX Item "-mtune=cpu_type" پارامترهای زمان‌بندی دستورالعمل را برای نوع ماشین \fIcpu_type\fR تنظیم می‌کند، اما بر خلاف گزینهٔ \&\fB\-mcpu=\fR\fIcpu_type\fR، مجموعه دستورالعمل یا مجموعه ثبات‌ها را تغییر نمی‌دهد. .IP \fB\-msv\-mode\fR 4 .IX Item "-msv-mode" تولید کد برای حالت ناظر (supervisor mode)، جایی که هیچ محدودیتی در دسترسی به ثبات‌های عمومی وجود ندارد. این حالت پیش‌فرض است. .IP \fB\-muser\-mode\fR 4 .IX Item "-muser-mode" تولید کد برای حالت کاربر (user mode)، جایی که دسترسی به برخی از ثبات‌های عمومی ممنوع است: روی GR5، ثبات‌های r24 تا r31 در این حالت قابل دسترسی نیستند؛ روی GR6، تنها ثبات‌های r29 تا r31 متأثر می‌شوند. .PP \fIگزینه‌های VMS\fR .IX Subsection "VMS Options" .PP این گزینه‌های \fB\-m\fR برای پیاده‌سازی‌های VMS تعریف شده‌اند: .IP \fB\-mvms\-return\-codes\fR 4 .IX Item "-mvms-return-codes" بازگرداندن کدهای وضعیت VMS از تابع \f(CW\*(C`main\*(C'\fR. پیش‌فرض، بازگرداندن کدهای وضعیت (مانند خطا) به سبک POSIX است. .IP \fB\-mdebug\-main=\fR\fIprefix\fR 4 .IX Item "-mdebug-main=prefix" اولین روالی را که نام آن با \fIprefix\fR آغاز می‌شود، به عنوان روال اصلی برای اشکال‌زدا (debugger) نشانه‌گذاری می‌کند. .IP \fB\-mmalloc64\fR 4 .IX Item "-mmalloc64" استفاده از روال‌های تخصیص حافظهٔ ۶۴ بیتی به عنوان پیش‌فرض. .IP \fB\-mpointer\-size=\fR\fIsize\fR 4 .IX Item "-mpointer-size=size" تنظیم اندازهٔ پیش‌فرض اشاره‌گرها. مقادیر ممکن برای \fIsize\fR عبارتند از \&\fB32\fR یا \fBshort\fR برای اشاره‌گرهای ۳۲ بیتی، \fB64\fR یا \fBlong\fR برای اشاره‌گرهای ۶۴ بیتی، و \fBno\fR برای پشتیبانی انحصاری از اشاره‌گرهای ۳۲ بیتی. گزینهٔ آخر دستور \f(CW\*(C`pragma pointer_size\*(C'\fR را غیرفعال می‌کند. .PP \fIگزینه‌های VxWorks\fR .IX Subsection "VxWorks Options" .PP گزینه‌های این بخش برای تمامی مقصدهای VxWorks تعریف شده‌اند. گزینه‌های خاص سخت‌افزار مقصد، به همراه دیگر گزینه‌های مربوط به آن مقصد فهرست شده‌اند. .IP \fB\-mrtp\fR 4 .IX Item "-mrtp" کامپایلر GCC می‌تواند برای هر دو هستهٔ VxWorks و فرآیندهای بی‌درنگ (RTPها) کد تولید کند. این گزینه حالت را از مورد نخست به دومی تغییر می‌دهد. همچنین ماکروی پیش‌پردازندهٔ \f(CW\*(C`_\|_RTP_\|_\*(C'\fR را تعریف می‌کند. .IP \fB\-msmp\fR 4 .IX Item "-msmp" انتخاب زمان‌های اجرای (runtimes) چندپردازشی متقارن (SMP) برای پیوند دادن. روی معماری‌هایی غیر از PowerPC و همچنین در VxWorks نسخهٔ ۷ به بعد موجود نیست؛ در این موارد، این انتخاب بخشی از پیکربندی ساخت VxWorks بوده و مسیرهای کتابخانه‌ای برای هر دو گزینه یکسان هستند. .IP \fB\-non\-static\fR 4 .IX Item "-non-static" پیوند دادن یک فایل اجرایی RTP با کتابخانه‌های مشترک (shared) به جای کتابخانه‌های ایستا (static). گزینه‌های \fB\-static\fR و \fB\-shared\fR را نیز می‌توان برای RTPها به کار برد؛ گزینهٔ \fB\-static\fR پیش‌فرض است. .IP \fB\-Bstatic\fR 4 .IX Item "-Bstatic" .PD 0 .IP \fB\-Bdynamic\fR 4 .IX Item "-Bdynamic" .PD این گزینه‌ها به پیونددهنده (linker) ارسال می‌شوند و برای سازگاری با Diab تعریف شده‌اند. .IP \fB\-Xbind\-lazy\fR 4 .IX Item "-Xbind-lazy" فعال‌سازی مقیدسازی تنبل (lazy binding) فراخوانی توابع. این گزینه معادل \&\fB\-Wl,\-z,now\fR است و برای سازگاری با Diab تعریف شده است. .IP \fB\-Xbind\-now\fR 4 .IX Item "-Xbind-now" غیرفعال‌سازی مقیدسازی تنبل فراخوانی توابع. این گزینه پیش‌فرض است و برای سازگاری با Diab تعریف شده است. .PP \fIگزینه‌های x86\fR .IX Subsection "x86 Options" .PP این گزینه‌های \fB\-m\fR برای خانوادهٔ رایانه‌های x86 تعریف شده‌اند. .IP \fB\-march=\fR\fIcpu\-type\fR 4 .IX Item "-march=cpu-type" تولید دستورالعمل‌ها برای نوع ماشین \fIcpu\-type\fR. بر خلاف \&\fB\-mtune=\fR\fIcpu\-type\fR که صرفاً کد تولیدشده را برای \fIcpu\-type\fR مشخص‌شده بهینه‌سازی (tune) می‌کند، گزینهٔ \fB\-march=\fR\fIcpu\-type\fR به GCC امکان می‌دهد کدی تولید کند که ممکن است روی پردازنده‌هایی غیر از نوع مشخص‌شده اصلاً اجرا نشود. مشخص کردن \fB\-march=\fR\fIcpu\-type\fR به معنای اعمال \&\fB\-mtune=\fR\fIcpu\-type\fR نیز هست، مگر مواردی که خلاف آن تصریح شده باشد. .Sp انتخاب‌های موجود برای \fIcpu\-type\fR عبارتند از: .RS 4 .IP \fBnative\fR 4 .IX Item "native" این گزینه با تشخیص نوع پردازندهٔ ماشین کامپایل‌کننده در هنگام کامپایل، پردازندهٔ مقصد برای تولید کد را انتخاب می‌کند. استفاده از \fB\-march=native\fR تمام زیرمجموعه‌های دستورالعملی را که توسط ماشین محلی پشتیبانی می‌شوند فعال می‌کند (از این رو ممکن است خروجی روی ماشین‌های دیگر اجرا نشود). استفاده از \fB\-mtune=native\fR کدی بهینه‌شده برای ماشین محلی در چارچوب محدودیت‌های مجموعه دستورالعمل انتخاب‌شده تولید می‌کند. .IP \fBx86\-64\fR 4 .IX Item "x86-64" یک پردازندهٔ عمومی با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه دستورالعمل‌های MMX، SSE، SSE2 و FXSR. .IP \fBx86\-64\-v2\fR 4 .IX Item "x86-64-v2" .PD 0 .IP \fBx86\-64\-v3\fR 4 .IX Item "x86-64-v3" .IP \fBx86\-64\-v4\fR 4 .IX Item "x86-64-v4" .PD این گزینه‌ها برای \fIcpu\-type\fR، سطح ریزمعماری متناظر را از psABI مربوط به x86\-64 برمی‌گزینند. در ABIهایی غیر از psABI برای x86\-64، این گزینه‌ها همان ویژگی‌های پردازنده‌ای را انتخاب می‌کنند که اسناد psABI مربوط به x86\-64 برای آن سطح ریزمعماری خاص مشخص کرده‌اند. .Sp از آن‌جا که این مقادیر \fIcpu\-type\fR تنظیم متناظری در \&\fB\-mtune\fR ندارند، استفاده از \fB\-march\fR با این مقادیر، بهینه‌سازی عمومی (generic tuning) را فعال می‌کند. بهینه‌سازی خاص را می‌توان با استفاده از گزینهٔ \&\fB\-mtune=\fR\fIother\-cpu\-type\fR به همراه مقدار مناسب \fIother\-cpu\-type\fR فعال کرد. .IP \fBi386\fR 4 .IX Item "i386" پردازندهٔ اصلی Intel i386. .IP \fBi486\fR 4 .IX Item "i486" پردازندهٔ Intel i486. (هیچ زمان‌بندی دستورالعملی برای این تراشه پیاده‌سازی نشده است.) .IP \fBi586\fR 4 .IX Item "i586" .PD 0 .IP \fBpentium\fR 4 .IX Item "pentium" .PD پردازندهٔ Intel Pentium بدون پشتیبانی از MMX. .IP \fBlakemont\fR 4 .IX Item "lakemont" میکروکنترلر Intel Lakemont، مبتنی بر پردازندهٔ Intel Pentium. .IP \fBpentium\-mmx\fR 4 .IX Item "pentium-mmx" پردازندهٔ Intel Pentium MMX، مبتنی بر هستهٔ Pentium به همراه پشتیبانی از مجموعه دستورالعمل MMX. .IP \fBpentiumpro\fR 4 .IX Item "pentiumpro" پردازندهٔ Intel Pentium Pro بدون پشتیبانی از MMX. .IP \fBi686\fR 4 .IX Item "i686" هنگامی که همراه با \fB\-march\fR به کار رود، مجموعه دستورالعمل Pentium Pro استفاده می‌شود، در نتیجه کد روی تمامی تراشه‌های خانوادهٔ i686 اجرا خواهد شد. هنگامی که با \fB\-mtune\fR استفاده شود، مفهومی مشابه با \fBgeneric\fR دارد. .IP \fBpentium2\fR 4 .IX Item "pentium2" پردازندهٔ Intel Pentium II، مبتنی بر هستهٔ Pentium Pro با پشتیبانی از مجموعه دستورالعمل‌های MMX و FXSR. .IP \fBpentium3\fR 4 .IX Item "pentium3" .PD 0.IP \fBpentium3m\fR 4 .IX Item "pentium3m" .PD پردازنده Intel Pentium III، مبتنی بر هسته Pentium Pro با پشتیبانی از مجموعه‌دستورالعمل‌های MMX، FXSR و SSE. .IP \fBpentium\-m\fR 4 .IX Item "pentium-m" پردازنده Intel Pentium M؛ نسخه کم‌مصرف پردازنده Intel Pentium III با پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2 و FXSR. مورد استفاده در نوت‌بوک‌های Centrino. .IP \fBpentium4\fR 4 .IX Item "pentium4" .PD 0 .IP \fBpentium4m\fR 4 .IX Item "pentium4m" .PD پردازنده Intel Pentium 4 با پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2 و FXSR. .IP \fBprescott\fR 4 .IX Item "prescott" نسخه بهبودیافته پردازنده Intel Pentium 4 با پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3 و FXSR. .IP \fBnocona\fR 4 .IX Item "nocona" نسخه بهبودیافته پردازنده Intel Pentium 4 با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3 و FXSR. .IP \fBcore2\fR 4 .IX Item "core2" پردازنده Intel Core 2 با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، CX16، SAHF و FXSR. .IP \fBnehalem\fR 4 .IX Item "nehalem" .PD 0 .IP \fBcorei7\fR 4 .IX Item "corei7" .PD پردازنده Intel Nehalem با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF و FXSR. .IP \fBwestmere\fR 4 .IX Item "westmere" پردازنده Intel Westmere با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR و PCLMUL. .IP \fBsandybridge\fR 4 .IX Item "sandybridge" .PD 0 .IP \fBcorei7\-avx\fR 4 .IX Item "corei7-avx" .PD پردازنده Intel Sandy Bridge با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE و PCLMUL. .IP \fBivybridge\fR 4 .IX Item "ivybridge" .PD 0 .IP \fBcore\-avx\-i\fR 4 .IX Item "core-avx-i" .PD پردازنده Intel Ivy Bridge با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND و F16C. .IP \fBhaswell\fR 4 .IX Item "haswell" .PD 0 .IP \fBcore\-avx2\fR 4 .IX Item "core-avx2" .PD پردازنده Intel Haswell با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE و HLE. .IP \fBbroadwell\fR 4 .IX Item "broadwell" پردازنده Intel Broadwell با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX و PREFETCHW. .IP \fBskylake\fR 4 .IX Item "skylake" پردازنده Intel Skylake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES و SGX. .IP \fBskylake\-avx512\fR 4 .IX Item "skylake-avx512" پردازنده سرور Intel Skylake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، CLWB، AVX512VL، AVX512BW، AVX512DQ و AVX512CD. .IP \fBcascadelake\fR 4 .IX Item "cascadelake" پردازنده Intel Cascade Lake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، CLWB، AVX512VL، AVX512BW، AVX512DQ، AVX512CD و AVX512VNNI. .IP \fBcannonlake\fR 4 .IX Item "cannonlake" پردازنده سرور Intel Cannon Lake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، PKU، AVX512VBMI، AVX512IFMA و SHA. .IP \fBcooperlake\fR 4 .IX Item "cooperlake" پردازنده Intel Cooper Lake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، CLWB، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، AVX512VNNI و AVX512BF16. .IP \fBicelake\-client\fR 4 .IX Item "icelake-client" پردازنده کلاینت Intel Ice Lake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، PKU، AVX512VBMI، AVX512IFMA، SHA، AVX512VNNI، GFNI، VAES، AVX512VBMI2، VPCLMULQDQ، AVX512BITALG، RDPID و AVX512VPOPCNTDQ. .IP \fBicelake\-server\fR 4 .IX Item "icelake-server" پردازنده سرور Intel Ice Lake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، PKU، AVX512VBMI، AVX512IFMA، SHA، AVX512VNNI، GFNI، VAES، AVX512VBMI2، VPCLMULQDQ، AVX512BITALG، RDPID، AVX512VPOPCNTDQ، PCONFIG، WBNOINVD و CLWB. .IP \fBtigerlake\fR 4 .IX Item "tigerlake" پردازنده Intel Tiger Lake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، PKU، AVX512VBMI، AVX512IFMA، SHA، AVX512VNNI، GFNI، VAES، AVX512VBMI2، VPCLMULQDQ، AVX512BITALG، RDPID، AVX512VPOPCNTDQ، MOVDIRI، MOVDIR64B، CLWB، AVX512VP2INTERSECT و KEYLOCKER. .IP \fBrocketlake\fR 4 .IX Item "rocketlake" پردازنده Intel Rocket Lake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، AVX512F، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، PKU، AVX512VBMI، AVX512IFMA، SHA، AVX512VNNI، GFNI، VAES، AVX512VBMI2، VPCLMULQDQ، AVX512BITALG، RDPID و AVX512VPOPCNTDQ. .IP \fBalderlake\fR 4 .IX Item "alderlake" .PD 0 .IP \fBraptorlake\fR 4 .IX Item "raptorlake" .IP \fBmeteorlake\fR 4 .IX Item "meteorlake" .IP \fBgracemont\fR 4 .IX Item "gracemont" .PD پردازنده‌های Intel Alder Lake/Raptor Lake/Meteor Lake/Gracemont با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، AES، PREFETCHW، PCLMUL، RDRND، XSAVE، XSAVEC، XSAVES، XSAVEOPT، FSGSBASE، PTWRITE، RDPID، SGX، GFNI\-SSE، CLWB، MOVDIRI، MOVDIR64B، WAITPKG، ADCX، AVX، AVX2، BMI، BMI2، F16C، FMA، LZCNT، PCONFIG، PKU، VAES، VPCLMULQDQ، SERIALIZE، HRESET، KL، WIDEKL و AVX\-VNNI. .IP \fBarrowlake\fR 4 .IX Item "arrowlake" پردازنده Intel Arrow Lake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، AES، PREFETCHW، PCLMUL، RDRND، XSAVE، XSAVEC، XSAVES، XSAVEOPT، FSGSBASE، PTWRITE، RDPID، SGX، GFNI\-SSE، CLWB، MOVDIRI، MOVDIR64B، WAITPKG، ADCX، AVX، AVX2، BMI، BMI2، F16C، FMA، LZCNT، PCONFIG، PKU، VAES، VPCLMULQDQ، SERIALIZE، HRESET، KL، WIDEKL، AVX\-VNNI، UINTR، AVXIFMA، AVXVNNIINT8، AVXNECONVERT و CMPCCXADD. .IP \fBarrowlake\-s\fR 4 .IX Item "arrowlake-s" .PD 0 .IP \fBlunarlake\fR 4 .IX Item "lunarlake" .PD پردازنده‌های Intel Arrow Lake S/Lunar Lake با افزونه‌های 64 بیتی و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، AES، PREFETCHW، PCLMUL، RDRND، XSAVE، XSAVEC، XSAVES، XSAVEOPT، FSGSBASE، PTWRITE، RDPID، SGX، GFNI\-SSE، CLWB، MOVDIRI، MOVDIR64B، WAITPKG، ADCX، AVX، AVX2، BMI، BMI2، F16C، FMA، LZCNT، PCONFIG، PKU، VAES، VPCLMULQDQ، SERIALIZE، HRESET، KL، WIDEKL، AVX\-VNNI، UINTR، AVXIFMA، AVXVNNIINT8، AVXNECONVERT، CMPCCXADD، AVXVNNIINT16، SHA512، SM3 و SM4..IP \fBpantherlake\fR 4 .IX Item "pantherlake" پردازنده Intel Panther Lake با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، AES، PREFETCHW، PCLMUL، RDRND، XSAVE، XSAVEC، XSAVES، XSAVEOPT، FSGSBASE، PTWRITE، RDPID، SGX، GFNI\-SSE، CLWB، MOVDIRI، MOVDIR64B، WAITPKG، ADCX، AVX، AVX2، BMI، BMI2، F16C، FMA، LZCNT، PCONFIG، PKU، VAES، VPCLMULQDQ، SERIALIZE، HRESET، AVX\-VNNI، UINTR، AVXIFMA، AVXVNNIINT8، AVXNECONVERT، CMPCCXADD، AVXVNNIINT16، SHA512، SM3، SM4 و PREFETCHI. .IP \fBsapphirerapids\fR 4 .IX Item "sapphirerapids" .PD 0 .IP \fBemeraldrapids\fR 4 .IX Item "emeraldrapids" .PD پردازنده Intel Sapphire Rapids/Emerald Rapids با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، PKU، AVX512VBMI، AVX512IFMA، SHA، AVX512VNNI، GFNI، VAES، AVX512VBMI2، VPCLMULQDQ، AVX512BITALG، RDPID، AVX512VPOPCNTDQ، PCONFIG، WBNOINVD، CLWB، MOVDIRI، MOVDIR64B، ENQCMD، CLDEMOTE، PTWRITE، WAITPKG، SERIALIZE، TSXLDTRK، UINTR، AMX\-BF16، AMX\-TILE، AMX\-INT8، AVX\-VNNI، AVX512\-FP16 و AVX512BF16. .IP \fBgraniterapids\fR 4 .IX Item "graniterapids" پردازنده Intel Granite Rapids با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، PKU، AVX512VBMI، AVX512IFMA، SHA، AVX512VNNI، GFNI، VAES، AVX512VBMI2، VPCLMULQDQ، AVX512BITALG، RDPID، AVX512VPOPCNTDQ، PCONFIG، WBNOINVD، CLWB، MOVDIRI، MOVDIR64B، ENQCMD، CLDEMOTE، PTWRITE، WAITPKG، SERIALIZE، TSXLDTRK، UINTR، AMX\-BF16، AMX\-TILE، AMX\-INT8، AVX\-VNNI، AVX512\-FP16، AVX512BF16، AMX\-FP16 و PREFETCHI. .IP \fBgraniterapids\-d\fR 4 .IX Item "graniterapids-d" پردازنده Intel Granite Rapids D با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، PKU، AVX512VBMI، AVX512IFMA، SHA، AVX512VNNI، GFNI، VAES، AVX512VBMI2، VPCLMULQDQ، AVX512BITALG، RDPID، AVX512VPOPCNTDQ، PCONFIG، WBNOINVD، CLWB، MOVDIRI، MOVDIR64B، ENQCMD، CLDEMOTE، PTWRITE، WAITPKG، SERIALIZE، TSXLDTRK، UINTR، AMX\-BF16، AMX\-TILE، AMX\-INT8، AVX\-VNNI، AVX512FP16، AVX512BF16، AMX\-FP16، PREFETCHI و AMX\-COMPLEX. .IP \fBdiamondrapids\fR 4 .IX Item "diamondrapids" پردازنده Intel Diamond Rapids با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، AVX، XSAVE، PCLMUL، FSGSBASE، RDRND، F16C، AVX2، BMI، BMI2، LZCNT، FMA، MOVBE، HLE، RDSEED، ADCX، PREFETCHW، AES، CLFLUSHOPT، XSAVEC، XSAVES، SGX، AVX512F، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، PKU، AVX512VBMI، AVX512IFMA، SHA، AVX512VNNI، GFNI، VAES، AVX512VBMI2، VPCLMULQDQ، AVX512BITALG، RDPID، AVX512VPOPCNTDQ، PCONFIG، WBNOINVD، CLWB، MOVDIRI، MOVDIR64B، ENQCMD، CLDEMOTE، PTWRITE، WAITPKG، SERIALIZE، TSXLDTRK، UINTR، AMX\-BF16، AMX\-TILE، AMX\-INT8، AVX\-VNNI، AVX512FP16، AVX512BF16، AMX\-FP16، PREFETCHI، AMX\-COMPLEX، AVX10.1\-512، AVX\-IFMA، AVX\-NE\-CONVERT، AVX\-VNNI\-INT16، AVX\-VNNI\-INT8، CMPccXADD، SHA512، SM3، SM4، AVX10.2\-512، APX_F، AMX\-AVX512، AMX\-FP8، AMX\-TF32، AMX\-TRANSPOSE، MOVRS، AMX\-MOVRS و USER_MSR. .IP \fBbonnell\fR 4 .IX Item "bonnell" .PD 0 .IP \fBatom\fR 4 .IX Item "atom" .PD پردازنده Intel Bonnell با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3 و SSSE3. .IP \fBsilvermont\fR 4 .IX Item "silvermont" .PD 0 .IP \fBslm\fR 4 .IX Item "slm" .PD پردازنده Intel Silvermont با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، PCLMUL، PREFETCHW و RDRND. .IP \fBgoldmont\fR 4 .IX Item "goldmont" پردازنده Intel Goldmont با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، PCLMUL، PREFETCHW، RDRND، AES، SHA، RDSEED، XSAVE، XSAVEC، XSAVES، XSAVEOPT، CLFLUSHOPT و FSGSBASE. .IP \fBgoldmont\-plus\fR 4 .IX Item "goldmont-plus" پردازنده Intel Goldmont Plus با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، PCLMUL، PREFETCHW، RDRND، AES، SHA، RDSEED، XSAVE، XSAVEC، XSAVES، XSAVEOPT، CLFLUSHOPT، FSGSBASE، PTWRITE، RDPID و SGX. .IP \fBtremont\fR 4 .IX Item "tremont" پردازنده Intel Tremont با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF، FXSR، PCLMUL، PREFETCHW، RDRND، AES، SHA، RDSEED، XSAVE، XSAVEC، XSAVES، XSAVEOPT، CLFLUSHOPT، FSGSBASE، PTWRITE، RDPID، SGX، CLWB، GFNI\-SSE، MOVDIRI، MOVDIR64B، CLDEMOTE و WAITPKG. .IP \fBsierraforest\fR 4 .IX Item "sierraforest" پردازنده Intel Sierra Forest با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، AES، PREFETCHW، PCLMUL، RDRND، XSAVE، XSAVEC، XSAVES، XSAVEOPT، FSGSBASE، PTWRITE، RDPID، SGX، GFNI\-SSE، CLWB، MOVDIRI، MOVDIR64B، CLDEMOTE، WAITPKG، ADCX، AVX، AVX2، BMI، BMI2، F16C، FMA، LZCNT، PCONFIG، PKU، VAES، VPCLMULQDQ، SERIALIZE، HRESET، KL، WIDEKL، AVX\-VNNI، AVXIFMA، AVXVNNIINT8، AVXNECONVERT، CMPCCXADD، ENQCMD و UINTR. .IP \fBgrandridge\fR 4 .IX Item "grandridge" پردازنده Intel Grand Ridge با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، AES، PREFETCHW، PCLMUL، RDRND، XSAVE، XSAVEC، XSAVES، XSAVEOPT، FSGSBASE، PTWRITE، RDPID، SGX، GFNI\-SSE، CLWB، MOVDIRI، MOVDIR64B، CLDEMOTE، WAITPKG، ADCX، AVX، AVX2، BMI، BMI2، F16C، FMA، LZCNT، PCONFIG، PKU، VAES، VPCLMULQDQ، SERIALIZE، HRESET، KL، WIDEKL، AVX\-VNNI، AVXIFMA، AVXVNNIINT8، AVXNECONVERT، CMPCCXADD، ENQCMD و UINTR. .IP \fBclearwaterforest\fR 4 .IX Item "clearwaterforest" پردازنده Intel Clearwater Forest با افزونه‌های 64\-bit و پشتیبانی از مجموعه‌دستورالعمل‌های MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، AES، PREFETCHW، PCLMUL، RDRND، XSAVE، XSAVEC، XSAVES، XSAVEOPT، FSGSBASE، PTWRITE، RDPID، SGX، GFNI\-SSE، CLWB، MOVDIRI، MOVDIR64B، CLDEMOTE، WAITPKG، ADCX، AVX، AVX2، BMI، BMI2، F16C، FMA، LZCNT، PCONFIG، PKU، VAES، VPCLMULQDQ، SERIALIZE، HRESET، AVX\-VNNI، ENQCMD، UINTR، AVXIFMA، AVXVNNIINT8، AVXNECONVERT، CMPCCXADD، AVXVNNIINT16، SHA512، SM3، SM4، USER_MSR و PREFETCHI. .IP \fBk6\fR 4 .IX Item "k6" پردازنده AMD K6 با پشتیبانی از مجموعه‌دستورالعمل MMX. .IP \fBk6\-2\fR 4 .IX Item "k6-2" .PD 0 .IP \fBk6\-3\fR 4 .IX Item "k6-3" .PD نسخه‌های بهبودیافته پردازنده AMD K6 با پشتیبانی از مجموعه‌دستورالعمل‌های MMX و 3DNow!. .IP \fBathlon\fR 4 .IX Item "athlon" .PD 0 .IP \fBathlon\-tbird\fR 4 .IX Item "athlon-tbird" .PD پردازنده AMD Athlon با پشتیبانی از مجموعه‌دستورالعمل‌های MMX، ‏3dNOW!، ‏enhanced 3DNow! و دستورالعمل‌های پیش‌واکشی SSE. .IP \fBathlon\-4\fR 4 .IX Item "athlon-4" .PD 0 .IP \fBathlon\-xp\fR 4 .IX Item "athlon-xp" .IP \fBathlon\-mp\fR 4 .IX Item "athlon-mp" .PD پردازنده بهبودیافته AMD Athlon با پشتیبانی از مجموعه‌دستورالعمل‌های MMX، ‏3DNow!، ‏enhanced 3DNow! و پشتیبانی کامل از مجموعه‌دستورالعمل SSE. .IP \fBk8\fR 4 .IX Item "k8" .PD 0 .IP \fBopteron\fR 4 .IX Item "opteron" .IP \fBathlon64\fR 4 .IX Item "athlon64" .IP \fBathlon\-fx\fR 4 .IX Item "athlon-fx" .PD پردازنده‌های مبتنی بر هسته AMD K8 با پشتیبانی از مجموعه‌دستورالعمل x86\-64، شامل پردازنده‌های AMD Opteron، Athlon 64 و Athlon 64 FX. (این مورد ابرمجموعه‌ای از MMX، SSE، SSE2، 3DNow!، enhanced 3DNow! و افزونه‌های مجموعه‌دستورالعمل 64\-bit است.) .IP \fBk8\-sse3\fR 4 .IX Item "k8-sse3" .PD 0 .IP \fBopteron\-sse3\fR 4 .IX Item "opteron-sse3" .IP \fBathlon64\-sse3\fR 4 .IX Item "athlon64-sse3" .PD نسخه‌های بهبودیافته هسته‌های AMD K8 با پشتیبانی از مجموعه‌دستورالعمل SSE3. .IP \fBamdfam10\fR 4 .IX Item "amdfam10" .PD 0 .IP \fBbarcelona\fR 4 .IX Item "barcelona" .PD پردازنده‌های مبتنی بر هسته‌های AMD Family 10h با پشتیبانی از مجموعه‌دستورالعمل x86\-64. (این مورد ابرمجموعه‌ای از MMX، SSE، SSE2، SSE3، SSE4A، 3DNow!، enhanced 3DNow!، ABM و افزونه‌های مجموعه‌دستورالعمل 64\-bit است.).IP \fBbdver1\fR 4 .IX Item "bdver1" پردازنده‌های مبتنی بر هسته‌های AMD Family 15h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از FMA4، AVX، XOP، LWP، AES، PCLMUL، CX16، MMX، SSE، SSE2، SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBbdver2\fR 4 .IX Item "bdver2" پردازنده‌های مبتنی بر هستهٔ AMD Family 15h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از BMI، TBM، F16C، FMA، FMA4، AVX، XOP، LWP، AES، PCLMUL، CX16، MMX، SSE، SSE2، SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBbdver3\fR 4 .IX Item "bdver3" پردازنده‌های مبتنی بر هستهٔ AMD Family 15h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از BMI، TBM، F16C، FMA، FMA4، FSGSBASE، AVX، XOP، LWP، AES، PCLMUL، CX16، MMX، SSE، SSE2، SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBbdver4\fR 4 .IX Item "bdver4" پردازنده‌های مبتنی بر هستهٔ AMD Family 15h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از BMI، BMI2، TBM، F16C، FMA، FMA4، FSGSBASE، AVX، AVX2، XOP، LWP، AES، PCLMUL، CX16، MOVBE، MMX، SSE، SSE2، SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBznver1\fR 4 .IX Item "znver1" پردازنده‌های مبتنی بر هستهٔ AMD Family 17h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از BMI، BMI2، F16C، FMA، FSGSBASE، AVX، AVX2، ADCX، RDSEED، MWAITX، SHA، CLZERO، AES، PCLMUL، CX16، MOVBE، MMX، SSE، SSE2، SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM، XSAVEC، XSAVES، CLFLUSHOPT، POPCNT و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBznver2\fR 4 .IX Item "znver2" پردازنده‌های مبتنی بر هستهٔ AMD Family 17h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از BMI، BMI2، CLWB، F16C، FMA، FSGSBASE، AVX، AVX2، ADCX، RDSEED، MWAITX، SHA، CLZERO، AES، PCLMUL، CX16، MOVBE، MMX، SSE، SSE2، SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM، XSAVEC، XSAVES، CLFLUSHOPT، POPCNT، RDPID، WBNOINVD و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBznver3\fR 4 .IX Item "znver3" پردازنده‌های مبتنی بر هستهٔ AMD Family 19h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از BMI، BMI2، CLWB، F16C، FMA، FSGSBASE، AVX، AVX2، ADCX، RDSEED، MWAITX، SHA، CLZERO، AES، PCLMUL، CX16، MOVBE، MMX، SSE، SSE2، SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM، XSAVEC، XSAVES، CLFLUSHOPT، POPCNT، RDPID، WBNOINVD، PKU، VPCLMULQDQ، VAES و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBznver4\fR 4 .IX Item "znver4" پردازنده‌های مبتنی بر هستهٔ AMD Family 19h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از BMI، BMI2، CLWB، F16C، FMA، FSGSBASE، AVX، AVX2، ADCX، RDSEED، MWAITX، SHA، CLZERO، AES، PCLMUL، CX16، MOVBE، MMX، SSE، SSE2، SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM، XSAVEC، XSAVES، CLFLUSHOPT، POPCNT، RDPID، WBNOINVD، PKU، VPCLMULQDQ، VAES، AVX512F، AVX512DQ، AVX512IFMA، AVX512CD، AVX512BW، AVX512VL، AVX512BF16، AVX512VBMI، AVX512VBMI2، AVX512VNNI، AVX512BITALG، AVX512VPOPCNTDQ، GFNI و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBznver5\fR 4 .IX Item "znver5" پردازنده‌های مبتنی بر هستهٔ AMD Family 1ah با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از BMI، BMI2، CLWB، F16C، FMA، FSGSBASE، AVX، AVX2، ADCX، RDSEED، MWAITX، SHA، CLZERO، AES، PCLMUL، CX16، MOVBE، MMX، SSE، SSE2، SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM، XSAVEC، XSAVES، CLFLUSHOPT، POPCNT، RDPID، WBNOINVD، PKU، VPCLMULQDQ، VAES، AVX512F، AVX512DQ، AVX512IFMA، AVX512CD، AVX512BW، AVX512VL، AVX512BF16، AVX512VBMI، AVX512VBMI2، AVX512VNNI، AVX512BITALG، AVX512VPOPCNTDQ، GFNI، AVXVNNI، MOVDIRI، MOVDIR64B، AVX512VP2INTERSECT، PREFETCHI و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBbtver1\fR 4 .IX Item "btver1" پردازنده‌های مبتنی بر هسته‌های AMD Family 14h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. (این گزینه ابرمجموعه‌ای از MMX، SSE، SSE2، SSE3، SSSE3، SSE4A، CX16، ABM و افزونه‌های مجموعه دستورالعمل‌های 64\-bit است.) .IP \fBbtver2\fR 4 .IX Item "btver2" پردازنده‌های مبتنی بر هسته‌های AMD Family 16h با پشتیبانی از مجموعه دستورالعمل‌های x86\-64. این شامل MOVBE، F16C، BMI، AVX، PCLMUL، AES، SSE4.2، SSE4.1، CX16، ABM، SSE4A، SSSE3، SSE3، SSE2، SSE، MMX و افزونه‌های مجموعه دستورالعمل‌های 64\-bit می‌شود. .IP \fBwinchip\-c6\fR 4 .IX Item "winchip-c6" پردازندهٔ IDT WinChip C6، که همانند i486 به همراه پشتیبانی بیشتر از مجموعه دستورالعمل‌های MMX با آن رفتار می‌شود. .IP \fBwinchip2\fR 4 .IX Item "winchip2" پردازندهٔ IDT WinChip 2، که همانند i486 به همراه پشتیبانی بیشتر از مجموعه دستورالعمل‌های MMX و 3DNow! با آن رفتار می‌شود. .IP \fBc3\fR 4 .IX Item "c3" پردازندهٔ VIA C3 با پشتیبانی از مجموعه دستورالعمل‌های MMX و 3DNow!. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBc3\-2\fR 4 .IX Item "c3-2" پردازندهٔ VIA C3\-2 (Nehemiah/C5XL) با پشتیبانی از مجموعه دستورالعمل‌های MMX و SSE. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBc7\fR 4 .IX Item "c7" پردازندهٔ VIA C7 (Esther) با پشتیبانی از مجموعه دستورالعمل‌های MMX، SSE، SSE2 و SSE3. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBsamuel\-2\fR 4 .IX Item "samuel-2" پردازندهٔ VIA Eden Samuel 2 با پشتیبانی از مجموعه دستورالعمل‌های MMX و 3DNow!. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBnehemiah\fR 4 .IX Item "nehemiah" پردازندهٔ VIA Eden Nehemiah با پشتیبانی از مجموعه دستورالعمل‌های MMX و SSE. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBesther\fR 4 .IX Item "esther" پردازندهٔ VIA Eden Esther با پشتیبانی از مجموعه دستورالعمل‌های MMX، SSE، SSE2 و SSE3. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBeden\-x2\fR 4 .IX Item "eden-x2" پردازندهٔ VIA Eden X2 با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MMX، SSE، SSE2 و SSE3. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBeden\-x4\fR 4 .IX Item "eden-x4" پردازندهٔ VIA Eden X4 با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، AVX و AVX2. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBnano\fR 4 .IX Item "nano" پردازندهٔ عمومی VIA Nano با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MMX، SSE، SSE2، SSE3 و SSSE3. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBnano\-1000\fR 4 .IX Item "nano-1000" پردازندهٔ VIA Nano 1xxx با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MMX، SSE، SSE2، SSE3 و SSSE3. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBnano\-2000\fR 4 .IX Item "nano-2000" پردازندهٔ VIA Nano 2xxx با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MMX، SSE، SSE2، SSE3 و SSSE3. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBnano\-3000\fR 4 .IX Item "nano-3000" پردازندهٔ VIA Nano 3xxx با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MMX، SSE، SSE2، SSE3، SSSE3 و SSE4.1. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBnano\-x2\fR 4 .IX Item "nano-x2" پردازندهٔ VIA Nano Dual Core با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MMX، SSE، SSE2، SSE3، SSSE3 و SSE4.1. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBnano\-x4\fR 4 .IX Item "nano-x4" پردازندهٔ VIA Nano Quad Core با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MMX، SSE، SSE2، SSE3، SSSE3 و SSE4.1. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBlujiazui\fR 4 .IX Item "lujiazui" پردازندهٔ ZHAOXIN lujiazui با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، AES، PCLMUL، RDRND، XSAVE، XSAVEOPT، FSGSBASE، CX16، ABM، BMI، BMI2، FXSR، RDSEED. اگرچه این پردازنده‌ها از AVX و F16C پشتیبانی می‌کنند، اما به دلایل کارایی توسط \f(CW\*(C`\-march=lujiazui\*(C'\fR فعال نشده‌اند. .IP \fByongfeng\fR 4 .IX Item "yongfeng" پردازندهٔ ZHAOXIN yongfeng با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، AVX، POPCNT، AES، PCLMUL، RDRND، XSAVE، XSAVEOPT، FSGSBASE، CX16، ABM، BMI، BMI2، F16C، FXSR، RDSEED، AVX2، FMA، SHA، LZCNT. .IP \fBshijidadao\fR 4 .IX Item "shijidadao" پردازندهٔ ZHAOXIN shijidadao با پشتیبانی از مجموعه دستورالعمل‌های x86\-64، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، AVX، POPCNT، AES، PCLMUL، RDRND، XSAVE، XSAVEOPT، FSGSBASE، CX16، ABM، BMI، BMI2، F16C، FXSR، RDSEED، AVX2، FMA، SHA، LZCNT. .IP \fBgeode\fR 4 .IX Item "geode" پردازندهٔ توکار AMD Geode با پشتیبانی از مجموعه دستورالعمل‌های MMX و 3DNow!. .RE .RS 4 .RE .IP \fB\-mtune=\fR\fIcpu\-type\fR 4 .IX Item "-mtune=cpu-type" همهٔ موارد قابل‌اعمال در کد تولیدشده، به‌جز ABI و مجموعهٔ دستورالعمل‌های دردسترس را برای \fIcpu\-type\fR بهینه‌سازی می‌کند. در حالی که انتخاب یک \fIcpu\-type\fR خاص زمان‌بندی را متناسب با آن تراشهٔ ویژه تنظیم می‌کند، کامپایلر هیچ کدی تولید نمی‌کند که نتواند روی نوع ماشین پیش‌فرض اجرا شود، مگر اینکه از گزینهٔ \&\fB\-march=\fR\fIcpu\-type\fR استفاده کنید. برای مثال، اگر GCC برای i686\-pc\-linux\-gnu پیکربندی شده باشد، گزینهٔ \fB\-mtune=pentium4\fR کدی تولید می‌کند که برای Pentium 4 بهینه‌سازی شده اما همچنان روی ماشین‌های i686 اجرا می‌شود. .Sp گزینه‌های قابل‌انتخاب برای \fIcpu\-type\fR مشابه با گزینه‌های \fB\-march\fR هستند. علاوه بر این، \fB\-mtune\fR از ۲ گزینهٔ اضافی دیگر برای \fIcpu\-type\fR پشتیبانی می‌کند: .RS 4.IP \fBgeneric\fR 4 .IX Item "generic" تولید کد بهینه‌سازی‌شده برای رایج‌ترین پردازنده‌های IA32/AMD64/EM64T. اگر از پردازنده‌ای که کد شما روی آن اجرا خواهد شد اطلاع دارید، باید به جای \&\fB\-mtune=generic\fR از گزینه متناظر \fB\-mtune\fR یا \fB\-march\fR استفاده کنید. اما اگر دقیقاً نمی‌دانید کاربران برنامه شما چه پردازنده‌ای خواهند داشت، باید این گزینه را به کار ببرید. .Sp با ورود پردازنده‌های جدید به بازار، رفتار این گزینه تغییر خواهد کرد. بنابراین، اگر به نسخه جدیدتری از GCC ارتقا دهید، تولید کد هدایت‌شده توسط این گزینه تغییر خواهد کرد تا منعکس‌کننده پردازنده‌هایی باشد که در زمان انتشار آن نسخه از GCC بیشترین عمومیت را دارند. .Sp گزینه‌ای به نام \fB\-march=generic\fR وجود ندارد، چرا که \fB\-march\fR مشخص‌کننده مجموعه دستورالعمل‌هایی است که کامپایلر می‌تواند استفاده کند، و هیچ مجموعه دستورالعمل عمومی (generic) که برای همه پردازنده‌ها قابل اعمال باشد وجود ندارد. در مقابل، \&\fB\-mtune\fR پردازنده (یا در این حالت، مجموعه‌ای از پردازنده‌ها) را تعیین می‌کند که کد برای آن بهینه‌سازی می‌شود. .IP \fBintel\fR 4 .IX Item "intel" تولید کد بهینه‌سازی‌شده برای جدیدترین پردازنده‌های Intel، که برای این نسخه از GCC شامل Haswell و Silvermont هستند. اگر پردازنده‌ای را که کد شما روی آن اجرا خواهد شد می‌شناسید، باید به جای \fB\-mtune=intel\fR از گزینه متناظر \&\fB\-mtune\fR یا \fB\-march\fR استفاده کنید. اما اگر می‌خواهید برنامه‌تان روی هر دوی Haswell و Silvermont عملکرد بهتری داشته باشد، باید از این گزینه استفاده کنید. .Sp با عرضه پردازنده‌های جدید Intel در بازار، رفتار این گزینه تغییر خواهد کرد. بنابراین، اگر به نسخه جدیدتری از GCC ارتقا دهید، تولید کد هدایت‌شده توسط این گزینه برای بازتاب جدیدترین پردازنده‌های Intel در زمان انتشار آن نسخه از GCC تغییر خواهد کرد. .Sp گزینه‌ای به نام \fB\-march=intel\fR وجود ندارد زیرا \fB\-march\fR نشان‌دهنده مجموعه دستورالعمل‌هایی است که کامپایلر مجاز به استفاده از آن‌هاست، و هیچ مجموعه دستورالعمل مشترکی که برای همه پردازنده‌ها معتبر باشد وجود ندارد. در مقابل، \&\fB\-mtune\fR پردازنده (یا در این مورد، مجموعه‌ای از پردازنده‌ها) را تعیین می‌کند که کد برای آن بهینه‌سازی شده است. .RE .RS 4 .RE .IP \fB\-mcpu=\fR\fIcpu\-type\fR 4 .IX Item "-mcpu=cpu-type" یک مترادف منسوخ‌شده برای \fB\-mtune\fR. .IP \fB\-mfpmath=\fR\fIunit\fR 4 .IX Item "-mfpmath=unit" تولید محاسبات ممیز شناور برای واحد انتخاب‌شده \fIunit\fR. گزینه‌های قابل انتخاب برای \fIunit\fR عبارتند از: .RS 4 .IP \fB387\fR 4 .IX Item "387" استفاده از کمک‌پردازنده ممیز شناور استاندارد 387 موجود روی اکثر تراشه‌ها که در غیر این صورت شبیه‌سازی می‌شود. کدی که با این گزینه کامپایل شود تقریباً در همه‌جا اجرا می‌گردد. نتایج موقت به جای دقت تعیین‌شده توسط نوع داده، با دقت ۸۰ بیتی محاسبه می‌شوند که منجر به نتایجی با تفاوت اندک در مقایسه با اکثر تراشه‌های دیگر می‌شود. برای توضیحات دقیق‌تر، \fB\-ffloat\-store\fR را ببینید. .Sp این گزینه پیش‌فرض برای اهداف غیرِ Darwin روی x86\-32 است. .IP \fBsse\fR 4 .IX Item "sse" استفاده از دستورالعمل‌های ممیز شناور اسکالر (scalar) موجود در مجموعه دستورالعمل SSE. این مجموعه دستورالعمل توسط Pentium III و تراشه‌های جدیدتر، و در خانواده AMD توسط تراشه‌های Athlon\-4، Athlon XP و Athlon MP پشتیبانی می‌شود. نسخه اولیه مجموعه دستورالعمل SSE تنها از محاسبات با دقت یگانه (single\-precision) پشتیبانی می‌کند، بنابراین محاسبات با دقت مضاعف (double) و دقت بسط‌یافته (extended\-precision) همچنان با استفاده از 387 انجام می‌گیرند. نسخه بعدی، که تنها در پردازنده‌های Pentium 4 و AMD x86\-64 موجود است، از محاسبات با دقت مضاعف نیز پشتیبانی می‌کند. .Sp برای کامپایلر x86\-32، باید از سوئیچ‌های \fB\-march=\fR\fIcpu\-type\fR، \fB\-msse\fR یا \fB\-msse2\fR استفاده کنید تا افزونه‌های SSE فعال شده و این گزینه اثرگذار شود. برای کامپایلر x86\-64، این افزونه‌ها به طور پیش‌فرض فعال هستند. .Sp کد حاصل در بیشتر موارد به طور قابل‌توجهی سریع‌تر خواهد بود و از مشکلات ناپایداری محاسباتی کد 387 دوری می‌جوید، اما ممکن است برخی کدهای موجود را که انتظار دارند متغیرهای موقت ۸۰ بیتی باشند دچار مشکل کند. .Sp این گزینه پیش‌فرض برای کامپایلر x86\-64، اهداف Darwin x86\-32، و انتخاب پیش‌فرض برای اهداف x86\-32 مجهز به مجموعه دستورالعمل SSE2 هنگام فعال بودن \fB\-ffast\-math\fR است. .IP \fBsse,387\fR 4 .IX Item "sse,387" .PD 0 .IP \fBsse+387\fR 4 .IX Item "sse+387" .IP \fBboth\fR 4 .IX Item "both" .PD تلاش برای استفاده هم‌زمان از هر دو مجموعه دستورالعمل. این کار عملاً تعداد ثبات‌های در دسترس را دو برابر می‌کند، و در تراشه‌های دارای واحدهای اجرای مجزا برای 387 و SSE منابع پردازشی را نیز دوچندان می‌سازد. از این گزینه با احتیاط استفاده کنید، چرا که هنوز آزمایشی است، زیرا تخصیص‌دهنده ثبات GCC واحدهای عملیاتی مجزا را به خوبی مدل‌سازی نمی‌کند که منجر به عملکردی ناپایدار می‌شود. .RE .RS 4 .RE .IP \fB\-masm=\fR\fIdialect\fR 4 .IX Item "-masm=dialect" خروجی دادن دستورالعمل‌های اسمبلی با استفاده از گویش (\fIdialect\fR) انتخاب‌شده. همچنین بر این نکته تأثیر می‌گذارد که کدام گویش برای \f(CW\*(C`asm\*(C'\fR پایه و \f(CW\*(C`asm\*(C'\fR بسط‌یافته استفاده شود. گزینه‌های پشتیبانی‌شده (به ترتیب گویش) عبارتند از \fBatt\fR یا \fBintel\fR. پیش‌فرض \fBatt\fR است. Darwin از \fBintel\fR پشتیبانی نمی‌کند. .IP \fB\-mieee\-fp\fR 4 .IX Item "-mieee-fp" .PD 0 .IP \fB\-mno\-ieee\-fp\fR 4 .IX Item "-mno-ieee-fp" .PD کنترل اینکه آیا کامپایلر از مقایسه‌های ممیز شناور IEEE استفاده کند یا خیر. این مقایسه‌ها حالتی را که نتیجه یک مقایسه نامرتب (unordered) است به درستی مدیریت می‌کنند. .IP \fB\-m80387\fR 4 .IX Item "-m80387" .PD 0 .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD تولید خروجی حاوی دستورالعمل‌های 80387 برای ممیز شناور. .IP \fB\-mno\-80387\fR 4 .IX Item "-mno-80387" .PD 0 .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD تولید خروجی حاوی فراخوانی‌های کتابخانه‌ای برای ممیز شناور. .Sp \&\fBهشدار:\fR کتابخانه‌های مورد نیاز بخشی از GCC نیستند. به طور معمول از امکانات کامپایلر C مرسومِ سیستم استفاده می‌شود، اما این کار در کامپایل متقابل (cross\-compilation) به طور مستقیم امکان‌پذیر نیست. شما باید تمهیدات لازم را برای فراهم آوردن توابع کتابخانه‌ای مناسب جهت کامپایل متقابل شخصاً مهیا کنید. .Sp روی ماشین‌هایی که یک تابع مقادیر ممیز شناور را در پشته ثبات‌های 80387 بازمی‌گرداند، ممکن است حتی در صورت استفاده از \&\fB\-msoft\-float\fR نیز برخی آپ‌کدهای ممیز شناور تولید شوند. .IP \fB\-mno\-fp\-ret\-in\-387\fR 4 .IX Item "-mno-fp-ret-in-387" عدم استفاده از ثبات‌های FPU برای مقادیر بازگشتی توابع. .Sp قرارداد فراخوانی معمول بدین صورت است که توابع، مقادیر از نوع \&\f(CW\*(C`float\*(C'\fR و \f(CW\*(C`double\*(C'\fR را در یک ثبات FPU بازمی‌گردانند، حتی اگر هیچ FPU وجود نداشته باشد. فرضیه این است که سیستم‌عامل باید یک FPU را شبیه‌سازی کند. .Sp گزینه \fB\-mno\-fp\-ret\-in\-387\fR باعث می‌شود این‌گونه مقادیر در عوض در ثبات‌های معمولی CPU بازگردانده شوند. .IP \fB\-mno\-fancy\-math\-387\fR 4 .IX Item "-mno-fancy-math-387" برخی از شبیه‌سازهای 387 از دستورالعمل‌های \f(CW\*(C`sin\*(C'\fR، \f(CW\*(C`cos\*(C'\fR و \&\f(CW\*(C`sqrt\*(C'\fR برای 387 پشتیبانی نمی‌کنند. این گزینه را برای جلوگیری از تولید این دستورالعمل‌ها تعیین کنید. این گزینه زمانی که \fB\-march\fR مشخص کند CPU هدف همواره دارای یک FPU است و بنابراین دستورالعمل نیازی به شبیه‌سازی ندارد، نادیده گرفته می‌شود. این دستورالعمل‌ها تولید نمی‌شوند مگر اینکه هم‌زمان از سوئیچ \&\fB\-funsafe\-math\-optimizations\fR نیز استفاده کنید. .IP \fB\-malign\-double\fR 4 .IX Item "-malign-double" .PD 0 .IP \fB\-mno\-align\-double\fR 4 .IX Item "-mno-align-double" .PD کنترل اینکه آیا GCC متغیرهای \f(CW\*(C`double\*(C'\fR، \f(CW\*(C`long double\*(C'\fR، و \&\f(CW\*(C`long long\*(C'\fR را روی مرز دو کلمه‌ای تراز کند یا روی مرز یک کلمه‌ای. تراز کردن متغیرهای \f(CW\*(C`double\*(C'\fR روی یک مرز دو کلمه‌ای کدی تولید می‌کند که روی یک Pentium تا حدی سریع‌تر اجرا می‌شود، هرچند به بهای مصرف حافظه بیشتر. .Sp روی x86\-64، گزینه \fB\-malign\-double\fR به صورت پیش‌فرض فعال است. .Sp \&\fBهشدار:\fR در صورت استفاده از سوئیچ \fB\-malign\-double\fR، ساختارهایی که شامل انواع فوق باشند، متفاوت از مشخصاتِ منتشرشده‌ی واسط باینری کاربردی (ABI) برای x86\-32 تراز می‌شوند و با ساختارها در کدهای کامپایل‌شده بدون این سوئیچ از نظر باینری سازگار نخواهند بود. .IP \fB\-m96bit\-long\-double\fR 4 .IX Item "-m96bit-long-double" .PD 0.IP \fB\-m128bit\-long\-double\fR 4 .IX Item "-m128bit-long-double" .PD این گزینه‌ها اندازهٔ نوع داده \f(CW\*(C`long double\*(C'\fR را کنترل می‌کنند. رابط باینری کاربردی (ABI) در x86\-32 این اندازه را ۹۶ بیت مشخص می‌کند، بنابراین \fB\-m96bit\-long\-double\fR در حالت ۳۲ بیتی پیش‌فرض است. .Sp معماری‌های جدید (Pentium و تازه‌تر) ترجیح می‌دهند \f(CW\*(C`long double\*(C'\fR با یک مرز ۸ یا ۱۶ بایتی هم‌تراز شود. در آرایه‌ها یا ساختارهای منطبق با ABI، این امر امکان‌پذیر نیست. بنابراین تعیین \&\fB\-m128bit\-long\-double\fR با افزودن ۳۲ بیت صفرِ اضافی به \f(CW\*(C`long double\*(C'\fR، آن را با یک مرز ۱۶ بایتی تراز می‌کند. .Sp در کامپایلر x86\-64، گزینهٔ \fB\-m128bit\-long\-double\fR انتخاب پیش‌فرض است، زیرا ABI آن مشخص می‌کند که \f(CW\*(C`long double\*(C'\fR روی یک مرز ۱۶ بایتی تراز شود. .Sp توجه داشته باشید که هیچ‌یک از این گزینه‌ها دقتی فراتر از استاندارد ۸۰ بیتی x87 برای \f(CW\*(C`long double\*(C'\fR ارائه نمی‌دهند. .Sp \&\fBهشدار:\fR اگر مقدار پیش‌فرض را برای ABI هدف خود تغییر دهید، اندازهٔ ساختارها و آرایه‌های حاوی متغیرهای \f(CW\*(C`long double\*(C'\fR دگرگون می‌شود و همچنین قرارداد فراخوانی برای توابعی که آرگومان \f(CW\*(C`long double\*(C'\fR می‌گیرند تغییر می‌کند. از این رو، آن‌ها با کدهایی که بدون این گزینه کامپایل شده‌اند سازگاری باینری نخواهند داشت. .IP \fB\-mlong\-double\-64\fR 4 .IX Item "-mlong-double-64" .PD 0 .IP \fB\-mlong\-double\-80\fR 4 .IX Item "-mlong-double-80" .IP \fB\-mlong\-double\-128\fR 4 .IX Item "-mlong-double-128" .PD این گزینه‌ها اندازهٔ نوع داده \f(CW\*(C`long double\*(C'\fR را کنترل می‌کنند. اندازهٔ ۶۴ بیتی نوع \f(CW\*(C`long double\*(C'\fR را معادل نوع \f(CW\*(C`double\*(C'\fR می‌سازد. این حالت پیش‌فرض برای کتابخانه ۳۲ بیتی Bionic C است. اندازهٔ ۱۲۸ بیتی نوع \f(CW\*(C`long double\*(C'\fR را معادل نوع \&\f(CW\*(C`_\|_float128\*(C'\fR قرار می‌دهد. این مقدار پیش‌فرض برای کتابخانه ۶۴ بیتی Bionic C است. .Sp \&\fBهشدار:\fR اگر مقدار پیش‌فرض را برای ABI هدف خود بازنویسی کنید، این کار اندازهٔ ساختارها و آرایه‌های حاوی متغیرهای \f(CW\*(C`long double\*(C'\fR را تغییر داده و همچنین قرارداد فراخوانی را برای توابعی که آرگومان \&\f(CW\*(C`long double\*(C'\fR می‌پذیرند اصلاح می‌کند. در نتیجه، آن‌ها با کدهایی که بدون این گزینه کامپایل شده‌اند سازگاری باینری نخواهند داشت. .IP \fB\-malign\-data=\fR\fItype\fR 4 .IX Item "-malign-data=type" چگونگی تراز کردن متغیرها توسط GCC را کنترل می‌کند. مقادیر پشتیبانی‌شده برای \fItype\fR عبارتند از: \&\fBcompat\fR از مقدار تراز افزایش‌یافتهٔ سازگار با GCC 4.8 و پیش از آن استفاده می‌کند، \fBabi\fR از مقدار تراز مشخص‌شده توسط psABI بهره می‌برد، و \fBcacheline\fR از مقدار تراز افزایش‌یافته جهت تطابق با اندازهٔ خط حافظهٔ نهان (cache line) استفاده می‌کند. مقدار پیش‌فرض \fBcompat\fR است. .IP \fB\-mlarge\-data\-threshold=\fR\fIthreshold\fR 4 .IX Item "-mlarge-data-threshold=threshold" هنگامی که \fB\-mcmodel=medium\fR یا \fB\-mcmodel=large\fR مشخص شده باشد، اشیاء داده‌ای بزرگ‌تر از \fIthreshold\fR در بخش‌های داده‌های بزرگ (large data sections) قرار می‌گیرند. مقدار پیش‌فرض ۶۵۵۳۵ است. .IP \fB\-mrtd\fR 4 .IX Item "-mrtd" از یک قرارداد فراخوانی توابع متفاوت استفاده می‌کند که در آن توابعی با تعداد ثابتی از آرگومان‌ها با دستورالعمل \f(CW\*(C`ret \fR\f(CInum\fR\f(CW\*(C'\fR برمی‌گردند، که آرگومان‌های آن‌ها را هنگام بازگشت از پشته خارج (pop) می‌کند. این کار یک دستورالعمل در تابع فراخواننده صرفه‌جویی می‌کند، زیرا در آنجا نیازی به خارج کردن آرگومان‌ها نخواهد بود. .Sp می‌توانید تعیین کنید که یک تابع خاص با استفاده از ویژگی تابع \f(CW\*(C`stdcall\*(C'\fR با این توالی فراخوانی صدا زده شود. همچنین می‌توانید گزینهٔ \fB\-mrtd\fR را با استفاده از ویژگی تابع \&\f(CW\*(C`cdecl\*(C'\fR لغو و خنثی کنید. .Sp \&\fBهشدار:\fR این قرارداد فراخوانی با قراردادی که معمولاً در Unix استفاده می‌شود ناسازگار است؛ بنابراین اگر نیاز به فراخوانی کتابخانه‌های کامپایل‌شده با کامپایلر Unix دارید، نمی‌توانید از آن استفاده کنید. .Sp همچنین، باید اعلان پیش‌نمونه (prototype) را برای تمام توابعی که تعداد متغیری آرگومان می‌گیرند (از جمله \f(CW\*(C`printf\*(C'\fR) مشخص کنید؛ در غیر این صورت کدهای نادرستی برای فراخوانی آن توابع تولید می‌شود. .Sp علاوه بر این، اگر تابعی را با آرگومان‌های بیش از حد فراخوانی کنید، کد به شدت نادرستی حاصل خواهد شد. (در حالت عادی، آرگومان‌های اضافی بدون آسیب نادیده گرفته می‌شوند.) .IP \fB\-mregparm=\fR\fInum\fR 4 .IX Item "-mregparm=num" تعداد ثبات‌هایی را که برای ارسال آرگومان‌های عدد صحیح استفاده می‌شوند کنترل می‌کند. به‌طور پیش‌فرض، هیچ ثباتی برای ارسال آرگومان‌ها استفاده نمی‌شود و حداکثر می‌توان از ۳ ثبات استفاده کرد. می‌توانید این رفتار را برای یک تابع خاص با استفاده از ویژگی تابع \f(CW\*(C`regparm\*(C'\fR کنترل کنید. .Sp \&\fBهشدار:\fR اگر از این گزینه استفاده کنید و مقدار \&\fInum\fR غیرصفر باشد، باید تمام پودمان‌ها، از جمله هرگونه کتابخانه را با همان مقدار بسازید. این امر کتابخانه‌های سیستم و پودمان‌های راه‌اندازی (startup modules) را نیز در بر می‌گیرد. .IP \fB\-msseregparm\fR 4 .IX Item "-msseregparm" از قراردادهای ارسال ثبات SSE برای آرگومان‌ها و مقادیر بازگشتی float و double استفاده می‌کند. می‌توانید این رفتار را برای یک تابع خاص با استفاده از ویژگی تابع \f(CW\*(C`sseregparm\*(C'\fR تعیین کنید. .Sp \&\fBهشدار:\fR اگر از این گزینه استفاده کنید، باید تمام پودمان‌ها از جمله هرگونه کتابخانه را با همان مقدار بسازید. این امر شامل کتابخانه‌های سیستم و پودمان‌های راه‌اندازی نیز می‌شود. .IP \fB\-mvect8\-ret\-in\-mem\fR 4 .IX Item "-mvect8-ret-in-mem" بردارهای ۸ بایتی را به‌جای ثبات‌های MMX در حافظه برمی‌گرداند. این مورد در VxWorks برای تطابق با ABI کامپایلرهای Sun Studio تا نسخهٔ ۱۲ پیش‌فرض است. \fIتنها\fR زمانی از این گزینه استفاده کنید که نیازمند حفظ سازگاری با کدهای موجود تولیدشده توسط آن نسخه‌های قبلی کامپایلر یا نسخه‌های قدیمی‌تر GCC باشید. .IP \fB\-mpc32\fR 4 .IX Item "-mpc32" .PD 0 .IP \fB\-mpc64\fR 4 .IX Item "-mpc64" .IP \fB\-mpc80\fR 4 .IX Item "-mpc80" .PD دقت ممیز شناور 80387 را روی ۳۲، ۶۴ یا ۸۰ بیت تنظیم می‌کند. زمانی که \fB\-mpc32\fR مشخص شود، مانتیس‌های نتایج عملیات ممیز شناور تا ۲۴ بیت (دقت منفرد) گرد می‌شوند؛ \fB\-mpc64\fR مانتیس‌های نتایج عملیات ممیز شناور را تا ۵۳ بیت (دقت مضاعف) گرد می‌کند و \fB\-mpc80\fR مانتیس‌های نتایج عملیات ممیز شناور را تا ۶۴ بیت (دقت مضاعف گسترش‌یافته) گرد می‌نماید که حالت پیش‌فرض است. هنگام استفاده از این گزینه، عملیات ممیز شناور با دقت‌های بالاتر بدون تنظیم صریح واژهٔ کنترل FPU در دسترس برنامه‌نویس نخواهد بود. .Sp تنظیم گرد کردن عملیات ممیز شناور به کمتر از ۸۰ بیتِ پیش‌فرض می‌تواند سرعت اجرای برخی برنامه‌ها را تا ۲٪ یا بیشتر افزایش دهد. توجه داشته باشید که برخی از کتابخانه‌های ریاضی فرض می‌کنند عملیات ممیز شناور با دقت گسترش‌یافته (۸۰ بیتی) به‌طور پیش‌فرض فعال است؛ هنگام استفاده از این گزینه برای تنظیم دقت به مقداری کمتر از دقت گسترش‌یافته، روال‌های موجود در چنین کتابخانه‌هایی ممکن است دچار افت شدید دقت شوند، که معمولاً «ابطال فاجعه‌بار» (catastrophic cancellation) نامیده می‌شود. .IP \fB\-mdaz\-ftz\fR 4 .IX Item "-mdaz-ftz" پرچم‌های flush\-to\-zero (FTZ) و denormals\-are\-zero (DAZ) در ثبات MXCSR برای کنترل محاسبات ممیز شناور به کار می‌روند. دستورالعمل‌های SSE و AVX از جمله دستورالعمل‌های اسکالر و برداری در صورت مشخص شدن \fB\-mdaz\-ftz\fR می‌توانند از فعال‌سازی پرچم‌های FTZ و DAZ بهره‌مند شوند. زمانی که \fB\-mno\-daz\-ftz\fR یا \fB\-shared\fR مشخص شده باشد، پرچم‌های FTZ/DAZ را تنظیم نکنید؛ گزینهٔ \fB\-mdaz\-ftz\fR حتی در صورت حضور \fB\-shared\fR پرچم‌های FTZ/DAZ را تنظیم خواهد کرد. .IP \fB\-mstackrealign\fR 4 .IX Item "-mstackrealign" تراز کردن مجدد پشته در بدو ورود. در x86، گزینهٔ \fB\-mstackrealign\fR یک پرولوگ و اپیلوگ جایگزین تولید می‌کند که در صورت نیاز پشتهٔ زمان اجرا را مجدداً تراز می‌نماید. این کار از ادغام کدهای قدیمی که تراز پشتهٔ ۴ بایتی را حفظ می‌کنند با کدهای جدیدی که تراز پشتهٔ ۱۶ بایتی را برای سازگاری با SSE رعایت می‌کنند پشتیبانی می‌کند. همچنین ویژگی \f(CW\*(C`force_align_arg_pointer\*(C'\fR را ببینید که برای توابع منفرد قابل اعمال است. .IP \fB\-mpreferred\-stack\-boundary=\fR\fInum\fR 4 .IX Item "-mpreferred-stack-boundary=num" تلاش می‌کند تا مرز پشته را هم‌تراز با مرز بایتی ۲ به توان \fInum\fR نگه دارد. اگر \fB\-mpreferred\-stack\-boundary\fR مشخص نشده باشد، مقدار پیش‌فرض ۴ است (۱۶ بایت یا ۱۲۸ بیت). .Sp \&\fBهشدار:\fR هنگام تولید کد برای معماری x86\-64 با افزونه‌های غیرفعال SSE، می‌توان از \fB\-mpreferred\-stack\-boundary=3\fR برای نگه داشتن مرز پشته روی مرز ۸ بایتی استفاده کرد. از آنجا که ABI در x86\-64 نیازمند تراز پشتهٔ ۱۶ بایتی است، این کار مغایر با ABI بوده و هدف آن استفاده در محیط‌های کنترل‌شده‌ای است که در آن‌ها فضای پشته یک محدودیت جدی به شمار می‌رود. این گزینه هنگامی که توابع کامپایل‌شده با تراز پشتهٔ ۱۶ بایتی (مانند توابع یک کتابخانهٔ استاندارد) با پشتهٔ ترازنشده فراخوانی شوند، منجر به کدهای اشتباه خواهد شد. در این صورت، دستورالعمل‌های SSE ممکن است باعث بروز تله‌های دسترسی ترازنشده به حافظه شوند. علاوه بر این، آرگومان‌های متغیر برای اشیاء با تراز ۱۶ بایتی (از جمله x87 long double و _\|_int128) به نادرستی مدیریت می‌شوند که منجر به نتایج اشتباه خواهد شد. شما باید تمام پودمان‌ها، از جمله هرگونه کتابخانه را با \&\fB\-mpreferred\-stack\-boundary=3\fR بسازید. این امر شامل کتابخانه‌های سیستم و پودمان‌های راه‌اندازی نیز می‌شود. .IP \fB\-mincoming\-stack\-boundary=\fR\fInum\fR 4 .IX Item "-mincoming-stack-boundary=num" فرض می‌کند که پشتهٔ ورودی با یک مرز بایتی ۲ به توان \fInum\fR تراز شده است. اگر \fB\-mincoming\-stack\-boundary\fR مشخص نشده باشد، از مقدار تعیین‌شده توسط \fB\-mpreferred\-stack\-boundary\fR استفاده می‌شود. .Sp در پردازنده‌های Pentium و Pentium Pro، مقادیر \f(CW\*(C`double\*(C'\fR و \f(CW\*(C`long double\*(C'\fR باید با یک مرز ۸ بایتی تراز شوند (گزینهٔ \fB\-malign\-double\fR را ببینید)، در غیر این صورت مشمول افت عملکرد چشمگیری در زمان اجرا می‌شوند. در Pentium III، نوع داده Streaming SIMD Extension (SSE) با نام \f(CW\*(C`_\|_m128\*(C'\fR در صورتی که با مرز ۱۶ بایتی تراز نباشد ممکن است به درستی کار نکند. .Sp برای اطمینان از هم‌ترازی صحیح این مقادیر روی پشته، مرز پشته باید به اندازهٔ مورد نیاز هر مقداری که روی آن ذخیره می‌شود تراز باشد. افزون بر این، هر تابع باید به شکلی تولید شود که پشته را تراز نگه دارد. بنابراین، فراخوانی تابعی که با مرز پشتهٔ ترجیحی بالاتری کامپایل شده است از درون تابعی که با مرز پشتهٔ ترجیحی پایین‌تری کامپایل شده، به احتمال زیاد تراز پشته را به هم می‌زند. توصیه می‌شود کتابخانه‌هایی که از بازفراخوانی‌ها (callbacks) استفاده می‌کنند همواره از تنظیمات پیش‌فرض بهره ببرند. .Sp این تراز اضافی فضای بیشتری از پشته مصرف می‌کند و به‌طور کلی اندازهٔ کد را افزایش می‌دهد. کدهایی که به مصرف فضای پشته حساس هستند، مانند سیستم‌های تعبیه‌شده (embedded systems) و هسته‌های سیستم‌عامل، ممکن است مایل باشند تراز ترجیحی را به \fB\-mpreferred\-stack\-boundary=2\fR کاهش دهند..IP \fB\-mmmx\fR 4 .IX Item "-mmmx" .PD 0 .IP \fB\-msse\fR 4 .IX Item "-msse" .IP \fB\-msse2\fR 4 .IX Item "-msse2" .IP \fB\-msse3\fR 4 .IX Item "-msse3" .IP \fB\-mssse3\fR 4 .IX Item "-mssse3" .IP \fB\-msse4\fR 4 .IX Item "-msse4" .IP \fB\-msse4a\fR 4 .IX Item "-msse4a" .IP \fB\-msse4.1\fR 4 .IX Item "-msse4.1" .IP \fB\-msse4.2\fR 4 .IX Item "-msse4.2" .IP \fB\-mavx\fR 4 .IX Item "-mavx" .IP \fB\-mavx2\fR 4 .IX Item "-mavx2" .IP \fB\-mavx512f\fR 4 .IX Item "-mavx512f" .IP \fB\-mavx512cd\fR 4 .IX Item "-mavx512cd" .IP \fB\-mavx512vl\fR 4 .IX Item "-mavx512vl" .IP \fB\-mavx512bw\fR 4 .IX Item "-mavx512bw" .IP \fB\-mavx512dq\fR 4 .IX Item "-mavx512dq" .IP \fB\-mavx512ifma\fR 4 .IX Item "-mavx512ifma" .IP \fB\-mavx512vbmi\fR 4 .IX Item "-mavx512vbmi" .IP \fB\-msha\fR 4 .IX Item "-msha" .IP \fB\-maes\fR 4 .IX Item "-maes" .IP \fB\-mpclmul\fR 4 .IX Item "-mpclmul" .IP \fB\-mclflushopt\fR 4 .IX Item "-mclflushopt" .IP \fB\-mclwb\fR 4 .IX Item "-mclwb" .IP \fB\-mfsgsbase\fR 4 .IX Item "-mfsgsbase" .IP \fB\-mptwrite\fR 4 .IX Item "-mptwrite" .IP \fB\-mrdrnd\fR 4 .IX Item "-mrdrnd" .IP \fB\-mf16c\fR 4 .IX Item "-mf16c" .IP \fB\-mfma\fR 4 .IX Item "-mfma" .IP \fB\-mpconfig\fR 4 .IX Item "-mpconfig" .IP \fB\-mwbnoinvd\fR 4 .IX Item "-mwbnoinvd" .IP \fB\-mfma4\fR 4 .IX Item "-mfma4" .IP \fB\-mprfchw\fR 4 .IX Item "-mprfchw" .IP \fB\-mrdpid\fR 4 .IX Item "-mrdpid" .IP \fB\-mrdseed\fR 4 .IX Item "-mrdseed" .IP \fB\-msgx\fR 4 .IX Item "-msgx" .IP \fB\-mxop\fR 4 .IX Item "-mxop" .IP \fB\-mlwp\fR 4 .IX Item "-mlwp" .IP \fB\-m3dnow\fR 4 .IX Item "-m3dnow" .IP \fB\-m3dnowa\fR 4 .IX Item "-m3dnowa" .IP \fB\-mpopcnt\fR 4 .IX Item "-mpopcnt" .IP \fB\-mabm\fR 4 .IX Item "-mabm" .IP \fB\-madx\fR 4 .IX Item "-madx" .IP \fB\-mbmi\fR 4 .IX Item "-mbmi" .IP \fB\-mbmi2\fR 4 .IX Item "-mbmi2" .IP \fB\-mlzcnt\fR 4 .IX Item "-mlzcnt" .IP \fB\-mfxsr\fR 4 .IX Item "-mfxsr" .IP \fB\-mxsave\fR 4 .IX Item "-mxsave" .IP \fB\-mxsaveopt\fR 4 .IX Item "-mxsaveopt" .IP \fB\-mxsavec\fR 4 .IX Item "-mxsavec" .IP \fB\-mxsaves\fR 4 .IX Item "-mxsaves" .IP \fB\-mrtm\fR 4 .IX Item "-mrtm" .IP \fB\-mhle\fR 4 .IX Item "-mhle" .IP \fB\-mtbm\fR 4 .IX Item "-mtbm" .IP \fB\-mmwaitx\fR 4 .IX Item "-mmwaitx" .IP \fB\-mclzero\fR 4 .IX Item "-mclzero" .IP \fB\-mpku\fR 4 .IX Item "-mpku" .IP \fB\-mavx512vbmi2\fR 4 .IX Item "-mavx512vbmi2" .IP \fB\-mavx512bf16\fR 4 .IX Item "-mavx512bf16" .IP \fB\-mavx512fp16\fR 4 .IX Item "-mavx512fp16" .IP \fB\-mgfni\fR 4 .IX Item "-mgfni" .IP \fB\-mvaes\fR 4 .IX Item "-mvaes" .IP \fB\-mwaitpkg\fR 4 .IX Item "-mwaitpkg" .IP \fB\-mvpclmulqdq\fR 4 .IX Item "-mvpclmulqdq" .IP \fB\-mavx512bitalg\fR 4 .IX Item "-mavx512bitalg" .IP \fB\-mmovdiri\fR 4 .IX Item "-mmovdiri" .IP \fB\-mmovdir64b\fR 4 .IX Item "-mmovdir64b" .IP \fB\-menqcmd\fR 4 .IX Item "-menqcmd" .IP \fB\-muintr\fR 4 .IX Item "-muintr" .IP \fB\-mtsxldtrk\fR 4 .IX Item "-mtsxldtrk" .IP \fB\-mavx512vpopcntdq\fR 4 .IX Item "-mavx512vpopcntdq" .IP \fB\-mavx512vp2intersect\fR 4 .IX Item "-mavx512vp2intersect" .IP \fB\-mavx512vnni\fR 4 .IX Item "-mavx512vnni" .IP \fB\-mavxvnni\fR 4 .IX Item "-mavxvnni" .IP \fB\-mcldemote\fR 4 .IX Item "-mcldemote" .IP \fB\-mserialize\fR 4 .IX Item "-mserialize" .IP \fB\-mamx\-tile\fR 4 .IX Item "-mamx-tile" .IP \fB\-mamx\-int8\fR 4 .IX Item "-mamx-int8" .IP \fB\-mamx\-bf16\fR 4 .IX Item "-mamx-bf16" .IP \fB\-mhreset\fR 4 .IX Item "-mhreset" .IP \fB\-mkl\fR 4 .IX Item "-mkl" .IP \fB\-mwidekl\fR 4 .IX Item "-mwidekl" .IP \fB\-mavxifma\fR 4 .IX Item "-mavxifma" .IP \fB\-mavxvnniint8\fR 4 .IX Item "-mavxvnniint8" .IP \fB\-mavxneconvert\fR 4 .IX Item "-mavxneconvert" .IP \fB\-mcmpccxadd\fR 4 .IX Item "-mcmpccxadd" .IP \fB\-mamx\-fp16\fR 4 .IX Item "-mamx-fp16" .IP \fB\-mprefetchi\fR 4 .IX Item "-mprefetchi" .IP \fB\-mraoint\fR 4 .IX Item "-mraoint" .IP \fB\-mamx\-complex\fR 4 .IX Item "-mamx-complex" .IP \fB\-mavxvnniint16\fR 4 .IX Item "-mavxvnniint16".IP \fB\-msm3\fR 4 .IX Item "-msm3" .IP \fB\-msha512\fR 4 .IX Item "-msha512" .IP \fB\-msm4\fR 4 .IX Item "-msm4" .IP \fB\-mapxf\fR 4 .IX Item "-mapxf" .IP \fB\-musermsr\fR 4 .IX Item "-musermsr" .IP \fB\-mavx10.1\fR 4 .IX Item "-mavx10.1" .IP \fB\-mavx10.1\-256\fR 4 .IX Item "-mavx10.1-256" .IP \fB\-mavx10.1\-512\fR 4 .IX Item "-mavx10.1-512" .IP \fB\-mavx10.2\fR 4 .IX Item "-mavx10.2" .IP \fB\-mamx\-avx512\fR 4 .IX Item "-mamx-avx512" .IP \fB\-mamx\-tf32\fR 4 .IX Item "-mamx-tf32" .IP \fB\-mamx\-transpose\fR 4 .IX Item "-mamx-transpose" .IP \fB\-mamx\-fp8\fR 4 .IX Item "-mamx-fp8" .IP \fB\-mmovrs\fR 4 .IX Item "-mmovrs" .IP \fB\-mamx\-movrs\fR 4 .IX Item "-mamx-movrs" .PD این سوئیچ‌ها استفاده از دستورالعمل‌ها را در مجموعه‌دستورالعمل‌های توسعه‌یافتهٔ MMX، SSE، AVX512CD، AVX512VL، AVX512BW، AVX512DQ، AVX512IFMA، AVX512VBMI، SHA، AES، PCLMUL، CLFLUSHOPT، CLWB، FSGSBASE، PTWRITE، RDRND، F16C، FMA، PCONFIG، WBNOINVD، FMA4، PREFETCHW، RDPID، RDSEED، SGX، XOP، LWP، 3DNow!، enhanced 3DNow!، POPCNT، ABM، ADX، BMI، BMI2، LZCNT، FXSR، XSAVE، XSAVEOPT، XSAVEC، XSAVES، RTM، HLE، TBM، MWAITX، CLZERO، PKU، AVX512VBMI2، GFNI، VAES، WAITPKG، VPCLMULQDQ، AVX512BITALG، MOVDIRI، MOVDIR64B، AVX512BF16، ENQCMD، AVX512VPOPCNTDQ، AVX512VNNI، SERIALIZE، UINTR، HRESET، AMXTILE، AMXINT8، AMXBF16، KL، WIDEKL، AVXVNNI، AVX512\-FP16، AVXIFMA، AVXVNNIINT8، AVXNECONVERT، CMPCCXADD، AMX\-FP16، PREFETCHI، RAOINT، AMX\-COMPLEX، AVXVNNIINT16، SM3، SHA512، SM4، APX_F، USER_MSR، AVX10.1، AVX10.2، AMX\-AVX512، AMX\-TF32، AMX\-TRANSPOSE، AMX\-FP8، MOVRS، AMX\-MOVRS یا CLDEMOTE فعال می‌کنند. هر کدام یک گزینهٔ متناظر \fB\-mno\-\fR برای غیرفعال کردن استفاده از این دستورالعمل‌ها دارند. .Sp این افزونه‌ها همچنین به عنوان توابع توکار در دسترس هستند: برای جزئیات توابعی که توسط این سوئیچ‌ها فعال و غیرفعال می‌شوند، به \&\fBx86 Built\-in Functions\fR مراجعه کنید. .Sp توجه داشته باشید که \fB\-msse4\fR پشتیبانی از هر دو SSE4.1 و SSE4.2 را فعال می‌کند، در حالی که \fB\-mno\-sse4\fR این ویژگی‌ها را غیرفعال می‌سازد؛ هیچ‌یک از دو حالت این گزینه بر پشتیبانی از SSE4A، که به‌طور جداگانه توسط \&\fB\-msse4a\fR کنترل می‌شود، تأثیری ندارند. .Sp برای تولید خودکار دستورالعمل‌های SSE/SSE2 از کدهای ممیز شناور (در مقابل دستورالعمل‌های 387)، به \fB\-mfpmath=sse\fR مراجعه کنید. .Sp هنگامی که \fB\-mavx\fR استفاده می‌شود، GCC از تولید دستورالعمل‌های SSEx خودداری می‌کند. در عوض، در صورت نیاز دستورالعمل‌های جدید AVX یا معادل‌های AVX را برای همهٔ دستورالعمل‌های SSEx تولید می‌نماید. .Sp این گزینه‌ها به GCC امکان می‌دهند تا حتی بدون \fB\-mfpmath=sse\fR نیز از این دستورالعمل‌های توسعه‌یافته در کد تولیدشده استفاده کند. برنامه‌هایی که تشخیص CPU را در زمان اجرا انجام می‌دهند، باید با استفاده از پرچم‌های مناسب، فایل‌های جداگانه‌ای را برای هر معماری پشتیبانی‌شده کامپایل کنند. به ویژه، فایلی که شامل کد تشخیص CPU است باید بدون این گزینه‌ها کامپایل شود. .IP \fB\-mdump\-tune\-features\fR 4 .IX Item "-mdump-tune-features" این گزینه به GCC دستور می‌دهد تا نام ویژگی‌های تنظیم کارایی x86 و تنظیمات پیش‌فرض آن‌ها را تخلیه (dump) کند. این نام‌ها می‌توانند در \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR استفاده شوند. .IP \fB\-mtune\-ctrl=\fR\fIfeature\-list\fR 4 .IX Item "-mtune-ctrl=feature-list" این گزینه برای اعمال کنترل دقیق روی ویژگی‌های تولید کد x86 استفاده می‌شود. \&\fIfeature\-list\fR فهرستی از نام‌های \fIfeature\fR است که با کاما از هم جدا شده‌اند. همچنین به \&\fB\-mdump\-tune\-features\fR مراجعه کنید. در صورت تعیین، اگر قبل از \fIfeature\fR نویسهٔ \&\fB^\fR نیامده باشد فعال می‌شود، در غیر این صورت خاموش خواهد شد. \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR برای استفاده توسط توسعه‌دهندگان GCC در نظر گرفته شده است. استفاده از آن ممکن است به مسیرهایی از کد منجر شود که آزمایش نشده‌اند و می‌تواند موجب بروز ICE در کامپایلر یا خطاهای زمان اجرا شود. .IP \fB\-mno\-default\fR 4 .IX Item "-mno-default" این گزینه به GCC دستور می‌دهد تا تمام ویژگی‌های قابل تنظیم را غیرفعال کند. همچنین به \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR و \fB\-mdump\-tune\-features\fR مراجعه کنید. .IP \fB\-mcld\fR 4 .IX Item "-mcld" این گزینه به GCC دستور می‌دهد تا یک دستور \f(CW\*(C`cld\*(C'\fR در مقدمهٔ (prologue) توابعی که از دستورالعمل‌های رشته‌ای استفاده می‌کنند درج کند. دستورالعمل‌های رشته‌ای برای انتخاب بین حالت افزایش خودکار یا کاهش خودکار به پرچم DF وابسته‌اند. در حالی که ABI مشخص می‌کند پرچم DF باید در هنگام ورود به تابع پاک شود، برخی از سیستم‌عامل‌ها با پاک نکردن پرچم DF در توزیع‌کننده‌های استثنای خود، این مشخصه را نقض می‌کنند. ممکن است گردانندهٔ استثنا در حالی که پرچم DF تنظیم شده است فراخوانی شود که هنگام استفاده از دستورالعمل‌های رشته‌ای به جهت‌گیری اشتباه منجر می‌شود. این گزینه می‌تواند روی هدف‌های ۳۲ بیتی x86 با پیکربندی GCC از طریق گزینهٔ پیکربندی \fB\-\-enable\-cld\fR به صورت پیش‌فرض فعال شود. در این حالت، تولید دستورالعمل‌های \f(CW\*(C`cld\*(C'\fR را می‌توان با گزینهٔ کامپایلر \fB\-mno\-cld\fR متوقف کرد. .IP \fB\-mvzeroupper\fR 4 .IX Item "-mvzeroupper" این گزینه به GCC دستور می‌دهد تا پیش از انتقال جریان کنترل به خارج از تابع، یک دستور \f(CW\*(C`vzeroupper\*(C'\fR درج کند تا جریمهٔ انتقال از AVX به SSE به حداقل برسد و همچنین توابع ذاتی \f(CW\*(C`zeroupper\*(C'\fR غیرضروری حذف شوند. .IP \fB\-mprefer\-avx128\fR 4 .IX Item "-mprefer-avx128" این گزینه به GCC دستور می‌دهد تا در بردارساز خودکار (auto-vectorizer)، به جای دستورالعمل‌های ۲۵۶ بیتی AVX از دستورالعمل‌های ۱۲۸ بیتی AVX استفاده کند. .IP \fB\-mprefer\-vector\-width=\fR\fIopt\fR 4 .IX Item "-mprefer-vector-width=opt" این گزینه به GCC دستور می‌دهد تا به جای مقدار پیش‌فرض روی پلتفرم انتخاب‌شده، از عرض بردار \fIopt\fR بیتی در دستورالعمل‌ها استفاده کند. .IP \fB\-mpartial\-vector\-fp\-math\fR 4 .IX Item "-mpartial-vector-fp-math" این گزینه به GCC امکان می‌دهد تا عملیات‌های ممیز شناوری تولید کند که ممکن است بر مجموعه‌ای از پرچم‌های وضعیت ممیز شناور روی بردارهای جزئی تأثیر بگذارند، جایی که عناصر بردار در بخش پایینی ثبات ۱۲۸ بیتی SSE قرار دارند. مگر اینکه \&\fB\-fno\-trapping\-math\fR مشخص شده باشد، کامپایلر با پاک‌سازی تمام عملوندهای ورودی به طوری که در بخش بالاییِ استفاده‌نشدهٔ ثبات برداری صفر قرار گیرد، رفتار صحیح را تضمین می‌کند. توجه داشته باشید که با استفاده از توابع توکار یا اسمبلی درون‌خطی با آرگومان‌های بردار جزئی، مقادیر NaN، ناهنجار (denormal) یا نامعتبر می‌توانند به بخش بالایی بردار نشت کنند و در زمان فعال بودن \fB\-fno\-trapping\-math\fR باعث مشکلات عملکردی احتمالی شوند. این مشکلات را می‌توان با پاک‌سازی دستی بخش بالایی ثبات آرگومان بردار جزئی یا با استفاده از \fB\-mdaz\-ftz\fR برای تنظیم پرچم DAZ (مخفف denormals-are-zero) در ثبات MXCSR برطرف کرد. .Sp این گزینه به طور پیش‌فرض فعال است. .IP \fB\-mmove\-max=\fR\fIbits\fR 4 .IX Item "-mmove-max=bits" این گزینه به GCC دستور می‌دهد تا حداکثر تعداد بیت‌هایی را که می‌توان به‌طور کارآمد از حافظه به حافظه منتقل کرد، بر روی \fIbits\fR تنظیم کند. مقادیر معتبر برای \&\fIbits\fR عبارتند از 128، 256 و 512. .IP \fB\-mstore\-max=\fR\fIbits\fR 4 .IX Item "-mstore-max=bits" این گزینه به GCC دستور می‌دهد تا حداکثر تعداد بیت‌هایی را که می‌توان به‌طور کارآمد در حافظه ذخیره کرد، بر روی \fIbits\fR تنظیم کند. مقادیر معتبر برای \&\fIbits\fR عبارتند از 128، 256 و 512. .RS 4 .IP \fBnone\fR 4 .IX Item "none" هیچ محدودیت اضافی فراتر از آنچه توسط پلتفرم انتخاب‌شده تعریف شده، به GCC اعمال نمی‌شود. .IP \fB128\fR 4 .IX Item "128" اولویت دادن به عرض بردار ۱۲۸ بیتی برای دستورالعمل‌ها. .IP \fB256\fR 4 .IX Item "256" اولویت دادن به عرض بردار ۲۵۶ بیتی برای دستورالعمل‌ها. .IP \fB512\fR 4 .IX Item "512" اولویت دادن به عرض بردار ۵۱۲ بیتی برای دستورالعمل‌ها. .RE .RS 4 .RE .IP \fB\-mnoreturn\-no\-callee\-saved\-registers\fR 4 .IX Item "-mnoreturn-no-callee-saved-registers" این گزینه توابع دارای ویژگی \f(CW\*(C`noreturn\*(C'\fR یا مشخصه‌ساز \f(CW\*(C`_Noreturn\*(C'\fR را با ذخیره نکردن ثبات‌های ذخیره‌شونده توسط فراخوانده‌شده (callee\-saved) که در تابع استفاده شده‌اند (به جز ثبات \f(CW\*(C`BP\*(C'\fR) در مقدمهٔ تابع، بهینه‌سازی می‌کند. این گزینه می‌تواند در اشکال‌زدایی فراخوانندهٔ تابع \f(CW\*(C`noreturn\*(C'\fR یا هر تابع بالاتر در پشتهٔ فراخوانی تداخل ایجاد کند، بنابراین به طور پیش‌فرض فعال نیست. .IP \fB\-mcx16\fR 4 .IX Item "-mcx16" این گزینه به GCC امکان می‌دهد تا در کد ۶۴ بیتی، دستورالعمل‌های \f(CW\*(C`CMPXCHG16B\*(C'\fR را برای پیاده‌سازی عملیات‌های مقایسه و جا‌به‌جایی روی اشیاء ۱۲۸ بیتی هم‌تراز با ۱۶ بایت تولید کند. این ویژگی برای به‌روزرسانی‌های اتمیک ساختارهای داده‌ای که اندازهٔ آن‌ها از یک کلمهٔ ماشین فراتر می‌رود مفید است. کامپایلر از این دستور برای پیاده‌سازی \&\fB_\|_sync Builtins\fR استفاده می‌کند. با این حال، برای \&\fB_\|_atomic Builtins\fR که روی اعداد صحیح ۱۲۸ بیتی عمل می‌کنند، همیشه از یک فراخوانی کتابخانه‌ای استفاده می‌شود. .IP \fB\-msahf\fR 4 .IX Item "-msahf" این گزینه تولید دستورالعمل‌های \f(CW\*(C`SAHF\*(C'\fR را در کد ۶۴ بیتی فعال می‌کند. پردازنده‌های اولیهٔ Intel Pentium 4 دارای پشتیبانی از Intel 64، پیش از معرفی استپینگ Pentium 4 G1 در دسامبر ۲۰۰۵، فاقد دستورالعمل‌های \f(CW\*(C`LAHF\*(C'\fR و \&\f(CW\*(C`SAHF\*(C'\fR بودند که توسط AMD64 پشتیبانی می‌شوند. این‌ها به ترتیب دستورالعمل‌های بارگذاری و ذخیره‌سازی برای برخی پرچم‌های وضعیت هستند. در حالت ۶۴ بیتی، دستور \f(CW\*(C`SAHF\*(C'\fR برای بهینه‌سازی توابع توکار \f(CW\*(C`fmod\*(C'\fR، \&\f(CW\*(C`drem\*(C'\fR و \f(CW\*(C`remainder\*(C'\fR استفاده می‌شود؛ برای جزئیات به \&\fBOther Builtins\fR مراجعه کنید..IP \fB\-mmovbe\fR 4 .IX Item "-mmovbe" این گزینه استفاده از دستورالعمل \f(CW\*(C`movbe\*(C'\fR را برای بهینه‌سازی جابه‌جایی بایت‌های (byte swapping) داده‌های چهار و هشت بایتی فعال می‌کند. .IP \fB\-mshstk\fR 4 .IX Item "-mshstk" گزینهٔ \fB\-mshstk\fR توابع توکار (built\-in) پشتهٔ سایه (shadow stack) از فناوری Control\-flow Enforcement Technology (CET) در x86 را فعال می‌کند. .IP \fB\-mcrc32\fR 4 .IX Item "-mcrc32" این گزینه توابع توکار \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR، \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR، \f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR و \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR را برای تولید دستورالعمل ماشین \f(CW\*(C`crc32\*(C'\fR فعال می‌کند. .IP \fB\-mmwait\fR 4 .IX Item "-mmwait" این گزینه توابع توکار \f(CW\*(C`_\|_builtin_ia32_monitor\*(C'\fR و \f(CW\*(C`_\|_builtin_ia32_mwait\*(C'\fR را برای تولید دستورالعمل‌های ماشین \f(CW\*(C`monitor\*(C'\fR و \&\f(CW\*(C`mwait\*(C'\fR فعال می‌کند. .IP \fB\-mrecip\fR 4 .IX Item "-mrecip" این گزینه استفاده از دستورالعمل‌های \f(CW\*(C`RCPSS\*(C'\fR و \f(CW\*(C`RSQRTSS\*(C'\fR (و متغیرهای برداری‌شدهٔ آن‌ها \f(CW\*(C`RCPPS\*(C'\fR و \f(CW\*(C`RSQRTPS\*(C'\fR) همراه با یک گام اضافی نیوتن\-رافسون (Newton\-Raphson) برای افزایش دقت به جای \f(CW\*(C`DIVSS\*(C'\fR و \f(CW\*(C`SQRTSS\*(C'\fR (و متغیرهای برداری‌شدهٔ آن‌ها) را برای آرگومان‌های ممیز شناور با دقت یگانه (single\-precision) فعال می‌کند. این دستورالعمل‌ها تنها زمانی تولید می‌شوند که \fB\-funsafe\-math\-optimizations\fR همراه با \&\fB\-ffinite\-math\-only\fR و \fB\-fno\-trapping\-math\fR فعال باشد. توجه داشته باشید که هرچند توان عملیاتی (throughput) این دنباله بیشتر از توان عملیاتی دستورالعمل غیرمعکوس است، دقت دنباله ممکن است تا ۲ ulp کاهش یابد (به عنوان مثال معکوس ۱٫۰ برابر است با ۰٫۹۹۹۹۹۹۹۴). .Sp توجه داشته باشید که GCC عبارت \f(CW\*(C`1.0f/sqrtf(\fR\f(CIx\fR\f(CW)\*(C'\fR را با استفاده از \f(CW\*(C`RSQRTSS\*(C'\fR (یا \f(CW\*(C`RSQRTPS\*(C'\fR) پیشاپیش در \fB\-ffast\-math\fR (یا ترکیب گزینه‌های فوق) پیاده‌سازی می‌کند و نیازی به \fB\-mrecip\fR ندارد. .Sp همچنین توجه داشته باشید که GCC دنبالهٔ فوق را با گام اضافی نیوتن\-رافسون برای تقسیم ممیز شناور تکی برداری و \f(CWsqrtf(\fR\f(CIx\fR\f(CW)\fR برداری‌شده پیشاپیش همراه با \fB\-ffast\-math\fR (یا ترکیب گزینه‌های فوق) صادر می‌کند و نیازی به \fB\-mrecip\fR ندارد. .IP \fB\-mrecip=\fR\fIopt\fR 4 .IX Item "-mrecip=opt" این گزینه مشخص می‌کند کدام دستورالعمل‌های برآورد معکوس می‌توانند استفاده شوند. \fIopt\fR فهرستی از گزینه‌ها است که با کاما از هم جدا شده‌اند، و ممکن است یک \fB!\fR پیش از آن‌ها برای نقیض کردن گزینه بیاید: .RS 4 .IP \fBall\fR 4 .IX Item "all" فعال کردن تمام دستورالعمل‌های برآورد. .IP \fBdefault\fR 4 .IX Item "default" فعال کردن دستورالعمل‌های پیش‌فرض، معادل با \fB\-mrecip\fR. .IP \fBnone\fR 4 .IX Item "none" غیرفعال کردن تمام دستورالعمل‌های برآورد، معادل با \fB\-mno\-recip\fR. .IP \fBdiv\fR 4 .IX Item "div" فعال کردن تقریب برای تقسیم نرده‌ای (scalar). .IP \fBvec\-div\fR 4 .IX Item "vec-div" فعال کردن تقریب برای تقسیم برداری‌شده. .IP \fBsqrt\fR 4 .IX Item "sqrt" فعال کردن تقریب برای جذر (ریشه دوم) نرده‌ای. .IP \fBvec\-sqrt\fR 4 .IX Item "vec-sqrt" فعال کردن تقریب برای جذر (ریشه دوم) برداری‌شده. .RE .RS 4 .Sp بنابراین، برای مثال، \fB\-mrecip=all,!sqrt\fR تمام تقریب‌های معکوس را به جز جذر فعال می‌کند. .RE .IP \fB\-mveclibabi=\fR\fItype\fR 4 .IX Item "-mveclibabi=type" نوع ABI مورد استفاده برای برداری‌سازی توابع درونی (intrinsics) با استفاده از یک کتابخانهٔ خارجی را تعیین می‌کند. مقادیر پشتیبانی‌شده برای \fItype\fR عبارتند از \fBsvml\fR برای کتابخانه محاسبات برداری کوتاه اینتل (Intel short vector math library)، \&\fBaocl\fR برای کتابخانه ریاضیاتی (LibM) از مجموعهٔ AMD Optimizing CPU Libraries (AOCL)، و \fBacml\fR برای کتابخانهٔ منسوخ‌شدهٔ AMD core math library (که AOCL\-LibM جانشین آن است). برای استفاده از این گزینه، باید هر دو گزینهٔ \fB\-ftree\-vectorize\fR و \&\fB\-funsafe\-math\-optimizations\fR فعال باشند، و یک کتابخانهٔ سازگار با ABI مربوط به SVML یا ACML در زمان پیوند (link time) مشخص شده باشد. .Sp در حال حاضر GCC فراخوانی‌هایی را به \f(CW\*(C`vmldExp2\*(C'\fR، \f(CW\*(C`vmldLn2\*(C'\fR، \&\f(CW\*(C`vmldLog102\*(C'\fR، \f(CW\*(C`vmldPow2\*(C'\fR، \f(CW\*(C`vmldTanh2\*(C'\fR، \f(CW\*(C`vmldTan2\*(C'\fR، \&\f(CW\*(C`vmldAtan2\*(C'\fR، \f(CW\*(C`vmldAtanh2\*(C'\fR، \f(CW\*(C`vmldCbrt2\*(C'\fR، \f(CW\*(C`vmldSinh2\*(C'\fR، \&\f(CW\*(C`vmldSin2\*(C'\fR، \f(CW\*(C`vmldAsinh2\*(C'\fR، \f(CW\*(C`vmldAsin2\*(C'\fR، \f(CW\*(C`vmldCosh2\*(C'\fR، \&\f(CW\*(C`vmldCos2\*(C'\fR، \f(CW\*(C`vmldAcosh2\*(C'\fR، \f(CW\*(C`vmldAcos2\*(C'\fR، \f(CW\*(C`vmlsExp4\*(C'\fR، \&\f(CW\*(C`vmlsLn4\*(C'\fR، \f(CW\*(C`vmlsLog104\*(C'\fR، \f(CW\*(C`vmlsPow4\*(C'\fR، \f(CW\*(C`vmlsTanh4\*(C'\fR، \&\f(CW\*(C`vmlsTan4\*(C'\fR، \f(CW\*(C`vmlsAtan4\*(C'\fR، \f(CW\*(C`vmlsAtanh4\*(C'\fR، \f(CW\*(C`vmlsCbrt4\*(C'\fR، \&\f(CW\*(C`vmlsSinh4\*(C'\fR، \f(CW\*(C`vmlsSin4\*(C'\fR، \f(CW\*(C`vmlsAsinh4\*(C'\fR، \f(CW\*(C`vmlsAsin4\*(C'\fR، \&\f(CW\*(C`vmlsCosh4\*(C'\fR، \f(CW\*(C`vmlsCos4\*(C'\fR، \f(CW\*(C`vmlsAcosh4\*(C'\fR و \f(CW\*(C`vmlsAcos4\*(C'\fR برای نوع تابع متناظر در صورت استفاده از \fB\-mveclibabi=svml\fR صادر می‌کند، \&\f(CW\*(C`amd_vrs4_acosf\*(C'\fR، \f(CW\*(C`amd_vrs16_acosf\*(C'\fR، \f(CW\*(C`amd_vrd8_asin\*(C'\fR، \&\f(CW\*(C`amd_vrs4_asinf\*(C'\fR، \f(CW\*(C`amd_vrs8_asinf\*(C'\fR، \f(CW\*(C`amd_vrs16_asinf\*(C'\fR، \&\f(CW\*(C`amd_vrd2_atan\*(C'\fR، \f(CW\*(C`amd_vrd8_atan\*(C'\fR، \f(CW\*(C`amd_vrs4_atanf\*(C'\fR، \&\f(CW\*(C`amd_vrs8_atanf\*(C'\fR، \f(CW\*(C`amd_vrs16_atanf\*(C'\fR، \f(CW\*(C`amd_vrd2_cos\*(C'\fR، \&\f(CW\*(C`amd_vrd4_cos\*(C'\fR، \f(CW\*(C`amd_vrd8_cos\*(C'\fR، \f(CW\*(C`amd_vrs4_cosf\*(C'\fR، \&\f(CW\*(C`amd_vrs8_cosf\*(C'\fR، \f(CW\*(C`amd_vrs16_cosf\*(C'\fR، \f(CW\*(C`amd_vrs4_coshf\*(C'\fR، \&\f(CW\*(C`amd_vrs8_coshf\*(C'\fR، \f(CW\*(C`amd_vrd2_erf\*(C'\fR، \f(CW\*(C`amd_vrd4_erf\*(C'\fR، \&\f(CW\*(C`amd_vrd8_erf\*(C'\fR، \f(CW\*(C`amd_vrs4_erff\*(C'\fR، \f(CW\*(C`amd_vrs8_erff\*(C'\fR، \&\f(CW\*(C`amd_vrs16_erff\*(C'\fR، \f(CW\*(C`amd_vrd2_exp\*(C'\fR، \f(CW\*(C`amd_vrd4_exp\*(C'\fR، \&\f(CW\*(C`amd_vrd8_exp\*(C'\fR، \f(CW\*(C`amd_vrs4_expf\*(C'\fR، \f(CW\*(C`amd_vrs8_expf\*(C'\fR، \&\f(CW\*(C`amd_vrs16_expf\*(C'\fR، \f(CW\*(C`amd_vrd2_exp10\*(C'\fR، \f(CW\*(C`amd_vrs4_exp10f\*(C'\fR، \&\f(CW\*(C`amd_vrd2_exp2\*(C'\fR، \f(CW\*(C`amd_vrd4_exp2\*(C'\fR، \f(CW\*(C`amd_vrd8_exp2\*(C'\fR، \&\f(CW\*(C`amd_vrs4_exp2f\*(C'\fR، \f(CW\*(C`amd_vrs8_exp2f\*(C'\fR، \f(CW\*(C`amd_vrs16_exp2f\*(C'\fR، \&\f(CW\*(C`amd_vrs4_expm1f\*(C'\fR، \f(CW\*(C`amd_vrd2_log\*(C'\fR، \f(CW\*(C`amd_vrd4_log\*(C'\fR، \&\f(CW\*(C`amd_vrd8_log\*(C'\fR، \f(CW\*(C`amd_vrs4_logf\*(C'\fR، \f(CW\*(C`amd_vrs8_logf\*(C'\fR، \&\f(CW\*(C`amd_vrs16_logf\*(C'\fR، \f(CW\*(C`amd_vrd2_log10\*(C'\fR، \f(CW\*(C`amd_vrs4_log10f\*(C'\fR، \&\f(CW\*(C`amd_vrs8_log10f\*(C'\fR، \f(CW\*(C`amd_vrs16_log10f\*(C'\fR، \f(CW\*(C`amd_vrd2_log1p\*(C'\fR، \&\f(CW\*(C`amd_vrs4_log1pf\*(C'\fR، \f(CW\*(C`amd_vrd2_log2\*(C'\fR، \f(CW\*(C`amd_vrd4_log2\*(C'\fR، \&\f(CW\*(C`amd_vrd8_log2\*(C'\fR، \f(CW\*(C`amd_vrs4_log2f\*(C'\fR، \f(CW\*(C`amd_vrs8_log2f\*(C'\fR، \&\f(CW\*(C`amd_vrs16_log2f\*(C'\fR، \f(CW\*(C`amd_vrd2_pow\*(C'\fR، \f(CW\*(C`amd_vrd4_pow\*(C'\fR، \&\f(CW\*(C`amd_vrd8_pow\*(C'\fR، \f(CW\*(C`amd_vrs4_powf\*(C'\fR، \f(CW\*(C`amd_vrs8_powf\*(C'\fR، \&\f(CW\*(C`amd_vrs16_powf\*(C'\fR، \f(CW\*(C`amd_vrd2_sin\*(C'\fR، \f(CW\*(C`amd_vrd4_sin\*(C'\fR، \&\f(CW\*(C`amd_vrd8_sin\*(C'\fR، \f(CW\*(C`amd_vrs4_sinf\*(C'\fR، \f(CW\*(C`amd_vrs8_sinf\*(C'\fR، \&\f(CW\*(C`amd_vrs16_sinf\*(C'\fR، \f(CW\*(C`amd_vrd2_tan\*(C'\fR، \f(CW\*(C`amd_vrd4_tan\*(C'\fR، \&\f(CW\*(C`amd_vrd8_tan\*(C'\fR، \f(CW\*(C`amd_vrs16_tanf\*(C'\fR، \f(CW\*(C`amd_vrs4_tanhf\*(C'\fR، \&\f(CW\*(C`amd_vrs8_tanhf\*(C'\fR، \f(CW\*(C`amd_vrs16_tanhf\*(C'\fR را برای نوع تابع متناظر در صورت استفاده از \fB\-mveclibabi=aocl\fR صادر می‌کند، و \f(CW\*(C`_\|_vrd2_sin\*(C'\fR، \&\f(CW\*(C`_\|_vrd2_cos\*(C'\fR، \f(CW\*(C`_\|_vrd2_exp\*(C'\fR، \f(CW\*(C`_\|_vrd2_log\*(C'\fR، \f(CW\*(C`_\|_vrd2_log2\*(C'\fR، \&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR، \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR، \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR، \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR، \f(CW\*(C`_\|_vrs4_logf\*(C'\fR، \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR، \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR و \f(CW\*(C`_\|_vrs4_powf\*(C'\fR را برای نوع تابع متناظر در صورت استفاده از \fB\-mveclibabi=acml\fR صادر می‌کند. .IP \fB\-mabi=\fR\fIname\fR 4 .IX Item "-mabi=name" تولید کد برای قرارداد فراخوانی (calling convention) مشخص‌شده. مقادیر مجاز عبارتند از \fBsysv\fR برای ABI مورد استفاده در GNU/Linux و سایر سیستم‌ها، و \&\fBms\fR برای Microsoft ABI. در صورت هدف قرار دادن Microsoft Windows، مقدار پیش‌فرض Microsoft ABI است و روی تمام سیستم‌های دیگر SysV ABI می‌باشد. می‌توان این رفتار را برای توابع خاص با استفاده از ویژگی‌های تابع \&\f(CW\*(C`ms_abi\*(C'\fR و \f(CW\*(C`sysv_abi\*(C'\fR کنترل کرد. .IP \fB\-mforce\-indirect\-call\fR 4 .IX Item "-mforce-indirect-call" اجبار تمام فراخوانی‌های توابع به صورت غیرمستقیم (indirect). این گزینه هنگام استفاده از Intel Processor Trace که در آن اطلاعات زمان‌بندی دقیق‌تری برای فراخوانی‌های توابع تولید می‌شود، مفید است. .IP \fB\-mmanual\-endbr\fR 4 .IX Item "-mmanual-endbr" درج دستورالعمل ENDBR در ورودی تابع فقط از طریق مشخصهٔ تابع \f(CW\*(C`cf_check\*(C'\fR. این ویژگی هنگام استفاده با گزینهٔ \&\fB\-fcf\-protection=branch\fR برای کنترل درج ENDBR در ورودی تابع مفید است. .IP \fB\-mcet\-switch\fR 4 .IX Item "-mcet-switch" به‌طور پیش‌فرض، ابزارگذاری (instrumentation) CET در دستورات switch که از یک جدول پرش (jump table) استفاده می‌کنند خاموش است و ردیابی شاخهٔ غیرمستقیم غیرفعال است. از آن‌جا که جدول‌های پرش در حافظهٔ فقط‌خواندنی ذخیره می‌شوند، این امر مستقیماً منجر به کاهش مقاوم‌سازی نمی‌شود. اما اگر شاخص جدول پرش توسط مهاجم کنترل شود، پرش غیرمستقیم ممکن است توسط CET محدود نشود. این گزینه ابزارگذاری CET را روشن می‌کند تا ردیابی شاخهٔ غیرمستقیم را برای دستورات switch دارای جدول پرش فعال کند، که سبب می‌شود اهداف پرش از طریق هر پرش غیرمستقیمی قابل دستیابی باشند. .IP \fB\-mcall\-ms2sysv\-xlogues\fR 4 .IX Item "-mcall-ms2sysv-xlogues" به‌دلیل تفاوت‌ها در ABIهای ۶۴بیتی، هر تابع با Microsoft ABI که یک تابع System V ABI را فراخوانی می‌کند باید RSI، RDI و XMM6\-15 را به عنوان مخدوش‌شده (clobbered) در نظر بگیرد. به‌طور پیش‌فرض، کد ذخیره و بازیابی این ثبات‌ها به‌صورت درون‌خطی (inline) صادر می‌شود که منجر به مقدمه‌ها و موخره‌های (prologues and epilogues) نسبتاً طولانی می‌گردد. استفاده از \&\fB\-mcall\-ms2sysv\-xlogues\fR مقدمه‌ها و موخره‌هایی صادر می‌کند که از تکه‌کدهای واسط (stubs) در بخش ایستان libgcc برای انجام این ذخیره‌ها و بازیابی‌ها استفاده می‌کنند، و بدین ترتیب اندازهٔ تابع را با هزینهٔ چند دستورالعمل اضافی کاهش می‌دهد. .IP \fB\-mtls\-dialect=\fR\fItype\fR 4 .IX Item "-mtls-dialect=type" تولید کد برای دسترسی به حافظهٔ محلی رشته (thread\-local storage) با استفاده از قراردادهای \fBgnu\fR یا \&\fBgnu2\fR. مقدار \fBgnu\fR گزینهٔ پیش‌فرضِ محافظه‌کارانه است؛ \&\fBgnu2\fR کارآمدتر است، اما ممکن است نیازمندی‌هایی در زمان ترجمه و زمان اجرا اضافه کند که در همهٔ سیستم‌ها قابل برآورده شدن نباشد. .IP \fB\-mpush\-args\fR 4 .IX Item "-mpush-args" .PD 0 .IP \fB\-mno\-push\-args\fR 4 .IX Item "-mno-push-args" .PD استفاده از عملیات‌های PUSH برای ذخیرهٔ پارامترهای ارسالی. این روش کوتاه‌تر است و معمولاً سرعتی برابر با روش استفاده از عملیات‌های SUB/MOV دارد و به‌طور پیش‌فرض فعال است. در برخی موارد، غیرفعال کردن آن ممکن است به دلیل بهبود زمان‌بندی و کاهش وابستگی‌ها کارایی را افزایش دهد..IP \fB\-maccumulate\-outgoing\-args\fR 4 .IX Item "-maccumulate-outgoing-args" در صورت فعال بودن، بیشترین فضای مورد نیاز برای آرگومان‌های خروجی در مقدمهٔ تابع (function prologue) محاسبه می‌شود. این کار در بیشتر پردازنده‌های مدرن به دلیل کاهش وابستگی‌ها، زمان‌بندی بهتر و کاهش استفاده از پشته در شرایطی که مرز ترجیحی پشته برابر ۲ نباشد، سریع‌تر است. عیب آن افزایش چشمگیر در اندازهٔ کد است. این سوییچ متضمن \fB\-mno\-push\-args\fR است. .IP \fB\-mthreads\fR 4 .IX Item "-mthreads" پشتیبانی از مدیریت استثنای امن در برابر ریسه (thread\-safe) در MinGW. برنامه‌هایی که به مدیریت استثنای امن در برابر ریسه وابسته‌اند باید تمام کدها را با گزینهٔ \&\fB\-mthreads\fR کامپایل و پیوند دهند. هنگام کامپایل، \&\fB\-mthreads\fR عبارت \&\fB\-D_MT\fR را تعریف می‌کند؛ هنگام پیوند دادن، کتابخانهٔ کمکی ریسهٔ ویژهٔ \&\fB\-lmingwthrd\fR را پیوند می‌دهد که داده‌های مدیریت استثنا به ازای هر ریسه را پاک‌سازی می‌کند. .IP \fB\-mms\-bitfields\fR 4 .IX Item "-mms-bitfields" .PD 0 .IP \fB\-mno\-ms\-bitfields\fR 4 .IX Item "-mno-ms-bitfields" .PD فعال/غیرفعال کردن چینش فیلدهای بیتی (bit\-field layout) سازگار با کامپایلر بومی Microsoft Windows. .Sp اگر \f(CW\*(C`packed\*(C'\fR روی یک ساختار به کار رود، یا اگر از فیلدهای بیتی استفاده شود، ممکن است ABI مایکروسافت ساختار را متفاوت از شیوهٔ معمول GCC بچیند. به‌ویژه هنگام جابه‌جایی داده‌های فشرده‌شده (packed) بین توابع کامپایل‌شده با GCC و کامپایلر بومی مایکروسافت (چه از طریق فراخوانی تابع یا به صورت داده در یک فایل)، ممکن است دسترسی به هر دو قالب ضروری باشد. .Sp این گزینه به طور پیش‌فرض برای مقصدهای Microsoft Windows فعال است. این رفتار را می‌توان به صورت محلی نیز با استفاده از مشخصه‌های متغیر یا نوع داده کنترل کرد. برای اطلاعات بیشتر، \fBx86 Variable Attributes\fR و \fBx86 Type Attributes\fR را ببینید. .Sp الگوریتم چینش ساختار در مایکروسافت، به استثنای بسته‌بندی فیلدهای بیتی، نسبتاً ساده است. فاصله‌گذاری (padding) و هم‌ترازی (alignment) اعضای ساختارها و اینکه آیا یک فیلد بیتی می‌تواند از مرز یک واحد ذخیره‌سازی عبور کند یا خیر، با این قوانین تعیین می‌شود: .RS 4 .IP "1. اعضای ساختار به صورت ترتیبی و به همان ترتیبی که" 4 .IX Item "1. اعضای ساختار به صورت ترتیبی و به همان ترتیبی که" اعلان شده‌اند ذخیره می‌شوند: عضو نخست کمترین نشانی حافظه و عضو پایانی بیشترین نشانی را دارد. .IP "2. هر شیء داده‌ای نیازمندی هم‌ترازی دارد. نیازمندی هم‌ترازی" 4 .IX Item "2. هر شیء داده‌ای نیازمندی هم‌ترازی دارد. نیازمندی هم‌ترازی" برای تمام داده‌ها به جز ساختارها، یونیون‌ها و آرایه‌ها، اندازهٔ شیء یا اندازهٔ بسته‌بندی فعلی (مشخص‌شده با مشخصهٔ \&\f(CW\*(C`aligned\*(C'\fR یا دستور عمل‌کرد \f(CW\*(C`pack\*(C'\fR)، هرکدام که کمتر باشد، است. برای ساختارها، یونیون‌ها و آرایه‌ها، نیازمندی هم‌ترازی برابر با بزرگ‌ترین نیازمندی هم‌ترازی اعضای آن است. به هر شیء یک آفست تخصیص می‌یابد به گونه‌ای که: .Sp .Vb 1 \& offset % alignment_requirement == 0 .Ve .IP "3. فیلدهای بیتی مجاور در یک واحد تخصیص ۱، ۲ یا ۴ بایتی" 4 .IX Item "3. فیلدهای بیتی مجاور در یک واحد تخصیص ۱، ۲ یا ۴ بایتی" بسته‌بندی می‌شوند، در صورتی که نوع‌های صحیح هم‌اندازه باشند و اگر فیلد بیتی بعدی بدون عبور از مرز تحمیل‌شده توسط نیازمندی‌های هم‌ترازی مشترک فیلدهای بیتی، در واحد تخصیص جاری جای گیرد. .RE .RS 4 .Sp کامپایلر MSVC فیلدهای بیتی با طول صفر را به روش‌های زیر تفسیر می‌کند: .IP "1. اگر یک فیلد بیتی با طول صفر بین دو فیلد بیتی درج شود که" 4 .IX Item "1. اگر یک فیلد بیتی با طول صفر بین دو فیلد بیتی درج شود که" به طور معمول ادغام می‌شوند، فیلدهای بیتی ادغام نخواهند شد. .Sp برای مثال: .Sp .Vb 6 \& struct \& { \& unsigned long bf_1 : 12; \& unsigned long : 0; \& unsigned long bf_2 : 12; \& } t1; .Ve .Sp اندازهٔ \f(CW\*(C`t1\*(C'\fR همراه با فیلد بیتی با طول صفر، ۸ بایت است. اگر فیلد بیتی با طول صفر حذف می‌شد، اندازهٔ \f(CW\*(C`t1\*(C'\fR برابر با ۴ بایت می‌بود. .ie n .IP "2. اگر یک فیلد بیتی با طول صفر پس از یک فیلد بیتی، ""foo""، درج شود و" 4 .el .IP "2. اگر یک فیلد بیتی با طول صفر پس از یک فیلد بیتی، \f(CWfoo\fR، درج شود و" 4 .IX Item "2. اگر یک فیلد بیتی با طول صفر پس از یک فیلد بیتی، foo، درج شود و" هم‌ترازی فیلد بیتی با طول صفر بزرگ‌تر از عضوی باشد که پس از آن می‌آید (\f(CW\*(C`bar\*(C'\fR)، آن‌گاه \f(CW\*(C`bar\*(C'\fR مطابق نوع فیلد بیتی با طول صفر هم‌تراز می‌شود. .Sp برای مثال: .Sp .Vb 6 \& struct \& { \& char foo : 4; \& short : 0; \& char bar; \& } t2; \& \& struct \& { \& char foo : 4; \& short : 0; \& double bar; \& } t3; .Ve .Sp برای \f(CW\*(C`t2\*(C'\fR، عضو \f(CW\*(C`bar\*(C'\fR به جای آفست ۱، در آفست ۲ قرار می‌گیرد. بر این اساس، اندازهٔ \f(CW\*(C`t2\*(C'\fR برابر با ۴ است. برای \f(CW\*(C`t3\*(C'\fR، فیلد بیتی با طول صفر روی هم‌ترازی \f(CW\*(C`bar\*(C'\fR یا در نتیجه اندازهٔ ساختار تأثیری نمی‌گذارد. .Sp با در نظر گرفتن این موضوع، توجه به موارد زیر اهمیت دارد: .RS 4 .IP "1. اگر یک فیلد بیتی با طول صفر پس از یک فیلد بیتی معمولی بیاید، نوعِ" 4 .IX Item "1. اگر یک فیلد بیتی با طول صفر پس از یک فیلد بیتی معمولی بیاید، نوعِ" فیلد بیتی با طول صفر ممکن است بر هم‌ترازی کل ساختار تأثیر بگذارد. برای مثال، \f(CW\*(C`t2\*(C'\fR اندازه‌ای برابر با ۴ بایت دارد، زیرا فیلد بیتی با طول صفر پس از یک فیلد بیتی معمولی آمده و از نوع short است. .IP "2. حتی اگر پس از یک فیلد بیتی با طول صفر، یک فیلد بیتی معمولی نیاید،" 4 .IX Item "2. حتی اگر پس از یک فیلد بیتی با طول صفر، یک فیلد بیتی معمولی نیاید،" ممکن است همچنان بر هم‌ترازی ساختار تأثیر بگذارد: .Sp .Vb 5 \& struct \& { \& char foo : 6; \& long : 0; \& } t4; .Ve .Sp در اینجا، \f(CW\*(C`t4\*(C'\fR مقدار ۴ بایت فضا اشغال می‌کند. .RE .RS 4 .RE .IP "3. فیلدهای بیتی با طول صفر که پس از اعضای غیر فیلد بیتی می‌آیند نادیده گرفته می‌شوند:" 4 .IX Item "3. فیلدهای بیتی با طول صفر که پس از اعضای غیر فیلد بیتی می‌آیند نادیده گرفته می‌شوند:" .Vb 6 \& struct \& { \& char foo; \& long : 0; \& char bar; \& } t5; .Ve .Sp در اینجا، \f(CW\*(C`t5\*(C'\fR مقدار ۲ بایت فضا اشغال می‌کند. .RE .RS 4 .RE .IP \fB\-mno\-align\-stringops\fR 4 .IX Item "-mno-align-stringops" مقصد عملیات رشته‌ای درون‌خطی‌شده را هم‌تراز نمی‌کند. این سوییچ اندازهٔ کد را کاهش می‌دهد و در مواردی که مقصد از قبل هم‌تراز باشد اما GCC از آن آگاه نباشد، کارایی را بهبود می‌بخشد. .IP \fB\-minline\-all\-stringops\fR 4 .IX Item "-minline-all-stringops" به طور پیش‌فرض GCC تنها هنگامی عملیات رشته‌ای را درون‌خطی می‌کند که مشخص باشد مقصد حداقل روی یک مرز ۴ بایتی هم‌تراز است. این گزینه درون‌خطی‌سازی بیشتری را فعال کرده و اندازهٔ کد را افزایش می‌دهد، اما ممکن است کارایی کدی را که برای طول‌های کوتاه به \&\f(CW\*(C`memcpy\*(C'\fR و \f(CW\*(C`memset\*(C'\fR سریع وابسته است بهبود بخشد. این گزینه بسط درون‌خطیِ \f(CW\*(C`strlen\*(C'\fR را برای تمامی هم‌ترازی‌های اشاره‌گر فعال می‌کند. .IP \fB\-minline\-stringops\-dynamically\fR 4 .IX Item "-minline-stringops-dynamically" برای عملیات رشته‌ای با اندازهٔ نامشخص، از بررسی‌های زمان اجرا همراه با کد درون‌خطی برای بلوک‌های کوچک و فراخوانی کتابخانه برای بلوک‌های بزرگ استفاده می‌کند. .IP \fB\-mstringop\-strategy=\fR\fIalg\fR 4 .IX Item "-mstringop-strategy=alg" قواعد مکاشفه‌ای تصمیم‌گیری داخلی را برای الگوریتم خاص مورد استفاده جهت درون‌خطی‌سازی عملیات رشته بازنویسی (override) می‌کند. مقادیر مجاز برای \fIalg\fR عبارت‌اند از: .RS 4 .IP \fBrep_byte\fR 4 .IX Item "rep_byte" .PD 0 .IP \fBrep_4byte\fR 4 .IX Item "rep_4byte" .IP \fBrep_8byte\fR 4 .IX Item "rep_8byte" .PD بسط با استفاده از پیشوند \f(CW\*(C`rep\*(C'\fR پردازندهٔ i386 با اندازهٔ مشخص‌شده..IP \fBbyte_loop\fR 4 .IX Item "byte_loop" .PD 0 .IP \fBloop\fR 4 .IX Item "loop" .IP \fBunrolled_loop\fR 4 .IX Item "unrolled_loop" .PD گسترش به یک حلقهٔ درون‌خطی (inline loop). .IP \fBlibcall\fR 4 .IX Item "libcall" همیشه از فراخوانی کتابخانه استفاده شود. .RE .RS 4 .RE .IP \fB\-mmemcpy\-strategy=\fR\fIstrategy\fR 4 .IX Item "-mmemcpy-strategy=strategy" اکتشافیِ تصمیم‌گیری داخلی را لغو و جایگزین می‌کند تا مشخص کند که آیا \f(CW\*(C`_\|_builtin_memcpy\*(C'\fR باید به‌صورت درون‌خطی درآید و در صورت مشخص بودن اندازهٔ مورد انتظار عملیات کپی، از چه الگوریتم درون‌خطی‌ای استفاده شود. \fIstrategy\fR فهرستی از سه‌گانه‌های \&\fIalg\fR:\fImax_size\fR:\fIdest_align\fR است که با ویرگول از هم جدا شده‌اند. \&\fIalg\fR در \fB\-mstringop\-strategy\fR مشخص می‌شود، و \fImax_size\fR حداکثر اندازه برحسب بایت را مشخص می‌کند که الگوریتم درون‌خطی \fIalg\fR برای آن مجاز است. برای آخرین سه‌گانه، مقدار \fImax_size\fR باید \f(CW\-1\fR باشد. مقدار \fImax_size\fR سه‌گانه‌ها در فهرست باید به ترتیب صعودی مشخص شود. حداقل اندازه برحسب بایت برای \fIalg\fR برای اولین سه‌گانه برابر با \f(CW0\fR و برای موارد بعد برابر با \f(CW\*(C`\fR\f(CImax_size\fR\f(CW + 1\*(C'\fR محدودهٔ قبلی است. .IP \fB\-mmemset\-strategy=\fR\fIstrategy\fR 4 .IX Item "-mmemset-strategy=strategy" این گزینه مشابه \fB\-mmemcpy\-strategy=\fR است با این تفاوت که برای کنترل گسترش \f(CW\*(C`_\|_builtin_memset\*(C'\fR به کار می‌رود. .IP \fB\-momit\-leaf\-frame\-pointer\fR 4 .IX Item "-momit-leaf-frame-pointer" اشاره‌گر چارچوب (frame pointer) را در یک ثبات برای توابع برگ (leaf functions) نگه نمی‌دارد. این کار از دستورالعمل‌های ذخیره، راه‌اندازی و بازگردانی اشاره‌گرهای چارچوب جلوگیری کرده و یک ثبات اضافی در توابع برگ در دسترس قرار می‌دهد. گزینهٔ \&\fB\-fomit\-leaf\-frame\-pointer\fR اشاره‌گر چارچوب را برای توابع برگ حذف می‌کند که ممکن است اشکال‌زدایی را دشوارتر سازد. .IP \fB\-mtls\-direct\-seg\-refs\fR 4 .IX Item "-mtls-direct-seg-refs" .PD 0 .IP \fB\-mno\-tls\-direct\-seg\-refs\fR 4 .IX Item "-mno-tls-direct-seg-refs" .PD کنترل می‌کند که آیا دسترسی به متغیرهای TLS با آفست‌هایی از ثبات قطعهٔ TLS (\f(CW%gs\fR برای ۳۲ بیتی، \f(CW%fs\fR برای ۶۴ بیتی) مجاز است یا اینکه باید اشاره‌گر پایهٔ رشته (thread base pointer) اضافه شود. معتبر بودن یا نبودن این رفتار به سیستم‌عامل و اینکه آیا قطعه را برای پوشش کل ناحیهٔ TLS نگاشت می‌کند یا خیر، بستگی دارد. .Sp برای سیستم‌هایی که از GNU C Library استفاده می‌کنند، مقدار پیش‌فرض روشن است. .IP \fB\-msse2avx\fR 4 .IX Item "-msse2avx" .PD 0 .IP \fB\-mno\-sse2avx\fR 4 .IX Item "-mno-sse2avx" .PD مشخص می‌کند که اسمبلر باید دستورالعمل‌های SSE را با پیشوند VEX کدگذاری کند. گزینهٔ \fB\-mavx\fR این ویژگی را به‌طور پیش‌فرض فعال می‌کند. .IP \fB\-mfentry\fR 4 .IX Item "-mfentry" .PD 0 .IP \fB\-mno\-fentry\fR 4 .IX Item "-mno-fentry" .PD اگر تحلیل کارایی (profiling) فعال باشد (\fB\-pg\fR)، فراخوانی شمارندهٔ تحلیل کارایی را قبل از پیش‌درآمد (prologue) قرار می‌دهد. توجه: در معماری‌های x86، مشخصهٔ \f(CW\*(C`ms_hook_prologue\*(C'\fR در حال حاضر برای \&\fB\-mfentry\fR و \fB\-pg\fR امکان‌پذیر نیست. .IP \fB\-mrecord\-mcount\fR 4 .IX Item "-mrecord-mcount" .PD 0 .IP \fB\-mno\-record\-mcount\fR 4 .IX Item "-mno-record-mcount" .PD اگر تحلیل کارایی فعال باشد (\fB\-pg\fR)، یک بخش _\|_mcount_loc تولید می‌کند که حاوی اشاره‌گرهایی به هر فراخوانی تحلیل کارایی است. این برای وصله کردن خودکار فراخوانی‌ها به داخل و خارج (patching in and out) مفید است. .IP \fB\-mnop\-mcount\fR 4 .IX Item "-mnop-mcount" .PD 0 .IP \fB\-mno\-nop\-mcount\fR 4 .IX Item "-mno-nop-mcount" .PD اگر تحلیل کارایی فعال باشد (\fB\-pg\fR)، فراخوانی‌های توابع تحلیل کارایی را به‌صورت دستورهای NOP تولید می‌کند. این در صورتی مفید است که قرار باشد بعداً به‌طور پویا وصله‌گذاری شوند. این گزینه احتمالاً تنها همراه با \fB\-mrecord\-mcount\fR مفید است. .IP \fB\-minstrument\-return=\fR\fItype\fR 4 .IX Item "-minstrument-return=type" خروج تابع را در توابع ابزارگذاری‌شده با \-pg \-mfentry، با فراخوانی تابع مشخص‌شده ابزارگذاری می‌کند. این فقط بازگشت‌های واقعیِ منتهی به ret را ابزارگذاری می‌کند، نه فراخوانی‌های هم‌سطح (sibling calls) منتهی به jump را. انواع معتبر عبارتند از \&\fInone\fR برای عدم ابزارگذاری، \fIcall\fR برای ایجاد فراخوانی به _\|_return_\|_، یا \fInop5\fR برای ایجاد یک nop ۵ بایتی. .IP \fB\-mrecord\-return\fR 4 .IX Item "-mrecord-return" .PD 0 .IP \fB\-mno\-record\-return\fR 4 .IX Item "-mno-record-return" .PD یک بخش _\|_return_loc تولید می‌کند که به تمام کدهای ابزارگذاری بازگشت اشاره دارد. .IP \fB\-mfentry\-name=\fR\fIname\fR 4 .IX Item "-mfentry-name=name" نام نماد _\|_fentry_\|_ را که هنگام ورود به تابع برای توابع \-pg \-mfentry فراخوانی می‌شود، تعیین می‌کند. .IP \fB\-mfentry\-section=\fR\fIname\fR 4 .IX Item "-mfentry-section=name" نام بخش را برای ثبت فراخوانی‌های \-mrecord\-mcount تعیین می‌کند (پیش‌فرض _\|_mcount_loc). .IP \fB\-mskip\-rax\-setup\fR 4 .IX Item "-mskip-rax-setup" .PD 0 .IP \fB\-mno\-skip\-rax\-setup\fR 4 .IX Item "-mno-skip-rax-setup" .PD هنگام تولید کد برای معماری x86\-64 با افزونه‌های غیرفعال SSE، می‌توان از \&\fB\-mskip\-rax\-setup\fR برای صرف‌نظر کردن از راه‌اندازی ثبات RAX در حالتی که هیچ آرگومان متغیری در ثبات‌های برداری ارسال نمی‌شود، استفاده کرد. .Sp \&\fBهشدار:\fR از آنجا که از ثبات RAX برای جلوگیری از ذخیرهٔ غیرضروری ثبات‌های برداری روی پشته هنگام ارسال آرگومان‌های متغیر استفاده می‌شود، پیامدهای این گزینه این است که توابع فراخوانده‌شده (callees) ممکن است مقداری فضای پشته را هدر دهند، رفتار نادرستی داشته باشند یا به مکانی تصادفی بپرند. کامپایلر GCC 4.4 یا جدیدتر صرف‌نظر از مقدار ثبات RAX چنین مشکلاتی ندارند. .IP \fB\-m8bit\-idiv\fR 4 .IX Item "-m8bit-idiv" .PD 0 .IP \fB\-mno\-8bit\-idiv\fR 4 .IX Item "-mno-8bit-idiv" .PD در برخی پردازنده‌ها، مانند Intel Atom، تقسیم اعداد صحیح بدون علامت ۸ بیتی بسیار سریع‌تر از تقسیم اعداد صحیح ۳۲ بیتی/۶۴ بیتی است. این گزینه یک بررسی در زمان اجرا تولید می‌کند. اگر هر دو مقسوم و مقسوم‌علیه در محدودهٔ 0 تا 255 باشند، تقسیم صحیح بدون علامت ۸ بیتی به‌جای تقسیم صحیح ۳۲ بیتی/۶۴ بیتی استفاده می‌شود. .IP \fB\-mavx256\-split\-unaligned\-load\fR 4 .IX Item "-mavx256-split-unaligned-load" .PD 0 .IP \fB\-mavx256\-split\-unaligned\-store\fR 4 .IX Item "-mavx256-split-unaligned-store" .PD عملیات بارگذاری (load) و ذخیره‌سازی (store) ناترازِ ۳۲ بایتی AVX را تفکیک می‌کند. .IP \fB\-mstack\-protector\-guard=\fR\fIguard\fR 4 .IX Item "-mstack-protector-guard=guard" .PD 0 .IP \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR 4 .IX Item "-mstack-protector-guard-reg=reg" .IP \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR 4 .IX Item "-mstack-protector-guard-offset=offset" .IP \fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR 4 .IX Item "-mstack-protector-guard-symbol=symbol" .PD کد حفاظت از پشته را با استفاده از قناری (canary) در \fIguard\fR تولید می‌کند. مکان‌های پشتیبانی‌شده عبارتند از \fBglobal\fR برای قناری سراسری یا \fBtls\fR برای قناری به ازای هر رشته در بلوک TLS (پیش‌فرض). این گزینه فقط زمانی اعمال می‌شود که \fB\-fstack\-protector\fR یا \fB\-fstack\-protector\-all\fR مشخص شده باشد. .Sp با انتخاب حالت دوم، گزینه‌های \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR و \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR علاوه بر این مشخص می‌کنند که کدام ثبات قطعه (\f(CW%fs\fR یا \f(CW%gs\fR) به‌عنوان ثبات پایه برای خواندن قناری استفاده شود، و از چه آفستی نسبت به آن ثبات پایه خوانده شود. مقدار پیش‌فرض آن‌ها همان است که در ABI مربوطه مشخص شده است. .Sp \&\fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR مقدار آفست را با یک ارجاع نمادین به قناری در بلوک TLS لغو و جایگزین می‌کند. .IP \fB\-mgeneral\-regs\-only\fR 4 .IX Item "-mgeneral-regs-only" کدی تولید می‌کند که فقط از ثبات‌های همه‌منظوره استفاده می‌کند. این کار کامپایلر را از استفاده از ثبات‌های ممیز شناور، برداری، ماسک و ثبات‌های کران (bound registers) بازمی‌دارد. .IP \fB\-mrelax\-cmpxchg\-loop\fR 4 .IX Item "-mrelax-cmpxchg-loop" هنگام تولید حلقهٔ مقایسه و جابجایی (compare\-and\-swap) برای توابع توکار \&\fB_\|_sync Builtins\fR و \fB_\|_atomic Builtins\fR که فاقد دستورالعمل بومی هستند، با صدور یک بارگذاری اتمی پیش از دستورالعمل \f(CW\*(C`CMPXCHG\*(C'\fR و استفاده از دستورالعمل \&\f(CW\*(C`PAUSE\*(C'\fR برای صرفه‌جویی در مصرف توان پردازنده هنگام شروع مجدد حلقه، کد را برای مواردی با رقابت شدید بهینه‌سازی می‌کند. .IP \fB\-mindirect\-branch=\fR\fIchoice\fR 4 .IX Item "-mindirect-branch=choice" فراخوانی و پرش غیرمستقیم را با \fIchoice\fR تبدیل می‌کند. مقدار پیش‌فرض \fBkeep\fR است که فراخوانی و پرش غیرمستقیم را بدون تغییر نگه می‌دارد. مقدار \fBthunk\fR فراخوانی و پرش غیرمستقیم را به فراخوانی و بازگشت thunk تبدیل می‌کند. مقدار \fBthunk\-inline\fR فراخوانی و پرش غیرمستقیم را به thunk فراخوانی و بازگشت درون‌خطی‌شده تبدیل می‌کند. مقدار \fBthunk\-extern\fR فراخوانی و پرش غیرمستقیم را به thunk فراخوانی و بازگشت خارجی که در یک فایل شیء جداگانه ارائه شده است تبدیل می‌کند. می‌توانید این رفتار را برای یک تابع خاص با استفاده از مشخصهٔ تابع \f(CW\*(C`indirect_branch\*(C'\fR کنترل کنید. .Sp توجه داشته باشید که \fB\-mcmodel=large\fR با \fB\-mindirect\-branch=thunk\fR و \&\fB\-mindirect\-branch=thunk\-extern\fR ناسازگار است زیرا تابع thunk ممکن است در مدل کد بزرگ قابل دستیابی نباشد. .Sp توجه داشته باشید که \fB\-mindirect\-branch=thunk\-extern\fR با \&\fB\-fcf\-protection=branch\fR سازگار است زیرا می‌توان thunk خارجی را به‌گونه‌ای ساخت که بررسی جریان کنترل فعال شود..IP \fB\-mfunction\-return=\fR\fIchoice\fR 4 .IX Item "-mfunction-return=choice" بازگشت تابع را با \fIchoice\fR تبدیل می‌کند. پیش‌فرض \fBkeep\fR است که بازگشت تابع را دست‌نخورده نگه می‌دارد. مقدار \fBthunk\fR بازگشت تابع را به thunk فراخوانی و بازگشت (call and return thunk) تبدیل می‌کند. مقدار \fBthunk\-inline\fR بازگشت تابع را به thunk فراخوانی و بازگشت درون‌خطی تبدیل می‌کند. مقدار \fBthunk\-extern\fR بازگشت تابع را به thunk فراخوانی و بازگشت خارجی که در یک فایل شیء جداگانه ارائه شده تبدیل می‌کند. می‌توانید این رفتار را برای یک تابع خاص با استفاده از مشخصه تابع \f(CW\*(C`function_return\*(C'\fR کنترل کنید. .Sp توجه داشته باشید که \fB\-mindirect\-return=thunk\-extern\fR با \&\fB\-fcf\-protection=branch\fR سازگار است زیرا می‌توان thunk خارجی را طوری ساخت که بررسی جریان کنترل (control-flow check) را فعال کند. .Sp توجه داشته باشید که \fB\-mcmodel=large\fR با \&\fB\-mfunction\-return=thunk\fR و \&\fB\-mfunction\-return=thunk\-extern\fR ناسازگار است چرا که تابع thunk ممکن است در مدل کد بزرگ (large code model) در دسترس نباشد. .IP \fB\-mindirect\-branch\-register\fR 4 .IX Item "-mindirect-branch-register" فراخوانی و پرش غیرمستقیم از طریق ثبات را اجباری می‌کند. .IP \fB\-mharden\-sls=\fR\fIchoice\fR 4 .IX Item "-mharden-sls=choice" کدی برای کاهش خطرات حدس مستقیم خطی (SLS یا straight line speculation) با \&\fIchoice\fR تولید می‌کند. پیش‌فرض \fBnone\fR است که تمام مقاوم‌سازی‌های SLS را غیرفعال می‌کند. مقدار \fBreturn\fR مقاوم‌سازی SLS را برای بازگشت‌های تابع فعال می‌کند. مقدار \&\fBindirect\-jmp\fR مقاوم‌سازی SLS را برای پرش‌های غیرمستقیم فعال می‌سازد. مقدار \&\fBall\fR تمام مقاوم‌سازی‌های SLS را فعال می‌کند. .IP \fB\-mindirect\-branch\-cs\-prefix\fR 4 .IX Item "-mindirect-branch-cs-prefix" پیشوند CS را به call و jmp به سمت thunk غیرمستقیم با مقصد انشعاب در ثبات‌های r8\-r15 اضافه می‌کند تا طول دستورالعمل call و jmp برابر با ۶ بایت شود و امکان جایگزینی آن‌ها با \fBlfence; call *%r8\-r15\fR یا \&\fBlfence; jmp *%r8\-r15\fR در زمان اجرا فراهم گردد. .IP \fB\-mapx\-inline\-asm\-use\-gpr32\fR 4 .IX Item "-mapx-inline-asm-use-gpr32" برای پشتیبانی از اسمبلی درون‌خطی (inline asm) با APX، به‌طور پیش‌فرض ویژگی EGPR غیرفعال شده است تا از بروز دستورالعمل‌های غیرمجاز احتمالی با EGPR جلوگیری شود. برای به‌کارگیری egpr در اسمبلی درون‌خطی، از گزینه جدید کامپایلر \&\-mapx\-inline\-asm\-use\-gpr32 استفاده کنید و کاربر باید اطمینان حاصل کند که دستورالعمل از EGPR پشتیبانی می‌کند. .IP \fB\-mevex512\fR 4 .IX Item "-mevex512" .PD 0 .IP \fB\-mno\-evex512\fR 4 .IX Item "-mno-evex512" .PD بردار ۵۱۲ بیتی را فعال/غیرفعال می‌کند. اگر AVX512F فعال باشد، به‌طور پیش‌فرض فعال خواهد بود. .PP این سوئیچ‌های \fB\-m\fR علاوه بر موارد فوق، روی پردازنده‌های x86\-64 در محیط‌های ۶۴ بیتی پشتیبانی می‌شوند. .IP \fB\-m32\fR 4 .IX Item "-m32" .PD 0 .IP \fB\-m64\fR 4 .IX Item "-m64" .IP \fB\-mx32\fR 4 .IX Item "-mx32" .IP \fB\-m16\fR 4 .IX Item "-m16" .IP \fB\-miamcu\fR 4 .IX Item "-miamcu" .PD تولید کد برای یک محیط ۱۶ بیتی، ۳۲ بیتی یا ۶۴ بیتی. گزینه \fB\-m32\fR نوع‌های \f(CW\*(C`int\*(C'\fR، \f(CW\*(C`long\*(C'\fR و اشاره‌گر را روی ۳۲ بیت تنظیم می‌کند و کدی تولید می‌کند که در حالت ۳۲ بیتی اجرا می‌شود. .Sp گزینه \fB\-m64\fR نوع \f(CW\*(C`int\*(C'\fR را روی ۳۲ بیت و نوع‌های \f(CW\*(C`long\*(C'\fR و اشاره‌گر را روی ۶۴ بیت تنظیم می‌کند و برای معماری x86\-64 کد تولید می‌کند. تنها در Darwin، گزینه \fB\-m64\fR گزینه‌های \fB\-fno\-pic\fR و \fB\-mdynamic\-no\-pic\fR را نیز خاموش می‌کند. .Sp گزینه \fB\-mx32\fR نوع‌های \f(CW\*(C`int\*(C'\fR، \f(CW\*(C`long\*(C'\fR و اشاره‌گر را روی ۳۲ بیت تنظیم می‌کند و برای معماری x86\-64 کد تولید می‌کند. .Sp گزینه \fB\-m16\fR همانند \fB\-m32\fR است، به‌جز اینکه دستور اسمبلی \f(CW\*(C`.code16gcc\*(C'\fR را در ابتدای خروجی اسمبلی درج می‌کند تا فایل اجرایی بتواند در حالت ۱۶ بیتی اجرا شود. .Sp گزینه \fB\-miamcu\fR کدی مطابق با Intel MCU psABI تولید می‌کند. این گزینه مستلزم فعال بودن گزینه \fB\-m32\fR است. .IP \fB\-mno\-red\-zone\fR 4 .IX Item "-mno-red-zone" از اصطلاحاً «red zone» (منطقه سرخ) برای کد x86\-64 استفاده نمی‌کند. منطقه سرخ توسط ABI معماری x86\-64 الزامی شده است؛ ناحیه‌ای ۱۲۸ بایتی فراتر از موقعیت اشاره‌گر پشته است که توسط گرداننده‌های سیگنال یا وقفه دستکاری نمی‌شود و بنابراین می‌تواند برای داده‌های موقت بدون نیاز به تنظیم اشاره‌گر پشته استفاده شود. پرچم \fB\-mno\-red\-zone\fR این منطقه سرخ را غیرفعال می‌کند. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" تولید کد برای مدل کد کوچک (small code model): برنامه و نمادهای آن باید در ۲ گیگابایت پایینی فضای آدرس پیوند داده شوند. اشاره‌گرها ۶۴ بیتی هستند. برنامه‌ها را می‌توان به‌صورت ایستا یا پویا پیوند داد. این مدل کد پیش‌فرض است. .IP \fB\-mcmodel=kernel\fR 4 .IX Item "-mcmodel=kernel" تولید کد برای مدل کد هسته (kernel code model). هسته در ۲ گیگابایت منفی فضای آدرس اجرا می‌شود. این مدل باید برای کد هسته لینوکس استفاده شود. .IP \fB\-mcmodel=medium\fR 4 .IX Item "-mcmodel=medium" تولید کد برای مدل متوسط (medium model): برنامه در ۲ گیگابایت پایینی فضای آدرس پیوند می‌خورد. نمادهای کوچک نیز در آنجا قرار می‌گیرند. نمادهایی با اندازه‌های بزرگ‌تر از \fB\-mlarge\-data\-threshold\fR در بخش‌های داده یا BSS بزرگ قرار داده می‌شوند و می‌توانند بالای ۲ گیگابایت مستقر شوند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" تولید کد برای مدل بزرگ (large model). این مدل هیچ فرضی درباره آدرس‌ها و اندازه بخش‌ها در نظر نمی‌گیرد. .IP \fB\-maddress\-mode=long\fR 4 .IX Item "-maddress-mode=long" تولید کد برای حالت آدرس بلند (long address mode). این مورد فقط برای محیط‌های ۶۴ بیتی و x32 پشتیبانی می‌شود. این حالت آدرس پیش‌فرض برای محیط‌های ۶۴ بیتی است. .IP \fB\-maddress\-mode=short\fR 4 .IX Item "-maddress-mode=short" تولید کد برای حالت آدرس کوتاه (short address mode). این مورد فقط برای محیط‌های ۳۲ بیتی و x32 پشتیبانی می‌شود. این حالت آدرس پیش‌فرض برای محیط‌های ۳۲ بیتی و x32 است. .IP \fB\-mneeded\fR 4 .IX Item "-mneeded" .PD 0 .IP \fB\-mno\-needed\fR 4 .IX Item "-mno-needed" .PD ویژگی گنو GNU_PROPERTY_X86_ISA_1_NEEDED را برای مقصد لینوکس منتشر می‌کند تا سطح ISA ریزمعماریِ مورد نیاز برای اجرای باینری را مشخص کند. .IP \fB\-mno\-direct\-extern\-access\fR 4 .IX Item "-mno-direct-extern-access" بدون \fB\-fpic\fR یا \fB\-fPIC\fR، همیشه از اشاره‌گر GOT برای دسترسی به نمادهای خارجی استفاده می‌کند. با \fB\-fpic\fR یا \fB\-fPIC\fR، با دسترسی به نمادهای محافظت‌شده (protected symbols) مانند نمادهای محلی برخورد می‌کند. پیش‌فرض \&\fB\-mdirect\-extern\-access\fR است. .Sp \&\fBهشدار:\fR کتابخانه‌های مشترک کامپایل‌شده با \&\fB\-mno\-direct\-extern\-access\fR و فایل‌های اجرایی کامپایل‌شده با \&\fB\-mdirect\-extern\-access\fR، در صورتی که نمادهای محافظت‌شده در کتابخانه‌های مشترک و فایل اجرایی استفاده شده باشند، ممکن است از نظر باینری با یکدیگر سازگار نباشند. .IP \fB\-munroll\-only\-small\-loops\fR 4 .IX Item "-munroll-only-small-loops" باز کردن محافظه‌کارانه حلقه‌های کوچک را کنترل می‌کند. این گزینه به‌طور پیش‌فرض در O2 فعال است و حلقه‌های با کمتر از ۴ دستورالعمل را ۱ مرتبه باز می‌کند. استفاده صریح از \&\-f[no\-]unroll\-[all\-]loops این پرچم را غیرفعال می‌کند تا از هرگونه رفتار ناخواسته باز کردن حلقه که کاربر مایل به آن نیست جلوگیری شود. .IP \fB\-mlam=\fR\fIchoice\fR 4 .IX Item "-mlam=choice" قابلیت LAM (پوشش‌دهی آدرس خطی یا linear\-address masking) امکان استفاده از بیت‌های خاص در اشاره‌گر را برای فراداده (metadata) فراهم می‌کند. پیش‌فرض \fBnone\fR است. با \fBu48\fR، بیت‌های اشاره‌گر در موقعیت‌های 62:48 می‌توانند برای فراداده استفاده شوند؛ با \fBu57\fR، بیت‌های اشاره‌گر در موقعیت‌های 62:57 می‌توانند برای فراداده استفاده شوند. .PP \fIگزینه‌های x86 Windows\fR .IX Subsection "x86 Windows Options" .PP \fIگزینه‌های Xstormy16\fR .IX Subsection "Xstormy16 Options" .PP این گزینه‌ها برای Xstormy16 تعریف شده‌اند: .IP \fB\-msim\fR 4 .IX Item "-msim" انتخاب فایل‌های راه‌اندازی (startup) و اسکریپت پیونددهنده مناسب برای شبیه‌ساز. .PP \fIگزینه‌های Xtensa\fR .IX Subsection "Xtensa Options" .PP این گزینه‌ها برای مقصدهای Xtensa پشتیبانی می‌شوند: .IP \fB\-mconst16\fR 4 .IX Item "-mconst16" .PD 0 .IP \fB\-mno\-const16\fR 4 .IX Item "-mno-const16" .PD استفاده از دستورالعمل‌های \f(CW\*(C`CONST16\*(C'\fR را برای بارگذاری مقادیر ثابت فعال یا غیرفعال می‌کند. دستورالعمل \f(CW\*(C`CONST16\*(C'\fR در حال حاضر یک گزینه استاندارد از سوی Tensilica نیست. هنگام فعال بودن، دستورالعمل‌های \f(CW\*(C`CONST16\*(C'\fR همیشه به جای دستورالعمل‌های استاندارد \f(CW\*(C`L32R\*(C'\fR استفاده می‌شوند. استفاده از \f(CW\*(C`CONST16\*(C'\fR به‌طور پیش‌فرض تنها در صورتی فعال است که دستورالعمل \f(CW\*(C`L32R\*(C'\fR در دسترس نباشد..IP \fB\-mfused\-madd\fR 4 .IX Item "-mfused-madd" .PD 0 .IP \fB\-mno\-fused\-madd\fR 4 .IX Item "-mno-fused-madd" .PD فعال یا غیرفعال کردن استفاده از دستورالعمل‌های ضرب/جمع و ضرب/تفریق ادغام‌شده (fused multiply/add و multiply/subtract) در گزینهٔ ممیز شناور (floating\-point). در صورتی که گزینهٔ ممیز شناور فعال نباشد، این گزینه بی‌تأثیر خواهد بود. غیرفعال‌سازی دستورالعمل‌های ضرب/جمع و ضرب/تفریق ادغام‌شده، کامپایلر را وادار می‌کند تا از دستورالعمل‌های جداگانه برای عملیات‌های ضرب و جمع/تفریق استفاده کند. این امر ممکن است در مواردی که نتایجی کاملاً منطبق بر استاندارد IEEE 754 مورد نیاز است مطلوب باشد: دستورالعمل‌های ضرب و جمع/تفریق ادغام‌شده حاصل میانی را گرد نمی‌کنند، در نتیجه نتایجی با بیت‌های دقت \fIبیشتری\fR نسبت به مشخصات استاندارد IEEE تولید می‌کنند. همچنین غیرفعال کردن این دستورالعمل‌ها تضمین می‌کند که خروجی برنامه وابسته به توانایی کامپایلر در ادغام عملیات‌های ضرب و جمع/تفریق نباشد. .IP \fB\-mserialize\-volatile\fR 4 .IX Item "-mserialize-volatile" .PD 0 .IP \fB\-mno\-serialize\-volatile\fR 4 .IX Item "-mno-serialize-volatile" .PD هنگامی که این گزینه فعال است، GCC دستورالعمل‌های \f(CW\*(C`MEMW\*(C'\fR را پیش از مراجعات حافظهٔ \&\f(CW\*(C`volatile\*(C'\fR درج می‌کند تا سازگاری ترتیبی (sequential consistency) تضمین شود. مقدار پیش‌فرض \fB\-mserialize\-volatile\fR است. برای حذف دستورالعمل‌های \f(CW\*(C`MEMW\*(C'\fR از گزینهٔ \&\fB\-mno\-serialize\-volatile\fR استفاده کنید. .IP \fB\-mforce\-no\-pic\fR 4 .IX Item "-mforce-no-pic" برای مقاصدی مانند GNU/Linux، که در آن‌ها تمام کدهای حالت کاربر (user\-mode) در Xtensa باید کد مستقل از موقعیت (PIC) باشند، این گزینه PIC را برای کامپایل کردن کد هسته (kernel) غیرفعال می‌کند. .IP \fB\-mtext\-section\-literals\fR 4 .IX Item "-mtext-section-literals" .PD 0 .IP \fB\-mno\-text\-section\-literals\fR 4 .IX Item "-mno-text-section-literals" .PD این گزینه‌ها نحوهٔ مدیریت استخرهای مقادیر مستقیم (literal pools) را کنترل می‌کنند. حالت پیش‌فرض \&\fB\-mno\-text\-section\-literals\fR است که مقادیر مستقیم را در یک بخش (section) جداگانه در فایل خروجی قرار می‌دهد. این امر اجازه می‌دهد استخر مقادیر مستقیم در RAM/ROM داده قرار گیرد، و همچنین به پیونددهنده اجازه می‌دهد تا استخرهای مقادیر مستقیم فایل‌های شیءِ (object files) مجزا را با هم ترکیب کند تا مقادیر تکراری حذف شده و اندازهٔ کد بهبود یابد. با فعال بودن \fB\-mtext\-section\-literals\fR، مقادیر مستقیم در بخش text پراکنده می‌شوند تا در نزدیک‌ترین فاصلهٔ ممکن به مراجع خود قرار گیرند. این ممکن است برای فایل‌های اسمبلی بزرگ ضروری باشد. مقادیر مستقیم هر تابع درست پیش از همان تابع قرار می‌گیرند. .IP \fB\-mauto\-litpools\fR 4 .IX Item "-mauto-litpools" .PD 0 .IP \fB\-mno\-auto\-litpools\fR 4 .IX Item "-mno-auto-litpools" .PD این گزینه‌ها نحوهٔ مدیریت استخرهای مقادیر مستقیم را کنترل می‌کنند. حالت پیش‌فرض \&\fB\-mno\-auto\-litpools\fR است که مقادیر مستقیم را در یک بخش مجزا در فایل خروجی قرار می‌دهد، مگر اینکه از \fB\-mtext\-section\-literals\fR استفاده شده باشد. با فعال بودن \fB\-mauto\-litpools\fR مقادیر مستقیم توسط اسمبلر در بخش text پراکنده می‌شوند. کامپایلر دستورهای صریح \&\f(CW\*(C`.literal\*(C'\fR تولید نمی‌کند و مقادیر مستقیم را با دستورالعمل‌های \&\f(CW\*(C`MOVI\*(C'\fR به جای \f(CW\*(C`L32R\*(C'\fR در ثبات‌ها بارگذاری می‌کند تا به اسمبلر اجازه دهد عملیات تعدیل (relaxation) را انجام داده و مقادیر مستقیم را در صورت لزوم قرار دهد. این گزینه به اسمبلر امکان می‌دهد تا چندین استخر مقادیر مستقیم برای هر تابع ایجاد کرده و توابع بسیار بزرگ را اسمبل کند، کاری که ممکن است با \&\fB\-mtext\-section\-literals\fR امکان‌پذیر نباشد. .IP \fB\-mtarget\-align\fR 4 .IX Item "-mtarget-align" .PD 0 .IP \fB\-mno\-target\-align\fR 4 .IX Item "-mno-target-align" .PD هنگامی که این گزینه فعال است، GCC به اسمبلر دستور می‌دهد که به طور خودکار دستورالعمل‌ها را تراز (align) کند تا جریمه‌های انشعاب (branch penalties) را به بهای مقداری کاهش تراکم کد، کاهش دهد. اسمبلر تلاش می‌کند دستورالعمل‌های تراکم (density instructions) را عریض‌تر کند تا مقاصد انشعاب و دستورالعمل‌های پس از دستورهای فراخوانی (call) تراز شوند. اگر دستورالعمل‌های متراکم امن پیشینِ کافی برای تراز کردن یک مقصد وجود نداشته باشد، هیچ عریض‌سازی انجام نمی‌شود. پیش‌فرض \fB\-mtarget\-align\fR است. این گزینه‌ها بر رفتار دستورالعمل‌های خودتراز مانند \f(CW\*(C`LOOP\*(C'\fR، که اسمبلر همیشه آن‌ها را چه با عریض‌سازی دستورالعمل‌های متراکم یا با درج دستورالعمل‌های NOP تراز می‌کند، تأثیری ندارند. .IP \fB\-mlongcalls\fR 4 .IX Item "-mlongcalls" .PD 0 .IP \fB\-mno\-longcalls\fR 4 .IX Item "-mno-longcalls" .PD هنگامی که این گزینه فعال است، GCC به اسمبلر دستور می‌دهد که فراخوانی‌های مستقیم را به فراخوانی‌های غیرمستقیم تبدیل کند، مگر اینکه بتواند تعیین کند که مقصد یک فراخوانی مستقیم در محدودهٔ مجاز دستور فراخوانی قرار دارد. این تبدیل معمولاً برای فراخوانی توابع در فایل‌های منبع دیگر رخ می‌دهد. به طور مشخص، اسمبلر یک دستور مستقیم \f(CW\*(C`CALL\*(C'\fR را به یک \f(CW\*(C`L32R\*(C'\fR که پس از آن یک دستور \f(CW\*(C`CALLX\*(C'\fR قرار دارد ترجمه می‌کند. حالت پیش‌فرض \fB\-mno\-longcalls\fR است. این گزینه باید در برنامه‌هایی استفاده شود که مقصد فراخوانی به صورت بالقوه ممکن است خارج از محدوده باشد. این گزینه در اسمبلر پیاده‌سازی شده است، نه کامپایلر، بنابراین کد اسمبلی تولید شده توسط GCC همچنان دستورالعمل‌های فراخوانی مستقیم را نشان می‌دهد\-\-\-برای مشاهدهٔ دستورالعمل‌های واقعی به کد دیزاسمبل‌شدهٔ شیء نگاه کنید. توجه داشته باشید که اسمبلر برای هر فراخوانی بین فایلی از یک فراخوانی غیرمستقیم استفاده می‌کند، نه فقط مواردی که واقعاً خارج از محدوده هستند. .IP \fB\-mabi=\fR\fIname\fR 4 .IX Item "-mabi=name" تولید کد برای ABI مشخص‌شده. مقادیر مجاز عبارتند از: \fBcall0\fR و \&\fBwindowed\fR. رابط ABI پیش‌فرض بر اساس پیکربندی هستهٔ Xtensa انتخاب می‌شود. .IP \fB\-mabi=call0\fR 4 .IX Item "-mabi=call0" هنگامی که این گزینه فعال است، پارامترهای تابع در ثبات‌های \&\f(CW\*(C`a2\*(C'\fR تا \f(CW\*(C`a7\*(C'\fR منتقل می‌شوند، ثبات‌های \f(CW\*(C`a12\*(C'\fR تا \f(CW\*(C`a15\*(C'\fR توسط فراخواننده ذخیره می‌شوند (caller\-saved)، و ثبات \f(CW\*(C`a15\*(C'\fR ممکن است به عنوان اشاره‌گر فریم (frame pointer) استفاده شود. هنگامی که این نسخه از ABI فعال باشد، نماد پیش‌پردازندهٔ سی \&\f(CW\*(C`_\|_XTENSA_CALL0_ABI_\|_\*(C'\fR تعریف می‌شود. .IP \fB\-mabi=windowed\fR 4 .IX Item "-mabi=windowed" هنگامی که این گزینه فعال است، پارامترهای تابع در ثبات‌های \&\f(CW\*(C`a10\*(C'\fR تا \f(CW\*(C`a15\*(C'\fR منتقل می‌شوند، و تابع فراخوانده‌شده در بدو ورود پنجرهٔ ثبات را به اندازهٔ ۸ ثبات می‌چرخاند تا آرگومان‌های آن در ثبات‌های \&\f(CW\*(C`a2\*(C'\fR تا \f(CW\*(C`a7\*(C'\fR قرار گیرند. ثبات \f(CW\*(C`a7\*(C'\fR ممکن است به عنوان اشاره‌گر فریم استفاده شود. پنجرهٔ ثبات در زمان بازگشت ۸ ثبات به عقب بازگردانده می‌شود. هنگامی که این نسخه از ABI فعال باشد، نماد پیش‌پردازندهٔ سی \&\f(CW\*(C`_\|_XTENSA_WINDOWED_ABI_\|_\*(C'\fR تعریف می‌شود. .IP \fB\-mextra\-l32r\-costs=\fR\fIn\fR 4 .IX Item "-mextra-l32r-costs=n" هزینهٔ اضافی دسترسی به RAM/ROM دستورالعمل‌ها را برای دستورات \f(CW\*(C`L32R\*(C'\fR، بر حسب چرخه‌های ساعت مشخص می‌کند. این گزینه هنگام بهینه‌سازی برای سرعت، بر تصمیم‌گیری بین بارگذاری یک مقدار ثابت از استخر مقادیر مستقیم با استفاده از \f(CW\*(C`L32R\*(C'\fR یا تولید آن ثابت از یک مقدار کوچک با چند دستور محاسباتی تأثیر می‌گذارد. مقدار پیش‌فرض 0 است. .IP \fB\-mstrict\-align\fR 4 .IX Item "-mstrict-align" .PD 0 .IP \fB\-mno\-strict\-align\fR 4 .IX Item "-mno-strict-align" .PD اجتناب از یا مجاز دانستن تولید دسترسی‌های حافظه‌ای که ممکن است طبق توصیف مشخصات معماری، روی مرز طبیعی شیء تراز نشده باشند. مقدار پیش‌فرض برای هسته‌هایی که از هر دو عملیات بارگذاری و ذخیره‌سازی ناتراز در سخت‌افزار پشتیبانی می‌کنند \fB\-mno\-strict\-align\fR و برای تمام هسته‌های دیگر \fB\-mstrict\-align\fR است. .PP \fIگزینه‌های zSeries\fR .IX Subsection "zSeries Options" .PP این موارد در ذیل فهرست شده‌اند:.SH "محیط (ENVIRONMENT)" .IX Header "ENVIRONMENT" این بخش چندین متغیر محیطی را شرح می‌دهد که بر نحوه عملکرد GCC تأثیر می‌گذارند. برخی از آن‌ها با تعیین دایرکتوری‌ها یا پیشوندهایی که هنگام جستجو برای انواع مختلف فایل‌ها به کار می‌روند، عمل می‌کنند. برخی دیگر برای تعیین سایر جنبه‌های محیط کامپایل استفاده می‌شوند. .PP توجه داشته باشید که می‌توانید مکان‌های جستجو را با استفاده از گزینه‌هایی مانند \&\fB\-B\fR، \fB\-I\fR و \fB\-L\fR نیز مشخص کنید. این گزینه‌ها نسبت به مکان‌های مشخص‌شده با متغیرهای محیطی اولویت دارند، که خود آن‌ها نیز بر موارد تعیین‌شده توسط پیکربندی GCC تقدم دارند. .IP \fBLANG\fR 4 .IX Item "LANG" .PD 0 .IP \fBLC_CTYPE\fR 4 .IX Item "LC_CTYPE" .IP \fBLC_MESSAGES\fR 4 .IX Item "LC_MESSAGES" .IP \fBLC_ALL\fR 4 .IX Item "LC_ALL" .PD این متغیرهای محیطی روش استفاده GCC از اطلاعات بومی‌سازی را کنترل می‌کنند که به GCC اجازه می‌دهد با رسوم و قراردادهای ملی مختلف کار کند. اگر پیکربندی شده باشد، GCC دسته‌بندی‌های محلی \&\fBLC_CTYPE\fR و \fBLC_MESSAGES\fR را بررسی می‌کند. این دسته‌بندی‌های محلی می‌توانند روی هر مقداری که توسط سامانه شما پشتیبانی می‌شود تنظیم شوند. یک مقدار معمول \fBen_GB.UTF\-8\fR برای انگلیسی بریتانیا با کدگذاری UTF\-8 است. .Sp متغیر محیطی \fBLC_CTYPE\fR دسته‌بندی نویسه‌ها را مشخص می‌کند. GCC از آن برای تعیین مرزهای نویسه در یک رشته استفاده می‌کند؛ این امر برای برخی کدگذاری‌های چندبایتی ضروری است که نویسه‌های نقل‌قول و گریز (escape) دارند که در غیر این صورت به عنوان پایان رشته یا گریز تفسیر می‌شوند. .Sp متغیر محیطی \fBLC_MESSAGES\fR زبانی را مشخص می‌کند که در پیام‌های تشخیصی استفاده می‌شود. .Sp اگر متغیر محیطی \fBLC_ALL\fR تنظیم شده باشد، مقدار \fBLC_CTYPE\fR و \fBLC_MESSAGES\fR را لغو (override) می‌کند؛ در غیر این صورت، پیش‌فرض \fBLC_CTYPE\fR و \fBLC_MESSAGES\fR مقدار متغیر محیطی \fBLANG\fR خواهد بود. اگر هیچ‌یک از این متغیرها تنظیم نشده باشند، GCC به رفتار سنتی انگلیسی C بازمی‌گردد. .IP \fBTMPDIR\fR 4 .IX Item "TMPDIR" اگر \fBTMPDIR\fR تنظیم شده باشد، دایرکتوری مورد استفاده برای فایل‌های موقت را مشخص می‌کند. GCC از فایل‌های موقت برای نگهداری خروجی یک مرحله از کامپایل استفاده می‌کند که قرار است به عنوان ورودی مرحله بعد به کار رود؛ برای مثال، خروجی پیش‌پردازنده، که ورودی خود کامپایلر است. .IP \fBGCC_COMPARE_DEBUG\fR 4 .IX Item "GCC_COMPARE_DEBUG" تنظیم \fBGCC_COMPARE_DEBUG\fR تقریباً معادل ارسال \&\fB\-fcompare\-debug\fR به گرداننده کامپایلر (compiler driver) است. برای جزئیات بیشتر مستندات این گزینه را ببینید. .IP \fBGCC_EXEC_PREFIX\fR 4 .IX Item "GCC_EXEC_PREFIX" اگر \fBGCC_EXEC_PREFIX\fR تنظیم شده باشد، پیشوندی را برای استفاده در نام‌های زیربرنامه‌های اجرا شده توسط کامپایلر مشخص می‌کند. هنگام ترکیب این پیشوند با نام یک زیربرنامه هیچ اسلشی اضافه نمی‌شود، اما در صورت تمایل می‌توانید پیشوندی را مشخص کنید که با اسلش پایان می‌یابد. .Sp اگر \fBGCC_EXEC_PREFIX\fR تنظیم نشده باشد، GCC تلاش می‌کند تا بر اساس نام مسیری که با آن فراخوانی شده است، پیشوند مناسبی برای استفاده بیابد. .Sp اگر GCC نتواند زیربرنامه را با استفاده از پیشوند مشخص‌شده بیابد، جستجو در مکان‌های معمول برای زیربرنامه را امتحان می‌کند. .Sp مقدار پیش‌فرض \fBGCC_EXEC_PREFIX\fR برابر \&\fIprefix/lib/gcc/\fR است که در آن \fIprefix\fR پیشوندِ کامپایلر نصب‌شده است. در بسیاری از موارد \fIprefix\fR همان مقدار \f(CW\*(C`prefix\*(C'\fR در هنگام اجرای اسکریپت \fIconfigure\fR است. .Sp سایر پیشوندهای مشخص‌شده با \fB\-B\fR بر این پیشوند اولویت دارند. .Sp این پیشوند همچنین برای یافتن فایل‌هایی مانند \fIcrt0.o\fR که برای پیوند دادن (linking) استفاده می‌شوند به کار می‌رود. .Sp علاوه بر این، این پیشوند به شیوه‌ای غیرمعمول در یافتن دایرکتوری‌های جستجو برای فایل‌های سرآیند (header files) استفاده می‌شود. برای هر یک از دایرکتوری‌های استانداردی که نام آن‌ها به طور معمول با \fB/usr/local/lib/gcc\fR (دقیق‌تر بگوییم، با مقدار \fBGCC_INCLUDE_DIR\fR) آغاز می‌شود، GCC تلاش می‌کند آن آغازه را با پیشوند مشخص‌شده جایگزین کند تا نام دایرکتوری جایگزینی تولید شود. بنابراین با \fB\-Bfoo/\fR، GCC درست پیش از جستجوی دایرکتوری استاندارد \&\fI/usr/local/lib/bar\fR، دایرکتوری \&\fIfoo/bar\fR را جستجو می‌کند. اگر یک دایرکتوری استاندارد با \&\fIprefix\fR پیکربندی‌شده آغاز شود، هنگام جستجوی فایل‌های سرآیند، مقدار \fIprefix\fR با \&\fBGCC_EXEC_PREFIX\fR جایگزین می‌شود. .IP \fBCOMPILER_PATH\fR 4 .IX Item "COMPILER_PATH" مقدار \fBCOMPILER_PATH\fR فهرستی از دایرکتوری‌های جداشده با دونقطه (colon) است، بسیار شبیه به \fBPATH\fR. اگر GCC نتواند زیربرنامه‌ها را با استفاده از \fBGCC_EXEC_PREFIX\fR پیدا کند، دایرکتوری‌هایی را که بدین‌گونه مشخص شده‌اند هنگام جستجوی زیربرنامه‌ها بررسی می‌کند. .IP \fBLIBRARY_PATH\fR 4 .IX Item "LIBRARY_PATH" مقدار \fBLIBRARY_PATH\fR فهرستی از دایرکتوری‌های جداشده با دونقطه است، بسیار شبیه به \fBPATH\fR. هنگامی که GCC به عنوان یک کامپایلر بومی (native) پیکربندی شده باشد، اگر نتواند فایل‌های ویژه پیونددهنده را با استفاده از \fBGCC_EXEC_PREFIX\fR بیابد، دایرکتوری‌هایی را که بدین‌گونه مشخص شده‌اند بررسی می‌کند. پیوند زدن با استفاده از GCC همچنین از این دایرکتوری‌ها هنگام جستجوی کتابخانه‌های معمولی برای گزینه \fB\-l\fR استفاده می‌کند (اما دایرکتوری‌های مشخص‌شده با \&\fB\-L\fR اولویت دارند). .IP \fBLANG\fR 4 .IX Item "LANG" این متغیر برای انتقال اطلاعات محلی (locale) به کامپایلر استفاده می‌شود. یکی از روش‌های استفاده از این اطلاعات، تعیین مجموعه نویسه‌ای (character set) است که هنگام تجزیه لیترال‌های نویسه‌ای، لیترال‌های رشته‌ای و کامنت‌ها در C و ++C به کار می‌رود. هنگامی که کامپایلر برای مجاز دانستن نویسه‌های چندبایتی پیکربندی شده باشد، مقادیر زیر برای \fBLANG\fR شناخته می‌شوند: .RS 4 .IP \fBC\-JIS\fR 4 .IX Item "C-JIS" تشخیص نویسه‌های JIS. .IP \fBC\-SJIS\fR 4 .IX Item "C-SJIS" تشخیص نویسه‌های SJIS. .IP \fBC\-EUCJP\fR 4 .IX Item "C-EUCJP" تشخیص نویسه‌های EUCJP. .RE .RS 4 .Sp اگر \fBLANG\fR تعریف نشده باشد یا مقدار دیگری داشته باشد، کامپایلر از \f(CW\*(C`mblen\*(C'\fR و \f(CW\*(C`mbtowc\*(C'\fR بر اساس محلی پیش‌فرض برای تشخیص و ترجمه نویسه‌های چندبایتی استفاده می‌کند. .RE .IP \fBGCC_EXTRA_DIAGNOSTIC_OUTPUT\fR 4 .IX Item "GCC_EXTRA_DIAGNOSTIC_OUTPUT" اگر \fBGCC_EXTRA_DIAGNOSTIC_OUTPUT\fR روی یکی از مقادیر زیر تنظیم شود، هنگام ارسال راهنمایی‌های تصحیح (fix\-it hints)، متن اضافی به stderr فرستاده می‌شود. گزینه‌های \fB\-fdiagnostics\-parseable\-fixits\fR و \&\fB\-fno\-diagnostics\-parseable\-fixits\fR بر این متغیر محیطی اولویت دارند. .RS 4 .IP \fBfixits\-v1\fR 4 .IX Item "fixits-v1" ارسال راهنمایی‌های تصحیح قابل‌تجزیه، معادل با \&\fB\-fdiagnostics\-parseable\-fixits\fR. به‌ویژه، ستون‌ها به عنوان تعداد بایت بیان می‌شوند که از بایت ۱ برای ستون اولیه آغاز می‌شود. .IP \fBfixits\-v2\fR 4 .IX Item "fixits-v2" مانند \f(CW\*(C`fixits\-v1\*(C'\fR، اما ستون‌ها طبق \fB\-fdiagnostics\-column\-unit=display\fR به صورت ستون‌های نمایشی بیان می‌شوند. .RE .RS 4 .RE .PP برخی متغیرهای محیطی دیگر بر رفتار پیش‌پردازنده تأثیر می‌گذارند. .IP \fBCPATH\fR 4 .IX Item "CPATH" .PD 0 .IP \fBC_INCLUDE_PATH\fR 4 .IX Item "C_INCLUDE_PATH" .IP \fBCPLUS_INCLUDE_PATH\fR 4 .IX Item "CPLUS_INCLUDE_PATH" .IP \fBOBJC_INCLUDE_PATH\fR 4 .IX Item "OBJC_INCLUDE_PATH" .PD مقدار هر متغیر فهرستی از دایرکتوری‌های جداشده با یک نویسه ویژه است، بسیار شبیه به \fBPATH\fR، که در آن به دنبال فایل‌های سرآیند جستجو می‌شود. نویسه ویژه، \f(CW\*(C`PATH_SEPARATOR\*(C'\fR، به معماری مقصد وابسته است و در زمان ساخت GCC مشخص می‌شود. برای مقاصد مبتنی بر Microsoft Windows یک نقطه‌ویرگول (semicolon) است، و تقریباً برای تمام مقاصد دیگر یک دونقطه (colon) است. .Sp متغیر \&\fBCPATH\fR فهرستی از دایرکتوری‌ها را مشخص می‌کند که همانند تعیین با \fB\-I\fR جستجو شوند، اما بعد از هر مسیری که با گزینه‌های \fB\-I\fR در خط فرمان داده شده باشد. این متغیر محیطی صرف‌نظر از این‌که چه زبانی در حال پیش‌پردازش است استفاده می‌شود. .Sp بقیه متغیرهای محیطی تنها هنگام پیش‌پردازش زبان خاص مشخص‌شده اعمال می‌شوند. هر یک فهرستی از دایرکتوری‌ها را تعیین می‌کنند که همانند تعیین با \fB\-isystem\fR جستجو شوند، اما بعد از هر مسیری که با گزینه‌های \fB\-isystem\fR در خط فرمان مشخص شده است. .Sp در تمام این متغیرها، یک عنصر خالی به کامپایلر دستور می‌دهد که دایرکتوری کاری فعلی خود را جستجو کند. عناصر خالی می‌توانند در ابتدا یا انتهای یک مسیر ظاهر شوند. به عنوان مثال، اگر مقدار \&\fBCPATH\fR برابر \f(CW\*(C`:/special/include\*(C'\fR باشد، اثری مشابه با \fB\-I.\ \-I/special/include\fR دارد..IP \fBDEPENDENCIES_OUTPUT\fR 4 .IX Item "DEPENDENCIES_OUTPUT" اگر این متغیر مقداردهی شده باشد، مقدار آن نحوهٔ خروجی دادن وابستگی‌ها برای Make را بر اساس فایل‌های سرایند غیرسیستمیِ پردازش‌شده توسط کامپایلر مشخص می‌کند. فایل‌های سرایند سیستمی در خروجی وابستگی نادیده گرفته می‌شوند. .Sp مقدار \fBDEPENDENCIES_OUTPUT\fR می‌تواند صرفاً یک نام فایل باشد؛ در این حالت، قواعد Make در آن فایل نوشته می‌شوند و نام هدف از روی نام فایل منبع حدس زده می‌شود. همچنین مقدار می‌تواند به قالب \&\fIfile\fR\fB \fR\fItarget\fR باشد، که در این حالت قواعد در فایل \fIfile\fR با استفاده از \fItarget\fR به‌عنوان نام هدف نوشته می‌شوند. .Sp به عبارت دیگر، این متغیر محیطی معادلِ ترکیب گزینه‌های \fB\-MM\fR و \fB\-MF\fR، به همراه گزینهٔ اختیاری \fB\-MT\fR است. .IP \fBSUNPRO_DEPENDENCIES\fR 4 .IX Item "SUNPRO_DEPENDENCIES" این متغیر مشابه \fBDEPENDENCIES_OUTPUT\fR است (بالا را ببینید)، با این تفاوت که فایل‌های سرایند سیستمی نادیده گرفته نمی‌شوند، بنابراین به جای \fB\-MM\fR دلالت بر \&\fB\-M\fR دارد. با این حال، وابستگی به فایل ورودی اصلی حذف می‌شود. .IP \fBSOURCE_DATE_EPOCH\fR 4 .IX Item "SOURCE_DATE_EPOCH" اگر این متغیر مقداردهی شده باشد، مقدار آن یک برچسب زمان یونیکس (UNIX timestamp) را مشخص می‌کند تا به جای تاریخ و زمان کنونی در ماکروهای \f(CW\*(C`_\|_DATE_\|_\*(C'\fR و \f(CW\*(C`_\|_TIME_\|_\*(C'\fR استفاده شود، به‌طوری که برچسب‌های زمانی تعبیه‌شده بازتولیدپذیر شوند. .Sp مقدار \fBSOURCE_DATE_EPOCH\fR باید یک برچسب زمان یونیکس باشد، که به صورت تعداد ثانیه‌ها (بدون احتساب ثانیه‌های کبیسه) از تاریخ 01 Jan 1970 00:00:00 در قالب ASCII تعریف می‌شود؛ همسان با خروجی \&\f(CW\*(C`date +%s\*(C'\fR در GNU/Linux و سایر سیستم‌هایی که از پسوند \&\f(CW%s\fR در دستور \f(CW\*(C`date\*(C'\fR پشتیبانی می‌کنند. .Sp این مقدار باید یک برچسب زمان مشخص مانند آخرین زمان تغییر کد منبع یا بسته باشد و باید توسط فرایند ساخت تنظیم شود. .SH "گزارش باگ‌ها (BUGS)" .IX Header "BUGS" برای دریافت دستورالعمل‌های مربوط به گزارش باگ‌ها، پیوند زیر را ببینید: <\fBhttps://gitlab.archlinux.org/archlinux/packaging/packages/kgname/\-/issues\fR>. .SH "پاورقی‌ها (FOOTNOTES)" .IX Header "FOOTNOTES" .IP 1. 4 در برخی سیستم‌ها، \fBgcc \-shared\fR برای کارکرد صحیح سازنده‌ها (constructors) نیازمند ساخت کد جانشین (stub code) تکمیلی است. در سیستم‌های چندکتابخانه‌ای (multi\-libbed)، دستور \fBgcc \-shared\fR باید کتابخانه‌های پشتیبان مناسب را برای پیوند انتخاب کند. عدم ارائهٔ گزینه‌های صحیح ممکن است منجر به نقص‌های نامحسوس شود. ارائهٔ آن‌ها در مواردی که ضروری نیستند، بی‌ضرر است. گزینهٔ \fB\-shared\fR مانع از افزودن کد راه‌اندازی برای تغییر محیط ممیز شناور (floating\-point) می‌شود، بر خلاف آنچه با گزینه‌های \fB\-ffast\-math\fR، \&\fB\-Ofast\fR یا \fB\-funsafe\-math\-optimizations\fR در برخی مقصدها اعمال می‌شود. .SH "همچنین ببینید (SEE ALSO)" .IX Header "SEE ALSO" \&\fBgpl\fR\|(7)، \fBgfdl\fR\|(7)، \fBfsf\-funding\fR\|(7)، \&\fBcpp\fR\|(1)، \fBgcov\fR\|(1)، \fBas\fR\|(1)، \fBld\fR\|(1)، \fBgdb\fR\|(1) و مدخل‌های Info برای \fIgcc\fR، \fIcpp\fR، \fIas\fR، \&\fIld\fR، \fIbinutils\fR و \fIgdb\fR. .SH "نویسندگان (AUTHORS)" .IX Header "AUTHOR" برای مشاهدهٔ مشارکت‌کنندگان در GCC، مدخل Info مربوط به \fBgcc\fR یا <\fBhttps://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR> را ببینید. .SH "کپی‌رایت و تکثیر (COPYRIGHT)" .IX Header "COPYRIGHT" حق نشر (c) 1988\-2025 بنیاد نرم‌افزارهای آزاد (Free Software Foundation, Inc.) .PP اجازهٔ کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخهٔ 1.3 یا هر نسخهٔ بعدی منتشرشده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود؛ با بخش‌های تغییرناپذیر «GNU General Public License» و «Funding Free Software»، با متن‌های روی جلد (الف) (پایین را ببینید) و با متن‌های پشت جلد (ب) (پایین را ببینید). نسخه‌ای از این مجوز در صفحهٔ راهنمای \fBgfdl\fR\|(7) گنجانده شده است. .PP (الف) متن روی جلد FSF عبارت است از: .PP .Vb 1 \& A GNU Manual .Ve .PP (ب) متن پشت جلد FSF عبارت است از: .PP .Vb 3 \& You have freedom to copy and modify this GNU Manual, like GNU \& software. Copies published by the Free Software Foundation raise \& funds for GNU development. .Ve