.\" -*- 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 را فراخوانی می‌کنید، معمولاً پیش‌پردازش، کامپایل، اسمبلی و پیونددهی (linking) را انجام می‌دهد. «گزینه‌های کلی» به شما امکان می‌دهند این فرآیند را در یک مرحله میانی متوقف کنید. برای نمونه، گزینه‌ی \fB\-c\fR مشخص می‌کند که پیونددهنده اجرا نشود. در این صورت، خروجی شامل فایل‌های شیء (object files) تولیدشده توسط اسمبلر خواهد بود. .PP گزینه‌های دیگر به یک یا چند مرحله از پردازش منتقل می‌شوند. برخی گزینه‌ها پیش‌پردازنده و برخی دیگر خود کامپایلر را کنترل می‌کنند. گزینه‌های دیگری نیز اسمبلر و پیونددهنده را کنترل می‌کنند؛ بیشتر این گزینه‌ها در اینجا مستند نشده‌اند، چرا که به‌ندرت به استفاده از آن‌ها نیاز خواهید داشت. .PP بیشتر گزینه‌های خط فرمانی که می‌توانید با GCC استفاده کنید برای برنامه‌های C کاربرد دارند؛ هنگامی که یک گزینه تنها برای زبان دیگری (معمولاً C++) کاربرد داشته باشد، در توضیحات صراحتاً به آن اشاره می‌شود. اگر توضیحات یک گزینه‌ی خاص زبانی مبدأ را ذکر نکرده باشد، می‌توانید از آن گزینه برای تمام زبان‌های پشتیبانی‌شده استفاده کنید. .PP روش معمول برای اجرای GCC، اجرای فایل اجرایی با نام \fBgcc\fR است، یا \&\fImachine\fR\fB\-gcc\fR هنگام کامپایل متقاطع (cross-compiling)، یا \&\fImachine\fR\fB\-gcc\-\fR\fIversion\fR برای اجرای نسخه‌ای خاص از GCC. هنگامی که برنامه‌های C++ را کامپایل می‌کنید، باید در عوض GCC را با عنوان \fBg++\fR فراخوانی کنید. .PP برنامه‌ی \fBgcc\fR گزینه‌ها و نام‌های فایل را به عنوان عملوند می‌پذیرد. بسیاری از گزینه‌ها نام‌های چندحرفی دارند؛ بنابراین چندین گزینه‌ی تک‌حرفی \fIنمی‌توانند\fR با یکدیگر گروه‌بندی شوند: \fB\-dv\fR با \fB\-d\ \-v\fR بسیار متفاوت است. .PP می‌توانید گزینه‌ها و دیگر آرگومان‌ها را با هم ترکیب کنید. در بیشتر موارد، ترتیبی که استفاده می‌کنید اهمیتی ندارد. ترتیب زمانی اهمیت پیدا می‌کند که از چند گزینه‌ی هم‌نوع استفاده کنید؛ برای مثال، اگر \fB\-L\fR را بیش از یک بار مشخص کنید، دایرکتوری‌ها به همان ترتیب مشخص‌شده جستجو می‌شوند. همچنین، جایگاه قرارگیری گزینه‌ی \fB\-l\fR نیز مهم است. .PP بسیاری از گزینه‌ها نام‌های بلندی دارند که با \fB\-f\fR یا \&\fB\-W\fR آغاز می‌شوند؛ برای مثال، \&\fB\-fmove\-loop\-invariants\fR، \fB\-Wformat\fR و غیره. بیشتر این گزینه‌ها هم حالت مثبت و هم حالت منفی دارند؛ حالت منفی \&\fB\-ffoo\fR به صورت \fB\-fno\-foo\fR است. این راهنما تنها یکی از این دو حالت را، هرکدام که پیش‌فرض نباشد، مستند می‌کند. .PP برخی گزینه‌ها یک یا چند آرگومان می‌گیرند که معمولاً یا با یک فاصله یا با علامت مساوی (\fB=\fR) از نام گزینه جدا می‌شوند. مگر در مواردی که خلاف آن مستند شده باشد، یک آرگومان می‌تواند عددی یا یک رشته باشد. آرگومان‌های عددی معمولاً باید اعداد صحیح کوچک بدون علامت در مبنای ده یا شانزده (hexadecimal) باشند. آرگومان‌های مبنای شانزده باید با پیشوند \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گزینه‌های ابزارگذاری برنامه (Program Instrumentation Options)\fR" 4 .IX Item "Program Instrumentation Options" \&\fB\-p \-pg \-fprofile\-arcs \-\-coverage \-ftest\-coverage \&\-fcondition\-coverage \&\-fpath\-coverage \&\-fprofile\-abs\-path \&\-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate \-fprofile\-generate=\fR\fIpath\fR \&\fB\-fprofile\-info\-section \-fprofile\-info\-section=\fR\fIname\fR \&\fB\-fprofile\-note=\fR\fIpath\fR \fB\-fprofile\-prefix\-path=\fR\fIpath\fR \&\fB\-fprofile\-update=\fR\fImethod\fR \fB\-fprofile\-filter\-files=\fR\fIregex\fR \&\fB\-fprofile\-exclude\-files=\fR\fIregex\fR \&\fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel\-runs\fR|\fBserial\fR] \&\fB\-fsanitize=\fR\fIstyle\fR \fB\-fsanitize\-recover \-fsanitize\-recover=\fR\fIstyle\fR \&\fB\-fsanitize\-trap \-fsanitize\-trap=\fR\fIstyle\fR \&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,... \&\-fsanitize\-undefined\-trap\-on\-error \-fbounds\-check \-fcf\-protection \&\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR|\fBcheck\fR] \&\fB\-fharden\-compares \-fharden\-conditional\-branches \-fhardened \&\-fharden\-control\-flow\-redundancy \-fhardcfr\-skip\-leaf \&\-fhardcfr\-check\-exceptions \-fhardcfr\-check\-returning\-calls \&\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno\-xthrow\fR|\fBnothrow\fR|\fBnever\fR] \&\fB\-fstack\-protector \-fstack\-protector\-all \-fstack\-protector\-strong \&\-fstack\-protector\-explicit \-fstack\-check \&\-fstack\-limit\-register=\fR\fIreg\fR \fB\-fstack\-limit\-symbol=\fR\fIsym\fR \&\fB\-fno\-stack\-limit \-fsplit\-stack \&\-fstrub=disable \-fstrub=strict \-fstrub=relaxed \&\-fstrub=all \-fstrub=at\-calls \-fstrub=internal \&\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] \&\fB\-fvtv\-counts \-fvtv\-debug \&\-finstrument\-functions \-finstrument\-functions\-once \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... \&\-fprofile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \&\fB\-fpatchable\-function\-entry=\fR\fIN\fR[\fB,\fR\fIM\fR] .IP "\fIگزینه‌های پیش‌پردازنده (Preprocessor Options)\fR" 4 .IX Item "Preprocessor Options" \&\fB\-A\fR\fIquestion\fR\fB=\fR\fIanswer\fR \&\fB\-A\-\fR\fIquestion\fR[\fB=\fR\fIanswer\fR] \&\fB\-C \-CC \-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \&\fB\-dD \-dI \-dM \-dN \-dU \&\-fdebug\-cpp \-fdirectives\-only \-fdollars\-in\-identifiers \&\-fexec\-charset=\fR\fIcharset\fR \fB\-fextended\-identifiers \&\-finput\-charset=\fR\fIcharset\fR \&\fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \fB\-fmax\-include\-depth=\fR\fIdepth\fR \&\fB\-fno\-canonical\-system\-headers \-fpch\-deps \-fpch\-preprocess \&\-fpreprocessed \-ftabstop=\fR\fIwidth\fR \fB\-ftrack\-macro\-expansion \&\-fwide\-exec\-charset=\fR\fIcharset\fR \fB\-fworking\-directory \&\-H \-imacros\fR \fIfile\fR \fB\-include\fR \fIfile\fR \&\fB\-M \-MD \-MF \-MG \-MM \-MMD \-MP \-MQ \-MT \-Mno\-modules \&\-no\-integrated\-cpp \-P \-pthread \-remap \&\-traditional \-traditional\-cpp \-trigraphs \&\-U\fR\fImacro\fR \fB\-undef \&\-Wp,\fR\fIoption\fR \fB\-Xpreprocessor\fR \fIoption\fR .IP "\fIگزینه‌های اسمبلر (Assembler Options)\fR" 4 .IX Item "Assembler Options" \&\fB\-Wa,\fR\fIoption\fR \fB\-Xassembler\fR \fIoption\fR .IP "\fIگزینه‌های پیونددهنده (Linker Options)\fR" 4 .IX Item "Linker Options" \&\fIobject\-file\-name\fR \fB\-fuse\-ld=\fR\fIlinker\fR \fB\-l\fR\fIlibrary\fR \&\fB\-nostartfiles \-nodefaultlibs \-nolibc \-nostdlib \-nostdlib++ \&\-e\fR \fIentry\fR \fB\-\-entry=\fR\fIentry\fR \&\fB\-pie \-pthread \-r \-rdynamic \&\-s \-static \-static\-pie \-static\-libgcc \-static\-libstdc++ \&\-static\-libasan \-static\-libtsan \-static\-liblsan \-static\-libubsan \&\-shared \-shared\-libgcc \-symbolic \&\-T\fR \fIscript\fR \fB\-Wl,\fR\fIoption\fR \fB\-Xlinker\fR \fIoption\fR \&\fB\-u\fR \fIsymbol\fR \fB\-z\fR \fIkeyword\fR .IP "\fIگزینه‌های دایرکتوری (Directory Options)\fR" 4 .IX Item "Directory Options" \&\fB\-B\fR\fIprefix\fR \fB\-I\fR\fIdir\fR \fB\-I\- \&\-idirafter\fR \fIdir\fR \&\fB\-imacros\fR \fIfile\fR \fB\-imultilib\fR \fIdir\fR \&\fB\-iplugindir=\fR\fIdir\fR \fB\-iprefix\fR \fIfile\fR \&\fB\-iquote\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR \fB\-isystem\fR \fIdir\fR \&\fB\-iwithprefix\fR \fIdir\fR \fB\-iwithprefixbefore\fR \fIdir\fR \&\fB\-\-embed\-dir=\fR\fIdir\fR \&\fB\-L\fR\fIdir\fR \fB\-no\-canonical\-prefixes \-\-no\-sysroot\-suffix \&\-nostdinc \-nostdinc++ \-\-sysroot=\fR\fIdir\fR .IP "\fIگزینه‌های تولید کد (Code Generation Options)\fR" 4 .IX Item "Code Generation Options" \&\fB\-fcall\-saved\-\fR\fIreg\fR \fB\-fcall\-used\-\fR\fIreg\fR \&\fB\-ffixed\-\fR\fIreg\fR \fB\-fexceptions \&\-fnon\-call\-exceptions \-fdelete\-dead\-exceptions \-funwind\-tables \&\-fasynchronous\-unwind\-tables \&\-fno\-gnu\-unique \&\-finhibit\-size\-directive \-fcommon \-fno\-ident \&\-fpcc\-struct\-return \-fpic \-fPIC \-fpie \-fPIE \-fno\-plt \&\-fno\-jump\-tables \-fno\-bit\-tests \&\-frecord\-gcc\-switches \&\-freg\-struct\-return \-fshort\-enums \-fshort\-wchar \&\-fverbose\-asm \-fpack\-struct[=\fR\fIn\fR\fB] \&\-fleading\-underscore \-ftls\-model=\fR\fImodel\fR \&\fB\-fstack\-reuse=\fR\fIreuse_level\fR \&\fB\-ftrampolines \-ftrampoline\-impl=\fR[\fBstack\fR|\fBheap\fR] \&\fB\-ftrapv \-fwrapv \&\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] \&\fB\-fstrict\-volatile\-bitfields \-fsync\-libcalls \&\-fzero\-init\-padding\-bits=\fR\fIvalue\fR .IP "\fIگزینه‌های توسعه‌دهنده (Developer Options)\fR" 4 .IX Item "Developer Options" \&\fB\-d\fR\fIletters\fR \fB\-dumpspecs \-dumpmachine \-dumpversion \&\-dumpfullversion \-fcallgraph\-info\fR[\fB=su,da\fR] \&\fB\-fchecking \-fchecking=\fR\fIn\fR \&\fB\-fdbg\-cnt\-list \-fdbg\-cnt=\fR\fIcounter\-value\-list\fR \&\fB\-fdisable\-ipa\-\fR\fIpass_name\fR \&\fB\-fdisable\-rtl\-\fR\fIpass_name\fR \&\fB\-fdisable\-rtl\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR \&\fB\-fdisable\-tree\-\fR\fIpass_name\fR \&\fB\-fdisable\-tree\-\fR\fIpass\-name\fR\fB=\fR\fIrange\-list\fR \&\fB\-fdump\-debug \-fdump\-earlydebug \&\-fdump\-noaddr \-fdump\-unnumbered \-fdump\-unnumbered\-links \&\-fdump\-final\-insns\fR[\fB=\fR\fIfile\fR] \&\fB\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline \&\-fdump\-lang\-all \&\-fdump\-lang\-\fR\fIswitch\fR \&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR \&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR \&\fB\-fdump\-passes \&\-fdump\-rtl\-\fR\fIpass\fR \fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR \&\fB\-fdump\-statistics \&\-fdump\-tree\-all \&\-fdump\-tree\-\fR\fIswitch\fR \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR] \fB\-fcompare\-debug\-second \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR \&\fB\-fira\-verbose=\fR\fIn\fR \&\fB\-flto\-report \-flto\-report\-wpa \-fmem\-report\-wpa \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \&\-fopt\-info \-fopt\-info\-\fR\fIoptions\fR[\fB=\fR\fIfile\fR] \&\fB\-fmultiflags \-fprofile\-report \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose \&\-fstats \-fstack\-usage \-ftime\-report \-ftime\-report\-details \&\-fvar\-tracking\-assignments\-toggle \-gtoggle \&\-print\-file\-name=\fR\fIlibrary\fR \fB\-print\-libgcc\-file\-name \&\-print\-multi\-directory \-print\-multi\-lib \-print\-multi\-os\-directory \&\-print\-prog\-name=\fR\fIprogram\fR \fB\-print\-search\-dirs \-Q \&\-print\-sysroot \-print\-sysroot\-headers\-suffix \&\-save\-temps \-save\-temps=cwd \-save\-temps=obj \-time\fR[\fB=\fR\fIfile\fR] .IP "\fIگزینه‌های وابسته به ماشین (Machine\-Dependent Options)\fR" 4 .IX Item "Machine-Dependent Options" \&\fIگزینه‌های AArch64\fR (\fBAArch64 Options\fR) \&\fB\-mabi=\fR\fIname\fR \fB\-mbig\-endian \-mlittle\-endian \&\-mgeneral\-regs\-only \&\-mcmodel=tiny \-mcmodel=small \-mcmodel=large \&\-mstrict\-align \-mno\-strict\-align \&\-momit\-leaf\-frame\-pointer \&\-mtls\-dialect=desc \-mtls\-dialect=traditional \&\-mtls\-size=\fR\fIsize\fR \&\fB\-mfix\-cortex\-a53\-835769 \-mfix\-cortex\-a53\-843419 \&\-mlow\-precision\-recip\-sqrt \-mlow\-precision\-sqrt \-mlow\-precision\-div \&\-mpc\-relative\-literal\-loads \&\-msign\-return\-address=\fR\fIscope\fR \&\fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR \&\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR\fB|\fR\fIgcs\fR \&\fB\-mharden\-sls=\fR\fIopts\fR \&\fB\-march=\fR\fIname\fR \fB\-mcpu=\fR\fIname\fR \fB\-mtune=\fR\fIname\fR \&\fB\-moverride=\fR\fIstring\fR \fB\-mverbose\-cost\-dump \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIsysreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \fB\-mtrack\-speculation \&\-moutline\-atomics \-mearly\-ldp\-fusion \-mlate\-ldp\-fusion \&\-Wexperimental\-fmv\-target\fR .Sp \&\fIگزینه‌های Adapteva Epiphany\fR (\fBAdapteva Epiphany Options\fR) \&\fB\-mhalf\-reg\-file \-mprefer\-short\-insn\-regs \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcmove \-mnops=\fR\fInum\fR \fB\-msoft\-cmpsf \&\-msplit\-lohi \-mpost\-inc \-mpost\-modify \-mstack\-offset=\fR\fInum\fR \&\fB\-mround\-nearest \-mlong\-calls \-mshort\-calls \-msmall16 \&\-mfp\-mode=\fR\fImode\fR \fB\-mvect\-double \-max\-vect\-align=\fR\fInum\fR \&\fB\-msplit\-vecmove\-early \-m1reg\-\fR\fIreg\fR .Sp \&\fIگزینه‌های AMD GCN\fR (\fBAMD GCN Options\fR) \&\fB\-march=\fR\fIgpu\fR \fB\-mtune=\fR\fIgpu\fR \fB\-mstack\-size=\fR\fIbytes\fR .Sp \&\fIگزینه‌های ARC\fR (\fBARC Options\fR) \&\fB\-mbarrel\-shifter \-mjli\-always \&\-mcpu=\fR\fIcpu\fR \fB\-mA6 \-mARC600 \-mA7 \-mARC700 \&\-mdpfp \-mdpfp\-compact \-mdpfp\-fast \-mno\-dpfp\-lrsr \&\-mea \-mno\-mpy \-mmul32x16 \-mmul64 \-matomic \&\-mnorm \-mspfp \-mspfp\-compact \-mspfp\-fast \-msimd \-msoft\-float \-mswap \&\-mcrc \-mdsp\-packa \-mdvbf \-mlock \-mmac\-d16 \-mmac\-24 \-mrtsc \-mswape \&\-mtelephony \-mxy \-misize \-mannotate\-align \-marclinux \-marclinux_prof \&\-mlong\-calls \-mmedium\-calls \-msdata \-mirq\-ctrl\-saved \&\-mrgf\-banked\-regs \-mlpc\-width=\fR\fIwidth\fR \fB\-G\fR \fInum\fR \&\fB\-mvolatile\-cache \-mtp\-regno=\fR\fIregno\fR \&\fB\-malign\-call \-mauto\-modify\-reg \-mbbit\-peephole \-mno\-brcc \&\-mcase\-vector\-pcrel \-mcompact\-casesi \-mno\-cond\-exec \-mearly\-cbranchsi \&\-mexpand\-adddi \-mindexed\-loads \-mlra \-mlra\-priority\-none \&\-mlra\-priority\-compact \-mlra\-priority\-noncompact \-mmillicode \&\-mmixed\-code \-mq\-class \-mRcq \-mRcw \-msize\-level=\fR\fIlevel\fR \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmultcost=\fR\fInum\fR \fB\-mcode\-density\-frame \&\-munalign\-prob\-threshold=\fR\fIprobability\fR \fB\-mmpy\-option=\fR\fImulto\fR \&\fB\-mdiv\-rem \-mcode\-density \-mll64 \-mfpu=\fR\fIfpu\fR \fB\-mrf16 \-mbranch\-index\fR .Sp \&\fIگزینه‌های ARM\fR (\fBARM Options\fR) \&\fB\-mapcs\-frame \-mno\-apcs\-frame \&\-mabi=\fR\fIname\fR \&\fB\-mapcs\-stack\-check \-mno\-apcs\-stack\-check \&\-mapcs\-reentrant \-mno\-apcs\-reentrant \&\-mgeneral\-regs\-only \&\-msched\-prolog \-mno\-sched\-prolog \&\-mlittle\-endian \-mbig\-endian \&\-mbe8 \-mbe32 \&\-mfloat\-abi=\fR\fIname\fR \&\fB\-mfp16\-format=\fR\fIname\fR \&\fB\-mthumb\-interwork \-mno\-thumb\-interwork \&\-mcpu=\fR\fIname\fR \fB\-march=\fR\fIname\fR \fB\-mfpu=\fR\fIname\fR \&\fB\-mtune=\fR\fIname\fR \fB\-mprint\-tune\-info \&\-mstructure\-size\-boundary=\fR\fIn\fR \&\fB\-mabort\-on\-noreturn \&\-mlong\-calls \-mno\-long\-calls \&\-msingle\-pic\-base \-mno\-single\-pic\-base \&\-mpic\-register=\fR\fIreg\fR \&\fB\-mnop\-fun\-dllimport \&\-mpoke\-function\-name \&\-mthumb \-marm \-mflip\-thumb \&\-mtpcs\-frame \-mtpcs\-leaf\-frame \&\-mcaller\-super\-interworking \-mcallee\-super\-interworking \&\-mtp=\fR\fIname\fR \fB\-mtls\-dialect=\fR\fIdialect\fR \&\fB\-mword\-relocations \&\-mfix\-cortex\-m3\-ldrd \&\-mfix\-cortex\-a57\-aes\-1742098 \&\-mfix\-cortex\-a72\-aes\-1655431 \&\-munaligned\-access \&\-mneon\-for\-64bits \&\-mslow\-flash\-data \&\-masm\-syntax\-unified \&\-mrestrict\-it \&\-mverbose\-cost\-dump \&\-mpure\-code \&\-mcmse \&\-mfix\-cmse\-cve\-2021\-35465 \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \&\fB\-mfdpic \&\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB] [+\fR\fIbti\fR\fB]|\fR\fIbti\fR\fB[+\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB]]\fR .Sp \&\fIگزینه‌های AVR\fR (\fBAVR Options\fR) \&\fB\-mmcu=\fR\fImcu\fR \fB\-mabsdata \-maccumulate\-args \-mcvt \&\-mbranch\-cost=\fR\fIcost\fR \fB\-mfuse\-add=\fR\fIlevel\fR \fB\-mfuse\-move=\fR\fIlevel\fR \&\fB\-mfuse\-move2 \-mcall\-prologues \-mgas\-isr\-prologues \-mint8 \-mflmap \&\-mdouble=\fR\fIbits\fR \fB\-mlong\-double=\fR\fIbits\fR \fB\-mno\-call\-main \&\-mn_flash=\fR\fIsize\fR \fB\-mfract\-convert\-truncate \-mno\-interrupts \&\-mmain\-is\-OS_task \-mrelax \-mrmw \-mstrict\-X \-mtiny\-stack \&\-mrodata\-in\-ram \-msplit\-bit\-shift \-msplit\-ldst \-mshort\-calls \&\-mskip\-bug \-muse\-nonzero\-bits \-nodevicelib \-nodevicespecs \&\-Waddr\-space\-convert \-Wmisspelled\-isr\fR .Sp \&\fIگزینه‌های Blackfin\fR (\fBBlackfin Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] \&\fB\-msim \-momit\-leaf\-frame\-pointer \-mno\-omit\-leaf\-frame\-pointer \&\-mspecld\-anomaly \-mno\-specld\-anomaly \-mcsync\-anomaly \-mno\-csync\-anomaly \&\-mlow\-64k \-mno\-low64k \-mstack\-check\-l1 \-mid\-shared\-library \&\-mno\-id\-shared\-library \-mshared\-library\-id=\fR\fIn\fR \&\fB\-mleaf\-id\-shared\-library \-mno\-leaf\-id\-shared\-library \&\-msep\-data \-mno\-sep\-data \-mlong\-calls \-mno\-long\-calls \&\-mfast\-fp \-minline\-plt \-mmulticore \-mcorea \-mcoreb \-msdram \&\-micplb\fR .Sp \&\fIگزینه‌های C6X\fR (\fBC6X Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \-march=\fR\fIcpu\fR \&\fB\-msim \-msdata=\fR\fIsdata\-type\fR .Sp \&\fIگزینه‌های CRIS\fR (\fBCRIS Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR \fB\-march=\fR\fIcpu\fR \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmax\-stack\-frame=\fR\fIn\fR \&\fB\-metrax4 \-metrax100 \-mpdebug \-mcc\-init \-mno\-side\-effects \&\-mstack\-align \-mdata\-align \-mconst\-align \&\-m32\-bit \-m16\-bit \-m8\-bit \-mno\-prologue\-epilogue \&\-melf \-maout \-sim \-sim2 \&\-mmul\-bug\-workaround \-mno\-mul\-bug\-workaround\fR .Sp \&\fIگزینه‌های C\-SKY\fR (\fBC\-SKY Options\fR) \&\fB\-march=\fR\fIarch\fR \fB\-mcpu=\fR\fIcpu\fR \&\fB\-mbig\-endian \-EB \-mlittle\-endian \-EL \&\-mhard\-float \-msoft\-float \-mfpu=\fR\fIfpu\fR \fB\-mdouble\-float \-mfdivdu \&\-mfloat\-abi=\fR\fIname\fR \&\fB\-melrw \-mistack \-mmp \-mcp \-mcache \-msecurity \-mtrust \&\-mdsp \-medsp \-mvdsp \&\-mdiv \-msmart \-mhigh\-registers \-manchor \&\-mpushpop \-mmultiple\-stld \-mconstpool \-mstack\-size \-mccrt \&\-mbranch\-cost=\fR\fIn\fR \fB\-mcse\-cc \-msched\-prolog \-msim\fR .Sp \&\fIگزینه‌های Cygwin و MinGW\fR (\fBCygwin and MinGW Options\fR) \&\fB\-mconsole \-mcrtdll=\fR\fIlibrary\fR \fB\-mdll \&\-mnop\-fun\-dllimport \-mthread \&\-municode \-mwin32 \-mwindows \-fno\-set\-stack\-executable\fR .Sp \&\fIگزینه‌های Darwin\fR (\fBDarwin Options\fR) \&\fB\-all_load \-allowable_client \-arch \-arch_errors_fatal \&\-arch_only \-bind_at_load \-bundle \-bundle_loader \&\-client_name \-compatibility_version \-current_version \&\-dead_strip \&\-dependency\-file \-dylib_file \-dylinker_install_name \&\-dynamic \-dynamiclib \-exported_symbols_list \&\-filelist \-flat_namespace \-force_cpusubtype_ALL \&\-force_flat_namespace \-headerpad_max_install_names \&\-iframework \&\-image_base \-init \-install_name \-keep_private_externs \&\-multi_module \-multiply_defined \-multiply_defined_unused \&\-noall_load \-no_dead_strip_inits_and_terms \-nodefaultrpaths \&\-nofixprebinding \-nomultidefs \-noprebind \-noseglinkedit \&\-pagezero_size \-prebind \-prebind_all_twolevel_modules \&\-private_bundle \-read_only_relocs \-sectalign \&\-sectobjectsymbols \-whyload \-seg1addr \&\-sectcreate \-sectobjectsymbols \-sectorder \&\-segaddr \-segs_read_only_addr \-segs_read_write_addr \&\-seg_addr_table \-seg_addr_table_filename \-seglinkedit \&\-segprot \-segs_read_only_addr \-segs_read_write_addr \&\-single_module \-static \-sub_library \-sub_umbrella \&\-twolevel_namespace \-umbrella \-undefined \&\-unexported_symbols_list \-weak_reference_mismatches \&\-whatsloaded \-F \-gused \-gfull \-mmacosx\-version\-min=\fR\fIversion\fR \&\fB\-mkernel \-mone\-byte\-bool\fR .Sp \&\fIگزینه‌های DEC Alpha\fR (\fBDEC Alpha Options\fR) \&\fB\-mno\-fp\-regs \-msoft\-float \&\-mieee \-mieee\-with\-inexact \-mieee\-conformant \&\-mfp\-trap\-mode=\fR\fImode\fR \fB\-mfp\-rounding\-mode=\fR\fImode\fR \&\fB\-mtrap\-precision=\fR\fImode\fR \fB\-mbuild\-constants \&\-mcpu=\fR\fIcpu\-type\fR \fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mbwx \-mmax \-mfix \-mcix \&\-msafe\-bwa \-msafe\-partial \&\-mfloat\-vax \-mfloat\-ieee \&\-mexplicit\-relocs \-msmall\-data \-mlarge\-data \&\-msmall\-text \-mlarge\-text \&\-mmemory\-latency=\fR\fItime\fR .Sp \&\fIگزینه‌های eBPF\fR (\fBeBPF Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \&\-mframe\-limit=\fR\fIbytes\fR \fB\-mxbpf \-mco\-re \-mno\-co\-re \-mjmpext \&\-mjmp32 \-malu32 \-mv3\-atomics \-mbswap \-msdiv \-msmov \-mcpu=\fR\fIversion\fR \&\fB\-masm=\fR\fIdialect\fR \fB\-minline\-memops\-threshold=\fR\fIbytes\fR .Sp \&\fIگزینه‌های FR30\fR (\fBFR30 Options\fR) \&\fB\-msmall\-model \-mno\-lsim\fR .Sp \&\fIگزینه‌های FT32\fR (\fBFT32 Options\fR) \&\fB\-msim \-mlra \-mnodiv \-mft32b \-mcompress \-mnopm\fR .Sp \&\fIگزینه‌های FRV\fR (\fBFRV Options\fR) \&\fB\-mgpr\-32 \-mgpr\-64 \-mfpr\-32 \-mfpr\-64 \&\-mhard\-float \-msoft\-float \&\-malloc\-cc \-mfixed\-cc \-mdword \-mno\-dword \&\-mdouble \-mno\-double \&\-mmedia \-mno\-media \-mmuladd \-mno\-muladd \&\-mfdpic \-minline\-plt \-mgprel\-ro \-multilib\-library\-pic \&\-mlinked\-fp \-mlong\-calls \-malign\-labels \&\-mlibrary\-pic \-macc\-4 \-macc\-8 \&\-mpack \-mno\-pack \-mno\-eflags \-mcond\-move \-mno\-cond\-move \&\-moptimize\-membar \-mno\-optimize\-membar \&\-mscc \-mno\-scc \-mcond\-exec \-mno\-cond\-exec \&\-mvliw\-branch \-mno\-vliw\-branch \&\-mmulti\-cond\-exec \-mno\-multi\-cond\-exec \-mnested\-cond\-exec \&\-mno\-nested\-cond\-exec \-mtomcat\-stats \&\-mTLS \-mtls \&\-mcpu=\fR\fIcpu\fR .Sp \&\fIگزینه‌های GNU/Linux\fR (\fBGNU/Linux Options\fR) \&\fB\-mglibc \-muclibc \-mmusl \-mbionic \-mandroid \&\-tno\-android\-cc \-tno\-android\-ld\fR .Sp \&\fIگزینه‌های H8/300\fR (\fBH8/300 Options\fR) \&\fB\-mrelax \-mh \-ms \-mn \-mexr \-mno\-exr \-mint32 \-malign\-300\fR .Sp \&\fIگزینه‌های HPPA\fR (\fBHPPA Options\fR) \&\fB\-march=\fR\fIarchitecture\-type\fR \&\fB\-matomic\-libcalls \-mbig\-switch \&\-mcaller\-copies \-mdisable\-fpregs \-mdisable\-indexing \&\-mordered \-mfast\-indirect\-calls \-mgas \-mgnu\-ld \-mhp\-ld \&\-mfixed\-range=\fR\fIregister\-range\fR \&\fB\-mcoherent\-ldcw \-mjump\-in\-delay \-mlinker\-opt \-mlong\-calls \&\-mlong\-load\-store \-mno\-atomic\-libcalls \-mno\-disable\-fpregs \&\-mno\-disable\-indexing \-mno\-fast\-indirect\-calls \-mno\-gas \&\-mno\-jump\-in\-delay \-mno\-long\-load\-store \&\-mno\-portable\-runtime \-mno\-soft\-float \&\-mno\-space\-regs \-msoft\-float \-mpa\-risc\-1\-0 \&\-mpa\-risc\-1\-1 \-mpa\-risc\-2\-0 \-mportable\-runtime \&\-mschedule=\fR\fIcpu\-type\fR \fB\-mspace\-regs \-msoft\-mult \-msio \-mwsio \&\-munix=\fR\fIunix\-std\fR \fB\-nolibdld \-static \-threads\fR .Sp \&\fIگزینه‌های IA\-64\fR (\fBIA\-64 Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \-mgnu\-as \-mgnu\-ld \-mno\-pic \&\-mvolatile\-asm\-stop \-mregister\-names \-msdata \-mno\-sdata \&\-mconstant\-gp \-mauto\-pic \-mfused\-madd \&\-minline\-float\-divide\-min\-latency \&\-minline\-float\-divide\-max\-throughput \&\-mno\-inline\-float\-divide \&\-minline\-int\-divide\-min\-latency \&\-minline\-int\-divide\-max\-throughput \&\-mno\-inline\-int\-divide \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput \&\-mno\-inline\-sqrt \&\-mdwarf2\-asm \-mearly\-stop\-bits \&\-mfixed\-range=\fR\fIregister\-range\fR \fB\-mtls\-size=\fR\fItls\-size\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-milp32 \-mlp64 \&\-msched\-br\-data\-spec \-msched\-ar\-data\-spec \-msched\-control\-spec \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec \&\-msched\-spec\-ldc \-msched\-spec\-control\-ldc \&\-msched\-prefer\-non\-data\-spec\-insns \-msched\-prefer\-non\-control\-spec\-insns \&\-msched\-stop\-bits\-after\-every\-cycle \-msched\-count\-spec\-in\-critical\-path \&\-msel\-sched\-dont\-check\-control\-spec \-msched\-fp\-mem\-deps\-zero\-cost \&\-msched\-max\-memory\-insns\-hard\-limit \-msched\-max\-memory\-insns=\fR\fImax\-insns\fR .Sp \&\fIگزینه‌های LM32\fR (\fBLM32 Options\fR) \&\fB\-mbarrel\-shift\-enabled \-mdivide\-enabled \-mmultiply\-enabled \&\-msign\-extend\-enabled \-muser\-enabled\fR .Sp \&\fIگزینه‌های LoongArch\fR (\fBLoongArch Options\fR) \&\fB\-march=\fR\fIarch\-type\fR \fB\-mtune=\fR\fItune\-type\fR \fB\-mabi=\fR\fIbase\-abi\-type\fR \&\fB\-mfpu=\fR\fIfpu\-type\fR \fB\-msimd=\fR\fIsimd\-type\fR \&\fB\-msoft\-float \-msingle\-float \-mdouble\-float \-mlsx \-mno\-lsx \-mlasx \-mno\-lasx \&\-mbranch\-cost=\fR\fIn\fR \fB\-maddr\-reg\-reg\-cost=\fR\fIn\fR \fB\-mcheck\-zero\-division \&\-mno\-check\-zero\-division \&\-mcond\-move\-int \-mno\-cond\-move\-int \&\-mcond\-move\-float \-mno\-cond\-move\-float \&\-memcpy \-mno\-memcpy \-mstrict\-align \-mno\-strict\-align \-G\fR \fInum\fR \&\fB\-mmax\-inline\-memcpy\-size=\fR\fIn\fR \&\fB\-mexplicit\-relocs=\fR\fIstyle\fR \fB\-mexplicit\-relocs \-mno\-explicit\-relocs \&\-mdirect\-extern\-access \-mno\-direct\-extern\-access \&\-mcmodel=\fR\fIcode\-model\fR \fB\-mrelax \-mpass\-mrelax\-to\-as \&\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mfrecipe \-mno\-frecipe \-mdiv32 \-mno\-div32 \&\-mlam\-bh \-mno\-lam\-bh \-mlamcas \-mno\-lamcas \-mld\-seq\-sa \-mno\-ld\-seq\-sa \&\-mtls\-dialect=\fR\fIopt\fR \fB\-mannotate\-tablejump \-mno\-annotate\-tablejump\fR .Sp \&\fIگزینه‌های M32C\fR (\fBM32C Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR .Sp \&\fIگزینه‌های M32R/D\fR (\fBM32R/D Options\fR) \&\fB\-m32r2 \-m32rx \-m32r \&\-mdebug \&\-malign\-loops \-mno\-align\-loops \&\-missue\-rate=\fR\fInumber\fR \&\fB\-mbranch\-cost=\fR\fInumber\fR \&\fB\-mmodel=\fR\fIcode\-size\-model\-type\fR \&\fB\-msdata=\fR\fIsdata\-type\fR \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR \&\fB\-G\fR \fInum\fR .Sp \&\fIگزینه‌های M680x0\fR (\fBM680x0 Options\fR) \&\fB\-march=\fR\fIarch\fR \fB\-mcpu=\fR\fIcpu\fR \fB\-mtune=\fR\fItune\fR \&\fB\-m68000 \-m68020 \-m68020\-40 \-m68020\-60 \-m68030 \-m68040 \&\-m68060 \-mcpu32 \-m5200 \-m5206e \-m528x \-m5307 \-m5407 \&\-mcfv4e \-mbitfield \-mno\-bitfield \-mc68000 \-mc68020 \&\-mnobitfield \-mrtd \-mno\-rtd \-mdiv \-mno\-div \-mshort \&\-mno\-short \-mhard\-float \-m68881 \-msoft\-float \-mpcrel \&\-malign\-int \-mstrict\-align \-msep\-data \-mno\-sep\-data \&\-mshared\-library\-id=n \-mid\-shared\-library \-mno\-id\-shared\-library \&\-mxgot \-mno\-xgot \-mlong\-jump\-table\-offsets\fR .Sp \&\fIگزینه‌های MCore\fR (\fBMCore Options\fR) \&\fB\-mhardlit \-mno\-hardlit \-mdiv \-mno\-div \-mrelax\-immediates \&\-mno\-relax\-immediates \-mwide\-bitfields \-mno\-wide\-bitfields \&\-m4byte\-functions \-mno\-4byte\-functions \-mcallgraph\-data \&\-mno\-callgraph\-data \-mslow\-bytes \-mno\-slow\-bytes \-mno\-lsim \&\-mlittle\-endian \-mbig\-endian \-m210 \-m340 \-mstack\-increment\fR .Sp \&\fIگزینه‌های MicroBlaze\fR (\fBMicroBlaze Options\fR) \&\fB\-msoft\-float \-mhard\-float \-msmall\-divides \-mcpu=\fR\fIcpu\fR \&\fB\-mmemcpy \-mxl\-soft\-mul \-mxl\-soft\-div \-mxl\-barrel\-shift \&\-mxl\-pattern\-compare \-mxl\-stack\-check \-mxl\-gp\-opt \-mno\-clearbss \&\-mxl\-multiply\-high \-mxl\-float\-convert \-mxl\-float\-sqrt \&\-mbig\-endian \-mlittle\-endian \-mxl\-reorder \-mxl\-mode\-\fR\fIapp\-model\fR \&\fB\-mpic\-data\-is\-text\-relative\fR .Sp \&\fIگزینه‌های MIPS\fR (\fBMIPS Options\fR) \&\fB\-EL \-EB \-march=\fR\fIarch\fR \fB\-mtune=\fR\fIarch\fR \&\fB\-mips1 \-mips2 \-mips3 \-mips4 \-mips32 \-mips32r2 \-mips32r3 \-mips32r5 \&\-mips32r6 \-mips64 \-mips64r2 \-mips64r3 \-mips64r5 \-mips64r6 \&\-mips16 \-mno\-mips16 \-mflip\-mips16 \&\-minterlink\-compressed \-mno\-interlink\-compressed \&\-minterlink\-mips16 \-mno\-interlink\-mips16 \&\-mabi=\fR\fIabi\fR \fB\-mabicalls \-mno\-abicalls \&\-mshared \-mno\-shared \-mplt \-mno\-plt \-mxgot \-mno\-xgot \&\-mgp32 \-mgp64 \-mfp32 \-mfpxx \-mfp64 \-mhard\-float \-msoft\-float \&\-mno\-float \-msingle\-float \-mdouble\-float \&\-modd\-spreg \-mno\-odd\-spreg \&\-mabs=\fR\fImode\fR \fB\-mnan=\fR\fIencoding\fR \&\fB\-mdsp \-mno\-dsp \-mdspr2 \-mno\-dspr2 \&\-mmcu \-mmno\-mcu \&\-meva \-mno\-eva \&\-mvirt \-mno\-virt \&\-mxpa \-mno\-xpa \&\-mcrc \-mno\-crc \&\-mginv \-mno\-ginv \&\-mmicromips \-mno\-micromips \&\-mmsa \-mno\-msa \&\-mloongson\-mmi \-mno\-loongson\-mmi \&\-mloongson\-ext \-mno\-loongson\-ext \&\-mloongson\-ext2 \-mno\-loongson\-ext2 \&\-mfpu=\fR\fIfpu\-type\fR \&\fB\-msmartmips \-mno\-smartmips \&\-mpaired\-single \-mno\-paired\-single \-mdmx \-mno\-mdmx \&\-mips3d \-mno\-mips3d \-mmt \-mno\-mt \-mllsc \-mno\-llsc \&\-mlong64 \-mlong32 \-msym32 \-mno\-sym32 \&\-G\fR\fInum\fR \fB\-mlocal\-sdata \-mno\-local\-sdata \&\-mextern\-sdata \-mno\-extern\-sdata \-mgpopt \-mno\-gopt \&\-membedded\-data \-mno\-embedded\-data \&\-muninit\-const\-in\-rodata \-mno\-uninit\-const\-in\-rodata \&\-mcode\-readable=\fR\fIsetting\fR \&\fB\-msplit\-addresses \-mno\-split\-addresses \&\-mexplicit\-relocs \-mno\-explicit\-relocs \&\-mexplicit\-relocs=\fR\fIrelease\fR \&\fB\-mcheck\-zero\-division \-mno\-check\-zero\-division \&\-mdivide\-traps \-mdivide\-breaks \&\-mload\-store\-pairs \-mno\-load\-store\-pairs \&\-mstrict\-align \-mno\-strict\-align \&\-mno\-unaligned\-access \-munaligned\-access \&\-mmemcpy \-mno\-memcpy \-mlong\-calls \-mno\-long\-calls \&\-mmad \-mno\-mad \-mimadd \-mno\-imadd \-mfused\-madd \-mno\-fused\-madd \-nocpp \&\-mfix\-24k \-mno\-fix\-24k \&\-mfix\-r4000 \-mno\-fix\-r4000 \-mfix\-r4400 \-mno\-fix\-r4400 \&\-mfix\-r5900 \-mno\-fix\-r5900 \&\-mfix\-r10000 \-mno\-fix\-r10000 \-mfix\-rm7000 \-mno\-fix\-rm7000 \&\-mfix\-vr4120 \-mno\-fix\-vr4120 \&\-mfix\-vr4130 \-mno\-fix\-vr4130 \-mfix\-sb1 \-mno\-fix\-sb1 \&\-mflush\-func=\fR\fIfunc\fR \fB\-mno\-flush\-func \&\-mbranch\-cost=\fR\fInum\fR \fB\-mbranch\-likely \-mno\-branch\-likely \&\-mcompact\-branches=\fR\fIpolicy\fR \&\fB\-mfp\-exceptions \-mno\-fp\-exceptions \&\-mvr4130\-align \-mno\-vr4130\-align \-msynci \-mno\-synci \&\-mlxc1\-sxc1 \-mno\-lxc1\-sxc1 \-mmadd4 \-mno\-madd4 \&\-mrelax\-pic\-calls \-mno\-relax\-pic\-calls \-mmcount\-ra\-address \&\-mframe\-header\-opt \-mno\-frame\-header\-opt\fR .Sp \&\fIگزینه‌های MMIX\fR (\fBMMIX Options\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 (\fBMN10300 Options\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 (\fBMoxie Options\fR) \&\fB\-meb \-mel \-mmul.x \-mno\-crt0\fR .Sp \&\fIگزینه‌های MSP430\fR (\fBMSP430 Options\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 (\fBNDS32 Options\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 (\fBNvidia PTX Options\fR) \&\fB\-m64 \-mmainkernel \-moptimize\fR .Sp \&\fIگزینه‌های OpenRISC\fR (\fBOpenRISC Options\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 (\fBPDP\-11 Options\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 (\fBPRU Options\fR) \&\fB\-mmcu=\fR\fImcu\fR \fB\-minrt \-mno\-relax \-mloop \&\-mabi=\fR\fIvariant\fR .Sp \&\fIگزینه‌های RISC\-V\fR (\fBRISC\-V Options\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 (\fBRL78 Options\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 (\fBRS/6000 and PowerPC Options\fR) \&\fB\-mcpu=\fR\fIcpu\-type\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \&\fB\-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 (\fBRX Options\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 (\fBS/390 and zSeries Options\fR) \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-march=\fR\fIcpu\-type\fR \&\fB\-mhard\-float \-msoft\-float \-mhard\-dfp \-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 (\fBSH Options\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 (\fBSolaris 2 Options\fR) \&\fB\-mclear\-hwcap \-mno\-clear\-hwcap \-mimpure\-text \-mno\-impure\-text \&\-pthreads\fR .Sp \&\fIگزینه‌های SPARC\fR (\fBSPARC Options\fR) \&\fB\-mcpu=\fR\fIcpu\-type\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \&\fB\-mmemory\-model=\fR\fImem\-model\fR \&\fB\-m32 \-m64 \-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 (\fBSystem V Options\fR) \&\fB\-Qy \-Qn \-YP,\fR\fIpaths\fR \fB\-Ym,\fR\fIdir\fR .Sp \&\fIگزینه‌های V850\fR (\fBV850 Options\fR) \&\fB\-mlong\-calls \-mno\-long\-calls \-mep \-mno\-ep \&\-mprolog\-function \-mno\-prolog\-function \-mspace \&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR \&\fB\-mapp\-regs \-mno\-app\-regs \&\-mdisable\-callt \-mno\-disable\-callt \&\-mv850e2v3 \-mv850e2 \-mv850e1 \-mv850es \&\-mv850e \-mv850 \-mv850e3v5 \&\-mloop \&\-mrelax \&\-mlong\-jumps \&\-msoft\-float \&\-mhard\-float \&\-mgcc\-abi \&\-mrh850\-abi \&\-mbig\-switch\fR .Sp \&\fIگزینه‌های VAX\fR (\fBVAX Options\fR) \&\fB\-munix \-mgnu \-md \-md\-float \-mg \-mg\-float \-mlra\fR .Sp \&\fIگزینه‌های Visium\fR (\fBVisium Options\fR) \&\fB\-mdebug \-msim \-mfpu \-mno\-fpu \-mhard\-float \-msoft\-float \&\-mcpu=\fR\fIcpu\-type\fR \fB\-mtune=\fR\fIcpu\-type\fR \fB\-msv\-mode \-muser\-mode\fR .Sp \&\fIگزینه‌های VMS\fR (\fBVMS Options\fR) \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64 \&\-mpointer\-size=\fR\fIsize\fR .Sp \&\fIگزینه‌های VxWorks\fR (\fBVxWorks Options\fR) \&\fB\-mrtp \-msmp \-non\-static \-Bstatic \-Bdynamic \&\-Xbind\-lazy \-Xbind\-now\fR .Sp \&\fIگزینه‌های x86\fR (\fBx86 Options\fR) \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-march=\fR\fIcpu\-type\fR \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR \fB\-mdump\-tune\-features \-mno\-default \&\-mfpmath=\fR\fIunit\fR \&\fB\-masm=\fR\fIdialect\fR \fB\-mno\-fancy\-math\-387 \&\-mno\-fp\-ret\-in\-387 \-m80387 \-mhard\-float \-msoft\-float \&\-mno\-wide\-multiply \-mrtd \-malign\-double \&\-mpreferred\-stack\-boundary=\fR\fInum\fR \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR \&\fB\-mcld \-mcx16 \-msahf \-mmovbe \-mcrc32 \-mmwait \&\-mrecip \-mrecip=\fR\fIopt\fR \&\fB\-mvzeroupper \-mprefer\-avx128 \-mprefer\-vector\-width=\fR\fIopt\fR \&\fB\-mpartial\-vector\-fp\-math \&\-mmove\-max=\fR\fIbits\fR \fB\-mstore\-max=\fR\fIbits\fR \&\fB\-mnoreturn\-no\-callee\-saved\-registers \&\-mmmx \-msse \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx \&\-mavx2 \-mavx512f \-mavx512cd \-mavx512vl \&\-mavx512bw \-mavx512dq \-mavx512ifma \-mavx512vbmi \-msha \-maes \&\-mpclmul \-mfsgsbase \-mrdrnd \-mf16c \-mfma \-mpconfig \-mwbnoinvd \&\-mptwrite \-mclflushopt \-mclwb \-mxsavec \-mxsaves \&\-msse4a \-m3dnow \-m3dnowa \-mpopcnt \-mabm \-mbmi \-mtbm \-mfma4 \-mxop \&\-madx \-mlzcnt \-mbmi2 \-mfxsr \-mxsave \-mxsaveopt \-mrtm \-mhle \-mlwp \&\-mmwaitx \-mclzero \-mpku \-mthreads \-mgfni \-mvaes \-mwaitpkg \&\-mshstk \-mmanual\-endbr \-mcet\-switch \-mforce\-indirect\-call \&\-mavx512vbmi2 \-mavx512bf16 \-menqcmd \&\-mvpclmulqdq \-mavx512bitalg \-mmovdiri \-mmovdir64b \-mavx512vpopcntdq \&\-mavx512vnni \-mprfchw \-mrdpid \&\-mrdseed \-msgx \-mavx512vp2intersect \-mserialize \-mtsxldtrk \&\-mamx\-tile \-mamx\-int8 \-mamx\-bf16 \-muintr \-mhreset \-mavxvnni \-mamx\-fp8 \&\-mavx512fp16 \-mavxifma \-mavxvnniint8 \-mavxneconvert \-mcmpccxadd \-mamx\-fp16 \&\-mprefetchi \-mraoint \-mamx\-complex \-mavxvnniint16 \-msm3 \-msha512 \-msm4 \-mapxf \&\-musermsr \-mavx10.1 \-mavx10.1\-256 \-mavx10.1\-512 \-mevex512 \-mavx10.2 \&\-mamx\-avx512 \-mamx\-tf32 \-mamx\-transpose \-mmovrs \-mamx\-movrs \&\-mcldemote \-mms\-bitfields \-mno\-align\-stringops \-minline\-all\-stringops \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR \&\fB\-mkl \-mwidekl \&\-mmemcpy\-strategy=\fR\fIstrategy\fR \fB\-mmemset\-strategy=\fR\fIstrategy\fR \&\fB\-mpush\-args \-maccumulate\-outgoing\-args \-m128bit\-long\-double \&\-m96bit\-long\-double \-mlong\-double\-64 \-mlong\-double\-80 \-mlong\-double\-128 \&\-mregparm=\fR\fInum\fR \fB\-msseregparm \&\-mveclibabi=\fR\fItype\fR \fB\-mvect8\-ret\-in\-mem \&\-mpc32 \-mpc64 \-mpc80 \-mdaz\-ftz \-mstackrealign \&\-momit\-leaf\-frame\-pointer \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs \&\-mcmodel=\fR\fIcode\-model\fR \fB\-mabi=\fR\fIname\fR \fB\-maddress\-mode=\fR\fImode\fR \&\fB\-m32 \-m64 \-mx32 \-m16 \-miamcu \-mlarge\-data\-threshold=\fR\fInum\fR \&\fB\-msse2avx \-mfentry \-mrecord\-mcount \-mnop\-mcount \-m8bit\-idiv \&\-minstrument\-return=\fR\fItype\fR \fB\-mfentry\-name=\fR\fIname\fR \fB\-mfentry\-section=\fR\fIname\fR \&\fB\-mavx256\-split\-unaligned\-load \-mavx256\-split\-unaligned\-store \&\-malign\-data=\fR\fItype\fR \fB\-mstack\-protector\-guard=\fR\fIguard\fR \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \&\fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR \&\fB\-mgeneral\-regs\-only \-mcall\-ms2sysv\-xlogues \-mrelax\-cmpxchg\-loop \&\-mindirect\-branch=\fR\fIchoice\fR \fB\-mfunction\-return=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-register \-mharden\-sls=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-cs\-prefix \-mneeded \-mno\-direct\-extern\-access \&\-munroll\-only\-small\-loops \-mlam=\fR\fIchoice\fR .Sp \&\fIگزینه‌های x86 Windows\fR گزینه‌های Cygwin و MinGW را ببینید. .Sp \&\fIگزینه‌های Xstormy16\fR (\fBXstormy16 Options\fR) \&\fB\-msim\fR .Sp \&\fIگزینه‌های Xtensa\fR (\fBXtensa Options\fR) \&\fB\-mconst16 \-mno\-const16 \&\-mfused\-madd \-mno\-fused\-madd \&\-mforce\-no\-pic \&\-mserialize\-volatile \-mno\-serialize\-volatile \&\-mtext\-section\-literals \-mno\-text\-section\-literals \&\-mauto\-litpools \-mno\-auto\-litpools \&\-mtarget\-align \-mno\-target\-align \&\-mlongcalls \-mno\-longcalls \&\-mabi=\fR\fIabi\-type\fR \&\fB\-mextra\-l32r\-costs=\fR\fIcycles\fR \&\fB\-mstrict\-align \-mno\-strict\-align\fR .Sp \&\fIگزینه‌های zSeries\fR گزینه‌های S/390 و zSeries را ببینید..SS "گزینه‌های کنترل نوع خروجی (Options Controlling the Kind of Output)" .IX Subsection "Options Controlling the Kind of Output" فرآیند کامپایل می‌تواند شامل حداکثر چهار مرحله باشد: پیش‌پردازش، کامپایل اصلی، اسمبلی و پیوند، که همواره به همین ترتیب اجرا می‌شوند. GCC قادر است چندین فایل را پیش‌پردازش و کامپایل کرده و به چندین فایل ورودی اسمبلی، یا به یک فایل ورودی اسمبلی تبدیل کند؛ سپس هر فایل ورودی اسمبلی یک فایل شیء (object file) تولید می‌کند، و مرحله پیوند همه فایل‌های شیء را (آن‌هایی که به تازگی کامپایل شده‌اند، و آن‌هایی که به عنوان ورودی مشخص شده‌اند) در یک فایل اجرایی ترکیب می‌کند. .PP برای هر فایل ورودی داده‌شده، پسوند نام فایل تعیین می‌کند که چه نوع کامپایلی انجام شود: .IP \fIfile\fR\fB.c\fR 4 .IX Item "file.c" کد منبع C که باید پیش‌پردازش شود. .IP \fIfile\fR\fB.i\fR 4 .IX Item "file.i" کد منبع C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.ii\fR 4 .IX Item "file.ii" کد منبع C++ که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.m\fR 4 .IX Item "file.m" کد منبع Objective\-C. توجه داشته باشید که برای کارکرد یک برنامه Objective\-C باید پیوند با کتابخانه \fIlibobjc\fR انجام شود. .IP \fIfile\fR\fB.mi\fR 4 .IX Item "file.mi" کد منبع Objective\-C که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.mm\fR 4 .IX Item "file.mm" .PD 0 .IP \fIfile\fR\fB.M\fR 4 .IX Item "file.M" .PD کد منبع Objective\-C++. توجه داشته باشید که برای کارکرد یک برنامه Objective\-C++ باید پیوند با کتابخانه \fIlibobjc\fR انجام شود. توجه داشته باشید که \fB.M\fR دقیقاً به حرف بزرگ M اشاره دارد. .IP \fIfile\fR\fB.mii\fR 4 .IX Item "file.mii" کد منبع Objective\-C++ که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.h\fR 4 .IX Item "file.h" فایل سرایند C، C++، Objective\-C یا Objective\-C++ جهت تبدیل به یک سرایند پیش‌کامپایل‌شده (پیش‌فرض)، یا فایل سرایند C، C++ جهت تبدیل به یک مشخصه Ada (از طریق سوییچ \fB\-fdump\-ada\-spec\fR). .IP \fIfile\fR\fB.cc\fR 4 .IX Item "file.cc" .PD 0 .IP \fIfile\fR\fB.cp\fR 4 .IX Item "file.cp" .IP \fIfile\fR\fB.cxx\fR 4 .IX Item "file.cxx" .IP \fIfile\fR\fB.cpp\fR 4 .IX Item "file.cpp" .IP \fIfile\fR\fB.CPP\fR 4 .IX Item "file.CPP" .IP \fIfile\fR\fB.c++\fR 4 .IX Item "file.c++" .IP \fIfile\fR\fB.C\fR 4 .IX Item "file.C" .PD کد منبع C++ که باید پیش‌پردازش شود. توجه داشته باشید که در \fB.cxx\fR، دو حرف پایانی باید دقیقاً \fBx\fR باشند. به همین ترتیب، \&\fB.C\fR به یک حرف بزرگ C اشاره دارد. .IP \fIfile\fR\fB.mm\fR 4 .IX Item "file.mm" .PD 0 .IP \fIfile\fR\fB.M\fR 4 .IX Item "file.M" .PD کد منبع Objective\-C++ که باید پیش‌پردازش شود. .IP \fIfile\fR\fB.mii\fR 4 .IX Item "file.mii" کد منبع Objective\-C++ که نباید پیش‌پردازش شود. .IP \fIfile\fR\fB.hh\fR 4 .IX Item "file.hh" .PD 0 .IP \fIfile\fR\fB.H\fR 4 .IX Item "file.H" .IP \fIfile\fR\fB.hp\fR 4 .IX Item "file.hp" .IP \fIfile\fR\fB.hxx\fR 4 .IX Item "file.hxx" .IP \fIfile\fR\fB.hpp\fR 4 .IX Item "file.hpp" .IP \fIfile\fR\fB.HPP\fR 4 .IX Item "file.HPP" .IP \fIfile\fR\fB.h++\fR 4 .IX Item "file.h++" .IP \fIfile\fR\fB.tcc\fR 4 .IX Item "file.tcc" .PD فایل سرایند C++ جهت تبدیل به یک سرایند پیش‌کامپایل‌شده یا مشخصه Ada. .IP \fIfile\fR\fB.f\fR 4 .IX Item "file.f" .PD 0 .IP \fIfile\fR\fB.for\fR 4 .IX Item "file.for" .IP \fIfile\fR\fB.ftn\fR 4 .IX Item "file.ftn" .IP \fIfile\fR\fB.fi\fR 4 .IX Item "file.fi" .PD کد منبع فرترن با قالب ثابت (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 کد منبع فرترن با قالب ثابت (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 کد منبع فرترن با قالب آزاد (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 کد منبع فرترن با قالب آزاد (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" فایل واسط D. .IP \fIfile\fR\fB.dd\fR 4 .IX Item "file.dd" کد مستندات D (Ddoc). .IP \fIfile\fR\fB.ads\fR 4 .IX Item "file.ads" فایل کد منبع Ada که حاوی اعلان واحد کتابخانه (اعلان یک بسته‌، زیربرنامه، یا جنریک، یا یک نمونه‌سازی جنریک)، یا اعلان تغییر نام واحد کتابخانه (اعلان تغییر نام یک بسته، جنریک، یا زیربرنامه) است. به چنین فایل‌هایی \fIspecs\fR نیز گفته می‌شود. .IP \fIfile\fR\fB.adb\fR 4 .IX Item "file.adb" فایل کد منبع Ada شامل بدنه واحد کتابخانه (بدنه یک زیربرنامه یا بسته). به این فایل‌ها \fIbodies\fR نیز گفته می‌شود. .IP \fIfile\fR\fB.s\fR 4 .IX Item "file.s" کد اسمبلی. .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" فایل‌های منبع را کامپایل یا اسمبلی می‌کند، اما پیوند (link) نمی‌زند. مرحله پیوند اساساً انجام نمی‌شود. خروجی نهایی به شکل یک فایل شیء (object file) برای هر فایل منبع خواهد بود. .Sp به‌طور پیش‌فرض، نام فایل شیء برای یک فایل منبع از جایگزینی پسوند \fB.c\fR، \fB.i\fR، \fB.s\fR و غیره با \fB.o\fR ساخته می‌شود. .Sp فایل‌های ورودی ناشناخته که نیازی به کامپایل یا اسمبلی ندارند، نادیده گرفته می‌شوند. .IP \fB\-S\fR 4 .IX Item "-S" پس از مرحله کامپایل واقعی متوقف می‌شود؛ اسمبلی نمی‌کند. خروجی به شکل یک فایل کد اسمبلی برای هر فایل ورودیِ غیر اسمبلیِ مشخص‌شده است. .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 تنها نام خروجی اصلی را مشخص می‌کند، اما بر نام‌گذاری خروجی‌های کمکی (auxiliary) و دامپ (dump) نیز تأثیر می‌گذارد. مثال‌های زیر را ببینید. مگر در صورتی که لغو (override) شوند، هر دو خروجی کمکی و دامپ در همان دایرکتوری خروجی اصلی قرار می‌گیرند. در خروجی‌های کمکی، پسوند فایل ورودی با پسوند نوع فایل خروجی کمکی جایگزین می‌شود؛ در خروجی‌های دامپ، پسوند فایل دامپ به پسوند فایل ورودی پیوست می‌گردد. در دستورهای کامپایل، نام پایه (base name) خروجی‌های کمکی و دامپ همان نام پایه خروجی اصلی است؛ در دستورهای کامپایل و پیوند، نام خروجی اصلی منهای پسوند فایل اجرایی با نام فایل ورودی ترکیب می‌شود. اگر هر دو نام پایه یکسانی داشته باشند (صرف‌نظر از پسوند)، نتیجه ترکیب همان نام پایه خواهد بود، در غیر این صورت، با یک خط تیره (\-) به هم متصل می‌شوند. .Sp .Vb 1 \& gcc \-c foo.c ... .Ve .Sp از \fIfoo.o\fR به عنوان خروجی اصلی استفاده می‌کند، و خروجی‌های کمکی و دامپ را در کنار آن قرار می‌دهد؛ مثلاً فایل کمکی \fIfoo.dwo\fR برای \&\fB\-gsplit\-dwarf\fR، و فایل دامپ \fIfoo.c.???r.final\fR برای \&\fB\-fdump\-rtl\-final\fR. .Sp اگر یک فایل خروجیِ غیرپیونددهنده صراحتاً مشخص شده باشد، فایل‌های کمکی و دامپ به‌طور پیش‌فرض همان نام پایه را می‌گیرند: .Sp .Vb 1 \& gcc \-c foo.c \-o dir/foobar.o ... .Ve .Sp خروجی‌های کمکی را به نام \fIdir/foobar.*\fR و خروجی‌های دامپ را به نام \&\fIdir/foobar.c.*\fR نام‌گذاری خواهد کرد. .Sp در مقابل، خروجی پیونددهنده به خروجی‌های کمکی و دامپ پیشوند اضافه خواهد کرد: .Sp .Vb 1 \& gcc foo.c bar.c \-o dir/foobar ... .Ve .Sp به‌طور کلی خروجی‌های کمکی را به نام \fIdir/foobar\-foo.*\fR و \&\fIdir/foobar\-bar.*\fR، و خروجی‌های دامپ را به نام \fIdir/foobar\-foo.c.*\fR و \&\fIdir/foobar\-bar.c.*\fR نام‌گذاری می‌کند. .Sp تنها استثنا برای حالت بالا زمانی است که فایل اجرایی، نام پایه یکسانی با تک‌ورودی داشته باشد: .Sp .Vb 1 \& gcc foo.c \-o dir/foo ... .Ve .Sp در این حالت، خروجی‌های کمکی به نام \fIdir/foo.*\fR و خروجی‌های دامپ به نام \fIdir/foo.c.*\fR نام‌گذاری می‌شوند. .Sp مکان و نام‌های خروجی‌های کمکی و دامپ را می‌توان با گزینه‌های \fB\-dumpbase\fR، \fB\-dumpbase\-ext\fR، \&\fB\-dumpdir\fR، \fB\-save\-temps=cwd\fR و \&\fB\-save\-temps=obj\fR تنظیم کرد. .IP "\fB\-dumpbase\fR \fIdumpbase\fR" 4 .IX Item "-dumpbase dumpbase" این گزینه نام پایه را برای فایل‌های خروجی کمکی و دامپ تنظیم می‌کند. این گزینه بر نام فایل خروجی اصلی تأثیری ندارد. خروجی‌های واسط، در صورت حفظ شدن، خروجی اصلی تلقی نمی‌شوند بلکه خروجی کمکی به حساب می‌آیند: .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 کاملاً آن را لغو (override) می‌کند: .Sp .Vb 2 \& gcc foo.c \-c \-o dir/foo.o \-dumpbase alt/foo \e \& \-dumpdir pfx\- \-save\-temps=cwd ... .Ve .Sp خروجی‌های کمکی و دامپ با نام \fIalt/foo.*\fR ایجاد می‌کند و \&\fIdir/\fR در \fB\-o\fR، پیشوند \fI./\fR ضمنی ناشی از \&\fB\-save\-temps=cwd\fR و \fIpfx\-\fR در \fB\-dumpdir\fR را نادیده می‌گیرد. .Sp هنگامی که \fB\-dumpbase\fR در دستوری مشخص شود که چندین ورودی را کامپایل می‌کند، یا کامپایل کرده و سپس پیوند می‌زند، ممکن است با \&\fIdumppfx\fR، همان‌طور که در زیر \fB\-dumpdir\fR توضیح داده شده، ترکیب شود. سپس، هر فایل ورودی با استفاده از \fIdumppfx\fR ترکیبی کامپایل می‌شود و مقادیر پیش‌فرض برای \fIdumpbase\fR و \fIauxdropsuf\fR برای هر فایل ورودی محاسبه می‌گردد: .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpbase main ... .Ve .Sp فایل‌های \fIfoo.o\fR و \fIbar.o\fR را به عنوان خروجی‌های اصلی می‌سازد و با استفاده از \fIdumpbase\fR به عنوان پیشوند، از رونویسی خروجی‌های کمکی و دامپ جلوگیری می‌کند و خروجی‌های کمکی و دامپی با نام‌های \fImain\-foo.*\fR و \fImain\-bar.*\fR ایجاد می‌نماید. .Sp مشخص کردن یک رشته خالی به عنوان \fIdumpbase\fR از تأثیر نام پایه خروجی در نام‌گذاری خروجی‌های کمکی و دامپ در حین کامپایل جلوگیری می‌کند و مقادیر پیش‌فرض را محاسبه می‌نماید: .Sp .Vb 1 \& gcc \-c foo.c \-o dir/foobar.o \-dumpbase " ... .Ve .Sp خروجی‌های کمکی را به نام \fIdir/foo.*\fR و خروجی‌های دامپ را به نام \&\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، و خروجی‌های دامپ را به نام \&\fIdir/foo.c.*\fR و \fIdir/bar.c.*\fR نام‌گذاری می‌کند. کامپایل مجدد LTO در طول پیوند از \fIdir/foobar.\fR به عنوان پیشوند برای فایل‌های دامپ و کمکی استفاده خواهد کرد. .IP "\fB\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4 .IX Item "-dumpbase-ext auxdropsuf" هنگام تشکیل نام یک فایل خروجی کمکی (و نه دامپ)، پیش از الصاق هرگونه پسوند، \fIauxdropsuf\fR انتهایی را از \fIdumpbase\fR حذف می‌کند. در صورت عدم تعیین، این گزینه به‌طور پیش‌فرض پسوند \fIdumpbase\fR پیش‌فرض خواهد بود؛ یعنی پسوند فایل ورودی هنگامی که \&\fB\-dumpbase\fR در خط فرمان وجود ندارد، یا زمانی که \fIdumpbase\fR با \fIdumppfx\fR ترکیب شده است. .Sp .Vb 1 \& gcc foo.c \-c \-o dir/foo.o \-dumpbase x\-foo.c \-dumpbase\-ext .c ... .Ve .Sp فایل \fIdir/foo.o\fR را به عنوان خروجی اصلی می‌سازد و خروجی‌های کمکی را در \fIdir/x\-foo.*\fR ایجاد می‌کند؛ مکان خروجی اصلی را می‌گیرد و پسوند \fI.c\fR را از \fIdumpbase\fR حذف می‌کند. خروجی‌های دامپ پسوند را حفظ می‌کنند: \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 به عنوان پیشوند، از رونویسی خروجی‌های کمکی و دامپ جلوگیری می‌کند و خروجی‌های کمکی به نام‌های \&\fImain\-foo.*\fR و \fImain\-bar.*\fR و خروجی‌های دامپ به نام‌های \&\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 صریح یا پیش‌فرض الحاق می‌شوند (یا در صورت داشتن مؤلفه‌های دایرکتوری، جایگزین آن می‌شوند)، تا هر یک از کامپایل‌های چندگانه، خروجی‌های aux و dump با نام‌های متفاوتی دریافت کنند. .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp خروجی‌های dump کمکی را در \fIdir/pfx\-main\-foo.*\fR و \&\fIdir/pfx\-main\-bar.*\fR تولید می‌کند و \fIdumpbase\fR\- را به \fIdumppfx\fR الحاق می‌نماید. خروجی‌های dump پسوند فایل ورودی را حفظ می‌کنند: به ترتیب \fIdir/pfx\-main\-foo.c.*\fR و \fIdir/pfx\-main\-bar.c.*\fR. این را با کامپایل تک‌ورودی مقایسه کنید: .Sp .Vb 1 \& gcc foo.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp که با اعمال \fB\-dumpbase\fR بر یک فایل منبع واحد، یک \fIdumpbase\fR جداگانه به ازای هر فایل ورودی محاسبه و الحاق نمی‌کند. خروجی‌های کمکی و dump آن در \fIdir/pfx\-main.*\fR قرار می‌گیرند. .Sp هنگام کامپایل و سپس پیوند دادن از چندین فایل ورودی، یک \fIdumppfx\fR پیش‌فرض یا صریحاً مشخص‌شده نیز تحت تبدیل \fIdumpbase\fR\- فوق قرار می‌گیرد (مانند کامپایل \fIfoo.c\fR و \fIbar.c\fR در بالا، اما بدون \fB\-c\fR). اگر نه \fB\-dumpdir\fR و نه \fB\-dumpbase\fR مشخص نشده باشند، نام پایه خروجی پیونددهنده، منهای \fIauxdropsuf\fR در صورت مشخص بودن، یا پسوند فایل اجرایی در غیر این صورت، به اضافه یک خط تیره به \fIdumppfx\fR پیش‌فرض اضافه می‌شود. با این حال توجه داشته باشید که برخلاف حالت‌های پیشین پیوند دادن: .Sp .Vb 1 \& gcc foo.c bar.c \-dumpdir dir/pfx\- \-o main ... .Ve .Sp نام خروجی \fImain\fR را به \fIdumppfx\fR الحاق نمی‌کند، زیرا \&\fB\-dumpdir\fR صریحاً مشخص شده است. هدف این است که \&\fIdumppfx\fR مشخص‌شده به صورت صریح بتواند در صورت تمایل نام خروجی مشخص‌شده را به عنوان بخشی از پیشوند در بر داشته باشد؛ تنها یک \&\fB\-dumpbase\fR صریحاً مشخص‌شده با آن ترکیب می‌شود، تا از دور انداختن ساده یک گزینه معنادار جلوگیری شود. .Sp هنگام کامپایل و سپس پیوند دادن از یک فایل ورودی واحد، نام پایه خروجی پیونددهنده تنها در صورتی همانند بالا به \fIdumppfx\fR پیش‌فرض الحاق می‌شود که نام پایه مشترکی با نام فایل ورودی واحد نداشته باشد. این مورد در موارد پیوند تک‌ورودی در بالا پوشش داده شد، اما نه با یک \fB\-dumpdir\fR صریح که از ترکیب جلوگیری می‌کند، حتی اگر توسط \fB\-save\-temps=*\fR باطل شود: .Sp .Vb 1 \& gcc foo.c \-dumpdir alt/pfx\- \-o dir/main.exe \-save\-temps=cwd ... .Ve .Sp خروجی‌های کمکی با نام \fIfoo.*\fR و خروجی‌های dump با نام \&\fIfoo.c.*\fR در دایرکتوری کاری جاری مطابق با آنچه نهایتاً توسط \fB\-save\-temps=cwd\fR درخواست شده، نام‌گذاری می‌شوند. .Sp به عنوان جمع‌بندی برای یک جریان داده‌ای شهودی گرچه کمی غیردقیق: نام خروجی اصلی به یک بخش دایرکتوری و یک بخش نام پایه (basename) تقسیم می‌شود؛ \&\fIdumppfx\fR روی بخش اول تنظیم می‌شود، مگر اینکه توسط \&\fB\-dumpdir\fR یا \fB\-save\-temps=*\fR لغو شود، و \fIdumpbase\fR روی بخش دوم تنظیم می‌شود، مگر اینکه توسط \fB\-dumpbase\fR لغو شود. اگر چندین ورودی یا پیوند وجود داشته باشد، این \fIdumpbase\fR ممکن است با \&\fIdumppfx\fR ترکیب شده و از هر فایل ورودی گرفته شود. نام‌های خروجی کمکی برای هر ورودی با ترکیب \fIdumppfx\fR، \fIdumpbase\fR منهای پسوند، و پسوند خروجی کمکی تشکیل می‌شوند؛ نام‌های خروجی dump تنها از این نظر تفاوت دارند که پسوند برگرفته از \fIdumpbase\fR حفظ می‌شود. .Sp در خصوص خروجی‌های کمکی و dump ایجادشده در طول کامپایل مجدد LTO، ترکیبی از \fIdumppfx\fR و \fIdumpbase\fR، همان‌طور که داده شده یا همان‌طور که از نام خروجی پیونددهنده و نه از ورودی‌ها مشتق شده است، حتی در مواردی که این ترکیب در غیر این صورت بدین شکل استفاده نمی‌شد، با یک نقطه در انتها به جای خط تیره اضافه‌شده توسط کامپایلر (در صورت وجود)، به عنوان یک گزینه \&\fB\-dumpdir\fR به \fBlto\-wrapper\fR ارسال می‌شود؛ از آنجا که این برنامه در پیوند دادن نقش دارد، معمولاً هیچ \fB\-dumpbase\fR و \fB\-dumpbase\-ext\fR دریافت نمی‌کند و آن‌ها را نادیده می‌گیرد. .Sp هنگام اجرای زیرکامپایلرها، \fBlto\-wrapper\fR نام مراحل LTO را به \&\fIdumppfx\fR دریافتی اضافه می‌کند، اطمینان حاصل می‌کند که شامل یک مؤلفه دایرکتوری باشد تا بر هر \fB\-dumpdir\fR دیگری اولویت یابد، و آن را به عنوان \&\fB\-dumpbase\fR به زیرکامپایلرها ارسال می‌نماید. .IP \fB\-v\fR 4 .IX Item "-v" دستورات اجراشده برای پیشبرد مراحل کامپایل را (در خروجی خطای استاندارد) چاپ می‌کند. همچنین شماره نسخه برنامه راه‌انداز کامپایلر، پیش‌پردازنده و خود کامپایلر اصلی را چاپ می‌کند. .IP \fB\-###\fR 4 .IX Item "-###" مانند \fB\-v\fR است با این تفاوت که دستورات اجرا نمی‌شوند و آرگومان‌ها درون علامت نقل‌قول قرار می‌گیرند، مگر اینکه تنها شامل نویسه‌های الفبایی\-عددی یا \f(CW\*(C`./\-_\*(C'\fR باشند. این گزینه برای اسکریپت‌های شل جهت ضبط خطوط فرمان تولیدشده توسط راه‌انداز مفید است. .IP \fB\-\-help\fR 4 .IX Item "--help" توضیحی درباره گزینه‌های خط فرمانِ قابل فهم برای \fBgcc\fR را (در خروجی استاندارد) چاپ می‌کند. اگر گزینه \fB\-v\fR نیز مشخص شده باشد، آن‌گاه \fB\-\-help\fR به فرآیندهای مختلف فراخوانی‌شده توسط \fBgcc\fR نیز منتقل می‌شود تا آن‌ها نیز بتوانند گزینه‌های خط فرمانی را که می‌پذیرند نمایش دهند. اگر گزینه \fB\-Wextra\fR نیز (پیش از گزینه \fB\-\-help\fR) مشخص شده باشد، گزینه‌های خط فرمانی که هیچ مستنداتی به آن‌ها اختصاص نیافته نیز نمایش داده می‌شوند. .IP \fB\-\-target\-help\fR 4 .IX Item "--target-help" توضیحی درباره گزینه‌های خط فرمان مخصوص مقصد را برای هر ابزار (در خروجی استاندارد) چاپ می‌کند. برای برخی از مقصدها اطلاعات اضافی ویژه مقصد نیز ممکن است چاپ شود. .IP \fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR] 4 .IX Item "--help={class|[^]qualifier}[,...]" توضیحی درباره گزینه‌های خط فرمانِ قابل فهم برای کامپایلر را که در تمام کلاس‌ها و توصیف‌کننده‌های مشخص‌شده می‌گنجند، (در خروجی استاندارد) چاپ می‌کند. کلاس‌های پشتیبانی‌شده عبارتند از: .RS 4 .IP \fBoptimizers\fR 4 .IX Item "optimizers" تمام گزینه‌های بهینه‌سازیِ پشتیبانی‌شده توسط کامپایلر را نمایش می‌دهد. .IP \fBwarnings\fR 4 .IX Item "warnings" تمام گزینه‌های کنترل‌کننده پیام‌های هشدار تولیدشده توسط کامپایلر را نمایش می‌دهد. .IP \fBtarget\fR 4 .IX Item "target" گزینه‌های مخصوص مقصد را نمایش می‌دهد. با این حال برخلاف گزینه \&\fB\-\-target\-help\fR، گزینه‌های مخصوص مقصدِ پیونددهنده و اسمبلر نمایش داده نمی‌شوند. به این دلیل که این ابزارها در حال حاضر از نحو تعمیم‌یافته \fB\-\-help=\fR پشتیبانی نمی‌کنند. .IP \fBparams\fR 4 .IX Item "params" مقادیر شناخته‌شده توسط گزینه \fB\-\-param\fR را نمایش می‌دهد. .IP \fIlanguage\fR 4 .IX Item "language" گزینه‌های پشتیبانی‌شده برای \fIlanguage\fR را نمایش می‌دهد، که در آن \&\fIlanguage\fR نام یکی از زبان‌های پشتیبانی‌شده در این نسخه از GCC است. اگر گزینه‌ای توسط تمام زبان‌ها پشتیبانی شود، لازم است کلاس \fBcommon\fR انتخاب شود. .IP \fBcommon\fR 4 .IX Item "common" گزینه‌هایی را که بین تمامی زبان‌ها مشترک هستند، نمایش می‌دهد. .RE .RS 4 .Sp توصیف‌کننده‌های پشتیبانی‌شده عبارتند از: .IP \fBundocumented\fR 4 .IX Item "undocumented" تنها گزینه‌هایی را نمایش می‌دهد که بدون مستندات هستند. .IP \fBjoined\fR 4 .IX Item "joined" گزینه‌هایی را نمایش می‌دهد که آرگومانی را می‌پذیرند که پس از یک علامت مساوی در همان قطعه متن پیوسته قرار می‌گیرد، مانند: \&\fB\-\-help=target\fR. .IP \fBseparate\fR 4 .IX Item "separate" گزینه‌هایی را نمایش می‌دهد که آرگومانی را می‌پذیرند که به صورت یک کلمه جداگانه پس از گزینه اصلی ظاهر می‌شود، مانند: \fB\-o output\-file\fR. .RE .RS 4 .Sp بنابراین، برای مثال برای نمایش تمام سوئیچ‌های نامستند مخصوص مقصد که توسط کامپایلر پشتیبانی می‌شوند، از این دستور استفاده کنید: .Sp .Vb 1 \& \-\-help=target,undocumented .Ve .Sp مفهوم یک توصیف‌کننده را می‌توان با قرار دادن نویسه \&\fB^\fR در ابتدای آن معکوس کرد؛ بنابراین به عنوان مثال برای نمایش تمام گزینه‌های هشدار دودویی (یعنی مواردی که یا فعال یا غیرفعال هستند و آرگومانی نمی‌پذیرند) و دارای توضیحات هستند، از این دستور استفاده کنید: .Sp .Vb 1 \& \-\-help=warnings,^joined,^undocumented .Ve .Sp آرگومان ورودی \fB\-\-help=\fR نباید صرفاً از توصیف‌کننده‌های معکوس‌شده تشکیل شود. .Sp ترکیب چندین کلاس امکان‌پذیر است، هرچند این کار معمولاً خروجی را چنان محدود می‌کند که چیزی برای نمایش باقی نمی‌ماند. با این حال یکی از مواردی که کار می‌کند، زمانی است که یکی از کلاس‌ها \fItarget\fR باشد. برای مثال برای نمایش تمام گزینه‌های بهینه‌سازی مخصوص مقصد، از این دستور استفاده کنید: .Sp .Vb 1 \& \-\-help=target,optimizers .Ve .Sp گزینه \fB\-\-help=\fR را می‌توان در خط فرمان تکرار کرد. هر استفاده پیاپی، کلاس گزینه‌های درخواستی خود را نمایش می‌دهد و مواردی را که قبلاً نمایش داده شده‌اند نادیده می‌گیرد. اگر \fB\-\-help\fR نیز در هر کجای خط فرمان مشخص شده باشد، بر هر گزینه \fB\-\-help=\fR اولویت خواهد داشت. .Sp اگر گزینه \fB\-Q\fR در خط فرمان پیش از گزینه \&\fB\-\-help=\fR ظاهر شود، متن توضیحی نمایش‌داده‌شده توسط \&\fB\-\-help=\fR تغییر می‌کند. به جای شرح گزینه‌های نمایش داده‌شده، مشخص می‌شود که آیا گزینه فعال، غیرفعال یا روی یک مقدار خاص تنظیم شده است (با این فرض که کامپایلر در نقطه‌ای که گزینه \fB\-\-help=\fR استفاده شده این موضوع را می‌داند). .Sp در اینجا یک نمونه کوتاه شده از پورت ARM برنامه \fBgcc\fR آمده است: .Sp .Vb 5 \& % gcc \-Q \-mabi=2 \-\-help=target \-c \& The following options are target specific: \& \-mabi= 2 \& \-mabort\-on\-noreturn [disabled] \& \-mapcs [disabled] .Ve .Sp خروجی نسبت به اثرات گزینه‌های قبلی در خط فرمان حساس است، بنابراین به عنوان مثال می‌توان دریافت که کدام بهینه‌سازی‌ها در \fB\-O2\fR فعال هستند با استفاده از: .Sp .Vb 1 \& \-Q \-O2 \-\-help=optimizers .Ve .Sp همچنین می‌توانید با استفاده از دستورهای زیر دریابید که کدام بهینه‌سازی‌های دودویی توسط \fB\-O3\fR فعال می‌شوند: .Sp .Vb 3 \& gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts \& gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts \& diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled .Ve .RE.IP \fB\-\-version\fR 4 .IX Item "--version" نمایش شماره نگارش و حق‌نشر (کپی‌رایت) مربوط به GCC فراخوانی‌شده. .IP \fB\-pass\-exit\-codes\fR 4 .IX Item "-pass-exit-codes" به‌طور معمول اگر هر مرحله از کامپایلر کد بازگشتی ناموفقی بازگرداند، برنامه \fBgcc\fR با کد خروج ۱ پایان می‌یابد. اگر \&\fB\-pass\-exit\-codes\fR را مشخص کنید، برنامه \fBgcc\fR در عوض با بزرگ‌ترین کد خطای عددی تولیدشده توسط هر مرحله‌ای که نشان‌دهنده خطا بوده خارج می‌شود. بخش‌های جلویی (front ends) برای C، C++‎ و Fortran در صورت مواجهه با خطای داخلی کامپایلر، کد ۴ را بازمی‌گردانند. .IP \fB\-pipe\fR 4 .IX Item "-pipe" استفاده از پایپ‌ها به‌جای فایل‌های موقت برای برقراری ارتباط بین مراحل مختلف کامپایل. این گزینه در برخی از سیستم‌هایی که اسمبلر در آن‌ها قادر به خواندن از یک پایپ نیست کار نمی‌کند؛ اما اسمبلر GNU هیچ مشکلی با آن ندارد. .IP \fB\-specs=\fR\fIfile\fR 4 .IX Item "-specs=file" پردازش \fIfile\fR پس از اینکه کامپایلر فایل استاندارد \fIspecs\fR را خواند، به‌منظور لغو مقادیر پیش‌فرضی که برنامه گرداننده (driver) \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) که مستقل از مکان هستند استفاده شود. دایرکتوری‌های ارجاع‌شده توسط دستورالعمل‌ها (directives) تحت تأثیر این گزینه‌ها قرار نمی‌گیرند. همچنین گزینه‌های \&\fB\-fmacro\-prefix\-map\fR، \fB\-fdebug\-prefix\-map\fR، \&\fB\-fprofile\-prefix\-map\fR و \fB\-fcanon\-prefix\-map\fR را ببینید. .IP \fB\-fcanon\-prefix\-map\fR 4 .IX Item "-fcanon-prefix-map" برای گزینه‌های \fB\-f*\-prefix\-map\fR، به‌طور معمول مقایسه پیشوند \fIold\fR با نام فایلی که در حالت عادی در نتیجه کامپایل به آن ارجاع داده می‌شود، با استفاده از مقایسه متنی پیشوندها، یا نادیده‌گرفتن بزرگی و کوچکی حروف در سیستم‌های فایل غیرحساس به بزرگی و کوچکی و یکسان در نظر گرفتن اسلش و بک‌اسلش در سیستم‌های فایل مبتنی بر DOS انجام می‌شود. گزینه \fB\-fcanon\-prefix\-map\fR باعث می‌شود این‌گونه مقایسه‌ها روی مسیرهای متعارف‌سازی‌شده (canonicalized) از \fIold\fR و نام فایل ارجاع‌شده انجام شود. .IP \fB\-fplugin=\fR\fIname\fR\fB.so\fR 4 .IX Item "-fplugin=name.so" بارگذاری کد افزونه (plugin) موجود در فایل \fIname\fR.so، با این فرض که یک شیء مشترک (shared object) است که باید توسط کامپایلر با dlopen باز شود. نام پایه (base name) فایل شیء مشترک برای شناسایی افزونه به‌منظور تجزیه آرگومان‌ها استفاده می‌شود (گزینه \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR را در زیر ببینید). هر افزونه باید توابع بازخوانی (callback functions) مشخص‌شده در 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" برای فایل‌های ورودی در هر زبانی، اعلان‌های (declarations) متناظر 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 استفاده می‌کنند؛ فایل‌های سرآیند (header) مربوط به C++‎ اغلب از \fB.hh\fR، \fB.hpp\fR، \&\fB.H\fR یا (برای کدهای قالب مشترک) \fB.tcc\fR استفاده می‌کنند؛ فایل‌های پیش‌پردازش‌شده C++‎ از پسوند \fB.ii\fR استفاده می‌کنند؛ و واحدهای واسط ماژول C++20 گاهی از \fB.ixx\fR، \fB.cppm\fR، \fB.cxxm\fR، \fB.c++m\fR یا \fB.ccm\fR بهره می‌برند. .PP کامپایلر GCC فایل‌های با این نام‌ها را شناسایی کرده و آن‌ها را به‌عنوان برنامه‌های C++‎ کامپایل می‌کند، حتی اگر کامپایلر را دقیقاً همانند روش کامپایل برنامه‌های C (معمولاً با نام \fBgcc\fR) فراخوانی کنید. .PP با این حال، استفاده از \fBgcc\fR کتابخانه C++‎ را اضافه نمی‌کند. \&\fBg++\fR برنامه‌ای است که GCC را فراخوانی کرده و به‌طور خودکار پیوند دادن با کتابخانه C++‎ را تعیین می‌کند. این برنامه با فایل‌های \fB.c\fR، \&\fB.h\fR و \fB.i\fR به‌جای فایل‌های منبع C، مانند فایل‌های منبع C++‎ رفتار می‌کند مگر اینکه از \fB\-x\fR استفاده شود. این برنامه همچنین هنگام پیش‌کامپایل کردن یک فایل سرآیند C با پسوند \fB.h\fR برای استفاده در کامپایل‌های C++‎ مفید است. در بسیاری از سیستم‌ها، \fBg++\fR همچنین با نام \fBc++\fR نصب می‌شود. .PP هنگام کامپایل برنامه‌های C++‎، می‌توانید بسیاری از همان گزینه‌های خط فرمانی را که برای کامپایل برنامه‌ها در هر زبانی استفاده می‌کنید، یا گزینه‌های خط فرمانی که برای C و زبان‌های مرتبط معنا دارند، یا گزینه‌هایی که فقط برای برنامه‌های C++‎ معنادار هستند را مشخص کنید..SS "گزینه‌های مهار گویش C (Options Controlling C Dialect)" .IX Subsection "Options Controlling C Dialect" گزینه‌های زیر گویش زبان C (یا زبان‌های مشتق‌شده از C، مانند C++، Objective\-C و Objective\-C++) را که کامپایلر می‌پذیرد، کنترل می‌کنند: .IP \fB\-ansi\fR 4 .IX Item "-ansi" در حالت C، این گزینه معادل \fB\-std=c90\fR است. در حالت C++، معادل \fB\-std=c++98\fR است. .IP \fB\-std=\fR 4 .IX Item "-std=" استاندارد زبان را تعیین می‌کند. این گزینه در حال حاضر تنها هنگام کامپایل C یا C++ پشتیبانی می‌شود. .Sp کامپایلر می‌تواند چندین استاندارد پایه، مانند \fBc90\fR یا \&\fBc++98\fR، و گویش‌های GNU آن استانداردها، مانند \&\fBgnu90\fR یا \fBgnu++98\fR را بپذیرد. هنگامی که یک استاندارد پایه مشخص می‌شود، کامپایلر تمام برنامه‌های منطبق بر آن استاندارد به علاوه برنامه‌هایی را که از افزونه‌های GNU ناسازگار با آن استفاده نمی‌کنند، می‌پذیرد. برای نمونه، \&\fB\-std=c90\fR ویژگی‌های معینی از GCC را که با ISO C90 ناسازگار هستند (مانند کلیدواژه‌های \f(CW\*(C`asm\*(C'\fR و \f(CW\*(C`typeof\*(C'\fR) غیرفعال می‌کند، اما سایر افزونه‌های GNU را که معنایی در ISO C90 ندارند (مانند حذف عبارت میانی در یک عبارت \f(CW\*(C`?:\*(C'\fR) غیرفعال نمی‌سازد. از سوی دیگر، هنگامی که یک گویش GNU از یک استاندارد مشخص می‌شود، تمام ویژگی‌های پشتیبانی‌شده توسط کامپایلر فعال می‌شوند، حتی زمانی که آن ویژگی‌ها معنای استاندارد پایه را تغییر دهند. در نتیجه، ممکن است برخی از برنامه‌های کاملاً منطبق بر استاندارد رد شوند. استاندارد مشخص‌شده توسط \fB\-Wpedantic\fR برای شناسایی اینکه کدام ویژگی‌ها با توجه به آن نسخه از استاندارد افزونه‌های GNU هستند استفاده می‌شود. برای نمونه \&\fB\-std=gnu90 \-Wpedantic\fR درباره کامنت‌های سبک C++ با \fB//\fR هشدار می‌دهد، در حالی که \&\fB\-std=gnu99 \-Wpedantic\fR چنین هشداری نمی‌دهد. .Sp باید مقداری برای این گزینه فراهم شود؛ مقادیر ممکن عبارتند از: .RS 4 .IP \fBc90\fR 4 .IX Item "c90" .PD 0 .IP \fBc89\fR 4 .IX Item "c89" .IP \fBiso9899:1990\fR 4 .IX Item "iso9899:1990" .PD پشتیبانی از تمام برنامه‌های ISO C90 (افزونه‌های خاصی از GNU که با ISO C90 در تضاد هستند غیرفعال می‌شوند). همانند \fB\-ansi\fR برای کد C. .IP \fBiso9899:199409\fR 4 .IX Item "iso9899:199409" استاندارد ISO C90 به گونه‌ای که در الحاقیهٔ ۱ (amendment 1) اصلاح شده است. .IP \fBc99\fR 4 .IX Item "c99" .PD 0 .IP \fBc9x\fR 4 .IX Item "c9x" .IP \fBiso9899:1999\fR 4 .IX Item "iso9899:1999" .IP \fBiso9899:199x\fR 4 .IX Item "iso9899:199x" .PD استاندارد ISO C99. این استاندارد اساساً به‌طور کامل پشتیبانی می‌شود، به استثنای باگ‌ها و مشکلات محاسبات ممیز شناور (عمدتاً اما نه کاملاً مربوط به ویژگی‌های اختیاری C99 از پیوست‌های F و G). برای اطلاعات بیشتر به <\fBhttps://gcc.gnu.org/c99status.html\fR> مراجعه کنید. نام‌های \fBc9x\fR و \fBiso9899:199x\fR منسوخ شده‌اند. .IP \fBc11\fR 4 .IX Item "c11" .PD 0 .IP \fBc1x\fR 4 .IX Item "c1x" .IP \fBiso9899:2011\fR 4 .IX Item "iso9899:2011" .PD استاندارد ISO C11، بازنگری سال ۲۰۱۱ استاندارد ISO C. این استاندارد اساساً به‌طور کامل پشتیبانی می‌شود، به استثنای باگ‌ها، اشکالات ممیز شناور (عمدتاً اما نه کاملاً مربوط به ویژگی‌های اختیاری C11 از پیوست‌های F و G) و پیوست‌های اختیاری K (رابط‌های بررسی محدوده - Bounds-checking interfaces) و L (تحلیل‌پذیری - Analyzability). نام \fBc1x\fR منسوخ شده است. .IP \fBc17\fR 4 .IX Item "c17" .PD 0 .IP \fBc18\fR 4 .IX Item "c18" .IP \fBiso9899:2017\fR 4 .IX Item "iso9899:2017" .IP \fBiso9899:2018\fR 4 .IX Item "iso9899:2018" .PD استاندارد ISO C17، بازنگری سال ۲۰۱۷ استاندارد ISO C (منتشر شده در ۲۰۱۸). این استاندارد با C11 یکسان است به جز اصلاح ایرادات (که تمام آن‌ها با \fB\-std=c11\fR نیز اعمال می‌شوند) و مقدار جدیدی برای \&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR، و بدین ترتیب در همان حد C11 پشتیبانی می‌شود. .IP \fBc23\fR 4 .IX Item "c23" .PD 0 .IP \fBc2x\fR 4 .IX Item "c2x" .IP \fBiso9899:2024\fR 4 .IX Item "iso9899:2024" .PD استاندارد ISO C23، بازنگری سال ۲۰۲۳ استاندارد ISO C (منتشر شده در ۲۰۲۴). نام \fBc2x\fR منسوخ شده است. .IP \fBc2y\fR 4 .IX Item "c2y" نسخه بعدی استاندارد ISO C، که همچنان در حال توسعه است. پشتیبانی از این نسخه آزمایشی و ناکامل است. .IP \fBgnu90\fR 4 .IX Item "gnu90" .PD 0 .IP \fBgnu89\fR 4 .IX Item "gnu89" .PD گویش GNU از ISO C90 (شامل برخی از ویژگی‌های C99). .IP \fBgnu99\fR 4 .IX Item "gnu99" .PD 0 .IP \fBgnu9x\fR 4 .IX Item "gnu9x" .PD گویش GNU از ISO C99. نام \fBgnu9x\fR منسوخ شده است. .IP \fBgnu11\fR 4 .IX Item "gnu11" .PD 0 .IP \fBgnu1x\fR 4 .IX Item "gnu1x" .PD گویش GNU از ISO C11. نام \fBgnu1x\fR منسوخ شده است. .IP \fBgnu17\fR 4 .IX Item "gnu17" .PD 0 .IP \fBgnu18\fR 4 .IX Item "gnu18" .PD گویش GNU از ISO C17. .IP \fBgnu23\fR 4 .IX Item "gnu23" .PD 0 .IP \fBgnu2x\fR 4 .IX Item "gnu2x" .PD گویش GNU از ISO C23. این مقدار پیش‌فرض برای کد C است. نام \&\fBgnu2x\fR منسوخ شده است. .IP \fBgnu2y\fR 4 .IX Item "gnu2y" نسخه بعدی استاندارد ISO C، که همچنان در حال توسعه است، به علاوه افزونه‌های GNU. پشتیبانی از این نسخه آزمایشی و ناکامل است. نام \fBgnu2x\fR منسوخ شده است. .IP \fBc++98\fR 4 .IX Item "c++98" .PD 0 .IP \fBc++03\fR 4 .IX Item "c++03" .PD استاندارد ISO C++ سال ۱۹۹۸ به همراه اصلاحیه فنی سال ۲۰۰۳ و برخی گزارش‌های رفع نقص اضافی. همانند \fB\-ansi\fR برای کد C++. .IP \fBgnu++98\fR 4 .IX Item "gnu++98" .PD 0 .IP \fBgnu++03\fR 4 .IX Item "gnu++03" .PD گویش GNU از \fB\-std=c++98\fR. .IP \fBc++11\fR 4 .IX Item "c++11" .PD 0 .IP \fBc++0x\fR 4 .IX Item "c++0x" .PD استاندارد ISO C++ سال ۲۰۱۱ به همراه اصلاحیه‌ها. نام \fBc++0x\fR منسوخ شده است. .IP \fBgnu++11\fR 4 .IX Item "gnu++11" .PD 0 .IP \fBgnu++0x\fR 4 .IX Item "gnu++0x" .PD گویش GNU از \fB\-std=c++11\fR. نام \fBgnu++0x\fR منسوخ شده است. .IP \fBc++14\fR 4 .IX Item "c++14" .PD 0 .IP \fBc++1y\fR 4 .IX Item "c++1y" .PD استاندارد ISO C++ سال ۲۰۱۴ به همراه اصلاحیه‌ها. نام \fBc++1y\fR منسوخ شده است. .IP \fBgnu++14\fR 4 .IX Item "gnu++14" .PD 0 .IP \fBgnu++1y\fR 4 .IX Item "gnu++1y" .PD گویش GNU از \fB\-std=c++14\fR. نام \fBgnu++1y\fR منسوخ شده است. .IP \fBc++17\fR 4 .IX Item "c++17" .PD 0 .IP \fBc++1z\fR 4 .IX Item "c++1z" .PD استاندارد ISO C++ سال ۲۰۱۷ به همراه اصلاحیه‌ها. نام \fBc++1z\fR منسوخ شده است..IP \fBgnu++17\fR 4 .IX Item "gnu++17" .PD 0 .IP \fBgnu++1z\fR 4 .IX Item "gnu++1z" .PD لهجهٔ GNU از \fB\-std=c++17\fR. این مقدار پیش‌فرض برای کدهای 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 لهجهٔ GNU از \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 لهجهٔ GNU از \fB\-std=c++23\fR. پشتیبانی از آن آزمایشی است و ممکن است در نسخه‌های بعدی به شیوه‌هایی ناسازگار تغییر کند. نام \fBgnu++2b\fR منسوخ شده است. .IP \fBc++2c\fR 4 .IX Item "c++2c" .PD 0 .IP \fBc++26\fR 4 .IX Item "c++26" .PD بازنگری بعدی استاندارد ISO C++، برنامه‌ریزی‌شده برای سال ۲۰۲۶. پشتیبانی از آن کاملاً آزمایشی است و تقریباً به طور قطع در نسخه‌های بعدی به شیوه‌هایی ناسازگار تغییر خواهد کرد. .IP \fBgnu++2c\fR 4 .IX Item "gnu++2c" .PD 0 .IP \fBgnu++26\fR 4 .IX Item "gnu++26" .PD لهجهٔ GNU از \fB\-std=c++2c\fR. پشتیبانی از آن کاملاً آزمایشی است و تقریباً به طور قطع در نسخه‌های بعدی به شیوه‌هایی ناسازگار تغییر خواهد کرد. .RE .RS 4 .RE .IP "\fB\-aux\-info\fR \fIfilename\fR" 4 .IX Item "-aux-info filename" اعلان‌های الگووار (prototyped) تمام توابعی که در یک واحد ترجمه اعلان و/یا تعریف شده‌اند، از جمله موارد موجود در فایل‌های سرایند را در \fIfilename\fR مشخص‌شده می‌نویسد. این گزینه در هر زبانی به جز 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) را که با پیشوند \&\fB_\|_builtin_\fR آغاز نمی‌شوند، به عنوان تابع توکار شناسایی نمی‌کند. .Sp کامپایلر GCC معمولاً برای مدیریت کارآمدتر برخی از توابع توکار، کدهای ویژه‌ای تولید می‌کند؛ برای نمونه، فراخوانی‌های \f(CW\*(C`alloca\*(C'\fR ممکن است به تک‌دستورالعمل‌هایی تبدیل شوند که پشته را مستقیماً تنظیم می‌کنند، و فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR ممکن است به حلقه‌های کپی درون‌خطی (inline) تبدیل شوند. کد حاصل اغلب هم کوچک‌تر و هم سریع‌تر است، اما از آنجا که فراخوانی‌های تابع دیگر به شکل واقعی ظاهر نمی‌شوند، نمی‌توانید روی آن فراخوانی‌ها نقطهٔ توقف (breakpoint) بگذارید، و همچنین نمی‌توانید با پیوند به یک کتابخانهٔ دیگر، رفتار توابع را تغییر دهید. علاوه بر این، هنگامی که یک تابع به عنوان تابع توکار شناسایی می‌شود، GCC ممکن است از اطلاعات مربوط به آن تابع برای هشدار دادن دربارهٔ مشکلات فراخوانی آن، یا برای تولید کد کارآمدتر استفاده کند، حتی اگر کد حاصل همچنان شامل فراخوانی‌های آن تابع باشد. به عنوان مثال، هشدارهایی با \fB\-Wformat\fR برای فراخوانی‌های نادرست به \&\f(CW\*(C`printf\*(C'\fR صادر می‌شود زمانی که \f(CW\*(C`printf\*(C'\fR توکار است و مشخص است که \f(CW\*(C`strlen\*(C'\fR حافظه عمومی را تغییر نمی‌دهد. .Sp با گزینهٔ \fB\-fno\-builtin\-\fR\fIfunction\fR تنها تابع توکار \fIfunction\fR غیرفعال می‌شود. نام \fIfunction\fR نباید با \fB_\|_builtin_\fR آغاز شود. اگر تابعی نام برده شود که در این نسخه از GCC به صورت توکار وجود ندارد، این گزینه نادیده گرفته می‌شود. هیچ گزینهٔ متناظری به صورت \&\fB\-fbuiltin\-\fR\fIfunction\fR وجود ندارد؛ اگر مایلید توابع توکار را هنگام استفاده از \fB\-fno\-builtin\fR یا \&\fB\-ffreestanding\fR به صورت انتخابی فعال کنید، می‌توانید ماکروهایی از این قبیل تعریف کنید: .Sp .Vb 2 \& #define abs(n) _\|_builtin_abs ((n)) \& #define strcpy(d, s) _\|_builtin_strcpy ((d), (s)) .Ve .IP \fB\-fcond\-mismatch\fR 4 .IX Item "-fcond-mismatch" عبارت‌های شرطی با انواع ناهماهنگ در آرگومان‌های دوم و سوم را مجاز می‌داند. مقدار چنین عبارتی void است. این گزینه برای C++ پشتیبانی نمی‌شود. .IP \fB\-ffreestanding\fR 4 .IX Item "-ffreestanding" مشخص می‌کند که کامپایل یک محیط مستقل (freestanding) را هدف قرار داده است. این گزینه متضمن \fB\-fno\-builtin\fR است. محیط مستقل محیطی است که ممکن است کتابخانهٔ استاندارد در آن وجود نداشته باشد، و آغاز برنامه لزوماً از \f(CW\*(C`main\*(C'\fR نباشد. بارزترین نمونهٔ آن هستهٔ سیستم‌عامل است. این گزینه معادل \fB\-fno\-hosted\fR است. .IP \fB\-fgimple\fR 4 .IX Item "-fgimple" تجزیهٔ تعاریف توابع نشانه‌گذاری‌شده با \f(CW\*(C`_\|_GIMPLE\*(C'\fR را فعال می‌کند. این یک قابلیت آزمایشی است که امکان آزمون واحد (unit testing) گذرگاه‌های GIMPLE را فراهم می‌آورد. .IP \fB\-fgnu\-tm\fR 4 .IX Item "-fgnu-tm" هنگامی که گزینهٔ \fB\-fgnu\-tm\fR مشخص می‌شود، کامپایلر کدی مطابق با گونهٔ لینوکسی سند مشخصات جاری ABI حافظه تبادلی (Transactional Memory) اینتل (نگارش ۱.۱، ۶ مه ۲۰۰۹) تولید می‌کند. این یک ویژگی آزمایشی است که رابط آن ممکن است در نسخه‌های بعدی GCC با تغییر مشخصات رسمی تغییر کند. لطفاً توجه داشته باشید که این قابلیت برای همهٔ معماری‌ها پشتیبانی نمی‌شود. .Sp برای اطلاعات بیشتر درباره پشتیبانی GCC از حافظه تبادلی، .Sp توجه داشته باشید که ویژگی حافظه تبادلی با استثناهای غیر فراخوانی (\fB\-fnon\-call\-exceptions\fR) پشتیبانی نمی‌شود. .IP \fB\-fgnu89\-inline\fR 4 .IX Item "-fgnu89-inline" گزینهٔ \fB\-fgnu89\-inline\fR به GCC اعلام می‌کند که در حالت C99 از معناشناسی سنتی GNU برای توابع \f(CW\*(C`inline\*(C'\fR استفاده کند. .Sp استفاده از این گزینه تقریباً معادل اضافه کردن صفت تابعی \&\f(CW\*(C`gnu_inline\*(C'\fR به تمامی توابع درون‌خطی است. .Sp گزینهٔ \fB\-fno\-gnu89\-inline\fR صریحاً به GCC اعلام می‌کند که هنگام قرار داشتن در حالت C99 یا gnu99 از معناشناسی C99 برای \f(CW\*(C`inline\*(C'\fR استفاده کند (یعنی رفتار پیش‌فرض را مشخص می‌کند). این گزینه در حالت \fB\-std=c90\fR یا \&\fB\-std=gnu90\fR پشتیبانی نمی‌شود. .Sp ماکروهای پیش‌پردازندهٔ \f(CW\*(C`_\|_GNUC_GNU_INLINE_\|_\*(C'\fR و \&\f(CW\*(C`_\|_GNUC_STDC_INLINE_\|_\*(C'\fR می‌توانند برای بررسی اینکه کدام معناشناسی برای توابع \f(CW\*(C`inline\*(C'\fR فعال است، به کار روند. .IP \fB\-fhosted\fR 4 .IX Item "-fhosted" مشخص می‌کند که کامپایل یک محیط میزبانی‌شده (hosted) را هدف قرار داده است. این گزینه متضمن \&\fB\-fbuiltin\fR است. محیط میزبانی‌شده محیطی است که تمام کتابخانهٔ استاندارد در آن در دسترس است، و در آن نوع بازگشتی \f(CW\*(C`main\*(C'\fR برابر با \f(CW\*(C`int\*(C'\fR است. نمونه‌های آن تقریباً همه چیز به جز هستهٔ سیستم‌عامل است. این گزینه معادل \fB\-fno\-freestanding\fR است. .IP \fB\-flax\-vector\-conversions\fR 4 .IX Item "-flax-vector-conversions" تبدیل‌های ضمنی میان بردارهایی با تعداد عناصر متفاوت و/یا انواع عناصر ناسازگار را مجاز می‌شمارد. این گزینه نباید برای کدهای جدید استفاده شود. .IP \fB\-fms\-extensions\fR 4 .IX Item "-fms-extensions" برخی از ساختارهای غیراستاندارد به‌کاررفته در فایل‌های سرایند مایکروسافت را می‌پذیرد. .Sp در کدهای C++، این گزینه اجازه می‌دهد نام اعضای ساختارها مشابه اعلان‌های انواع پیشین باشد. .Sp .Vb 4 \& typedef int UOW; \& struct ABC { \& UOW UOW; \& }; .Ve .Sp برخی موارد فیلدهای بدون نام در ساختارها (structures) و اجتماع‌ها (unions) تنها با این گزینه پذیرفته می‌شوند. .Sp توجه داشته باشید که این گزینه برای همهٔ اهداف غیرفعال است، به جز اهداف x86 که از ms\-abi استفاده می‌کنند..IP \fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR 4 .IX Item "-fpermitted-flt-eval-methods=style" استاندارد ISO/IEC TS 18661\-3 مقادیر مجاز جدیدی برای \&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR تعریف می‌کند که مشخص می‌سازند عملیات و مقادیر ثابتی با نوع معنایی که یک قالب مبادله‌ای یا گسترش‌یافته است، باید با دقت و بازهٔ همان نوع ارزیابی شوند. این مقادیر جدید، ابرمجموعه‌ای از مقادیر مجاز در C99/C11 هستند؛ استانداردهایی که معنای سایر مقادیر مثبت \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR را تعیین نکرده‌اند. از این رو، کدهایی که مطابق با C11 نوشته شده‌اند ممکن است با در نظر گرفتن احتمال وجود این مقادیر جدید پیاده‌سازی نشده باشند. .Sp گزینهٔ \&\fB\-fpermitted\-flt\-eval\-methods\fR مشخص می‌کند که کامپایلر تنها باید مقادیر تعیین‌شده برای \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR در C99/C11 را مجاز بداند، یا مجموعهٔ گسترش‌یافتهٔ مقادیر مشخص‌شده در ISO/IEC TS 18661\-3 را نیز بپذیرد. .Sp مقدار \&\fIstyle\fR بسته به نیاز، برابر با \f(CW\*(C`c11\*(C'\fR یا \f(CW\*(C`ts\-18661\-3\*(C'\fR خواهد بود. .Sp پیش‌فرض در حالت سازگار با استانداردها (\fB\-std=c11\fR یا مشابه آن)، \fB\-fpermitted\-flt\-eval\-methods=c11\fR است. پیش‌فرض در حالت گویش گنو (\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 تنها قالب پشتیبانی‌شده است. توجه داشته باشید که در صورت تعیین این آرگومان، برخی از اطلاعات (به‌ویژه ماژول‌های ++C) از خروجی \fB\-MF\fR حذف می‌شوند تا از ساختار نحوی گسترش‌یافتهٔ 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 در حالت ایده‌آل، یک برنامهٔ قابل حمل (portable) هرگاه به علامت‌دار بودن یک شیء وابسته باشد باید همواره صریحاً از \f(CW\*(C`signed char\*(C'\fR یا \&\f(CW\*(C`unsigned char\*(C'\fR استفاده کند. اما بسیاری از برنامه‌ها با استفاده از \f(CW\*(C`char\*(C'\fR ساده نوشته شده‌اند و بسته به ماشینی که برای آن توسعه یافته‌اند، انتظار دارند علامت‌دار یا بدون علامت باشد. این گزینه و حالت معکوس آن به شما اجازه می‌دهند چنین برنامه‌ای را با رفتار پیش‌فرض مخالف اجرا کنید. .Sp نوع \f(CW\*(C`char\*(C'\fR همواره نوعی متمایز از هر یک از \&\f(CW\*(C`signed char\*(C'\fR یا \f(CW\*(C`unsigned char\*(C'\fR است، هرچند که رفتار آن همیشه دقیقاً شبیه به یکی از آن دو خواهد بود. .IP "\fB\-fstrict\-flex\-arrays\fR (تنها C و ++C)" 4 .IX Item "-fstrict-flex-arrays (C and C++ only)" .PD 0 .IP "\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR\fB \fR(تنها C و ++C)" 4 .IX Item "-fstrict-flex-arrays=level (C and C++ only)" .PD کنترل می‌کند که چه زمانی آرایهٔ انتهایی یک ساختار به منظور دسترسی به عناصر آن، به عنوان عضو آرایهٔ انعطاف‌پذیر (flexible array member) در نظر گرفته شود. مقدار \fIlevel\fR سطح سخت‌گیری را کنترل می‌کند. .Sp گزینهٔ \&\fB\-fstrict\-flex\-arrays\fR معادل \&\fB\-fstrict\-flex\-arrays=3\fR است که سخت‌گیرانه‌ترین حالت می‌باشد؛ آرایهٔ انتهایی تنها زمانی به عنوان عضو آرایهٔ انعطاف‌پذیر تلقی می‌شود که طبق استاندارد C99 به بعد، به عنوان عضو آرایهٔ انعطاف‌پذیر اعلان شده باشد. .Sp شکل منفی \fB\-fno\-strict\-flex\-arrays\fR معادل \&\fB\-fstrict\-flex\-arrays=0\fR است که کمترین سخت‌گیری را دارد. در این حالت تمام آرایه‌های انتهایی ساختارها به عنوان عضو آرایهٔ انعطاف‌پذیر تلقی می‌شوند. .Sp دو سطح دیگر بین 0 و 3 وجود دارد که برای پشتیبانی از کدهای قدیمی‌تر ارائه‌شده‌اند که از افزونهٔ آرایه با طول صفر در GCC (\fB[0]\fR) یا آرایه تک‌عنصری به عنوان اعضای آرایهٔ انعطاف‌پذیر (\fB[1]\fR) استفاده می‌کنند. زمانی که \fIlevel\fR برابر با 1 باشد، آرایهٔ انتهایی در صورتی به عنوان عضو آرایهٔ انعطاف‌پذیر تلقی می‌شود که به صورت \fB[]\fR، \&\fB[0]\fR یا \fB[1]\fR اعلان شده باشد. زمانی که \fIlevel\fR برابر با 2 باشد، آرایهٔ انتهایی در صورتی به عنوان عضو آرایهٔ انعطاف‌پذیر در نظر گرفته می‌شود که به صورت \&\fB[]\fR یا \fB[0]\fR اعلان شده باشد. .Sp می‌توانید این رفتار را برای یک فیلد آرایهٔ انتهایی مشخص در یک ساختار با استفاده از صفت متغیر \f(CW\*(C`strict_flex_array\*(C'\fR کنترل کنید. .Sp گزینهٔ \fB\-fstrict_flex_arrays\fR با گزینهٔ \&\fB\-Wstrict\-flex\-arrays\fR تعامل دارد. .IP \fB\-fsso\-struct=\fR\fIendianness\fR 4 .IX Item "-fsso-struct=endianness" ترتیب پیش‌فرض ذخیره‌سازی اسکالر ساختارها و یونیون‌ها را بر اساس ترتیب بایت (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 با رفع باگ‌های ABI، در نگارش‌های مختلف G++ تغییر خواهد کرد. .Sp نسخهٔ 1 نسخه‌ای از C++ ABI است که نخستین بار در G++ 3.2 ظاهر شد. .Sp نسخهٔ 2 نسخه‌ای از C++ ABI است که نخستین بار در G++ 3.4 ارائه شد و تا G++ 4.9 مقدار پیش‌فرض بود. .Sp نسخهٔ 3 خطایی را در درهم‌سازی (mangling) یک آدرس ثابت به‌عنوان آرگومان قالب اصلاح می‌کند. .Sp نسخهٔ 4 که نخستین بار در G++ 4.5 ارائه شد، درهم‌سازی استانداردی را برای انواع برداری پیاده‌سازی می‌کند. .Sp نسخهٔ 5 که نخستین بار در G++ 4.6 ارائه شد، درهم‌سازی مشخصهٔ const/volatile روی انواع اشاره‌گر تابع، decltype یک اعلان ساده و استفاده از پارامتر تابع در اعلان پارامتری دیگر را اصلاح می‌کند. .Sp نسخهٔ 6 که نخستین بار در G++ 4.7 ارائه شد، رفتار ارتقای شمارش‌های دامنه‌دار C++11 و درهم‌سازی بسته‌های آرگومان قالب، const/static_cast، پیشوندهای ++ و \-\- و تابعی در دامنهٔ کلاس که به‌عنوان آرگومان قالب استفاده شده را اصلاح می‌کند. .Sp نسخهٔ 7 که نخستین بار در G++ 4.8 ظاهر شد، با nullptr_t به‌عنوان یک نوع درونی رفتار کرده و درهم‌سازی لامبداها را در دامنهٔ آرگومان پیش‌فرض اصلاح می‌کند. .Sp نسخهٔ 8 که نخستین بار در G++ 4.9 ارائه شد، رفتار جایگزینی انواع تابع با function\-cv\-qualifiers را اصلاح می‌کند. .Sp نسخهٔ 9 که نخستین بار در G++ 5.2 ارائه شد، هم‌ترازی \&\f(CW\*(C`nullptr_t\*(C'\fR را اصلاح می‌کند. .Sp نسخهٔ 10 که نخستین بار در G++ 6.1 ارائه شد، درهم‌سازی مشخصه‌هایی را که بر هویت نوع تأثیر می‌گذارند، مانند مشخصه‌های قرارداد فراخوانی ia32 (برای نمونه \fBstdcall\fR)، اضافه می‌کند. .Sp نسخهٔ 11 که نخستین بار در G++ 7 ارائه شد، درهم‌سازی عبارت‌های ...sizeof و نام‌های عملگر را اصلاح می‌کند. برای موجودیت‌های چندگانه با نام یکسان درون یک تابع که در حوزه‌های متفاوتی اعلان شده‌اند، درهم‌سازی اکنون از دوازدهمین رخداد به بعد تغییر می‌کند. این گزینه همچنین مستلزم \fB\-fnew\-inheriting\-ctors\fR است. .Sp نسخهٔ 12 که نخستین بار در G++ 8 ارائه شد، قراردادهای فراخوانی را برای کلاس‌های خالی روی هدف x86_64 و برای کلاس‌هایی که تنها سازنده‌های کپی/انتقال حذف‌شده دارند، تصحیح می‌کند. این نسخه به طور تصادفی قرارداد فراخوانی کلاس‌هایی با سازندهٔ کپی حذف‌شده و سازندهٔ انتقال بدیهی را تغییر می‌دهد. .Sp نسخهٔ 13 که نخستین بار در G++ 8.2 ارائه شد، تغییر تصادفی در نسخهٔ 12 را رفع می‌کند. .Sp نسخهٔ 14 که نخستین بار در G++ 10 ارائه شد، درهم‌سازی عبارت nullptr را اصلاح می‌کند. .Sp نسخهٔ 15 که نخستین بار در G++ 10.3 ارائه شد، پس‌رفت برچسب ABI در G++ 10 را اصلاح می‌کند. .Sp نسخهٔ 16 که نخستین بار در G++ 11 ارائه شد، درهم‌سازی \&\f(CW\*(C`_\|_alignof_\|_\*(C'\fR را تغییر می‌دهد تا از \f(CW\*(C`alignof\*(C'\fR و نام‌های عملگر وابسته متمایز باشد. .Sp نسخهٔ 17 که نخستین بار در G++ 12 ارائه شد، چیدمان کلاس‌هایی را که از کلاس‌های تجمیعی (aggregate) با مقداردهنده‌های پیش‌فرض اعضا در C++14 به بالا ارث‌بری می‌کنند، اصلاح می‌نماید. .Sp نسخهٔ 18 که نخستین بار در G++ 13 ارائه شد، درهم‌سازی لامبداهایی را که زمینهٔ اضافی دارند اصلاح می‌کند. .Sp نسخهٔ 19 که نخستین بار در G++ 14 ارائه شد، درهم‌سازی مقیدسازی‌های ساختاریافته را تصحیح می‌کند تا شامل برچسب‌های ABI باشند. .Sp نسخهٔ 20 که نخستین بار در G++ 15 ارائه شد، درهم‌سازی لامبداها در مقداردهنده‌های اعضای داده‌ای ایستا را اصلاح می‌کند. .Sp همچنین ببینید: \fB\-Wabi\fR. .IP \fB\-fabi\-compat\-version=\fR\fIn\fR 4 .IX Item "-fabi-compat-version=n" در مقصدهایی که از نام‌های مستعار قوی (strong aliases) پشتیبانی می‌کنند، G++ با ایجاد یک نام مستعار با نام درهم‌سازی‌شدهٔ درست هنگام تعریف نمادی با نام درهم‌سازی‌شدهٔ نادرست، تغییرات درهم‌سازی را دور می‌زند. این سوئیچ مشخص می‌کند کدام نسخهٔ ABI برای این نام مستعار استفاده شود. .Sp با \fB\-fabi\-version=0\fR (حالت پیش‌فرض)، این گزینه به طور پیش‌فرض روی 13 (سازگاری با GCC 8.2) قرار دارد. اگر نسخهٔ ABI دیگری به صراحت انتخاب شود، مقدار پیش‌فرض 0 خواهد بود. برای سازگاری با نگارش‌های GCC از 3.2 تا 4.9، از \fB\-fabi\-compat\-version=2\fR استفاده کنید. .Sp اگر این گزینه مشخص نشود ولی \fB\-Wabi=\fR\fIn\fR ارائه شده باشد، همان نسخه برای نام‌های مستعار سازگاری به کار می‌رود. اگر این گزینه به همراه \fB\-Wabi\fR (بدون ذکر نسخه) ارائه شود، نسخهٔ مشخص‌شده در این گزینه برای هشدار استفاده خواهد شد. .IP \fB\-fno\-access\-control\fR 4 .IX Item "-fno-access-control" غیرفعال کردن تمام بررسی‌های دسترسی. این سوئیچ عمدتاً برای دور زدن باگ‌های موجود در کد کنترل دسترسی کاربرد دارد. .IP \fB\-faligned\-new\fR 4 .IX Item "-faligned-new" فعال کردن پشتیبانی از \f(CW\*(C`new\*(C'\fR در C++17 برای انواعی که به هم‌ترازی بیشتری نسبت به آنچه \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR فراهم می‌کند نیاز دارند. یک آرگومان عددی مانند \f(CW\*(C`\-faligned\-new=32\*(C'\fR می‌تواند برای تعیین میزان هم‌ترازی (به بایت) ارائه‌شده توسط آن تابع استفاده شود، اما کاربران اندکی نیاز به بازنویسی مقدار پیش‌فرض \&\f(CWalignof(std::max_align_t)\fR خواهند داشت. .Sp این پرچم به طور پیش‌فرض برای \fB\-std=c++17\fR فعال است. .IP \fB\-fno\-assume\-sane\-operators\-new\fR 4 .IX Item "-fno-assume-sane-operators-new" استاندارد C++ اجازه می‌دهد عملگرهای سراسری \f(CW\*(C`new\*(C'\fR، \f(CW\*(C`new[]\*(C'\fR، \&\f(CW\*(C`delete\*(C'\fR و \f(CW\*(C`delete[]\*(C'\fR جایگزین شوند، هرچند بسیاری از برنامه‌های C++ آن‌ها را جایگزین نمی‌کنند و تنها از نسخهٔ فراهم‌شده توسط پیاده‌سازی استفاده می‌کنند. افزون بر این، استاندارد C++ اجازه می‌دهد در صورتی که این فراخوانی‌ها از عبارت‌های new یا delete ناشی شده باشند، حذف شوند (و به همین ترتیب در صورت استفاده از توابع \f(CW\*(C`_\|_builtin_operator_new\*(C'\fR یا \f(CW\*(C`_\|_builtin_operator_delete\*(C'\fR نیز همین فرض اعمال می‌شود). این گزینه امکان کنترل برخی بهینه‌سازی‌ها در خصوص فراخوانی این عملگرها را فراهم می‌کند. با گزینهٔ \f(CW\*(C`\-fassume\-sane\-operators\-new\-delete\*(C'\fR ممکن است GCC فرض کند که فراخوانی عملگرهای سراسری قابل‌جایگزینی از عبارت‌های new یا delete، یا از فراخوانی‌های \f(CW\*(C`_\|_builtin_operator_new\*(C'\fR یا \f(CW\*(C`_\|_builtin_operator_delete\*(C'\fR، هیچ متغیر سراسری یا متغیری را که آدرس آن می‌توانست به این عملگرها درز کند، نمی‌خوانند یا تغییر نمی‌دهند (وضعیت سراسری؛ به استثنای \f(CW\*(C`errno\*(C'\fR برای عملگرهای \&\f(CW\*(C`new\*(C'\fR و \f(CW\*(C`new[]\*(C'\fR). این امر امکان اکثر بهینه‌سازی‌ها را در طول این فراخوانی‌ها فراهم می‌سازد و چیزی است که عملگرهای ارائه‌شده توسط پیاده‌سازی آن را برآورده می‌کنند مگر اینکه جزئیات پیاده‌سازی \f(CW\*(C`malloc\*(C'\fR در کد قابل‌مشاهده باشد یا از قلاب‌های (hooks) \f(CW\*(C`malloc\*(C'\fR استفاده شده باشد؛ اما اگر برنامه‌ای این عملگرها را جایگزین کند ممکن است این شرایط برقرار نباشد. این رفتار به طور پیش‌فرض فعال است. با گزینهٔ \f(CW\*(C`\-fno\-assume\-sane\-operators\-new\-delete\*(C'\fR کامپایلر GCC باید فرض کند تمامی این فراخوانی‌ها (چه از عبارت‌های new یا delete باشند یا به طور مستقیم فراخوانی شوند) ممکن است وضعیت سراسری را بخوانند و بنویسند مگر خلاف آن ثابت شود (مانند زمانی که GCC پیاده‌سازی آن‌ها را کامپایل می‌کند). اگر این عملگرها جایگزین شده‌اند یا ممکن است جایگزین شوند و لازم است کد چنین رفتاری را در نظر بگیرد، از این گزینه استفاده کنید. .IP \fB\-fchar8_t\fR 4 .IX Item "-fchar8_t" .PD 0 .IP \fB\-fno\-char8_t\fR 4 .IX Item "-fno-char8_t" .PD فعال کردن پشتیبانی از \f(CW\*(C`char8_t\*(C'\fR همان‌طور که برای C++20 تصویب شده است. این شامل افزودن یک نوع پایهٔ جدید \f(CW\*(C`char8_t\*(C'\fR، تغییر در انواع لیترال‌های رشته‌ای و نویسه‌ای UTF\-8، امضاهای جدید برای لیترال‌های تعریف‌شده توسط کاربر، به‌روزرسانی‌های مرتبط در کتابخانهٔ استاندارد، و ماکروهای جدید بررسی ویژگی \&\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 دارای مشخصهٔ استثنای غیرخالی باشد، اتمام حافظه با پرتاب \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 تنظیم می‌کند. این محدودیت برای تشخیص بازگشت‌های بی‌پایان در طول ارزیابی عبارت ثابت لازم است. حداقل مقدار مشخص‌شده توسط استاندارد ۵۱۲ است. .IP \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR 4 .IX Item "-fconstexpr-cache-depth=n" حداکثر سطح عمق ارزیابی تودرتوی توابع constexpr در C++11 را که در حافظهٔ موقت (cache) نگه‌داری می‌شود، روی \fIn\fR تنظیم می‌کند. این یک روش مکاشفه‌ای (heuristic) است که تعادلی میان سرعت کامپایل (زمانی که حافظهٔ موقت از محاسبات تکراری جلوگیری می‌کند) و مصرف حافظه (زمانی که حافظهٔ موقت بر اثر ارزیابی‌های بسیار بازگشتی بیش از حد بزرگ می‌شود) برقرار می‌کند. مقدار پیش‌فرض ۸ است. احتمال بسیار کمی دارد که کاربران نیاز به تغییر آن داشته باشند، اما اگر کد شما محاسبات سنگین constexpr انجام می‌دهد، می‌توانید آن را بیازمایید تا ببینید کدام مقدار برای شما مناسب‌تر است. .IP \fB\-fconstexpr\-fp\-except\fR 4 .IX Item "-fconstexpr-fp-except" پیوست F از استاندارد C مشخص می‌کند که استثناهای ممیز شناور IEC559 در زمان کامپایل نباید فرایند کامپایل را متوقف کنند. کامپایلرهای C++ از نظر تاریخی این راهنما را دنبال نکرده‌اند و در عوض تقسیم ممیز شناور بر صفر را با وجود داشتن مقداری کاملاً معین، غیرثابت در نظر می‌گیرند. این پرچم به کامپایلر می‌گوید که به پیوست F نسبت به سایر قوانینی که می‌گویند عملیاتی خاص تعریف‌نشده (undefined) است، اولویت دهد. .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 تنظیم می‌کند. این محدودیت برای تشخیص حلقه‌های بی‌پایان در طول ارزیابی عبارت ثابت لازم است. مقدار پیش‌فرض ۲۶۲۱۴۴ (1<<18) است. .IP \fB\-fconstexpr\-ops\-limit=\fR\fIn\fR 4 .IX Item "-fconstexpr-ops-limit=n" حداکثر تعداد عملیات‌ها را در طول یک ارزیابی constexpr تعیین می‌کند. حتی زمانی که تعداد تکرارهای یک حلقه با محدودیت بالا مهار شده باشد، اگر چند حلقهٔ تودرتو وجود داشته باشد و هر کدام تکرارهای زیادی کمتر از حد بالا داشته باشند، یا اگر در بدنهٔ یک حلقه یا حتی خارج از آن عبارت‌های بسیار زیادی نیاز به ارزیابی داشته باشند، ممکن است ارزیابی constexpr زمان زیادی ببرد. مقدار پیش‌فرض ۳۳۵۵۴۴۳۲ (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) داشته باشند یا خیر. پیش‌فرض on است. .IP \fB\-fcontract\-assumption\-mode=[on|off]\fR 4 .IX Item "-fcontract-assumption-mode=[on|off]" [N4820] کنترل می‌کند که آیا قراردادهای با سطح \fBaxiom\fR باید معناشناسی فرض (assume) داشته باشند یا خیر. پیش‌فرض on است. .IP \fB\-fcontract\-build\-level=[off|default|audit]\fR 4 .IX Item "-fcontract-build-level=[off|default|audit]" [N4820] مشخص می‌کند که برای کدام سطح از قراردادها بررسی تولید شود. پیش‌فرض \fBdefault\fR است. .IP \fB\-fcontract\-continuation\-mode=[on|off]\fR 4 .IX Item "-fcontract-continuation-mode=[on|off]" [N4820] کنترل می‌کند که آیا به برنامه اجازه داده شود پس از نقض قرارداد به اجرا ادامه دهد یا خیر. به این معنی که آیا قراردادهای بررسی‌شده دارای معناشناسی \fBmaybe\fR شرح داده شده در زیر هستند یا معناشناسی \fBnever\fR. پیش‌فرض off است. .IP \fB\-fcontract\-role=:,,\fR 4 .IX Item "-fcontract-role=:,," [P1332] معناشناسی مشخص را برای هر سطح از قرارداد در یک نقش خاص قرارداد تعیین می‌کند. .IP \fB\-fcontract\-semantic=[default|audit|axiom]:\fR 4 .IX Item "-fcontract-semantic=[default|audit|axiom]:" [P1429] معناشناسی مشخص را برای یک سطح خاص از قرارداد تعیین می‌کند. .IP \fB\-fcontract\-strict\-declarations=[on|off]\fR 4 .IX Item "-fcontract-strict-declarations=[on|off]" کنترل می‌کند که آیا افزودن قرارداد به یک تابع پس از نخستین اعلان آن رد شود یا خیر. پیش‌فرض off است. .RE .RS 4 .Sp معناشناسی‌های مشخص ممکنی که می‌توان با \&\fB\-fcontract\-role\fR یا \fB\-fcontract\-semantic\fR تعیین کرد عبارت‌اند از: .ie n .IP """ignore""" 4 .el .IP \f(CWignore\fR 4 .IX Item "ignore" این قرارداد هیچ تأثیری ندارد. .ie n .IP """assume""" 4 .el .IP \f(CWassume\fR 4 .IX Item "assume" با این قرارداد مانند \f(CW\*(C`[[assume]]\*(C'\fR در C++23 رفتار می‌شود. .ie n .IP """check_never_continue""" 4 .el .IP \f(CWcheck_never_continue\fR 4 .IX Item "check_never_continue" .PD 0 .ie n .IP """never""" 4 .el .IP \f(CWnever\fR 4 .IX Item "never" .ie n .IP """abort""" 4 .el .IP \f(CWabort\fR 4 .IX Item "abort" .PD این قرارداد بررسی می‌شود. در صورت شکست، گردانندهٔ نقض فراخوانی می‌شود. اگر گرداننده بازگردد، \f(CW\*(C`std::terminate\*(C'\fR فراخوانی می‌شود. .ie n .IP """check_maybe_continue""" 4 .el .IP \f(CWcheck_maybe_continue\fR 4 .IX Item "check_maybe_continue" .PD 0 .ie n .IP """maybe""" 4 .el .IP \f(CWmaybe\fR 4 .IX Item "maybe" .PD این قرارداد بررسی می‌شود. در صورت شکست، گردانندهٔ نقض فراخوانی می‌شود. اگر گرداننده بازگردد، اجرا به صورت عادی ادامه می‌یابد. .RE .RS 4 .RE .IP \fB\-fcoroutines\fR 4 .IX Item "-fcoroutines" پشتیبانی از افزونهٔ همروندها (coroutines) در C++ را فعال می‌کند (آزمایشی). .IP \fB\-fdiagnostics\-all\-candidates\fR 4 .IX Item "-fdiagnostics-all-candidates" به بخش جلویی (front end) کامپایلر 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" کدی برای بررسی نقض مشخصات استثناها در زمان اجرا تولید نمی‌کند. این گزینه استاندارد C++ را نقض می‌کند، اما ممکن است برای کاهش اندازهٔ کد در ساخت‌های نهایی مفید باشد، بسیار شبیه به تعریف \&\f(CW\*(C`NDEBUG\*(C'\fR. این به کد کاربر اجازه نمی‌دهد که بر خلاف مشخصات استثناها، استثنا پرتاب کند؛ کامپایلر همچنان بر اساس مشخصات بهینه‌سازی می‌کند، بنابراین پرتاب یک استثنای غیرمنتظره منجر به رفتار تعریف‌نشده (undefined behavior) در زمان اجرا خواهد شد. .IP \fB\-fextern\-tls\-init\fR 4 .IX Item "-fextern-tls-init" .PD 0 .IP \fB\-fno\-extern\-tls\-init\fR 4 .IX Item "-fno-extern-tls-init" .PD استانداردهای C++11 و OpenMP به متغیرهای \f(CW\*(C`thread_local\*(C'\fR و \&\f(CW\*(C`threadprivate\*(C'\fR اجازه می‌دهند تا مقداردهی اولیهٔ پویا (زمان اجرا) داشته باشند. برای پشتیبانی از این ویژگی، هرگونه استفاده از چنین متغیری از طریق یک تابع پوشاننده (wrapper) انجام می‌شود که هرگونه مقداردهی اولیهٔ لازم را انجام می‌دهد. هنگامی که استفاده و تعریف متغیر در یک واحد ترجمه (TU) یکسان باشد، می‌توان این سربار را با بهینه‌سازی حذف کرد، اما زمانی که استفاده در یک واحد ترجمهٔ متفاوت باشد، سربار چشمگیری وجود خواهد داشت حتی اگر متغیر واقعاً نیازی به مقداردهی اولیهٔ پویا نداشته باشد. اگر برنامه‌نویس بتواند مطمئن باشد که هیچ استفاده‌ای از متغیر در یک TU غیرتعریف‌کننده نیازی به راه‌اندازی مقداردهی اولیهٔ پویا ندارد (خواه به این دلیل که متغیر به‌صورت ایستا مقداردهی اولیه شده است، یا اینکه استفاده از متغیر در TU تعریف‌کننده پیش از هرگونه استفاده در TU دیگر اجرا خواهد شد)، می‌تواند با گزینهٔ \&\fB\-fno\-extern\-tls\-init\fR از این سربار جلوگیری کند. .Sp در مقصدهایی که از نام‌های مستعار نماد (symbol aliases) پشتیبانی می‌کنند، پیش‌فرض \&\fB\-fextern\-tls\-init\fR است. در مقصدهایی که از نام‌های مستعار نماد پشتیبانی نمی‌کنند، پیش‌فرض \fB\-fno\-extern\-tls\-init\fR است..IP \fB\-ffold\-simple\-inlines\fR 4 .IX Item "-ffold-simple-inlines" .PD 0 .IP \fB\-fno\-fold\-simple\-inlines\fR 4 .IX Item "-fno-fold-simple-inlines" .PD به فرانت‌اند C++ اجازه می‌دهد فراخوانی‌های \f(CW\*(C`std::move\*(C'\fR، \f(CW\*(C`std::forward\*(C'\fR، \&\f(CW\*(C`std::addressof\*(C'\fR و \f(CW\*(C`std::as_const\*(C'\fR را فولد (fold) کند. برخلاف درون‌خطی‌سازی (inlining)، این بدان معناست که هیچ اطلاعات اشکال‌زدایی برای چنین فراخوانی‌هایی تولید نخواهد شد. از آن‌جا که اشکال‌زدایی این توابع به‌ندرت مورد توجه است، این پرچم به‌طور پیش‌فرض فعال است مگر آن‌که \fB\-fno\-inline\fR فعال باشد. .IP \fB\-fno\-gnu\-keywords\fR 4 .IX Item "-fno-gnu-keywords" شناسایی \f(CW\*(C`typeof\*(C'\fR را به عنوان کلمهٔ کلیدی متوقف کن، تا کد بتواند از این واژه به عنوان یک شناسه استفاده کند. می‌توانید به‌جای آن از کلمهٔ کلیدی \&\f(CW\*(C`_\|_typeof_\|_\*(C'\fR استفاده کنید. این گزینه توسط گویش‌های صریح ISO C++ مانند \&\fB\-ansi\fR، \fB\-std=c++98\fR، \fB\-std=c++11\fR و غیره به‌طور ضمنی فعال می‌شود. .IP \fB\-fno\-immediate\-escalation\fR 4 .IX Item "-fno-immediate-escalation" ارتقای توابع فوری (immediate function escalation) را که به موجب آن توابع خاصی می‌توانند طبق مشخصات P2564R3 به consteval ارتقا یابند، فعال نکن. برای مثال: .Sp .Vb 1 \& consteval int id(int i) { return i; } \& \& constexpr int f(auto t) \& { \& return t + id(t); // id causes f to be promoted to consteval \& } \& \& void g(int i) \& { \& f (3); \& } .Ve .Sp در C++20 کامپایل می‌شود: تابع \f(CW\*(C`f\*(C'\fR یک تابع ارتقاء‌دهندهٔ فوری است (به دلیل وجود \f(CW\*(C`auto\*(C'\fR یک قالب تابع بوده و به صورت \f(CW\*(C`constexpr\*(C'\fR اعلان شده است) و \f(CWid(t)\fR یک عبارت ارتقاء‌دهندهٔ فوری است، بنابراین \f(CW\*(C`f\*(C'\fR به \f(CW\*(C`consteval\*(C'\fR ارتقا می‌یابد. در نتیجه، فراخوانی \f(CWid(t)\fR در یک بافتار فوری (immediate context) قرار دارد، بنابراین نیازی به تولید یک ثابت ندارد (این سازوکاری است که امکان ترکیب توابع consteval را فراهم می‌سازد). با این حال، با \fB\-fno\-immediate\-escalation\fR، تابع \f(CW\*(C`f\*(C'\fR به \&\f(CW\*(C`consteval\*(C'\fR ارتقا پیدا نمی‌کند و از آن‌جا که فراخوانی تابع consteval یعنی \f(CWid(t)\fR یک عبارت ثابت نیست، کامپایلر کد را رد می‌کند. .Sp این گزینه به‌طور پیش‌فرض فعال است؛ و تنها در حالت C++20 یا بالاتر مؤثر خواهد بود. .IP \fB\-fimplicit\-constexpr\fR 4 .IX Item "-fimplicit-constexpr" توابع درون‌خطی (inline) را در صورتی که شرایط یک تابع constexpr را داشته باشند، به‌طور ضمنی constexpr کن. این گزینه در حالت C++14 یا بالاتر قابل استفاده است. این امر می‌تواند به تغییر مقداردهی اولیه از پویا به ایستا و دیگر بهینه‌سازی‌ها منجر شود. .IP \fB\-fno\-implicit\-templates\fR 4 .IX Item "-fno-implicit-templates" هرگز برای قالب‌های غیردرون‌خطی (non-inline) که به‌طور ضمنی نمونه‌سازی شده‌اند (یعنی هنگام استفاده) کدی تولید نکن؛ تنها برای نمونه‌سازی‌های صریح کد تولید کن. اگر از این گزینه استفاده می‌کنید، باید دقت کنید که ساختار کد خود را طوری سامان دهید که شامل تمام نمونه‌سازی‌های صریح لازم باشد تا در زمان پیوند با نمادهای تعریف‌نشده مواجه نشوید. .IP \fB\-fno\-implicit\-inline\-templates\fR 4 .IX Item "-fno-implicit-inline-templates" برای نمونه‌سازی‌های ضمنی قالب‌های درون‌خطی نیز کدی تولید نکن. پیش‌فرض این است که با توابع درون‌خطی متفاوت رفتار شود تا کامپایل با و بدون بهینه‌سازی به مجموعهٔ یکسانی از نمونه‌سازی‌های صریح نیاز داشته باشد. .IP \fB\-fno\-implement\-inlines\fR 4 .IX Item "-fno-implement-inlines" برای صرفه‌جویی در فضا، نسخه‌های خارج از خط (out-of-line) توابع درون‌خطی تحت کنترل \f(CW\*(C`#pragma implementation\*(C'\fR را تولید نکن. اگر این توابع در تمام جاهایی که فراخوانی می‌شوند درون‌خطی نشده باشند، این کار باعث خطاهای پیونددهنده (linker) خواهد شد. .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 کامپایل یک فایل سرآیند برای ایجاد یک واحد سرآیند قابل وارد کردن (importable header unit). .IP \fB\-fmodule\-implicit\-inline\fR 4 .IX Item "-fmodule-implicit-inline" توابع عضوی که در تعریف کلاس خود تعریف شده‌اند، برای کدهای ماژولار به‌طور ضمنی درون‌خطی نیستند. این رفتار به دلایل موجهی با رفتار سنتی C++ متفاوت است. با این حال، ممکن است هنگام انتقال کد (porting) باعث ایجاد دشواری شود. این گزینه این‌گونه تعاریف توابع را به‌طور ضمنی درون‌خطی می‌کند. اما این کار ناسازگاری در ABI ایجاد می‌کند، بنابراین باید در همه‌جا یا هیچ‌جا استفاده شود. (چنین تعاریفی در خارج از یک ماژولِ دارای نام، در هر صورت به‌طور ضمنی درون‌خطی باقی می‌مانند.) .IP \fB\-fno\-module\-lazy\fR 4 .IX Item "-fno-module-lazy" وارد کردن تنبل ماژول (lazy module importing) و ایجاد نقشه‌بردار ماژول را غیرفعال کن. .IP \fB\-fmodule\-mapper=\fR[\fIhostname\fR]\fB:\fR\fIport\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=[hostname]:port[?ident]" .PD 0 .IP "\fB\-fmodule\-mapper=|\fR\fIprogram\fR[\fB?\fR\fIident\fR]\fB \fR\fIargs...\fR" 4 .IX Item "-fmodule-mapper=|program[?ident] args..." .IP \fB\-fmodule\-mapper==\fR\fIsocket\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper==socket[?ident]" .IP \fB\-fmodule\-mapper=<>\fR[\fIinout\fR][\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=<>[inout][?ident]" .IP \fB\-fmodule\-mapper=<\fR\fIin\fR\fB>\fR\fIout\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=out[?ident]" .IP \fB\-fmodule\-mapper=\fR\fIfile\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=file[?ident]" .PD یک مرجع (oracle) برای پرس‌وجوی نگاشت نام ماژول به نام فایل. در صورت عدم تعیین، متغیر محیطی \fBCXX_MODULE_MAPPER\fR استفاده می‌شود، و اگر آن نیز تنظیم نشده باشد، یک پیش‌فرض درون‌فرایندی ارائه می‌شود. .IP \fB\-fmodule\-only\fR 4 .IX Item "-fmodule-only" فقط رابط ماژول کامپایل‌شده (Compiled Module Interface) را تولید کن و از تولید هرگونه فایل شیء جلوگیری نما. .IP \fB\-fms\-extensions\fR 4 .IX Item "-fms-extensions" هشدارهای Wpedantic را در مورد ساختارهای استفاده‌شده در MFC، مانند int ضمنی و دریافت اشاره‌گر به تابع عضو از طریق نحو غیر استاندارد، غیرفعال کن. .IP \fB\-fnew\-inheriting\-ctors\fR 4 .IX Item "-fnew-inheriting-ctors" تغییرات P0136 در معناشناسی وراثت سازنده‌ها در C++11 را فعال کن. این بخشی از C++17 است اما همچنین یک گزارش نقص (Defect Report) برای C++11 و C++14 نیز محسوب می‌شود. این پرچم به‌طور پیش‌فرض فعال است مگر این‌که \fB\-fabi\-version=10\fR یا پایین‌تر مشخص شده باشد. .IP \fB\-fnew\-ttp\-matching\fR 4 .IX Item "-fnew-ttp-matching" مصوبهٔ P0522 در رفع مسئلهٔ اصلی شمارهٔ ۱۵۰، پارامترهای قالبِ قالب و آرگومان‌های پیش‌فرض را فعال کن: این به یک قالب با آرگومان‌های قالب پیش‌فرض اجازه می‌دهد به عنوان آرگومانی برای یک پارامتر قالبِ قالب با پارامترهای قالب کمتر استفاده شود. این پرچم به‌طور پیش‌فرض برای \&\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 است تا بار اضافی اندازهٔ بخش کد نسبت به تابعی بدون مشخصهٔ استثنا کاهش یابد یا حذف شود. اگر تابع دارای متغیرهای محلی با انواع دارای تخریب‌کننده‌های غیربدیهی باشد، مشخصهٔ استثنا در واقع اندازهٔ تابع را کوچک‌تر می‌کند زیرا پاک‌سازی‌های مدیریت استثنا (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" پیام‌های تشخیصی که استاندارد می‌گوید کامپایلر نیازی به صدور آن‌ها ندارد را غیرفعال کن. در حال حاضر، تنها پیام تشخیصی از این نوع که توسط 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) غیرفعال کن. اگر از این بخش‌های زبان استفاده نمی‌کنید، می‌توانید با استفاده از این پرچم در فضای خروجی صرفه‌جویی کنید. توجه داشته باشید که مدیریت استثناها نیز از همین اطلاعات استفاده می‌کند، اما G++ آن را در صورت نیاز تولید می‌نماید. عملگر \f(CW\*(C`dynamic_cast\*(C'\fR همچنان می‌تواند برای تبدیلهایی که به اطلاعات نوع زمان اجرا نیازی ندارند، مانند تبدیل به \&\f(CW\*(C`void *\*(C'\fR یا به کلاس‌های پایهٔ بدون ابهام، استفاده شود. .Sp ترکیب کدهای کامپایل‌شده با \fB\-frtti\fR و کدهای کامپایل‌شده با \&\fB\-fno\-rtti\fR ممکن است درست کار نکند. برای مثال، اگر کلاسی که با \&\fB\-fno\-rtti\fR کامپایل شده به عنوان پایه برای کلاسی استفاده شود که با \&\fB\-frtti\fR کامپایل شده است، برنامه‌ها ممکن است در پیوند با شکست مواجه شوند. .IP \fB\-fsized\-deallocation\fR 4 .IX Item "-fsized-deallocation" اعلان‌های سراسری و توکار .Sp .Vb 2 \& void operator delete (void *, std::size_t) noexcept; \& void operator delete[] (void *, std::size_t) noexcept; .Ve .Sp را همان‌طور که در C++14 معرفی شده فعال کن. این برای توابع آزادسازی حافظهٔ جایگزین که توسط کاربر تعریف شده‌اند و برای مثال از اندازهٔ شیء برای آزادسازی سریع‌تر استفاده می‌کنند، مفید است. این گزینه به‌طور پیش‌فرض در \&\fB\-std=c++14\fR و بالاتر فعال است. پرچم \fB\-Wsized\-deallocation\fR در مورد جاهایی که ممکن است نیاز به افزودن یک تعریف داشته باشند، هشدار می‌دهد..IP \fB\-fstrict\-enums\fR 4 .IX Item "-fstrict-enums" به کامپایلر اجازه می‌دهد با این فرض بهینه‌سازی کند که مقدار یک نوع شمارشی (enumerated type) تنها می‌تواند یکی از مقادیر همان شمارش باشد (همان‌گونه که در استاندارد C++ تعریف شده است؛ اساساً، مقداری که بتوان آن را با حداقل تعداد بیت‌های لازم برای نمایش تمام شمارنده‌ها نشان داد). اگر برنامه از تبدیل صریح (cast) برای تبدیل یک مقدار صحیح دلخواه به نوع شمارشی استفاده کند، این فرض ممکن است نامعتبر باشد. این گزینه هیچ تأثیری بر نوع شمارشی با نوع زیربنایی ثابت ندارد. .IP \fB\-fstrong\-eval\-order\fR 4 .IX Item "-fstrong-eval-order" .PD 0 .IP \fB\-fstrong\-eval\-order=\fR\fIkind\fR 4 .IX Item "-fstrong-eval-order=kind" .PD عبارت‌های دسترسی به عضو، اندیس‌گذاری آرایه و شیفت را به ترتیب چپ\-به\-راست و عبارت‌های انتساب را به ترتیب راست\-به\-چپ ارزیابی می‌کند، همان‌طور که برای C++17 تصویب شد. \fB\-fstrong\-eval\-order\fR معادل \&\fB\-fstrong\-eval\-order=all\fR است و به‌طور پیش‌فرض در \fB\-std=c++17\fR یا بالاتر فعال می‌شود. .Sp گزینهٔ \&\fB\-fstrong\-eval\-order=some\fR تنها ترتیب دسترسی به اعضا و عبارت‌های شیفت را فعال می‌کند، و حالت پیش‌فرض برای گویش‌های C++ پیش از C++17 است. .Sp گزینهٔ \&\fB\-fstrong\-eval\-order=none\fR معادل با \&\fB\-fno\-strong\-eval\-order\fR است. .IP \fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR 4 .IX Item "-ftemplate-backtrace-limit=n" حداکثر تعداد یادداشت‌های نمونه‌سازی الگو (template instantiation notes) را برای یک هشدار یا خطای منفرد روی \fIn\fR تنظیم می‌کند. مقدار پیش‌فرض ۱۰ است. .IP \fB\-ftemplate\-depth=\fR\fIn\fR 4 .IX Item "-ftemplate-depth=n" حداکثر عمق نمونه‌سازی برای کلاس‌های الگو را روی \fIn\fR تنظیم می‌کند. تعیین محدودیت برای عمق نمونه‌سازی الگو جهت شناسایی بازگشت‌های بی‌پایان در حین نمونه‌سازی کلاس‌های الگو ضروری است. برنامه‌های منطبق با استاندارد ANSI/ISO C++ نباید به حداکثر عمقی بیش از ۱۷ متکی باشند (که در C++11 به ۱۰۲۴ تغییر یافت). مقدار پیش‌فرض ۹۰۰ است، زیرا در برخی شرایط ممکن است کامپایلر پیش از رسیدن به ۱۰۲۴ با کمبود فضای پشته (stack) مواجه شود. .IP \fB\-fno\-threadsafe\-statics\fR 4 .IX Item "-fno-threadsafe-statics" کد اضافی برای استفاده از روال‌های مشخص‌شده در C++ ABI جهت مقداردهی اولیه‌ی امن از نظر چندریسمانی (thread\-safe) برای متغیرهای ایستای محلی تولید نمی‌کند. می‌توانید از این گزینه برای کاهش جزئی حجم کد در برنامه‌هایی که نیازی به ایمن بودن در برابر ریسمان‌ها ندارند استفاده کنید. .IP \fB\-fuse\-cxa\-atexit\fR 4 .IX Item "-fuse-cxa-atexit" مخرب‌ها (destructors) را برای اشیائی با مدت زمان ذخیره‌سازی ایستا به جای تابع \f(CW\*(C`atexit\*(C'\fR با تابع \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR ثبت می‌کند. این گزینه برای مدیریت کاملاً منطبق بر استاندارد مخرب‌های ایستا الزامی است، اما تنها در صورتی کار می‌کند که کتابخانهٔ C شما از \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR پشتیبانی کند. .IP \fB\-fno\-use\-cxa\-get\-exception\-ptr\fR 4 .IX Item "-fno-use-cxa-get-exception-ptr" از روال زمان‌اجرای \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR استفاده نمی‌کند. این موضوع باعث نادرست عمل کردن \f(CW\*(C`std::uncaught_exception\*(C'\fR می‌شود، اما در صورتی که این روال زمان‌اجرا در دسترس نباشد، ضروری است. .IP \fB\-fvisibility\-inlines\-hidden\fR 4 .IX Item "-fvisibility-inlines-hidden" این سوییچ اعلام می‌کند که کاربر تلاشی برای مقایسهٔ اشاره‌گرها به توابع یا متدهای inline در حالتی که آدرس‌های دو تابع از شیءهای مشترک (shared objects) متفاوتی گرفته شده‌اند، انجام نمی‌دهد. .Sp اثر این گزینه این است که GCC می‌تواند عملاً متدهای inline را با \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR نشانه‌گذاری کند تا در جدول صدور یک DSO ظاهر نشوند و هنگام استفاده در درون همان DSO نیازی به ارجاع غیرمستقیم PLT نداشته باشند. فعال کردن این گزینه می‌تواند تأثیر چشمگیری بر زمان بارگذاری و پیوند (link) یک DSO بگذارد، چرا که در صورت استفادهٔ فراوان کتابخانه از الگوها، حجم جدول صدور پویا را به میزان زیادی کاهش می‌دهد. .Sp رفتار این سوییچ دقیقاً مشابه نشانه‌گذاری مستقیم متدها به‌عنوان hidden نیست، چرا که بر متغیرهای ایستای محلی تابع تأثیری نمی‌گذارد و سبب نمی‌شود کامپایلر نتیجه بگیرد که تابع تنها در یک شیء مشترک تعریف شده است. .Sp می‌توانید برای خنثی کردن اثر این سوییچ، دید (visibility) یک متد را به‌طور صریح مشخص کنید. برای مثال، اگر می‌خواهید اشاره‌گرها به یک متد inline خاص را مقایسه کنید، می‌توانید دید آن را به‌طور صریح روی default قرار دهید. مشخص کردن دید صریح برای کلاس دربرگیرنده هیچ اثری نخواهد داشت. .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." قاعدهٔ تعریف واحد (ODR) برای انواعی که فاقد تعیین صریح دید هستند و در بیش از یک شیء مشترک تعریف شده‌اند، تسهیل می‌شود: این اعلان‌ها در صورتی که بدون استفاده از این گزینه مجاز باشند، مجاز شمرده می‌شوند. .RE .RS 4 .Sp در کدهای جدید، بهتر است از \fB\-fvisibility=hidden\fR استفاده شود و کلاس‌هایی که قرار است به‌طور بیرونی قابل مشاهده باشند، صادر شوند. متأسفانه این امکان وجود دارد که کدهایی، شاید به‌طور تصادفی، به رفتار 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 به یک سرآیند کاربری یا سیستمی خاص تبدیل (resolve) می‌شود. .IP \fB\-flang\-info\-module\-cmi\fR 4 .IX Item "-flang-info-module-cmi" .PD 0 .IP \fB\-flang\-info\-module\-cmi=\fR\fImodule\fR 4 .IX Item "-flang-info-module-cmi=module" .PD نام‌مسیرهای رابط ماژول کامپایل‌شده (CMI) را گزارش می‌دهد. حالت اول تمام نام‌مسیرهای CMI خوانده‌شده را ثبت می‌کند. فرم \fImodule\fR خوانده شدن CMI یک ماژول خاص را گزارش می‌دهد. \fImodule\fR می‌تواند یک ماژول نام‌گذاری‌شده یا یک واحد سرآیند (header-unit) باشد (مورد دوم با داشتن جداکنندهٔ دایرکتوری در نام‌مسیر یا قرار گرفتن در \f(CW\*(C`<>\*(C'\fR یا \f(CW""\fR مشخص می‌شود). .IP \fB\-stdlib=\fR\fIlibstdc++,libc++\fR 4 .IX Item "-stdlib=libstdc++,libc++" هنگامی که G++ برای پشتیبانی از این گزینه پیکربندی شده باشد، اجازهٔ تعیین کتابخانه‌های زمان‌اجرای جایگزین C++ را می‌دهد. دو گزینه در دسترس است: \fIlibstdc++\fR (زمان‌اجرای بومی و پیش‌فرض C++ برای G++) و \fIlibc++\fR که کتابخانهٔ زمان‌اجرای C++ نصب‌شده روی برخی سیستم‌عامل‌ها است (مانند نگارش‌های Darwin از Darwin11 به بعد). این گزینه G++ را هدایت می‌کند تا از سرآیندهای کتابخانهٔ مشخص‌شده استفاده کند و هنگام نیاز به زمان‌اجرای C++ برای پیوند، به ترتیب \f(CW\*(C`\-lstdc++\*(C'\fR یا \f(CW\*(C`\-lc++\*(C'\fR را صادر کند. .PP علاوه بر این، گزینه‌های هشدار زیر تنها برای برنامه‌های C++ معنی دارند: .IP "\fB\-Wabi\-tag\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wabi-tag (C++ and Objective-C++ only)" هنگامی که نوعی با یک برچسب ABI در زمینه‌ای استفاده شود که فاقد آن برچسب ABI است، هشدار می‌دهد. برای اطلاعات بیشتر در مورد برچسب‌های ABI به \fBC++ Attributes\fR مراجعه کنید. .IP "\fB\-Wcomma\-subscript\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wcomma-subscript (C++ and Objective-C++ only)" در مورد استفاده از عبارت ویرگول در یک عبارت اندیس‌گذاری هشدار می‌دهد. این کاربرد در C++20 منسوخ (deprecated) شده و در C++23 حذف خواهد شد. با این حال، عبارت ویرگولی که درون \f(CW\*(C`( )\*(C'\fR قرار گرفته باشد منسوخ نیست. مثال: .Sp .Vb 4 \& void f(int *a, int b, int c) { \& a[b,c]; // deprecated in C++20, invalid in C++23 \& a[(b,c)]; // OK \& } .Ve .Sp در C++23، وجود عبارت‌های جداشده با کاما در داخل اندیس زمانی معتبر است که یک عملگر اندیس سربارگذاری‌شده یافت شود و از تعداد و انواع درست آرگومان‌ها پشتیبانی کند. G++ این نحو پیش‌تر معتبر را برای کدهایی که در C++23 معتبر نیستند اما در C++20 معتبر ولی منسوخ بودند، همراه با یک هشدار سخت‌گیرانه (pedantic) می‌پذیرد که می‌توان آن را با \&\fB\-Wno\-comma\-subscript\fR غیرفعال کرد. .Sp این گزینه به‌طور پیش‌فرض در \fB\-std=c++20\fR فعال است مگر با \&\fB\-Wno\-deprecated\fR، و پس از \fB\-std=c++23\fR بدون در نظر گرفتن \&\fB\-Wno\-deprecated\fR فعال می‌شود. پیش از \fB\-std=c++20\fR، با استفاده از گزینهٔ صریح \fB\-Wdeprecated\fR فعال می‌گردد. .Sp این هشدار در حالت C++23 یا بالاتر توسط \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد..IP "\fB\-Wctad\-maybe\-unsupported\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wctad-maybe-unsupported (C++ and Objective-C++ only)" هنگام استنتاج آرگومان الگوی کلاس (CTAD) روی نوعی که هیچ راهنمای استنتاج (deduction guide) صریحی برای آن نوشته نشده است، هشدار می‌دهد. این هشدار مواردی را مشخص می‌کند که در آن‌ها CTAD صرفاً به این دلیل موفق شده است که کامپایلر راهنماهای استنتاج ضمنی را سنتز کرده است، که ممکن است مد نظر برنامه‌نویس نبوده باشد. برخی از شیوه‌نامه‌ها استفاده از CTAD را تنها برای نوع‌هایی مجاز می‌دانند که به‌طور خاص «اعلام آمادگی» (opt\-in) کرده باشند؛ یعنی نوع‌هایی که برای پشتیبانی از CTAD طراحی شده‌اند. این هشدار را می‌توان با الگوی زیر فرونشاند: .Sp .Vb 6 \& struct allow_ctad_t; // any name works \& template struct S { \& S(T) { } \& }; \& // Guide with incomplete parameter type will never be considered. \& S(allow_ctad_t) \-> S; .Ve .IP "\fB\-Wctor\-dtor\-privacy\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wctor-dtor-privacy (C++ and Objective-C++ only)" زمانی که کلاسی غیرقابل‌استفاده به نظر می‌رسد هشدار می‌دهد، چرا که تمام سازنده‌ها یا ویرانگرها در آن کلاس خصوصی (private) هستند و هیچ تابع دوست (friend) یا تابع عضو ایستای عمومی (public static) ندارد. همچنین در صورتی که هیچ متد غیرخصوصی وجود نداشته باشد و حداقل یک تابع عضو خصوصی که سازنده یا ویرانگر نیست وجود داشته باشد، هشدار می‌دهد. .IP "\fB\-Wdangling\-reference\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wdangling-reference (C++ and Objective-C++ only)" زمانی که یک مرجع (reference) به یک شیء موقت که طول عمر آن به پایان رسیده متصل شود، هشدار می‌دهد. برای مثال: .Sp .Vb 2 \& int n = 1; \& const int& r = std::max(n \- 1, n + 1); // r is dangling .Ve .Sp در مثال بالا، دو شیء موقت ایجاد می‌شوند، یکی برای هر آرگومان، و مرجعی به یکی از این اشیاء موقت بازگردانده می‌شود. با این حال، هر دو شیء موقت در پایان عبارت کامل (full\-expression) از بین می‌روند، بنابراین مرجع \f(CW\*(C`r\*(C'\fR معلق (dangling) می‌شود. این هشدار همچنین مراجع معلق را در فهرست‌های مقداردهی اولیه اعضا تشخیص می‌دهد: .Sp .Vb 5 \& const int& f(const int& i) { return i; } \& struct S { \& const int &r; // r is dangling \& S() : r(f(10)) { } \& }; .Ve .Sp توابع عضو نیز بررسی می‌شوند، اما فقط آرگومان شیء آن‌ها: .Sp .Vb 4 \& struct S { \& const S& self () { return *this; } \& }; \& const S& s = S().self(); // s is dangling .Ve .Sp توابع خاصی از این حیث ایمن هستند، به عنوان مثال \f(CW\*(C`std::use_facet\*(C'\fR: آن‌ها یک مرجع می‌گیرند و برمی‌گردانند، اما یکی از آرگومان‌های خود را برنمی‌گردانند، که می‌تواند این هشدار را فریب دهد. چنین توابعی را می‌توان با قرار دادن آن‌ها در یک \f(CW\*(C`#pragma\*(C'\fR از هشدار مستثنی کرد: .Sp .Vb 4 \& #pragma GCC diagnostic push \& #pragma GCC diagnostic ignored "\-Wdangling\-reference" \& const T& foo (const T&) { ... } \& #pragma GCC diagnostic pop .Ve .Sp دستور \f(CW\*(C`#pragma\*(C'\fR همچنین می‌تواند کلاس را در بر بگیرد؛ در این صورت، هشدار برای تمام توابع عضو غیرفعال خواهد شد. .Sp \&\fB\-Wdangling\-reference\fR همچنین در مورد کدهایی مانند .Sp .Vb 1 \& auto p = std::minmax(1, 2); .Ve .Sp هشدار می‌دهد، جایی که \f(CW\*(C`std::minmax\*(C'\fR مقدار \f(CW\*(C`std::pair\*(C'\fR را برمی‌گرداند و هر دو مرجع پس از پایان عبارت کاملی که شامل فراخوانی \f(CW\*(C`std::minmax\*(C'\fR است، معلق می‌شوند. .Sp این هشدار برای کلاس‌های شبیه به \f(CW\*(C`std::span\*(C'\fR هشداری صادر نمی‌کند. کلاس‌هایی به فرم: .Sp .Vb 5 \& template \& struct Span { \& T* data_; \& std::size len_; \& }; .Ve .Sp به عنوان کلاس‌های شبیه به \f(CW\*(C`std::span\*(C'\fR در نظر گرفته می‌شوند؛ به این معنی که کلاس یک نوع غیر-union است که دارای یک عضو داده‌ای اشاره‌گر و یک ویرانگر بدیهی (trivial) است. .Sp این هشدار را می‌توان با استفاده از ویژگی \f(CW\*(C`gnu::no_dangling\*(C'\fR غیرفعال کرد. .Sp این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)" زمانی که از \f(CW\*(C`delete\*(C'\fR برای تخریب نمونه‌ای از کلاسی استفاده شود که دارای توابع مجازی و ویرانگر غیرمجازی است، هشدار می‌دهد. حذف نمونه‌ای از یک کلاس مشتق‌شده از طریق اشاره‌گری به کلاس پایه در صورتی که کلاس پایه فاقد ویرانگر مجازی باشد ناامن است. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wdeprecated\-copy\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wdeprecated-copy (C++ and Objective-C++ only)" در C++11 به بعد، هشدار می‌دهد که اعلان ضمنی یک سازنده رونوشت (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)" هشدار مربوط به حالتی را که در آن تبدیلات محاسباتی معمول (usual arithmetic conversions) بر عملوندهایی اعمال می‌شوند که یکی از نوع شمارشی و دیگری از نوع شمارشی متفاوتی است، غیرفعال می‌کند. این تبدیل در C++20 منسوخ شده است. برای مثال: .Sp .Vb 3 \& enum E1 { e }; \& enum E2 { f }; \& int k = f \- e; .Ve .Sp گزینهٔ \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR به‌طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است. در گویش‌های پیش از C++20، این هشدار را می‌توان با \fB\-Wenum\-conversion\fR یا \fB\-Wdeprecated\fR فعال کرد. .IP "\fB\-Wno\-deprecated\-enum\-float\-conversion\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)" هشدار مربوط به حالتی را که در آن تبدیلات محاسباتی معمول بر عملوندهایی اعمال می‌شوند که یکی از نوع شمارشی و دیگری از نوع ممیز شناور (floating\-point) است، غیرفعال می‌کند. این تبدیل در C++20 منسوخ شده است. برای مثال: .Sp .Vb 3 \& enum E1 { e }; \& enum E2 { f }; \& bool b = e <= 3.7; .Ve .Sp گزینهٔ \&\fB\-Wdeprecated\-enum\-float\-conversion\fR به‌طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است. در گویش‌های پیش از C++20، این هشدار را می‌توان با \fB\-Wenum\-conversion\fR یا \fB\-Wdeprecated\fR فعال کرد. .IP "\fB\-Wdeprecated\-literal\-operator\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wdeprecated-literal-operator (C++ and Objective-C++ only)" هشدار می‌دهد که اعلان عملگر لفظی تعریف‌شده توسط کاربر (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 (varargs) در پایان فهرست پارامترهای تابع منسوخ شده است. این هشدار به‌طور پیش‌فرض در C++26 یا با تعریف صریح \fB\-Wdeprecated\fR فعال می‌شود. .Sp .Vb 6 \& void f1(int...); // deprecated \& void f1(int, ...); // preferred \& template \& void f2(T...); // ok \& template \& void f3(T......); // deprecated .Ve .IP \fB\-Wno\-elaborated\-enum\-base\fR 4 .IX Item "-Wno-elaborated-enum-base" برای C++11 و بالاتر، در صورتی که یک enum\-base اضافی (نامعتبر) در یک elaborated\-type\-specifier استفاده شود هشدار می‌دهد. یعنی اگر یک enum با نوع زیربنایی مشخص و بدون فهرست شمارنده‌ها، در اعلانی غیر از صرفاً یک اعلان مستقل از همان enum استفاده شود. این گزینه به‌طور پیش‌فرض فعال است. این هشدار با \-pedantic\-errors به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-init\-list\-lifetime\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wno-init-list-lifetime (C++ 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 ایجاد کند، آرایه فقط تا پایان عبارت کامل دربرگیرنده زنده می‌ماند، بنابراین \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 موقت ساخته شود، اشاره‌گر در انتهای عبارت اعلان متغیر معلق (dangling) باقی می‌ماند. .RE .RS 4 .RE .IP \fB\-Winvalid\-constexpr\fR 4 .IX Item "-Winvalid-constexpr" زمانی که یک تابع هرگز عبارت ثابتی (constant expression) تولید نمی‌کند، هشدار می‌دهد. در C++20 و نسخه‌های پیشین، برای هر تابع و الگوی تابع \f(CW\*(C`constexpr\*(C'\fR، باید حداقل یک مجموعه از آرگومان‌های تابع در حداقل یک نمونه‌سازی (instantiation) وجود داشته باشد به طوری که فراخوانی تابع یا سازنده بتواند یک زیرعبارت ارزیابی‌شده از یک عبارت ثابت اصلی (core constant expression) باشد. C++23 این محدودیت را حذف کرد، بنابراین امکان دارد تابع یا الگوی تابعی با علامت \f(CW\*(C`constexpr\*(C'\fR وجود داشته باشد که هیچ فراخوانی‌ای از آن شرایط یک عبارت ثابت اصلی را برآورده نکند. .Sp این هشدار به طور پیش‌فرض در C++20 و نسخه‌های پیشین به عنوان یک هشدار pedantic فعال است. در C++23، می‌توان \fB\-Winvalid\-constexpr\fR را روشن کرد که در این صورت یک هشدار معمولی خواهد بود. برای مثال: .Sp .Vb 7 \& void f (int& i); \& constexpr void \& g (int& i) \& { \& // Warns by default in C++20, in C++23 only with \-Winvalid\-constexpr. \& f(i); \& } .Ve .IP \fB\-Winvalid\-imported\-macros\fR 4 .IX Item "-Winvalid-imported-macros" معتبر بودن تمام تعریف‌های ماکروهای واردشده (imported) را در پایان کامپایل بررسی می‌کند. این گزینه به طور پیش‌فرض فعال نیست، زیرا تعیین آن نیازمند پردازش اضافی است. این گزینه ممکن است هنگام آماده‌سازی مجموعه‌هایی از header\-unitها برای اطمینان از سازگاری ماکروها مفید باشد. .IP "\fB\-Wno\-literal\-suffix\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-literal-suffix (C++ and Objective-C++ only)" هنگامی که پس از یک لیترال رشته‌ای یا نویسه‌ای، یک ud\-suffix می‌آید که با زیرخط (underscore) شروع نمی‌شود، هشدار نمی‌دهد. به عنوان یک افزونه منطبق بر استاندارد، GCC برای حفظ سازگاری عقبرو با کدهایی که از ماکروهای قالب‌بندی \f(CW\*(C`\*(C'\fR استفاده می‌کنند، با چنین پسوندهایی به عنوان نشانه‌های پیش‌پردازش مجزا رفتار می‌کند. برای مثال: .Sp .Vb 3 \& #define _\|_STDC_FORMAT_MACROS \& #include \& #include \& \& int main() { \& int64_t i64 = 123; \& printf("My int64: %" PRId64"\en", i64); \& } .Ve .Sp در این حالت، با \f(CW\*(C`PRId64\*(C'\fR به عنوان یک نشانه پیش‌پردازش مجزا برخورد می‌شود. .Sp این گزینه همچنین هشدارهایی را کنترل می‌کند که در آن‌ها یک عملگر لیترال تعریف‌شده توسط کاربر با شناسه پسوند لیترالی اعلان می‌شود که با زیرخط شروع نمی‌شود. شناسه‌های پسوند لیترال که با زیرخط شروع نمی‌شوند برای استانداردسازی‌های آینده رزرو شده‌اند. .Sp این هشدارها به طور پیش‌فرض فعال هستند. .IP "\fB\-Wno\-narrowing\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-narrowing (C++ and Objective-C++ only)" برای C++11 و استانداردهای پس از آن، تبدیلات باریک‌کننده (narrowing conversions) همان‌طور که توسط استاندارد الزامی است، به طور پیش‌فرض تشخیص داده می‌شوند. تبدیل باریک‌کننده از یک مقدار ثابت منجر به خطا شده و تبدیل باریک‌کننده از یک مقدار غیرثابت هشدار تولید می‌کند، اما \fB\-Wno\-narrowing\fR این تشخیص را سرکوب می‌کند. توجه داشته باشید که این گزینه بر معنای کد خوش‌فرم (well-formed) تأثیری ندارد؛ تبدیلات باریک‌کننده همچنان در زمینه‌های SFINAE بدفرم (ill-formed) در نظر گرفته می‌شوند. .Sp همراه با \fB\-Wnarrowing\fR در C++98، زمانی که یک تبدیل باریک‌کنندهٔ ممنوع‌شده توسط C++11 درون \&\fB{ }\fR رخ دهد هشدار می‌دهد، مثلاً: .Sp .Vb 1 \& int i = { 2.2 }; // error: narrowing from double to int .Ve .Sp این پرچم در \fB\-Wall\fR و \fB\-Wc++11\-compat\fR گنجانده شده است. .IP "\fB\-Wnoexcept\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wnoexcept (C++ and Objective-C++ only)" هشدار می‌دهد زمانی که یک noexcept\-expression به دلیل فراخوانی تابعی که فاقد مشخصه استثنای بدون پرتاب (یعنی \f(CWthrow()\fR یا \f(CW\*(C`noexcept\*(C'\fR) است، اما کامپایلر می‌داند که هرگز استثنایی پرتاب نمی‌کند، به false ارزیابی شود. .IP "\fB\-Wnoexcept\-type\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wnoexcept-type (C++ and Objective-C++ only)" هشدار می‌دهد اگر ویژگی C++17 که \f(CW\*(C`noexcept\*(C'\fR را بخشی از نوع تابع قرار می‌دهد، نام درهم‌ریخته (mangled name) یک نماد را نسبت به C++14 تغییر دهد. توسط \fB\-Wabi\fR و \fB\-Wc++17\-compat\fR فعال می‌شود. .Sp به عنوان مثال: .Sp .Vb 3 \& template void f(T t) { t(); }; \& void g() noexcept; \& void h() { f(g); } .Ve .Sp در C++14، تابع \f(CW\*(C`f\*(C'\fR تابع \f(CW\*(C`f\*(C'\fR را فراخوانی می‌کند، اما در C++17 فراخوانی \f(CW\*(C`f\*(C'\fR انجام می‌شود. .IP "\fB\-Wclass\-memaccess\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wclass-memaccess (C++ and Objective-C++ only)" هشدار می‌دهد زمانی که مقصد فراخوانی یکی از توابع خام حافظه مانند \&\f(CW\*(C`memset\*(C'\fR یا \f(CW\*(C`memcpy\*(C'\fR، شیئی از نوع کلاس باشد و نوشتن در چنین شیئی ممکن است سازندهٔ غیربدیهی (non-trivial) یا حذف‌شده یا انتساب رونوشت (copy assignment) کلاس را دور بزند، درستیِ const (یا const-correctness) یا کپسوله‌سازی را نقض کند، یا اشاره‌گرهای جدول مجازی (vtable) را مخدوش سازد. تغییر نمایش (representation) چنین اشیایی ممکن است نامتغیرهایی (invariants) را که توسط توابع عضو کلاس حفظ می‌شوند نقض کند. برای مثال، فراخوانی زیر برای \f(CW\*(C`memset\*(C'\fR تعریف‌نشده (undefined) است زیرا یک شیء غیربدیهی از کلاس را تغییر می‌دهد و بنابراین تشخیص داده می‌شود. روش ایمن برای مقداردهی اولیه یا پاک‌سازی حافظهٔ اشیایی از این انواع، استفاده از سازنده یا عملگر انتساب مناسب در صورت وجود است. .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)" هشدار می‌دهد زمانی که یک کلاس دارای توابع مجازی و یک مخرب غیرمجازی در دسترس درون خود یا در یک کلاس پایه چندریختی (polymorphic) در دسترس باشد؛ که در این صورت حذف یک نمونه از کلاس مشتق‌شده از طریق اشاره‌گری به خود کلاس یا کلاس پایه امکان‌پذیر ولی ناامن است. این هشدار در صورت تعیین \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 هشدار می‌دهد، مگر زمانی که بخشی از افزونهٔ GNU با عنوان \fBExplicit Register Variables\fR باشد. استفاده از کلیدواژهٔ \f(CW\*(C`register\*(C'\fR به عنوان مشخص‌کننده رده حافظه در C++11 منسوخ شده و در C++17 حذف شده است. به طور پیش‌فرض با \fB\-std=c++17\fR فعال است. .IP "\fB\-Wreorder\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wreorder (C++ and Objective-C++ only)" هشدار می‌دهد زمانی که ترتیب مقداردهنده‌های اعضا (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) شود. یک سناریوی متداول که در آن copy elision می‌تواند رخ دهد، هنگام بازگشت از تابعی با نوع بازگشتی کلاس است؛ زمانی که عبارت در حال بازگشت، نام یک شیء خودکار (automatic) غیر volatile بوده، پارامتر تابع نباشد و نوعی یکسان با نوع بازگشتی تابع داشته باشد. .Sp .Vb 9 \& struct T { \& ... \& }; \& T fn() \& { \& T t; \& ... \& return std::move (t); \& } .Ve .Sp اما در این مثال، فراخوانی \f(CW\*(C`std::move\*(C'\fR مانع از copy elision می‌شود. .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-redundant\-move\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-redundant-move (C++ and Objective-C++ only)" این هشدار درباره فراخوانی‌های زائد \f(CW\*(C`std::move\*(C'\fR هشدار می‌دهد؛ یعنی زمانی که عملیات انتقال حتی بدون فراخوانی \f(CW\*(C`std::move\*(C'\fR نیز انجام می‌شد. این اتفاق به این دلیل رخ می‌دهد که کامپایلر در موقعیت‌های خاصی مانند بازگرداندن یک متغیر محلی، در جایی که copy elision امکان‌پذیر نیست، مجبور است با شیء طوری رفتار کند که گویی یک 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 در این مثال، copy elision قابل اعمال نیست زیرا نوع عبارت در حال بازگشت و نوع بازگشتی تابع با یکدیگر تفاوت دارند، با این حال 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)" این هشدار زمانی اعلام می‌شود که یک حلقهٔ \f(CWfor\fR مبتنی بر دامنه (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 این هشدار همچنین زمانی اعلام می‌شود که یک متغیر حلقه در یک حلقهٔ \f(CWfor\fR مبتنی بر دامنه با مقداری از یک نوع متفاوت مقداردهی اولیه شده و منجر به ایجاد یک رونوشت گردد. برای مثال: .Sp .Vb 4 \& void fn() { \& int arr[10]; \& for (const double &x : arr) { ... } \& } .Ve .Sp در مثال بالا، در هر تکرار حلقه یک مقدار موقت از نوع \f(CW\*(C`double\*(C'\fR ایجاد و نابود می‌شود که ارجاع \f(CW\*(C`const double &\*(C'\fR به آن مقید شده است. .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wredundant\-tags\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wredundant-tags (C++ and Objective-C++ only)" دربارهٔ \f(CWclass\-key\fR و \f(CWenum\-key\fR اضافی در ارجاع به انواع کلاسی و انواع شمارشی در زمینه‌هایی که این کلید می‌تواند بدون ایجاد ابهام حذف شود، هشدار می‌دهد. برای مثال: .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) وابسته باشد، تعریف آن در چندین واحد ترجمه نقض قاعدهٔ ODR خواهد بود، زیرا معنای B در هر واحد ترجمه متفاوت است. اگر A فقط در یک واحد ترجمه ظاهر شود، بهترین روش برای فرونشاندن هشدار این است که با قرار دادن آن در یک فضای نام ناشناس، به آن نیز پیوند داخلی داده شود. کامپایلر این هشدار را برای انواع تعریف‌شده در فایل اصلی \f(CW.C\fR صادر نمی‌کند، چرا که بعید است تعاریف متعددی داشته باشند. \&\fB\-Wsubobject\-linkage\fR به طور پیش‌فرض فعال است. .IP "\fB\-Weffc++\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Weffc++ (C++ and Objective-C++ only)" دربارهٔ نقض رهنمودهای شیوه‌نامه‌ای زیر از مجموعه کتاب‌های \fIEffective C++\fR اثر Scott Meyers هشدار می‌دهد: .RS 4 .IP * 4 برای کلاس‌های دارای حافظه با تخصیص پویا، یک سازندهٔ رونوشت (copy constructor) و یک عملگر انتساب (assignment operator) تعریف کنید. .IP * 4 در سازنده‌ها، مقداردهی اولیه (initialization) را به انتساب (assignment) ترجیح دهید. .IP * 4 کاری کنید که \f(CW\*(C`operator=\*(C'\fR ارجاعی به \f(CW*this\fR بازگرداند. .IP * 4 هنگامی که باید یک شیء بازگردانید، سعی نکنید یک ارجاع بازگردانید. .IP * 4 میان فرم‌های پیشوندی و پسوندی عملگرهای افزایش و کاهش تمایز قائل شوید. .IP * 4 هرگز \f(CW\*(C`&&\*(C'\fR، \f(CW\*(C`||\*(C'\fR یا \f(CW\*(C`,\*(C'\fR را سربارگذاری (overload) نکنید. .RE .RS 4 .Sp این گزینه همچنین \fB\-Wnon\-virtual\-dtor\fR را فعال می‌کند که آن هم یکی از توصیه‌های Effective C++ است. با این حال، این بررسی گسترش یافته تا دربارهٔ عدم وجود مخرب مجازی در کلاس‌های پایهٔ غیرچندریختی (non\-polymorphic) قابل‌دسترس نیز هشدار دهد. .Sp هنگام انتخاب این گزینه آگاه باشید که سرایندهای کتابخانهٔ استاندارد از همهٔ این رهنمودها پیروی نمی‌کنند؛ برای پالایش و حذف این هشدارها از \fBgrep \-v\fR استفاده کنید. .RE .IP "\fB\-Wno\-exceptions\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-exceptions (C++ and Objective-C++ only)" هشدار مربوط به حالتی را که در آن یک گردانندهٔ استثنا (exception handler) توسط گردانندهٔ دیگری پوشانده (shadow) می‌شود، غیرفعال می‌کند؛ وضعیتی که می‌تواند نشان‌دهندهٔ ترتیب نادرست گرداننده‌های استثنا باشد. .IP "\fB\-Wstrict\-null\-sentinel\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wstrict-null-sentinel (C++ and Objective-C++ only)" دربارهٔ استفاده از \f(CW\*(C`NULL\*(C'\fR تبدیل‌نوع‌نیافته به عنوان نگهبان (sentinel) هشدار می‌دهد. هنگام کامپایل صرفاً با GCC، این یک نگهبان معتبر است، زیرا \f(CW\*(C`NULL\*(C'\fR به صورت \f(CW\*(C`_\|_null\*(C'\fR تعریف شده است. هرچند که این مقدار به جای یک اشاره‌گر تهی، یک ثابت اشاره‌گر تهی است، اما تضمین می‌شود که هم‌اندازه با یک اشاره‌گر باشد. با این وجود، این کاربرد در میان کامپایلرهای مختلف سازگار و قابل‌حمل (portable) نیست. .IP "\fB\-Wno\-non\-template\-friend\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-non-template-friend (C++ and Objective-C++ only)" هنگام اعلان توابع دوست غیرقالب درون یک قالب، هشدارها را غیرفعال می‌کند. در نسخه‌های بسیار قدیمی 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)" پیام تشخیصی برای تبدیل یک اشاره‌گر مقید به تابع عضو به یک اشاره‌گر معمولی را غیرفعال می‌کند. .IP "\fB\-Wsign\-promo\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wsign-promo (C++ and Objective-C++ only)" زمانی هشدار می‌دهد که در تفکیک بارگذاری بیش از حد (overload resolution)، ارتقا از یک نوع بدون علامت یا شمارشی به یک نوع علامت‌دار بر تبدیل به نوع بدون علامت با همان اندازه ترجیح داده شود. نسخه‌های قبلی G++ تلاش می‌کردند بدون علامت بودن را حفظ کنند، اما استاندارد رفتار فعلی را الزام می‌کند. .IP "\fB\-Wtemplates\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wtemplates (C++ and Objective-C++ only)" هنگامی که با اعلان یک قالب اولیه (primary template) مواجه می‌شود، هشدار می‌دهد. برخی از قواعد کدنویسی استفاده از قالب‌ها را منع می‌کنند و این گزینه می‌تواند برای اعمال آن قاعده استفاده شود. این هشدار در داخل فایل‌های سرایند سیستم، مانند STL، غیرفعال است، بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان قالب‌ها را نمونه‌سازی (instantiate) یا تخصیص (specialize) داد. .IP "\fB\-Wmismatched\-new\-delete\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wmismatched-new-delete (C++ and Objective-C++ only)" دربارهٔ عدم تطابق میان فراخوانی‌های \f(CW\*(C`operator new\*(C'\fR یا \f(CW\*(C`operator delete\*(C'\fR و فراخوانی متناظر با تابع تخصیص یا آزادسازی حافظه هشدار می‌دهد. این شامل فراخوانی‌های \f(CW\*(C`operator delete\*(C'\fR در ++C با اشاره‌گرهای بازگردانده‌شده از فرم‌های ناسازگار \f(CW\*(C`operator new\*(C'\fR، یا از توابع دیگری است که اشیایی را تخصیص می‌دهند که \f(CW\*(C`operator delete\*(C'\fR برای آن‌ها آزادساز مناسبی نیست، و همچنین فراخوانی سایر توابع آزادسازی با اشاره‌گرهای بازگردانده‌شده از \f(CW\*(C`operator new\*(C'\fR که تابع آزادسازی برای آن‌ها مناسب نیست. .Sp برای مثال، عبارت \f(CW\*(C`delete\*(C'\fR در تابع زیر تشخیص داده می‌شود زیرا با شکل آرایه‌ای عبارت \f(CW\*(C`new\*(C'\fR که آرگومان اشاره‌گر از آن بازگردانده شده بود، تطابق ندارد. به همین ترتیب، فراخوانی \f(CW\*(C`free\*(C'\fR نیز تشخیص داده می‌شود. .Sp .Vb 4 \& void f () \& { \& int *a = new int[n]; \& delete a; // warning: mismatch in array forms of expressions \& \& char *p = new char[n]; \& free (p); // warning: mismatch between new and free \& } .Ve .Sp گزینهٔ مرتبط \fB\-Wmismatched\-dealloc\fR عدم تطابق‌های شامل توابع تخصیص و آزادسازی غیر از \f(CW\*(C`operator new\*(C'\fR و \f(CW\*(C`operator delete\*(C'\fR را تشخیص می‌دهد. .Sp \&\fB\-Wmismatched\-new\-delete\fR در \fB\-Wall\fR گنجانده شده است..IP "\fB\-Wmismatched\-tags\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wmismatched-tags (C++ and Objective-C++ only)" در مورد اعلان‌های structها، classها و الگوهای کلاس (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 قابل حمل باشند، این هشدار به جلوگیری از ارجاع‌های حل‌نشده (unresolved references) ناشی از تفاوت در درهم‌سازی نمادهای (symbol mangling) اعلان‌شده با class\-keyهای متفاوت کمک می‌کند. این گزینه می‌تواند به تنهایی یا همراه با \fB\-Wredundant\-tags\fR استفاده شود. .IP "\fB\-Wmultiple\-inheritance\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wmultiple-inheritance (C++ and Objective-C++ only)" هنگامی که کلاسی با چندین کلاس پایه مستقیم تعریف شود هشدار می‌دهد. برخی از قواعد کدنویسی وراثت چندگانه را مجاز نمی‌دانند، و از این گزینه می‌توان برای اعمال آن قاعده استفاده کرد. این هشدار در داخل فایل‌های سرایند سیستم، مانند STL، غیرفعال است، بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان کلاس‌هایی تعریف کرد که به‌طور غیرمستقیم از وراثت چندگانه استفاده می‌کنند. .IP \fB\-Wvirtual\-inheritance\fR 4 .IX Item "-Wvirtual-inheritance" هنگامی که کلاسی با یک کلاس پایه مستقیم مجازی تعریف شود هشدار می‌دهد. برخی از قواعد کدنویسی وراثت چندگانه را مجاز نمی‌دانند، و از این گزینه می‌توان برای اعمال آن قاعده استفاده کرد. این هشدار در داخل فایل‌های سرایند سیستم، مانند STL، غیرفعال است، بنابراین همچنان می‌توان از STL استفاده نمود. همچنین می‌توان کلاس‌هایی تعریف کرد که به‌طور غیرمستقیم از وراثت مجازی استفاده می‌کنند. .IP \fB\-Wno\-virtual\-move\-assign\fR 4 .IX Item "-Wno-virtual-move-assign" هشدارهای مربوط به ارث‌بری از یک پایه مجازی با عملگر انتساب انتقال (move assignment) غیرساده (non\-trivial) در C++11 را سرکوب می‌کند. این حالت خطرناک است زیرا اگر کلاس پایه مجازی از بیش از یک مسیر قابل دسترسی باشد، چندین بار منتقل (move) می‌شود، که می‌تواند بدین معنا باشد که هر دو شیء در وضعیت انتقال‌یافته (moved\-from) قرار می‌گیرند. اگر عملگر انتساب انتقال طوری نوشته شده باشد که از انتقال یک شیءِ از قبل منتقل‌شده جلوگیری کند، می‌توان این هشدار را غیرفعال کرد. .IP \fB\-Wnamespaces\fR 4 .IX Item "-Wnamespaces" هنگامی که تعریف یک فضای نام باز می‌شود هشدار می‌دهد. برخی از قواعد کدنویسی فضاهای نام را مجاز نمی‌دانند، و از این گزینه می‌توان برای اعمال آن قاعده استفاده کرد. این هشدار در داخل فایل‌های سرایند سیستم، مانند STL، غیرفعال است، بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان از دستورهای using و نام‌های واجد شرایط (qualified names) استفاده نمود. .IP "\fB\-Wno\-template\-body\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wno-template-body (C++ and Objective-C++ only)" تشخیص خطاها هنگام تجزیه یک الگو (template) را غیرفعال می‌کند و در عوض، تنها هنگام نمونه‌سازی (instantiation) الگو خطا صادر می‌نماید. این پرچم همچنین می‌تواند برای تنزل دادن چنین خطاهایی به هشدار همراه با \fBWno\-error=\fR یا \fB\-fpermissive\fR استفاده شود. .IP "\fB\-Wno\-template\-id\-cdtor\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wno-template-id-cdtor (C++ and Objective-C++ only)" هشدار درباره استفاده از simple\-template\-id به عنوان declarator\-id یک سازنده یا مخرب را غیرفعال می‌کند، که در C++20 از طریق DR 2237 نامعتبر شد. به عنوان مثال: .Sp .Vb 4 \& template struct S { \& S(); // should be S(); \& ~S(); // should be ~S(); \& }; .Ve .Sp گزینه \fB\-Wtemplate\-id\-cdtor\fR به طور پیش‌فرض با \fB\-std=c++20\fR فعال است؛ همچنین توسط \fB\-Wc++20\-compat\fR فعال می‌شود. .IP \fB\-Wtemplate\-names\-tu\-local\fR 4 .IX Item "-Wtemplate-names-tu-local" هنگامی که بدنه یک الگو، افشای یک موجودیت محلی برای واحد ترجمه (translation\-unit\-local) را پنهان می‌کند هشدار می‌دهد. در بیشتر موارد، ارجاع به یک موجودیت محلی برای واحد ترجمه (مانند یک اعلان با پیوند درونی / 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)" زمانی که یک تابع تبدیل (conversion function) یک شیء را به همان نوع، به یک کلاس پایه از آن نوع، یا به void تبدیل می‌کند، هشدار نمی‌دهد؛ چنین تابع تبدیلی هرگز فراخوانی نخواهد شد. .IP "\fB\-Wvolatile\fR (فقط C++‎ و Objective\-C++‎)" 4 .IX Item "-Wvolatile (C++ and Objective-C++ only)" درباره استفاده‌های منسوخ‌شده از توصیف‌گر \f(CW\*(C`volatile\*(C'\fR هشدار می‌دهد. این شامل عبارت‌های پسوندی و پیشوندی \f(CW\*(C`++\*(C'\fR و \f(CW\*(C`\-\-\*(C'\fR برای نوع‌های دارای توصیف‌گر \f(CW\*(C`volatile\*(C'\fR، استفاده از انتساب‌های ساده در جایی که عملوند چپ یک نوع غیرکلاسی مقید به \f(CW\*(C`volatile\*(C'\fR برای مقدار آن‌ها است، انتساب‌های ترکیبی که عملوند چپ آن‌ها یک نوع غیرکلاسی مقید به \f(CW\*(C`volatile\*(C'\fR است، نوع بازگشتی تابع مقید به \f(CW\*(C`volatile\*(C'\fR، نوع پارامتر مقید به \f(CW\*(C`volatile\*(C'\fR، و پیوندهای ساختاریافته (structured bindings) از یک نوع مقید به \f(CW\*(C`volatile\*(C'\fR می‌شود. این کاربرد در C++20 منسوخ شده است. .Sp به طور پیش‌فرض با \fB\-std=c++20\fR فعال است. پیش از \fB\-std=c++20\fR، با استفاده صریح از \fB\-Wdeprecated\fR فعال می‌شود. .IP \fB\-Waligned\-new\fR 4 .IX Item "-Waligned-new" درباره عبارت new از نوعی که نیاز به ترازی (alignment) بیشتر از \f(CWalignof(std::max_align_t)\fR دارد اما از یک تابع تخصیص بدون پارامتر هم‌ترازی صریح استفاده می‌کند، هشدار می‌دهد. این گزینه توسط \fB\-Wall\fR فعال می‌شود. .Sp به طور معمول این گزینه فقط درباره توابع تخصیص سراسری هشدار می‌دهد، اما \fB\-Waligned\-new=all\fR درباره توابع تخصیص عضو کلاس نیز هشدار می‌دهد. .IP \fB\-Wno\-placement\-new\fR 4 .IX Item "-Wno-placement-new" .PD 0 .IP \fB\-Wplacement\-new=\fR\fIn\fR 4 .IX Item "-Wplacement-new=n" .PD درباره عبارت‌های placement new با رفتار تعریف‌نشده (undefined behavior)، مانند ساخت یک شیء در بافری که از اندازه نوع شیء کوچک‌تر است، هشدار می‌دهد. به عنوان مثال، عبارت placement new زیر اخطار دریافت می‌کند زیرا تلاش می‌کند آرایه‌ای از ۶۴ عدد صحیح را در بافری با اندازه فقط ۶۴ بایت بسازد. .Sp .Vb 2 \& char buf [64]; \& new (buf) int[64]; .Ve .Sp این هشدار به طور پیش‌فرض فعال است. .RS 4 .IP \fB\-Wplacement\-new=1\fR 4 .IX Item "-Wplacement-new=1" این سطح هشدار پیش‌فرض برای \fB\-Wplacement\-new\fR است. در این سطح، هشدار برای برخی ساختارهای اکیداً تعریف‌نشده که GCC آن‌ها را به عنوان افزونه جهت سازگاری با کدهای قدیمی مجاز می‌داند صادر نمی‌شود. به عنوان مثال، عبارت \f(CW\*(C`new\*(C'\fR زیر در این سطح تشخیص داده نمی‌شود حتی اگر بر اساس استاندارد C++‎ دارای رفتار تعریف‌نشده باشد زیرا فراتر از انتهای آرایه تک‌عنصری می‌نویسد. .Sp .Vb 3 \& struct S { int n, a[1]; }; \& S *s = (S *)malloc (sizeof *s + 31 * sizeof s\->a[0]); \& new (s\->a)int [32](); .Ve .IP \fB\-Wplacement\-new=2\fR 4 .IX Item "-Wplacement-new=2" در این سطح، علاوه بر تشخیص تمام ساختارهای سطح ۱، تشخیصی نیز برای عبارت‌های placement new صادر می‌شود که شیئی را در آخرین عضو ساختار که نوع آن آرایه‌ای تک‌عنصری است و اندازه‌اش از اندازه شیء در حال ساخت کمتر است، می‌سازند. در حالی که مثال قبلی در این سطح اخطار دریافت می‌کند، ساختار زیر از افزونه آرایه عضوی انعطاف‌پذیر (flexible member array) استفاده می‌کند تا از هشدار در سطح ۲ اجتناب نماید. .Sp .Vb 3 \& struct S { int n, a[]; }; \& S *s = (S *)malloc (sizeof *s + 32 * sizeof s\->a[0]); \& new (s\->a)int [32](); .Ve .RE .RS 4 .RE.IP \fB\-Wcatch\-value\fR 4 .IX Item "-Wcatch-value" .PD 0 .IP "\fB\-Wcatch\-value=\fR\fIn\fR\fB \fR(فقط C++ و Objective\-C++)" 4 .IX Item "-Wcatch-value=n (C++ and Objective-C++ only)" .PD درباره کنترل‌کننده‌های catch که مقادیر را با ارجاع (reference) دریافت نمی‌کنند، هشدار می‌دهد. با \fB\-Wcatch\-value=1\fR (یا به اختصار \fB\-Wcatch\-value\fR) درباره نوع‌های کلاس چندریختی (polymorphic) که با مقدار (by value) دریافت می‌شوند هشدار می‌دهد. با \fB\-Wcatch\-value=2\fR درباره تمام نوع‌های کلاس که با مقدار دریافت می‌شوند هشدار می‌دهد. با \fB\-Wcatch\-value=3\fR درباره تمام نوع‌هایی که با ارجاع دریافت نمی‌شوند هشدار می‌دهد. \fB\-Wcatch\-value\fR توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wconditionally\-supported\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wconditionally-supported (C++ and Objective-C++ only)" درباره ساختارهای با پشتیبانی مشروط (conditionally\-supported در C++11 [intro.defs]) هشدار می‌دهد. .IP "\fB\-Wno\-defaulted\-function\-deleted\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-defaulted-function-deleted (C++ and Objective-C++ only)" زمانی که تابعی که صراحتاً پیش‌فرض شده (defaulted) توسط کامپایلر حذف (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)" درباره نقطه‌ویرگول‌های اضافی و زائد هشدار می‌دهد. زمینه‌های متعددی وجود دارد که در آن‌ها ممکن است نقطه‌ویرگول اضافی رخ دهد. یکی نقطه‌ویرگول پس از تعاریف توابع درون‌کلاس (in\-class) است که در تمام گویش‌های C++ معتبر است (و هرگز یک pedwarn محسوب نمی‌شود): .Sp .Vb 3 \& struct S { \& void foo () {}; \& }; .Ve .Sp دیگری یک نقطه‌ویرگول اضافه در دامنه فضای نام (namespace scope) است که از C++11 به بعد مجاز شده است (بنابراین در C++98 یک pedwarn است): .Sp .Vb 3 \& struct S { \& }; \& ; .Ve .Sp و مورد دیگر نقطه‌ویرگول اضافه در تعاریف کلاس است که از C++11 به بعد مجاز شده است (بنابراین در C++98 یک pedwarn است): .Sp .Vb 4 \& struct S { \& int a; \& ; \& }; .Ve .IP "\fB\-Wno\-global\-module\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-global-module (C++ and Objective-C++ only)" پیام عیب‌یابی را برای زمانی که قطعه ماژول سراسری (global module fragment) یک واحد ماژول صرفاً از دستورالعمل‌های پیش‌پردازنده تشکیل نشده باشد، غیرفعال می‌کند. .IP "\fB\-Wno\-inaccessible\-base\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-inaccessible-base (C++, Objective-C++ only)" این گزینه هشدارهایی را کنترل می‌کند که هنگام غیرقابل دسترس بودن یک کلاس پایه در کلاس مشتق‌شده از آن به دلیل ابهام رخ می‌دهد. این هشدار به‌طور پیش‌فرض فعال است. توجه داشته باشید که هشدار برای پایه‌های مجازی مبهم توسط گزینه \fB\-Wextra\fR فعال می‌شود. .Sp .Vb 1 \& struct A { int a; }; \& \& struct B : A { }; \& \& struct C : B, A { }; .Ve .IP \fB\-Wno\-inherited\-variadic\-ctor\fR 4 .IX Item "-Wno-inherited-variadic-ctor" هشدارهای مربوط به استفاده از سازنده‌های ارث‌بری‌شده در C++11 را در مواردی که کلاس پایه به ارث‌رسیده دارای سازنده چندآرگومانی (variadic) به سبک C باشد، فرو می‌نشاند؛ این هشدار به‌طور پیش‌فرض فعال است زیرا علامت سه‌نقطه (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 را فرومی‌نشاند. بر اساس استاندارد ISO C++ سال ۲۰۱۴، اعمال \f(CW\*(C`offsetof\*(C'\fR روی یک نوع دارای چیدمان غیراستاندارد (non\-standard\-layout) تعریف‌نشده است. با این حال، در پیاده‌سازی‌های موجود C++، معمولاً \f(CW\*(C`offsetof\*(C'\fR نتایج معناداری ارائه می‌دهد. این پرچم برای کاربرانی است که آگاهند در حال نوشتن کدی غیرقابل‌حمل هستند و عمداً تصمیم گرفته‌اند هشدار مربوط به آن را نادیده بگیرند. .Sp محدودیت‌های مربوط به \f(CW\*(C`offsetof\*(C'\fR ممکن است در نسخه‌های آینده استاندارد C++ تسهیل شوند. .IP "\fB\-Wsized\-deallocation\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wsized-deallocation (C++ and Objective-C++ only)" درباره تعریف تابع آزادسازی حافظه بدون اندازه (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، کیفیت کد بهبود می‌یابد. این هشدار در هنگام بهینه‌سازی زمان پیوند، که اطلاعات مربوط به گراف سلسله‌مراتب کلاس‌ها در آن کامل‌تر است، اثربخشی بیشتری دارد. توصیه می‌شود ابتدا پیشنهادهای \fB\-Wsuggest\-final\-types\fR را بررسی کرده و سپس با نشانه‌گذاری‌های جدید مجدداً پروژه را بسازید. .IP \fB\-Wsuggest\-override\fR 4 .IX Item "-Wsuggest-override" درباره توابع مجازی بازنویسی‌کننده‌ای (overriding) که با کلیدواژه \&\f(CW\*(C`override\*(C'\fR علامت‌گذاری نشده‌اند، هشدار می‌دهد. .IP "\fB\-Wno\-conversion\-null\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-conversion-null (C++ and Objective-C++ only)" درباره تبدیلات بین \f(CW\*(C`NULL\*(C'\fR و انواع غیر اشاره‌گری هشدار نمی‌دهد. \fB\-Wconversion\-null\fR به‌طور پیش‌فرض فعال است..SS "گزینه‌های کنترل‌کننده گویش‌های Objective\-C و Objective\-C++ (Options Controlling Objective-C and Objective-C++ Dialects)" .IX Subsection "Options Controlling Objective-C and Objective-C++ Dialects" (یادداشت: این دفترچه راهنما خود زبان‌های Objective\-C و Objective\-C++ را شرح نمی‌دهد. .PP این بخش گزینه‌های خط فرمانی را شرح می‌دهد که تنها برای برنامه‌های Objective\-C و Objective\-C++ معنادار هستند. شما همچنین می‌توانید از بیشتر گزینه‌های مستقل از زبان کامپایلر GNU استفاده کنید. برای نمونه، می‌توانید فایلی مانند \fIsome_class.m\fR را این‌گونه کامپایل کنید: .PP .Vb 1 \& gcc \-g \-fgnu\-runtime \-O \-c some_class.m .Ve .PP در این مثال، \fB\-fgnu\-runtime\fR گزینه‌ای است که تنها برای برنامه‌های Objective\-C و Objective\-C++ در نظر گرفته شده است؛ شما می‌توانید از سایر گزینه‌ها همراه با هر زبان پشتیبانی‌شده توسط GCC استفاده نمایید. .PP توجه داشته باشید از آنجا که Objective\-C یک گسترش بر زبان C است، کامپایل‌های Objective\-C نیز ممکن است از گزینه‌های مختص فرانت‌اند C (مانند \&\fB\-Wtraditional\fR) استفاده کنند. به همین ترتیب، کامپایل‌های Objective\-C++ می‌توانند از گزینه‌های مختص C++ (مانند \fB\-Wabi\fR) بهره ببرند. .PP در ادامه فهرستی از گزینه‌هایی آمده است که \fIتنها\fR برای کامپایل برنامه‌های Objective\-C و Objective\-C++ هستند: .IP \fB\-fconstant\-string\-class=\fR\fIclass\-name\fR 4 .IX Item "-fconstant-string-class=class-name" از \fIclass\-name\fR به عنوان نام کلاسی که باید برای هر لیترال رشته مشخص‌شده با نحو \f(CW\*(C`@"..."\*(C'\fR نمونه‌سازی شود، استفاده می‌کند. نام کلاس پیش‌فرض در صورت استفاده از زمان اجرای GNU برابر با \f(CW\*(C`NXConstantString\*(C'\fR، و در صورت استفاده از زمان اجرای NeXT برابر با \&\f(CW\*(C`NSConstantString\*(C'\fR خواهد بود (پایین‌تر را ببینید). روی سکوهای Darwin / macOS، در صورت حضور گزینه \fB\-fconstant\-cfstrings\fR، این گزینه بر تنظیمات \fB\-fconstant\-string\-class\fR تقدم یافته و موجب می‌شود لیترال‌های \&\f(CW\*(C`@"..."\*(C'\fR به عنوان رشته‌های ثابت CoreFoundation چیدمان شوند. توجه داشته باشید که \fB\-fconstant\-cfstrings\fR یک نام مستعار برای معادل مختص هدف \&\fB\-mconstant\-cfstrings\fR است. .IP \fB\-fgnu\-runtime\fR 4 .IX Item "-fgnu-runtime" تولید کد شیء سازگار با زمان اجرای استاندارد GNU Objective\-C. این حالت پیش‌فرض برای بیشتر انواع سیستم‌ها است. .IP \fB\-fnext\-runtime\fR 4 .IX Item "-fnext-runtime" تولید خروجی سازگار با زمان اجرای NeXT. این حالت پیش‌فرض برای سیستم‌های مبتنی بر NeXT، از جمله Darwin / macOS است. ماکروی \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR تنها و تنها در صورت استفاده از این گزینه، از پیش تعریف می‌شود. .IP \fB\-fno\-nil\-receivers\fR 4 .IX Item "-fno-nil-receivers" فرض را بر این می‌گذارد که تمام ارسال‌های پیام Objective\-C (\f(CW\*(C`[receiver message:arg]\*(C'\fR) در این واحد ترجمه، تضمین می‌کنند که گیرنده \&\f(CW\*(C`nil\*(C'\fR نیست. این کار امکان استفاده از نقاط ورودی بهینه‌تر را در زمان اجرا فراهم می‌سازد. این گزینه تنها در ترکیب با زمان اجرای NeXT و نسخه 0 یا 1 از ABI در دسترس است. .IP \fB\-fobjc\-abi\-version=\fR\fIn\fR 4 .IX Item "-fobjc-abi-version=n" استفاده از نسخه \fIn\fR مربوط به ABI زبان Objective\-C برای زمان اجرای انتخاب‌شده. این گزینه در حال حاضر تنها برای زمان اجرای NeXT پشتیبانی می‌شود. در آن حالت، نسخه 0 همان ABI سنتی (۳۲ بیتی) بدون پشتیبانی از خصوصیات و دیگر افزونه‌های Objective\-C 2.0 است. نسخه 1 ABI سنتی (۳۲ بیتی) همراه با پشتیبانی از خصوصیات و دیگر افزونه‌های Objective\-C 2.0 است. نسخه 2 ABI مدرن (۶۴ بیتی) است. اگر چیزی مشخص نشود، پیش‌فرض روی ماشین‌های هدف ۳۲ بیتی نسخه 0، و روی ماشین‌های هدف ۶۴ بیتی نسخه 2 خواهد بود. .IP \fB\-fobjc\-call\-cxx\-cdtors\fR 4 .IX Item "-fobjc-call-cxx-cdtors" برای هر کلاس Objective\-C، بررسی می‌کند که آیا متغیری از متغیرهای نمونه آن یک شیء C++ با سازنده پیش‌فرض غیربدیهی هست یا خیر. در این صورت، یک متد نمونه ویژه به نام \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR را سنتز می‌کند که سازنده‌های پیش‌فرض غیربدیهی را روی هر یک از این متغیرهای نمونه به ترتیب اجرا کرده و سپس \&\f(CW\*(C`self\*(C'\fR را بازمی‌گرداند. به طور مشابه، بررسی می‌کند که آیا متغیر نمونه‌ای شیء C++ با ویران‌کننده غیربدیهی است یا خیر، و در این صورت، یک متد ویژه به نام \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR را سنتز می‌کند که تمام این ویران‌کننده‌های پیش‌فرض را به ترتیب معکوس اجرا می‌نماید. .Sp متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR که بدین ترتیب تولید می‌شوند، تنها روی متغیرهای نمونه اعلان‌شده در کلاس فعلی Objective\-C عمل می‌کنند، نه مواردی که از ابرکلاس‌ها به ارث رسیده‌اند. فراخوانی تمام این متدها در سلسله‌مراتب توارث یک شیء بر عهده زمان اجرای Objective\-C است. متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR بلافاصله پس از تخصیص یک نمونه شیء جدید توسط زمان اجرا فراخوانی می‌شوند؛ متدهای \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR نیز بلافاصله پیش از آنکه زمان اجرا نمونه شیء را آزادسازی کند، فراخوانی می‌گردند. .Sp تا زمان نگارش این مستند، تنها زمان اجرای NeXT در Mac OS X 10.4 و جدیدتر از فراخوانی متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR پشتیبانی می‌کند. .IP \fB\-fobjc\-direct\-dispatch\fR 4 .IX Item "-fobjc-direct-dispatch" امکان پرش‌های سریع به ارسال‌کننده پیام را فراهم می‌سازد. در Darwin این امر از طریق comm page محقق می‌شود. .IP \fB\-fobjc\-exceptions\fR 4 .IX Item "-fobjc-exceptions" پشتیبانی نحوی را برای مدیریت ساختاریافته استثناها در Objective\-C فعال می‌کند، مشابه آنچه توسط C++ ارائه می‌شود. این گزینه برای استفاده از کلمات کلیدی \&\f(CW@try\fR، \&\f(CW@throw\fR، \f(CW@catch\fR، \f(CW@finally\fR و \&\f(CW@synchronized\fR در Objective\-C مورد نیاز است. این گزینه هم با زمان اجرای GNU و هم با زمان اجرای NeXT در دسترس است (اما در ترکیب با زمان اجرای NeXT روی Mac OS X 10.2 و قدیمی‌تر از آن در دسترس نیست). .IP \fB\-fobjc\-gc\fR 4 .IX Item "-fobjc-gc" فعال‌سازی جمع‌آوری زباله (GC) در برنامه‌های Objective\-C و Objective\-C++. این گزینه تنها با زمان اجرای NeXT در دسترس است؛ زمان اجرای GNU پیاده‌سازی متفاوتی از جمع‌آوری زباله دارد که نیازی به پرچم‌های خاص کامپایلر ندارد. .IP \fB\-fobjc\-nilcheck\fR 4 .IX Item "-fobjc-nilcheck" برای زمان اجرای NeXT با نسخه 2 از ABI، پیش از انجام فراخوانی واقعی متد، nil بودن گیرنده در فراخوانی متدها را بررسی می‌کند. این رفتار پیش‌فرض است و می‌توان آن را با استفاده از \&\fB\-fno\-objc\-nilcheck\fR غیرفعال کرد. متدهای کلاس و فراخوانی‌های super صرف‌نظر از اینکه این پرچم روی چه مقداری تنظیم شده باشد، هرگز بدین شکل برای nil بررسی نمی‌شوند. در حال حاضر این پرچم هنگام استفاده از زمان اجرای GNU یا نسخه قدیمی‌تر ABI زمان اجرای NeXT، هیچ کاری انجام نمی‌دهد. .IP \fB\-fobjc\-std=objc1\fR 4 .IX Item "-fobjc-std=objc1" مطابقت با نحو زبان Objective\-C 1.0، زبانی که توسط GCC 4.0 شناخته می‌شود. این مورد تنها بر افزونه‌های Objective\-C به زبان C/C++ اثر می‌گذارد؛ و تأثیری بر انطباق با استانداردهای C/C++ که با پرچم‌های مجزای گزینه گویش C/C++ کنترل می‌شوند، ندارد. هنگامی که این گزینه با کامپایلر Objective\-C یا Objective\-C++ استفاده می‌شود، هرگونه نحو Objective\-C که توسط GCC 4.0 شناخته نشده باشد رد می‌گردد. این گزینه زمانی مفید است که بخواهید اطمینان حاصل کنید کد Objective\-C شما می‌تواند با نسخه‌های قدیمی‌تر GCC کامپایل شود. .IP \fB\-freplace\-objc\-classes\fR 4 .IX Item "-freplace-objc-classes" یک نشانگر ویژه صادر می‌کند که به \fBld\|(1)\fR دستور می‌دهد فایل شیء حاصل را به طور ایستا پیوند نزند، و در عوض به \fBdyld\|(1)\fR اجازه دهد تا آن را در زمان اجرا بارگیری کند. این مورد در ارتباط با حالت اشکال‌زدایی Fix\-and\-Continue به کار می‌رود؛ حالتی که در آن ممکن است فایل شیء مورد نظر در طول اجرای برنامه، بدون نیاز به راه‌اندازی مجدد خود برنامه، مجدداً کامپایل و به طور پویا دوباره بارگیری شود. در حال حاضر، قابلیت Fix\-and\-Continue تنها در ارتباط با زمان اجرای NeXT روی Mac OS X 10.3 و جدیدتر در دسترس است. .IP \fB\-fzero\-link\fR 4 .IX Item "-fzero-link" هنگام کامپایل برای زمان اجرای NeXT، کامپایلر به طور معمول فراخوانی‌های \&\f(CWobjc_getClass("...")\fR را (هنگامی که نام کلاس در زمان کامپایل شناخته شده است) با ارجاعات ایستای کلاس که در زمان بارگیری مقداردهی اولیه می‌شوند جایگزین می‌کند، که کارایی زمان اجرا را بهبود می‌بخشد. مشخص کردن پرچم \fB\-fzero\-link\fR این رفتار را فرونشانده و باعث می‌شود فراخوانی‌های \f(CWobjc_getClass("...")\fR حفظ شوند. این قابلیت در حالت اشکال‌زدایی Zero\-Link مفید است، زیرا امکان تغییر پیاده‌سازی کلاس‌های منفرد را در حین اجرای برنامه فراهم می‌سازد. زمان اجرای GNU در حال حاضر صرف‌نظر از گزینه‌های خط فرمان، همواره فراخوانی‌های \f(CWobjc_get_class("...")\fR را حفظ می‌کند. .IP \fB\-fno\-local\-ivars\fR 4 .IX Item "-fno-local-ivars" به طور پیش‌فرض به متغیرهای نمونه در Objective\-C می‌توان به گونه‌ای دسترسی داشت که گویی متغیرهای محلی از درون متدهای کلاسی هستند که در آن اعلان شده‌اند. این امر می‌تواند منجر به سایه‌اندازی (shadowing) بین متغیرهای نمونه و متغیرهای دیگری شود که به صورت محلی داخل یک متد کلاس یا به طور سراسری با همان نام اعلان شده‌اند. مشخص کردن پرچم \fB\-fno\-local\-ivars\fR این رفتار را غیرفعال کرده و بدین ترتیب از مشکلات سایه‌اندازی متغیرها جلوگیری می‌کند. .IP \fB\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] 4 .IX Item "-fivar-visibility=[public|protected|private|package]" میزان دید پیش‌فرض متغیرهای نمونه را روی گزینه مشخص‌شده تنظیم می‌کند تا متغیرهای نمونه‌ای که خارج از محدوده هرگونه دستورات اصلاح‌کننده دسترسی اعلان شده‌اند، به طور پیش‌فرض روی سطح دید مشخص‌شده قرار گیرند. .IP \fB\-gen\-decls\fR 4 .IX Item "-gen-decls" اعلان‌های رابط (interface) را برای تمامی کلاس‌های دیده‌شده در فایل مبدأ درون فایلی با نام \fIsourcename.decl\fR تخلیه می‌کند. .IP "\fB\-Wassign\-intercept\fR (فقط Objective\-C و Objective\-C++)" 4 .IX Item "-Wassign-intercept (Objective-C and Objective-C++ only)" هر زمان که یک انتساب Objective\-C توسط زباله‌روب رهگیری شود، هشدار می‌دهد. .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 هیچ معناشناسی انتسابی مشخص نشده باشد، هشدار نمی‌دهد. .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 در فرترن با فرم آزاد (free\-form) و \fB!$acc\fR، \fBc$acc\fR و \&\fB*$acc\fR در فرترن با فرم ثابت (fixed\-form) را فعال می‌کند. این گزینه مستلزم \fB\-pthread\fR است، و بنابراین تنها در مقصدهایی پشتیبانی می‌شود که از \fB\-pthread\fR پشتیبانی می‌کنند. .IP \fB\-fopenacc\-dim=\fR\fIgeom\fR 4 .IX Item "-fopenacc-dim=geom" ابعاد محاسباتی پیش‌فرض را برای نواحی موازی برون‌سپاری که آن‌ها را به صراحت مشخص نکرده‌اند، تعیین می‌کند. مقدار \fIgeom\fR سه‌گانه‌ای از اندازه‌های جداشده با \fB:\fR است، به ترتیب \fIgang\fR، \fIworker\fR و \fIvector\fR. می‌توان یک اندازه را حذف کرد تا از مقدار پیش‌فرض مختص مقصد استفاده شود. .IP \fB\-fopenmp\fR 4 .IX Item "-fopenmp" مدیریت راهنماهای OpenMP شامل \fB#pragma omp\fR، \&\fB[[omp::directive(...)]]\fR، \fB[[omp::decl(...)]]\fR و \fB[[omp::sequence(...)]]\fR را در C/C++ فعال می‌کند. در فرترن، \&\fB!$omp\fR و نگهبان کامپایل شرطی \fB!$\fR را فعال می‌سازد. در فرترن با فرم مبدأ ثابت، نشانگرهای نگهبان می‌توانند با \&\fBc\fR یا \fB*\fR نیز آغاز شوند. .Sp این گزینه مستلزم \fB\-pthread\fR است، و بنابراین تنها در مقصدهایی پشتیبانی می‌شود که از \fB\-pthread\fR پشتیبانی کنند. \fB\-fopenmp\fR مستلزم \fB\-fopenmp\-simd\fR نیز هست. .IP \fB\-fopenmp\-simd\fR 4 .IX Item "-fopenmp-simd" مدیریت راهنماهای \f(CW\*(C`simd\*(C'\fR، \f(CW\*(C`declare simd\*(C'\fR، \&\f(CW\*(C`declare reduction\*(C'\fR، \f(CW\*(C`assume\*(C'\fR، \f(CW\*(C`ordered\*(C'\fR، \f(CW\*(C`scan\*(C'\fR و \f(CW\*(C`loop\*(C'\fR در OpenMP، و راهنماهای ترکیبی یا مرکب با مؤلفه \f(CW\*(C`simd\*(C'\fR به وسیله \f(CW\*(C`#pragma omp\*(C'\fR، \&\f(CW\*(C`[[omp::directive(...)]]\*(C'\fR، \f(CW\*(C`[[omp::sequence(...)]]\*(C'\fR و \&\f(CW\*(C`[[omp::decl(...)]]\*(C'\fR در C/C++ و \f(CW\*(C`!$omp\*(C'\fR در فرترن را فعال می‌کند. همچنین نگهبان کامپایل شرطی \fB!$\fR را در فرترن فعال می‌سازد. در فرترن با فرم مبدأ ثابت، نگهبان‌ها می‌توانند با \&\fBc\fR یا \fB*\fR نیز آغاز شوند. سایر راهنماهای OpenMP نادیده گرفته می‌شوند. مگر اینکه \&\fB\-fopenmp\fR نیز علاوه بر این مشخص شده باشد، ناحیه \f(CW\*(C`loop\*(C'\fR، مستقل از عبارت \f(CW\*(C`bind\*(C'\fR مشخص‌شده، به ناحیه وظیفه (task) فعلی پیوند می‌خورد. .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 برای توابع نشانه‌گذاری‌شده با راهنمای \f(CW\*(C`declare target\*(C'\fR در OpenMP که برای برداری‌سازی مناسب هستند نیز همتاسازی انجام می‌دهد. مقدار \fIdevice\-type\fR می‌تواند یکی از \f(CW\*(C`none\*(C'\fR، \f(CW\*(C`host\*(C'\fR، \f(CW\*(C`nohost\*(C'\fR و \f(CW\*(C`any\*(C'\fR باشد، که متناظر با کلیدواژه‌های عبارت \f(CW\*(C`device_type\*(C'\fR در راهنمای \f(CW\*(C`declare target\*(C'\fR هستند؛ همتاها برای اشتراک دستگاه‌های مشخص‌شده تولید می‌شوند. \&\fB\-fopenmp\-target\-simd\-clone\fR معادل با \&\fB\-fopenmp\-target\-simd\-clone=any\fR و \&\fB\-fno\-openmp\-target\-simd\-clone\fR معادل با \&\fB\-fopenmp\-target\-simd\-clone=none\fR است. .Sp در سطح بهینه‌سازی \fB\-O2\fR و بالاتر (به جز \fB\-Os\fR یا \fB\-Og\fR) پیش‌فرض این بهینه‌سازی \fB\-fopenmp\-target\-simd\-clone=nohost\fR است؛ در غیر این صورت به طور پیش‌فرض غیرفعال است. .SS "گزینه‌های کنترل قالب‌بندی پیام‌های تشخیصی" .IX Subsection "Options to Control Diagnostic Messages Formatting" به طور سنتی، پیام‌های تشخیصی بدون توجه به خصوصیات دستگاه خروجی (مانند عرض آن و غیره) قالب‌بندی می‌شدند. می‌توانید از گزینه‌های شرح‌داده‌شده در زیر برای کنترل الگوریتم قالب‌بندی پیام‌های تشخیصی استفاده کنید؛ مانند اینکه چه تعداد نویسه در هر سطر قرار گیرد، و اطلاعات مکان در کد مبدأ هر چند وقت یک‌بار گزارش شود. توجه داشته باشید که ممکن است برخی پیشخوان‌های (front ends) زبان از این گزینه‌ها تبعیت نکنند. .IP \fB\-fmessage\-length=\fR\fIn\fR 4 .IX Item "-fmessage-length=n" تلاش می‌کند پیام‌های خطا را به گونه‌ای قالب‌بندی کند که در سطرهایی با حدود \&\fIn\fR نویسه جای گیرند. اگر \fIn\fR صفر باشد، هیچ شکست سطری (line\-wrapping) انجام نمی‌شود؛ هر پیام خطا در یک سطر تکی نمایش می‌یابد. این مقدار پیش‌فرض برای تمامی پیشخوان‌ها است. .Sp نکته \- این گزینه بر نمایش دستورات پیش‌پردازنده \fB#error\fR و \&\fB#warning\fR، و مشخصه (attribute) منسوخ‌شده (\fBdeprecated\fR) برای تابع/نوع/متغیر نیز تأثیر می‌گذارد. با این حال، بر پراگماهای \&\fBpragma GCC warning\fR و \fBpragma GCC error\fR تأثیری ندارد. .IP \fB\-fdiagnostics\-plain\-output\fR 4 .IX Item "-fdiagnostics-plain-output" این گزینه درخواست می‌کند که خروجی تشخیصی تا حد ممکن ساده باشد، که ممکن است هنگام اجرای \fBdejagnu\fR یا سایر ابزارهایی که نیاز به تجزیه خروجی تشخیصی دارند و ترجیح می‌دهند این خروجی در گذر زمان پایدارتر بماند مفید باشد. \&\fB\-fdiagnostics\-plain\-output\fR در حال حاضر معادل گزینه‌های زیر است: \&\fB\-fno\-diagnostics\-show\-caret \&\-fno\-diagnostics\-show\-line\-numbers \&\-fdiagnostics\-color=never \&\-fdiagnostics\-urls=never \&\-fdiagnostics\-path\-format=separate\-events \&\-fdiagnostics\-text\-art\-charset=none \&\-fno\-diagnostics\-show\-event\-links\fR در آینده، اگر GCC ظاهر پیش‌فرض پیام‌های تشخیصی خود را تغییر دهد، گزینه متناظر برای غیرفعال‌سازی رفتار جدید به این فهرست افزوده خواهد شد. .IP \fB\-fdiagnostics\-show\-location=once\fR 4 .IX Item "-fdiagnostics-show-location=once" تنها در حالت شکست سطر معنی دارد. به گزارشگر پیام‌های تشخیصی دستور می‌دهد اطلاعات مکان منبع را \fIیک‌بار\fR نمایش دهد؛ بدین معنی که در صورتی که پیام برای قرارگیری در یک سطر فیزیکی بیش از حد طولانی باشد و نیاز به شکستن داشته باشد، مکان مبدأ دوباره و پشت سر هم (به عنوان پیشوند) در سطرهای ادامه‌دار بعدی منتشر نخواهد شد. این رفتار پیش‌فرض است. .IP \fB\-fdiagnostics\-show\-location=every\-line\fR 4 .IX Item "-fdiagnostics-show-location=every-line" تنها در حالت شکست سطر معنی دارد. به گزارشگر پیام‌های تشخیصی دستور می‌دهد همان اطلاعات مکان مبدأ را (به عنوان پیشوند) برای سطرهای فیزیکی حاصل از فرآیند شکستن پیامی که بیش از حد برای قرارگیری در یک سطر طولانی است، منتشر کند. .IP \fB\-fdiagnostics\-color[=\fR\fIWHEN\fR\fB]\fR 4 .IX Item "-fdiagnostics-color[=WHEN]" .PD 0 .IP \fB\-fno\-diagnostics\-color\fR 4 .IX Item "-fno-diagnostics-color" .PD استفاده از رنگ در پیام‌های تشخیصی. مقدار \fIWHEN\fR برابر با \fBnever\fR، \fBalways\fR یا \fBauto\fR است. مقدار پیش‌فرض بستگی به نحوه پیکربندی کامپایلر دارد؛ می‌تواند هر یک از گزینه‌های \fIWHEN\fR بالا باشد یا در صورتی که متغیر محیطی \fBGCC_COLORS\fR در محیط وجود نداشته باشد \fBnever\fR، و در غیر این صورت \fBauto\fR باشد. مقدار \fBauto\fR باعث می‌شود GCC تنها زمانی از رنگ استفاده کند که خروجی خطای استاندارد (standard error) یک ترمینال باشد و در یک پوسته emacs اجرا نشود. شکل‌های \fB\-fdiagnostics\-color\fR و \fB\-fno\-diagnostics\-color\fR به ترتیب نام‌های مستعار برای \fB\-fdiagnostics\-color=always\fR و \&\fB\-fdiagnostics\-color=never\fR هستند. .Sp رنگ‌ها توسط متغیر محیطی \fBGCC_COLORS\fR تعریف می‌شوند. مقدار آن فهرستی جداشده با دونقطه از قابلیت‌ها و زیررشته‌های Select Graphic Rendition (SGR) است. دستورات SGR توسط ترمینال یا شبیه‌ساز ترمینال تفسیر می‌شوند. (برای مقادیر مجاز و معانی آن‌ها به عنوان مشخصه‌های نویسه، به بخش مربوطه در مستندات ترمینال متنی خود مراجعه کنید.) این مقادیر زیررشته، اعدادی صحیح در مبنای ده هستند و می‌توانند با نقطه‌ویرگول (semicolon) به یکدیگر متصل شوند. مقادیر رایج برای اتصال عبارتند از: \&\fB1\fR برای پررنگ (bold)، \&\fB4\fR برای خط زیرین (underline)، \&\fB5\fR برای چشمک‌زن (blink)، \&\fB7\fR برای معکوس (inverse)، \&\fB39\fR برای رنگ پیش‌زمینه پیش‌فرض، \&\fB30\fR تا \fB37\fR برای رنگ‌های پیش‌زمینه، \&\fB90\fR تا \fB97\fR برای رنگ‌های پیش‌زمینه در حالت ۱۶ رنگ، \&\fB38;5;0\fR تا \fB38;5;255\fR برای رنگ‌های پیش‌زمینه در حالت‌های ۸۸ رنگ و ۲۵۶ رنگ، \&\fB49\fR برای رنگ پس‌زمینه پیش‌فرض، \&\fB40\fR تا \fB47\fR برای رنگ‌های پس‌زمینه، \&\fB100\fR تا \fB107\fR برای رنگ‌های پس‌زمینه در حالت ۱۶ رنگ، و \fB48;5;0\fR تا \fB48;5;255\fR برای رنگ‌های پس‌زمینه در حالت‌های ۸۸ رنگ و ۲۵۶ رنگ. .Sp مقدار پیش‌فرض \fBGCC_COLORS\fR برابر است با: .Sp .Vb 5 \& error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e \& quote=01:path=01;36:fixit\-insert=32:fixit\-delete=31:\e \& diff\-filename=01:diff\-hunk=32:diff\-delete=31:diff\-insert=32:\e \& type\-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32\e \& highlight\-a=01;32:highlight\-b=01;34 .Ve .Sp که در آن \fB01;31\fR قرمز پررنگ، \fB01;35\fR سرخابی پررنگ، \&\fB01;36\fR فیروزه‌ای پررنگ، \fB32\fR سبز، \fB34\fR آبی، \&\fB01\fR پررنگ و \fB31\fR قرمز است. تنظیم \fBGCC_COLORS\fR روی یک رشته خالی، رنگ‌ها را غیرفعال می‌کند. قابلیت‌های پشتیبانی‌شده به شرح زیر هستند: .RS 4 .ie n .IP """error=""" 4 .el .IP \f(CWerror=\fR 4 .IX Item "error=" زیررشته SGR برای نشانگرهای :error. .ie n .IP """warning=""" 4 .el .IP \f(CWwarning=\fR 4 .IX Item "warning=" زیررشته SGR برای نشانگرهای :warning. .ie n .IP """note=""" 4 .el .IP \f(CWnote=\fR 4 .IX Item "note=" زیررشته SGR برای نشانگرهای :note. .ie n .IP """path=""" 4 .el .IP \f(CWpath=\fR 4 .IX Item "path=" زیررشته SGR برای رنگ‌آمیزی مسیرهای رویدادهای جریان کنترل (control\-flow) که از طریق \fB\-fdiagnostics\-path\-format=\fR چاپ می‌شوند، مانند شناسه‌های رویدادهای منفرد و خطوط نشان‌دهنده فراخوانی‌ها و بازگشت‌های میان‌رویه‌ای. .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 hints) که درج یا جایگزینی متنی را پیشنهاد می‌دهند. .ie n .IP """fixit\-delete=""" 4 .el .IP \f(CWfixit\-delete=\fR 4 .IX Item "fixit-delete=" زیررشته SGR برای نکات راهنمای اصلاحی که حذف متنی را پیشنهاد می‌دهند. .ie n .IP """diff\-filename=""" 4 .el .IP \f(CWdiff\-filename=\fR 4 .IX Item "diff-filename=" زیررشته SGR برای هدرهای نام فایل در وصله‌های (patches) تولیدشده. .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 برای برجسته‌سازی عناصر نامعتبر درون نمودارهای هنر متنی. .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 console) و mingw است. این بررسی را می‌توان با \fB\-fdiagnostics\-urls=always\fR نادیده گرفت. .IP \fB\-fno\-diagnostics\-show\-option\fR 4 .IX Item "-fno-diagnostics-show-option" به‌طور پیش‌فرض، هر پیام تشخیصی صادرشده شامل متنی است که گزینهٔ خط فرمانیِ کنترل‌کنندهٔ مستقیم آن پیام را نشان می‌دهد (اگر چنین گزینه‌ای برای سازوکار تشخیصی شناخته‌شده باشد). تعیین پرچم \&\fB\-fno\-diagnostics\-show\-option\fR مانع از این رفتار می‌شود. .IP \fB\-fno\-diagnostics\-show\-caret\fR 4 .IX Item "-fno-diagnostics-show-caret" به‌طور پیش‌فرض، هر پیام تشخیصی صادرشده شامل خط مبدأ اصلی و یک علامت هشتک \fB^\fR برای نشان دادن ستون است. این گزینه از نمایش این اطلاعات جلوگیری می‌کند. اگر گزینهٔ \fB\-fmessage\-length=n\fR مشخص شده باشد، خط مبدأ به \fIn\fR نویسه کوتاه می‌شود. هنگامی که خروجی در پایانه چاپ می‌شود، عرض به مقدار تعیین‌شده توسط متغیر محیطی \&\fBCOLUMNS\fR، یا در صورت تنظیم نشدن، به عرض پایانه محدود می‌شود. .IP \fB\-fno\-diagnostics\-show\-labels\fR 4 .IX Item "-fno-diagnostics-show-labels" به‌طور پیش‌فرض، هنگام چاپ کد منبع (از طریق \fB\-fdiagnostics\-show\-caret\fR)، پیام‌های تشخیصی می‌توانند محدوده‌هایی از کد منبع را با اطلاعات مرتبط برچسب‌گذاری کنند، مانند نوع عبارت‌ها: .Sp .Vb 4 \& printf ("foo %s bar", long_i + long_j); \& ~^ ~~~~~~~~~~~~~~~ \& | | \& char * long int .Ve .Sp این گزینه از چاپ این برچسب‌ها جلوگیری می‌کند (در مثال بالا، خطوط عمودی و متن‌های "char *" و "long int"). .IP \fB\-fno\-diagnostics\-show\-event\-links\fR 4 .IX Item "-fno-diagnostics-show-event-links" به‌طور پیش‌فرض، هنگام چاپ مسیرهای اجرا (از طریق \&\fB\-fdiagnostics\-path\-format=inline\-events\fR)، GCC خطوطی را برای اتصال رویدادهای مرتبط چاپ می‌کند، مانند خطی که رویدادهای ۱ و ۲ را متصل می‌کند در: .Sp .Vb 10 \& 3 | if (p) \& | ^ \& | | \& | (1) following \`false\*(Aq branch (when \`p\*(Aq is NULL)... \->\-+ \& | | \& | | \& |+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ \& 4 || return 0; \& 5 || return *p; \& || ~ \& || | \& |+\-\-\-\-\-\-\-\->(2) ...to here \& | (3) dereference of NULL \`p\*(Aq .Ve .Sp این گزینه از چاپ چنین خطوط اتصال‌دهنده‌ای جلوگیری می‌کند. .IP \fB\-fno\-diagnostics\-show\-cwe\fR 4 .IX Item "-fno-diagnostics-show-cwe" پیام‌های تشخیصی می‌توانند به صورت اختیاری دارای یک شناسهٔ مرتبط CWE (\f(CW\*(C`https://cwe.mitre.org/index.html\*(C'\fR) باشند. خود GCC فقط برای برخی از پیام‌های تشخیصی \fB\-fanalyzer\fR چنین فراداده‌ای را ارائه می‌دهد. همچنین پلاگین‌های GCC نیز ممکن است پیام‌های تشخیصی را همراه با این فراداده‌ها ارائه دهند. به‌طور پیش‌فرض، در صورت وجود این اطلاعات، همراه با پیام تشخیصی چاپ می‌شود. این گزینه از چاپ این فراداده جلوگیری می‌کند. .IP \fB\-fno\-diagnostics\-show\-rules\fR 4 .IX Item "-fno-diagnostics-show-rules" پیام‌های تشخیصی می‌توانند به صورت اختیاری قواعدی مرتبط با خود داشته باشند، مانند قواعد برگرفته از یک استاندارد کدنویسی یا یک مشخصه (specification). خود 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" راهنمایی‌های اصلاحی را پس از چاپ هرگونه پیام تشخیصی، در قالب 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 types)، مانند: .Sp .Vb 2 \& could not convert \*(Aqstd::map >()\*(Aq \& from \*(Aqmap<[...],vector>\*(Aq to \*(Aqmap<[...],vector> .Ve .Sp پرچم \fB\-fdiagnostics\-show\-template\-tree\fR چاپ یک ساختار درخت‌مانند را فعال می‌کند که بخش‌های مشترک و متفاوت نوع‌ها را نشان می‌دهد، مانند: .Sp .Vb 4 \& map< \& [...], \& vector< \& [double != float]>> .Ve .Sp بخش‌هایی که تفاوت دارند با رنگ برجسته می‌شوند (در این مورد «double» و «float»). .IP \fB\-fno\-elide\-type\fR 4 .IX Item "-fno-elide-type" به‌طور پیش‌فرض زمانی که فرانت‌اند C++ پیام‌های عیب‌یابی نشان‌دهندهٔ عدم تطابق انواع قالب را چاپ می‌کند، بخش‌های مشترک نوع‌ها به‌صورت «[...]» چاپ می‌شوند تا پیام خطا ساده‌تر شود. برای مثال: .Sp .Vb 2 \& could not convert \*(Aqstd::map >()\*(Aq \& from \*(Aqmap<[...],vector>\*(Aq to \*(Aqmap<[...],vector> .Ve .Sp مشخص کردن پرچم \fB\-fno\-elide\-type\fR این رفتار را لغو می‌کند. این پرچم همچنین بر خروجی پرچم \fB\-fdiagnostics\-show\-template\-tree\fR نیز تأثیر می‌گذارد. .IP \fB\-fdiagnostics\-path\-format=\fR\fIKIND\fR 4 .IX Item "-fdiagnostics-path-format=KIND" نحوهٔ چاپ مسیرهای رویدادهای جریان کنترل (control\-flow) را برای پیام‌های عیب‌یابی که چنین مسیری به آن‌ها پیوست شده است، مشخص می‌کند. .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 استفاده شود، عمق پشته و اعلان تابع (function declaration) در هنگام چاپ هر رویداد ضمیمه خواهد شد. .Sp این گزینه برای استفادهٔ توسعه‌دهندگان GCC و توسعه‌دهندگان افزونه‌ها هنگام اشکال‌زدایی عیب‌یابی‌هایی که جریان کنترل بین‌روالی را گزارش می‌دهند در نظر گرفته شده است. .IP \fB\-fno\-show\-column\fR 4 .IX Item "-fno-show-column" شمارهٔ ستون‌ها در پیام‌های عیب‌یابی چاپ نشود. این ممکن است در صورتی لازم باشد که پیام‌های عیب‌یابی توسط برنامه‌ای بررسی (اسکن) می‌شوند که شماره ستون‌ها را درک نمی‌کند، مانند \fBdejagnu\fR. .IP \fB\-fdiagnostics\-column\-unit=\fR\fIUNIT\fR 4 .IX Item "-fdiagnostics-column-unit=UNIT" واحد شمارهٔ ستون را انتخاب می‌کند. این گزینه بر پیام‌های عیب‌یابی سنتی (در صورت عدم وجود \fB\-fno\-show\-column\fR) و همچنین عیب‌یابی‌های قالب 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، شمارهٔ ستون را در تمام موارد به شمارش بایت‌های خام تغییر می‌دهد، همان‌طور که در GCC پیش از نسخهٔ 11.1.0 به‌صورت سنتی خروجی داده می‌شد. .IP \fB\-fdiagnostics\-column\-origin=\fR\fIORIGIN\fR 4 .IX Item "-fdiagnostics-column-origin=ORIGIN" مبدأ شماره‌های ستون را انتخاب می‌کند، یعنی شماره ستونی که به نخستین ستون اختصاص داده می‌شود. مقدار پیش‌فرض 1 با رفتار سنتی GCC و راهنمای نگارش GNU مطابقت دارد. برخی ابزارها ممکن است با مبدأ 0 عملکرد بهتری داشته باشند؛ هر مقدار غیرمنفی را می‌توان مشخص کرد. .IP \fB\-fdiagnostics\-escape\-format=\fR\fIFORMAT\fR 4 .IX Item "-fdiagnostics-escape-format=FORMAT" هنگامی که GCC خطوط مرتبط کد منبع را برای یک پیام عیب‌یابی چاپ می‌کند، معمولاً سعی می‌کند بایت‌های منبع را مستقیماً چاپ کند. با این حال، برخی از عیب‌یابی‌ها به مشکلات کدگذاری در فایل منبع، مانند UTF\-8 ناصحیح، یا مشکلات نرمال‌سازی یونیکد (Unicode normalization) مربوط می‌شوند. این عیب‌یابی‌ها نشانه‌گذاری شده‌اند تا 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 تضمین می‌کند که این نمودارها صرفاً اسکی («هنر اسکی») باشند. مقدار \fBunicode\fR امکان استفادهٔ محتاطانه از نویسه‌های ترسیمی یونیکد (مانند نویسه‌های رسم کادر) را فراهم می‌سازد. مقدار \fBemoji\fR علاوه بر این، امکان وجود ایموجی در خروجی را اضافه می‌کند (مانند تولید U+26A0 WARNING SIGN به همراه U+FE0F VARIATION SELECTOR\-16 برای انتخاب گونهٔ ایموجی نویسه). .Sp پیش‌فرض \fBemoji\fR است، مگر زمانی که متغیر محیطی \fBLANG\fR روی \fBC\fR تنظیم شده باشد که در آن صورت پیش‌فرض \fBascii\fR خواهد بود. .IP \fB\-fdiagnostics\-format=\fR\fIFORMAT\fR 4 .IX Item "-fdiagnostics-format=FORMAT" قالب متفاوتی را برای چاپ پیام‌های عیب‌یابی انتخاب می‌کند. \&\fIFORMAT\fR یکی از مقادیر \fBtext\fR، \fBsarif\-stderr\fR، \fBsarif\-file\fR، \&\fBjson\fR، \fBjson\-stderr\fR یا \fBjson\-file\fR است. .Sp استفاده از این گزینه، جایگزین هرگونه «مقصد خروجی» اضافیِ افزوده‌شده توسط \&\fB\-fdiagnostics\-add\-output=\fR یا مقدار تعیین‌شده توسط \&\fB\-fdiagnostics\-set\-output=\fR می‌شود. .Sp پیش‌فرض \fBtext\fR است. .Sp هر دو قالب \fBsarif\-stderr\fR و \fBsarif\-file\fR پیام‌های عیب‌یابی را با قالب SARIF نسخه 2.1.0، به ترتیب در stderr یا فایلی به نام \fIsource.sarif\fR صادر می‌کنند. .Sp مقادیر گوناگون \fBjson\fR، \fBjson\-stderr\fR و \fBjson\-file\fR منسوخ شده‌اند و به یک قالب خروجی قدیمی مبتنی بر JSON اشاره دارند. قالب \fBjson\fR مترادفی برای \fBjson\-stderr\fR است. قالب‌های \fBjson\-stderr\fR و \fBjson\-file\fR یکسان هستند، به‌جز محل صدور JSON. در \fBjson\-stderr\fR، داده‌های JSON به stderr ارسال می‌شوند، در حالی که در \fBjson\-file\fR درون \&\fIsource.gcc.json\fR نوشته می‌شوند. .IP \fB\-fdiagnostics\-add\-output=\fR\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR 4 .IX Item "-fdiagnostics-add-output=DIAGNOSTICS-OUTPUT-SPEC" یک «مقصد خروجی» اضافی برای صدور پیام‌های عیب‌یابی می‌افزاید. .Sp \&\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR باید یک طرح‌واره را مشخص کند که به‌صورت اختیاری با \f(CW\*(C`:\*(C'\fR و یک یا چند جفت \fIKEY\fR=\fIVALUE\fR به این شکل دنبال می‌شود: .Sp .Vb 3 \& \& := \& :=,= .Ve .Sp و غیره. .Sp طرح‌واره‌ها، کلیدها یا مقادیری که نام آن‌ها دارای پیشوند «experimental» است ممکن است بدون اطلاع قبلی تغییر کنند یا حذف شوند. .Sp \&\fISCHEME\fR می‌تواند مقادیر زیر باشد: .RS 4 .IP \fBtext\fR 4 .IX Item "text" ارسال پیام‌های عیب‌یابی به stderr با استفاده از قالب خروجی متنی کلاسیک GCC. .Sp کلیدهای پشتیبانی‌شده عبارت‌اند از: .RS 4 .IP \fBcolor=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "color=[yes|no]" تنظیمات رنگ‌بندی برگرفته از \fB\-fdiagnostics\-color\fR را برای این خروجی متنی بازنویسی می‌کند. .IP \fBexperimental\-nesting=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "experimental-nesting=[yes|no]" یک حالت آزمایشی را فعال می‌کند که بر روابط سلسله‌مراتبی درون پیام‌های عیب‌یابی تأکید کرده و اطلاعات مکان را در خطوط جداگانه نمایش می‌دهد. .IP \fBexperimental\-nesting\-show\-locations=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "experimental-nesting-show-locations=[yes|no]" اگر \f(CW\*(C`experimental\-nesting=yes\*(C'\fR باشد، مکان‌ها به‌طور پیش‌فرض نمایش داده می‌شوند؛ این کلید را روی \f(CW\*(C`no\*(C'\fR تنظیم کنید تا چاپ این مکان‌ها غیرفعال شود. این ویژگی برای توسعه‌دهندگان GCC و نوشتن آزمون‌های DejaGnu تعبیه شده است. .IP \fBexperimental\-nesting\-show\-levels=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "experimental-nesting-show-levels=[yes|no]" این یک گزینهٔ اشکال‌زدایی برای استفاده همراه با \f(CW\*(C`experimental\-nesting=yes\*(C'\fR است. این کلید را روی \f(CW\*(C`yes\*(C'\fR تنظیم کنید تا سطوح تودرتویی به‌صورت صریح در خروجی چاپ شوند. این قابلیت برای توسعه‌دهندگان GCC در نظر گرفته شده است. .RE .RS 4 .RE .IP \fBsarif\fR 4 .IX Item "sarif" صدور پیام‌های عیب‌یابی به یک فایل در قالب SARIF. .Sp کلیدهای پشتیبانی‌شده عبارت‌اند از: .RS 4 .IP \fBfile=\fR\fIFILENAME\fR 4 .IX Item "file=FILENAME" نام فایلی را مشخص می‌کند که خروجی SARIF باید در آن نوشته شود، که می‌تواند با یک مسیر مطلق یا نسبی در ابتدا همراه باشد. در صورت مشخص نشدن، مقدار پیش‌فرض \&\fIsource.sarif\fR خواهد بود. .IP \fBversion=\fR[\fB2.1\fR|\fB2.2\-prerelease\fR] 4 .IX Item "version=[2.1|2.2-prerelease]" نسخهٔ SARIF مورد استفاده برای خروجی را مشخص می‌کند. در صورت عدم تعیین، مقدار پیش‌فرض 2.1 است. \f(CW\*(C`2.2\-prerelease\*(C'\fR از یک پیش‌نویس غیررسمی مشخصات آیندهٔ SARIF 2.2 استفاده می‌کند و در این انتشار فقط باید برای اهداف آزمایشی استفاده شود. .RE .RS 4 .RE .RE .RS 4 .Sp برای مثال، .Sp .Vb 2 \& \-fdiagnostics\-add\-output=sarif:version=2.1,file=foo.2.1.sarif \& \-fdiagnostics\-add\-output=sarif:version=2.2\-prerelease,file=foo.2.2.sarif .Ve .Sp یک جفت خروجی اضافه می‌کند که هر یک به ترتیب با استفاده از نسخه‌های 2.1 و 2.2 استاندارد SARIF در فایلی متفاوت می‌نویسند. .Sp در EBNF: .Sp .Vb 2 \& = \& | , ":", ; \& \& = "text" | "sarif"; \& \& = \& | "," ; \& \& = "=" ; \& \& = ? string without a \*(Aq=\*(Aq ? ; \& = ? string without a \*(Aq,\*(Aq ? ; .Ve .RE .IP \fB\-fdiagnostics\-set\-output=\fR\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR 4 .IX Item "-fdiagnostics-set-output=DIAGNOSTICS-OUTPUT-SPEC" این گزینه به روشی مشابه با \fB\-fdiagnostics\-add\-output=\fR کار می‌کند، با این تفاوت که به‌جای افزودن یک «مقصد خروجی» اضافی برای پیام‌های عیب‌یابی، تمامی مقصدهای خروجی موجود مانند موارد ناشی از \fB\-fdiagnostics\-format=\fR، \&\fB\-fdiagnostics\-add\-output=\fR یا فراخوانی پیشین \&\fB\-fdiagnostics\-set\-output=\fR را جایگزین می‌کند. .IP \fB\-fno\-diagnostics\-json\-formatting\fR 4 .IX Item "-fno-diagnostics-json-formatting" به‌طور پیش‌فرض، هنگامی که خروجی JSON برای پیام‌های عیب‌یابی صادر می‌شود (از طریق \&\fB\-fdiagnostics\-format=sarif\-stderr\fR، \&\fB\-fdiagnostics\-format=sarif\-file\fR، \&\fB\-fdiagnostics\-format=json\fR، \&\fB\-fdiagnostics\-format=json\-stderr\fR، \&\fB\-fdiagnostics\-format=json\-file\fR)، GCC خطوط جدید و تورفتگی‌هایی را اضافه می‌کند تا ساختار سلسله‌مراتبی JSON از نظر بصری برجسته‌تر شود. .Sp از \fB\-fno\-diagnostics\-json\-formatting\fR برای حذف این فاصله‌های خالی استفاده کنید. این گزینه باید پیش از گزینه‌ای که قرار است بر آن تأثیر بگذارد داده شود. .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 مراجعه کنید. هشدارهای بیشتر را می‌توان با فعال‌سازی تحلیل‌گر ایستا ایجاد کرد؛ .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 positives) نیز بشود. .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 دارند که نسخهٔ استاندارد را مشخص می‌کند). با این حال، بدون این گزینه، برخی افزونه‌های گنو و ویژگی‌های سنتی C و C++ نیز پشتیبانی می‌شوند. با این گزینه، آن‌ها عیب‌یابی می‌شوند (یا با \fB\-pedantic\-errors\fR رد می‌شوند). .Sp گزینهٔ \&\fB\-Wpedantic\fR باعث ایجاد پیام‌های هشدار برای استفاده از کلمات کلیدی جایگزین که نام آن‌ها با \fB_\|_\fR شروع شده و پایان می‌یابد نمی‌شود. این فرمت جایگزین همچنین می‌تواند برای غیرفعال کردن هشدارها برای انواع غیرِ ISO مانند \fB_\|_intN\fR (یعنی \fB_\|_intN_\|_\fR) استفاده شود. هشدارهای وسواس‌گونه همچنین در عبارتی که پس از \&\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استاندارد پایه (base standard)\fR متناظر وجود دارد، یعنی همان نسخه از ISO C که گویش گسترش‌یافتهٔ گنو بر پایهٔ آن است. هشدارهای \fB\-Wpedantic\fR در مواردی صادر می‌شوند که استاندارد پایه آن‌ها را الزامی کرده باشد. (منطقی نیست که چنین هشدارهایی تنها برای ویژگی‌هایی داده شوند که در گویش گنو C مشخص‌شده وجود ندارند، زیرا بر اساس تعریف، گویش‌های گنو C شامل تمام ویژگی‌هایی هستند که کامپایلر با گزینهٔ داده‌شده پشتیبانی می‌کند، و در نتیجه موردی برای هشدار دادن وجود نخواهد داشت.) .IP \fB\-pedantic\-errors\fR 4 .IX Item "-pedantic-errors" هر زمان که \fIاستاندارد پایه\fR (نگاه کنید به \fB\-Wpedantic\fR) به یک پیام عیب‌یابی نیاز داشته باشد، در برخی موارد که رفتار تعریف‌نشده در زمان کامپایل وجود دارد و در برخی موارد دیگر که مانع از کامپایل برنامه‌های معتبر مطابق با استاندارد نمی‌شوند، یک خطا صادر می‌کند. این معادل با \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++) کلاس‌های پایهٔ مجازی مبهم (Ambiguous virtual bases). .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 تنها در صورتی دربارهٔ مشکلات سازگاری C++ ABI هشدار می‌دهد که در یک سری از انتشارات، بررسی جدیدی برای یک مشکل ABI که از زمان انتشار اولیه کشف شده، اضافه شده باشد. اگر یک نسخهٔ قدیمی‌تر ABI (با \&\fB\-fabi\-version=\fR\fIn\fR) انتخاب شده باشد، \fB\-Wabi\fR دربارهٔ موارد بیشتری هشدار می‌دهد. .Sp همچنین می‌توان از \&\fB\-Wabi\fR به همراه یک شماره نسخهٔ صریح استفاده کرد تا دربارهٔ سازگاری C++ ABI با یک سطح مشخص از \fB\-fabi\-version\fR هشدار دهد؛ به عنوان مثال \fB\-Wabi=2\fR برای هشدار دربارهٔ تغییرات نسبت به \&\fB\-fabi\-version=2\fR. .Sp اگر یک شماره نسخهٔ صریح ارائه شود و \&\fB\-fabi\-compat\-version\fR مشخص نشده باشد، شماره نسخهٔ برگرفته از این گزینه برای نام‌های مستعار سازگاری استفاده می‌شود. اگر هیچ شماره نسخهٔ صریحی با این گزینه ارائه نشود، اما \&\fB\-fabi\-compat\-version\fR مشخص شده باشد، آن شماره نسخه برای هشدارهای C++ ABI استفاده می‌شود. .Sp اگرچه تلاش شده است تا دربارهٔ تمام این موارد هشدار داده شود، اما احتمالاً مواردی وجود دارد که با وجود تولید کد ناسازگار توسط G++، هشداری برای آن‌ها صادر نمی‌شود. همچنین ممکن است مواردی وجود داشته باشد که با وجود سازگار بودن کد تولیدشده، هشدار صادر شود. .Sp اگر نگران این موضوع هستید که کدهای تولیدشده توسط G++ ممکن است از نظر باینری با کدهای تولیدشده توسط سایر کامپایلرها سازگار نباشد، باید کد خود را بازنویسی کنید تا از این هشدارها جلوگیری شود. .Sp ناسازگاری‌های شناخته‌شده در \fB\-fabi\-version=2\fR (که از GCC 3.4 تا 4.9 پیش‌فرض بود) شامل موارد زیر است: .RS 4 .IP * 4 یک قالب (template) با پارامتر غیرنوعی قالب از نوع مرجع (reference type) به‌صورت نادرست mangling می‌شد: .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 به روشی غیر استاندارد mangling می‌شدند که اجازهٔ سربارگذاری (overload) توابعی با اندازه‌های مختلف بردار را نمی‌داد. .Sp شیوهٔ mangling در \fB\-fabi\-version=4\fR تغییر یافت. .IP * 4 صفات \&\f(CW\*(C`_\|_attribute ((const))\*(C'\fR و \f(CW\*(C`noreturn\*(C'\fR به عنوان توصیف‌کننده‌های نوع mangling می‌شدند، و \f(CW\*(C`decltype\*(C'\fR مربوط به یک اعلان ساده حذف (fold away) می‌شد. .Sp این مشکلات mangling در \fB\-fabi\-version=5\fR برطرف شدند. .IP * 4 شمارنده‌های با دامنه (Scoped enumerators) که به عنوان آرگومان به یک تابع با تعداد متغیر آرگومان ارسال می‌شوند، مانند شمارنده‌های بدون دامنه ارتقا می‌یابند و باعث اعلام خطا توسط \f(CW\*(C`va_arg\*(C'\fR می‌شوند. در بیشتر مقاصد، این مورد عملاً بر ABI ارسال پارامترها تأثیری ندارد، زیرا هیچ راهی برای ارسال آرگومان کوچک‌تر از \f(CW\*(C`int\*(C'\fR وجود ندارد. .Sp همچنین، ABI شیوهٔ mangling بسته‌های آرگومان قالب، \&\f(CW\*(C`const_cast\*(C'\fR، \f(CW\*(C`static_cast\*(C'\fR، افزایش/کاهش پیشوندی، و یک تابع با دامنهٔ کلاس که به عنوان آرگومان قالب استفاده شده را تغییر داد. .Sp این مسائل در \fB\-fabi\-version=6\fR اصلاح شدند. .IP * 4 توابع لامبدا در دامنهٔ آرگومان‌های پیش‌فرض به‌صورت نادرست mangling می‌شدند، و ABI شیوهٔ mangling مربوط به \f(CW\*(C`nullptr_t\*(C'\fR را تغییر داد. .Sp این مسائل در \fB\-fabi\-version=7\fR اصلاح شدند. .IP * 4 هنگام mangling نوع یک تابع همراه با توصیف‌کننده‌های cv تابع، نوعِ بدون توصیف‌کنندهٔ تابع به اشتباه به عنوان یک نامزد جایگزینی (substitution candidate) در نظر گرفته می‌شد. .Sp این مورد در \fB\-fabi\-version=8\fR، مقدار پیش‌فرض در GCC 5.1، برطرف شد. .IP * 4 مقدار \&\f(CWdecltype(nullptr)\fR به نادرستی دارای تراز ۱ بود که منجر به دسترسی‌های ناتراز (unaligned accesses) می‌شد. توجه داشته باشید که این موضوع بر ABI تابعی با پارامتر \f(CW\*(C`nullptr_t\*(C'\fR تأثیری نداشت، چرا که پارامترها دارای یک حداقل تراز هستند. .Sp این مشکل در \fB\-fabi\-version=9\fR، مقدار پیش‌فرض در GCC 5.2، برطرف شد. .IP * 4 صفات مختص به معماری مقصد که بر ماهیت یک نوع تأثیر می‌گذارند، مانند قراردادهای فراخوانی ia32 روی نوع تابع (مانند stdcall، regparm و غیره)، بر نام mangled اثر نمی‌گذاشتند که در هنگام استفاده از اشاره‌گرهای تابع به عنوان آرگومان‌های قالب منجر به تداخل نام می‌شد. .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++ ملزم می‌داند که استفاده‌های بدون پیشوند (unqualified) از یک نام در یک کلاس، در کل حوزهٔ کلاس معنای یکسانی داشته باشند، بنابراین اعلان یک نام پس از استفاده از آن بدریخت (ill-formed) است: .Sp .Vb 3 \& struct A; \& struct B1 { A a; typedef A A; }; // warning, \*(AqA\*(Aq changes meaning \& struct B2 { A a; struct A { }; }; // error, \*(AqA\*(Aq changes meaning .Ve .Sp به‌طور پیش‌فرض، حالت B1 تنها یک هشدار است زیرا هر دو اعلان دارای نوع یکسانی هستند، در حالی که حالت B2 یک خطا است. هر دو پیام تشخیصی را می‌توان با \fB\-Wno\-changes\-meaning\fR غیرفعال کرد. همچنین، می‌توان حالت خطا را با \&\fB\-Wno\-error=changes\-meaning\fR یا \fB\-fpermissive\fR به یک هشدار تقلیل داد. .Sp هر دو پیام تشخیصی توسط \fB\-fms\-extensions\fR نیز سرکوب می‌شوند. .IP \fB\-Wchar\-subscripts\fR 4 .IX Item "-Wchar-subscripts" اگر اندیس یک آرایه از نوع \f(CW\*(C`char\*(C'\fR باشد هشدار می‌دهد. این یک دلیل شایع برای بروز خطا است، زیرا برنامه‌نویسان اغلب فراموش می‌کنند که این نوع در برخی ماشین‌ها علامت‌دار (signed) است. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-coverage\-mismatch\fR 4 .IX Item "-Wno-coverage-mismatch" هنگام استفاده از گزینهٔ \&\fB\-fprofile\-use\fR، در صورتی که پروفایل‌های بازخورد تطابق نداشته باشند، هشدار می‌دهد. اگر یک فایل مبدأ میان زمان کامپایل با \fB\-fprofile\-generate\fR و کامپایل با \fB\-fprofile\-use\fR تغییر کند، ممکن است فایل‌های حاوی بازخورد پروفایل نتوانند با فایل مبدأ تطابق یابند و GCC نتواند از اطلاعات بازخورد پروفایل استفاده کند. به‌طور پیش‌فرض، این هشدار فعال بوده و به عنوان یک خطا در نظر گرفته می‌شود. از \fB\-Wno\-coverage\-mismatch\fR می‌توان برای غیرفعال کردن هشدار، یا از \fB\-Wno\-error=coverage\-mismatch\fR برای غیرفعال کردن خطا استفاده کرد. غیرفعال کردن حالت خطا برای این هشدار می‌تواند منجر به تولید کدی با بهینه‌سازی ضعیف شود و تنها در صورت اعمال تغییرات بسیار جزئی مانند رفع باگ در یک پایه‌کد موجود مفید است. غیرفعال‌سازی کامل این هشدار توصیه نمی‌شود..IP \fB\-Wno\-coverage\-too\-many\-conditions\fR 4 .IX Item "-Wno-coverage-too-many-conditions" هشدار در صورتی که \fB\-fcondition\-coverage\fR استفاده شود و یک عبارت دارای جملات (terms) بیش از حدی باشد و GCC از پوشش‌دهی صرف‌نظر کند. پوشش‌دهی زمانی رها می‌شود که تعداد جملات موجود در عبارت شرطی از تعداد بیت‌ها در یک \f(CW\*(C`gcov_type_unsigned\*(C'\fR بیشتر باشد. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wno\-coverage\-too\-many\-paths\fR 4 .IX Item "-Wno-coverage-too-many-paths" هشدار در صورتی که \fB\-fpath\-coverage\fR استفاده شود و یک تابع دارای مسیرهای بیش از حدی باشد و GCC از پوشش‌دهی صرف‌نظر کند. رها کردن پوشش توسط \&\fB\-fpath\-coverage\-limit\fR کنترل می‌شود. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wno\-coverage\-invalid\-line\-number\fR 4 .IX Item "-Wno-coverage-invalid-line-number" هشدار در صورتی که یک تابع به دلیل ماکروهای نامعتبر شماره خط (linenum) زودتر از نقطه شروع خود پایان یابد. این هشدار تنها هنگامی صادر می‌شود که \fB\-\-coverage\fR فعال باشد. .Sp به‌طور پیش‌فرض، این هشدار فعال است و به عنوان یک خطا تلقی می‌شود. از \fB\-Wno\-coverage\-invalid\-line\-number\fR می‌توان برای غیرفعال کردن این هشدار، یا از \fB\-Wno\-error=coverage\-invalid\-line\-number\fR برای جلوگیری از تلقی آن به عنوان خطا استفاده کرد. .IP "\fB\-Wno\-cpp\fR (فقط C، Objective\-C، C++، Objective\-C++ و Fortran)" 4 .IX Item "-Wno-cpp (C, Objective-C, C++, Objective-C++ and Fortran only)" فرونشاندن و نادیده گرفتن پیام‌های هشدار صادر شده توسط دستورات \f(CW\*(C`#warning\*(C'\fR. .IP "\fB\-Wdouble\-promotion\fR (فقط C، C++، Objective\-C و Objective\-C++)" 4 .IX Item "-Wdouble-promotion (C, C++, Objective-C and Objective-C++ only)" هشداری در زمان ارتقای ضمنی (implicit promotion) یک مقدار از نوع \f(CW\*(C`float\*(C'\fR به \f(CW\*(C`double\*(C'\fR می‌دهد. پردازنده‌های دارای واحد ممیز شناور ۳۲\-بیتی «دقت منفرد» (single-precision)، نوع \f(CW\*(C`float\*(C'\fR را به‌صورت سخت‌افزاری پیاده‌سازی می‌کنند، اما \&\f(CW\*(C`double\*(C'\fR را به‌صورت نرم‌افزاری شبیه‌سازی می‌نمایند. در چنین ماشین‌هایی، انجام محاسبات با استفاده از مقادیر \f(CW\*(C`double\*(C'\fR به دلیل سربار ناشی از شبیه‌سازی نرم‌افزاری بسیار هزینه‌برتر است. .Sp انجام تصادفی محاسبات با \f(CW\*(C`double\*(C'\fR بسیار آسان رخ می‌دهد زیرا لیترال‌های ممیز شناور به‌طور ضمنی از نوع \f(CW\*(C`double\*(C'\fR هستند. برای مثال، در: .Sp .Vb 4 \& float area(float radius) \& { \& return 3.14159 * radius * radius; \& } .Ve .Sp کامپایلر کل محاسبات را با نوع \f(CW\*(C`double\*(C'\fR انجام می‌دهد زیرا لیترال ممیز شناور از نوع \f(CW\*(C`double\*(C'\fR است. .IP "\fB\-Wduplicate\-decl\-specifier\fR (فقط C و Objective\-C)" 4 .IX Item "-Wduplicate-decl-specifier (C and Objective-C only)" هشدار در صورتی که یک اعلان دارای مشخص‌کننده‌های (specifier) تکراری \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 string) مشخص‌شده هستند، و تبدیل‌های تعیین‌شده در رشته قالب معقول و معتبرند. این شامل توابع استاندارد و سایر توابعی می‌شود که با مشخصه‌های قالب (format attributes) تعیین شده‌اند، در خانواده‌های \f(CW\*(C`printf\*(C'\fR، \&\f(CW\*(C`scanf\*(C'\fR، \f(CW\*(C`strftime\*(C'\fR و \f(CW\*(C`strfmon\*(C'\fR (یک افزونه X/Open که در استاندارد C وجود ندارد) (یا سایر خانواده‌های ویژه‌ی هدف). این که کدام توابع بدون تعیین مشخصه‌های قالب بررسی می‌شوند به نسخه استاندارد انتخاب‌شده بستگی دارد، و چنین بررسی‌هایی برای توابع فاقد مشخصه، توسط \&\fB\-ffreestanding\fR یا \fB\-fno\-builtin\fR غیرفعال می‌شوند. .Sp قالب‌ها در برابر ویژگی‌های قالب پشتیبانی‌شده توسط GNU libc نسخه 2.2 بررسی می‌شوند. این موارد شامل تمامی ویژگی‌های ISO C90 و C99 و همچنین ویژگی‌هایی از Single Unix 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 که ممکن است باعث سرریز بافر مقصد شوند، هشدار می‌دهد. هنگامی که تعداد دقیق بایت‌های نوشته‌شده توسط یک دستور قالب در زمان کامپایل قابل تعیین نباشد، بر اساس روش‌های اکتشافی (heuristics) که به آرگومان \&\fIlevel\fR و بهینه‌سازی بستگی دارند، تخمین زده می‌شود. در حالی که فعال‌سازی بهینه‌سازی در بیشتر موارد دقت هشدار را بهبود می‌بخشد، ممکن است منجر به موارد مثبت کاذب (false positives) نیز بشود. .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 یک جایگزین برای افزایش اندازه بافر مقصد، محدود کردن دامنه مقادیر قالب‌بندی‌شده است. بیشترین طول آرگومان‌های رشته‌ای را می‌توان با مشخص کردن دقت در دستور قالب محدود کرد. هنگامی که بتوان فرض کرد آرگومان‌های عددی دستورات قالب به مقداری کمتر از دقت نوع خود محدود شده‌اند، انتخاب یک تعدیل‌کننده طول (length modifier) مناسب برای مشخص‌کننده قالب، اندازه بافر مورد نیاز را کاهش می‌دهد. برای مثال، اگر در نمونه بالا بتوان فرض کرد \fIa\fR و \fIb\fR در محدوده دقت نوع \f(CW\*(C`short int\*(C'\fR هستند، استفاده از دستور قالب \f(CW%hi\fR یا تبدیل نوع (cast) آرگومان به \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 مشخص شده باشد، دربارهٔ قالب‌های با طول صفر (zero\-length) هشدار نمی‌دهد. استاندارد 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 که ممکن است منجر به کوتاه‌شدگی خروجی شوند هشدار می‌دهد. هنگامی که تعداد دقیق بایت‌های نوشته‌شده توسط یک دستورالعمل قالب‌بندی در زمان کامپایل قابل تعیین نباشد، بر اساس روش‌های اکتشافی که به آرگومان \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" اگر کامپایلر مسیرهایی را تشخیص دهد که به دلیل ارجاع‌زدایی از یک اشاره‌گر تهی رفتار نادرست یا تعریف‌نشده ایجاد می‌کنند، هشدار می‌دهد. این گزینه تنها زمانی فعال است که \fB\-fdelete\-null\-pointer\-checks\fR فعال باشد، که در بیشتر معماری‌های هدف توسط بهینه‌سازی‌ها فعال می‌شود. دقت هشدارها به گزینه‌های بهینه‌سازی مورد استفاده بستگی دارد. .IP \fB\-Wno\-musttail\-local\-addr\fR 4 .IX Item "-Wno-musttail-local-addr" دربارهٔ ارسال اشاره‌گر (یا در C++، یک مرجع) به یک متغیر محلی یا برچسب به آرگومان فراخوانی \f(CW\*(C`musttail\*(C'\fR هشدار نمی‌دهد. این متغیرها قبل از دستور فراخوانی انتهایی (tail call) از حوزه خارج می‌شوند. .IP \fB\-Wmaybe\-musttail\-local\-addr\fR 4 .IX Item "-Wmaybe-musttail-local-addr" هنگامی که آدرس یک متغیر محلی می‌تواند به فراخوانی \f(CW\*(C`musttail\*(C'\fR نشت کند، هشدار می‌دهد؛ مگر اینکه پیش از فراخوانی \f(CW\*(C`musttail\*(C'\fR از حوزه خارج شده باشد. .Sp .Vb 1 \& int foo (int *); \& \& int \& bar (int *x) \& { \& if (x[0] == 1) \& { \& int a = 42; \& foo (&a); \& /* Without the C attribute this call would not \& be tail called, because address of the C variable escapes \& and the second foo call could dereference it. With the attribute \& the local variables are assumed to go out of scope immediately \& before the tail call instruction and the compiler warns about \& this. */ \& [[gnu::musttail]] return foo (nullptr); \& } \& else \& { \& { \& int a = 42; \& foo (&a); \& } \& /* The C variable isn\*(Aqt already in scope, so even when it \& escaped, even without C attribute it would be \& undefined behavior to dereference it and the compiler could \& turn this into a tail call. No warning is diagnosed here. */ \& [[gnu::musttail]] return foo (nullptr); \& } \& } .Ve .Sp این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wnrvo\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wnrvo (C++ and Objective-C++ only)" اگر کامپایلر کپی از متغیر محلی به مقدار بازگشتی تابع را در بستری که طبق [class.copy.elision] مجاز است حذف نکند، هشدار می‌دهد. این حذف معمولاً به‌عنوان «بهینه‌سازی مقدار بازگشتی نام‌گذاری‌شده» (Named Return Value Optimization) شناخته می‌شود. برای نمونه، در مثال زیر کامپایلر نمی‌تواند کپی‌ها را از هر دو v1 و v2 حذف کند، بنابراین هیچ‌کدام را حذف نمی‌کند. .Sp .Vb 7 \& std::vector f() \& { \& std::vector v1, v2; \& // ... \& if (cond) return v1; \& else return v2; // warning: not eliding copy \& } .Ve .IP \fB\-Winfinite\-recursion\fR 4 .IX Item "-Winfinite-recursion" دربارهٔ فراخوانی‌های بازگشتی بی‌پایان هشدار می‌دهد. این هشدار در تمام سطوح بهینه‌سازی مؤثر است اما برای تشخیص بازگشت بی‌پایان در فراخوانی‌های بین دو یا چند تابع، به بهینه‌سازی نیاز دارد. \&\fB\-Winfinite\-recursion\fR در \fB\-Wall\fR گنجانده شده است. .Sp با \fB\-Wanalyzer\-infinite\-recursion\fR مقایسه شود که عیب‌یابی مشابهی ارائه می‌دهد، اما به شیوهٔ متفاوتی (به‌عنوان بخشی از \fB\-fanalyzer\fR) پیاده‌سازی شده است. .IP "\fB\-Winit\-self\fR (تنها C، C++، Objective\-C و Objective\-C++)" 4 .IX Item "-Winit-self (C, C++, Objective-C and Objective-C++ only)" دربارهٔ متغیرهای مقداردهی‌نشده‌ای که با خودشان مقداردهی اولیه می‌شوند هشدار می‌دهد. توجه داشته باشید که این گزینه فقط همراه با گزینهٔ \fB\-Wuninitialized\fR قابل استفاده است. .Sp برای نمونه، GCC دربارهٔ مقداردهی‌نشده بودن \f(CW\*(C`i\*(C'\fR در قطعه‌کد زیر تنها زمانی هشدار می‌دهد که \fB\-Winit\-self\fR مشخص شده باشد: .Sp .Vb 5 \& int f() \& { \& int i = i; \& return i; \& } .Ve .Sp این هشدار در C++ توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-implicit\-int\fR (تنها C و Objective\-C)" 4 .IX Item "-Wno-implicit-int (C and Objective-C only)" این گزینه هشدارهایی را کنترل می‌کند که در آن‌ها اعلان، نوعی را مشخص نکرده است. این هشدار به‌طور پیش‌فرض، به‌عنوان یک خطا، در C99 و گویش‌های پس از آن در C و همچنین توسط \fB\-Wall\fR فعال است. این خطا می‌تواند با استفاده از \fB\-fpermissive\fR (به همراه برخی خطاهای دیگر)، یا فقط برای این خطا به‌تنهایی، با \fB\-Wno\-error=implicit\-int\fR به یک هشدار تنزل یابد. .Sp این هشدار توسط \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-implicit\-function\-declaration\fR (تنها C و Objective\-C)" 4 .IX Item "-Wno-implicit-function-declaration (C and Objective-C only)" این گزینه هشدارهایی را کنترل می‌کند که در آن‌ها یک تابع پیش از اعلام شدن، استفاده می‌شود. این هشدار به‌طور پیش‌فرض، به‌عنوان یک خطا، در C99 و گویش‌های پس از آن در C و همچنین توسط \fB\-Wall\fR فعال است. این خطا می‌تواند با استفاده از \fB\-fpermissive\fR (به همراه برخی خطاهای دیگر)، یا برای این خطا به‌تنهایی، با \&\fB\-Wno\-error=implicit\-function\-declaration\fR به یک هشدار تنزل یابد. .Sp این هشدار توسط \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wimplicit\fR (تنها C و Objective\-C)" 4 .IX Item "-Wimplicit (C and Objective-C only)" مشابه \fB\-Wimplicit\-int\fR و \fB\-Wimplicit\-function\-declaration\fR است. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Whardened\fR 4 .IX Item "-Whardened" هنگامی که \fB\-fhardened\fR گزینه‌ای از مجموعهٔ خود را فعال نکرد (که برای آن به \fB\-fhardened\fR رجوع کنید)، هشدار می‌دهد. برای نمونه، استفادهٔ هم‌زمان از \fB\-fhardened\fR و \fB\-fstack\-protector\fR در خط فرمان باعث هشدار دادن \&\fB\-Whardened\fR می‌شود چرا که \fB\-fstack\-protector\-strong\fR توسط \fB\-fhardened\fR فعال نخواهد شد. .Sp این هشدار به‌طور پیش‌فرض فعال است و تنها زمانی اثر دارد که \fB\-fhardened\fR فعال باشد..IP \fB\-Wimplicit\-fallthrough\fR 4 .IX Item "-Wimplicit-fallthrough" گزینهٔ \fB\-Wimplicit\-fallthrough\fR همانند \fB\-Wimplicit\-fallthrough=3\fR و \fB\-Wno\-implicit\-fallthrough\fR همانند \&\fB\-Wimplicit\-fallthrough=0\fR است. .IP \fB\-Wimplicit\-fallthrough=\fR\fIn\fR 4 .IX Item "-Wimplicit-fallthrough=n" هنگامی که یک مورد (case) در دستور switch به مورد بعدی سرریز می‌کند (fall through می‌شود)، هشدار می‌دهد. برای نمونه: .Sp .Vb 11 \& switch (cond) \& { \& case 1: \& a = 1; \& break; \& case 2: \& a = 2; \& case 3: \& a = 3; \& break; \& } .Ve .Sp این هشدار زمانی که آخرین دستور یک case نتواند سرریز کند، هشداری صادر نمی‌کند؛ مثلاً زمانی که یک دستور return یا فراخوانی تابعی اعلان‌شده با مشخصهٔ noreturn وجود داشته باشد. \fB\-Wimplicit\-fallthrough=\fR همچنین دستورهای کنترل جریان مانند ifها را نیز در نظر می‌گیرد و تنها در موارد مناسب هشدار می‌دهد. به عنوان مثال: .Sp .Vb 10 \& switch (cond) \& { \& case 1: \& if (i > 3) { \& bar (5); \& break; \& } else if (i < 1) { \& bar (0); \& } else \& return; \& default: \& ... \& } .Ve .Sp از آنجا که مواردی وجود دارد که در آن‌ها سرریز کردن مورد switch مطلوب است، 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>" تشخیص نمی‌دهد؛ تنها مشخصه‌ها (attributes) این هشدار را غیرفعال می‌کنند. .RE .RS 4 .Sp کامنت باید پس از فاصله‌های خالی اختیاری و کامنت‌های دیگر، با کلمات کلیدی \f(CW\*(C`case\*(C'\fR یا \f(CW\*(C`default\*(C'\fR، یا با یک برچسب کاربری که پیش از یک برچسب \f(CW\*(C`case\*(C'\fR یا \f(CW\*(C`default\*(C'\fR قرار دارد دنبال شود. .Sp .Vb 8 \& switch (cond) \& { \& case 1: \& bar (0); \& /* FALLTHRU */ \& default: \& ... \& } .Ve .Sp هشدار \fB\-Wimplicit\-fallthrough=3\fR توسط \fB\-Wextra\fR فعال می‌شود. .RE .IP "\fB\-Wno\-if\-not\-aligned\fR (تنها C، C++، Objective\-C و Objective\-C++)" 4 .IX Item "-Wno-if-not-aligned (C, C++, Objective-C and Objective-C++ only)" کنترل می‌کند که آیا هشدارهای صادرشده توسط مشخصهٔ \f(CW\*(C`warn_if_not_aligned\*(C'\fR باید اعلام شوند یا خیر. این هشدارها به‌طور پیش‌فرض فعال هستند. .IP "\fB\-Wignored\-qualifiers\fR (تنها C و C++)" 4 .IX Item "-Wignored-qualifiers (C and C++ only)" اگر نوع بازگشتی یک تابع دارای توصیف‌کنندهٔ نوع (type qualifier) مانند \f(CW\*(C`const\*(C'\fR باشد، هشدار می‌دهد. در ISO C چنین توصیف‌کننده‌ای هیچ اثری ندارد، زیرا مقدار بازگردانده‌شده توسط یک تابع lvalue نیست. در C++، این هشدار تنها برای نوع‌های اسکالر یا \f(CW\*(C`void\*(C'\fR صادر می‌شود. استاندارد ISO C انواع بازگشتی \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)" زمانی که تورفتگی (indentation) کد بازتاب‌دهندهٔ ساختار بلوکی آن نباشد، هشدار می‌دهد. به‌ویژه، برای بندهای \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 در صورت ترکیب کلیدهای Tab و فاصله (space)، این هشدار از گزینهٔ \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" هنگامی هشدار می‌دهد که در اعلان یک تابع، یک یا چند صفت که یک تابع مرتبط با آن‌ها اعلان شده و نبودشان ممکن است بر درستی یا کارایی کد تولیدشده تأثیر منفی بگذارد، وجود نداشته باشد. برای مثال، این هشدار برای اعلان نام‌های مستعاری (aliases) صادر می‌شود که از صفت‌ها برای تعیین نیازمندی‌های محدودکنندهٔ کمتری نسبت به اهداف خود استفاده می‌کنند. این امر معمولاً نشان‌دهندهٔ یک فرصت بهینه‌سازی بالقوه است. در مقابل، گزینهٔ \fB\-Wattribute\-alias=2\fR هشدارهایی را کنترل می‌کند که هنگام محدودکننده‌تر بودن نام مستعار نسبت به هدف صادر می‌شوند، که می‌تواند به تولید کد نادرست منجر شود. صفت‌های در نظر گرفته شده شامل \f(CW\*(C`alloc_align\*(C'\fR، \f(CW\*(C`alloc_size\*(C'\fR، \&\f(CW\*(C`cold\*(C'\fR، \f(CW\*(C`const\*(C'\fR، \f(CW\*(C`hot\*(C'\fR، \f(CW\*(C`leaf\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR، \&\f(CW\*(C`nonnull\*(C'\fR، \f(CW\*(C`noreturn\*(C'\fR، \f(CW\*(C`nothrow\*(C'\fR، \f(CW\*(C`pure\*(C'\fR، \&\f(CW\*(C`returns_nonnull\*(C'\fR و \f(CW\*(C`returns_twice\*(C'\fR هستند. .Sp در ++C، این هشدار هنگامی صادر می‌شود که یک تخصیص صریح (explicit specialization) از یک الگوی اصلی که با صفت \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 به عنوان تخصیص‌دهنده و آزادساز متناظر با یکدیگر مرتبط کرد. توابع استاندارد \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، مگر اینکه با گزینهٔ \fB\-fno\-builtin\fR غیرفعال شده باشند، به طور ضمنی به عنوان تخصیص‌دهنده و آزادساز متناظر شناخته می‌شوند. در مثال زیر \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 همچنین برای کاربردهای خطرناک گسترش گنو عملگر \&\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 به خودش منتقل (move) شود. چنین استفاده‌ای از \f(CW\*(C`std::move\*(C'\fR معمولاً هیچ اثری ندارد. .Sp .Vb 9 \& struct T { \& ... \& }; \& void fn() \& { \& T t; \& ... \& t = std::move (t); \& } .Ve .Sp این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wsequence\-point\fR 4 .IX Item "-Wsequence-point" دربارهٔ کدهایی که ممکن است به دلیل نقض قواعد نقاط توالی (sequence point) در استانداردهای C و ++C دارای معانی تعریف‌نشده باشند، هشدار می‌دهد. .Sp استانداردهای C و ++C ترتیب ارزیابی عبارت‌ها در یک برنامهٔ C/++C را بر اساس \fIنقاط توالی\fR تعریف می‌کنند؛ نقاطی که نمایانگر یک ترتیب جزئی بین اجرای بخش‌هایی از برنامه هستند: بخش‌هایی که قبل از نقطه توالی اجرا می‌شوند، و بخش‌هایی که بعد از آن اجرا می‌شوند. این نقاط پس از ارزیابی یک عبارت کامل (عبارتی که بخشی از یک عبارت بزرگ‌تر نیست)، پس از ارزیابی نخستین عملوند عملگرهای \&\f(CW\*(C`&&\*(C'\fR، \f(CW\*(C`||\*(C'\fR، \f(CW\*(C`? :\*(C'\fR یا \f(CW\*(C`,\*(C'\fR (کاما)، پیش از فراخوانی یک تابع (اما پس از ارزیابی آرگومان‌های آن و عبارتی که تابع فراخوانی‌شده را مشخص می‌کند)، و در نقاط مشخص دیگری رخ می‌دهند. غیر از مواردی که توسط قواعد نقاط توالی بیان شده، ترتیب ارزیابی زیرعبارت‌های یک عبارت مشخص نشده است. تمام این قواعد تنها یک ترتیب جزئی را بیان می‌کنند نه یک ترتیب کلی، زیرا برای مثال اگر دو تابع در یک عبارت فراخوانی شوند بدون اینکه بین آن‌ها نقطه توالی وجود داشته باشد، ترتیب فراخوانی توابع نامشخص است. با این حال، کمیتهٔ استاندارد مقرر کرده است که فراخوانی‌های توابع هم‌پوشانی ندارند. .Sp مشخص نشده است که در فاصله بین نقاط توالی، اعمال تغییرات روی مقادیر شیءها چه زمانی اثرگذار می‌شوند. برنامه‌هایی که رفتار آن‌ها به این موضوع وابسته است رفتاری تعریف‌نشده دارند؛ استانداردهای 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. برخی موارد پیچیده‌تر توسط این گزینه شناسایی نمی‌شوند و ممکن است گهگاه نتیجه مثبت کاذب بدهد، اما به طور کلی در تشخیص این نوع مشکلات در برنامه‌ها بسیار کارآمد واقع شده است. .Sp استاندارد C++17 ترتیب ارزیابی عملوندها را در موارد بیشتری تعریف خواهد کرد: به‌ویژه الزام می‌کند که سمت راست یک انتساب باید پیش از سمت چپ آن ارزیابی شود، بنابراین مثال‌های بالا دیگر رفتار تعریف‌نشده ندارند. اما این گزینه همچنان دربارهٔ آن‌ها هشدار می‌دهد تا به برنامه‌نویسان کمک کند از نوشتن کدهایی که در C و نگارش‌های پیشین ++C رفتار تعریف‌نشده دارند خودداری کنند. .Sp متن استاندارد به شکلی گیج‌کننده نگاشته شده است؛ از این رو در موارد ظریف و پیچیده، بحث‌هایی درباره مفهوم دقیق قواعد نقاط توالی وجود دارد. پیوندهایی به مباحث مربوط به این موضوع، از جمله تعاریف رسمی پیشنهادی، را می‌توان در صفحهٔ خواندنی‌های GCC به نشانی <\fBhttps://gcc.gnu.org/readings.html\fR> یافت. .Sp این هشدار توسط \fB\-Wall\fR برای C و ++C فعال می‌شود..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 فعال باشد که اولویت دارد). همچنین اگر اجرای برنامه ممکن است به انتهای بدنه تابع برسد، یا اگر تابع اصلاً شامل هیچ دستور بازگشتی نباشد، هشدار می‌دهد. .Sp تلاش برای استفاده از مقدار بازگشتی یک تابع غیر\-\f(CW\*(C`void\*(C'\fR به جز \f(CW\*(C`main\*(C'\fR که اجرای آن با رسیدن به آکولاد بسته خاتمه‌دهنده از انتهای تابع خارج می‌شود، تعریف‌نشده است. .Sp برخلاف C، در ++C، خارج شدن اجرای یک تابع غیر\-\f(CW\*(C`void\*(C'\fR به جز \f(CW\*(C`main\*(C'\fR از انتهای تابع، حتی زمانی که از مقدار تابع استفاده نشود نیز منجر به رفتار تعریف‌نشده می‌شود. .Sp این هشدار به‌طور پیش‌فرض در ++C و در غیر این صورت با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-shift\-count\-negative\fR 4 .IX Item "-Wno-shift-count-negative" هشدارهای مربوط به منفی بودن تعداد شیفت را کنترل می‌کند. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wno\-shift\-count\-overflow\fR 4 .IX Item "-Wno-shift-count-overflow" هشدارهای مربوط به بزرگ‌تر یا مساوی بودن تعداد شیفت با پهنای بیتی (bit width) نوع داده را کنترل می‌کند. این هشدار به‌طور پیش‌فرض فعال است. .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 (و جدیدتر) فعال است. این سطح هشدار، درباره شیفت دادن ۱ به چپ به داخل بیت علامت هشدار نمی‌دهد. (با این حال، در 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 شاخصی از نوع شمارشی داشته باشد و فاقد \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 خارج از محدوده نوع بولی باشند، هشدار نمی‌دهد. فرونشاندن این هشدار با تبدیل صریح (cast) عبارت کنترلی به نوعی غیر از \f(CW\*(C`bool\*(C'\fR امکان‌پذیر است. برای مثال: .Sp .Vb 4 \& switch ((int) (a == 4)) \& { \& ... \& } .Ve .Sp این هشدار به‌طور پیش‌فرض برای برنامه‌های C و ++C فعال است. .IP \fB\-Wno\-switch\-outside\-range\fR 4 .IX Item "-Wno-switch-outside-range" این گزینه هشدارهایی را کنترل می‌کند که در آن‌ها مقدار یک \f(CW\*(C`case\*(C'\fR در \f(CW\*(C`switch\*(C'\fR خارج از محدوده نوع متناظر با خود باشد. این هشدار به‌طور پیش‌فرض برای برنامه‌های C و ++C فعال است. .IP \fB\-Wno\-switch\-unreachable\fR 4 .IX Item "-Wno-switch-unreachable" زمانی که یک دستور \f(CW\*(C`switch\*(C'\fR شامل دستوراتی میان عبارت کنترلی و نخستین برچسب case باشد که هرگز اجرا نخواهند شد، هشدار نمی‌دهد. برای نمونه: .Sp .Vb 7 \& switch (cond) \& { \& i = 15; \& ... \& case 5: \& ... \& } .Ve .Sp اگر دستور میان عبارت کنترلی و نخستین برچسب case صرفاً یک اعلان (declaration) باشد، \&\fB\-Wswitch\-unreachable\fR هشدار نمی‌دهد: .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)" هنگام استفاده از توابع درونی (built\-in) \f(CW\*(C`_\|_sync_fetch_and_nand\*(C'\fR و \f(CW\*(C`_\|_sync_nand_and_fetch\*(C'\fR هشدار می‌دهد. معناشناسی این توابع در GCC 4.4 تغییر کرده است. .IP \fB\-Wtrivial\-auto\-var\-init\fR 4 .IX Item "-Wtrivial-auto-var-init" زمانی که \f(CW\*(C`\-ftrivial\-auto\-var\-init\*(C'\fR نتواند متغیر خودکار را مقداردهی اولیه کند، هشدار می‌دهد. یک وضعیت متداول، متغیر خودکاری است که میان عبارت کنترلی و نخستین برچسب case یک دستور \f(CW\*(C`switch\*(C'\fR اعلان شده باشد. .IP \fB\-Wunused\-but\-set\-parameter\fR 4 .IX Item "-Wunused-but-set-parameter" هرگاه به یک پارامتر تابع مقداری انتساب داده شود، اما به غیر از اعلان آن، استفاده دیگری از آن نشود، هشدار می‌دهد. .Sp برای فرونشاندن این هشدار از صفت \f(CW\*(C`unused\*(C'\fR استفاده کنید. .Sp این هشدار همچنین توسط \fB\-Wunused\fR همراه با \&\fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wunused\-but\-set\-variable\fR 4 .IX Item "-Wunused-but-set-variable" هرگاه به یک متغیر محلی مقداری انتساب داده شود، اما به غیر از اعلان آن، استفاده دیگری از آن نشود، هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .Sp برای فرونشاندن این هشدار از صفت \f(CW\*(C`unused\*(C'\fR استفاده کنید. .Sp این هشدار همچنین توسط \fB\-Wunused\fR که خود توسط \fB\-Wall\fR فعال می‌شود، فعال می‌گردد. .IP \fB\-Wunused\-function\fR 4 .IX Item "-Wunused-function" هرگاه یک تابع static اعلان شده ولی تعریف نشده باشد، یا یک تابع static غیر inline بی‌استفاده بماند، هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wunused\-label\fR 4 .IX Item "-Wunused-label" هرگاه یک برچسب اعلان شده ولی استفاده نشده باشد هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .Sp برای فرونشاندن این هشدار از صفت \f(CW\*(C`unused\*(C'\fR استفاده کنید. .IP "\fB\-Wunused\-local\-typedefs\fR (فقط C، Objective\-C، ++C و Objective\-C++)" 4 .IX Item "-Wunused-local-typedefs (C, Objective-C, C++ and Objective-C++ only)" زمانی که یک typedef که به‌صورت محلی در یک تابع تعریف شده است استفاده نشود، هشدار می‌دهد. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wunused\-parameter\fR 4 .IX Item "-Wunused-parameter" هرگاه یک پارامتر تابع به جز در اعلان آن بدون استفاده بماند، هشدار می‌دهد. این گزینه توسط \f(CW\*(C`\-Wunused\*(C'\fR فعال نمی‌شود مگر آنکه \f(CW\*(C`\-Wextra\*(C'\fR نیز مشخص شده باشد. .Sp برای فرونشاندن این هشدار از صفت \f(CW\*(C`unused\*(C'\fR استفاده کنید. .IP \fB\-Wno\-unused\-result\fR 4 .IX Item "-Wno-unused-result" در صورتی که فراخواننده تابعی که با صفت \&\f(CW\*(C`warn_unused_result\*(C'\fR مشخص شده است از مقدار بازگشتی آن استفاده نکند، هشدار نمی‌دهد. مقدار پیش‌فرض \fB\-Wunused\-result\fR است..IP \fB\-Wunused\-variable\fR 4 .IX Item "-Wunused-variable" هرگاه یک متغیر محلی یا ایستا (static) به جز در اعلان خود استفاده نشده باشد، هشدار می‌دهد. این گزینه برای C متضمن \fB\-Wunused\-const\-variable=1\fR است، اما برای ++C نه. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .Sp برای فرونشاندن این هشدار، از صفت \f(CW\*(C`unused\*(C'\fR استفاده کنید. .IP \fB\-Wunused\-const\-variable\fR 4 .IX Item "-Wunused-const-variable" .PD 0 .IP \fB\-Wunused\-const\-variable=\fR\fIn\fR 4 .IX Item "-Wunused-const-variable=n" .PD هرگاه یک متغیر ثابت ایستا (constant static) به جز در اعلان خود استفاده نشده باشد، هشدار می‌دهد. .Sp برای فرونشاندن این هشدار، از صفت \f(CW\*(C`unused\*(C'\fR استفاده کنید. .RS 4 .IP \fB\-Wunused\-const\-variable=1\fR 4 .IX Item "-Wunused-const-variable=1" دربارهٔ متغیرهای static const استفاده‌نشده که در واحد ترجمه اصلی تعریف شده‌اند هشدار می‌دهد، اما دربارهٔ متغیرهای static const اعلان‌شده در هدرهای گنجانده‌شده هشدار نمی‌دهد. .Sp \&\fB\-Wunused\-const\-variable=1\fR برای C توسط یکی از گزینه‌های \&\fB\-Wunused\-variable\fR یا \fB\-Wunused\fR فعال می‌شود، اما برای ++C نه. در C این کار فضای ذخیره‌سازی متغیر را اعلان می‌کند، اما در ++C این یک خطا نیست چرا که متغیرهای const جایگزین \f(CW\*(C`#define\*(C'\fRها می‌شوند. .IP \fB\-Wunused\-const\-variable=2\fR 4 .IX Item "-Wunused-const-variable=2" این سطح هشدار همچنین برای متغیرهای ثابت ایستای استفاده‌نشده در هدرها (به‌جز هدرهای سیستمی) هشدار می‌دهد. این با فرم کوتاه \&\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=1\fR را به‌جای \&\fB\-Wunused\-const\-variable\fR فعال می‌کند، و آن هم فقط برای C، نه ++C. .IP "\fB\-Wuse\-after\-free\fR (تنها در C، Objective\-C، ++C و Objective\-C++)" 4 .IX Item "-Wuse-after-free (C, Objective-C, C++ and Objective-C++ only)" .PD 0 .IP \fB\-Wuse\-after\-free=\fR\fIn\fR 4 .IX Item "-Wuse-after-free=n" .PD دربارهٔ استفاده از اشاره‌گرها به اشیای پویای تخصیص‌یافته که در اثر فراخوانی یک تابع آزادسازی نامعین شده‌اند، هشدار می‌دهد. این هشدار در همهٔ سطوح بهینه‌سازی فعال است اما ممکن است با بهینه‌سازی، نتایجی متفاوت از بدون بهینه‌سازی تولید کند. .RS 4 .IP \fB\-Wuse\-after\-free=1\fR 4 .IX Item "-Wuse-after-free=1" در سطح ۱، این هشدار تلاش می‌کند فقط استفاده‌های نامشروط از اشاره‌گرهایی را تشخیص دهد که با یک فراخوانی آزادسازی یا یک فراخوانی موفق به \f(CW\*(C`realloc\*(C'\fR نامعین شده‌اند، صرف‌نظر از اینکه آیا آن فراخوانی منجر به بازتخصیص واقعی حافظه شده است یا خیر. این شامل فراخوانی‌های مضاعف \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)" هنگامی که یک عبارت به نوع خودش کست شود، هشدار می‌دهد. این هشدار زمانی رخ نمی‌دهد که یک شیءِ کلاس به یک نوع غیرمرجع تبدیل شود، زیرا این روشی برای ایجاد یک شیء موقت است: .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 این هشدارها هم برای عناصر منفردِ مقداردهی‌نشدهٔ متغیرهای ساختار، اجتماع (union) یا آرایه و هم برای متغیرهایی که در کل مقداردهی نشده‌اند رخ می‌دهند. آن‌ها برای متغیرها یا عناصری که به‌صورت \f(CW\*(C`volatile\*(C'\fR اعلان شده‌اند رخ نمی‌دهند. از آنجا که این هشدارها به بهینه‌سازی وابسته‌اند، متغیرها یا عناصر دقیقی که برای آن‌ها هشدار صادر می‌شود به گزینه‌های دقیق بهینه‌سازی و نسخهٔ GCC مورد استفاده بستگی دارند. .Sp توجه داشته باشید که ممکن است دربارهٔ متغیری که فقط برای محاسبه مقداری استفاده می‌شود که خود آن مقدار هرگز استفاده نمی‌شود هشداری داده نشود، زیرا چنین محاسباتی ممکن است پیش از چاپ هشدارها توسط تحلیل جریان داده حذف شوند. .Sp در ++C، این هشدار همچنین دربارهٔ استفاده از اشیای مقداردهی‌نشده در فهرست‌های مقداردهی اولیهٔ اعضا (member\-initializer\-lists) هشدار می‌دهد. برای نمونه، GCC دربارهٔ مقداردهی‌نشده بودن \f(CW\*(C`b\*(C'\fR در قطعه‌کد زیر هشدار می‌دهد: .Sp .Vb 5 \& struct A { \& int a; \& int b; \& A() : a(b) { } \& }; .Ve .IP \fB\-Wno\-invalid\-memory\-model\fR 4 .IX Item "-Wno-invalid-memory-model" این گزینه هشدارهای مربوط به فراخوانی‌های \fB_\|_atomic Builtins\fR، \fB_\|_sync Builtins\fR و توابع عمومی اتمیک C11 را با آرگومان سازگاری حافظه‌ای که یا برای عملیات نامعتبر است یا خارج از محدودهٔ مقادیر شمارشِ \f(CW\*(C`memory_order\*(C'\fR قرار دارد، کنترل می‌کند. برای نمونه، از آنجا که توابع توکار \&\f(CW\*(C`_\|_atomic_store\*(C'\fR و \f(CW\*(C`_\|_atomic_store_n\*(C'\fR تنها برای ترتیب‌های حافظهٔ relaxed، release و sequentially consistent تعریف شده‌اند، کد زیر تشخیص داده می‌شود: .Sp .Vb 4 \& void store (int *i) \& { \& _\|_atomic_store_n (i, 0, memory_order_consume); \& } .Ve .Sp گزینهٔ \&\fB\-Winvalid\-memory\-model\fR به‌طور پیش‌فرض فعال است..IP \fB\-Wmaybe\-uninitialized\fR 4 .IX Item "-Wmaybe-uninitialized" برای شیئی با طول عمر ذخیره‌سازی خودکار یا تخصیص‌یافته، اگر مسیری از ورود به تابع تا محل استفاده از شیء وجود داشته باشد که در آن مقداردهی اولیه شده است، اما مسیرهای دیگری وجود داشته باشند که در آن‌ها شیء مقداردهی اولیه نشده باشد، کامپایلر چنانچه نتواند اثبات کند که مسیرهای مقداردهی‌نشده در زمان اجرا اجرا نمی‌شوند، هشداری صادر می‌کند. .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 همیشه 1، 2 یا 3 باشد، آنگاه \f(CW\*(C`x\*(C'\fR همیشه مقداردهی اولیه می‌شود، اما GCC این موضوع را نمی‌داند. برای فرونشاندن این هشدار، باید یک حالت پیش‌فرض (\f(CWdefault\fR) همراه با \fBassert\fR\|(0) یا کدی مشابه قرار دهید. .Sp این گزینه همچنین زمانی که یک متغیر خودکارِ غیر فرّار (\f(CWnon\-volatile\fR) ممکن است با فراخوانی \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 در فایلی غیر از فایل سرآیند، مانند یک فایل منبع اصلی استفاده شود، هشدار نمی‌دهد. .IP \fB\-Wno\-prio\-ctor\-dtor\fR 4 .IX Item "-Wno-prio-ctor-dtor" اگر اولویتی بین 0 تا 100 برای سازنده یا نابودکننده استفاده شود، هشدار نمی‌دهد. استفاده از صفت‌های سازنده (constructor) و نابودکننده (destructor) به شما امکان می‌دهد تا اولویتی را تعیین کنید تا ترتیب اجرای آن‌ها قبل از فراخوانی \f(CW\*(C`main\*(C'\fR یا پس از بازگشت از آن کنترل شود. مقادیر اولویت باید بزرگ‌تر از 100 باشند زیرا کامپایلر مقادیر اولویت بین 0 تا 100 را برای پیاده‌سازی رزرو کرده است. .IP \fB\-Wstrict\-aliasing\fR 4 .IX Item "-Wstrict-aliasing" این گزینه تنها زمانی فعال است که \fB\-fstrict\-aliasing\fR فعال باشد. این گزینه در مورد کدی که ممکن است قواعد نام مستعار صریح (strict aliasing) را که کامپایلر برای بهینه‌سازی استفاده می‌کند نقض کند، هشدار می‌دهد. این هشدار همه موارد را پوشش نمی‌دهد، اما تلاش می‌کند تا تله‌های رایج‌تر را شناسایی کند. این گزینه در \fB\-Wall\fR گنجانده شده است. این گزینه معادل \fB\-Wstrict\-aliasing=3\fR است. .IP \fB\-Wstrict\-aliasing=n\fR 4 .IX Item "-Wstrict-aliasing=n" این گزینه تنها زمانی فعال است که \fB\-fstrict\-aliasing\fR فعال باشد. این گزینه در مورد کدی که ممکن است قواعد نام مستعار صریح را که کامپایلر برای بهینه‌سازی استفاده می‌کند نقض کند، هشدار می‌دهد. سطوح بالاتر نشان‌دهنده دقت بالاتر (موارد مثبت کاذب کمتر) هستند. سطوح بالاتر همچنین مستلزم پردازش بیشتری هستند، مشابه روشی که \fB\-O\fR کار می‌کند. \&\fB\-Wstrict\-aliasing\fR معادل \fB\-Wstrict\-aliasing=3\fR است. .Sp سطح 1: تهاجمی‌ترین، سریع، دارای کمترین دقت. احتمالاً زمانی مفید است که سطوح بالاتر هشدار نمی‌دهند اما \fB\-fstrict\-aliasing\fR همچنان کد را دچار اختلال می‌کند، زیرا موارد منفی کاذب بسیار کمی دارد. با این حال، موارد مثبت کاذب زیادی تولید می‌کند. برای تمام تبدیل‌های اشاره‌گر بین انواع احتمالاً ناسازگار، حتی اگر هرگز ارجاع‌زدایی نشوند، هشدار می‌دهد. تنها در فرانت‌اند (front end) اجرا می‌شود. .Sp سطح 2: تهاجمی، سریع، نه چندان دقیق. ممکن است همچنان موارد مثبت کاذب زیادی داشته باشد (البته نه به اندازه سطح 1)، و موارد منفی کاذب کمی دارد (اما احتمالاً بیشتر از سطح 1). برخلاف سطح 1، تنها زمانی هشدار می‌دهد که آدرس گرفته شده باشد. در مورد انواع ناقص (incomplete types) هشدار می‌دهد. تنها در فرانت‌اند اجرا می‌شود. .Sp سطح 3 (پیش‌فرض برای \fB\-Wstrict\-aliasing\fR): باید دارای موارد مثبت کاذب بسیار اندک و موارد منفی کاذب کمی باشد. در صورت فعال بودن بهینه‌سازی، اندکی کندتر از سطوح 1 یا 2 است. به الگوی رایج تغییر نوع اشاره‌گر و ارجاع‌زدایی در فرانت‌اند رسیدگی می‌کند: \&\f(CW\*(C`*(int*)&some_float\*(C'\fR. اگر بهینه‌سازی فعال باشد، در بک‌اند (back end) نیز اجرا می‌شود؛ جایی که با استفاده از اطلاعات حساس به جریان اشاره‌به (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 ساده می‌شود. این مورد تنها در بالاترین سطح هشدار گزارش می‌شود زیرا این ساده‌سازی بر روی مقایسه‌های متعددی اعمال می‌شود، در نتیجه این سطح هشدار تعداد بسیار زیادی مثبت کاذب ایجاد می‌کند. .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 برای کدهایی که می‌توان به صورت ایستا تشخیص داد باعث سرریز بافر یا دسترسی فراتر از حافظه مجاز (memory overrun) می‌شوند، مانند فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR و \&\f(CW\*(C`strcpy\*(C'\fR که از بافر مقصد سرریز می‌کنند، هشدار می‌دهد. آرگومان اختیاری، یک واحد بیشتر از نوع بررسی اندازه شیء (Object Size Checking) است که برای تعیین اندازه مقصد انجام می‌شود. این آرگومان تنها برای توابع رشته‌ای که روی آرایه‌های نویسه‌ای عمل می‌کنند معنی‌دار است؛ توابع حافظه خام مانند \f(CW\*(C`memcpy\*(C'\fR همیشه از Object Size Checking نوع صفر استفاده می‌کنند. .Sp این گزینه همچنین برای فراخوانی‌هایی که اندازه‌ای فراتر از بزرگ‌ترین شیء ممکن یا حداکثر \f(CW\*(C`SIZE_MAX / 2\*(C'\fR بایت را مشخص می‌کنند، هشدار می‌دهد. .Sp این گزینه در صورت فعال بودن بهینه‌سازی بهترین نتایج را ارائه می‌دهد، اما حتی بدون بهینه‌سازی نیز می‌تواند زیرمجموعه کوچکی از سرریزهای بافر ساده را در فراخوانی توابع داخلی (built\-in) کامپایلر 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 شامل \f(CW\*(C`NUL\*(C'\fR انتهایی) را در بافری به اندازه ۴ کپی می‌کند. .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 از Object Size Checking نوع صفر برای تعیین اندازه اشیاء مقصد استفاده می‌کند. در این تنظیم، این گزینه برای نوشتن فراتر از انتهای زیرشیء‌های اشیاء بزرگ‌تر که از طریق اشاره‌گرها قابل دسترسی هستند هشداری نمی‌دهد، مگر اینکه اندازه بزرگ‌ترین شیء احاطه‌کننده مشخص باشد. هنگامی که مقصد ممکن است یکی از چند شیء باشد، بزرگ‌ترین آن‌ها در نظر گرفته می‌شود. در سیستم‌های لینوکس، زمانی که بهینه‌سازی در این تنظیم فعال باشد، این گزینه برای همان کدهایی هشدار می‌دهد که ماکروی \f(CW\*(C`_FORTIFY_SOURCE\*(C'\fR روی یک مقدار غیر صفر تعریف شده باشد. .IP \fB\-Wstringop\-overflow=2\fR 4 .IX Item "-Wstringop-overflow=2" گزینه \fB\-Wstringop\-overflow=2\fR از Object Size Checking نوع یک برای تعیین اندازه اشیاء مقصد استفاده می‌کند. در این تنظیم، گزینه درباره سرریزها هنگام نوشتن در اعضای بزرگ‌ترین اشیاء کاملی که اندازه دقیق آن‌ها مشخص است هشدار می‌دهد. با این حال، برای نوشتن بیش از حد در اعضای مشابه از اشیاء ناشناخته که توسط اشاره‌گرها ارجاع داده شده‌اند هشدار نمی‌دهد، چرا که ممکن است به آرایه‌هایی با تعداد عناصر نامشخص اشاره کنند. این تنظیم پیش‌فرض گزینه است. .IP \fB\-Wstringop\-overflow=3\fR 4 .IX Item "-Wstringop-overflow=3" گزینه \fB\-Wstringop\-overflow=3\fR از Object Size Checking نوع دو برای تعیین اندازه اشیاء مقصد استفاده می‌کند. در این تنظیم، گزینه در مورد سرریز از کوچک‌ترین شیء یا عضو داده هشدار می‌دهد. این سخت‌گیرانه‌ترین تنظیم گزینه است که ممکن است منجر به صدور هشدار برای کدهای ایمن شود. .IP \fB\-Wstringop\-overflow=4\fR 4 .IX Item "-Wstringop-overflow=4" گزینه \fB\-Wstringop\-overflow=4\fR از Object Size Checking نوع سه برای تعیین اندازه اشیاء مقصد استفاده می‌کند. در این تنظیم، گزینه در مورد سرریز از هر عضو داده هشدار می‌دهد، و هنگامی که مقصد یکی از چند شیء باشد، از اندازه بزرگ‌ترین آن‌ها برای تصمیم‌گیری درباره صدور هشدار استفاده می‌کند. مشابه با \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 منجر به کپی شدن تنها نویسه‌های پیش از \f(CW\*(C`NUL\*(C'\fR انتهایی به \f(CW\*(C`d\*(C'\fR می‌شود، بدون آنکه \f(CW\*(C`NUL\*(C'\fR به انتها افزوده گردد. این فرض که نتیجه \f(CW\*(C`strncpy\*(C'\fR لزوماً یک رشته ختم‌شده به \f(CW\*(C`NUL\*(C'\fR است یک اشتباه رایج به شمار می‌رود، و بنابراین برای این فراخوانی هشدار داده می‌شود. برای اجتناب از این هشدار هنگامی که انتظار نمی‌رود نتیجه به \f(CW\*(C`NUL\*(C'\fR ختم شود، به جای آن \f(CW\*(C`memcpy\*(C'\fR را فراخوانی کنید. .Sp .Vb 4 \& void copy (char *d, const char *s) \& { \& strncpy (d, s, strlen (s)); \& } .Ve .Sp در مثال زیر، فراخوانی \f(CW\*(C`strncpy\*(C'\fR اندازه بافر مقصد را به عنوان حد مشخص می‌کند. اگر طول رشته مبدأ برابر یا بیشتر از این اندازه باشد، نتیجه کپی به \f(CW\*(C`NUL\*(C'\fR ختم نخواهد شد. از این رو، این فراخوانی نیز مشمول هشدار می‌شود. برای جلوگیری از این هشدار، \f(CW\*(C`sizeof buf \- 1\*(C'\fR را به عنوان حد تعیین کرده و آخرین عنصر بافر را روی \f(CW\*(C`NUL\*(C'\fR تنظیم کنید. .Sp .Vb 6 \& void copy (const char *s) \& { \& char buf[80]; \& strncpy (buf, s, sizeof buf); \& ... \& } .Ve .Sp در مواردی که یک آرایه نویسه‌ای به منظور ذخیره دنباله‌ای از بایت‌ها بدون \f(CW\*(C`NUL\*(C'\fR انتهایی در نظر گرفته شده باشد، می‌توان چنین آرایه‌ای را با صفت \f(CW\*(C`nonstring\*(C'\fR نشانه‌گذاری کرد تا از این هشدار جلوگیری شود. با این حال، چنین آرایه‌هایی آرگومان‌های مناسبی برای توابعی که انتظار رشته‌های ختم‌شده به \&\f(CW\*(C`NUL\*(C'\fR را دارند نیستند. برای کمک به شناسایی سوءاستفاده‌های تصادفی از این آرایه‌ها، GCC هشدار صادر می‌کند مگر اینکه بتواند اثبات کند که استفاده ایمن است. .IP "\fB\-Wstrict\-flex\-arrays\fR (تنها C و C++)" 4 .IX Item "-Wstrict-flex-arrays (C and C++ only)" درباره استفاده‌های نادرست از اعضای آرایه انعطاف‌پذیر (flexible array members) بر اساس مقدار \fIlevel\fR صفت \f(CW\*(C`strict_flex_array (\fR\f(CIlevel\fR\f(CW)\*(C'\fR ضمیمه‌شده به فیلد آرایه پایانی ساختار در صورت وجود، و در غیر این صورت بر اساس مقدار \fIlevel\fR گزینه \&\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR هشدار می‌دهد. گزینه \f(CW\*(C`\-Wstrict\-flex\-arrays\*(C'\fR تنها زمانی مؤثر است که مقدار \fIlevel\fR بزرگ‌تر از 0 باشد. .Sp هنگامی که \fIlevel\fR=1 باشد، در صورتی که به آرایه پایانی ساختاری با ۲ یا چند عنصر به عنوان یک عضو آرایه انعطاف‌پذیر ارجاع داده شود، هشدار صادر می‌شود. .Sp هنگامی که \fIlevel\fR=2 باشد، افزون بر موارد \fIlevel\fR=1، در صورتی که به آرایه پایانی تک‌عنصری یک ساختار به عنوان یک عضو آرایه انعطاف‌پذیر ارجاع داده شود، هشدارهای بیشتری صادر خواهد شد. .Sp هنگامی که \fIlevel\fR=3 باشد، افزون بر موارد \fIlevel\fR=2، در صورتی که به آرایه پایانی با طول صفر یک ساختار به عنوان یک عضو آرایه انعطاف‌پذیر ارجاع داده شود، هشدارهای بیشتری صادر خواهد شد. .Sp این گزینه هنگامی که \fB\-ftree\-vrp\fR فعال باشد مؤثرتر است (که حالت پیش‌فرض برای \fB\-O2\fR و بالاتر است)، اما برخی هشدارها ممکن است حتی بدون بهینه‌سازی نیز تشخیص داده شوند. .IP \fB\-Wsuggest\-attribute=\fR\fIattribute\-name\fR 4 .IX Item "-Wsuggest-attribute=attribute-name" برای مواردی که افزودن یک صفت (attribute) ممکن است سودمند باشد هشدار می‌دهد. مقادیر \&\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 باشند، هشدار می‌دهد. کامپایلر تنها برای توابعی که در سایر واحدهای ترجمه (compilation units) قابل مشاهده هستند یا (در مورد \&\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 که در انتساب، مقداردهی اولیه، ارسال پارامتر یا دستورهای بازگشت (return) استفاده می‌شوند، باید صفت \f(CW\*(C`format\*(C'\fR متناظری در نوع نهایی داشته باشند. یعنی به ترتیب سمت چپ انتساب یا مقداردهی اولیه، نوع متغیر پارامتر، یا نوع بازگشتی تابع دربرگیرنده نیز باید دارای صفت \f(CW\*(C`format\*(C'\fR باشند تا از هشدار جلوگیری شود. .Sp کامپایلر GCC همچنین درباره تعریف توابعی که ممکن است کاندیدای صفت‌های \f(CW\*(C`format\*(C'\fR باشند هشدار می‌دهد. مجدداً، این‌ها تنها کاندیداهای احتمالی هستند. GCC حدس می‌زند که صفت‌های \f(CW\*(C`format\*(C'\fR ممکن است برای هر تابعی که تابعی مانند \&\f(CW\*(C`vprintf\*(C'\fR یا \f(CW\*(C`vscanf\*(C'\fR را فراخوانی می‌کند مناسب باشد، اما ممکن است همیشه این‌گونه نباشد، و برخی از توابعی که صفت‌های \f(CW\*(C`format\*(C'\fR برای آن‌ها مناسب است ممکن است شناسایی نشوند. .IP \fB\-Wsuggest\-attribute=cold\fR 4 .IX Item "-Wsuggest-attribute=cold" درباره توابعی که ممکن است کاندیدای صفت \f(CW\*(C`cold\*(C'\fR باشند هشدار می‌دهد. این هشدار بر پایهٔ تشخیص ایستا است و عموماً تنها برای توابعی صادر می‌شود که همواره منجر به فراخوانی یک تابع \f(CW\*(C`cold\*(C'\fR دیگر می‌شوند؛ مانند پوشش‌دهنده‌های (wrappers) دستور \f(CW\*(C`throw\*(C'\fR در ++C یا توابع گزارش خطای مهلک که به \f(CW\*(C`abort\*(C'\fR ختم می‌شوند. .RE .RS 4 .RE .IP \fB\-Walloc\-size\fR 4 .IX Item "-Walloc-size" درباره فراخوانی‌های توابع تخصیص حافظه دارای صفت \&\f(CW\*(C`alloc_size\*(C'\fR که اندازهٔ ناکافی برای نوع هدفِ اشاره‌گری که نتیجه به آن منتسب می‌شود مشخص می‌کنند، هشدار می‌دهد؛ از جمله شکل‌های درون‌ساخت (built\-in) توابع \f(CW\*(C`aligned_alloc\*(C'\fR، \f(CW\*(C`alloca\*(C'\fR، \&\f(CW\*(C`calloc\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR و \f(CW\*(C`realloc\*(C'\fR. .IP \fB\-Walloc\-zero\fR 4 .IX Item "-Walloc-zero" درباره فراخوانی‌های توابع تخصیص حافظه دارای صفت \&\f(CW\*(C`alloc_size\*(C'\fR که اندازهٔ صفر بایت مشخص می‌کنند، هشدار می‌دهد؛ از جمله شکل‌های درون‌ساخت توابع \f(CW\*(C`aligned_alloc\*(C'\fR، \f(CW\*(C`alloca\*(C'\fR، \f(CW\*(C`calloc\*(C'\fR، \&\f(CW\*(C`malloc\*(C'\fR و \f(CW\*(C`realloc\*(C'\fR. از آنجا که رفتار این توابع هنگام فراخوانی با اندازهٔ صفر در میان پیاده‌سازی‌های مختلف متفاوت است (و در مورد \&\f(CW\*(C`realloc\*(C'\fR منسوخ شده است)، اتکا به آن ممکن است منجر به باگ‌های نامحسوس در قابلیت حمل شود و باید از آن اجتناب گردد. .IP \fB\-Wcalloc\-transposed\-args\fR 4 .IX Item "-Wcalloc-transposed-args" درباره فراخوانی‌های توابع تخصیص حافظه دارای صفت \&\f(CW\*(C`alloc_size\*(C'\fR با دو آرگومان هشدار می‌دهد، که از عملگر \f(CW\*(C`sizeof\*(C'\fR به عنوان آرگومان اندازهٔ اول استفاده کرده و در آرگومان اندازهٔ دوم از آن استفاده نکرده‌اند. این یک هشدار مربوط به سبک کدنویسی است. آرگومان اول \f(CW\*(C`calloc\*(C'\fR بر اساس مستندات، تعداد عناصر آرایه است، در حالی که آرگومان دوم اندازهٔ هر عنصر است؛ بنابراین \f(CW\*(C`calloc (\fR\f(CIn\fR\f(CW, sizeof (int))\*(C'\fR بر \&\f(CW\*(C`calloc (sizeof (int), \fR\f(CIn\fR\f(CW)\*(C'\fR ارجحیت دارد. اگر قرار دادن \f(CW\*(C`sizeof\*(C'\fR در آرگومان اول و عدم استفاده در آرگومان دوم عمدی باشد، می‌توان هشدار را با استفاده از \f(CW\*(C`calloc (sizeof (struct \fR\f(CIS\fR\f(CW) + 0, n)\*(C'\fR یا \&\f(CW\*(C`calloc (1 * sizeof (struct \fR\f(CIS\fR\f(CW), 4)\*(C'\fR یا با استفاده از \f(CW\*(C`sizeof\*(C'\fR در آرگومان دوم نیز فرو نشاند. .IP \fB\-Walloc\-size\-larger\-than=\fR\fIbyte\-size\fR 4 .IX Item "-Walloc-size-larger-than=byte-size" درباره فراخوانی‌های توابع دارای صفت \f(CW\*(C`alloc_size\*(C'\fR که تلاش می‌کنند اشیایی بزرگ‌تر از تعداد بایت‌های مشخص‌شده تخصیص دهند، یا جایی که نتیجهٔ محاسبهٔ اندازه در یک نوع عدد صحیح با دقت نامحدود از مقدار \fBPTRDIFF_MAX\fR در معماری مقصد فراتر می‌رود، هشدار می‌دهد. گزینهٔ \fB\-Walloc\-size\-larger\-than=\fR\fBPTRDIFF_MAX\fR به‌طور پیش‌فرض فعال است. هشدارهای کنترل‌شده توسط این گزینه را می‌توان با تعیین \fIbyte\-size\fR برابر با \&\fBSIZE_MAX\fR یا بیشتر، یا از طریق \&\fB\-Wno\-alloc\-size\-larger\-than\fR غیرفعال کرد. .IP \fB\-Wno\-alloc\-size\-larger\-than\fR 4 .IX Item "-Wno-alloc-size-larger-than" هشدارهای \fB\-Walloc\-size\-larger\-than=\fR را غیرفعال می‌کند. این گزینه معادل \fB\-Walloc\-size\-larger\-than=\fR\fBSIZE_MAX\fR یا بزرگ‌تر از آن است. .IP \fB\-Walloca\fR 4 .IX Item "-Walloca" این گزینه درباره تمام موارد استفاده از \f(CW\*(C`alloca\*(C'\fR در سورس‌کد هشدار می‌دهد. .IP \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR 4 .IX Item "-Walloca-larger-than=byte-size" این گزینه درباره فراخوانی‌های \f(CW\*(C`alloca\*(C'\fR با آرگومان عدد صحیحی هشدار می‌دهد که مقدار آن یا صفر است، یا توسط یک گزارهٔ کنترلی (controlling predicate) که مقدار آن را حداکثر به \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 به‌طور پیش‌فرض، آرایهٔ پایانی یک ساختار توسط \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 هشدارهایی را برای ناسازگاری‌های مشابه شامل آرگومان‌های آرایه با طول متغیر (Variable Length Array) فعال می‌کند. .Sp شکل کوتاه گزینه \fB\-Warray\-parameter\fR معادل با \&\fB\-Warray\-parameter=2\fR است. شکل منفی \fB\-Wno\-array\-parameter\fR معادل با \fB\-Warray\-parameter=0\fR می‌باشد. .IP \fB\-Wattribute\-alias=\fR\fIn\fR 4 .IX Item "-Wattribute-alias=n" .PD 0 .IP \fB\-Wno\-attribute\-alias\fR 4 .IX Item "-Wno-attribute-alias" .PD درباره اعلان‌هایی که از صفت \f(CW\*(C`alias\*(C'\fR و صفت‌های مشابه استفاده می‌کنند و هدف آن‌ها با نوع نام مستعار ناسازگار است هشدار می‌دهد. .RS 4 .IP \fB\-Wattribute\-alias=1\fR 4 .IX Item "-Wattribute-alias=1" سطح پیش‌فرض هشدار گزینه \fB\-Wattribute\-alias\fR ناسازگاری‌های میان نوع اعلان نام مستعار و نوع هدف آن را تشخیص می‌دهد. چنین ناسازگاری‌هایی معمولاً بیانگر باگ هستند. .IP \fB\-Wattribute\-alias=2\fR 4 .IX Item "-Wattribute-alias=2" در این سطح، \fB\-Wattribute\-alias\fR مواردی را نیز تشخیص می‌دهد که در آن‌ها صفت‌های اعلان نام مستعار محدودکننده‌تر از صفت‌های اعمال‌شده به هدف آن باشند. این عدم تطابق‌ها می‌توانند به‌طور بالقوه منجر به تولید کد نادرست شوند. در موارد دیگر ممکن است بی‌خطر باشند و صرفاً با افزودن صفت جاافتاده به هدف برطرف شوند. برای مقایسه، گزینه \fB\-Wmissing\-attributes\fR را ببینید که تشخیص‌ها را هنگامی کنترل می‌کند که اعلان نام مستعار محدودکنندگی کمتری نسبت به هدف داشته باشد، نه محدودکنندگی بیشتر. .Sp صفت‌های در نظر گرفته‌شده شامل \f(CW\*(C`alloc_align\*(C'\fR، \f(CW\*(C`alloc_size\*(C'\fR، \&\f(CW\*(C`cold\*(C'\fR، \f(CW\*(C`const\*(C'\fR، \f(CW\*(C`hot\*(C'\fR، \f(CW\*(C`leaf\*(C'\fR، \f(CW\*(C`malloc\*(C'\fR، \&\f(CW\*(C`nonnull\*(C'\fR، \f(CW\*(C`noreturn\*(C'\fR، \f(CW\*(C`nothrow\*(C'\fR، \f(CW\*(C`pure\*(C'\fR، \&\f(CW\*(C`returns_nonnull\*(C'\fR و \f(CW\*(C`returns_twice\*(C'\fR هستند. .RE .RS 4 .Sp گزینه \&\fB\-Wattribute\-alias\fR معادل با \fB\-Wattribute\-alias=1\fR است. این حالت پیش‌فرض است. می‌توانید این هشدارها را با \fB\-Wno\-attribute\-alias\fR یا \fB\-Wattribute\-alias=0\fR غیرفعال کنید. .RE .IP \fB\-Wbidi\-chars=\fR[\fBnone\fR|\fBunpaired\fR|\fBany\fR|\fBucn\fR] 4 .IX Item "-Wbidi-chars=[none|unpaired|any|ucn]" درباره نویسه‌های کنترلی دوجهته UTF\-8 احتمالاً گمراه‌کننده در کامنت‌ها، رشته‌های لیترال، ثابت‌های نویسه‌ای و شناسه‌ها هشدار می‌دهد. این نویسه‌ها می‌توانند جهت نوشتن را از چپ‌به‌راست به راست‌به‌چپ (و برعکس) تغییر دهند، که می‌تواند سبب سردرگمی میان ترتیب منطقی و بصری شود. این موضوع ممکن است خطرناک باشد؛ برای مثال، ممکن است به نظر برسد که بخشی از کد کامنت نشده است، در حالی که در واقع کامنت شده است. .Sp سه سطح هشدار توسط GCC پشتیبانی می‌شود. حالت پیش‌فرض \&\fB\-Wbidi\-chars=unpaired\fR است که درباره بافت‌های دوجهته که به‌درستی پایان نیافته‌اند هشدار می‌دهد. \&\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 زمانی که هر دو شاخه تنها شامل یک دستور تهی باشند هشدار نمی‌دهد. این هشدار همچنین برای عملگرهای شرطی هشدار می‌دهد: .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)" اگر توصیف‌کننده‌های نوع (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" در مورد تقسیم عدد صحیح بر صفر در زمان کامپایل هشدار نمی‌دهد. دربارهٔ تقسیم ممیز شناور بر صفر هشداری داده نمی‌شود، چرا که می‌تواند روشی معتبر برای به‌دست آوردن بی‌نهایت‌ها (infinities) و NaNها باشد. .IP \fB\-Wsystem\-headers\fR 4 .IX Item "-Wsystem-headers" پیام‌های هشدار را برای ساختارهایی که در فایل‌های سرایند سیستم (system headers) یافت می‌شوند چاپ می‌کند. هشدارهای سرایندهای سیستم معمولاً با این فرض که اغلب نشان‌دهندهٔ مشکلات واقعی نیستند و تنها خروجی کامپایلر را ناخواناتر می‌کنند، نادیده گرفته می‌شوند. استفاده از این گزینهٔ خط فرمان به GCC می‌گوید که هشدارهای سرایندهای سیستم را طوری صادر کند که گویی در کد کاربر رخ داده‌اند. با این حال، توجه داشته باشید که استفاده از \fB\-Wall\fR همراه با این گزینه در مورد پراگماهای ناشناخته در سرایندهای سیستم هشدار \fIنمی‌دهد\fR\-\-\-برای آن، باید از \fB\-Wunknown\-pragmas\fR نیز استفاده شود. .IP \fB\-Wtautological\-compare\fR 4 .IX Item "-Wtautological-compare" اگر یک مقایسه با خود همواره به درست (true) یا نادرست (false) ارزیابی شود، هشدار می‌دهد. این هشدار اشتباهات گوناگونی را تشخیص می‌دهد، مانند: .Sp .Vb 3 \& int i = 1; \& ... \& if (i > i) { ... } .Ve .Sp این هشدار همچنین درباره مقایسه‌های بیتی که همواره به درست یا نادرست ارزیابی می‌شوند هشدار می‌دهد، به عنوان مثال: .Sp .Vb 1 \& if ((a & 16) == 10) { ... } .Ve .Sp همواره نادرست (false) خواهد بود. .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 در مورد نویسه‌های فاصلهٔ خالی پایانی (trailing whitespace) در انتهای خطوط، از جمله در داخل توضیحات، اما به استثنای فاصله‌های پایانی در لیترال‌های رشته‌ای خام (raw string literals)، هشدار می‌دهد. \&\f(CW\*(C`\-Wtrailing\-whitespace\*(C'\fR معادل \&\f(CW\*(C`\-Wtrailing\-whitespace=blanks\*(C'\fR است و فقط در مورد نویسه‌های فاصله (space) و تب افقی پایانی هشدار می‌دهد. \&\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" در مورد مسائل سبک کدنویسی در فاصله‌های خالی ابتدایی (leading whitespace) هشدار می‌دهد، اما نه دربارهٔ مقدار تورفتگی (indentation). برخی پروژه‌ها از سبک‌های کدنویسی استفاده می‌کنند که در آن‌ها فقط از فاصله‌ها برای تورفتگی استفاده می‌شود، برخی دیگر فقط از تب‌ها، و برخی دیگر از صفر یا چند تب (برای مضارب \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 در مورد فاصله‌های خالی ابتدایی غیر از فاصله (space) برای پروژه‌هایی که می‌خواهند تورفتگی را فقط با فاصله انجام دهند، هشدار می‌دهد. \&\f(CW\*(C`\-Wleading\-whitespace=tabs\*(C'\fR در مورد فاصله‌های خالی ابتدایی غیر از تب افقی برای پروژه‌هایی که می‌خواهند تورفتگی را فقط با تب افقی انجام دهند، هشدار می‌دهد. \&\f(CW\*(C`\-Wleading\-whitespace=blanks\*(C'\fR در مورد فاصله‌های خالی ابتدایی غیر از فاصله و تب افقی، یا در مورد تب افقی بعد از یک فاصله در ابتدای خط، یا دربارهٔ \fIn\fR یا بیشتر فاصلهٔ متوالی در فاصله‌های خالی ابتدایی هشدار می‌دهد (که در آن \fIn\fR آرگومان \f(CW\*(C`\-ftabstop=\fR\f(CIn\fR\f(CW\*(C'\fR است و به‌طور پیش‌فرض برابر ۸ می‌باشد). \&\f(CW\*(C`\-Wleading\-whitespace=none\*(C'\fR هشدار را غیرفعال می‌کند که حالت پیش‌فرض است. این یک هشدار مربوط به سبک کدنویسی است. .IP \fB\-Wtrampolines\fR 4 .IX Item "-Wtrampolines" دربارهٔ ترامپولین‌های (trampolines) تولیدشده برای اشاره‌گرها به توابع تو در تو (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 سنتی (traditional C) و استاندارد ISO C رفتار متفاوتی دارند، هشدار می‌دهد. همچنین در مورد ساختارهای ISO C که در C سنتی معادلی ندارند و/یا ساختارهای مسئله‌سازی که باید از آن‌ها اجتناب شود، هشدار می‌دهد. .RS 4 .IP * 4 پارامترهای ماکرو که درون لیترال‌های رشته‌ای در بدنهٔ ماکرو ظاهر می‌شوند. در C سنتی جایگزینی ماکرو درون لیترال‌های رشته‌ای صورت می‌گیرد، اما در ISO C چنین نیست. .IP * 4 در C سنتی، برخی دستورات پیش‌پردازنده وجود نداشتند. پیش‌پردازنده‌های سنتی تنها خطی را یک دستور (directive) در نظر می‌گرفتند که \fB#\fR در ستون ۱ خط ظاهر می‌شد. بنابراین \&\fB\-Wtraditional\fR در مورد دستوراتی هشدار می‌دهد که C سنتی آن‌ها را درک می‌کند اما چون \fB#\fR به عنوان اولین نویسه در خط ظاهر نشده است نادیده‌شان می‌گیرد. همچنین پیشنهاد می‌کند که دستوراتی مانند \&\f(CW\*(C`#pragma\*(C'\fR را که برای C سنتی قابل درک نیستند با اعمال تورفتگی پنهان کنید. برخی پیاده‌سازی‌های سنتی \f(CW\*(C`#elif\*(C'\fR را نمی‌شناسند، بنابراین این گزینه پیشنهاد می‌کند که به‌طور کامل از آن دوری شود. .IP * 4 یک ماکروی تابع‌گونه (function\-like) که بدون آرگومان ظاهر شود. .IP * 4 عملگر یکانی جمع (\fB+\fR). .IP * 4 پسوند ثابت عدد صحیح \fBU\fR، یا پسوندهای ثابت ممیز شناور \fBF\fR یا \fBL\fR. (C سنتی از پسوند \fBL\fR در ثابت‌های عدد صحیح پشتیبانی می‌کند.) توجه داشته باشید که این پسوندها در ماکروهای تعریف‌شده در سرایندهای سیستم اغلب سیستم‌های مدرن ظاهر می‌شوند، مانند ماکروهای \fB_MIN\fR/\fB_MAX\fR در \f(CW\*(C`\*(C'\fR. استفاده از این ماکروها در کد کاربر معمولاً ممکن است به هشدارهای کاذب منجر شود، اما پیش‌پردازندهٔ یکپارچهٔ GCC زمینهٔ کافی را برای جلوگیری از هشدار در این موارد در اختیار دارد. .IP * 4 تابعی که در یک بلوک به صورت external اعلان شده و سپس پس از پایان آن بلوک استفاده شود..IP * 4 یک عبارت \f(CW\*(C`switch\*(C'\fR عملوندی از نوع \f(CW\*(C`long\*(C'\fR دارد. .IP * 4 یک اعلان تابع غیر\-\f(CW\*(C`static\*(C'\fR پس از یک اعلان \f(CW\*(C`static\*(C'\fR قرار گرفته است. این ساختار توسط برخی از کامپایلرهای C سنتی پذیرفته نمی‌شود. .IP * 4 نوع ISO یک مقدار ثابت عدد صحیح، پهنا یا علامت‌داری متفاوتی نسبت به نوع سنتی آن دارد. این هشدار تنها در صورتی صادر می‌شود که مبنای مقدار ثابت، ۱۰ باشد؛ یعنی درباره مقادیر هگزادسیمال یا اکتال که معمولاً الگوهای بیتی را نشان می‌دهند، هشداری داده نمی‌شود. .IP * 4 استفاده از الحاق رشته‌ای در ISO تشخیص داده شود. .IP * 4 مقداردهی اولیه داده‌های ترکیبی خودکار (automatic aggregates). .IP * 4 شناسه با برچسب‌ها (labels) تداخل دارد. C سنتی فاقد یک فضای نام مجزا برای برچسب‌ها است. .IP * 4 مقداردهی اولیه اجتماع‌ها (unions). اگر مقداردهنده اولیه صفر باشد، از هشدار صرف‌نظر می‌شود. این کار با این فرض انجام می‌شود که مقداردهنده اولیه صفر در کد کاربر به مواردی مانند \f(CW\*(C`_\|_STDC_\|_\*(C'\fR مشروط شده است تا از هشدارهای مقداردهنده اولیه مفقود جلوگیری شود و در حالت C سنتی، به مقداردهی پیش‌فرض به صفر متکی است. .IP * 4 تبدیل‌ها توسط پیش‌نمونه‌ها (prototypes) میان مقادیر ممیز ثابت/ممیز شناور و برعکس. عدم وجود این پروتوتایپ‌ها هنگام کامپایل با C سنتی مشکلات جدی ایجاد می‌کند. این زیرمجموعه‌ای از هشدارهای تبدیل ممکن است؛ برای مجموعه کامل از \fB\-Wtraditional\-conversion\fR استفاده کنید. .IP * 4 استفاده از تعاریف توابع به سبک ISO C. این هشدار عمداً برای اعلان‌های پروتوتایپ یا توابع با تعداد آرگومان متغیر (variadic) صادر \fIنمی‌شود\fR، چرا که این ویژگی‌های ISO C هنگام استفاده از ماکروهای سازگاری C سنتی libiberty یعنی \f(CW\*(C`PARAMS\*(C'\fR و \&\f(CW\*(C`VPARAMS\*(C'\fR در کد شما ظاهر می‌شوند. همچنین این هشدار برای توابع تو در تو (nested functions) نادیده گرفته می‌شود، زیرا این ویژگی خود یک افزونه GCC است و بنابراین ربطی به سازگاری با C سنتی ندارد. .RE .RS 4 .RE .IP "\fB\-Wtraditional\-conversion\fR (تنها C و Objective\-C)" 4 .IX Item "-Wtraditional-conversion (C and Objective-C only)" هشدار می‌دهد اگر یک پروتوتایپ باعث تبدیل نوعی شود که با آنچه در نبود پروتوتایپ برای همان آرگومان رخ می‌داد متفاوت باشد. این شامل تبدیل ممیز ثابت به شناور و برعکس، و تبدیل‌هایی است که پهنا یا علامت‌داری یک آرگومان ممیز ثابت را تغییر می‌دهند، مگر زمانی که با ارتقای پیش‌فرض (default promotion) یکسان باشد. .IP "\fB\-Wdeclaration\-after\-statement\fR (تنها C و Objective\-C)" 4 .IX Item "-Wdeclaration-after-statement (C and Objective-C only)" هنگامی که اعلانی پس از یک دستور در یک بلوک یافت شود، هشدار می‌دهد. این ساختار که از C++ شناخته شده است، با ISO C99 معرفی شد و به‌طور پیش‌فرض در GCC مجاز است. این ساختار توسط ISO C90 پشتیبانی نمی‌شود. .Sp این هشدار توسط \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wshadow\fR 4 .IX Item "-Wshadow" هرگاه یک متغیر محلی یا اعلان نوع، متغیر، پارامتر، نوع، عضو کلاس (در C++) یا متغیر نمونه (در Objective\-C) دیگری را بپوشاند (shadow کند)، یا هرگاه یک تابع توکار (built\-in) سایه‌اندازی شود، هشدار می‌دهد. توجه داشته باشید که در C++، اگر یک متغیر محلی یک typedef صریح را بپوشاند، کامپایلر هشدار می‌دهد، اما اگر یک struct/class/enum را بپوشاند هشداری نمی‌دهد. اگر این هشدار فعال باشد، شامل تمام موارد سایه‌اندازی محلی نیز می‌شود. این بدان معناست که در صورت استفاده از \&\fB\-Wshadow\fR، گزینه‌های \fB\-Wno\-shadow=local\fR و \fB\-Wno\-shadow=compatible\-local\fR نادیده گرفته می‌شوند. مشابه \fB\-Wshadow=global\fR. .IP "\fB\-Wno\-shadow\-ivar\fR (تنها Objective\-C)" 4 .IX Item "-Wno-shadow-ivar (Objective-C only)" هرگاه یک متغیر محلی، متغیر نمونه‌ای را در یک متد Objective\-C بپوشاند، هشدار ندهد. .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 همچنین برای فراخوانی توابع محدودشده‌ای (bounded functions) مانند \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" اگر اندازه فریم تابع از \fIbyte\-size\fR فراتر رود، هشدار می‌دهد. محاسبات انجام‌شده برای تعیین اندازه فریم پشته تقریبی بوده و محافظه‌کارانه نیست. نیازهای واقعی ممکن است تا حدی بیشتر از \fIbyte\-size\fR باشد، حتی اگر هشداری دریافت نکنید. علاوه بر این، هرگونه فضای تخصیص‌یافته از طریق \f(CW\*(C`alloca\*(C'\fR، آرایه‌های با طول متغیر (variable\-length arrays)، یا ساختارهای مرتبط، در زمان تصمیم‌گیری کامپایلر برای صدور یا عدم صدور هشدار محاسبه نمی‌شود. \&\fB\-Wframe\-larger\-than=\fR\fBPTRDIFF_MAX\fR به‌طور پیش‌فرض فعال است. هشدارهای کنترل‌شده توسط این گزینه را می‌توان با مشخص کردن \fIbyte\-size\fR برابر با \fBSIZE_MAX\fR یا بیشتر، یا توسط \&\fB\-Wno\-frame\-larger\-than\fR غیرفعال کرد. .IP \fB\-Wno\-frame\-larger\-than\fR 4 .IX Item "-Wno-frame-larger-than" هشدارهای \fB\-Wframe\-larger\-than=\fR را غیرفعال می‌کند. این گزینه معادل \fB\-Wframe\-larger\-than=\fR\fBSIZE_MAX\fR یا بزرگ‌تر است. .IP \fB\-Wfree\-nonheap\-object\fR 4 .IX Item "-Wfree-nonheap-object" هنگام اقدام به آزادسازی شیئی که در هیپ (heap) تخصیص نیافته است، یا با استفاده از اشاره‌گری که از یک فراخوانی قبلی به تابع تخصیص متناظر بازگردانده نشده است، هشدار می‌دهد. به عنوان مثال، از آنجا که فراخوانی \f(CW\*(C`stpcpy\*(C'\fR اشاره‌گری به نویسه نال پایانی بازمی‌گرداند و نه به ابتدای شیء، فراخوانی \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" اگر مصرف پشته (stack usage) یک تابع ممکن است از \fIbyte\-size\fR تجاوز کند، هشدار می‌دهد. محاسبات انجام‌شده برای تعیین مصرف پشته، محافظه‌کارانه است. هرگونه فضای تخصیص‌یافته از طریق \f(CW\*(C`alloca\*(C'\fR، آرایه‌های با طول متغیر، یا ساختارهای مرتبط، هنگام بررسی کامپایلر برای صدور یا عدم صدور هشدار محاسبه می‌شود. .Sp پیام هشدار با خروجی \fB\-fstack\-usage\fR هماهنگ است. .RS 4 .IP * 4 اگر مصرف پشته کاملاً ایستا باشد اما از مقدار مشخص‌شده تجاوز کند: .Sp .Vb 1 \& warning: stack usage is 1120 bytes .Ve .IP * 4 اگر مصرف پشته (تا حدی) پویا اما محدود باشد: .Sp .Vb 1 \& warning: stack usage might be 1648 bytes .Ve .IP * 4 اگر مصرف پشته (تا حدی) پویا و نامحدود باشد: .Sp .Vb 1 \& warning: stack usage might be unbounded .Ve .RE .RS 4 .Sp \&\fB\-Wstack\-usage=\fR\fBPTRDIFF_MAX\fR به‌طور پیش‌فرض فعال است. هشدارهای کنترل‌شده توسط این گزینه را می‌توان با تعیین \fIbyte\-size\fR برابر با \fBSIZE_MAX\fR یا بیشتر، یا توسط \&\fB\-Wno\-stack\-usage\fR غیرفعال کرد. .RE .IP \fB\-Wno\-stack\-usage\fR 4 .IX Item "-Wno-stack-usage" هشدارهای \fB\-Wstack\-usage=\fR را غیرفعال می‌کند. این گزینه معادل \fB\-Wstack\-usage=\fR\fBSIZE_MAX\fR یا بزرگ‌تر است. .IP \fB\-Wunsafe\-loop\-optimizations\fR 4 .IX Item "-Wunsafe-loop-optimizations" اگر بهینه‌سازی حلقه به این دلیل که کامپایلر نمی‌تواند فرضی درباره کران‌های اندیس‌های حلقه در نظر بگیرد ممکن نباشد، هشدار می‌دهد. با \&\fB\-funsafe\-loop\-optimizations\fR، اگر کامپایلر چنین فرضیاتی را لحاظ کند، هشدار می‌دهد..IP "\fB\-Wno\-pedantic\-ms\-format\fR (تنها در مقصدهای MinGW)" 4 .IX Item "-Wno-pedantic-ms-format (MinGW targets only)" هنگامی که در ترکیب با \fB\-Wformat\fR و \fB\-pedantic\fR بدون افزونه‌های GNU استفاده شود، این گزینه هشدارهای مربوط به مشخص‌کننده‌های عرض قالب غیراستاندارد 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" درباره هر چیزی که به «اندازه» یک نوع تابع یا \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 پشتیبانی نمی‌کند و می‌تواند نتایج مثبت کاذب گزارش کند. .IP \fB\-Wtype\-limits\fR 4 .IX Item "-Wtype-limits" اگر یک مقایسه به دلیل بازه محدود نوع داده، همیشه درست یا همیشه نادرست باشد، هشدار می‌دهد، اما برای عبارت‌های ثابت هشدار نمی‌دهد. برای نمونه، اگر یک متغیر بدون‌علامت با \&\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 است. این گزینه همچنین زمانی که آرگومان در فراخوانی چنین تابعی دارای یک نوع بدون‌علامت باشد، هشدار می‌دهد. این هشدار را می‌توان با تبدیل نوع صریح (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 ظاهر شود، یا هرگاه یک بک‌اسلش\-خط‌جدید در یک توضیح \fB//\fR ظاهر شود، هشدار می‌دهد. این هشدار با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wtrigraphs\fR 4 .IX Item "-Wtrigraphs" اگر سه‌نگاره‌هایی (trigraphs) دیده شوند که ممکن است معنای برنامه را تغییر دهند، هشدار می‌دهد. برای سه‌نگاره‌های درون توضیحات هشداری داده نمی‌شود، به جز آن‌هایی که یک خط‌جدید گریز داده‌شده تشکیل می‌دهند. .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 بسط داده می‌شود)، هشدار می‌دهد. چنین کاربردی قابل‌حمل نیست. این هشدار با \fB\-Wpedantic\fR و \fB\-Wextra\fR نیز فعال می‌شود. .IP \fB\-Wunused\-macros\fR 4 .IX Item "-Wunused-macros" درباره ماکروهای تعریف‌شده در فایل اصلی که استفاده نشده‌اند، هشدار می‌دهد. یک ماکرو در صورتی \fIاستفاده‌شده\fR تلقی می‌شود که حداقل یک بار بسط داده شود یا وجود آن بررسی شود. همچنین پیش‌پردازنده در صورتی که ماکرو در زمان بازتعریف یا لغو تعریف استفاده نشده باشد، هشدار می‌دهد. .Sp درباره ماکروهای توکار، ماکروهای تعریف‌شده در خط فرمان، و ماکروهای تعریف‌شده در فایل‌های ضمیمه‌شده (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) شود، هشدار می‌دهد. برای نمونه، اگر فراخوانی تابعی که یک نوع عدد صحیح بازمی‌گرداند به یک نوع اشاره‌گر تبدیل شود، هشدار می‌دهد. .IP "\fB\-Wc90\-c99\-compat\fR (تنها در C و Objective\-C)" 4 .IX Item "-Wc90-c99-compat (C and Objective-C only)" درباره ویژگی‌هایی که در ISO C90 موجود نیستند، اما در ISO C99 وجود دارند هشدار می‌دهد. برای مثال، درباره استفاده از آرایه‌های با طول متغیر، نوع \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 وجود دارند هشدار می‌دهد. برای مثال، درباره استفاده از ساختارها و اجتماع‌های بی‌نام، توصیف‌کننده نوع \&\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)، استفاده از نوع‌های ممیز شناور دهدهی، و غیره هشدار می‌دهد. این گزینه مستقل از حالت استانداردها است. هشدارها در عبارتی که پس از \&\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" هر زمان که یک اشاره‌گر به گونه‌ای تبدیل نوع شود که تراز (alignment) مورد نیاز مقصد افزایش یابد، هشدار می‌دهد. برای نمونه، اگر یک \f(CW\*(C`char *\*(C'\fR به یک \f(CW\*(C`int *\*(C'\fR در ماشین‌هایی که اعداد صحیح تنها در مرزهای دو یا چهار بایتی قابل دسترس هستند تبدیل شود، هشدار می‌دهد. .IP \fB\-Wcast\-align=strict\fR 4 .IX Item "-Wcast-align=strict" هر زمان که یک اشاره‌گر به گونه‌ای تبدیل نوع شود که تراز مورد نیاز مقصد افزایش یابد، هشدار می‌دهد. برای نمونه، اگر یک \f(CW\*(C`char *\*(C'\fR صرف‌نظر از ماشین مقصد به یک \f(CW\*(C`int *\*(C'\fR تبدیل شود، هشدار می‌دهد. .IP \fB\-Wcast\-function\-type\fR 4 .IX Item "-Wcast-function-type" هنگامی که یک اشاره‌گر تابع به یک اشاره‌گر تابع ناسازگار تبدیل شود، هشدار می‌دهد. در تبدیلی شامل انواع توابع با فهرست آرگومان متغیر، تنها انواع آرگومان‌های اولیه‌ای که ارائه شده‌اند در نظر گرفته می‌شوند. هر پارامتری از نوع اشاره‌گر با هر نوع اشاره‌گر دیگری مطابقت دارد. هرگونه تفاوت بی‌خطر در انواع عدد صحیح نادیده گرفته می‌شود، مانند \f(CW\*(C`int\*(C'\fR در مقایسه با \f(CW\*(C`long\*(C'\fR در مقصدهای ILP32. به همین ترتیب توصیف‌گرهای نوع نادیده گرفته می‌شوند. نوع تابع \f(CW\*(C`void (*) (void)\*(C'\fR خاص است و با همه چیز مطابقت دارد، که می‌توان از آن برای فرونشاندن این هشدار استفاده کرد. در تبدیلی شامل اشاره‌گر به انواع عضو، این گزینه هر زمان که تبدیل نوع باعث تغییر نوعِ اشاره‌گر به عضو شود، هشدار می‌دهد. این هشدار توسط \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wcast\-user\-defined\fR 4 .IX Item "-Wcast-user-defined" هنگامی که یک تبدیل به نوع مرجع (reference type) شامل تبدیل تعریف‌شده توسط کاربر که برنامه‌نویس ممکن است انتظار فراخوانی آن را داشته باشد نباشد، هشدار می‌دهد. .Sp .Vb 2 \& struct A { operator const int&(); } a; \& auto r = (int&)a; // warning .Ve .Sp این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wwrite\-strings\fR 4 .IX Item "-Wwrite-strings" هنگام کامپایل C، به ثوابت رشته‌ای نوع \f(CW\*(C`const char[\fR\f(CIlength\fR\f(CW]\*(C'\fR را اختصاص می‌دهد تا کپی کردن نشانی یکی از آن‌ها در یک اشاره‌گر غیر\-\f(CW\*(C`const\*(C'\fR \f(CW\*(C`char *\*(C'\fR هشداری تولید کند. این هشدارها به شما کمک می‌کنند در زمان کامپایل، کدی را پیدا کنید که می‌تواند برای نوشتن در یک ثابت رشته‌ای تلاش کند، اما تنها در صورتی که در استفاده از \f(CW\*(C`const\*(C'\fR در اعلان‌ها و پیش‌نمونه‌ها بسیار دقیق بوده باشید. در غیر این صورت، این هشدارها صرفاً یک مزاحمت هستند. به همین دلیل ما کاری نکرده‌ایم که \fB\-Wall\fR این هشدارها را درخواست کند. .Sp هنگام کامپایل C++، درباره تبدیل منسوخ‌شده از لیترال‌های رشته‌ای به \f(CW\*(C`char *\*(C'\fR هشدار می‌دهد. این هشدار به‌طور پیش‌فرض برای برنامه‌های C++ فعال است. .Sp این هشدار با \fB\-pedantic\-errors\fR در حالت C++11 یا جدیدتر به یک خطا ارتقا می‌یابد. .IP \fB\-Wclobbered\fR 4 .IX Item "-Wclobbered" درباره متغیرهایی که ممکن است توسط \f(CW\*(C`longjmp\*(C'\fR یا \&\f(CW\*(C`vfork\*(C'\fR تغییر یابند، هشدار می‌دهد. این هشدار همچنین توسط \fB\-Wextra\fR فعال می‌شود. .IP \fB\-Wno\-complain\-wrong\-lang\fR 4 .IX Item "-Wno-complain-wrong-lang" به‌طور پیش‌فرض، فرانت‌اندهای زبان زمانی که یک گزینهٔ خط فرمان معتبر است اما برای آن فرانت‌اند کاربرد ندارد، هشدار می‌دهند. این رفتار را می‌توان با \fB\-Wno\-complain\-wrong\-lang\fR غیرفعال کرد، که بیش از همه هنگام فراخوانی یک درایور کامپایلر منفرد برای چندین فایل مبدأ نوشته‌شده به زبان‌های مختلف سودمند است، برای نمونه: .Sp .Vb 1 \& $ g++ \-fno\-rtti a.cc b.f90 .Ve .Sp درایور \fIg++\fR فرانت‌اند C++ را برای کامپایل \fIa.cc\fR و فرانت‌اند Fortran را برای کامپایل \fIb.f90\fR فراخوانی می‌کند. فرانت‌اند دوم چنین پیامی صادر می‌کند: \&\fBf951: Warning: command\-line option \*(Aq\-fno\-rtti\*(Aq is valid for C++/D/ObjC++ but not for Fortran\fR، که می‌توان آن را با \fB\-Wno\-complain\-wrong\-lang\fR غیرفعال کرد. .IP "\fB\-Wcompare\-distinct\-pointer\-types\fR (فقط C و Objective\-C)" 4 .IX Item "-Wcompare-distinct-pointer-types (C and Objective-C only)" اگر اشاره‌گرهایی از انواع متمایز بدون تبدیل نوع با یکدیگر مقایسه شوند، هشدار می‌دهد. این هشدار به‌طور پیش‌فرض فعال است. .IP \fB\-Wconversion\fR 4 .IX Item "-Wconversion" درباره تبدیل‌های ضمنی که ممکن است مقداری را تغییر دهند، هشدار می‌دهد. این شامل تبدیل‌های میان اعداد حقیقی و صحیح، مانند \f(CW\*(C`abs (x)\*(C'\fR هنگامی که \&\f(CW\*(C`x\*(C'\fR از نوع \f(CW\*(C`double\*(C'\fR است؛ تبدیل‌های میان علامت‌دار و بدون علامت، مانند \f(CW\*(C`unsigned ui = \-1\*(C'\fR؛ و تبدیل‌ها به انواع کوچک‌تر، مانند \&\f(CW\*(C`sqrtf (M_PI)\*(C'\fR می‌شود. برای تبدیل‌های صریح مانند \f(CW\*(C`abs ((int) x)\*(C'\fR و \f(CW\*(C`ui = (unsigned) \-1\*(C'\fR، یا اگر مقدار توسط تبدیل تغییر نکند مانند \f(CW\*(C`abs (2.0)\*(C'\fR هشداری داده نمی‌شود. هشدارهای مربوط به تبدیل میان اعداد صحیح علامت‌دار و بدون علامت را می‌توان با استفاده از \fB\-Wno\-sign\-conversion\fR غیرفعال کرد. .Sp برای C++، همچنین درباره رفع ابهام اضافه بار (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 در این مثال، هنگام استفاده از اشاره‌گر \fIs\fR، آرایهٔ \fIa\fR خارج از حوزه (scope) است. از آنجا که کدی که \f(CW\*(C`s\*(C'\fR را مقداردهی می‌کند شرطی است، هشدار در سطح ۲ فعال می‌شود. .Sp .Vb 11 \& extern void frob (const char *); \& void h (char *s) \& { \& if (!s) \& { \& char a[12] = "tmpname"; \& s = a; \& } \& // warning: dangling pointer \*(Aqs\*(Aq to \*(Aqa\*(Aq may be used \& frob (s); \& } .Ve .RE.IP \fB\-Wdate\-time\fR 4 .IX Item "-Wdate-time" هنگامی که با ماکروهای \f(CW\*(C`_\|_TIME_\|_\*(C'\fR، \f(CW\*(C`_\|_DATE_\|_\*(C'\fR یا \f(CW\*(C`_\|_TIMESTAMP_\|_\*(C'\fR مواجه شود هشدار می‌دهد، چرا که ممکن است از کامپایل‌های بازتولیدپذیر با تطابق دقیق بیتی (bit\-wise\-identical reproducible compilations) جلوگیری کنند. .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" درباره نشانه‌های سرگردان (stray tokens) پس از \f(CW\*(C`#else\*(C'\fR و \f(CW\*(C`#endif\*(C'\fR هشدار ندهد. .IP \fB\-Wenum\-compare\fR 4 .IX Item "-Wenum-compare" درباره مقایسه بین مقادیر با انواع شمارشی (enumerated) مختلف هشدار می‌دهد. در ++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، یک نوع عدد صحیح علامت‌دار، یا یک نوع عدد صحیح بدون علامت سازگار است. با این حال، از آنجا که انتخاب نوع زیربنایی (underlying type) یک نوع شمارشی وابسته به پیاده‌سازی (implementation\-defined) است، چنین عدم تطابق‌هایی ممکن است موجب مشکلات قابلیت انتقال (portability) شود. در ++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" درباره ساختارهای مشکوک مربوط به ترتیب معکوس ذخیره‌سازی اسکالر (reverse 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 که به عنوان حد مجاز (bound) یک عبارت \f(CW\*(C`sizeof\*(C'\fR از آرایه مبدأ را مشخص می‌کنند هشدار می‌دهد. برای نمونه، در تابع زیر فراخوانی \&\f(CW\*(C`strncat\*(C'\fR اندازه رشته مبدأ را به عنوان کران تعیین می‌کند. این کار تقریباً قطعاً یک اشتباه است و بنابراین برای این فراخوانی اخطار صادر می‌شود. .Sp .Vb 7 \& void make_file (const char *name) \& { \& char path[PATH_MAX]; \& strncpy (path, name, sizeof path \- 1); \& strncat (path, ".text", sizeof ".text"); \& ... \& } .Ve .Sp گزینه \fB\-Wsizeof\-pointer\-memaccess\fR توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-sizeof\-array\-argument\fR 4 .IX Item "-Wno-sizeof-array-argument" هنگامی که عملگر \f(CW\*(C`sizeof\*(C'\fR روی پارامتری اعمال می‌شود که در تعریف تابع به عنوان یک آرایه اعلان شده است، هشدار ندهد. این هشدار به صورت پیش‌فرض برای برنامه‌های C و ++C فعال است. .IP \fB\-Wmemset\-elt\-size\fR 4 .IX Item "-Wmemset-elt-size" برای فراخوانی‌های مشکوک تابع توکار \f(CW\*(C`memset\*(C'\fR هشدار می‌دهد، در صورتی که آرگومان اول به یک آرایه ارجاع داشته باشد و آرگومان سوم عددی برابر با تعداد عناصر باشد، اما با اندازه آرایه در حافظه برابر نباشد. این نشان می‌دهد که کاربر ضرب در اندازه عنصر را از قلم انداخته است. این هشدار توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wmemset\-transposed\-args\fR 4 .IX Item "-Wmemset-transposed-args" برای فراخوانی‌های مشکوک به تابع توکار \f(CW\*(C`memset\*(C'\fR که در آن‌ها آرگومان دوم غیر صفر و آرگومان سوم صفر است، هشدار می‌دهد. برای مثال، فراخوانی \f(CW\*(C`memset (buf, sizeof buf, 0)\*(C'\fR شناسایی و اخطار داده می‌شود زیرا به جای آن \&\f(CW\*(C`memset (buf, 0, sizeof buf)\*(C'\fR مد نظر بوده است. این اخطار تنها در صورتی صادر می‌شود که آرگومان سوم یک صفر صریح (literal zero) باشد. در غیر این صورت، اگر عبارتی باشد که به صفر تقلیل یابد، یا حاصل تبدیل نوع صفر به نوعی دیگر باشد، احتمال بسیار کمتری وجود دارد که آرگومان‌ها به اشتباه جابه‌جا شده باشند و هشداری صادر نمی‌شود. این هشدار توسط \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 مقایسه یک اشاره‌گر با یک لیترال رشته‌ای (string literal)، مانند: .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) در عبارت یک آرایه باشد. زیرمجموعه این هشدار برای اشاره‌گرهای شیء را می‌توان با تبدیل صریح عملوندِ اشاره‌گر به یک نوع عدد صحیح مانند \f(CW\*(C`intptr_t\*(C'\fR یا \f(CW\*(C`uintptr_t\*(C'\fR غیرفعال کرد. مقایسه‌ها در برابر رشته‌های لیترال منجر به رفتار نامشخص (unspecified behavior) شده و غیرقابل‌انتقال (non\-portable) هستند، و القا می‌کنند که هدف، فراخوانی \f(CW\*(C`strcmp\*(C'\fR بوده است. اگر عبارت مشکوک حاصل بسط یک ماکرو (macro expansion) باشد، هشدار غیرفعال می‌شود. هشدار \&\fB\-Waddress\fR توسط \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-address\-of\-packed\-member\fR 4 .IX Item "-Wno-address-of-packed-member" هنگامی که آدرس یک عضو متراکم‌شده (packed member) از ساختار (struct) یا اجتماع (union) گرفته می‌شود، که معمولاً منجر به یک مقدار اشاره‌گر ترازنشده (unaligned pointer) می‌گردد، هشدار ندهد. این گزینه به صورت پیش‌فرض فعال است..IP \fB\-Wlogical\-op\fR 4 .IX Item "-Wlogical-op" دربارهٔ استفاده‌های مشکوک از عملگرهای منطقی در عبارت‌ها هشدار می‌دهد. این شامل استفاده از عملگرهای منطقی در بافت‌هایی است که احتمالاً انتظار یک عملگر بیتی می‌رود. همچنین زمانی که عملوندهای یک عملگر منطقی یکسان باشند، هشدار می‌دهد: .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 می‌توان با قرار دادن عملوند سمت چپ در پرانتز، این هشدار را سرکوب کرد: .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 غیرمنتظره استفاده شود، مانند صفت‌های (attributes) ناشناخته، صفت‌های تابع که روی متغیرها اعمال شده‌اند و غیره، هشدار نمی‌دهد. این گزینه مانع از خطاهای ناشی از کاربرد نادرست صفت‌های پشتیبانی‌شده نمی‌شود. .Sp هشدارهای مربوط به کاربردهای نادرست صفت‌های استاندارد، با \fB\-pedantic\-errors\fR به خطا ارتقا می‌یابند. .Sp علاوه بر این، با استفاده از \fB\-Wno\-attributes=\fR می‌توان هشدارهای مربوط به صفت‌های ناشناخته با حوزهٔ مشخص (scoped) را (در 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) است، با آرگومان‌هایی فراخوانی شود که نوع‌های ارتقایافتهٔ آن‌ها با نوع‌های مورد انتظار تابع همخوانی ندارد، هشدار می‌دهد. در صورت مشخص شدن \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) به چیزی غیر از دستور اعمال شود، یا در انتهای یک دستور مرکب (compound statement) قرار گیرد، هشدار می‌دهد. چنین برچسب‌هایی در C23 و گویش‌های پس از آن در C مجاز هستند و در سایر گویش‌ها به عنوان یک افزونهٔ GCC در دسترس می‌باشند. .Sp این هشدار همچنین توسط \fB\-Wc11\-c23\-compat\fR فعال می‌شود. در صورت ساخت برای نسخه‌ای از C قبل از C23، با \&\fB\-pedantic\-errors\fR به یک خطا تبدیل می‌شود. .IP \fB\-Wheader\-guard\fR 4 .IX Item "-Wheader-guard" اگر یک محافظ گنجاندن چندباره (multiple inclusion guard) معتبر برای سربرگ پیش‌پردازنده، دارای دستورالعمل \f(CW\*(C`#define\*(C'\fR بلافاصله پس از دستورالعمل \f(CW\*(C`#ifndef\*(C'\fR یا \f(CW\*(C`#if !defined\*(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)" اگر اعلان یک تابع شامل نام پارامتری بدون نوع باشد، هشدار نمی‌دهد. چنین اعلان‌هایی پیش‌نمونهٔ تابع را ارائه نمی‌دهند و مانع از بیشتر بررسی‌های نوع در فراخوانی‌های تابع می‌شوند. .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)" اگر یک تابع سراسری (global) بدون اعلان پیش‌نمونهٔ قبلی تعریف شود، هشدار می‌دهد. این هشدار حتی در صورتی که خودِ تعریف پیش‌نمونه ارائه دهد نیز صادر می‌شود. از این گزینه برای شناسایی توابع سراسری که اعلان پیش‌نمونهٔ متناظری در یک فایل سربرگ ندارند استفاده کنید. این گزینه برای 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)" اگر یک متغیر سراسری بدون اعلان قبلی تعریف شود، هشدار می‌دهد. از این گزینه برای شناسایی متغیرهای سراسری که یک اعلان \f(CWextern\fR متناظر در یک فایل سربرگ ندارند استفاده کنید. .IP \fB\-Wmissing\-declarations\fR 4 .IX Item "-Wmissing-declarations" اگر یک تابع سراسری بدون اعلان قبلی تعریف شود، هشدار می‌دهد؛ حتی اگر خود تعریف یک پیش‌نمونه ارائه دهد. از این گزینه برای شناسایی توابع سراسری که در فایل‌های سربرگ اعلان نشده‌اند استفاده کنید. در C، برای توابعی با اعلان‌های قبلیِ فاقد پیش‌نمونه هشداری صادر نمی‌شود؛ برای تشخیص پیش‌نمونه‌های مفقود از \fB\-Wmissing\-prototypes\fR استفاده کنید. در C++، برای الگوهای تابع (function templates)، توابع درون‌خطی (inline functions) یا توابع موجود در فضاهای نام ناشناس هشداری صادر نمی‌شود..IP \fB\-Wmissing\-field\-initializers\fR 4 .IX Item "-Wmissing-field-initializers" هشدار می‌دهد اگر مقداردهنده اولیه‌ی یک ساختار (structure) برخی فیلدها را جا انداخته باشد. برای مثال، کد زیر موجب چنین هشداری می‌شود، زیرا \&\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 این گزینه درباره مقداردهنده صفر عمومی (universal zero initializer) \&\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 در اینجا \fBsatisfied\fR برابر true خواهد بود اگر \fBC\fR یک عبارت معتبر باشد، که برای همه 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++، دو شناسه‌یاب (identifier) در صورتی متفاوت هستند که دنباله‌های متفاوتی از نویسه‌ها باشند. با این حال، گاهی اوقات وقتی نویسه‌های خارج از مجموعه نویسه‌های پایه‌ای ASCII استفاده می‌شوند، ممکن است دو دنباله نویسه متفاوت داشته باشید که یکسان به نظر می‌رسند. برای جلوگیری از سردرگمی، استاندارد ISO 10646 برخی \fIقواعد نرمال‌سازی (normalization rules)\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 استفاده کنید، GCC در صورتی که کد شما در قالب NFKC نباشد هشدار می‌دهد. این هشدار با هشدار دادن درباره هر شناسه‌ای که حاوی حرف O است چون ممکن است با رقم 0 اشتباه گرفته شود قابل مقایسه است، و بنابراین پیش‌فرض نیست، اما اگر محیط برنامه‌نویسی نتواند برای نمایش متمایز این نویسه‌ها اصلاح شود، ممکن است به عنوان یک شیوه‌نامه کدنویسی محلی مفید باشد. .IP \fB\-Wno\-attribute\-warning\fR 4 .IX Item "-Wno-attribute-warning" درباره استفاده از توابعی که با صفت \f(CW\*(C`warning\*(C'\fR اعلان شده‌اند هشدار نده. به‌طور پیش‌فرض، این هشدار فعال است. \fB\-Wno\-attribute\-warning\fR را می‌توان برای غیرفعال کردن هشدار، یا \fB\-Wno\-error=attribute\-warning\fR را می‌توان برای غیرفعال کردن خطا هنگام کامپایل با پرچم \fB\-Werror\fR استفاده کرد. .IP \fB\-Wno\-deprecated\fR 4 .IX Item "-Wno-deprecated" درباره استفاده از ویژگی‌های منسوخ‌شده هشدار نده. .Sp در ++C، مشخص کردن صریح \fB\-Wdeprecated\fR همچنین هشدارهایی را درباره برخی ویژگی‌ها که در استانداردهای بعدی زبان منسوخ شده‌اند فعال می‌کند، به‌ویژه \fB\-Wcomma\-subscript\fR، \&\fB\-Wvolatile\fR، \fB\-Wdeprecated\-enum\-float\-conversion\fR، \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR، \&\fB\-Wdeprecated\-literal\-operator\fR، و \&\fB\-Wdeprecated\-variadic\-comma\-omission\fR. .IP \fB\-Wno\-deprecated\-declarations\fR 4 .IX Item "-Wno-deprecated-declarations" درباره استفاده از توابع، متغیرها و انواعی که با استفاده از صفت \f(CW\*(C`deprecated\*(C'\fR به عنوان منسوخ‌شده علامت‌گذاری شده‌اند، هشدار نده. .IP \fB\-Wno\-overflow\fR 4 .IX Item "-Wno-overflow" درباره سرریز زمان کامپایل در عبارت‌های ثابت هشدار نده. .IP \fB\-Wno\-odr\fR 4 .IX Item "-Wno-odr" درباره نقض‌های قاعده یک تعریف (One Definition Rule) در طول بهینه‌سازی هنگام پیوند هشدار می‌دهد. به‌طور پیش‌فرض فعال است. .IP \fB\-Wopenacc\-parallelism\fR 4 .IX Item "-Wopenacc-parallelism" درباره انتخاب‌های بالقوه غیربهینه مرتبط با موازی‌سازی OpenACC هشدار می‌دهد. .IP \fB\-Wno\-openmp\fR 4 .IX Item "-Wno-openmp" درباره کدهای مشکوک OpenMP هشدار می‌دهد. .IP \fB\-Wopenmp\-simd\fR 4 .IX Item "-Wopenmp-simd" هشدار می‌دهد اگر مدل هزینه بردارساز (vectorizer 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" هشدار می‌دهد اگر به یک ساختار صفت packed داده شود، اما صفت packed اثری روی چیدمان یا اندازه ساختار نداشته باشد. چنین ساختارهایی ممکن است در ازای سود اندک، دچار ناترازی (misalignment) شوند. برای نمونه، در این کد، متغیر \f(CW\*(C`f.x\*(C'\fR در \f(CW\*(C`struct bar\*(C'\fR ناتراز است حتی با اینکه خود \f(CW\*(C`struct bar\*(C'\fR صفت packed ندارد: .Sp .Vb 8 \& struct foo { \& int x; \& char a, b, c, d; \& } _\|_attribute_\|_((packed)); \& struct bar { \& char z; \& struct foo f; \& }; .Ve.IP \fB\-Wnopacked\-bitfield\-compat\fR 4 .IX Item "-Wnopacked-bitfield-compat" نسخه‌های سری 4.1، 4.2 و 4.3 از GCC صفت \f(CW\*(C`packed\*(C'\fR را در فیلدهای بیتی از نوع \f(CW\*(C`char\*(C'\fR نادیده می‌گیرند. این مورد در GCC 4.4 برطرف شد، اما این تغییر می‌تواند منجر به تفاوت‌هایی در چیدمان ساختار شود. زمانی که آفست چنین فیلدی در GCC 4.4 تغییر کرده باشد، GCC به شما اطلاع می‌دهد. برای نمونه، در این ساختار دیگر یک پدینگ ۴ بیتی بین فیلد \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 برای پردازنده مقصد مشخص، و گاهی به یک بازه در صورت بهینه‌سازی برای یک مقصد عمومی (generic). بنابراین تمام واحدهای ترجمه‌ای که برای استفاده از این متغیرها به سازگاری ABI وابسته هستند، باید با همان \fB\-mtune\fR (یا \fB\-mcpu\fR) کامپایل شوند. .Sp اگر پایداری ABI اهمیت دارد، برای نمونه اگر کاربرد آن در فایل هدر یک کتابخانه است، احتمالاً اصلاً نباید از متغیرهای hardware interference size استفاده کنید. در غیر این صورت، می‌توانید با \fB\-\-param\fR یک مقدار مشخص را تحمیل کنید. .Sp اگر اطمینان دارید که استفاده شما از این متغیر بر ABI بیرون از یک ساخت واحد از پروژه‌تان اثر نمی‌گذارد، می‌توانید این هشدار را با \fB\-Wno\-interference\-size\fR غیرفعال کنید. .IP \fB\-Wint\-in\-bool\-context\fR 4 .IX Item "-Wint-in-bool-context" درباره استفاده مشکوک از مقادیر صحیح در جاهایی که مقادیر بولی مورد انتظار است هشدار می‌دهد؛ مانند عبارت‌های شرطی (?:) با استفاده از ثابت‌های صحیح غیربولی در یک بافت بولی، مثل \f(CW\*(C`if (a <= b ? 2 : 3)\*(C'\fR، یا شیفت به چپ اعداد صحیح علامت‌دار در یک بافت بولی، مثل \f(CW\*(C`for (a = 0; 1 << a; a++);\*(C'\fR. به همین ترتیب برای تمام انواع ضرب‌ها صرف‌نظر از نوع داده. این هشدار با \fB\-Wall\fR فعال می‌شود. .IP \fB\-Wno\-int\-to\-pointer\-cast\fR 4 .IX Item "-Wno-int-to-pointer-cast" هشدارهای حاصل از تبدیل نوع (cast) یک عدد صحیح به نوع اشاره‌گر با اندازه متفاوت را نادیده می‌گیرد. در C++، تبدیل نوع به یک نوع اشاره‌گر با اندازه کوچک‌تر یک خطا محسوب می‌شود. گزینه \fBWint\-to\-pointer\-cast\fR به طور پیش‌فرض فعال است. .IP "\fB\-Wno\-pointer\-to\-int\-cast\fR (فقط C و Objective\-C)" 4 .IX Item "-Wno-pointer-to-int-cast (C and Objective-C only)" هشدارهای حاصل از تبدیل نوع (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" شکل‌های نامعتبر توالی‌های فرار محدودشده یا نام‌دار را که به عنوان نشانه‌های مجزا در نظر گرفته می‌شوند، گزارش نمی‌کند. \fBWunicode\fR به طور پیش‌فرض فعال است. .IP \fB\-Wlong\-long\fR 4 .IX Item "-Wlong-long" اگر از نوع \f(CW\*(C`long long\*(C'\fR استفاده شود، هشدار می‌دهد. این گزینه در حالت‌های ISO C90 و C++98 توسط \fB\-Wpedantic\fR یا \fB\-Wtraditional\fR فعال می‌شود. برای متوقف کردن پیام‌های هشدار، از \fB\-Wno\-long\-long\fR استفاده کنید. .Sp این هشدار با \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wvariadic\-macros\fR 4 .IX Item "-Wvariadic-macros" اگر ماکروهای با تعداد آرگومان متغیر (variadic) در حالت ISO C90 استفاده شوند، یا ساختار نحوی جایگزین GNU در حالت ISO C99 به کار رود، هشدار می‌دهد. این گزینه توسط \fB\-Wpedantic\fR یا \fB\-Wtraditional\fR فعال می‌شود. برای غیرفعال کردن پیام‌های هشدار، از \fB\-Wno\-variadic\-macros\fR استفاده کنید. .IP \fB\-Wno\-varargs\fR 4 .IX Item "-Wno-varargs" درباره استفاده مشکوک از ماکروهای به کار رفته برای مدیریت آرگومان‌های متغیر مانند \f(CW\*(C`va_start\*(C'\fR هشدار نمی‌دهد. این هشدارها به طور پیش‌فرض فعال هستند. .IP \fB\-Wvector\-operation\-performance\fR 4 .IX Item "-Wvector-operation-performance" اگر یک عملیات برداری از طریق قابلیت‌های SIMD معماری پیاده‌سازی نشود، هشدار می‌دهد. عمدتاً برای بهبود کارایی مفید است. عملیات برداری می‌تواند به صورت \f(CW\*(C`piecewise\*(C'\fR پیاده‌سازی شود، به این معنی که عملیات اسکالر بر روی تک‌تک عناصر بردار انجام می‌شود؛ \&\f(CW\*(C`in parallel\*(C'\fR، به این معنی که عملیات برداری با استفاده از اسکالرهای با نوع عریض‌تر پیاده‌سازی می‌شود که معمولاً از نظر کارایی بهینه‌تر است؛ و \f(CW\*(C`as a single scalar\*(C'\fR، به این معنی که بردار در یک نوع داده اسکالر جای می‌گیرد. .IP \fB\-Wvla\fR 4 .IX Item "-Wvla" اگر یک آرایه با طول متغیر در کد استفاده شود، هشدار می‌دهد. \&\fB\-Wno\-vla\fR از هشدار \fB\-Wpedantic\fR درباره آرایه‌های با طول متغیر جلوگیری می‌کند. .Sp این هشدار با \fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wvla\-larger\-than=\fR\fIbyte\-size\fR 4 .IX Item "-Wvla-larger-than=byte-size" در صورت استفاده از این گزینه، کامپایلر برای اعلان‌های آرایه‌های با طول متغیر که اندازه آن‌ها یا نامحدود است، یا توسط آرگومانی محدود شده که اجازه می‌دهد اندازه آرایه از \fIbyte\-size\fR بایت فراتر رود، هشدار می‌دهد. این سازوکار مشابه نحوه کارکرد \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR است، اما بر روی آرایه‌های با طول متغیر اعمال می‌شود. .Sp توجه داشته باشید که GCC ممکن است آرایه‌های کوچک با طول متغیر با مقدار معلوم را به آرایه‌های معمولی بهینه‌سازی کند، بنابراین ممکن است این هشدار برای چنین آرایه‌هایی صادر نشود. .Sp گزینه \&\fB\-Wvla\-larger\-than=\fR\fBPTRDIFF_MAX\fR به طور پیش‌فرض فعال است اما معمولاً تنها زمانی اثرگذار است که \fB\-ftree\-vrp\fR فعال باشد (که پیش‌فرض در \fB\-O2\fR و بالاتر است). .Sp همچنین \fB\-Walloca\-larger\-than=\fR\fIbyte\-size\fR را ببینید..IP \fB\-Wno\-vla\-larger\-than\fR 4 .IX Item "-Wno-vla-larger-than" هشدارهای \fB\-Wvla\-larger\-than=\fR را غیرفعال می‌کند. این گزینه معادل \fB\-Wvla\-larger\-than=\fR\fBSIZE_MAX\fR یا بزرگ‌تر است. .IP \fB\-Wvla\-parameter\fR 4 .IX Item "-Wvla-parameter" درباره اعلان‌های مجدد توابعی که شامل آرگومان‌هایی از نوع آرایه با طول متغیر (VLA) با گونه‌ها یا شکل‌های ناسازگار هستند هشدار می‌دهد، و امکان تشخیص دسترسی‌های خارج از محدوده به چنین پارامترهایی را با هشدارهایی مانند \&\fB\-Warray\-bounds\fR فعال می‌سازد. .Sp اگر نخستین اعلان تابع از قالب VLA استفاده کند، کران مشخص‌شده در آرایه به عنوان حداقل تعداد عناصر مورد انتظار برای ارسال در فراخوانی‌های تابع و حداکثر تعداد عناصر قابل دسترس توسط آن فرض می‌شود. عدم ارائه آرگومان‌هایی با اندازه کافی یا دسترسی به بیش از حداکثر تعداد عناصر ممکن است تشخیص داده شود. .Sp برای نمونه، این هشدار برای اعلان‌های مجدد زیر فعال می‌شود، زیرا اولین اعلان اجازه می‌دهد آرایه‌ای با هر اندازه‌ای به \f(CW\*(C`f\*(C'\fR ارسال شود در حالی که اعلان دوم مشخص می‌کند آرگومان آرایه باید حداقل \f(CW\*(C`n\*(C'\fR عنصر داشته باشد. علاوه بر این، فراخوانی \f(CW\*(C`f\*(C'\fR با پارامتر مرتبط با کران VLA فراتر از کران واقعی VLA نیز باعث فعال شدن هشدار می‌شود. .Sp .Vb 3 \& void f (int n, int[n]); \& // warning: argument 2 previously declared as a VLA \& void f (int, int[]); \& \& void g (int n) \& { \& if (n > 4) \& return; \& int a[n]; \& // warning: access to a by f may be out of bounds \& f (sizeof a, a); \& ... \& } .Ve .Sp گزینه \&\fB\-Wvla\-parameter\fR در \fB\-Wall\fR گنجانده شده است. گزینه \&\fB\-Warray\-parameter\fR هشدارهایی را برای مشکلات مشابه در رابطه با آرگومان‌های آرایه معمولی فعال می‌کند. .IP \fB\-Wvolatile\-register\-var\fR 4 .IX Item "-Wvolatile-register-var" اگر یک متغیر ثبات (register) به صورت volatile اعلان شده باشد، هشدار می‌دهد. تغییردهنده volatile از تمامی بهینه‌سازی‌هایی که ممکن است خواندن‌ها و/یا نوشتن‌ها در متغیرهای ثبات را حذف کنند جلوگیری نمی‌کند. این هشدار توسط \&\fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-xor\-used\-as\-pow\fR (فقط C، C++، Objective\-C و Objective\-C++)" 4 .IX Item "-Wno-xor-used-as-pow (C, C++, Objective-C and Objective-C++ only)" هشدارهای مربوط به استفاده از \f(CW\*(C`^\*(C'\fR، عملگر XOR، در مواردی که به نظر می‌رسد منظور کد توان‌رسانی بوده است را غیرفعال می‌کند. به‌طور خاص، این هشدار زمانی رخ می‌دهد که سمت چپ ثابت ده‌دهی ۲ یا ۱۰ باشد و سمت راست نیز یک ثابت ده‌دهی باشد. .Sp در C و C++، عملگر \f(CW\*(C`^\*(C'\fR به معنای XOR است، در حالی که در برخی زبان‌های دیگر (مانند TeX و برخی نگارش‌های BASIC) به معنای توان‌رسانی است. .Sp این هشدار را می‌توان با تبدیل یکی از عملوندها به هگزادسیمال و همچنین با کامپایل کردن به همراه \fB\-Wno\-xor\-used\-as\-pow\fR غیرفعال کرد. .IP \fB\-Wdisabled\-optimization\fR 4 .IX Item "-Wdisabled-optimization" اگر یک گذر بهینه‌سازی (optimization pass) درخواست‌شده غیرفعال شود، هشدار می‌دهد. این هشدار عموماً نشان‌دهنده وجود اشکال در کد شما نیست؛ بلکه صرفاً نشان می‌دهد که بهینه‌سازهای GCC قادر به پردازش کارآمد کد نیستند. اغلب مشکل از بزرگی یا پیچیدگی بیش از حد کد شماست؛ زمانی که احتمال برود خود بهینه‌سازی زمان بسیار نامتعارفی می‌گیرد، GCC از بهینه‌سازی برنامه‌ها خودداری می‌کند. .IP "\fB\-Wpointer\-sign\fR (فقط C و Objective\-C)" 4 .IX Item "-Wpointer-sign (C and Objective-C only)" برای ارسال یا انتساب آرگومان‌های اشاره‌گر با علامت‌داری (signedness) متفاوت هشدار می‌دهد. این گزینه فقط برای C و Objective\-C پشتیبانی می‌شود. این هشدار به طور ضمنی توسط \&\fB\-Wall\fR و توسط \fB\-Wpedantic\fR فعال می‌شود، و می‌توان آن را با \&\fB\-Wno\-pointer\-sign\fR غیرفعال کرد. .Sp این هشدار با استفاده از \fB\-pedantic\-errors\fR به یک خطا تبدیل می‌شود. .IP \fB\-Wstack\-protector\fR 4 .IX Item "-Wstack-protector" این گزینه تنها زمانی فعال است که \fB\-fstack\-protector\fR فعال باشد. درباره توابعی که در برابر تخریب پشته (stack smashing) محافظت نشده‌اند هشدار می‌دهد. .IP \fB\-Woverlength\-strings\fR 4 .IX Item "-Woverlength-strings" درباره ثابت‌های رشته‌ای که از طول «حداقل حداکثر» مشخص‌شده در استاندارد 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 استفاده شود، درباره چنین ثابت‌هایی در فایل‌های سرآیند سیستمی هشدار می‌دهد. این قابلیت هنگام آماده‌سازی کد برای استفاده با رهنمود \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)" هنگامی که از یک مقداردهنده اولیه موضعی (positional) برای مقداردهی اولیه‌ ساختاری که با مشخصه \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 از لحاظ فنی، این گزینه یک اجرای نمادین هدایت‌شده با پوشش را بر روی کد در حال کامپایل انجام می‌دهد. این تحلیل نه جامع (sound) است و نه کامل (complete): می‌تواند موارد مثبت کاذب و منفی کاذب داشته باشد. این ابزاری برای باگ‌یابی است، نه ابزاری برای اثبات درستی برنامه. .Sp تحلیل‌گر در این نسخه تنها برای استفاده بر روی کدهای C مناسب است. .Sp فعال کردن این گزینه در عمل هشدارهای زیر را فعال می‌کند: .Sp \&\fB\-Wanalyzer\-allocation\-size \&\-Wanalyzer\-deref\-before\-check \&\-Wanalyzer\-double\-fclose \&\-Wanalyzer\-double\-free \&\-Wanalyzer\-exposure\-through\-output\-file \&\-Wanalyzer\-exposure\-through\-uninit\-copy \&\-Wanalyzer\-fd\-access\-mode\-mismatch \&\-Wanalyzer\-fd\-double\-close \&\-Wanalyzer\-fd\-leak \&\-Wanalyzer\-fd\-phase\-mismatch \&\-Wanalyzer\-fd\-type\-mismatch \&\-Wanalyzer\-fd\-use\-after\-close \&\-Wanalyzer\-fd\-use\-without\-check \&\-Wanalyzer\-file\-leak \&\-Wanalyzer\-free\-of\-non\-heap \&\-Wanalyzer\-imprecise\-fp\-arithmetic \&\-Wanalyzer\-infinite\-loop \&\-Wanalyzer\-infinite\-recursion \&\-Wanalyzer\-jump\-through\-null \&\-Wanalyzer\-malloc\-leak \&\-Wanalyzer\-mismatching\-deallocation \&\-Wanalyzer\-null\-argument \&\-Wanalyzer\-null\-dereference \&\-Wanalyzer\-out\-of\-bounds \&\-Wanalyzer\-overlapping\-buffers \&\-Wanalyzer\-possible\-null\-argument \&\-Wanalyzer\-possible\-null\-dereference \&\-Wanalyzer\-putenv\-of\-auto\-var \&\-Wanalyzer\-shift\-count\-negative \&\-Wanalyzer\-shift\-count\-overflow \&\-Wanalyzer\-stale\-setjmp\-buffer \&\-Wanalyzer\-tainted\-allocation\-size \&\-Wanalyzer\-tainted\-array\-index \&\-Wanalyzer\-tainted\-assertion \&\-Wanalyzer\-tainted\-divisor \&\-Wanalyzer\-tainted\-offset \&\-Wanalyzer\-tainted\-size \&\-Wanalyzer\-undefined\-behavior\-ptrdiff \&\-Wanalyzer\-undefined\-behavior\-strtok \&\-Wanalyzer\-unsafe\-call\-within\-signal\-handler \&\-Wanalyzer\-use\-after\-free \&\-Wanalyzer\-use\-of\-pointer\-in\-stale\-stack\-frame \&\-Wanalyzer\-use\-of\-uninitialized\-value \&\-Wanalyzer\-va\-arg\-type\-mismatch \&\-Wanalyzer\-va\-list\-exhausted \&\-Wanalyzer\-va\-list\-leak \&\-Wanalyzer\-va\-list\-use\-after\-va\-end \&\-Wanalyzer\-write\-to\-const \&\-Wanalyzer\-write\-to\-string\-literal\fR .Sp این گزینه تنها زمانی در دسترس است که GCC با پشتیبانی از تحلیل‌گر پیکربندی شده باشد. .IP \fB\-Wanalyzer\-symbol\-too\-complex\fR 4 .IX Item "-Wanalyzer-symbol-too-complex" اگر \fB\-fanalyzer\fR فعال باشد، تحلیل‌گر از قواعد اکتشافی گوناگونی برای تلاش در جهت ردیابی وضعیت حافظه استفاده می‌کند، اما این تلاش‌ها ممکن است توسط کدهای بسیار پیچیده بی‌اثر شوند. .Sp به طور پیش‌فرض، اگر مقادیر عبارات از آستانه تعریف‌شده توسط \&\fB\-\-param analyzer\-max\-svalue\-depth=\fR\fIvalue\fR فراتر رود، تحلیل بدون اخطار ردیابی مقادیر عبارات را متوقف کرده و برای چنین عباراتی به یک نمایش نادقیق بازمی‌گردد. گزینه \fB\-Wanalyzer\-symbol\-too\-complex\fR در صورت وقوع این حالت هشدار می‌دهد. .IP \fB\-Wanalyzer\-too\-complex\fR 4 .IX Item "-Wanalyzer-too-complex" اگر \fB\-fanalyzer\fR فعال باشد، تحلیل‌گر از روش‌های اکتشافی گوناگونی برای تلاش در کاوش جریان کنترل و جریان داده در برنامه استفاده می‌کند، اما این روش‌ها ممکن است توسط کدهای بسیار پیچیده به بن‌بست بخورند. .Sp به طور پیش‌فرض، اگر کد برای کاوش کامل تحلیل‌گر بیش از حد پیچیده باشد و به یک محدودیت داخلی برسد، تحلیل بدون ایجاد سر و صدا متوقف می‌شود. گزینه \fB\-Wanalyzer\-too\-complex\fR در صورت وقوع چنین حالتی هشدار می‌دهد..IP \fB\-Wno\-analyzer\-allocation\-size\fR 4 .IX Item "-Wno-analyzer-allocation-size" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ برای غیرفعال کردن آن، از \fB\-Wno\-analyzer\-allocation\-size\fR استفاده کنید. .Sp این پیام تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها یک اشاره‌گر به یک بافر مقداردهی می‌شود تا به بافری با اندازه‌ای اشاره کند که مضربی از \f(CW\*(C`sizeof (*pointer)\*(C'\fR نیست. .Sp ببینید CWE\-131: Incorrect Calculation of Buffer Size (\f(CW\*(C`https://cwe.mitre.org/data/definitions/131.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-deref\-before\-check\fR 4 .IX Item "-Wno-analyzer-deref-before-check" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-deref\-before\-check\fR برای غیرفعال کردن آن استفاده کنید. .Sp این پیام تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها یک اشاره‌گر *پس از* اینکه دی‌ریفرنس (dereference) شده است، برای \f(CW\*(C`NULL\*(C'\fR بودن بررسی می‌شود، که نشان می‌دهد اشاره‌گر ممکن است NULL بوده باشد. چنین مواردی حاکی از آن است که بررسی برای NULL یا زائد است، یا اینکه باید به قبل از دی‌ریفرنس شدن اشاره‌گر منتقل شود. .Sp این پیام تشخیصی همچنین مقادیر ارسال‌شده به آرگومان تابعی که با \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR نشانه‌گذاری شده را نیازمند یک مقدار غیر\-NULL در نظر می‌گیرد، و بنابراین در صورتی که چنین مقادیری پس از بازگشت از فراخوانی چنین تابعی برای \f(CW\*(C`NULL\*(C'\fR بررسی شوند، هشدار می‌دهد. .Sp بعید است که این پیام تشخیصی در صورت فعال بودن هر سطحی از بهینه‌سازی گزارش شود، چرا که منطق بهینه‌سازی GCC معمولاً چنین بررسی‌هایی برای NULL را زائد در نظر گرفته و آن‌ها را پیش از اینکه تحلیل‌گر «ببیند»، با بهینه‌سازی حذف می‌کند. بنابراین هنگام تلاش برای فعال‌سازی این پیام تشخیصی، بهینه‌سازی باید غیرفعال شود. .IP \fB\-Wno\-analyzer\-double\-fclose\fR 4 .IX Item "-Wno-analyzer-double-fclose" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-double\-fclose\fR برای غیرفعال کردن آن استفاده کنید. .Sp این پیام تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها ممکن است تابع \f(CW\*(C`fclose\*(C'\fR روی یک \f(CW\*(C`FILE *\*(C'\fR بیش از یک بار فراخوانی شود. .Sp ببینید CWE\-1341: Multiple Releases of Same Resource or Handle (\f(CW\*(C`https://cwe.mitre.org/data/definitions/1341.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-double\-free\fR 4 .IX Item "-Wno-analyzer-double-free" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-double\-free\fR برای غیرفعال کردن آن استفاده کنید. .Sp این پیام تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها ممکن است یک تابع آزادساز روی یک اشاره‌گر بیش از یک بار فراخوانی شود، خواه \f(CW\*(C`free\*(C'\fR باشد، یا یک آزادساز که توسط ویژگی \f(CW\*(C`malloc\*(C'\fR ارجاع داده شده است. .Sp ببینید CWE\-415: Double Free (\f(CW\*(C`https://cwe.mitre.org/data/definitions/415.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR 4 .IX Item "-Wno-analyzer-exposure-through-output-file" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-exposure\-through\-output\-file\fR برای غیرفعال کردن آن استفاده کنید. .Sp این پیام تشخیصی درباره مسیرهایی از کد هشدار می‌دهد که در آن‌ها یک مقدار حساس از نظر امنیتی در یک فایل خروجی نوشته می‌شود (مانند نوشتن یک گذرواژه در یک فایل لاگ). .Sp ببینید CWE\-532: Information Exposure Through Log Files (\f(CW\*(C`https://cwe.mitre.org/data/definitions/532.html\*(C'\fR). .IP \fB\-Wanalyzer\-exposure\-through\-uninit\-copy\fR 4 .IX Item "-Wanalyzer-exposure-through-uninit-copy" این هشدار به طور هم‌زمان به \fB\-fanalyzer\fR و استفاده از یک افزونه (plugin) برای مشخص کردن تابعی که از میان یک «مرز اعتماد» کپی می‌کند، نیاز دارد. از \&\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 به دست آمده، یا هنگام تلاش برای استفاده از یک عملیات سوکت جریانی روی یک سوکت دیتاگرام هشدار می‌دهد. .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 احتمال دارد این پیام تشخیصی مواردی از بازگشت بی‌نهایت را که پیش از «دیدن» توسط تحلیل‌گر، به‌وسیلهٔ بهینه‌ساز به تکرار (iteration) تبدیل شده‌اند از دست بدهد. بنابراین هنگام تلاش برای برانگیختن این پیام تشخیصی، باید بهینه‌سازی غیرفعال باشد. .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 این پیام تشخیصی در مورد مسیرهایی در کد هشدار می‌دهد که در آن‌ها یک بافر قطعاً خارج از محدوده خوانده یا نوشته می‌شود. این ابزار تشخیصی در مواردی اعمال می‌شود که تحلیل‌گر قادر به تعیین آفست ثابت باشد و برای دسترسی‌های فراتر از انتهای یک بافر، ظرفیت نیز ثابت باشد. علاوه بر این، تحلیل‌گر بررسی‌های محدودی را برای دسترسی‌های فراتر از انتها در حالتی که آفست و همچنین ظرفیت نمادین (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 این پیام تشخیصی در مورد مسیرهایی در کد هشدار می‌دهد که در آن‌ها یک مقدار احتمالاً \f(CW\*(C`NULL\*(C'\fR به آرگومان تابعی ارسال می‌شود که با \f(CW\*(C`_\|_attribute_\|_((nonnull))\*(C'\fR به عنوان نیازمند یک مقدار غیر \f(CW\*(C`NULL\*(C'\fR مشخص شده است. .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 این پیام تشخیصی در مورد مسیرهایی در کد هشدار می‌دهد که در آن‌ها یک مقدار احتمالاً \f(CW\*(C`NULL\*(C'\fR ارجاع‌زدایی می‌شود. .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 به عنوان نیازمند یک مقدار غیر \f(CW\*(C`NULL\*(C'\fR مشخص شده است. .Sp ببینید CWE\-476: NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-null\-dereference\fR 4 .IX Item "-Wno-analyzer-null-dereference" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-null\-dereference\fR برای غیرفعال کردن آن استفاده کنید. .Sp این پیام تشخیصی در مورد مسیرهایی در کد هشدار می‌دهد که در آن‌ها از مقداری که مشخصاً NULL است ارجاع‌زدایی می‌شود. .Sp ببینید CWE\-476: NULL Pointer Dereference (\f(CW\*(C`https://cwe.mitre.org/data/definitions/476.html\*(C'\fR). .IP \fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR 4 .IX Item "-Wno-analyzer-putenv-of-auto-var" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-putenv\-of\-auto\-var\fR برای غیرفعال کردن آن استفاده کنید. .Sp این پیام تشخیصی در مورد مسیرهایی در کد هشدار می‌دهد که در آن‌ها در یک فراخوانی \f(CW\*(C`putenv\*(C'\fR، اشاره‌گری به یک متغیر خودکار (automatic) یا یک بافر روی پشته پاس داده می‌شود. .Sp ببینید POS34\-C. Do not call \fBputenv()\fR with a pointer to an automatic variable as the argument (\f(CW\*(C`https://wiki.sei.cmu.edu/confluence/x/6NYxBQ\*(C'\fR). .IP \fB\-Wno\-analyzer\-shift\-count\-negative\fR 4 .IX Item "-Wno-analyzer-shift-count-negative" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-shift\-count\-negative\fR برای غیرفعال کردن آن استفاده کنید. .Sp این پیام تشخیصی در مورد مسیرهایی در کد هشدار می‌دهد که در آن‌ها برای یک عمل شیفت (shift)، از مقداری منفی استفاده شده است. این مورد مشابه پیام تشخیصی \fB\-Wshift\-count\-negative\fR پیاده‌سازی‌شده در فرانت‌اندهای C/C++ است، اما به جای تجزیهٔ صرف درخت نحو، بر اساس تحلیل مسیرهای میان‌رویه‌ای پیاده‌سازی شده است. با این وجود، تحلیل‌گر تشخیص چنین مسیرهایی را در اولویت قرار نمی‌دهد، بنابراین احتمال خطاهای منفی کاذب (false negatives) در مقایسه با سایر هشدارها بیشتر است..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 این اعلان تشخیصی در مورد مسیرهایی از کد هشدار می‌دهد که در آن‌ها تلاش شده یک شیفت (shift) با مقداری بزرگ‌تر یا مساوی با دقت نوع عملوند انجام شود. این هشدار مشابه اعلان تشخیصی \fB\-Wshift\-count\-overflow\fR پیاده‌سازی‌شده در فرانت‌اندهای C/C++ است، با این تفاوت که بر پایه تحلیل مسیرهای بین‌روالی پیاده‌سازی شده است، نه صرفاً تجزیه درخت نحو. با این حال، تحلیل‌گر اولویتی برای شناسایی چنین مسیرهایی قائل نمی‌شود، بنابراین احتمال موارد منفی کاذب نسبت به سایر هشدارها بیشتر است. .IP \fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR 4 .IX Item "-Wno-analyzer-stale-setjmp-buffer" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال‌کردن آن از \&\fB\-Wno\-analyzer\-stale\-setjmp\-buffer\fR استفاده کنید. .Sp این اعلان تشخیصی در مورد مسیرهایی از کد هشدار می‌دهد که در آن‌ها \&\f(CW\*(C`longjmp\*(C'\fR برای بازگشت به یک \f(CW\*(C`jmp_buf\*(C'\fR مرتبط با فراخوانی \&\f(CW\*(C`setjmp\*(C'\fR در تابعی که بازگشته است، فراخوانی می‌شود. .Sp هنگامی که \f(CW\*(C`setjmp\*(C'\fR روی یک \f(CW\*(C`jmp_buf\*(C'\fR برای ثبت موقعیت بازگشت فراخوانی می‌شود، فریم پشته را ثبت می‌کند. فریم پشته هنگامی که تابع دربردارنده فراخوانی \f(CW\*(C`setjmp\*(C'\fR بازمی‌گردد، نامعتبر می‌شود. تلاش برای بازگشت به آن از طریق \f(CW\*(C`longjmp\*(C'\fR به فریم پشته‌ای ارجاع می‌دهد که دیگر وجود ندارد و احتمالاً منجر به فروپاشی برنامه (یا بدتر از آن) خواهد شد. .IP \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR 4 .IX Item "-Wno-analyzer-tainted-allocation-size" این هشدار به \fB\-fanalyzer\fR نیاز دارد که آن را فعال می‌کند؛ برای غیرفعال‌کردن آن از \fB\-Wno\-analyzer\-tainted\-allocation\-size\fR استفاده کنید. .Sp این اعلان تشخیصی در مورد مسیرهایی از کد هشدار می‌دهد که در آن‌ها مقداری که می‌تواند تحت واپایش یک مهاجم باشد، بدون پاک‌سازی به عنوان اندازه یک تخصیص حافظه به کار رفته است؛ به گونه‌ای که مهاجم می‌تواند تخصیصی بیش از حد بزرگ را تزریق کرده و به طور بالقوه موجب حمله محروم‌سازی از سرویس شود. .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). برای مثال: .Sp .Vb 1 \& assert (some_tainted_value < SOME_LIMIT); .Ve .Sp در چنین مواردی: .RS 4 .IP * 4 هنگامی که بررسی ادعاها فعال است: مهاجم می‌تواند با تزریق یک شکست ادعا، موجب حمله محروم‌سازی از سرویس شود .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 این اعلان تشخیصی در مورد مسیرهایی از کد هشدار می‌دهد که در آن‌ها مقداری که می‌تواند تحت واپایش یک مهاجم باشد، بدون پاک‌سازی به عنوان مقسوم‌علیه در یک عمل تقسیم یا محاسبه باقی‌مانده (modulus) به کار رفته است؛ به گونه‌ای که مهاجم می‌تواند یک تقسیم بر صفر را تزریق کند. .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 این اعلان تشخیصی در مورد مسیرهایی از کد هشدار می‌دهد که در آن‌ها تفریق اشاره‌گرها در حالی رخ می‌دهد که اشاره‌گرها به قطعه‌های متفاوتی از حافظه اشاره دارند. چنین کدی به رفتار تعریف‌نشده (undefined behavior) متکی است، زیرا تفریق اشاره‌گر فقط برای مواردی تعریف شده است که هر دو اشاره‌گر به داخل (یا بلافاصله بعد از) یک آرایه یکسان اشاره داشته باشند. .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 جهت استخراج مقداری ارسال‌شده به یک فراخوانی با آرگومان‌های متغیر (variadic) را شناسایی می‌کند، اما از نوعی استفاده شده که با نوع عبارت ارسال‌شده به فراخوانی مطابقت ندارد. .Sp رجوع کنید به CWE\-686: Function Call With Incorrect Argument Type (\f(CW\*(C`https://cwe.mitre.org/data/definitions/686.html\*(C'\fR)..IP \fB\-Wno\-analyzer\-va\-list\-exhausted\fR 4 .IX Item "-Wno-analyzer-va-list-exhausted" این هشدار نیازمند \fB\-fanalyzer\fR است که آن را فعال می‌کند؛ از \&\fB\-Wno\-analyzer\-va\-list\-exhausted\fR برای غیرفعال‌سازی آن استفاده کنید. .Sp این پیام تشخیصی برای مسیرهای بین‌روالی درون کُد هشدار می‌دهد که در آن‌ها تحلیل‌گر تلاشی را برای استفاده از \f(CW\*(C`va_arg\*(C'\fR جهت دسترسی به مقدار بعدیِ ارسال‌شده به یک فراخوانی با تعداد متغیر آرگومان (variadic call) شناسایی کند، اما تمام مقادیر موجود در \&\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 را شناسایی کند. با این حال، تحلیل‌گر شناسایی چنین مسیرهایی را در اولویت قرار نمی‌دهد، بنابراین احتمال موارد منفی کاذب (false negatives) در مقایسه با سایر هشدارها بیشتر است. .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) را شناسایی کند. با این حال، تحلیل‌گر شناسایی چنین مسیرهایی را در اولویت قرار نمی‌دهد، بنابراین احتمال موارد منفی کاذب (false negatives) در مقایسه با سایر هشدارها بیشتر است. .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 "*<افزونه‌های GNU ""error"" و ""error_at_line"">" 4 .el .IP "*<افزونه‌های GNU \f(CWerror\fR و \f(CWerror_at_line\fR>" 4 .IX Item "*" .PD 0 .ie n .IP "*<""getpass"">" 4 .el .IP *<\f(CWgetpass\fR> 4 .IX Item "*" .ie n .IP "*<""longjmp"">" 4 .el .IP *<\f(CWlongjmp\fR> 4 .IX Item "*" .ie n .IP "*<""putenv"">" 4 .el .IP *<\f(CWputenv\fR> 4 .IX Item "*" .ie n .IP "*<""setjmp"">" 4 .el .IP *<\f(CWsetjmp\fR> 4 .IX Item "*" .ie n .IP "*<""siglongjmp"">" 4 .el .IP *<\f(CWsiglongjmp\fR> 4 .IX Item "*" .ie n .IP "*<""signal"">" 4 .el .IP *<\f(CWsignal\fR> 4 .IX Item "*" .ie n .IP "*<""sigsetjmp"">" 4 .el .IP *<\f(CWsigsetjmp\fR> 4 .IX Item "*" .ie n .IP "*<""strcat"">" 4 .el .IP *<\f(CWstrcat\fR> 4 .IX Item "*" .ie n .IP "*<""strchr"">" 4 .el .IP *<\f(CWstrchr\fR> 4 .IX Item "*" .ie n .IP "*<""strlen"">" 4 .el .IP *<\f(CWstrlen\fR> 4 .IX Item "*" .PD.PP علاوه بر این، توابع گوناگونی با پیشوند \f(CW\*(C`_\|_analyzer_\*(C'\fR معنای ویژه‌ای برای تحلیل‌گر دارند که در دفترچه راهنمای بخش‌های داخلی GCC (یا GCC Internals) شرح داده شده‌اند. .PP پارامترهای مرتبط برای کنترل کاوش عبارتند از: .IP "*<\fB\-\-param analyzer\-bb\-explosion\-factor=\fR\fIvalue\fR>" 4 .IX Item "*<--param analyzer-bb-explosion-factor=value>" .PD 0 .IP "*<\fB\-\-param analyzer\-max\-enodes\-per\-program\-point=\fR\fIvalue\fR>" 4 .IX Item "*<--param analyzer-max-enodes-per-program-point=value>" .IP "*<\fB\-\-param analyzer\-max\-recursion\-depth=\fR\fIvalue\fR>" 4 .IX Item "*<--param analyzer-max-recursion-depth=value>" .IP "*<\fB\-\-param analyzer\-min\-snodes\-for\-call\-summary=\fR\fIvalue\fR>" 4 .IX Item "*<--param analyzer-min-snodes-for-call-summary=value>" .PD .PP گزینه‌های زیر تحلیل‌گر را کنترل می‌کنند: .IP \fB\-fanalyzer\-call\-summaries\fR 4 .IX Item "-fanalyzer-call-summaries" ساده‌سازی تحلیل میان‌رویه‌ای (interprocedural analysis) با محاسبهٔ اثر فراخوانی‌های خاص، به جای کاوش تمام مسیرهای درون تابع از محل فراخوانی تا هر بازگشت ممکن. .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 به طور پیش‌فرض، تحلیل‌گر بررسی می‌کند که برای هر گزارش تشخیصی که صادر می‌کند، یک مسیر کنترل جریان امکان‌پذیر (feasible) وجود داشته باشد: به این معنی که شرایط برقرارشده با یکدیگر ناسازگار نباشند. گزارش‌های تشخیصی که هیچ مسیر امکان‌پذیری برای آن‌ها یافت نشود، رد می‌شوند. این پالایش را می‌توان با \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، تحلیل‌گر حتی پس از این گزارش‌های تشخیصی نیز به کاوش در چنین مسیرهایی ادامه می‌دهد؛ امری که ممکن است برای اشکال‌زدایی مشکلات درون تحلیل‌گر یا برای معیارسنجی‌های خرد جهت تشخیص رفتار تعریف‌نشده مفید باشد. .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 دوگانه)، هر دو فراخوانی به \f(CW\*(C`free\*(C'\fR نشان داده خواهند شد. .IP \fB1\fR 4 .IX Item "1" مانند سطح قبلی، اما رویدادهای مربوط به ورود به هر تابع را نیز نشان می‌دهد. .IP \fB2\fR 4 .IX Item "2" مانند سطح قبلی، اما همچنین رویدادهای مربوط به جریان کنترل را که در بروز مشکل نقش مهمی داشته‌اند نشان می‌دهد (مانند «طی شدن مسیر درست/true» در یک شرط). .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" تخلیهٔ نمایشی از «گراف گسترده» مناسب برای مشاهده با GraphViz در فایل \fIfile.eg.dot\fR. گره‌ها بر اساس وضعیت‌های ماشین وضعیت با رنگ‌های مشخص کدگذاری شده‌اند تا تغییرات وضعیت برجسته شوند. .IP \fB\-fdump\-analyzer\-exploded\-nodes\fR 4 .IX Item "-fdump-analyzer-exploded-nodes" صدور گزارش‌های تشخیصی که نشان می‌دهند گره‌های موجود در «گراف گسترده» در چه موقعیتی نسبت به کد مبدأ برنامه قرار دارند..IP \fB\-fdump\-analyzer\-exploded\-nodes\-2\fR 4 .IX Item "-fdump-analyzer-exploded-nodes-2" تخلیه یک نمایش متنی از «گراف بسط‌یافته» (exploded graph) در \&\fIfile.eg.txt\fR. .IP \fB\-fdump\-analyzer\-exploded\-nodes\-3\fR 4 .IX Item "-fdump-analyzer-exploded-nodes-3" تخلیه یک نمایش متنی از «گراف بسط‌یافته» به ازای هر گره در یک فایل تخلیه، در \fIfile.eg\-id.txt\fR. این کار معمولاً منجر به تعداد بسیار زیادی فایل تخلیه می‌شود. .IP \fB\-fdump\-analyzer\-exploded\-paths\fR 4 .IX Item "-fdump-analyzer-exploded-paths" تخلیه یک نمایش متنی از «مسیر بسط‌یافته» (exploded path) برای هر گزارش عیب‌یابی در \fIfile.idx.kind.epath.txt\fR. .IP \fB\-fdump\-analyzer\-feasibility\fR 4 .IX Item "-fdump-analyzer-feasibility" تخلیه جزئیات داخلی درباره جستجوی تحلیل‌گر برای مسیرهای شدنی (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. این فایل‌ها تمام گراف‌های جریان کنترل در برنامه را، به همراه یال‌های بین‌روالی برای فراخوانی‌ها و بازگشت‌ها نشان می‌دهند. تخلیه دوم شامل حاشیه‌نویسی‌هایی است که گره‌ها را در «گراف بسط‌یافته» و گزارش‌های عیب‌یابی مرتبط با آن‌ها نشان می‌دهد. .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، برخی گذرهای کامپایلر که اطلاعات مفید برای اشکال‌زدایی را جمع‌آوری می‌کنند اصلاً اجرا نمی‌شوند، به طوری که \&\fB\-Og\fR ممکن است به تجربه اشکال‌زدایی بهتری بیانجامد. .IP \fB\-g\fR 4 .IX Item "-g" تولید اطلاعات اشکال‌زدایی در قالب بومی سیستم‌عامل (stabs، COFF، XCOFF یا DWARF). ابزار GDB می‌تواند با این اطلاعات اشکال‌زدایی کار کند. .Sp در بیشتر سیستم‌هایی که از قالب stabs استفاده می‌کنند، \fB\-g\fR استفاده از اطلاعات اشکال‌زدایی اضافی را که فقط GDB قادر به استفاده از آن است فعال می‌کند؛ این اطلاعات اضافی باعث عملکرد بهتر اشکال‌زدایی در GDB می‌شود اما احتمالاً باعث فروپاشی (crash) یا امتناع سایر اشکال‌زداها از خواندن برنامه می‌شود. اگر می‌خواهید با اطمینان تولید اطلاعات اضافی را کنترل کنید، از \fB\-gvms\fR استفاده نمایید (پایین را ببینید). .IP \fB\-ggdb\fR 4 .IX Item "-ggdb" تولید اطلاعات اشکال‌زدایی برای استفاده توسط GDB. این به معنای استفاده از رساترین قالب موجود (DWARF، stabs یا در صورت عدم پشتیبانی از هیچ‌یک از این دو، قالب بومی)، شامل پسوندهای اختصاصی GDB در صورت امکان است. .IP \fB\-gdwarf\fR 4 .IX Item "-gdwarf" .PD 0 .IP \fB\-gdwarf\-\fR\fIversion\fR 4 .IX Item "-gdwarf-version" .PD تولید اطلاعات اشکال‌زدایی در قالب DWARF (در صورت پشتیبانی). مقدار \fIversion\fR می‌تواند 2، 3، 4 یا 5 باشد؛ نسخه پیش‌فرض برای بیشتر مقصدها 5 است (به استثنای VxWorks، TPF و Darwin / macOS که به طور پیش‌فرض از نسخه 2 استفاده می‌کنند، و AIX که نسخه پیش‌فرض آن 4 است). .Sp توجه داشته باشید که در DWARF نسخه 2، برخی پورت‌ها به افزونه‌های بدون تداخل DWARF 3 در جدول‌های بازکردن پشته (unwind tables) نیاز دارند و همواره از آن‌ها استفاده می‌کنند. .Sp نسخه 4 ممکن است برای بهره‌مندی حداکثری به GDB 7.0 و \fB\-fvar\-tracking\-assignments\fR نیاز داشته باشد. نسخه 5 به GDB 8.0 یا بالاتر نیاز دارد. .Sp ‏GCC دیگر از DWARF نسخه 1 که تفاوت‌های بنیادینی با نسخه 2 و بالاتر دارد پشتیبانی نمی‌کند. به دلایل تاریخی، برخی گزینه‌های مرتبط با DWARF (مانند \&\fB\-fno\-dwarf2\-cfi\-asm\fR) ارجاع به DWARF نسخه 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، اطلاعات نوع برای انواع استفاده‌شده در جابه‌جایی‌های BPF CO\-RE نیز منتشر می‌شود. علاوه بر این، انواع struct و union که فقط از طریق اشاره‌گرها از اعضای سایر انواع struct یا union به آن‌ها ارجاع داده شده است هرس شده و با BTF_KIND_FWD جایگزین می‌شوند، گویی آن انواع صرفاً به عنوان اعلان‌های پیش‌رو (forward declarations) در ورودی حضور داشته‌اند. .Sp این گزینه اندازه اطلاعات BTF تولیدشده را به طور چشمگیری کاهش می‌دهد، اما با از دست رفتن بخش قابل توجهی از جزئیات نوع داده‌ها همراه است. این گزینه در درجه اول هنگام کامپایل برای مقصد BPF، جهت به حداقل رساندن اندازه شیء خروجی و حذف اطلاعات BTF که ارتباط مستقیمی با فرایند بارگذاری برنامه BPF ندارند مفید است. .Sp این گزینه هنگام تولید اطلاعات BTF برای مقصد BPF به طور پیش‌فرض فعال است. .IP \fB\-gctf\fR 4 .IX Item "-gctf" .PD 0 .IP \fB\-gctf\fR\fIlevel\fR 4 .IX Item "-gctflevel" .PD درخواست اطلاعات اشکال‌زدایی CTF و استفاده از \fIlevel\fR برای مشخص کردن میزان تولید اطلاعات اشکال‌زدایی CTF. اگر \fB\-gctf\fR بدون مشخص کردن مقداری برای \fIlevel\fR تعیین شود، سطح پیش‌فرض اطلاعات اشکال‌زدایی CTF برابر 2 خواهد بود. .Sp اطلاعات اشکال‌زدایی CTF می‌تواند هم‌زمان با اطلاعات اشکال‌زدایی DWARF تولید شود، به شرط آن‌که هر دو قالب اشکال‌زدایی به صورت صریح از طریق گزینه‌های خط فرمان مربوطه فعال شده باشند. .Sp سطح 0 هیچ اطلاعات اشکال‌زدایی CTF تولید نمی‌کند. بنابراین، \fB\-gctf0\fR گزینه \fB\-gctf\fR را نفی و خنثی می‌کند. .Sp سطح 1 اطلاعات CTF را فقط برای ردگیری‌ها (tracebacks) تولید می‌کند. این سطح شامل اطلاعات محل فراخوانی (callsite) است، اما اطلاعات نوع را در بر نمی‌گیرد. .Sp سطح 2 اطلاعات نوع را فقط برای موجودیت‌ها (توابع، اشیای داده و غیره) در حوزه فایل یا حوزه سراسری تولید می‌کند. .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 برای تعیین میزان اطلاعات. سطح پیش‌فرض 2 است. .Sp سطح 0 هیچ اطلاعات اشکال‌زدایی تولید نمی‌کند. بنابراین، \fB\-g0\fR گزینه \&\fB\-g\fR را نفی و بی‌اثر می‌کند. .Sp سطح 1 حداقل اطلاعات را تولید می‌کند، به اندازه‌ای که برای ایجاد ردگیری پشته (backtrace) در بخش‌هایی از برنامه که قصد اشکال‌زدایی آن‌ها را ندارید کافی باشد. این اطلاعات شامل توصیف توابع و متغیرهای خارجی و جداول شماره خطوط است، اما اطلاعاتی درباره متغیرهای محلی ارائه نمی‌دهد. .Sp سطح 3 شامل اطلاعات اضافی است، از جمله تمام تعاریف ماکرو موجود در برنامه. برخی اشکال‌زداها هنگام استفاده از \fB\-g3\fR از بسط ماکرو پشتیبانی می‌کنند. .Sp اگر از چندین گزینه \fB\-g\fR، همراه با یا بدون شماره سطح استفاده کنید، آخرین گزینه اعمال‌شده همان گزینه‌ای است که مؤثر خواهد بود. .Sp گزینه \&\fB\-gdwarf\fR سطح اشکال‌زدایی متصل را نمی‌پذیرد تا از سردرگمی با \fB\-gdwarf\-\fR\fIlevel\fR جلوگیری شود. در عوض، از یک گزینه اضافی \fB\-g\fR\fIlevel\fR برای تغییر سطح اشکال‌زدایی برای DWARF استفاده کنید. .IP \fB\-fno\-eliminate\-unused\-debug\-symbols\fR 4 .IX Item "-fno-eliminate-unused-debug-symbols" به طور پیش‌فرض، هیچ اطلاعات اشکال‌زدایی برای نمادهایی که در عمل استفاده نشده‌اند تولید نمی‌شود. اگر می‌خواهید اطلاعات اشکال‌زدایی برای تمام نمادها تولید شود از این گزینه استفاده کنید..IP \fB\-femit\-class\-debug\-always\fR 4 .IX Item "-femit-class-debug-always" به جای تولید اطلاعات اشکال‌زدایی برای یک کلاس ++C تنها در یک فایل شیء (object file)، آن را در تمام فایل‌های شیءِ استفاده‌کننده از آن کلاس تولید می‌کند. این گزینه باید تنها با دیباگرهایی استفاده شود که قادر به مدیریت روش معمول GCC در تولید اطلاعات اشکال‌زدایی برای کلاس‌ها نیستند، چرا که استفاده از این گزینه حجم اطلاعات اشکال‌زدایی را تا دو برابر افزایش می‌دهد. .IP \fB\-fno\-merge\-debug\-strings\fR 4 .IX Item "-fno-merge-debug-strings" به پیونددهنده (linker) دستور می‌دهد رشته‌های یکسان در اطلاعات اشکال‌زدایی مربوط به فایل‌های شیء مختلف را با یکدیگر ادغام نکند. ادغام توسط همهٔ اسمبلرها یا پیونددهنده‌ها پشتیبانی نمی‌شود. ادغام، حجم اطلاعات اشکال‌زدایی را در فایل خروجی کاهش می‌دهد، اما به بهای افزایش زمان پردازش پیوند. ادغام به طور پیش‌فرض فعال است. .IP \fB\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR 4 .IX Item "-fdebug-prefix-map=old=new" هنگام کامپایل فایل‌های واقع در پوشهٔ \fIold\fR، اطلاعات اشکال‌زدایی مربوط به آن‌ها را طوری ثبت می‌کند که گویی فایل‌ها در پوشهٔ \fInew\fR قرار دارند. این گزینه می‌تواند برای جایگزین کردن یک مسیر زمان ساخت (build\-time) با یک مسیر زمان نصب (install\-time) در اطلاعات اشکال‌زدایی به کار رود. همچنین می‌توان از آن برای تبدیل یک مسیر مطلق به یک مسیر نسبی با استفاده از \&\fI.\fR برای \fInew\fR استفاده کرد. این کار می‌تواند منجر به ساخت‌های بازتولیدپذیرتری (reproducible builds) شود که مستقل از مکان هستند، اما ممکن است برای تعیین محل فایل‌های منبع به یک دستور اضافی در GDB نیاز داشته باشد. همچنین گزینه‌های \fB\-ffile\-prefix\-map\fR و \fB\-fcanon\-prefix\-map\fR را ببینید. .IP \fB\-fvar\-tracking\fR 4 .IX Item "-fvar-tracking" گذر ردیابی متغیر (variable tracking pass) را اجرا می‌کند. این گذر مشخص می‌کند که در هر نقطه از کد، متغیرها در کجا ذخیره شده‌اند. سپس اطلاعات اشکال‌زدایی بهتری تولید می‌شود (در صورتی که قالب اطلاعات اشکال‌زدایی از این اطلاعات پشتیبانی کند). .Sp این گزینه به طور پیش‌فرض هنگام کامپایل با بهینه‌سازی (\fB\-Os\fR، \&\fB\-O\fR، \fB\-O2\fR، ...)، اطلاعات اشکال‌زدایی (\fB\-g\fR) و در صورتی که قالب اطلاعات اشکال‌زدایی از آن پشتیبانی کند، فعال است. .IP \fB\-fvar\-tracking\-assignments\fR 4 .IX Item "-fvar-tracking-assignments" انتساب‌ها به متغیرهای کاربر را در مراحل اولیهٔ کامپایل یادداشت‌گذاری (annotate) می‌کند و تلاش می‌کند این یادداشت‌ها را در سراسر فرایند کامپایل تا انتها حفظ کند، تا اطلاعات اشکال‌زدایی در حین بهینه‌سازی بهبود یابد. استفاده از \fB\-gdwarf\-4\fR همراه با آن توصیه می‌شود. .Sp این گزینه حتی در صورت غیرفعال بودن var\-tracking نیز می‌تواند فعال شود، که در این حالت یادداشت‌ها ایجاد و نگهداری می‌شوند اما در پایان دور ریخته می‌شوند. به طور پیش‌فرض، این پرچم به همراه \fB\-fvar\-tracking\fR فعال است، مگر اینکه زمان‌بندی انتخابی (selective scheduling) فعال شده باشد. .IP \fB\-gsplit\-dwarf\fR 4 .IX Item "-gsplit-dwarf" اگر اطلاعات اشکال‌زدایی DWARF فعال باشد، تا حد امکان اطلاعات اشکال‌زدایی را در یک فایل خروجی مجزا با پسوند \&\fI.dwo\fR جدا می‌کند. این گزینه به سیستم ساخت اجازه می‌دهد از پیوند دادن فایل‌ها با اطلاعات اشکال‌زدایی اجتناب کند. برای مفید بودن، این گزینه نیازمند دیباگری است که توانایی خواندن فایل‌های \fI.dwo\fR را داشته باشد. .IP \fB\-gdwarf32\fR 4 .IX Item "-gdwarf32" .PD 0 .IP \fB\-gdwarf64\fR 4 .IX Item "-gdwarf64" .PD اگر اطلاعات اشکال‌زدایی DWARF فعال باشد، گزینهٔ \fB\-gdwarf32\fR قالب ۳۲ بیتی DWARF و گزینهٔ \fB\-gdwarf64\fR قالب ۶۴ بیتی DWARF را انتخاب می‌کند. پیش‌فرض وابسته به معماری مقصد است، با این حال در بیشتر مقصدها \&\fB\-gdwarf32\fR است. قالب ۳۲ بیتی DWARF کوچکتر است، اما نمی‌تواند بیش از ۲ گیبی‌بایت اطلاعات اشکال‌زدایی را در هیچ‌یک از بخش‌های اطلاعات اشکال‌زدایی DWARF پشتیبانی کند. قالب ۶۴ بیتی DWARF اجازهٔ اطلاعات اشکال‌زدایی حجیم‌تری را می‌دهد اما ممکن است هنوز توسط همهٔ مصرف‌کنندگان به خوبی پشتیبانی نشود. .IP \fB\-gdescribe\-dies\fR 4 .IX Item "-gdescribe-dies" صفت‌های توصیفی را به برخی از DIEهای DWARF که فاقد صفت نام هستند، مانند متغیرهای ساختگی (artificial variables)، ارجاعات خارجی و DIEهای پارامتر نقطهٔ فراخوانی (call site parameter DIEs) اضافه می‌کند. .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 index) تولید می‌کند. این گزینه تنها با پیونددهنده‌ای مفید است که بتواند نمایهٔ GDB نسخهٔ ۷ را تولید کند. .IP \fB\-fdebug\-types\-section\fR 4 .IX Item "-fdebug-types-section" هنگام استفاده از DWARF نسخهٔ ۴ یا بالاتر، DIEهای نوع (type DIEs) می‌توانند به جای اینکه بخشی از بخش \&\f(CW\*(C`.debug_info\*(C'\fR باشند، در بخش اختصاصی خود یعنی \f(CW\*(C`.debug_types\*(C'\fR قرار گیرند. قرار دادن آن‌ها در یک بخش مجزای comdat کارآمدتر است، زیرا پیونددهنده می‌تواند موارد تکراری را حذف کند. با این حال، هنوز همهٔ مصرف‌کنندگان DWARF از بخش‌های \f(CW\*(C`.debug_types\*(C'\fR پشتیبانی نمی‌کنند و در برخی فایل‌های شیء، \f(CW\*(C`.debug_types\*(C'\fR به جای کوچک‌تر کردن اطلاعات اشکال‌زدایی، آن را بزرگ‌تر می‌کند. .IP \fB\-grecord\-gcc\-switches\fR 4 .IX Item "-grecord-gcc-switches" .PD 0 .IP \fB\-gno\-record\-gcc\-switches\fR 4 .IX Item "-gno-record-gcc-switches" .PD این سوییچ باعث می‌شود گزینه‌های خط فرمانی که برای فراخوانی کامپایلر استفاده شده و ممکن است بر تولید کد تأثیر بگذارند، به صفت DW_AT_producer در اطلاعات اشکال‌زدایی DWARF ضمیمه شوند. این گزینه‌ها با فاصله از یکدیگر و از نسخهٔ کامپایلر جدا و به هم متصل می‌شوند. این گزینه به طور پیش‌فرض فعال است. همچنین برای روشی دیگر جهت ذخیرهٔ گزینه‌های کامپایلر در فایل شیء، \fB\-frecord\-gcc\-switches\fR را ببینید. .IP \fB\-gstrict\-dwarf\fR 4 .IX Item "-gstrict-dwarf" استفاده از افزونه‌های نسخه‌های استاندارد DWARF جدیدتر از نسخهٔ انتخاب‌شده با \fB\-gdwarf\-\fR\fIversion\fR را غیرمجاز می‌کند. در بیشتر مقصدها، استفاده از افزونه‌های DWARF بدون تداخل از نسخه‌های استاندارد بعدی مجاز است. .IP \fB\-gno\-strict\-dwarf\fR 4 .IX Item "-gno-strict-dwarf" استفاده از افزونه‌های نسخه‌های استاندارد DWARF جدیدتر از نسخهٔ انتخاب‌شده با \&\fB\-gdwarf\-\fR\fIversion\fR را مجاز می‌کند. .IP \fB\-gas\-loc\-support\fR 4 .IX Item "-gas-loc-support" به کامپایلر اطلاع می‌دهد که اسمبلر از رهنمودهای \f(CW\*(C`.loc\*(C'\fR پشتیبانی می‌کند. در این صورت کامپایلر می‌تواند از آن‌ها استفاده کند تا اسمبلر جدول‌های شماره خط DWARF2+ را تولید نماید. .Sp این حالت عموماً مطلوب است، زیرا جدول‌های شماره خط تولیدشده توسط اسمبلر بسیار فشرده‌تر از جدول‌هایی هستند که خود کامپایلر می‌تواند تولید کند. .Sp اگر در زمان پیکربندی GCC، مشخص شود که اسمبلر از چنین رهنمودهایی پشتیبانی می‌کند، این گزینه به طور پیش‌فرض فعال خواهد شد. .IP \fB\-gno\-as\-loc\-support\fR 4 .IX Item "-gno-as-loc-support" در صورتی که قرار باشد جدول‌های شماره خط DWARF2+ تولید شوند، GCC را مجبور می‌کند این جدول‌ها را به صورت داخلی تولید کند. .IP \fB\-gas\-locview\-support\fR 4 .IX Item "-gas-locview-support" به کامپایلر اطلاع می‌دهد که اسمبلر از تخصیص \f(CW\*(C`view\*(C'\fR و بررسی ادعای بازنشانی (reset assertion checking) در رهنمودهای \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 numbers) را به صورت داخلی تخصیص دهد. .IP \fB\-gcolumn\-info\fR 4 .IX Item "-gcolumn-info" .PD 0 .IP \fB\-gno\-column\-info\fR 4 .IX Item "-gno-column-info" .PD اطلاعات ستون موقعیت را به جای فقط فایل و خط، در اطلاعات اشکال‌زدایی DWARF درج می‌کند. این گزینه به طور پیش‌فرض فعال است. .IP \fB\-gstatement\-frontiers\fR 4 .IX Item "-gstatement-frontiers" .PD 0 .IP \fB\-gno\-statement\-frontiers\fR 4 .IX Item "-gno-statement-frontiers" .PD این گزینه باعث می‌شود که GCC در نمایش داخلی (internal representation) در ابتدای دستورها نشانگرهایی ایجاد کرده و آن‌ها را تقریباً در سراسر فرایند کامپایل در جای خود حفظ کند، و از آن‌ها برای هدایت خروجی نشانگرهای \f(CW\*(C`is_stmt\*(C'\fR در جدول شماره خط استفاده نماید. این گزینه به طور پیش‌فرض هنگام کامپایل با بهینه‌سازی (\fB\-Os\fR، \fB\-O1\fR، \fB\-O2\fR، \&...) و تولید اطلاعات اشکال‌زدایی DWARF 2 در سطح عادی فعال است. .IP \fB\-gvariable\-location\-views\fR 4 .IX Item "-gvariable-location-views" .PD 0 .IP \fB\-gvariable\-location\-views=incompat5\fR 4 .IX Item "-gvariable-location-views=incompat5" .IP \fB\-gno\-variable\-location\-views\fR 4 .IX Item "-gno-variable-location-views" .PD فهرست‌های موقعیت متغیرها را با شماره‌های نمای پیش‌رونده (progressive view numbers) که از جدول شماره خط استنباط می‌شوند، تکمیل می‌کند. این امر به مصرف‌کنندگان اطلاعات اشکال‌زدایی امکان می‌دهد تا وضعیت برنامه را در نقاط خاصی بررسی کنند، حتی اگر در آن نقطه هیچ دستورالعمل مرتبط با موقعیت‌های مبدأ متناظر وجود نداشته باشد. اگر اسمبلر از شماره‌های نما در جدول‌های شماره خط پشتیبانی نکند، این امر باعث می‌شود که کامپایلر جدول شماره خط را تولید کند که معمولاً فشردگی آن را تا حدی کاهش می‌دهد. جدول‌های شماره خط و فهرست‌های موقعیت تکمیل‌شده کاملاً با نسخه‌های پیشین سازگارند، بنابراین می‌توانند توسط مصرف‌کنندگانی از اطلاعات اشکال‌زدایی که از این ارتقاها آگاه نیستند نیز مصرف شوند، هرچند که از مزایای آن‌ها نیز بهره‌مند نخواهند شد. .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 length) داشته باشد که همیشه این‌طور نیست، و ممکن است در صورت استفاده از اسمبلری که از فهرست‌های نمای موقعیت پشتیبانی نمی‌کند، باعث تولید خاموش فهرست‌های نمای نادرست شود. اسمبلر گنو (GNU assembler) هرگونه خطای این‌چنینی را به عنوان یک \f(CW\*(C`view number mismatch\*(C'\fR پرچم‌گذاری می‌کند. این گزینه تنها بر روی پورت‌هایی فعال است که یک تابع برآورد قابل‌اعتماد تعریف کرده باشند..IP \fB\-ginline\-points\fR 4 .IX Item "-ginline-points" .PD 0 .IP \fB\-gno\-inline\-points\fR 4 .IX Item "-gno-inline-points" .PD تولید اطلاعات اشکال‌زدایی گسترش‌یافته برای توابع درون‌خطی‌شده (inlined). نشانگرهای ردیابی نمای مکان در نقاط ورود درون‌خطی درج می‌شوند تا شماره‌های آدرس و نما قابل محاسبه بوده و در اطلاعات اشکال‌زدایی در خروجی قرار گیرند. این قابلیت می‌تواند مستقل از نماهای مکان فعال شود که در این صورت، شماره‌های نما در خروجی درج نمی‌شوند؛ اما این گزینه تنها همراه با مرزهای عبارت (statement frontiers) قابل فعال‌سازی است و به‌طور پیش‌فرض تنها زمانی فعال می‌شود که نماهای مکان فعال باشند. .IP \fB\-gz\fR[\fB=\fR\fItype\fR] 4 .IX Item "-gz[=type]" تولید بخش‌های اشکال‌زدایی فشرده‌شده در قالب DWARF، در صورتی که پشتیبانی شود. اگر \fItype\fR مشخص نشود، نوع پیش‌فرض به توانایی‌های اسمبلر و پیونددهندهٔ مورد استفاده بستگی دارد. \fItype\fR می‌تواند یکی از مقادیر \&\fBnone\fR (بخش‌های اشکال‌زدایی فشرده نشوند) یا \fBzlib\fR (استفاده از فشرده‌سازی zlib در قالب ELF gABI) باشد. اگر پیونددهنده از نوشتن بخش‌های اشکال‌زدایی فشرده پشتیبانی نکند، این گزینه رد می‌شود. در غیر این صورت، اگر اسمبلر از آن‌ها پشتیبانی نکند، هنگام تولید فایل‌های شیء، \fB\-gz\fR بدون هشدار نادیده گرفته می‌شود. .IP \fB\-femit\-struct\-debug\-baseonly\fR 4 .IX Item "-femit-struct-debug-baseonly" تولید اطلاعات اشکال‌زدایی برای انواع شبیه به ساختار (struct\-like) تنها هنگامی که نام پایهٔ فایل منبع کامپایل با نام پایهٔ فایلی که ساختار در آن تعریف شده است مطابقت داشته باشد. .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) استفاده شده‌اند محدود می‌کند. یک نوع ساختار هنگامی مستقیماً استفاده می‌شود که نوع یک متغیر یا عضو باشد. استفاده‌های غیرمستقیم از طریق اشاره‌گرها به ساختارها حاصل می‌شوند؛ یعنی هنگامی که استفاده از یک ساختار ناکامل (incomplete struct) معتبر باشد، استفاده غیرمستقیم است. برای مثال: \&\fBstruct one direct; struct two * indirect;\fR. .Sp کلمهٔ اختیاری دوم، مشخصه را به ساختارهای معمولی (\fBord:\fR) یا ساختارهای عمومی/جنریک (\fBgen:\fR) محدود می‌کند. توضیح ساختارهای جنریک کمی پیچیده است. در ++C، این‌ها تخصیص‌های غیرصریح از کلاس‌های الگو (non\-explicit specializations of template classes)، یا کلاس‌های غیرالگو درون موارد فوق هستند. زبان‌های برنامه‌نویسی دیگر دارای generics هستند، اما \fB\-femit\-struct\-debug\-detailed\fR هنوز آن‌ها را پیاده‌سازی نکرده است. .Sp کلمهٔ سوم، فایل‌های منبع ساختارهایی را مشخص می‌کند که کامپایلر باید برای آن‌ها اطلاعات اشکال‌زدایی تولید کند. مقادیر \fBnone\fR و \fBany\fR معانی معمول خود را دارند. مقدار \fBbase\fR بدان معناست که نام پایهٔ فایلی که اعلان نوع در آن قرار دارد باید با نام پایهٔ فایل اصلی کامپایل مطابقت داشته باشد. در عمل، این یعنی هنگام کامپایل \fIfoo.c\fR، اطلاعات اشکال‌زدایی برای انواع اعلان‌شده در آن فایل و \fIfoo.h\fR تولید می‌شود، اما برای سایر فایل‌های سرآیند تولید نمی‌شود. مقدار \fBsys\fR به معنای انواعی است که شرایط \fBbase\fR را برآورده می‌کنند یا در سرآیندهای سیستم یا کامپایلر اعلان شده‌اند. .Sp ممکن است برای یافتن بهترین تنظیمات برای برنامهٔ خود، نیاز به آزمایش داشته باشید. .Sp مقدار پیش‌فرض \fB\-femit\-struct\-debug\-detailed=all\fR است. .Sp این گزینه فقط با خروجی اشکال‌زدایی DWARF کار می‌کند. .IP \fB\-fno\-dwarf2\-cfi\-asm\fR 4 .IX Item "-fno-dwarf2-cfi-asm" تولید اطلاعات بازکردن پشته (unwind) در 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 بدون تعیین هیچ گزینهٔ بهینه‌سازی، هدف کامپایلر کاهش هزینه و زمان کامپایل و تضمین تولید نتایج مورد انتظار در حین اشکال‌زدایی است. عبارات از یکدیگر مستقل هستند: اگر برنامه را با یک نقطهٔ توقف (breakpoint) بین عبارات متوقف کنید، می‌توانید مقداری جدید به هر متغیر اختصاص دهید یا شمارندهٔ برنامه (program counter) را به هر عبارت دیگری در تابع تغییر داده و دقیقاً نتایجی را که از کد منبع انتظار دارید دریافت کنید. .PP فعال کردن پرچم‌های بهینه‌سازی باعث می‌شود کامپایلر برای بهبود کارایی و/یا کاهش حجم کد به قیمت افزایش زمان کامپایل و احتمالاً کاهش توانایی اشکال‌زدایی برنامه تلاش کند. .PP کامپایلر بهینه‌سازی را بر اساس شناختی که از برنامه دارد انجام می‌دهد. کامپایل همزمان چندین فایل در قالب یک فایل خروجی واحد، به کامپایلر اجازه می‌دهد تا هنگام کامپایل هر یک از آن‌ها، از اطلاعات به‌دست‌آمده از تمامی فایل‌ها استفاده کند. .PP همهٔ بهینه‌سازی‌ها مستقیماً با یک پرچم کنترل نمی‌شوند. تنها بهینه‌سازی‌هایی که دارای پرچم هستند در این بخش فهرست شده‌اند. .PP بیشتر بهینه‌سازی‌ها در سطح \fB\-O0\fR یا در صورتی که سطح \fB\-O\fR در خط فرمان مشخص نشده باشد، کاملاً غیرفعال هستند؛ حتی اگر پرچم‌های بهینه‌سازی به صورت جداگانه تعیین شده باشند. به همین ترتیب، \fB\-Og\fR بسیاری از گذرهای (passes) بهینه‌سازی را غیرفعال می‌کند. .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های محاسبه‌شده (computed gotos) استفاده می‌کنند توجه داشته باشید. .IP \fB\-O3\fR 4 .IX Item "-O3" بهینه‌سازی باز هم بیشتر. \fB\-O3\fR تمام بهینه‌سازی‌های مشخص‌شده توسط \fB\-O2\fR را فعال کرده و همچنین پرچم‌های بهینه‌سازی زیر را روشن می‌کند: .Sp \&\fB\-fgcse\-after\-reload \&\-fipa\-cp\-clone \&\-floop\-interchange \&\-floop\-unroll\-and\-jam \&\-fpeel\-loops \&\-fpredictive\-commoning \&\-fsplit\-loops \&\-fsplit\-paths \&\-ftree\-loop\-distribution \&\-ftree\-partial\-pre \&\-funswitch\-loops \&\-fvect\-cost\-model=dynamic \&\-fversion\-loops\-for\-strides\fR .IP \fB\-O0\fR 4 .IX Item "-O0" کاهش زمان کامپایل و حصول اطمینان از اینکه دیباگ کردن نتایج مورد انتظار را حاصل می‌کند. این حالت پیش‌فرض است. .Sp در سطح \fB\-O0\fR، کامپایلر GCC اکثر مراحل بهینه‌سازی را کاملاً غیرفعال می‌کند؛ این مراحل حتی اگر صراحتاً در خط فرمان فعال شوند یا توسط \fB\-Q \-\-help=optimizers\fR به عنوان فعال به طور پیش‌فرض فهرست شده باشند نیز اجرا نخواهند شد. بسیاری از بهینه‌سازی‌های انجام‌شده توسط GCC به تحلیل کد یا مراحل استانداردسازی (canonicalization) که توسط \fB\-O\fR فعال می‌شوند وابسته‌اند و اجرای مراحل بهینه‌سازی به صورت منفرد و ایزوله سودمند نخواهد بود. .IP \fB\-Os\fR 4 .IX Item "-Os" بهینه‌سازی برای اندازه (حجم کد). \fB\-Os\fR تمامی بهینه‌سازی‌های \fB\-O2\fR را به جز مواردی که غالباً اندازه کد را افزایش می‌دهند، فعال می‌کند: .Sp \&\fB\-falign\-functions \-falign\-jumps \&\-falign\-labels \-falign\-loops \&\-fprefetch\-loop\-arrays \-freorder\-blocks\-algorithm=stc\fR .Sp این گزینه همچنین \fB\-finline\-functions\fR را فعال کرده، سبب می‌شود کامپایلر به جای سرعت اجرا برای اندازه کد تنظیم شود و بهینه‌سازی‌های بیشتری را که برای کاهش اندازه کد طراحی شده‌اند انجام دهد. .IP \fB\-Ofast\fR 4 .IX Item "-Ofast" صرف‌نظر کردن از انطباق دقیق با استانداردها. \fB\-Ofast\fR تمام بهینه‌سازی‌های \fB\-O3\fR را فعال می‌کند. این گزینه همچنین بهینه‌سازی‌هایی را که برای همه برنامه‌های منطبق بر استاندارد معتبر نیستند، فعال می‌نماید. این گزینه پرچم‌های \fB\-ffast\-math\fR، \fB\-fallow\-store\-data\-races\fR و پرچم مختص فرترن \fB\-fstack\-arrays\fR (مگر اینکه \fB\-fmax\-stack\-var\-size\fR مشخص شده باشد) و \fB\-fno\-protect\-parens\fR را فعال می‌کند. این گزینه \fB\-fsemantic\-interposition\fR را غیرفعال می‌سازد. .IP \fB\-Og\fR 4 .IX Item "-Og" بهینه‌سازی تجربه دیباگ. \fB\-Og\fR باید سطح بهینه‌سازی انتخابی برای چرخه استاندارد ویرایش\-کامپایل\-دیباگ باشد که سطح معقولی از بهینه‌سازی را در حین حفظ سرعت بالای کامپایل و یک تجربه دیباگ مناسب فراهم می‌کند. این گزینه برای تولید کد قابل دیباگ انتخاب بهتری نسبت به \fB\-O0\fR است، چرا که برخی از مراحل کامپایلر که اطلاعات دیباگ را جمع‌آوری می‌کنند در \fB\-O0\fR غیرفعال هستند. .Sp همانند \fB\-O0\fR، گزینه \fB\-Og\fR نیز تعدادی از مراحل بهینه‌سازی را به طور کامل غیرفعال می‌کند تا گزینه‌های منفرد کنترل‌کننده آن‌ها هیچ اثری نداشته باشند. در غیر این صورت، \fB\-Og\fR تمام پرچم‌های بهینه‌سازی \fB\-O1\fR را به جز مواردی که ممکن است با فرایند دیباگ تداخل داشته باشند، فعال می‌کند: .Sp \&\fB\-fbranch\-count\-reg \-fdelayed\-branch \&\-fdse \-fif\-conversion \-fif\-conversion2 \&\-finline\-functions\-called\-once \&\-fmove\-loop\-invariants \-fmove\-loop\-stores \-fssa\-phiopt \&\-ftree\-bit\-ccp \-ftree\-dse \-ftree\-pta \-ftree\-sra\fR .IP \fB\-Oz\fR 4 .IX Item "-Oz" بهینه‌سازی تهاجمی برای اندازه به جای سرعت. این ممکن است تعداد دستورالعمل‌های اجراشده را افزایش دهد اگر آن دستورالعمل‌ها به بایت‌های کمتری برای کدگذاری نیاز داشته باشند. عملکرد \fB\-Oz\fR مشابه \fB\-Os\fR است، از جمله فعال‌سازی اکثر بهینه‌سازی‌های \fB\-O2\fR. .PP اگر از چندین گزینه \fB\-O\fR با یا بدون شماره سطح استفاده کنید، آخرین گزینه از این دست همان گزینه‌ای است که مؤثر خواهد بود. .PP گزینه‌هایی به فرم \fB\-f\fR\fIflag\fR پرچم‌های مستقل از ماشین را مشخص می‌کنند. بیشتر پرچم‌ها هم فرم مثبت و هم منفی دارند؛ فرم منفی \fB\-ffoo\fR برابر با \fB\-fno\-foo\fR است. در جدول زیر، تنها یکی از فرم‌ها فهرست شده است\-\-\-همانی که معمولاً استفاده می‌کنید. می‌توانید با حذف یا افزودن \fBno\-\fR، فرم دیگر را بیابید. .PP گزینه‌های زیر بهینه‌سازی‌های خاصی را کنترل می‌کنند. این موارد یا توسط گزینه‌های \fB\-O\fR فعال می‌شوند یا با مواردی که فعال هستند در ارتباط‌اند. شما می‌توانید در موارد نادری که «تنظیم دقیق» (fine\-tuning) بهینه‌سازی‌های اعمال‌شونده مورد نظر باشد، از پرچم‌های زیر استفاده کنید. .IP \fB\-fno\-defer\-pop\fR 4 .IX Item "-fno-defer-pop" برای ماشین‌هایی که باید آرگومان‌ها را پس از فراخوانی تابع از پشته بردارند (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 انقباض عبارت ممیز شناور (floating\-point expression contraction) را غیرفعال می‌کند. \&\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) در توابعی که به آن نیازی ندارند. این کار از دستورالعمل‌های ذخیره، راه‌اندازی و بازیابی اشاره‌گر فریم جلوگیری می‌کند؛ در بسیاری از معماری‌های مقصد، این گزینه همچنین یک ثبات (register) اضافی را در دسترس قرار می‌دهد. .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های ۸، ۱۶، ۳۲ و ۶۴ بیتی، با چندجمله‌ای ثابت بدون بیت پیشرو ۱، برای هر دو حالت بیت رو به جلو و بیت معکوس. اگر معماری مقصد از دستورالعمل 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]" بسط درون‌خطی (inline) عملیات حافظه و رشته (در حال حاضر، تنها \f(CW\*(C`memset\*(C'\fR)، حتی در زمانی که طول متغیر باشد یا آن‌قدر بزرگ باشد که به ایجاد حلقه نیاز داشته باشد. این گزینه در کنار \fB\-ffreestanding\fR و \&\fB\-fno\-builtin\fR بیشترین کاربرد را دارد. .Sp در برخی شرایط، این گزینه کامپایلر را قادر می‌سازد تا کدی تولید کند که از ترازشدگی (alignment) مشخص و مضارب طول بهره می‌برد، اما حتی در این حالت نیز ممکن است کارایی کمتری نسبت به پیاده‌سازی‌های بهینه‌شدهٔ زمان اجرا داشته باشد، و اندازهٔ کد را چنان افزایش دهد که حتی یک پیاده‌سازی اشتراکی با کارایی کمتر، به‌دلیل استفادهٔ بهتر از حافظه‌های نهانِ کد (code caches)، سریع‌تر اجرا شود. این گزینه به‌طور پیش‌فرض غیرفعال است. .IP \fB\-fno\-inline\fR 4 .IX Item "-fno-inline" هیچ تابعی را به‌صورت درون‌خطی بسط نمی‌دهد، مگر توابعی که با مشخصهٔ \f(CW\*(C`always_inline\*(C'\fR نشانه‌گذاری شده باشند. این رفتار، پیش‌فرض در زمان عدم بهینه‌سازی است. .Sp می‌توان توابع منفرد را با نشانه‌گذاری آن‌ها با مشخصهٔ \f(CW\*(C`noinline\*(C'\fR از درون‌خطی‌سازی معاف کرد. .IP \fB\-finline\-small\-functions\fR 4 .IX Item "-finline-small-functions" ادغام توابع در فراخواننده‌های آن‌ها زمانی که بدنهٔ آن‌ها از کد مورد انتظار برای فراخوانی تابع کوچک‌تر باشد (به‌طوری که اندازهٔ کلی برنامه کوچک‌تر شود). کامپایلر به‌صورت اکتشافی تصمیم می‌گیرد کدام توابع به اندازهٔ کافی ساده هستند که ارزش ادغام به این روش را داشته باشند. این درون‌خطی‌سازی برای همهٔ توابع اعمال می‌شود، حتی توابعی که به‌عنوان inline اعلان نشده‌اند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-findirect\-inlining\fR 4 .IX Item "-findirect-inlining" درون‌خطی‌سازی فراخوانی‌های غیرمستقیمی که به لطف درون‌خطی‌سازی‌های پیشین، مشخص شده که در زمان کامپایل معلوم هستند. این گزینه تنها زمانی اثرگذار است که خودِ درون‌خطی‌سازی توسط گزینه‌های \fB\-finline\-functions\fR یا \fB\-finline\-small\-functions\fR فعال شده باشد. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-finline\-functions\fR 4 .IX Item "-finline-functions" در نظر گرفتن تمام توابع برای درون‌خطی‌سازی، حتی اگر به‌صورت inline اعلان نشده باشند. کامپایلر به‌صورت اکتشافی تصمیم می‌گیرد کدام توابع ارزش ادغام به این شیوه را دارند. .Sp اگر تمام فراخوانی‌ها به یک تابع مشخص ادغام شوند، و تابع به‌صورت \f(CW\*(C`static\*(C'\fR اعلان شده باشد، معمولاً خودِ تابع دیگر به‌صورت مستقل در کد اسمبلی در خروجی درج نمی‌شود. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌گردد. .IP \fB\-finline\-functions\-called\-once\fR 4 .IX Item "-finline-functions-called-once" در نظر گرفتن تمام توابع \f(CW\*(C`static\*(C'\fR که تنها یک‌بار فراخوانی شده‌اند برای درون‌خطی‌سازی در فراخواننده‌شان، حتی اگر با \f(CW\*(C`inline\*(C'\fR مشخص نشده باشند. اگر فراخوانی به تابع مربوطه ادغام شود، آنگاه تابع به‌صورت کد اسمبلی مستقل در خروجی درج نمی‌شود. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود، اما در \fB\-Og\fR فعال نیست. .IP \fB\-fearly\-inlining\fR 4 .IX Item "-fearly-inlining" درون‌خطی‌سازی زودهنگام توابع نشانه‌گذاری‌شده با \f(CW\*(C`always_inline\*(C'\fR و توابعی که بدنهٔ آن‌ها کوچک‌تر از سربار فراخوانی تابع به نظر می‌رسد، پیش از انجام ابزارگذاری \fB\-fprofile\-generate\fR و گذر واقعی درون‌خطی‌سازی. این کار پروفایل‌گیری را به‌میزان چشمگیری کم‌هزینه‌تر کرده و معمولاً درون‌خطی‌سازی را در برنامه‌هایی با زنجیره‌های بزرگی از توابع پوششی تو‌در‌تو سریع‌تر می‌سازد. .Sp به‌طور پیش‌فرض فعال است. .IP \fB\-fipa\-sra\fR 4 .IX Item "-fipa-sra" انجام جایگزینی اسکالر تجمیع‌ها به‌صورت بین‌رویه‌ای (interprocedural scalar replacement of aggregates)، حذف پارامترهای بدون استفاده و جایگزینی پارامترهای ارجاعی (by reference) با پارامترهای مقداری (by value). .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-finline\-limit=\fR\fIn\fR 4 .IX Item "-finline-limit=n" به‌طور پیش‌فرض، GCC اندازهٔ توابعی را که می‌توانند درون‌خطی شوند محدود می‌کند. این پرچم امکان کنترل کلی این حد را فراهم می‌سازد. \fIn\fR اندازهٔ توابعی است که می‌توانند بر حسب تعداد دستورالعمل‌های شبه (pseudo instructions) درون‌خطی شوند. .Sp درون‌خطی‌سازی در عمل توسط تعدادی از پارامترها کنترل می‌شود که می‌توان آن‌ها را به‌صورت تکی با استفاده از \fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR مشخص کرد. گزینهٔ \fB\-finline\-limit=\fR\fIn\fR برخی از این پارامترها را به شرح زیر تنظیم می‌کند: .RS 4 .IP \fBmax\-inline\-insns\-single\fR 4 .IX Item "max-inline-insns-single" روی \fIn\fR/2 تنظیم می‌شود. .IP \fBmax\-inline\-insns\-auto\fR 4 .IX Item "max-inline-insns-auto" روی \fIn\fR/2 تنظیم می‌شود. .RE .RS 4 .Sp برای مستندات مربوط به پارامترهای منفرد کنترل‌کنندهٔ درون‌خطی‌سازی و مقادیر پیش‌فرض این پارامترها، به ادامه مراجعه کنید. .Sp \&\fIنکته:\fR ممکن است هیچ مقداری برای \fB\-finline\-limit\fR وجود نداشته باشد که منجر به رفتار پیش‌فرض شود. .Sp \&\fIنکته:\fR دستورالعمل شبه در این بافتار مشخص، نمایانگر یک معیار انتزاعی از اندازهٔ تابع است. این معیار به‌هیچ‌وجه نشان‌دهندهٔ تعداد دستورالعمل‌های اسمبلی نیست و از این رو ممکن است معنای دقیق آن از نسخه‌ای به نسخهٔ دیگر تغییر کند. .RE .IP \fB\-fno\-keep\-inline\-dllexport\fR 4 .IX Item "-fno-keep-inline-dllexport" این گزینه نسخه‌ای دقیق‌تر از \fB\-fkeep\-inline\-functions\fR است، که تنها برای توابعی که با استفاده از مشخصهٔ \f(CW\*(C`dllexport\*(C'\fR یا declspec اعلان شده‌اند اعمال می‌شود. .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" تلاش برای ادغام ثوابت یکسان (ثوابت رشته‌ای و ثوابت ممیز شناور) در میان واحدهای کامپایل (compilation units). .Sp این گزینه در صورت پشتیبانی اسمبلر و پیونددهنده (linker)، در کامپایل بهینه‌شده پیش‌فرض است. برای جلوگیری از این رفتار از \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++ الزام می‌کنند که هر متغیر، از جمله نمونه‌های متعددی از یک متغیر یکسان در فراخوانی‌های بازگشتی، آدرس‌های متمایزی در حافظه داشته باشند؛ بنابراین استفاده از این گزینه منجر به رفتاری ناسازگار با استاندارد (non-conforming) می‌شود. .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) حذف می‌شوند که این امر آغازگر تولید reg-moveها بر پایهٔ تحلیل طول‌عمر (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 پیش‌فرض \fB\-fzero\-initialized\-in\-bss\fR است، به‌جز در Ada..IP \fB\-fthread\-jumps\fR 4 .IX Item "-fthread-jumps" بهینه‌سازی‌هایی را انجام می‌دهد که بررسی می‌کنند آیا یک پرش به مکانی شاخه‌بندی می‌شود که در آن مقایسه دیگری تحت پوشش مقایسه اول یافت شود یا خیر. در این صورت، بسته به اینکه مشخص شود شرط درست است یا نادرست، شاخه اول یا به مقصد شاخه دوم یا به نقطه‌ای بلافاصله پس از آن هدایت می‌شود. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-fsplit\-wide\-types\fR 4 .IX Item "-fsplit-wide-types" هنگام استفاده از نوع داده‌ای که چندین ثبات را اشغال می‌کند، مانند \f(CW\*(C`long long\*(C'\fR در یک سیستم ۳۲\-بیتی، ثبات‌ها را تفکیک کرده و آن‌ها را به‌طور مستقل تخصیص می‌دهد. این کار معمولاً کد بهتری برای این نوع داده‌ها تولید می‌کند، اما ممکن است عیب‌یابی را دشوارتر سازد. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \&\fB\-Os\fR فعال می‌شود. .IP \fB\-fsplit\-wide\-types\-early\fR 4 .IX Item "-fsplit-wide-types-early" انواع داده‌های عریض را در مراحل اولیه به‌طور کامل تفکیک می‌کند، به جای آنکه بسیار دیر انجام شود. این گزینه هیچ اثری ندارد مگر اینکه \fB\-fsplit\-wide\-types\fR فعال باشد. .Sp این گزینه در برخی معماری‌های مقصد، پیش‌فرض است. .IP \fB\-fcse\-follow\-jumps\fR 4 .IX Item "-fcse-follow-jumps" در حذف زیرعبارت‌های مشترک (CSE)، دستورالعمل‌های پرش را زمانی که هیچ مسیر دیگری به مقصد پرش نمی‌رسد پویش می‌کند. برای نمونه، هنگامی که CSE با یک عبارت \f(CW\*(C`if\*(C'\fR دارای بند \&\f(CW\*(C`else\*(C'\fR مواجه می‌شود، در صورتی که شرط مورد آزمایش نادرست باشد، CSE پرش را دنبال می‌کند. .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" حذف زیرعبارت‌های مشترک را پس از انجام بهینه‌سازی‌های حلقه دوباره اجرا می‌کند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود. .IP \fB\-fgcse\fR 4 .IX Item "-fgcse" یک گذر حذف سراسری زیرعبارت‌های مشترک را انجام می‌دهد. این گذر همچنین انتشار سراسری ثوابت و رونوشت‌ها را اجرا می‌کند. .Sp \&\fIنکته:\fR هنگام کامپایل برنامه‌ای که از computed goto (یک قابلیت افزوده در 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 فعال باشد، حذف سراسری زیرعبارت‌های مشترک تلاش می‌کند بارگذاری‌هایی را که تنها توسط ذخیره‌سازی‌ها در خودشان باطل می‌شوند، جابه‌جا کند. این کار امکان می‌دهد حلقه‌ای شامل توالی بارگذاری/ذخیره‌سازی به یک بارگذاری خارج از حلقه و یک رونوشت/ذخیره‌سازی درون حلقه تبدیل شود. .Sp هنگامی که \fB\-fgcse\fR فعال باشد، به‌طور پیش‌فرض فعال است. .IP \fB\-fgcse\-sm\fR 4 .IX Item "-fgcse-sm" هنگامی که \fB\-fgcse\-sm\fR فعال باشد، یک گذر انتقال ذخیره‌سازی (store motion) پس از حذف سراسری زیرعبارت‌های مشترک اجرا می‌شود. این گذر تلاش می‌کند ذخیره‌سازی‌ها را از حلقه‌ها به بیرون منتقل کند. هنگامی که همراه با \fB\-fgcse\-lm\fR استفاده شود، حلقه‌های شامل توالی بارگذاری/ذخیره‌سازی می‌توانند به یک بارگذاری قبل از حلقه و یک ذخیره‌سازی بعد از حلقه تغییر یابند. .Sp در هیچ سطح بهینه‌سازی فعال نمی‌شود. .IP \fB\-fgcse\-las\fR 4 .IX Item "-fgcse-las" هنگامی که \fB\-fgcse\-las\fR فعال باشد، گذر حذف سراسری زیرعبارت‌های مشترک، بارگذاری‌های زایدی را که پس از ذخیره‌سازی در همان مکان حافظه رخ می‌دهند (چه زواید جزئی و چه کلی) حذف می‌کند. .Sp در هیچ سطح بهینه‌سازی فعال نمی‌شود. .IP \fB\-fgcse\-after\-reload\fR 4 .IX Item "-fgcse-after-reload" هنگامی که \fB\-fgcse\-after\-reload\fR فعال باشد، یک گذر حذف بارگذاری‌های زاید پس از reload اجرا می‌شود. هدف این گذر پاک‌سازی سرریزهای ثبات (spilling) زاید است. .Sp توسط \fB\-O3\fR، \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-faggressive\-loop\-optimizations\fR 4 .IX Item "-faggressive-loop-optimizations" این گزینه به بهینه‌ساز حلقه اعلام می‌کند که از محدودیت‌های زبان برای استخراج کران‌های تعداد تکرارهای یک حلقه استفاده کند. این فرآیند فرض می‌کند که کد حلقه رفتار تعریف‌نشده (undefined behavior) ایجاد نمی‌کند، برای مثال باعث سرریز عدد صحیح علامت‌دار یا دسترسی به آرایه خارج از محدوده نمی‌شود. کران‌های تعداد تکرار یک حلقه برای هدایت باز کردن حلقه (loop unrolling)، پوسته‌کنی حلقه (loop peeling) و بهینه‌سازی‌های آزمون خروج از حلقه استفاده می‌شوند. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-funconstrained\-commons\fR 4 .IX Item "-funconstrained-commons" این گزینه به کامپایلر اعلام می‌کند که متغیرهای تعریف‌شده در بلوک‌های مشترک (مانند زبان 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) تبدیل کند. این شامل استفاده از انتقال‌های شرطی (conditional moves)، دستورالعمل‌های min ،max، تنظیم پرچم‌ها و abs، و ترفندهایی است که با محاسبات حسابی استاندارد قابل انجام هستند. استفاده از اجرای شرطی روی تراشه‌هایی که این قابلیت را دارند توسط \fB\-fif\-conversion2\fR کنترل می‌شود. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود، اما نه همراه با \fB\-Og\fR. .IP \fB\-fif\-conversion2\fR 4 .IX Item "-fif-conversion2" از اجرای شرطی (در صورت در دسترس بودن) برای تبدیل پرش‌های شرطی به معادل‌های بدون انشعاب استفاده می‌کند. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال می‌شود، اما نه همراه با \fB\-Og\fR. .IP \fB\-fdeclone\-ctor\-dtor\fR 4 .IX Item "-fdeclone-ctor-dtor" استاندارد 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 pointers) را مرجع‌زدایی (dereference) کنند و هیچ عنصر کد یا داده‌ای در آدرس صفر مستقر نیست. این گزینه بهینه‌سازی‌های ساده ادغام ثوابت (constant folding) را در تمام سطوح بهینه‌سازی فعال می‌کند. علاوه بر این، سایر گذرهای بهینه‌سازی در GCC از این پرچم برای کنترل تحلیل‌های سراسری جریان داده که بررسی‌های بیهوده برای اشاره‌گرهای تهی را حذف می‌کنند استفاده می‌نمایند؛ این تحلیل‌ها فرض می‌کنند که دسترسی به حافظه در آدرس صفر همواره منجر به تله (trap) می‌شود، در نتیجه اگر اشاره‌گری پس از مرجع‌زدایی بررسی شود، نمی‌تواند تهی باشد. .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) تهاجمی را به جریان داده (stream) می‌فرستد. این گزینه غیرمجازی‌سازی بیشتری را ممکن می‌سازد اما اندازه داده‌های ارسالی را به‌طور چشمگیری افزایش می‌دهد. به همین دلیل به‌طور پیش‌فرض غیرفعال است. .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 مفید است، که به‌طور ضمنی پس از نوشتن در نیمه پایینی ۳۲\-بیتی ثبات‌های ۶۴\-بیتی، گسترش با صفر را انجام می‌دهد. .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 مقدار یک شیء تنها تحت تأثیر تغییراتی است که در طول دوره حیات (lifetime) آن رخ می‌دهد: هنگامی که سازنده (constructor) آغاز می‌شود، شیء مقداری نامعین دارد، و هرگونه تغییری در طول دوره حیات شیء، با نابودی آن بی‌اثر (dead) تلقی می‌شود. به‌طور معمول حذف ذخیره‌سازی‌های مرده (dead store elimination) از این امر بهره می‌برد؛ اگر کد شما متکی بر پایداری مقدار ذخیره‌سازی شیء فراتر از طول عمر شیء است، می‌توانید از این پرچم برای غیرفعال کردن این بهینه‌سازی استفاده کنید. برای حفظ ذخیره‌سازی‌ها پیش از شروع سازنده (برای مثال اگر operator new شما حافظه شیء را پاکسازی می‌کند) در حالی که همچنان با شیء پس از مخرب (destructor) به عنوان مرده رفتار شود، می‌توانید از \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" تلاش برای کاهش فشار ثبات‌ها (register pressure) از طریق کوچک‌سازی دامنه حیات ثبات‌ها (register live range shrinkage). این گزینه برای پردازنده‌های سریعی با مجموعه ثبات‌های کوچک یا متوسط مفید است. .IP \fB\-fira\-algorithm=\fR\fIalgorithm\fR 4 .IX Item "-fira-algorithm=algorithm" استفاده از الگوریتم رنگ‌آمیزی مشخص‌شده برای تخصیص‌دهنده یکپارچه ثبات (IRA). آرگومان \fIalgorithm\fR می‌تواند \fBpriority\fR باشد که رنگ‌آمیزی اولویت Chow را مشخص می‌کند، یا \fBCB\fR که رنگ‌آمیزی Chaitin\-Briggs را مشخص می‌کند. رنگ‌آمیزی Chaitin\-Briggs برای همه معماری‌ها پیاده‌سازی نشده است، اما برای مقصدهایی که از آن پشتیبانی می‌کنند پیش‌فرض است، زیرا کد بهتری تولید می‌کند. .IP \fB\-fira\-region=\fR\fIregion\fR 4 .IX Item "-fira-region=region" استفاده از نواحی مشخص‌شده برای تخصیص‌دهنده یکپارچه ثبات. آرگومان \fIregion\fR باید یکی از موارد زیر باشد: .RS 4 .IP \fBall\fR 4 .IX Item "all" استفاده از همه حلقه‌ها به‌عنوان نواحی تخصیص ثبات. این مقدار می‌تواند بهترین نتایج را برای ماشین‌هایی با مجموعه‌های ثبات کوچک و/یا نامنظم فراهم کند. .IP \fBmixed\fR 4 .IX Item "mixed" استفاده از همه حلقه‌ها به‌جز حلقه‌هایی با فشار ثبات کم به‌عنوان ناحیه. این مقدار معمولاً در بیشتر موارد و برای اکثر معماری‌ها بهترین نتایج را ارائه می‌دهد، و هنگام کامپایل با بهینه‌سازی برای سرعت (\fB\-O\fR، \fB\-O2\fR، ...) به‌طور پیش‌فرض فعال است. .IP \fBone\fR 4 .IX Item "one" استفاده از همه توابع به‌عنوان یک ناحیه واحد. این مقدار معمولاً منجر به کوچک‌ترین اندازه کد می‌شود و به‌طور پیش‌فرض برای \&\fB\-Os\fR یا \fB\-O0\fR فعال است. .RE .RS 4 .RE .IP \fB\-fira\-hoist\-pressure\fR 4 .IX Item "-fira-hoist-pressure" استفاده از IRA برای ارزیابی فشار ثبات در مرحله بالا کشیدن کد (code hoisting pass) جهت تصمیم‌گیری برای بالا کشیدن عبارات. این گزینه معمولاً به کد کوچک‌تری منجر می‌شود، اما می‌تواند سرعت کامپایلر را کاهش دهد. .Sp این گزینه در سطح \fB\-Os\fR برای تمام مقصدها فعال است. .IP \fB\-fira\-loop\-pressure\fR 4 .IX Item "-fira-loop-pressure" استفاده از IRA برای ارزیابی فشار ثبات در حلقه‌ها جهت تصمیم‌گیری در خصوص انتقال عبارات تغییرناپذیر حلقه (loop invariants). این گزینه معمولاً منجر به تولید کد سریع‌تر و کوچک‌تر در ماشین‌هایی با فایل‌های ثبات بزرگ (>= ۳۲ ثبات) می‌شود، اما می‌تواند سرعت کامپایلر را کاهش دهد. .Sp این گزینه در سطح \fB\-O3\fR برای برخی مقصدها فعال است. .IP \fB\-fno\-ira\-share\-save\-slots\fR 4 .IX Item "-fno-ira-share-save-slots" غیرفعال کردن اشتراک‌گذاری شکاف‌های پشته (stack slots) که برای ذخیره ثبات‌های سخت‌افزاریِ دستخوش فراخوانی (call-used) که در حین فراخوانی زنده می‌مانند به کار می‌روند. هر ثبات سخت‌افزاری یک شکاف پشته جداگانه دریافت می‌کند و در نتیجه فریم‌های پشته تابع بزرگ‌تر می‌شوند. .IP \fB\-fno\-ira\-share\-spill\-slots\fR 4 .IX Item "-fno-ira-share-spill-slots" غیرفعال کردن اشتراک‌گذاری شکاف‌های پشته تخصیص‌یافته برای شبه‌ثبات‌ها. هر شبه‌ثباتی که ثبات سخت‌افزاری دریافت نکند، یک شکاف پشته جداگانه دریافت می‌کند و در نتیجه فریم‌های پشته تابع بزرگ‌تر می‌شوند. .IP \fB\-flra\-remat\fR 4 .IX Item "-flra-remat" فعال کردن بازتولید (rematerialization) حساس به گراف کنترل جریان (CFG) در LRA. به‌جای بارگذاری مقادیر شبه‌ثبات‌های سرریز شده (spilled)، در صورتی که مقرون‌به‌صرفه باشد LRA تلاش می‌کند مقادیر را بازتولید (مجدداً محاسبه) کند. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fdelayed\-branch\fR 4 .IX Item "-fdelayed-branch" در صورت پشتیبانی برای ماشین مقصد، تلاش می‌کند تا دستورالعمل‌ها را بازآرایی کند تا از شکاف‌های دستورالعمل موجود پس از دستورالعمل‌های پرش با تأخیر (delayed branch) بهره‌برداری شود. .Sp در سطوح \fB\-O1\fR، \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است، اما در \fB\-Og\fR فعال نیست. .IP \fB\-fschedule\-insns\fR 4 .IX Item "-fschedule-insns" در صورت پشتیبانی برای ماشین مقصد، تلاش می‌کند تا دستورالعمل‌ها را بازآرایی کند تا وقفه‌های اجرایی (execution 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" غیرفعال کردن انتقال گمانه‌زنانه (speculative motion) دستورالعمل‌های غیربارگذاری؛ قابلیتی که معمولاً هنگام زمان‌بندی پیش از تخصیص ثبات فعال است، یعنی همراه با \fB\-fschedule\-insns\fR یا در \fB\-O2\fR یا بالاتر. .IP \fB\-fsched\-pressure\fR 4 .IX Item "-fsched-pressure" فعال کردن زمان‌بندی دستورالعمل‌ها با در نظر گرفتن فشار ثبات، پیش از تخصیص ثبات. این گزینه تنها زمانی کاربرد دارد که زمان‌بندی پیش از تخصیص ثبات فعال باشد، یعنی همراه با \fB\-fschedule\-insns\fR یا در \fB\-O2\fR یا بالاتر. استفاده از این گزینه می‌تواند با جلوگیری از افزایش فشار ثبات فراتر از تعداد ثبات‌های سخت‌افزاری موجود و سرریزهای بعدی در زمان تخصیص ثبات، کد تولیدشده را بهبود بخشد و اندازه آن را کاهش دهد. .IP \fB\-fsched\-spec\-load\fR 4 .IX Item "-fsched-spec-load" اجازه دادن به انتقال گمانه‌زنانه برخی دستورالعمل‌های بارگذاری. این گزینه تنها در صورتی معنی دارد که زمان‌بندی پیش از تخصیص ثبات فعال باشد، یعنی همراه با \&\fB\-fschedule\-insns\fR یا در \fB\-O2\fR یا بالاتر. .IP \fB\-fsched\-spec\-load\-dangerous\fR 4 .IX Item "-fsched-spec-load-dangerous" اجازه دادن به انتقال گمانه‌زنانه دستورالعمل‌های بارگذاری بیشتر. این گزینه تنها در صورتی معنی دارد که زمان‌بندی پیش از تخصیص ثبات فعال باشد، یعنی همراه با \&\fB\-fschedule\-insns\fR یا در \fB\-O2\fR یا بالاتر. .IP \fB\-fsched\-stalled\-insns\fR 4 .IX Item "-fsched-stalled-insns" .PD 0 .IP \fB\-fsched\-stalled\-insns=\fR\fIn\fR 4 .IX Item "-fsched-stalled-insns=n" .PD تعیین می‌کند که در طول دومین مرحله زمان‌بندی، چه تعداد دستورالعمل (در صورت وجود) می‌توانند پیش از موعد از صف دستورالعمل‌های متوقف‌شده به فهرست آماده منتقل شوند. \&\fB\-fno\-sched\-stalled\-insns\fR به این معنی است که هیچ دستورالعملی پیش از موعد منتقل نمی‌شود؛ \fB\-fsched\-stalled\-insns=0\fR یعنی هیچ محدودیتی در تعداد دستورالعمل‌های صف‌بندی‌شده که می‌توانند پیش از موعد منتقل شوند وجود ندارد. \&\fB\-fsched\-stalled\-insns\fR بدون مقدار، معادل \fB\-fsched\-stalled\-insns=1\fR است. .IP \fB\-fsched\-stalled\-insns\-dep\fR 4 .IX Item "-fsched-stalled-insns-dep" .PD 0 .IP \fB\-fsched\-stalled\-insns\-dep=\fR\fIn\fR 4 .IX Item "-fsched-stalled-insns-dep=n" .PD تعیین می‌کند که چه تعداد گروه دستورالعمل (چرخه) برای وابستگی به دستورالعمل متوقف‌شده‌ای که نامزد حذف زودهنگام از صف دستورالعمل‌های متوقف‌شده است، بررسی شوند. این گزینه فقط در طول دومین مرحله زمان‌بندی اثرگذار است و تنها در صورتی عمل می‌کند که \fB\-fsched\-stalled\-insns\fR استفاده شده باشد. \&\fB\-fno\-sched\-stalled\-insns\-dep\fR معادل \fB\-fsched\-stalled\-insns\-dep=0\fR است. \&\fB\-fsched\-stalled\-insns\-dep\fR بدون مقدار، معادل \fB\-fsched\-stalled\-insns\-dep=1\fR است. .IP \fB\-fsched2\-use\-superblocks\fR 4 .IX Item "-fsched2-use-superblocks" هنگام زمان‌بندی پس از تخصیص ثبات، از زمان‌بندی ابربلوک (superblock) استفاده می‌کند. این امر اجازه انتقال از مرزهای بلوک پایه را می‌دهد و منجر به زمان‌بندی‌های سریع‌تر می‌شود. این گزینه آزمایشی است، زیرا همه توصیف‌های ماشینی مورد استفاده در GCC پردازنده را به اندازه کافی دقیق مدل‌سازی نمی‌کنند تا نتایج الگوریتم کاملاً قابل اطمینان باشد. .Sp این گزینه تنها هنگام زمان‌بندی پس از تخصیص ثبات کاربرد دارد، یعنی همراه با \&\fB\-fschedule\-insns2\fR یا در \fB\-O2\fR یا بالاتر. .IP \fB\-fsched\-group\-heuristic\fR 4 .IX Item "-fsched-group-heuristic" فعال کردن روش مکاشفه‌ای گروهی در زمان‌بند. این مکاشفه، دستورالعملی را که به یک گروه زمان‌بندی تعلق دارد ترجیح می‌دهد. این گزینه به‌طور پیش‌فرض زمانی که زمان‌بندی فعال باشد، یعنی با \fB\-fschedule\-insns\fR یا \fB\-fschedule\-insns2\fR یا در \&\fB\-O2\fR یا بالاتر، فعال است. .IP \fB\-fsched\-critical\-path\-heuristic\fR 4 .IX Item "-fsched-critical-path-heuristic" فعال کردن روش مکاشفه‌ای مسیر بحرانی در زمان‌بند. این مکاشفه، دستورالعمل‌های واقع در مسیر بحرانی را ترجیح می‌دهد. این گزینه به‌طور پیش‌فرض هنگامی که زمان‌بندی فعال باشد، یعنی با \fB\-fschedule\-insns\fR یا \fB\-fschedule\-insns2\fR یا در \fB\-O2\fR یا بالاتر، فعال است. .IP \fB\-fsched\-spec\-insn\-heuristic\fR 4 .IX Item "-fsched-spec-insn-heuristic" فعال کردن روش مکاشفه‌ای دستورالعمل‌های گمانه‌زنانه در زمان‌بند. این مکاشفه، دستورالعمل‌های گمانه‌زنانه با ضعف وابستگی بیشتر را ترجیح می‌دهد. این گزینه به‌طور پیش‌فرض هنگامی که زمان‌بندی فعال باشد، یعنی با \fB\-fschedule\-insns\fR یا \fB\-fschedule\-insns2\fR یا در \fB\-O2\fR یا بالاتر، فعال است..IP \fB\-fsched\-rank\-heuristic\fR 4 .IX Item "-fsched-rank-heuristic" فعال‌سازی روش مکاشفه‌ای رتبه (rank heuristic) در زمان‌بند. این روش مکاشفه‌ای دستورالعملی را ترجیح می‌دهد که متعلق به بلوک پایه‌ای با اندازه یا بسامد بزرگ‌تر باشد. این گزینه به‌طور پیش‌فرض در صورت فعال بودن زمان‌بندی، یعنی با \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) نمادها توسط پیونددهنده پویا را می‌دهند. این بدان معناست که برای نمادهای صادرشده از DSO، کامپایلر با پیش‌بینی اینکه ممکن است تابع یا متغیر مربوطه تغییر کند، نمی‌تواند انتشار بین‌رویه‌ای، درون‌خطی‌سازی و سایر بهینه‌سازی‌ها را انجام دهد. اگرچه این ویژگی برای نمونه جهت بازنویسی توابع تخصیص حافظه توسط یک پیاده‌سازی اشکال‌زدایی مفید است، اما از نظر کیفیت کد پرهزینه تمام می‌شود. با \fB\-fno\-semantic\-interposition\fR کامپایلر فرض می‌کند در صورت وقوع حائل‌شدن برای توابع، تابع جایگزین‌شده دقیقاً همان معناشناسی (و اثرات جانبی) را خواهد داشت. به همین ترتیب، اگر حائل‌شدن برای متغیرها رخ دهد، سازنده متغیر یکسان خواهد بود. این پرچم روی توابعی که صراحتاً inline اعلان شده‌اند (که در آن‌ها هرگز اجازه داده نمی‌شود حائل‌شدن معناشناسی را تغییر دهد) و نمادهایی که صراحتاً weak اعلان شده‌اند، اثری ندارد. .IP \fB\-fshrink\-wrap\fR 4 .IX Item "-fshrink-wrap" تولید پیش‌درآمد توابع (function prologues) تنها پیش از بخش‌هایی از تابع که به آن نیاز دارند، به جای ابتدای تابع. این پرچم به‌طور پیش‌فرض در \&\fB\-O\fR و بالاتر فعال است. .IP \fB\-fshrink\-wrap\-separate\fR 4 .IX Item "-fshrink-wrap-separate" جمع‌وجورسازی (Shrink\-wrap) بخش‌های مختلف پیش‌درآمد و پس‌درآمد به‌صورت جداگانه، به‌گونه‌ای که آن بخش‌ها تنها در صورت نیاز اجرا شوند. این گزینه به‌طور پیش‌فرض فعال است، اما هیچ اثری ندارد مگر اینکه \fB\-fshrink\-wrap\fR نیز فعال باشد و معماری مقصد از آن پشتیبانی کند. .IP \fB\-fcaller\-saves\fR 4 .IX Item "-fcaller-saves" فعال‌سازی تخصیص مقادیر به ثبات‌هایی که با فراخوانی توابع بازنویسی و تخریب می‌شوند، با تولید دستورالعمل‌های اضافی جهت ذخیره و بازیابی ثبات‌ها در اطراف این فراخوانی‌ها. چنین تخصیصی تنها زمانی انجام می‌شود که به نظر برسد به تولید کد بهتری می‌انجامد. .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)، یا اگر نحوه استفاده تابع فراخوانی‌شده از ثبات‌ها دقیقاً مشخص نباشد (این اتفاق در مقصدهایی رخ می‌دهد که پیش‌درآمدها و پس‌درآمدها را در 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 در صورتی که بارگذاری‌ها از مکان‌های مجاور در یک ساختار یکسان باشند و معماری مقصد دستور انتقال شرطی (conditional move) داشته باشد. این پرچم به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است. .IP \fB\-ftree\-copy\-prop\fR 4 .IX Item "-ftree-copy-prop" انجام انتشار کپی (copy propagation) روی درخت‌ها. این گذر عملیات کپی غیرضروری را حذف می‌کند. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-pure\-const\fR 4 .IX Item "-fipa-pure-const" کشف توابعی که محض (pure) یا ثابت (constant) هستند. به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-fipa\-reference\fR 4 .IX Item "-fipa-reference" کشف متغیرهای ایستا که از واحد ترجمه فراتر نمی‌روند. به‌طور پیش‌فرض در \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" گروه‌بندی زنجیره‌های فراخوانی نزدیک به یکدیگر در چیدمان باینری جهت بهبود محلی بودن کد و کمینه‌سازی فواصل پرش بین توابعی که مکرراً فراخوانی می‌شوند. برخلاف \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" کاهش هم‌ترازی پشته در محل‌های فراخوانی در صورت امکان. به‌طور پیش‌فرض فعال است. .IP \fB\-fipa\-pta\fR 4 .IX Item "-fipa-pta" انجام تحلیل بین‌رویه‌ای اشاره‌گرها و تحلیل بین‌رویه‌ای تغییر و ارجاع. این گزینه می‌تواند در واحدهای ترجمه بزرگ باعث مصرف بیش از حد حافظه و زمان کامپایل شود. این گزینه در هیچ سطح بهینه‌سازی به‌طور پیش‌فرض فعال نیست. .IP \fB\-fipa\-profile\fR 4 .IX Item "-fipa-profile" انجام انتشار بین‌رویه‌ای پروفایل. توابعی که تنها از توابع سرد فراخوانی می‌شوند به عنوان سرد نشانه‌گذاری می‌شوند. همچنین توابعی که تنها یک‌بار اجرا می‌شوند (مانند \&\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" انتشار مقادیر ثابت بین‌روالی (interprocedural constant propagation) را انجام می‌دهد. این بهینه‌سازی برنامه را تحلیل می‌کند تا مشخص شود چه زمانی مقادیر ارسال‌شده به توابع ثابت هستند و سپس بر اساس آن بهینه‌سازی را اعمال می‌کند. این بهینه‌سازی چنانچه مقادیر ثابتی به توابع ارسال شده باشند، می‌تواند کارایی را به طور چشمگیری افزایش دهد. این پرچم به طور پیش‌فرض در \fB\-O2\fR، \fB\-Os\fR و \fB\-O3\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌شود. .IP \fB\-fipa\-cp\-clone\fR 4 .IX Item "-fipa-cp-clone" برای تقویت انتشار مقادیر ثابت بین‌روالی، همانندسازی تابع (function cloning) را انجام می‌دهد. در صورت فعال بودن، انتشار مقادیر ثابت بین‌روالی هنگامی که یک تابع قابل‌مشاهده از بیرون بتواند با آرگومان‌های ثابت فراخوانی شود، همانندسازی تابع را انجام می‌دهد. از آنجا که این بهینه‌سازی می‌تواند چندین نسخه از توابع ایجاد کند، ممکن است اندازه کد را به میزان قابل‌توجهی افزایش دهد (ببینید: \fB\-\-param ipa\-cp\-unit\-growth=\fR\fIvalue\fR). این پرچم به طور پیش‌فرض در \fB\-O3\fR فعال است. همچنین توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR نیز فعال می‌شود. .IP \fB\-fipa\-bit\-cp\fR 4 .IX Item "-fipa-bit-cp" در صورت فعال بودن، انتشار بیتی مقادیر ثابت بین‌روالی را انجام می‌دهد. این پرچم به طور پیش‌فرض در \fB\-O2\fR و توسط \fB\-fprofile\-use\fR و \&\fB\-fauto\-profile\fR فعال است. این گزینه نیازمند فعال بودن \fB\-fipa\-cp\fR است. .IP \fB\-fipa\-vrp\fR 4 .IX Item "-fipa-vrp" در صورت فعال بودن، انتشار بین‌روالی بازه‌های مقادیر (value ranges) را انجام می‌دهد. این پرچم به طور پیش‌فرض در \fB\-O2\fR فعال است. این گزینه نیازمند فعال بودن \fB\-fipa\-cp\fR است. .IP \fB\-fipa\-icf\fR 4 .IX Item "-fipa-icf" تا کردن کدهای همسان (Identical Code Folding) را برای توابع و متغیرهای فقط‌خواندنی انجام می‌دهد. این بهینه‌سازی اندازه کد را کاهش داده و ممکن است با جایگزین کردن یک تابع با تابع معادل دیگری با نام متفاوت، پشته‌های بازگشایی (unwind stacks) را دچار اختلال کند. این بهینه‌سازی در صورت فعال بودن بهینه‌سازی زمان پیوند، مؤثرتر عمل می‌کند. .Sp اگرچه رفتار آن مشابه بهینه‌سازی ICF در پیونددهنده Gold است، اما ICF در GCC در سطوح متفاوتی کار می‌کند و بنابراین این بهینه‌سازی‌ها یکسان نیستند \- معادل‌هایی وجود دارند که تنها توسط GCC شناسایی می‌شوند و معادل‌هایی که تنها توسط Gold یافت می‌شوند. .Sp این پرچم به طور پیش‌فرض در \fB\-O2\fR و \fB\-Os\fR فعال است. .IP \fB\-flate\-combine\-instructions\fR 4 .IX Item "-flate-combine-instructions" دو مرحله ترکیب دستورالعمل‌ها را که نسبتاً در اواخر فرایند کامپایل اجرا می‌شوند، فعال می‌کند. یکی از این مراحل قبل از تخصیص ثبات‌ها و دیگری بعد از تخصیص ثبات‌ها اجرا می‌شود. هدف اصلی این مراحل، جایگزینی تعاریف در تمام موارد استفاده است. .Sp بیشتر هدف‌ها (targets) این پرچم را به طور پیش‌فرض در \fB\-O2\fR و \fB\-Os\fR فعال می‌کنند. .IP \fB\-flive\-patching=\fR\fIlevel\fR 4 .IX Item "-flive-patching=level" بهینه‌سازی‌های GCC را برای تولید خروجی مناسب وصله‌گذاری زنده (live\-patching) کنترل می‌کند. .Sp اگر بهینه‌سازی کامپایلر از بدنه یک تابع یا اطلاعات استخراج‌شده از بدنه آن برای بهینه‌سازی/تغییر تابع دیگری استفاده کند، به تابع دوم «تابع متأثر» تابع اول گفته می‌شود. اگر تابعی وصله شود، توابع متأثر از آن نیز باید وصله شوند. .Sp توابع متأثر توسط بهینه‌سازی‌های بین‌روالی کامپایلر مشخص می‌شوند. برای مثال، هنگام درون‌خطی‌سازی (inlining) یک تابع در فراخواننده‌اش، همانندسازی یک تابع و تغییر فراخواننده آن برای فراخوانی این نسخه همانندسازی‌شده جدید، یا استخراج اطلاعات خلوص/ثابت بودن (pureness/constness) یک تابع برای بهینه‌سازی فراخواننده‌های مستقیم یا غیرمستقیم آن و غیره، فراخواننده متأثر می‌شود. .Sp معمولاً هر چه بهینه‌سازی‌های IPA بیشتری فعال باشند، تعداد توابع متأثر برای هر تابع بیشتر خواهد بود. به منظور کنترل تعداد توابع متأثر و محاسبه آسان‌تر فهرست توابع متأثر، بهینه‌سازی‌های IPA می‌توانند به صورت جزئی در دو سطح مختلف فعال شوند. .Sp آرگومان \fIlevel\fR باید یکی از موارد زیر باشد: .RS 4 .IP \fBinline\-clone\fR 4 .IX Item "inline-clone" تنها بهینه‌سازی‌های درون‌خطی‌سازی و همانندسازی را فعال می‌کند که شامل درون‌خطی‌سازی، همانندسازی، جایگزینی اسکالر بین‌روالی تجمیع‌ها و درون‌خطی‌سازی جزئی است. در نتیجه، هنگام وصله‌گذاری یک تابع، تمام فراخواننده‌های آن و فراخواننده‌های نسخه‌های همانندسازی‌شده آن متأثر می‌شوند، بنابراین آن‌ها نیز باید وصله شوند. .Sp گزینه \&\fB\-flive\-patching=inline\-clone\fR پرچم‌های بهینه‌سازی زیر را غیرفعال می‌کند: \&\fB\-fwhole\-program \-fipa\-pta \-fipa\-reference \-fipa\-ra \&\-fipa\-icf \-fipa\-icf\-functions \-fipa\-icf\-variables \&\-fipa\-bit\-cp \-fipa\-vrp \-fipa\-pure\-const \&\-fipa\-reference\-addressable \&\-fipa\-stack\-alignment \-fipa\-modref\fR .IP \fBinline\-only\-static\fR 4 .IX Item "inline-only-static" تنها درون‌خطی‌سازی توابع ایستا (static) را فعال می‌کند. در نتیجه، هنگام وصله‌گذاری یک تابع ایستا، تمام فراخواننده‌های آن متأثر شده و بنابراین باید وصله شوند. .Sp علاوه بر تمامی پرچم‌هایی که توسط \fB\-flive\-patching=inline\-clone\fR غیرفعال می‌شوند، \&\fB\-flive\-patching=inline\-only\-static\fR پرچم‌های بهینه‌سازی زیر را نیز غیرفعال می‌کند: \&\fB\-fipa\-cp\-clone \-fipa\-sra \-fpartial\-inlining \-fipa\-cp\fR .RE .RS 4 .Sp هنگامی که \fB\-flive\-patching\fR بدون مقدار مشخص شود، مقدار پیش‌فرض آن \fIinline\-clone\fR است. .Sp این پرچم به طور پیش‌فرض غیرفعال است. .Sp توجه داشته باشید که \fB\-flive\-patching\fR همراه با بهینه‌سازی زمان پیوند (\fB\-flto\fR) پشتیبانی نمی‌شود. .RE .IP \fB\-fisolate\-erroneous\-paths\-dereference\fR 4 .IX Item "-fisolate-erroneous-paths-dereference" مسیرهایی را شناسایی می‌کند که به دلیل ارجاع‌زدایی از اشاره‌گر تهی (null pointer)، باعث ایجاد رفتار ناصحیح یا تعریف‌نشده می‌شوند. این مسیرها را از جریان کنترل اصلی جدا کرده و دستور دارای رفتار ناصحیح یا تعریف‌نشده را به یک تله (trap) تبدیل می‌کند. این پرچم به طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است و وابسته به فعال بودن \&\fB\-fdelete\-null\-pointer\-checks\fR نیز می‌باشد. .IP \fB\-fisolate\-erroneous\-paths\-attribute\fR 4 .IX Item "-fisolate-erroneous-paths-attribute" مسیرهایی را شناسایی می‌کند که به دلیل استفاده از یک مقدار تهی به شیوه‌ای که توسط مشخصه \f(CW\*(C`returns_nonnull\*(C'\fR یا \f(CW\*(C`nonnull\*(C'\fR ممنوع شده است، باعث ایجاد رفتار ناصحیح یا تعریف‌نشده می‌شوند. این مسیرها را از جریان کنترل اصلی جدا کرده و دستور دارای رفتار ناصحیح یا تعریف‌نشده را به یک تله (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" تطبیق الگو را روی گره‌های SSA PHI برای بهینه‌سازی کدهای شرطی انجام می‌دهد. این مرحله به طور پیش‌فرض در \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" حذف ذخیره‌سازی‌های شرطی را روی درخت‌ها انجام می‌دهد. این پرچم به طور پیش‌فرض در \fB\-O1\fR و بالاتر روی هدف‌هایی که دارای دستورالعمل‌های انتقال شرطی (conditional move) هستند فعال است. .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\-Os\fR، به طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است. .IP \fB\-ffinite\-loops\fR 4 .IX Item "-ffinite-loops" فرض می‌کند حلقه‌ای که نقطه خروج دارد، در نهایت از آن خارج شده و تا ابد ادامه نخواهد یافت. این به کامپایلر اجازه می‌دهد حلقه‌هایی را که در غیر این صورت فاقد اثر جانبی هستند حذف کند، بدون آن‌که تکرار بی‌پایان احتمالی را اثر جانبی تلقی نماید. .Sp این گزینه به طور پیش‌فرض در \fB\-O2\fR برای ++C با \-std=c++11 یا بالاتر فعال است. .IP \fB\-ftree\-dominator\-opts\fR 4 .IX Item "-ftree-dominator-opts" مجموعه‌ای از پاک‌سازی‌های ساده اسکالر (انتشار مقادیر ثابت/رونوشت، حذف افزونگی، انتشار بازه و ساده‌سازی عبارات) را بر پایه پیمایش درخت غالب (dominator tree) انجام می‌دهد. این گزینه همچنین ریسه‌بندی پرش‌ها (jump threading برای کاهش پرش‌ها به پرش‌های دیگر) را انجام می‌دهد. این پرچم به طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-dse\fR 4 .IX Item "-ftree-dse" حذف ذخیره‌سازی‌های مرده (DSE) را روی درخت‌ها انجام می‌دهد. ذخیره‌سازی مرده به ذخیره‌ای در یک مکان حافظه گفته می‌شود که بعداً توسط ذخیره‌سازی دیگری بدون هیچ‌گونه بارگذاری مداخله‌گر، رونویسی می‌شود. در این حالت، ذخیره‌سازی اولیه می‌تواند حذف شود. این پرچم به طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-ch\fR 4 .IX Item "-ftree-ch" رونوشت‌برداری از سرایند حلقه (loop header copying) را روی درخت‌ها انجام می‌دهد. این امر سودمند است چرا که کارایی بهینه‌سازی‌های جابه‌جایی کد را افزایش می‌دهد. همچنین باعث صرفه‌جویی در یک پرش می‌شود. این پرچم به طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. این گزینه برای \fB\-Os\fR فعال نیست، زیرا معمولاً اندازه کد را افزایش می‌دهد..IP \fB\-ftree\-loop\-optimize\fR 4 .IX Item "-ftree-loop-optimize" بهینه‌سازی‌های حلقه را روی درخت‌ها انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-loop\-linear\fR 4 .IX Item "-ftree-loop-linear" .PD 0 .IP \fB\-floop\-strip\-mine\fR 4 .IX Item "-floop-strip-mine" .IP \fB\-floop\-block\fR 4 .IX Item "-floop-block" .PD بهینه‌سازی‌های حلقه‌های تودرتو را انجام می‌دهد. همانند \&\fB\-floop\-nest\-optimize\fR است. برای استفاده از این تبدیل کد، GCC باید با \fB\-\-with\-isl\fR پیکربندی شده باشد تا زیرساخت تبدیل حلقهٔ Graphite فعال گردد. .IP \fB\-fgraphite\-identity\fR 4 .IX Item "-fgraphite-identity" تبدیل همانی را برای graphite فعال می‌کند. برای هر SCoP نمایش چندوجهی (polyhedral representation) را تولید کرده و آن را دوباره به gimple تبدیل می‌نماید. با استفاده از \&\fB\-fgraphite\-identity\fR می‌توان هزینه‌ها یا مزایای تبدیل GIMPLE \-> GRAPHITE \-> GIMPLE را بررسی کرد. همچنین برخی بهینه‌سازی‌های جزئی توسط تولیدکنندهٔ کد isl انجام می‌شود، مانند تفکیک نمایه و حذف کدهای مرده در حلقه‌ها. .IP \fB\-floop\-nest\-optimize\fR 4 .IX Item "-floop-nest-optimize" بهینه‌ساز حلقه‌های تودرتو مبتنی بر isl را فعال می‌کند. این یک بهینه‌ساز عمومی حلقه‌های تودرتو بر پایهٔ الگوریتم‌های بهینه‌سازی Pluto است. این گزینه ساختار حلقه‌ای را محاسبه می‌کند که برای محلی بودن داده‌ها (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" برای تبدیل پرش‌های شرطی در درونی‌ترین حلقه‌ها به معادل‌های بدون انشعاب تلاش می‌کند. هدف حذف جریان کنترل از درونی‌ترین حلقه‌ها است تا توانایی مرحلهٔ برداری‌سازی (vectorization pass) در مدیریت این حلقه‌ها بهبود یابد. در صورت فعال بودن برداری‌سازی، این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-ftree\-loop\-distribution\fR 4 .IX Item "-ftree-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" جابه‌جایی حلقه را بیرون از 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 عملوندهای شرایطی را که ناوردا هستند نیز به بیرون از حلقه انتقال می‌دهد، تا بتوان در انشعاب‌زدایی از حلقه فقط از تحلیل سادهٔ ناوردایی استفاده کرد. این مرحله همچنین شامل انتقال ذخیره‌سازی (store motion) است. .IP \fB\-ftree\-loop\-ivcanon\fR 4 .IX Item "-ftree-loop-ivcanon" یک شمارندهٔ متعارف برای تعداد تکرارها در حلقه‌هایی که تعیین تعداد تکرارهای آن‌ها نیازمند تحلیل پیچیده است، ایجاد می‌کند. بهینه‌سازی‌های بعدی می‌توانند این تعداد را به‌سادگی تعیین نمایند. به‌ویژه در ارتباط با باز کردن حلقه مفید است. .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 ریسه تقسیم می‌نماید. این کار تنها برای حلقه‌هایی امکان‌پذیر است که تکرارهای آن‌ها مستقل از یکدیگر بوده و بتوان ترتیب آن‌ها را به‌دلخواه تغییر داد. این بهینه‌سازی تنها روی ماشین‌های چندپردازنده‌ای و برای حلقه‌هایی که پردازنده‌محور (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" جایگزینی اسکالر نوع‌های مرکب (scalar replacement of aggregates) را انجام می‌دهد. این مرحله ارجاعات به ساختارها را با مقادیر اسکالر جایگزین می‌کند تا از ثبت زودهنگام ساختارها در حافظه جلوگیری کند. این پرچم به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر، به‌جز در \fB\-Og\fR فعال است. .IP \fB\-fstore\-merging\fR 4 .IX Item "-fstore-merging" ادغام ذخیره‌سازی‌های باریک در آدرس‌های حافظهٔ متوالی را انجام می‌دهد. این مرحله، ذخیره‌سازی‌های پیوسته از مقادیر فوری (immediate values) را که باریک‌تر از یک کلمه (word) هستند در قالب ذخیره‌سازی‌های عریض‌تر و کم‌تعدادتر ادغام می‌کند تا تعداد دستورالعمل‌ها کاهش یابد. این گزینه به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر و همچنین در \fB\-Os\fR فعال است. .IP \fB\-ftree\-ter\fR 4 .IX Item "-ftree-ter" جایگزینی عبارت موقت را در طول فاز SSA\->normal انجام می‌دهد. متغیرهای موقت تک‌استفاده/تک‌تعریف در محل استفاده‌شان با عبارت تعریف‌کننده‌شان جایگزین می‌شوند. این کار به کدی غیر\-GIMPLE می‌انجامد، اما به بسط‌دهنده‌ها درخت‌های بسیار پیچیده‌تری برای کار می‌دهد که منجر به تولید RTL بهتری می‌شود. این گزینه به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است. .IP \fB\-ftree\-slsr\fR 4 .IX Item "-ftree-slsr" کاهش توان محاسباتی خط مستقیم (straight\-line strength reduction) را روی درخت‌ها انجام می‌دهد. این گزینه عبارت‌های مرتبطِ شامل ضرب را شناسایی کرده و در صورت امکان آن‌ها را با محاسباتی کم‌هزینه‌تر جایگزین می‌کند. این گزینه به‌طور پیش‌فرض در \fB\-O1\fR و بالاتر فعال است..IP \fB\-ftree\-vectorize\fR 4 .IX Item "-ftree-vectorize" بردارسازی را روی درخت‌ها انجام می‌دهد. این پرچم در صورتی که به‌طور صریح مشخص نشده باشد، \fB\-ftree\-loop\-vectorize\fR و \fB\-ftree\-slp\-vectorize\fR را فعال می‌کند. .IP \fB\-ftree\-loop\-vectorize\fR 4 .IX Item "-ftree-loop-vectorize" بردارسازی حلقه‌ها را روی درخت‌ها انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \&\fB\-O2\fR و توسط \fB\-ftree\-vectorize\fR، \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-ftree\-slp\-vectorize\fR 4 .IX Item "-ftree-slp-vectorize" بردارسازی بلوک‌های پایه را روی درخت‌ها انجام می‌دهد. این پرچم به‌طور پیش‌فرض در \&\fB\-O2\fR و توسط \fB\-ftree\-vectorize\fR، \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-ftrivial\-auto\-var\-init=\fR\fIchoice\fR 4 .IX Item "-ftrivial-auto-var-init=choice" متغیرهای خودکار را با یک الگو یا با صفرها مقداردهی اولیه می‌کند تا امنیت و پیش‌بینی‌پذیری برنامه را با جلوگیری از افشا و استفاده از حافظهٔ مقداردهی‌نشده افزایش دهد. کامپایلر GCC همچنان متغیر خودکاری را که فاقد مقدارده‌اولیهٔ صریح باشد، مقداردهی‌نشده در نظر می‌گیرد؛ گزینه‌های \fB\-Wuninitialized\fR و \&\fB\-Wanalyzer\-use\-of\-uninitialized\-value\fR همچنان پیام‌های هشدار را دربارهٔ چنین متغیرهای خودکاری گزارش می‌کنند و کامپایلر بهینه‌سازی را طوری انجام می‌دهد که گویی متغیر مقداردهی‌نشده است. با این گزینه، GCC همچنین هرگونه فاصلهٔ پرکننده (padding) متغیرهای خودکاری را که دارای نوع ساختار یا اجتماع هستند با صفر مقداردهی اولیه می‌کند. با این حال، پیاده‌سازی فعلی نمی‌تواند متغیرهای خودکاری را که بین عبارت کنترلی و نخستین case در یک دستور \&\f(CW\*(C`switch\*(C'\fR اعلان شده‌اند، مقداردهی اولیه کند. برای گزارش همهٔ این موارد از \fB\-Wtrivial\-auto\-var\-init\fR استفاده کنید. .Sp سه مقدار ممکن برای \fIchoice\fR عبارتند از: .RS 4 .IP * 4 \&\fBuninitialized\fR هیچ متغیر خودکاری را مقداردهی اولیه نمی‌کند. این حالت پیش‌فرض C و ++C است. .IP * 4 \&\fBpattern\fR متغیرهای خودکار را با مقادیری مقداردهی اولیه می‌کند که به احتمال زیاد اشکالات منطقی را در ادامهٔ مسیر به فروپاشی (crash) تبدیل می‌کنند، در گزارش‌های فروپاشی (crash dump) به‌آسانی قابل تشخیص هستند و مقادیری نیستند که برنامه‌نویسان بتوانند برای معناشناسی مفید برنامه به آن‌ها تکیه کنند. مقدار فعلی، یک الگوی تکرارشوندهٔ بایتی با بایت "0xFE" است. مقادیر مورد استفاده برای مقداردهی اولیه با الگو ممکن است در آینده تغییر کنند. .IP * 4 \&\fBzero\fR متغیرهای خودکار را با صفرها مقداردهی اولیه می‌کند. .RE .RS 4 .Sp پیش‌فرض \fBuninitialized\fR است. .Sp توجه داشته باشید که مقادیر مقداردهی اولیه، چه \fBzero\fR و چه \fBpattern\fR، به نمایش داده‌ها (در حافظه یا ثبات‌های ماشین) اشاره دارند تا تفسیر آن‌ها به‌عنوان مقادیر عددی. این تمایز ممکن است در زبان‌هایی که از انواع با بایاس یا ضریب‌های ضمنی پشتیبانی می‌کنند و با افزونه‌هایی نظیر \fBhardbool\fR اهمیت داشته باشد. برای نمونه، متغیری که از ۸ بیت برای نمایش مقادیر (بایاس‌دار) در \f(CW\*(C`range 160..400\*(C'\fR استفاده می‌کند، بسته به \&\fIchoice\fR، با الگوهای بیتی \f(CW0x00\fR یا \f(CW0xFE\fR مقداردهی اولیه خواهد شد؛ صرف‌نظر از اینکه این نمایش‌ها بیانگر مقادیری در آن بازه باشند یا نه، و حتی اگر باشند، تفسیر مقدار نگه‌داری‌شده در متغیر به بایاس وابسته خواهد بود. یک متغیر \fBhardbool\fR که برای نمونه از \f(CW\*(C`0X5A\*(C'\fR و \f(CW0xA5\fR به‌ترتیب برای \f(CW\*(C`false\*(C'\fR و \f(CW\*(C`true\*(C'\fR استفاده می‌کند، با هر کدام از مقادیر \fBchoice\fR برای مقداردهی اولیهٔ ساده به تله (trap) خواهد افتاد؛ یعنی مقداردهی اولیهٔ \fBzero\fR به نمایش مربوط به \f(CW\*(C`false\*(C'\fR تبدیل نخواهد شد، حتی اگر برای یک متغیر \f(CW\*(C`static\*(C'\fR از همان نوع چنین می‌شد. این بدان معناست که الگوی مقداردهی اولیه عموماً به نوع متغیرِ مقداردهی‌شده وابسته نیست. یک استثنای چشمگیر این است که متغیرهای بولی (مقاوم‌سازی‌نشده) که درون ثبات‌ها جای می‌گیرند، حتی زمانی که \fBpattern\fR درخواست شده باشد، با \f(CW\*(C`false\*(C'\fR (صفر) مقداردهی اولیه می‌شوند. .Sp می‌توانید این رفتار را برای یک متغیر خاص با استفاده از صفت متغیر \f(CW\*(C`uninitialized\*(C'\fR کنترل کنید. .RE .IP \fB\-fvect\-cost\-model=\fR\fImodel\fR 4 .IX Item "-fvect-cost-model=model" مدل هزینهٔ مورد استفاده برای بردارسازی را تغییر می‌دهد. آرگومان \fImodel\fR باید یکی از مقادیر \fBunlimited\fR، \fBdynamic\fR، \fBcheap\fR یا \&\fBvery\-cheap\fR باشد. در مدل \fBunlimited\fR، مسیر کدِ بردارسازی‌شده سودبخش فرض می‌شود؛ در حالی که در مدل \fBdynamic\fR، یک بررسی زمان اجرا از مسیر کد بردارسازی‌شده محافظت می‌کند تا آن را تنها برای تعداد تکرارهایی فعال کند که احتمالاً سریع‌تر از اجرای حلقهٔ اسکالر اصلی اجرا خواهند شد. مدل \fBcheap\fR بردارسازی حلقه‌هایی را که انجام آن هزینهٔ بسیار زیادی دارد (برای نمونه به‌دلیل بررسی‌های لازم در زمان اجرا برای وابستگی داده یا تراز بودن) غیرفعال می‌کند، اما در غیر این صورت معادل مدل \fBdynamic\fR است. مدل \fBvery\-cheap\fR در صورتی که هرگونه بررسی زمان اجرا برای وابستگی داده یا تراز بودن لازم باشد، بردارسازی حلقه‌ها را غیرفعال می‌کند؛ همچنین بردارسازی حلقه‌های پایانی (epilogue 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) را روی درخت‌ها انجام می‌دهد. این شبیه به گذر انتشار مقادیر ثابت است، اما به‌جای مقادیر، بازه‌ای از مقادیر منتشر می‌شوند. این امر به بهینه‌سازها اجازه می‌دهد بررسی‌های غیرضروری بازه مانند بررسی مرزهای آرایه و بررسی‌های اشاره‌گر تهی (null pointer) را حذف کنند. این گزینه به‌طور پیش‌فرض در \fB\-O2\fR و بالاتر فعال است. حذف بررسی اشاره‌گر تهی تنها در صورتی انجام می‌شود که \fB\-fdelete\-null\-pointer\-checks\fR فعال باشد. .IP \fB\-fsplit\-paths\fR 4 .IX Item "-fsplit-paths" مسیرهای منتهی به یال‌های بازگشتی حلقه (loop backedges) را تفکیک می‌کند. این کار می‌تواند حذف کدهای مرده و حذف عبارات فرعی مشترک را بهبود بخشد. این گزینه به‌طور پیش‌فرض در \fB\-O3\fR و بالاتر فعال است. .IP \fB\-fsplit\-ivs\-in\-unroller\fR 4 .IX Item "-fsplit-ivs-in-unroller" بیان مقادیر متغیرهای استقرایی در تکرارهای بعدیِ حلقهٔ بازشده را با استفاده از مقدار موجود در تکرار اول فعال می‌کند. این کار زنجیره‌های طولانی وابستگی را می‌شکند و بنابراین کارایی گذرهای زمان‌بندی را ارتقا می‌دهد. .Sp ترکیبی از \fB\-fweb\fR و CSE اغلب برای دستیابی به همین نتیجه کافی است. با این حال، در مواردی که بدنهٔ حلقه پیچیده‌تر از یک بلوک پایهٔ منفرد باشد، قابل اعتماد نیست. همچنین در برخی معماری‌ها به‌دلیل محدودیت‌های موجود در گذر CSE اصلاً کار نمی‌کند. .Sp این بهینه‌سازی به‌طور پیش‌فرض فعال است. .IP \fB\-fvariable\-expansion\-in\-unroller\fR 4 .IX Item "-fvariable-expansion-in-unroller" با این گزینه، کامپایلر هنگام باز کردن حلقه، نسخه‌های متعددی از برخی متغیرهای محلی ایجاد می‌کند که می‌تواند منجر به کدی باکیفیت‌تر شود. .Sp این بهینه‌سازی به‌طور پیش‌فرض برای مقصدهای PowerPC فعال است، اما در غیر این صورت به‌طور پیش‌فرض غیرفعال است. .IP \fB\-fpartial\-inlining\fR 4 .IX Item "-fpartial-inlining" بخش‌هایی از توابع را درون‌خطی (inline) می‌کند. این گزینه تنها زمانی اثرگذار است که خود درون‌خطی‌سازی توسط گزینه‌های \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" احتمالات انشعاب را با استفاده از روش‌های ابتکاری حدس نمی‌زند. .Sp چنانچه احتمالات انشعاب از طریق بازخورد پروفایل‌سازی (\fB\-fprofile\-arcs\fR) ارائه نشده باشند، GCC از روش‌های ابتکاری برای حدس زدن آن‌ها استفاده می‌کند. این روش‌های ابتکاری بر پایهٔ گراف جریان کنترل هستند. اگر برخی احتمالات انشعاب توسط \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" بازآرایی بلوک‌های پایه در تابع کامپایل‌شده به‌منظور کاهش تعداد انشعاب‌های طی‌شده و بهبود محلی‌بودن کد. .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 (در مقصدهایی که از setjump/longjump یا طرح اختصاصی مقصد استفاده می‌کنند)، برای بخش‌های linkonce، برای توابعی با مشخصهٔ بخش تعریف‌شده توسط کاربر و در هر معماری که از بخش‌های نام‌گذاری‌شده پشتیبانی نمی‌کند، غیرفعال می‌شود. هنگامی که \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" بازآرایی توابع در فایل شیء به‌منظور بهبود محلی‌بودن کد. برخلاف \fB\-fipa\-reorder\-for\-locality\fR، این گزینه گروه‌بندی تمام توابع درون یک دسته‌بندی (hot/normal/cold/never\-executed) در کنار یکدیگر را در اولویت قرار می‌دهد. این کار با استفاده از زیربخش‌های ویژهٔ \f(CW\*(C`.text.hot\*(C'\fR برای پرتکرارترین توابع اجراشده و \f(CW\*(C`.text.unlikely\*(C'\fR برای توابعی که اجرای آن‌ها نامحتمل است پیاده‌سازی شده است. بازآرایی توسط پیونددهنده انجام می‌شود، بنابراین قالب فایل شیء باید از بخش‌های نام‌گذاری‌شده پشتیبانی کند و پیونددهنده باید آن‌ها را به روشی معقول در کنار هم قرار دهد. .Sp این گزینه مؤثر نخواهد بود مگر اینکه یا بازخورد پروفایل (profile feedback) ارائه دهید (برای جزئیات \fB\-fprofile\-arcs\fR را ببینید) یا به‌طور دستی توابع را با مشخصه‌های \&\f(CW\*(C`hot\*(C'\fR یا \f(CW\*(C`cold\*(C'\fR نشانه‌گذاری کنید. .Sp در سطوح \fB\-O2\fR، \fB\-O3\fR و \fB\-Os\fR فعال است. .IP \fB\-fstrict\-aliasing\fR 4 .IX Item "-fstrict-aliasing" به کامپایلر اجازه می‌دهد سخت‌گیرانه‌ترین قواعد نام مستعار (aliasing) قابل‌اعمال بر زبان در حال کامپایل را فرض کند. برای C (و ++C)، این کار بهینه‌سازی‌ها را بر اساس نوع عبارت‌ها فعال می‌کند. به‌ویژه، فرض می‌شود که شیئی از یک نوع هرگز در آدرسی یکسان با شیئی از یک نوع متفاوت قرار نمی‌گیرد، مگر اینکه آن نوع‌ها تقریباً یکسان باشند. برای مثال، یک \f(CW\*(C`unsigned int\*(C'\fR می‌تواند با یک \f(CW\*(C`int\*(C'\fR نام مستعار شود، اما نه با یک \&\f(CW\*(C`void*\*(C'\fR یا یک \f(CW\*(C`double\*(C'\fR. یک نوع نویسه‌ای می‌تواند با هر نوع دیگری نام مستعار شود. .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 مشابهاً، دسترسی با گرفتن آدرس، تبدیل نوع اشاره‌گر حاصل و ارجاع‌زدایی از نتیجه رفتار تعریف‌نشده دارد، حتی اگر تبدیل نوع از یک نوع 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 ترازبندی ابتدای توابع با توان بعدی از عدد دو که بزرگ‌تر یا مساوی با \fIn\fR باشد، با نادیده گرفتن حداکثر \fIm\fR\-1 بایت. این تضمین می‌کند که حداقل \fIm\fR بایت اول تابع بتواند توسط پردازنده بدون عبور از مرز ترازبندی \fIn\fR\-بایتی واکشی شود. این یک بهینه‌سازی کارایی کد است و ترازبندی برای توابعی که سرد در نظر گرفته می‌شوند نادیده گرفته می‌شود. اگر ترازبندی برای تمام توابع لازم است، از \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 برابر با ۶۵۵۳۶ است. .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 برابر با ۶۵۵۳۶ است. .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 برابر با ۶۵۵۳۶ است. .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 هم‌ترازسازی مقصدهای انشعاب به مرزهای توانی از دو، برای مقصدهایی که فقط از طریق پرش قابل دسترسی هستند. در این حالت، نیازی به اجرای دستورالعمل‌های ساختگی (dummy) نیست. این یک بهینه‌سازی برای کارایی کد است و هم‌ترازسازی برای پرش‌هایی که سرد (cold) در نظر گرفته می‌شوند نادیده گرفته می‌شود. .Sp اگر \fB\-falign\-labels\fR از این مقدار بزرگ‌تر باشد، به جای آن مقدار استفاده می‌شود. .Sp پارامترهای این گزینه مشابه با گزینهٔ \fB\-falign\-functions\fR هستند. گزینه‌های \&\fB\-fno\-align\-jumps\fR و \fB\-falign\-jumps=1\fR معادل هستند و به معنای عدم هم‌ترازسازی حلقه‌ها می‌باشند. .Sp اگر \fIn\fR مشخص نشود یا صفر باشد، از پیش‌فرض وابسته به ماشین استفاده می‌شود. بیشترین مقدار مجاز برای گزینهٔ \fIn\fR عدد 65536 است. .Sp در سطوح \fB\-O2\fR و \fB\-O3\fR فعال می‌شود. .IP \fB\-fmin\-function\-alignment\fR 4 .IX Item "-fmin-function-alignment" حداقل هم‌ترازسازی توابع را روی نزدیک‌ترین توان دو بزرگ‌تر یا مساوی \fIn\fR تعیین می‌کند. بر خلاف \fB\-falign\-functions\fR، این هم‌ترازسازی برای همهٔ توابع (حتی توابعی که سرد در نظر گرفته شده‌اند) نیز اعمال می‌شود. همچنین این هم‌ترازسازی تحت تأثیر \fB\-flimit\-function\-alignment\fR قرار نمی‌گیرد. .IP \fB\-fno\-allocation\-dce\fR 4 .IX Item "-fno-allocation-dce" تخصیص‌های بلااستفادهٔ ++C (با استفاده از عملگر \f(CW\*(C`new\*(C'\fR و عملگر \f(CW\*(C`delete\*(C'\fR) را در حذف کدهای مرده (dead code elimination) حذف نمی‌کند. .Sp همچنین ببینید \fB\-fmalloc\-dce\fR. .IP \fB\-fallow\-store\-data\-races\fR 4 .IX Item "-fallow-store-data-races" به کامپایلر اجازه می‌دهد بهینه‌سازی‌هایی را انجام دهد که ممکن است باعث ایجاد رقابت داده‌ای (data race) جدید روی عملیات ذخیره‌سازی شوند، بدون اثبات این‌که متغیر نمی‌تواند هم‌زمان توسط ریسه‌های دیگر در دسترس قرار گیرد. روی بهینه‌سازی داده‌های محلی تأثیری ندارد. استفاده از این گزینه در صورتی بی‌خطر است که مشخص باشد داده‌های سراسری توسط چند ریسه دسترسی نخواهند شد. .Sp نمونه‌هایی از بهینه‌سازی‌های فعال‌شده توسط \fB\-fallow\-store\-data\-races\fR شامل hoisting یا if\-conversionهایی است که ممکن است باعث بازنویسی مقداری که قبلاً در حافظه بوده با همان مقدار شوند. چنین بازنویسی‌هایی در یک بستر تک‌ریسه‌ای بی‌خطر هستند، اما در بستر چندریسه‌ای ممکن است ناامن باشند. توجه داشته باشید که در برخی پردازنده‌ها، ممکن است برای فعال‌سازی برداری‌سازی (vectorization) به if\-conversion نیاز باشد. .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" توابع سطح بالا (top-level)، متغیرها و عبارات \f(CW\*(C`asm\*(C'\fR را بازآرایی نمی‌کند. آن‌ها را با همان ترتیبی که در فایل ورودی آمده‌اند در خروجی قرار می‌دهد. هنگام استفاده از این گزینه، متغیرهای ایستا (static) بدون ارجاع حذف نمی‌شوند. این گزینه برای پشتیبانی از کدهای موجود که به ترتیب خاصی وابسته هستند در نظر گرفته شده است. برای کدهای جدید، بهتر است در صورت امکان از ویژگی‌ها (attributes) استفاده شود. .Sp گزینهٔ \&\fB\-ftoplevel\-reorder\fR در سطح \fB\-O1\fR و بالاتر، و همچنین در سطح \fB\-O0\fR در صورتی که \fB\-fsection\-anchors\fR صراحتاً درخواست شده باشد، پیش‌فرض است. علاوه بر این، \fB\-fno\-toplevel\-reorder\fR مستلزم \&\fB\-fno\-section\-anchors\fR است. .IP \fB\-funreachable\-traps\fR 4 .IX Item "-funreachable-traps" با این گزینه، کامپایلر فراخوانی‌های \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR را به جای استفاده برای بهینه‌سازی، به تله‌ها (traps) تبدیل می‌کند. این موضوع بر تمام این‌گونه فراخوانی‌ها که به‌طور ضمنی توسط کامپایلر تولید می‌شوند نیز تأثیر می‌گذارد. .Sp این گزینه اثری مشابه \fB\-fsanitize=unreachable \&\-fsanitize\-trap=unreachable\fR دارد، اما روی مقادیر آن گزینه‌ها تأثیری نمی‌گذارد. اگر \fB\-fsanitize=unreachable\fR فعال باشد، آن گزینه نسبت به این گزینه اولویت دارد. .Sp این گزینه به‌طور پیش‌فرض در سطوح \fB\-O0\fR و \fB\-Og\fR فعال است. .IP \fB\-fweb\fR 4 .IX Item "-fweb" شبکه‌های تاری (webs) را آن‌طور که معمولاً برای مقاصد تخصیص ثبات به کار می‌روند ساخته و به هر وب یک ثبات مجازی (شبه‌ثبات) اختصاصی تخصیص می‌دهد. این کار به مرحلهٔ تخصیص ثبات اجازه می‌دهد تا مستقیماً روی شبه‌ثبات‌ها عمل کند، اما همچنین چندین مرحلهٔ بهینه‌سازی دیگر مانند CSE، بهینه‌ساز حلقه و حذف کدهای مردهٔ بدیهی را تقویت می‌کند. با این حال، می‌تواند اشکال‌زدایی را غیرممکن کند، چرا که متغیرها دیگر در یک «ثبات خانگی» (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 مشخص شده‌اند، به توابع ایستا (static) تبدیل می‌شوند و در عمل با تهاجم بیشتری توسط بهینه‌سازهای بین‌روالی بهینه‌سازی می‌شوند. .Sp همراه با \fB\-flto\fR این گزینه کاربرد محدودی دارد. در بیشتر موارد، فهرست دقیق نمادهای استفاده‌شده یا صادرشده از فایل باینری از طریق اطلاعات تحلیل ارائه‌شده توسط افزونهٔ پیونددهنده به بهینه‌ساز زمان پیوند مشخص است. با این حال، اگر از هیچ افزونهٔ پیونددهنده‌ای استفاده نشود، یا در طول مرحلهٔ پیوند افزایشی هنگامی که کد نهایی تولید می‌شود (با \fB\-flto\fR \&\fB\-flinker\-output=nolto\-rel\fR)، همچنان کاربردی است. .IP \fB\-flto[=\fR\fIn\fR\fB]\fR 4 .IX Item "-flto[=n]" این گزینه بهینه‌ساز استاندارد زمان پیوند را اجرا می‌کند. هنگامی که با کد منبع فراخوانی شود، GIMPLE (یکی از نمایش‌های داخلی GCC) را تولید کرده و آن را در بخش‌های ویژهٔ ELF در فایل شیء (object file) می‌نویسد. هنگامی که فایل‌های شیء به یکدیگر پیوند داده می‌شوند، بدنهٔ تمام توابع از این بخش‌های ELF خوانده شده و به گونه‌ای نمونه‌سازی می‌شوند که گویی بخشی از یک واحد ترجمه بوده‌اند. .Sp برای استفاده از بهینه‌ساز زمان پیوند، \fB\-flto\fR و گزینه‌های بهینه‌سازی باید در زمان کامپایل و همچنین در طول پیوند نهایی مشخص شوند. توصیه می‌شود تمام فایل‌های دخیل در پیوند مشترک را با گزینه‌های یکسان کامپایل کنید و این گزینه‌ها را در زمان پیوند نیز مشخص نمایید. برای مثال: .Sp .Vb 3 \& gcc \-c \-O2 \-flto foo.c \& gcc \-c \-O2 \-flto bar.c \& gcc \-o myprog \-flto \-O2 foo.o bar.o .Ve .Sp دو فراخوانی نخست GCC یک نمایش بایت‌کد از GIMPLE را در بخش‌های ویژهٔ ELF درون \fIfoo.o\fR و \&\fIbar.o\fR ذخیره می‌کنند. فراخوانی نهایی بایت‌کد GIMPLE را از \&\fIfoo.o\fR و \fIbar.o\fR خوانده، دو فایل را در یک تصویر داخلی واحد ادغام کرده و نتیجه را طبق روال معمول کامپایل می‌کند. از آنجا که هر دو فایل \&\fIfoo.o\fR و \fIbar.o\fR در یک تصویر واحد ادغام شده‌اند، این کار باعث می‌شود تمام تحلیل‌ها و بهینه‌سازی‌های بین‌روالی در GCC در هر دو فایل به گونه‌ای عمل کنند که گویی یک فایل واحد هستند. این بدین معناست که به عنوان مثال، بخش درون‌ریز (inliner) قادر است توابع موجود در \&\fIbar.o\fR را درون توابع \fIfoo.o\fR و بالعکس درون‌ریزی کند. .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 برای کارآمد کردن بهینه‌سازی کل برنامه، لازم است فرضیات معینی دربارهٔ کل برنامه در نظر گرفته شود. کامپایلر باید بداند چه توابع و متغیرهایی ممکن است توسط کتابخانه‌ها و زمان‌اجرا (runtime) خارج از واحد بهینه‌سازی‌شده در زمان پیوند دسترسی‌پذیر باشند. هنگامی که پیونددهنده پشتیبانی کند، افزونهٔ پیونددهنده (ببینید \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 به مرحلهٔ پیوند منتقل می‌شوند و تنظیمات آن‌ها با مرحلهٔ کامپایل در سطح دانه‌بندی تابع تطابق دارد. توجه داشته باشید که این موضوع تنها برای پیام‌های تشخیصی صادرشده در طول بهینه‌سازی اهمیت دارد. همچنین توجه داشته باشید که تبدیل‌های کد مانند درون‌ریزی می‌توانند منجر به فعال یا غیرفعال شدن هشدارها برای بخش‌هایی از کد شوند که با تنظیمات زمان کامپایل مطابقت ندارند. .Sp هنگامی که نیاز دارید گزینه‌هایی را از طریق \fB\-Wa\fR یا \&\fB\-Xassembler\fR به اسمبلر ارسال کنید، مطمئن شوید که یا چنین واحدهای ترجمه‌ای را با \fB\-fno\-lto\fR کامپایل کرده‌اید یا به‌طور هماهنگ از گزینه‌های اسمبلر یکسان در تمام واحدهای ترجمه استفاده می‌کنید. همچنین می‌توانید گزینه‌های اسمبلر را در زمان پیوند LTO تعیین کنید. .Sp برای فعال‌سازی تولید اطلاعات اشکال‌زدایی، باید \fB\-g\fR را در زمان کامپایل ارائه دهید. اگر هر یک از فایل‌های ورودی در زمان پیوند با فعال بودن تولید اطلاعات اشکال‌زدایی ساخته شده باشند، پیوند نیز تولید اطلاعات اشکال‌زدایی را فعال خواهد کرد. هرگونه تنظیمات پیچیده‌تر اطلاعات اشکال‌زدایی مانند سطح dwarf در \fB\-gdwarf\-5\fR باید صراحتاً در خط فرمان پیونددهنده تکرار شود و ترکیب تنظیمات مختلف در واحدهای ترجمهٔ متفاوت توصیه نمی‌شود. .Sp اگر LTO با اشیایی با پیوند C مواجه شود که با انواع ناسازگار در واحدهای ترجمهٔ مجزا برای پیوند با یکدیگر اعلان شده‌اند (رفتار تعریف‌نشده مطابق با ISO C99 6.2.7)، ممکن است یک پیام تشخیصی غیرمهلک صادر شود. با این وجود، این رفتار در زمان اجرا همچنان تعریف‌نشده خواهد بود. پیام‌های تشخیصی مشابهی ممکن است برای زبان‌های دیگر نیز ایجاد شود. .Sp یکی دیگر از قابلیت‌های LTO این است که می‌توان بهینه‌سازی‌های بین‌روالی را روی فایل‌های نوشته‌شده به زبان‌های مختلف اعمال کرد: .Sp .Vb 4 \& gcc \-c \-flto foo.c \& g++ \-c \-flto bar.cc \& gfortran \-c \-flto baz.f90 \& g++ \-o myprog \-flto \-O3 foo.o bar.o baz.o \-lgfortran .Ve .Sp دقت کنید که پیوند نهایی با \fBg++\fR انجام شده تا کتابخانه‌های زمان‌اجرای ++C دریافت شوند و \fB\-lgfortran\fR برای دریافت کتابخانه‌های زمان‌اجرای Fortran اضافه شده است. به‌طور کلی، هنگام ترکیب زبان‌ها در حالت LTO، باید از همان گزینه‌های دستور پیوند استفاده کنید که در ترکیب زبان‌ها در یک کامپایل معمولی (غیر LTO) استفاده می‌کردید. .Sp اگر فایل‌های شیء حاوی بایت‌کد GIMPLE در یک آرشیو کتابخانه، مثلاً \&\fIlibfoo.a\fR، ذخیره شده باشند، در صورتی که از پیونددهنده‌ای با پشتیبانی از افزونه استفاده کنید، استخراج و استفاده از آن‌ها در پیوند LTO ممکن است. برای ایجاد کتابخانه‌های ایستا مناسب برای LTO، از \fBgcc\-ar\fR و \fBgcc\-ranlib\fR به جای \fBar\fR و \fBranlib\fR استفاده کنید؛ برای نمایش نمادهای فایل‌های شیء حاوی بایت‌کد GIMPLE، از \&\fBgcc\-nm\fR استفاده نمایید. این دستورها نیازمند آن هستند که \fBar\fR، \fBranlib\fR و \fBnm\fR با پشتیبانی از افزونه کامپایل شده باشند. در زمان پیوند، از پرچم \fB\-fuse\-linker\-plugin\fR استفاده کنید تا مطمئن شوید کتابخانه در فرایند بهینه‌سازی LTO شرکت می‌کند: .Sp .Vb 1 \& gcc \-o myprog \-O2 \-flto \-fuse\-linker\-plugin a.o b.o \-lfoo .Ve .Sp با فعال بودن افزونهٔ پیونددهنده، پیونددهنده فایل‌های GIMPLE مورد نیاز را از \fIlibfoo.a\fR استخراج کرده و آن‌ها را به GCC در حال اجرا تحویل می‌دهد تا بخشی از تصویر تجمیع‌شدهٔ GIMPLE برای بهینه‌سازی شوند. .Sp اگر از پیونددهنده‌ای با پشتیبانی از افزونه استفاده نمی‌کنید و/یا افزونهٔ پیونددهنده را فعال نکرده‌اید، شیءهای درون \fIlibfoo.a\fR طبق معمول استخراج و پیوند داده می‌شوند، اما در فرایند بهینه‌سازی LTO شرکت نمی‌کنند. برای این‌که یک کتابخانهٔ ایستا هم برای بهینه‌سازی LTO و هم برای پیوند معمول مناسب باشد، فایل‌های شیء آن را با \&\fB\-flto\fR \fB\-ffat\-lto\-objects\fR کامپایل کنید. .Sp بهینه‌سازی‌های زمان پیوند برای عمل کردن نیازی به حضور کل برنامه ندارند. اگر برنامه نیازی به صدور هیچ نمادی نداشته باشد، ترکیب \fB\-flto\fR و \fB\-fwhole\-program\fR امکان‌پذیر است تا به بهینه‌سازهای بین‌روالی اجازه دهد فرضیات تهاجمی‌تری را به کار گیرند که ممکن است منجر به فرصت‌های بهینه‌سازی بهتری شود. هنگامی که افزونهٔ پیونددهنده فعال است (ببینید \fB\-fuse\-linker\-plugin\fR)، نیازی به استفاده از \fB\-fwhole\-program\fR نیست. .Sp پیاده‌سازی فعلی LTO هیچ تلاشی برای تولید بایت‌کدی که بین انواع مختلف میزبان‌ها قابل‌حمل (portable) باشد نمی‌کند. فایل‌های بایت‌کد دارای نسخه هستند و بررسی دقیق نسخه وجود دارد، بنابراین فایل‌های بایت‌کد تولیدشده در یک نسخه از 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 تلاش می‌کند تا سرور وظیفهٔ یک GNU make در حال اجرا را به‌طور خودکار تشخیص دهد. .Sp از \fB\-flto=auto\fR برای استفاده از کارساز وظیفهٔ GNU make (در صورت در دسترس بودن)، یا در غیر این صورت بازگشت به تشخیص خودکار تعداد ریسه‌های پردازندهٔ موجود در سیستم خود استفاده کنید..IP \fB\-flto\-partition=\fR\fIalg\fR 4 .IX Item "-flto-partition=alg" الگوریتم افرازبندی (partitioning) مورد استفاده توسط بهینه‌ساز زمان پیوند (link\-time optimizer) را مشخص می‌کند. مقدار می‌تواند \fB1to1\fR برای تعیین افرازبندی منطبق بر فایل‌های منبع اصلی باشد، یا \fBbalanced\fR برای تعیین افرازبندی به قطعات با اندازه برابر (در صورت امکان)، یا \fBmax\fR برای ایجاد یک افراز جدید به ازای هر نماد در صورت امکان، یا \fBcache\fR برای متوازن‌سازی اندازه قطعات هم‌زمان با نگه داشتن نمادهای مرتبط در کنار یکدیگر جهت حافظه‌پنهان‌سازی بهتر در LTO افزایشی. مشخص کردن \fBnone\fR به عنوان الگوریتم، افرازبندی و جاری‌سازی (streaming) را به طور کامل غیرفعال می‌کند. مقدار پیش‌فرض \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 افزایشی، با قرار دادن حافظه پنهان (cache) آن در دایرکتوری موجود مشخص‌شده. می‌تواند چرخه‌های ویرایش\-کامپایل را با 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" استفاده از افزایهٔ پیونددهنده (linker plugin) را در طول بهینه‌سازی زمان پیوند فعال می‌کند. این گزینه به پشتیبانی پیونددهنده از افزایه وابسته است، که در gold یا در GNU ld نسخه 2.21 یا جدیدتر موجود است. .Sp این گزینه استخراج فایل‌های شیء حاوی بایت‌کد GIMPLE را از آرشیوهای کتابخانه فعال می‌سازد. این امر با قرار دادن کد بیشتر در معرض بهینه‌ساز زمان پیوند، کیفیت بهینه‌سازی را بهبود می‌بخشد. این اطلاعات مشخص می‌کند چه نمادهایی می‌توانند از بیرون (توسط شیء غیر\-LTO یا در طول پیوند پویا) قابل دسترسی باشند. بهبود حاصل در کیفیت کد روی باینری‌ها (و کتابخانه‌های مشترکی که از قابلیت دید پنهان استفاده می‌کنند) شبیه به \fB\-fwhole\-program\fR است. برای توضیحات اثر این پرچم و نحوهٔ استفاده از آن، \fB\-flto\fR را ببینید. .Sp این گزینه به طور پیش‌فرض فعال است اگر پشتیبانی از LTO در GCC فعال شده باشد و GCC برای استفاده با پیونددهنده‌ای با پشتیبانی از افزایه‌ها (GNU ld نسخه 2.21 یا جدیدتر یا gold) پیکربندی شده باشد. .IP \fB\-ffat\-lto\-objects\fR 4 .IX Item "-ffat-lto-objects" اشیای Fat LTO فایل‌های شیئی هستند که هم شامل زبان میانی و هم کد شیء می‌باشند. این باعث می‌شود هم برای پیوند LTO و هم برای پیوند معمولی قابل استفاده باشند. این گزینه تنها هنگام کامپایل با \fB\-flto\fR مؤثر است و در زمان پیوند نادیده گرفته می‌شود. .Sp گزینهٔ \&\fB\-fno\-fat\-lto\-objects\fR نسبت به LTO ساده زمان کامپایل را بهبود می‌بخشد، اما مستلزم آن است که کل زنجیره ابزار از LTO آگاه باشد. این گزینه برای عملکرد پایه‌ای به یک پیونددهنده با پشتیبانی از افزایهٔ پیونددهنده نیاز دارد. علاوه بر این، \&\fBnm\fR، \fBar\fR و \fBranlib\fR نیز باید از افزایه‌های پیونددهنده پشتیبانی کنند تا یک محیط ساخت با امکانات کامل (با قابلیت ساخت کتابخانه‌های ایستا و غیره) فراهم شود. GCC پوشاننده‌های \&\fBgcc\-ar\fR، \&\fBgcc\-nm\fR و \fBgcc\-ranlib\fR را برای ارسال گزینه‌های صحیح به این ابزارها ارائه می‌دهد. در LTO غیر 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" پس از تخصیص ثبات (register allocation) و تفکیک دستورالعمل پس از تخصیص ثبات، دستورالعمل‌های حسابی که پرچم‌های پردازنده را مشابه یک عملیات مقایسه بر اساس آن محاسبات محاسبه می‌کنند، شناسایی می‌کند. در صورت امکان، عملیات مقایسه صریح را حذف می‌کند. .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" پروفایل‌های جمع‌آوری‌شده با استفاده از یک باینری مجهز‌شده برای برنامه‌های چندنخی ممکن است به دلیل به‌روزرسانی‌های از دست رفتهٔ شمارنده‌ها ناسازگار باشند. هنگامی که این گزینه مشخص شود، 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 تمام بخش‌هایی از برنامه‌ها که در طول اجرای آزمایشی اجرا نشده‌اند، به جای سرعت به شدت برای اندازه بهینه‌سازی می‌شوند. در برخی موارد امکان آموزش دادن تمام مسیرهای داغ ممکن در برنامه وجود ندارد. (برای مثال، برنامه ممکن است شامل توابعی مخصوص یک سخت‌افزار مشخص باشد و آموزش ممکن است تمام پیکربندی‌های سخت‌افزاری که برنامه روی آن‌ها اجرا می‌شود را پوشش ندهد.) با \&\f(CW\*(C`\-fprofile\-partial\-training\*(C'\fR بازخورد پروفایل برای تمام توابعی که در طول اجرای آزمایشی اجرا نشده‌اند نادیده گرفته می‌شود، که باعث می‌شود آنها به‌گونه‌ای بهینه‌سازی شوند که گویی بدون بازخورد پروفایل کامپایل شده‌اند. این امر منجر به کارایی بهتر در زمانی می‌شود که اجرای آزمایشی نمایندهٔ همه حالات نباشد، اما همچنین منجر به کد به مراتب بزرگ‌تر می‌شود. .IP \fB\-fprofile\-use\fR 4 .IX Item "-fprofile-use" .PD 0 .IP \fB\-fprofile\-use=\fR\fIpath\fR 4 .IX Item "-fprofile-use=path" .PD بهینه‌سازی‌های هدایت‌شده با بازخورد پروفایل و بهینه‌سازی‌های زیر را فعال می‌کند، که بسیاری از آنها معمولاً تنها در صورت در دسترس بودن بازخورد پروفایل سودمند هستند: .Sp \&\fB\-fbranch\-probabilities \-fprofile\-values \&\-funroll\-loops \-fpeel\-loops \-ftracer \-fvpt \&\-finline\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-bit\-cp \&\-fpredictive\-commoning \-fsplit\-loops \-funswitch\-loops \&\-fgcse\-after\-reload \-ftree\-loop\-vectorize \-ftree\-slp\-vectorize \&\-fvect\-cost\-model=dynamic \-ftree\-loop\-distribute\-patterns \&\-fprofile\-reorder\-functions\fR .Sp پیش از آنکه بتوانید از این گزینه استفاده کنید، ابتدا باید اطلاعات پروفایل‌گیری را ایجاد نمایید. .Sp به طور پیش‌فرض، اگر پروفایل‌های بازخورد با کد منبع همخوانی نداشته باشند، GCC یک پیام خطا صادر می‌کند. این خطا می‌تواند با استفاده از \&\fB\-Wno\-error=coverage\-mismatch\fR به یک هشدار تبدیل شود. توجه داشته باشید که این ممکن است به کدی با بهینه‌سازی ضعیف منجر شود. علاوه بر این، به طور پیش‌فرض، در صورتی که پروفایل‌های بازخورد وجود نداشته باشند نیز GCC یک پیام هشدار صادر می‌کند (\fB\-Wmissing\-profile\fR را ببینید). .Sp اگر \fIpath\fR مشخص شود، GCC برای یافتن فایل‌های دادهٔ بازخورد پروفایل، به \fIpath\fR نگاه می‌کند. \fB\-fprofile\-dir\fR را ببینید. .IP \fB\-fauto\-profile\fR 4 .IX Item "-fauto-profile" .PD 0 .IP \fB\-fauto\-profile=\fR\fIpath\fR 4 .IX Item "-fauto-profile=path" .PD بهینه‌سازی‌های هدایت‌شده با بازخورد مبتنی بر نمونه‌برداری و بهینه‌سازی‌های زیر را فعال می‌کند، که بسیاری از آنها معمولاً تنها در صورت در دسترس بودن بازخورد پروفایل سودمند هستند: .Sp \&\fB\-fbranch\-probabilities \-fprofile\-values \&\-funroll\-loops \-fpeel\-loops \-ftracer \-fvpt \&\-finline\-functions \-fipa\-cp \-fipa\-cp\-clone \-fipa\-bit\-cp \&\-fpredictive\-commoning \-fsplit\-loops \-funswitch\-loops \&\-fgcse\-after\-reload \-ftree\-loop\-vectorize \-ftree\-slp\-vectorize \&\-fvect\-cost\-model=dynamic \-ftree\-loop\-distribute\-patterns \&\-fprofile\-correction\fR .Sp \&\fIpath\fR نام فایلی شامل اطلاعات پروفایل AutoFDO است. اگر ذکر نشود، به طور پیش‌فرض \fIfbdata.afdo\fR در دایرکتوری فعلی است. .Sp تولید یک فایل داده پروفایل AutoFDO نیازمند اجرای برنامه با ابزار \fBperf\fR بر روی یک سیستم مقصد 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 گزینه‌های زیر رفتار کامپایلر را در رابطه با محاسبات ممیز شناور کنترل می‌کنند. این گزینه‌ها تعادلی میان سرعت و درستی برقرار می‌سازند. همهٔ آن‌ها باید به‌طور خاص فعال شوند. .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) و هم انتساب‌ها موجب گرد شدن مقادیر به انواع معنایی‌شان می‌شوند (در حالی که \fB\-ffloat\-store\fR فقط بر انتساب‌ها اثر می‌گذارد). این گزینه به‌طور پیش‌فرض برای C یا C++ در صورتی فعال می‌شود که یک گزینهٔ انطباق دقیق مانند \fB\-std=c99\fR یا \fB\-std=c++17\fR استفاده شده باشد. \&\fB\-ffast\-math\fR صرف‌نظر از اینکه از گزینهٔ انطباق دقیق استفاده شده باشد یا خیر، \fB\-fexcess\-precision=fast\fR را به‌طور پیش‌فرض فعال می‌کند. اگر \fB\-fexcess\-precision=16\fR تعیین شود، مقادیر ثابت و نتایج عبارات دارای انواع \f(CW\*(C`_Float16\*(C'\fR و \f(CW\*(C`_\|_bf16\*(C'\fR بدون دقت مازاد محاسبه می‌شوند. .Sp گزینهٔ \&\fB\-fexcess\-precision=standard\fR برای زبان‌هایی غیر از C یا C++ پیاده‌سازی نشده است. در x86، اگر \fB\-mfpmath=sse\fR یا \fB\-mfpmath=sse+387\fR مشخص شده باشد، هیچ اثری ندارد؛ در حالت اول، معناشناسی IEEE بدون دقت مازاد اعمال می‌شود، و در حالت دوم، گرد کردن غیرقابل‌پیش‌بینی است. .IP \fB\-ffloat\-store\fR 4 .IX Item "-ffloat-store" متغیرهای ممیز شناور را در ثبات‌ها ذخیره نمی‌کند و از گزینه‌های دیگری که ممکن است تعیین کنند مقدار ممیز شناور از یک ثبات خوانده شود یا حافظه، جلوگیری می‌کند. این گزینه به‌طور کلی تحت‌الشعاع \&\fB\-fexcess\-precision=standard\fR قرار گرفته که حالت جامع‌تری است. اگر از \&\fB\-ffloat\-store\fR استفاده می‌کنید، ممکن است نیاز باشد برنامهٔ خود را تغییر دهید تا محاسبات میانی را صریحاً در متغیرهای موقت ذخیره کند، زیرا \&\fB\-ffloat\-store\fR بر خلاف \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\-O\fR به‌جز \&\fB\-Ofast\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\-O\fR به‌جز \&\fB\-Ofast\fR فعال نمی‌شود، چرا که می‌تواند به خروجی نادرست برای برنامه‌هایی منجر شود که به پیاده‌سازی دقیق قواعد/مشخصات IEEE یا ISO برای توابع ریاضی وابسته هستند. با این حال، ممکن است برای برنامه‌هایی که نیازی به ضمانت‌های این مشخصات ندارند، کد سریع‌تری ایجاد کند. .Sp پیش‌فرض \fB\-fmath\-errno\fR است. .Sp در سیستم‌های Darwin، کتابخانهٔ ریاضی هرگز \f(CW\*(C`errno\*(C'\fR را مقداردهی نمی‌کند. بنابراین دلیلی ندارد که کامپایلر چنین احتمالی را در نظر بگیرد، و \fB\-fno\-math\-errno\fR حالت پیش‌فرض است. .IP \fB\-funsafe\-math\-optimizations\fR 4 .IX Item "-funsafe-math-optimizations" بهینه‌سازی‌هایی را برای محاسبات ممیز شناور مجاز می‌داند که (الف) فرض می‌کنند آرگومان‌ها و نتایج معتبر هستند و (ب) ممکن است استانداردهای IEEE یا ANSI را نقض کنند. هنگام استفاده در زمان پیوند، ممکن است کتابخانه‌ها یا فایل‌های راه‌اندازی را در بر بگیرد که کلمهٔ کنترلی پیش‌فرض FPU یا سایر بهینه‌سازی‌های مشابه را تغییر می‌دهند. .Sp این گزینه توسط هیچ‌کدام از گزینه‌های \fB\-O\fR به‌جز \&\fB\-Ofast\fR فعال نمی‌شود، زیرا می‌تواند به خروجی نادرست برای برنامه‌هایی بینجامد که به پیاده‌سازی دقیق قواعد/مشخصات IEEE یا ISO برای توابع ریاضی وابسته هستند. با این حال، ممکن است برای برنامه‌هایی که به ضمانت‌های این مشخصات نیاز ندارند، کد سریع‌تری تولید کند. گزینه‌های \fB\-fno\-signed\-zeros\fR، \fB\-fno\-trapping\-math\fR، \&\fB\-fassociative\-math\fR و \fB\-freciprocal\-math\fR را فعال می‌کند. .Sp پیش‌فرض \fB\-fno\-unsafe\-math\-optimizations\fR است. .IP \fB\-fassociative\-math\fR 4 .IX Item "-fassociative-math" شرکت‌پذیری مجدد (re\-association) عملوندها را در رشته‌ای از عملیات ممیز شناور مجاز می‌داند. این کار با احتمال تغییر نتیجهٔ محاسبات، استانداردهای زبان ISO C و C++ را نقض می‌کند. توجه: تغییر ترتیب ممکن است علامت صفر را تغییر دهد، مقادیر NaN را نادیده بگیرد، و سرریز منفی یا مثبت را مهار کرده یا ایجاد کند (و بنابراین نمی‌توان آن را در کدهایی استفاده کرد که به رفتار گرد کردن متکی هستند، مانند \&\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 مشمول حذف زیرعبارت‌های مشترک شود مفید است. توجه داشته باشید که این کار دقت را کاهش داده و تعداد عملیات‌های ممیز شناور (flops) روی آن مقدار را افزایش می‌دهد. .Sp پیش‌فرض \fB\-fno\-reciprocal\-math\fR است. .IP \fB\-ffinite\-math\-only\fR 4 .IX Item "-ffinite-math-only" بهینه‌سازی‌هایی را برای محاسبات ممیز شناور مجاز می‌داند که فرض می‌کنند آرگومان‌ها و نتایج، مقادیر NaN یا +\-Inf نیستند. .Sp این گزینه توسط هیچ‌کدام از گزینه‌های \fB\-O\fR به‌جز \&\fB\-Ofast\fR فعال نمی‌شود، زیرا می‌تواند منجر به خروجی نادرست برای برنامه‌هایی شود که به پیاده‌سازی دقیق قواعد/مشخصات IEEE یا ISO برای توابع ریاضی وابسته هستند. با این وجود، ممکن است برای برنامه‌هایی که به ضمانت‌های این مشخصات نیاز ندارند، کد سریع‌تری فراهم کند. .Sp پیش‌فرض \fB\-fno\-finite\-math\-only\fR است. .IP \fB\-fno\-signed\-zeros\fR 4 .IX Item "-fno-signed-zeros" بهینه‌سازی‌هایی را برای محاسبات ممیز شناور مجاز می‌داند که علامت‌دار بودن صفر را نادیده می‌گیرند. محاسبات IEEE رفتار مقادیر مجزای +0.0 و \-0.0 را مشخص می‌کند، که این امر مانع از ساده‌سازی عباراتی مانند x+0.0 یا 0.0*x می‌شود (حتی با \fB\-ffinite\-math\-only\fR). این گزینه بدین معناست که علامت نتیجهٔ صفر اهمیتی ندارد. .Sp پیش‌فرض \fB\-fsigned\-zeros\fR است. .IP \fB\-fno\-trapping\-math\fR 4 .IX Item "-fno-trapping-math" کد را با این فرض کامپایل می‌کند که عملیات ممیز شناور نمی‌توانند تله‌های قابل مشاهده برای کاربر (user\-visible traps) ایجاد کنند. این تله‌ها شامل تقسیم بر صفر، سرریز مثبت، سرریز منفی، نتیجهٔ نادقیق و عملیات نامعتبر هستند. این گزینه مستلزم فعال بودن \fB\-fno\-signaling\-nans\fR است. تنظیم این گزینه ممکن است امکان تولید کدهای سریع‌تر را فراهم کند؛ مثلاً در حالتی که فرد به محاسبات ممیز شناور «non\-stop» در استاندارد IEEE متکی باشد. .Sp این گزینه توسط هیچ‌کدام از گزینه‌های \fB\-O\fR به‌جز \&\fB\-Ofast\fR فعال نمی‌شود، چرا که می‌تواند به خروجی نادرست برای برنامه‌هایی بینجامد که به پیاده‌سازی دقیق قواعد/مشخصات IEEE یا ISO برای توابع ریاضی وابسته هستند. .Sp پیش‌فرض \fB\-ftrapping\-math\fR است. .Sp نسخه‌های آیندهٔ GCC ممکن است با استفاده از پراگمای \f(CW\*(C`FENV_ACCESS\*(C'\fR در C99، کنترل دقیق‌تری روی این تنظیم ارائه دهند. این گزینهٔ خط فرمان همراه با \fB\-frounding\-math\fR برای تعیین وضعیت پیش‌فرض \f(CW\*(C`FENV_ACCESS\*(C'\fR به کار خواهد رفت. .IP \fB\-frounding\-math\fR 4 .IX Item "-frounding-math" تبدیل‌ها و بهینه‌سازی‌هایی را که رفتار گرد کردن پیش‌فرض ممیز شناور (گرد کردن به نزدیک‌ترین یا round\-to\-nearest) را فرض می‌کنند، غیرفعال می‌کند. این گزینه باید برای برنامه‌هایی مشخص شود که حالت گرد کردن FP را به‌صورت پویا تغییر می‌دهند، یا ممکن است با یک حالت گرد کردن غیرپیش‌فرض اجرا شوند. این گزینه ادغام ثابت‌ها (constant folding) در عبارات ممیز شناور در زمان کامپایل (که ممکن است تحت تأثیر حالت گرد کردن باشد) و تبدیلات محاسباتی که در حضور حالت‌های گرد کردن وابسته به علامت ناامن هستند را غیرفعال می‌سازد. .Sp پیش‌فرض \fB\-fno\-rounding\-math\fR است. .Sp این گزینه آزمایشی است و در حال حاضر غیرفعال شدن تمام بهینه‌سازی‌های GCC را که تحت تأثیر حالت گرد کردن هستند تضمین نمی‌کند. نسخه‌های آیندهٔ GCC ممکن است با استفاده از پراگمای \f(CW\*(C`FENV_ACCESS\*(C'\fR در C99، کنترل دقیق‌تری بر این تنظیم ارائه دهند. این گزینهٔ خط فرمان همراه با \fB\-ftrapping\-math\fR برای تعیین وضعیت پیش‌فرض \f(CW\*(C`FENV_ACCESS\*(C'\fR به کار خواهد رفت. .IP \fB\-fsignaling\-nans\fR 4 .IX Item "-fsignaling-nans" کد را با این فرض کامپایل می‌کند که مقادیر signaling NaN در IEEE ممکن است در طول عملیات ممیز شناور، تله‌های قابل مشاهده برای کاربر ایجاد کنند. فعال کردن این گزینه، بهینه‌سازی‌هایی را که ممکن است تعداد استثناهای قابل مشاهده با signaling NaN را تغییر دهند، غیرفعال می‌کند. این گزینه مستلزم \fB\-ftrapping\-math\fR است. .Sp این گزینه موجب تعریف ماکروی پیش‌پردازندهٔ \f(CW\*(C`_\|_SUPPORT_SNAN_\|_\*(C'\fR می‌شود. .Sp پیش‌فرض \fB\-fno\-signaling\-nans\fR است. .Sp این گزینه آزمایشی است و در حال حاضر غیرفعال شدن تمام بهینه‌سازی‌های GCC که بر رفتار signaling NaN اثر می‌گذارند را تضمین نمی‌کند. .IP \fB\-fno\-fp\-int\-builtin\-inexact\fR 4 .IX Item "-fno-fp-int-builtin-inexact" به توابع توکار (built\-in) \f(CW\*(C`ceil\*(C'\fR، \f(CW\*(C`floor\*(C'\fR، \&\f(CW\*(C`round\*(C'\fR و \f(CW\*(C`trunc\*(C'\fR، و گونه‌های \f(CW\*(C`float\*(C'\fR و \f(CW\*(C`long double\*(C'\fR آن‌ها اجازه نمی‌دهد کدی تولید کنند که برای آرگومان‌های غیرصحیح، استثنای ممیز شناور «inexact» (نادقیق) را ایجاد نماید. استانداردهای ISO C99 و C11 به این توابع اجازه می‌دهند که استثنای «inexact» را فعال کنند، اما ISO/IEC TS 18661\-1:2014 (انقیادهای C برای IEEE 754\-2008) همان‌طور که در ISO C23 ادغام شده است، به این توابع چنین اجازه‌ای نمی‌دهد. .Sp پیش‌فرض \fB\-ffp\-int\-builtin\-inexact\fR است که اجازهٔ ایجاد این استثنا را می‌دهد، مگر اینکه استاندارد C23 یا استاندارد C متأخرتری انتخاب شده باشد. این گزینه هیچ اثری ندارد مگر اینکه \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" در صورت فعال بودن، این گزینه مشخص می‌کند که هنگام انجام تقسیم مختلط نیازی به مرحلهٔ کاهش بازه نیست. همچنین هیچ بررسی‌ای مبنی بر این‌که آیا نتیجهٔ یک ضرب یا تقسیم مختلط \f(CW\*(C`NaN + I*NaN\*(C'\fR است یا خیر صورت نمی‌گیرد تا در این وضعیت تلاشی برای رفع آن انجام شود. پیش‌فرض \fB\-fno\-cx\-limited\-range\fR است، اما با \&\fB\-ffast\-math\fR فعال می‌شود. .Sp این گزینه تنظیم پیش‌فرض پراگمای \&\f(CW\*(C`CX_LIMITED_RANGE\*(C'\fR در استاندارد ISO C99 را کنترل می‌کند. با این حال، این گزینه برای همهٔ زبان‌ها اعمال می‌شود. .IP \fB\-fcx\-fortran\-rules\fR 4 .IX Item "-fcx-fortran-rules" ضرب و تقسیم مختلط از قوانین Fortran پیروی می‌کنند. کاهش بازه به‌عنوان بخشی از تقسیم مختلط انجام می‌شود، اما هیچ بررسی‌ای صورت نمی‌گیرد که آیا نتیجهٔ ضرب یا تقسیم مختلط \f(CW\*(C`NaN + I*NaN\*(C'\fR است یا خیر تا در آن صورت تلاشی برای اصلاح وضعیت انجام پذیرد. .Sp پیش‌فرض \fB\-fno\-cx\-fortran\-rules\fR است. .PP گزینه‌های زیر بهینه‌سازی‌هایی را کنترل می‌کنند که ممکن است عملکرد را بهبود بخشند، اما توسط هیچ‌یک از گزینه‌های \fB\-O\fR فعال نمی‌شوند. این بخش شامل گزینه‌های آزمایشی است که ممکن است کدهای ناقص یا خراب تولید کنند. .IP \fB\-fbranch\-probabilities\fR 4 .IX Item "-fbranch-probabilities" پس از اجرای برنامه‌ای که با \fB\-fprofile\-arcs\fR کامپایل شده است، می‌توانید آن را بار دوم با استفاده از \&\fB\-fbranch\-probabilities\fR کامپایل کنید تا بهینه‌سازی‌ها بر اساس تعداد دفعاتی که هر شاخه طی شده است، بهبود یابد. هنگامی که برنامه‌ای که با \fB\-fprofile\-arcs\fR کامپایل شده خارج می‌شود، تعداد دفعات اجرای قوس‌ها را در فایلی به نام \fIsourcename.gcda\fR برای هر فایل منبع ذخیره می‌کند. اطلاعات موجود در این فایل داده بسیار وابسته به ساختار کد تولید شده است، بنابراین باید برای هر دو کامپایل از کد منبع و گزینه‌های بهینه‌سازی یکسان استفاده کنید. برای جزئیات مربوط به نام‌گذاری فایل، \fB\-fprofile\-arcs\fR را ببینید. .Sp با \fB\-fbranch\-probabilities\fR، کامپایلر GCC یک یادداشت \&\fBREG_BR_PROB\fR روی هر \fBJUMP_INSN\fR و \fBCALL_INSN\fR قرار می‌دهد. این‌ها می‌توانند برای بهبود بهینه‌سازی استفاده شوند. در حال حاضر، آن‌ها فقط در یک نقطه استفاده می‌شوند: در \fIreorg.cc\fR، به‌جای حدس زدن این‌که یک شاخه احتمالاً کدام مسیر را طی می‌کند، از مقادیر \fBREG_BR_PROB\fR برای تعیین دقیق مسیری که بیشتر طی می‌شود استفاده می‌شود. .Sp توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-fprofile\-values\fR 4 .IX Item "-fprofile-values" در صورت ترکیب با \fB\-fprofile\-arcs\fR، کدهایی اضافه می‌کند تا داده‌هایی دربارهٔ مقادیر عبارت‌ها در برنامه گردآوری شود. .Sp همراه با \fB\-fbranch\-probabilities\fR، داده‌های گردآوری‌شده از پروفایل‌بندی مقادیر عبارت‌ها را برای استفاده در بهینه‌سازی‌ها بازخوانی می‌کند. .Sp توسط \fB\-fprofile\-generate\fR، \fB\-fprofile\-use\fR و \&\fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-fprofile\-reorder\-functions\fR 4 .IX Item "-fprofile-reorder-functions" بازآرایی توابع بر اساس ابزار دقیق پروفایل (profile instrumentation)، اولین زمان اجرای یک تابع را ثبت کرده و این توابع را به ترتیب صعودی مرتب می‌کند، با این هدف که راه‌اندازی برنامه از طریق بارگذاری کارآمدتر بخش‌های متن (text segments) بهینه‌سازی شود. .Sp با \fB\-fprofile\-use\fR فعال می‌شود. .IP \fB\-fvpt\fR 4 .IX Item "-fvpt" در صورت ترکیب با \fB\-fprofile\-arcs\fR، این گزینه به کامپایلر دستور می‌دهد کدی برای گردآوری اطلاعات دربارهٔ مقادیر عبارت‌ها اضافه کند. .Sp همراه با \fB\-fbranch\-probabilities\fR، داده‌های گردآوری‌شده را بازخوانی کرده و عملاً بهینه‌سازی‌ها را بر اساس آن‌ها انجام می‌دهد. در حال حاضر بهینه‌سازی‌ها شامل تخصیص‌یافتگی عملیات تقسیم با استفاده از آگاهی از مقدار مخرج است. .Sp با \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-frename\-registers\fR 4 .IX Item "-frename-registers" تلاش برای جلوگیری از وابستگی‌های کاذب (false dependencies) در کدهای زمان‌بندی‌شده با استفاده از ثبات‌های باقی‌مانده پس از تخصیص ثبات. این بهینه‌سازی بیشترین سود را برای پردازنده‌های دارای تعداد ثبات بالا دارد. با این حال، بسته به قالب اطلاعات اشکال‌زداییِ مورد استفاده توسط مقصد، ممکن است اشکال‌زدایی را غیرممکن کند، زیرا متغیرها دیگر در یک «ثبات مبنا» (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" باز کردن (unroll) حلقه‌هایی که تعداد تکرارهای آن‌ها در زمان کامپایل یا هنگام ورود به حلقه قابل تعیین است. گزینهٔ \fB\-funroll\-loops\fR به معنای فعال‌سازی ضمنی \&\fB\-frerun\-cse\-after\-loop\fR، \fB\-fweb\fR و \fB\-frename\-registers\fR است. همچنین لایه‌برداری کامل حلقه (یعنی حذف کامل حلقه‌هایی با تعداد تکرار ثابت و اندک) را روشن می‌کند. این گزینه حجم کد را بزرگ‌تر می‌کند و ممکن است باعث اجرای سریع‌تر آن بشود یا نشود. .Sp توسط \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-funroll\-all\-loops\fR 4 .IX Item "-funroll-all-loops" باز کردن تمام حلقه‌ها، حتی اگر تعداد تکرارهای آن‌ها هنگام ورود به حلقه نامشخص باشد. این کار معمولاً اجرای برنامه‌ها را کندتر می‌کند. \&\fB\-funroll\-all\-loops\fR مستلزم همان گزینه‌های همراه \&\fB\-funroll\-loops\fR است. .IP \fB\-fpeel\-loops\fR 4 .IX Item "-fpeel-loops" لایه‌برداری (peel) از حلقه‌هایی که طبق اطلاعات کافی (از بازخورد پروفایل یا تحلیل ایستا) مشخص شده است که زیاد تکرار نمی‌شوند. همچنین لایه‌برداری کامل حلقه (یعنی حذف کامل حلقه‌هایی با تعداد تکرار ثابت و کم) را فعال می‌کند. .Sp توسط \fB\-O3\fR، \fB\-fprofile\-use\fR و \fB\-fauto\-profile\fR فعال می‌شود. .IP \fB\-fmalloc\-dce\fR 4 .IX Item "-fmalloc-dce" کنترل می‌کند که آیا فراخوانی \f(CW\*(C`malloc\*(C'\fR (و گونه‌های آن مانند \f(CW\*(C`calloc\*(C'\fR یا \&\f(CW\*(C`strdup\*(C'\fR) در صورت عدم نیاز قابل حذف شدن با بهینه‌سازی هستند یا خیر، مشروط بر این‌که مقدار بازگشتی آن‌ها فقط به‌عنوان آرگومان فراخوانی \f(CW\*(C`free\*(C'\fR استفاده شود یا با \f(CW\*(C`NULL\*(C'\fR مقایسه گردد. اگر از \&\fB\-fmalloc\-dce=1\fR استفاده شود، فقط فراخوانی‌های \f(CW\*(C`free\*(C'\fR مجاز هستند، در حالی که با \fB\-fmalloc\-dce=2\fR مقایسه‌ها با اشاره‌گر \f(CW\*(C`NULL\*(C'\fR نیز برای حذف ایمن در نظر گرفته می‌شوند. .Sp پیش‌فرض \fB\-fmalloc\-dce=2\fR است. همچنین \fB\-fallocation\-dce\fR را ببینید. .IP \fB\-fmove\-loop\-invariants\fR 4 .IX Item "-fmove-loop-invariants" گذر انتقال نامتغیرهای حلقه را در بهینه‌ساز حلقهٔ RTL فعال می‌کند. در سطح \fB\-O1\fR و بالاتر، به‌جز \fB\-Og\fR فعال است. .IP \fB\-fmove\-loop\-stores\fR 4 .IX Item "-fmove-loop-stores" گذر انتقال ذخیره‌های حلقه را در بهینه‌ساز حلقهٔ GIMPLE فعال می‌کند. این کار ذخیره‌سازی‌های نامتغیر را به بعد از پایان حلقه منتقل می‌کند و در ازای آن، مقدار ذخیره‌شده را در طول تکرارها در یک ثبات حمل می‌کند. توجه داشته باشید که برای اعمال این گزینه، \fB\-ftree\-loop\-im\fR نیز باید فعال باشد. در سطح \fB\-O1\fR و بالاتر، به‌جز \fB\-Og\fR فعال است. .IP \fB\-fsplit\-loops\fR 4 .IX Item "-fsplit-loops" تقسیم یک حلقه به دو بخش، در صورتی که حاوی شرطی باشد که همواره برای یک سمت از فضای تکرار درست (\*(Aqtrue\*(Aq) و برای سمت دیگر نادرست است. .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 قرار دادن هر تابع یا داده در بخش (section) اختصاصی خود در فایل خروجی، در صورتی که مقصد از بخش‌های دلخواه پشتیبانی کند. نام تابع یا نام داده، تعیین‌کنندهٔ نام بخش در فایل خروجی خواهد بود. .Sp از این گزینه‌ها روی سیستم‌هایی استفاده کنید که پیونددهنده (linker) در آن‌ها می‌تواند بهینه‌سازی‌هایی را برای بهبود محلی‌سازی مراجعات در فضای دستورالعمل انجام دهد. اکثر سیستم‌هایی که از قالب شیء ELF استفاده می‌کنند پیونددهنده‌هایی با چنین بهینه‌سازی‌هایی دارند. در AIX، پیونددهنده بخش‌ها (CSECTها) را بر اساس گراف فراخوانی بازآرایی می‌کند. تأثیر آن بر کارایی متغیر است. .Sp این گزینه‌ها همراه با جمع‌آوری زبالهٔ پیونددهنده (گزینهٔ \fB\-\-gc\-sections\fR پیونددهنده) ممکن است به فایل‌های اجرایی پیوندایستای کوچک‌تر (پس از strip کردن) منجر شوند. .Sp در سیستم‌های ELF/DWARF، این گزینه‌ها کیفیت اطلاعات اشکال‌زدایی را کاهش نمی‌دهند. البته ممکن است با سایر قالب‌های فایل شیء یا اطلاعات اشکال‌زدایی مشکلاتی به وجود آید. .Sp فقط زمانی از این گزینه‌ها استفاده کنید که مزایای قابل توجهی به همراه داشته باشند. وقتی این گزینه‌ها را مشخص می‌کنید، اسمبلر و پیونددهنده فایل‌های شیء و اجرایی بزرگ‌تری ایجاد کرده و کندتر نیز عمل می‌کنند. این گزینه‌ها بر تولید کد تأثیر می‌گذارند. آن‌ها از بهینه‌سازی‌های کامپایلر و اسمبلر با استفاده از موقعیت‌های نسبی داخل یک واحد ترجمه جلوگیری می‌کنند، زیرا موقعیت‌ها تا زمان پیوند ناشناخته باقی می‌مانند. نمونه‌ای از این بهینه‌سازی‌ها، تبدیل فراخوانی‌ها (relaxation) به دستورالعمل‌های فراخوانی کوتاه است..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 در تمام معماری‌های مقصد شناخته‌شده هستند: .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) در نظر گرفته شوند تعیین می‌کند. کامپایلر همچنین از قواعد اکتشافی (heuristics) دیگری برای تصمیم‌گیری دربارهٔ سودمند بودن تبدیل شرطی استفاده خواهد کرد. .IP \fBfile\-cache\-files\fR 4 .IX Item "file-cache-files" بیشینهٔ تعداد فایل‌ها در حافظهٔ موقت فایل (file cache). حافظهٔ موقت فایل برای چاپ خطوط کد منبع در پیام‌های تشخیصی و انجام برخی بررسی‌های منبع مانند \fB\-Wmisleading\-indentation\fR استفاده می‌شود. .IP \fBfile\-cache\-lines\fR 4 .IX Item "file-cache-lines" بیشینهٔ تعداد خطوط برای نمایه‌سازی در حافظهٔ موقت فایل. هنگامی که مقدار 0 باشد، اندازه به صورت خودکار تعیین می‌شود. حافظهٔ موقت فایل برای چاپ خطوط منبع در پیام‌های تشخیصی و انجام برخی بررسی‌های منبع مانند \fB\-Wmisleading\-indentation\fR استفاده می‌شود. .IP \fBmax\-rtl\-if\-conversion\-predictable\-cost\fR 4 .IX Item "max-rtl-if-conversion-predictable-cost" تبدیل شرطی در RTL تلاش خواهد کرد انشعاب‌های شرطی اطراف یک بلوک را حذف کرده و آن‌ها را با دستورهای مشروط جایگزین نماید. این پارامترها بیشینهٔ هزینهٔ مجاز برای توالی تولیدشده توسط 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 روی آن‌ها انجام شود. در صورتی که تمام دستورهای موجود در بلوکی که پرش متقاطع از آن انجام می‌شود یکسان باشند، این مقدار نادیده گرفته می‌شود. .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 دستورهای پرش محاسبه‌شده را در مراحل اولیهٔ فرایند کامپایل فاکتورگیری کرده و در دیرترین زمان ممکن آن‌ها را از حالت فاکتور خارج می‌کند (unfactor). تنها پرش‌های محاسبه‌شده در انتهای بلوک‌های پایه‌ای که بیش از max\-goto\-duplication\-insns دستور نداشته باشند از حالت فاکتور خارج می‌شوند. .IP \fBmax\-delay\-slot\-insn\-search\fR 4 .IX Item "max-delay-slot-insn-search" بیشینهٔ تعداد دستوراتی که هنگام جست‌وجو برای یافتن یک دستور جهت پر کردن شکاف تأخیر (delay slot) بررسی می‌شوند. اگر بیش از این مقدار اختیاری از دستورها جست‌وجو شود، صرفه‌جویی زمانی حاصل از پر کردن شکاف تأخیر بسیار ناچیز خواهد بود، بنابراین جست‌وجو متوقف می‌شود. افزایش مقادیر به معنای بهینه‌سازی تهاجمی‌تر است که زمان کامپایل را با بهبود احتمالاً اندک در زمان اجرا افزایش می‌دهد. .IP \fBmax\-delay\-slot\-live\-search\fR 4 .IX Item "max-delay-slot-live-search" هنگام تلاش برای پر کردن delay slot، بیشینهٔ تعداد دستورهایی که هنگام جست‌وجو برای یک بلوک با اطلاعات معتبر ثبات‌های فعال (live register) بررسی می‌شوند. افزایش این مقدار اختیاری به معنای بهینه‌سازی تهاجمی‌تر و در نتیجه افزایش زمان کامپایل است. این پارامتر زمانی که کد delay slot برای حفظ گراف جریان کنترل (control\-flow graph) بازنویسی شود باید حذف گردد. .IP \fBmax\-gcse\-memory\fR 4 .IX Item "max-gcse-memory" بیشینهٔ تقریبی حافظه به \f(CW\*(C`kB\*(C'\fR که می‌تواند برای انجام بهینه‌سازی حذف زیرعبارت‌های مشترک سراسری (GCSE) تخصیص یابد. اگر حافظه‌ای بیشتر از مقدار مشخص‌شده مورد نیاز باشد، بهینه‌سازی انجام نمی‌شود. .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) که زمان‌بند هنگام زمان‌بندی پیمانه‌ای (modulo scheduling) یک حلقه باید انجام دهد. مقادیر بزرگ‌تر می‌توانند زمان کامپایل را به صورت نمایی افزایش دهند. .IP \fBmax\-inline\-functions\-called\-once\-loop\-depth\fR 4 .IX Item "max-inline-functions-called-once-loop-depth" بیشینهٔ عمق حلقه برای یک فراخوانی که توسط قواعد اکتشافی درونی‌سازی (که تلاش می‌کند تمام توابعِ تنها یک‌بار فراخوانی‌شده را درون‌خطی کند) بررسی می‌شود. .IP \fBmax\-inline\-functions\-called\-once\-insns\fR 4 .IX Item "max-inline-functions-called-once-insns" بیشینهٔ اندازهٔ تخمینی توابع تولیدشده هنگام درونی‌سازی توابعی که تنها یک‌بار فراخوانی شده‌اند. .IP \fBmax\-inline\-insns\-single\fR 4 .IX Item "max-inline-insns-single" چندین پارامتر، درونی‌ساز درختی (tree inliner) مورداستفاده در GCC را کنترل می‌کنند. این عدد، بیشینهٔ تعداد دستورات (شمارش‌شده در نمایش درونی GCC) در یک تک‌تابع را که درونی‌ساز درخت برای درون‌خطی کردن در نظر می‌گیرد، تعیین می‌کند. این پارامتر تنها بر توابعی که با inline اعلان شده‌اند و متدهایی که در اعلان کلاس پیاده‌سازی شده‌اند (C++) اثر می‌گذارد. .IP \fBmax\-inline\-insns\-auto\fR 4 .IX Item "max-inline-insns-auto" هنگامی که از \fB\-finline\-functions\fR (گنجانده‌شده در \fB\-O3\fR) استفاده می‌کنید، توابع فراوانی که در غیر این صورت توسط کامپایلر برای درونی‌سازی در نظر گرفته نمی‌شدند، بررسی می‌شوند. برای آن توابع، می‌توان حد متفاوتی (محدودکننده‌تر) در مقایسه با توابع اعلان‌شده با inline اعمال کرد (\fB\-\-param max\-inline\-insns\-auto\fR). .IP \fBmax\-inline\-insns\-small\fR 4 .IX Item "max-inline-insns-small" این حدِ اعمال‌شده برای فراخوانی‌هایی است که با \fB\-finline\-small\-functions\fR مرتبط در نظر گرفته می‌شوند. .IP \fBmax\-inline\-insns\-size\fR 4 .IX Item "max-inline-insns-size" این حدِ اعمال‌شده برای فراخوانی‌هایی است که برای اندازه بهینه‌سازی شده‌اند. ممکن است افزایش اندک در اندازه به منظور بهره‌گیری از فرصت‌های بهینه‌سازی ناشی از درونی‌سازی مطلوب باشد. .IP \fBuninlined\-function\-insns\fR 4 .IX Item "uninlined-function-insns" تعداد دستورهایی که درونی‌ساز برای سربار تابع مانند پیش‌درآمد (prologue) و پس‌درآمد (epilogue) تابع در نظر می‌گیرد. .IP \fBuninlined\-function\-time\fR 4 .IX Item "uninlined-function-time" زمان اضافی در نظر گرفته‌شده توسط درونی‌ساز برای سربار تابع، مانند زمان مورد نیاز برای اجرای پیش‌درآمد و پس‌درآمد تابع. .IP \fBinline\-heuristics\-hint\-percent\fR 4 .IX Item "inline-heuristics-hint-percent" مقیاس (به درصد) اعمال‌شده به \fBinline\-insns\-single\fR، \&\fBinline\-insns\-single\-O2\fR و \fBinline\-insns\-auto\fR هنگامی که قواعد اکتشافی درونی‌سازی نشان می‌دهند که درونی‌سازی بسیار سودمند است (بهینه‌سازی‌های بعدی را ممکن می‌سازد)..IP \fBuninlined\-thunk\-insns\fR 4 .IX Item "uninlined-thunk-insns" .PD 0 .IP \fBuninlined\-thunk\-time\fR 4 .IX Item "uninlined-thunk-time" .PD مشابه \fB\-\-param uninlined\-function\-insns\fR و \&\fB\-\-param uninlined\-function\-time\fR، اما برای thunkهای تابع اعمال می‌شود. .IP \fBinline\-min\-speedup\fR 4 .IX Item "inline-min-speedup" هنگامی که بهبود تخمینی کارایی زمان اجرای فراخواننده (caller) + فراخوانده‌شده (callee) از این آستانه (به درصد) فراتر رود، تابع می‌تواند بدون در نظر گرفتن محدودیت روی \&\fB\-\-param max\-inline\-insns\-single\fR و \fB\-\-param max\-inline\-insns\-auto\fR درون‌خطی شود. .IP \fBlarge\-function\-insns\fR 4 .IX Item "large-function-insns" حد تعیین‌کنندهٔ توابع بسیار بزرگ. برای توابعی که پس از درون‌خطی‌سازی بزرگ‌تر از این حد باشند، درون‌خطی‌سازی توسط \&\fB\-\-param large\-function\-growth\fR محدود می‌شود. این پارامتر عمدتاً برای جلوگیری از زمان کامپایل بیش از حد ناشی از الگوریتم‌های غیرخطی استفاده‌شده در بخش پشتی (back end) مفید است. .IP \fBlarge\-function\-growth\fR 4 .IX Item "large-function-growth" حداکثر رشد توابع بزرگ ناشی از درون‌خطی‌سازی را به درصد مشخص می‌کند. برای مثال، مقدار پارامتر 100 رشد تابع بزرگ را به 2.0 برابر اندازهٔ اصلی محدود می‌کند. .IP \fBlarge\-unit\-insns\fR 4 .IX Item "large-unit-insns" حد تعیین‌کنندهٔ واحد ترجمهٔ بزرگ. رشد ناشی از درون‌خطی‌سازی واحدهای بزرگ‌تر از این حد توسط \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++ که هنگام بارگذاری تنبلانه می‌توانند به‌طور هم‌زمان باز باشند. .IP \fBinline\-unit\-growth\fR 4 .IX Item "inline-unit-growth" حداکثر رشد کلی واحد کامپایل ناشی از درون‌خطی‌سازی را مشخص می‌کند. برای مثال، مقدار پارامتر 20 رشد واحد را به 1.2 برابر اندازهٔ اصلی محدود می‌کند. توابع سرد (چه با یک صفت مشخص شده باشند و چه با بازخورد پروفایل) در اندازهٔ واحد به حساب نمی‌آیند. .IP \fBipa\-cp\-unit\-growth\fR 4 .IX Item "ipa-cp-unit-growth" حداکثر رشد کلی واحد کامپایل ناشی از انتشار سراسری ثوابت بین رویه‌ها (interprocedural constant propagation) را مشخص می‌کند. برای مثال، مقدار پارامتر 10 رشد واحد را به 1.1 برابر اندازهٔ اصلی محدود می‌کند. .IP \fBipa\-cp\-large\-unit\-insns\fR 4 .IX Item "ipa-cp-large-unit-insns" اندازه‌ای از واحد ترجمه که گذر IPA\-CP آن را بزرگ در نظر می‌گیرد. .IP \fBlarge\-stack\-frame\fR 4 .IX Item "large-stack-frame" حد تعیین‌کنندهٔ فریم‌های پشتهٔ بزرگ. هنگام درون‌خطی‌سازی، الگوریتم تلاش می‌کند فراتر از این حد رشد چندانی نداشته باشد. .IP \fBlarge\-stack\-frame\-growth\fR 4 .IX Item "large-stack-frame-growth" حداکثر رشد فریم‌های پشتهٔ بزرگ ناشی از درون‌خطی‌سازی را به درصد مشخص می‌کند. برای مثال، مقدار پارامتر 1000 رشد فریم پشتهٔ بزرگ را به 11 برابر اندازهٔ اصلی محدود می‌کند. .IP \fBmax\-inline\-insns\-recursive\fR 4 .IX Item "max-inline-insns-recursive" .PD 0 .IP \fBmax\-inline\-insns\-recursive\-auto\fR 4 .IX Item "max-inline-insns-recursive-auto" .PD حداکثر تعداد دستورالعمل‌هایی را مشخص می‌کند که یک نسخهٔ خارج از خط (out\-of\-line) از یک تابع درون‌خطی خود\-بازگشتی با انجام درون‌خطی‌سازی بازگشتی می‌تواند به آن رشد کند. .Sp \&\fB\-\-param max\-inline\-insns\-recursive\fR برای توابعی که با عنوان inline تعریف شده‌اند اعمال می‌شود. برای توابعی که با عنوان inline تعریف نشده‌اند، درون‌خطی‌سازی بازگشتی تنها در صورتی اتفاق می‌افتد که \fB\-finline\-functions\fR (گنجانده‌شده در \fB\-O3\fR) فعال باشد؛ در این صورت به‌جای آن \fB\-\-param max\-inline\-insns\-recursive\-auto\fR اعمال می‌شود. .IP \fBmax\-inline\-recursive\-depth\fR 4 .IX Item "max-inline-recursive-depth" .PD 0 .IP \fBmax\-inline\-recursive\-depth\-auto\fR 4 .IX Item "max-inline-recursive-depth-auto" .PD حداکثر عمق بازگشت مورد استفاده برای درون‌خطی‌سازی بازگشتی را مشخص می‌کند. .Sp \&\fB\-\-param max\-inline\-recursive\-depth\fR برای توابعی که با عنوان inline تعریف شده‌اند اعمال می‌شود. برای توابعی که با عنوان inline تعریف نشده‌اند، درون‌خطی‌سازی بازگشتی تنها زمانی اتفاق می‌افتد که \fB\-finline\-functions\fR (گنجانده‌شده در \fB\-O3\fR) فعال باشد؛ در این صورت به‌جای آن \fB\-\-param max\-inline\-recursive\-depth\-auto\fR اعمال می‌شود. .IP \fBmin\-inline\-recursive\-probability\fR 4 .IX Item "min-inline-recursive-probability" درون‌خطی‌سازی بازگشتی تنها برای توابعی سودمند است که به‌طور میانگین دارای بازگشت عمیق هستند، و با افزایش اندازهٔ مقدمه (prologue) یا پیچیدگی بدنهٔ تابع برای سایر بهینه‌سازها، می‌تواند به توابعی که عمق بازگشت کمی دارند آسیب برساند. .Sp هنگامی که بازخورد پروفایل در دسترس است (به \fB\-fprofile\-generate\fR مراجعه کنید)، عمق واقعی بازگشت را می‌توان از روی احتمال بازگشت تابع از طریق یک عبارت فراخوانیِ مشخص تخمین زد. این پارامتر، درون‌خطی‌سازی را فقط به عبارات فراخوانی که احتمال آن‌ها از آستانهٔ مشخص‌شده (به درصد) فراتر رود محدود می‌کند. .IP \fBearly\-inlining\-insns\fR 4 .IX Item "early-inlining-insns" رشدی را مشخص می‌کند که درون‌خط‌ساز اولیه (early inliner) می‌تواند ایجاد کند. در عمل، این پارامتر میزان درون‌خطی‌سازی را برای کدهایی با جریمهٔ تجرید (abstraction penalty) بالا افزایش می‌دهد. .IP \fBmax\-early\-inliner\-iterations\fR 4 .IX Item "max-early-inliner-iterations" محدودیت تعداد تکرارهای درون‌خط‌ساز اولیه. این پارامتر اساساً تعداد فراخوانی‌های غیرمستقیم تو در تویی را که درون‌خط‌ساز اولیه می‌تواند حل‌وفصل کند محدود می‌سازد. زنجیره‌های عمیق‌تر همچنان توسط درون‌خطی‌سازی متأخر (late inlining) پردازش می‌شوند. .IP \fBcomdat\-sharing\-probability\fR 4 .IX Item "comdat-sharing-probability" احتمال (به درصد) این‌که توابع درون‌خطی C++ با سطح دید comdat بین چندین واحد کامپایل به اشتراک گذاشته شوند. .IP \fBmodref\-max\-bases\fR 4 .IX Item "modref-max-bases" .PD 0 .IP \fBmodref\-max\-refs\fR 4 .IX Item "modref-max-refs" .IP \fBmodref\-max\-accesses\fR 4 .IX Item "modref-max-accesses" .PD حداکثر تعداد اشاره‌گرهای پایه، ارجاع‌ها و دسترسی‌های ذخیره‌شده برای یک تابع منفرد را توسط تحلیل mod/ref مشخص می‌کند. .IP \fBmodref\-max\-tests\fR 4 .IX Item "modref-max-tests" حداکثر تعداد آزمون‌هایی را مشخص می‌کند که alias oracle می‌تواند برای رفع ابهام مکان‌های حافظه با استفاده از اطلاعات mod/ref انجام دهد. این پارامتر باید از \fB\-\-param modref\-max\-bases\fR و \fB\-\-param modref\-max\-refs\fR بزرگ‌تر باشد. .IP \fBmodref\-max\-depth\fR 4 .IX Item "modref-max-depth" حداکثر عمق پیمایش DFS مورد استفاده توسط تحلیل فرار modref را مشخص می‌کند. تنظیم آن روی 0 این تحلیل را به‌طور کامل غیرفعال می‌کند. .IP \fBmodref\-max\-escape\-points\fR 4 .IX Item "modref-max-escape-points" حداکثر تعداد نقاط فرار ردیابی‌شده توسط modref را به ازای هر SSA\-name مشخص می‌کند. .IP \fBmodref\-max\-adjustments\fR 4 .IX Item "modref-max-adjustments" حداکثر دفعاتی را مشخص می‌کند که بازهٔ دسترسی در طول تحلیل جریان دادهٔ modref گسترش می‌یابد. .IP \fBprofile\-func\-internal\-id\fR 4 .IX Item "profile-func-internal-id" پارامتری برای کنترل این‌که آیا از شناسهٔ داخلی تابع در جستجوی پایگاه دادهٔ پروفایل استفاده شود یا خیر. اگر این مقدار 0 باشد، کامپایلر از شناسه‌ای استفاده می‌کند که بر اساس نام اسمبلی تابع و نام فایل است، که باعث می‌شود داده‌های پروفایل قدیمی در برابر تغییرات کد منبع نظیر تغییر ترتیب توابع و غیره تحمل‌پذیرتر باشند. .IP \fBmin\-vect\-loop\-bound\fR 4 .IX Item "min-vect-loop-bound" حداقل تعداد تکرارهایی که در صورت کمتر بودن از آن، حلقه‌ها هنگام استفاده از \fB\-ftree\-vectorize\fR برداری‌سازی نمی‌شوند. برای مجاز بودن برداری‌سازی، تعداد تکرارها پس از برداری‌سازی باید بزرگ‌تر از مقدار مشخص‌شده توسط این گزینه باشد. .IP \fBgcse\-cost\-distance\-ratio\fR 4 .IX Item "gcse-cost-distance-ratio" ضریب مقیاس در محاسبهٔ حداکثر فاصله‌ای که یک عبارت می‌تواند توسط بهینه‌سازی‌های GCSE جابه‌جا شود. این پارامتر در حال حاضر فقط در گذر بالا کشیدن کد (code hoisting) پشتیبانی می‌شود. هرچه نسبت بزرگ‌تر باشد، بالا کشیدن کد برای عبارات ساده (یعنی عباراتی که هزینهٔ آن‌ها کمتر از \fBgcse\-unrestricted\-cost\fR است) تهاجمی‌تر خواهد بود. مشخص کردن 0، بالا کشیدن عبارات ساده را غیرفعال می‌کند. .IP \fBgcse\-unrestricted\-cost\fR 4 .IX Item "gcse-unrestricted-cost" هزینه‌ای (تقریباً معادل با هزینهٔ یک دستورالعمل ماشین معمول)، که در آن بهینه‌سازی‌های GCSE فاصله‌ای را که یک عبارت می‌تواند طی کند محدود نمی‌کنند. این پارامتر در حال حاضر فقط در گذر بالا کشیدن کد پشتیبانی می‌شود. هرچه هزینه کمتر باشد، بالا کشیدن کد تهاجمی‌تر است. مشخص کردن 0 به تمام عبارات اجازه می‌دهد تا فواصل نامحدود را طی کنند. .IP \fBmax\-hoist\-depth\fR 4 .IX Item "max-hoist-depth" عمق جستجو در درخت تسلط (dominator tree) برای یافتن عبارات جهت بالا کشیدن. این پارامتر برای جلوگیری از رفتار درجه دوم در الگوریتم بالا کشیدن استفاده می‌شود. مقدار 0 جستجو را محدود نمی‌کند، اما ممکن است کامپایل توابع بسیار بزرگ را کُند کند. .IP \fBmax\-tail\-merge\-comparisons\fR 4 .IX Item "max-tail-merge-comparisons" حداکثر تعداد بلوک‌های پایه‌ای (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" در صورت مجاز بودن، به گذر ادغام ذخیره‌سازی اجازه می‌دهد تا ذخیره‌سازی‌های غیرهم‌تراز (unaligned) ایجاد کند. .IP \fBmax\-stores\-to\-merge\fR 4 .IX Item "max-stores-to-merge" حداکثر تعداد ذخیره‌سازی‌هایی که گذر ادغام ذخیره‌سازی تلاش می‌کند آن‌ها را در ذخیره‌سازی‌های عریض‌تر ادغام کند. .IP \fBmax\-store\-chains\-to\-track\fR 4 .IX Item "max-store-chains-to-track" حداکثر تعداد زنجیره‌های ذخیره‌سازی که به‌طور هم‌زمان هنگام تلاش برای ادغام آن‌ها در ذخیره‌سازی‌های عریض‌تر در گذر ادغام ذخیره‌سازی ردیابی می‌شوند. .IP \fBmax\-stores\-to\-track\fR 4 .IX Item "max-stores-to-track" حداکثر تعداد ذخیره‌سازی‌هایی که به‌طور هم‌زمان هنگام تلاش برای ادغام آن‌ها در ذخیره‌سازی‌های عریض‌تر در گذر ادغام ذخیره‌سازی ردیابی می‌شوند..IP \fBmax\-unrolled\-insns\fR 4 .IX Item "max-unrolled-insns" حداکثر تعداد دستورالعمل‌هایی که یک حلقه می‌تواند داشته باشد تا باز (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" حداکثر تعداد دستورالعمل‌هایی که یک حلقه می‌تواند داشته باشد تا پوسته‌کنی (peel) شود. اگر حلقه‌ای پوسته‌کنی شود، این پارامتر همچنین تعیین می‌کند که کد حلقه چند بار پوسته‌کنی شود. .IP \fBmax\-peel\-times\fR 4 .IX Item "max-peel-times" حداکثر دفعات پوسته‌کنی (peeling) یک حلقه منفرد. .IP \fBmax\-peel\-branches\fR 4 .IX Item "max-peel-branches" حداکثر تعداد شاخه‌ها در مسیر داغ (hot path) در سرتاسر توالی پوسته‌کنی‌شده. .IP \fBmax\-completely\-peeled\-insns\fR 4 .IX Item "max-completely-peeled-insns" حداکثر تعداد دستورالعمل‌های (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 یا LIM). .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 یا IV) که پایین‌تر از آن، همه نامزدها برای هر مورد استفاده در بهینه‌سازی‌های متغیر القایی در نظر گرفته می‌شوند. اگر تعداد نامزدها بیشتر از این مقدار باشد، تنها مرتبط‌ترین آن‌ها بررسی می‌شوند تا از پیچیدگی زمانی درجه‌دوم جلوگیری شود. .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" اگر تعداد نامزدها در مجموعه کمتر از این مقدار باشد، هنگام افزودن یک مورد جدید، همیشه تلاش می‌شود تا ivهای غیرضروری از مجموعه حذف (هرس) شوند. .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) پشتیبانی می‌شود، مگر اینکه حلقه با عمل‌یافت simd نشانه‌گذاری شده باشد. .IP \fBvect\-max\-layout\-candidates\fR 4 .IX Item "vect-max-layout-candidates" حداکثر تعداد چیدمان‌های برداری ممکن (مانند جایگشت‌ها) که هنگام بهینه‌سازی کدی که باید برداری‌سازی شود در نظر گرفته می‌شوند. .IP \fBvect\-max\-version\-for\-alignment\-checks\fR 4 .IX Item "vect-max-version-for-alignment-checks" حداکثر تعداد بررسی‌های زمان اجرا که هنگام نسخه‌بندی حلقه برای ترازسازی در برداری‌ساز می‌توان انجام داد. .IP \fBvect\-max\-version\-for\-alias\-checks\fR 4 .IX Item "vect-max-version-for-alias-checks" حداکثر تعداد بررسی‌های زمان اجرا که هنگام نسخه‌بندی حلقه برای نام‌های مستعار در برداری‌ساز می‌توان انجام داد. .IP \fBvect\-max\-peeling\-for\-alignment\fR 4 .IX Item "vect-max-peeling-for-alignment" حداکثر تعداد پوسته‌کنی‌های حلقه برای ارتقای ترازسازی دسترسی در برداری‌ساز. مقدار \-1 به معنای نبود محدودیت است. .IP \fBmax\-iterations\-to\-track\fR 4 .IX Item "max-iterations-to-track" حداکثر تعداد تکرارهای یک حلقه که الگوریتم جامع (brute-force) برای تحلیل تعداد تکرارهای حلقه سعی در ارزیابی آن دارد. .IP \fBhot\-bb\-count\-fraction\fR 4 .IX Item "hot-bb-count-fraction" مخرج n از کسر 1/n حداکثر تعداد دفعات اجرای یک بلوک پایه‌ای در کل برنامه که یک بلوک پایه‌ای باید حداقل آن را داشته باشد تا داغ (hot) در نظر گرفته شود. مقدار پیش‌فرض 10000 است، به این معنی که یک بلوک پایه‌ای در صورتی داغ در نظر گرفته می‌شود که تعداد دفعات اجرای آن بیشتر از 1/10000 حداکثر تعداد دفعات اجرا باشد. مقدار 0 بدان معناست که هیچ‌گاه داغ در نظر گرفته نمی‌شود. در حالت غیر LTO استفاده می‌شود. .IP \fBhot\-bb\-count\-ws\-permille\fR 4 .IX Item "hot-bb-count-ws-permille" تعداد در هزار (پرمیل) بیشترین اجرا شده، بین 0 تا 1000، از اجرای پروفایل‌شده کل برنامه که تعداد دفعات اجرای یک بلوک پایه‌ای باید بخشی از آن باشد تا داغ محسوب شود. مقدار پیش‌فرض 990 است، به این معنی که یک بلوک پایه‌ای در صورتی داغ در نظر گرفته می‌شود که تعداد اجرای آن در 990 در هزار بالایی، یا 99.0٪ از اجرای پروفایل‌شده کل برنامه سهیم باشد. مقدار 0 یعنی هرگز داغ محسوب نمی‌شود. در حالت LTO استفاده می‌شود. .IP \fBhot\-bb\-frequency\-fraction\fR 4 .IX Item "hot-bb-frequency-fraction" مخرج n از کسر 1/n بسامد اجرای بلوک ورودی یک تابع که یک بلوک پایه‌ای از این تابع باید حداقل آن را داشته باشد تا داغ در نظر گرفته شود. مقدار پیش‌فرض 1000 است، به این معنی که یک بلوک پایه‌ای در یک تابع در صورتی داغ محسوب می‌شود که بسامد اجرای آن بیشتر از 1/1000 بسامد بلوک ورودی تابع باشد. مقدار 0 به معنای آن است که هرگز داغ محسوب نمی‌شود. .IP \fBunlikely\-bb\-count\-fraction\fR 4 .IX Item "unlikely-bb-count-fraction" مخرج n از کسر 1/n تعداد دفعات اجرای پروفایل‌شده کل برنامه که تعداد دفعات اجرای یک بلوک پایه‌ای باید کمتر از آن باشد تا اجرای آن بلوک بعید (unlikely executed) در نظر گرفته شود. مقدار پیش‌فرض 20 است، یعنی یک بلوک پایه‌ای در صورتی کم‌احتمال برای اجرا تلقی می‌شود که در کمتر از 1/20، یا 5٪ از اجراهای برنامه، اجرا شده باشد. مقدار 0 به این معناست که اجرای آن همیشه بعید در نظر گرفته می‌شود. .IP \fBmax\-predicted\-iterations\fR 4 .IX Item "max-predicted-iterations" حداکثر تعداد تکرارهای حلقه که به‌صورت ایستا پیش‌بینی می‌کنیم. این پارامتر در مواردی مفید است که یک تابع شامل یک حلقه با کران مشخص و حلقه دیگری با کران نامشخص باشد. تعداد تکرارهای مشخص به‌درستی پیش‌بینی می‌شود، در حالی که میانگین تعداد تکرارهای نامشخص تقریباً 10 تخمین زده می‌شود. این امر باعث می‌شود حلقه‌ای که کران نامشخص دارد در مقایسه با دیگری به‌طور کاذب سرد به نظر برسد. .IP \fBbuiltin\-expect\-probability\fR 4 .IX Item "builtin-expect-probability" احتمال اینکه عبارت مقدار مشخص‌شده را داشته باشد کنترل می‌کند. این پارامتر یک مقدار درصدی (یعنی بین 0 تا 100) را به عنوان ورودی دریافت می‌کند. .IP \fBbuiltin\-string\-cmp\-inline\-length\fR 4 .IX Item "builtin-string-cmp-inline-length" حداکثر طول یک رشته ثابت برای یک فراخوانی مقایسه رشته درونی (builtin string cmp) که واجد شرایط درون‌خطی‌سازی (inlining) است. .IP \fBalign\-threshold\fR 4 .IX Item "align-threshold" کسری از حداکثر بسامد اجراهای یک بلوک پایه‌ای در یک تابع را جهت تراز کردن (align) بلوک پایه‌ای انتخاب می‌کند. .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 فقط زمانی استفاده می‌شود که بازخورد پروفایل در دسترس باشد. پروفایل‌های واقعی (برخلاف موارد تخمین‌زده‌شده به‌صورت ایستا) تعادل بسیار کمتری دارند و اجازه می‌دهند که آستانه مقدار بزرگ‌تری داشته باشد. .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 بایت مشخص می‌کند. مقادیر بالاتر ممکن است تعداد کاوش‌های (probes) صریح را کاهش دهند، اما مقداری بزرگ‌تر از محافظ ارائه‌شده توسط سیستم‌عامل، کد را در برابر حملات نوع stack clash آسیب‌پذیر خواهد کرد. .IP \fBstack\-clash\-protection\-probe\-interval\fR 4 .IX Item "stack-clash-protection-probe-interval" حفاظت در برابر تداخل پشته (stack clash) شامل کاوش فضای پشته به هنگام تخصیص آن است. این پارامتر حداکثر فاصلهٔ بین کاوش‌ها درون پشته را به‌صورت ۲ به توان \fInum\fR بایت کنترل می‌کند. مقادیر بالاتر ممکن است تعداد کاوش‌های صریح را کاهش دهند، اما مقداری بزرگ‌تر از محافظ ارائه‌شده توسط سیستم‌عامل کد را در برابر حملات نوع stack clash آسیب‌پذیر خواهد گذاشت. .IP \fBmax\-cse\-path\-length\fR 4 .IX Item "max-cse-path-length" حداکثر تعداد بلوک‌های پایه‌ای (basic blocks) روی مسیری که 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) با حد بالای ۱۰۰٪ در زمانی است که 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 نباشد، حد پایین ۳۰٪ استفاده می‌شود. تنظیم این پارامتر و \&\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" حداکثر تعداد دستورالعمل‌های آماده برای صدور (issue) که زمان‌بند باید در هر زمان مشخص در طول اولین گذر زمان‌بندی در نظر بگیرد. مقادیر بالاتر به معنای جستجوهای دقیق‌تر و کامل‌تر است که زمان کامپایل را با منفعتی احتمالاً ناچیز افزایش می‌دهد. .IP \fBmax\-sched\-region\-blocks\fR 4 .IX Item "max-sched-region-blocks" حداکثر تعداد بلوک‌ها در یک ناحیه (region) که برای زمان‌بندی بین‌بلوکی در نظر گرفته می‌شوند. .IP \fBmax\-pipeline\-region\-blocks\fR 4 .IX Item "max-pipeline-region-blocks" حداکثر تعداد بلوک‌ها در یک ناحیه که برای خط‌لوله‌ای کردن (pipelining) در زمان‌بند انتخابی (selective scheduler) در نظر گرفته می‌شوند. .IP \fBmax\-sched\-region\-insns\fR 4 .IX Item "max-sched-region-insns" حداکثر تعداد دستورالعمل‌ها (insns) در یک ناحیه که برای زمان‌بندی بین‌بلوکی در نظر گرفته می‌شوند. .IP \fBmax\-pipeline\-region\-insns\fR 4 .IX Item "max-pipeline-region-insns" حداکثر تعداد دستورالعمل‌ها در یک ناحیه که برای خط‌لوله‌ای کردن در زمان‌بند انتخابی در نظر گرفته می‌شوند. .IP \fBmin\-spec\-prob\fR 4 .IX Item "min-spec-prob" حداقل احتمال (به درصد) برای رسیدن به یک بلوک مبدأ جهت زمان‌بندی حدسی (speculative) بین‌بلوکی. .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" حداکثر تأخیر تداخل برای یک دستورالعمل جهت در نظر گرفتن آن برای جابجایی حدسی (speculative motion). .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" حداقل احتمالی که یک یال (edge) باید داشته باشد تا زمان‌بند وضعیت خود را در سراسر آن ذخیره کند. .IP \fBsched\-mem\-true\-dep\-cost\fR 4 .IX Item "sched-mem-true-dep-cost" حداقل فاصله (به چرخه‌های CPU) بین ذخیره‌سازی (store) و بارگذاری (load) که مکان‌های حافظهٔ یکسانی را هدف قرار می‌دهند. .IP \fBselsched\-max\-lookahead\fR 4 .IX Item "selsched-max-lookahead" حداکثر اندازهٔ پنجرهٔ پیش‌نگری (lookahead window) در زمان‌بندی انتخابی. این مقدار، عمق جستجو برای دستورالعمل‌های در دسترس است. .IP \fBselsched\-max\-sched\-times\fR 4 .IX Item "selsched-max-sched-times" حداکثر دفعاتی که یک دستورالعمل در طول زمان‌بندی انتخابی زمان‌بندی می‌شود. این حد بر تعداد تکرارهایی اعمال می‌شود که دستورالعمل ممکن است در طول آن‌ها خط‌لوله‌ای شود. .IP \fBselsched\-insns\-to\-rename\fR 4 .IX Item "selsched-insns-to-rename" حداکثر تعداد بهترین دستورالعمل‌ها در فهرست آماده (ready list) که برای تغییر نام در زمان‌بند انتخابی در نظر گرفته می‌شوند. .IP \fBsms\-min\-sc\fR 4 .IX Item "sms-min-sc" حداقل مقدار شمارش مرحله (stage count) که زمان‌بند swing modulo تولید می‌کند. .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" حداکثر تعداد دستورهای (statements) مجاز در یک بلوک که هنگام ریسه‌بندی پرش‌ها (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) به‌صورت حساس به فیلد با آن‌ها رفتار می‌شود. .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" حداکثر تعداد عبارت‌ها (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" حداکثر تعداد caseها برای استفاده از الگوریتم‌های آهسته تنزل سطح (lowering) ساختار switch. .IP \fBmax\-partial\-antic\-length\fR 4 .IX Item "max-partial-antic-length" حداکثر طول مجموعه partial antic محاسبه‌شده در طول بهینه‌سازی حذف افزونگی جزئی درختی (\fB\-ftree\-pre\fR) هنگام بهینه‌سازی در \fB\-O3\fR و بالاتر. برای برخی انواع کدهای منبع، بهینه‌سازی پیشرفته حذف افزونگی جزئی ممکن است از کنترل خارج شده و تمام حافظه موجود در ماشین میزبان را مصرف کند. این پارامتر محدودیتی روی طول مجموعه‌های محاسبه‌شده قرار می‌دهد که از این رفتار مهارناپذیر جلوگیری می‌کند. تنظیم مقدار 0 برای این پارامتر، طول نامحدود برای مجموعه را مجاز می‌سازد. .IP \fBrpo\-vn\-max\-loop\-depth\fR 4 .IX Item "rpo-vn-max-loop-depth" حداکثر عمق حلقه‌ای که شماره‌گذاری مقداری (value-numbered) آن به‌صورت خوش‌بینانه انجام می‌شود. هنگامی که به این محدودیت برسد، درونی‌ترین حلقه‌ها به تعداد \&\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 از الگوریتمی پیشرفته برای فشرده‌سازی جدول تداخل استفاده می‌کند، این جدول همچنان می‌تواند برای توابع بسیار بزرگ به مقادیر بیش از حدی از حافظه نیاز داشته باشد. اگر جدول تداخل یک تابع بتواند بزرگ‌تر از مقدار داده‌شده بر حسب مگابایت (MB) توسط این پارامتر باشد، تخصیص‌دهنده ثبات در عوض از الگوریتمی سریع‌تر، ساده‌تر و با کیفیت پایین‌تر استفاده می‌کند که نیازی به ساخت جدول تداخل شبه‌ثبات‌ها ندارد. .IP \fBira\-loop\-reserved\-regs\fR 4 .IX Item "ira-loop-reserved-regs" می‌توان از IRA برای ارزیابی دقیق‌تر فشار ثبات در حلقه‌ها جهت تصمیم‌گیری درباره انتقال نامتغیرهای حلقه استفاده کرد (نگاه کنید به \fB\-O3\fR). تعداد ثبات‌های در دسترسی که برای برخی اهداف دیگر رزرو شده‌اند با این پارامتر مشخص می‌شود. مقدار پیش‌فرض این پارامتر بهترین مقدار به‌دست‌آمده از آزمایش‌های متعدد است. .IP \fBira\-consider\-dup\-in\-all\-alts\fR 4 .IX Item "ira-consider-dup-in-all-alts" باعث می‌شود IRA محدودیت تطابق (شماره عملوند تکراری) را به‌شدت در تمام گزینه‌های جایگزین دردسترس برای رده ثبات ترجیحی در نظر بگیرد. اگر روی صفر تنظیم شود، به این معنی است که IRA فقط زمانی محدودیت تطابق را لحاظ می‌کند که در تنها جایگزین دردسترس با یک رده ثبات مناسب قرار داشته باشد. در غیر این صورت، به این معنی است که IRA تمام گزینه‌های جایگزین دردسترس را برای رده ثبات ترجیحی بررسی می‌کند حتی اگر گزینه‌ای با یک رده ثبات مناسب پیدا کرده باشد، و محدودیت تطابق واجد شرایطِ یافت‌شده را رعایت خواهد کرد. .IP \fBira\-simple\-lra\-insn\-threshold\fR 4 .IX Item "ira-simple-lra-insn-threshold" تعداد تقریبی دستورالعمل‌های تابع در واحدهای 1K که باعث فعال‌سازی RA محلی ساده می‌شود. .IP \fBlra\-inheritance\-ebb\-probability\-cutoff\fR 4 .IX Item "lra-inheritance-ebb-probability-cutoff" سازوکار LRA تلاش می‌کند مقادیر بازخوانی‌شده (reloaded) در ثبات‌ها را در دستورالعمل‌های بعدی دوباره استفاده کند. این بهینه‌سازی وراثت نامیده می‌شود. از EBB به‌عنوان ناحیه‌ای برای انجام این بهینه‌سازی استفاده می‌شود. این پارامتر حداقل احتمال یال گذر مستقیم (fall-through edge) را بر حسب درصد تعریف می‌کند که برای افزودن BB به EBB وراثت در LRA استفاده می‌شود. مقدار پیش‌فرض از روی چندین اجرای SPEC2000 روی x86\-64 انتخاب شده است. .IP \fBloop\-invariant\-max\-bbs\-in\-loop\fR 4 .IX Item "loop-invariant-max-bbs-in-loop" انتقال نامتغیرهای حلقه (loop invariant motion) در حلقه‌های بسیار بزرگ می‌تواند هم از نظر زمان کامپایل و هم از نظر مقدار حافظه مورد نیاز هنگام کامپایل، بسیار هزینه‌بر باشد. در حلقه‌هایی با بلوک‌های پایه‌ای بیشتر از این پارامتر، بهینه‌سازی انتقال نامتغیر حلقه انجام نخواهد شد. .IP \fBloop\-max\-datarefs\-for\-datadeps\fR 4 .IX Item "loop-max-datarefs-for-datadeps" ساخت وابستگی‌های داده برای حلقه‌های بسیار بزرگ هزینه‌بر است. این پارامتر تعداد مراجع داده در حلقه‌ها را که برای تحلیل وابستگی داده در نظر گرفته می‌شوند محدود می‌کند. این حلقه‌های بزرگ توسط بهینه‌سازی‌هایی که از وابستگی داده‌های حلقه استفاده می‌کنند مدیریت نمی‌شوند. .IP \fBmax\-vartrack\-size\fR 4 .IX Item "max-vartrack-size" حداکثر تعداد خانه‌های جدول درهم‌سازی را برای استفاده در طول تحلیل جریان داده ردیابی متغیر در هر تابع تعیین می‌کند. اگر با فعال بودن ردیابی متغیر در انتساب‌ها از این حد فراتر رود، تحلیل برای آن تابع بدون آن و پس از حذف همه دستورالعمل‌های اشکال‌زدایی از تابع دوباره امتحان می‌شود. اگر حتی بدون دستورالعمل‌های اشکال‌زدایی نیز از حد مجاز فراتر رود، تحلیل ردیابی متغیر برای آن تابع کاملاً غیرفعال می‌شود. تنظیم این پارامتر روی صفر، آن را نامحدود می‌کند. .IP \fBmax\-vartrack\-expr\-depth\fR 4 .IX Item "max-vartrack-expr-depth" حداکثر تعداد سطوح بازگشت را هنگام تلاش برای نگاشت نام‌های متغیر یا متغیرهای موقت اشکال‌زدایی به عبارت‌های مقداری تعیین می‌کند. این کار زمان کامپایل را با اطلاعات اشکال‌زدایی کامل‌تر معاوضه می‌کند. اگر این مقدار بیش از حد کم تنظیم شود، ممکن است عبارت‌های مقداری که در دسترس هستند و می‌توانستند در اطلاعات اشکال‌زدایی نمایش داده شوند استفاده نشوند؛ تنظیم این مقدار روی عددی بالاتر ممکن است به کامپایلر امکان دهد عبارت‌های اشکال‌زدایی پیچیده‌تری را پیدا کند، اما زمان کامپایل و مصرف حافظه ممکن است افزایش یابد. .IP \fBmax\-debug\-marker\-count\fR 4 .IX Item "max-debug-marker-count" آستانه‌ای برای تعداد نشانگرهای اشکال‌زدایی (مانند نشانگرهای شروع عبارت begin stmt) تعیین می‌کند تا از انفجار پیچیدگی در زمان جای‌گذاری درون‌خطی یا بسط به RTL جلوگیری شود. اگر تابعی تعداد بیشتری از چنین عبارت‌های gimple نسبت به حد تعیین‌شده داشته باشد، چنین عبارت‌هایی از نسخه درون‌خطی‌شده تابع و از بسط RTL آن حذف خواهند شد. .IP \fBmin\-nondebug\-insn\-uid\fR 4 .IX Item "min-nondebug-insn-uid" از 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 نیست، تنها زمانی با یک یا چند پارامتر جدید جایگزین می‌کند که احتمال (بر حسب درصد، نسبت به ورودی تابع) ارجاع‌زدایی شدن آن بیشتر از این پارامتر باشد. .IP \fBipa\-sra\-ptr\-growth\-factor\fR 4 .IX Item "ipa-sra-ptr-growth-factor" سازوکار IPA\-SRA اشاره‌گر به یک داده تجمعی (aggregate) را تنها زمانی با یک یا چند پارامتر جدید جایگزین می‌کند که اندازه تجمعی آن‌ها کمتر یا مساوی با \&\fBipa\-sra\-ptr\-growth\-factor\fR برابر اندازه پارامتر اشاره‌گر اصلی باشد. .IP \fBipa\-sra\-ptrwrap\-growth\-factor\fR 4 .IX Item "ipa-sra-ptrwrap-growth-factor" حداکثر رشد مجاز اضافی اندازه کل پارامترهای جدیدی که ipa\-sra یک اشاره‌گر به یک داده تجمعی را با آن جایگزین می‌کند، در صورتی که به یک متغیر محلی اشاره کند که فراخواننده فقط در آن می‌نویسد و آن را به‌عنوان آرگومان به سایر توابع ارسال می‌کند. .IP \fBipa\-sra\-max\-replacements\fR 4 .IX Item "ipa-sra-max-replacements" حداکثر تکه‌هایی از یک داده تجمعی که IPA\-SRA ردیابی می‌کند. در نتیجه، این مقدار همچنین حداکثر تعداد جایگزینی‌های یک پارامتر صوری (formal parameter) است. .IP \fBsra\-max\-scalarization\-size\-Ospeed\fR 4 .IX Item "sra-max-scalarization-size-Ospeed" .PD 0 .IP \fBsra\-max\-scalarization\-size\-Osize\fR 4 .IX Item "sra-max-scalarization-size-Osize" .PD دو گذر کاهش اسکالر تجمعی‌ها (SRA و IPA\-SRA) با هدف جایگزینی بخش‌های اسکالر داده‌های تجمعی با استفاده از متغیرهای اسکالر مستقل عمل می‌کنند. این پارامترها حداکثر اندازه (بر حسب واحدهای ذخیره‌سازی) از داده تجمعی را که هنگام کامپایل برای سرعت (\fBsra\-max\-scalarization\-size\-Ospeed\fR) یا اندازه (\fBsra\-max\-scalarization\-size\-Osize\fR) برای جایگزینی در نظر گرفته می‌شود، کنترل می‌کنند..IP \fBsra\-max\-propagations\fR 4 .IX Item "sra-max-propagations" حداکثر تعداد دسترسی‌های ساختگی که «جایگزینی اسکالر تجمیع‌ها» (SRA) برای هر متغیر محلی به منظور تسهیل انتشار رونوشت (copy propagation) ردیابی می‌کند. .IP \fBtm\-max\-aggregate\-size\fR 4 .IX Item "tm-max-aggregate-size" هنگام ایجاد رونوشت از متغیرهای محلی نخ (thread-local) در یک تراکنش، این پارامتر اندازه را بر حسب بایت مشخص می‌کند که پس از آن، متغیرها برخلاف جفت‌توالی‌های کد ذخیره/بازیابی (save/restore)، با استفاده از توابع گزارش‌گیری (logging) ذخیره می‌شوند. این گزینه فقط هنگام استفاده از \&\fB\-fgnu\-tm\fR اعمال می‌شود. .IP \fBgraphite\-max\-nb\-scop\-params\fR 4 .IX Item "graphite-max-nb-scop-params" برای جلوگیری از اثرات تصاعدی در تبدیلات حلقهٔ Graphite، تعداد پارامترها در یک «بخش کنترل ایستا» (SCoP) محدود شده است. از مقدار صفر می‌توان برای برداشتن این محدودیت استفاده کرد. متغیری که مقدار آن در زمان کامپایل نامشخص بوده و در خارج از یک SCoP تعریف شده باشد، پارامتری از آن SCoP محسوب می‌شود. .IP \fBhardcfr\-max\-blocks\fR 4 .IX Item "hardcfr-max-blocks" غیرفعال‌سازی \fB\-fharden\-control\-flow\-redundancy\fR برای توابعی با تعداد بلوک‌های بیشتر از مقدار مشخص‌شده. مقدار صفر هرگونه محدودیتی را برمی‌دارد. .IP \fBhardcfr\-max\-inline\-blocks\fR 4 .IX Item "hardcfr-max-inline-blocks" وادار کردن \fB\-fharden\-control\-flow\-redundancy\fR به استفاده از بررسی‌های خارج از خط (out\-of\-line) برای توابعی با تعداد بلوک‌های پایه‌ای بیشتر از مقدار مشخص‌شده. .IP \fBloop\-block\-tile\-size\fR 4 .IX Item "loop-block-tile-size" تبدیلات انسداد حلقه (loop blocking) یا استخراج نواری (strip mining) که با \&\fB\-floop\-block\fR یا \fB\-floop\-strip\-mine\fR فعال می‌شوند، هر حلقه را در آشیانهٔ حلقه به تعداد تکرار مشخصی بخش‌بندی نواری می‌کنند. طول نوار را می‌توان با استفاده از پارامتر \fBloop\-block\-tile\-size\fR تغییر داد. .IP \fBipa\-jump\-function\-lookups\fR 4 .IX Item "ipa-jump-function-lookups" تعداد دستورهای بررسی‌شده در طول کشف آفست تابع پرش (jump function) را مشخص می‌کند. .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) محاسبه می‌کند و آن دسته از فرصت‌های همتاسازی را که امتیازشان از \&\fBipa\-cp\-eval\-threshold\fR فراتر رود اجرا می‌کند. .IP \fBipa\-cp\-max\-recursive\-depth\fR 4 .IX Item "ipa-cp-max-recursive-depth" حداکثر عمق همتاسازی بازگشتی برای تابع خودبازگشتی. .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 همچنین قادر است تعدادی از مقادیر اسکالر ارسال‌شده در یک دادهٔ تجمیعی (aggregate) را منتشر کند. \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" حداکثر تعداد گزاره‌های متفاوتی که 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 عبارت شرطی ارجاع‌دهنده به پارامتر تابع را بررسی می‌کند تا سود همتاسازی بر اساس یک مقدار ثابت خاص را برآورد کند. اما اگر تعداد عملیات‌ها در عبارت پارامتر از \&\fBipa\-max\-param\-expr\-ops\fR فراتر رود، عبارت به عنوان عبارتی پیچیده در نظر گرفته شده و توسط تحلیل IPA پردازش نمی‌شود. .IP \fBlto\-partitions\fR 4 .IX Item "lto-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 برای بسامد اجرای فراخوانی‌شونده‌ای که باید برای یک فراخوانندهٔ خاص همتاسازی شود. مقدار ویژهٔ 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" حداکثر تعداد فضاهای نام برای مراجعه به منظور ارائهٔ پیشنهادات، هنگامی که جستجوی نام 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) را تعیین می‌کند. این پارامتر در صورت داشتن مقدار غیرصفر، قواعد اکتشافی وابسته به هدف را که به صورت پیش‌فرض استفاده می‌شوند بازنویسی می‌کند. .IP \fBsched\-pressure\-algorithm\fR 4 .IX Item "sched-pressure-algorithm" انتخاب میان دو پیاده‌سازی موجود از \&\fB\-fsched\-pressure\fR. الگوریتم 1 پیاده‌سازی اصلی است و بیشتر احتمال دارد که از بازآرایی دستورالعمل‌ها جلوگیری کند. الگوریتم 2 به عنوان مصالحه‌ای میان رویکرد نسبتاً محافظه‌کارانهٔ الگوریتم 1 و رویکرد نسبتاً تهاجمی زمان‌بند پیش‌فرض طراحی شده است. این الگوریتم اتکای بیشتری بر داشتن یک بانک ثبات منظم و رده‌های دقیق فشار ثبات دارد. برای جزئیات بیشتر به \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" فعال‌سازی تشخیص سرریز بافر برای اشیاء سراسری. این نوع حفاظت در صورت استفاده از گزینهٔ \&\fB\-fsanitize=address\fR به صورت پیش‌فرض فعال است. برای غیرفعال کردن حفاظت از اشیاء سراسری از \fB\-\-param asan\-globals=0\fR استفاده کنید. .IP \fBasan\-stack\fR 4 .IX Item "asan-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" اگر تعداد دسترسی‌ها به حافظه در تابعی که سنجش‌گذاری (instrumentation) می‌شود بزرگ‌تر یا مساوی این عدد باشد، به جای بررسی‌های درون‌خطی از فراخوانی‌های بازگشتی (callbacks) استفاده می‌کند. برای نمونه جهت غیرفعال کردن کد درون‌خطی از \&\fB\-\-param asan\-instrumentation\-with\-call\-threshold=0\fR استفاده کنید. .IP \fBasan\-kernel\-mem\-intrinsic\-prefix\fR 4 .IX Item "asan-kernel-mem-intrinsic-prefix" در صورت غیرصفر بودن، فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR، \f(CW\*(C`memset\*(C'\fR و \f(CW\*(C`memmove\*(C'\fR را به ترتیب برای \fB\-fsanitize=kernel\-address\fR یا \fB\-fsanitize=kernel\-hwaddress\fR با پیشوند \fB_\|_asan_\fR یا \fB_\|_hwasan_\fR قرار می‌دهد. .IP \fBhwasan\-instrument\-stack\fR 4 .IX Item "hwasan-instrument-stack" سنجش‌گذاری hwasan را برای متغیرهای تخصیص‌یافته روی پشته با اندازهٔ ایستا فعال می‌کند. این نوع سنجش‌گذاری هنگام استفاده از \&\fB\-fsanitize=hwaddress\fR به‌طور پیش‌فرض فعال و هنگام استفاده از \&\fB\-fsanitize=kernel\-hwaddress\fR به‌طور پیش‌فرض غیرفعال است. برای غیرفعال کردن سنجش‌گذاری پشته از \&\fB\-\-param hwasan\-instrument\-stack=0\fR و برای فعال کردن آن از \&\fB\-\-param hwasan\-instrument\-stack=1\fR استفاده کنید. .IP \fBhwasan\-random\-frame\-tag\fR 4 .IX Item "hwasan-random-frame-tag" هنگام استفاده از سنجش‌گذاری پشته، برچسب‌های متغیرهای پشته را با استفاده از یک دنبالهٔ معین که برای هر فریم از یک برچسب تصادفی آغاز می‌شود، تعیین می‌کند. در صورت تنظیم نبودن این پارامتر، برچسب‌ها با همان دنباله ولی با شروع از ۱ انتخاب می‌شوند. این ویژگی به‌طور پیش‌فرض برای \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 را برای توابع درونی (builtin) فعال می‌کند. سنجش‌گذاری این توابع درونی به‌طور پیش‌فرض هم برای \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" اگر اندازهٔ یک متغیر محلی بر حسب بایت، کوچک‌تر یا مساوی این عدد باشد، به جای استفاده از فراخوانی‌های بازگشتی زمان اجرا، حافظهٔ سایه (shadow memory) را مستقیماً مسموم (یا رفع مسمومیت) می‌کند. .IP \fBtsan\-distinguish\-volatile\fR 4 .IX Item "tsan-distinguish-volatile" سنجش‌گذاری ویژه‌ای را برای دسترسی‌ها به متغیرهای فرار (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" حداکثر تعداد دستورالعمل‌ها برای کپی هنگام تکثیر بلوک‌ها روی مسیر جهش رشته‌ایِ ماشین حالت متناهی (FSM). .IP \fBthreader\-debug\fR 4 .IX Item "threader-debug" دستور threader\-debug=[none|all] خروجی تشخیصی با جزئیات کامل را برای حل‌کنندهٔ threader فعال می‌کند. .IP \fBparloops\-chunk\-size\fR 4 .IX Item "parloops-chunk-size" اندازهٔ تکه (chunk size) در زمان‌بندی omp برای حلقه‌هایی که توسط parloops موازی‌سازی شده‌اند. .IP \fBparloops\-schedule\fR 4 .IX Item "parloops-schedule" نوع زمان‌بندی omp برای حلقه‌های موازی‌سازی‌شده توسط parloops (شامل static، dynamic، guided، auto و runtime). .IP \fBparloops\-min\-per\-thread\fR 4 .IX Item "parloops-min-per-thread" حداقل تعداد تکرارهای درونی‌ترین حلقهٔ موازی‌سازی‌شده به‌ازای هر رشته که در آن حالت موازی‌سازی‌شده بر حالت تک‌رشته‌ای ترجیح داده می‌شود. توجه داشته باشید که برای یک آشیانهٔ حلقهٔ موازی‌سازی‌شده، حداقل تعداد تکرارهای بیرونی‌ترین حلقه به‌ازای هر رشته ۲ است. .IP \fBmax\-ssa\-name\-query\-depth\fR 4 .IX Item "max-ssa-name-query-depth" حداکثر عمق بازگشت (recursion) هنگام پرس‌وجوی ویژگی‌های نام‌های SSA در مواردی مانند روال‌های جمع‌کردن ثوابت (fold). یک سطح بازگشت معادل پیمودن یک زنجیرهٔ use\-def است. .IP \fBmax\-speculative\-devirt\-maydefs\fR 4 .IX Item "max-speculative-devirt-maydefs" حداکثر تعداد may\-defهایی که هنگام جستجو برای یک must\-def بررسی می‌شوند؛ تعیین‌کنندهٔ نوع پویای شیئی که یک فراخوانی مجازی را صدا می‌زند و ممکن است بتوانیم آن را به‌صورت حدسی (speculative) غیرمجازی (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 باز شود. .IP \fBmax\-rtl\-if\-conversion\-unpredictable\-cost\fR 4 .IX Item "max-rtl-if-conversion-unpredictable-cost" حداکثر هزینهٔ مجاز برای دنباله‌ای که توسط مرحلهٔ RTL if\-conversion برای یک شاخهٔ غیرقابل پیش‌بینی تولید خواهد شد. .IP \fBmax\-variable\-expansions\-in\-unroller\fR 4 .IX Item "max-variable-expansions-in-unroller" در صورت استفاده از \fB\-fvariable\-expansion\-in\-unroller\fR، حداکثر تعداد دفعاتی است که یک متغیر مشخص در حین باز کردن حلقه بسط داده می‌شود. .IP \fBpartial\-inlining\-entry\-probability\fR 4 .IX Item "partial-inlining-entry-probability" حداکثر احتمال بلوک پایهٔ ورودی (entry BB) ناحیهٔ تفکیک‌شده (به درصد نسبت به بلوک پایهٔ ورودی تابع) برای اینکه درون‌خطی‌سازی جزئی (partial inlining) رخ دهد. .IP \fBmax\-tracked\-strlens\fR 4 .IX Item "max-tracked-strlens" حداکثر تعداد رشته‌هایی که مرحلهٔ بهینه‌سازی strlen طول آن‌ها را ردگیری خواهد کرد. .IP \fBgcse\-after\-reload\-partial\-fraction\fR 4 .IX Item "gcse-after-reload-partial-fraction" نسبت آستانه برای انجام حذف افزونگی جزئی (partial redundancy elimination) پس از مرحلهٔ reload. .IP \fBgcse\-after\-reload\-critical\-fraction\fR 4 .IX Item "gcse-after-reload-critical-fraction" نسبت آستانهٔ تعداد اجرای یال‌های بحرانی (critical edges) که اجازهٔ انجام حذف افزونگی را پس از reload می‌دهد. .IP \fBmax\-loop\-header\-insns\fR 4 .IX Item "max-loop-header-insns" حداکثر تعداد دستورالعمل‌ها (insns) در سرآیند حلقه که توسط مرحلهٔ کپی سرآیندهای حلقه تکثیر می‌شوند. .IP \fBvect\-epilogues\-nomask\fR 4 .IX Item "vect-epilogues-nomask" برداری‌سازی پایان‌بخش حلقه (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" حداکثر ضریبی که برداری‌ساز حلقه روی هزینهٔ دستورها در یک حلقهٔ داخلی نسبت به حلقهٔ در حال برداری‌سازی اعمال می‌کند. ضریب اعمال‌شده بیشینهٔ تعداد تکرارهای تخمینی حلقهٔ داخلی و مقدار این پارامتر است. مقدار پیش‌فرض این پارامتر ۵۰ است. .IP \fBvect\-induction\-float\fR 4 .IX Item "vect-induction-float" برداری‌سازی حلقه را برای متغیرهای القایی ممیز شناور فعال می‌کند. .IP \fBvect\-force\-slp\fR 4 .IX Item "vect-force-slp" استفاده از SLP را هنگام برداری‌سازی اجباری می‌کند و در صورت عدم امکان، با شکست متوقف می‌شود. .IP \fBvrp\-block\-limit\fR 4 .IX Item "vrp-block-limit" حداکثر تعداد بلوک‌های پایه قبل از اینکه VRP به الگوریتمی با مصرف حافظهٔ کمتر تغییر جهت دهد. .IP \fBvrp\-sparse\-threshold\fR 4 .IX Item "vrp-sparse-threshold" حداکثر تعداد بلوک‌های پایه قبل از اینکه VRP از یک حافظهٔ نهان بیت‌مپ پراکنده استفاده کند. .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 را کاملاً خط‌لوله‌ای (پایپ‌لاین) می‌کند یا خیر. در صورت غیرصفر بودن، بازپیوند (reassociation) با این فرض که FMUL و FMA از واحدهای یکسانی استفاده می‌کنند که توانایی اجرای FADD را نیز دارند، مزیت موازی‌سازی بخش ضرب و بخش جمع FMA را در نظر می‌گیرد. .IP \fBsms\-loop\-average\-count\-threshold\fR 4 .IX Item "sms-loop-average-count-threshold" آستانه‌ای برای میانگین تعداد تکرار حلقه که توسط swing modulo scheduler در نظر گرفته می‌شود. .IP \fBsms\-dfa\-history\fR 4 .IX Item "sms-dfa-history" تعداد چرخه‌هایی که swing modulo scheduler هنگام بررسی تداخل‌ها با استفاده از DFA در نظر می‌گیرد. .IP \fBgraphite\-allow\-codegen\-errors\fR 4 .IX Item "graphite-allow-codegen-errors" مشخص می‌کند که آیا خطاهای تولید کد (codegen) هنگام فعال بودن \fB\-fchecking\fR باید خطای داخلی کامپایلر (ICE) در نظر گرفته شوند یا خیر. .IP \fBsms\-max\-ii\-factor\fR 4 .IX Item "sms-max-ii-factor" ضریبی برای تنظیم کران بالایی که swing modulo scheduler برای زمان‌بندی یک حلقه استفاده می‌کند. .IP \fBlra\-max\-considered\-reload\-pseudos\fR 4 .IX Item "lra-max-considered-reload-pseudos" حداکثر تعداد شبه‌رجیسترهای reload که هنگام بیرون‌ریزی (spilling) یک شبه‌رجیستر غیر reload در نظر گرفته می‌شوند. .IP \fBmax\-pow\-sqrt\-depth\fR 4 .IX Item "max-pow-sqrt-depth" حداکثر عمق زنجیره‌های sqrt جهت استفاده هنگام ترکیب توان‌رسانی با یک ثابت حقیقی. .IP \fBmax\-dse\-active\-local\-stores\fR 4 .IX Item "max-dse-active-local-stores" حداکثر تعداد ذخیره‌سازی‌های محلی فعال در حذف ذخیره‌سازی‌های مرده‌ی RTL (موسوم به RTL DSE). .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 که باید عملیات معکوس برای آن اضافه شود. .IP \fBfsm\-scale\-path\-stmts\fR 4 .IX Item "fsm-scale-path-stmts" ضریب مقیاس اعمالی بر تعداد گزاره‌ها در یک مسیر ریسه‌کشی (threading path) که هنگام مقایسه با \&\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) سخت‌افزاری. تعداد چرخه‌های پیش‌نگری که مدل بررسی می‌کند؛ در \*(Aq0\*(Aq \&\*(Aq تنها روش اکتشافی مرتب‌سازی دستورالعمل‌ها فعال می‌شود. .IP \fBloop\-versioning\-max\-inner\-insns\fR 4 .IX Item "loop-versioning-max-inner-insns" حداکثر تعداد دستورالعمل‌هایی که یک حلقه درونی می‌تواند داشته باشد پیش از آن‌که گذر نسخه‌بندی حلقه آن را برای رونویسی بیش از حد بزرگ در نظر بگیرد. .IP \fBloop\-versioning\-max\-outer\-insns\fR 4 .IX Item "loop-versioning-max-outer-insns" حداکثر تعداد دستورالعمل‌هایی که یک حلقه بیرونی می‌تواند داشته باشد پیش از آن‌که گذر نسخه‌بندی حلقه آن را برای رونویسی بیش از حد بزرگ تشخیص دهد، بدون احتساب هرگونه دستورالعمل در حلقه‌های درونی که مستقیماً از نسخه‌بندی سود می‌برند. .IP \fBssa\-name\-def\-chain\-limit\fR 4 .IX Item "ssa-name-def-chain-limit" حداکثر تعداد انتساب‌های SSA_NAME جهت دنبال‌کردن هنگام تعیین یک ویژگی متغیر نظیر مقدار آن. این گزینه تعداد تکرارها یا فراخوانی‌های بازگشتی را که GCC هنگام بهینه‌سازی برخی گزاره‌ها یا تعیین اعتبار آن‌ها پیش از صدور پیام‌های تشخیصی انجام می‌دهد، محدود می‌کند. .IP \fBstore\-merging\-max\-size\fR 4 .IX Item "store-merging-max-size" حداکثر اندازه یک ناحیه ادغام ذخیره‌سازی (store merging) به بایت. .IP \fBstore\-forwarding\-max\-distance\fR 4 .IX Item "store-forwarding-max-distance" حداکثر فاصله برحسب تعداد دستورالعمل‌ها که طی آن یک ذخیره کوچک ارسال‌شده به یک بارگذاری بزرگتر ممکن است متوقف (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" حداکثر تعداد مقادیر (VALUEs) مدیریت‌شده در طول یک فراخوانی 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" حداکثر عمق یک مقدار نمادین، پیش از تقریب زدن آن به عنوان مقدار ناشناخته. .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" تعداد بایت‌هایی که فراتر از آن، لیترال‌های رشته‌ای در نمودارهای متنی (text art) تحلیل‌گر با سه‌نقطه خلاصه‌سازی می‌شوند. .IP \fBanalyzer\-text\-art\-ideal\-canvas\-width\fR 4 .IX Item "analyzer-text-art-ideal-canvas-width" عرض ایده‌آل برحسب نویسه برای نمودارهای هنر متنی تولیدشده توسط تحلیل‌گر. .IP \fBanalyzer\-text\-art\-string\-ellipsis\-head\-len\fR 4 .IX Item "analyzer-text-art-string-ellipsis-head-len" تعداد بایت‌های لیترال جهت نمایش در ابتدای یک لیترال رشته‌ای در هنر متنی هنگام خلاصه‌سازی آن. .IP \fBanalyzer\-text\-art\-string\-ellipsis\-tail\-len\fR 4 .IX Item "analyzer-text-art-string-ellipsis-tail-len" تعداد بایت‌های لیترال جهت نمایش در انتهای یک لیترال رشته‌ای در هنر متنی هنگام خلاصه‌سازی آن. .IP \fBranger\-logical\-depth\fR 4 .IX Item "ranger-logical-depth" حداکثر عمق ارزیابی عبارات منطقی که ranger هنگام ارزیابی بازه‌های یال خروجی بررسی خواهد کرد. .IP \fBranger\-recompute\-depth\fR 4 .IX Item "ranger-recompute-depth" حداکثر عمق زنجیره‌های دستورالعمل برای در نظر گرفتن جهت محاسبه مجدد در محاسبه‌گر بازه خروجی. .IP \fBrelation\-block\-limit\fR 4 .IX Item "relation-block-limit" حداکثر تعداد روابطی که اوراکل در یک بلوک پایه ثبت خواهد کرد. .IP \fBtransitive\-relations\-work\-bound\fR 4 .IX Item "transitive-relations-work-bound" حد کاری هنگام کشف روابط تعدی از روابط موجود. .IP \fBmin\-pagesize\fR 4 .IX Item "min-pagesize" حداقل اندازه صفحه برای اهداف هشدار و بردارسازی خروج زودهنگام (early break). .IP \fBopenacc\-kernels\fR 4 .IX Item "openacc-kernels" تعیین حالت مدیریت ساختارهای \`kernels\*(Aq در OpenACC. با \fB\-\-param=openacc\-kernels=decompose\fR، ساختارهای \`kernels\*(Aq در OpenACC به بخش‌هایی تجزیه می‌شوند؛ توالی‌ای از ساختارهای محاسباتی که هر یک سپس به صورت جداگانه مدیریت می‌شوند. این ویژگی در حال توسعه است. با \fB\-\-param=openacc\-kernels=parloops\fR، ساختارهای \`kernels\*(Aq در OpenACC توسط گذر \fBparloops\fR به صورت یکپارچه مدیریت می‌شوند. این مقدار، پیش‌فرض فعلی است. .IP \fBopenacc\-privatization\fR 4 .IX Item "openacc-privatization" کنترل می‌کند که آیا \fB\-fopt\-info\-omp\-note\fR و گزینه‌های قابل اعمال \&\fB\-fdump\-tree\-*\-details\fR پیام‌های تشخیصی خصوصی‌سازی OpenACC را منتشر کنند یا خیر. با \fB\-\-param=openacc\-privatization=quiet\fR، تشخیصی داده نمی‌شود. این مقدار، پیش‌فرض فعلی است. با \fB\-\-param=openacc\-privatization=noisy\fR، تشخیص انجام می‌شود. .IP \fBcycle\-accurate\-model\fR 4 .IX Item "cycle-accurate-model" مشخص می‌کند که آیا GCC باید در صورت عدم وجود خطای کِش (cache miss)، توصیف زمان‌بندی را عمدتاً یک مدل با دقت چرخه (cycle-accurate) از پردازنده مقصدی که کد قرار است روی آن اجرا شود فرض کند یا خیر. مقدار غیرصفر به این معناست که مدل زمان‌بندی انتخاب‌شده دقیق بوده و احتمالاً یک پردازنده ترتیبی (in-order) را توصیف می‌کند، و اینکه زمان‌بندی باید برای تلاش جهت پر کردن حباب‌های خط لوله به‌طور تهاجمی عمل بیرون‌ریزی (spill) را انجام دهد. این مقدار، پیش‌فرض فعلی است. مقدار صفر به این معناست که توصیف زمان‌بندی ممکن است در دسترس/دقیق نباشد یا شاید اصلاً قابل اعمال نباشد، مانند پردازنده‌های مدرن خارج از نوبت (out-of-order). .RE .RS 4 .Sp انتخاب‌های زیر برای \fIname\fR روی مقصدهای AArch64 در دسترس هستند:.IP \fBaarch64\-vect\-compare\-costs\fR 4 .IX Item "aarch64-vect-compare-costs" هنگام بردارسازی (vectorizing)، استفاده از چندین رویکرد مختلف را مد نظر قرار داده و از مدل هزینه (cost model) برای انتخاب کم‌هزینه‌ترین آن‌ها استفاده می‌کند. این شامل موارد زیر است: .RS 4 .IP * 4 آزمودن هر دوی SVE و Advanced SIMD، هنگامی که SVE در دسترس باشد. .IP * 4 آزمودن استفاده از بردارهای ۶۴ بیتی Advanced SIMD برای کوچک‌ترین عناصر داده، به‌جای استفاده از بردارهای ۱۲۸ بیتی برای همه‌چیز. .IP * 4 آزمودن استفاده از بردارهای SVE «بازنشده» (unpacked) برای عناصر کوچک‌تر. این شامل ذخیره عناصر کوچک‌تر در ظرف‌های بزرگ‌تر و دسترسی به عناصر با بارگذاری‌های گسترش‌یافته (extending loads) و ذخیره‌سازی‌های کوتاه شده (truncating stores) است. .RE .RS 4 .RE .IP \fBaarch64\-float\-recp\-precision\fR 4 .IX Item "aarch64-float-recp-precision" تعداد تکرارهای نیوتن برای محاسبه معکوس در نوع float. وقتی تقریب تقسیم فعال باشد، دقت تقسیم متناسب با این پارامتر است. مقدار پیش‌فرض ۱ است. .IP \fBaarch64\-double\-recp\-precision\fR 4 .IX Item "aarch64-double-recp-precision" تعداد تکرارهای نیوتن برای محاسبه معکوس در نوع double. وقتی تقریب تقسیم فعال باشد، دقت تقسیم متناسب با این پارامتر است. مقدار پیش‌فرض ۲ است. .IP \fBaarch64\-autovec\-preference\fR 4 .IX Item "aarch64-autovec-preference" تحمیل یک راهبرد گزینش ISA برای بردارسازی خودکار (auto-vectorization). .RS 4 .IP \fBdefault\fR 4 .IX Item "default" استفاده از روش‌های اکتشافی (heuristics) پیش‌فرض. .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" سیاست دقیق و جزئی‌نگر برای جفت‌های بارگذاری (ldp). با \fB\-\-param=aarch64\-ldp\-policy=default\fR، از سیاست ساختار تنظیم (tuning structure) استفاده می‌شود. این پیش‌فرض فعلی است. با \fB\-\-param=aarch64\-ldp\-policy=always\fR، دستور ldp صرف‌نظر از تراز بودن صادر می‌شود. با \fB\-\-param=aarch64\-ldp\-policy=never\fR، دستور ldp صادر نمی‌شود. با \fB\-\-param=aarch64\-ldp\-policy=aligned\fR، دستور ldp فقط در صورتی صادر می‌شود که اشاره‌گر مبدأ حداقل به میزان دو برابر تراز نوع مربوطه، تراز شده باشد. .IP \fBaarch64\-stp\-policy\fR 4 .IX Item "aarch64-stp-policy" سیاست دقیق و جزئی‌نگر برای جفت‌های ذخیره‌سازی (stp). با \fB\-\-param=aarch64\-stp\-policy=default\fR، از سیاست ساختار تنظیم استفاده می‌شود. این پیش‌فرض فعلی است. با \fB\-\-param=aarch64\-stp\-policy=always\fR، دستور stp صرف‌نظر از تراز بودن صادر می‌شود. با \fB\-\-param=aarch64\-stp\-policy=never\fR، دستور stp صادر نمی‌شود. با \fB\-\-param=aarch64\-stp\-policy=aligned\fR، دستور stp فقط در صورتی صادر می‌شود که اشاره‌گر مبدأ حداقل به میزان دو برابر تراز نوع مربوطه، تراز شده باشد. .IP \fBaarch64\-ldp\-alias\-check\-limit\fR 4 .IX Item "aarch64-ldp-alias-check-limit" محدودیت روی تعداد بررسی‌های نام مستعار (alias checks) که توسط گذر ادغام جفت‌های بارگذاری/ذخیره‌سازی در AArch64 هنگام تلاش برای تشکیل ldp/stp انجام می‌شود. مقادیر بالاتر، گذر را در بازترتیب‌دهی بارگذاری‌ها روی ذخیره‌سازی‌ها تهاجمی‌تر می‌کند، به بهای افزایش زمان کامپایل. .IP \fBaarch64\-ldp\-writeback\fR 4 .IX Item "aarch64-ldp-writeback" پارامتری برای کنترل این‌که در گذر ادغام جفت‌های بارگذاری/ذخیره‌سازی در AArch64 کدام فرصت‌های بازنویسی (writeback) مورد بررسی قرار گیرند. مقدار صفر مدیریت writeback را غیرفعال می‌کند. مقدار یک به این معنی است که در صورت امکان برای تشکیل جفت‌هایی شامل یک یا چند دسترسی بازنویسی مجزای موجود تلاش شود. مقدار دو به این معنی است که همچنین تلاش شود تا با ادغام به‌روزرسانی‌های مخرب دنباله‌دار در ثبات پایهٔ مورد استفاده یک جفت، فرصت‌های بازنویسی به‌صورت فرصت‌طلبانه ایجاد گردند. .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 اجرا می‌شوند، استفاده نخواهد کرد. .IP \fBaarch64\-vect\-unroll\-limit\fR 4 .IX Item "aarch64-vect-unroll-limit" بردارساز با استفاده از اطلاعات تنظیمات در دسترس تعیین می‌کند که آیا باز کردن حلقهٔ اصلی بردارسازی‌شده سودمند است یا خیر و این‌که چقدر باید باز شود. این پارامتر حد بالایی را برای میزان باز کردن حلقه اصلی توسط بردارساز مشخص می‌کند. مقدار پیش‌فرض چهار است. .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" تعداد دستورالعمل‌هایی که بالاتر از آن، جریمهٔ توقف 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) یا ربودن vtable در C++ است. همچنین یک قلاب (hook) عمومی وجود دارد که می‌تواند برای پیاده‌سازی سایر اشکال ردیابی (tracing) یا ابزار دقیق‌سازی در سطح تابع، برای اهداف اشکال‌زدایی یا تحلیل برنامه استفاده شود. .IP \fB\-p\fR 4 .IX Item "-p" .PD 0 .IP \fB\-pg\fR 4 .IX Item "-pg" .PD تولید کد اضافی برای نوشتن اطلاعات پروفایل‌سازی مناسب برای برنامهٔ تحلیل \fBprof\fR (برای \fB\-p\fR) یا \fBgprof\fR (برای \fB\-pg\fR). شما باید هنگام کامپایل کردن فایل‌های مبدئی که خواهان داده‌های آن‌ها هستید از این گزینه استفاده کنید، و همچنین باید هنگام پیوند دادن (linking) نیز آن را به‌کار ببرید. .Sp می‌توانید از ویژگی تابع \f(CW\*(C`no_instrument_function\*(C'\fR برای جلوگیری از پروفایل‌سازی تک‌تک توابع در زمان کامپایل با این گزینه‌ها استفاده کنید. .IP \fB\-fprofile\-arcs\fR 4 .IX Item "-fprofile-arcs" افزودن کد تا مسیرهای جریان برنامه (\fIarcs\fR) ابزار دقیق‌سازی شوند. در طول اجرا، برنامه ثبت می‌کند که هر انشعاب و فراخوانی چند بار اجرا شده و چند بار منشعب شده یا بازگردانده شده است. در مقصدهایی که از اولویت برای سازنده‌ها پشتیبانی می‌کنند، پروفایل‌سازی سازنده‌ها، مخرب‌ها، و سازنده‌ها (و مخرب‌های) C++ کلاس‌هایی را که به‌عنوان نوع یک متغیر سراسری استفاده می‌شوند، به‌درستی مدیریت می‌کند. .Sp هنگامی که برنامهٔ کامپایل‌شده خاتمه می‌یابد، این داده‌ها را در فایلی به نام \&\fIauxname.gcda\fR برای هر فایل مبدأ ذخیره می‌کند. این داده‌ها می‌توانند برای بهینه‌سازی‌های مبتنی بر پروفایل (\fB\-fbranch\-probabilities\fR) یا برای تحلیل پوشش آزمون (\fB\-ftest\-coverage\fR) استفاده شوند. نام \&\fIauxname\fR هر فایل شیء در صورتی که به‌طور صریح مشخص شده باشد و فایل اجرایی نهایی نباشد، از نام فایل خروجی مشتق می‌شود؛ در غیر این صورت، نام پایهٔ (basename) فایل مبدأ خواهد بود. در هر دو حالت، هرگونه پسوند حذف می‌شود (به‌عنوان مثال، \fIfoo.gcda\fR برای فایل ورودی \fIdir/foo.c\fR، یا \&\fIdir/foo.gcda\fR برای فایل خروجی تعیین‌شده به‌صورت \fB\-o dir/foo.o\fR). .Sp توجه داشته باشید که اگر یک خط فرمان مستقیماً فایل‌های مبدأ را پیوند دهد، فایل‌های \&\fI.gcda\fR مربوطه با نام بدون پسوند فایل خروجی پیشوندگذاری خواهند شد. به‌عنوان مثال، دستور \f(CW\*(C`gcc a.c b.c \-o binary\*(C'\fR فایل‌های \fIbinary\-a.gcda\fR و \&\fIbinary\-b.gcda\fR را تولید خواهد کرد. .IP \fB\-fcondition\-coverage\fR 4 .IX Item "-fcondition-coverage" افزودن کد تا شرایط برنامه ابزار دقیق‌سازی شوند. در طول اجرا، برنامه ثبت می‌کند که کدام عبارات در یک گزارهٔ شرطی در تصمیم‌گیری سهم دارند، که این امر می‌تواند برای راستی‌آزمایی این مورد استفاده شود که آیا تمام عبارات در یک تابع بولی آزمایش شده‌اند و تأثیر مستقلی بر نتیجهٔ تصمیم دارند یا خیر. نتیجه را می‌توان با دستور \f(CW\*(C`gcov \-\-conditions\*(C'\fR مشاهده کرد. .IP \fB\-fpath\-coverage\fR 4 .IX Item "-fpath-coverage" افزودن کد تا مسیرهای پیموده‌شده ردگیری شوند. در طول اجرا، برنامه مسیرهای اول (prime paths) پیموده‌شده را ثبت می‌کند. تعداد مسیرها با افزایش پیچیدگی بسیار سریع رشد می‌کند، و GCC برای جلوگیری از انفجار زمان کامپایل، در صورتی که تعداد تقریبی مسیرها از حد کنترل‌شده توسط \fB\-fpath\-coverage\-limit\fR فراتر رود، ابزار دقیق‌سازی را متوقف خواهد کرد. نتیجه را می‌توان با \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 فایل‌های هدف (object files) خود را با \fB\-lgcov\fR یا \fB\-fprofile\-arcs\fR لینک کنید (دومی شامل اولی نیز می‌شود). .IP * 4 برنامه را بر روی یک بار کاری نمونه اجرا کنید تا اطلاعات پروفایل کمان‌ها تولید شود. این کار می‌تواند به هر تعداد دفعات تکرار شود. شما می‌توانید نمونه‌های هم‌روند از برنامه‌تان را اجرا کنید، و به شرطی که سیستم فایل از قفل‌گذاری پشتیبانی کند، فایل‌های داده به درستی به‌روزرسانی خواهند شد. مگر در حالتی که گزینه‌ای سخت‌گیرانه برای گویش استاندارد 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 استفاده می‌کند، بنابراین فایل داده‌های پروفایل در همان دایرکتوری فایل هدف ظاهر می‌شود. به منظور جلوگیری از تداخل نام فایل‌ها، اگر نام فایل هدف یک مسیر مطلق نباشد، مسیر مطلق فایل \&\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 را هم در زمان کامپایل و هم در زمان پیوند دادن برنامه خود استفاده کنید. .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 برای هر واحد ترجمه در بخش مشخص‌شده قرار می‌گیرد. این گزینه ثبت اطلاعات پروفایل از طریق سازنده را غیرفعال کرده و پردازش اطلاعات پروفایل از طریق ویرانگر را نیز غیرفعال می‌سازد. این گزینه برای استفاده در محیط‌های میزبانی‌شده (hosted) مانند GNU/Linux در نظر گرفته نشده است. این گزینه محیط‌های مستقل (freestanding، به عنوان مثال سیستم‌های تعبیه‌شده) با منابع محدود را هدف قرار می‌دهد که از سازنده‌ها/ویرانگرها یا I/O فایل کتابخانه C پشتیبانی نمی‌کنند. .Sp پیونددهنده می‌تواند بخش‌های ورودی را در یک بلوک حافظه پیوسته جمع‌آوری کرده و نمادهای آغاز و پایان را تعریف کند. یک نمونه اسکریپت پیونددهنده GNU که بخش خروجی پیونددهنده را تعریف می‌کند، به شرح زیر است: .Sp .Vb 6 \& .gcov_info : \& { \& PROVIDE (_\|_gcov_info_start = .); \& KEEP (*(.gcov_info)) \& PROVIDE (_\|_gcov_info_end = .); \& } .Ve .Sp برنامه می‌تواند اطلاعات پروفایل‌بندی ثبت‌شده در این مجموعه پیونددهنده را برای مثال به این صورت ذخیره یا تخلیه (dump) کند: .Sp .Vb 3 \& #include \& #include \& #include \& \& extern const struct gcov_info *const _\|_gcov_info_start[]; \& extern const struct gcov_info *const _\|_gcov_info_end[]; \& \& static void \& dump (const void *d, unsigned n, void *arg) \& { \& const unsigned char *c = d; \& \& for (unsigned i = 0; i < n; ++i) \& printf ("%02x", c[i]); \& } \& \& static void \& filename (const char *f, void *arg) \& { \& _\|_gcov_filename_to_gcfn (f, dump, arg ); \& } \& \& static void * \& allocate (unsigned length, void *arg) \& { \& return malloc (length); \& } \& \& static void \& dump_gcov_info (void) \& { \& const struct gcov_info *const *info = _\|_gcov_info_start; \& const struct gcov_info *const *end = _\|_gcov_info_end; \& \& /* Obfuscate variable to prevent compiler optimizations. */ \& _\|_asm_\|_ ("" : "+r" (info)); \& \& while (info != end) \& { \& void *arg = NULL; \& _\|_gcov_info_to_gcda (*info, filename, dump, allocate, arg); \& putchar (\*(Aq\en\*(Aq); \& ++info; \& } \& } \& \& int \& main (void) \& { \& dump_gcov_info (); \& return 0; \& } .Ve .Sp زیرفرمان \fBmerge\-stream\fR از ابزار \fBgcov\-tool\fR می‌تواند برای تبدیل داده‌های سریالی‌شده جریان تولید شده توسط توابع \f(CW\*(C`_\|_gcov_filename_to_gcfn\*(C'\fR و \&\f(CW\*(C`_\|_gcov_info_to_gcda\*(C'\fR و ادغام اطلاعات پروفایل در فایل‌های \&\fI.gcda\fR روی سیستم فایل میزبان استفاده شود..IP \fB\-fprofile\-note=\fR\fIpath\fR 4 .IX Item "-fprofile-note=path" اگر \fIpath\fR مشخص شده باشد، GCC فایل \fI.gcno\fR را در مکان \fIpath\fR ذخیره می‌کند. اگر این گزینه را با چندین فایل مبدأ ترکیب کنید، فایل \fI.gcno\fR بازنویسی خواهد شد. .IP \fB\-fprofile\-prefix\-path=\fR\fIpath\fR 4 .IX Item "-fprofile-prefix-path=path" این گزینه می‌تواند در ترکیب با \&\fBprofile\-generate=\fR\fIprofile_dir\fR و \&\fBprofile\-use=\fR\fIprofile_dir\fR استفاده شود تا به GCC اطلاع دهد دایرکتوری پایهٔ درخت مبدأ ساخته‌شده کجاست. به‌طور پیش‌فرض، \fIprofile_dir\fR حاوی فایل‌هایی با مسیرهای مطلق درهم‌آمیخته (mangled) از تمامی فایل‌های شیء پروژهٔ ساخته‌شده خواهد بود. این حالت زمانی که دایرکتوری مورد استفاده برای ساخت باینری ابزارگذاری‌شده با دایرکتوری ساخت باینری بهینه‌سازی‌شده با بازخورد پروفایل تفاوت داشته باشد مطلوب نیست، زیرا داده‌های پروفایل در طول ساخت بهینه‌سازی‌شده پیدا نخواهند شد. در چنین شرایطی، می‌توان از \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 انتخاب شود، اطلاعات پروفایل با استفاده از عملیات اتمیک بر پایهٔ حداکثر تلاش (best-effort) به‌روزرسانی می‌شوند. در حالت ایده‌آل، اطلاعات پروفایل از طریق عملیات اتمیک در سخت‌افزار به‌روزرسانی می‌شوند. با این حال، اگر بستر هدف از عملیات اتمیک سخت‌افزاری مورد نیاز پشتیبانی نکند ولی \fIlibatomic\fR در دسترس باشد، اطلاعات پروفایل از طریق فراخوانی‌های \&\fIlibatomic\fR به‌روزرسانی می‌شوند. اگر بستر هدف نه از عملیات اتمیک سخت‌افزاری لازم و نه از \fIlibatomic\fR پشتیبانی کند، اطلاعات پروفایل به‌طور اتمیک به‌روزرسانی نمی‌شوند و هشداری صادر خواهد شد. در این حالت، اطلاعات پروفایل‌گیری به‌دست‌آمده ممکن است برای برنامه‌های چندنخی خراب باشد. .Sp به دلایل کارایی، اگر از شمارنده‌های ۶۴ بیتی برای اطلاعات پروفایل‌گیری استفاده شود و بستر هدف تنها از عملیات اتمیک ۳۲ بیتی در سخت‌افزار پشتیبانی کند، به‌روزرسانی‌های حساس به کارایی پروفایل با استفاده از دو عملیات اتمیک ۳۲ بیتی برای هر به‌روزرسانی شمارنده انجام می‌شوند. اگر یک سیگنال این دو عملیات به‌روزرسانی شمارنده را قطع کند، اطلاعات پروفایل‌گیری ممکن است در وضعیتی ناسازگار قرار گیرند. .IP \fB\-fprofile\-filter\-files=\fR\fIregex\fR 4 .IX Item "-fprofile-filter-files=regex" تنها توابعی از فایل‌ها را ابزارگذاری می‌کند که نام آن‌ها با هر یک از عبارات منظم (جداشده با نقطه‌ویرگول) مطابقت داشته باشد. .Sp برای مثال، \fB\-fprofile\-filter\-files=main\e.c;module.*\e.c\fR تنها \fImain.c\fR و تمامی فایل‌های C که نامشان با \*(Aqmodule\*(Aq شروع می‌شود را ابزارگذاری خواهد کرد. .IP \fB\-fprofile\-exclude\-files=\fR\fIregex\fR 4 .IX Item "-fprofile-exclude-files=regex" تنها توابعی از فایل‌ها را ابزارگذاری می‌کند که نام آن‌ها با هیچ‌یک از عبارات منظم (جداشده با نقطه‌ویرگول) مطابقت نداشته باشد. .Sp برای مثال، \fB\-fprofile\-exclude\-files=/usr/.*\fR از ابزارگذاری تمامی فایل‌هایی که در پوشهٔ \fI/usr/\fR قرار دارند جلوگیری خواهد کرد. .IP \fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel\-runs\fR|\fBserial\fR] 4 .IX Item "-fprofile-reproducible=[multithreaded|parallel-runs|serial]" سطح بازتولیدپذیری پروفایل گردآوری‌شده توسط \&\f(CW\*(C`\-fprofile\-generate\*(C'\fR را کنترل می‌کند. این امکان ساخت مجدد برنامه با همان نتیجهٔ یکسان را فراهم می‌آورد که به‌عنوان مثال برای بسته‌های توزیع مفید است. .Sp با \fB\-fprofile\-reproducible=serial\fR، پروفایل گردآوری‌شده توسط \&\fB\-fprofile\-generate\fR بازتولیدپذیر است، مشروط بر اینکه برنامهٔ آموزش‌داده‌شده در هر فراخوانی از اجرای آموزشی رفتار یکسانی داشته باشد، چندنخی نباشد و ارسال جریانی داده‌های پروفایل همواره به همان ترتیب انجام شود. توجه داشته باشید که ارسال جریانی پروفایل در پایان اجرای برنامه و همچنین پیش از فراخوانی تابع \f(CW\*(C`fork\*(C'\fR رخ می‌دهد. .Sp توجه داشته باشید که بسیار متداول است تعداد دفعات اجرای برخی از بخش‌های برنامه‌ها برای مثال به طول نام‌های فایل‌های موقت یا تصادفی‌سازی فضای حافظه (که ممکن است بر نرخ برخورد در جدول هش اثر بگذارد) بستگی داشته باشد. چنین بخش‌های بازتولیدناپذیری از برنامه را می‌توان با ویژگی تابع \&\f(CW\*(C`no_instrument_function\*(C'\fR نشانه‌گذاری کرد. \fBgcov\-dump\fR همراه با \&\fB\-l\fR می‌تواند برای تخلیهٔ داده‌های گردآوری‌شده و بررسی بازتولیدپذیر بودن واقعی آن‌ها استفاده شود. .Sp با \fB\-fprofile\-reproducible=parallel\-runs\fR، پروفایل گردآوری‌شده صرف‌نظر از ترتیب جریان داده‌ها به فایل‌های gcda بازتولیدپذیر باقی می‌ماند. این تنظیم اجرای هم‌زمان چندین نمونه از برنامهٔ ابزارگذاری‌شده را به‌صورت موازی (مانند استفاده از \f(CW\*(C`make \-j\*(C'\fR) ممکن می‌سازد. این کار کیفیت داده‌های گردآوری‌شده، به‌ویژه پروفایل‌گیری فراخوانی‌های غیرمستقیم را کاهش می‌دهد. .IP \fB\-fsanitize=address\fR 4 .IX Item "-fsanitize=address" ابزار AddressSanitizer، یک آشکارساز سریع خطاهای حافظه را فعال می‌کند. دستورالعمل‌های دسترسی به حافظه برای تشخیص خطاهای دسترسی به خارج از محدوده (out-of-bounds) و استفاده پس از آزادسازی (use-after-free) ابزارگذاری می‌شوند. این گزینه \fB\-fsanitize\-address\-use\-after\-scope\fR را نیز فعال می‌کند. برای جزئیات بیشتر به <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizer\fR> مراجعه کنید. رفتار زمان اجرا را می‌توان با استفاده از متغیر محیطی \&\fBASAN_OPTIONS\fR تحت تأثیر قرار داد. هنگامی که روی \f(CW\*(C`help=1\*(C'\fR تنظیم شود، گزینه‌های موجود در هنگام راه‌اندازی برنامهٔ ابزارگذاری‌شده نمایش داده می‌شوند. برای دیدن فهرست گزینه‌های پشتیبانی‌شده به <\fBhttps://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run\-time\-flags\fR> مراجعه کنید. این گزینه نمی‌تواند با \fB\-fsanitize=thread\fR یا \&\fB\-fsanitize=hwaddress\fR ترکیب شود. توجه داشته باشید که تنها بستر‌های هدفی که \&\fB\-fsanitize=hwaddress\fR در حال حاضر روی آن‌ها پشتیبانی می‌شود عبارتند از x86\-64 (تنها با گزینه‌های \f(CW\*(C`\-mlam=u48\*(C'\fR یا \f(CW\*(C`\-mlam=u57\*(C'\fR) و AArch64، که در هر دو حالت تنها در ABIهای دارای اشاره‌گرهای ۶۴ بیتی است. .Sp هنگام کامپایل با \fB\-fsanitize=address\fR، باید از \fB\-g\fR نیز برای تولید خروجی معنادارتر استفاده کنید. برای به‌دست آوردن ردگیری‌های پشتهٔ دقیق‌تر، استفاده از گزینه‌هایی چون \&\fB\-O0\fR، \fB\-O1\fR یا \fB\-Og\fR (که به‌عنوان مثال از بیشتر درون‌ریزی‌های تابع جلوگیری می‌کنند)، \fB\-fno\-optimize\-sibling\-calls\fR (که از بهینه‌سازی فراخوانی‌های هم‌سطح و بازگشتی انتهایی جلوگیری می‌کند؛ این گزینه برای \&\fB\-O0\fR، \fB\-O1\fR یا \fB\-Og\fR ضمنی است)، یا \fB\-fno\-ipa\-icf\fR (که یکسان‌سازی کدهای مشابه برای توابع را غیرفعال می‌کند) ممکن است. استفاده از \fB\-fno\-omit\-frame\-pointer\fR نیز ردیابی پشته را بهبود می‌بخشد. از آنجا که اجراهای متوالی برنامه ممکن است به‌دلیل ASLR (تصادفی‌سازی چیدمان فضای آدرس) ردگیری‌هایی با آدرس‌های متفاوت تولید کنند، ممکن است خاموش کردن ASLR مطلوب باشد. در لینوکس، این کار را می‌توان با \fBsetarch \`uname \-m\` \-R ./prog\fR انجام داد. .IP \fB\-fsanitize=kernel\-address\fR 4 .IX Item "-fsanitize=kernel-address" ابزار AddressSanitizer را برای هسته لینوکس فعال می‌کند. برای جزئیات بیشتر به <\fBhttps://github.com/google/kernel\-sanitizers\fR> مراجعه کنید. .IP \fB\-fsanitize=hwaddress\fR 4 .IX Item "-fsanitize=hwaddress" ابزار Hardware\-assisted 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" ابزار Hardware\-assisted AddressSanitizer را برای کامپایل هسته لینوکس فعال می‌کند. مشابه \fB\-fsanitize=kernel\-address\fR است اما از روش ابزارگذاری جایگزین استفاده می‌کند، و مشابه \fB\-fsanitize=hwaddress\fR است اما با تفاوت‌های ابزارگذاری لازم برای کامپایل هسته لینوکس. این تفاوت‌ها برای جلوگیری از فراخوانی‌های راه‌اندازی اولیهٔ کتابخانه hwasan و در نظر گرفتن تفاوت مقدار بایت بالایی اشاره‌گر پشته اعمال شده‌اند. .Sp \&\fIنکته:\fR این گزینه پیش‌فرض‌های متفاوتی نسبت به \fB\-fsanitize=hwaddress\fR دارد. ابزارگذاری پشته و فراخوانی‌های alloca به‌طور پیش‌فرض فعال نیستند، اما همچنان با مشخص کردن گزینه‌های خط فرمان \&\fB\-\-param hwasan\-instrument\-stack=1\fR و \&\fB\-\-param hwasan\-instrument\-allocas=1\fR به ترتیب امکان‌پذیر است. استفاده از برچسب فریم تصادفی برای ابزارگذاری هسته پیاده‌سازی نشده است. .IP \fB\-fsanitize=pointer\-compare\fR 4 .IX Item "-fsanitize=pointer-compare" عملیات مقایسه (<، <=، >، >=) با عملوندهای اشاره‌گر را ابزارگذاری می‌کند. این گزینه باید یا با \fB\-fsanitize=kernel\-address\fR یا با \&\fB\-fsanitize=address\fR ترکیب شود. این گزینه نمی‌تواند با \fB\-fsanitize=thread\fR ترکیب شود. نکته: به‌طور پیش‌فرض این بررسی در زمان اجرا غیرفعال است. برای فعال کردن آن، \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR را به متغیر محیطی \&\fBASAN_OPTIONS\fR اضافه کنید. استفاده از \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR عملیات نامعتبر را تنها زمانی تشخیص می‌دهد که هر دو اشاره‌گر غیرتهی (non-null) باشند. .IP \fB\-fsanitize=pointer\-subtract\fR 4 .IX Item "-fsanitize=pointer-subtract" عملیات تفریق با عملوندهای اشاره‌گر را ابزارگذاری می‌کند. این گزینه باید یا با \fB\-fsanitize=kernel\-address\fR یا با \&\fB\-fsanitize=address\fR ترکیب شود. این گزینه نمی‌تواند با \fB\-fsanitize=thread\fR ترکیب شود. نکته: به‌طور پیش‌فرض این بررسی در زمان اجرا غیرفعال است. برای فعال کردن آن، \f(CW\*(C`detect_invalid_pointer_pairs=2\*(C'\fR را به متغیر محیطی \&\fBASAN_OPTIONS\fR اضافه کنید. استفاده از \f(CW\*(C`detect_invalid_pointer_pairs=1\*(C'\fR عملیات نامعتبر را تنها زمانی تشخیص می‌دهد که هر دو اشاره‌گر غیرتهی (non-null) باشند. .IP \fB\-fsanitize=shadow\-call\-stack\fR 4 .IX Item "-fsanitize=shadow-call-stack" مکانیزم ShadowCallStack را فعال می‌کند، که یک سازوکار بهبود امنیتی برای محافظت از برنامه‌ها در برابر بازنویسی آدرس بازگشت (مانند سرریز بافر پشته) است. این سازوکار با ذخیرهٔ آدرس بازگشت تابع در یک پشتهٔ فراخوانی سایهٔ تخصیص‌یافته به‌طور جداگانه در مقدمهٔ تابع (prologue) و بازیابی آدرس بازگشت از پشتهٔ فراخوانی سایه در مؤخرهٔ تابع (epilogue) کار می‌کند. ابزارگذاری تنها در توابعی رخ می‌دهد که نیاز به ذخیرهٔ آدرس بازگشت در پشته دارند. .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). دستورالعمل‌های دسترسی به حافظه برای شناسایی اشکالات رقابت داده‌ای ابزارگذاری (instrument) می‌شوند. برای جزئیات بیشتر به <\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، یک آشکارساز نشت حافظه (memory leak). این گزینه تنها هنگام پیوند دادن (linking) فایل‌های اجرایی اهمیت دارد. فایل اجرایی با کتابخانه‌ای پیوند می‌خورد که \f(CW\*(C`malloc\*(C'\fR و سایر توابع تخصیص حافظه را بازنویسی می‌کند. برای جزئیات بیشتر به <\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 را به یک فراخوانی پیام خطایابی (diagnostic) تبدیل می‌کند. هنگام رسیدن به فراخوانی \&\f(CW\*(C`_\|_builtin_unreachable\*(C'\fR، رفتار تعریف‌نشده خواهد بود. .IP \fB\-fsanitize=vla\-bound\fR 4 .IX Item "-fsanitize=vla-bound" این گزینه به کامپایلر دستور می‌دهد تا مثبت بودن اندازهٔ آرایه‌های با طول متغیر (VLA) را بررسی کند. .IP \fB\-fsanitize=null\fR 4 .IX Item "-fsanitize=null" این گزینه بررسی اشاره‌گرها را فعال می‌کند. به‌ویژه، برنامه‌ای که با این گزینه کامپایل شود زمانی که بخواهد یک اشاره‌گر NULL را ارجاع‌زدایی (dereference) کند، یا اگر ارجاعی (احتمالاً یک ارجاع rvalue) به یک اشاره‌گر NULL مقید شود، یا متدی روی شیئی فراخوانی شود که توسط یک اشاره‌گر NULL نشان داده شده است، یک پیام خطا صادر می‌کند. .IP \fB\-fsanitize=return\fR 4 .IX Item "-fsanitize=return" این گزینه بررسی دستورات return را فعال می‌کند. برنامه‌هایی که با فعال بودن این گزینه ساخته شوند، اگر انتهای یک تابع غیر-void بدون برگرداندن واقعی یک مقدار فرا برسد، پیام خطایی صادر می‌کنند. این گزینه فقط در ++C کار می‌کند. .IP \fB\-fsanitize=signed\-integer\-overflow\fR 4 .IX Item "-fsanitize=signed-integer-overflow" این گزینه بررسی سرریز اعداد صحیح علامت‌دار را فعال می‌کند. بررسی می‌شود که نتیجهٔ \f(CW\*(C`+\*(C'\fR، \f(CW\*(C`*\*(C'\fR و هر دو عملگر یکانی و دوتایی \f(CW\*(C`\-\*(C'\fR در محاسبات علامت‌دار سرریز نکند. این گزینه همچنین تقسیم علامت‌دار \&\f(CW\*(C`INT_MIN / \-1\*(C'\fR را نیز شناسایی می‌کند. توجه داشته باشید قواعد ارتقای اعداد صحیح باید در نظر گرفته شوند؛ بنابراین مورد زیر یک سرریز محسوب نمی‌شود: .Sp .Vb 2 \& signed char a = SCHAR_MAX; \& a++; .Ve .IP \fB\-fsanitize=bounds\fR 4 .IX Item "-fsanitize=bounds" این گزینه ابزارگذاری کران‌های آرایه را فعال می‌کند. دسترسی‌های خارج از کران گوناگونی تشخیص داده می‌شوند. اعضای آرایه منعطف (flexible array members)، آرایه‌های شبه‌عضو-آرایه‌منعطف، و مقداردهنده‌های متغیرهای با حافظه استاتیک ابزارگذاری نمی‌شوند؛ مگر آرایه‌های شبه‌عضو-آرایه‌منعطفی که گزینه‌های \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" این گزینه بررسی هم‌ترازی اشاره‌گرها را هنگام ارجاع‌زدایی، یا هنگام مقید شدن یک ارجاع به هدفی با هم‌ترازی ناکافی، یا هنگام فراخوانی یک متد یا سازنده روی شیئی با هم‌ترازی ناکافی فعال می‌کند. .IP \fB\-fsanitize=object\-size\fR 4 .IX Item "-fsanitize=object-size" این گزینه ابزارگذاری ارجاعات حافظه را با استفاده از تابع \&\f(CW\*(C`_\|_builtin_dynamic_object_size\*(C'\fR فعال می‌کند. انواع دسترسی‌های خارج از کران توسط اشاره‌گرها شناسایی می‌شوند. .IP \fB\-fsanitize=float\-divide\-by\-zero\fR 4 .IX Item "-fsanitize=float-divide-by-zero" تشخیص تقسیم عدد ممیز شناور بر صفر. بر خلاف دیگر گزینه‌های مشابه، \&\fB\-fsanitize=float\-divide\-by\-zero\fR توسط \&\fB\-fsanitize=undefined\fR فعال نمی‌شود، زیرا تقسیم ممیز شناور بر صفر می‌تواند روشی قانونی برای به‌دست آوردن مقادیر بی‌نهایت (infinities) و NaN باشد. .IP \fB\-fsanitize=float\-cast\-overflow\fR 4 .IX Item "-fsanitize=float-cast-overflow" این گزینه بررسی تبدیل نوع ممیز شناور به عدد صحیح را فعال می‌کند. بررسی می‌شود که نتیجه تبدیل سرریز نکند. بر خلاف دیگر گزینه‌های مشابه، \fB\-fsanitize=float\-cast\-overflow\fR توسط \fB\-fsanitize=undefined\fR فعال نمی‌شود. این گزینه با فعال بودن استثناهای \f(CW\*(C`FE_INVALID\*(C'\fR به‌خوبی عمل نمی‌کند. .IP \fB\-fsanitize=nonnull\-attribute\fR 4 .IX Item "-fsanitize=nonnull-attribute" این گزینه ابزارگذاری فراخوانی‌ها را فعال کرده و بررسی می‌کند مقادیر null به آرگومان‌هایی که با صفت تابعی \&\f(CW\*(C`nonnull\*(C'\fR به‌عنوان نیازمند مقدار غیر null علامت‌گذاری شده‌اند ارسال نشوند. .IP \fB\-fsanitize=returns\-nonnull\-attribute\fR 4 .IX Item "-fsanitize=returns-nonnull-attribute" این گزینه ابزارگذاری دستورات return را در توابعی که با صفت تابعی \f(CW\*(C`returns_nonnull\*(C'\fR مشخص شده‌اند فعال می‌کند تا بازگرداندن مقادیر null از چنین توابعی را شناسایی کند. .IP \fB\-fsanitize=bool\fR 4 .IX Item "-fsanitize=bool" این گزینه ابزارگذاری بارگذاری‌ها از نوع bool را فعال می‌کند. اگر مقداری غیر از 0/1 بارگذاری شود، خطای زمان اجرا صادر می‌شود. .IP \fB\-fsanitize=enum\fR 4 .IX Item "-fsanitize=enum" این گزینه ابزارگذاری بارگذاری‌ها از یک نوع enum را فعال می‌کند. اگر مقداری خارج از محدودهٔ مقادیر نوع enum بارگذاری شود، خطای زمان اجرا صادر خواهد شد. .IP \fB\-fsanitize=vptr\fR 4 .IX Item "-fsanitize=vptr" این گزینه ابزارگذاری فراخوانی‌های توابع عضو، دسترسی‌های اعضا و برخی تبدیل‌ها میان اشاره‌گرهای کلاس‌های پایه و مشتق‌شده در ++C را برای اطمینان از صحت نوع پویای (dynamic type) شیء ارجاع‌شده فعال می‌کند. .IP \fB\-fsanitize=pointer\-overflow\fR 4 .IX Item "-fsanitize=pointer-overflow" این گزینه ابزارگذاری محاسبات اشاره‌گر را فعال می‌کند. اگر محاسبات اشاره‌گر دچار سرریز شود، یک خطای زمان اجرا صادر می‌شود. .IP \fB\-fsanitize=builtin\fR 4 .IX Item "-fsanitize=builtin" این گزینه ابزارگذاری آرگومان‌های توابع توکار (builtin) منتخب را فعال می‌کند. اگر مقدار نامعتبری به چنین آرگومان‌هایی داده شود، خطای زمان اجرا صادر می‌شود؛ برای نمونه، ارسال 0 به‌عنوان آرگومان به \f(CW\*(C`_\|_builtin_ctz\*(C'\fR یا \f(CW\*(C`_\|_builtin_clz\*(C'\fR موجب رفتار تعریف‌نشده می‌شود و توسط این گزینه تشخیص داده خواهد شد. .RE .RS 4 .Sp توجه داشته باشید که ضدعفونی‌کننده‌ها معمولاً نرخ هشدارهای مثبت کاذب (false positive) را افزایش می‌دهند، به‌ویژه هشدارهای مربوط به \fB\-Wmaybe\-uninitialized\fR. ما ترکیب \fB\-Werror\fR و استفاده از ضدعفونی‌کننده‌ها را توصیه نمی‌کنیم. .Sp در حالی که \fB\-ftrapv\fR باعث ایجاد تله (trap) برای سرریزهای علامت‌دار می‌شود، \&\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 استفاده کند. این گزینه برای آزمایش طرح‌بندی‌های مختلف حافظه سایه (shadow memory) در Kernel AddressSanitizer مفید است. .IP \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,...\fR 4 .IX Item "-fsanitize-sections=s1,s2,..." ضدعفونی کردن متغیرهای سراسری در بخش‌های (sections) سفارشی تعیین‌شده توسط کاربر. \fIsi\fR می‌تواند شامل نویسه‌های عام (wildcards) باشد. .IP \fB\-fsanitize\-recover\fR[\fB=\fR\fIopts\fR] 4 .IX Item "-fsanitize-recover[=opts]" گزینهٔ \&\fB\-fsanitize\-recover=\fR حالت بازیابی از خطا را برای ضدعفونی‌کننده‌های ذکرشده در فهرستِ با کاما جداشدهٔ \fIopts\fR کنترل می‌کند. فعال کردن این گزینه برای یک مؤلفهٔ ضدعفونی‌کننده سبب می‌شود تا برنامه تلاش کند به‌گونه‌ای به اجرا ادامه دهد که گویی خطایی رخ نداده است. این بدان معناست که در یک بار اجرای برنامه ممکن است چندین خطای زمان اجرا گزارش شود، و حتی در صورت گزارش خطاها، کد خروج برنامه می‌تواند موفقیت‌آمیز بودن را نشان دهد. گزینهٔ \fB\-fno\-sanitize\-recover=\fR می‌تواند برای تغییر این رفتار استفاده شود: تنها اولین خطای شناسایی‌شده گزارش می‌شود و سپس برنامه با یک کد خروج غیر صفر پایان می‌یابد. .Sp در حال حاضر این ویژگی تنها برای \fB\-fsanitize=undefined\fR (و زیرگزینه‌های آن به جز \fB\-fsanitize=unreachable\fR و \fB\-fsanitize=return\fR)، \&\fB\-fsanitize=float\-cast\-overflow\fR، \&\fB\-fsanitize=float\-divide\-by\-zero\fR، \&\fB\-fsanitize=bounds\-strict\fR، \&\fB\-fsanitize=kernel\-address\fR و \fB\-fsanitize=address\fR کار می‌کند. برای این ضدعفونی‌کننده‌ها، بازیابی از خطا به‌طور پیش‌فرض فعال است، به جز \fB\-fsanitize=address\fR که این ویژگی در آن آزمایشی است. \&\fB\-fsanitize\-recover=all\fR و \fB\-fno\-sanitize\-recover=all\fR نیز پذیرفته می‌شوند؛ اولی بازیابی را برای تمام ضدعفونی‌کننده‌های پشتیبانی‌کننده فعال می‌کند و دومی آن را برای تمام این ضدعفونی‌کننده‌ها غیرفعال می‌سازد. .Sp حتی اگر حالت بازیابی در سمت کامپایلر روشن باشد، باید در سمت کتابخانه زمان اجرا (runtime) نیز فعال گردد؛ در غیر این صورت، خرابی‌ها همچنان مهلک خواهند بود. مقدار پیش‌فرض کتابخانه زمان اجرا برای 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 روی خط فرمان فعال شده باشد، ابزارگذاری (instrumentation) نادیده گرفته می‌شود چرا که ابزارگذاری همواره به پشتیبانی \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 فعال‌سازی ابزارگذاری کد برای افزایش امنیت برنامه از طریق بررسی معتبر بودن آدرس‌های مقصد دستورهای انتقال جریان کنترل (مانند فراخوانی غیرمستقیم تابع، بازگشت از تابع، پرش غیرمستقیم). این کار از منحرف کردن جریان کنترل به یک مقصد غیرمنتظره جلوگیری می‌کند. هدف آن محافظت در برابر تهدیدهایی مانند Return\-oriented Programming (ROP) و به طور مشابه call/jmp\-oriented programming (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 برابر با ۱، و دومین بیتِ \f(CW\*(C`_\|_CET_\|_\*(C'\fR برای \f(CW\*(C`return\*(C'\fR برابر با ۱ تنظیم می‌شود. .Sp همچنین می‌توانید از صفت \f(CW\*(C`nocf_check\*(C'\fR برای مشخص ساختن این‌که کدام توابع و فراخوانی‌ها باید از ابزارگذاری مستثنی شوند، استفاده کنید. .Sp در حال حاضر، مقصد x86 GNU/Linux پیاده‌سازی مبتنی بر Intel Control\-flow Enforcement Technology (CET) را ارائه می‌دهد که برای پردازنده‌های i686 یا جدیدتر کار می‌کند. .IP \fB\-fharden\-compares\fR 4 .IX Item "-fharden-compares" برای هر آزمایش منطقی که از بهینه‌سازی‌های gimple باقی می‌ماند و شرط یک شاخهٔ شرطی \fIنیست\fR (برای مثال، شرایط بررسی‌شده برای جابه‌جایی‌های شرطی، یا برای ذخیره در متغیرهای دودویی/بولی)، کد اضافه‌ای صادر می‌شود تا شرط معکوس محاسبه و راستی‌آزمایی گردد، و در صورت عدم تطابق نتایج، \f(CW\*(C`_\|_builtin_trap\*(C'\fR فراخوانی شود. برای پوشش تمام ساختارهای شرطی، به همراه \fB\-fharden\-conditional\-branches\fR استفاده شود. .IP \fB\-fharden\-conditional\-branches\fR 4 .IX Item "-fharden-conditional-branches" برای هر انشعاب شرطی غیربرداری که از بهینه‌سازی‌های gimple باقی می‌ماند، کد اضافه‌ای صادر می‌شود تا شرط معکوس را محاسبه و راستی‌آزمایی کند، و در صورت غیرمنتظره بودن نتیجه، \f(CW\*(C`_\|_builtin_trap\*(C'\fR را فراخوانی کند. برای پوشش تمام ساختارهای شرطی، به همراه \fB\-fharden\-compares\fR استفاده شود. .IP \fB\-fharden\-control\-flow\-redundancy\fR 4 .IX Item "-fharden-control-flow-redundancy" کد اضافه‌ای صادر می‌کند تا هنگام ورود به بلوک‌های پایه متغیرهای بولی تنظیم شوند، و در خروجی‌های تابع، در صورتی که این متغیرهای بولی مسیر اجرایی سازگار با گراف جریان کنترل تشکیل ندهند، بازبینی انجام شده و trap صادر شود. .Sp راستی‌آزمایی پیش از بازگشت‌ها، پیش از فراخوانی‌های نهایی اجباری (mandatory tail calls - زیر را ببینید) و به صورت اختیاری، پیش از خروج استثناها با \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) در مراحل بسیار متأخر رخ می‌دهد و نمی‌تواند بر افزونگی جریان کنترل تأثیر بگذارد، اما فراخوانی‌هایی که توسط فرانت‌اند‌های زبان به عنوان فراخوانی نهایی اجباری نشانه‌گذاری شده‌اند، و هر فراخوانی که به اندازهٔ کافی زود به عنوان فراخوانی نهایی بالقوه علامت‌گذاری شده باشد نیز راستی‌آزمایی را پیش از فراخوانی صادر خواهند کرد؛ هرچند این احتمالات صرفاً نظری هستند، چرا که این شرایط تنها با استفاده از پلاگین‌های سفارشی کامپایلر محقق می‌شوند. .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) پیچیده شده که بررسی را انجام داده و استثنا را مجدداً پرتاب می‌کند (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 فعال است، مسیر اجرای ثبت‌شده را پیش از هر فراخوانی تابعی که بلافاصله با بازگشت نتیجه‌اش (در صورت وجود) دنبال می‌شود، در برابر گراف جریان کنترل بررسی می‌کند، تا مانع از بهینه‌سازی فراخوانی نهایی (tail\-call) نشود، صرف‌نظر از این‌که در نهایت به یک فراخوانی نهایی بهینه‌سازی شود یا خیر. .Sp این گزینه به صورت پیش‌فرض هر زمان که بهینه‌سازی‌های فراخوانی همزاد (sibling call) فعال باشند، فعال است (ببینید \fB\-foptimize\-sibling\-calls\fR)، اما می‌تواند به صراحت و صرف‌نظر از بهینه‌سازی‌ها فعال (یا با استفاده از شکل منفی آن، غیرفعال) شود. .IP \fB\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno\-xthrow\fR|\fBnothrow\fR|\fBnever\fR] 4 .IX Item "-fhardcfr-check-noreturn-calls=[always|no-xthrow|nothrow|never]" هنگامی که \fB\-fharden\-control\-flow\-redundancy\fR فعال باشد، مسیر اجرای ثبت‌شده را پیش از فراخوانی‌های \f(CW\*(C`noreturn\*(C'\fR با گراف جریان کنترل بررسی می‌کند؛ یا در تمام آن‌ها (\fBalways\fR)، یا آن‌هایی که انتظار نمی‌رود کنترل را از طریق یک استثنا به فراخواننده بازگردانند (\fBno\-xthrow\fR، حالت پیش‌فرض)، یا آن‌هایی که ممکن نیست کنترل را از طریق استثنا به فراخواننده بازگردانند (\fBnothrow\fR)، یا هیچ‌کدام از آن‌ها (\fBnever\fR). .Sp بررسی پیش از یک تابع \f(CW\*(C`noreturn\*(C'\fR که ممکن است کنترل را از طریق استثنا به فراخواننده بازگرداند، می‌تواند در صورتی که استثنا در فراخواننده مدیریت شود (چه توسط یک گرداننده و چه توسط یک cleanup)، موجب شود بررسی بیش از یک بار انجام گیرد. هنگامی که \fB\-fhardcfr\-check\-exceptions\fR نیز فعال باشد، کامپایلر از مرتبط ساختن فراخوانی \f(CW\*(C`noreturn\*(C'\fR با گردانندهٔ cleanup اضافه شده به طور ضمنی خودداری می‌کند، زیرا با بررسی انجام‌شده پیش از فراخوانی تکراری و افزونه خواهد بود؛ با این حال سایر گرداننده‌ها یا cleanupها در تابع در صورت فعال شدن، مسیر اجرای ثبت‌شده را تغییر داده و با رسیدن به یک نقطهٔ بررسی دیگر، مجدداً آن را بررسی می‌کنند. این نقطهٔ بازرسی حتی می‌تواند فراخوانی \f(CW\*(C`noreturn\*(C'\fR دیگری باشد، بنابراین ممکن است بازبینی چندین بار انجام شود. .Sp بهینه‌سازهای مختلف ممکن است حتی در غیاب صفت‌های متناظر باعث شوند فراخوانی‌ها به عنوان \f(CW\*(C`noreturn\*(C'\fR و/یا \f(CW\*(C`nothrow\*(C'\fR علامت‌گذاری شوند، که این امر می‌تواند بر محل قرارگیری بررسی‌ها پیش از فراخوانی‌ها، و همچنین افزودن گرداننده‌های cleanup ضمنی برای آن‌ها تأثیر بگذارد. این غیرقابل‌پیش‌بینی بودن، و این واقعیت که پرتاب و پرتاب مجدد مکرر استثناها عملاً به منزلهٔ فراخوانی ضمنی توابع \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 سیستم قدیمی‌تر از نسخه ۲٫۳۵ باشد، \fB\-D_FORTIFY_SOURCE=2\fR به جای آن استفاده می‌شود. .Sp این گزینه برای استفاده در ساخت‌های محیط عملیاتی (production) در نظر گرفته شده است، و نه صرفاً در ساخت‌های خطایابی (debug). .Sp در حال حاضر، \fB\-fhardened\fR تنها در مقصدهای GNU/Linux پشتیبانی می‌شود. .Sp \&\fB\-fhardened\fR تنها در صورتی یک گزینهٔ مشخص را فعال می‌کند که قبلاً در هیچ کجای خط فرمان مشخص نشده باشد. به عنوان مثال، \&\fB\-fhardened\fR \fB\-fstack\-protector\fR تنها \fB\-fstack\-protector\fR را فعال خواهد کرد، اما \fB\-fstack\-protector\-strong\fR را فعال نخواهد کرد..IP \fB\-fstack\-protector\fR 4 .IX Item "-fstack-protector" تولید کد اضافی برای بررسی سرریزهای بافر، مانند حملات تخریب پشته (stack smashing). این کار با افزودن یک متغیر محافظ به توابعی با اشیاء آسیب‌پذیر انجام می‌شود. این شامل توابعی است که \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 برای اعمال محدودیت پشتهٔ 128KB استفاده کنید. توجه داشته باشید که این ممکن است تنها با پیونددهندهٔ GNU کار کند. .Sp می‌توانید بررسی محدودیت پشته را به‌طور محلی با استفاده از ویژگی تابع \&\f(CW\*(C`no_stack_limit\*(C'\fR لغو کنید. .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 در نگارش 2.21 بستهٔ GNU binutils و بعد از آن پیاده‌سازی شده است. .IP \fB\-fstrub=disable\fR 4 .IX Item "-fstrub=disable" غیرفعال‌سازی کامل پاک‌سازی پشته (stack scrubbing) و نادیده‌گرفتن تمام ویژگی‌های \f(CW\*(C`strub\*(C'\fR. ببینید .IP \fB\-fstrub=strict\fR 4 .IX Item "-fstrub=strict" حالت پیش‌فرض توابع به وضعیت \f(CW\*(C`disabled\*(C'\fR در \f(CW\*(C`strub\*(C'\fR تنظیم می‌شود و این محدودیت به‌صورت سخت‌گیرانه (\fBstrict\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`disabled\*(C'\fR در \f(CW\*(C`strub\*(C'\fR مرتبط شده‌اند. این گزینه تنها برای باطل کردن سایر گزینه‌های \fB\-fstrub=*\fR که پیش از آن در خط فرمان آمده‌اند مفید است. .IP \fB\-fstrub=at\-calls\fR 4 .IX Item "-fstrub=at-calls" فعال‌سازی حالت \f(CW\*(C`at\-calls\*(C'\fR در \f(CW\*(C`strub\*(C'\fR در صورت امکان‌پذیر بودن. کاربرد اصلی این گزینه برای آزمایش است. این گزینه سازوکار \f(CW\*(C`strub\*(C'\fR را در سناریوهایی که کاملاً محلی برای یک واحد ترجمه هستند به کار می‌گیرد. این حالت \f(CW\*(C`strub\*(C'\fR رابط‌های توابع را تغییر می‌دهد، بنابراین هر تابعی که برای سایر واحدهای ترجمه قابل مشاهده باشد، یا آدرس آن گرفته شده باشد، تحت تأثیر این گزینه قرار \fIنخواهد گرفت\fR. گزینه‌های بهینه‌سازی نیز ممکن است بر امکان‌پذیر بودن تأثیر بگذارند. برای جزئیات دربارهٔ نیازمندی‌های امکان‌پذیری و واجد شرایط بودن، به مستندات ویژگی \f(CW\*(C`strub\*(C'\fR مراجعه کنید. .IP \fB\-fstrub=internal\fR 4 .IX Item "-fstrub=internal" فعال‌سازی حالت \f(CW\*(C`internal\*(C'\fR در \f(CW\*(C`strub\*(C'\fR در صورت امکان‌پذیر بودن. کاربرد اصلی این گزینه برای آزمایش است. هدف این گزینه آزمودن دقیق بخش‌هایی از سازوکار \f(CW\*(C`strub\*(C'\fR است که حالت کم‌بازده‌تر اما نگه‌دارندهٔ رابط \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 نکته: این قابلیت داده‌ها را به انتهای فایل گزارش اضافه (\fIappends\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 (append) می‌کند. برای داشتن فایل‌های گزارش تازه، حتماً هرگونه فایل موجود پیشین را پاک کنید. .IP \fB\-finstrument\-functions\fR 4 .IX Item "-finstrument-functions" تولید فراخوانی‌های ابزارگذاری (instrumentation) برای ورود و خروج توابع. درست پس از ورود به تابع و درست پیش از خروج از آن، توابع تحلیل عملکرد (profiling) زیر همراه با نشانی تابع جاری و نقطهٔ فراخوانی آن (call site) فراخوانده می‌شوند. (در برخی بسترها، \&\f(CW\*(C`_\|_builtin_return_address\*(C'\fR فراتر از تابع جاری کار نمی‌کند، بنابراین ممکن است اطلاعات نقطهٔ فراخوانی در غیر این صورت برای توابع تحلیل عملکرد در دسترس نباشد.) .Sp .Vb 4 \& void _\|_cyg_profile_func_enter (void *this_fn, \& void *call_site); \& void _\|_cyg_profile_func_exit (void *this_fn, \& void *call_site); .Ve .Sp آرگومان نخست، نشانی آغاز تابع جاری است که می‌توان آن را دقیقاً در جدول نمادها جستجو کرد. .Sp این ابزارگذاری برای توابعی که به صورت درون‌خطی (inline) در سایر توابع باز می‌شوند نیز انجام می‌پذیرد. فراخوانی‌های تحلیل عملکرد نشان می‌دهند که از نظر مفهومی، ورود و خروج به تابع درون‌خطی در کجا رخ داده است. این بدان معناست که باید نسخه‌های آدرس‌پذیر چنین توابعی در دسترس باشند. اگر تمام موارد استفادهٔ شما از یک تابع به صورت درون‌خطی باز شود، ممکن است باعث افزایش افزودهٔ اندازهٔ کد شود. اگر در کد C خود از \f(CW\*(C`extern inline\*(C'\fR استفاده می‌کنید، باید یک نسخهٔ آدرس‌پذیر از چنین توابعی ارائه شود. (در هر صورت معمولاً وضعیت همین‌گونه است، اما اگر بخت یارتان باشد و بهینه‌ساز همواره توابع را درون‌خطی کند، شاید توانسته باشید بدون ارائهٔ رونوشت‌های ایستا از آن عبور کنید.) .Sp می‌توان به یک تابع صفت \f(CW\*(C`no_instrument_function\*(C'\fR را اختصاص داد، که در این صورت این ابزارگذاری انجام نمی‌شود. از این قابلیت می‌توان برای نمونه برای توابع تحلیل عملکرد فهرست‌شده در بالا، روتین‌های وقفه با اولویت بالا و هر تابعی که نمی‌توان توابع تحلیل عملکرد را با ایمنی از درون آن فراخواند (شاید گرداننده‌های سیگنال، در صورتی که روال‌های تحلیل عملکرد خروجی تولید کرده یا حافظه تخصیص دهند) استفاده کرد. .IP \fB\-finstrument\-functions\-once\fR 4 .IX Item "-finstrument-functions-once" این گزینه مشابه \fB\-finstrument\-functions\fR است، اما توابع تحلیل عملکرد تنها یک بار به ازای هر تابع ابزارگذاری‌شده فراخوانی می‌شوند؛ بدین معنا که نخستین تابع تحلیل عملکرد پس از نخستین ورود به تابع ابزارگذاری‌شده، و دومین تابع تحلیل عملکرد پیش از خروج متناظر با این ورود نخست فراخوانده می‌شود. .Sp تعریف \f(CW\*(C`once\*(C'\fR برای اهداف این گزینه تا حدودی مبهم است زیرا پیاده‌سازی در برابر رقابت داده‌ای (data races) محافظت نشده است. در نتیجه، پیاده‌سازی تنها تضمین می‌کند که توابع تحلیل عملکرد \fIحداقل\fR یک بار در هر فرایند و \fIحداکثر\fR یک بار در هر ریسه فراخوانی شوند، اما فراخوانی‌ها همواره جفت هستند؛ یعنی اگر یک ریسه تابع نخست را فراخوانی کند، سپس تابع دوم را نیز فراخواهد خواند، مگر اینکه هرگز به نقطهٔ خروج تابع ابزارگذاری‌شده نرسد. .IP \fB\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,...\fR 4 .IX Item "-finstrument-functions-exclude-file-list=file,file,..." تعیین فهرست فایل‌هایی که توابع آن‌ها از ابزارگذاری مستثنی می‌شوند (توضیحات \fB\-finstrument\-functions\fR را ببینید). اگر فایلی که حاوی تعریف تابع است با یکی از مقادیر \fIfile\fR مطابقت داشته باشد، آن تابع ابزارگذاری نمی‌شود. تطابق بر پایهٔ زیررشته انجام می‌گیرد: اگر پارامتر \fIfile\fR زیررشته‌ای از نام فایل باشد، یک تطابق به شمار می‌آید. .Sp برای نمونه: .Sp .Vb 1 \& \-finstrument\-functions\-exclude\-file\-list=/bits/stl,include/sys .Ve .Sp هر تابع درون‌خطی تعریف‌شده در فایل‌هایی را که مسیرشان شامل \fI/bits/stl\fR یا \fIinclude/sys\fR باشد مستثنی می‌کند. .Sp اگر به هر دلیلی می‌خواهید نویسهٔ \fB,\fR را در یکی از \&\fIsym\fR بگنجانید، \fB,\fR را بنویسید. برای نمونه، \&\fB\-finstrument\-functions\-exclude\-file\-list=\*(Aq,,tmp\*(Aq\fR (به علامت نقل‌قول تکی در اطراف گزینه دقت کنید). .IP \fB\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,...\fR 4 .IX Item "-finstrument-functions-exclude-function-list=sym,sym,..." این گزینه مشابه \fB\-finstrument\-functions\-exclude\-file\-list\fR است، اما فهرستی از نام‌های توابع را جهت مستثنی شدن از ابزارگذاری تعیین می‌کند. نام تابعی که تطبیق داده می‌شود، نام قابل مشاهده برای کاربر است، مانند \f(CW\*(C`vector blah(const vector &)\*(C'\fR، نه نام درهم‌پیچیدهٔ داخلی (مانند \f(CW\*(C`_Z4blahRSt6vectorIiSaIiEE\*(C'\fR). این تطابق روی زیررشته‌ها انجام می‌شود: اگر پارامتر \fIsym\fR زیررشته‌ای از نام تابع باشد، منطبق به شمار می‌آید. برای شناسه‌های گسترش‌یافتهٔ C99 و C++، نام تابع باید در قالب UTF\-8 مشخص شود و نباید از نام‌های نویسهٔ فراگیر (universal character names) استفاده کرد. .IP \fB\-fpatchable\-function\-entry=\fR\fIN\fR\fB[,\fR\fIM\fR\fB]\fR 4 .IX Item "-fpatchable-function-entry=N[,M]" تولید \fIN\fR دستور NOP درست در آغاز هر تابع، به‌طوری که نقطهٔ ورود تابع پیش از \fIM\fRاُمین NOP قرار می‌گیرد. اگر \fIM\fR حذف شود، مقدار پیش‌فرض آن \f(CW0\fR خواهد بود تا نقطهٔ ورود تابع دقیقاً به نشانی نخستین NOP اشاره کند. دستورهای NOP فضای اضافی را رزرو می‌کنند که در صورت قابل نوشتن بودن قطعه کد (code segment)، می‌توان از آن برای وصله‌زدن هرگونه ابزارگذاری دلخواه در زمان اجرا استفاده کرد. مقدار این فضا به‌طور غیرمستقیم از طریق تعداد NOPها قابل کنترل است؛ دستور NOP به‌کاررفته متناظر با دستوری است که توسط رابط پشتی داخلی GCC یعنی \f(CW\*(C`gen_nop\*(C'\fR صادر می‌شود. این رفتار وابسته به معماری مقصد است و ممکن است به گونهٔ معماری و/یا سایر گزینه‌های کامپایل نیز وابسته باشد. .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 در نشانی ورود تابع \-\-\- و بسته به \fIM\fR، شاید پیش از آن \-\-\- حتی قبل از مقدمه (prologue) درج می‌شوند. در PowerPC با ساختار ELFv2 ABI، برای تابعی با نقاط ورود دوگانه، نقطهٔ ورود محلی به‌طور پیش‌فرض همان نشانی ورود تابع است. برای تغییر این حالت، گزینهٔ \fB\-msplit\-patch\-nops\fR را ببینید. .Sp بیشینهٔ مقدار \fIN\fR و \fIM\fR برابر ۶۵۵۳۵ است. در PowerPC با ساختار ELFv2 ABI، برای تابعی با نقاط ورود دوگانه، مقادیر پشتیبانی‌شده برای \fIM\fR در صورت عدم استفاده از \fB\-msplit\-patch\-nops\fR برابر 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 مستند شده‌اند. گزینه‌های کنترل خطایابی و هشدارهای پیش‌پردازنده نیز در \&\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 نشانه‌گذاری (tokenized) شده و طوری پردازش می‌شوند که گویی در فاز سوم ترجمه در یک دستورالعمل \fB#define\fR ظاهر شده‌اند. به‌ویژه، تعریف با نویسه‌های خط‌جدیدِ درون‌متنی بریده می‌شود. .Sp اگر پیش‌پردازنده را از یک شل (shell) یا برنامه‌ای شبیه شل فراخوانی می‌کنید، ممکن است لازم باشد از نحو نقل‌قول (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 داده شود، فایل‌ها به همان ترتیبی که در خط فرمان آمده‌اند اضافه (include) می‌شوند. .IP "\fB\-imacros\fR \fIfile\fR" 4 .IX Item "-imacros file" دقیقاً مانند \fB\-include\fR است، به جز این‌که هر خروجی تولیدشده از پویش \fIfile\fR دور ریخته می‌شود. ماکروهایی که تعریف می‌کند، تعریف‌شده باقی می‌مانند. این امر به شما امکان می‌دهد تمام ماکروهای یک سرآیند (header) را بدون پردازش اعلان‌های آن به دست آورید. .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، بیشتر مشتقات دیگر Unix و همچنین مقصدهای x86 Cygwin و MinGW پشتیبانی می‌شود. .IP \fB\-M\fR 4 .IX Item "-M" به جای خروجی دادن نتیجهٔ پیش‌پردازش، قاعده‌ای مناسب برای \fBmake\fR خروجی می‌دهد که وابستگی‌های فایل منبع اصلی را توصیف می‌کند. پیش‌پردازنده یک قاعدهٔ \fBmake\fR خروجی می‌دهد که شامل نام فایل شیء (object file) برای آن فایل منبع، یک دونقطه، و نام تمام فایل‌های include شده، از جمله مواردی که از گزینه‌های خط فرمان \fB\-include\fR یا \&\fB\-imacros\fR می‌آیند است. .Sp مگر این‌که به‌طور صریح مشخص شده باشد (با \fB\-MT\fR یا \fB\-MQ\fR)، نام فایل شیء شامل نام فایل منبع است که پسوند آن با پسوند فایل شیء جایگزین شده و هرگونه بخش دایرکتوری ابتدایی آن حذف شده است. اگر فایل‌های include شده زیاد باشند، قاعده با استفاده از \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 است، اما از فایل‌های سرآیندی که در دایرکتوری‌های سرآیند سیستم یافت می‌شوند، یا فایل‌های سرآیندی که به‌طور مستقیم یا غیرمستقیم از چنین سرآیندی include شده‌اند، نامی نمی‌برد. .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 را حذف می‌کند و پسوند معمول فایل شیء برای آن پلتفرم را الحاق می‌نماید. نتیجه، هدف (target) خواهد بود. .Sp یک گزینهٔ \fB\-MT\fR هدف را دقیقاً همان رشته‌ای تنظیم می‌کند که مشخص کرده‌اید. اگر اهداف متعددی می‌خواهید، می‌توانید آن‌ها را به عنوان یک آرگومان واحد به \fB\-MT\fR بدهید، یا از چندین گزینهٔ \fB\-MT\fR استفاده نمایید. .Sp برای مثال، \fB\-MT\ \*(Aq$(objpfx)foo.o\*(Aq\fR ممکن است چنین خروجی دهد: .Sp .Vb 1 \& $(objpfx)foo.o: foo.c .Ve .IP "\fB\-MQ\fR \fItarget\fR" 4 .IX Item "-MQ target" همانند \fB\-MT\fR است، اما هر نویسه‌ای را که برای Make خاص است درون نقل‌قول قرار می‌دهد. دستور \fB\-MQ\ \*(Aq$(objpfx)foo.o\*(Aq\fR این خروجی را می‌دهد: .Sp .Vb 1 \& $$(objpfx)foo.o: foo.c .Ve .Sp هدف پیش‌فرض به‌طور خودکار درون نقل‌قول قرار می‌گیرد، درست مانند این‌که با \&\fB\-MQ\fR مشخص شده باشد. .IP \fB\-MD\fR 4 .IX Item "-MD" گزینهٔ \&\fB\-MD\fR معادل \fB\-M \-MF\fR \fIfile\fR است، با این تفاوت که \&\fB\-E\fR به‌صورت ضمنی اعمال نمی‌شود. درایور \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" به پیش‌پردازنده نشان می‌دهد که فایل ورودی قبلاً پیش‌پردازش شده است. این گزینه مواردی مانند بسط ماکرو، تبدیل trigraph، اتصال خطوط ادامه‌دار با خط‌جدید فراریافته، و پردازش بیشتر دستورالعمل‌ها را لغو می‌کند. پیش‌پردازنده همچنان توضیح‌ها را شناسایی و حذف می‌کند، به طوری که می‌توانید فایلی را که با \fB\-C\fR پیش‌پردازش شده است بدون مشکل به کامپایلر بفرستید. در این حالت، پیش‌پردازندهٔ یکپارچه‌شده عملاً چیزی بیش از یک نشانه‌گذار (tokenizer) برای فرانت‌اندها نیست. .Sp گزینهٔ \&\fB\-fpreprocessed\fR در صورتی که فایل ورودی دارای یکی از پسوندهای \fB.i\fR، \fB.ii\fR یا \fB.mi\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 محدود می‌شود. سایر عملیات پیش‌پردازنده، مانند بسط ماکرو و تبدیل سه‌نگاره‌ها (trigraphs) انجام نمی‌شوند. علاوه بر این، گزینهٔ \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 مفید است که در آن هر دوی واحدهای سرآیند و واحدهای رابط ماژول باید مستقیماً کامپایل شوند: .Sp .Vb 1 \& g++ \-c \-std=c++20 \-fmodules \-fsearch\-include\-path bits/stdc++.h bits/std.cc .Ve .Sp مقدار \&\fIkind\fR به‌طور پیش‌فرض برابر با \fBuser\fR است، که مسیر جستجوی \f(CW#include "..."\fR را بررسی می‌کند؛ همچنین می‌توانید به‌صراحت \fBsystem\fR را برای مسیر جستجوی \f(CW\*(C`#include <...>\*(C'\fR مشخص کنید. .IP \fB\-ftabstop=\fR\fIwidth\fR 4 .IX Item "-ftabstop=width" تعیین فاصلهٔ بین ایستگاه‌های تب (tab stops). این به پیش‌پردازنده کمک می‌کند تا شمارهٔ ستون‌های صحیح را در هشدارها یا خطاها گزارش دهد، حتی اگر تب‌ها روی خط وجود داشته باشند. اگر مقدار کمتر از ۱ یا بیشتر از ۱۰۰ باشد، از این گزینه صرف‌نظر می‌شود. مقدار پیش‌فرض ۸ است. .IP \fB\-ftrack\-macro\-expansion\fR[\fB=\fR\fIlevel\fR] 4 .IX Item "-ftrack-macro-expansion[=level]" ردیابی مکان توکن‌ها در طول بسط ماکروها. این به کامپایلر اجازه می‌دهد تا هنگام وقوع خطای کامپایل در بسط یک ماکرو، پیام‌های عیب‌یابی را دربارهٔ پشتهٔ بسط ماکروی جاری صادر کند. استفاده از این گزینه باعث مصرف حافظهٔ بیشتر توسط پیش‌پردازنده و کامپایلر می‌شود. از پارامتر \fIlevel\fR می‌توان برای انتخاب سطح دقت ردیابی مکان توکن‌ها استفاده کرد تا در صورت لزوم مصرف حافظه کاهش یابد. مقدار \fB0\fR برای \fIlevel\fR این گزینه را غیرفعال می‌کند. مقدار \fB1\fR مکان توکن‌ها را در حالتی تنزل‌یافته به منظور حداقل سربار حافظه ردیابی می‌کند. در این حالت تمام توکن‌های حاصل از بسط یک آرگومان ماکروی تابع‌گونه (function-like) مکان یکسانی دارند. مقدار \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 نتواند این اطلاعات را از locale دریافت کند، مقدار پیش‌فرض UTF\-8 است. این مقدار می‌تواند توسط locale یا این گزینهٔ خط فرمان بازنویسی شود. در حال حاضر در صورت وجود تعارض، گزینهٔ خط فرمان اولویت دارد. \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" لغو یک ادعا (assertion) با گزارهٔ \fIpredicate\fR و پاسخ \&\fIanswer\fR. .IP \fB\-C\fR 4 .IX Item "-C" توضیحات (comments) را دور نریز. تمام توضیحات به فایل خروجی منتقل می‌شوند، به جز توضیحات موجود در دستورات پردازش‌شده که همراه با خود دستور حذف می‌شوند. .Sp هنگام استفاده از \fB\-C\fR باید برای عوارض جانبی آماده باشید؛ این گزینه باعث می‌شود پیش‌پردازنده توضیحات را به عنوان توکن‌های مستقل در نظر بگیرد. برای مثال، توضیحاتی که در ابتدای یک خط دستور ظاهر می‌شوند این اثر را دارند که آن خط را به یک خط مبدأ معمولی تبدیل می‌کنند، زیرا اولین توکن روی خط دیگر یک \fB#\fR نیست. .IP \fB\-CC\fR 4 .IX Item "-CC" توضیحات را دور نریز، از جمله در حین بسط ماکرو. این مانند \fB\-C\fR است، با این تفاوت که توضیحات داخل ماکروها نیز در جایی که ماکرو بسط می‌یابد به فایل خروجی منتقل می‌شوند. .Sp علاوه بر عوارض جانبی گزینهٔ \fB\-C\fR، گزینهٔ \&\fB\-CC\fR باعث می‌شود تمام توضیحات به سبک ++C درون یک ماکرو به توضیحات به سبک C تبدیل شوند. این کار برای جلوگیری از این است که استفادهٔ بعدی از آن ماکرو سهواً بقیهٔ خط مبدأ را تبدیل به توضیح نکند. .Sp گزینهٔ \fB\-CC\fR به‌طور کلی برای پشتیبانی از توضیحات lint استفاده می‌شود. .IP \fB\-P\fR 4 .IX Item "-P" جلوگیری از تولید نشانگرهای خط در خروجی پیش‌پردازنده. این ممکن است هنگام اجرای پیش‌پردازنده روی چیزی که کد C نیست و قرار است به برنامه‌ای ارسال شود که ممکن است با نشانگرهای خط دچار سردرگمی شود، مفید باشد. .IP \fB\-traditional\fR 4 .IX Item "-traditional" .PD 0 .IP \fB\-traditional\-cpp\fR 4 .IX Item "-traditional-cpp" .PD تلاش برای تقلید از رفتار پیش‌پردازنده‌های C پیش از استاندارد، در مقایسه با پیش‌پردازنده‌های ISO C. برای جزئیات به راهنمای GNU CPP مراجعه کنید. .Sp توجه داشته باشید که GCC در غیر این صورت تلاشی برای شبیه‌سازی کامپایلر C پیش از استاندارد نمی‌کند، و این گزینه‌ها فقط با سوییچ \fB\-E\fR یا هنگام فراخوانی صریح CPP پشتیبانی می‌شوند. .IP \fB\-trigraphs\fR 4 .IX Item "-trigraphs" پشتیبانی از سه‌نگاره‌های ISO C (trigraphs). این‌ها دنباله‌های سه نویسه‌ای هستند که همگی با \fB??\fR شروع می‌شوند و توسط ISO C برای نشان دادن نویسه‌های منفرد تعریف شده‌اند. برای مثال، \&\fB??/\fR نمایانگر \fB\e\fR است، بنابراین \fB\*(Aq??/n\*(Aq\fR یک ثابت نویسه‌ای برای خط جدید (newline) است. .Sp نه سه‌نگاره و جایگزین‌های آن‌ها عبارتند از: .Sp .Vb 2 \& Trigraph: ??( ??) ??< ??> ??= ??/ ??\*(Aq ??! ??\- \& Replacement: [ ] { } # \e ^ | ~ .Ve .Sp به‌طور پیش‌فرض، GCC سه‌نگاره‌ها را نادیده می‌گیرد، اما در حالت‌های منطبق با استاندارد آن‌ها را تبدیل می‌کند. گزینه‌های \fB\-std\fR و \&\fB\-ansi\fR را ببینید..IP \fB\-remap\fR 4 .IX Item "-remap" فعال‌سازی کدهای ویژه برای دور زدن محدودیت‌های سیستم‌فایل‌هایی که فقط نام‌های فایل بسیار کوتاه را می‌پذیرند، مانند MS\-DOS. .IP \fB\-H\fR 4 .IX Item "-H" علاوه بر سایر فعالیت‌های عادی، نام هر فایل سرایند (header) استفاده‌شده را چاپ می‌کند. هر نام دندانه‌دار می‌شود تا عمق آن در پشتهٔ \&\fB#include\fR نشان داده شود. فایل‌های سرایند پیش‌کامپایل‌شده نیز چاپ می‌شوند، حتی اگر نامعتبر تشخیص داده شوند؛ یک فایل سرایند پیش‌کامپایل‌شدهٔ نامعتبر با \fB...x\fR و یک فایل معتبر با \fB...!\fR چاپ می‌شود. .IP \fB\-d\fR\fIletters\fR 4 .IX Item "-dletters" دستور می‌دهد که در حین کامپایل، نسخه‌های تخلیهٔ اشکال‌زدایی (debugging dumps) همان‌طور که با \&\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 برای دور زدن گردانندهٔ کامپایلر (compiler driver) و ارسال مستقیم \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" این گزینه‌ها زمانی به کار می‌آیند که کامپایلر فایل‌های شیء (object files) را در یک فایل خروجی اجرایی پیوند می‌دهد. اگر کامپایلر مرحلهٔ پیوند را انجام ندهد، این گزینه‌ها بی‌معنی هستند. .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) را کنترل می‌کند. به طور پیش‌فرض، خروجی پیونددهنده به صورت خودکار توسط افزونهٔ پیونددهنده تعیین می‌شود. برای اشکال‌زدایی کامپایلر و در صورتی که پیونددهی افزایشی با یک فایل شیء غیر LTO مد نظر باشد، کنترل دستی این نوع می‌تواند مفید باشد. .Sp اگر \fItype\fR برابر \fBexec\fR باشد، تولید کد یک باینری ایستا ایجاد می‌کند. در این حالت، \fB\-fpic\fR و \fB\-fpie\fR هر دو غیرفعال می‌شوند. .Sp اگر \fItype\fR برابر \fBdyn\fR باشد، تولید کد یک کتابخانهٔ اشتراکی تولید می‌کند. در این حالت \fB\-fpic\fR یا \fB\-fPIC\fR حفظ می‌شود، اما به طور خودکار فعال نمی‌شود. این کار امکان ساخت کتابخانه‌های اشتراکی بدون کد مستقل از موقعیت (PIC) را در معماری‌هایی که این امر امکان‌پذیر است (یعنی روی 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، بیشتر مشتقات دیگر یونیکس، و همچنین در اهداف 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 اشتراکی استفاده کند. رایج‌ترین مورد زمانی است که برنامه بخواهد استثناها را در میان کتابخانه‌های اشتراکی مختلف پرتاب و دریافت (throw and catch) کند. در این صورت، هر یک از کتابخانه‌ها و همچنین خود برنامه کاربردی باید از \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)، ارجاعات به نمادهای عمومی را مقید می‌کند. درباره هرگونه ارجاع حل‌نشده هشدار می‌دهد (مگر اینکه توسط گزینه ویرایشگر پیوند \fB\-Xlinker \-z \-Xlinker defs\fR لغو شده باشد). تنها تعداد کمی از سیستم‌ها از این گزینه پشتیبانی می‌کنند. .IP "\fB\-T\fR \fIscript\fR" 4 .IX Item "-T script" از \fIscript\fR به عنوان اسکریپت پیونددهنده استفاده می‌کند. این گزینه در اغلب سیستم‌هایی که از پیونددهنده GNU استفاده می‌کنند، پشتیبانی می‌شود. در برخی مقاصد، مانند مقاصد bare\-board بدون سیستم‌عامل، ممکن است برای جلوگیری از ارجاع به نمادهای تعریف‌نشده، گزینه \fB\-T\fR هنگام پیوند الزامی باشد. .IP "\fB\-Xlinker\fR \fIoption\fR" 4 .IX Item "-Xlinker option" گزینه \fIoption\fR را به عنوان یک گزینه به پیونددهنده ارسال می‌کند. می‌توانید از این گزینه برای تعیین گزینه‌های پیونددهنده مختص سیستمی که GCC آن‌ها را نمی‌شناسد، استفاده کنید. .Sp اگر می‌خواهید گزینه‌ای را ارسال کنید که آرگومان جداگانه‌ای می‌گیرد، باید از \&\fB\-Xlinker\fR دو بار استفاده کنید؛ یک بار برای گزینه و یک بار برای آرگومان آن. برای نمونه، جهت ارسال \fB\-assert definitions\fR، باید بنویسید \&\fB\-Xlinker \-assert \-Xlinker definitions\fR. نوشتن \&\fB\-Xlinker "\-assert definitions"\fR کار نمی‌کند، چرا که این کار تمام رشته را به صورت یک آرگومان واحد ارسال می‌کند که با انتظار پیونددهنده همخوانی ندارد. .Sp هنگام استفاده از پیونددهنده GNU، معمولاً ارسال آرگومان‌ها به گزینه‌های پیونددهنده با استفاده از نحو \fIoption\fR\fB=\fR\fIvalue\fR راحت‌تر از ارسال آن‌ها به شکل آرگومان‌های جداگانه است. برای مثال، می‌توانید به جای \&\fB\-Xlinker \-Map \-Xlinker output.map\fR از \&\fB\-Xlinker \-Map=output.map\fR استفاده کنید. ممکن است پیونددهنده‌های دیگر از این نحو برای گزینه‌های خط فرمان پشتیبانی نکنند. .IP \fB\-Wl,\fR\fIoption\fR 4 .IX Item "-Wl,option" گزینه \fIoption\fR را به عنوان یک گزینه به پیونددهنده ارسال می‌کند. اگر \fIoption\fR دارای کاما (ویرگول انگلیسی) باشد، در محل کاماها به چندین گزینه تفکیک می‌شود. می‌توانید از این نحو برای ارسال آرگومان به یک گزینه استفاده کنید. برای نمونه، \fB\-Wl,\-Map,output.map\fR مقدار \fB\-Map output.map\fR را به پیونددهنده ارسال می‌کند. هنگام استفاده از پیونددهنده GNU، می‌توانید با \&\fB\-Wl,\-Map=output.map\fR نیز به همین نتیجه دست یابید. .IP "\fB\-u\fR \fIsymbol\fR" 4 .IX Item "-u symbol" وانمود می‌کند که نماد \fIsymbol\fR تعریف‌نشده است، تا پیوند پودمان‌های کتابخانه‌ای برای تعریف آن اجباری شود. می‌توانید از \fB\-u\fR چندین بار با نمادهای مختلف برای تحمیل بارگذاری پودمان‌های کتابخانه‌ای اضافی استفاده کنید. .IP "\fB\-z\fR \fIkeyword\fR" 4 .IX Item "-z keyword" گزینه \&\fB\-z\fR مستقیماً به همراه کلیدواژه \&\fIkeyword\fR به پیونددهنده ارسال می‌شود. برای آگاهی از مقادیر مجاز و معانی آن‌ها، بخش مربوطه را در مستندات پیونددهنده خود بررسی کنید. .SS "گزینه‌های جستجوی دایرکتوری (Options for Directory Search)" .IX Subsection "Options for Directory Search" این گزینه‌ها دایرکتوری‌ها را برای جستجوی فایل‌های سرآیند (header files)، کتابخانه‌ها و بخش‌هایی از خودِ کامپایلر مشخص می‌کنند: .IP "\fB\-I\fR \fIdir\fR" 4 .IX Item "-I dir" .PD 0 .IP "\fB\-iquote\fR \fIdir\fR" 4 .IX Item "-iquote dir" .IP "\fB\-isystem\fR \fIdir\fR" 4 .IX Item "-isystem dir" .IP "\fB\-idirafter\fR \fIdir\fR" 4 .IX Item "-idirafter dir" .PD دایرکتوری \fIdir\fR را به فهرست دایرکتوری‌هایی که باید هنگام پیش‌پردازش برای فایل‌های سرآیند جستجو شوند، اضافه می‌کند. اگر \fIdir\fR با \fB=\fR یا \f(CW$SYSROOT\fR شروع شود، آنگاه \fB=\fR یا \f(CW$SYSROOT\fR با پیشوند sysroot جایگزین می‌شود؛ گزینه‌های \&\fB\-\-sysroot\fR و \fB\-isysroot\fR را ببینید. .Sp دایرکتوری‌های مشخص‌شده با \fB\-iquote\fR تنها برای شکل نقل‌قولیِ دستورالعمل، یعنی \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR اعمال می‌شوند. دایرکتوری‌های مشخص‌شده با \fB\-I\fR، \fB\-isystem\fR یا \fB\-idirafter\fR برای جستجوی هر دو نوع دستورالعمل‌های \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR و \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR اعمال می‌شوند. .Sp می‌توانید هر تعداد یا ترکیبی از این گزینه‌ها را در خط فرمان برای جستجوی فایل‌های سرآیند در چندین دایرکتوری تعیین کنید. ترتیب جستجو به شرح زیر است: .RS 4 .IP 1. 4 .IX Item "1." برای شکل نقل‌قولی دستورالعمل include، ابتدا دایرکتوریِ فایل جاری جستجو می‌شود. .IP 2. 4 .IX Item "2." برای شکل نقل‌قولی دستورالعمل include، دایرکتوری‌های مشخص‌شده توسط گزینه‌های \fB\-iquote\fR به ترتیب از چپ به راست، همان‌گونه که در خط فرمان آمده‌اند، جستجو می‌شوند. .IP 3. 4 .IX Item "3." دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-I\fR به ترتیب از چپ به راست پیمایش می‌شوند. .IP 4. 4 .IX Item "4." دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-isystem\fR به ترتیب از چپ به راست پیمایش می‌شوند. .IP 5. 4 .IX Item "5." دایرکتوری‌های استاندارد سیستم پیمایش می‌شوند. .IP 6. 4 .IX Item "6." دایرکتوری‌های مشخص‌شده با گزینه‌های \fB\-idirafter\fR به ترتیب از چپ به راست پیمایش می‌شوند. .RE .RS 4 .Sp از آنجا که این دایرکتوری‌ها پیش از دایرکتوری‌های فایل‌های سرآیند استاندارد سیستم جستجو می‌شوند، می‌توانید از \fB\-I\fR برای بازنویسی و جایگزین کردن نسخه سفارشی خود به جای فایل سرآیند سیستم استفاده کنید. با این وجود، نباید از این گزینه برای افزودن دایرکتوری‌های حاوی سرآیندهای سیستمی ارائه‌شده توسط سازنده (vendor) استفاده نمایید؛ برای این مقصود از \fB\-isystem\fR استفاده کنید. .Sp گزینه‌های \fB\-isystem\fR و \fB\-idirafter\fR همچنین دایرکتوری را به عنوان یک دایرکتوری سیستمی علامت‌گذاری می‌کنند، تا رفتار ویژه اعمال‌شده بر روی دایرکتوری‌های استاندارد سیستم شامل حال آن نیز بشود. .Sp اگر یک دایرکتوری استاندارد include سیستم، یا دایرکتوری مشخص‌شده با \&\fB\-isystem\fR، هم‌زمان با \fB\-I\fR نیز مشخص شده باشد، گزینه \fB\-I\fR نادیده گرفته می‌شود. دایرکتوری کماکان، اما به عنوان یک دایرکتوری سیستمی در جایگاه معمول خود در زنجیره include سیستم جستجو می‌گردد. این رفتار به منظور اطمینان از این است که فرایند GCC برای اصلاح سرآیندهای معیوب سیستم و ترتیب دستورالعمل \f(CW\*(C`#include_next\*(C'\fR به طور ناخواسته تغییر نکند. اگر واقعاً نیاز به تغییر ترتیب جستجوی دایرکتوری‌های سیستمی دارید، از گزینه‌های \fB\-nostdinc\fR و/یا \fB\-isystem\fR استفاده کنید. .RE .IP \fB\-I\-\fR 4 .IX Item "-I-" مسیر include را تقسیم می‌کند. این گزینه منسوخ شده است. لطفاً به جای آن برای دایرکتوری‌های \fB\-I\fR قبل از \fB\-I\-\fR از \fB\-iquote\fR استفاده نموده و گزینه \fB\-I\-\fR را حذف کنید. .Sp هر دایرکتوری مشخص‌شده با گزینه‌های \fB\-I\fR پیش از \fB\-I\-\fR تنها برای سرآیندهای فراخوانی‌شده با \&\f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR جستجو می‌شوند؛ آن‌ها برای \&\f(CW\*(C`#include\ <\fR\f(CIfile\fR\f(CW>\*(C'\fR جستجو نخواهند شد. اگر دایرکتوری‌های دیگری با گزینه‌های \fB\-I\fR پس از \fB\-I\-\fR مشخص شوند، آن دایرکتوری‌ها برای همه دستورالعمل‌های \fB#include\fR جستجو می‌گردند. .Sp علاوه بر این، \fB\-I\-\fR مانع استفاده از دایرکتوری فایل فعلی به عنوان نخستین دایرکتوری جستجو برای \f(CW\*(C`#include\ "\fR\f(CIfile\fR\f(CW"\*(C'\fR می‌شود. هیچ روشی برای لغو این اثر \fB\-I\-\fR وجود ندارد. .IP "\fB\-iprefix\fR \fIprefix\fR" 4 .IX Item "-iprefix prefix" مقدار \fIprefix\fR را به عنوان پیشوند برای گزینه‌های بعدی \fB\-iwithprefix\fR مشخص می‌کند. اگر پیشوند نمایانگر یک دایرکتوری است، باید اسلش انتهایی \fB/\fR را نیز قید کنید. .IP "\fB\-iwithprefix\fR \fIdir\fR" 4 .IX Item "-iwithprefix dir" .PD 0 .IP "\fB\-iwithprefixbefore\fR \fIdir\fR" 4 .IX Item "-iwithprefixbefore dir" .PD مقدار \fIdir\fR را به پیشوندی که پیش‌تر با \&\fB\-iprefix\fR تعیین شده پیوست می‌کند و دایرکتوری حاصل را به مسیر جستجوی include می‌افزاید. گزینه \fB\-iwithprefixbefore\fR آن را در همان جایگاهی می‌گذارد که \fB\-I\fR می‌گذاشت؛ گزینه \fB\-iwithprefix\fR آن را در جایگاهی می‌گذارد که \fB\-idirafter\fR قرار می‌داد. .IP "\fB\-isysroot\fR \fIdir\fR" 4 .IX Item "-isysroot dir" این گزینه مانند گزینه \fB\-\-sysroot\fR است، اما فقط بر روی فایل‌های سرآیند اعمال می‌شود (به جز در اهداف Darwin که در آن‌ها هم بر روی فایل‌های سرآیند و هم بر روی کتابخانه‌ها اعمال می‌گردد). برای اطلاعات بیشتر، گزینه \fB\-\-sysroot\fR را ببینید. .IP "\fB\-imultilib\fR \fIdir\fR" 4 .IX Item "-imultilib dir" از \fIdir\fR به عنوان یک زیردایرکتوری از دایرکتوری حاوی سرآیندهای C++ ویژه مقصد مورد نظر استفاده می‌کند. .IP \fB\-nostdinc\fR 4 .IX Item "-nostdinc" دایرکتوری‌های استاندارد سیستم را برای فایل‌های سرآیند جستجو نمی‌کند. تنها دایرکتوری‌هایی جستجو می‌شوند که به صراحت با گزینه‌های \fB\-I\fR، \&\fB\-iquote\fR، \fB\-isystem\fR و/یا \fB\-idirafter\fR تعیین شده باشند (و در صورت مناسب بودن، دایرکتوریِ فایل جاری). .IP \fB\-nostdinc++\fR 4 .IX Item "-nostdinc++" در دایرکتوری‌های استاندارد مختص C++ به دنبال فایل‌های سرآیند نمی‌گردد، اما سایر دایرکتوری‌های استاندارد را همچنان جستجو می‌کند. (این گزینه هنگام ساخت کتابخانه C++ به کار می‌رود.) .IP \fB\-\-embed\-dir=\fR\fIdir\fR 4 .IX Item "--embed-dir=dir" دایرکتوری \fIdir\fR را به فهرست دایرکتوری‌های مورد جستجو برای دستورالعمل پیش‌پردازش \&\f(CW\*(C`#embed\*(C'\fR یا ماکروی \f(CW\*(C`_\|_has_embed\*(C'\fR الحاق می‌کند. هیچ دایرکتوری پیش‌فرضی برای \f(CW\*(C`#embed\*(C'\fR وجود ندارد. .Sp اگر \fIdir\fR با \fB=\fR یا \f(CW$SYSROOT\fR آغاز شود، مقدار \fB=\fR یا \f(CW$SYSROOT\fR با پیشوند sysroot جایگزین می‌گردد؛ گزینه‌های \&\fB\-\-sysroot\fR و \fB\-isysroot\fR را ببینید. .IP \fB\-iplugindir=\fR\fIdir\fR 4 .IX Item "-iplugindir=dir" دایرکتوری مورد نظر را برای جستجوی افزایه‌هایی که به جای \&\fB\-fplugin=\fR\fIpath\fR\fB/\fR\fIname\fR\fB.so\fR از طریق \fB\-fplugin=\fR\fIname\fR ارسال شده‌اند، تنظیم می‌کند. این گزینه برای استفاده کاربر در نظر گرفته نشده، بلکه تنها توسط گرداننده (driver) ارسال می‌شود. .IP \fB\-L\fR\fIdir\fR 4 .IX Item "-Ldir" دایرکتوری \fIdir\fR را به فهرست دایرکتوری‌هایی که برای گزینه \fB\-l\fR جستجو می‌شوند اضافه می‌کند. .IP \fB\-B\fR\fIprefix\fR 4 .IX Item "-Bprefix" این گزینه مشخص می‌کند فایل‌های اجرایی، کتابخانه‌ها، فایل‌های include و فایل‌های داده خودِ کامپایلر در کجا یافت شوند. .Sp برنامه گرداننده کامپایلر (compiler driver) یک یا چند مورد از زیربرنامه‌های \&\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 که عملاً نام دایرکتوری‌ها را مشخص می‌کنند، بر کتابخانه‌های درون پیونددهنده نیز اعمال می‌شوند، زیرا کامپایلر این گزینه‌ها را به گزینه‌های \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 جایگزین می‌شود. هدف از این کار کمک به فرآیند خودراه‌اندازی (boot\-strapping) کامپایلر است..IP \fB\-no\-canonical\-prefixes\fR 4 .IX Item "-no-canonical-prefixes" پیوندهای نمادین را بسط نده، ارجاعات به \fB/../\fR یا \fB/./\fR را حل‌وفصل نکن، و هنگام تولید یک پیشوند نسبی، مسیر را مطلق نساز. .IP \fB\-\-sysroot=\fR\fIdir\fR 4 .IX Item "--sysroot=dir" از \fIdir\fR به‌عنوان دایرکتوری ریشهٔ منطقی برای سرآیندها و کتابخانه‌ها استفاده کن. برای مثال، اگر کامپایلر در حالت عادی برای سرآیندها در \fI/usr/include\fR و کتابخانه‌ها در \fI/usr/lib\fR جستجو می‌کند، در عوض \fIdir/usr/include\fR و \fIdir/usr/lib\fR را جستجو خواهد کرد. .Sp اگر هم از این گزینه و هم از گزینهٔ \fB\-isysroot\fR استفاده کنید، آن‌گاه گزینهٔ \fB\-\-sysroot\fR بر کتابخانه‌ها اعمال می‌شود، اما گزینهٔ \fB\-isysroot\fR بر فایل‌های سرآیند اعمال خواهد شد. .Sp پیونددهندهٔ گنو (GNU linker) (از نسخهٔ 2.16 به بعد) پشتیبانی لازم از این گزینه را دارد. اگر پیونددهندهٔ شما از این گزینه پشتیبانی نکند، جنبهٔ فایل سرآیند در \fB\-\-sysroot\fR همچنان کار می‌کند، اما جنبهٔ کتابخانه‌ای آن کار نخواهد کرد. .IP \fB\-\-no\-sysroot\-suffix\fR 4 .IX Item "--no-sysroot-suffix" برای برخی مقصدها (targets)، بسته به سایر گزینه‌های استفاده‌شده، پسوندی به دایرکتوری ریشهٔ مشخص‌شده با \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" این گزینه‌های مستقل از ماشین، قراردادهای رابط (interface conventions) استفاده‌شده در تولید کد را کنترل می‌کنند. .PP بیشتر آن‌ها هر دو شکل مثبت و منفی را دارند؛ شکل منفی \fB\-ffoo\fR به‌صورت \fB\-fno\-foo\fR است. در جدول زیر، تنها یکی از شکل‌ها فهرست شده است\-\-\-شکلی که پیش‌فرض نیست. شکل دیگر را می‌توانید با حذف \fBno\-\fR یا اضافه کردن آن به دست آورید. .IP \fB\-fstack\-reuse=\fR\fIreuse\-level\fR 4 .IX Item "-fstack-reuse=reuse-level" این گزینه استفادهٔ مجدد از فضای پشته را برای متغیرهای محلی/خودکار تعریف‌شده توسط کاربر و متغیرهای موقت تولید‌شده توسط کامپایلر کنترل می‌کند. \fIreuse_level\fR می‌تواند \fBall\fR، \fBnamed_vars\fR یا \fBnone\fR باشد. مقدار \fBall\fR استفادهٔ مجدد از پشته را برای تمام متغیرهای محلی و موقت فعال می‌کند، \fBnamed_vars\fR استفادهٔ مجدد را تنها برای متغیرهای محلی نام‌دارِ تعریف‌شده توسط کاربر فعال می‌سازد، و \fBnone\fR استفادهٔ مجدد از پشته را به‌طور کامل غیرفعال می‌کند. مقدار پیش‌فرض \fBall\fR است. این گزینه زمانی مورد نیاز است که برنامه طول عمر یک متغیر محلی در حوزه (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" این گزینه برای سرریز علامت‌دار در عملیات‌های جمع، تفریق و ضرب، تله (trap) تولید می‌کند. گزینه‌های \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\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" مدیریت استثناها را فعال می‌کند. کد اضافی مورد نیاز برای انتشار (propagate) استثناها را تولید می‌کند. برای برخی مقصدها، این بدان معناست که GCC اطلاعات بازپیچی فریم (frame unwind information) را برای تمام توابع تولید می‌کند که می‌تواند سربار اندازهٔ دادهٔ چشمگیری ایجاد کند، اگرچه بر اجرای برنامه تأثیری نمی‌گذارد. اگر این گزینه را مشخص نکنید، GCC به‌طور پیش‌فرض آن را برای زبان‌هایی مانند ++C که معمولاً به مدیریت استثنا نیاز دارند فعال کرده و برای زبان‌هایی مانند C که به‌طور معمول به آن نیازی ندارند غیرفعال می‌کند. با این حال، ممکن است هنگام کامپایل کد C که باید به‌درستی با مدیریت‌کننده‌های استثنای نوشته‌شده در ++C تعامل داشته باشد، نیاز به فعال کردن این گزینه داشته باشید. همچنین اگر برنامه‌های قدیمی‌تر ++C را کامپایل می‌کنید که از مدیریت استثنا استفاده نمی‌کنند، ممکن است مایل به غیرفعال کردن این گزینه باشید. .IP \fB\-fnon\-call\-exceptions\fR 4 .IX Item "-fnon-call-exceptions" کدی تولید می‌کند که به دستورالعمل‌های تله‌انداز (trapping instructions) اجازه می‌دهد استثنا پرتاب کنند. توجه داشته باشید که این به پشتیبانی زمان اجرای مختص سکو نیاز دارد که در همه جا وجود ندارد. علاوه بر این، این گزینه تنها به دستورالعمل‌های \fIتله‌انداز\fR، یعنی ارجاعات حافظه یا دستورالعمل‌های ممیز شناور، اجازهٔ پرتاب استثنا می‌دهد. این گزینه اجازه نمی‌دهد استثناها از مدیریت‌کننده‌های سیگنال دلخواه مانند \f(CW\*(C`SIGALRM\*(C'\fR پرتاب شوند. این گزینه \fB\-fexceptions\fR را فعال می‌کند. .IP \fB\-fdelete\-dead\-exceptions\fR 4 .IX Item "-fdelete-dead-exceptions" در نظر می‌گیرد که دستورالعمل‌هایی که ممکن است استثنا پرتاب کنند اما در غیر این صورت نقشی در اجرای برنامه ندارند، می‌توانند در حین بهینه‌سازی حذف شوند. این امر بر فراخوانی توابع تأثیری نمی‌گذارد، به‌جز توابعی که دارای ویژگی‌های \f(CW\*(C`pure\*(C'\fR یا \f(CW\*(C`const\*(C'\fR هستند. این گزینه به‌طور پیش‌فرض برای کامپایلرهای Ada و ++C، همان‌طور که مشخصات زبان اجازه می‌دهد، فعال است. گذرگاه‌های بهینه‌سازی که باعث حذف استثناهای مرده می‌شوند، به‌طور مستقل در سطوح بهینه‌سازی مختلف فعال می‌گردند. .IP \fB\-funwind\-tables\fR 4 .IX Item "-funwind-tables" مشابه \fB\-fexceptions\fR است، به‌جز اینکه تنها داده‌های ایستای مورد نیاز را تولید می‌کند، اما به هیچ شیوهٔ دیگری بر کد تولیدشده تأثیر نمی‌گذارد. شما معمولاً نیازی به فعال‌سازی این گزینه ندارید؛ در عوض، پردازشگر زبانی که به این مدیریت نیاز دارد، آن را از طرف شما فعال می‌کند. .IP \fB\-fasynchronous\-unwind\-tables\fR 4 .IX Item "-fasynchronous-unwind-tables" در صورت پشتیبانی ماشین مقصد، جدول بازپیچی را در قالب DWARF تولید می‌کند. این جدول در مرز هر دستورالعمل دقیق است، بنابراین می‌تواند برای بازپیچی پشته از رویدادهای ناهمگام (مانند دیباگر یا زباله‌روب) استفاده شود. .IP \fB\-fno\-gnu\-unique\fR 4 .IX Item "-fno-gnu-unique" در سیستم‌هایی با اسمبلر گنو و کتابخانهٔ C جدید، کامپایلر ++C از پیوند \f(CW\*(C`STB_GNU_UNIQUE\*(C'\fR استفاده می‌کند تا اطمینان یابد که تعاریف اعضای داده‌ای ایستای الگو و متغیرهای محلی ایستا در توابع درون‌خطی (inline functions) حتی در حضور \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" مقادیر کوتاه «short» برای \f(CW\*(C`struct\*(C'\fR و \f(CW\*(C`union\*(C'\fR را مانند مقادیر طولانی‌تر، به جای ثبات‌ها در حافظه بازمی‌گرداند. این قرارداد کارایی کمتری دارد، اما این مزیت را دارد که امکان فراخوانی متقابل میان فایل‌های کامپایل‌شده با GCC و فایل‌های کامپایل‌شده با سایر کامپایلرها، به‌ویژه Portable C Compiler (یا pcc) را فراهم می‌آورد. .Sp قرارداد دقیق برای بازگرداندن ساختارها در حافظه به ماکروهای پیکربندی مقصد بستگی دارد. .Sp ساختارها و اجتماعات کوتاه مواردی هستند که اندازه و تراز (alignment) آن‌ها با نوعی از انواع عدد صحیح مطابقت دارد. .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 را در ثبات‌ها بازمی‌گرداند. این روش برای ساختارهای کوچک، کارآمدتر از \&\fB\-fpcc\-struct\-return\fR است. .Sp اگر نه \fB\-fpcc\-struct\-return\fR و نه \&\fB\-freg\-struct\-return\fR را مشخص کنید، GCC به‌طور پیش‌فرض از هر قراردادی که برای معماری مقصد استاندارد باشد استفاده می‌کند. اگر هیچ قرارداد استانداردی وجود نداشته باشد، GCC به‌طور پیش‌فرض از \fB\-fpcc\-struct\-return\fR استفاده می‌کند، مگر در مقصدهایی که GCC کامپایلر اصلی است. در آن موارد، ما می‌توانیم استاندارد را انتخاب کنیم و گزینه کارآمدتر بازگشت از طریق ثبات را برگزیده‌ایم. .Sp \&\fBهشدار:\fR کدی که با سوییچ \fB\-freg\-struct\-return\fR کامپایل شده باشد با کدی که با سوییچ \&\fB\-fpcc\-struct\-return\fR کامپایل شده است، سازگاری دودویی ندارد. از آن برای سازگاری با یک رابط دودویی برنامه (ABI) غیرپیش‌فرض استفاده کنید. .IP \fB\-fshort\-enums\fR 4 .IX Item "-fshort-enums" برای یک نوع \f(CW\*(C`enum\*(C'\fR تنها به میزانی که برای بازه مقادیر تعریف‌شده ممکن نیاز است بایت تخصیص می‌دهد. به‌طور مشخص، نوع \f(CW\*(C`enum\*(C'\fR معادل با کوچک‌ترین نوع عدد صحیحی است که فضای کافی را داشته باشد. این گزینه برای یک نوع شمارشی با نوع زیربنایی ثابت هیچ اثری ندارد. .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، این گزینه جای‌گذاری متغیرهای سراسری تعریف‌شده بدون مقدار اولیه‌، که در استاندارد C به عنوان \fItentative definitions\fR (تعریف‌های موقت) شناخته می‌شوند را کنترل می‌کند. تعریف‌های موقت از اعلان‌های متغیر با کلمه کلیدی \f(CW\*(C`extern\*(C'\fR که حافظه‌ای تخصیص نمی‌دهند، متمایز هستند. .Sp پیش‌فرض \fB\-fno\-common\fR است، که مشخص می‌کند کامپایلر متغیرهای سراسری مقداردهی‌نشده را در بخش BSS فایل شیء قرار دهد. این امر مانع از ادغام تعریف‌های موقت توسط پیونددهنده می‌شود، بنابراین اگر یک متغیر به‌طور تصادفی در بیش از یک واحد ترجمه تعریف شود، با خطای multiple\-definition مواجه می‌شوید. .Sp گزینه \fB\-fcommon\fR متغیرهای سراسری مقداردهی‌نشده را در یک بلوک مشترک قرار می‌دهد. این کار به پیونددهنده اجازه می‌دهد تمام تعریف‌های موقت از متغیری یکسان در واحدهای ترجمه مختلف را به یک شیء واحد، یا به یک تعریف غیرموقت پیوند دهد. این رفتار با ++C سازگار نیست و در بسیاری از مقاصد باعث کاهش سرعت و افزایش اندازه کد هنگام ارجاع به متغیرهای سراسری می‌شود. این گزینه عمدتاً برای پیوند دادن کدهای قدیمی بدون خطا مفید است. .IP \fB\-fno\-ident\fR 4 .IX Item "-fno-ident" دستورالعمل \f(CW\*(C`#ident\*(C'\fR را نادیده می‌گیرد. .IP \fB\-finhibit\-size\-directive\fR 4 .IX Item "-finhibit-size-directive" از تولید دستورالعمل اسمبلی \f(CW\*(C`.size\*(C'\fR، یا هر چیز دیگری که اگر تابع از وسط تقسیم شود و دو نیمه در مکان‌هایی دور از هم در حافظه قرار گیرند باعث مشکل شود، خودداری می‌کند. این گزینه هنگام کامپایل \fIcrtstuff.c\fR استفاده می‌شود؛ نباید برای هیچ مورد دیگری به استفاده از آن نیاز داشته باشید. .IP \fB\-fverbose\-asm\fR 4 .IX Item "-fverbose-asm" اطلاعات توضیحی اضافه را در کد اسمبلی تولیدشده قرار می‌دهد تا خوانایی آن بیشتر شود. این گزینه معمولاً فقط برای کسانی مفید است که واقعاً نیاز به خواندن کد اسمبلی تولیدشده دارند (شاید هنگام اشکال‌زدایی خود کامپایلر). .Sp گزینه \fB\-fno\-verbose\-asm\fR، که پیش‌فرض است، باعث حذف این اطلاعات اضافه می‌شود و هنگام مقایسه دو فایل اسمبلی مفید است. .Sp توضیحات اضافه‌شده شامل موارد زیر است: .RS 4 .IP * 4 اطلاعات مربوط به نسخه کامپایلر و گزینه‌های خط فرمان، .IP * 4 خطوط کد منبع مرتبط با دستورالعمل‌های اسمبلی، به شکل FILENAME:LINENUMBER:CONTENT OF LINE، .IP * 4 اشاراتی در این مورد که کدام عبارت‌های سطح بالا با عملوندهای مختلف دستورالعمل اسمبلی مطابقت دارند. .RE .RS 4 .Sp برای مثال، با در نظر گرفتن این فایل منبع C: .Sp .Vb 4 \& int test (int n) \& { \& int i; \& int total = 0; \& \& for (i = 0; i < n; i++) \& total += i * i; \& \& return total; \& } .Ve .Sp کامپایل به اسمبلی (x86_64) از طریق \fB\-S\fR و ارسال مستقیم نتیجه به stdout از طریق \fB\-o\fR \fB\-\fR .Sp .Vb 1 \& gcc \-S test.c \-fverbose\-asm \-Os \-o \- .Ve .Sp خروجی مشابه این را تولید می‌کند: .Sp .Vb 5 \& .file "test.c" \& # GNU C11 (GCC) version 7.0.0 20160809 (experimental) (x86_64\-pc\-linux\-gnu) \& [...snip...] \& # options passed: \& [...snip...] \& \& .text \& .globl test \& .type test, @function \& test: \& .LFB0: \& .cfi_startproc \& # test.c:4: int total = 0; \& xorl %eax, %eax # \& # test.c:6: for (i = 0; i < n; i++) \& xorl %edx, %edx # i \& .L2: \& # test.c:6: for (i = 0; i < n; i++) \& cmpl %edi, %edx # n, i \& jge .L5 #, \& # test.c:7: total += i * i; \& movl %edx, %ecx # i, tmp92 \& imull %edx, %ecx # i, tmp92 \& # test.c:6: for (i = 0; i < n; i++) \& incl %edx # i \& # test.c:7: total += i * i; \& addl %ecx, %eax # tmp92, \& jmp .L2 # \& .L5: \& # test.c:10: } \& ret \& .cfi_endproc \& .LFE0: \& .size test, .\-test \& .ident "GCC: (GNU) 7.0.0 20160809 (experimental)" \& .section .note.GNU\-stack,"",@progbits .Ve .Sp این توضیحات برای انسان‌ها در نظر گرفته شده‌اند نه ماشین‌ها، و بنابراین قالب دقیق توضیحات ممکن است تغییر کند. .RE .IP \fB\-frecord\-gcc\-switches\fR 4 .IX Item "-frecord-gcc-switches" این سوییچ باعث می‌شود خط فرمانی که برای فراخوانی کامپایلر استفاده شده است در فایل شیء در حال ساخت ضبط شود. این سوییچ فقط در برخی از مقاصد پیاده‌سازی شده است و قالب دقیق ضبط به مقصد و قالب فایل دودویی بستگی دارد، اما معمولاً به شکل بخشی حاوی متن ASCII است. این سوییچ با سوییچ \fB\-fverbose\-asm\fR مرتبط است، اما آن سوییچ اطلاعات را تنها به عنوان توضیح در فایل خروجی اسمبلی ثبت می‌کند و هرگز به فایل شیء نمی‌رسد. همچنین برای روش دیگری جهت ذخیره گزینه‌های کامپایلر در فایل شیء، \fB\-grecord\-gcc\-switches\fR را ببینید. .IP \fB\-fpic\fR 4 .IX Item "-fpic" در صورت پشتیبانی در ماشین مقصد، کد مستقل از موقعیت (PIC) مناسب برای استفاده در یک کتابخانه اشتراکی تولید می‌کند. چنین کدی به تمام آدرس‌های ثابت از طریق جدول آفست سراسری (GOT) دسترسی پیدا می‌کند. بارگذار پویا مدخل‌های GOT را هنگام شروع برنامه برطرف می‌کند (بارگذار پویا بخشی از GCC نیست؛ بلکه بخشی از سیستم‌عامل است). اگر اندازه GOT برای فایل اجرایی پیوند داده شده از حداکثر اندازه خاصِ آن ماشین فراتر رود، پیامی خطا از پیونددهنده دریافت می‌کنید مبنی بر اینکه \&\fB\-fpic\fR کار نمی‌کند؛ در این صورت، به جای آن با \fB\-fPIC\fR مجدداً کامپایل کنید. (این مقادیر بیشینه در SPARC برابر با 8k، در AArch64 برابر با 28k و در m68k و RS/6000 برابر با 32k است. معماری x86 چنین محدودیتی ندارد.) .Sp کد مستقل از موقعیت نیازمند پشتیبانی ویژه است و بنابراین فقط در ماشین‌های خاصی کار می‌کند. برای x86، کامپایلر GCC از PIC برای System V پشتیبانی می‌کند اما برای Sun 386i خیر. کد تولید شده برای IBM RS/6000 همیشه مستقل از موقعیت است. .Sp هنگامی که این پرچم تنظیم شود، ماکروهای \f(CW\*(C`_\|_pic_\|_\*(C'\fR و \f(CW\*(C`_\|_PIC_\|_\*(C'\fR به مقدار 1 تعریف می‌شوند. .IP \fB\-fPIC\fR 4 .IX Item "-fPIC" در صورت پشتیبانی برای ماشین مقصد، کد مستقل از موقعیت تولید می‌کند که برای پیوند پویا مناسب است و از هرگونه محدودیت روی اندازه جدول آفست سراسری جلوگیری می‌کند. این گزینه در AArch64، m68k، PowerPC و SPARC تفاوت ایجاد می‌کند. .Sp کد مستقل از موقعیت نیازمند پشتیبانی ویژه است و بنابراین فقط در ماشین‌های خاصی کار می‌کند. .Sp هنگامی که این پرچم تنظیم شود، ماکروهای \f(CW\*(C`_\|_pic_\|_\*(C'\fR و \f(CW\*(C`_\|_PIC_\|_\*(C'\fR به مقدار 2 تعریف می‌شوند..IP \fB\-fpie\fR 4 .IX Item "-fpie" .PD 0 .IP \fB\-fPIE\fR 4 .IX Item "-fPIE" .PD این گزینه‌ها مشابه \fB\-fpic\fR و \fB\-fPIC\fR هستند، اما کد مستقل از موقعیت تولیدشده تنها می‌تواند درون فایل‌های اجرایی پیوند داده شود. معمولاً از این گزینه‌ها برای کامپایل کدی استفاده می‌شود که قرار است با استفاده از گزینهٔ \fB\-pie\fR در GCC پیوند داده شود. .Sp هر دو گزینهٔ \fB\-fpie\fR و \fB\-fPIE\fR ماکروهای \&\f(CW\*(C`_\|_pie_\|_\*(C'\fR و \f(CW\*(C`_\|_PIE_\|_\*(C'\fR را تعریف می‌کنند. مقدار این ماکروها برای \fB\-fpie\fR برابر با ۱ و برای \fB\-fPIE\fR برابر با ۲ است. .IP \fB\-fno\-plt\fR 4 .IX Item "-fno-plt" از PLT برای فراخوانی توابع خارجی در کد مستقل از موقعیت استفاده نکن. در عوض، آدرس تابع فراخوانی‌شده را در محل‌های فراخوانی از GOT بارگذاری کرده و به آن انشعاب بده. این کار با حذف رابط‌های (stubs) PLT و در دسترس قرار دادن بارگذاری‌های GOT برای بهینه‌سازی، منجر به کدی کارآمدتر می‌شود. در معماری‌هایی مانند x86 ۳۲\-بیتی که در آن‌ها رابط‌های PLT انتظار اشاره‌گر GOT را در یک ثبات خاص دارند، این کار آزادی عمل بیشتری در تخصیص ثبات به کامپایلر می‌دهد. اتصال دیرهنگام (Lazy binding) نیازمند استفاده از PLT است؛ با \fB\-fno\-plt\fR تمام نمادهای خارجی در زمان بارگذاری حل‌وفصل می‌شوند. .Sp همچنین، می‌توان از صفت تابع \f(CW\*(C`noplt\*(C'\fR برای جلوگیری از فراخوانی توابع خارجی خاص از طریق PLT استفاده کرد. .Sp در کدهای وابسته به موقعیت، برخی از معماری‌های مقصد نیز فراخوانی توابعی را که برای عدم استفاده از PLT نشانه‌گذاری شده‌اند، به استفاده از GOT تبدیل می‌کنند. .IP \fB\-fno\-jump\-tables\fR 4 .IX Item "-fno-jump-tables" از جدول‌های پرش برای دستورهای 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]" بدون تعیین یک مقدار، تمام اعضای ساختار را بدون هیچ فضای خالی در کنار هم بسته‌بندی (pack) می‌کند. در صورت تعیین یک مقدار (که باید توان کوچکی از دو باشد)، اعضای ساختار بر اساس این مقدار بسته‌بندی می‌شوند که نشان‌دهندهٔ حداکثر تراز است (بدین معنا که اشیایی با نیازمندی‌های تراز پیش‌فرض بزرگ‌تر از این، ممکن است در محل مناسب بعدی بدون تراز خروجی داده شوند). .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" برای مقصدهایی که معمولاً برای توابع تودرتو به ترامپولین نیاز دارند، همواره آن‌ها را تولید کن و از توصیف‌گرها (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 Linux. \fIلطفاً توجه داشته باشید\fR: اگر از \&\f(CW\*(C`setjmp\*(C'\fR استفاده کنید، توابع تودرتو را نمونه‌سازی نمایید و سپس با \f(CW\*(C`longjmp\*(C'\fR به وضعیتی قبل از تخصیص آن توابع تودرتو بازگردید، تضمینی وجود \fIندارد\fR که ترامپولین‌های هیپ به‌درستی آزاد شوند. .IP \fB\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] 4 .IX Item "-fvisibility=[default|internal|hidden|protected]" دیداری‌پذیری پیش‌فرض نمادهای تصویر ELF را روی گزینهٔ مشخص‌شده تنظیم می‌کند\-\-\-تمام نمادها با این مشخصه نشانه‌گذاری می‌شوند مگر اینکه درون کد به شکل دیگری لغو شده باشند. استفاده از این ویژگی می‌تواند زمان پیوند و بارگذاری کتابخانه‌های شیء مشترک را به طور چشمگیری بهبود بخشد، کد بهینه‌تری تولید کند، خروجی واسط برنامه‌نویسی (API) تقریباً بی‌نقصی فراهم سازد و از تداخل نمادها جلوگیری کند. \fBاکیداً\fR توصیه می‌شود که از این گزینه در تمامی اشیاء مشترکی که توزیع می‌کنید استفاده نمایید. .Sp با وجود نام‌گذاری، \fBdefault\fR همیشه به معنی عمومی (public) است؛ یعنی می‌توان از خارج از شیء مشترک به آن پیوند داد. گزینه‌های \&\fBprotected\fR و \fBinternal\fR در عمل تقریباً بی‌استفاده هستند، بنابراین تنها گزینهٔ متداول دیگر \fBhidden\fR است. پیش‌فرض در صورت مشخص نشدن \fB\-fvisibility\fR برابر با \&\fBdefault\fR است، یعنی عمومی قرار دادن تمامی نمادها. .Sp توضیح خوبی دربارهٔ مزایای اطمینان از داشتن دیداری‌پذیری صحیح در نمادهای ELF در مقالهٔ «How To Write Shared Libraries» نوشتهٔ Ulrich Drepper (قابل دسترسی در <\fBhttps://www.akkadia.org/drepper\fR>) آمده است\-\-\-با این حال، راهکار برتری که به کمک این گزینه در برابر حالت پنهان‌سازی دستی در وضعیت پیش‌فرض عمومی فراهم شده، این است که پیش‌فرض را hidden قرار داده و موارد لازم را به عنوان public نشانه‌گذاری کنید. این روش، قاعدهٔ استاندارد DLLها در Windows است و با \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 آگاه باشید که هدرهای خارج از پروژهٔ شما، به‌ویژه هدرهای سیستمی و هدرهای سایر کتابخانه‌هایی که استفاده می‌کنید، ممکن است انتظار کامپایل با دیداری‌پذیری دیگری به جز default را نداشته باشند. ممکن است نیاز باشد پیش از درج هر یک از این هدرها، صریحاً عبارت \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) که قرار است بین 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" این گزینه باید زمانی استفاده شود که دسترسی به میدان‌های بیتی (bit-fields) از نوع volatile (یا دیگر فیلدهای ساختار، اگرچه کامپایلر معمولاً در هر حال به آن نوع‌ها احترام می‌گذارد) نیازمند یک دسترسی منفرد با پهنای نوع فیلد باشد، که در صورت امکان با تراز طبیعی (natural alignment) تراز شده است. برای مثال، پردازنده‌های مقصد با ثبات‌های جانبی نگاشت‌شده در حافظه (memory-mapped peripheral registers) ممکن است به دسترسی‌های دقیقاً ۱۶ بیتی نیاز داشته باشند؛ با این پرچم می‌توانید تمام فیلدهای بیتی جانبی را به‌صورت \f(CW\*(C`unsigned short\*(C'\fR تعریف کنید (با فرض اینکه short در این مقاصد ۱۶ بیتی است) تا GCC مجبور شود به‌جای یک دسترسی احتمالاً کارآمدتر ۳۲ بیتی، از دسترسی‌های ۱۶ بیتی استفاده کند. .Sp اگر این گزینه غیرفعال باشد، کامپایلر از کارآمدترین دستورالعمل استفاده می‌کند. در مثال پیشین، این ممکن است یک دستور بارگذاری (load) ۳۲ بیتی باشد، حتی اگر به بایت‌هایی دسترسی یابد که شامل هیچ بخشی از فیلد بیتی نیستند، یا به ثبات‌های نگاشت‌شده در حافظه‌ای دسترسی پیدا کند که ارتباطی با ثبات در حال به‌روزرسانی ندارند. .Sp در برخی موارد، مانند زمانی که مشخصهٔ \f(CW\*(C`packed\*(C'\fR به یک فیلد ساختار اعمال شده است، ممکن است دسترسی به فیلد با یک خواندن یا نوشتن منفرد که به‌درستی برای ماشین مقصد تراز شده باشد امکان‌پذیر نباشد. در این حالت، GCC به‌جای تولید کدی که در زمان اجرا دچار خطا (fault) شود یا نتیجه را ناقص (truncate) کند، به تولید چندین دسترسی متوسل می‌شود. .Sp نکته: با توجه به محدودیت‌های مدل حافظهٔ C/C++11، دسترسی‌های نوشتن مجاز به دستکاری اعضای غیر فیلد بیتی نیستند. بنابراین توصیه می‌شود تمام بیت‌های نوعِ فیلد را به‌صورت اعضای فیلد بیتی تعریف کنید. .Sp مقدار پیش‌فرض این گزینه توسط واسط دودویی برنامه (ABI) پردازندهٔ مقصد تعیین می‌شود. .IP \fB\-fsync\-libcalls\fR 4 .IX Item "-fsync-libcalls" این گزینه مشخص می‌کند که آیا نمونه‌های برون‌خط (out-of-line) خانواده توابع \f(CW\*(C`_\|_sync\*(C'\fR مجاز به استفاده برای پیاده‌سازی خانواده توابع \f(CW\*(C`_\|_atomic\*(C'\fR در C++11 هستند یا خیر. .Sp مقدار پیش‌فرض این گزینه فعال است، از این رو تنها شکل کاربردی آن \fB\-fno\-sync\-libcalls\fR است. این گزینه در پیاده‌سازی کتابخانهٔ زمان اجرای \fIlibatomic\fR به کار می‌رود. .IP \fB\-fzero\-init\-padding\-bits=\fR\fIvalue\fR 4 .IX Item "-fzero-init-padding-bits=value" صفر شدن بیت‌های فاصله‌ساز (padding bits) را در مقداردهنده‌های اولیهٔ متغیرهای خودکار تضمین می‌کند. برخی زبان‌ها در موارد خاصی صفر شدن بیت‌های فاصله‌ساز را تضمین می‌کنند؛ برای نمونه C23 هنگام استفاده از مقداردهنده‌های خالی (\f(CW\*(C`{}\*(C'\fR)، یا C++ هنگام استفاده از مقداردهی اولیه با صفر، یا زبان C تضمین می‌کند فیلدهایی که در یک مقداردهنده مشخص نشده‌اند، بیت‌های فاصله‌ساز آن‌ها با صفر مقداردهی اولیه شوند. این گزینه امکان تغییر زمان تضمین صفر شدن بیت‌های فاصله‌ساز در مقداردهنده‌ها را فراهم می‌آورد. مقدار پیش‌فرض \f(CW\*(C`\-fzero\-init\-padding\-bits=standard\*(C'\fR است که هیچ تضمین اضافه دیگری فراتر از استاندارد مربوطه ارائه نمی‌دهد. برای مثال: .Sp .Vb 6 \& struct A { char a; unsigned long long b; char c; }; \& union B { char a; unsigned long long b; }; \& struct A a = {}; // C23 guarantees padding bits are zero. \& struct A b = { 1, 2, 3 }; // No guarantees. \& union B c = {}; // C23 guarantees padding bits are zero. \& union B d = { 1 }; // No guarantees. .Ve .Sp \&\f(CW\*(C`\-fzero\-init\-padding\-bits=unions\*(C'\fR علاوه‌بر تضمین‌های استاندارد، صفر شدن بیت‌های فاصله‌ساز را در اجتماع‌ها (unions) تضمین می‌کند، در صورتی که مقداردهندهٔ اولیهٔ یک اجتماع خالی باشد (در این صورت تمام بیت‌های اجتماع با صفر مقداردهی می‌شوند) یا اگر عضو مقداردهی‌شدهٔ اجتماع کوچک‌تر از اندازهٔ اجتماع باشد (در این حالت تضمین می‌کند بیت‌های فاصله‌ساز خارج از عضو مقداردهی‌شده با صفر مقداردهی شوند). این رفتار پیش‌فرض GCC پیش از نگارش GCC 15 بود و در مثال بالا، صفر شدن آخرین بایت‌های \f(CW\*(C`sizeof (unsigned long long) \- 1\*(C'\fR را در اجتماع تضمین می‌کند. .Sp \&\f(CW\*(C`\-fzero\-init\-padding\-bits=all\*(C'\fR افزون بر این، صفر شدن بیت‌های فاصله‌ساز سایر داده‌های تجمیعی (aggregates) را تضمین می‌کند؛ بنابراین فاصله‌گذاری بین \f(CW\*(C`b.a\*(C'\fR و \f(CW\*(C`b.b\*(C'\fR (در صورت وجود) و فاصله‌گذاری پایانی در ساختار (در صورت وجود) با صفر مقداردهی خواهند شد. .SS "گزینه‌های توسعه‌دهندگان GCC" .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)، حرف فاز و نام گذر ساخته می‌شود. نام پایهٔ فایل تخلیه در صورتی که به‌طور صریح مشخص شده باشد و فایل اجرایی نباشد، نام فایل خروجی تولیدشده توسط کامپایلر است؛ در غیر این صورت نام فایل مبدأ خواهد بود. شمارهٔ گذر بر اساس ترتیبی که گذرها در مدیر گذرهای کامپایلر ثبت می‌شوند تعیین می‌گردد. این ترتیب عموماً با ترتیب اجرا یکسان است، اما گذرهای ثبت‌شده توسط افزونه‌ها، گذرهای خاص معماری مقصد، یا گذرهایی که دیرتر ثبت شده‌اند، شماره‌ای بالاتر از گذر موسوم به \&\fBfinal\fR دریافت می‌کنند، حتی اگر زودتر اجرا شوند. حرف فاز یکی از موارد \fBi\fR (تحلیل بین‌رویه‌ای یا inter-procedural)، \fBl\fR (خاص زبان)، \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). این گذر تنها روی معماری‌هایی اجرا می‌شود که دستورالعمل‌های افزایش یا کاهش خودکار دارند. .IP \fB\-fdump\-rtl\-barriers\fR 4 .IX Item "-fdump-rtl-barriers" تخلیه پس از پاکسازی دستورالعمل‌های سد (barrier instructions). .IP \fB\-fdump\-rtl\-bbpart\fR 4 .IX Item "-fdump-rtl-bbpart" تخلیه پس از بخش‌بندی بلوک‌های پایه به بخش‌های پرکاربرد (hot) و کم‌کاربرد (cold). .IP \fB\-fdump\-rtl\-bbro\fR 4 .IX Item "-fdump-rtl-bbro" تخلیه پس از بازترتیب‌دهی بلوک‌ها (block reordering). .IP \fB\-fdump\-rtl\-btl1\fR 4 .IX Item "-fdump-rtl-btl1" .PD 0 .IP \fB\-fdump\-rtl\-btl2\fR 4 .IX Item "-fdump-rtl-btl2" .PD گزینه‌های \&\fB\-fdump\-rtl\-btl1\fR و \fB\-fdump\-rtl\-btl2\fR تخلیه را پس از دو گذر بهینه‌سازی بارگذاری مقصد انشعاب (branch target load) فعال می‌کنند. .IP \fB\-fdump\-rtl\-bypass\fR 4 .IX Item "-fdump-rtl-bypass" تخلیه پس از میان‌بُر زدن پرش‌ها و بهینه‌سازی‌های جریان کنترل. .IP \fB\-fdump\-rtl\-combine\fR 4 .IX Item "-fdump-rtl-combine" تخلیه پس از گذر ترکیب دستورالعمل‌های RTL. .IP \fB\-fdump\-rtl\-compgotos\fR 4 .IX Item "-fdump-rtl-compgotos" تخلیه پس از تکثیر gotoهای محاسباتی (computed gotos). .IP \fB\-fdump\-rtl\-ce1\fR 4 .IX Item "-fdump-rtl-ce1" .PD 0 .IP \fB\-fdump\-rtl\-ce2\fR 4 .IX Item "-fdump-rtl-ce2" .IP \fB\-fdump\-rtl\-ce3\fR 4 .IX Item "-fdump-rtl-ce3" .PD گزینه‌های \&\fB\-fdump\-rtl\-ce1\fR، \fB\-fdump\-rtl\-ce2\fR و \&\fB\-fdump\-rtl\-ce3\fR تخلیه را پس از سه گذر تبدیل if (if-conversion) فعال می‌کنند. .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" تخلیه پس از ادغام تنظیمات پشته (combining stack adjustments). .IP \fB\-fdump\-rtl\-cse1\fR 4 .IX Item "-fdump-rtl-cse1" .PD 0.IP \fB\-fdump\-rtl\-cse2\fR 4 .IX Item "-fdump-rtl-cse2" .PD \&\fB\-fdump\-rtl\-cse1\fR و \fB\-fdump\-rtl\-cse2\fR برون‌ریزی پس از دو گذر حذف زیرعبارت‌های مشترک را فعال می‌کنند. .IP \fB\-fdump\-rtl\-dce\fR 4 .IX Item "-fdump-rtl-dce" برون‌ریزی پس از گذرهای مستقل حذف کد مرده. .IP \fB\-fdump\-rtl\-dbr\fR 4 .IX Item "-fdump-rtl-dbr" برون‌ریزی پس از زمان‌بندی پرش با تأخیر. .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 برون‌ریزی پس از دو گذر حذف ذخیره‌سازی‌های مرده را فعال می‌کنند. .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 برون‌ریزی پس از دو گذر انتشار رو به جلو را فعال می‌کنند. .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" برون‌ریزی پس از تولید مقدمه و مؤخره‌های تابع. .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" برون‌ریزی پس از حذف گسترش علامت/صفر. .IP \fB\-fdump\-rtl\-seqabstr\fR 4 .IX Item "-fdump-rtl-seqabstr" برون‌ریزی پس از کشف توالی‌های مشترک. .IP \fB\-fdump\-rtl\-shorten\fR 4 .IX Item "-fdump-rtl-shorten" برون‌ریزی پس از کوتاه‌سازی پرش‌ها. .IP \fB\-fdump\-rtl\-split1\fR 4 .IX Item "-fdump-rtl-split1" .PD 0 .IP \fB\-fdump\-rtl\-split2\fR 4 .IX Item "-fdump-rtl-split2" .IP \fB\-fdump\-rtl\-split3\fR 4 .IX Item "-fdump-rtl-split3" .IP \fB\-fdump\-rtl\-split4\fR 4 .IX Item "-fdump-rtl-split4" .IP \fB\-fdump\-rtl\-split5\fR 4 .IX Item "-fdump-rtl-split5" .PD این گزینه‌ها برون‌ریزی پس از پنج دور تفکیک دستورالعمل‌ها را فعال می‌کنند. .IP \fB\-fdump\-rtl\-sms\fR 4 .IX Item "-fdump-rtl-sms" برون‌ریزی پس از زمان‌بندی پیمانه‌ای (modulo scheduling). این گذر فقط روی برخی از معماری‌ها اجرا می‌شود. .IP \fB\-fdump\-rtl\-stack\fR 4 .IX Item "-fdump-rtl-stack" برون‌ریزی پس از تبدیل از ثبات‌های «پروندهٔ ثبات مسطح» GCC به ثبات‌های پشته‌مانند x87. این گذر تنها روی گونه‌های x86 اجرا می‌شود. .IP \fB\-fdump\-rtl\-subreg1\fR 4 .IX Item "-fdump-rtl-subreg1" .PD 0 .IP \fB\-fdump\-rtl\-subreg2\fR 4 .IX Item "-fdump-rtl-subreg2" .PD \&\fB\-fdump\-rtl\-subreg1\fR و \fB\-fdump\-rtl\-subreg2\fR برون‌ریزی پس از دو گذر گسترش subreg را فعال می‌کنند. .IP \fB\-fdump\-rtl\-vartrack\fR 4 .IX Item "-fdump-rtl-vartrack" برون‌ریزی پس از ردگیری متغیرها. .IP \fB\-fdump\-rtl\-vregs\fR 4 .IX Item "-fdump-rtl-vregs" برون‌ریزی پس از تبدیل ثبات‌های مجازی به ثبات‌های سخت‌افزاری. .IP \fB\-fdump\-rtl\-web\fR 4 .IX Item "-fdump-rtl-web" برون‌ریزی پس از تفکیک بازهٔ حیات. .IP \fB\-fdump\-rtl\-regclass\fR 4 .IX Item "-fdump-rtl-regclass" .PD 0 .IP \fB\-fdump\-rtl\-subregs_of_mode_init\fR 4 .IX Item "-fdump-rtl-subregs_of_mode_init" .IP \fB\-fdump\-rtl\-subregs_of_mode_finish\fR 4 .IX Item "-fdump-rtl-subregs_of_mode_finish" .IP \fB\-fdump\-rtl\-dfinit\fR 4 .IX Item "-fdump-rtl-dfinit" .IP \fB\-fdump\-rtl\-dfinish\fR 4 .IX Item "-fdump-rtl-dfinish" .PD این برون‌ریزی‌ها تعریف شده‌اند اما همیشه فایل‌های خالی تولید می‌کنند. .IP \fB\-da\fR 4 .IX Item "-da" .PD 0 .IP \fB\-fdump\-rtl\-all\fR 4 .IX Item "-fdump-rtl-all" .PD تولید تمامی برون‌ریزی‌های فهرست‌شده در بالا. .IP \fB\-dA\fR 4 .IX Item "-dA" حاشیه‌نویسی خروجی اسمبلر با اطلاعات گوناگون اشکال‌زدایی. .IP \fB\-dD\fR 4 .IX Item "-dD" برون‌ریزی تمامی تعاریف ماکرو در پایان پیش‌پردازش، علاوه بر خروجی عادی. .IP \fB\-dH\fR 4 .IX Item "-dH" تولید یک core dump هر زمان که خطایی رخ دهد. .IP \fB\-dp\fR 4 .IX Item "-dp" حاشیه‌نویسی خروجی اسمبلر با یادداشتی که نشان می‌دهد کدام الگو و جایگزین استفاده شده است. طول و هزینهٔ هر دستورالعمل نیز چاپ می‌شود. .IP \fB\-dP\fR 4 .IX Item "-dP" برون‌ریزی RTL در خروجی اسمبلر به‌صورت یادداشت پیش از هر دستورالعمل. همچنین حاشیه‌نویسی \fB\-dp\fR را فعال می‌کند. .IP \fB\-dx\fR 4 .IX Item "-dx" صرفاً تولید RTL برای یک تابع به جای کامپایل کردن آن. معمولاً همراه با \fB\-fdump\-rtl\-expand\fR استفاده می‌شود. .RE .RS 4 .RE .IP \fB\-fdump\-debug\fR 4 .IX Item "-fdump-debug" برون‌ریزی اطلاعات اشکال‌زدایی تولیدشده در طول فاز تولید اشکال‌زدایی. .IP \fB\-fdump\-earlydebug\fR 4 .IX Item "-fdump-earlydebug" برون‌ریزی اطلاعات اشکال‌زدایی تولیدشده در طول فاز اولیهٔ تولید اشکال‌زدایی. .IP \fB\-fdump\-noaddr\fR 4 .IX Item "-fdump-noaddr" هنگام انجام برون‌ریزی‌های اشکال‌زدایی، خروجی نشانی‌ها را حذف می‌کند. این کار استفاده از diff را روی برون‌ریزی‌های اشکال‌زدایی برای فراخوانی‌های کامپایلر با باینری‌های کامپایلر متفاوت و/یا مکان‌های شروع دگرگون text / bss / data / heap / stack / dso میسرتر می‌سازد..IP \fB\-freport\-bug\fR 4 .IX Item "-freport-bug" جمع‌آوری و تخلیه اطلاعات اشکال‌زدایی در یک فایل موقت در صورت وقوع یک خطای داخلی کامپایلر (ICE). .IP \fB\-fdump\-unnumbered\fR 4 .IX Item "-fdump-unnumbered" هنگام انجام تخلیه‌های اشکال‌زدایی، از نمایش شماره دستورالعمل‌ها و خروجی آدرس‌ها جلوگیری می‌کند. این کار استفاده از diff را برای مقایسه تخلیه‌های اشکال‌زدایی در فراخوانی‌های کامپایلر با گزینه‌های متفاوت، به‌ویژه با و بدون \&\fB\-g\fR، عملی‌تر می‌سازد. .IP \fB\-fdump\-unnumbered\-links\fR 4 .IX Item "-fdump-unnumbered-links" هنگام انجام تخلیه‌های اشکال‌زدایی (گزینه \fB\-d\fR در بالا را ببینید)، شماره دستورالعمل‌ها را برای پیوندهای مربوط به دستورالعمل‌های قبلی و بعدی در یک دنباله حذف می‌کند. .IP \fB\-fdump\-ipa\-\fR\fIswitch\fR 4 .IX Item "-fdump-ipa-switch" .PD 0 .IP \fB\-fdump\-ipa\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4 .IX Item "-fdump-ipa-switch-options" .PD کنترل تخلیه درخت زبان تحلیل میان‌روالی (inter\-procedural analysis) در مراحل مختلف به یک فایل. نام فایل با افزودن یک پسوند مشخص برای هر switch به انتهای نام فایل منبع ایجاد می‌شود و فایل در همان دایرکتوریِ فایل خروجی ساخته می‌شود. تخلیه‌های زیر امکان‌پذیر هستند: .RS 4 .IP \fBall\fR 4 .IX Item "all" تمام تخلیه‌های تحلیل میان‌روالی را فعال می‌کند. .IP \fBcgraph\fR 4 .IX Item "cgraph" اطلاعات مربوط به بهینه‌سازی گراف فراخوانی (call\-graph)، حذف توابع استفاده‌نشده و تصمیمات مربوط به درون‌خط‌سازی (inlining) را تخلیه می‌کند. .IP \fBinline\fR 4 .IX Item "inline" تخلیه پس از درون‌خط‌سازی توابع. .IP \fBstrubm\fR 4 .IX Item "strubm" تخلیه پس از انتخاب حالت‌های \f(CW\*(C`strub\*(C'\fR و ثبت این انتخاب‌ها به عنوان ویژگی‌های تابع. .IP \fBstrub\fR 4 .IX Item "strub" تخلیه تبدیلات \f(CW\*(C`strub\*(C'\fR: تغییرات واسط (interface)، پوشش تابع (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." عددی که تابع در حال کلون‌شدن را به‌صورت یکتا در گراف فراخوانی مشخص می‌کند. توجه داشته باشید که این عدد فقط در یک واحد کامپایل یا در تحلیل کل برنامه (whole\-program analysis) یکتا است، اما احتمالاً در این دو مرحله متفاوت خواهد بود. .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" تخلیه اطلاعات سلسله‌مراتب کلاس‌ها. اطلاعات جدول مجازی منتشر می‌شود مگر اینکه \*(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" چاپ فهرست گذرهای بهینه‌سازی (optimization passes) فعال و غیرفعال‌شده توسط گزینه‌های خط فرمان فعلی در \fIstderr\fR. .IP \fB\-fdump\-statistics\-\fR\fIoption\fR 4 .IX Item "-fdump-statistics-option" فعال‌سازی و کنترل تخلیه آمارهای مربوط به گذرها در یک فایل جداگانه. نام فایل با افزودن پسوندی که به \&\fB.statistics\fR ختم می‌شود به انتهای نام فایل منبع ایجاد می‌گردد و فایل در همان دایرکتوریِ فایل خروجی ساخته می‌شود. اگر از ساختار \fB\-\fR\fIoption\fR استفاده شود، \fB\-stats\fR باعث جمع‌بندی شمارنده‌ها در کل واحد کامپایل می‌شود، در حالی که \fB\-details\fR هر رویداد را به محض تولید توسط گذرها تخلیه می‌کند. حالت پیش‌فرض بدون هیچ گزینه‌ای، جمع‌بندی شمارنده‌ها برای هر تابع کامپایل‌شده است. .IP \fB\-fdump\-tree\-all\fR 4 .IX Item "-fdump-tree-all" .PD 0.IP \fB\-fdump\-tree\-\fR\fIswitch\fR 4 .IX Item "-fdump-tree-switch" .IP \fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4 .IX Item "-fdump-tree-switch-options" .IP \fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4 .IX Item "-fdump-tree-switch-options=filename" .PD کنترل تخلیه (dumping) درخت زبان میانی به یک فایل در مراحل گوناگون پردازش. اگر از قالب \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) در فایل اسمبلی است. .IP \fBslim\fR 4 .IX Item "slim" هنگام تخلیه بازنمایی‌های میانی فرانت‌اند، از تخلیه اعضای یک حوزه (scope) یا بدنه یک تابع، صرفاً به این دلیل که به آن حوزه رسیده است، جلوگیری می‌کند. چنین مواردی را تنها زمانی تخلیه می‌کند که مستقیماً از طریق مسیر دیگری قابل دسترسی باشند. .Sp هنگام تخلیه درخت‌های فرمت‌بندی‌شده (pretty\-printed)، این گزینه از تخلیه بدنه ساختارهای کنترلی جلوگیری می‌کند. .Sp هنگام تخلیه RTL، بازنمایی RTL را به فرم فشرده (slim) به جای بازنمایی پیش‌فرض شبه-LISP چاپ می‌کند. .IP \fBraw\fR 4 .IX Item "raw" چاپ یک بازنمایی خام (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" فعال‌سازی نمایش مرزهای بلوک پایه‌ای (در تخلیه‌های raw غیرفعال است). .IP \fBgraph\fR 4 .IX Item "graph" برای هر یک از فایل‌های تخلیه مشخص شده دیگر (\fB\-fdump\-rtl\-\fR\fIpass\fR)، یک بازنمایی از نمودار جریان کنترل (CFG) مناسب برای مشاهده با GraphViz را در \fIfile.passid.pass.dot\fR تخلیه می‌کند. هر تابع در فایل به صورت یک زیرنمودار قالب‌بندی می‌شود تا GraphViz بتواند همه آنها را در یک طرح واحد رسم کند. .Sp این گزینه در حال حاضر فقط برای تخلیه‌های RTL کار می‌کند، و RTL همواره به فرم فشرده (slim) تخلیه می‌شود. .IP \fBvops\fR 4 .IX Item "vops" فعال‌سازی نمایش عملوندهای مجازی (virtual operands) برای هر عبارت. .IP \fBlineno\fR 4 .IX Item "lineno" فعال‌سازی نمایش شماره خطوط برای عبارت‌ها. .IP \fBuid\fR 4 .IX Item "uid" فعال‌سازی نمایش شناسه یکتا (\f(CW\*(C`DECL_UID\*(C'\fR) برای هر متغیر. .IP \fBverbose\fR 4 .IX Item "verbose" فعال‌سازی نمایش تخلیه درخت برای هر عبارت. .IP \fBeh\fR 4 .IX Item "eh" فعال‌سازی نمایش شماره ناحیه EH (مدیریت استثنا) حاوی هر عبارت. .IP \fBscev\fR 4 .IX Item "scev" فعال‌سازی نمایش جزئیات تحلیل تکامل نرده‌ای (scalar evolution). .IP \fBoptimized\fR 4 .IX Item "optimized" فعال‌سازی نمایش اطلاعات بهینه‌سازی (فقط در گذرهای معینی در دسترس است). .IP \fBmissed\fR 4 .IX Item "missed" فعال‌سازی نمایش اطلاعات بهینه‌سازی‌های انجام‌نشده و ازدست‌رفته (فقط در گذرهای معینی در دسترس است). .IP \fBnote\fR 4 .IX Item "note" فعال‌سازی سایر اطلاعات با جزئیات بهینه‌سازی (فقط در گذرهای معینی در دسترس است). .IP \fBall\fR 4 .IX Item "all" روشن کردن همه گزینه‌ها، به جز \fBraw\fR، \fBslim\fR، \fBverbose\fR و \fBlineno\fR. .IP \fBoptall\fR 4 .IX Item "optall" روشن کردن همه گزینه‌های بهینه‌سازی، یعنی \fBoptimized\fR، \&\fBmissed\fR، و \fBnote\fR. .RE .RS 4 .Sp برای تعیین این که چه تخلیه‌های درختی موجود هستند یا یافتن تخلیه برای یک گذر مورد نظر، مراحل زیر را دنبال کنید: .IP 1. 4 .IX Item "1." دستور GCC را با \fB\-fdump\-passes\fR اجرا کرده و در خروجی \fIstderr\fR به دنبال کدی بگردید که متناظر با گذر مورد نظر شما است. برای نمونه، کدهای \f(CW\*(C`tree\-evrp\*(C'\fR، \f(CW\*(C`tree\-vrp1\*(C'\fR، و \&\f(CW\*(C`tree\-vrp2\*(C'\fR متناظر با سه گذر انتشار محدوده مقدار (Value Range Propagation) هستند. عدد انتهای نام، فراخوانی‌های متمایز از همان گذر را مشخص می‌کند. .IP 2. 4 .IX Item "2." برای فعال‌سازی ایجاد فایل تخلیه، کد گذر را به پیشوند گزینه \fB\-fdump\-\fR ضمیمه کرده و GCC را با آن اجرا کنید. برای نمونه، برای فعال‌سازی تخلیه از گذر Early Value Range Propagation، برنامه GCC را با گزینه \fB\-fdump\-tree\-evrp\fR اجرا کنید. به صورت اختیاری، می‌توانید نام فایل تخلیه را مشخص کنید. اگر نامی مشخص نکنید، GCC آن را همان‌طور که در زیر شرح داده شده ایجاد می‌کند. .IP 3. 4 .IX Item "3." تخلیه گذر را در فایلی بیابید که نام آن از سه بخش جدا شده با نقطه تشکیل شده است: نام فایل منبعی که GCC برای کامپایل آن فراخوانی شده بود، یک پسوند عددی نشان‌دهنده شماره گذر که پس از آن حرف \fBt\fR برای گذرهای درختی (و حرف \fBr\fR برای گذرهای RTL) می‌آید، و در نهایت کد گذر. برای نمونه، تخلیه گذر Early VRP ممکن است در فایلی به نام \fImyfile.c.038t.evrp\fR در دایرکتوری کاری فعلی قرار گیرد. توجه داشته باشید که کدهای عددی پایدار نیستند و ممکن است از یک نگارش GCC به نگارش دیگر تغییر کنند. .RE .RS 4 .RE .IP \fB\-fopt\-info\fR 4 .IX Item "-fopt-info" .PD 0 .IP \fB\-fopt\-info\-\fR\fIoptions\fR 4 .IX Item "-fopt-info-options" .IP \fB\-fopt\-info\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4 .IX Item "-fopt-info-options=filename" .PD تخلیه‌های بهینه‌سازی حاصل از گذرهای مختلف بهینه‌سازی را کنترل می‌کند. اگر از فرم \&\fB\-\fR\fIoptions\fR استفاده شود، \fIoptions\fR فهرستی از کلمات کلیدی گزینه جدا شده با \&\fB\-\fR برای انتخاب جزئیات تخلیه و بهینه‌سازی‌ها است. .Sp آرگومان \fIoptions\fR می‌تواند به سه گروه تقسیم شود: .RS 4 .IP 1. 4 .IX Item "1." گزینه‌هایی که بیان می‌کنند چه نوع پیام‌هایی باید صادر شوند، .IP 2. 4 .IX Item "2." گزینه‌هایی که میزان پرگویی (verbosity) تخلیه را مشخص می‌کنند، و .IP 3. 4 .IX Item "3." گزینه‌هایی که تعیین می‌کنند کدام بهینه‌سازی‌ها باید گنجانده شوند. .RE .RS 4 .Sp گزینه‌های هر گروه را می‌توان آزادانه با یکدیگر ترکیب کرد زیرا هم‌پوشانی ندارند. با این حال، در صورت بروز هرگونه تعارض، گزینه‌های پسین در خط فرمان بر گزینه‌های پیشین اولویت دارند. .Sp گزینه‌های زیر تعیین می‌کنند که چه نوع پیام‌هایی باید صادر شوند: .IP \fBoptimized\fR 4 .IX Item "optimized" چاپ اطلاعات هنگامی که یک بهینه‌سازی با موفقیت اعمال می‌شود. این بر عهده گذر است که تصمیم بگیرد کدام اطلاعات مرتبط هستند. برای نمونه، گذرهای بردارساز (vectorizer) مکان مبدأ حلقه‌هایی را که با موفقیت برداری شده‌اند چاپ می‌کنند. .IP \fBmissed\fR 4 .IX Item "missed" چاپ اطلاعات درباره بهینه‌سازی‌های انجام‌نشده و ازدست‌رفته. گذرهای مجزا کنترل می‌کنند که چه اطلاعاتی در خروجی گنجانده شود. .IP \fBnote\fR 4 .IX Item "note" چاپ اطلاعات پرگویی درباره بهینه‌سازی‌ها، مانند برخی تبدیلات، پیام‌های با جزئیات بیشتر درباره تصمیم‌گیری‌ها و غیره. .IP \fBall\fR 4 .IX Item "all" چاپ اطلاعات دقیق بهینه‌سازی. این گزینه شامل \&\fBoptimized\fR، \fBmissed\fR، و \fBnote\fR می‌شود. .RE .RS 4 .Sp گزینه زیر میزان پرگویی تخلیه را کنترل می‌کند: .IP \fBinternals\fR 4 .IX Item "internals" به طور پیش‌فرض، فقط پیام‌های «سطح بالا» صادر می‌شوند. این گزینه پیام‌های اضافی و با جزئیات بیشتر را فعال می‌کند، که احتمالاً فقط برای توسعه‌دهندگان GCC جالب توجه خواهد بود. .RE .RS 4 .Sp یک یا چند کلمه کلیدی از گزینه‌های زیر را می‌توان برای توصیف یک گروه از بهینه‌سازی‌ها استفاده کرد: .IP \fBipa\fR 4 .IX Item "ipa" فعال‌سازی تخلیه‌ها از تمامی بهینه‌سازی‌های میان‌روالی (interprocedural)..IP \fBloop\fR 4 .IX Item "loop" فعال‌سازی خروجی‌های تخلیه (dump) از تمامی بهینه‌سازی‌های حلقه. .IP \fBinline\fR 4 .IX Item "inline" فعال‌سازی خروجی‌های تخلیه از تمامی بهینه‌سازی‌های درون‌خطی‌سازی (inlining). .IP \fBomp\fR 4 .IX Item "omp" فعال‌سازی خروجی‌های تخلیه از تمامی بهینه‌سازی‌های OMP (تخلیه بار پردازشی و چندپردازشی). .IP \fBvec\fR 4 .IX Item "vec" فعال‌سازی خروجی‌های تخلیه از تمامی بهینه‌سازی‌های برداری‌سازی (vectorization). .IP \fBoptall\fR 4 .IX Item "optall" فعال‌سازی خروجی‌های تخلیه از تمامی بهینه‌سازی‌ها. این گزینه یک ابرمجموعه از گروه‌های بهینه‌سازی فهرست‌شده در بالا است. .RE .RS 4 .Sp اگر \fIoptions\fR حذف شود، مقدار پیش‌فرض آن \fBoptimized\-optall\fR خواهد بود، که به معنای تخلیهٔ پیام‌های مربوط به بهینه‌سازی‌های موفق از تمامی گذرها، با صرف‌نظر از پیام‌هایی است که به عنوان «مسائل داخلی» (internals) در نظر گرفته می‌شوند. .Sp اگر \fIfilename\fR مشخص شده باشد، خروجی‌های تخلیه از تمامی بهینه‌سازی‌های اعمال‌پذیر در یکدیگر ادغام شده و در \fIfilename\fR نوشته می‌شوند. در غیر این صورت، تخلیه در \fIstderr\fR خروجی داده می‌شود. اگرچه گزینه‌های متعدد \&\fB\-fopt\-info\fR پذیرفته می‌شوند، تنها یکی از آن‌ها می‌تواند شامل یک \fIfilename\fR باشد. اگر نام‌های فایل دیگری ارائه شوند، تمام گزینه‌های پس از نخستین مورد نادیده گرفته می‌شوند. .Sp توجه داشته باشید که در صورت وجود چندین واحد ترجمه (translation units)، فایل خروجی \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 «زنجیرهٔ درون‌خطی‌سازی» (inlining chain) برای کدی که در حال بهینه‌سازی است، به‌گونه‌ای که وقتی یک تابع در چندین مکان مختلف درون‌خطی می‌شود (که ممکن است خود آن‌ها نیز درون‌خطی شده باشند)، خواننده بتواند میان رونوشت‌ها تمایز قائل شود، .IP * 4 اشیایی که بخش‌هایی از پیام را که به عبارت‌ها (expressions)، دستورها (statements) یا گره‌های جدول نماد (symbol\-table nodes) ارجاع دارند، مشخص می‌کنند که به کدام‌یک از این دسته‌ها تعلق دارند، و در صورت دردسترس بودن، مکان آن‌ها در کد منبع را ارائه می‌دهند، .IP * 4 گذر GCC که پیام را صادر کرده است، و .IP * 4 مکانی در کد خود GCC که پیام از آنجا صادر شده است .RE .RS 4 .Sp علاوه بر این، برخی پیام‌ها به طور منطقی درون پیام‌های دیگر تودرتو (nested) شده‌اند، که بازتاب‌دهندهٔ جزئیات پیاده‌سازی گذرهای بهینه‌سازی است. .RE .IP \fB\-fsched\-verbose=\fR\fIn\fR 4 .IX Item "-fsched-verbose=n" در معماری‌های مقصدی که از زمان‌بندی دستورالعمل‌ها استفاده می‌کنند، این گزینه میزان خروجی اشکال‌زدایی را که زمان‌بند در فایل‌های تخلیه چاپ می‌کند، کنترل می‌نماید. .Sp برای \fIn\fR بزرگ‌تر از صفر، \fB\-fsched\-verbose\fR همان اطلاعات \fB\-fdump\-rtl\-sched1\fR و \fB\-fdump\-rtl\-sched2\fR را خروجی می‌دهد. برای \fIn\fR بزرگ‌تر از یک، احتمالات بلوک پایه (basic block)، اطلاعات تفصیلی فهرست آماده (ready list) و اطلاعات واحد/دستورالعمل (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 در سرآیند تابع در فایل تخلیه نشان داده می‌شود، و نام‌های گذر را می‌توان با استفاده از گزینهٔ \fB\-fdump\-passes\fR تخلیه کرد. .IP \fB\-fdisable\-tree\-\fR\fIpass\fR 4 .IX Item "-fdisable-tree-pass" .PD 0 .IP \fB\-fdisable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4 .IX Item "-fdisable-tree-pass=range-list" .PD غیرفعال کردن گذر درخت (tree pass) با نام \fIpass\fR. برای شرح آرگومان‌های گزینه، \fB\-fdisable\-rtl\fR را ببینید. .IP \fB\-fenable\-ipa\-\fR\fIpass\fR 4 .IX Item "-fenable-ipa-pass" فعال کردن گذر IPA با نام \fIpass\fR. آرگومان \fIpass\fR نام گذر است. اگر همان گذر به طور ایستا چندین بار در کامپایلر فراخوانی شود، باید یک شمارهٔ ترتیبی با شروع از ۱ به انتهای نام گذر افزوده شود. .IP \fB\-fenable\-rtl\-\fR\fIpass\fR 4 .IX Item "-fenable-rtl-pass" .PD 0 .IP \fB\-fenable\-rtl\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4 .IX Item "-fenable-rtl-pass=range-list" .PD فعال کردن گذر RTL با نام \fIpass\fR. برای شرح آرگومان‌های گزینه و مثال‌ها، \fB\-fdisable\-rtl\fR را ببینید. .IP \fB\-fenable\-tree\-\fR\fIpass\fR 4 .IX Item "-fenable-tree-pass" .PD 0 .IP \fB\-fenable\-tree\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR 4 .IX Item "-fenable-tree-pass=range-list" .PD فعال کردن گذر درخت (tree pass) با نام \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) و فایل‌های شیئی که آن‌ها را تولید می‌کنند، به کار می‌رود. می‌توانید از گزینه \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]" تخلیه (dump) بازنمایی داخلی نهایی (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 را به آرگومان‌های ارسالی به کامپایل دوم اضافه می‌کند. بازنمایی داخلی نهایی را در هر دو کامپایل تخلیه می‌کند، و در صورت مغایرت، خطایی چاپ می‌کند. .Sp اگر علامت مساوی حذف شود، مقدار پیش‌فرض \fB\-gtoggle\fR استفاده می‌شود. .Sp متغیر محیطی \fBGCC_COMPARE_DEBUG\fR، اگر تعریف شده، غیرخالی و غیرصفر باشد، به‌طور ضمنی \fB\-fcompare\-debug\fR را فعال می‌کند. اگر \&\fBGCC_COMPARE_DEBUG\fR به رشته‌ای که با یک خط تیره شروع می‌شود مقداردهی شود، آنگاه برای \fIopts\fR استفاده می‌شود، در غیر این صورت مقدار پیش‌فرض \fB\-gtoggle\fR به کار می‌رود. .Sp گزینه \&\fB\-fcompare\-debug=\fR، با علامت مساوی اما بدون \fIopts\fR، معادل \fB\-fno\-compare\-debug\fR است که تخلیه بازنمایی نهایی و کامپایل دوم را غیرفعال می‌کند و حتی مانع از اثرگذاری \&\fBGCC_COMPARE_DEBUG\fR می‌شود. .Sp برای بررسی پوشش کامل در حین آزمایش \fB\-fcompare\-debug\fR، مقدار \&\fBGCC_COMPARE_DEBUG\fR را مثلاً روی \fB\-fcompare\-debug\-not\-overridden\fR تنظیم کنید، که GCC آن را به عنوان یک گزینه نامعتبر در هر کامپایل واقعی (به جای پیش‌پردازش، اسمبلی یا پیوند) رد می‌کند. برای دریافت صرفاً یک هشدار، تنظیم \fBGCC_COMPARE_DEBUG\fR روی \fB\-w%n\-fcompare\-debug not overridden\fR کفایت می‌کند. .IP \fB\-fcompare\-debug\-second\fR 4 .IX Item "-fcompare-debug-second" این گزینه به‌طور ضمنی برای کامپایل دومی که توسط \fB\-fcompare\-debug\fR درخواست شده است، به همراه گزینه‌هایی برای بی‌صدا کردن هشدارها و حذف گزینه‌های دیگری که باعث می‌شوند کامپایلر به عنوان اثر جانبی خروجی را در فایل‌ها یا در خروجی استاندارد تولید کند، به کامپایلر ارسال می‌شود. فایل‌های تخلیه و فایل‌های موقت حفظ‌شده تغییر نام داده می‌شوند تا حاوی پسوند اضافی \&\f(CW\*(C`.gk\*(C'\fR در حین کامپایل دوم باشند، تا از رونویسی موارد تولیدشده توسط کامپایل اول جلوگیری شود. .Sp هنگامی که این گزینه به راه‌انداز کامپایلر ارسال می‌شود، باعث می‌شود که از کامپایل \&\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، به همان روشی که \&\fB\-gtoggle\fR وضعیت \fB\-g\fR را تغییر می‌دهد. .IP \fB\-Q\fR 4 .IX Item "-Q" هنگامی که در خط فرمان پیش از \fB\-\-help=\fR استفاده شود، \fB\-Q\fR به عنوان تغییردهنده خروجی راهنما عمل می‌کند. .Sp در غیر این صورت، این گزینه باعث می‌شود کامپایلر نام هر تابع را در حین کامپایل چاپ کند، و پس از پایان هر گذر (pass)، آماری درباره آن ارائه دهد. .IP \fB\-ftime\-report\fR 4 .IX Item "-ftime-report" باعث می‌شود کامپایلر پس از پایان هر گذر (pass)، آماری درباره زمان مصرف‌شده توسط آن در stderr چاپ کند. .Sp اگر خروجی SARIF برای خطایابی‌ها از طریق \&\fB\-fdiagnostics\-format=sarif\-file\fR یا \&\fB\-fdiagnostics\-format=sarif\-stderr\fR درخواست شده باشد، آنگاه اطلاعات \fB\-ftime\-report\fR در عوض در قالب JSON و به عنوان بخشی از خروجی SARIF صادر می‌شود. فرمت دقیق این داده‌های JSON ممکن است تغییر کند و ممکن است مقادیر به دلیل نوشته‌شدن در مکانی کمی متفاوت درون کامپایلر، دقیقاً با مقادیر صادرشده به stderr مطابقت نداشته باشند. .IP \fB\-ftime\-report\-details\fR 4 .IX Item "-ftime-report-details" ثبت جداگانه زمان مصرف‌شده توسط بخش‌های زیرساختی برای هر گذر (pass). .IP \fB\-fira\-verbose=\fR\fIn\fR 4 .IX Item "-fira-verbose=n" کنترل میزان جزئیات فایل تخلیه برای تخصیص‌دهنده یکپارچه ثبات‌ها (integrated register allocator). مقدار پیش‌فرض ۵ است. اگر مقدار \fIn\fR بزرگ‌تر یا مساوی ۱۰ باشد، خروجی تخلیه با همان قالبِ \fIn\fR منهای ۱۰ به stderr ارسال می‌شود. .IP \fB\-flto\-report\fR 4 .IX Item "-flto-report" چاپ گزارشی حاوی جزئیات داخلی درباره نحوه عملکرد بهینه‌ساز زمان پیوند (link\-time optimizer). محتویات این گزارش از نسخه‌ای به نسخه دیگر متغیر است. هدف آن مفید بودن برای توسعه‌دهندگان GCC هنگام پردازش فایل‌های شیء در حالت LTO (از طریق \fB\-flto\fR) است. .Sp به‌طور پیش‌فرض غیرفعال است. .IP \fB\-flto\-report\-wpa\fR 4 .IX Item "-flto-report-wpa" مانند \fB\-flto\-report\fR، اما گزارش را تنها برای مرحله WPA بهینه‌سازی زمان پیوند چاپ می‌کند. .IP \fB\-fmem\-report\fR 4 .IX Item "-fmem-report" باعث می‌شود کامپایلر پس از اتمام کار، آماری درباره تخصیص حافظه دائمی چاپ کند. .IP \fB\-fmem\-report\-wpa\fR 4 .IX Item "-fmem-report-wpa" باعث می‌شود کامپایلر آماری درباره تخصیص حافظه دائمی تنها برای مرحله WPA چاپ کند. .IP \fB\-fpre\-ipa\-mem\-report\fR 4 .IX Item "-fpre-ipa-mem-report" .PD 0 .IP \fB\-fpost\-ipa\-mem\-report\fR 4 .IX Item "-fpost-ipa-mem-report" .PD باعث می‌شود کامپایلر آماری درباره تخصیص حافظه دائمی قبل یا بعد از بهینه‌سازی بین‌رویه‌ای (interprocedural optimization) چاپ کند. .IP \fB\-fmultiflags\fR 4 .IX Item "-fmultiflags" این گزینه امکان استفاده از \f(CW\*(C`TFLAGS\*(C'\fR آگاه از multilib را برای ساخت کتابخانه‌های مقصد با گزینه‌هایی متفاوت از مواردی که کامپایلر به‌طور پیش‌فرض برای استفاده پیکربندی شده است، از طریق مشخصات (specs) تنظیم‌شده توسط بخش‌های داخلی کامپایلر، توسط مقصد، یا توسط سازندگان در زمان پیکربندی فراهم می‌کند. .Sp مشابه \f(CW\*(C`TFLAGS\*(C'\fR، این به کتابخانه‌های مقصد امکان می‌دهد برای محیط‌های پایه و سازگار ساخته شوند، در حالی که کامپایلر به‌طور پیش‌فرض محیط‌های پرتقاضاتری را در نظر می‌گیرد. این امر مفید است زیرا کاربران در صورتی که پیش‌فرض‌ها برای محیط مقصدشان ایده‌آل نباشد، می‌توانند به‌راحتی تنظیمات پیش‌فرض پیکربندی کامپایلر را برای ساخت برنامه‌های خود لغو کنند، در حالی که بازسازی کتابخانه‌های زمان اجرا معمولاً به این آسانی یا خوشایندی نیست. .Sp برخلاف \f(CW\*(C`TFLAGS\*(C'\fR، استفاده از مشخصات (specs) امکان انتخاب پرچم‌های مختلف را برای multilibهای گوناگون فراهم می‌کند. روش دستیابی به این امر، ساخت با دستور \fBmake TFLAGS=\-fmultiflags\fR پس از پیکربندی \&\fB\-\-with\-specs=%{fmultiflags:...}\fR است. .Sp این گزینه پس از پایان پردازش driver self spec توسط راه‌انداز، کنار گذاشته می‌شود. .Sp همچنین برای بررسی اینکه آیا \f(CW\*(C`TFLAGS\*(C'\fR برای ساخت تمام کتابخانه‌های مقصد استفاده می‌شود یا خیر، با پیکربندی یک کامپایلر غیر-bootstrap به‌صورت \&\fB\-\-with\-specs=\*(Aq%{!fmultiflags:%emissing TFLAGS}\*(Aq\fR و ساخت کامپایلر و کتابخانه‌های مقصد مفید است..IP \fB\-fprofile\-report\fR 4 .IX Item "-fprofile-report" باعث می‌شود کامپایلر آماره‌هایی دربارهٔ سازگاری نمایهٔ (تخمین‌زده‌شده) و اثر هر گذر به‌طور جداگانه در خروجی چاپ کند. .IP \fB\-fstack\-usage\fR 4 .IX Item "-fstack-usage" باعث می‌شود کامپایلر اطلاعات میزان مصرف پشته (stack) را به ازای هر تابع برای برنامه تولید کند. نام فایل برای رونوشت با الحاق \&\fI.su\fR به \fIauxname\fR ساخته می‌شود. اگر نام فایل خروجی صریحاً مشخص شده باشد و یک فایل اجرایی نباشد، \fIauxname\fR از روی آن تولید می‌شود؛ در غیر این صورت، نام پایه (basename) فایل منبع خواهد بود. هر مدخل از سه فیلد تشکیل شده است: .RS 4 .IP * 4 نام تابع. .IP * 4 تعداد بایت‌ها. .IP * 4 یک یا چند توصیف‌کننده: \f(CW\*(C`static\*(C'\fR، \f(CW\*(C`dynamic\*(C'\fR، \f(CW\*(C`bounded\*(C'\fR. .RE .RS 4 .Sp توصیف‌کنندهٔ \f(CW\*(C`static\*(C'\fR بدین معناست که تابع پشته را به‌طور ایستا دستکاری می‌کند: در هنگام ورود به تابع، تعداد بایت‌های مشخص و ثابتی برای فریم پشته تخصیص یافته و هنگام خروج از تابع آزاد می‌شود؛ هیچ تنظیم پشته‌ای دیگری در بدنهٔ تابع انجام نمی‌پذیرد. فیلد دوم همین تعداد بایت ثابت است. .Sp توصیف‌کنندهٔ \f(CW\*(C`dynamic\*(C'\fR بدین معناست که تابع پشته را به‌طور پویا دستکاری می‌کند: علاوه بر تخصیص ایستای شرح‌داده‌شده در بالا، تنظیمات پشته درون بدنهٔ تابع نیز انجام می‌گیرد، برای نمونه جهت push/pop کردن آرگومان‌ها پیرامون فراخوانی توابع. اگر توصیف‌کنندهٔ \f(CW\*(C`bounded\*(C'\fR نیز حضور داشته باشد، میزان این تنظیمات در زمان کامپایل کران‌دار (محدود) است و فیلد دوم، کران بالای کل پشتهٔ مصرفی تابع خواهد بود. اگر این توصیف‌کننده نباشد، میزان این تنظیمات در زمان کامپایل کران‌دار نیست و فیلد دوم تنها بخش کران‌دار را نشان می‌دهد. .RE .IP \fB\-fstats\fR 4 .IX Item "-fstats" در پایان فرایند کامپایل، آماره‌هایی دربارهٔ پردازش فرانت‌اند صادر می‌کند. این گزینه تنها توسط فرانت‌اند ++C پشتیبانی می‌شود و اطلاعات آن عموماً تنها برای تیم توسعهٔ ++G مفید است. .IP \fB\-fdbg\-cnt\-list\fR 4 .IX Item "-fdbg-cnt-list" نام و کران بالای شمارنده را برای همهٔ شمارنده‌های دیباگ چاپ می‌کند. .IP \fB\-fdbg\-cnt=\fR\fIcounter\-value\-list\fR 4 .IX Item "-fdbg-cnt=counter-value-list" کران پایین و بالای شمارندهٔ داخلی دیباگ را تنظیم می‌کند. \fIcounter\-value\-list\fR فهرستی جداشده با کاما از چندتایی‌های \fIname\fR:\fIlower_bound1\fR\-\fIupper_bound1\fR [:\fIlower_bound2\fR\-\fIupper_bound2\fR...] است که نام شمارنده و فهرستی از بازه‌های بسته را تعیین می‌کند. مقدار \fIlower_bound\fR اختیاری است و اگر تعیین نشود، با مقدار صفر مقداردهی اولیه می‌شود. برای مثال با \fB\-fdbg\-cnt=dce:2\-4:10\-11,tail_call:10\fR، عبارت \&\f(CWdbg_cnt(dce)\fR تنها برای فراخوانی‌های دوم، سوم، چهارم، دهم و یازدهم مقدار true برمی‌گرداند. برای \f(CWdbg_cnt(tail_call)\fR، برای ۱۰ فراخوانی نخست مقدار true برگردانده می‌شود. .IP \fB\-print\-file\-name=\fR\fIlibrary\fR 4 .IX Item "-print-file-name=library" نام کامل و مطلق فایل کتابخانهٔ \fIlibrary\fR را که هنگام پیوند استفاده می‌شود چاپ می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. با این گزینه، GCC هیچ کدی را کامپایل یا پیوند نمی‌کند؛ تنها نام فایل را چاپ می‌کند. .IP \fB\-print\-multi\-directory\fR 4 .IX Item "-print-multi-directory" نام دایرکتوری متناظر با multilib انتخاب‌شده توسط سایر سوئیچ‌های موجود در خط فرمان را چاپ می‌کند. فرض بر این است که این دایرکتوری در \fBGCC_EXEC_PREFIX\fR وجود دارد. .IP \fB\-print\-multi\-lib\fR 4 .IX Item "-print-multi-lib" نگاشت نام دایرکتوری‌های multilib به سوئیچ‌های کامپایلری که آن‌ها را فعال می‌کنند چاپ می‌کند. نام دایرکتوری با \&\fB;\fR از سوئیچ‌ها جدا می‌شود و هر سوئیچ به جای \&\fB\-\fR با یک \fB@\fR آغاز می‌شود، بدون اینکه فاصله‌ای میان چند سوئیچ باشد. هدف از این قالب، تسهیل پردازش در شل است. .IP \fB\-print\-multi\-os\-directory\fR 4 .IX Item "-print-multi-os-directory" مسیر کتابخانه‌های سیستم‌عامل را برای multilib انتخاب‌شده، به صورت نسبی به یکی از زیردایرکتوری‌های \fIlib\fR چاپ می‌کند. اگر کتابخانه‌های سیستم‌عامل در زیردایرکتوری \fIlib\fR باشند و هیچ multilibای به کار نرفته باشد، معمولاً خروجی تنها \fI.\fR خواهد بود؛ اگر کتابخانه‌های سیستم‌عامل در دایرکتوری‌های هم‌سطحِ \fIlibsuffix\fR باشند، به عنوان نمونه خروجی \fI../lib64\fR، \fI../lib\fR یا \&\fI../lib32\fR خواهد بود؛ و اگر کتابخانه‌های سیستم‌عامل در زیردایرکتوری‌های \fIlib/subdir\fR قرار داشته باشند، برای مثال \fIamd64\fR، \fIsparcv9\fR یا \fIev6\fR چاپ می‌شود. .IP \fB\-print\-multiarch\fR 4 .IX Item "-print-multiarch" مسیر کتابخانه‌های سیستم‌عامل را برای multiarch انتخاب‌شده، به صورت نسبی به یکی از زیردایرکتوری‌های \fIlib\fR چاپ می‌کند. .IP \fB\-print\-prog\-name=\fR\fIprogram\fR 4 .IX Item "-print-prog-name=program" مانند \fB\-print\-file\-name\fR عمل می‌کند، اما به دنبال برنامه‌ای مانند \fBcpp\fR می‌گردد. .IP \fB\-print\-libgcc\-file\-name\fR 4 .IX Item "-print-libgcc-file-name" مشابه \fB\-print\-file\-name=libgcc.a\fR است. .Sp این گزینه زمانی مفید است که از \fB\-nostdlib\fR یا \fB\-nodefaultlibs\fR استفاده می‌کنید اما تمایل دارید پیوند با \fIlibgcc.a\fR برقرار شود. می‌توانید این دستور را اجرا کنید: .Sp .Vb 1 \& gcc \-nostdlib ... \`gcc \-print\-libgcc\-file\-name\` .Ve .IP \fB\-print\-search\-dirs\fR 4 .IX Item "-print-search-dirs" نام دایرکتوری نصب پیکربندی‌شده و فهرستی از دایرکتوری‌های برنامه و کتابخانه را که \fBgcc\fR جستجو می‌کند چاپ می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. .Sp این گزینه زمانی کاربرد دارد که \fBgcc\fR پیام خطای \&\fBinstallation problem, cannot exec cpp0: No such file or directory\fR را چاپ می‌کند. برای حل این مشکل، یا باید \fIcpp0\fR و سایر اجزای کامپایلر را در جایی که \fBgcc\fR انتظار دارد قرار دهید، یا متغیر محیطی \fBGCC_EXEC_PREFIX\fR را روی دایرکتوری محل نصب آن‌ها تنظیم کنید. اسلش پایانی (\fB/\fR) را فراموش نکنید. .IP \fB\-print\-sysroot\fR 4 .IX Item "-print-sysroot" دایرکتوری sysroot مقصد را که حین کامپایل استفاده می‌شود، چاپ می‌کند. این همان sysroot مقصدی است که یا در زمان پیکربندی و یا با گزینهٔ \fB\-\-sysroot\fR تعیین شده است، و ممکن است پسوند اضافه‌ای وابسته به گزینه‌های کامپایل داشته باشد. اگر هیچ sysroot مقصدی تعیین نشده باشد، این گزینه چیزی چاپ نمی‌کند. .IP \fB\-print\-sysroot\-headers\-suffix\fR 4 .IX Item "-print-sysroot-headers-suffix" پسوندی را که هنگام جستجوی هدرها به sysroot مقصد اضافه می‌شود چاپ می‌کند، یا در صورتی که کامپایلر با چنین پسوندی پیکربندی نشده باشد یک خطا صادر می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. .IP \fB\-dumpmachine\fR 4 .IX Item "-dumpmachine" ماشین مقصد کامپایلر را چاپ می‌کند (برای مثال، \&\fBi686\-pc\-linux\-gnu\fR)\-\-\-و کار دیگری انجام نمی‌دهد. .IP \fB\-dumpversion\fR 4 .IX Item "-dumpversion" نسخهٔ کامپایلر را چاپ می‌کند (برای مثال، \f(CW3.0\fR، \f(CW6.3.0\fR یا \f(CW7\fR)\-\-\-و کار دیگری انجام نمی‌دهد. این همان نسخهٔ کامپایلری است که در مسیرهای فایل‌سیستم و فایل‌های specs استفاده می‌شود. بسته به نحوهٔ پیکربندی کامپایلر، خروجی می‌تواند یک عدد تنها (نسخهٔ اصلی یا major)، دو عدد جداشده با نقطه (نسخهٔ اصلی و فرعی یا major و minor) یا سه عدد جداشده با نقطه (نسخهٔ اصلی، فرعی و پچ‌لول یا patchlevel) باشد. .IP \fB\-dumpfullversion\fR 4 .IX Item "-dumpfullversion" نسخهٔ کامل کامپایلر را چاپ می‌کند\-\-\-و کار دیگری انجام نمی‌دهد. خروجی همواره شامل سه عدد جداشده با نقطه است: نسخهٔ اصلی، فرعی و سطح وصله (major، minor و patchlevel). .IP \fB\-dumpspecs\fR 4 .IX Item "-dumpspecs" تنظیمات 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 از نظر پیوند سازگار نیستند؛ شما باید کل برنامه خود را با همان 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. برنامه و نمادهای تعریف‌شده به‌صورت ایستا در آن باید در فاصله 1MB از یکدیگر قرار گیرند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" تولید کد برای مدل کد small. برنامه و نمادهای تعریف‌شده به‌صورت ایستا در آن باید در فاصله 4GB از یکدیگر قرار گیرند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. این مدل کد پیش‌فرض است. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" تولید کد برای مدل کد large. این مدل هیچ فرضی درباره آدرس‌ها و اندازه بخش‌ها در نظر نمی‌گیرد. برنامه‌ها فقط می‌توانند به‌صورت ایستا پیوند داده شوند. گزینه \&\fB\-mcmodel=large\fR با \&\fB\-mabi=ilp32\fR، \&\fB\-fpic\fR و \&\fB\-fPIC\fR ناسازگار است. .IP \fB\-mtp=\fR\fIname\fR 4 .IX Item "-mtp=name" مشخص کردن ثبات سیستمی مورد استفاده به عنوان اشاره‌گر رشته (thread pointer). مقادیر معتبر عبارتند از \fBtpidr_el0\fR، \fBtpidrro_el0\fR، \fBtpidr_el1\fR، \fBtpidr_el2\fR و \&\fBtpidr_el3\fR. برای سازگاری با نسخه‌های پیشین، نام‌های مستعار \fBel0\fR، \&\fBel1\fR، \fBel2\fR و \fBel3\fR نیز پذیرفته می‌شوند. تنظیم پیش‌فرض \fBtpidr_el0\fR است. توصیه می‌شود تمام کدهایی که قرار است با یکدیگر تعامل داشته باشند با مقدار یکسانی از این گزینه کامپایل شوند تا از دسترسی به یک اشاره‌گر رشته متفاوت از سطح استثنای نادرست جلوگیری شود. .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 حذف یا نگه‌داشتن اشاره‌گر فریم در توابع برگ (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 برای یک canary سراسری یا \fBsysreg\fR برای یک canary در یک ثبات سیستمی مناسب. .Sp با انتخاب گزینه دوم، گزینه‌های \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR و \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR علاوه بر این مشخص می‌کنند که از کدام ثبات سیستمی به عنوان ثبات پایه برای خواندن canary و از چه آفستی نسبت به آن ثبات پایه استفاده شود. هیچ ثبات یا آفست پیش‌فرضی وجود ندارد زیرا این مورد کاملاً برای استفاده در هسته لینوکس است. .IP \fB\-mtls\-dialect=desc\fR 4 .IX Item "-mtls-dialect=desc" استفاده از توصیف‌کننده‌های TLS به عنوان سازوکار حافظه محلی رشته برای دسترسی‌های پویا به متغیرهای 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 فعال یا غیرفعال کردن راه‌حل ترمیمی برای ایراد سخت‌افزاری شماره 835769 پردازنده ARM Cortex\-A53. این کار شامل قرار دادن یک دستورالعمل NOP بین دستورالعمل‌های حافظه و دستورالعمل‌های ضرب\-تجمع صحیح ۶۴ بیتی است. اگر یک معماری یا پردازنده در خط فرمان مشخص شده باشد که به این ترمیم نیازی ندارد، این پرچم نادیده گرفته خواهد شد. .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 فعال یا غیرفعال کردن راه‌حل ترمیمی برای ایراد سخت‌افزاری شماره 843419 پردازنده ARM Cortex\-A53. این ترمیم ایراد سخت‌افزاری در زمان پیوند انجام می‌شود و این گزینه صرفاً پرچم مربوطه را به پیونددهنده ارسال خواهد کرد. اگر یک معماری یا پردازنده در خط فرمان مشخص شده باشد که به این ترمیم نیازی ندارد، این پرچم نادیده گرفته خواهد شد. .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 نیز استفاده شده باشد. فعال کردن این گزینه، دقت نتایج جذر معکوس را برای دقت یگانه به حدود ۱۶ بیت و برای دقت دوگانه به ۳۲ بیت کاهش می‌دهد. .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 که در ISA پایه ARMv8.0 وجود دارند استفاده خواهند کرد. .Sp این گزینه تنها در هنگام کامپایل برای مجموعه دستورالعمل پایه ARMv8.0 کاربرد دارد. اگر از نگارش جدیدتری استفاده شود، مانند \fB\-march=armv8.1\-a\fR یا \fB\-march=armv8\-a+lse\fR، دستورالعمل‌های ARMv8.1\-Atomics مستقیماً استفاده خواهند شد. همین موضوع در هنگام استفاده از \fB\-mcpu=\fR نیز در حالتی که پردازنده انتخاب‌شده از ویژگی \fBlse\fR پشتیبانی کند، صدق می‌کند. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-march=\fR\fIname\fR 4 .IX Item "-march=name" مشخص کردن نام معماری مقصد و به‌صورت اختیاری، یک یا چند اصلاح‌کننده ویژگی. این گزینه فرم \&\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 در دسترس است و باعث می‌شود کامپایلر معماری سیستم میزبان را انتخاب کند. این گزینه در صورتی که کامپایلر قادر به شناسایی معماری سیستم میزبان نباشد، هیچ اثری نخواهد داشت. هنگامی که \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 مشخص شود، کد طوری بهینه‌سازی (tune) می‌شود که در طیفی از پردازنده‌های هدفی که معماری مقصد را پیاده‌سازی کرده‌اند عملکرد خوبی داشته باشد. .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، مقدار \&\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 بازنویسی می‌کند. نحو (syntax)، مفاهیم و مقادیر پذیرفته‌شده برای \&\fIstring\fR در این گزینه، برای یکسانی در نگارش‌های مختلف تضمین نمی‌شوند. .Sp این گزینه تنها برای استفاده در هنگام توسعهٔ GCC در نظر گرفته شده است. .IP \fB\-mverbose\-cost\-dump\fR 4 .IX Item "-mverbose-cost-dump" تخلیهٔ (dump) مفصل مدل هزینه را در فایل‌های اشکال‌زدایی فعال می‌کند. این گزینه جهت استفاده در اشکال‌زدایی کامپایلر ارائه شده است. .IP \fB\-mpc\-relative\-literal\-loads\fR 4 .IX Item "-mpc-relative-literal-loads" .PD 0 .IP \fB\-mno\-pc\-relative\-literal\-loads\fR 4 .IX Item "-mno-pc-relative-literal-loads" .PD بارگذاری مقادیر ثابت وابسته به PC (شمارندهٔ برنامه) را فعال یا غیرفعال می‌کند. با این گزینه، به مخازن مقادیر ثابت (literal pools) با یک تک‌دستورالعمل دسترسی پیدا می‌شود و پس از هر تابع صادر می‌گردند. این کار حداکثر اندازهٔ توابع را به 1MB محدود می‌کند. این گزینه به‌طور پیش‌فرض برای \&\fB\-mcmodel=tiny\fR فعال است. .IP \fB\-msign\-return\-address=\fR\fIscope\fR 4 .IX Item "-msign-return-address=scope" دامنهٔ توابعی را که امضای آدرس بازگشت بر آن‌ها اعمال خواهد شد، تعیین می‌کند. مقادیر مجاز عبارتند از: \fBnone\fR که امضای نشانی بازگشت را غیرفعال می‌کند، \&\fBnon\-leaf\fR که امضای اشاره‌گر را برای توابعی که تابع برگ (leaf) نیستند فعال می‌نماید، و \fBall\fR که امضای اشاره‌گر را برای تمامی توابع فعال می‌سازد. مقدار پیش‌فرض \fBnone\fR است. این گزینه به نفع \-mbranch\-protection منسوخ شده است. .IP \fB\-mbranch\-protection=\fR\fInone\fR\fB|\fR\fIstandard\fR\fB|\fR\fIpac\-ret\fR\fB[+\fR\fIleaf\fR\fB+\fR\fIb\-key\fR\fB]|\fR\fIbti\fR\fB|\fR\fIgcs\fR 4 .IX Item "-mbranch-protection=none|standard|pac-ret[+leaf+b-key]|bti|gcs" ویژگی‌های محافظت از انشعاب مورد استفاده را انتخاب می‌کند. \&\fBnone\fR پیش‌فرض است و تمام انواع محافظت از انشعاب را خاموش می‌کند. \&\fBstandard\fR تمام انواع ویژگی‌های محافظت از انشعاب را فعال می‌کند. اگر یک ویژگی دارای گزینه‌های بهینه‌سازی بیشتری باشد، \fBstandard\fR آن را روی سطح استانداردش قرار می‌دهد. \&\fBpac\-ret[+\fR\fIleaf\fR\fB]\fR امضای آدرس بازگشت را در سطح استاندارد فعال می‌کند: امضای توابعی که آدرس بازگشت را در حافظه ذخیره می‌کنند (توابع غیربرگ در عمل همواره این کار را انجام می‌دهند) با استفاده از a\-key. آرگومان اختیاری \fBleaf\fR می‌تواند برای گسترش امضا جهت شامل شدن توابع برگ استفاده شود. آرگومان اختیاری \fBb\-key\fR می‌تواند برای امضای توابع با کلید B به‌جای کلید A به کار رود. \&\fBbti\fR سازوکار شناسایی هدف انشعاب (Branch Target Identification) را فعال می‌کند. \&\fBgcs\fR تولید کد سازگار با پشتهٔ کنترل محافظت‌شده (Guarded Control Stack) را فعال می‌نماید. .IP \fB\-mharden\-sls=\fR\fIopts\fR 4 .IX Item "-mharden-sls=opts" مقاوم‌سازی کامپایلر را در برابر گمانه‌زنی مستقیم (SLS - straight line speculation) فعال می‌کند. \&\fIopts\fR فهرستی از گزینه‌های زیر است که با کاما از هم جدا شده‌اند: .RS 4 .IP \fBretbr\fR 4 .IX Item "retbr" .PD 0 .IP \fBblr\fR 4 .IX Item "blr" .PD .RE .RS 4 .Sp علاوه بر این، \fB\-mharden\-sls=all\fR تمامی مقاوم‌سازی‌های SLS را فعال می‌کند در حالی که \&\fB\-mharden\-sls=none\fR تمام مقاوم‌سازی‌های SLS را غیرفعال می‌سازد. .RE.IP \fB\-mearly\-ra=\fR\fIscope\fR 4 .IX Item "-mearly-ra=scope" تعیین می‌کند چه زمانی یک گذر زودهنگام تخصیص ثبات فعال شود. این گذر قبل از زمان‌بندی دستورالعمل‌ها اجرا می‌شود و تلاش می‌کند یک تخصیص بدون سرریز (spill\-free) برای کدهای ممیز شناور و برداری بیابد. همچنین تلاش می‌کند از دستورالعمل‌های چندثباتی گام‌دار (strided multi\-register)، مانند 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" نسخه‌ای از گذر ادغام جفت load/store در AArch64 را که قبل از تخصیص ثبات اجرا می‌شود فعال می‌کند. به‌طور پیش‌فرض در \fB\-O\fR و بالاتر فعال است. .IP \fB\-mlate\-ldp\-fusion\fR 4 .IX Item "-mlate-ldp-fusion" نسخه‌ای از گذر ادغام جفت load/store در AArch64 را که پس از تخصیص ثبات اجرا می‌شود فعال می‌کند. به‌طور پیش‌فرض در \fB\-O\fR و بالاتر فعال است. .IP \fB\-msve\-vector\-bits=\fR\fIbits\fR 4 .IX Item "-msve-vector-bits=bits" تعداد بیت‌ها را در یک ثبات برداری SVE مشخص می‌کند. این گزینه تنها زمانی تأثیر دارد که SVE فعال باشد. .Sp کامپایلر GCC از دو شیوهٔ تولید کد SVE پشتیبانی می‌کند: خروجی «مستقل از طول بردار» (vector\-length agnostic) که با هر اندازه‌ای از ثبات برداری کار می‌کند و خروجی «وابسته به طول بردار» (vector\-length specific) که به GCC اجازه می‌دهد در مواردی که برای بهینه‌سازی سودمند است، فرض‌هایی را دربارهٔ طول بردار در نظر بگیرد. مقادیر ممکن برای \fBbits\fR عبارتند از: \fBscalable\fR، \fB128\fR، \&\fB256\fR، \fB512\fR، \fB1024\fR و \fB2048\fR. مشخص کردن \fBscalable\fR خروجی مستقل از طول بردار را انتخاب می‌کند. در حال حاضر \fB\-msve\-vector\-bits=128\fR نیز برای مقصدهای big\-endian خروجی مستقل از طول بردار تولید می‌کند. تمامی مقادیر دیگر کدهای وابسته به طول بردار تولید می‌کنند. رفتار این مقادیر ممکن است در نسخه‌های آینده تغییر کند و برای تولید کدی که بین سخت‌افزارهای مختلف با طول‌های بردار متفاوت SVE سازگار و قابل‌حمل باشد، نباید به هیچ مقداری جز \fBscalable\fR اتکا کرد. .Sp پیش‌فرض \fB\-msve\-vector\-bits=scalable\fR است که کد مستقل از طول بردار تولید می‌کند. .IP \fB\-Wexperimental\-fmv\-target\fR 4 .IX Item "-Wexperimental-fmv-target" دربارهٔ استفاده از ویژگی آزمایشی چندنسخه‌ای‌سازی توابع (Function Multi Versioning) هشدار می‌دهد. مشخصات افزونه زبان سی آرم (Arm C Language Extension) برای Function Multi Versioning در مرحلهٔ بتا قرار دارد و دستخوش تغییر است. هرگونه استفاده از FMV با این هشدار همراه است که احتمال تغییر رفتار و ناسازگاری در آینده وجود دارد. .PP اصلاح‌کننده‌های ویژگی \fB\-march\fR و \fB\-mcpu\fR .IX Subsection "-march and -mcpu Feature Modifiers" .PP اصلاح‌کننده‌های ویژگی مورد استفاده با \fB\-march\fR و \fB\-mcpu\fR می‌توانند هر یک از موارد زیر و معکوس آن‌ها یعنی \fBno\fR\fIfeature\fR باشند: .IP \fBcrc\fR 4 .IX Item "crc" افزونهٔ CRC را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای \&\fB\-march=armv8.1\-a\fR فعال است. .IP \fBcrypto\fR 4 .IX Item "crypto" افزونهٔ Crypto را فعال می‌کند. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fBfp\fR 4 .IX Item "fp" دستورالعمل‌های ممیز شناور را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای تمام مقادیر ممکنِ گزینه‌های \fB\-march\fR و \fB\-mcpu\fR فعال است. .IP \fBsimd\fR 4 .IX Item "simd" دستورالعمل‌های Advanced SIMD را فعال می‌کند. این گزینه همچنین دستورالعمل‌های ممیز شناور را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای تمام مقادیر ممکنِ گزینه‌های \&\fB\-march\fR و \fB\-mcpu\fR فعال است. .IP \fBsve\fR 4 .IX Item "sve" دستورالعمل‌های Scalable Vector Extension را فعال می‌کند. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fBlse\fR 4 .IX Item "lse" دستورالعمل‌های Large System Extension را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای \&\fB\-march=armv8.1\-a\fR فعال است. .IP \fBrdma\fR 4 .IX Item "rdma" دستورالعمل‌های Round Double Multiply Accumulate را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای \fB\-march=armv8.1\-a\fR فعال است. .IP \fBfp16\fR 4 .IX Item "fp16" افزونهٔ FP16 را فعال می‌کند. این گزینه همچنین دستورالعمل‌های ممیز شناور را فعال می‌کند. .IP \fBfp16fml\fR 4 .IX Item "fp16fml" افزونهٔ FP16 fmla را فعال می‌کند. این گزینه همچنین افزونه‌های FP16 و دستورالعمل‌های ممیز شناور را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای \fB\-march=armv8.4\-a\fR فعال است. استفاده از این گزینه در معماری‌های پیش از Armv8.2\-A پشتیبانی نمی‌شود. .IP \fBrcpc\fR 4 .IX Item "rcpc" افزونهٔ RCpc را فعال می‌کند. این گزینه استفاده از دستورالعمل‌های LDAPR را برای معناشناسی اتمیک load\-acquire فعال کرده و آن را به اسمبلر منتقل می‌کند، که باعث می‌شود عبارات اسمبلی درون‌برنامه‌ای (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" قابلیت Scalable Vector Extension 2 در Armv8\-a را فعال می‌کند. این گزینه همچنین دستورالعمل‌های SVE را فعال می‌کند. .IP \fBsve2\-bitperm\fR 4 .IX Item "sve2-bitperm" دستورالعمل‌های SVE2 bitperm را فعال می‌کند. این گزینه همچنین دستورالعمل‌های SVE2 را فعال می‌کند. .IP \fBsve2\-sm4\fR 4 .IX Item "sve2-sm4" دستورالعمل‌های SVE2 sm4 را فعال می‌کند. این گزینه همچنین دستورالعمل‌های SVE2 را فعال می‌کند. .IP \fBsve2\-aes\fR 4 .IX Item "sve2-aes" دستورالعمل‌های SVE2 aes را فعال می‌کند. این گزینه همچنین دستورالعمل‌های SVE2 را فعال می‌کند. .IP \fBsve2\-sha3\fR 4 .IX Item "sve2-sha3" دستورالعمل‌های SVE2 sha3 را فعال می‌کند. این گزینه همچنین دستورالعمل‌های SVE2 را فعال می‌کند. .IP \fBsve2p1\fR 4 .IX Item "sve2p1" دستورالعمل‌های SVE2.1 را فعال می‌کند. این گزینه همچنین دستورالعمل‌های SVE2 را فعال می‌کند. .IP \fBtme\fR 4 .IX Item "tme" افزونهٔ Transactional Memory Extension را فعال می‌کند. .IP \fBi8mm\fR 4 .IX Item "i8mm" دستورالعمل‌های ضرب ماتریس عدد صحیح ۸ بیتی را فعال می‌کند. این گزینه همچنین دستورالعمل‌های 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 half\-precision) را فعال می‌کند. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای \fB\-march=armv8.6\-a\fR فعال است. استفاده از این گزینه در معماری‌های پیش از Armv8.2\-A پشتیبانی نمی‌شود. .IP \fBls64\fR 4 .IX Item "ls64" دستورالعمل‌های اتمیک load و store شصت و چهار بایتی را برای شتاب‌دهنده‌ها فعال می‌کند. .IP \fBmops\fR 4 .IX Item "mops" دستورالعمل‌های تسریع عملیات حافظه مانند \f(CW\*(C`memcpy\*(C'\fR، \&\f(CW\*(C`memmove\*(C'\fR و \f(CW\*(C`memset\*(C'\fR را فعال می‌کند. این گزینه به‌طور پیش‌فرض برای \&\fB\-march=armv8.8\-a\fR فعال است. .IP \fBflagm\fR 4 .IX Item "flagm" افزونهٔ دستورالعمل‌های دستکاری پرچم (Flag Manipulation instructions Extension) را فعال می‌کند. .IP \fBflagm2\fR 4 .IX Item "flagm2" دستورالعمل‌های تبدیل پرچم FlagM2 را فعال می‌کند..IP \fBpauth\fR 4 .IX Item "pauth" فعال‌سازی افزونهٔ Pointer Authentication. .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" فعال‌سازی افزونهٔ ضرب و جمع انباشته ممیز شناور ۸ بیتی (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" فعال‌سازی افزونهٔ ممیز شناور مغزی غیرتعمیم‌یافتهٔ 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" هزینهٔ انشعاب‌ها را تقریباً برابر با \fInum\fR دستورالعمل «ساده» تنظیم می‌کند. این هزینه صرفاً یک روش تقریبی (اکتشافی) است و تضمینی برای تولید نتایج یکسان در نسخه‌های مختلف وجود ندارد. .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" برای مقایسه‌های ممیز شناور با دقت یگانه، یک دستورالعمل \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" انحراف (offset) بین بالای پشته و اشاره‌گر پشته را تنظیم می‌کند. برای مثال، مقدار ۸ به این معنی است که هشت بایت در محدودهٔ \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" این حالتی است که برای محاسبات ممیز شناور با حالت گرد کردن بریده‌شده (یعنی گرد کردن به سمت صفر) استفاده می‌شود. این شامل تبدیل از ممیز شناور به عدد صحیح نیز می‌گردد..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" حداکثر تراز (alignment) برای انواع حالت برداری SIMD. مقدار \&\fInum\fR می‌تواند ۴ یا ۸ باشد. پیش‌فرض ۸ است. توجه داشته باشید که این یک تغییر در ABI است، حتی اگر واسط‌های توابع کتابخانه‌ای بسیاری در صورتی که از حالت‌های برداری SIMD در جاهایی که بر اندازه و/یا تراز انواع مربوطه تأثیر می‌گذارند استفاده نکنند، دست‌نخورده باقی بمانند. .IP \fB\-msplit\-vecmove\-early\fR 4 .IX Item "-msplit-vecmove-early" انتقال‌های برداری را قبل از reload به انتقال‌های تک‌کلمه‌ای تقسیم می‌کند. در تئوری این کار می‌تواند تخصیص ثبات بهتری ارائه دهد، اما تاکنون به طور کلی به نظر می‌رسد برعکس این موضوع صادق است. .IP \fB\-m1reg\-\fR\fIreg\fR 4 .IX Item "-m1reg-reg" ثباتی را برای نگهداری مقدار ثابت \-1 مشخص می‌کند، که بارگذاری مقادیر ثابت منفی کوچک و برخی ماسک‌های بیتی خاص را سریع‌تر می‌سازد. مقادیر مجاز برای \fIreg\fR عبارتند از \fBr43\fR و \fBr63\fR، که استفاده از آن ثبات را به عنوان یک ثبات ثابت مشخص می‌کنند، و \fBnone\fR، که به این معنی است که هیچ ثباتی برای این منظور استفاده نمی‌شود. پیش‌فرض \fB\-m1reg\-none\fR است. .PP \fIگزینه‌های AMD GCN\fR .IX Subsection "AMD GCN Options" .PP این گزینه‌ها به طور خاص برای پورت AMD GCN تعریف شده‌اند. .IP \fB\-march=\fR\fIgpu\fR 4 .IX Item "-march=gpu" .PD 0 .IP \fB\-mtune=\fR\fIgpu\fR 4 .IX Item "-mtune=gpu" .PD نوع معماری یا تنظیم بهینه‌سازی (tuning) را برای \fIgpu\fR تعیین می‌کند. مقادیر پشتیبانی‌شده برای \fIgpu\fR عبارتند از: .RS 4 .IP \fBgfx900\fR 4 .IX Item "gfx900" کامپایل برای دستگاه‌های GCN5 Vega 10 (gfx900). .IP \fBgfx902\fR 4 .IX Item "gfx902" کامپایل برای دستگاه‌های GCN5 Vega gfx902. (آزمایشی) .IP \fBgfx904\fR 4 .IX Item "gfx904" کامپایل برای دستگاه‌های GCN5 Vega gfx904. (آزمایشی) .IP \fBgfx906\fR 4 .IX Item "gfx906" کامپایل برای دستگاه‌های GCN5 Vega 20 (gfx906). .IP \fBgfx908\fR 4 .IX Item "gfx908" کامپایل برای دستگاه‌های سری CDNA1 Instinct MI100 (gfx908). .IP \fBgfx909\fR 4 .IX Item "gfx909" کامپایل برای دستگاه‌های GCN5 Vega gfx909. (آزمایشی) .IP \fBgfx90a\fR 4 .IX Item "gfx90a" کامپایل برای دستگاه‌های سری CDNA2 Instinct MI200 (gfx90a). .IP \fBgfx90c\fR 4 .IX Item "gfx90c" کامپایل برای دستگاه‌های GCN5 Vega 7 (gfx90c). .IP \fBgfx9\-generic\fR 4 .IX Item "gfx9-generic" کامپایل کد عمومی برای دستگاه‌های Vega، قابل اجرا روی زیرمجموعه زیر از دستگاه‌های GFX9: gfx900، gfx902، gfx904، gfx906، gfx909 و gfx90c. (آزمایشی) .IP \fBgfx1030\fR 4 .IX Item "gfx1030" کامپایل برای دستگاه‌های RDNA2 gfx1030 (سری GFX10). .IP \fBgfx1031\fR 4 .IX Item "gfx1031" کامپایل برای دستگاه‌های RDNA2 gfx1031 (سری GFX10). (آزمایشی) .IP \fBgfx1032\fR 4 .IX Item "gfx1032" کامپایل برای دستگاه‌های RDNA2 gfx1032 (سری GFX10). (آزمایشی) .IP \fBgfx1033\fR 4 .IX Item "gfx1033" کامپایل برای دستگاه‌های RDNA2 gfx1033 (سری GFX10). (آزمایشی) .IP \fBgfx1034\fR 4 .IX Item "gfx1034" کامپایل برای دستگاه‌های RDNA2 gfx1034 (سری GFX10). (آزمایشی) .IP \fBgfx1035\fR 4 .IX Item "gfx1035" کامپایل برای دستگاه‌های RDNA2 gfx1035 (سری GFX10). (آزمایشی) .IP \fBgfx1036\fR 4 .IX Item "gfx1036" کامپایل برای دستگاه‌های RDNA2 gfx1036 (سری GFX10). .IP \fBgfx10\-3\-generic\fR 4 .IX Item "gfx10-3-generic" کامپایل کد عمومی برای دستگاه‌های GFX10\-3، قابل اجرا روی gfx1030، gfx1031، gfx1032، gfx1033، gfx1034، gfx1035 و gfx1036. (آزمایشی) .IP \fBgfx1100\fR 4 .IX Item "gfx1100" کامپایل برای دستگاه‌های RDNA3 gfx1100 (سری GFX11). .IP \fBgfx1101\fR 4 .IX Item "gfx1101" کامپایل برای دستگاه‌های RDNA3 gfx1101 (سری GFX11). (آزمایشی) .IP \fBgfx1102\fR 4 .IX Item "gfx1102" کامپایل برای دستگاه‌های RDNA3 gfx1102 (سری GFX11). (آزمایشی) .IP \fBgfx1103\fR 4 .IX Item "gfx1103" کامپایل برای دستگاه‌های RDNA3 gfx1103 (سری GFX11). .IP \fBgfx1150\fR 4 .IX Item "gfx1150" کامپایل برای دستگاه‌های RDNA3 gfx1150 (سری GFX11). (آزمایشی) .IP \fBgfx1151\fR 4 .IX Item "gfx1151" کامپایل برای دستگاه‌های RDNA3 gfx1151 (سری GFX11). (آزمایشی) .IP \fBgfx1152\fR 4 .IX Item "gfx1152" کامپایل برای دستگاه‌های RDNA3 gfx1152 (سری GFX11). (آزمایشی) .IP \fBgfx1153\fR 4 .IX Item "gfx1153" کامپایل برای دستگاه‌های RDNA3 gfx1153 (سری GFX11). (آزمایشی) .IP \fBgfx11\-generic\fR 4 .IX Item "gfx11-generic" کامپایل کد عمومی برای دستگاه‌های GFX11، قابل اجرا روی gfx1100، gfx1101، gfx1102، gfx1103، gfx1150، gfx1151، gfx1152 و gfx1153. (آزمایشی) .RE .RS 4 .RE .IP \fB\-msram\-ecc=on\fR 4 .IX Item "-msram-ecc=on" .PD 0 .IP \fB\-msram\-ecc=off\fR 4 .IX Item "-msram-ecc=off" .IP \fB\-msram\-ecc=any\fR 4 .IX Item "-msram-ecc=any" .PD کامپایل باینری‌های مناسب برای دستگاه‌هایی که قابلیت SRAM\-ECC در آن‌ها فعال، غیرفعال یا در هر یک از دو حالت باشد. این ویژگی می‌تواند در برخی دستگاه‌ها به ازای هر پردازه فعال شود. کد کامپایل‌شده باید با حالت دستگاه مطابقت داشته باشد. پیش‌فرض برای دستگاه‌هایی که از آن پشتیبانی می‌کنند، \&\fBany\fR است. .IP \fB\-mstack\-size=\fR\fIbytes\fR 4 .IX Item "-mstack-size=bytes" تعیین می‌کند چه مقدار فضا بر حسب \fIبایت\fR (bytes) برای هر ریسه GPU (wave\-front) از پشته درخواست شود. توجه داشته باشید که ممکن است ریسه‌های متعددی وجود داشته باشند و حافظه در دسترس محدود باشد. اندازه تخصیص پشته همچنین ممکن است بر عملکرد زمان اجرا تأثیر بگذارد. پیش‌فرض در صورت استفاده از OpenACC یا OpenMP برابر 32KB، و در غیر این صورت 1MB است. .IP \fB\-mxnack=on\fR 4 .IX Item "-mxnack=on" .PD 0 .IP \fB\-mxnack=off\fR 4 .IX Item "-mxnack=off" .IP \fB\-mxnack=any\fR 4 .IX Item "-mxnack=any" .PD کامپایل باینری‌های مناسب برای دستگاه‌هایی که قابلیت XNACK در آن‌ها فعال، غیرفعال یا در هر یک از دو حالت باشد. برخی دستگاه‌ها همیشه نیازمند XNACK هستند و برخی به کاربر اجازه می‌دهند XNACK را پیکربندی کند. کد کامپایل‌شده باید با حالت دستگاه مطابقت داشته باشد. پیش‌فرض در دستگاه‌هایی که از Unified Shared Memory پشتیبانی می‌کنند \fB\-mxnack=any\fR و در غیر این صورت \fB\-mxnack=no\fR است. .PP \fIگزینه‌های ARC\fR .IX Subsection "ARC Options" .PP گزینه‌های زیر نگارش معماری‌ای را که کد برای آن کامپایل می‌شود، کنترل می‌کنند: .IP \fB\-mbarrel\-shifter\fR 4 .IX Item "-mbarrel-shifter" دستورالعمل‌های پشتیبانی‌شده توسط barrel shifter را تولید می‌کند. این پیش‌فرض است مگر اینکه \fB\-mcpu=ARC601\fR یا \fB\-mcpu=ARCEM\fR حاکم باشد. .IP \fB\-mjli\-always\fR 4 .IX Item "-mjli-always" فراخوانی یک تابع را با استفاده از دستورالعمل jli_s اجباری می‌کند. این گزینه تنها برای معماری ARCv2 معتبر است. .IP \fB\-mcpu=\fR\fIcpu\fR 4 .IX Item "-mcpu=cpu" نوع معماری، استفاده از ثبات‌ها، و پارامترهای زمان‌بندی دستورالعمل را برای \fIcpu\fR تعیین می‌کند. همچنین گزینه‌های نام مستعار میان‌بر برای سازگاری با گذشته و سهولت استفاده در دسترس هستند. مقادیر پشتیبانی‌شده برای \fIcpu\fR عبارتند از: .RS 4.IP \fBarc600\fR 4 .IX Item "arc600" کامپایل برای ARC600. نام‌های مستعار: \fB\-mA6\fR، \fB\-mARC600\fR. .IP \fBarc601\fR 4 .IX Item "arc601" کامپایل برای ARC601. نام مستعار: \fB\-mARC601\fR. .IP \fBarc700\fR 4 .IX Item "arc700" کامپایل برای ARC700. نام‌های مستعار: \fB\-mA7\fR، \fB\-mARC700\fR. این حالت پیش‌فرض در هنگام پیکربندی با \fB\-\-with\-cpu=arc700\fR است. .IP \fBarcem\fR 4 .IX Item "arcem" کامپایل برای ARC EM. .IP \fBarchs\fR 4 .IX Item "archs" کامپایل برای ARC HS. .IP \fBem\fR 4 .IX Item "em" کامپایل برای پردازندهٔ ARC EM بدون هیچ افزونهٔ سخت‌افزاری. .IP \fBem4\fR 4 .IX Item "em4" کامپایل برای پردازندهٔ ARC EM4. .IP \fBem4_dmips\fR 4 .IX Item "em4_dmips" کامپایل برای پردازندهٔ ARC EM4 DMIPS. .IP \fBem4_fpus\fR 4 .IX Item "em4_fpus" کامپایل برای پردازندهٔ ARC EM4 DMIPS همراه با افزونهٔ ممیز شناور با دقت یگانه (single\-precision). .IP \fBem4_fpuda\fR 4 .IX Item "em4_fpuda" کامپایل برای پردازندهٔ ARC EM4 DMIPS همراه با دستورالعمل‌های ممیز شناور با دقت یگانه و کمکی دقت دوگانه (double assist). .IP \fBhs\fR 4 .IX Item "hs" کامپایل برای پردازندهٔ ARC HS بدون هیچ افزونهٔ سخت‌افزاری به جز دستورالعمل‌های اتمیک (atomic). .IP \fBhs34\fR 4 .IX Item "hs34" کامپایل برای پردازندهٔ ARC HS34. .IP \fBhs38\fR 4 .IX Item "hs38" کامپایل برای پردازندهٔ ARC HS38. .IP \fBhs38_linux\fR 4 .IX Item "hs38_linux" کامپایل برای پردازندهٔ ARC HS38 با فعال بودن تمامی افزونه‌های سخت‌افزاری. .IP \fBhs4x\fR 4 .IX Item "hs4x" کامپایل برای پردازندهٔ ARC HS4x. .IP \fBhs4xd\fR 4 .IX Item "hs4xd" کامپایل برای پردازندهٔ ARC HS4xD. .IP \fBhs4x_rel31\fR 4 .IX Item "hs4x_rel31" کامپایل برای پردازندهٔ ARC HS4x نگارش 3.10a. .IP \fBarc600_norm\fR 4 .IX Item "arc600_norm" کامپایل برای پردازندهٔ ARC 600 با فعال بودن دستورالعمل‌های \f(CW\*(C`norm\*(C'\fR. .IP \fBarc600_mul32x16\fR 4 .IX Item "arc600_mul32x16" کامپایل برای پردازندهٔ ARC 600 با فعال بودن دستورالعمل‌های \f(CW\*(C`norm\*(C'\fR و ضرب ۳۲ در ۱۶ بیتی. .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 و ضرب ۳۲ در ۱۶ بیتی. .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 از ثبات‌های کمکی (aux) افزونهٔ 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" استفاده از افزونهٔ شرطی بارگذاری/ذخیره قفل‌شده (locked load/store conditional) را برای پیاده‌سازی توابع درونی حافظهٔ اتمیک فعال می‌کند. برای هسته‌های ARC 6xx یا ARC EM در دسترس نیست. .IP \fB\-mdiv\-rem\fR 4 .IX Item "-mdiv-rem" فعال‌سازی دستورالعمل‌های \f(CW\*(C`div\*(C'\fR و \f(CW\*(C`rem\*(C'\fR برای هسته‌های ARCv2. .IP \fB\-mcode\-density\fR 4 .IX Item "-mcode-density" فعال‌سازی دستورالعمل‌های تراکم کد (code density) برای ARC EM. این گزینه به‌طور پیش‌فرض برای ARC HS فعال است. .IP \fB\-mll64\fR 4 .IX Item "-mll64" فعال‌سازی عملیات بارگذاری/ذخیره دوگانه برای هسته‌های 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 ضرب‌کنندهٔ ۱۶ در ۱۶، کاملاً خط‌لوله‌ای (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 ضرب‌کنندهٔ ۳۲ در ۳۲، کاملاً خط‌لوله‌ای (۱ مرحله). دستورالعمل‌های زیر نیز علاوه بر آن فعال می‌شوند: \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، مسدودکننده و ترتیبی. دستورالعمل‌های زیر نیز افزون بر این فعال می‌شوند: \f(CW\*(C`mpy\*(C'\fR، \&\f(CW\*(C`mpyu\*(C'\fR، \f(CW\*(C`mpym\*(C'\fR، \f(CW\*(C`mpymu\*(C'\fR و \f(CW\*(C`mpy_s\*(C'\fR. .IP \fB5\fR 4 .IX Item "5" .PD 0 .IP \fBwlh4\fR 4 .IX Item "wlh4" .PD یک ضرب‌کنندهٔ 16x16، مسدودکننده و ترتیبی. دستورالعمل‌های زیر نیز افزون بر این فعال می‌شوند: \f(CW\*(C`mpy\*(C'\fR، \&\f(CW\*(C`mpyu\*(C'\fR، \f(CW\*(C`mpym\*(C'\fR، \f(CW\*(C`mpymu\*(C'\fR و \f(CW\*(C`mpy_s\*(C'\fR. .IP \fB6\fR 4 .IX Item "6" .PD 0 .IP \fBwlh5\fR 4 .IX Item "wlh5" .PD یک ضرب‌کنندهٔ 32x4، مسدودکننده و ترتیبی. دستورالعمل‌های زیر نیز افزون بر این فعال می‌شوند: \f(CW\*(C`mpy\*(C'\fR، \&\f(CW\*(C`mpyu\*(C'\fR، \f(CW\*(C`mpym\*(C'\fR، \f(CW\*(C`mpymu\*(C'\fR و \f(CW\*(C`mpy_s\*(C'\fR. .IP \fB7\fR 4 .IX Item "7" .PD 0 .IP \fBplus_dmpy\fR 4 .IX Item "plus_dmpy" .PD پشتیبانی از ARC HS SIMD. .IP \fB8\fR 4 .IX Item "8" .PD 0 .IP \fBplus_macd\fR 4 .IX Item "plus_macd" .PD پشتیبانی از ARC HS SIMD. .IP \fB9\fR 4 .IX Item "9" .PD 0 .IP \fBplus_qmacw\fR 4 .IX Item "plus_qmacw" .PD پشتیبانی از ARC HS SIMD. .RE .RS 4 .Sp این گزینه تنها برای هسته‌های ARCv2 در دسترس است. .RE .IP \fB\-mfpu=\fR\fIfpu\fR 4 .IX Item "-mfpu=fpu" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور خاص را برای هسته‌های ARCv2 فعال می‌کند. مقادیر پشتیبانی‌شده برای \fIfpu\fR عبارت‌اند از: .RS 4 .IP \fBfpus\fR 4 .IX Item "fpus" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه را فعال می‌کند. .IP \fBfpud\fR 4 .IX Item "fpud" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت مضاعف را فعال می‌کند. افزونهٔ ممیز شناور با دقت یگانه نیز فعال می‌شود. برای ARC EM در دسترس نیست. .IP \fBfpuda\fR 4 .IX Item "fpuda" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت مضاعف با استفاده از دستورالعمل‌های کمکی دقت مضاعف را فعال می‌کند. افزونهٔ ممیز شناور با دقت یگانه نیز فعال می‌شود. این گزینه تنها برای ARC EM در دسترس است. .IP \fBfpuda_div\fR 4 .IX Item "fpuda_div" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت مضاعف با استفاده از دستورالعمل‌های کمکی دقت مضاعف را فعال می‌کند. افزونه‌های ممیز شناور با دقت یگانه، ریشهٔ دوم و تقسیم نیز فعال می‌شوند. این گزینه تنها برای ARC EM در دسترس است. .IP \fBfpuda_fma\fR 4 .IX Item "fpuda_fma" پشتیبانی از افزونه‌های سخت‌افزاری ممیز شناور با دقت مضاعف با استفاده از دستورالعمل‌های کمکی دقت مضاعف را فعال می‌کند. افزونه‌های سخت‌افزاری ممیز شناور با دقت یگانه و ضرب و جمع ادغام‌شده (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" این گزینه به کامپایلر دستور می‌دهد تا برای یک فایل ثبات ۱۶ مدخلی کد تولید کند. این گزینه ماکروی پیش‌پردازندهٔ \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" برای فعال‌سازی افزونهٔ بارگذاری/ذخیرهٔ شرطی قفل‌شده (locked load/store conditional) به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \&\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" برای فعال‌سازی دستورالعمل افزونهٔ تغییر ترتیب بایت‌ها (swap byte ordering) به اسمبلر منتقل می‌شود. همچنین نماد پیش‌پردازندهٔ \&\f(CW\*(C`_\|_Xswape\*(C'\fR را مقداردهی می‌کند..IP \fB\-mtelephony\fR 4 .IX Item "-mtelephony" به اسمبلر ارسال می‌شود تا دستورالعمل‌های یک‌عملوندی و دو‌عملوندی را برای تلفنی (telephony) فعال کند. همچنین نماد پیش‌پردازندهٔ \&\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) غیرشرطی است. اجرای شرطی فراخوانی توابع سرکوب می‌شود تا امکان استفاده از محدودهٔ ۲۵ بیتی، به‌جای محدودهٔ ۲۱ بیتی با انشعاب و پیوند شرطی، فراهم گردد. این حالت پیش‌فرض برای زنجیره‌های ابزار ساخته‌شده برای اهداف \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" تعاریف داده‌های با دید بیرونی را در یک بخش داده‌های کوچک قرار می‌دهد اگر اندازهٔ آن داده بیشتر از \fInum\fR بایت نباشد. مقدار پیش‌فرض \&\fInum\fR برای هر پیکربندی ARC برابر ۴، یا در صورت وجود عملیات بارگذاری/ذخیرهٔ دوگانه برابر ۸ است. .IP \fB\-mno\-sdata\fR 4 .IX Item "-mno-sdata" مراجع sdata را تولید نکن. این مقدار پیش‌فرض برای زنجیره‌های ابزار ساخته‌شده برای اهداف \f(CW\*(C`arc\-linux\-uclibc\*(C'\fR و \f(CW\*(C`arceb\-linux\-uclibc\*(C'\fR است. .IP \fB\-mvolatile\-cache\fR 4 .IX Item "-mvolatile-cache" از دسترسی‌های حافظهٔ معمولاً کَش‌شده برای ارجاعات volatile استفاده کن. این حالت پیش‌فرض است. .IP \fB\-mno\-volatile\-cache\fR 4 .IX Item "-mno-volatile-cache" دور زدن کَش (cache bypass) را برای ارجاعات volatile فعال کن. .PP گزینه‌های زیر تولید کد را دقیق‌تر تنظیم می‌کنند: .IP \fB\-malign\-call\fR 4 .IX Item "-malign-call" هیچ کاری انجام نمی‌دهد. برای سازگاری رو به عقب حفظ شده است. .IP \fB\-mauto\-modify\-reg\fR 4 .IX Item "-mauto-modify-reg" استفاده از تغییر قبل/بعد با جابه‌جایی ثبات را فعال کن. .IP \fB\-mbbit\-peephole\fR 4 .IX Item "-mbbit-peephole" هیچ کاری انجام نمی‌دهد. برای سازگاری رو به عقب حفظ شده است. .IP \fB\-mno\-brcc\fR 4 .IX Item "-mno-brcc" این گزینه یک گذر ویژهٔ هدف را در \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" از جدول‌های مورد سوئیچ نسبی به PC برای فعال کردن کوتاه‌سازی جدول استفاده کن. این حالت پیش‌فرض برای \fB\-Os\fR است. .IP \fB\-mcompact\-casesi\fR 4 .IX Item "-mcompact-casesi" الگوی فشردهٔ \f(CW\*(C`casesi\*(C'\fR را فعال کن. این مقدار پیش‌فرض برای \fB\-Os\fR، و فقط برای هسته‌های ARCv1 دردسترس است. این گزینه منسوخ شده است. .IP \fB\-mno\-cond\-exec\fR 4 .IX Item "-mno-cond-exec" گذر مختص ARCompact برای تولید دستورالعمل‌های اجرای شرطی را غیرفعال کن. .Sp به دلیل زمان‌بندی شکاف تأخیر (delay slot) و تعاملات میان تعداد عملوندها، اندازه‌های لفظی، طول دستورالعمل‌ها، و پشتیبانی از اجرای شرطی، گذر مستقل از هدف برای تولید اجرای شرطی معمولاً ناکافی است؛ بنابراین پورت ARC یک گذر ویژه را نگه داشته است که تلاش می‌کند فرصت‌های بیشتری برای تولید اجرای شرطی پس از تخصیص ثبات، کوتاه‌سازی انشعاب، و انجام زمان‌بندی شکاف تأخیر بیابد. این گذر به‌طور کلی، اما نه همیشه، کارایی و اندازهٔ کد را بهبود می‌بخشد، هرچند به بهای زمان کامپایل بیشتر تمام می‌شود؛ به همین دلیل گزینه‌ای برای خاموش کردن آن وجود دارد. اگر مشکلی با خارج شدن دستورالعمل‌های فراخوانی از محدودهٔ آفست مجاز به دلیل شرطی شدن آن‌ها دارید، باید به‌جای آن استفاده از \&\fB\-mmedium\-calls\fR را مد نظر قرار دهید. .IP \fB\-mearly\-cbranchsi\fR 4 .IX Item "-mearly-cbranchsi" استفاده از الگوی \f(CW\*(C`cbranchsi\*(C'\fR پیش از reload را فعال کن. .IP \fB\-mexpand\-adddi\fR 4 .IX Item "-mexpand-adddi" گسترش دادن \f(CW\*(C`adddi3\*(C'\fR و \f(CW\*(C`subdi3\*(C'\fR در زمان تولید RTL به \&\f(CW\*(C`add.f\*(C'\fR، \f(CW\*(C`adc\*(C'\fR و غیره. این گزینه منسوخ شده است. .IP \fB\-mindexed\-loads\fR 4 .IX Item "-mindexed-loads" استفاده از بارگذاری‌های نمایه‌شده را فعال کن. این می‌تواند مشکل‌ساز باشد زیرا برخی از بهینه‌سازها فرض می‌کنند که ذخیره‌سازی‌های نمایه‌شده نیز وجود دارند، در حالی که چنین نیست. .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)، مقدمه‌ها و مؤخره‌هایی که باید تعداد زیادی ثبات را ذخیره یا بازیابی کنند اغلب با استفاده از فراخوانی یک تابع ویژه در 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" علاوه بر این، ترازسازی حلقه‌ها و کدِ پس از موانع نادیده گرفته می‌شود. .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" بهینه‌سازی برای نگارش 3.10a از ARC4x. .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 (ARM Options)\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 Procedure Call Standard) برای همه توابع، حتی اگر این کار برای اجرای صحیح کد اکیداً لازم نباشد. مشخص کردن \fB\-fomit\-frame\-pointer\fR با این گزینه باعث می‌شود فریم‌های پشته برای توابع برگ (leaf functions) تولید نشوند. مقدار پیش‌فرض \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 از نظر پیوند (link) سازگار نیستند؛ باید کل برنامه خود را با همان ABI کامپایل کرده و با مجموعه‌ای سازگار از کتابخانه‌ها پیوند دهید. .IP \fB\-mgeneral\-regs\-only\fR 4 .IX Item "-mgeneral-regs-only" تولید کدی که تنها از ثبات‌های همه‌منظوره استفاده می‌کند. این کار مانع از استفاده کامپایلر از ثبات‌های ممیز شناور و Advanced SIMD می‌شود، اما هیچ محدودیتی بر اسمبلر اعمال نخواهد کرد. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد برای پردازنده‌ای که در حالت little\-endian کار می‌کند. این مقدار پیش‌فرض برای تمام پیکربندی‌های استاندارد است. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد برای پردازنده‌ای که در حالت big\-endian کار می‌کند؛ مقدار پیش‌فرض، کامپایل کد برای یک پردازنده little\-endian است. .IP \fB\-mbe8\fR 4 .IX Item "-mbe8" .PD 0 .IP \fB\-mbe32\fR 4 .IX Item "-mbe32" .PD هنگام پیوند دادن یک ایمیج big\-endian، قالب را بین BE8 و BE32 انتخاب می‌کند. این گزینه برای ایمیج‌های little\-endian هیچ تاثیری ندارد و نادیده گرفته می‌شود. مقدار پیش‌فرض به معماری مقصد انتخاب‌شده بستگی دارد. برای معماری ARMv6 و بالاتر، پیش‌فرض BE8 است؛ برای معماری‌های قدیمی‌تر، پیش‌فرض BE32 است. قالب BE32 توسط ARM منسوخ شده است. .IP \fB\-march=\fR\fIname\fR[\fB+extension...\fR] 4 .IX Item "-march=name[+extension...]" این گزینه نام معماری مقصد ARM را مشخص می‌کند. GCC از این نام برای تعیین این‌که چه نوع دستورالعمل‌هایی را می‌تواند هنگام تولید کد اسمبلی ساطع کند استفاده می‌نماید. این گزینه می‌تواند در کنار یا به جای گزینهٔ \fB\-mcpu=\fR استفاده شود. .Sp نام‌های مجاز عبارتند از: \&\fBarmv4t\fR، \&\fBarmv5t\fR، \fBarmv5te\fR، \&\fBarmv6\fR، \fBarmv6j\fR، \fBarmv6k\fR، \fBarmv6kz\fR، \fBarmv6t2\fR، \&\fBarmv6z\fR، \fBarmv6zk\fR، \&\fBarmv7\fR، \fBarmv7\-a\fR، \fBarmv7ve\fR، \&\fBarmv8\-a\fR، \fBarmv8.1\-a\fR، \fBarmv8.2\-a\fR، \fBarmv8.3\-a\fR، \&\fBarmv8.4\-a\fR، \&\fBarmv8.5\-a\fR، \&\fBarmv8.6\-a\fR، \&\fBarmv9\-a\fR، \&\fBarmv7\-r\fR، \&\fBarmv8\-r\fR، \&\fBarmv6\-m\fR، \fBarmv6s\-m\fR، \&\fBarmv7\-m\fR، \fBarmv7e\-m\fR، \&\fBarmv8\-m.base\fR، \fBarmv8\-m.main\fR، \&\fBarmv8.1\-m.main\fR، \&\fBiwmmxt\fR و \fBiwmmxt2\fR. .Sp علاوه بر این، معماری‌های زیر که فاقد پشتیبانی از حالت اجرای Thumb هستند، شناخته می‌شوند اما پشتیبانی از آن‌ها منسوخ شده است: \fBarmv4\fR. .Sp بسیاری از این معماری‌ها از افزونه‌ها پشتیبانی می‌کنند. این افزونه‌ها را می‌توان با افزودن \fB+\fR\fIextension\fR به انتهای نام معماری فعال کرد. گزینه‌های افزونه به ترتیب پردازش می‌شوند و قابلیت‌ها روی هم انباشته می‌گردند. یک افزونه همچنین هر افزونهٔ پایه‌ای را که به آن وابسته است فعال می‌کند. برای مثال، افزونهٔ \fB+crypto\fR همواره افزونهٔ \fB+simd\fR را فعال خواهد کرد. استثنای این ساختار انباشتی برای افزونه‌هایی است که با \&\fB+no...\fR شروع می‌شوند: این افزونه‌ها گزینهٔ مشخص‌شده و هر افزونهٔ دیگری را که ممکن است به وجود آن افزونه وابسته باشد غیرفعال می‌سازند. .Sp برای مثال، عبارت \fB\-march=armv7\-a+simd+nofp+vfpv4\fR معادل نوشتن \fB\-march=armv7\-a+vfpv4\fR است، چرا که گزینهٔ \fB+simd\fR کاملاً توسط گزینهٔ \fB+nofp\fR پس از آن غیرفعال می‌شود. .Sp بیشتر نام‌های افزونه‌ها به صورت عمومی نام‌گذاری شده‌اند، اما تاثیری وابسته به معماری مورد استفاده دارند. به عنوان مثال، گزینهٔ \fB+simd\fR می‌تواند برای هر دو معماری \fBarmv7\-a\fR و \&\fBarmv8\-a\fR به کار رود، اما افزونه‌های اصلی Advanced SIMD (Neon) مربوط به ARMv7\-A را برای \fBarmv7\-a\fR، و گونهٔ ARMv8\-A را برای \fBarmv8\-a\fR فعال خواهد کرد. .Sp جدول زیر افزونه‌های پشتیبانی‌شده را برای هر معماری فهرست می‌کند. معماری‌هایی که نام برده نشده‌اند از هیچ افزونه‌ای پشتیبانی نمی‌کنند. .RS 4.IP \fBarmv5te\fR 4 .IX Item "armv5te" .PD 0 .IP \fBarmv6\fR 4 .IX Item "armv6" .IP \fBarmv6j\fR 4 .IX Item "armv6j" .IP \fBarmv6k\fR 4 .IX Item "armv6k" .IP \fBarmv6kz\fR 4 .IX Item "armv6kz" .IP \fBarmv6t2\fR 4 .IX Item "armv6t2" .IP \fBarmv6z\fR 4 .IX Item "armv6z" .IP \fBarmv6zk\fR 4 .IX Item "armv6zk" .RS 4 .IP \fB+fp\fR 4 .IX Item "+fp" .PD دستورالعمل‌های ممیز شناور VFPv2. افزونه \fB+vfpv2\fR می‌تواند به عنوان یک نام مستعار برای این افزونه به کار رود. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال کردن دستورالعمل‌های ممیز شناور. .RE .RS 4 .RE .IP \fBarmv7\fR 4 .IX Item "armv7" زیرمجموعه مشترک معماری‌های ARMv7\-A، ARMv7\-R و ARMv7\-M. .RS 4 .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور VFPv3 با ۱۶ ثبات دقت مضاعف (double\-precision). افزونه \fB+vfpv3\-d16\fR می‌تواند به عنوان یک نام مستعار برای این افزونه به کار رود. توجه داشته باشید که ممیز شناور توسط معماری پایه ARMv7\-M پشتیبانی نمی‌شود، اما با هر دو معماری ARMv7\-A و ARMv7\-R سازگار است. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال کردن دستورالعمل‌های ممیز شناور. .RE .RS 4 .RE .IP \fBarmv7\-a\fR 4 .IX Item "armv7-a" .RS 4 .PD 0 .IP \fB+mp\fR 4 .IX Item "+mp" .PD افزونه چندپردازشی (multiprocessing). .IP \fB+sec\fR 4 .IX Item "+sec" افزونه امنیتی. .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور VFPv3 با ۱۶ ثبات دقت مضاعف. افزونه \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 با ۳۲ ثبات دقت مضاعف. .IP \fB+vfpv3\-d16\-fp16\fR 4 .IX Item "+vfpv3-d16-fp16" دستورالعمل‌های ممیز شناور VFPv3 با ۱۶ ثبات دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه (half\-precision). .IP \fB+vfpv3\-fp16\fR 4 .IX Item "+vfpv3-fp16" دستورالعمل‌های ممیز شناور VFPv3 با ۳۲ ثبات دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه (half\-precision). .IP \fB+vfpv4\-d16\fR 4 .IX Item "+vfpv4-d16" دستورالعمل‌های ممیز شناور VFPv4 با ۱۶ ثبات دقت مضاعف. .IP \fB+vfpv4\fR 4 .IX Item "+vfpv4" دستورالعمل‌های ممیز شناور VFPv4 با ۳۲ ثبات دقت مضاعف. .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 با ۱۶ ثبات دقت مضاعف. افزونه \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 با ۱۶ ثبات دقت مضاعف. .IP \fB+vfpv3\fR 4 .IX Item "+vfpv3" دستورالعمل‌های ممیز شناور VFPv3 با ۳۲ ثبات دقت مضاعف. .IP \fB+vfpv3\-d16\-fp16\fR 4 .IX Item "+vfpv3-d16-fp16" دستورالعمل‌های ممیز شناور VFPv3 با ۱۶ ثبات دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه. .IP \fB+vfpv3\-fp16\fR 4 .IX Item "+vfpv3-fp16" دستورالعمل‌های ممیز شناور VFPv3 با ۳۲ ثبات دقت مضاعف و عملیات تبدیل ممیز شناور با دقت نیمه. .IP \fB+vfpv4\-d16\fR 4 .IX Item "+vfpv4-d16" دستورالعمل‌های ممیز شناور VFPv4 با ۱۶ ثبات دقت مضاعف. .IP \fB+vfpv4\fR 4 .IX Item "+vfpv4" دستورالعمل‌های ممیز شناور VFPv4 با ۳۲ ثبات دقت مضاعف. .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" دستورالعمل‌های محدودیت پیش‌بینی اجرا و داده (Execution and Data Prediction Restriction). .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. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8.4\-a\fR 4 .IX Item "armv8.4-a" .RS 4 .PD 0 .IP \fB+fp16\fR 4 .IX Item "+fp16" .PD دستورالعمل‌های پردازش دادهٔ ممیز شناور با دقت نیمه. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور و نیز افزونهٔ Dot Product و افزونهٔ fmla ممیز شناور با دقت نیمه را فعال می‌کند. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور در ARMv8.3\-A و همچنین افزونهٔ Dot Product. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور و نیز افزونهٔ Dot Product را فعال می‌کند. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" غیرفعال‌سازی افزونهٔ رمزنگاری. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال‌سازی دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری. .IP \fB+sb\fR 4 .IX Item "+sb" دستورالعمل سد گمانه‌زنی (Speculation Barrier). .IP \fB+predres\fR 4 .IX Item "+predres" دستورالعمل‌های محدودسازی پیش‌بینی داده و اجرا. .IP \fB+i8mm\fR 4 .IX Item "+i8mm" دستورالعمل‌های ضرب ماتریسی اعداد صحیح ۸\-بیتی. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+bf16\fR 4 .IX Item "+bf16" دستورالعمل‌های ممیز شناور با دقت نیمه Brain. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8.5\-a\fR 4 .IX Item "armv8.5-a" .RS 4 .PD 0 .IP \fB+fp16\fR 4 .IX Item "+fp16" .PD دستورالعمل‌های پردازش دادهٔ ممیز شناور با دقت نیمه. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور و نیز افزونهٔ Dot Product و افزونهٔ fmla ممیز شناور با دقت نیمه را فعال می‌کند. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور در ARMv8.3\-A و همچنین افزونهٔ Dot Product. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور و نیز افزونهٔ Dot Product را فعال می‌کند. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" غیرفعال‌سازی افزونهٔ رمزنگاری. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال‌سازی دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری. .IP \fB+i8mm\fR 4 .IX Item "+i8mm" دستورالعمل‌های ضرب ماتریسی اعداد صحیح ۸\-بیتی. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+bf16\fR 4 .IX Item "+bf16" دستورالعمل‌های ممیز شناور با دقت نیمه Brain. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8.6\-a\fR 4 .IX Item "armv8.6-a" .RS 4 .PD 0 .IP \fB+fp16\fR 4 .IX Item "+fp16" .PD دستورالعمل‌های پردازش دادهٔ ممیز شناور با دقت نیمه. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور و نیز افزونهٔ Dot Product و افزونهٔ fmla ممیز شناور با دقت نیمه را فعال می‌کند. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور در ARMv8.3\-A و همچنین افزونهٔ Dot Product. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور و نیز افزونهٔ Dot Product را فعال می‌کند. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" غیرفعال‌سازی افزونهٔ رمزنگاری. .IP \fB+nofp\fR 4 .IX Item "+nofp" غیرفعال‌سازی دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری. .IP \fB+i8mm\fR 4 .IX Item "+i8mm" دستورالعمل‌های ضرب ماتریسی اعداد صحیح ۸\-بیتی. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .IP \fB+bf16\fR 4 .IX Item "+bf16" دستورالعمل‌های ممیز شناور با دقت نیمه Brain. این گزینه همچنین دستورالعمل‌های Advanced SIMD و ممیز شناور را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv7\-r\fR 4 .IX Item "armv7-r" .RS 4 .PD 0 .IP \fB+fp.sp\fR 4 .IX Item "+fp.sp" .PD دستورالعمل‌های ممیز شناور VFPv3 با دقت تکی (single\-precision). افزونهٔ \&\fB+vfpv3xd\fR می‌تواند به عنوان نام مستعاری برای این افزونه به کار رود. .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور VFPv3 با ۱۶ ثبات دقت دوگانه (double\-precision). افزونهٔ +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\-state..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 با دقت یگانه (single\-precision). .IP \fB+fpv5\fR 4 .IX Item "+fpv5" دستورالعمل‌های ممیز شناور FPv5 با دقت یگانه. .IP \fB+fp.dp\fR 4 .IX Item "+fp.dp" دستورالعمل‌های ممیز شناور FPv5 با دقت یگانه و دوگانه (double\-precision). .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" افزونه مسیر داده سفارشی (CDE) را روی پردازنده‌های کمکی (coprocessors) انتخاب‌شده بر اساس اعداد داده‌شده در گزینه‌ها در بازهٔ ۰ تا ۷ فعال می‌کند. .IP \fB+pacbti\fR 4 .IX Item "+pacbti" افزونه احراز هویت اشاره‌گر و شناسایی مقصد انشعاب (PACBTI) را فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8\-m.main\fR 4 .IX Item "armv8-m.main" .RS 4 .PD 0 .IP \fB+dsp\fR 4 .IX Item "+dsp" .PD دستورالعمل‌های DSP. .IP \fB+nodsp\fR 4 .IX Item "+nodsp" افزونه DSP را غیرفعال می‌کند. .IP \fB+fp\fR 4 .IX Item "+fp" دستورالعمل‌های ممیز شناور با دقت یگانه. .IP \fB+fp.dp\fR 4 .IX Item "+fp.dp" دستورالعمل‌های ممیز شناور با دقت یگانه و دوگانه. .IP \fB+nofp\fR 4 .IX Item "+nofp" افزونه ممیز شناور را غیرفعال می‌کند. .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4 .IX Item "+cdecp0, +cdecp1, ... , +cdecp7" افزونه مسیر داده سفارشی (CDE) را روی پردازنده‌های کمکی انتخاب‌شده بر اساس اعداد داده‌شده در گزینه‌ها در بازهٔ ۰ تا ۷ فعال می‌کند. .RE .RS 4 .RE .IP \fBarmv8\-r\fR 4 .IX Item "armv8-r" .RS 4 .PD 0 .IP \fB+crc\fR 4 .IX Item "+crc" .PD دستورالعمل‌های بررسی افزونگی چرخشی (CRC). .IP \fB+fp.sp\fR 4 .IX Item "+fp.sp" دستورالعمل‌های ممیز شناور FPv5 با دقت یگانه. .IP \fB+simd\fR 4 .IX Item "+simd" دستورالعمل‌های Advanced SIMD و ممیز شناور ARMv8\-A. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری. .IP \fB+nocrypto\fR 4 .IX Item "+nocrypto" دستورالعمل‌های رمزنگاری را غیرفعال می‌کند. .IP \fB+nofp\fR 4 .IX Item "+nofp" دستورالعمل‌های ممیز شناور، Advanced SIMD و رمزنگاری را غیرفعال می‌کند. .RE .RS 4 .RE .RE .RS 4 .Sp گزینهٔ \&\fB\-march=native\fR باعث می‌شود کامپایلر معماری رایانهٔ میزبان ساخت را به‌طور خودکار شناسایی کند. در حال حاضر، این قابلیت تنها در GNU/Linux پشتیبانی می‌شود و همهٔ معماری‌ها شناخته نمی‌شوند. اگر تشخیص خودکار ناموفق باشد، این گزینه هیچ اثری نخواهد داشت. .Sp گزینهٔ \&\fB\-march=unset\fR باعث می‌شود کامپایلر هرگونه گزینهٔ \&\fB\-march=...\fR را که پیش‌تر در خط فرمان آمده نادیده بگیرد و به گونه‌ای رفتار کند که گویی این گزینه اصلاً ارسال نشده است. این ویژگی برای جلوگیری از هشدارهای مربوط به تداخل گزینه‌های پردازنده (CPU) و معماری در شرایطی که هر دو مشخصات معماری متفاوتی تولید می‌کنند، مفید است. .RE .IP \fB\-mtune=\fR\fIname\fR 4 .IX Item "-mtune=name" این گزینه نام پردازندهٔ ARM مقصد را مشخص می‌کند که GCC باید کارایی کد را برای آن تنظیم (tune) کند. برای برخی از پیاده‌سازی‌های ARM، می‌توان با استفاده از این گزینه به کارایی بهتری دست یافت. نام‌های مجاز عبارتند از: \fBarm7tdmi\fR، \fBarm7tdmi\-s\fR، \fBarm710t\fR، \&\fBarm720t\fR، \fBarm740t\fR، \fBstrongarm\fR، \fBstrongarm110\fR، \&\fBstrongarm1100\fR، \fBstrongarm1110\fR، \fBarm8\fR، \fBarm810\fR، \&\fBarm9\fR، \fBarm9e\fR، \fBarm920\fR، \fBarm920t\fR، \fBarm922t\fR، \&\fBarm946e\-s\fR، \fBarm966e\-s\fR، \fBarm968e\-s\fR، \fBarm926ej\-s\fR، \&\fBarm940t\fR، \fBarm9tdmi\fR، \fBarm10tdmi\fR، \fBarm1020t\fR، \&\fBarm1026ej\-s\fR، \fBarm10e\fR، \fBarm1020e\fR، \fBarm1022e\fR، \&\fBarm1136j\-s\fR، \fBarm1136jf\-s\fR، \fBmpcore\fR، \fBmpcorenovfp\fR، \&\fBarm1156t2\-s\fR، \fBarm1156t2f\-s\fR، \fBarm1176jz\-s\fR، \fBarm1176jzf\-s\fR، \&\fBgeneric\-armv7\-a\fR، \fBcortex\-a5\fR، \fBcortex\-a7\fR، \fBcortex\-a8\fR، \&\fBcortex\-a9\fR، \fBcortex\-a12\fR، \fBcortex\-a15\fR، \fBcortex\-a17\fR، \&\fBcortex\-a32\fR، \fBcortex\-a35\fR، \fBcortex\-a53\fR، \fBcortex\-a55\fR، \&\fBcortex\-a57\fR، \fBcortex\-a72\fR، \fBcortex\-a73\fR، \fBcortex\-a75\fR، \&\fBcortex\-a76\fR، \fBcortex\-a76ae\fR، \fBcortex\-a77\fR، \&\fBcortex\-a78\fR، \fBcortex\-a78ae\fR، \fBcortex\-a78c\fR، \fBcortex\-a710\fR، \&\fBares\fR، \fBcortex\-r4\fR، \fBcortex\-r4f\fR، \fBcortex\-r5\fR، \&\fBcortex\-r7\fR، \fBcortex\-r8\fR، \fBcortex\-r52\fR، \fBcortex\-r52plus\fR، \&\fBcortex\-m0\fR، \fBcortex\-m0plus\fR، \fBcortex\-m1\fR، \fBcortex\-m3\fR، \&\fBcortex\-m4\fR، \fBcortex\-m7\fR، \fBcortex\-m23\fR، \fBcortex\-m33\fR، \&\fBcortex\-m35p\fR، \fBcortex\-m52\fR، \fBcortex\-m55\fR، \fBcortex\-m85\fR، \fBcortex\-x1\fR، \&\fBcortex\-x1c\fR، \fBcortex\-m1.small\-multiply\fR، \fBcortex\-m0.small\-multiply\fR، \&\fBcortex\-m0plus.small\-multiply\fR، \fBexynos\-m1\fR، \fBmarvell\-pj4\fR، \&\fBneoverse\-n1\fR، \fBneoverse\-n2\fR، \fBneoverse\-v1\fR، \fBxscale\fR، \&\fBiwmmxt\fR، \fBiwmmxt2\fR، \fBep9312\fR، \fBfa526\fR، \fBfa626\fR، \&\fBfa606te\fR، \fBfa626te\fR، \fBfmp626\fR، \fBfa726te\fR، \fBstar\-mc1\fR، \&\fBxgene1\fR. .Sp علاوه بر این، این گزینه می‌تواند مشخص کند که GCC کارایی کد را برای یک سامانهٔ big.LITTLE تنظیم کند. نام‌های مجاز عبارتند از: \&\fBcortex\-a15.cortex\-a7\fR، \fBcortex\-a17.cortex\-a7\fR، \&\fBcortex\-a57.cortex\-a53\fR، \fBcortex\-a72.cortex\-a53\fR، \&\fBcortex\-a72.cortex\-a35\fR، \fBcortex\-a73.cortex\-a53\fR، \&\fBcortex\-a75.cortex\-a55\fR، \fBcortex\-a76.cortex\-a55\fR. .Sp گزینهٔ \&\fB\-mtune=generic\-\fR\fIarch\fR مشخص می‌کند که GCC باید کارایی را برای ترکیبی از پردازنده‌های درون معماری \fIarch\fR تنظیم کند. هدف، تولید کدی است که روی رایج‌ترین پردازنده‌های کنونی به‌خوبی اجرا شود، و تعادلی بین بهینه‌سازی‌هایی که به نفع برخی از پردازنده‌ها در آن محدوده هستند و اجتناب از افت کارایی در سایر پردازنده‌ها ایجاد کند. اثرات این گزینه ممکن است در نسخه‌های آیندهٔ GCC با تغییر و جایگزینی مدل‌های پردازنده تغییر یابد. .Sp گزینهٔ \&\fB\-mtune\fR همان گزینه‌های افزونهٔ مربوط به \fB\-mcpu\fR را می‌پذیرد، اما این گزینه‌های افزونه بر تنظیم کارایی کد تولیدشده تأثیری ندارند. .Sp گزینهٔ \&\fB\-mtune=native\fR باعث می‌شود کامپایلر پردازندهٔ رایانهٔ میزبان ساخت را به‌طور خودکار شناسایی کند. در حال حاضر، این قابلیت تنها در 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 موجود را بازنویسی (override) خواهد کرد. .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 (MVE) را در \&\fBcortex\-m52\fR، \fBcortex\-m55\fR و \fBcortex\-m85\fR غیرفعال می‌کند. .IP \fB+nopacbti\fR 4 .IX Item "+nopacbti" افزونه احراز اصالت اشاره‌گر و شناسایی مقصد پرش (Pointer Authentication and Branch Target Identification Extension) را در \fBcortex\-m52\fR و \fBcortex\-m85\fR غیرفعال می‌کند. .IP \fB+nomve\fR 4 .IX Item "+nomve" دستورالعمل‌های عدد صحیح و ممیز شناور با دقت یگانه مربوط به افزونه برداری نمایه M (MVE) را در \fBcortex\-m52\fR، \fBcortex\-m55\fR و \&\fBcortex\-m85\fR غیرفعال می‌کند. .IP \fB+nomve.fp\fR 4 .IX Item "+nomve.fp" دستورالعمل‌های ممیز شناور با دقت یگانه مربوط به افزونه برداری نمایه M (MVE) را در \fBcortex\-m52\fR، \fBcortex\-m55\fR و \fBcortex\-m85\fR غیرفعال می‌کند. .IP "\fB+cdecp0, +cdecp1, ... , +cdecp7\fR" 4 .IX Item "+cdecp0, +cdecp1, ... , +cdecp7" افزونه سفارشی مسیر داده (CDE) را روی هم‌پردازنده‌های انتخاب‌شده بر اساس اعداد ارائه‌شده در گزینه‌ها در محدوده ۰ تا ۷ در \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" بخش دقت مضاعف دستورالعمل‌های ممیز شناور را در \fBcortex\-r5\fR، \fBcortex\-r7\fR، \fBcortex\-r8\fR، \fBcortex\-r52\fR، \&\fBcortex\-r52plus\fR و \fBcortex\-m7\fR غیرفعال می‌کند. .IP \fB+nosimd\fR 4 .IX Item "+nosimd" دستورالعمل‌های SIMD (اما نه ممیز شناور) را در \&\fBgeneric\-armv7\-a\fR، \fBcortex\-a5\fR، \fBcortex\-a7\fR و \fBcortex\-a9\fR غیرفعال می‌کند. .IP \fB+crypto\fR 4 .IX Item "+crypto" دستورالعمل‌های رمزنگاری را در \fBcortex\-a32\fR، \&\fBcortex\-a35\fR، \fBcortex\-a53\fR، \fBcortex\-a55\fR، \fBcortex\-a57\fR، \&\fBcortex\-a72\fR، \fBcortex\-a73\fR، \fBcortex\-a75\fR، \fBexynos\-m1\fR، \&\fBxgene1\fR، \fBcortex\-a57.cortex\-a53\fR، \fBcortex\-a72.cortex\-a53\fR، \&\fBcortex\-a73.cortex\-a35\fR، \fBcortex\-a73.cortex\-a53\fR و \&\fBcortex\-a75.cortex\-a55\fR فعال می‌کند. .RE .RS 4 .Sp علاوه بر این، شبه‌هدف \fBgeneric\-armv7\-a\fR به‌طور پیش‌فرض از VFPv3 با ۱۶ ثبات دقت مضاعف استفاده می‌کند. این هدف از گزینه‌های افزونه زیر پشتیبانی می‌کند: \fBmp\fR، \fBsec\fR، \fBvfpv3\-d16\fR، \&\fBvfpv3\fR، \fBvfpv3\-d16\-fp16\fR، \fBvfpv3\-fp16\fR، \&\fBvfpv4\-d16\fR، \fBvfpv4\fR، \fBneon\fR، \fBneon\-vfpv3\fR، \&\fBneon\-fp16\fR، \fBneon\-vfpv4\fR. معانی آن‌ها مشابه با افزونه‌های \fB\-march=armv7\-a\fR است. .Sp گزینه \&\fB\-mcpu=generic\-\fR\fIarch\fR نیز مجاز است و معادل \fB\-march=\fR\fIarch\fR \fB\-mtune=generic\-\fR\fIarch\fR می‌باشد. برای اطلاعات بیشتر \fB\-mtune\fR را ببینید. .Sp گزینه \&\fB\-mcpu=native\fR باعث می‌شود کامپایلر پردازنده رایانه ساخت را به‌طور خودکار شناسایی کند. در حال حاضر، این قابلیت تنها در GNU/Linux پشتیبانی می‌شود و همه معماری‌ها نیز شناسایی نمی‌شوند. اگر تشخیص خودکار ناموفق باشد، این گزینه هیچ اثری نخواهد داشت. .Sp گزینه \&\fB\-mcpu=unset\fR باعث می‌شود کامپایلر هر گزینه \fB\-mcpu=...\fR که پیش‌تر در خط فرمان آمده است را نادیده بگیرد و طوری رفتار کند که گویی این گزینه هرگز ارسال نشده است. این ویژگی برای جلوگیری از هشدارهای مربوط به تداخل گزینه‌های CPU و معماری، زمانی که هر دو مشخصات معماری متفاوتی ایجاد می‌کنند، مفید است. .RE .IP \fB\-mfpu=\fR\fIname\fR 4 .IX Item "-mfpu=name" سخت‌افزار ممیز شناور (یا شبیه‌ساز سخت‌افزاری) موجود در هدف را مشخص می‌کند. نام‌های مجاز عبارتند از: \fBauto\fR، \fBvfpv2\fR، \&\fBvfpv3\fR، \&\fBvfpv3\-fp16\fR، \fBvfpv3\-d16\fR، \fBvfpv3\-d16\-fp16\fR، \fBvfpv3xd\fR، \&\fBvfpv3xd\-fp16\fR، \fBneon\-vfpv3\fR، \fBneon\-fp16\fR، \fBvfpv4\fR، \&\fBvfpv4\-d16\fR، \fBfpv4\-sp\-d16\fR، \fBneon\-vfpv4\fR، \&\fBfpv5\-d16\fR، \fBfpv5\-sp\-d16\fR، \&\fBfp\-armv8\fR، \fBneon\-fp\-armv8\fR و \fBcrypto\-neon\-fp\-armv8\fR. توجه داشته باشید که \fBneon\fR یک نام مستعار برای \fBneon\-vfpv3\fR و \fBvfp\fR یک نام مستعار برای \fBvfpv2\fR است. .Sp تنظیم \fBauto\fR پیش‌فرض و خاص است. این تنظیم باعث می‌شود کامپایلر دستورالعمل‌های ممیز شناور و Advanced SIMD را بر اساس تنظیمات \fB\-mcpu\fR و \fB\-march\fR انتخاب کند. .Sp اگر سخت‌افزار ممیز شناور انتخاب‌شده شامل افزونه NEON باشد (مثلاً \fB\-mfpu=neon\fR)، توجه داشته باشید که عملیات ممیز شناور توسط گذر بردارسازی خودکار GCC تولید نمی‌شوند مگر اینکه \fB\-funsafe\-math\-optimizations\fR نیز مشخص شده باشد. دلیل آن این است که سخت‌افزار NEON استاندارد IEEE 754 را برای محاسبات ممیز شناور به‌طور کامل پیاده‌سازی نمی‌کند (به‌ویژه با مقادیر غیرعادی/denormal مانند صفر رفتار می‌شود)، بنابراین استفاده از دستورالعمل‌های NEON ممکن است منجر به کاهش دقت شود. .Sp همچنین می‌توانید نام fpu را در سطح تابع با استفاده از صفت‌های تابع \f(CWtarget("fpu=")\fR یا عملگرهای عملگر pragma تنظیم کنید. .IP \fB\-mfp16\-format=\fR\fIname\fR 4 .IX Item "-mfp16-format=name" قالب نوع ممیز شناور با دقت نیمه \f(CW\*(C`_\|_fp16\*(C'\fR را تعیین می‌کند. نام‌های مجاز عبارتند از \fBnone\fR، \fBieee\fR و \fBalternative\fR؛ پیش‌فرض \fBnone\fR است که در این حالت نوع \f(CW\*(C`_\|_fp16\*(C'\fR تعریف نمی‌شود. .IP \fB\-mstructure\-size\-boundary=\fR\fIn\fR 4 .IX Item "-mstructure-size-boundary=n" اندازه تمام ساختارها (structures) و اجتماع‌ها (unions) به مضربی از تعداد بیت‌های تعیین‌شده توسط این گزینه به بالا گرد می‌شود. مقادیر مجاز ۸، ۳۲ و ۶۴ هستند. مقدار پیش‌فرض برای زنجیره‌ابزارهای مختلف متفاوت است. برای زنجیره‌ابزار هدف‌گیرنده COFF مقدار پیش‌فرض ۸ است. مقدار ۶۴ تنها در صورتی مجاز است که ABI زیربنایی از آن پشتیبانی کند. .Sp تعیین عدد بزرگ‌تر می‌تواند کدی سریع‌تر و کارآمدتر تولید کند، اما ممکن است اندازه برنامه را نیز افزایش دهد. مقادیر مختلف بالقوه با یکدیگر ناسازگارند. کدی که با یک مقدار کامپایل شده است، در صورت تبادل اطلاعات با استفاده از ساختارها یا اجتماع‌ها، لزوماً نمی‌تواند انتظار داشته باشد با کد یا کتابخانه‌های کامپایل‌شده با مقدار دیگر کار کند. .Sp این گزینه منسوخ شده است. .IP \fB\-mabort\-on\-noreturn\fR 4 .IX Item "-mabort-on-noreturn" یک فراخوانی به تابع \f(CW\*(C`abort\*(C'\fR در انتهای یک تابع \f(CW\*(C`noreturn\*(C'\fR تولید می‌کند. در صورتی که تابع تلاش کند بازگردد، این فراخوانی اجرا می‌شود. .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" .PD 0 .IP \fB\-mno\-long\-calls\fR 4 .IX Item "-mno-long-calls" .PD به کامپایلر اعلام می‌کند که فراخوانی توابع را ابتدا با بارگذاری آدرس تابع در یک ثبات و سپس اجرای یک فراخوانی زیرروال روی این ثبات انجام دهد. این سوییچ زمانی لازم است که تابع هدف خارج از محدوده آدرس‌دهی ۶۴ مگابایتی نسخه مبتنی بر آفست دستور فراخوانی زیرروال قرار داشته باشد. .Sp حتی در صورت فعال بودن این سوییچ، همه فراخوانی‌های تابع به فراخوانی‌های طولانی (long calls) تبدیل نمی‌شوند. قاعده تجربی این است که توابع ایستا (static)، توابعی که دارای صفت \f(CW\*(C`short_call\*(C'\fR هستند، توابعی که در محدوده رهنمود \f(CW\*(C`#pragma no_long_calls\*(C'\fR قرار دارند، و توابعی که تعاریف آن‌ها پیش‌تر در واحد کامپایل جاری کامپایل شده است، به فراخوانی‌های طولانی تبدیل نمی‌شوند. استثناهای این قاعده عبارتند از تعاریف توابع ضعیف (weak)، توابعی با صفت \f(CW\*(C`long_call\*(C'\fR یا صفت \f(CW\*(C`section\*(C'\fR، و توابعی که در محدوده رهنمود \f(CW\*(C`#pragma long_calls\*(C'\fR قرار دارند، که همیشه به فراخوانی طولانی تبدیل می‌شوند. .Sp این قابلیت به‌طور پیش‌فرض فعال نیست. تعیین \fB\-mno\-long\-calls\fR رفتار پیش‌فرض را بازیابی می‌کند، درست مانند قرار دادن فراخوانی‌های تابع در محدوده یک رهنمود \f(CW\*(C`#pragma long_calls_off\*(C'\fR. توجه داشته باشید که این سوییچ‌ها هیچ اثری بر نحوه تولید کد توسط کامپایلر برای مدیریت فراخوانی توابع از طریق اشاره‌گرهای تابع ندارند. .IP \fB\-msingle\-pic\-base\fR 4 .IX Item "-msingle-pic-base" با ثبات مورد استفاده برای آدرس‌دهی PIC به عنوان فقط‌خواندنی رفتار می‌کند، به جای آنکه آن را در مقدمه (prologue) هر تابع بارگذاری کند. سیستم زمان اجرا مسئول مقداردهی اولیه این ثبات با یک مقدار مناسب پیش از شروع اجرا است. .IP \fB\-mpic\-register=\fR\fIreg\fR 4 .IX Item "-mpic-register=reg" ثبات مورد استفاده برای آدرس‌دهی PIC را تعیین می‌کند. برای حالت پایه PIC استاندارد، پیش‌فرض هر ثبات مناسبی است که توسط کامپایلر تعیین شود. برای حالت تک‌پایه PIC، اگر هدف مبتنی بر EABI باشد یا بررسی پشته (stack-checking) فعال باشد، پیش‌فرض \fBR9\fR است، در غیر این صورت پیش‌فرض \fBR10\fR است. .IP \fB\-mpic\-data\-is\-text\-relative\fR 4 .IX Item "-mpic-data-is-text-relative" فرض می‌کند که جابه‌جایی میان بخش‌های متن (text) و داده (data) در زمان پیوند ایستا ثابت است. این امر اجازه می‌دهد از عملیات آدرس‌دهی وابسته به PC برای دسترسی به داده‌هایی که مشخص است در بخش داده قرار دارند استفاده شود. برای اهداف غیر VxWorks RTP، این گزینه به‌طور پیش‌فرض فعال است. هنگام غیرفعال شدن در چنین اهدافی، گزینه \fB\-msingle\-pic\-base\fR به‌طور پیش‌فرض فعال خواهد شد. .IP \fB\-mpoke\-function\-name\fR 4 .IX Item "-mpoke-function-name" نام هر تابع را مستقیماً پیش از مقدمه تابع، درون بخش متن می‌نویسد. کد تولیدشده مشابه زیر است: .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 در توابع پی‌درپی. این گزینه برای آزمون رگرسیونِ تولید کد ترکیبی Thumb/ARM فراهم شده است و برای استفادهٔ عادی در کامپایل کد در نظر گرفته نشده است. .IP \fB\-mtpcs\-frame\fR 4 .IX Item "-mtpcs-frame" تولید یک فریم پشته (stack frame) سازگار با استاندارد فراخوانی رویهٔ Thumb (Thumb Procedure Call Standard) برای تمام توابع غیربرگ (non\-leaf). (تابع برگ، تابعی است که هیچ تابع دیگری را فراخوانی نمی‌کند.) پیش‌فرض \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" به تمام توابع با دید بیرونی (externally visible) در فایل در حال کامپایل، یک سرآیند مجموعه دستورالعمل ARM اختصاص می‌دهد که پیش از اجرای باقی تابع، به حالت Thumb تغییر وضعیت می‌دهد. این امر امکان فراخوانی این توابع را از کدهای غیر\-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" تعیین مدل دسترسی به اشاره‌گر حافظهٔ محلی نخ (TLS). مدل \&\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 اولیه (initial exec) و محلی (local exec) تحت تأثیر این گزینه قرار نمی‌گیرند و همیشه از طرح اصلی استفاده می‌کنند. .IP \fB\-mword\-relocations\fR 4 .IX Item "-mword-relocations" فقط برای مقادیر به اندازهٔ کلمه (word\-sized) بازنشانی‌های مطلق (مانند R_ARM_ABS32) تولید می‌کند. این گزینه به‌طور پیش‌فرض در مقاصدی (uClinux، SymbianOS) که بارگذار زمان اجرا این محدودیت را تحمیل می‌کند، و همچنین هنگامی که \fB\-fpic\fR یا \fB\-fPIC\fR مشخص شده باشد فعال است. این گزینه با \fB\-mslow\-flash\-data\fR تداخل دارد. .IP \fB\-mfix\-cortex\-m3\-ldrd\fR 4 .IX Item "-mfix-cortex-m3-ldrd" برخی از هسته‌های Cortex\-M3 می‌توانند هنگام استفاده از دستورالعمل‌های \f(CW\*(C`ldrd\*(C'\fR با ثبات‌های مقصد و پایهٔ هم‌پوشان، موجب آسیب‌دیدگی داده‌ها شوند. این گزینه از تولید این دستورالعمل‌ها جلوگیری می‌کند. این گزینه به‌طور پیش‌فرض هنگامی که \&\fB\-mcpu=cortex\-m3\fR مشخص شده باشد فعال است. .IP \fB\-mfix\-cortex\-a57\-aes\-1742098\fR 4 .IX Item "-mfix-cortex-a57-aes-1742098" .PD 0 .IP \fB\-mno\-fix\-cortex\-a57\-aes\-1742098\fR 4 .IX Item "-mno-fix-cortex-a57-aes-1742098" .IP \fB\-mfix\-cortex\-a72\-aes\-1655431\fR 4 .IX Item "-mfix-cortex-a72-aes-1655431" .IP \fB\-mno\-fix\-cortex\-a72\-aes\-1655431\fR 4 .IX Item "-mno-fix-cortex-a72-aes-1655431" .PD فعال‌سازی (یا غیرفعال‌سازی) کاهش اثر یک خطای سخت‌افزاری (erratum) در Cortex\-A57 و Cortex\-A72 که بر دستورالعمل‌های رمزنگاری AES تأثیر می‌گذارد. این گزینه به‌طور پیش‌فرض هنگامی که هر یک از گزینه‌های \fB\-mcpu=cortex\-a57\fR یا \&\fB\-mcpu=cortex\-a72\fR مشخص شده باشند فعال است. .IP \fB\-munaligned\-access\fR 4 .IX Item "-munaligned-access" .PD 0 .IP \fB\-mno\-unaligned\-access\fR 4 .IX Item "-mno-unaligned-access" .PD خواندن و نوشتن مقادیر ۱۶ و ۳۲ بیتی از نشانی‌هایی را که تراز ۱۶ یا ۳۲ بیتی ندارند فعال (یا غیرفعال) می‌کند. دسترسی ناتراز به‌طور پیش‌فرض برای تمام معماری‌های پیش از ARMv6، تمام معماری‌های ARMv6\-M و برای معماری‌های ARMv8\-M Baseline غیرفعال بوده، و برای تمام معماری‌های دیگر فعال است. اگر دسترسی ناتراز فعال نباشد، دسترسی به کلمات در ساختارهای دادهٔ بسته‌بندی‌شده (packed) به‌صورت تک‌بایتی انجام می‌شود. .Sp مشخصهٔ ARM با نام \f(CW\*(C`Tag_CPU_unaligned_access\*(C'\fR در فایل شیء تولیدشده بسته به تنظیم این گزینه، روی true یا false تنظیم می‌شود. در صورت فعال بودن دسترسی ناتراز، نماد پیش‌پردازندهٔ \f(CW\*(C`_\|_ARM_FEATURE_UNALIGNED\*(C'\fR نیز تعریف می‌شود. .IP \fB\-mneon\-for\-64bits\fR 4 .IX Item "-mneon-for-64bits" این گزینه منسوخ شده است و هیچ اثری ندارد. .IP \fB\-mslow\-flash\-data\fR 4 .IX Item "-mslow-flash-data" فرض می‌کند که بارگذاری داده از حافظهٔ فلش کندتر از واکشی دستورالعمل است؛ بنابراین برای بهبود کارایی، بارگذاری مقادیر لفظی (literal) به حداقل می‌رسد. این گزینه تنها هنگام کامپایل برای 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 تنها می‌توانند شامل یک تک‌دستورالعمل ۱۶ بیتی از یک مجموعه دستورالعمل منتخب باشند. این گزینه به‌طور پیش‌فرض برای حالت ARMv8\-A Thumb روشن است. .IP \fB\-mprint\-tune\-info\fR 4 .IX Item "-mprint-tune-info" چاپ اطلاعات بهینه‌سازی پردازنده به‌صورت توضیح در فایل اسمبلی. این گزینه صرفاً برای آزمون رگرسیونِ کامپایلر استفاده می‌شود و برای استفادهٔ عادی در کامپایل کد در نظر گرفته نشده است. این گزینه به‌طور پیش‌فرض غیرفعال است. .IP \fB\-mverbose\-cost\-dump\fR 4 .IX Item "-mverbose-cost-dump" تخلیهٔ پرحجم مدل هزینه را در فایل‌های اشکال‌زدایی فعال می‌کند. این گزینه برای استفاده در اشکال‌زدایی کامپایلر ارائه شده است. .IP \fB\-mpure\-code\fR 4 .IX Item "-mpure-code" اجازه نمی‌دهد داده‌های ثابت در بخش‌های کد قرار گیرند. علاوه بر این، هنگام کامپایل برای قالب شیء ELF، به تمامی بخش‌های text مشخصهٔ بخش ویژهٔ پردازندهٔ ELF با نام \f(CW\*(C`SHF_ARM_PURECODE\*(C'\fR را اختصاص می‌دهد. این گزینه تنها هنگام تولید کد غیر\-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 تولید کد محافظت از پشته با استفاده از قناری در \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 انتخاب ABI مربوط به FDPIC، که از توصیف‌گرهای تابع ۶۴ بیتی برای نمایش اشاره‌گرها به توابع استفاده می‌کند. هنگامی که کامپایلر برای مقاصد \&\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 برای ساخت هستهٔ Linux با استفاده از همان زنجیرهٔ ابزاری (\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 فعال نباشد، تمامی عملیات‌های محافظت از انشعاب و امضای نشانی بازگشت مقید به استفاده از دستورالعمل‌های تعریف‌شده در فضای architectural\-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 و یک فایل device\-specs (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR) به نام \&\f(CW\*(C`specs\-\fR\f(CImcu\fR\f(CW\*(C'\fR است. کامپایلر مطابق با \f(CW\*(C`\fR\f(CImcu\fR\f(CW\*(C'\fRهای پشتیبانی‌شده در زیر، تنها مورد آخر را ارائه می‌دهد. باقی موارد توسط AVR\-LibC (\f(CW\*(C`https://github.com/avrdudes/avr\-libc\*(C'\fR) یا از طریق فایل‌های \&\f(CW\*(C`atpack\*(C'\fR (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#atpack\*(C'\fR) از جانب سازنده سخت‌افزار پشتیبانی می‌شوند. .RS 4 .ie n .IP """avr2""" 4 .el .IP \f(CWavr2\fR 4 .IX Item "avr2" قطعات «Classic» با حداکثر 8 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`attiny22\*(C'\fR, \f(CW\*(C`attiny26\*(C'\fR, \f(CW\*(C`at90s2313\*(C'\fR, \f(CW\*(C`at90s2323\*(C'\fR, \f(CW\*(C`at90s2333\*(C'\fR, \f(CW\*(C`at90s2343\*(C'\fR, \f(CW\*(C`at90s4414\*(C'\fR, \f(CW\*(C`at90s4433\*(C'\fR, \f(CW\*(C`at90s4434\*(C'\fR, \f(CW\*(C`at90c8534\*(C'\fR, \f(CW\*(C`at90s8515\*(C'\fR, \f(CW\*(C`at90s8535\*(C'\fR. .ie n .IP """avr25""" 4 .el .IP \f(CWavr25\fR 4 .IX Item "avr25" قطعات «Classic» با حداکثر 8 KiB حافظه برنامه و دارای دستورالعمل \f(CW\*(C`MOVW\*(C'\fR. \&\fImcu\fR = \f(CW\*(C`attiny13\*(C'\fR, \f(CW\*(C`attiny13a\*(C'\fR, \f(CW\*(C`attiny24\*(C'\fR, \f(CW\*(C`attiny24a\*(C'\fR, \f(CW\*(C`attiny25\*(C'\fR, \f(CW\*(C`attiny261\*(C'\fR, \f(CW\*(C`attiny261a\*(C'\fR, \f(CW\*(C`attiny2313\*(C'\fR, \f(CW\*(C`attiny2313a\*(C'\fR, \f(CW\*(C`attiny43u\*(C'\fR, \f(CW\*(C`attiny44\*(C'\fR, \f(CW\*(C`attiny44a\*(C'\fR, \f(CW\*(C`attiny45\*(C'\fR, \f(CW\*(C`attiny48\*(C'\fR, \f(CW\*(C`attiny441\*(C'\fR, \f(CW\*(C`attiny461\*(C'\fR, \f(CW\*(C`attiny461a\*(C'\fR, \f(CW\*(C`attiny4313\*(C'\fR, \f(CW\*(C`attiny84\*(C'\fR, \f(CW\*(C`attiny84a\*(C'\fR, \f(CW\*(C`attiny85\*(C'\fR, \f(CW\*(C`attiny87\*(C'\fR, \f(CW\*(C`attiny88\*(C'\fR, \f(CW\*(C`attiny828\*(C'\fR, \f(CW\*(C`attiny841\*(C'\fR, \f(CW\*(C`attiny861\*(C'\fR, \f(CW\*(C`attiny861a\*(C'\fR, \f(CW\*(C`ata5272\*(C'\fR, \f(CW\*(C`ata6616c\*(C'\fR, \f(CW\*(C`at86rf401\*(C'\fR. .ie n .IP """avr3""" 4 .el .IP \f(CWavr3\fR 4 .IX Item "avr3" قطعات «Classic» با 16 KiB تا 64 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`at76c711\*(C'\fR, \f(CW\*(C`at43usb355\*(C'\fR. .ie n .IP """avr31""" 4 .el .IP \f(CWavr31\fR 4 .IX Item "avr31" قطعات «Classic» با 128 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`atmega103\*(C'\fR, \f(CW\*(C`at43usb320\*(C'\fR. .ie n .IP """avr35""" 4 .el .IP \f(CWavr35\fR 4 .IX Item "avr35" قطعات «Classic» با 16 KiB تا 64 KiB حافظه برنامه و دارای دستورالعمل \f(CW\*(C`MOVW\*(C'\fR. \&\fImcu\fR = \f(CW\*(C`attiny167\*(C'\fR, \f(CW\*(C`attiny1634\*(C'\fR, \f(CW\*(C`atmega8u2\*(C'\fR, \f(CW\*(C`atmega16u2\*(C'\fR, \f(CW\*(C`atmega32u2\*(C'\fR, \f(CW\*(C`ata5505\*(C'\fR, \f(CW\*(C`ata6617c\*(C'\fR, \f(CW\*(C`ata664251\*(C'\fR, \f(CW\*(C`at90usb82\*(C'\fR, \f(CW\*(C`at90usb162\*(C'\fR. .ie n .IP """avr4""" 4 .el .IP \f(CWavr4\fR 4 .IX Item "avr4" قطعات «Enhanced» با حداکثر 8 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`atmega48\*(C'\fR, \f(CW\*(C`atmega48a\*(C'\fR, \f(CW\*(C`atmega48p\*(C'\fR, \f(CW\*(C`atmega48pa\*(C'\fR, \f(CW\*(C`atmega48pb\*(C'\fR, \f(CW\*(C`atmega8\*(C'\fR, \f(CW\*(C`atmega8a\*(C'\fR, \f(CW\*(C`atmega8hva\*(C'\fR, \f(CW\*(C`atmega88\*(C'\fR, \f(CW\*(C`atmega88a\*(C'\fR, \f(CW\*(C`atmega88p\*(C'\fR, \f(CW\*(C`atmega88pa\*(C'\fR, \f(CW\*(C`atmega88pb\*(C'\fR, \f(CW\*(C`atmega8515\*(C'\fR, \f(CW\*(C`atmega8535\*(C'\fR, \f(CW\*(C`ata5795\*(C'\fR, \f(CW\*(C`ata6285\*(C'\fR, \f(CW\*(C`ata6286\*(C'\fR, \f(CW\*(C`ata6289\*(C'\fR, \f(CW\*(C`ata6612c\*(C'\fR, \f(CW\*(C`at90pwm1\*(C'\fR, \f(CW\*(C`at90pwm2\*(C'\fR, \f(CW\*(C`at90pwm2b\*(C'\fR, \f(CW\*(C`at90pwm3\*(C'\fR, \f(CW\*(C`at90pwm3b\*(C'\fR, \f(CW\*(C`at90pwm81\*(C'\fR. .ie n .IP """avr5""" 4 .el .IP \f(CWavr5\fR 4 .IX Item "avr5" قطعات «Enhanced» با 16 KiB تا 64 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`atmega16\*(C'\fR, \f(CW\*(C`atmega16a\*(C'\fR, \f(CW\*(C`atmega16hva\*(C'\fR, \f(CW\*(C`atmega16hva2\*(C'\fR, \f(CW\*(C`atmega16hvb\*(C'\fR, \f(CW\*(C`atmega16hvbrevb\*(C'\fR, \f(CW\*(C`atmega16m1\*(C'\fR, \f(CW\*(C`atmega16u4\*(C'\fR, \f(CW\*(C`atmega161\*(C'\fR, \f(CW\*(C`atmega162\*(C'\fR, \f(CW\*(C`atmega163\*(C'\fR, \f(CW\*(C`atmega164a\*(C'\fR, \f(CW\*(C`atmega164p\*(C'\fR, \f(CW\*(C`atmega164pa\*(C'\fR, \f(CW\*(C`atmega165\*(C'\fR, \f(CW\*(C`atmega165a\*(C'\fR, \f(CW\*(C`atmega165p\*(C'\fR, \f(CW\*(C`atmega165pa\*(C'\fR, \f(CW\*(C`atmega168\*(C'\fR, \f(CW\*(C`atmega168a\*(C'\fR, \f(CW\*(C`atmega168p\*(C'\fR, \f(CW\*(C`atmega168pa\*(C'\fR, \f(CW\*(C`atmega168pb\*(C'\fR, \f(CW\*(C`atmega169\*(C'\fR, \f(CW\*(C`atmega169a\*(C'\fR, \f(CW\*(C`atmega169p\*(C'\fR, \f(CW\*(C`atmega169pa\*(C'\fR, \f(CW\*(C`atmega32\*(C'\fR, \f(CW\*(C`atmega32a\*(C'\fR, \f(CW\*(C`atmega32c1\*(C'\fR, \f(CW\*(C`atmega32hvb\*(C'\fR, \f(CW\*(C`atmega32hvbrevb\*(C'\fR, \f(CW\*(C`atmega32m1\*(C'\fR, \f(CW\*(C`atmega32u4\*(C'\fR, \f(CW\*(C`atmega32u6\*(C'\fR, \f(CW\*(C`atmega323\*(C'\fR, \f(CW\*(C`atmega324a\*(C'\fR, \f(CW\*(C`atmega324p\*(C'\fR, \f(CW\*(C`atmega324pa\*(C'\fR, \f(CW\*(C`atmega324pb\*(C'\fR, \f(CW\*(C`atmega325\*(C'\fR, \f(CW\*(C`atmega325a\*(C'\fR, \f(CW\*(C`atmega325p\*(C'\fR, \f(CW\*(C`atmega325pa\*(C'\fR, \f(CW\*(C`atmega328\*(C'\fR, \f(CW\*(C`atmega328p\*(C'\fR, \f(CW\*(C`atmega328pb\*(C'\fR, \f(CW\*(C`atmega329\*(C'\fR, \f(CW\*(C`atmega329a\*(C'\fR, \f(CW\*(C`atmega329p\*(C'\fR, \f(CW\*(C`atmega329pa\*(C'\fR, \f(CW\*(C`atmega3250\*(C'\fR, \f(CW\*(C`atmega3250a\*(C'\fR, \f(CW\*(C`atmega3250p\*(C'\fR, \f(CW\*(C`atmega3250pa\*(C'\fR, \f(CW\*(C`atmega3290\*(C'\fR, \f(CW\*(C`atmega3290a\*(C'\fR, \f(CW\*(C`atmega3290p\*(C'\fR, \f(CW\*(C`atmega3290pa\*(C'\fR, \f(CW\*(C`atmega406\*(C'\fR, \f(CW\*(C`atmega64\*(C'\fR, \f(CW\*(C`atmega64a\*(C'\fR, \f(CW\*(C`atmega64c1\*(C'\fR, \f(CW\*(C`atmega64hve\*(C'\fR, \f(CW\*(C`atmega64hve2\*(C'\fR, \f(CW\*(C`atmega64m1\*(C'\fR, \f(CW\*(C`atmega64rfr2\*(C'\fR, \f(CW\*(C`atmega640\*(C'\fR, \f(CW\*(C`atmega644\*(C'\fR, \f(CW\*(C`atmega644a\*(C'\fR, \f(CW\*(C`atmega644p\*(C'\fR, \f(CW\*(C`atmega644pa\*(C'\fR, \f(CW\*(C`atmega644rfr2\*(C'\fR, \f(CW\*(C`atmega645\*(C'\fR, \f(CW\*(C`atmega645a\*(C'\fR, \f(CW\*(C`atmega645p\*(C'\fR, \f(CW\*(C`atmega649\*(C'\fR, \f(CW\*(C`atmega649a\*(C'\fR, \f(CW\*(C`atmega649p\*(C'\fR, \f(CW\*(C`atmega6450\*(C'\fR, \f(CW\*(C`atmega6450a\*(C'\fR, \f(CW\*(C`atmega6450p\*(C'\fR, \f(CW\*(C`atmega6490\*(C'\fR, \f(CW\*(C`atmega6490a\*(C'\fR, \f(CW\*(C`atmega6490p\*(C'\fR, \f(CW\*(C`ata5790\*(C'\fR, \f(CW\*(C`ata5790n\*(C'\fR, \f(CW\*(C`ata5791\*(C'\fR, \f(CW\*(C`ata6613c\*(C'\fR, \f(CW\*(C`ata6614q\*(C'\fR, \f(CW\*(C`ata5782\*(C'\fR, \f(CW\*(C`ata5831\*(C'\fR, \f(CW\*(C`ata8210\*(C'\fR, \f(CW\*(C`ata8510\*(C'\fR, \f(CW\*(C`ata5787\*(C'\fR, \f(CW\*(C`ata5835\*(C'\fR, \f(CW\*(C`ata5700m322\*(C'\fR, \f(CW\*(C`ata5702m322\*(C'\fR, \f(CW\*(C`at90pwm161\*(C'\fR, \f(CW\*(C`at90pwm216\*(C'\fR, \f(CW\*(C`at90pwm316\*(C'\fR, \f(CW\*(C`at90can32\*(C'\fR, \f(CW\*(C`at90can64\*(C'\fR, \f(CW\*(C`at90scr100\*(C'\fR, \f(CW\*(C`at90usb646\*(C'\fR, \f(CW\*(C`at90usb647\*(C'\fR, \f(CW\*(C`at94k\*(C'\fR, \f(CW\*(C`m3000\*(C'\fR. .ie n .IP """avr51""" 4 .el .IP \f(CWavr51\fR 4 .IX Item "avr51" قطعات «Enhanced» با 128 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`atmega128\*(C'\fR, \f(CW\*(C`atmega128a\*(C'\fR, \f(CW\*(C`atmega128rfa1\*(C'\fR, \f(CW\*(C`atmega128rfr2\*(C'\fR, \f(CW\*(C`atmega1280\*(C'\fR, \f(CW\*(C`atmega1281\*(C'\fR, \f(CW\*(C`atmega1284\*(C'\fR, \f(CW\*(C`atmega1284p\*(C'\fR, \f(CW\*(C`atmega1284rfr2\*(C'\fR, \f(CW\*(C`at90can128\*(C'\fR, \f(CW\*(C`at90usb1286\*(C'\fR, \f(CW\*(C`at90usb1287\*(C'\fR. .ie n .IP """avr6""" 4 .el .IP \f(CWavr6\fR 4 .IX Item "avr6" قطعات «Enhanced» با PC سه بایتی (3\-byte PC)، یعنی با بیش از 128 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`atmega256rfr2\*(C'\fR, \f(CW\*(C`atmega2560\*(C'\fR, \f(CW\*(C`atmega2561\*(C'\fR, \f(CW\*(C`atmega2564rfr2\*(C'\fR. .ie n .IP """avrxmega2""" 4 .el .IP \f(CWavrxmega2\fR 4 .IX Item "avrxmega2" قطعات «XMEGA» با بیش از 8 KiB و حداکثر 64 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`atxmega8e5\*(C'\fR, \f(CW\*(C`atxmega16a4\*(C'\fR, \f(CW\*(C`atxmega16a4u\*(C'\fR, \f(CW\*(C`atxmega16c4\*(C'\fR, \f(CW\*(C`atxmega16d4\*(C'\fR, \f(CW\*(C`atxmega16e5\*(C'\fR, \f(CW\*(C`atxmega32a4\*(C'\fR, \f(CW\*(C`atxmega32a4u\*(C'\fR, \f(CW\*(C`atxmega32c3\*(C'\fR, \f(CW\*(C`atxmega32c4\*(C'\fR, \f(CW\*(C`atxmega32d3\*(C'\fR, \f(CW\*(C`atxmega32d4\*(C'\fR, \f(CW\*(C`atxmega32e5\*(C'\fR, \f(CW\*(C`avr64da28\*(C'\fR, \f(CW\*(C`avr64da28s\*(C'\fR, \f(CW\*(C`avr64da32\*(C'\fR, \f(CW\*(C`avr64da32s\*(C'\fR, \f(CW\*(C`avr64da48\*(C'\fR, \f(CW\*(C`avr64da48s\*(C'\fR, \f(CW\*(C`avr64da64\*(C'\fR, \f(CW\*(C`avr64da64s\*(C'\fR, \f(CW\*(C`avr64db28\*(C'\fR, \f(CW\*(C`avr64db32\*(C'\fR, \f(CW\*(C`avr64db48\*(C'\fR, \f(CW\*(C`avr64db64\*(C'\fR, \f(CW\*(C`avr64dd14\*(C'\fR, \f(CW\*(C`avr64dd20\*(C'\fR, \f(CW\*(C`avr64dd28\*(C'\fR, \f(CW\*(C`avr64dd32\*(C'\fR, \f(CW\*(C`avr64du28\*(C'\fR, \f(CW\*(C`avr64du32\*(C'\fR, \f(CW\*(C`avr64ea28\*(C'\fR, \f(CW\*(C`avr64ea32\*(C'\fR, \f(CW\*(C`avr64ea48\*(C'\fR, \f(CW\*(C`avr64sd28\*(C'\fR, \f(CW\*(C`avr64sd32\*(C'\fR, \f(CW\*(C`avr64sd48\*(C'\fR. .ie n .IP """avrxmega3""" 4 .el .IP \f(CWavrxmega3\fR 4 .IX Item "avrxmega3" قطعات «XMEGA» با حداکثر 64 KiB ترکیب حافظه برنامه و RAM، و با حافظه برنامه قابل مشاهده در فضای آدرس RAM. \&\fImcu\fR = \f(CW\*(C`attiny202\*(C'\fR, \f(CW\*(C`attiny204\*(C'\fR, \f(CW\*(C`attiny212\*(C'\fR, \f(CW\*(C`attiny214\*(C'\fR, \f(CW\*(C`attiny402\*(C'\fR, \f(CW\*(C`attiny404\*(C'\fR, \f(CW\*(C`attiny406\*(C'\fR, \f(CW\*(C`attiny412\*(C'\fR, \f(CW\*(C`attiny414\*(C'\fR, \f(CW\*(C`attiny416\*(C'\fR, \f(CW\*(C`attiny416auto\*(C'\fR, \f(CW\*(C`attiny417\*(C'\fR, \f(CW\*(C`attiny424\*(C'\fR, \f(CW\*(C`attiny426\*(C'\fR, \f(CW\*(C`attiny427\*(C'\fR, \f(CW\*(C`attiny804\*(C'\fR, \f(CW\*(C`attiny806\*(C'\fR, \f(CW\*(C`attiny807\*(C'\fR, \f(CW\*(C`attiny814\*(C'\fR, \f(CW\*(C`attiny816\*(C'\fR, \f(CW\*(C`attiny817\*(C'\fR, \f(CW\*(C`attiny824\*(C'\fR, \f(CW\*(C`attiny826\*(C'\fR, \f(CW\*(C`attiny827\*(C'\fR, \f(CW\*(C`attiny1604\*(C'\fR, \f(CW\*(C`attiny1606\*(C'\fR, \f(CW\*(C`attiny1607\*(C'\fR, \f(CW\*(C`attiny1614\*(C'\fR, \f(CW\*(C`attiny1616\*(C'\fR, \f(CW\*(C`attiny1617\*(C'\fR, \f(CW\*(C`attiny1624\*(C'\fR, \f(CW\*(C`attiny1626\*(C'\fR, \f(CW\*(C`attiny1627\*(C'\fR, \f(CW\*(C`attiny3214\*(C'\fR, \f(CW\*(C`attiny3216\*(C'\fR, \f(CW\*(C`attiny3217\*(C'\fR, \f(CW\*(C`attiny3224\*(C'\fR, \f(CW\*(C`attiny3226\*(C'\fR, \f(CW\*(C`attiny3227\*(C'\fR, \f(CW\*(C`atmega808\*(C'\fR, \f(CW\*(C`atmega809\*(C'\fR, \f(CW\*(C`atmega1608\*(C'\fR, \f(CW\*(C`atmega1609\*(C'\fR, \f(CW\*(C`atmega3208\*(C'\fR, \f(CW\*(C`atmega3209\*(C'\fR, \f(CW\*(C`atmega4808\*(C'\fR, \f(CW\*(C`atmega4809\*(C'\fR, \f(CW\*(C`avr16dd14\*(C'\fR, \f(CW\*(C`avr16dd20\*(C'\fR, \f(CW\*(C`avr16dd28\*(C'\fR, \f(CW\*(C`avr16dd32\*(C'\fR, \f(CW\*(C`avr16du14\*(C'\fR, \f(CW\*(C`avr16du20\*(C'\fR, \f(CW\*(C`avr16du28\*(C'\fR, \f(CW\*(C`avr16du32\*(C'\fR, \f(CW\*(C`avr16ea28\*(C'\fR, \f(CW\*(C`avr16ea32\*(C'\fR, \f(CW\*(C`avr16ea48\*(C'\fR, \f(CW\*(C`avr16eb14\*(C'\fR, \f(CW\*(C`avr16eb20\*(C'\fR, \f(CW\*(C`avr16eb28\*(C'\fR, \f(CW\*(C`avr16eb32\*(C'\fR, \f(CW\*(C`avr32da28\*(C'\fR, \f(CW\*(C`avr32da28s\*(C'\fR, \f(CW\*(C`avr32da32\*(C'\fR, \f(CW\*(C`avr32da32s\*(C'\fR, \f(CW\*(C`avr32da48\*(C'\fR, \f(CW\*(C`avr32da48s\*(C'\fR, \f(CW\*(C`avr32db28\*(C'\fR, \f(CW\*(C`avr32db32\*(C'\fR, \f(CW\*(C`avr32db48\*(C'\fR, \f(CW\*(C`avr32dd14\*(C'\fR, \f(CW\*(C`avr32dd20\*(C'\fR, \f(CW\*(C`avr32dd28\*(C'\fR, \f(CW\*(C`avr32dd32\*(C'\fR, \f(CW\*(C`avr32du14\*(C'\fR, \f(CW\*(C`avr32du20\*(C'\fR, \f(CW\*(C`avr32du28\*(C'\fR, \f(CW\*(C`avr32du32\*(C'\fR, \f(CW\*(C`avr32ea28\*(C'\fR, \f(CW\*(C`avr32ea32\*(C'\fR, \f(CW\*(C`avr32ea48\*(C'\fR, \f(CW\*(C`avr32sd20\*(C'\fR, \f(CW\*(C`avr32sd28\*(C'\fR, \f(CW\*(C`avr32sd32\*(C'\fR. .ie n .IP """avrxmega4""" 4 .el .IP \f(CWavrxmega4\fR 4 .IX Item "avrxmega4" قطعات «XMEGA» با بیش از 64 KiB و حداکثر 128 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`atxmega64a3\*(C'\fR, \f(CW\*(C`atxmega64a3u\*(C'\fR, \f(CW\*(C`atxmega64a4u\*(C'\fR, \f(CW\*(C`atxmega64b1\*(C'\fR, \f(CW\*(C`atxmega64b3\*(C'\fR, \f(CW\*(C`atxmega64c3\*(C'\fR, \f(CW\*(C`atxmega64d3\*(C'\fR, \f(CW\*(C`atxmega64d4\*(C'\fR, \f(CW\*(C`avr128da28\*(C'\fR, \f(CW\*(C`avr128da28s\*(C'\fR, \f(CW\*(C`avr128da32\*(C'\fR, \f(CW\*(C`avr128da32s\*(C'\fR, \f(CW\*(C`avr128da48\*(C'\fR, \f(CW\*(C`avr128da48s\*(C'\fR, \f(CW\*(C`avr128da64\*(C'\fR, \f(CW\*(C`avr128da64s\*(C'\fR, \f(CW\*(C`avr128db28\*(C'\fR, \f(CW\*(C`avr128db32\*(C'\fR, \f(CW\*(C`avr128db48\*(C'\fR, \f(CW\*(C`avr128db64\*(C'\fR. .ie n .IP """avrxmega5""" 4 .el .IP \f(CWavrxmega5\fR 4 .IX Item "avrxmega5" قطعات «XMEGA» با بیش از 64 KiB و حداکثر 128 KiB حافظه برنامه و بیش از 64 KiB حافظه RAM. \&\fImcu\fR = \f(CW\*(C`atxmega64a1\*(C'\fR, \f(CW\*(C`atxmega64a1u\*(C'\fR. .ie n .IP """avrxmega6""" 4 .el .IP \f(CWavrxmega6\fR 4 .IX Item "avrxmega6" قطعات «XMEGA» با بیش از 128 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`atxmega128a3\*(C'\fR, \f(CW\*(C`atxmega128a3u\*(C'\fR, \f(CW\*(C`atxmega128b1\*(C'\fR, \f(CW\*(C`atxmega128b3\*(C'\fR, \f(CW\*(C`atxmega128c3\*(C'\fR, \f(CW\*(C`atxmega128d3\*(C'\fR, \f(CW\*(C`atxmega128d4\*(C'\fR, \f(CW\*(C`atxmega192a3\*(C'\fR, \f(CW\*(C`atxmega192a3u\*(C'\fR, \f(CW\*(C`atxmega192c3\*(C'\fR, \f(CW\*(C`atxmega192d3\*(C'\fR, \f(CW\*(C`atxmega256a3\*(C'\fR, \f(CW\*(C`atxmega256a3b\*(C'\fR, \f(CW\*(C`atxmega256a3bu\*(C'\fR, \f(CW\*(C`atxmega256a3u\*(C'\fR, \f(CW\*(C`atxmega256c3\*(C'\fR, \f(CW\*(C`atxmega256d3\*(C'\fR, \f(CW\*(C`atxmega384c3\*(C'\fR, \f(CW\*(C`atxmega384d3\*(C'\fR. .ie n .IP """avrxmega7""" 4 .el .IP \f(CWavrxmega7\fR 4 .IX Item "avrxmega7" قطعات «XMEGA» با بیش از 128 KiB حافظه برنامه و بیش از 64 KiB حافظه RAM. \&\fImcu\fR = \f(CW\*(C`atxmega128a1\*(C'\fR, \f(CW\*(C`atxmega128a1u\*(C'\fR, \f(CW\*(C`atxmega128a4u\*(C'\fR. .ie n .IP """avrtiny""" 4 .el .IP \f(CWavrtiny\fR 4 .IX Item "avrtiny" قطعات هسته Tiny از نوع «Reduced Tiny» تنها با ۱۶ ثبات همه‌منظوره و 512 B تا 4 KiB حافظه برنامه. \&\fImcu\fR = \f(CW\*(C`attiny4\*(C'\fR, \f(CW\*(C`attiny5\*(C'\fR, \f(CW\*(C`attiny9\*(C'\fR, \f(CW\*(C`attiny10\*(C'\fR, \f(CW\*(C`attiny102\*(C'\fR, \f(CW\*(C`attiny104\*(C'\fR, \f(CW\*(C`attiny20\*(C'\fR, \f(CW\*(C`attiny40\*(C'\fR. .ie n .IP """avr1""" 4 .el .IP \f(CWavr1\fR 4 .IX Item "avr1" این ISA توسط هسته حداقلی AVR پیاده‌سازی شده و فقط برای اسمبلی پشتیبانی می‌شود. \&\fImcu\fR = \f(CW\*(C`attiny11\*(C'\fR, \f(CW\*(C`attiny12\*(C'\fR, \f(CW\*(C`attiny15\*(C'\fR, \f(CW\*(C`attiny28\*(C'\fR, \f(CW\*(C`at90s1200\*(C'\fR. .RE .RS 4 .RE .IP \fB\-mabsdata\fR 4 .IX Item "-mabsdata" فرض می‌کند که تمام داده‌ها در حافظه ایستا (static storage) با دستورالعمل‌های LDS / STS قابل دسترسی هستند. این گزینه تنها روی قطعات Reduced Tiny مانند ATtiny40 اثر دارد. همچنین صفت متغیر \f(CW\*(C`absdata\*(C'\fR را در \&\fBAVR Variable Attributes,variable attribute\fR ببینید. .IP \fB\-mcvt\fR 4 .IX Item "-mcvt" از یک \fIجدول بردار فشرده (compact vector table)\fR استفاده می‌کند. برخی قطعات از CVT تنها با چهار ورودی پشتیبانی می‌کنند: 0=Reset، 1=NMI، 2=Prio1 IRQ و 3=Prio0 IRQs. این گزینه به جای \f(CW\*(C`crt\fR\f(CImcu\fR\f(CW.o\*(C'\fR معمول، کد راه‌اندازی را از \f(CW\*(C`crt\fR\f(CImcu\fR\f(CW\-cvt.o\*(C'\fR پیوند می‌زند. علاوه بر ارائه جدول بردار فشرده، کد راه‌اندازی بیت \&\f(CW\*(C`CPUINT_CTRLA.CPUINT_CVT\*(C'\fR را تنظیم خواهد کرد که CVT را روی قطعه فعال می‌کند. .Sp اگر نمی‌خواهید کد راه‌اندازی \f(CW\*(C`CPUINT_CTRLA.CPUINT_CVT\*(C'\fR را تنظیم کند، می‌توانید نماد \f(CW\*(C`_\|_init_cvt\*(C'\fR را برآورده سازید تا کد مربوطه دیگر از \f(CW\*(C`lib\fR\f(CImcu\fR\f(CW.a\*(C'\fR فراخوانی نشود. برای مثال، می‌توانید با \f(CW\*(C`\-Wl,\-\-defsym,_\|_init_cvt=0\*(C'\fR پیوند بزنید. .Sp کد راه‌اندازی CVT از نسخه AVR\-LibC\ v2.3 (\f(CW\*(C`https://github.com/avrdudes/avr\-libc/issues/1010\*(C'\fR) در دسترس است. .IP \fB\-mdouble=\fR\fIbits\fR 4 .IX Item "-mdouble=bits" .PD 0 .IP \fB\-mlong\-double=\fR\fIbits\fR 4 .IX Item "-mlong-double=bits" .PD اندازه (به بیت) نوع‌های \f(CW\*(C`double\*(C'\fR یا \f(CW\*(C`long double\*(C'\fR را به ترتیب تعیین می‌کند. مقادیر ممکن برای \fIbits\fR شامل 32 و 64 است. مجاز بودن یا نبودن یک مقدار مشخص برای \fIbits\fR به گزینه‌های پیکربندی \f(CW\*(C`\-\-with\-double=\*(C'\fR و \f(CW\*(C`\-\-with\-long\-double=\*(C'\fR در configure\ (\f(CW\*(C`https://gcc.gnu.org/install/configure.html#avr\*(C'\fR) بستگی دارد و همین مورد برای مقادیر پیش‌فرض گزینه‌ها نیز صدق می‌کند. .IP \fB\-mgas\-isr\-prologues\fR 4 .IX Item "-mgas-isr-prologues" روال‌های سرویس وقفه (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) قرار می‌دهد تا نیازی به فراخوانی نباشد. با تنظیم این گزینه، کاربر تضمین می‌کند که \f(CW\*(C`main\*(C'\fR بازگشتی نخواهد داشت. .Sp این گزینه می‌تواند برای قطعات با منابع بسیار محدود به منظور صرفه‌جویی چند بایت در کد و فضای پشته استفاده شود. این قابلیت از نسخه AVR\-LibC\ v2.3 (\f(CW\*(C`https://github.com/avrdudes/avr\-libc/issues/1012\*(C'\fR) طبق انتظار کار خواهد کرد. در نسخه‌های قدیمی‌تر، هیچ بهبودی در عملکرد حاصل نخواهد شد. .IP \fB\-mno\-interrupts\fR 4 .IX Item "-mno-interrupts" کد تولیدشده با وقفه‌های سخت‌افزاری سازگار نیست. اندازه کد کوچک‌تر خواهد بود. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" تلاش می‌کند در صورت امکان، دستورالعمل‌های \f(CW\*(C`CALL\*(C'\fR و \f(CW\*(C`JMP\*(C'\fR را به ترتیب با دستورالعمل‌های کوتاه‌تر \&\f(CW\*(C`RCALL\*(C'\fR و \f(CW\*(C`RJMP\*(C'\fR جایگزین کند. تنظیم \fB\-mrelax\fR صرفاً گزینه \fB\-\-mlink\-relax\fR را به خط فرمان اسمبلر و گزینه \fB\-\-relax\fR را به خط فرمان پیونددهنده اضافه می‌کند. .Sp کاهش پرش (Jump relaxing) توسط پیونددهنده انجام می‌شود، زیرا آفست‌های پرش پیش از جای‌گیری کد مشخص نیستند. بنابراین، کد اسمبلی تولیدشده توسط کامپایلر یکسان است، اما دستورالعمل‌های موجود در فایل اجرایی ممکن است با دستورالعمل‌های کد اسمبلی تفاوت داشته باشند. .Sp در صورتی که به تکه‌کدهای واسط پیونددهنده (linker stubs) نیاز باشد، 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*، در صورتی که پشتیبانی مورد نیاز در GNU Binutils (PR31124 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR)) در دسترس باشد، \f(CW\*(C`.rodata\*(C'\fR به‌طور پیش‌فرض در حافظهٔ فلش (flash) قرار می‌گیرد. در این حالت، می‌توان از \fB\-mrodata\-in\-ram\fR برای بازگشت به چیدمان قدیمی با قرارگیری \f(CW\*(C`.rodata\*(C'\fR در RAM استفاده کرد. .IP \fB\-mtiny\-stack\fR 4 .IX Item "-mtiny-stack" تنها ۸ بیت پایینی اشاره‌گر پشته (stack pointer) را تغییر می‌دهد. .IP \fB\-mfract\-convert\-truncate\fR 4 .IX Item "-mfract-convert-truncate" اجازه می‌دهد برای انواع ممیز ثابت کسری، به‌جای گرد کردن به سمت صفر از بُرش (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، این کتابخانه حاوی کدهایی است که برای عملکرد درست یک برنامه حیاتی هستند. به‌ویژه، بخش‌هایی از کد راه‌اندازی (startup) را شامل می‌شود، مانند: \&\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 را به خط فرمان گردانندهٔ کامپایلر اضافه نمی‌کند. مسئولیت تأمین گزینه‌های خط فرمان مناسب برای زیرپردازش‌ها مانند کامپایلر اصلی، اسمبلر و پیونددهنده بر عهدهٔ کاربر است. این بدان معناست که کاربر باید فایل مشخصات (specs) دستگاه اختصاصی خود را با استفاده از \fB\-specs=\fR\fIpath\-to\-specs\-file\fR ارائه دهد. دیگر نیازی به گزینهٔ \fB\-mmcu=\fR\fImcu\fR نخواهد بود. .Sp این گزینه همچنین می‌تواند به‌عنوان جایگزینی برای شیوهٔ قدیمی‌تر تعیین فایل‌های سفارشیِ device\-specs باشد که نیاز داشت \fB\-B\fR \fIsome\-path\fR به دایرکتوری‌ای اشاره کند که شامل پوشه‌ای به نام \f(CW\*(C`device\-specs\*(C'\fR بود و آن پوشه نیز فایلی به نام \&\f(CW\*(C`specs\-\fR\f(CImcu\fR\f(CW\*(C'\fR داشت؛ جایی که \fImcu\fR با \fB\-mmcu=\fR\fImcu\fR مشخص می‌شد. .IP \fB\-Waddr\-space\-convert\fR 4 .IX Item "-Waddr-space-convert" در مواردی که فضای آدرس حاصل در فضای آدرس مبدأ گنجانده نشده است، دربارهٔ تبدیل‌های بین فضاهای آدرس هشدار می‌دهد. .IP \fB\-Wmisspelled\-isr\fR 4 .IX Item "-Wmisspelled-isr" اگر ISR اشتباه نوشته شده باشد (یعنی بدون پیشوند _\|_vector باشد)، هشدار می‌دهد. به‌طور پیش‌فرض فعال است. .PP گزینه‌های بهینه‌سازی AVR .IX Subsection "AVR Optimization Options" .PP گزینه‌های زیر، گزینه‌های بهینه‌سازی محض هستند. گزینه‌های \fB\-mgas\-isr\-prologues\fR، \fB\-mmain\-is\-OS_task\fR، \&\fB\-mno\-call\-main\fR و \fB\-mrelax\fR که در بالا آمدند فقط \&\fIتقریباً\fR گزینه‌های بهینه‌سازی هستند، زیرا در موارد نادری تولید کد متفاوت آن‌ها اهمیت پیدا می‌کند. .IP \fB\-maccumulate\-args\fR 4 .IX Item "-maccumulate-args" آرگومان‌های ارسالی به توابع را انباشته کرده و فضای پشتهٔ مورد نیاز برای آرگومان‌های ارسالی به تابع را یک‌بار در مقدمه/مؤخره (prologue/epilogue) تابع تخصیص داده و آزاد می‌کند. بدون این گزینه، آرگومان‌های ارسالی پیش از فراخوانی تابع در پشته push شده و پس از آن pop می‌شوند. همچنین گزینهٔ بهینه‌سازی \fB\-fdefer\-pop\fR را در \&\fBOptimize Options,,optimization option\fR ببینید. .Sp برداشتن (pop کردن) آرگومان‌ها پس از فراخوانی تابع می‌تواند در AVR هزینه‌بر باشد، بنابراین انباشته‌سازی فضای پشته ممکن است منجر به کوچک‌تر شدن فایل‌های اجرایی شود، زیرا پس از فراخوانی نیازی به حذف آرگومان‌ها از پشته نیست. .Sp این گزینه می‌تواند برای توابعی که چندین فراخوانی به توابعی انجام می‌دهند که آرگومان‌های خود را در پشته دریافت می‌کنند (مانند توابع شبیه printf)، منجر به کاهش حجم کد شود. .IP \fB\-mbranch\-cost=\fR\fIcost\fR 4 .IX Item "-mbranch-cost=cost" هزینهٔ انشعاب (branch cost) را برای دستورالعمل‌های انشعاب شرطی روی \&\fIcost\fR تنظیم می‌کند. مقادیر معقول برای \fIcost\fR اعداد صحیح کوچک و غیرمنفی هستند. هزینهٔ انشعاب پیش‌فرض 0 است. .IP \fB\-mcall\-prologues\fR 4 .IX Item "-mcall-prologues" مقدمه‌ها/مؤخره‌های توابع به‌صورت فراخوانی زیربرنامه‌های مناسب بسط داده می‌شوند. اندازهٔ کد کوچک‌تر می‌شود. .IP \fB\-mfuse\-add\fR 4 .IX Item "-mfuse-add" .PD 0 .IP \fB\-mno\-fuse\-add\fR 4 .IX Item "-mno-fuse-add" .IP \fB\-mfuse\-add=\fR\fIlevel\fR 4 .IX Item "-mfuse-add=level" .PD دسترسی‌های غیرمستقیم به حافظه را در دستگاه‌های تقلیل‌یافتهٔ Tiny بهینه‌سازی می‌کند. حالت پیش‌فرض برای بهینه‌سازی‌های \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 هستند که یک مقدار مبنای مخلوط (mixed radix) با الگوی 3:2:2:2 است. هر رقم جنبه‌ای از بهینه‌سازی را کنترل می‌کند. .IP \fB\-mfuse\-move2\fR 4 .IX Item "-mfuse-move2" یک گام بهینه‌سازی پس از ترکیب (post-combine) را اجرا می‌کند که تلاش دارد دستورالعمل‌های انتقال (move) را ادغام کند. .IP \fB\-mstrict\-X\fR 4 .IX Item "-mstrict-X" از ثبات آدرس \f(CW\*(C`X\*(C'\fR به روشی که توسط سخت‌افزار پیشنهاد شده استفاده می‌کند. این بدان معناست که \f(CW\*(C`X\*(C'\fR تنها در آدرس‌دهی‌های غیرمستقیم، پس‌افزایشی (post\-increment) یا پیش‌کاهشی (pre\-decrement) به کار می‌رود. .Sp بدون این گزینه، ممکن است از ثبات \f(CW\*(C`X\*(C'\fR همانند ثبات‌های \f(CW\*(C`Y\*(C'\fR یا \f(CW\*(C`Z\*(C'\fR استفاده شود که در این صورت با دستورالعمل‌های اضافی شبیه‌سازی می‌گردد. برای نمونه، بارگذاری یک مقدار با آدرس‌دهی \f(CW\*(C`X+const\*(C'\fR با مقدار کوچک و غیرمنفیِ \f(CW\*(C`const < 64\*(C'\fR درون ثبات \fIRn\fR به‌صورت زیر انجام می‌شود: .Sp .Vb 3 \& adiw r26, const ; X += const \& ld , X ; = *X \& sbiw r26, const ; X \-= const .Ve .IP \fB\-msplit\-bit\-shift\fR 4 .IX Item "-msplit-bit-shift" شیفت‌های چندبایتی با آفست ثابت را به یک شیفت با آفست بایتی و یک شیفت باقیمانده با آفست غیربایتی تقسیم می‌کند. این بهینه‌سازی به‌طور پیش‌فرض برای \fB\-O2\fR و بالاتر، شامل \fB\-Os\fR اما به‌جز \fB\-Oz\fR، فعال است. تقسیم شیفت‌هایی با آفست ثابت که مضربی از ۸ است توسط \fB\-mfuse\-move\fR کنترل می‌شود. .IP \fB\-msplit\-ldst\fR 4 .IX Item "-msplit-ldst" بارگذاری‌ها و ذخیره‌سازی‌های چندبایتی را به چند بارگذاری و ذخیره‌سازی بایتی تقسیم می‌کند. این بهینه‌سازی به‌طور پیش‌فرض برای \fB\-O2\fR و بالاتر فعال است. .IP \fB\-muse\-nonzero\-bits\fR 4 .IX Item "-muse-nonzero-bits" بهینه‌سازی‌هایی را فعال می‌کند که تنها زمانی ممکن هستند که برخی از بیت‌ها درون یک ثبات همیشه صفر باشند. این بهینه‌سازی به‌طور پیش‌فرض برای \fB\-O2\fR و بالاتر فعال است. .PP \f(CW\*(C`EIND\*(C'\fR و دستگاه‌هایی با بیش از ۱۲۸ کیبی‌بایت Flash .IX Subsection "EIND and Devices with More Than 128 Ki Bytes of Flash" .PP اشاره‌گرها در پیاده‌سازی، ۱۶ بیتی هستند. آدرس یک تابع یا برچسب به‌صورت آدرس کلمه‌ای (word address) بیان می‌شود، به طوری که پرش‌ها و فراخوانی‌های غیرمستقیم می‌توانند هر آدرس کدی را در محدودهٔ ۶۴ کیلوکلمه (64 Ki words) هدف قرار دهند. .PP به منظور تسهیل پرش غیرمستقیم در دستگاه‌هایی با بیش از ۱۲۸ کیبی‌بایت فضای حافظهٔ برنامه، یک ثبات کارکرد خاص به نام \&\f(CW\*(C`EIND\*(C'\fR وجود دارد که هنگام استفاده از دستورالعمل‌های \f(CW\*(C`EICALL\*(C'\fR یا \f(CW\*(C`EIJMP\*(C'\fR، به‌عنوان پرارزش‌ترین بخش آدرس مقصد عمل می‌کند. .PP پرش‌ها و فراخوانی‌های غیرمستقیم در این دستگاه‌ها به شرح زیر توسط کامپایلر مدیریت می‌شوند و مشمول محدودیت‌هایی هستند: .IP * 4 کامپایلر هرگز \f(CW\*(C`EIND\*(C'\fR را مقداردهی نمی‌کند. .IP * 4 کامپایلر از \f(CW\*(C`EIND\*(C'\fR به‌طور ضمنی در دستورالعمل‌های \f(CW\*(C`EICALL\*(C'\fR/\f(CW\*(C`EIJMP\*(C'\fR استفاده می‌کند یا ممکن است \f(CW\*(C`EIND\*(C'\fR را به‌طور مستقیم بخواند تا یک فراخوانی/پرش غیرمستقیم را با استفاده از دستورالعمل \f(CW\*(C`RET\*(C'\fR شبیه‌سازی کند. .IP * 4 کامپایلر فرض می‌کند که \f(CW\*(C`EIND\*(C'\fR هرگز در طول کد راه‌اندازی یا در طول اجرای برنامه تغییر نمی‌کند. به‌ویژه، \f(CW\*(C`EIND\*(C'\fR در مقدمه/مؤخرهٔ توابع یا روتین‌های سرویس وقفه (ISR) ذخیره/بازیابی نمی‌شود. .IP * 4 برای فراخوانی‌های غیرمستقیم به توابع و goto محاسباتی (computed goto)، پیونددهنده تکه‌کدهای رابط (\fIstubs\fR) ایجاد می‌کند. این تکه‌کدها پدهای پرش هستند که گاهی \&\fItrampolines\fR (ترامپولین) نیز نامیده می‌شوند. بدین ترتیب، فراخوانی/پرش غیرمستقیم به چنین تکه‌کدی می‌پرد. تکه‌کد حاوی یک پرش مستقیم به نشانی مورد نظر است. .IP * 4 تسهیل پیونددهنده (Linker relaxation) باید فعال باشد تا پیونددهنده بتواند تکه‌کدها (stubs) را در تمامی وضعیت‌ها به‌درستی ایجاد کند. به گزینهٔ کامپایلر \&\fB\-mrelax\fR و گزینهٔ پیونددهندهٔ \fB\-\-relax\fR مراجعه کنید. حالت‌های خاصی (corner cases) وجود دارند که انتظار می‌رود پیونددهنده تکه‌کدها را بسازد، اما بدون فعال بودن relaxation و بدون پیام خطای مفیدی، متوقف می‌شود. .IP * 4 اسکریپت پیونددهندهٔ پیش‌فرض برای کدهایی با \f(CW\*(C`EIND = 0\*(C'\fR تنظیم شده است. اگر قرار باشد کد برای پیکربندی‌ای با \f(CW\*(C`EIND != 0\*(C'\fR کار کند، باید از یک اسکریپت پیونددهندهٔ سفارشی استفاده شود تا بخش‌هایی که نام آن‌ها با \&\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 در صورت برقراری دو شرط زیر، خردکدها (stubs) به‌طور خودکار توسط پیونددهنده ایجاد می‌شوند: .RS 4 .ie n .IP "\-<آدرس یک برچسب با استفاده از اصلاح‌گر ""gs"" گرفته شود>" 4 .el .IP "\-<آدرس یک برچسب با استفاده از اصلاح‌گر \f(CWgs\fR گرفته شود>" 4 .IX Item "-" (کوتاه‌شدهٔ \fIgenerate stubs\fR) به صورت زیر: .Sp .Vb 2 \& LDI r24, lo8(gs()) \& LDI r25, hi8(gs()) .Ve .IP "\-<مکان نهایی آن برچسب در یک سگمنت کد باشد>" 4 .IX Item "-" \&\fIخارج\fR از سگمنتی که خردکدها در آن قرار دارند. .RE .RS 4 .RE .IP * 4 کامپایلر چنین اصلاح‌گرهای \f(CW\*(C`gs\*(C'\fR را برای برچسب‌های کد در موقعیت‌های زیر صادر می‌کند: .RS 4 .IP "\-<گرفتن آدرس یک تابع یا برچسب کد.>" 4 .IX Item "-" .PD 0 .IP "\-<دستور goto محاسباتی.>" 4 .IX Item "-" .IP "\-<در صورت استفاده از تابع prologue\-save، گزینه \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 در عوض، باید یک خردکد ایجاد شود؛ یعنی تابع باید از طریق یک نماد (در این مثال \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 از حافظه‌هایی بزرگ‌تر از محدوده ۶۴ KiB که با اشاره‌گرهای ۱۶ بیتی قابل دسترسی هستند، پشتیبانی می‌کنند. برای دسترسی به مکان‌های حافظه خارج از این محدوده ۶۴ 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 کد راه‌اندازی، ثبات‌های عملکرد خاص \f(CW\*(C`RAMP\*(C'\fR را با صفر مقداردهی اولیه می‌کند. .IP * 4 اگر از یک \fBAVR Named Address Spaces,فضای آدرس نام‌گذاری‌شده\fR به جز عمومی یا \f(CW\*(C`_\|_flash\*(C'\fR استفاده شود، آن‌گاه \f(CW\*(C`RAMPZ\*(C'\fR در صورت نیاز پیش از عملیات تنظیم می‌شود. .IP * 4 اگر قطعه از RAM بزرگ‌تر از ۶۴ KiB پشتیبانی کند و کامپایلر برای به انجام رساندن یک عملیات نیاز به تغییر \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 بزرگ‌تر از ۶۴ KiB توسط GCC برای اهداف AVR پشتیبانی نمی‌شود. اگر از اسمبلر درون‌خطی برای خواندن از مکان‌های خارج از محدوده آدرس‌دهی ۱۶ بیتی استفاده می‌کنید و یکی از ثبات‌های \f(CW\*(C`RAMP\*(C'\fR را تغییر می‌دهید، باید آن را پس از دسترسی به صفر بازنشانی کنید. .PP ماکروهای توکار AVR .IX Subsection "AVR Built-in Macros" .PP کامپایلر GCC چندین ماکروی توکار را تعریف می‌کند تا کد کاربر بتواند وجود یا عدم وجود قابلیت‌ها را بررسی کند. تقریباً تمام ماکروهای توکار زیر از قابلیت‌های قطعه استنتاج شده و بنابراین با گزینه خط فرمان \fB\-mmcu=\fR فعال می‌شوند. .PP برای ماکروهای توکار اختصاصی AVR بیشتر، بخش‌های \fBAVR Named Address Spaces\fR و \fBAVR Built\-in Functions\fR را ببینید. .ie n .IP """_\|_AVR_ARCH_\|_""" 4 .el .IP \f(CW_\|_AVR_ARCH_\|_\fR 4 .IX Item "__AVR_ARCH__" ماکروی توکاری که به یک عدد ده‌دهی نشان‌دهنده معماری تبدیل می‌شود و به گزینه \fB\-mmcu=\fR\fImcu\fR بستگی دارد. مقادیر ممکن عبارتند از: .Sp \&\f(CW2\fR، \f(CW25\fR، \f(CW3\fR، \f(CW31\fR، \f(CW35\fR، \&\f(CW4\fR، \f(CW5\fR، \f(CW51\fR، \f(CW6\fR .Sp به ترتیب برای \fImcu\fR=\f(CW\*(C`avr2\*(C'\fR، \f(CW\*(C`avr25\*(C'\fR، \f(CW\*(C`avr3\*(C'\fR، \f(CW\*(C`avr31\*(C'\fR، \&\f(CW\*(C`avr35\*(C'\fR، \f(CW\*(C`avr4\*(C'\fR، \f(CW\*(C`avr5\*(C'\fR، \f(CW\*(C`avr51\*(C'\fR، \f(CW\*(C`avr6\*(C'\fR .Sp و .Sp \&\f(CW100\fR، \&\f(CW102\fR، \f(CW103\fR، \f(CW104\fR، \&\f(CW105\fR، \f(CW106\fR، \f(CW107\fR .Sp به ترتیب برای \fImcu\fR=\f(CW\*(C`avrtiny\*(C'\fR، \&\f(CW\*(C`avrxmega2\*(C'\fR، \f(CW\*(C`avrxmega3\*(C'\fR، \f(CW\*(C`avrxmega4\*(C'\fR، \&\f(CW\*(C`avrxmega5\*(C'\fR، \f(CW\*(C`avrxmega6\*(C'\fR، \f(CW\*(C`avrxmega7\*(C'\fR. اگر \fImcu\fR یک قطعه را مشخص کند، این ماکروی توکار متناسب با آن تنظیم می‌شود. برای مثال، با \fB\-mmcu=atmega8\fR این ماکرو برابر با \f(CW4\fR تعریف می‌شود. .ie n .IP """_\|_AVR_\fIDevice\fR_\|_""" 4 .el .IP \f(CW_\|_AVR_\fR\f(CIDevice\fR\f(CW_\|_\fR 4 .IX Item "__AVR_Device__" تنظیم \fB\-mmcu=\fR\fIdevice\fR این ماکروی توکار را که نشان‌دهنده نام قطعه است تعریف می‌کند. برای مثال، \fB\-mmcu=atmega8\fR ماکروی توکار \f(CW\*(C`_\|_AVR_ATmega8_\|_\*(C'\fR را تعریف می‌کند، \fB\-mmcu=attiny261a\fR ماکروی \f(CW\*(C`_\|_AVR_ATtiny261A_\|_\*(C'\fR را تعریف می‌کند، و غیره. .Sp نام‌های ماکروهای توکار از الگوی \f(CW\*(C`_\|_AVR_\fR\f(CIDevice\fR\f(CW_\|_\*(C'\fR پیروی می‌کنند که در آن \fIDevice\fR نام قطعه مطابق راهنمای کاربر AVR است. تفاوت بین \fIDevice\fR در ماکروی توکار و \fIdevice\fR در \fB\-mmcu=\fR\fIdevice\fR این است که دومی همیشه با حروف کوچک است. .Sp اگر \fIdevice\fR یک قطعه نبوده و صرفاً یک معماری هسته مانند \fBavr51\fR باشد، این ماکرو تعریف نمی‌شود. .ie n .IP """_\|_AVR_DEVICE_NAME_\|_""" 4 .el .IP \f(CW_\|_AVR_DEVICE_NAME_\|_\fR 4 .IX Item "__AVR_DEVICE_NAME__" تنظیم \fB\-mmcu=\fR\fIdevice\fR این ماکروی توکار را برابر با نام قطعه تعریف می‌کند. برای مثال، با \fB\-mmcu=atmega8\fR این ماکرو برابر با \f(CW\*(C`atmega8\*(C'\fR تعریف می‌شود. .Sp اگر \fIdevice\fR یک قطعه نبوده و صرفاً یک معماری هسته مانند \fBavr51\fR باشد، این ماکرو تعریف نمی‌شود. .ie n .IP """_\|_AVR_CVT_\|_""" 4 .el .IP \f(CW_\|_AVR_CVT_\|_\fR 4 .IX Item "__AVR_CVT__" کد با گزینه \f(CW\*(C`\-mcvt\*(C'\fR کامپایل می‌شود تا از یک \fIجدول بردار فشرده\fR استفاده کند. .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 است. این مورد برای قطعاتی با بیش از ۸ KiB حافظه برنامه صدق می‌کند. .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 است. این مورد برای قطعاتی با بیش از ۱۲۸ KiB حافظه برنامه صدق می‌کند. همچنین به این معنی است که شمارنده برنامه (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) ۲ بایت پهنا دارد. این مورد برای قطعاتی با حداکثر ۱۲۸ KiB حافظه برنامه صدق می‌کند. .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) به دلیل نقص سخت‌افزاری نباید از روی دستورالعمل‌های ۳۲ بیتی پرش کنند. دستورالعمل‌های پرش عبارتند از \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__" قطعه دارای دستورالعمل‌های Read\-Modify\-Write (خواندن\-اصلاح\-نوشتن: XCH، LAC، LAS و LAT) است. .ie n .IP """_\|_AVR_SFR_OFFSET_\|_=\fIoffset\fR""" 4 .el .IP \f(CW_\|_AVR_SFR_OFFSET_\|_=\fR\f(CIoffset\fR\f(CW\fR 4 .IX Item "__AVR_SFR_OFFSET__=offset" دستورالعمل‌هایی که می‌توانند ثبات‌های عملکرد خاص I/O را مستقیماً آدرس‌دهی کنند مانند \f(CW\*(C`IN\*(C'\fR، \f(CW\*(C`OUT\*(C'\fR، \f(CW\*(C`SBI\*(C'\fR و غیره، ممکن است از آدرسی متفاوت نسبت به حالتی که با دستورالعمل دسترسی به RAM مانند \f(CW\*(C`LD\*(C'\fR یا \f(CW\*(C`STS\*(C'\fR آدرس‌دهی شوند، استفاده کنند. این آفست به معماری قطعه بستگی دارد و باید از آدرس RAM کسر شود تا آدرس I/O مربوطه به دست آید. .ie n .IP """_\|_AVR_SHORT_CALLS_\|_""" 4 .el .IP \f(CW_\|_AVR_SHORT_CALLS_\|_\fR 4 .IX Item "__AVR_SHORT_CALLS__" گزینه خط فرمان \fB\-mshort\-calls\fR تنظیم شده است. .ie n .IP """_\|_AVR_PM_BASE_ADDRESS_\|_=\fIaddr\fR""" 4 .el .IP \f(CW_\|_AVR_PM_BASE_ADDRESS_\|_=\fR\f(CIaddr\fR\f(CW\fR 4 .IX Item "__AVR_PM_BASE_ADDRESS__=addr" برخی قطعات از خواندن حافظه فلش با استفاده از دستورالعمل‌های \f(CW\*(C`LD*\*(C'\fR پشتیبانی می‌کنند. حافظه فلش در فضای آدرس داده با آفست \f(CW\*(C`_\|_AVR_PM_BASE_ADDRESS_\|_\*(C'\fR دیده می‌شود. اگر این ماکرو تعریف نشده باشد، این قابلیت در دسترس نیست. در صورت تعریف شدن، فضای آدرس خطی است و نیازی به قرار دادن \f(CW\*(C`.rodata\*(C'\fR در RAM نیست. این امر توسط فایل توصیف پیش‌فرض پیونددهنده مدیریت می‌شود و در حال حاضر برای \f(CW\*(C`avrtiny\*(C'\fR و \f(CW\*(C`avrxmega3\*(C'\fR موجود است. حتی راحت‌تر، نیازی به استفاده از فضاهای آدرس مانند \f(CW\*(C`_\|_flash\*(C'\fR یا قابلیت‌هایی چون مشخصه \f(CW\*(C`progmem\*(C'\fR و \f(CW\*(C`pgm_read_*\*(C'\fR وجود ندارد. .ie n .IP """_\|_AVR_HAVE_FLMAP_\|_""" 4 .el .IP \f(CW_\|_AVR_HAVE_FLMAP_\|_\fR 4 .IX Item "__AVR_HAVE_FLMAP__" این ماکرو مشروط بر برقراری شرایط زیر تعریف می‌شود: .RS 4 .ie n .IP "*<قطعه دارای میدان بیتی ""NVMCTRL_CTRLB.FLMAP"" باشد.>" 4 .el .IP "*<قطعه دارای میدان بیتی \f(CWNVMCTRL_CTRLB.FLMAP\fR باشد.>" 4 .IX Item "*" این موضوع در مورد قطعات AVR64* و AVR128* صدق می‌کند..IP "*" 4 .IX Item "*" .RE .RS 4 .Sp این نشان می‌دهد که کامپایلر با GNU Binutils پیکربندی شده است که PR31124 (\f(CW\*(C`https://sourceware.org/PR31124\*(C'\fR) را پیاده‌سازی می‌کند. .RE .ie n .IP """_\|_AVR_RODATA_IN_RAM_\|_""" 4 .el .IP \f(CW_\|_AVR_RODATA_IN_RAM_\|_\fR 4 .IX Item "__AVR_RODATA_IN_RAM__" این ماکرو هنگامی که کد برای یک معماری پایه کامپایل می‌شود، تعریف‌نشده است. .Sp هنگامی که کد برای یک افزاره کامپایل می‌شود، چنانچه بخش‌های \f(CW\*(C`.rodata\*(C'\fR برای داده‌های فقط‌خواندنی در RAM قرار گیرند، این ماکرو برابر ۱ تعریف می‌شود؛ و در غیر این صورت، برابر ۰ تعریف می‌شود. .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 ۳۲\-بیتی یا 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 گزینه‌های زیر به صورت داخلی توسط کامپایلر و برای برقراری ارتباط بین فایل‌های مشخصات افزاره (device specs) و خود کامپایلر استفاده می‌شوند. نیازی نیست این گزینه‌ها را به صورت دستی تنظیم کنید؛ به‌ویژه آن‌که آن‌ها گزینه‌های بهینه‌سازی نیستند. استفادهٔ نادرست از این گزینه‌ها ممکن است منجر به تولید کدی غیراصولی یا اشتباه شود. آن‌ها به منظور کامل بودن مستندات و جهت دستیابی به درک بهتر از فایل‌های مشخصات افزاره (\f(CW\*(C`https://gcc.gnu.org/wiki/avr\-gcc#spec\-files\*(C'\fR) مستند شده‌اند. .IP \fB\-mn\-flash=\fR\fInum\fR 4 .IX Item "-mn-flash=num" فرض می‌کند که حافظهٔ فلش اندازه‌ای برابر با \fInum\fR ضربدر ۶۴ KiB دارد. این گزینه مشخص می‌کند که کدام فضاهای آدرس \f(CW\*(C`_\|_flash\fR\f(CIN\fR\f(CW\*(C'\fR در دسترس هستند. .IP \fB\-mflmap\fR 4 .IX Item "-mflmap" افزاره دارای فیلد بیتی \f(CW\*(C`FLMAP\*(C'\fR در ثبات عملکرد ویژهٔ \f(CW\*(C`NVMCTRL_CTRLB\*(C'\fR است. .IP \fB\-mrmw\fR 4 .IX Item "-mrmw" فرض می‌کند که افزاره از دستورالعمل‌های خواندن\-تغییر\-نوشتن (Read\-Modify\-Write) شامل \f(CW\*(C`XCH\*(C'\fR، \f(CW\*(C`LAC\*(C'\fR، \f(CW\*(C`LAS\*(C'\fR و \f(CW\*(C`LAT\*(C'\fR پشتیبانی می‌کند. .IP \fB\-mshort\-calls\fR 4 .IX Item "-mshort-calls" فرض می‌کند که \f(CW\*(C`RJMP\*(C'\fR و \f(CW\*(C`RCALL\*(C'\fR می‌توانند کل حافظهٔ برنامه را هدف قرار دهند. این گزینه برای تولید و انتخاب multilib برای افزاره‌های معماری \f(CW\*(C`avrxmega3\*(C'\fR استفاده می‌شود. .IP \fB\-mskip\-bug\fR 4 .IX Item "-mskip-bug" تولید کد بدون پرش‌های شرطی (\f(CW\*(C`CPSE\*(C'\fR، \f(CW\*(C`SBRS\*(C'\fR، \&\f(CW\*(C`SBRC\*(C'\fR، \f(CW\*(C`SBIS\*(C'\fR، \f(CW\*(C`SBIC\*(C'\fR) از روی دستورالعمل‌های ۳۲\-بیتی. .IP \fB\-msp8\fR 4 .IX Item "-msp8" ثبات اشاره‌گر پشته را به عنوان یک ثبات ۸\-بیتی در نظر می‌گیرد، بدین معنی که بایت بالای اشاره‌گر پشته صفر فرض می‌شود. این گزینه توسط کامپایلر برای انتخاب و ساخت multilibها برای معماری‌های \f(CW\*(C`avr2\*(C'\fR و \f(CW\*(C`avr25\*(C'\fR استفاده می‌شود. این معماری‌ها ترکیبی از افزاره‌های دارای \f(CW\*(C`SPH\*(C'\fR و فاقد آن هستند. .PP \fIگزینه‌های Blackfin\fR .IX Subsection "Blackfin Options" .IP \fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] 4 .IX Item "-mcpu=cpu[-sirevision]" نام پردازندهٔ Blackfin مقصد را مشخص می‌کند. در حال حاضر، \fIcpu\fR می‌تواند یکی از مقادیر \fBbf512\fR، \fBbf514\fR، \fBbf516\fR، \fBbf518\fR، \&\fBbf522\fR، \fBbf523\fR، \fBbf524\fR، \fBbf525\fR، \fBbf526\fR، \&\fBbf527\fR، \fBbf531\fR، \fBbf532\fR، \fBbf533\fR، \&\fBbf534\fR، \fBbf536\fR، \fBbf537\fR، \fBbf538\fR، \fBbf539\fR، \&\fBbf542\fR، \fBbf544\fR، \fBbf547\fR، \fBbf548\fR، \fBbf549\fR، \&\fBbf542m\fR، \fBbf544m\fR، \fBbf547m\fR، \fBbf548m\fR، \fBbf549m\fR، \&\fBbf561\fR یا \fBbf592\fR باشد. .Sp مقدار اختیاری \fIsirevision\fR ویرایش سیلیکونی پردازندهٔ Blackfin مقصد را مشخص می‌کند. هرگونه راهکار دورزدن مشکل موجود برای ویرایش سیلیکونی هدف فعال می‌شود. اگر \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" برای توابع برگ، اشاره‌گر فریم را در ثبات نگه نمی‌دارد. این کار از دستورالعمل‌های ذخیره، راه‌اندازی و بازیابی اشاره‌گر فریم جلوگیری کرده و یک ثبات اضافی در توابع برگ آزاد می‌کند. .IP \fB\-mspecld\-anomaly\fR 4 .IX Item "-mspecld-anomaly" هنگام فعال بودن، کامپایلر تضمین می‌کند که کد تولیدشده شامل بارگذاری‌های حدسی (speculative loads) پس از دستورالعمل‌های پرش نباشد. در صورت استفاده از این گزینه، \&\f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_LOADS\*(C'\fR تعریف می‌شود. .IP \fB\-mno\-specld\-anomaly\fR 4 .IX Item "-mno-specld-anomaly" کد اضافه‌ای برای جلوگیری از رخ دادن بارگذاری‌های حدسی تولید نمی‌کند. .IP \fB\-mcsync\-anomaly\fR 4 .IX Item "-mcsync-anomaly" هنگام فعال بودن، کامپایلر اطمینان حاصل می‌کند که کد تولیدشده شامل دستورالعمل‌های CSYNC یا SSYNC با فاصلهٔ بسیار کم پس از شاخه‌های شرطی نباشد. در صورت استفاده از این گزینه، \f(CW\*(C`_\|_WORKAROUND_SPECULATIVE_SYNCS\*(C'\fR تعریف می‌شود. .IP \fB\-mno\-csync\-anomaly\fR 4 .IX Item "-mno-csync-anomaly" کد اضافه‌ای برای جلوگیری از وقوع دستورالعمل‌های CSYNC یا SSYNC در فواصل کوتاه پس از یک شاخهٔ شرطی تولید نمی‌کند. .IP \fB\-mlow64k\fR 4 .IX Item "-mlow64k" هنگام فعال بودن، کامپایلر مجاز است بر اساس این موضوع که کل برنامه در ۶۴ کیلوبایت پایینی حافظه جای می‌گیرد، کد را بهینه‌سازی کند. .IP \fB\-mno\-low64k\fR 4 .IX Item "-mno-low64k" فرض می‌کند که برنامه می‌تواند به هر اندازه بزرگ باشد. این حالت پیش‌فرض است. .IP \fB\-mstack\-check\-l1\fR 4 .IX Item "-mstack-check-l1" بررسی پشته را با استفاده از اطلاعات قرار داده‌شده در حافظهٔ یادداشت L1 توسط هستهٔ uClinux انجام می‌دهد. .IP \fB\-mid\-shared\-library\fR 4 .IX Item "-mid-shared-library" کدی تولید می‌کند که از کتابخانه‌های اشتراکی از طریق روش شناسهٔ کتابخانه پشتیبانی می‌کند. این امر اجرای درجا و استفاده از کتابخانه‌های اشتراکی را در محیط‌های فاقد مدیریت حافظهٔ مجازی ممکن می‌سازد. این گزینه مستلزم \fB\-fPIC\fR است. برای مقاصد \fBbfin\-elf\fR، این گزینه مستلزم \fB\-msim\fR نیز هست..IP \fB\-mno\-id\-shared\-library\fR 4 .IX Item "-mno-id-shared-library" کدی تولید می‌کند که فرض نمی‌کند کتابخانه‌های اشتراکی مبتنی بر شناسه (ID-based) در حال استفاده هستند. این حالت پیش‌فرض است. .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" کدی تولید می‌کند که اجازه می‌دهد بخش داده در ناحیه‌ای متفاوت از حافظه نسبت به بخش متن قرار گیرد. این کار با حذف بازنشانی‌ها نسبت به بخش متن، امکان اجرای درجا (execute in place) را در محیط‌های فاقد مدیریت حافظهٔ مجازی فراهم می‌سازد. .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" درون‌خطی‌سازی (inlining) مدخل‌های PLT را در فراخوانی توابعی که مشخص نیست به‌صورت محلی مقید می‌شوند فعال می‌کند. این گزینه بدون \fB\-mfdpic\fR هیچ اثری ندارد. .IP \fB\-mmulticore\fR 4 .IX Item "-mmulticore" ساخت یک برنامهٔ مستقل (standalone) برای پردازنده‌های چندهسته‌ای 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، مدل برنامه‌نویسی «تک‌برنامه/دوهسته‌ای» استفاده می‌شود. در این مدل، تابع اصلی هستهٔ B باید به‌صورت \f(CW\*(C`coreb_main\*(C'\fR نام‌گذاری شود. .Sp اگر از این گزینه استفاده نشود، مدل برنامه‌نویسی برنامهٔ تک‌هسته‌ای استفاده می‌شود. .IP \fB\-mcorea\fR 4 .IX Item "-mcorea" ساخت یک برنامهٔ مستقل برای هستهٔ A از پردازندهٔ BF561 هنگام استفاده از مدل برنامه‌نویسی «یک برنامه به ازای هر هسته». فایل‌های راه‌اندازی و اسکریپت‌های پیوند مناسب برای پشتیبانی از هستهٔ A استفاده شده و ماکروی \&\f(CW\*(C`_\|_BFIN_COREA\*(C'\fR تعریف می‌شود. این گزینه تنها در ترکیب با \fB\-mmulticore\fR قابل استفاده است. .IP \fB\-mcoreb\fR 4 .IX Item "-mcoreb" ساخت یک برنامهٔ مستقل برای هستهٔ B از پردازندهٔ BF561 هنگام استفاده از مدل برنامه‌نویسی «یک برنامه به ازای هر هسته». فایل‌های راه‌اندازی و اسکریپت‌های پیوند مناسب برای پشتیبانی از هستهٔ B استفاده شده و ماکروی \&\f(CW\*(C`_\|_BFIN_COREB\*(C'\fR تعریف می‌شود. هنگام استفاده از این گزینه، باید به جای \f(CW\*(C`main\*(C'\fR از \&\f(CW\*(C`coreb_main\*(C'\fR استفاده شود. این گزینه تنها در ترکیب با \fB\-mmulticore\fR قابل استفاده است. .IP \fB\-msdram\fR 4 .IX Item "-msdram" ساخت یک برنامهٔ مستقل برای SDRAM. فایل‌های راه‌اندازی و اسکریپت‌های پیوند مناسب برای قرار دادن برنامه در SDRAM استفاده شده و ماکروی \&\f(CW\*(C`_\|_BFIN_SDRAM\*(C'\fR تعریف می‌شود. بارگذار (loader) باید پیش از بارگذاری برنامه، SDRAM را مقداردهی اولیه کند. .IP \fB\-micplb\fR 4 .IX Item "-micplb" فرض می‌کند که ICPLBها در زمان اجرا فعال هستند. این امر بر رفع برخی ناهنجاری‌ها (anomaly workarounds) تأثیر می‌گذارد. برای مقصدهای Linux، پیش‌فرض بر این است که ICPLBها فعال هستند؛ برای برنامه‌های مستقل، پیش‌فرض غیرفعال بودن است. .PP \fIگزینه‌های C6X\fR .IX Subsection "C6X Options" .IP \fB\-march=\fR\fIname\fR 4 .IX Item "-march=name" نام معماری مقصد را مشخص می‌کند. GCC از این نام برای تعیین این‌که هنگام تولید کد اسمبلی چه نوع دستورالعمل‌هایی را می‌تواند صادر کند استفاده می‌کند. نام‌های مجاز عبارتند از: \&\fBc62x\fR، \&\fBc64x\fR، \fBc64x+\fR، \fBc67x\fR، \fBc67x+\fR، \fBc674x\fR. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد برای یک مقصد بزرگ‌انتها (big-endian). .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد برای یک مقصد کوچک‌انتها (little-endian). این حالت پیش‌فرض است. .IP \fB\-msim\fR 4 .IX Item "-msim" انتخاب فایل‌های راه‌اندازی و اسکریپت پیونددهندهٔ مناسب برای شبیه‌ساز. .IP \fB\-msdata=default\fR 4 .IX Item "-msdata=default" قرار دادن داده‌های سراسری و ایستا (static) کوچک در بخش \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" بهینه‌سازی تمام جنبه‌های کاربردی کد تولیدشده برای \fIarchitecture\-type\fR، به جز ABI و مجموعهٔ دستورالعمل‌های در دسترس. گزینه‌های انتخابی برای \&\fIarchitecture\-type\fR همانند گزینه‌های \&\fB\-march=\fR\fIarchitecture\-type\fR هستند. .IP \fB\-mmax\-stack\-frame=\fR\fIn\fR 4 .IX Item "-mmax-stack-frame=n" هنگامی که فریم پشتهٔ یک تابع از \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) ترازسازی (یا حذف ترتیبات ترازسازی) فریم پشته، داده‌های منفرد و مقادیر ثابت را بر اساس حداکثر اندازهٔ دسترسی منفرد به داده برای مدل CPU انتخاب‌شده تنظیم می‌کنند. حالت پیش‌فرض، تنظیم ترازسازی ۳۲ بیتی است. جزئیات ABI مانند چینش ساختار (structure layout) تحت تأثیر این گزینه‌ها قرار نمی‌گیرند..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 در بالا، این گزینه‌ها ترتیبی می‌دهند که چارچوب پشته (stack frame)، داده‌های قابل نوشتن و مقادیر ثابت، همگی با تراز ۳۲ بیتی، ۱۶ بیتی یا ۸ بیتی قرار گیرند. پیش‌فرض، تراز ۳۲ بیتی است. .IP \fB\-mno\-prologue\-epilogue\fR 4 .IX Item "-mno-prologue-epilogue" .PD 0 .IP \fB\-mprologue\-epilogue\fR 4 .IX Item "-mprologue-epilogue" .PD با \fB\-mno\-prologue\-epilogue\fR، مقدمه (prologue) و مؤخره (epilogue) عادی تابع که چارچوب پشته را برپا می‌کنند حذف می‌شوند و هیچ دستور بازگشت یا توالی‌های بازگشتی در کد تولید نمی‌گردد. از این گزینه تنها همراه با بازبینی چشمی کد کامپایل‌شده استفاده کنید: هنگامی که ثبات‌های ذخیره‌شده توسط فراخوانده (call\-saved registers) باید ذخیره شوند یا نیاز به تخصیص فضا برای متغیرهای محلی باشد، هیچ هشدار یا خطایی صادر نمی‌شود. .IP \fB\-melf\fR 4 .IX Item "-melf" گزینه قدیمی و بی‌اثر (no\-op). .IP \fB\-sim\fR 4 .IX Item "-sim" این گزینه ترتیبی می‌دهد تا پیوند با توابع ورودی\-خروجی از یک کتابخانه شبیه‌ساز انجام شود. کد، داده‌های مقداردهی‌شده و داده‌های با مقدار اولیه صفر، به‌صورت پی‌درپی تخصیص می‌یابند. .IP \fB\-sim2\fR 4 .IX Item "-sim2" مشابه \fB\-sim\fR، اما گزینه‌هایی را به پیونددهنده ارسال می‌کند تا داده‌های مقداردهی‌شده در 0x40000000 و داده‌های با مقدار اولیه صفر در 0x80000000 مستقر شوند. .PP \fIگزینه‌های C\-SKY (C\-SKY Options)\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) را انتخاب می‌کند. مقدار پیش‌فرض، کوچک‌پایان است. .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\-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 دستورهای پشته وقفه (interrupt stack) را فعال می‌کند؛ پیش‌فرض خاموش (off) است. .Sp گزینه \fB\-mistack\fR برای رسیدگی به ویژگی‌های (attributes) تابعی \&\f(CW\*(C`interrupt\*(C'\fR و \f(CW\*(C`isr\*(C'\fR لازم است. .IP \fB\-mmp\fR 4 .IX Item "-mmp" دستورهای چندپردازنده‌ای را فعال می‌کند؛ پیش‌فرض خاموش (off) است. .IP \fB\-mcp\fR 4 .IX Item "-mcp" دستورهای کمک‌پردارنده (coprocessor) را فعال می‌کند؛ پیش‌فرض خاموش (off) است. .IP \fB\-mcache\fR 4 .IX Item "-mcache" دستورهای کمک‌پردارنده را فعال می‌کند؛ پیش‌فرض خاموش (off) است. .IP \fB\-msecurity\fR 4 .IX Item "-msecurity" دستورهای امنیتی C\-SKY را فعال می‌کند؛ پیش‌فرض خاموش (off) است. .IP \fB\-mtrust\fR 4 .IX Item "-mtrust" دستورهای مورد اعتماد (trust) C\-SKY را فعال می‌کند؛ پیش‌فرض خاموش (off) است. .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) را فعال می‌کند. تمامی این گزینه‌ها به‌طور پیش‌فرض خاموش (off) هستند. .IP \fB\-mdiv\fR 4 .IX Item "-mdiv" .PD 0 .IP \fB\-mno\-div\fR 4 .IX Item "-mno-div" .PD دستورهای تقسیم را تولید می‌کند. پیش‌فرض خاموش (off) است. .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 جهت فراهم ساختن امکان استفاده از دستورهای ۱۶ بیتی. این گزینه برای CK801 که این رفتار در آن الزامی است نادیده گرفته می‌شود، و به‌طور پیش‌فرض برای CK802 روشن (on) است. برای سایر مقاصد، پیش‌فرض خاموش (off) است. .IP \fB\-mhigh\-registers\fR 4 .IX Item "-mhigh-registers" .PD 0 .IP \fB\-mno\-high\-registers\fR 4 .IX Item "-mno-high-registers" .PD تولید کد با استفاده از ثبات‌های بالایی شماره‌های 16 تا 31. این گزینه در CK801، CK802 یا CK803 پشتیبانی نمی‌شود، و به‌طور پیش‌فرض برای سایر پردازنده‌ها فعال است. .IP \fB\-manchor\fR 4 .IX Item "-manchor" .PD 0 .IP \fB\-mno\-anchor\fR 4 .IX Item "-mno-anchor" .PD تولید کد با استفاده از نشانی‌های نماد لنگر سراسری (global anchor symbol 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" تنظیم هزینهٔ انشعاب‌ها (branch costs) تقریباً به اندازهٔ \f(CW\*(C`n\*(C'\fR دستورالعمل. مقدار پیش‌فرض 1 است. .IP \fB\-msched\-prolog\fR 4 .IX Item "-msched-prolog" .PD 0 .IP \fB\-mno\-sched\-prolog\fR 4 .IX Item "-mno-sched-prolog" .PD اجازه دادن به زمان‌بندی توالی‌های پرولوگ و اپیلوگ توابع. استفاده از این گزینه می‌تواند منجر به تولید کدی شود که با الزامات پرولوگ در 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" این گزینه مشخص می‌کند که یک برنامهٔ کنسولی تولید شود؛ این کار با دستور دادن به پیونددهنده (linker) برای تنظیم نوع زیرسیستم در سرآیند 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 برمی‌گزیند و با آن پیوند می‌زند. نام‌های شناخته‌شدهٔ کتابخانهٔ 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 برای پیوند به‌کار می‌رود و هیچ تنظیم دیگری برای پیش‌پردازنده انجام نخواهد شد. کتابخانهٔ واردسازی \f(CW\*(C`msvcrt\*(C'\fR در MinGW صرفاً یک پیوند نمادین به (یا کپی‌ای از) کتابخانهٔ واردسازی CRT دیگری در MinGW است که در هنگام کامپایل MinGW انتخاب شده است. کتابخانهٔ واردسازی \f(CW\*(C`msvcrt\-os\*(C'\fR در MinGW برای کتابخانهٔ سیستمی \f(CW\*(C`msvcrt.dll\*(C'\fR ویندوز بوده و در اغلب موارد کتابخانهٔ پیش‌فرض واردسازی MinGW است. به‌طور کلی، تغییر CRT DLL مستلزم کامپایل مجدد کل MinGW CRT است. این گزینه صرفاً برای اهداف آزمایشی و ارزیابی کاربرد دارد. این گزینه برای مقصدهای MinGW در دسترس است. .IP \fB\-mdll\fR 4 .IX Item "-mdll" این گزینه برای مقصدهای Cygwin و MinGW در دسترس است. این گزینه مشخص می‌کند که یک DLL\-\-\-کتابخانهٔ پیوند پویا\-\-\-باید تولید شود، و بدین‌صورت امکان انتخاب شیء آغازین زمان اجرای لازم و نقطهٔ ورود را فراهم می‌سازد. .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 در دسترس است. این گزینه مشخص می‌کند که یک برنامهٔ دارای واسط گرافیکی (GUI) باید با دستور به پیونددهنده برای تنظیم مناسب نوع زیرسیستم در سرآیند PE تولید شود. .IP \fB\-fno\-set\-stack\-executable\fR 4 .IX Item "-fno-set-stack-executable" این گزینه برای مقصدهای MinGW در دسترس است. مشخص می‌کند که پرچم قابل اجرا بودن برای پشته‌ای که توسط توابع تودرتو استفاده می‌شود، تنظیم نشود. این امر برای باینری‌هایی که در حالت هستهٔ (kernel mode) Microsoft Windows اجرا می‌شوند ضروری است، زیرا در آنجا User32 API که برای تنظیم مجوزهای اجرایی به کار می‌رود، در دسترس نیست. .IP \fB\-fwritable\-relocated\-rdata\fR 4 .IX Item "-fwritable-relocated-rdata" این گزینه برای مقصدهای MinGW و Cygwin در دسترس است. مشخص می‌کند که داده‌های بازآدرس‌دهی‌شده در بخش فقط‌خواندنی، درون بخش \f(CW\*(C`.data\*(C'\fR قرار گیرند. این ویژگی برای زمان‌های اجرای قدیمی‌تری که از تغییر بخش‌های \f(CW\*(C`.rdata\*(C'\fR برای شبه‌بازآدرس‌دهی پشتیبانی نمی‌کنند، ضروری است. .IP \fB\-mpe\-aligned\-commons\fR 4 .IX Item "-mpe-aligned-commons" این گزینه برای مقصدهای Cygwin و MinGW در دسترس است. این گزینه مشخص می‌کند پسوند GNU برای ساختار فایل PE که امکان هم‌ترازی صحیح متغیرهای COMMON را فراهم می‌کند، در هنگام تولید کد باید استفاده شود. در صورتی که GCC تشخیص دهد اسمبلر مقصد یافت‌شده در حین پیکربندی از این قابلیت پشتیبانی می‌کند، به‌طور پیش‌فرض فعال خواهد بود. .PP همچنین برای گزینه‌های استاندارد، \fBگزینه‌های x86\fR را ببینید. .PP \fIگزینه‌های Darwin\fR .IX Subsection "Darwin Options" .PP این گزینه‌ها برای تمامی معماری‌هایی که سیستم‌عامل Darwin را اجرا می‌کنند تعریف شده‌اند. .PP کامپایلر FSF GCC در Darwin فایل‌های شیء چندمعماری («fat») ایجاد نمی‌کند؛ بلکه یک فایل شیء صرفاً برای همان تک معماری‌ای ایجاد می‌کند که GCC برای هدف قرار دادن آن ساخته شده است. نسخهٔ 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" افزودن دایرکتوری چارچوب (framework) \fIdir\fR به ابتدای فهرست دایرکتوری‌هایی که باید برای فایل‌های سرآیند جستجو شوند. این دایرکتوری‌ها با موارد مشخص‌شده توسط گزینه‌های \fB\-I\fR در هم آمیخته شده و به ترتیب از چپ به راست پویش می‌شوند. .Sp دایرکتوری چارچوب، پوشه‌ای است که چارچوب‌ها در آن قرار دارند. یک چارچوب، پوشه‌ای است که مستقیماً شامل یک دایرکتوری \fIHeaders\fR و/یا \&\fIPrivateHeaders\fR بوده و نام آن به \fI.framework\fR ختم می‌شود. نام چارچوب، همان نام این دایرکتوری بدون پسوند \fI.framework\fR است. سرآیندهای مربوط به چارچوب در یکی از آن دو پوشه یافت می‌شوند، به طوری که ابتدا \&\fIHeaders\fR جستجو می‌گردد. یک زیرچارچوب (subframework)، پوشهٔ چارچوبی است که در پوشهٔ \fIFrameworks\fR یک چارچوب قرار دارد. شامل‌سازی (include) سرآیندهای زیرچارچوب تنها می‌تواند در سرآیندی از همان چارچوبِ دربردارندهٔ زیرچارچوب، یا در سرآیند یک زیرچارچوب همتا رخ دهد. دو زیرچارچوب در صورتی همتا هستند که در یک چارچوب یکسان واقع شده باشند. یک زیرچارچوب نباید نامی مشابه با یک چارچوب داشته باشد؛ در صورت نقض این قاعده هشداری صادر می‌شود. در حال حاضر یک زیرچارچوب نمی‌تواند زیرچارچوب‌های دیگری داشته باشد؛ در آینده ممکن است این سازوکار برای پشتیبانی از آن گسترش یابد. چارچوب‌های استاندارد را می‌توان در \&\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" حالت توسعهٔ هسته را فعال می‌کند. گزینهٔ \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 را تنظیم می‌کند. این حالت همچنین برای مقصدهای PowerPC، گزینه‌های \fB\-mno\-altivec\fR، \&\fB\-msoft\-float\fR، \fB\-fno\-builtin\fR و \&\fB\-mlong\-branch\fR را تنظیم می‌نماید. .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 کدی مناسب برای توسعه با چرخهٔ بازگشت سریع تولید می‌کند، به عنوان مثال تا به GDB اجازه دهد فایل‌های \fI.o\fR را به‌طور پویا درون برنامه‌های از قبل در حال اجرا بارگذاری کند. گزینه‌های \fB\-findirect\-data\fR و \fB\-ffix\-and\-continue\fR برای سازگاری با نسخه‌های پیشین ارائه شده‌اند. .IP \fB\-all_load\fR 4 .IX Item "-all_load" تمام اعضای کتابخانه‌های آرشیو ایستا را بارگذاری می‌کند. برای اطلاعات بیشتر صفحهٔ راهنمای \fBld\fR\|(1) را ببینید. .IP \fB\-arch_errors_fatal\fR 4 .IX Item "-arch_errors_fatal" باعث می‌شود خطاهای مربوط به فایل‌هایی با معماری نادرست مهلک در نظر گرفته شوند. .IP \fB\-bind_at_load\fR 4 .IX Item "-bind_at_load" باعث می‌شود فایل خروجی به‌گونه‌ای نشانه‌گذاری شود که پیونددهندهٔ پویا هنگام بارگذاری یا اجرای فایل، تمام ارجاعات تعریف‌نشده را مقید کند. .IP \fB\-bundle\fR 4 .IX Item "-bundle" فایلی با قالب Mach\-o bundle تولید می‌کند. برای اطلاعات بیشتر صفحهٔ راهنمای \fBld\fR\|(1) را ببینید. .IP "\fB\-bundle_loader\fR \fIexecutable\fR" 4 .IX Item "-bundle_loader executable" این گزینه فایل اجرایی (\fIexecutable\fR) را مشخص می‌کند که فایل خروجی ساختِ در حال پیوند را بارگذاری خواهد کرد. برای اطلاعات بیشتر صفحهٔ راهنمای \fBld\fR\|(1) را ببینید. .IP \fB\-dynamiclib\fR 4 .IX Item "-dynamiclib" هنگامی که این گزینه مشخص شود، GCC در زمان پیوند با استفاده از دستور \fIlibtool\fR در Darwin، به جای یک فایل اجرایی یک کتابخانهٔ پویا تولید می‌کند. .IP \fB\-force_cpusubtype_ALL\fR 4 .IX Item "-force_cpusubtype_ALL" این گزینه باعث می‌شود فایل خروجی GCC به‌جای زیرنوعی که توسط گزینهٔ \fB\-mcpu\fR یا \fB\-march\fR تعیین می‌شود، دارای زیرنوع \fBALL\fR باشد. .IP \fB\-nodefaultrpaths\fR 4 .IX Item "-nodefaultrpaths" مسیرهای اجرای (run paths) پیش‌فرض دایرکتوری‌های کتابخانهٔ کامپایلر را به فایل‌های اجرایی، پودمان‌ها یا کتابخانه‌های پویا اضافه نمی‌کند. در macOS 10.5 و جدیدتر، مسیر اجرای تعبیه‌شده به‌طور پیش‌فرض اضافه می‌شود مگر آنکه کاربر \&\fB\-nodefaultrpaths\fR را به خط پیوند بیفزاید. مسیرهای اجرا برای ساخت در macOS نسخهٔ 10.11 یا جدیدتر مورد نیاز هستند (و بنابراین اجباری می‌شوند). .IP "\fB\-allowable_client\fR \fIclient_name\fR" 4 .IX Item "-allowable_client client_name" .PD 0 .IP \fB\-client_name\fR 4 .IX Item "-client_name" .IP \fB\-compatibility_version\fR 4 .IX Item "-compatibility_version" .IP \fB\-current_version\fR 4 .IX Item "-current_version" .IP \fB\-dead_strip\fR 4 .IX Item "-dead_strip" .IP \fB\-dependency\-file\fR 4 .IX Item "-dependency-file" .IP \fB\-dylib_file\fR 4 .IX Item "-dylib_file" .IP \fB\-dylinker_install_name\fR 4 .IX Item "-dylinker_install_name" .IP \fB\-dynamic\fR 4 .IX Item "-dynamic" .IP \fB\-exported_symbols_list\fR 4 .IX Item "-exported_symbols_list" .IP \fB\-filelist\fR 4 .IX Item "-filelist" .IP \fB\-flat_namespace\fR 4 .IX Item "-flat_namespace" .IP \fB\-force_flat_namespace\fR 4 .IX Item "-force_flat_namespace" .IP \fB\-headerpad_max_install_names\fR 4 .IX Item "-headerpad_max_install_names" .IP \fB\-image_base\fR 4 .IX Item "-image_base" .IP \fB\-init\fR 4 .IX Item "-init" .IP \fB\-install_name\fR 4 .IX Item "-install_name" .IP \fB\-keep_private_externs\fR 4 .IX Item "-keep_private_externs" .IP \fB\-multi_module\fR 4 .IX Item "-multi_module" .IP \fB\-multiply_defined\fR 4 .IX Item "-multiply_defined" .IP \fB\-multiply_defined_unused\fR 4 .IX Item "-multiply_defined_unused" .IP \fB\-noall_load\fR 4 .IX Item "-noall_load" .IP \fB\-no_dead_strip_inits_and_terms\fR 4 .IX Item "-no_dead_strip_inits_and_terms" .IP \fB\-nofixprebinding\fR 4 .IX Item "-nofixprebinding" .IP \fB\-nomultidefs\fR 4 .IX Item "-nomultidefs" .IP \fB\-noprebind\fR 4 .IX Item "-noprebind" .IP \fB\-noseglinkedit\fR 4 .IX Item "-noseglinkedit" .IP \fB\-pagezero_size\fR 4 .IX Item "-pagezero_size" .IP \fB\-prebind\fR 4 .IX Item "-prebind" .IP \fB\-prebind_all_twolevel_modules\fR 4 .IX Item "-prebind_all_twolevel_modules" .IP \fB\-private_bundle\fR 4 .IX Item "-private_bundle" .IP \fB\-read_only_relocs\fR 4 .IX Item "-read_only_relocs" .IP \fB\-sectalign\fR 4 .IX Item "-sectalign" .IP \fB\-sectobjectsymbols\fR 4 .IX Item "-sectobjectsymbols" .IP \fB\-whyload\fR 4 .IX Item "-whyload" .IP \fB\-seg1addr\fR 4 .IX Item "-seg1addr" .IP \fB\-sectcreate\fR 4 .IX Item "-sectcreate" .IP \fB\-sectobjectsymbols\fR 4 .IX Item "-sectobjectsymbols" .IP \fB\-sectorder\fR 4 .IX Item "-sectorder" .IP \fB\-segaddr\fR 4 .IX Item "-segaddr" .IP \fB\-segs_read_only_addr\fR 4 .IX Item "-segs_read_only_addr" .IP \fB\-segs_read_write_addr\fR 4 .IX Item "-segs_read_write_addr" .IP \fB\-seg_addr_table\fR 4 .IX Item "-seg_addr_table" .IP \fB\-seg_addr_table_filename\fR 4 .IX Item "-seg_addr_table_filename" .IP \fB\-seglinkedit\fR 4 .IX Item "-seglinkedit" .IP \fB\-segprot\fR 4 .IX Item "-segprot" .IP \fB\-segs_read_only_addr\fR 4 .IX Item "-segs_read_only_addr" .IP \fB\-segs_read_write_addr\fR 4 .IX Item "-segs_read_write_addr" .IP \fB\-single_module\fR 4 .IX Item "-single_module".IP \fB\-static\fR 4 .IX Item "-static" .IP \fB\-sub_library\fR 4 .IX Item "-sub_library" .IP \fB\-sub_umbrella\fR 4 .IX Item "-sub_umbrella" .IP \fB\-twolevel_namespace\fR 4 .IX Item "-twolevel_namespace" .IP \fB\-umbrella\fR 4 .IX Item "-umbrella" .IP \fB\-undefined\fR 4 .IX Item "-undefined" .IP \fB\-unexported_symbols_list\fR 4 .IX Item "-unexported_symbols_list" .IP \fB\-weak_reference_mismatches\fR 4 .IX Item "-weak_reference_mismatches" .IP \fB\-whatsloaded\fR 4 .IX Item "-whatsloaded" .PD این گزینه‌ها به پیونددهندهٔ Darwin ارسال می‌شوند. صفحهٔ راهنمای پیونددهندهٔ Darwin آن‌ها را با جزئیات شرح می‌دهد. .PP \fIگزینه‌های DEC Alpha\fR .IX Subsection "DEC Alpha Options" .PP این گزینه‌های \fB\-m\fR برای پیاده‌سازی‌های DEC Alpha تعریف شده‌اند: .IP \fB\-mno\-soft\-float\fR 4 .IX Item "-mno-soft-float" .PD 0 .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD استفاده (عدم استفاده) از دستورالعمل‌های سخت‌افزاری ممیز شناور برای عملیات ممیز شناور. هنگامی که \fB\-msoft\-float\fR مشخص شود، توابع موجود در \fIlibgcc.a\fR برای انجام عملیات ممیز شناور استفاده می‌شوند. مگر اینکه با روال‌هایی جایگزین شوند که عملیات ممیز شناور را شبیه‌سازی می‌کنند، یا به نحوی کامپایل شده باشند که چنین روال‌های شبیه‌سازی را فراخوانی کنند، این روال‌ها دستورات ممیز شناور صادر می‌کنند. اگر برای یک Alpha بدون عملیات ممیز شناور کامپایل می‌کنید، باید اطمینان حاصل کنید که کتابخانه به گونه‌ای ساخته شده است که آن‌ها را فراخوانی نکند. .Sp توجه داشته باشید که پیاده‌سازی‌های Alpha بدون عملیات ممیز شناور نیز ملزم به داشتن ثبات‌های ممیز شناور هستند. .IP \fB\-mfp\-reg\fR 4 .IX Item "-mfp-reg" .PD 0 .IP \fB\-mno\-fp\-regs\fR 4 .IX Item "-mno-fp-regs" .PD تولید کدی که از مجموعه ثبات‌های ممیز شناور استفاده می‌کند (استفاده نمی‌کند). \&\fB\-mno\-fp\-regs\fR به معنای اعمال \fB\-msoft\-float\fR است. اگر از مجموعه ثبات‌های ممیز شناور استفاده نشود، عملوندهای ممیز شناور در ثبات‌های عدد صحیح ارسال می‌شوند، گویی که عدد صحیح هستند، و نتایج ممیز شناور به جای \f(CW$f0\fR در \f(CW$0\fR بازگردانده می‌شوند. این یک توالی فراخوانی غیراستاندارد است، بنابراین هر تابعی با یک آرگومان یا مقدار بازگشتی ممیز شناور که توسط کدی کامپایل‌شده با \fB\-mno\-fp\-regs\fR فراخوانی شود، باید با همان گزینه کامپایل شده باشد. .Sp یک کاربرد متداول این گزینه، ساخت کرنلی است که از هیچ ثبات ممیز شناوری استفاده نمی‌کند و بنابراین نیازی به ذخیره و بازیابی آن‌ها ندارد. .IP \fB\-mieee\fR 4 .IX Item "-mieee" معماری Alpha سخت‌افزار ممیز شناور بهینه‌شده برای حداکثر کارایی را پیاده‌سازی می‌کند. این معماری تا حد زیادی با استاندارد ممیز شناور IEEE سازگار است. با این حال، برای انطباق کامل، به کمک نرم‌افزاری نیاز است. این گزینه کدی کاملاً منطبق بر IEEE تولید می‌کند \&\fIبه‌جز\fR اینکه \fIinexact\-flag\fR نگهداری نمی‌شود (زیر را ببینید). اگر این گزینه روشن باشد، ماکروی پیش‌پردازندهٔ \f(CW\*(C`_IEEE_FP\*(C'\fR در حین کامپایل تعریف می‌شود. کد حاصل کارایی کمتری دارد اما قادر است به درستی از اعداد غیرعادی (denormalized) و مقادیر استثنایی IEEE مانند عددناپذیر (not\-a\-number) و مثبت/منفی بی‌نهایت پشتیبانی کند. سایر کامپایلرهای Alpha این گزینه را \fB\-ieee_with_no_inexact\fR می‌نامند. .IP \fB\-mieee\-with\-inexact\fR 4 .IX Item "-mieee-with-inexact" این گزینه مانند \fB\-mieee\fR است، به‌جز اینکه کد تولید شده \fIinexact\-flag\fR مربوط به IEEE را نیز نگهداری می‌کند. فعال کردن این گزینه باعث می‌شود کد تولید شده محاسبات کاملاً منطبق بر IEEE را پیاده‌سازی کند. علاوه بر \&\f(CW\*(C`_IEEE_FP\*(C'\fR، ماکروی پیش‌پردازندهٔ \f(CW\*(C`_IEEE_FP_EXACT\*(C'\fR نیز تعریف می‌شود. در برخی از پیاده‌سازی‌های Alpha، کد حاصل ممکن است به طور قابل توجهی کندتر از کدی اجرا شود که به صورت پیش‌فرض تولید می‌شود. از آنجا که کدهای بسیار کمی به \fIinexact\-flag\fR وابسته هستند، معمولاً نباید این گزینه را مشخص کنید. سایر کامپایلرهای Alpha این گزینه را \fB\-ieee_with_inexact\fR می‌نامند. .IP \fB\-mfp\-trap\-mode=\fR\fItrap\-mode\fR 4 .IX Item "-mfp-trap-mode=trap-mode" این گزینه کنترل می‌کند که چه تله‌های مربوط به ممیز شناور فعال باشند. سایر کامپایلرهای Alpha این گزینه را \fB\-fptm\fR \fItrap\-mode\fR می‌نامند. حالت تله را می‌توان روی یکی از چهار مقدار زیر تنظیم کرد: .RS 4 .IP \fBn\fR 4 .IX Item "n" این تنظیم پیش‌فرض (عادی) است. تنها تله‌هایی فعال می‌شوند که در نرم‌افزار نمی‌توان آن‌ها را غیرفعال کرد (مانند تلهٔ تقسیم بر صفر). .IP \fBu\fR 4 .IX Item "u" علاوه بر تله‌های فعال‌شده توسط \fBn\fR، تله‌های سرریز منفی (underflow) نیز فعال می‌شوند. .IP \fBsu\fR 4 .IX Item "su" مانند \fBu\fR، اما دستورالعمل‌ها به عنوان ایمن برای تکمیل نرم‌افزاری نشانه‌گذاری می‌شوند (برای جزئیات به راهنمای معماری Alpha مراجعه کنید). .IP \fBsui\fR 4 .IX Item "sui" مانند \fBsu\fR، اما تله‌های غیردقیق (inexact) نیز فعال می‌شوند. .RE .RS 4 .RE .IP \fB\-mfp\-rounding\-mode=\fR\fIrounding\-mode\fR 4 .IX Item "-mfp-rounding-mode=rounding-mode" حالت گرد کردن IEEE را انتخاب می‌کند. سایر کامپایلرهای Alpha این گزینه را \&\fB\-fprm\fR \fIrounding\-mode\fR می‌نامند. مقدار \fIrounding\-mode\fR می‌تواند یکی از موارد زیر باشد: .RS 4 .IP \fBn\fR 4 .IX Item "n" حالت گرد کردن عادی IEEE. اعداد ممیز شناور به سمت نزدیک‌ترین عدد ماشین یا در صورت تساوی، به سمت عدد زوج ماشین گرد می‌شوند. .IP \fBm\fR 4 .IX Item "m" گرد کردن به سمت منفی بی‌نهایت. .IP \fBc\fR 4 .IX Item "c" حالت گرد کردن بریده‌شده (Chopped). اعداد ممیز شناور به سمت صفر گرد می‌شوند. .IP \fBd\fR 4 .IX Item "d" حالت گرد کردن پویا. فیلدی در ثبات کنترل ممیز شناور (\fIfpcr\fR، به راهنمای مرجع معماری Alpha مراجعه کنید) حالت گرد کردن فعال را کنترل می‌کند. کتابخانهٔ C این ثبات را برای گرد کردن به سمت مثبت بی‌نهایت مقداردهی اولیه می‌کند. بنابراین، مگر اینکه برنامهٔ شما \&\fIfpcr\fR را تغییر دهد، \fBd\fR متناظر با گرد کردن به سمت مثبت بی‌نهایت است. .RE .RS 4 .RE .IP \fB\-mtrap\-precision=\fR\fItrap\-precision\fR 4 .IX Item "-mtrap-precision=trap-precision" در معماری Alpha، تله‌های ممیز شناور نادقیق (imprecise) هستند. این بدان معناست که بدون کمک نرم‌افزاری، بازیابی پس از یک تلهٔ ممیز شناور غیرممکن است و اجرای برنامه معمولاً باید پایان یابد. GCC می‌تواند کدی تولید کند که بتواند به گرداننده‌های تله در سیستم‌عامل در تعیین محل دقیقی که باعث ایجاد تلهٔ ممیز شناور شده است کمک کند. بسته به نیازمندی‌های یک برنامه، سطوح مختلفی از دقت را می‌توان انتخاب کرد: .RS 4 .IP \fBp\fR 4 .IX Item "p" دقت در سطح برنامه. این گزینه پیش‌فرض است و بدین معنی است که گردانندهٔ تله فقط می‌تواند تشخیص دهد کدام برنامه باعث بروز استثنای ممیز شناور شده است. .IP \fBf\fR 4 .IX Item "f" دقت در سطح تابع. گردانندهٔ تله می‌تواند تابعی را که باعث بروز استثنای ممیز شناور شده است مشخص کند. .IP \fBi\fR 4 .IX Item "i" دقت در سطح دستورالعمل. گردانندهٔ تله می‌تواند دستورالعمل دقیقی را که باعث بروز استثنای ممیز شناور شده است تعیین کند. .RE .RS 4 .Sp سایر کامپایلرهای Alpha گزینه‌های معادلی به نام‌های \&\fB\-scope_safe\fR و \fB\-resumption_safe\fR ارائه می‌دهند. .RE .IP \fB\-mieee\-conformant\fR 4 .IX Item "-mieee-conformant" این گزینه کد تولید شده را به عنوان منطبق بر IEEE علامت‌گذاری می‌کند. نباید از این گزینه استفاده کنید مگر اینکه \fB\-mtrap\-precision=i\fR و یکی از گزینه‌های \&\fB\-mfp\-trap\-mode=su\fR یا \fB\-mfp\-trap\-mode=sui\fR را نیز تعیین کرده باشید. تنها اثر آن، درج خط \fB.eflag 48\fR در پیش‌درآمد تابع (prologue) در فایل اسمبلی تولید شده است. .IP \fB\-mbuild\-constants\fR 4 .IX Item "-mbuild-constants" به طور معمول GCC یک مقدار ثابت صحیح ۳۲ یا ۶۴ بیتی را بررسی می‌کند تا ببیند آیا می‌تواند آن را در دو یا سه دستورالعمل از مقادیر ثابت کوچک‌تر بسازد یا خیر. اگر نتواند، ثابت را به عنوان یک لیترال درج می‌کند و کدی تولید می‌کند تا آن را در زمان اجرا از بخش داده (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 باید برای دسترسی‌های حافظه بایتی و کلمه هم‌تراز (aligned word)، کد ایمن در برابر چندریسمانی (multi-thread) و سیگنال‌های ناهمگام (async-signal) تولید کند یا خیر. .IP \fB\-msafe\-partial\fR 4 .IX Item "-msafe-partial" .PD 0 .IP \fB\-mno\-safe\-partial\fR 4 .IX Item "-mno-safe-partial" .PD مشخص می‌کند که آیا GCC باید برای دسترسی‌های جزئی به حافظه، کد ایمن در برابر چندریسمانی و سیگنال‌های ناهمگام تولید کند یا خیر؛ این دسترسی‌ها شامل دسترسی‌های تکه‌تکه به داده‌های ناهم‌تراز و همچنین دسترسی‌های بلوکی به بخش‌های ابتدایی و انتهایی انواع تجمعی یا سایر اشیای موجود در حافظه است که به ترتیب در مرز داده‌ای ۶۴\-بیتی هم‌تراز شروع و پایان نمی‌یابند. .IP \fB\-mfloat\-vax\fR 4 .IX Item "-mfloat-vax" .PD 0 .IP \fB\-mfloat\-ieee\fR 4 .IX Item "-mfloat-ieee" .PD تولید کدی که به جای ممیز شناور با دقت تکی و دوگانه IEEE، از محاسبات ممیز شناور VAX F و G استفاده کند (یا استفاده نکند). .IP \fB\-mexplicit\-relocs\fR 4 .IX Item "-mexplicit-relocs" .PD 0 .IP \fB\-mno\-explicit\-relocs\fR 4 .IX Item "-mno-explicit-relocs" .PD اسمبلرهای قدیمی‌تر Alpha روشی برای تولید بازنشانی‌های نماد (symbol relocations) به جز از طریق ماکروهای اسمبلر ارائه نمی‌کردند. استفاده از این ماکروها مانع زمان‌بندی بهینه دستورالعمل‌ها می‌شود. بسته GNU binutils از نسخه 2.12 به بعد از ساختار نحوی جدیدی پشتیبانی می‌کند که به کامپایلر اجازه می‌دهد به طور صریح مشخص کند کدام بازنشانی‌ها باید بر کدام دستورالعمل‌ها اعمال شوند. این گزینه بیشتر برای اشکال‌زدایی مفید است، زیرا GCC هنگام ساخت، قابلیت‌های اسمبلر را تشخیص داده و مقدار پیش‌فرض را بر همان اساس تنظیم می‌کند. .IP \fB\-msmall\-data\fR 4 .IX Item "-msmall-data" .PD 0 .IP \fB\-mlarge\-data\fR 4 .IX Item "-mlarge-data" .PD هنگامی که \fB\-mexplicit\-relocs\fR فعال باشد، به داده‌های ایستا از طریق بازنشانی‌های \fIgp\-relative\fR دسترسی پیدا می‌شود. وقتی \fB\-msmall\-data\fR استفاده می‌شود، اشیایی به طول ۸ بایت یا کوچک‌تر در یک \fIناحیه داده‌های کوچک\fR (بخش‌های \f(CW\*(C`.sdata\*(C'\fR و \f(CW\*(C`.sbss\*(C'\fR) قرار می‌گیرند و از طریق بازنشانی‌های ۱۶\-بیتی نسبت به ثبات \f(CW$gp\fR مورد دسترسی قرار می‌گیرند. این امر اندازه ناحیه داده کوچک را به 64KB محدود می‌کند، اما به متغیرها اجازه می‌دهد مستقیماً از طریق یک دستورالعمل واحد قابل دسترسی باشند. .Sp پیش‌فرض \fB\-mlarge\-data\fR است. با این گزینه ناحیه داده به مقداری دقیقاً کمتر از 2GB محدود می‌شود. برنامه‌هایی که به بیش از 2GB داده نیاز دارند باید برای تخصیص داده‌ها در heap به جای بخش داده برنامه، از \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 استفاده می‌شود، کامپایلر فرض می‌کند که کد کل برنامه (یا کتابخانه اشتراکی) در 4MB جای می‌گیرد و در نتیجه با یک دستورالعمل انشعاب (branch) قابل دسترسی است. هنگامی که \fB\-msmall\-data\fR استفاده می‌شود، کامپایلر می‌تواند فرض کند که همه نمادهای محلی مقدار \f(CW$gp\fR یکسانی دارند و بدین ترتیب تعداد دستورالعمل‌های لازم برای یک فراخوانی تابع را از ۴ به ۱ کاهش دهد. .Sp پیش‌فرض \fB\-mlarge\-text\fR است. .IP \fB\-mcpu=\fR\fIcpu_type\fR 4 .IX Item "-mcpu=cpu_type" مجموعه دستورالعمل و پارامترهای زمان‌بندی دستورالعمل را برای نوع ماشین \fIcpu_type\fR تنظیم می‌کند. می‌توانید نام به سبک \fBEV\fR یا شماره تراشه متناظر را مشخص کنید. GCC از پارامترهای زمان‌بندی برای خانواده پردازنده‌های EV4، EV5 و EV6 پشتیبانی می‌کند و مقادیر پیش‌فرض مجموعه دستورالعمل را بر اساس پردازنده‌ای که مشخص کرده‌اید انتخاب می‌نماید. اگر نوع پردازنده را مشخص نکنید، پیش‌فرض GCC پردازنده‌ای خواهد بود که کامپایلر روی آن ساخته شده است. .Sp مقادیر پشتیبانی‌شده برای \fIcpu_type\fR عبارتند از: .RS 4 .IP \fBev4\fR 4 .IX Item "ev4" .PD 0 .IP \fBev45\fR 4 .IX Item "ev45" .IP \fB21064\fR 4 .IX Item "21064" .PD زمان‌بندی را مطابق EV4 انجام می‌دهد و هیچ افزونه مجموعه دستورالعملی ندارد. .IP \fBev5\fR 4 .IX Item "ev5" .PD 0 .IP \fB21164\fR 4 .IX Item "21164" .PD زمان‌بندی را مطابق EV5 انجام می‌دهد و هیچ افزونه مجموعه دستورالعملی ندارد. .IP \fBev56\fR 4 .IX Item "ev56" .PD 0 .IP \fB21164a\fR 4 .IX Item "21164a" .PD زمان‌بندی را مطابق EV5 انجام می‌دهد و از افزونه BWX پشتیبانی می‌کند. .IP \fBpca56\fR 4 .IX Item "pca56" .PD 0 .IP \fB21164pc\fR 4 .IX Item "21164pc" .IP \fB21164PC\fR 4 .IX Item "21164PC" .PD زمان‌بندی را مطابق EV5 انجام می‌دهد و از افزونه‌های BWX و MAX پشتیبانی می‌کند. .IP \fBev6\fR 4 .IX Item "ev6" .PD 0 .IP \fB21264\fR 4 .IX Item "21264" .PD زمان‌بندی را مطابق EV6 انجام می‌دهد و از افزونه‌های BWX، FIX و MAX پشتیبانی می‌کند. .IP \fBev67\fR 4 .IX Item "ev67" .PD 0 .IP \fB21264a\fR 4 .IX Item "21264a" .PD زمان‌بندی را مطابق EV6 انجام می‌دهد و از افزونه‌های BWX، CIX، FIX و MAX پشتیبانی می‌کند. .RE .RS 4 .Sp زنجیره ابزارهای بومی (Native toolchains) همچنین از مقدار \fBnative\fR پشتیبانی می‌کنند که بهترین گزینه معماری را برای پردازنده میزبان انتخاب می‌کند. اگر GCC پردازنده را شناسایی نکند، \&\fB\-mcpu=native\fR هیچ تاثیری ندارد. .RE .IP \fB\-mtune=\fR\fIcpu_type\fR 4 .IX Item "-mtune=cpu_type" فقط پارامترهای زمان‌بندی دستورالعمل را برای نوع ماشین \&\fIcpu_type\fR تنظیم می‌کند. مجموعه دستورالعمل تغییری نمی‌کند. .Sp زنجیره ابزارهای بومی همچنین از مقدار \fBnative\fR پشتیبانی می‌کنند که بهترین گزینه معماری را برای پردازنده میزبان انتخاب می‌کند. اگر GCC پردازنده را شناسایی نکند، \&\fB\-mtune=native\fR هیچ تاثیری ندارد. .IP \fB\-mmemory\-latency=\fR\fItime\fR 4 .IX Item "-mmemory-latency=time" میزان تاخیری (latency) را تنظیم می‌کند که زمان‌بند باید برای ارجاعات معمول به حافظه، از دید برنامه در نظر بگیرد. این عدد به شدت به الگوهای دسترسی به حافظه مورد استفاده برنامه و اندازه کَش خارجی روی ماشین وابسته است. .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" .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 تولید دستورالعمل‌های اضافی انشعاب شرطی را فعال یا غیرفعال می‌کند. برای پردازنده‌های 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 فعال‌سازی یا غیرفعال‌سازی دستورالعمل‌های تقسیم علامت‌دار و باقیمانده. برای CPU نسخهٔ v4 و بالاتر فعال است. .IP \fB\-msmov\fR 4 .IX Item "-msmov" .PD 0 .IP \fB\-mno\-smov\fR 4 .IX Item "-mno-smov" .PD فعال‌سازی یا غیرفعال‌سازی دستورالعمل‌های انتقال با بسط علامت و بارگذاری از حافظه. برای CPU نسخهٔ v4 و بالاتر فعال است. .IP \fB\-mcpu=\fR\fIversion\fR 4 .IX Item "-mcpu=version" این گزینه مشخص می‌کند کدام نسخه از eBPF ISA هدف قرار گیرد. ممکن است نسخه‌های جدیدتر در همهٔ هسته‌ها پشتیبانی نشوند. مقدار پیش‌فرض \fBv4\fR است. .Sp مقدارهای پشتیبانی‌شده برای \fIversion\fR عبارتند از: .RS 4 .IP \fBv1\fR 4 .IX Item "v1" نخستین eBPF ISA پایدار بدون هیچ ویژگی یا افزونهٔ خاص. .IP \fBv2\fR 4 .IX Item "v2" پشتیبانی از افزونه‌های پرش، همانند \fB\-mjmpext\fR. .IP \fBv3\fR 4 .IX Item "v3" تمامی ویژگی‌های v2، به‌همراه: .RS 4 .IP "\-<عملیات پرش ۳۲ بیتی، همانند \fB\-mjmp32\fR>" 4 .IX Item "-<32-bit jump operations, as in -mjmp32>" .PD 0 .IP "\-<عملیات ۳۲ بیتی ALU، همانند \fB\-malu32\fR>" 4 .IX Item "-<32-bit ALU operations, as in -malu32>" .IP "\-<عملیات اتمیک عمومی، همانند \fB\-mv3\-atomics\fR>" 4 .IX Item "-" .PD .RE .RS 4 .RE .IP \fBv4\fR 4 .IX Item "v4" تمامی ویژگی‌های v3، به‌همراه: .RS 4 .IP "\-<دستورالعمل‌های تعویض بایت، همانند \fB\-mbswap\fR>" 4 .IX Item "-" .PD 0 .IP "\-<دستورالعمل‌های تقسیم علامت‌دار و باقیمانده، همانند \fB\-msdiv\fR>" 4 .IX Item "-" .IP "\-<دستورالعمل‌های انتقال با بسط علامت و بارگذاری از حافظه، همانند \fB\-msmov\fR>" 4 .IX Item "-" .PD .RE .RS 4 .RE .RE .RS 4 .RE .IP \fB\-mco\-re\fR 4 .IX Item "-mco-re" پشتیبانی از BPF Compile Once \- Run Everywhere (CO\-RE) را فعال می‌کند. به \fB\-gbtf\fR نیاز دارد و توسط آن نیز به‌طورضمنی فعال می‌شود. .IP \fB\-mno\-co\-re\fR 4 .IX Item "-mno-co-re" پشتیبانی از BPF Compile Once \- Run Everywhere (CO\-RE) را غیرفعال می‌کند. پشتیبانی از BPF CO\-RE هنگام تولید اطلاعات اشکال‌زدایی BTF برای هدف BPF، به‌طور پیش‌فرض فعال است. .IP \fB\-mxbpf\fR 4 .IX Item "-mxbpf" کد را برای نسخه‌ای گسترش‌یافته از BPF تولید می‌کند که برخی از محدودیت‌های تحمیل‌شده توسط معماری BPF را کاهش می‌دهد: .RS 4 .IP "\-<ذخیره و بازیابی ثبات‌های callee\-saved در ورود و>" 4 .IX Item "-" خروج تابع، به‌ترتیب. .RE .RS 4 .RE .IP \fB\-masm=\fR\fIdialect\fR 4 .IX Item "-masm=dialect" دستورالعمل‌های اسمبلی را با استفاده از \fIdialect\fR انتخاب‌شده برای eBPF خروجی می‌دهد. مقدار پیش‌فرض \fBpseudoc\fR است. .Sp مقدارهای پشتیبانی‌شده برای \fIdialect\fR عبارتند از: .RS 4 .IP \fBnormal\fR 4 .IX Item "normal" گویش اسمبلی عادی را خروجی می‌دهد. .IP \fBpseudoc\fR 4 .IX Item "pseudoc" گویش اسمبلی شبه‌سی (pseudo\-c) را خروجی می‌دهد. .RE .RS 4 .RE .IP \fB\-minline\-memops\-threshold=\fR\fIbytes\fR 4 .IX Item "-minline-memops-threshold=bytes" آستانهٔ اندازه‌ای را برحسب بایت مشخص می‌کند که در آن یا کمتر از آن، memmove، memcpy و memset همواره باید به‌صورت درون‌خطی بسط داده شوند. عملیاتی که با اندازه‌های بزرگ‌تر از این آستانه سروکار دارند باید به‌جای بسط درون‌خطی با استفاده از یک فراخوانی کتابخانه‌ای پیاده‌سازی شوند، اما از آنجا که BPF اجازهٔ فراخوانی‌های کتابخانه‌ای (libcalls) را نمی‌دهد، فراتر رفتن از این آستانه منجر به یک خطای زمان کامپایل خواهد شد. مقدار پیش‌فرض \fB1024\fR بایت است. .PP \fIگزینه‌های FR30\fR .IX Subsection "FR30 Options" .PP این گزینه‌ها به‌طور خاص برای پورت FR30 تعریف شده‌اند. .IP \fB\-msmall\-model\fR 4 .IX Item "-msmall-model" استفاده از مدل فضای آدرس کوچک (small). این گزینه می‌تواند کد کوچک‌تری تولید کند، اما فرض را بر این می‌گذارد که تمام مقادیر نمادین و آدرس‌ها در یک محدودهٔ ۲۰ بیتی جای می‌گیرند. .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" مشخص می‌کند که برنامه روی شبیه‌ساز اجرا خواهد شد. این گزینه باعث پیوند داده شدن یک کتابخانه و راه‌انداز زمان اجرای جایگزین می‌شود. هنگام تولید برنامه‌هایی که روی سخت‌افزار واقعی اجرا خواهند شد، نباید از این گزینه استفاده کنید؛ باید کتابخانهٔ زمان اجرای خود را برای هر تابع ورودی/خروجی که مورد نیاز است فراهم کنید. .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" انتخاب FDPIC ABI، که از توصیف‌کننده‌های تابع (function descriptors) برای نمایش اشاره‌گرها به توابع استفاده می‌کند. بدون هیچ‌یک از گزینه‌های مرتبط با PIC/PIE، این گزینه متضمن \fB\-fPIE\fR است. با \fB\-fpic\fR یا \fB\-fpie\fR، فرض می‌کند ورودی‌های GOT و داده‌های کوچک درون محدوده ۱۲ بیتی از آدرس پایه GOT قرار دارند؛ با \fB\-fPIC\fR یا \fB\-fPIE\fR، آفست‌های GOT به‌صورت ۳۲ بیتی محاسبه می‌شوند. با هدف \fBbfin\-elf\fR، این گزینه متضمن \fB\-msim\fR است. .IP \fB\-minline\-plt\fR 4 .IX Item "-minline-plt" فعال‌سازی درون‌خطی‌سازی (inlining) مدخل‌های PLT در فراخوانی توابعی که مشخص نیست اتصال محلی (bind locally) دارند یا خیر. این گزینه بدون \fB\-mfdpic\fR هیچ تأثیری ندارد. در صورت بهینه‌سازی برای سرعت و کامپایل برای کتابخانه‌های اشتراکی (یعنی \fB\-fPIC\fR یا \fB\-fpic\fR)، یا هنگامی که گزینه بهینه‌سازی مانند \fB\-O3\fR یا بالاتر در خط فرمان مشخص شده باشد، به‌طور پیش‌فرض فعال است. .IP \fB\-mTLS\fR 4 .IX Item "-mTLS" فرض کردن یک قطعه بزرگ TLS هنگام تولید کد محلی رشته (thread\-local). .IP \fB\-mtls\fR 4 .IX Item "-mtls" فرض نکردن یک قطعه بزرگ TLS هنگام تولید کد محلی رشته. .IP \fB\-mgprel\-ro\fR 4 .IX Item "-mgprel-ro" فعال‌سازی استفاده از بازنشانی‌های \f(CW\*(C`GPREL\*(C'\fR در FDPIC ABI برای داده‌هایی که مشخص است در بخش‌های فقط‌خواندنی قرار دارند. این گزینه به‌طور پیش‌فرض فعال است، به‌جز برای \fB\-fpic\fR یا \fB\-fpie\fR: هرچند ممکن است به کوچک‌تر شدن جدول آفست سراسری کمک کند، اما ۱ دستورالعمل را با ۴ دستورالعمل معاوضه می‌کند. با \fB\-fPIC\fR یا \fB\-fPIE\fR، ۳ دستورالعمل با ۴ دستورالعمل معاوضه می‌شود که یکی از آن‌ها می‌تواند میان چندین نماد به اشتراک گذاشته شود، و همچنین از نیاز به یک مدخل GOT برای نماد ارجاع‌شده جلوگیری می‌کند؛ بنابراین احتمال سودمند بودن آن بیشتر است. در غیر این صورت، می‌توان از \fB\-mno\-gprel\-ro\fR برای غیرفعال کردن آن استفاده کرد. .IP \fB\-multilib\-library\-pic\fR 4 .IX Item "-multilib-library-pic" پیوند دادن با کتابخانه‌های pic (کتابخانه، و نه FD). این گزینه توسط \&\fB\-mlibrary\-pic\fR، و همچنین توسط \fB\-fPIC\fR و \&\fB\-fpic\fR بدون \fB\-mfdpic\fR به‌طور ضمنی فعال می‌شود. هرگز نباید نیازی به استفاده صریح از آن داشته باشید. .IP \fB\-mlinked\-fp\fR 4 .IX Item "-mlinked-fp" پیروی از الزام EABI مبنی بر ایجاد همیشگی یک اشاره‌گر فریم هر زمان که یک فریم پشته تخصیص می‌یابد. این گزینه به‌طور پیش‌فرض فعال است و می‌تواند با \fB\-mno\-linked\-fp\fR غیرفعال شود. .IP \fB\-mlong\-calls\fR 4 .IX Item "-mlong-calls" استفاده از آدرس‌دهی غیرمستقیم برای فراخوانی توابع خارج از واحد کامپایل فعلی. این کار اجازه می‌دهد توابع در هر کجای فضای آدرس ۳۲ بیتی قرار گیرند. .IP \fB\-malign\-labels\fR 4 .IX Item "-malign-labels" تلاش برای تراز کردن برچسب‌ها روی یک مرز ۸ بایتی با درج NOPها در بسته قبلی. این گزینه تنها زمانی تأثیر دارد که بسته‌بندی VLIW فعال باشد. این گزینه بسته جدیدی ایجاد نمی‌کند؛ صرفاً NOPها را به بسته‌های موجود اضافه می‌کند. .IP \fB\-mlibrary\-pic\fR 4 .IX Item "-mlibrary-pic" تولید کد مستقل از موقعیت (position\-independent) برای EABI. .IP \fB\-macc\-4\fR 4 .IX Item "-macc-4" استفاده تنها از چهار ثبات اول انباره چندرسانه‌ای (media accumulator). .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" غیرفعال‌سازی استفاده از دستورالعمل‌های مقداردهی شرطی. .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mcond\-exec\fR 4 .IX Item "-mcond-exec" فعال‌سازی استفاده از اجرای شرطی (پیش‌فرض). .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mno\-cond\-exec\fR 4 .IX Item "-mno-cond-exec" غیرفعال‌سازی استفاده از اجرای شرطی. .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mvliw\-branch\fR 4 .IX Item "-mvliw-branch" اجرای یک مرحله برای بسته‌بندی پرش‌ها درون دستورالعمل‌های VLIW (پیش‌فرض). .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mno\-vliw\-branch\fR 4 .IX Item "-mno-vliw-branch" عدم اجرای مرحله برای بسته‌بندی پرش‌ها درون دستورالعمل‌های VLIW. .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mmulti\-cond\-exec\fR 4 .IX Item "-mmulti-cond-exec" فعال‌سازی بهینه‌سازی \f(CW\*(C`&&\*(C'\fR و \f(CW\*(C`||\*(C'\fR در اجرای شرطی (پیش‌فرض). .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mno\-multi\-cond\-exec\fR 4 .IX Item "-mno-multi-cond-exec" غیرفعال‌سازی بهینه‌سازی \f(CW\*(C`&&\*(C'\fR و \f(CW\*(C`||\*(C'\fR در اجرای شرطی. .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mnested\-cond\-exec\fR 4 .IX Item "-mnested-cond-exec" فعال‌سازی بهینه‌سازی‌های اجرای شرطی تودرتو (پیش‌فرض). .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-mno\-nested\-cond\-exec\fR 4 .IX Item "-mno-nested-cond-exec" غیرفعال‌سازی بهینه‌سازی‌های اجرای شرطی تودرتو. .Sp این سوئیچ عمدتاً برای اشکال‌زدایی کامپایلر است و احتمالاً در نسخه‌های آینده حذف خواهد شد. .IP \fB\-moptimize\-membar\fR 4 .IX Item "-moptimize-membar" این سوئیچ دستورالعمل‌های زائد \f(CW\*(C`membar\*(C'\fR را از کد تولیدشده توسط کامپایلر حذف می‌کند. این گزینه به‌طور پیش‌فرض فعال است. .IP \fB\-mno\-optimize\-membar\fR 4 .IX Item "-mno-optimize-membar" این سوئیچ حذف خودکار دستورالعمل‌های زائد \f(CW\*(C`membar\*(C'\fR را از کد تولیدشده غیرفعال می‌کند. .IP \fB\-mtomcat\-stats\fR 4 .IX Item "-mtomcat-stats" باعث می‌شود gas آمار مربوط به tomcat را چاپ کند. .IP \fB\-mcpu=\fR\fIcpu\fR 4 .IX Item "-mcpu=cpu" انتخاب نوع پردازنده‌ای که کد برای آن تولید می‌شود. مقادیر ممکن عبارتند از: \&\fBfrv\fR، \fBfr550\fR، \fBtomcat\fR، \fBfr500\fR، \fBfr450\fR، \&\fBfr405\fR، \fBfr400\fR، \fBfr300\fR و \fBsimple\fR. .PP \fIگزینه‌های GNU/Linux\fR .IX Subsection "گزینه‌های GNU/Linux" .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" استفاده از کتابخانهٔ سی uClibc. این گزینه در هدف‌های \&\fB*\-*\-linux\-*uclibc*\fR پیش‌فرض است. .IP \fB\-mmusl\fR 4 .IX Item "-mmusl" استفاده از کتابخانهٔ سی musl. این گزینه در هدف‌های \&\fB*\-*\-linux\-*musl*\fR پیش‌فرض است. .IP \fB\-mbionic\fR 4 .IX Item "-mbionic" استفاده از کتابخانهٔ سی Bionic. این گزینه در هدف‌های \&\fB*\-*\-linux\-*android*\fR پیش‌فرض است. .IP \fB\-mandroid\fR 4 .IX Item "-mandroid" کامپایل کد سازگار با پلتفرم Android. این گزینه در هدف‌های \&\fB*\-*\-linux\-*android*\fR پیش‌فرض است. .Sp هنگام کامپایل، این گزینه به‌طور پیش‌فرض گزینه‌های \fB\-mbionic\fR، \fB\-fPIC\fR، \&\fB\-fno\-exceptions\fR و \fB\-fno\-rtti\fR را فعال می‌کند. هنگام پیوند زدن، این گزینه باعث می‌شود راه‌انداز GCC گزینه‌های مخصوص به Android را به پیونددهنده ارسال کند. در نهایت، این گزینه باعث تعریف شدن ماکروی پیش‌پردازندهٔ \f(CW\*(C`_\|_ANDROID_\|_\*(C'\fR می‌شود. .IP \fB\-tno\-android\-cc\fR 4 .IX Item "-tno-android-cc" غیرفعال کردن اثرات کامپایلیِ \fB\-mandroid\fR، یعنی عدم فعال‌سازی \&\fB\-mbionic\fR، \fB\-fPIC\fR، \fB\-fno\-exceptions\fR و \&\fB\-fno\-rtti\fR به‌صورت پیش‌فرض. .IP \fB\-tno\-android\-ld\fR 4 .IX Item "-tno-android-ld" غیرفعال کردن اثرات پیوند زدنِ \fB\-mandroid\fR، یعنی ارسال گزینه‌های استاندارد پیوند زدن لینوکس به پیونددهنده. .PP \fIگزینه‌های H8/300\fR .IX Subsection "H8/300 Options" .PP این گزینه‌های \fB\-m\fR برای پیاده‌سازی‌های H8/300 تعریف شده‌اند: .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" کوتاه کردن برخی از ارجاعات آدرس در زمان پیوند، در صورت امکان؛ از گزینهٔ پیونددهندهٔ \fB\-relax\fR استفاده می‌کند. .IP \fB\-mh\fR 4 .IX Item "-mh" تولید کد برای H8/300H. .IP \fB\-ms\fR 4 .IX Item "-ms" تولید کد برای H8S. .IP \fB\-mn\fR 4 .IX Item "-mn" تولید کد برای H8S و H8/300H در حالت عادی (normal mode). این سوییچ باید همراه با \fB\-mh\fR یا \fB\-ms\fR استفاده شود. .IP \fB\-ms2600\fR 4 .IX Item "-ms2600" تولید کد برای H8S/2600. این سوییچ باید با \fB\-ms\fR استفاده شود. .IP \fB\-mexr\fR 4 .IX Item "-mexr" ثبات‌های گسترش‌یافته (extended registers) قبل از اجرای تابعی با صفت 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" تولید libcallها برای بارگذاری‌ها و ذخیره‌سازی‌های اتمیک در زمانی که sync libcalls غیرفعال باشند. این گزینه به‌طور پیش‌فرض فعال است. این گزینه فقط بر تولید libcallهای اتمیک توسط بک‌اند HPPA اثر می‌گذارد. .Sp هر دو پیاده‌سازیِ libcall مربوط به sync و \fIlibatomic\fR از قفل‌گذاری استفاده می‌کنند. در نتیجه، ذخیره‌سازی‌های پردازنده نسبت به سایر عملیات اتمیک، اتمیک نیستند. بارگذاری‌های پردازنده تا حالت DImode نسبت به سایر عملیات اتمیک، اتمیک هستند به شرط آن‌که به‌صورت یک دسترسی یکتا پیاده‌سازی شده باشند. .Sp معماری PA\-RISC به جز دستورالعمل \f(CW\*(C`ldcw\*(C'\fR از هیچ عملیات اتمیکی در سخت‌افزار پشتیبانی نمی‌کند. بنابراین، تمام پشتیبانی اتمیک با استفاده از libcallهای sync و اتمیک پیاده‌سازی می‌شود. پشتیبانی از libcallهای sync در \fIlibgcc.a\fR و پشتیبانی از libcallهای اتمیک در \&\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) آرگومان‌های تابعی را که با ارجاع پنهان ارسال شده‌اند، کپی می‌کند. این گزینه باید با احتیاط استفاده شود چرا که با زمان‌اجرای پیش‌فرض ۳۲ بیتی سازگار نیست. با این حال، فقط داده‌های تجمیعی (aggregates) بزرگ‌تر از هشت بایت با ارجاع پنهان ارسال می‌شوند و این گزینه سازگاری بهتری با 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 ارسال می‌شود تغییر می‌دهد. پیونددهنده‌ای که فراخوانی می‌شود توسط گزینهٔ پیکربندی \&\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 را تغییر می‌دهد. پیونددهنده‌ای که فراخوانی می‌شود توسط گزینهٔ پیکربندی \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 sequences) استفاده می‌کند. این تضمین می‌کند که یک فراخوانی همیشه بتواند به stubهای تولیدشده توسط پیونددهنده دسترسی یابد. حالت پیش‌فرض تولید فراخوانی‌های دور تنها زمانی است که فاصلهٔ محل فراخوانی تا آغاز تابع یا واحد ترجمه (بسته به مورد)، از حد از پیش‌تعیین‌شده توسط نوع انشعاب مورداستفاده فراتر رود. محدودیت‌ها برای فراخوانی‌های عادی به ترتیب ۷،۶۰۰،۰۰۰ و ۲۴۰،۰۰۰ بایت برای معماری‌های 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 (به‌صورت 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" فرض می‌کند که مراجعات به حافظه مرتب (ordered) هستند و نیازی به موانع (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 را برای IO ایستگاه کاری تولید می‌کند. این گزینه‌ها در HP\-UX و HI\-UX در دسترس هستند. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" تولید خروجی حاوی فراخوانی‌های کتابخانه‌ای برای ممیز شناور. \&\fBهشدار:\fR کتابخانه‌های مورد نیاز برای تمام مقصدهای HPPA در دسترس نیستند. معمولاً از امکانات کامپایلر C عادی ماشین استفاده می‌شود، اما این کار به صورت مستقیم در کامپایل متقابل امکان‌پذیر نیست. شما باید تمهیدات لازم را برای فراهم کردن توابع کتابخانه‌ای مناسب برای کامپایل متقابل اتخاذ کنید. .Sp گزینه \fB\-msoft\-float\fR قرارداد فراخوانی را در فایل خروجی تغییر می‌دهد؛ بنابراین تنها زمانی مفید است که \fIتمام\fR یک برنامه را با این گزینه کامپایل کنید. به‌ویژه، لازم است برای اینکه این سازوکار به درستی کار کند، \fIlibgcc.a\fR (کتابخانه‌ای که همراه با GCC ارائه می‌شود) را با \fB\-msoft\-float\fR کامپایل کنید. .IP \fB\-msoft\-mult\fR 4 .IX Item "-msoft-mult" استفاده از ضرب صحیح نرم‌افزاری. .Sp این گزینه استفاده از دستورالعمل \f(CW\*(C`xmpyu\*(C'\fR را غیرفعال می‌کند. .IP \fB\-munix=\fR\fIunix\-std\fR 4 .IX Item "-munix=unix-std" تولید پیش‌تعریف‌های کامپایلر و انتخاب یک 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، و startfile با نام \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، و startfile با نام \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 و بالاتر، درایور GCC در صورت مشخص شدن گزینه \fB\-static\fR، گزینه‌های لازم را برای پیوند با libdld.sl اضافه می‌کند. این باعث می‌شود که باینری حاصل پویا باشد. در پورت ۶۴\-بیتی، پیونددهنده‌ها در هر حال به‌طور پیش‌فرض باینری‌های پویا تولید می‌کنند. می‌توان از گزینه \fB\-nolibdld\fR برای جلوگیری از اضافه کردن این گزینه‌های پیوند توسط درایور GCC استفاده کرد. .IP \fB\-threads\fR 4 .IX Item "-threads" افزودن پشتیبانی از چندریسمانی با کتابخانه \fIdce thread\fR تحت HP\-UX. این گزینه پرچم‌هایی را برای هر دو بخش پیش‌پردازنده و پیونددهنده تنظیم می‌کند. .PP \fIگزینه‌های IA\-64\fR .IX Subsection "IA-64 Options" .PP این‌ها گزینه‌های \fB\-m\fR هستند که برای معماری Intel IA\-64 تعریف شده‌اند. .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد برای یک هدف big\-endian (بزرگ‌پایان). این حالت پیش‌فرض برای HP\-UX است. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد برای یک هدف little\-endian (کوچک‌پایان). این حالت پیش‌فرض برای AIX5 و GNU/Linux است. .IP \fB\-mgnu\-as\fR 4 .IX Item "-mgnu-as" .PD 0 .IP \fB\-mno\-gnu\-as\fR 4 .IX Item "-mno-gnu-as" .PD تولید (یا عدم تولید) کد برای اسمبلر GNU. این حالت پیش‌فرض است. .IP \fB\-mgnu\-ld\fR 4 .IX Item "-mgnu-ld" .PD 0 .IP \fB\-mno\-gnu\-ld\fR 4 .IX Item "-mno-gnu-ld" .PD تولید (یا عدم تولید) کد برای پیونددهنده GNU. این حالت پیش‌فرض است. .IP \fB\-mno\-pic\fR 4 .IX Item "-mno-pic" تولید کدی که از ثبات اشاره‌گر سراسری استفاده نمی‌کند. نتیجه، یک کد مستقل از موقعیت نیست و 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) بلافاصله پیش و پس از عبارات asm فرّار (volatile). .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" تولید کدی که از یک مقدار ثابت تکی برای اشاره‌گر سراسری استفاده می‌کند. این گزینه هنگام کامپایل کردن کد هسته (kernel) مفید است. .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" تولید کد برای تقسیم‌های درون‌خطی مقادیر ممیز شناور با استفاده از الگوریتم کمینه تاخیر. .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 تولید نمی‌کند (یا می‌کند). این گزینه ممکن است هنگام عدم استفاده از اسمبلر GNU سودمند باشد. .IP \fB\-mearly\-stop\-bits\fR 4 .IX Item "-mearly-stop-bits" .PD 0 .IP \fB\-mno\-early\-stop\-bits\fR 4 .IX Item "-mno-early-stop-bits" .PD اجازه می‌دهد بیت‌های توقف (stop bits) زودتر از موقعیت بلافاصله پیش از دستورالعملی که بیت توقف را ایجاد کرده است قرار گیرند. این کار می‌تواند زمان‌بندی دستورالعمل‌ها را بهبود بخشد، اما همیشه این‌گونه نیست. .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4 .IX Item "-mfixed-range=register-range" کدی تولید می‌کند که با محدوده ثبات‌های ارائه‌شده مانند ثبات‌های ثابت (fixed registers) رفتار می‌کند. ثبات ثابت ثباتی است که تخصیص‌دهنده ثبات نمی‌تواند از آن استفاده کند. این گزینه هنگام کامپایل کد هسته کاربرد دارد. محدوده ثبات با دو ثبات که با یک خط تیره از هم جدا شده‌اند مشخص می‌شود. می‌توان چندین محدوده ثبات را با ویرگول جدا کرده و تعیین نمود. .IP \fB\-mtls\-size=\fR\fItls\-size\fR 4 .IX Item "-mtls-size=tls-size" اندازه بیتی آفست‌های بی‌درنگ (immediate) مربوط به TLS را مشخص می‌کند. مقادیر معتبر 14، 22 و 64 هستند. .IP \fB\-mtune=\fR\fIcpu\-type\fR 4 .IX Item "-mtune=cpu-type" زمان‌بندی دستورالعمل‌ها را برای یک پردازنده خاص تنظیم می‌کند. مقادیر معتبر عبارتند از: \&\fBitanium\fR، \fBitanium1\fR، \fBmerced\fR، \fBitanium2\fR و \fBmckinley\fR. .IP \fB\-milp32\fR 4 .IX Item "-milp32" .PD 0 .IP \fB\-mlp64\fR 4 .IX Item "-mlp64" .PD تولید کد برای یک محیط 32 بیتی یا 64 بیتی. محیط 32 بیتی مقادیر int، long و اشاره‌گرها را روی 32 بیت تنظیم می‌کند. محیط 64 بیتی مقدار int را روی 32 بیت و long و اشاره‌گرها را روی 64 بیت تنظیم می‌کند. این پرچم‌ها مخصوص 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" تولید بررسی‌ها برای حدس کنترلی در زمان‌بندی انتخابی. این پرچم به‌طور پیش‌فرض غیرفعال است. .IP \fB\-msched\-max\-memory\-insns=\fR\fImax\-insns\fR 4 .IX Item "-msched-max-memory-insns=max-insns" ایجاد محدودیت بر تعداد دستورهای حافظه در هر گروه دستورالعمل، با تخصیص اولویت کمتر به دستورهای حافظه بعدی که سعی در زمان‌بندی در همان گروه دستورالعمل را دارند. اغلب برای جلوگیری از تداخل‌های بانک کش سودمند است. مقدار پیش‌فرض 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) تبدیل می‌کند و اجازه وجود بیش از آن تعداد را در یک گروه دستورالعمل نمی‌دهد. در غیر این صورت، محدودیت «نرم» خواهد بود؛ بدین معنا که با رسیدن به حد نصاب، عملیات‌های غیرحافظه‌ای ترجیح داده می‌شوند اما عملیات‌های حافظه نیز همچنان ممکن است زمان‌بندی شوند. .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" نسخه ۱.۰ معماری مجموعه دستورالعمل (ISA) LoongArch64. .IP \fBla64v1.1\fR 4 .IX Item "la64v1.1" نسخه ۱.۱ معماری مجموعه دستورالعمل (ISA) LoongArch64. .RE .RS 4 .Sp اطلاعات بیشتر درباره نسخه‌های ISA معماری LoongArch را می‌توانید در <\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" نوع پردازنده محلی شناسایی‌شده توسط کامپایلر محلی (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 functions). این مقدار می‌تواند یکی از موارد زیر باشد: .RS 4 .IP \fBlasx\fR 4 .IX Item "lasx" فعال‌سازی تولید دستورالعمل‌ها از افزونه ۲۵۶ بیتی LoongArch Advanced SIMD Extension (LASX) و افزونه ۱۲۸ بیتی LoongArch SIMD Extension (LSX). .IP \fBlsx\fR 4 .IX Item "lsx" فعال‌سازی تولید دستورالعمل‌ها از افزونه ۱۲۸ بیتی LoongArch SIMD Extension (LSX). .IP \fBnone\fR 4 .IX Item "none" هیچ دستورالعمل LoongArch SIMD نباید تولید شود. .RE .RS 4 .RE .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" اعمال اجباری \fB\-mfpu=none\fR و جلوگیری از استفاده از ثبات‌های ممیز شناور برای انتقال پارامترها. این گزینه ممکن است ABI هدف را تغییر دهد. .IP \fB\-msingle\-float\fR 4 .IX Item "-msingle-float" اعمال اجباری \fB\-mfpu=32\fR و مجاز دانستن استفاده از ثبات‌های ممیز شناور ۳۲ بیتی برای انتقال پارامترها. این گزینه ممکن است ABI هدف را تغییر دهد. .IP \fB\-mdouble\-float\fR 4 .IX Item "-mdouble-float" اعمال اجباری \fB\-mfpu=64\fR و مجاز دانستن استفاده از ثبات‌های ممیز شناور ۳۲/۶۴ بیتی برای انتقال پارامترها. این گزینه ممکن است ABI هدف را تغییر دهد. .IP \fB\-mlasx\fR 4 .IX Item "-mlasx" .PD 0 .IP \fB\-mno\-lasx\fR 4 .IX Item "-mno-lasx" .IP \fB\-mlsx\fR 4 .IX Item "-mlsx" .IP \fB\-mno\-lsx\fR 4 .IX Item "-mno-lsx" .PD تنظیم تدریجی دامنه افزونه‌های SIMD (شامل none / LSX / LASX) که کامپایلر می‌تواند برای تولید کد از آن‌ها استفاده کند. فعال‌سازی LASX با \&\fBmlasx\fR به طور خودکار LSX را فعال می‌کند، و غیرفعال کردن LSX با \fBmno\-lsx\fR به طور خودکار LASX را غیرفعال می‌سازد. این گزینه‌های ویژه درایور بر وضعیت پیکربندی نهایی \&\fBmsimd\fR تأثیر گذاشته و تغییرات تدریجی را به ترتیبی که در خط فرمان درایور GCC ظاهر می‌شوند اعمال می‌کنند، و در نهایت گزینه استانداردشده/نهایی \&\fBmsimd\fR را که به خود کامپایلر ارسال می‌شود به دست می‌آورند. .IP \fB\-mbranch\-cost=\fR\fIn\fR 4 .IX Item "-mbranch-cost=n" تنظیم هزینه انشعاب‌ها به حدود \fIn\fR دستورالعمل. .IP \fB\-maddr\-reg\-reg\-cost=\fR\fIn\fR 4 .IX Item "-maddr-reg-reg-cost=n" تنظیم هزینه ADDRESS_REG_REG به مقدار محاسبه‌شده توسط \fIn\fR. .IP \fB\-mcheck\-zero\-division\fR 4 .IX Item "-mcheck-zero-division" .PD 0 .IP \fB\-mno\-check\-zero\-divison\fR 4 .IX Item "-mno-check-zero-divison" .PD ایجاد تله (عدم ایجاد تله) هنگام تقسیم صحیح بر صفر. مقدار پیش‌فرض برای \fB\-O0\fR یا \fB\-Og\fR به صورت \&\fB\-mcheck\-zero\-division\fR، و برای سایر سطوح بهینه‌سازی \&\fB\-mno\-check\-zero\-division\fR است. .IP \fB\-mcond\-move\-int\fR 4 .IX Item "-mcond-move-int" .PD 0 .IP \fB\-mno\-cond\-move\-int\fR 4 .IX Item "-mno-cond-move-int" .PD انتقال‌های شرطی برای داده‌های صحیح در ثبات‌های همه‌منظوره فعال (غیرفعال) می‌شوند. مقدار پیش‌فرض \fB\-mcond\-move\-int\fR است. .IP \fB\-mcond\-move\-float\fR 4 .IX Item "-mcond-move-float" .PD 0 .IP \fB\-mno\-cond\-move\-float\fR 4 .IX Item "-mno-cond-move-float" .PD انتقال‌های شرطی برای ثبات‌های ممیز شناور فعال (غیرفعال) می‌شوند. مقدار پیش‌فرض \fB\-mcond\-move\-float\fR است. .IP \fB\-mmemcpy\fR 4 .IX Item "-mmemcpy" .PD 0 .IP \fB\-mno\-memcpy\fR 4 .IX Item "-mno-memcpy" .PD اجبار (عدم اجبار) به استفاده از \f(CW\*(C`memcpy\*(C'\fR برای انتقال‌های بلوکی غیرساده. پیش‌فرض \fB\-mno\-memcpy\fR است که به GCC امکان می‌دهد بیشتر کپی‌های با اندازه ثابت را درون‌خطی (inline) کند. تنظیم سطح بهینه‌سازی روی \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) باید در فضای آدرس‌دهی ۱۲۸ مگابایتی باشد. بخش داده (data segment) باید در فضای آدرس‌دهی ۲ گیگابایتی باشد. .IP \fBmedium\fR 4 .IX Item "medium" بخش کد و بخش داده هر دو باید در فضای آدرس‌دهی ۲ گیگابایتی باشند. .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) اسمبلی هنگام مواجهه با آدرس‌های نمادین. روش جایگزین، استفاده از ماکروهای اسمبلی به جای آن است که ممکن است زمان‌بندی دستورالعمل‌ها را محدود کند اما امکان آسان‌سازی پیونددهنده (linker relaxation) را فراهم می‌آورد. با \fB\-mexplicit\-relocs=none\fR ماکروهای اسمبلی همیشه استفاده می‌شوند، با \fB\-mexplicit\-relocs=always\fR عملگرهای بازنشانی اسمبلی همیشه به کار می‌روند، با \fB\-mexplicit\-relocs=auto\fR کامپایلر برای بهبود کیفیت کد، در جاهایی که آسان‌سازی پیونددهنده غیرممکن باشد از عملگرهای بازنشانی استفاده می‌کند و در سایر نقاط از ماکروها بهره می‌برد. مقدار پیش‌فرض این گزینه بر اساس قابلیت‌های اسمبلر که در زمان ساخت GCC شناسایی شده و تنظیمات \fB\-mrelax\fR تعیین می‌شود: \&\fB\-mexplicit\-relocs=none\fR اگر اسمبلر اصلاً از عملگرهای بازنشانی پشتیبانی نکند، \&\fB\-mexplicit\-relocs=always\fR اگر اسمبلر از عملگرهای بازنشانی پشتیبانی کند اما \fB\-mrelax\fR فعال نباشد، \&\fB\-mexplicit\-relocs=auto\fR اگر اسمبلر از عملگرهای بازنشانی پشتیبانی کند و \fB\-mrelax\fR فعال باشد. .IP \fB\-mexplicit\-relocs\fR 4 .IX Item "-mexplicit-relocs" نام مستعاری برای \fB\-mexplicit\-relocs=always\fR جهت سازگاری با نسخه‌های پیشین. .IP \fB\-mno\-explicit\-relocs\fR 4 .IX Item "-mno-explicit-relocs" نام مستعاری برای \fB\-mexplicit\-relocs=none\fR جهت سازگاری با نسخه‌های پیشین. .IP \fB\-mdirect\-extern\-access\fR 4 .IX Item "-mdirect-extern-access" .PD 0 .IP \fB\-mno\-direct\-extern\-access\fR 4 .IX Item "-mno-direct-extern-access" .PD عدم استفاده یا استفاده از GOT برای دسترسی به نمادهای خارجی (external symbols). حالت پیش‌فرض \&\fB\-mno\-direct\-extern\-access\fR است: GOT برای نمادهای خارجی با نمایانی (visibility) پیش‌فرض استفاده می‌شود، اما برای سایر نمادهای خارجی استفاده نمی‌شود. .Sp با \fB\-mdirect\-extern\-access\fR، از GOT استفاده نمی‌شود و تمام نمادهای خارجی به‌صورت نسبی نسبت به PC (به‌صورت PC\-relative) آدرس‌دهی می‌شوند. این گزینه \fBتنها\fR برای محیط‌هایی مناسب است که در آن‌ها هیچ پیوند پویایی انجام نمی‌گیرد، مانند میان‌افزارها (firmware)، هسته‌های سیستم‌عامل، و فایل‌های اجرایی پیوند داده‌شده با \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 و هم از آسان‌سازی انشعاب شرطی (conditional branch relaxation) پشتیبانی کند (این قابلیت الزامی است، در غیر این صورت ممکن است دستورالعمل‌های \&\f(CW\*(C`.align\*(C'\fR و دستورات انشعاب شرطی در کد اسمبلی تولیدشده توسط GCC به دلیل سرریز بازنشانی توسط اسمبلر رد شوند)، و در غیر این صورت \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\-mpass\-mrelax\-to\-as\fR اگر اسمبلر از گزینهٔ \&\fB\-mrelax\fR پشتیبانی کند، و در غیر این صورت \fB\-mno\-pass\-mrelax\-to\-as\fR. این گزینه بیشتر برای اشکال‌زدایی یا سازگاری با اسمبلرهایی غیر از اسمبلر زمان ساخت مفید است. .IP \fB\-mrecip\fR 4 .IX Item "-mrecip" این گزینه استفاده از دستورالعمل‌های برآورد معکوس (reciprocal estimate) و برآورد ریشهٔ دوم معکوس را همراه با گام‌های تکمیلی نیوتن\-رافسون برای افزایش دقت، به جای انجام تقسیم یا ریشهٔ دوم و تقسیم برای آرگومان‌های ممیز شناور فعال می‌کند. این دستورالعمل‌ها تنها زمانی تولید می‌شوند که \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" فعال‌سازی تقریب برای تقسیم اسکالر (scalar). .IP \fBvec\-div\fR 4 .IX Item "vec-div" فعال‌سازی تقریب برای تقسیم برداری (vectorized). .IP \fBsqrt\fR 4 .IX Item "sqrt" فعال‌سازی تقریب برای ریشهٔ دوم اسکالر. .IP \fBvec\-sqrt\fR 4 .IX Item "vec-sqrt" فعال‌سازی تقریب برای ریشهٔ دوم برداری. .IP \fBrsqrt\fR 4 .IX Item "rsqrt" فعال‌سازی تقریب برای ریشهٔ دوم معکوس اسکالر. .IP \fBvec\-rsqrt\fR 4 .IX Item "vec-rsqrt" فعال‌سازی تقریب برای ریشهٔ دوم معکوس برداری. .RE .RS 4 .Sp بنابراین برای مثال، گزینهٔ \fB\-mrecip=all,!sqrt\fR تمام تقریب‌های معکوس را به جز ریشهٔ دوم اسکالر فعال می‌کند. .RE .IP \fB\-mfrecipe\fR 4 .IX Item "-mfrecipe" .PD 0 .IP \fB\-mno\-frecipe\fR 4 .IX Item "-mno-frecipe" .PD استفاده از (عدم استفاده از) دستورالعمل‌های \f(CW\*(C`frecipe.{s/d}\*(C'\fR و \f(CW\*(C`frsqrte.{s/d}\*(C'\fR. هنگام ساخت با \fB\-march=la664\fR، این گزینه به‌طور پیش‌فرض فعال است. حالت پیش‌فرض \fB\-mno\-frecipe\fR است. .IP \fB\-mdiv32\fR 4 .IX Item "-mdiv32" .PD 0 .IP \fB\-mno\-div32\fR 4 .IX Item "-mno-div32" .PD استفاده از (عدم استفاده از) دستورالعمل‌های \f(CW\*(C`div.w[u]\*(C'\fR و \f(CW\*(C`mod.w[u]\*(C'\fR در حالی که ورودی بسط‌یافته با علامت (sign\-extended) نباشد. هنگام ساخت با \fB\-march=la664\fR، این گزینه به‌طور پیش‌فرض فعال است. حالت پیش‌فرض \fB\-mno\-div32\fR است. .IP \fB\-mlam\-bh\fR 4 .IX Item "-mlam-bh" .PD 0 .IP \fB\-mno\-lam\-bh\fR 4 .IX Item "-mno-lam-bh" .PD استفاده از (عدم استفاده از) دستورالعمل‌های \f(CW\*(C`am{swap/add}[_db].{b/h}\*(C'\fR. هنگام ساخت با \fB\-march=la664\fR، این گزینه به‌طور پیش‌فرض فعال است. حالت پیش‌فرض \&\fB\-mno\-lam\-bh\fR است. .IP \fB\-mlamcas\fR 4 .IX Item "-mlamcas" .PD 0 .IP \fB\-mno\-lamcas\fR 4 .IX Item "-mno-lamcas" .PD استفاده از (عدم استفاده از) دستورالعمل‌های \f(CW\*(C`amcas[_db].{b/h/w/d}\*(C'\fR. هنگام ساخت با \&\fB\-march=la664\fR، این گزینه به‌طور پیش‌فرض فعال است. حالت پیش‌فرض \&\fB\-mno\-lamcas\fR است. .IP \fB\-mld\-seq\-sa\fR 4 .IX Item "-mld-seq-sa" .PD 0 .IP \fB\-mno\-ld\-seq\-sa\fR 4 .IX Item "-mno-ld-seq-sa" .PD تعیین نیاز به سد بارگذاری\-بارگذاری هم‌نشانی (\f(CW\*(C`dbar 0x700\*(C'\fR). هنگام ساخت با \fB\-march=la664\fR، این گزینه به‌طور پیش‌فرض فعال است. حالت پیش‌فرض \&\fB\-mno\-ld\-seq\-sa\fR است که به معنی نیاز به سد بارگذاری\-بارگذاری است. .IP \fB\-mtls\-dialect=\fR\fIopt\fR 4 .IX Item "-mtls-dialect=opt" این گزینه تعیین می‌کند کدام گویش TLS (tls dialect) ممکن است برای مدل‌های TLS پویای عمومی (general dynamic) و پویای محلی (local dynamic) استفاده شود. .RS 4.IP \fBtrad\fR 4 .IX Item "trad" استفاده از TLS سنتی. این مقدار پیش‌فرض است. .IP \fBdesc\fR 4 .IX Item "desc" استفاده از توصیف‌کننده‌های TLS. .RE .RS 4 .RE .IP \fB\-mannotate\-tablejump\fR 4 .IX Item "-mannotate-tablejump" .PD 0 .IP \fB\-mno\-annotate\-tablejump\fR 4 .IX Item "-mno-annotate-tablejump" .PD ایجاد یک بخش حاشیه‌نویسی با نام \f(CW\*(C`.discard.tablejump_annotate\*(C'\fR برای مرتبط کردن دستورالعمل \f(CW\*(C`jirl\*(C'\fR و جدول پرش، زمانی که از یک جدول پرش برای بهینه‌سازی عبارت \f(CW\*(C`switch\*(C'\fR استفاده می‌شود. برخی از ابزارهای خارجی، برای نمونه \fIobjtool\fR در سامانه ساخت هسته لینوکس، برای تحلیل جریان کنترل به این حاشیه‌نویسی نیاز دارند. مقدار پیش‌فرض \&\fB\-mno\-annotate\-tablejump\fR است. .IP "\fB\-\-param loongarch\-vect\-unroll\-limit=\fR\fIn\fR" 4 .IX Item "--param loongarch-vect-unroll-limit=n" بردارساز (vectorizer) از اطلاعات بهینه‌سازی دردسترس استفاده می‌کند تا تعیین کند که آیا باز کردن حلقه اصلی برداری‌شده سودمند است یا خیر و تا چه اندازه. این پارامتر کران بالایی را برای میزان باز کردن حلقه اصلی توسط بردارساز تعیین می‌کند. مقدار پیش‌فرض شش است. .PP \fIگزینه‌های M32C\fR .IX Subsection "M32C Options" .IP \fB\-mcpu=\fR\fIname\fR 4 .IX Item "-mcpu=name" پردازنده‌ای را انتخاب می‌کند که کد برای آن تولید می‌شود. مقدار \fIname\fR می‌تواند یکی از گزینه‌های \&\fBr8c\fR برای سری R8C/Tiny، \fBm16c\fR برای سری M16C (تا 60/)، \fBm32cm\fR برای سری M16C/80، یا \fBm32c\fR برای سری M32C/80 باشد. .IP \fB\-msim\fR 4 .IX Item "-msim" مشخص می‌کند که برنامه روی شبیه‌ساز اجرا خواهد شد. این امر سبب پیوند خوردن یک کتابخانه زمان اجرای جایگزین می‌شود که برای نمونه از ورودی/خروجی فایل پشتیبانی می‌کند. هنگام تولید برنامه‌هایی که قرار است روی سخت‌افزار واقعی اجرا شوند نباید از این گزینه استفاده کنید؛ باید کتابخانه زمان اجرای خودتان را برای هر تابع ورودی/خروجی که مورد نیاز است فراهم کنید. .IP \fB\-memregs=\fR\fInumber\fR 4 .IX Item "-memregs=number" تعداد شبه‌ثبات‌های مبتنی بر حافظه را که GCC در طول تولید کد استفاده می‌کند مشخص می‌نماید. این شبه‌ثبات‌ها مانند ثبات‌های واقعی به کار می‌روند؛ بنابراین موازنه‌ای بین توانایی GCC در گنجاندن کد در ثبات‌های موجود و افت کارایی ناشی از استفاده از حافظه به جای ثبات‌ها وجود دارد. توجه داشته باشید که تمام ماژول‌ها در یک برنامه باید با مقدار یکسانی از این گزینه کامپایل شوند. به همین دلیل، نباید از این گزینه همراه با کتابخانه‌های زمان اجرای پیش‌فرض GCC استفاده کنید. .PP \fIگزینه‌های M32R/D\fR .IX Subsection "M32R/D Options" .PP این گزینه‌های \fB\-m\fR برای معماری‌های Renesas M32R/D تعریف شده‌اند: .IP \fB\-m32r2\fR 4 .IX Item "-m32r2" تولید کد برای M32R/2. .IP \fB\-m32rx\fR 4 .IX Item "-m32rx" تولید کد برای M32R/X. .IP \fB\-m32r\fR 4 .IX Item "-m32r" تولید کد برای M32R. این مقدار پیش‌فرض است. .IP \fB\-mmodel=small\fR 4 .IX Item "-mmodel=small" فرض می‌کند که تمام اشیاء در ۱۶ مگابایت پایینی حافظه قرار دارند (به طوری که آدرس‌های آن‌ها را می‌توان با دستورالعمل \f(CW\*(C`ld24\*(C'\fR بارگذاری کرد)، و فرض می‌کند تمام زیرروال‌ها با دستورالعمل \f(CW\*(C`bl\*(C'\fR قابل دسترسی هستند. این حالت پیش‌فرض است. .Sp قابلیت آدرس‌دهی یک شیء خاص را می‌توان با مشخصهٔ \&\f(CW\*(C`model\*(C'\fR تعیین کرد. .IP \fB\-mmodel=medium\fR 4 .IX Item "-mmodel=medium" فرض می‌کند اشیاء ممکن است در هر کجای فضای آدرس ۳۲ بیتی باشند (کامپایلر برای بارگذاری آدرس‌های آن‌ها دستورالعمل‌های \f(CW\*(C`seth/add3\*(C'\fR را تولید می‌کند)، و فرض می‌کند تمام زیرروال‌ها با دستورالعمل \f(CW\*(C`bl\*(C'\fR قابل دسترسی هستند. .IP \fB\-mmodel=large\fR 4 .IX Item "-mmodel=large" فرض می‌کند اشیاء ممکن است در هر کجای فضای آدرس ۳۲ بیتی باشند (کامپایلر برای بارگذاری آدرس‌های آن‌ها دستورالعمل‌های \f(CW\*(C`seth/add3\*(C'\fR را تولید می‌کند)، و فرض می‌کند زیرروال‌ها ممکن است با دستورالعمل \f(CW\*(C`bl\*(C'\fR قابل دسترسی نباشند (کامپایلر دنباله دستورالعمل‌های بسیار کُندتر \f(CW\*(C`seth/add3/jl\*(C'\fR را تولید می‌کند). .IP \fB\-msdata=none\fR 4 .IX Item "-msdata=none" استفاده از ناحیه داده‌های کوچک را غیرفعال می‌کند. متغیرها در یکی از بخش‌های \f(CW\*(C`.data\*(C'\fR، \f(CW\*(C`.bss\*(C'\fR، یا \f(CW\*(C`.rodata\*(C'\fR قرار می‌گیرند (مگر اینکه مشخصهٔ \&\f(CW\*(C`section\*(C'\fR تعیین شده باشد). این حالت پیش‌فرض است. .Sp ناحیه داده‌های کوچک از بخش‌های \f(CW\*(C`.sdata\*(C'\fR و \f(CW\*(C`.sbss\*(C'\fR تشکیل شده است. اشیاء را می‌توان با استفاده از مشخصهٔ \&\f(CW\*(C`section\*(C'\fR و با به‌کارگیری یکی از این بخش‌ها صریحاً در ناحیه داده‌های کوچک قرار داد. .IP \fB\-msdata=sdata\fR 4 .IX Item "-msdata=sdata" داده‌های سراسری و ایستای کوچک را در ناحیه داده‌های کوچک قرار می‌دهد، اما کد ویژه‌ای برای ارجاع به آن‌ها تولید نمی‌کند. .IP \fB\-msdata=use\fR 4 .IX Item "-msdata=use" داده‌های سراسری و ایستای کوچک را در ناحیه داده‌های کوچک قرار می‌دهد، و دستورالعمل‌های ویژه‌ای برای ارجاع به آن‌ها تولید می‌کند. .IP "\fB\-G\fR \fInum\fR" 4 .IX Item "-G num" اشیاء سراسری و ایستا با اندازه کمتر یا مساوی با \fInum\fR بایت را به جای بخش‌های عادی داده یا BSS، در بخش‌های داده یا BSS کوچک قرار می‌دهد. مقدار پیش‌فرض \fInum\fR برابر با 8 است. برای اینکه این گزینه تأثیری داشته باشد، گزینهٔ \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 تنها می‌تواند 1 یا 2 باشد. .IP \fB\-mbranch\-cost=\fR\fInumber\fR 4 .IX Item "-mbranch-cost=number" مقدار \&\fInumber\fR تنها می‌تواند 1 یا 2 باشد. اگر 1 باشد، انشعاب‌ها به کدهای شرطی ترجیح داده می‌شوند؛ اگر 2 باشد، عکس آن اعمال می‌گردد. .IP \fB\-mflush\-trap=\fR\fInumber\fR 4 .IX Item "-mflush-trap=number" شماره تله‌ای (trap) را که برای تخلیه کَش استفاده می‌شود مشخص می‌کند. مقدار پیش‌فرض 12 است. شماره‌های معتبر بین 0 تا 15 (شامل خود آن‌ها) هستند. .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 (\fIcpu\fR) عبارتند از: \fB68000\fR، \fB68010\fR، \fB68020\fR، \&\fB68030\fR، \fB68040\fR، \fB68060\fR، \fB68302\fR، \fB68332\fR و \fBcpu32\fR. پردازنده‌های ColdFire در جدول زیر مشخص شده‌اند، که همچنین پردازنده‌ها را در خانواده‌ها دسته‌بندی می‌کند: .RS 4 .IP "\fIخانواده\fR : آرگومان‌های \fB\-mcpu\fR" 4 .IX Item "Family : -mcpu arguments" .PD 0 .IP "\fB51\fR : \fB51\fR \fB51ac\fR \fB51ag\fR \fB51cn\fR \fB51em\fR \fB51je\fR \fB51jf\fR \fB51jg\fR \fB51jm\fR \fB51mm\fR \fB51qe\fR \fB51qm\fR" 4 .IX Item "51 : 51 51ac 51ag 51cn 51em 51je 51jf 51jg 51jm 51mm 51qe 51qm" .IP "\fB5206\fR : \fB5202\fR \fB5204\fR \fB5206\fR" 4 .IX Item "5206 : 5202 5204 5206" .IP "\fB5206e\fR : \fB5206e\fR" 4 .IX Item "5206e : 5206e" .IP "\fB5208\fR : \fB5207\fR \fB5208\fR" 4 .IX Item "5208 : 5207 5208" .IP "\fB5211a\fR : \fB5210a\fR \fB5211a\fR" 4 .IX Item "5211a : 5210a 5211a" .IP "\fB5213\fR : \fB5211\fR \fB5212\fR \fB5213\fR" 4 .IX Item "5213 : 5211 5212 5213" .IP "\fB5216\fR : \fB5214\fR \fB5216\fR" 4 .IX Item "5216 : 5214 5216".IP "\fB52235\fR : \fB52230\fR \fB52231\fR \fB52232\fR \fB52233\fR \fB52234\fR \fB52235\fR" 4 .IX Item "52235 : 52230 52231 52232 52233 52234 52235" .IP "\fB5225\fR : \fB5224\fR \fB5225\fR" 4 .IX Item "5225 : 5224 5225" .IP "\fB52259\fR : \fB52252\fR \fB52254\fR \fB52255\fR \fB52256\fR \fB52258\fR \fB52259\fR" 4 .IX Item "52259 : 52252 52254 52255 52256 52258 52259" .IP "\fB5235\fR : \fB5232\fR \fB5233\fR \fB5234\fR \fB5235\fR \fB523x\fR" 4 .IX Item "5235 : 5232 5233 5234 5235 523x" .IP "\fB5249\fR : \fB5249\fR" 4 .IX Item "5249 : 5249" .IP "\fB5250\fR : \fB5250\fR" 4 .IX Item "5250 : 5250" .IP "\fB5271\fR : \fB5270\fR \fB5271\fR" 4 .IX Item "5271 : 5270 5271" .IP "\fB5272\fR : \fB5272\fR" 4 .IX Item "5272 : 5272" .IP "\fB5275\fR : \fB5274\fR \fB5275\fR" 4 .IX Item "5275 : 5274 5275" .IP "\fB5282\fR : \fB5280\fR \fB5281\fR \fB5282\fR \fB528x\fR" 4 .IX Item "5282 : 5280 5281 5282 528x" .IP "\fB53017\fR : \fB53011\fR \fB53012\fR \fB53013\fR \fB53014\fR \fB53015\fR \fB53016\fR \fB53017\fR" 4 .IX Item "53017 : 53011 53012 53013 53014 53015 53016 53017" .IP "\fB5307\fR : \fB5307\fR" 4 .IX Item "5307 : 5307" .IP "\fB5329\fR : \fB5327\fR \fB5328\fR \fB5329\fR \fB532x\fR" 4 .IX Item "5329 : 5327 5328 5329 532x" .IP "\fB5373\fR : \fB5372\fR \fB5373\fR \fB537x\fR" 4 .IX Item "5373 : 5372 5373 537x" .IP "\fB5407\fR : \fB5407\fR" 4 .IX Item "5407 : 5407" .IP "\fB5475\fR : \fB5470\fR \fB5471\fR \fB5472\fR \fB5473\fR \fB5474\fR \fB5475\fR \fB547x\fR \fB5480\fR \fB5481\fR \fB5482\fR \fB5483\fR \fB5484\fR \fB5485\fR" 4 .IX Item "5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485" .PD .RE .RS 4 .Sp در صورتی که \&\fIarch\fR با \fIcpu\fR سازگار باشد، \&\fB\-mcpu=\fR\fIcpu\fR بر \&\fB\-march=\fR\fIarch\fR اولویت می‌یابد (آن را جایگزین می‌کند). سایر ترکیب‌های \&\fB\-mcpu\fR و \fB\-march\fR رد می‌شوند. .Sp کامپایلر GCC ماکروی \f(CW\*(C`_\|_mcf_cpu_\fR\f(CIcpu\fR\f(CW\*(C'\fR را هنگام انتخاب مقصد ColdFire از نوع \&\fIcpu\fR تعریف می‌کند. همچنین ماکروی \f(CW\*(C`_\|_mcf_family_\fR\f(CIfamily\fR\f(CW\*(C'\fR را نیز تعریف می‌کند، که در آن مقدار \fIfamily\fR توسط جدول بالا ارائه شده است. .RE .IP \fB\-mtune=\fR\fItune\fR 4 .IX Item "-mtune=tune" کد را برای یک ریزمعماری خاص در چارچوب محدودیت‌های تعیین‌شده توسط \fB\-march\fR و \fB\-mcpu\fR بهینه‌سازی (tune) می‌کند. ریزمعماری‌های M680x0 عبارتند از: \fB68000\fR، \fB68010\fR، \&\fB68020\fR، \fB68030\fR، \fB68040\fR، \fB68060\fR و \fBcpu32\fR. ریزمعماری‌های ColdFire عبارتند از: \fBcfv1\fR، \fBcfv2\fR، \fBcfv3\fR، \fBcfv4\fR و \fBcfv4e\fR. .Sp شما همچنین می‌توانید از \fB\-mtune=68020\-40\fR برای کدی استفاده کنید که باید نسبتاً مناسب روی مقصدهای 68020، 68030 و 68040 اجرا شود. \&\fB\-mtune=68020\-60\fR مشابه است اما مقصدهای 68060 را نیز در بر می‌گیرد. این دو گزینه به ترتیب همان تصمیم‌های بهینه‌سازی را مشابه \&\fB\-m68020\-40\fR و \fB\-m68020\-60\fR انتخاب می‌کنند. .Sp کامپایلر 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 را هنگام بهینه‌سازی برای معماری 680x0 از نوع \fIarch\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، ۱۶ بیتی در نظر می‌گیرد. علاوه بر این، پارامترهای ارسالی روی پشته نیز حتی در مقصدهایی که API آن‌ها ارتقا به ۳۲ بیتی را الزامی می‌کند، روی یک مرز ۱۶ بیتی تراز می‌شوند. .IP \fB\-mno\-short\fR 4 .IX Item "-mno-short" نوع \f(CW\*(C`int\*(C'\fR را ۱۶ بیتی در نظر نمی‌گیرد. این مقدار پیش‌فرض است. .IP \fB\-mnobitfield\fR 4 .IX Item "-mnobitfield" .PD 0 .IP \fB\-mno\-bitfield\fR 4 .IX Item "-mno-bitfield" .PD از دستورالعمل‌های بیتی (bit\-field) استفاده نمی‌کند. گزینه‌های \fB\-m68000\fR، \fB\-mcpu32\fR و \fB\-m5200\fR به‌طور ضمنی \fB\-mnobitfield\fR را فعال می‌کنند. .IP \fB\-mbitfield\fR 4 .IX Item "-mbitfield" از دستورالعمل‌های بیتی استفاده می‌کند. گزینهٔ \fB\-m68020\fR به‌طور ضمنی \&\fB\-mbitfield\fR را فعال می‌کند. اگر از پیکربندی طراحی‌شده برای 68020 استفاده کنید، این حالت پیش‌فرض است. .IP \fB\-mrtd\fR 4 .IX Item "-mrtd" از یک قرارداد فراخوانی تابع متفاوت استفاده می‌کند، که در آن توابعی که تعداد ثابتی از آرگومان‌ها را می‌پذیرند، با دستورالعمل \f(CW\*(C`rtd\*(C'\fR برمی‌گردند؛ این دستورالعمل هنگام بازگشت، آرگومان‌های آن‌ها را از پشته بیرون می‌کشد (pop می‌کند). این کار یک دستورالعمل در فراخواننده صرفه‌جویی می‌کند چرا که در آنجا نیازی به بیرون کشیدن آرگومان‌ها نیست. .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 استفاده می‌کند، به‌جای اینکه از یک جدول آفست سراسری استفاده کند. در حال حاضر، این گزینه به‌طور ضمنی \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" کدی تولید می‌کند که اجازه می‌دهد بخش داده در ناحیه‌ای از حافظه متفاوت از بخش کد قرار گیرد. این امر امکان اجرای درجا (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" کدی تولید می‌کند که از کتابخانه‌های مشترک از طریق روش شناسهٔ کتابخانه پشتیبانی می‌کند. این امر امکان اجرای درجا و کتابخانه‌های مشترک را در محیطی بدون مدیریت حافظهٔ مجازی فراهم می‌سازد. این گزینه به‌طور ضمنی \fB\-fPIC\fR را فعال می‌کند. .IP \fB\-mno\-id\-shared\-library\fR 4 .IX Item "-mno-id-shared-library" کدی تولید می‌کند که فرض نمی‌کند کتابخانه‌های مشترک مبتنی بر شناسه استفاده می‌شوند. این مقدار پیش‌فرض است. .IP \fB\-mshared\-library\-id=n\fR 4 .IX Item "-mshared-library-id=n" شمارهٔ شناسایی کتابخانهٔ مشترک مبتنی بر شناسه را که در حال کامپایل است مشخص می‌کند. تعیین مقدار 0 کد فشرده‌تری تولید می‌کند؛ تعیین مقادیر دیگر تخصیص آن شماره به کتابخانهٔ فعلی را اجباری می‌کند، اما از نظر فضا یا زمان کارآمدتر از حذف این گزینه نیست. .IP \fB\-mxgot\fR 4 .IX Item "-mxgot" .PD 0 .IP \fB\-mno\-xgot\fR 4 .IX Item "-mno-xgot" .PD هنگام تولید کد مستقل از موقعیت برای ColdFire، کدی تولید می‌کند که در صورت داشتن بیش از ۸۱۹۲ مدخل در GOT نیز کار کند. این کد بزرگ‌تر و کندتر از کد تولیدشده بدون این گزینه است. در پردازنده‌های M680x0، به این گزینه نیازی نیست؛ \fB\-fPIC\fR کفایت می‌کند. .Sp ‏GCC معمولاً از یک دستورالعمل منفرد برای بارگذاری مقادیر از GOT استفاده می‌کند. اگرچه این کار نسبتاً کارآمد است، اما تنها در صورتی کار می‌کند که GOT کوچک‌تر از حدود 64k باشد. هر مقدار بزرگ‌تری باعث می‌شود پیونددهنده خطایی مانند زیر گزارش کند: .Sp .Vb 1 \& relocation truncated to fit: R_68K_GOT16O foobar .Ve .Sp اگر این اتفاق افتاد، باید کد خود را با \fB\-mxgot\fR بازکامپایل کنید. پس از آن باید با GOTهای بسیار بزرگ کار کند. با این حال، کد تولیدشده با \&\fB\-mxgot\fR کارایی کمتری دارد، زیرا برای واکشی مقدار یک نماد سراسری ۴ دستورالعمل زمان می‌برد. .Sp توجه داشته باشید که برخی پیونددهنده‌ها، از جمله نسخه‌های جدیدتر پیونددهندهٔ GNU، می‌توانند چندین GOT ایجاد کرده و مدخل‌های GOT را مرتب کنند. اگر چنین پیونددهنده‌ای دارید، تنها زمانی باید از \fB\-mxgot\fR استفاده کنید که یک فایل شیء منفرد را کامپایل می‌کنید که به بیش از ۸۱۹۲ مدخل GOT دسترسی دارد. تعداد بسیار کمی از آن‌ها چنین هستند. .Sp این گزینه‌ها هیچ تأثیری ندارند مگر اینکه GCC در حال تولید کد مستقل از موقعیت باشد. .IP \fB\-mlong\-jump\-table\-offsets\fR 4 .IX Item "-mlong-jump-table-offsets" از آفست‌های ۳۲ بیتی در جدول‌های \f(CW\*(C`switch\*(C'\fR استفاده می‌کند. پیش‌فرض استفاده از آفست‌های ۱۶ بیتی است. .PP \fIگزینه‌های MCore\fR .IX Subsection "MCore Options" .PP این‌ها گزینه‌های \fB\-m\fR تعریف‌شده برای پردازنده‌های Motorola M*Core هستند. .IP \fB\-mhardlit\fR 4 .IX Item "-mhardlit" .PD 0 .IP \fB\-mno\-hardlit\fR 4 .IX Item "-mno-hardlit" .PD ثابت‌ها را در صورتی که بتوان در دو دستورالعمل یا کمتر انجام داد، در جریان کد به‌صورت درون‌خطی (inline) قرار می‌دهد. .IP \fB\-mdiv\fR 4 .IX Item "-mdiv" .PD 0 .IP \fB\-mno\-div\fR 4 .IX Item "-mno-div" .PD از دستورالعمل تقسیم استفاده می‌کند. (به‌طور پیش‌فرض فعال است). .IP \fB\-mrelax\-immediate\fR 4 .IX Item "-mrelax-immediate" .PD 0 .IP \fB\-mno\-relax\-immediate\fR 4 .IX Item "-mno-relax-immediate" .PD مقادیر بی‌واسطه (immediate) با اندازهٔ دلخواه را در عملیات بیتی مجاز می‌داند. .IP \fB\-mwide\-bitfields\fR 4 .IX Item "-mwide-bitfields" .PD 0 .IP \fB\-mno\-wide\-bitfields\fR 4 .IX Item "-mno-wide-bitfields" .PD همیشه با فیلدهای بیتی به‌اندازهٔ \f(CW\*(C`int\*(C'\fR رفتار می‌کند. .IP \fB\-m4byte\-functions\fR 4 .IX Item "-m4byte-functions" .PD 0 .IP \fB\-mno\-4byte\-functions\fR 4 .IX Item "-mno-4byte-functions" .PD تمام توابع را مجبور می‌کند تا روی یک مرز ۴ بایتی تراز شوند. .IP \fB\-mcallgraph\-data\fR 4 .IX Item "-mcallgraph-data" .PD 0 .IP \fB\-mno\-callgraph\-data\fR 4 .IX Item "-mno-callgraph-data" .PD اطلاعات گراف فراخوانی (callgraph) را تولید می‌کند. .IP \fB\-mslow\-bytes\fR 4 .IX Item "-mslow-bytes" .PD 0 .IP \fB\-mno\-slow\-bytes\fR 4 .IX Item "-mno-slow-bytes" .PD هنگام خواندن مقادیر بایتی، دسترسی کلمه‌ای (word access) را ترجیح می‌دهد. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" .PD 0 .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" .PD برای یک مقصد با پایان‌پذیری کوچک (little\-endian) کد تولید می‌کند. .IP \fB\-m210\fR 4 .IX Item "-m210" .PD 0.IP \fB\-m340\fR 4 .IX Item "-m340" .PD تولید کد برای پردازندهٔ 210. .IP \fB\-mno\-lsim\fR 4 .IX Item "-mno-lsim" فرض می‌کند که پشتیبانی زمان اجرا فراهم شده است و بنابراین کتابخانهٔ شبیه‌ساز (\fIlibsim.a)\fR را از خط فرمان پیونددهنده حذف می‌کند. .IP \fB\-mstack\-increment=\fR\fIsize\fR 4 .IX Item "-mstack-increment=size" تنظیم حداکثر مقدار برای یک عملیات افزایش پشته. مقادیر بزرگ می‌توانند سرعت برنامه‌هایی را که شامل توابعی با نیاز به فضای پشتهٔ زیاد هستند افزایش دهند، اما در صورتی که پشته بیش از حد گسترش یابد، می‌توانند خطای دسترسی به حافظه (segmentation fault) نیز ایجاد کنند. مقدار پیش‌فرض 0x1000 است. .PP \fIگزینه‌های MicroBlaze\fR .IX Subsection "MicroBlaze Options" .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" استفاده از شبیه‌سازی نرم‌افزاری برای ممیز شناور (پیش‌فرض). .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" استفاده از دستورالعمل‌های سخت‌افزاری ممیز شناور. .IP \fB\-mmemcpy\fR 4 .IX Item "-mmemcpy" انتقال‌های بلوکی بهینه‌سازی نشوند، از \f(CW\*(C`memcpy\*(C'\fR استفاده شود. .IP \fB\-mno\-clearbss\fR 4 .IX Item "-mno-clearbss" این گزینه منسوخ شده است. به جای آن از \fB\-fno\-zero\-initialized\-in\-bss\fR استفاده کنید. .IP \fB\-mcpu=\fR\fIcpu\-type\fR 4 .IX Item "-mcpu=cpu-type" استفاده از قابلیت‌ها و زمان‌بندی کد برای CPU مشخص‌شده. مقادیر پشتیبانی‌شده در قالب \fBv\fR\fIX\fR\fB.\fR\fIYY\fR\fB.\fR\fIZ\fR هستند، که در آن \fIX\fR نسخهٔ اصلی، \fIYY\fR نسخهٔ فرعی و \&\fIZ\fR کد سازگاری است. مقادیر نمونه عبارتند از \fBv3.00.a\fR، \&\fBv4.00.b\fR، \fBv5.00.a\fR، \fBv5.00.b\fR، \fBv6.00.a\fR. .IP \fB\-mxl\-soft\-mul\fR 4 .IX Item "-mxl-soft-mul" استفاده از شبیه‌سازی نرم‌افزاری ضرب (پیش‌فرض). .IP \fB\-mxl\-soft\-div\fR 4 .IX Item "-mxl-soft-div" استفاده از شبیه‌سازی نرم‌افزاری تقسیم (پیش‌فرض). .IP \fB\-mxl\-barrel\-shift\fR 4 .IX Item "-mxl-barrel-shift" استفاده از شیفت‌دهندهٔ بشکه‌ای (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" استفاده از دستورالعمل‌های ضرب بالا برای بخش بالاییِ ضرب ۳۲×۳۲. .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، اجازه می‌دهد داده‌ها به جای GOT با آفست از نشانی آغاز text ارجاع داده شوند. .PP \fIگزینه‌های MIPS\fR .IX Subsection "MIPS Options" .IP \fB\-EB\fR 4 .IX Item "-EB" تولید کد با ترتیب بایت بزرگ‌تر (big\-endian). .IP \fB\-EL\fR 4 .IX Item "-EL" تولید کد با ترتیب بایت کوچک‌تر (little\-endian). این مقدار پیش‌فرض برای پیکربندی‌های \fBmips*el\-*\-*\fR است. .IP \fB\-march=\fR\fIarch\fR 4 .IX Item "-march=arch" تولید کدی که بر روی \fIarch\fR اجرا می‌شود، که می‌تواند نام یک ISA عمومی MIPS یا نام یک پردازندهٔ خاص باشد. نام‌های ISA عبارتند از: \&\fBmips1\fR، \fBmips2\fR، \fBmips3\fR، \fBmips4\fR، \&\fBmips32\fR، \fBmips32r2\fR، \fBmips32r3\fR، \fBmips32r5\fR، \&\fBmips32r6\fR، \fBmips64\fR، \fBmips64r2\fR، \fBmips64r3\fR، \&\fBmips64r5\fR و \fBmips64r6\fR. نام‌های پردازنده‌ها عبارتند از: \&\fB4kc\fR، \fB4km\fR، \fB4kp\fR، \fB4ksc\fR، \&\fB4kec\fR، \fB4kem\fR، \fB4kep\fR، \fB4ksd\fR، \&\fB5kc\fR، \fB5kf\fR، \&\fB20kc\fR، \&\fB24kc\fR، \fB24kf2_1\fR، \fB24kf1_1\fR، \&\fB24kec\fR، \fB24kef2_1\fR، \fB24kef1_1\fR، \&\fB34kc\fR، \fB34kf2_1\fR، \fB34kf1_1\fR، \fB34kn\fR، \&\fB74kc\fR، \fB74kf2_1\fR، \fB74kf1_1\fR، \fB74kf3_2\fR، \&\fB1004kc\fR، \fB1004kf2_1\fR، \fB1004kf1_1\fR، \&\fBi6400\fR، \fBi6500\fR، \&\fBinteraptiv\fR، \&\fBloongson2e\fR، \fBloongson2f\fR، \fBloongson3a\fR، \fBgs464\fR، \&\fBgs464e\fR، \fBgs264e\fR، \&\fBm4k\fR، \&\fBm14k\fR، \fBm14kc\fR، \fBm14ke\fR، \fBm14kec\fR، \&\fBm5100\fR، \fBm5101\fR، \&\fBocteon\fR، \fBocteon+\fR، \fBocteon2\fR، \fBocteon3\fR، \&\fBorion\fR، \&\fBp5600\fR، \fBp6600\fR، \&\fBr2000\fR، \fBr3000\fR، \fBr3900\fR، \fBr4000\fR، \fBr4400\fR، \&\fBr4600\fR، \fBr4650\fR، \fBr4700\fR، \fBr5900\fR، \&\fBr6000\fR، \fBr8000\fR، \&\fBrm7000\fR، \fBrm9000\fR، \&\fBr10000\fR، \fBr12000\fR، \fBr14000\fR، \fBr16000\fR، \&\fBsb1\fR، \&\fBsr71000\fR، \&\fBvr4100\fR، \fBvr4111\fR، \fBvr4120\fR، \fBvr4130\fR، \fBvr4300\fR، \&\fBvr5000\fR، \fBvr5400\fR، \fBvr5500\fR، \&\fBxlr\fR و \fBxlp\fR. مقدار ویژهٔ \fBfrom\-abi\fR سازگارترین معماری را برای ABI انتخاب‌شده برمی‌گزیند (یعنی \&\fBmips1\fR برای ABIهای ۳۲ بیتی و \fBmips3\fR برای ABIهای ۶۴ بیتی). .Sp زنجیره ابزار بومی Linux/GNU از مقدار \fBnative\fR نیز پشتیبانی می‌کند که بهترین گزینهٔ معماری را برای پردازندهٔ میزبان انتخاب می‌کند. اگر GCC پردازنده را شناسایی نکند، \fB\-march=native\fR هیچ تأثیری ندارد. .Sp در نام‌های پردازنده‌ها، \fB000\fR پایانی می‌تواند به صورت \fBk\fR خلاصه شود (برای مثال، \fB\-march=r2k\fR). پیشوندها اختیاری هستند و \&\fBvr\fR ممکن است به صورت \fBr\fR نوشته شود. .Sp نام‌هایی با قالب \fIn\fR\fBf2_1\fR به پردازنده‌هایی با FPU اشاره دارند که با نصف بسامد هسته کار می‌کند، نام‌هایی با قالب \&\fIn\fR\fBf1_1\fR به پردازنده‌هایی با FPU هم‌بسامد با هسته اشاره دارند، و نام‌هایی با قالب \fIn\fR\fBf3_2\fR به پردازنده‌هایی با FPU که بسامد آن با نسبت ۳:۲ نسبت به هسته کار می‌کند اشاره دارند. به دلایل سازگاری، \fIn\fR\fBf\fR به عنوان مترادفی برای \fIn\fR\fBf2_1\fR پذیرفته می‌شود در حالی که \fIn\fR\fBx\fR و \fIb\fR\fBfx\fR به عنوان مترادف‌هایی برای \fIn\fR\fBf1_1\fR پذیرفته می‌شوند. .Sp کامپایلر GCC بر اساس مقدار این گزینه دو ماکرو تعریف می‌کند. نخستین ماکرو \f(CW\*(C`_MIPS_ARCH\*(C'\fR است که نام معماری هدف را به صورت یک رشته مشخص می‌کند. دومین ماکرو قالبی به شکل \f(CW\*(C`_MIPS_ARCH_\fR\f(CIfoo\fR\f(CW\*(C'\fR دارد، که در آن \fIfoo\fR مقدار با حروف بزرگِ \f(CW\*(C`_MIPS_ARCH\*(C'\fR است. برای مثال، \fB\-march=r2000\fR مقدار \f(CW\*(C`_MIPS_ARCH\*(C'\fR را روی \f(CW"r2000"\fR تنظیم کرده و ماکروی \f(CW\*(C`_MIPS_ARCH_R2000\*(C'\fR را تعریف می‌کند. .Sp توجه داشته باشید که ماکروی \f(CW\*(C`_MIPS_ARCH\*(C'\fR از نام‌های پردازنده‌ای که در بالا ذکر شد استفاده می‌کند. به بیانی دیگر، پیشوند کامل را در بر دارد و \fB000\fR را به صورت \fBk\fR خلاصه نمی‌کند. در مورد \fBfrom\-abi\fR، این ماکرو نام معماری تعیین‌شده (یا \f(CW"mips1"\fR یا \&\f(CW"mips3"\fR) را مشخص می‌سازد. در حالتی که هیچ گزینهٔ \&\fB\-march\fR داده نشود، نام معماری پیش‌فرض را مشخص می‌کند. .IP \fB\-mtune=\fR\fIarch\fR 4 .IX Item "-mtune=arch" بهینه‌سازی برای \fIarch\fR. از جمله موارد، این گزینه شیوهٔ زمان‌بندی دستورالعمل‌ها و هزینهٔ برآوردشده برای عملیات حسابی را کنترل می‌کند. فهرست مقادیر \fIarch\fR مشابه با \&\fB\-march\fR است. .Sp هنگامی که از این گزینه استفاده نشود، GCC برای پردازندهٔ مشخص‌شده توسط \fB\-march\fR بهینه‌سازی می‌کند. با استفادهٔ هم‌زمان از \fB\-march\fR و \&\fB\-mtune\fR، می‌توان کدی تولید کرد که بر روی یک خانواده از پردازنده‌ها اجرا شود، اما برای یک عضو خاص از آن خانواده بهینه‌سازی شده باشد. .Sp گزینهٔ \&\fB\-mtune\fR ماکروهای \f(CW\*(C`_MIPS_TUNE\*(C'\fR و \&\f(CW\*(C`_MIPS_TUNE_\fR\f(CIfoo\fR\f(CW\*(C'\fR را تعریف می‌کند، که عملکردی مشابه ماکروهای \&\fB\-march\fR شرح‌داده‌شده در بالا دارند..IP \fB\-mips1\fR 4 .IX Item "-mips1" معادل \fB\-march=mips1\fR است. .IP \fB\-mips2\fR 4 .IX Item "-mips2" معادل \fB\-march=mips2\fR است. .IP \fB\-mips3\fR 4 .IX Item "-mips3" معادل \fB\-march=mips3\fR است. .IP \fB\-mips4\fR 4 .IX Item "-mips4" معادل \fB\-march=mips4\fR است. .IP \fB\-mips32\fR 4 .IX Item "-mips32" معادل \fB\-march=mips32\fR است. .IP \fB\-mips32r3\fR 4 .IX Item "-mips32r3" معادل \fB\-march=mips32r3\fR است. .IP \fB\-mips32r5\fR 4 .IX Item "-mips32r5" معادل \fB\-march=mips32r5\fR است. .IP \fB\-mips32r6\fR 4 .IX Item "-mips32r6" معادل \fB\-march=mips32r6\fR است. .IP \fB\-mips64\fR 4 .IX Item "-mips64" معادل \fB\-march=mips64\fR است. .IP \fB\-mips64r2\fR 4 .IX Item "-mips64r2" معادل \fB\-march=mips64r2\fR است. .IP \fB\-mips64r3\fR 4 .IX Item "-mips64r3" معادل \fB\-march=mips64r3\fR است. .IP \fB\-mips64r5\fR 4 .IX Item "-mips64r5" معادل \fB\-march=mips64r5\fR است. .IP \fB\-mips64r6\fR 4 .IX Item "-mips64r6" معادل \fB\-march=mips64r6\fR است. .IP \fB\-mips16\fR 4 .IX Item "-mips16" .PD 0 .IP \fB\-mno\-mips16\fR 4 .IX Item "-mno-mips16" .PD تولید (عدم تولید) کد MIPS16. اگر GCC یک معماری MIPS32 یا MIPS64 را هدف قرار دهد، از MIPS16e ASE استفاده می‌کند. .Sp تولید کد MIPS16 همچنین می‌تواند بر مبنای هر تابع با استفاده از صفت‌های \f(CW\*(C`mips16\*(C'\fR و \f(CW\*(C`nomips16\*(C'\fR کنترل شود. .IP \fB\-mmips16e2\fR 4 .IX Item "-mmips16e2" .PD 0 .IP \fB\-mno\-mips16e2\fR 4 .IX Item "-mno-mips16e2" .PD استفاده از (عدم استفاده از) MIPS16e2 ASE. این گزینه رفتار گزینهٔ \fB\-mips16\fR را طوری تغییر می‌دهد که MIPS16e2 ASE را هدف قرار دهد. .IP \fB\-mflip\-mips16\fR 4 .IX Item "-mflip-mips16" تولید کد MIPS16 به‌صورت متناوب و یک‌درمیان روی توابع. این گزینه برای آزمون پس‌رفت (regression testing) تولید کد ترکیبی MIPS16/غیر\-MIPS16 ارائه شده است و برای استفادهٔ عادی هنگام کامپایل کدهای کاربر در نظر گرفته نشده است. .IP \fB\-minterlink\-compressed\fR 4 .IX Item "-minterlink-compressed" .PD 0 .IP \fB\-mno\-interlink\-compressed\fR 4 .IX Item "-mno-interlink-compressed" .PD الزام (عدم الزام) به اینکه کدهای استفاده‌کننده از MIPS ISA استاندارد (غیرفشرده)، سازگار با پیوند با کدهای MIPS16 و microMIPS باشند، و برعکس. .Sp برای نمونه، کدی که از کدگذاری استاندارد ISA استفاده می‌کند نمی‌تواند مستقیماً به کد MIPS16 یا microMIPS بپرد؛ بلکه باید از یک فراخوانی یا یک پرش غیرمستقیم استفاده کند. بنابراین \fB\-minterlink\-compressed\fR پرش‌های مستقیم را غیرفعال می‌کند مگر اینکه GCC بداند که هدف پرش، فشرده نیست. .IP \fB\-minterlink\-mips16\fR 4 .IX Item "-minterlink-mips16" .PD 0 .IP \fB\-mno\-interlink\-mips16\fR 4 .IX Item "-mno-interlink-mips16" .PD نام‌های مستعار برای \fB\-minterlink\-compressed\fR و \fB\-mno\-interlink\-compressed\fR. این گزینه‌ها پیش از معرفی microMIPS ASE وجود داشته‌اند و برای سازگاری با نسخه‌های پیشین حفظ شده‌اند. .IP \fB\-mabi=32\fR 4 .IX Item "-mabi=32" .PD 0 .IP \fB\-mabi=o64\fR 4 .IX Item "-mabi=o64" .IP \fB\-mabi=n32\fR 4 .IX Item "-mabi=n32" .IP \fB\-mabi=64\fR 4 .IX Item "-mabi=64" .IP \fB\-mabi=eabi\fR 4 .IX Item "-mabi=eabi" .PD تولید کد برای ABI مشخص‌شده. .Sp توجه داشته باشید که EABI دارای گونه‌های ۳۲ بیتی و ۶۴ بیتی است. معمولاً زمانی که یک معماری ۶۴ بیتی را انتخاب می‌کنید، GCC کد ۶۴ بیتی تولید می‌کند، اما می‌توانید با استفاده از \fB\-mgp32\fR به‌جای آن کد ۳۲ بیتی دریافت کنید. .Sp برای اطلاعات بیشتر دربارهٔ O64 ABI، ببینید: <\fBhttps://gcc.gnu.org/projects/mipso64\-abi.html\fR>. .Sp کامپایلر GCC از گونه‌ای از o32 ABI پشتیبانی می‌کند که در آن پهنای ثبات‌های ممیز شناور به‌جای ۳۲ بیت، ۶۴ بیت است. می‌توانید این ترکیب را با \&\fB\-mabi=32\fR \fB\-mfp64\fR انتخاب کنید. این ABI به دستورالعمل‌های \f(CW\*(C`mthc1\*(C'\fR و \f(CW\*(C`mfhc1\*(C'\fR وابسته است و به همین دلیل تنها برای پردازنده‌های MIPS32R2، MIPS32R3 و MIPS32R5 پشتیبانی می‌شود. .Sp تخصیص ثبات‌ها برای آرگومان‌ها و مقادیر بازگشتی یکسان باقی می‌ماند، اما هر مقدار اسکالر به‌جای یک جفت ثبات ۳۲ بیتی، درون یک ثبات منفرد ۶۴ بیتی ارسال می‌شود. برای مثال، مقادیر ممیز شناور اسکالر فقط در \fR\f(CB$f0\fR\fB\fR بازگردانده می‌شوند، نه در یک جفت \&\fB\fR\f(CB$f0\fR\fB\fR/\fB\fR\f(CB$f1\fR\fB\fR. مجموعهٔ ثبات‌های نگهداری‌شده هنگام فراخوانی (call\-saved) نیز از این حیث که ثبات‌های با دقت مضاعفِ شماره‌زوج ذخیره می‌شوند، بدون تغییر باقی می‌ماند. .Sp دو گونهٔ دیگر از o32 ABI نیز برای گذار آسان‌تر از ثبات‌های ۳۲ بیتی به ۶۴ بیتی پشتیبانی می‌شوند. این‌ها FPXX (\fB\-mfpxx\fR) و FP64A (\fB\-mfp64\fR \fB\-mno\-odd\-spreg\fR) هستند. افزونهٔ FPXX الزام می‌کند که تمام کدها هنگام اجرا با ثبات‌های ۳۲ بیتی یا ۶۴ بیتی، به‌درستی کار کنند. این کد می‌تواند با FP32 یا با FP64 پیوند بخورد، اما نه با هر دو. افزونهٔ FP64A مشابه افزونهٔ FP64 است اما استفاده از ثبات‌های با دقت یگانه و شماره‌فرد را منع می‌کند. این ویژگی را می‌توان در کنار حالت \f(CW\*(C`FRE\*(C'\fR متعلق به FPU در پردازنده‌های MIPS32R5 به کار برد؛ در نتیجه کدهای FP32 و FP64A می‌توانند بدون نیاز به تغییر حالت FPU در یک پردازش مشترک پیوند خورده و اجرا شوند. .IP \fB\-mabicalls\fR 4 .IX Item "-mabicalls" .PD 0 .IP \fB\-mno\-abicalls\fR 4 .IX Item "-mno-abicalls" .PD تولید (عدم تولید) کدی که برای اشیاء پویای سبک SVR4 مناسب باشد. گزینهٔ \fB\-mabicalls\fR حالت پیش‌فرض برای سیستم‌های مبتنی بر SVR4 است. .IP \fB\-mshared\fR 4 .IX Item "-mshared" .PD 0 .IP \fB\-mno\-shared\fR 4 .IX Item "-mno-shared" .PD تولید (عدم تولید) کدی که کاملاً مستقل از موقعیت (position\-independent) است، و در نتیجه می‌تواند درون کتابخانه‌های اشتراکی پیوند داده شود. این گزینه فقط بر \fB\-mabicalls\fR تأثیر می‌گذارد. .Sp تمامی کدهای \fB\-mabicalls\fR به‌صورت سنتی، بدون در نظر گرفتن گزینه‌هایی مانند \fB\-fPIC\fR و \fB\-fpic\fR، همیشه مستقل از موقعیت بوده‌اند. با این حال، زنجیره ابزار GNU به‌عنوان یک افزونه به فایل‌های اجرایی اجازه می‌دهد برای نمادهایی با پیوند محلی از دسترسی‌های مطلق استفاده کنند. همچنین می‌تواند از دنباله‌های مقداردهی اولیهٔ کوتاه‌تر برای GP استفاده کرده و فراخوانی‌های مستقیم به توابع تعریف‌شده به‌صورت محلی ایجاد کند. این حالت توسط \fB\-mno\-shared\fR انتخاب می‌شود. .Sp گزینهٔ \&\fB\-mno\-shared\fR به binutils نسخهٔ 2.16 یا بالاتر وابسته است و اشیایی تولید می‌کند که فقط توسط پیونددهندهٔ GNU می‌توانند پیوند داده شوند. با این حال، این گزینه بر ABI فایل اجرایی نهایی تأثیری ندارد؛ بلکه تنها بر ABI اشیاء جابه‌جایی‌پذیر (relocatable) مؤثر است. استفاده از \fB\-mno\-shared\fR به‌طور کلی باعث می‌شود فایل‌های اجرایی هم کوچک‌تر و هم سریع‌تر شوند. .Sp گزینهٔ \&\fB\-mshared\fR حالت پیش‌فرض است. .IP \fB\-mplt\fR 4 .IX Item "-mplt" .PD 0 .IP \fB\-mno\-plt\fR 4 .IX Item "-mno-plt" .PD فرض کردن (فرض نکردن) اینکه پیونددهنده‌های ایستا و پویا از PLTها و بازآرایی‌های رونوشت (copy relocations) پشتیبانی می‌کنند. این گزینه فقط بر \&\fB\-mno\-shared \-mabicalls\fR اثر می‌گذارد. برای n64 ABI، این گزینه بدون \fB\-msym32\fR هیچ تأثیری ندارد. .Sp می‌توانید با پیکربندی اولیهٔ GCC با آرگومان \fB\-\-with\-mips\-plt\fR، گزینهٔ \fB\-mplt\fR را پیش‌فرض کنید. در غیر این صورت، حالت پیش‌فرض \&\fB\-mno\-plt\fR خواهد بود. .IP \fB\-mxgot\fR 4 .IX Item "-mxgot" .PD 0 .IP \fB\-mno\-xgot\fR 4 .IX Item "-mno-xgot" .PD برداشتن (برنداشتن) محدودیت‌های معمول روی اندازهٔ جدول آفست سراسری (GOT). .Sp کامپایلر GCC معمولاً از یک دستورالعمل برای بارگذاری مقادیر از GOT استفاده می‌کند. هرچند این کار نسبتاً بهینه‌تر است، اما فقط در صورتی جواب می‌دهد که اندازهٔ GOT از حدود 64k کمتر باشد. هر مقداری بزرگ‌تر از آن باعث می‌شود پیونددهنده خطایی مانند زیر گزارش دهد: .Sp .Vb 1 \& relocation truncated to fit: R_MIPS_GOT16 foobar .Ve .Sp اگر این حالت رخ داد، باید کد خود را با \fB\-mxgot\fR بازکامپایل کنید. این گزینه با GOTهای بسیار بزرگ کار می‌کند، اگرچه خروجی کد کارایی کمتری خواهد داشت چرا که فراخوانی مقدار یک نماد سراسری مستلزم سه دستورالعمل خواهد بود. .Sp توجه داشته باشید که برخی پیونددهنده‌ها می‌توانند چندین GOT ایجاد کنند. اگر از چنین پیونددهنده‌ای استفاده می‌کنید، تنها زمانی نیاز به استفاده از \fB\-mxgot\fR خواهید داشت که یک فایل شیء منفرد به بیش از مقادیر 64k ورودی GOT دسترسی پیدا کند، که این مورد بسیار نادر است. .Sp این گزینه‌ها هیچ اثری ندارند مگر اینکه GCC در حال تولید کد مستقل از موقعیت باشد..IP \fB\-mgp32\fR 4 .IX Item "-mgp32" فرض می‌کند که پهنای ثبات‌های همه‌منظوره ۳۲ بیت است. .IP \fB\-mgp64\fR 4 .IX Item "-mgp64" فرض می‌کند که پهنای ثبات‌های همه‌منظوره ۶۴ بیت است. .IP \fB\-mfp32\fR 4 .IX Item "-mfp32" فرض می‌کند که پهنای ثبات‌های ممیز شناور ۳۲ بیت است. .IP \fB\-mfp64\fR 4 .IX Item "-mfp64" فرض می‌کند که پهنای ثبات‌های ممیز شناور ۶۴ بیت است. .IP \fB\-mfpxx\fR 4 .IX Item "-mfpxx" هیچ فرضی دربارهٔ پهنای ثبات‌های ممیز شناور در نظر نمی‌گیرد. .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" از دستورالعمل‌های کمک‌پردازندهٔ ممیز شناور استفاده می‌کند. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" از دستورالعمل‌های کمک‌پردازندهٔ ممیز شناور استفاده نمی‌کند. در عوض محاسبات ممیز شناور را با استفاده از فراخوانی‌های کتابخانه‌ای پیاده‌سازی می‌کند. .IP \fB\-mno\-float\fR 4 .IX Item "-mno-float" معادل با \fB\-msoft\-float\fR است، اما علاوه‌بر آن تأیید می‌کند که برنامهٔ در حال کامپایل هیچ عملیات ممیز شناوری را انجام نمی‌دهد. این گزینه در حال حاضر تنها توسط برخی از پیکربندی‌های MIPS سخت‌افزارِ خام (bare\-metal) پشتیبانی می‌شود، جایی که ممکن است مجموعهٔ خاصی از کتابخانه‌ها را انتخاب کند که فاقد هرگونه پشتیبانی از ممیز شناور هستند (برای مثال، شامل قالب‌های ممیز شناورِ \f(CW\*(C`printf\*(C'\fR). اگر کدی که با \fB\-mno\-float\fR کامپایل شده است تصادفاً حاوی عملیات ممیز شناور باشد، احتمالاً با شکست در زمان پیوند یا زمان اجرا مواجه خواهد شد. .IP \fB\-msingle\-float\fR 4 .IX Item "-msingle-float" فرض می‌کند که کمک‌پردازندهٔ ممیز شناور تنها از عملیات با دقت یگانه (single\-precision) پشتیبانی می‌کند. .IP \fB\-mdouble\-float\fR 4 .IX Item "-mdouble-float" فرض می‌کند که کمک‌پردازندهٔ ممیز شناور از عملیات با دقت دوگانه (double\-precision) پشتیبانی می‌کند. این مقدار پیش‌فرض است. .IP \fB\-modd\-spreg\fR 4 .IX Item "-modd-spreg" .PD 0 .IP \fB\-mno\-odd\-spreg\fR 4 .IX Item "-mno-odd-spreg" .PD استفاده از ثبات‌های ممیز شناورِ دقت یگانه با شماره‌های فرد را برای o32 ABI فعال می‌کند. این مقدار پیش‌فرض برای پردازنده‌هایی است که مشخص شده است از این ثبات‌ها پشتیبانی می‌کنند. هنگام استفاده از o32 FPXX ABI، گزینهٔ \fB\-mno\-odd\-spreg\fR به‌طور پیش‌فرض تنظیم می‌شود. .IP \fB\-mabs=2008\fR 4 .IX Item "-mabs=2008" .PD 0 .IP \fB\-mabs=legacy\fR 4 .IX Item "-mabs=legacy" .PD این گزینه‌ها رفتار با داده‌های ویژهٔ ناعَدَد (NaN) ممیز شناور IEEE 754 را با دستورالعمل‌های ماشین \f(CW\*(C`abs.\fR\f(CIfmt\fR\f(CW\*(C'\fR و \&\f(CW\*(C`neg.\fR\f(CIfmt\fR\f(CW\*(C'\fR کنترل می‌کنند. .Sp به‌طور پیش‌فرض یا هنگامی که از \fB\-mabs=legacy\fR استفاده می‌شود، رفتار موروثی (legacy) انتخاب می‌شود. در این حالت این دستورالعمل‌ها حسابی در نظر گرفته می‌شوند و در جاهایی که عملکرد صحیح لازم است و ممکن است عملوند ورودی NaN باشد از آن‌ها اجتناب می‌شود. در عوض توالی طولانی‌تری از دستورالعمل‌ها که بیت علامت دادهٔ ممیز شناور را به‌صورت دستی دستکاری می‌کنند استفاده می‌شود، مگر اینکه گزینهٔ \fB\-ffinite\-math\-only\fR نیز مشخص شده باشد. .Sp گزینهٔ \fB\-mabs=2008\fR رفتار IEEE 754\-2008 را انتخاب می‌کند. در این حالت این دستورالعمل‌ها غیرحسابی در نظر گرفته می‌شوند و بنابراین در تمام موارد، از جمله به‌ویژه زمانی که عملوند ورودی NaN است، به‌درستی عمل می‌کنند. در نتیجه این دستورالعمل‌ها همیشه برای عملیات مربوطه استفاده می‌شوند. .IP \fB\-mnan=2008\fR 4 .IX Item "-mnan=2008" .PD 0 .IP \fB\-mnan=legacy\fR 4 .IX Item "-mnan=legacy" .PD این گزینه‌ها کدگذاری داده‌های ویژهٔ ناعَدَد (NaN) ممیز شناور IEEE 754 را کنترل می‌کنند. .Sp گزینهٔ \fB\-mnan=legacy\fR کدگذاری موروثی (legacy) را انتخاب می‌کند. در این حالت NaNهای ساکت (qNaNs) با ۰ بودن بیت اول میدان بخش معنادار انتهایی‌شان نشان داده می‌شوند، در حالی که 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 استفاده کردن (استفاده نکردن) از دستورالعمل‌های \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. .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 (VZ)..IP \fB\-mxpa\fR 4 .IX Item "-mxpa" .PD 0 .IP \fB\-mno\-xpa\fR 4 .IX Item "-mno-xpa" .PD استفاده (یا عدم استفاده) از دستورالعمل‌های نشانی فیزیکی گسترش‌یافتهٔ MIPS (کوته‌نوشت XPA). .IP \fB\-mcrc\fR 4 .IX Item "-mcrc" .PD 0 .IP \fB\-mno\-crc\fR 4 .IX Item "-mno-crc" .PD استفاده (یا عدم استفاده) از دستورالعمل‌های بررسی افزونگی چرخه‌ای MIPS (کوته‌نوشت CRC). .IP \fB\-mginv\fR 4 .IX Item "-mginv" .PD 0 .IP \fB\-mno\-ginv\fR 4 .IX Item "-mno-ginv" .PD استفاده (یا عدم استفاده) از دستورالعمل‌های ابطال سراسری MIPS (کوته‌نوشت 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 (کوته‌نوشت 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 (کوته‌نوشت 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 (کوته‌نوشت 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" قرار دادن تعاریف داده‌های قابل مشاهده از خارج در یک بخش داده‌های کوچک (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 به داده‌های محلی نیز، مانند متغیرهای \f(CWstatic\fR در C. گزینهٔ \fB\-mlocal\-sdata\fR برای تمامی پیکربندی‌ها حالت پیش‌فرض است. .Sp اگر پیونددهنده ایراد گرفت که یک برنامه بیش از حد از داده‌های کوچک استفاده می‌کند، می‌توانید بازسازی بخش‌هایی را که از نظر کارایی کمتر حیاتی هستند با \&\fB\-mno\-local\-sdata\fR امتحان کنید. همچنین ممکن است بخواهید کتابخانه‌های بزرگ را با \fB\-mno\-local\-sdata\fR بسازید تا کتابخانه‌ها فضای بیشتری برای برنامهٔ اصلی باقی بگذارند. .IP \fB\-mextern\-sdata\fR 4 .IX Item "-mextern-sdata" .PD 0 .IP \fB\-mno\-extern\-sdata\fR 4 .IX Item "-mno-extern-sdata" .PD فرض کردن (یا فرض نکردن) این که داده‌های تعریف‌شده در خارج در بخش داده‌های کوچک قرار دارند، در صورتی که اندازهٔ آن داده در محدودهٔ \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\*(Aqs متصل نمایید. اگر \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 برای نمادهایی که مشخص است در بخش داده‌های کوچک قرار دارند؛ گزینه‌های \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-relative) در MIPS16 می‌توانند به بخش‌های اجرایی دسترسی داشته باشند، اما سایر دستورالعمل‌ها نباید چنین کنند. این گزینه روی پردازنده‌های 4KSc و 4KSd، زمانی که بیت Read Inhibit در TLBهای کد تنظیم شده است، مفید خواهد بود. همچنین روی پردازنده‌هایی که می‌توان آن‌ها را برای داشتن رابط دوگانهٔ دستورالعمل/داده SRAM پیکربندی کرد و مانند M4K بارگذاری‌های PC-relative را به‌طور خودکار به RAM دستورالعمل هدایت می‌کنند، کاربرد دارد. .IP \fB\-mcode\-readable=no\fR 4 .IX Item "-mcode-readable=no" دستورالعمل‌ها نباید به بخش‌های اجرایی دسترسی داشته باشند. این گزینه می‌تواند در مقاصدی مفید باشد که برای داشتن رابط دوگانهٔ دستورالعمل/داده SRAM پیکربندی شده‌اند اما (برخلاف M4K) بارگذاری‌های PC-relative را به‌طور خودکار به 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 در سال ۲۰۱۴ به GAS معرفی شد که از \f(CW%pcrel_hi\fR و \f(CW%pcrel_lo\fR پشتیبانی می‌کند..IP \fB\-mcheck\-zero\-division\fR 4 .IX Item "-mcheck-zero-division" .PD 0 .IP \fB\-mno\-check\-zero\-division\fR 4 .IX Item "-mno-check-zero-division" .PD ایجاد تله (عدم ایجاد تله) هنگام تقسیم عدد صحیح بر صفر. .Sp پیش‌فرض \fB\-mcheck\-zero\-division\fR است. .IP \fB\-mdivide\-traps\fR 4 .IX Item "-mdivide-traps" .PD 0 .IP \fB\-mdivide\-breaks\fR 4 .IX Item "-mdivide-breaks" .PD سامانه‌های MIPS تقسیم بر صفر را با تولید یک تلهٔ شرطی یا یک دستورالعمل break بررسی می‌کنند. استفاده از تله‌ها به تولید کد کوچک‌تر می‌انجامد، اما تنها در MIPS II و نسخه‌های پس از آن پشتیبانی می‌شود. همچنین برخی از نسخه‌های هستهٔ لینوکس دارای اشکالی هستند که مانع از تولید سیگنال مناسب (\f(CW\*(C`SIGFPE\*(C'\fR) توسط تله می‌شود. از \fB\-mdivide\-traps\fR برای مجاز ساختن تله‌های شرطی روی معماری‌هایی که از آن‌ها پشتیبانی می‌کنند و از \&\fB\-mdivide\-breaks\fR برای اجبار به استفاده از break استفاده کنید. .Sp پیش‌فرض معمولاً \fB\-mdivide\-traps\fR است، اما می‌توان این مقدار را در زمان پیکربندی با استفاده از \fB\-\-with\-divide=breaks\fR بازنویسی کرد. بررسی‌های تقسیم بر صفر را می‌توان با استفاده از \&\fB\-mno\-check\-zero\-division\fR به‌طور کامل غیرفعال کرد. .IP \fB\-mload\-store\-pairs\fR 4 .IX Item "-mload-store-pairs" .PD 0 .IP \fB\-mno\-load\-store\-pairs\fR 4 .IX Item "-mno-load-store-pairs" .PD فعال (غیرفعال) کردن بهینه‌سازی‌ای که دستورالعمل‌های متوالی بارگذاری (load) یا ذخیره‌سازی (store) را جفت می‌کند تا پیوند بارگذاری/ذخیره‌سازی (load/store bonding) فعال شود. این گزینه به‌طور پیش‌فرض فعال است، اما تنها زمانی اعمال می‌شود که مشخص باشد معماری انتخاب‌شده از پیوند (bonding) پشتیبانی می‌کند. .IP \fB\-mstrict\-align\fR 4 .IX Item "-mstrict-align" .PD 0 .IP \fB\-mno\-strict\-align\fR 4 .IX Item "-mno-strict-align" .IP \fB\-munaligned\-access\fR 4 .IX Item "-munaligned-access" .IP \fB\-mno\-unaligned\-access\fR 4 .IX Item "-mno-unaligned-access" .PD غیرفعال (فعال) کردن دسترسی مستقیم غیرهم‌تراز (unaligned access) برای MIPS Release 6. معماری MIPSr6 نیازمند پشتیبانی از دسترسی غیرهم‌تراز برای load/store، به‌صورت سخت‌افزاری یا تله و شبیه‌سازی (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 فعال (غیرفعال) کردن استفاده از دستورالعمل‌های ضرب\-جمع ممیز شناور (floating\-point multiply\-accumulate)، در صورت در دسترس بودن آن‌ها. پیش‌فرض \&\fB\-mfused\-madd\fR است. .Sp در پردازندهٔ R8000 هنگامی که از دستورالعمل‌های multiply\-accumulate استفاده می‌شود، حاصل‌ضرب میانی با دقت بی‌نهایت محاسبه شده و مشمول بیت Flush to Zero در FCSR نمی‌شود. این موضوع ممکن است در برخی شرایط نامطلوب باشد. در سایر پردازنده‌ها، نتیجه از نظر عددی با محاسبهٔ معادل با استفاده از دستورالعمل‌های مجزای ضرب، جمع، تفریق و منفی‌سازی (negate) یکسان است. .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 یک شیفت (انتقال) دوکلمه‌ای یا متغیر اگر بلافاصله پس از شروع تقسیم عدد صحیح اجرا شود، ممکن است نتیجهٔ نادرستی بدهد. .IP \- 4 یک شیفت دوکلمه‌ای یا متغیر اگر در حین انجام ضرب عدد صحیح اجرا شود، ممکن است نتیجهٔ نادرستی بدهد. .IP \- 4 یک تقسیم عدد صحیح اگر در شکاف تأخیر (delay slot) یک انشعاب محقق‌شده یا یک پرش آغاز شود، ممکن است نتیجهٔ نادرستی بدهد. .RE .RS 4 .RE .IP \fB\-mfix\-r4400\fR 4 .IX Item "-mfix-r4400" .PD 0 .IP \fB\-mno\-fix\-r4400\fR 4 .IX Item "-mno-fix-r4400" .PD دور زدن برخی از خطاهای سخت‌افزاری پردازندهٔ R4400: .RS 4 .IP \- 4 یک شیفت دوکلمه‌ای یا متغیر اگر بلافاصله پس از شروع تقسیم عدد صحیح اجرا شود، ممکن است نتیجهٔ نادرستی بدهد. .RE .RS 4 .RE .IP \fB\-mfix\-r10000\fR 4 .IX Item "-mfix-r10000" .PD 0 .IP \fB\-mno\-fix\-r10000\fR 4 .IX Item "-mno-fix-r10000" .PD دور زدن برخی از خطاهای سخت‌افزاری R10000: .RS 4 .IP \- 4 دنباله‌های \&\f(CW\*(C`ll\*(C'\fR/\f(CW\*(C`sc\*(C'\fR ممکن است در بازبینی‌های پیش از 3.0 رفتار اتمی نداشته باشند. آن‌ها ممکن است در بازبینی‌های 2.6 و قدیمی‌تر دچار بن‌بست (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 تلاشی برای زمان‌بندی دستورالعمل پیشین در شکاف تأخیر یک دستور انشعاب واقع در انتهای یک حلقهٔ کوتاه با شش دستورالعمل یا کمتر صورت نگیرد و همواره به‌جای آن یک دستورالعمل \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 باید حائل‌های حافظه پنهان (cache barriers) را برای جلوگیری از اثرات جانبی اجرای حدسی (speculation) در پردازنده‌های R10K درج کند یا خیر. .Sp مشابه بسیاری از پردازنده‌ها، R10K تلاش می‌کند نتیجه یک انشعاب شرطی را پیش‌بینی کرده و دستورات شاخه پیش‌بینی‌شده را به‌صورت حدسی اجرا کند. اگر پیش‌بینی اشتباه باشد، بعداً این دستورات را لغو می‌کند. با این حال، در R10K حتی دستورات لغوشده نیز می‌توانند اثرات جانبی داشته باشند. .Sp این مشکل فقط بر عملیات‌های ذخیره‌سازی هسته و بسته به سامانه، بر عملیات‌های بارگذاری هسته اثر می‌گذارد. به عنوان مثال، یک ذخیره‌سازی که به‌صورت حدسی اجرا شده است، ممکن است حافظه هدف را در حافظه پنهان بارگذاری کرده و سطر حافظه پنهان را به عنوان کثیف (dirty) علامت‌گذاری کند، حتی اگر خود عملیات ذخیره‌سازی بعداً لغو شود. اگر پیش از تخلیه سطر «dirty»، یک عملیات DMA روی همان بخش از حافظه بنویسد، داده‌های درون حافظه پنهان، داده‌های نوشته‌شده توسط DMA را بازنویسی و تخریب می‌کنند. برای توضیحات کامل‌تر و سایر مشکلات احتمالی، به دفترچه راهنمای پردازنده R10K مراجعه کنید. .Sp یک راهکار، درج دستورات حائل حافظه پنهان پیش از هر دسترسی به حافظه است که ممکن است به‌صورت حدسی اجرا شود و حتی در صورت لغو شدن اثرات جانبی داشته باشد. گزینه \fB\-mr10k\-cache\-barrier=\fR\fIsetting\fR نحوه پیاده‌سازی این راهکار توسط GCC را کنترل می‌کند. این گزینه فرض می‌کند دسترسی‌های لغوشده به هر بایتی در نواحی زیر فاقد اثر جانبی است: .RS 4 .IP 1. 4 .IX Item "1." حافظه اشغال‌شده توسط چارچوب پشته تابع فعلی؛ .IP 2. 4 .IX Item "2." حافظه اشغال‌شده توسط آرگومان ورودی پشته؛ .IP 3. 4 .IX Item "3." حافظه اشغال‌شده توسط شیئی با آدرس ثابت در زمان پیوند. .RE .RS 4 .Sp اطمینان از ایمن بودن دسترسی‌های حدسی به این نواحی، بر عهده هسته سیستم‌عامل است. .Sp اگر برنامه ورودی حاوی اعلانی برای تابعی مانند نمونه زیر باشد: .Sp .Vb 1 \& void foo (void); .Ve .Sp آنگاه پیاده‌سازی \f(CW\*(C`foo\*(C'\fR باید امکان اجرای حدسی \f(CW\*(C`j foo\*(C'\fR و \&\f(CW\*(C`jal foo\*(C'\fR را فراهم سازد. GCC این محدودیت را برای توابعی که خودش کامپایل می‌کند رعایت می‌نماید، و انتظار دارد توابع غیر GCC (مانند کدهای اسمبلی دست‌نویس) نیز همین کار را انجام دهند. .Sp این گزینه دارای سه حالت است: .IP \fB\-mr10k\-cache\-barrier=load\-store\fR 4 .IX Item "-mr10k-cache-barrier=load-store" درج یک حائل حافظه پنهان پیش از هر بارگذاری یا ذخیره‌سازی که ممکن است به‌صورت حدسی اجرا شود و حتی در صورت لغو شدن اثرات جانبی داشته باشد. .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 تابعی را مشخص می‌کند که برای تخلیه حافظه‌های پنهان 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 دستورالعمل «ساده» تنظیم می‌کند. این هزینه صرفاً یک تقریب است و تضمینی برای ایجاد نتایج یکسان در نسخه‌های مختلف وجود ندارد. هزینه صفر، مقدار پیش‌فرض را که بر پایه تنظیمات \fB\-mtune\fR است انتخاب می‌کند. .IP \fB\-mbranch\-likely\fR 4 .IX Item "-mbranch-likely" .PD 0 .IP \fB\-mno\-branch\-likely\fR 4 .IX Item "-mno-branch-likely" .PD استفاده از دستورالعمل‌های Branch Likely را بدون در نظر گرفتن مقدار پیش‌فرض برای معماری انتخاب‌شده، فعال یا غیرفعال می‌کند. به‌طور پیش‌فرض، اگر دستورالعمل‌های Branch Likely توسط معماری انتخاب‌شده پشتیبانی شوند ممکن است تولید گردند. یک استثنا برای معماری‌های MIPS32 و MIPS64 و پردازنده‌های پیاده‌کننده این معماری‌ها است؛ برای آن‌ها، دستورات Branch Likely به‌طور پیش‌فرض تولید نمی‌شوند، چرا که معماری‌های MIPS32 و MIPS64 صراحتاً استفاده از آن‌ها را منسوخ کرده‌اند. .IP \fB\-mcompact\-branches=never\fR 4 .IX Item "-mcompact-branches=never" .PD 0 .IP \fB\-mcompact\-branches=optimal\fR 4 .IX Item "-mcompact-branches=optimal" .IP \fB\-mcompact\-branches=always\fR 4 .IX Item "-mcompact-branches=always" .PD این گزینه‌ها شکل انشعاب‌های تولیدی را کنترل می‌کنند. مقدار پیش‌فرض \fB\-mcompact\-branches=optimal\fR است. .Sp گزینه \fB\-mcompact\-branches=never\fR تضمین می‌کند که دستورات انشعاب فشرده هرگز تولید نخواهند شد. .Sp گزینه \fB\-mcompact\-branches=always\fR اطمینان حاصل می‌کند که برای نسخه ۶ معماری MIPS به بعد، در صورت در دسترس بودن، دستور انشعاب فشرده تولید شود. اگر دستور انشعاب فشرده در دسترس نباشد (یا در نسخه‌های پیش از 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 غیرفعال باشند و در حال تولید کد ۶۴ بیتی باشیم، می‌توانیم از هر دو خط‌لوله FP استفاده کنیم. در غیر این صورت، تنها می‌توان از یک خط‌لوله 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 از نوع سوپراسکالر دوخطه است، اما تنها در صورتی می‌تواند دو دستور را هم‌زمان صادر کند که دستور اول با ۸ بایت هم‌تراز شده باشد. هنگامی که این گزینه فعال باشد، 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 ارسال می‌شوند، به فراخوانی‌های مستقیم تبدیل کند. این کار تنها در صورتی امکان‌پذیر است که پیونددهنده (linker) بتواند مقصد را در زمان پیوند حل‌وفصل کند و مقصد در محدودهٔ مجاز برای یک فراخوانی مستقیم باشد. .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) در o32 ABI. هنگام استفاده از o32 ABI، توابع فراخواننده ۱۶ بایت را در پشته تخصیص می‌دهند تا تابع فراخوانده‌شده آرگومان‌های ثبات را در آن بنویسد. در صورت فعال بودن، اگر مشخص شود که این سرآیند فریم بی‌استفاده است، این بهینه‌سازی از تخصیص آن جلوگیری می‌کند. .Sp این بهینه‌سازی به‌طور پیش‌فرض در تمام سطوح بهینه‌سازی غیرفعال است. .IP \fB\-mlxc1\-sxc1\fR 4 .IX Item "-mlxc1-sxc1" .PD 0 .IP \fB\-mno\-lxc1\-sxc1\fR 4 .IX Item "-mno-lxc1-sxc1" .PD در صورت امکان‌پذیر بودن، تولید دستورالعمل‌های \f(CW\*(C`lwxc1\*(C'\fR، \&\f(CW\*(C`swxc1\*(C'\fR، \f(CW\*(C`ldxc1\*(C'\fR و \f(CW\*(C`sdxc1\*(C'\fR را فعال (غیرفعال) می‌کند. به‌طور پیش‌فرض فعال است. .IP \fB\-mmadd4\fR 4 .IX Item "-mmadd4" .PD 0 .IP \fB\-mno\-madd4\fR 4 .IX Item "-mno-madd4" .PD در صورت امکان‌پذیر بودن، تولید دستورالعمل‌های ۴ عملوندی \f(CW\*(C`madd.s\*(C'\fR، \&\f(CW\*(C`madd.d\*(C'\fR و دستورالعمل‌های مرتبط را فعال (غیرفعال) می‌کند. به‌طور پیش‌فرض فعال است. .PP \fIگزینه‌های MMIX\fR .IX Subsection "MMIX Options" .PP این گزینه‌ها برای معماری MMIX تعریف شده‌اند: .IP \fB\-mlibfuncs\fR 4 .IX Item "-mlibfuncs" .PD 0 .IP \fB\-mno\-libfuncs\fR 4 .IX Item "-mno-libfuncs" .PD مشخص می‌کند که توابع درونی کتابخانه (intrinsic) در حال کامپایل هستند، و تمام مقادیر بدون توجه به اندازه‌شان در ثبات‌ها ارسال می‌شوند. .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 هنگام خواندن داده‌ها از حافظه با اندازه‌های کوتاه‌تر از ۶۴ بیت، به‌طور پیش‌فرض از دستورالعمل‌های بارگذاری گسترش با صفر (zero-extending) به جای گسترش با علامت (sign-extending) استفاده می‌کند (یا نمی‌کند). .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 هنگامی که پیش‌بینی ایستا برای انشعاب (static branch prediction) یک انشعاب محتمل را نشان می‌دهد، از دستورالعمل‌های انشعاب محتمل (probable-branch) استفاده می‌کند (یا نمی‌کند). .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آدرس‌های پایه (base addresses)\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 بازگردانده می‌شود، و تلاش برای فراخوانی چنین توابعی بدون پیش‌نمونه (prototype) منجر به بروز خطا خواهد شد. توجه داشته باشید که این گزینه به‌طور پیش‌فرض فعال است؛ برای غیرفعال کردن آن از \&\fB\-mno\-return\-pointer\-on\-d0\fR استفاده کنید. .IP \fB\-mno\-crt0\fR 4 .IX Item "-mno-crt0" فایل شیءِ مقداردهی اولیهٔ زمان اجرای C را پیوند نمی‌دهد..IP \fB\-mrelax\fR 4 .IX Item "-mrelax" به پیونددهنده اعلام می‌کند که باید یک مرحله بهینه‌سازی آزادسازی (relaxation) را برای کوتاه‌تر کردن انشعاب‌ها، فراخوانی‌ها و آدرس‌های حافظهٔ مطلق انجام دهد. این گزینه تنها زمانی تأثیر دارد که در خط فرمان برای مرحلهٔ نهایی پیوند استفاده شود. .Sp این گزینه اشکال‌زدایی نمادین را غیرممکن می‌کند. .IP \fB\-mliw\fR 4 .IX Item "-mliw" در صورتی که هدف \fBAM33\fR یا جدیدتر باشد، به کامپایلر اجازه می‌دهد دستورالعمل‌های \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 را پیوند نزن. .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 از مواردی باشد که منحصراً از ISA 430 پشتیبانی می‌کند، همان انتخاب می‌شود، در غیر این صورت ISA 430X انتخاب خواهد شد. نام عمومی MCU با عنوان \fBmsp430\fR نیز می‌تواند برای انتخاب ISA 430 استفاده شود. به طور مشابه، نام عمومی MCU به صورت \fBmsp430x\fR معماری ISA 430X را انتخاب می‌کند. .Sp علاوه بر این، یک اسکریپت پیونددهندهٔ ویژهٔ MCU به خط فرمان پیونددهنده اضافه می‌شود. نام اسکریپت، نام MCU به همراه پسوند \&\fI.ld\fR است. بدین ترتیب تعیین \fB\-mmcu=xxx\fR در خط فرمان \fBgcc\fR نماد پیش‌پردازندهٔ C \f(CW\*(C`_\|_XXX_\|_\*(C'\fR را تعریف کرده و باعث می‌شود پیونددهنده به دنبال اسکریپتی به نام \fIxxx.ld\fR بگردد. .Sp پشتیبانی از ISA و ضرب سخت‌افزاری برای MCUهای گوناگون به صورت توکار (hard\-coded) در GCC تعبیه شده است. با این حال، می‌توان از یک فایل خارجی \fBdevices.csv\fR برای توسعهٔ پشتیبانی از دستگاه‌ها فراتر از موارد توکار استفاده کرد. .Sp کامپایلر GCC با استفاده از روش‌های زیر و به ترتیب اولویت به دنبال فایل \fBdevices.csv\fR می‌گردد؛ به این صورت که روش اول بر روش دوم و روش دوم بر روش سوم اولویت دارد. .RS 4 .ie n .IP "مسیر include مشخص‌شده با ""\-I"" و ""\-L""" 4 .el .IP "مسیر include مشخص‌شده با \f(CW\-I\fR و \f(CW\-L\fR" 4 .IX Item "Include 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" استفاده از یک محیط زمان اجرای حداقلی را فعال می‌کند \- بدون مقداردهنده‌های اولیه یا سازنده‌های (constructors) ایستا. این گزینه برای دستگاه‌های با محدودیت شدید حافظه در نظر گرفته شده است. کامپایلر نمادهای ویژه‌ای را در برخی اشیاء قرار می‌دهد که به پیونددهنده و زمان اجرا اعلام می‌کنند کدام قطعه‌کدها مورد نیاز هستند. .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 این گزینه فقط مواردی را تحت تأثیر قرار می‌دهد که در آن‌ها شیفت با چندین موقعیت مختلف را نتوان با یک دستورالعمل واحد تکمیل کرد (به عنوان مثال، تمام شیفت‌های بزرگ‌تر از ۱ در ISA 430). .Sp شیفت‌های یک مقدار ۳۲ بیتی حداقل دو برابر هزینه‌بر هستند، بنابراین مقدار ارائه‌شده برای این گزینه بر ۲ تقسیم شده و مقدار حاصل به جای آن استفاده می‌شود. .IP \fB\-mcode\-region=\fR 4 .IX Item "-mcode-region=" .PD 0 .IP \fB\-mdata\-region=\fR 4 .IX Item "-mdata-region=" .PD این گزینه‌ها به کامپایلر مشخص می‌کنند توابع و داده‌هایی را که فاقد یکی از ویژگی‌های \f(CW\*(C`lower\*(C'\fR، \f(CW\*(C`upper\*(C'\fR، \f(CW\*(C`either\*(C'\fR یا \&\f(CW\*(C`section\*(C'\fR هستند در کجا قرار دهد. مقادیر مجاز عبارتند از \f(CW\*(C`lower\*(C'\fR، \&\f(CW\*(C`upper\*(C'\fR، \f(CW\*(C`either\*(C'\fR یا \f(CW\*(C`any\*(C'\fR. سه مقدار اول مانند ویژگی‌های متناظر خود عمل می‌کنند. مقدار چهارم \- \&\f(CW\*(C`any\*(C'\fR \- حالت پیش‌فرض است. این مقدار، تصمیم‌گیری دربارهٔ جای‌گذاری را به طور کامل به اسکریپت پیونددهنده و نحوهٔ تخصیص بخش‌های استاندارد (\f(CW\*(C`.text\*(C'\fR، \f(CW\*(C`.data\*(C'\fR و غیره) به نواحی حافظه واگذار می‌کند..IP \fB\-msilicon\-errata=\fR 4 .IX Item "-msilicon-errata=" این گزینه درخواستی را به اسمبلر ارسال می‌کند تا اصلاحات مربوط به نقص‌های سخت‌افزاری (silicon errata) نام‌برده را فعال کند. .IP \fB\-msilicon\-errata\-warn=\fR 4 .IX Item "-msilicon-errata-warn=" این گزینه درخواستی را به اسمبلر ارسال می‌کند تا پیام‌های هشدار را در مواردی که ممکن است نیاز به اعمال اصلاحات نقص سخت‌افزاری (silicon errata) باشد، فعال کند. .IP \fB\-mwarn\-devices\-csv\fR 4 .IX Item "-mwarn-devices-csv" .PD 0 .IP \fB\-mno\-warn\-devices\-csv\fR 4 .IX Item "-mno-warn-devices-csv" .PD در صورت پیدا نشدن \fBdevices.csv\fR یا وجود مشکل در تجزیه آن هشدار می‌دهد (پیش‌فرض: فعال). .PP \fIگزینه‌های NDS32\fR .IX Subsection "NDS32 Options" .PP این گزینه‌ها برای پیاده‌سازی‌های NDS32 تعریف شده‌اند: .IP \fB\-mbig\-endian\fR 4 .IX Item "-mbig-endian" تولید کد در حالت big\-endian. .IP \fB\-mlittle\-endian\fR 4 .IX Item "-mlittle-endian" تولید کد در حالت little\-endian. .IP \fB\-mreduced\-regs\fR 4 .IX Item "-mreduced-regs" استفاده از مجموعه ثبات‌های کاهش‌یافته برای تخصیص ثبات‌ها. .IP \fB\-mfull\-regs\fR 4 .IX Item "-mfull-regs" استفاده از مجموعه ثبات‌های کامل برای تخصیص ثبات‌ها. .IP \fB\-mcmov\fR 4 .IX Item "-mcmov" تولید دستورالعمل‌های انتقال شرطی (conditional move). .IP \fB\-mno\-cmov\fR 4 .IX Item "-mno-cmov" عدم تولید دستورالعمل‌های انتقال شرطی. .IP \fB\-mext\-perf\fR 4 .IX Item "-mext-perf" تولید دستورالعمل‌های افزونه کارایی (performance extension). .IP \fB\-mno\-ext\-perf\fR 4 .IX Item "-mno-ext-perf" عدم تولید دستورالعمل‌های افزونه کارایی. .IP \fB\-mext\-perf2\fR 4 .IX Item "-mext-perf2" تولید دستورالعمل‌های افزونه کارایی ۲ (performance extension 2). .IP \fB\-mno\-ext\-perf2\fR 4 .IX Item "-mno-ext-perf2" عدم تولید دستورالعمل‌های افزونه کارایی ۲. .IP \fB\-mext\-string\fR 4 .IX Item "-mext-string" تولید دستورالعمل‌های افزونه رشته (string extension). .IP \fB\-mno\-ext\-string\fR 4 .IX Item "-mno-ext-string" عدم تولید دستورالعمل‌های افزونه رشته. .IP \fB\-mv3push\fR 4 .IX Item "-mv3push" تولید دستورالعمل‌های push25/pop25 نگارش v3. .IP \fB\-mno\-v3push\fR 4 .IX Item "-mno-v3push" عدم تولید دستورالعمل‌های push25/pop25 نگارش v3. .IP \fB\-m16\-bit\fR 4 .IX Item "-m16-bit" تولید دستورالعمل‌های ۱۶ بیتی. .IP \fB\-mno\-16\-bit\fR 4 .IX Item "-mno-16-bit" عدم تولید دستورالعمل‌های ۱۶ بیتی. .IP \fB\-misr\-vector\-size=\fR\fInum\fR 4 .IX Item "-misr-vector-size=num" اندازه هر بردار وقفه (interrupt vector) را مشخص می‌کند که باید ۴ یا ۱۶ باشد. .IP \fB\-mcache\-block\-size=\fR\fInum\fR 4 .IX Item "-mcache-block-size=num" اندازه هر بلوک حافظه موقت (cache block) را مشخص می‌کند که باید توانی از ۲ بین ۴ تا ۵۱۲ باشد. .IP \fB\-march=\fR\fIarch\fR 4 .IX Item "-march=arch" نام معماری هدف را مشخص می‌کند. .IP \fB\-mcmodel=\fR\fIcode\-model\fR 4 .IX Item "-mcmodel=code-model" مدل کد را بر روی یکی از موارد زیر تنظیم می‌کند: .RS 4 .IP \fBsmall\fR 4 .IX Item "small" تمام بخش‌های داده (data) و داده‌های فقط‌خواندنی (read\-only data) باید در فضای آدرس‌دهی 512KB قرار گیرند. بخش کد (text) باید در فضای آدرس‌دهی 16MB باشد. .IP \fBmedium\fR 4 .IX Item "medium" بخش داده باید در 512KB قرار گیرد در حالی که بخش داده‌های فقط‌خواندنی می‌تواند در فضای آدرس‌دهی 4GB باشد. بخش کد همچنان باید در فضای آدرس‌دهی 16MB قرار داشته باشد. .IP \fBlarge\fR 4 .IX Item "large" تمام بخش‌های کد و داده می‌توانند در فضای آدرس‌دهی 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" هدایت پیونددهنده (linker) برای بهینه‌سازی و کاهش طول دستورالعمل‌ها (relax instructions). .PP \fIگزینه‌های Nvidia PTX\fR .IX Subsection "Nvidia PTX Options" .PP این گزینه‌ها برای Nvidia PTX تعریف شده‌اند: .IP \fB\-m64\fR 4 .IX Item "-m64" نادیده گرفته می‌شود، اما برای سازگاری رو به عقب حفظ شده است. تنها ABI شصت و چهار بیتی (64\-bit) پشتیبانی می‌شود. .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" کد مربوط به یک هسته (kernel) _\|_main را پیوند می‌دهد. این گزینه برای اجرای مستقل (stand\-alone) به جای برون‌سپاری محاسبات (offloading) به کار می‌رود. .IP \fB\-moptimize\fR 4 .IX Item "-moptimize" اعمال بهینه‌سازی‌های اجرای بخش‌بندی‌شده (partitioned execution). هنگام انتخاب هر سطحی از بهینه‌سازی، این حالت پیش‌فرض است. .IP \fB\-msoft\-stack\fR 4 .IX Item "-msoft-stack" .PD 0 .IP \fB\-mno\-soft\-stack\fR 4 .IX Item "-mno-soft-stack" .PD برای \fB\-mno\-soft\-stack\fR (حالت پیش‌فرض، مگر اینکه \fB\-mgomp\fR مشخص شده باشد)، از پشته‌های «بومی» (native) در PTX استفاده می‌شود؛ یعنی کدی تولید می‌شود که مستقیماً از حافظه \f(CW\*(C`.local\*(C'\fR یا \f(CW\*(C`alloca\*(C'\fR در PTX برای ذخیره‌سازی پشته استفاده می‌کند. مگر اینکه \fB\-mptx=7.3\fR یا بالاتر و \fB\-march=sm_52\fR یا بالاتر فعال باشند، آرایه‌های با طول متغیر (variable\-length arrays) و تخصیص پویای حافظه در پشته با \f(CW\*(C`alloca\*(C'\fR پشتیبانی نمی‌شوند. .Sp برای \fB\-msoft\-stack\fR (که توسط \fB\-mgomp\fR اعمال می‌شود)، کدی تولید می‌شود که مستقیماً از حافظه \f(CW\*(C`.local\*(C'\fR یا \f(CW\*(C`alloca\*(C'\fR در PTX برای ذخیره‌سازی پشته استفاده نمی‌کند. در عوض، یک اشاره‌گر پشته به ازای هر warp به طور صریح نگهداری می‌شود. این کار تخصیص متغیر پشته (با استفاده از آرایه‌های با طول متغیر یا \f(CW\*(C`alloca\*(C'\fR) را ممکن می‌سازد، و هنگامی که از حافظه سراسری (global memory) به عنوان فضای زیرین استفاده می‌شود، امکان دسترسی به متغیرهای خودکار (automatic variables) از طریق ریسمان‌های دیگر یا با دستورالعمل‌های اتمیک را فراهم می‌کند. این شیوه تولید کد برای برون‌سپاری محاسبات OpenMP استفاده می‌شود، اما این گزینه به تنهایی نیز جهت آزمایش کامپایلر در دسترس قرار گرفته است؛ برای تولید کدی که برای پیوند به برنامه‌های استفاده‌کننده از برون‌سپاری محاسبات OpenMP مناسب باشد، از گزینه \fB\-mgomp\fR استفاده کنید. .IP \fB\-muniform\-simt\fR 4 .IX Item "-muniform-simt" تغییر به حالت تولید کدی که اجازه می‌دهد تمام ریسمان‌ها در هر warp اجرا شوند، در حالی که وضعیت حافظه و اثرات جانبی را به گونه‌ای حفظ می‌کند که گویی تنها یک ریسمان در هر warp خارج از نواحی OpenMP SIMD فعال است. تمام عملیات اتمیک و فراخوانی‌های زمان اجرا (malloc، free، vprintf) به صورت مشروط اجرا می‌شوند (تنها در صورتی که نمایه lane جاری با نمایه lane اصلی برابر باشد)، و ثباتی که مقداردهی می‌شود با استفاده از یک دستورالعمل shuffle از lane اصلی کپی می‌شود. خارج از نواحی SIMD، نمایه lane 0 به عنوان اصلی است؛ درون آن، هر ریسمان خود را به عنوان اصلی در نظر می‌گیرد. آرایه حافظه اشتراکی \f(CW\*(C`int _\|_nvptx_uni[]\*(C'\fR ماسک‌های بیتی تمام‌صفر یا تمام‌یک را برای هر warp ذخیره می‌کند که نشان‌دهنده حالت جاری است (۰ در خارج از نواحی SIMD). هر ریسمان می‌تواند ماسک بیتی را در موقعیت \f(CW\*(C`tid.y\*(C'\fR با نمایه lane جاری عملیات AND بیتی کند تا نمایه lane اصلی را محاسبه نماید. .IP \fB\-mgomp\fR 4 .IX Item "-mgomp" تولید کد برای استفاده در برون‌سپاری محاسبات OpenMP: گزینه‌های \fB\-msoft\-stack\fR و \&\fB\-muniform\-simt\fR را فعال کرده و گونه multilib متناظر را انتخاب می‌کند..PP \fIگزینه‌های OpenRISC\fR .IX Subsection "OpenRISC Options" .PP این گزینه‌ها برای OpenRISC تعریف شده‌اند: .IP \fB\-mboard=\fR\fIname\fR 4 .IX Item "-mboard=name" پیکربندی محیط زمان‌اجرای (runtime) مخصوص یک برد خاص. این مقدار برای پیوند با کتابخانهٔ برد newlib به پیونددهنده ارسال می‌شود. مقدار پیش‌فرض \f(CW\*(C`or1ksim\*(C'\fR است. .IP \fB\-mnewlib\fR 4 .IX Item "-mnewlib" این گزینه نادیده گرفته می‌شود و صرفاً برای سازگاری وجود دارد. این گزینه قبلاً برای انتخاب گزینه‌های پیونددهنده و پیش‌پردازنده جهت استفاده با newlib به کار می‌رفت. .IP \fB\-msoft\-div\fR 4 .IX Item "-msoft-div" .PD 0 .IP \fB\-mhard\-div\fR 4 .IX Item "-mhard-div" .PD انتخاب دستورالعمل‌های تقسیم نرم‌افزاری یا سخت‌افزاری (\f(CW\*(C`l.div\*(C'\fR، \f(CW\*(C`l.divu\*(C'\fR). حالت پیش‌فرض تقسیم سخت‌افزاری است. .IP \fB\-msoft\-mul\fR 4 .IX Item "-msoft-mul" .PD 0 .IP \fB\-mhard\-mul\fR 4 .IX Item "-mhard-mul" .PD انتخاب دستورالعمل‌های ضرب نرم‌افزاری یا سخت‌افزاری (\f(CW\*(C`l.mul\*(C'\fR، \f(CW\*(C`l.muli\*(C'\fR). حالت پیش‌فرض ضرب سخت‌افزاری است. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD 0 .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD انتخاب حالت نرم‌افزاری یا سخت‌افزاری برای عملیات ممیز شناور. حالت پیش‌فرض نرم‌افزاری است. .IP \fB\-mdouble\-float\fR 4 .IX Item "-mdouble-float" هنگامی که \fB\-mhard\-float\fR انتخاب شده باشد، تولید دستورالعمل‌های ممیز شناور با دقت مضاعف (double-precision) را فعال می‌کند. به‌طور پیش‌فرض، برای انجام عملیات ممیز شناور با دقت مضاعف از توابع \fIlibgcc\fR استفاده می‌شود. .IP \fB\-munordered\-float\fR 4 .IX Item "-munordered-float" هنگامی که \fB\-mhard\-float\fR انتخاب شده باشد، تولید دستورالعمل‌های مقایسهٔ نامرتب ممیز شناور و تنظیم پرچم (\f(CW\*(C`lf.sfun*\*(C'\fR) را فعال می‌کند. به‌طور پیش‌فرض، از توابع \fIlibgcc\fR برای انجام عملیات مقایسهٔ نامرتب ممیز شناور و تنظیم پرچم استفاده می‌شود. .IP \fB\-mcmov\fR 4 .IX Item "-mcmov" فعال‌سازی تولید دستورالعمل‌های انتقال شرطی (\f(CW\*(C`l.cmov\*(C'\fR). به‌طور پیش‌فرض، معادل آن با استفاده از تنظیم و انشعاب (set and branch) تولید می‌شود. .IP \fB\-mror\fR 4 .IX Item "-mror" فعال‌سازی تولید دستورالعمل‌های چرخش به راست (\f(CW\*(C`l.ror\*(C'\fR). به‌طور پیش‌فرض، برای انجام عملیات چرخش به راست از توابع \fIlibgcc\fR استفاده می‌شود. .IP \fB\-mrori\fR 4 .IX Item "-mrori" فعال‌سازی تولید دستورالعمل‌های چرخش به راست با مقدار بی‌واسطه (\f(CW\*(C`l.rori\*(C'\fR). به‌طور پیش‌فرض، برای انجام عملیات چرخش به راست با مقدار بی‌واسطه از توابع \fIlibgcc\fR استفاده می‌شود. .IP \fB\-msext\fR 4 .IX Item "-msext" فعال‌سازی تولید دستورالعمل‌های بسط علامت (\f(CW\*(C`l.ext*\*(C'\fR). به‌طور پیش‌فرض، برای انجام بسط علامت از بارگذاری‌های حافظه استفاده می‌شود. .IP \fB\-msfimm\fR 4 .IX Item "-msfimm" فعال‌سازی تولید دستورالعمل‌های مقایسه و تنظیم پرچم با مقدار بی‌واسطه (\f(CW\*(C`l.sf*i\*(C'\fR). به‌طور پیش‌فرض، ابتدا دستورالعمل‌های اضافی برای ذخیرهٔ مقدار بی‌واسطه در یک ثبات تولید خواهد شد. .IP \fB\-mshftimm\fR 4 .IX Item "-mshftimm" فعال‌سازی تولید دستورالعمل‌های شیفت با مقدار بی‌واسطه (\f(CW\*(C`l.srai\*(C'\fR، \f(CW\*(C`l.srli\*(C'\fR، \&\f(CW\*(C`l.slli\*(C'\fR). به‌طور پیش‌فرض، ابتدا دستورالعمل‌های اضافی برای ذخیرهٔ مقدار بی‌واسطه در یک ثبات تولید خواهد شد. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" تولید کد OpenRISC برای مدل کوچک (small): جدول GOT به 64k محدود است. این مدل پیش‌فرض است. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" تولید کد OpenRISC برای مدل بزرگ (large): اندازهٔ جدول GOT می‌تواند تا 4G افزایش یابد. .PP \fIگزینه‌های PDP\-11\fR .IX Subsection "PDP-11 Options" .PP این گزینه‌ها برای PDP\-11 تعریف شده‌اند: .IP \fB\-mfpu\fR 4 .IX Item "-mfpu" استفاده از ممیز شناور سخت‌افزاری FPP. این حالت پیش‌فرض است. (ممیز شناور FIS در PDP\-11/40 پشتیبانی نمی‌شود.) مستلزم \-m45 است. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" عدم استفاده از ممیز شناور سخت‌افزاری. .IP \fB\-mac0\fR 4 .IX Item "-mac0" بازگرداندن نتایج ممیز شناور در ac0 (یا fr0 در نحو اسمبلی Unix). .IP \fB\-mno\-ac0\fR 4 .IX Item "-mno-ac0" بازگرداندن نتایج ممیز شناور در حافظه. این حالت پیش‌فرض است. .IP \fB\-m40\fR 4 .IX Item "-m40" تولید کد برای PDP\-11/40. مستلزم \-msoft\-float و \-mno\-split است. .IP \fB\-m45\fR 4 .IX Item "-m45" تولید کد برای PDP\-11/45. این حالت پیش‌فرض است. .IP \fB\-m10\fR 4 .IX Item "-m10" تولید کد برای PDP\-11/10. مستلزم \-msoft\-float و \-mno\-split است. .IP \fB\-mint16\fR 4 .IX Item "-mint16" .PD 0 .IP \fB\-mno\-int32\fR 4 .IX Item "-mno-int32" .PD استفاده از \f(CW\*(C`int\*(C'\fR ۱۶ بیتی. این حالت پیش‌فرض است. .IP \fB\-mint32\fR 4 .IX Item "-mint32" .PD 0 .IP \fB\-mno\-int16\fR 4 .IX Item "-mno-int16" .PD استفاده از \f(CW\*(C`int\*(C'\fR ۳۲ بیتی. .IP \fB\-msplit\fR 4 .IX Item "-msplit" هدف دارای فضای داده و دستورالعمل تفکیک‌شده (split) است. مستلزم \-m45 است. .IP \fB\-munix\-asm\fR 4 .IX Item "-munix-asm" استفاده از نحو اسمبلی Unix. .IP \fB\-mdec\-asm\fR 4 .IX Item "-mdec-asm" استفاده از نحو اسمبلی DEC. .IP \fB\-mgnu\-asm\fR 4 .IX Item "-mgnu-asm" استفاده از نحو اسمبلی GNU. این حالت پیش‌فرض است. .IP \fB\-mlra\fR 4 .IX Item "-mlra" استفاده از تخصیص‌دهندهٔ جدید ثبات LRA. به‌طور پیش‌فرض، از تخصیص‌دهندهٔ قدیمی «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" پیوند با حداقل محیط زمان‌اجرا (runtime). این کار می‌تواند اندازهٔ فایل نهایی دودویی ELF را به میزان چشمگیری کاهش دهد، اما برخی از ویژگی‌های استاندارد زمان‌اجرای C حذف می‌شوند. .Sp این گزینه پشتیبانی از سازنده‌ها (constructors) و مقداردهنده‌های اولیهٔ ایستا را غیرفعال می‌کند. توجه داشته باشید که کامپایلر همچنان ممکن است کدی با مقداردهنده‌های ایستا و سازنده‌ها تولید کند؛ بنابراین اطمینان از عدم استفاده از این ویژگی‌ها در برنامهٔ مبدأ بر عهدهٔ برنامه‌نویس است. .Sp کد راه‌اندازی کمینه، آرگومان‌های \f(CW\*(C`argc\*(C'\fR و \f(CW\*(C`argv\*(C'\fR را به \f(CW\*(C`main\*(C'\fR ارسال نمی‌کند، بنابراین تابع اصلی باید به‌صورت \f(CW\*(C`int main (void)\*(C'\fR تعریف شود. این موضوع در بیشتر پروژه‌های سفت‌افزار (firmware) یک قاعدهٔ استاندارد است. .IP \fB\-mmcu=\fR\fImcu\fR 4 .IX Item "-mmcu=mcu" مشخص کردن گونهٔ سخت‌افزاری PRU مورد استفاده. یک فایل spec با نام متناظر بارگذاری می‌شود که اندازه‌های ناحیهٔ حافظه را به پیونددهنده منتقل کرده و ماکروهای C ویژهٔ سخت‌افزار را تعریف می‌کند. .Sp کتابخانهٔ Newlib تنها مشخصات \f(CW\*(C`sim\*(C'\fR را ارائه می‌دهد که برای اجرای آزمون‌های پسرفت با استفاده از شبیه‌ساز در نظر گرفته شده است. مشخصات مربوط به سخت‌افزار واقعی را می‌توان با نصب بستهٔ GnuPruMcu (\f(CW\*(C`https://github.com/dinuxbg/gnuprumcu\*(C'\fR) به دست آورد. .IP \fB\-mno\-relax\fR 4 .IX Item "-mno-relax" باعث می‌شود GCC به‌جای گزینهٔ \fB\-\-relax\fR، گزینهٔ خط فرمان \fB\-\-no\-relax\fR را به پیونددهنده ارسال کند. .IP \fB\-mloop\fR 4 .IX Item "-mloop" اجازه دادن (یا ندادن) به GCC برای استفاده از دستورالعمل LOOP. .IP \fB\-mabi=\fR\fIvariant\fR 4 .IX Item "-mabi=variant" تعیین گونهٔ ABI برای تولید کد خروجی. گزینهٔ \fB\-mabi=ti\fR رابط کاربری دودویی دست‌نخوردهٔ TI ABI را انتخاب می‌کند، در حالی که \fB\-mabi=gnu\fR گونه‌ای از GNU را انتخاب می‌کند که با فرضیات خاص GCC سازگاری طبیعی‌تری دارد. تفاوت‌ها به شرح زیر است: .RS 4 .IP "\fBاندازهٔ اشاره‌گر تابع\fR" 4 .IX Item "Function Pointer Size" در TI ABI مشخص شده است که اشاره‌گرهای تابع (کد) ۱۶ بیتی هستند، در حالی که GNU تنها از اشاره‌گرهای داده و کد ۳۲ بیتی پشتیبانی می‌کند. .IP "\fBاشاره‌گر اختیاری مقدار بازگشتی\fR" 4 .IX Item "Optional Return Value Pointer" مقادیر بازگشتی توابع که بزرگ‌تر از ۶۴ بیت هستند، با استفاده از یک اشاره‌گر پنهان به‌عنوان اولین آرگومان تابع ارسال می‌شوند. با این حال، TI ABI الزامی می‌کند که در صورت عدم استفادهٔ فراخواننده از مقدار بازگشتی، اشاره‌گر می‌تواند NULL باشد. اما GNU همیشه یک اشاره‌گر معتبر مقدار بازگشتی را ارسال و انتظار دارد. .RE .RS 4 .Sp پیاده‌سازی فعلی \fB\-mabi=ti\fR در صورت شناسایی هر یک از ساختارهای کدی بالا، به‌سادگی یک خطای کامپایل صادر می‌کند. در نتیجه، کتابخانهٔ استاندارد C قابل ساخت نیست و هنگام پیوند با \&\fB\-mabi=ti\fR نادیده گرفته می‌شود. .Sp قابلیت بازآرایی (Relaxation) یکی از ویژگی‌های GNU است و به دلایل امنیتی هنگام استفاده از \&\fB\-mabi=ti\fR غیرفعال می‌شود. زنجیره ابزار TI بازنشانی‌ها (relocations) را برای دستورالعمل‌های QBBx تولید نمی‌کند، بنابراین پیونددهندهٔ GNU نمی‌تواند هنگام کوتاه‌سازی شبه‌دستورالعمل‌های مجاور LDI32، آن‌ها را تنظیم کند. .RE.PP \fIگزینه‌های RISC\-V\fR .IX Subsection "گزینه‌های RISC-V" .PP این گزینه‌های خط فرمان برای مقصدهای RISC\-V تعریف شده‌اند: .IP \fB\-mbranch\-cost=\fR\fIn\fR 4 .IX Item "-mbranch-cost=n" هزینهٔ انشعاب‌ها را تقریباً برابر با \fIn\fR دستورالعمل تعیین می‌کند. .IP \fB\-mplt\fR 4 .IX Item "-mplt" .PD 0 .IP \fB\-mno\-plt\fR 4 .IX Item "-mno-plt" .PD هنگام تولید کد PIC، استفاده از PLTها را مجاز یا غیرمجاز می‌کند. برای کدهای غیر PIC نادیده گرفته می‌شود. مقدار پیش‌فرض \fB\-mplt\fR است. .IP \fB\-mabi=\fR\fIABI\-string\fR 4 .IX Item "-mabi=ABI-string" قرارداد فراخوانی اعداد صحیح و ممیز شناور را مشخص می‌کند. \fIABI\-string\fR شامل دو بخش است: اندازه نوع‌های صحیح و ثبات‌های مورد استفاده برای نوع‌های ممیز شناور. برای نمونه، \fB\-march=rv64ifd \-mabi=lp64d\fR بدین معناست که \&\fBlong\fR و اشاره‌گرها ۶۴ بیتی هستند (که به‌طور ضمنی \fBint\fR را ۳۲ بیتی تعریف می‌کند)، و مقادیر ممیز شناور با پهنای حداکثر ۶۴ بیت در ثبات‌های F ارسال می‌شوند. این را مقایسه کنید با \fB\-march=rv64ifd \-mabi=lp64f\fR که همچنان به کامپایلر اجازه می‌دهد کدی تولید کند که از افزونه‌های F و D استفاده می‌کند، اما تنها اجازه می‌دهد مقادیر ممیز شناور با طول حداکثر ۳۲ بیت در ثبات‌ها ارسال شوند؛ یا \&\fB\-march=rv64ifd \-mabi=lp64\fR که در آن هیچ آرگومان ممیز شناوری در ثبات‌ها ارسال نخواهد شد. .Sp مقدار پیش‌فرض برای این آرگومان وابسته به سیستم است؛ کاربرانی که قرارداد فراخوانی خاصی می‌خواهند باید آن را صراحتاً مشخص کنند. قراردادهای فراخوانی معتبر عبارت‌اند از: \fBilp32\fR، \fBilp32f\fR، \fBilp32d\fR، \fBlp64\fR، \&\fBlp64f\fR و \fBlp64d\fR. پیاده‌سازی برخی قراردادهای فراخوانی روی بعضی از ISAها غیرممکن است: برای نمونه، \fB\-march=rv32if \-mabi=ilp32d\fR نامعتبر است زیرا ABI نیازمند ارسال مقادیر ۶۴ بیتی در ثبات‌های F است، در حالی که ثبات‌های F تنها ۳۲ بیت پهنا دارند. همچنین ABIهای \fBilp32e\fR وجود دارند که تنها با معماری \fBrv32e\fR قابل استفاده‌اند و \fBlp64e\fR که تنها با \fBrv64e\fR قابل استفاده است. این ABIها در حال حاضر به‌خوبی مشخص نشده‌اند و ممکن است دستخوش تغییر شوند. .IP \fB\-mfdiv\fR 4 .IX Item "-mfdiv" .PD 0 .IP \fB\-mno\-fdiv\fR 4 .IX Item "-mno-fdiv" .PD استفاده یا عدم استفاده از دستورالعمل‌های سخت‌افزاری تقسیم و جذر ممیز شناور را تعیین می‌کند. این گزینه نیازمند افزونه‌های F یا D برای ثبات‌های ممیز شناور است. پیش‌فرض این است که اگر معماریِ مشخص‌شده این دستورالعمل‌ها را داشته باشد، از آن‌ها استفاده شود. .IP \fB\-mfence\-tso\fR 4 .IX Item "-mfence-tso" .PD 0 .IP \fB\-mno\-fence\-tso\fR 4 .IX Item "-mno-fence-tso" .PD استفاده یا عدم استفاده از دستورالعمل \fBfence.tso\fR را تعیین می‌کند که روی برخی پردازنده‌ها (از جمله پردازنده‌های شرکت T\-Head) پیاده‌سازی نشده است. اگر دستورالعمل \fBfence.tso\fR در دسترس نباشد، به‌جای آن از یک fence قوی‌تر استفاده می‌شود. .IP \fB\-mdiv\fR 4 .IX Item "-mdiv" .PD 0 .IP \fB\-mno\-div\fR 4 .IX Item "-mno-div" .PD استفاده یا عدم استفاده از دستورالعمل‌های سخت‌افزاری برای تقسیم اعداد صحیح را تعیین می‌کند. این گزینه به افزونهٔ M نیاز دارد. پیش‌فرض این است که اگر معماریِ مشخص‌شده این دستورالعمل‌ها را داشته باشد، از آن‌ها استفاده شود. .IP \fB\-misa\-spec=\fR\fIISA\-spec\-string\fR 4 .IX Item "-misa-spec=ISA-spec-string" نسخهٔ مشخصات ISA غیرممتاز (پیش‌تر سطح کاربر یا User\-Level) RISC\-V را مشخص می‌کند تا کد مطابق با آن تولید شود. مقادیر ممکن برای \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 "رشته باید با rv32 یا rv64 آغاز شود و پس از آن" \&\fBi\fR، \fBe\fR یا \fBg\fR بیاید، که به عنوان ISA پایه شناخته می‌شود. .ie n .IP """بخش بعدی رشته، فهرستی از نام‌های افزونه است. نام‌های""" 4 .el .IP "\f(CWبخش بعدی رشته، فهرستی از نام‌های افزونه است. نام‌های\fR" 4 .IX Item "بخش بعدی رشته، فهرستی از نام‌های افزونه است. نام‌های" افزونه می‌توانند به دو دستهٔ چندحرفی (مانند \fBzba\fR) و تک‌حرفی (مانند \fBv\fR) تقسیم شوند. افزونه‌های تک‌حرفی می‌توانند پشت سر هم قرار گیرند، اما افزونه‌های چندحرفی باید با زیرخط (underscore) از یکدیگر جدا شوند. .ie n .IP """زیرخط می‌تواند در هر کجای پس از ISA پایه ظاهر شود. این نویسه هیچ اثر""" 4 .el .IP "\f(CWزیرخط می‌تواند در هر کجای پس از ISA پایه ظاهر شود. این نویسه هیچ اثر\fR" 4 .IX Item "زیرخط می‌تواند در هر کجای پس از ISA پایه ظاهر شود. این نویسه هیچ اثر" خاصی ندارد، اما برای بهبود خوانایی استفاده می‌شود و می‌تواند به عنوان یک جداکننده عمل کند. .ie n .IP """نام‌های افزونه ممکن است شامل یک شماره نسخهٔ اختیاری باشند که از نحو""" 4 .el .IP "\f(CWنام‌های افزونه ممکن است شامل یک شماره نسخهٔ اختیاری باشند که از نحو\fR" 4 .IX Item "نام‌های افزونه ممکن است شامل یک شماره نسخهٔ اختیاری باشند که از نحو" \&\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 افزونهٔ دستورالعمل‌های فشرده (Compressed). .IP h 4 .IX Item "h" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ هایپروایزر (Hypervisor). .IP v 4 .IX Item "v" \&\f(CW@tab\fR 1.0 \&\f(CW@tab\fR افزونهٔ برداری (Vector). .IP zicsr 4 .IX Item "zicsr" \&\f(CW@tab\fR 2.0 \&\f(CW@tab\fR افزونهٔ دسترسی به ثبات‌های وضعیت و کنترل (CSR). .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 افزونهٔ انتظار روی مجموعه رزرو (Wait\-on\-reservation\-set). .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 افزونه‌ی جایگشت crossbar برای رمزنگاری. .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 افزونه فعال‌سازی وضعیت. .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 را لغو (override) نمی‌کند. .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 استفاده می‌کند. مقدار پیش‌فرض، استفاده از عملیات اتمی زیرکلمهٔ سریع درون‌خطی است که نیازی به 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 تلاش یا عدم تلاش برای درون‌خطی‌سازی (inlining) فراخوانی‌های 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 حداکثر تعداد بایت‌های مقایسه‌شده توسط کد درون‌خطی‌شده را کنترل می‌کند. مقدار پیش‌فرض ۶۴ است. .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 حداکثر تعداد بایت‌های مقایسه‌شده توسط کد درون‌خطی‌شده را کنترل می‌کند. مقدار پیش‌فرض ۶۴ است. .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) از طریق جایگزین کردن بارگذاری/ذخیره‌سازی «ثبات پایه + آفست بزرگ» با بارگذاری/ذخیره‌سازی جدید «پایه جدید + آفست کوچک». اگر پایهٔ جدید در یک ثبات فشرده ذخیره شود، بارگذاری/ذخیره‌سازی جدید می‌تواند فشرده گردد. در حال حاضر فقط بارگذاری/ذخیره‌سازی‌های عدد صحیح ۳۲ بیتی هدف قرار می‌گیرند. .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 تولید نکردن یا تولید کردن دسترسی‌های برداری ترازنشده به حافظه. مقدار پیش‌فرض خاموش (off) است، مگر اینکه پردازنده‌ای که برای آن بهینه‌سازی می‌کنیم صراحتاً از دسترسی‌های برداری با عناصر ناتراز (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" نحوهٔ تراز کردن متغیرها و مقادیر ثابت با انواع آرایه، ساختار یا اجتماع توسط 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 علاوه بر این مشخص می‌کنند که کدام ثبات به‌عنوان ثبات پایه برای خواندن قناری، و چه آفستی از آن ثبات پایه باید استفاده شود. هیچ ثبات یا آفست پیش‌فرضی وجود ندارد چرا که این ویژگی منحصراً برای استفاده در هستهٔ Linux است. .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" کتابخانه‌های هدف اضافی را جهت پشتیبانی از اجرا درون یک شبیه‌ساز پیوند (link) می‌دهد. .IP \fB\-mmul=none\fR 4 .IX Item "-mmul=none" .PD 0 .IP \fB\-mmul=g10\fR 4 .IX Item "-mmul=g10" .IP \fB\-mmul=g13\fR 4 .IX Item "-mmul=g13" .IP \fB\-mmul=g14\fR 4 .IX Item "-mmul=g14" .IP \fB\-mmul=rl78\fR 4 .IX Item "-mmul=rl78" .PD نوع پشتیبانی سخت‌افزاری از ضرب و تقسیم مورد استفاده را مشخص می‌کند. ساده‌ترین حالت \f(CW\*(C`none\*(C'\fR است که از نرم‌افزار برای هر دو عملیات ضرب و تقسیم استفاده می‌کند. این حالت پیش‌فرض است. مقدار \f(CW\*(C`g13\*(C'\fR برای واحد جانبی ضرب/تقسیم سخت‌افزاری موجود روی مقصدهای RL78/G13 (هستهٔ S2) است. مقدار \f(CW\*(C`g14\*(C'\fR استفاده از دستورالعمل‌های ضرب و تقسیم پشتیبانی‌شده توسط قطعات RL78/G14 (هستهٔ S3) را انتخاب می‌کند. مقدار \f(CW\*(C`rl78\*(C'\fR یک نام مستعار برای \f(CW\*(C`g14\*(C'\fR و مقدار \f(CW\*(C`mg10\*(C'\fR یک نام مستعار برای \f(CW\*(C`none\*(C'\fR است. .Sp علاوه بر این، یک ماکروی پیش‌پردازندهٔ C بر اساس تنظیمات این گزینه تعریف می‌شود. مقادیر ممکن عبارت‌اند از: \f(CW\*(C`_\|_RL78_MUL_NONE_\|_\*(C'\fR، \&\f(CW\*(C`_\|_RL78_MUL_G13_\|_\*(C'\fR یا \f(CW\*(C`_\|_RL78_MUL_G14_\|_\*(C'\fR. .IP \fB\-mcpu=g10\fR 4 .IX Item "-mcpu=g10" .PD 0 .IP \fB\-mcpu=g13\fR 4 .IX Item "-mcpu=g13" .IP \fB\-mcpu=g14\fR 4 .IX Item "-mcpu=g14" .IP \fB\-mcpu=rl78\fR 4 .IX Item "-mcpu=rl78" .PD هستهٔ هدف RL78 را مشخص می‌کند. پیش‌فرض هستهٔ G14 است که با نام هستهٔ S3 یا صرفاً RL78 نیز شناخته می‌شود. هستهٔ G13 یا S2 فاقد دستورالعمل‌های ضرب یا تقسیم است؛ در عوض برای این عملیات از یک واحد جانبی سخت‌افزاری استفاده می‌کند. هستهٔ G10 یا S1 فاقد بانک‌های ثبات است، بنابراین از یک قرارداد فراخوانی (calling convention) متفاوت استفاده می‌کند. .Sp اگر این گزینه تنظیم شود، نوع پشتیبانی ضرب سخت‌افزاری مورد استفاده را نیز انتخاب می‌کند، مگر اینکه با یک گزینهٔ صریح \&\fB\-mmul=none\fR در خط فرمان لغو شود. بنابراین، مشخص کردن \&\fB\-mcpu=g13\fR استفاده از واحد جانبی ضرب سخت‌افزاری G13 را فعال کرده و مشخص کردن \fB\-mcpu=g10\fR استفاده از ضرب‌های سخت‌افزاری را به‌طور کامل غیرفعال می‌سازد. .Sp توجه داشته باشید که اگرچه هستهٔ RL78/G14 هدف پیش‌فرض است، مشخص کردن \&\fB\-mcpu=g14\fR یا \fB\-mcpu=rl78\fR در خط فرمان، رفتار زنجیره ابزار (toolchain) را تغییر می‌دهد، زیرا پشتیبانی ضرب سخت‌افزاری 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 برای استفاده در گرداننده‌های وقفه (interrupt handlers) رزرو شده‌اند. با فعال شدن این گزینه، این ثبات‌ها می‌توانند در توابع معمولی نیز مورد استفاده قرار گیرند. .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 تنظیمات این گزینه‌ها را لغو (override) می‌کند. توصیه می‌شود به جای گزینه‌های ذکرشده در بالا، از گزینهٔ \fB\-mcpu=\fR\fIcpu_type\fR استفاده کنید. .Sp مشخص کردن \fB\-mpowerpc\-gpopt\fR به GCC اجازه می‌دهد از دستورالعمل‌های اختیاری معماری PowerPC در گروه کاربرد عمومی (General Purpose)، از جمله جذر نقطهٔ شناور (floating\-point square root) استفاده کند. مشخص کردن \fB\-mpowerpc\-gfxopt\fR به GCC اجازه می‌دهد از دستورالعمل‌های اختیاری معماری PowerPC در گروه گرافیک، از جمله گزینش ممیز شناور (floating\-point select) بهره ببرد. .Sp گزینهٔ \fB\-mmfcrf\fR به GCC اجازه می‌دهد دستور انتقال از فیلد ثبات وضعیت (move from condition register field) را که روی پردازندهٔ POWER4 و دیگر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.01 پیاده‌سازی شده است تولید کند. گزینهٔ \fB\-mpopcntb\fR به GCC اجازه می‌دهد دستورالعمل‌های popcount و تخمین معکوس ممیز شناور با دقت مضاعف (double\-precision FP reciprocal estimate) پیاده‌سازی‌شده در پردازندهٔ POWER5 و سایر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.02 را تولید کند. گزینهٔ \fB\-mpopcntd\fR به GCC امکان می‌دهد دستورالعمل popcount پیاده‌سازی‌شده در پردازندهٔ POWER7 و سایر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.06 را تولید کند. گزینهٔ \fB\-mfprnd\fR به GCC امکان می‌دهد دستورالعمل‌های گرد کردن ممیز شناور به عدد صحیح (FP round to integer) پیاده‌سازی‌شده در پردازندهٔ +POWER5 و سایر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.03 را تولید کند. گزینهٔ \fB\-mcmpb\fR به GCC اجازه می‌دهد دستور مقایسهٔ بایت‌ها (compare bytes) را که در پردازندهٔ POWER6 و سایر پردازنده‌های پشتیبانی‌کننده از معماری PowerPC V2.05 پیاده‌سازی شده است تولید کند. گزینهٔ \fB\-mhard\-dfp\fR به GCC اجازه می‌دهد دستورالعمل‌های ممیز شناور ده‌دهی (decimal floating\-point) پیاده‌سازی‌شده در برخی پردازنده‌های 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" نوع معماری، نحوهٔ استفاده از ثبات‌ها (register usage)، و پارامترهای زمان‌بندی دستورالعمل‌ها را برای ماشین نوع \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 به عنوان نوع CPU، گزینهٔ معماری متناظر با پردازندهٔ میزبان سیستمی را که کامپایل را انجام می‌دهد شناسایی و انتخاب می‌کند. اگر GCC پردازنده را شناسایی نکند، \fB\-mcpu=native\fR هیچ تأثیری نخواهد داشت. .Sp گزینه‌های دیگر یک پردازندهٔ مشخص را تعیین می‌کنند. کدی که تحت آن گزینه‌ها تولید می‌شود، روی آن پردازنده بهترین اجرا را خواهد داشت و ممکن است روی پردازنده‌های دیگر اصلاً اجرا نشود. .Sp گزینه‌های \fB\-mcpu\fR به طور خودکار گزینه‌های زیر را فعال یا غیرفعال می‌کنند: .Sp \&\fB\-maltivec \-mfprnd \-mhard\-float \-mmfcrf \-mmultiple \&\-mpopcntb \-mpopcntd \-mpowerpc64 \&\-mpowerpc\-gpopt \-mpowerpc\-gfxopt \&\-mmulhw \-mdlmzb \-mmfpgpr \-mvsx \&\-mcrypto \-mhtm \-mpower8\-fusion \&\-mquad\-memory \-mquad\-memory\-atomic \-mfloat128 \&\-mfloat128\-hardware \-mprefixed \-mpcrel \-mmma \&\-mrop\-protect\fR .Sp گزینه‌های خاص تنظیم‌شده برای هر پردازندهٔ به‌خصوص، میان نسخه‌های مختلف کامپایلر متفاوت است و بستگی به این دارد که چه تنظیمی به نظر می‌رسد کد بهینه‌ای برای آن پردازنده تولید می‌کند؛ این لزوماً نشان‌دهندهٔ توانایی‌های سخت‌افزار واقعی نیست. اگر مایلید یک گزینهٔ منفرد را روی مقدار خاصی تنظیم کنید، می‌توانید آن را پس از گزینهٔ \fB\-mcpu\fR مشخص کنید، مانند \&\fB\-mcpu=970 \-mno\-altivec\fR. .Sp در AIX، گزینه‌های \fB\-maltivec\fR و \fB\-mpowerpc64\fR در حال حاضر توسط گزینهٔ \fB\-mcpu\fR فعال یا غیرفعال نمی‌شوند زیرا AIX پشتیبانی کاملی از این گزینه‌ها ندارد. اگر مطمئن هستید که در محیط شما کار خواهد کرد، همچنان می‌توانید آن‌ها را به طور جداگانه فعال یا غیرفعال کنید. .IP \fB\-mtune=\fR\fIcpu_type\fR 4 .IX Item "-mtune=cpu_type" پارامترهای زمان‌بندی دستورالعمل‌ها را برای ماشین نوع \fIcpu_type\fR تنظیم می‌کند، اما برخلاف \fB\-mcpu=\fR\fIcpu_type\fR، نوع معماری یا نحوهٔ استفاده از ثبات‌ها را تغییر نمی‌دهد. همان مقادیر \fIcpu_type\fR که برای \fB\-mcpu\fR معتبر هستند، برای \fB\-mtune\fR نیز استفاده می‌شوند. اگر هر دو مشخص شوند، کد تولیدشده از معماری و ثبات‌های تعیین‌شده توسط \fB\-mcpu\fR، اما از پارامترهای زمان‌بندی تعیین‌شده توسط \fB\-mtune\fR استفاده می‌کند. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" کد PowerPC64 را برای مدل کوچک (small model) تولید می‌کند: جدول TOC به 64k محدود می‌شود. .IP \fB\-mcmodel=medium\fR 4 .IX Item "-mcmodel=medium" کد PowerPC64 را برای مدل متوسط (medium model) تولید می‌کند: مجموع اندازهٔ TOC و سایر داده‌های ایستا (static) می‌تواند تا 4G باشد. این مقدار پیش‌فرض برای لینوکس ۶۴ بیتی است. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" کد PowerPC64 را برای مدل بزرگ (large model) تولید می‌کند: اندازهٔ TOC می‌تواند تا 4G باشد. سایر داده‌ها و کد فقط توسط فضای آدرس‌دهی ۶۴ بیتی محدود می‌شوند. .IP \fB\-maltivec\fR 4 .IX Item "-maltivec" .PD 0 .IP \fB\-mno\-altivec\fR 4 .IX Item "-mno-altivec" .PD کدی تولید می‌کند که از دستورالعمل‌های AltiVec استفاده می‌کند (یا استفاده نمی‌کند)، و همچنین استفاده از توابع توکار (built\-in) را که دسترسی مستقیم‌تری به مجموعه دستورالعمل‌های AltiVec فراهم می‌کنند فعال می‌سازد. همچنین ممکن است لازم باشد گزینهٔ \fB\-mabi=altivec\fR را برای تطبیق ABI جاری با بهبودهای ABI مربوط به AltiVec تنظیم کنید. .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 هنگام تولید کد AltiVec، دستورالعمل‌های VRSAVE را تولید می‌کند. .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 و بعد از آن با یکدیگر ادغام شوند. .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 تولید کدی که از دستورالعمل‌های حافظه چهارکلمه‌ای غیراتمیک استفاده می‌کند (استفاده نمی‌کند). گزینه \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 تولید کدی که از دستورالعمل‌های حافظه چهارکلمه‌ای اتمیک استفاده می‌کند (استفاده نمی‌کند). گزینه \fB\-mquad\-memory\-atomic\fR نیازمند استفاده از حالت ۶۴\-بیتی است. .IP \fB\-mfloat128\fR 4 .IX Item "-mfloat128" .PD 0 .IP \fB\-mno\-float128\fR 4 .IX Item "-mno-float128" .PD فعال‌سازی/غیرفعال‌سازی کلیدواژه \fI_\|_float128\fR برای ممیز شناور ۱۲۸\-بیتی IEEE و استفاده از شبیه‌سازی نرم‌افزاری یا دستورالعمل‌های سخت‌افزاری برای ممیز شناور ۱۲۸\-بیتی IEEE. .Sp برای استفاده از پشتیبانی ممیز شناور ۱۲۸\-بیتی IEEE، مجموعه دستورالعمل‌های VSX (\fB\-mvsx\fR) باید فعال باشد. ممیز شناور ۱۲۸\-بیتی IEEE تنها در Linux پشتیبانی می‌شود. .Sp حالت پیش‌فرض برای \fB\-mfloat128\fR در سیستم‌های PowerPC Linux که از مجموعه دستورالعمل‌های VSX استفاده می‌کنند فعال و در سایر سیستم‌ها غیرفعال است. .Sp اگر از مجموعه دستورالعمل‌های ISA 3.0 (\fB\-mcpu=power9\fR) در یک سیستم ۶۴\-بیتی استفاده کنید، پشتیبانی از ممیز شناور ۱۲۸\-بیتی IEEE همچنین تولید دستورالعمل‌های ممیز شناور ۱۲۸\-بیتی IEEE مربوط به ISA 3.0 را فعال می‌کند. در غیر این صورت، اگر تولید دستورالعمل‌های ISA 3.0 را تعیین نکنید یا هدف شما یک سیستم ۳۲\-بیتی big endian باشد، ممیز شناور ۱۲۸\-بیتی IEEE با شبیه‌سازی نرم‌افزاری انجام خواهد شد. .IP \fB\-mfloat128\-hardware\fR 4 .IX Item "-mfloat128-hardware" .PD 0 .IP \fB\-mno\-float128\-hardware\fR 4 .IX Item "-mno-float128-hardware" .PD فعال‌سازی/غیرفعال‌سازی استفاده از دستورالعمل‌های سخت‌افزاری ISA 3.0 برای پشتیبانی از نوع داده \&\fI_\|_float128\fR. .Sp حالت پیش‌فرض برای \fB\-mfloat128\-hardware\fR در سیستم‌های PowerPC Linux که از مجموعه دستورالعمل‌های ISA 3.0 استفاده می‌کنند فعال و در سایر سیستم‌ها غیرفعال است. .IP \fB\-m32\fR 4 .IX Item "-m32" .PD 0 .IP \fB\-m64\fR 4 .IX Item "-m64" .PD تولید کد برای محیط‌های ۳۲\-بیتی یا ۶۴\-بیتی از اهداف Darwin و SVR4 (شامل GNU/Linux). محیط ۳۲\-بیتی مقادیر int، long و اشاره‌گر را روی ۳۲ بیت تنظیم می‌کند و کدی تولید می‌کند که روی هر گونه‌ای از PowerPC اجرا می‌شود. محیط ۶۴\-بیتی int را روی ۳۲ بیت و long و اشاره‌گر را روی ۶۴ بیت تنظیم کرده و مشابه \&\fB\-mpowerpc64\fR برای PowerPC64 کد تولید می‌کند. .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 قرار می‌دهد. با این حال، تنها ۱۶٬۳۸۴ ورودی در TOC در دسترس است. .Sp اگر پیام خطایی از پیونددهنده دریافت کردید مبنی بر اینکه از فضای مجاز TOC سرریز کرده‌اید، می‌توانید با استفاده از گزینه‌های \fB\-mno\-fp\-in\-toc\fR و \fB\-mno\-sum\-in\-toc\fR میزان فضای مصرفی TOC را کاهش دهید. گزینه \&\fB\-mno\-fp\-in\-toc\fR مانع قرار دادن ثابت‌های ممیز شناور در TOC توسط GCC می‌شود و \fB\-mno\-sum\-in\-toc\fR کامپایلر GCC را وادار می‌کند تا به‌جای قرار دادن مجموع یک آدرس و یک ثابت در TOC، کدی تولید کند که این مجموع را در زمان اجرا محاسبه نماید. می‌توانید یکی از این گزینه‌ها یا هر دو را تعیین کنید. هر کدام از آن‌ها باعث می‌شود GCC به بهای صرفه‌جویی در فضای TOC، کدی اندکی کندتر و حجیم‌تر تولید کند. .Sp اگر حتی با تعیین هر دوی این گزینه‌ها همچنان فضای TOC تمام شد، در عوض \fB\-mminimal\-toc\fR را تعیین کنید. این گزینه باعث می‌شود GCC برای هر فایل تنها یک ورودی TOC ایجاد نماید. با مشخص کردن این گزینه، GCC کدی تولید می‌کند که کندتر و بزرگ‌تر است اما فضای فوق‌العاده اندکی از TOC را مصرف می‌کند. ممکن است بخواهید از این گزینه تنها برای فایل‌هایی استفاده کنید که کدهای آن‌ها کمتر اجرا می‌شوند. .IP \fB\-maix64\fR 4 .IX Item "-maix64" .PD 0 .IP \fB\-maix32\fR 4 .IX Item "-maix32" .PD فعال‌سازی ABI و قرارداد فراخوانی ۶۴\-بیتی AIX: اشاره‌گرهای ۶۴\-بیتی، نوع \&\f(CW\*(C`long\*(C'\fR ۶۴\-بیتی و زیرساخت مورد نیاز برای پشتیبانی از آن‌ها. مشخص کردن \fB\-maix64\fR به‌معنای فعال‌سازی ضمنی \fB\-mpowerpc64\fR است، در حالی که \fB\-maix32\fR ساختار ABI ۶۴\-بیتی را غیرفعال کرده و به‌معنای ضمنی \fB\-mno\-powerpc64\fR است. پیش‌فرض GCC گزینه \fB\-maix32\fR است. .IP \fB\-mxl\-compat\fR 4 .IX Item "-mxl-compat" .PD 0 .IP \fB\-mno\-xl\-compat\fR 4 .IX Item "-mno-xl-compat" .PD تولید کدی که هنگام استفاده از ABI سازگار با AIX، تطابق بیشتری با معناشناسی کامپایلر IBM XL داشته باشد. ارسال آرگومان‌های ممیز شناور به توابع پیش‌الگو فراتر از ناحیه ذخیره ثبات (RSA) روی پشته، علاوه بر FPRهای آرگومان. هنگام مقایسه مقادیر و تبدیل به double، فرض نکردن این که پرارزش‌ترین double در مقدار long 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 از ریسه‌ها پشتیبانی نمی‌کند، بنابراین گزینه \fB\-mpe\fR و گزینه \fB\-pthread\fR با یکدیگر ناسازگار هستند. .IP \fB\-malign\-natural\fR 4 .IX Item "-malign-natural" .PD 0 .IP \fB\-malign\-power\fR 4 .IX Item "-malign-power" .PD در AIX، نگارش ۳۲\-بیتی Darwin و ۶۴\-بیتی PowerPC GNU/Linux، گزینه \&\fB\-malign\-natural\fR هم‌ترازی تعریف‌شده توسط ABI برای انواع بزرگ‌تر، مانند doubleهای ممیز شناور را بر روی مرز طبیعی مبتنی بر اندازه‌شان بازنویسی می‌کند. گزینه \fB\-malign\-power\fR به GCC دستور می‌دهد که از قوانین هم‌ترازی مشخص‌شده در ABI پیروی کند. پیش‌فرض GCC هم‌ترازی استاندارد تعریف‌شده در ABI است. .Sp در Darwin ۶۴\-بیتی، هم‌ترازی طبیعی حالت پیش‌فرض است و \fB\-malign\-power\fR پشتیبانی نمی‌شود. .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD 0 .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD تولید کدی که از مجموعه ثبات‌های ممیز شناور استفاده نمی‌کند (استفاده می‌کند). در صورت استفاده از گزینه \&\fB\-msoft\-float\fR و ارسال این گزینه به GCC هنگام پیوند دادن، شبیه‌سازی نرم‌افزاری ممیز شناور ارائه می‌شود. .IP \fB\-mmultiple\fR 4 .IX Item "-mmultiple" .PD 0 .IP \fB\-mno\-multiple\fR 4 .IX Item "-mno-multiple" .PD تولید کدی که از دستورالعمل‌های بارگذاری چند کلمه و ذخیره چند کلمه استفاده می‌کند (استفاده نمی‌کند). این دستورالعمل‌ها به‌صورت پیش‌فرض در سیستم‌های POWER تولید می‌شوند و در سیستم‌های PowerPC تولید نمی‌شوند. از \fB\-mmultiple\fR در سیستم‌های PowerPC با ترتیب بایت little-endian استفاده نکنید، زیرا این دستورالعمل‌ها زمانی که پردازنده در حالت little-endian است کار نمی‌کنند. استثناها PPC740 و PPC750 هستند که این دستورالعمل‌ها را در حالت little-endian مجاز می‌دانند. .IP \fB\-mupdate\fR 4 .IX Item "-mupdate" .PD 0 .IP \fB\-mno\-update\fR 4 .IX Item "-mno-update" .PD تولید کدی که از دستورالعمل‌های بارگذاری یا ذخیره‌ای استفاده می‌کند (استفاده نمی‌کند) که ثبات پایه را با آدرس مکان حافظه محاسبه‌شده به‌روز می‌کنند. این دستورالعمل‌ها به‌طور پیش‌فرض تولید می‌شوند. اگر از \&\fB\-mno\-update\fR استفاده کنید، فاصله زمانی کوتاهی میان زمان به‌روزرسانی اشاره‌گر پشته و زمان ذخیره آدرس فریم پیشین وجود خواهد داشت؛ بدین معنا که کدی که فریم‌های پشته را در هنگام وقفه‌ها یا سیگنال‌ها پیمایش می‌کند، ممکن است با داده‌های خراب مواجه شود..IP \fB\-mavoid\-indexed\-addresses\fR 4 .IX Item "-mavoid-indexed-addresses" .PD 0 .IP \fB\-mno\-avoid\-indexed\-addresses\fR 4 .IX Item "-mno-avoid-indexed-addresses" .PD تولید کدی که تلاش می‌کند از دستورالعمل‌های بارگذاری یا ذخیره‌سازی نمایه‌دار (indexed) اجتناب کند (اجتناب نکند). این دستورالعمل‌ها می‌توانند در پردازنده‌های 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 تولید کدی که اجازه می‌دهد (اجازه نمی‌دهد) یک فایل اجرایی ایستا در زمان اجرا به نشانی متفاوتی بازنشانی شود. یک بارگذار سیستم 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" این گزینه اولویتی را که در دومین مرحله زمان‌بندی به دستورالعمل‌های محدود به شیار ارسال اختصاص می‌یابد، کنترل می‌کند. آرگومان \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 to load) هزینه‌بر است. .IP \fBstore_to_load\fR 4 .IX Item "store_to_load" هرگونه وابستگی از ذخیره به بارگذاری هزینه‌بر است. .IP \fInumber\fR 4 .IX Item "number" هر وابستگی که زمان تاخیر آن بزرگتر یا مساوی \&\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 تعبیه‌شده، کد را با استفاده از قراردادهای فراخوانی منطبق بر پیش‌نویس مارس ۱۹۹۵ از مکمل پردازنده PowerPC برای System V Application Binary Interface، کامپایل می‌کند. این حالت پیش‌فرض است مگر اینکه 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 توکار، کد را برای سیستم گنو مبتنی بر لینوکس (Linux\-based GNU) کامپایل می‌کند. .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" تمام ساختارها (structures) را در حافظه برمی‌گرداند (همان‌طور که توسط ABI مربوط به AIX مشخص شده است). .IP \fB\-msvr4\-struct\-return\fR 4 .IX Item "-msvr4-struct-return" ساختارهای کوچک‌تر از ۸ بایت را در ثبات‌ها برمی‌گرداند (همان‌طور که توسط ABI مربوط به SVR4 مشخص شده است). .IP \fB\-mabi=\fR\fIabi\-type\fR 4 .IX Item "-mabi=abi-type" ‏ABI فعلی را با یک افزونهٔ خاص گسترش می‌دهد، یا چنین افزونه‌ای را حذف می‌کند. مقادیر معتبر عبارتند از: \fBaltivec\fR، \fBno\-altivec\fR، \&\fBibmlongdouble\fR، \fBieeelongdouble\fR، \&\fBelfv1\fR، \fBelfv2\fR، و برای AIX عبارتند از: \fBvec\-extabi\fR، \fBvec\-default\fR. .IP \fB\-mabi=ibmlongdouble\fR 4 .IX Item "-mabi=ibmlongdouble" ‏ABI فعلی را تغییر می‌دهد تا از long double با دقت گسترش‌یافتهٔ IBM استفاده کند. اگر پیش‌فرض سامانهٔ شما استفاده از long double با دقت گسترش‌یافتهٔ IEEE باشد، احتمالاً کار نخواهد کرد. اگر نوع long double را از دقت گسترش‌یافتهٔ IEEE تغییر دهید، کامپایلر هشداری صادر می‌کند مگر اینکه از گزینهٔ \fB\-Wno\-psabi\fR استفاده کنید. نیازمند فعال بودن \fB\-mlong\-double\-128\fR است. .IP \fB\-mabi=ieeelongdouble\fR 4 .IX Item "-mabi=ieeelongdouble" ‏ABI فعلی را تغییر می‌دهد تا از long double با دقت گسترش‌یافتهٔ IEEE استفاده کند. اگر پیش‌فرض سامانهٔ شما استفاده از long double با دقت گسترش‌یافتهٔ IBM باشد، احتمالاً کار نخواهد کرد. اگر نوع long double را از دقت گسترش‌یافتهٔ IBM تغییر دهید، کامپایلر هشداری صادر می‌کند مگر اینکه از گزینهٔ \fB\-Wno\-psabi\fR استفاده کنید. نیازمند فعال بودن \fB\-mlong\-double\-128\fR است. .IP \fB\-mabi=elfv1\fR 4 .IX Item "-mabi=elfv1" ‏ABI فعلی را تغییر می‌دهد تا از ELFv1 ABI استفاده کند. این ABI پیش‌فرض برای لینوکس ۶۴ بیتی PowerPC با ترتیب بایت بزرگ‌تر (big\-endian) است. بازنویسی ABI پیش‌فرض نیازمند پشتیبانی سیستمی ویژه است و احتمالاً به شکل فاجعه‌باری با شکست مواجه خواهد شد. .IP \fB\-mabi=elfv2\fR 4 .IX Item "-mabi=elfv2" ‏ABI فعلی را تغییر می‌دهد تا از ELFv2 ABI استفاده کند. این 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 توکار، فرض می‌کند که تمام فراخوانی‌های توابع با آرگومان متغیر به‌درستی پیش‌نمونه‌سازی (prototyped) شده‌اند. در غیر این صورت، کامپایلر باید پیش از هر فراخوانی بدون پیش‌نمونه، دستوری درج کند تا بیت ۶ ثبات کد وضعیت (\f(CW\*(C`CR\*(C'\fR) را تنظیم (set) یا پاک (clear) کند تا مشخص شود آیا مقادیر ممیز شناور در ثبات‌های ممیز شناور ارسال می‌شوند یا خیر، در صورتی که تابع آرگومان متغیر دریافت کند. با گزینهٔ \&\fB\-mprototype\fR، تنها فراخوانی‌های توابع با آرگومان متغیرِ دارای پیش‌نمونه، این بیت را تنظیم یا پاک می‌کنند. .IP \fB\-msim\fR 4 .IX Item "-msim" در سامانه‌های PowerPC توکار، فرض می‌کند که ماژول راه‌اندازی (startup module) نامش \&\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 تنظیم می‌کند تا نشان دهد از بازنشانی‌های گسترش‌یافتهٔ (extended 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 به این معنی است که پشته در مرز ۸ بایتی هم‌تراز (aligned) می‌شود، تابعی به نام \&\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 توکار، داده‌های سراسری و ایستای کوچکِ مقداردهی‌شدهٔ \&\f(CW\*(C`const\*(C'\fR را در بخش \f(CW\*(C`.sdata2\*(C'\fR قرار می‌دهد که توسط ثبات \f(CW\*(C`r2\*(C'\fR اشاره می‌شود. داده‌های سراسری و ایستای کوچکِ مقداردهی‌شدهٔ غیر\-\f(CW\*(C`const\*(C'\fR را در بخش \f(CW\*(C`.sdata\*(C'\fR قرار می‌دهد که توسط ثبات \f(CW\*(C`r13\*(C'\fR اشاره می‌شود. داده‌های سراسری و ایستای کوچکِ بدون مقدار اولیه را در بخش \f(CW\*(C`.sbss\*(C'\fR قرار می‌دهد که مجاور بخش \f(CW\*(C`.sdata\*(C'\fR است. گزینهٔ \fB\-msdata=eabi\fR با گزینهٔ \fB\-mrelocatable\fR ناسازگار است. گزینهٔ \&\fB\-msdata=eabi\fR همچنین گزینهٔ \fB\-memb\fR را فعال می‌کند. .IP \fB\-msdata=sysv\fR 4 .IX Item "-msdata=sysv" در سامانه‌های System V.4 و PowerPC توکار، داده‌های سراسری و ایستای کوچک را در بخش \f(CW\*(C`.sdata\*(C'\fR قرار می‌دهد که توسط ثبات \&\f(CW\*(C`r13\*(C'\fR اشاره می‌شود. داده‌های سراسری و ایستای کوچکِ مقداردهی‌نشده را در بخش \&\f(CW\*(C`.sbss\*(C'\fR قرار می‌دهد که مجاور بخش \f(CW\*(C`.sdata\*(C'\fR است. گزینهٔ \fB\-msdata=sysv\fR با گزینهٔ \&\fB\-mrelocatable\fR ناسازگار است. .IP \fB\-msdata=default\fR 4 .IX Item "-msdata=default" .PD 0 .IP \fB\-msdata\fR 4 .IX Item "-msdata" .PD در سامانه‌های System V.4 و PowerPC توکار، اگر \fB\-meabi\fR استفاده شود، کد را همانند \fB\-msdata=eabi\fR کامپایل می‌کند، در غیر این صورت کد را همانند \fB\-msdata=sysv\fR کامپایل می‌کند. .IP \fB\-msdata=data\fR 4 .IX Item "-msdata=data" در سامانه‌های System V.4 و PowerPC توکار، داده‌های سراسری کوچک را در بخش \f(CW\*(C`.sdata\*(C'\fR قرار می‌دهد. داده‌های سراسری کوچکِ بدون مقدار اولیه را در بخش \f(CW\*(C`.sbss\*(C'\fR قرار می‌دهد. با این حال، از ثبات \f(CW\*(C`r13\*(C'\fR برای آدرس‌دهی داده‌های کوچک استفاده نمی‌کند. این رفتار پیش‌فرض است مگر اینکه از گزینه‌های دیگر \fB\-msdata\fR استفاده شود. .IP \fB\-msdata=none\fR 4 .IX Item "-msdata=none" .PD 0 .IP \fB\-mno\-sdata\fR 4 .IX Item "-mno-sdata" .PD در سامانه‌های PowerPC توکار، تمام داده‌های سراسری و ایستای مقداردهی‌شده را در بخش \f(CW\*(C`.data\*(C'\fR، و تمام داده‌های مقداردهی‌نشده را در بخش \&\f(CW\*(C`.bss\*(C'\fR قرار می‌دهد. .IP \fB\-mreadonly\-in\-sdata\fR 4 .IX Item "-mreadonly-in-sdata" اشیای فقط‌خواندنی را نیز در بخش \f(CW\*(C`.sdata\*(C'\fR قرار می‌دهد. این حالت پیش‌فرض است. .IP \fB\-mblock\-move\-inline\-limit=\fR\fInum\fR 4 .IX Item "-mblock-move-inline-limit=num" تمام انتقال‌های بلوکی (مانند فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR یا رونوشت‌های ساختار) کمتر یا مساوی با \fInum\fR بایت را درون‌خطی (inline) می‌کند. حداقل مقدار برای \&\fInum\fR در مقصدهای ۳۲ بیتی برابر ۳۲ بایت و در مقصدهای ۶۴ بیتی برابر ۶۴ بایت است. مقدار پیش‌فرض به مقصد بستگی دارد (target\-specific). .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 برابر 0 باشد، تمام گسترش‌های درون‌خطی (حلقه‌ای و بدون حلقه) برای مقایسهٔ بلوکی غیرفعال می‌شود. مقدار پیش‌فرض به مقصد بستگی دارد (target\-specific). .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 برای مقایسهٔ باقیماندهٔ بلوک، مقایسه خواهد شد. مقدار پیش‌فرض به مقصد بستگی دارد (target\-specific)..IP \fB\-mstring\-compare\-inline\-limit=\fR\fInum\fR 4 .IX Item "-mstring-compare-inline-limit=num" حداکثر \fInum\fR بایت رشته را با کد درون‌خطی (inline) مقایسه می‌کند. اگر تفاوت یا پایان رشته در انتهای مقایسهٔ درون‌خطی یافت نشود، یک فراخوانی به \f(CW\*(C`strcmp\*(C'\fR یا \f(CW\*(C`strncmp\*(C'\fR باقی‌ماندهٔ مقایسه را انجام خواهد داد. مقدار پیش‌فرض ۶۴ بایت است. .IP "\fB\-G\fR \fInum\fR" 4 .IX Item "-G num" در سیستم‌های تعبیه‌شدهٔ PowerPC، متغیرها و اقلام سراسری و ایستا (global and static) که کمتر یا مساوی \fInum\fR بایت هستند را به جای بخش‌های معمولی data یا BSS، در بخش‌های دادهٔ کوچک یا BSS کوچک قرار می‌دهد. به‌طور پیش‌فرض، مقدار \fInum\fR برابر با 8 است. سوئیچ \&\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 را به همراه یک \fIجزیرهٔ انشعاب\fR (کد چسباننده) تولید می‌کند. این دو آدرس مقصد نشان‌دهندهٔ تابع فراخوانده‌شده و جزیرهٔ انشعاب هستند. پیونددهندهٔ Darwin/PPC آدرس اول را ترجیح می‌دهد و در صورتی که دستور PPC \f(CW\*(C`bl\*(C'\fR مستقیماً به فراخوانده‌شده برسد، یک \f(CW\*(C`bl callee\*(C'\fR تولید می‌کند؛ در غیر این صورت، پیونددهنده دستور \f(CW\*(C`bl L42\*(C'\fR را برای فراخوانی جزیرهٔ انشعاب تولید می‌نماید. جزیرهٔ انشعاب به انتهای بدنهٔ تابع فراخواننده پیوست می‌شود؛ این بخش آدرس کامل ۳۲ بیتی فراخوانده‌شده را محاسبه کرده و به آن پرش می‌کند. .Sp در سیستم‌های Mach\-O (Darwin)، این گزینه کامپایلر را هدایت می‌کند تا برای هر فراخوانی مستقیم، کد چسباننده را درج نماید و پیونددهندهٔ Darwin تصمیم می‌گیرد که از آن استفاده کند یا آن را دور بیندازد. .Sp در آینده، زمانی که مشخص باشد پیونددهنده کد چسباننده تولید می‌کند، ممکن است GCC تمام مشخصات longcall را نادیده بگیرد. .IP \fB\-mpltseq\fR 4 .IX Item "-mpltseq" .PD 0 .IP \fB\-mno\-pltseq\fR 4 .IX Item "-mno-pltseq" .PD گزینهٔ \-fno\-plt و فراخوانی‌های دور را با استفاده از یک توالی فراخوانی درون‌خطی PLT پیاده‌سازی می‌کند (پیاده‌سازی نمی‌کند) که از پیوند تنبل (lazy linking) و فراخوانی‌های دور به توابع در کتابخانه‌های مشترک بارگذاری‌شده با dlopen پشتیبانی می‌کند. فراخوانی‌های درون‌خطی PLT فقط در سامانه‌های PowerPC64 ELFv2 و PowerPC ۳۲ بیتی با پیونددهنده‌های جدیدتر GNU پشتیبانی می‌شوند، و در صورت شناسایی این پشتیبانی هنگام پیکربندی GCC، به‌طور پیش‌فرض فعال می‌گردند؛ و در مورد PowerPC ۳۲ بیتی، به شرطی که GCC با \fB\-\-enable\-secureplt\fR پیکربندی شده باشد. کدهای کامپایل‌شده با \fB\-mpltseq\fR و اشیاء بازمکان‌یابی‌پذیر (relocatable objects) در PowerPC ۳۲ بیتی با \fB\-mbss\-plt\fR نباید با یکدیگر پیوند داده شوند. .IP \fB\-mtls\-markers\fR 4 .IX Item "-mtls-markers" .PD 0 .IP \fB\-mno\-tls\-markers\fR 4 .IX Item "-mno-tls-markers" .PD فراخوانی‌ها به \f(CW\*(C`_\|_tls_get_addr\*(C'\fR را با یک بازتعیین مکان (relocation) که آرگومان تابع را مشخص می‌کند نشانه‌گذاری می‌کند (نشانه‌گذاری نمی‌کند). این بازتعیین مکان به پیونددهنده اجازه می‌دهد تا فراخوانی تابع را به‌طور قابل اطمینانی با دستورهای آماده‌سازی آرگومان برای بهینه‌سازی TLS مرتبط سازد، که به نوبهٔ خود به GCC امکان می‌دهد توالی را بهتر زمان‌بندی کند. .IP \fB\-mrecip\fR 4 .IX Item "-mrecip" .PD 0 .IP \fB\-mno\-recip\fR 4 .IX Item "-mno-recip" .PD این گزینه استفاده از دستورهای برآورد معکوس و برآورد معکوس جذر را با گام‌های اضافی نیوتون\-رافسون (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" دستورهای تقریب معکوس را برای هر دو دقت یگانه و مضاعف فعال می‌کند. .IP \fBdivf\fR 4 .IX Item "divf" دستورهای تقریب معکوس با دقت یگانه را فعال می‌کند. .IP \fBdivd\fR 4 .IX Item "divd" دستورهای تقریب معکوس با دقت مضاعف را فعال می‌کند. .IP \fBrsqrt\fR 4 .IX Item "rsqrt" دستورهای تقریب معکوس جذر را برای هر دو دقت یگانه و مضاعف فعال می‌کند. .IP \fBrsqrtf\fR 4 .IX Item "rsqrtf" دستورهای تقریب معکوس جذر با دقت یگانه را فعال می‌کند. .IP \fBrsqrtd\fR 4 .IX Item "rsqrtd" دستورهای تقریب معکوس جذر با دقت مضاعف را فعال می‌کند. .RE .RS 4 .Sp بنابراین، به عنوان مثال، \fB\-mrecip=all,!rsqrtd\fR تمام دستورهای برآورد معکوس را به جز دستورهای \&\f(CW\*(C`FRSQRTE\*(C'\fR، \f(CW\*(C`XSRSQRTEDP\*(C'\fR و \f(CW\*(C`XVRSQRTEDP\*(C'\fR که محاسبات معکوس جذر با دقت مضاعف را انجام می‌دهند، فعال می‌کند. .RE .IP \fB\-mrecip\-precision\fR 4 .IX Item "-mrecip-precision" .PD 0 .IP \fB\-mno\-recip\-precision\fR 4 .IX Item "-mno-recip-precision" .PD فرض می‌کند (فرض نمی‌کند) که دستورهای برآورد معکوس، برآوردهایی با دقت بالاتر از آنچه توسط ABI در PowerPC تعیین شده ارائه می‌دهند. انتخاب \fB\-mcpu=power6\fR، \fB\-mcpu=power7\fR یا \&\fB\-mcpu=power8\fR به‌طور خودکار \fB\-mrecip\-precision\fR را انتخاب می‌کند. دستورهای برآورد جذر با دقت مضاعف به‌طور پیش‌فرض در ماشین‌های با دقت پایین تولید نمی‌شوند، زیرا برآوردی که پس از سه مرحله همگرا شود ارائه نمی‌دهند. .IP \fB\-mveclibabi=\fR\fItype\fR 4 .IX Item "-mveclibabi=type" نوع ABI مورد استفاده برای برداری‌سازی توابع درونی (intrinsics) با استفاده از یک کتابخانهٔ خارجی را تعیین می‌کند. تنها نوع پشتیبانی‌شده در حال حاضر \fBmass\fR است که استفاده از کتابخانه‌های 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 هنگامی که از گزینهٔ \&\fB\-funsafe\-math\-optimizations\fR برای بهینه‌سازی گرد کردن مقادیر ممیز شناور به عدد صحیح ۶۴ بیتی و بازگشت آن به ممیز شناور استفاده می‌شود، دستور \f(CW\*(C`friz\*(C'\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 هنگام فراخوانی از طریق اشاره‌گر در سیستم‌های AIX و لینوکس ۶۴ بیتی که در آن‌ها یک اشاره‌گر تابع به توصیف‌گر ۳ کلمه‌ای حاوی آدرس تابع، مقدار TOC برای بارگذاری در ثبات \f(CW\*(C`r2\*(C'\fR، و مقدار زنجیرهٔ ایستا (static chain) برای بارگذاری در ثبات \f(CW\*(C`r11\*(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 در مکان رزروشده پشته در پرولوگ (prologue) تابع، در صورتی که تابع روی سیستم‌های AIX و 64\-bit Linux از طریق یک اشاره‌گر فراخوانی کند. اگر مقدار 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 تولید (عدم تولید) کد برای ارسال پارامترهای ساختار (structure) با حداکثر تراز ۶۴ بیت، جهت سازگاری با نسخه‌های قدیمی‌تر 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 تولید کد محافظت از پشته با استفاده از canary در \fIguard\fR. مکان‌های پشتیبانی‌شده عبارتند از \fBglobal\fR برای canary سراسری یا \fBtls\fR برای canary به ازای هر رشته در بلوک TLS (پیش‌فرض با نسخه 2.4 یا بالاتر GNU libc). .Sp در صورت انتخاب مورد دوم، گزینه‌های \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR و \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR علاوه بر این مشخص می‌کنند که از کدام ثبات به عنوان ثبات پایه برای خواندن canary استفاده شود، و از چه آفستی نسبت به آن ثبات پایه خوانده شود. پیش‌فرض این موارد همان است که در 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 تولید (عدم تولید) حالت‌های آدرس‌دهی با استفاده از دستورالعمل‌های پیشوندی بارگذاری (load) و ذخیره‌سازی (store). گزینه \fB\-mprefixed\fR مستلزم فعال بودن گزینه \fB\-mcpu=power10\fR (یا جدیدتر) است. .IP \fB\-mmma\fR 4 .IX Item "-mmma" .PD 0 .IP \fB\-mno\-mma\fR 4 .IX Item "-mno-mma" .PD تولید (عدم تولید) دستورالعمل‌های MMA. گزینه \fB\-mma\fR مستلزم فعال بودن گزینه \fB\-mcpu=power10\fR (یا جدیدتر) است. .IP \fB\-mrop\-protect\fR 4 .IX Item "-mrop-protect" .PD 0 .IP \fB\-mno\-rop\-protect\fR 4 .IX Item "-mno-rop-protect" .PD تولید (عدم تولید) دستورالعمل‌های محافظت در برابر ROP هنگامی که پردازنده هدف از آن‌ها پشتیبانی می‌کند. در حال حاضر این گزینه بهینه‌سازی shrink\-wrap (\fB\-fshrink\-wrap\fR) را غیرفعال می‌کند. .IP \fB\-mprivileged\fR 4 .IX Item "-mprivileged" .PD 0 .IP \fB\-mno\-privileged\fR 4 .IX Item "-mno-privileged" .PD تولید (عدم تولید) کدی که در وضعیت ممتاز (privileged state) اجرا خواهد شد. .IP \fB\-mblock\-ops\-unaligned\-vsx\fR 4 .IX Item "-mblock-ops-unaligned-vsx" .PD 0 .IP \fB\-mno\-block\-ops\-unaligned\-vsx\fR 4 .IX Item "-mno-block-ops-unaligned-vsx" .PD تولید (عدم تولید) بارگذاری‌ها و ذخیره‌سازی‌های غیرتراز vsx برای گسترش درون‌خطی (inline expansion) توابع \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=" بردارساز (vectorizer) اطلاعات پردازنده هدف را بررسی می‌کند تا تعیین کند که آیا باز کردن (unroll) حلقه برداری اصلی سودمند است یا خیر و تا چه اندازه. این پارامتر حد بالایی میزان باز کردن حلقه اصلی توسط بردارساز را تعیین می‌کند. مقدار پیش‌فرض چهار است. .PP \fIگزینه‌های RX (RX Options)\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" حداکثر اندازه متغیرهای سراسری (global) و ایستا (static) بر حسب بایت را که می‌توانند در ناحیه داده‌های کوچک (small data area) قرار گیرند، مشخص می‌کند. استفاده از ناحیه داده‌های کوچک می‌تواند به کدی کوچک‌تر و سریع‌تر منجر شود، اما اندازه این ناحیه محدود است و برنامه‌نویس باید اطمینان حاصل کند که این ناحیه سرریز نشود. همچنین هنگامی که از ناحیه داده‌های کوچک استفاده می‌شود، یکی از ثبات‌های RX (معمولاً \f(CW\*(C`r13\*(C'\fR) برای اشاره به این ناحیه رزرو می‌شود، در نتیجه دیگر توسط کامپایلر قابل استفاده نخواهد بود. این امر در صورتی که متغیرها به جای نگه‌داری در این ثبات بر روی پشته قرار گیرند، ممکن است به تولید کدی کندتر و/یا بزرگ‌تر بینجامد. .Sp توجه داشته باشید که متغیرهای عمومی یا مقداردهی‌نشده (common variables) و ثابت‌ها در ناحیه داده‌های کوچک قرار نمی‌گیرند زیرا به بخش‌های دیگری در فایل اجرایی خروجی اختصاص می‌یابند. .Sp مقدار پیش‌فرض صفر است که این ویژگی را غیرفعال می‌کند. توجه داشته باشید که این ویژگی به دلیل اثرات بالقوه نامطلوب رزرو یک ثبات، در سطوح بهینه‌سازی بالاتر (\fB\-O2\fR و غیره) به صورت پیش‌فرض فعال نمی‌شود. این وظیفه برنامه‌نویس است که با آزمایش دریابد آیا این قابلیت برای برنامه‌اش مفید است یا خیر. برای توضیحات مربوط به چگونگی انتخاب ثبات واقعی جهت نگه‌داری اشاره‌گر ناحیه داده‌های کوچک، شرح گزینه \fB\-mpid\fR را ببینید. .IP \fB\-msim\fR 4 .IX Item "-msim" .PD 0 .IP \fB\-mno\-sim\fR 4 .IX Item "-mno-sim" .PD استفاده از زمان‌اجرای شبیه‌ساز (simulator runtime). پیش‌فرض استفاده از زمان‌اجرای وابسته به برد در libgloss است. .IP \fB\-mas100\-syntax\fR 4 .IX Item "-mas100-syntax" .PD 0 .IP \fB\-mno\-as100\-syntax\fR 4 .IX Item "-mno-as100-syntax" .PD هنگام تولید خروجی اسمبلی، از نحوی سازگار با اسمبلر AS100 شرکت Renesas استفاده می‌کند. این نحو توسط اسمبلر GAS نیز قابل پردازش است، اما محدودیت‌هایی دارد، بنابراین به طور پیش‌فرض تولید نمی‌شود. .IP \fB\-mmax\-constant\-size=\fR\fIN\fR 4 .IX Item "-mmax-constant-size=N" حداکثر اندازه یک مقدار ثابت بر حسب بایت را مشخص می‌کند که می‌تواند به عنوان عملوند در یک دستورالعمل RX استفاده شود. اگرچه مجموعه دستورالعمل‌های RX اجازه می‌دهد مقادیر ثابت تا طول ۴ بایت در دستورالعمل‌ها استفاده شوند، اما مقدار طولانی‌تر به منزله یک دستورالعمل طولانی‌تر است. بنابراین در برخی شرایط محدود کردن اندازه ثابت‌های مورد استفاده در دستورالعمل‌ها می‌تواند مفید باشد. ثابت‌هایی که بیش از حد بزرگ هستند، در عوض در یک مخزن مقادیر ثابت (constant pool) قرار گرفته و از طریق ارجاع غیرمستقیم ثبات مورد دسترسی قرار می‌گیرند. .Sp مقدار \fIN\fR می‌تواند بین 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" تعداد ثبات‌های رزروشده برای توابع گرداننده وقفه سریع (fast interrupt handler) را مشخص می‌کند. مقدار \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) را حفظ کنند. این کار تنها در صورتی ضروری است که کدهای عادی ممکن است از ثبات انباره استفاده کنند، برای نمونه به این دلیل که ضرب‌های ۶۴ بیتی انجام می‌دهند. حالت پیش‌فرض نادیده‌گرفتن ثبات انباره است چرا که این کار باعث سریع‌تر شدن گرداننده‌های وقفه می‌شود. .IP \fB\-mpid\fR 4 .IX Item "-mpid" .PD 0 .IP \fB\-mno\-pid\fR 4 .IX Item "-mno-pid" .PD تولید داده‌های مستقل از موقعیت (position independent data) را فعال می‌کند. هنگام فعال بودن، هرگونه دسترسی به داده‌های ثابت از طریق یک آفست نسبت به یک آدرس پایه که در یک ثبات نگهداری می‌شود انجام می‌گیرد. این قابلیت اجازه می‌دهد مکان داده‌های ثابت در زمان اجرا تعیین شود بدون اینکه نیازی به بازنشانی مکان (relocate) فایل اجرایی باشد، که مزیتی برای برنامه‌های تعبیه‌شده با محدودیت‌های شدید حافظه است. داده‌هایی که قابل تغییر هستند تحت تأثیر این گزینه قرار نمی‌گیرند. .Sp توجه داشته باشید که استفاده از این ویژگی یک ثبات، معمولاً \f(CW\*(C`r13\*(C'\fR، را برای آدرس پایه داده‌های ثابت رزرو می‌کند. این امر به‌ویژه در توابع پیچیده می‌تواند منجر به ایجاد کدی کندتر و/یا حجیم‌تر شود. .Sp ثبات واقعی انتخاب‌شده برای نگهداری آدرس پایه داده‌های ثابت بستگی به این دارد که گزینه‌های خط فرمان \fB\-msmall\-data\-limit\fR و/یا \&\fB\-mint\-register\fR فعال باشند یا خیر. با شروع از ثبات \f(CW\*(C`r13\*(C'\fR و حرکت رو به پایین، ثبات‌ها ابتدا برای برآورده کردن الزامات \fB\-mint\-register\fR، سپس \fB\-mpid\fR و در نهایت \fB\-msmall\-data\-limit\fR تخصیص می‌یابند. بنابراین، اگر هر دو گزینه \&\fB\-mint\-register=4\fR و \fB\-mpid\fR در خط فرمان مشخص شده باشند، ممکن است ثبات ناحیه داده‌های کوچک \f(CW\*(C`r8\*(C'\fR باشد. .Sp این ویژگی به‌طور پیش‌فرض فعال نیست. حالت پیش‌فرض را می‌توان از طریق گزینه خط فرمان \fB\-mno\-pid\fR بازگرداند. .IP \fB\-mno\-warn\-multiple\-fast\-interrupts\fR 4 .IX Item "-mno-warn-multiple-fast-interrupts" .PD 0 .IP \fB\-mwarn\-multiple\-fast\-interrupts\fR 4 .IX Item "-mwarn-multiple-fast-interrupts" .PD از صدور پیام هشدار توسط GCC در صورتی که هنگام کامپایل یک فایل بیش از یک گرداننده وقفه سریع بیابد، جلوگیری می‌کند. حالت پیش‌فرض صدور هشدار برای هر گرداننده وقفه سریع اضافی یافت‌شده است، چرا که معماری RX تنها از یک وقفه از این نوع پشتیبانی می‌کند. .IP \fB\-mallow\-string\-insns\fR 4 .IX Item "-mallow-string-insns" .PD 0 .IP \fB\-mno\-allow\-string\-insns\fR 4 .IX Item "-mno-allow-string-insns" .PD استفاده از دستورالعمل‌های دستکاری رشته \&\f(CW\*(C`SMOVF\*(C'\fR، \f(CW\*(C`SCMPU\*(C'\fR، \f(CW\*(C`SMOVB\*(C'\fR، \f(CW\*(C`SMOVU\*(C'\fR، \f(CW\*(C`SUNTIL\*(C'\fR، \&\f(CW\*(C`SWHILE\*(C'\fR و همچنین دستورالعمل \f(CW\*(C`RMPA\*(C'\fR را فعال یا غیرفعال می‌کند. این دستورالعمل‌ها ممکن است داده‌ها را از پیش واکشی (prefetch) کنند که در صورت دسترسی به یک ثبات I/O، انجام آن ایمن نیست. (برای اطلاعات بیشتر به بخش 12.2.7 از RX62N Group User\*(Aqs Manual مراجعه کنید). .Sp حالت پیش‌فرض، مجاز دانستن این دستورالعمل‌ها است، اما برای GCC ممکن نیست که تمام شرایطی را که ممکن است از یک دستورالعمل رشته برای دسترسی به یک ثبات I/O استفاده شود به طور مطمئن تشخیص دهد، بنابراین استفاده از آن‌ها نمی‌تواند به‌طور خودکار غیرفعال شود. در عوض، بر عهده برنامه‌نویس است که در صورت دسترسی برنامه‌اش به فضای I/O، از گزینه \fB\-mno\-allow\-string\-insns\fR استفاده کند. .Sp هنگامی که این دستورالعمل‌ها فعال هستند، GCC نماد پیش‌پردازنده C به نام \f(CW\*(C`_\|_RX_ALLOW_STRING_INSNS_\|_\*(C'\fR را تعریف می‌کند، در غیر این صورت نماد \f(CW\*(C`_\|_RX_DISALLOW_STRING_INSNS_\|_\*(C'\fR را تعریف می‌نماید. .IP \fB\-mjsr\fR 4 .IX Item "-mjsr" .PD 0 .IP \fB\-mno\-jsr\fR 4 .IX Item "-mno-jsr" .PD استفاده فقط (یا نه فقط) از دستورالعمل‌های \f(CW\*(C`JSR\*(C'\fR برای دسترسی به توابع. این گزینه زمانی می‌تواند استفاده شود که اندازه کد از دامنهٔ مجاز دستورالعمل‌های \f(CW\*(C`BSR\*(C'\fR فراتر رود. توجه داشته باشید که \fB\-mno\-jsr\fR به معنی استفاده نکردن از \&\f(CW\*(C`JSR\*(C'\fR نیست، بلکه در عوض به این معنی است که می‌توان از هر نوع پرشی (branch) استفاده کرد. .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 در بالاترین کلمه (word) از ناحیه ذخیره ثبات ۹۶/۱۶۰ بایتی قرار داده می‌شود. .Sp به‌طور کلی، کدی که با \fB\-mbackchain\fR کامپایل شده باشد از نظر فراخوانی با کدی که با \fB\-mno\-backchain\fR کامپایل شده سازگار (call\-compatible) است؛ با این حال، استفاده از 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 نیز اعمال شده باشد، بالاترین کلمه (word) ناحیه ذخیره‌سازی همیشه برای ذخیره 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 for S/390 تولید می‌شود. زمانی که \fB\-m64\fR مشخص شود، کدی سازگار با ABI مربوط به GNU/Linux for 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 for S/390، پیش‌فرض \fB\-mesa\fR است. هنگام تولید کدی سازگار با ABI مربوط به GNU/Linux for 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\-mhtm\fR هنگام استفاده از \fB\-march=zEC12\fR به‌طور پیش‌فرض فعال است. .IP \fB\-mvx\fR 4 .IX Item "-mvx" .PD 0 .IP \fB\-mno\-vx\fR 4 .IX Item "-mno-vx" .PD هنگامی که \fB\-mvx\fR مشخص شود، کد با استفاده از دستورالعمل‌های ارائه‌شده در امکان افزونهٔ برداری (vector extension facility) معرفی‌شده با نسل ماشین‌های IBM z13 تولید می‌شود. این گزینه ABI را برای برخی از مقادیر نوع برداری با توجه به ترازسازی (alignment) و قراردادهای فراخوانی (calling conventions) تغییر می‌دهد. در صورتی که مقادیر نوع برداری در زمینه‌ای مرتبط با ABI به کار روند، یک دستور GAS \fB.gnu_attribute\fR برای علامت‌گذاری باینری حاصل با ABI مربوطه اضافه خواهد شد. \&\fB\-mvx\fR هنگام استفاده از \fB\-march=z13\fR به‌طور پیش‌فرض فعال است. .IP \fB\-mzvector\fR 4 .IX Item "-mzvector" .PD 0 .IP \fB\-mno\-zvector\fR 4 .IX Item "-mno-zvector" .PD گزینهٔ \fB\-mzvector\fR افزونه‌های زبان برداری و توابع درونی را با استفاده از دستورالعمل‌های موجود در امکان افزونهٔ برداری معرفی‌شده با نسل ماشین‌های IBM z13 فعال می‌کند. این گزینه پشتیبانی از کلمهٔ کلیدی \fBvector\fR را جهت تعریف متغیرها و آرگومان‌های نوع برداری اضافه می‌نماید. \fBvector\fR تنها زمانی در دسترس است که افزونه‌های GNU فعال باشند؛ و در صورت درخواست انطباق سخت‌گیرانه با استانداردها مثلاً با \fB\-std=c99\fR، بسط داده نخواهد شد. افزون بر توابع درونی سطح پایین GCC، گزینهٔ \fB\-mzvector\fR مجموعه‌ای از توابع درونی را که جهت سازگاری با پیاده‌سازی‌های سبک AltiVec مانند Power و Cell اضافه شده‌اند، فعال می‌کند. به‌منظور استفاده از این توابع درونی، فایل سرایند \fIvecintrin.h\fR باید گنجانده (include) شود. \&\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 برای انجام جابه‌جایی‌های بلوکی (block moves). وقتی \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" تنظیم دقیق (Tune) همهٔ موارد مرتبط در کد تولیدشده برای \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 را برای روتین‌های ردگیری (trace routines) در سیستم‌عامل اضافه کند (یا اضافه نکند). این گزینه به‌طور پیش‌فرض غیرفعال است، حتی هنگام کامپایل برای 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 تولید کدی که از دستورالعمل‌های ضرب و تجمیع ممیز شناور (floating\-point multiply and accumulate) استفاده می‌کند (یا استفاده نمی‌کند). در صورت استفاده از ممیز شناور سخت‌افزاری، این دستورالعمل‌ها به‌طور پیش‌فرض تولید می‌شوند. .IP \fB\-mwarn\-framesize=\fR\fIframesize\fR 4 .IX Item "-mwarn-framesize=framesize" صادر کردن هشدار در صورتی که اندازه فریم تابع فعلی از \fIframesize\fR داده‌شده فراتر رود. از آنجا که این یک بررسی در زمان کامپایل است، لزوماً به این معنی نیست که هنگام اجرای برنامه مشکلی واقعی رخ دهد. این گزینه با هدف شناسایی توابعی در نظر گرفته شده که به احتمال بسیار زیاد باعث سرریز پشته (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 اگر این گزینه‌ها فراهم شوند، بخش پشتیبانی (back end) مربوط به S/390 دستورالعمل‌های اضافه‌ای در مقدمهٔ تابع (function prologue) صادر می‌کند که در صورت فراتر رفتن اندازهٔ پشته به میزان \fIstack\-guard\fR بایت بالاتر از \fIstack\-size\fR، یک تله (trap) فعال می‌شود (به یاد داشته باشید که پشته در S/390 به سمت پایین رشد می‌کند). چنانچه گزینهٔ \fIstack\-guard\fR حذف شود، کوچک‌ترین توان ۲ که بزرگ‌تر از اندازهٔ فریم تابع کامپایل‌شده باشد انتخاب می‌گردد. این گزینه‌ها برای کمک به اشکال‌زدایی مشکلات سرریز پشته طراحی شده‌اند. کد اضافه تولیدشده سربار ناچیزی ایجاد می‌کند و از این رو می‌توان از آن در سیستم‌های محیط عملیاتی (production) نیز بدون افت محسوس کارایی بهره برد. مقادیر مشخص‌شده باید دقیقاً توان‌هایی از ۲ باشند و \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، حداکثر ۱۰۰۰۰۰۰) قرار می‌گیرد. پس از برچسب، ۲ * \fIpost\-halfwords\fR بایت با استفاده از بزرگ‌ترین دستورالعمل‌های مشابه NOP که معماری اجازه می‌دهد افزوده می‌شود (حداکثر ۱۰۰۰۰۰۰). .Sp اگر هر دو آرگومان صفر باشند، hotpatching غیرفعال می‌شود. .Sp این گزینه می‌تواند برای توابع مجزا با استفاده از مشخصهٔ \&\f(CW\*(C`hotpatch\*(C'\fR نادیده گرفته و بازنویسی (override) شود. .PP \fIگزینه‌های SH (SH Options)\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 به گونه‌ای که از واحد ممیز شناور (FPU) استفاده نشود..IP \fB\-m2a\-single\-only\fR 4 .IX Item "-m2a-single-only" تولید کد برای SH2a\-FPU به‌گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف (double\-precision) استفاده نشود. .IP \fB\-m2a\-single\fR 4 .IX Item "-m2a-single" تولید کد برای SH2a\-FPU با این فرض که واحد ممیز شناور به‌طور پیش‌فرض در حالت دقت یگانه (single\-precision) قرار دارد. .IP \fB\-m2a\fR 4 .IX Item "-m2a" تولید کد برای SH2a\-FPU با این فرض که واحد ممیز شناور به‌طور پیش‌فرض در حالت دقت مضاعف قرار دارد. .IP \fB\-m3\fR 4 .IX Item "-m3" تولید کد برای SH3. .IP \fB\-m3e\fR 4 .IX Item "-m3e" تولید کد برای SH3e. .IP \fB\-m4\-nofpu\fR 4 .IX Item "-m4-nofpu" تولید کد برای SH4 بدون واحد ممیز شناور. .IP \fB\-m4\-single\-only\fR 4 .IX Item "-m4-single-only" تولید کد برای SH4 با یک واحد ممیز شناور که تنها از محاسبات با دقت یگانه پشتیبانی می‌کند. .IP \fB\-m4\-single\fR 4 .IX Item "-m4-single" تولید کد برای SH4 با این فرض که واحد ممیز شناور به‌طور پیش‌فرض در حالت دقت یگانه قرار دارد. .IP \fB\-m4\fR 4 .IX Item "-m4" تولید کد برای SH4. .IP \fB\-m4\-100\fR 4 .IX Item "-m4-100" تولید کد برای SH4\-100. .IP \fB\-m4\-100\-nofpu\fR 4 .IX Item "-m4-100-nofpu" تولید کد برای SH4\-100 به‌گونه‌ای که از واحد ممیز شناور استفاده نشود. .IP \fB\-m4\-100\-single\fR 4 .IX Item "-m4-100-single" تولید کد برای SH4\-100 با این فرض که واحد ممیز شناور به‌طور پیش‌فرض در حالت دقت یگانه قرار دارد. .IP \fB\-m4\-100\-single\-only\fR 4 .IX Item "-m4-100-single-only" تولید کد برای SH4\-100 به‌گونه‌ای که هیچ عملیات ممیز شناور با دقت مضاعف استفاده نشود. .IP \fB\-m4\-200\fR 4 .IX Item "-m4-200" تولید کد برای SH4\-200. .IP \fB\-m4\-200\-nofpu\fR 4 .IX Item "-m4-200-nofpu" تولید کد برای SH4\-200 به‌گونه‌ای که از واحد ممیز شناور استفاده نشود. .IP \fB\-m4\-200\-single\fR 4 .IX Item "-m4-200-single" تولید کد برای SH4\-200 با این فرض که واحد ممیز شناور به‌طور پیش‌فرض در حالت دقت یگانه قرار دارد. .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" تراز کردن متغیرهای ممیز شناور مضاعف (doubles) در مرزهای ۶۴ بیتی. توجه داشته باشید که این کار قراردادهای فراخوانی (calling conventions) را تغییر می‌دهد و بنابراین برخی از توابع کتابخانه استاندارد C کار نخواهند کرد مگر اینکه ابتدا آن را با \fB\-mdalign\fR بازکامپایل کنید. .IP \fB\-mrelax\fR 4 .IX Item "-mrelax" کوتاه کردن برخی از ارجاعات آدرس در زمان پیوند در صورت امکان؛ از گزینه \fB\-relax\fR در پیونددهنده استفاده می‌کند. .IP \fB\-mbigtable\fR 4 .IX Item "-mbigtable" استفاده از آفست‌های ۳۲ بیتی در جدول‌های \f(CW\*(C`switch\*(C'\fR. پیش‌فرض استفاده از آفست‌های ۱۶ بیتی است. .IP \fB\-mbitops\fR 4 .IX Item "-mbitops" فعال‌سازی استفاده از دستورالعمل‌های دستکاری بیت روی SH2A. .IP \fB\-mfmovd\fR 4 .IX Item "-mfmovd" فعال‌سازی استفاده از دستورالعمل \f(CW\*(C`fmovd\*(C'\fR. برای محدودیت‌های تراز، \fB\-mdalign\fR را بررسی کنید. .IP \fB\-mrenesas\fR 4 .IX Item "-mrenesas" سازگاری با قراردادهای فراخوانی تعریف‌شده توسط Renesas. .IP \fB\-mno\-renesas\fR 4 .IX Item "-mno-renesas" سازگاری با قراردادهای فراخوانی تعریف‌شده برای GCC پیش از ارائه قراردادهای Renesas. این گزینه برای تمام مقصدهای زنجیره ابزار SH پیش‌فرض است. .IP \fB\-mnomacsave\fR 4 .IX Item "-mnomacsave" علامت‌گذاری ثبات \f(CW\*(C`MAC\*(C'\fR به عنوان تخریب‌شده حین فراخوانی (call\-clobbered)، حتی اگر \fB\-mrenesas\fR داده شده باشد. .IP \fB\-mieee\fR 4 .IX Item "-mieee" .PD 0 .IP \fB\-mno\-ieee\fR 4 .IX Item "-mno-ieee" .PD کنترل انطباق مقایسه‌های ممیز شناور با استاندارد IEEE، که بر نحوه مدیریت مواردی که نتیجه مقایسه نامرتب (unordered) است تأثیر می‌گذارد. به‌طور پیش‌فرض \&\fB\-mieee\fR به صورت ضمنی فعال است. اگر \fB\-ffinite\-math\-only\fR فعال باشد، \fB\-mno\-ieee\fR به صورت ضمنی تنظیم می‌شود که منجر به مقایسه‌های سریع‌تر بزرگ‌تر مساوی و کوچک‌تر مساوی در ممیز شناور می‌گردد. تنظیمات ضمنی را می‌توان با تعیین صریح \fB\-mieee\fR یا \fB\-mno\-ieee\fR بازنویسی کرد. .IP \fB\-minline\-ic_invalidate\fR 4 .IX Item "-minline-ic_invalidate" درون‌خط‌سازی کد برای باطل‌کردن مدخل‌های حافظه نهان دستورالعمل (instruction cache) پس از راه‌اندازی ترامپولین‌های توابع تو‌در‌تو. این گزینه اگر \fB\-musermode\fR برقرار باشد و گزینه تولید کد انتخابی (مانند \fB\-m4\fR) اجازه استفاده از دستورالعمل \f(CW\*(C`icbi\*(C'\fR را ندهد، هیچ تأثیری ندارد. اگر گزینه تولید کد انتخابی اجازه استفاده از دستورالعمل \f(CW\*(C`icbi\*(C'\fR را ندهد و \fB\-musermode\fR برقرار نباشد، کد درون‌خط‌شده مستقیماً آرایه آدرس حافظه نهان دستورالعمل را با نوشتن انجمنی (associative write) دستکاری می‌کند. این امر نه‌تنها در زمان اجرا به حالت ممتاز (privileged mode) نیاز دارد، بلکه در صورتی که خط حافظه نهان از طریق TLB نگاشت شده و سپس نگاشت آن حذف شده باشد نیز با شکست مواجه می‌شود. .IP \fB\-misize\fR 4 .IX Item "-misize" ثبت اندازه و مکان دستورالعمل در کد اسمبلی. .IP \fB\-mpadstruct\fR 4 .IX Item "-mpadstruct" این گزینه منسوخ شده است. این گزینه ساختارها را تا مضربی از ۴ بایت تراز/پر (pad) می‌کند، که با SH ABI ناسازگار است. .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" تولید توالی‌های اتمی نرم‌افزاری که از یک متغیر در بلوک کنترل نخ (thread control block) استفاده می‌کنند. این گونه‌ای از توالی‌های gUSA است که می‌تواند روی مقصدهای SH1* و SH2* نیز استفاده شود. توالی‌های اتمی تولیدشده نیازمند پشتیبانی اضافی از طرف کد مدیریت وقفه/استثنای سیستم هستند و تنها برای سیستم‌های تک‌هسته‌ای مناسب‌اند. هنگام استفاده از این مدل، پارامتر \fBgbr\-offset=\fR نیز باید مشخص شود..IP \fBsoft\-imask\fR 4 .IX Item "soft-imask" توالی‌های اتمیک نرم‌افزاری تولید می‌کند که با تنظیم \f(CW\*(C`SR.IMASK = 1111\*(C'\fR وقفه‌ها را موقتاً غیرفعال می‌کنند. این مدل تنها زمانی کار می‌کند که برنامه در حالت ممتاز (privileged mode) اجرا شود و فقط برای سیستم‌های تک‌هسته‌ای مناسب است. پشتیبانی اضافی از سوی کد مدیریت وقفه/استثنای سیستم مورد نیاز نیست. این مدل به‌طور پیش‌فرض زمانی که هدف \&\f(CW\*(C`sh*\-*\-linux*\*(C'\fR و SH1* یا SH2* باشد فعال است. .IP \fBhard\-llcs\fR 4 .IX Item "hard-llcs" توالی‌های اتمیک سخت‌افزاری را تنها با استفاده از دستورالعمل‌های \f(CW\*(C`movli.l\*(C'\fR و \f(CW\*(C`movco.l\*(C'\fR تولید می‌کند. این گزینه فقط در SH4A موجود است و برای سیستم‌های چند‌هسته‌ای مناسب است. از آن‌جا که دستورالعمل‌های سخت‌افزاری تنها از متغیرهای اتمیک ۳۲ بیتی پشتیبانی می‌کنند، دسترسی به متغیرهای ۸ یا ۱۶ بیتی با دسترسی‌های ۳۲ بیتی شبیه‌سازی می‌شود. کدی که با این گزینه کامپایل شده است، در صورت اجرا بر روی یک سیستم SH4A، با سایر سیستم‌های مدیریت وقفه/استثنای مدل اتمیک نرم‌افزاری نیز سازگار است. برای این مدل پشتیبانی اضافی از سوی کد مدیریت وقفه/استثنای سیستم مورد نیاز نیست. .IP \fBgbr\-offset=\fR 4 .IX Item "gbr-offset=" این پارامتر آفست متغیر را بر حسب بایت در ساختار بلوک کنترل رشته (thread control block) مشخص می‌کند که باید توسط توالی‌های اتمیک تولید‌شده، هنگامی که مدل \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 تولید می‌کند. توجه داشته باشید که بسته به پیکربندی سخت‌افزاری و نرم‌افزاری خاص، این کار می‌تواند به دلیل تخلیه خطوط حافظهٔ پنهان عملوند که توسط دستورالعمل \f(CW\*(C`tas.b\*(C'\fR تحمیل می‌شود، کارایی کلی را کاهش دهد. در پردازنده‌های چند‌هسته‌ای SH4A، دستورالعمل \f(CW\*(C`tas.b\*(C'\fR باید با احتیاط استفاده شود زیرا می‌تواند در برخی پیکربندی‌های حافظهٔ پنهان منجر به خرابی داده‌ها شود. .IP \fB\-mprefergot\fR 4 .IX Item "-mprefergot" هنگام تولید کد مستقل از موقعیت، فراخوانی‌های توابع را به جای جدول پیوند رویه (Procedure Linkage Table) با استفاده از جدول آفست سراسری (Global Offset 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 همچنین در صورتی که کد درون‌خطی‌شده در حالت کاربر کار نکند، مستلزم \fB\-mno\-inline\-ic_invalidate\fR است. گزینهٔ \fB\-musermode\fR زمانی که هدف \f(CW\*(C`sh*\-*\-linux*\*(C'\fR باشد پیش‌فرض است. اگر هدف SH1* یا SH2* باشد، \&\fB\-musermode\fR هیچ تأثیری ندارد، زیرا حالت کاربر وجود ندارد. .IP \fB\-multcost=\fR\fInumber\fR 4 .IX Item "-multcost=number" هزینه‌ای را که برای دستورالعمل ضرب در نظر گرفته می‌شود تعیین می‌کند. .IP \fB\-mdiv=\fR\fIstrategy\fR 4 .IX Item "-mdiv=strategy" راهبرد تقسیم را برای استفاده در عملیات تقسیم عدد صحیح تعیین می‌کند. \&\fIstrategy\fR می‌تواند یکی از موارد زیر باشد: .RS 4 .IP \fBcall\-div1\fR 4 .IX Item "call-div1" یک تابع کتابخانه‌ای را فراخوانی می‌کند که از دستورالعمل تقسیم تک‌مرحله‌ای \&\f(CW\*(C`div1\*(C'\fR برای انجام عملیات استفاده می‌کند. تقسیم بر صفر یک نتیجهٔ نامشخص را محاسبه می‌کند و تله (trap) ایجاد نمی‌کند. این حالت به‌جز برای SH4، SH2A و SHcompact پیش‌فرض است. .IP \fBcall\-fp\fR 4 .IX Item "call-fp" یک تابع کتابخانه‌ای را فراخوانی می‌کند که عملیات را در ممیز شناور با دقت مضاعف انجام می‌دهد. تقسیم بر صفر موجب بروز یک استثنای ممیز شناور می‌شود. این حالت برای SHcompact دارای FPU پیش‌فرض است. مشخص کردن این مورد برای اهدافی که FPU با دقت مضاعف ندارند، به طور پیش‌فرض به \f(CW\*(C`call\-div1\*(C'\fR برمی‌گردد. .IP \fBcall\-table\fR 4 .IX Item "call-table" یک تابع کتابخانه‌ای را فراخوانی می‌کند که از یک جدول جستجو برای مقسوم‌علیه‌های کوچک و از دستورالعمل \f(CW\*(C`div1\*(C'\fR با تفکیک حالت برای مقسوم‌علیه‌های بزرگ‌تر استفاده می‌کند. تقسیم بر صفر یک نتیجهٔ نامشخص را محاسبه می‌کند و تله ایجاد نمی‌کند. این حالت برای SH4 پیش‌فرض است. مشخص کردن این مورد برای اهدافی که فاقد دستورالعمل‌های شیفت پویا هستند به طور پیش‌فرض به \f(CW\*(C`call\-div1\*(C'\fR برمی‌گردد. .RE .RS 4 .Sp هنگامی که راهبرد تقسیمی مشخص نشده باشد، راهبرد پیش‌فرض بر اساس هدف فعلی انتخاب می‌شود. برای SH2A، راهبرد پیش‌فرض استفاده از دستورالعمل‌های \f(CW\*(C`divs\*(C'\fR و \f(CW\*(C`divu\*(C'\fR به جای فراخوانی‌های توابع کتابخانه‌ای است. .RE .IP \fB\-maccumulate\-outgoing\-args\fR 4 .IX Item "-maccumulate-outgoing-args" فضا را یک‌بار در مقدمهٔ تابع (function prologue) برای آرگومان‌های خروجی اختصاص می‌دهد، به جای آن‌که در اطراف هر فراخوانی فضا اختصاص داده شود. این کار عموماً برای کارایی و اندازه مفید است. همچنین برای باز کردن پشته (unwinding) جهت جلوگیری از تغییر قاب پشته در اطراف کد شرطی لازم است. .IP \fB\-mdivsi3_libfunc=\fR\fIname\fR 4 .IX Item "-mdivsi3_libfunc=name" نام تابع کتابخانه‌ایِ مورداستفاده برای تقسیم علامت‌دار ۳۲ بیتی را روی \&\fIname\fR تنظیم می‌کند. این مورد فقط بر نام استفاده‌شده در راهبردهای تقسیم \fBcall\fR تأثیر می‌گذارد، و کامپایلر همچنان همان مجموعه‌های ثبات‌های ورودی/خروجی/تغییریافته را انتظار دارد که گویی این گزینه وجود نداشته است. .IP \fB\-mfixed\-range=\fR\fIregister\-range\fR 4 .IX Item "-mfixed-range=register-range" کدی تولید می‌کند که با محدودهٔ ثبات داده‌شده به عنوان ثبات‌های ثابت (fixed registers) رفتار می‌کند. یک ثبات ثابت ثباتی است که تخصیص‌دهندهٔ ثبات نمی‌تواند از آن استفاده کند. این گزینه هنگام کامپایل کردن کد کرنل مفید است. یک محدودهٔ ثبات به صورت دو ثبات که با یک خط تیره جدا شده‌اند مشخص می‌شود. می‌توان چندین محدودهٔ ثبات را با کاما جدا کرده و مشخص نمود. .IP \fB\-mbranch\-cost=\fR\fInum\fR 4 .IX Item "-mbranch-cost=num" مقدار \fInum\fR را به عنوان هزینه برای یک دستورالعمل پرش در نظر می‌گیرد. مقادیر بزرگ‌تر باعث می‌شوند کامپایلر در صورت امکان سعی کند کد بدون پرش بیشتری تولید کند. اگر مشخص نشود، این مقدار بسته به نوع پردازنده‌ای که برای آن کامپایل می‌شود انتخاب خواهد شد. .IP \fB\-mzdcbranch\fR 4 .IX Item "-mzdcbranch" .PD 0 .IP \fB\-mno\-zdcbranch\fR 4 .IX Item "-mno-zdcbranch" .PD فرض می‌کند (فرض نمی‌کند) که دستورالعمل‌های پرش شرطی با جابه‌جایی صفر (zero displacement) \&\f(CW\*(C`bt\*(C'\fR و \f(CW\*(C`bf\*(C'\fR سریع هستند. اگر \fB\-mzdcbranch\fR مشخص شود، کامپایلر توالی‌های کد پرش با جابه‌جایی صفر را ترجیح می‌دهد. این گزینه هنگام تولید کد برای SH4 و SH4A به‌طور پیش‌فرض فعال است. می‌توان آن را با مشخص کردن \fB\-mno\-zdcbranch\fR به‌طور صریح غیرفعال کرد. .IP \fB\-mcbranch\-force\-delay\-slot\fR 4 .IX Item "-mcbranch-force-delay-slot" استفاده از شکاف‌های تأخیر (delay slots) را برای پرش‌های شرطی اجباری می‌کند، که در صورت نیافتن دستورالعمل مناسب، شکاف تأخیر را با یک \f(CW\*(C`nop\*(C'\fR پر می‌کند. این گزینه به‌طور پیش‌فرض غیرفعال است. می‌توان آن را برای دور زدن باگ‌های سخت‌افزاری، مانند آنچه در SH7055 اولیه یافت شد، فعال کرد. .IP \fB\-mfused\-madd\fR 4 .IX Item "-mfused-madd" .PD 0 .IP \fB\-mno\-fused\-madd\fR 4 .IX Item "-mno-fused-madd" .PD کدی تولید می‌کند که از دستورالعمل‌های ضرب و انباشت ممیز شناور استفاده می‌کند (استفاده نمی‌کند). این دستورالعمل‌ها در صورت استفاده از ممیز شناور سخت‌افزاری به‌طور پیش‌فرض تولید می‌شوند. گزینهٔ وابسته به ماشین \&\fB\-mfused\-madd\fR اکنون به گزینهٔ مستقل از ماشین \&\fB\-ffp\-contract=fast\fR نگاشت شده است، و \fB\-mno\-fused\-madd\fR به \fB\-ffp\-contract=off\fR نگاشت می‌شود. .IP \fB\-mfsca\fR 4 .IX Item "-mfsca" .PD 0 .IP \fB\-mno\-fsca\fR 4 .IX Item "-mno-fsca" .PD به کامپایلر اجازه می‌دهد یا نمی‌دهد که دستورالعمل \f(CW\*(C`fsca\*(C'\fR را برای تقریب سینوس و کسینوس صادر کند. گزینهٔ \fB\-mfsca\fR باید در ترکیب با \fB\-funsafe\-math\-optimizations\fR استفاده شود. هنگام تولید کد برای SH4A این گزینه به‌طور پیش‌فرض فعال است. استفاده از \fB\-mno\-fsca\fR تقریب‌های سینوس و کسینوس را حتی در صورت فعال بودن \fB\-funsafe\-math\-optimizations\fR غیرفعال می‌کند. .IP \fB\-mfsrra\fR 4 .IX Item "-mfsrra" .PD 0 .IP \fB\-mno\-fsrra\fR 4 .IX Item "-mno-fsrra" .PD به کامپایلر اجازه می‌دهد یا نمی‌دهد که دستورالعمل \f(CW\*(C`fsrra\*(C'\fR را برای تقریب‌های وارون ریشه دوم صادر کند. گزینهٔ \fB\-mfsrra\fR باید در ترکیب با \fB\-funsafe\-math\-optimizations\fR و \&\fB\-ffinite\-math\-only\fR استفاده شود. هنگام تولید کد برای SH4A به‌طور پیش‌فرض فعال است. استفاده از \fB\-mno\-fsrra\fR تقریب‌های وارون ریشه دوم را حتی اگر \fB\-funsafe\-math\-optimizations\fR و \fB\-ffinite\-math\-only\fR برقرار باشند غیرفعال می‌کند. .IP \fB\-mpretend\-cmove\fR 4 .IX Item "-mpretend-cmove" پرش‌های شرطی با جابه‌جایی صفر را برای الگوهای دستورالعمل انتقال شرطی (conditional move) ترجیح می‌دهد. این کار می‌تواند منجر به کد سریع‌تری در پردازنده SH4 شود. .IP \fB\-mfdpic\fR 4 .IX Item "-mfdpic" با استفاده از ABI مربوط به FDPIC کد تولید می‌کند. .PP \fIگزینه‌های Solaris 2\fR .IX Subsection "Solaris 2 Options" .PP این گزینه‌های \fB\-m\fR در Solaris 2 پشتیبانی می‌شوند: .IP \fB\-mclear\-hwcap\fR 4 .IX Item "-mclear-hwcap" گزینهٔ \&\fB\-mclear\-hwcap\fR به کامپایلر می‌گوید قابلیت‌های سخت‌افزاری تولیدشده توسط اسمبلر Solaris را حذف کند. این گزینه تنها زمانی ضروری است که فایل‌های شیء از افزونه‌های ISA استفاده کنند که توسط ماشین فعلی پشتیبانی نمی‌شود، اما در زمان اجرا بررسی می‌کنند که آیا باید از آن‌ها استفاده شود یا خیر. .IP \fB\-mimpure\-text\fR 4 .IX Item "-mimpure-text" گزینهٔ \&\fB\-mimpure\-text\fR، هنگامی که علاوه بر \fB\-shared\fR استفاده شود، به کامپایلر می‌گوید هنگام پیوند یک شیء اشتراکی، گزینهٔ \fB\-z text\fR را به پیونددهنده ارسال نکند. با استفاده از این گزینه، می‌توانید کد وابسته به موقعیت را در یک شیء اشتراکی پیوند دهید. .Sp گزینهٔ \&\fB\-mimpure\-text\fR پیام خطای پیونددهنده مبنی بر \(lqrelocations remain against allocatable but non\-writable sections\(rq را سرکوب می‌کند. با این حال، بازنشانی‌های لازم موجب کپی در هنگام نوشتن (copy\-on\-write) می‌شوند، و شیء اشتراکی عملاً میان فرایندها به اشتراک گذاشته نمی‌شود. به جای استفاده از \fB\-mimpure\-text\fR، باید تمام کدهای منبع را با \&\fB\-fpic\fR یا \fB\-fPIC\fR کامپایل کنید..PP این گزینه‌ها علاوه بر موارد بالا در Solaris 2 پشتیبانی می‌شوند: .IP \fB\-pthreads\fR 4 .IX Item "-pthreads" این گزینه مترادفی برای \fB\-pthread\fR است. .PP \fIگزینه‌های SPARC\fR .IX Subsection "SPARC Options" .PP این گزینه‌های \fB\-m\fR روی SPARC پشتیبانی می‌شوند: .IP \fB\-mno\-app\-regs\fR 4 .IX Item "-mno-app-regs" .PD 0 .IP \fB\-mapp\-regs\fR 4 .IX Item "-mapp-regs" .PD مشخص کردن \fB\-mapp\-regs\fR خروجی را با استفاده از ثبات‌های سراسری (global registers) ۲ تا ۴ تولید می‌کند؛ ثبات‌هایی که SPARC SVR4 ABI آن‌ها را برای برنامه‌های کاربردی رزرو کرده است. مشابه ثبات سراسری ۱، با هر یک از ثبات‌های سراسری ۲ تا ۴ به عنوان ثباتی تخصیص‌پذیر رفتار می‌شود که با فراخوانی توابع بازنویسی (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 را تولید نمی‌کند و از یک مدل «مسطح» یا پنجرهٔ ثبات منفرد استفاده می‌کند. این مدل با مدل معمول پنجرهٔ ثبات سازگار است. با ثبات‌های محلی و ثبات‌های ورودی (۰ تا ۵) همچنان به عنوان ثبات‌های «ذخیره‌شده در فراخوانی» (call\-saved) رفتار می‌شود و در صورت نیاز روی پشته ذخیره می‌شوند. .Sp با \fB\-mno\-flat\fR (حالت پیش‌فرض)، کامپایلر دستورالعمل‌های save/restore را تولید می‌کند (به‌جز برای توابع برگ یا leaf functions). این حالت کاری عادی است. .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" تولید خروجی حاوی دستورالعمل‌های ممیز شناور چهارکلمه‌ای یا quad\-word (از نوع long double). .IP \fB\-msoft\-quad\-float\fR 4 .IX Item "-msoft-quad-float" تولید خروجی حاوی فراخوانی‌های کتابخانه‌ای برای دستورالعمل‌های ممیز شناور چهارکلمه‌ای (long double). توابع فراخوانی‌شده مواردی هستند که در SPARC ABI مشخص شده‌اند. این حالت پیش‌فرض است. .Sp تا زمان نگارش این متن، هیچ پیاده‌سازی از SPARC وجود ندارد که از دستورالعمل‌های ممیز شناور چهارکلمه‌ای به صورت سخت‌افزاری پشتیبانی کند. همهٔ آن‌ها برای یکی از این دستورالعمل‌ها یک گردانندهٔ تله (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ها دارای هم‌ترازی ۸ بایتی هستند. این حالت پیش‌فرض است. .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، کامپایلر کدهای کنترلی را در توابعی که ساختارها یا اجتماع‌ها (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 این است که کامپایلر دستورالعمل‌های ضرب عدد صحیح و تقسیم عدد صحیح را که در 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 تولید می‌کند. این مورد دستورالعمل‌های انتقال ۶۴ بیتی عدد صحیح و ممیز شناور، ۳ ثبات کد وضعیت ممیز شناور اضافی، و دستورالعمل‌های انتقال شرطی (conditional 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 در این است که ثبات‌های سراسری و خروجی، ۶۴ بیتی در نظر گرفته می‌شوند. این گزینه به‌طور پیش‌فرض در 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 کدی تولید می‌کند که از دستورالعمل‌های Compare\-and\-Branch\-on\-Condition در UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از چنین دستورالعمل‌هایی پشتیبانی می‌کند (مانند Niagara\-4 و بعد از آن)، مقدار پیش‌فرض \fB\-mcbcond\fR است. .IP \fB\-mfmaf\fR 4 .IX Item "-mfmaf" .PD 0 .IP \fB\-mno\-fmaf\fR 4 .IX Item "-mno-fmaf" .PD با \fB\-mfmaf\fR، کامپایلر GCC کدی تولید می‌کند که از دستورالعمل‌های ممیز شناور Fused Multiply\-Add در 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) بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از نسخه‌های معماری V8 یا V9 به همراه FPU پشتیبانی می‌کند، مقدار پیش‌فرض \fB\-mfsmuld\fR است، به‌جز در صورت استفاده از \fB\-mcpu=leon\fR. .IP \fB\-mpopc\fR 4 .IX Item "-mpopc" .PD 0 .IP \fB\-mno\-popc\fR 4 .IX Item "-mno-popc" .PD با \fB\-mpopc\fR، کامپایلر GCC کدی تولید می‌کند که از دستورالعمل شمارش جمعیت (Population Count) در UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از چنین دستورالعملی پشتیبانی می‌کند (مانند Niagara\-2 و بعد از آن)، مقدار پیش‌فرض \fB\-mpopc\fR است. .IP \fB\-msubxc\fR 4 .IX Item "-msubxc" .PD 0 .IP \fB\-mno\-subxc\fR 4 .IX Item "-mno-subxc" .PD با \fB\-msubxc\fR، کامپایلر GCC کدی تولید می‌کند که از دستورالعمل تفریق گسترش‌یافته با رقم نقلی (Subtract\-Extended\-with\-Carry) در UltraSPARC بهره می‌برد. هنگام هدف قرار دادن پردازنده‌ای که از چنین دستورالعملی پشتیبانی می‌کند (مانند Niagara\-7 و بعد از آن)، مقدار پیش‌فرض \fB\-msubxc\fR است. .IP \fB\-mfix\-at697f\fR 4 .IX Item "-mfix-at697f" راهکار مستندشده برای تک‌خطای سخت‌افزاری (erratum) پردازندهٔ Atmel AT697F (که متناظر با خطای شماره ۱۳ پردازندهٔ AT697E است) را فعال می‌کند. .IP \fB\-mfix\-ut699\fR 4 .IX Item "-mfix-ut699" راهکارهای مستندشده برای خطاهای سخت‌افزاری ممیز شناور و خطاهای باطل‌سازی حافظهٔ نهان داده (data cache nullify) در پردازندهٔ UT699 را فعال می‌کند. .IP \fB\-mfix\-ut700\fR 4 .IX Item "-mfix-ut700" راهکار مستندشده برای خطاهای سخت‌افزاری ذخیره‌سازی پشت‌سر‌هم (back\-to\-back store) در پردازندهٔ UT699E/UT700 را فعال می‌کند. .IP \fB\-mfix\-gr712rc\fR 4 .IX Item "-mfix-gr712rc" راهکار مستندشده برای خطاهای سخت‌افزاری ذخیره‌سازی پشت‌سر‌هم (back\-to\-back store) در پردازندهٔ GR712RC را فعال می‌کند. .PP این گزینه‌های \fB\-m\fR علاوه بر موارد بالا، بر روی پردازنده‌های SPARC\-V9 در محیط‌های ۶۴ بیتی پشتیبانی می‌شوند: .IP \fB\-m32\fR 4 .IX Item "-m32" .PD 0 .IP \fB\-m64\fR 4 .IX Item "-m64" .PD تولید کد برای یک محیط ۳۲ بیتی یا ۶۴ بیتی. محیط ۳۲ بیتی، انواع int، long و pointer را روی ۳۲ بیت تنظیم می‌کند. محیط ۶۴ بیتی، نوع int را روی ۳۲ بیت و انواع long و pointer را روی ۶۴ بیت تنظیم می‌کند. .IP \fB\-mcmodel=\fR\fIwhich\fR 4 .IX Item "-mcmodel=which" مدل کد را روی یکی از موارد زیر تنظیم می‌کند: .RS 4 .IP \fBmedlow\fR 4 .IX Item "medlow" مدل کد متوسط/پایین (Medium/Low): آدرس‌های ۶۴ بیتی؛ برنامه‌ها باید در ۳۲ بیت پایین حافظه پیوند (link) داده شوند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند داده شوند. .IP \fBmedmid\fR 4 .IX Item "medmid" مدل کد متوسط/میانه (Medium/Middle): آدرس‌های ۶۴ بیتی؛ برنامه‌ها باید در ۴۴ بیت پایین حافظه پیوند داده شوند، اندازهٔ بخش‌های text و data باید کمتر از 2GB باشد و بخش data باید در فاصلهٔ کمتر از 2GB نسبت به بخش text قرار گیرد. .IP \fBmedany\fR 4 .IX Item "medany" مدل کد متوسط/هرکجا (Medium/Anywhere): آدرس‌های ۶۴ بیتی؛ برنامه‌ها می‌توانند در هر کجای حافظه پیوند داده شوند، اندازهٔ بخش‌های text و data باید کمتر از 2GB باشد و بخش data باید در فاصلهٔ کمتر از 2GB نسبت به بخش text قرار گیرد. .IP \fBembmedany\fR 4 .IX Item "embmedany" مدل کد متوسط/هرکجا برای سامانه‌های تعبیه‌شده (embedded): آدرس‌های ۶۴ بیتی؛ اندازهٔ بخش‌های text و data باید کمتر از 2GB باشد و هر دو می‌توانند در هر کجای حافظه شروع شوند (در زمان پیوند تعیین می‌شود). ثبات سراسری \&\f(CW%g4\fR به ابتدای بخش data اشاره می‌کند. برنامه‌ها به‌صورت ایستا پیوند داده می‌شوند و PIC پشتیبانی نمی‌شود. .RE .RS 4 .RE.IP \fB\-mmemory\-model=\fR\fImem\-model\fR 4 .IX Item "-mmemory-model=mem-model" تنظیم مدل حافظهٔ فعال روی پردازنده به یکی از موارد زیر: .RS 4 .IP \fBdefault\fR 4 .IX Item "default" مدل حافظهٔ پیش‌فرض برای پردازنده و سیستم‌عامل. .IP \fBrmo\fR 4 .IX Item "rmo" ترتیب حافظهٔ آسان‌گیر (Relaxed Memory Order) .IP \fBpso\fR 4 .IX Item "pso" ترتیب ذخیرهٔ جزئی (Partial Store Order) .IP \fBtso\fR 4 .IX Item "tso" ترتیب ذخیرهٔ کامل (Total Store Order) .IP \fBsc\fR 4 .IX Item "sc" سازگاری ترتیبی (Sequential Consistency) .RE .RS 4 .Sp این مدل‌های حافظه به‌طور رسمی در پیوست D از کتابچهٔ راهنمای معماری SPARC\-V9 تعریف شده‌اند، همان‌طور که در فیلد \f(CW\*(C`PSTATE.MM\*(C'\fR پردازنده تنظیم می‌شود. .RE .IP \fB\-mstack\-bias\fR 4 .IX Item "-mstack-bias" .PD 0 .IP \fB\-mno\-stack\-bias\fR 4 .IX Item "-mno-stack-bias" .PD با فعال بودن \fB\-mstack\-bias\fR، کامپایلر GCC فرض می‌کند که اشاره‌گر پشته (stack pointer)، و اشاره‌گر فریم (frame pointer) در صورت وجود، با آفست \-2047 جابه‌جا شده‌اند که باید هنگام ارجاع به فریم پشته مجدداً اضافه شود. این حالت پیش‌فرض در حالت 64\-بیتی است. در غیر این صورت، فرض می‌شود چنین آفستی وجود ندارد. .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 تولید شوند، نماد پیش‌پردازندهٔ C با عنوان \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\-relative). .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 یا بالاتر باشد. اگر دستورالعمل‌های ممیز شناور سخت‌افزاری در حال تولید باشند، نماد پیش‌پردازندهٔ C با عنوان \&\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 ساختارها و اجتماع‌های بزرگ (با اندازهٔ بیش از ۸ بایت) با مقدار (by value) ارسال می‌شوند. .IP * 4 توابع در مرزهای ۱۶ بیتی هم‌تراز می‌شوند. .IP * 4 گزینهٔ خط فرمان \fB\-m8byte\-align\fR پشتیبانی می‌شود. .IP * 4 گزینهٔ خط فرمان \fB\-mdisable\-callt\fR به‌طور پیش‌فرض فعال است. گزینهٔ خط فرمان \fB\-mno\-disable\-callt\fR پشتیبانی نمی‌شود. .RE .RS 4 .Sp هنگامی که این نسخه از ABI فعال باشد، نماد پیش‌پردازندهٔ C با نام \&\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 ساختارها و اجتماع‌های بزرگ (با اندازهٔ بیش از ۸ بایت) با ارجاع (by reference) ارسال می‌شوند. .IP * 4 توابع در مرزهای ۳۲ بیتی هم‌تراز می‌شوند، مگر اینکه بهینه‌سازی برای اندازه انجام شود. .IP * 4 گزینهٔ خط فرمان \fB\-m8byte\-align\fR پشتیبانی نمی‌شود. .IP * 4 گزینهٔ خط فرمان \fB\-mdisable\-callt\fR پشتیبانی می‌شود اما به‌طور پیش‌فرض فعال نیست. .RE .RS 4 .Sp هنگامی که این نسخه از ABI فعال باشد، نماد پیش‌پردازندهٔ C با نام \&\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 فعال باشد، نماد پیش‌پردازندهٔ C با نام \&\f(CW\*(C`_\|_V850_8BYTE_ALIGN_\|_\*(C'\fR تعریف می‌شود. .IP \fB\-mbig\-switch\fR 4 .IX Item "-mbig-switch" کد مناسب برای جدول‌های سوئیچ بزرگ (big switch tables) تولید می‌کند. تنها در صورتی از این گزینه استفاده کنید که اسمبلر یا پیونددهنده خطای انشعاب‌های خارج از محدوده درون یک جدول 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 استفاده از قالب داده‌ای D_floating برای اعداد ممیز شناور با دقت مضاعف به‌جای G_floating. .IP \fB\-mg\fR 4 .IX Item "-mg" .PD 0 .IP \fB\-mg\-float\fR 4 .IX Item "-mg-float" .PD استفاده از قالب داده‌ای G_floating برای اعداد ممیز شناور با دقت مضاعف به‌جای D_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 آزمایشی است، بنابراین کامپایلر به‌طور پیش‌فرض از بارگذاری مجدد استاندارد (standard 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 کد حاوی فراخوانی‌های کتابخانه‌ای برای عملیات ممیز شناور تولید می‌کند. .Sp گزینهٔ \&\fB\-msoft\-float\fR قرارداد فراخوانی را در فایل خروجی تغییر می‌دهد؛ بنابراین، تنها در صورتی مفید است که \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 این گزینه‌ها به پیونددهنده منتقل می‌شوند. آن‌ها برای سازگاری با 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" یک CPU عمومی با پشتیبانی از افزونه‌های ۶۴ بیتی و مجموعه‌های دستورالعمل 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، این گزینه‌ها همان ویژگی‌های CPU را انتخاب می‌کنند که مستندات 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 با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل MMX، SSE، SSE2، SSE3 و FXSR. .IP \fBcore2\fR 4 .IX Item "core2" پردازندهٔ Intel Core 2 با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل 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 با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، CX16، SAHF و FXSR. .IP \fBwestmere\fR 4 .IX Item "westmere" پردازندهٔ Intel Westmere با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل 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 با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل 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 با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل 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 با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل 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 با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل 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 با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل 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 با افزونه‌های ۶۴ بیتی و پشتیبانی از مجموعه‌های دستورالعمل 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 با پشتیبانی از مجموعه‌دستورهای x86\-64، MMX، SSE، SSE2، SSE3، SSSE3 و SSE4.1. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBnano\-x4\fR 4 .IX Item "nano-x4" پردازنده چهار هسته‌ای VIA Nano با پشتیبانی از مجموعه‌دستورهای x86\-64، MMX، SSE، SSE2، SSE3، SSSE3 و SSE4.1. (هیچ زمان‌بندی‌ای برای این تراشه پیاده‌سازی نشده است.) .IP \fBlujiazui\fR 4 .IX Item "lujiazui" پردازنده ZHAOXIN lujiazui با پشتیبانی از مجموعه‌دستورهای x86\-64، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، POPCNT، AES، PCLMUL، RDRND، XSAVE، XSAVEOPT، FSGSBASE، CX16، ABM، BMI، BMI2، FXSR و RDSEED. با وجود اینکه این پردازنده‌ها از AVX و F16C پشتیبانی می‌کنند، اما این موارد به دلایل کارایی توسط \f(CW\*(C`\-march=lujiazui\*(C'\fR فعال نمی‌شوند. .IP \fByongfeng\fR 4 .IX Item "yongfeng" پردازنده ZHAOXIN yongfeng با پشتیبانی از مجموعه‌دستورهای x86\-64، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، AVX، POPCNT، AES، PCLMUL، RDRND، XSAVE، XSAVEOPT، FSGSBASE، CX16، ABM، BMI، BMI2، F16C، FXSR، RDSEED، AVX2، FMA، SHA و LZCNT. .IP \fBshijidadao\fR 4 .IX Item "shijidadao" پردازنده ZHAOXIN shijidadao با پشتیبانی از مجموعه‌دستورهای x86\-64، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1، SSE4.2، AVX، POPCNT، AES، PCLMUL، RDRND، XSAVE، XSAVEOPT، FSGSBASE، CX16، ABM، BMI، BMI2، F16C، FXSR، RDSEED، AVX2، FMA، SHA و LZCNT. .IP \fBgeode\fR 4 .IX Item "geode" پردازنده توکار AMD Geode با پشتیبانی از مجموعه‌دستورهای MMX و 3DNow!. .RE .RS 4 .RE .IP \fB\-mtune=\fR\fIcpu\-type\fR 4 .IX Item "-mtune=cpu-type" کد تولیدشده را در تمام موارد ممکن، به جز ABI و مجموعه دستورهای دردسترس، برای \fIcpu\-type\fR تنظیم و بهینه‌سازی می‌کند. در حالی که انتخاب یک \fIcpu\-type\fR خاص، زمان‌بندی دستورها را متناسب با آن تراشه تنظیم می‌کند، کامپایلر هیچ کدی تولید نخواهد کرد که روی نوع ماشین پیش‌فرض قابل اجرا نباشد، مگر اینکه از گزینه \&\fB\-march=\fR\fIcpu\-type\fR استفاده کنید. برای مثال، اگر GCC برای i686\-pc\-linux\-gnu پیکربندی شده باشد، گزینه \fB\-mtune=pentium4\fR کدی تولید می‌کند که برای Pentium 4 بهینه شده است اما همچنان روی ماشین‌های i686 اجرا می‌شود. .Sp انتخاب‌های موجود برای \fIcpu\-type\fR همانند گزینه‌های \fB\-march\fR هستند. علاوه بر این، \fB\-mtune\fR از ۲ انتخاب اضافی برای \fIcpu\-type\fR پشتیبانی می‌کند: .RS 4 .IP \fBgeneric\fR 4 .IX Item "generic" تولید کدی که برای رایج‌ترین پردازنده‌های IA32/AMD64/EM64T بهینه‌سازی شده است. اگر پردازنده‌ای را که کد شما روی آن اجرا خواهد شد می‌شناسید، باید به‌جای \&\fB\-mtune=generic\fR از گزینه متناظر \fB\-mtune\fR یا \fB\-march\fR استفاده کنید. اما اگر دقیقاً نمی‌دانید کاربران برنامه شما از چه پردازنده‌ای استفاده خواهند کرد، باید از این گزینه استفاده کنید. .Sp با ورود پردازنده‌های جدید به بازار، رفتار این گزینه تغییر خواهد کرد. بنابراین، اگر به نسخه جدیدتری از GCC ارتقا دهید، تولید کد تحت کنترل این گزینه تغییر می‌کند تا پردازنده‌هایی را منعکس کند که در زمان انتشار آن نسخه از GCC رایج‌تر بوده‌اند. .Sp هیچ گزینه \fB\-march=generic\fR وجود ندارد زیرا \fB\-march\fR مشخص‌کننده مجموعه‌دستورهایی است که کامپایلر می‌تواند استفاده کند، و هیچ مجموعه‌دستور عمومی که برای تمام پردازنده‌ها قابل اعمال باشد وجود ندارد. در مقابل، \&\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 و تراشه‌های x86\-64 AMD موجود است، از محاسبات با دقت‌مضاعف نیز پشتیبانی می‌کند. .Sp برای کامپایلر x86\-32، جهت فعال‌سازی افزونه‌های SSE و اثرگذار ساختن این گزینه، باید از سوئیچ‌های \fB\-march=\fR\fIcpu\-type\fR، \fB\-msse\fR یا \fB\-msse2\fR استفاده کنید. برای کامپایلر x86\-64، این افزونه‌ها به‌طور پیش‌فرض فعال هستند. .Sp کد حاصل در اکثر موارد باید به میزان قابل‌توجهی سریع‌تر باشد و از مشکلات ناپایداری عددی کدهای 387 جلوگیری کند، اما ممکن است برخی از کدهای موجود را که انتظار دارند مقادیر موقت ۸۰ بیتی باشند، دچار مشکل کند. .Sp این انتخاب پیش‌فرض برای کامپایلر x86\-64، مقصدهای x86\-32 در Darwin، و همچنین انتخاب پیش‌فرض برای مقصدهای x86\-32 با مجموعه‌دستور SSE2 در هنگام فعال بودن \fB\-ffast\-math\fR است. .IP \fBsse,387\fR 4 .IX Item "sse,387" .PD 0 .IP \fBsse+387\fR 4 .IX Item "sse+387" .IP \fBboth\fR 4 .IX Item "both" .PD تلاش برای استفاده همزمان از هر دو مجموعه‌دستور. این کار به‌طور مؤثری تعداد ثبات‌های موجود و در تراشه‌هایی با واحدهای اجرایی مجزا برای 387 و SSE، منابع اجرایی را دو برابر می‌کند. با احتیاط از این گزینه استفاده کنید چرا که هنوز آزمایشی است، زیرا تخصیص‌دهنده ثبات GCC واحدهای عملکردی مجزا را به‌خوبی مدل‌سازی نمی‌کند و منجر به عملکرد ناپایدار می‌شود. .RE .RS 4 .RE .IP \fB\-masm=\fR\fIdialect\fR 4 .IX Item "-masm=dialect" تولید دستورهای اسمبلی خروجی با استفاده از گویش (\fIdialect\fR) انتخاب‌شده. همچنین بر اینکه چه گویشی برای \f(CW\*(C`asm\*(C'\fR پایه و \f(CW\*(C`asm\*(C'\fR گسترش‌یافته استفاده شود اثر می‌گذارد. انتخاب‌های پشتیبانی‌شده (به ترتیب گویش) عبارتند از \fBatt\fR یا \fBintel\fR. پیش‌فرض \fBatt\fR است. سیستم‌عامل Darwin از \fBintel\fR پشتیبانی نمی‌کند. .IP \fB\-mieee\-fp\fR 4 .IX Item "-mieee-fp" .PD 0 .IP \fB\-mno\-ieee\-fp\fR 4 .IX Item "-mno-ieee-fp" .PD کنترل اینکه آیا کامپایلر از مقایسه‌های ممیز شناور IEEE استفاده کند یا خیر. این مقایسه‌ها حالتی را که در آن نتیجه مقایسه نامرتب (unordered) است، به‌درستی مدیریت می‌کنند. .IP \fB\-m80387\fR 4 .IX Item "-m80387" .PD 0 .IP \fB\-mhard\-float\fR 4 .IX Item "-mhard-float" .PD تولید خروجی حاوی دستورهای 80387 برای ممیز شناور. .IP \fB\-mno\-80387\fR 4 .IX Item "-mno-80387" .PD 0 .IP \fB\-msoft\-float\fR 4 .IX Item "-msoft-float" .PD تولید خروجی حاوی فراخوانی‌های کتابخانه‌ای برای ممیز شناور. .Sp \&\fBهشدار:\fR کتابخانه‌های مورد نیاز بخشی از GCC نیستند. به‌طور معمول از امکانات کامپایلر C مرسوم ماشین استفاده می‌شود، اما این کار نمی‌تواند مستقیماً در کامپایل متقاطع (cross\-compilation) انجام شود. شما باید تمهیدات لازم را برای فراهم کردن توابع کتابخانه‌ای مناسب جهت کامپایل متقاطع در نظر بگیرید. .Sp در ماشین‌هایی که یک تابع نتایج ممیز شناور را در پشته ثبات 80387 بازمی‌گرداند، حتی در صورت استفاده از \&\fB\-msoft\-float\fR نیز ممکن است برخی کدهای دستوری (opcode) ممیز شناور تولید شوند. .IP \fB\-mno\-fp\-ret\-in\-387\fR 4 .IX Item "-mno-fp-ret-in-387" عدم استفاده از ثبات‌های FPU برای مقادیر بازگشتی توابع. .Sp قرارداد فراخوانی معمول به‌این‌صورت است که مقادیر بازگشتی توابع از نوع \&\f(CW\*(C`float\*(C'\fR و \f(CW\*(C`double\*(C'\fR حتی در صورت نبود FPU در یک ثبات FPU قرار می‌گیرند؛ با این ایده که سیستم‌عامل باید یک FPU را شبیه‌سازی کند. .Sp گزینه \fB\-mno\-fp\-ret\-in\-387\fR باعث می‌شود چنین مقادیری به‌جای آن در ثبات‌های معمولی CPU بازگردانده شوند. .IP \fB\-mno\-fancy\-math\-387\fR 4 .IX Item "-mno-fancy-math-387" برخی از شبیه‌سازهای 387 از دستورهای \f(CW\*(C`sin\*(C'\fR، \f(CW\*(C`cos\*(C'\fR و \&\f(CW\*(C`sqrt\*(C'\fR برای 387 پشتیبانی نمی‌کنند. این گزینه را مشخص کنید تا از تولید این دستورها جلوگیری شود. این گزینه زمانی که \fB\-march\fR نشان دهد CPU مقصد همیشه دارای FPU است و در نتیجه نیازی به شبیه‌سازی دستور ندارد، نادیده گرفته می‌شود (لغو می‌شود). این دستورها تولید نمی‌شوند مگر اینکه از سوئیچ \&\fB\-funsafe\-math\-optimizations\fR نیز استفاده کنید..IP \fB\-malign\-double\fR 4 .IX Item "-malign-double" .PD 0 .IP \fB\-mno\-align\-double\fR 4 .IX Item "-mno-align-double" .PD کنترل این‌که آیا GCC متغیرهای \f(CW\*(C`double\*(C'\fR، \f(CW\*(C`long double\*(C'\fR و \&\f(CW\*(C`long long\*(C'\fR را روی مرز دو کلمه‌ای یا یک کلمه‌ای هم‌تراز کند یا خیر. هم‌تراز کردن متغیرهای \f(CW\*(C`double\*(C'\fR روی یک مرز دو کلمه‌ای کدی تولید می‌کند که روی پردازنده‌های Pentium تا حدی سریع‌تر اجرا می‌شود، اما حافظه بیشتری مصرف می‌کند. .Sp روی x86\-64، گزینه \fB\-malign\-double\fR به‌طور پیش‌فرض فعال است. .Sp \&\fBهشدار:\fR اگر از سوئیچ \fB\-malign\-double\fR استفاده کنید، ساختارهای شامل انواع داده بالا، به نحوی متفاوت با مشخصات منتشرشده رابط باینری کاربردی (ABI) برای x86\-32 هم‌تراز می‌شوند و از نظر باینری با ساختارهای موجود در کدهایی که بدون این سوئیچ کامپایل شده‌اند سازگار نخواهند بود. .IP \fB\-m96bit\-long\-double\fR 4 .IX Item "-m96bit-long-double" .PD 0 .IP \fB\-m128bit\-long\-double\fR 4 .IX Item "-m128bit-long-double" .PD این سوئیچ‌ها اندازه نوع داده \f(CW\*(C`long double\*(C'\fR را کنترل می‌کنند. رابط باینری کاربردی 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 می‌کند. این حالت پیش‌فرض برای کتابخانه C بیونیک (Bionic C library) ۳۲ بیتی است. اندازه ۱۲۸ بیت، نوع \&\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) قرار می‌گیرند. مقدار پیش‌فرض 65535 است. .IP \fB\-mrtd\fR 4 .IX Item "-mrtd" از یک قرارداد فراخوانی تابع متفاوت استفاده می‌کند که در آن، توابعی با تعداد ثابتی از آرگومان‌ها، با دستورالعمل \f(CW\*(C`ret \fR\f(CInum\fR\f(CW\*(C'\fR برمی‌گردند که هنگام بازگشت، آرگومان‌ها را از پشته خارج (pop) می‌کند. این کار یک دستورالعمل در بخش فراخواننده صرفه‌جویی می‌کند، زیرا نیازی به خارج کردن آرگومان‌ها در آنجا نخواهد بود. .Sp می‌توانید با استفاده از صفت تابع \f(CW\*(C`stdcall\*(C'\fR مشخص کنید که یک تابع خاص با این توالی فراخوانی شود. همچنین می‌توانید با به‌کارگیری صفت تابع \f(CW\*(C`cdecl\*(C'\fR، گزینه \fB\-mrtd\fR را لغو و بازنویسی کنید. .Sp \&\fBهشدار:\fR این قرارداد فراخوانی با آنچه به‌طور معمول در Unix استفاده می‌شود ناسازگار است، بنابراین اگر نیاز به فراخوانی کتابخانه‌های کامپایل‌شده با کامپایلر Unix دارید، نمی‌توانید از آن استفاده کنید. .Sp همچنین، باید پیش‌نمونه (prototype) مناسبی برای تمام توابعی که تعداد متغیری از آرگومان‌ها را دریافت می‌کنند (از جمله \f(CW\*(C`printf\*(C'\fR) فراهم کنید؛ در غیر این صورت، کد نادرستی برای فراخوانی آن توابع تولید می‌شود. .Sp علاوه بر این، اگر تابعی را با آرگومان‌های بیش از حد فراخوانی کنید، کدی کاملاً نادرست تولید خواهد شد. (در شرایط عادی، آرگومان‌های اضافه بدون مشکل نادیده گرفته می‌شوند.) .IP \fB\-mregparm=\fR\fInum\fR 4 .IX Item "-mregparm=num" تعداد ثبات‌هایی را که برای انتقال آرگومان‌های عدد صحیح استفاده می‌شوند کنترل می‌کند. به‌طور پیش‌فرض، هیچ ثباتی برای انتقال آرگومان‌ها به کار نمی‌رود و حداکثر می‌توان از ۳ ثبات استفاده کرد. می‌توانید این رفتار را برای یک تابع مشخص با استفاده از صفت تابع \f(CW\*(C`regparm\*(C'\fR کنترل نمایید. .Sp \&\fBهشدار:\fR اگر از این سوئیچ استفاده کنید و \fInum\fR غیرصفر باشد، باید تمام ماژول‌ها از جمله هرگونه کتابخانه را با همان مقدار بسازید. این امر شامل کتابخانه‌های سیستم و ماژول‌های راه‌اندازی (startup) نیز می‌شود. .IP \fB\-msseregparm\fR 4 .IX Item "-msseregparm" از قراردادهای انتقال ثبات SSE برای آرگومان‌ها و مقادیر بازگشتی float و double استفاده می‌کند. می‌توانید این رفتار را برای یک تابع خاص با استفاده از صفت تابع \f(CW\*(C`sseregparm\*(C'\fR کنترل نمایید. .Sp \&\fBهشدار:\fR در صورت استفاده از این سوئیچ، باید تمام ماژول‌ها از جمله هرگونه کتابخانه را با همان مقدار بسازید. این امر شامل کتابخانه‌های سیستم و ماژول‌های راه‌اندازی نیز می‌شود. .IP \fB\-mvect8\-ret\-in\-mem\fR 4 .IX Item "-mvect8-ret-in-mem" بردارهای ۸ بایتی را به جای ثبات‌های MMX در حافظه بازمی‌گرداند. این حالت در VxWorks پیش‌فرض است تا با ABI کامپایلرهای Sun Studio تا نسخه ۱۲ مطابقت داشته باشد. \fIتنها\fR در صورتی از این گزینه استفاده کنید که نیازمند حفظ سازگاری با کدهای موجودِ تولیدشده توسط آن نسخه‌های قبلی کامپایلر یا نسخه‌های قدیمی‌تر GCC باشید. .IP \fB\-mpc32\fR 4 .IX Item "-mpc32" .PD 0 .IP \fB\-mpc64\fR 4 .IX Item "-mpc64" .IP \fB\-mpc80\fR 4 .IX Item "-mpc80" .PD دقت ممیز شناور 80387 را روی ۳۲، ۶۴ یا ۸۰ بیت تنظیم می‌کند. هنگامی که \fB\-mpc32\fR مشخص شود، بخش معنادار (مانتیس) نتایج عملیات ممیز شناور به ۲۴ بیت گرد می‌شود (دقت یگانه)؛ \fB\-mpc64\fR مانتیس نتایج عملیات ممیز شناور را به ۵۳ بیت گرد می‌کند (دقت مضاعف) و \fB\-mpc80\fR مانتیس نتایج را به ۶۴ بیت گرد می‌کند (دقت مضاعف گسترده) که مقدار پیش‌فرض است. با استفاده از این گزینه، عملیات ممیز شناور در دقت‌های بالاتر بدون تنظیم صریح کلمه کنترلی FPU در دسترس برنامه‌نویس نخواهد بود. .Sp تنظیم گرد کردن عملیات ممیز شناور به مقداری کمتر از مقدار پیش‌فرض ۸۰ بیتی می‌تواند سرعت اجرای برخی برنامه‌ها را ۲٪ یا بیشتر بهبود بخشد. توجه داشته باشید که برخی کتابخانه‌های ریاضی فرض می‌کنند عملیات ممیز شناور با دقت گسترده (۸۰ بیتی) به‌طور پیش‌فرض فعال است؛ روتین‌های چنین کتابخانه‌هایی ممکن است در صورت استفاده از این گزینه برای تنظیم دقت به مقداری کمتر از دقت گسترده، معمولاً به دلیل پدیده‌ای به نام «ابطال فاجعه‌بار» (catastrophic cancellation)، با افت دقت چشمگیری روبه‌رو شوند. .IP \fB\-mdaz\-ftz\fR 4 .IX Item "-mdaz-ftz" پرچم‌های flush\-to\-zero (FTZ) و denormals\-are\-zero (DAZ) در ثبات MXCSR برای کنترل محاسبات ممیز شناور به کار می‌روند. دستورالعمل‌های SSE و AVX، شامل دستورالعمل‌های اسکالر و برداری، در صورت تعیین \fB\-mdaz\-ftz\fR می‌توانند از فعال‌سازی پرچم‌های FTZ و DAZ بهره‌مند شوند. زمانی که \fB\-mno\-daz\-ftz\fR یا \fB\-shared\fR مشخص شده است، پرچم‌های FTZ/DAZ را تنظیم نکنید؛ گزینه \fB\-mdaz\-ftz\fR حتی همراه با \fB\-shared\fR نیز پرچم‌های FTZ/DAZ را فعال خواهد کرد. .IP \fB\-mstackrealign\fR 4 .IX Item "-mstackrealign" پشته را در بدو ورود دوباره هم‌تراز می‌کند. در x86، گزینه \fB\-mstackrealign\fR یک مقدمه و مؤخره جایگزین تولید می‌کند که در صورت لزوم، پشته زمان اجرا را مجدداً هم‌تراز می‌سازد. این کار امکان ترکیب کدهای قدیمی که هم‌ترازی ۴ بایتی پشته را حفظ می‌کنند، با کدهای مدرنی که جهت سازگاری با SSE هم‌ترازی ۱۶ بایتی را نگه می‌دارند فراهم می‌آورد. همچنین صفت \&\f(CW\*(C`force_align_arg_pointer\*(C'\fR را که برای توابع منفرد قابل اعمال است، مشاهده نمایید. .IP \fB\-mpreferred\-stack\-boundary=\fR\fInum\fR 4 .IX Item "-mpreferred-stack-boundary=num" تلاش می‌کند مرز پشته را روی مرز ۲ به توان \fInum\fR بایت هم‌تراز نگه دارد. اگر \fB\-mpreferred\-stack\-boundary\fR مشخص نشده باشد، مقدار پیش‌فرض ۴ است (۱۶ بایت یا ۱۲۸ بیت). .Sp \&\fBهشدار:\fR هنگام تولید کد برای معماری x86\-64 با افزونه‌های غیرفعال SSE، می‌توان از \fB\-mpreferred\-stack\-boundary=3\fR برای نگه داشتن مرز پشته روی هم‌ترازی ۸ بایتی استفاده کرد. از آنجا که ABI معماری x86\-64 نیازمند هم‌ترازی ۱۶ بایتی پشته است، این پیکربندی مغایر با ABI بوده و هدف از آن صرفاً استفاده در محیط‌های کنترل‌شده‌ای است که فضای پشته در آن‌ها محدودیتی اساسی به شمار می‌رود. این گزینه در صورتی که توابع کامپایل‌شده با هم‌ترازی ۱۶ بایتی (مانند توابع متعلق به یک کتابخانه استاندارد) با پشته‌ای ناتراز فراخوانی شوند، منجر به تولید کد نادرست می‌شود. در این وضعیت، دستورالعمل‌های SSE ممکن است به تله‌های دسترسی نامتقارن/ناتراز به حافظه (misaligned memory access traps) منجر شوند. علاوه بر این، آرگومان‌های متغیر برای اشیاء با هم‌ترازی ۱۶ بایتی (شامل x87 long double و _\|_int128) به‌طور نادرست مدیریت می‌شوند که خروجی‌های غلطی به همراه خواهد داشت. باید تمام ماژول‌ها، از جمله هرگونه کتابخانه را با \fB\-mpreferred\-stack\-boundary=3\fR بسازید. این امر شامل کتابخانه‌های سیستم و ماژول‌های راه‌اندازی نیز می‌شود. .IP \fB\-mincoming\-stack\-boundary=\fR\fInum\fR 4 .IX Item "-mincoming-stack-boundary=num" فرض می‌کند که پشته ورودی روی مرز ۲ به توان \fInum\fR بایت هم‌تراز شده است. اگر \fB\-mincoming\-stack\-boundary\fR مشخص نشده باشد، مقدار تعیین‌شده توسط \fB\-mpreferred\-stack\-boundary\fR به کار گرفته می‌شود. .Sp در Pentium و Pentium Pro، مقادیر \f(CW\*(C`double\*(C'\fR و \f(CW\*(C`long double\*(C'\fR باید روی یک مرز ۸ بایتی هم‌تراز شوند (نگاه کنید به \fB\-malign\-double\fR)؛ در غیر این صورت افت کارایی قابل‌توجهی در زمان اجرا رخ خواهد داد. در Pentium III، نوع داده Streaming SIMD Extension (SSE) یعنی \f(CW\*(C`_\|_m128\*(C'\fR در صورتی که با مرز ۱۶ بایتی هم‌تراز نباشد، ممکن است به‌درستی کار نکند. .Sp برای اطمینان از هم‌ترازی مناسب این مقادیر روی پشته، مرز پشته باید حداقل به اندازه مورد نیازِ هر مقداری که روی پشته ذخیره می‌شود هم‌تراز باشد. علاوه بر این، تمام توابع باید به‌گونه‌ای تولید شوند که پشته را هم‌تراز نگه دارند. از این رو، فراخوانی تابعی که با مرز ترجیحی پشته بالاتر کامپایل شده از درون تابعی که با مرز ترجیحی پشته پایین‌تر کامپایل شده است، به احتمال بسیار زیاد پشته را ناتراز خواهد کرد. توصیه می‌شود کتابخانه‌هایی که از توابع بازخوان (callbacks) استفاده می‌کنند همواره تنظیمات پیش‌فرض را به کار گیرند. .Sp این هم‌ترازی مازاد، فضای بیشتری از پشته مصرف می‌کند و عموماً حجم کد را افزایش می‌دهد. کدهایی که نسبت به مصرف فضای پشته حساس هستند، مانند سیستم‌های تعبیه‌شده (embedded systems) و هسته‌های سیستم‌عامل، ممکن است مایل باشند هم‌ترازی ترجیحی را به \&\fB\-mpreferred\-stack\-boundary=2\fR کاهش دهند..IP \fB\-mmmx\fR 4 .IX Item "-mmmx" .PD 0 .IP \fB\-msse\fR 4 .IX Item "-msse" .IP \fB\-msse2\fR 4 .IX Item "-msse2" .IP \fB\-msse3\fR 4 .IX Item "-msse3" .IP \fB\-mssse3\fR 4 .IX Item "-mssse3" .IP \fB\-msse4\fR 4 .IX Item "-msse4" .IP \fB\-msse4a\fR 4 .IX Item "-msse4a" .IP \fB\-msse4.1\fR 4 .IX Item "-msse4.1" .IP \fB\-msse4.2\fR 4 .IX Item "-msse4.2" .IP \fB\-mavx\fR 4 .IX Item "-mavx" .IP \fB\-mavx2\fR 4 .IX Item "-mavx2" .IP \fB\-mavx512f\fR 4 .IX Item "-mavx512f" .IP \fB\-mavx512cd\fR 4 .IX Item "-mavx512cd" .IP \fB\-mavx512vl\fR 4 .IX Item "-mavx512vl" .IP \fB\-mavx512bw\fR 4 .IX Item "-mavx512bw" .IP \fB\-mavx512dq\fR 4 .IX Item "-mavx512dq" .IP \fB\-mavx512ifma\fR 4 .IX Item "-mavx512ifma" .IP \fB\-mavx512vbmi\fR 4 .IX Item "-mavx512vbmi" .IP \fB\-msha\fR 4 .IX Item "-msha" .IP \fB\-maes\fR 4 .IX Item "-maes" .IP \fB\-mpclmul\fR 4 .IX Item "-mpclmul" .IP \fB\-mclflushopt\fR 4 .IX Item "-mclflushopt" .IP \fB\-mclwb\fR 4 .IX Item "-mclwb" .IP \fB\-mfsgsbase\fR 4 .IX Item "-mfsgsbase" .IP \fB\-mptwrite\fR 4 .IX Item "-mptwrite" .IP \fB\-mrdrnd\fR 4 .IX Item "-mrdrnd" .IP \fB\-mf16c\fR 4 .IX Item "-mf16c" .IP \fB\-mfma\fR 4 .IX Item "-mfma" .IP \fB\-mpconfig\fR 4 .IX Item "-mpconfig" .IP \fB\-mwbnoinvd\fR 4 .IX Item "-mwbnoinvd" .IP \fB\-mfma4\fR 4 .IX Item "-mfma4" .IP \fB\-mprfchw\fR 4 .IX Item "-mprfchw" .IP \fB\-mrdpid\fR 4 .IX Item "-mrdpid" .IP \fB\-mrdseed\fR 4 .IX Item "-mrdseed" .IP \fB\-msgx\fR 4 .IX Item "-msgx" .IP \fB\-mxop\fR 4 .IX Item "-mxop" .IP \fB\-mlwp\fR 4 .IX Item "-mlwp" .IP \fB\-m3dnow\fR 4 .IX Item "-m3dnow" .IP \fB\-m3dnowa\fR 4 .IX Item "-m3dnowa" .IP \fB\-mpopcnt\fR 4 .IX Item "-mpopcnt" .IP \fB\-mabm\fR 4 .IX Item "-mabm" .IP \fB\-madx\fR 4 .IX Item "-madx" .IP \fB\-mbmi\fR 4 .IX Item "-mbmi" .IP \fB\-mbmi2\fR 4 .IX Item "-mbmi2" .IP \fB\-mlzcnt\fR 4 .IX Item "-mlzcnt" .IP \fB\-mfxsr\fR 4 .IX Item "-mfxsr" .IP \fB\-mxsave\fR 4 .IX Item "-mxsave" .IP \fB\-mxsaveopt\fR 4 .IX Item "-mxsaveopt" .IP \fB\-mxsavec\fR 4 .IX Item "-mxsavec" .IP \fB\-mxsaves\fR 4 .IX Item "-mxsaves" .IP \fB\-mrtm\fR 4 .IX Item "-mrtm" .IP \fB\-mhle\fR 4 .IX Item "-mhle" .IP \fB\-mtbm\fR 4 .IX Item "-mtbm" .IP \fB\-mmwaitx\fR 4 .IX Item "-mmwaitx" .IP \fB\-mclzero\fR 4 .IX Item "-mclzero" .IP \fB\-mpku\fR 4 .IX Item "-mpku" .IP \fB\-mavx512vbmi2\fR 4 .IX Item "-mavx512vbmi2" .IP \fB\-mavx512bf16\fR 4 .IX Item "-mavx512bf16" .IP \fB\-mavx512fp16\fR 4 .IX Item "-mavx512fp16" .IP \fB\-mgfni\fR 4 .IX Item "-mgfni" .IP \fB\-mvaes\fR 4 .IX Item "-mvaes" .IP \fB\-mwaitpkg\fR 4 .IX Item "-mwaitpkg" .IP \fB\-mvpclmulqdq\fR 4 .IX Item "-mvpclmulqdq" .IP \fB\-mavx512bitalg\fR 4 .IX Item "-mavx512bitalg" .IP \fB\-mmovdiri\fR 4 .IX Item "-mmovdiri" .IP \fB\-mmovdir64b\fR 4 .IX Item "-mmovdir64b" .IP \fB\-menqcmd\fR 4 .IX Item "-menqcmd" .IP \fB\-muintr\fR 4 .IX Item "-muintr" .IP \fB\-mtsxldtrk\fR 4 .IX Item "-mtsxldtrk" .IP \fB\-mavx512vpopcntdq\fR 4 .IX Item "-mavx512vpopcntdq" .IP \fB\-mavx512vp2intersect\fR 4 .IX Item "-mavx512vp2intersect" .IP \fB\-mavx512vnni\fR 4 .IX Item "-mavx512vnni" .IP \fB\-mavxvnni\fR 4 .IX Item "-mavxvnni" .IP \fB\-mcldemote\fR 4 .IX Item "-mcldemote" .IP \fB\-mserialize\fR 4 .IX Item "-mserialize" .IP \fB\-mamx\-tile\fR 4 .IX Item "-mamx-tile" .IP \fB\-mamx\-int8\fR 4 .IX Item "-mamx-int8" .IP \fB\-mamx\-bf16\fR 4 .IX Item "-mamx-bf16" .IP \fB\-mhreset\fR 4 .IX Item "-mhreset" .IP \fB\-mkl\fR 4 .IX Item "-mkl" .IP \fB\-mwidekl\fR 4 .IX Item "-mwidekl" .IP \fB\-mavxifma\fR 4 .IX Item "-mavxifma" .IP \fB\-mavxvnniint8\fR 4 .IX Item "-mavxvnniint8" .IP \fB\-mavxneconvert\fR 4 .IX Item "-mavxneconvert" .IP \fB\-mcmpccxadd\fR 4 .IX Item "-mcmpccxadd" .IP \fB\-mamx\-fp16\fR 4 .IX Item "-mamx-fp16" .IP \fB\-mprefetchi\fR 4 .IX Item "-mprefetchi" .IP \fB\-mraoint\fR 4 .IX Item "-mraoint" .IP \fB\-mamx\-complex\fR 4 .IX Item "-mamx-complex" .IP \fB\-mavxvnniint16\fR 4 .IX Item "-mavxvnniint16" .IP \fB\-msm3\fR 4 .IX Item "-msm3" .IP \fB\-msha512\fR 4 .IX Item "-msha512" .IP \fB\-msm4\fR 4 .IX Item "-msm4" .IP \fB\-mapxf\fR 4 .IX Item "-mapxf" .IP \fB\-musermsr\fR 4 .IX Item "-musermsr" .IP \fB\-mavx10.1\fR 4 .IX Item "-mavx10.1" .IP \fB\-mavx10.1\-256\fR 4 .IX Item "-mavx10.1-256" .IP \fB\-mavx10.1\-512\fR 4 .IX Item "-mavx10.1-512" .IP \fB\-mavx10.2\fR 4 .IX Item "-mavx10.2" .IP \fB\-mamx\-avx512\fR 4 .IX Item "-mamx-avx512".IP \fB\-mamx\-tf32\fR 4 .IX Item "-mamx-tf32" .IP \fB\-mamx\-transpose\fR 4 .IX Item "-mamx-transpose" .IP \fB\-mamx\-fp8\fR 4 .IX Item "-mamx-fp8" .IP \fB\-mmovrs\fR 4 .IX Item "-mmovrs" .IP \fB\-mamx\-movrs\fR 4 .IX Item "-mamx-movrs" .PD این سوئیچ‌ها استفاده از دستورالعمل‌ها را در مجموعه‌های دستورالعمل گسترش‌یافته MMX، SSE، AVX512CD، AVX512VL، AVX512BW، AVX512DQ، AVX512IFMA، AVX512VBMI، SHA، AES، PCLMUL، CLFLUSHOPT، CLWB، FSGSBASE، PTWRITE، RDRND، F16C، FMA، PCONFIG، WBNOINVD، FMA4، PREFETCHW، RDPID، RDSEED، SGX، XOP، LWP، 3DNow!، 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. برنامه‌هایی که تشخیص پردازنده را در زمان اجرا انجام می‌دهند، باید فایل‌های جداگانه‌ای را برای هر معماری پشتیبانی‌شده، با استفاده از پرچم‌های مناسب کامپایل کنند. به ویژه، فایلی که شامل کد تشخیص پردازنده است باید بدون این گزینه‌ها کامپایل شود. .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 دستور می‌دهد که در مقدمه (prologue) توابعی که از دستورالعمل‌های رشته‌ای استفاده می‌کنند، یک دستورالعمل \f(CW\*(C`cld\*(C'\fR صادر کند. دستورالعمل‌های رشته‌ای برای انتخاب بین حالت افزایش خودکار یا کاهش خودکار به پرچم DF وابسته هستند. در حالی که ABI مشخص می‌کند که پرچم DF باید در بدو ورود به تابع پاک شود، برخی سیستم‌های عامل با پاک نکردن پرچم DF در توزیع‌کننده‌های استثنای (exception dispatchers) خود، این مشخصات را نقض می‌کنند. ممکن است گرداننده استثنا با پرچم 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 دستور می‌دهد که در بردارساز خودکار (auto\-vectorizer) به جای دستورالعمل‌های ۲۵۶ بیتی AVX، از دستورالعمل‌های ۱۲۸ بیتی AVX استفاده کند. .IP \fB\-mprefer\-vector\-width=\fR\fIopt\fR 4 .IX Item "-mprefer-vector-width=opt" این گزینه به GCC دستور می‌دهد که در دستورالعمل‌ها به جای مقدار پیش‌فرض در پلتفرم انتخاب‌شده، از عرض بردار \fIopt\fR بیتی استفاده کند. .IP \fB\-mpartial\-vector\-fp\-math\fR 4 .IX Item "-mpartial-vector-fp-math" این گزینه به GCC امکان می‌دهد عملیات ممیز شناوری تولید کند که ممکن است بر مجموعه پرچم‌های وضعیت ممیز شناور در بردارهای جزئی (partial vectors) تأثیر بگذارد، جایی که عناصر بردار در بخش پایینی رجیستر ۱۲۸ بیتی SSE قرار دارند. مگر اینکه \&\fB\-fno\-trapping\-math\fR مشخص شده باشد، کامپایلر با پاکسازی تمام عملوندهای ورودی به گونه‌ای که در بخش بالایی استفاده‌نشده رجیستر برداری دارای صفر باشند، رفتار صحیح را تضمین می‌کند. توجه داشته باشید که با استفاده از توابع درونی یا اسمبلی درون‌خطی (inline assembly) با آرگومان‌های بردار جزئی، مقادیر 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 عبارتند از 128، 256 و 512. .IP \fB\-mstore\-max=\fR\fIbits\fR 4 .IX Item "-mstore-max=bits" این گزینه به GCC دستور می‌دهد که حداکثر تعداد بیت‌هایی را که می‌توانند به طور کارآمد در حافظه ذخیره شوند، روی \fIbits\fR تنظیم کند. مقادیر معتبر برای \fIbits\fR عبارتند از 128، 256 و 512. .RS 4 .IP \fBnone\fR 4 .IX Item "none" هیچ محدودیت اضافی به جز آنچه توسط پلتفرم انتخاب‌شده تعیین شده، به GCC اعمال نمی‌شود. .IP \fB128\fR 4 .IX Item "128" ترجیح دادن عرض بردار ۱۲۸ بیتی برای دستورالعمل‌ها. .IP \fB256\fR 4 .IX Item "256" ترجیح دادن عرض بردار ۲۵۶ بیتی برای دستورالعمل‌ها. .IP \fB512\fR 4 .IX Item "512" ترجیح دادن عرض بردار ۵۱۲ بیتی برای دستورالعمل‌ها. .RE .RS 4 .RE .IP \fB\-mnoreturn\-no\-callee\-saved\-registers\fR 4 .IX Item "-mnoreturn-no-callee-saved-registers" این گزینه توابع دارای مشخصه \f(CW\*(C`noreturn\*(C'\fR یا مشخص‌کننده \&\f(CW\*(C`_Noreturn\*(C'\fR را از این طریق بهینه‌سازی می‌کند که در مقدمه تابع از ذخیره رجیسترهای حفظ‌شده توسط فراخوانده‌شونده (callee\-saved) که در تابع استفاده شده‌اند (به جز رجیستر \f(CW\*(C`BP\*(C'\fR) صرف‌نظر می‌کند. این گزینه می‌تواند در اشکال‌زدایی فراخواننده تابع \&\f(CW\*(C`noreturn\*(C'\fR یا هر تابعی در سطوح بالاتر پشته فراخوانی اختلال ایجاد کند، بنابراین به طور پیش‌فرض فعال نیست. .IP \fB\-mcx16\fR 4 .IX Item "-mcx16" این گزینه به GCC امکان می‌دهد دستورالعمل‌های \f(CW\*(C`CMPXCHG16B\*(C'\fR را در کد ۶۴ بیتی تولید کند تا عملیات مقایسه و جابجایی (compare\-and\-exchange) را بر روی اشیاء ۱۲۸ بیتی هم‌تراز با ۱۶ بایت پیاده‌سازی نماید. این ویژگی برای به‌روزرسانی‌های اتمیک ساختارهای داده‌ای که اندازه آن‌ها از یک کلمه ماشین فراتر می‌رود، مفید است. کامپایلر از این دستورالعمل برای پیاده‌سازی \&\fB_\|_sync Builtins\fR استفاده می‌کند. با این حال، برای \fB_\|_atomic Builtins\fR که روی اعداد صحیح ۱۲۸ بیتی عمل می‌کنند، همواره از یک فراخوانی کتابخانه‌ای استفاده می‌شود. .IP \fB\-msahf\fR 4 .IX Item "-msahf" این گزینه تولید دستورالعمل‌های \f(CW\*(C`SAHF\*(C'\fR را در کد ۶۴ بیتی فعال می‌کند. پردازنده‌های اولیه Intel Pentium 4 با پشتیبانی از Intel 64، پیش از معرفی گام Pentium 4 G1 در دسامبر ۲۰۰۵، فاقد دستورالعمل‌های \f(CW\*(C`LAHF\*(C'\fR و \f(CW\*(C`SAHF\*(C'\fR بودند که توسط AMD64 پشتیبانی می‌شوند. این‌ها به ترتیب دستورالعمل‌های بارگذاری و ذخیره‌سازی برای برخی از پرچم‌های وضعیت هستند. در حالت ۶۴ بیتی، دستورالعمل \f(CW\*(C`SAHF\*(C'\fR برای بهینه‌سازی توابع درونی \f(CW\*(C`fmod\*(C'\fR، \&\f(CW\*(C`drem\*(C'\fR، و \f(CW\*(C`remainder\*(C'\fR استفاده می‌شود؛ برای جزئیات به \fBOther Builtins\fR مراجعه کنید. .IP \fB\-mmovbe\fR 4 .IX Item "-mmovbe" این گزینه استفاده از دستورالعمل \f(CW\*(C`movbe\*(C'\fR را برای بهینه‌سازی جابجایی ترتیبی بایت‌ها (byte swapping) در موجودیت‌های چهار و هشت بایتی فعال می‌کند. .IP \fB\-mshstk\fR 4 .IX Item "-mshstk" گزینه \fB\-mshstk\fR توابع درونی پشته سایه (shadow stack) برگرفته از فناوری اعمال جریان کنترل (CET) در معماری x86 را فعال می‌کند. .IP \fB\-mcrc32\fR 4 .IX Item "-mcrc32" این گزینه توابع درونی \f(CW\*(C`_\|_builtin_ia32_crc32qi\*(C'\fR، \&\f(CW\*(C`_\|_builtin_ia32_crc32hi\*(C'\fR، \&\f(CW\*(C`_\|_builtin_ia32_crc32si\*(C'\fR و \&\f(CW\*(C`_\|_builtin_ia32_crc32di\*(C'\fR را برای تولید دستورالعمل ماشین \f(CW\*(C`crc32\*(C'\fR فعال می‌کند. .IP \fB\-mmwait\fR 4 .IX Item "-mmwait" این گزینه توابع درونی \f(CW\*(C`_\|_builtin_ia32_monitor\*(C'\fR و \&\f(CW\*(C`_\|_builtin_ia32_mwait\*(C'\fR را برای تولید دستورالعمل‌های ماشین \f(CW\*(C`monitor\*(C'\fR و \&\f(CW\*(C`mwait\*(C'\fR فعال می‌کند. .IP \fB\-mrecip\fR 4 .IX Item "-mrecip" این گزینه استفاده از دستورالعمل‌های \f(CW\*(C`RCPSS\*(C'\fR و \f(CW\*(C`RSQRTSS\*(C'\fR (و گونه‌های برداری‌شده آن‌ها \f(CW\*(C`RCPPS\*(C'\fR و \f(CW\*(C`RSQRTPS\*(C'\fR) را با یک مرحله نیوتن\-رافسون اضافی برای افزایش دقت، به جای \f(CW\*(C`DIVSS\*(C'\fR و \f(CW\*(C`SQRTSS\*(C'\fR (و گونه‌های برداری‌شده آن‌ها) برای آرگومان‌های ممیز شناور با دقت یگانه فعال می‌کند. این دستورالعمل‌ها تنها زمانی تولید می‌شوند که \fB\-funsafe\-math\-optimizations\fR همراه با \fB\-ffinite\-math\-only\fR و \fB\-fno\-trapping\-math\fR فعال شده باشد. توجه داشته باشید در حالی که توان عملیاتی (throughput) این توالی بالاتر از توان عملیاتی دستورالعمل‌های غیرمعکوس است، دقت توالی می‌تواند تا ۲ ulp کاهش یابد (به عنوان مثال، معکوس ۱.۰ برابر با ۰.۹۹۹۹۹۹۹۴ خواهد بود). .Sp توجه داشته باشید که GCC پیشاپیش عبارت \f(CW\*(C`1.0f/sqrtf(\fR\f(CIx\fR\f(CW)\*(C'\fR را بر حسب \f(CW\*(C`RSQRTSS\*(C'\fR (یا \f(CW\*(C`RSQRTPS\*(C'\fR) با پرچم \fB\-ffast\-math\fR (یا ترکیب گزینه‌های فوق) پیاده‌سازی می‌کند و به \fB\-mrecip\fR نیازی ندارد. .Sp همچنین توجه داشته باشید که GCC توالی فوق را با مرحله اضافی نیوتن\-رافسون برای تقسیم برداری با دقت یگانه و \f(CWsqrtf(\fR\f(CIx\fR\f(CW)\fR برداری‌شده، پیشاپیش با پرچم \fB\-ffast\-math\fR (یا ترکیب گزینه‌های فوق) صادر می‌کند و نیازی به \fB\-mrecip\fR ندارد..IP \fB\-mrecip=\fR\fIopt\fR 4 .IX Item "-mrecip=opt" این گزینه مشخص می‌کند کدام دستورالعمل‌های برآورد معکوس (reciprocal estimate) می‌توانند استفاده شوند. \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 برای کتابخانه محاسبات برداری کوتاه Intel، مقدار \fBaocl\fR برای کتابخانه ریاضی (LibM) متعلق به AMD Optimizing CPU Libraries (AOCL) و \fBacml\fR برای کتابخانه ریاضی منسوخ‌شده AMD core math library (که AOCL\-LibM جانشین آن است). برای استفاده از این گزینه، باید هر دو گزینه \fB\-ftree\-vectorize\fR و \&\fB\-funsafe\-math\-optimizations\fR فعال باشند، و یک کتابخانه سازگار با ABI مربوط به SVML یا ACML باید در زمان پیوند مشخص شود. .Sp در حال حاضر GCC فراخوانی‌هایی را به \f(CW\*(C`vmldExp2\*(C'\fR، \f(CW\*(C`vmldLn2\*(C'\fR، \&\f(CW\*(C`vmldLog102\*(C'\fR، \f(CW\*(C`vmldPow2\*(C'\fR، \f(CW\*(C`vmldTanh2\*(C'\fR، \f(CW\*(C`vmldTan2\*(C'\fR، \&\f(CW\*(C`vmldAtan2\*(C'\fR، \f(CW\*(C`vmldAtanh2\*(C'\fR، \f(CW\*(C`vmldCbrt2\*(C'\fR، \f(CW\*(C`vmldSinh2\*(C'\fR، \&\f(CW\*(C`vmldSin2\*(C'\fR، \f(CW\*(C`vmldAsinh2\*(C'\fR، \f(CW\*(C`vmldAsin2\*(C'\fR، \f(CW\*(C`vmldCosh2\*(C'\fR، \&\f(CW\*(C`vmldCos2\*(C'\fR، \f(CW\*(C`vmldAcosh2\*(C'\fR، \f(CW\*(C`vmldAcos2\*(C'\fR، \f(CW\*(C`vmlsExp4\*(C'\fR، \&\f(CW\*(C`vmlsLn4\*(C'\fR، \f(CW\*(C`vmlsLog104\*(C'\fR، \f(CW\*(C`vmlsPow4\*(C'\fR، \f(CW\*(C`vmlsTanh4\*(C'\fR، \&\f(CW\*(C`vmlsTan4\*(C'\fR، \f(CW\*(C`vmlsAtan4\*(C'\fR، \f(CW\*(C`vmlsAtanh4\*(C'\fR، \f(CW\*(C`vmlsCbrt4\*(C'\fR، \&\f(CW\*(C`vmlsSinh4\*(C'\fR، \f(CW\*(C`vmlsSin4\*(C'\fR، \f(CW\*(C`vmlsAsinh4\*(C'\fR، \f(CW\*(C`vmlsAsin4\*(C'\fR، \&\f(CW\*(C`vmlsCosh4\*(C'\fR، \f(CW\*(C`vmlsCos4\*(C'\fR، \f(CW\*(C`vmlsAcosh4\*(C'\fR و \f(CW\*(C`vmlsAcos4\*(C'\fR برای نوع تابع متناظر در زمان استفاده از \fB\-mveclibabi=svml\fR، \&\f(CW\*(C`amd_vrs4_acosf\*(C'\fR، \f(CW\*(C`amd_vrs16_acosf\*(C'\fR، \f(CW\*(C`amd_vrd8_asin\*(C'\fR، \&\f(CW\*(C`amd_vrs4_asinf\*(C'\fR، \f(CW\*(C`amd_vrs8_asinf\*(C'\fR، \f(CW\*(C`amd_vrs16_asinf\*(C'\fR، \&\f(CW\*(C`amd_vrd2_atan\*(C'\fR، \f(CW\*(C`amd_vrd8_atan\*(C'\fR، \f(CW\*(C`amd_vrs4_atanf\*(C'\fR، \&\f(CW\*(C`amd_vrs8_atanf\*(C'\fR، \f(CW\*(C`amd_vrs16_atanf\*(C'\fR، \f(CW\*(C`amd_vrd2_cos\*(C'\fR، \&\f(CW\*(C`amd_vrd4_cos\*(C'\fR، \f(CW\*(C`amd_vrd8_cos\*(C'\fR، \f(CW\*(C`amd_vrs4_cosf\*(C'\fR، \&\f(CW\*(C`amd_vrs8_cosf\*(C'\fR، \f(CW\*(C`amd_vrs16_cosf\*(C'\fR، \f(CW\*(C`amd_vrs4_coshf\*(C'\fR، \&\f(CW\*(C`amd_vrs8_coshf\*(C'\fR، \f(CW\*(C`amd_vrd2_erf\*(C'\fR، \f(CW\*(C`amd_vrd4_erf\*(C'\fR، \&\f(CW\*(C`amd_vrd8_erf\*(C'\fR، \f(CW\*(C`amd_vrs4_erff\*(C'\fR، \f(CW\*(C`amd_vrs8_erff\*(C'\fR، \&\f(CW\*(C`amd_vrs16_erff\*(C'\fR، \f(CW\*(C`amd_vrd2_exp\*(C'\fR، \f(CW\*(C`amd_vrd4_exp\*(C'\fR، \&\f(CW\*(C`amd_vrd8_exp\*(C'\fR، \f(CW\*(C`amd_vrs4_expf\*(C'\fR، \f(CW\*(C`amd_vrs8_expf\*(C'\fR، \&\f(CW\*(C`amd_vrs16_expf\*(C'\fR، \f(CW\*(C`amd_vrd2_exp10\*(C'\fR، \f(CW\*(C`amd_vrs4_exp10f\*(C'\fR، \&\f(CW\*(C`amd_vrd2_exp2\*(C'\fR، \f(CW\*(C`amd_vrd4_exp2\*(C'\fR، \f(CW\*(C`amd_vrd8_exp2\*(C'\fR، \&\f(CW\*(C`amd_vrs4_exp2f\*(C'\fR، \f(CW\*(C`amd_vrs8_exp2f\*(C'\fR، \f(CW\*(C`amd_vrs16_exp2f\*(C'\fR، \&\f(CW\*(C`amd_vrs4_expm1f\*(C'\fR، \f(CW\*(C`amd_vrd2_log\*(C'\fR، \f(CW\*(C`amd_vrd4_log\*(C'\fR، \&\f(CW\*(C`amd_vrd8_log\*(C'\fR، \f(CW\*(C`amd_vrs4_logf\*(C'\fR، \f(CW\*(C`amd_vrs8_logf\*(C'\fR، \&\f(CW\*(C`amd_vrs16_logf\*(C'\fR، \f(CW\*(C`amd_vrd2_log10\*(C'\fR، \f(CW\*(C`amd_vrs4_log10f\*(C'\fR، \&\f(CW\*(C`amd_vrs8_log10f\*(C'\fR، \f(CW\*(C`amd_vrs16_log10f\*(C'\fR، \f(CW\*(C`amd_vrd2_log1p\*(C'\fR، \&\f(CW\*(C`amd_vrs4_log1pf\*(C'\fR، \f(CW\*(C`amd_vrd2_log2\*(C'\fR، \f(CW\*(C`amd_vrd4_log2\*(C'\fR، \&\f(CW\*(C`amd_vrd8_log2\*(C'\fR، \f(CW\*(C`amd_vrs4_log2f\*(C'\fR، \f(CW\*(C`amd_vrs8_log2f\*(C'\fR، \&\f(CW\*(C`amd_vrs16_log2f\*(C'\fR، \f(CW\*(C`amd_vrd2_pow\*(C'\fR، \f(CW\*(C`amd_vrd4_pow\*(C'\fR، \&\f(CW\*(C`amd_vrd8_pow\*(C'\fR، \f(CW\*(C`amd_vrs4_powf\*(C'\fR، \f(CW\*(C`amd_vrs8_powf\*(C'\fR، \&\f(CW\*(C`amd_vrs16_powf\*(C'\fR، \f(CW\*(C`amd_vrd2_sin\*(C'\fR، \f(CW\*(C`amd_vrd4_sin\*(C'\fR، \&\f(CW\*(C`amd_vrd8_sin\*(C'\fR، \f(CW\*(C`amd_vrs4_sinf\*(C'\fR، \f(CW\*(C`amd_vrs8_sinf\*(C'\fR، \&\f(CW\*(C`amd_vrs16_sinf\*(C'\fR، \f(CW\*(C`amd_vrd2_tan\*(C'\fR، \f(CW\*(C`amd_vrd4_tan\*(C'\fR، \&\f(CW\*(C`amd_vrd8_tan\*(C'\fR، \f(CW\*(C`amd_vrs16_tanf\*(C'\fR، \f(CW\*(C`amd_vrs4_tanhf\*(C'\fR، \&\f(CW\*(C`amd_vrs8_tanhf\*(C'\fR، \f(CW\*(C`amd_vrs16_tanhf\*(C'\fR برای نوع تابع متناظر در زمان استفاده از \fB\-mveclibabi=aocl\fR، و \f(CW\*(C`_\|_vrd2_sin\*(C'\fR، \&\f(CW\*(C`_\|_vrd2_cos\*(C'\fR، \f(CW\*(C`_\|_vrd2_exp\*(C'\fR، \f(CW\*(C`_\|_vrd2_log\*(C'\fR، \f(CW\*(C`_\|_vrd2_log2\*(C'\fR، \&\f(CW\*(C`_\|_vrd2_log10\*(C'\fR، \f(CW\*(C`_\|_vrs4_sinf\*(C'\fR، \f(CW\*(C`_\|_vrs4_cosf\*(C'\fR، \&\f(CW\*(C`_\|_vrs4_expf\*(C'\fR، \f(CW\*(C`_\|_vrs4_logf\*(C'\fR، \f(CW\*(C`_\|_vrs4_log2f\*(C'\fR، \&\f(CW\*(C`_\|_vrs4_log10f\*(C'\fR و \f(CW\*(C`_\|_vrs4_powf\*(C'\fR را برای نوع تابع متناظر در زمان استفاده از \fB\-mveclibabi=acml\fR صادر می‌کند. .IP \fB\-mabi=\fR\fIname\fR 4 .IX Item "-mabi=name" تولید کد برای قرارداد فراخوانی (calling convention) مشخص‌شده. مقادیر مجاز عبارتند از \fBsysv\fR برای ABI مورد استفاده در GNU/Linux و سایر سیستم‌ها، و \&\fBms\fR برای Microsoft ABI. پیش‌فرض این است که هنگام هدف قرار دادن Microsoft Windows از Microsoft ABI و در سایر سیستم‌ها از SysV ABI استفاده شود. می‌توانید این رفتار را برای توابع خاص با استفاده از مشخصه‌های تابع \&\f(CW\*(C`ms_abi\*(C'\fR و \f(CW\*(C`sysv_abi\*(C'\fR کنترل کنید. .IP \fB\-mforce\-indirect\-call\fR 4 .IX Item "-mforce-indirect-call" تمام فراخوانی‌های توابع را مجبور به غیرمستقیم بودن می‌کند. این گزینه هنگام استفاده از 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 که از جدول پرش (jump table) استفاده می‌کنند خاموش است و ردیابی شاخه غیرمستقیم غیرفعال می‌باشد. از آنجا که جدول‌های پرش در حافظه فقط‌خواندنی ذخیره می‌شوند، این امر منجر به از دست رفتن مستقیم مقاوم‌سازی (hardening) نمی‌شود. اما اگر اندیس جدول پرش توسط مهاجم کنترل شود، ممکن است پرش غیرمستقیم توسط CET مهار نشود. این گزینه تجهیز CET را فعال می‌کند تا ردیابی شاخه غیرمستقیم را برای دستورهای switch دارای جدول پرش فعال سازد، که باعث می‌شود اهداف پرش از طریق هر پرش غیرمستقیمی قابل دسترسی باشند. .IP \fB\-mcall\-ms2sysv\-xlogues\fR 4 .IX Item "-mcall-ms2sysv-xlogues" به دلیل تفاوت‌ها در ABIهای ۶۴\-بیتی، هر تابع Microsoft ABI که یک تابع System V ABI را فراخوانی می‌کند باید RSI، RDI و XMM6\-15 را به عنوان بازنویسی‌شده (clobbered) در نظر بگیرد. به‌طور پیش‌فرض، کد لازم برای ذخیره و بازیابی این ثبات‌ها به صورت درون‌خطی (inline) صادر می‌شود که منجر به پیش‌درآمدها و پس‌درآمدهای (prologues and epilogues) نسبتاً طولانی می‌گردد. استفاده از \&\fB\-mcall\-ms2sysv\-xlogues\fR پیش‌درآمدها و پس‌درآمدهایی را صادر می‌کند که از stubها در بخش ایستان 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" در صورت فعال بودن، بیشینه فضای مورد نیاز برای آرگومان‌های خروجی در پیش‌درآمد تابع محاسبه می‌شود. این کار روی اکثر پردازنده‌های مدرن سریع‌تر است به دلیل کاهش وابستگی‌ها، بهبود زمان‌بندی و کاهش مصرف پشته زمانی که مرز پشته ترجیحی برابر ۲ نباشد. نکته منفی آن افزایش چشمگیر در اندازه کد است. این سوئیچ مستلزم \&\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 فعال/غیرفعال کردن چیدمان فیلدهای بیتی سازگار با کامپایلر بومی Microsoft Windows. .Sp اگر \f(CW\*(C`packed\*(C'\fR روی یک ساختار استفاده شود، یا اگر فیلدهای بیتی به کار روند، ممکن است Microsoft ABI ساختار را به گونه‌ای متفاوت از روش معمول GCC بچیند. به ویژه هنگام جابجایی داده‌های فشرده (packed) میان توابع کامپایل‌شده با GCC و کامپایلر بومی مایکروسافت (خواه از طریق فراخوانی تابع یا به صورت داده درون یک فایل)، ممکن است دسترسی به هر یک از این قالب‌ها لازم باشد. .Sp این گزینه به‌طور پیش‌فرض برای اهداف Microsoft Windows فعال است. این رفتار همچنین می‌تواند به صورت محلی با استفاده از مشخصه‌های متغیر یا نوع کنترل شود. برای اطلاعات بیشتر، \fBx86 Variable Attributes\fR و \fBx86 Type Attributes\fR را ببینید. .Sp الگوریتم چیدمان ساختار در مایکروسافت به استثنای بسته‌بندی فیلدهای بیتی، نسبتاً ساده است. فاصله‌گذاری (padding) و ترازسازی (alignment) اعضای ساختارها و اینکه آیا یک فیلد بیتی می‌تواند از مرز یک واحد ذخیره‌سازی عبور کند یا خیر، با این قوانین تعیین می‌شود: .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" هیوریستیک تصمیم‌گیری داخلی را برای الگوریتم خاصی که باید برای درون‌خطی‌سازی عملیات‌های رشته‌ای استفاده شود لغو می‌کند. مقادیر مجاز برای \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 استفاده می‌کنند، حالت پیش‌فرض روشن (on) است. .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 اگر پروفایل‌سازی فعال باشد (\fB\-pg\fR)، فراخوانی شمارندهٔ پروفایل‌سازی را پیش از مقدمه (prologue) قرار بده. نکته: در معماری‌های x86 در حال حاضر مشخصهٔ \f(CW\*(C`ms_hook_prologue\*(C'\fR برای \fB\-mfentry\fR و \fB\-pg\fR ممکن نیست. .IP \fB\-mrecord\-mcount\fR 4 .IX Item "-mrecord-mcount" .PD 0 .IP \fB\-mno\-record\-mcount\fR 4 .IX Item "-mno-record-mcount" .PD اگر پروفایل‌سازی فعال باشد (\fB\-pg\fR)، یک بخش _\|_mcount_loc تولید کن که حاوی اشاره‌گرهایی به هر فراخوانی پروفایل‌سازی است. این گزینه برای وصله کردن خودکار فراخوانی‌ها به داخل و خارج (patching in and out) مفید است. .IP \fB\-mnop\-mcount\fR 4 .IX Item "-mnop-mcount" .PD 0 .IP \fB\-mno\-nop\-mcount\fR 4 .IX Item "-mno-nop-mcount" .PD اگر پروفایل‌سازی فعال باشد (\fB\-pg\fR)، فراخوانی‌های توابع پروفایل‌سازی را به صورت NOP تولید کن. این ویژگی زمانی مفید است که باید بعداً به‌طور پویا وصله شوند. این گزینه احتمالاً تنها همراه با \fB\-mrecord\-mcount\fR مفید خواهد بود..IP \fB\-minstrument\-return=\fR\fItype\fR 4 .IX Item "-minstrument-return=type" خروج تابع را در توابعی که با \-pg و \-mfentry ابزارگذاری شده‌اند، با یک فراخوانی به تابع مشخص‌شده ابزارگذاری می‌کند. این فقط بازگشت‌های واقعی منتهی به ret را ابزارگذاری می‌کند، نه فراخوانی‌های هم‌سطح (sibling calls) منتهی به jump را. مقادیر معتبر عبارتند از \fInone\fR برای عدم ابزارگذاری، \fIcall\fR برای تولید یک فراخوانی به _\|_return_\|_، یا \fInop5\fR برای تولید یک nop پنج بایتی. .IP \fB\-mrecord\-return\fR 4 .IX Item "-mrecord-return" .PD 0 .IP \fB\-mno\-record\-return\fR 4 .IX Item "-mno-record-return" .PD یک بخش _\|_return_loc ایجاد می‌کند که به تمام کدهای ابزارگذاری بازگشت اشاره دارد. .IP \fB\-mfentry\-name=\fR\fIname\fR 4 .IX Item "-mfentry-name=name" نام نماد _\|_fentry_\|_ را که در بدو ورود به تابع برای توابع \-pg \-mfentry فراخوانی می‌شود، تعیین می‌کند. .IP \fB\-mfentry\-section=\fR\fIname\fR 4 .IX Item "-mfentry-section=name" نام بخشی را برای ثبت فراخوانی‌های \-mrecord\-mcount تعیین می‌کند (پیش‌فرض _\|_mcount_loc). .IP \fB\-mskip\-rax\-setup\fR 4 .IX Item "-mskip-rax-setup" .PD 0 .IP \fB\-mno\-skip\-rax\-setup\fR 4 .IX Item "-mno-skip-rax-setup" .PD هنگام تولید کد برای معماری x86\-64 با افزونه‌های غیرفعال‌شده‌ی SSE، گزینهٔ \fB\-mskip\-rax\-setup\fR می‌تواند برای صرف‌نظر کردن از مقداردهی اولیهٔ ثبات RAX در صورتی که هیچ آرگومان متغیری در ثبات‌های برداری ارسال نشود، استفاده شود. .Sp \&\fBهشدار:\fR از آنجا که ثبات RAX برای جلوگیری از ذخیرهٔ غیرضروری ثبات‌های برداری در پشته هنگام ارسال آرگومان‌های متغیر استفاده می‌شود، پیامدهای این گزینه این است که توابع فراخوانی‌شده ممکن است مقداری از فضای پشته را هدر دهند، رفتار نادرست داشته باشند یا به مکانی تصادفی بپرند. نسخه‌های 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، تقسیم عدد صحیح بدون علامت ۸ بیتی بسیار سریع‌تر از تقسیم عدد صحیح ۳۲ بیتی/۶۴ بیتی است. این گزینه یک بررسی زمان اجرا تولید می‌کند. اگر هر دو مقسوم و مقسوم‌علیه در محدودهٔ ۰ تا ۲۵۵ باشند، به جای تقسیم عدد صحیح ۳۲ بیتی/۶۴ بیتی، از تقسیم عدد صحیح بدون علامت ۸ بیتی استفاده می‌شود. .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" کدی تولید می‌کند که تنها از ثبات‌های همه‌منظوره استفاده می‌کند. این کار کامپایلر را از استفاده از ثبات‌های ممیز شناور، برداری، ماسک و کران (bound) بازمی‌دارد. .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 برای صرفه‌جویی در توان مصرفی پردازنده هنگام شروع مجدد حلقه، عملیات را برای موارد دارای رقابت بالا (highly contended) بهینه‌سازی می‌کند. .IP \fB\-mindirect\-branch=\fR\fIchoice\fR 4 .IX Item "-mindirect-branch=choice" فراخوانی و پرش غیرمستقیم را با \fIchoice\fR تبدیل می‌کند. پیش‌فرض \&\fBkeep\fR است که فراخوانی و پرش غیرمستقیم را بدون تغییر نگه می‌دارد. مقدار \fBthunk\fR فراخوانی و پرش غیرمستقیم را به ثانک (thunk) فراخوانی و بازگشت تبدیل می‌کند. مقدار \fBthunk\-inline\fR فراخوانی و پرش غیرمستقیم را به ثانک فراخوانی و بازگشت درون‌خطی تبدیل می‌کند. مقدار \fBthunk\-extern\fR فراخوانی و پرش غیرمستقیم را به ثانک فراخوانی و بازگشت خارجی فراهم‌شده در یک فایل شیء مجزا تبدیل می‌کند. می‌توانید این رفتار را برای یک تابع خاص با استفاده از ویژگی تابعی \f(CW\*(C`indirect_branch\*(C'\fR کنترل کنید. .Sp توجه داشته باشید که \fB\-mcmodel=large\fR با \&\fB\-mindirect\-branch=thunk\fR و \&\fB\-mindirect\-branch=thunk\-extern\fR ناسازگار است زیرا ممکن است تابع ثانک در مدل کد بزرگ در دسترس نباشد. .Sp توجه داشته باشید که \fB\-mindirect\-branch=thunk\-extern\fR با \&\fB\-fcf\-protection=branch\fR سازگار است زیرا ثانک خارجی می‌تواند به‌گونه‌ای ساخته شود که بررسی جریان کنترل را فعال کند. .IP \fB\-mfunction\-return=\fR\fIchoice\fR 4 .IX Item "-mfunction-return=choice" بازگشت تابع را با \fIchoice\fR تبدیل می‌کند. مقدار پیش‌فرض \fBkeep\fR است که بازگشت تابع را دست‌نخورده نگه می‌دارد. \fBthunk\fR بازگشت تابع را به ثانک فراخوانی و بازگشت تبدیل می‌کند. \fBthunk\-inline\fR بازگشت تابع را به ثانک فراخوانی و بازگشت درون‌خطی تبدیل می‌کند. \fBthunk\-extern\fR بازگشت تابع را به ثانک فراخوانی و بازگشت خارجی ارائه‌شده در یک فایل شیء جداگانه تبدیل می‌کند. می‌توانید این رفتار را برای یک تابع خاص با استفاده از ویژگی تابعی \f(CW\*(C`function_return\*(C'\fR کنترل کنید. .Sp توجه داشته باشید که \fB\-mindirect\-return=thunk\-extern\fR با \&\fB\-fcf\-protection=branch\fR سازگار است زیرا ثانک خارجی می‌تواند طوری پیاده‌سازی شود که بررسی جریان کنترل را فعال کند. .Sp توجه داشته باشید که \fB\-mcmodel=large\fR با \&\fB\-mfunction\-return=thunk\fR و \&\fB\-mfunction\-return=thunk\-extern\fR ناسازگار است زیرا تابع ثانک ممکن است در مدل کد بزرگ قابل دسترسی نباشد. .IP \fB\-mindirect\-branch\-register\fR 4 .IX Item "-mindirect-branch-register" فراخوانی و پرش غیرمستقیم را از طریق ثبات اجباری می‌کند. .IP \fB\-mharden\-sls=\fR\fIchoice\fR 4 .IX Item "-mharden-sls=choice" کدی برای کاهش خطرات ناشی از گمانه‌زنی خط مستقیم (straight line speculation یا 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 به ثانک‌های غیرمستقیم با مقصد انشعاب در ثبات‌های 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" برای پشتیبانی از asm درون‌خطی با APX، قابلیت EGPR به‌طور پیش‌فرض غیرفعال بود تا از ایجاد احتمالی دستورالعمل‌های غیرمجاز با EGPR جلوگیری شود. برای به‌کارگیری egpr در اسمبلی درون‌خطی، از گزینهٔ جدید کامپایلر \&\-mapx\-inline\-asm\-use\-gpr32 استفاده کنید و کاربر باید اطمینان حاصل کند که دستورالعمل مربوطه از EGPR پشتیبانی می‌کند. .IP \fB\-mevex512\fR 4 .IX Item "-mevex512" .PD 0 .IP \fB\-mno\-evex512\fR 4 .IX Item "-mno-evex512" .PD بردارهای ۵۱۲ بیتی را فعال/غیرفعال می‌کند. در صورت فعال بودن AVX512F، به‌طور پیش‌فرض فعال خواهد بود. .PP این سوئیچ‌های \fB\-m\fR علاوه بر موارد فوق، روی پردازنده‌های x86\-64 در محیط‌های ۶۴ بیتی پشتیبانی می‌شوند. .IP \fB\-m32\fR 4 .IX Item "-m32" .PD 0 .IP \fB\-m64\fR 4 .IX Item "-m64" .IP \fB\-mx32\fR 4 .IX Item "-mx32" .IP \fB\-m16\fR 4 .IX Item "-m16" .IP \fB\-miamcu\fR 4 .IX Item "-miamcu" .PD تولید کد برای یک محیط ۱۶ بیتی، ۳۲ بیتی یا ۶۴ بیتی. گزینهٔ \fB\-m32\fR نوع‌های دادهٔ \f(CW\*(C`int\*(C'\fR، \f(CW\*(C`long\*(C'\fR و اشاره‌گر را به ۳۲ بیت تنظیم می‌کند و کدی تولید می‌کند که در حالت ۳۲ بیتی اجرا می‌شود. .Sp گزینهٔ \fB\-m64\fR نوع \f(CW\*(C`int\*(C'\fR را به ۳۲ بیت و نوع‌های \f(CW\*(C`long\*(C'\fR و اشاره‌گر را به ۶۴ بیت تنظیم می‌کند و کدی برای معماری x86\-64 تولید می‌کند. تنها در سیستم‌های Darwin، گزینهٔ \fB\-m64\fR همچنین گزینه‌های \fB\-fno\-pic\fR و \fB\-mdynamic\-no\-pic\fR را خاموش می‌کند. .Sp گزینهٔ \fB\-mx32\fR نوع‌های دادهٔ \f(CW\*(C`int\*(C'\fR، \f(CW\*(C`long\*(C'\fR و اشاره‌گر را به ۳۲ بیت تنظیم می‌کند و کدی برای معماری x86\-64 تولید می‌کند. .Sp گزینهٔ \fB\-m16\fR همانند \fB\-m32\fR است، با این تفاوت که دستورالعمل اسمبلی \f(CW\*(C`.code16gcc\*(C'\fR را در ابتدای خروجی اسمبلی درج می‌کند تا پروندهٔ اجرایی بتواند در حالت ۱۶ بیتی اجرا شود. .Sp گزینهٔ \fB\-miamcu\fR کدی مطابق با مشخصات Intel MCU psABI تولید می‌کند. این گزینه نیازمند فعال بودن گزینهٔ \fB\-m32\fR است. .IP \fB\-mno\-red\-zone\fR 4 .IX Item "-mno-red-zone" از اصطلاحاً «ناحیهٔ قرمز» (red zone) برای کد x86\-64 استفاده نمی‌کند. ناحیهٔ قرمز توسط ABI معماری x86\-64 الزامی شده است؛ این ناحیه فضایی ۱۲۸ بایتی پس از مکان اشاره‌گر پشته است که توسط گرداننده‌های سیگنال یا وقفه دستکاری نمی‌شود و بنابراین می‌تواند برای داده‌های موقت بدون تنظیم مجدد اشاره‌گر پشته مورد استفاده قرار گیرد. پرچم \fB\-mno\-red\-zone\fR این ناحیهٔ قرمز را غیرفعال می‌کند. .IP \fB\-mcmodel=small\fR 4 .IX Item "-mcmodel=small" کد را برای مدل کد کوچک (small code model) تولید می‌کند: برنامه و نمادهای آن باید در ۲ گیگابایت ابتدایی فضای آدرس پیوند داده شوند. اشاره‌گرها ۶۴ بیتی هستند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند یابند. این مدل کد، مدل پیش‌فرض است..IP \fB\-mcmodel=kernel\fR 4 .IX Item "-mcmodel=kernel" تولید کد برای مدل کد کرنل (kernel code model). کرنل در ۲ گیگابایت منفی از فضای آدرس اجرا می‌شود. این مدل باید برای کد هسته لینوکس استفاده شود. .IP \fB\-mcmodel=medium\fR 4 .IX Item "-mcmodel=medium" تولید کد برای مدل متوسط: برنامه در ۲ گیگابایت پایینی از فضای آدرس پیوند می‌خورد. نمادهای کوچک نیز در آنجا قرار می‌گیرند. نمادهایی با اندازهٔ بزرگ‌تر از \fB\-mlarge\-data\-threshold\fR در بخش‌های داده بزرگ یا BSS قرار داده می‌شوند و می‌توانند بالای 2GB قرار گیرند. برنامه‌ها می‌توانند به‌صورت ایستا یا پویا پیوند زده شوند. .IP \fB\-mcmodel=large\fR 4 .IX Item "-mcmodel=large" تولید کد برای مدل بزرگ. این مدل هیچ فرضی دربارهٔ آدرس‌ها و اندازهٔ بخش‌ها در نظر نمی‌گیرد. .IP \fB\-maddress\-mode=long\fR 4 .IX Item "-maddress-mode=long" تولید کد برای حالت آدرس‌دهی بلند (long address mode). این حالت تنها برای محیط‌های ۶۴\-بیتی و x32 پشتیبانی می‌شود. این گزینه، حالت آدرس‌دهی پیش‌فرض برای محیط‌های ۶۴\-بیتی است. .IP \fB\-maddress\-mode=short\fR 4 .IX Item "-maddress-mode=short" تولید کد برای حالت آدرس‌دهی کوتاه (short address mode). این حالت تنها برای محیط‌های ۳۲\-بیتی و x32 پشتیبانی می‌شود. این گزینه، حالت آدرس‌دهی پیش‌فرض برای محیط‌های ۳۲\-بیتی و x32 است. .IP \fB\-mneeded\fR 4 .IX Item "-mneeded" .PD 0 .IP \fB\-mno\-needed\fR 4 .IX Item "-mno-needed" .PD درج مشخصه گنو GNU_PROPERTY_X86_ISA_1_NEEDED برای مقصد لینوکس جهت مشخص کردن سطح ISA ریزمعماری مورد نیاز برای اجرای باینری. .IP \fB\-mno\-direct\-extern\-access\fR 4 .IX Item "-mno-direct-extern-access" بدون \fB\-fpic\fR یا \fB\-fPIC\fR، همواره از اشاره‌گر GOT برای دسترسی به نمادهای خارجی استفاده می‌کند. با \fB\-fpic\fR یا \fB\-fPIC\fR، با دسترسی به نمادهای محافظت‌شده مانند نمادهای محلی برخورد می‌کند. پیش‌فرض \&\fB\-mdirect\-extern\-access\fR است. .Sp \&\fBهشدار:\fR کتابخانه‌های اشتراکی کامپایل‌شده با \&\fB\-mno\-direct\-extern\-access\fR و فایل اجرایی کامپایل‌شده با \&\fB\-mdirect\-extern\-access\fR در صورتی که نمادهای محافظت‌شده در کتابخانه‌های اشتراکی و فایل اجرایی استفاده شده باشند، ممکن است سازگاری باینری نداشته باشند. .IP \fB\-munroll\-only\-small\-loops\fR 4 .IX Item "-munroll-only-small-loops" باز کردن محافظه‌کارانهٔ حلقه‌های کوچک را کنترل می‌کند. این گزینه به‌طور پیش‌فرض توسط O2 فعال می‌شود، و حلقه‌های با کمتر از ۴ دستورالعمل را ۱ بار باز می‌کند. استفاده صریح از \&\-f[no\-]unroll\-[all\-]loops این پرچم را غیرفعال می‌کند تا از هرگونه رفتار باز کردن ناخواسته که کاربر تمایلی به آن ندارد، جلوگیری شود. .IP \fB\-mlam=\fR\fIchoice\fR 4 .IX Item "-mlam=choice" ویژگی LAM (پوشش‌دهی آدرس خطی یا linear\-address masking) اجازه می‌دهد بیت‌های خاصی در اشاره‌گر برای فراداده استفاده شوند. مقدار پیش‌فرض \fBnone\fR است. با \fBu48\fR، بیت‌های اشاره‌گر در موقعیت‌های 62:48 می‌توانند برای فراداده استفاده شوند؛ با \fBu57\fR، بیت‌های اشاره‌گر در موقعیت‌های 62:57 می‌توانند برای فراداده به کار روند. .PP \fIگزینه‌های x86 Windows\fR .IX Subsection "x86 Windows Options" .PP \fIگزینه‌های Xstormy16\fR .IX Subsection "Xstormy16 Options" .PP این گزینه‌ها برای Xstormy16 تعریف شده‌اند: .IP \fB\-msim\fR 4 .IX Item "-msim" انتخاب فایل‌های راه‌اندازی (startup) و اسکریپت پیونددهنده مناسب برای شبیه‌ساز. .PP \fIگزینه‌های Xtensa\fR .IX Subsection "Xtensa Options" .PP این گزینه‌ها برای مقصدهای Xtensa پشتیبانی می‌شوند: .IP \fB\-mconst16\fR 4 .IX Item "-mconst16" .PD 0 .IP \fB\-mno\-const16\fR 4 .IX Item "-mno-const16" .PD فعال یا غیرفعال کردن استفاده از دستورالعمل‌های \f(CW\*(C`CONST16\*(C'\fR برای بارگذاری مقادیر ثابت. دستورالعمل \f(CW\*(C`CONST16\*(C'\fR در حال حاضر یک گزینهٔ استاندارد از طرف Tensilica نیست. در صورت فعال بودن، دستورالعمل‌های \f(CW\*(C`CONST16\*(C'\fR همواره به‌جای دستورالعمل‌های استاندارد \f(CW\*(C`L32R\*(C'\fR استفاده می‌شوند. استفاده از \&\f(CW\*(C`CONST16\*(C'\fR به‌طور پیش‌فرض تنها زمانی فعال است که دستورالعمل \f(CW\*(C`L32R\*(C'\fR در دسترس نباشد. .IP \fB\-mfused\-madd\fR 4 .IX Item "-mfused-madd" .PD 0 .IP \fB\-mno\-fused\-madd\fR 4 .IX Item "-mno-fused-madd" .PD فعال یا غیرفعال کردن استفاده از دستورالعمل‌های ترکیب‌شدهٔ ضرب/جمع و ضرب/تفریق در گزینهٔ ممیز شناور (floating\-point). اگر گزینهٔ ممیز شناور فعال نباشد، این گزینه هیچ تاثیری ندارد. غیرفعال کردن دستورالعمل‌های ضرب/جمع و ضرب/تفریق ترکیب‌شده کامپایلر را مجبور می‌کند تا از دستورالعمل‌های جداگانه برای عملیات‌های ضرب و جمع/تفریق استفاده کند. این امر ممکن است در مواردی که نتایج کاملاً منطبق با استاندارد IEEE 754 مورد نیاز است، مطلوب باشد: دستورالعمل‌های ترکیب‌شدهٔ ضرب جمع/تفریق، نتیجهٔ میانی را گرد نمی‌کنند، بنابراین نتایجی با بیت‌های دقت \fIبیشتری\fR نسبت به آنچه توسط استاندارد IEEE مشخص شده تولید می‌کنند. همچنین غیرفعال کردن این دستورالعمل‌ها تضمین می‌کند که خروجی برنامه به توانایی کامپایلر در ادغام عملیات‌های ضرب و جمع/تفریق وابسته نباشد. .IP \fB\-mserialize\-volatile\fR 4 .IX Item "-mserialize-volatile" .PD 0 .IP \fB\-mno\-serialize\-volatile\fR 4 .IX Item "-mno-serialize-volatile" .PD هنگامی که این گزینه فعال باشد، GCC دستورالعمل‌های \f(CW\*(C`MEMW\*(C'\fR را قبل از مراجع حافظهٔ \&\f(CW\*(C`volatile\*(C'\fR درج می‌کند تا سازگاری ترتیبی (sequential consistency) تضمین شود. حالت پیش‌فرض \fB\-mserialize\-volatile\fR است. از \&\fB\-mno\-serialize\-volatile\fR برای حذف دستورالعمل‌های \f(CW\*(C`MEMW\*(C'\fR استفاده کنید. .IP \fB\-mforce\-no\-pic\fR 4 .IX Item "-mforce-no-pic" برای مقاصدی مانند GNU/Linux که تمام کدهای حالت کاربر 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 داده قرار گیرد و همچنین به پیونددهنده امکان می‌دهد استخرهای مقادیر لفظی را از فایل‌های شیء مجزا ترکیب کند تا مقادیر تکراری حذف شده و اندازه کد بهبود یابد. با \fB\-mtext\-section\-literals\fR، مقادیر لفظی در بخش متنی (text section) پخش می‌شوند تا تا حد امکان نزدیک به مراجع خود نگه داشته شوند. این ممکن است برای فایل‌های اسمبلی بزرگ لازم باشد. مقادیر لفظی برای هر تابع درست قبل از همان تابع قرار می‌گیرند. .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 مقادیر لفظی توسط اسمبلر در بخش متنی پخش می‌شوند. کامپایلر دستورات صریح \&\f(CW\*(C`.literal\*(C'\fR تولید نمی‌کند و مقادیر لفظی را با دستورالعمل‌های \&\f(CW\*(C`MOVI\*(C'\fR به‌جای \f(CW\*(C`L32R\*(C'\fR در ثبات‌ها بارگذاری می‌کند تا به اسمبلر اجازه دهد تنظیم فاصله (relaxation) را انجام داده و مقادیر لفظی را در صورت نیاز جاگذاری کند. این گزینه به اسمبلر امکان می‌دهد چندین استخر مقادیر لفظی برای هر تابع ایجاد کرده و توابع بسیار بزرگ را سرهم‌بندی کند، کاری که ممکن است با \&\fB\-mtext\-section\-literals\fR امکان‌پذیر نباشد. .IP \fB\-mtarget\-align\fR 4 .IX Item "-mtarget-align" .PD 0 .IP \fB\-mno\-target\-align\fR 4 .IX Item "-mno-target-align" .PD هنگامی که این گزینه فعال باشد، GCC به اسمبلر دستور می‌دهد تا دستورالعمل‌ها را به‌طور خودکار تراز کند تا جریمه‌های انشعاب به قیمت فدا کردن مقداری از فشردگی کد کاهش یابد. اسمبلر سعی می‌کند دستورالعمل‌های چگالی (density instructions) را تعریض کند تا اهداف انشعاب و دستورالعمل‌های پس از دستورات فراخوانی (call) تراز شوند. اگر دستورالعمل‌های چگالی ایمنِ قبلی به اندازه کافی برای تراز کردن یک هدف وجود نداشته باشد، هیچ تعریضی انجام نمی‌شود. حالت پیش‌فرض \fB\-mtarget\-align\fR است. این گزینه‌ها بر مدیریت دستورالعمل‌های خودتراز مانند \f(CW\*(C`LOOP\*(C'\fR تاثیری ندارند؛ اسمبلر همیشه آن‌ها را چه با تعریض دستورالعمل‌های چگالی و چه با درج دستورالعمل‌های NOP، تراز می‌کند. .IP \fB\-mlongcalls\fR 4 .IX Item "-mlongcalls" .PD 0 .IP \fB\-mno\-longcalls\fR 4 .IX Item "-mno-longcalls" .PD هنگامی که این گزینه فعال باشد، GCC به اسمبلر دستور می‌دهد فراخوانی‌های مستقیم را به فراخوانی‌های غیرمستقیم تبدیل کند مگر اینکه بتواند تشخیص دهد که هدف یک فراخوانی مستقیم در محدوده مجاز دستور فراخوانی قرار دارد. این تبدیل معمولاً برای فراخوانی توابع در سایر فایل‌های سورس رخ می‌دهد. به‌طور مشخص، اسمبلر یک دستور مستقیم \&\f(CW\*(C`CALL\*(C'\fR را به یک \f(CW\*(C`L32R\*(C'\fR که پس از آن دستور \f(CW\*(C`CALLX\*(C'\fR آمده است تبدیل می‌کند. پیش‌فرض \fB\-mno\-longcalls\fR است. این گزینه باید در برنامه‌هایی استفاده شود که هدف فراخوانی می‌تواند به‌طور بالقوه خارج از محدوده باشد. این گزینه در اسمبلر پیاده‌سازی شده است، نه در کامپایلر، بنابراین کد اسمبلی تولیدشده توسط GCC همچنان دستورالعمل‌های فراخوانی مستقیم را نشان می‌دهد\-\-\-برای مشاهده دستورالعمل‌های واقعی به کد شیء دیس‌اسمبل‌شده نگاه کنید. توجه داشته باشید که اسمبلر برای هر فراخوانی بین فایلی از فراخوانی غیرمستقیم استفاده می‌کند، نه فقط آن‌هایی که واقعاً خارج از محدوده هستند. .IP \fB\-mabi=\fR\fIname\fR 4 .IX Item "-mabi=name" تولید کد برای ABI مشخص‌شده. مقادیر مجاز عبارتند از: \fBcall0\fR و \&\fBwindowed\fR. پیش‌فرض ABI بر اساس پیکربندی هسته Xtensa انتخاب می‌شود. .IP \fB\-mabi=call0\fR 4 .IX Item "-mabi=call0" هنگامی که این گزینه فعال باشد پارامترهای تابع در ثبات‌های \&\f(CW\*(C`a2\*(C'\fR تا \f(CW\*(C`a7\*(C'\fR ارسال می‌شوند، ثبات‌های \f(CW\*(C`a12\*(C'\fR تا \f(CW\*(C`a15\*(C'\fR از نوع caller\-saved هستند، و ثبات \f(CW\*(C`a15\*(C'\fR ممکن است به‌عنوان اشاره‌گر فریم (frame pointer) استفاده شود. هنگامی که این نسخه از ABI فعال باشد، نماد پیش‌پردازنده 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، بر حسب چرخه‌های ساعت مشخص می‌کند. هنگام بهینه‌سازی برای سرعت، این گزینه تعیین می‌کند که آیا یک ثابت از مخزن مقادیر تحت‌اللفظی (literal pool) با استفاده از \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 از آن برای تعیین مرزهای نویسه در یک رشته استفاده می‌کند؛ این امر برای برخی کدگذاری‌های چندبایتی لازم است که شامل نویسه‌های نقل‌قول و گریز هستند که در غیر این صورت به عنوان پایان رشته یا توالی گریز تفسیر می‌شوند. .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 فهرستی از دایرکتوری‌ها است که با دونقطه از هم جدا شده‌اند، بسیار شبیه به \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" این متغیر برای ارسال اطلاعات محلی (locale) به کامپایلر استفاده می‌شود. یکی از مواردی که این اطلاعات به کار می‌رود، تعیین مجموعه نویسه‌ای است که باید هنگام تجزیه مقادیر حرفی نویسه‌ای، رشته‌ای و توضیحات در C و C++ استفاده شود. زمانی که کامپایلر برای مجاز دانستن نویسه‌های چندبایتی پیکربندی شده باشد، مقادیر زیر برای \fBLANG\fR شناخته می‌شوند: .RS 4 .IP \fBC\-JIS\fR 4 .IX Item "C-JIS" شناسایی نویسه‌های JIS. .IP \fBC\-SJIS\fR 4 .IX Item "C-SJIS" شناسایی نویسه‌های SJIS. .IP \fBC\-EUCJP\fR 4 .IX Item "C-EUCJP" شناسایی نویسه‌های EUCJP. .RE .RS 4 .Sp اگر \fBLANG\fR تعریف نشده باشد یا مقدار دیگری داشته باشد، کامپایلر از \f(CW\*(C`mblen\*(C'\fR و \f(CW\*(C`mbtowc\*(C'\fR همان‌طور که توسط محلی پیش‌فرض تعریف شده برای شناسایی و ترجمه نویسه‌های چندبایتی استفاده می‌کند. .RE .IP \fBGCC_EXTRA_DIAGNOSTIC_OUTPUT\fR 4 .IX Item "GCC_EXTRA_DIAGNOSTIC_OUTPUT" اگر \fBGCC_EXTRA_DIAGNOSTIC_OUTPUT\fR روی یکی از مقادیر زیر تنظیم شده باشد، هنگام صدور راهنمایی‌های اصلاحی (fix\-it hints)، متن بیشتری به خروجی خطای استاندارد (stderr) ارسال خواهد شد. گزینه‌های \fB\-fdiagnostics\-parseable\-fixits\fR و \&\fB\-fno\-diagnostics\-parseable\-fixits\fR بر این متغیر محیطی اولویت دارند. .RS 4 .IP \fBfixits\-v1\fR 4 .IX Item "fixits-v1" صدور راهنمایی‌های اصلاحی قابل تجزیه، معادل \&\fB\-fdiagnostics\-parseable\-fixits\fR. به‌ویژه، ستون‌ها به عنوان شمارشی از بایت‌ها بیان می‌شوند که از بایت ۱ برای ستون نخست آغاز می‌شود. .IP \fBfixits\-v2\fR 4 .IX Item "fixits-v2" همانند \f(CW\*(C`fixits\-v1\*(C'\fR، اما ستون‌ها طبق \fB\-fdiagnostics\-column\-unit=display\fR به صورت ستون‌های نمایشی بیان می‌شوند. .RE .RS 4 .RE .PP چند متغیر محیطی دیگر نیز بر رفتار پیش‌پردازنده تأثیر می‌گذارند. .IP \fBCPATH\fR 4 .IX Item "CPATH" .PD 0 .IP \fBC_INCLUDE_PATH\fR 4 .IX Item "C_INCLUDE_PATH" .IP \fBCPLUS_INCLUDE_PATH\fR 4 .IX Item "CPLUS_INCLUDE_PATH" .IP \fBOBJC_INCLUDE_PATH\fR 4 .IX Item "OBJC_INCLUDE_PATH" .PD مقدار هر متغیر فهرستی از دایرکتوری‌ها است که همانند \fBPATH\fR با یک نویسه ویژه از هم جدا شده‌اند و در آن‌ها به دنبال فایل‌های هدر جستجو می‌شود. این نویسه ویژه، یعنی \f(CW\*(C`PATH_SEPARATOR\*(C'\fR، وابسته به هدف بوده و در زمان ساخت GCC تعیین می‌گردد. برای سیستم‌های هدف مبتنی بر Microsoft Windows یک نقطه‌ویرگول (semicolon) و تقریباً برای همه سیستم‌های هدف دیگر یک دونقطه (colon) است. .Sp متغیر \&\fBCPATH\fR فهرستی از دایرکتوری‌ها را برای جستجو تعیین می‌کند که گویی با گزینه \fB\-I\fR مشخص شده‌اند، اما پس از هر مسیری که با گزینه‌های \fB\-I\fR در خط فرمان داده شده، جستجو می‌شوند. این متغیر محیطی بدون در نظر گرفتن این که چه زبانی در حال پیش‌پردازش است استفاده می‌شود. .Sp متغیرهای محیطی باقی‌مانده تنها هنگام پیش‌پردازش زبان مشخص‌شده اعمال می‌شوند. هر یک فهرستی از دایرکتوری‌ها را مشخص می‌کند که گویی با گزینه \fB\-isystem\fR مشخص شده‌اند، اما پس از هر مسیری که با گزینه‌های \fB\-isystem\fR در خط فرمان داده شده، جستجو خواهند شد. .Sp در تمام این متغیرها، یک عضو خالی به کامپایلر دستور می‌دهد که دایرکتوری کاری جاری خود را جستجو کند. اعضای خالی می‌توانند در ابتدا یا انتهای یک مسیر ظاهر شوند. برای نمونه، اگر مقدار \&\fBCPATH\fR برابر \f(CW\*(C`:/special/include\*(C'\fR باشد، همان اثری را دارد که \fB\-I.\ \-I/special/include\fR دارد..IP \fBDEPENDENCIES_OUTPUT\fR 4 .IX Item "DEPENDENCIES_OUTPUT" اگر این متغیر مقداردهی شده باشد، مقدار آن نحوه خروجی دادن وابستگی‌ها برای Make را بر اساس سرپرونده‌های غیرسیستمیِ پردازش‌شده توسط کامپایلر مشخص می‌کند. سرپرونده‌های سیستمی در خروجی وابستگی‌ها نادیده گرفته می‌شوند. .Sp مقدار \fBDEPENDENCIES_OUTPUT\fR می‌تواند صرفاً یک نام فایل باشد، که در این حالت قواعد Make در آن فایل نوشته می‌شوند و نام هدف از روی نام فایل منبع حدس زده می‌شود. همچنین مقدار می‌تواند به شکل \&\fIfile\fR\fB \fR\fItarget\fR باشد که در این حالت قواعد در فایل \fIfile\fR با استفاده از \fItarget\fR به عنوان نام هدف نوشته می‌شوند. .Sp به عبارت دیگر، این متغیر محیطی معادل ترکیب گزینه‌های \fB\-MM\fR و \fB\-MF\fR به همراه سوئیچ اختیاری \fB\-MT\fR است. .IP \fBSUNPRO_DEPENDENCIES\fR 4 .IX Item "SUNPRO_DEPENDENCIES" این متغیر همانند \fBDEPENDENCIES_OUTPUT\fR است (بالا را ببینید)، با این تفاوت که سرپرونده‌های سیستمی نادیده گرفته نمی‌شوند، بنابراین بیانگر \&\fB\-M\fR به جای \fB\-MM\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/riscv64\-elf\-gcc/\-/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 "AUTHORS" برای مشاهده مشارکت‌کنندگان در GCC، به مدخل Info برای \fBgcc\fR یا <\fBhttps://gcc.gnu.org/onlinedocs/gcc/Contributors.html\fR> مراجعه کنید. .SH "کپی‌رایت و تکثیر (COPYRIGHT)" .IX Header "COPYRIGHT" Copyright (c) 1988\-2025 Free Software Foundation, Inc. .PP مجوز کپی، توزیع و/یا تغییر این سند تحت شرایط «مجوز مستندات آزاد گنو» (GNU Free Documentation License)، نسخه 1.3 یا هر نسخه بعدی منتشرشده توسط بنیاد نرم‌افزارهای آزاد اعطا می‌شود؛ با بخش‌های تغییرناپذیرِ «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