.\" -*- mode: troff; coding: utf-8 -*- .\" Automatically generated by Pod::Man v6.0.2 (Pod::Simple 3.45) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>. .ie n \{\ . ds C` "" . ds C' "" 'br\} .el\{\ . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Required to disable full justification in groff 1.23.0. .if n .ds AD l .\" ======================================================================== .\" .IX Title "GCC 1" .TH GCC 1 2026-08-07 gcc-16.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 مشخص می‌کند که پیوندزن (linker) اجرا نشود. در این حالت خروجی شامل فایل‌های شیء (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) از نام گزینه جدا می‌شوند. مگر اینکه طور دیگری ذکر شده باشد، یک آرگومان می‌تواند عددی یا یک رشته باشد. آرگومان‌های عددی معمولاً باید اعداد صحیح ده‌دهی یا هگزادسیمال بدون علامت و کوچک باشند. آرگومان‌های هگزادسیمال باید با پیشوند \fB0x\fR آغاز شوند. آرگومان‌های مربوط به گزینه‌هایی که نوعی آستانه اندازه را مشخص می‌کنند، می‌توانند اعداد صحیح ده‌دهی یا هگزادسیمال به هر اندازه بزرگی باشند که پسوندی برای اندازه بایت به دنبال آن‌ها می‌آید و مضربی از بایت‌ها را نشان می‌دهد؛ مانند \f(CW\*(C`kB\*(C'\fR و \f(CW\*(C`KiB\*(C'\fR به ترتیب برای کیلوبایت و کیبی‌بایت، \&\f(CW\*(C`MB\*(C'\fR و \f(CW\*(C`MiB\*(C'\fR برای مگابایت و مبی‌بایت، \f(CW\*(C`GB\*(C'\fR و \&\f(CW\*(C`GiB\*(C'\fR برای گیگابایت و گیبی‌بایت و به همین ترتیب. این آرگومان‌ها در ادامه متن با \fIbyte\-size\fR مشخص شده‌اند. برای فهرست کامل و شرح پیشوندهای ده‌دهی و دودویی اندازه بایت، به استانداردهای NIST، IEC و سایر استانداردهای ملی و بین‌المللی مرتبط مراجعه کنید..SH "گزینه‌ها (OPTIONS)" .IX Header "OPTIONS" .SS "خلاصه گزینه‌ها (Option Summary)" .IX Subsection "Option Summary" در اینجا خلاصه‌ای از تمام گزینه‌ها، دسته‌بندی‌شده بر پایه نوع آمده است. توضیحات مربوطه در بخش‌های بعدی ارائه شده‌اند. .IP "\fIگزینه‌های کلی (Overall Options)\fR" 4 .IX Item "Overall Options" \&\fB\-c \-S \-E \-o\fR \fIfile\fR \&\fB\-dumpbase\fR \fIdumpbase\fR \fB\-dumpbase\-ext\fR \fIauxdropsuf\fR \&\fB\-dumpdir\fR \fIdumppfx\fR \fB\-x\fR \fIlanguage\fR \&\fB\-v \-### \-\-help\fR[\fB=\fR\fIclass\fR[\fB,...\fR]] \fB\-\-target\-help \-\-version \&\-pass\-exit\-codes \-pipe \-wrapper @\fR\fIfile\fR \fB\-ffile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \fB\-fcanon\-prefix\-map \&\-fplugin=\fR\fIfile\fR \fB\-fplugin\-arg\-\fR\fIname\fR\fB=\fR\fIarg\fR \&\fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] \fB\-fada\-spec\-parent=\fR\fIunit\fR \&\fB\-fdump\-go\-spec=\fR\fIfile\fR \&\fB\-\-assemble \-\-compile \-\-dumpbase\fR \fIdumpbase\fR \&\fB\-\-dumpbase\-ext\fR \fIauxdropsuf\fR \fB\-\-dumpdir\fR \fIdumppfx\fR \&\fB\-\-language=\fR\fIlanguage\fR \fB\-\-output=\fR\fIfile\fR \fB\-\-pass\-exit\-codes \&\-\-pipe \-\-preprocess \-\-verbose\fR .IP "\fIگزینه‌های زبان C (C Language Options)\fR" 4 .IX Item "C Language Options" \&\fB\-ansi \-std=\fR\fIstandard\fR \fB\-aux\-info\fR \fIfilename\fR \&\fB\-fno\-asm \&\-fno\-builtin \-fno\-builtin\-\fR\fIfunction\fR \fB\-fcond\-mismatch \&\-ffreestanding \-fgimple \-fgnu\-tm \-fgnu89\-inline \-fhosted \&\-flax\-vector\-conversions \-fms\-extensions \&\-fpermitted\-flt\-eval\-methods=\fR\fIstandard\fR \&\fB\-fplan9\-extensions \-fsigned\-bitfields \-funsigned\-bitfields \&\-fsigned\-char \-funsigned\-char \-fstrict\-flex\-arrays[=\fR\fIn\fR\fB] \&\-fsso\-struct=\fR\fIendianness\fR \fB\-\-ansi\fR .IP "\fIگزینه‌های زبان C++ (C++ Language Options)\fR" 4 .IX Item "C++ Language Options" \&\fB\-\-compile\-std\-module \&\-fabi\-compat\-version=\fR\fIn\fR \fB\-fabi\-version=\fR\fIn\fR \&\fB\-fno\-access\-control \-faligned\-new=\fR[\fIn\fR] \&\fB\-fno\-assume\-sane\-operators\-new\-delete \&\-fchar8_t \-fcheck\-new \&\-fconcepts \-fconcepts\-diagnostics\-depth=\fR\fIn\fR \&\fB\-fconstexpr\-depth=\fR\fIn\fR \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR \&\fB\-fconstexpr\-loop\-limit=\fR\fIn\fR \fB\-fconstexpr\-ops\-limit=\fR\fIn\fR \&\fB\-fcontracts \&\-fcontract\-evaluation\-semantic=\fR[\fBignore\fR|\fBobserve\fR|\fBenforce\fR|\fBquick_enforce\fR] \&\fB\-fcontracts\-conservative\-ipa \-fcontract\-checks\-outlined \&\-fcontract\-disable\-optimized\-checks \&\-fcontracts\-client\-check=\fR[\fBnone\fR|\fBpre\fR|\fBall\fR] \&\fB\-fcontracts\-definition\-check=\fR[\fBon\fR|\fBoff\fR] \&\fB\-fcoroutines \-fdiagnostics\-all\-candidates \&\-fno\-elide\-constructors \&\-fno\-enforce\-eh\-specs \&\-fext\-numeric\-literals \&\-fno\-gnu\-keywords \&\-fno\-immediate\-escalation \&\-fno\-implement\-inlines \&\-fimplicit\-constexpr \&\-fno\-implicit\-inline\-templates \&\-fno\-implicit\-templates \&\-fmodule\-header\fR[\fB=\fR\fIkind\fR] \&\fB\-fmodule\-implicit\-inline \&\-fno\-module\-lazy \&\-fmodule\-mapper=\fR\fIspecification\fR \&\fB\-fmodule\-only \&\-fmodules \&\-fms\-extensions \&\-fnew\-inheriting\-ctors \&\-fnew\-ttp\-matching \&\-fno\-nonansi\-builtins \-fnothrow\-opt \-fno\-operator\-names \&\-fno\-optional\-diags \&\-fno\-pretty\-templates \-frange\-for\-ext\-temps \-freflection \&\-fno\-rtti \-fsized\-deallocation \&\-fstrict\-enums \-fstrong\-eval\-order\fR[\fB=\fR\fIkind\fR] \&\fB\-ftemplate\-backtrace\-limit=\fR\fIn\fR \&\fB\-ftemplate\-depth=\fR\fIn\fR \&\fB\-fno\-threadsafe\-statics \-fuse\-cxa\-atexit \-fno\-use\-cxa\-get\-exception\-ptr \&\-fno\-weak \-nostdinc++ \&\-fvisibility\-inlines\-hidden \&\-fvisibility\-ms\-compat \&\-flang\-info\-include\-translate\fR[\fB=\fR\fIheader\fR] \&\fB\-flang\-info\-include\-translate\-not \&\-flang\-info\-module\-cmi\fR[\fB=\fR\fImodule\fR] \&\fB\-stdlib=\fR\fIlibstdc++,libc++\fR \&\fB\-Wabbreviated\-auto\-in\-template\-arg \&\-Wabi\-tag \-Waligned\-new\fR[\fB=\fR\fIkind\fR] \&\fB\-Wcatch\-value \-Wcatch\-value=\fR\fIn\fR \&\fB\-Wno\-class\-conversion \-Wclass\-memaccess \&\-Wcomma\-subscript \-Wconditionally\-supported \&\-Wno\-conversion\-null \-Wctad\-maybe\-unsupported \&\-Wctor\-dtor\-privacy \-Wdangling\-reference \&\-Wno\-defaulted\-function\-deleted \&\-Wno\-delete\-incomplete \&\-Wdelete\-non\-virtual\-dtor \-Wno\-deprecated\-array\-compare \&\-Wdeprecated\-copy \-Wdeprecated\-copy\-dtor \&\-Wno\-deprecated\-enum\-enum\-conversion \-Wno\-deprecated\-enum\-float\-conversion \&\-Wno\-deprecated\-literal\-operator \-Wdeprecated\-variadic\-comma\-omission \&\-Weffc++ \-Wno\-elaborated\-enum\-base \&\-Wno\-exceptions \-Wno\-expose\-global\-module\-tu\-local \-Wno\-external\-tu\-local \&\-Wextra\-semi \-Wno\-global\-module \-Wno\-inaccessible\-base \&\-Wno\-inherited\-variadic\-ctor \-Wno\-init\-list\-lifetime \&\-Winvalid\-constexpr \-Winvalid\-imported\-macros \&\-Wno\-invalid\-offsetof \-Wno\-literal\-suffix \&\-Wmismatched\-new\-delete \-Wmismatched\-tags \&\-Wmultiple\-inheritance \-Wnamespaces \-Wnarrowing \&\-Wnoexcept \-Wnoexcept\-type \-Wnon\-virtual\-dtor \&\-Wpessimizing\-move \-Wno\-placement\-new \-Wplacement\-new=\fR\fIn\fR \&\fB\-Wrange\-loop\-construct \-Wredundant\-move \-Wredundant\-tags \&\-Wreorder \-Wregister \-Wno\-sfinae\-incomplete \&\-Wstrict\-null\-sentinel \-Wno\-subobject\-linkage \-Wtemplates \&\-Wno\-non\-c\-typedef\-for\-linkage \-Wno\-non\-template\-friend \-Wold\-style\-cast \&\-Woverloaded\-virtual \-Wno\-pmf\-conversions \-Wself\-move \-Wsign\-promo \&\-Wsized\-deallocation \-Wsuggest\-final\-methods \&\-Wsuggest\-final\-types \-Wsuggest\-override \-Wno\-template\-body \&\-Wno\-template\-id\-cdtor \-Wtemplate\-names\-tu\-local \&\-Wno\-terminate \-Wno\-vexing\-parse \-Wvirtual\-inheritance \&\-Wno\-virtual\-move\-assign \-Wvolatile\fR .IP "\fIگزینه‌های زبان‌های Objective\-C و Objective\-C++ (Objective\-C and Objective\-C++ Language Options)\fR" 4 .IX Item "Objective-C and Objective-C++ Language Options" \&\fB\-fconstant\-string\-class=\fR\fIclass\-name\fR \&\fB\-fgnu\-runtime \-fnext\-runtime \&\-fno\-nil\-receivers \&\-fobjc\-abi\-version=\fR\fIn\fR \&\fB\-fobjc\-call\-cxx\-cdtors \&\-fobjc\-direct\-dispatch \&\-fobjc\-exceptions \&\-fobjc\-gc \&\-fobjc\-nilcheck \&\-fobjc\-std=objc1 \&\-fno\-local\-ivars \&\-fivar\-visibility=\fR[\fBpublic\fR|\fBprotected\fR|\fBprivate\fR|\fBpackage\fR] \&\fB\-freplace\-objc\-classes \&\-fzero\-link \&\-gen\-decls \&\-Wassign\-intercept \-Wno\-property\-assign\-default \&\-Wno\-protocol \-Wobjc\-root\-class \-Wselector \&\-Wstrict\-selector\-match \&\-Wundeclared\-selector\fR .IP "\fIگزینه‌های OpenMP و OpenACC (OpenMP and OpenACC Options)\fR" 4 .IX Item "OpenMP and OpenACC Options" \&\fB\-foffload=\fR\fIarg\fR \fB\-foffload\-options=\fR\fIarg\fR \&\fB\-fopenacc \-fopenacc\-dim=\fR\fIgeom\fR \&\fB\-fopenmp \-fopenmp\-simd \-fopenmp\-target\-simd\-clone\fR[\fB=\fR\fIdevice\-type\fR] .IP "\fIگزینه‌های قالب‌بندی پیام‌های تشخیصی (Diagnostic Message Formatting Options)\fR" 4 .IX Item "Diagnostic Message Formatting Options" \&\fB\-fmessage\-length=\fR\fIn\fR \&\fB\-fdiagnostics\-plain\-output \&\-fdiagnostics\-show\-location=\fR[\fBonce\fR|\fBevery\-line\fR] \&\fB\-fdiagnostics\-color=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR] \&\fB\-fdiagnostics\-urls=\fR[\fBauto\fR|\fBnever\fR|\fBalways\fR] \&\fB\-fdiagnostics\-format=\fR[\fBtext\fR|\fBsarif\-stderr\fR|\fBsarif\-file\fR] \&\fB\-fdiagnostics\-add\-output=\fR\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR \&\fB\-fdiagnostics\-set\-output=\fR\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR \&\fB\-fno\-diagnostics\-json\-formatting \&\-fno\-diagnostics\-show\-option \-fno\-diagnostics\-show\-caret \&\-fno\-diagnostics\-show\-event\-links \&\-fno\-diagnostics\-show\-labels \-fno\-diagnostics\-show\-line\-numbers \&\-fno\-diagnostics\-show\-cwe \&\-fno\-diagnostics\-show\-rules \&\-fno\-diagnostics\-show\-highlight\-colors \&\-fno\-diagnostics\-show\-nesting \&\-fno\-diagnostics\-show\-nesting\-locations \&\-fdiagnostics\-show\-nesting\-levels \&\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR \&\fB\-fdiagnostics\-parseable\-fixits \-fdiagnostics\-generate\-patch \&\-fdiagnostics\-show\-template\-tree \-fno\-elide\-type \&\-fdiagnostics\-path\-format=\fR[\fBnone\fR|\fBseparate\-events\fR|\fBinline\-events\fR] \&\fB\-fdiagnostics\-show\-path\-depths \&\-fno\-show\-column \&\-fdiagnostics\-column\-unit=\fR[\fBdisplay\fR|\fBbyte\fR] \&\fB\-fdiagnostics\-column\-origin=\fR\fIorigin\fR \&\fB\-fdiagnostics\-escape\-format=\fR[\fBunicode\fR|\fBbytes\fR] \&\fB\-fdiagnostics\-text\-art\-charset=\fR[\fBnone\fR|\fBascii\fR|\fBunicode\fR|\fBemoji\fR] \&\fB\-fdiagnostics\-show\-context\fR[\fB=\fR\fIdepth\fR] .IP "\fIگزینه‌های هشدار (Warning Options)\fR" 4 .IX Item "Warning Options" \&\fB\-fsyntax\-only \-fmax\-errors=\fR\fIn\fR \fB\-Wpedantic \&\-pedantic\-errors \-fpermissive \&\-w \-Wextra \-Wall \-Wabi=\fR\fIn\fR \&\fB\-Waddress \-Wno\-address\-of\-packed\-member \-Waggregate\-return \&\-Walloc\-size \-Walloc\-size\-larger\-than=\fR\fIbyte\-size\fR \fB\-Walloc\-zero \&\-Walloca \-Walloca\-larger\-than=\fR\fIbyte\-size\fR \fB\-Wauto\-profile \&\-Wno\-aggressive\-loop\-optimizations \&\-Warith\-conversion \&\-Warray\-bounds \-Warray\-bounds=\fR\fIn\fR \fB\-Warray\-compare \&\-Warray\-parameter \-Warray\-parameter=\fR\fIn\fR \&\fB\-Wno\-attributes \-Wattribute\-alias=\fR\fIn\fR \fB\-Wno\-attribute\-alias \&\-Wno\-attribute\-warning \&\-Wbidi\-chars=\fR[\fBnone\fR|\fBunpaired\fR|\fBany\fR|\fBucn\fR] \&\fB\-Wbool\-compare \-Wbool\-operation \&\-Wno\-builtin\-declaration\-mismatch \&\-Wno\-builtin\-macro\-redefined \-Wc90\-c99\-compat \-Wc99\-c11\-compat \&\-Wc11\-c23\-compat \-Wc23\-c2y\-compat \&\-Wc++\-compat \-Wc++11\-compat \-Wc++14\-compat \-Wc++17\-compat \&\-Wc++20\-compat \-Wc++26\-compat \&\-Wno\-c++11\-extensions \-Wno\-c++14\-extensions \-Wno\-c++17\-extensions \&\-Wno\-c++20\-extensions \-Wno\-c++23\-extensions \&\-Wcalloc\-transposed\-args \-Wcannot\-profile \&\-Wcast\-align \-Wcast\-align=strict \-Wcast\-function\-type \-Wcast\-qual \&\-Wchar\-subscripts \&\-Wclobbered \-Wcomment \&\-Wcompare\-distinct\-pointer\-types \&\-Wno\-complain\-wrong\-lang \&\-Wconversion \-Wno\-coverage\-mismatch \-Wno\-cpp \&\-Wdangling\-else \-Wdangling\-pointer \-Wdangling\-pointer=\fR\fIn\fR \&\fB\-Wdate\-time \&\-Wno\-deprecated \-Wno\-deprecated\-declarations \-Wno\-designated\-init \&\-Wno\-deprecated\-openmp \&\-Wdisabled\-optimization \&\-Wno\-discarded\-array\-qualifiers \-Wno\-discarded\-qualifiers \&\-Wno\-div\-by\-zero \-Wdouble\-promotion \&\-Wduplicated\-branches \-Wduplicated\-cond \&\-Wempty\-body \-Wno\-endif\-labels \-Wenum\-compare \-Wenum\-conversion \&\-Wenum\-int\-mismatch \&\-Werror \-Werror=* \-Wexpansion\-to\-defined \-Wfatal\-errors \&\-Wflex\-array\-member\-not\-at\-end \&\-Wfloat\-conversion \-Wfloat\-equal \-Wformat \-Wformat=2 \&\-Wno\-format\-contains\-nul \-Wno\-format\-diag \-Wno\-format\-extra\-args \&\-Wformat\-nonliteral \-Wformat\-overflow=\fR\fIn\fR \&\fB\-Wformat\-security \-Wformat\-signedness \-Wformat\-truncation=\fR\fIn\fR \&\fB\-Wformat\-y2k \-Wframe\-address \&\-Wframe\-larger\-than=\fR\fIbyte\-size\fR \fB\-Wno\-free\-nonheap\-object \&\-Wheader\-guard \-Wno\-if\-not\-aligned \-Wno\-ignored\-attributes \&\-Wignored\-qualifiers \-Wno\-incompatible\-pointer\-types \-Whardened \&\-Wimplicit \-Wimplicit\-fallthrough \-Wimplicit\-fallthrough=\fR\fIn\fR \&\fB\-Wno\-implicit\-function\-declaration \-Wno\-implicit\-int \&\-Winfinite\-recursion \&\-Winit\-self \-Winline \-Wno\-int\-conversion \-Wint\-in\-bool\-context \&\-Wno\-int\-to\-pointer\-cast \-Wno\-invalid\-memory\-model \&\-Winvalid\-pch \-Winvalid\-utf8 \-Wno\-unicode \-Wjump\-misses\-init \&\-Wkeyword\-macro \&\-Wlarger\-than=\fR\fIbyte\-size\fR \fB\-Wleading\-whitespace=\fR\fIkind\fR \&\fB\-Wlogical\-not\-parentheses \-Wlogical\-op \&\-Wlong\-long \-Wno\-lto\-type\-mismatch \-Wmain \-Wmaybe\-uninitialized \&\-Wmemset\-elt\-size \-Wmemset\-transposed\-args \&\-Wmisleading\-indentation \-Wmissing\-attributes \-Wmissing\-braces \&\-Wmissing\-field\-initializers \-Wmissing\-format\-attribute \&\-Wmissing\-include\-dirs \-Wmissing\-noreturn \-Wmusttail\-local\-addr \&\-Wmaybe\-musttail\-local\-addr \-Wno\-missing\-profile \&\-Wno\-multichar \-Wmultistatement\-macros \-Wnonnull \-Wnonnull\-compare \&\-Wnormalized=\fR[\fBnone\fR|\fBid\fR|\fBnfc\fR|\fBnfkc\fR] \&\fB\-Wnull\-dereference \-Wno\-odr \&\-Wopenacc\-parallelism \&\-Wopenmp \-Wopenmp\-simd \&\-Wno\-overflow \-Woverlength\-strings \-Wno\-override\-init\-side\-effects \&\-Wpacked \-Wno\-packed\-bitfield\-compat \-Wpacked\-not\-aligned \-Wpadded \&\-Wparentheses \-Wno\-pedantic\-ms\-format \&\-Wpointer\-arith \-Wno\-pointer\-compare \-Wno\-pointer\-to\-int\-cast \&\-Wno\-pragmas \-Wno\-pragma\-once\-outside\-header \-Wno\-prio\-ctor\-dtor \&\-Wno\-psabi \&\-Wredundant\-decls \-Wrestrict \&\-Wno\-return\-local\-addr \-Wreturn\-type \&\-Wno\-scalar\-storage\-order \-Wsequence\-point \&\-Wshadow \-Wshadow=global \-Wshadow=local \-Wshadow=compatible\-local \&\-Wno\-shadow\-ivar \&\-Wno\-shift\-count\-negative \-Wno\-shift\-count\-overflow \&\-Wshift\-negative\-value \-Wno\-shift\-overflow \-Wshift\-overflow=\fR\fIn\fR \&\fB\-Wsign\-compare \-Wsign\-conversion \&\-Wno\-sizeof\-array\-argument \&\-Wsizeof\-array\-div \&\-Wsizeof\-pointer\-div \-Wsizeof\-pointer\-memaccess \&\-Wstack\-protector \-Wstack\-usage=\fR\fIbyte\-size\fR \fB\-Wstrict\-aliasing \&\-Wstrict\-aliasing=\fR\fIn\fR \fB\-Wstrict\-overflow \-Wstrict\-overflow=\fR\fIn\fR \&\fB\-Wstring\-compare \&\-Wno\-stringop\-overflow \-Wno\-stringop\-overread \&\-Wno\-stringop\-truncation \-Wstrict\-flex\-arrays \&\-Wsuggest\-attribute=\fR\fIattribute\-name\fR \&\fB\-Wswitch \-Wno\-switch\-bool \-Wswitch\-default \-Wswitch\-enum \&\-Wno\-switch\-outside\-range \-Wno\-switch\-unreachable \-Wsync\-nand \&\-Wsystem\-headers \-Wtautological\-compare \-Wtrailing\-whitespace \&\-Wtrailing\-whitespace=\fR\fIkind\fR \fB\-Wtrampolines \-Wtrigraphs \&\-Wtrivial\-auto\-var\-init \-Wno\-tsan \-Wtype\-limits \-Wundef \&\-Wuninitialized \-Wunknown\-pragmas \&\-Wunsuffixed\-float\-constants \&\-Wunterminated\-string\-initialization \&\-Wunused \&\-Wunused\-but\-set\-parameter \-Wunused\-but\-set\-parameter=\fR\fIn\fR \&\fB\-Wunused\-but\-set\-variable \-Wunused\-but\-set\-variable=\fR\fIn\fR \&\fB\-Wunused\-const\-variable \-Wunused\-const\-variable=\fR\fIn\fR \&\fB\-Wunused\-function \-Wunused\-label \-Wunused\-local\-typedefs \&\-Wunused\-macros \&\-Wunused\-parameter \-Wno\-unused\-result \&\-Wunused\-value \-Wunused\-variable \&\-Wuse\-after\-free \-Wuse\-after\-free=\fR\fIn\fR \fB\-Wuseless\-cast \&\-Wno\-varargs \-Wvariadic\-macros \&\-Wvector\-operation\-performance \&\-Wvla \-Wvla\-larger\-than=\fR\fIbyte\-size\fR \fB\-Wno\-vla\-larger\-than \&\-Wvolatile\-register\-var \-Wwrite\-strings \&\-Wno\-xor\-used\-as\-pow \&\-Wzero\-as\-null\-pointer\-constant \&\-Wzero\-length\-bounds \&\-\-all\-warnings \-\-extra\-warnings \-\-no\-warnings \&\-\-pedantic \-\-pedantic\-errors\fR.IP "\fIگزینه‌های تحلیل‌گر ایستا\fR" 4 .IX Item "گزینه‌های تحلیل‌گر ایستا" \&\fB\-fanalyzer \&\-fanalyzer\-assume\-nothrow \&\-fanalyzer\-call\-summaries \&\-fanalyzer\-checker=\fR\fIname\fR \&\fB\-fno\-analyzer\-feasibility \&\-fanalyzer\-show\-events\-in\-system\-headers \&\-fno\-analyzer\-state\-merge \&\-fno\-analyzer\-state\-purge \&\-fno\-analyzer\-suppress\-followups \&\-fanalyzer\-transitivity \&\-fno\-analyzer\-undo\-inlining \&\-fanalyzer\-verbose\-edges \&\-fanalyzer\-verbose\-state\-changes \&\-fanalyzer\-verbosity=\fR\fIlevel\fR \&\fB\-fdump\-analyzer \&\-fdump\-analyzer\-callgraph \&\-fdump\-analyzer\-exploded\-graph \&\-fdump\-analyzer\-exploded\-nodes \&\-fdump\-analyzer\-exploded\-nodes\-2 \&\-fdump\-analyzer\-exploded\-nodes\-3 \&\-fdump\-analyzer\-exploded\-paths \&\-fdump\-analyzer\-feasibility \&\-fdump\-analyzer\-infinite\-loop \&\-fdump\-analyzer\-json \&\-fdump\-analyzer\-state\-purge \&\-fdump\-analyzer\-stderr \&\-fdump\-analyzer\-supergraph \&\-fdump\-analyzer\-untracked \&\-Wno\-analyzer\-double\-fclose \&\-Wno\-analyzer\-double\-free \&\-Wno\-analyzer\-exposure\-through\-output\-file \&\-Wno\-analyzer\-exposure\-through\-uninit\-copy \&\-Wno\-analyzer\-fd\-access\-mode\-mismatch \&\-Wno\-analyzer\-fd\-double\-close \&\-Wno\-analyzer\-fd\-leak \&\-Wno\-analyzer\-fd\-phase\-mismatch \&\-Wno\-analyzer\-fd\-type\-mismatch \&\-Wno\-analyzer\-fd\-use\-after\-close \&\-Wno\-analyzer\-fd\-use\-without\-check \&\-Wno\-analyzer\-file\-leak \&\-Wno\-analyzer\-free\-of\-non\-heap \&\-Wno\-analyzer\-imprecise\-fp\-arithmetic \&\-Wno\-analyzer\-infinite\-loop \&\-Wno\-analyzer\-infinite\-recursion \&\-Wno\-analyzer\-jump\-through\-null \&\-Wno\-analyzer\-malloc\-leak \&\-Wno\-analyzer\-mismatching\-deallocation \&\-Wno\-analyzer\-null\-argument \&\-Wno\-analyzer\-null\-dereference \&\-Wno\-analyzer\-out\-of\-bounds \&\-Wno\-analyzer\-overlapping\-buffers \&\-Wno\-analyzer\-possible\-null\-argument \&\-Wno\-analyzer\-possible\-null\-dereference \&\-Wno\-analyzer\-putenv\-of\-auto\-var \&\-Wno\-analyzer\-shift\-count\-negative \&\-Wno\-analyzer\-shift\-count\-overflow \&\-Wno\-analyzer\-stale\-setjmp\-buffer \&\-Wno\-analyzer\-tainted\-allocation\-size \&\-Wno\-analyzer\-tainted\-assertion \&\-Wno\-analyzer\-tainted\-array\-index \&\-Wno\-analyzer\-tainted\-divisor \&\-Wno\-analyzer\-tainted\-offset \&\-Wno\-analyzer\-tainted\-size \&\-Wno\-analyzer\-throw\-of\-unexpected\-type \&\-Wanalyzer\-symbol\-too\-complex \&\-Wanalyzer\-too\-complex \&\-Wno\-analyzer\-undefined\-behavior\-ptrdiff \&\-Wno\-analyzer\-undefined\-behavior\-strtok \&\-Wno\-analyzer\-unsafe\-call\-within\-signal\-handler \&\-Wno\-analyzer\-use\-after\-free \&\-Wno\-analyzer\-use\-of\-pointer\-in\-stale\-stack\-frame \&\-Wno\-analyzer\-use\-of\-uninitialized\-value \&\-Wno\-analyzer\-va\-arg\-type\-mismatch \&\-Wno\-analyzer\-va\-list\-exhausted \&\-Wno\-analyzer\-va\-list\-leak \&\-Wno\-analyzer\-va\-list\-use\-after\-va\-end \&\-Wno\-analyzer\-write\-to\-const \&\-Wno\-analyzer\-write\-to\-string\-literal\fR .IP "\fIگزینه‌های هشدار ویژهٔ C و Objective\-C\fR" 4 .IX Item "گزینه‌های هشدار ویژهٔ C و Objective-C" \&\fB\-Wbad\-function\-cast \-Wdeprecated\-non\-prototype \-Wfree\-labels \&\-Wmissing\-declarations \-Wmissing\-parameter\-name \-Wmissing\-parameter\-type \&\-Wdeclaration\-missing\-parameter\-type \-Wmissing\-prototypes \&\-Wmissing\-variable\-declarations \&\-Wmultiple\-parameter\-fwd\-decl\-lists \&\-Wnested\-externs \-Wold\-style\-declaration \&\-Wold\-style\-definition \-Wstrict\-prototypes \-Wtraditional \&\-Wtraditional\-conversion \-Wdeclaration\-after\-statement \-Wpointer\-sign\fR .IP "\fIگزینه‌های اشکال‌زدایی\fR" 4 .IX Item "گزینه‌های اشکال‌زدایی" \&\fB\-g \-g\fR\fIlevel\fR \fB\-gdwarf \-gdwarf\-\fR\fIversion\fR \&\fB\-gbtf \-gctf \-gctf\fR\fIlevel\fR \&\fB\-gno\-prune\-btf \-ggdb \-gno\-record\-gcc\-switches \&\-gstrict\-dwarf \-gas\-loc\-support \-gas\-locview\-support \&\-gcodeview \-gcolumn\-info \-gdwarf32 \-gdwarf64 \&\-gno\-statement\-frontiers \&\-gno\-variable\-location\-views \-gvariable\-location\-views=incompat5 \&\-ginternal\-reset\-location\-views \-ginline\-points \&\-gvms \-gz\fR[\fB=\fR\fItype\fR] \&\fB\-gsplit\-dwarf \-gdescribe\-dies \&\-fdebug\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \fB\-fdebug\-types\-section \&\-fno\-eliminate\-unused\-debug\-types \&\-femit\-struct\-debug\-baseonly \-femit\-struct\-debug\-reduced \&\-femit\-struct\-debug\-detailed\fR[\fB=\fR\fIspec\-list\fR] \&\fB\-fno\-eliminate\-unused\-debug\-symbols \-femit\-class\-debug\-always \&\-fno\-merge\-debug\-strings \-fno\-dwarf2\-cfi\-asm \&\-fvar\-tracking \-fvar\-tracking\-assignments \-fvar\-tracking\-uninit \&\-\-debug\fR .IP "\fIگزینه‌های بهینه‌سازی\fR" 4 .IX Item "گزینه‌های بهینه‌سازی" \&\fB\-faggressive\-loop\-optimizations \&\-falign\-functions[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] \&\-falign\-jumps[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] \&\-falign\-labels[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] \&\-falign\-loops[=\fR\fIn\fR\fB[:\fR\fIm\fR\fB:[\fR\fIn2\fR\fB[:\fR\fIm2\fR\fB]]]] \&\-fmin\-function\-alignment=[\fR\fIn\fR\fB] \&\-fno\-allocation\-dce \-fallow\-store\-data\-races \&\-fassociative\-math \-fauto\-profile \-fauto\-profile[=\fR\fIpath\fR\fB] \&\-fauto\-profile\-inlining \-fauto\-inc\-dec \-fbranch\-probabilities \&\-fcaller\-saves \&\-fcombine\-stack\-adjustments \-fconserve\-stack \&\-ffold\-mem\-offsets \&\-fcompare\-elim \-fcprop\-registers \-fcrossjumping \&\-fcse\-follow\-jumps \-fcse\-skip\-blocks \-fcx\-fortran\-rules \&\-fcx\-limited\-range \-fcx\-method \&\-fdata\-sections \-fdce \-fdelayed\-branch \&\-fdelete\-null\-pointer\-checks \-fdep\-fusion \-fdevirtualize \&\-fdevirtualize\-speculatively \-fdevirtualize\-at\-ltrans \-fdse \&\-fearly\-inlining \-fexcess\-precision=\fR\fIstyle\fR \&\fB\-fexpensive\-optimizations \-fext\-dce \&\-ffast\-math \-ffat\-lto\-objects \-ffinite\-loops \&\-ffinite\-math\-only \-ffloat\-store \&\-fforward\-propagate \-ffp\-contract=\fR\fIstyle\fR \fB\-ffp\-int\-builtin\-inexact \&\-ffunction\-sections \-ffuse\-ops\-with\-volatile\-access \&\-fgcse \-fgcse\-after\-reload \-fgcse\-las \-fgcse\-lm \-fgraphite\-identity \&\-fgcse\-sm \-fhoist\-adjacent\-loads \-fif\-conversion \&\-fif\-conversion2 \-findirect\-inlining \&\-finline\-atomics \-finline\-functions \-finline\-functions\-called\-once \&\-finline\-limit=\fR\fIn\fR \fB\-finline\-small\-functions \&\-finline\-stringops\fR[\fB=\fR\fIfn\fR] \&\fB\-fipa\-modref \-fipa\-cp \-fipa\-cp\-clone \&\-fipa\-bit\-cp \-fipa\-vrp \-fipa\-pta \-fipa\-profile \-fipa\-pure\-const \&\-fipa\-reference \-fipa\-reference\-addressable \-fipa\-reorder\-for\-locality \&\-fipa\-sra \-fipa\-stack\-alignment \&\-fipa\-icf \-fipa\-icf\-functions \-fipa\-icf\-variables \&\-fira\-algorithm=\fR\fIalgorithm\fR \&\fB\-flate\-combine\-instructions \-flifetime\-dse \-flive\-patching=\fR\fIlevel\fR \&\fB\-fira\-region=\fR\fIregion\fR \fB\-fira\-hoist\-pressure \&\-fira\-loop\-pressure \-fno\-ira\-share\-save\-slots \&\-fno\-ira\-share\-spill\-slots \&\-fisolate\-erroneous\-paths\-dereference \-fisolate\-erroneous\-paths\-attribute \&\-fivopts \-fkeep\-inline\-functions \-fkeep\-static\-functions \&\-fkeep\-static\-consts \-flimit\-function\-alignment \-flive\-range\-shrinkage \&\-floop\-block \-floop\-interchange \-floop\-strip\-mine \&\-floop\-unroll\-and\-jam \-floop\-nest\-optimize \&\-floop\-parallelize\-all \-flra\-remat \-flto \-flto\-compression\-level=\fR\fIn\fR \&\fB\-flto\-toplevel\-asm\-heuristics \&\-flto\-partition=\fR\fIalg\fR \fB\-flto\-incremental=\fR\fIpath\fR \&\fB\-flto\-incremental\-cache\-size=\fR\fIn\fR \fB\-fmalloc\-dce \-fmerge\-all\-constants \&\-fmerge\-constants \-fmodulo\-sched \-fmodulo\-sched\-allow\-regmoves \&\-fmove\-loop\-invariants \-fmove\-loop\-stores \-fno\-branch\-count\-reg \&\-fno\-defer\-pop \-fno\-function\-cse \&\-fno\-guess\-branch\-probability \-fno\-inline \-fno\-math\-errno \-fno\-peephole \&\-fno\-peephole2 \-fno\-printf\-return\-value \-fno\-sched\-interblock \&\-fno\-sched\-spec \-fno\-signed\-zeros \&\-fno\-toplevel\-reorder \-fno\-trapping\-math \-fno\-zero\-initialized\-in\-bss \&\-fomit\-frame\-pointer \-foptimize\-crc \-foptimize\-sibling\-calls \&\-fpartial\-inlining \-fpeel\-loops \-fpredictive\-commoning \&\-fprefetch\-loop\-arrays \&\-fprofile\-correction \&\-fprofile\-use \-fprofile\-use=\fR\fIpath\fR \fB\-fprofile\-partial\-training \&\-fprofile\-values \-fprofile\-reorder\-functions \&\-freciprocal\-math \-free \-frename\-registers \-freorder\-blocks \&\-freorder\-blocks\-algorithm=\fR\fIalgorithm\fR \&\fB\-freorder\-blocks\-and\-partition \-freorder\-functions \&\-frerun\-cse\-after\-loop \-freschedule\-modulo\-scheduled\-loops \&\-frounding\-math \-fsave\-optimization\-record \&\-fsched2\-use\-superblocks \-fsched\-pressure \&\-fsched\-spec\-load \-fsched\-spec\-load\-dangerous \&\-fsched\-stalled\-insns\-dep[=\fR\fIn\fR\fB] \-fsched\-stalled\-insns[=\fR\fIn\fR\fB] \&\-fsched\-group\-heuristic \-fsched\-critical\-path\-heuristic \&\-fsched\-spec\-insn\-heuristic \-fsched\-rank\-heuristic \&\-fsched\-last\-insn\-heuristic \-fsched\-dep\-count\-heuristic \&\-fschedule\-fusion \&\-fschedule\-insns \-fschedule\-insns2 \-fsection\-anchors \&\-fselective\-scheduling \-fselective\-scheduling2 \&\-fsel\-sched\-pipelining \-fsel\-sched\-pipelining\-outer\-loops \&\-fsemantic\-interposition \-fshrink\-wrap \-fshrink\-wrap\-separate \&\-fsignaling\-nans \&\-fsingle\-precision\-constant \-fsplit\-ivs\-in\-unroller \-fsplit\-loops \&\-fspeculatively\-call\-stored\-functions \-fsplit\-paths \&\-fsplit\-wide\-types \-fsplit\-wide\-types\-early \-fssa\-backprop \-fssa\-phiopt \&\-fstdarg\-opt \-fstore\-merging \-fstrict\-aliasing \-fipa\-strict\-aliasing \&\-fthread\-jumps \-ftracer \-ftree\-bit\-ccp \&\-ftree\-builtin\-call\-dce \-ftree\-ccp \-ftree\-ch \-ftree\-coalesce\-vars \&\-ftree\-copy\-prop \-ftree\-cselim \-ftree\-dce \-ftree\-dominator\-opts \&\-ftree\-dse \-ftree\-forwprop \-ftree\-fre \-fcode\-hoisting \&\-ftree\-loop\-if\-convert \-ftree\-loop\-im \&\-ftree\-phiprop \-ftree\-loop\-distribution \-ftree\-loop\-distribute\-patterns \&\-ftree\-loop\-ivcanon \-ftree\-loop\-linear \-ftree\-loop\-optimize \&\-ftree\-loop\-vectorize \&\-ftree\-parallelize\-loops[=\fR\fIn\fR\fB] \-ftree\-pre \-ftree\-partial\-pre \-ftree\-pta \&\-ftree\-reassoc \-ftree\-scev\-cprop \-ftree\-sink \-ftree\-slsr \-ftree\-sra \&\-ftree\-switch\-conversion \-ftree\-tail\-merge \&\-ftree\-ter \-ftree\-vectorize \-ftree\-vrp \-ftrivial\-auto\-var\-init \&\-funconstrained\-commons \-funit\-at\-a\-time \-funroll\-all\-loops \&\-funroll\-loops \-funsafe\-math\-optimizations \-funswitch\-loops \&\-fipa\-ra \-fvariable\-expansion\-in\-unroller \-fvect\-cost\-model \-fvpt \&\-fweb \-fwhole\-program \-fwpa \-fuse\-linker\-plugin \-fzero\-call\-used\-regs \&\-O \-O0 \-O1 \-O2 \-O3 \-Os \-Ofast \-Og \-Oz \-\-optimize\fR.IP "\fIگزینه‌های ابزارگذاری برنامه (Program Instrumentation Options)\fR" 4 .IX Item "گزینه‌های ابزارگذاری برنامه (Program Instrumentation Options)" \&\fB\-p \-pg \-fprofile\-arcs \-coverage \-ftest\-coverage \&\-fcondition\-coverage \&\-fpath\-coverage \&\-fprofile \-fprofile\-abs\-path \&\-fprofile\-dir=\fR\fIpath\fR \fB\-fprofile\-generate \-fprofile\-generate=\fR\fIpath\fR \&\fB\-fprofile\-info\-section \-fprofile\-info\-section=\fR\fIname\fR \&\fB\-fprofile\-note=\fR\fIpath\fR \fB\-fprofile\-prefix\-path=\fR\fIpath\fR \&\fB\-fprofile\-update=\fR\fImethod\fR \fB\-fprofile\-filter\-files=\fR\fIregex\fR \&\fB\-fprofile\-exclude\-files=\fR\fIregex\fR \&\fB\-fprofile\-reproducible=\fR[\fBmultithreaded\fR|\fBparallel\-runs\fR|\fBserial\fR] \&\fB\-fsanitize=\fR\fIstyle\fR \fB\-fsanitize\-recover \-fsanitize\-recover=\fR\fIstyle\fR \&\fB\-fsanitize\-trap \-fsanitize\-trap=\fR\fIstyle\fR \&\fB\-fasan\-shadow\-offset=\fR\fInumber\fR \fB\-fsanitize\-sections=\fR\fIs1\fR\fB,\fR\fIs2\fR\fB,... \&\-fsanitize\-undefined\-trap\-on\-error \-fcf\-protection \&\-fcf\-protection=\fR[\fBfull\fR|\fBbranch\fR|\fBreturn\fR|\fBnone\fR|\fBcheck\fR] \&\fB\-fharden\-compares \-fharden\-conditional\-branches \-fhardened \&\-fharden\-control\-flow\-redundancy \-fhardcfr\-skip\-leaf \&\-fhardcfr\-check\-exceptions \-fhardcfr\-check\-returning\-calls \&\-fhardcfr\-check\-noreturn\-calls=\fR[\fBalways\fR|\fBno\-xthrow\fR|\fBnothrow\fR|\fBnever\fR] \&\fB\-fstack\-protector \-fstack\-protector\-all \-fstack\-protector\-strong \&\-fstack\-protector\-explicit \-fstack\-check \&\-fstack\-limit\-register=\fR\fIreg\fR \fB\-fstack\-limit\-symbol=\fR\fIsym\fR \&\fB\-fno\-stack\-limit \-fsplit\-stack \&\-fstrub=disable \-fstrub=strict \-fstrub=relaxed \&\-fstrub=all \-fstrub=at\-calls \-fstrub=internal \&\-fvtable\-verify=\fR[\fBstd\fR|\fBpreinit\fR|\fBnone\fR] \&\fB\-fvtv\-counts \-fvtv\-debug \&\-finstrument\-functions \-finstrument\-functions\-once \&\-finstrument\-functions\-exclude\-function\-list=\fR\fIsym\fR\fB,\fR\fIsym\fR\fB,... \&\-finstrument\-functions\-exclude\-file\-list=\fR\fIfile\fR\fB,\fR\fIfile\fR\fB,... \&\-fprofile\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \&\fB\-fpatchable\-function\-entry=\fR\fIN\fR[\fB,\fR\fIM\fR] \&\fB\-\-coverage \-\-profile\fR .IP "\fIگزینه‌های پیش‌پردازنده (Preprocessor Options)\fR" 4 .IX Item "گزینه‌های پیش‌پردازنده (Preprocessor Options)" \&\fB\-C \-CC \-D\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \&\fB\-dD \-dI \-dM \-dN \-dU \&\-fdebug\-cpp \-fdirectives\-only \-fdollars\-in\-identifiers \&\-fexec\-charset=\fR\fIcharset\fR \fB\-fextended\-identifiers \&\-finput\-charset=\fR\fIcharset\fR \&\fB\-fmacro\-prefix\-map=\fR\fIold\fR\fB=\fR\fInew\fR \fB\-fmax\-include\-depth=\fR\fIdepth\fR \&\fB\-fno\-canonical\-system\-headers \-fpch\-deps \-fpch\-preprocess \&\-fpreprocessed \-ftabstop=\fR\fIwidth\fR \fB\-ftrack\-macro\-expansion \&\-fwide\-exec\-charset=\fR\fIcharset\fR \fB\-fworking\-directory \&\-H \-imacros\fR \fIfile\fR \fB\-include\fR \fIfile\fR \&\fB\-M \-MD \-MF \-MG \-MM \-MMD \-MP \-MQ \-MT \-Mno\-modules \&\-no\-integrated\-cpp \-P \-pthread \-remap \&\-traditional \-traditional\-cpp \-trigraphs \&\-U\fR\fImacro\fR \fB\-undef \&\-Wp,\fR\fIoption\fR \fB\-Xpreprocessor\fR \fIoption\fR \&\fB\-\-comments \-\-comments\-in\-macros \&\-\-define\-macro=\fR\fImacro\fR[\fB=\fR\fIdefn\fR] \&\fB\-\-dependencies \-\-dump=\fR\fIletters\fR \&\fB\-\-imacros=\fR\fIfile\fR \fB\-\-include=\fR\fIfile\fR \&\fB\-\-no\-integrated\-cpp \-\-no\-line\-commands \&\-\-print\-missing\-file\-dependencies \&\-\-traditional \-\-traditional\-cpp \-\-trigraphs \-\-trace\-includes \&\-\-undefine\-macro=\fR\fImacro\fR \&\fB\-\-user\-dependencies \-\-write\-dependencies \-\-write\-user\-dependencies\fR .IP "\fIگزینه‌های اسمبلر (Assembler Options)\fR" 4 .IX Item "گزینه‌های اسمبلر (Assembler Options)" \&\fB\-Wa,\fR\fIoption\fR \fB\-Xassembler\fR \fIoption\fR \&\fB\-\-for\-assembler=\fR\fIoption\fR .IP "\fIگزینه‌های پیونددهنده (Linker Options)\fR" 4 .IX Item "گزینه‌های پیونددهنده (Linker Options)" \&\fIobject\-file\-name\fR \fB\-flink\-libatomic \-fuse\-ld=\fR\fIlinker\fR \fB\-l\fR\fIlibrary\fR \&\fB\-nostartfiles \-nodefaultlibs \-nolibc \-nostdlib \-nostdlib++ \&\-e\fR \fIentry\fR \&\fB\-pie \-pthread \-r \-rdynamic \&\-s \-static \-static\-pie \-static\-libgcc \-static\-libstdc++ \&\-static\-libasan \-static\-libhwasan \-static\-liblsan \&\-static\-libtsan \-static\-libubsan \&\-shared \-shared\-libgcc \-symbolic \&\-T\fR \fIscript\fR \fB\-Wl,\fR\fIoption\fR \fB\-Xlinker\fR \fIoption\fR \&\fB\-u\fR \fIsymbol\fR \&\fB\-Tbss=\fR\fIaddr\fR \fB\-Tdata=\fR\fIaddr\fR \fB\-Ttext=\fR\fIaddr\fR \&\fB\-N \-n \-t \-Z \-z\fR \fIkeyword\fR \&\fB\-\-entry=\fR\fIentry\fR \fB\-\-for\-linker=\fR\fIoption\fR \&\fB\-\-force\-link=\fR\fIsymbol\fR \fB\-\-no\-standard\-library \&\-\-pie \-\-static \-\-static\-pie \-\-symbolic\fR .IP "\fIگزینه‌های دایرکتوری (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\-imultiarch\fR \fIdir\fR \&\fB\-iplugindir=\fR\fIdir\fR \fB\-iprefix\fR \fIfile\fR \&\fB\-iquote\fR \fIdir\fR \fB\-isysroot\fR \fIdir\fR \fB\-isystem\fR \fIdir\fR \&\fB\-iwithprefix\fR \fIdir\fR \fB\-iwithprefixbefore\fR \fIdir\fR \&\fB\-L\fR\fIdir\fR \fB\-no\-canonical\-prefixes \-\-no\-sysroot\-suffix \&\-nostdinc \-nostdinc++ \&\-\-embed\-dir=\fR\fIdir\fR \fB\-\-embed\-directory=\fR\fIdir\fR \&\fB\-\-include\-barrier \-\-include\-directory=\fR\fIdir\fR \&\fB\-\-include\-directory\-after=\fR\fIdir\fR \fB\-\-include\-prefix=\fR\fIprefix\fR \&\fB\-\-include\-with\-prefix=\fR\fIprefix\fR \fB\-\-include\-with\-prefix\-after=\fR\fIprefix\fR \&\fB\-\-include\-with\-prefix\-before=\fR\fIprefix\fR \&\fB\-\-no\-canonical\-prefixes \-\-no\-standard\-includes \&\-\-prefix=\fR\fIprefix\fR \fB\-\-sysroot=\fR\fIdir\fR .IP "\fIگزینه‌های تولید کد (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 \-fwrapv\-pointer \&\-fvisibility=\fR[\fBdefault\fR|\fBinternal\fR|\fBhidden\fR|\fBprotected\fR] \&\fB\-fstrict\-volatile\-bitfields \-fsync\-libcalls \&\-fzero\-init\-padding\-bits=\fR\fIvalue\fR \&\fB\-Qy \-Qn\fR .IP "\fIگزینه‌های توسعه‌دهنده (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\-internal\-locations \&\-fdump\-ipa\-all \-fdump\-ipa\-cgraph \-fdump\-ipa\-inline \&\-fdump\-lang\-all \&\-fdump\-lang\-\fR\fIswitch\fR \&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR \&\fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR \&\fB\-fdump\-passes \&\-fdump\-rtl\-\fR\fIpass\fR \fB\-fdump\-rtl\-\fR\fIpass\fR\fB=\fR\fIfilename\fR \&\fB\-fdump\-statistics \&\-fdump\-tree\-all \&\-fdump\-tree\-\fR\fIswitch\fR \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR \&\fB\-fdump\-tree\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR \&\fB\-fcompare\-debug\fR[\fB=\fR\fIopts\fR] \fB\-fcompare\-debug\-second \&\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR \&\fB\-fenable\-\fR\fIkind\fR\fB\-\fR\fIpass\fR\fB=\fR\fIrange\-list\fR \&\fB\-fira\-verbose=\fR\fIn\fR \&\fB\-flto\-report \-flto\-report\-wpa \-fmem\-report\-wpa \&\-fmem\-report \-fpre\-ipa\-mem\-report \-fpost\-ipa\-mem\-report \&\-fopt\-info \-fopt\-info\-\fR\fIoptions\fR[\fB=\fR\fIfile\fR] \&\fB\-fmultiflags \-fprofile\-report \&\-frandom\-seed=\fR\fIstring\fR \fB\-fsched\-verbose=\fR\fIn\fR \&\fB\-fsel\-sched\-verbose \-fsel\-sched\-dump\-cfg \-fsel\-sched\-pipelining\-verbose \&\-fstats \-fstack\-usage \-ftime\-report \-ftime\-report\-details \&\-fvar\-tracking\-assignments\-toggle \-gtoggle \&\-print\-autofdo\-gcov\-version \&\-print\-file\-name=\fR\fIlibrary\fR \fB\-print\-libgcc\-file\-name \&\-print\-multi\-directory \-print\-multi\-lib \-print\-multi\-os\-directory \&\-print\-multiarch \&\-print\-prog\-name=\fR\fIprogram\fR \fB\-print\-search\-dirs \-Q \&\-print\-sysroot \-print\-sysroot\-headers\-suffix \&\-save\-temps \-save\-temps=cwd \-save\-temps=obj \&\-specs=\fR\fIfile\fR \fB\-time\fR[\fB=\fR\fIfile\fR] \&\fB\-\-dump=\fR\fIletters\fR \&\fB\-\-print\-autofdo\-gcov\-version \&\-\-print\-file\-name=\fR\fIlibrary\fR \fB\-\-print\-libgcc\-file\-file\-name \&\-\-print\-multi\-directory \-\-print\-multi\-lib \-\-print\-multi\-os\-directory \&\-\-print\-multiarch \-\-print\-prog\-name=\fR\fIprogram\fR \&\fB\-\-print\-search\-dirs \-\-print\-sysroot \-\-print\-sysroot\-headers\-suffix \&\-\-save\-temps \-\-specs=\fR\fIfile\fR \&\fB\-\-param\fR \fIname\fR\fB=\fR\fIvalue\fR\fB \fR .IP "\fIگزینه‌های وابسته به مقصد (Target\-Specific Options)\fR" 4 .IX Item "گزینه‌های وابسته به مقصد (Target-Specific Options)" \&\fIگزینه‌های AArch64\fR (\fBAArch64 Options\fR) \&\fB\-mabi=\fR\fIname\fR \fB\-mbig\-endian \-mlittle\-endian \&\-menable\-sysreg\-checking \&\-mgeneral\-regs\-only \&\-mcmodel=tiny \-mcmodel=small \-mcmodel=large \&\-mstrict\-align \-momit\-leaf\-frame\-pointer \&\-mtls\-dialect=desc \-mtls\-dialect=traditional \&\-mtls\-size=\fR\fIsize\fR \fB\-mtp=\fR\fIname\fR \&\fB\-mfix\-cortex\-a53\-835769 \-mfix\-cortex\-a53\-843419 \&\-mlow\-precision\-recip\-sqrt \-mlow\-precision\-sqrt \-mlow\-precision\-div \&\-mmax\-vectorization \-mautovec\-preference=\fR\fIname\fR \&\fB\-mpc\-relative\-literal\-loads \&\-msign\-return\-address=\fR\fIscope\fR \&\fB\-mbranch\-protection=\fR\fIfeatures\fR \&\fB\-mharden\-sls=\fR\fIopts\fR \&\fB\-march=\fR\fIname\fR \fB\-mcpu=\fR\fIname\fR \fB\-mtune=\fR\fIname\fR \&\fB\-moverride=\fR\fIstring\fR \&\fB\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIsysreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \fB\-mtrack\-speculation \&\-moutline\-atomics \-mearly\-ra \-mearly\-ldp\-fusion \-mlate\-ldp\-fusion \-mnarrow\-gp\-writes \&\-msve\-vector\-bits=\fR\fIbits\fR .Sp \&\fIگزینه‌های Adapteva Epiphany\fR (\fBAdapteva Epiphany Options\fR) \&\fB\-mhalf\-reg\-file \-mprefer\-short\-insn\-regs \&\-mbranch\-cost=\fR\fInum\fR \fB\-mcmove \-mnops=\fR\fInum\fR \fB\-msoft\-cmpsf \&\-msplit\-lohi \-mpost\-inc \-mpost\-modify \-mstack\-offset=\fR\fInum\fR \&\fB\-mround\-nearest \-mlong\-calls \-mshort\-calls \-msmall16 \&\-mfp\-mode=\fR\fImode\fR \fB\-mmay\-round\-for\-trunc \-mfp\-iarith \&\-mvect\-double \-max\-vect\-align=\fR\fInum\fR \&\fB\-msplit\-vecmove\-early \-m1reg\-\fR\fIreg\fR .Sp \&\fIگزینه‌های AMD GCN\fR (\fBAMD GCN Options\fR) \&\fB\-march=\fR\fIgpu\fR \fB\-mtune=\fR\fIgpu\fR \&\fB\-mgang\-private\-size=\fR\fIbytes\fR \&\fB\-msram\-ecc=\fR[\fBon\fR|\fBoff\fR|\fBany\fR] \&\fB\-mxnack=\fR[\fBon\fR|\fBoff\fR|\fBany\fR] \&\fB\-Wopenacc\-dims\fR .Sp \&\fIگزینه‌های ARC\fR (\fBARC Options\fR) \&\fB\-mbarrel\-shifter \-mjli\-always \&\-mcpu=\fR\fIcpu\fR \fB\-mA6 \-mARC600 \-mA7 \-mARC700 \&\-mdpfp \-mdpfp\-compact \-mdpfp\-fast \-mno\-dpfp\-lrsr \&\-mea \-mmul32x16 \-mmul64 \-matomic \&\-mnorm \-mspfp \-mspfp\-compact \-mspfp\-fast \-msimd \-msoft\-float \-mswap \&\-mlock \-mswape \&\-mxy \-misize \-marclinux \-marclinux_prof \&\-mlong\-calls \-mmedium\-calls \-msdata \-mirq\-ctrl\-saved \&\-mrgf\-banked\-regs \-mlpc\-width=\fR\fIwidth\fR \fB\-G\fR \fInum\fR \&\fB\-mvolatile\-cache \-mtp\-regno=\fR\fIregno\fR \&\fB\-mbitops \-mcmem \-munaligned\-access \&\-mauto\-modify\-reg \-mno\-brcc \&\-mcase\-vector\-pcrel \-mno\-cond\-exec \-mearly\-cbranchsi \&\-mindexed\-loads \-mlra\-priority\-none \&\-mlra\-priority\-compact \-mlra\-priority\-noncompact \-mmillicode \&\-msize\-level=\fR\fIlevel\fR \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmultcost=\fR\fInum\fR \fB\-mcode\-density\-frame \&\-mmpy\-option=\fR\fImulto\fR \&\fB\-mdiv\-rem \-mcode\-density \-mll64 \-mfpu=\fR\fIfpu\fR \fB\-mrf16 \-mbranch\-index\fR .Sp \&\fIگزینه‌های ARM\fR (\fBARM Options\fR) \&\fB\-mapcs\-frame \-mapcs \&\-mabi=\fR\fIname\fR \&\fB\-mgeneral\-regs\-only \-mno\-sched\-prolog \&\-mlittle\-endian \-mbig\-endian \&\-mbe8 \-mbe32 \&\-mfloat\-abi=\fR\fIname\fR \&\fB\-mfp16\-format=\fR\fIname\fR \&\fB\-mthumb\-interwork \&\-mcpu=\fR\fIname\fR \fB\-march=\fR\fIname\fR \fB\-mfpu=\fR\fIname\fR \fB\-mtune=\fR\fIname\fR \&\fB\-mstructure\-size\-boundary=\fR\fIn\fR \&\fB\-mabort\-on\-noreturn \-mlong\-calls \&\-msingle\-pic\-base \-mpic\-register=\fR\fIreg\fR \&\fB\-mpic\-data\-is\-text\-relative \&\-mnop\-fun\-dllimport \&\-mpoke\-function\-name \&\-mthumb \-marm \&\-mtpcs\-frame \-mtpcs\-leaf\-frame \&\-mcaller\-super\-interworking \-mcallee\-super\-interworking \&\-mtp=\fR\fIname\fR \fB\-mtls\-dialect=\fR\fIdialect\fR \&\fB\-mword\-relocations \&\-mfix\-cortex\-m3\-ldrd \&\-mfix\-cortex\-a57\-aes\-1742098 \&\-mfix\-cortex\-a72\-aes\-1655431 \&\-munaligned\-access \&\-mslow\-flash\-data \&\-masm\-syntax\-unified \&\-mrestrict\-it \&\-mpure\-code \&\-mcmse \&\-mfix\-cmse\-cve\-2021\-35465 \&\-mstack\-protector\-guard=\fR\fIguard\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \&\fB\-mfdpic \&\-mbranch\-protection=\fR\fIfeatures\fR \&\fB\-mvectorize\-with\-neon\-quad \-mvectorize\-with\-neon\-double\fR.Sp \&\fIگزینه‌های AVR\fR (\fBAVR Options\fR) \&\fB\-mmcu=\fR\fImcu\fR \fB\-mabsdata \-maccumulate\-args \-mcvt \&\-mbranch\-cost=\fR\fIcost\fR \fB\-mfuse\-add=\fR\fIlevel\fR \fB\-mfuse\-move=\fR\fIlevel\fR \&\fB\-mfuse\-move2 \-mcall\-prologues \-mgas\-isr\-prologues \-mint8 \-mflmap \&\-mdouble=\fR\fIbits\fR \fB\-mlong\-double=\fR\fIbits\fR \fB\-mno\-call\-main \&\-mn_flash=\fR\fIsize\fR \fB\-mfract\-convert\-truncate \-mno\-interrupts \&\-mmain\-is\-OS_task \-mrelax \-mpmem\-wrap\-around \&\-mrmw \-mstrict\-X \-mtiny\-stack \&\-mrodata\-in\-ram \-msplit\-bit\-shift \-msplit\-ldst \-mshort\-calls \&\-mskip\-bug \-muse\-nonzero\-bits \-nodevicelib \-nodevicespecs \&\-Waddr\-space\-convert \-Wmisspelled\-isr\fR .Sp \&\fIگزینه‌های Blackfin\fR (\fBBlackfin Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR[\fB\-\fR\fIsirevision\fR] \&\fB\-msim \-momit\-leaf\-frame\-pointer \&\-mspecld\-anomaly \-mcsync\-anomaly \&\-mlow\-64k \-mstack\-check\-l1 \-mid\-shared\-library \&\-mleaf\-id\-shared\-library \&\-mshared\-library\-id=\fR\fIn\fR \&\fB\-msep\-data \-mlong\-calls \&\-mfast\-fp \-minline\-plt \-mmulticore \-mcorea \-mcoreb \-msdram \&\-micplb\fR .Sp \&\fIگزینه‌های C6X\fR (\fBC6X Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \-march=\fR\fIcpu\fR \&\fB\-msim \-msdata=\fR\fIsdata\-type\fR \fB\-mdsbt \-mlong\-calls\fR .Sp \&\fIگزینه‌های CRIS\fR (\fBCRIS Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR \fB\-march=\fR\fIcpu\fR \&\fB\-mtune=\fR\fIcpu\fR \fB\-mmax\-stackframe=\fR\fIn\fR \&\fB\-metrax4 \-metrax100 \-mpdebug \-mcc\-init \-mno\-side\-effects \&\-mstack\-align \-mdata\-align \-mconst\-align \&\-m32\-bit \-m16\-bit \-m8\-bit \-mno\-prologue\-epilogue \&\-mbest\-lib\-options \-moverride\-best\-lib\-options \&\-mtrap\-using\-break8 \-mtrap\-unaligned\-atomic \&\-munaligned\-atomic\-may\-use\-library \&\-sim \-sim2 \&\-mmul\-bug\-workaround\fR .Sp \&\fIگزینه‌های C\-SKY\fR (\fBC\-SKY Options\fR) \&\fB\-march=\fR\fIarch\fR \fB\-mcpu=\fR\fIcpu\fR \&\fB\-mbig\-endian \-mlittle\-endian \&\-mfpu=\fR\fIfpu\fR \fB\-mdouble\-float \-mfdivdu \&\-mfloat\-abi=\fR\fIname\fR \&\fB\-melrw \-mistack \-mmp \-mcp \-mcache \-msecurity \-mtrust \&\-mdsp \-medsp \-mvdsp \&\-mdiv \-msmart \-mhigh\-registers \-manchor \&\-mpushpop \-mmultiple\-stld \-mconstpool \-mstack\-size \-mccrt \&\-mbranch\-cost=\fR\fIn\fR \fB\-msched\-prolog \-msim\fR .Sp \&\fIگزینه‌های Cygwin و MinGW\fR (\fBCygwin and MinGW Options\fR) \&\fB\-mconsole \-mcrtdll=\fR\fIlibrary\fR \fB\-mdll \&\-mnop\-fun\-dllimport \-mthreads \&\-municode \-mwin32 \-mwindows \-fno\-set\-stack\-executable \&\-fwritable\-relocated\-rdata \-mpe\-aligned\-commons \&\-muse\-libstdc\-wrappers\fR .Sp \&\fIگزینه‌های Darwin\fR (\fBDarwin Options\fR) \&\fB\-all_load \-allowable_client \-arch\fR \fIname\fR \&\fB\-arch_errors_fatal \-asm_macosx_version_min=\fR\fIversion\fR \&\fB\-bind_at_load \-bundle \-bundle_loader \&\-client_name \-compatibility_version \-current_version \&\-dead_strip \&\-dependency\-file \-dylib_file \-dylinker \-dylinker_install_name \&\-dynamic \-dynamiclib \-exported_symbols_list \&\-fapple\-kext \-fconstant\-cfstrings \-ffix\-and\-continue \&\-filelist \-findirect\-data \-flat_namespace \-force_cpusubtype_ALL \&\-force_flat_namespace \-framework\fR \fIname\fR \fB\-gfull \-gused \&\-headerpad_max_install_names \-iframework \&\-image_base \-init\fR \fIsymbol\-name\fR \fB\-install_name \-keep_private_externs \&\-matt\-stubs \-mconstant\-cfstrings \-mdynamic\-no\-pic \&\-mfix\-and\-continue \-mkernel \-mmacosx\-version\-min=\fR\fIversion\fR \&\fB\-mone\-byte\-bool \-msymbol\-stubs \-mtarget\-linker\fR[\fB=\fR]\fIversion\fR \&\fB\-nodefaultexport \-nodefaultrpaths \&\-pagezero_size \-preload \-read_only_relocs \&\-sectalign \-sectcreate \&\-seg_addr_table \&\-seg1addr \-segaddr \&\-segprot \-segs_read_only_addr \-segs_read_write_addr \&\-sub_library \-sub_umbrella \&\-twolevel_namespace \-twolevel_namespace_hints \&\-umbrella \-undefined \-unexported_symbols_list \&\-weak_framework\fR \fIname\fR \fB\-weak_reference_mismatches \&\-whatsloaded \-whyload \&\-F \-ObjC \-ObjC++ \-Wnonportable\-cfstrings\fR .Sp \&\fIگزینه‌های DEC Alpha\fR (\fBDEC Alpha Options\fR) \&\fB\-mno\-fp\-regs \-msoft\-float \&\-mieee \-mieee\-with\-inexact \-mieee\-conformant \&\-mfp\-trap\-mode=\fR\fImode\fR \fB\-mfp\-rounding\-mode=\fR\fImode\fR \&\fB\-mtrap\-precision=\fR\fImode\fR \fB\-mbuild\-constants \&\-mcpu=\fR\fIcpu\-type\fR \fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mbwx \-mmax \-mfix \-mcix \&\-msafe\-bwa \-msafe\-partial \&\-mfloat\-vax \-mfloat\-ieee \&\-mexplicit\-relocs \-msmall\-data \-mlarge\-data \&\-msmall\-text \-mlarge\-text \&\-mmemory\-latency=\fR\fItime\fR \&\fB\-mtls\-kernel \-mtls\-size=\fR\fIbitsize\fR \&\fB\-mlong\-double\-128 \-mlong\-double\-64\fR .Sp \&\fIگزینه‌های eBPF\fR (\fBeBPF Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \&\-mframe\-limit=\fR\fIbytes\fR \fB\-mxbpf \-mco\-re \-mjmpext \-mjmp32 \&\-malu32 \-mv3\-atomics \-mbswap \-msdiv \-msmov \-mcpu=\fR\fIversion\fR \&\fB\-masm=\fR\fIdialect\fR \fB\-minline\-memops\-threshold=\fR\fIbytes\fR \&\fB\-Wco\-re\fR .Sp \&\fIگزینه‌های FR30\fR (\fBFR30 Options\fR) \&\fB\-msmall\-model \-mno\-lsim\fR .Sp \&\fIگزینه‌های FRV\fR (\fBFRV Options\fR) \&\fB\-mgpr\-32 \-mgpr\-64 \-mfpr\-32 \-mfpr\-64 \&\-mhard\-float \-msoft\-float \&\-malloc\-cc \-mfixed\-cc \-mdword \-mdouble \-mmedia \-mmuladd \&\-mfdpic \-minline\-plt \-mgprel\-ro \-multilib\-library\-pic \&\-mlinked\-fp \-mlong\-calls \-malign\-labels \&\-mlibrary\-pic \-macc\-4 \-macc\-8 \&\-mpack \-mno\-eflags \-mno\-cond\-move \&\-mno\-optimize\-membar \-mno\-scc \-mno\-cond\-exec \&\-mno\-vliw\-branch \-mno\-multi\-cond\-exec \-mno\-nested\-cond\-exec \&\-mtomcat\-stats \&\-mTLS \-mtls \&\-mcpu=\fR\fIcpu\fR .Sp \&\fIگزینه‌های FT32\fR (\fBFT32 Options\fR) \&\fB\-msim \-mnodiv \-mft32b \-mcompress \-mnopm\fR .Sp \&\fIگزینه‌های GNU/Linux\fR (\fBGNU/Linux Options\fR) \&\fB\-mglibc \-muclibc \-mmusl \-mbionic \-mandroid \&\-tno\-android\-cc \-tno\-android\-ld\fR .Sp \&\fIگزینه‌های H8/300\fR (\fBH8/300 Options\fR) \&\fB\-mrelax \-mh \-ms \-mn \-msx \-ms2600 \&\-mquickcall \-mslowbyte \-mexr \-mint32 \-malign\-300\fR .Sp \&\fIگزینه‌های HPPA\fR (\fBHPPA Options\fR) \&\fB\-march=\fR\fIarchitecture\-type\fR \&\fB\-mno\-atomic\-libcalls \&\-mcaller\-copies \-mdisable\-fpregs \-mdisable\-indexing \&\-mordered \-mfast\-indirect\-calls \-mgas \-mgnu\-ld \-mhp\-ld \&\-mfixed\-range=\fR\fIregister\-range\fR \&\fB\-mcoherent\-ldcw \-mlinker\-opt \-mlong\-calls \&\-mlong\-load\-store \&\-mno\-space\-regs \-msoft\-float \-mpa\-risc\-1\-0 \&\-mpa\-risc\-1\-1 \-mpa\-risc\-2\-0 \-mportable\-runtime \&\-mschedule=\fR\fIcpu\-type\fR \fB\-msoft\-mult \-msio \-mwsio \&\-munix=\fR\fIunix\-std\fR \fB\-nolibdld \-static \-threads\fR .Sp \&\fIگزینه‌های IA\-64\fR (\fBIA\-64 Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \-mgnu\-as \-mgnu\-ld \-mno\-pic \&\-mvolatile\-asm\-stop \-mregister\-names \-msdata \&\-mconstant\-gp \-mauto\-pic \&\-minline\-float\-divide\-min\-latency \&\-minline\-float\-divide\-max\-throughput \&\-mno\-inline\-float\-divide \&\-minline\-int\-divide\-min\-latency \&\-minline\-int\-divide\-max\-throughput \&\-mno\-inline\-int\-divide \&\-minline\-sqrt\-min\-latency \-minline\-sqrt\-max\-throughput \&\-mno\-inline\-sqrt \&\-mdwarf2\-asm \-mearly\-stop\-bits \&\-mfixed\-range=\fR\fIregister\-range\fR \fB\-mtls\-size=\fR\fItls\-size\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-milp32 \-mlp64 \&\-msched\-br\-data\-spec \-msched\-ar\-data\-spec \-msched\-control\-spec \&\-msched\-br\-in\-data\-spec \-msched\-ar\-in\-data\-spec \-msched\-in\-control\-spec \&\-msched\-spec\-ldc \-msched\-spec\-control\-ldc \&\-msched\-stop\-bits\-after\-every\-cycle \-msched\-count\-spec\-in\-critical\-path \&\-msel\-sched\-dont\-check\-control\-spec \-msched\-fp\-mem\-deps\-zero\-cost \&\-msched\-max\-memory\-insns\-hard\-limit \-msched\-max\-memory\-insns=\fR\fImax\-insns\fR .Sp \&\fIگزینه‌های LM32\fR (\fBLM32 Options\fR) \&\fB\-mbarrel\-shift\-enabled \-mdivide\-enabled \-mmultiply\-enabled \&\-msign\-extend\-enabled \-muser\-enabled\fR .Sp \&\fIگزینه‌های LoongArch\fR (\fBLoongArch Options\fR) \&\fB\-march=\fR\fIarch\-type\fR \fB\-mtune=\fR\fItune\-type\fR \fB\-mabi=\fR\fIbase\-abi\-type\fR \&\fB\-mfpu=\fR\fIfpu\-type\fR \fB\-msimd=\fR\fIsimd\-type\fR \&\fB\-msoft\-float \-msingle\-float \-mdouble\-float \-mlsx \-mlasx \&\-mbranch\-cost=\fR\fIn\fR \fB\-maddr\-reg\-reg\-cost=\fR\fIn\fR \fB\-mcheck\-zero\-division \&\-mbreak\-code=\fR\fIcode\fR \&\fB\-mcond\-move\-int \-mcond\-move\-float \&\-memcpy \-mstrict\-align \-G\fR \fInum\fR \&\fB\-mmax\-inline\-memcpy\-size=\fR\fIn\fR \&\fB\-mexplicit\-relocs=\fR\fIstyle\fR \fB\-mexplicit\-relocs \-mno\-explicit\-relocs \&\-mdirect\-extern\-access \&\-mcmodel=\fR\fIcode\-model\fR \fB\-mrelax \-mpass\-mrelax\-to\-as \&\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mfrecipe \-mdiv32 \&\-mlam\-bh \-mlamcas \-mld\-seq\-sa \&\-mscq \-mtls\-dialect=\fR\fIopt\fR \&\fB\-mannotate\-tablejump\fR .Sp \&\fIگزینه‌های LynxOS\fR (\fBLynxOS Options\fR) \&\fB\-mshared \-mthreads \-mlegacy\-threads\fR .Sp \&\fIگزینه‌های M32C\fR (\fBM32C Options\fR) \&\fB\-mcpu=\fR\fIcpu\fR \fB\-msim \-memregs=\fR\fInumber\fR .Sp \&\fIگزینه‌های M32R/D\fR (\fBM32R/D Options\fR) \&\fB\-m32r2 \-m32rx \-m32r \&\-mdebug \&\-malign\-loops \&\-missue\-rate=\fR\fInumber\fR \&\fB\-mbranch\-cost=\fR\fInumber\fR \&\fB\-mmodel=\fR\fIcode\-size\-model\-type\fR \&\fB\-msdata=\fR\fIsdata\-type\fR \&\fB\-mno\-flush\-func \-mflush\-func=\fR\fIname\fR \&\fB\-mno\-flush\-trap \-mflush\-trap=\fR\fInumber\fR \&\fB\-G\fR \fInum\fR .Sp \&\fIگزینه‌های M680x0\fR (\fBM680x0 Options\fR) \&\fB\-march=\fR\fIarch\fR \fB\-mcpu=\fR\fIcpu\fR \fB\-mtune=\fR\fItune\fR \&\fB\-m68000 \-m68020 \-m68020\-40 \-m68020\-60 \-m68030 \-m68040 \&\-m68060 \-m68302 \-m68332 \-m68851 \&\-mcpu32 \-mfidoa \-m5200 \-m5206e \-m528x \-m5307 \-m5407 \&\-mcfv4e \-mbitfield \-mc68000 \-mc68020 \&\-mrtd \-mdiv \-mshort \&\-mhard\-float \-m68881 \-msoft\-float \-mpcrel \&\-malign\-int \-mstrict\-align \-msep\-data \&\-mshared\-library\-id=\fR\fIn\fR \fB\-mid\-shared\-library \&\-mxgot \-mxtls \-mlong\-jump\-table\-offsets\fR .Sp \&\fIگزینه‌های MCore\fR (\fBMCore Options\fR) \&\fB\-mhardlit \-mdiv \-mrelax\-immediates \&\-mwide\-bitfields \&\-m4byte\-functions \-mcallgraph\-data \&\-mslow\-bytes \-mno\-lsim \&\-mlittle\-endian \-mbig\-endian \-m210 \-m340 \-mstack\-increment\fR .Sp \&\fIگزینه‌های MicroBlaze\fR (\fBMicroBlaze Options\fR) \&\fB\-msoft\-float \-mhard\-float \-msmall\-divides \-mcpu=\fR\fIcpu\fR \&\fB\-mmemcpy \-mxl\-soft\-mul \-mxl\-soft\-div \-mxl\-barrel\-shift \&\-mxl\-pattern\-compare \-mxl\-gp\-opt \&\-mxl\-multiply\-high \-mxl\-float\-convert \-mxl\-float\-sqrt \&\-mbig\-endian \-mlittle\-endian \-mxl\-reorder \-mxl\-mode\-\fR\fIapp\-model\fR \&\fB\-mxl\-prefetch \-mpic\-data\-is\-text\-relative\fR .Sp \&\fIگزینه‌های MIPS\fR (\fBMIPS Options\fR) \&\fB\-EL \-EB \-mel \-meb \-march=\fR\fIarch\fR \fB\-mtune=\fR\fIarch\fR \&\fB\-mips1 \-mips2 \-mips3 \-mips4 \-mips32 \-mips32r2 \-mips32r3 \-mips32r5 \&\-mips32r6 \-mips64 \-mips64r2 \-mips64r3 \-mips64r5 \-mips64r6 \&\-mips16 \-mmips16e2 \-mflip\-mips16 \&\-minterlink\-compressed \-minterlink\-mips16 \&\-mabi=\fR\fIabi\fR \fB\-mabicalls \-mshared \-mplt \-mxgot \&\-mgp32 \-mgp64 \-mfp32 \-mfpxx \-mfp64 \-mhard\-float \-msoft\-float \&\-mno\-float \-msingle\-float \-mdouble\-float \-modd\-spreg \&\-mabs=\fR\fImode\fR \fB\-mnan=\fR\fIencoding\fR \&\fB\-mdsp \-mdspr2 \-mmcu \-meva \-mvirt \-mxpa \-mcrc \-mginv \&\-mmicromips \-mmsa \&\-mloongson\-mmi \-mloongson\-ext \-mloongson\-ext2 \&\-mfpu=\fR\fIfpu\-type\fR \&\fB\-msmartmips \-mpaired\-single \-mdmx \-mips3d \-mmt \-mllsc \&\-mlong64 \-mlong32 \-msym32 \&\-G\fR\fInum\fR \fB\-mno\-local\-sdata \-mno\-extern\-sdata \-mno\-gopt \&\-membedded\-data \-muninit\-const\-in\-rodata \&\-mcode\-readable=\fR\fIsetting\fR \fB\-mno\-data\-in\-code \-mcode\-xonly \&\-msplit\-addresses \-mexplicit\-relocs \-mexplicit\-relocs=\fR\fIrelease\fR \&\fB\-mno\-check\-zero\-division \-mdivide\-traps \-mdivide\-breaks \&\-mno\-load\-store\-pairs \&\-mstrict\-align \-mno\-unaligned\-access \&\-mmemcpy \-mlong\-calls \&\-mmad \-mimadd \-mno\-fused\-madd \-nocpp \&\-mfix\-24k \-mfix\-r4000 \-mfix\-r4400 \-mfix\-r5900 \&\-mfix\-r10000 \-mfix\-rm7000 \-mfix\-vr4120 \-mfix\-vr4130 \-mfix\-sb1 \&\-mfix4300 \-mr10k\-cache\-barrier=\fR\fIsetting\fR \&\fB\-mflush\-func=\fR\fIfunc\fR \fB\-mno\-flush\-func \&\-mbranch\-cost=\fR\fInum\fR \fB\-mbranch\-likely \&\-mcompact\-branches=\fR\fIpolicy\fR \&\fB\-mno\-fp\-exceptions \-mvr4130\-align \-msynci \-mno\-lxc1\-sxc1 \-mno\-madd4 \&\-mno\-relax\-pic\-calls \-mmcount\-ra\-address \&\-mframe\-header\-opt\fR.Sp \&\fIگزینه‌های MMIX\fR (\fBMMIX Options\fR) \&\fB\-mlibfuncs \-mepsilon \-mabi=gnu \-mabi=mmixware \&\-mzero\-extend \-mknuthdiv \-mtoplevel\-symbols \&\-melf \-mbranch\-predict \-mbase\-addresses \&\-msingle\-exit \-mset\-data\-start=\fR\fIaddress\fR \&\fB\-mset\-program\-start=\fR\fIaddress\fR \fB\-mno\-set\-program\-start\fR .Sp \&\fIگزینه‌های MN10300\fR (\fBMN10300 Options\fR) \&\fB\-mmult\-bug \-mno\-mult\-bug \&\-mam33 \-mam33\-2 \-mam34 \&\-mtune=\fR\fIcpu\-type\fR \&\fB\-mno\-return\-pointer\-on\-d0 \&\-mno\-crt0 \-mrelax \-mno\-liw \-mno\-setlb\fR .Sp \&\fIگزینه‌های Moxie\fR (\fBMoxie Options\fR) \&\fB\-meb \-mel \-mmul.x \-mno\-crt0\fR .Sp \&\fIگزینه‌های MSP430\fR (\fBMSP430 Options\fR) \&\fB\-msim \-masm\-hex \-mmcu=\fR\fIname\fR \fB\-mlarge \-msmall \-mrelax \&\-mwarn\-mcu \-mwarn\-devices\-csv \&\-mcode\-region=\fR\fIwhere\fR \fB\-mdata\-region=\fR\fIwhere\fR \&\fB\-muse\-lower\-region\-prefix \&\-msilicon\-errata=\fR\fIname\fR[\fB,\fR\fIname\fR\fB...\fR] \&\fB\-msilicon\-errata\-warn=\fR\fIname\fR[\fB,\fR\fIname\fR\fB...\fR] \&\fB\-mhwmult=\fR\fItype\fR \fB\-minrt \-mtiny\-printf \-mmax\-inline\-shift=\fR\fIn\fR .Sp \&\fIگزینه‌های NDS32\fR (\fBNDS32 Options\fR) \&\fB\-mbig\-endian \-mlittle\-endian \-EB \-EL \&\-mabi=\fR\fIname\fR \fB\-mfloat\-abi=\fR\fIname\fR \&\fB\-mreduced\-regs \-mfull\-regs \&\-malways\-align \-malign\-functions \&\-mfp\-as\-gp \-mcmov \-mhw\-abs \&\-mext\-perf \-mext\-perf2 \-mext\-string \-mext\-dsp \&\-mext\-fpu\-fma \-mext\-fpu\-sp \-mext\-fpu\-dp \&\-mv3push \-m16\-bit \-mvh \&\-misr\-vector\-size=\fR\fInum\fR \fB\-misr\-secure=\fR\fInum\fR \&\fB\-mcache\-block\-size=\fR\fInum\fR \&\fB\-march=\fR\fIarch\fR \fB\-mcpu=\fR\fIcpu\fR \&\fB\-mconfig\-fpu=\fR\fInum\fR \fB\-mconfig\-mul=\fR\fItype\fR \&\fB\-mconfig\-register\-ports=\fR\fIkind\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \&\fB\-mctor\-dtor \-mrelax \-mrelax\-hint \&\-msched\-prolog\-epilog \-mno\-ret\-in\-naked\-func \&\-malways\-save\-lp \-munaligned\-access \-minline\-asm\-r15\fR .Sp \&\fIگزینه‌های Nvidia PTX\fR (\fBNvidia PTX Options\fR) \&\fB\-m64 \-march=\fR\fIarch\fR \fB\-misa=\fR\fIarch\fR \fB\-march\-map=\fR\fIarch\fR \&\fB\-mptx=\fR\fIversion\fR \fB\-mmainkernel \-moptimize \&\-msoft\-stack \-msoft\-stack\-reserve\-local=\fR\fIsize\fR \&\fB\-muniform\-simt \-mgomp\fR .Sp \&\fIگزینه‌های OpenRISC\fR (\fBOpenRISC Options\fR) \&\fB\-mboard=\fR\fIname\fR \fB\-mhard\-mul \-mhard\-div \&\-msoft\-mul \-msoft\-div \&\-msoft\-float \-mhard\-float \-mdouble\-float \-munordered\-float \&\-mcmov \-mror \-mrori \-msext \-msfimm \-mshftimm \&\-mcmodel=\fR\fIcode\-model\fR .Sp \&\fIگزینه‌های PDP\-11\fR (\fBPDP\-11 Options\fR) \&\fB\-mfpu \-msoft\-float \-mac0 \-m40 \-m45 \-m10 \&\-mint32 \-mint16 \&\-msplit \-munix\-asm \-mdec\-asm \-mgnu\-asm \-mlra\fR .Sp \&\fIگزینه‌های Picolibc\fR (\fBPicolibc Options\fR) \&\fB\-\-oslib=\fR\fIlibrary\fR \fB\-\-crt0=\fR[\fBnone\fR|\fBminimal\fR|\fBhosted\fR|\fBsemihost\fR] \&\fB\-\-printf=\fR[\fBd\fR|\fBf\fR|\fBl\fR|\fBi\fR|\fBm\fR] \fB\-\-scanf=\fR[\fBd\fR|\fBf\fR|\fBl\fR|\fBi\fR|\fBm\fR] .Sp \&\fIگزینه‌های PowerPC\fR نگاه کنید به گزینه‌های RS/6000 و PowerPC. .Sp \&\fIگزینه‌های PRU\fR (\fBPRU Options\fR) \&\fB\-mmcu=\fR\fImcu\fR \fB\-minrt \-mno\-relax \-mloop \&\-mmul \-mfillzero \-mabi=\fR\fIvariant\fR .Sp \&\fIگزینه‌های RISC\-V\fR (\fBRISC\-V Options\fR) \&\fB\-mbranch\-cost=\fR\fIN\-instruction\fR \&\fB\-mabi=\fR\fIABI\-string\fR \&\fB\-mfdiv \-mdiv \&\-mno\-fence\-tso \&\-misa\-spec=\fR\fIISA\-spec\-string\fR \&\fB\-march=\fR[\fIISA\fR|\fIProfile\fR|\fIProfile_ISA\fR|\fIprocessor\-string\fR] \&\fB\-mcpu=\fR\fIprocessor\-string\fR \fB\-mtune=\fR\fIprocessor\-string\fR \&\fB\-mpreferred\-stack\-boundary=\fR\fInum\fR \&\fB\-msmall\-data\-limit=\fR\fIN\-bytes\fR \&\fB\-msave\-restore \-mno\-shorten\-memrefs \&\-mstrict\-align \-mscalar\-strict\-align \-mno\-vector\-strict\-align \&\-mcmodel=medlow \-mcmodel=medany \-mcmodel=large \&\-mexplicit\-relocs \-mrelax \-mriscv\-attribute \&\-malign\-data=\fR\fItype\fR \&\fB\-mbig\-endian \-mlittle\-endian \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \&\fB\-mcsr\-check \-momit\-leaf\-frame\-pointer \-mmovcc \&\-mno\-inline\-atomics \-mno\-inline\-strlen \&\-mno\-inline\-strcmp \-mno\-inline\-strncmp \&\-mstringop\-strategy=\fR\fIstrategy\fR \&\fB\-mtls\-dialect=desc \-mtls\-dialect=trad \&\-mrvv\-vector\-bits=\fR\fIvalue\fR \fB\-mrvv\-max\-lmul=\fR\fIvalue\fR \&\fB\-madjust\-lmul\-cost \-mmax\-vectorization \-mno\-autovec\-segment\fR .Sp \&\fIگزینه‌های RL78\fR (\fBRL78 Options\fR) \&\fB\-msim \-mallregs \-mrelax \-mes0 \&\-mmul=none \-mmul=g13 \-mmul=g14 \-mmul=rl78 \&\-mcpu=g10 \-mcpu=g13 \-mcpu=g14 \-mcpu=rl78 \&\-mg10 \-mg13 \-mg14 \-mrl78 \&\-msave\-mduc\-in\-interrupts\fR .Sp \&\fIگزینه‌های RS/6000 و PowerPC\fR (\fBRS/6000 and PowerPC Options\fR) \&\fB\-mcpu=\fR\fIcpu\-type\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \fB\-mprofile\-kernel \&\-mpowerpc64 \&\-maltivec \&\-mpowerpc\-gpopt \-mpowerpc\-gfxopt \-mmfcrf \-mpopcntb \-mpopcntd \&\-mfprnd \-mcmpb \-mhard\-dfp \&\-mfull\-toc \-mminimal\-toc \-mno\-fp\-in\-toc \-mno\-sum\-in\-toc \&\-maix64 \-maix32 \-m64 \-m32 \-mxl\-compat \-mpe \&\-malign\-power \-malign\-natural \&\-msoft\-float \-mhard\-float \-mmultiple \-mupdate \&\-mavoid\-indexed\-addresses \&\-mfused\-madd \-mbit\-align \-mbit\-word \&\-mstrict\-align \-mrelocatable \-mrelocatable\-lib \&\-mlittle \-mlittle\-endian \-mbig \-mbig\-endian \&\-mdynamic\-no\-pic \-msingle\-pic\-base \&\-mprioritize\-restricted\-insns=\fR\fIpriority\fR \&\fB\-msched\-costly\-dep=\fR\fIdependence_type\fR \&\fB\-minsert\-sched\-nops=\fR\fIscheme\fR \&\fB\-mcall\-aixdesc \-mcall\-eabi \-mcall\-freebsd \&\-mcall\-linux \-mcall\-netbsd \-mcall\-openbsd \&\-mcall\-sysv \-mcall\-sysv\-eabi \-mcall\-sysv\-noeabi \&\-mtraceback=\fR\fItraceback_type\fR \&\fB\-maix\-struct\-return \-msvr4\-struct\-return \&\-mabi=\fR\fIabi\-type\fR \fB\-msecure\-plt \-mbss\-plt \&\-msplit\-patch\-nops \&\-mregnames \-mlongcall \-mpltseq \-mtls\-markers \&\-mblock\-move\-inline\-limit=\fR\fInum\fR \&\fB\-mblock\-compare\-inline\-limit=\fR\fInum\fR \&\fB\-mblock\-compare\-inline\-loop\-limit=\fR\fInum\fR \&\fB\-mblock\-ops\-unaligned\-vsx \&\-mstring\-compare\-inline\-limit=\fR\fInum\fR \&\fB\-misel \-mvsx \-mvrsave \-mmulhw \-mdlmzb \-mprototype \&\-msim \-mmvme \-mads \-myellowknife \-memb \-meabi \-msdata \&\-msdata=\fR\fIopt\fR \fB\-mreadonly\-in\-sdata \-mvxworks \-G\fR \fInum\fR \&\fB\-mrecip \-mrecip=\fR\fIopt\fR \fB\-mno\-recip \-mrecip\-precision \&\-mveclibabi=\fR\fItype\fR \fB\-mfriz \&\-mpointers\-to\-nested\-functions \-msave\-toc\-indirect \-mpower8\-fusion \&\-mcrypto \-mhtm \-mquad\-memory \-mquad\-memory\-atomic \&\-mcompat\-align\-parm \&\-mfloat128 \-mfloat128\-hardware \&\-mgnu\-attribute \&\-mstack\-protector\-guard=\fR\fIguard\fR \fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \fB\-mprefixed \&\-mpcrel \-mmma \-mdense\-math \-mrop\-protect \-mprivileged \&\-mno\-splat\-word\-constant \-mno\-splat\-float\-constant \&\-mno\-ieee128\-constant \-mno\-warn\-altivec\-long\fR .Sp \&\fIگزینه‌های RX\fR (\fBRX Options\fR) \&\fB\-m64bit\-doubles \-m32bit\-doubles \-fpu \-nofpu \&\-mcpu=\fR\fIname\fR \&\fB\-mbig\-endian\-data \-mlittle\-endian\-data \&\-msmall\-data\-limit=\fR\fIN\fR \&\fB\-msim \-mas100\-syntax \-mrelax \&\-mmax\-constant\-size=\fR\fIN\fR \fB\-mint\-register=\fR\fIN\fR \&\fB\-mpid \-mno\-allow\-string\-insns \-mjsr \&\-mno\-warn\-multiple\-fast\-interrupts \-msave\-acc\-in\-interrupts \&\-mlra\fR .Sp \&\fIگزینه‌های S/390 و zSeries\fR (\fBS/390 and zSeries Options\fR) \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-march=\fR\fIcpu\-type\fR \&\fB\-mhard\-float \-msoft\-float \-mhard\-dfp \&\-mlong\-double\-64 \-mlong\-double\-128 \&\-mbackchain \-mpacked\-stack \&\-msmall\-exec \-mmvcle \&\-m64 \-m31 \-mdebug \-mesa \-mzarch \&\-mhtm \-mvx \-mzvector \&\-mtpf\-trace \-mtpf\-trace\-skip \-mmain \&\-mfused\-madd \-mno\-fused\-madd \&\-mwarn\-framesize=\fR\fIframesize\fR \fB\-mwarn\-dynamicstack \&\-mstack\-size=\fR\fIstack\-size\fR \fB\-mno\-stack\-size \&\-mstack\-guard=\fR\fIstack\-guard\fR \fB\-mno\-stack\-guard \&\-mstack\-protector\-guard=\fR\fIguard\fR \&\fB\-mstack\-protector\-guard\-record \&\-mhotpatch=\fR\fIpre\-halfwords\fR\fB,\fR\fIpost\-halfwords\fR \&\fB\-mno\-pic\-data\-is\-text\-relative \&\-mindirect\-branch=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-jump=\fR\fIchoice\fR \fB\-mindirect\-branch\-call=\fR\fIchoice\fR \&\fB\-mfunction\-return=\fR\fIchoice\fR \&\fB\-mfunction\-return\-mem=\fR\fIchoice\fR \fB\-mfunction\-return\-reg=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-table \&\-mfentry \-mrecord\-mcount \-mnop\-mcount \&\-mpreserve\-args \-munaliged\-symbols\fR .Sp \&\fIگزینه‌های SH\fR (\fBSH Options\fR) \&\fB\-m1 \-m2 \-m2e \&\-m2a \-m2a\-nofpu \-m2a\-single \-m2a\-single\-only \&\-m3 \-m3e \&\-m4 \-m4\-nofpu \-m4\-single \-m4\-single\-only \&\-m4\-100 \-m4\-100\-nofpu \-m4\-100\-single \-m4\-100\-single\-only \&\-m4\-200 \-m4\-200\-nofpu \-m4\-200\-single \-m4\-200\-single\-only \&\-m4\-300 \-m4\-300\-nofpu \-m4\-300\-single \-m4\-300\-single\-only \&\-m4\-340 \-m4\-400 \-m4\-500 \&\-m4a \-m4al \-m4a\-nofpu \-m4a\-single \-m4a\-single\-only \&\-mb \-ml \-mdalign \-mrelax \&\-mbigtable \-mbitops \-mfmovd \-mrenesas \-mnomacsave \&\-mieee \-misize \-minline\-ic_invalidate \&\-mprefergot \-musermode \-multcost=\fR\fInumber\fR \fB\-mdiv=\fR\fIstrategy\fR \&\fB\-mdivsi3_libfunc=\fR\fIname\fR \fB\-mfixed\-range=\fR\fIregister\-range\fR \&\fB\-maccumulate\-outgoing\-args \&\-matomic\-model=\fR\fIatomic\-model\fR \&\fB\-mbranch\-cost=\fR\fInum\fR \fB\-mzdcbranch \&\-mcbranch\-force\-delay\-slot \&\-mfsca \-mfsrra \&\-mpretend\-cmove \-mfdpic \-mtas \-mlra\fR .Sp \&\fIگزینه‌های Solaris 2\fR (\fBSolaris 2 Options\fR) \&\fB\-mclear\-hwcap \-mno\-clear\-hwcap \-mimpure\-text \-mno\-impure\-text \&\-gsctf\fR .Sp \&\fIگزینه‌های SPARC\fR (\fBSPARC Options\fR) \&\fB\-mcpu=\fR\fIcpu\-type\fR \&\fB\-mtune=\fR\fIcpu\-type\fR \&\fB\-mcmodel=\fR\fIcode\-model\fR \&\fB\-mmemory\-model=\fR\fImem\-model\fR \&\fB\-m32 \-m64 \-mptr32 \-mptr64 \-mapp\-regs \&\-mfaster\-structs \-mflat \&\-mfpu \-mhard\-float \-msoft\-float \&\-mhard\-quad\-float \-msoft\-quad\-float \&\-mstack\-bias \-mstd\-struct\-return \&\-munaligned\-doubles \-muser\-mode \&\-mv8plus \-mvis \&\-mvis2 \-mvis3 \-mvis3b \-mvis4 \-mvis4b \&\-mcbcond \-mfmaf \-mfsmuld \-mpopc \-msubxc \&\-mfix\-at697f \-mfix\-ut699 \-mfix\-ut700 \-mfix\-gr712rc\fR .Sp \&\fIگزینه‌های System V\fR (\fBSystem V Options\fR) \&\fB\-YP,\fR\fIpaths\fR \fB\-Ym,\fR\fIdir\fR .Sp \&\fIگزینه‌های V850\fR (\fBV850 Options\fR) \&\fB\-mlong\-calls \-mep \&\-mprolog\-function \-mspace \&\-mtda=\fR\fIn\fR \fB\-msda=\fR\fIn\fR \fB\-mzda=\fR\fIn\fR \&\fB\-mv850 \-mv850e3v5 \-m850e2v4 \-mv850e2v3 \&\-mv850e2 \-mv850e1 \-mv850es \-mv850e \&\-mdisable\-callt \-mrelax \-mlong\-jumps \&\-msoft\-float \-mhard\-float \-mloop \&\-mrh850\-abi \-mghs \-mgcc\-abi \&\-m8byte\-align \-mbig\-switch \-mapp\-regs \-msmall\-sld \&\-mno\-strict\-align \-mjump\-tables\-in\-data\-section\fR .Sp \&\fIگزینه‌های VAX\fR (\fBVAX Options\fR) \&\fB\-munix \-mgnu \-md \-md\-float \-mg \-mg\-float \-mlra \&\-mvaxc\-alignment \-mqmath\fR.Sp \&\fIگزینه‌های Visium\fR (\fBVisium Options\fR) \&\fB\-mdebug \-msim \-mfpu \-mhard\-float \-msoft\-float \&\-mcpu=\fR\fIcpu\-type\fR \fB\-mtune=\fR\fIcpu\-type\fR \fB\-msv\-mode \-muser\-mode\fR .Sp \&\fIگزینه‌های VMS\fR (\fBVMS Options\fR) \&\fB\-mvms\-return\-codes \-mdebug\-main=\fR\fIprefix\fR \fB\-mmalloc64 \&\-mpointer\-size=\fR\fIsize\fR .Sp \&\fIگزینه‌های VxWorks\fR (\fBVxWorks Options\fR) \&\fB\-mrtp \-msmp \-mvthreads \-non\-static \-Bstatic \-Bdynamic \&\-Xbind\-lazy \-Xbind\-now\fR .Sp \&\fIگزینه‌های x86\fR (\fBx86 Options\fR) \&\fB\-mtune=\fR\fIcpu\-type\fR \fB\-march=\fR\fIcpu\-type\fR \&\fB\-mtune\-ctrl=\fR\fIfeature\-list\fR \fB\-mdump\-tune\-features \-mno\-default \&\-mfpmath=\fR\fIunit\fR \&\fB\-masm=\fR\fIdialect\fR \fB\-mno\-fancy\-math\-387 \&\-mno\-fp\-ret\-in\-387 \-m80387 \-mhard\-float \-msoft\-float \-mieee\-fp \&\-mrtd \-malign\-double \&\-mpreferred\-stack\-boundary=\fR\fInum\fR \&\fB\-mincoming\-stack\-boundary=\fR\fInum\fR \&\fB\-mcld \-mcx16 \-msahf \-mmovbe \-mcrc32 \-mmwait \&\-mrecip \-mrecip=\fR\fIopt\fR \&\fB\-mvzeroupper \-mstv \-mprefer\-avx128 \-mprefer\-vector\-width=\fR\fIopt\fR \&\fB\-mpartial\-vector\-fp\-math \&\-mmove\-max=\fR\fIbits\fR \fB\-mstore\-max=\fR\fIbits\fR \&\fB\-mnoreturn\-no\-callee\-saved\-registers \&\-mmmx \-msse \-msse2 \-msse3 \-mssse3 \-msse4.1 \-msse4.2 \-msse4 \-mavx \&\-mavx2 \-mavx512f \-mavx512cd \-mavx512vl \&\-mavx512bw \-mavx512dq \-mavx512ifma \-mavx512vbmi \-msha \-maes \&\-mpclmul \-mfsgsbase \-mrdrnd \-mf16c \-mfma \-mpconfig \-mwbnoinvd \&\-mptwrite \-mclflushopt \-mclwb \-mxsavec \-mxsaves \&\-msse4a \-m3dnow \-m3dnowa \-mpopcnt \-mabm \-mbmi \-mtbm \-mfma4 \-mxop \&\-madx \-mlzcnt \-mbmi2 \-mfxsr \-mxsave \-mxsaveopt \-mrtm \-mhle \-mlwp \&\-mmwaitx \-mclzero \-mpku \-mgfni \-mvaes \-mwaitpkg \&\-mshstk \-mmanual\-endbr \-mcet\-switch \-mforce\-indirect\-call \&\-mavx512vbmi2 \-mavx512bf16 \-menqcmd \&\-mvpclmulqdq \-mavx512bitalg \-mmovdiri \-mmovdir64b \-mavx512vpopcntdq \&\-mavx512vnni \-mprfchw \-mrdpid \&\-mrdseed \-msgx \-mavx512vp2intersect \-mserialize \-mtsxldtrk \&\-mamx\-tile \-mamx\-int8 \-mamx\-bf16 \-muintr \-mhreset \&\-mavxvnni \-mamx\-fp8 \-mavx512fp16 \-mavxifma \-mavxvnniint8 \&\-mavxneconvert \-mcmpccxadd \-mamx\-fp16 \-mprefetchi \-mraoint \&\-mamx\-complex \-mavxvnniint16 \-msm3 \-msha512 \-msm4 \-mapxf \&\-musermsr \-mavx10.1 \-mavx10.2 \-mamx\-avx512 \-mamx\-tf32 \-mmovrs \&\-mamx\-movrs \-mavx512bmm \-mcldemote \-mms\-bitfields \&\-mno\-align\-stringops \-minline\-all\-stringops \&\-minline\-stringops\-dynamically \-mstringop\-strategy=\fR\fIalg\fR \&\fB\-mkl \-mwidekl \&\-mmemcpy\-strategy=\fR\fIstrategy\fR \fB\-mmemset\-strategy=\fR\fIstrategy\fR \&\fB\-mpush\-args \-maccumulate\-outgoing\-args \-m128bit\-long\-double \&\-m96bit\-long\-double \-mlong\-double\-64 \-mlong\-double\-80 \-mlong\-double\-128 \&\-mregparm=\fR\fInum\fR \fB\-msseregparm \&\-mveclibabi=\fR\fItype\fR \fB\-mvect8\-ret\-in\-mem \&\-mpc32 \-mpc64 \-mpc80 \-mdaz\-ftz \-mstackrealign \-mstack\-arg\-probe \&\-momit\-leaf\-frame\-pointer \-mno\-red\-zone \-mno\-tls\-direct\-seg\-refs \&\-mcmodel=\fR\fIcode\-model\fR \fB\-mabi=\fR\fIname\fR \fB\-maddress\-mode=\fR\fImode\fR \&\fB\-m32 \-m64 \-mx32 \-m16 \-miamcu \-mlarge\-data\-threshold=\fR\fInum\fR \&\fB\-msse2avx \-mfentry \-mrecord\-mcount \-mnop\-mcount \-m8bit\-idiv \&\-minstrument\-return=\fR\fItype\fR \fB\-mrecord\-return \&\-mfentry\-name=\fR\fIname\fR \fB\-mfentry\-section=\fR\fIname\fR \&\fB\-mskip\-rax\-setup \&\-mavx256\-split\-unaligned\-load \-mavx256\-split\-unaligned\-store \&\-malign\-data=\fR\fItype\fR \fB\-mstack\-protector\-guard=\fR\fIguard\fR \&\fB\-mstack\-protector\-guard\-reg=\fR\fIreg\fR \&\fB\-mstack\-protector\-guard\-offset=\fR\fIoffset\fR \&\fB\-mstack\-protector\-guard\-symbol=\fR\fIsymbol\fR \&\fB\-mgeneral\-regs\-only \-mcall\-ms2sysv\-xlogues \-mtls\-dialect=\fR\fItype\fR \&\fB\-mrelax\-cmpxchg\-loop \&\-mindirect\-branch=\fR\fIchoice\fR \fB\-mfunction\-return=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-register \-mharden\-sls=\fR\fIchoice\fR \&\fB\-mindirect\-branch\-cs\-prefix \-mapx\-inline\-asm\-use\-gpr32 \&\-mgather \-mscatter \&\-mneeded \-mno\-direct\-extern\-access \&\-munroll\-only\-small\-loops \-mdispatch\-scheduler \-mlam=\fR\fIchoice\fR .Sp \&\fIگزینه‌های x86 Windows\fR گزینه‌های Cygwin و MinGW را ببینید. .Sp \&\fIگزینه‌های Xstormy16\fR (\fBXstormy16 Options\fR) \&\fB\-msim\fR .Sp \&\fIگزینه‌های Xtensa\fR (\fBXtensa Options\fR) \&\fB\-mconst16 \-mforce\-no\-pic \-mno\-serialize\-volatile \&\-mtext\-section\-literals \-mauto\-litpools \-mno\-target\-align \&\-mlongcalls \-mabi=\fR\fIabi\-type\fR \&\fB\-mextra\-l32r\-costs=\fR\fIcycles\fR \fB\-mstrict\-align\fR .Sp \&\fIگزینه‌های zSeries\fR گزینه‌های S/390 و zSeries را ببینید..SS "گزینه‌های کنترل نوع خروجی (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 spec (از طریق گزینهٔ \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 spec تبدیل شود. .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" فایل رابط (interface) دی. .IP \fIfile\fR\fB.dd\fR 4 .IX Item "file.dd" کد مستندات D (موسوم به Ddoc). .IP \fIfile\fR\fB.ads\fR 4 .IX Item "file.ads" فایل کد منبع Ada که حاوی اعلان یک واحد کتابخانه‌ای (اعلان یک بسته، زیربرنامه، یا جنریک، یا نمونه‌سازی از جنریک)، یا اعلان تغییر نام یک واحد کتابخانه‌ای (اعلان تغییر نام یک بسته، جنریک، یا زیربرنامه) است. به چنین فایل‌هایی \fIspecs\fR نیز می‌گویند. .IP \fIfile\fR\fB.adb\fR 4 .IX Item "file.adb" فایل کد منبع Ada شامل بدنهٔ یک واحد کتابخانه‌ای (بدنهٔ یک زیربرنامه یا بسته). به چنین فایل‌هایی \fIbodies\fR نیز گفته می‌شود. .IP \fIfile\fR\fB.s\fR 4 .IX Item "file.s" کد اسمبلی (Assembler code)..IP \fIfile\fR\fB.S\fR 4 .IX Item "file.S" .PD 0 .IP \fIfile\fR\fB.sx\fR 4 .IX Item "file.sx" .PD کد اسمبلی که باید پیش‌پردازش شود. .IP \fIother\fR 4 .IX Item "other" یک فایل شیء که مستقیماً به مرحلهٔ پیونددهی فرستاده می‌شود. هر نام فایلی بدون پسوند شناخته‌شده به همین صورت مدیریت می‌شود. .PP می‌توانید زبان ورودی را صریحاً با گزینهٔ \fB\-x\fR مشخص کنید: .IP "\fB\-x\fR \fIlanguage\fR" 4 .IX Item "-x language" .PD 0 .IP \fB\-\-language=\fR\fIlanguage\fR 4 .IX Item "--language=language" .IP "\fB\-\-language\fR \fIlanguage\fR" 4 .IX Item "--language language" .PD زبان (\fIlanguage\fR) را به‌طور صریح برای فایل‌های ورودی پس از آن مشخص می‌کند (به‌جای اینکه کامپایلر بر اساس پسوند نام فایل، یک پیش‌فرض را انتخاب کند). این گزینه بر تمام فایل‌های ورودی بعدی تا گزینهٔ بعدی \fB\-x\fR اعمال می‌شود. مقادیر ممکن برای \fIlanguage\fR عبارتند از: .Sp .Vb 10 \& c c\-header cpp\-output \& c++ c++\-header c++\-system\-header c++\-user\-header c++\-cpp\-output \& c++\-system\-module \& objective\-c objective\-c\-header objective\-c\-cpp\-output objc\-cpp\-output \& objective\-c++ objective\-c++\-header objective\-c++\-cpp\-output \& objc++\-cpp\-output \& assembler assembler\-with\-cpp \& ada adascil adawhy \& cobol \& d \& f77 f77\-cpp\-input f95 f95\-cpp\-input \& go \& modula\-2 modula\-2\-cpp\-output \& rust \& algol68 \& lto .Ve .Sp توجه داشته باشید که \fB\-x\fR بر یک استاندارد زبانی خاص دلالت نمی‌کند. برای نمونه، ممکن است \fB\-x f77\fR برای برخی از کدهای مبدأ قدیمی‌تر، به گزینهٔ \fB\-std=legacy\fR نیز نیاز داشته باشد. .IP "\fB\-x none\fR" 4 .IX Item "-x none" هرگونه تعیین زبان را غیرفعال می‌کند، به‌طوری که فایل‌های پس از آن بر اساس پسوند نام فایل‌هایشان پردازش می‌شوند (گویی اصلاً از \fB\-x\fR استفاده نشده است). .PP اگر تنها بخش‌هایی از مراحل کامپایل را می‌خواهید، می‌توانید از \&\fB\-x\fR (یا پسوندهای نام فایل) استفاده کنید تا به \fBgcc\fR بگویید از کجا شروع کند، و یکی از گزینه‌های \fB\-c\fR، \fB\-S\fR، یا \fB\-E\fR را به کار ببرید تا مشخص کنید \&\fBgcc\fR کجا باید متوقف شود. توجه داشته باشید که برخی از ترکیب‌ها (برای نمونه، \&\fB\-x cpp\-output \-E\fR) به \fBgcc\fR دستور می‌دهند که اصلاً هیچ کاری انجام ندهد. .IP \fB\-c\fR 4 .IX Item "-c" .PD 0 .IP \fB\-\-compile\fR 4 .IX Item "--compile" .PD فایل‌های مبدأ را کامپایل یا اسمبلی می‌کند، اما آن‌ها را پیوند نمی‌دهد. مرحلهٔ پیونددهی انجام نمی‌شود. خروجی نهایی به‌صورت یک فایل شیء (object file) به‌ازای هر فایل مبدأ خواهد بود. .Sp به‌طور پیش‌فرض، نام فایل شیء برای یک فایل مبدأ با جایگزین کردن پسوندهای \fB.c\fR، \fB.i\fR، \fB.s\fR و غیره با \fB.o\fR ساخته می‌شود. .Sp فایل‌های ورودی ناشناخته که نیازی به کامپایل یا اسمبلی ندارند، نادیده گرفته می‌شوند. .IP \fB\-S\fR 4 .IX Item "-S" .PD 0 .IP \fB\-\-assemble\fR 4 .IX Item "--assemble" .PD پس از مرحلهٔ کامپایل واقعی متوقف می‌شود؛ عملیات اسمبلی را انجام نمی‌دهد. خروجی به‌صورت یک فایل کد اسمبلی برای هر فایل ورودیِ غیر اسمبلیِ مشخص‌شده است. .Sp به‌طور پیش‌فرض، نام فایل اسمبلی برای یک فایل مبدأ با جایگزین کردن پسوندهای \fB.c\fR، \fB.i\fR و غیره با \fB.s\fR ساخته می‌شود. .Sp فایل‌های ورودی که نیازی به کامپایل ندارند نادیده گرفته می‌شوند. .IP \fB\-E\fR 4 .IX Item "-E" .PD 0 .IP \fB\-\-preprocess\fR 4 .IX Item "--preprocess" .PD پس از مرحلهٔ پیش‌پردازش متوقف می‌شود؛ کامپایلر واقعی را اجرا نمی‌کند. خروجی به‌صورت کد مبدأ پیش‌پردازش‌شده است که به خروجی استاندارد فرستاده می‌شود. .Sp فایل‌های ورودی که نیازی به پیش‌پردازش ندارند نادیده گرفته می‌شوند. .IP "\fB\-o\fR \fIfile\fR" 4 .IX Item "-o file" .PD 0 .IP \fB\-\-output=\fR\fIfile\fR 4 .IX Item "--output=file" .IP "\fB\-\-output\fR \fIfile\fR" 4 .IX Item "--output file" .PD خروجی اصلی را در فایل \fIfile\fR قرار می‌دهد. این گزینه برای هر نوع خروجیِ تولیدشده اعمال می‌شود، چه یک فایل اجرایی باشد، چه یک فایل شیء، یک فایل اسمبلی، یا کد C پیش‌پردازش‌شده. .Sp اگر \fB\-o\fR مشخص نشود، پیش‌فرض این است که فایل اجرایی در \fIa.out\fR، فایل شیءِ مربوط به \&\fIsource.suffix\fR در \fIsource.o\fR، فایل اسمبلی آن در \fIsource.s\fR، فایل سرآیند پیش‌کامپایل‌شده در \&\fIsource.suffix.gch\fR، و تمام کدهای C پیش‌پردازش‌شده در خروجی استاندارد قرار گیرند. .Sp اگرچه \fB\-o\fR تنها خروجی اصلی را نام‌گذاری می‌کند، اما بر نام‌گذاری خروجی‌های کمکی (auxiliary) و خروجی‌های رونوشت (dump) نیز اثر می‌گذارد. مثال‌های زیر را ببینید. مگر در صورت بازنویسی، هر دو خروجی کمکی و رونوشت در همان دایرکتوری خروجی اصلی قرار می‌گیرند. در خروجی‌های کمکی، پسوند فایل ورودی با پسوند نوع فایل خروجی کمکی جایگزین می‌شود؛ در خروجی‌های رونوشت، پسوند فایل رونوشت به انتهای پسوند فایل ورودی اضافه می‌شود. در دستورات کامپایل، نام پایهٔ (base name) هر دو خروجی کمکی و رونوشت همان نام خروجی اصلی است؛ در دستورات کامپایل و پیوند، نام خروجی اصلی منهای پسوند اجرایی با نام فایل ورودی ترکیب می‌شود. اگر هر دو، بدون در نظر گرفتن پسوند، نام پایهٔ یکسانی داشته باشند، نتیجهٔ ترکیب همان نام پایه خواهد بود؛ در غیر این صورت، با یک خط تیره (\-) به یکدیگر متصل می‌شوند. .Sp .Vb 1 \& gcc \-c foo.c ... .Ve .Sp از \fIfoo.o\fR به‌عنوان خروجی اصلی استفاده می‌کند و خروجی‌های کمکی و رونوشت را در کنار آن قرار می‌دهد؛ مثلاً فایل کمکی \fIfoo.dwo\fR برای \&\fB\-gsplit\-dwarf\fR، و فایل رونوشت \fIfoo.c.???r.final\fR برای \&\fB\-fdump\-rtl\-final\fR. .Sp اگر یک فایل خروجیِ غیر پیونددهنده صریحاً مشخص شده باشد، فایل‌های کمکی و رونوشت به‌طور پیش‌فرض همان نام پایه را می‌گیرند: .Sp .Vb 1 \& gcc \-c foo.c \-o dir/foobar.o ... .Ve .Sp خروجی‌های کمکی را به نام \fIdir/foobar.*\fR و خروجی‌های رونوشت را به نام \&\fIdir/foobar.c.*\fR نام‌گذاری خواهد کرد. .Sp در عوض، یک خروجی پیونددهنده به خروجی‌های کمکی و رونوشت پیشوند می‌زند: .Sp .Vb 1 \& gcc foo.c bar.c \-o dir/foobar ... .Ve .Sp عموماً خروجی‌های کمکی را به نام \fIdir/foobar\-foo.*\fR و \&\fIdir/foobar\-bar.*\fR، و خروجی‌های رونوشت را به نام \fIdir/foobar\-foo.c.*\fR و \&\fIdir/foobar\-bar.c.*\fR نام‌گذاری خواهد کرد. .Sp تنها استثنا در موارد بالا زمانی است که فایل اجرایی نام پایه‌ای یکسان با تک ورودی داشته باشد: .Sp .Vb 1 \& gcc foo.c \-o dir/foo ... .Ve .Sp در این حالت، خروجی‌های کمکی با نام \fIdir/foo.*\fR و خروجی‌های رونوشت با نام \fIdir/foo.c.*\fR نام‌گذاری می‌شوند. .Sp مکان و نام‌های خروجی‌های کمکی و رونوشت را می‌توان با گزینه‌های \fB\-dumpbase\fR، \fB\-dumpbase\-ext\fR، \&\fB\-dumpdir\fR، \&\fB\-save\-temps=cwd\fR و \&\fB\-save\-temps=obj\fR تنظیم کرد. .IP "\fB\-dumpbase\fR \fIdumpbase\fR" 4 .IX Item "-dumpbase dumpbase" .PD 0 .IP "\fB\-\-dumpbase\fR \fIdumpbase\fR" 4 .IX Item "--dumpbase dumpbase" .PD این گزینه نام پایه را برای فایل‌های خروجی کمکی و رونوشت (dump) تنظیم می‌کند. این گزینه بر نام فایل خروجی اصلی تأثیری ندارد. خروجی‌های میانی، در صورت نگهداری، به‌عنوان خروجی‌های اصلی محسوب نمی‌شوند، بلکه خروجی‌های کمکی در نظر گرفته می‌شوند: .Sp.Vb 1 \& gcc \-save\-temps \-S foo.c .Ve .Sp فایل پیش‌پردازش‌شدهٔ (دیگر غیر) موقت را در \fIfoo.i\fR ذخیره کرده و سپس به فایل خروجی (ضمنی) \fIfoo.s\fR کامپایل می‌کند، در حالی که: .Sp .Vb 1 \& gcc \-save\-temps \-dumpbase save\-foo \-c foo.c .Ve .Sp پیش‌پردازش را در \fIsave\-foo.i\fR انجام می‌دهد، به \fIsave\-foo.s\fR (که اکنون یک خروجی میانی و در نتیجه کمکی است) کامپایل می‌کند، و سپس به فایل خروجی (ضمنی) \fIfoo.o\fR اسمبلی می‌کند. .Sp در نبود این گزینه، فایل‌های dump و aux نام خود را از فایل ورودی یا در صورت تعیین صریح، از فایل خروجی (غیر پیونددهنده) می‌گیرند: فایل‌های خروجی dump (برای نمونه مواردی که با گزینه‌های \fB\-fdump\-*\fR درخواست شده‌اند) همراه با پسوند نام ورودی، و فایل‌های خروجی aux (مواردی که با سایر گزینه‌های غیر dump درخواست شده‌اند، مانند \f(CW\*(C`\-save\-temps\*(C'\fR، \&\f(CW\*(C`\-gsplit\-dwarf\*(C'\fR و \f(CW\*(C`\-fcallgraph\-info\*(C'\fR) بدون آن. .Sp تفکیک مشابه پسوند برای خروجی‌های dump و aux را می‌توان برای \fB\-dumpbase basename.suf\fR که صریحاً مشخص شده است نیز با تعیین \&\fB\-dumpbase\-ext .suf\fR به دست آورد. .Sp اگر \fIdumpbase\fR به‌طور صریح با هر مؤلفه‌ای از دایرکتوری مشخص شود، هرگونه تعیین \fIdumppfx\fR (مانند \fB\-dumpdir\fR یا \&\fB\-save\-temps=*\fR) نادیده گرفته می‌شود و \fIdumpbase\fR به جای الحاق به آن، کاملاً جایگزینش می‌شود: .Sp .Vb 2 \& gcc foo.c \-c \-o dir/foo.o \-dumpbase alt/foo \e \& \-dumpdir pfx\- \-save\-temps=cwd ... .Ve .Sp خروجی‌های کمکی و dump را با نام \fIalt/foo.*\fR ایجاد می‌کند، و \&\fIdir/\fR در \fB\-o\fR، پیشوند \fI./\fR ضمنی ناشی از \&\fB\-save\-temps=cwd\fR، و \fIpfx\-\fR در \fB\-dumpdir\fR را نادیده می‌گیرد. .Sp هنگامی که \fB\-dumpbase\fR در دستوری مشخص شود که چندین ورودی را کامپایل می‌کند، یا کامپایل کرده و سپس پیوند می‌دهد، ممکن است همان‌طور که ذیل \fB\-dumpdir\fR آمده است، با \&\fIdumppfx\fR ترکیب شود. آنگاه، هر فایل ورودی با استفاده از \fIdumppfx\fR ترکیبی کامپایل می‌شود و مقادیر پیش‌فرض برای \fIdumpbase\fR و \fIauxdropsuf\fR برای هر فایل ورودی محاسبه می‌گردد: .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpbase main ... .Ve .Sp فایل‌های \fIfoo.o\fR و \fIbar.o\fR را به عنوان خروجی‌های اصلی ایجاد می‌کند، و با استفاده از \fIdumpbase\fR به عنوان پیشوند، از بازنویسی خروجی‌های کمکی و dump جلوگیری کرده و خروجی‌های کمکی و dump را به نام‌های \fImain\-foo.*\fR و \fImain\-bar.*\fR می‌سازد. .Sp تعیین یک رشتهٔ خالی به عنوان \fIdumpbase\fR، از اثرگذاری نام پایهٔ خروجی در نام‌گذاری خروجی‌های کمکی و dump در طول کامپایل جلوگیری می‌کند و مقادیر پیش‌فرض را محاسبه می‌نماید: .Sp .Vb 1 \& gcc \-c foo.c \-o dir/foobar.o \-dumpbase " ... .Ve .Sp خروجی‌های aux را \fIdir/foo.*\fR و خروجی‌های dump را \&\fIdir/foo.c.*\fR نام‌گذاری خواهد کرد. توجه کنید که چگونه نام‌های پایهٔ آن‌ها از نام ورودی گرفته شده است، اما دایرکتوری همچنان به‌طور پیش‌فرض همان دایرکتوری خروجی است. .Sp رشتهٔ خالی dumpbase مانع استفاده از نام پایهٔ خروجی برای خروجی‌های مرحلهٔ پیونددهی نمی‌شود: .Sp .Vb 1 \& gcc foo.c bar.c \-o dir/foobar \-dumpbase " \-flto ... .Ve .Sp کامپایل فایل‌های مبدأ خروجی‌های کمکی را به نام‌های \&\fIdir/foo.*\fR و \fIdir/bar.*\fR، و خروجی‌های dump را به نام‌های \&\fIdir/foo.c.*\fR و \fIdir/bar.c.*\fR نام‌گذاری خواهد کرد. کامپایل مجدد LTO در طول پیونددهی از \fIdir/foobar.\fR به عنوان پیشوند برای فایل‌های dump و کمکی استفاده خواهد کرد. .IP "\fB\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4 .IX Item "-dumpbase-ext auxdropsuf" .PD 0 .IP "\fB\-\-dumpbase\-ext\fR \fIauxdropsuf\fR" 4 .IX Item "--dumpbase-ext auxdropsuf" .PD هنگام شکل‌دهی به نام فایل خروجی کمکی (و نه خروجی dump)، پسوند انتهایی \fIauxdropsuf\fR را قبل از افزودن هرگونه پسوندی از \fIdumpbase\fR حذف می‌کند. در صورت عدم تعیین، این گزینه به‌طور پیش‌فرض به پسوند یک \fIdumpbase\fR پیش‌فرض تبدیل می‌شود، یعنی پسوند فایل ورودی هنگامی که \&\fB\-dumpbase\fR در خط فرمان وجود ندارد، یا زمانی که \fIdumpbase\fR با \fIdumppfx\fR ترکیب شده باشد. .Sp .Vb 1 \& gcc foo.c \-c \-o dir/foo.o \-dumpbase x\-foo.c \-dumpbase\-ext .c ... .Ve .Sp \fIdir/foo.o\fR را به عنوان خروجی اصلی ایجاد می‌کند، و با استفاده از مکان خروجی اصلی و حذف پسوند \fI.c\fR از \fIdumpbase\fR، خروجی‌های کمکی را در \fIdir/x\-foo.*\fR تولید می‌نماید. خروجی‌های dump پسوند را حفظ می‌کنند: \fIdir/x\-foo.c.*\fR. .Sp اگر این گزینه با پسوند یک \fIdumpbase\fR مشخص‌شده مطابقت نداشته باشد، نادیده گرفته می‌شود، مگر به عنوان جایگزینی برای پسوند فایل اجرایی هنگام الحاق نام پایهٔ خروجی پیونددهنده به \fIdumppfx\fR، به شرحی که در زیر آمده است: .Sp .Vb 1 \& gcc foo.c bar.c \-o main.out \-dumpbase\-ext .out ... .Ve .Sp \fImain.out\fR را به عنوان خروجی اصلی ایجاد کرده و با استفاده از نام فایل اجرایی منهای \&\fIauxdropsuf\fR به عنوان پیشوند، از رونویسی خروجی‌های کمکی و dump جلوگیری می‌کند، و خروجی‌های کمکی با نام‌های \&\fImain\-foo.*\fR و \fImain\-bar.*\fR و خروجی‌های dump با نام‌های \&\fImain\-foo.c.*\fR و \fImain\-bar.c.*\fR را ایجاد می‌نماید. .IP "\fB\-dumpdir\fR \fIdumppfx\fR" 4 .IX Item "-dumpdir dumppfx" .PD 0 .IP "\fB\-\-dumpdir\fR \fIdumppfx\fR" 4 .IX Item "--dumpdir dumppfx" .PD هنگام شکل‌دهی به نام فایل خروجی کمکی یا dump، از \&\fIdumppfx\fR به عنوان پیشوند استفاده می‌کند: .Sp .Vb 1 \& gcc \-dumpdir pfx\- \-c foo.c ... .Ve .Sp \fIfoo.o\fR را به عنوان خروجی اصلی، و خروجی‌های کمکی را به نام \&\fIpfx\-foo.*\fR ایجاد می‌کند، که \fIdumppfx\fR داده‌شده را با \fIdumpbase\fR پیش‌فرض مشتق‌شده از خروجی اصلی پیش‌فرض (که آن هم به نوبهٔ خود از نام ورودی مشتق شده است) ترکیب می‌نماید. خروجی‌های dump پسوند نام ورودی را نیز دریافت می‌کنند: \&\fIpfx\-foo.c.*\fR. .Sp اگر قرار است از \fIdumppfx\fR به عنوان نام دایرکتوری استفاده شود، باید به یک جداکنندهٔ دایرکتوری ختم گردد: .Sp .Vb 1 \& gcc \-dumpdir dir/ \-c foo.c \-o obj/bar.o ... .Ve .Sp \fIobj/bar.o\fR را به عنوان خروجی اصلی، و خروجی‌های کمکی را به نام \fIdir/bar.*\fR ایجاد می‌کند، که \fIdumppfx\fR داده‌شده را با \fIdumpbase\fR پیش‌فرض مشتق‌شده از نام خروجی اصلی ترکیب می‌نماید. خروجی‌های dump پسوند نام ورودی را نیز دریافت می‌کنند: \fIdir/bar.c.*\fR. .Sp مقدار پیش‌فرض آن مکان فایل خروجی است، مگر اینکه فایل خروجی یک فایل ویژه مانند \f(CW\*(C`/dev/null\*(C'\fR باشد. گزینه‌های \&\fB\-save\-temps=cwd\fR و \fB\-save\-temps=obj\fR این پیش‌فرض را نادیده گرفته و بازنویسی می‌کنند، درست مانند گزینهٔ صریح \fB\-dumpdir\fR. در صورتی که چندین گزینه از این دست داده شود، آخرین گزینه اولویت خواهد داشت: .Sp .Vb 1 \& gcc \-dumpdir pfx\- \-c foo.c \-save\-temps=obj ... .Ve .Sp \fIfoo.o\fR را خروجی می‌دهد، با خروجی‌های کمکی به نام \fIfoo.*\fR زیرا \&\fB\-save\-temps=*\fR جایگزین \fIdumppfx\fR داده‌شده توسط گزینهٔ پیشین \&\fB\-dumpdir\fR می‌شود. فرقی نمی‌کند که \fB=obj\fR مقدار پیش‌فرض برای \fB\-save\-temps\fR باشد، یا دایرکتوری خروجی به‌طور ضمنی همان دایرکتوری جاری باشد. خروجی‌های dump به صورت \&\fIfoo.c.*\fR نام‌گذاری می‌شوند. .Sp هنگام کامپایل از چندین فایل ورودی، اگر \fB\-dumpbase\fR مشخص شده باشد، \fIdumpbase\fR منهای پسوند \fIauxdropsuf\fR و یک خط تیره، به یک \fIdumppfx\fR صریح یا پیش‌فرض الحاق می‌شوند (یا در صورت داشتن هرگونه مؤلفهٔ دایرکتوری، کاملاً جایگزین آن می‌گردند)، به گونه‌ای که هر یک از کامپایل‌های چندگانه، خروجی‌های aux و dump با نام‌های متفاوتی دریافت کنند. .Sp .Vb 1 \& gcc foo.c bar.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp خروجی‌های کمکی dump را به صورت \fIdir/pfx\-main\-foo.*\fR و \&\fIdir/pfx\-main\-bar.*\fR تولید می‌کند که \fIdumpbase\fR\- را به \fIdumppfx\fR الحاق کرده است. خروجی‌های dump به ترتیب پسوند فایل ورودی را حفظ می‌کنند: \fIdir/pfx\-main\-foo.c.*\fR و \fIdir/pfx\-main\-bar.c.*\fR. این مورد را با کامپایل تک‌ورودی مقایسه کنید: .Sp.Vb 1 \& gcc foo.c \-c \-dumpdir dir/pfx\- \-dumpbase main ... .Ve .Sp که با اعمال \fB\-dumpbase\fR روی یک فایل مبدأ منفرد، یک \fIdumpbase\fR جداگانه را به ازای هر فایل ورودی محاسبه و الحاق نمی‌کند. خروجی‌های کمکی و رونوشت (dump) آن در \fIdir/pfx\-main.*\fR قرار می‌گیرند. .Sp هنگام کامپایل و سپس پیوند دادن چند فایل ورودی، یک \fIdumppfx\fR پیش‌فرض یا صریحاً مشخص‌شده نیز تحت تبدیل \fIdumpbase\fR فوق قرار می‌گیرد (مانند کامپایل \fIfoo.c\fR و \&\fIbar.c\fR در بالا، ولی بدون \fB\-c\fR). اگر نه \&\fB\-dumpdir\fR و نه \fB\-dumpbase\fR مشخص نشده باشند، نام پایه خروجی پیونددهنده منهای \fIauxdropsuf\fR (در صورت مشخص بودن) یا پسوند اجرایی (در غیر این صورت)، به همراه یک خط پیوند به جای آن به \fIdumppfx\fR پیش‌فرض اضافه می‌شود. با این حال توجه داشته باشید که بر خلاف حالت‌های پیشین پیوند دادن: .Sp .Vb 1 \& gcc foo.c bar.c \-dumpdir dir/pfx\- \-o main ... .Ve .Sp نام خروجی \fImain\fR را به \fIdumppfx\fR الحاق نمی‌کند، زیرا \&\fB\-dumpdir\fR صریحاً مشخص شده است. هدف این است که \fIdumppfx\fR صریحاً مشخص‌شده بتواند در صورت تمایل، نام خروجی تعیین‌شده را به عنوان بخشی از پیشوند داشته باشد؛ تنها یک \&\fB\-dumpbase\fR صریحاً مشخص‌شده با آن ترکیب خواهد شد تا از نادیده گرفتن ساده یک گزینه معنادار جلوگیری شود. .Sp هنگام کامپایل و سپس پیوند دادن از یک فایل ورودی منفرد، نام پایه خروجی پیونددهنده تنها در صورتی همانند بالا به \fIdumppfx\fR پیش‌فرض اضافه خواهد شد که نام پایه مشترکی با نام فایل ورودی منفرد نداشته باشد. این مورد در حالت‌های پیوند تک‌ورودی بالا پوشش داده شد، اما نه با یک \fB\-dumpdir\fR صریح که مانع این ترکیب می‌شود، حتی اگر توسط \fB\-save\-temps=*\fR لغو شده باشد: .Sp .Vb 1 \& gcc foo.c \-dumpdir alt/pfx\- \-o dir/main.exe \-save\-temps=cwd ... .Ve .Sp خروجی‌های کمکی با نام \fIfoo.*\fR و خروجی‌های رونوشت با نام \&\fIfoo.c.*\fR در پوشه کاری جاری نام‌گذاری می‌شوند، همان‌طور که در نهایت توسط \fB\-save\-temps=cwd\fR درخواست شده است. .Sp برای جمع‌بندی همه این موارد در یک جریان داده شهودی اگرچه کمی غیردقیق: نام خروجی اولیه به یک بخش پوشه و یک بخش نام پایه شکسته می‌شود؛ \fIdumppfx\fR بر روی اولی تنظیم می‌شود، مگر اینکه توسط \&\fB\-dumpdir\fR یا \fB\-save\-temps=*\fR لغو شود، و \fIdumpbase\fR بر روی دومی تنظیم می‌گردد، مگر اینکه توسط \fB\-dumpbase\fR بازنویسی شود. چنانچه چندین ورودی وجود داشته باشد یا پیوند انجام گیرد، این \fIdumpbase\fR ممکن است با \&\fIdumppfx\fR ترکیب شده و از هر فایل ورودی گرفته شود. نام‌های خروجی کمکی برای هر ورودی با ترکیب \fIdumppfx\fR، \fIdumpbase\fR منهای پسوند، و پسوند خروجی کمکی شکل می‌گیرند؛ نام‌های خروجی رونوشت تنها از این جهت متفاوتند که پسوند \fIdumpbase\fR در آن‌ها حفظ می‌شود. .Sp هنگامی که صحبت از خروجی‌های کمکی و رونوشت ایجادشده در طی کامپایل مجدد LTO به میان می‌آید، ترکیبی از \fIdumppfx\fR و \fIdumpbase\fR، همان‌گونه که داده شده یا همان‌طور که از نام خروجی پیونددهنده (و نه ورودی‌ها) مشتق شده است، حتی در مواردی که این ترکیب در غیر این صورت بدین شکل به کار نمی‌رفت، به همراه یک نقطه انتهایی که جایگزین خط تیره اضافه‌شده توسط کامپایلر (در صورت وجود) می‌شود، به عنوان یک گزینه \fB\-dumpdir\fR به \fBlto\-wrapper\fR ارسال می‌شود؛ از آنجا که این برنامه در پیوند دادن درگیر است، معمولاً هیچ \&\fB\-dumpbase\fR و \fB\-dumpbase\-ext\fR دریافت نمی‌کند و آن‌ها را نادیده می‌گیرد. .Sp هنگام اجرای زیرکامپایلرها، \fBlto\-wrapper\fR نام مراحل LTO را به \fIdumppfx\fR دریافتی اضافه می‌کند، اطمینان حاصل می‌کند که شامل یک مؤلفه پوشه باشد تا بر هر \fB\-dumpdir\fR ارجحیت یابد، و آن را به عنوان \&\fB\-dumpbase\fR به زیرکامپایلرها ارسال می‌نماید. .IP \fB\-v\fR 4 .IX Item "-v" .PD 0 .IP \fB\-\-verbose\fR 4 .IX Item "--verbose" .PD دستورهای اجراشده برای اجرای مراحل کامپایل را (در خروجی استاندارد خطا) چاپ می‌کند. همچنین شماره نگارش برنامه راه‌انداز کامپایلر، پیش‌پردازنده و خود کامپایلر را چاپ می‌کند. .IP \fB\-###\fR 4 .IX Item "-###" مانند \fB\-v\fR است، با این تفاوت که دستورها اجرا نمی‌شوند و آرگومان‌ها درون نقل‌قول قرار می‌گیرند، مگر اینکه فقط شامل نویسه‌های الفبایی‌عددی یا \f(CW\*(C`./\-_\*(C'\fR باشند. این گزینه برای اسکریپت‌های شل جهت دریافت خطوط فرمان تولیدشده توسط راه‌انداز مفید است. .IP \fB\-\-help\fR 4 .IX Item "--help" توضیحی از گزینه‌های خط فرمان قابل درک برای \fBgcc\fR را (در خروجی استاندارد) چاپ می‌کند. اگر گزینه \fB\-v\fR نیز مشخص شده باشد، آنگاه \fB\-\-help\fR به فرایندهای گوناگون فراخوانی‌شده توسط \fBgcc\fR نیز ارسال می‌شود تا بتوانند گزینه‌های خط فرمانی را که می‌پذیرند نمایش دهند. چنانچه گزینه \fB\-Wextra\fR نیز (پیش از گزینه \fB\-\-help\fR) مشخص شده باشد، گزینه‌های خط فرمانی که هیچ مستنداتی ندارند نیز نمایش داده می‌شوند. .IP \fB\-\-target\-help\fR 4 .IX Item "--target-help" توضیحی از گزینه‌های خط فرمان مختص مقصد (target) را برای هر ابزار (در خروجی استاندارد) چاپ می‌کند. برای برخی مقصدها ممکن است اطلاعات مختص مقصد بیشتری نیز چاپ شود. .IP \fB\-\-help={\fR\fIclass\fR|[\fB^\fR]\fIqualifier\fR\fB}\fR[\fB,...\fR] 4 .IX Item "--help={class|[^]qualifier}[,...]" توضیحی از گزینه‌های خط فرمان قابل فهم برای کامپایلر را (در خروجی استاندارد) چاپ می‌کند که در تمام رده‌ها و توصیف‌کننده‌های مشخص‌شده می‌گنجند. رده‌های پشتیبانی‌شده عبارتند از: .RS 4 .IP \fBoptimizers\fR 4 .IX Item "optimizers" تمام گزینه‌های بهینه‌سازی پشتیبانی‌شده توسط کامپایلر را نمایش می‌دهد. .IP \fBwarnings\fR 4 .IX Item "warnings" تمام گزینه‌های کنترل‌کننده پیام‌های هشدار تولیدشده توسط کامپایلر را نمایش می‌دهد. .IP \fBtarget\fR 4 .IX Item "target" گزینه‌های مختص مقصد را نمایش می‌دهد. با این حال بر خلاف گزینه \&\fB\-\-target\-help\fR، گزینه‌های مختص مقصد پیونددهنده و اسمبلر نمایش داده نمی‌شوند. زیرا آن ابزارها در حال حاضر از نحو گسترش‌یافته \fB\-\-help=\fR پشتیبانی نمی‌کنند. .IP \fBparams\fR 4 .IX Item "params" مقدارهای شناخته‌شده توسط گزینه \fB\-\-param\fR را نمایش می‌دهد. .IP \fIlanguage\fR 4 .IX Item "language" گزینه‌های پشتیبانی‌شده برای \fIlanguage\fR را نمایش می‌دهد، که در آن \&\fIlanguage\fR نام یکی از زبان‌های پشتیبانی‌شده در این نگارش GCC است. اگر گزینه‌ای توسط همه زبان‌ها پشتیبانی شود، باید رده \fBcommon\fR انتخاب گردد. .IP \fBcommon\fR 4 .IX Item "common" گزینه‌هایی را که بین تمام زبان‌ها مشترک هستند نمایش می‌دهد. .RE .RS 4 .Sp توصیف‌کننده‌های پشتیبانی‌شده عبارتند از: .IP \fBundocumented\fR 4 .IX Item "undocumented" تنها گزینه‌هایی را نمایش می‌دهد که فاقد مستندات هستند. .IP \fBjoined\fR 4 .IX Item "joined" گزینه‌هایی را نمایش می‌دهد که آرگومانی می‌پذیرند که پس از یک علامت مساوی در همان قطعه متن پیوسته می‌آید، مانند: \&\fB\-\-help=target\fR. .IP \fBseparate\fR 4 .IX Item "separate" گزینه‌هایی را نمایش می‌دهد که آرگومانی می‌پذیرند که به صورت یک واژه جداگانه به دنبال گزینه اصلی می‌آید، مانند: \fB\-o output\-file\fR. .RE .RS 4 .Sp بنابراین برای نمونه جهت نمایش تمام سوییچ‌های مختص مقصد فاقد مستندات که توسط کامپایلر پشتیبانی می‌شوند، از این دستور استفاده کنید: .Sp .Vb 1 \& \-\-help=target,undocumented .Ve .Sp معنای یک توصیف‌کننده می‌تواند با افزودن نویسه \&\fB^\fR به ابتدای آن معکوس شود؛ بنابراین برای نمونه جهت نمایش تمام گزینه‌های هشدار دودویی (یعنی مواردی که یا روشن یا خاموش هستند و آرگومانی نمی‌پذیرند) که دارای توضیحات هستند، استفاده کنید از: .Sp .Vb 1 \& \-\-help=warnings,^joined,^undocumented .Ve .Sp آرگومان \fB\-\-help=\fR نباید صرفاً از توصیف‌کننده‌های معکوس‌شده تشکیل شود. .Sp ترکیب چند رده ممکن است، هرچند که این کار معمولاً خروجی را آن‌قدر محدود می‌کند که چیزی برای نمایش باقی نمی‌ماند. با این حال، یک حالت که در آن جواب می‌دهد، زمانی است که یکی از رده‌ها \&\fItarget\fR باشد. برای نمونه، جهت نمایش تمام گزینه‌های بهینه‌سازی مختص مقصد، استفاده کنید از: .Sp .Vb 1 \& \-\-help=target,optimizers .Ve .Sp گزینه \fB\-\-help=\fR می‌تواند در خط فرمان تکرار شود. هر بار استفاده متوالی، رده درخواستی گزینه‌های خود را نمایش می‌دهد و از مواردی که قبلاً نمایش داده شده‌اند صرف‌نظر می‌کند. اگر \fB\-\-help\fR نیز در هر کجای خط فرمان مشخص شده باشد، آنگاه نسبت به هر گزینه \fB\-\-help=\fR اولویت خواهد داشت. .Sp اگر گزینه \fB\-Q\fR در خط فرمان قبل از گزینه \&\fB\-\-help=\fR ظاهر شود، متن توصیفی نمایش‌داده‌شده توسط \&\fB\-\-help=\fR تغییر می‌کند. به جای شرح گزینه‌های نمایش‌یافته، نشان داده می‌شود که آیا گزینه فعال، غیرفعال یا روی یک مقدار معین تنظیم شده است (با این فرض که کامپایلر در نقطه‌ای که گزینه \fB\-\-help=\fR استفاده شده، از این موضوع آگاه باشد). .Sp در اینجا یک مثال خلاصه‌شده از پورت ARM برای \fBgcc\fR آورده شده است: .Sp.Vb 5 \& % gcc \-Q \-mabi=2 \-\-help=target \-c \& The following options are target specific: \& \-mabi= 2 \& \-mabort\-on\-noreturn [disabled] \& \-mapcs [disabled] .Ve .Sp خروجی نسبت به اثرات گزینه‌های پیشین خط فرمان حساس است، بنابراین به عنوان مثال می‌توان با استفاده از دستور زیر دریافت که کدام بهینه‌سازی‌ها در \fB\-O2\fR فعال هستند: .Sp .Vb 1 \& \-Q \-O2 \-\-help=optimizers .Ve .Sp همچنین می‌توانید با استفاده از دستور زیر متوجه شوید که کدام بهینه‌سازی‌های دودویی توسط \fB\-O3\fR فعال می‌شوند: .Sp .Vb 3 \& gcc \-c \-Q \-O3 \-\-help=optimizers > /tmp/O3\-opts \& gcc \-c \-Q \-O2 \-\-help=optimizers > /tmp/O2\-opts \& diff /tmp/O2\-opts /tmp/O3\-opts | grep enabled .Ve .RE .IP \fB\-\-version\fR 4 .IX Item "--version" شماره نسخه و کپی‌رایت‌های GCC فراخوانی‌شده را نمایش می‌دهد. .IP \fB\-pass\-exit\-codes\fR 4 .IX Item "-pass-exit-codes" .PD 0 .IP \fB\-\-pass\-exit\-codes\fR 4 .IX Item "--pass-exit-codes" .PD در حالت عادی، اگر هر فازی از کامپایلر یک کد بازگشتی ناموفق برگرداند، برنامه \fBgcc\fR با کد ۱ خارج می‌شود. اگر \&\fB\-pass\-exit\-codes\fR را مشخص کنید، برنامه \fBgcc\fR در عوض با بزرگ‌ترین کد خطای عددی ایجادشده توسط فازی که وضعیت خطا را اعلام کرده است، خارج می‌شود. فرانت‌اندهای C، C++‎ و Fortran در صورت مواجهه با خطای داخلی کامپایلر، کد ۴ را بازمی‌گردانند. .IP \fB\-pipe\fR 4 .IX Item "-pipe" .PD 0 .IP \fB\-\-pipe\fR 4 .IX Item "--pipe" .PD برای برقراری ارتباط میان مراحل مختلف کامپایل، به جای فایل‌های موقت از لوله‌ها (pipes) استفاده می‌کند. این گزینه روی برخی سیستم‌ها که در آن‌ها اسمبلر قادر به خواندن از لوله نیست با شکست مواجه می‌شود؛ اما اسمبلر GNU مشکلی در این زمینه ندارد. .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\*(Aq شود. نام پایه فایل شیء مشترک برای شناسایی افزونه به منظور تجزیه آرگومان‌ها استفاده می‌شود (به \&\fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR در زیر مراجعه کنید). هر افزونه باید توابع بازخوانی (callback) مشخص‌شده در Plugins API را تعریف کند. .IP \fB\-fplugin\-arg\-\fR\fIname\fR\fB\-\fR\fIkey\fR\fB=\fR\fIvalue\fR 4 .IX Item "-fplugin-arg-name-key=value" یک آرگومان با نام \fIkey\fR و مقدار \fIvalue\fR برای افزونه‌ای با نام \fIname\fR تعریف می‌کند. .IP \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] 4 .IX Item "-fdump-ada-spec[-slim]" برای فایل‌های منبع و include در C و C++‎، مشخصات (specs) متناظر زبان Ada را تولید می‌کند. .IP \fB\-fada\-spec\-parent=\fR\fIunit\fR 4 .IX Item "-fada-spec-parent=unit" در ترکیب با گزینه \fB\-fdump\-ada\-spec\fR[\fB\-slim\fR] در بالا، مشخصات Ada را به عنوان واحدهای فرزند واحد والد \fIunit\fR تولید می‌کند. .IP \fB\-fdump\-go\-spec=\fR\fIfile\fR 4 .IX Item "-fdump-go-spec=file" برای فایل‌های ورودی در هر زبانی، اعلان‌های متناظر زبان Go را در \fIfile\fR تولید می‌کند. این گزینه اعلان‌های \f(CW\*(C`const\*(C'\fR، \&\f(CW\*(C`type\*(C'\fR، \f(CW\*(C`var\*(C'\fR و \f(CW\*(C`func\*(C'\fR در Go را تولید می‌کند که می‌تواند روشی مفید برای شروع نوشتن یک رابط Go به کدهای نوشته‌شده در سایر زبان‌ها باشد. .IP \fB@\fR\fIfile\fR 4 .IX Item "@file" گزینه‌های خط فرمان را از \fIfile\fR می‌خواند. گزینه‌های خوانده‌شده به جای گزینه اصلی @\fIfile\fR درج می‌شوند. اگر \fIfile\fR وجود نداشته باشد یا قابل خواندن نباشد، با گزینه به صورت تحت‌اللفظی رفتار شده و حذف نمی‌شود. .Sp گزینه‌ها در \fIfile\fR توسط نویسه‌های فاصله خالی (whitespace) جدا می‌شوند. می‌توان یک نویسه فاصله خالی را با احاطه کردن کل گزینه در گیومه تکی یا دوتایی، درون گزینه قرار داد. هر نویسه‌ای (از جمله بک‌اسلش) می‌تواند با پیشوند کردن یک بک‌اسلش به آن درج شود. خود \fIfile\fR می‌تواند حاوی گزینه‌های @\fIfile\fR بیشتری باشد؛ هرکدام از این گزینه‌ها به صورت بازگشتی پردازش خواهند شد..SS "کامپایل برنامه‌های C++ (Compiling C++ Programs)" .IX Subsection "Compiling C++ Programs" فایل‌های منبع C++ به طور مرسوم از یکی از پسوندهای \fB.C\fR، \&\fB.cc\fR، \fB.cpp\fR، \fB.CPP\fR، \fB.c++\fR، \fB.cp\fR یا \&\fB.cxx\fR استفاده می‌کنند؛ فایل‌های سرآیند (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 را فراخوانی کرده و به طور خودکار پیوند دادن (linking) با کتابخانه C++ را مشخص می‌کند. این برنامه با فایل‌های \fB.c\fR، \&\fB.h\fR و \fB.i\fR مانند فایل‌های منبع C++ به جای فایل‌های منبع C رفتار می‌کند، مگر اینکه گزینه \fB\-x\fR استفاده شده باشد. این برنامه همچنین هنگام پیش‌کامپایل کردن یک فایل سرآیند C با پسوند \fB.h\fR برای استفاده در کامپایل‌های C++ مفید است. در بسیاری از سیستم‌ها، \fBg++\fR با نام \fBc++\fR نیز نصب می‌شود. .PP هنگامی که برنامه‌های C++ را کامپایل می‌کنید، می‌توانید بسیاری از همان گزینه‌های خط فرمانی را که برای کامپایل برنامه‌ها در هر زبان دیگری به کار می‌برید، مشخص کنید؛ یا گزینه‌های خط فرمانی که برای C و زبان‌های مرتبط معنا دارند؛ یا گزینه‌هایی که منحصراً برای برنامه‌های C++ معنادار هستند. .SS "گزینه‌های کنترل‌کننده گویش C (Options Controlling C Dialect)" .IX Subsection "Options Controlling C Dialect" گزینه‌های زیر گویش زبان C (یا زبان‌های مشتق‌شده از C مانند C++، Objective\-C و Objective\-C++) را که کامپایلر می‌پذیرد، کنترل می‌کنند: .IP \fB\-ansi\fR 4 .IX Item "-ansi" .PD 0 .IP \fB\-\-ansi\fR 4 .IX Item "--ansi" .PD در حالت C، این گزینه معادل \fB\-std=c90\fR است. در حالت C++، معادل \&\fB\-std=c++98\fR است. .IP \fB\-std=\fR 4 .IX Item "-std=" استاندارد زبان را تعیین می‌کند. این گزینه در حال حاضر فقط هنگام کامپایل C یا C++ پشتیبانی می‌شود. .Sp کامپایلر می‌تواند چندین استاندارد پایه، مانند \fBc90\fR یا \&\fBc++98\fR، و گویش‌های GNU از آن استانداردها مانند \&\fBgnu90\fR یا \fBgnu++98\fR را بپذیرد. هنگامی که یک استاندارد پایه مشخص می‌شود، کامپایلر تمام برنامه‌های منطبق با آن استاندارد به علاوه برنامه‌هایی را که از افزونه‌های GNU استفاده می‌کنند و با آن در تناقض نیستند، می‌پذیرد. برای مثال، \&\fB\-std=c90\fR قابلیت‌های خاصی از GCC را که با استاندارد ISO C90 ناسازگار هستند خاموش می‌کند، مانند کلمات کلیدی \f(CW\*(C`asm\*(C'\fR و \f(CW\*(C`typeof\*(C'\fR، اما سایر افزونه‌های GNU را که در ISO C90 معنایی ندارند غیرفعال نمی‌کند، مانند حذف عبارت میانی در یک عبارت شرطی \f(CW\*(C`?:\*(C'\fR. از سوی دیگر، هنگامی که یک گویش GNU از یک استاندارد مشخص می‌شود، تمام قابلیت‌های پشتیبانی‌شده توسط کامپایلر فعال می‌شوند، حتی زمانی که این قابلیت‌ها معنای استاندارد پایه را تغییر دهند. در نتیجه، ممکن است برخی از برنامه‌هایی که انطباق سخت‌گیرانه دارند رد شوند. این استاندارد خاص توسط \fB\-Wpedantic\fR برای شناسایی این که کدام قابلیت‌ها بر اساس آن نسخه از استاندارد افزونه‌های GNU محسوب می‌شوند، استفاده می‌گردد. برای مثال، \&\fB\-std=gnu90 \-Wpedantic\fR درباره کامنت‌های سبک C++ با \fB//\fR هشدار می‌دهد، در حالی که \fB\-std=gnu99 \-Wpedantic\fR هشداری نمی‌دهد. .Sp باید مقداری برای این گزینه مشخص شود؛ مقادیر ممکن عبارتند از: .RS 4 .IP \fBc90\fR 4 .IX Item "c90" .PD 0 .IP \fBc89\fR 4 .IX Item "c89" .IP \fBiso9899:1990\fR 4 .IX Item "iso9899:1990" .PD پشتیبانی از تمام برنامه‌های ISO C90 (برخی افزونه‌های GNU که با ISO C90 در تضاد هستند غیرفعال می‌شوند). همانند \fB\-ansi\fR برای کد C. .IP \fBiso9899:199409\fR 4 .IX Item "iso9899:199409" استاندارد ISO C90 همان‌گونه که در اصلاحیه ۱ (amendment 1) اصلاح شده است. .IP \fBc99\fR 4 .IX Item "c99" .PD 0 .IP \fBc9x\fR 4 .IX Item "c9x" .IP \fBiso9899:1999\fR 4 .IX Item "iso9899:1999" .IP \fBiso9899:199x\fR 4 .IX Item "iso9899:199x" .PD استاندارد ISO C99. این استاندارد اساساً به طور کامل پشتیبانی می‌شود، به جز باگ‌ها و مسائل مربوط به ممیز شناور (floating\-point) (عمدتاً، اما نه کاملاً، مرتبط با قابلیت‌های اختیاری C99 از پیوست‌های F و G). برای اطلاعات بیشتر <\fBhttps://gcc.gnu.org/projects/c\-status.html\fR> را ببینید. نام‌های \fBc9x\fR و \fBiso9899:199x\fR منسوخ شده‌اند. .IP \fBc11\fR 4 .IX Item "c11" .PD 0 .IP \fBc1x\fR 4 .IX Item "c1x" .IP \fBiso9899:2011\fR 4 .IX Item "iso9899:2011" .PD استاندارد ISO C11، بازبینی سال ۲۰۱۱ استاندارد ISO C. این استاندارد اساساً به طور کامل پشتیبانی می‌شود، به جز باگ‌ها، مسائل ممیز شناور (عمدتاً، اما نه کاملاً، مرتبط با قابلیت‌های اختیاری C11 از پیوست‌های F و G) و پیوست‌های اختیاری K (رابط‌های بررسی حدود \- Bounds\-checking interfaces) و L (تحلیل‌پذیری \- Analyzability). نام \fBc1x\fR منسوخ شده است. .IP \fBc17\fR 4 .IX Item "c17" .PD 0 .IP \fBc18\fR 4 .IX Item "c18" .IP \fBiso9899:2017\fR 4 .IX Item "iso9899:2017" .IP \fBiso9899:2018\fR 4 .IX Item "iso9899:2018" .PD استاندارد ISO C17، بازبینی سال ۲۰۱۷ استاندارد ISO C (منتشر شده در سال ۲۰۱۸). این استاندارد به جز اصلاح نقایص (که همگی با \fB\-std=c11\fR نیز اعمال می‌شوند) و یک مقدار جدید برای \&\f(CW\*(C`_\|_STDC_VERSION_\|_\*(C'\fR، همانند C11 است و بنابراین به همان میزان C11 پشتیبانی می‌شود. .IP \fBc23\fR 4 .IX Item "c23" .PD 0 .IP \fBc2x\fR 4 .IX Item "c2x" .IP \fBiso9899:2024\fR 4 .IX Item "iso9899:2024" .PD استاندارد ISO C23، بازبینی سال ۲۰۲۳ استاندارد ISO C (منتشر شده در سال ۲۰۲۴). نام \&\fBc2x\fR منسوخ شده است. .IP \fBc2y\fR 4 .IX Item "c2y" نسخه بعدی استاندارد ISO C که همچنان در حال توسعه است. پشتیبانی از این نسخه آزمایشی و ناقص است. .IP \fBgnu90\fR 4 .IX Item "gnu90" .PD 0 .IP \fBgnu89\fR 4 .IX Item "gnu89" .PD گویش 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++ سال ۱۹۹۸ به‌همراه اصلاحیه فنی سال ۲۰۰۳ و برخی گزارش‌های نقص (defect reports) تکمیلی. مشابه \fB\-ansi\fR برای کد C++. .IP \fBgnu++98\fR 4 .IX Item "gnu++98" .PD 0 .IP \fBgnu++03\fR 4 .IX Item "gnu++03" .PD گویش GNU از \fB\-std=c++98\fR. .IP \fBc++11\fR 4 .IX Item "c++11" .PD 0 .IP \fBc++0x\fR 4 .IX Item "c++0x" .PD استاندارد ISO C++ سال ۲۰۱۱ به‌همراه اصلاحیه‌ها. نام \fBc++0x\fR منسوخ شده است. .IP \fBgnu++11\fR 4 .IX Item "gnu++11" .PD 0 .IP \fBgnu++0x\fR 4 .IX Item "gnu++0x" .PD گویش GNU از \fB\-std=c++11\fR. نام \fBgnu++0x\fR منسوخ شده است. .IP \fBc++14\fR 4 .IX Item "c++14" .PD 0 .IP \fBc++1y\fR 4 .IX Item "c++1y" .PD استاندارد ISO C++ سال ۲۰۱۴ به‌همراه اصلاحیه‌ها. نام \fBc++1y\fR منسوخ شده است. .IP \fBgnu++14\fR 4 .IX Item "gnu++14" .PD 0 .IP \fBgnu++1y\fR 4 .IX Item "gnu++1y" .PD گویش GNU از \fB\-std=c++14\fR. نام \fBgnu++1y\fR منسوخ شده است. .IP \fBc++17\fR 4 .IX Item "c++17" .PD 0 .IP \fBc++1z\fR 4 .IX Item "c++1z" .PD استاندارد ISO C++ سال ۲۰۱۷ به‌همراه اصلاحیه‌ها. نام \fBc++1z\fR منسوخ شده است. .IP \fBgnu++17\fR 4 .IX Item "gnu++17" .PD 0 .IP \fBgnu++1z\fR 4 .IX Item "gnu++1z" .PD گویش GNU از \fB\-std=c++17\fR. نام \fBgnu++1z\fR منسوخ شده است. .IP \fBc++20\fR 4 .IX Item "c++20" .PD 0 .IP \fBc++2a\fR 4 .IX Item "c++2a" .PD استاندارد ISO C++ سال ۲۰۲۰ به‌همراه اصلاحیه‌ها. پشتیبانی از ماژول‌های C++20 هنوز آزمایشی است و باید با گزینهٔ \fB\-fmodules\fR فعال شود. نام \fBc++2a\fR منسوخ شده است. .IP \fBgnu++20\fR 4 .IX Item "gnu++20" .PD 0 .IP \fBgnu++2a\fR 4 .IX Item "gnu++2a" .PD گویش GNU از \fB\-std=c++20\fR. این مقدار پیش‌فرض برای کد C++ است. پشتیبانی از ماژول‌های C++20 هنوز آزمایشی است و باید با گزینهٔ \fB\-fmodules\fR فعال شود. نام \fBgnu++2a\fR منسوخ شده است. .IP \fBc++23\fR 4 .IX Item "c++23" .PD 0 .IP \fBc++2b\fR 4 .IX Item "c++2b" .PD استاندارد ISO C++ سال ۲۰۲۳ به‌همراه اصلاحیه‌ها (منتشر شده در سال ۲۰۲۴). پشتیبانی آزمایشی است و ممکن است در نگارش‌های آینده به شیوه‌هایی ناسازگار تغییر کند. نام \fBc++2b\fR منسوخ شده است. .IP \fBgnu++23\fR 4 .IX Item "gnu++23" .PD 0 .IP \fBgnu++2b\fR 4 .IX Item "gnu++2b" .PD گویش GNU از \fB\-std=c++23\fR. پشتیبانی آزمایشی است و ممکن است در نگارش‌های آینده به شیوه‌هایی ناسازگار تغییر کند. نام \fBgnu++2b\fR منسوخ شده است. .IP \fBc++2c\fR 4 .IX Item "c++2c" .PD 0 .IP \fBc++26\fR 4 .IX Item "c++26" .PD بازنگری بعدی استاندارد ISO C++ که برای سال ۲۰۲۶ برنامه‌ریزی شده است. پشتیبانی بسیار آزمایشی است و تقریباً به‌طور قطع در نگارش‌های آینده به شیوه‌هایی ناسازگار تغییر خواهد کرد. .IP \fBgnu++2c\fR 4 .IX Item "gnu++2c" .PD 0 .IP \fBgnu++26\fR 4 .IX Item "gnu++26" .PD گویش GNU از \fB\-std=c++2c\fR. پشتیبانی بسیار آزمایشی است و تقریباً به‌طور قطع در نگارش‌های آینده به شیوه‌هایی ناسازگار تغییر خواهد کرد. .RE .RS 4 .RE .IP "\fB\-aux\-info\fR \fIfilename\fR" 4 .IX Item "-aux-info filename" اعلان‌های دارای پیش‌نمونه (prototyped declarations) برای تمامی توابع اعلام‌شده و/یا تعریف‌شده در یک واحد ترجمه (translation unit)، از جمله توابع موجود در فایل‌های سرایند را در نام‌فایل ارائه‌شده می‌نویسد. این گزینه برای هر زبانی جز C بدون هیچ هشداری نادیده گرفته می‌شود. .Sp علاوه بر اعلان‌ها، این فایل در قالب توضیح (comment) مبدأ هر اعلان (فایل مبدأ و خط)، اینکه اعلان ضمنی، دارای پیش‌نمونه یا بدون پیش‌نمونه بوده است (\fBI\fR، \fBN\fR برای جدید یا \&\fBO\fR برای قدیمی، به‌ترتیب، در نخستین نویسه پس از شماره خط و دونقطه)، و اینکه آیا از یک اعلان ناشی شده یا یک تعریف (\fBC\fR یا \fBF\fR، به‌ترتیب، در نویسهٔ بعدی) را مشخص می‌کند. در مورد تعریف توابع، فهرستی از آرگومان‌ها به سبک K&R که اعلان‌هایشان در پی آن می‌آید نیز در داخل توضیحات، پس از اعلان ارائه می‌شود. .IP \fB\-fno\-asm\fR 4 .IX Item "-fno-asm" کلمات \f(CW\*(C`asm\*(C'\fR، \f(CW\*(C`inline\*(C'\fR یا \f(CW\*(C`typeof\*(C'\fR را به عنوان کلیدواژه شناسایی نمی‌کند تا کد بتواند از این واژه‌ها به عنوان شناسه استفاده کند. در عوض می‌توانید از کلیدواژه‌های \f(CW\*(C`_\|_asm_\|_\*(C'\fR، \f(CW\*(C`_\|_inline_\|_\*(C'\fR و \f(CW\*(C`_\|_typeof_\|_\*(C'\fR استفاده کنید. در C، گزینهٔ \fB\-ansi\fR مستلزم \fB\-fno\-asm\fR است. .Sp در C++، کلیدواژهٔ \f(CW\*(C`inline\*(C'\fR یک کلیدواژهٔ استاندارد است و تحت تأثیر این کلید قرار نمی‌گیرد. ممکن است بخواهید در عوض از پرچم \fB\-fno\-gnu\-keywords\fR استفاده کنید که \f(CW\*(C`typeof\*(C'\fR را غیرفعال می‌کند اما نه \f(CW\*(C`asm\*(C'\fR و \&\f(CW\*(C`inline\*(C'\fR را. در حالت C99 (\fB\-std=c99\fR یا \fB\-std=gnu99\fR)، این گزینه فقط بر کلیدواژه‌های \f(CW\*(C`asm\*(C'\fR و \f(CW\*(C`typeof\*(C'\fR اثر می‌گذارد، زیرا \f(CW\*(C`inline\*(C'\fR یک کلیدواژهٔ استاندارد در ISO C99 است. در حالت C23 (\fB\-std=c23\fR یا \fB\-std=gnu23\fR)، این گزینه فقط کلیدواژهٔ \f(CW\*(C`asm\*(C'\fR را تحت تأثیر قرار می‌دهد، زیرا \f(CW\*(C`typeof\*(C'\fR یک کلیدواژهٔ استاندارد در ISO C23 است. .IP \fB\-fno\-builtin\fR 4 .IX Item "-fno-builtin" .PD 0 .IP \fB\-fno\-builtin\-\fR\fIfunction\fR 4 .IX Item "-fno-builtin-function" .PD توابع توکار (built\-in) را که با پیشوند \&\fB_\|_builtin_\fR شروع نمی‌شوند شناسایی نمی‌کند. .Sp ‏GCC معمولاً کدهای ویژه‌ای تولید می‌کند تا برخی توابع توکار را کارآمدتر مدیریت کند؛ به عنوان مثال، فراخوانی‌های \f(CW\*(C`alloca\*(C'\fR ممکن است تبدیل به تک‌دستوراتی شوند که مستقیماً پشته را تنظیم می‌کنند، و فراخوانی‌های \f(CW\*(C`memcpy\*(C'\fR ممکن است تبدیل به حلقه‌های رونوشت درون‌خطی شوند. کد حاصل اغلب هم کوچک‌تر و هم سریع‌تر است، اما از آنجا که فراخوانی‌های تابع دیگر به همان صورت در کد ظاهر نمی‌شوند، نمی‌توانید روی آن فراخوانی‌ها نقطه توقف (breakpoint) بگذارید، و همچنین نمی‌توانید رفتار توابع را با پیوند دادن به کتابخانه‌ای دیگر تغییر دهید. علاوه بر این، هنگامی که تابعی به عنوان تابع توکار شناخته می‌شود، GCC ممکن است از اطلاعات مربوط به آن تابع برای هشدار دادن درباره مشکلات فراخوانی آن، یا تولید کد کارآمدتر بهره ببرد، حتی اگر کد حاصل هنوز حاوی فراخوانی‌های آن تابع باشد. به عنوان مثال، هشدارهایی با \fB\-Wformat\fR برای فراخوانی‌های نادرست \&\f(CW\*(C`printf\*(C'\fR داده می‌شود هنگامی که \f(CW\*(C`printf\*(C'\fR توکار است و مشخص است که \&\f(CW\*(C`strlen\*(C'\fR حافظهٔ سراسری را تغییر نمی‌دهد. .Sp با گزینهٔ \fB\-fno\-builtin\-\fR\fIfunction\fR تنها تابع توکار \fIfunction\fR غیرفعال می‌شود. \fIfunction\fR نباید با \fB_\|_builtin_\fR شروع شود. اگر تابعی نام برده شود که در این نسخه از GCC توکار نباشد، این گزینه نادیده گرفته می‌شود. هیچ گزینهٔ معادل \&\fB\-fbuiltin\-\fR\fIfunction\fR وجود ندارد؛ چنانچه مایلید توابع توکار را هنگام استفاده از \fB\-fno\-builtin\fR یا \&\fB\-ffreestanding\fR به‌صورت انتخابی فعال کنید، می‌توانید ماکروهایی مانند زیر تعریف نمایید: .Sp.Vb 2 \& #define abs(n) _\|_builtin_abs ((n)) \& #define strcpy(d, s) _\|_builtin_strcpy ((d), (s)) .Ve .IP \fB\-fcond\-mismatch\fR 4 .IX Item "-fcond-mismatch" عبارت‌های شرطی با انواع ناهماهنگ در آرگومان‌های دوم و سوم را مجاز می‌داند. مقدار چنین عبارتی 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 حافظهٔ تراکنشی Intel (ویرایش ۱.۱، ۶ مه ۲۰۰۹) تولید می‌کند. این یک ویژگی آزمایشی است که رابط آن ممکن است در نگارش‌های آیندهٔ 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 برخی موارد فیلدهای بدون‌نام در ساختارها و اجتماع‌ها (unions) تنها با این گزینه پذیرفته می‌شوند. .Sp توجه داشته باشید که این گزینه برای تمام هدف‌ها خاموش است، به جز هدف‌های x86 که از ms\-abi استفاده می‌کنند. .IP \fB\-fpermitted\-flt\-eval\-methods=\fR\fIstyle\fR 4 .IX Item "-fpermitted-flt-eval-methods=style" استاندارد ISO/IEC TS 18661\-3 مقادیر مجاز جدیدی برای \&\f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR تعریف می‌کند که نشان می‌دهند عملیات و مقادیر ثابتی که دارای یک نوع معنایی با قالب مبادله (interchange) یا توسعه‌یافته (extended) هستند، باید با دقت و دامنهٔ آن نوع ارزیابی شوند. این مقادیر جدید اَبَرمجموعه‌ای از مقادیر مجاز تحت C99/C11 هستند که معنای سایر مقادیر مثبت \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR را مشخص نکرده‌اند. به این ترتیب، کدهای منطبق بر C11 ممکن است با انتظار احتمال وجود مقادیر جدید نوشته نشده باشند. .Sp \&\fB\-fpermitted\-flt\-eval\-methods\fR مشخص می‌کند که آیا کامپایلر تنها باید مقادیر \f(CW\*(C`FLT_EVAL_METHOD\*(C'\fR مشخص‌شده در C99/C11 را مجاز بداند، یا مجموعهٔ توسعه‌یافته مقادیر مشخص‌شده در ISO/IEC TS 18661\-3 را. .Sp \&\fIstyle\fR بسته به مورد، \f(CW\*(C`c11\*(C'\fR یا \f(CW\*(C`ts\-18661\-3\*(C'\fR است. .Sp مقدار پیش‌فرض در حالت سازگار با استاندارد (\fB\-std=c11\fR یا مشابه آن)، \fB\-fpermitted\-flt\-eval\-methods=c11\fR است. پیش‌فرض در یک گویش GNU (\fB\-std=gnu11\fR یا مشابه آن)، \&\fB\-fpermitted\-flt\-eval\-methods=ts\-18661\-3\fR است. .Sp گزینه‌های \fB\-fdeps\-*\fR برای استخراج اطلاعات ساختاریافتهٔ وابستگی‌ها برای یک مبدأ به‌کار می‌روند. این امر شامل تعیین این است که چه منابع ارائه‌شده توسط سایر فایل‌های مبدأ برای کامپایل این مبدأ نیاز خواهد بود و همچنین چه منابعی توسط این مبدأ ارائه می‌شود. این اطلاعات می‌تواند برای افزودن وابستگی‌های مورد نیاز میان قواعد کامپایل مبداهای وابسته بر اساس محتوای آن‌ها استفاده شود، به‌جای آن‌که لازم باشد این اطلاعات در ابزارهای ساخت نیز بازتاب یابد. .IP \fB\-fdeps\-file=\fR\fIfile\fR 4 .IX Item "-fdeps-file=file" محل نوشتن اطلاعات ساختاریافتهٔ وابستگی‌ها. .IP \fB\-fdeps\-format=\fR\fIformat\fR 4 .IX Item "-fdeps-format=format" قالب مورد استفاده برای اطلاعات ساختاریافتهٔ وابستگی‌ها. در حال حاضر \fBp1689r5\fR تنها قالب پشتیبانی‌شده است. توجه داشته باشید هنگامی که این آرگومان مشخص شود، خروجی \fB\-MF\fR از برخی اطلاعات (به‌ویژه ماژول‌های C++) تهی می‌شود تا از نحو توسعه‌یافتهٔ makefile که برای بیشتر ابزارها قابل فهم نیست استفاده نکند. .IP \fB\-fdeps\-target=\fR\fIfile\fR 4 .IX Item "-fdeps-target=file" مشابه \fB\-MT\fR است اما برای اطلاعات ساختاریافتهٔ وابستگی‌ها. این گزینه مقصدی را مشخص می‌کند که در نهایت به هر یک از منابع مورد نیاز احتیاج خواهد داشت و هر منبع استخراج‌شده از مبدأ را که ممکن است مورد نیاز سایر منابع باشد فراهم می‌کند. .IP \fB\-fplan9\-extensions\fR 4 .IX Item "-fplan9-extensions" برخی از ساختارهای غیراستاندارد به‌کاررفته در کد Plan 9 را می‌پذیرد. .Sp این گزینه \fB\-fms\-extensions\fR را فعال می‌کند، اجازه می‌دهد اشاره‌گرها به ساختارهای با فیلدهای بی‌نام به توابعی که انتظار اشاره‌گر به عناصر از نوع فیلد را دارند ارسال شوند، و امکان ارجاع به فیلدهای بی‌نامِ اعلان‌شده با typedef را فراهم می‌کند. این گزینه تنها برای C پشتیبانی می‌شود، نه C++. .IP \fB\-fsigned\-bitfields\fR 4 .IX Item "-fsigned-bitfields" .PD 0 .IP \fB\-funsigned\-bitfields\fR 4 .IX Item "-funsigned-bitfields" .IP \fB\-fno\-signed\-bitfields\fR 4 .IX Item "-fno-signed-bitfields" .IP \fB\-fno\-unsigned\-bitfields\fR 4 .IX Item "-fno-unsigned-bitfields" .PD این گزینه‌ها تعیین می‌کنند که آیا یک میدان‌بیتی (bit-field) در حالتی که در اعلان آن از هیچ‌یک از \f(CW\*(C`signed\*(C'\fR یا \f(CW\*(C`unsigned\*(C'\fR استفاده نشده باشد، علامت‌دار باشد یا بی‌علامت. به‌طور پیش‌فرض، چنین میدان‌بیتی علامت‌دار است، زیرا سازگارتر است: انواع عدد صحیح پایه مانند \f(CW\*(C`int\*(C'\fR از انواع علامت‌دار هستند. .IP \fB\-fsigned\-char\fR 4 .IX Item "-fsigned-char" .PD 0 .IP \fB\-funsigned\-char\fR 4 .IX Item "-funsigned-char" .PD \&\fB\-fsigned\-char\fR اجازه می‌دهد نوع \f(CW\*(C`char\*(C'\fR مانند \f(CW\*(C`signed char\*(C'\fR علامت‌دار باشد، در حالی که \fB\-funsigned\-char\fR اجازه می‌دهد نوع \f(CW\*(C`char\*(C'\fR مانند \f(CW\*(C`unsigned char\*(C'\fR بی‌علامت باشد. .Sp توجه داشته باشید که \fB\-fsigned\-char\fR معادل \fB\-fno\-unsigned\-char\fR است که صورت نفی‌شدهٔ \fB\-funsigned\-char\fR می‌باشد. به همین ترتیب، گزینهٔ \&\fB\-fno\-signed\-char\fR معادل \fB\-funsigned\-char\fR است. .Sp هر مقصدی که توسط GCC پشتیبانی می‌شود دارای یک پیش‌فرض برای نوع \f(CW\*(C`char\*(C'\fR است، که معمولاً در سند ABI ویژهٔ پردازنده برای آن مقصد مشخص می‌شود. این نوع در حالت پیش‌فرض یا مانند \f(CW\*(C`unsigned char\*(C'\fR است یا مانند \f(CW\*(C`signed char\*(C'\fR. .Sp در حالت ایده‌آل، یک برنامهٔ پایاپذیر (portable) وقتی به علامت‌دار بودن یک شیء وابسته است، باید همیشه از \f(CW\*(C`signed char\*(C'\fR یا \&\f(CW\*(C`unsigned char\*(C'\fR استفاده کند. اما برنامه‌های بسیاری نوشته شده‌اند که از \f(CW\*(C`char\*(C'\fR ساده استفاده می‌کنند و بسته به ماشین‌هایی که برای آن‌ها نوشته شده‌اند، انتظار دارند علامت‌دار یا بی‌علامت باشد. این گزینه‌ها به شما اجازه می‌دهند چنین برنامه‌ای را با رفتار پیش‌فرض برعکس به‌کار بگیرید. .Sp نوع \f(CW\*(C`char\*(C'\fR همیشه نوعی متمایز از هر یک از \&\f(CW\*(C`signed char\*(C'\fR یا \f(CW\*(C`unsigned char\*(C'\fR است، هرچند که رفتار آن همواره دقیقاً شبیه یکی از این دو می‌باشد. .IP "\fB\-fstrict\-flex\-arrays\fR (تنها C و C++)" 4 .IX Item "-fstrict-flex-arrays (C and C++ only)".PD 0 .IP "\fB\-fstrict\-flex\-arrays=\fR\fIlevel\fR\fB \fR(فقط C و C++)" 4 .IX Item "-fstrict-flex-arrays=level (C and C++ only)" .PD کنترل این‌که چه زمانی با آرایه انتهایی یک ساختار به منظور دسترسی به عناصر آن، به عنوان یک عضو آرایه انعطاف‌پذیر رفتار شود. مقدار \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\-\-compile\-std\-module\fR 4 .IX Item "--compile-std-module" پیش از کامپایل هر فایل منبعی که صراحتاً در خط فرمان مشخص شده است، رابط‌های ماژول کامپایل‌شده را برای واحد سرآیند \&\fB\fR و ماژول‌های \fBstd\fR و \&\fBstd.compat\fR می‌سازد. این گزینه برای ساخت برنامه‌های ساده‌ای که از \fBimport std;\fR با یک دستور منفرد استفاده می‌کنند، مفید است. .IP \fB\-fabi\-version=\fR\fIn\fR 4 .IX Item "-fabi-version=n" از نسخه \fIn\fR از ABI مربوط به C++ استفاده می‌کند. مقدار پیش‌فرض نسخه 0 است. .Sp نسخه 0 به نسخه‌ای اشاره دارد که بیشترین انطباق را با مشخصات ABI در C++ دارد. بنابراین، ABI به‌دست‌آمده با استفاده از نسخه 0 با برطرف شدن باگ‌های ABI در نسخه‌های مختلف G++ تغییر خواهد کرد. .Sp نسخه 1، نسخه‌ای از ABI مربوط به C++ است که نخستین بار در G++ 3.2 ظاهر شد. .Sp نسخه 2، نسخه‌ای از ABI مربوط به C++ است که نخستین بار در 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 ظاهر شد، رفتار ارتقای نوع برای شمارش‌های محدوده‌دار (scoped enums) در C++11 و نام‌گردانی بسته‌های آرگومان قالب، const/static_cast، پیشوندهای ++ و \-\-، و تابع در محدوده کلاس استفاده‌شده به عنوان آرگومان قالب را اصلاح می‌کند. .Sp نسخه 7، که نخستین بار در G++ 4.8 ظاهر شد، با nullptr_t به عنوان یک نوع توکار رفتار کرده و نام‌گردانی لامبداها را در محدوده آرگومان‌های پیش‌فرض اصلاح می‌کند. .Sp نسخه 8، که نخستین بار در G++ 4.9 ظاهر شد، رفتار جایگزینی انواع توابع با توصیف‌کننده‌های cv تابع (function\-cv\-qualifiers) را اصلاح می‌کند. .Sp نسخه 9، که نخستین بار در G++ 5.2 ظاهر شد، هم‌ترازی \&\f(CW\*(C`nullptr_t\*(C'\fR را اصلاح می‌کند. .Sp نسخه 10، که نخستین بار در G++ 6.1 ظاهر شد، نام‌گردانی صفت‌هایی را که بر هویت نوع تأثیر می‌گذارند (مانند صفت‌های قرارداد فراخوانی ia32، نظیر \fBstdcall\fR) اضافه می‌کند. .Sp نسخه 11، که نخستین بار در G++ 7 ظاهر شد، نام‌گردانی عبارت‌های ...sizeof و نام‌های عملگر را اصلاح می‌کند. برای موجودیت‌های چندگانه با نام یکسان درون یک تابع که در محدوده‌های متفاوتی اعلان شده‌اند، نام‌گردانی از دوازدهمین رخداد به بعد تغییر می‌کند. همچنین این نسخه متضمن \fB\-fnew\-inheriting\-ctors\fR است. .Sp نسخه 12، که نخستین بار در G++ 8 ظاهر شد، قراردادهای فراخوانی را برای کلاس‌های خالی روی معماری مقصد x86_64 و برای کلاس‌هایی که فقط سازنده‌های کپی/انتقال حذف‌شده دارند، اصلاح می‌کند. این نسخه به طور ناخواسته قرارداد فراخوانی را برای کلاس‌هایی با سازنده کپی حذف‌شده و سازنده انتقال بدیهی تغییر می‌دهد. .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 ظاهر شد، چینش کلاس‌هایی را که از کلاس‌های تجمیعی دارای مقداردهنده‌های اولیه عضو پیش‌فرض در C++14 به بالا ارث‌بری می‌کنند، تصحیح می‌کند. .Sp نسخه 18، که نخستین بار در G++ 13 ظاهر شد، نام‌گردانی‌های لامبداهایی را که زمینه اضافی دارند تصحیح می‌کند. .Sp نسخه 19، که نخستین بار در G++ 14 ظاهر شد، نام‌گردانی‌های مقیدسازی‌های ساختاریافته را جهت دربرگرفتن برچسب‌های ABI و مدیریت اعضای دارای توصیف‌کننده cv از [[no_unique_address]] تصحیح کرده و نام‌گردانی قیدهای C++20 را روی الگوهای توابع اضافه می‌کند. .Sp نسخه 20، که نخستین بار در G++ 15 ظاهر شد، نام‌گردانی‌های لامبداها را در مقداردهنده‌های اولیه اعضای داده‌ای ایستا تصحیح می‌کند. .Sp نسخه 21، که نخستین بار در G++ 16 ظاهر شد، تسخیرهای غیرضروری در لامبداهای noexcept ‏(c++/119764)، چینش کلاس پایه‌ای با تمامی سازنده‌های صراحتاً پیش‌فرض‌شده (c++/120012)، و نام‌گردانی اشیاء کلاس و آرایه با زیر‌اشیای غیرانتهایی دارای مقداردهی اولیه ضمنی صفر (c++/121231) را تصحیح می‌کند. .Sp همچنین ببینید: \fB\-Wabi\fR. .IP \fB\-fabi\-compat\-version=\fR\fIn\fR 4 .IX Item "-fabi-compat-version=n" در مقصدهایی که از نام‌های مستعار قوی (strong aliases) پشتیبانی می‌کنند، G++ با ایجاد یک نام مستعار با نام نام‌گردانی‌شده صحیح هنگام تعریف نمادی با نام نام‌گردانی‌شده نادرست، تغییرات نام‌گردانی را دور می‌زند. این سوییچ مشخص می‌کند که از کدام نسخه ABI برای این نام مستعار استفاده شود. .Sp با \fB\-fabi\-version=0\fR (پیش‌فرض)، این مقدار به طور پیش‌فرض 13 (سازگاری با GCC 8.2) است. اگر نسخه دیگری از ABI به صورت صریح انتخاب شود، این مقدار به طور پیش‌فرض 0 خواهد بود. برای سازگاری با نسخه‌های 3.2 تا 4.9 کامپایلر GCC، از \fB\-fabi\-compat\-version=2\fR استفاده کنید. .Sp اگر این گزینه مشخص نشود ولی \fB\-Wabi=\fR\fIn\fR مشخص گردد، از آن نسخه برای نام‌های مستعار سازگاری استفاده می‌شود. اگر این گزینه همراه با \fB\-Wabi\fR (بدون تعیین نسخه) مشخص شود، نسخه تعیین‌شده در این گزینه برای هشدار به کار می‌رود. .IP \fB\-fno\-access\-control\fR 4 .IX Item "-fno-access-control" تمام بررسی‌های کنترل دسترسی را غیرفعال می‌کند. این سوییچ عمدتاً برای دور زدن باگ‌ها در کد کنترل دسترسی کاربرد دارد. .IP \fB\-faligned\-new\fR 4 .IX Item "-faligned-new" .PD 0.IP \fB\-faligned\-new=\fR\fIalignment\fR 4 .IX Item "-faligned-new=alignment" .PD فعال‌سازی پشتیبانی از \f(CW\*(C`new\*(C'\fR در C++17 برای انواعی که به هم‌ترازی بیشتری نسبت به آنچه \f(CW\*(C`void* ::operator new(std::size_t)\*(C'\fR فراهم می‌کند نیاز دارند. یک آرگومان عددی مانند \f(CW\*(C`\-faligned\-new=32\*(C'\fR می‌تواند برای تعیین میزان هم‌ترازی (به بایت) ارائه‌شده توسط آن تابع استفاده شود، اما کاربران اندکی نیاز خواهند داشت مقدار پیش‌فرض \&\f(CWalignof(std::max_align_t)\fR را بازنویسی کنند. .Sp این پرچم به‌طور پیش‌فرض برای \fB\-std=c++17\fR فعال است. .IP \fB\-fno\-assume\-sane\-operators\-new\fR 4 .IX Item "-fno-assume-sane-operators-new" استاندارد C++ اجازه می‌دهد عملگرهای سراسری \f(CW\*(C`new\*(C'\fR، \f(CW\*(C`new[]\*(C'\fR، \&\f(CW\*(C`delete\*(C'\fR و \f(CW\*(C`delete[]\*(C'\fR جایگزین شوند، اگرچه بسیاری از برنامه‌های C++ آن‌ها را جایگزین نکرده و فقط از نسخه ارائه‌شده توسط پیاده‌سازی استفاده می‌کنند. علاوه‌بر این، استاندارد C++ اجازه می‌دهد این فراخوانی‌ها در صورتی که از عبارات new یا delete انجام شده باشند، حذف شوند (و به همین ترتیب، در صورت استفاده از توابع \f(CW\*(C`_\|_builtin_operator_new\*(C'\fR یا \f(CW\*(C`_\|_builtin_operator_delete\*(C'\fR نیز همین فرض در نظر گرفته می‌شود). این گزینه امکان کنترل روی برخی بهینه‌سازی‌ها پیرامون فراخوانی این عملگرها را فراهم می‌کند. با گزینه \f(CW\*(C`\-fassume\-sane\-operators\-new\-delete\*(C'\fR ممکن است GCC فرض کند که فراخوانی عملگرهای سراسری قابل‌جایگزینی از عبارات new یا delete یا از فراخوانی‌های \f(CW\*(C`_\|_builtin_operator_new\*(C'\fR یا \f(CW\*(C`_\|_builtin_operator_delete\*(C'\fR هیچ متغیر سراسری یا متغیرهایی را که آدرس آن‌ها می‌تواند به عملگرها سرایت کند (وضعیت سراسری یا global state؛ به‌جز \f(CW\*(C`errno\*(C'\fR برای عملگرهای \&\f(CW\*(C`new\*(C'\fR و \f(CW\*(C`new[]\*(C'\fR) نمی‌خوانند یا تغییر نمی‌دهند. این امر اکثر بهینه‌سازی‌ها را در طول این فراخوانی‌ها ممکن می‌سازد و چیزی است که عملگرهای ارائه‌شده توسط پیاده‌سازی آن را برآورده می‌کنند مگر اینکه جزئیات پیاده‌سازی \f(CW\*(C`malloc\*(C'\fR در کد قابل‌مشاهده باشد یا قلاب‌های (hooks) \f(CW\*(C`malloc\*(C'\fR استفاده شوند، اما اگر برنامه‌ای این عملگرها را جایگزین کند ممکن است برقرار نباشد. این رفتار به‌طور پیش‌فرض فعال است. با گزینه \f(CW\*(C`\-fno\-assume\-sane\-operators\-new\-delete\*(C'\fR، کامپایلر GCC باید فرض کند تمامی این فراخوانی‌ها (چه از عبارات new یا delete و چه فراخوانی مستقیم) ممکن است وضعیت سراسری را بخوانند و بنویسند مگر خلاف آن ثابت شود (مثلاً هنگامی که GCC پیاده‌سازی آن‌ها را کامپایل می‌کند). اگر آن عملگرها جایگزین شده‌اند یا ممکن است جایگزین شوند و کد باید انتظار چنین رفتاری را داشته باشد، از این گزینه استفاده کنید. .IP \fB\-fchar8_t\fR 4 .IX Item "-fchar8_t" .PD 0 .IP \fB\-fno\-char8_t\fR 4 .IX Item "-fno-char8_t" .PD فعال‌سازی پشتیبانی از \f(CW\*(C`char8_t\*(C'\fR همان‌طور که برای C++20 تصویب شده است. این شامل افزودن نوع پایه‌ای جدید \f(CW\*(C`char8_t\*(C'\fR، تغییراتی در انواع لیترال‌های نویسه و رشته‌ای UTF\-8، امضاهای جدید برای لیترال‌های تعریف‌شده توسط کاربر (user\-defined literals)، به‌روزرسانی‌های کتابخانه استاندارد مرتبط، و ماکروهای آزمون ویژگی جدید \&\f(CW\*(C`_\|_cpp_char8_t\*(C'\fR و \f(CW\*(C`_\|_cpp_lib_char8_t\*(C'\fR است. .Sp این گزینه امکان سربارگذاری (overload) توابع را برای رشته‌های معمولی و UTF\-8 فراهم می‌کند: .Sp .Vb 4 \& int f(const char *); // #1 \& int f(const char8_t *); // #2 \& int v1 = f("text"); // Calls #1 \& int v2 = f(u8"text"); // Calls #2 .Ve .Sp و امضاهای جدیدی را برای لیترال‌های تعریف‌شده توسط کاربر معرفی می‌کند: .Sp .Vb 6 \& int operator""_udl1(char8_t); \& int v3 = u8\*(Aqx\*(Aq_udl1; \& int operator""_udl2(const char8_t*, std::size_t); \& int v4 = u8"text"_udl2; \& template int operator""_udl3(); \& int v5 = u8"text"_udl3; .Ve .Sp تغییر انواع لیترال‌های رشته‌ای و نویسه‌ای UTF\-8 ناسازگاری‌هایی با ISO C++11 و استانداردهای پس از آن ایجاد می‌کند. به عنوان مثال، کد زیر بر اساس ISO C++11 خوش‌ساخت (well\-formed) است، اما هنگام مشخص کردن \&\fB\-fchar8_t\fR بدساخت (ill\-formed) محسوب می‌شود. .Sp .Vb 11 \& const char *cp = u8"xx";// error: invalid conversion from \& // \`const char8_t*\*(Aq to \`const char*\*(Aq \& int f(const char*); \& auto v = f(u8"xx"); // error: invalid conversion from \& // \`const char8_t*\*(Aq to \`const char*\*(Aq \& std::string s{u8"xx"}; // error: no matching function for call to \& // \`std::basic_string::basic_string()\*(Aq \& using namespace std::literals; \& s = u8"xx"s; // error: conversion from \& // \`basic_string\*(Aq to non\-scalar \& // type \`basic_string\*(Aq requested .Ve .IP \fB\-fcheck\-new\fR 4 .IX Item "-fcheck-new" بررسی اینکه اشاره‌گر بازگردانده شده توسط \f(CW\*(C`operator new\*(C'\fR قبل از تلاش برای تغییر حافظه اختصاص‌یافته، غیرتهی (non\-null) باشد. این بررسی معمولاً غیرضروری است زیرا استاندارد C++ مشخص می‌کند که \&\f(CW\*(C`operator new\*(C'\fR تنها در صورتی \f(CW0\fR را برمی‌گرداند که به‌صورت \&\f(CWthrow()\fR اعلان شده باشد، که در این حالت کامپایلر حتی بدون این گزینه نیز همیشه مقدار بازگشتی را بررسی می‌کند. در تمام موارد دیگر، زمانی که \&\f(CW\*(C`operator new\*(C'\fR دارای مشخصات استثنای غیرخالی باشد، اتمام حافظه با پرتاب \f(CW\*(C`std::bad_alloc\*(C'\fR اعلام می‌شود. همچنین ببینید: \&\fBnew (nothrow)\fR. .IP \fB\-fconcepts\fR 4 .IX Item "-fconcepts" فعال‌سازی پشتیبانی از ویژگی مفاهیم (Concepts) در C++ برای مقیدسازی آرگومان‌های الگو. با \fB\-std=c++20\fR و بالاتر، ویژگی Concepts بخشی از استاندارد زبان است، بنابراین \fB\-fconcepts\fR به‌طور پیش‌فرض فعال است. .Sp برخی از ساختارهایی که توسط مشخصات فنی پیشین «پسوندهای C++ برای مفاهیم» (ISO 19217 (2015)) مجاز بودند اما به استاندارد راه نیافتند، پیش‌تر می‌توانستند توسط \&\fB\-fconcepts\-ts\fR فعال شوند. گزینه \fB\-fconcepts\-ts\fR در GCC 14 منسوخ و در GCC 15 حذف شد؛ از کاربران انتظار می‌رود کدهای خود را به مفاهیم C++20 تبدیل کنند. .IP \fB\-fconcepts\-diagnostics\-depth=\fR\fIn\fR 4 .IX Item "-fconcepts-diagnostics-depth=n" تعیین حداکثر عمق بازپخش خطا در طول عیب‌یابی بازگشتیِ شکست در برآورده شدن قید. پیش‌فرض 1 است. .IP \fB\-fconstexpr\-depth=\fR\fIn\fR 4 .IX Item "-fconstexpr-depth=n" تنظیم حداکثر عمق ارزیابی تو در تو برای توابع constexpr در C++11 به \fIn\fR. تعیین یک محدودیت برای تشخیص بازگشت بی‌پایان در حین ارزیابی عبارات ثابت لازم است. حداقل مقدار مشخص‌شده توسط استاندارد 512 است. .IP \fB\-fconstexpr\-cache\-depth=\fR\fIn\fR 4 .IX Item "-fconstexpr-cache-depth=n" تنظیم حداکثر سطح عمق ارزیابی تو در تو برای توابع constexpr در C++11 که حافظه نهان (کَش) می‌شوند به \fIn\fR. این یک روش مکاشفه‌ای (heuristic) است که تعادلی میان سرعت کامپایل (زمانی که حافظه نهان از محاسبات تکراری جلوگیری می‌کند) در برابر مصرف حافظه (زمانی که حافظه نهان به دلیل ارزیابی‌های بسیار بازگشتی بسیار بزرگ می‌شود) برقرار می‌سازد. مقدار پیش‌فرض 8 است. احتمالاً کاربران بسیار کمی نیاز به تغییر آن خواهند داشت، اما اگر کد شما محاسبات سنگین constexpr انجام می‌دهد، ممکن است بخواهید برای یافتن مقداری که بهترین عملکرد را دارد آزمایش کنید. .IP \fB\-fconstexpr\-fp\-except\fR 4 .IX Item "-fconstexpr-fp-except" پیوست F از استاندارد C مشخص می‌کند که استثناهای ممیز شناور IEC559 رخ‌داده در زمان کامپایل نباید مانع از کامپایل شوند. کامپایلرهای C++ از گذشته این راهنما را دنبال نکرده‌اند و در عوض با تقسیم ممیز شناور بر صفر با وجود داشتن مقداری کاملاً مشخص، به عنوان مقداری غیرثابت برخورد کرده‌اند. این پرچم به کامپایلر می‌گوید که به پیوست F نسبت به سایر قوانینی که بیان می‌کنند یک عملیات خاص تعریف‌نشده است، اولویت دهد. .Sp .Vb 1 \& constexpr float inf = 1./0.; // OK with \-fconstexpr\-fp\-except .Ve .IP \fB\-fconstexpr\-loop\-limit=\fR\fIn\fR 4 .IX Item "-fconstexpr-loop-limit=n" تنظیم حداکثر تعداد تکرارهای یک حلقه در توابع constexpr در C++14 به \fIn\fR. وجود یک محدودیت برای تشخیص حلقه‌های بی‌پایان در حین ارزیابی عبارت ثابت الزامی است. پیش‌فرض 262144 (1<<18) است. .IP \fB\-fconstexpr\-ops\-limit=\fR\fIn\fR 4 .IX Item "-fconstexpr-ops-limit=n" تنظیم حداکثر تعداد عملیات‌ها در طول یک ارزیابی constexpr منفرد. حتی زمانی که تعداد تکرارهای یک حلقه منفرد با حد بالا محدود شده باشد، چنانچه چندین حلقه تو در تو وجود داشته باشد و هر یک دارای تکرارهای فراوان ولی کمتر از حد مذکور باشند، یا اگر در بدنه یک حلقه یا حتی خارج از حلقه عبارات بسیار زیادی نیاز به ارزیابی داشته باشند، ارزیابی constexpr حاصل ممکن است بسیار طولانی شود. پیش‌فرض 33554432 (1<<25) است. .IP \fB\-fcontracts\fR 4 .IX Item "-fcontracts" فعال‌سازی پشتیبانی از ویژگی قراردادها (Contracts) در C++، همان‌طور که در پیش‌نویس کاری C++26 (سند N5003) مشخص شده است. .Sp در صورت نقض یک قرارداد اعمال‌شده (enforced) یا مشاهده‌شده (observed) (به \fB\-fcontract\-evaluation\-semantic\fR در زیر مراجعه کنید)، یک گرداننده نقض (violation handler) فراخوانی می‌شود؛ کتابخانه استاندارد یک گرداننده پیش‌فرض ارائه می‌دهد که اطلاعات مربوط به قراردادی که ناموفق بوده است را منتشر می‌کند. .Sp کاربران می‌توانند با تعریف تابع زیر، گرداننده نقض پیش‌فرض را جایگزین کنند: .Sp .Vb 2 \& void \& handle_contract_violation (const std::contracts::contract_violation&); .Ve .IP \fB\-fcontract\-evaluation\-semantic=\fR\fIsemantic\fR 4 .IX Item "-fcontract-evaluation-semantic=semantic" تنظیم معنایی (semantic) که قراردادها با آن ارزیابی می‌شوند به \fIsemantic\fR. .Sp مقادیر موجود برای حالت ارزیابی عبارتند از: .Sp \&\*(Aq\f(CW\*(C`ignored\*(C'\fR\*(Aq بررسی‌های قرارداد نادیده گرفته می‌شوند، و هیچ بررسی‌ای در زمان کامپایل یا زمان اجرا اضافه نخواهد شد. .Sp \&\*(Aq\f(CW\*(C`observed\*(C'\fR\*(Aq بررسی‌های قرارداد (در زمان اجرا) انجام می‌شوند و در صورت شکست، یک گرداننده فراخوانی می‌شود که امکان اقداماتی مانند ثبت وقایع (logging) یا صدور هشدارهای زمان اجرا را فراهم می‌کند. هنگامی که گرداننده بازمی‌گردد، اجرای کد ادامه خواهد یافت. در زمان کامپایل، بررسی‌ها برای ارزیابی‌های \f(CW\*(C`constexpr\*(C'\fR انجام می‌شوند، که در این حالت در صورت شکست بررسی، یک پیام تشخیصی صادر می‌شود. .Sp \&\*(Aq\f(CW\*(C`enforce\*(C'\fR\*(Aq بررسی‌های قرارداد انجام می‌شوند و در صورت شکست، گرداننده فراخوانی می‌شود. با بازگشت گرداننده، اجرای کد خاتمه می‌یابد و از ادامه اجرای آن پس از مورد ناموفق جلوگیری می‌شود. در زمان کامپایل، بررسی‌ها بر روی \f(CW\*(C`constexpr\*(C'\fR اعمال می‌شوند و در صورت شکست، برنامه بدساخت (ill\-formed) تلقی شده و یک خطا صادر خواهد شد. .Sp \&\*(Aq\f(CW\*(C`quick_enforce\*(C'\fR\*(Aq بررسی‌های قرارداد (در زمان اجرا) انجام می‌شوند و در صورت شکست، اجرا بلافاصله (بدون فراخوانی هیچ گرداننده‌ای) خاتمه می‌یابد. در زمان کامپایل، هیچ تفاوتی در رفتار بین این گزینه و حالت \f(CW\*(C`enforce\*(C'\fR وجود ندارد، زیرا در زمان کامپایل هیچ گرداننده‌ای فراخوانی نمی‌شود..IP \fB\-fcontracts\-conservative\-ipa\fR 4 .IX Item "-fcontracts-conservative-ipa" این گزینه مانع از اقدام تحلیل میان‌رویه‌ای (inter\-procedural analysis) در زمانی می‌شود که بدنه یک تابع درون‌خطی (inline) در یک TU مشخص قابل مشاهده است. این امر شرایطی را پوشش می‌دهد که در آن ارزیابی شرایط قرارداد (contract) مجاز به تفاوت بین TUها باشد؛ بدین معنا که چنین اقداماتی بالقوه نادرست خواهند بود. .IP \fB\-fcontract\-checks\-outlined\fR 4 .IX Item "-fcontract-checks-outlined" به‌طور پیش‌فرض، بررسی‌های قرارداد برای شرایط \f(CW\*(C`pre\*(C'\fR و \f(CW\*(C`post\*(C'\fR به‌صورت درون‌خطی در بدنه توابع بسط می‌یابند. این گزینه باعث می‌شود در عوض یک تابع کوچک (حاوی بررسی‌ها) ایجاد شود که در موقعیت مربوطه فراخوانی می‌گردد. این کار اجازه می‌دهد معیارهای متفاوتی برای کامپایل بخش بررسی و باقی‌مانده بدنه تابع اعمال شود. .IP \fB\-fcontract\-disable\-optimized\-checks\fR 4 .IX Item "-fcontract-disable-optimized-checks" هنگامی که بررسی‌های شرایط \f(CW\*(C`pre\*(C'\fR و \f(CW\*(C`post\*(C'\fR برون‌خط (outlined) می‌شوند (با استفاده از \&\fB\-fcontract\-checks\-outlined\fR)، این گزینه مراحل بهینه‌سازی را برای آن توابع غیرفعال می‌کند که می‌تواند از حذف (elision) ناخواسته مراحل بررسی جلوگیری کند. .IP \fB\-fcontracts\-client\-check=\fR\fImode\fR 4 .IX Item "-fcontracts-client-check=mode" این گزینه درج بررسی‌ها را در محل‌های فراخوانی (بررسی سمت فراخواننده / caller\-side) فعال می‌کند. .Sp مقدار \fImode\fR مشخص می‌کند که کدام بررسی‌های قرارداد انجام شوند: \&\*(Aq\f(CW\*(C`none\*(C'\fR\*(Aq بدون بررسی در سمت فراخواننده/کلاینت (پیش‌فرض) .Sp \&\*(Aq\f(CW\*(C`pre\*(C'\fR\*(Aq پیش‌شرط‌ها در سمت فراخواننده/کلاینت بررسی می‌شوند. .Sp \&\*(Aq\f(CW\*(C`all\*(C'\fR\*(Aq هم پیش‌شرط‌ها و هم پس‌شرط‌ها در سمت فراخواننده/کلاینت بررسی می‌شوند. .IP \fB\-fcontracts\-definition\-check=\fR\fImode\fR 4 .IX Item "-fcontracts-definition-check=mode" این گزینه امکان غیرفعال کردن بررسی‌های سمت فراخوانده/تعریف (callee/definition\-side) را فراهم می‌کند، که در صورت فعال بودن ویژگی قراردادها، در حالت عادی به‌طور پیش‌فرض فعال هستند. .Sp متغیر \fImode\fR دارای مقادیر \*(Aq\f(CW\*(C`on\*(C'\fR\*(Aq و \*(Aq\f(CW\*(C`off\*(C'\fR\*(Aq است. .IP \fB\-fcoroutines\fR 4 .IX Item "-fcoroutines" پشتیبانی از افزونه کوروتین‌های C++ را فعال می‌کند. با \fB\-std=c++20\fR و بالاتر، کوروتین‌ها بخشی از استاندارد زبان هستند، بنابراین \&\fB\-fcoroutines\fR به‌طور پیش‌فرض فعال است. .IP \fB\-fdiagnostics\-all\-candidates\fR 4 .IX Item "-fdiagnostics-all-candidates" به فرانت‌اند C++ اجازه می‌دهد هنگام شکست در تفکیک سربارگذاری (overload resolution)، همه نامزدها را گزارش کند، از جمله زمانی که یک تابع حذف‌شده (deleted function) انتخاب شده باشد. .IP \fB\-fdump\-lang\-\fR 4 .IX Item "-fdump-lang-" .PD 0 .IP \fB\-fdump\-lang\-\fR\fIswitch\fR 4 .IX Item "-fdump-lang-switch" .IP \fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR 4 .IX Item "-fdump-lang-switch-options" .IP \fB\-fdump\-lang\-\fR\fIswitch\fR\fB\-\fR\fIoptions\fR\fB=\fR\fIfilename\fR 4 .IX Item "-fdump-lang-switch-options=filename" .PD تخلیه (dump) اطلاعات مختص به C++ را کنترل می‌کند. بخش‌های \fIoptions\fR و \fIfilename\fR همان‌طور که در گزینهٔ \&\fB\-fdump\-tree\fR شرح داده شده است رفتار می‌کنند. مقادیر \fIswitch\fR زیر پذیرفته می‌شوند: .RS 4 .IP \fBall\fR 4 .IX Item "all" تمام موارد زیر را فعال می‌کند. .IP \fBclass\fR 4 .IX Item "class" اطلاعات سلسله‌مراتب کلاس را تخلیه می‌کند. اطلاعات جدول مجازی (virtual table) صادر می‌شود مگر اینکه \*(Aq\fBslim\fR\*(Aq مشخص شده باشد. .IP \fBmodule\fR 4 .IX Item "module" اطلاعات ماژول را تخلیه می‌کند. گزینه‌های \fBlineno\fR (مکان‌ها)، \&\fBgraph\fR (دسترس‌پذیری)، \fBblocks\fR (خوشه‌ها)، \&\fBuid\fR (سریال‌سازی)، \fBalias\fR (قابل ادغام)، \&\fBasmname\fR (مربوط به Elrond)، \fBeh\fR (نگاشت‌کننده) و \fBvops\fR (ماکروها) ممکن است اطلاعات تکمیلی ارائه دهند. .IP \fBraw\fR 4 .IX Item "raw" داده‌های خام درخت (tree) داخلی را تخلیه می‌کند. .IP \fBtinst\fR 4 .IX Item "tinst" دنباله نمونه‌سازی‌های قالب (template instantiations) را به‌صورت تورفته برای نمایش عمق بازگشت تخلیه می‌کند. گزینه \fBlineno\fR مکان منبعی را که نمونه‌سازی در آن رخ داده اضافه می‌کند، و گزینه \&\fBdetails\fR همچنین جایگزینی‌های پیش از نمونه‌سازی، مانند موارد انجام‌شده در حین استنتاج آرگومان قالب را تخلیه می‌کند. .Sp خطوط در خروجی تخلیه tinst. با \fBI\fR برای یک نمونه‌سازی، \&\fBS\fR برای یک جایگزینی دیگر، و \fBR[IS]\fR برای بافت بازگشایی‌شدهٔ یک نمونه‌سازی به‌تعویق‌افتاده شروع می‌شوند. .RE .RS 4 .RE .IP \fB\-fno\-elide\-constructors\fR 4 .IX Item "-fno-elide-constructors" استاندارد C++ به یک پیاده‌سازی اجازه می‌دهد از ایجاد شیء موقتی که تنها برای مقداردهی اولیه شیء دیگری از همان نوع استفاده می‌شود، صرف‌نظر کند. تعیین این گزینه آن بهینه‌سازی را غیرفعال کرده و G++ را مجبور می‌کند سازنده کپی (copy constructor) را در تمام موارد فراخوانی کند. این گزینه همچنین باعث می‌شود G++ توابع عضو بدیهی (trivial member functions) را که در غیر این صورت به‌صورت درون‌خطی بسط می‌یافتند، فراخوانی کند. .Sp در C++17، کامپایلر ملزم به صرف‌نظر کردن از این اشیاء موقت است، اما این گزینه همچنان بر توابع عضو بدیهی تأثیر می‌گذارد. .IP \fB\-fno\-enforce\-eh\-specs\fR 4 .IX Item "-fno-enforce-eh-specs" کدی برای بررسی نقض مشخصات استثنا (exception specifications) در زمان اجرا تولید نمی‌کند. این گزینه استاندارد C++ را نقض می‌کند، اما ممکن است برای کاهش اندازه کد در ساخت‌های نهایی مفید باشد، بسیار شبیه به تعریف کردن \&\f(CW\*(C`NDEBUG\*(C'\fR. این امر به کد کاربر اجازه پرتاب استثنا در نقض مشخصات استثنا را نمی‌دهد؛ کامپایلر همچنان بر اساس مشخصات بهینه‌سازی می‌کند، بنابراین پرتاب یک استثنای غیرمنتظره منجر به رفتار تعریف‌نشده (undefined behavior) در زمان اجرا می‌شود. .IP \fB\-fextern\-tls\-init\fR 4 .IX Item "-fextern-tls-init" .PD 0 .IP \fB\-fno\-extern\-tls\-init\fR 4 .IX Item "-fno-extern-tls-init" .PD استانداردهای C++11 و OpenMP به متغیرهای \f(CW\*(C`thread_local\*(C'\fR و \&\f(CW\*(C`threadprivate\*(C'\fR اجازه مقداردهی اولیه پویا (زمان اجرا) را می‌دهند. برای پشتیبانی از این ویژگی، هرگونه استفاده از چنین متغیری از طریق یک تابع پوششی (wrapper function) انجام می‌شود که هرگونه مقداردهی اولیه لازم را اجرا می‌کند. هنگامی که استفاده و تعریف متغیر در یک واحد ترجمه (translation unit) یکسان باشد، این بار اضافه (overhead) می‌تواند با بهینه‌سازی حذف شود، اما زمانی که استفاده در یک واحد ترجمه دیگر باشد، بار اضافه قابل توجهی وجود دارد حتی اگر متغیر واقعاً نیازی به مقداردهی اولیه پویا نداشته باشد. اگر برنامه‌نویس بتواند مطمئن باشد که هیچ استفاده‌ای از متغیر در یک TU غیرتعریف‌کننده نیازی به راه‌اندازی مقداردهی اولیه پویا ندارد (خواه به این دلیل که متغیر به‌صورت ایستا مقداردهی شده است، یا اینکه استفاده از متغیر در TU تعریف‌کننده پیش از هر استفاده‌ای در TU دیگر اجرا خواهد شد)، می‌تواند با استفاده از گزینهٔ \&\fB\-fno\-extern\-tls\-init\fR از این بار اضافه جلوگیری کند. .Sp در مقصدهایی که از نام‌های مستعار نماد (symbol aliases) پشتیبانی می‌کنند، پیش‌فرض \&\fB\-fextern\-tls\-init\fR است. در مقصدهایی که از نام‌های مستعار نماد پشتیبانی نمی‌کنند، پیش‌فرض \fB\-fno\-extern\-tls\-init\fR است. .IP \fB\-ffold\-simple\-inlines\fR 4 .IX Item "-ffold-simple-inlines" .PD 0 .IP \fB\-fno\-fold\-simple\-inlines\fR 4 .IX Item "-fno-fold-simple-inlines" .PD به فرانت‌اند C++ اجازه می‌دهد فراخوانی‌های \f(CW\*(C`std::move\*(C'\fR، \f(CW\*(C`std::forward\*(C'\fR، \&\f(CW\*(C`std::addressof\*(C'\fR، \f(CW\*(C`std::to_underlying\*(C'\fR و \f(CW\*(C`std::as_const\*(C'\fR را ساده‌سازی (fold) کند. برخلاف درون‌خطی‌سازی (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 یا بالاتر استفاده شود. این امر می‌تواند منجر به تغییر مقداردهی اولیه از پویا (dynamic) به ایستا (static) و سایر بهینه‌سازی‌ها گردد. .IP \fB\-fno\-implicit\-templates\fR 4 .IX Item "-fno-implicit-templates" هرگز کدی برای الگوهای (templates) غیر inline که به‌طور ضمنی (یعنی بر اثر استفاده) نمونه‌سازی شده‌اند تولید نمی‌کند؛ تنها کدهایی را برای نمونه‌سازی‌های صریح تولید می‌کند. اگر از این گزینه استفاده می‌کنید، باید مراقب باشید که کد خود را به‌گونه‌ای ساختاربندی کنید که شامل تمام نمونه‌سازی‌های صریح لازم باشد تا در زمان پیوند با خطای نمادهای تعریف‌نشده مواجه نشوید. .IP \fB\-fno\-implicit\-inline\-templates\fR 4 .IX Item "-fno-implicit-inline-templates" برای نمونه‌سازی‌های ضمنی الگوهای inline نیز هیچ کدی تولید نمی‌کند. رفتار پیش‌فرض این است که با توابع inline به‌گونه متفاوتی رفتار شود تا کامپایل‌ها با بهینه‌سازی و بدون آن، به مجموعه یکسانی از نمونه‌سازی‌های صریح نیاز داشته باشند. .IP \fB\-fno\-implement\-inlines\fR 4 .IX Item "-fno-implement-inlines" برای صرفه‌جویی در فضا، نسخه‌های برون‌خط (out\-of\-line) توابع inline کنترل‌شده توسط \f(CW\*(C`#pragma implementation\*(C'\fR را تولید نمی‌کند. اگر این توابع در تمام جاهایی که فراخوانی شده‌اند درون‌خط نشوند، این کار باعث خطاهای پیونددهنده خواهد شد. .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" توابع عضوی که درون تعریف کلاس خود تعریف شده‌اند، برای کدهای ماژولار به‌طور ضمنی inline نیستند. این تفاوت با رفتار سنتی C++، به دلایل موجهی است. با این حال، ممکن است در طول انتقال کد (code porting) مشکلاتی ایجاد کند. این گزینه چنین تعاریف تابعی را به‌طور ضمنی inline می‌کند. البته این کار ناسازگاری ABI ایجاد می‌کند، بنابراین باید از آن در همه‌جا یا هیچ‌کجا استفاده کنید. (چنین تعاریفی در خارج از یک ماژول نام‌گذاری‌شده، در هر حال به‌طور ضمنی inline باقی می‌مانند.) .IP \fB\-fno\-module\-lazy\fR 4 .IX Item "-fno-module-lazy" وارد کردن تنبل ماژول (lazy module importing) و ایجاد نگاشت‌گر ماژول (module mapper) را غیرفعال می‌کند. .IP \fB\-fmodule\-mapper=\fR[\fIhostname\fR]\fB:\fR\fIport\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=[hostname]:port[?ident]" .PD 0 .IP "\fB\-fmodule\-mapper=|\fR\fIprogram\fR[\fB?\fR\fIident\fR]\fB \fR\fIargs...\fR" 4 .IX Item "-fmodule-mapper=|program[?ident] args..." .IP \fB\-fmodule\-mapper==\fR\fIsocket\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper==socket[?ident]" .IP \fB\-fmodule\-mapper=<>\fR[\fIinout\fR][\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=<>[inout][?ident]" .IP \fB\-fmodule\-mapper=<\fR\fIin\fR\fB>\fR\fIout\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=out[?ident]" .IP \fB\-fmodule\-mapper=\fR\fIfile\fR[\fB?\fR\fIident\fR] 4 .IX Item "-fmodule-mapper=file[?ident]" .PD یک مرجع استعلام برای نگاشت نام ماژول به نام فایل. در صورت عدم تعیین، متغیر محیطی \fBCXX_MODULE_MAPPER\fR استفاده می‌شود، و اگر آن هم تنظیم نشده باشد، یک پیش‌فرض درون‌پردازشی ارائه می‌گردد. .IP \fB\-fmodule\-only\fR 4 .IX Item "-fmodule-only" تنها رابط ماژول کامپایل‌شده (Compiled Module Interface) را تولید می‌کند و از ایجاد هرگونه فایل شیء جلوگیری می‌نماید. .IP \fB\-fms\-extensions\fR 4 .IX Item "-fms-extensions" هشدارهای Wpedantic را درباره سازه‌های مورد استفاده در MFC، مانند int ضمنی و دریافت اشاره‌گر به تابع عضو از طریق نحو غیر استاندارد، غیرفعال می‌کند. .IP \fB\-fnew\-inheriting\-ctors\fR 4 .IX Item "-fnew-inheriting-ctors" تعدیل P0136 در معناشناسی وراثت سازنده‌های C++11 را فعال می‌کند. این بخشی از C++17 است اما همچنین یک گزارش نقص (Defect Report) برای C++11 و C++14 در نظر گرفته می‌شود. این پرچم به‌طور پیش‌فرض فعال است مگر اینکه \fB\-fabi\-version=10\fR یا پایین‌تر مشخص شده باشد. .IP \fB\-fnew\-ttp\-matching\fR 4 .IX Item "-fnew-ttp-matching" مصوبه P0522 برای مسئله ۱۵۰ هسته زبان (Core issue 150)، یعنی پارامترهای قالب-قالب (template template parameters) و آرگومان‌های پیش‌فرض را فعال می‌کند: این گزینه اجازه می‌دهد یک قالب با آرگومان‌های پیش‌فرض، به عنوان آرگومان برای یک پارامتر قالب-قالب با پارامترهای کمتر استفاده شود. این پرچم به‌طور پیش‌فرض برای \&\fB\-std=c++17\fR فعال است. .IP \fB\-fno\-nonansi\-builtins\fR 4 .IX Item "-fno-nonansi-builtins" اعلان‌های توکار (built\-in) توابعی را که توسط ANSI/ISO C الزامی نشده‌اند، غیرفعال می‌کند. این توابع شامل \f(CW\*(C`ffs\*(C'\fR، \f(CW\*(C`alloca\*(C'\fR، \f(CW\*(C`_exit\*(C'\fR، \&\f(CW\*(C`index\*(C'\fR، \f(CW\*(C`bzero\*(C'\fR، \f(CW\*(C`conjf\*(C'\fR و سایر توابع مرتبط هستند. .IP \fB\-fnothrow\-opt\fR 4 .IX Item "-fnothrow-opt" با مشخصه استثنای \f(CWthrow()\fR طوری رفتار می‌کند که گویی یک مشخصه \&\f(CW\*(C`noexcept\*(C'\fR است تا سربار اندازه کد اجرایی (text size) را در مقایسه با تابعی بدون مشخصه استثنا کاهش دهد یا حذف کند. اگر تابع دارای متغیرهای محلی از نوع‌هایی با مخرب‌های (destructors) غیربدیهی باشد، مشخصه استثنا در عمل تابع را کوچک‌تر می‌کند زیرا پاک‌سازی‌های مدیریت استثنا (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\-freflection\fR 4 .IX Item "-freflection" ویژگی آزمایشی بازتاب (Reflection) در C++26 را فعال می‌کند. .IP \fB\-fno\-rtti\fR 4 .IX Item "-fno-rtti" تولید اطلاعات مربوط به هر کلاس دارای توابع مجازی را برای استفاده توسط ویژگی‌های شناسایی نوع در زمان اجرا (RTTI) در C++ (\f(CW\*(C`dynamic_cast\*(C'\fR و \f(CW\*(C`typeid\*(C'\fR) غیرفعال می‌کند. اگر از این بخش‌های زبان استفاده نمی‌کنید، می‌توانید با استفاده از این پرچم در فضا صرفه‌جویی کنید. توجه داشته باشید که مدیریت استثناها از همین اطلاعات استفاده می‌کند، اما G++ آن را در صورت نیاز تولید می‌نماید. عملگر \f(CW\*(C`dynamic_cast\*(C'\fR همچنان می‌تواند برای تبدیل‌هایی که نیازی به اطلاعات نوع در زمان اجرا ندارند، یعنی تبدیل به \f(CW\*(C`void *\*(C'\fR یا به کلاس‌های پایه بدون ابهام، استفاده شود. .Sp ترکیب کدهای کامپایل‌شده با \fB\-frtti\fR با کدهای کامپایل‌شده با \&\fB\-fno\-rtti\fR ممکن است کار نکند. برای مثال، اگر کلاسی که با \fB\-fno\-rtti\fR کامپایل شده به عنوان پایه برای کلاسی که با \fB\-frtti\fR کامپایل شده استفاده شود، ممکن است پیوند برنامه‌ها با شکست مواجه گردد. .IP \fB\-fsized\-deallocation\fR 4 .IX Item "-fsized-deallocation" اعلان‌های عمومی توکار را .Sp .Vb 2 \& void operator delete (void *, std::size_t) noexcept; \& void operator delete[] (void *, std::size_t) noexcept; .Ve .Sp همان‌طور که در C++14 معرفی شدند، فعال می‌کند. این قابلیت برای توابع آزادسازی حافظه (deallocation) جایگزین تعریف‌شده توسط کاربر که مثلاً از اندازه شیء برای تسریع آزادسازی استفاده می‌کنند، مفید است. این گزینه به‌طور پیش‌فرض تحت \&\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 به ۱۰۲۴ تغییر یافت) متکی باشند. مقدار پیش‌فرض ۹۰۰ است، زیرا در برخی شرایط ممکن است حافظهٔ پشتهٔ کامپایلر پیش از رسیدن به ۱۰۲۴ به پایان برسد. .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" مخرب‌ها را برای اشیائی با طول عمر ذخیره‌سازی ایستا (static storage duration)، به جای تابع \f(CW\*(C`atexit\*(C'\fR با تابع \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR ثبت کن. این گزینه برای مدیریت کاملاً منطبق بر استاندارد مخرب‌های ایستا الزامی است، اما تنها در صورتی کار می‌کند که کتابخانهٔ C شما از \&\f(CW\*(C`_\|_cxa_atexit\*(C'\fR پشتیبانی کند. .IP \fB\-fno\-use\-cxa\-get\-exception\-ptr\fR 4 .IX Item "-fno-use-cxa-get-exception-ptr" از روتین زمان اجرای \f(CW\*(C`_\|_cxa_get_exception_ptr\*(C'\fR استفاده نکن. این کار باعث نادرست عمل کردن \f(CW\*(C`std::uncaught_exception\*(C'\fR می‌شود، اما در صورتی که این روتین زمان اجرا در دسترس نباشد، ضروری است. .IP \fB\-fvisibility\-inlines\-hidden\fR 4 .IX Item "-fvisibility-inlines-hidden" این سوییچ مشخص می‌کند که کاربر تلاشی برای مقایسهٔ اشاره‌گرها به توابع درون‌خطی (inline) یا متدها در شرایطی که نشانی‌های دو تابع در اشیاء مشترک (shared objects) متفاوتی گرفته شده‌اند، انجام نمی‌دهد. .Sp اثر این گزینه این است که GCC می‌تواند در عمل متدهای درون‌خطی را با \&\f(CW\*(C`_\|_attribute_\|_ ((visibility ("hidden")))\*(C'\fR علامت‌گذاری کند تا در جدول صدور یک DSO ظاهر نشوند و هنگام استفاده در داخل DSO نیازی به ارجاع غیرمستقیم PLT نداشته باشند. فعال کردن این گزینه می‌تواند تأثیر چشمگیری بر زمان بارگذاری و پیوند یک DSO بگذارد، زیرا حجم جدول صدور پویا را در حالتی که کتابخانه استفادهٔ گسترده‌ای از قالب‌ها دارد به شدت کاهش می‌دهد. .Sp رفتار این سوییچ دقیقاً مشابه علامت‌گذاری مستقیم متدها به عنوان hidden نیست، زیرا بر متغیرهای ایستای محلی تابع تأثیری نمی‌گذارد و باعث نمی‌شود که کامپایلر استنباط کند تابع تنها در یک شیء مشترک تعریف شده است. .Sp می‌توانید یک متد را به صورت صریح با یک وضعیت دیداری مشخص علامت‌گذاری کنید تا اثر این سوییچ برای آن متد خنثی شود. به عنوان مثال، اگر قصد مقایسهٔ اشاره‌گرها به یک متد درون‌خطی خاص را دارید، می‌توانید آن را با دیداری پیش‌فرض (default) علامت‌گذاری کنید. مشخص کردن دیداری صریح برای کلاس دربرگیرنده هیچ اثری ندارد. .Sp متدهای درون‌خطی با نمونه‌سازی صریح (explicitly instantiated) تحت تأثیر این گزینه قرار نمی‌گیرند، چرا که پیونددهی آن‌ها در غیر این صورت ممکن است از مرز کتابخانهٔ مشترک عبور کند. .IP \fB\-fvisibility\-ms\-compat\fR 4 .IX Item "-fvisibility-ms-compat" این پرچم تلاش می‌کند با استفاده از تنظیمات دیداری (visibility)، مدل پیونددهی C++ در GCC را با Microsoft Visual Studio سازگار سازد. .Sp این پرچم تغییرات زیر را در مدل پیونددهی GCC اعمال می‌کند: .RS 4 .IP 1. 4 .IX Item "1." دیداری پیش‌فرض را مانند \&\fB\-fvisibility=hidden\fR روی \f(CW\*(C`hidden\*(C'\fR تنظیم می‌کند. .IP 2. 4 .IX Item "2." نوع‌ها (types)، به استثنای اعضای آن‌ها، به طور پیش‌فرض پنهان نمی‌شوند. .IP 3. 4 .IX Item "3." قاعدهٔ تعریف واحد (One Definition Rule یا ODR) برای نوع‌های فاقد مشخصات دیداری صریح که در بیش از یک شیء مشترک تعریف شده‌اند تسهیل می‌شود: این اعلان‌ها در صورتی مجاز هستند که در زمان عدم استفاده از این گزینه نیز مجاز باشند. .RE .RS 4 .Sp در کدهای جدید بهتر است از \fB\-fvisibility=hidden\fR استفاده شود و کلاس‌هایی که قرار است از خارج قابل مشاهده باشند، صادر (export) شوند. متأسفانه این احتمال وجود دارد که کدها، شاید به طور تصادفی، به رفتار Visual Studio وابسته باشند. .Sp از جمله پیامدهای این تغییرات این است که اعضای داده‌ای ایستای یک نوع یکسان با نام یکسان اما تعریف‌شده در اشیاء مشترک متفاوت، از یکدیگر متمایز خواهند بود؛ بنابراین تغییر یکی باعث تغییر دیگری نمی‌شود؛ همچنین ممکن است مقایسهٔ برابری برای اشاره‌گرها به توابع عضوِ تعریف‌شده در اشیاء مشترک متفاوت، برابر ارزیابی نشود. هنگامی که این پرچم داده می‌شود، تعریف متفاوت نوع‌های هم‌نام نقض ODR محسوب می‌شود. .RE .IP \fB\-fno\-weak\fR 4 .IX Item "-fno-weak" حتی در صورت پشتیبانی توسط پیونددهنده (linker)، از نمادهای ضعیف (weak symbols) استفاده نکن. به طور پیش‌فرض، G++ در صورت در دسترس بودن از نمادهای ضعیف استفاده می‌کند. این گزینه صرفاً برای آزمایش وجود دارد و نباید توسط کاربران نهایی استفاده شود؛ این کار منجر به تولید کدی ضعیف‌تر شده و هیچ مزیتی ندارد. این گزینه ممکن است در نسخه‌های بعدی G++ حذف شود. .IP "\fB\-fext\-numeric\-literals\fR (C++ and Objective\-C++ only)" 4 .IX Item "-fext-numeric-literals (C++ and Objective-C++ only)" پسوندهای لفظی عددی موهومی، ممیز ثابت یا تعریف‌شده توسط ماشین را به عنوان افزونه‌های GNU می‌پذیرد. هنگامی که این گزینه غیرفعال باشد، با این پسوندها به عنوان پسوندهای لفظی عددی تعریف‌شده توسط کاربر در C++11 برخورد می‌شود. این گزینه به طور پیش‌فرض برای تمام گویش‌های پیش از C++11 و تمام گویش‌های GNU فعال است: \&\fB\-std=c++98\fR، \fB\-std=gnu++98\fR، \fB\-std=gnu++11\fR، \&\fB\-std=gnu++14\fR. این گزینه به طور پیش‌فرض برای ISO C++11 به بعد (\fB\-std=c++11\fR، ...) غیرفعال است. .IP \fB\-nostdinc++\fR 4 .IX Item "-nostdinc++" در دایرکتوری‌های استاندارد ویژهٔ C++ به دنبال فایل‌های سرآیند نگرد، اما سایر دایرکتوری‌های استاندارد را همچنان جستجو کن. (این گزینه هنگام ساخت کتابخانهٔ C++ استفاده می‌شود.) .IP \fB\-flang\-info\-include\-translate\fR 4 .IX Item "-flang-info-include-translate" .PD 0 .IP \fB\-flang\-info\-include\-translate\-not\fR 4 .IX Item "-flang-info-include-translate-not" .IP \fB\-flang\-info\-include\-translate=\fR\fIheader\fR 4 .IX Item "-flang-info-include-translate=header" .PD دربارهٔ رویدادهای ترجمهٔ include اطلاع‌رسانی کن. شکل اول ترجمه‌های include پذیرفته‌شده را گزارش می‌دهد، شکل دوم ترجمه‌های include ردشده را ثبت می‌کند. شکل \fIheader\fR در مورد ترجمه‌های include مربوط به آن سرآیند خاص اطلاع‌رسانی می‌کند. اگر \fIheader\fR به صورت \f(CW"user"\fR یا \f(CW\*(C`\*(C'\fR باشد، با استفاده از مسیر include به یک سرآیند کاربری یا سیستمی خاص تبدیل و آدرس‌دهی می‌شود. .IP \fB\-flang\-info\-module\-cmi\fR 4 .IX Item "-flang-info-module-cmi" .PD 0 .IP \fB\-flang\-info\-module\-cmi=\fR\fImodule\fR 4 .IX Item "-flang-info-module-cmi=module" .PD دربارهٔ نام مسیرهای رابط ماژول کامپایل‌شده (Compiled Module Interface یا CMI) اطلاع‌رسانی کن. شکل اول تمام نام مسیرهای 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++ and Objective\-C++ only)" 4 .IX Item "-Wabi-tag (C++ and Objective-C++ only)" هنگامی که یک نوع دارای برچسب ABI (ABI tag) در زمینه‌ای استفاده می‌شود که فاقد آن برچسب ABI است، هشدار بده. برای اطلاعات بیشتر دربارهٔ برچسب‌های ABI به \fBC++ Attributes\fR مراجعه کنید. .IP \fB\-Wno\-abbreviated\-auto\-in\-template\-arg\fR 4 .IX Item "-Wno-abbreviated-auto-in-template-arg" خطای مربوط به نوع جای‌نگهدار \f(CW\*(C`auto\*(C'\fR که درون یک فهرست آرگومان قالب برای اعلان یک الگوی تابع مختصرشدهٔ (abbreviated function template) C++20 استفاده شده است را غیرفعال کن، مانند: .Sp .Vb 1 \& void f(S); .Ve .Sp این ویژگی در Concepts TS پیشنهاد شده بود، اما در C++20 تصویب نشد؛ در استاندارد، یک جای‌نگهدار در اعلان پارامتر باید به عنوان یک decl\-specifier ظاهر شود. این خطا را می‌توان با استفاده از \fB\-fpermissive\fR یا \&\fB\-Wno\-error=abbreviated\-auto\-in\-template\-arg\fR به یک هشدار نیز تقلیل داد..IP "\fB\-Wcomma\-subscript\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wcomma-subscript (C++ and Objective-C++ only)" دربارهٔ استفاده از عبارت کاما در داخل یک عبارت اندیس‌گذاری هشدار می‌دهد. این کاربرد در C++20 منسوخ شده و در C++23 حذف خواهد شد. با این حال، عبارت کامایی که در \f(CW\*(C`( )\*(C'\fR قرار گرفته باشد منسوخ نیست. مثال: .Sp .Vb 4 \& void f(int *a, int b, int c) { \& a[b,c]; // deprecated in C++20, invalid in C++23 \& a[(b,c)]; // OK \& } .Ve .Sp در C++23 قرار دادن عبارت‌های جداشده با کاما درون اندیس در صورتی معتبر است که یک عملگر اندیس سربارگذاری‌شده یافت شود و از تعداد و انواع درست آرگومان‌ها پشتیبانی کند. کامپایلر G++ نحو قبلاً معتبری را برای کدهایی که در C++23 معتبر نیستند اما در C++20 معتبر ولی منسوخ بودند، با یک هشدار دقیق (pedantic) می‌پذیرد؛ این هشدار را می‌توان با \&\fB\-Wno\-comma\-subscript\fR غیرفعال کرد. .Sp به‌طور پیش‌فرض با \fB\-std=c++20\fR فعال است مگر آنکه \&\fB\-Wno\-deprecated\fR داده شود، و پس از \fB\-std=c++23\fR بدون در نظر گرفتن \&\fB\-Wno\-deprecated\fR فعال است. پیش از \fB\-std=c++20\fR، با \&\fB\-Wdeprecated\fR صریح فعال می‌شود. .Sp این هشدار با \fB\-pedantic\-errors\fR در حالت C++23 یا بالاتر به یک خطا ارتقا می‌یابد. .IP "\fB\-Wctad\-maybe\-unsupported\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wctad-maybe-unsupported (C++ and Objective-C++ only)" هنگام انجام استنتاج آرگومان الگوی کلاس (CTAD) روی نوعی که هیچ راهنمای استنتاجِ صریحاً نوشته‌شده‌ای ندارد هشدار می‌دهد. این هشدار مواردی را مشخص می‌کند که CTAD تنها به این دلیل موفق شده است که کامپایلر راهنماهای استنتاج ضمنی را تولید کرده است، که ممکن است مقصود برنامه‌نویس نبوده باشد. برخی راهنماهای سبک کدنویسی CTAD را فقط برای انواعی مجاز می‌دانند که مشخصاً «opt\-in» کرده باشند؛ یعنی انواعی که برای پشتیبانی از CTAD طراحی شده‌اند. این هشدار را می‌توان با الگوی زیر فرونشاند: .Sp .Vb 6 \& struct allow_ctad_t; // any name works \& template struct S { \& S(T) { } \& }; \& // Guide with incomplete parameter type will never be considered. \& S(allow_ctad_t) \-> S; .Ve .IP "\fB\-Wctor\-dtor\-privacy\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wctor-dtor-privacy (C++ and Objective-C++ only)" هنگامی که یک کلاس غیرقابل‌استفاده به نظر می‌رسد چون تمام سازنده‌ها یا مخرب‌های آن کلاس خصوصی هستند و کلاس فاقد توابع دوست (friend) یا توابع عضو استاتیک عمومی است، هشدار می‌دهد. همچنین اگر هیچ متد غیرخصوصی وجود نداشته باشد و حداقل یک تابع عضو خصوصی وجود داشته باشد که سازنده یا مخرب نباشد نیز هشدار می‌دهد. .IP "\fB\-Wdangling\-reference\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdangling-reference (C++ and Objective-C++ only)" هنگامی که یک ارجاع به یک شیء موقت که طول عمر آن به پایان رسیده متصل شود، هشدار می‌دهد. برای مثال: .Sp .Vb 2 \& int n = 1; \& const int& r = std::max(n \- 1, n + 1); // r is dangling .Ve .Sp در مثال بالا، دو شیء موقت ایجاد می‌شود (یکی برای هر آرگومان) و ارجاعی به یکی از این اشیاء موقت بازگردانده می‌شود. با این حال، هر دو شیء موقت در پایان عبارت کامل تخریب می‌شوند، بنابراین ارجاع \f(CW\*(C`r\*(C'\fR معلق است. این هشدار همچنین ارجاع‌های معلق را در فهرست‌های مقداردهی اولیهٔ اعضا تشخیص می‌دهد: .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 که دارای یک عضو داده‌ای اشاره‌گر و یک مخرب بدیهی باشد. .Sp این هشدار را می‌توان با استفاده از ویژگی \f(CW\*(C`gnu::no_dangling\*(C'\fR غیرفعال کرد. .Sp این هشدار با \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wdelete\-non\-virtual\-dtor\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdelete-non-virtual-dtor (C++ and Objective-C++ only)" هنگامی که از \f(CW\*(C`delete\*(C'\fR برای تخریب نمونه‌ای از یک کلاس استفاده می‌شود که دارای توابع مجازی و مخرب غیرمجازی است، هشدار می‌دهد. در صورتی که کلاس پایه فاقد مخرب مجازی باشد، حذف نمونه‌ای از کلاس مشتق‌شده از طریق اشاره‌گری به کلاس پایه ناامن است. این هشدار با \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wdeprecated\-copy\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-copy (C++ and Objective-C++ only)" هشدار می‌دهد که در C++11 به بالا، در صورتی که کلاس دارای یک سازنده رونوشت یا عملگر انتساب رونوشت ارائه‌شده توسط کاربر باشد، اعلان ضمنی یک سازنده رونوشت یا عملگر انتساب رونوشت منسوخ است. این هشدار با \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wdeprecated\-copy\-dtor\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-copy-dtor (C++ and Objective-C++ only)" مشابه \fB\-Wdeprecated\-copy\fR است، اما در صورتی که کلاس دارای یک مخرب ارائه‌شده توسط کاربر نیز باشد، آن را منسوخ در نظر می‌گیرد. .IP "\fB\-Wno\-deprecated\-enum\-enum\-conversion\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-deprecated-enum-enum-conversion (C++ and Objective-C++ only)" غیرفعال کردن هشدار دربارهٔ حالتی که در آن تبدیل‌های حسابی معمول روی عملوندهایی اعمال می‌شوند که یکی از نوع شمارشی و دیگری از یک نوع شمارشی متفاوت است. این تبدیل در C++20 منسوخ شد. برای مثال: .Sp .Vb 3 \& enum E1 { e }; \& enum E2 { f }; \& int k = f \- e; .Ve .Sp گزینهٔ \&\fB\-Wdeprecated\-enum\-enum\-conversion\fR به‌طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است. در گویش‌های پیش از C++20، این هشدار می‌تواند با \fB\-Wenum\-conversion\fR یا \fB\-Wdeprecated\fR فعال شود. .IP "\fB\-Wno\-deprecated\-enum\-float\-conversion\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-deprecated-enum-float-conversion (C++ and Objective-C++ only)" غیرفعال کردن هشدار دربارهٔ حالتی که در آن تبدیل‌های حسابی معمول روی عملوندهایی اعمال می‌شوند که یکی از نوع شمارشی و دیگری از نوع ممیز شناور است. این تبدیل در C++20 منسوخ شد. برای مثال: .Sp .Vb 3 \& enum E1 { e }; \& enum E2 { f }; \& bool b = e <= 3.7; .Ve .Sp گزینهٔ \&\fB\-Wdeprecated\-enum\-float\-conversion\fR به‌طور پیش‌فرض با \&\fB\-std=c++20\fR فعال است. در گویش‌های پیش از C++20، این هشدار می‌تواند با \fB\-Wenum\-conversion\fR یا \fB\-Wdeprecated\fR فعال شود. .IP "\fB\-Wdeprecated\-literal\-operator\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-literal-operator (C++ and Objective-C++ only)" هشدار می‌دهد که اعلان یک عملگر لفظیِ تعریف‌شده توسط کاربر با یک فاصله پیش از پسوند منسوخ است. این هشدار به‌طور پیش‌فرض در C++23، یا با \fB\-Wdeprecated\fR صریح فعال می‌شود. .Sp.Vb 2 \& string operator "" _i18n(const char*, std::size_t); // deprecated \& string operator ""_i18n(const char*, std::size_t); // preferred .Ve .IP "\fB\-Wdeprecated\-variadic\-comma\-omission\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wdeprecated-variadic-comma-omission (C++ and Objective-C++ only)" هشدار می‌دهد که حذف کاما (ویرگول) قبل از آرگومان‌های متغیر \f(CW\*(C`...\*(C'\fR در انتهای فهرست پارامترهای تابع منسوخ شده است. این هشدار به‌طور پیش‌فرض در C++26 یا با مشخص کردن صریح \fB\-Wdeprecated\fR فعال می‌شود. .Sp .Vb 6 \& void f1(int...); // deprecated \& void f1(int, ...); // preferred \& template \& void f2(T...); // ok \& template \& void f3(T......); // deprecated .Ve .IP \fB\-Wno\-elaborated\-enum\-base\fR 4 .IX Item "-Wno-elaborated-enum-base" برای C++11 و بالاتر، در صورتی که یک enum\-base اضافی (نامعتبر) در یک elaborated\-type\-specifier استفاده شود، هشدار می‌دهد. به این معنا که اگر یک enum با نوع پایه‌ای مشخص و بدون فهرست شمارنده‌ها در اعلانی به غیر از یک اعلان مستقل از آن enum به کار رود. به‌طور پیش‌فرض فعال است. این هشدار با \-pedantic\-errors به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-init\-list\-lifetime\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-init-list-lifetime (C++ and Objective-C++ only)" در مورد استفاده‌هایی از \f(CW\*(C`std::initializer_list\*(C'\fR که احتمالاً منجر به ایجاد اشاره‌گرهای معلق (dangling pointers) می‌شوند، هشدار نمی‌دهد. از آنجا که آرایه زیرین یک \&\f(CW\*(C`initializer_list\*(C'\fR مانند یک شیء موقت معمولی C++ مدیریت می‌شود، نگه‌داشتن ناخواسته یک اشاره‌گر به آرایه پس از پایان طول عمر آن بسیار محتمل است. به عنوان مثال: .RS 4 .IP * 4 اگر یک تابع یک \f(CW\*(C`initializer_list\*(C'\fR موقت یا یک متغیر محلی \&\f(CW\*(C`initializer_list\*(C'\fR را بازگرداند، طول عمر آرایه در انتهای دستور return پایان می‌یابد، بنابراین مقدار بازگردانده‌شده دارای یک اشاره‌گر معلق است. .IP * 4 اگر یک عبارت new یک \f(CW\*(C`initializer_list\*(C'\fR ایجاد کند، آرایه تنها تا پایان full\-expression دربرگیرنده زنده می‌ماند، بنابراین \f(CW\*(C`initializer_list\*(C'\fR موجود در heap دارای یک اشاره‌گر معلق خواهد بود. .IP * 4 هنگامی که به یک متغیر \f(CW\*(C`initializer_list\*(C'\fR از یک فهرست مقداردهی درون آکوالاد مقدار اختصاص داده می‌شود، آرایه موقت ایجادشده برای سمت راست انتساب فقط تا پایان full\-expression زنده می‌ماند، بنابراین در دستور بعدی متغیر \f(CW\*(C`initializer_list\*(C'\fR دارای یک اشاره‌گر معلق خواهد بود. .Sp .Vb 6 \& // li\*(Aqs initial underlying array lives as long as li \& std::initializer_list li = { 1,2,3 }; \& // assignment changes li to point to a temporary array \& li = { 4, 5 }; \& // now the temporary is gone and li has a dangling pointer \& int i = li.begin()[0] // undefined behavior .Ve .IP * 4 هنگامی که یک سازنده فهرست (list constructor) اشاره‌گر \f(CW\*(C`begin\*(C'\fR را از آرگومان \&\f(CW\*(C`initializer_list\*(C'\fR ذخیره می‌کند، این کار طول عمر آرایه را افزایش نمی‌دهد؛ بنابراین اگر متغیر یک کلاس از یک \f(CW\*(C`initializer_list\*(C'\fR موقت ساخته شود، اشاره‌گر در پایان دستور اعلان متغیر معلق باقی می‌ماند. .RE .RS 4 .RE .IP \fB\-Winvalid\-constexpr\fR 4 .IX Item "-Winvalid-constexpr" هنگامی که یک تابع هرگز یک عبارت ثابت (constant expression) تولید نمی‌کند، هشدار می‌دهد. در C++20 و نسخه‌های پیشین، برای هر تابع و الگوی تابع \f(CW\*(C`constexpr\*(C'\fR، باید حداقل یک مجموعه از آرگومان‌های تابع در دست‌کم یک نمونه‌سازی وجود داشته باشد به طوری که فراخوانی تابع یا سازنده بتواند یک زیرعبارت ارزیابی‌شده از یک core constant expression باشد. C++23 این محدودیت را حذف کرده است، بنابراین می‌توان تابع یا الگوی تابعی با برچسب \&\f(CW\*(C`constexpr\*(C'\fR داشت که هیچ فراخوانی از آن شرایط یک core constant expression را برآورده نکند. .Sp این هشدار به‌طور پیش‌فرض در C++20 و نسخه‌های پیشین به عنوان یک هشدار سخت‌گیرانه (pedantic) فعال است. در C++23، گزینه \fB\-Winvalid\-constexpr\fR را می‌توان فعال کرد که در این صورت یک هشدار معمولی خواهد بود. برای مثال: .Sp .Vb 7 \& void f (int& i); \& constexpr void \& g (int& i) \& { \& // Warns by default in C++20, in C++23 only with \-Winvalid\-constexpr. \& f(i); \& } .Ve .IP \fB\-Winvalid\-imported\-macros\fR 4 .IX Item "-Winvalid-imported-macros" معتبر بودن تمام تعاریف ماکروهای واردشده (imported) را در پایان کامپایل بررسی می‌کند. این گزینه به‌طور پیش‌فرض فعال نیست، زیرا بررسی آن نیازمند پردازش اضافی است. این گزینه ممکن است هنگام آماده‌سازی مجموعه‌هایی از header\-unitها برای اطمینان از سازگاری ماکروها مفید باشد. .IP "\fB\-Wno\-literal\-suffix\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-literal-suffix (C++ 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 یک شیء از نوع کلاس باشد، و نوشتن در چنین شیئی ممکن است سازنده یا انتساب رونوشت (copy assignment) غیرساده (non\-trivial) یا حذف‌شده (deleted) کلاس را دور بزند، درستیِ ثبات (const\-correctness) یا کپسوله‌سازی را نقض کند، یا اشاره‌گرهای جدول مجازی را مخدوش سازد، هشدار می‌دهد. اصلاح بازنمایی چنین اشیایی ممکن است ناورداهای (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++ و Objective-C++)" زمانی هشدار می‌دهد که یک کلاس دارای توابع مجازی و یک مخرب (destructor) غیرمجازیِ در دسترس در خود یا در یک کلاس پایهٔ چندریختیِ در دسترس باشد؛ در این حالت، حذف (delete کردن) یک نمونه از کلاس مشتق‌شده از طریق اشاره‌گری به خود کلاس یا کلاس پایه امکان‌پذیر ولی ناامن است. این هشدار در صورت تعیین \fB\-Weffc++\fR به‌طور خودکار فعال می‌شود. گزینهٔ \fB\-Wdelete\-non\-virtual\-dtor\fR (فعال‌شده با \fB\-Wall\fR) به دلیل هشدار دربارهٔ موارد ناامن بدون هشدارهای مثبت کاذب، باید ترجیح داده شود. .IP "\fB\-Wregister\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wregister (تنها C++ و Objective-C++)" در مورد استفاده از مشخص‌کنندهٔ کلاس حافظهٔ \f(CW\*(C`register\*(C'\fR هشدار می‌دهد، مگر زمانی که بخشی از افزونهٔ \fBExplicit Register Variables\fR گنو باشد. استفاده از کلیدواژهٔ \f(CW\*(C`register\*(C'\fR به عنوان مشخص‌کنندهٔ کلاس حافظه در C++11 منسوخ شده و در C++17 حذف شده است. به‌طور پیش‌فرض با \fB\-std=c++17\fR فعال است. .IP "\fB\-Wreorder\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wreorder (تنها C++ و Objective-C++)" زمانی هشدار می‌دهد که ترتیب مقداردهنده‌های اولیهٔ اعضا که در کد آمده است با ترتیبی که باید اجرا شوند مطابقت نداشته باشد. برای نمونه: .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++ و Objective-C++)" این هشدار زمانی اعلام می‌شود که فراخوانی \f(CW\*(C`std::move\*(C'\fR مانع از حذف کپی (copy elision) شود. سناریوی متداول برای رخ دادن حذف کپی، زمان بازگشت از تابعی با نوع بازگشتی از نوع کلاس است؛ در صورتی که عبارت بازگردانده‌شده نام یک شیء خودکار (automatic object) غیر\-volatile بوده، پارامتر تابع نباشد و نوع آن با نوع بازگشتی تابع یکسان باشد. .Sp .Vb 9 \& struct T { \& ... \& }; \& T fn() \& { \& T t; \& ... \& return std::move (t); \& } .Ve .Sp اما در این مثال، فراخوانی \f(CW\*(C`std::move\*(C'\fR مانع از حذف کپی می‌شود. .Sp این هشدار با \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wno\-redundant\-move\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-redundant-move (تنها C++ و Objective-C++)" این هشدار دربارهٔ فراخوانی‌های زائد \f(CW\*(C`std::move\*(C'\fR هشدار می‌دهد؛ یعنی زمانی که حتی بدون فراخوانی \f(CW\*(C`std::move\*(C'\fR نیز عملیات انتقال انجام می‌شد. این وضعیت به این دلیل رخ می‌دهد که کامپایلر در شرایط خاصی مانند بازگرداندن یک متغیر محلی که در آن حذف کپی ممکن نیست، مجبور است با شیء به‌گونه‌ای رفتار کند که گویی یک rvalue است. مثال زیر را در نظر بگیرید: .Sp .Vb 8 \& struct T { \& ... \& }; \& T fn(T t) \& { \& ... \& return std::move (t); \& } .Ve .Sp در اینجا، فراخوانی \f(CW\*(C`std::move\*(C'\fR زائد است. از آنجا که G++ مسئلهٔ بنیادین ۱۵۷۹ (Core Issue 1579) را پیاده‌سازی می‌کند، مثال دیگر به این صورت است: .Sp .Vb 12 \& struct T { // convertible to U \& ... \& }; \& struct U { \& ... \& }; \& U fn() \& { \& T t; \& ... \& return std::move (t); \& } .Ve .Sp در این مثال، حذف کپی قابل اعمال نیست زیرا نوع عبارت بازگردانده‌شده و نوع بازگشتی تابع متفاوت هستند، با این حال G++ با مقدار بازگشتی طوری رفتار می‌کند که گویی توسط یک rvalue مشخص شده است. .Sp این هشدار با \fB\-Wextra\fR فعال می‌شود. .IP "\fB\-Wrange\-loop\-construct\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wrange-loop-construct (تنها C++ و Objective-C++)" این هشدار زمانی اعلان می‌شود که یک حلقهٔ for بر پایهٔ بازه (range\-based for\-loop) در C++ یک کپی غیرضروری ایجاد کند. این حالت زمانی می‌تواند رخ دهد که اعلان بازه یک مرجع (reference) نباشد، در حالی که احتمالاً باید باشد. برای نمونه: .Sp .Vb 5 \& struct S { char arr[128]; }; \& void fn () { \& S arr[5]; \& for (const auto x : arr) { ... } \& } .Ve .Sp هنگامی که نوع کپی‌شده یک نوع با کپی‌برداری ساده (trivially\-copyable) باشد که اندازهٔ آن کمتر از ۶۴ بایت است، هشداری داده نمی‌شود. .Sp این هشدار همچنین زمانی که یک متغیر حلقه در یک حلقهٔ for مبتنی بر بازه با مقداری از نوع متفاوت مقداردهی اولیه شود که به کپی شدن بینجامد، هشدار می‌دهد. برای نمونه: .Sp .Vb 4 \& void fn() { \& int arr[10]; \& for (const double &x : arr) { ... } \& } .Ve .Sp در مثال بالا، در هر تکرار حلقه یک مقدار موقت از نوع \f(CW\*(C`double\*(C'\fR ایجاد و نابود می‌شود که مرجع \&\f(CW\*(C`const double &\*(C'\fR به آن متصل می‌گردد. .Sp این هشدار با \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wredundant\-tags\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wredundant-tags (تنها C++ و Objective-C++)" دربارهٔ class\-key و enum\-key زائد در ارجاع به نوع‌های کلاس و نوع‌های شمارشی در زمینه‌هایی که این کلید می‌تواند بدون ایجاد ابهام حذف شود، هشدار می‌دهد. برای نمونه: .Sp .Vb 2 \& struct foo; \& struct foo *p; // warn that keyword struct can be eliminated .Ve .Sp از سوی دیگر، در این مثال هیچ هشداری داده نمی‌شود: .Sp .Vb 3 \& struct foo; \& void foo (); // "hides" struct foo \& void bar (struct foo&); // no warning, keyword struct is necessary .Ve .IP "\fB\-Wno\-subobject\-linkage\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-subobject-linkage (تنها C++ و Objective-C++)" اگر یک نوع کلاس دارای یک پایه یا فیلدی باشد که نوع آن از فضای نام ناشناس (anonymous namespace) استفاده می‌کند یا به نوعی بدون پیوند (no linkage) وابسته است، هشدار ندهد. اگر یک نوع A به یک نوع B بدون پیوند یا با پیوند درونی (internal linkage) وابسته باشد، تعریف آن در چندین واحد ترجمه (translation unit) نقض ODR (قاعدهٔ یک‌بار تعریف) خواهد بود، زیرا معنای B در هر واحد ترجمه متفاوت است. اگر A تنها در یک واحد ترجمه ظاهر شود، بهترین راه برای بی‌صدا کردن هشدار این است که با قرار دادن آن در یک فضای نام ناشناس، به آن نیز پیوند درونی داده شود. کامپایلر این هشدار را برای نوع‌های تعریف‌شده در فایل اصلی .C صادر نمی‌کند، زیرا بعید است که آن‌ها دارای تعاریف چندگانه باشند. \&\fB\-Wsubobject\-linkage\fR به‌طور پیش‌فرض فعال است. .IP "\fB\-Weffc++\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Weffc++ (تنها C++ و Objective-C++)" دربارهٔ نقض رهنمودهای سبک زیر از مجموعه کتاب‌های \fIEffective C++\fR اثر اسکات مایرز (Scott Meyers) هشدار می‌دهد: .RS 4 .IP * 4 برای کلاس‌هایی با حافظهٔ تخصیص‌یافته به‌طور پویا، یک سازندهٔ رونوشت (copy constructor) و یک عملگر انتساب (assignment operator) تعریف کنید. .IP * 4 در سازنده‌ها، مقداردهی اولیه را به انتساب ترجیح دهید. .IP * 4 کاری کنید که \f(CW\*(C`operator=\*(C'\fR مرجعی به \f(CW*this\fR بازگرداند. .IP * 4 هنگامی که باید یک شیء را بازگردانید، سعی نکنید یک مرجع بازگردانید. .IP * 4 بین شکل‌های پیشوندی و پسوندی عملگرهای افزایش و کاهش تمایز قائل شوید. .IP * 4 هرگز \f(CW\*(C`&&\*(C'\fR، \f(CW\*(C`||\*(C'\fR، یا \f(CW\*(C`,\*(C'\fR را سربارگذاری نکنید. .RE .RS 4 .Sp این گزینه همچنین \fB\-Wnon\-virtual\-dtor\fR را فعال می‌کند که آن هم یکی از توصیه‌های Effective C++ است. با این حال، این بررسی گسترش یافته است تا در مورد عدم وجود مخرب مجازی در کلاس‌های پایهٔ غیرچندریختیِ در دسترس نیز هشدار دهد. .Sp هنگام انتخاب این گزینه، توجه داشته باشید که سرآیندهای کتابخانهٔ استاندارد از همهٔ این رهنمودها پیروی نمی‌کنند؛ برای فیلتر کردن این هشدارها از \fBgrep \-v\fR استفاده کنید. .RE.IP "\fB\-Wno\-exceptions\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-exceptions (C++ and Objective-C++ only)" هشدار مربوط به حالتی که در آن یک گردانندهٔ استثنا (exception handler) توسط گردانندهٔ دیگری پوشانده (shadow) می‌شود را غیرفعال می‌کند؛ حالتی که می‌تواند نشان‌دهندهٔ ترتیب نادرست گرداننده‌های استثنا باشد. .IP "\fB\-Wsfinae\-incomplete\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wsfinae-incomplete (C++ and Objective-C++ only)" دربارهٔ کلاسی که ناقص (incomplete) تشخیص داده شده است، یا تابعی با نوع بازگشتی auto که نوع آن هنوز استنتاج نشده، در زمینه‌ای که به جای خطا موجب شکست در جایگزینی (substitution failure) می‌شود و سپس کلاس یا تابع بعداً در واحد ترجمه تعریف می‌گردد، هشدار می‌دهد. این مسئله مشکل‌ساز است چرا که نمونه‌سازی‌های الگو (template instantiations) یا بررسی‌های مفهوم (concept checks) در صورتی که قبل یا بعد از تعریف رخ دهند، ممکن است نتایج متفاوتی در بر داشته باشند. .Sp این هشدار به صورت پیش‌فرض فعال است. \fB\-Wsfinae\-incomplete=2\fR هشداری را در نقطهٔ شکست در جایگزینی اضافه می‌کند تا ردگیری مشکلات مشخص‌شده توسط حالت پیش‌فرض آسان‌تر شود. .IP "\fB\-Wstrict\-null\-sentinel\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wstrict-null-sentinel (C++ and Objective-C++ only)" دربارهٔ استفاده از \f(CW\*(C`NULL\*(C'\fR بدون تبدیل صریح نوع (uncasted) به عنوان نشانگر پایان (sentinel) هشدار می‌دهد. هنگام کامپایل تنها با GCC این یک نشانگر معتبر است، زیرا \f(CW\*(C`NULL\*(C'\fR به صورت \f(CW\*(C`_\|_null\*(C'\fR تعریف شده است. اگرچه این یک ثابت اشاره‌گر تهی است و نه یک اشاره‌گر تهی، اما تضمین می‌شود که اندازه‌ای برابر با یک اشاره‌گر داشته باشد. با این حال این استفاده در میان کامپایلرهای مختلف قابل‌حمل (portable) نیست. .IP "\fB\-Wno\-non\-c\-typedef\-for\-linkage\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-non-c-typedef-for-linkage (C++ and Objective-C++ only)" هشدار سخت‌گیرانه (pedwarn) را برای کلاس‌های بی‌نام دارای نام typedef با هدف پیونددهی (linkage) که حاوی اعضای خاص C++، کلاس‌های پایه، مقدارهای اولیهٔ پیش‌فرض عضو یا عبارت‌های لامبدا هستند (شامل موارد موجود در کلاس‌های عضو تو‌در‌تو)، غیرفعال می‌کند. .Sp .Vb 10 \& typedef struct { \& int a; // non\-static data members are ok \& struct T { int b; }; // member classes too \& enum E { E1, E2, E3 }; // member enumerations as well \& int c = 42; // default member initializers are not ok \& struct U : A { int c; }; // classes with base classes are not ok \& typedef int V; // typedef is not ok \& using W = int; // using declaration is not ok \& decltype([](){}) x; // lambda expressions not ok \& } S; .Ve .Sp در تمام این موارد، نام برچسب S باید پس از کلمهٔ کلیدی struct اضافه شود. .IP "\fB\-Wno\-non\-template\-friend\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-non-template-friend (C++ and Objective-C++ only)" هشدارهای مربوط به زمانی را که توابع دوست (friend) غیرالگویی در داخل یک الگو اعلان می‌شوند غیرفعال می‌کند. در نسخه‌های بسیار قدیمی GCC که پیش از پیاده‌سازی استاندارد ISO بودند، اعلان‌هایی مانند \&\fBfriend int foo(int)\fR که در آن‌ها نام دوست یک شناسهٔ بدون پیشوند و شرط (unqualified\-id) است، می‌توانستند به عنوان یک تخصیص خاص از یک تابع الگو تفسیر شوند؛ این هشدار برای تشخیص مشکلات سازگاری وجود دارد و به صورت پیش‌فرض فعال است. .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 زمانی که اعلان یک تابع موجب پنهان شدن توابع مجازی (virtual) یک کلاس پایه شود هشدار می‌دهد. برای نمونه در: .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 (using\-declaration) به کلاس مشتق‌شده است تا تابع کلاس پایه از حالت پنهان خارج شود؛ برای نمونه، افزودن \f(CW\*(C`using A::f;\*(C'\fR به \f(CW\*(C`B\*(C'\fR. .Sp پسوند سطح اختیاری، رفتار را زمانی کنترل می‌کند که همهٔ اعلان‌ها در کلاس مشتق‌شده توابع مجازی کلاس پایه را بازنویسی (override) می‌کنند، حتی اگر همهٔ توابع پایه بازنویسی نشده باشند: .Sp .Vb 4 \& struct C { \& virtual void f(); \& virtual void f(int); \& }; \& \& struct D: public C { \& void f(int); // does override \& } .Ve .Sp احتمال اینکه این الگو ناشی از یک اشتباه باشد کمتر است؛ اگر از D تنها به صورت مجازی استفاده شود، کاربر ممکن است تشخیص داده باشد که معناشناسی کلاس پایه برای برخی از سربارگذاری‌ها مناسب است. .Sp در سطح ۱، این حالت هشداری تولید نمی‌کند؛ در سطح ۲ هشدار می‌دهد. گزینهٔ \fB\-Woverloaded\-virtual\fR به تنهایی سطح ۲ را انتخاب می‌کند. سطح ۱ در \fB\-Wall\fR گنجانده شده است. .IP "\fB\-Wno\-pmf\-conversions\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-pmf-conversions (C++ and Objective-C++ only)" پیام تشخیصی برای تبدیل یک اشاره‌گر مقید به تابع عضو (bound pointer to member function) به یک اشاره‌گر ساده را غیرفعال می‌کند. .IP "\fB\-Wsign\-promo\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wsign-promo (C++ and Objective-C++ only)" زمانی که حل تفکیک سربارگذاری (overload resolution)، ترفیع از نوع بدون علامت یا نوع شمارشی به یک نوع علامت‌دار را بر تبدیل به یک نوع بدون علامت با همان اندازه ترجیح می‌دهد، هشدار می‌دهد. نسخه‌های پیشین G++ تلاش می‌کردند وضعیت بدون علامت بودن را حفظ کنند، اما استاندارد رفتار فعلی را الزامی کرده است. .IP "\fB\-Wtemplates\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wtemplates (C++ and Objective-C++ only)" هنگام مواجهه با اعلان یک الگوی اولیه (primary template) هشدار می‌دهد. برخی قواعد کدنویسی استفاده از الگوها را مجاز نمی‌دانند، و این گزینه ممکن است برای اعمال آن قانون استفاده شود. این هشدار در فایل‌های سرآیند سیستم مانند STL غیرفعال است، بنابراین همچنان می‌توان از STL بهره برد. همچنین می‌توان الگوها را نمونه‌سازی یا تخصیص (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\-key که با تعریف، یا با اولین اعلان (در صورت عدم ارائهٔ تعریف) مطابقت ندارد هشدار می‌دهد. .Sp برای نمونه، اعلان \f(CW\*(C`struct Object\*(C'\fR در فهرست آرگومان‌های \f(CW\*(C`draw\*(C'\fR موجب تحریک هشدار می‌شود. برای جلوگیری از آن، یا class\-key زائد \f(CW\*(C`struct\*(C'\fR را حذف کنید یا آن را با \f(CW\*(C`class\*(C'\fR جایگزین نمایید تا با تعریف آن مطابقت داشته باشد. .Sp .Vb 5 \& class Object { \& public: \& virtual ~Object () = 0; \& }; \& void draw (struct Object*); .Ve .Sp اعلان یک کلاس با class\-key به صورت \f(CW\*(C`struct\*(C'\fR همان‌طور که مثال بالا نشان می‌دهد اشتباه نیست. گزینهٔ \fB\-Wmismatched\-tags\fR به منظور کمک به دستیابی به سبکی یکدست در اعلان کلاس‌ها در نظر گرفته شده است. در کدهایی که قرار است به کامپایلرهای مبتنی بر Windows منتقل شوند، این هشدار به جلوگیری از خطاهای ارجاع حل‌نشده (unresolved references) ناشی از تفاوت در مغشوش‌سازی نام‌ها (mangling) برای نمادهای اعلان‌شده با class\-keyهای متفاوت کمک می‌کند. این گزینه می‌تواند به تنهایی یا همراه با \fB\-Wredundant\-tags\fR به کار رود..IP "\fB\-Wmultiple\-inheritance\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wmultiple-inheritance (تنها C++ و Objective-C++)" هنگامی که کلاسی با چندین کلاس پایه مستقیم تعریف شود هشدار می‌دهد. برخی قوانین کدنویسی وراثت چندگانه را منع می‌کنند، و می‌توان از این گزینه برای اعمال آن قانون استفاده کرد. این هشدار در فایل‌های سرآیند سیستمی، مانند 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" هشدارهای مربوط به ارث‌بری از یک پایهٔ مجازی با عملگر انتساب انتقال غیربدیهی در C++11 را نادیده می‌گیرد. این وضعیت خطرناک است زیرا اگر پایهٔ مجازی از بیش از یک مسیر در دسترس باشد، چندین بار منتقل (move) می‌شود که می‌تواند به این معنی باشد که هر دو شیء در وضعیت منتقل‌شده (moved\-from) قرار گیرند. اگر عملگر انتساب انتقال به گونه‌ای نوشته شده باشد که از انتقال یک شیءِ از پیش منتقل‌شده جلوگیری کند، می‌توان این هشدار را غیرفعال کرد. .IP \fB\-Wnamespaces\fR 4 .IX Item "-Wnamespaces" هنگامی که یک تعریف فضای نام (namespace) باز شود هشدار می‌دهد. برخی قوانین کدنویسی فضاهای نام را منع می‌کنند، و می‌توان از این گزینه برای اعمال آن قانون استفاده کرد. این هشدار در فایل‌های سرآیند سیستمی مانند STL غیرفعال است، بنابراین همچنان می‌توان از STL استفاده کرد. همچنین می‌توان از دستورالعمل‌های using و نام‌های واجد شرایط (qualified names) استفاده نمود. .IP "\fB\-Wno\-template\-body\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-template-body (تنها C++ و Objective-C++)" تشخیص خطاها را هنگام تجزیهٔ یک قالب (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++ و Objective-C++)" هشدار دربارهٔ استفاده از 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\-expose\-global\-module\-tu\-local\fR 4 .IX Item "-Wno-expose-global-module-tu-local" افشای یک موجودیت محلیِ واحد ترجمه از طریق یک رابط ماژول نامعتبر است، چرا که ممکن است موجب نقض ODR شده و به صورت خطاهای پیونددهی یا رفتارهای غیرمنتظرهٔ دیگر نمایان شود. با این حال، بسیاری از کتابخانه‌های موجود موجودیت‌های TU\-local را در رابط خود اعلان می‌کنند و اجتناب از افشای این موجودیت‌ها در برخی موارد می‌تواند دشوار باشد. .Sp به عنوان یک افزونه، GCC افشای متغیرها و توابع درونی را که در قطعه‌ماژول سراسری (global module fragment) اعلان شده‌اند مجاز می‌داند. این هشدار وقوع چنین افشای نامعتبری را نشان می‌دهد، و می‌تواند با استفاده از عملگرهای راهنمای تشخیص (diagnostic pragmas) چه در محل افشا و چه در نقطهٔ اعلان آن اعلان درونی بی‌اثر شود. این موضوع همچنین برای اعلان‌های \f(CW\*(C`export using\*(C'\fR که چنین موجودیت‌هایی را نام می‌برند اعمال می‌گردد. .Sp هنگامی که این گزینه با \fB\-Wtemplate\-names\-tu\-local\fR ترکیب شود، GCC همچنین دربارهٔ ارجاعات غیر افشاگرانه به موجودیت‌های TU\-local در بدنهٔ قالب‌ها هشدار خواهد داد. چنین قالب‌هایی همچنان می‌توانند در سایر TUها نمونه‌سازی شوند، اما خطرات بالا در رابطه با افشای موجودیت‌های محلی واحد ترجمه همچنان صادق است. .Sp این هشدار به طور پیش‌فرض فعال است و توسط \&\fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP \fB\-Wno\-external\-tu\-local\fR 4 .IX Item "-Wno-external-tu-local" هنگام نام بردن از یک موجودیت TU\-local در خارج از واحد ترجمه‌ای که در آن اعلان شده است هشدار می‌دهد. چنین اعلان‌هایی در طول جستجوی نام (name lookup) نادیده گرفته خواهند شد. این امر می‌تواند هنگام انجام ADL از قالبی اعلان‌شده در همان TU تابع درونی رخ دهد: .Sp .Vb 6 \& export module M; \& template void foo(T t) { \& bar(t); \& } \& struct S {} s; \& static void bar(S) {} // internal linkage \& \& // instantiating foo(s) from outside this TU can see ::bar, \& // but naming it there is ill\-formed. .Ve .Sp می‌توان این مشکل را با وابسته کردن \f(CW\*(C`bar\*(C'\fR به ماژول سراسری، با استفاده از \f(CW\*(C`extern "C++"\*(C'\fR برطرف کرد. .Sp این هشدار به طور پیش‌فرض فعال است و توسط \&\fB\-pedantic\-errors\fR به یک خطا ارتقا می‌یابد. .IP "\fB\-Wno\-terminate\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-terminate (تنها C++ و Objective-C++)" هشدار دربارهٔ عبارت پرتابی (throw\-expression) را که فوراً منجر به فراخوانی \f(CW\*(C`terminate\*(C'\fR می‌شود غیرفعال می‌کند. .IP "\fB\-Wno\-vexing\-parse\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wno-vexing-parse (تنها C++ و Objective-C++)" دربارهٔ ابهام نحوی آزاردهنده‌ترین تجزیه (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++ و Objective-C++)" هنگامی که یک تابع تبدیل شیئی را به همان نوع، به یک کلاس پایه از آن نوع، یا به void تبدیل می‌کند هشدار نمی‌دهد؛ چنین تابع تبدیلی هرگز فراخوانی نخواهد شد. .IP "\fB\-Wvolatile\fR (تنها C++ و Objective\-C++)" 4 .IX Item "-Wvolatile (تنها C++ و Objective-C++)" دربارهٔ کاربردهای منسوخ‌شدهٔ توصیف‌گر \f(CW\*(C`volatile\*(C'\fR هشدار می‌دهد. این شامل عبارت‌های پسوندی و پیشوندی \f(CW\*(C`++\*(C'\fR و \f(CW\*(C`\-\-\*(C'\fR از انواع توصیف‌شده با \&\f(CW\*(C`volatile\*(C'\fR، استفاده از انتساب‌های ساده در جایی که عملوند سمت چپ یک نوع غیرکلاسیِ توصیف‌شده با \f(CW\*(C`volatile\*(C'\fR برای مقدار آن‌ها است، انتساب‌های مرکب که در آن‌ها عملوند سمت چپ یک نوع غیرکلاسیِ توصیف‌شده با \f(CW\*(C`volatile\*(C'\fR است، نوع بازگشتی تابع توصیف‌شده با \f(CW\*(C`volatile\*(C'\fR، نوع پارامتر توصیف‌شده با \&\f(CW\*(C`volatile\*(C'\fR، و اتصالات ساختاریافته (structured bindings) از یک نوع توصیف‌شده با \f(CW\*(C`volatile\*(C'\fR می‌شود. این کاربردها در C++20 منسوخ شده‌اند. .Sp به طور پیش‌فرض با \fB\-std=c++20\fR فعال می‌شود. پیش از \&\fB\-std=c++20\fR، به صورت صریح با \fB\-Wdeprecated\fR فعال می‌گردد. .IP \fB\-Waligned\-new\fR 4 .IX Item "-Waligned-new" .PD 0 .IP \fB\-Waligned\-new=\fR[\fBnone\fR|\fBglobal\fR|\fBall\fR] 4 .IX Item "-Waligned-new=[none|global|all]" .PD دربارهٔ عبارت new از نوعی که به ترازبندی (alignment) بزرگ‌تری نسبت به \f(CWalignof(std::max_align_t)\fR نیاز دارد اما از یک تابع تخصیص بدون پارامتر ترازبندی صریح استفاده می‌کند، هشدار می‌دهد. این گزینه توسط \fB\-Wall\fR فعال می‌شود. .Sp به طور معمول این گزینه تنها دربارهٔ توابع تخصیص سراسری هشدار می‌دهد، اما \&\fB\-Waligned\-new=all\fR دربارهٔ توابع تخصیص عضو کلاس نیز هشدار می‌دهد. .IP \fB\-Wno\-placement\-new\fR 4 .IX Item "-Wno-placement-new" .PD 0 .IP \fB\-Wplacement\-new=\fR\fIn\fR 4 .IX Item "-Wplacement-new=n".PD هشدار درباره عبارت‌های placement new با رفتار تعریف‌نشده، مانند ساخت یک شیء در بافری که از نوع آن شیء کوچک‌تر است. برای مثال، عبارت 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)، درباره انواع کلاس‌های چندریختی که با مقدار (by value) دریافت می‌شوند هشدار می‌دهد. با \fB\-Wcatch\-value=2\fR درباره تمام انواع کلاس که با مقدار دریافت می‌شوند هشدار می‌دهد. با \fB\-Wcatch\-value=3\fR درباره تمام انواعی که از طریق ارجاع دریافت نمی‌شوند هشدار می‌دهد. \fB\-Wcatch\-value\fR توسط \fB\-Wall\fR فعال می‌شود. .IP "\fB\-Wconditionally\-supported\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wconditionally-supported (C++ and Objective-C++ only)" هشدار برای ساختارهای با پشتیبانی مشروط (C++11 [intro.defs]). .IP "\fB\-Wno\-defaulted\-function\-deleted\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-defaulted-function-deleted (C++ and Objective-C++ only)" هشدار هنگامی که یک تابع صریحاً پیش‌فرض‌شده (defaulted)، توسط کامپایلر حذف (delete) می‌شود. این وضعیت می‌تواند زمانی رخ دهد که نوع اعلان‌شده تابع با نوع تابعی که به‌طور ضمنی اعلان می‌شد مطابقت نداشته باشد. این هشدار به‌طور پیش‌فرض فعال است. .IP "\fB\-Wno\-delete\-incomplete\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-delete-incomplete (C++ and Objective-C++ only)" هنگام delete کردن اشاره‌گری به یک نوع ناکامل (incomplete type)، که ممکن است موجب رفتار تعریف‌نشده در زمان اجرا شود، هشدار نده. این هشدار به‌طور پیش‌فرض فعال است. .IP "\fB\-Wextra\-semi\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wextra-semi (C++, Objective-C++ only)" هشدار درباره نقطه‌ویرگول‌های اضافه. زمینه‌های گوناگونی وجود دارد که یک نقطه‌ویرگول اضافی ممکن است در آن‌ها رخ دهد. یکی از آن‌ها نقطه‌ویرگول پس از تعاریف تابع درون‌کلاسی است که در همه گویش‌های C++ معتبر است (و هرگز یک pedwarn محسوب نمی‌شود): .Sp .Vb 3 \& struct S { \& void foo () {}; \& }; .Ve .Sp دیگری نقطه‌ویرگول اضافی در محدوده فضای نام (namespace) است که از C++11 مجاز دانسته شده است (بنابراین در C++98 یک pedwarn است): .Sp .Vb 3 \& struct S { \& }; \& ; .Ve .Sp و دیگری نقطه‌ویرگول اضافی درون تعاریف کلاس است که از C++11 مجاز دانسته شده است (بنابراین در C++98 یک pedwarn است): .Sp .Vb 4 \& struct S { \& int a; \& ; \& }; .Ve .IP "\fB\-Wno\-global\-module\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-global-module (C++ and Objective-C++ only)" غیرفعال کردن پیام تشخیصی در صورتی که قطعه ماژول سراسری (global module fragment) یک واحد ماژول، تنها متشکل از دستورات پیش‌پردازنده نباشد. .IP "\fB\-Wno\-inaccessible\-base\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-inaccessible-base (C++, Objective-C++ only)" این گزینه هشدارهایی را کنترل می‌کند که هنگام غیرقابل‌دسترس بودن یک کلاس پایه در کلاسی که به دلیل ابهام از آن مشتق شده است، صادر می‌شوند. این هشدار به‌طور پیش‌فرض فعال است. توجه داشته باشید که هشدار برای کلاس‌های پایه مجازی مبهم توسط گزینه \fB\-Wextra\fR فعال می‌شود. .Sp .Vb 1 \& struct A { int a; }; \& \& struct B : A { }; \& \& struct C : B, A { }; .Ve .IP \fB\-Wno\-inherited\-variadic\-ctor\fR 4 .IX Item "-Wno-inherited-variadic-ctor" فرونشاندن هشدارها درباره استفاده از سازنده‌های ارث‌بری‌شده C++11 هنگامی که کلاس پایه به ارث برده‌شده دارای سازنده با تعداد آرگومان متغیرِ نوع C (C variadic) باشد؛ این هشدار به‌طور پیش‌فرض روشن است زیرا علامت بیضی (...) به ارث برده نمی‌شود. .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" هشدار درباره بازنویسی (override کردن) توابع مجازی که با کلمه کلیدی \&\f(CW\*(C`override\*(C'\fR نشانه‌گذاری نشده‌اند. .IP "\fB\-Wno\-conversion\-null\fR (فقط C++ و Objective\-C++)" 4 .IX Item "-Wno-conversion-null (C++ and Objective-C++ only)" برای تبدیل‌های بین \f(CW\*(C`NULL\*(C'\fR و انواع غیر اشاره‌گر هشدار نده. \fB\-Wconversion\-null\fR به‌طور پیش‌فرض فعال است..SS "گزینه‌های کنترل‌کنندهٔ گویش‌های Objective\-C و Objective\-C++" .IX Subsection "Options Controlling Objective-C and Objective-C++ Dialects" (نکته: این راهنما خودِ زبان‌های Objective\-C و Objective\-C++ را شرح نمی‌دهد.) .PP این بخش گزینه‌های خط فرمانی را شرح می‌دهد که تنها برای برنامه‌های Objective\-C و Objective\-C++ معنادار هستند. شما همچنین می‌توانید از بیشتر گزینه‌های مستقل از زبانِ کامپایلر GNU استفاده کنید. برای نمونه، ممکن است فایلی مانند \fIsome_class.m\fR را این‌گونه کامپایل کنید: .PP .Vb 1 \& gcc \-g \-fgnu\-runtime \-O \-c some_class.m .Ve .PP در این مثال، \fB\-fgnu\-runtime\fR گزینه‌ای است که تنها برای برنامه‌های Objective\-C و Objective\-C++ در نظر گرفته شده است؛ می‌توانید سایر گزینه‌ها را با هر زبانی که توسط GCC پشتیبانی می‌شود استفاده کنید. .PP توجه داشته باشید که از آنجا که Objective\-C الحاقیه‌ای از زبان C است، کامپایل‌های Objective\-C همچنین می‌توانند از گزینه‌های ویژهٔ پیشانهٔ (front\-end) زبان C استفاده کنند (مانند \&\fB\-Wtraditional\fR). به همین شکل، کامپایل‌های Objective\-C++ نیز می‌توانند گزینه‌های خاص C++ را به کار گیرند (مانند \fB\-Wabi\fR). .PP در ادامه فهرستی از گزینه‌هایی آمده است که \fIتنها\fR برای کامپایل برنامه‌های Objective\-C و Objective\-C++ کاربرد دارند: .IP \fB\-fconstant\-string\-class=\fR\fIclass\-name\fR 4 .IX Item "-fconstant-string-class=class-name" از \fIclass\-name\fR به عنوان نام کلاسی که باید برای هر رشتهٔ مصرح (literal string) مشخص‌شده با نحو \f(CW\*(C`@"..."\*(C'\fR نمونه‌سازی شود، استفاده می‌کند. در صورت استفاده از زمان اجرای GNU، نام کلاس پیش‌فرض \f(CW\*(C`NXConstantString\*(C'\fR است و اگر از زمان اجرای NeXT استفاده شود، \&\f(CW\*(C`NSConstantString\*(C'\fR خواهد بود (پایین‌تر را ببینید). در سکوهای Darwin / macOS، گزینهٔ \fB\-fconstant\-cfstrings\fR، در صورت حضور، تنظیمات \fB\-fconstant\-string\-class\fR را لغو کرده و سبب می‌شود تا مقادیر مصرح \&\f(CW\*(C`@"..."\*(C'\fR به عنوان رشته‌های ثابت CoreFoundation چیده شوند. توجه داشته باشید که \fB\-fconstant\-cfstrings\fR نام مستعاری برای گزینهٔ معادل و وابسته به هدفِ \&\fB\-mconstant\-cfstrings\fR است. .IP \fB\-fgnu\-runtime\fR 4 .IX Item "-fgnu-runtime" تولید کد شیء (object code) سازگار با زمان اجرای استاندارد GNU Objective\-C. این حالت پیش‌فرض برای اکثر انواع سیستم‌ها است. .IP \fB\-fnext\-runtime\fR 4 .IX Item "-fnext-runtime" تولید خروجی سازگار با زمان اجرای NeXT. این پیش‌فرض برای سیستم‌های مبتنی بر NeXT، از جمله Darwin / macOS است. ماکروی \&\f(CW\*(C`_\|_NEXT_RUNTIME_\|_\*(C'\fR تعریف می‌شود اگر (و تنها اگر) از این گزینه استفاده شود. .IP \fB\-fno\-nil\-receivers\fR 4 .IX Item "-fno-nil-receivers" فرض می‌کند که تمامی ارسال‌های پیام در Objective\-C (\f(CW\*(C`[receiver message:arg]\*(C'\fR) در این واحد ترجمه، تضمین می‌کنند که گیرنده \f(CW\*(C`nil\*(C'\fR نیست. این کار اجازه می‌دهد نقاط ورود کارآمدتری در زمان اجرا مورد استفاده قرار گیرند. این گزینه تنها در ترکیب با زمان اجرای NeXT و نسخهٔ 0 یا 1 از ABI در دسترس است. .IP \fB\-fobjc\-abi\-version=\fR\fIn\fR 4 .IX Item "-fobjc-abi-version=n" استفاده از نسخهٔ \fIn\fR از ABI مربوط به Objective\-C برای زمان اجرای انتخاب‌شده. این گزینه در حال حاضر تنها برای زمان اجرای NeXT پشتیبانی می‌شود. در آن حالت، نسخهٔ 0 همان ABI سنتی (۳۲ بیتی) بدون پشتیبانی از خصوصیات (properties) و دیگر افزوده‌های Objective\-C 2.0 است. نسخهٔ 1 همان ABI سنتی (۳۲ بیتی) به همراه پشتیبانی از خصوصیات و دیگر افزوده‌های Objective\-C 2.0 است. نسخهٔ 2 همان ABI مدرن (۶۴ بیتی) است. اگر چیزی مشخص نشده باشد، پیش‌فرض روی ماشین‌های هدف ۳۲ بیتی، نسخهٔ 0 و روی ماشین‌های هدف ۶۴ بیتی، نسخهٔ 2 است. .IP \fB\-fobjc\-call\-cxx\-cdtors\fR 4 .IX Item "-fobjc-call-cxx-cdtors" برای هر کلاس Objective\-C، بررسی می‌کند که آیا متغیرهای نمونهٔ آن یک شیء C++ با سازندهٔ پیش‌فرض غیربدیهی (non\-trivial) هستند یا خیر. در این صورت، یک متد نمونهٔ ویژه به نام \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR ایجاد می‌کند که سازنده‌های پیش‌فرض غیربدیهی را روی هر یک از این متغیرهای نمونه، به ترتیب، اجرا کرده و سپس \f(CW\*(C`self\*(C'\fR را بازمی‌گرداند. به همین ترتیب، بررسی می‌کند که آیا متغیر نمونه‌ای یک شیء C++ با یک مخرب غیربدیهی است یا خیر، و در این صورت، متد ویژهٔ \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR را ایجاد می‌کند که تمام این مخرب‌های پیش‌فرض را به ترتیب معکوس اجرا می‌نماید. .Sp متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR که بدین صورت تولید می‌شوند، فقط روی متغیرهای نمونهٔ اعلان‌شده در کلاس Objective\-C فعلی عمل می‌کنند، نه متغیرهایی که از ابرکلاس‌ها به ارث رسیده‌اند. فراخوانی همهٔ این متدها در سلسله‌مراتب ارث‌بری یک شیء بر عهدهٔ زمان اجرای Objective\-C است. متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR بلافاصله پس از تخصیص نمونهٔ شیء جدید توسط زمان اجرا فراخوانی می‌شوند؛ متدهای \f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR بلافاصله پیش از آزادسازی نمونهٔ شیء توسط زمان اجرا فراخوانی می‌گردند. .Sp تا زمان این نوشته، تنها زمان اجرای NeXT روی Mac OS X 10.4 و جدیدتر از فراخوانی متدهای \f(CW\*(C`\- (id) .cxx_construct\*(C'\fR و \&\f(CW\*(C`\- (void) .cxx_destruct\*(C'\fR پشتیبانی دارد. .IP \fB\-fobjc\-direct\-dispatch\fR 4 .IX Item "-fobjc-direct-dispatch" اجازه به پرش‌های سریع به ارسال‌کننده پیام (message dispatcher). در Darwin این کار از طریق comm page انجام می‌شود. .IP \fB\-fobjc\-exceptions\fR 4 .IX Item "-fobjc-exceptions" فعال‌سازی پشتیبانی نحوی برای رسیدگی به استثناهای ساختاریافته در Objective\-C، مشابه آنچه توسط C++ ارائه می‌شود. این گزینه برای استفاده از کلیدواژه‌های \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 را می‌توان به‌گونه‌ای که گویی متغیرهای محلی هستند از درون متدهای کلاسی که در آن اعلان شده‌اند در دسترس قرار داد. این امر می‌تواند منجر به سایه‌اندازی بین متغیرهای نمونه و متغیرهای دیگری شود که یا به‌طور محلی درون یک متد کلاس، یا به‌طور سراسری با همان نام اعلان شده‌اند. مشخص کردن پرچم \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" تخلیهٔ اعلان‌های واسط برای تمام کلاس‌های دیده‌شده در فایل منبع، در فایلی به نام \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، معناشناسیِ انتساب (assign semantics) مشخص نشده باشد. .IP "\fB\-Wno\-protocol\fR (فقط Objective\-C و Objective\-C++)" 4 .IX Item "-Wno-protocol (Objective-C and Objective-C++ only)" اگر کلاسی اعلان کند که یک پروتکل را پیاده‌سازی می‌کند، برای هر متدی در آن پروتکل که توسط کلاس پیاده‌سازی نشده باشد، یک هشدار صادر می‌شود. رفتار پیش‌فرض این است که برای هر متدی که صریحاً در کلاس پیاده‌سازی نشده است هشدار صادر شود، حتی اگر پیاده‌سازی یک متد از ابرکلاس به ارث رسیده باشد. اگر از گزینهٔ \fB\-Wno\-protocol\fR استفاده کنید، متدهای به ارث رسیده از ابرکلاس به عنوان پیاده‌سازی‌شده تلقی می‌شوند و هیچ هشداری برای آنها صادر نمی‌شود..IP "\fB\-Wobjc\-root\-class\fR (فقط Objective\-C و Objective\-C++)" 4 .IX Item "-Wobjc-root-class (Objective-C and Objective-C++ only)" هشدار می‌دهد اگر یک واسط کلاس فاقد ابرکلاس باشد. برای نمونه، بیشتر کلاس‌ها از \f(CW\*(C`NSObject\*(C'\fR (یا \f(CW\*(C`Object\*(C'\fR) ارث‌بری می‌کنند. هنگام اعلان کلاس‌هایی که قرار است کلاس ریشه باشند، می‌توان با نشانه‌گذاری واسط آن‌ها با \f(CW\*(C`_\|_attribute_\|_((objc_root_class))\*(C'\fR از این هشدار صرف‌نظر کرد. .IP "\fB\-Wselector\fR (فقط Objective\-C و Objective\-C++)" 4 .IX Item "-Wselector (Objective-C and Objective-C++ only)" هشدار می‌دهد اگر در طول همگردانی، چندین متد با نوع‌های متفاوت برای یک سلکتور مشابه یافت شوند. این بررسی روی فهرست متدها در مرحله نهایی همگردانی انجام می‌شود. علاوه بر این، برای هر سلکتوری که در عبارت \f(CW@selector(...)\fR ظاهر شده و متد متناظری برای آن در طول همگردانی یافت شده باشد، بررسی انجام می‌گیرد. از آنجا که این بررسی‌ها جدول متدها را تنها در انتهای همگردانی پیمایش می‌کنند، چنانچه مرحله نهایی همگردانی به دست نیاید (برای نمونه به دلیل بروز خطا حین همگردانی، یا استفاده از گزینه \fB\-fsyntax\-only\fR)، این هشدارها تولید نمی‌شوند. .IP "\fB\-Wstrict\-selector\-match\fR (فقط Objective\-C و Objective\-C++)" 4 .IX Item "-Wstrict-selector-match (Objective-C and Objective-C++ only)" هشدار می‌دهد اگر هنگام ارسال پیام با استفاده از این سلکتور به دریافت‌کننده‌ای از نوع \f(CW\*(C`id\*(C'\fR یا \f(CW\*(C`Class\*(C'\fR، چندین متد با نوع‌های آرگومان و/یا نوع‌های بازگشتی متفاوت برای یک سلکتور مشخص یافت شود. هنگامی که این پرچم خاموش است (که رفتار پیش‌فرض است)، کامپایلر چنانچه هرگونه تفاوت یافت‌شده محدود به نوع‌هایی با اندازه و ترازبندی یکسان باشد، از چنین هشدارهایی چشم‌پوشی می‌کند. .IP "\fB\-Wundeclared\-selector\fR (فقط Objective\-C و Objective\-C++)" 4 .IX Item "-Wundeclared-selector (Objective-C and Objective-C++ only)" هشدار می‌دهد اگر عبارت \f(CW@selector(...)\fR به یک سلکتور اعلان‌نشده اشاره کند. یک سلکتور در صورتی اعلان‌نشده در نظر گرفته می‌شود که هیچ متدی با آن نام پیش از عبارت \&\f(CW@selector(...)\fR، چه به‌صورت صریح در یک اعلان \&\f(CW@interface\fR یا \f(CW@protocol\fR، و چه به‌صورت ضمنی در یک بخش \f(CW@implementation\fR، اعلان نشده باشد. این گزینه بررسی‌های خود را همیشه به محض یافتن عبارت \f(CW@selector(...)\fR انجام می‌دهد، در حالی که \fB\-Wselector\fR بررسی‌های خود را تنها در مرحله نهایی همگردانی به انجام می‌رساند. این گزینه همچنین قرارداد سبک کدنویسی مبنی بر اعلان متدها و سلکتورها پیش از استفاده را اعمال می‌کند. .IP \fB\-print\-objc\-runtime\-info\fR 4 .IX Item "-print-objc-runtime-info" سرآیند C که بزرگ‌ترین ساختار پاس‌داده‌شده با مقدار را (در صورت وجود) توصیف می‌کند، تولید می‌کند. .SS "گزینه‌های کنترل OpenMP و OpenACC (Options Controlling OpenMP and OpenACC)" .IX Subsection "Options Controlling OpenMP and OpenACC" کامپایلر GCC از افزونه‌های OpenMP برای زبان‌های C، C++‎ و Fortran با استفاده از گزینه \fB\-fopenmp\fR پشتیبانی می‌کند. به طور مشابه، افزونه‌های OpenACC نیز در هر سه زبان با گزینه \fB\-fopenacc\fR پشتیبانی می‌شوند. .IP \fB\-foffload=disable\fR 4 .IX Item "-foffload=disable" .PD 0 .IP \fB\-foffload=default\fR 4 .IX Item "-foffload=default" .IP \fB\-foffload=\fR\fItarget\-list\fR 4 .IX Item "-foffload=target-list" .PD مشخص می‌کند که کد برای کدام اهداف برون‌سپاری (offload) در OpenMP و OpenACC باید تولید شود. رفتار پیش‌فرض که معادل \fB\-foffload=default\fR است، تولید کد برای تمامی اهداف برون‌سپاری پشتیبانی‌شده است. حالت \fB\-foffload=disable\fR کد را تنها برای میزبان پشتیبان (host fallback) تولید می‌کند، در حالی که \&\fB\-foffload=\fR\fItarget\-list\fR کد را فقط برای فهرست مشخص‌شده‌ای از اهداف برون‌سپاری که با کاما از هم جدا شده‌اند، تولید می‌نماید. .Sp اهداف برون‌سپاری در قالب سه‌گانه هدف (target\-triplet) داخلی GCC مشخص می‌شوند. می‌توانید کامپایلر را با گزینه \fB\-v\fR اجرا کنید تا فهرست اهداف برون‌سپاری پیکربندی‌شده در زیر \f(CW\*(C`OFFLOAD_TARGET_NAMES\*(C'\fR نمایش داده شود. .IP \fB\-foffload\-options=\fR\fIoptions\fR 4 .IX Item "-foffload-options=options" .PD 0 .IP \fB\-foffload\-options=\fR\fItarget\-triplet\-list\fR\fB=\fR\fIoptions\fR 4 .IX Item "-foffload-options=target-triplet-list=options" .PD با گزینه \fB\-foffload\-options=\fR\fIoptions\fR، کامپایلر GCC گزینه‌های مشخص‌شده در \&\fIoptions\fR را به کامپایلرهای مربوط به تمامی اهداف برون‌سپاری فعال ارسال می‌کند. می‌توان با استفاده از ساختار \fB\-foffload\-options=\fR\fItarget\-list\fR\fB=\fR\fIoptions\fR گزینه‌هایی را مشخص کرد که تنها روی یک هدف یا اهدافی خاص اعمال شوند. بخش \&\fItarget\-list\fR فهرستی جداشده با کاما در همان قالب گزینه \&\fB\-foffload=\fR است. .Sp خط‌های فرمان نمونه عبارتند از: .Sp .Vb 3 \& \-foffload\-options=\*(Aq\-fno\-math\-errno \-ffinite\-math\-only\*(Aq \e \& \-foffload\-options=nvptx\-none=\-latomic \& \-foffload\-options=amdgcn\-amdhsa=\-march=gfx906 .Ve .IP \fB\-fopenacc\fR 4 .IX Item "-fopenacc" پردازش دستورالعمل‌های OpenACC شامل \fB#pragma acc\fR در C/C++‎ و \&\fB!$acc\fR در شکل آزاد Fortran و \&\fB!$acc\fR، \fBc$acc\fR و \&\fB*$acc\fR در شکل ثابت Fortran را فعال می‌کند. این گزینه مستلزم \fB\-pthread\fR است، بنابراین تنها روی مقصدهایی پشتیبانی می‌شود که از \fB\-pthread\fR پشتیبانی می‌کنند. .IP \fB\-fopenacc\-dim=\fR\fIgeom\fR 4 .IX Item "-fopenacc-dim=geom" ابعاد محاسباتی پیش‌فرض را برای نواحی برون‌سپاری موازی که صریحاً آن‌ها را تعیین نکرده‌اند، مشخص می‌کند. مقدار \fIgeom\fR سه‌گانه‌ای از اندازه‌های جداشده با \fB:\fR به ترتیب \fIgang\fR، \fIworker\fR و \fIvector\fR است. می‌توان یک اندازه را حذف کرد تا از مقدار پیش‌فرض مختص مقصد استفاده شود. .IP \fB\-fopenmp\fR 4 .IX Item "-fopenmp" پردازش دستورالعمل‌های OpenMP شامل \fB#pragma omp\fR، \&\fB[[omp::decl(...)]]\fR، \fB[[omp::directive(...)]]\fR و \fB[[omp::sequence(...)]]\fR در C/C++‎ را فعال می‌کند. در Fortran، گزینه \&\fB!$omp\fR و نشانگر همگردانی شرطی \fB!$\fR را فعال می‌کند. در کد مبدأ با قالب ثابت Fortran، نشانگرها همچنین می‌توانند با \&\fBc\fR یا \fB*\fR آغاز شوند. .Sp این گزینه متضمن \fB\-pthread\fR است، بنابراین فقط روی مقصدهایی که از \fB\-pthread\fR پشتیبانی دارند، کار می‌کند. همچنین \fB\-fopenmp\fR متضمن \fB\-fopenmp\-simd\fR است. .IP \fB\-fopenmp\-simd\fR 4 .IX Item "-fopenmp-simd" پردازش دستورالعمل‌های \f(CW\*(C`simd\*(C'\fR، \f(CW\*(C`declare simd\*(C'\fR، \&\f(CW\*(C`declare reduction\*(C'\fR، \f(CW\*(C`assume\*(C'\fR، \f(CW\*(C`ordered\*(C'\fR، \f(CW\*(C`scan\*(C'\fR و \f(CW\*(C`loop\*(C'\fR از OpenMP، و دستورالعمل‌های ترکیبی یا چندگانه با جزء \&\f(CW\*(C`simd\*(C'\fR را با \f(CW\*(C`#pragma omp\*(C'\fR، \&\f(CW\*(C`[[omp::directive(...)]]\*(C'\fR، \f(CW\*(C`[[omp::sequence(...)]]\*(C'\fR و \&\f(CW\*(C`[[omp::decl(...)]]\*(C'\fR در C/C++‎ و \f(CW\*(C`!$omp\*(C'\fR در Fortran فعال می‌کند. همچنین نشانگر همگردانی شرطی \fB!$\fR را در Fortran فعال می‌سازد. در کد مبدأ با قالب ثابت Fortran، نشانگرها می‌توانند با \&\fBc\fR یا \fB*\fR نیز شروع شوند. سایر دستورالعمل‌های OpenMP نادیده گرفته می‌شوند. مگر اینکه \fB\-fopenmp\fR نیز افزون بر آن مشخص شده باشد، ناحیه \f(CW\*(C`loop\*(C'\fR بدون توجه به بند \f(CW\*(C`bind\*(C'\fR تعیین‌شده، به ناحیه وظیفه جاری پیوند می‌خورد. .IP \fB\-fopenmp\-target\-simd\-clone\fR 4 .IX Item "-fopenmp-target-simd-clone" .PD 0 .IP \fB\-fopenmp\-target\-simd\-clone=\fR\fIdevice\-type\fR 4 .IX Item "-fopenmp-target-simd-clone=device-type" .PD علاوه بر ایجاد کلون‌های SIMD برای توابع نشانه‌گذاری‌شده با دستورالعمل \&\f(CW\*(C`declare simd\*(C'\fR، کامپایلر GCC هنگام فعال بودن این گزینه، برای توابع نشانه‌گذاری‌شده با دستورالعمل OpenMP به نام \f(CW\*(C`declare target\*(C'\fR که برای برداری‌سازی مناسب هستند نیز کلون ایجاد می‌کند. مقدار \&\fIdevice\-type\fR می‌تواند یکی از مقادیر \f(CW\*(C`none\*(C'\fR، \f(CW\*(C`host\*(C'\fR، \f(CW\*(C`nohost\*(C'\fR و \f(CW\*(C`any\*(C'\fR باشد که با کلیدواژه‌های بند \f(CW\*(C`device_type\*(C'\fR در دستورالعمل \f(CW\*(C`declare target\*(C'\fR مطابقت دارند؛ کلون‌ها برای اشتراک دستگاه‌های مشخص‌شده ایجاد می‌شوند. گزینه \&\fB\-fopenmp\-target\-simd\-clone\fR معادل با \&\fB\-fopenmp\-target\-simd\-clone=any\fR و \&\fB\-fno\-openmp\-target\-simd\-clone\fR معادل با \&\fB\-fopenmp\-target\-simd\-clone=none\fR است. .Sp در سطح بهینه‌سازی \fB\-O2\fR و بالاتر (به جز \fB\-Os\fR یا \fB\-Og\fR) این بهینه‌سازی به‌طور پیش‌فرض به \fB\-fopenmp\-target\-simd\-clone=nohost\fR تنظیم می‌شود؛ در غیر این صورت، به‌طور پیش‌فرض غیرفعال است..SS "گزینه‌های کنترل قالب‌بندی پیام‌های عیب‌یابی (Options to Control Diagnostic Messages Formatting)" .IX Subsection "Options to Control Diagnostic Messages Formatting" به‌طور سنتی، پیام‌های عیب‌یابی بدون در نظر گرفتن ویژگی‌های دستگاه خروجی (مانند عرض آن و...) قالب‌بندی شده‌اند. می‌توانید از گزینه‌هایی که در ادامه شرح داده شده‌اند برای کنترل الگوریتم قالب‌بندی پیام‌های عیب‌یابی استفاده کنید، مانند تعداد نویسه‌ها در هر خط یا بسامد گزارش اطلاعات مکان در کد مبدأ. توجه داشته باشید که ممکن است برخی از فرانت‌اند‌های زبان‌ها این گزینه‌ها را رعایت نکنند. .IP \fB\-fmessage\-length=\fR\fIn\fR 4 .IX Item "-fmessage-length=n" تلاش می‌کند پیام‌های خطا را به‌گونه‌ای قالب‌بندی کند که در خطوطی با حدود \&\fIn\fR نویسه جای گیرند. اگر \&\fIn\fR صفر باشد، هیچ شکستن خطی انجام نمی‌شود؛ هر پیام خطا در یک خط واحد ظاهر خواهد شد. این مقدار پیش‌فرض برای تمام فرانت‌اندها است. .Sp نکته \- این گزینه همچنین بر نمایش دستورالعمل‌های پیش‌پردازندهٔ \fB#error\fR و \&\fB#warning\fR، و صفت منسوخ‌شدهٔ \fBdeprecated\fR برای توابع/انواع/متغیرها تأثیر می‌گذارد. با این حال، بر پراگماهای \&\fBpragma GCC warning\fR و \fBpragma GCC error\fR تأثیری ندارد. .IP \fB\-fdiagnostics\-plain\-output\fR 4 .IX Item "-fdiagnostics-plain-output" این گزینه درخواست می‌کند که خروجی عیب‌یابی تا جای ممکن ساده و بی‌آلایش به نظر برسد؛ این امر ممکن است هنگام اجرای \fBdejagnu\fR یا ابزارهای دیگری که باید خروجی عیب‌یابی را تجزیه کنند و ترجیح می‌دهند این خروجی در گذر زمان پایدار بماند، مفید باشد. \&\fB\-fdiagnostics\-plain\-output\fR در حال حاضر معادل گزینه‌های زیر است: \&\fB\-fno\-diagnostics\-show\-caret \&\-fno\-diagnostics\-show\-line\-numbers \&\-fdiagnostics\-color=never \&\-fdiagnostics\-urls=never \&\-fdiagnostics\-path\-format=separate\-events \&\-fdiagnostics\-text\-art\-charset=none \&\-fno\-diagnostics\-show\-event\-links \&\-fno\-diagnostics\-show\-nesting\fR در آینده، اگر GCC ظاهر پیش‌فرض خروجی عیب‌یابی خود را تغییر دهد، گزینهٔ متناظر برای غیرفعال کردن رفتار جدید به این فهرست افزوده خواهد شد. .IP \fB\-fdiagnostics\-show\-location=once\fR 4 .IX Item "-fdiagnostics-show-location=once" تنها در حالت شکستن خط معنی‌دار است. به گزارشگر پیام‌های عیب‌یابی دستور می‌دهد که اطلاعات مکان در مبدأ را \fIیک بار\fR منتشر کند؛ یعنی در صورتی که پیام برای قرار گرفتن در یک خط فیزیکی بیش از حد طولانی باشد و شکسته شود، اطلاعات مکان در مبدأ دوباره (به‌عنوان پیشوند) و مکرراً در خطوط ادامه‌دار بعدی چاپ نخواهد شد. این رفتار پیش‌فرض است. .IP \fB\-fdiagnostics\-show\-location=every\-line\fR 4 .IX Item "-fdiagnostics-show-location=every-line" تنها در حالت شکستن خط معنی‌دار است. به گزارشگر پیام‌های عیب‌یابی دستور می‌دهد که همان اطلاعات مکان در مبدأ را (به‌عنوان پیشوند) برای خطوط فیزیکی حاصل از شکستن پیامی که در یک خط جا نشده است، منتشر کند. .IP \fB\-fdiagnostics\-color[=\fR\fIWHEN\fR\fB]\fR 4 .IX Item "-fdiagnostics-color[=WHEN]" .PD 0 .IP \fB\-fno\-diagnostics\-color\fR 4 .IX Item "-fno-diagnostics-color" .PD استفاده از رنگ در پیام‌های عیب‌یابی. مقدار \fIWHEN\fR می‌تواند \fBnever\fR، \fBalways\fR یا \fBauto\fR باشد. مقدار پیش‌فرض بستگی به نحوهٔ پیکربندی کامپایلر دارد؛ می‌تواند هر یک از گزینه‌های \fIWHEN\fR بالا باشد، یا اگر متغیر محیطی \fBGCC_COLORS\fR در محیط وجود نداشته باشد، برابر با \fBnever\fR، و در غیر این صورت \fBauto\fR باشد. \&\fBauto\fR باعث می‌شود GCC تنها زمانی از رنگ استفاده کند که خروجی خطای استاندارد به یک پایانه متصل باشد، و در یک پوستهٔ emacs اجرا نشود. صورت‌های \fB\-fdiagnostics\-color\fR و \fB\-fno\-diagnostics\-color\fR به‌ترتیب نام‌های مستعار برای \fB\-fdiagnostics\-color=always\fR و \&\fB\-fdiagnostics\-color=never\fR هستند. .Sp رنگ‌ها توسط متغیر محیطی \fBGCC_COLORS\fR تعریف می‌شوند. مقدار آن فهرستی از قابلیت‌ها و زیررشته‌های Select Graphic Rendition (SGR) است که با دو‌نقطه از هم جدا شده‌اند. دستورات SGR توسط پایانه یا شبیه‌ساز پایانه تفسیر می‌شوند. (برای مقادیر مجاز و معانی آن‌ها به‌عنوان صفت‌های نویسه، بخش مربوطه در مستندات پایانهٔ متنی خود را ببینید.) این مقادیر زیررشته، اعدادی صحیح در نمایش ده‌دهی هستند و می‌توانند با نقطه‌ویرگول ترکیب شوند. مقادیر متداول برای ترکیب عبارتند از: \&\fB1\fR برای پررنگ (bold)، \&\fB4\fR برای زیرخط (underline)، \&\fB5\fR برای چشمک‌زن (blink)، \&\fB7\fR برای نگاتیو/معکوس (inverse)، \&\fB39\fR برای رنگ پیش‌فرض پیش‌زمینه، \&\fB30\fR تا \fB37\fR برای رنگ‌های پیش‌زمینه، \&\fB90\fR تا \fB97\fR برای رنگ‌های پیش‌زمینه در حالت ۱۶ رنگ، \&\fB38;5;0\fR تا \fB38;5;255\fR برای رنگ‌های پیش‌زمینه در حالت‌های ۸۸ رنگ و ۲۵۶ رنگ، \&\fB49\fR برای رنگ پیش‌فرض پس‌زمینه، \&\fB40\fR تا \fB47\fR برای رنگ‌های پس‌زمینه، \&\fB100\fR تا \fB107\fR برای رنگ‌های پس‌زمینه در حالت ۱۶ رنگ، و \fB48;5;0\fR تا \fB48;5;255\fR برای رنگ‌های پس‌زمینه در حالت‌های ۸۸ رنگ و ۲۵۶ رنگ. .Sp مقدار پیش‌فرض \fBGCC_COLORS\fR برابر است با: .Sp .Vb 5 \& error=01;31:warning=01;35:note=01;36:range1=32:range2=34:locus=01:\e \& quote=01:path=01;36:fixit\-insert=32:fixit\-delete=31:\e \& diff\-filename=01:diff\-hunk=32:diff\-delete=31:diff\-insert=32:\e \& type\-diff=01;32:fnname=01;32:targs=35:valid=01;31:invalid=01;32\e \& highlight\-a=01;32:highlight\-b=01;34 .Ve .Sp که در آن \fB01;31\fR قرمز پررنگ، \fB01;35\fR سرخابی پررنگ، \&\fB01;36\fR فیروزه‌ای پررنگ، \fB32\fR سبز، \fB34\fR آبی، \&\fB01\fR پررنگ، و \fB31\fR قرمز است. تنظیم \fBGCC_COLORS\fR روی یک رشتهٔ خالی رنگ‌ها را غیرفعال می‌کند. قابلیت‌های پشتیبانی‌شده به شرح زیر هستند: .RS 4 .ie n .IP """error=""" 4 .el .IP \f(CWerror=\fR 4 .IX Item "error=" زیررشتهٔ SGR برای نشانگرهای :error. .ie n .IP """warning=""" 4 .el .IP \f(CWwarning=\fR 4 .IX Item "warning=" زیررشتهٔ SGR برای نشانگرهای :warning. .ie n .IP """note=""" 4 .el .IP \f(CWnote=\fR 4 .IX Item "note=" زیررشتهٔ SGR برای نشانگرهای :note. .ie n .IP """path=""" 4 .el .IP \f(CWpath=\fR 4 .IX Item "path=" زیررشتهٔ SGR برای رنگ‌آمیزی مسیرهای رویدادهای جریان کنترل آن‌طور که توسط \fB\-fdiagnostics\-path\-format=\fR چاپ می‌شوند، مانند شناسه‌های رویدادهای مجزا و خطوط نشان‌دهندهٔ فراخوانی‌ها و بازگشت‌های بین‌رویه‌ای. .ie n .IP """range1=""" 4 .el .IP \f(CWrange1=\fR 4 .IX Item "range1=" زیررشتهٔ SGR برای نخستین محدودهٔ اضافی. .ie n .IP """range2=""" 4 .el .IP \f(CWrange2=\fR 4 .IX Item "range2=" زیررشتهٔ SGR برای دومین محدودهٔ اضافی. .ie n .IP """locus=""" 4 .el .IP \f(CWlocus=\fR 4 .IX Item "locus=" زیررشتهٔ SGR برای اطلاعات مکان، \&\fBfile:line\fR یا \&\fBfile:line:column\fR و غیره. .ie n .IP """quote=""" 4 .el .IP \f(CWquote=\fR 4 .IX Item "quote=" زیررشتهٔ SGR برای اطلاعاتی که درون گیومه چاپ می‌شوند. .ie n .IP """fnname=""" 4 .el .IP \f(CWfnname=\fR 4 .IX Item "fnname=" زیررشتهٔ SGR برای نام توابع ++C. .ie n .IP """targs=""" 4 .el .IP \f(CWtargs=\fR 4 .IX Item "targs=" زیررشتهٔ SGR برای مقیدسازی پارامترهای الگوی توابع ++C. .ie n .IP """fixit\-insert=""" 4 .el .IP \f(CWfixit\-insert=\fR 4 .IX Item "fixit-insert=" زیررشتهٔ SGR برای راهنمایی‌های fix\-it که متن پیشنهادی برای درج یا جایگزینی را مشخص می‌کنند. .ie n .IP """fixit\-delete=""" 4 .el .IP \f(CWfixit\-delete=\fR 4 .IX Item "fixit-delete=" زیررشتهٔ SGR برای راهنمایی‌های fix\-it که متن پیشنهادی برای حذف را مشخص می‌کنند. .ie n .IP """diff\-filename=""" 4 .el .IP \f(CWdiff\-filename=\fR 4 .IX Item "diff-filename=" زیررشتهٔ SGR برای سرایندهای نام فایل درون وصله‌های تولیدشده. .ie n .IP """diff\-hunk=""" 4 .el .IP \f(CWdiff\-hunk=\fR 4 .IX Item "diff-hunk=" زیررشتهٔ SGR برای آغاز قطعه‌ها (hunkها) درون وصله‌های تولیدشده. .ie n .IP """diff\-delete=""" 4 .el .IP \f(CWdiff\-delete=\fR 4 .IX Item "diff-delete=" زیررشتهٔ SGR برای خطوط حذف‌شده درون وصله‌های تولیدشده. .ie n .IP """diff\-insert=""" 4 .el .IP \f(CWdiff\-insert=\fR 4 .IX Item "diff-insert=" زیررشتهٔ SGR برای خطوط درج‌شده درون وصله‌های تولیدشده. .ie n .IP """type\-diff=""" 4 .el .IP \f(CWtype\-diff=\fR 4 .IX Item "type-diff=" زیررشتهٔ SGR برای برجسته‌سازی انواع ناهمخوان درون آرگومان‌های الگو در فرانت‌اند ++C. .ie n .IP """valid=""" 4 .el .IP \f(CWvalid=\fR 4 .IX Item "valid=" زیررشتهٔ SGR برای برجسته‌سازی عناصر معتبر درون دیاگرام‌های هنر متنی (text art). .ie n .IP """invalid=""" 4 .el .IP \f(CWinvalid=\fR 4 .IX Item "invalid=" زیررشتهٔ SGR برای برجسته‌سازی عناصر نامعتبر درون دیاگرام‌های هنر متنی. .ie n .IP """highlight\-a=""" 4 .el .IP \f(CWhighlight\-a=\fR 4 .IX Item "highlight-a=".PD 0 .ie n .IP """highlight\-b=""" 4 .el .IP \f(CWhighlight\-b=\fR 4 .IX Item "highlight-b=" .PD زیررشته‌های SGR برای ایجاد تمایز میان دو چیز متفاوت درون پیام‌های تشخیصی، مانند یک جفت از نوع‌های ناهماهنگ. بخش \fB\-fdiagnostics\-show\-highlight\-colors\fR را ببینید. .RE .RS 4 .RE .IP \fB\-fdiagnostics\-urls[=\fR\fIWHEN\fR\fB]\fR 4 .IX Item "-fdiagnostics-urls[=WHEN]" استفاده از توالی‌های گریز (escape sequences) برای جاسازی پیوندها (URLها) در پیام‌های تشخیصی. برای نمونه، هنگامی که \&\fB\-fdiagnostics\-show\-option\fR متنی را منتشر می‌کند که گزینه خط فرمانی کنترل‌کننده پیام تشخیصی را نشان می‌دهد، یک پیوند برای مستندات آن گزینه جاسازی می‌شود. .Sp مقدار \&\fIWHEN\fR برابر با \fBnever\fR، \fBalways\fR یا \fBauto\fR است. مقدار \&\fBauto\fR باعث می‌شود GCC تنها زمانی از توالی‌های گریز URL استفاده کند که خروجی خطای استاندارد یک ترمینال باشد، و در یک پوسته emacs یا هر ترمینال گرافیکی که ناسازگاری آن با این قابلیت شناخته شده است اجرا نشود؛ توضیحات زیر را ببینید. .Sp مقدار پیش‌فرض بستگی به نحوه پیکربندی کامپایلر دارد. می‌تواند هر یک از مقدارهای \fIWHEN\fR در بالا باشد. .Sp همچنین می‌توان GCC را (از طریق گزینه زمان پیکربندی \&\fB\-\-with\-diagnostics\-urls=auto\-if\-env\fR) به‌گونه‌ای پیکربندی کرد که مقدار پیش‌فرض تحت تأثیر متغیرهای محیطی قرار گیرد. تحت چنین پیکربندی، چنانچه هر یک از متغیرهای محیطی \fBGCC_URLS\fR یا \fBTERM_URLS\fR در محیط کامپایلر وجود داشته و غیرخالی باشند، مقدار پیش‌فرض GCC به \fBauto\fR تغییر می‌کند، یا در صورتی که هیچ‌کدام وجود نداشته باشند به \fBnever\fR تبدیل می‌شود. .Sp با این حال، حتی با \fB\-fdiagnostics\-urls=always\fR نیز این رفتار وابسته به متغیرهای محیطی یادشده است: اگر \fBGCC_URLS\fR روی مقدار خالی یا \fBno\fR تنظیم شده باشد، پیوندهای URL در پیام‌های تشخیصی جاسازی نمی‌شوند. اگر روی \fBst\fR تنظیم شود، پیوندها از توالی‌های گریز ST استفاده می‌کنند. اگر روی \fBbel\fR (پیش‌فرض) تنظیم شود، پیوندها از توالی‌های گریز BEL استفاده می‌کنند. هر مقدار غیرخالی دیگری این قابلیت را فعال می‌کند. اگر \fBGCC_URLS\fR تنظیم نشده باشد، از \fBTERM_URLS\fR به‌عنوان جایگزین استفاده می‌شود. نکته: ST یک توالی گریز ANSI، یعنی پایان‌دهنده رشته \fBESC \e\fR است؛ BEL یک نویسه ASCII یعنی CTRL\-G است که معمولاً صدایی مانند بوق (beep) ایجاد می‌کند. .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" به‌طور پیش‌فرض، هر پیام تشخیصی منتشرشده شامل خط اصلی سورس‌کد و یک علامت هشتک (caret) \fB^\fR برای نشان دادن ستون است. این گزینه این اطلاعات را حذف می‌کند. چنانچه گزینه \fB\-fmessage\-length=n\fR مشخص شده باشد، خط منبع به \fIn\fR نویسه بریده می‌شود. هنگامی که خروجی به ترمینال فرستاده می‌شود، عرض خط به عرض داده‌شده توسط متغیر محیطی \&\fBCOLUMNS\fR، یا در صورت تنظیم نشدن، به عرض ترمینال محدود می‌شود. .IP \fB\-fno\-diagnostics\-show\-labels\fR 4 .IX Item "-fno-diagnostics-show-labels" به‌طور پیش‌فرض، هنگام چاپ سورس‌کد (از طریق \fB\-fdiagnostics\-show\-caret\fR)، پیام‌های تشخیصی می‌توانند محدوده‌هایی از کد منبع را با اطلاعات مرتبط برچسب‌گذاری کنند، مانند نوع عبارت‌ها: .Sp .Vb 4 \& printf ("foo %s bar", long_i + long_j); \& ~^ ~~~~~~~~~~~~~~~ \& | | \& char * long int .Ve .Sp این گزینه از چاپ این برچسب‌ها جلوگیری می‌کند (در مثال بالا، خط‌های عمودی و متن‌های "char *" و "long int"). .IP \fB\-fno\-diagnostics\-show\-event\-links\fR 4 .IX Item "-fno-diagnostics-show-event-links" به‌طور پیش‌فرض، هنگام چاپ مسیرهای اجرا (از طریق \&\fB\-fdiagnostics\-path\-format=inline\-events\fR)، GCC خطوطی را برای متصل کردن رویدادهای مرتبط چاپ می‌کند، مانند خطی که رویدادهای ۱ و ۲ را در نمونه زیر به هم پیوند می‌دهد: .Sp .Vb 10 \& 3 | if (p) \& | ^ \& | | \& | (1) following \`false\*(Aq branch (when \`p\*(Aq is NULL)... \->\-+ \& | | \& | | \& |+\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-+ \& 4 || return 0; \& 5 || return *p; \& || ~ \& || | \& |+\-\-\-\-\-\-\-\->(2) ...to here \& | (3) dereference of NULL \`p\*(Aq .Ve .Sp این گزینه چاپ چنین خطوط اتصال‌دهنده‌ای را متوقف می‌کند. .IP \fB\-fno\-diagnostics\-show\-cwe\fR 4 .IX Item "-fno-diagnostics-show-cwe" پیام‌های تشخیصی می‌توانند به صورت اختیاری یک شناسه مرتبط با CWE (\f(CW\*(C`https://cwe.mitre.org/index.html\*(C'\fR) داشته باشند. خود GCC این فراداده را تنها برای برخی از پیام‌های تشخیصی \fB\-fanalyzer\fR ارائه می‌دهد. همچنین افزایه‌های GCC نیز ممکن است پیام‌های تشخیصی همراه با چنین فراداده‌ای ارائه دهند. به‌طور پیش‌فرض، اگر این اطلاعات موجود باشد، همراه با پیام تشخیصی چاپ خواهد شد. این گزینه از چاپ این فراداده جلوگیری می‌کند. .IP \fB\-fno\-diagnostics\-show\-rules\fR 4 .IX Item "-fno-diagnostics-show-rules" پیام‌های تشخیصی می‌توانند به‌طور اختیاری قواعدی وابسته به خود داشته باشند، مانند قواعدی برگرفته از یک استاندارد کدنویسی یا یک مشخصات فنی. خود GCC این کار را برای هیچ‌یک از پیام‌های تشخیصی خود انجام نمی‌دهد، اما افزایه‌ها ممکن است چنین کنند. به‌طور پیش‌فرض، چنانچه این اطلاعات موجود باشد، همراه با پیام تشخیصی چاپ خواهد شد. این گزینه چاپ این فراداده را متوقف می‌کند. .IP \fB\-fno\-diagnostics\-show\-highlight\-colors\fR 4 .IX Item "-fno-diagnostics-show-highlight-colors" کامپایلر GCC می‌تواند هنگام چاپ پیام‌های تشخیصی و نقل کد منبع کاربر، از رنگ‌ها برای تأکید و ایجاد تمایز استفاده کند. .Sp برای نمونه، در: .Sp .Vb 7 \& demo.c: In function \`test_bad_format_string_args\*(Aq: \& ../../src/demo.c:25:18: warning: format \`%i\*(Aq expects argument of type \`int\*(Aq, but argument 2 has type \`const char *\*(Aq [\-Wformat=] \& 25 | printf("hello %i", msg); \& | ~^ ~~~ \& | | | \& | int const char * \& | %s .Ve .RS 4 .IP * 4 عبارت‌های \f(CW%i\fR و \f(CW\*(C`int\*(C'\fR در پیام و \f(CW\*(C`int\*(C'\fR در کد منبع نقل‌شده، با استفاده از \f(CW\*(C`highlight\-a\*(C'\fR (به‌طور پیش‌فرض سبز برجسته) رنگ‌آمیزی می‌شوند، و .IP * 4 عبارت‌های \f(CW\*(C`const char *\*(C'\fR در پیام و در کد منبع نقل‌شده، هر دو با استفاده از \f(CW\*(C`highlight\-b\*(C'\fR (به‌طور پیش‌فرض آبی برجسته) رنگ‌آمیزی می‌شوند. .RE .RS 4 .Sp هدف از این کار جلب نگاه خواننده به روابط میان جنبه‌های مختلف پیام تشخیصی و کد منبع است، با بهره‌گیری از رنگ برای گروه‌بندی عناصر مرتبط و متمایز ساختن موارد ناهمخوان. .Sp این رنگ‌آمیزی اضافی در صورتی که چاپ رنگی فعال باشد (مطابق با \fB\-fdiagnostics\-color=\fR) به‌طور پیش‌فرض فعال است، اما می‌توان آن را به‌طور جداگانه از طریق \fB\-fno\-diagnostics\-show\-highlight\-colors\fR غیرفعال کرد. .RE .IP \fB\-fno\-diagnostics\-show\-line\-numbers\fR 4 .IX Item "-fno-diagnostics-show-line-numbers" به‌طور پیش‌فرض، هنگام چاپ سورس‌کد (از طریق \fB\-fdiagnostics\-show\-caret\fR)، حاشیه سمت چپی چاپ می‌شود که شماره خطوط را نشان می‌دهد. این گزینه این حاشیه سمت چپ را حذف می‌کند. .IP \fB\-fdiagnostics\-minimum\-margin\-width=\fR\fIwidth\fR 4 .IX Item "-fdiagnostics-minimum-margin-width=width" این گزینه کمینه عرض حاشیه سمت چپ چاپ‌شده توسط \&\fB\-fdiagnostics\-show\-line\-numbers\fR را کنترل می‌کند. مقدار پیش‌فرض آن 6 است. .IP \fB\-fdiagnostics\-show\-context[=\fR\fIdepth\fR\fB]\fR 4 .IX Item "-fdiagnostics-show-context[=depth]" .PD 0 .IP \fB\-fno\-diagnostics\-show\-context\fR 4 .IX Item "-fno-diagnostics-show-context" .PD با این گزینه، کامپایلر ممکن است زنجیره جریان کنترل مهمی را که محافظ بلوک پایه دستور دارای هشدار است، چاپ کند. \&\fIdepth\fR حداکثر عمق زنجیره جریان کنترل است. در حال حاضر، فهرست گزینه‌های هشدار متأثر شامل این موارد است: \&\fB\-Warray\-bounds\fR، \fB\-Wstringop\-overflow\fR، \&\fB\-Wstringop\-overread\fR، \fB\-Wstringop\-truncation\fR و \fB\-Wrestrict\fR. ممکن است گزینه‌های هشدار بیشتری در نگارش‌های آینده به این فهرست افزوده شوند. شکل‌های \fB\-fdiagnostics\-show\-context\fR و \&\fB\-fno\-diagnostics\-show\-context\fR به ترتیب نام‌های مستعار برای \&\fB\-fdiagnostics\-show\-context=1\fR و \&\fB\-fdiagnostics\-show\-context=0\fR هستند..IP \fB\-fdiagnostics\-parseable\-fixits\fR 4 .IX Item "-fdiagnostics-parseable-fixits" راهنماهای اصلاح (fix\-it hints) را در قالبی با قابلیت تجزیه توسط ماشین که برای استفاده در محیط‌های توسعه (IDE) مناسب است صادر می‌کند. برای هر اصلاح، خطی پس از پیام تشخیصِ مربوطه چاپ خواهد شد که با رشته‌ی "fix\-it:" آغاز می‌شود. برای مثال: .Sp .Vb 1 \& fix\-it:"test.c":{45:3\-45:21}:"gtk_widget_show_all" .Ve .Sp موقعیت به صورت یک بازه‌ی نیمه‌باز بر حسب تعداد بایت‌ها مشخص می‌شود که از بایت ۱ برای ستون ابتدایی شروع می‌گردد. در مثال فوق، بایت‌های ۳ تا ۲۰ از خط ۴۵ فایل "test.c" باید با رشته‌ی داده‌شده جایگزین شوند: .Sp .Vb 5 \& 00000000011111111112222222222 \& 12345678901234567890123456789 \& gtk_widget_showall (dlg); \& ^^^^^^^^^^^^^^^^^^ \& gtk_widget_show_all .Ve .Sp نام فایل و رشته‌ی جایگزین، نویسه‌ی بک‌اسلش را با "\e\e"، نویسه‌ی تب را با "\et"، خط جدید را با "\en"، نقل‌قول دوگانه را با "\e""، و نویسه‌های غیرقابل‌چاپ را با مبنای هشت (مثلاً تب عمودی با "\e013") گریز می‌دهند (escape می‌کنند). .Sp یک رشته‌ی جایگزینِ خالی نشان می‌دهد که بازه‌ی مشخص‌شده باید حذف گردد. یک بازه‌ی خالی (مانند "45:3\-45:3") نشان می‌دهد که رشته باید در موقعیت داده‌شده درج شود. .IP \fB\-fdiagnostics\-generate\-patch\fR 4 .IX Item "-fdiagnostics-generate-patch" راهنماهای اصلاح را پس از چاپ هر پیام تشخیصی، در قالب تفاضل یکپارچه (unified diff) در stderr چاپ می‌کند. برای مثال: .Sp .Vb 3 \& \-\-\- test.c \& +++ test.c \& @ \-42,5 +42,5 @ \& \& void show_cb(GtkDialog *dlg) \& { \& \- gtk_widget_showall(dlg); \& + gtk_widget_show_all(dlg); \& } .Ve .Sp خروجی diff بسته به همان قواعد مربوط به پیام‌های تشخیص، ممکن است رنگی باشد یا نباشد (به \fB\-fdiagnostics\-color\fR مراجعه کنید). .IP \fB\-fdiagnostics\-show\-template\-tree\fR 4 .IX Item "-fdiagnostics-show-template-tree" در فرانت‌اند C++، هنگام چاپ پیام‌های تشخیصی که عدم تطابق نوع‌های الگو (template) را نشان می‌دهند، مانند: .Sp .Vb 2 \& could not convert \*(Aqstd::map >()\*(Aq \& from \*(Aqmap<[...],vector>\*(Aq to \*(Aqmap<[...],vector> .Ve .Sp پرچم \fB\-fdiagnostics\-show\-template\-tree\fR چاپ یک ساختار درخت‌مانند را فعال می‌کند که بخش‌های مشترک و متمایز این نوع‌ها را نشان می‌دهد، مانند: .Sp .Vb 4 \& map< \& [...], \& vector< \& [double != float]>> .Ve .Sp بخش‌هایی که تفاوت دارند با رنگ برجسته می‌شوند (در این مورد "double" و "float"). .IP \fB\-fno\-elide\-type\fR 4 .IX Item "-fno-elide-type" به‌طور پیش‌فرض، هنگامی که فرانت‌اند C++ پیام‌های تشخیصی حاوی عدم تطابق نوع‌های الگو را چاپ می‌کند، بخش‌های مشترک نوع‌ها به صورت "[...]" چاپ می‌شوند تا پیام خطا ساده‌تر شود. برای مثال: .Sp .Vb 2 \& could not convert \*(Aqstd::map >()\*(Aq \& from \*(Aqmap<[...],vector>\*(Aq to \*(Aqmap<[...],vector> .Ve .Sp تعیین پرچم \fB\-fno\-elide\-type\fR مانع این رفتار می‌شود. این پرچم همچنین بر خروجی پرچم \&\fB\-fdiagnostics\-show\-template\-tree\fR تأثیر می‌گذارد. .IP \fB\-fdiagnostics\-path\-format=\fR\fIKIND\fR 4 .IX Item "-fdiagnostics-path-format=KIND" نحوه‌ی چاپ مسیرهای رویدادهای جریان کنترل را برای پیام‌های تشخیصی که دارای چنین مسیری هستند، مشخص می‌کند. .Sp مقدار \&\fIKIND\fR می‌تواند \fBnone\fR، \fBseparate\-events\fR، یا حالت پیش‌فرض \fBinline\-events\fR باشد. .Sp مقدار \&\fBnone\fR به این معناست که مسیرهای تشخیص چاپ نشوند. .Sp مقدار \&\fBseparate\-events\fR به این معناست که برای هر رویداد در جریان تشخیص، یک پیام تشخیصی جداگانه از نوع "note" چاپ شود. برای مثال: .Sp .Vb 4 \& test.c:29:5: error: passing NULL as argument 1 to \*(AqPyList_Append\*(Aq which requires a non\-NULL parameter \& test.c:25:10: note: (1) when \*(AqPyList_New\*(Aq fails, returning NULL \& test.c:27:3: note: (2) when \*(Aqi < count\*(Aq \& test.c:29:5: note: (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1 .Ve .Sp مقدار \&\fBinline\-events\fR به این معناست که رویدادها به‌صورت «درون‌خطی» (inline) در داخل کد منبع چاپ شوند. این نما تلاش می‌کند رویدادها را در توالی‌هایی از رویدادهای به حد کافی نزدیک به هم ادغام کرده و آن‌ها را به‌صورت بازه‌های برچسب‌دار در کد منبع چاپ کند. .Sp برای مثال، همان رویدادهای بالا ممکن است به این صورت چاپ شوند: .Sp .Vb 10 \& \*(Aqtest\*(Aq: events 1\-3 \& 25 | list = PyList_New(0); \& | ^~~~~~~~~~~~~ \& | | \& | (1) when \*(AqPyList_New\*(Aq fails, returning NULL \& 26 | \& 27 | for (i = 0; i < count; i++) { \& | ~~~ \& | | \& | (2) when \*(Aqi < count\*(Aq \& 28 | item = PyLong_FromLong(random()); \& 29 | PyList_Append(list, item); \& | ~~~~~~~~~~~~~~~~~~~~~~~~~ \& | | \& | (3) when calling \*(AqPyList_Append\*(Aq, passing NULL from (1) as argument 1 .Ve .Sp جریان کنترل بین‌رویه‌ای (interprocedural) با گروه‌بندی رویدادها بر اساس قاب پشته (stack frame) و استفاده از تورفتگی جهت نمایش چگونگی تودرتو شدن، درج در پشته (push) و خروج از پشته (pop) قاب‌های پشته نمایش داده می‌شود. .Sp برای مثال: .Sp .Vb 10 \& \*(Aqtest\*(Aq: events 1\-2 \& | \& | 133 | { \& | | ^ \& | | | \& | | (1) entering \*(Aqtest\*(Aq \& | 134 | boxed_int *obj = make_boxed_int (i); \& | | ~~~~~~~~~~~~~~~~~~ \& | | | \& | | (2) calling \*(Aqmake_boxed_int\*(Aq \& | \& +\-\-> \*(Aqmake_boxed_int\*(Aq: events 3\-4 \& | \& | 120 | { \& | | ^ \& | | | \& | | (3) entering \*(Aqmake_boxed_int\*(Aq \& | 121 | boxed_int *result = (boxed_int *)wrapped_malloc (sizeof (boxed_int)); \& | | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \& | | | \& | | (4) calling \*(Aqwrapped_malloc\*(Aq \& | \& +\-\-> \*(Aqwrapped_malloc\*(Aq: events 5\-6 \& | \& | 7 | { \& | | ^ \& | | | \& | | (5) entering \*(Aqwrapped_malloc\*(Aq \& | 8 | return malloc (size); \& | | ~~~~~~~~~~~~~ \& | | | \& | | (6) calling \*(Aqmalloc\*(Aq \& | \& <\-\-\-\-\-\-\-\-\-\-\-\-\-+ \& | \& \*(Aqtest\*(Aq: event 7 \& | \& | 138 | free_boxed_int (obj); \& | | ^~~~~~~~~~~~~~~~~~~~ \& | | | \& | | (7) calling \*(Aqfree_boxed_int\*(Aq \& | \& (etc) .Ve.IP \fB\-fdiagnostics\-show\-path\-depths\fR 4 .IX Item "-fdiagnostics-show-path-depths" این گزینه هنگام چاپ مسیرهای جریان کنترل مربوط به یک پیام تشخیصی، اطلاعات تکمیلی ارائه می‌دهد. .Sp اگر این گزینه مشخص شود، عمق پشته برای هر توالی از رویدادها درون \fB\-fdiagnostics\-path\-format=inline\-events\fR چاپ خواهد شد. اگر همراه با \fB\-fdiagnostics\-path\-format=separate\-events\fR مشخص شود، عمق پشته و اعلان تابع هنگام چاپ هر رویداد ضمیمه خواهد شد. .Sp این گزینه برای استفادهٔ توسعه‌دهندگان GCC و توسعه‌دهندگان افزونه‌ها هنگام اشکال‌زدایی پیام‌های تشخیصی که جریان کنترل بین‌روالی را گزارش می‌دهند در نظر گرفته شده است. .IP \fB\-fno\-show\-column\fR 4 .IX Item "-fno-show-column" از چاپ شماره‌های ستون در پیام‌های تشخیصی خودداری می‌کند. این امر ممکن است در مواردی که پیام‌های تشخیصی توسط برنامه‌ای پیمایش می‌شوند که شماره‌های ستون را درک نمی‌کند، مانند \fBdejagnu\fR، ضروری باشد. .IP \fB\-fdiagnostics\-column\-unit=\fR\fIUNIT\fR 4 .IX Item "-fdiagnostics-column-unit=UNIT" واحدهای مربوط به شمارهٔ ستون را مشخص می‌کند. این گزینه بر پیام‌های تشخیصی سنتی (در نبود \fB\-fno\-show\-column\fR) اثر می‌گذارد. .Sp مقدار پیش‌فرض \fIUNIT\fR، یعنی \fBdisplay\fR، تعداد ستون‌های نمایشی اشغال‌شده توسط هر نویسه را در نظر می‌گیرد. این مقدار در مورد نویسه‌های برگه (tab) می‌تواند بزرگ‌تر از تعداد بایت‌های موردنیاز برای کدگذاری نویسه باشد، یا در مورد نویسه‌های چندبایتی کوچک‌تر باشد. برای مثال، نویسهٔ «GREEK SMALL LETTER PI (U+03C0)» یک ستون نمایش را اشغال می‌کند و کدگذاری UTF\-8 آن به دو بایت نیاز دارد؛ نویسهٔ «SLIGHTLY SMILING FACE (U+1F642)» دو ستون نمایش را اشغال کرده و کدگذاری UTF\-8 آن به چهار بایت احتیاج دارد. .Sp تنظیم \fIUNIT\fR روی \fBbyte\fR، شمارهٔ ستون را در همهٔ موارد به تعداد بایت‌های خام تغییر می‌دهد، همان‌گونه که در 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 ناصحیح (malformed)، یا مشکلات مربوط به نرمال‌سازی Unicode. این پیام‌های تشخیصی علامت‌گذاری می‌شوند تا GCC هنگام چاپ خطوط مبدأ مرتبط، بایت‌هایی را که نویسه‌های ASCII قابل‌چاپ نیستند، نویسه‌گردانی (escape) کند. .Sp این گزینه نحوهٔ نویسه‌گردانی چنین بایت‌هایی را واپایش می‌کند. .Sp مقدار پیش‌فرض \fIFORMAT\fR، یعنی \fBunicode\fR، نویسه‌های Unicode غیرقابل‌چاپ در ASCII را به شکل \fB\fR نمایش می‌دهد، و بایت‌هایی که با یک نویسهٔ Unicode با کدگذاری معتبر در UTF\-8 تطابق ندارند به‌صورت شانزده‌شانزدهی و به شکل \fB\fR نمایش داده خواهند شد. .Sp برای مثال، یک خط مبدأ شامل رشتهٔ \fBbefore\fR و به دنبال آن نویسهٔ Unicode با شناسهٔ 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 تمامی بایت‌های غیرقابل‌چاپ ASCII را به شکل \fB\fR نمایش می‌دهد، و بدین ترتیب کدگذاری زیرین نویسه‌های یونیکد غیر-ASCII را نشان می‌دهد. برای مثال بالا، خروجی زیر چاپ خواهد شد: .Sp .Vb 1 \& before<80>after .Ve .IP \fB\-fdiagnostics\-text\-art\-charset=\fR\fICHARSET\fR 4 .IX Item "-fdiagnostics-text-art-charset=CHARSET" برخی پیام‌های تشخیصی می‌توانند شامل نمودارهای «هنر متنی» (text art) باشند: مصورسازی‌هایی که از متن ساخته شده‌اند و هدف آن‌ها نمایش در قلم‌هایی با عرض ثابت (monospaced) است. .Sp این گزینه مشخص می‌کند که در صورت وجود، چه نویسه‌هایی باید برای چاپ چنین نمودارهایی استفاده شوند. مقدار \fICHARSET\fR برابر با \fBnone\fR، \fBascii\fR، \fBunicode\fR، یا \fBemoji\fR است. .Sp مقدار \fBnone\fR چاپ چنین نمودارهایی را متوقف می‌کند. مقدار \fBascii\fR تضمین می‌کند که این نمودارها صرفاً از ASCII تشکیل شوند («هنر ASCII»). مقدار \fBunicode\fR امکان استفادهٔ محافظه‌کارانه از نویسه‌های ترسیمی یونیکد (مانند نویسه‌های رسم جعبه) را فراهم می‌کند. مقدار \fBemoji\fR امکان افزودن ایموجی به خروجی را نیز مهیا می‌سازد (مانند درج U+26A0 WARNING SIGN و به دنبال آن U+FE0F VARIATION SELECTOR\-16 جهت انتخاب نگارش ایموجی آن نویسه). .Sp مقدار پیش‌فرض \fBemoji\fR است، مگر زمانی که متغیر محیطی \fBLANG\fR روی \fBC\fR تنظیم شده باشد، که در این صورت پیش‌فرض \fBascii\fR خواهد بود. .IP \fB\-fno\-diagnostics\-show\-nesting\fR 4 .IX Item "-fno-diagnostics-show-nesting" برخی از پیام‌های تشخیصی GCC ساختار درونی درخت‌مانندی از پیام‌های تشخیصی فرعی تودرتو دارند، مانند مواردی که در هنگام نمونه‌سازی الگوهای ++C رخ می‌دهند. .Sp به‌طور پیش‌فرض، GCC از تورفتگی و نشانه‌های نقطه‌ای (bullet points) در خروجی متنی خود برای نمایش ساختار تودرتوی این پیام‌های تشخیصی استفاده می‌کند، اطلاعات مکان را به خطوط جداگانه منتقل می‌کند تا ساختار خواناتر شود، و اطلاعات تکراری و زائد را حذف می‌کند. .Sp انتخاب \fB\-fno\-diagnostics\-show\-nesting\fR این تورفتگی، تغییر قالب‌بندی و حذف اطلاعات زائد را متوقف کرده و «نمای» قدیمی‌تر پیام‌های تشخیصی را بازیابی می‌کند. .IP \fB\-fno\-diagnostics\-show\-nesting\-locations\fR 4 .IX Item "-fno-diagnostics-show-nesting-locations" هنگامی که \fBfdiagnostics\-show\-nesting\fR فعال باشد، نام فایل‌ها و شماره‌های خط و ستون در خطوطی جدا از متن پیام‌ها نمایش داده می‌شوند. این اطلاعات مکانی را می‌توان به‌طور کامل با \&\fB\-fno\-diagnostics\-show\-nesting\-locations\fR غیرفعال کرد. این گزینه برای استفادهٔ توسعه‌دهندگان GCC هنگام نگارش موارد آزمون DejaGnu در نظر گرفته شده است. .IP \fB\-fdiagnostics\-show\-nesting\-levels\fR 4 .IX Item "-fdiagnostics-show-nesting-levels" هنگامی که \fBfdiagnostics\-show\-nesting\fR فعال باشد، از \&\fBfdiagnostics\-show\-nesting\-levels\fR برای نمایش شماره‌هایی که عمق تودرتویی را نشان می‌دهند نیز استفاده کنید. این گزینه برای استفادهٔ توسعه‌دهندگان GCC جهت اشکال‌زدایی پیام‌های تشخیصی تودرتو ایجاد شده است، اما ممکن است برای توسعه‌دهندگان افزونه‌ها نیز سودمند باشد. .IP \fB\-fdiagnostics\-format=\fR\fIFORMAT\fR 4 .IX Item "-fdiagnostics-format=FORMAT" قالب دیگری را برای چاپ پیام‌های تشخیصی انتخاب می‌کند. مقدار \&\fIFORMAT\fR یکی از موارد \fBtext\fR، \fBsarif\-stderr\fR یا \fBsarif\-file\fR است. .Sp استفاده از این گزینه، هر «مقصد خروجی» اضافی اضافه شده با \&\fB\-fdiagnostics\-add\-output=\fR یا مقدار تنظیم شده با \&\fB\-fdiagnostics\-set\-output=\fR را جایگزین می‌کند. .Sp مقدار پیش‌فرض \fBtext\fR است. .Sp قالب‌های \fBsarif\-stderr\fR و \fBsarif\-file\fR هر دو پیام‌های تشخیصی را در قالب SARIF Version 2.1.0، به ترتیب در stderr یا در فایلی به نام \fIsource.sarif\fR ارسال می‌کنند. .IP \fB\-fdiagnostics\-add\-output=\fR\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR 4 .IX Item "-fdiagnostics-add-output=DIAGNOSTICS-OUTPUT-SPEC" یک «مقصد خروجی» اضافی برای ارسال پیام‌های تشخیصی اضافه می‌کند. .Sp مقدار \&\fIDIAGNOSTICS\-OUTPUT\-SPEC\fR باید یک طرح‌واره (scheme) را مشخص کند که به‌صورت اختیاری با \f(CW\*(C`:\*(C'\fR و یک یا چند جفت \fIKEY\fR=\fIVALUE\fR دنبال می‌شود، به این صورت: .Sp .Vb 3 \& \& := \& :=,= .Ve .Sp و غیره. .Sp طرح‌واره‌ها، کلیدها یا مقادیری که نام آن‌ها با پیشوند «experimental» آغاز می‌شود ممکن است بدون اعلان قبلی تغییر یابند یا حذف شوند. کلیدها می‌توانند مختص هر طرح‌واره باشند یا به کل GCC ارتباط داشته باشند. .Sp مقدار \&\fISCHEME\fR می‌تواند موارد زیر باشد: .RS 4 .IP \fBtext\fR 4 .IX Item "text" ارسال پیام‌های تشخیصی به stderr با استفاده از قالب خروجی متنی کلاسیک GCC. .Sp کلیدهای پشتیبانی‌شده برای طرح‌وارهٔ \f(CW\*(C`text\*(C'\fR عبارتند از: .RS 4 .IP \fBcolor=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "color=[yes|no]" تنظیمات رنگ‌آمیزی حاصل از \fB\-fdiagnostics\-color\fR را برای این خروجی متنی لغو (override) می‌کند. .IP \fBshow\-nesting=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "show-nesting=[yes|no]" حالتی را فعال می‌کند که روابط سلسله‌مراتبی درون پیام‌های تشخیصی را مطابق با \fB\-fdiagnostics\-show\-nesting\fR برجسته می‌سازد. مقدار پیش‌فرض \f(CW\*(C`yes\*(C'\fR است. .IP \fBshow\-nesting\-locations=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "show-nesting-locations=[yes|no]" اگر \f(CW\*(C`show\-nesting=yes\*(C'\fR باشد، مکان‌ها به‌طور پیش‌فرض نمایش داده می‌شوند؛ این کلید را روی \f(CW\*(C`no\*(C'\fR تنظیم کنید تا چاپ این مکان‌ها غیرفعال گردد. این ویژگی برای استفادهٔ توسعه‌دهندگان GCC هنگام نگارش موارد آزمون DejaGnu وجود دارد. .IP \fBshow\-nesting\-levels=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "show-nesting-levels=[yes|no]" این یک گزینهٔ اشکال‌زدایی برای استفاده به همراه \f(CW\*(C`show\-nesting=yes\*(C'\fR است. این کلید را روی \f(CW\*(C`yes\*(C'\fR تنظیم کنید تا سطوح تودرتویی صریح در خروجی چاپ شود. این ویژگی برای استفادهٔ توسعه‌دهندگان GCC در نظر گرفته شده است. .RE .RS 4 .RE.IP \fBsarif\fR 4 .IX Item "sarif" ارسال اطلاعات عیب‌یابی به یک فایل در قالب SARIF. .Sp کلیدهای پشتیبانی‌شده برای طرح‌وارهٔ \f(CW\*(C`sarif\*(C'\fR عبارت‌اند از: .RS 4 .IP \fBfile=\fR\fIFILENAME\fR 4 .IX Item "file=FILENAME" تعیین نام فایلی که خروجی SARIF در آن نوشته می‌شود، که می‌تواند با یک مسیر مطلق یا نسبی در ابتدا همراه باشد. در صورت عدم تعیین، مقدار پیش‌فرض \&\fIsource.sarif\fR خواهد بود. .IP \fBserialization=\fR[\fBjson\fR] 4 .IX Item "serialization=[json]" تعیین قالب سریال‌سازی برای استفاده هنگام نوشتن SARIF. در حال حاضر این مقدار تنها می‌تواند \f(CW\*(C`json\*(C'\fR باشد، اما به عنوان یک نقطهٔ گسترش برای آزمایش سایر روش‌های سریال‌سازی تعبیه شده است. .IP \fBversion=\fR[\fB2.1\fR|\fB2.2\-prerelease\fR] 4 .IX Item "version=[2.1|2.2-prerelease]" تعیین نگارش SARIF برای استفاده در خروجی. در صورت عدم تعیین، مقدار پیش‌فرض 2.1 است. \f(CW\*(C`2.2\-prerelease\*(C'\fR از یک پیش‌نویس غیررسمی مشخصات آیندهٔ SARIF 2.2 استفاده می‌کند و در این انتشار تنها باید برای امور آزمایشی استفاده شود. .RE .RS 4 .Sp همچنین این کلید برای استفادهٔ توسعه‌دهندگان GCC به جای کاربران نهایی در نظر گرفته شده است و ممکن است بدون اطلاع قبلی تغییر کند یا حذف شود: .IP \fBstate\-graphs=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "state-graphs=[yes|no]" این یک ویژگی اشکال‌زدایی است و مقدار پیش‌فرض آن \f(CW\*(C`no\*(C'\fR است. اگر \f(CW\*(C`state\-graphs=yes\*(C'\fR باشد، تلاش می‌شود اطلاعات تفصیلی وضعیت از \fB\-fanalyzer\fR در SARIF تولیدشده ثبت شود. .RE .RS 4 .RE .IP \fBexperimental\-html\fR 4 .IX Item "experimental-html" ارسال اطلاعات عیب‌یابی به یک فایل در قالب HTML. این طرح‌واره آزمایشی است و ممکن است در نگارش‌های آیندهٔ GCC حذف شود. کلیدها و جزئیات خروجی نیز ممکن است تغییر کنند. .Sp کلیدهای پشتیبانی‌شده برای طرح‌وارهٔ \f(CW\*(C`experimental\-html\*(C'\fR عبارت‌اند از: .RS 4 .IP \fBcss=\fR[\fByes\fR|\fBno\fR] 4 .IX Item "css=[yes|no]" افزودن یک