.\" -*- 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 "خلاصه گزینه‌ها (Option Summary)" .IX Subsection "Option Summary" در اینجا خلاصه‌ای از تمام گزینه‌ها، دسته‌بندی‌شده بر پایه نوع آمده است. توضیحات مربوطه در بخش‌های پسین ارائه شده‌اند. .IP "\fIگزینه‌های کلی (Overall Options)\fR" 4 .IX Item "Overall Options" \&\fB\-c \-S \-E \-o\fR \fIfile\fR \&\fB\-dumpbase\fR \fIdumpbase\fR \fB\-dumpbase\-ext\fR \fIauxdropsuf\fR \&\fB\-dumpdir\fR \fIdumppfx\fR \fB\-x\fR \fIlanguage\fR \&\fB\-v \-### \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]] \fB\-\-target\-help \-\-version \&\-pass\-exit\-codes \-pipe \-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 (C Language Options)\fR" 4 .IX Item "C Language Options" \&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-aux\-info\fR \fIfilename\fR \&\fB\-fno\-asm \&\-fno\-builtin \-fno\-builtin\-\fR\fIfunction\fR \fB\-fcond\-mismatch \&\-ffreestanding \-fgimple \-fgnu\-tm \-fgnu89\-inline \-fhosted \&\-flax\-vector\-conversions \-fms\-extensions \&\-fpermitted\-flt\-eval\-methods=\fR\fIstandard\fR \&\fB\-fplan9\-extensions \-fsigned\-bitfields \-funsigned\-bitfields \&\-fsigned\-char \-funsigned\-char \-fstrict\-flex\-arrays[=\fR\fIn\fR\fB] \&\-fsso\-struct=\fR\fIendianness\fR .IP "\fIگزینه‌های زبان ++C (C++ Language Options)\fR" 4 .IX Item "C++ Language Options" \&\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 (Objective\-C and Objective\-C++ Language Options)\fR" 4 .IX Item "Objective-C and Objective-C++ Language Options" \&\fB\-fconstant\-string\-class=\fR\fIclass\-name\fR \&\fB\-fgnu\-runtime \-fnext\-runtime \&\-fno\-nil\-receivers \&\-fobjc\-abi\-version=\fR\fIn\fR \&\fB\-fobjc\-call\-cxx\-cdtors \&\-fobjc\-direct\-dispatch \&\-fobjc\-exceptions \&\-fobjc\-gc \&\-fobjc\-nilcheck \&\-fobjc\-std=objc1 \&\-fno\-local\-ivars \&\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] \&\fB\-freplace\-objc\-classes \&\-fzero\-link \&\-gen\-decls \&\-Wassign\-intercept \-Wno\-property\-assign\-default \&\-Wno\-protocol \-Wobjc\-root\-class \-Wselector \&\-Wstrict\-selector\-match \&\-Wundeclared\-selector\fR .IP "\fIگزینه‌های OpenMP و OpenACC (OpenMP and OpenACC Options)\fR" 4 .IX Item "OpenMP and OpenACC Options" \&\fB\-foffload=\fR\fIarg\fR \fB\-foffload\-options=\fR\fIarg\fR \&\fB\-fopenacc \-fopenacc\-dim=\fR\fIgeom\fR \&\fB\-fopenmp \-fopenmp\-simd \-fopenmp\-target\-simd\-clone\fR[\fB=\fR\fIdevice\-type\fR] .IP "\fIگزینه‌های قالب‌بندی پیام‌های تشخیصی (Diagnostic Message Formatting Options)\fR" 4 .IX Item "Diagnostic Message Formatting Options" \&\fB\-fmessage\-length=\fR\fIn\fR \&\fB\-fdiagnostics\-plain\-output \&\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery\-line\fR] \&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR] \&\fB\-fdiagnostics\-urls=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR] \&\fB\-fdiagnostics\-format=\fR[\fBtext\fR|\fBsarif\-stderr\fR|\fBsarif\-file\fR|\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گزینه‌های هشدار (Warning Options)\fR" 4 .IX Item "Warning Options" \&\fB\-fsyntax\-only \-fmax\-errors=\fR\fIn\fR \fB\-Wpedantic \&\-pedantic\-errors \-fpermissive \&\-w \-Wextra \-Wall \-Wabi=\fR\fIn\fR \&\fB\-Waddress \-Wno\-address\-of\-packed\-member \-Waggregate\-return \&\-Walloc\-size \-Walloc\-size\-larger\-than=\fR\fIbyte\-size\fR \fB\-Walloc\-zero \&\-Walloca \-Walloca\-larger\-than=\fR\fIbyte\-size\fR \&\fB\-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گزینه‌های تحلیل‌گر ایستا (Static Analyzer Options)\fR" 4 .IX Item "گزینه‌های تحلیل‌گر ایستا (Static Analyzer Options)" \&\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 (C and Objective\-C\-only Warning Options)\fR" 4 .IX Item "گزینه‌های هشدار مختص C و Objective-C (C and Objective-C-only Warning Options)" \&\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گزینه‌های اشکال‌زدایی (Debugging Options)\fR" 4 .IX Item "گزینه‌های اشکال‌زدایی (Debugging Options)" \&\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گزینه‌های بهینه‌سازی (Optimization Options)\fR" 4 .IX Item "گزینه‌های بهینه‌سازی (Optimization Options)" \&\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گزینه‌های ابزارگذاری برنامه\fR" 4 .IX Item "گزینه‌های ابزارگذاری برنامه" \&\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گزینه‌های پیش‌پردازنده\fR" 4 .IX Item "گزینه‌های پیش‌پردازنده" \&\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گزینه‌های اسِمبلر\fR" 4 .IX Item "گزینه‌های اسِمبلر" \&\fB\-Wa,\fR\fIoption\fR \fB\-Xassembler\fR \fIoption\fR .IP "\fIگزینه‌های پیونددهنده\fR" 4 .IX Item "گزینه‌های پیونددهنده" \&\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گزینه‌های دایرکتوری\fR" 4 .IX Item "گزینه‌های دایرکتوری" \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-I\- \&\-idirafter\fR \fIdir\fR \&\fB\-imacros\fR \fIfile\fR \fB\-imultilib\fR \fIdir\fR \&\fB\-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گزینه‌های تولید کد\fR" 4 .IX Item "گزینه‌های تولید کد" \&\fB\-fcall\-saved\-\fR\fIreg\fR \fB\-fcall\-used\-\fR\fIreg\fR \&\fB\-ffixed\-\fR\fIreg\fR \fB\-fexceptions \&\-fnon\-call\-exceptions \-fdelete\-dead\-exceptions \-funwind\-tables \&\-fasynchronous\-unwind\-tables \&\-fno\-gnu\-unique \&\-finhibit\-size\-directive \-fcommon \-fno\-ident \&\-fpcc\-struct\-return \-fpic \-fPIC \-fpie \-fPIE \-fno\-plt \&\-fno\-jump\-tables \-fno\-bit\-tests \&\-frecord\-gcc\-switches \&\-freg\-struct\-return \-fshort\-enums \-fshort\-wchar \&\-fverbose\-asm \-fpack\-struct[=\fR\fIn\fR\fB] \&\-fleading\-underscore \-ftls\-model=\fR\fImodel\fR \&\fB\-fstack\-reuse=\fR\fIreuse_level\fR \&\fB\-ftrampolines \-ftrampoline\-impl=\fR[\fBstack\fR|\fBheap\fR] \&\fB\-ftrapv \-fwrapv \&\-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گزینه‌های توسعه‌دهنده\fR" 4 .IX Item "گزینه‌های توسعه‌دهنده" \&\fB\-d\fR\fIletters\fR \fB\-dumpspecs \-dumpmachine \-dumpversion \&\-dumpfullversion \-fcallgraph\-info\fR[\fB=su,da\fR] \&\fB\-fchecking \-fchecking=\fR\fIn\fR \&\fB\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter\-value\-list\fR \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR \&\fB\-fdisable\-rtl\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR \&\fB\-fdisable\-tree\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR \&\fB\-fdump\-debug \-fdump\-earlydebug \&\-fdump\-noaddr \-fdump\-unnumbered \-fdump\-unnumbered\-links \&\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR] \&\fB\-fdump\-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گزینه‌های وابسته به ماشین\fR" 4 .IX Item "گزینه‌های وابسته به ماشین" \&\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\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" فایل سرآیند (header) زبان‌های C، ++C، Objective\-C یا ++Objective\-C که قرار است به یک سرآیند پیش‌کامپایل‌شده (پیش‌فرض) تبدیل شود، یا فایل سرآیند C یا ++C که قرار است به یک مشخصه Ada (از طریق سوئیچ \fB\-fdump\-ada\-spec\fR) تبدیل گردد. .IP \fIfile\fR\fB.cc\fR 4 .IX Item "file.cc" .PD 0 .IP \fIfile\fR\fB.cp\fR 4 .IX Item "file.cp" .IP \fIfile\fR\fB.cxx\fR 4 .IX Item "file.cxx" .IP \fIfile\fR\fB.cpp\fR 4 .IX Item "file.cpp" .IP \fIfile\fR\fB.CPP\fR 4 .IX Item "file.CPP" .IP \fIfile\fR\fB.c++\fR 4 .IX Item "file.c++" .IP \fIfile\fR\fB.C\fR 4 .IX Item "file.C" .PD کد منبع ++C که باید پیش‌پردازش شود. توجه داشته باشید که در \fB.cxx\fR، دو حرف پایانی باید دقیقاً حرف کوچک \fBx\fR باشند. به همین ترتیب، \&\fB.C\fR دقیقاً به حرف بزرگ C اشاره دارد. .IP \fIfile\fR\fB.mm\fR 4 .IX Item "file.mm" .PD 0 .IP \fIfile\fR\fB.M\fR 4 .IX Item "file.M" .PD کد منبع ++Objective\-C که باید پیش‌پردازش شود. .IP \fIfile\fR\fB.mii\fR 4 .IX Item "file.mii" کد منبع ++Objective\-C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.hh\fR 4 .IX Item "file.hh" .PD 0 .IP \fIfile\fR\fB.H\fR 4 .IX Item "file.H" .IP \fIfile\fR\fB.hp\fR 4 .IX Item "file.hp" .IP \fIfile\fR\fB.hxx\fR 4 .IX Item "file.hxx" .IP \fIfile\fR\fB.hpp\fR 4 .IX Item "file.hpp" .IP \fIfile\fR\fB.HPP\fR 4 .IX Item "file.HPP" .IP \fIfile\fR\fB.h++\fR 4 .IX Item "file.h++" .IP \fIfile\fR\fB.tcc\fR 4 .IX Item "file.tcc" .PD فایل سرآیند ++C که قرار است به یک سرآیند پیش‌کامپایل‌شده یا مشخصه Ada تبدیل شود. .IP \fIfile\fR\fB.f\fR 4 .IX Item "file.f" .PD 0 .IP \fIfile\fR\fB.for\fR 4 .IX Item "file.for" .IP \fIfile\fR\fB.ftn\fR 4 .IX Item "file.ftn" .IP \fIfile\fR\fB.fi\fR 4 .IX Item "file.fi" .PD کد منبع Fortran با قالب ثابت (fixed form) که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.F\fR 4 .IX Item "file.F" .PD 0 .IP \fIfile\fR\fB.FOR\fR 4 .IX Item "file.FOR" .IP \fIfile\fR\fB.fpp\fR 4 .IX Item "file.fpp" .IP \fIfile\fR\fB.FPP\fR 4 .IX Item "file.FPP" .IP \fIfile\fR\fB.FTN\fR 4 .IX Item "file.FTN" .PD کد منبع Fortran با قالب ثابت (fixed 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" .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 با قالب آزاد (free form) که باید پیش‌پردازش شود (با پیش‌پردازنده سنتی). .IP \fIfile\fR\fB.cob\fR 4 .IX Item "file.cob" .PD 0 .IP \fIfile\fR\fB.COB\fR 4 .IX Item "file.COB" .IP \fIfile\fR\fB.cbl\fR 4 .IX Item "file.cbl" .IP \fIfile\fR\fB.CBL\fR 4 .IX Item "file.CBL" .PD کد منبع COBOL. .IP \fIfile\fR\fB.go\fR 4 .IX Item "file.go" کد منبع Go. .IP \fIfile\fR\fB.d\fR 4 .IX Item "file.d" کد منبع D. .IP \fIfile\fR\fB.di\fR 4 .IX Item "file.di" فایل رابط (interface) زبان D. .IP \fIfile\fR\fB.dd\fR 4 .IX Item "file.dd" کد مستندسازی زبان Ddoc) D). .IP \fIfile\fR\fB.ads\fR 4 .IX Item "file.ads" فایل کد منبع Ada که شامل اعلان یک واحد کتابخانه‌ای است (اعلان یک بسته، زیربرنامه یا generic، و یا نمونه‌سازی یک generic)، و یا اعلان تغییر نام یک واحد کتابخانه‌ای (اعلان تغییر نام یک بسته، generic یا زیربرنامه). این فایل‌ها \fIspecs\fR (مشخصات) نیز نامیده می‌شوند. .IP \fIfile\fR\fB.adb\fR 4 .IX Item "file.adb" فایل کد منبع Ada شامل بدنه یک واحد کتابخانه‌ای (بدنه یک زیربرنامه یا بسته). این فایل‌ها \fIbodies\fR (بدنه‌ها) نیز نامیده می‌شوند. .IP \fIfile\fR\fB.s\fR 4 .IX Item "file.s" کد اسمبلر..IP \fIfile\fR\fB.S\fR 4 .IX Item "file.S" .PD 0 .IP \fIfile\fR\fB.sx\fR 4 .IX Item "file.sx" .PD کد اسمبلی که باید پیش‌پردازش شود. .IP \fIother\fR 4 .IX Item "other" یک فایل شیء که مستقیماً وارد مرحله پیوند می‌شود. با هر نام فایلی که پسوند شناخته‌شده‌ای نداشته باشد، به این صورت رفتار می‌شود. .PP می‌توانید زبان ورودی را به‌صورت صریح با گزینه \fB\-x\fR مشخص کنید: .IP "\fB\-x\fR \fIlanguage\fR" 4 .IX Item "-x language" زبان (\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" فایل‌های منبع را کامپایل یا اسمبل می‌کند، اما پیوند نمی‌زند. مرحله پیوند اصلاً انجام نمی‌شود. خروجی نهایی به شکل یک فایل شیء برای هر فایل منبع خواهد بود. .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 قرار می‌دهد. این موضوع برای هر نوع خروجی تولیدشده اعمال می‌شود، خواه یک فایل اجرایی باشد، یک فایل شیء، یک فایل اسمبلی، یا کد سی پیش‌پردازش‌شده. .Sp اگر \fB\-o\fR مشخص نشود، پیش‌فرض این است که فایل اجرایی در \&\fIa.out\fR، فایل شیء برای \fIsource.suffix\fR در \fIsource.o\fR، فایل اسمبلی آن در \fIsource.s\fR، فایل سرآیند پیش‌کامپایل‌شده در \&\fIsource.suffix.gch\fR، و تمام کدهای منبع سی پیش‌پردازش‌شده در خروجی استاندارد قرار گیرند. .Sp اگرچه \fB\-o\fR فقط خروجی اصلی را نام‌گذاری می‌کند، اما بر نام‌گذاری خروجی‌های کمکی و رونوشت نیز تأثیر می‌گذارد. مثال‌های زیر را ببینید. مگر در صورت بازنویسی، هر دو خروجی کمکی و رونوشت در همان دایرکتوری خروجی اصلی قرار می‌گیرند. در خروجی‌های کمکی، پسوند فایل ورودی با پسوند نوع فایل خروجی کمکی جایگزین می‌شود؛ در خروجی‌های رونوشت، پسوند فایل رونوشت به پسوند فایل ورودی اضافه می‌گردد. در دستورهای کامپایل، نام پایهٔ هر دو خروجی کمکی و رونوشت همان نام پایه خروجی اصلی است؛ در دستورهای کامپایل و پیوند، نام خروجی اصلی، منهای پسوند اجرایی، با نام فایل ورودی ترکیب می‌شود. اگر هر دو، بدون در نظر گرفتن پسوند، نام پایه یکسانی داشته باشند، حاصل ترکیب همان نام پایه خواهد بود، در غیر این صورت، با خط تیره به هم متصل می‌شوند. .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 در دستوری مشخص شود که چندین ورودی را کامپایل می‌کند، یا کامپایل کرده و سپس پیوند می‌دهد، ممکن است همان‌طور که در توضیحات \fB\-dumpdir\fR آمده است با \fIdumppfx\fR ترکیب شود. آنگاه، هر فایل ورودی با استفاده از \fIdumppfx\fR ترکیب‌شده کامپایل می‌شود و مقادیر پیش‌فرض برای \fIdumpbase\fR و \fIauxdropsuf\fR برای هر فایل ورودی محاسبه می‌گردد: .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpbase main ... .Ve .Sp فایل‌های \fIfoo.o\fR و \fIbar.o\fR را به عنوان خروجی‌های اصلی ایجاد کرده و با استفاده از \fIdumpbase\fR به عنوان پیشوند، از رونویسی خروجی‌های کمکی و dump جلوگیری می‌کند و خروجی‌های کمکی و dump را با نام‌های \fImain\-foo.*\fR و \fImain\-bar.*\fR می‌سازد. .Sp تعیین یک رشته‌ی خالی به عنوان \fIdumpbase\fR از تأثیر نام پایه‌ی خروجی بر نام‌گذاری خروجی‌های کمکی و dump در طول کامپایل جلوگیری کرده و مقادیر پیش‌فرض را محاسبه می‌کند: .Sp .Vb 1 \& gcc \-c foo.c \-o dir/foobar.o \-dumpbase " ... .Ve .Sp خروجی‌های کمکی را \fIdir/foo.*\fR و خروجی‌های dump را \fIdir/foo.c.*\fR نام‌گذاری خواهد کرد. توجه کنید که چگونه نام‌های پایه‌ی آن‌ها از نام ورودی گرفته شده، اما دایرکتوری همچنان به‌طور پیش‌فرض همان دایرکتوری خروجی است. .Sp رشته‌ی خالی dumpbase مانع از استفاده از نام پایه‌ی خروجی برای فایل‌های حاصل از مرحله‌ی پیوند نمی‌شود: .Sp .Vb 1 \& gcc foo.c bar.c \-o dir/foobar \-dumpbase " \-flto ... .Ve .Sp کامپایل فایل‌های منبع، خروجی‌های کمکی را به نام \fIdir/foo.*\fR و \fIdir/bar.*\fR، و خروجی‌های dump را به نام \fIdir/foo.c.*\fR و \fIdir/bar.c.*\fR نام‌گذاری می‌کند. کامپایل مجدد LTO در طول پیوند از \fIdir/foobar.\fR به عنوان پیشوند فایل‌های dump و کمکی استفاده خواهد کرد. .IP "\fB\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4 .IX Item "-dumpbase-ext auxdropsuf" هنگام شکل‌دهی نام فایل خروجی کمکی (اما نه خروجی 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 را به عنوان خروجی اصلی ایجاد کرده و خروجی‌های کمکی را با در نظر گرفتن مکان خروجی اصلی و حذف پسوند \fI.c\fR از \fIdumpbase\fR، در \fIdir/x\-foo.*\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 به همراه یک خط تیره به \fIdumppfx\fR صریح یا پیش‌فرض الحاق می‌شود (یا اگر حاوی مؤلفه‌های دایرکتوری باشد، جایگزین آن می‌شود)، به طوری که هر یک از کامپایل‌های متعدد، خروجی‌های کمکی و dump با نام‌های متفاوتی دریافت کنند. .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp خروجی‌های کمکی dump را در \fIdir/pfx\-main\-foo.*\fR و \fIdir/pfx\-main\-bar.*\fR ایجاد می‌کند، با الحاق \fIdumpbase\fR\- به \fIdumppfx\fR. خروجی‌های dump پسوند فایل ورودی را حفظ می‌کنند: به ترتیب \fIdir/pfx\-main\-foo.c.*\fR و \fIdir/pfx\-main\-bar.c.*\fR. این رفتار را با کامپایل تک‌ورودی مقایسه کنید: .Sp .Vb 1 \& gcc foo.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp که با اعمال \fB\-dumpbase\fR بر یک منبع واحد، یک \fIdumpbase\fR مجزا برای هر فایل ورودی محاسبه و الحاق نمی‌کند. خروجی‌های کمکی و dump آن در \fIdir/pfx\-main.*\fR قرار می‌گیرند. .Sp هنگام کامپایل و سپس پیوند از چندین فایل ورودی، \fIdumppfx\fR پیش‌فرض یا صریحاً مشخص‌شده نیز دستخوش تبدیل \fIdumpbase\fR\- فوق می‌شود (مانند کامپایل \fIfoo.c\fR و \fIbar.c\fR در بالا، اما بدون \fB\-c\fR). اگر نه \fB\-dumpdir\fR و نه \fB\-dumpbase\fR تعیین نشده باشند، نام پایه‌ی خروجی پیونددهنده منهای \fIauxdropsuf\fR (در صورت تعیین) یا پسوند فایل اجرایی (در غیر این صورت)، به همراه یک خط تیره به \fIdumppfx\fR پیش‌فرض الحاق می‌گردد. با این حال توجه داشته باشید که برخلاف موارد پیشین پیوند: .Sp .Vb 1 \& gcc foo.c bar.c \-dumpdir dir/pfx\- \-o main ... .Ve .Sp نام خروجی \fImain\fR را به \fIdumppfx\fR الحاق نمی‌کند، زیرا \fB\-dumpdir\fR به صراحت مشخص شده است. هدف این است که \fIdumppfx\fR صریحاً مشخص‌شده در صورت تمایل بتواند نام خروجی تعیین‌شده را به عنوان بخشی از پیشوند داشته باشد؛ فقط یک \fB\-dumpbase\fR صریح با آن ترکیب می‌شود تا از نادیده گرفته شدن یک گزینه‌ی معنادار جلوگیری به عمل آید. .Sp هنگام کامپایل و سپس پیوند از یک فایل ورودی واحد، نام پایه‌ی خروجی پیونددهنده تنها در صورتی مانند بالا به \fIdumppfx\fR پیش‌فرض الحاق می‌شود که نام پایه‌ی مشترکی با نام فایل ورودی واحد نداشته باشد. این حالت در موارد پیوند تک‌ورودی بالا بررسی شد، اما نه با یک \fB\-dumpdir\fR صریح که مانع این ترکیب می‌شود، حتی اگر توسط \fB\-save\-temps=*\fR بازنویسی شود: .Sp .Vb 1 \& gcc foo.c \-dumpdir alt/pfx\- \-o dir/main.exe \-save\-temps=cwd ... .Ve .Sp خروجی‌های کمکی به نام \fIfoo.*\fR، و خروجی‌های dump به نام \fIfoo.c.*\fR، در دایرکتوری کاری فعلی ساخته می‌شوند، همان‌طور که نهایتاً توسط \fB\-save\-temps=cwd\fR درخواست شده است. .Sp برای جمع‌بندی کلی به صورت یک جریان داده‌ی شهودی هرچند اندکی غیردقیق: نام خروجی اصلی به یک بخش دایرکتوری و یک بخش نام پایه تقسیم می‌شود؛ \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 بارگذاری می‌کند؛ فرض می‌شود که این فایل یک شیء مشترک (shared object) است که توسط کامپایلر با dlopen باز خواهد شد. نام پایهٔ فایل شیء مشترک برای شناسایی افزونه به منظور تجزیهٔ آرگومان‌ها استفاده می‌شود (گزینهٔ \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR در زیر را ببینید). هر افزونه باید توابع بازخوانی (callback) مشخص‌شده در Plugins API را تعریف کند. .IP \fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR 4 .IX Item "-fplugin-arg-name-key=value" یک آرگومان به نام \fIkey\fR با مقدار \fIvalue\fR برای افزونهٔ \fIname\fR تعریف می‌کند. .IP \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] 4 .IX Item "-fdump-ada-spec[-slim]" برای فایل‌های منبع و شمول (include) زبان‌های C و C++، مشخصات (specs) متناظر در 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، و گویش‌های گنو از این استانداردها مانند \&\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) غیرفعال نمی‌سازد. از سوی دیگر، هنگامی که گویش گنو از یک استاندارد مشخص می‌شود، تمام ویژگی‌های پشتیبانی‌شده توسط کامپایلر فعال می‌شوند، حتی اگر آن ویژگی‌ها معنای استاندارد پایه را تغییر دهند. در نتیجه، ممکن است برخی از برنامه‌هایی که انطباق دقیقی با استاندارد دارند رد شوند. استانداردِ مشخص‌شده توسط \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 تداخل دارند غیرفعال می‌شوند). معادل \fB\-ansi\fR برای کد C. .IP \fBiso9899:199409\fR 4 .IX Item "iso9899:199409" استاندارد ISO C90 طبق اصلاحیه شماره ۱ (amendment 1). .IP \fBc99\fR 4 .IX Item "c99" .PD 0 .IP \fBc9x\fR 4 .IX Item "c9x" .IP \fBiso9899:1999\fR 4 .IX Item "iso9899:1999" .IP \fBiso9899:199x\fR 4 .IX Item "iso9899:199x" .PD استاندارد ISO C99. این استاندارد اساساً به‌طور کامل پشتیبانی می‌شود، صرف‌نظر از اشکالات نرم‌افزاری و مسائل مربوط به ممیز شناور (عمدتاً اما نه کاملاً در رابطه با ویژگی‌های اختیاری C99 از Annexes 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 از Annexes F و G) و پیوست‌های اختیاری Annexes K (رابط‌های بررسی محدوده) و L (تحلیل‌پذیری). نام \fBc1x\fR منسوخ شده است. .IP \fBc17\fR 4 .IX Item "c17" .PD 0 .IP \fBc18\fR 4 .IX Item "c18" .IP \fBiso9899:2017\fR 4 .IX Item "iso9899:2017" .IP \fBiso9899:2018\fR 4 .IX Item "iso9899:2018" .PD استاندارد ISO C17، بازنگری سال ۲۰۱۷ استاندارد ISO C (منتشرشده در ۲۰۱۸). این استاندارد به جز اصلاح ایرادات (که تمام آن‌ها با \fB\-std=c11\fR نیز اعمال می‌شوند) و مقدار جدیدی برای \&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR، همان C11 است و بنابراین به همان میزان C11 پشتیبانی می‌شود. .IP \fBc23\fR 4 .IX Item "c23" .PD 0 .IP \fBc2x\fR 4 .IX Item "c2x" .IP \fBiso9899:2024\fR 4 .IX Item "iso9899:2024" .PD استاندارد ISO C23، بازنگری سال ۲۰۲۳ استاندارد ISO C (منتشرشده در ۲۰۲۴). نام \fBc2x\fR منسوخ شده است. .IP \fBc2y\fR 4 .IX Item "c2y" نسخه بعدی استاندارد ISO C، که همچنان در حال توسعه است. پشتیبانی از این نسخه آزمایشی و ناکامل است. .IP \fBgnu90\fR 4 .IX Item "gnu90" .PD 0 .IP \fBgnu89\fR 4 .IX Item "gnu89" .PD گویش گنو از 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++ سال ۱۹۹۸ به همراه اصلاحیه فنی ۲۰۰۳ و برخی گزارش‌های رفع نقص اضافی. معادل \fB\-ansi\fR برای کد C++. .IP \fBgnu++98\fR 4 .IX Item "gnu++98" .PD 0 .IP \fBgnu++03\fR 4 .IX Item "gnu++03" .PD گویش گنو از \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) را برای تمامی توابع اعلان‌شده و/یا تعریف‌شده در یک واحد ترجمه (translation unit)، از جمله توابع موجود در فایل‌های سرآیند (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 را به‌عنوان کلیدواژه شناسایی نمی‌کند، تا کد بتواند از این کلمات به‌عنوان شناسه (identifier) استفاده کند. می‌توانید به‌جای آنها از کلیدواژه‌های \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 functions) که پیشوند \&\fB_\|_builtin_\fR ندارند را شناسایی نمی‌کند. .Sp کامپایلر GCC معمولاً کدهای ویژه‌ای تولید می‌کند تا با برخی توابع توکار با کارایی بالاتری رفتار کند؛ برای نمونه، فراخوانی‌های تابع \f(CW\*(C`alloca\*(C'\fR ممکن است به تک‌دستوراتی تبدیل شوند که مستقیماً پشته (stack) را تنظیم می‌کنند، و فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR ممکن است به حلقه‌های رونوشت درون‌خطی تبدیل شوند. کد حاصل اغلب هم کوچک‌تر و هم سریع‌تر است، اما از آنجا که این فراخوانی‌ها دیگر به‌صورت فراخوانی تابع ظاهر نمی‌شوند، نمی‌توانید روی آنها نقطهٔ توقف (breakpoint) تنظیم کنید، و همچنین نمی‌توانید رفتار توابع را با پیوند به کتابخانه‌ای دیگر تغییر دهید. علاوه بر این، هنگامی که یک تابع به‌عنوان تابع توکار شناخته می‌شود، GCC ممکن است از اطلاعات آن تابع برای هشدار دادن دربارهٔ اشکالات مربوط به فراخوانی‌های آن استفاده کند، یا کدی کارآمدتر تولید نماید، حتی اگر کد نهایی همچنان حاوی فراخوانی‌های آن تابع باشد. برای نمونه، در صورت استفاده از \fB\-Wformat\fR برای فراخوانی‌های نامناسب به \&\f(CW\*(C`printf\*(C'\fR زمانی که \f(CW\*(C`printf\*(C'\fR توکار است و مشخص است که \&\f(CW\*(C`strlen\*(C'\fR حافظهٔ سراسری را تغییر نمی‌دهد، هشدار صادر می‌شود. .Sp با گزینهٔ \fB\-fno\-builtin\-\fR\fIfunction\fR فقط تابع توکار \fIfunction\fR غیرفعال می‌شود. نام \fIfunction\fR نباید با \fB_\|_builtin_\fR آغاز شود. اگر تابعی نام برده شود که در این نگارش از GCC توکار نیست، این گزینه نادیده گرفته می‌شود. گزینهٔ متناظر \&\fB\-fbuiltin\-\fR\fIfunction\fR وجود ندارد؛ چنانچه مایلید هنگام استفاده از \&\fB\-fno\-builtin\fR یا \&\fB\-ffreestanding\fR توابع توکار را به‌صورت گزینشی فعال کنید، می‌توانید ماکروهایی نظیر این تعریف نمایید: .Sp .Vb 2 \& #define abs(n) _\|_builtin_abs ((n)) \& #define strcpy(d, s) _\|_builtin_strcpy ((d), (s)) .Ve .IP \fB\-fcond\-mismatch\fR 4 .IX Item "-fcond-mismatch" به عبارت‌های شرطی با نوع‌های ناهمخوان در آرگومان‌های دوم و سوم اجازه می‌دهد. مقدار چنین عبارتی void خواهد بود. این گزینه برای C++‎ پشتیبانی نمی‌شود. .IP \fB\-ffreestanding\fR 4 .IX Item "-ffreestanding" تصریح می‌کند که کامپایل یک محیط مستقل (freestanding) را هدف قرار داده است. این گزینه متضمن \fB\-fno\-builtin\fR است. محیط مستقل محیطی است که ممکن است کتابخانهٔ استاندارد در آن وجود نداشته باشد، و آغاز اجرای برنامه لزوماً از \f(CW\*(C`main\*(C'\fR نباشد. بارزترین نمونه، هستهٔ سیستم‌عامل است. این گزینه معادل \fB\-fno\-hosted\fR است. .IP \fB\-fgimple\fR 4 .IX Item "-fgimple" تجزیهٔ تعاریف توابع نشانه‌گذاری‌شده با \f(CW\*(C`_\|_GIMPLE\*(C'\fR را فعال می‌کند. این یک قابلیت آزمایشی است که امکان آزمون واحد (unit test) برای مراحل و گذرهای GIMPLE را فراهم می‌سازد. .IP \fB\-fgnu\-tm\fR 4 .IX Item "-fgnu-tm" هنگامی که گزینهٔ \fB\-fgnu\-tm\fR مشخص شود، کامپایلر برای گونهٔ لینوکسی از سند مشخصات فعلی ABI حافظه تراکنشی اینتل (بازنگری ۱.۱، ۶ مه ۲۰۰۹) کد تولید می‌کند. این یک قابلیت آزمایشی است که ممکن است رابط آن همگام با تغییر مشخصات رسمی، در نگارش‌های آیندهٔ GCC تغییر کند. لطفاً توجه داشته باشید که این قابلیت در همهٔ معماری‌ها پشتیبانی نمی‌شود. .Sp برای اطلاعات بیشتر در مورد پشتیبانی GCC از حافظهٔ تراکنشی، .Sp توجه داشته باشید که قابلیت حافظهٔ تراکنشی همراه با استثناهای غیرفراخوانی (\fB\-fnon\-call\-exceptions\fR) پشتیبانی نمی‌شود..IP \fB\-fgnu89\-inline\fR 4 .IX Item "-fgnu89-inline" گزینهٔ \fB\-fgnu89\-inline\fR به GCC اعلام می‌کند که هنگام قرار داشتن در حالت C99، از معناشناسی سنتی GNU برای توابع \f(CW\*(C`inline\*(C'\fR استفاده کند. .Sp استفاده از این گزینه تقریباً معادل افزودن صفت تابع \f(CW\*(C`gnu_inline\*(C'\fR به تمام توابع درون‌خطی است. .Sp گزینهٔ \fB\-fno\-gnu89\-inline\fR صراحتاً به GCC می‌گوید که در حالت C99 یا gnu99 از معناشناسی C99 برای \f(CW\*(C`inline\*(C'\fR استفاده کند (یعنی رفتار پیش‌فرض را تعیین می‌کند). این گزینه در حالت‌های \fB\-std=c90\fR یا \&\fB\-std=gnu90\fR پشتیبانی نمی‌شود. .Sp ماکروهای پیش‌پردازندهٔ \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR و \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR می‌توانند برای بررسی اینکه کدام معناشناسی برای توابع \f(CW\*(C`inline\*(C'\fR فعال است، مورد استفاده قرار گیرند. .IP \fB\-fhosted\fR 4 .IX Item "-fhosted" تصریح می‌کند که کامپایل یک محیط میزبانی‌شده (hosted) را هدف قرار می‌دهد. این گزینه حامل \&\fB\-fbuiltin\fR است. یک محیط میزبانی‌شده محیطی است که کل کتابخانهٔ استاندارد در آن در دسترس است و در آن نوع بازگشتی \f(CW\*(C`main\*(C'\fR از نوع \f(CW\*(C`int\*(C'\fR می‌باشد. نمونه‌های آن تقریباً همه‌چیز به جز هستهٔ سیستم‌عامل هستند. این گزینه معادل \fB\-fno\-freestanding\fR است. .IP \fB\-flax\-vector\-conversions\fR 4 .IX Item "-flax-vector-conversions" تبدیل‌های ضمنی میان بردارهایی با تعداد عناصر متفاوت و/یا انواع عناصر ناسازگار را مجاز می‌کند. این گزینه نباید برای کدهای جدید استفاده شود. .IP \fB\-fms\-extensions\fR 4 .IX Item "-fms-extensions" برخی ساختارهای غیراستاندارد به‌کاررفته در فایل‌های سرایند Microsoft را می‌پذیرد. .Sp در کد ++C، این گزینه اجازه می‌دهد نام اعضای ساختارها مشابه اعلان‌های قبلی نوع‌ها باشد. .Sp .Vb 4 \& typedef int UOW; \& struct ABC { \& UOW UOW; \& }; .Ve .Sp برخی موارد فیلدهای بی‌نام در ساختارها و اجتماع‌ها تنها با این گزینه پذیرفته می‌شوند. .Sp توجه داشته باشید که این گزینه برای تمام هدف‌ها به جز هدف‌های x86 که از ms\-abi استفاده می‌کنند، غیرفعال است. .IP \fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR 4 .IX Item "-fpermitted-flt-eval-methods=style" استاندارد ISO/IEC TS 18661\-3 مقادیر مجاز جدیدی برای \&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR تعریف می‌کند که نشان می‌دهند عملیات و مقادیر ثابتی که دارای یک نوع معناییِ تعویض‌پذیر یا قالب گسترش‌یافته هستند، باید با دقت و دامنهٔ آن نوع ارزیابی شوند. این مقادیر جدید یک ابرمجموعه از مقادیر مجاز تحت C99/C11 هستند، که معنای سایر مقادیر مثبت \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR را مشخص نمی‌کند. به همین دلیل، کدهایی که منطبق بر C11 نوشته شده‌اند ممکن است بدون پیش‌بینی احتمال وجود این مقادیر جدید نوشته شده باشند. .Sp گزینهٔ \&\fB\-fpermitted\-flt\-eval\-methods\fR مشخص می‌کند که آیا کامپایلر باید تنها مقادیر \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR مشخص‌شده در C99/C11 را بپذیرد، یا مجموعهٔ گسترش‌یافتهٔ مقادیر مشخص‌شده در ISO/IEC TS 18661\-3 را. .Sp مقدار \&\fIstyle\fR بسته به نیاز یکی از دو مقدار \f(CW\*(C`c11\*(C'\fR یا \f(CW\*(C`ts\-18661\-3\*(C'\fR است. .Sp رفتار پیش‌فرض هنگام قرار داشتن در حالت منطبق با استاندارد (\fB\-std=c11\fR یا موارد مشابه)، \fB\-fpermitted\-flt\-eval\-methods=c11\fR است. رفتار پیش‌فرض در گویش GNU (\fB\-std=gnu11\fR یا موارد مشابه) برابر با \&\fB\-fpermitted\-flt\-eval\-methods=ts\-18661\-3\fR می‌باشد. .Sp گزینه‌های \fB\-fdeps\-*\fR برای استخراج اطلاعات ساختاریافتهٔ وابستگی از یک مبدأ به‌کار می‌روند. این کار شامل تعیین منابع ارائه‌شده توسط دیگر فایل‌های مبدأ که برای کامپایل این مبدأ لازم است، و همچنین منابع ارائه‌شده توسط خود این مبدأ می‌باشد. این اطلاعات می‌تواند برای افزودن وابستگی‌های لازم بین قواعد کامپایل مبدأهای وابسته بر پایهٔ محتوای آن‌ها استفاده شود، بدون اینکه نیازی به بازتاب این اطلاعات در ابزارهای ساخت باشد. .IP \fB\-fdeps\-file=\fR\fIfile\fR 4 .IX Item "-fdeps-file=file" محل نوشتن اطلاعات ساختاریافتهٔ وابستگی. .IP \fB\-fdeps\-format=\fR\fIformat\fR 4 .IX Item "-fdeps-format=format" قالبی که باید برای اطلاعات ساختاریافتهٔ وابستگی استفاده شود. در حال حاضر \fBp1689r5\fR تنها قالب پشتیبانی‌شده است. توجه داشته باشید که وقتی این آرگومان مشخص می‌شود، خروجی \fB\-MF\fR از برخی اطلاعات (به‌ویژه ماژول‌های ++C) پاک‌سازی می‌شود تا از نحو توسعه‌یافتهٔ makefile که توسط بیشتر ابزارها درک نمی‌شود، استفاده نکند. .IP \fB\-fdeps\-target=\fR\fIfile\fR 4 .IX Item "-fdeps-target=file" مشابه با \fB\-MT\fR اما برای اطلاعات ساختاریافتهٔ وابستگی. این گزینه هدفی را مشخص می‌کند که در نهایت به هرگونه منبعِ مورد نیاز محتاج است و هرگونه منبع استخراج‌شده از مبدأ را که ممکن است مورد نیاز سایر مبدأها باشد، ارائه می‌دهد. .IP \fB\-fplan9\-extensions\fR 4 .IX Item "-fplan9-extensions" برخی ساختارهای غیراستاندارد به‌کاررفته در کدهای Plan 9 را می‌پذیرد. .Sp این گزینه \fB\-fms\-extensions\fR را فعال می‌کند، اجازه می‌دهد اشاره‌گرها به ساختارهایی با فیلدهای بی‌نام به توابعی فرستاده شوند که انتظار اشاره‌گر به عناصری از نوع فیلد مذکور را دارند، و ارجاع به فیلدهای بی‌نامِ اعلان‌شده با استفاده از typedef را ممکن می‌سازد. این گزینه تنها برای C پشتیبانی می‌شود و نه ++C. .IP \fB\-fsigned\-bitfields\fR 4 .IX Item "-fsigned-bitfields" .PD 0 .IP \fB\-funsigned\-bitfields\fR 4 .IX Item "-funsigned-bitfields" .IP \fB\-fno\-signed\-bitfields\fR 4 .IX Item "-fno-signed-bitfields" .IP \fB\-fno\-unsigned\-bitfields\fR 4 .IX Item "-fno-unsigned-bitfields" .PD این گزینه‌ها تعیین می‌کنند که آیا یک میدان بیتی (bit-field) علامت‌دار است یا بدون علامت، در شرایطی که در اعلان آن از هیچ‌کدام از \f(CW\*(C`signed\*(C'\fR یا \f(CW\*(C`unsigned\*(C'\fR استفاده نشده باشد. به‌طور پیش‌فرض، چنین میدان بیتی علامت‌دار است، زیرا این حالت سازگارتر است: انواع داده‌های صحیح پایه نظیر \f(CW\*(C`int\*(C'\fR از نوع علامت‌دار هستند. .IP \fB\-fsigned\-char\fR 4 .IX Item "-fsigned-char" نوع \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 کدی تولید کند که از نظر دودویی با کد تولیدشده بدون این گزینه سازگار نیست..SS "گزینه‌های کنترل گویش ++C (Options Controlling C++ Dialect)" .IX Subsection "Options Controlling C++ Dialect" این بخش گزینه‌های خط فرمانی را شرح می‌دهد که تنها برای برنامه‌های ++C معنی‌دار هستند. همچنین می‌توانید از بیشتر گزینه‌های کامپایلر GNU صرف‌نظر از این‌که برنامه‌تان به چه زبانی نوشته شده است، استفاده کنید. برای نمونه، می‌توانید یک فایل \fIfirstClass.C\fR را بدین‌صورت کامپایل کنید: .PP .Vb 1 \& g++ \-g \-fstrict\-enums \-O \-c firstClass.C .Ve .PP در این مثال، تنها \fB\-fstrict\-enums\fR گزینه‌ای است که فقط مختص برنامه‌های ++C در نظر گرفته شده است؛ می‌توانید از سایر گزینه‌ها برای هر زبانی که توسط GCC پشتیبانی می‌شود استفاده کنید. .PP برخی گزینه‌ها برای کامپایل برنامه‌های C، مانند \fB\-std\fR، برای برنامه‌های ++C نیز مرتبط و کاربردی هستند. .PP در اینجا فهرستی از گزینه‌هایی آمده است که \fIتنها\fR برای کامپایل برنامه‌های ++C کاربرد دارند: .IP \fB\-fabi\-version=\fR\fIn\fR 4 .IX Item "-fabi-version=n" استفاده از نسخهٔ \fIn\fR از C++ ABI. مقدار پیش‌فرض، نسخهٔ 0 است. .Sp نسخهٔ 0 به نسخه‌ای اشاره دارد که بیشترین سازگاری را با مشخصات C++ ABI دارد. از این رو، ABI به‌دست‌آمده با استفاده از نسخهٔ 0 در نسخه‌های مختلف G++ همگام با رفع اشکالات ABI تغییر خواهد کرد. .Sp نسخهٔ 1 نسخه‌ای از C++ ABI است که نخستین‌بار در G++ 3.2 ظاهر شد. .Sp نسخهٔ 2 نسخه‌ای از C++ ABI است که نخستین‌بار در G++ 3.4 معرفی شد و تا G++ 4.9 حالت پیش‌فرض بود. .Sp نسخهٔ 3 خطایی را در درهم‌سازی نام (mangling) یک نشانی ثابت به‌عنوان یک آرگومان الگو (template argument) تصحیح می‌کند. .Sp نسخهٔ 4، که نخستین‌بار در G++ 4.5 ارائه شد، یک mangling استاندارد را برای انواع برداری (vector types) پیاده‌سازی می‌کند. .Sp نسخهٔ 5، که نخستین‌بار در G++ 4.6 ظاهر شد، mangling مشخصه‌های const/volatile را روی انواع اشاره‌گر به تابع، decltype یک اعلان ساده (plain decl)، و استفاده از یک پارامتر تابع در اعلان پارامتری دیگر را تصحیح می‌کند. .Sp نسخهٔ 6، که نخستین‌بار در G++ 4.7 ارائه شد، رفتار ارتقای (promotion) نوع‌های شمارشی محدوده‌دار (scoped enums) در C++11 و mangling بسته‌های آرگومان الگو (template argument packs)، عملگرهای const/static_cast، پیشوندهای ++ و \-\-، و تابعی با حوزهٔ کلاس که به‌عنوان آرگومان الگو استفاده شده است را تصحیح می‌کند. .Sp نسخهٔ 7، که نخستین‌بار در G++ 4.8 ظاهر شد، با nullptr_t به‌عنوان یک نوع توکار رفتار می‌کند و mangling توابع لامبدا را در حوزهٔ آرگومان پیش‌فرض تصحیح می‌کند. .Sp نسخهٔ 8، که نخستین‌بار در G++ 4.9 ارائه شد، رفتار جایگزینی (substitution) انواع توابع دارای function\-cv\-qualifiers را تصحیح می‌کند. .Sp نسخهٔ 9، که نخستین‌بار در G++ 5.2 معرفی شد، تراز (alignment) را برای \&\f(CW\*(C`nullptr_t\*(C'\fR تصحیح می‌کند. .Sp نسخهٔ 10، که نخستین‌بار در G++ 6.1 ظاهر شد، mangling مشخصه‌های تأثیرگذار بر هویت نوع، مانند مشخصه‌های قرارداد فراخوانی ia32 (مانند \fBstdcall\fR) را اضافه می‌کند. .Sp نسخهٔ 11، که نخستین‌بار در G++ 7 معرفی شد، mangling عبارت‌های ...sizeof و نام‌های عملگرها را تصحیح می‌کند. برای موجودیت‌های چندگانه با نام یکسان درون یک تابع که در حوزه‌های مختلفی اعلان شده‌اند، mangling اکنون از رخداد دوازدهم به بعد تغییر می‌کند. این گزینه همچنین \fB\-fnew\-inheriting\-ctors\fR را نیز در بر دارد. .Sp نسخهٔ 12، که نخستین‌بار در G++ 8 ظاهر شد، قراردادهای فراخوانی (calling conventions) را برای کلاس‌های تهی روی معماری مقصد x86_64 و برای کلاس‌هایی که فقط سازنده‌های کپی/انتقال حذف‌شده دارند، تصحیح می‌کند. این نسخه به‌طور ناخواسته قرارداد فراخوانی را برای کلاس‌های دارای یک سازندهٔ کپی حذف‌شده و یک سازندهٔ انتقال ساده (trivial) تغییر می‌دهد. .Sp نسخهٔ 13، که نخستین‌بار در G++ 8.2 ارائه شد، تغییر ناخواسته در نسخهٔ 12 را رفع می‌کند. .Sp نسخهٔ 14، که نخستین‌بار در G++ 10 معرفی شد، mangling عبارت nullptr را تصحیح می‌کند. .Sp نسخهٔ 15، که نخستین‌بار در G++ 10.3 ظاهر شد، پسرفت (regression) برچسب ABI در G++ 10 را تصحیح می‌کند. .Sp نسخهٔ 16، که نخستین‌بار در G++ 11 ارائه شد، mangling مربوط به \&\f(CW\*(C`_\|_alignof_\|_\*(C'\fR را متمایز از \f(CW\*(C`alignof\*(C'\fR می‌کند و mangling نام عملگرهای وابسته را نیز تغییر می‌دهد. .Sp نسخهٔ 17، که نخستین‌بار در G++ 12 معرفی شد، ساختار چیدمان (layout) کلاس‌هایی را که از کلاس‌های تجمعی (aggregate classes) با مقداردهی اولیه‌سازهای پیش‌فرض عضو در C++14 به بالا ارث‌بری می‌کنند، اصلاح می‌کند. .Sp نسخهٔ 18، که نخستین‌بار در G++ 13 ظاهر شد، mangling لامبداهایی را که زمینهٔ (context) اضافی دارند، تصحیح می‌کند. .Sp نسخهٔ 19، که نخستین‌بار در G++ 14 معرفی شد، mangling اتصالات ساخت‌یافته (structured bindings) را جهت گنجاندن برچسب‌های ABI تصحیح می‌کند. .Sp نسخهٔ 20، که نخستین‌بار در G++ 15 ارائه شد، mangling لامبداها را در مقداردهی اولیه‌سازهای اعضای داده‌ای ایستا تصحیح می‌کند. .Sp همچنین \fB\-Wabi\fR را ببینید. .IP \fB\-fabi\-compat\-version=\fR\fIn\fR 4 .IX Item "-fabi-compat-version=n" در مقصدهایی که از نام‌های مستعار قوی (strong aliases) پشتیبانی می‌کنند، G++ تغییرات mangling را با ایجاد یک نام مستعار با نام mangled درست در هنگام تعریف یک نماد با نام mangled نادرست دور می‌زند. این گزینه مشخص می‌کند که از کدام نسخهٔ 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، تغییراتی در انواع مقادیر لفظی (literals) رشته‌ای و نویسه‌ای UTF\-8، امضاهای جدید برای لیترال‌های تعریف‌شده توسط کاربر، به‌روزرسانی‌های مرتبط در کتابخانهٔ استاندارد، و ماکروهای سنجش ویژگی جدید \&\f(CW\*(C`_\|_cpp_char8_t\*(C'\fR و \f(CW\*(C`_\|_cpp_lib_char8_t\*(C'\fR است. .Sp این گزینه به توابع اجازه می‌دهد تا برای رشته‌های معمولی و UTF\-8 سربارگذاری (overload) شوند: .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 دارای یک مشخصات استثنای (exception specification) غیرخالی است، اتمام حافظه با پرتاب \f(CW\*(C`std::bad_alloc\*(C'\fR اعلام می‌شود. همچنین ببینید: \&\fBnew (nothrow)\fR. .IP \fB\-fconcepts\fR 4 .IX Item "-fconcepts" پشتیبانی از ویژگی مفاهیم (Concepts) در C++ را برای مقید کردن آرگومان‌های قالب فعال می‌کند. با \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" پشتیبانی آزمایشی از ویژگی قراردادهای C++ (Contracts) را فعال می‌کند، همان‌گونه که برای مدتی کوتاه به پیش‌نویس کاری 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]" کنترل می‌کند که آیا هیچ قراردادی اصلاً دارای معناشناسی (semantics) باشد یا خیر. پیش‌فرض \fBon\fR است. .IP \fB\-fcontract\-assumption\-mode=[on|off]\fR 4 .IX Item "-fcontract-assumption-mode=[on|off]" [N4820] کنترل می‌کند که آیا قراردادهای با سطح \fBaxiom\fR باید دارای معناشناسی assume باشند یا خیر. پیش‌فرض \fBon\fR است. .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. پیش‌فرض \fBoff\fR است. .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]" کنترل می‌کند که آیا افزودن قراردادها به یک تابع پس از نخستین اعلان آن رد شود یا خیر. پیش‌فرض \fBoff\fR است. .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" فعال‌سازی پشتیبانی از افزونهٔ کوروتین‌های C++ (آزمایشی). .IP \fB\-fdiagnostics\-all\-candidates\fR 4 .IX Item "-fdiagnostics-all-candidates" به بخش فرانت‌اند C++ اجازه می‌دهد هنگام شکست در تفکیک اضافه بار (overload resolution)، تمام گزینه‌های نامزد را ثبت کند، از جمله زمانی که یک تابع حذف‌شده (deleted) انتخاب شده باشد. .IP \fB\-fno\-elide\-constructors\fR 4 .IX Item "-fno-elide-constructors" استاندارد C++ به پیاده‌سازی اجازه می‌دهد از ایجاد شیء موقتی که تنها برای مقداردهی اولیه شیء دیگری از همان نوع استفاده می‌شود، صرف‌نظر کند. مشخص کردن این گزینه آن بهینه‌سازی را غیرفعال کرده و G++ را وادار می‌کند در تمام موارد سازندهٔ کپی (copy constructor) را فراخوانی کند. این گزینه همچنین باعث می‌شود G++ توابع عضو بدیهی (trivial) را که در غیر این صورت به صورت درون‌خطی (inline) بسط می‌یافتند، فراخوانی کند. .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، مفید باشد. این مورد به کد کاربر اجازهٔ پرتاب استثناها در مغایرت با مشخصات استثنا را نمی‌دهد؛ کامپایلر همچنان بر اساس مشخصات بهینه‌سازی می‌کند، بنابراین پرتاب یک استثنای غیرمنتظره منجر به رفتار تعریف‌نشده در زمان اجرا خواهد شد. .IP \fB\-fextern\-tls\-init\fR 4 .IX Item "-fextern-tls-init" .PD 0 .IP \fB\-fno\-extern\-tls\-init\fR 4 .IX Item "-fno-extern-tls-init" .PD استانداردهای C++11 و OpenMP به متغیرهای \f(CW\*(C`thread_local\*(C'\fR و \&\f(CW\*(C`threadprivate\*(C'\fR اجازه می‌دهند مقداردهی اولیه پویا (در زمان اجرا) داشته باشند. برای پشتیبانی از این امر، هرگونه استفاده از چنین متغیری از طریق یک تابع پوششی (wrapper) انجام می‌شود که هرگونه مقداردهی اولیه لازم را انجام می‌دهد. هنگامی که استفاده و تعریف متغیر در یک واحد ترجمه (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) کند. بر خلاف درون‌خطی‌سازی، این بدین معنی است که هیچ اطلاعات اشکال‌زدایی برای چنین فراخوانی‌هایی تولید نخواهد شد. از آنجا که این توابع به‌ندرت برای اشکال‌زدایی اهمیت دارند، این پرچم به صورت پیش‌فرض فعال است مگر اینکه \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" هرگز برای الگوهای غیردرون‌خطی که به صورت ضمنی نمونه‌سازی (instantiate) شده‌اند (یعنی بر اثر استفاده)، کد تولید نمی‌کند؛ تنها برای نمونه‌سازی‌های صریح کد تولید می‌کند. اگر از این گزینه استفاده می‌کنید، باید مراقب باشید که کد خود را طوری ساختاردهی کنید که شامل تمام نمونه‌سازی‌های صریح لازم باشد تا از مواجهه با نمادهای تعریف‌نشده در زمان پیوند جلوگیری شود. .IP \fB\-fno\-implicit\-inline\-templates\fR 4 .IX Item "-fno-implicit-inline-templates" برای نمونه‌سازی‌های ضمنی الگوهای درون‌خطی نیز کد تولید نمی‌کند. حالت پیش‌فرض این است که با موارد درون‌خطی به گونه‌ای متفاوت رفتار شود تا کامپایل با و بدون بهینه‌سازی به مجموعه یکسانی از نمونه‌سازی‌های صریح نیاز داشته باشد. .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 unit) قابل وارد کردن. .IP \fB\-fmodule\-implicit\-inline\fR 4 .IX Item "-fmodule-implicit-inline" توابع عضوی که درون تعریف کلاس خود تعریف شده‌اند، برای کد ماژولار به صورت ضمنی inline نیستند. این رفتار به دلایل موجهی با رفتار سنتی C++ متفاوت است. با این حال، ممکن است هنگام انتقال کد باعث بروز مشکلاتی شود. این گزینه تعاریف این‌گونه توابع را به صورت ضمنی inline می‌کند. البته این کار باعث ناسازگاری ABI می‌شود، بنابراین باید آن را در همه‌جا یا هیچ‌جا استفاده کنید. (چنین تعاریفی در خارج از یک ماژول نام‌گذاری‌شده، در هر صورت به صورت ضمنی inline باقی می‌مانند.) .IP \fB\-fno\-module\-lazy\fR 4 .IX Item "-fno-module-lazy" غیرفعال‌سازی وارد کردن تنبل ماژول و ایجاد نگاشت‌گر ماژول (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) را تولید می‌کند و از تولید هرگونه فایل شیء جلوگیری می‌نماید. .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) را نسبت به تابعی بدون مشخصات استثنا کاهش دهد یا حذف کند. اگر تابع متغیرهای محلی از نوع‌هایی با تخریب‌کننده‌های (destructors) غیربدیهی (non\-trivial) داشته باشد، این مشخصات استثنا در واقع تابع را کوچک‌تر می‌کند، چرا که پاک‌سازی‌های 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" تمدید طول عمر اشیاء موقت در حلقه‌های 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) غیرفعال می‌کند. اگر از این بخش‌های زبان استفاده نمی‌کنید، می‌توانید با استفاده از این پرچم مقداری فضا ذخیره کنید. توجه داشته باشید که مدیریت استثنا (exception handling) از همین اطلاعات استفاده می‌کند، اما 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 کامپایل شده است، ممکن است پیوند (link) برنامه‌ها با شکست مواجه شود. .IP \fB\-fsized\-deallocation\fR 4 .IX Item "-fsized-deallocation" اعلان‌های عمومی توکارِ .Sp .Vb 2 \& void operator delete (void *, std::size_t) noexcept; \& void operator delete[] (void *, std::size_t) noexcept; .Ve .Sp را همان‌گونه که در C++14 معرفی شدند، فعال می‌کند. این گزینه برای توابع آزادسازی حافظه (deallocation) جایگزینِ تعریف‌شده توسط کاربر مفید است که به عنوان مثال، از اندازه شیء برای سریع‌تر کردن آزادسازی استفاده می‌کنند. این گزینه تحت \&\fB\-std=c++14\fR و بالاتر به‌طور پیش‌فرض فعال است. پرچم \fB\-Wsized\-deallocation\fR درباره مکان‌هایی که ممکن است نیاز به افزودن تعریف داشته باشند هشدار می‌دهد. .IP \fB\-fstrict\-enums\fR 4 .IX Item "-fstrict-enums" به کامپایلر اجازه می‌دهد تا با این فرض بهینه‌سازی کند که مقدار یک نوع شمارشی (enumerated type) تنها می‌تواند یکی از مقادیر آن شمارش باشد (همان‌طور که در استاندارد C++ تعریف شده است؛ اساساً، مقداری که بتوان آن را با حداقل تعداد بیت‌های لازم برای نمایش همه مقادیر شمارش‌پذیر نمایش داد). اگر برنامه از یک تبدیل نوع (cast) برای تبدیل یک مقدار عدد صحیح اختیاری به نوع شمارشی استفاده کند، این فرض ممکن است نامعتبر باشد. این گزینه برای یک نوع شمارشی با نوع پایه‌ای ثابت (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 دسترسی به عضو، زیرنویس آرایه (array subscripting)، و عبارات تغییر مکان (shift) را به ترتیب چپ‌به‌راست و مقداردهی (assignment) را به ترتیب راست‌به‌چپ، همان‌طور که برای 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 تنها ترتیب دسترسی به عضو و عبارات shift را فعال می‌کند، و حالت پیش‌فرض برای گویش‌های 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) برای متغیرهای ایستای محلی خودداری می‌کند. می‌توانید از این گزینه برای کاهش اندک اندازه کد در کدهایی که نیازی به thread\-safe بودن ندارند استفاده کنید. .IP \fB\-fuse\-cxa\-atexit\fR 4 .IX Item "-fuse-cxa-atexit" تخریب‌کننده‌های اشیاء با طول دوره ذخیره‌سازی ایستا (static storage duration) را به جای تابع \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 می‌تواند عملاً متدهای inline را با \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR علامت‌گذاری کند تا در جدول صدور یک DSO ظاهر نشوند و هنگام استفاده در داخل همان DSO نیازی به ارجاع غیرمستقیم PLT نداشته باشند. فعال کردن این گزینه می‌تواند تأثیر چشمگیری بر زمان بارگذاری و پیوند یک DSO داشته باشد، زیرا در صورتی که کتابخانه استفاده فراوانی از قالب‌ها داشته باشد، اندازه جدول صدور پویا را به شدت کاهش می‌دهد. .Sp رفتار این سوئیچ کاملاً مشابه علامت‌گذاری مستقیم متدها به عنوان hidden نیست، زیرا بر متغیرهای ایستای محلیِ تابع تأثیری نمی‌گذارد و باعث نمی‌شود کامپایلر استنباط کند که تابع تنها در یک شیء اشتراکی تعریف شده است. .Sp می‌توانید برای خنثی کردن اثر سوئیچ برای یک متد خاص، آن متد را به‌طور صریح با یک وضعیت دیداری علامت‌گذاری کنید. برای مثال، اگر می‌خواهید اشاره‌گرها به یک متد درون‌خطی خاص را مقایسه کنید، می‌توانید آن را به عنوان دارای دیداری پیش‌فرض علامت‌گذاری نمایید. علامت‌گذاری کلاس دربرگیرنده با دیداری صریح تأثیری ندارد. .Sp متدهای درون‌خطی که به‌طور صریح نمونه‌سازی شده‌اند (explicitly instantiated) تحت تأثیر این گزینه قرار نمی‌گیرند، چرا که پیوند (linkage) آن‌ها ممکن است در غیر این صورت از مرز یک کتابخانه اشتراکی عبور کند. .IP \fB\-fvisibility\-ms\-compat\fR 4 .IX Item "-fvisibility-ms-compat" این پرچم تلاش می‌کند با استفاده از تنظیمات دیداری، مدل پیوند C++ کامپایلر GCC را با Microsoft Visual Studio سازگار سازد. .Sp این پرچم تغییرات زیر را در مدل پیوند GCC اعمال می‌کند: .RS 4 .IP 1. 4 .IX Item "1." دیداری پیش‌فرض را مانند \&\fB\-fvisibility=hidden\fR روی \f(CW\*(C`hidden\*(C'\fR تنظیم می‌کند. .IP 2. 4 .IX Item "2." نوع‌ها، اما نه اعضای آن‌ها، به‌طور پیش‌فرض پنهان نیستند. .IP 3. 4 .IX Item "3." قاعده یک تعریف (One Definition Rule یا ODR) برای نوع‌های فاقد مشخصات صریح دیداری که در بیش از یک شیء اشتراکی تعریف شده‌اند آسان‌تر می‌شود: آن اعلان‌ها در صورتی مجاز هستند که در زمان عدم استفاده از این گزینه نیز مجاز باشند. .RE .RS 4 .Sp در کدهای جدید بهتر است از \fB\-fvisibility=hidden\fR استفاده شود و کلاس‌هایی که قرار است از بیرون قابل مشاهده باشند صادر (export) شوند. متأسفانه این احتمال وجود دارد که کدها، شاید به طور ناخواسته، به رفتار Visual Studio وابسته باشند. .Sp از جمله پیامدهای این تغییرات این است که اعضای داده‌ای ایستای هم‌نوع و هم‌نام اما تعریف‌شده در اشیاء اشتراکی مختلف، متفاوت خواهند بود، بنابراین تغییر یکی باعث تغییر دیگری نمی‌شود؛ و همچنین ممکن است اشاره‌گرها به توابع عضوی که در اشیاء اشتراکی مختلف تعریف شده‌اند در مقایسه برابر نباشند. در صورت استفاده از این پرچم، تعریف متفاوت نوع‌های هم‌نام، نقض ODR تلقی می‌شود. .RE.IP \fB\-fno\-weak\fR 4 .IX Item "-fno-weak" از پشتیبانی نمادهای ضعیف (weak symbols) استفاده نکن، حتی اگر توسط پیونددهنده ارائه شده باشد. به طور پیش‌فرض، اگر نمادهای ضعیف در دسترس باشند، G++ از آن‌ها استفاده می‌کند. این گزینه صرفاً برای آزمایش وجود دارد و نباید توسط کاربران نهایی استفاده شود؛ این کار منجر به کدی با کیفیت پایین‌تر شده و هیچ مزیتی ندارد. این گزینه ممکن است در نسخه‌های بعدی G++ حذف شود. .IP "\fB\-fext\-numeric\-literals\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-fext-numeric-literals (C++ and Objective-C++ only)" پسوندهای لیترال عددی موهومی، ممیز\-ثابت، یا تعریف‌شده توسط ماشین را به عنوان افزونه‌های GNU بپذیر. هنگامی که این گزینه غیرفعال باشد، با این پسوندها مانند پسوندهای عددی لیترال تعریف‌شده توسط کاربر در C++11 رفتار می‌شود. این گزینه به طور پیش‌فرض برای تمامی گویش‌های پیش از C++11 و تمامی گویش‌های GNU فعال است: \&\fB\-std=c++98\fR، \fB\-std=gnu++98\fR، \fB\-std=gnu++11\fR، \&\fB\-std=gnu++14\fR. این گزینه به طور پیش‌فرض برای ISO C++11 به بعد (\fB\-std=c++11\fR، ...) غیرفعال است. .IP \fB\-nostdinc++\fR 4 .IX Item "-nostdinc++" در دایرکتوری‌های استاندارد ویژه C++ به دنبال فایل‌های سرآیند نگرد، اما همچنان در سایر دایرکتوری‌های استاندارد جستجو کن. (این گزینه هنگام ساخت کتابخانه C++ استفاده می‌شود.) .IP \fB\-flang\-info\-include\-translate\fR 4 .IX Item "-flang-info-include-translate" .PD 0 .IP \fB\-flang\-info\-include\-translate\-not\fR 4 .IX Item "-flang-info-include-translate-not" .IP \fB\-flang\-info\-include\-translate=\fR\fIheader\fR 4 .IX Item "-flang-info-include-translate=header" .PD رویدادهای ترجمه include را اطلاع بده. شکل نخست ترجمه‌های include پذیرفته‌شده را ذکر می‌کند، و شکل دوم ترجمه‌های include رد شده را گزارش می‌کند. شکل \fIheader\fR در مورد ترجمه‌های include مربوط به آن سرآیند مشخص اطلاع‌رسانی می‌کند. اگر \fIheader\fR به شکل \f(CW"user"\fR یا \f(CW\*(C`\*(C'\fR باشد، با استفاده از مسیر include به یک سرآیند کاربر یا سیستم خاص حل‌وفصل خواهد شد. .IP \fB\-flang\-info\-module\-cmi\fR 4 .IX Item "-flang-info-module-cmi" .PD 0 .IP \fB\-flang\-info\-module\-cmi=\fR\fImodule\fR 4 .IX Item "-flang-info-module-cmi=module" .PD نام مسیرهای 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)" درباره استفاده از عبارت ویرگول درون یک عبارت زیرنویس (subscripting) هشدار بده. این کاربرد در C++20 منسوخ شده و قرار است در C++23 حذف شود. با این وجود، عبارت ویرگولی که درون \f(CW\*(C`( )\*(C'\fR قرار گرفته باشد منسوخ نیست. مثال: .Sp .Vb 4 \& void f(int *a, int b, int c) { \& a[b,c]; // deprecated in C++20, invalid in C++23 \& a[(b,c)]; // OK \& } .Ve .Sp در C++23 داشتن عبارت‌های جداشده با ویرگول در یک زیرنویس زمانی معتبر است که یک عملگر زیرنویس سربارگذاری‌شده یافت شود و از تعداد و انواع درست آرگومان‌ها پشتیبانی کند. G++ نحوِ پیش‌تر معتبر را برای کدهایی که در C++23 معتبر نیستند اما در C++20 معتبر ولی منسوخ بودند، همراه با یک هشدار سخت‌گیرانه (pedantic) می‌پذیرد که می‌توان آن را با \&\fB\-Wno\-comma\-subscript\fR غیرفعال کرد. .Sp به طور پیش‌فرض با \fB\-std=c++20\fR فعال می‌شود مگر اینکه \&\fB\-Wno\-deprecated\fR داده شده باشد، و پس از \fB\-std=c++23\fR صرف‌نظر از \&\fB\-Wno\-deprecated\fR فعال است. پیش از \fB\-std=c++20\fR، با \fB\-Wdeprecated\fR صریح فعال می‌شود. .Sp این هشدار با \fB\-pedantic\-errors\fR در حالت C++23 یا بالاتر به یک خطا ارتقا می‌یابد. .IP "\fB\-Wctad\-maybe\-unsupported\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wctad-maybe-unsupported (C++ 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 در مثال بالا، دو شیء موقت ایجاد می‌شوند، یکی برای هر آرگومان، و مرجعی به یکی از اشیاء موقت بازگردانده می‌شود. با این حال، هر دو شیء موقت در انتهای عبارت کامل نابود می‌شوند، بنابراین مرجع \f(CW\*(C`r\*(C'\fR معلق (dangling) است. این هشدار همچنین مراجع معلق را در فهرست‌های مقداردهی اولیه اعضا تشخیص می‌دهد: .Sp .Vb 5 \& const int& f(const int& i) { return i; } \& struct S { \& const int &r; // r is dangling \& S() : r(f(10)) { } \& }; .Ve .Sp توابع عضو نیز بررسی می‌شوند، اما فقط آرگومان شیء آن‌ها: .Sp .Vb 4 \& struct S { \& const S& self () { return *this; } \& }; \& const S& s = S().self(); // s is dangling .Ve .Sp برخی از توابع از این نظر ایمن هستند، برای نمونه \f(CW\*(C`std::use_facet\*(C'\fR: آن‌ها مرجعی را دریافت کرده و بازمی‌گردانند، اما یکی از آرگومان‌های آن را بازنمی‌گردانند، که می‌تواند این هشدار را گمراه کند. چنین توابعی را می‌توان با قرار دادن آن‌ها در یک \f(CW\*(C`#pragma\*(C'\fR از هشدار مستثنی کرد: .Sp .Vb 4 \& #pragma GCC diagnostic push \& #pragma GCC diagnostic ignored "\-Wdangling\-reference" \& const T& foo (const T&) { ... } \& #pragma GCC diagnostic pop .Ve .Sp دستور \f(CW\*(C`#pragma\*(C'\fR همچنین می‌تواند کلاس را در بر گیرد؛ در این صورت، هشدار برای تمامی توابع عضو غیرفعال خواهد شد. .Sp گزینه \&\fB\-Wdangling\-reference\fR همچنین در مورد کدهایی مانند .Sp .Vb 1 \& auto p = std::minmax(1, 2); .Ve .Sp هشدار می‌دهد که در آن \f(CW\*(C`std::minmax\*(C'\fR مقدار \f(CW\*(C`std::pair\*(C'\fR را بازمی‌گرداند، و هر دو مرجع پس از پایان عبارت کاملی که شامل فراخوانی \f(CW\*(C`std::minmax\*(C'\fR است معلق خواهند شد. .Sp این هشدار برای کلاس‌های شبه\-\f(CW\*(C`std::span\*(C'\fR هشداری صادر نمی‌کند. ما کلاس‌هایی به شکل: .Sp .Vb 5 \& template \& struct Span { \& T* data_; \& std::size len_; \& }; .Ve .Sp را شبه\-\f(CW\*(C`std::span\*(C'\fR در نظر می‌گیریم؛ بدین معنی که کلاس یک کلاس غیر\-union است که یک عضو داده‌ای اشاره‌گر و یک ویرانگر ناچیز (trivial) دارد. .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 برای از بین بردن نمونه‌ای از یک کلاس دارای توابع مجازی و مخرب (destructor) غیرمجازی استفاده می‌شود، هشدار می‌دهد. حذف یک نمونه از کلاس مشتق‌شده از طریق اشاره‌گری به کلاس پایه در صورتی که کلاس پایه فاقد مخرب مجازی باشد، ناامن است. این هشدار با \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wdeprecated\-copy\fR (فقط در C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-copy (C++ and Objective-C++ only)" در C++11 و بالاتر، هشدار می‌دهد که اعلان ضمنی یک سازنده کپی (copy constructor) یا عملگر انتساب کپی (copy assignment operator) در صورتی که کلاس دارای یک سازنده کپی یا عملگر انتساب کپی ارائه‌شده توسط کاربر باشد، منسوخ شده است. این هشدار با \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)" هشدار مربوط به حالتی را که در آن تبدیل‌های محاسباتی معمول بر روی عملوندهایی اعمال می‌شوند که یکی از نوع شمارشی (enumeration) و دیگری از یک نوع شمارشی متفاوت است، غیرفعال می‌کند. این تبدیل در C++20 منسوخ شده است. برای مثال: .Sp .Vb 3 \& enum E1 { e }; \& enum E2 { f }; \& int k = f \- e; .Ve .Sp گزینه \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR به‌طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است. در نسخه‌های پیش از C++20، این هشدار می‌تواند توسط \fB\-Wenum\-conversion\fR یا \fB\-Wdeprecated\fR فعال شود. .IP "\fB\-Wno\-deprecated\-enum\-float\-conversion\fR (فقط در C++ و Objective\-C++)" 4 .IX Item "-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)" هشدار مربوط به حالتی را که در آن تبدیل‌های محاسباتی معمول بر روی عملوندهایی اعمال می‌شوند که یکی از نوع شمارشی و دیگری از نوع ممیز شناور است، غیرفعال می‌کند. این تبدیل در 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 استفاده شود، هشدار می‌دهد؛ یعنی اگر یک enum با نوع پایه‌ای مشخص و بدون فهرست شمارنده‌ها (enumerator list)، در اعلانی غیر از صرفاً یک اعلان مستقل از enum به کار رود. به‌طور پیش‌فرض فعال است. این هشدار با \-pedantic\-errors به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-init\-list\-lifetime\fR (فقط در C++ و Objective\-C++)" 4 .IX Item "-Wno-init-list-lifetime (C++ and Objective-C++ only)" درباره استفاده‌هایی از \f(CW\*(C`std::initializer_list\*(C'\fR که احتمالاً به اشاره‌گرهای معلق (dangling pointers) منجر می‌شوند، هشدار نمی‌دهد. از آنجا که با آرایه زیرین یک \&\f(CW\*(C`initializer_list\*(C'\fR مانند یک شیء موقت معمولی در C++ رفتار می‌شود، به‌سادگی ممکن است اشاره‌گری به آرایه فراتر از پایان طول عمر آن نگه‌داشته شود. برای مثال: .RS 4 .IP * 4 اگر تابعی یک \f(CW\*(C`initializer_list\*(C'\fR موقت یا یک متغیر محلی \&\f(CW\*(C`initializer_list\*(C'\fR را برگرداند، طول عمر آرایه در پایان دستور return تمام می‌شود، بنابراین مقدار بازگردانده‌شده دارای یک اشاره‌گر معلق خواهد بود. .IP * 4 اگر یک عبارت new اقدام به ایجاد یک \f(CW\*(C`initializer_list\*(C'\fR کند، آرایه تنها تا پایان عبارت کامل (full-expression) دربرگیرنده زنده می‌ماند، بنابراین \&\f(CW\*(C`initializer_list\*(C'\fR موجود در حافظه heap دارای یک اشاره‌گر معلق خواهد بود. .IP * 4 هنگامی که به یک متغیر \f(CW\*(C`initializer_list\*(C'\fR از طریق یک فهرست مقداردهی محصور در آکولاد انتساب داده می‌شود، آرایه موقت ایجادشده برای سمت راست انتساب تنها تا پایان عبارت کامل زنده می‌ماند؛ بنابراین در دستور بعدی متغیر \f(CW\*(C`initializer_list\*(C'\fR دارای یک اشاره‌گر معلق است. .Sp .Vb 6 \& // li\*(Aqs initial underlying array lives as long as li \& std::initializer_list li = { 1,2,3 }; \& // assignment changes li to point to a temporary array \& li = { 4, 5 }; \& // now the temporary is gone and li has a dangling pointer \& int i = li.begin()[0] // undefined behavior .Ve .IP * 4 هنگامی که یک سازنده مبتنی بر فهرست (list constructor)، اشاره‌گر \f(CW\*(C`begin\*(C'\fR را از آرگومان \&\f(CW\*(C`initializer_list\*(C'\fR ذخیره می‌کند، این کار طول عمر آرایه را تمدید نمی‌کند؛ بنابراین اگر یک متغیر کلاس از یک \&\f(CW\*(C`initializer_list\*(C'\fR موقت ساخته شود، اشاره‌گر در پایان دستور اعلان متغیر به‌صورت معلق رها می‌شود. .RE .RS 4 .RE .IP \fB\-Winvalid\-constexpr\fR 4 .IX Item "-Winvalid-constexpr" هنگامی که یک تابع هرگز یک عبارت ثابت (constant expression) تولید نمی‌کند، هشدار می‌دهد. در C++20 و پیش از آن، برای هر تابع و الگوی تابع \f(CW\*(C`constexpr\*(C'\fR، باید حداقل یک مجموعه از آرگومان‌های تابع در حداقل یک نمونه‌سازی (instantiation) وجود داشته باشد به‌گونه‌ای که فراخوانی تابع یا سازنده بتواند زیرعبارتی ارزیابی‌شده از یک عبارت ثابت هسته‌ای (core constant expression) باشد. C++23 این محدودیت را حذف کرد، بنابراین ممکن است تابع یا الگوی تابعی با مشخصه \f(CW\*(C`constexpr\*(C'\fR وجود داشته باشد که هیچ فراخوانی‌ای از آن شرایط یک عبارت ثابت هسته‌ای را برآورده نکند. .Sp این هشدار به‌طور پیش‌فرض به‌عنوان یک هشدار سخت‌گیرانه (pedantic) در C++20 و پیش از آن فعال است. در C++23، گزینه \fB\-Winvalid\-constexpr\fR را می‌توان فعال کرد، که در این حالت یک هشدار معمولی خواهد بود. برای مثال: .Sp .Vb 7 \& void f (int& i); \& constexpr void \& g (int& i) \& { \& // Warns by default in C++20, in C++23 only with \-Winvalid\-constexpr. \& f(i); \& } .Ve .IP \fB\-Winvalid\-imported\-macros\fR 4 .IX Item "-Winvalid-imported-macros" معتبر بودن تمام تعاریف ماکروهای واردشده را در پایان کامپایل بررسی می‌کند. این گزینه به‌طور پیش‌فرض فعال نیست، زیرا تعیین آن نیازمند پردازش اضافی است. این گزینه ممکن است هنگام آماده‌سازی مجموعه‌هایی از 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 به دلیل فراخوانی تابعی که مشخصه استثنای غیراندازنده (non\-throwing exception specification؛ یعنی \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 بودن یا کپسوله‌سازی را نقض کند، یا اشاره‌گرهای جدول مجازی (vtable) را تخریب کند، هشدار می‌دهد. تغییر دادن نمایش چنین اشیائی ممکن است نامتغیرهایی (invariants) را که توسط توابع عضو کلاس حفظ می‌شوند نقض کند. برای مثال، فراخوانی \f(CW\*(C`memset\*(C'\fR در زیر تعریف‌نشده است چرا که یک شیء کلاس غیربدیهی را تغییر می‌دهد و بنابراین تشخیص داده می‌شود. روش ایمن برای مقداردهی اولیه یا پاک‌کردن فضای حافظه اشیای چنین انواعی، استفاده از سازنده یا عملگر انتساب مناسب در صورت وجود است. .Sp .Vb 2 \& std::string str = "abc"; \& memset (&str, 0, sizeof str); .Ve .Sp گزینه \fB\-Wclass\-memaccess\fR توسط \fB\-Wall\fR فعال می‌شود. تبدیل صریح (cast) اشاره‌گر شیء کلاس به \f(CW\*(C`void *\*(C'\fR یا نوعی که بتواند با تابع حافظه خام به صورت ایمن دسترسی داشته باشد، هشدار را فرومی‌نشاند. .IP "\fB\-Wnon\-virtual\-dtor\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wnon-virtual-dtor (C++ and Objective-C++ only)" هنگامی هشدار می‌دهد که کلاسی دارای توابع مجازی و یک مخرب غیرمجازی قابل‌دسترس در خود یا در یک کلاس پایه چندریختی قابل‌دسترس باشد؛ که در این صورت حذف نمونه‌ای از کلاس مشتق‌شده از طریق اشاره‌گری به خود کلاس یا کلاس پایه امکان‌پذیر اما ناامن است. این هشدار در صورت تعیین \fB\-Weffc++\fR به طور خودکار فعال می‌شود. گزینه \fB\-Wdelete\-non\-virtual\-dtor\fR (فعال‌شده توسط \fB\-Wall\fR) ارجح است زیرا در مورد موارد ناامن بدون هشدارهای کاذب (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 مربوط به GNU باشد. استفاده از کلیدواژه \f(CW\*(C`register\*(C'\fR به عنوان مشخص‌کننده رده حافظه در C++11 منسوخ شده و در C++17 حذف شده است. به صورت پیش‌فرض با \fB\-std=c++17\fR فعال است. .IP "\fB\-Wreorder\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wreorder (C++ and Objective-C++ only)" هنگامی که ترتیب مقداردهنده‌های اولیه اعضا (member initializers) در کد با ترتیبی که باید اجرا شوند مطابقت ندارد، هشدار می‌دهد. به عنوان مثال: .Sp .Vb 5 \& struct A { \& int i; \& int j; \& A(): j (0), i (1) { } \& }; .Ve .Sp کامپایلر مقداردهنده‌های اعضا را برای \f(CW\*(C`i\*(C'\fR و \f(CW\*(C`j\*(C'\fR بازآرایی می‌کند تا با ترتیب اعلان اعضا مطابقت داشته باشد و هشداری در این خصوص صادر می‌کند. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-pessimizing\-move\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wno-pessimizing-move (C++ and Objective-C++ only)" این گزینه زمانی هشدار می‌دهد که فراخوانی \f(CW\*(C`std::move\*(C'\fR از حذف رونوشت (copy elision) جلوگیری کند. سناریوی متداولی که در آن حذف رونوشت می‌تواند رخ دهد، هنگام بازگشت از تابعی با نوع بازگشتی کلاس است، هنگامی که عبارتِ در حال بازگشت، نام یک شیء خودکار (automatic object) غیر فرّار (non\-volatile) باشد، پارامتر تابع نباشد، و نوعی مشابه نوع بازگشتی تابع داشته باشد. .Sp .Vb 9 \& struct T { \& ... \& }; \& T fn() \& { \& T t; \& ... \& return std::move (t); \& } .Ve .Sp اما در این مثال، فراخوانی \f(CW\*(C`std::move\*(C'\fR مانع از حذف رونوشت می‌شود. .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-redundant\-move\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wno-redundant-move (C++ and Objective-C++ only)" این گزینه در مورد فراخوانی‌های زائد \f(CW\*(C`std::move\*(C'\fR هشدار می‌دهد؛ یعنی زمانی که عملیات انتقال (move) حتی بدون فراخوانی \f(CW\*(C`std::move\*(C'\fR نیز انجام می‌شد. این وضعیت به این دلیل رخ می‌دهد که کامپایلر در موقعیت‌های خاصی مانند بازگرداندن متغیر محلی در جایی که حذف رونوشت قابل اعمال نیست، ملزم است با شیء همانند یک rvalue رفتار کند. در نظر بگیرید: .Sp .Vb 8 \& struct T { \& ... \& }; \& T fn(T t) \& { \& ... \& return std::move (t); \& } .Ve .Sp در اینجا، فراخوانی \f(CW\*(C`std::move\*(C'\fR زائد است. از آنجا که G++ مورد Core Issue 1579 را پیاده‌سازی می‌کند، مثال دیگر به این صورت است: .Sp .Vb 12 \& struct T { // convertible to U \& ... \& }; \& struct U { \& ... \& }; \& U fn() \& { \& T t; \& ... \& return std::move (t); \& } .Ve .Sp در این مثال، حذف رونوشت قابل اعمال نیست زیرا نوع عبارت در حال بازگشت و نوع بازگشتی تابع متفاوت هستند، با این حال G++ با مقدار بازگشتی به گونه‌ای رفتار می‌کند که گویی توسط یک rvalue تعیین شده است. .Sp این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wrange\-loop\-construct\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wrange-loop-construct (C++ and Objective-C++ only)" این گزینه زمانی هشدار می‌دهد که یک حلقه for مبتنی بر دامنه (range\-based for\-loop) در C++‎ یک رونوشت غیرضروری ایجاد کند. این وضعیت زمانی رخ می‌دهد که اعلان دامنه یک ارجاع نیست، اما احتمالاً باید باشد. برای مثال: .Sp .Vb 5 \& struct S { char arr[128]; }; \& void fn () { \& S arr[5]; \& for (const auto x : arr) { ... } \& } .Ve .Sp هنگامی که نوع در حال کپی شدن، نوعی با قابلیت کپی بدیهی (trivially\-copyable) باشد که اندازه آن کمتر از ۶۴ بایت است، هشداری داده نمی‌شود. .Sp این گزینه همچنین زمانی هشدار می‌دهد که متغیر حلقه در یک حلقه for مبتنی بر دامنه با مقداری از نوع متفاوت مقداردهی اولیه شود که به یک رونوشت منجر شود. برای مثال: .Sp .Vb 4 \& void fn() { \& int arr[10]; \& for (const double &x : arr) { ... } \& } .Ve .Sp در مثال بالا، در هر تکرار حلقه یک مقدار موقت از نوع \f(CW\*(C`double\*(C'\fR ایجاد و نابود می‌شود که ارجاع \f(CW\*(C`const double &\*(C'\fR به آن مقید (bind) شده است. .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wredundant\-tags\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wredundant-tags (C++ and Objective-C++ only)" در مورد class\-key و enum\-key زائد در مراجع به انواع کلاس و انواع شمارشی در زمینه‌هایی که می‌توان کلید را بدون ایجاد ابهام حذف کرد، هشدار می‌دهد. برای مثال: .Sp.Vb 2 \& struct foo; \& struct foo *p; // warn that keyword struct can be eliminated .Ve .Sp از سوی دیگر، در این مثال هیچ هشداری داده نمی‌شود: .Sp .Vb 3 \& struct foo; \& void foo (); // "hides" struct foo \& void bar (struct foo&); // no warning, keyword struct is necessary .Ve .IP "\fB\-Wno\-subobject\-linkage\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-subobject-linkage (C++ and Objective-C++ only)" اگر یک نوع کلاس دارای یک کلاس پایه یا فیلدی باشد که نوع آن از فضای نام ناشناس (anonymous namespace) استفاده می‌کند یا به نوعی بدون پیوند (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) و یک عملگر انتساب تعریف کنید. .IP * 4 در سازنده‌ها، مقداردهی اولیه را بر انتساب ترجیح دهید. .IP * 4 کاری کنید که \f(CW\*(C`operator=\*(C'\fR ارجاعی به \f(CW*this\fR برگرداند. .IP * 4 زمانی که باید یک شیء را برگردانید، سعی نکنید یک ارجاع برگردانید. .IP * 4 بین فرم‌های پیشوندی و پسوندی عملگرهای افزایش و کاهش تمایز قائل شوید. .IP * 4 هرگز \f(CW\*(C`&&\*(C'\fR، \f(CW\*(C`||\*(C'\fR یا \f(CW\*(C`,\*(C'\fR را سربارگذاری نکنید. .RE .RS 4 .Sp این گزینه همچنین \fB\-Wnon\-virtual\-dtor\fR را که یکی دیگر از توصیه‌های Effective C++ است فعال می‌کند. با این حال، این بررسی گسترش یافته تا در مورد نبود ویرانگر مجازی (virtual destructor) در کلاس‌های پایه غیرچندریختیِ قابل‌دسترس نیز هشدار دهد. .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 بدون تبدیل نوع به عنوان نگهبان (sentinel) هشدار می‌دهد. هنگام کامپایل تنها با GCC این یک نگهبان معتبر است، زیرا \f(CW\*(C`NULL\*(C'\fR به صورت \f(CW\*(C`_\|_null\*(C'\fR تعریف شده است. اگرچه این یک ثابت اشاره‌گر تهی است نه یک اشاره‌گر تهی، اما تضمین می‌شود که اندازه‌ای برابر با یک اشاره‌گر داشته باشد. با این حال این شیوهٔ استفاده در کامپایلرهای مختلف قابل حمل نیست. .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 استفاده کرد. همچنین می‌توان الگوها را نمونه‌سازی یا تخصیص داد. .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)" برای اعلان‌های ساختارها (structs)، کلاس‌ها (classes) و الگوهای کلاس (class templates) و تخصیص‌های اختصاصی (specializations) آن‌ها با یک class\-key که با تعریف آن یا با نخستین اعلان (در صورتی که تعریفی ارائه نشده باشد) مطابقت ندارد، هشدار می‌دهد. .Sp برای نمونه، اعلان \f(CW\*(C`struct Object\*(C'\fR در فهرست آرگومان‌های \f(CW\*(C`draw\*(C'\fR این هشدار را فعال می‌کند. برای جلوگیری از آن، یا class\-key اضافی \f(CW\*(C`struct\*(C'\fR را حذف کنید یا آن را با \f(CW\*(C`class\*(C'\fR جایگزین کنید تا با تعریفش مطابقت داشته باشد. .Sp .Vb 5 \& class Object { \& public: \& virtual ~Object () = 0; \& }; \& void draw (struct Object*); .Ve .Sp اعلان یک کلاس با class\-key به صورت \f(CW\*(C`struct\*(C'\fR همان‌طور که مثال بالا نشان می‌دهد اشتباه نیست. گزینهٔ \fB\-Wmismatched\-tags\fR با هدف کمک به دستیابی به شیوه‌ای یکدست در اعلان‌های کلاس در نظر گرفته شده است. در کدهایی که قرار است به کامپایلرهای مبتنی بر Windows پورت‌پذیر باشند، این هشدار به جلوگیری از ارجاع‌های حل‌نشده به دلیل تفاوت در درهم‌سازی نمادهای (mangling of symbols) اعلان‌شده با class\-keyهای متفاوت کمک می‌کند. این گزینه را می‌توان به تنهایی یا در کنار \fB\-Wredundant\-tags\fR به کار برد. .IP "\fB\-Wmultiple\-inheritance\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wmultiple-inheritance (C++ and Objective-C++ only)" هنگامی که یک کلاس با چندین کلاس پایهٔ مستقیم تعریف شود، هشدار می‌دهد. برخی از قواعد کدنویسی وراثت چندگانه را منع می‌کنند و این گزینه می‌تواند برای اعمال آن قاعده به کار رود. این هشدار درون فایل‌های سرآیند سیستم، مانند STL غیرفعال است، بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان کلاس‌هایی تعریف کرد که به‌طور غیرمستقیم از وراثت چندگانه استفاده می‌کنند. .IP \fB\-Wvirtual\-inheritance\fR 4 .IX Item "-Wvirtual-inheritance" هنگامی که یک کلاس با یک کلاس پایهٔ مستقیم مجازی تعریف شود، هشدار می‌دهد. برخی از قواعد کدنویسی وراثت چندگانه را منع می‌کنند و این گزینه می‌تواند برای اعمال آن قاعده به کار رود. این هشدار درون فایل‌های سرآیند سیستم، مانند STL غیرفعال است، بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان کلاس‌هایی تعریف کرد که به‌طور غیرمستقیم از وراثت مجازی استفاده می‌کنند. .IP \fB\-Wno\-virtual\-move\-assign\fR 4 .IX Item "-Wno-virtual-move-assign" هشدارهای مربوط به ارث‌بری از یک پایهٔ مجازی با عملگر انتساب انتقال (move assignment operator) غیربدیهی (non\-trivial) در C++11 را نادیده می‌گیرد. این وضعیت خطرناک است، زیرا اگر پایهٔ مجازی از بیش از یک مسیر در دسترس باشد، چندین بار منتقل (move) می‌شود که می‌تواند به این معنی باشد هر دو شیء در وضعیت منتقل‌شده (moved\-from) قرار می‌گیرند. اگر عملگر انتساب انتقال به‌گونه‌ای نوشته شده باشد که از انتقال مجدد از یک شیء منتقل‌شده جلوگیری کند، می‌توان این هشدار را غیرفعال کرد. .IP \fB\-Wnamespaces\fR 4 .IX Item "-Wnamespaces" هنگامی که یک تعریف فضای نام (namespace) باز می‌شود، هشدار می‌دهد. برخی قواعد کدنویسی استفاده از فضاهای نام را منع می‌کنند و این گزینه می‌تواند برای اعمال آن قاعده استفاده شود. این هشدار درون فایل‌های سرآیند سیستم مانند STL غیرفعال است، بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان از رهنمودهای using و نام‌های واجد شرایط (qualified names) استفاده کرد. .IP "\fB\-Wno\-template\-body\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-template-body (C++ and Objective-C++ only)" تشخیص خطاها را هنگام تجزیهٔ یک الگو غیرفعال کرده و به جای آن، خطا را تنها هنگام نمونه‌سازی (instantiation) الگو صادر می‌کند. این پرچم همچنین می‌تواند برای تنزل دادن چنین خطاهایی به هشدار از طریق \fBWno\-error=\fR یا \fB\-fpermissive\fR به کار رود. .IP "\fB\-Wno\-template\-id\-cdtor\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-template-id-cdtor (C++ and Objective-C++ only)" هشدار دربارهٔ استفاده از simple\-template\-id به عنوان declarator\-id در سازنده یا مخرب را غیرفعال می‌کند؛ این مورد در C++20 از طریق DR 2237 نامعتبر شده است. برای نمونه: .Sp .Vb 4 \& template struct S { \& S(); // should be S(); \& ~S(); // should be ~S(); \& }; .Ve .Sp گزینهٔ \fB\-Wtemplate\-id\-cdtor\fR به صورت پیش‌فرض با \fB\-std=c++20\fR فعال است؛ همچنین توسط \fB\-Wc++20\-compat\fR نیز فعال می‌شود. .IP \fB\-Wtemplate\-names\-tu\-local\fR 4 .IX Item "-Wtemplate-names-tu-local" هنگامی که بدنهٔ یک الگو، افشای یک نهاد محلیِ واحد ترجمه (translation\-unit\-local entity) را پنهان می‌کند، هشدار می‌دهد. در بیشتر موارد، ارجاع به یک نهاد محلیِ واحد ترجمه (مانند یک اعلان با پیوند درونی / internal linkage) درون نهادی که در CMI یک ماژول صادر می‌شود، یک خطا است. با این حال، درون مقداردهندهٔ اولیهٔ یک متغیر یا در بدنهٔ یک تابع غیردرخط (non\-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، و اتصال‌های ساخت‌یافته (structured bindings) از یک نوع مقید به \f(CW\*(C`volatile\*(C'\fR می‌شود. این کاربردها در C++20 منسوخ شده‌اند. .Sp به صورت پیش‌فرض با \fB\-std=c++20\fR فعال است. پیش از \fB\-std=c++20\fR، با گزینهٔ صریح \fB\-Wdeprecated\fR فعال می‌شود. .IP \fB\-Waligned\-new\fR 4 .IX Item "-Waligned-new" دربارهٔ یک new\-expression برای نوعی که به هم‌ترازی (alignment) بزرگ‌تری نسبت به \f(CWalignof(std::max_align_t)\fR نیاز دارد اما از یک تابع تخصیص بدون پارامتر هم‌ترازی صریح استفاده می‌کند، هشدار می‌دهد. این گزینه توسط \fB\-Wall\fR فعال می‌شود. .Sp معمولاً این گزینه تنها دربارهٔ توابع تخصیص سراسری هشدار می‌دهد، اما \fB\-Waligned\-new=all\fR دربارهٔ توابع تخصیص عضو کلاس نیز هشدار صادر می‌کند. .IP \fB\-Wno\-placement\-new\fR 4 .IX Item "-Wno-placement-new" .PD 0 .IP \fB\-Wplacement\-new=\fR\fIn\fR 4 .IX Item "-Wplacement-new=n" .PD دربارهٔ عبارت‌های placement new با رفتار تعریف‌نشده (undefined behavior) هشدار می‌دهد، مانند ساخت یک شیء در بافری که از نوع شیء کوچک‌تر است. برای نمونه، عبارت placement new زیر تشخیص داده می‌شود زیرا تلاش می‌کند آرایه‌ای از ۶۴ عدد صحیح را در بافری که تنها ۶۴ بایت است بسازد. .Sp .Vb 2 \& char buf [64]; \& new (buf) int[64]; .Ve .Sp این هشدار به صورت پیش‌فرض فعال است. .RS 4 .IP \fB\-Wplacement\-new=1\fR 4 .IX Item "-Wplacement-new=1" این سطحِ هشدارِ پیش‌فرض برای \fB\-Wplacement\-new\fR است. در این سطح، هشدار برای برخی ساختارهای اکیداً تعریف‌نشده که GCC آن‌ها را به عنوان افزونه جهت سازگاری با کدهای قدیمی مجاز می‌داند، صادر نمی‌شود. برای نمونه، عبارت \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)" این گزینه هشدارهایی را کنترل می‌کند که در صورت عدم دسترسی به یک کلاس پایه در کلاس مشتق‌شده از آن به دلیل ابهام صادر می‌شوند. این هشدار به طور پیش‌فرض فعال است. توجه داشته باشید که هشدار مربوط به کلاس‌های پایهٔ مجازیِ (virtual base) مبهم، با گزینهٔ \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 (موسوم به C variadic) باشد؛ این هشدار به طور پیش‌فرض فعال است زیرا سه‌نقطه (ellipsis) به ارث برده نمی‌شود. .IP "\fB\-Wno\-invalid\-offsetof\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-invalid-offsetof (C++ and Objective-C++ only)" فرونشاندن هشدارهای ناشی از اعمال ماکروی \f(CW\*(C`offsetof\*(C'\fR بر روی یک نوع غیر POD (یا non\-POD). بر اساس استاندارد ISO C++ سال ۲۰۱۴، اعمال \f(CW\*(C`offsetof\*(C'\fR بر روی نوعی که ساختار استاندارد ندارد (non\-standard\-layout) تعریف‌نشده (undefined) است. با این حال، در پیاده‌سازی‌های موجود 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\-Wextra\fR به همراه \&\fB\-fsized\-deallocation\fR فعال می‌شود. .IP \fB\-Wsuggest\-final\-types\fR 4 .IX Item "-Wsuggest-final-types" هشدار دربارهٔ انواعی با متدهای مجازی که اگر آن نوع با مشخص‌کنندهٔ \f(CW\*(C`final\*(C'\fR در C++11 اعلان می‌شد، یا در صورت امکان درون یک فضای نام بی‌نام (anonymous namespace) قرار می‌گرفت، کیفیت کد بهبود می‌یافت. این امر به GCC اجازه می‌دهد تا فراخوانی‌های چندریختی را با تهاجم بیشتری مجازی‌زدایی (devirtualize) کند. این هشدار در هنگام بهینه‌سازی زمان پیوند (link\-time optimization) که اطلاعات مربوط به گراف سلسله‌مراتب کلاس‌ها کامل‌تر است، کارایی بیشتری دارد. .IP \fB\-Wsuggest\-final\-methods\fR 4 .IX Item "-Wsuggest-final-methods" هشدار دربارهٔ متدهای مجازی که اگر متد با مشخص‌کنندهٔ \f(CW\*(C`final\*(C'\fR در C++11 اعلان می‌شد، یا در صورت امکان نوع آن در یک فضای نام بی‌نام یا با مشخص‌کنندهٔ \f(CW\*(C`final\*(C'\fR اعلان می‌شد، کیفیت کد بهبود می‌یافت. این هشدار همراه با بهینه‌سازی زمان پیوند (link\-time optimization) که اطلاعات مربوط به گراف سلسله‌مراتب کلاس‌ها کامل‌تر است، کارایی بیشتری دارد. پیشنهاد می‌شود ابتدا توصیه‌های \fB\-Wsuggest\-final\-types\fR را بررسی کرده و سپس با نشانه‌گذاری‌های جدید برنامه را بازسازی کنید. .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 ممکن است از گزینه‌های مختص پیشانه (front\-end) زبان 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 به عنوان نام کلاسی که باید برای هر رشته‌ی مصرح (literal string) مشخص‌شده با نحو \f(CW\*(C`@"..."\*(C'\fR نمونه‌سازی شود، استفاده می‌کند. در صورتی که زمان اجرای (runtime) گنو استفاده شود نام کلاس پیش‌فرض \f(CW\*(C`NXConstantString\*(C'\fR است، و در صورتی که زمان اجرای NeXT استفاده شود \f(CW\*(C`NSConstantString\*(C'\fR خواهد بود (پایین را ببینید). در پلتفرم‌های Darwin / macOS، گزینه‌ی \fB\-fconstant\-cfstrings\fR در صورت حضور، تنظیمات \fB\-fconstant\-string\-class\fR را بازنویسی کرده و موجب می‌شود مقادیر مصرح \&\f(CW\*(C`@"..."\*(C'\fR به عنوان رشته‌های ثابت CoreFoundation چیدمان شوند. توجه داشته باشید که \fB\-fconstant\-cfstrings\fR یک نام مستعار برای معادل مختص هدف \&\fB\-mconstant\-cfstrings\fR است. .IP \fB\-fgnu\-runtime\fR 4 .IX Item "-fgnu-runtime" کد شیء (object code) سازگار با زمان اجرای استاندارد GNU Objective\-C تولید می‌کند. این حالت پیش‌فرض برای اکثر انواع سیستم‌ها است. .IP \fB\-fnext\-runtime\fR 4 .IX Item "-fnext-runtime" خروجی سازگار با زمان اجرای NeXT تولید می‌کند. این حالت پیش‌فرض برای سیستم‌های مبتنی بر NeXT، از جمله Darwin / macOS است. ماکروی \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR در صورتی که (و تنها در صورتی که) این گزینه استفاده شود، از پیش تعریف می‌شود. .IP \fB\-fno\-nil\-receivers\fR 4 .IX Item "-fno-nil-receivers" فرض می‌کند که تمام ارسال‌های پیام (message dispatches) در Objective\-C (\f(CW\*(C`[receiver message:arg]\*(C'\fR) در این واحد ترجمه (translation unit) تضمین می‌کنند که گیرنده \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 از Objective\-C ABI برای زمان اجرای انتخاب‌شده استفاده می‌کند. این گزینه در حال حاضر تنها برای زمان اجرای 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++ با ویران‌کننده (destructor) غیربدیهی هست یا خیر، و در این صورت متد ویژه \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR را می‌سازد که تمام این ویران‌کننده‌های پیش‌فرض را به ترتیب معکوس اجرا می‌کند. .Sp متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR که بدین ترتیب ساخته می‌شوند تنها روی متغیرهای نمونه اعلان‌شده در کلاس Objective\-C فعلی عمل می‌کنند، نه متغیرهایی که از ابرکلاس‌ها به ارث رسیده‌اند. فراخوانی تمام این متدها در سلسله‌مراتب وراثت یک شیء بر عهده زمان اجرای Objective\-C است. متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR بلافاصله پس از تخصیص نمونه شیء جدید توسط زمان اجرا فراخوانی می‌شوند؛ متدهای \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR نیز بلافاصله پیش از آنکه زمان اجرا نمونه شیء را آزاد کند، فراخوانی می‌شوند. .Sp در زمان نگارش این مستند، تنها زمان اجرای NeXT در Mac OS X 10.4 و جدیدتر از فراخوانی متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR پشتیبانی می‌کند. .IP \fB\-fobjc\-direct\-dispatch\fR 4 .IX Item "-fobjc-direct-dispatch" پرش‌های سریع به توزیع‌کننده پیام (message dispatcher) را مجاز می‌شمارد. در Darwin این کار از طریق comm page انجام می‌گیرد. .IP \fB\-fobjc\-exceptions\fR 4 .IX Item "-fobjc-exceptions" پشتیبانی نحوی از مدیریت ساختاریافته استثناها را در Objective\-C، مشابه آنچه در C++ ارائه می‌شود، فعال می‌کند. این گزینه برای استفاده از کلمات کلیدی Objective\-C شامل \f(CW@try\fR، \&\f(CW@throw\fR، \f(CW@catch\fR، \f(CW@finally\fR و \&\f(CW@synchronized\fR الزامی است. این گزینه هم با زمان اجرای GNU و هم با زمان اجرای NeXT در دسترس است (اما در Mac OS X 10.2 و قدیمی‌تر همراه با زمان اجرای NeXT در دسترس نیست). .IP \fB\-fobjc\-gc\fR 4 .IX Item "-fobjc-gc" بازیافت حافظه (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]" دیداری‌پذیری پیش‌فرض متغیر نمونه را روی گزینه مشخص‌شده تنظیم می‌کند، به طوری که متغیرهای نمونه اعلان‌شده در خارج از محدوده هرگونه دستور اصلاح‌کننده دسترسی، به‌طور پیش‌فرض دارای دیداری‌پذیری مشخص‌شده باشند. .IP \fB\-gen\-decls\fR 4 .IX Item "-gen-decls" اعلان‌های واسط (interface declarations) را برای تمام کلاس‌های دیده‌شده در فایل مبدأ، درون فایلی به نام \fIsourcename.decl\fR تخلیه (dump) می‌کند. .IP "\fB\-Wassign\-intercept\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wassign-intercept (Objective-C and Objective-C++ only)" هر زمان که یک انتساب Objective\-C توسط بازیافت‌کننده حافظه (garbage collector) رهگیری شود، هشدار می‌دهد. .IP "\fB\-Wno\-property\-assign\-default\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wno-property-assign-default (Objective-C and Objective-C++ only)" اگر برای یک مشخصه شیء Objective\-C هیچ معناشناسی انتسابی (assign semantics) مشخص نشده باشد، هشداری صادر نمی‌کند. .IP "\fB\-Wno\-protocol\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wno-protocol (Objective-C and Objective-C++ only)" اگر کلاسی برای پیاده‌سازی یک پروتکل اعلان شده باشد، برای هر متدی در پروتکل که توسط کلاس پیاده‌سازی نشده باشد هشداری صادر می‌شود. رفتار پیش‌فرض این است که برای هر متدی که صریحاً در کلاس پیاده‌سازی نشده هشدار صادر شود، حتی اگر پیاده‌سازی آن متد از ابرکلاس به ارث رسیده باشد. اگر از گزینه \fB\-Wno\-protocol\fR استفاده کنید، متدهای به ارث رسیده از ابرکلاس به عنوان پیاده‌سازی‌شده در نظر گرفته می‌شوند و هیچ هشداری برای آن‌ها صادر نمی‌شود..IP "\fB\-Wobjc\-root\-class\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wobjc-root-class (Objective-C and Objective-C++ only)" اگر رابط یک کلاس فاقد ابرکلاس باشد، هشدار می‌دهد. برای نمونه، اکثر کلاس‌ها از \f(CW\*(C`NSObject\*(C'\fR (یا \f(CW\*(C`Object\*(C'\fR) ارث‌بری می‌کنند. هنگام اعلان کلاس‌هایی که قرار است کلاس‌های ریشه باشند، می‌توان با نشانه‌گذاری رابط آن‌ها با \f(CW\*(C`_\|_attribute_\|_((objc_root_class))\*(C'\fR این هشدار را لغو کرد. .IP "\fB\-Wselector\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wselector (Objective-C and Objective-C++ only)" اگر در طول کامپایل، متدهای متعددی با انواع مختلف برای یک سلکتور یکسان پیدا شوند، هشدار می‌دهد. این بررسی بر روی فهرست متدها در مرحله نهایی کامپایل انجام می‌شود. علاوه بر این، بررسی برای هر سلکتوری که در یک عبارت \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، متدهای متعددی با انواع آرگومان و/یا انواع بازگشتی متفاوت برای آن سلکتور یافت شوند، هشدار می‌دهد. هنگامی که این پرچم خاموش است (که رفتار پیش‌فرض است)، کامپایلر در صورتی که تفاوت‌های یافت‌شده به انواعی که اندازه و تراز یکسانی دارند محدود باشد، از این هشدارها صرف‌نظر می‌کند. .IP "\fB\-Wundeclared\-selector\fR (تنها Objective\-C و Objective\-C++)" 4 .IX Item "-Wundeclared-selector (Objective-C and Objective-C++ only)" اگر یک عبارت \f(CW@selector(...)\fR که به یک سلکتور اعلان‌نشده ارجاع می‌دهد پیدا شود، هشدار می‌دهد. یک سلکتور در صورتی اعلان‌نشده در نظر گرفته می‌شود که هیچ متدی با آن نام پیش از عبارت \&\f(CW@selector(...)\fR اعلان نشده باشد، خواه به صورت صریح در یک اعلان \&\f(CW@interface\fR یا \f(CW@protocol\fR، یا به صورت ضمنی در یک بخش \f(CW@implementation\fR. این گزینه همیشه بررسی‌های خود را به محض یافتن یک عبارت \f(CW@selector(...)\fR انجام می‌دهد، در حالی که \fB\-Wselector\fR بررسی‌های خود را تنها در مرحله نهایی کامپایل اجرا می‌نماید. این امر همچنین این شیوه استاندارد کدنویسی را تحمیل می‌کند که متدها و سلکتورها باید پیش از استفاده اعلان شوند. .IP \fB\-print\-objc\-runtime\-info\fR 4 .IX Item "-print-objc-runtime-info" یک سربرگ C تولید می‌کند که بزرگ‌ترین ساختاری را که بر حسب مقدار (by value) ارسال می‌شود، در صورت وجود، توصیف می‌نماید. .SS "گزینه‌های کنترل OpenMP و OpenACC" .IX Subsection "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) در 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 مشخص شده و برای برداری‌سازی مناسب هستند، تولید می‌کند. مقدار \&\fIdevice\-type\fR می‌تواند یکی از مقادیر \f(CW\*(C`none\*(C'\fR، \f(CW\*(C`host\*(C'\fR، \f(CW\*(C`nohost\*(C'\fR و \f(CW\*(C`any\*(C'\fR باشد که با کلمات کلیدیِ بند \f(CW\*(C`device_type\*(C'\fR در رهنمود \f(CW\*(C`declare target\*(C'\fR متناظر هستند؛ همتاها برای اشتراک دستگاه‌های مشخص‌شده ایجاد می‌شوند. \&\fB\-fopenmp\-target\-simd\-clone\fR معادل \&\fB\-fopenmp\-target\-simd\-clone=any\fR بوده و \&\fB\-fno\-openmp\-target\-simd\-clone\fR معادل \&\fB\-fopenmp\-target\-simd\-clone=none\fR است. .Sp در بهینه‌سازی \fB\-O2\fR و بالاتر (به جز \fB\-Os\fR یا \fB\-Og\fR) مقدار پیش‌فرض این بهینه‌سازی \fB\-fopenmp\-target\-simd\-clone=nohost\fR است؛ در غیر این صورت به طور پیش‌فرض غیرفعال می‌باشد..SS "گزینه‌های واپایش قالب‌بندی پیام‌های تشخیصی (Options to Control Diagnostic Messages Formatting)" .IX Subsection "Options to Control Diagnostic Messages Formatting" به‌طور سنتی، پیام‌های تشخیصی بدون در نظر گرفتن وضعیت ظاهری دستگاه خروجی (مانند پهنای آن، ...) قالب‌بندی شده‌اند. می‌توانید از گزینه‌های شرح‌داده‌شده در زیر برای واپایش الگوریتم قالب‌بندی پیام‌های تشخیصی استفاده کنید، مانند این که چند نویسه در هر خط قرار گیرد یا اطلاعات مکان در کد منبع هر چند وقت یک‌بار گزارش شود. توجه داشته باشید که ممکن است برخی فرانت‌اندهای زبان‌ها این گزینه‌ها را رعایت نکنند. .IP \fB\-fmessage\-length=\fR\fIn\fR 4 .IX Item "-fmessage-length=n" تلاش می‌کند پیام‌های خطا را به‌گونه‌ای قالب‌بندی کند که در خطوطی با حدود \&\fIn\fR نویسه جا شوند. اگر \fIn\fR صفر باشد، هیچ شکست خطی انجام نمی‌شود؛ هر پیام خطا در یک خط نمایان می‌شود. این حالت پیش‌فرض برای تمامی فرانت‌اندها است. .Sp نکته \- این گزینه همچنین بر نمایش دستورات پیش‌پردازندهٔ \fB#error\fR و \&\fB#warning\fR، و ویژگی \fBdeprecated\fR برای توابع/انواع/متغیرها تأثیر می‌گذارد. با این حال، بر پراگماهای \&\fBpragma GCC warning\fR و \fBpragma GCC error\fR تأثیری ندارد. .IP \fB\-fdiagnostics\-plain\-output\fR 4 .IX Item "-fdiagnostics-plain-output" این گزینه درخواست می‌کند خروجی تشخیصی تا حد امکان ساده باشد، که ممکن است هنگام اجرای \fBdejagnu\fR یا ابزارهای دیگری که نیاز به تجزیهٔ خروجی تشخیصی دارند و ترجیح می‌دهند این خروجی در گذر زمان پایدارتر بماند، مفید باشد. \&\fB\-fdiagnostics\-plain\-output\fR در حال حاضر معادل گزینه‌های زیر است: \&\fB\-fno\-diagnostics\-show\-caret \&\-fno\-diagnostics\-show\-line\-numbers \&\-fdiagnostics\-color=never \&\-fdiagnostics\-urls=never \&\-fdiagnostics\-path\-format=separate\-events \&\-fdiagnostics\-text\-art\-charset=none \&\-fno\-diagnostics\-show\-event\-links\fR در آینده، اگر GCC ظاهر پیش‌فرض پیام‌های تشخیصی خود را تغییر دهد، گزینهٔ متناظر برای غیرفعال کردن رفتار جدید به این فهرست افزوده خواهد شد. .IP \fB\-fdiagnostics\-show\-location=once\fR 4 .IX Item "-fdiagnostics-show-location=once" تنها در حالت شکست خط معنادار است. به گزارشگر پیام‌های تشخیصی دستور می‌دهد اطلاعات مکان در کد منبع را \fIیک‌بار\fR منتشر کند؛ بدین معنا که اگر پیامی برای قرار گرفتن در یک خط فیزیکی بیش از حد طولانی باشد و باید شکسته شود، اطلاعات مکان منبع دوباره و پشت سر هم (به عنوان پیشوند) در خطوط ادامه‌دار بعدی منتشر نخواهد شد. این رفتار پیش‌فرض است. .IP \fB\-fdiagnostics\-show\-location=every\-line\fR 4 .IX Item "-fdiagnostics-show-location=every-line" تنها در حالت شکست خط معنادار است. به گزارشگر پیام‌های تشخیصی دستور می‌دهد همان اطلاعات مکان در کد منبع را (به‌عنوان پیشوند) برای خطوط فیزیکی حاصل از فرآیند شکستن پیامی که بیش از حد برای قرار گرفتن در یک خط واحد طولانی است، منتشر کند. .IP \fB\-fdiagnostics\-color[=\fR\fIWHEN\fR\fB]\fR 4 .IX Item "-fdiagnostics-color[=WHEN]" .PD 0 .IP \fB\-fno\-diagnostics\-color\fR 4 .IX Item "-fno-diagnostics-color" .PD استفاده از رنگ در پیام‌های تشخیصی. مقدار \fIWHEN\fR می‌تواند \fBnever\fR، \fBalways\fR یا \fBauto\fR باشد. مقدار پیش‌فرض به نحوهٔ پیکربندی کامپایلر بستگی دارد، می‌تواند هر یک از گزینه‌های \fIWHEN\fR در بالا باشد یا اگر متغیر محیطی \&\fBGCC_COLORS\fR در محیط وجود نداشته باشد، برابر با \fBnever\fR و در غیر این صورت \fBauto\fR باشد. مقدار \&\fBauto\fR باعث می‌شود GCC تنها زمانی از رنگ استفاده کند که خروجی خطای استاندارد یک پایانه باشد، و در پوستهٔ emacs اجرا نشود. فرم‌های \fB\-fdiagnostics\-color\fR و \fB\-fno\-diagnostics\-color\fR به‌ترتیب نام‌های مستعاری برای \fB\-fdiagnostics\-color=always\fR و \&\fB\-fdiagnostics\-color=never\fR هستند. .Sp رنگ‌ها توسط متغیر محیطی \fBGCC_COLORS\fR تعریف می‌شوند. مقدار آن فهرستی جداشده با دونقطه از قابلیت‌ها و زیررشته‌های Select Graphic Rendition (SGR) است. دستورات SGR توسط پایانه یا شبیه‌ساز پایانه تفسیر می‌شوند. (برای مقادیر مجاز و معانی آن‌ها به‌عنوان مشخصه‌های نویسه، بخش مربوطه در مستندات پایانه متنی خود را ببینید.) این مقادیر زیررشته، اعداد صحیحی در مبنای ده هستند و می‌توان آن‌ها را با نقطه‌ویرگول پیوند داد. مقادیر متداول برای ترکیب کردن شامل موارد زیر هستند: \&\fB1\fR برای توپر (bold)، \&\fB4\fR برای خط زیرین (underline)، \&\fB5\fR برای چشمک‌زن (blink)، \&\fB7\fR برای معکوس (inverse)، \&\fB39\fR برای رنگ پیش‌زمینهٔ پیش‌فرض، \&\fB30\fR تا \fB37\fR برای رنگ‌های پیش‌زمینه، \&\fB90\fR تا \fB97\fR برای رنگ‌های پیش‌زمینهٔ حالت ۱۶ رنگ، \&\fB38;5;0\fR تا \fB38;5;255\fR برای رنگ‌های پیش‌زمینهٔ حالت‌های ۸۸ رنگ و ۲۵۶ رنگ، \&\fB49\fR برای رنگ پس‌زمینهٔ پیش‌فرض، \&\fB40\fR تا \fB47\fR برای رنگ‌های پس‌زمینه، \&\fB100\fR تا \fB107\fR برای رنگ‌های پس‌زمینهٔ حالت ۱۶ رنگ، و \fB48;5;0\fR تا \fB48;5;255\fR برای رنگ‌های پس‌زمینهٔ حالت‌های ۸۸ رنگ و ۲۵۶ رنگ. .Sp مقدار پیش‌فرض \fBGCC_COLORS\fR عبارت است از: .Sp .Vb 5 \& error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e \& quote=01:path=01;36:fixit\-insert=32:fixit\-delete=31:\e \& diff\-filename=01:diff\-hunk=32:diff\-delete=31:diff\-insert=32:\e \& type\-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32\e \& highlight\-a=01;32:highlight\-b=01;34 .Ve .Sp که در آن \fB01;31\fR قرمز توپر، \fB01;35\fR ارغوانی توپر، \&\fB01;36\fR فیروزه‌ای توپر، \fB32\fR سبز، \fB34\fR آبی، \&\fB01\fR توپر، و \fB31\fR قرمز است. تنظیم \fBGCC_COLORS\fR روی یک رشتهٔ خالی، رنگ‌ها را غیرفعال می‌کند. قابلیت‌های پشتیبانی‌شده به شرح زیر هستند. .RS 4 .ie n .IP """error=""" 4 .el .IP \f(CWerror=\fR 4 .IX Item "error=" زیررشتهٔ SGR برای نشانگرهای :error. .ie n .IP """warning=""" 4 .el .IP \f(CWwarning=\fR 4 .IX Item "warning=" زیررشتهٔ SGR برای نشانگرهای :warning. .ie n .IP """note=""" 4 .el .IP \f(CWnote=\fR 4 .IX Item "note=" زیررشتهٔ SGR برای نشانگرهای :note. .ie n .IP """path=""" 4 .el .IP \f(CWpath=\fR 4 .IX Item "path=" زیررشتهٔ SGR برای رنگ‌آمیزی مسیرهای رخدادهای جریان کنترل که از طریق \&\fB\-fdiagnostics\-path\-format=\fR چاپ می‌شوند، مانند شناسه‌های رخدادهای منفرد و خطوط نشان‌دهندهٔ فراخوانی‌ها و بازگشت‌های بین‌روالی. .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 برای سرآیند نام فایل درون وصله‌های تولیدشده. .ie n .IP """diff\-hunk=""" 4 .el .IP \f(CWdiff\-hunk=\fR 4 .IX Item "diff-hunk=" زیررشتهٔ SGR برای آغاز قطعات (hunks) در وصله‌های تولیدشده. .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]" استفاده از توالی‌های گریز (escape sequences) برای گنجاندن URLها در پیام‌های تشخیصی. برای نمونه، هنگامی که \&\fB\-fdiagnostics\-show\-option\fR متنی را نمایش می‌دهد که گزینهٔ خط فرمانیِ کنترل‌کنندهٔ یک پیام تشخیصی را مشخص می‌کند، یک URL برای مستندات آن گزینه تعبیه می‌شود. .Sp مقدار \fIWHEN\fR می‌تواند \fBnever\fR، \fBalways\fR یا \fBauto\fR باشد. مقدار \fBauto\fR باعث می‌شود GCC توالی‌های گریز URL را تنها زمانی به کار ببرد که خطای استاندارد (standard error) یک ترمینال باشد، و کامپایلر درون یک پوستهٔ 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) را پس از چاپ هرگونه پیام عیب‌یابی، در قالب unified diff روی stderr چاپ می‌کند. برای مثال: .Sp .Vb 3 \& \-\-\- test.c \& +++ test.c \& @ \-42,5 +42,5 @ \& \& void show_cb(GtkDialog *dlg) \& { \& \- gtk_widget_showall(dlg); \& + gtk_widget_show_all(dlg); \& } .Ve .Sp این diff ممکن است بسته به همان قواعد مربوط به پیام‌های عیب‌یابی، رنگی باشد یا نباشد (ببینید \fB\-fdiagnostics\-color\fR). .IP \fB\-fdiagnostics\-show\-template\-tree\fR 4 .IX Item "-fdiagnostics-show-template-tree" در فرانت‌اند C++، هنگام چاپ پیام‌های عیب‌یابی که عدم تطابق نوع‌های الگو (template) را نشان می‌دهند، مانند: .Sp .Vb 2 \& could not convert \*(Aqstd::map >()\*(Aq \& from \*(Aqmap<[...],vector>\*(Aq to \*(Aqmap<[...],vector> .Ve .Sp پرچم \fB\-fdiagnostics\-show\-template\-tree\fR امکان چاپ یک ساختار درخت‌مانند را فعال می‌کند که بخش‌های مشترک و متفاوت نوع‌ها را نشان می‌دهد، مانند: .Sp .Vb 4 \& map< \& [...], \& vector< \& [double != float]>> .Ve .Sp بخش‌هایی که تفاوت دارند با رنگ برجسته می‌شوند (در این مورد "double" و "float"). .IP \fB\-fno\-elide\-type\fR 4 .IX Item "-fno-elide-type" به‌طور پیش‌فرض، زمانی که فرانت‌اند C++ پیام‌های عیب‌یابیِ نشان‌دهنده عدم تطابق نوع‌های الگو را چاپ می‌کند، بخش‌های مشترک نوع‌ها به‌صورت "[...]" چاپ می‌شوند تا پیام خطا ساده‌تر شود. برای مثال: .Sp .Vb 2 \& could not convert \*(Aqstd::map >()\*(Aq \& from \*(Aqmap<[...],vector>\*(Aq to \*(Aqmap<[...],vector> .Ve .Sp مشخص کردن پرچم \fB\-fno\-elide\-type\fR این رفتار را لغو می‌کند. این پرچم همچنین بر خروجی پرچم \&\fB\-fdiagnostics\-show\-template\-tree\fR تأثیر می‌گذارد. .IP \fB\-fdiagnostics\-path\-format=\fR\fIKIND\fR 4 .IX Item "-fdiagnostics-path-format=KIND" چگونگی چاپ مسیرهای رخدادهای جریان کنترل (control\-flow) را برای پیام‌های عیب‌یابی که چنین مسیری به آن‌ها مرتبط است، مشخص می‌کند. .Sp مقدارهای ممکن برای \&\fIKIND\fR عبارتند از \fBnone\fR، \fBseparate\-events\fR، یا مقدار پیش‌فرض \fBinline\-events\fR. .Sp مقدار \&\fBnone\fR به معنای چاپ نکردن مسیرهای عیب‌یابی است. .Sp مقدار \&\fBseparate\-events\fR به این معنی است که برای هر رخداد در پیام عیب‌یابی، یک پیام یادداشت ("note") جداگانه چاپ شود. برای مثال: .Sp .Vb 4 \& test.c:29:5: error: passing NULL as argument 1 to \*(AqPyList_Append\*(Aq which requires a non\-NULL parameter \& test.c:25:10: note: (1) when \*(AqPyList_New\*(Aq fails, returning NULL \& test.c:27:3: note: (2) when \*(Aqi < count\*(Aq \& test.c:29:5: note: (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1 .Ve .Sp مقدار \&\fBinline\-events\fR به این معنی است که رخدادها به‌صورت درون‌خطی ("inline") در داخل کد منبع چاپ شوند. این نما تلاش می‌کند تا رخدادها را در قالب توالی‌هایی از رخدادهای به‌اندازه کافی نزدیک به هم تجمیع کند و آن‌ها را به‌صورت محدوده‌های برچسب‌دار درون کد منبع نمایش دهد. .Sp برای مثال، همان رخدادهای بالا ممکن است به این شکل چاپ شوند: .Sp .Vb 10 \& \*(Aqtest\*(Aq: events 1\-3 \& 25 | list = PyList_New(0); \& | ^~~~~~~~~~~~~ \& | | \& | (1) when \*(AqPyList_New\*(Aq fails, returning NULL \& 26 | \& 27 | for (i = 0; i < count; i++) { \& | ~~~ \& | | \& | (2) when \*(Aqi < count\*(Aq \& 28 | item = PyLong_FromLong(random()); \& 29 | PyList_Append(list, item); \& | ~~~~~~~~~~~~~~~~~~~~~~~~~ \& | | \& | (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1 .Ve .Sp جریان کنترل بین‌روالی (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) ممکن است بزرگ‌تر از تعداد بایت‌های مورد نیاز برای کدگذاری نویسه باشد، یا در مورد نویسه‌های چندبایتی، ممکن است کوچک‌تر باشد. برای مثال، نویسه «GREEK SMALL LETTER PI (U+03C0)» یک ستون نمایشی را اشغال می‌کند و کدگذاری UTF\-8 آن به دو بایت نیاز دارد؛ نویسه «SLIGHTLY SMILING FACE (U+1F642)» دو ستون نمایشی را اشغال می‌کند و کدگذاری UTF\-8 آن به چهار بایت نیاز دارد. .Sp تنظیم \fIUNIT\fR روی \fBbyte\fR شماره ستون را در تمام موارد به شمارش خام بایت‌ها تغییر می‌دهد، همان‌طور که به‌طور سنتی در نسخه‌های قبل از 11.1.0 در GCC خروجی داده می‌شد..IP \fB\-fdiagnostics\-column\-origin=\fR\fIORIGIN\fR 4 .IX Item "-fdiagnostics-column-origin=ORIGIN" مبدا شماره‌گذاری ستون‌ها، یعنی شماره ستونی که به نخستین ستون اختصاص داده می‌شود را مشخص می‌کند. مقدار پیش‌فرض ۱ با رفتار سنتی GCC و راهنمای نگارش GNU مطابقت دارد. برخی ابزارها ممکن است با مبدا ۰ عملکرد بهتری داشته باشند؛ هر مقدار غیرمنفی می‌تواند مشخص شود. .IP \fB\-fdiagnostics\-escape\-format=\fR\fIFORMAT\fR 4 .IX Item "-fdiagnostics-escape-format=FORMAT" هنگامی که GCC خطوط سورس مرتبط با یک پیام تشخیصی را چاپ می‌کند، معمولاً سعی می‌کند بایت‌های سورس را مستقیماً چاپ کند. با این حال، برخی از پیام‌های تشخیصی مربوط به مشکلات کدگذاری (encoding) در فایل سورس هستند، مانند بایت‌های ناهنجار UTF\-8 یا مشکلات مرتبط با نرمال‌سازی یونیکد. این پیام‌ها نشانه‌گذاری می‌شوند تا GCC هنگام چاپ خطوط سورس مرتبط با آن‌ها، بایت‌هایی را که نویسه‌های اسکی (ASCII) قابل‌چاپ نیستند نویسه‌گردانی (escape) کند. .Sp این گزینه نحوه نویسه‌گردانی این بایت‌ها را کنترل می‌کند. .Sp مقدار پیش‌فرض \fIFORMAT\fR، یعنی \fBunicode\fR، نویسه‌های یونیکدی را که اسکی قابل‌چاپ نیستند به شکل \fB\fR نمایش می‌دهد، و بایت‌هایی که با یک نویسه یونیکد با کدگذاری معتبر UTF\-8 مطابقت ندارند، به صورت هگزادسیمال در قالب \fB\fR نمایش داده خواهند شد. .Sp برای نمونه، یک خط سورس شامل رشته \fBbefore\fR به همراه نویسه یونیکد U+03C0 ("GREEK SMALL LETTER PI" با کدگذاری UTF\-8 به صورت 0xCF 0x80) و به دنبال آن بایت 0xBF (یک بایت پایانی سرگردان در UTF\-8) و سپس رشته \fBafter\fR، برای چنین پیام تشخیصی به شکل زیر چاپ خواهد شد: .Sp .Vb 1 \& beforeafter .Ve .Sp تنظیم \fIFORMAT\fR روی \fBbytes\fR تمامی بایت‌های غیرقابل‌چاپ اسکی را به شکل \fB\fR نمایش می‌دهد؛ در نتیجه ساختار کدگذاری زیرینِ نویسه‌های یونیکد غیر اسکی را نشان می‌دهد. برای مثال بالا، خروجی به صورت زیر چاپ خواهد شد: .Sp .Vb 1 \& before<80>after .Ve .IP \fB\-fdiagnostics\-text\-art\-charset=\fR\fICHARSET\fR 4 .IX Item "-fdiagnostics-text-art-charset=CHARSET" برخی پیام‌های تشخیصی می‌توانند شامل نمودارهای «هنر متنی» (text art) باشند: ترسیم‌های بصری ساخته‌شده از متن که برای نمایش با قلم‌های تک‌عرض (monospaced) در نظر گرفته شده‌اند. .Sp این گزینه مشخص می‌کند در صورت وجود، چه نویسه‌هایی برای چاپ چنین نمودارهایی استفاده شود. \fICHARSET\fR می‌تواند یکی از مقادیر \fBnone\fR، \fBascii\fR، \fBunicode\fR یا \fBemoji\fR باشد. .Sp مقدار \fBnone\fR از چاپ چنین نمودارهایی جلوگیری می‌کند. مقدار \fBascii\fR تضمین می‌کند که این نمودارها کاملاً از نویسه‌های اسکی («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 استفاده از این گزینه، تمامی «مقصدهای خروجی» (output sinks) اضافی افزوده‌شده توسط \&\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 منسوخ (deprecated) شده‌اند و به یک قالب خروجی قدیمی بر پایه 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" یک «مقصد خروجی» (output sink) دیگر برای ارسال پیام‌های تشخیصی اضافه می‌کند. .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 را برای این خروجی متنی بازنویسی (override) می‌کند. .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 برای حذف این فاصله‌های خالی استفاده کنید. این گزینه باید پیش از گزینه‌ای که قرار است بر آن تأثیر بگذارد، مشخص شود. .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 را فعال کند. اثر ترکیبی فرم‌های مثبت و منفی این است که گزینه‌های خاص‌تر، مستقل از موقعیتشان در خط فرمان، بر گزینه‌های عمومی‌تر اولویت دارند. برای گزینه‌هایی با درجهٔ اختصاصی یکسان، آخرین گزینه اعمال می‌شود. گزینه‌هایی که از طریق عملگرهای ساختاریافته (pragma) فعال یا غیرفعال می‌شوند، به‌گونه‌ای اعمال می‌شوند که گویی در انتهای خط فرمان ظاهر شده‌اند. .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 آغاز و پایان می‌یابد، هشداری صادر نمی‌کند. این قالب جایگزین همچنین می‌تواند برای غیرفعال کردن هشدارها برای انواع غیر استاندارد \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 نشان‌دهنده یک لهجهٔ گسترش‌یافتهٔ گنو از C باشد (مانند \fBgnu90\fR یا \fBgnu99\fR)، یک \fIاستاندارد پایه\fR (base standard) متناظر وجود دارد، یعنی همان نسخه از ISO C که لهجهٔ گسترش‌یافته گنو بر پایه آن شکل گرفته است. هشدارهای ناشی از \fB\-Wpedantic\fR در جایی صادر می‌شوند که توسط استاندارد پایه الزامی شده باشند. (منطقی نیست که چنین هشدارهایی تنها برای قابلیت‌هایی صادر شوند که در لهجهٔ مشخص‌شدهٔ گنو سی وجود ندارند، زیرا طبق تعریف، لهجه‌های گنو از 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 قرار می‌گیرند هشدار می‌دهد. این شامل کدهایی است که ممکن است با ABI مستقل از سازنده ++C یا psABI مربوط به معماری هدف خاص سازگار نباشند. هشدارهای مربوط به مورد دوم همچنین به‌طور جداگانه توسط \fB\-Wpsabi\fR کنترل می‌شوند که توسط \fB\-Wabi\fR نیز اعمال می‌گردد. .Sp از آنجا که اکنون رفتار پیش‌فرض ++G به‌روزرسانی ABI با هر انتشار اصلی است، به‌طور معمول \fB\-Wabi\fR تنها زمانی درباره مشکلات سازگاری ABI زبان ++C هشدار می‌دهد که در یک سری از انتشارها پس از انتشار اولیه، بررسی جدیدی برای یک مشکل ABI کشف‌شده اضافه شده باشد. در صورتی که یک نسخه قدیمی‌تر ABI انتخاب شود (با \&\fB\-fabi\-version=\fR\fIn\fR)، گزینه \fB\-Wabi\fR درباره موارد بیشتری هشدار می‌دهد. .Sp \&\fB\-Wabi\fR همچنین می‌تواند با یک شماره نسخه صریح برای هشدار درباره سازگاری ABI زبان ++C با یک سطح معین از \fB\-fabi\-version\fR به کار رود، برای نمونه \fB\-Wabi=2\fR جهت هشدار درباره تغییرات نسبت به \&\fB\-fabi\-version=2\fR. .Sp اگر یک شماره نسخه صریح ارائه شده باشد و \&\fB\-fabi\-compat\-version\fR مشخص نشده باشد، شماره نسخه حاصل از این گزینه برای نام‌های مستعار سازگاری به کار می‌رود. اگر هیچ شماره نسخه صریحی با این گزینه داده نشود، اما \&\fB\-fabi\-compat\-version\fR تعیین شده باشد، آن شماره نسخه برای هشدارهای ABI در ++C استفاده می‌شود. .Sp اگرچه تلاش شده است درباره تمام این موارد هشدار داده شود، احتمالاً مواردی وجود دارد که علیرغم تولید کد ناسازگار توسط ++G، هشداری صادر نمی‌شود. همچنین ممکن است مواردی پیش آید که با وجود سازگار بودن کد تولیدشده، هشدار صادر گردد. .Sp اگر نگران این موضوع هستید که کد تولیدشده توسط ++G ممکن است در سطح باینری (binary compatible) با کدهای تولیدشده توسط سایر کامپایلرها سازگار نباشد، باید کد خود را برای اجتناب از این هشدارها بازنویسی کنید. .Sp ناسازگاری‌های شناخته‌شده در \fB\-fabi\-version=2\fR (که از GCC 3.4 تا 4.9 حالت پیش‌فرض بود) شامل موارد زیر است: .RS 4.IP * 4 الگویی با یک پارامتر الگوی غیرنوعی از نوع مرجع به‌طور نادرست درهم‌سازی می‌شد: .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 تعریف شده بودند، به روشی غیر استاندارد درهم‌سازی می‌شدند که اجازه سربارگذاری (overloading) توابعی با بردارها در اندازه‌های مختلف را نمی‌داد. .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 باشد، هشدار می‌دهد. این یکی از عوامل رایج خطا است، زیرا برنامه‌نویسان اغلب فراموش می‌کنند که این نوع در برخی ماشین‌ها علامت‌دار است. این هشدار توسط \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" در صورتی که به دلیل ماکروهای نامعتبرِ شماره خط، تابعی زودتر از شروع شدنش به پایان برسد، هشدار می‌دهد. این هشدار تنها با فعال بودن \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 ترفیع می‌یابد، هشدار می‌دهد. پردازنده‌هایی با واحد ممیز شناور ۳۲ بیتی «دقت یگانه»، نوع \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 و غیره را بررسی می‌کند تا مطمئن شود نوع آرگومان‌های داده‌شده با رشته قالب مشخص‌شده مطابقت دارند، و تبدیلات مشخص‌شده در رشته قالب منطقی هستند. این شامل توابع استاندارد و سایر توابع مشخص‌شده توسط ویژگی‌های format، در خانواده‌های \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 وجود ندارد) (یا سایر خانواده‌های مختص معماری مقصد) می‌شود. این‌که کدام توابع بدون مشخص شدن ویژگی‌های format بررسی شوند به نسخه استاندارد انتخاب‌شده بستگی دارد، و بررسی چنین توابعی بدون صفت مذکور توسط \&\fB\-ffreestanding\fR یا \fB\-fno\-builtin\fR غیرفعال می‌شود. .Sp قالب‌ها بر اساس قابلیت‌های قالب‌بندی پشتیبانی‌شده توسط GNU libc نسخه 2.2 بررسی می‌شوند. این قابلیت‌ها شامل تمامی ویژگی‌های استاندارد ISO C90 و C99 و همچنین ویژگی‌هایی از Single Unix Specification و برخی الحاقات 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 Specification می‌گوید چنین آرگومان‌های استفاده‌نشده‌ای مجاز هستند. .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 مشخص شده باشد، همچنین در صورتی که رشتهٔ قالب نیازمند یک آرگومان بدون علامت (unsigned) باشد و آرگومان علامت‌دار (signed) باشد، و برعکس، هشدار می‌دهد. .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 که ممکن است به بریده‌شدن خروجی (truncation) منجر شوند، هشدار می‌دهد. هنگامی که تعداد دقیق بایت‌های نوشته‌شده توسط یک راهنمای قالب در زمان کامپایل قابل تعیین نباشد، بر اساس روش‌های اکتشافی که به آرگومان \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 pointer) برای آرگومان‌هایی که با مشخصهٔ تابع \f(CW\*(C`nonnull\*(C'\fR به عنوان نیازمند مقدار غیرتهی علامت‌گذاری شده‌اند، هشدار می‌دهد. .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" اگر کامپایلر مسیرهایی را تشخیص دهد که به دلیل ارجاع‌زدایی یک اشاره‌گر تهی رفتار نادرست یا تعریف‌نشده (undefined behavior) ایجاد می‌کنند، هشدار می‌دهد. این گزینه تنها زمانی فعال است که \fB\-fdelete\-null\-pointer\-checks\fR فعال باشد، که در بیشتر هدف‌ها (targets) توسط بهینه‌سازی‌ها فعال می‌شود. دقت این هشدارها به گزینه‌های بهینه‌سازیِ استفاده‌شده بستگی دارد. .IP \fB\-Wno\-musttail\-local\-addr\fR 4 .IX Item "-Wno-musttail-local-addr" دربارهٔ ارسال یک اشاره‌گر (یا در ++C، یک ارجاع) به متغیر محلی یا برچسب به عنوان آرگومان یک فراخوانی \f(CW\*(C`musttail\*(C'\fR هشدار نمی‌دهد. این متغیرها پیش از دستور فراخوانی دم (tail call instruction) از حوزه (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)" اگر کامپایلر رونوشت (copy) از یک متغیر محلی به مقدار بازگشتی یک تابع را در زمینه‌ای که طبق [class.copy.elision] مجاز است حذف نکند (elide نکند)، هشدار می‌دهد. این حذف رونوشت معمولاً به عنوان «بهینه‌سازی مقدار بازگشتی نام‌گذاری‌شده» (Named Return Value Optimization یا NRVO) شناخته می‌شود. برای نمونه، در مثال زیر کامپایلر نمی‌تواند رونوشت‌ها را از هر دوی 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)" این گزینه هشدارهای مربوط به زمانی را که یک اعلان (declaration) نوعی را مشخص نمی‌کند، کنترل می‌کند. این هشدار به طور پیش‌فرض، به صورت یک خطا، در 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" هنگامی که یک مورد switch به مورد بعدی سرریز می‌کند (falls through)، هشدار می‌دهد. برای نمونه: .Sp .Vb 11 \& switch (cond) \& { \& case 1: \& a = 1; \& break; \& case 2: \& a = 2; \& case 3: \& a = 3; \& break; \& } .Ve .Sp این هشدار زمانی که آخرین دستور یک مورد نتواند سرریز کند هشدار نمی‌دهد؛ برای نمونه زمانی که یک دستور 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 مطلوب است، 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 به‌جای صفت GNU فراهم شده است. در C++11 یا C++14 کاربران می‌توانند از \f(CW\*(C`[[gnu::fallthrough]];\*(C'\fR که یک افزونهٔ GNU است استفاده کنند. به‌جای این صفت‌ها، همچنین امکان افزودن یک کامنت 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)" اگر نوع بازگشتی یک تابع دارای یک توصیف‌گر نوع مانند \f(CW\*(C`const\*(C'\fR باشد، هشدار می‌دهد. برای ISO C چنین توصیف‌گر نوعی اثری ندارد، چرا که مقدار بازگردانده‌شده توسط یک تابع یک lvalue نیست. برای C++، این هشدار تنها برای انواع اسکالر یا \f(CW\*(C`void\*(C'\fR صادر می‌شود. استاندارد ISO C انواع بازگشتی مقیدشدهٔ \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 در مثال زیر، فراخوانی «bar» به‌طور گمراه‌کننده‌ای دارای تورفتگی است، به‌گونه‌ای که گویی توسط شرط «if» محافظت شده است. .Sp .Vb 3 \& if (some_condition ()) \& foo (); \& bar (); /* Gotcha: this is not guarded by the "if". */ .Ve .Sp در صورت ترکیب تب‌ها و فاصله‌ها، این هشدار از گزینهٔ \fB\-ftabstop=\fR برای تعیین هم‌تراز بودن دستورها استفاده می‌کند (پیش‌فرض ۸ است). .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" زمانی که در اعلان یک تابع، یک یا چند صفت که تابع مرتبط با آن اعلان شده وجود نداشته باشد و نبودِ آن‌ها بتواند بر درستی یا کارایی کد تولیدشده اثر منفی بگذارد، هشدار می‌دهد. برای نمونه، این هشدار برای اعلان‌های نام‌های مستعار صادر می‌شود که از صفت‌ها برای تعیین الزاماتی با محدودیت کمتر نسبت به اهداف خود استفاده می‌کنند. این امر معمولاً نشان‌دهندهٔ یک فرصت بهینه‌سازی بالقوه است. در مقابل، گزینهٔ \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) از یک الگوی پایه که با صفت \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 این هشدار توسط \fB\-Wall\fR در C و C++ فعال می‌شود. .IP \fB\-Wparentheses\fR 4 .IX Item "-Wparentheses" اگر پرانتزها در زمینه‌های خاصی حذف شده باشند، مانند زمانی که در بستری که مقدار بولی (درستی/نادرستی) مورد انتظار است یک انتساب انجام شده باشد، یا هنگامی که عملگرهایی تو در تو شده باشند که تقدم آن‌ها معمولاً افراد را دچار سردرگمی می‌کند، هشدار می‌دهد. .Sp همچنین اگر مقایسه‌ای مانند \f(CW\*(C`x<=y<=z\*(C'\fR ظاهر شود هشدار می‌دهد؛ این عبارت معادل \f(CW\*(C`(x<=y ? 1 : 0) <= z\*(C'\fR است که با نمادگذاری معمول ریاضی تفسیر متفاوتی دارد. .Sp همچنین در مورد استفاده‌های خطرناک از افزونهٔ GNU برای عملگر \f(CW\*(C`?:\*(C'\fR با عملوند میانی حذف‌شده هشدار می‌دهد. هنگامی که شرط در عملگر \f(CW\*(C`?\*(C'\fR: یک عبارت بولی باشد، مقدار حذف‌شده همیشه ۱ است. در حالی که برنامه‌نویسان اغلب انتظار دارند این مقدار، مقداری باشد که در داخل عبارت شرطی محاسبه شده است. .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 points) در استانداردهای C و C++ رفتار معنایی تعریف‌نشده‌ای داشته باشند، هشدار می‌دهد. .Sp استانداردهای C و C++ ترتیب ارزیابی عبارات را در یک برنامه بر حسب \fIنقاط توالی\fR تعریف می‌کنند؛ نقاطی که نمایانگر یک ترتیب جزئی (partial ordering) بین اجرای بخش‌هایی از برنامه هستند: بخش‌هایی که قبل از نقطه توالی اجرا می‌شوند، و بخش‌هایی که پس از آن اجرا می‌گردند. این نقاط پس از ارزیابی یک عبارت کامل (عبارتی که بخشی از یک عبارت بزرگ‌تر نیست)، پس از ارزیابی اولین عملوند از عملگرهای \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++، یک ارجاع) به متغیری که پس از بازگشت تابع از دامنه (scope) خارج می‌شود، هشدار نده. .IP \fB\-Wreturn\-mismatch\fR 4 .IX Item "-Wreturn-mismatch" درباره دستورهای return بدون عبارت در توابعی که \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 فعال باشد که اولویت دارد). همچنین اگر ممکن باشد جریان اجرا به انتهای بدنه تابع برسد، یا اگر تابع اصلاً حاوی هیچ دستور return نباشد، هشدار بده. .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، حتی اگر از مقدار بازگشتی تابع استفاده نشود، منجر به رفتار تعریف‌نشده (undefined behavior) خواهد شد. .Sp این هشدار به طور پیش‌فرض در C++ و در غیر این صورت با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-shift\-count\-negative\fR 4 .IX Item "-Wno-shift-count-negative" هشدارهای مربوط به منفی بودن مقدار شیفت (shift count) را کنترل می‌کند. این هشدار به طور پیش‌فرض فعال است. .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) باشد و فاقد \f(CW\*(C`case\*(C'\fR برای یک یا چند کد نام‌گذاری‌شده از آن نوع شمارشی باشد، هشدار بده. (وجود برچسب \f(CW\*(C`default\*(C'\fR مانع از این هشدار می‌شود.) برچسب‌های \f(CW\*(C`case\*(C'\fR که متناظر با مقادیر شمارنده نیستند نیز هنگام استفاده از این گزینه باعث ایجاد هشدار می‌شوند، مگر اینکه آن نوع شمارشی با صفت \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 خارج از محدوده نوع بولی هستند، هشدار نده. می‌توان این هشدار را با تبدیل نوع عبارت کنترلی به نوعی غیر از \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 نتواند متغیر خودکار (automatic) را مقداردهی اولیه کند، هشدار بده. یک وضعیت رایج، متغیر خودکاری است که بین عبارت کنترلی و اولین برچسب 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) اعلان شود اما تعریف نشود، یا یک تابع ایستای غیردرون‌خطی (non-inline) بلااستفاده بماند، هشدار بده. این هشدار با \fB\-Wall\fR فعال می‌شود..IP \fB\-Wunused\-label\fR 4 .IX Item "-Wunused-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" هرگاه یک متغیر محلی یا ایستا صرف‌نظر از اعلانش بدون استفاده بماند، هشدار می‌دهد. این گزینه برای 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 هرگاه یک متغیر ثابت ایستا صرف‌نظر از اعلانش بدون استفاده بماند، هشدار می‌دهد. .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 اعلان‌شده در هر سرایند پیوست‌شده (include شده). .Sp \&\fB\-Wunused\-const\-variable=1\fR توسط \&\fB\-Wunused\-variable\fR یا \fB\-Wunused\fR برای C فعال می‌شود، اما نه برای C++. در C این کار فضای ذخیره‌سازی متغیر را اعلان می‌کند، اما در C++ این یک خطا نیست زیرا متغیرهای const جایگزین \f(CW\*(C`#define\*(C'\fRها می‌شوند. .IP \fB\-Wunused\-const\-variable=2\fR 4 .IX Item "-Wunused-const-variable=2" این سطح هشدار همچنین برای متغیرهای ثابت ایستای بدون استفاده در سرایندها (به‌استثنای سرایندهای سیستم) هشدار می‌دهد. این معادل شکل کوتاه \&\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 تبدیل نوع کنید. این شامل یک عبارت\-دستور یا سمت چپ یک عبارت کاما است که هیچ اثر جانبی ندارد. برای نمونه، عبارتی مانند \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\fR تنها \fB\-Wunused\-const\-variable=1\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 نامعین شده‌اند را تشخیص دهد، فارغ از اینکه آیا فراخوانی منجر به تخصیص مجدد واقعی حافظه شده است یا خیر. این شامل فراخوانی‌های مضاعف \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)" زمانی که یک عبارت به نوع خودش تبدیل شود، هشدار می‌دهد. این هشدار هنگامی که یک شیء کلاس به یک نوع غیرمرجع تبدیل شود رخ نمی‌دهد، زیرا آن روشی برای ایجاد یک مقدار موقت (temporary) است: .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++، همچنین اگر یک مرجع غیرایستا یا عضو \f(CW\*(C`const\*(C'\fR غیرایستا در کلاسی بدون سازنده ظاهر شود، هشدار می‌دهد. .Sp علاوه بر این، ارسال یک اشاره‌گر (یا در C++، یک مرجع) به یک شیء مقداردهی‌نشده به آرگومان مقید به \f(CW\*(C`const\*(C'\fR از یک تابع توکار (built-in) که مشخص است شیء را می‌خواند نیز توسط این هشدار تشخیص داده می‌شود. (برای توابع معمولی، \fB\-Wmaybe\-uninitialized\fR صادر می‌شود.) .Sp اگر می‌خواهید درباره کدی که از مقدار مقداردهی‌نشدهٔ متغیر در مقداردهی اولیهٔ خودش استفاده می‌کند هشدار داده شود، از گزینهٔ \fB\-Winit\-self\fR استفاده کنید. .Sp این هشدارها هم برای تک‌تک عناصر مقداردهی‌نشدهٔ متغیرهای ساختار، اجتماع یا آرایه و هم برای متغیرهایی که در کل مقداردهی اولیه نشده‌اند رخ می‌دهند. آن‌ها برای متغیرها یا عناصری که به صورت \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++، یک ارجاع) به شیء مقداردهی‌نشده به آرگومان تابعی با صلاحیت \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 همیشه ۱، ۲ یا ۳ باشد، آنگاه \f(CW\*(C`x\*(C'\fR همیشه مقداردهی می‌شود، اما GCC این موضوع را نمی‌داند. برای فرونشاندن هشدار، باید یک حالت پیش‌فرض (default) با دستور \fBassert\fR\|(0) یا کدی مشابه ارائه دهید. .Sp این گزینه همچنین زمانی هشدار می‌دهد که یک متغیر خودکارِ غیر فرار (non-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 قابل درک نیست، هشدار می‌دهد. اگر از این گزینه خط فرمان استفاده شود، هشدارها حتی برای پراگماهای ناشناخته در فایل‌های سرآیند سیستمی نیز صادر می‌شوند. این امر زمانی که هشدارها فقط از طریق گزینه \fB\-Wall\fR فعال شده باشند صادق نیست. .IP \fB\-Wno\-pragmas\fR 4 .IX Item "-Wno-pragmas" در مورد استفاده‌های نادرست از پراگماها، مانند پارامترهای نادرست، نحو نامعتبر یا تداخل بین پراگماها هشدار نمی‌دهد. همچنین ببینید: \&\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" در صورتی که از اولویتی بین ۰ تا ۱۰۰ برای سازنده (constructor) یا ویرانگر (destructor) استفاده شود، هشدار نمی‌دهد. استفاده از صفت‌های سازنده و ویرانگر به شما امکان می‌دهد برای کنترل ترتیب اجرای سازنده/ویرانگر قبل از فراخوانی \&\f(CW\*(C`main\*(C'\fR یا پس از بازگشت از آن، اولویتی اختصاص دهید. مقادیر اولویت باید بزرگتر از ۱۰۰ باشند زیرا کامپایلر مقادیر اولویت بین ۰ تا ۱۰۰ را برای پیاده‌سازی رزرو کرده است. .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 فعال باشد. این گزینه درباره کدهایی هشدار می‌دهد که ممکن است قواعد نام مستعار دقیق را که کامپایلر برای بهینه‌سازی استفاده می‌کند نقض کنند. سطوح بالاتر متناظر با دقت بیشتر (موارد مثبت کاذب کمتر) هستند. سطوح بالاتر همچنین متناظر با پردازش و تلاش بیشتر هستند، مشابه نحوه عملکرد \fB\-O\fR. گزینه \fB\-Wstrict\-aliasing\fR معادل \fB\-Wstrict\-aliasing=3\fR است. .Sp سطح ۱: تهاجمی‌ترین، سریع، کمترین دقت. احتمالاً زمانی مفید است که سطوح بالاتر هشدار نمی‌دهند اما \fB\-fstrict\-aliasing\fR همچنان کد را مختل می‌کند، زیرا این سطح موارد منفی کاذب بسیار کمی دارد. با این حال، موارد مثبت کاذب زیادی تولید می‌کند. برای تمام تبدیل‌های اشاره‌گر بین انواع احتمالاً ناسازگار، حتی اگر هرگز ارجاع‌زدایی (dereference) نشوند، هشدار می‌دهد. فقط در بخش فرانت‌اند اجرا می‌شود. .Sp سطح ۲: تهاجمی، سریع، نه چندان دقیق. ممکن است همچنان موارد مثبت کاذب زیادی داشته باشد (البته نه به اندازه سطح ۱)، و موارد منفی کاذب کمی دارد (اما احتمالاً بیشتر از سطح ۱). برخلاف سطح ۱، فقط زمانی هشدار می‌دهد که آدرسی گرفته شود. در مورد انواع ناقص (incomplete types) هشدار می‌دهد. فقط در فرانت‌اند اجرا می‌شود. .Sp سطح ۳ (پیش‌فرض برای \fB\-Wstrict\-aliasing\fR): باید موارد مثبت کاذب بسیار کم و موارد منفی کاذب اندکی داشته باشد. در صورت فعال بودن بهینه‌سازی، کمی کندتر از سطوح ۱ یا ۲ است. الگوی معمول تبدیل نوع (type punning) + ارجاع‌زدایی را در فرانت‌اند مدیریت می‌کند: \&\f(CW\*(C`*(int*)&some_float\*(C'\fR. اگر بهینه‌سازی فعال باشد، در بک‌اند نیز اجرا می‌شود؛ جایی که با استفاده از اطلاعات اشاره حساس به جریان (flow-sensitive points-to)، با موارد چند‌دستوری برخورد می‌کند. تنها زمانی هشدار می‌دهد که اشاره‌گر تبدیل‌شده ارجاع‌زدایی شود. در مورد انواع ناقص هشدار نمی‌دهد. .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 این گزینه تنها زمانی فعال است که سرریز علامت‌دار تعریف‌نشده باشد. این گزینه درباره مواردی هشدار می‌دهد که در آن‌ها کامپایلر بر اساس این فرض که سرریز علامت‌دار رخ نمی‌دهد بهینه‌سازی می‌کند. توجه داشته باشید که این گزینه درباره همه مواردی که ممکن است کد سرریز کند هشدار نمی‌دهد: بلکه فقط در مواردی هشدار می‌دهد که کامپایلر بهینه‌سازی خاصی را پیاده‌سازی کند. بنابراین این هشدار به سطح بهینه‌سازی بستگی دارد. .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 دربارهٔ کدهایی که می‌توان به صورت ایستا تشخیص داد باعث سرریز بافر یا دست‌اندازی به حافظه می‌شوند، مانند فراخوانی‌های \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)" دربارهٔ استفاده‌های نادرست از اعضای آرایهٔ منعطف، با توجه به \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 که اندازه‌ای ناکافی برای نوع مقصدِ اشاره‌گری که نتیجه به آن تخصیص می‌یابد مشخص می‌کنند، هشدار می‌دهد؛ از جمله شکل‌های توکارِ توابع \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 داده شود، کد بالا موجب ایجاد یک هشدار می‌شود، اما این بار به دلیل عدم بررسی محدوده‌ها. .Sp توجه داشته باشید که حتی کدهای به‌ظاهر درست که شامل اعداد صحیح علامت‌دار هستند نیز می‌توانند موجب صدور هشدار شوند: .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 تبدیل نوع شود. .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 به‌طور پیش‌فرض، آرایهٔ پایانی یک ساختار (structure) توسط \fB\-Warray\-bounds\fR یا \fB\-Warray\-bounds=\fR\fIn\fR به عنوان یک عضو آرایه‌ای انعطاف‌پذیر (flexible array member) در نظر گرفته می‌شود، در صورتی که بر اساس استاندارد C99 به بعد به عنوان عضو آرایه‌ای انعطاف‌پذیر (\fB[]\fR)، افزونهٔ آرایه با طول صفر در GCC (\fB[0]\fR)، یا یک آرایهٔ تک‌عضوی (\fB[1]\fR) اعلان شده باشد. در نتیجه، برای اندیس‌ها یا آفست‌های خارج از محدوده در آرایه‌های با طول صفر یا آرایه‌های تک‌عضوی، به‌طور پیش‌فرض هشداری صادر نمی‌شود. .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" این سطح هشدار همچنین دربارهٔ نتایج میانی محاسبات اشاره‌گر که ممکن است مقادیر خارج از محدوده تولید کنند هشدار می‌دهد. این سطح هشدار ممکن است تعداد بیشتری مثبت کاذب ایجاد کند و به‌طور پیش‌فرض غیرفعال است. .RE .RS 4 .RE .IP "\fB\-Wunterminated\-string\-initialization\fR (فقط C و Objective\-C)" 4 .IX Item "-Wunterminated-string-initialization (C and Objective-C only)" دربارهٔ آرایه‌های نویسه‌ای که با یک رشتهٔ لیتِرال به عنوان دنبالهٔ نویسه‌ای بدون پایان‌دهنده مقداردهی اولیه شده‌اند هشدار می‌دهد، مگر اینکه اعلانی که مقداردهی می‌شود دارای صفت \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 هشدارهایی را برای ناهمگونی‌های مشابه شامل آرگومان‌های آرایه با طول متغیر صادر می‌کند. .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 و مشخصه‌های مشابه استفاده می‌کنند در حالی که هدف آن‌ها با نوع alias ناسازگار است، هشدار می‌دهد. .RS 4 .IP \fB\-Wattribute\-alias=1\fR 4 .IX Item "-Wattribute-alias=1" سطح هشدار پیش‌فرض گزینهٔ \fB\-Wattribute\-alias\fR، ناسازگاری‌های میان نوع اعلان alias و نوع هدف آن را تشخیص می‌دهد. چنین ناسازگاری‌هایی معمولاً نشان‌دهندهٔ اشکالات برنامه‌نویسی (باگ‌ها) هستند. .IP \fB\-Wattribute\-alias=2\fR 4 .IX Item "-Wattribute-alias=2" در این سطح، \fB\-Wattribute\-alias\fR مواردی را نیز تشخیص می‌دهد که در آن مشخصه‌های اعلان alias محدودکننده‌تر از مشخصه‌های اعمال‌شده به هدف آن باشند. این عدم تطابق‌ها می‌توانند به‌طور بالقوه منجر به تولید کد نادرست شوند. در موارد دیگر ممکن است بی‌خطر باشند و صرفاً با افزودن مشخصهٔ غایب به هدف برطرف گردند. برای مقایسه، گزینهٔ \fB\-Wmissing\-attributes\fR را ببینید که پیام‌های تشخیصی را هنگامی کنترل می‌کند که اعلان alias نسبت به هدف محدودیت کمتری داشته باشد، نه محدودیت بیشتر. .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]" درباره نویسه‌های کنترلی دوجهتهٔ (bidi) بالقوه گمراه‌کنندهٔ UTF\-8 در کامنت‌ها، رشته‌های تحت‌اللفظی، ثابت‌های نویسه‌ای و شناسه‌ها هشدار می‌دهد. چنین نویسه‌هایی می‌توانند جهت نگارش چپ‌به‌راست را به راست‌به‌چپ (و برعکس) تغییر دهند که ممکن است موجب سردرگمی بین ترتیب منطقی و ترتیب بصری شود. این امر می‌تواند خطرناک باشد؛ برای نمونه، ممکن است به نظر برسد که بخشی از کد کامنت نشده است، در حالی که در واقع کامنت شده است. .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" درباره عملیات مشکوک روی عبارت‌هایی از نوع بولی هشدار می‌دهد. برای نمونه، نقیض بیتی یک مقدار بولی به احتمال زیاد یک باگ در برنامه است. در C، این هشدار همچنین درباره افزایش یا کاهش مقدار بولی، که به‌ندرت معنا دارد، هشدار می‌دهد. (در C++، کاهش دادن مقدار بولی همواره نامعتبر است. افزایش مقدار بولی در C++17 نامعتبر بوده و در غیر این صورت منسوخ است.) .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) است؛ برای تبدیلات صریح (explicit) می‌توان از هشدارهای \&\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" هنگامی که یک مقدار ثابت \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" پیام‌های هشدار را برای ساختارهای یافت‌شده در فایل‌های سرایند سیستم (system header files) چاپ کند. هشدارهای حاصل از سرایندهای سیستم معمولاً با این فرض که نشان‌دهنده مشکلات واقعی نیستند و تنها خواندن خروجی کامپایلر را دشوارتر می‌کنند، فرونشانده می‌شوند. استفاده از این گزینهٔ خط فرمان به GCC اعلام می‌کند که هشدارهای سرایندهای سیستم را به گونه‌ای نمایش دهد که گویی در کد کاربر رخ داده‌اند. با این حال، توجه داشته باشید که استفاده از \fB\-Wall\fR همراه با این گزینه، درباره دستورهای پیش‌پردازندهٔ (pragma) ناشناخته در سرایندهای سیستم هشدار \fIنمی‌دهد\fR\-\-\-برای آن منظور، باید از \fB\-Wunknown\-pragmas\fR نیز استفاده شود..IP \fB\-Wtautological\-compare\fR 4 .IX Item "-Wtautological-compare" اگر یک مقایسه با خود (self\-comparison) همواره به درست یا نادرست ارزیابی شود، هشدار می‌دهد. این هشدار خطاهای گوناگونی را تشخیص می‌دهد، مانند: .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 دربارهٔ فضای خالی انتهایی در انتهای خطوط، از جمله درون کامنت‌ها، اما به‌جز فضای خالی انتهایی در لیترال‌های رشته‌ای خام (raw string literals)، هشدار می‌دهد. \&\f(CW\*(C`\-Wtrailing\-whitespace\*(C'\fR معادل با \&\f(CW\*(C`\-Wtrailing\-whitespace=blanks\*(C'\fR است و تنها دربارهٔ نویسه‌های فاصله و برگهٔ افقی انتهایی هشدار می‌دهد. \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" دربارهٔ ایرادهای شیوه‌ای در فضای خالی ابتدایی هشدار می‌دهد، اما نه دربارهٔ مقدار تورفتگی. برخی پروژه‌ها از شیوه‌های کدنویسی استفاده می‌کنند که در آن‌ها فقط از فاصله برای تورفتگی استفاده می‌شود، برخی دیگر فقط از برگه (tab)، و برخی دیگر از صفر یا چند برگه (برای مضارب \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 است و به‌طور پیش‌فرض 8 می‌باشد) هشدار می‌دهد. \&\f(CW\*(C`\-Wleading\-whitespace=none\*(C'\fR هشدار را غیرفعال می‌کند، که حالت پیش‌فرض است. این یک هشدار شیوهٔ کدنویسی است. .IP \fB\-Wtrampolines\fR 4 .IX Item "-Wtrampolines" دربارهٔ ترامپولین‌های (trampolines) تولیدشده برای اشاره‌گرها به توابع تو در تو (nested functions) هشدار می‌دهد. ترامپولین قطعهٔ کوچکی از داده یا کد است که در زمان اجرا، هنگامی که نشانی یک تابع تو در تو گرفته می‌شود، روی پشته ایجاد شده و برای فراخوانی غیرمستقیم تابع تو در تو به کار می‌رود. برای برخی معماری‌های مقصد، این ساختار تنها از داده تشکیل شده و بنابراین نیاز به رسیدگی خاصی ندارد. اما برای بیشتر مقاصد، از کد تشکیل شده است و بنابراین مستلزم آن است که پشته قابل اجرا (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 سنتی و 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 عملگر جمع یکانی (unary plus). .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 C شناسایی شود. .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) دیگری را سایه‌اندازی کند، یا هرگاه یک تابع توکار (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" هشدار برای هرگونه هم‌پوشانی (shadowing). همانند \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" هشدار در صورتی که اندازه قاب یک تابع (function frame) از \fIbyte\-size\fR فراتر رود. محاسبه انجام‌شده برای تعیین اندازه قاب پشته، تقریبی است و محافظه‌کارانه (conservative) نیست. نیازمندی‌های واقعی پشته ممکن است تا حدی بیشتر از \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 اشاره‌گری به نویسه تهی پایانی (terminating nul character) برمی‌گرداند و نه به ابتدای شیء، فراخوانی \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 فراتر رود. محاسبه انجام‌شده برای تعیین مصرف پشته، دست بالا و محافظه‌کارانه (conservative) است. هر فضایی که از طریق \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 به کار رود، این گزینه هشدارهای مربوط به تعیین‌کننده‌های عرض قالب غیر 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 وابسته‌اند، غیرفعال می‌کند. .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 and Objective-C only)" هنگامی که یک تابع استاندارد مناسب‌تر در دسترس باشد، برای فراخوانی توابع استانداردی که مقدار مطلق (قدر مطلق) یک آرگومان را محاسبه می‌کنند، هشدار می‌دهد. برای نمونه، فراخوانی \f(CWabs(3.14)\fR این هشدار را فعال می‌کند زیرا تابع مناسب‌تر برای محاسبهٔ مقدار مطلق یک آرگومان با نوع double تابع \f(CW\*(C`fabs\*(C'\fR است. این گزینه همچنین زمانی که آرگومانِ چنین تابعی از نوعِ بدون علامت (unsigned) باشد، هشدار می‌دهد. این هشدار را می‌توان با تبدیل نوع صریح (explicit 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" اگر سه‌نگاره‌هایی (trigraphs) یافت شوند که ممکن است معنای برنامه را تغییر دهند، هشدار می‌دهد. دربارهٔ سه‌نگاره‌های درون توضیحات هشداری داده نمی‌شود، مگر مواردی که یک خط جدید گریزدار (escaped newline) ایجاد کنند. .Sp این گزینه به طور ضمنی توسط \fB\-Wall\fR فعال می‌شود. اگر \fB\-Wall\fR مشخص نشده باشد، این گزینه همچنان فعال خواهد بود مگر اینکه سه‌نگاره‌ها فعال شده باشند. برای دریافت تبدیل سه‌نگاره‌ها بدون هشدار، اما دریافت سایر هشدارهای \&\fB\-Wall\fR، از \fB\-trigraphs \-Wall \-Wno\-trigraphs\fR استفاده کنید. .IP \fB\-Wundef\fR 4 .IX Item "-Wundef" اگر یک شناسهٔ تعریف‌نشده در یک دستورالعمل \f(CW\*(C`#if\*(C'\fR ارزیابی شود، هشدار می‌دهد. چنین شناسه‌هایی با صفر جایگزین می‌شوند. .IP \fB\-Wexpansion\-to\-defined\fR 4 .IX Item "-Wexpansion-to-defined" هر زمان که عملگر \fBdefined\fR در فرآیند بسط یک ماکرو دیده شود (از جمله در مواردی که ماکرو توسط یک دستورالعمل \fB#if\fR بسط داده می‌شود)، هشدار می‌دهد. چنین کاربردی قابل‌حمل (portable) نیست. این هشدار همچنین با \fB\-Wpedantic\fR و \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wunused\-macros\fR 4 .IX Item "-Wunused-macros" دربارهٔ ماکروهای تعریف‌شده در فایل اصلی که مورد استفاده قرار نگرفته‌اند هشدار می‌دهد. یک ماکرو زمانی \fIاستفاده‌شده\fR تلقی می‌شود که دست‌کم یک بار بسط داده شود یا وجود آن ارزیابی گردد. پیش‌پردازنده همچنین در صورتی که ماکرو تا زمان بازتعریف یا حذف تعریف (undefine) استفاده نشده باشد، هشدار می‌دهد. .Sp برای ماکروهای توکار (built\-in)، ماکروهای تعریف‌شده در خط فرمان، و ماکروهای تعریف‌شده در فایل‌های ضمیمه‌شده (include) هشداری داده نمی‌شود. .Sp \&\fIنکته:\fR اگر ماکرویی واقعاً استفاده شده باشد، اما صرفاً درون بلوک‌های شرطی نادیده‌گرفته‌شده قرار داشته باشد، پیش‌پردازنده آن را به عنوان استفاده‌نشده گزارش می‌کند. برای جلوگیری از این هشدار، می‌توانید دامنهٔ تعریف ماکرو را محدودتر کنید، برای نمونه با انتقال آن به اولین بلوک شرطی ردشده. در غیر این صورت، می‌توانید با دستوری شبیه به عبارت زیر یک کاربرد ساختگی برای آن ایجاد کنید: .Sp .Vb 2 \& #if defined the_macro_causing_the_warning \& #endif .Ve .IP \fB\-Wno\-endif\-labels\fR 4 .IX Item "-Wno-endif-labels" هر زمان که پس از \f(CW\*(C`#else\*(C'\fR یا \f(CW\*(C`#endif\*(C'\fR متنی بیاید، هشدار نمی‌دهد. این موضوع گاهی در برنامه‌های قدیمی‌تر با کدهایی به فرم زیر پیش می‌آید: .Sp .Vb 5 \& #if FOO \& ... \& #else FOO \& ... \& #endif FOO .Ve .Sp دومین و سومین \f(CW\*(C`FOO\*(C'\fR باید درون توضیح قرار گیرند. این هشدار به طور پیش‌فرض فعال است. .IP "\fB\-Wbad\-function\-cast\fR (فقط C و Objective\-C)" 4 .IX Item "-Wbad-function-cast (C and Objective-C only)" هنگامی که خروجی فراخوانی یک تابع به نوعی ناسازگار تبدیل شود (cast)، هشدار می‌دهد. برای نمونه، اگر حاصل فراخوانی تابعی که یک نوع عدد صحیح (integer) برمی‌گرداند به یک نوع اشاره‌گر تبدیل شود، هشدار داده خواهد شد. .IP "\fB\-Wc90\-c99\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc90-c99-compat (C and Objective-C only)" دربارهٔ ویژگی‌هایی که در 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 and Objective-C only)" دربارهٔ ویژگی‌هایی که در ISO C99 وجود ندارند اما در ISO C11 معرفی شده‌اند هشدار می‌دهد. برای نمونه، در مورد استفاده از ساختارها (structures) و اجتماعات (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 and Objective-C only)" .PD 0 .IP "\fB\-Wc11\-c2x\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc11-c2x-compat (C and Objective-C only)" .PD دربارهٔ ویژگی‌هایی که در ISO C11 وجود ندارند اما در ISO C23 معرفی شده‌اند هشدار می‌دهد. برای نمونه، دربارهٔ حذف رشته در \f(CW\*(C`_Static_assert\*(C'\fR، استفاده از نحو \fB[[]]\fR برای ویژگی‌ها (attributes)، استفاده از انواع ممیز شناور ده‌دهی (decimal floating\-point) و موارد دیگر هشدار می‌دهد. این گزینه مستقل از حالت استاندارد انتخابی است. هشدارها در عبارتی که پس از \&\f(CW\*(C`_\|_extension_\|_\*(C'\fR می‌آید غیرفعال می‌شوند. نام \fB\-Wc11\-c2x\-compat\fR منسوخ شده است. .Sp هنگامی که کامپایل در حالت C23 نباشد، این هشدارها توسط \fB\-pedantic\-errors\fR به خطا تبدیل می‌شوند. .IP "\fB\-Wc23\-c2y\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc23-c2y-compat (C and Objective-C only)" .PD 0 .IP "\fB\-Wc23\-c2y\-compat\fR (فقط C و Objective\-C)" 4 .IX Item "-Wc23-c2y-compat (C and Objective-C only)" .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 and Objective-C only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای 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++ and Objective-C++ only)" دربارهٔ ساختارهای C++26 در کدی که با استفاده از استانداردهای قدیمی‌تر C++ کامپایل می‌شود هشدار ندهد. حتی بدون این گزینه، برخی از ساختارهای C++26 تنها در صورتی مشخص می‌شوند که از \fB\-Wpedantic\fR استفاده شده باشد. .IP \fB\-Wcast\-qual\fR 4 .IX Item "-Wcast-qual" هر زمان که یک اشاره‌گر به گونه‌ای تبدیل شود (cast) که یک توصیف‌گر نوع (type qualifier) را از نوع مقصد حذف کند، هشدار می‌دهد. به عنوان مثال، اگر یک \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" هنگامی که یک اشاره‌گر تابع به یک اشاره‌گر تابع ناسازگار تبدیل نوع شود هشدار می‌دهد. در تبدیل نوعی که شامل انواع تابع با فهرست آرگومان متغیر است، تنها انواع آرگومان‌های اولیه‌ای که ارائه شده‌اند در نظر گرفته می‌شوند. هر پارامتری از نوع اشاره‌گر با هر نوع اشاره‌گر دیگری مطابقت دارد. هرگونه تفاوت بی‌خطر در انواع صحیح (integral types) نادیده گرفته می‌شود، مانند \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++‎، درباره تبدیل منسوخ‌شده از رشته‌های لفظی (string literals) به \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" درباره تبدیلات ضمنی (implicit conversions) که ممکن است یک مقدار را تغییر دهند هشدار می‌دهد. این شامل تبدیلات بین حقیقی و صحیح است، مانند \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++‎، همچنین درباره تفکیک بارگذاری بیش از حد (overload resolution) ابهام‌برانگیز برای تبدیلات تعریف‌شده توسط کاربر؛ و تبدیلاتی که هرگز از یک عملگر تبدیل نوع استفاده نمی‌کنند هشدار می‌دهد: تبدیلات به \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++) به اشیایی با طول مدت ذخیره‌سازی خودکار (automatic storage duration) پس از پایان یافتن طول عمر آن‌ها هشدار می‌دهد. این شامل متغیرهای محلی اعلان‌شده در بلوک‌های تو در تو، لیترال‌های مرکب (compound literals) و سایر اشیای موقت بدون نام می‌شود. علاوه بر این، درباره ذخیره کردن آدرس چنین اشیایی در اشاره‌گرهای فرارکرده (escaped pointers) هشدار می‌دهد. این هشدار در تمام سطوح بهینه‌سازی فعال است اما ممکن است با بهینه‌سازی نتایج متفاوتی نسبت به بدون آن حاصل کند. .RS 4 .IP \fB\-Wdangling\-pointer=1\fR 4 .IX Item "-Wdangling-pointer=1" در سطح ۱، این هشدار تنها استفاده‌های بدون شرط از اشاره‌گرهای معلق (dangling pointers) را تشخیص می‌دهد. .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 این مثال هشدار را در سطح ۱ فعال می‌کند؛ آدرس شیء موقت بدون نام به‌طور بدون شرط در خارج از حوزه (scope) خود مورد ارجاع قرار می‌گیرد. .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 استفاده می‌شود خارج از دامنه (out of 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 مد نظر بوده است. این پیام تنها زمانی صادر می‌شود که آرگومان سوم یک لیترال صفر باشد. در غیر این صورت، اگر عبارتی باشد که به صفر ساده‌سازی (fold) می‌شود، یا تبدیل صفر به یک نوع داده باشد، احتمال اینکه آرگومان‌ها به اشتباه جابه‌جا شده باشند بسیار کمتر است و هشداری صادر نمی‌شود. این هشدار با \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 هستند)، بنابراین استفاده از آن‌ها در یک شرط ممکن است نشان‌دهندهٔ جا افتادن پرانتزها در فراخوانی تابع یا عدم ارجاع‌زدایی (dereference) در یک عبارت آرایه‌ای باشد. زیرمجموعه‌ای از این هشدار که مربوط به اشاره‌گرهای شیء است را می‌توان با تبدیل نوع (cast) عملوند اشاره‌گر به یک نوع عدد صحیح مانند \f(CW\*(C`intptr_t\*(C'\fR یا \f(CW\*(C`uintptr_t\*(C'\fR نادیده گرفت. مقایسه با لیترال‌های رشته‌ای به رفتار تعریف‌نشده یا نامشخص (unspecified behavior) می‌انجامد و قابل حمل نیست و نشان می‌دهد که احتمالاً قصد برنامه‌نویس فراخوانی \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) از یک 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" اگر تابعی که ساختارها (structures) یا اجتماع‌ها (unions) را برمی‌گرداند تعریف یا فراخوانی شود، هشدار می‌دهد. (در زبان‌هایی که امکان بازگرداندن آرایه وجود دارد، این مورد نیز هشدار ایجاد می‌کند.) .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 هشدارهای مربوط به استفاده‌های نادرست (ill-formed) از صفت‌های استاندارد با \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 هشدار مربوط به تمامی صفت‌های درون یک فضای نام (namespace) را غیرفعال کرد، که از هشدار دربارهٔ هر دوی این اعلان‌ها جلوگیری می‌کند: .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)، با آرگومان‌هایی فراخوانی شود که نوع‌های ارتقایافتهٔ (promoted) آن‌ها با نوع‌های مورد انتظار تابع مطابقت نداشته باشد. هنگامی که \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" در صورت تعریف مجدد ماکروهای توکار معین، هشدار ندهد. این گزینه هشدارهای مربوط به تعریف مجدد \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) به یک غیردستور (non-statement) اختصاص داده شود، یا در انتهای یک عبارت مرکب (compound statement) قرار گیرد. چنین برچسب‌هایی در C23 و گویش‌های بعدی C مجاز هستند و در سایر گویش‌ها به عنوان یک افزونهٔ GCC در دسترس می‌باشند. .Sp این هشدار همچنین با \fB\-Wc11\-c23\-compat\fR فعال می‌شود. در صورت ساخت (build) برای نسخه‌ای از 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`#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)" دربارهٔ استفاده‌های منسوخ در یک اعلان، مطابق با استاندارد 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)" هشدار می‌دهد اگر از یک تعریف تابع به سبک قدیمی استفاده شود. حتی در صورت وجود یک پیش‌نمونهٔ قبلی نیز هشدار داده می‌شود. تعریفی که از \fB()\fR استفاده می‌کند در حالت C23 یک تعریف به سبک قدیمی محسوب نمی‌شود، چرا که در این حالت معادل با \fB(void)\fR است، اما برای استانداردهای قدیمی‌تر، تعریفی به سبک قدیمی تلقی می‌شود..IP "\fB\-Wdeprecated\-non\-prototype\fR (فقط C و Objective\-C)" 4 .IX Item "-Wdeprecated-non-prototype (C and Objective-C only)" اگر تابعی که با یک فهرست پارامتر خالی \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 and Objective-C only)" اگر در تعریف یک تابع نام پارامتر حذف شده و تنها نوع آن مشخص شده باشد، هشدار می‌دهد. این مورد می‌تواند برای مستندسازی استفاده نشدن یک پارامتر در تعریف تابع به کار رود. این ویژگی بخشی از C23 و گویش‌های پس از آن در C است، و به عنوان یک افزونهٔ GCC در تمام گویش‌های دیگر نیز در دسترس است. .Sp این هشدار همچنین با \fB\-Wc11\-c23\-compat\fR فعال می‌شود. در صورت ساخت برای نسخه‌ای از C قبل از C23، با استفاده از \&\fB\-pedantic\-errors\fR به یک خطا تبدیل می‌شود. .IP "\fB\-Wmissing\-parameter\-type\fR (فقط C و Objective\-C)" 4 .IX Item "-Wmissing-parameter-type (C and Objective-C only)" اگر پارامتر تابع در توابع به سبک 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 and Objective-C only)" اگر اعلان یک تابع شامل نام پارامتر بدون نوع باشد، هشدار ندهد. چنین اعلان‌های تابعی، پیش‌نمونه تابع (prototype) ارائه نمی‌دهند و مانع از بیشتر بررسی‌های نوع در فراخوانی‌های تابع می‌شوند. .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 and Objective-C only)" اگر یک تابع سراسری بدون اعلان قبلی پیش‌نمونه (prototype) تعریف شود، هشدار می‌دهد. این هشدار حتی در صورتی که خود تعریف، یک پیش‌نمونه ارائه دهد نیز صادر می‌شود. از این گزینه برای تشخیص توابع سراسری که اعلان پیش‌نمونهٔ مطابقی در یک فایل سرآیند ندارند استفاده کنید. این گزینه برای C++ معتبر نیست زیرا تمام اعلان‌های تابع در آن پیش‌نمونه ارائه می‌دهند و یک اعلان نامطابق، به جای تداخل با اعلان قبلی، یک سربارگذاری (overload) جدید اعلان می‌کند. برای تشخیص اعلان‌های مفقود در C++ از \fB\-Wmissing\-declarations\fR استفاده کنید. .IP "\fB\-Wmissing\-variable\-declarations\fR (فقط C و Objective\-C)" 4 .IX Item "-Wmissing-variable-declarations (C and Objective-C only)" اگر یک متغیر سراسری بدون اعلان قبلی تعریف شود، هشدار می‌دهد. از این گزینه برای تشخیص متغیرهای سراسری که اعلان extern مطابقی در یک فایل سرآیند ندارند استفاده کنید. .IP \fB\-Wmissing\-declarations\fR 4 .IX Item "-Wmissing-declarations" اگر یک تابع سراسری بدون اعلان قبلی تعریف شود، هشدار می‌دهد. این کار حتی در صورتی که خود تعریف یک پیش‌نمونه ارائه دهد نیز انجام می‌شود. از این گزینه برای تشخیص توابع سراسری که در فایل‌های سرآیند اعلان نشده‌اند استفاده کنید. در C، برای توابعی با اعلان‌های قبلی فاقد پیش‌نمونه (non-prototype) هشداری صادر نمی‌شود؛ برای تشخیص پیش‌نمونه‌های مفقود از \fB\-Wmissing\-prototypes\fR استفاده کنید. در C++، برای الگوهای تابع (function templates)، توابع برخط (inline) یا توابع درون فضاهای نام ناشناس هشداری صادر نمی‌شود. .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 یک عبارت معتبر باشد، مقدار \fBsatisfied\fR برابر true خواهد بود، که برای همه Tها چنین است. احتمالاً منظور کاربر نوشتن عبارت زیر بوده است: .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 در موارد نادر ممکن است هشدارهای مثبت کاذب ایجاد شود. برای رفع این هشدار، عبارت را درون پرانتز قرار دهید. برای نمونه، مورد زیر حتی در جایی که 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" درباره استفاده از قابلیت‌های منسوخ‌شده (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 cost model) دستورالعمل 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 اختصاص داده شده باشد، اما این صفت هیچ تاثیری بر ساختاربندی یا اندازه ساختار نداشته باشد، هشدار داده شود. چنین ساختارهایی ممکن است در ازای فایده اندک دچار ناترازی شوند. برای مثال، در این کد، متغیر \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" سری‌های ۴.۱، ۴.۲ و ۴.۳ کامپایلر 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" اگر پدینگ در یک ساختار گنجانده شده باشد، چه برای تراز کردن عضوی از ساختار یا تراز کردن کل ساختار، هشدار داده شود. گاهی هنگامی که این اتفاق می‌افتد، می‌توان با بازچینی فیلدهای ساختار، پدینگ را کاهش داد و در نتیجه ساختار را کوچک‌تر کرد. .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) دارای نام مستعار (alias) با آرگومان دیگری باشد، یا هنگامی که رونوشت‌ها بین چنین اشیایی هم‌پوشانی داشته باشند، هشدار داده شود. برای مثال، فراخوانی تابع \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 برای پردازنده مقصد، و گاهی به صورت یک بازه در صورت بهینه‌سازی برای یک مقصد عمومی تنظیم می‌شوند. بنابراین تمام واحدهای ترجمه که برای استفاده از این متغیرها به سازگاری ABI وابسته هستند باید با همان \fB\-mtune\fR (یا \fB\-mcpu\fR) کامپایل شوند. .Sp اگر پایداری ABI اهمیت دارد، مانند زمانی که کاربرد آن در سرآیند یک کتابخانه است، احتمالاً اصلاً نباید از متغیرهای اندازه تداخل سخت‌افزاری استفاده کنید. در غیر این صورت، می‌توانید با \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)" هشدارهای ناشی از تبدیل نوع (cast) از یک اشاره‌گر به نوع عدد صحیح با اندازهٔ متفاوت را نادیده می‌گیرد. .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" فرم‌های نامعتبر توالی‌های گریز (escape sequences) محدودشده یا نام‌گذاری‌شده را که به‌عنوان توکن‌های مجزا در نظر گرفته می‌شوند، عیب‌یابی نمی‌کند. \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" اگر یک آرایه با طول متغیر (variable\-length array) در کد استفاده شود، هشدار می‌دهد. گزینهٔ \&\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) به‌صورت 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، را در مواردی که به نظر می‌رسد مقصود کد توان‌رسانی بوده است غیرفعال می‌کند. به‌طور خاص، این هشدار زمانی رخ می‌دهد که سمت چپ ثابت ده‌دهی 2 یا 10 باشد و سمت راست نیز یک ثابت ده‌دهی باشد. .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" در طول بهینه‌سازی زمان پیوند (LTO)، دربارهٔ عدم تطابق نوع در اعلان‌های سراسری از واحدهای ترجمهٔ متفاوت هشدار نمی‌دهد. نیازمند فعال بودن \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 "گزینه‌های واپایش تحلیل ایستا (Options That Control Static Analysis)" .IX Subsection "Options That Control Static Analysis" .IP \fB\-fanalyzer\fR 4 .IX Item "-fanalyzer" این گزینه تحلیلی ایستا از جریان برنامه را فعال می‌کند که به دنبال مسیرهای میان‌رواله‌ای «جالب» در طول کد می‌گردد، و برای مشکلات یافت‌شده در آن‌ها هشدار صادر می‌کند. .Sp این تحلیل بسیار سنگین‌تر و هزینه‌برتر از سایر هشدارهای GCC است. .Sp از دیدگاه فنی، این گزینه اجرای نمادین مبتنی بر پوشش (coverage\-guided symbolic execution) را روی کدی که کامپایل می‌شود انجام می‌دهد. این تحلیل نه صائب است و نه کامل: می‌تواند مثبت کاذب و منفی کاذب داشته باشد. این ابزار به جای اثبات درستی برنامه، ابزاری برای یافتن باگ است. .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 با فعال بودن پشتیبانی از analyzer پیکربندی شده باشد. .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`FILE *\*(C'\fR بیش از یک بار \f(CW\*(C`fclose\*(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 این پیام تشخیصی دربارهٔ «نشت اطلاعات» (infoleaks) هشدار می‌دهد \- مسیرهایی در کد که در آن‌ها مقادیر مقداردهی‌نشده از یک مرز امنیتی رونوشت می‌شوند (مانند کدی در هستهٔ سیستم‌عامل که یک ساختار (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 این پیام تشخیصی برای مسیرهایی در کد که در آن‌ها یک توصیف‌گر فایلِ باز نشت پیدا می‌کند هشدار می‌دهد. .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 روی اشاره‌گری غیر از حافظه هیپ (مانند بافری روی پشته، یا یک متغیر سراسری) فراخوانی می‌شود، هشدار می‌دهد. .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 این پیام تشخیصی برای مسیرهایی از کد که به نظر می‌رسد به یک حلقه بی‌نهایت منجر می‌شوند هشدار می‌دهد. .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 را طی می‌کند و بدنه حلقه را به یک دستور بی‌اثر (no\-op) با مقدار تغییرنیافته \f(CW\*(C`cpu_state.pc\*(C'\fR تبدیل می‌کند، و در نتیجه در تمام دورهای بعدی همان مقدار \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 این پیام تشخیصی درباره مسیرهایی از کد که به نظر می‌رسد به یک بازگشت بی‌نهایت منجر می‌شوند هشدار می‌دهد. .Sp به‌طور مشخص، هنگامی که تحلیل‌گر یک فراخوانی بازگشتی را می‌بیند، وضعیت حافظه در بدو ورود به فریم جدید را با وضعیت ورود به فریم قبلی آن تابع روی پشته مقایسه می‌کند. اگر به نظر برسد هیچ چیز در حافظه تغییر نمی‌کند، هشدار صادر می‌شود؛ فرض بر این است که هرگونه تغییرِ دیده‌شده در پارامترها یا متغیرهای سراسری باعث خاتمه بازگشت می‌شود و در نتیجه از صدور هشدار جلوگیری می‌کند. .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 این پیام تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها قطعا یک بافر فراتر از محدوده مجاز (out\-of\-bounds) خوانده یا نوشته می‌شود. این پیام تشخیصی برای مواردی اعمال می‌شود که تحلیل‌گر قادر به تعیین آفست ثابت باشد و برای دسترسی‌های فراتر از انتهای بافر، ظرفیت ثابتی را نیز تعیین کند. علاوه بر این، هنگامی که آفست و همچنین ظرفیت نمادین (symbolic) باشند، تحلیل‌گر بررسی‌های محدودی برای دسترسی‌های فراتر از انتها انجام می‌دهد. .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 در مواردی که تحلیل‌گر قادر باشد، یک نمودار متنی (text art) تولید می‌کند که رابطه فضایی بین ناحیه حافظه‌ای که تحلیل‌گر پیش‌بینی می‌کند دسترسی خواهد شد در برابر محدوده حافظه‌ای که دسترسی به آن معتبر است را به تصویر می‌کشد: اینکه آیا هم‌پوشانی دارند، مماس هستند، نزدیک یا دور از هم هستند؛ کدام‌یک در حافظه قبل یا بعد از دیگری است، اندازه‌های نسبی مربوطه، جهت دسترسی (خواندن در برابر نوشتن)، و در برخی موارد، مقادیر داده‌های درگیر. این نمودار را می‌توان با استفاده از \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) ارسال می‌شوند که رفتار آن در مورد چنین بافرهایی تعریف‌نشده (undefined) است. .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 بودن، دی‌رفرنس (dereference) می‌شود. .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 است، دی‌رفرنس (dereference) می‌شود. .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 variable) یا یک بافر روی پشته (on\-stack) به آن ارسال می‌شود. .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 این پیام تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها تلاش شده یک شیفت (shift) با تعداد منفی انجام گیرد. این پیام مشابه هشدار \fB\-Wshift\-count\-negative\fR است که در فرانت‌اند C/C++ پیاده‌سازی شده، اما به جای تجزیه صِرف درخت نحو (syntax tree)، بر اساس تحلیل مسیرهای میان‌رویه‌ای (interprocedural) پیاده‌سازی شده است. با این حال، تحلیل‌گر اولویتی برای تشخیص چنین مسیرهایی قائل نمی‌شود، بنابراین در مقایسه با سایر هشدارها احتمال منفی کاذب (false negative) بیشتر است. .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 این پیام تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها تلاش شده یک شیفت با تعدادی بزرگ‌تر یا مساوی دقت نوع عملوند (operand\*(Aqs type) انجام گیرد. این پیام مشابه هشدار \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 فراخوانی می‌شود تا موقعیت بازگشت را ثبت کند، فریم پشته (stack frame) را ثبت می‌کند. فریم پشته با بازگشت تابعی که شامل فراخوانی \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 توجه داشته باشید که با غیرفعال بودن بررسی اعتبارسنجی، این عبارت‌ها معمولاً توسط پیش‌پردازنده پیش از آنکه تحلیل‌گر فرصت «دیدن» آن‌ها را داشته باشد حذف می‌شوند، بنابراین این پیام تشخیصی فقط می‌تواند در ساخت‌هایی هشدار ایجاد کند که بررسی اعتبارسنجی در آن‌ها فعال است. .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 این پیام تشخیصی در مورد مسیرهایی در کد هشدار می‌دهد که در آن‌ها مقداری که می‌تواند تحت کنترل یک مهاجم باشد، بدون اعتبارسنجی و پاک‌سازی به عنوان نمایه (اندیس) دسترسی به یک آرایه استفاده شده است، به طوری که یک مهاجم می‌تواند یک دسترسی خارج از محدوده (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)، از داخل یک گرداننده سیگنال فراخوانی شده است. .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 این پیام تشخیصی در مورد مسیرهایی در کد هشدار می‌دهد که در آن‌ها یک اشاره‌گر پس از فراخوانی یک تابع آزادساز روی آن، مورد استفاده قرار می‌گیرد: چه \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) اشاره دارد، بازارجاع می‌شود. .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 این پیام تشخیصی برای مسیرهای بین‌روالی در کد هشدار می‌دهد که تحلیل‌گر در آن‌ها تلاشی برای استفاده از \f(CW\*(C`va_arg\*(C'\fR جهت استخراج مقداری که به یک فراخوانی با آرگومان‌های متغیر ارسال شده شناسایی می‌کند، اما از نوعی استفاده می‌شود که با نوع عبارت ارسال‌شده به فراخوانی همخوانی ندارد. .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 تحلیل‌گر شناختی تعبیه‌شده (hardcoded) از رفتار توابع مدیریت حافظهٔ زیر دارد: .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 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" به‌طور پیش‌فرض، تحلیل‌گر با پنهان کردن رویدادهایی که به‌طور کامل در یک سرآیند سیستمی قرار دارند، مسیرهای تشخیصی ساده‌شده‌ای صادر می‌کند. با \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 در مقایسه با سایر ابزارهای تحلیل کد نسبتاً دیر اجرا می‌شود و برخی بهینه‌سازی‌ها پیش‌تر روی کد اعمال شده‌اند. به‌ویژه، ممکن است درون‌خطی‌سازی تابع (function 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. این گزینه \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" صدور پیام‌های تشخیصی که نشان می‌دهند گره‌ها در «exploded graph» در چه موقعیتی نسبت به کد منبع برنامه قرار دارند. .IP \fB\-fdump\-analyzer\-exploded\-nodes\-2\fR 4 .IX Item "-fdump-analyzer-exploded-nodes-2" تخلیه نمایشی متنی از «exploded graph» در \&\fIfile.eg.txt\fR. .IP \fB\-fdump\-analyzer\-exploded\-nodes\-3\fR 4 .IX Item "-fdump-analyzer-exploded-nodes-3" تخلیه نمایشی متنی از «exploded graph» به ازای هر گره در یک فایل تخلیه، در \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" تخلیه جزئیات داخلی درباره جستجوی تحلیل‌گر برای مسیرهای امکان‌پذیر (feasible paths). این جزئیات به شکلی مناسب برای مشاهده با 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" تخلیه نماهایی از «supergraph» مناسب برای مشاهده با GraphViz در \fIfile.supergraph.dot\fR و \&\fIfile.supergraph\-eg.dot\fR. این موارد تمام نمودارهای جریان کنترل را در برنامه، با یال‌های بین‌روالی برای فراخوانی‌ها و بازگشت‌ها نشان می‌دهند. تخلیه دوم شامل حاشیه‌نویسی‌هایی است که گره‌ها در «exploded graph» و پیام‌های تشخیصی مرتبط با آن‌ها را نمایش می‌دهد. .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 بگویید اطلاعات اضافی را برای استفاده اشکال‌زدا (debugger) تولید کند، تقریباً در تمام موارد تنها کافی است \fB\-g\fR را به گزینه‌های دیگر خود اضافه کنید. برخی قالب‌های اشکال‌زدایی می‌توانند هم‌زمان وجود داشته باشند (مانند DWARF همراه با CTF)، به شرطی که هر یک از آن‌ها به صورت صریح با افزودن گزینه خط فرمان مربوطه به دیگر گزینه‌هایتان فعال شوند. .PP کامپایلر GCC به شما اجازه می‌دهد \fB\-g\fR را همراه با \&\fB\-O\fR استفاده کنید. میان‌برهایی که کدهای بهینه‌سازی‌شده در پیش می‌گیرند ممکن است گاهی غافلگیرکننده باشند: ممکن است برخی متغیرهایی که تعریف کرده‌اید اصلاً وجود نداشته باشند؛ جریان کنترل ممکن است لحظه‌ای به جایی که انتظار نداشتید برود؛ برخی دستورها ممکن است اجرا نشوند زیرا نتایج ثابتی را محاسبه می‌کنند یا مقادیر آن‌ها از قبل آماده است؛ برخی دستورها ممکن است در جاهای متفاوتی اجرا شوند زیرا از درون حلقه‌ها به بیرون منتقل شده‌اند. با این حال، اشکال‌زدایی خروجی بهینه‌سازی‌شده امکان‌پذیر است. این امر استفاده از بهینه‌ساز را برای برنامه‌هایی که ممکن است باگ داشته باشند منطقی می‌سازد. .PP اگر از گزینه بهینه‌سازی دیگری استفاده نمی‌کنید، استفاده از \fB\-Og\fR را همراه با \fB\-g\fR در نظر بگیرید. بدون وجود هیچ گزینه \fB\-O\fR، برخی گذرها (passes)ی کامپایلر که اطلاعات مفید برای اشکال‌زدایی را جمع‌آوری می‌کنند اصلاً اجرا نمی‌شوند؛ بنابراین \&\fB\-Og\fR ممکن است به تجربه اشکال‌زدایی بهتری منجر شود. .IP \fB\-g\fR 4 .IX Item "-g" تولید اطلاعات اشکال‌زدایی در قالب بومی سیستم‌عامل (stabs، COFF، XCOFF یا DWARF). برنامه GDB می‌تواند با این اطلاعات اشکال‌زدایی کار کند. .Sp در بیشتر سیستم‌هایی که از قالب stabs استفاده می‌کنند، \fB\-g\fR استفاده از اطلاعات اشکال‌زدایی اضافه‌ای را فعال می‌کند که تنها GDB قادر به استفاده از آن است؛ این اطلاعات اضافی کارکرد اشکال‌زدایی را در GDB بهبود می‌بخشد، اما احتمالاً موجب فروپاشی سایر اشکال‌زداها یا امتناع آن‌ها از خواندن برنامه می‌شود. اگر می‌خواهید با اطمینان مشخص کنید که آیا اطلاعات اضافی تولید شوند یا خیر، از \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 Version 2، برخی پورت‌ها به برخی افزونه‌های غیرمتعارض DWARF 3 در جدول‌های unwind نیاز دارند و همیشه از آن‌ها استفاده می‌کنند. .Sp نسخه 4 ممکن است برای دستیابی به بیشترین کارایی به GDB 7.0 و \fB\-fvar\-tracking\-assignments\fR نیاز داشته باشد. نسخه 5 به GDB 8.0 یا بالاتر نیاز دارد. .Sp کامپایلر GCC دیگر از DWARF Version 1 پشتیبانی نمی‌کند، که تفاوت اساسی با نسخه 2 و پس از آن دارد. بنا به دلایل تاریخی، برخی دیگر از گزینه‌های مرتبط با DWARF (مانند \&\fB\-fno\-dwarf2\-cfi\-asm\fR) ارجاعی به DWARF Version 2 در نام خود دارند، اما بر تمامی نسخه‌های 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، اطلاعات نوع برای انواع به‌کاررفته در بازنشانی‌های (relocations) مربوط به BPF CO\-RE نیز صادر خواهد شد. علاوه بر این، انواع struct و union که تنها از طریق اشاره‌گر از اعضای سایر انواع struct یا union مورد ارجاع قرار گرفته‌اند هرس شده و با BTF_KIND_FWD جایگزین می‌شوند، گویی آن انواع صرفاً به عنوان اعلان رو به جلو (forward declaration) در ورودی حضور داشته‌اند. .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 و استفاده از level برای تعیین مقدار اطلاعات اشکال‌زدایی CTF تولیدی. اگر \fB\-gctf\fR بدون مقداری برای level مشخص شود، سطح پیش‌فرض اطلاعات اشکال‌زدایی CTF برابر با 2 خواهد بود. .Sp اطلاعات اشکال‌زدایی CTF می‌تواند هم‌زمان با اطلاعات اشکال‌زدایی DWARF تولید شود، مشروط بر اینکه هر دو قالب اشکال‌زدایی به صراحت از طریق گزینه‌های خط فرمان مربوطه خود فعال شده باشند. .Sp سطح 0 هیچ اطلاعات اشکال‌زدایی CTF تولید نمی‌کند؛ بنابراین \fB\-gctf0\fR اثر \fB\-gctf\fR را خنثی می‌کند. .Sp سطح 1 اطلاعات CTF را تنها برای ردگیری فراخوانی‌ها (tracebacks) تولید می‌کند. این اطلاعات شامل محل فراخوانی (callsite) است، اما شامل اطلاعات نوع نمی‌شود. .Sp سطح 2 اطلاعات نوع را منحصراً برای موجودیت‌ها (توابع، اشیاء داده و غیره) در دامنه فایل یا دامنه سراسری تولید می‌کند. .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 از بسط ماکرو (macro expansion) پشتیبانی می‌کنند. .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++ تنها در یک فایل شیء، آن را در تمام فایل‌های شیءِ استفاده‌کننده از آن کلاس درج می‌کند. این گزینه فقط باید با اشکال‌زداهایی استفاده شود که قادر به مدیریت شیوهٔ عادی درج اطلاعات اشکال‌زدایی کلاس‌ها توسط 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 قرار دارند. این گزینه می‌تواند برای جایگزینی مسیر زمان ساخت با مسیر زمان نصب در اطلاعات اشکال‌زدایی استفاده شود. همچنین می‌تواند با استفاده از \&\fI.\fR برای \fInew\fR، یک مسیر مطلق را به یک مسیر نسبی تبدیل کند. این کار می‌تواند منجر به ساخت‌های بازتولیدپذیرتری شود که مستقل از مکان هستند، اما ممکن است برای گفتن مکان یافتن فایل‌های منبع به GDB نیازمند یک دستور اضافی باشد. همچنین \fB\-ffile\-prefix\-map\fR و \fB\-fcanon\-prefix\-map\fR را ببینید. .IP \fB\-fvar\-tracking\fR 4 .IX Item "-fvar-tracking" اجرای گذر ردگیری متغیرها. این گذر محاسبه می‌کند که متغیرها در هر نقطه از کد در کجا ذخیره شده‌اند؛ سپس اطلاعات اشکال‌زدایی بهتری تولید می‌شود (در صورتی که قالب اطلاعات اشکال‌زدایی از این اطلاعات پشتیبانی کند). .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 فعال است، مگر زمانی که زمان‌بندی انتخابی فعال باشد. .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 را انتخاب می‌کند. پیش‌فرض وابسته به مقصد است، هرچند روی بیشتر مقصدها \&\fB\-gdwarf32\fR است. قالب ۳۲ بیتی DWARF کوچک‌تر است، اما نمی‌تواند بیش از ۲ گیبی‌بایت (2GiB) اطلاعات اشکال‌زدایی را در هر یک از بخش‌های اطلاعات اشکال‌زدایی DWARF پشتیبانی کند. قالب ۶۴ بیتی DWARF امکان ذخیرهٔ اطلاعات اشکال‌زدایی بزرگ‌تر را فراهم می‌آورد اما ممکن است هنوز توسط همهٔ مصرف‌کنندگان به‌خوبی پشتیبانی نشود. .IP \fB\-gdescribe\-dies\fR 4 .IX Item "-gdescribe-dies" افزودن صفت‌های توصیف به برخی از DIEهای DWARF که صفت نام ندارند، مانند متغیرهای ساختگی (artificial variables)، ارجاعات خارجی و DIEهای پارامترهای جایگاه فراخوانی. .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 در قالبی مناسب برای تبدیل به نمایهٔ 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 و بازنشانی بررسی ادعا در دستورالعمل‌های \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 نشانگرهایی را در بازنمود درونی در ابتدای عبارات ایجاد کند، و آن‌ها را در طول فرایند کامپایل تقریباً در جای خود نگه دارد، و از آن‌ها برای هدایت خروجی نشانگرهای \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 بهبود فهرست‌های مکان متغیرها با شماره‌های نمای (view numbers) فزاینده‌ای که از جدول شماره سطر برداشت می‌شوند. این به مصرف‌کنندگان اطلاعات اشکال‌زدایی امکان می‌دهد تا وضعیت را در نقاط مشخصی از برنامه بررسی کنند، حتی اگر در آن نقطه هیچ دستورالعملی مرتبط با مکان‌های سورس متناظر وجود نداشته باشد. اگر اسمبلر از شماره‌های نما در جداول شماره سطر پشتیبانی نکند، این امر باعث می‌شود که کامپایلر جدول شماره سطر را صادر کند که عموماً فشردگی آن‌ها را اندکی کاهش می‌دهد. جداول شماره سطر و فهرست‌های مکان بهبودیافته کاملاً با نسخه‌های پیشین سازگار هستند (backward\-compatible)، بنابراین می‌توانند توسط مصرف‌کنندگان اطلاعات اشکال‌زدایی که از این بهبودها آگاه نیستند نیز استفاده شوند، هرچند سودی از آن‌ها نخواهند برد. .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 تلاش برای تعیین نماهای مکانی که می‌توان آن‌ها را از فهرست‌های نمای مکان حذف کرد. این کار نیازمند آن است که کامپایلر تخمین‌های بسیار دقیقی از طول دستورالعمل (insn) داشته باشد، که همیشه چنین نیست، و هنگام استفاده از اسمبلری که از فهرست‌های نمای مکان پشتیبانی نمی‌کند، ممکن است باعث ایجاد بی‌سر‌و‌صدای فهرست‌های نمای نادرست شود. اسمبلر GNU هر گونه خطای این‌چنینی را به‌عنوان \f(CW\*(C`view number mismatch\*(C'\fR گزارش خواهد کرد. این ویژگی تنها روی درگاه‌هایی (ports) فعال است که یک تابع تخمین قابل اطمینان تعریف کرده باشند. .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]" تولید بخش‌های (sections) اشکال‌زدایی فشرده‌شده در قالب DWARF، در صورت پشتیبانی. اگر \fItype\fR مشخص نشود، نوع پیش‌فرض به قابلیت‌های اسمبلر و پیونددهنده (linker) مورداستفاده بستگی دارد. مقدار \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 این گزینه حجم اطلاعات اشکال‌زدایی را به میزان قابل توجهی کاهش می‌دهد، اما با احتمال از دست رفتن چشمگیر اطلاعات نوع برای اشکال‌زدا (debugger) همراه است. برای گزینه‌ای با تهاجم کمتر، \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). یک نوع ساختار زمانی مستقیماً استفاده می‌شود که نوع یک متغیر یا عضو باشد. کاربردهای غیرمستقیم از طریق اشاره‌گرها به ساختارها ناشی می‌شوند؛ یعنی زمانی که استفاده از یک ساختار ناقص معتبر باشد، کاربرد غیرمستقیم است. یک مثال عبارت است از: \&\fBstruct one direct; struct two * indirect;\fR. .Sp کلمه اختیاری دوم، مشخصه را به ساختارهای معمولی (\fBord:\fR) یا ساختارهای جنریک (\fBgen:\fR) محدود می‌کند. توضیح ساختارهای جنریک کمی پیچیده است. در ++C، این‌ها تخصیص‌های غیرصریح (non\-explicit specializations) کلاس‌های قالب، یا کلاس‌های غیرقالب درون موارد بالا هستند. زبان‌های برنامه‌نویسی دیگر دارای جنریک هستند، اما \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 مربوط به DWARF به‌عنوان بخش \f(CW\*(C`.eh_frame\*(C'\fR تولیدشده توسط کامپایلر به‌جای استفاده از دستورالعمل‌های \f(CW\*(C`.cfi_*\*(C'\fR متعلق به GAS. .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 بدون هیچ گزینهٔ بهینه‌سازی، هدف کامپایلر کاهش هزینهٔ کامپایل و اطمینان از این است که اشکال‌زدایی نتایج مورد انتظار را ارائه دهد. دستورها (statements) مستقل از یکدیگرند: اگر برنامه را با یک نقطهٔ توقف (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 سطح بهینه‌سازی پیشنهادی برای کدهای حجیم تولیدشده توسط ماشین است، چرا که تعادلی منطقی میان زمان لازم برای کامپایل و مصرف حافظه برقرار می‌کند: سطوح بهینه‌سازی بالاتر، بهینه‌سازی‌هایی با پیچیدگی الگوریتمی بیشتری نسبت به \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 تقریباً تمامی بهینه‌سازی‌های پشتیبانی‌شده را که موازنه‌ای میان فضا و سرعت ندارند، اعمال می‌کند. این گزینه در مقایسه با \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 روی برنامه‌هایی که از gotoهای محاسبه‌شده استفاده می‌کنند، توجه داشته باشید. .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 وابسته به تحلیل کد یا گذرهای استانداردسازی هستند که با \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 و گزینه مخصوص Fortran یعنی \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" برای ماشین‌هایی که باید پس از فراخوانی تابع، آرگومان‌ها را از پشته خارج کنند، همیشه به محض بازگشت هر تابع، آرگومان‌ها را خارج می‌کند. در سطوح \fB\-O1\fR و بالاتر، \fB\-fdefer\-pop\fR پیش‌فرض است؛ این به کامپایلر اجازه می‌دهد آرگومان‌ها برای چندین فراخوانی تابع روی پشته انباشته شوند و همه آن‌ها را یک‌باره خارج کند. .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) می‌شوند. این گام تلاش می‌کند تا چنین مواردی را تشخیص داده و با تغییر ترتیب بارگذاری و ذخیره‌سازی و سپس تصحیح مقدار بارگذاری‌شده، از این جریمه زمانی جلوگیری کند. .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 در برخی شرایط، این به کامپایلر امکان می‌دهد کدی تولید کند که از هم‌ترازی مشخص و مضارب طول بهره می‌برد، اما حتی در این حالت نیز ممکن است کارایی کمتری نسبت به پیاده‌سازی‌های بهینه‌شده زمان اجرا داشته باشد و اندازه کد را آن‌قدر افزایش دهد که حتی یک پیاده‌سازی با عملکرد پایین‌تر اما اشتراکی، به دلیل استفاده بهتر از حافظه نهان کد، سریع‌تر اجرا شود. این گزینه به طور پیش‌فرض غیرفعال است. .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" توابع را در صورتی که بدنه آن‌ها از کد مورد انتظار فراخوانی تابع کوچک‌تر باشد، در فراخواننده‌های آن‌ها ادغام می‌کند (به طوری که اندازه کلی برنامه کوچک‌تر می‌شود). کامپایلر به طور اکتشافی تصمیم می‌گیرد که کدام توابع به اندازه کافی ساده هستند تا ادغام آن‌ها به این روش ارزشمند باشد. این درون‌خطی‌سازی برای همه توابع، حتی آن‌هایی که به صورت درون‌خطی تعریف نشده‌اند، اعمال می‌شود. .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" همه توابع را برای درون‌خطی‌سازی در نظر می‌گیرد، حتی اگر به صورت درون‌خطی تعریف نشده باشند. کامپایلر به طور اکتشافی تصمیم می‌گیرد که کدام توابع ارزش ادغام به این روش را دارند. .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 که تنها یک‌بار فراخوانی شده‌اند را برای درون‌خطی‌سازی (inlining) در فراخوانندهٔ خود در نظر می‌گیرد، حتی اگر با \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 و توابعی که بدنهٔ آن‌ها کوچک‌تر از سربار فراخوانی تابع به نظر می‌رسد را زودتر از انجام ابزارگذاری (instrumentation) \fB\-fprofile\-generate\fR و گذر واقعی درون‌خطی‌سازی، درون‌خطی می‌کند. انجام این کار باعث کاهش چشمگیر هزینهٔ پروفایل‌بندی و معمولاً سرعت بیشترِ درون‌خطی‌سازی در برنامه‌هایی با زنجیره‌های بزرگ از توابع پوششی (wrapper) تو‌در‌تو می‌شود. .Sp به‌طور پیش‌فرض فعال است. .IP \fB\-fipa\-sra\fR 4 .IX Item "-fipa-sra" جایگزینی اسکالر بین‌روالیِ مجموعه‌ها (interprocedural scalar replacement of aggregates)، حذف پارامترهای استفاده‌نشده و جایگزینی پارامترهای ارجاعی با پارامترهای مقداری را انجام می‌دهد. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-finline\-limit=\fR\fIn\fR 4 .IX Item "-finline-limit=n" به‌طور پیش‌فرض، GCC اندازهٔ توابعی که می‌توانند درون‌خطی شوند را محدود می‌کند. این پرچم امکان کنترل کلی (coarse) این حد را فراهم می‌کند. \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 شبه‌دستورالعمل (pseudo instruction) در این زمینهٔ خاص، یک معیار انتزاعی از اندازهٔ تابع است. این معیار به‌هیچ‌وجه نشان‌دهندهٔ تعداد دستورالعمل‌های اسمبلی نیست و معنای دقیق آن ممکن است از یک نگارش به نگارش دیگر تغییر کند. .RE .IP \fB\-fno\-keep\-inline\-dllexport\fR 4 .IX Item "-fno-keep-inline-dllexport" این گزینه نسخهٔ دقیق‌تری از \fB\-fkeep\-inline\-functions\fR است که فقط برای توابعی اعمال می‌شود که با استفاده از صفت (attribute) یا 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 تهاجمی‌تری را با مجاز دانستن جابه‌جایی ثبات‌ها (register moves) انجام می‌دهد. با تنظیم این پرچم، برخی یال‌های پادوابستگی (anti-dependences) حذف می‌شوند که موجب تولید انتقال‌های ثبات بر اساس تحلیل بازهٔ حیات (life-range analysis) می‌گردد. این گزینه تنها زمانی کارآمد است که \fB\-fmodulo\-sched\fR فعال باشد. .IP \fB\-fno\-branch\-count\-reg\fR 4 .IX Item "-fno-branch-count-reg" گذر بهینه‌سازی را که به دنبال فرصت‌هایی برای استفاده از دستورالعمل‌های «کاهش و پرش» (decrement and branch) روی یک ثبات شمارنده به جای توالی دستوراتی است که یک ثبات را کاهش داده، با صفر مقایسه کرده و سپس بر اساس نتیجه پرش می‌کنند، غیرفعال می‌کند. این گزینه فقط در معماری‌هایی که از چنین دستورالعمل‌هایی پشتیبانی می‌کنند، از جمله 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 این گزینه این رفتار را خاموش می‌کند؛ زیرا برخی برنامه‌ها به‌طور صریح به رفتن متغیرها به بخش داده (data section) متکی هستند—برای نمونه، تا فایل اجراییِ حاصل بتواند ابتدای آن بخش را پیدا کرده و/یا بر اساس آن فرضیاتی داشته باشد. .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 در یک سامانهٔ 32 بیتی، ثبات‌ها را تفکیک کرده و آن‌ها را به‌طور مستقل تخصیص می‌دهد. این کار معمولاً کد بهتری برای این نوع‌ها ایجاد می‌کند، اما ممکن است عیب‌یابی (debugging) را دشوارتر سازد. .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). این مرحله همچنین انتشار سراسری مقادیر ثابت و رونوشت (constant and copy 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 انجام می‌شود. هدف این مرحله پاک‌سازی سرریزهای زائد به حافظه (redundant 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 در Fortran) تعریف شده‌اند ممکن است بعداً با آرایه‌های انتهایی طولانی‌تر بازنویسی شوند. این امر مانع از بهینه‌سازی‌های خاصی می‌شود که به دانستن کران‌های آرایه وابسته هستند. .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). این مورد شامل استفاده از انتقال‌های شرطی، دستورالعمل‌های min ،max ،set flags و 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" در C++ ABI چندین نقطهٔ ورود برای سازنده‌ها و نابودکننده‌ها الزامی است: یکی برای زیرشیء پایه، یکی برای یک شیء کامل، و دیگری برای یک نابودکنندهٔ مجازی که پس از آن عملگر operator delete را فراخوانی می‌کند. برای سلسله‌مراتبی با پایه‌های مجازی، انواع پایه و کامل همسان (clone) هستند، که به معنای وجود دو نسخه از تابع است. با این گزینه، انواع پایه و کامل به thunkهایی تبدیل می‌شوند که یک پیاده‌سازی مشترک را فراخوانی می‌کنند. .Sp توسط \fB\-Os\fR فعال می‌شود. .IP \fB\-fdelete\-null\-pointer\-checks\fR 4 .IX Item "-fdelete-null-pointer-checks" فرض می‌کند برنامه‌ها نمی‌توانند با اطمینان اشاره‌گرهای null را مبدأگشایی (dereference) کنند و هیچ کد یا عنصری از داده در آدرس صفر قرار ندارد. این گزینه بهینه‌سازی‌های سادهٔ پایدارسازی ثابت‌ها (constant folding) را در تمام سطوح بهینه‌سازی فعال می‌کند. علاوه بر این، سایر مراحل بهینه‌سازی در GCC از این پرچم برای کنترل تحلیل‌های سراسری جریان داده استفاده می‌کنند که بررسی‌های بی‌فایده برای اشاره‌گرهای null را حذف می‌نمایند؛ این تحلیل‌ها فرض می‌کنند که دسترسی به آدرس صفر حافظه همواره منجر به یک تله (trap) می‌شود، بنابراین اگر اشاره‌گری پس از مبدأگشایی شدن بررسی شود، نمی‌تواند null باشد. .Sp با این حال توجه داشته باشید که در برخی محیط‌ها این فرض صادق نیست. برای برنامه‌هایی که به چنین رفتاری وابسته هستند از \fB\-fno\-delete\-null\-pointer\-checks\fR برای غیرفعال کردن این بهینه‌سازی استفاده کنید. .Sp این گزینه به‌طور پیش‌فرض در اکثر معماری‌های مقصد فعال است. روی AVR و MSP430، این گزینه کاملاً غیرفعال است. .Sp مراحلی که از اطلاعات جریان داده استفاده می‌کنند، به‌طور مستقل در سطوح بهینه‌سازی مختلف فعال می‌شوند. .IP \fB\-fdevirtualize\fR 4 .IX Item "-fdevirtualize" تلاش برای تبدیل فراخوانی توابع مجازی به فراخوانی‌های مستقیم. این کار هم در درون یک رویه و هم بین‌رویه‌ای به‌عنوان بخشی از درون‌خط‌سازی غیرمستقیم (\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" ارسال اطلاعات اضافی مورد نیاز برای غیرمجازی‌سازی (devirtualization) تهاجمی هنگام اجرای بهینه‌ساز زمان پیوند در حالت تبدیل محلی (local transformation mode). این گزینه امکان غیرمجازی‌سازی بیشتری را فراهم می‌کند اما حجم داده‌های جاری‌شده (streamed) را به‌طور چشمگیری افزایش می‌دهد. به همین دلیل به‌طور پیش‌فرض غیرفعال است. .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++ مقدار یک شیء تنها تحت تأثیر تغییرات ایجادشده در طول دورهٔ حیات آن قرار می‌گیرد: هنگامی که سازنده آغاز می‌شود، شیء دارای مقداری نامشخص است و هر تغییری در طول چرخهٔ حیات شیء پس از نابودی آن مرده تلقی می‌شود. در حالت عادی حذف ذخیره‌سازی مرده از این مزیت بهره می‌برد؛ اگر کد شما به ماندگاری مقدار حافظهٔ شیء فراتر از چرخهٔ حیات آن وابسته است، می‌توانید با این پرچم این بهینه‌سازی را غیرفعال کنید. برای حفظ ذخیره‌سازی‌های پیش از آغاز سازنده (مثلاً به این دلیل که عملگر 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" استفاده از ناحیه‌های (regions) مشخص‌شده برای تخصیص‌دهنده یکپارچه ثبات‌ها. آرگومان \&\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). این گزینه معمولاً منجر به تولید کد سریع‌تر و کوچک‌تر در ماشین‌هایی با فایل‌های ثبات بزرگ (>= 32 ثبات) می‌شود، اما می‌تواند سرعت کامپایلر را کاهش دهد. .Sp این گزینه در سطح \fB\-O3\fR برای برخی از مقاصد فعال است. .IP \fB\-fno\-ira\-share\-save\-slots\fR 4 .IX Item "-fno-ira-share-save-slots" غیرفعال کردن اشتراک‌گذاری اسلات‌های پشته مورد استفاده برای ذخیره ثبات‌های سخت‌افزاریِ استفاده‌شده در فراخوانی (call\-used hard registers) که در طول یک فراخوانی حفظ می‌شوند. هر ثبات سخت‌افزاری یک اسلات پشته جداگانه دریافت می‌کند و در نتیجه فریم‌های پشته تابع بزرگ‌تر می‌شوند. .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" فعال کردن بازتولید (rematerialization) حساس به CFG در LRA. به جای بارگذاری مقادیر شبه‌ثبات‌های سرریز شده، 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" در صورت پشتیبانی ماشین مقصد، تلاش برای بازآرایی دستورالعمل‌ها جهت حذف توقف‌های اجرایی (stalls) ناشی از در دسترس نبودن داده‌های مورد نیاز. این امر با صدور دستورالعمل‌های دیگر تا زمان آماده شدن نتیجه دستور بارگذاری یا ممیز شناور، به ماشین‌هایی که دستورالعمل‌های بارگذاری حافظه یا ممیز شناور کند دارند کمک می‌کند. .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" غیرفعال کردن جابه‌جایی گمانه‌زنانه دستورالعمل‌های غیربارگذاری (non\-load)، که به طور عادی هنگام زمان‌بندی قبل از تخصیص ثبات، یعنی با \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 تعیین این‌که چه تعداد دستورالعمل (در صورت وجود) می‌توانند در طول دومین گذر زمان‌بندی پیش از موعد از صف دستورالعمل‌های متوقف‌شده به فهرست آماده (ready list) منتقل شوند. \&\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 scheduling) هنگام زمان‌بندی پس از تخصیص ثبات. این کار امکان جابه‌جایی در میان مرزهای بلوک پایه را فراهم می‌کند که منجر به زمان‌بندی‌های سریع‌تری می‌شود. این گزینه آزمایشی است، چرا که همه توصیفات ماشین استفاده‌شده توسط GCC پردازنده را به اندازه کافی دقیق مدل‌سازی نمی‌کنند تا از نتایج غیرقابل اعتماد الگوریتم جلوگیری شود. .Sp این گزینه تنها زمانی معنا دارد که زمان‌بندی پس از تخصیص ثبات فعال باشد، یعنی با \&\fB\-fschedule\-insns2\fR یا در \fB\-O2\fR یا بالاتر. .IP \fB\-fsched\-group\-heuristic\fR 4 .IX Item "-fsched-group-heuristic" فعال کردن روش اکتشافی گروه (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" فعال کردن روش اکتشافی مسیر بحرانی (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" فعال کردن روش اکتشافی دستورالعمل گمانه‌زنانه (speculative instruction 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، اجازه مداخله در نمادها (interposition of symbols) را توسط پیونددهنده پویا می‌دهند. این بدان معناست که برای نمادهای صادرشده از DSO، کامپایلر نمی‌تواند با این پیش‌بینی که ممکن است تابع یا متغیر مورد نظر تغییر کند، انتشار بین‌رویه‌ای (interprocedural propagation)، درون‌خطی‌سازی (inlining) و سایر بهینه‌سازی‌ها را انجام دهد. گرچه این ویژگی، برای مثال جهت بازنویسی توابع تخصیص حافظه با یک پیاده‌سازی اشکال‌زدایی مفید است، اما از نظر کیفیت کد پرهزینه است. با \fB\-fno\-semantic\-interposition\fR، کامپایلر فرض می‌کند که اگر مداخله برای توابع رخ دهد، تابع جایگزین دقیقاً همان معناشناسی (و اثرات جانبی) را خواهد داشت. به طور مشابه اگر مداخله برای متغیرها رخ دهد، سازنده متغیر یکسان خواهد بود. این پرچم روی توابعی که صراحتاً inline اعلان شده‌اند (جایی که مداخله هرگز مجاز به تغییر معناشناسی نیست) و نمادهایی که صراحتاً weak اعلان شده‌اند، اثری ندارد. .IP \fB\-fshrink\-wrap\fR 4 .IX Item "-fshrink-wrap" تولید پیش‌درآمد تابع (function prologue) فقط قبل از بخش‌هایی از تابع که به آن نیاز دارند، به جای قرار دادن آن در ابتدای تابع. این پرچم به‌طور پیش‌فرض در \&\fB\-O\fR و بالاتر فعال است. .IP \fB\-fshrink\-wrap\-separate\fR 4 .IX Item "-fshrink-wrap-separate" جمع‌وجورسازی (Shrink\-wrap) بخش‌های مجزای پیش‌درآمد و پس‌درآمد (epilogue) به‌طور جداگانه، تا آن بخش‌ها تنها در صورت نیاز اجرا شوند. این گزینه به‌طور پیش‌فرض روشن است، اما هیچ اثری ندارد مگر اینکه \fB\-fshrink\-wrap\fR نیز روشن باشد و معماری هدف از آن پشتیبانی کند. .IP \fB\-fcaller\-saves\fR 4 .IX Item "-fcaller-saves" فعال‌سازی تخصیص مقادیر به ثبات‌هایی که با فراخوانی توابع بازنویسی (clobbered) می‌شوند، از طریق صدور دستورالعمل‌های اضافه برای ذخیره و بازیابی ثبات‌ها در اطراف این فراخوانی‌ها. چنین تخصیصی تنها زمانی انجام می‌شود که به نظر برسد به تولید کد بهتری می‌انجامد. .Sp این گزینه همیشه به‌طور پیش‌فرض در ماشین‌های خاصی فعال است؛ معمولاً ماشین‌هایی که هیچ ثبات حفظ‌شده در فراخوانی (call\-preserved) برای استفاده به عنوان جایگزین ندارند. .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 برای تخصیص، در صورتی که آن ثبات‌ها توسط هیچ تابع فراخوانی‌شده‌ای استفاده نشوند. در این حالت نیازی به ذخیره و بازیابی آن‌ها در اطراف فراخوانی‌ها نیست. این کار تنها زمانی ممکن است که توابع فراخوانی‌شده بخشی از همان واحد ترجمه تابع جاری باشند و قبل از آن کامپایل شوند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است، با این حال اگر کد تولیدشده برای پروفایل‌سازی ابزارگذاری شود (\fB\-p\fR یا \fB\-pg\fR)، یا اگر نحوه استفاده callee\*(Aqs از ثبات نتواند دقیقاً مشخص شود (این اتفاق در مقصدهایی رخ می‌دهد که پیش‌درآمدها و پس‌درآمدها را در 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" انجام ترفیع بارگذاری‌ها از اشاره‌گرهای شرطی روی درخت‌ها. این گذر به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fhoist\-adjacent\-loads\fR 4 .IX Item "-fhoist-adjacent-loads" ترفیع گمانه‌زنانهٔ بارگذاری‌ها از هر دو شاخه یک if\-then\-else، در صورتی که بارگذاری‌ها از مکان‌های مجاور در یک ساختار باشند و معماری هدف دارای دستورالعمل انتقال شرطی باشد. این پرچم به‌طور پیش‌فرض در \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" کشف اینکه کدام متغیرهای ایستا از واحد ترجمه خارج نمی‌شوند. به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-reference\-addressable\fR 4 .IX Item "-fipa-reference-addressable" کشف متغیرهای ایستای فقط‌خواندنی، فقط‌نوشتنی و غیرقابل‌آدرس‌دهی. به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-reorder\-for\-locality\fR 4 .IX Item "-fipa-reorder-for-locality" گروه‌بندی زنجیره‌های فراخوانی در نزدیکی یکدیگر در چیدمان دودویی جهت بهبود محلی بودن کد (code locality) و به حداقل رساندن فواصل پرش بین توابعی که مکرراً فراخوانی می‌شوند. برخلاف \fB\-freorder\-functions\fR، این گذر زنجیره‌های فراخوانی بین توابع را در نظر گرفته و آن‌ها را با یکدیگر گروه‌بندی می‌کند، به‌جای اینکه تمام توابع داغ/عادی/سرد/هرگز اجرا نشده را در بخش‌های جداگانه قرار دهد. برخلاف \fB\-fprofile\-reorder\-functions\fR، هدف آن بهبود محلی بودن کد در سرتاسر زمان اجرای برنامه است نه تمرکز صرف بر راه‌اندازی برنامه. این گزینه با گزینه صریح \&\fB\-flto\-partition=\fR ناسازگار است، چرا که طرح افرازبندی سفارشی را تحمیل می‌کند. در صورت استفاده از این گزینه، توصیه می‌شود از بازخورد پروفایل نیز استفاده کنید، اما در غیر این صورت این گزینه به‌طور پیش‌فرض فعال نیست. .IP \fB\-fipa\-stack\-alignment\fR 4 .IX Item "-fipa-stack-alignment" کاهش هم‌ترازی پشته در محل فراخوانی‌ها (call sites) در صورت امکان. به‌طور پیش‌فرض فعال است..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" کلون‌سازی توابع را برای تقویت انتشار بین‌رویه‌ای مقادیر ثابت انجام می‌دهد. در صورت فعال بودن، هرگاه تابعی که از بیرون قابل مشاهده است با آرگومان‌های ثابت فراخوانی‌پذیر باشد، انتشار بین‌رویه‌ای مقادیر ثابت کلون‌سازی تابع را انجام می‌دهد. از آنجا که این بهینه‌سازی می‌تواند چندین نسخه از توابع ایجاد کند، ممکن است اندازه کد را به طور چشمگیری افزایش دهد (نگاه کنید به \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 را مختل کند. این بهینه‌سازی با فعال بودن بهینه‌سازی زمان پیوند مؤثرتر عمل می‌کند. .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 توابع تحت‌تأثیر توسط بهینه‌سازی‌های بین‌رویه‌ای کامپایلر تعیین می‌شوند. برای نمونه، فراخواننده تحت‌تأثیر قرار می‌گیرد هنگامی که تابعی درون‌خطی‌سازی (inline) شده در فراخواننده‌اش باشد، تابعی کلون شده و فراخواننده برای فراخوانی این کلون جدید تغییر یابد، یا اطلاعات خلوص/ثابت بودن (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" مسیرهایی را که به دلیل استفاده از یک مقدار تهی (null) به روشی که توسط ویژگی‌های \f(CW\*(C`returns_nonnull\*(C'\fR یا \f(CW\*(C`nonnull\*(C'\fR ممنوع شده است موجب رفتار اشتباه یا تعریف‌نشده می‌شوند، شناسایی می‌کند. این مسیرها را از جریان اصلی کنترل تفکیک کرده و دستور دارای رفتار اشتباه یا تعریف‌نشده را به یک تله (trap) تبدیل می‌کند. این گزینه در حال حاضر فعال نیست، اما ممکن است در آینده توسط \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" تبدیل همانی (identity transformation) را برای 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 است. این گزینه ساختار حلقه‌ای را محاسبه می‌کند که برای محلی بودن داده‌ها (data\-locality) و موازی‌سازی بهینه‌سازی شده است. این گزینه آزمایشی است. .IP \fB\-floop\-parallelize\-all\fR 4 .IX Item "-floop-parallelize-all" از تحلیل وابستگی داده‌های Graphite برای شناسایی حلقه‌های قابل موازی‌سازی استفاده می‌کند. تمام حلقه‌هایی را که تحلیل نشان می‌دهد فاقد وابستگی‌های بین تکرارها (loop\-carried dependences) هستند موازی‌سازی می‌کند، بدون اینکه سودمند بودن موازی‌سازی حلقه‌ها را بررسی کند. .IP \fB\-ftree\-coalesce\-vars\fR 4 .IX Item "-ftree-coalesce-vars" هنگام تبدیل برنامه به خارج از بازنمایی SSA، تلاش می‌کند با ادغام نسخه‌های متغیرهای مختلف تعریف‌شده توسط کاربر به‌جای متغیرهای موقت کامپایلر، رونوشت‌برداری را کاهش دهد. این کار ممکن است توانایی اشکال‌زدایی یک برنامه بهینه‌سازی‌شده را که با \&\fB\-fno\-var\-tracking\-assignments\fR کامپایل شده است، به‌شدت محدود کند. در حالت نفی، این پرچم از ادغام SSA متغیرهای کاربر جلوگیری می‌کند. این گزینه در صورت فعال بودن بهینه‌سازی، به‌طور پیش‌فرض فعال است و در غیر این صورت کار چندانی انجام نمی‌دهد. .IP \fB\-ftree\-loop\-if\-convert\fR 4 .IX Item "-ftree-loop-if-convert" تلاش می‌کند پرش‌های شرطی در درونی‌ترین حلقه‌ها را به معادل‌های بدون انشعاب (branch\-less) تبدیل کند. هدف، حذف جریان کنترل از درونی‌ترین حلقه‌ها به منظور بهبود توانایی مرحله برداری‌سازی (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) استفاده کنیم. این مرحله انتقال ذخیره‌سازی (store motion) را نیز شامل می‌شود..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" بهینه‌سازی‌های متغیر القایی (کاهش توان محاسباتی، ادغام متغیر القایی و حذف متغیر القایی) را روی درخت‌ها انجام می‌دهد. به‌طور پیش‌فرض در \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 منجر می‌شود، اما درخت‌های بسیار پیچیده‌تری در اختیار expanderها قرار می‌دهد که حاصل آن تولید 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" برداری‌سازی بلوک پایه (basic block) را روی درخت‌ها انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \&\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" متغیرهای خودکار (automatic variables) را با یک الگو یا با صفر مقداردهی اولیه می‌کند تا امنیت و پیش‌بینی‌پذیری برنامه با جلوگیری از افشا و استفاده از حافظه مقداردهی‌نشده افزایش یابد. GCC همچنان متغیر خودکاری را که مقداردهی اولیه صریح ندارد، مقداردهی‌نشده در نظر می‌گیرد؛ پرچم‌های \fB\-Wuninitialized\fR و \&\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR همچنان پیام‌های هشدار را برای چنین متغیرهای خودکاری گزارش خواهند کرد و کامپایلر بهینه‌سازی را طوری انجام می‌دهد که گویی متغیر مقداردهی‌نشده است. با این گزینه، GCC همچنین هرگونه لایه‌بندی/فاصله‌گذاری (padding) متغیرهای خودکار با نوع ساختار یا union را با صفر مقداردهی اولیه می‌کند. با این حال، پیاده‌سازی فعلی نمی‌تواند متغیرهای خودکاری را که بین عبارت کنترلی و اولین 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، به بازنمایی داده (در حافظه یا ثبات‌های ماشین) اشاره دارند، نه به تفسیر آن‌ها به‌عنوان مقادیر عددی. این تمایز ممکن است در زبان‌هایی که از انواع داده با bias یا ضریب‌های ضمنی پشتیبانی می‌کنند و با افزونه‌هایی نظیر \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 از همان نوع چنین می‌شد. این بدان معناست که الگوی مقداردهی اولیه عموماً به نوع متغیر مقداردهی‌شده وابسته نیست. یک استثنای قابل توجه این است که متغیرهای بولی (سخت‌نشده / non\-hardened) که در ثبات‌ها جای می‌گیرند، حتی زمانی که \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 یک بررسی زمان اجرا (runtime check) از مسیر کد برداری‌شده محافظت می‌کند تا آن را تنها برای تعداد تکرارهایی فعال سازد که احتمالاً سریع‌تر از اجرای حلقه اسکالر اصلی اجرا خواهند شد. مدل \fBcheap\fR برداری‌سازی حلقه‌هایی را غیرفعال می‌کند که انجام آن هزینه‌بر و نامقرون‌به‌صرفه باشد، مثلاً به دلیل بررسی‌های زمان اجرای مورد نیاز برای وابستگی داده‌ها یا ترازسازی، اما در غیر این صورت با مدل \fBdynamic\fR یکسان است. مدل \fBvery\-cheap\fR برداری‌سازی حلقه‌ها را در صورتی که هرگونه بررسی زمان اجرا برای وابستگی داده‌ها یا ترازسازی لازم باشد غیرفعال می‌کند؛ این مدل همچنین برداری‌سازی حلقه‌های موخره (epilogue loops) را غیرفعال می‌سازد، اما در غیر این صورت با مدل \fBcheap\fR برابر است. .Sp مدل هزینه پیش‌فرض به سایر پرچم‌های بهینه‌سازی بستگی دارد و یا \fBdynamic\fR است یا \fBcheap\fR. .IP \fB\-fsimd\-cost\-model=\fR\fImodel\fR 4 .IX Item "-fsimd-cost-model=model" مدل هزینه مورد استفاده برای برداری‌سازی حلقه‌های نشانه‌گذاری‌شده با دایرکتیو simd در OpenMP را تغییر می‌دهد. آرگومان \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) را روی درخت‌ها انجام می‌دهد. این شبیه به گذر انتشار مقدار ثابت (constant propagation) است، اما به‌جای مقادیر، دامنه‌هایی از مقادیر منتشر می‌شوند. این امر به بهینه‌سازها امکان می‌دهد بررسی‌های غیرضروری دامنه مانند بررسی محدوده آرایه و بررسی اشاره‌گر تهی (null) را حذف کنند. این گزینه به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است. حذف بررسی اشاره‌گر تهی تنها در صورتی انجام می‌شود که \fB\-fdelete\-null\-pointer\-checks\fR فعال باشد. .IP \fB\-fsplit\-paths\fR 4 .IX Item "-fsplit-paths" مسیرهای منتهی به یال‌های بازگشتی حلقه (loop backedges) را تقسیم می‌کند. این می‌تواند حذف کد مرده (dead code elimination) و حذف عبارات فرعی مشترک (common subexpression elimination) را بهبود بخشد. این گزینه به‌طور پیش‌فرض در \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`i\*(C'\fR یک عدد صحیح ۳۲ بیتی یا کوچک‌تر باشد، هم انشعاب و هم بدنه دستور \f(CW\*(C`if\*(C'\fR (به جز فراخوانی \f(CW\*(C`snprint\*(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" بازتوالی بلوک‌های پایه در تابع کامپایل‌شده به‌منظور کاهش تعداد انشعاب‌های طی‌شده و بهبود محلی‌سازی کُد (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 افرازبندی (پارتیشن‌بندی) می‌کند تا عملکرد صفحه‌بندی (paging) و محلی‌سازی حافظه نهان (cache locality) بهبود یابد. .Sp این بهینه‌سازی در صورت وجود مدیریت استثنا یا جدول‌های بازپیچی (unwind tables) (در مقصدهایی که از setjump/longjump یا طرح اختصاصی مقصد استفاده می‌کنند)، برای بخش‌های linkonce، برای توابع دارای صفت section تعریف‌شده توسط کاربر، و روی هر معماری که از بخش‌های نام‌گذاری‌شده پشتیبانی نمی‌کند، به‌طور خودکار خاموش می‌شود. هنگامی که \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، این گزینه گروه‌بندی تمام توابع درون یک دسته (داغ/عادی/سرد/هرگز اجرا‌نشده) را در کنار هم اولویت‌بندی می‌کند. این سازوکار با استفاده از زیربخش‌های ویژه \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 rules) قابل‌اعمال برای زبان در حال کامپایل را فرض کند. برای C (و ++C)، این گزینه بهینه‌سازی‌ها را بر اساس نوع عبارت‌ها فعال می‌کند. به‌طور خاص، فرض می‌شود شیئی از یک نوع هرگز در آدرسی مشابه با شیئی از نوع دیگر قرار نمی‌گیرد، مگر اینکه آن نوع‌ها تقریباً یکسان باشند. برای نمونه، یک \f(CW\*(C`unsigned int\*(C'\fR می‌تواند با یک \f(CW\*(C`int\*(C'\fR نام مستعار (alias) شود، اما با یک \&\f(CW\*(C`void*\*(C'\fR یا \f(CW\*(C`double\*(C'\fR نمی‌تواند. یک نوع کاراکتری ممکن است با هر نوع دیگری alias شود. .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 بایتی توسط پردازنده واکشی (fetch) شود. این یک بهینه‌سازی برای کارایی کد است و ترازسازی برای توابعی که سرد (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 تمام مقصدهای پرش را با مرز توانی از دو تراز می‌کند. .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) را جبران می‌کند. این یک بهینه‌سازی کارایی کد است و ترازسازی برای حلقه‌هایی که سرد در نظر گرفته می‌شوند نادیده گرفته می‌شود. .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 مقصدهای پرش را برای آن دسته از مقصدهایی که تنها از طریق پرش قابل دسترسی هستند، با مرز توانی از دو تراز می‌کند. در این حالت نیازی به اجرای هیچ دستور ساختگی نیست. این یک بهینه‌سازی برای کارایی کد است و ترازسازی برای پرش‌هایی که سرد در نظر گرفته می‌شوند نادیده گرفته می‌شود. .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) را مرتب‌سازی مجدد نمی‌کند. آن‌ها را به همان ترتیبی که در فایل ورودی آمده‌اند در خروجی قرار می‌دهد. هنگامی که این گزینه استفاده شود، متغیرهای استاتیکِ ارجاع‌داده‌نشده حذف نمی‌شوند. این گزینه برای پشتیبانی از کدهای موجود طراحی شده است که به ترتیب خاصی وابسته هستند. برای کدهای جدید، بهتر است در صورت امکان از مشخصه‌ها (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) را به همان شیوه‌ای که معمولاً برای تخصیص ثبات به کار می‌رود می‌سازد و به هر تار یک شبه‌ثبات جداگانه اختصاص می‌دهد. این کار به مرحلهٔ تخصیص ثبات اجازه می‌دهد که مستقیماً روی شبه‌ثبات‌ها عمل کند، و همچنین چندین مرحله بهینه‌سازی دیگر مانند CSE، بهینه‌ساز حلقه و حذف کدهای بی‌اثر بدیهی را تقویت می‌کند. با این حال، ممکن است اشکال‌زدایی (debugging) را غیرممکن کند، چرا که متغیرها دیگر در یک «ثبات اصلی» (home register) باقی نمی‌مانند. .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 مشخص شده‌اند، به توابع استاتیک تبدیل می‌شوند و در نتیجه توسط بهینه‌سازهای بین‌روالی (interprocedural optimizers) با تهاجم بیشتری بهینه‌سازی می‌شوند. .Sp همراه با \fB\-flto\fR این گزینه کاربرد محدودی دارد. در اغلب موارد، فهرست دقیق نمادهای استفاده‌شده یا صادرشده از باینری از طریق اطلاعات تجزیه و حل (resolution) که توسط افزونهٔ پیونددهنده به بهینه‌ساز زمان پیوند منتقل می‌شود، مشخص است. این گزینه همچنان در صورتی که از افزونه پیونددهنده استفاده نشود یا در حین گام پیوند افزایشی هنگامی که کد نهایی تولید می‌شود (با \fB\-flto\fR \&\fB\-flinker\-output=nolto\-rel\fR)، مفید است. .IP \fB\-flto[=\fR\fIn\fR\fB]\fR 4 .IX Item "-flto[=n]" این گزینه بهینه‌ساز استاندارد زمان پیوند (link\-time optimizer) را اجرا می‌کند. هنگام فراخوانی با کد منبع، نمایش GIMPLE (یکی از نمایش‌های داخلی GCC) را تولید کرده و آن را در بخش‌های ویژهٔ ELF در فایل شیء می‌نویسد. هنگامی که فایل‌های شیء با یکدیگر پیوند داده می‌شوند، تمام بدنه‌های توابع از این بخش‌های ELF خوانده شده و به گونه‌ای نمونه‌سازی می‌شوند که گویی بخشی از همان واحد ترجمه (translation unit) یکسان بوده‌اند. .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 و بالعکس به‌صورت درون‌خطی قرار دهد. .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 به فرمان پیوند، این تصمیم خودکار برای انجام بهینه‌سازی زمان پیوند را لغو کنید. .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 برای فعال‌سازی تولید اطلاعات اشکال‌زدایی (debug info) باید \fB\-g\fR را در زمان کامپایل ارائه دهید. اگر هر یک از فایل‌های ورودی در زمان پیوند با قابلیت تولید اطلاعات اشکال‌زدایی ساخته شده باشند، عمل پیوند نیز تولید اطلاعات اشکال‌زدایی را فعال خواهد کرد. هرگونه تنظیمات دقیق اطلاعات اشکال‌زدایی مانند سطح dwarf در \fB\-gdwarf\-5\fR باید صراحتاً در خط فرمان پیونددهنده تکرار شود و ترکیب تنظیمات متفاوت در واحدهای ترجمهٔ مختلف توصیه نمی‌شود. .Sp اگر LTO با اشیایی با پیوند C (C linkage) مواجه شود که با انواع ناسازگار در واحدهای ترجمهٔ جداگانه‌ای که قرار است با هم پیوند یابند اعلان شده‌اند (رفتار تعریف‌نشده طبق 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، به‌جای \fBar\fR و \fBranlib\fR از \fBgcc\-ar\fR و \fBgcc\-ranlib\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 را مشخص کنید، بهینه‌سازی و تولید کد انجام‌شده در زمان پیوند به‌صورت موازی در قالب \fIn\fR کار موازی با بهره‌گیری از برنامهٔ \fBmake\fR نصب‌شده اجرا می‌شود. متغیر محیطی \fBMAKE\fR ممکن است برای بازنویسی برنامهٔ مورد استفاده به کار رود. .Sp شما همچنین می‌توانید \fB\-flto=jobserver\fR را مشخص کنید تا از حالت job server مربوط به GNU make برای تعیین تعداد کارهای موازی استفاده شود. این گزینه زمانی که Makefile فراخوانندهٔ GCC از قبل به‌صورت موازی در حال اجرا باشد مفید است. برای این کار، باید یک \fB+\fR به ابتدای دستور در Makefile والد اضافه کنید. این گزینه احتمالاً تنها زمانی کار می‌کند که \fBMAKE\fR همان GNU make باشد. حتی بدون مقدار این گزینه، GCC تلاش می‌کند تا به‌طور خودکار یک job server فعال مربوط به GNU make را شناسایی کند. .Sp از \fB\-flto=auto\fR برای استفاده از job server مربوط به GNU make (در صورت در دسترس بودن) استفاده کنید، وگرنه سیستم به تشخیص خودکار تعداد رشته‌های پردازنده موجود در سیستم شما بازمی‌گردد. .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 یا در حین پیوند پویا) قابل دسترسی باشند. بهبودهای حاصل در کیفیت کد باینری‌ها (و کتابخانه‌های اشتراکی که از نمایانی پنهان یا hidden visibility استفاده می‌کنند) مشابه \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 غیر-fat باید Makefileها را برای استفاده از آن‌ها اصلاح کرد. .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" پس از تخصیص ثبات و تفکیک دستورالعمل‌های پس از تخصیص ثبات، یک گذر انتشار کپی (copy\-propagation) را اجرا می‌کند تا وابستگی‌های زمان‌بندی را کاهش داده و در مواردی کپی را حذف نماید. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود..IP \fB\-fprofile\-correction\fR 4 .IX Item "-fprofile-correction" پروفایل‌های گردآوری‌شده با استفاده از باینری سازوارشده (instrumented) برای برنامه‌های چند‌نخی ممکن است به دلیل به‌روزرسانی‌های از دست‌رفتهٔ شمارنده‌ها، ناسازگار باشند. هنگامی که این گزینه مشخص شود، 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 تمامی بخش‌هایی از برنامه که در طول اجرای آزمایشی (train run) اجرا نشده‌اند، به جای سرعت، به‌شدت برای اندازه بهینه‌سازی می‌شوند. در برخی موارد، آزمودن و آموزش تمام مسیرهای داغِ ممکن در برنامه عملی نیست. (برای نمونه، برنامه ممکن است شامل توابعی مخصوص یک سخت‌افزار مشخص باشد و آموزش نتواند تمام پیکربندی‌های سخت‌افزاری که برنامه روی آن‌ها اجرا می‌شود را پوشش دهد.) با \&\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 بهینه‌سازی‌های هدایت‌شده با بازخورد پروفایل (feedback\-directed) و بهینه‌سازی‌های زیر را فعال می‌کند، که بسیاری از آن‌ها عموماً تنها در صورت در دسترس بودن بازخورد پروفایل سودمند هستند: .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 بهینه‌سازی‌های مبتنی بر بازخورد بر پایهٔ نمونه‌برداری (sampling\-based feedback\-directed) و بهینه‌سازی‌های زیر را فعال می‌کند، که بسیاری از آن‌ها عموماً تنها در صورت در دسترس بودن بازخورد پروفایل سودمند هستند: .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 روی یک سیستم مقصد GNU/Linux پشتیبانی‌شده است. برای اطلاعات بیشتر، نگاه کنید به <\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 گزینه‌های زیر رفتار کامپایلر را در رابطه با محاسبات ممیز شناور (floating\-point arithmetic) کنترل می‌کنند. این گزینه‌ها بین سرعت و درستی تعادل برقرار می‌کنند. همهٔ آن‌ها باید به‌طور صریح فعال شوند. .IP \fB\-fexcess\-precision=\fR\fIstyle\fR 4 .IX Item "-fexcess-precision=style" این گزینه امکان کنترل دقت اضافی (excess precision) را روی ماشین‌هایی فراهم می‌کند که در آن‌ها محاسبات ممیز شناور در قالبی با دقت یا دامنهٔ بیشتری نسبت به انواع استاندارد و تبادلی ممیز شناور IEEE انجام می‌شود. نمونه‌ای از چنین مقصدی، ممیز شناور x87 در پردازنده‌های x86 است که در داخل به جای قالب ۶۴ بیتی IEEE، از نمایش ۸۰ بیتی استفاده می‌کند. برای بیشتر برنامه‌ها، دقت اضافی بی‌ضرر است، اما برخی از برنامه‌ها ممکن است به الزامات استانداردهای زبان C یا C++ برای مدیریت مقادیر IEEE متکی باشند. .Sp به‌طور پیش‌فرض، \fB\-fexcess\-precision=fast\fR برقرار است؛ این بدان معناست که اگر به کد سریع‌تری بینجامد، عملیات ممکن است در دقتی وسیع‌تر از انواع مشخص‌شده در کد منبع انجام شوند، و زمان انجام گرد کردن به انواع مشخص‌شده در منبع غیرقابل‌پیش‌بینی است. هنگام کامپایل C یا C++، در صورتی که \fB\-fexcess\-precision=standard\fR مشخص شود، دقت اضافی از قواعد تعیین‌شده در ISO C99 یا C++ پیروی می‌کند؛ به‌ویژه، هم تبدیل نوع‌ها (casts) و هم انتساب‌ها (assignments) باعث می‌شوند مقادیر به انواع معنایی (semantic types) خود گرد شوند (در حالی که \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" متغیرهای ممیز شناور را در ثبات‌ها (registers) ذخیره نمی‌کند و مانع سایر گزینه‌هایی می‌شود که ممکن است نحوهٔ دریافت یک مقدار ممیز شناور از ثبات یا حافظه را تغییر دهند. این گزینه معمولاً جای خود را به \&\fB\-fexcess\-precision=standard\fR داده است که عام‌تر است. اگر از \&\fB\-ffloat\-store\fR استفاده می‌کنید، ممکن است لازم باشد برنامهٔ خود را تغییر دهید تا محاسبات میانی را صراحتاً در متغیرهای موقت ذخیره کند، زیرا \&\fB\-ffloat\-store\fR بر خلاف \fB\-fexcess\-precision=standard\fR که تبدیل نوع‌ها را نیز شامل می‌شود، گرد کردن به قالب IEEE را تنها در انتساب‌ها اعمال می‌کند. .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 را نقض کنند. هنگامی که در زمان پیوند (link time) استفاده شود، ممکن است کتابخانه‌ها یا فایل‌های راه‌اندازی‌ای (startup files) را شامل شود که واژهٔ کنترل 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" اجازه دادن به شرکت‌پذیری مجدد عملوندها در زنجیره‌ای از عملیات‌های ممیز شناور. این کار با امکان تغییر نتیجهٔ محاسبات، استانداردهای زبان ISO C و C++ را نقض می‌کند. نکته: بازآرایی ممکن است علامت صفر را تغییر دهد، مقادیر NaN را نادیده بگیرد و سرریز منفی یا مثبت را ایجاد یا مهار کند (و بنابراین نمی‌توان از آن در کدهایی که به رفتار گرد کردن وابسته هستند، مانند \&\f(CW\*(C`(x + 2**52) \- 2**52\*(C'\fR استفاده کرد). همچنین ممکن است مقایسه‌های ممیز شناور را بازآرایی کند و بنابراین در مواردی که مقایسه‌های مرتب‌شده لازم است، نباید به کار رود. این گزینه مستلزم فعال بودن هم‌زمان \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\-Ofast\fR توسط هیچ گزینهٔ \fB\-O\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\-Ofast\fR توسط هیچ گزینهٔ \fB\-O\fR دیگری فعال نمی‌شود، چرا که می‌تواند برای برنامه‌هایی که به پیاده‌سازی دقیق قوانین/مشخصات IEEE یا ISO برای توابع ریاضی وابسته‌اند، نتایج نادرست به بار آورد. .Sp پیش‌فرض \fB\-ftrapping\-math\fR است. .Sp نسخه‌های آیندهٔ GCC ممکن است با استفاده از دستور عمل‌یافت (pragma) مربوط به \&\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 ممکن است با استفاده از عملگر عمل‌یافت (pragma) مربوط به \&\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" کامپایل کد با این فرض که مقادیر NaN سیگنال‌دهندهٔ IEEE ممکن است حین عملیات ممیز شناور تله‌های قابل مشاهده برای کاربر تولید کنند. فعال کردن این گزینه، بهینه‌سازی‌هایی را که ممکن است تعداد استثناهای قابل رؤیت با NaNهای سیگنال‌دهنده را تغییر دهند، غیرفعال می‌کند. این گزینه مستلزم \fB\-ftrapping\-math\fR است. .Sp این گزینه باعث تعریف ماکروی پیش‌پردازندهٔ \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR می‌شود. .Sp پیش‌فرض \fB\-fno\-signaling\-nans\fR است. .Sp این گزینه آزمایشی است و در حال حاضر تضمین نمی‌کند که تمام بهینه‌سازی‌های GCC اثرگذار بر رفتار NaNهای سیگنال‌دهنده را غیرفعال سازد. .IP \fB\-fno\-fp\-int\-builtin\-inexact\fR 4 .IX Item "-fno-fp-int-builtin-inexact" اجازه ندادن به توابع توکار \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 این گزینه تنظیمات پیش‌فرض عملگر عمل‌یافت (pragma) مربوط به \&\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 خاتمه می‌یابد، تعداد دفعات اجرای هر کمان (arc) را در فایلی به نام \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، داده‌های جمع‌آوری‌شده از اندازه‌گیری کارایی (profiling) مقادیر عبارت‌ها را برای استفاده در بهینه‌سازی‌ها بازخوانی می‌کند. .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، داده‌های جمع‌آوری‌شده را بازخوانی کرده و عملاً بهینه‌سازی‌ها را بر اساس آن‌ها اعمال می‌کند. در حال حاضر، این بهینه‌سازی‌ها شامل تخصصی‌سازی (specialization) عملیات تقسیم با استفاده از آگاهی از مقدار مخرج است. .Sp با \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-frename\-registers\fR 4 .IX Item "-frename-registers" تلاش برای جلوگیری از وابستگی‌های کاذب در کد زمان‌بندی‌شده با استفاده از ثبات‌های باقی‌مانده پس از تخصیص ثبات. این بهینه‌سازی بیشترین سود را برای پردازنده‌هایی با ثبات‌های زیاد دارد. با این حال، بسته به قالب اطلاعات اشکال‌زداییِ به‌کاررفته توسط معماری هدف، این گزینه می‌تواند دیباگ کردن را غیرممکن کند؛ زیرا متغیرها دیگر در یک «ثبات مبنا» (home register) باقی نمی‌مانند. .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" تکرار دنباله (tail duplication) را برای بزرگ‌تر کردن اندازه سوپربلاک (superblock) انجام می‌دهد. این دگرگونی، جریان کنترل تابع را ساده کرده و به سایر بهینه‌سازی‌ها اجازه می‌دهد کارایی بهتری داشته باشند. .Sp توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-funroll\-loops\fR 4 .IX Item "-funroll-loops" حلقه‌هایی را که تعداد تکرار آن‌ها در زمان کامپایل یا هنگام ورود به حلقه قابل تعیین است باز می‌کند (loop unrolling). گزینه \fB\-funroll\-loops\fR مستلزم فعال‌سازی \&\fB\-frerun\-cse\-after\-loop\fR، \fB\-fweb\fR و \fB\-frename\-registers\fR است. همچنین لایه‌برداری کامل حلقه (complete loop peeling، یعنی حذف کامل حلقه‌هایی با تعداد تکرار اندک و ثابت) را فعال می‌کند. این گزینه حجم کد را بزرگ‌تر می‌کند و ممکن است سرعت اجرای آن را افزایش دهد یا ندهد. .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) در Fortran سودمند است، جایی که (برای نمونه) با فرض دسترسی‌های متوالی، برداری‌سازی (vectorization) بهتری را امکان‌پذیر می‌سازد. این پرچم به‌طور پیش‌فرض در سطح \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) می‌تواند بهینه‌سازی‌هایی را برای بهبود محلی بودن ارجاع (locality of reference) در فضای دستورالعمل انجام دهد. بیشتر سیستم‌هایی که از قالب شیء ELF استفاده می‌کنند پیونددهنده‌هایی با چنین بهینه‌سازی‌هایی دارند. در AIX، پیونددهنده بخش‌ها (CSECTها) را بر اساس گراف فراخوانی بازآرایی می‌کند. تأثیر عملکردی آن متغیر است. .Sp این گزینه‌ها همراه با جمع‌آوری زباله پیونددهنده (گزینه \fB\-\-gc\-sections\fR در linker) ممکن است به فایل‌های اجراییِ با پیوند ایستا (statically-linked) کوچک‌تری (پس از سبک‌سازی/strip) منجر شوند. .Sp در سیستم‌های ELF/DWARF این گزینه‌ها کیفیت اطلاعات اشکال‌زدایی را تنزل نمی‌دهند. البته ممکن است با سایر قالب‌های فایل‌های شیء یا اطلاعات اشکال‌زدایی مشکلاتی وجود داشته باشد. .Sp تنها در صورتی از این گزینه‌ها استفاده کنید که مزایای چشمگیری داشته باشند. هنگام استفاده از این گزینه‌ها، اسمبلر و پیونددهنده فایل‌های شیء و اجرایی بزرگ‌تری تولید می‌کنند و عملکرد کندتری خواهند داشت. این گزینه‌ها بر تولید کد تأثیر می‌گذارند و از بهینه‌سازی‌هایی توسط کامپایلر و اسمبلر که متکی بر موقعیت‌های نسبی درون یک واحد ترجمه هستند جلوگیری می‌کنند؛ زیرا این موقعیت‌ها تا زمان پیوند (link time) ناشناخته باقی می‌مانند. نمونه‌ای از این بهینه‌سازی‌ها، تعدیل فراخوانی‌ها (relaxing calls) به دستورالعمل‌های فراخوانی کوتاه‌تر است. .IP \fB\-fstdarg\-opt\fR 4 .IX Item "-fstdarg-opt" بخش مقدمه (prologue) توابع با آرگومان‌های متغیر (variadic) را با توجه به نحوه استفاده از آن آرگومان‌ها بهینه‌سازی می‌کند. .IP \fB\-fsection\-anchors\fR 4 .IX Item "-fsection-anchors" تلاش می‌کند با استفاده از نمادهای مشترک «لنگر» (anchor) برای آدرس‌دهی به اشیاء هم‌جوار، تعداد محاسبات آدرس نمادین را کاهش دهد. این تبدیل می‌تواند به کاهش تعداد مدخل‌های 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 را هنگام بازگشت از تابع صفر می‌کند تا با کاهش حملات برنامه‌نویسی مبتنی بر بازگشت (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" هنگامی که پیش‌بینی شود یک انشعاب با احتمالی کمتر از این آستانه (به درصد) پیموده می‌شود، به عنوان به‌خوبی قابل پیش‌بینی در نظر گرفته می‌شود. .IP \fBmax\-rtl\-if\-conversion\-insns\fR 4 .IX Item "max-rtl-if-conversion-insns" بهینه‌سازی RTL if\-conversion سعی می‌کند انشعاب‌های شرطی اطراف یک بلوک را حذف کرده و آن‌ها را با دستورالعمل‌های شرطی اجراشونده جایگزین کند. این پارامتر بیشینهٔ تعداد دستورالعمل‌ها را در بلوکی که باید برای if\-conversion در نظر گرفته شود مشخص می‌کند. کامپایلر همچنین از سایر روش‌های اکتشافی (heuristics) استفاده می‌کند تا تصمیم بگیرد آیا if\-conversion احتمالاً سودمند است یا خیر. .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 if\-conversion تلاش خواهد کرد انشعاب‌های شرطی اطراف یک بلوک را حذف کرده و آن‌ها را با دستورالعمل‌های شرطی اجراشونده جایگزین کند. این پارامترها بیشینهٔ هزینهٔ مجاز برای دنباله‌ای را که توسط if\-conversion تولید خواهد شد، بسته به اینکه انشعاب به صورت ایستا قابل پیش‌بینی تعیین شده باشد یا خیر، مشخص می‌کنند. یکای این پارامتر همانند یکای معیار درونی 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" کمینهٔ تعداد دستورالعمل‌هایی که باید در انتهای دو بلوک مطابقت داشته باشند تا cross\-jumping روی آن‌ها انجام شود. در صورتی که تمامی دستورالعمل‌های بلوکی که از آن cross\-jump صورت می‌گیرد مطابقت داشته باشند، از این مقدار صرف‌نظر می‌شود. .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 محاسباتی پرش می‌کند. برای جلوگیری از رفتار 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. اگر بیش از این تعداد دلخواه دستورالعمل جست‌وجو شود، صرفه‌جویی زمانی حاصل از پر کردن delay slot ناچیز خواهد بود، بنابراین جست‌وجو متوقف می‌شود. افزایش مقادیر به معنای بهینه‌سازی تهاجمی‌تر است که زمان کامپایل را با بهبود احتمالاً اندکی در زمان اجرا افزایش می‌دهد. .IP \fBmax\-delay\-slot\-live\-search\fR 4 .IX Item "max-delay-slot-live-search" هنگام تلاش برای پر کردن delay slotها، بیشینهٔ تعداد دستورالعمل‌ها برای بررسی هنگام جست‌وجو به دنبال بلوکی با اطلاعات ثبات زندهٔ معتبر. افزایش این مقدار که به صورت دلخواه انتخاب شده است، به معنای بهینه‌سازی تهاجمی‌تر و در نتیجه افزایش زمان کامپایل است. این پارامتر هنگامی که کد delay slot برای نگهداری گراف جریان کنترل (control-flow graph) بازنویسی شود، باید برداشته شود. .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" بیشینهٔ تعداد وابستگی‌های معلقی که زمان‌بندی قبل از تخلیهٔ وضعیت جاری و شروع دوباره مجاز می‌داند. توابع بزرگ با انشعاب‌ها یا فراخوانی‌های اندک می‌توانند فهرست‌های بیش از حد بزرگی ایجاد کنند که بدون نیاز حافظه و منابع را هدر می‌دهند. .IP \fBmax\-modulo\-backtrack\-attempts\fR 4 .IX Item "max-modulo-backtrack-attempts" بیشینهٔ تعداد تلاش‌های بازگشت به عقب (backtrack) که زمان‌بند هنگام زمان‌بندی پیمانه‌ای یک حلقه باید انجام دهد. مقادیر بزرگ‌تر می‌توانند زمان کامپایل را به صورت نمایی افزایش دهند. .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) را در یک تابع مشخص می‌کند که درخت درون‌خطی‌ساز برای درون‌خطی کردن در نظر می‌گیرد. این پارامتر تنها بر توابعی که با 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 درون‌خطی (inline) شود. .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 که inline است و تابع 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" حداکثر رشد کلی واحد کامپایل (compilation unit) ناشی از درون‌خطی‌سازی را مشخص می‌کند. برای مثال، مقدار پارامتر 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" حد مشخص‌کننده فریم‌های پشته (stack frames) بزرگ. هنگام درون‌خطی‌سازی، الگوریتم تلاش می‌کند تا اندازه فریم بیش از حد فراتر از این حد رشد نکند. .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 حداکثر تعداد اشاره‌گرهای پایه (base pointers)، ارجاع‌ها و دسترسی‌های ذخیره‌شده برای یک تابع منفرد را توسط تحلیل 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" حداکثر مقداری را مشخص می‌کند که بازهٔ دسترسی در طول تحلیل جریان داده (dataflow analysis) 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) برای عباراتی که قرار است بالا برده شوند. این پارامتر برای جلوگیری از رفتار درجه دوم در الگوریتم بالا بردن (hoisting) استفاده می‌شود. مقدار 0 محدودیتی برای جستجو قائل نمی‌شود، اما ممکن است کامپایل توابع بسیار بزرگ را کُند کند. .IP \fBmax\-tail\-merge\-comparisons\fR 4 .IX Item "max-tail-merge-comparisons" حداکثر تعداد bbهای مشابه برای مقایسه یک 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 pass) اجازه می‌دهد در صورت مجاز بودن، ذخیره‌سازی‌های ناتراز (unaligned stores) را ایجاد کند..IP \fBmax\-stores\-to\-merge\fR 4 .IX Item "max-stores-to-merge" حداکثر تعداد ذخیره‌سازی‌هایی که در گذرگاه ادغام ذخیره‌سازی‌ها (store merging) تلاش می‌شود در ذخیره‌سازی‌های عریض‌تر ادغام شوند. .IP \fBmax\-store\-chains\-to\-track\fR 4 .IX Item "max-store-chains-to-track" حداکثر تعداد زنجیره‌های ذخیره‌سازی که به‌طور هم‌زمان در تلاش برای ادغام آن‌ها در ذخیره‌سازی‌های عریض‌تر در گذرگاه store merging ردگیری می‌شوند. .IP \fBmax\-stores\-to\-track\fR 4 .IX Item "max-stores-to-track" حداکثر تعداد ذخیره‌سازی‌هایی که به‌طور هم‌زمان در تلاش برای ادغام آن‌ها در ذخیره‌سازی‌های عریض‌تر در گذرگاه store merging ردگیری می‌شوند. .IP \fBmax\-unrolled\-insns\fR 4 .IX Item "max-unrolled-insns" حداکثر تعداد دستورالعمل‌هایی که یک حلقه برای باز شدن (unroll) می‌تواند داشته باشد. در صورت باز شدن یک حلقه، این پارامتر همچنین تعیین می‌کند که کد حلقه چند بار باز شود. .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" حداکثر تعداد دستورالعمل‌هایی که یک حلقه برای پوسته‌گیری (peeling) می‌تواند داشته باشد. در صورت پوسته‌گیری حلقه، این پارامتر همچنین تعیین می‌کند که کد حلقه چند بار پوسته‌گیری شود. .IP \fBmax\-peel\-times\fR 4 .IX Item "max-peel-times" حداکثر دفعات پوسته‌گیری یک حلقه منفرد. .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" حداکثر عمق یک آشیانه حلقه (loop nest) که برای پوسته‌گیری کامل مناسب است. .IP \fBmax\-unswitch\-insns\fR 4 .IX Item "max-unswitch-insns" حداکثر تعداد دستورالعمل‌های یک حلقه unswitch شده. .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" اگر تعداد نامزدها در مجموعه کمتر از این مقدار باشد، هنگام افزودن یک مورد جدید، همیشه تلاش می‌شود متغیرهای القایی غیرضروری از مجموعه هرس شوند. .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 که توسط تبدیل شرطی درختی (TREE if conversion) پشتیبانی می‌شود، مگر اینکه حلقه با عملگر عمل‌یاخته (pragma) \fBsimd\fR علامت‌گذاری شده باشد. .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" حداکثر تعداد بررسی‌های زمان اجرا که هنگام انجام نسخه‌بندی حلقه برای هم‌ترازی (alignment) در برداری‌ساز (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 به این معنی است که هرگز داغ در نظر گرفته نمی‌شود. در حالت non-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 از تعداد اجراهای پروفایل‌شده کل برنامه که اگر تعداد اجرای یک بلوک پایه کمتر از آن باشد، بلوک پایه کم‌احتمال برای اجرا در نظر گرفته می‌شود. مقدار پیش‌فرض 20 است، یعنی اگر یک بلوک پایه در کمتر از 1/20 یا 5٪ از اجراهای برنامه اجرا شود، کم‌احتمال تلقی می‌شود. مقدار 0 به این معنی است که همیشه کم‌احتمال در نظر گرفته می‌شود. .IP \fBmax\-predicted\-iterations\fR 4 .IX Item "max-predicted-iterations" حداکثر تعداد تکرارهای حلقه که به‌صورت ایستا پیش‌بینی می‌کنیم. این پارامتر در مواردی مفید است که یک تابع شامل یک حلقه با کران مشخص و یک حلقه دیگر با کران نامشخص باشد. تعداد تکرارهای حلقه مشخص به‌درستی پیش‌بینی می‌شود، در حالی که تکرارهای حلقه نامشخص به‌طور میانگین نزدیک به 10 برآورد می‌شود. این امر باعث می‌شود که حلقه بدون کران به‌طور مصنوعی نسبت به دیگری سرد (cold) به نظر برسد. .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" اندازه محافظ پشته ارائه‌شده توسط سیستم‌عامل را به‌صورت ۲ به توان \fInum\fR بایت مشخص می‌کند. مقادیر بالاتر ممکن است تعداد کاوش‌های صریح (explicit 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 فراتر نرفته است، اما با حد پایین ۴۰۹۶ (چهار مگابایت) و حد بالای ۱۳۱۰۷۲ (۱۲۸ مگابایت). اگر 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" بیشینه تعداد بلوک‌ها در یک ناحیه که برای زمان‌بندی بین‌بلوکی (interblock scheduling) در نظر گرفته می‌شوند. .IP \fBmax\-pipeline\-region\-blocks\fR 4 .IX Item "max-pipeline-region-blocks" بیشینه تعداد بلوک‌ها در یک ناحیه که برای خط‌لوله‌ای کردن (pipelining) در زمان‌بند انتخابی در نظر گرفته می‌شوند. .IP \fBmax\-sched\-region\-insns\fR 4 .IX Item "max-sched-region-insns" بیشینه تعداد دستورالعمل‌ها (insn) در یک ناحیه که برای زمان‌بندی بین‌بلوکی در نظر گرفته می‌شوند. .IP \fBmax\-pipeline\-region\-insns\fR 4 .IX Item "max-pipeline-region-insns" بیشینه تعداد دستورالعمل‌ها (insn) در یک ناحیه که برای خط‌لوله‌ای کردن در زمان‌بند انتخابی در نظر گرفته می‌شوند. .IP \fBmin\-spec\-prob\fR 4 .IX Item "min-spec-prob" حداقل احتمال (به درصد) برای رسیدن به یک بلوک مبدا جهت زمان‌بندی حدسی بین‌بلوکی (interblock 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" بیشینه تأخیر تداخل برای یک دستورالعمل، جهت در نظر گرفته شدن برای جابه‌جایی حدسی. .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" حداقل فاصله (بر حسب چرخه‌های پردازنده) میان ذخیره (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" بیشینه تعداد بهترین دستورالعمل‌ها در فهرست آماده که برای تغییر نام در زمان‌بند انتخابی در نظر گرفته می‌شوند. .IP \fBsms\-min\-sc\fR 4 .IX Item "sms-min-sc" حداقل مقدار تعداد مراحل (stage count) که زمان‌بند swing modulo تولید می‌کند. .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" حداکثر تعداد فیلدها در ساختاری که هنگام تحلیل اشاره‌گر (pointer analysis) به شیوه‌ای حساس به فیلد (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" مشخص می‌کند که آیا گام پیش‌واکشی آرایه در حلقه باید نشانه‌های (hints) پیش‌واکشی نرم‌افزاری را برای گام‌های (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. اندازهٔ تداخل مخرب، حداقل فاصلهٔ (offset) توصیه‌شده میان دو شیء مستقل است که به طور هم‌روند مورد دسترسی قرار می‌گیرند؛ اندازهٔ تداخل سازنده، حداکثر اندازهٔ توصیه‌شده از حافظهٔ پیوسته‌ای است که با هم دسترسی داده می‌شوند. معمولاً هر دو برابر با اندازهٔ یک خط حافظهٔ نهان L1 برای هدف مورد نظر، بر حسب بایت خواهند بود. برای یک هدف عمومی که بازه‌ای از اندازه‌های خط حافظهٔ نهان L1 را پوشش می‌دهد، معمولاً اندازهٔ تداخل سازنده کران پایین بازه و اندازهٔ تداخل مخرب کران بالای آن خواهد بود. .Sp اندازهٔ تداخل مخرب برای چیدمان حافظه در نظر گرفته شده و بنابراین بر 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" حداقل نسبت میان گام (stride) دو حلقه برای سودمند بودن عمل جابه‌جایی. .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" حداکثر طول مجموعهٔ پیش‌بینی‌نشدهٔ جزئی (partial antic set) که در حین بهینه‌سازی حذف افزونگی جزئی درختی (\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 و بیرونی‌ترین حلقه در آشیانهٔ حلقه به صورت خوش‌بینانه شماره‌گذاری مقادیر می‌شوند و باقی آن‌ها خیر. .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 از الگوریتمی پیچیده برای فشرده‌سازی جدول تداخل استفاده می‌کند، اما این جدول همچنان می‌تواند برای توابع بسیار بزرگ به مقادیر بیش از حدی از حافظه نیاز داشته باشد. اگر اندازهٔ جدول تداخل برای یک تابع بتواند بیش از اندازهٔ داده‌شده بر حسب مگابایت توسط این پارامتر باشد، تخصیص‌دهندهٔ ثبات در عوض از الگوریتمی سریع‌تر، ساده‌تر و با کیفیت پایین‌تر استفاده می‌کند که نیازی به ساخت جدول تداخل شبه‌ثبات‌ها ندارد. .IP \fBira\-loop\-reserved\-regs\fR 4 .IX Item "ira-loop-reserved-regs" می‌توان از IRA برای ارزیابی دقیق‌تر فشار ثبات‌ها (register pressure) در حلقه‌ها به منظور تصمیم‌گیری در مورد جابه‌جایی مقادیر ناوردا در حلقه استفاده کرد (نگاه کنید به \fB\-O3\fR). تعداد ثبات‌های در دسترسی که برای مقاصد دیگر رزرو شده‌اند با این پارامتر تعیین می‌شود. مقدار پیش‌فرض این پارامتر بهترین مقدار به‌دست‌آمده از آزمایش‌های پرشمار است. .IP \fBira\-consider\-dup\-in\-all\-alts\fR 4 .IX Item "ira-consider-dup-in-all-alts" باعث می‌شود IRA محدودیت تطابق (شماره عملوند تکراری) را در تمام حالت‌های جایگزینِ (alternatives) در دسترس برای کلاس ثبات ترجیحی به‌طور جدی لحاظ کند. اگر روی صفر تنظیم شود، به این معنی است که IRA فقط زمانی محدودیت تطابق را رعایت می‌کند که در تنها جایگزین در دسترس با یک کلاس ثبات مناسب قرار داشته باشد. در غیر این صورت، بدین معناست که IRA تمام جایگزین‌های ممکن را برای کلاس ثبات ترجیحی بررسی خواهد کرد، حتی اگر انتخابی با کلاس ثبات مناسب پیدا کرده باشد، و محدودیت تطابق واجد شرایطِ یافت‌شده را محترم می‌شمارد. .IP \fBira\-simple\-lra\-insn\-threshold\fR 4 .IX Item "ira-simple-lra-insn-threshold" تعداد تقریبی دستورالعمل‌های (insn) تابع در واحدهای هزارتایی (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) در حلقه‌های بسیار بزرگ می‌تواند هم از نظر زمان کامپایل و هم از نظر میزان حافظهٔ مورد نیاز در زمان کامپایل بسیار پرهزینه باشد. برای حلقه‌هایی که تعداد بلوک‌های پایه‌ای (basic blocks) آن‌ها بیشتر از این پارامتر باشد، بهینه‌سازی انتقال ناوردای حلقه انجام نخواهد شد. .IP \fBloop\-max\-datarefs\-for\-datadeps\fR 4 .IX Item "loop-max-datarefs-for-datadeps" ایجاد وابستگی‌های داده‌ای برای حلقه‌های بسیار بزرگ پرهزینه است. این پارامتر تعداد مراجع داده‌ای (data references) در حلقه‌ها را که برای تحلیل وابستگی داده بررسی می‌شوند، محدود می‌کند. این حلقه‌های بزرگ توسط بهینه‌سازی‌هایی که از وابستگی‌های داده‌ای حلقه استفاده می‌کنند، پردازش نمی‌شوند. .IP \fBmax\-vartrack\-size\fR 4 .IX Item "max-vartrack-size" حداکثر تعداد خانه‌های جدول درهم‌سازی (hash table) را برای استفاده در طول تحلیل شارش دادهٔ ردیابی متغیرها در هر تابع تعیین می‌کند. اگر این حد با فعال بودن ردیابی متغیر در انتساب‌ها رد شود، تحلیل آن تابع بدون آن و پس از حذف تمام دستورالعمل‌های اشکال‌زدایی (debug insns) از تابع دوباره امتحان می‌شود. اگر حد مجاز حتی بدون دستورالعمل‌های اشکال‌زدایی نیز رد شود، تحلیل ردیابی متغیر به‌طور کامل برای آن تابع غیرفعال می‌گردد. تنظیم این پارامتر روی صفر، آن را نامحدود می‌کند. .IP \fBmax\-vartrack\-expr\-depth\fR 4 .IX Item "max-vartrack-expr-depth" حداکثر سطوح بازگشتی (recursion levels) را هنگام تلاش برای نگاشت نام متغیرها یا متغیرهای موقت اشکال‌زدایی به عبارت‌های مقداری تعیین می‌کند. این کار زمان کامپایل را با اطلاعات اشکال‌زدایی کامل‌تر معاوضه می‌کند. اگر این مقدار بسیار کم تنظیم شود، عبارت‌های مقداری که در دسترس هستند و می‌توانند در اطلاعات اشکال‌زدایی نمایش داده شوند ممکن است استفاده نشوند؛ تنظیم مقدار بالاتر ممکن است کامپایلر را قادر سازد عبارت‌های اشکال‌زدایی پیچیده‌تری بیابد، اما زمان کامپایل و مصرف حافظه ممکن است افزایش یابد. .IP \fBmax\-debug\-marker\-count\fR 4 .IX Item "max-debug-marker-count" آستانه‌ای برای تعداد نشانگرهای اشکال‌زدایی (مانند نشانگرهای شروع دستور یا begin stmt) تعیین می‌کند تا از انفجار پیچیدگی هنگام درون‌خط‌سازی (inlining) یا بسط به RTL جلوگیری شود. اگر یک تابع دستورهای gimple بیشتری از این حد تعیین‌شده داشته باشد، این دستورها از نسخهٔ درون‌خط‌شدهٔ تابع و از بسط RTL آن حذف خواهند شد. .IP \fBmin\-nondebug\-insn\-uid\fR 4 .IX Item "min-nondebug-insn-uid" برای دستورالعمل‌های غیر اشکال‌زدایی (nondebug insns)، از uidهایی که از این پارامتر شروع می‌شوند استفاده می‌کند. محدودهٔ زیر این پارامتر منحصراً برای دستورالعمل‌های اشکال‌زدایی ایجادشده توسط \&\fB\-fvar\-tracking\-assignments\fR رزرو شده است، اما در صورت اتمام محدودهٔ رزروشده، دستورالعمل‌های اشکال‌زدایی ممکن است uidهای (غیر همپوشان) بالاتر از آن را دریافت کنند. .IP \fBipa\-sra\-deref\-prob\-threshold\fR 4 .IX Item "ipa-sra-deref-prob-threshold" بخش IPA\-SRA تنها زمانی یک اشاره‌گر را که مشخص است NULL نیست با یک یا چند پارامتر جدید جایگزین می‌کند که احتمال (به درصد، نسبت به ورودی تابع) ارجاع‌زدایی (dereference) آن از این پارامتر بیشتر باشد. .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" حداکثر بخش‌هایی از یک ساختار تجمعی (aggregate) که 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" حداکثر تعداد دسترسی‌های ساختگی (artificial accesses) که جایگزینی اسکالر ساختارهای تجمعی (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 فعال می‌شوند، هر حلقه در آشیانهٔ حلقه را به تعداد مشخصی تکرار نواربندی (strip mine) می‌کنند. طول نوار را می‌توان با استفاده از پارامتر \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 heuristics) محاسبه کرده و آن دسته از فرصت‌های شبیه‌سازی را که امتیازشان از \&\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 تعداد اجرای اندازه‌گیری‌شدهٔ یک یال در گراف فراخوانی را در این موقعیت درصدی از هیستوگرام آن‌ها به عنوان مبنای محاسبات اکتشافی خود در نظر می‌گیرد. .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 را مشخص می‌کند. تعداد افرازها باید بیشتر از تعداد پردازنده‌های (CPU) به‌کاررفته برای کامپایل باشد. .IP \fBlto\-min\-partition\fR 4 .IX Item "lto-min-partition" اندازهٔ کمینهٔ افراز برای WHOPR (بر حسب دستورالعمل‌های تخمین‌زده‌شده). این کار از هزینه‌های ناشی از تقسیم برنامه‌های بسیار کوچک به افرازهای بیش از حد جلوگیری می‌کند. .IP \fBlto\-max\-partition\fR 4 .IX Item "lto-max-partition" اندازهٔ بیشینهٔ افراز برای WHOPR (بر حسب دستورالعمل‌های تخمین‌زده‌شده) برای فراهم کردن یک حد بالا برای اندازهٔ هر افراز. این پارامتر فقط باید همراه با افرازبندی متوازن (balanced partitioning) استفاده شود. .IP \fBlto\-partition\-locality\-frequency\-cutoff\fR 4 .IX Item "lto-partition-locality-frequency-cutoff" مخرج n از کسر 1/n بسامد اجرای فراخوانده‌شده (callee) که باید برای یک فراخوانندهٔ (caller) خاص شبیه‌سازی شود. مقدار ویژهٔ 0 تعیین می‌کند که شبیه‌سازی همواره و بدون هیچ نقطهٔ برشی انجام شود. .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) برای بررسی جهت ارائهٔ پیشنهاد هنگامی که جستجوی نام 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. الگوریتم ۱ پیاده‌سازی اولیه است و احتمال بیشتری دارد که از بازآرایی دستورالعمل‌ها جلوگیری کند. الگوریتم ۲ به عنوان سازشی بین رویکرد نسبتاً محافظه‌کارانهٔ الگوریتم ۱ و رویکرد تقریباً تهاجمی زمان‌بند پیش‌فرض طراحی شده است. این الگوریتم اتکای بیشتری بر داشتن مجموعه‌ثبات منظم (regular 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" اگر غیر صفر باشد، به ترتیب برای \fB\-fsanitize=kernel\-address\fR یا \fB\-fsanitize=kernel\-hwaddress\fR پیشوند فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR، \f(CW\*(C`memset\*(C'\fR و \f(CW\*(C`memmove\*(C'\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" هنگام استفاده از ابزارگذاری پشته، برچسب‌های متغیرهای پشته را با استفاده از یک دنبالهٔ قطعی که از یک برچسب تصادفی برای هر فریم شروع می‌شود تعیین می‌کند. با تنظیم نبودن این پارامتر، برچسب‌ها با استفاده از همان دنباله اما با شروع از 1 انتخاب می‌شوند. این ویژگی به طور پیش‌فرض برای \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) ویژه برای دسترسی‌ها به متغیرهای فرار (volatile). .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" حداکثر تعداد دستورالعمل‌ها برای رونوشت‌برداری هنگام تکثیر بلوک‌ها در مسیر ریسهٔ پرش (jump thread) ماشین حالت متناهی. .IP \fBthreader\-debug\fR 4 .IX Item "threader-debug" threader\-debug=[none|all] خروجی پرجزئیاتِ (verbose) حل‌کنندهٔ 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" حداقل تعداد تکرارهای هر ریسه در درونی‌ترین حلقهٔ موازی‌شده که به‌ازای آن، نسخهٔ موازی‌شده بر نسخهٔ تک‌ریسه‌ای ترجیح داده می‌شود. توجه داشته باشید که برای یک مجموعه حلقهٔ موازیِ تو‌در‌تو، حداقل تعداد تکرارهای بیرونی‌ترین حلقه به‌ازای هر ریسه دو است. .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 تحلیل می‌شوند؛ این must\-def نوع پویای شیئی را تعیین می‌کند که فراخوانی مجازی‌ای را برمی‌انگیزد که ممکن است بتوانیم آن را به‌طور حدسی غیرمجازی (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" حداکثر احتمال بلوک پایهٔ (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" نسبت آستانهٔ تعداد دفعات اجرای یال‌های بحرانی که اجازهٔ انجام حذف افزونگی پس از مرحلهٔ reload را می‌دهد. .IP \fBmax\-loop\-header\-insns\fR 4 .IX Item "max-loop-header-insns" حداکثر تعداد دستورالعمل‌ها (insns) در سرآیند حلقه که توسط گذر کپی سرآیندهای حلقه (copy loop headers) تکثیر می‌شوند. .IP \fBvect\-epilogues\-nomask\fR 4 .IX Item "vect-epilogues-nomask" فعال‌سازی برداری‌سازی پس‌گفتار حلقه (loop epilogue) با استفاده از اندازهٔ بردار کوچک‌تر. .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" فعال‌سازی برداری‌سازی حلقه برای متغیرهای القایی ممیز شناور (floating point inductions). .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" تعداد چرخه‌هایی که زمان‌بند پیمانه‌ای نوسانی هنگام بررسی تداخل‌ها با استفاده از 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" ضریبی برای تنظیم کران بالایی که زمان‌بند پیمانه‌ای نوسانی برای زمان‌بندی یک حلقه استفاده می‌کند. .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" فعال‌سازی حفاظت asan برای allocaها/VLAها. .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) که باید برای آن عملیات‌های معکوس (reverse ops) اضافه شوند. .IP \fBfsm\-scale\-path\-stmts\fR 4 .IX Item "fsm-scale-path-stmts" ضریب مقیاسی که باید بر تعداد دستورهای موجود در یک مسیر ریسه‌بندی (threading path) که از یک یال بازگشتی حلقه (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" حداکثر تعداد گزاره‌های AND شده به‌ازای هر گزارهٔ OR شده در زنجیرهٔ نرمال‌شدهٔ گزاره‌ها. .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 سخت‌افزاری. تعداد چرخه‌های پیش‌نگری که مدل بررسی می‌کند؛ در \*(Aq \&\*(Aq تنها روش اکتشافی مرتب‌سازی دستورالعمل‌ها فعال می‌شود. .IP \fBloop\-versioning\-max\-inner\-insns\fR 4 .IX Item "loop-versioning-max-inner-insns" حداکثر تعداد دستورالعمل‌هایی که یک حلقهٔ درونی می‌تواند داشته باشد، پیش از آن‌که گذر نسخه‌بندی حلقه (loop versioning pass) آن را برای رونوشت‌برداری بیش از حد بزرگ در نظر بگیرد. .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" حداکثر فاصله بر حسب تعداد دستورالعمل که یک ذخیرهٔ کوچکِ ارسال‌شده به یک بارگذاری بزرگ‌تر ممکن است متوقف (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" حداکثر تعداد قیدها به ازای هر حالت. .IP \fBanalyzer\-min\-snodes\-for\-call\-summary\fR 4 .IX Item "analyzer-min-snodes-for-call-summary" حداقل تعداد ابرگره‌ها (supernodes) در یک تابع تا تحلیل‌گر خلاصه‌سازی اثرات آن را در محل‌های فراخوانی مد نظر قرار دهد. .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" حداکثر تعداد یال‌های نشدنی برای رد کردن، پیش از اعلام یک عیب‌یابی به عنوان نشدنی. .IP \fBgimple\-fe\-computed\-hot\-bb\-threshold\fR 4 .IX Item "gimple-fe-computed-hot-bb-threshold" تعداد دفعات اجرای یک بلوک پایه که داغ (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" تعداد بایت‌هایی که در آن رشته‌های لفظی (string literals) در نمودارهای هنر متنی تحلیل‌گر خلاصه‌سازی می‌شوند. .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" حداکثر تعداد رابطه‌هایی که پیش‌گو (oracle) در یک بلوک پایه ثبت می‌کند. .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 باید فرض کند که توصیف زمان‌بندی، در نبود خطاهای حافظهٔ نهان، اساساً یک مدل چرخه‌دقیق از پردازندهٔ مقصد است که کد برای اجرا روی آن در نظر گرفته شده است یا خیر. مقدار غیرصفر به این معنی است که مدل زمان‌بندی انتخاب‌شده دقیق است و احتمالاً یک پردازندهٔ ترتیبی (in\-order) را توصیف می‌کند، و زمان‌بندی باید با تهاجم به سرریز ثبات‌ها بپردازد تا هرگونه حباب خط لوله را پر کند. این مقدار پیش‌فرض فعلی است. مقدار صفر به این معنی است که توصیف زمان‌بندی ممکن است در دسترس یا دقیق نباشد یا شاید اصلاً قابل اعمال نباشد، نظیر پردازنده‌های مدرن غیرترتیبی (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 تلاش برای استفاده از بردارهای SVE «بازشده» (unpacked) برای عناصر کوچک‌تر. این شامل ذخیرهٔ عناصر کوچک‌تر در محفظه‌های بزرگ‌تر و دسترسی به عناصر با بارگذاری‌های گسترش‌دهنده و ذخیره‌سازی‌های کوتاه‌کننده است. .RE .RS 4 .RE .IP \fBaarch64\-float\-recp\-precision\fR 4 .IX Item "aarch64-float-recp-precision" تعداد تکرارهای نیوتن برای محاسبهٔ معکوس ضربی برای نوع float. دقت تقسیم هنگامی که تقریب تقسیم فعال باشد، با این پارامتر متناسب است. مقدار پیش‌فرض 1 است. .IP \fBaarch64\-double\-recp\-precision\fR 4 .IX Item "aarch64-double-recp-precision" تعداد تکرارهای نیوتن برای محاسبهٔ معکوس ضربی برای نوع double. دقت تقسیم هنگامی که تقریب تقسیم فعال باشد، با این پارامتر متناسب است. مقدار پیش‌فرض 2 است. .IP \fBaarch64\-autovec\-preference\fR 4 .IX Item "aarch64-autovec-preference" اجبار یک راهبرد انتخاب ISA برای برداری‌سازی خودکار. .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، از سیاست ساختار تنظیم (tuning structure) استفاده می‌کند. این مقدار پیش‌فرض فعلی است. با \fB\-\-param=aarch64\-ldp\-policy=always\fR، صرف‌نظر از تراز بودن (alignment)، دستور 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) که توسط گذر ادغام جفت‌های load/store در AArch64 هنگام تلاش برای تشکیل یک ldp/stp انجام می‌شود. مقادیر بالاتر باعث تهاجمی‌تر شدن این گذر در مرتب‌سازی مجدد بارگذاری‌ها روی ذخیره‌سازی‌ها می‌شود، به بهای افزایش زمان کامپایل. .IP \fBaarch64\-ldp\-writeback\fR 4 .IX Item "aarch64-ldp-writeback" پارامتری برای کنترل اینکه در گذر ادغام جفت‌های load/store در AArch64 کدام فرصت‌های بازنویسی (writeback) مدیریت شوند. مقدار صفر، مدیریت writeback را غیرفعال می‌کند. مقدار یک به این معنی است که در صورت امکان، برای تشکیل جفت‌هایی شامل یک یا چند دسترسی بازنویسی مجزای موجود تلاش می‌شود. مقدار دو به این معنی است که علاوه بر آن، با تا کردن (folding) به‌روزرسانی‌های مخرب پایانی ثبات پایه (base register) مورد استفاده توسط یک جفت، برای تشکیل فرصت‌های بازنویسی به‌صورت فرصت‌طلبانه تلاش می‌شود. .IP \fBaarch64\-loop\-vect\-issue\-rate\-niters\fR 4 .IX Item "aarch64-loop-vect-issue-rate-niters" تنظیمات مربوط به برخی پردازنده‌های AArch64 هنگام تصمیم‌گیری در مورد اینکه آیا یک حلقه باید با استفاده از SVE برداری‌سازی شود، با Advanced SIMD برداری‌سازی شود، یا اصلاً برداری نشود، هم تأخیرها (latencies) و هم نرخ‌های صدور (issue rates) را در نظر می‌گیرد. اگر این پارامتر روی \fIn\fR تنظیم شود، GCC برای حلقه‌هایی که مشخص است در کمتر از \fIn\fR تکرار Advanced SIMD اجرا می‌شوند، از این روش ابتکاری (heuristic) استفاده نخواهد کرد. .IP \fBaarch64\-vect\-unroll\-limit\fR 4 .IX Item "aarch64-vect-unroll-limit" بخش برداری‌ساز (vectorizer) از اطلاعات تنظیمات موجود برای تعیین اینکه آیا باز کردن (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" تعداد دستورالعمل‌هایی که بالاتر از آن، جریمهٔ توقف (stall) STLF می‌تواند جبران شود. .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) را به کدی که معمولاً تولید می‌کند، کنترل می‌نمایند. به عنوان مثال، یک هدف از ابزارگذاری، جمع‌آوری آمار پروفایل‌سازی برای استفاده در یافتن نقاط داغ برنامه (hot spots)، تحلیل پوشش کد یا بهینه‌سازی‌های هدایت‌شده با پروفایل است. دستهٔ دیگر ابزارگذاری برنامه، افزودن بررسی‌های زمان اجرا برای شناسایی خطاهای برنامه‌نویسی مانند ارجاع‌گشایی‌های نامعتبر اشاره‌گر یا دسترسی‌های خارج از محدودهٔ آرایه‌ها، و همچنین حملات عمدی و خصمانه مانند درهم‌شکستن پشته (stack smashing) یا ربودن جدول مجازی C++ (C++ vtable hijacking) است. همچنین یک قلاب (hook) عمومی وجود دارد که می‌تواند برای پیاده‌سازی سایر اشکال ردیابی یا ابزارگذاری در سطح توابع برای اهداف اشکال‌زدایی یا تحلیل برنامه استفاده شود. .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" افزودن کد به طوری که \fIکمان‌ها\fR (arcs) در جریان برنامه ابزارگذاری شوند. در طول اجرا، برنامه ثبت می‌کند که هر انشعاب و فراخوانی چند بار اجرا شده و چند بار طی شده یا بازگشته است. در مقصدهایی که از سازنده‌ها با پشتیبانی از اولویت پشتیبانی می‌کنند، پروفایل‌سازی به‌درستی سازنده‌ها، مخرب‌ها، و سازنده‌ها (و مخرب‌های) C++ کلاس‌هایی را که به عنوان نوع یک متغیر سراسری استفاده می‌شوند، مدیریت می‌کند. .Sp هنگامی که برنامهٔ کامپایل‌شده خارج می‌شود، این داده‌ها را برای هر فایل مبدأ در فایلی به نام \&\fIauxname.gcda\fR ذخیره می‌کند. این داده‌ها ممکن است برای بهینه‌سازی‌های هدایت‌شده با پروفایل (\fB\-fbranch\-probabilities\fR) یا برای تحلیل پوشش آزمون (\fB\-ftest\-coverage\fR) استفاده شوند. نام \&\fIauxname\fR هر فایل شیء، در صورتی که صریحاً مشخص شده باشد و فایل اجرایی نهایی نباشد، از نام فایل خروجی تولید می‌شود؛ در غیر این صورت، نام پایهٔ فایل مبدأ است. در هر دو حالت، هرگونه پسوند حذف می‌شود (مثلاً \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 برنامه را روی یک بار کاری نمونه (representative workload) اجرا کنید تا اطلاعات پروفایل کمان‌ها تولید شود. این عمل را می‌توان به هر تعداد بار تکرار کرد. می‌توانید نمونه‌های هم‌روند از برنامهٔ خود را اجرا کنید و مشروط بر اینکه سیستم فایل از قفل‌گذاری پشتیبانی کند، فایل‌های داده به‌درستی به‌روزرسانی خواهند شد. مگر اینکه یک گزینهٔ گویش اکید ISO C فعال باشد، فراخوانی‌های \f(CW\*(C`fork\*(C'\fR تشخیص داده شده و بدون شمارش مضاعف، به‌درستی مدیریت می‌شوند. .Sp علاوه بر این، یک فایل شیء می‌تواند چندین بار بازکامپایل شود و فایل \&\fI.gcda\fR متناظر با آن تا زمانی که فایل مبدأ و گزینه‌های کامپایلر بدون تغییر باقی بمانند، ادغام می‌شود..IP * 4 برای بهینه‌سازی‌های مبتنی بر پروفایل، فایل‌های منبع را دوباره با همان گزینه‌های بهینه‌سازی و تولید کد، به همراه \&\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 یک گراف جریان برنامه ایجاد می‌کند و سپس درخت پوشای آن گراف را می‌یابد. فقط یال‌هایی که روی درخت پوشا نیستند باید ابزارگذاری شوند: کامپایلر کدی برای شمارش دفعات اجرای این یال‌ها اضافه می‌کند. هنگامی که یک یال تنها خروجی یا تنها ورودی یک بلوک باشد، کد ابزارگذاری می‌تواند به همان بلوک افزوده شود؛ در غیر این صورت، برای نگهداری کد ابزارگذاری باید یک بلوک پایه جدید ایجاد شود. .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 هم هنگام کامپایل و هم هنگام پیوندزدن (linking) برنامه خود استفاده کنید. .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 در بخش مشخص‌شده برای هر واحد ترجمه (translation unit) قرار می‌گیرد. این گزینه ثبت اطلاعات پروفایل از طریق سازنده و پردازش اطلاعات پروفایل از طریق ویرانگر را غیرفعال می‌کند. این گزینه برای استفاده در محیط‌های میزبانی‌شده (hosted) مانند GNU/Linux در نظر گرفته نشده است. هدف آن محیط‌های مستقل (freestanding مانند سیستم‌های نهفته) با منابع محدود است که از سازنده‌ها/ویرانگرها یا ورودی/خروجی فایل در کتابخانه 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 ممکن است برای واسازی (deserialize) جریان داده تولیدشده توسط توابع \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 باشد. مقدار اول برای برنامه‌های تک‌نخی (single\-threaded) مفید است، در حالی که مقدار دوم با تولید کد امن از نظر نخ (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 انتخاب شود، اطلاعات پروفایل بر پایهٔ بهترین تلاش ممکن با استفاده از عملیات اتمی به‌روزرسانی می‌شود. در حالت ایده‌آل، اطلاعات پروفایل از طریق عملیات اتمی در سخت‌افزار به‌روزرسانی می‌شود. با این حال، اگر پلتفرم مقصد از عملیات اتمی سخت‌افزاری مورد نیاز پشتیبانی نکند، اما \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 traces) دقیق‌تر، می‌توان از گزینه‌هایی مانند \&\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 (که ادغام کدهای یکسان یا Identical Code Folding را برای توابع غیرفعال می‌کند) استفاده کرد. استفاده از \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 تنها زمانی عملیات نامعتبر را تشخیص می‌دهد که هر دو اشاره‌گر غیرتهی باشند. .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 تنها زمانی عملیات نامعتبر را تشخیص می‌دهد که هر دو اشاره‌گر غیرتهی باشند..IP \fB\-fsanitize=shadow\-call\-stack\fR 4 .IX Item "-fsanitize=shadow-call-stack" فعال‌سازی ShadowCallStack؛ یک مکانیزم بهبود امنیت که برای محافظت از برنامه‌ها در برابر بازنویسی آدرس بازگشت (مانند سرریزهای بافر پشته) استفاده می‌شود. این سازوکار با ذخیره آدرس بازگشت یک تابع در یک shadow call stack به صورت مجزا تخصیص‌یافته در مقدمه تابع (prologue) و بازیابی آدرس بازگشت از shadow call stack در موخره تابع (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 نمی‌تواند از مدیریت استثنا (exception handling) استفاده کند. برای غیرفعال کردن استثناها از \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" این گزینه بررسی اشاره‌گرها را فعال می‌کند. به‌ویژه، برنامه‌ای که با این گزینه ساخته شده باشد، در صورتی که برای ارجاع‌زدایی (dereference) از یک اشاره‌گر NULL تلاش کند، یا اگر یک ارجاع (احتمالاً یک ارجاع rvalue) به یک اشاره‌گر NULL مقید شود، یا اگر متدی روی شیئی که توسط یک اشاره‌گر NULL اشاره شده فراخوانی شود، یک پیام خطا صادر خواهد کرد. .IP \fB\-fsanitize=return\fR 4 .IX Item "-fsanitize=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 را نیز تشخیص می‌دهد. توجه داشته باشید که قواعد ارتقای عدد صحیح (integer promotion) باید در نظر گرفته شوند؛ به این معنا که مورد زیر سرریز محسوب نمی‌شود: .Sp .Vb 2 \& signed char a = SCHAR_MAX; \& a++; .Ve .IP \fB\-fsanitize=bounds\fR 4 .IX Item "-fsanitize=bounds" این گزینه سازورسازی مرزهای آرایه را فعال می‌کند. دسترسی‌های خارج از محدودهٔ گوناگونی تشخیص داده می‌شوند. اعضای آرایه منعطف (flexible array members)، آرایه‌های شبه-عضو آرایه منعطف، و مقداردهنده‌های اولیهٔ متغیرها با حافظهٔ ایستا سازورسازی نمی‌شوند، به استثنای آرایه‌های شبه-عضو آرایه منعطف که گزینه‌های \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 فعال نمی‌شود، زیرا تقسیم ممیز شناور بر صفر می‌تواند روشی مجاز برای به‌دست آوردن مقادیر بینهایت و 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" این گزینه سازورسازی دستورهای بازگشت را در توابعی که با ویژگی تابعی \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" این گزینه ابزارگذاری (instrumentation) محاسبات اشاره‌گر را فعال می‌کند. اگر محاسبات اشاره‌گر سرریز کند، یک خطای زمان اجرا صادر می‌شود. .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 رفتار تعریف‌نشده ایجاد می‌کند و با این گزینه تشخیص داده می‌شود. .RE .RS 4 .Sp توجه داشته باشید که وارسی‌کننده‌ها (sanitizers) معمولاً نرخ هشدارهای مثبت کاذب را افزایش می‌دهند، به‌ویژه مواردی که پیرامون \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,..." وارسی متغیرهای سراسری در بخش‌های منتخبِ تعریف‌شده توسط کاربر. \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 حتی اگر حالت بازیابی در سمت کامپایلر فعال شده باشد، باید در سمت کتابخانهٔ زمان اجرا نیز فعال گردد، در غیر این صورت شکست‌ها همچنان مهلک باقی می‌مانند. پیش‌فرض کتابخانه زمان اجرا برای 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 پیاده‌سازی مبتنی بر فناوری ارتقای امنیت جریان کنترل اینتل (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" کد اضافه‌ای درج می‌کند تا هنگام ورود به بلوک‌های پایه (basic blocks) متغیرهای بولی تنظیم شوند، و هنگام خروج از تابع، در صورتی که این مقادیر بولی مسیر اجرایی سازگاری با گراف جریان کنترل تشکیل ندهند، درستی‌سنجی کرده و تله (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 بهینه‌سازی فراخوانی دُم (tail call optimization) بسیار دیرتر از آن رخ می‌دهد که بر افزونگی جریان کنترل تأثیر بگذارد، اما فراخوانی‌هایی که توسط پیشانی‌های زبان (front-ends) به‌عنوان فراخوانی دُم اجباری نشانه‌گذاری شده‌اند، و هر فراخوانی که به‌اندازهٔ کافی زود به‌عنوان فراخوانی دُم بالقوه علامت‌گذاری شود نیز درستی‌سنجی پیش از فراخوانی خواهند داشت؛ هرچند این احتمالات صرفاً جنبهٔ نظری دارند، چرا که این شرایط تنها هنگام استفاده از افزونه‌های سفارشی کامپایلر محقق می‌شوند. .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) قرار گرفته که بررسی را انجام داده و استثنا را مجدداً پرتاب (reraise) می‌کند. این گزینه به‌طور پیش‌فرض فعال است؛ برای غیرفعال‌سازی آن از \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 این گزینه هر زمان که بهینه‌سازی فراخوانی‌های هم‌سطح فعال باشد (به \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) در نظر گرفته شده است، نه صرفاً ساخت‌های اشکال‌زدایی. .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)، درج می‌کند. این کار با افزودن یک متغیر نگهبان به توابع دارای اشیاء آسیب‌پذیر انجام می‌شود. این شامل توابعی است که \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" کدی تولید می‌کند تا اطمینان حاصل شود از مرز پشته فراتر نمی‌روید. اگر در یک محیط با چندین رشته اجرا می‌شوید باید این پرچم را مشخص کنید، اما در یک محیط تک‌رشته‌ای به‌ندرت نیاز به تعیین آن دارید، زیرا اگر تنها یک پشته وجود داشته باشد، سرریز پشته تقریباً روی همهٔ سیستم‌ها به‌طور خودکار شناسایی می‌شود. .Sp توجه داشته باشید که این سوئیچ در واقع باعث انجام بررسی نمی‌شود؛ سیستم‌عامل یا زمان اجرای زبان باید این کار را انجام دهد. این سوئیچ باعث تولید کدی می‌شود تا اطمینان حاصل شود که آن‌ها متوجه گسترش پشته می‌شوند. .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) تولید می‌کند. هنگامی که این گزینه فعال است، کامپایلر در هر زمان تنها یک صفحه از فضای پشته را تخصیص می‌دهد و به هر صفحه بلافاصله پس از تخصیص دسترسی پیدا می‌کند. بنابراین، از پرش تخصیص‌ها روی هر صفحهٔ محافظ پشته که توسط سیستم‌عامل فراهم شده جلوگیری می‌کند. .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 کار کند. .Sp می‌توانید بررسی محدودیت پشته را به‌صورت محلی با استفاده از صفت تابع \&\f(CW\*(C`no_stack_limit\*(C'\fR لغو (override) کنید. .IP \fB\-fsplit\-stack\fR 4 .IX Item "-fsplit-stack" تولید کد برای قطعه‌بندی خودکار پشته پیش از سرریز شدن آن. برنامهٔ حاصل دارای پشته‌ای ناپیوسته خواهد بود که تنها در صورتی ممکن است سرریز شود که برنامه قادر به تخصیص حافظهٔ بیشتری نباشد. این ویژگی بیش از همه هنگام اجرای برنامه‌های چندنخی مفید است، زیرا دیگر نیازی به محاسبهٔ اندازهٔ مناسب پشته برای هر نخ نخواهد بود. این قابلیت در حال حاضر تنها برای مقاصد x86 که روی GNU/Linux اجرا می‌شوند پیاده‌سازی شده است. .Sp هنگامی که کد کامپایل‌شده با \fB\-fsplit\-stack\fR کدی را فراخوانی می‌کند که بدون \&\fB\-fsplit\-stack\fR کامپایل شده است، ممکن است فضای پشتهٔ زیادی برای اجرای کد دوم در دسترس نباشد. اگر کامپایل همهٔ کدها، از جمله کدهای کتابخانه‌ای، با \fB\-fsplit\-stack\fR مقدور نباشد، پیونددهنده می‌تواند این فراخوانی‌ها را اصلاح کند تا کدی که بدون \fB\-fsplit\-stack\fR کامپایل شده همواره پشتهٔ بزرگی در اختیار داشته باشد. پشتیبانی از این قابلیت در پیونددهندهٔ gold در نگارش ۲.۲۱ و بالاتر 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`strub\*(C'\fR از نوع \f(CW\*(C`disabled\*(C'\fR درمی‌آیند، و این محدودیت به‌صورت \fBسخت‌گیرانه\fR (\fBstrict\fR) اعمال می‌شود که تنها توابع مرتبط با حالت‌های قابل فراخوانیِ \f(CW\*(C`strub\*(C'\fR (\f(CW\*(C`strub\*(C'\fR\-\f(CW\*(C`callable\*(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`strub\*(C'\fR از نوع \f(CW\*(C`at\-calls\*(C'\fR در صورت امکان‌پذیر بودن. کاربرد اصلی این گزینه برای آزمایش است. این گزینه سازوکار \f(CW\*(C`strub\*(C'\fR را در سناریوهایی که کاملاً برای یک واحد ترجمه محلی هستند به کار می‌گیرد. این حالت \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`strub\*(C'\fR از نوع \f(CW\*(C`internal\*(C'\fR در صورت امکان‌پذیر بودن. کاربرد اصلی این گزینه برای آزمایش است. این گزینه برای این در نظر گرفته شده که بخش‌هایی از سازوکار \f(CW\*(C`strub\*(C'\fR را که حالتِ کم‌بازده‌تر اما نگهدارندهٔ رابط \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، خاموش) می‌کند که در زمان اجرا، برای هر فراخوانی مجازی، بررسی می‌کند که اشاره‌گر 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. اگر یک فایل گزارش تازه می‌خواهید، حتماً هر فایل موجود را حذف کنید. .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" تولید فراخوانی‌های ابزاردقیق‌سازی برای ورود به توابع و خروج از آن‌ها. دقیقاً پس از ورود به تابع و درست پیش از خروج از تابع، توابع پروفایلینگ زیر با نشانی تابع فعلی و محل فراخوانی آن (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) گسترش یافته‌اند نیز انجام می‌شود. فراخوانی‌های پروفایلینگ نشان می‌دهند که از نظر مفهومی در چه نقطه‌ای به تابع برخط وارد یا از آن خارج شده است. این بدان معناست که نگارش‌های نشانی‌پذیر از چنین توابعی باید موجود باشند. اگر همهٔ موارد استفادهٔ شما از یک تابع به‌صورت برخط گسترش یابد، این امر ممکن است به افزایش اندازهٔ کد منجر شود. اگر از \f(CW\*(C`extern inline\*(C'\fR در کد C خود استفاده کنید، باید یک نسخهٔ نشانی‌پذیر از چنین توابعی ارائه گردد. (در هر صورت معمولاً وضعیت به همین شکل است، اما اگر خوش‌شانس باشید و بهینه‌ساز همواره توابع را به‌صورت برخط گسترش دهد، ممکن است بدون ارائهٔ نسخه‌های ایستا کار پیش رفته باشد.) .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 races) محافظت نشده است. در نتیجه، پیاده‌سازی تنها تضمین می‌کند که توابع پروفایلینگ حداقل (\fIleast\fR) یک بار به ازای هر فرایند و حداکثر (\fImost\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,..." فهرست توابعی را مشخص می‌کند که از ابزارگذاری مستثنی می‌شوند (توضیحات مربوط به \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، نه نام درهم‌ریختهٔ داخلی (mangled name) آن (مانند \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 مورد استفاده با دستورالعمل صادرشده توسط رابط پشتی (back-end) داخلی 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 باشد، هیچ مکانی برای فاصله‌گذاری ثبت نمی‌شود. .Sp دستورالعمل‌های NOP در نشانی ورود تابع \(hy و بسته به \&\fIM\fR، شاید پیش از آن \(hy، حتی پیش از دیباچه (prologue) درج می‌شوند. در PowerPC با ELFv2 ABI، برای تابعی با نقاط ورود دوگانه، نقطهٔ ورود محلی به‌طور پیش‌فرض همان نشانی ورود تابع است. برای تغییر این مورد به گزینهٔ \fB\-msplit\-patch\-nops\fR مراجعه کنید. .Sp بیشینهٔ مقدار \fIN\fR و \fIM\fR برابر 65535 است. در PowerPC با ELFv2 ABI، برای تابعی با نقاط ورود دوگانه، مقادیر پشتیبانی‌شده برای \fIM\fR در صورت عدم استفاده از \fB\-msplit\-patch\-nops\fR برابر با 0، 2، 6 و 14 هستند. .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 مستند شده‌اند. گزینه‌های مربوط به کنترل پیام‌های خطایابی (diagnostics) پیش‌پردازنده نیز در \&\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 آمده است. به‌ویژه، تعریف با نویسه‌های خط‌جدیدِ درون‌متنی بریده (قطع) می‌شود. .Sp اگر پیش‌پردازنده را از یک شل یا برنامه‌ای شبیه به شل اجرا می‌کنید، ممکن است لازم باشد از قواعد نقل‌قول (quoting) شل برای محافظت از نویسه‌هایی مانند فاصله که در نحو شل معنای خاصی دارند، استفاده کنید. .Sp اگر مایلید یک ماکروی شبه‌تابع را در خط فرمان تعریف کنید، فهرست آرگومان‌های آن را درون پرانتز قبل از علامت مساوی (در صورت وجود) بنویسید. پرانتزها برای اکثر شل‌ها معنادار هستند، بنابراین باید کل گزینه را نقل‌قول کنید. در \fBsh\fR و \fBcsh\fR، عبارت \&\fB\-D\*(Aq\fR\fIname\fR\fB(\fR\fIargs...\fR\fB)=\fR\fIdefinition\fR\fB\*(Aq\fR عمل می‌کند. .Sp گزینه‌های \fB\-D\fR و \fB\-U\fR به ترتیبی که در خط فرمان داده شده‌اند پردازش می‌شوند. تمامی گزینه‌های \fB\-imacros\fR \fIfile\fR و \&\fB\-include\fR \fIfile\fR بعد از همهٔ گزینه‌های \fB\-D\fR و \fB\-U\fR پردازش می‌شوند. .IP "\fB\-U\fR \fIname\fR" 4 .IX Item "-U name" هرگونه تعریف پیشین از \fIname\fR را، چه توکار باشد چه با گزینهٔ \fB\-D\fR ارائه شده باشد، لغو می‌کند. .IP "\fB\-include\fR \fIfile\fR" 4 .IX Item "-include file" فایل \fIfile\fR را طوری پردازش می‌کند که گویی \f(CW\*(C`#include "file"\*(C'\fR به‌عنوان اولین خط فایل منبع اصلی ظاهر شده است. با این وجود، نخستین دایرکتوری که برای \fIfile\fR جستجو می‌شود، دایرکتوری کاری پیش‌پردازنده است \fIبه‌جای\fR دایرکتوری حاوی فایل منبع اصلی. اگر در آنجا پیدا نشود، جستجو در بقیهٔ زنجیرهٔ جستجوی \f(CW\*(C`#include "..."\*(C'\fR طبق روال معمول دنبال می‌شود. .Sp اگر چندین گزینهٔ \fB\-include\fR داده شود، فایل‌ها به ترتیبی که در خط فرمان آمده‌اند گنجانده می‌شوند. .IP "\fB\-imacros\fR \fIfile\fR" 4 .IX Item "-imacros file" دقیقاً شبیه به \fB\-include\fR است، با این تفاوت که هرگونه خروجی تولیدشده از پیمایش \fIfile\fR دور ریخته می‌شود. ماکروهایی که تعریف می‌کند همچنان تعریف‌شده باقی می‌مانند. این قابلیت به شما امکان می‌دهد تمام ماکروها را از یک سرآیند به دست آورید بدون آنکه اعلان‌های آن پردازش شوند. .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) را تعریف می‌کند. باید از این گزینه به‌طور یکنواخت هم برای کامپایل و هم برای پیونددهی استفاده کنید. این گزینه در مقصدهای GNU/Linux، بیشتر مشتقات دیگر یونیکس، و همچنین در مقصدهای x86 در Cygwin و MinGW پشتیبانی می‌شود. .IP \fB\-M\fR 4 .IX Item "-M" به‌جای ارائهٔ نتیجهٔ پیش‌پردازش، قاعده‌ای مناسب برای \fBmake\fR در خروجی تولید می‌کند که وابستگی‌های فایل منبع اصلی را توصیف می‌کند. پیش‌پردازنده یک قاعدهٔ \fBmake\fR شامل نام فایل شیء (object file) برای آن فایل منبع، یک علامت دونقطه، و نام تمامی فایل‌های گنجانده‌شده (شامل فایل‌هایی که از گزینه‌های خط فرمان \fB\-include\fR یا \&\fB\-imacros\fR آمده‌اند) صادر می‌کند. .Sp مگر اینکه به‌طور صریح مشخص شده باشد (با \fB\-MT\fR یا \fB\-MQ\fR)، نام فایل شیء متشکل از نام فایل منبع است که پسوند آن با پسوند فایل شیء جایگزین شده و تمامی بخش‌های دایرکتوری آغازین آن حذف شده است. اگر فایل‌های گنجانده‌شده زیادی وجود داشته باشند، قاعده با استفاده از \fB\e\fR\-خط‌جدید به چند خط تقسیم می‌شود. این قاعده هیچ فرمانی ندارد. .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 بر فایل خروجی وابستگی پیش‌فرض اولویت یافته و آن را بازنویسی می‌کند. .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 به صورت ضمنی اعمال نمی‌شود. راه‌انداز (driver) مقدار \fIfile\fR را بر اساس اینکه گزینهٔ \fB\-o\fR داده شده است یا خیر تعیین می‌کند. اگر داده شده باشد، راه‌انداز از آرگومان آن اما با پسوند \fI.d\fR استفاده می‌کند؛ در غیر این صورت نام فایل ورودی را گرفته، تمام بخش‌های دایرکتوری و پسوند را حذف کرده، و پسوند \fI.d\fR را اعمال می‌کند. .Sp اگر \fB\-MD\fR همراه با \fB\-E\fR استفاده شود، هر سوئیچ \&\fB\-o\fR به عنوان مشخص‌کنندهٔ فایل خروجی وابستگی تلقی می‌شود، اما اگر بدون \fB\-E\fR استفاده شود، هر \fB\-o\fR مشخص‌کنندهٔ فایل شیء هدف خواهد بود. .Sp از آنجا که \fB\-E\fR به صورت ضمنی اعمال نمی‌شود، می‌توان از \fB\-MD\fR برای تولید فایل خروجی وابستگی به عنوان یک اثر جانبی از فرایند کامپایل استفاده کرد. .IP \fB\-MMD\fR 4 .IX Item "-MMD" مانند \fB\-MD\fR است به جز اینکه تنها فایل‌های سرآیند کاربر را ذکر می‌کند، نه فایل‌های سرآیند سیستمی را. .IP \fB\-fpreprocessed\fR 4 .IX Item "-fpreprocessed" به پیش‌پردازنده نشان می‌دهد که فایل ورودی از قبل پیش‌پردازش شده است. این امر مواردی مانند بسط ماکرو (macro expansion)، تبدیل سه‌نویسه‌ها (trigraph conversion)، پیوند دادن خط‌های جدید گریزخورده (escaped newline splicing)، و پردازش بیشتر دستورالعمل‌ها را متوقف می‌کند. پیش‌پردازنده همچنان توضیح‌ها (کامنت‌ها) را تشخیص داده و حذف می‌کند، بنابراین می‌توانید فایلی را که با \fB\-C\fR پیش‌پردازش شده است بدون مشکل به کامپایلر ارسال کنید. در این حالت، پیش‌پردازندهٔ یکپارچه چیزی بیش از یک نشانه‌گذار (tokenizer) برای فرانت‌اندها نخواهد بود. .Sp اگر فایل ورودی یکی از پسوندهای \fB.i\fR، \fB.ii\fR یا \fB.mi\fR را داشته باشد، \&\fB\-fpreprocessed\fR به صورت ضمنی فعال است. این‌ها پسوندهایی هستند که GCC برای فایل‌های پیش‌پردازش‌شدهٔ ایجادشده توسط \&\fB\-save\-temps\fR استفاده می‌کند. .IP \fB\-fdirectives\-only\fR 4 .IX Item "-fdirectives-only" هنگام پیش‌پردازش، دستورالعمل‌ها را پردازش می‌کند اما ماکروها را بسط نمی‌دهد. .Sp رفتار این گزینه به گزینه‌های \fB\-E\fR و \fB\-fpreprocessed\fR بستگی دارد. .Sp همراه با \fB\-E\fR، پیش‌پردازش به رسیدگی به دستورالعمل‌هایی مانند \f(CW\*(C`#define\*(C'\fR، \f(CW\*(C`#ifdef\*(C'\fR و \f(CW\*(C`#error\*(C'\fR محدود می‌شود. سایر عملیات پیش‌پردازنده مانند بسط ماکرو و تبدیل سه‌نویسه‌ها انجام نمی‌شوند. علاوه بر این، گزینهٔ \fB\-dD\fR به صورت ضمنی فعال می‌شود. .Sp همراه با \fB\-fpreprocessed\fR، تعریف پیش‌فرض ماکروهای خط فرمان و بیشتر ماکروهای توکار غیرفعال می‌شود. ماکروهایی مانند \f(CW\*(C`_\|_LINE_\|_\*(C'\fR که وابسته به زمینه هستند، به طور عادی پردازش می‌شوند. این امر امکان کامپایل فایل‌هایی را فراهم می‌کند که قبلاً با \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR پیش‌پردازش شده‌اند. .Sp در صورت استفاده از هر دو گزینهٔ \fB\-E\fR و \fB\-fpreprocessed\fR، قواعد مربوط به \&\fB\-fpreprocessed\fR تقدم دارند. این امر امکان پیش‌پردازش کامل فایل‌هایی را فراهم می‌سازد که قبلاً با \f(CW\*(C`\-E \-fdirectives\-only\*(C'\fR پیش‌پردازش شده‌اند. .IP \fB\-fdollars\-in\-identifiers\fR 4 .IX Item "-fdollars-in-identifiers" پذیرش نویسهٔ \fB$\fR در شناسه‌ها. .IP \fB\-fextended\-identifiers\fR 4 .IX Item "-fextended-identifiers" پذیرش نام‌های نویسهٔ فراگیر (universal character names) و نویسه‌های گسترش‌یافته در شناسه‌ها. این گزینه به طور پیش‌فرض برای C99 (و نسخه‌های بعدی استاندارد C) و C++ فعال است. .IP \fB\-fno\-canonical\-system\-headers\fR 4 .IX Item "-fno-canonical-system-headers" هنگام پیش‌پردازش، مسیرهای سرآیند سیستمی را با متعارف‌سازی (canonicalization) کوتاه نمی‌کند. .IP \fB\-fmax\-include\-depth=\fR\fIdepth\fR 4 .IX Item "-fmax-include-depth=depth" حداکثر عمق دستورهای #include تودرتو را تعیین می‌کند. مقدار پیش‌فرض ۲۰۰ است. .IP \fB\-fsearch\-include\-path\fR[\fB=\fR\fIkind\fR] 4 .IX Item "-fsearch-include-path[=kind]" جستجوی فایل‌های ورودی در مسیر #include، نه فقط در دایرکتوری جاری. این گزینه به‌ویژه با ماژول‌های C++20 کاربرد دارد که در آن‌ها هم واحدهای سرآیند (header units) و هم واحدهای رابط ماژول (module interface units) باید مستقیماً کامپایل شوند: .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]" موقعیت نشانه‌ها (tokens) را در میان بسط‌های ماکرو ردیابی می‌کند. این قابلیت به کامپایلر اجازه می‌دهد تا هنگام وقوع خطای کامپایل در بسط ماکرو، اطلاعات تشخیصی دربارهٔ پشتهٔ بسط ماکروی فعلی صادر کند. استفاده از این گزینه باعث مصرف حافظهٔ بیشتر توسط پیش‌پردازنده و کامپایلر می‌شود. پارامتر \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 جهت تغییر یک مسیر مطلق به یک مسیر نسبی به کار رود، که می‌تواند به ساخت‌های بازتولیدپذیرتر و مستقل از مکان منجر شود. این گزینه همچنین بر \&\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 به کار می‌رود. اگر محلی‌سازی (locale) آن را مشخص نکند، یا 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" تولید نشانگرهای خط (linemarkers) را در خروجی پیش‌پردازنده فعال می‌کند تا کامپایلر از دایرکتوری کاری جاری در زمان پیش‌پردازش آگاه شود. هنگامی که این گزینه فعال باشد، پیش‌پردازنده پس از نشانگر خط اولیه، نشانگر خط دومی را همراه با دایرکتوری کاری جاری و به دنبال آن دو اسلش صادر می‌کند. در صورت وجود این دایرکتوری در ورودی پیش‌پردازش‌شده، GCC از آن به عنوان دایرکتوری صادرشده تحت عنوان دایرکتوری کاری جاری در برخی از قالب‌های اطلاعات اشکال‌زدایی استفاده می‌کند. این گزینه در صورت فعال بودن اطلاعات اشکال‌زدایی به صورت ضمنی فعال می‌شود، اما می‌توان با شکل نقیض \fB\-fno\-working\-directory\fR از آن جلوگیری کرد. اگر پرچم \fB\-P\fR در خط فرمان وجود داشته باشد، این گزینه هیچ اثری ندارد، زیرا اصلاً هیچ دستورالعمل \f(CW\*(C`#line\*(C'\fR صادر نمی‌شود. .IP "\fB\-A\fR \fIpredicate\fR\fB=\fR\fIanswer\fR" 4 .IX Item "-A predicate=answer" یک تصدیق (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 باید برای عوارض جانبی آماده باشید؛ این گزینه باعث می‌شود که پیش‌پردازنده با کامنت‌ها به عنوان نشانه‌ها (tokens) مستقل رفتار کند. برای مثال، کامنت‌هایی که در ابتدای یک خط دستورالعمل ظاهر می‌شوند، باعث تبدیل آن خط به یک خط کد مبدأ معمولی می‌شوند، زیرا اولین نشانه در خط دیگر \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 یک ثابت نویسه‌ای برای خط جدید است. .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 پیش‌پردازش را به‌عنوان بخشی یکپارچه از توکن‌بندی و تجزیهٔ ورودی انجام می‌دهد. اگر این گزینه مشخص شود، فرانت‌اند زبان مربوطه (\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" استفاده از پیونددهندهٔ \fBlld\fR متعلق به LLVM به جای پیونددهندهٔ پیش‌فرض. .IP \fB\-fuse\-ld=mold\fR 4 .IX Item "-fuse-ld=mold" استفاده از پیونددهندهٔ مدرن (\fBmold\fR) به جای پیونددهندهٔ پیش‌فرض. .IP \fB\-l\fR\fIlibrary\fR 4 .IX Item "-lllibrary" .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 پیوند بده. این گزینه روی اهداف GNU/Linux، بیشتر مشتقات دیگر Unix، و همچنین روی اهداف x86 Cygwin و MinGW پشتیبانی می‌شود. در برخی اهداف، این گزینه همچنین پرچم‌هایی را برای پیش‌پردازنده تنظیم می‌کند، بنابراین باید به طور هماهنگ هم برای کامپایل و هم برای پیوند استفاده شود. .IP \fB\-r\fR 4 .IX Item "-r" یک شیء با قابلیت جابه‌جایی به عنوان خروجی تولید کن. این عمل به عنوان پیوند جزئی نیز شناخته می‌شود. .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" یک شیء مشترک تولید کن که سپس می‌تواند با اشیاء دیگر برای تشکیل یک فایل اجرایی پیوند داده شود. همهٔ سیستم‌ها از این گزینه پشتیبانی نمی‌کنند. برای نتایج قابل پیش‌بینی، هنگام مشخص کردن این گزینهٔ پیونددهنده، باید همان مجموعه گزینه‌هایی را که برای کامپایل استفاده شده‌اند (\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)، ارجاعات را به نمادهای سراسری (global symbols) مقید می‌کند. درباره هرگونه ارجاع حل‌نشده هشدار می‌دهد (مگر اینکه توسط گزینه ویرایشگر پیوند \fB\-Xlinker \-z \-Xlinker defs\fR لغو شود). تنها تعداد کمی از سیستم‌ها از این گزینه پشتیبانی می‌کنند. .IP "\fB\-T\fR \fIscript\fR" 4 .IX Item "-T script" از \fIscript\fR به عنوان اسکریپت پیونددهنده (linker script) استفاده می‌کند. این گزینه توسط بیشتر سیستم‌هایی که از پیونددهنده GNU استفاده می‌کنند پشتیبانی می‌شود. در برخی مقاصد (targets)، مانند مقاصد 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\-supplied) استفاده کنید؛ برای این منظور از \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 را تفکیک می‌کند. این گزینه منسوخ شده است (deprecated). لطفاً به جای آن، برای دایرکتوری‌های \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" دایرکتوری جستجو برای پلاگین‌هایی را مشخص می‌کند که به جای \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR، از طریق \fB\-fplugin=\fR\fIname\fR ارسال شده‌اند. این گزینه برای استفاده توسط کاربر در نظر گرفته نشده است و فقط از طرف درایور کامپایلر ارسال می‌شود. .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 ترجمه می‌کند. آن‌ها همچنین بر فایل‌های include در پیش‌پردازنده اعمال می‌شوند، زیرا کامپایلر این گزینه‌ها را برای پیش‌پردازنده به گزینه‌های \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 جایگزین می‌شود. این ترفند برای کمک به خودراه‌اندازی (bootstrapping) کامپایلر است. .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 به عنوان دایرکتوری ریشهٔ منطقی برای سرآیندها (headers) و کتابخانه‌ها استفاده می‌کند. برای نمونه، اگر کامپایلر در حالت عادی برای یافتن سرآیندها در \&\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 linker - از نگارش 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" این گزینه استفاده مجدد از فضای پشته (stack) را برای متغیرهای محلی/خودکار (local/auto) اعلان‌شده توسط کاربر و مقادیر موقت تولیدشده توسط کامپایلر کنترل می‌کند. مقدار \fIreuse_level\fR می‌تواند \fBall\fR، \&\fBnamed_vars\fR یا \fBnone\fR باشد. مقدار \fBall\fR استفاده مجدد از پشته را برای همه متغیرهای محلی و مقادیر موقت فعال می‌کند، \fBnamed_vars\fR استفاده مجدد را تنها برای متغیرهای محلی نام‌گذاری‌شده توسط کاربر فعال می‌سازد و \fBnone\fR استفاده مجدد از پشته را کاملاً غیرفعال می‌کند. مقدار پیش‌فرض \fBall\fR است. این گزینه زمانی مورد نیاز است که برنامه، طول عمر یک متغیر محلی در حوزه (scoped) یا یک مقدار موقت تولیدشده توسط کامپایلر را فراتر از نقطه پایانی تعیین‌شده توسط زبان گسترش دهد. هنگامی که طول عمر یک متغیر به پایان می‌رسد، و اگر آن متغیر در حافظه قرار داشته باشد، کامپایلر بهینه‌ساز این آزادی را دارد که از فضای پشته آن برای متغیرهای موقت دیگر یا متغیرهای محلی در حوزه‌ای که بازه حیات آن‌ها با آن همپوشانی ندارد، استفاده مجدد کند. کدهای قدیمی (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" این گزینه برای سرریز علامت‌دار (signed overflow) در عملیات‌های جمع، تفریق و ضرب تله‌ها (traps) تولید می‌کند. گزینه‌های \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) را فعال می‌کند. کدهای اضافی مورد نیاز برای انتشار (propagate) استثناها را تولید می‌کند. برای برخی اهداف (targets)، این به این معنی است که GCC اطلاعات بازگشایی فریم (frame unwind) را برای تمام توابع تولید می‌کند که می‌تواند سربار اندازه داده قابل توجهی ایجاد کند، اگرچه بر اجرای برنامه تأثیری ندارد. اگر این گزینه را مشخص نکنید، GCC آن را به طور پیش‌فرض برای زبان‌هایی مانند C++ که معمولاً به مدیریت استثنا نیاز دارند فعال، و برای زبان‌هایی مانند C که معمولاً به آن نیازی ندارند غیرفعال می‌کند. با این حال، ممکن است هنگام کامپایل کد C که نیاز دارد با گرداننده‌های استثنای نوشته‌شده در C++ همکاری و تعامل درست داشته باشد، نیاز به فعال کردن این گزینه داشته باشید. همچنین ممکن است بخواهید در صورت کامپایل برنامه‌های قدیمی‌تر C++ که از مدیریت استثنا استفاده نمی‌کنند، این گزینه را غیرفعال کنید. .IP \fB\-fnon\-call\-exceptions\fR 4 .IX Item "-fnon-call-exceptions" کدی تولید می‌کند که به دستورالعمل‌های تله‌گذار (trapping) اجازه پرتاب استثناها را می‌دهد. توجه داشته باشید که این به پشتیبانی زمان اجرای وابسته به پلتفرم نیاز دارد که در همه جا وجود ندارد. علاوه بر این، تنها به دستورالعمل‌های \fIتله‌گذار\fR اجازه پرتاب استثنا می‌دهد، مانند مراجع حافظه یا دستورالعمل‌های ممیز شناور (floating\-point). این گزینه اجازه نمی‌دهد که استثناها از مدیریت‌کننده‌های سیگنال دلخواه مانند \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 است، با این تفاوت که تنها داده‌های ایستا (static) مورد نیاز را تولید می‌کند، اما به هیچ شیوه دیگری روی کد تولیدشده تأثیر نمی‌گذارد. معمولاً نیازی به فعال کردن این گزینه ندارید؛ در عوض، پردازنده زبانی که به این سازوکار نیاز دارد، آن را از طرف شما فعال می‌کند. .IP \fB\-fasynchronous\-unwind\-tables\fR 4 .IX Item "-fasynchronous-unwind-tables" جدول بازگشایی (unwind table) را در قالب DWARF تولید می‌کند، البته در صورتی که ماشین هدف از آن پشتیبانی کند. این جدول در هر مرز دستورالعمل دقیق است، بنابراین می‌تواند برای بازگشایی پشته در رویدادهای ناهمگام (مانند دیباگر یا زباله‌روب) استفاده شود. .IP \fB\-fno\-gnu\-unique\fR 4 .IX Item "-fno-gnu-unique" در سیستم‌های دارای اسمبلر GNU و کتابخانه C جدید، کامپایلر C++ از پیوند \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR استفاده می‌کند تا اطمینان حاصل کند که تعاریف اعضای داده‌ای ایستای قالب‌ها و متغیرهای محلی ایستا در توابع درون‌خطی (inline) حتی در حضور \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 را مانند مقادیر طولانی‌تر، به جای ثبات‌ها (registers) در حافظه بازمی‌گرداند. این قرارداد کارایی کمتری دارد، اما این مزیت را دارد که امکان فراخوانی متقابل میان فایل‌های کامپایل‌شده با GCC و فایل‌های کامپایل‌شده با کامپایلرهای دیگر، به‌ویژه Portable C Compiler (pcc) را فراهم می‌آورد. .Sp قرارداد دقیق بازگرداندن ساختارها در حافظه به ماکروهای پیکربندی هدف بستگی دارد. .Sp ساختارها و اجتماعات (unions) کوتاه مواردی هستند که اندازه و تراز آن‌ها با اندازه و تراز یکی از انواع عدد صحیح مطابقت دارد. .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 به‌طور پیش‌فرض از هر قراردادی که برای هدف (target) استاندارد باشد استفاده می‌کند. اگر قرارداد استانداردی وجود نداشته باشد، GCC به‌طور پیش‌فرض از \fB\-fpcc\-struct\-return\fR استفاده می‌کند، به جز در اهدافی که GCC کامپایلر اصلی است. در این موارد، ما می‌توانیم استاندارد را تعیین کنیم و گزینهٔ کارآمدتر بازگشت از طریق ثبات را برگزیده‌ایم. .Sp \&\fBهشدار:\fR کدی که با سوییچ \fB\-freg\-struct\-return\fR کامپایل شده است با کدی که با سوییچ \&\fB\-fpcc\-struct\-return\fR کامپایل شده سازگاری دودویی (binary compatible) ندارد. از آن برای سازگاری با یک رابط دودویی کاربردی (ABI) غیرپیش‌فرض استفاده کنید. .IP \fB\-fshort\-enums\fR 4 .IX Item "-fshort-enums" برای یک نوع \f(CW\*(C`enum\*(C'\fR تنها به همان تعداد بایت که برای محدودهٔ اعلام‌شدهٔ مقادیر ممکن نیاز است فضا تخصیص می‌دهد. به‌طور مشخص، نوع \f(CW\*(C`enum\*(C'\fR معادل کوچک‌ترین نوع عدد صحیحی است که فضای کافی دارد. این گزینه برای یک نوع شمارشی با نوع پایه‌ای ثابت هیچ اثری ندارد. .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، این گزینه جای‌گذاری متغیرهای سراسری (global variables) تعریف‌شده بدون مقداردهی اولیه را کنترل می‌کند که در استاندارد C با عنوان \fItentative definitions\fR (تعریف‌های موقت) شناخته می‌شوند. تعریف‌های موقت از اعلان‌های متغیر همراه با کلیدواژهٔ \f(CW\*(C`extern\*(C'\fR متمایز هستند، چرا که اعلان‌ها فضایی برای ذخیره‌سازی تخصیص نمی‌دهند. .Sp حالت پیش‌فرض \fB\-fno\-common\fR است که مشخص می‌کند کامپایلر متغیرهای سراسری بدون مقدار اولیه را در بخش BSS فایل شیء (object file) قرار دهد. این ویژگی مانع از ادغام تعریف‌های موقت توسط پیونددهنده (linker) می‌شود، بنابراین اگر متغیر یکسانی به طور تصادفی در بیش از یک واحد کامپایل (compilation unit) تعریف شود، با خطای چندباره تعریف شدن (multiple\-definition error) مواجه می‌شوید. .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" اطلاعات توضیحی (comment) اضافی در کد اسمبلی تولیدشده قرار می‌دهد تا خوانایی آن بیشتر شود. این گزینه عموماً فقط برای کسانی مفید است که واقعاً نیاز به خواندن کد اسمبلی تولیدشده دارند (شاید هنگام اشکال‌زدایی خود کامپایلر). .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) مناسب برای استفاده در یک کتابخانهٔ مشترک (shared library) تولید می‌کند. چنین کدی از طریق یک جدول آفست سراسری (GOT) به تمامی آدرس‌های ثابت دسترسی پیدا می‌کند. بارگذار پویا (dynamic loader) مدخل‌های 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" در صورت پشتیبانی توسط ماشین مقصد، کد مستقل از موقعیت مناسب برای پیوند پویا و بدون محدودیت در اندازهٔ جدول آفست سراسری (GOT) تولید می‌کند. این گزینه در AArch64، m68k، PowerPC و SPARC تفاوت ایجاد می‌کند. .Sp کد مستقل از موقعیت نیازمند پشتیبانی ویژه‌ای است و بنابراین فقط روی ماشین‌های خاصی کار می‌کند. .Sp هنگامی که این پرچم تنظیم شود، ماکروهای \f(CW\*(C`_\|_pic_\|_\*(C'\fR و \f(CW\*(C`_\|_PIC_\|_\*(C'\fR برابر با ۲ تعریف می‌شوند. .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 مقدار ۱ و برای \fB\-fPIE\fR مقدار ۲ دارند. .IP \fB\-fno\-plt\fR 4 .IX Item "-fno-plt" از PLT برای فراخوانی توابع خارجی در کد مستقل از موقعیت استفاده نکن. در عوض، آدرس تابع فراخوانی‌شده را در محل فراخوانی از GOT بارگذاری کرده و به آن انشعاب بده. این امر با حذف stubهای PLT و قرار دادن بارگذاری‌های GOT در معرض بهینه‌سازی، منجر به کدی کارآمدتر می‌شود. در معماری‌هایی مانند x86 ۳۲\-بیتی که در آن‌ها stubهای 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" برای دستورهای switch حتی در جاهایی که نسبت به سایر راهبردهای تولید کد کارآمدتر است، از جدول‌های پرش استفاده نکن. این گزینه در ترکیب با \fB\-fpic\fR یا \fB\-fPIC\fR برای ساخت کدی که بخشی از یک پیونددهندهٔ پویا است و نمی‌تواند به آدرس یک جدول پرش ارجاع دهد مفید است. در برخی از معماری‌های مقصد، جدول‌های پرش نیازی به GOT ندارند و به این گزینه نیازی نیست. .IP \fB\-fno\-bit\-tests\fR 4 .IX Item "-fno-bit-tests" برای دستورهای switch حتی در جاهایی که استفاده از آزمون‌های بیتی کارآمدتر از سایر راهبردهای تولید کد است، از آن‌ها استفاده نکن. .IP \fB\-ffixed\-\fR\fIreg\fR 4 .IX Item "-ffixed-reg" با ثبات با نام \fIreg\fR به عنوان یک ثبات ثابت رفتار کن؛ کد تولیدشده هرگز نباید به آن ارجاع دهد (مگر احتمالاً به عنوان اشاره‌گر پشته، اشاره‌گر فریم یا نقشی ثابت دیگر). .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 به عنوان ثباتی قابل تخصیص رفتار کن که در اثر فراخوانی توابع بازنویسی (clobber) می‌شود. این ثبات ممکن است برای متغیرهای موقت یا متغیرهایی که در طول یک فراخوانی زنده نمی‌مانند تخصیص داده شود. توابعی که بدین صورت کامپایل می‌شوند، ثبات \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]" بدون تعیین مقدار، تمام اعضای ساختار را بدون فضای خالی در کنار هم بسته‌بندی کن. هنگامی که مقداری مشخص شود (که باید توان کوچکی از ۲ باشد)، اعضای ساختار را مطابق با این مقدار بسته‌بندی کن که بیانگر حداکثر تراز (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 باشد. توجه داشته باشید که این انتخاب مشمول بهینه‌سازی است: کامپایلر ممکن است برای نمادهایی که در خارج از واحد ترجمه قابل رویت نیستند، یا در صورتی که \&\fB\-fpic\fR در خط فرمان داده نشده باشد، از مدل کارآمدتری استفاده کند. .Sp مقدار پیش‌فرض بدون \fB\-fpic\fR برابر با \fBinitial\-exec\fR است؛ به همراه \&\fB\-fpic\fR مقدار پیش‌فرض \fBglobal\-dynamic\fR خواهد بود. .IP \fB\-ftrampolines\fR 4 .IX Item "-ftrampolines" برای مقصدهایی که معمولاً برای توابع تودرتو به ترامپولین (trampoline) نیاز دارند، همیشه به جای استفاده از توصیف‌کننده‌ها (descriptors) آن‌ها را تولید کن. در غیر این صورت، برای مقصدهایی که به آن‌ها نیازی ندارند، مانند HP\-PA یا IA\-64، کاری انجام نده. .Sp ترامپولین قطعه کد کوچکی است که در زمان اجرا، هنگام گرفته شدن آدرس یک تابع تودرتو، روی پشته ایجاد می‌شود و برای فراخوانی غیرمستقیم تابع تودرتو به کار می‌رود. بنابراین برای عملکرد صحیح برنامه نیازمند این است که پشته قابل اجرا باشد. .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 لینوکس. \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 را روی گزینهٔ مشخص‌شده تنظیم می‌کند\-\-\-تمام نمادها با این ویژگی نشانه‌گذاری می‌شوند مگر آنکه درون کد لغو شوند. استفاده از این ویژگی می‌تواند زمان پیوند و بارگذاری کتابخانه‌های شیء مشترک را به میزان چشمگیری بهبود بخشد، کد بهینه‌تری تولید کند، صادرات 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 قرار داده و موارد لازم را عمومی اعلان کنید. این روند در 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 باید به صورت hidden تلقی شوند به کامپایلر استفاده شود. .Sp توجه داشته باشید که \fB\-fvisibility\fR بر موجودیت‌های دارای پیوند مبهم (vague linkage) در ++C تأثیر می‌گذارد. این بدان معناست که برای نمونه، یک کلاس استثنا (exception class) که میان DSOها پرتاب می‌شود، باید صراحتاً با رویت‌پذیری 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 (یا دیگر فیلدهای ساختار، هرچند کامپایلر معمولاً به هر حال آن نوع‌ها را رعایت می‌کند) باید از یک دسترسی واحد به پهنای نوع فیلد، هم‌تراز با یک تراز طبیعی در صورت امکان، استفاده کنند. برای مثال، مقصدهایی با ثبات‌های جانبی نگاشت‌شده در حافظه ممکن است نیازمند این باشند که تمام این دسترسی‌ها ۱۶ بیتی باشند؛ با این پرچم می‌توانید تمام فیلدهای بیتی جانبی را به صورت \f(CW\*(C`unsigned short\*(C'\fR تعریف کنید (با فرض اینکه short روی این مقصدها ۱۶ بیتی است) تا GCC را وادار کنید به جای یک دسترسی احتمالاً کارآمدترِ ۳۲ بیتی، از دسترسی‌های ۱۶ بیتی استفاده کند. .Sp اگر این گزینه غیرفعال باشد، کامپایلر از کارآمدترین دستورالعمل استفاده می‌کند. در مثال قبلی، این ممکن است یک دستورالعمل بارگذاری (load) ۳۲ بیتی باشد، حتی اگر به بایت‌هایی دسترسی پیدا کند که شامل هیچ بخشی از فیلد بیتی نیستند، یا به ثبات‌های نگاشت‌شده در حافظه‌ای که به ثبات در حال به‌روزرسانی ارتباطی ندارند دسترسی یابد. .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) با صفر را در مقداردهنده‌های متغیرهای خودکار (automatic) تضمین می‌کند. برخی زبان‌ها مقداردهی اولیه بیت‌های فاصله‌ساز با صفر را در موارد خاصی تضمین می‌کنند؛ برای مثال C23 هنگام استفاده از مقداردهنده‌های خالی (\f(CW\*(C`{}\*(C'\fR)، یا C++ هنگام استفاده از مقداردهی با صفر (zero\-initialization)، یا 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 (در صورت وجود) و فاصله‌گذاری انتهایی (tail padding) در ساختار (در صورت وجود). .SS "گزینه‌های توسعه‌دهنده GCC (GCC Developer Options)" .IX Subsection "GCC Developer Options" این بخش گزینه‌های خط فرمانی را شرح می‌دهد که در وهله اول مورد توجه توسعه‌دهندگان GCC است، از جمله گزینه‌هایی برای پشتیبانی از آزمودن کامپایلر، بررسی باگ‌های کامپایلر و مشکلات کارایی در زمان کامپایل. این موارد شامل گزینه‌هایی است که در نقاط مختلف فرایند کامپایل رونوشت‌های اشکال‌زدایی (debug dumps) تولید می‌کنند؛ گزینه‌هایی که آمارهایی مانند مصرف حافظه و زمان اجرا را چاپ می‌کنند؛ و گزینه‌هایی که اطلاعاتی درباره پیکربندی GCC، مانند مسیرهای جستجوی کتابخانه‌ها، نمایش می‌دهند. به ندرت پیش می‌آید که برای کارهای عادی کامپایل و پیوند دادن به استفاده از هر یک از این گزینه‌ها نیاز داشته باشید. .PP بسیاری از گزینه‌های توسعه‌دهنده که باعث می‌شوند GCC خروجی را در یک فایل رونوشت ذخیره کند، یک پسوند اختیاری \fB=\fR\fIfilename\fR می‌پذیرند. می‌توانید \fBstdout\fR یا \fB\-\fR را برای ارسال به خروجی استاندارد، و \fBstderr\fR را برای خطای استاندارد مشخص کنید. .PP اگر \fB=\fR\fIfilename\fR حذف شود، یک نام پیش‌فرض برای فایل رونوشت از الحاق نام پایه فایل رونوشت، یک شماره گذر (pass number)، حرف فاز (phase letter) و نام گذر ساخته می‌شود. نام پایه فایل رونوشت در صورتی که به صراحت مشخص شده باشد و فایل اجرایی نباشد، نام فایل خروجی تولیدشده توسط کامپایلر است؛ در غیر این صورت نام فایل منبع خواهد بود. شماره گذر بر اساس ترتیبی که گذرها در مدیر گذر (pass manager) کامپایلر ثبت شده‌اند تعیین می‌شود. این ترتیب معمولاً با ترتیب اجرا یکسان است، اما گذرهایی که توسط افزایه‌ها (plugins) ثبت می‌شوند، گذرهای ویژه‌ی پردازنده مقصد، یا گذرهایی که به دلایل دیگر دیر ثبت می‌شوند، شماره‌ای بالاتر از گذر موسوم به \&\fBfinal\fR دریافت می‌کنند، حتی اگر زودتر اجرا شوند. حرف فاز یکی از حروف \fBi\fR (تحلیل بین‌رویه‌ای - inter\-procedural analysis)، \fBl\fR (مختص به زبان - language\-specific)، \fBr\fR (نمایش RTL) یا \fBt\fR (درخت - tree) است. این فایل‌ها در دایرکتوری فایل خروجی ایجاد می‌شوند. .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) را برای برنامه، به ازای هر فایل شیء (object file) تولید کند. این اطلاعات در قالب متداول 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 فعال کرد. در اینجا حروف ممکن برای استفاده در \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). این گذر تنها روی معماری‌هایی اجرا می‌شود که دستورالعمل‌های auto inc یا auto 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" رونوشت پس از افرازش بلوک‌های پایه‌ای داغ و سرد. .IP \fB\-fdump\-rtl\-bbro\fR 4 .IX Item "-fdump-rtl-bbro" رونوشت پس از بازآرایی بلوک‌ها. .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های محاسبه‌شده..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" تخلیه اطلاعات پس از ترکیب تنظیمات پشته. .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 تخلیه اطلاعات را پس از دو گذر حذف زیرعبارت‌های مشترک فعال می‌کنند. .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" تخلیه اطلاعات پس از تخصیص مکرر ثبات‌ها (IRA). .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" تخلیه اطلاعات پس از تولید مقدمه (prologue) و مؤخرهٔ (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). .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" تخلیه اطلاعات پس از تبدیل از ثبات‌های «flat register file» در 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" در پایان پیش‌پردازش، علاوه بر خروجی عادی، تمام تعاریف ماکرو را تخلیه (dump) می‌کند. .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" اطلاعات مربوط به بهینه‌سازی گراف فراخوانی، حذف توابع استفاده‌نشده و تصمیمات درون‌خطی‌سازی (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) برای پاک‌سازی پشته و واترمارک‌گذاری. .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" یک فایل تخلیه شامل اطلاعات مربوط به ایجاد کلون‌های گره گراف فراخوانی و حذف گره‌های گراف فراخوانی در طول بهینه‌سازی‌ها و تبدیلات میان‌روالی ایجاد می‌کند. هدف اصلی استفاده از آن این است که ابزارهای ایجاد وصلهٔ زنده (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 (Elrond)، \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 باعث می‌شود شمارنده‌ها برای کل واحد ترجمه (compilation unit) جمع بسته شوند، در حالی که \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" هنگام تخلیهٔ نمایش‌های میانی بخش فرانت‌اند (front\-end)، صرفاً به دلیل دسترسی به یک حوزه، از تخلیهٔ اعضای آن حوزه یا بدنهٔ یک تابع جلوگیری می‌کند. این موارد تنها زمانی تخلیه می‌شوند که از طریقی دیگر مستقیماً قابل دسترسی باشند. .Sp هنگام تخلیهٔ درخت‌ها با فرمت خوانا (pretty\-printed)، این گزینه از تخلیهٔ بدنهٔ ساختارهای کنترلی جلوگیری می‌کند. .Sp هنگام تخلیهٔ RTL، نمایش RTL را به‌جای نمایش پیش‌فرض شبیه LISP، در قالبی جمع‌وجور (slim) چاپ می‌کند. .IP \fBraw\fR 4 .IX Item "raw" چاپ نمایشی خام از درخت. به‌طور پیش‌فرض، درخت‌ها با فرمت خوانا (pretty\-printed) در قالبی شبیه به C چاپ می‌شوند. .IP \fBdetails\fR 4 .IX Item "details" فعال‌سازی تخلیه‌های پرجزئیات‌تر (توسط همهٔ گزینه‌های تخلیه رعایت نمی‌شود). همچنین اطلاعاتی از گذرگاه‌های بهینه‌سازی را شامل می‌شود. .IP \fBstats\fR 4 .IX Item "stats" فعال‌سازی تخلیهٔ آمارهای مختلف دربارهٔ گذرگاه (توسط همهٔ گزینه‌های تخلیه رعایت نمی‌شود). .IP \fBblocks\fR 4 .IX Item "blocks" فعال‌سازی نمایش مرزهای بلوک پایه (basic block) (در تخلیه‌های خام غیرفعال است). .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 خروجی‌های تخلیه (dump) بهینه‌سازی از گذرهای مختلف بهینه‌سازی را کنترل می‌کند. اگر قالب \&\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." گزینه‌هایی که میزان پرگویی (verbosity) خروجی تخلیه را تعیین می‌کنند، و .IP 3. 4 .IX Item "3." گزینه‌هایی که تعیین می‌کنند کدام بهینه‌سازی‌ها باید گنجانده شوند. .RE .RS 4 .Sp گزینه‌های هر گروه را می‌توان آزادانه با یکدیگر ترکیب کرد چرا که با هم هم‌پوشانی ندارند. با این حال، در صورت بروز هرگونه تداخل، گزینه‌های بعدی در خط فرمان بر گزینه‌های قبلی برتری خواهند داشت (override می‌کنند). .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 گزینهٔ زیر میزان پرگویی خروجی تخلیه را کنترل می‌کند: .IP \fBinternals\fR 4 .IX Item "internals" به‌طور پیش‌فرض، تنها پیام‌های \(lqسطح بالا\(rq صادر می‌شوند. این گزینه پیام‌های اضافی و با جزئیات بیشتری را فعال می‌کند که احتمالاً فقط برای توسعه‌دهندگان 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 خواهد بود؛ به این معنی که پیام‌های مربوط به بهینه‌سازی‌های موفقیت‌آمیز از تمام گذرها تخلیه می‌شوند و از پیام‌هایی که به عنوان \(lqinternals\(rq در نظر گرفته می‌شوند صرف‌نظر خواهد شد. .Sp اگر \fIfilename\fR مشخص شده باشد، خروجی‌های تخلیه از تمام بهینه‌سازی‌های مربوطه در \fIfilename\fR الحاق می‌شوند. در غیر این صورت، خروجی تخلیه روی \fIstderr\fR فرستاده می‌شود. اگرچه چندین گزینهٔ \&\fB\-fopt\-info\fR پذیرفته می‌شوند، اما تنها یکی از آن‌ها می‌تواند شامل یک \fIfilename\fR باشد. اگر نام‌های فایل دیگری مشخص شوند، تمام آن‌ها به جز اولین گزینه نادیده گرفته می‌شوند. .Sp توجه داشته باشید که در صورت وجود چندین واحد ترجمه (translation unit)، فایل خروجی \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 تعداد دفعات اجرای کدی که بهینه‌سازی می‌شود، به همراه فراداده‌ای دربارهٔ اینکه آیا این مقدار از داده‌های پروفایل‌سازی واقعی به دست آمده یا فقط یک برآورد است، تا مصرف‌کنندگان بتوانند پیام‌ها را بر اساس میزان داغیِ کد (code hotness) اولویت‌بندی کنند، .IP * 4 نام تابعِ کدی که در حال بهینه‌سازی است، در صورت کاربرد، .IP * 4 \(lqزنجیرهٔ درون‌خطی‌سازی\(rq (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" در اهدافی که از زمان‌بندی دستورالعمل‌ها استفاده می‌کنند، این گزینه میزان خروجی اشکال‌زدایی چاپ‌شده توسط زمان‌بند در فایل‌های تخلیه (dump) را کنترل می‌کند. .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)، جریان کنترل و اطلاعات ناحیه‌ها می‌شود. و برای \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 در سرآیند تابع در یک فایل تخلیه (dump file) نمایش داده می‌شود و نام‌های گذر را می‌توان با استفاده از گزینهٔ \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 گذر درختی \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 گذر درختی \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) و فایل‌های شیئی (object files) که آن‌ها را تولید می‌کنند، استفاده می‌شود. می‌توانید از گزینهٔ \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 درخواست شده به کامپایلر فرستاده می‌شود. فایل‌های تخلیه (dump) و فایل‌های موقت نگه‌داری‌شده به گونه‌ای تغییر نام می‌یابند که در حین کامپایل دوم حاوی پسوند اضافی \f(CW\*(C`.gk\*(C'\fR باشند تا از رونویسی موارد ایجادشده توسط کامپایل اول جلوگیری شود. .Sp هنگامی که این گزینه به درایور کامپایلر ارسال می‌شود، باعث می‌گردد از کامپایل \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" باعث می‌شود کامپایلر پس از پایان هر گذر، آمارهایی دربارهٔ زمان صرف‌شده توسط آن گذر در 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" زمان صرف‌شده توسط بخش‌های زیرساختی را برای هر گذر به صورت جداگانه ثبت می‌کند. .IP \fB\-fira\-verbose=\fR\fIn\fR 4 .IX Item "-fira-verbose=n" میزان پرگویی (verbosity) فایل تخلیه را برای تخصیص‌دهندهٔ یکپارچهٔ ثبات‌ها (IRA) کنترل می‌کند. مقدار پیش‌فرض ۵ است. اگر مقدار \fIn\fR بزرگ‌تر یا مساوی ۱۰ باشد، خروجی با قالبی معادل \fIn\fR منهای ۱۰ به stderr فرستاده می‌شود. .IP \fB\-flto\-report\fR 4 .IX Item "-flto-report" گزارشی با جزئیات درونی دربارهٔ نحوهٔ کارکرد بهینه‌ساز زمان پیوند (LTO) چاپ می‌کند. محتوای این گزارش از نسخه‌ای به نسخهٔ دیگر متفاوت است. هدف آن ارائهٔ اطلاعات کاربردی به توسعه‌دهندگان 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 باعث می‌شود کامپایلر آمارهایی دربارهٔ تخصیص حافظهٔ دائمی قبل یا بعد از بهینه‌سازی میان‌روالی (IPA) چاپ کند. .IP \fB\-fmultiflags\fR 4 .IX Item "-fmultiflags" این گزینه امکان استفاده از \f(CW\*(C`TFLAGS\*(C'\fR آگاه از multilib را برای ساخت کتابخانه‌های مقصد با گزینه‌هایی متفاوت از آنچه کامپایلر به‌طور پیش‌فرض برای استفاده پیکربندی شده است، از طریق مشخصات (specs) تنظیم‌شده توسط اجزای درونی کامپایلر، معماری مقصد، یا سازندگان در زمان پیکربندی فراهم می‌کند. .Sp مانند \f(CW\*(C`TFLAGS\*(C'\fR، این گزینه اجازه می‌دهد کتابخانه‌های مقصد برای محیط‌های پایهٔ قابل‌حمل ساخته شوند، در حالی که کامپایلر به‌طور پیش‌فرض محیط‌های پیشرفته‌تر را هدف قرار می‌دهد. این ویژگی مفید است زیرا کاربران در صورتی که پیش‌فرض‌ها برای محیط مقصدشان ایده‌آل نباشد، می‌توانند به‌سادگی پیش‌فرض‌های پیکربندی‌شده کامپایلر را برای ساخت برنامه‌های خود لغو کنند، در حالی که ساخت مجدد کتابخانه‌های زمان اجرا معمولاً به این آسانی یا خوشایندی نیست. .Sp برخلاف \f(CW\*(C`TFLAGS\*(C'\fR، استفاده از مشخصات امکان انتخاب پرچم‌های متفاوتی را برای multilibهای مختلف فراهم می‌کند. راه دستیابی به این هدف، ساخت با دستور \fBmake TFLAGS=\-fmultiflags\fR پس از پیکربندی با \fB\-\-with\-specs=%{fmultiflags:...}\fR است. .Sp این گزینه پس از اتمام پردازش مشخصات خود درایور (driver self spec)، توسط درایور کنار گذاشته می‌شود. .Sp همچنین بررسی اینکه آیا \f(CW\*(C`TFLAGS\*(C'\fR برای ساخت همهٔ کتابخانه‌های مقصد استفاده می‌شوند یا خیر مفید است، که با پیکربندی یک کامپایلر غیر خودراه‌انداز (non-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 usage) را برای برنامه، بر مبنای هر تابع خروجی دهد. نام فایل تخلیه با افزودن \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 استفاده می‌شود. بسته به نحوهٔ پیکربندی کامپایلر، این مقدار می‌تواند فقط یک عدد منفرد (نسخه اصلی)، دو عدد جداشده با نقطه (نسخه اصلی و فرعی)، یا سه عدد جداشده با نقطه (نسخه اصلی، فرعی و patchlevel) باشد. .IP \fB\-dumpfullversion\fR 4 .IX Item "-dumpfullversion" نسخهٔ کامل کامپایلر را چاپ می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. خروجی همیشه سه عدد جداشده با نقطه است: نسخهٔ اصلی، فرعی و 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\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 کامپایل کنید و با مجموعه‌ای سازگار از کتابخانه‌ها پیوند دهید. .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" تولید کدی که تنها از ثبات‌های همه‌منظوره استفاده می‌کند. این کار مانع از استفاده کامپایلر از ثبات‌های ممیز شناور و 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. برنامه و نمادهای تعریف‌شده به‌صورت ایستای آن باید در فاصله حداکثر ۱ مگابایت از یکدیگر قرار گیرند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" تولید کد برای مدل کد small. برنامه و نمادهای تعریف‌شده به‌صورت ایستای آن باید در فاصله حداکثر ۴ گیگابایت از یکدیگر قرار گیرند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. این مدل کد پیش‌فرض است. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" تولید کد برای مدل کد large. این مدل هیچ فرضی درباره آدرس‌ها و اندازه بخش‌ها (sections) نمی‌کند. برنامه‌ها تنها می‌توانند به‌صورت ایستا پیوند داده شوند. گزینه \&\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" مشخص کردن اندازه بیتی آفست‌های بی‌واسطه در 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 فعال یا غیرفعال کردن راهکار دورزدن برای نقص فنی (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) اعمال می‌شود و تنها پرچم متناظر را به پیونددهنده ارسال خواهد کرد. در صورتی که معماری یا پردازنده‌ای در خط فرمان مشخص شده باشد که به این راهکار نیاز نداشته باشد، این پرچم نادیده گرفته خواهد شد. .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 فعال یا غیرفعال کردن تقریب معکوس جذر. این گزینه تنها در صورتی اثرگذار است که \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 فعال یا غیرفعال کردن تقریب جذر. این گزینه تنها در صورتی اثرگذار است که \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) موجود در معماری پایه ARMv8.0 ISA استفاده خواهند کرد. .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" نام معماری هدف و در صورت تمایل، یک یا چند اصلاح‌کنندهٔ ویژگی را مشخص می‌کند. این گزینه قالبی به صورت \&\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 را لغو (override) می‌کند. نحو (syntax)، معانی (semantics) و مقادیر پذیرفته‌شده برای \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. با این گزینه، مخازن مقادیر صریح با استفاده از یک دستورالعمل واحد مورد دسترسی قرار گرفته و پس از هر تابع درج می‌شوند. این کار بیشینه اندازه توابع را به 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 که امضای اشاره‌گر را برای توابعی که توابع برگ نیستند فعال می‌سازد، و \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 امضای نشانی بازگشت را در سطح استاندارد فعال می‌کند: امضای توابعی که نشانی بازگشت را در حافظه ذخیره می‌کنند (توابع غیربرگ عملاً همیشه این کار را انجام می‌دهند) با استفاده از a\-key. آرگومان اختیاری \fBleaf\fR می‌تواند برای گسترش امضا جهت در بر گرفتن توابع برگ استفاده شود. آرگومان اختیاری \fBb\-key\fR می‌تواند برای امضای توابع با B\-key به جای A\-key به کار رود. \&\fBbti\fR سازوکار شناسایی هدف انشعاب را فعال می‌کند. \&\fBgcs\fR تولید کد سازگار با پشته کنترلی حفاظت‌شده (GCS) را فعال می‌کند. .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 تمام آن‌ها را غیرفعال می‌سازد. .RE .IP \fB\-mearly\-ra=\fR\fIscope\fR 4 .IX Item "-mearly-ra=scope" تعیین زمان فعال‌سازی گذر زودهنگام تخصیص ثبات. این گذر پیش از زمان‌بندی دستورالعمل‌ها اجرا شده و تلاش می‌کند تخصیصی بدون ریزش (spill\-free) برای کدهای ممیز شناور و برداری بیابد. همچنین تلاش می‌کند از دستورالعمل‌های چندثباتی گام‌دار، مانند LD1 و ST1 گام‌دار در SME2 استفاده کند. .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" فعال‌سازی نسخه گذر ادغام جفت بارگذاری/ذخیره‌سازی در AArch64 که پیش از تخصیص ثبات اجرا می‌شود. به‌طور پیش‌فرض در \fB\-O\fR و بالاتر فعال است. .IP \fB\-mlate\-ldp\-fusion\fR 4 .IX Item "-mlate-ldp-fusion" فعال‌سازی نسخه گذر ادغام جفت بارگذاری/ذخیره‌سازی در AArch64 که پس از تخصیص ثبات اجرا می‌شود. به‌طور پیش‌فرض در \fB\-O\fR و بالاتر فعال است. .IP \fB\-msve\-vector\-bits=\fR\fIbits\fR 4 .IX Item "-msve-vector-bits=bits" مشخص کردن تعداد بیت‌ها در یک ثبات برداری SVE. این گزینه تنها زمانی تأثیر دارد که SVE فعال باشد. .Sp کامپایلر GCC از دو شیوه تولید کد SVE پشتیبانی می‌کند: خروجی «مستقل از طول بردار» که با هر اندازه‌ای از ثبات برداری کار می‌کند، و خروجی «وابسته به طول بردار» که به 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" هشدار درباره استفاده از قابلیت آزمایشی چندنسخه‌ای بودن تابع (FMV). مشخصات الحاقی زبان C برای Arm مربوط به قابلیت چندنسخه‌ای بودن تابع در مرحله بتا بوده و ممکن است تغییر کند. هرگونه استفاده از 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" فعال‌سازی دستورالعمل‌های افزونه برداری مقیاس‌پذیر (SVE). این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌سازد. .IP \fBlse\fR 4 .IX Item "lse" فعال‌سازی دستورالعمل‌های افزونه سامانه بزرگ (LSE). این گزینه به‌طور پیش‌فرض برای \&\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 را برای معناشناسی اتمیک بارگذاری-اکتساب فراهم کرده و آن را به اسمبلر منتقل می‌کند، که به دستورهای inline 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" فعال‌سازی دستورالعمل‌های تولید اعداد تصادفی در Armv8.5\-a. این گزینه صرفاً برای فعال‌سازی افزونه در سطح اسمبلر است و بر تولید کد تأثیری نمی‌گذارد. .IP \fBmemtag\fR 4 .IX Item "memtag" فعال‌سازی افزونه‌های نشانه‌گذاری حافظه (Memory Tagging Extensions) در 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" دستورهای bitperm مربوط به SVE2 را فعال می‌کند. این کار همچنین دستورهای SVE2 را نیز فعال می‌کند. .IP \fBsve2\-sm4\fR 4 .IX Item "sve2-sm4" دستورهای sm4 مربوط به SVE2 را فعال می‌کند. این کار همچنین دستورهای SVE2 را نیز فعال می‌کند. .IP \fBsve2\-aes\fR 4 .IX Item "sve2-aes" دستورهای aes مربوط به SVE2 را فعال می‌کند. این کار همچنین دستورهای SVE2 را نیز فعال می‌کند. .IP \fBsve2\-sha3\fR 4 .IX Item "sve2-sha3" دستورهای sha3 مربوط به SVE2 را فعال می‌کند. این کار همچنین دستورهای 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 floating\-point را فعال می‌کند. این کار همچنین دستورهای ممیز شناور و 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 را فعال می‌کند. .IP \fBflagm2\fR 4 .IX Item "flagm2" دستورهای تبدیل پرچم FlagM2 را فعال می‌کند. .IP \fBpauth\fR 4 .IX Item "pauth" افزونهٔ Pointer Authentication را فعال می‌کند. .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 نسخهٔ ۲.۱ را فعال می‌کند. این کار همچنین دستورهای SME2 را فعال می‌کند. .IP \fBfcma\fR 4 .IX Item "fcma" افزونه‌های SIMD اعداد مختلط (complex number) را فعال می‌کند. .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" افزونهٔ ضرب\-جمع (multiply accumulate) در fp8 (ممیز شناور ۸ بیتی) را فعال می‌کند. .IP \fBssve\-fp8fma\fR 4 .IX Item "ssve-fp8fma" افزونهٔ ضرب\-جمع (multiply accumulate) در fp8 (ممیز شناور ۸ بیتی) را در حالت جریانی (streaming mode) فعال می‌کند. .IP \fBfp8dot4\fR 4 .IX Item "fp8dot4" افزونهٔ ضرب نقطه‌ای ۴ جهتهٔ fp8 (ممیز شناور ۸ بیتی) به دقت یگانه (single\-precision) را فعال می‌کند. .IP \fBssve\-fp8dot4\fR 4 .IX Item "ssve-fp8dot4" افزونهٔ ضرب نقطه‌ای ۴ جهتهٔ fp8 (ممیز شناور ۸ بیتی) به دقت یگانه در حالت جریانی (streaming mode) را فعال می‌کند. .IP \fBfp8dot2\fR 4 .IX Item "fp8dot2" افزونهٔ ضرب نقطه‌ای ۲ جهتهٔ fp8 (ممیز شناور ۸ بیتی) به دقت نیمه (half\-precision) را فعال می‌کند. .IP \fBssve\-fp8dot2\fR 4 .IX Item "ssve-fp8dot2" افزونهٔ ضرب نقطه‌ای ۲ جهتهٔ fp8 (ممیز شناور ۸ بیتی) به دقت نیمه در حالت جریانی (streaming mode) را فعال می‌کند. .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" افزونهٔ ممیز شناور brain با اندازهٔ ثابت (non\-widening) برای SVE (\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" هزینهٔ پرش‌ها (branches) را تقریباً روی \fInum\fR دستورالعمل «ساده» تنظیم می‌کند. این هزینه صرفاً یک تقریب اکتشافی (heuristic) است و تضمینی نیست که نتایج یکسانی در نگارش‌های مختلف ایجاد کند. .IP \fB\-mcmove\fR 4 .IX Item "-mcmove" تولید انتقال‌های شرطی (conditional moves) را فعال می‌کند. .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 را تغییر می‌دهد؛ همگردانی برنامه‌ای با آفست پشته‌ای متفاوت از کتابخانه‌هایی که با آن‌ها همگردانی شده است، عموماً کار نخواهد کرد. این گزینه می‌تواند در صورتی که بخواهید بررسی کنید آیا آفست پشتهٔ متفاوتی کد بهتری تولید می‌کند یا خیر مفید باشد، اما برای استفادهٔ عملی از یک آفست پشتهٔ متفاوت جهت ساخت برنامه‌های کاربردی، توصیه می‌شود زنجیرهٔ ابزار (toolchain) با گزینهٔ مناسب \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" اگر با ویژگی دیگری مشخص نشده باشد، فرض می‌کند همهٔ فراخوانی‌ها ممکن است فراتر از محدودهٔ آفست دستورالعمل‌های \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 گوناگون بگنجانید؛ و سهولت امکان استفاده از یک فایل شیء (object file) یکتا، بر سربار اندازه و سرعت ناشی از تعویض حالت‌های اضافی احتمالی نسبت به انتخاب یک حالت غالب مشخص‌تر برتری دارد. .IP \fBtruncate\fR 4 .IX Item "truncate" این حالتی است که برای محاسبات ممیز شناور با حالت گرد کردن به سمت صفر (truncating) استفاده می‌شود. این مورد شامل تبدیل از ممیز شناور به عدد صحیح نیز می‌گردد. .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 نوع معماری یا تنظیم دقیق را برای \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بایت (bytes)\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 (ARC Options)\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" تنظیم نوع معماری، نحوهٔ استفاده از ثبات‌ها (registers) و پارامترهای زمان‌بندی دستورالعمل برای \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 floating\-point). .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 و ضرب ۳۲در۱۶ بیتی. .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 بیتی. .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) ۳۲در۱۶ بیتی. .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" این گزینه استفاده از افزونهٔ شرطی قفل بارگذاری/ذخیره را جهت پیاده‌سازی توابع درونی حافظهٔ اتمیک فعال می‌کند. برای هسته‌های 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" فعال‌سازی عملیات بارگذاری/ذخیره دوگانه برای هسته‌های 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 با یک گزینهٔ طراحی ضرب‌کننده. می‌توانید گزینه را با استفاده از یک رشته یا یک مقدار عددی برای \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، کاملاً خط‌لوله‌ای (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 پشتیبانی از SIMD پردازنده ARC HS. .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" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت دوگانه با استفاده از دستورالعمل‌های کمکی دقت دوگانه را فعال می‌کند. افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه و ضرب و جمع ادغام‌شده (fused multiply and add) نیز فعال می‌شوند. این گزینه فقط برای 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" برای فعال‌سازی افزونهٔ پروانه‌ای دوگانهٔ ویتربی (dual Viterbi butterfly) به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \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" برای فعال‌سازی دستورالعمل افزونهٔ شمارندهٔ برچسب زمانی ۶۴ بیتی به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \&\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" فراخوانی‌ها را به عنوان فراخوانی‌های غیرمستقیم ثبات تولید می‌کند و بدین ترتیب دسترسی به کل محدودهٔ آدرس‌دهی ۳۲ بیتی را فراهم می‌سازد. .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 برابر با ۴ است، یا هنگامی که عملیات بارگذاری/ذخیره مضاعف (double 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 references)، از دسترسی‌های معمولی به حافظهٔ دارای حافظه‌نهان (cached) استفاده می‌کند. این مقدار پیش‌فرض است. .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 هدایت می‌شوند ندارد. .IP \fB\-mcase\-vector\-pcrel\fR 4 .IX Item "-mcase-vector-pcrel" برای فعال‌سازی کوتاه‌سازی جدول case، از جدول‌های switch case وابسته به شمارندهٔ برنامه (PC\-relative) استفاده می‌کند. این مقدار پیش‌فرض برای \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 یک گذر ویژه را حفظ کرده است که تلاش می‌کند پس از انجام تخصیص ثبات، کوتاه‌سازی انشعاب، و زمان‌بندی delay slot، فرصت‌های بیشتری برای تولید اجرای شرطی بیابد. این گذر به‌طور کلی، اما نه همیشه، کارایی و اندازهٔ کد را به بهای زمان کامپایل اضافی بهبود می‌بخشد، که به همین دلیل گزینه‌ای برای غیرفعال کردن آن وجود دارد. اگر با مشکل فراتر رفتن دستورهای فراخوانی از محدودهٔ آفست مجازشان به دلیل شرطی شدن آن‌ها مواجه هستید، باید استفاده از \&\fB\-mmedium\-calls\fR را به‌جای آن مد نظر قرار دهید. .IP \fB\-mearly\-cbranchsi\fR 4 .IX Item "-mearly-cbranchsi" استفادهٔ پیش از بارگذاری مجدد (pre\-reload) از الگوی \f(CW\*(C`cbranchsi\*(C'\fR را فعال می‌کند. .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) را فعال می‌کند. این کار می‌تواند مشکل‌ساز باشد زیرا برخی از بهینه‌سازها در ادامه فرض می‌کنند که ذخیره‌سازی‌های نمایه‌شده وجود دارند، در حالی که این‌گونه نیست. .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" بهینه‌سازی اندازه را با توجه به طول دستورها و هم‌ترازی به‌دقت تنظیم می‌کند. مقادیر شناخته‌شده برای \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 ممیز شناور استفاده شود. مقادیر مجاز عبارتند از: \fBsoft\fR، \fBsoftfp\fR و \fBhard\fR. .Sp تعیین \fBsoft\fR باعث می‌شود GCC خروجی حاوی فراخوانی‌های کتابخانه‌ای برای عملیات ممیز شناور تولید کند. \&\fBsoftfp\fR اجازه تولید کد با استفاده از دستورالعمل‌های سخت‌افزاری ممیز شناور را می‌دهد، اما همچنان از قراردادهای فراخوانی soft\-float بهره می‌برد. \&\fBhard\fR امکان تولید دستورالعمل‌های سخت‌افزاری ممیز شناور را فراهم کرده و از قراردادهای فراخوانی ویژه FPU استفاده می‌کند. .Sp پیش‌فرض به پیکربندی مقصد مورد نظر بستگی دارد. توجه داشته باشید که ABIهای hard\-float و soft\-float از نظر پیونددهی با یکدیگر سازگار نیستند؛ شما باید تمام برنامه خود را با یک ABI کامپایل کرده و آن را با مجموعه‌ای سازگار از کتابخانه‌ها پیوند دهید. .IP \fB\-mgeneral\-regs\-only\fR 4 .IX Item "-mgeneral-regs-only" تولید کدی که صرفاً از ثبات‌های عمومی (general\-purpose registers) استفاده می‌کند. این گزینه مانع از استفاده کامپایلر از ثبات‌های ممیز شناور و 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 هنگام پیوند دادن یک تصویر (image) 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 بسیاری از معماری‌ها از افزونه‌ها (extensions) پشتیبانی می‌کنند. این افزونه‌ها را می‌توان با الحاق \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 اعمال شود، اما افزونه‌های اصلی ARMv7\-A Advanced SIMD (Neon) را برای \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، با 16 ثبات با دقت مضاعف (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، با 16 ثبات با دقت مضاعف. افزونهٔ \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، با 32 ثبات با دقت مضاعف. .IP \fB+vfpv3\-d16\-fp16\fR 4 .IX Item "+vfpv3-d16-fp16" دستورالعمل‌های ممیز شناور VFPv3، با 16 ثبات با دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه (half\-precision). .IP \fB+vfpv3\-fp16\fR 4 .IX Item "+vfpv3-fp16" دستورالعمل‌های ممیز شناور VFPv3، با 32 ثبات با دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه. .IP \fB+vfpv4\-d16\fR 4 .IX Item "+vfpv4-d16" دستورالعمل‌های ممیز شناور VFPv4، با 16 ثبات با دقت مضاعف. .IP \fB+vfpv4\fR 4 .IX Item "+vfpv4" دستورالعمل‌های ممیز شناور VFPv4، با 32 ثبات با دقت مضاعف. .IP \fB+neon\-fp16\fR 4 .IX Item "+neon-fp16" دستورالعمل‌های Advanced SIMD (Neon) v1 و ممیز شناور VFPv3، به همراه عملیات تبدیل ممیز شناور با دقت نیمه. .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 با پشتیبانی از مجازی‌سازی. .RS 4 .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور VFPv4، با 16 ثبات با دقت مضاعف. افزونهٔ \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، با 16 ثبات با دقت مضاعف. .IP \fB+vfpv3\fR 4 .IX Item "+vfpv3" دستورالعمل‌های ممیز شناور VFPv3، با 32 ثبات با دقت مضاعف. .IP \fB+vfpv3\-d16\-fp16\fR 4 .IX Item "+vfpv3-d16-fp16" دستورالعمل‌های ممیز شناور VFPv3، با 16 ثبات با دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه. .IP \fB+vfpv3\-fp16\fR 4 .IX Item "+vfpv3-fp16" دستورالعمل‌های ممیز شناور VFPv3، با 32 ثبات با دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه. .IP \fB+vfpv4\-d16\fR 4 .IX Item "+vfpv4-d16" دستورالعمل‌های ممیز شناور VFPv4، با 16 ثبات با دقت مضاعف. .IP \fB+vfpv4\fR 4 .IX Item "+vfpv4" دستورالعمل‌های ممیز شناور VFPv4، با 32 ثبات با دقت مضاعف. .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، به همراه عملیات تبدیل ممیز شناور با دقت نیمه. .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" دستورالعمل‌های رمزنگاری. .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.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 دستورالعمل‌های پردازش داده‌های ممیز شناور با دقت نیمه (half\-precision). این گزینه همچنین دستورالعمل‌های ممیز شناور و 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 (bfloat16). این گزینه همچنین دستورالعمل‌های ممیز شناور و 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 (bfloat16). این گزینه همچنین دستورالعمل‌های ممیز شناور و 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 (bfloat16). این گزینه همچنین دستورالعمل‌های ممیز شناور و 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" دستورالعمل‌های ضرب ماتریسی اعداد صحیح ۸ بیتی (8\-bit Integer Matrix Multiply). این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+bf16\fR 4 .IX Item "+bf16" دستورالعمل‌های ممیز شناور با دقت نیمه Brain (Brain half\-precision floating\-point). این گزینه همچنین دستورالعمل‌های 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\-Profile Vector Extension (MVE). .IP \fB+mve.fp\fR 4 .IX Item "+mve.fp" دستورالعمل‌های اعداد صحیح و ممیز شناور با دقت تکی M\-Profile Vector Extension (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" فعال کردن Custom Datapath Extension (CDE) روی کمک‌پردازنده‌های انتخاب‌شده بر اساس شماره‌های داده‌شده در گزینه‌ها در بازهٔ ۰ تا ۷. .IP \fB+pacbti\fR 4 .IX Item "+pacbti" فعال کردن افزونهٔ Pointer Authentication and Branch Target Identification. .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" فعال کردن Custom Datapath Extension (CDE) روی کمک‌پردازنده‌های انتخاب‌شده بر اساس شماره‌های داده‌شده در گزینه‌ها در بازهٔ ۰ تا ۷. .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 دستورالعمل‌های Cyclic Redundancy Check (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 باید کارایی کد را برای آن تنظیم کند. برای برخی از پیاده‌سازی‌های 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 تغییر کند. .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 بسیاری از پردازنده‌های پشتیبانی‌شده، افزونه‌های اختیاری معماری را پیاده‌سازی می‌کنند. در چنین مواردی، افزونه‌های معماری معمولاً به‌طور پیش‌فرض فعال هستند. اگر پیاده‌سازی‌هایی وجود داشته باشند که فاقد افزونه هستند، می‌توان از نحو افزونه‌ها برای غیرفعال کردن مواردی که تعبیه نشده‌اند استفاده کرد. برای دستورالعمل‌های ممیز شناور و Advanced SIMD (Neon)، تنظیمات گزینه‌های \&\fB\-mfloat\-abi\fR و \fB\-mfpu\fR نیز باید در نظر گرفته شوند: دستورالعمل‌های ممیز شناور و Advanced SIMD تنها در صورتی استفاده خواهند شد که \&\fB\-mfloat\-abi\fR روی \fBsoft\fR تنظیم نشده باشد؛ و هر تنظیمی از \&\fB\-mfpu\fR به‌جز \fBauto\fR، بر دستورالعمل‌های افزونهٔ ممیز شناور و SIMD موجود اولویت خواهد داشت و آن‌ها را بازنویسی می‌کند. .Sp برای نمونه، \fBcortex\-a9\fR در سه پیکربندی اصلی یافت می‌شود: فقط عدد صحیح، تنها با یک واحد ممیز شناور، یا با ممیز شناور و 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\-Profile Vector Extension (MVE) را روی \&\fBcortex\-m52\fR، \fBcortex\-m55\fR و \fBcortex\-m85\fR غیرفعال می‌کند. .IP \fB+nopacbti\fR 4 .IX Item "+nopacbti" افزونهٔ Pointer Authentication and Branch Target Identification را روی \fBcortex\-m52\fR و \fBcortex\-m85\fR غیرفعال می‌کند. .IP \fB+nomve\fR 4 .IX Item "+nomve" دستورالعمل‌های عدد صحیح و ممیز شناور با دقت تکی M\-Profile Vector Extension (MVE) را روی \fBcortex\-m52\fR، \fBcortex\-m55\fR و \&\fBcortex\-m85\fR غیرفعال می‌کند. .IP \fB+nomve.fp\fR 4 .IX Item "+nomve.fp" دستورالعمل‌های ممیز شناور با دقت تکی M\-Profile Vector Extension (MVE) را روی \fBcortex\-m52\fR، \fBcortex\-m55\fR و \fBcortex\-m85\fR غیرفعال می‌کند. .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4 .IX Item "+cdecp0, +cdecp1, ... , +cdecp7" افزونهٔ Custom Datapath Extension (CDE) را روی کمک‌پردازنده‌های انتخاب‌شده بر پایهٔ شماره‌های داده‌شده در گزینه‌ها در بازهٔ 0 تا 7 روی \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 با 16 ثبات دقت مضاعف استفاده می‌کند. این مقصد از گزینه‌های افزونهٔ زیر پشتیبانی می‌کند: \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 باعث می‌شود کامپایلر پردازندهٔ رایانهٔ ساخت را به‌طور خودکار شناسایی کند. در حال حاضر، این قابلیت تنها روی GNU/Linux پشتیبانی می‌شود و همهٔ معماری‌ها نیز شناسایی نمی‌شوند. در صورتی که شناسایی خودکار ناموفق باشد، این گزینه هیچ اثری ندارد. .Sp گزینهٔ \&\fB\-mcpu=unset\fR باعث می‌شود کامپایلر هرگونه گزینهٔ \&\fB\-mcpu=...\fR را که پیش‌تر در خط فرمان ظاهر شده باشد نادیده بگیرد و به‌گونه‌ای عمل کند که گویی این گزینه هرگز داده نشده است. این ویژگی برای جلوگیری از هشدارهای مربوط به تداخل گزینه‌های پردازنده و معماری، در حالتی که این دو مشخصات متفاوتی برای معماری ایجاد می‌کنند، مفید است. .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 را در سطح تابع با استفاده از ویژگی‌های تابع یا عملگرهای عمل‌یاخته (pragmas) از نوع \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) به مضربی از تعداد بیت‌های تعیین‌شده توسط این گزینه رو به بالا گرد می‌شود. مقادیر مجاز عبارتند از 8، 32 و 64. مقدار پیش‌فرض برای زنجیره‌ابزارهای گوناگون متفاوت است. برای زنجیره‌ابزار با مقصد COFF مقدار پیش‌فرض 8 است. مقدار 64 تنها زمانی مجاز است که ABI زیرین از آن پشتیبانی کند. .Sp مشخص کردن یک عدد بزرگ‌تر می‌تواند کدی سریع‌تر و کارآمدتر تولید کند، اما ممکن است اندازهٔ برنامه را نیز افزایش دهد. مقادیر مختلف احتمالاً ناسازگار هستند. اگر اطلاعات با استفاده از ساختارها یا اجتماع‌ها مبادله شود، کدی که با یک مقدار کامپایل شده است لزوماً نمی‌تواند با کد یا کتابخانه‌های کامپایل‌شده با مقداری دیگر کار کند. .Sp این گزینه منسوخ شده است. .IP \fB\-mabort\-on\-noreturn\fR 4 .IX Item "-mabort-on-noreturn" در انتهای یک تابع \&\f(CW\*(C`noreturn\*(C'\fR، یک فراخوانی به تابع \f(CW\*(C`abort\*(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 به کامپایلر می‌گوید که فراخوانی توابع را ابتدا با بارگذاری نشانی تابع درون یک ثبات و سپس انجام فراخوانی زیرروال روی این ثبات انجام دهد. این سوییچ زمانی مورد نیاز است که تابع مقصد خارج از محدودهٔ آدرس‌دهی 64 مگابایتی نسخهٔ مبتنی بر آفست دستور فراخوانی زیرروال قرار داشته باشد. .Sp حتی اگر این سوییچ فعال باشد، تمام فراخوانی‌های تابع به فراخوانی دور (long call) تبدیل نمی‌شوند. روش ابتکاری (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 باشد یا بررسی پشته فعال باشد، مقدار پیش‌فرض \&\fBR9\fR است؛ در غیر این صورت مقدار پیش‌فرض \fBR10\fR خواهد بود. .IP \fB\-mpic\-data\-is\-text\-relative\fR 4 .IX Item "-mpic-data-is-text-relative" فرض می‌کند که جابه‌جایی میان بخش‌های text و data در زمان پیوند ایستا ثابت است. این امر اجازه می‌دهد تا از عملیات‌های آدرس‌دهی وابسته به PC برای دسترسی به داده‌هایی که مشخص است در بخش data قرار دارند، استفاده شود. برای مقصدهای غیر VxWorks RTP، این گزینه به طور پیش‌فرض فعال است. هنگام غیرفعال شدن در چنین مقصدهایی، گزینهٔ \fB\-msingle\-pic\-base\fR به طور پیش‌فرض فعال خواهد شد. .IP \fB\-mpoke\-function\-name\fR 4 .IX Item "-mpoke-function-name" نام هر تابع را مستقیماً پیش از پیش‌درآمد تابع، درون بخش 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 را برای هر تابع با استفاده از ویژگی‌های تابع یا عملگرهای عمل‌گری (pragmas) با نام‌های \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 تولید می‌کند. (تابع برگ تابعی است که هیچ تابع دیگری را فراخوانی نمی‌کند.) پیش‌فرض \fB\-mno\-tpcs\-frame\fR است. .IP \fB\-mtpcs\-leaf\-frame\fR 4 .IX Item "-mtpcs-leaf-frame" برای تمام توابع برگ، یک چارچوب پشته سازگار با استاندارد فراخوانی رویهٔ 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 pointer) را تعیین می‌کند. مدل \&\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" لهجه (dialect) مورد استفاده برای دسترسی به حافظه محلی نخ را تعیین می‌کند. دو \fIdialect\fR پشتیبانی می‌شوند: \fBgnu\fR و \fBgnu2\fR. لهجهٔ \fBgnu\fR طرح اصلی GNU را برای پشتیبانی از مدل‌های TLS پویای محلی و سراسری انتخاب می‌کند. لهجهٔ \fBgnu2\fR طرح توصیف‌کننده GNU را انتخاب می‌کند که کارایی بهتری برای کتابخانه‌های اشتراکی فراهم می‌آورد. طرح توصیف‌کننده GNU با طرح اصلی سازگار است، اما به پشتیبانی جدید اسمبلر، پیونددهنده و کتابخانه نیاز دارد. مدل‌های TLS اجرایی اولیه و محلی تحت تأثیر این گزینه قرار نمی‌گیرند و همواره از طرح اصلی استفاده می‌کنند. .IP \fB\-mword\-relocations\fR 4 .IX Item "-mword-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 کاهش اثر (یا عدم کاهش اثر) برای یک نقص سخت‌افزاری در 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" فرض می‌کند که بارگذاری داده‌ها از حافظه فلش کندتر از واکشی دستورالعمل است. بنابراین، بارگذاری مقادیر تحت‌اللفظی برای کارایی بهتر به حداقل می‌رسد. این گزینه تنها هنگام کامپایل برای ARMv7 M\-profile پشتیبانی می‌شود و به طور پیش‌فرض خاموش است. این گزینه با \fB\-mword\-relocations\fR تداخل دارد. .IP \fB\-masm\-syntax\-unified\fR 4 .IX Item "-masm-syntax-unified" فرض می‌کند که اسمبلر درون‌خطی از نحو یکپارچهٔ اسمبلی (unified asm syntax) استفاده می‌کند. پیش‌فرض در حال حاضر غیرفعال است که به معنای نحو تفکیک‌شده (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" اطلاعات تنظیم پردازنده را به صورت یادداشت (comment) در فایل اسمبلی چاپ می‌کند. این گزینه صرفاً برای آزمون پس‌رفت کامپایلر استفاده می‌شود و برای کاربرد معمول در کامپایل کد در نظر گرفته نشده است. این گزینه به طور پیش‌فرض غیرفعال است. .IP \fB\-mverbose\-cost\-dump\fR 4 .IX Item "-mverbose-cost-dump" تخلیهٔ پرحجم مدل هزینه را در فایل‌های تخلیهٔ اشکال‌زدایی فعال می‌کند. این گزینه برای استفاده در اشکال‌زدایی کامپایلر ارائه شده است..IP \fB\-mpure\-code\fR 4 .IX Item "-mpure-code" اجازه ندهید داده‌های ثابت در بخش‌های کد قرار گیرند. علاوه‌بر این، هنگام کامپایل برای قالب شیء ELF، به تمامی بخش‌های text ویژگی بخش ویژهٔ پردازنده ELF یعنی \f(CW\*(C`SHF_ARM_PURECODE\*(C'\fR را اختصاص دهید. این گزینه تنها هنگام تولید کد 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 است و نباید در کدهای فضای کاربری استفاده شود. .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 هنگامی که امضای نشانی بازگشت فعال است، توابع برگ را حتی در صورتی که نشانی بازگشت را در حافظه ننویسند، امضا می‌کند. +\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" دستگاه‌های «کلاسیک» با حداکثر ۸ کیبی‌بایت حافظهٔ برنامه. \&\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" دستگاه‌های «کلاسیک» با حداکثر ۸ کیبی‌بایت حافظهٔ برنامه و دارای دستور \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" دستگاه‌های «کلاسیک» با ۱۶ کیبی‌بایت تا ۶۴ کیبی‌بایت حافظهٔ برنامه. \&\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" دستگاه‌های «کلاسیک» با ۱۲۸ کیبی‌بایت حافظهٔ برنامه. \&\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" دستگاه‌های «کلاسیک» با ۱۶ کیبی‌بایت تا ۶۴ کیبی‌بایت حافظهٔ برنامه و دارای دستور \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" دستگاه‌های «بهبودیافته» با حداکثر ۸ کیبی‌بایت حافظهٔ برنامه. \&\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" دستگاه‌های «بهبودیافته» با ۱۶ کیبی‌بایت تا ۶۴ کیبی‌بایت حافظهٔ برنامه. \&\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" دستگاه‌های «بهبودیافته» با ۱۲۸ کیبی‌بایت حافظهٔ برنامه. \&\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" دستگاه‌های «بهبودیافته» با شمارندهٔ برنامه (PC) ۳ بایتی، یعنی با بیش از ۱۲۸ کیبی‌بایت حافظهٔ برنامه. \&\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» با بیش از ۸ کیبی‌بایت و حداکثر ۶۴ کیبی‌بایت حافظهٔ برنامه. \&\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» با حداکثر ۶۴ کیبی‌بایت مجموع حافظهٔ برنامه و 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» با بیش از ۶۴ کیبی‌بایت و حداکثر ۱۲۸ کیبی‌بایت حافظهٔ برنامه. \&\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» با بیش از ۶۴ کیبی‌بایت و حداکثر ۱۲۸ کیبی‌بایت حافظهٔ برنامه و بیش از ۶۴ کیبی‌بایت 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» با بیش از ۱۲۸ کیبی‌بایت حافظهٔ برنامه. \&\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» با بیش از ۱۲۸ کیبی‌بایت حافظهٔ برنامه و بیش از ۶۴ کیبی‌بایت 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» تنها با ۱۶ ثبات همه‌منظوره و ۵۱۲ بایت تا ۴ کیبی‌بایت حافظهٔ برنامه. \&\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" فرض می‌کند که تمام داده‌ها در حافظهٔ ایستا (static storage) می‌توانند توسط دستورهای 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جدول بردار فشرده\fR (compact vector table) استفاده می‌کند. برخی از دستگاه‌ها از CVT تنها با چهار ورودی پشتیبانی می‌کنند: 0=Reset، 1=NMI، 2=Prio1 IRQ و 3=Prio0 IRQs. این گزینه کد راه‌اندازی (startup code) را به‌جای فایل معمول \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 (\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" روال‌های سرویس وقفه (ISRها) می‌توانند از شبه‌دستور \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) قرار می‌دهد تا نیازی به فراخوانی (call) نباشد. با تنظیم این گزینه، کاربر تعهد می‌دهد که \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 اگر به stubهای پیونددهنده نیاز باشد، قابلیت Relaxing باید فعال شود؛ بخش مربوط به \f(CW\*(C`EIND\*(C'\fR و linker stubها را در زیر ببینید. .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 یا در حافظهٔ برنامه قرار می‌دهد. برای بیشتر دستگاه‌ها، انتخابی وجود ندارد و این گزینه بیشتر شبیه به یک تأییدیه (assertion) عمل می‌کند. .Sp از نسخهٔ ۱۴ و برای دستگاه‌های AVR64* و AVR128*، بخش \f(CW\*(C`.rodata\*(C'\fR به‌طور پیش‌فرض در حافظهٔ فلش جای‌گذاری می‌شود، به شرطی که پشتیبانی لازم در GNU Binutils (PR31124 (\f(CW\*(C`https://sourceware.org/PR31124\*(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" اجازه می‌دهد برای انواع ممیز ثابت کسری (fractional fixed\-point)، به‌جای گرد کردن به‌سمت صفر از برش و قطع رقم (truncation) استفاده شود. .IP \fB\-nodevicelib\fR 4 .IX Item "-nodevicelib" با کتابخانهٔ اختصاصی دستگاه در AVR\-LibC، یعنی \f(CW\*(C`lib\fR\f(CImcu\fR\f(CW.a\*(C'\fR پیوند برقرار نمی‌کند. .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 را به خط فرمان راه‌انداز کامپایلر (compiler driver) اضافه نمی‌کند. کاربر مسئولیت تأمین گزینه‌های مناسب خط فرمان برای زیرفرآیندها مانند کامپایلر اصلی، اسمبلر و پیونددهنده را بر عهده می‌گیرد. این بدان معناست که کاربر باید فایل مشخصات دستگاه خصوصی خود را با استفاده از \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 را در بر داشت و آن پوشه حاوی یک فایل specs به نام \&\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" در مورد تبدیل‌های بین فضاهای آدرس (address spaces) در شرایطی که فضای آدرس حاصل در فضای آدرس ورودی جای نگرفته باشد، هشدار می‌دهد. .IP \fB\-Wmisspelled\-isr\fR 4 .IX Item "-Wmisspelled-isr" اگر نام ISR به‌صورت نادرست نوشته شده باشد (یعنی بدون پیشوند _\|_vector)، هشدار می‌دهد. به‌طور پیش‌فرض فعال است. .PP گزینه‌های بهینه‌سازی AVR (AVR Optimization Options) .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) تابع تخصیص داده و آزاد می‌کند. بدون این گزینه، آرگومان‌های خروجی پیش از فراخوانی تابع در پشته قرار گرفته (push شده) و پس از آن برداشته (pop) می‌شوند. همچنین گزینهٔ بهینه‌سازی \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" مقدمه و موخره توابع (prologues/epilogues) به‌صورت فراخوانی زیربرنامه‌های مناسب بسط داده می‌شوند. اندازه کد کوچکتری حاصل می‌شود. .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 بهینه‌سازی می‌کند. مقدار پیش‌فرض برای بهینه‌سازی‌های \fB\-Og\fR و \fB\-O1\fR برابر با \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=1\*(C'\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) را ادغام کرده و دستورهای چندبایتی را به عملیات‌های ۸ بیتی تقسیم کند. مقدار پیش‌فرض برای بهینه‌سازی \fB\-O1\fR برابر با \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=3\*(C'\fR و برای بهینه‌سازی‌های بالاتر \f(CW\*(C`\fR\f(CIlevel\fR\f(CW=23\*(C'\fR است. مقادیر معتبر برای \fIlevel\fR در محدوده \f(CW0\fR ... \f(CW23\fR هستند که مقداری در مبنای مختلط 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 استفاده شود که در این صورت با استفاده از دستورهای اضافی شبیه‌سازی خواهد شد. برای نمونه، بارگذاری یک مقدار در ثبات \fIRn\fR با آدرس‌دهی \f(CW\*(C`X+const\*(C'\fR و با مقدار ثابت غیرمنفی کوچک \f(CW\*(C`const < 64\*(C'\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) نشان داده می‌شود تا پرش‌ها و فراخوانی‌های غیرمستقیم بتوانند به هر نشانی کدی در محدوده ۶۴ کیلوکلمه (Ki words) هدف‌گیری شوند. .PP برای تسهیل پرش‌های غیرمستقیم در دستگاه‌هایی با بیش از ۱۲۸ کیبی‌بایت فضای حافظه برنامه، یک ثبات تابع خاص (SFR) به نام \&\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`EIND\*(C'\fR را مستقیماً بخواند تا یک فراخوانی/پرش غیرمستقیم را با استفاده از دستور \f(CW\*(C`RET\*(C'\fR شبیه‌سازی کند. .IP * 4 کامپایلر فرض می‌کند که \f(CW\*(C`EIND\*(C'\fR هرگز در طول کد راه‌اندازی (startup) یا در طول اجرای برنامه تغییر نمی‌کند. به‌ویژه، \f(CW\*(C`EIND\*(C'\fR در مقدمه/موخره توابع یا روتین‌های مدیریت وقفه (ISR) ذخیره/بازیابی نمی‌شود. .IP * 4 برای فراخوانی‌های غیرمستقیم توابع و goto محاسباتی، پیونددهنده (linker) قطعه‌کدهای واسط (\fIstubs\fR) تولید می‌کند. این stubها سکوهای پرشی هستند که گاهی \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 کار کند، باید از یک اسکریپت پیونددهنده سفارشی استفاده شود تا بخش‌هایی (sections) که نام آن‌ها با \f(CW\*(C`.trampolines\*(C'\fR آغاز می‌شود، در قطعه‌ای (segment) قرار گیرند که \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 قطعه‌کدهای واسط (stubها) به‌صورت خودکار توسط پیونددهنده تولید می‌شوند اگر دو شرط زیر برقرار باشد: .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 محاسباتی (Computed 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 می‌تواند در اسکریپت پیونددهنده تعریف شود. .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,named address space\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 آن 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جدول بردار فشرده (compact vector table)\fR کامپایل شده است. .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) به دلیل یک نقص سخت‌افزاری (erratum) نباید دستورالعمل‌های ۳۲ بیتی را رد کنند. دستورالعمل‌های رد کردن عبارت‌اند از: \&\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 آدرس‌دهی می‌شوند، استفاده کنند. این آفست به معماری دستگاه بستگی دارد و برای به دست آوردن آدرس I/O متناظر، باید از آدرس RAM کم شود. .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__" هنگامی که کد برای یک معماری پایه (core architecture) کامپایل می‌شود، این ماکرو تعریف‌نشده است. .Sp هنگامی که کد برای یک دستگاه کامپایل می‌شود، در صورتی که بخش‌های \f(CW\*(C`.rodata\*(C'\fR برای داده‌های فقط‌خواندنی در RAM قرار گیرند، این ماکرو برابر با ۱؛ و در غیر این صورت برابر با ۰ تعریف می‌شود. .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`long double\*(C'\fR به جای \f(CW\*(C`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 گزینه‌های زیر به صورت داخلی توسط کامپایلر و برای برقراری ارتباط بین پرونده‌های specs دستگاه و خود کامپایلر استفاده می‌شوند. نیازی نیست این گزینه‌ها را به صورت دستی تنظیم کنید؛ به ویژه اینکه این‌ها گزینه‌های بهینه‌سازی نیستند. استفاده از این گزینه‌ها به روش نادرست ممکن است به تولید کدهای غیربهینه یا نادرست منجر شود. این گزینه‌ها برای کامل بودن مستندات و به منظور دستیابی به درک بهتری از پرونده‌های 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" .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 بازبینی سیلیکونی (silicon revision) پردازنده هدف Blackfin را مشخص می‌کند. تمام راه‌حل‌های ترمیمی موجود برای نسخه سیلیکونی هدف فعال می‌شوند. اگر \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" اشاره‌گر چارچوب (frame pointer) را در توابع برگ (leaf functions) در یک ثبات نگه نمی‌دارد. این کار از دستورالعمل‌های ذخیره، راه‌اندازی و بازیابی اشاره‌گرهای چارچوب جلوگیری کرده و یک ثبات اضافی در توابع برگ آزاد می‌سازد. .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" در صورت فعال بودن، کامپایلر مجاز است از این نکته که تمام برنامه در 64k پایین حافظه جای می‌گیرد برای بهینه‌سازی بهره ببرد. .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) پشتیبانی می‌کند. این کار امکان اجرای درجا (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" کدی تولید می‌کند که از کتابخانه‌های مشترک از طریق روش شناسه کتابخانه پشتیبانی می‌کند، اما فرض می‌کند که این کتابخانه یا فایل اجرایی با هیچ کتابخانه مشترک مبتنی بر شناسه دیگری پیوند نخواهد خورد. این امر به کامپایلر امکان می‌دهد از کدهای سریع‌تری برای پرش‌ها و فراخوانی‌ها استفاده کند. .IP \fB\-mno\-leaf\-id\-shared\-library\fR 4 .IX Item "-mno-leaf-id-shared-library" عدم پیوند کد در حال کامپایل با دیگر کتابخانه‌های مشترک مبتنی بر شناسه را فرض نمی‌کند. کدهای کندتری برای دستورالعمل‌های پرش و فراخوانی تولید می‌شود. .IP \fB\-mshared\-library\-id=n\fR 4 .IX Item "-mshared-library-id=n" شماره شناسایی کتابخانه مشترک مبتنی بر شناسه‌ای را که در حال کامپایل است مشخص می‌کند. تعیین مقدار 0 کد فشرده‌تری ایجاد می‌کند؛ تعیین مقادیر دیگر تخصیص اجباری آن شماره به کتابخانه فعلی را موجب می‌شود اما از نظر فضا یا زمان بهینه‌تر از حذف این گزینه نیست. .IP \fB\-msep\-data\fR 4 .IX Item "-msep-data" کدی تولید می‌کند که امکان قرارگیری قطعه داده (data segment) در ناحیه‌ای متفاوت از حافظه نسبت به قطعه کد (text segment) را فراهم می‌سازد. این امر با حذف جابه‌جایی‌ها نسبت به بخش متن، امکان اجرای درجا را در محیط‌های بدون مدیریت حافظه مجازی مهیا می‌کند. .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" هنگام استفاده از مدل برنامه‌نویسی یک\-برنامه\-برای\-هر\-هسته (one\-application\-per\-core)، یک برنامه مستقل برای 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 تعریف می‌شود. لودر باید پیش از بارگذاری برنامه، SDRAM را مقداردهی اولیه کند. .IP \fB\-micplb\fR 4 .IX Item "-micplb" فرض کن که ICPLBها در زمان اجرا فعال هستند. این بر راهکارهای دور زدن برخی ناهنجاری‌ها اثر می‌گذارد. برای مقصدهای 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" همه موارد قابل اعمال درباره کد تولیدشده را، به جز ABI و مجموعه دستورالعمل‌های در دسترس، برای \fIarchitecture\-type\fR بهینه‌سازی کن. گزینه‌های انتخابی برای \fIarchitecture\-type\fR همانند گزینه‌های \&\fB\-march=\fR\fIarchitecture\-type\fR هستند. .IP \fB\-mmax\-stack\-frame=\fR\fIn\fR 4 .IX Item "-mmax-stack-frame=n" هنگامی که فریم پشته یک تابع از \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\-code) حاصل از دستورالعمل پیشین استفاده نکن؛ همواره پیش از استفاده از کدهای وضعیت، دستورالعمل‌های مقایسه و آزمون را صادر کن. .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\-align در بالا، این گزینه‌ها ترتیب می‌دهند که فریم پشته، داده‌های قابل نوشتن و ثابت‌ها همگی هم‌ترازی ۳۲ بیتی، ۱۶ بیتی یا ۸ بیتی داشته باشند. پیش‌فرض هم‌ترازی ۳۲ بیتی است. .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، پیش‌درآمد و پس‌درآمد عادی تابع که فریم پشته را برپا می‌کنند حذف می‌شوند و هیچ دستورالعمل بازگشت یا توالی بازگشتی در کد تولید نمی‌شود. از این گزینه تنها در کنار بررسی دیداریِ کد کامپایل‌شده استفاده کنید: هنگامی که ثبات‌های محافظت‌شده در فراخوانی (call\-saved) باید ذخیره شوند یا فضای ذخیره‌سازی برای متغیرهای محلی باید تخصیص یابد، هیچ هشدار یا خطایی صادر نمی‌شود. .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 روشن (on) و در غیر این صورت خاموش (off) است. .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" دستورالعمل‌های اعتماد (trust) مربوط به 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 Mode)، تنها با استفاده از ثبات‌های شماره 0\-7 جهت امکان استفاده از دستورالعمل‌های 16 بیتی. این گزینه برای 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 تولید کد با استفاده از ثبات‌های بالا (high registers) با شماره‌های 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 addresses). .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 تولید کد برای زمان‌اجرای (runtime) کامپایلر C\-SKY به جای libgcc. این گزینه به‌طور پیش‌فرض خاموش است..IP \fB\-mbranch\-cost=\fR\fIn\fR 4 .IX Item "-mbranch-cost=n" هزینه پرش‌ها را تقریباً معادل با \f(CW\*(C`n\*(C'\fR دستورالعمل تنظیم می‌کند. مقدار پیش‌فرض ۱ است. .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 مشخص‌شده تنظیم می‌کند، فایل آغازین را برای CRT \fIlibrary\fR انتخاب نموده و با CRT \fIlibrary\fR پیوند می‌زند. نام‌های شناخته‌شده برای کتابخانه 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. اگر این گزینه مشخص نشود، کتابخانه واردات پیش‌فرض MinGW یعنی \&\f(CW\*(C`msvcrt\*(C'\fR برای پیوند دادن استفاده می‌شود و هیچ تنظیم دیگری برای پیش‌پردازنده انجام نخواهد شد. کتابخانه واردات MinGW با نام \f(CW\*(C`msvcrt\*(C'\fR صرفاً یک پیوند نمادین (یا رونوشتی) از یک کتابخانه واردات CRT دیگر MinGW است که هنگام کامپایل MinGW انتخاب شده است. کتابخانه واردات MinGW با نام \f(CW\*(C`msvcrt\-os\*(C'\fR برای کتابخانه CRT DLL سیستم ویندوز یعنی \f(CW\*(C`msvcrt.dll\*(C'\fR است و در بیشتر موارد کتابخانه واردات پیش‌فرض 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 در دسترس است. مشخص می‌کند که پشتیبانی از ریسه‌های مختص 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 در دسترس است. مشخص می‌کند که با هدایت پیونددهنده به تنظیم مناسب نوع زیرسیستم سرایند PE، یک برنامه گرافیکی (GUI) تولید شود. .IP \fB\-fno\-set\-stack\-executable\fR 4 .IX Item "-fno-set-stack-executable" این گزینه برای مقصدهای MinGW در دسترس است. مشخص می‌کند که پرچم قابل اجرا بودن (executable flag) برای پشته‌ای که توسط توابع تو در تو استفاده می‌شود، تنظیم نگردد. این ویژگی برای باینری‌هایی که در حالت هسته (kernel mode) ویندوز اجرا می‌شوند ضروری است، زیرا در آنجا رابط User32 API که برای تنظیم امتیازات اجرایی به کار می‌رود در دسترس نیست. .IP \fB\-fwritable\-relocated\-rdata\fR 4 .IX Item "-fwritable-relocated-rdata" این گزینه برای مقصدهای MinGW و Cygwin در دسترس است. مشخص می‌کند که داده‌های بازنشانی‌شده (relocated\-data) در بخش فقط‌خواندنی، درون بخش \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 در دسترس است. مشخص می‌کند که هنگام تولید کد، از افزونه گنو برای ساختار پرونده PE که ترازسازی صحیح متغیرهای COMMON را ممکن می‌سازد استفاده شود. اگر GCC تشخیص دهد که اسمبلر مقصد یافت‌شده در حین پیکربندی از این قابلیت پشتیبانی می‌کند، این گزینه به‌طور پیش‌فرض فعال است. .PP برای گزینه‌های استاندارد، بخش \fBx86 Options\fR را نیز ببینید. .PP \fIگزینه‌های Darwin\fR .IX Subsection "Darwin Options" .PP این گزینه‌ها برای تمامی معماری‌هایی که سیستم‌عامل Darwin را اجرا می‌کنند تعریف شده‌اند. .PP نسخه FSF GCC روی Darwin پرونده‌های شیء چندمعماری («fat») تولید نمی‌کند؛ بلکه تنها یک پروندهٔ شیء برای معماری منحصربه‌فردی که GCC برای هدف قرار دادن آن ساخته شده تولید می‌نماید. نسخه GCC متعلق به Apple روی 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" پوشه فریم‌ورک \fIdir\fR را به ابتدای فهرست پوشه‌های جستجو برای پرونده‌های سرایند اضافه می‌کند. این پوشه‌ها با پوشه‌های تعیین‌شده توسط گزینه‌های \fB\-I\fR درهم‌آمیخته شده و به ترتیب از چپ به راست پیمایش می‌شوند. .Sp یک پوشه فریم‌ورک، پوشه‌ای حاوی فریم‌ورک‌ها است. یک فریم‌ورک پوشه‌ای است با پسوند \fI.framework\fR که مستقیماً شامل پوشه‌های \fIHeaders\fR و/یا \&\fIPrivateHeaders\fR می‌باشد. نام یک فریم‌ورک برابر است با نام این پوشه بدون پسوند \fI.framework\fR. سرایندهای مرتبط با فریم‌ورک در یکی از این دو پوشه قرار دارند، که در این میان ابتدا پوشهٔ \&\fIHeaders\fR جستجو می‌شود. یک زیرفریم‌ورک (subframework) پوشه فریم‌ورکی است که درون پوشهٔ \fIFrameworks\fR یک فریم‌ورک قرار گرفته باشد. گنجاندن (#include) سرایندهای زیرفریم‌ورک فقط می‌تواند درون سرایند فریم‌ورکی رخ دهد که حاوی آن زیرفریم‌ورک است، یا در سرایند یک زیرفریم‌ورک هم‌ردیف (sibling). دو زیرفریم‌ورک در صورتی هم‌ردیف تلقی می‌شوند که درون یک فریم‌ورک یکسان قرار داشته باشند. یک زیرفریم‌ورک نباید همنام با یک فریم‌ورک باشد؛ در صورت نقض این مورد هشداری صادر می‌شود. در حال حاضر یک زیرفریم‌ورک نمی‌تواند خود شامل زیرفریم‌ورک‌های دیگری باشد؛ در آینده ممکن است این سازوکار برای پشتیبانی از این امکان ارتقا یابد. فریم‌ورک‌های استاندارد را می‌توان در پوشه‌های \fI/System/Library/Frameworks\fR و \&\fI/Library/Frameworks\fR یافت. یک نمونه include به شکل \&\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 برقرار شود. به‌طور پیش‌فرض، هنگام کامپایل برای Darwin/PowerPC مقدار \f(CWsizeof(bool)\fR برابر \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 کدی مناسب برای توسعه سریع و چابک تولید می‌کند، مانند فراهم آوردن امکان بارگذاری پویای فایل‌های \fI.o\fR توسط GDB در برنامه‌هایی که از قبل در حال اجرا هستند. گزینه‌های \fB\-findirect\-data\fR و \fB\-ffix\-and\-continue\fR برای سازگاری با نسخه‌های پیشین ارائه شده‌اند. .IP \fB\-all_load\fR 4 .IX Item "-all_load" تمام اعضای کتابخانه‌های آرشیو ایستا (static archive) را بارگذاری می‌کند. برای اطلاعات بیشتر به کتابچه راهنمای \fBld\fR\|(1) مراجعه کنید. .IP \fB\-arch_errors_fatal\fR 4 .IX Item "-arch_errors_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 زیرنوع \fBALL\fR داشته باشد، به جای زیرنوعی که توسط گزینه \fB\-mcpu\fR یا \fB\-march\fR کنترل می‌شود. .IP \fB\-nodefaultrpaths\fR 4 .IX Item "-nodefaultrpaths" مسیرهای اجرای پیش‌فرض (run paths) برای دایرکتوری‌های کتابخانه کامپایلر را به فایل‌های اجرایی، ماژول‌ها یا کتابخانه‌های پویا اضافه نمی‌کند. در macOS 10.5 و جدیدتر، runpath تعبیه‌شده به‌طور پیش‌فرض اضافه می‌شود مگر اینکه کاربر \&\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" این گزینه کنترل می‌کند که چه تله‌های (traps) مرتبط با ممیز شناور فعال باشند. کامپایلرهای دیگر 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" دقت برنامه (Program precision). این گزینه پیش‌فرض است و به این معنی است که گردانندهٔ تله فقط می‌تواند تشخیص دهد کدام برنامه باعث بروز استثنای ممیز شناور شده است. .IP \fBf\fR 4 .IX Item "f" دقت تابع (Function precision). گردانندهٔ تله می‌تواند تابعی را که باعث بروز استثنای ممیز شناور شده است تعیین کند. .IP \fBi\fR 4 .IX Item "i" دقت دستورالعمل (Instruction precision). گردانندهٔ تله می‌تواند دستورالعمل دقیقی را که باعث بروز استثنای ممیز شناور شده است تعیین کند. .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 در دیباچهٔ تابع (prologue) در فایل اسمبلی تولیدشده است. .IP \fB\-mbuild\-constants\fR 4 .IX Item "-mbuild-constants" به طور معمول GCC یک مقدار ثابت عدد صحیح ۳۲ یا ۶۴ بیتی را بررسی می‌کند تا ببیند آیا می‌تواند آن را در دو یا سه دستورالعمل از ثابت‌های کوچک‌تر بسازد یا خیر. اگر نتواند، ثابت را به عنوان یک لیترال (literal) خروجی داده و کدی برای بارگذاری آن از بخش داده (data segment) در زمان اجرا تولید می‌کند. .Sp از این گزینه برای ملزم ساختن GCC به ساختن \fIتمام\fR ثابت‌های عدد صحیح با استفاده از کد استفاده کنید، حتی اگر به دستورالعمل‌های بیشتری نیاز داشته باشد (حداکثر شش دستورالعمل). .Sp شما معمولاً از این گزینه برای ساخت بارگذار پویای کتابخانهٔ مشترک (dynamic loader) استفاده می‌کنید. این بارگذار که خود یک کتابخانهٔ مشترک است، باید قبل از اینکه بتواند متغیرها و مقادیر ثابت را در بخش داده‌های خود پیدا کند، آدرس‌های خود را در حافظه بازنشانی (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 استفاده کند یا خیر. حالت پیش‌فرض، استفاده از مجموعه‌دستورالعمل‌های پشتیبانی‌شده توسط نوع پردازنده‌ای است که از طریق گزینهٔ \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 باید کدی ایمن در برابر چندریسمانی و سیگنال‌های ناهمگام برای دسترسی‌های جزئی به حافظه تولید کند یا خیر؛ از جمله دسترسی‌های تکه‌تکه به داده‌های ترازنشده، و همچنین دسترسی‌های بلوکی به بخش‌های ابتدایی و انتهایی نوع‌های تجمیعی (aggregate) یا اشیاء دیگر در حافظه که به ترتیب در مرز داده‌ای تراز شدهٔ ۶۴ بیتی آغاز نشده و پایان نمی‌یابند. .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 راهی برای تولید بازنشانی نمادها به جز از طریق ماکروهای اسمبلر ارائه نمی‌دادند. استفاده از این ماکروها اجازهٔ زمان‌بندی بهینهٔ دستورالعمل‌ها را نمی‌دهد. بستهٔ GNU binutils از نسخهٔ ۲.۱۲ از نحو جدیدی پشتیبانی می‌کند که به کامپایلر اجازه می‌دهد به‌طور صریح مشخص کند کدام بازنشانی‌ها باید بر روی کدام دستورالعمل‌ها اعمال شوند. این گزینه بیشتر برای اشکال‌زدایی مفید است، زیرا 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 فعال باشد، داده‌های ایستا از طریق بازنشانی‌های مرتبط با gp (\fIgp\-relative\fR) مورد دسترسی قرار می‌گیرند. هنگامی که \fB\-msmall\-data\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 برای تخصیص داده در هیپ استفاده کنند. .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 زنجیره‌ابزارهای بومی نیز از مقدار \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) را تنظیم می‌کند که زمان‌بند باید برای ارجاعات معمول به حافظه، همان‌طور که از دید برنامه دیده می‌شود، در نظر بگیرد. این عدد به شدت به الگوهای دسترسی به حافظه که برنامه استفاده می‌کند و اندازهٔ حافظهٔ نهان خارجی (external 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 فعال یا غیرفعال کردن تولید دستورالعمل‌های پرش شرطی (conditional\-branch) اضافی. برای 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 فعال یا غیرفعال کردن دستورالعمل‌های انتقال با بسط علامت (sign\-extending) و بارگذاری حافظه. برای 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" فعال کردن پشتیبانی از «یک‌بار کامپایل، همه‌جا اجرا» (Compile Once \- Run Everywhere یا CO\-RE) در BPF. به \fB\-gbtf\fR نیاز دارد و توسط آن نیز به طور ضمنی فعال می‌شود. .IP \fB\-mno\-co\-re\fR 4 .IX Item "-mno-co-re" غیرفعال کردن پشتیبانی از «یک‌بار کامپایل، همه‌جا اجرا» (CO\-RE) در BPF. هنگام تولید اطلاعات اشکال‌زدایی 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 (شبه 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" تخصیص پویای ثبات‌های کد وضعیت (condition code). .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" انتخاب ABI مربوط به FDPIC، که از توصیف‌کننده‌های تابع برای نمایش اشاره‌گرها به توابع استفاده می‌کند. بدون هیچ‌یک از گزینه‌های مرتبط با 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" فعال‌سازی درون‌خطی‌سازی مدخل‌های 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" هنگام تولید کد محلی رشته (thread-local)، بخش TLS بزرگ را فرض نمی‌کند. .IP \fB\-mgprel\-ro\fR 4 .IX Item "-mgprel-ro" فعال‌سازی استفاده از بازنشانی‌های \f(CW\*(C`GPREL\*(C'\fR در ABI مربوط به FDPIC برای داده‌هایی که مشخصاً در بخش‌های فقط‌خواندنی قرار دارند. این گزینه به‌طور پیش‌فرض فعال است، به‌جز برای \fB\-fpic\fR یا \fB\-fpie\fR: حتی با اینکه ممکن است به کوچک‌تر شدن جدول آفست سراسری (GOT) کمک کند، اما ۱ دستورالعمل را با ۴ دستورالعمل معاوضه می‌کند. همراه با \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 مبنی بر ایجاد همیشگی اشاره‌گر فریم (frame pointer) در زمان تخصیص فریم پشته. این گزینه به‌طور پیش‌فرض فعال است و می‌تواند با \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 مستقل از موقعیت (position-independent). .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" استفاده از اجرای شرطی (conditional execution) را فعال می‌کند (پیش‌فرض). .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 استفاده می‌کند. این حالت پیش‌فرض است، به جز در مقصدهای \&\fB*\-*\-linux\-*uclibc*\fR، \fB*\-*\-linux\-*musl*\fR و \&\fB*\-*\-linux\-*android*\fR. .IP \fB\-muclibc\fR 4 .IX Item "-muclibc" از کتابخانهٔ C موسوم به uClibc استفاده می‌کند. این حالت در مقصدهای \&\fB*\-*\-linux\-*uclibc*\fR پیش‌فرض است. .IP \fB\-mmusl\fR 4 .IX Item "-mmusl" از کتابخانهٔ C موسوم به musl استفاده می‌کند. این حالت در مقصدهای \&\fB*\-*\-linux\-*musl*\fR پیش‌فرض است. .IP \fB\-mbionic\fR 4 .IX Item "-mbionic" از کتابخانهٔ C موسوم به 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" هنگامی که فراخوانی‌های کتابخانه‌ای sync غیرفعال هستند، فراخوانی‌های کتابخانه‌ای برای بارگذاری‌ها و ذخیره‌سازی‌های اتمیک تولید می‌کند. این گزینه به‌طور پیش‌فرض فعال است. این گزینه فقط بر تولید فراخوانی‌های کتابخانه‌ای اتمیک توسط backend معماری 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" فراخواننده (caller) آرگومان‌های تابعی را که از طریق ارجاع پنهان ارسال شده‌اند کپی می‌کند. این گزینه باید با احتیاط استفاده شود چرا که با زمان‌اجرای (runtime) ۳۲ بیتی پیش‌فرض سازگار نیست. با این حال، تنها داده‌های تجمیعی بزرگ‌تر از هشت بایت از طریق ارجاع پنهان ارسال می‌شوند و این گزینه سازگاری بهتری را با OpenMP فراهم می‌کند. .IP \fB\-mcoherent\-ldcw\fR 4 .IX Item "-mcoherent-ldcw" استفاده از راهنمای کنترل کَش منسجم (coherent cache\-control hint) دستورات 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" تولید کدی که با محدودهٔ ثبات داده‌شده مانند ثبات‌های ثابت برخورد می‌کند. یک ثبات ثابت ثباتی است که تخصیص‌دهندهٔ ثبات (register allocator) نمی‌تواند از آن استفاده کند. این گزینه هنگام کامپایل کد هسته مفید است. محدودهٔ ثبات به‌صورت دو ثبات که با یک خط تیره از هم جدا شده‌اند مشخص می‌شود. می‌توان چندین محدودهٔ ثبات را با ویرگول جدا کرده و مشخص نمود. .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. توجه داشته باشید که این کار اشکال‌زدایی نمادین (symbolic debugging) را غیرممکن می‌سازد. .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" تولید کدی که از توالی‌های فراخوانی طولانی (long call) استفاده می‌کند. این امر تضمین می‌کند که یک فراخوانی همیشه قادر است به تکه‌کدهای تولیدشده توسط پیونددهنده (stubs) برسد. حالت پیش‌فرض این است که فراخوانی‌های طولانی تنها زمانی تولید شوند که فاصله از محل فراخوانی تا آغاز تابع یا واحد ترجمه (بسته به مورد)، از محدودهٔ از پیش تعریف‌شده‌ای که توسط نوع انشعابِ مورد استفاده تعیین شده فراتر رود. محدودیت‌ها برای فراخوانی‌های عادی به ترتیب برای معماری‌های PA 2.0 و PA 1.X برابر با ۷٬۶۰۰٬۰۰۰ و ۲۴۰٬۰۰۰ بایت است. فراخوانی‌های برادر (sibcalls) همواره به ۲۴۰٬۰۰۰ بایت محدود هستند. .Sp فاصله‌ها هنگام استفاده از گزینهٔ \&\fB\-ffunction\-sections\fR، یا هنگام استفاده از گزینه‌های \fB\-mgas\fR و \fB\-mno\-portable\-runtime\fR همراه با یکدیگر تحت HP\-UX با پیونددهندهٔ SOM، از آغاز توابع اندازه‌گیری می‌شوند. .Sp معمولاً استفاده از این گزینه مطلوب نیست چرا که کارایی را کاهش می‌دهد. با این حال، ممکن است در برنامه‌های بزرگ، به‌ویژه زمانی که پیوند جزئی (partial linking) برای ساخت برنامه استفاده می‌شود، مفید باشد. .Sp انواع فراخوانی‌های طولانی مورد استفاده به قابلیت‌های اسمبلر و پیونددهنده، و نوع کد در حال تولید بستگی دارد. تأثیر آن روی سیستم‌هایی که از فراخوانی‌های مطلق طولانی، و فراخوانی‌های طولانی تفاضل نماد pic یا وابسته به شمارندهٔ برنامه (pc\-relative) پشتیبانی می‌کنند باید نسبتاً کم باشد. با این حال، در سیستم‌های ۳۲ بیتی 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" تولید کدی که فرض می‌کند مقصد فاقد ثبات‌های فضا (space registers) است. این کار به GCC اجازه می‌دهد فراخوانی‌های غیرمستقیم سریع‌تری تولید کرده و از حالت‌های آدرس‌دهی نمایه‌ایِ مقیاس‌بندی‌نشده استفاده کند. .Sp چنین کدی برای هسته‌ها و سیستم‌های PA سطح ۰ مناسب است. .IP \fB\-mordered\fR 4 .IX Item "-mordered" فرض می‌کند که ارجاعات حافظه مرتب هستند و نیازی به سدها (barriers) نیست. .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 برای ورودی/خروجی (IO) سرور. پیش‌فرض \&\fB\-mwsio\fR است. این گزینه پیش‌تعریف‌های \f(CW\*(C`_\|_hp9000s700\*(C'\fR، \&\f(CW\*(C`_\|_hp9000s700_\|_\*(C'\fR و \f(CW\*(C`_WSIO\*(C'\fR را برای ورودی/خروجی ایستگاه کاری (workstation) تولید می‌کند. این گزینه‌ها تحت HP\-UX و HI\-UX در دسترس هستند. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" تولید خروجی حاوی فراخوانی‌های کتابخانه‌ای برای محاسبات ممیز شناور. \&\fBهشدار:\fR کتابخانه‌های مورد نیاز برای تمام مقصدهای HPPA در دسترس نیستند. معمولاً از امکانات کامپایلر C مرسوم ماشین استفاده می‌شود، اما این کار را نمی‌توان مستقیماً در کامپایل متقاطع (cross\-compilation) انجام داد. باید تمهیدات لازم را برای فراهم کردن توابع کتابخانه‌ای مناسب برای کامپایل متقاطع در نظر بگیرید. .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" تولید پیش‌تعریف‌های کامپایلر و انتخاب یک فایل راه‌انداز (startfile) برای استاندارد مشخص‌شدهٔ 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" جلوگیری از تولید گزینه‌های پیوند برای جستجوی libdld.sl هنگامی که گزینهٔ \&\fB\-static\fR در HP\-UX 10 و جدیدتر مشخص شده باشد. .IP \fB\-static\fR 4 .IX Item "-static" پیاده‌سازی setlocale در libc روی HP\-UX به libdld.sl وابسته است. نسخهٔ آرشیوی از libdld.sl وجود ندارد. بنابراین، هنگامی که گزینهٔ \fB\-static\fR مشخص می‌شود، گزینه‌های پیوند خاصی برای رفع این وابستگی مورد نیاز است. .Sp در HP\-UX 10 و جدیدتر، در صورت مشخص بودن گزینهٔ \fB\-static\fR، گردانندهٔ GCC گزینه‌های لازم برای پیوند با libdld.sl را اضافه می‌کند. این امر موجب می‌شود باینری حاصل پویا (dynamic) باشد. در پورت ۶۴ بیتی، پیونددهنده‌ها در هر صورت به‌طور پیش‌فرض باینری‌های پویا تولید می‌کنند. از گزینهٔ \&\fB\-nolibdld\fR می‌توان برای جلوگیری از اضافه کردن این گزینه‌های پیوند توسط گردانندهٔ GCC استفاده کرد..IP \fB\-threads\fR 4 .IX Item "-threads" پشتیبانی از چندنخی (multithreading) با کتابخانهٔ \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 assembler). این حالت پیش‌فرض است. .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 linker). این حالت پیش‌فرض است. .IP \fB\-mno\-pic\fR 4 .IX Item "-mno-pic" تولید کدی که از ثبات اشاره‌گر سراسری (global pointer register) استفاده نمی‌کند. خروجی کدی مستقل از موقعیت نبوده و با ABI در IA\-64 مغایرت دارد. .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" تولید کدی که از یک مقدار ثابت منفرد برای اشاره‌گر سراسری استفاده می‌کند. این گزینه هنگام کامپایل کردن کد هسته مفید است. .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 تولید (یا عدم تولید) کدی که از دستورالعمل‌های ادغام‌شدهٔ ضرب/جمع یا ضرب/تفریق استفاده می‌کند. پیش‌فرض، استفاده از این دستورالعمل‌ها است. .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. این گزینه ممکن است هنگام استفاده نکردن از اسمبلر گنو مفید باشد. .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 اجازه می‌دهد بیت‌های توقف زودتر از موقعیت بلافاصله پیش از دستورالعملی که بیت توقف را فعال کرده، قرار گیرند. این ویژگی می‌تواند زمان‌بندی دستورالعمل‌ها را بهبود بخشد، اما همواره این‌طور نیست. .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4 .IX Item "-mfixed-range=register-range" تولید کد با در نظر گرفتن بازهٔ ثبات‌های داده‌شده به عنوان ثبات‌های ثابت (fixed). ثبات ثابت ثباتی است که تخصیص‌دهندهٔ ثبات (register allocator) نمی‌تواند از آن استفاده کند. این ویژگی هنگام کامپایل کد هسته کاربرد دارد. بازهٔ ثبات به صورت دو ثبات که با یک خط پیوند از یکدیگر جدا شده‌اند تعیین می‌شود. می‌توان چندین بازهٔ ثبات را با کاما جدا کرد. .IP \fB\-mtls\-size=\fR\fItls\-size\fR 4 .IX Item "-mtls-size=tls-size" تعیین اندازهٔ بیت آفست‌های بی‌واسطهٔ 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) به بارگذاری‌های حدسی داده وابسته‌اند. این گزینه تنها در صورت فعال بودن \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 فعال یا غیرفعال کردن زمان‌بندی حدسی دستورالعمل‌هایی که به بارگذاری‌های حدسی کنترلی وابسته‌اند. این گزینه تنها در صورت فعال بودن \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" قرار دادن یک بیت توقف پس از هر چرخه هنگام زمان‌بندی. این گزینه به‌طور پیش‌فرض فعال است. .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) کاربرد دارد. مقدار پیش‌فرض 1 است. .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" فعال‌سازی دستورالعمل‌های تقسیم و باقیمانده. .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" پردازندهٔ مبتنی بر LA464 در LoongArch به همراه LSX و LASX. .IP \fBla664\fR 4 .IX Item "la664" پردازندهٔ مبتنی بر LA664 در LoongArch به همراه 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" هستهٔ LA464 در LoongArch. .IP \fBla664\fR 4 .IX Item "la664" هستهٔ LA664 در LoongArch. .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" فعال‌سازی تولید دستورالعمل‌های LoongArch SIMD برای برداری‌سازی (vectorization) و از طریق توابع توکار (builtin). مقدار می‌تواند یکی از موارد زیر باشد: .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 را غیرفعال می‌سازد. این گزینه‌های ویژهٔ راه‌انداز (driver-only) بر وضعیت نهایی پیکربندی \&\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" تعیین زمان استفاده از عملگرهای بازآرایی (relocation operators) اسمبلر هنگام سروکار داشتن با آدرس‌های نمادین. راهکار جایگزین استفاده از ماکروهای اسمبلر است، که ممکن است زمان‌بندی دستورالعمل‌ها را محدود کند اما امکان بهینه‌سازی پیونددهنده (linker relaxation) را فراهم می‌سازد. با \fB\-mexplicit\-relocs=none\fR همیشه از ماکروهای اسمبلر استفاده می‌شود، با \fB\-mexplicit\-relocs=always\fR همیشه از عملگرهای بازآرایی اسمبلر استفاده می‌شود، و با \fB\-mexplicit\-relocs=auto\fR کامپایلر برای بهبود کیفیت کد در جاهایی که linker relaxation غیرممکن باشد از عملگرهای بازآرایی و در سایر نقاط از ماکروها استفاده می‌کند. مقدار پیش‌فرض این گزینه بر اساس قابلیت‌های اسمبلر شناسایی‌شده در زمان ساخت 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 برای دسترسی به نمادهای خارجی. پیش‌فرض \&\fB\-mno\-direct\-extern\-access\fR است: GOT برای نمادهای خارجی با نمایانی پیش‌فرض استفاده می‌شود، ولی برای سایر نمادهای خارجی به کار نمی‌رود. .Sp با \fB\-mdirect\-extern\-access\fR، از GOT استفاده نمی‌شود و همهٔ نمادهای خارجی به‌صورت PC\-relative آدرس‌دهی می‌شوند. این گزینه \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 و هم از بهینه‌سازی تطبیقی شاخه‌های شرطی پشتیبانی کند، \&\fB\-mrelax\fR (این مورد لازم است، زیرا در غیر این صورت دستورالعمل‌های \&\f(CW\*(C`.align\*(C'\fR و دستورهای شاخه شرطی در کد اسمبلی خروجی GCC ممکن است به دلیل سرریز بازنشانی (relocation overflow) توسط اسمبلر رد شوند)، و در غیر این صورت \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 با ورودی‌هایی که گسترش علامت نیافته‌اند. هنگام ساخت با \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" مشخص می‌کند که برنامه روی شبیه‌ساز اجرا خواهد شد. این گزینه باعث پیوند خوردن یک کتابخانهٔ زمان اجرای جایگزین می‌شود که برای مثال از I/O فایل پشتیبانی می‌کند. هنگام تولید برنامه‌هایی که قرار است روی سخت‌افزار واقعی اجرا شوند نباید از این گزینه استفاده کنید؛ باید برای هر تابع I/O که نیاز است، کتابخانهٔ زمان اجرای اختصاصی خودتان را ارائه دهید. .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" استفاده از ناحیهٔ داده‌های کوچک (small data area) را غیرفعال می‌کند. متغیرها در یکی از بخش‌های \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" داده‌های سراسری و ایستای (static) کوچک را در ناحیهٔ داده‌های کوچک قرار می‌دهد، اما کد خاصی برای ارجاع به آن‌ها تولید نمی‌کند. .IP \fB\-msdata=use\fR 4 .IX Item "-msdata=use" داده‌های سراسری و ایستای کوچک را در ناحیهٔ داده‌های کوچک قرار می‌دهد، و دستورالعمل‌های خاصی برای ارجاع به آن‌ها تولید می‌کند. .IP "\fB\-G\fR \fInum\fR" 4 .IX Item "-G num" اشیاء سراسری و ایستایی را که کمتر یا مساوی با \fInum\fR بایت هستند، به جای بخش‌های عادی data یا 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 تنها می‌تواند ۱ یا ۲ باشد. اگر ۱ باشد، پرش‌ها (branches) بر کدهای شرطی ترجیح داده می‌شوند؛ اگر ۲ باشد، عکس آن اعمال می‌شود. .IP \fB\-mflush\-trap=\fR\fInumber\fR 4 .IX Item "-mflush-trap=number" شمارهٔ تله‌ای (trap) را که برای تخلیهٔ کَش استفاده می‌شود مشخص می‌کند. مقدار پیش‌فرض ۱۲ است. اعداد معتبر بین ۰ و ۱۵ (شامل خود آن‌ها) هستند. .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. پردازنده‌های M680x0 عبارتند از: \fB68000\fR، \fB68010\fR، \fB68020\fR، \&\fB68030\fR، \fB68040\fR، \fB68060\fR، \fB68302\fR، \fB68332\fR و \fBcpu32\fR. پردازنده‌های ColdFire در جدول زیر مشخص شده‌اند که این پردازنده‌ها را نیز به خانواده‌هایی طبقه‌بندی می‌کند: .RS 4 .IP "\fIخانواده\fR : \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 \&\fB\-mcpu=\fR\fIcpu\fR در صورتی که \fIarch\fR با \fIcpu\fR سازگار باشد، \fB\-march=\fR\fIarch\fR را بازنویسی می‌کند. سایر ترکیب‌های \&\fB\-mcpu\fR و \fB\-march\fR رد می‌شوند. .Sp کامپایلر GCC هنگامی که مقصد ColdFire با عنوان \fIcpu\fR انتخاب شده باشد، ماکروی \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 بهینه‌سازی می‌کند. ریزمعماری‌های 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 همچنین ماکروی \f(CW\*(C`_\|_m\fR\f(CIuarch\fR\f(CW_\|_\*(C'\fR را هنگام بهینه‌سازی برای ریزمعماری ColdFire با عنوان \fIuarch\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، با پهنای ۱۶ بیت در نظر می‌گیرد. علاوه بر این، پارامترهای ارسال‌شده در پشته (stack) نیز روی یک مرز ۱۶ بیتی تراز می‌شوند، حتی در مقصدهایی که 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" از یک قرارداد فراخوانی تابع (calling convention) متفاوت استفاده می‌کند، که در آن توابعی با تعداد مشخصی از آرگومان‌ها با دستورالعمل \f(CW\*(C`rtd\*(C'\fR بازمی‌گردند؛ این دستورالعمل آرگومان‌های آن‌ها را هنگام بازگشت از پشته خارج (pop) می‌کند. این کار یک دستورالعمل در فراخواننده (caller) صرفه‌جویی می‌کند، زیرا در آنجا نیازی به خارج کردن آرگومان‌ها نیست. .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 مستقیماً از حالت آدرس‌دهی وابسته به pc (شمارندهٔ برنامه) پردازندهٔ 68000 به‌جای استفاده از جدول آفست سراسری (GOT) استفاده می‌کند. در حال حاضر، این گزینه مستلزم \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" کدی تولید می‌کند که فرض نمی‌کند کتابخانه‌های مشترک مبتنی بر ID در حال استفاده هستند. این حالت پیش‌فرض است. .IP \fB\-mshared\-library\-id=n\fR 4 .IX Item "-mshared-library-id=n" شمارهٔ شناسایی کتابخانهٔ مشترک مبتنی بر ID را که کامپایل می‌شود مشخص می‌کند. تعیین مقدار 0 کد فشرده‌تری تولید می‌کند؛ تعیین مقادیر دیگر، تخصیص آن شماره به کتابخانهٔ فعلی را تحمیل می‌کند، اما از نظر فضا یا زمان بهینه‌تر از حذف این گزینه نیست. .IP \fB\-mxgot\fR 4 .IX Item "-mxgot" .PD 0 .IP \fB\-mno\-xgot\fR 4 .IX Item "-mno-xgot" .PD هنگام تولید کد مستقل از موقعیت برای 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 خواهید داشت که یک تک‌فایل شیء (object file) را کامپایل کنید که به بیش از ۸۱۹۲ مدخل 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 همواره با فیلدهای بیتی به‌اندازه \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) هنگام خواندن مقادیر بایتی. .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" استفاده از شیفت‌دهنده بشکه‌ای (barrel shifter) سخت‌افزاری. .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" برای استفاده با عامل اشکال‌زدایی نرم‌افزاری مداخله‌گر بر پایه اشکال‌زدای ریزپردازنده زایلینکس (XMD) به نام xmdstub. این مدل از فایل راه‌اندازی \&\fIcrt1.o\fR استفاده می‌کند و نشانی آغاز برنامه را روی 0x800 تنظیم می‌نماید. .IP \fBbootstrap\fR 4 .IX Item "bootstrap" برای برنامه‌هایی که با استفاده از یک بارگذار بوت (bootloader) بارگذاری می‌شوند. این مدل از فایل راه‌اندازی \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 در زمان پیوند ایستا ثابت است. از آنجا که آدرس‌دهی نسبی به PC پشتیبانی نمی‌شود، این گزینه امکان ارجاع به داده‌ها با آفست از ابتدای آدرس text را به‌جای GOT فراهم می‌کند. .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 الزام می‌کند (الزام نمی‌کند) که کد استفاده‌کننده از ISA استاندارد (فشرده‌نشده) MIPS با کدهای 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 از گونه‌ای از ABI o32 پشتیبانی می‌کند که در آن ثبات‌های ممیز شناور به جای ۳۲ بیت، ۶۴ بیتی هستند. می‌توانید این ترکیب را با \&\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 کدی تولید می‌کند (تولید نمی‌کند) که کاملاً مستقل از موقعیت باشد و بنابراین بتواند درون کتابخانه‌های اشتراکی پیوند داده شود. این گزینه فقط بر \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 تأثیر می‌گذارد. برای ABI نوع n64، این گزینه بدون \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 در حال تولید کد مستقل از موقعیت (position independent code) باشد. .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 است، اما علاوه بر آن تصریح می‌کند که برنامهٔ در حال کامپایل هیچ عملیات ممیز شناوری را انجام نمی‌دهد. این گزینه در حال حاضر تنها توسط برخی پیکربندی‌های bare\-metal در MIPS پشتیبانی می‌شود، جایی که ممکن است مجموعهٔ خاصی از کتابخانه‌ها را انتخاب کند که فاقد هرگونه پشتیبانی از ممیز شناور هستند (برای نمونه، شامل قالب‌های ممیز شناور در \f(CW\*(C`printf\*(C'\fR). اگر کدی که با \fB\-mno\-float\fR کامپایل شده به طور اتفاقی شامل عملیات ممیز شناور باشد، احتمالاً با شکست در زمان پیوند یا زمان اجرا مواجه خواهد شد. .IP \fB\-msingle\-float\fR 4 .IX Item "-msingle-float" فرض می‌کند که کمک‌پردازندهٔ ممیز شناور تنها از عملیات با دقت یگانه پشتیبانی می‌کند. .IP \fB\-mdouble\-float\fR 4 .IX Item "-mdouble-float" فرض می‌کند که کمک‌پردازندهٔ ممیز شناور از عملیات با دقت مضاعف پشتیبانی می‌کند. این پیش‌فرض است. .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 استفاده از ثبات‌های فردِ ممیز شناور با دقت یگانه را برای ABI نوع o32 فعال می‌کند. این مقدار برای پردازنده‌هایی که مشخصاً از این ثبات‌ها پشتیبانی می‌کنند، پیش‌فرض است. هنگام استفاده از 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) با ۰ بودن بیت اول فیلد مانتیس انتهایی (trailing significand) مشخص می‌شوند، در حالی که NaNهای علامتی (sNaNs) با ۱ بودن بیت اول فیلد مانتیس انتهایی‌شان مشخص می‌گردند. .Sp گزینهٔ \fB\-mnan=2008\fR کدگذاری IEEE 754\-2008 را برمی‌گزیند. در این حالت، qNaNها با ۱ بودن بیت اول فیلد مانتیس انتهایی‌شان مشخص می‌شوند، در حالی که sNaNها با ۰ بودن بیت اول فیلد مانتیس انتهایی‌شان نشان داده می‌شوند. .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 برای پیاده‌سازی توابع درونیِ (built\-in) حافظهٔ اتمی، از دستورهای \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 را به ۱ تعریف می‌کند. .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 را به ۲ تعریف می‌کند. .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 مانند EABI شصت و چهار بیتی از \f(CW\*(C`long\*(C'\fRهای ۶۴\-بیتی استفاده می‌کند؛ سایرین از \f(CW\*(C`long\*(C'\fRهای ۳۲\-بیتی استفاده می‌کنند. اشاره‌گرها هم‌اندازه با \f(CW\*(C`long\*(C'\fRها یا هم‌اندازه با ثبات‌های عدد صحیح هستند، هر کدام که کوچک‌تر باشد. .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 اگر پیونددهنده (linker) هشدار دهد که یک برنامه بیش از حد از داده‌های کوچک استفاده می‌کند، ممکن است بخواهید کامپایل مجدد بخش‌های کم‌اهمیت‌تر از نظر کارایی را با \&\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 تخصیص متغیرها در صورت امکان ابتدا به بخش داده‌های فقط‌خواندنی، سپس در صورت امکان در بخش داده‌های کوچک، و در غیر این صورت در بخش داده (data). این گزینه کدی تولید می‌کند که اندکی از حالت پیش‌فرض کندتر است، اما مقدار RAM مورد نیاز هنگام اجرا را کاهش می‌دهد و بنابراین ممکن است برای برخی سامانه‌های نهفته ترجیح داده شود. .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 فعال‌سازی (غیرفعال‌سازی) استفاده از عملگرهای بازآرایی اسمبلی \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 در سال ۲۰۰۱ به GAS اضافه شد. پشتیبانی از بازآرایی‌های صریح \f(CW\*(C`pcrel\*(C'\fR در سال ۲۰۱۴ معرفی گردید، که از \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 تله‌گذاری (عدم تله‌گذاری) هنگام تقسیم صحیح بر صفر. .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 تقسیم بر صفر را با تولید یک تله شرطی (conditional trap) یا یک دستورالعمل break بررسی می‌کنند. استفاده از تله‌ها باعث ایجاد کد کوچک‌تری می‌شود، اما تنها در 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 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 کارآمدتر است اما نیاز دارد که فراخواننده و فراخوانده‌شده در یک بخش حافظهٔ ۲۵۶ مگابایتی یکسان باشند. .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 (از دست رفتن داده‌ها در عملیات ذخیره‌سازی حین بازنشانی یا refill). این راهکارها به جای 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 یک شیفت متغیر یا دابل-ورد (double\-word) در صورتی که بلافاصله پس از شروع یک تقسیم عدد صحیح اجرا شود ممکن است نتیجه نادرستی تولید کند. .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 رفتاری اتمیک (atomic) نداشته باشند. آن‌ها ممکن است در نسخه‌های 2.6 و قدیمی‌تر دچار بن‌بست (deadlock) شوند. .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 تلاشی برای زمان‌بندی دستورالعمل قبلی در شکاف تاخیر (delay slot) دستورالعمل انشعابی که در انتهای یک حلقه کوتاه با شش دستورالعمل یا کمتر قرار دارد انجام نده و همیشه به جای آن یک دستورالعمل \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 تلاش می‌کند نتیجه یک انشعاب شرطی را پیش‌بینی کرده و دستورالعمل‌های شاخه «برداشته‌شده» (taken) را به صورت حدسی اجرا نماید. در صورتی که نتیجه پیش‌بینی نادرست باشد، این دستورالعمل‌ها را بعداً لغو می‌کند. با این حال، در R10K حتی دستورالعمل‌های لغوشده نیز می‌توانند اثرات جانبی داشته باشند. .Sp این مشکل فقط بر عملیات ذخیره (stores) هسته و، بسته به سیستم، بارگذاری‌های (loads) هسته اثر می‌گذارد. به عنوان مثال، یک ذخیره‌سازی که به صورت حدسی اجرا شده است ممکن است حافظه مقصد را در حافظه نهان بارگذاری کرده و خط حافظه نهان (cache line) را به عنوان dirty نشانه‌گذاری کند، حتی اگر خود عملیات ذخیره بعداً لغو شود. اگر یک عملیات DMA پیش از تخلیه (flush) خط «dirty» در همان ناحیه از حافظه بنویسد، داده‌های کَش‌شده بر روی داده‌های منتقل‌شده با DMA بازنویسی می‌شوند. برای توضیحات کامل، از جمله سایر مشکلات بالقوه، به دفترچه راهنمای پردازنده R10K مراجعه کنید. .Sp یک راهکار این است که دستورالعمل‌های مانع حافظه نهان (cache barrier) پیش از هر دسترسی به حافظه‌ای که ممکن است به صورت حدسی اجرا شود و حتی در صورت لغو شدن اثرات جانبی به جا بگذارد، درج گردند. گزینه \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR پیاده‌سازی این راهکار در GCC را کنترل می‌کند. این گزینه فرض می‌کند که دسترسی‌های لغوشده به هر بایتی در نواحی زیر، اثرات جانبی ندارند: .RS 4 .IP 1. 4 .IX Item "1." حافظه اشغال‌شده توسط فریم پشته (stack frame) تابع فعلی؛ .IP 2. 4 .IX Item "2." حافظه اشغال‌شده توسط یک آرگومان ورودی پشته؛ .IP 3. 4 .IX Item "3." حافظه اشغال‌شده توسط شیئی با آدرس ثابت در زمان پیوند (link\-time\-constant). .RE .RS 4 .Sp این مسئولیت هسته سیستم‌عامل (kernel) است که تضمین کند دسترسی‌های حدسی به این نواحی واقعاً ایمن هستند. .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 به‌طور حدسی (speculatively) اجرا شوند. GCC این محدودیت را برای توابعی که خودش کامپایل می‌کند رعایت می‌نماید. GCC انتظار دارد توابع غیر GCC (مانند کدهای اسمبلی دست‌نویس) نیز همین کار را انجام دهند. .Sp این گزینه دارای سه حالت است: .IP \fB\-mr10k\-cache\-barrier=load\-store\fR 4 .IX Item "-mr10k-cache-barrier=load-store" یک سد حافظه موقت (cache barrier) پیش از عملیات بارگذاری یا ذخیره‌سازی درج می‌کند که ممکن است به‌صورت حدسی اجرا شود و حتی در صورت لغو شدن، عوارض جانبی داشته باشد. .IP \fB\-mr10k\-cache\-barrier=store\fR 4 .IX Item "-mr10k-cache-barrier=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 تابعی را که باید برای پاکسازی (flush) حافظه‌های موقت دستورالعمل (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 تضمین می‌کند که دستورالعمل‌های پرش فشرده (compact branch) هرگز تولید نخواهند شد. .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) است، اما تنها در صورتی می‌تواند دو دستورالعمل را با هم صادر (issue) کند که اولی تراز ۸ بایتی داشته باشد. هنگامی که این گزینه فعال باشد، 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)، این دستور حافظه‌های موقت دستورالعمل را در همه هسته‌ها باطل نمی‌کند و ممکن است به رفتار تعریف‌نشده منجر شود. .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 ارسال (dispatch) می‌شوند به فراخوانی‌های مستقیم تبدیل کند. این کار تنها در صورتی امکان‌پذیر است که پیونددهنده بتواند مقصد را در زمان پیوند حل کند و مقصد در محدوده مجاز برای یک فراخوانی مستقیم باشد. .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 غیرتهی (nonnull) باشد. .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) را در ABI o32 فعال (غیرفعال) می‌کند. هنگام استفاده از ABI o32، توابع فراخواننده ۱۶ بایت را در پشته تخصیص می‌دهند تا تابع فراخوانده‌شده بتواند آرگومان‌های ثبات را در آن بنویسد. هنگامی که فعال باشد، این بهینه‌سازی در صورتی که مشخص شود سرآیند فریم بلااستفاده است، از تخصیص آن جلوگیری می‌کند. .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" به پیونددهنده اعلام می‌کند که باید یک گام بهینه‌سازی ریلکسیشن را برای کوتاه کردن انشعاب‌ها، فراخوانی‌ها و آدرس‌های مطلق حافظه انجام دهد. این گزینه تنها زمانی اثر دارد که در خط فرمان برای مرحله نهایی پیوند استفاده شود. .Sp این گزینه اشکال‌زدایی نمادین را غیرممکن می‌سازد. .IP \fB\-mliw\fR 4 .IX Item "-mliw" در صورتی که هدف \fBAM33\fR یا جدیدتر باشد، به کامپایلر اجازه می‌دهد دستورالعمل‌های \fILong Instruction Word\fR را تولید کند. این حالت پیش‌فرض است. این گزینه ماکروی پیش‌پردازنده \f(CW\*(C`_\|_LIW_\|_\*(C'\fR را تعریف می‌کند. .IP \fB\-mno\-liw\fR 4 .IX Item "-mno-liw" به کامپایلر اجازه تولید دستورالعمل‌های \fILong Instruction Word\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 (C run\-time initialization). .PP \fIگزینه‌های MSP430\fR .IX Subsection "MSP430 Options" .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های مختلف به‌طور ثابت درون GCC کدنویسی (hard\-code) شده است. با این حال، یک فایل خارجی \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 path specified with -I and -L" فایل \&\fBdevices.csv\fR در هر یک از دایرکتوری‌های مشخص‌شده توسط مسیرهای include و مسیرهای جستجوی کتابخانه پیونددهنده جستجو می‌شود. .IP "مسیر مشخص‌شده توسط متغیر محیطی \fBMSP430_GCC_INCLUDE_DIR\fR" 4 .IX Item "Path specified by the environment variable 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 "The msp430-elf{,bare}/include/devices directory" در نهایت، 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 این توابع بازگشت‌پذیر (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 این گزینه فقط مواردی را تحت تأثیر قرار می‌دهد که در آن‌ها شیفت به چندین موقعیت نتواند با یک دستورالعمل واحد انجام شود (مثلاً تمام شیفت‌های بیشتر از ۱ در 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=" این گزینه درخواستی را به اسمبلر ارسال می‌کند تا هنگام نیاز احتمالی به اعمال یک اشکال سخت‌افزاری تراشه، پیام‌های هشدار را فعال کند. .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" تولید دستورالعمل‌های v3 push25/pop25. .IP \fB\-mno\-v3push\fR 4 .IX Item "-mno-v3push" عدم تولید دستورالعمل‌های v3 push25/pop25. .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" تعیین اندازهٔ هر بلوک کَش، که باید توانی از ۲ بین ۴ و ۵۱۲ باشد. .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" تمام سگمنت‌های داده و داده‌های فقط‌خواندنی باید درون فضای آدرس‌دهی 512KB باشند. سگمنت text باید درون فضای آدرس‌دهی 16MB باشد. .IP \fBmedium\fR 4 .IX Item "medium" سگمنت داده باید درون 512KB باشد در حالی که سگمنت داده‌های فقط‌خواندنی می‌تواند درون فضای آدرس‌دهی 4GB باشد. سگمنت text همچنان باید درون فضای آدرس‌دهی 16MB باشد. .IP \fBlarge\fR 4 .IX Item "large" تمام سگمنت‌های text و داده می‌توانند درون فضای آدرس‌دهی 4GB باشند. .RE .RS 4 .RE .IP \fB\-mctor\-dtor\fR 4 .IX Item "-mctor-dtor" فعال‌سازی ویژگی سازنده/نابودکننده (constructor/destructor). .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" هدایت پیونددهنده برای تعدیل و بهینه‌سازی دستورالعمل‌ها (relax instructions). .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. این گزینه برای اجرای مستقل به جای اجرای باراندازی‌شده (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 مشخص شده باشد)، از پشته‌های «بومی» 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) را ممکن می‌سازد، و هنگامی که از حافظهٔ سراسری برای فضای ذخیره‌سازی زیرین استفاده شود، دسترسی به متغیرهای خودکار را از سایر ریسه‌ها یا با دستورالعمل‌های اتمیک میسر می‌سازد. این روش تولید کد برای باراندازی (offloading) در OpenMP استفاده می‌شود، اما این گزینه به تنهایی نیز به منظور آزمایش کامپایلر ارائه شده است؛ برای تولید کد مناسب جهت پیوند در برنامه‌هایی که از باراندازی OpenMP استفاده می‌کنند، از گزینهٔ \fB\-mgomp\fR استفاده کنید. .IP \fB\-muniform\-simt\fR 4 .IX Item "-muniform-simt" تغییر حالت به شیوهٔ تولید کدی که به تمام ریسه‌ها در هر warp اجازهٔ اجرا می‌دهد، در حالی که وضعیت حافظه و اثرات جانبی را به‌گونه‌ای حفظ می‌کند که گویی خارج از نواحی SIMD در OpenMP تنها یک ریسه در هر warp فعال بوده است. تمام عملیات‌های اتمیک و فراخوانی‌های زمان اجرا (malloc، free، vprintf) به‌صورت شرطی اجرا می‌شوند (اگر و تنها اگر شاخص lane جاری با شاخص lane اصلی برابر باشد)، و ثباتی که مقداردهی می‌شود، از طریق یک دستورالعمل shuffle از lane اصلی کپی می‌گردد. در خارج از نواحی SIMD، مسیر lane 0 به عنوان اصلی (master) است؛ درون آنها، هر ریسه خود را به عنوان اصلی می‌بیند. آرایهٔ حافظهٔ اشتراکی \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" تولید کد برای استفاده در برون‌سپاری پردازش (offloading) در 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، تولید دستورهای ممیز شناور با دقت مضاعف را فعال می‌کند. به‌طور پیش‌فرض، برای انجام محاسبات ممیز شناور با دقت مضاعف از توابع \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 (در نحو اسمبلر یونیکس، 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" فضای دستورالعمل و داده در هدف تفکیک شده است. مستلزم \-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. به‌طور پیش‌فرض، از تخصیص‌دهنده قدیمی «reload» استفاده می‌شود. .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 file) با نام متناظر بارگذاری خواهد شد که اندازه‌های ناحیه حافظه را به پیونددهنده ارسال کرده و ماکروهای C مخصوص سخت‌افزار را تعریف می‌کند. .Sp محیط Newlib تنها مشخصات \f(CW\*(C`sim\*(C'\fR را ارائه می‌دهد که برای اجرای آزمون‌های رگرسیون با استفاده از شبیه‌ساز در نظر گرفته شده است. مشخصات مربوط به سخت‌افزار واقعی را می‌توان با نصب بسته GnuPruMcu (\f(CW\*(C`https://github.com/dinuxbg/gnuprumcu\*(C'\fR) به‌دست آورد. .IP \fB\-mno\-relax\fR 4 .IX Item "-mno-relax" تنظیم GCC برای ارسال گزینه خط فرمان \fB\-\-no\-relax\fR به پیونددهنده به جای گزینه \fB\-\-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 قابل ساخت نبوده و هنگام پیوند دادن با \&\fB\-mabi=ti\fR حذف می‌شود. .Sp قابلیت Relaxation یک ویژگی GNU است و به دلایل ایمنی در هنگام استفاده از \&\fB\-mabi=ti\fR غیرفعال می‌شود. زنجیره‌ابزار TI اطلاعات بازنشانی (relocation) را برای دستورالعمل‌های 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" نسخهٔ مشخصات RISC\-V Unprivileged (پیش‌تر سطح کاربر یا 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 """یک زیرخط می‌تواند در هر کجای پس از ISA پایه قرار گیرد. این کار هیچ اثر""" 4 .el .IP "\f(CWیک زیرخط می‌تواند در هر کجای پس از 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 افزونهٔ اتمیک (Atomic)..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 افزونهٔ سد واکشی دستورالعمل (Instruction\-fetch fence). .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 افزونهٔ راهنمای توقف (pause). .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 افزونهٔ ترتیب‌بندی کامل ذخیره‌سازی (TSO)..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 افزونهٔ باطل‌سازی ریزدانهٔ کَش ترجمهٔ آدرس. .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 افزونهٔ ضرب\-انباشت 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 افزونهٔ بارگذاری کلمهٔ رویداد در 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" خروجی را برای پردازندهٔ داده‌شده، که بر اساس ریزمعماری یا نام خاص CPU تعیین می‌شود، بهینه‌سازی می‌کند. مقادیر مجاز برای این گزینه عبارتند از: \&\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 مشخص نشده باشد، مقدار پیش‌فرض ۴ (۱۶ بایت یا ۱۲۸ بیت) است. .Sp \&\fBهشدار:\fR اگر از این سوئیچ استفاده کنید، باید همهٔ ماژول‌ها از جمله تمام کتابخانه‌ها را با همین مقدار بسازید. این امر شامل کتابخانه‌های سیستم و ماژول‌های راه‌اندازی (startup) نیز می‌شود. .IP \fB\-msmall\-data\-limit=\fR\fIn\fR 4 .IX Item "-msmall-data-limit=n" داده‌های سراسری و ایستای کوچکتر از \fIn\fR بایت را (در برخی مقاصد) در یک بخش ویژه قرار می‌دهد. .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 conditional\-move)، حتی برای مقاصدی که دستورهای خاصی برای عملیات‌های شرطی ندارند. در صورت فعال بودن، در جاهایی که سودمند باشد، توالی‌هایی از عملیات‌های 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 استفاده می‌کنند. حالت پیش‌فرض، استفاده از اتمیک‌های زیرکلمه‌ایِ درون‌خطی (inline) و سریعی است که به 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. اگر مبنای جدید در یک ثبات فشرده ذخیره شود، آنگاه load/store جدید می‌تواند فشرده گردد. در حال حاضر فقط load/storeهای صحیح ۳۲\-بیتی را هدف قرار می‌دهد. .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 تولید نکردن یا تولید کردن دسترسی‌های حافظهٔ برداری ترازنشده. مقدار پیش‌فرض خاموش است مگر اینکه پردازنده‌ای که برای آن بهینه‌سازی می‌کنیم، صراحتاً از دسترسی به حافظهٔ برداری با عناصر ناتراز (element\-misaligned) پشتیبانی کند. .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. برنامه و نمادهای تعریف‌شدهٔ ایستای آن باید درون هر محدودهٔ آدرس 2 GiB یگانه‌ای قرار گیرند. برنامه‌ها می‌توانند به صورت ایستا یا پویا پیوند داده شوند. .Sp کد تولیدشده توسط مدل کد medium\-any مستقل از موقعیت (position\-independent) است، اما تضمین نمی‌شود که هنگام پیوند در فایل‌های اجرایی یا کتابخانه‌های مستقل از موقعیت به درستی کار کند. .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 استفاده کردن یا نکردن از عملگرهای بازآرایی (relocation) اسمبلر هنگام کار با آدرس‌های نمادین. روش جایگزین، استفاده از ماکروهای اسمبلر است که ممکن است بهینه‌سازی را محدود کند. .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" کنترل نحوهٔ تراز کردن متغیرها و ثابت‌های آرایه‌ای، ساختاری (structure)، یا اجتماعی (union) توسط 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 تولید کد محافظ پشته با استفاده از قناری (canary) در \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 به عنوان سازوکار حافظهٔ محلی ریسه (thread\-local storage) برای دسترسی‌های پویای متغیرهای 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 فاقد بانک‌های ثبات است، بنابراین از یک قرارداد فراخوانی متفاوت استفاده می‌کند. .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 گزینه‌های خاص تنظیم‌شده برای هر CPU خاص، بر اساس این‌که چه تنظیمی کد بهینه‌تری را برای آن CPU تولید می‌کند، بین نسخه‌های مختلف کامپایلر متفاوت است؛ این لزوماً نشان‌دهندهٔ قابلیت‌های واقعی سخت‌افزار نیست. اگر مایلید یک گزینهٔ منفرد را روی مقدار خاصی تنظیم کنید، می‌توانید آن را پس از گزینهٔ \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 استفاده می‌کند (نمی‌کند)، و همچنین فعال کردن استفاده از توابع توکار که امکان دسترسی مستقیم‌تر به مجموعه دستورالعمل‌های AltiVec را فراهم می‌آورند. همچنین ممکن است برای هماهنگ‌سازی ABI فعلی با بهبودهای ABI مربوط به AltiVec، نیاز به تنظیم \fB\-mabi=altivec\fR داشته باشید. .Sp هنگامی که \fB\-maltivec\fR استفاده می‌شود، ترتیب عناصر برای توابع درونی (intrinsics) مربوط به 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ها برای یک ناحیهٔ قابل وصله (patchable) از طریق گزینهٔ \&\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 و پس از آن با یکدیگر ادغام (fuse) شوند. .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 تولید کدی که از دستورالعمل‌های حافظه‌ای چهارکلمه‌ای اتمیک (atomic quad word) استفاده می‌کند (یا نمی‌کند). گزینهٔ \fB\-mquad\-memory\-atomic\fR نیازمند استفاده از حالت 64\-بیتی است. .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 برای استفاده از پشتیبانی ممیز شناور 128\-بیتی IEEE، مجموعه دستورالعمل‌های VSX (\fB\-mvsx\fR) باید فعال باشد. ممیز شناور 128\-بیتی IEEE تنها روی Linux پشتیبانی می‌شود. .Sp مقدار پیش‌فرض \fB\-mfloat128\fR روی سیستم‌های PowerPC Linux که از مجموعه دستورالعمل‌های VSX استفاده می‌کنند فعال، و روی سایر سیستم‌ها غیرفعال است. .Sp اگر از مجموعه دستورالعمل‌های ISA 3.0 (\fB\-mcpu=power9\fR) روی یک سیستم 64\-بیتی استفاده کنید، پشتیبانی از ممیز شناور 128\-بیتی IEEE همچنین تولید دستورالعمل‌های سخت‌افزاری ممیز شناور 128\-بیتی IEEE در ISA 3.0 را فعال خواهد کرد. در غیر این صورت، اگر تولید دستورالعمل‌های ISA 3.0 را مشخص نکنید یا یک سیستم 32\-بیتی 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 تولید کد برای محیط‌های 32\-بیتی یا 64\-بیتی اهداف Darwin و SVR4 (شامل GNU/Linux). محیط 32\-بیتی نوع‌های int، long و اشاره‌گرها را 32 بیت تنظیم کرده و کدی تولید می‌کند که روی هر گونه‌ای از PowerPC اجرا می‌شود. محیط 64\-بیتی نوع int را 32 بیت و long و اشاره‌گرها را 64 بیت تنظیم کرده، و کدی برای 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 برای هر ارجاع یکتا به متغیر غیرخودکار در برنامهٔ شما اختصاص می‌دهد. GCC همچنین ثابت‌های ممیز شناور را در TOC قرار می‌دهد. با این حال، تنها 16,384 مدخل در 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 و قرارداد فراخوانی 64\-بیتی AIX: اشاره‌گرهای 64\-بیتی، نوع \&\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 داشته باشد. ارسال آرگومان‌های ممیز شناور به توابع دارای الگو (prototyped) فراتر از ناحیهٔ ذخیرهٔ ثبات (RSA) روی پشته، علاوه بر FPRهای آرگومان. عدم فرض بر اینکه پرارزش‌ترین 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). پیوند دادن برنامه‌ای که برای استفاده از ردوبدل پیام با کد راه‌اندازی ویژه‌ای نوشته شده است، تا برنامه بتواند اجرا شود. سیستم باید 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، سیستم‌های 32\-بیتی Darwin، و سیستم‌های 64\-بیتی 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 در سیستم‌های little\-endian مبتنی بر PowerPC استفاده نکنید، زیرا این دستورالعمل‌ها زمانی که پردازنده در حالت 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 تولید کدی که از دستورالعمل‌های بارگذاری یا ذخیره‌سازی که ثبات پایه را با آدرس مکان محاسبه‌شدهٔ حافظه به‌روزرسانی می‌کنند، استفاده می‌کند (استفاده نمی‌کند). این دستورالعمل‌ها به‌طور پیش‌فرض تولید می‌شوند. اگر از \&\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 تولید کدی که تلاش می‌کند از دستورالعمل‌های بارگذاری (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، ساختارها و اجتماع‌هایی که شامل میدان‌های بیتی (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" وابستگی واقعی از ذخیره‌سازی به بارگذاری (store به load) هزینه‌بر است. .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)، کد را با استفاده از قراردادهای فراخوانی منطبق با پیش‌نویس مارس ۱۹۹۵ از رابط باینری کاربردی (ABI) سامانهٔ System V، مکمل پردازندهٔ 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 تعبیه‌شده، کد را برای سامانهٔ گنو بر پایهٔ لینوکس کامپایل می‌کند. .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" تمام ساختارها (struct) را در حافظه بازمی‌گرداند (همان‌گونه که توسط AIX ABI مشخص شده است). .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 پیش‌فرض برای لینوکس ۶۴بیتی PowerPC بزرگ‌انتها (big-endian) است. تغییر ABI پیش‌فرض نیازمند پشتیبانی ویژهٔ سامانه است و احتمال بسیار زیادی دارد که با شکست‌های چشمگیری مواجه شود. .IP \fB\-mabi=elfv2\fR 4 .IX Item "-mabi=elfv2" رابط ABI فعلی را برای استفاده از رابط کاربردی باینری ELFv2 تغییر می‌دهد. این ABI پیش‌فرض برای لینوکس ۶۴بیتی PowerPC کوچک‌انتها (little-endian) است. تغییر 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 تعبیه‌شده، فرض می‌کند که همهٔ فراخوانی‌های توابع با تعداد متغیر آرگومان دارای پیش‌نمونه (prototype) هستند. در غیر این صورت، کامپایلر باید پیش از هر فراخوانیِ فاقد پیش‌نمونه، یک دستورالعمل درج کند تا بیت ۶ ثبات کد شرط (\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 برای اشاره به دو ناحیهٔ داده‌های کوچک مجزا استفاده کند. انتخاب \&\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 تعبیه‌شده، داده‌های کوچک سراسری و ایستای (static) مقداردهی‌شده از نوع \&\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 تعبیه‌شده (embedded)، اگر \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 تعبیه‌شده، تمام داده‌های سراسری و ایستا (static) مقداردهی‌شده را در بخش \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 بایت است، به‌صورت درون‌خطی (inline) درمی‌آورد. حداقل مقدار برای \&\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 (کد واسط) تولید می‌کند. دو آدرس مقصد نشان‌دهندهٔ تابع فراخوانی‌شده و branch island هستند. پیونددهندهٔ Darwin/PPC آدرس اول را ترجیح می‌دهد و اگر دستور PPC \f(CW\*(C`bl\*(C'\fR مستقیماً به تابع فراخوانی‌شده برسد، یک \f(CW\*(C`bl callee\*(C'\fR تولید می‌کند؛ در غیر این صورت، پیونددهنده برای فراخوانی branch island دستور \f(CW\*(C`bl L42\*(C'\fR را تولید می‌نماید. جزیرهٔ انشعاب (branch island) به انتهای بدنهٔ تابع فراخوان پیوست می‌شود؛ این بخش آدرس کامل ۳۲ بیتی تابع فراخوانی‌شده را محاسبه کرده و به آن پرش می‌کند. .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 و اشیاء بازآدرس‌پذیر (relocatable) گزینهٔ \fB\-mbss\-plt\fR در PowerPC ۳۲ بیتی نباید با یکدیگر پیوند داده شوند. .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 این گزینه استفاده از دستورالعمل‌های تخمین معکوس و تخمین ریشهٔ دوم معکوس را با گام‌های اضافی نیوتن\-رافسون (Newton\-Raphson) برای افزایش دقت به‌جای انجام تقسیم یا جذر و تقسیم برای آرگومان‌های ممیز شناور فعال می‌کند. هنگام استفاده از \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) استفاده کنید. توجه داشته باشید که اگرچه بازدهی (throughput) این توالی عموماً بیشتر از بازدهی دستورالعمل غیرمعکوس است، اما دقت توالی برای ریشه‌های دوم معکوس می‌تواند تا ۲ 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" دستورالعمل‌های تقریب معکوس را هم برای دقت تکی (single) و هم دقت مضاعف (double) فعال می‌کند. .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 مورد استفاده برای برداری‌سازی توابع درونی با استفاده از یک کتابخانه خارجی را مشخص می‌کند. تنها نوع پشتیبانی‌شده در حال حاضر \fBmass\fR است، که استفاده از کتابخانه‌های Mathematical Acceleration Subsystem (MASS) متعلق به IBM را برای برداری‌سازی توابع درونی با استفاده از کتابخانه‌های خارجی تعیین می‌کند. در حال حاضر 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 تولید کردن (تولید نکردن) کد برای ذخیره مقدار TOC در مکان رزروشده پشته در مقدمه تابع (function prologue)، اگر تابع در سیستم‌های AIX و لینوکس ۶۴ بیتی از طریق اشاره‌گر فراخوانی شود. اگر مقدار 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) اجرا خواهد شد. .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) برای اشاره به این ناحیه رزرو می‌شود، بنابراین دیگر برای استفاده توسط کامپایلر در دسترس نیست. این امر در صورتی که متغیرها به جای نگهداری در این ثبات به درون پشته رانده شوند (push شوند)، می‌تواند منجر به کدی کندتر و/یا بزرگ‌تر شود. .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 اجازه می‌دهد ثوابتی تا طول ۴ بایت در دستورالعمل‌ها استفاده شوند، مقدار طولانی‌تر به منزله یک دستورالعمل طولانی‌تر است. بنابراین در برخی شرایط می‌تواند محدود کردن اندازه ثوابت مورد استفاده در دستورالعمل‌ها سودمند باشد. ثوابتی که بیش از حد بزرگ باشند، در عوض در یک استخر مقادیر ثابت قرار گرفته و از طریق ارجاع غیرمستقیم ثبات فراخوانی می‌شوند. .Sp مقدار \fIN\fR می‌تواند بین 0 تا 4 باشد. مقدار 0 (پیش‌فرض) یا 4 بدین معناست که ثوابت با هر اندازه‌ای مجاز هستند. .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 می‌تواند بین 0 تا 4 باشد. مقدار 1 بدین معناست که ثبات \f(CW\*(C`r13\*(C'\fR به صورت انحصاری برای گرداننده‌های وقفه سریع رزرو می‌شود. مقدار 2 ثبات‌های \f(CW\*(C`r13\*(C'\fR و \&\f(CW\*(C`r12\*(C'\fR را رزرو می‌کند. مقدار 3 ثبات‌های \f(CW\*(C`r13\*(C'\fR، \f(CW\*(C`r12\*(C'\fR و \&\f(CW\*(C`r11\*(C'\fR را رزرو کرده و مقدار 4 ثبات‌های \f(CW\*(C`r13\*(C'\fR تا \f(CW\*(C`r10\*(C'\fR را رزرو می‌نماید. مقدار 0 (پیش‌فرض) هیچ ثباتی را رزرو نمی‌کند. .IP \fB\-msave\-acc\-in\-interrupts\fR 4 .IX Item "-msave-acc-in-interrupts" مشخص می‌کند که توابع گرداننده وقفه باید ثبات انباره (accumulator register) را حفظ کنند. این کار تنها زمانی ضروری است که کد معمولی ممکن است از ثبات انباره استفاده کند، به عنوان مثال به این دلیل که ضرب‌های ۶۴ بیتی انجام می‌دهد. حالت پیش‌فرض نادیده گرفتن ثبات انباره است چرا که این امر گرداننده‌های وقفه را سریع‌تر می‌کند. .IP \fB\-mpid\fR 4 .IX Item "-mpid" .PD 0 .IP \fB\-mno\-pid\fR 4 .IX Item "-mno-pid" .PD تولید داده‌های مستقل از موقعیت (position independent data) را فعال می‌کند. در هنگام فعال بودن، هرگونه دسترسی به داده‌های ثابت از طریق یک آفست از یک آدرس پایه نگهداری‌شده در یک ثبات انجام می‌شود. این امر اجازه می‌دهد موقعیت داده‌های ثابت در زمان اجرا بدون نیاز به بازآرایی فایل اجرایی تعیین شود، که مزیتی برای برنامه‌های توکار با محدودیت شدید حافظه به شمار می‌رود. داده‌هایی که قابل تغییر هستند تحت تأثیر این گزینه قرار نمی‌گیرند. .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 را فعال یا غیرفعال می‌کند. این دستورالعمل‌ها ممکن است داده‌ها را پیش‌واکشی کنند، که در صورت دسترسی به یک ثبات ورودی/خروجی (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 در فریم پشتهٔ فراخوانی‌شده ذخیره می‌کند (یا ذخیره نمی‌کند). یک backchain ممکن است برای امکان‌پذیر ساختن اشکال‌زدایی با استفاده از ابزارهایی که اطلاعات فریم فراخوانی DWARF را متوجه نمی‌شوند، نیاز باشد. هنگامی که \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 مربوط به GNU/Linux برای S/390 تولید می‌کند. هنگامی که \fB\-m64\fR مشخص شود، کدی سازگار با ABI مربوط به GNU/Linux برای 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 مربوط به GNU/Linux برای S/390، حالت پیش‌فرض \fB\-mesa\fR است. هنگام تولید کد سازگار با ABI مربوط به GNU/Linux برای 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 مجموعه‌ای از توابع درونی (builtins) را فعال می‌کند که از دستورالعمل‌های موجود در امکان اجرای تراکنشی (transactional execution facility) معرفی‌شده با نسل ماشین‌های IBM zEnterprise EC12 استفاده می‌کنند \&\fBS/390 System z Built\-in Functions\fR. هنگام استفاده از \fB\-march=zEC12\fR، گزینهٔ \fB\-mhtm\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 مشخص شود، کدی با استفاده از دستورالعمل‌های موجود در امکان افزونه‌های برداری (vector extension facility) معرفی‌شده با نسل ماشین‌های IBM z13 تولید می‌کند. این گزینه، ABI را برای برخی از مقادیر نوع برداری با توجه به هم‌ترازی (alignment) و قراردادهای فراخوانی تغییر می‌دهد. در صورتی که مقادیر نوع برداری در زمینه‌ای مرتبط با ABI استفاده شوند، دستور \fB.gnu_attribute\fR در GAS اضافه خواهد شد تا باینری حاصل را با ABI استفاده‌شده نشانه‌گذاری کند. هنگام استفاده از \fB\-march=z13\fR، گزینهٔ \fB\-mvx\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، این کلمه باز (expand) نخواهد شد. علاوه بر توابع درونی سطح پایین 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 تولید کدی که از دستورالعمل‌های ضرب و انباشت ممیز شناور استفاده کند (یا نکند). در صورت استفاده از ممیز شناور سخت‌افزاری، این دستورالعمل‌ها به صورت پیش‌فرض تولید می‌شوند. .IP \fB\-mwarn\-framesize=\fR\fIframesize\fR 4 .IX Item "-mwarn-framesize=framesize" صدور یک هشدار اگر اندازهٔ قاب (frame size) تابع فعلی از مقدار داده‌شده فراتر رود. از آنجا که این بررسی در زمان کامپایل انجام می‌شود، لزوماً به این معنا نیست که در زمان اجرای برنامه مشکلی واقعی ایجاد شود. هدف آن شناسایی توابعی است که با احتمال زیاد باعث سرریز پشته (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 نادیده گرفته شود، کوچک‌ترین توان ۲ بزرگ‌تر از اندازهٔ قاب تابع کامپایل‌شده انتخاب می‌شود. این گزینه‌ها برای کمک به اشکال‌زدایی مشکلات سرریز پشته در نظر گرفته شده‌اند. کد اضافهٔ تولیدشده سربار ناچیزی به همراه دارد و از این رو می‌توان آن را در سیستم‌های مشابه محیط عملیاتی (production-like) نیز بدون افت محسوس کارایی به کار برد. مقادیر داده‌شده باید دقیقاً توان‌هایی از ۲ باشند و \fIstack\-size\fR باید بدون تجاوز از 64k، بزرگ‌تر از \&\fIstack\-guard\fR باشد. برای افزایش کارایی، کد اضافه این فرض را در نظر می‌گیرد که پشته از آدرسی هم‌تراز با مقدار ارائه‌شده توسط \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، حداکثر 1000000). پس از برچسب، 2 * \fIpost\-halfwords\fR بایت با استفاده از بزرگ‌ترین دستورالعمل‌های شبه NOP که معماری اجازه می‌دهد، الحاق می‌گردد (حداکثر 1000000). .Sp اگر هر دو آرگومان صفر باشند، امکان hotpatching غیرفعال می‌شود. .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 به گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف استفاده نشود. .IP \fB\-m2a\-single\fR 4 .IX Item "-m2a-single" تولید کد برای SH2a\-FPU با این فرض که واحد ممیز شناور به صورت پیش‌فرض در حالت دقت منفرد باشد. .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 با این فرض که واحد ممیز شناور به‌طور پیش‌فرض در حالت دقت یگانه است. .IP \fB\-m4\-200\-single\-only\fR 4 .IX Item "-m4-200-single-only" تولید کد برای SH4\-200 به گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف استفاده نشود. .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 در مرزهای ۶۴ بیتی. توجه داشته باشید که این کار قراردادهای فراخوانی را تغییر می‌دهد، و در نتیجه برخی از توابع کتابخانهٔ استاندارد 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" درون‌خطی کردن کد برای بی‌اعتبار کردن ورودی‌های حافظهٔ نهان دستورالعمل پس از راه‌اندازی ترامپولین‌های توابع تودرتو. این گزینه اگر \fB\-musermode\fR اعمال شده باشد و گزینهٔ تولید کدِ انتخاب‌شده (مانند \fB\-m4\fR) اجازهٔ استفاده از دستورالعمل \f(CW\*(C`icbi\*(C'\fR را ندهد، هیچ تأثیری ندارد. اگر گزینهٔ تولید کدِ انتخاب‌شده اجازهٔ استفاده از دستورالعمل \f(CW\*(C`icbi\*(C'\fR را ندهد و \fB\-musermode\fR اعمال نشده باشد، کد درون‌خطی‌شده آرایهٔ آدرس حافظهٔ نهان دستورالعمل را مستقیماً با یک نوشتن انجمنی (associative write) دستکاری می‌کند. این کار نه تنها نیازمند حالت ممتاز در زمان اجرا است، بلکه اگر خط حافظهٔ نهان از طریق TLB نگاشت شده و سپس نگاشت آن حذف شده باشد، با شکست مواجه می‌شود. .IP \fB\-misize\fR 4 .IX Item "-misize" تخلیهٔ اندازه و مکان دستورالعمل در کد اسمبلی. .IP \fB\-mpadstruct\fR 4 .IX Item "-mpadstruct" این گزینه منسوخ شده است. این گزینه ساختارها را تا مضربی از ۴ بایت تراز و پد می‌کند، که با ABI معماری SH ناسازگار است. .IP \fB\-matomic\-model=\fR\fImodel\fR 4 .IX Item "-matomic-model=model" مدل عملیات اتمی و پارامترهای اضافی را به صورت فهرستی جداشده با کاما تعیین می‌کند. برای جزئیات در مورد توابع درونی اتمی، بخش \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" تولید توالی‌های اتمی نرم‌افزاری که از یک متغیر در بلوک کنترل رشته (TCB) استفاده می‌کنند. این یک گونه از توالی‌های gUSA است که می‌تواند روی اهداف SH1* و SH2* نیز استفاده شود. توالی‌های اتمی تولیدشده نیازمند پشتیبانی اضافی از کد مدیریت وقفه/استثنای سیستم هستند و تنها برای سیستم‌های تک‌هسته‌ای مناسب می‌باشند. هنگام استفاده از این مدل، پارامتر \fBgbr\-offset=\fR نیز باید مشخص شود. .IP \fBsoft\-imask\fR 4 .IX Item "soft-imask" تولید توالی‌های اتمی نرم‌افزاری که وقفه‌ها را با تنظیم \f(CW\*(C`SR.IMASK = 1111\*(C'\fR موقتاً غیرفعال می‌کنند. این مدل تنها زمانی کار می‌کند که برنامه در حالت ممتاز اجرا شود و فقط برای سیستم‌های تک‌هسته‌ای مناسب است. نیازی به پشتیبانی اضافی از کد مدیریت وقفه/استثنای سیستم نیست. این مدل در صورتی که هدف \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 در دسترس است و برای سیستم‌های چند‌هسته‌ای مناسب می‌باشد. از آنجا که دستورالعمل‌های سخت‌افزاری تنها از متغیرهای اتمی ۳۲ بیتی پشتیبانی می‌کنند، دسترسی به متغیرهای ۸ یا ۱۶ بیتی با دسترسی‌های ۳۲ بیتی شبیه‌سازی می‌شود. کدی که با این گزینه کامپایل شده باشد، در صورت اجرا روی یک سیستم SH4A با سایر سیستم‌های مدیریت وقفه/استثنای مدل اتمی نرم‌افزاری نیز سازگار است. برای این مدل نیازی به پشتیبانی اضافی از کد مدیریت وقفه/استثنای سیستم نیست. .IP \fBgbr\-offset=\fR 4 .IX Item "gbr-offset=" این پارامتر آفست متغیر بر حسب بایت را در ساختار بلوک کنترل رشته مشخص می‌کند که باید هنگام انتخاب مدل \fBsoft\-tcb\fR توسط توالی‌های اتمیِ تولیدشده استفاده شود. برای سایر مدل‌ها این پارامتر نادیده گرفته می‌شود. مقدار مشخص‌شده باید مضرب صحیحی از چهار و در محدودهٔ 0\-1020 باشد. .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. توجه داشته باشید که بسته به پیکربندی سخت‌افزاری و نرم‌افزاری خاص، این گزینه می‌تواند به دلیل تخلیه خطوط کَش عملوند (cache line flushes) که دستور \f(CW\*(C`tas.b\*(C'\fR تحمیل می‌کند، کارایی کلی را کاهش دهد. در پردازنده‌های چند‌هسته‌ای SH4A، دستور \f(CW\*(C`tas.b\*(C'\fR باید با احتیاط استفاده شود زیرا در پیکربندی‌های خاص کَش می‌تواند منجر به خرابی داده‌ها شود. .IP \fB\-mprefergot\fR 4 .IX Item "-mprefergot" هنگام تولید کد مستقل از موقعیت (position\-independent code)، فراخوانی‌های توابع با استفاده از Global Offset Table به جای Procedure Linkage Table منتشر می‌شوند. .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 همچنین در صورتی که کد درون‌خطی در حالت کاربر (user mode) کار نکند، به معنای \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" تنظیم هزینه فرضی برای یک دستور ضرب (multiply insn). .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" تابعی از کتابخانه را فراخوانی می‌کند که عملیات را با ممیز شناور با دقت مضاعف (double precision) انجام می‌دهد. تقسیم بر صفر موجب بروز یک استثنای ممیز شناور می‌شود. این حالت برای SHcompact دارای FPU پیش‌فرض است. مشخص کردن این گزینه برای اهدافی که FPU با دقت مضاعف ندارند، به طور پیش‌فرض به \f(CW\*(C`call\-div1\*(C'\fR تغییر می‌یابد. .IP \fBcall\-table\fR 4 .IX Item "call-table" تابعی از کتابخانه را فراخوانی می‌کند که برای مقسوم‌علیه‌های کوچک از یک جدول جستجو (lookup table) و برای مقسوم‌علیه‌های بزرگ‌تر از دستور \f(CW\*(C`div1\*(C'\fR به همراه تمایز حالت‌ها استفاده می‌کند. تقسیم بر صفر نتیجه‌ای نامشخص محاسبه کرده و ایجاد تله نمی‌کند. این حالت برای SH4 پیش‌فرض است. مشخص کردن این گزینه برای اهدافی که فاقد دستورهای تغییر مکان پویا (dynamic shift) هستند، به طور پیش‌فرض به \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" تولید کد با در نظر گرفتن محدوده ثبات‌های ارائه‌شده به عنوان ثبات‌های ثابت (fixed registers). ثبات ثابت ثباتی است که تخصیص‌دهنده ثبات (register allocator) نمی‌تواند از آن استفاده کند. این ویژگی هنگام کامپایل کد هسته (kernel) مفید است. یک محدوده ثبات به صورت دو ثبات جدا شده با خط تیره مشخص می‌شود. چند محدوده ثبات را می‌توان با ویرگول جدا کرد. .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 تولید کدی که از دستورهای ضرب و جمع ممیز شناور (multiply and accumulate) استفاده می‌کند (یا نمی‌کند). در صورت استفاده از ممیز شناور سخت‌افزاری، این دستورها به صورت پیش‌فرض تولید می‌شوند. گزینه وابسته به ماشین \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 استفاده می‌شود، به کامپایلر می‌گوید هنگام پیوند یک شیء اشتراکی (shared object)، گزینه \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 را مشخص کنید تا خروجی با استفاده از ثبات‌های سراسری ۲ تا ۴ تولید شود؛ ثبات‌هایی که SPARC SVR4 ABI برای برنامه‌های کاربردی رزرو کرده است. مشابه ثبات سراسری ۱، هر یک از ثبات‌های سراسری ۲ تا ۴ به عنوان یک ثبات قابل‌تخصیص در نظر گرفته می‌شوند که با فراخوانی توابع بازنویسی (clobbered) می‌شوند. این حالت پیش‌فرض است. .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) انجام داد. باید تمهیدات لازم را برای فراهم کردن توابع کتابخانه‌ای مناسب جهت کامپایل متقابل در نظر بگیرید. مقصدهای توکار \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" خروجیِ حاوی دستورالعمل‌های ممیز شناور با کلمهٔ چهارگانه (long double یا quad\-word) تولید می‌کند. .IP \fB\-msoft\-quad\-float\fR 4 .IX Item "-msoft-quad-float" خروجیِ حاوی فراخوانی‌های کتابخانه‌ای برای دستورالعمل‌های ممیز شناور با کلمهٔ چهارگانه (long double) تولید می‌کند. توابع فراخوانی‌شده همان‌هایی هستند که در SPARC ABI مشخص شده‌اند. این پیش‌فرض است. .Sp تا زمان نگارش این مستند، هیچ پیاده‌سازی SPARC وجود ندارد که پشتیبانی سخت‌افزاری برای دستورالعمل‌های ممیز شناور با کلمهٔ چهارگانه داشته باشد. همهٔ آن‌ها برای یکی از این دستورالعمل‌ها یک گردانندهٔ تله (trap handler) را فراخوانی می‌کنند، و سپس 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، کامپایلر در توابعی که ساختارها (structures) یا اجتماع‌ها (unions) را بازمی‌گردانند، کدهای بررسی تولید می‌کند تا طبق 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 در این است که کامپایلر دستورالعمل‌های ضرب عدد صحیح (integer multiply) و تقسیم عدد صحیح (integer divide) را صادر می‌کند که در 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 تولید می‌کند. این گزینه دستورالعمل‌های انتقال (move) ممیز شناور و عدد صحیح ۶۴ بیتی، ۳ ثبات کد وضعیت ممیز شناور اضافی و دستورالعمل‌های انتقال شرطی را اضافه می‌کند. با \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 کد را برای SPARC\-V8+ ABI تولید می‌کند. تفاوت آن با 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 کدی تولید می‌کند که از افزونه‌های UltraSPARC Visual Instruction Set بهره می‌برد. پیش‌فرض \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 Visual Instruction Set بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از چنین دستورالعمل‌هایی پشتیبانی می‌کند (مانند 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 Visual Instruction Set بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از چنین دستورالعمل‌هایی پشتیبانی می‌کند (مانند 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 Visual Instruction Set، به‌علاوهٔ دستورالعمل‌های الحاقی 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 Visual Instruction Set بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل‌ها پشتیبانی می‌کند (مانند 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 Visual Instruction Set، به‌علاوهٔ دستورالعمل‌های اضافی 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 کدی تولید می‌کند که از دستورالعمل‌های UltraSPARC Compare\-and\-Branch\-on\-Condition بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از چنین دستورالعمل‌هایی پشتیبانی می‌کند (مانند 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 در 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 کدی تولید می‌کند که از دستورالعمل Floating\-point Multiply Single to Double (FsMULd) بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای با واحد FPU که از معماری‌های نسخهٔ V8 یا V9 پشتیبانی می‌کند (به‌جز \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 کدی تولید می‌کند که از دستورالعمل UltraSPARC Population Count بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از این دستورالعمل پشتیبانی می‌کند (مانند 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 کدی تولید می‌کند که از دستورالعمل UltraSPARC Subtract\-Extended\-with\-Carry بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از چنین دستورالعملی پشتیبانی می‌کند (مانند Niagara\-7 و بعد از آن)، پیش‌فرض \fB\-msubxc\fR است. .IP \fB\-mfix\-at697f\fR 4 .IX Item "-mfix-at697f" راهکار مستندشده (workaround) را برای تک‌خطای سخت‌افزاری (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 و pointer را ۳۲ بیتی تنظیم می‌کند. محیط ۶۴ بیتی نوع int را ۳۲ بیتی، و انواع long و pointer را ۶۴ بیتی تنظیم می‌کند. .IP \fB\-mcmodel=\fR\fIwhich\fR 4 .IX Item "-mcmodel=which" مدل کد (code model) را روی یکی از موارد زیر تنظیم می‌کند: .RS 4 .IP \fBmedlow\fR 4 .IX Item "medlow" مدل کد Medium/Low: آدرس‌های ۶۴ بیتی، برنامه‌ها باید در ۳۲ بیت پایینی حافظه پیوند (link) داده شوند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند یابند..IP \fBmedmid\fR 4 .IX Item "medmid" مدل کد Medium/Middle: آدرس‌های ۶۴\-بیتی، برنامه‌ها باید در ۴۴ بیت پایینی حافظه پیوند داده شوند، قطعه‌های متن (text) و داده (data) باید اندازه‌ای کمتر از 2GB داشته باشند و قطعه داده باید در فاصله 2GB از قطعه متن قرار گیرد. .IP \fBmedany\fR 4 .IX Item "medany" مدل کد Medium/Anywhere: آدرس‌های ۶۴\-بیتی، برنامه‌ها ممکن است در هر کجای حافظه پیوند داده شوند، قطعه‌های متن و داده باید اندازه‌ای کمتر از 2GB داشته باشند و قطعه داده باید در فاصله 2GB از قطعه متن قرار گیرد. .IP \fBembmedany\fR 4 .IX Item "embmedany" مدل کد Medium/Anywhere برای سیستم‌های تعبیه‌شده (embedded): آدرس‌های ۶۴\-بیتی، قطعه‌های متن و داده باید اندازه‌ای کمتر از 2GB داشته باشند و هر دو می‌توانند از هر کجای حافظه شروع شوند (تعیین‌شده در زمان پیوند). ثبات عمومی \f(CW%g4\fR به مبنای قطعه داده اشاره می‌کند. برنامه‌ها به‌صورت ایستا (statically) پیوند داده می‌شوند و 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" جستجو در دایرکتوری‌های \fIdirs\fR، و نه هیچ جای دیگر، برای کتابخانه‌های مشخص‌شده با \fB\-l\fR. .IP \fB\-Ym,\fR\fIdir\fR 4 .IX Item "-Ym,dir" جستجو در دایرکتوری \fIdir\fR برای یافتن پیش‌پردازنده M4. اسمبلر از این گزینه استفاده می‌کند. .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 این گزینه هنگام استفاده از RH850 ABI به‌طور پیش‌فرض فعال است (ببینید \fB\-mrh850\-abi\fR)، و هنگام استفاده از GCC ABI به‌طور پیش‌فرض غیرفعال است. اگر دستورالعمل‌های \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 از V850 ABI را فعال می‌کند. این حالت پیش‌فرض است. با این نسخه از ABI، قوانین زیر اعمال می‌شوند: .RS 4 .IP * 4 ساختارها و اجتماع‌ها با اندازهٔ عدد صحیح، به‌جای ثبات، از طریق یک اشاره‌گر حافظه بازگردانده می‌شوند. .IP * 4 ساختارها و اجتماع‌های بزرگ (با اندازهٔ بیش از ۸ بایت) از طریق مقدار ارسال می‌شوند. .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 از V850 ABI را فعال می‌کند. با این نسخه از ABI، قوانین زیر اعمال می‌شوند: .RS 4 .IP * 4 ساختارها و اجتماع‌ها با اندازهٔ عدد صحیح در ثبات \f(CW\*(C`r10\*(C'\fR بازگردانده می‌شوند. .IP * 4 ساختارها و اجتماع‌های بزرگ (با اندازهٔ بیش از ۸ بایت) از طریق ارجاع ارسال می‌شوند. .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 آغاز می‌شود به‌عنوان روال اصلی برای دیباگر. .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" انتخاب زمان‌های اجرای SMP برای پیونددهی (linking). روی معماری‌های غیر از PowerPC در دسترس نیست، و همچنین در VxWorks نسخهٔ ۷ یا بالاتر، که در آن‌ها این انتخاب بخشی از پیکربندی ساخت VxWorks است و مسیرهای کتابخانه برای هر دو حالت یکسان هستند. .IP \fB\-non\-static\fR 4 .IX Item "-non-static" پیوند دادن یک فایل اجرایی RTP با کتابخانه‌های مشترک به‌جای کتابخانه‌های ایستا. همچنین گزینه‌های \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 مشخص‌شده بهینه‌سازی می‌کند، \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) را فعال می‌کند. بهینه‌سازی خاص را می‌توان با استفاده از گزینهٔ \&\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\-bit و پشتیبانی از مجموعه دستورالعمل‌های MMX، SSE، SSE2، SSE3 و FXSR. .IP \fBcore2\fR 4 .IX Item "core2" پردازنده Intel Core 2 با افزونه‌های 64\-bit و پشتیبانی از مجموعه دستورالعمل‌های 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\-bit و پشتیبانی از مجموعه دستورالعمل‌های MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF و FXSR. .IP \fBwestmere\fR 4 .IX Item "westmere" پردازنده Intel Westmere با افزونه‌های 64\-bit و پشتیبانی از مجموعه دستورالعمل‌های 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\-bit و پشتیبانی از مجموعه دستورالعمل‌های 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\-bit و پشتیبانی از مجموعه دستورالعمل‌های 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\-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. .IP \fBbroadwell\fR 4 .IX Item "broadwell" پردازنده Intel Broadwell با افزونه‌های 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. .IP \fBskylake\fR 4 .IX Item "skylake" پردازنده Intel Skylake با افزونه‌های 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. .IP \fBskylake\-avx512\fR 4 .IX Item "skylake-avx512" پردازنده سرور Intel Skylake با افزونه‌های 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، CLWB، AVX512VL، AVX512BW، AVX512DQ و AVX512CD. .IP \fBcascadelake\fR 4 .IX Item "cascadelake" پردازنده Intel Cascade Lake با افزونه‌های 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، CLWB، AVX512VL، AVX512BW، AVX512DQ، AVX512CD و AVX512VNNI. .IP \fBcannonlake\fR 4 .IX Item "cannonlake" پردازنده سرور Intel Cannon Lake با افزونه‌های 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. .IP \fBcooperlake\fR 4 .IX Item "cooperlake" پردازنده Intel Cooper Lake با افزونه‌های 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، CLWB، AVX512VL، AVX512BW، AVX512DQ، AVX512CD، AVX512VNNI و AVX512BF16. .IP \fBicelake\-client\fR 4 .IX Item "icelake-client" پردازنده کلاینت Intel Ice Lake با افزونه‌های 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. .IP \fBicelake\-server\fR 4 .IX Item "icelake-server" پردازنده سرور Intel Ice Lake با افزونه‌های 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. .IP \fBtigerlake\fR 4 .IX Item "tigerlake" پردازنده Intel Tiger Lake با افزونه‌های 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، MOVDIRI، MOVDIR64B، CLWB، AVX512VP2INTERSECT و KEYLOCKER. .IP \fBrocketlake\fR 4 .IX Item "rocketlake" پردازنده Intel Rocket Lake با افزونه‌های 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، 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\-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، KL، WIDEKL و AVX\-VNNI. .IP \fBarrowlake\fR 4 .IX Item "arrowlake" پردازنده Intel Arrow 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، 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\-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، 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 بهینه‌سازی (tune) می‌شود. در حالی که انتخاب یک \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 مجموعه دستورالعمل‌هایی را مشخص می‌کند که کامپایلر می‌تواند استفاده کند، و هیچ مجموعه دستورالعمل عمومی‌ای وجود ندارد که برای همه پردازنده‌ها قابل‌اعمال باشد. در مقابل، \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 این گزینه پیش‌فرض برای مقصدهای x86\-32 غیر از Darwin است. .IP \fBsse\fR 4 .IX Item "sse" استفاده از دستورالعمل‌های نرده‌ای ممیز شناور موجود در مجموعه دستورالعمل SSE. این مجموعه دستورالعمل توسط تراشه‌های Pentium III و جدیدتر، و در خط تولید AMD توسط تراشه‌های Athlon\-4، Athlon XP و Athlon MP پشتیبانی می‌شود. نسخه اولیه‌ی مجموعه دستورالعمل SSE فقط از محاسبات با دقت یگانه پشتیبانی می‌کند، بنابراین محاسبات با دقت مضاعف و دقت گسترش‌یافته همچنان با استفاده از 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 استفاده کند یا خیر. این‌ها حالتی را که در آن نتیجه یک مقایسه نامرتب است، به‌درستی مدیریت می‌کنند. .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 مرسومِ ماشین استفاده می‌شود، اما در کامپایل چندسکویی نمی‌توان این کار را به‌طور مستقیم انجام داد. شما باید تمهیدات لازم را برای فراهم کردن توابع کتابخانه‌ای مناسب جهت کامپایل چندسکویی شخصاً اتخاذ کنید. .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 مشخص کند که پردازنده هدف همیشه 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 استفاده کنید، ساختارهای حاوی انواع فوق متفاوت از مشخصات منتشرشده رابط باینری کاربردی برای 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 بازمی‌گردند، که آرگومان‌های آن‌ها را در هنگام بازگشت از پشته برمی‌دارد. این کار باعث صرفه‌جویی یک دستور در فراخواننده می‌شود زیرا نیازی به برداشتن آرگومان‌ها در آنجا نیست. .Sp می‌توانید مشخص کنید که یک تابع منفرد با این توالی فراخوانی صدا زده شود، که این کار با صفت تابع \f(CW\*(C`stdcall\*(C'\fR انجام می‌گیرد. همچنین می‌توانید با استفاده از صفت تابع \&\f(CW\*(C`cdecl\*(C'\fR گزینه \fB\-mrtd\fR را لغو و بازنویسی کنید. .Sp \&\fBهشدار:\fR این قرارداد فراخوانی با قراردادی که معمولاً در Unix استفاده می‌شود ناسازگار است، بنابراین اگر نیاز به فراخوانی کتابخانه‌های کامپایل‌شده با کامپایلر Unix دارید، نمی‌توانید از آن استفاده کنید. .Sp همچنین، باید پیش‌نمونه تابع را برای همه توابعی که تعداد متغیری از آرگومان‌ها را دریافت می‌کنند (از جمله \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 مشخص شود، بخش معنادار (significand) نتایج محاسبات ممیز شناور به ۲۴ بیت گرد می‌شوند (دقت یگانه یا single precision)؛ \fB\-mpc64\fR بخش معنادار نتایج محاسبات ممیز شناور را به ۵۳ بیت گرد می‌کند (دقت دوگانه یا double precision) و \fB\-mpc80\fR بخش معنادار نتایج محاسبات ممیز شناور را به ۶۴ بیت گرد می‌کند (دقت دوگانه گسترش‌یافته یا extended double precision) که حالت پیش‌فرض است. هنگامی که از این گزینه استفاده می‌شود، محاسبات ممیز شناور در دقت‌های بالاتر بدون تنظیم صریح کلمه کنترلی FPU در دسترس برنامه‌نویس نخواهد بود. .Sp تنظیم گرد کردن محاسبات ممیز شناور روی مقداری کمتر از مقدار پیش‌فرضِ ۸۰ بیت می‌تواند سرعت برخی برنامه‌ها را ۲٪ یا بیشتر افزایش دهد. توجه داشته باشید که برخی کتابخانه‌های ریاضی فرض می‌کنند که محاسبات ممیز شناور با دقت گسترش‌یافته (۸۰ بیتی) به طور پیش‌فرض فعال است؛ روتین‌های چنین کتابخانه‌هایی ممکن است دچار افت محسوس دقت شوند (معمولاً از طریق پدیده‌ای موسوم به \(lqحذف فاجعه‌بار\(rq یا catastrophic cancellation)، هنگامی که از این گزینه برای تنظیم دقت روی مقداری کمتر از دقت گسترش‌یافته استفاده شود. .IP \fB\-mdaz\-ftz\fR 4 .IX Item "-mdaz-ftz" پرچم‌های flush\-to\-zero (FTZ) و denormals\-are\-zero (DAZ) در ثبات MXCSR برای کنترل محاسبات ممیز شناور استفاده می‌شوند. هنگامی که \fB\-mdaz\-ftz\fR مشخص شود، دستورالعمل‌های SSE و AVX از جمله دستورالعمل‌های اسکالر و برداری می‌توانند از فعال‌سازی پرچم‌های 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 یک دیباچه و مؤخره (prologue و epilogue) جایگزین تولید می‌کند که در صورت لزوم پشته زمان اجرا را دوباره تراز می‌کند. این قابلیت از ترکیب کدهای قدیمی که تراز ۴ بایتی پشته را حفظ می‌کنند با کدهای مدرنی که تراز ۱۶ بایتی پشته را برای سازگاری با 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 این تراز اضافی، فضای بیشتری از پشته را مصرف می‌کند و عموماً باعث افزایش اندازه کد می‌شود. کدهایی که به مصرف فضای پشته حساس هستند، مانند سیستم‌های تعبیه‌شده و هسته‌های سیستم‌عامل، ممکن است بخواهند تراز ترجیحی را به \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 این افزونه‌ها همچنین به عنوان توابع توکار (built\-in) در دسترس هستند: برای جزئیات توابعی که توسط این سوئیچ‌ها فعال و غیرفعال می‌شوند، \&\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 به حداقل برسد و همچنین توابع ذاتی (intrinsics) غیرضروری \f(CW\*(C`zeroupper\*(C'\fR حذف شوند. .IP \fB\-mprefer\-avx128\fR 4 .IX Item "-mprefer-avx128" این گزینه به GCC دستور می‌دهد در بردارساز خودکار از دستورالعمل‌های ۱۲۸ بیتی 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 برای تنظیم پرچم denormals\-are\-zero (DAZ) در ثبات MXCSR کاهش داد. .Sp این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-mmove\-max=\fR\fIbits\fR 4 .IX Item "-mmove-max=bits" این گزینه به GCC دستور می‌دهد حداکثر تعداد بیت‌هایی را که می‌توان به‌طور کارآمد از حافظه به حافظه منتقل کرد روی \fIbits\fR تنظیم کند. مقادیر معتبر \&\fIbits\fR برابر ۱۲۸، ۲۵۶ و ۵۱۲ هستند. .IP \fB\-mstore\-max=\fR\fIbits\fR 4 .IX Item "-mstore-max=bits" این گزینه به GCC دستور می‌دهد حداکثر تعداد بیت‌هایی را که می‌توان به‌طور کارآمد در حافظه ذخیره کرد روی \fIbits\fR تنظیم کند. مقادیر معتبر \fIbits\fR برابر ۱۲۸، ۲۵۶ و ۵۱۲ هستند. .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 را برای بهینه‌سازی جابه‌جایی بایت‌های داده‌های چهار و هشت بایتی فعال می‌کند. .IP \fB\-mshstk\fR 4 .IX Item "-mshstk" گزینهٔ \fB\-mshstk\fR توابع داخلی (built\-in) پشتهٔ سایه (shadow stack) برگرفته از فناوری x86 Control\-flow Enforcement Technology (CET) را فعال می‌کند. .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`DIVSS\*(C'\fR و \f(CW\*(C`SQRTSS\*(C'\fR (و گونه‌های برداری آنها)، استفاده از دستورالعمل‌های \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 جهت افزایش دقت برای آرگومان‌های ممیز شناور با دقت یگانه (single\-precision) فعال می‌کند. این دستورالعمل‌ها تنها زمانی تولید می‌شوند که \fB\-funsafe\-math\-optimizations\fR همراه با \&\fB\-ffinite\-math\-only\fR و \fB\-fno\-trapping\-math\fR فعال باشد. توجه داشته باشید که اگرچه توان عملیاتی (throughput) این توالی بالاتر از دستورالعمل غیرمعکوس است، اما دقت توالی می‌تواند تا ۲ ulp کاهش یابد (یعنی معکوس 1.0 برابر با 0.99999994 می‌شود). .Sp توجه داشته باشید که GCC حتی بدون \fB\-mrecip\fR و تنها با \fB\-ffast\-math\fR (یا ترکیب گزینه‌های فوق)، \&\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) پیاده‌سازی می‌کند. .Sp همچنین توجه داشته باشید که GCC توالی فوق را همراه با گام اضافی Newton\-Raphson برای تقسیم برداری اعشاری با دقت یگانه و \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" تقریب را برای تقسیم اسکالر فعال می‌کند. .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 برای کتابخانهٔ ریاضی بردارهای کوتاه اینتل، \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 باید فعال باشند، و یک کتابخانهٔ سازگار با SVML یا ACML ABI باید در زمان پیوند مشخص شود. .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 ABI هنگام هدف قرار دادن Microsoft Windows و استفاده از 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" تمام فراخوانی‌های توابع را مجبور به غیرمستقیم بودن می‌کند. این گزینه هنگام استفاده از 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" به‌طور پیش‌فرض، ابزار دقیق CET روی عبارت‌های switch که از یک جدول پرش استفاده می‌کنند خاموش است و ردیابی شاخه‌های غیرمستقیم غیرفعال است. از آنجا که جدول‌های پرش در حافظهٔ فقط‌خواندنی نگهداری می‌شوند، این امر منجر به از دست رفتن مستقیم سخت‌سازی امنیتی نمی‌شود. اما اگر اندیس جدول پرش در کنترل مهاجم باشد، پرش غیرمستقیم ممکن است توسط 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) در نظر بگیرد. به‌طور پیش‌فرض، کد ذخیره و بازیابی این ثبات‌ها به صورت درون‌خطی صادر می‌شود، که منجر به پیش‌درآمدها و پس‌درآمدهای نسبتاً طولانی می‌شود. استفاده از \&\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" در صورت فعال بودن، بیشترین فضای مورد نیاز برای آرگومان‌های خروجی در دیباچهٔ تابع (prologue) محاسبه می‌شود. این کار در اکثر پردازنده‌های مدرن به دلیل کاهش وابستگی‌ها، زمان‌بندی بهبودیافته و کاهش استفاده از پشته در حالتی که مرز ترجیحی پشته برابر با ۲ نباشد، سریع‌تر است. عیب آن افزایش قابل توجه اندازه کد است. این گزینه \fB\-mno\-push\-args\fR را نیز در بر دارد. .IP \fB\-mthreads\fR 4 .IX Item "-mthreads" پشتیبانی از مدیریت استثنای امن در برابر ریسه (thread\-safe) در MinGW. برنامه‌هایی که به مدیریت استثنای thread\-safe متکی هستند باید تمام کدها را با گزینهٔ \&\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) سازگار با کامپایلر بومی 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) و هم‌ترازی اعضای ساختارها و اینکه آیا یک میدان‌بیتی می‌تواند از مرز یک واحد ذخیره‌سازی عبور کند یا خیر، با این قوانین تعیین می‌شود: .RS 4 .IP "۱. اعضای ساختار به صورت متوالی و به همان ترتیبی که" 4 .IX Item "1. Structure members are stored sequentially in the order in which they are" اعلان شده‌اند ذخیره می‌شوند: اولین عضو کمترین نشانی حافظه و آخرین عضو بیشترین نشانی را دارد. .IP "۲. هر شیء داده نیازمندی هم‌ترازی دارد. نیازمندی هم‌ترازی" 4 .IX Item "2. Every data object has an alignment requirement. The alignment requirement" برای تمام داده‌ها به جز ساختارها، اجتماع‌ها و آرایه‌ها، اندازه شیء یا اندازه بسته‌بندی فعلی است (که با ویژگی \&\f(CW\*(C`aligned\*(C'\fR یا عمل‌یافت \&\f(CW\*(C`pack\*(C'\fR مشخص می‌شود)، هر کدام که کمتر باشد. برای ساختارها، اجتماع‌ها و آرایه‌ها، نیازمندی هم‌ترازی بزرگ‌ترین نیازمندی هم‌ترازی اعضای آن است. به هر شیء یک آفست اختصاص می‌یابد به‌طوری‌که: .Sp .Vb 1 \& offset % alignment_requirement == 0 .Ve .IP "۳. میدان‌های بیتی مجاور در یک واحد تخصیص ۱، ۲ یا ۴ بایتی" 4 .IX Item "3. Adjacent bit-fields are packed into the same 1-, 2-, or 4-byte allocation" بسته‌بندی می‌شوند در صورتی که انواع عدد صحیح دارای اندازه یکسان باشند و میدان‌بیتی بعدی بدون عبور از مرز تحمیل‌شده توسط نیازمندی‌های هم‌ترازی مشترک میدان‌های بیتی، در واحد تخصیص فعلی جا شود. .RE .RS 4 .Sp کامپایلر MSVC میدان‌های بیتی با طول صفر را به روش‌های زیر تفسیر می‌کند: .IP "۱. اگر یک میدان‌بیتی با طول صفر میان دو میدان‌بیتی که" 4 .IX Item "1. If a zero-length bit-field is inserted between two bit-fields that" به طور عادی ادغام می‌شوند درج شود، آن میدان‌های بیتی ادغام نخواهند شد. .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 "۲. اگر یک میدان‌بیتی با طول صفر پس از یک میدان‌بیتی، ""foo""، درج شود و" 4 .el .IP "۲. اگر یک میدان‌بیتی با طول صفر پس از یک میدان‌بیتی، \f(CWfoo\fR، درج شود و" 4 .IX Item "2. If a zero-length bit-field is inserted after a bit-field, foo, and the" هم‌ترازی میدان‌بیتی با طول صفر بزرگ‌تر از عضوی باشد که پس از آن می‌آید، \&\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 "۱. اگر یک میدان‌بیتی با طول صفر پس از یک میدان‌بیتی عادی بیاید، نوع" 4 .IX Item "1. If a zero-length bit-field follows a normal bit-field, the type of the" میدان‌بیتی با طول صفر ممکن است بر هم‌ترازی کل ساختار تأثیر بگذارد. برای نمونه، \f(CW\*(C`t2\*(C'\fR اندازه‌ای برابر با ۴ بایت دارد، زیرا میدان‌بیتی با طول صفر پس از یک میدان‌بیتی عادی آمده و از نوع short است. .IP "۲. حتی اگر به دنبال میدان‌بیتی با طول صفر یک میدان‌بیتی عادی نیامده باشد، همچنان" 4 .IX Item "2. Even if a zero-length bit-field is not followed by a normal bit-field, it may" ممکن است بر هم‌ترازی ساختار تأثیر بگذارد: .Sp .Vb 5 \& struct \& { \& char foo : 6; \& long : 0; \& } t4; .Ve .Sp در اینجا، \f(CW\*(C`t4\*(C'\fR معادل ۴ بایت فضا اشغال می‌کند. .RE .RS 4 .RE .IP "۳. میدان‌های بیتی با طول صفر که پس از اعضای غیر میدان‌بیتی می‌آیند نادیده گرفته می‌شوند:" 4 .IX Item "3. Zero-length bit-fields following non-bit-field members are ignored:" .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" روش ابتکاری (heuristic) تصمیم‌گیری داخلی را برای الگوریتم خاص مورد استفاده جهت درون‌خطی‌سازی عملیات‌های رشته‌ای بازنویسی (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 بسط به یک حلقه درون‌خطی. .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 تولید می‌کند که حاوی اشاره‌گرهایی به هر فراخوانی پروفایل‌سازی است. این گزینه برای وصله‌کردن خودکار فراخوانی‌ها به درون و بیرون مفید است. .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 با یک فراخوانی به تابع مشخص‌شده ابزاردقیق (instrument) می‌کند. این کار فقط بازگشت‌های واقعی منتهی به ret را ابزاردقیق می‌کند، نه فراخوانی‌های هم‌سطح منتهی به 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 برای جلوگیری از ذخیره غیرضروری ثبات‌های برداری روی پشته هنگام ارسال آرگومان‌های متغیر استفاده می‌شود، پیامدهای این گزینه این است که توابع فراخوانی‌شده ممکن است مقداری از فضای پشته را هدر دهند، عملکرد نادرست داشته باشند یا به یک مکان تصادفی پرش کنند. کامپایلر 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 بارگذاری و ذخیره‌سازی غیرتراز ۳۲ بایتی 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" کدی تولید می‌کند که فقط از ثبات‌های همه‌منظوره استفاده می‌کند. این کار از استفاده کامپایلر از ثبات‌های ممیز شناور، برداری، ماسک و کران جلوگیری می‌کند. .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" بازگشت از تابع (function return) را با \fIchoice\fR تبدیل می‌کند. پیش‌فرض \fBkeep\fR است که بازگشت تابع را بدون تغییر نگه می‌دارد. \fBthunk\fR بازگشت تابع را به فراخوانی و بازگشت thunk تبدیل می‌کند. \fBthunk\-inline\fR بازگشت تابع را به یک فراخوانی و بازگشت thunk درون‌خطی تبدیل می‌نماید. \fBthunk\-extern\fR بازگشت تابع را به فراخوانی و بازگشت خارجی thunk ارائه‌شده در یک فایل شیء (object file) جداگانه تبدیل می‌کند. می‌توانید این رفتار را برای یک تابع خاص با استفاده از ویژگی تابع \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" فراخوانی و پرش غیرمستقیم را از طریق ثبات (register) اجبار می‌کند. .IP \fB\-mharden\-sls=\fR\fIchoice\fR 4 .IX Item "-mharden-sls=choice" کدی برای کاهش خطرات گمانه‌زنی خط مستقیم (SLS) با مقدار \&\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 در inline asm، از گزینهٔ جدید کامپایلر \&\-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 الزامی شده است؛ این ناحیه فضایی ۱۲۸ بایتی فراتر از مکان اشاره‌گر پشته (stack pointer) است که توسط گرداننده‌های سیگنال یا وقفه تغییر نمی‌کند و بنابراین می‌تواند برای داده‌های موقت بدون نیاز به تنظیم اشاره‌گر پشته استفاده شود. پرچم \fB\-mno\-red\-zone\fR این منطقه سرخ را غیرفعال می‌کند. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" برای مدل کد کوچک (small code model) کد تولید می‌کند: برنامه و نمادهای آن باید در ۲ گیگابایت پایینی فضای آدرس پیوند (link) داده شوند. اشاره‌گرها ۶۴ بیتی هستند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. این مدل کد پیش‌فرض است. .IP \fB\-mcmodel=kernel\fR 4 .IX Item "-mcmodel=kernel" برای مدل کد هسته (kernel code model) کد تولید می‌کند. هسته در ۲ گیگابایت منفی فضای آدرس اجرا می‌شود. این مدل باید برای کد هستهٔ Linux استفاده شود. .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 را برای هدف Linux منتشر می‌کند تا سطح ریزمعماری 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، دسترسی به نمادهای محافظت‌شده را همانند نمادهای محلی تلقی می‌کند. مقدار پیش‌فرض \&\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 (ماسک‌گذاری آدرس خطی) امکان استفاده از بیت‌های خاصی در اشاره‌گر را برای فراداده (metadata) فراهم می‌سازد. مقدار پیش‌فرض \fBnone\fR است. با \fBu48\fR، بیت‌های موقعیت‌های ۶۲:۴۸ اشاره‌گر می‌توانند برای فراداده استفاده شوند؛ با \fBu57\fR، بیت‌های موقعیت‌های ۶۲:۵۷ اشاره‌گر می‌توانند برای فراداده به‌کار روند. .PP \fIگزینه‌های x86 ویندوز (x86 Windows Options)\fR .IX Subsection "x86 Windows Options" .PP \fIگزینه‌های Xstormy16 (Xstormy16 Options)\fR .IX Subsection "Xstormy16 Options" .PP این گزینه‌ها برای Xstormy16 تعریف شده‌اند: .IP \fB\-msim\fR 4 .IX Item "-msim" فایل‌های راه‌اندازی (startup files) و اسکریپت پیونددهندهٔ مناسب برای شبیه‌ساز را انتخاب می‌کند. .PP \fIگزینه‌های Xtensa (Xtensa Options)\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 فعال یا غیرفعال کردن استفاده از دستورالعمل‌های ضرب/جمع و ضرب/تفریق ادغام‌شده در گزینهٔ ممیز شناور. اگر گزینهٔ ممیز شناور نیز فعال نباشد، این گزینه اثری ندارد. غیرفعال کردن دستورالعمل‌های ضرب/جمع و ضرب/تفریق ادغام‌شده، کامپایلر را ملزم به استفاده از دستورالعمل‌های جداگانه برای عملیات‌های ضرب و جمع/تفریق می‌کند. این کار ممکن است در مواردی که نتایج کاملاً منطبق بر استاندارد 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 درج می‌کند تا سازگاری ترتیبی را تضمین کند. مقدار پیش‌فرض \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 را برای کامپایل کد کرنل غیرفعال می‌کند. .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 است که لیترال‌ها را در یک بخش جداگانه در فایل خروجی قرار می‌دهد. این کار اجازه می‌دهد استخر لیترال در RAM/ROM داده قرار گیرد و همچنین به پیونددهنده اجازه می‌دهد تا استخرهای لیترال را از فایل‌های شیءِ (object) مجزا ترکیب کند تا لیترال‌های تکراری حذف شوند و اندازهٔ کد بهبود یابد. با \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`L32R\*(C'\fR با دستورالعمل‌های \f(CW\*(C`MOVI\*(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 به اسمبلر دستور می‌دهد تا دستورالعمل‌ها را به‌طور خودکار تراز کند تا جریمه‌های انشعاب به بهای از دست رفتن مقداری از تراکم کد کاهش یابد. اسمبلر تلاش می‌کند دستورالعمل‌های تراکم (density instructions) را تعریض کند تا مقصدهای انشعاب و دستورالعمل‌های پس از دستورهای فراخوانی تراز شوند. اگر دستورالعمل‌های تراکم امن پیشینِ کافی برای تراز کردن یک مقصد وجود نداشته باشد، هیچ تعریضی انجام نمی‌شود. مقدار پیش‌فرض \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 ممکن است به عنوان اشاره‌گر فریم استفاده شود. هنگامی که این نسخه از ABI فعال باشد، نماد پیش‌پردازندهٔ C با نام \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 فعال باشد، نماد پیش‌پردازندهٔ C با نام \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 را بازنویسی می‌کند؛ در غیر این صورت، \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 به گرداننده کامپایلر است. برای جزئیات بیشتر به مستندات این گزینه مراجعه کنید. .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 که برای پیوند دادن استفاده می‌شوند به کار می‌رود. .Sp علاوه بر این، پیشوند به روشی غیرمعمول در یافتن دایرکتوری‌ها برای جستجوی فایل‌های سرآیند استفاده می‌شود. به ازای هر یک از دایرکتوری‌های استانداردی که نام آن‌ها به طور معمول با \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 نتواند فایل‌های پیونددهنده ویژه را با استفاده از \fBGCC_EXEC_PREFIX\fR پیدا کند، دایرکتوری‌های مشخص‌شده به این ترتیب را امتحان می‌کند. پیوند زدن با استفاده از GCC همچنین از این دایرکتوری‌ها هنگام جستجو برای کتابخانه‌های معمولی برای گزینه \fB\-l\fR استفاده می‌کند (اما دایرکتوری‌های مشخص‌شده با \&\fB\-L\fR اولویت دارند). .IP \fBLANG\fR 4 .IX Item "LANG" این متغیر برای ارسال اطلاعات محلی به کامپایلر استفاده می‌شود. یکی از کاربردهای این اطلاعات تعیین مجموعه‌نویسه‌ای است که باید هنگام تجزیه لیترال‌های نویسه‌ای، لیترال‌های رشته‌ای و کامنت‌ها در 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 باشد که در این حالت قواعد با استفاده از \fItarget\fR به عنوان نام هدف، در فایل \fIfile\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 را مشخص می‌کند تا به جای تاریخ و زمان جاری در ماکروهای \f(CW\*(C`_\|_DATE_\|_\*(C'\fR و \f(CW\*(C`_\|_TIME_\|_\*(C'\fR به کار رود، به‌گونه‌ای که برچسب‌های زمانی تعبیه‌شده بازتولیدپذیر گردند. .Sp مقدار \fBSOURCE_DATE_EPOCH\fR باید یک برچسب زمان UNIX باشد که به عنوان تعداد ثانیه‌ها (بدون احتساب ثانیه‌های کبیسه) از 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 از افزودن کد راه‌اندازی برای تغییر محیط ممیز شناور، آن‌گونه که با \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 یا هر نگارش بعدی منتشرشده توسط Free Software Foundation صادر شده است؛ با بخش‌های تغییرناپذیر «GNU General Public License» و «Funding Free Software»، متن‌های روی جلد (a) (پایین را ببینید) و متن‌های پشت جلد (b) (پایین را ببینید). رونوشتی از این مجوز در صفحه راهنمای \fBgfdl\fR\|(7) گنجانده شده است. .PP (a) متن روی جلد FSF عبارت است از: .PP .Vb 1 \& A GNU Manual .Ve .PP (b) متن پشت جلد 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