انگلیسیفرانسویاسپانیایی

Ad


فاویکون OnWorks

g++-4.7 - آنلاین در ابر

g++-4.7 را در ارائه دهنده هاست رایگان OnWorks از طریق Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا کنید.

این دستور g++-4.7 است که می تواند در ارائه دهنده هاست رایگان OnWorks با استفاده از یکی از چندین ایستگاه کاری آنلاین رایگان ما مانند Ubuntu Online، Fedora Online، شبیه ساز آنلاین ویندوز یا شبیه ساز آنلاین MAC OS اجرا شود.

برنامه:

نام


gcc - کامپایلر پروژه GNU C و C++

خلاصه


gcc [-c|-S|-E] [-std=استاندارد]
[-g] [-صفحه] [-Oسطح]
[-Wهشدار دادن...] [-پدانتیک]
[-Iدیر...] [-Lدیر...]
[-Dدرشت دستور[=تعریف کنید]...] [-Uدرشت دستور]
[-fانتخاب...] [-mگزینه ماشین...]
[-o مجموعه] [@پرونده] پرونده...

فقط مفیدترین گزینه ها در اینجا فهرست شده اند. برای بقیه موارد زیر را ببینید. g ++ قبول می کند
اکثراً همان گزینه ها gcc.

شرح


وقتی GCC را فراخوانی می کنید، معمولاً پیش پردازش، کامپایل، مونتاژ و پیوند را انجام می دهد.
"گزینه های کلی" به شما این امکان را می دهد که این روند را در یک مرحله میانی متوقف کنید. برای
به عنوان مثال، -c گزینه می گوید لینکر را اجرا نکنید. سپس خروجی شامل شی است
فایل های خروجی توسط اسمبلر

گزینه های دیگر به یک مرحله از پردازش منتقل می شوند. برخی از گزینه ها کنترل می کنند
پیش پردازنده و دیگران خود کامپایلر. با این حال گزینه های دیگر اسمبلر و را کنترل می کنند
پیوند دهنده؛ بسیاری از این موارد در اینجا مستند نشده اند، زیرا به ندرت نیاز به استفاده از آنها دارید.

اکثر گزینه های خط فرمان که می توانید با GCC استفاده کنید برای برنامه های C مفید هستند. چه زمانی
یک گزینه فقط با یک زبان دیگر (معمولا C++) مفید است، توضیح اینطور می گوید
به صراحت اگر در توضیحات یک گزینه خاص منبعی ذکر نشده باشد
زبان، می توانید از آن گزینه با تمام زبان های پشتیبانی شده استفاده کنید.

La gcc برنامه گزینه ها و نام فایل ها را به عنوان عملوند می پذیرد. بسیاری از گزینه ها دارای چند
نام حروف؛ بنابراین گزینه های تک حرفی متعدد ممکن است نه گروه بندی شود: -دی وی بسیار
متفاوت از -d -v.

می توانید گزینه ها و دیگر آرگومان ها را با هم ترکیب کنید. در بیشتر موارد، ترتیبی که استفاده می کنید اینطور نیست
موضوع. وقتی از چندین گزینه از یک نوع استفاده می کنید، ترتیب اهمیت دارد. به عنوان مثال، اگر
شما مشخص می کنید -L بیش از یک بار، دایرکتوری ها به ترتیب مشخص شده جستجو می شوند. همچنین،
قرار دادن -l گزینه قابل توجه است

بسیاری از گزینه ها نام های طولانی دارند که با آنها شروع می شود -f یا با -W---مثلا،
-fmove-loop-invariants, -فرمت و غیره اکثر اینها هم مثبت و هم منفی دارند
تشکیل می دهد؛ شکل منفی از -فو خواهد بود -fno-foo. این کتابچه راهنمای تنها یکی از
این دو شکل، هر کدام که پیش فرض نباشد.

OPTIONS


گزینه خلاصه
در اینجا خلاصه ای از همه گزینه ها، گروه بندی شده بر اساس نوع آورده شده است. توضیحات در ادامه آمده است
بخش.

به طور کلی گزینه
-c -S -E -o پرونده -بدون پیشوندهای متعارف لوله کدهای عبور-خروج -x زبان -v
-### --کمک[=کلاس[، ...]] --هدف-کمک - نسخه لفاف @پرونده -fplugin=پرونده
-fplugin-arg-نام=ارگ -fdump-ada-spec[-سلیم] -fdump-go-spec=پرونده

C زبان گزینه
-ansi -std=استاندارد -fgnu89-inline -aux-info نام فایل
-fallow-less-variadic-functions -فنو-اسم -فنو ساخته شده است -fno-builtin-تابع
-Fhosted -مناسب -فوپنمپ -اف ام اس-افزونه ها -fplan9-extensions سه نمودارها
-no-integrated-cpp -سنتی سنتی-cpp آیش-تک-دقیق
-fcond-عدم تطابق تبدیل -بردار کتان -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char

++C زبان گزینه
-fabi-version=n -fno-access-control -fcheck-جدید -fconserve-space
-fconstexpr-depth=n -friend-injection fno-elide-constructors مشخصات -fno-enforce-eh
-for-scope -fno-for-scope -fno-gnu-words -fno- implicit-templates
الگوهای -fno- ضمنی-داخلی -fno-implement-inlines -اف ام اس-افزونه ها
-fno-nonansi-builtins -fnothrow-opt -fno-operator-names -fno-optional-diags
-مجاز -fno-pretty-templates -فرپو -fno-rtti -fstats -ftemplate-depth=n
-fno-threadsafe-statics -fuse-cxa-atexit -فنو ضعیف -nostdinc++ -fno-default-inline
-fvisibility-inlines-hidden -fvisibility-ms-compat -وابی -Wconversion-null
-Wctor-dtor-privacy -dtor-non-virtual-delete-dtor - تنگ کردن -به جز
غیر مجازی-dtor -Wreorder -Weffc++ Wstrict-null-sentinel
-بدون قالب-دوست بازیگران به سبک وولد -Woverloaded-مجازی -Wno-pmf-تبدیل
-Wsign-Promo

هدف-C و Objective-C++ زبان گزینه
-fconstant-string-class =نام کلاس -fgnu-runtime -fnext-runtime گیرنده های fno-nil
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-direct-dispatch -fobjc-استثناها
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -freplace-objc-classes -fzero-link
-gen-decls -Wassign-intercept - پروتکل Wno -انتخاب کننده -Wstrict-Selector-Match
-Wundeclared-Selector

زبان مستقل گزینه
-fmessage-length=n -fdiagnostics-show-location=[یک بار|هر خط]
-fno-diagnostics-show-option

هشدار گزینه
-fsyntax-only -fmax-errors=n -پدانتیک -اشتباهات -w -وکسترا -دیو
-وادرس -تجمیع-بازگشت -محدوده های جنگی -Wno-ویژگی ها
-Wno-ساخته-کلان-بازتعریف شده است -Wc++-compat -Wc++11-compat -Wcast-align -استاک
-Wchar-مشترک ها -وکلوببر شده -کامنت کنید -تبدیل -پوشش-عدم تطابق -Wno-cpp
-منسوخ شده است -Wno-منسوخ-اعلامیه -Wdisabled-بهینه سازی -Wno-div-by-zero
-ترفیع دوگانه -جسم خیس -Wenum-مقایسه کنید Wno-endif-labels -خطا -خطا=*
-Wfatal-خطاها -Wfloat-برابر -فرمت -Wformat=2 -Wno-format-contains-nul
-Wno-format-extra-args -Wformat-غیر تحت اللفظی -Wformat-security -Wformat-y2k
-Wframe-larger-than=لن -Wno-free-nonheap-object -Wjump-misses-init
نادیده گرفته شده واجد شرایط -حرفه ای -Wimplicit-function-declaration -Wimplicit-int
-برخود -وین لاین -Wmaybe-unitialized -بازیگرها از بین نرفتن به اشاره گر
-Wno-invalid-offsetof -Winvalid-PCH -بزرگتر از=لن -بهینه سازی های حلقه Wunsafe
Wlogical-op -طولانی طولانی -Wmain -Wmaybe-unitialized پرانتزهای Wmissing
Wmissing-field-initializers -Wmissing-format-attribute -Wmissing-include-dirs
-Wno-Mudflap -Wno-multichar -بدون هیچ -سرریز -طبقه های تار بسته بندی شده
-Wpacked-bitfield-compat -پد شده -پرانتزها -فرمت Wpedantic-ms
-فرمت Wno-pedantic-ms -wpointer-arith بدون اشاره گر به غیر بازیگری -Wredundant-decls
- نوع چرخشی -توالی-نقطه -سایه -Wsign-مقایسه کنید -Wsign-تبدیل
-Wstack-محافظ -Wstack-usage=لن Wstrict-aliasing -Wstrict-aliasing=n
-سرریز مچ دست -Wstrict-overflow=n -Wsuggest-attribute=[خالص|طراح|بدون بازگشت]
-سوئیچ -Switch-default -Switch-enum -Wsync-nand Wsystem-headers -ترامپولین
Wtrigraphs Wtype-Limits -وندف -Wunitarized -Wunknown-pragmas -Wno-pragmas
-ثابت-شناور-بدون پسوند -استفاده نشده -Wunused-function Wunused-برچسب
Wunused-local-typedefs -پارامتر Wunused -نتیجه استفاده نشده است -ارزش استفاده نشده
-Wunused-متغیر پارامتر -Wunused-but-set -متغیر-استفاده نشده-اما-ست
ماکروهای Wvariadic -بردار-عملیات-عملکرد -وولا -Wvolatile-register-var
-نوشتن رشته ها -Wzero-as-null-pointer-constant

C و هدف-C-فقط هشدار گزینه
-Wbad-function-cast -Wmissing-اعلامیه ها -Wmissing-پارامتر-نوع
-Wmissing-نمونه های اولیه -خارجی ها -Wold-style-اعلامیه تعریف -Wold-style
Wstrict-نمونه های اولیه -غیر سنتی -تبدیل سنتی
-اعلامیه پس از بیانیه -Wpointer-Sign

اشکال زدایی گزینه
-dنامه ها زباله ها -ماشین تخلیه - تخلیه -fdbg-cnt-list -fdbg-cnt=ضد
لیست ارزش -fdisable-ipa-pass_name -fdisable-rtl-pass_name -fdisable-rtl-عبور-
نام=محدوده-لیست -fdisable-tree-pass_name -fdisable-tree-پاس-نام=محدوده-لیست
-fdump-noaddr -fdump-بدون شماره -Fdump-Numbered-Links -fdump-translation-unit[-n]
-fdump-class-hierarchy[-n] -fdump-ipa-all -fdump-ipa-cgrap -fdump-ipa-inline
-fdump-passes -fdump-statistics -fdump-tree-all -fdump-tree-original[-n]
-fdump-tree-optimized[-n] -fdump-tree-cfg -fdump-tree-vcg -fdump-tree-نام مستعار
-fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n] -fdump-tree-ccp[-n]
-fdump-tree-dce[-n] -fdump-tree-gimple[-خام] -fdump-tree-mudflap[-n]
-fdump-tree-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-free[-n]
-fdump-tree-vrp[-n] -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n]
-fdump-final-insns=پرونده -fcompare-debug[=انتخاب می کند] -fcompare-debug-second
-feliminate-dwarf2-dups -feliminate-unused-debug-types
-symbols-feliminate-unused-debug-symbols -femit-class-debug-always -قابل دفاع-نوع-عبور
-قابل دفاع-نوع-عبور=محدوده-لیست -fdebug-types-section -fmem-report -fpre-ipa-mem-گزارش
-fpost-ipa-mem-report -fprofile-arcs -frandom-seed=رشته -fsched-verbose=n
-fsel-sched-verbose -fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-usage
-آزمایش-پوشش -ftime-گزارش -fvar-ردیابی -fvar-ردیابی-تکالیف
-fvar-tracking-assignments-toggle -g -gسطح -تغییر -gcoff -کوتوله-نسخه -ggdb
-سوئیچ‌های grecord-gcc -gno-record-gcc-switches -gstabs -gstabs+ -قطعه-کوتوله
-gno-sight-dwarf -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
-fno-dwarf2-cfi-aasm -fdebug-prefix-map=قدیمی=جدید -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detailed[=لیست مشخصات] -p -صفحه
-print-file-name=کتابخانه -print-libgcc-file-name -چاپ-چند دایرکتوری
-چاپ-چند لیب -چاپ-چاپ-دایرکتوری -Print-prog-name =برنامه
-چاپ-جستجو-dirs -Q -print-sysroot پسوند -print-sysroot-headers -Save- Temps
-save-temps=cwd -save-temps=obj -زمان[=پرونده]

بهینه سازی گزینه
-falign-functions[=n] -falign-jumps[=n] -falign-labels[=n] -falign-loops[=n]
-تعدادی-ریاضی -fauto-inc-dec -شاخه-احتمالات -fbranch-target-load-optimize
-fbranch-هدف-بار-بهینه 2 -fbtr-bb-exclusive -fcaller-save -fcheck-data-deps
-fcombine-stack-adjustments -fconserve-stack -FCOMPARE-elim -fcprop-رجیستر می کند
fcrossjumping -fcse-follow-jumps -fcse-skip-blocks -fcx-fortran-rules
-fcx-limited-range بخش‌های fdata -fdce -تاخیر-شاخه -fdelete-null-pointer-checks
-مجازی کردن -fdse ترسناک درون ریز -fipa-sra -بهینه سازی ها
-ffat-lto-اشیاء سریع-ریاضی -فقط ریاضی محدود -float-store
-fexcess-precision=سبک - فوروارد-تبلیغ کردن -ffp-contract=سبک -function-sections
-fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -فگرافیت-هویت -fgcse-sm
تبدیل -fif -fif-conversion2 -findirect-inlining توابع -finline
توابع-finline-یک بار فراخوانی می شود -Finline-limit =n -finline-small-functions -fipa-cp
-fipa-cp-clone -fipa-matrix-reorg -فیپا-پتا -fipa-profile -fipa-pure-const
-fipa-reference -fira-algorithm=الگوریتم -فیرا-منطقه=منطقه -فیرا-حلقه-فشار
-fno-ira-share-save-slots -fno-ira-share-spill-slots -FIRA-VERBOSE =n -فیووپت
-fkeep-inline-functions -fkeep-static-consts -فلوپ بلوک -فلوپ صاف کردن
-فلوپ-تبادل -فلوپ-نوار-معدن -floop-parallelize-all -flto
-flto-compression-level -flto-partition =جلبک -flto-گزارش -fmerge-all-constants
ثابت-fmerge -fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-invariants
fmudflap -fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline
-fno-defer-pop -fno-function-cse -فنو-حدس-شاخه-احتمال -fno-inline
-fno-math-errno -فنو-چشمک -fno-peephole2 -fno-sched-interblock -fno-sched-spec
-fno-signed-zeros -fno-toplevel-reorder -fno-به دام انداختن-ریاضی
-fno-zero-initialized-in-bss -fomit-frame-pointer -foptimize-Register-Move
-بهینه سازی تماس های خواهر و برادر -fpartial-inlining -fpeel-loops - پیش بینی کننده - مشترک
-fprefetch-loop-arrays -fprofile-correction -fprofile-dir=مسیر -fprofile-generate
-fprofile-generate=مسیر -fprofile-use -fprofile-use=مسیر -fprofile-values
-مقاومتی-ریاضی -رایگان -حرکت فرگ -frename-registers -بلاک های سفارشی
-freorder-blocks-and-partition توابع -freorder -frerun-cse-after-loop
-freschedule-modulo-scheduled-loops -بنیادسازی-ریاضی -FSched2-he-superblocks
-fsched-pressure -fsched-spec-load -fsched-spec-load-dangerous
-fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n] -fsched-group-heuristic
-fsched-critical-path-heuristic -fsched-spec-insn-heuristic -fsched-rank-heuristic
-fsched-last-insn-heuristic -fsched-dep-count-heuristic -fschedule-insns
-fschedule-insns2 -قطعات-لنگرها -برنامه ریزی انتخابی -زمانبندی-fselective2
-صیل صفحه بندی حلقه های بیرونی لوله گذاری-fsel-sched -Fshrink-Wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types محافظ چوب -fstack-protector-all fstrict-aliasing
-fstrict-سرریز -fthread-jumps ردیاب -ftree-bit-ccp -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-Coalesce-inline-vars -ftree-Coalesce-vars -ftree-copy-prop
-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
-free-free -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop توزیع -ftree-loop الگوی-حلقه-دور-توزیع
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-parallelize-loops=n
-ftree-pre -ftree-partial-pre -ftree-pta -ftree-reassoc سه سینک -ftree-sra
تبدیل -ftree-switch -ftree-tail-ادغام -ftree-ter نسخه-ftree-vect-loop
-ftree-vectorize -ftree-vrp -funit در یک زمان -funroll-all-loops -funroll-loops
-بهینه‌سازی‌های حلقه امن -بهینه‌سازی‌های ریاضی و سرگرم‌کننده -funswitch-loops
-fvariable-expansion-in-unroller -fvect-cost-model -fvpt - وب کل برنامه -fwpa
-fuse-ld=ها فیوز-لینکر-پلاگین --پارام نام=ارزش -O -O0 -O1 -O2 -O3 -اواس
سریع

پیش پردازنده گزینه
-Aسوال=پاسخ -آ-سوال[=پاسخ] -C -DD -dI -dM -dN -Dدرشت دستور[=تعریف کنید] -E -H
-idirafter دیر -عبارتند از پرونده -ایماکرو پرونده -پیوند پرونده -ithprefix دیر
-IwwithPrefixBefore دیر -سیستم دیر -imultilib دیر -isysroot دیر -M -مامان -MF -MG
-نماینده مجلس -MQ -MT -nostdinc -P -fdebug-cpp -افتراک-کلان-گسترش دایرکتوری fworking
نقشه برداری سه نمودارها -دف -Uدرشت دستور -Wp،انتخاب -Xpreprocessor انتخاب

همگذار گزینه
-وا،انتخاب -Xassembler انتخاب

لینک دهنده گزینه
شی-فایل-نام -lکتابخانه -nostartfiles -nodefaultlibs -nostdlib - پای -rdynamic -s
-استاتیک -static-libgcc -static-libstdc++ -به اشتراک گذاشته شده -shared-libgcc - نمادین -T خط
-Wl،انتخاب -xlinker انتخاب -u نماد

فهرست راهنما گزینه
-Bپیشوند -Iدیر -iplugindir=دیر -نقل دادندیر -Lدیر -specs =پرونده -من- --sysroot=دیر

دستگاه وابسته گزینه
AAArch64 گزینه -mbig-endian -mlittle-endian -mgeneral-regs-only -mcmodel=کوچک
-mcmodel=small -mcmodel=بزرگ -mstrict-align -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mtls-dialect=desc -mtls-dialect=سنتی -مارس=نام
-mcpu=نام -mtune=نام

آداپتوا ظهور و تجلی عیسی گزینه -mhalf-reg-file -mprefer-short-insn-regs -branch-cost=تعداد
-mcmove -mnops=تعداد -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modify
-mstack-offset=تعداد -Mround-نزدیکترین تماس های طولانی تماس های کوتاه -msmall16 -mfp-mode=حالت
-مره -max-vect-align=تعداد -msplit-vecmove-early -m1reg-REG

ARM گزینه -mapcs-frame -mno-apcs-frame -mabi=نام -mapcs-stack-check
-mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian
-mwords-little-endian -mfloat-abi=نام -mfpe -mfp16-format=نام -mthumb-interwork
-mno-thumb-interwork -mcpu=نام -مارس=نام -mfpu=نام -mstructure-size-boundary=n
-mabort-on-noreturn تماس های طولانی -mno-long-تماس -msingle-pic-base
-mno-single-pic-base -mpic-register=REG -mnop-fun-dllimport -mcirrus-fix-invalid-insns
-mno-cirus-fix-invalid-insns -mpoke-function-name -مهم -مارم -mtpcs-frame
-mtpcs-leaf-frame -mcaller-super-interworking -mcallee-super-interworking -mtp=نام
-mtls-dialect=گویش -mword-relocations -mfix-cortex-m3-ldrd -دسترسی چندجانبه
-mneon-for-64bit

APR گزینه -mmcu=mcu تجمع-args -branch-cost=هزینه -mcall-prologues -mint8
-mno-وقفه می کند -آرامش کن تماس های کوتاه -Mstrict-X -مدی استک

بلک فین گزینه -mcpu=پردازنده[-sirevision] -msim -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mspecld-ناهنجاری -mno-specld-anomaly -mcsync-anomaly
-mno-csync-anomaly -mlow-64k -mno-low64k -mstack-check-l1 -کتابخانه مشترک
-mno-id-shred-library -mshared-library-id=n -mleaf-id-shred-library
-mno-leaf-id-shred-library -msep-data -mno-sep-data تماس های طولانی -mno-long-تماس
-mfast-fp -minline-plt چند هسته ای -mcorea -mcoreb -msdram -micplb

C6X گزینه -mbig-endian -mlittle-endian -مارس=پردازنده -msim -msdata=نوع sdata

CRIS گزینه -mcpu=پردازنده -مارس=پردازنده -mtune=پردازنده -mmax-stack-frame =n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init عوارض جانبی mno
-mstack-align -mdata-align -mconst-align -m32-bit -m16-bit -m8-bit
-mno-prologue-epilogue -mno-gotplt -ملف -معوت -ملینوکس -mlinux سیم کارت -sim2
-mmul-bug-راهکار -mno-mul-bug-راهکار

CR16 گزینه -mmac -mcr16cplus -mcr16c -msim -mint32 -mbit-ops -mdata-model=مدل

داروین گزینه -all_load -allowable_client -ارشی -arch_errors_fatal -arch_only
-bind_at_load -دسته -bundle_loader -نام مشتری -compatibility_version
-نسخه فعلی نوار_مرده فایل-وابستگی -dylib_file -dylinker_install_name
-پویا -dynamiclib -list_symbols_exported -فیلست -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-پایه_تصویر -init -install_name -keep_private_externs -multi_module
-multiply_defined -Multiply_duped_Unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -نومولتیفز -ناربند
noseglinkedit -pagezero_size -پیشبندی -prebind_all_twolevel_modules -بسته_خصوصی
-Read_Only_Relocs -بخشی - نمادهای بخش -whyload -seg1addr -فرقه آفرینی
- نمادهای بخش -بخش -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -Single_Module -استاتیک -زیر_کتابخانه -sub_umbrella
-twolevel_namespace -بله -تعریف نشده -لیست_symbols_unexported
-ناهمخوانی_اشاره_ضعیف -واتس لود -F حدس زد -خوشحال -mmacosx-version-min=نسخه
-mkernel -mone-byte-bool

دسامبر آلفا گزینه -mno-fp-regs -msoft-float -malpha-as -mgas -مییی
-mieee-with-inexact -mieee-conformant -mfp-trap-mode=حالت -MFP-Rounding-Mode =حالت
-MTRAP-RECISION =حالت -mbuild-constants -mcpu=نوع cpu -mtune=نوع cpu -mbwx -mmax
-mfix -mcix -mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data داده های بزرگ
-msmall-text -متن بزرگ -mmmory-latency=زمان

دسامبر آلفا / VMS گزینه -mvms-return-codes -mdebug-main=پیشوند -mmalloc64

FR30 گزینه -msmall-model -mno-lsim

LIF گزینه -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-Malloc-CC -mfixed-cc -mdword -mno-dword - دوبل -mno-دبل - رسانه -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro - multilib-library-pic
-mlinked-fp تماس های طولانی برچسب های بدخیم -مجموعه-عکس -macc-4 -macc-8 -مپک
-mno-pack پرچم های mno -mcond-move -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-branch
-mno-vliw-branch -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-stats -mTLS -mtls -mcpu=پردازنده

گنو / لینوکس گزینه -mglibc - muclibc -مبیونیک -ماندروید -tno-android-cc -tno-android-ld

H8 / 300 گزینه -آرامش کن -mh -اماس - دقیقه -mint32 -بدخیم-300

HPPA گزینه -مارس=نوع معماری سوئیچ -mbig -mdisable-fpregs
-ندار-نشانگر -mfast-غیر مستقیم-تماس -mgas -mgnu-ld -mhp-ld
-Mfixed-Range =محدوده ثبت نام -mjump-in-delay -mlinker-opt تماس های طولانی
-mlong-load-store -mno-big-switch -mno-disable-fpregs -mno-disable-indexing
-تماس های غیرمستقیم-منو-سریع -منو گاز -mno-jump-in-delay -mno-long-load-store
-mno-portable-runtime -mno-soft-float -mno-space-regs -msoft-float -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 قابل حمل - زمان اجرا -mschedule=نوع cpu -mspace-regs
-msio -mwsio -munix=unix-std -nolibdld -استاتیک -موضوعات

i386 و x86-64 گزینه -mtune=نوع cpu -مارس=نوع cpu -mfpmath=واحد -masm=گویش
-mno-fancy-math-387 -mno-fp-ret-in-387 -msoft-float -mno-wide-multiply -mrtd
بدخیم-دوبرابر -mpreferred-stack-boundary=تعداد -mincoming-stack-boundary=تعداد -mcld
-mcx16 -مصحف -mmovbe -mcrc32 -مندی -mrecip=انتخاب کردن -mvzeroupper -mprefer-avx128 -mmmx
-msse -msse2 -msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -میس -mpclmul
-mfsgsbase -مردرند -mf16c -mfma -msse4a -m3dnow -mpopcnt -mabm -mbmi -MTBM -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mthreads -منهای متناوب -minline-all-stringops
-minline-stringops-به صورت پویا -mstringop-strategy=جلبک -mpush-args
انباشته-خروجی-آرگ -m128bit-long-double -m96bit-long-double -mregparm =تعداد
-msseregparm -mveclibabi=نوع -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs -mcmodel=کد-مدل
-mabi=نام -maddress-mode=حالت -32 -64 -mx32 -mlarge-data-threshold=تعداد -msse2avx
-mfentry -m8bit-idiv -mavx256-split-unaligned-load -mavx256-split-unaligned-store

i386 و x86-64 ویندوز گزینه -mconsole -mcygwin -mno-cygwin -mdll
-mnop-fun-dllimport -mthread -مونیکد -mwin32 -mwindows -fno-set-stack-executable

IA-64 گزینه -mbig-endian -mlittle-endian -mgnu-as-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-names -msdata -mno-sdata -mconstant-gp -عکس خودکار
-mfused-madd -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latency
-minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm -stop-bits
-Mfixed-Range =محدوده ثبت نام -mtls-size=اندازه tls -mtune=نوع cpu -milp32 -mlp64
-msched-br-data-spec -msched-ar-da-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-da-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-after- every-cycle
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memory-insns=max-insns

IA-64/VMS گزینه -mvms-return-codes -mdebug-main=پیشوند -mmalloc64

LM32 گزینه -barrel-shift-enabled -mdivide-enabled -Multiply-enabled
-msign-extend-enabled -muser-enabled

M32R/D گزینه -m32r2 -m32rx -m32r -mdebug -حلقه های بدخیم -mno-align-loops
-missue-rate=عدد -branch-cost=عدد -mmodel=کد-اندازه-مدل-نوع -msdata=sdata-
نوع -mno-flush-func -mflush-func=نام -mno-flush-trap -mflush-trap=عدد -G تعداد

M32C گزینه -mcpu=پردازنده -msim -memregs=عدد

M680x0 گزینه -مارس=قوس -mcpu=پردازنده -mtune=اهنگ -68000 -68020 -m68020-40
-m68020-60 -68030 -68040 -68060 -mcpu32 -5200 -m5206e -m528x -5307 -5407
-mcfv4e -mbitfield -منو بیتفیلد -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mshort -mno-کوتاه -mhard-float -68881 -msoft-float -mpcrel
بدخیم -mstrict-align -msep-data -mno-sep-data -mshared-library-id=n
-کتابخانه مشترک -mno-id-shred-library -mxgot -mno-xgot

MCore گزینه -mhardlit -mno-hardlit -mdiv -mno-div -mrelax- فوری
-mno-relax-فوراً -mwide-bitfields -mno-wide-bitfields -m4byte-توابع
-mno-4byte-functions -mcalgraph-data -mno-calgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -210 -340
-mstack-increment

MeP گزینه -mabsdiff -مرکز خرید -متوسط -mbased =n -mbitops -mc=n -mclip
-mconfig=نام -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -مل میکرو فرار میلی لیتر
-mleadz -می -mminmax -ملت -mno-opts -تکرار مجدد -اماس -مساتور -msdram -msim -msimnovec
-mtf -mtiny=n

MicroBlaze گزینه -msoft-float -mhard-float -msmall-divides -mcpu=پردازنده -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-pattern-compare -mxl-stack-check
-mxl-gp-opt -mno-clearbss -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
-mxl-mode-برنامه-مدل

میپس گزینه -The -EB -مارس=قوس -mtune=قوس -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=ابی -Mabiccals -mno-abicals
-mshared -mno-اشتراک گذاری شده -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float چند شناور -mdouble-float -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -mfpu=نوع fpu -msmartmips -mno-smartmips -مقابل-مجرد
-mno-paired-single -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt -mno-mt -mlsc
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gتعداد -mlocal-sdata
-mno-local-sdata -مترن-سیتا -mno-extern-sdata -mgpopt -mno-gopt داده های عضو شده
-mno-embedded-data -muninit-const-in-rodata -mno-unit-const-in-rodata
-mcode-readable=محیط -msplit-addresss -mno-split-addresss -mexplicit-relocs
-mno-explicit-relocs -mcheck-zero-division -mno-check-zero-division -mdivide-traps
-mdivide- breaks -mmemcpy -mno-memcpy تماس های طولانی -mno-long-تماس -ممم -mno-mad
-mfused-madd -mno-fused-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000
-mno-fix-r4000 -mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-vr4120
-mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=عملکرد -mno-flush-func -branch-cost=تعداد -شاخه محتمل
-mno-branch- احتمال دارد -mfp-exceptions -mno-fp-exceptions -mvr4130-align -mno-vr4130-align
-msynci -mno-synci -mrelax-pic-calls -تماس‌های mno-relax-pic -mmcount-ra-address

MMIX گزینه -mlibfuncs -mno-libfuncs -مپسیلون -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-extend -mknuthdiv -mtoplevel-symbols -ملف -شاخه-پیش بینی
-mno-branch-predict -آدرس های mbase -mno-base-addresss چند خروجی
-mno-single-exit

MN10300 گزینه -mult-bug -mno-mult-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=cpu-
نوع -mreturn-pointer-on-d0 -mno-crt0 -آرامش کن -mliw -msetlb

PDP-11 گزینه -mfpu -msoft-float -mac0 -mno-ac0 -40 -45 -10 -mbcopy
-mbcopy-builtin -mint32 -mno-int16 -mint16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 -مبشی -mno-abshi -شاخه گران است -شاخه-ارزان
-munix-asm -mdec-asm

پیکو چیپ گزینه -mae=ae_type -mvliw-lookahead=N -symbol-as-address
-mno-inefficient-warnings

PowerPC گزینه به گزینه های RS/6000 و PowerPC مراجعه کنید.

RL78 گزینه -msim -mmul=هیچ -mmul=g13 -mmul=rl78

RS / 6000 و PowerPC گزینه -mcpu=نوع cpu -mtune=نوع cpu -mcmodel=کد-مدل -قدرت
-mno-قدرت -power2 -mno-power2 -mpowerpc -mpowerpc64 -mno-powerpc -مالتیفک
-mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt -mpowerpc-gfxopt -mno-powerpc-gfxopt
-mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb -mpopcntd -mno-popcntd -mfprnd
-mno-fprnd -mcmpb -mno-cmbb -mmfpgpr -mno-mfpgpr -mhard-dfp -mno-hard-dfp
-mnew-mnemonics -قالب- یادگاری -mfull-toc -mminimal-toc -mno-fp-in-toc
-mno-sum-in-toc -64 -32 -mxl-compat -MNO-XL-COMPAT -mpe قدرت بدخیم
-بدخیم-طبیعی -msoft-float -mhard-float -چندین -mno-چند چند شناور
-mdouble-float -msimple-fpu -mstring -mno-string -به روز رسانی -mno-update
-mavoid-index-addresss -mno-ouced-indexed-Addresses -mfused-madd -mno-fused-madd
-bit-align mno-bit-align -mstrict-align -mno-strict-align -قابل جابجایی
-mno-replaceable -mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -کم
-mlittle-endian -بزرگ -mbig-endian -mdynamic-no-pic -مالتیفک -mswdiv
-msingle-pic-base -mprioritize-restricted-insns=اولویت
-msched-costly-dep=نوع_وابستگی -minsert-sched-nops=طرح -mcall-sysv
-mcall-netbsd -maix-struct-return -msvr4-struct-return -mabi=ابی نوع -msecure-plt
-mbss-plt -mblock-move-inline-limit=تعداد -میزل -mno-isel -misel=بله -misel=نه -mspe
-mno-spe -mspe=بله -mspe=نه -آسیب شده -mgen-cell-microcode -mwarn-cell-microcode
-mvrsave -mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=بله
-mfloat-gprs=no -mfloat-gprs=تک -mfloat-gprs=دوبل - نمونه اولیه -mno-نمونه اولیه
-msim -mmvme دیوانه ها -چاقوی میلو -عضو -msdata -msdata=انتخاب کردن -mvxworks -G تعداد
- نخ -مندی -mrecip=انتخاب کردن -mno-recip -mrecip-precision -MNO-REPRIAL-DRECISION
-mveclibabi=نوع -مفریز -mno-friz توابع -mpointers-to-nested
-mno-pointers-to-nested-functions -msave-toc-indirect -mno-save-toc-intrect

RX گزینه -m64bit-دبل -m32bit-دبل -fpu -nofpu -mcpu= -MBIG-ANDIAN-DATA
داده های کوچک انددیان -msmall-data -msim -mno-sim -mas100-syntax -mno-as100-syntax
-آرامش کن -mmax-constant-size= -mint-register= -بی حال -مساوه-در مداخلات

S / 390 و سری z گزینه -mtune=نوع cpu -مارس=نوع cpu -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 - زنجیره پشتی
-mno-backchain -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -64 -31 -mdebug -mno-debug -مسا -مزارچ -mtpf-trace
-MNO-TPF-TRACE -mfused-madd -mno-fused-madd -mwarn-framesize -mwarn-dynamicstack
-mstack-size -mstack-guard

نمره گزینه -meb -مل -mnhwloop -مولس -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH گزینه -1 -2 -m2e -m2a-nofpu -m2a-تنها -m2a-تک -m2a -3 -m3e
-m4-nofpu -m4-تنها -m4-تک -4 -m4a-nofpu -m4a-تنها -m4a-تک
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-compact
-M5-compact-nofpu -MB میلی لیتر -mdalign -آرامش کن بزرگ -mfmovd -میتاچی -مرنساس
-mno-renesas -mnomacsave -مییی -mno-ieee -mbitops -نادرست کردن -minline-ic_invalidate
-mpadstruct -mspace ترجیح دادن -musermode -MultCost =عدد -mdiv=استراتژی
-mdivsi3_libfunc=نام -Mfixed-Range =محدوده ثبت نام -madjust-unroll
-مخاطبی-مخاطبی -mgettrcost=عدد -mpt-fixed انباشته-خروجی-آرگ
-منهای نمادین -msoft-atomic -branch-cost=تعداد -mcbranchdi -mcmpeqdi -mfused-madd
وانمود کردن - حرکت کردن

سولاریس 2 گزینه -متن ناخالص -mno-npure-text - نخ ها - نخ

SPARC گزینه -mcpu=نوع cpu -mtune=نوع cpu -mcmodel=کد-مدل -mmmory-model=یادداشت-
مدل -32 -64 -mapp-regs -mno-app-regs -mfaster-structs -mno-faster-structs
-mflat -mno-flat -mfpu -mno-fpu -mhard-float -msoft-float -مارد-طبقه شناور
-msoft-quad-float -mstack-bias -mno-stack-bias دوبل
-mno-unaligned-doubles -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

SPS گزینه -mwarn-reloc -mirror-reloc -msafe-dma -munsafe-dma -شاخه-اشاره
-msmall-mem -mlarge-mem -mstdmain -Mfixed-Range =محدوده ثبت نام -mea32 -mea64
-مدرس-فضا-تبدیل mno-address-space-conversion -Mcache size =اندازه حافظه پنهان
-به روز رسانی های matomic به روز رسانی های mno-atomic

سیستم V گزینه -کی -Qn -YP،راه ها -ایم،دیر

TILE-Gx گزینه -mcpu=پردازنده -32 -64

TILEPro گزینه -mcpu=پردازنده -32

V850 گزینه تماس های طولانی -mno-long-تماس -مپ -mno-ep -mprolog-function
-mno-prolog-function -mspace -mtda=n -msda=n -مزدا=n -mapp-regs -mno-app-regs
-mdisable-call -mno-disable-call -mv850e2v3 -MV850E2 -MV850E1 -mv850s -mv850e
-mv850 سوئیچ -mbig

VAX گزینه -میلی گرم -mgnu -munix

VxWorks گزینه -MRTP -غیر ساکن -Bstatic -بی دینامیک -Xbind-تنبل -Xbind-اکنون

x86-64 گزینه به گزینه های i386 و x86-64 مراجعه کنید.

Xstormy16 گزینه -msim

Xtensa گزینه -mconst16 -mno-const16 -mfused-madd -mno-fused-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -مکس-لیترال
-mno-text-literals -Mtarget-Aligget -mno-target-align -mlong calls
-mno-long calls

سری z گزینه S/390 و zSeries Options را ببینید.

رمز نسل گزینه
-fcall-saved-REG -fcall-استفاده شده-REG -تثبیت شده-REG - استثنائات -fnon-call-exceptions
-funwind-جدول جداول -فاسینکرون-باز کردن -finhibit-size-directive
-فشار-توابع -Finstrument-Functions-Function-Function-List =همزاد,همزاد، ...
-Finstrument-Functions- لیست-فایل-لیست =پرونده,پرونده، ... -fno-common -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -Fno-Jump-Table -فرکورد-gcc-سوئیچ
-Freg-struct-return -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-check -fstack-limit-register=REG -fstack-limit-symbol=همزاد
-fno-stack-limit -fsplit-stack -فرار-برآمده -ftls-model=مدل -FTRAPV
-fwrapv -fbounds-بررسی -قابلیت مشاهده -fstrict-volatile-bitfields

گزینه کنترل la نوع of تولید
کامپایل می تواند تا چهار مرحله را شامل شود: پیش پردازش، کامپایل مناسب، مونتاژ و
پیوند دادن، همیشه به همین ترتیب. GCC قادر به پیش پردازش و کامپایل چندین مورد است
فایل ها یا در چندین فایل ورودی اسمبلر، یا در یک فایل ورودی اسمبلر. سپس
هر فایل ورودی اسمبلر یک فایل شی تولید می کند و پیوند دادن تمام شی را ترکیب می کند
فایل ها (آنهایی که به تازگی کامپایل شده اند و آنهایی که به عنوان ورودی مشخص شده اند) در یک فایل اجرایی.

برای هر فایل ورودی داده شده، پسوند نام فایل تعیین می کند که چه نوع کامپایل است
انجام شده:

پرونده.c
کد منبع C که باید از قبل پردازش شود.

پرونده.i
کد منبع C که نباید از قبل پردازش شود.

پرونده.ii
کد منبع C++ که نباید از قبل پردازش شود.

پرونده.m
کد منبع Objective-C. توجه داشته باشید که باید با libobjc کتابخانه برای ساختن
کار برنامه Objective-C.

پرونده.mi
کد منبع Objective-C که نباید از قبل پردازش شود.

پرونده.mm
پرونده.M
کد منبع Objective-C++. توجه داشته باشید که باید با libobjc کتابخانه برای ساختن
یک برنامه Objective-C++ کار می کند. توجه داشته باشید که .M به حروف بزرگ M اشاره دارد.

پروندهmii
کد منبع Objective-C++ که نباید از قبل پردازش شود.

پرونده.h
فایل هدر C، C++، Objective-C یا Objective-C++ به یک فایل از پیش کامپایل شده تبدیل شود.
هدر (پیش‌فرض)، یا فایل هدر C، C++ برای تبدیل شدن به مشخصات Ada (از طریق
-fdump-ada-spec تعویض).

پرونده. رونوشت
پرونده.cp
پروندهcxx
پروندهcpp
پرونده.CPP
پروندهc++
پرونده.C
کد منبع C++ که باید از قبل پردازش شود. توجه داشته باشید که در cxx، دو حرف آخر
هر دو باید به معنای واقعی کلمه باشند x. به همین ترتیب، .C به حرف بزرگ C اشاره دارد.

پرونده.mm
پرونده.M
کد منبع Objective-C++ که باید از قبل پردازش شود.

پروندهmii
کد منبع Objective-C++ که نباید از قبل پردازش شود.

پروندههه
پرونده.H
پرونده.hp
پروندهhxx
پروندهhpp
پرونده.hpp
پرونده.h++
پروندهtcc
فایل هدر C++ به یک هدر از پیش کامپایل شده یا مشخصات Ada تبدیل شود.

پرونده.f
پرونده.برای
پروندهftn
کد منبع فرترن که نباید از قبل پردازش شود.

پرونده.F
پرونده.برای
پروندهfpp
پرونده.FPP
پرونده.FTN
کد منبع فرترن فرم ثابت که باید از قبل پردازش شود (با نسخه سنتی
پیش پردازنده).

پروندهf90
پروندهf95
پروندهf03
پروندهf08
کد منبع رایگان فرم فرترن که نباید از قبل پردازش شود.

پرونده.F90
پرونده.F95
پرونده.F03
پرونده.F08
فرم رایگان کد منبع فرترن که باید از قبل پردازش شود (با نسخه سنتی
پیش پردازنده).

پروندهبرو
برو کد منبع

پرونده.آد
فایل کد منبع Ada که حاوی یک اعلامیه واحد کتابخانه است (اعلامیه a
بسته، زیربرنامه، یا عمومی، یا یک نمونه عمومی)، یا یک واحد کتابخانه
اعلامیه تغییر نام (اعلام تغییر نام بسته، عمومی یا زیربرنامه). چنین
فایل ها نیز نامیده می شوند مشخصات.

پرونده.ادب
فایل کد منبع Ada حاوی بدنه واحد کتابخانه (یک زیربرنامه یا بدنه بسته).
چنین فایل هایی نیز نامیده می شوند بدن.

پرونده.s
کد اسمبلر

پرونده.S
پرونده.sx
کد اسمبلر که باید از قبل پردازش شود.

دیگر
یک فایل شی که مستقیماً به پیوند داده می شود. هر نام فایل بدون شناسایی
پسوند به این صورت رفتار می شود.

شما می توانید زبان ورودی را به صراحت با -x گزینه:

-x زبان
را به صراحت مشخص کنید زبان برای فایل های ورودی زیر (به جای اجازه دادن به
کامپایلر یک پیش فرض را بر اساس پسوند نام فایل انتخاب می کند). این گزینه برای همه اعمال می شود
فایل های ورودی را تا بعدی دنبال کنید -x گزینه. مقادیر ممکن برای زبان هستند:

c-header cpp-output
c++ c++-header c++-cpp-output
هدف-c هدف-c-هدر هدف-c-cpp-خروجی
هدف-c++ هدف-c++-هدر هدف-c++-cpp-خروجی
اسمبلر اسمبلر-با-cpp
ADA
f77 f77-cpp-ورودی f95 f95-cpp-ورودی
go
جاوه

-x هیچ
هر گونه مشخصات یک زبان را خاموش کنید تا فایل های بعدی مدیریت شوند
با توجه به پسوندهای نام فایل آنها (همانطور که هستند -x اصلا استفاده نشده است).

کدهای عبور-خروج
به طور معمول gcc در صورت هر مرحله از کامپایلر، برنامه با کد 1 خارج می شود
کد بازگشتی غیرموفق را برمی‌گرداند. اگر مشخص کنید کدهای عبور-خروجاز gcc برنامه
در عوض با بالاترین خطای عددی تولید شده توسط هر فازی که برگردانده شده است، باز خواهد گشت
یک نشانه خطا فرانت‌اندهای C، C++ و Fortran، اگر داخلی باشند، عدد 4 را برمی‌گردانند
با خطای کامپایلر مواجه شده است.

اگر فقط برخی از مراحل تدوین را می خواهید، می توانید استفاده کنید -x (یا پسوند نام فایل)
گفتن gcc از کجا شروع کنیم و یکی از گزینه ها -c, -S، یا -E برای گفتن کجا gcc به
متوقف کردن. توجه داشته باشید که برخی از ترکیبات (به عنوان مثال، -x CPP-output -E) دستور دهید gcc به انجام
اصلا هیچی

-c فایل های منبع را کامپایل یا مونتاژ کنید، اما پیوند ندهید. مرحله پیوند به سادگی است
انجام نشده. خروجی نهایی به شکل یک فایل شی برای هر فایل منبع است.

به طور پیش فرض، نام فایل شی برای یک فایل منبع با جایگزینی پسوند ساخته می شود .c,
.i, .sو غیره با .o.

فایل های ورودی شناسایی نشده، که نیازی به کامپایل یا مونتاژ ندارند، نادیده گرفته می شوند.

-S توقف پس از مرحله تدوین مناسب. مونتاژ نکنید خروجی در
فرم یک فایل کد اسمبلر برای هر فایل ورودی غیر اسمبلر مشخص شده است.

به طور پیش فرض، نام فایل اسمبلر برای یک فایل منبع با جایگزینی پسوند ساخته می شود
.c, .iو غیره با .s.

فایل های ورودی که نیازی به کامپایل ندارند نادیده گرفته می شوند.

-E توقف پس از مرحله پیش پردازش؛ کامپایلر را به درستی اجرا نکنید. خروجی در است
فرم کد منبع از پیش پردازش شده، که به خروجی استاندارد ارسال می شود.

فایل های ورودی که نیازی به پیش پردازش ندارند نادیده گرفته می شوند.

-o پرونده
خروجی را در فایل قرار دهید پرونده. این صرف نظر از هر نوع خروجی اعمال می شود
در حال تولید، چه یک فایل اجرایی، یک فایل شی، یک فایل اسمبلر یا
کد C از پیش پردازش شده

If -o مشخص نشده است، پیش فرض قرار دادن یک فایل اجرایی است a.out، شیء
پرونده برای منبع.پسوند in منبع.o، فایل اسمبلر آن در منبع.s، از پیش کامپایل شده
فایل هدر در منبع.پسوند.gchو تمام منبع C از پیش پردازش شده در خروجی استاندارد.

-v چاپ (در خروجی خطای استاندارد) دستورات اجرا شده برای اجرای مراحل
تلفیقی. همچنین شماره نسخه برنامه درایور کامپایلر و نسخه را چاپ کنید
پیش پردازنده و کامپایلر مناسب

-###
پسندیدن -v به جز اینکه دستورات اجرا نمی شوند و آرگومان ها نقل قول می شوند مگر اینکه آنها را انجام دهند
فقط شامل کاراکترهای الفبایی یا "./-_" باشد. این برای اسکریپت های پوسته مفید است
خطوط فرمان تولید شده توسط راننده را ضبط کنید.

لوله
برای ارتباط بین مراحل مختلف به جای فایل های موقت از لوله ها استفاده کنید
تلفیقی. این در برخی از سیستم هایی که اسمبلر قادر به خواندن نیست کار نمی کند
از یک لوله؛ اما اسمبلر گنو مشکلی ندارد.

--کمک
چاپ (روی خروجی استاندارد) شرحی از گزینه های خط فرمان که توسط آنها قابل درک است
gcc. اگر -v سپس گزینه نیز مشخص می شود --کمک نیز به آن منتقل خواهد شد
فرآیندهای مختلف فراخوانی شده توسط gcc، تا بتوانند گزینه های خط فرمان را نمایش دهند
آنها قبول می کنند. اگر -وکسترا گزینه نیز مشخص شده است (قبل از --کمک
گزینه)، سپس گزینه های خط فرمان که هیچ سندی با آنها مرتبط نیست
نیز نمایش داده خواهد شد.

--هدف-کمک
چاپ (روی خروجی استاندارد) شرح گزینه های خط فرمان خاص هدف
برای هر ابزار برای برخی از اهداف، ممکن است اطلاعات اضافی مربوط به هدف نیز وجود داشته باشد
چاپ شده.

--help={کلاس|[^]مقدماتی}[، ...]
چاپ (روی خروجی استاندارد) شرحی از گزینه های خط فرمان که توسط آنها قابل درک است
کامپایلری که در تمام کلاس ها و واجد شرایط قرار می گیرد. اینها هستند
کلاس های پشتیبانی شده:

بهینه سازها
با این کار تمام گزینه های بهینه سازی پشتیبانی شده توسط کامپایلر نمایش داده می شود.

هشدارها
این همه گزینه های کنترل کننده پیام های هشدار تولید شده توسط را نمایش می دهد
گردآورنده

هدف
این گزینه های خاص هدف را نمایش می دهد. بر خلاف --هدف-کمک انتخاب
با این حال، گزینه های خاص هدف پیوند دهنده و اسمبلر وجود نخواهد داشت
نمایش داده. این به این دلیل است که آن ابزارها در حال حاضر از Extended پشتیبانی نمی کنند
--کمک= نحو.

پارام ها
با این کار مقادیر شناسایی شده توسط --پارام گزینه.

زبان
این گزینه های پشتیبانی شده را نمایش می دهد زبان، که در آن زبان نام است
یکی از زبان های پشتیبانی شده در این نسخه از GCC.

مشترک
با این کار گزینه های مشترک در همه زبان ها نمایش داده می شود.

اینها واجد شرایط پشتیبانی شده هستند:

بدون ثبت نام
فقط آن دسته از گزینه هایی را نمایش دهید که بدون سند هستند.

پیوست
نمایش گزینه هایی که آرگومان را پس از علامت مساوی در همان آرگومان نشان می دهد
متن پیوسته، مانند: --help=هدف.

جداگانه
نمایش گزینه هایی که آرگومان هایی را در نظر می گیرند که به عنوان یک کلمه جداگانه در زیر نشان داده می شود
گزینه اصلی، مانند: -o فایل خروجی.

بنابراین برای مثال برای نمایش تمام سوئیچ های غیرمستند خاص هدف پشتیبانی شده توسط
می توان از کامپایلر موارد زیر استفاده کرد:

--help=هدف، بدون سند

حس یک واجد شرایط را می‌توان با پیشوند آن برعکس کرد ^ شخصیت، بنابراین برای
مثال برای نمایش همه گزینه های هشدار باینری (یعنی آنهایی که روشن یا خاموش هستند
و که استدلال نمی گیرند) که دارای توصیف هستند، از:

--help=warnings,^joined,^undocumented

استدلال به --کمک= نباید فقط از وارونه های وارونه تشکیل شود.

ترکیب چند کلاس ممکن است، اگرچه این معمولا خروجی را محدود می کند
آنقدر که چیزی برای نمایش وجود ندارد. با این حال، یکی از مواردی که کار می کند این است که چه زمانی
یکی از کلاس ها است هدف. بنابراین به عنوان مثال برای نمایش تمام هدف خاص
از گزینه های بهینه سازی زیر می توان استفاده کرد:

--help=هدف،بهینه سازها

La --کمک= گزینه را می توان در خط فرمان تکرار کرد. هر استفاده متوالی خواهد بود
کلاس گزینه های درخواستی خود را نمایش می دهد، از گزینه هایی که قبلاً بوده اند صرفنظر می کند
نمایش داده.

اگر -Q گزینه قبل از خط فرمان در خط فرمان ظاهر می شود --کمک= گزینه، سپس
متن توصیفی نمایش داده شده توسط --کمک= تغییر کرده است. به جای توصیف نمایش داده شده
گزینه ها، نشانه ای مبنی بر فعال بودن، غیرفعال بودن یا تنظیم بودن گزینه داده می شود
به یک مقدار خاص (با فرض اینکه کامپایلر این را در نقطه ای که
--کمک= گزینه استفاده می شود).

در اینجا یک نمونه کوتاه از پورت ARM آمده است gcc:

% gcc -Q -mabi=2 --help=target -c
گزینه های زیر مختص هدف هستند:
-mabi= 2
-mabort-on-noreturn [غیرفعال]
-mapcs [غیرفعال]

خروجی به اثرات گزینه های خط فرمان قبلی حساس است، بنابراین برای
به عنوان مثال می توان فهمید که در کدام بهینه سازی فعال شده است -O2 با استفاده از:

-Q -O2 --help=بهینه سازها

یا می توانید کشف کنید که کدام بهینه سازی های باینری توسط کدام فعال می شوند -O3 با استفاده از:

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 فعال شد

-بدون پیشوندهای متعارف
هیچ پیوند نمادینی را گسترش ندهید، ارجاعات را حل کنید /../ or /./، یا مسیر را بسازید
مطلق هنگام ایجاد یک پیشوند نسبی.

- نسخه
نمایش شماره نسخه و حق نسخه برداری GCC مورد استناد.

لفاف
همه دستورات فرعی را تحت یک برنامه wrapper فراخوانی کنید. نام برنامه wrapper و
پارامترهای آن به عنوان یک لیست جدا شده با کاما ارسال می شود.

gcc -c tc -wrapper gdb,--args

این همه زیربرنامه های از را فراخوانی می کند gcc زیر gdb --آرگس، بنابراین فراخوانی از cc1
خواهد بود gdb --آرگس cc1 ....

-fplugin=نام.بنابراین
کد افزونه را در فایل بارگیری کنید نام.so، فرض می شود که یک شی مشترک است که باید توسط آن حذف شود
کامپایلر از نام پایه فایل شی مشترک برای شناسایی افزونه استفاده می شود
برای اهداف تجزیه آرگومان (نگاه کنید به -fplugin-arg-نام-کلید=ارزش زیر). هر یک
افزونه باید توابع پاسخ به تماس مشخص شده در Plugins API را تعریف کند.

-fplugin-arg-نام-کلید=ارزش
یک آرگومان به نام تعریف کنید کلید با مقدار ارزش برای افزونه به نام نام.

-fdump-ada-spec[-سلیم]
برای منبع C و C++ و شامل فایل‌ها، مشخصات Ada مربوطه را ایجاد کنید.

-fdump-go-spec=پرونده
برای فایل های ورودی به هر زبانی، اعلان های Go مربوطه را در آن ایجاد کنید پرونده. این
اعلان های Go "const"، "type"، "var" و "func" را تولید می کند که ممکن است راه مفیدی باشد.
برای شروع نوشتن رابط Go برای کد نوشته شده به زبان دیگری.

@پرونده
گزینه های خط فرمان را از پرونده. گزینه های خوانده شده به جای گزینه درج می شوند
اصلی @پرونده گزینه. اگر پرونده وجود ندارد، یا نمی توان آن را خواند، پس گزینه
به معنای واقعی کلمه رفتار خواهد شد و حذف نخواهد شد.

گزینه ها در پرونده با فضای خالی از هم جدا می شوند. ممکن است یک کاراکتر فضای خالی گنجانده شود
در یک گزینه با احاطه کردن کل گزینه به صورت تک یا دو گیومه. هر
کاراکتر (از جمله بک اسلش) ممکن است با پیشوند کردن کاراکتر to be گنجانده شود
همراه با اسلش. در پرونده ممکن است خود حاوی @ اضافی باشدپرونده گزینه ها؛ هر
چنین گزینه هایی به صورت بازگشتی پردازش می شوند.

تدوین ++C برنامه ها
فایل های منبع C++ به طور معمول از یکی از پسوندها استفاده می کنند .C, . رونوشت, cpp, .CPP, c++, .cp، یا
cxx; فایل های هدر C++ اغلب استفاده می شود هه, hpp, .H، یا (برای کد الگوی مشترک) tccو
فایل های C++ از پیش پردازش شده از پسوند استفاده می کنند .ii. GCC فایل هایی با این نام ها و
آنها را به عنوان برنامه های C++ کامپایل می کند حتی اگر کامپایلر را به همان روشی که برای کامپایل فراخوانی می شود، فراخوانی کنید
برنامه های C (معمولا با نام gcc).

با این حال ، استفاده از gcc کتابخانه ++C را اضافه نمی کند. g ++ برنامه ای است که GCC و
رفتار می کند .c, .h و .i فایل ها به عنوان فایل های منبع C++ به جای فایل های منبع C، مگر اینکه -x is
استفاده می شود، و به طور خودکار پیوند در برابر کتابخانه C++ را مشخص می کند. این برنامه هم هست
هنگام پیش کامپایل کردن یک فایل هدر C با a .h پسوند برای استفاده در کامپایل های ++C.
در بسیاری از سیستم ها، g ++ همچنین با نام نصب شده است c ++.

هنگامی که برنامه های C++ را کامپایل می کنید، ممکن است بسیاری از گزینه های خط فرمان مشابه را مشخص کنید
شما برای کامپایل برنامه ها به هر زبانی استفاده می کنید. یا گزینه های خط فرمان معنی دار برای C
و زبان های مرتبط یا گزینه هایی که فقط برای برنامه های ++C معنی دارند.

گزینه کنترل C گفتار
گزینه های زیر گویش C (یا زبان های مشتق شده از C مانند C++ را کنترل می کنند،
Objective-C و Objective-C++) که کامپایلر می پذیرد:

-ansi
در حالت C، این معادل است -std=c90. در حالت C++ معادل است با
-std = C ++ 98.

این کار برخی از ویژگی‌های GCC را که با ISO C90 ناسازگار هستند خاموش می‌کند (زمانی که
کامپایل کردن کد C)، یا C++ استاندارد (هنگام کامپایل کد C++)، مانند "asm" و
کلمات کلیدی "نوع" و ماکروهای از پیش تعریف شده مانند "unix" و "vax" که
نوع سیستمی که استفاده می کنید همچنین ISO نامطلوب و به ندرت استفاده شده را فعال می کند
ویژگی سه گراف برای کامپایلر C، تشخیص سبک C++ را غیرفعال می کند //
نظرات و همچنین کلمه کلیدی "داخلی".

کلیدواژه های جایگزین "__asm__"، "__extension__"، "__inline__" و "__typeof__"
با وجود -ansi. شما نمی خواهید از آنها در یک برنامه ISO C استفاده کنید،
البته، اما قرار دادن آنها در فایل های هدر که ممکن است در آن گنجانده شود مفید است
تلفیقی انجام شده با -ansi. ماکروهای از پیش تعریف شده جایگزین مانند "__unix__" و
"__vax__" نیز با یا بدون موجود است -ansi.

La -ansi این گزینه باعث نمی شود برنامه های غیر ISO به طور بلاعوض رد شوند. برای
که، -پدانتیک لازم است علاوه بر -ansi.

زمانی که ماکرو "__STRICT_ANSI__" از پیش تعریف شده است -ansi گزینه استفاده می شود. مقداری سربرگ
فایل‌ها ممکن است متوجه این ماکرو شوند و از اعلام برخی عملکردها یا تعریف کردن خودداری کنند
ماکروهای خاصی که استاندارد ISO به آنها نیاز ندارد. این برای جلوگیری از دخالت است
با هر برنامه ای که ممکن است از این نام ها برای موارد دیگر استفاده کند.

توابعی که معمولاً ساخته می شوند اما معنایی تعریف شده توسط ISO C ندارند
(مانند "alloca" و "ffs") زمانی که توابع داخلی نیستند -ansi استفاده می شود.

-std=
استاندارد زبان را تعیین کنید. این گزینه در حال حاضر فقط زمانی پشتیبانی می شود که
کامپایل C یا C++

کامپایلر می تواند چندین استاندارد پایه را بپذیرد، مانند c90 or c++98، و گویش های گنو
از آن استانداردها، مانند gnu90 or gnu++98. با تعیین یک استاندارد پایه،
کامپایلر تمام برنامه هایی که از آن استاندارد پیروی می کنند و برنامه هایی که از گنو استفاده می کنند را می پذیرد
پسوندهایی که با آن مغایرت ندارند. مثلا، -std=c90 قطعی را خاموش می کند
ویژگی های GCC که با ISO C90 ناسازگار است، مانند "asm" و "typeof"
کلمات کلیدی، اما نه دیگر پسوندهای گنو که در ISO C90 معنی ندارند، مانند
حذف عبارت میانی یک عبارت "?:". از طرفی با تعیین یک گنو
به گویش استاندارد، تمام ویژگی‌هایی که کامپایلر پشتیبانی می‌کند، فعال هستند، حتی اگر آن‌ها
ویژگی‌ها معنای استاندارد پایه و برخی برنامه‌های سخت‌گیرانه را تغییر می‌دهند
ممکن است رد شود. استاندارد خاص توسط -پدانتیک برای شناسایی کدام
ویژگی ها با توجه به آن نسخه استاندارد، پسوندهای گنو هستند. مثلا -std=gnu90
-پدانتیک در مورد سبک C++ هشدار می دهد // نظرات، در حالی که -std=gnu99 -پدانتیک خواهد بود
است.

یک مقدار برای این گزینه باید ارائه شود. مقادیر ممکن هستند

c90
c89
iso9899: 1990
پشتیبانی از همه برنامه های ISO C90 (برخی برنامه های افزودنی گنو که با ISO C90 در تضاد هستند
غیر فعال هستند). مثل -ansi برای کد C

iso9899: 199409
ISO C90 همانطور که در اصلاحیه 1 اصلاح شده است.

c99
c9x
iso9899: 1999
iso9899:199x
ISO C99. توجه داشته باشید که این استاندارد هنوز به طور کامل پشتیبانی نمی شود. دیدن
<http://gcc.gnu.org/gcc-4.7/c99status.html> برای اطلاعات بیشتر نام ها c9x
و iso9899:199x منسوخ شده اند.

c11
c1x
iso9899: 2011
ISO C11، تجدید نظر در سال 2011 استاندارد ISO C. پشتیبانی ناقص است و
تجربی نام c1x منسوخ شده است.

gnu90
gnu89
گویش گنو ISO C90 (شامل برخی از ویژگی های C99). این پیش فرض برای C است
کد

gnu99
gnu9x
گویش گنو ISO C99. هنگامی که ISO C99 به طور کامل در GCC پیاده سازی شود، این کار انجام می شود
پیش فرض شود. نام gnu9x منسوخ شده است.

gnu11
gnu1x
گویش گنو ISO C11. پشتیبانی ناقص و آزمایشی است. نام gnu1x
منسوخ شده است.

c++98
استاندارد ISO C++ 1998 به همراه اصلاحات. مثل -ansi برای کد ++C

gnu++98
گویش گنو از -std = C ++ 98. این کد پیش فرض برای C++ است.

c++11
استاندارد ISO C++ 2011 به همراه اصلاحات. پشتیبانی از C++11 همچنان ادامه دارد
آزمایشی است و ممکن است در نسخه های بعدی به روش های ناسازگار تغییر کند.

gnu++11
گویش گنو از -std = C ++ 11. پشتیبانی از C++11 هنوز آزمایشی است و ممکن است تغییر کند
به روش های ناسازگار در نسخه های بعدی.

-fgnu89-inline
گزینه -fgnu89-inline به شورای همکاری خلیج فارس می گوید که از معنای سنتی گنو برای «داخلی» استفاده کند.
در حالت C99 کار می کند.
این گزینه توسط نسخه های GCC 4.1.3 تا، اما شامل آن، پذیرفته شده و نادیده گرفته می شود
4.3. در نسخه های GCC 4.3 به بعد، رفتار GCC را در حالت C99 تغییر می دهد. استفاده كردن
این گزینه تقریباً معادل افزودن ویژگی تابع "gnu_inline" به همه است
توابع درون خطی

گزینه -fno-gnu89-inline صریحاً به GCC می‌گوید که از معنای C99 استفاده کند
"inline" در حالت C99 یا gnu99 (یعنی رفتار پیش فرض را مشخص می کند). این
گزینه برای اولین بار در GCC 4.3 پشتیبانی شد. این گزینه در پشتیبانی نمی شود -std=c90 or
-std=gnu90 حالت.

ماکروهای پیش پردازنده "__GNUC_GNU_INLINE__" و "__GNUC_STDC_INLINE__" ممکن است استفاده شوند
برای بررسی اینکه کدام معناها برای توابع "داخلی" موثر هستند.

-aux-info نام فایل
خروجی به نام فایل داده شده، اعلان های نمونه اولیه برای همه توابع اعلام شده و/یا
تعریف شده در یک واحد ترجمه، از جمله موارد موجود در فایل‌های هدر. این گزینه است
بی سر و صدا در هر زبانی غیر از C نادیده گرفته می شود.

علاوه بر اظهارنامه ها، فایل در نظرات، مبدأ هر اظهارنامه را نشان می دهد
(فایل منبع و خط)، چه بیانیه ضمنی، نمونه اولیه یا
بدون نمونه (I, N برای جدید یا O برای قدیمی، به ترتیب، در شخصیت اول پس از
شماره خط و دو نقطه)، و اینکه آیا از یک اعلان یا یک تعریف آمده است
(C or Fبه ترتیب در کاراکتر زیر). در مورد عملکرد
تعاریف، فهرستی به سبک K&R از آرگومان ها و به دنبال آن اعلانات آنها نیز وجود دارد
ارائه شده، در نظرات، پس از اعلامیه.

-fallow-less-variadic-functions
توابع متغیر را بدون پارامترهای نامگذاری شده بپذیرید.

اگرچه می توان چنین تابعی را تعریف کرد، اما آنطور که هست خیلی مفید نیست
خواندن استدلال ها ممکن نیست این فقط برای C پشتیبانی می شود، همانطور که این ساختار است
توسط C++ مجاز است.

-فنو-اسم
"asm"، "inline" یا "typeof" را به عنوان یک کلمه کلیدی شناسایی نکنید، بنابراین کد می تواند از این کلمات استفاده کند.
کلمات به عنوان شناسه می توانید از کلمات کلیدی "__asm__"، "__inline__" و
در عوض "__typeof__". -ansi دلالت دارد -فنو-اسم.

در C++، این سوئیچ فقط بر کلمه کلیدی "typeof" تاثیر می گذارد، زیرا "asm" و "inline" هستند.
کلمات کلیدی استاندارد ممکن است بخواهید از -fno-gnu-words پرچم به جای آن، که دارد
همان اثر در حالت C99 (-std=c99 or -std=gnu99، این سوئیچ فقط بر روی
کلمات کلیدی "asm" و "typeof"، زیرا "inline" یک کلمه کلیدی استاندارد در ISO C99 است.

-فنو ساخته شده است
-fno-builtin-تابع
توابع داخلی را که با آن شروع نمی شوند شناسایی نکنید __ساخت_ به عنوان پیشوند

GCC معمولاً کد خاصی را برای رسیدگی بیشتر به برخی عملکردهای داخلی تولید می کند
کارآمد؛ به عنوان مثال، فراخوانی به "alloca" ممکن است به دستورالعمل های واحد تبدیل شود که
پشته را مستقیماً تنظیم کنید و تماس‌های "memcpy" ممکن است به حلقه‌های کپی درونی تبدیل شوند. در
کد حاصل اغلب کوچکتر و سریعتر است، اما از آنجایی که تابع شماره را صدا می کند
برای مدت طولانی تری به این صورت ظاهر می شود، نمی توانید برای آن تماس ها نقطه انفصال تعیین کنید، و همچنین نمی توانید تغییر دهید
رفتار توابع از طریق پیوند با کتابخانه ای دیگر. علاوه بر این، زمانی که
یک تابع به عنوان یک تابع داخلی شناخته می شود، GCC ممکن است از اطلاعات مربوط به آن استفاده کند
این تابع برای هشدار در مورد مشکلات مربوط به تماس های آن تابع، یا ایجاد موارد بیشتر
کد کارآمد، حتی اگر کد به دست آمده همچنان شامل فراخوانی به آن تابع باشد. برای
به عنوان مثال، هشدارها با داده شده است -فرمت برای تماس های بد به "printf"، زمانی که "printf" است
ساخته شده است، و "strlen" شناخته شده است که حافظه جهانی را تغییر نمی دهد.

با -fno-builtin-تابع گزینه فقط تابع داخلی است تابع غیرفعال است
تابع نباید با شروع شود __ساخت_. اگر تابعی نامگذاری شود که داخلی نباشد
در این نسخه از GCC، این گزینه نادیده گرفته می شود. متناظری وجود ندارد
-fbuiltin-تابع گزینه؛ اگر می خواهید عملکردهای داخلی را به صورت انتخابی فعال کنید
با استفاده از -فنو ساخته شده است or -مناسب، می توانید ماکروهایی مانند:

#define abs(n) __builtin_abs ((n))
#define strcpy(d, s) __builtin_strcpy ((d)، (s))

-Fhosted
ادعا کنید که کامپایل در یک محیط میزبان صورت می گیرد. این دلالت می کنه که -fbuiltin.
یک محیط میزبانی شده، محیطی است که در آن کل کتابخانه استاندارد در دسترس است، و در آن
که "main" نوع بازگشتی "int" دارد. مثالها تقریباً همه چیز هستند به جز a
هسته این معادل است -Fno-freestanding.

-مناسب
ادعا کنید که کامپایل در یک محیط مستقل انجام می شود. این دلالت می کنه که
-فنو ساخته شده است. یک محیط مستقل محیطی است که کتابخانه استاندارد ممکن است در آن نباشد
وجود دارد، و راه اندازی برنامه ممکن است لزوما در "اصلی" نباشد. بارزترین مثال
یک هسته سیستم عامل است. این معادل است میزبانی fno.

-فوپنمپ
مدیریت دستورات OpenMP "#pragma omp" در C/C++ و "!$omp" در Fortran را فعال کنید.
چه زمانی -فوپنمپ مشخص شده است، کامپایلر مطابق با کد موازی تولید می کند
رابط برنامه کاربردی OpenMP نسخه 3.0http://www.openmp.org/> این گزینه
دلالت دارد - نخ، و بنابراین فقط در اهدافی پشتیبانی می شود که از آنها پشتیبانی می کنند
- نخ.

-fgnu-tm
زمانی که گزینه -fgnu-tm مشخص شده است، کامپایلر برای لینوکس کد تولید می کند
گونه ای از سند مشخصات ABI حافظه تراکنش فعلی اینتل (بازبینی
1.1، 6 مه 2009). این یک ویژگی آزمایشی است که ممکن است رابط کاربری آن تغییر کند
نسخه های آینده GCC، با تغییر مشخصات رسمی. لطفا توجه داشته باشید که نه
تمام معماری ها برای این ویژگی پشتیبانی می شوند.

برای اطلاعات بیشتر در مورد پشتیبانی GCC از حافظه تراکنشی،

توجه داشته باشید که ویژگی حافظه تراکنشی با استثناهای غیر تماس پشتیبانی نمی شود
(-fnon-call-exceptions).

-اف ام اس-افزونه ها
برخی از ساختارهای غیر استاندارد مورد استفاده در فایل‌های هدر مایکروسافت را بپذیرید.

در کد ++C، این اجازه می دهد تا نام اعضا در ساختارها مشابه انواع قبلی باشد
اعلامیه ها

typedef int UOW;
ساختار ABC {
UOW UOW;
};

برخی از فیلدهای بدون نام در ساختارها و اتحادیه ها فقط با این مورد پذیرفته می شوند
گزینه.

-fplan9-extensions
برخی از ساختارهای غیر استاندارد مورد استفاده در کد پلان 9 را بپذیرید.

این را قادر می سازد -اف ام اس-افزونه ها، اجازه می دهد تا نشانگرها را به ساختارهایی با ناشناس ارسال کنند
فیلدها به توابعی که انتظار نشانگرهایی به عناصر نوع فیلد دارند و
مجوزهای اشاره به فیلدهای ناشناس اعلام شده با استفاده از typedef. این فقط
برای C پشتیبانی می شود، نه C++.

سه نمودارها
پشتیبانی از سه گراف ISO C در -ansi گزینه (و -std گزینه هایی برای ISO سختگیرانه C
انطباق) دلالت دارد سه نمودارها.

-no-integrated-cpp
یک کامپایل را در دو مرحله انجام می دهد: پیش پردازش و کامپایل. این گزینه اجازه می دهد
کاربر «cc1»، «cc1plus» یا «cc1obj» را از طریق -B گزینه. کاربر عرضه کرده است
سپس مرحله کامپایل می تواند یک مرحله پیش پردازش اضافی را پس از عادی اضافه کند
پیش پردازش اما قبل از کامپایل. پیش فرض استفاده از cpp یکپارچه است
(cpp داخلی)

اگر «cc1»، «cc1plus» و «cc1obj» ادغام شوند، معنای این گزینه تغییر خواهد کرد.

-سنتی
سنتی-cpp
قبلاً، این گزینه‌ها باعث می‌شد GCC تلاش کند تا یک کامپایلر پیش‌استاندارد C را تقلید کند.
آنها در حال حاضر تنها با پشتیبانی می شوند -E تعویض. پیش پردازنده به پشتیبانی خود ادامه می دهد
یک حالت پیش استاندارد برای جزئیات به کتابچه راهنمای GNU CPP مراجعه کنید.

-fcond-عدم تطابق
در آرگومان های دوم و سوم، عبارات شرطی با انواع نامتناسب را مجاز کنید.
ارزش چنین عبارتی باطل است. این گزینه برای C++ پشتیبانی نمی شود.

تبدیل -بردار کتان
تبدیل ضمنی بین بردارهایی با تعداد عناصر و/یا متفاوت مجاز است
انواع عناصر ناسازگار این گزینه نباید برای کد جدید استفاده شود.

-funsigned-char
بگذارید نوع «char» بدون علامت باشد، مانند «char unsigned».

هر نوع ماشین یک پیش‌فرض برای آنچه «char» باید باشد دارد. یا شبیه است
به‌طور پیش‌فرض «نویسه بدون علامت» یا به‌طور پیش‌فرض مانند «نویسه امضاشده».

در حالت ایده‌آل، یک برنامه قابل حمل همیشه باید از «char Signed» یا «unsigned char» استفاده کند.
به امضای یک شی بستگی دارد. اما برنامه های زیادی برای استفاده نوشته شده است
"char" ساده باشد و انتظار داشته باشید که امضا شود یا انتظار داشته باشید که بسته به آن بدون امضا باشد
ماشین هایی که برای آنها نوشته شده اند. این گزینه، و معکوس آن، به شما اجازه می دهد چنین چیزی را بسازید
کار برنامه با پیش فرض مخالف

نوع "char" همیشه یک نوع متمایز از هر یک از "charsigned char" یا "unsigned" است.
char، حتی اگر رفتارش همیشه شبیه یکی از آن دو باشد.

-fsigned-char
اجازه دهید نوع "char" مانند "char Signed" امضا شود.

توجه داشته باشید که این معادل است -fno-unsigned-char، که شکل منفی آن است
-funsigned-char. به همین ترتیب، گزینه -منوم-امضای برابر است با
-funsigned-char.

-fsigned-bitfields
-funsigned-bitfields
-fno-signed-bitfields
-fno-unsigned-bitfields
این گزینه‌ها کنترل می‌کنند که آیا یک فیلد بیت در هنگام اعلان امضا یا بدون علامت باشد
از "امضا" یا "بدون امضا" استفاده نمی کند. به طور پیش فرض، چنین فیلد بیتی امضا شده است،
زیرا این سازگار است: انواع اعداد صحیح اصلی مانند "int" انواع علامت دار هستند.

گزینه کنترل ++C گفتار
این بخش گزینه های خط فرمان را توضیح می دهد که فقط برای برنامه های C++ معنادار هستند.
اما شما همچنین می توانید از اکثر گزینه های کامپایلر گنو صرف نظر از زبان خود استفاده کنید
به عنوان مثال، می توانید یک فایل "firstClass.C" را مانند این کامپایل کنید:

g ++ -g -frepo -o -c firstClass.c

در این مثال فقط -فرپو گزینه ای است که فقط برای برنامه های C++ در نظر گرفته شده است. می توانید از
گزینه های دیگر با هر زبانی که توسط GCC پشتیبانی می شود.

در اینجا لیستی از گزینه های موجود است فقط برای کامپایل برنامه های ++C:

-fabi-version=n
از نسخه استفاده کنید n از C++ ABI. نسخه 2 اولین نسخه C++ ABI است
در G++ 3.4 ظاهر شد. نسخه 1 نسخه C++ ABI است که برای اولین بار در آن ظاهر شد
G++ 3.2. نسخه 0 همیشه نسخه ای خواهد بود که بیشترین مطابقت را با C++ دارد
مشخصات ABI بنابراین، ABI به دست آمده با استفاده از نسخه 0 به عنوان ABI تغییر خواهد کرد
اشکالات رفع شده است.

پیش فرض نسخه 2 است.

نسخه 3 یک خطا را در مخفی کردن یک آدرس ثابت به عنوان آرگومان الگو تصحیح می کند.

نسخه 4 که برای اولین بار در G++ 4.5 ظاهر شد، یک mangling استاندارد برای برداری را پیاده سازی می کند.
انواع.

نسخه 5 که برای اولین بار در G++ 4.6 ظاهر شد، اشتباه بودن ویژگی را تصحیح می کند
const/volatile در انواع نشانگر تابع، decltype یک decl ساده و استفاده از a
پارامتر تابع در اعلام یک پارامتر دیگر.

نسخه 6 که برای اولین بار در G++ 4.7 ظاهر شد، رفتار تبلیغاتی C++11 را تصحیح می کند.
فهرست‌های دامنه‌دار و مخدوش کردن بسته‌های آرگومان الگو، const/static_cast، پیشوند ++
و -- و یک تابع محدوده کلاس که به عنوان آرگومان الگو استفاده می شود.

همچنین مشاهده کنید -وابی.

-fno-access-control
تمام بررسی دسترسی را خاموش کنید. این سوئیچ عمدتاً برای رفع اشکالات مفید است
کد کنترل دسترسی

-fcheck-جدید
قبل از تلاش، بررسی کنید که نشانگر بازگردانده شده توسط "اپراتور جدید" تهی نباشد
ذخیره سازی اختصاص داده شده را تغییر دهید. این بررسی معمولاً غیر ضروری است زیرا C++
استاندارد مشخص می کند که "اپراتور جدید" تنها در صورتی که اعلان شود 0 را برمی گرداند پرت کردن(),
در این صورت کامپایلر همیشه مقدار بازگشتی را حتی بدون این بررسی می کند
گزینه. در همه موارد دیگر، زمانی که "اپراتور جدید" یک استثنای غیر خالی دارد
مشخصات، خستگی حافظه با پرتاب "std::bad_alloc" علامت گذاری می شود. همچنین ببینید
جدید (نه از طرف دیگر).

-fconserve-space
متغیرهای سراسری بدون مقدار اولیه یا اولیه با زمان اجرا را در بخش مشترک قرار دهید
C انجام می دهد. این باعث صرفه جویی در فضا در فایل اجرایی به قیمت عدم تشخیص تکراری می شود
تعاریف اگر با این پرچم کامپایل کنید و برنامه شما به طور مرموزی خراب شود
پس از تکمیل "main()" ممکن است یک شی داشته باشید که دو بار از بین می رود
زیرا دو تعریف با هم ادغام شدند.

اکنون که پشتیبانی برای آنها اضافه شده است، این گزینه دیگر برای اکثر اهداف مفید نیست
قرار دادن متغیرها در BSS بدون رایج کردن آنها.

-fconstexpr-depth=n
حداکثر عمق ارزیابی تو در تو را برای توابع C++11 constexpr روی آن تنظیم کنید n. یک حد
برای تشخیص بازگشت بی پایان در طول ارزیابی بیان ثابت مورد نیاز است. در
حداقل تعیین شده توسط استاندارد 512 است.

-fdeduce-init-list
فعال کردن کسر پارامتر نوع الگو به عنوان std::initializer_list از یک پرانتز-
لیست اولیه محصور شده است، به عنوان مثال

قالب جلو خودکار (T t) -> decltype (realfn (t))
{
بازگشت realfn (t);
}

void f ()
{
به جلو ({1,2}); // انتقال تماس >
}

این کسر به عنوان یک گسترش احتمالی برای پیشنهاد اولیه اجرا شد
معناشناسی برای استاندارد C++11، اما بخشی از استاندارد نهایی نبود، بنابراین همینطور است
به طور پیش فرض غیرفعال است. این گزینه منسوخ شده است و ممکن است در آینده حذف شود
نسخه G++.

-friend-injection
توابع دوست را در فضای نام محصور تزریق کنید تا در خارج قابل مشاهده باشند
محدوده کلاسی که در آن اعلام شده اند. توابع دوست مستند شد
به این روش در راهنمای مرجع قدیمی Annotated C++ و نسخه‌های G++ قبلی
4.1 همیشه همینطور کار می کرد. با این حال، در ISO C++ یک تابع دوست که نیست
تنها با استفاده از جستجوی وابسته به آرگومان می توان آن را در یک محدوده ضمیمه ای یافت.
این گزینه باعث می شود که دوستان مانند نسخه های قبلی تزریق شوند.

این گزینه برای سازگاری است و ممکن است در نسخه بعدی G++ حذف شود.

fno-elide-constructors
استاندارد C++ به یک پیاده سازی اجازه می دهد تا ایجاد موقتی را که فقط است حذف کند
برای مقداردهی اولیه یک شی دیگر از همان نوع استفاده می شود. با تعیین این گزینه غیرفعال می شود
این بهینه سازی، و G++ را مجبور می کند تا سازنده کپی را در همه موارد فراخوانی کند.

مشخصات -fno-enforce-eh
برای بررسی نقض مشخصات استثنا در زمان اجرا، کد تولید نکنید.
این گزینه استاندارد C++ را نقض می کند، اما ممکن است برای کاهش اندازه کد مفید باشد
تولید می سازد، بسیار شبیه به تعریف NDEBUG. این اجازه کد کاربر را نمی دهد
برای ایجاد استثنا در نقض مشخصات استثنا. کامپایلر خواهد کرد
هنوز بر اساس مشخصات بهینه سازی می شود، بنابراین ایجاد یک استثنا غیر منتظره انجام می شود
منجر به رفتار نامشخص می شود.

-for-scope
-fno-for-scope
If -for-scope مشخص شده است، محدوده متغیرهای اعلام شده در a for-init-statement
محدود به برای خود حلقه، همانطور که توسط استاندارد C++ مشخص شده است. اگر
-fno-for-scope مشخص شده است، محدوده متغیرهای اعلام شده در a for-init-statement
همانطور که در نسخه‌های قدیمی G++ وجود داشت، تا انتهای محدوده محصور گسترش می‌یابد، و
سایر پیاده سازی های (سنتی) C++.

پیش‌فرض اگر هیچ یک از پرچم‌ها داده نشود، از استاندارد پیروی می‌کند، اما اجازه می‌دهد و a را می‌دهد
اخطار برای کدهای سبک قدیمی که در غیر این صورت نامعتبر هستند یا متفاوت هستند
رفتار.

-fno-gnu-words
"typeof" را به عنوان یک کلمه کلیدی شناسایی نکنید، بنابراین کد می تواند از این کلمه به عنوان یک کلمه استفاده کند
مشخص کننده. به جای آن می توانید از کلمه کلیدی "__typeof__" استفاده کنید. -ansi دلالت دارد
-fno-gnu-words.

-fno- implicit-templates
هرگز برای الگوهای غیرخطی که به طور ضمنی (به عنوان مثال توسط
استفاده کنید)؛ فقط کدهایی را برای نمونه های صریح منتشر می کند.

الگوهای -fno- ضمنی-داخلی
برای نمونه های ضمنی الگوهای درون خطی نیز کد ارسال نکنید. پیشفرض
این است که خطوط داخلی را به گونه ای متفاوت مدیریت کنیم تا کامپایل ها با و بدون بهینه سازی انجام شوند
به مجموعه ای از نمونه های صریح نیاز دارند.

-fno-implement-inlines
برای صرفه جویی در فضا، کپی های خارج از خط از توابع درون خطی که توسط کنترل می شوند منتشر نکنید
#پراگما پیاده سازی. اگر این توابع نباشند، این باعث ایجاد خطاهای پیوند دهنده می شود
خط کشی شده در هر جایی که آنها را صدا می زنند.

-اف ام اس-افزونه ها
غیرفعال کردن هشدارهای pedantic در مورد ساختارهای مورد استفاده در MFC، مانند int ضمنی و
گرفتن اشاره گر به تابع عضو از طریق نحو غیر استاندارد.

-fno-nonansi-builtins
اعلان‌های داخلی توابعی که توسط ANSI/ISO C اجباری نشده‌اند را غیرفعال کنید
شامل «ffs»، «alloca»، «_exit»، «index»، «bzero»، «conjf» و سایر موارد مرتبط
توابع.

-fnothrow-opt
با مشخصات استثنایی "throw()" طوری رفتار کنید که انگار یک مشخصات "noexcept" است
برای کاهش یا حذف سربار اندازه متن نسبت به یک تابع بدون استثنا
مشخصات. اگر تابع دارای متغیرهای محلی از انواع غیر بی اهمیت باشد
تخریب‌کننده‌ها، مشخصات استثنا در واقع عملکرد را کوچک‌تر می‌کند
زیرا پاکسازی EH برای آن متغیرها را می توان بهینه کرد. معنایی
اثر این است که یک استثنا با چنین استثنایی از یک تابع خارج می شود
مشخصات منجر به فراخوانی برای "خاتمه" به جای "غیر منتظره" می شود.

-fno-operator-names
از کلمات کلیدی نام اپراتور "and"، "bitand"، "bitor"، "compl"، "not"، "or" استفاده نکنید.
و "xor" به عنوان مترادف به عنوان کلمات کلیدی.

-fno-optional-diags
عیب‌یابی را که استاندارد می‌گوید کامپایلر نیازی به صدور آن ندارد، غیرفعال کنید.
در حال حاضر، تنها تشخیصی که توسط G++ صادر می‌شود، تشخیصی برای یک نام است
معانی متعدد در یک کلاس

-مجاز
برخی از تشخیص‌های مربوط به کد ناسازگار را از خطا به هشدار تنزل دهید. بدین ترتیب،
با استفاده از -مجاز به برخی از کدهای ناسازگار اجازه کامپایل می دهد.

-fno-pretty-templates
هنگامی که یک پیغام خطا به تخصص یک الگوی تابع، کامپایلر اشاره دارد
معمولاً امضای الگو را به دنبال آرگومان های الگو چاپ می کند
و هر نوع تایپ یا نامی در امضا (مثلاً "void f(T) [با T = int]"
از "void f(int)") تا مشخص شود که کدام الگو درگیر است. وقتی یک خطا
پیام به تخصص یک الگوی کلاس اشاره دارد، کامپایلر هر کدام را حذف می کند
آرگومان های قالب که با آرگومان های قالب پیش فرض برای آن الگو مطابقت دارند. اگر
هر یک از این رفتارها درک پیام خطا را دشوارتر می کند
راحت تر، با استفاده از -fno-pretty-templates آنها را غیرفعال خواهد کرد.

-فرپو
نمونه سازی خودکار الگو را در زمان پیوند فعال کنید. این گزینه نیز دلالت دارد
-fno- implicit-templates.

-fno-rtti
غیرفعال کردن تولید اطلاعات در مورد هر کلاس با توابع مجازی برای استفاده توسط
ویژگی های شناسایی نوع زمان اجرا C++ (دینامیک_کست و نوع گونه). اگر این کار را نکنید
با استفاده از آن قسمت های زبان، می توانید با استفاده از این پرچم مقداری فضا ذخیره کنید. توجه داشته باشید
این مدیریت استثنا از همان اطلاعات استفاده می کند، اما در صورت نیاز آن را تولید می کند.
La دینامیک_کست هنوز هم می توان از اپراتور برای کست هایی استفاده کرد که به زمان اجرا نیاز ندارند
اطلاعات را تایپ کنید، به عنوان مثال به "void *" یا به کلاس های پایه بدون ابهام فرستاده می شود.

-fstats
در پایان کامپایل، آماری در مورد پردازش جلویی ارسال کنید. این
اطلاعات عموماً فقط برای تیم توسعه G++ مفید است.

-fstrict-enums
به کامپایلر اجازه دهید با استفاده از این فرض که یک مقدار از نوع شمارش شده است، بهینه سازی کند
فقط می تواند یکی از مقادیر شمارش باشد (همانطور که در استاندارد C++ تعریف شده است.
اساساً، مقداری که می تواند در حداقل تعداد بیت های مورد نیاز نمایش داده شود
نشان دهنده همه شمارش کنندگان). اگر برنامه از آن استفاده کند، این فرض ممکن است معتبر نباشد
یک cast برای تبدیل یک مقدار صحیح دلخواه به نوع شمارش شده.

-ftemplate-depth=n
حداکثر عمق نمونه سازی را برای کلاس های الگو تنظیم کنید n. محدودیتی در
عمق نمونه سازی الگو برای شناسایی بازگشت های بی پایان در طول قالب مورد نیاز است
نمونه سازی کلاس برنامه های منطبق با ANSI/ISO C++ نباید به حداکثر متکی باشند
عمق بیشتر از 17 (در C++1024 به 11 تغییر یافت). مقدار پیش فرض 900 است
کامپایلر ممکن است قبل از رسیدن به 1024 در برخی شرایط فضای پشته تمام شود.

-fno-threadsafe-statics
کد اضافی را برای استفاده از روال های مشخص شده در C++ ABI برای رشته ارسال نکنید.
مقداردهی اولیه ایمن استاتیک محلی می توانید از این گزینه برای کاهش حجم کد استفاده کنید
کمی در کدی که نیازی به thread-safe بودن ندارد.

-fuse-cxa-atexit
با استفاده از «__cxa_atexit»، تخریب‌کننده‌ها را برای اشیا با مدت زمان ذخیره‌سازی ثابت ثبت کنید.
تابع به جای تابع "atexit". این گزینه برای به طور کامل مورد نیاز است
مدیریت منطبق با استانداردها با تخریبگرهای استاتیک، اما تنها در صورتی کار خواهد کرد که C شما
کتابخانه از "__cxa_atexit" پشتیبانی می کند.

-fno-use-cxa-get-exception-ptr
از روال زمان اجرا "__cxa_get_exception_ptr" استفاده نکنید. این باعث خواهد شد
"std::uncaught_exception" نادرست است، اما اگر روال زمان اجرا باشد ضروری است
در دسترس نیست.

-fvisibility-inlines-hidden
این سوئیچ اعلام می‌کند که کاربر تلاشی برای مقایسه نشانگرها با درون خطی نمی‌کند
توابع یا روش‌هایی که آدرس‌های دو تابع در آنها متفاوت است
اشیاء مشترک

تأثیر این امر این است که GCC ممکن است، به طور مؤثر، روش های درون خطی را با آن علامت گذاری کند
"__ویژگی__ ((قابل مشاهده ("پنهان")))" تا در صادرات ظاهر نشوند
جدول یک DSO و در هنگام استفاده در DSO نیازی به غیر جهت PLT ندارند.
فعال کردن این گزینه می تواند تأثیر چشمگیری بر بارگذاری و زمان پیوند یک DSO داشته باشد
هنگامی که کتابخانه سنگین می شود، اندازه جدول صادرات پویا را به شدت کاهش می دهد
استفاده از قالب ها

رفتار این سوئیچ کاملاً مشابه علامت گذاری روش ها به عنوان پنهان نیست
به طور مستقیم، زیرا بر متغیرهای استاتیک محلی برای تابع یا علت تأثیر نمی گذارد
کامپایلر استنباط کند که تابع تنها در یک شیء مشترک تعریف شده است.

شما می‌توانید روشی را به‌عنوان دارای دید مشخص برای نفی تأثیر آن علامت‌گذاری کنید
سوئیچ برای آن روش برای مثال، اگر می خواهید اشاره گرها را با a مقایسه کنید
روش درون خطی خاص، ممکن است آن را به عنوان دارای قابلیت مشاهده پیش فرض علامت گذاری کنید. علامت گذاری
محصور کردن کلاس با دید واضح هیچ تاثیری نخواهد داشت.

روش‌های درون خطی که به صراحت نمونه‌سازی شده‌اند، تحت تأثیر این گزینه به‌عنوان پیوندشان قرار نمی‌گیرند
در غیر این صورت ممکن است از یک مرز کتابخانه مشترک عبور کند.

-fvisibility-ms-compat
این پرچم سعی می‌کند از تنظیمات دید برای ساخت مدل پیوند C++ GCC استفاده کند
سازگار با مایکروسافت ویژوال استودیو.

پرچم این تغییرات را در مدل پیوند GCC ایجاد می کند:

1. قابلیت مشاهده پیش‌فرض را روی «مخفی» تنظیم می‌کند fvisibility = پنهان.

2. تایپ ها، اما اعضای آن ها، به طور پیش فرض مخفی نمی شوند.

3. قانون One Definition برای انواعی که قابل مشاهده نیستند راحت است
مشخصاتی که در بیش از یک شی مشترک مختلف تعریف شده اند: آن ها
اعلامیه ها در صورتی مجاز هستند که در زمان وجود این گزینه مجاز بودند
استفاده نشده.

در کد جدید بهتر است استفاده کنید fvisibility = پنهان و آن کلاس هایی را که هستند صادر کنید
در نظر گرفته شده است که از خارج قابل مشاهده باشد. متأسفانه امکان تکیه کد برای کد وجود دارد،
شاید به طور تصادفی، در رفتار ویژوال استودیو.

از جمله پیامدهای این تغییرات این است که اعضای داده ایستا از یک نوع هستند
با همان نام اما تعریف شده در اشیاء مشترک مختلف متفاوت خواهد بود، بنابراین
تغییر یکی دیگری را تغییر نمی دهد. و اشاره گر به اعضای تابع تعریف شده است
در اشیاء مشترک مختلف ممکن است با هم مقایسه نشوند. وقتی این پرچم داده می شود، یک است
نقض ODR برای تعریف انواع با نام مشابه متفاوت است.

-فنو ضعیف
از پشتیبانی نماد ضعیف استفاده نکنید، حتی اگر توسط پیوند دهنده ارائه شده باشد. به طور پیش فرض، G++
در صورت موجود بودن از نمادهای ضعیف استفاده خواهد کرد. این گزینه فقط برای تست وجود دارد و
نباید توسط کاربران نهایی استفاده شود. منجر به کد پایین تر می شود و هیچ مزیتی ندارد.
این گزینه ممکن است در نسخه بعدی G++ حذف شود.

-nostdinc++
فایل های هدر را در دایرکتوری های استاندارد مخصوص C++ جستجو نکنید، اما این کار را انجام دهید
هنوز دایرکتوری های استاندارد دیگر را جستجو کنید. (این گزینه در هنگام ساخت استفاده می شود
کتابخانه C++.)

علاوه بر این، این گزینه های بهینه سازی، هشدار و تولید کد فقط معانی دارند
برای برنامه های ++C:

-fno-default-inline
فرض نکن خطی برای توابع تعریف شده در محدوده کلاس.
توجه داشته باشید که این توابع مانند توابع درون خطی پیوند دارند. آنها فقط نمی خواهند
به صورت پیش فرض خطی شود.

-وابی (فقط C، Objective-C، C++ و Objective-C++)
هنگامی که G++ کدی را تولید می کند که احتمالاً با فروشنده خنثی سازگار نیست، هشدار دهید
C++ ABI. اگرچه تلاش شده است در مورد همه این موارد هشدار داده شود، اما وجود دارد
احتمالاً برخی از مواردی که در مورد آنها هشدار داده نشده است، حتی اگر G++ در حال ایجاد است
کد ناسازگار همچنین ممکن است مواردی وجود داشته باشد که اخطارها صادر شود حتی اگر
کدی که تولید می شود سازگار خواهد بود.

اگر در مورد آن نگران هستید، باید کد خود را بازنویسی کنید تا از این هشدارها جلوگیری کنید
این واقعیت که کد تولید شده توسط G++ ممکن است با کد تولید شده توسط باینری سازگار نباشد
سایر کامپایلرها

ناسازگاری های شناخته شده در -fabi-version=2 (پیش فرض) شامل:

· یک الگو با پارامتر الگوی غیر نوع از نوع مرجع مخدوش شده است
نادرست:

خارجی int N;
قالب ساختار S {};
void n (S ) {2}

این در ثابت شده است -fabi-version=3.

· انواع بردار SIMD اعلام شده با استفاده از "__خصیصه ((اندازه_بردار))" در یک
روشی غیر استاندارد که اجازه بارگذاری بیش از حد توابع بردار را نمی دهد
در اندازه های مختلف

مانگلینگ در عوض شده است -fabi-version=4.

ناسازگاری های شناخته شده در -fabi-version=1 عبارتند از:

· مدیریت نادرست دم بالشتک برای فیلدهای بیتی. G++ ممکن است سعی کند داده ها را بسته بندی کند
به همان بایت کلاس پایه. مثلا:

ساختار A { virtual void f(); int f1 : 1; };
ساختار B : public A { int f2 : 1; };

در این مورد، G++ "B::f2" را در همان بایت "A::f1" قرار می دهد. سایر کامپایلرها
نخواهد. شما می توانید با قرار دادن صریح "A" به اندازه اندازه آن از این مشکل جلوگیری کنید
مضربی از اندازه بایت در پلتفرم شما است. که باعث G++ و موارد دیگر می شود
کامپایلرها به طرح "B" یکسان.

· مدیریت نادرست دم بالشتک برای پایگاه های مجازی. G++ از دم استفاده نمی کند
بالشتک هنگام چیدمان پایه های مجازی. مثلا:

ساختار A { virtual void f(); char c1; };
ساختار B { B(); char c2; };
ساختار C : عمومی A، عمومی مجازی B {};

در این مورد، G++ "B" را در قسمت دم برای "A" قرار نمی دهد. دیگر
کامپایلرها خواهد شد. شما می توانید با قرار دادن صریح "A" از این مشکل جلوگیری کنید
اندازه مضرب تراز آن است (با نادیده گرفتن کلاس های پایه مجازی). که خواهد شد
باعث می شود که G++ و سایر کامپایلرها طرح "C" را یکسان داشته باشند.

· مدیریت نادرست فیلدهای بیت با عرض اعلام شده بیشتر از عرض آنها
زمانی که فیلدهای بیت در یک اتحادیه ظاهر می شوند، انواع زیرین. مثلا:

union U { int i : 4096; }

با فرض اینکه یک "int" 4096 بیت ندارد، G++ اتحادیه را بسیار کوچک می کند.
با تعداد بیت های یک "int".

· کلاس های خالی را می توان در افست های نادرست قرار داد. مثلا:

ساختار A {};

ساختار B {
A a
فضای خالی مجازی f ();
};

ساختار C: عمومی B، عمومی A {};

G++ کلاس پایه "A" از "C" را در یک افست غیر صفر قرار می دهد. باید قرار گیرد
در افست صفر G++ به اشتباه معتقد است که عضو داده "A" از "B" است
در حال حاضر در افست صفر.

· نام توابع الگو که انواع آنها شامل "نام تایپ" یا الگوی قالب است
پارامترها را می توان به اشتباه مخدوش کرد.

قالب
void f(نام نوع Q::X) {}

قالب کلاس Q>
void f(نام تایپ Q ::ایکس) {}

نمونه‌های این الگوها ممکن است به اشتباه مخدوش شده باشند.

همچنین به تغییرات مربوط به psABI هشدار می دهد. تغییرات شناخته شده psABI در این مرحله عبارتند از:

· برای SYSV/x86-64، هنگام عبور یونیون با long double، به pass in تغییر می کند.
حافظه همانطور که در psABI مشخص شده است. مثلا:

اتحادیه U {
بلند دوبل ld;
بین من
};

"union U" همیشه در حافظه منتقل می شود.

-Wctor-dtor-privacy (فقط C++ و Objective-C++)
هنگامی که یک کلاس غیرقابل استفاده به نظر می رسد هشدار دهید زیرا تمام سازنده ها یا تخریب کننده ها در آن هستند
کلاس خصوصی است و نه دوستان دارد و نه توابع عضو استاتیک عمومی.

-dtor-non-virtual-delete-dtor (فقط C++ و Objective-C++)
هشدار دهید چه زمانی حذف کردن برای از بین بردن نمونه ای از کلاسی که دارای توابع مجازی است استفاده می شود
و تخریبگر غیر مجازی. حذف یک نمونه از کلاس مشتق شده ناامن است
اگر کلاس پایه مجازی نداشته باشد از طریق اشاره گر به کلاس پایه
ویرانگر این هشدار توسط -دیو.

- تنگ کردن (فقط C++ و Objective-C++)
هنگامی که یک تبدیل محدود شده توسط C++11 ممنوع شده است، هشدار دهید { }، به عنوان مثال

int i = { 2.2 }; // خطا: باریک شدن از double به int

این پرچم در -دیو و -Wc++11-compat.

با -std=c++11، -بدون باریک شدن تشخیصی مورد نیاز استاندارد را سرکوب می کند.
توجه داشته باشید که این امر بر معنای کد خوش فرم تأثیر نمی گذارد. تبدیل های باریک
هنوز در بافت SFINAE بد شکل تلقی می شوند.

-به جز (فقط C++ و Objective-C++)
هنگامی که یک عبارت noexcept به دلیل فراخوانی یک تابع به نادرست ارزیابی می شود، هشدار دهید
که دارای مشخصات استثنایی غیر پرتاب کننده نیست (به عنوان مثال پرت کردن() or جز)
اما توسط کامپایلر شناخته شده است که هرگز استثنا نمی گذارد.

غیر مجازی-dtor (فقط C++ و Objective-C++)
هنگامی که یک کلاس دارای توابع مجازی و تخریبگر غیر مجازی در دسترس است، هشدار دهید
در این صورت حذف نمونه ای از کلاس مشتق شده ممکن است اما ناامن است
از طریق یک اشاره گر به کلاس پایه. این اخطار نیز فعال می شود اگر -Weffc++ is
مشخص شده.

-Wreorder (فقط C++ و Objective-C++)
هنگامی که ترتیب اولیه سازهای عضو داده شده در کد با ترتیب مطابقت ندارد، هشدار دهید
که در آن باید اعدام شوند. برای مثال:

ساختار A {
بین من
int j;
A(): j (0)، i (1) { }
};

کامپایلر مقداردهی اولیه اعضا را مجدداً مرتب می کند i و j برای مطابقت با
دستور اعلامی اعضا با صدور اخطار در این خصوص. این هشدار است
فعال شده توسط -دیو.

در زیر -و... گزینه ها تحت تاثیر قرار نمی گیرند -دیو.

-Weffc++ (فقط C++ و Objective-C++)
هشدار در مورد نقض دستورالعمل های سبک زیر توسط اسکات مایرز موثر
C++، دوم چاپ کتاب:

· مورد 11: یک سازنده کپی و یک عملگر انتساب برای کلاس های با تعریف کنید
حافظه اختصاص داده شده به صورت پویا

· مورد 12: مقدار دهی اولیه را به انتساب در سازنده ها ترجیح دهید.

· مورد 14: تخریب کننده ها را در کلاس های پایه مجازی کنید.

· مورد 15: از "operator=" یک مرجع به *این بازگردانید.

· مورد 23: زمانی که باید یک شی را برگردانید سعی نکنید یک مرجع را برگردانید.

همچنین در مورد نقض دستورالعمل های سبک زیر از سوی اسکات مایرز هشدار دهید بیشتر
موثر ++C کتاب:

· مورد 6: تمایز بین اشکال پیشوند و پسوند افزایش و کاهش
اپراتورهای.

· مورد 7: هرگز «&&»، «||»، یا «،» را بیش از حد بارگذاری نکنید.

هنگام انتخاب این گزینه، توجه داشته باشید که سرصفحه های استاندارد کتابخانه از همه پیروی نمی کنند
از این دستورالعمل ها؛ استفاده کنید grep استفاده -v برای فیلتر کردن آن هشدارها

Wstrict-null-sentinel (فقط C++ و Objective-C++)
همچنین در مورد استفاده از یک "NULL" به عنوان نگهبان هشدار دهید. هنگام کامپایل فقط با
GCC این یک نگهبان معتبر است، زیرا "NULL" به "__null" تعریف شده است. اگرچه باطل است
ثابت اشاره گر یک اشاره گر تهی نیست، تضمین می شود که اندازه آن برابر با a باشد
اشاره گر اما این استفاده در کامپایلرهای مختلف قابل حمل نیست.

-بدون قالب-دوست (فقط C++ و Objective-C++)
هنگامی که توابع دوست بدون الگو در یک الگو اعلام می شوند، هشدارها را غیرفعال کنید.
از زمان ظهور پشتیبانی از مشخصات قالب صریح در G++، اگر نام
دوست یک شناسه فاقد صلاحیت است (یعنی دوست foo (int))، مشخصات زبان C++
از دوست می خواهد که یک تابع معمولی و غیرقابلیت تعریف یا تعریف کند. (بخش
14.5.3). قبل از اینکه G++ مشخصات صریح را پیاده‌سازی کند، شناسه‌های فاقد صلاحیت می‌توانستند
به عنوان یک تخصص خاص از یک تابع الگو تفسیر می شود. چون این
رفتار ناسازگار دیگر رفتار پیش‌فرض برای G++ نیست،
-دوست-قالب نشده به کامپایلر اجازه می دهد تا کد موجود را برای مشکلات احتمالی بررسی کند
لکه می کند و به طور پیش فرض روشن است. این رفتار کامپایلر جدید را می توان با خاموش کرد
-بدون قالب-دوست، که کد کامپایلر سازگار را نگه می دارد اما آن را غیرفعال می کند
هشدار مفید

بازیگران به سبک وولد (فقط C++ و Objective-C++)
در صورتی که در یک برنامه C++ از کست قدیمی (سبک C) ​​به نوع غیر خالی استفاده می شود، هشدار دهید.
بازیگران سبک جدید (دینامیک_کست, پخش_استاتیک, تفسیر_بازیو const_cast) هستند
کمتر در برابر اثرات ناخواسته آسیب پذیر است و جستجو برای آنها بسیار آسان تر است.

-Woverloaded-مجازی (فقط C++ و Objective-C++)
هنگامی که یک اعلان تابع، توابع مجازی را از یک کلاس پایه پنهان می کند، هشدار دهید. برای
به عنوان مثال، در:

ساختار A {
فضای خالی مجازی f();
};

ساختار B: عمومی A {
void f(int);
};

نسخه کلاس "A" "f" در "B" پنهان است و کدی مانند:

b* b ؛
b->f();

در کامپایل شکست خواهد خورد.

-Wno-pmf-تبدیل (فقط C++ و Objective-C++)
تشخیصی را برای تبدیل یک نشانگر محدود به تابع عضو به یک ساده غیرفعال کنید
اشاره گر

-Wsign-Promo (فقط C++ و Objective-C++)
هنگامی که وضوح اضافه بار تبلیغاتی را از نوع بدون امضا یا شمارش شده انتخاب می کند، هشدار دهید
یک نوع امضا شده، بیش از تبدیل به یک نوع بدون علامت با همان اندازه. قبلی
نسخه‌های G++ سعی می‌کنند بدون امضا را حفظ کنند، اما استاندارد این کار را الزامی می‌کند
رفتار فعلی

ساختار A {
عملگر int ();
A& operator = (int);
};

اصلی ()
{
A a,b;
a = b;
}

در این مثال، G++ یک پیش فرض را ترکیب می کند A& اپراتور = (ثابت آ&)؛، در حالی که cfront
از تعریف شده توسط کاربر استفاده خواهد کرد اپراتور =.

گزینه کنترل هدف-C و Objective-C++ لهجه ها
(توجه: این راهنما زبان های Objective-C و Objective-C++ را توصیف نمی کند
خودشان

این بخش گزینه های خط فرمان را که فقط برای Objective-C معنادار هستند، توضیح می دهد
و برنامه های Objective-C++، اما می توانید از بیشتر گنو مستقل از زبان نیز استفاده کنید
گزینه های کامپایلر به عنوان مثال، می توانید یک فایل "some_class.m" را مانند این کامپایل کنید:

gcc -g -fgnu-runtime -O -c some_class.m

در این مثال ، -fgnu-runtime گزینه ای است که فقط برای Objective-C و Objective-C++ در نظر گرفته شده است
برنامه ها؛ می توانید از گزینه های دیگر با هر زبانی که توسط GCC پشتیبانی می شود استفاده کنید.

توجه داشته باشید که از آنجایی که Objective-C پسوند زبان C است، کامپایل های Objective-C
همچنین ممکن است از گزینه های خاص C front-end استفاده کند (به عنوان مثال، -غیر سنتی). به طور مشابه،
کامپایل‌های Objective-C++ ممکن است از گزینه‌های خاص C++ استفاده کنند (به عنوان مثال، -وابی).

در اینجا لیستی از گزینه های موجود است فقط برای کامپایل Objective-C و Objective-C++
برنامه ها:

-fconstant-string-class =نام کلاس
استفاده کنید نام کلاس به عنوان نام کلاس برای نمونه سازی برای هر رشته تحت اللفظی
با نحو "@" مشخص شده است. نام کلاس پیش فرض "NXConstantString" است اگر
زمان اجرای گنو در حال استفاده است، و اگر زمان اجرا NeXT در حال استفاده باشد، «NSConstantString»
استفاده می شود (به زیر مراجعه کنید). در -fconstant-cfstrings گزینه، در صورت وجود، لغو می شود
-fconstant-string-class تنظیم می شود و باعث می شود که لفظ های "@"" به صورت ثابت قرار بگیرند
رشته های CoreFoundation.

-fgnu-runtime
کد شی سازگار با زمان اجرا استاندارد GNU Objective-C ایجاد کنید. این هست
پیش فرض برای اکثر انواع سیستم ها

-fnext-runtime
خروجی سازگار با زمان اجرا NeXT ایجاد کنید. این پیش فرض برای NeXT-based است
سیستم‌ها، از جمله داروین و Mac OS X. ماکرو "__NEXT_RUNTIME__" از پیش تعریف شده است اگر
(و فقط اگر) از این گزینه استفاده شود.

گیرنده های fno-nil
فرض کنید که تمام پیام های Objective-C ("[receiver message:arg]") در این
واحد ترجمه اطمینان حاصل می کند که گیرنده " صفر" نیست. این اجازه می دهد تا برای بیشتر
نقاط ورودی کارآمد در زمان اجرا مورد استفاده قرار گیرد. این گزینه فقط در دسترس است
همراه با زمان اجرا NeXT و ABI نسخه 0 یا 1.

-fobjc-abi-version=n
از نسخه استفاده کنید n از Objective-C ABI برای زمان اجرا انتخاب شده. این گزینه است
در حال حاضر فقط برای زمان اجرا NeXT پشتیبانی می شود. در این صورت، نسخه 0 همان است
ABI سنتی (32 بیتی) بدون پشتیبانی از ویژگی ها و سایر Objective-C 2.0
اضافات نسخه 1 ABI سنتی (32 بیتی) با پشتیبانی از ویژگی ها و
سایر اضافات Objective-C 2.0. نسخه 2 ABI مدرن (64 بیتی) است. اگر هیچ چیز نیست
مشخص شده، نسخه پیش‌فرض نسخه 0 در ماشین‌های هدف 32 بیتی و نسخه 2 در 64 بیت است.
ماشین آلات هدف

-fobjc-call-cxx-cdtors
برای هر کلاس Objective-C، بررسی کنید که آیا هر یک از متغیرهای نمونه آن یک شی C++ است یا خیر
با یک سازنده پیش فرض غیر ضروری. اگر چنین است، یک "- (id) ویژه ترکیب کنید
روش نمونه .cxx_construct" که سازنده‌های پیش‌فرض غیر پیش‌فرض را روی هر کدام اجرا می‌کند
چنین متغیرهای نمونه، به ترتیب، و سپس بازگشت "خود". به طور مشابه، اگر وجود دارد، بررسی کنید
متغیر نمونه یک شی C++ با یک تخریبگر غیر ضروری است، و اگر چنین است، ترکیب کنید
یک روش خاص "- (void) .cxx_destruct" که تمام این مخرب های پیش فرض را اجرا می کند،
به ترتیب معکوس

متدهای "- (id) .cxx_construct" و "- (void) .cxx_destruct" که بدین ترتیب تولید می شوند
فقط بر روی متغیرهای نمونه اعلام شده در کلاس Objective-C فعلی کار می کند و نه
آنهایی که از سوپرکلاس ها به ارث رسیده اند. مسئولیت آن بر عهده Objective-C است
زمان اجرا برای فراخوانی همه این روش ها در سلسله مراتب ارثی یک شی. شناسه)
متدهای cxx_construct" بلافاصله پس از یک شی جدید توسط زمان اجرا فراخوانی می شوند
نمونه اختصاص داده شده است. متدهای "- (void) .cxx_destruct" فراخوانی خواهند شد
بلافاصله قبل از زمان اجرا، یک نمونه شی را اختصاص می دهد.

از زمان نگارش این مقاله، فقط زمان اجرا NeXT در Mac OS X 10.4 و نسخه های جدیدتر از آن پشتیبانی می کند
فراخوانی متدهای "- (id) .cxx_construct" و "- (void) .cxx_destruct".

-fobjc-direct-dispatch
اجازه پرش های سریع به ارسال کننده پیام را بدهید. در داروین این کار از طریق
صفحه کام.

-fobjc-استثناها
فعال کردن پشتیبانی نحوی برای مدیریت ساختار ساختار یافته در Objective-C، مشابه
آنچه توسط C++ و جاوا ارائه می شود. این گزینه برای استفاده از Objective-C مورد نیاز است
کلمات کلیدی @try، @throw، @catch، @finally و @synchronized. این گزینه موجود است
با هر دو زمان اجرا گنو و زمان اجرا NeXT (اما در ارتباط با آن موجود نیست
زمان اجرا NeXT در Mac OS X 10.2 و قبل از آن).

-fobjc-gc
جمع آوری زباله (GC) را در برنامه های Objective-C و Objective-C++ فعال کنید. این گزینه
فقط با زمان اجرا NeXT در دسترس است. زمان اجرا گنو یک آشغال متفاوت دارد
پیاده سازی مجموعه که به پرچم های کامپایلر خاصی نیاز ندارد.

-fobjc-nilcheck
برای زمان اجرا NeXT با نسخه 2 ABI، یک گیرنده صفر را در روش بررسی کنید
فراخوانی ها قبل از انجام فراخوانی متد واقعی. این پیش فرض است و می تواند باشد
غیرفعال استفاده از -fno-objc-nilcheck. روش های کلاس و تماس های فوق العاده هرگز بررسی نمی شوند
بدون توجه به این که این پرچم روی چه چیزی تنظیم شده است. در حال حاضر این پرچم انجام می دهد
وقتی از زمان اجرا گنو یا یک نسخه قدیمی تر از NeXT زمان اجرا ABI استفاده می شود، هیچ چیز وجود ندارد.

-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

-freplace-objc-classes
یک دستورالعمل نشانگر ویژه منتشر کنید ld(1) نه اینکه به صورت ایستا در شیء حاصل پیوند برقرار کند
فایل، و اجازه دهید غول(1) به جای آن در زمان اجرا آن را بارگیری کنید. این در استفاده می شود
همراه با حالت رفع اشکال Fix-and-Continue، جایی که فایل شی در آن قرار دارد
سوال ممکن است دوباره کامپایل شده و به صورت پویا در دوره برنامه بارگذاری مجدد شود
بدون نیاز به راه اندازی مجدد خود برنامه اجرا شود. در حال حاضر، اصلاح و
عملکرد Continue فقط در ارتباط با زمان اجرا NeXT در Mac در دسترس است
OS X 10.3 و بالاتر.

-fzero-link
هنگام کامپایل برای زمان اجرا NeXT، کامپایلر معمولاً فراخوانی ها را جایگزین می کند
"objc_getClass("...")" (زمانی که نام کلاس در زمان کامپایل مشخص باشد) با
ارجاعات کلاس ایستا که در زمان بارگذاری مقداردهی اولیه می شوند، که زمان اجرا را بهبود می بخشد
کارایی. مشخص کردن -fzero-link پرچم این رفتار و باعث سرکوب می شود
فراخوانی به "objc_getClass("...")" حفظ شود. این در Zero-Link مفید است
حالت اشکال زدایی، از آنجایی که اجازه می دهد تا پیاده سازی کلاس های فردی تغییر یابد
در طول اجرای برنامه زمان اجرا گنو در حال حاضر همیشه تماس ها را حفظ می کند
"objc_get_class("...")" بدون توجه به گزینه های خط فرمان.

-gen-decls
اعلان‌های واسط برای همه کلاس‌هایی که در فایل منبع دیده می‌شوند را به فایلی با نام تخلیه کنید
sourcename.decl.

-Wassign-intercept (فقط Objective-C و Objective-C++)
هر زمان که یک تکلیف Objective-C توسط زباله جمع کن رهگیری می شود، هشدار دهید.

- پروتکل Wno (فقط Objective-C و Objective-C++)
اگر کلاسی برای پیاده سازی یک پروتکل اعلان شود، برای هر متد یک هشدار صادر می شود
در پروتکلی که توسط کلاس پیاده سازی نشده است. رفتار پیش فرض این است که
برای هر روشی که به صراحت در کلاس پیاده سازی نشده است، یک هشدار صادر کنید، حتی اگر a
پیاده سازی روش از superclass به ارث رسیده است. اگر از - پروتکل Wno
گزینه، سپس روش های به ارث رسیده از سوپرکلاس به عنوان پیاده سازی در نظر گرفته می شوند،
و هیچ اخطاری برای آنها صادر نمی شود.

-انتخاب کننده (فقط Objective-C و Objective-C++)
اگر چندین روش از انواع مختلف برای انتخابگر یکسان در طول پیدا شد هشدار دهید
تلفیقی. بررسی در لیست روش ها در مرحله نهایی انجام می شود
تلفیقی. علاوه بر این، برای هر انتخابگر که در a ظاهر می شود، یک بررسی انجام می شود
عبارت "@selector(...)" و متد مربوط به آن انتخابگر بوده است
در طول تدوین یافت شد. زیرا این بررسی ها جدول روش را فقط در انتها اسکن می کنند
از تدوین، اگر مرحله نهایی تدوین باشد، این هشدارها تولید نمی شود
به دست نیامده، برای مثال به این دلیل که در حین کامپایل خطایی پیدا شد، یا به این دلیل که
-fsyntax-only گزینه در حال استفاده است

-Wstrict-Selector-Match (فقط Objective-C و Objective-C++)
اگر چندین روش با آرگومان و/یا انواع برگشتی متفاوت برای a یافت شد هشدار دهید
هنگام تلاش برای ارسال پیام با استفاده از این انتخابگر به گیرنده، انتخابگر داده می شود
"id" یا "Class" را تایپ کنید. وقتی این پرچم خاموش است (که رفتار پیش فرض است)،
کامپایلر چنین اخطارهایی را حذف می‌کند اگر تفاوت‌های یافت شده به انواع آن محدود شود
هم اندازه و هم تراز را به اشتراک بگذارید.

-Wundeclared-Selector (فقط Objective-C و Objective-C++)
در صورت یافتن عبارت «@selector(...)» که به یک انتخابگر اعلام نشده اشاره دارد، هشدار دهید. آ
انتخابگر اعلام نشده در نظر گرفته می شود اگر هیچ روشی با آن نام قبلاً اعلام نشده باشد
عبارت "@selector(...)"، یا به طور صریح در یک @interface یا @protocol
اعلامیه، یا به طور ضمنی در یک بخش @implementation. این گزینه همیشه کار می کند
به محض اینکه عبارت «@selector(...)» پیدا شد، آن را بررسی می‌کند -انتخاب کننده فقط
بررسی های خود را در مرحله نهایی تدوین انجام می دهد. این نیز کدگذاری را اجرا می کند
قرارداد سبک که متدها و انتخابگرها باید قبل از استفاده اعلام شوند.

-print-objc-runtime-info
هدر C را ایجاد کنید که بزرگترین ساختاری را که در صورت وجود مقدار ارسال شده است را توصیف می کند.

گزینه به کنترل تشخیصی پست قالب بندی
به طور سنتی، پیام های تشخیصی بدون توجه به دستگاه خروجی فرمت می شوند
جنبه (به عنوان مثال عرض آن، ...). از گزینه های توضیح داده شده در زیر می توان برای کنترل استفاده کرد
الگوریتم قالب بندی پیام های تشخیصی، به عنوان مثال چند کاراکتر در هر خط، چند وقت یکبار
اطلاعات مکان منبع باید گزارش شود. در حال حاضر، فقط بخش جلویی C++ می تواند
به این گزینه ها احترام بگذارید با این حال، انتظار می رود در آینده نزدیک، که جبهه باقی مانده است
انتهای می تواند آنها را به درستی هضم کند.

-fmessage-length=n
سعی کنید پیام های خطا را طوری قالب بندی کنید که در خطوط حدودی قرار بگیرند n شخصیت ها.
پیش فرض 72 کاراکتر برای g ++ و 0 برای بقیه قسمت های جلویی پشتیبانی شده توسط
شورای همکاری خلیج فارس اگر n صفر است، پس هیچ خط پیچی انجام نخواهد شد. هر پیام خطا ظاهر می شود
در یک خط

-fdiagnostics-show-location=یک بار
فقط در حالت بسته بندی خط معنادار است. به خبرنگار پیام های تشخیصی دستور می دهد
بیرون ریختن یک بار اطلاعات مکان منبع؛ یعنی در صورتی که پیام خیلی طولانی باشد که مناسب نباشد
روی یک خط فیزیکی واحد و باید پیچیده شود، مکان منبع منتشر نخواهد شد
(به عنوان پیشوند) دوباره، بارها و بارها، در خطوط ادامه بعدی. این است
رفتار پیش فرض

-fdiagnostics-show-location=هر خط
فقط در حالت بسته بندی خط معنادار است. به خبرنگار پیام های تشخیصی دستور می دهد
همان اطلاعات مکان منبع (به عنوان پیشوند) را برای خطوط فیزیکی ایجاد می کند
از فرآیند شکستن پیامی که آنقدر طولانی است که در یک خط قرار نمی گیرد.

-fno-diagnostics-show-option
به‌طور پیش‌فرض، هر تشخیصی که منتشر می‌شود شامل متنی است که گزینه خط فرمان را نشان می‌دهد
که مستقیماً تشخیص را کنترل می کند (اگر چنین گزینه ای برای تشخیصی شناخته شده باشد
دستگاه). مشخص کردن -fno-diagnostics-show-option پرچم آن را سرکوب می کند
رفتار.

گزینه به درخواست or سرکوب کردن هشدارها
هشدارها پیام‌های تشخیصی هستند که ساختارهایی را گزارش می‌کنند که ذاتاً نیستند
اشتباه است اما خطرناک است یا نشان می دهد که ممکن است خطایی وجود داشته باشد.

گزینه‌های مستقل از زبان زیر هشدارهای خاصی را فعال نمی‌کنند، اما آن را کنترل می‌کنند
انواع تشخیص های تولید شده توسط GCC.

-fsyntax-only
کد را برای خطاهای نحوی بررسی کنید، اما کاری فراتر از آن انجام ندهید.

-fmax-errors=n
حداکثر تعداد پیام های خطا را محدود می کند n، در آن مرحله GCC به جای وثیقه نجات می یابد
از تلاش برای ادامه پردازش کد منبع. اگر n 0 است (پیش فرض)،
هیچ محدودیتی در تعداد پیام های خطای تولید شده وجود ندارد. اگر -Wfatal-خطاها همچنین
مشخص شد، پس -Wfatal-خطاها بر این گزینه ارجحیت دارد.

-w همه پیام های هشدار را مهار کنید.

-خطا
همه هشدارها را به خطا تبدیل کنید.

-خطا=
اخطار مشخص شده را به خطا تبدیل کنید. مشخص کننده یک هشدار اضافه شده است،
مثلا -خطا=سوئیچ اخطارهای کنترل شده توسط -سوئیچ به اشتباهات
این سوئیچ شکل منفی به خود می گیرد که برای نفی استفاده می شود -خطا برای هشدارهای خاص،
مثلا -Wno-error=switch می سازد -سوئیچ هشدارها خطا نباشند، حتی زمانی که -خطا
در عمل است

پیام هشدار برای هر هشدار قابل کنترل شامل گزینه ای است که کنترل می کند
اخطار. سپس می توان از آن گزینه استفاده کرد -خطا= و -Wno-error= همانطور که شرح داده شد
در بالا. (چاپ گزینه موجود در پیام هشدار را می توان با استفاده از
-fno-diagnostics-show-option پرچم.)

توجه داشته باشید که مشخص کردن -خطا=فو به طور خودکار دلالت می کند -Wفواست. با این حال، -Wno-error=فو
چیزی دلالت نمی کند

-Wfatal-خطاها
این گزینه باعث می شود که کامپایلر در اولین خطای رخ داده، کامپایل را متوقف کند
به جای تلاش برای ادامه دادن و چاپ پیام های خطای بیشتر.

شما می توانید بسیاری از هشدارهای خاص را با شروع گزینه ها درخواست کنید -W، به عنوان مثال -حرفه ای
درخواست هشدار در مورد اعلامیه های ضمنی. هر یک از این گزینه های هشدار خاص نیز
شروع شکل منفی دارد -نه- برای خاموش کردن هشدارها؛ مثلا، -غیر ضمنی.
این راهنما فقط یکی از دو فرم را فهرست می کند، هر کدام که پیش فرض نباشد. برای ... بیشتر،
به گزینه های خاص زبان نیز اشاره می شود ++C گفتار گزینه و هدف-C و
Objective-C++ گفتار گزینه.

هنگامی که یک گزینه هشدار ناشناخته درخواست می شود (به عنوان مثال، -Wunknown-هشدار، GCC منتشر خواهد کرد
تشخیصی مبنی بر عدم شناسایی گزینه. با این حال، اگر -نه- شکل است
استفاده می شود، رفتار کمی متفاوت است: هیچ تشخیصی برای آن تولید نمی شود
-هشدار ناشناخته مگر اینکه تشخیص های دیگری تولید شود. این امکان استفاده از
جدید -نه- گزینه هایی با کامپایلرهای قدیمی، اما اگر مشکلی پیش بیاید، کامپایلر هشدار می دهد
که از یک گزینه ناشناخته استفاده شده است.

-پدانتیک
همه اخطارهای مورد نیاز ISO C و ISO C++ را صادر کنید. همه برنامه هایی که
از پسوندهای ممنوعه و برخی برنامه های دیگر که از ISO C و ISO پیروی نمی کنند استفاده کنید
C++. برای ISO C، از نسخه استاندارد ISO C که توسط هر کدام مشخص شده است پیروی می کند -std
گزینه استفاده شده

برنامه های معتبر ISO C و ISO C++ باید با یا بدون این گزینه به درستی کامپایل شوند
(اگرچه تعداد کمی از آنها نیاز دارند -ansi یا یک -std گزینه ای که نسخه مورد نیاز را مشخص می کند
ISO C). با این حال، بدون این گزینه، پسوندهای گنو و سنتی C و
ویژگی های C++ نیز پشتیبانی می شوند. با این گزینه رد می شوند.

-پدانتیک برای استفاده از کلیدواژه های جایگزین که پیام های هشدار دهنده ایجاد نمی کند
نام ها با شروع و پایان می یابند __. هشدارهای pedantic نیز در بیان غیرفعال هستند
که به دنبال "__extension__" است. با این حال، فقط فایل های هدر سیستم باید از اینها استفاده کنند
راه های فرار؛ برنامه های کاربردی باید از آنها اجتناب کنند.

برخی از کاربران سعی می کنند استفاده کنند -پدانتیک برای بررسی برنامه ها از نظر انطباق دقیق ISO C. آنها
به زودی متوجه می شوند که آن چیزی را که آنها می خواهند انجام نمی دهد: برخی از روش های غیر ISO را پیدا می کند،
اما نه همه --- فقط آنهایی که برای آنها ISO C نیاز یک تشخیصی، و برخی دیگر برای
که تشخیص اضافه شده است.

یک ویژگی برای گزارش هر گونه شکست در انطباق با ISO C ممکن است در برخی موارد مفید باشد.
اما به کار اضافی قابل توجهی نیاز دارد و کاملاً متفاوت خواهد بود
-پدانتیک. ما برنامه ای برای پشتیبانی از چنین ویژگی در آینده نزدیک نداریم.

جایی که استاندارد مشخص شده با -std نشان دهنده یک گویش بسط یافته گنو از C، مانند
gnu90 or gnu99، مربوطه وجود دارد پایه استاندارد، نسخه ISO C که در آن
گویش توسعه یافته گنو مبتنی است. هشدارها از -پدانتیک در جایی که هستند داده می شود
توسط استاندارد پایه مورد نیاز است. (این اخطارها منطقی نیست
فقط برای ویژگی هایی که در گویش مشخص شده گنو C نیستند، زیرا طبق تعریف گنو
لهجه های C شامل تمام ویژگی هایی است که کامپایلر با گزینه داده شده پشتیبانی می کند و
چیزی برای هشدار وجود نخواهد داشت.)

-اشتباهات
پسندیدن -پدانتیک، با این تفاوت که خطاها به جای هشدار تولید می شوند.

-دیو
این همه هشدارها را در مورد ساخت و سازهایی که برخی از کاربران در نظر می گیرند فعال می کند
مشکوک است، و اجتناب از آنها (یا اصلاح آنها برای جلوگیری از هشدار) آسان است، حتی در
در ارتباط با ماکروها این همچنین برخی از هشدارهای خاص زبان را که شرح داده شده اند فعال می کند
in ++C گفتار گزینه و هدف-C و Objective-C++ گفتار گزینه.

-دیو پرچم های هشدار زیر را روشن می کند:

-وادرس -محدوده های جنگی (فقط با -O2) -Wc++11-compat -Wchar-مشترک ها
-Wenum-مقایسه کنید (در C/Objc؛ این به طور پیش فرض در C++ روشن است) -Wimplicit-int (C و
فقط هدف-C) -Wimplicit-function-declaration (فقط C و Objective-C) -کامنت کنید
-فرمت -Wmain (فقط برای C/ObjC و مگر اینکه -مناسب) -Wmaybe-unitialized
پرانتزهای Wmissing -بدون هیچ -پرانتزها -Wpointer-Sign -Wreorder - نوع چرخشی
-توالی-نقطه -Wsign-مقایسه کنید (فقط در C++) Wstrict-aliasing -Wstrict-overflow=1
-سوئیچ Wtrigraphs -Wunitarized -Wunknown-pragmas -Wunused-function
Wunused-برچسب -ارزش استفاده نشده -Wunused-متغیر -Wvolatile-register-var

توجه داشته باشید که برخی از پرچم های هشدار به طور ضمنی نشان داده نمی شوند -دیو. برخی از آنها هشدار می دهند
سازه هایی که کاربران عموماً آنها را مشکوک نمی دانند، اما کدام
گاهی اوقات ممکن است بخواهید بررسی کنید؛ دیگران در مورد ساخت و سازهایی که هستند هشدار می دهند
اجتناب از آن در برخی موارد ضروری یا سخت است و هیچ راه ساده ای برای اصلاح آن وجود ندارد
کدی برای سرکوب هشدار برخی از آنها توسط -وکسترا اما بسیاری از آنها
باید به صورت جداگانه فعال شود.

-وکسترا
این برخی از پرچم های هشدار اضافی را فعال می کند که توسط آنها فعال نشده اند -دیو. (از این گزینه استفاده شده است
به نام -W. نام قدیمی‌تر هنوز پشتیبانی می‌شود، اما نام جدیدتر بیشتر است
توصیفی.)

-وکلوببر شده -جسم خیس نادیده گرفته شده واجد شرایط Wmissing-field-initializers
-Wmissing-پارامتر-نوع (فقط C) -Wold-style-اعلامیه (فقط C) -Woverride-init
-Wsign-مقایسه کنید Wtype-Limits -Wunitarized -پارامتر Wunused (فقط با -استفاده نشده or
-دیو) پارامتر -Wunused-but-set (فقط با -استفاده نشده or -دیو)

گزینه -وکسترا همچنین پیام های هشدار را برای موارد زیر چاپ می کند:

یک اشاره گر با عدد صحیح صفر با مقایسه می شود <, <=, >، یا >=.

· (فقط C++) شمارشگر و غیر شمارشگر هر دو در یک شرطی ظاهر می شوند
اصطلاح.

· (فقط C++) پایگاه های مجازی مبهم.

· (فقط C++) اشتراک آرایه ای که اعلام شده است ثبت نام.

· (فقط C++) گرفتن آدرس متغیری که اعلام شده است ثبت نام.

· (فقط C++) یک کلاس پایه در سازنده کپی کلاس مشتق شده مقداردهی اولیه نمی شود.

-Wchar-مشترک ها
اگر زیرنویس آرایه دارای نوع "char" باشد هشدار دهید. این یک علت رایج خطا است، به عنوان
برنامه نویسان اغلب فراموش می کنند که این نوع در برخی از ماشین ها امضا شده است. این هشدار است
فعال شده توسط -دیو.

-کامنت کنید
هر زمان که یک دنباله شروع نظر اخطار کنید /* ظاهر می شود در a /* نظر دهید، یا هر زمان که الف
بک اسلش-Newline در یک ظاهر می شود // اظهار نظر. این هشدار توسط -دیو.

-بدون پوشش-عدم تطابق
در صورت عدم تطابق نمایه‌های بازخورد هنگام استفاده از آن هشدار دهید -fprofile-use گزینه. اگر یک
فایل منبع تغییر کرد -fprofile-gen و -fprofile-use، فایل های با
بازخورد نمایه ممکن است با فایل منبع مطابقت نداشته باشد و GCC نمی تواند از نمایه استفاده کند
اطلاعات بازخورد به طور پیش فرض، این هشدار فعال است و به عنوان یک خطا در نظر گرفته می شود.
-بدون پوشش-عدم تطابق می توان برای غیرفعال کردن هشدار یا
-Wno-error=پوشش-عدم تطابق می توان از آن برای غیرفعال کردن خطا استفاده کرد. غیرفعال کردن خطا
زیرا این اخطار می تواند منجر به بهینه سازی ضعیف کد شود و فقط در مورد مفید است
تغییرات بسیار جزئی مانند رفع اشکال در یک پایگاه کد موجود. کاملا غیر فعال کردن
هشدار توصیه نمی شود

-Wno-cpp
(فقط C، Objective-C، C++، Objective-C++ و Fortran)

پیام های هشدار صادر شده توسط دستورالعمل های "#warning" را سرکوب کنید.

-ترفیع دوگانه (فقط C، C++، Objective-C و Objective-C++)
هنگامی که مقداری از نوع "float" به طور ضمنی به "دو برابر" ارتقا داده می شود، هشدار دهید. CPU ها
با یک واحد ممیز شناور 32 بیتی "تک دقیق" "float" را در سخت افزار پیاده سازی می کند،
اما "دو" را در نرم افزار شبیه سازی کنید. در چنین ماشینی، انجام محاسبات با استفاده از
مقادیر "دو" به دلیل سربار مورد نیاز برای نرم افزار بسیار گران تر است
تقلید

انجام محاسبات تصادفی با "دبل" آسان است زیرا ممیز شناور است
لفظ ها به طور ضمنی از نوع «دوگانه» هستند. به عنوان مثال، در:

منطقه شناور (شعاع شناور)
{
بازگشت 3.14159 * شعاع * شعاع.
}

کامپایلر کل محاسبات را با "دبل" انجام می دهد زیرا شناور-
نقطه تحت اللفظی یک "دو" است.

-فرمت
تماس های "printf" و "scanf" و غیره را بررسی کنید تا مطمئن شوید که آرگومان های ارائه شده
دارای انواع مناسب با رشته فرمت مشخص شده و تبدیل ها هستند
مشخص شده در رشته فرمت منطقی است. این شامل توابع استاندارد و
بقیه با ویژگی های قالب مشخص شده اند، در "printf"، "scanf"، "strftime" و
"strfmon" (یک پسوند X/Open، نه در استاندارد C) خانواده ها (یا دیگر هدف-
خانواده های خاص). کدام توابع بدون داشتن ویژگی های قالب بررسی می شوند
مشخص شده به نسخه استاندارد انتخاب شده و چنین بررسی هایی از توابع بستگی دارد
بدون ویژگی مشخص شده توسط غیرفعال می شوند -مناسب or -فنو ساخته شده است.

فرمت ها با ویژگی های قالب پشتیبانی شده توسط GNU libc نسخه 2.2 بررسی می شوند.
اینها شامل تمام ویژگی های ISO C90 و C99 و همچنین ویژگی های Single Unix می شود
مشخصات و برخی پسوندهای BSD و GNU. سایر پیاده سازی های کتابخانه ممکن است این کار را انجام ندهند
پشتیبانی از همه این ویژگی ها؛ GCC از هشدار در مورد ویژگی هایی که فراتر از آن هستند پشتیبانی نمی کند
محدودیت های یک کتابخانه خاص با این حال، اگر -پدانتیک با استفاده می شود -فرمت,
هشدارهایی در مورد ویژگی های فرمت داده می شود که در نسخه استاندارد انتخاب شده نیست (اما
نه برای فرمت های "strfmon"، زیرا در هیچ نسخه ای از استاندارد C نیستند).

پس از -فرمت همچنین آرگومان های فرمت تهی را برای چندین تابع بررسی می کند. -فرمت
نیز دلالت دارد -بدون هیچ.

-فرمت گنجانده شده است -دیو. برای کنترل بیشتر بر برخی از جنبه های بررسی قالب،
گزینه ها -Wformat-y2k, -Wno-format-extra-args, -فرمت-Wno-طول صفر,
-Wformat-غیر تحت اللفظی, -Wformat-securityو -Wformat=2 در دسترس هستند، اما نیستند
شامل -دیو.

توجه: در اوبونتو 8.10 و نسخه های بعدی این گزینه به طور پیش فرض برای C، C++ فعال است،
ObjC، ObjC++. برای غیرفعال کردن، استفاده کنید -Wformat=0.

-Wformat-y2k
If -فرمت مشخص شده است، همچنین در مورد فرمت های "strftime" که ممکن است فقط a را ایجاد کنند هشدار دهید
سال دو رقمی

-Wno-format-contains-nul
If -فرمت مشخص شده است، در مورد رشته های قالب حاوی بایت های NUL هشدار ندهید.

-Wno-format-extra-args
If -فرمت مشخص شده است، در مورد آرگومان های اضافی به "printf" یا "scanf" هشدار ندهید
تابع قالب استاندارد C مشخص می کند که چنین آرگومان هایی نادیده گرفته می شوند.

جایی که آرگومان های استفاده نشده بین آرگومان های استفاده شده قرار می گیرند که با آنها مشخص شده اند $
مشخصات شماره عملوند، معمولاً هشدارها هنوز داده می شود، زیرا
پیاده سازی نمی تواند بداند چه نوع را به "va_arg" منتقل کند تا از موارد استفاده نشده عبور کند
استدلال ها با این حال، در مورد فرمت های "scanf"، این گزینه باعث سرکوب می شود
هشدار در صورتی که آرگومان های استفاده نشده همه نشانگر هستند، از مشخصات یونیکس منفرد
می گوید که چنین آرگومان های استفاده نشده مجاز هستند.

-فرمت-Wno-طول صفر
If -فرمت مشخص شده است، در مورد فرمت های با طول صفر هشدار ندهید. استاندارد C
مشخص می کند که فرمت های با طول صفر مجاز هستند.

-Wformat-غیر تحت اللفظی
If -فرمت مشخص شده است، همچنین هشدار می دهد اگر رشته قالب یک رشته واقعی نیست و
بنابراین نمی توان آن را بررسی کرد، مگر اینکه تابع قالب آرگومان های قالب خود را به صورت a بگیرد
"va_list".

-Wformat-security
If -فرمت مشخص شده است، همچنین در مورد استفاده از توابع قالبی که نشان می دهند هشدار می دهد
مشکلات امنیتی احتمالی در حال حاضر، این هشدار در مورد تماس به "printf" و
توابع "scanf" که در آن رشته قالب یک رشته واقعی نیست و وجود ندارد
آرگومان های قالب بندی، مانند "printf (foo);". این ممکن است یک حفره امنیتی در صورت فرمت باشد
رشته از ورودی نامعتبر آمده و حاوی است %n. (این در حال حاضر زیرمجموعه چیست
-Wformat-غیر تحت اللفظی هشدار می دهد، اما در آینده ممکن است هشدارهایی به آن اضافه شود
-Wformat-security که شامل نمی شوند -Wformat-غیر تحت اللفظی.)

توجه: در اوبونتو 8.10 و نسخه های بعدی این گزینه به طور پیش فرض برای C، C++ فعال است،
ObjC، ObjC++. برای غیرفعال کردن، استفاده کنید -Wno-format-security، یا همه هشدارهای قالب را غیرفعال کنید
با -Wformat=0. برای کشنده کردن هشدارهای امنیتی قالب، مشخص کنید
-خطا=فرمت-امنیت.

-Wformat=2
فعال -فرمت چک های قالب پلاس در آن گنجانده نشده است -فرمت. در حال حاضر معادل
-فرمت -Wformat-غیر تحت اللفظی -Wformat-security -Wformat-y2k.

-بدون هیچ
در مورد ارسال یک اشاره گر تهی برای آرگومان هایی که به عنوان نیاز به مقدار غیر تهی علامت گذاری شده اند هشدار دهید
توسط ویژگی تابع "nonnull".

-بدون هیچ گنجانده شده است -دیو و -فرمت. می توان آن را با -بدون تهی
گزینه.

-برخود (فقط C، C++، Objective-C و Objective-C++)
در مورد متغیرهای اولیه که با خودشان مقداردهی اولیه شده اند هشدار دهید. به این نکته توجه کنید
گزینه فقط با -Wunitarized گزینه.

به عنوان مثال، GCC فقط در قطعه زیر در مورد غیر اولیه بودن «i» هشدار می دهد
چه زمانی -برخود مشخص شده است:

int f ()
{
int i = i ؛
بازگشت من؛
}

-Wimplicit-int (فقط C و Objective-C)
هنگامی که یک اعلان یک نوع را مشخص نمی کند هشدار دهید. این هشدار توسط -دیو.

-Wimplicit-function-declaration (فقط C و Objective-C)
هر زمان که یک تابع قبل از اعلام استفاده می شود، یک اخطار بدهید. در حالت C99
(-std=c99 or -std=gnu99)، این اخطار به صورت پیش فرض فعال است و به صورت an تبدیل می شود
خطا توسط -اشتباهات. این هشدار نیز توسط -دیو.

-حرفه ای (فقط C و Objective-C)
مثل -Wimplicit-int و -Wimplicit-function-declaration. این هشدار فعال است
by -دیو.

نادیده گرفته شده واجد شرایط (فقط C و C++)
اگر نوع برگشتی یک تابع دارای یک نوع واجد شرایط مانند "const" باشد، هشدار دهید. برای ISO C
از آنجایی که مقدار بازگردانده شده توسط یک تابع an نیست، چنین نوع واجد شرایطی تأثیری ندارد
ارزش برای C++، اخطار فقط برای انواع اسکالر یا "void" صادر می شود. ISO C
انواع بازگشتی واجد شرایط "باطل" را در تعاریف تابع ممنوع می کند، بنابراین چنین انواع بازگشتی
همیشه حتی بدون این گزینه یک هشدار دریافت کنید.

این هشدار نیز توسط -وکسترا.

-Wmain
هشدار در صورت نوع اصلی مشکوک است اصلی باید تابعی با خارجی باشد
پیوند، بازگشت int، گرفتن آرگومان صفر، دو یا سه آرگومان از
انواع مناسب این اخطار به طور پیش فرض در C++ فعال است و توسط هر کدام فعال می شود
-دیو or -پدانتیک.

پرانتزهای Wmissing
اگر یک مجموع یا اتحاد اولیه به طور کامل براکت نشده است، هشدار دهید. در ادامه مطلب
به عنوان مثال، مقداردهی اولیه برای a به طور کامل پرانتز نیست، اما برای b کاملاً
پرانتز شده

int a[2][2] = { 0, 1, 2, 3 };
int b [2] [2] = {{0 ، 1} ، {2 ، 3}} ؛

این هشدار توسط -دیو.

-Wmissing-include-dirs (فقط C، C++، Objective-C و Objective-C++)
اگر دایرکتوری شامل ارائه شده توسط کاربر وجود نداشته باشد، هشدار دهید.

-پرانتزها
در صورت حذف پرانتز در زمینه های خاص، مانند زمانی که یک علامت وجود دارد، هشدار دهید
تخصیص در زمینه ای که در آن مقدار صدق مورد انتظار است، یا زمانی که عملگرها تو در تو هستند
که مردم اغلب در مورد تقدم آن گیج می شوند.

همچنین در صورت مقایسه مانند هشدار دهید x<=y<=z ظاهر می شود؛ این معادل است (x<=y ? 1 : 0)
<= z، که تفسیری متفاوت از نمادهای ریاضی معمولی است.

همچنین در مورد ساخت و سازهایی که ممکن است سردرگمی وجود داشته باشد به کدام عبارت "اگر" هشدار دهید
شاخه "دیگر" تعلق دارد. در اینجا نمونه ای از چنین موردی آورده شده است:

{
اگر یک)
اگر (ب)
foo ();
دیگر
بار ()؛
}

در C/C++، هر شاخه «دیگر» به درونی ترین عبارت ممکن «if» تعلق دارد که
در این مثال "اگر (ب)" است. این اغلب آن چیزی نیست که برنامه نویس انتظارش را داشت
در مثال بالا با تورفتگی که برنامه نویس انتخاب کرده نشان داده شده است. وقتی که هست
بالقوه این سردرگمی، شورای همکاری خلیج فارس در صورت وجود این پرچم هشداری صادر خواهد کرد
مشخص شده. برای حذف اخطار، پرانتزهای واضح را در اطراف درونی ترین "اگر" اضافه کنید
بیانیه بنابراین هیچ راهی وجود ندارد که "دیگر" به "اگر" محصور شود. در
کد حاصل به شکل زیر خواهد بود:

{
اگر یک)
{
اگر (ب)
foo ();
دیگر
بار ()؛
}
}

همچنین برای استفاده های خطرناک از ?: با پسوند GNU عملوند وسط حذف شده هشدار دهید. چه زمانی
شرط در عملگر ?: یک عبارت بولی است که مقدار حذف شده خواهد بود
همیشه 1. اغلب کاربر انتظار دارد که مقداری باشد که در داخل شرطی محاسبه می شود
بیان به جای

این هشدار توسط -دیو.

-توالی-نقطه
در مورد کدهایی که ممکن است به دلیل نقض توالی معنایی تعریف نشده داشته باشند هشدار دهید
قوانین نقطه در استانداردهای C و C++.

استانداردهای C و C++ ترتیب قرار گرفتن عبارات در برنامه C/C++ را مشخص می کند
از نظر دنباله نقطه، که نشان دهنده نظم بخشی بین
اجرای بخش هایی از برنامه: آنهایی که قبل از نقطه توالی اجرا شده اند و آن ها
پس از آن اجرا شد. اینها پس از ارزیابی یک عبارت کامل (یک عبارت که
بخشی از یک عبارت بزرگتر نیست)، پس از ارزیابی اولین عملوند a
عملگر "&&"، "||"، "? :" یا "" (کاما)، قبل از فراخوانی یک تابع (اما بعد از
ارزیابی آرگومان های آن و عبارتی که تابع فراخوانی شده را نشان می دهد) و در
مکان های خاص دیگر به غیر از آنچه که توسط قوانین نقطه توالی بیان شده است، ترتیب
ارزیابی عبارات فرعی یک عبارت مشخص نشده است. همه این قوانین
فقط یک ترتیب جزئی را به جای یک مرتبه کلی توصیف کنید، زیرا، برای مثال، اگر دو
توابع در یک عبارت بدون هیچ نقطه توالی بین آنها فراخوانی می شوند
ترتیب فراخوانی توابع مشخص نشده است. با این حال، استانداردها
کمیته حکم داده است که فراخوانی های تابع با هم تداخل ندارند.

مشخص نشده است که چه زمانی بین نقاط توالی تغییرات مقادیر از
اشیاء اثر می گذارند برنامه هایی که رفتارشان به این بستگی دارد، رفتار تعریف نشده ای دارند.
استانداردهای C و C++ مشخص می کنند که "بین نقطه توالی قبلی و بعدی an
مقدار ذخیره شده شی باید حداکثر یک بار با ارزیابی یک تغییر یابد
اصطلاح. علاوه بر این، مقدار قبلی فقط برای تعیین مقدار باید خوانده شود
ذخیره شود.". اگر برنامه ای این قوانین را زیر پا بگذارد، نتایج آن بر روی هر مورد خاصی خواهد بود
اجرا کاملا غیر قابل پیش بینی هستند.

نمونه هایی از کد با رفتار تعریف نشده عبارتند از: "a = a++;"، "a[n] = b[n++]" و "a[i++] =
i;". برخی از موارد پیچیده تر با این گزینه تشخیص داده نمی شوند و ممکن است باعث شود
گاهی اوقات نتیجه مثبت کاذب است، اما به طور کلی در آن نسبتاً مؤثر است
تشخیص این نوع مشکل در برنامه ها

استاندارد به گونه ای گیج کننده بیان شده است، بنابراین بحث هایی در مورد دقیق وجود دارد
معنی قواعد نقطه توالی در موارد ظریف. پیوندهایی به بحث های مربوط به
مشکل، از جمله تعاریف رسمی پیشنهادی، ممکن است در صفحه خواندن شورای همکاری خلیج فارس یافت شود،
درhttp://gcc.gnu.org/readings.html>.

این هشدار توسط -دیو برای C و C++.

- نوع چرخشی
هر زمان که تابعی با نوع بازگشتی که پیش‌فرض «int» است، اخطار کنید. همچنین
در مورد هر عبارت "return" بدون مقدار بازگشتی در تابعی که نوع بازگشتی آن وجود دارد هشدار دهید
"باطل" نیست (افتادن انتهای بدنه عملکرد بازگشتی در نظر گرفته می شود
بدون مقدار)، و در مورد یک عبارت "return" با یک عبارت در یک تابع
که نوع بازگشت آن "باطل" است.

برای C++، یک تابع بدون نوع بازگشت همیشه یک پیام تشخیصی حتی یکنواخت تولید می کند
چه زمانی -از نوع بدون بازگشت مشخص شده است. تنها استثنا هستند اصلی و توابع
در هدرهای سیستم تعریف شده است.

این هشدار توسط -دیو.

-سوئیچ
هر زمان که یک عبارت "switch" دارای شاخصی از نوع شمارش شده و فاقد "مورد" باشد، هشدار دهید.
برای یک یا چند کد نامگذاری شده آن شمارش. (وجود یک "پیش فرض"
برچسب از این هشدار جلوگیری می کند.) برچسب های "case" خارج از محدوده شمارش نیز
هنگام استفاده از این گزینه، هشدارها را تحریک کنید (حتی اگر یک برچسب "پیش فرض" وجود داشته باشد). این
هشدار توسط فعال می شود -دیو.

-Switch-default
هر زمان که عبارت «switch» دارای حالت «پیش‌فرض» نباشد، هشدار دهید.

-Switch-enum
هر زمان که یک عبارت "switch" دارای شاخصی از نوع شمارش شده و فاقد "مورد" باشد، هشدار دهید.
برای یک یا چند کد نامگذاری شده آن شمارش. برچسب های "مورد" خارج از
محدوده شمارش همچنین هنگام استفاده از این گزینه هشدارهایی را ایجاد می کند. تنها تفاوت
میان -سوئیچ و این گزینه به این صورت است که این گزینه هشداری در مورد حذف شده می دهد
کد شمارش حتی اگر یک برچسب "پیش فرض" وجود داشته باشد.

-Wsync-nand (فقط C و C++)
هنگامی که توابع داخلی "__sync_fetch_and_nand" و "__sync_nand_and_fetch" هستند، هشدار دهید
استفاده شده. این توابع معنایی را در GCC 4.4 تغییر دادند.

Wtrigraphs
در صورت مواجه شدن با سه نموداری که ممکن است معنای برنامه را تغییر دهد، هشدار دهید
(سه نمودارهای داخل نظرات هشدار داده نمی شوند). این هشدار توسط -دیو.

پارامتر -Wunused-but-set
هر زمان که یک پارامتر تابع به آن اختصاص داده شود، اما در غیر این صورت استفاده نشده است (به غیر از
اعلامیه آن).

برای سرکوب این هشدار از استفاده نشده ویژگی.

این هشدار نیز توسط -استفاده نشده با -وکسترا.

-متغیر-استفاده نشده-اما-ست
هر زمان که یک متغیر محلی به آن اختصاص داده شود، اما در غیر این صورت استفاده نشده است (به غیر از آن، هشدار دهید
اعلام). این هشدار توسط -دیو.

برای سرکوب این هشدار از استفاده نشده ویژگی.

این هشدار نیز توسط -استفاده نشده، که توسط فعال می شود -دیو.

-Wunused-function
هر زمان که یک تابع استاتیک اعلام می شود اما تعریف نشده است یا یک تابع غیر خطی است، هشدار می دهد
تابع استفاده نشده است این هشدار توسط -دیو.

Wunused-برچسب
هر زمان که برچسبی اعلام شد اما استفاده نشد هشدار دهید. این هشدار توسط -دیو.

برای سرکوب این هشدار از استفاده نشده ویژگی.

Wunused-local-typedefs (فقط C، Objective-C، C++ و Objective-C++)
وقتی از typedef تعریف شده محلی در یک تابع استفاده نمی شود هشدار دهید.

-پارامتر Wunused
هر زمان که یک پارامتر تابع به غیر از اعلان آن استفاده نشود، هشدار دهید.

برای سرکوب این هشدار از استفاده نشده ویژگی.

-نتیجه استفاده نشده است
اگر فراخوان دهنده تابعی که با ویژگی "warn_unused_result" علامت گذاری شده است، هشدار ندهید
از مقدار برگشتی آن استفاده نکنید. پیش فرض است استفاده نشده-نتیجه.

-Wunused-متغیر
هر زمان که یک متغیر محلی یا متغیر ثابت غیر ثابت به غیر از آن استفاده نشود، هشدار دهید
اعلامیه آن این هشدار توسط -دیو.

برای سرکوب این هشدار از استفاده نشده ویژگی.

-ارزش استفاده نشده
هر زمان که عبارتی نتیجه ای را محاسبه می کند که صراحتاً استفاده نمی شود هشدار دهید. سرکوب کردن
این هشدار عبارت استفاده نشده را به از درجه اعتبار ساقط. این شامل یک بیانیه است
یا سمت چپ عبارت کاما که هیچ عوارض جانبی ندارد. برای
به عنوان مثال، عبارتی مانند x[i,j] در حالی که باعث هشدار می شود x[(باطل)i،j] اراده
است.

این هشدار توسط -دیو.

-استفاده نشده
همه موارد بالا -استفاده نشده گزینه های ترکیب شده

برای دریافت اخطار در مورد یک پارامتر تابع استفاده نشده، باید یکی را مشخص کنید
-وکسترا -استفاده نشده (توجه داشته باشید که -دیو دلالت دارد -استفاده نشده) یا به طور جداگانه مشخص کنید
-پارامتر Wunused.

-Wunitarized
در صورت استفاده از یک متغیر خودکار بدون مقداردهی اولیه یا در صورت استفاده از متغیر، هشدار دهید
ممکن است با یک تماس "setjmp" clobber شود. در C++، اگر یک مرجع غیر ایستا یا غیر ایستا
ایستا طراح عضو در یک کلاس بدون سازنده ظاهر می شود.

اگر می خواهید در مورد کدی که از مقدار اولیه متغیر in استفاده می کند هشدار دهید
از مقداردهی اولیه خود استفاده کنید -برخود گزینه.

این اخطارها برای هر یک از عناصر غیر اولیه یا گیج‌شده ساختار رخ می‌دهد.
متغیرهای اتحادیه یا آرایه و همچنین برای متغیرهایی که مقدار اولیه اولیه یا clobber شده اند
در کل. آنها برای متغیرها یا عناصر اعلام شده "فرار" رخ نمی دهند. زیرا
این هشدارها به بهینه سازی، متغیرها یا عناصر دقیقی که برای آنها وجود دارد بستگی دارد
هشدارها به گزینه های بهینه سازی دقیق و نسخه GCC مورد استفاده بستگی دارد.

توجه داشته باشید که ممکن است هیچ هشداری در مورد متغیری که فقط برای محاسبه a استفاده می شود وجود نداشته باشد
مقداری که خود هرگز استفاده نمی شود، زیرا چنین محاسباتی ممکن است توسط جریان داده حذف شوند
تجزیه و تحلیل قبل از چاپ هشدارها

-Wmaybe-unitialized
برای یک متغیر خودکار، اگر مسیری از ورودی تابع تا استفاده از وجود داشته باشد
متغیری که مقداردهی اولیه شده است، اما مسیرهای دیگری وجود دارد که متغیر نیست
مقداردهی اولیه شده، کامپایلر در صورتی که نتواند مقدار اولیه را ثابت کند، اخطاری صادر می کند
مسیرها در زمان اجرا اتفاق نمی‌افتند. این هشدارها اختیاری هستند زیرا GCC اینگونه نیست
آنقدر هوشمند است که تمام دلایلی که ممکن است با وجود ظاهر شدن کد ممکن است درست باشد را ببیند
خطا داشته باشد در اینجا یک مثال از چگونگی این اتفاق می‌افتد:

{
int x ؛
سوئیچ (y)
{
مورد 1: x = 1;
زنگ تفريح؛
مورد 2: x = 4;
زنگ تفريح؛
مورد 3: x = 5;
}
فو (x)؛
}

اگر مقدار "y" همیشه 1، 2 یا 3 باشد، "x" همیشه مقداردهی اولیه می شود، اما GCC
این را نمی داند برای سرکوب هشدار، کاربر باید یک مورد پیش فرض ارائه کند
با ادعا(0) یا کد مشابه.

این گزینه همچنین هشدار می دهد که یک متغیر خودکار غیر فرار ممکن است با a تغییر کند
با "longjmp" تماس بگیرید. این هشدارها نیز فقط در بهینه سازی امکان پذیر است
تلفیقی.

کامپایلر فقط تماس های "setjmp" را می بیند. نمی تواند بداند "longjmp" کجا خواهد بود
نامیده شد؛ در واقع، یک کنترل کننده سیگنال می تواند آن را در هر نقطه ای از کد فراخوانی کند. به عنوان یک
در نتیجه، ممکن است یک هشدار دریافت کنید، حتی زمانی که در واقع مشکلی وجود ندارد زیرا "longjmp"
در واقع نمی توان در مکانی که باعث ایجاد مشکل می شود تماس گرفت.

اگر همه عملکردهایی را که استفاده می کنید را اعلام کنید، می توان از برخی هشدارهای جعلی جلوگیری کرد
هرگز به عنوان "noreturn" برنگرد.

این هشدار توسط -دیو or -وکسترا.

-Wunknown-pragmas
در صورت مواجه شدن با دستورالعمل "#pragma" که توسط GCC قابل درک نیست، هشدار دهید. اگر این
از گزینه خط فرمان استفاده می شود، حتی برای موارد ناشناخته اخطار صادر می شود
فایل های هدر سیستم در صورتی که اخطارها فقط توسط اخطارها فعال شده باشند، اینطور نیست
-دیو گزینه خط فرمان

-Wno-pragmas
در مورد استفاده نادرست از پراگماها، مانند پارامترهای نادرست، نحو نامعتبر یا
تعارض بین پراگماها همچنین ببینید -Wunknown-pragmas.

Wstrict-aliasing
این گزینه فقط زمانی فعال است که fstrict-aliasing فعال است. در مورد کدی که هشدار می دهد
ممکن است قوانین سخت گیرانه ای را که کامپایلر برای بهینه سازی استفاده می کند، بشکند.
اخطار همه موارد را نمی‌گیرد، اما سعی می‌کند موارد رایج‌تر را بگیرد
دام در آن گنجانده شده است -دیو. معادل آن است با -Wstrict-aliasing=3

-Wstrict-aliasing=n
این گزینه فقط زمانی فعال است که fstrict-aliasing فعال است. در مورد کدی که هشدار می دهد
ممکن است قوانین سخت گیرانه ای را که کامپایلر برای بهینه سازی استفاده می کند، بشکند.
سطوح بالاتر مربوط به دقت بالاتر (کمتر مثبت کاذب). سطوح بالاتر
همچنین با تلاش بیشتر مطابقت دارد، مشابه روشی که -O کار می کند. Wstrict-aliasing is
معادل -Wstrict-aliasing=n، با n=3.

سطح 1: تهاجمی ترین، سریع ترین، کم دقت ترین. احتمالاً در سطوح بالاتر مفید است
هشدار ندهید اما -fstrict-aliasing همچنان کد را می شکند، زیرا تعداد false بسیار کمی دارد
منفی ها با این حال، مثبت کاذب بسیاری دارد. برای همه تبدیل های اشاره گر هشدار می دهد
بین انواع احتمالاً ناسازگار، حتی اگر هرگز ارجاع داده نشود. در جلو می دود
فقط پایان

سطح 2: تهاجمی، سریع، نه خیلی دقیق. ممکن است هنوز نکات مثبت کاذب زیادی داشته باشد (نه
به اندازه سطح 1، و تعداد کمی منفی کاذب (اما احتمالاً بیشتر از سطح 1).
برخلاف سطح 1، فقط زمانی هشدار می دهد که آدرسی گرفته شود. در مورد انواع ناقص هشدار می دهد.
فقط در قسمت جلو اجرا می شود.

سطح 3 (پیش فرض برای Wstrict-aliasing): باید مثبت کاذب بسیار کم و تعداد کمی داشته باشد
منفی های کاذب زمانی که بهینه سازی فعال است کمی کندتر از سطوح 1 یا 2 است.
از الگوی رایج pun+dereference در قسمت جلو مراقبت می کند:
"*(int*)&some_float". اگر بهینه سازی فعال باشد، در قسمت پشتی نیز اجرا می شود، جایی که
با استفاده از نقاط حساس به جریان اطلاعات، با موارد بیانیه های متعدد سروکار دارد.
فقط زمانی هشدار می دهد که اشاره گر تبدیل شده ارجاع داده نشود. در مورد ناقص هشدار نمی دهد
انواع.

-سرریز مچ دست
-Wstrict-overflow=n
این گزینه فقط زمانی فعال است که -fstrict-سرریز فعال است. در مورد موارد هشدار می دهد
جایی که کامپایلر بر اساس این فرض بهینه سازی می کند که سرریز امضا شده انجام نمی شود
روی دادن. توجه داشته باشید که در مورد همه مواردی که ممکن است کد سرریز شود هشدار نمی دهد: it
فقط در مورد مواردی هشدار می دهد که کامپایلر مقداری بهینه سازی را اجرا می کند. بنابراین این
هشدار بستگی به سطح بهینه سازی دارد.

بهینه‌سازی که فرض می‌کند سرریز علامت‌دار رخ نمی‌دهد، کاملاً ایمن است
مقادیر متغیرهای درگیر به گونه ای است که سرریز هرگز انجام نمی شود، در واقع،
روی دادن. بنابراین این اخطار به راحتی می تواند یک مثبت کاذب بدهد: یک هشدار در مورد کد
که در واقع مشکلی نیست برای کمک به تمرکز روی مسائل مهم، چندین هشدار
سطوح تعریف شده است. هیچ اخطاری برای استفاده از سرریز امضا شده تعریف نشده صادر نمی شود
زمانی که تخمین می زنیم که یک حلقه به چند تکرار نیاز دارد، به ویژه چه زمانی
تعیین اینکه آیا یک حلقه اصلا اجرا می شود یا خیر.

-Wstrict-overflow=1
در مورد مواردی که هم مشکوک هستند و هم اجتناب از آنها آسان است، هشدار دهید. به عنوان مثال: "x +
1 > x"؛ با -fstrict-سرریز، کامپایلر این را به 1. این سطح ساده می کند
of -سرریز مچ دست توسط فعال می شود -دیو; سطوح بالاتر نیستند و باید باشند
به صراحت درخواست شده است.

-Wstrict-overflow=2
همچنین در مورد موارد دیگری که مقایسه به یک ثابت ساده شده است هشدار دهید. برای
مثال: "abs (x) >= 0". این تنها زمانی می تواند ساده شود -fstrict-سرریز هست در
اثر، زیرا "abs (INT_MIN)" به "INT_MIN" سرریز می شود، که کمتر از صفر است.
-سرریز مچ دست (بدون سطح) همان است -Wstrict-overflow=2.

-Wstrict-overflow=3
همچنین در مورد سایر مواردی که مقایسه ساده شده است هشدار دهید. به عنوان مثال: "x + 1
> 1" به "x > 0" ساده می شود.

-Wstrict-overflow=4
همچنین در مورد سایر ساده سازی هایی که در موارد فوق پوشش داده نمی شود هشدار دهید. برای
به عنوان مثال: "(x * 10) / 5" به "x * 2" ساده می شود.

-Wstrict-overflow=5
همچنین در مورد مواردی که کامپایلر بزرگی یک ثابت را کاهش می دهد هشدار دهید
درگیر مقایسه به عنوان مثال: "x + 2 > y" به "x + 1" ساده می شود
>= y". این فقط در بالاترین سطح هشدار گزارش می شود زیرا این
ساده‌سازی برای بسیاری از مقایسه‌ها اعمال می‌شود، بنابراین این سطح اخطار بسیار زیاد است
تعداد زیادی از مثبت کاذب

-Wsuggest-attribute=[خالص|طراح|بدون بازگشت]
برای مواردی که افزودن یک ویژگی ممکن است مفید باشد هشدار دهید. صفات در حال حاضر
پشتیبانی شده در زیر ذکر شده است.

-Wsuggest-attribute=خالص
-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn
هشدار در مورد توابعی که ممکن است نامزد ویژگی های "pure"، "const" یا
"بدون بازگشت". کامپایلر فقط برای توابع قابل مشاهده در کامپایل های دیگر هشدار می دهد
واحدها یا (در مورد "خالص" و "const") اگر نتواند این تابع را ثابت کند
به طور عادی برمی گردد. اگر تابعی شامل بی نهایت نباشد، به طور معمول برمی گردد
حلقه نه با پرتاب کردن، فراخوانی "abort()" یا به دام انداختن به طور غیر عادی برمی گردد. این
تجزیه و تحلیل نیاز به گزینه دارد -fipa-pure-const، که به طور پیش فرض در فعال است -O و
بالاتر سطوح بهینه سازی بالاتر دقت تحلیل را بهبود می بخشد.

-محدوده های جنگی
این گزینه فقط زمانی فعال است که -ftree-vrp فعال است (پیش فرض برای -O2 و بالاتر). آی تی
در مورد زیرنویس های آرایه هایی که همیشه خارج از محدوده هستند هشدار می دهد. این هشدار است
فعال شده توسط -دیو.

-Wno-div-by-zero
در مورد تقسیم اعداد صحیح کامپایل بر صفر هشدار ندهید. تقسیم ممیز شناور بر
در مورد صفر هشدار داده نمی شود، زیرا می تواند یک راه قانونی برای به دست آوردن بی نهایت و
NaNs.

Wsystem-headers
پیام‌های هشدار را برای ساختارهای موجود در فایل‌های هدر سیستم چاپ کنید. هشدارها از
هدرهای سیستم معمولاً سرکوب می شوند، با این فرض که معمولاً این کار را نمی کنند
مشکلات واقعی را نشان می دهد و تنها خواندن خروجی کامپایلر را سخت تر می کند. استفاده كردن
این گزینه خط فرمان به شورای همکاری خلیج فارس می‌گوید که اخطارهایی را از سرصفحه‌های سیستم صادر کند، انگار که آنها هشدار می‌دهند
در کد کاربر رخ داده است. با این حال، توجه داشته باشید که با استفاده از -دیو در ارتباط با این گزینه
اراده نه هشدار در مورد پراگماهای ناشناخته در هدرهای سیستم --- برای آن، -Wunknown-pragmas
همچنین باید استفاده شود

-ترامپولین
در مورد ترامپولین های ایجاد شده برای نشانگرهای توابع تو در تو هشدار دهید.

ترامپولین قطعه کوچکی از داده یا کد است که هنگام اجرا ایجاد می شود
زمان در پشته زمانی که آدرس یک تابع تودرتو گرفته می شود، و
برای فراخوانی غیر مستقیم تابع تودرتو استفاده می شود. برای برخی از اهداف، آن را
فقط از داده ها تشکیل شده است و بنابراین نیازی به درمان خاصی ندارد. ولی،
برای اکثر اهداف، از کد تشکیل شده است و بنابراین به پشته نیاز دارد
قابل اجرا باشد تا برنامه به درستی کار کند.

-Wfloat-برابر
در صورت استفاده از مقادیر ممیز شناور در مقایسه برابری هشدار دهید.

ایده پشت این کار این است که گاهی اوقات (برای برنامه نویس) راحت است
مقادیر ممیز شناور را تقریبی به اعداد واقعی بی نهایت دقیق در نظر بگیرید.
اگر این کار را انجام می دهید، پس باید محاسبه کنید (با تجزیه و تحلیل کد، یا در برخی موارد
به روش دیگر) حداکثر یا حداکثر خطای احتمالی که محاسبات معرفی می کند، و
هنگام انجام مقایسه (و هنگام تولید خروجی، اما این یک
مشکل متفاوت). به طور خاص، به جای آزمایش برای برابری، شما بررسی می کنید
برای دیدن اینکه آیا دو مقدار دارای محدوده هایی هستند که همپوشانی دارند یا خیر. و این کار با
عملگرهای رابطه ای، بنابراین مقایسه برابری احتمالاً اشتباه است.

-غیر سنتی (فقط C و Objective-C)
در مورد ساختارهای خاصی که در سنتی و ISO C رفتار متفاوتی دارند هشدار دهید
در مورد ساختارهای ISO C که معادل C سنتی ندارند و/یا مشکل ساز هستند هشدار دهید
سازه هایی که باید از آنها اجتناب کرد.

· پارامترهای کلان که در لفظ رشته در بدنه ماکرو ظاهر می شوند. که در
جایگزینی سنتی C ماکرو در لفظ رشته ای انجام می شود، اما اینطور نیست
در ISO C

· در C سنتی، برخی از دستورالعمل های پیش پردازنده وجود نداشت. سنتی
پیش پردازشگرها تنها در صورتی خط را به عنوان دستورالعمل در نظر می گیرند # ظاهر شد
ستون 1 روی خط از این رو -غیر سنتی در مورد بخشنامه هایی که
سنتی C می فهمد اما نادیده می گیرد زیرا # به عنوان ظاهر نمی شود
اولین کاراکتر روی خط همچنین به شما پیشنهاد می‌کند دستورالعمل‌هایی مانند #پراگما
C سنتی با تورفتگی آنها را درک نمی کند. مقداری سنتی
پیاده سازی ها تشخیص نمی دهند #الیف، بنابراین پیشنهاد می کند به طور کلی از آن اجتناب کنید.

· یک ماکرو تابع مانند که بدون آرگومان ظاهر می شود.

· عملگر unary plus.

· U پسوند ثابت عدد صحیح یا the F or L پسوندهای ثابت ممیز شناور
(C سنتی از این پشتیبانی می کند L پسوند روی ثابت های عدد صحیح.) به این ها توجه کنید
پسوندها در ماکروهای تعریف شده در هدرهای سیستم اکثر سیستم های مدرن ظاهر می شوند.
به عنوان مثال _MIN/max ماکروها در " استفاده از این ماکروها در کد کاربر ممکن است
به طور معمول منجر به هشدارهای جعلی می شود، با این حال پیش پردازنده یکپارچه GCC
زمینه کافی برای جلوگیری از هشدار در این موارد.

· یک تابع در یک بلوک خارجی اعلام شده و پس از پایان استفاده می شود
مسدود کردن.

· دستور "switch" دارای یک عملوند از نوع "long" است.

· یک اعلان تابع غیر «استاتیک» از یک «ایستا» پیروی می کند. این سازه نیست
توسط برخی از کامپایلرهای سنتی C پذیرفته شده است.

· نوع ISO یک ثابت عدد صحیح دارای عرض یا علامت متفاوت با آن است
نوع سنتی این هشدار فقط در صورتی صادر می شود که پایه ثابت ده باشد.
یعنی مقادیر هگزادسیمال یا اکتال، که معمولاً الگوهای بیت را نشان می دهند، نیستند
در مورد هشدار داد.

· استفاده از الحاق رشته ISO شناسایی شده است.

· اولیه سازی سنگدانه های اتوماتیک.

· تضاد شناسه با برچسب ها. C سنتی فاقد فضای نام مجزا برای آن است
برچسب ها.

· راه اندازی اتحادیه ها. اگر مقدار اولیه صفر باشد، اخطار حذف می شود.
این کار با این فرض انجام می شود که مقدار اولیه صفر در کد کاربر ظاهر می شود
مشروط به "__STDC__" برای جلوگیری از گم شدن هشدارهای اولیه و اتکا به
مقداردهی اولیه اولیه در حالت سنتی C به صفر می رسد.

· تبدیل توسط نمونه های اولیه بین مقادیر ثابت / ممیز شناور و بالعکس. در
عدم وجود این نمونه های اولیه هنگام کامپایل با C سنتی باعث جدی شدن این امر می شود
چالش ها و مسائل. این زیرمجموعه ای از هشدارهای تبدیل احتمالی برای مجموعه کامل است
استفاده کنید -تبدیل سنتی.

· استفاده از تعاریف تابع سبک ISO C. این هشدار عمدا است نه صادر شده
برای اعلان های نمونه اولیه یا توابع متغیر زیرا این ویژگی های ISO C خواهد بود
هنگام استفاده از ماکروهای سازگار سنتی C libiberty در کد شما ظاهر می شود،
"PARAMS" و "VPARAMS". این هشدار برای توابع تو در تو نیز دور زده می شود
زیرا آن ویژگی قبلاً یک برنامه افزودنی GCC است و بنابراین مربوط به آن نیست
سازگاری سنتی C

-تبدیل سنتی (فقط C و Objective-C)
اگر یک نمونه اولیه باعث تبدیل نوع متفاوتی با آنچه می‌شود می‌شود، هشدار دهید
به همان استدلال در غیاب نمونه اولیه. این شامل تبدیل
نقطه ثابت به شناور و بالعکس، و تبدیل تغییر عرض یا
امضای یک آرگومان نقطه ثابت به جز زمانی که همان تبلیغ پیش فرض باشد.

-اعلامیه پس از بیانیه (فقط C و Objective-C)
هنگامی که یک اعلان بعد از یک عبارت در یک بلوک پیدا می شود، هشدار دهید. این سازه، شناخته شده است
از C++، با ISO C99 معرفی شد و به طور پیش فرض در GCC مجاز است. این نیست
توسط ISO C90 پشتیبانی می شود و توسط نسخه های GCC قبل از GCC 3.0 پشتیبانی نمی شد.

-وندف
اگر یک شناسه تعریف نشده در یک ارزیابی شود هشدار دهید #اگر بخشنامه.

Wno-endif-labels
هر زمان که شد هشدار ندهید # دیگر و یا # اندیف با متن دنبال می شوند.

-سایه
هر زمان که یک متغیر محلی یا اعلان نوع متغیر دیگری را تحت الشعاع قرار داد، هشدار دهید،
پارامتر، نوع یا عضو کلاس (در C++)، یا هر زمان که یک تابع داخلی وجود دارد
سایه انداخته توجه داشته باشید که در C++، اگر متغیر محلی a را سایه بزند، کامپایلر هشدار نمی دهد
struct/class/enum، اما اگر یک typedef صریح را سایه می‌اندازد هشدار می‌دهد.

-بزرگتر از=لن
هر زمان که یک شی بزرگتر از لن بایت تعریف شده است.

-Wframe-larger-than=لن
اخطار اگر اندازه یک قاب تابع بزرگتر از لن بایت ها محاسبات انجام شد
برای تعیین اندازه قاب پشته تقریبی است و محافظه کارانه نیست. واقعی
الزامات ممکن است تا حدودی بیشتر از لن حتی اگر اخطاری دریافت نکنید. که در
علاوه بر این، هر فضایی که از طریق "alloca"، آرایه های با طول متغیر یا مرتبط اختصاص داده شده است
سازه ها توسط کامپایلر در هنگام تعیین اینکه آیا باید a را صادر کنند یا خیر شامل نمی شوند
هشدار

-Wno-free-nonheap-object
هنگام تلاش برای آزاد کردن شیئی که روی پشته تخصیص داده نشده است هشدار ندهید.

-Wstack-usage=لن
اگر میزان استفاده پشته از یک تابع ممکن است بزرگتر از آن باشد، هشدار دهید لن بایت ها محاسبات
انجام شده برای تعیین استفاده پشته محافظه کارانه است. هر فضای اختصاص داده شده از طریق "alloca"،
زمانی که آرایه های با طول متغیر یا ساختارهای مرتبط توسط کامپایلر گنجانده می شود
تعیین اینکه آیا اخطار صادر شود یا خیر.

پیام مطابق با خروجی است -fstack-usage.

· اگر میزان استفاده از پشته کاملاً ثابت باشد اما از مقدار مشخص شده بیشتر باشد، عبارت است از:

هشدار: استفاده از پشته 1120 بایت است

· اگر استفاده از پشته (تا حدی) پویا اما محدود باشد، این است:

هشدار: مصرف پشته ممکن است 1648 بایت باشد

· اگر استفاده از پشته (تا حدی) پویا باشد و محدود نباشد، به این صورت است:

هشدار: استفاده از پشته ممکن است نامحدود باشد

-بهینه سازی های حلقه Wunsafe
اگر حلقه را نمی توان بهینه کرد، هشدار دهید زیرا کامپایلر نمی تواند چیزی را روی آن فرض کند
مرزهای شاخص های حلقه با -بهینه‌سازی‌های حلقه امن در صورت کامپایلر هشدار دهید
چنین فرضیاتی را مطرح کرد.

-فرمت Wno-pedantic-ms (فقط اهداف MinGW)
اخطارهای مربوط به تعیین‌کننده‌های عرض فرمت "printf" / "scanf" غیرISO "I32" را غیرفعال می‌کند،
"I64" و "I" در اهداف ویندوز بسته به زمان اجرا MS، زمانی که شما استفاده می کنید استفاده می شود
گزینه ها -فرمت و -پدانتیک بدون پسوند gnu.

-wpointer-arith
در مورد هر چیزی که به "اندازه" یک نوع تابع یا "void" بستگی دارد هشدار دهید. گنو سی
برای راحتی در محاسبات با "void *" به این انواع اندازه 1 اختصاص می دهد.
اشاره گرها و اشاره گرها به توابع. در C++، هنگام انجام عملیات حسابی نیز هشدار دهید
شامل "NULL" است. این هشدار نیز توسط -پدانتیک.

Wtype-Limits
اخطار دهید اگر یک مقایسه همیشه درست است یا همیشه نادرست است به دلیل محدوده محدود
نوع داده، اما برای عبارات ثابت هشدار ندهید. به عنوان مثال، اگر علامتی ندارد، هشدار دهید
متغیر با صفر مقایسه می شود < or >=. این هشدار نیز توسط
-وکسترا.

-Wbad-function-cast (فقط C و Objective-C)
هر زمان که یک فراخوانی تابع به یک نوع غیر منطبق ارسال می شود، هشدار دهید. برای مثال هشدار دهید اگر
"int malloc()" به "هر چیزی *" فرستاده می شود.

-Wc++-compat (فقط C و Objective-C)
در مورد ساختارهای ISO C که خارج از زیرمجموعه مشترک ISO C و ISO هستند هشدار دهید
C++، به عنوان مثال درخواست تبدیل ضمنی از "void *" به یک اشاره گر به غیر"void"
تایپ کنید

-Wc++11-compat (فقط C++ و Objective-C++)
هشدار در مورد ساختارهای ++C که معنی آنها بین ISO C++ 1998 و ISO C++ 2011 متفاوت است،
به عنوان مثال، شناسه‌هایی در ISO C++ 1998 که کلمات کلیدی در ISO C++ 2011 هستند. این هشدار
روشن - تنگ کردن و توسط -دیو.

-استاک
هر زمان که یک اشاره گر فرستاده می شود، هشدار دهید تا یک واجد شرایط نوع از نوع هدف حذف شود.
به عنوان مثال، اگر یک "const char *" به یک "char *" معمولی فرستاده شود، هشدار دهید.

همچنین هنگام ساختن بازیگرانی که یک نوع واجد شرایط را به روشی ناامن معرفی می کند، هشدار دهید. برای
برای مثال، ریختن "char **" به "const char **" ناامن است، مانند این مثال:

/* p مقدار char ** است. */
const char **q = (const char **) p;
/* انتساب رشته فقط خواندنی به const char * درست است. */
*q = "رشته";
/* اکنون نشانگر char** به حافظه فقط خواندنی اشاره می کند. */
**p = 'b';

-Wcast-align
هر زمان که یک اشاره گر به گونه ای پرتاب می شود که تراز مورد نیاز هدف باشد، هشدار دهید
افزایش یافت. به عنوان مثال، اگر یک "char *" به "int *" در ماشین‌هایی که در آن قرار دارند فرستاده شود هشدار دهید
اعداد صحیح فقط در مرزهای دو یا چهار بایت قابل دسترسی هستند.

-نوشتن رشته ها
هنگام کامپایل C، به ثابت های رشته ای نوع "const char[ بدهید.طول]" به طوری که کپی کردن
آدرس یک به یک اشاره گر غیر "const" "char *" یک هشدار دریافت می کند. اینها
اخطارها به شما کمک می کنند تا کدی را در زمان کامپایل پیدا کنید که می تواند سعی کند در یک رشته بنویسد
ثابت است، اما فقط در صورتی که در استفاده از «const» در اعلان‌ها بسیار دقت کرده باشید
و نمونه های اولیه در غیر این صورت، فقط یک مزاحمت خواهد بود. به همین دلیل ما درست نکردیم
-دیو این هشدارها را درخواست کنید

هنگام کامپایل کردن ++C، در مورد تبدیل منسوخ شده از حروف الفبای رشته به "char" هشدار دهید.
*". این هشدار به طور پیش فرض برای برنامه های ++C فعال است.

-وکلوببر شده
هشدار برای متغیرهایی که ممکن است توسط LongJMP or vfork. این هشدار نیز هست
فعال شده توسط -وکسترا.

-تبدیل
برای تبدیل‌های ضمنی که ممکن است یک مقدار را تغییر دهند هشدار دهید. این شامل تبدیل ها می شود
بین واقعی و صحیح، مانند "abs (x)" زمانی که "x" "دو" است. تبدیل بین
امضا شده و بدون علامت، مانند "unsigned UI = -1"؛ و تبدیل به انواع کوچکتر مانند
"sqrtf (M_PI)". برای بازیگران صریح مانند "abs ((int) x)" و "ui =" هشدار ندهید
(بدون علامت) -1"، یا اگر مقدار با تبدیل مانند "abs (2.0)" تغییر نکند.
هشدارها در مورد تبدیل بین اعداد صحیح امضا شده و بدون علامت را می توان توسط
با استفاده از -Wno-sign-conversion.

برای C++، همچنین در مورد وضوح اضافه بار گیج کننده برای تبدیل های تعریف شده توسط کاربر هشدار دهید. و
تبدیل هایی که هرگز از عملگر تبدیل نوع استفاده نخواهند کرد: تبدیل به "void"، the
همان نوع، یک کلاس پایه یا یک مرجع به آنها. هشدار در مورد تبدیل بین
اعداد صحیح امضا شده و بدون علامت به طور پیش فرض در C++ غیرفعال هستند مگر اینکه -Wsign-تبدیل
به صراحت فعال است.

-Wno-conversion-null (فقط C++ و Objective-C++)
برای تبدیل بین انواع "NULL" و غیر اشاره گر هشدار ندهید. -Wconversion-null is
به طور پیش فرض فعال است

-Wzero-as-null-pointer-constant (فقط C++ و Objective-C++)
هنگامی که یک "0" تحت اللفظی به عنوان ثابت نشانگر تهی استفاده می شود، هشدار دهید. این می تواند مفید باشد
تبدیل به "nullptr" در C++11 را تسهیل کنید.

-جسم خیس
اگر جسم خالی در یک رخ دهد هشدار دهید if, دیگر or do در حین بیانیه. این هشدار است
همچنین توسط -وکسترا.

-Wenum-مقایسه کنید
در مورد مقایسه بین مقادیر انواع مختلف برشمرده شده هشدار دهید. در شماره C++
عدم تطابق در عبارات شرطی نیز تشخیص داده می شود و هشدار توسط فعال می شود
پیش فرض در C این هشدار توسط فعال می شود -دیو.

-Wjump-misses-init (فقط C، Objective-C)
اگر عبارت «goto» یا عبارت «switch» به جلو می‌پرد، هشدار دهید
مقداردهی اولیه یک متغیر، یا پس از انجام متغیر به سمت برچسب به عقب پرش می کند
اولیه شد. این فقط در مورد متغیرهایی که در زمان شروع اولیه هستند هشدار می دهد
اعلام کرد. این هشدار فقط برای C و Objective-C پشتیبانی می شود. در C++ این نوع
شعبه در هر صورت یک خطا است.

-Wjump-misses-init گنجانده شده است -Wc++-compat. می توان آن را با
-Wno-jump-misses-init گزینه.

-Wsign-مقایسه کنید
هنگامی که مقایسه بین مقادیر علامت دار و بدون علامت ممکن است باعث اشتباه شود هشدار دهید
نتیجه زمانی است که مقدار امضا شده به بدون علامت تبدیل شود. این هشدار نیز فعال است
by -وکسترا; برای دریافت سایر هشدارها -وکسترا بدون این هشدار، استفاده کنید -وکسترا
-Wno-Sign-Compare.

-Wsign-تبدیل
برای تبدیل‌های ضمنی که ممکن است علامت یک مقدار صحیح را تغییر دهند، هشدار دهید
اختصاص یک عبارت عدد صحیح علامت دار به یک متغیر عدد صحیح بدون علامت. یک صریح
بازیگران هشدار را خاموش می کند. در C نیز این گزینه توسط -تبدیل.

-وادرس
در مورد استفاده های مشکوک از آدرس های حافظه هشدار دهید. اینها شامل استفاده از آدرس a
تابع در یک عبارت شرطی، مانند "void func(void); if (func)" و
مقایسه با آدرس حافظه یک رشته تحت اللفظی، مانند "if (x == "abc")".
چنین استفاده هایی معمولاً نشان دهنده یک خطای برنامه نویس است: آدرس یک تابع همیشه
به درستی ارزیابی می شود، بنابراین استفاده از آنها در یک شرطی معمولاً نشان می دهد که برنامه نویس
پرانتزها را در فراخوانی تابع فراموش کرد. و مقایسه در برابر لفظ رشته
منجر به رفتار نامشخص می شوند و در C قابل حمل نیستند، بنابراین معمولاً نشان می دهند
که برنامه نویس قصد استفاده از "strcmp" را داشته است. این هشدار توسط -دیو.

Wlogical-op
در مورد استفاده مشکوک از عملگرهای منطقی در عبارات هشدار دهید. این شامل استفاده از
عملگرهای منطقی در زمینه هایی که احتمالاً یک عملگر بیت عاقلانه انتظار می رود.

-تجمیع-بازگشت
در صورت تعریف یا فراخوانی توابعی که ساختارها یا اتحادیه ها را برمی گرداند هشدار دهید. (که در
زبان‌هایی که می‌توانید آرایه‌ای را برگردانید، این نیز یک هشدار ایجاد می‌کند.)

-Wno-ویژگی ها
اگر از یک "__خصیصه__" غیرمنتظره استفاده می شود، مانند ویژگی های ناشناخته، هشدار ندهید،
ویژگی های تابع اعمال شده بر روی متغیرها و غیره. این باعث توقف خطاها نمی شود
استفاده نادرست از ویژگی های پشتیبانی شده

-Wno-ساخته-کلان-بازتعریف شده است
در صورت بازتعریف برخی از ماکروهای داخلی هشدار ندهید. این هشدارها را برای
تعریف مجدد "__TIMESTAMP__"، "__TIME__"، "__DATE__"، "__FILE__"، و
"__BASE_FILE__".

Wstrict-نمونه های اولیه (فقط C و Objective-C)
اگر تابعی بدون مشخص کردن انواع آرگومان اعلان یا تعریف شود هشدار دهید. (یک
تعریف تابع به سبک قدیمی بدون اخطار مجاز است اگر قبل از آن علامت الف باشد
اعلانی که انواع آرگومان را مشخص می کند.)

-Wold-style-اعلامیه (فقط C و Objective-C)
با توجه به استاندارد C، در یک اعلامیه برای استفاده های منسوخ هشدار دهید. برای
به عنوان مثال، اگر مشخص‌کننده‌های کلاس ذخیره‌سازی مانند "static" اولین چیزهای موجود در a نیستند، هشدار دهید
اعلام. این هشدار نیز توسط -وکسترا.

تعریف -Wold-style (فقط C و Objective-C)
در صورت استفاده از تعریف تابع به سبک قدیمی هشدار دهید. اخطار داده می شود حتی اگر وجود داشته باشد
نمونه اولیه قبلی

-Wmissing-پارامتر-نوع (فقط C و Objective-C)
یک پارامتر تابع بدون مشخص کننده نوع در توابع سبک K&R اعلام می شود:

void foo(bar) {}

این هشدار نیز توسط -وکسترا.

-Wmissing-نمونه های اولیه (فقط C و Objective-C)
اگر یک تابع سراسری بدون اعلان نمونه اولیه قبلی تعریف شده باشد هشدار دهید. این
هشدار صادر می شود حتی اگر خود تعریف یک نمونه اولیه ارائه دهد. هدف این است که
توابع سراسری را که در فایل های هدر اعلان نشده اند را شناسایی کنید.

-Wmissing-اعلامیه ها
اگر یک تابع سراسری بدون اعلان قبلی تعریف شده باشد هشدار دهید. حتی اگر این کار را انجام دهید
خود تعریف یک نمونه اولیه را ارائه می دهد. از این گزینه برای شناسایی جهانی استفاده کنید
توابعی که در فایل های هدر اعلان نشده اند. در C++ هیچ هشداری برای آن صادر نمی شود
الگوهای تابع، یا برای توابع درون خطی، یا برای توابع در فضای نام ناشناس.

Wmissing-field-initializers
اگر مقداری فیلد در مقداردهی اولیه سازه وجود نداشته باشد، هشدار دهید. به عنوان مثال موارد زیر
کد باعث ایجاد چنین هشداری می شود، زیرا "xh" به طور ضمنی صفر است:

ساختار s { int f, g, h; };
ساختار sx = { 3, 4 };

این گزینه در مورد اولیه سازهای تعیین شده هشدار نمی دهد، بنابراین اصلاحات زیر را انجام دهید
اخطار ایجاد نمی کند:

ساختار s { int f, g, h; };
ساختار sx = { .f = 3، .g = 4 };

این هشدار درج شده است -وکسترا. برای بدست آوردن دیگری -وکسترا اخطار بدون این،
استفاده کنید -وکسترا -Wno-missing-field-initializers.

-Wmissing-format-attribute
در مورد اشاره گرهای تابعی که ممکن است کاندید ویژگی های "format" باشند، هشدار دهید. توجه داشته باشید
اینها فقط نامزدهای احتمالی هستند، نه مطلق. GCC آن عملکرد را حدس می زند
اشاره گرهایی با ویژگی های "format" که در انتساب، مقداردهی اولیه استفاده می شوند،
عبارات ارسال یا بازگشت پارامتر باید یک ویژگی "format" مربوطه داشته باشد
در نوع حاصل یعنی سمت چپ تخصیص یا مقداردهی اولیه،
نوع متغیر پارامتر یا نوع بازگشتی تابع حاوی
به ترتیب باید یک ویژگی "قالب" نیز برای جلوگیری از هشدار داشته باشد.

GCC همچنین در مورد تعاریف تابعی که ممکن است نامزد "قالب" باشند هشدار می دهد.
ویژگی های. باز هم، اینها فقط نامزدهای احتمالی هستند. GCC آن "قالب" را حدس می زند
ویژگی ها ممکن است برای هر تابعی که تابعی مانند "vprintf" را فراخوانی می کند مناسب باشد.
یا "vscanf"، اما ممکن است همیشه اینطور نباشد، و برخی از توابع برای آنها
ویژگی های "قالب" مناسب هستند ممکن است شناسایی نشوند.

-Wno-multichar
در صورت ثابت بودن چند نویسه هشدار ندهید ("FOOF") استفاده می شود. معمولاً الف را نشان می دهند
اشتباه تایپی در کد کاربر، زیرا دارای مقادیر تعریف شده توسط پیاده سازی است و نباید باشد
در کدهای قابل حمل استفاده می شود.

غیر عادی شده=
در ISO C و ISO C++، دو شناسه اگر دنباله های متفاوتی از یکدیگر باشند، متفاوت هستند
شخصیت ها. با این حال، گاهی اوقات زمانی که کاراکترها خارج از مجموعه اصلی کاراکترهای ASCII هستند
استفاده می شود، می توانید دو دنباله کاراکتر متفاوت داشته باشید که یکسان به نظر می رسند. برای جلوگیری
سردرگمی، استاندارد ISO 10646 برخی از موارد را مشخص می کند هنجارسازی قوانین که هنگام اعمال
اطمینان حاصل کنید که دو دنباله ای که شبیه به هم هستند به یک دنباله تبدیل می شوند. شورای همکاری خلیج فارس
اگر از شناسه هایی استفاده می کنید که عادی نشده اند، می تواند به شما هشدار دهد. این گزینه
آن هشدار را کنترل می کند.

چهار سطح هشدار وجود دارد که توسط GCC پشتیبانی می شود. پیش فرض است -wnormalized = nfc,
که در مورد هر شناسه ای که در فرم عادی ISO 10646 "C" نیست هشدار می دهد،
NFC. NFC فرم توصیه شده برای اکثر موارد است.

متأسفانه، برخی از کاراکترها در شناسه های ISO C و ISO C++ مجاز هستند
هنگامی که به NFC تبدیل می شوند، در شناسه ها مجاز نیستند. یعنی راهی نیست
برای استفاده از این نمادها در ISO C یا C++ قابل حمل و داشتن تمام شناسه های خود در NFC.
-Wnormalized=id هشدار برای این شخصیت ها را سرکوب می کند. امید است که آینده
نسخه های استانداردهای مربوطه این را اصلاح می کنند، به همین دلیل است که این گزینه درست نیست
پیشفرض.

می توانید با نوشتن اخطار را برای همه کاراکترها خاموش کنید -غیر عادی = هیچکداماست. شما
فقط در صورتی که از طرح عادی سازی دیگری استفاده می کنید (مانند
"D")، زیرا در غیر این صورت به راحتی می توانید اشکالاتی ایجاد کنید که به معنای واقعی کلمه غیرممکن است
را ببینید.

برخی از کاراکترها در ISO 10646 معانی متمایزی دارند اما در برخی فونت ها یکسان به نظر می رسند
یا متدولوژی های نمایش، به خصوص زمانی که قالب بندی اعمال شده است. برای مثال
"\u207F"، "SUPERSCRIPT LATIN SMALL LETTER N"، درست مانند یک "n" معمولی نمایش داده می شود
که در یک بالانویس قرار داده شده است. ISO 10646 تعریف می کند NFKC هنجارسازی
برنامه ای برای تبدیل همه این موارد به یک فرم استاندارد نیز وجود دارد، و GCC در صورت شما هشدار می دهد
در صورت استفاده از کد در NFKC نیست -Wnormalized=nfkc. این هشدار قابل مقایسه است
هشدار در مورد هر شناسه ای که حاوی حرف O است زیرا ممکن است اشتباه گرفته شود
با رقم 0، و بنابراین پیش فرض نیست، اما ممکن است به عنوان یک کدگذاری محلی مفید باشد
در صورتی که محیط برنامه نویسی برای نمایش این موارد قابل تعمیر نباشد
شخصیت ها به طور مشخص

-منسوخ شده است
در مورد استفاده از ویژگی های منسوخ هشدار ندهید.

-Wno-منسوخ-اعلامیه
در مورد استفاده از توابع، متغیرها و انواع علامت گذاری شده به عنوان منسوخ شده هشدار ندهید
با استفاده از ویژگی "منسوخ شده".

-سرریز
در مورد سرریز زمان کامپایل در عبارات ثابت هشدار ندهید.

-Woverride-init (فقط C و Objective-C)
اگر یک فیلد اولیه بدون عوارض جانبی هنگام استفاده از تعیین شده لغو شود، هشدار دهید
مقداردهی اولیه

این هشدار درج شده است -وکسترا. برای بدست آوردن دیگری -وکسترا اخطار بدون این،
استفاده کنید -وکسترا -Wno-override-init.

بسته بندی شده
اگر به ساختاری ویژگی packed داده می شود، اما ویژگی packed هیچ مشخصه ای ندارد، هشدار دهید
تأثیر بر طرح یا اندازه سازه. چنین ساختارهایی ممکن است نادرست تراز شوند
سود اندک به عنوان مثال، در این کد، متغیر "fx" در "struct bar" خواهد بود
نادرست تراز شود حتی اگر "struct bar" خود ویژگی packed را نداشته باشد:

struct foo {
int x ؛
char a, b, c, d;
} __ ویژگی __ ((بسته بندی شده))؛
نوار ساختار {
char z;
struct foo f;
};

-Wpacked-bitfield-compat
سری های 4.1، 4.2 و 4.3 GCC از ویژگی "packed" در فیلدهای بیتی نوع نادیده می گیرند.
"کاراکتر". این در GCC 4.4 ثابت شده است، اما این تغییر می‌تواند منجر به تفاوت‌هایی در آن شود
طرح ساختار GCC به شما اطلاع می دهد که افست چنین فیلدی در GCC تغییر کند
4.4. به عنوان مثال، دیگر یک padding 4 بیتی بین فیلد "a" و "b" در این وجود ندارد
ساختار:

ساختن فو
{
char a:4;
char b:8;
} __ویژگی__ ((بسته بندی شده))؛

این هشدار به طور پیش فرض فعال است. استفاده کنید -Wno-packed-bitfield-compat برای غیرفعال کردن این
هشدار

-پد شده
هشدار می دهد اگر بالشتک در یک ساختار گنجانده شده است، یا برای تراز کردن یک عنصر از
ساختار یا تراز کردن کل ساختار. گاهی اوقات وقتی این اتفاق می افتد ممکن است
برای بازآرایی فیلدهای سازه برای کاهش بالشتک و به همین ترتیب
ساختار کوچکتر

-Wredundant-decls
اگر چیزی بیش از یک بار در یک محدوده اعلام شده است، هشدار دهید، حتی در مواردی که
چند اعلان معتبر است و چیزی را تغییر نمی دهد.

-خارجی ها (فقط C و Objective-C)
در صورت مواجه شدن با اعلان "خارجی" در یک تابع، هشدار دهید.

-وین لاین
اگر تابعی را نمی توان درون خطی کرد و به عنوان درون خطی اعلام شد هشدار دهید. حتی با این
گزینه، کامپایلر در مورد خرابی توابع درون خطی اعلام شده در آن هشدار نمی دهد
سرصفحه های سیستم

کامپایلر از انواع اکتشافی برای تعیین اینکه آیا a را درون خطی کند یا نه استفاده می کند
عملکرد. به عنوان مثال، کامپایلر اندازه تابع موجود را در نظر می گیرد
inlined و مقدار inlining که قبلاً در تابع فعلی انجام شده است.
بنابراین، تغییرات به ظاهر ناچیز در برنامه منبع می تواند باعث شود
هشدارهای تولید شده توسط -وین لاین ظاهر شدن یا ناپدید شدن

-Wno-invalid-offsetof (فقط C++ و Objective-C++)
سرکوب هشدارها از اعمال جبران ماکرو به نوع غیر POD. مطابق با
استاندارد ISO C++ 1998، اعمال می شود جبران به یک نوع غیر POD تعریف نشده است. که در
با این حال، پیاده سازی های C++ موجود، جبران معمولاً نتایج معنی داری می دهد
حتی زمانی که برای انواع خاصی از انواع غیر POD اعمال می شود. (مانند ساده ساختار که
تنها به دلیل داشتن سازنده نمی تواند یک نوع POD باشد.) این پرچم برای
کاربرانی که از نوشتن کد غیرقابل حمل آگاه هستند و به عمد این کار را انجام داده اند
برای نادیده گرفتن هشدار در مورد آن انتخاب شده است.

محدودیت ها در جبران ممکن است در نسخه بعدی استاندارد C++ آرام شود.

-بازیگرها از بین نرفتن به اشاره گر
اخطارها را از کست به نوع اشاره گر یک عدد صحیح با اندازه متفاوت سرکوب کنید. که در
C++، ارسال به یک نوع اشاره گر با اندازه کوچکتر یک خطا است. بازیگران زمستان به اشاره گر is
به طور پیش فرض فعال است

بدون اشاره گر به غیر بازیگری (فقط C و Objective-C)
اخطارهای ارسالی از یک اشاره گر به یک نوع عدد صحیح با اندازه متفاوت را سرکوب کنید.

-Winvalid-PCH
اگر سرصفحه ای از پیش کامپایل شده در مسیر جستجو یافت شد اما نمی توان از آن استفاده کرد، هشدار دهید.

-طولانی طولانی
هشدار دهید اگر طولانی طولانی نوع استفاده می شود. این توسط هر دو فعال می شود -پدانتیک or -غیر سنتی
در حالت های ISO C90 و C++98. برای ممانعت از پیام های هشدار، استفاده کنید -Wno-long-long.

ماکروهای Wvariadic
در صورت استفاده از ماکروهای متغیر در حالت ISO C90 pedantic یا نحو جایگزین گنو هشدار دهید
زمانی که در حالت pedantic ISO C99 هستید. این پیش فرض است. برای ممانعت از پیام های هشدار، استفاده کنید
Wno-variadic-macros.

-بردار-عملیات-عملکرد
در صورت عدم اجرای عملیات برداری از طریق قابلیت های SIMD معماری هشدار دهید.
عمدتا برای تنظیم عملکرد مفید است. عملیات برداری قابل پیاده سازی است
"تکه ای"، به این معنی که عملیات اسکالر روی هر بردار انجام می شود
عنصر "در موازی"، به این معنی که عملیات بردار با استفاده از
اسکالر از نوع گسترده تر، که معمولا کارایی بیشتری دارد. و "به عنوان مجرد
اسکالر"، به این معنی که بردار در یک نوع اسکالر قرار می گیرد.

-وولا
در صورت استفاده از آرایه با طول متغیر در کد، هشدار دهید. -wno-vla جلوگیری خواهد کرد
-پدانتیک هشدار آرایه طول متغیر

-Wvolatile-register-var
اگر متغیر ثبات فرار اعلام شد هشدار دهید. اصلاح کننده فرار این کار را نمی کند
همه بهینه‌سازی‌هایی را که ممکن است خواندن و/یا نوشتن را برای ثبت حذف کنند، مهار کنید
متغیرها این هشدار توسط -دیو.

-Wdisabled-بهینه سازی
اگر مجوز بهینه‌سازی درخواستی غیرفعال است، هشدار دهید. این هشدار به طور کلی نیست
نشان دهید که مشکلی در کد شما وجود دارد. این فقط نشان می دهد که GCC
بهینه سازها قادر به مدیریت موثر کد نبودند. اغلب، مشکل این است
کد شما خیلی بزرگ یا خیلی پیچیده است. GCC از بهینه سازی برنامه ها امتناع می کند
بهینه سازی خود احتمالاً زمان زیادی را می طلبد.

-Wpointer-Sign (فقط C و Objective-C)
برای عبور آرگومان اشاره گر یا تخصیص با نشانه های متفاوت هشدار دهید. این
گزینه فقط برای C و Objective-C پشتیبانی می شود. دلالت بر آن دارد -دیو و با
-پدانتیک، که می توان با آن غیر فعال کرد - نشانگر Wno.

-Wstack-محافظ
این گزینه فقط زمانی فعال است که محافظ چوب فعال است. در مورد عملکردها هشدار می دهد
که در برابر خرد شدن پشته محافظت نمی شود.

-Wno-Mudflap
هشدارهای مربوط به سازه‌هایی را که نمی‌توان با آن‌ها ابزار کرد، سرکوب کنید -fmudflap.

-طبقه های تار
در مورد ثابت های رشته ای که بیشتر از طول "حداقل حداکثر" هستند هشدار دهید
در استاندارد C مشخص شده است. کامپایلرهای مدرن معمولاً ثابت های رشته ای را مجاز می دانند
بسیار طولانی تر از حداقل حد استاندارد هستند، اما برنامه های بسیار قابل حمل باید
از استفاده از رشته های بلندتر خودداری کنید.

محدودیت اعمال می شود بعد از الحاق رشته ثابت، و دنباله را به حساب نمی آورد
NUL. در C90، محدودیت 509 کاراکتر بود. در C99، به 4095 افزایش یافت. C++98 این کار را انجام می دهد
ماکزیمم حداقل هنجاری را مشخص نمی کنیم، بنابراین رشته های طولی را در آن تشخیص نمی دهیم
++ C

این گزینه توسط -پدانتیک، و می توان با آن غیر فعال کرد رشته های بدون طول.

-ثابت-شناور-بدون پسوند (فقط C و Objective-C)
GCC برای هر ثابت شناوری که پسوند ندارد، هشدار صادر می کند. چه زمانی
همراه با استفاده می شود Wsystem-headers در مورد چنین ثابت هایی در هدر سیستم هشدار می دهد
فایل ها. این می تواند هنگام تهیه کد برای استفاده با "FLOAT_CONST_DECIMAL64" مفید باشد.
پراگما از پسوند ممیز شناور اعشاری تا C99.

گزینه برای اشکال زدایی شما برنامه or GCC
GCC دارای گزینه های ویژه مختلفی است که برای اشکال زدایی برنامه یا GCC شما استفاده می شود:

-g اطلاعات اشکال زدایی را در قالب اصلی سیستم عامل تولید کنید (Stab، COFF،
XCOFF یا DWARF 2). GDB می تواند با این اطلاعات اشکال زدایی کار کند.

در اکثر سیستم هایی که از قالب stabs استفاده می کنند، -g استفاده از اطلاعات دیباگ اضافی را امکان پذیر می کند
که فقط GDB می تواند از آن استفاده کند. این اطلاعات اضافی باعث می شود که اشکال زدایی در GDB بهتر عمل کند اما
احتمالاً باعث می شود دیگر اشکال زداها خراب شوند یا از خواندن برنامه امتناع کنند. اگر بخواهید
برای کنترل دقیق اینکه آیا اطلاعات اضافی تولید می شود، استفاده کنید -gstabs+,
-gstabs, -gxcoff+, -gxcoff، یا -gvms (به زیر مراجعه کنید)

GCC به شما امکان استفاده را می دهد -g با -O. میانبرهای گرفته شده توسط کد بهینه شده ممکن است
گاهی اوقات نتایج شگفت انگیزی ایجاد می کنند: برخی از متغیرهایی که اعلام کرده اید ممکن است وجود نداشته باشند
همه؛ جریان کنترل ممکن است برای مدت کوتاهی در جایی که شما انتظارش را نداشتید حرکت کند. برخی اظهارات ممکن است
اجرا نمی شود زیرا آنها نتایج ثابت را محاسبه می کنند یا مقادیر آنها قبلاً بود
دست برخی از دستورات ممکن است در مکان های مختلف اجرا شوند زیرا از آنها خارج شده اند
حلقه ها

با این وجود، اشکال زدایی خروجی بهینه شده ممکن است. این امر آن را معقول می کند
برای استفاده از بهینه ساز برای برنامه هایی که ممکن است اشکال داشته باشند.

گزینه های زیر زمانی مفید هستند که GCC با قابلیت بیشتر تولید شود
بیش از یک فرمت اشکال زدایی

-ggdb
اطلاعات اشکال زدایی را برای استفاده توسط GDB تولید کنید. این به معنای استفاده از رساترین است
قالب موجود (DWARF 2، stabs، یا قالب اصلی در صورتی که هیچکدام از اینها نیستند
پشتیبانی می شود)، از جمله پسوندهای GDB در صورت امکان.

-gstabs
اطلاعات اشکال زدایی را در قالب stabs (در صورت پشتیبانی) بدون GDB تولید کنید
پسوندها این فرمتی است که توسط DBX در اکثر سیستم های BSD استفاده می شود. در MIPS، آلفا و
System V Release 4 این گزینه خروجی اشکال زدایی stabs تولید می کند که اینطور نیست
توسط DBX یا SDB قابل درک است. در سیستم های System V Release 4 این گزینه به GNU نیاز دارد
مونتاژ کننده

-symbols-feliminate-unused-debug-symbols
اطلاعات اشکال زدایی را در قالب stabs (در صورت پشتیبانی) فقط برای نمادها تولید کنید
که در واقع استفاده می شوند.

-femit-class-debug-always
به جای انتشار اطلاعات اشکال زدایی برای کلاس C++ تنها در یک فایل شی،
آن را در تمام فایل های شی با استفاده از کلاس منتشر کنید. این گزینه باید فقط با استفاده شود
اشکال زدایی که نمی توانند روشی را که GCC معمولاً اطلاعات اشکال زدایی را منتشر می کند کنترل کنند
برای کلاس ها زیرا استفاده از این گزینه باعث افزایش اندازه اطلاعات اشکال زدایی می شود
به اندازه ضریب دو

بخش -fno-debug-types
به‌طور پیش‌فرض هنگام استفاده از DWARF v4 یا بالاتر، DIE‌های نوع خودشان قرار می‌گیرند
بخش debug_types به جای اینکه آنها را بخشی از بخش .debug_info کنید. این است
قرار دادن آنها در بخش های جداگانه comdat کارآمدتر است زیرا پیوند دهنده پس از آن خواهد بود
قادر به حذف موارد تکراری اما همه مصرف کنندگان DWARF از بخش های .debug_types پشتیبانی نمی کنند
نشده است.

-gstabs+
اطلاعات اشکال زدایی را در قالب stabs (در صورت پشتیبانی) با استفاده از گنو تولید کنید
برنامه های افزودنی فقط توسط دیباگر گنو (GDB) قابل درک است. استفاده از این پسوندها می باشد
به احتمال زیاد باعث از کار افتادن سایر اشکال زداها یا امتناع از خواندن برنامه می شود.

-gcoff
اطلاعات اشکال زدایی را در قالب COFF (در صورت پشتیبانی) تولید کنید. این است
قالب مورد استفاده SDB در اکثر سیستم های System V قبل از System V Release 4.

-gxcoff
اطلاعات اشکال زدایی را در قالب XCOFF تولید کنید (در صورت پشتیبانی). این است
فرمت مورد استفاده توسط دیباگر DBX در سیستم های IBM RS/6000.

-gxcoff+
اطلاعات اشکال زدایی را در قالب XCOFF (در صورت پشتیبانی) با استفاده از گنو تولید کنید
برنامه های افزودنی فقط توسط دیباگر گنو (GDB) قابل درک است. استفاده از این پسوندها می باشد
به احتمال زیاد باعث از کار افتادن سایر اشکال زدا یا امتناع از خواندن برنامه می شود و ممکن است باعث شود
اسمبلرهای غیر از اسمبلر گنو (GAS) با یک خطا از کار می افتند.

-کوتوله-نسخه
اطلاعات اشکال زدایی را در قالب DWARF (در صورت پشتیبانی) تولید کنید. این است
فرمت استفاده شده توسط DBX در IRIX 6. مقدار نسخه ممکن است 2، 3 یا 4 باشد. را
نسخه پیش فرض 2 است.

توجه داشته باشید که با DWARF نسخه 2 برخی از پورت ها نیاز دارند و همیشه از برخی غیر
پسوندهای DWARF 3 متضاد در جداول باز کردن.

نسخه 4 ممکن است به GDB 7.0 و -fvar-ردیابی-تکالیف برای حداکثر سود

-سوئیچ‌های grecord-gcc
این سوئیچ باعث می شود که گزینه های خط فرمان مورد استفاده برای فراخوانی کامپایلر که ممکن است
تولید کد را تحت تأثیر قرار دهید تا به ویژگی DW_AT_producer در DWARF اضافه شود
اشکال زدایی اطلاعات گزینه ها با فضاهایی که آنها را از هم جدا می کند به هم پیوسته اند
یکدیگر و از نسخه کامپایلر. همچنین ببینید -فرکورد-gcc-سوئیچ برای دیگری
روش ذخیره گزینه های کامپایلر در فایل شی.

-gno-record-gcc-switches
اضافه کردن گزینه‌های خط فرمان به ویژگی DW_AT_producer در DWARF را مجاز نکنید
اشکال زدایی اطلاعات این پیش فرض است.

-قطعه-کوتوله
استفاده از افزونه‌های نسخه استاندارد DWARF جدید نسبت به انتخاب با آن ممنوع است
-کوتوله-نسخه. در بیشتر اهداف با استفاده از پسوندهای DWARF غیر متعارض از بعد
نسخه های استاندارد مجاز است.

-gno-sight-dwarf
اجازه استفاده از پسوندهای نسخه استاندارد DWARF جدید نسبت به انتخاب شده با آن
-کوتوله-نسخه.

-gvms
اطلاعات اشکال زدایی را در قالب اشکال زدایی VMS (در صورت پشتیبانی) تولید کنید. این است
فرمت مورد استفاده DEBUG در سیستم های VMS.

-gسطح
-ggdbسطح
-gstabsسطح
-gcoffسطح
-gxcoffسطح
-gvmsسطح
اطلاعات اشکال زدایی را درخواست کنید و همچنین استفاده کنید سطح برای تعیین میزان اطلاعات در
سطح پیش فرض 2 است.

سطح 0 اصلاً اطلاعات اشکال زدایی تولید نمی کند. بدین ترتیب، -g0 نفی می کند -g.

سطح 1 حداقل اطلاعات را تولید می کند، که برای ایجاد بک تری در قسمت هایی از آن کافی است
برنامه ای که قصد اشکال زدایی آن را ندارید. این شامل توضیحات توابع و
متغیرهای خارجی، اما هیچ اطلاعاتی در مورد متغیرهای محلی و بدون شماره خط.

سطح 3 شامل اطلاعات اضافی، مانند تمام تعاریف کلان موجود در
برنامه برخی از دیباگرها هنگام استفاده از توسعه ماکرو پشتیبانی می کنند -g3.

-gdwarf-2 سطح اشکال زدایی پیوسته را نمی پذیرد، زیرا GCC از یک پشتیبانی می کرد
انتخاب -کوتوله این به معنای تولید اطلاعات اشکال زدایی در نسخه 1 DWARF بود
فرمت (که با نسخه 2 بسیار متفاوت است)، و خیلی گیج کننده بود.
فرمت اشکال زدایی مدت زیادی است که منسوخ شده است، اما اکنون نمی توان گزینه را تغییر داد. در عوض استفاده کنید
اضافی -gسطح گزینه ای برای تغییر سطح اشکال زدایی برای DWARF.

-تغییر
تولید اطلاعات اشکال زدایی را خاموش کنید، اگر کنار گذاشتن این گزینه باعث ایجاد آن می شد.
یا در غیر این صورت آن را در سطح 2 روشن کنید. موقعیت این آرگومان در خط فرمان
مهم نیست، پس از پردازش همه گزینه‌های دیگر اعمال می‌شود و این کار را انجام می‌دهد
فقط یک بار، مهم نیست چند بار داده شود. این عمدتاً برای استفاده در نظر گرفته شده است
با -fcompare-debug.

-fdump-final-insns[=پرونده]
نمایش داخلی نهایی (RTL) را در آن تخلیه کنید پرونده. اگر آرگومان اختیاری باشد
حذف شده (یا اگر پرونده "." است)، نام فایل dump با ضمیمه تعیین می شود
".gkd" به نام فایل خروجی کامپایل.

-fcompare-debug[=انتخاب می کند]
اگر در حین کامپایل خطایی رخ نداد، کامپایلر را برای بار دوم اجرا کنید و اضافه کنید انتخاب می کند و
-fcompare-debug-second به استدلال های ارائه شده به مجموعه دوم. تخلیه کنید
نمایش داخلی نهایی در هر دو کامپایل، و چاپ خطا در صورت متفاوت بودن.

اگر علامت مساوی حذف شود، پیش فرض است -تغییر استفاده می شود.

متغیر محیطی gcc_compare_debug، در صورت تعریف، غیر خالی و غیر صفر،
به طور ضمنی امکان می دهد -fcompare-debug. اگر gcc_compare_debug به یک رشته تعریف شده است
با یک خط تیره شروع می شود، سپس برای استفاده می شود انتخاب می کند، در غیر این صورت پیش فرض است -تغییر is
استفاده شده.

-fcompare-debug=، با علامت مساوی اما بدون انتخاب می کند، برابر است با
-fno-compare-debug، که باعث غیرفعال شدن دامپینگ نمایش نهایی و
تدوین دوم، جلوگیری از حتی gcc_compare_debug از اثرگذاری

برای تایید پوشش کامل در طول -fcompare-debug تست، تنظیم gcc_compare_debug گفتن
-FCOMPARE-DEBUG-NOT-OVERRIDDEND، که GCC آن را به عنوان یک گزینه نامعتبر در هر یک رد خواهد کرد
کامپایل واقعی (به جای پیش پردازش، مونتاژ یا پیوند). برای بدست آوردن فقط یک
هشدار، تنظیم gcc_compare_debug به -w%n-fcompare-debug نه نادیده گرفته شده انجام خواهد داد

-fcompare-debug-second
این گزینه به طور ضمنی به کامپایلر برای کامپایل دوم درخواستی ارسال می شود
by -fcompare-debug، همراه با گزینه هایی برای خاموش کردن هشدارها و حذف گزینه های دیگر
که باعث خروجی های کامپایلر به فایل ها یا خروجی استاندارد می شود.
نام فایل‌های Dump و فایل‌های موقت حفظ شده به گونه‌ای تغییر داده می‌شوند که حاوی ".gk" باشند.
پسوند اضافی در طول کامپایل دوم، برای جلوگیری از بازنویسی آنها
تولید شده توسط اولین

هنگامی که این گزینه به درایور کامپایلر منتقل می شود، باعث می شود اول تالیف به
نادیده گرفته شود، که آن را برای مواردی غیر از اشکال زدایی مناسب کامپایلر مفید می کند.

-feliminate-dwarf2-dups
با حذف اطلاعات تکراری در مورد هر یک، اطلاعات اشکال زدایی DWARF2 را فشرده کنید
سمبل. این گزینه فقط در هنگام تولید اطلاعات اشکال زدایی DWARF2 منطقی است
با -gdwarf-2.

-femit-struct-debug-baseonly
اطلاعات اشکال زدایی را برای انواع ساختار مانند تنها زمانی که نام پایه آن منتشر می شود
فایل منبع کامپایل با نام پایه فایلی که ساختار در آن تعریف شده است مطابقت دارد.

این گزینه به طور قابل ملاحظه ای اندازه اطلاعات اشکال زدایی را کاهش می دهد، اما در
از دست دادن بالقوه قابل توجه در اطلاعات نوع به دیباگر. دیدن
-femit-struct-debug-reduced برای یک گزینه کمتر تهاجمی دیدن
-femit-struct-debug-detailed برای کنترل دقیق تر

این گزینه فقط با DWARF 2 کار می کند.

-femit-struct-debug-reduced
اطلاعات اشکال زدایی را برای انواع ساختار مانند تنها زمانی که نام پایه آن منتشر می شود
فایل منبع کامپایل با نام پایه فایلی که نوع تعریف شده در آن مطابقت دارد،
مگر اینکه ساختار یک الگو یا تعریف شده در یک هدر سیستم باشد.

این گزینه به طور قابل توجهی اندازه اطلاعات اشکال زدایی را کاهش می دهد
از دست دادن احتمالی اطلاعات نوع به دیباگر. دیدن -femit-struct-debug-baseonly
برای یک گزینه تهاجمی تر دیدن -femit-struct-debug-detailed برای جزئیات بیشتر
کنترل.

این گزینه فقط با DWARF 2 کار می کند.

-femit-struct-debug-detailed[=لیست مشخصات]
انواع ساختار مانند که کامپایلر اطلاعات اشکال زدایی را برای آنها تولید می کند را مشخص کنید.
هدف این است که اطلاعات اشکال زدایی ساختار تکراری را بین اشیاء مختلف کاهش دهیم
فایل های داخل همان برنامه

این گزینه یک نسخه دقیق از -femit-struct-debug-reduced و
-femit-struct-debug-baseonly، که برای اکثر نیازها خدمت خواهد کرد.

یک مشخصات دارای نحو[کارگردان:|ind:][یا:|جنس:](هر|سیستم|پایه|هیچ)

کلمه اول اختیاری مشخصات را به ساختارهایی که مستقیماً استفاده می شوند محدود می کند
(کارگردان:) یا به صورت غیر مستقیم استفاده می شود (ind:). یک نوع ساختار مستقیماً زمانی استفاده می شود که نوع آن باشد
از یک متغیر، عضو. استفاده غیرمستقیم از طریق اشاره گرها به ساختارها ایجاد می شود. به این معنا که،
زمانی که استفاده از یک ساختار ناقص قانونی باشد، استفاده غیرمستقیم است. یک مثال است
ساختار یک مستقیم؛ ساختار دو * غیر مستقیم.

کلمه دوم اختیاری مشخصات را به ساختارهای معمولی محدود می کند (یا:) و یا
ساختارهای عمومی (جنس:). توضیح ساختارهای عمومی کمی پیچیده است. برای C++،
اینها تخصصهای غیر صریح کلاسهای قالب یا کلاسهای غیرقابلیت هستند
در موارد فوق سایر زبان های برنامه نویسی کلی دارند، اما
-femit-struct-debug-detailed هنوز آنها را اجرا نمی کند.

کلمه سوم فایل های منبع را برای ساختارهایی که کامپایلر برای آن ها هستند مشخص می کند
اطلاعات اشکال زدایی را منتشر می کند. ارزش ها هیچ و هر معنای عادی داشته باشد در
ارزش پایه به این معنی است که پایه نام فایلی که در آن نوع اعلان شده است
ظاهر شده باید با پایه نام فایل کامپایل اصلی مطابقت داشته باشد. در عمل،
این بدان معنی است که انواع اعلام شده در foo.c و foo.h اطلاعات اشکال زدایی خواهد داشت، اما
انواع اعلام شده در سرصفحه های دیگر نخواهد بود. ارزش سیستم به معنای آن انواع رضایت بخش است
پایه یا در هدرهای سیستم یا کامپایلر اعلام شده است.

ممکن است لازم باشد برای تعیین بهترین تنظیمات برای برنامه خود آزمایش کنید.

پیش فرض این است -femit-struct-debug-detailed=all.

این گزینه فقط با DWARF 2 کار می کند.

-fno-merge-debug-strings
پیوند دهنده را هدایت کنید تا رشته ها را در اطلاعات اشکال زدایی که هستند با هم ادغام نکند
در فایل های شی مختلف یکسان است. ادغام توسط همه اسمبلرها پشتیبانی نمی شود
پیوند دهنده ها ادغام اندازه اطلاعات اشکال زدایی را در فایل خروجی کاهش می دهد
هزینه افزایش زمان پردازش لینک ادغام به طور پیش فرض فعال است.

-fdebug-prefix-map=قدیمی=جدید
هنگام کامپایل فایل ها در دایرکتوری قدیمی، اطلاعات اشکال زدایی را ضبط کنید و آنها را به عنوان توصیف کنید
in جدید به جای آن.

-fno-dwarf2-cfi-aasm
به جای استفاده از بخش ".eh_frame" ایجاد شده توسط کامپایلر، اطلاعات بازگشایی DWARF 2 را منتشر کنید.
دستورالعمل های گاز ".cfi_*".

-p کد اضافی برای نوشتن اطلاعات نمایه مناسب برای برنامه تجزیه و تحلیل ایجاد کنید
معلم. شما باید از این گزینه هنگام کامپایل فایل های منبع مورد نظر خود استفاده کنید.
و همچنین هنگام لینک دادن باید از آن استفاده کنید.

-صفحه کد اضافی برای نوشتن اطلاعات نمایه مناسب برای برنامه تجزیه و تحلیل ایجاد کنید
gprof. شما باید از این گزینه هنگام کامپایل فایل های منبع مورد نظر خود استفاده کنید.
و همچنین هنگام لینک دادن باید از آن استفاده کنید.

-Q کامپایلر را وادار می کند تا نام هر تابع را همانطور که کامپایل می شود چاپ کند و تعدادی را چاپ کند
آمار مربوط به هر پاس پس از پایان آن.

-ftime-گزارش
کامپایلر را وادار می کند تا برخی از آمارهای مربوط به زمان مصرف شده توسط هر پاس را در هنگام آن چاپ کند
تمام می شود

-fmem-report
کامپایلر را وادار می کند تا در هنگام تخصیص حافظه دائمی، آماری را چاپ کند
تمام می شود

-fpre-ipa-mem-گزارش
-fpost-ipa-mem-report
کامپایلر را وادار می کند تا برخی از آمارهای مربوط به تخصیص حافظه دائمی را قبل از یا چاپ کند
پس از بهینه سازی بین رویه ای

-fstack-usage
اطلاعات استفاده از پشته خروجی کامپایلر را برای برنامه، بر اساس هر تابع، می سازد
اساس نام فایل برای dump با افزودن ساخته می شود .su به auxname. auxname is
تولید شده از نام فایل خروجی، در صورتی که به صراحت مشخص شده باشد و یک فایل نباشد
قابل اجرا است، در غیر این صورت نام پایه فایل منبع است. یک ورودی تشکیل شده است
سه زمینه:

· نام تابع.

· تعدادی بایت.

· یک یا چند واجد شرایط: "ایستا"، "پویا"، "محدود".

واجد شرایط "static" به این معنی است که تابع پشته را به صورت ایستا دستکاری می کند: a
تعداد ثابتی از بایت ها برای فریم در هنگام ورود تابع اختصاص داده می شود و در آن آزاد می شود
خروج تابع؛ در غیر این صورت هیچ تنظیم پشته در عملکرد انجام نمی شود. دومین
فیلد این تعداد ثابت بایت است.

واجد شرایط "دینامیک" به این معنی است که تابع پشته را به صورت پویا دستکاری می کند: in
علاوه بر تخصیص استاتیکی که در بالا توضیح داده شد، تنظیمات پشته در آن انجام می شود
بدنه تابع، به عنوان مثال برای فشار/پاپ آرگومان ها در اطراف فراخوانی تابع. اگر
واجد شرایط "bounded" نیز وجود دارد، مقدار این تنظیمات محدود شده است
زمان کامپایل و فیلد دوم کران بالایی از مقدار کل پشته استفاده شده است
توسط تابع در صورت عدم وجود، مقدار این تنظیمات محدود نمی شود
در زمان کامپایل و فیلد دوم فقط قسمت محدود شده را نشان می دهد.

-fprofile-arcs
کد اضافه کنید تا برنامه جریان پیدا کند قوس ابزارسازی می شوند. در حین اجرای برنامه
ثبت می کند که هر شاخه و فراخوان چند بار اجرا شده و چند بار گرفته شده است
یا برمی گردد. هنگامی که برنامه کامپایل شده خارج می شود، این داده ها را در فایلی به نام ذخیره می کند
auxname.gcda برای هر فایل منبع داده ها ممکن است برای نمایه هدایت شونده استفاده شوند
بهینه سازی (-شاخه-احتمالات، یا برای تجزیه و تحلیل پوشش تست
(-آزمایش-پوشش). هر فایل شی auxname از نام the ایجاد می شود
فایل خروجی، اگر به صراحت مشخص شده باشد و فایل اجرایی نهایی نباشد، در غیر این صورت
نام پایه فایل منبع است. در هر دو مورد هر پسوند حذف می شود (مثلاً
foo.gcda برای فایل ورودی dir/foo.c، یا dir/foo.gcda برای فایل خروجی مشخص شده به عنوان -o
dir/foo.o).

-- پوشش
این گزینه برای کامپایل و پیوند کدهای ابزاری برای تجزیه و تحلیل پوشش استفاده می شود. در
گزینه مترادف برای است -fprofile-arcs -آزمایش-پوشش (هنگام تالیف) و -lgcov
(هنگام لینک دادن). برای جزئیات بیشتر به اسناد آن گزینه ها مراجعه کنید.

· کامپایل فایل های منبع با -fprofile-arcs به علاوه بهینه سازی و تولید کد
گزینه ها. برای تجزیه و تحلیل پوشش تست، از موارد اضافی استفاده کنید -آزمایش-پوشش گزینه.
شما نیازی به مشخصات هر فایل منبع در یک برنامه ندارید.

· پیوند فایل های شی خود را با -lgcov or -fprofile-arcs (مورد دوم دلالت بر این دارد
سابق).

· برنامه را روی حجم کاری نماینده اجرا کنید تا نمایه قوس ایجاد شود
اطلاعات این ممکن است هر چند بار تکرار شود. می توانید همزمان اجرا کنید
نمونه هایی از برنامه شما و به شرطی که سیستم فایل از قفل کردن پشتیبانی کند،
فایل های داده به درستی به روز خواهند شد. همچنین تماس های "فشار" شناسایی می شوند و
به درستی مدیریت شود (شمارش مضاعف اتفاق نمی افتد).

· برای بهینه سازی های پروفایل، فایل های منبع را دوباره با همان کامپایل کنید
گزینه های بهینه سازی و تولید کد به علاوه -شاخه-احتمالات.

· برای تجزیه و تحلیل پوشش تست، استفاده کنید gcov برای تولید اطلاعات قابل خواندن برای انسان از
la .gcno و gcda فایل ها. رجوع به gcov مستندات برای ادامه
اطلاعات.

با -fprofile-arcs، برای هر تابع از برنامه شما GCC یک جریان برنامه ایجاد می کند
نمودار، سپس یک درخت پوشا برای نمودار پیدا می کند. فقط کمان هایی که روی آن نیستند
درخت پوشا باید ابزاری باشد: کامپایلر کد را برای شمارش تعداد اضافه می کند
زمان هایی که این کمان ها اجرا می شوند. زمانی که یک قوس تنها خروجی یا تنها ورودی است
یک بلوک، کد ابزار دقیق را می توان به بلوک اضافه کرد. در غیر این صورت، یک پایه جدید
برای نگهداری کد ابزار دقیق باید بلوکی ایجاد شود.

-آزمایش-پوشش
یک فایل یادداشت تهیه کنید که gcov ابزار کد پوشش می تواند برای نمایش برنامه استفاده کند
پوشش. فایل یادداشت هر فایل منبع فراخوانی می شود auxname.gcno. رجوع به
-fprofile-arcs گزینه بالا برای توضیح auxname و دستورالعمل در مورد چگونگی
تولید داده های پوشش آزمایشی داده های پوشش با فایل های منبع بیشتر مطابقت خواهند داشت،
اگر بهینه سازی نکنید

-fdbg-cnt-list
نام و کران بالای شمارنده را برای همه شمارنده های اشکال زدایی چاپ کنید.

-fdbg-cnt=لیست ضد ارزش
کران بالای شمارنده اشکال زدایی داخلی را تنظیم کنید. لیست ضد ارزش با کاما از هم جدا شده است
لیستی از نام:ارزش جفت هایی که کران بالایی هر شمارشگر اشکال زدایی را تعیین می کند نام به
ارزش. همه شمارشگرهای اشکال زدایی دارای کران بالایی اولیه هستند UINT_MAX، بدین ترتیب dbg_cnt()
همیشه true را برمی گرداند مگر اینکه کران بالایی توسط این گزینه تنظیم شده باشد. به عنوان مثال با
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) فقط برای 10 مورد اول true بر می گرداند
استناد

-قابل دفاع-نوع-عبور
-غیرفعال کردن-نوع-عبور=محدوده-لیست
این مجموعه ای از گزینه های اشکال زدایی است که برای غیرفعال کردن/فعال کردن صریح استفاده می شود
بهینه سازی می گذرد برای کاربران کامپایلر، گزینه های معمولی برای فعال/غیرفعال کردن پاس ها
باید به جای آن استفاده شود

*<-fdisable-ipa-عبور>
غیرفعال کردن ipa pass عبور. عبور نام پاس است. اگر همان پاس استاتیک باشد
پس از چند بار فراخوانی در کامپایلر، نام پاس باید با a اضافه شود
شماره ترتیبی که از 1 شروع می شود.

*<-fdisable-rtl-عبور>
*<-fdisable-rtl-عبور=محدوده-لیست>
rtl pass را غیرفعال کنید عبور. عبور نام پاس است. اگر همان پاس استاتیک باشد
پس از چند بار فراخوانی در کامپایلر، نام پاس باید با a اضافه شود
شماره ترتیبی که از 1 شروع می شود. محدوده-لیست یک لیست جدا شده با کاما است
محدوده تابع یا نام اسمبلر. هر محدوده یک جفت عدد است که با a از هم جدا شده اند
روده بزرگ محدوده شامل هر دو طرف است. اگر محدوده بی اهمیت است، عدد
جفت را می توان به عنوان یک عدد ساده ساده کرد. اگر گره cgraph تابع باشد UID is
قرار گرفتن در یکی از محدوده های مشخص شده، عبور برای آن غیرفعال است
تابع. UID در هدر تابع یک فایل dump و پاس نشان داده شده است
اسامی را می توان با استفاده از گزینه حذف کرد -fdump-passes.

*<-fdisable-tree-عبور>
*<-fdisable-tree-عبور=محدوده-لیست>
غیرفعال کردن مجوز درختی عبوراست. دیدن -fdisable-rtl برای توضیح گزینه
استدلال

*<-fenable-ipa-عبور>
ipa pass را فعال کنید عبور. عبور نام پاس است. اگر همان پاس استاتیک باشد
پس از چند بار فراخوانی در کامپایلر، نام پاس باید با a اضافه شود
شماره ترتیبی که از 1 شروع می شود.

*<-fenable-rtl-عبور>
*<-fenable-rtl-عبور=محدوده-لیست>
rtl pass را فعال کنید عبوراست. دیدن -fdisable-rtl برای توضیح آرگومان گزینه و
مثال ها.

*<-fenable-tree-عبور>
*<-fenable-tree-عبور=محدوده-لیست>
عبور درختی را فعال کنید عبوراست. دیدن -fdisable-rtl برای توضیح آرگومان های گزینه

# ccp1 را برای همه توابع غیرفعال کنید
-fdisable-tree-ccp1
# unroll کامل را برای تابعی که uid گره cgraph آن 1 است غیرفعال کنید
-1-کونرول = XNUMX
# gcse2 را برای توابع در محدوده های زیر غیرفعال کنید [1,1،XNUMX]،
# [300,400] و [400,1000]
# gcse2 را برای توابع foo و foo2 غیرفعال کنید
-fdisable-rtl-gcse2 = foo ، foo2
# خط‌بندی اولیه را غیرفعال کنید
-fdisable-tree-einline
# inlining ipa را غیرفعال کنید
-fdisable-ipa-inline
# باز کردن کامل درخت را فعال کنید
-پندار-درخت-باز کردن

-dنامه ها
-fdump-rtl-عبور
می گوید که در زمان کامپایل کردن، در زمان هایی که توسط آن مشخص شده است، اشکال زدایی dump ایجاد کنید نامه ها. این
برای اشکال زدایی پاس های مبتنی بر RTL کامپایلر استفاده می شود. نام فایل برای بیشتر
روگرفت ها با الحاق یک عدد پاس و یک کلمه به آن ساخته می شوند نام زباله، و
فایل ها در دایرکتوری فایل خروجی ایجاد می شوند. توجه داشته باشید که شماره پاس است
به صورت ایستا محاسبه می شود زیرا پاس ها در مدیر پاس ثبت می شوند. بنابراین
شماره گذاری به ترتیب دینامیکی اجرای پاس ها مربوط نمی شود. به خصوص،
یک پاس نصب شده توسط یک پلاگین می تواند عددی بیش از 200 داشته باشد حتی اگر کاملاً اجرا شود
در اوایل. نام زباله از نام فایل خروجی تولید می شود، اگر صریح باشد
مشخص شده است و اجرایی نیست، در غیر این صورت نام اصلی منبع است
فایل. این سوئیچ ها ممکن است اثرات متفاوتی داشته باشند -E برای پیش پردازش استفاده می شود.

اشکال‌زدایی dump را می‌توان با a فعال کرد -fdump-rtl سوئیچ یا برخی -d انتخاب نامه ها. اینجا
حروف ممکن برای استفاده در هستند عبور و نامه هاو معانی آنها:

-fdump-rtl-alignments
پس از محاسبه ترازهای شاخه، تخلیه

-fdump-rtl-asmcons
پس از رفع عبارات rtl که دارای محدودیت‌های ورودی/خروجی ناراضی هستند، تخلیه کنید.

-fdump-rtl-auto_inc_dec
پس از کشف auto-inc-dec تخلیه کنید. این پاس فقط روی معماری هایی اجرا می شود که
دارای دستورالعمل های auto inc یا auto dec.

-fdump-rtl-barriers
پس از تمیز کردن دستورالعمل های مانع تخلیه کنید.

-fdump-rtl-bbpart
پس از پارتیشن بندی بلوک های پایه سرد و گرم تخلیه کنید.

-fdump-rtl-bbro
پس از مرتب سازی مجدد بلوک، تخلیه کنید.

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 و -fdump-rtl-btl2 امکان تخلیه پس از هدف دو شاخه
بهینه سازی بار عبور می کند.

-fdump-rtl-bypass
دور زدن پس از پرش و کنترل بهینه سازی جریان.

-fdump-rtl-combine
پس از پاس ترکیبی دستورات RTL تخلیه کنید.

-fdump-rtl-compgotos
پس از کپی کردن gotos های محاسبه شده، تخلیه کنید.

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2و -fdump-rtl-ce3 امکان تخلیه پس از سه مورد
اگر تبدیل بگذرد

-fdump-rtl-cprop_hardreg
پس از انتشار نسخه هارد رجیستر تخلیه کنید.

-fdump-rtl-csa
پس از ترکیب تنظیمات پشته تخلیه کنید.

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 و -fdump-rtl-cse2 امکان دامپینگ پس از دو زیر مشترک
حذف بیان می گذرد.

-fdump-rtl-dce
پس از عبور از حذف کد مرده مستقل، تخلیه کنید.

-fdump-rtl-dbr
تخلیه پس از برنامه ریزی شعب با تاخیر.

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 و -fdump-rtl-dce2 امکان تخلیه پس از ذخیره دو مرده
حذف می گذرد

-fdump-rtl-eh
تخلیه پس از نهایی شدن کد مدیریت EH.

-fdump-rtl-eh_ranges
پس از تبدیل نواحی محدوده کنترل EH تخلیه شود.

-FDump-RTL-Expand
پس از تولید RTL تخلیه شود.

-fdump-rtl-fwprop1
-fdump-rtl-fwprop2
-fdump-rtl-fwprop1 و -fdump-rtl-fwprop2 فعال کردن تخلیه پس از دو به جلو
انتشار می گذرد

-fdump-rtl-gcse1
-fdump-rtl-gcse2
-fdump-rtl-gcse1 و -fdump-rtl-gcse2 امکان دامپینگ پس از مشترک جهانی
حذف زیرعبارات

-FDump-RTL-init-Regs
پس از مقداردهی اولیه رجیسترها تخلیه کنید.

-fdump-rtl-initvals
پس از محاسبه مجموعه های ارزش اولیه، تخلیه کنید.

-fdump-rtl-into_cfglayout
پس از تبدیل به حالت cfglayout تخلیه کنید.

-fdump-rtl-ira
پس از تخصیص رجیستر تکرار شده تخلیه کنید.

-fdump-rtl-jump
پس از بهینه سازی پرش دوم تخلیه کنید.

-fdump-rtl-loop2
-fdump-rtl-loop2 پس از گذراندن بهینه سازی حلقه rtl، دامپینگ را فعال می کند.

-fdump-rtl-mach
پس از انجام پاس سازماندهی مجدد وابسته به ماشین، در صورت تصویب، تخلیه کنید
وجود دارد

-fdump-rtl-mode_sw
پس از حذف سوئیچ های حالت اضافی، تخلیه کنید.

-fdump-rtl-rnreg
پس از شماره گذاری مجدد ثبت، تخلیه کنید.

-fdump-rtl-outof_cfglayout
پس از تبدیل از حالت cfglayout تخلیه کنید.

-fdump-rtl-peephole2
پس از عبور از روزنه تخلیه کنید.

-fdump-rtl-posreload
پس از بهینه سازی پس از بارگذاری مجدد، تخلیه کنید.

-fdump-rtl-pro_and_epilogue
پس از تولید پرولوگ ها و اپیلوگ های تابع، تخلیه کنید.

-fdump-rtl-regmove
پس از پاس حرکت ثبت نام تخلیه.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 و -fdump-rtl-sched2 تخلیه پس از بلوک اصلی را فعال کنید
پاس های برنامه ریزی

-fdump-rtl-see
تخلیه پس از حذف پسوند علامت.

-fdump-rtl-seqabstr
پس از کشف توالی رایج، تخلیه کنید.

-fdump-rtl-کوتاه کردن
پس از کوتاه کردن شاخه ها تخلیه کنید.

-fdump-rtl- خواهر و برادر
پس از بهینه سازی تماس خواهر و برادر، تخلیه کنید.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
-fdump-rtl-split1, -fdump-rtl-split2, -fdump-rtl-split3, -fdump-rtl-split4 و
-fdump-rtl-split5 پس از پنج دور تقسیم دستورالعمل، تخلیه را فعال کنید.

-fdump-rtl-sms
تخلیه پس از برنامه ریزی مدولو. این پاس فقط روی برخی معماری ها اجرا می شود.

-FDump-RTL-Stack
پس از تبدیل از "پرونده ثبت مسطح" GCC به x87 ثبت می شود
رجیسترهای پشته مانند این پاس فقط بر روی انواع x86 اجرا می شود.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 و -fdump-rtl-subreg2 امکان تخلیه پس از دو زیررگ
گسترش عبور می کند.

-fdump-rtl-unshare
پس از اینکه همه rtl به اشتراک گذاشته شد، تخلیه کنید.

-fdump-rtl-vartrack
پس از ردیابی متغیر تخلیه کنید.

-fdump-rtl-vregs
پس از تبدیل رجیسترهای مجازی به رجیسترهای سخت، تخلیه کنید.

-fdump-rtl-web
تخلیه پس از تقسیم محدوده زنده.

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
این dump ها تعریف شده اند اما همیشه فایل های خالی تولید می کنند.

-in
-fdump-rtl-all
تمام زباله های ذکر شده در بالا را تولید کنید.

-dA خروجی اسمبلر را با اطلاعات اشکال زدایی متفرقه حاشیه نویسی کنید.

-DD تمام تعاریف کلان را، در پایان پیش پردازش، علاوه بر عادی، خالی کنید
خروجی.

-dh هر زمان که خطایی رخ می دهد، یک core dump ایجاد کنید.

-درد خروجی اسمبلر را با یک نظر حاشیه نویسی کنید که نشان می دهد کدام الگو و
جایگزین استفاده شد. طول هر دستورالعمل نیز چاپ شده است.

-dP قبل از هر دستورالعمل، RTL را به عنوان یک نظر در خروجی اسمبلر قرار دهید. همچنین
روشن -درد حاشیه نویسی

-دی وی برای هر یک از فایل های دامپ مشخص شده دیگر (-fdump-rtl-عبور)، تخلیه A
نمایش نمودار جریان کنترل مناسب برای مشاهده با VCG به
file.pass.vcg.

-dx فقط به جای کامپایل کردن یک تابع، RTL را تولید کنید. معمولا با استفاده می شود
-FDump-RTL-Expand.

-fdump-noaddr
هنگام انجام اشکال زدایی dumps، خروجی آدرس را سرکوب کنید. این باعث می شود که آن را امکان پذیرتر کند
برای فراخوانی های کامپایلر با باینری های مختلف کامپایلر از diff برای اشکال زدایی dump استفاده کنید
و/یا متن / bss / داده / پشته / پشته / مکان های شروع dso مختلف.

-fdump-بدون شماره
هنگام انجام اشکال‌زدایی dumps، شماره دستورالعمل‌ها و خروجی آدرس را حذف کنید. این
استفاده از diff در اشکال زدایی dump ها برای فراخوانی کامپایلر را امکان پذیرتر می کند
گزینه های مختلف، به ویژه با و بدون -g.

-Fdump-Numbered-Links
هنگام انجام اشکال زدایی dump (نگاه کنید به -d گزینه بالا)، اعداد دستورالعمل را سرکوب کنید
پیوندهایی به دستورالعمل های قبلی و بعدی به صورت متوالی.

-fdump-translation-unit (فقط C++)
-fdump-translation-unit-گزینه های (فقط C++)
نمایشی از ساختار درختی کل واحد ترجمه را در یک فایل تخلیه کنید.
نام فایل با ضمیمه ساخته شده است .تو به نام فایل منبع، و فایل است
در همان دایرکتوری فایل خروجی ایجاد شده است. اگر -گزینه های فرم استفاده می شود،
گزینه های جزئیات تخلیه را همانطور که برای -fdump-tree گزینه.

-fdump-class-hierarchy (فقط C++)
-fdump-class-hierarchy-گزینه های (فقط C++)
نمایشی از سلسله مراتب و چیدمان جدول تابع مجازی هر کلاس را در a قرار دهید
فایل. نام فایل با ضمیمه ساخته شده است .کلاس به نام فایل منبع و فایل
در همان دایرکتوری فایل خروجی ایجاد می شود. اگر -گزینه های فرم استفاده می شود،
گزینه های جزئیات تخلیه را همانطور که برای -fdump-tree گزینه.

-fdump-ipa-گزینه
کنترل دامپینگ در مراحل مختلف درخت زبان تجزیه و تحلیل بین رویه ای به الف
فایل. نام فایل با اضافه کردن یک پسوند خاص سوئیچ به منبع ایجاد می شود
نام فایل، و فایل در همان دایرکتوری فایل خروجی ایجاد می شود. در
تخلیه زیر ممکن است:

تمام همه تخلیه های تحلیل بین رویه ای را فعال می کند.

cgraph
اطلاعات مربوط به بهینه سازی گراف فراخوانی، حذف توابع استفاده نشده و
تصمیمات درونی

خطی
تخلیه پس از تابع درونی.

-fdump-passes
فهرست پاس های بهینه سازی که با جریان روشن و خاموش می شوند را خالی کنید
گزینه های خط فرمان

-ممپام-آمپولیک-انتخاب
فعال کردن و کنترل تخلیه آمار پاس در یک فایل جداگانه. نام فایل است
با اضافه کردن پسوندی به پایان می رسد .آمار به نام فایل منبع، و
فایل در همان دایرکتوری فایل خروجی ایجاد می شود. اگر -انتخاب شکل است
استفاده شده، -آمار باعث می شود که شمارنده ها در کل واحد کامپایل جمع شوند
-جزئیات هر رویدادی را زمانی که پاس‌ها ایجاد می‌کنند، حذف می‌کند. پیش فرض با شماره
گزینه مجموع شمارنده ها برای هر تابع کامپایل شده است.

-fdump-tree-گزینه
-fdump-tree-گزینه-گزینه های
کنترل دامپینگ در مراحل مختلف پردازش درخت زبان میانی به
یک فایل. نام فایل با اضافه کردن یک پسوند خاص سوئیچ به آن ایجاد می شود
نام فایل منبع، و فایل در همان دایرکتوری فایل خروجی ایجاد می شود.
اگر -گزینه های فرم استفاده می شود، گزینه های لیستی از - گزینه های جدا شده که کنترل می کنند
جزئیات زباله همه گزینه ها برای همه زباله ها قابل اجرا نیستند. آنهایی که هستند
معنی دار نیست نادیده گرفته خواهد شد. گزینه های ذیل در دسترس هستند

نشانی
آدرس هر گره را چاپ کنید. معمولاً این با تغییر معنادار نیست
با توجه به محیط و فایل منبع کاربرد اصلی آن برای بستن الف است
فایل dump با محیط دیباگ.

اسم نام
اگر «DECL_ASSEMBLER_NAME» برای یک decl مشخص تنظیم شده است، از آن در dump استفاده کنید
به جای "DECL_NAME". کاربرد اصلی آن سهولت استفاده از کار به عقب است
نام های مخدوش شده در فایل اسمبلی

لاغر
صرفاً به این دلیل از ریختن اعضای یک محدوده یا بدنه یک عملکرد جلوگیری کنید
دامنه رسیده است. فقط زمانی چنین اقلامی را رها کنید که مستقیماً در دسترس باشند
یک مسیر دیگر هنگام ریختن درختان با چاپ زیبا، این گزینه مانع از ریختن درختان می شود
بدنه سازه های کنترل

خام چاپ یک نمایش خام از درخت. به‌طور پیش‌فرض، درخت‌ها به زیبایی چاپ می‌شوند
یک نمایش C مانند

جزئیات
Dump های دقیق تر را فعال کنید (در هر گزینه dump رعایت نمی شود).

آمار
انتشار آمارهای مختلف در مورد پاس را فعال کنید (که توسط هر روگرفتی رعایت نمی شود
گزینه).

بلوک
فعال کردن نمایش مرزهای بلوک اصلی (غیرفعال در تخلیه خام).

vops
نمایش عملوندهای مجازی برای هر عبارت را فعال کنید.

لیننو
نمایش اعداد خط برای عبارات را فعال کنید.

UID نمایش شناسه منحصر به فرد ("DECL_UID") برای هر متغیر را فعال کنید.

واژگان
نمایش درخت dump برای هر عبارت را فعال کنید.

eh نمایش شماره منطقه EH حاوی هر عبارت را فعال کنید.

scev
نمایش جزئیات تجزیه و تحلیل تکامل اسکالر را فعال کنید.

تمام همه گزینه ها را روشن کنید، به جز خام, لاغر, واژگان و لیننو.

تخلیه درختان زیر امکان پذیر است:

اصلی
قبل از هر بهینه سازی مبتنی بر درخت، تخلیه کنید file.original.

بهینه
پس از همه بهینه‌سازی‌های درختی، تخلیه به پرونده. بهینه سازی شده.

ساده
هر تابع را قبل و بعد از ارسال ساده سازی به یک فایل تخلیه کنید. پرونده
نام با الحاق ساخته شده است .gimple به نام فایل منبع

cfg نمودار جریان کنترل هر تابع را در یک فایل تخلیه کنید. نام فایل توسط
ضمیمه کردن .cfg به نام فایل منبع

vcg نمودار جریان کنترل هر تابع را در یک فایل با فرمت VCG تخلیه کنید. پرونده
نام با الحاق ساخته شده است vcg به نام فایل منبع توجه داشته باشید که اگر فایل
حاوی بیش از یک تابع است، فایل تولید شده نمی تواند مستقیماً توسط آن استفاده شود
VCG. شما باید نمودار هر تابع را به صورت جداگانه برش داده و بچسبانید
ابتدا فایل

ch پس از کپی کردن هدرهای حلقه، هر تابع را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.ch به نام فایل منبع

SSA اطلاعات مربوط به SSA را در یک فایل تخلیه کنید. نام فایل با ضمیمه ساخته شده است .ssa
به نام فایل منبع

نام مستعار
اطلاعات نامگذاری را برای هر تابع تخلیه کنید. نام فایل با ضمیمه ساخته شده است
نام مستعار به نام فایل منبع

حزب کمونیست چین هر تابع را پس از CCP تخلیه کنید. نام فایل با ضمیمه ساخته شده است ccp به
نام فایل منبع

storeccp
هر تابع را پس از STORE-CCP تخلیه کنید. نام فایل با ضمیمه ساخته شده است .storeccp
به نام فایل منبع

پیش پس از حذف جزئی افزونگی، درختان را تخلیه کنید. نام فایل توسط
ضمیمه کردن .پیش به نام فایل منبع

فرکانس پس از حذف کامل افزونگی درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.free به نام فایل منبع

کپی پروپ
پس از تکثیر کپی درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است .copyprop
به نام فایل منبع

store_copyprop
پس از انتشار کپی در فروشگاه، درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.store_copyprop به نام فایل منبع

dce پس از حذف کد مرده، هر تابع را تخلیه کنید. نام فایل توسط
ضمیمه کردن .DE به نام فایل منبع

گل و لای
پس از افزودن ابزار دقیق mudflap، هر عملکرد را تخلیه کنید. نام فایل توسط
ضمیمه کردن گل و لای به نام فایل منبع

آقا خانم پس از انجام جایگزینی اسکالر سنگدانه ها، هر تابع را تخلیه کنید. پرونده
نام با الحاق ساخته شده است .sra به نام فایل منبع

فرو رفتن
پس از انجام کد سینک کردن، هر تابع را تخلیه کنید. نام فایل توسط
ضمیمه کردن .فرو رفتن به نام فایل منبع

هدیه هر تابع را پس از اعمال بهینه‌سازی درختی Dominator تخلیه کنید. نام فایل است
با الحاق ساخته شده است .dom به نام فایل منبع

گفتن پس از اعمال حذف فروشگاه مرده، هر تابع را تخلیه کنید. نام فایل ساخته شده است
با الحاق .dse به نام فایل منبع

فیوپت
هر تابع را پس از بهینه سازی گره های PHI در کد مستقیم تخلیه کنید. پرونده
نام با الحاق ساخته شده است فیوپت به نام فایل منبع

forwprop
هر تابع را پس از انتشار رو به جلو متغیرهای یکبار مصرف تخلیه کنید. نام فایل
با الحاق ساخته می شود . forwrprop به نام فایل منبع

نام کپی
پس از اعمال بهینه سازی تغییر نام کپی، هر تابع را تخلیه کنید. نام فایل است
با الحاق ساخته شده است .نام کپی به نام فایل منبع

nrv هر تابع را پس از اعمال بهینه سازی مقدار بازگشتی نامگذاری شده در حالت عمومی، تخلیه کنید
درختان. نام فایل با ضمیمه ساخته شده است nrv به نام فایل منبع

بردار
پس از اعمال برداری از حلقه ها، هر تابع را تخلیه کنید. نام فایل ساخته شده است
با الحاق .vect به نام فایل منبع

اسلپ پس از اعمال برداری از بلوک های اساسی، هر تابع را تخلیه کنید. نام فایل است
با الحاق ساخته شده است .slp به نام فایل منبع

vp هر تابع را پس از انتشار محدوده ارزش (VRP) تخلیه کنید. نام فایل توسط
ضمیمه کردن vrp به نام فایل منبع

تمام با پرچم های ارائه شده در این گزینه، تمام درختان dump های موجود را فعال کنید.

-ftree-vectorizer-verbose=n
این گزینه میزان خروجی اشکال زدایی را که بردار چاپ می کند را کنترل می کند. این
اطلاعات با خطای استاندارد نوشته شده است، مگر اینکه -fdump-tree-all or -fdump-tree-vect
مشخص شده است، که در این صورت به فایل لیست dump معمولی خروجی می شود، .vect. برای
n=0 هیچ اطلاعات تشخیصی گزارش نشده است. اگر n=1 بردار هر حلقه را گزارش می کند
که بردار شد و تعداد کل حلقه هایی که بردار شدند. اگر n= 2
vectorizer همچنین حلقه‌های غیربردار را گزارش می‌کند که اولین مرحله تحلیل را پشت سر گذاشته‌اند
(vect_analyze_loop_form) - یعنی قابل شمارش، inner-most، single-bb، single-entry/exit
حلقه ها این همان سطح پرحرفی است که -fdump-tree-vect-stats استفاده می کند. بالاتر
سطوح پرحرفی به معنای اطلاعات بیشتری است که برای هر حلقه گزارش شده تخلیه می شود یا همان
مقدار اطلاعات گزارش شده برای حلقه های بیشتر: if n=3، مدل هزینه بردار
اطلاعات گزارش می شود. اگر n=4، اطلاعات مربوط به تراز به آن اضافه می شود
گزارش ها. اگر n=5، اطلاعات مربوط به مراجع داده (مثلاً وابستگی به حافظه، حافظه
Access-patterns) به گزارش ها اضافه می شود. اگر n=6، بردار گزارش می دهد که غیر
حلقه های درونی بردار شده که اولین مرحله تحلیل را پشت سر نگذاشته اند (یعنی ممکن است نتوانند
قابل شمارش باشد یا ممکن است جریان کنترلی پیچیده ای داشته باشد). اگر n=7، بردار گزارش می دهد
همچنین حلقه های تو در تو غیر بردار. اگر n=8، اطلاعات مربوط به SLP به آن اضافه می شود
گزارش ها. برای n=9، تمام اطلاعاتی که بردار در طول تجزیه و تحلیل خود تولید می کند
و تحول گزارش شده است. این همان سطح پرحرفی است که
-fdump-tree-vect-details استفاده می کند

-frandom-seed=رشته
این گزینه دانه‌ای را ارائه می‌کند که GCC از اعداد تصادفی استفاده می‌کند.
از آن برای تولید نام های نماد خاصی استفاده می شود که باید در هر کدام متفاوت باشند
فایل کامپایل شده همچنین برای قرار دادن مهرهای منحصر به فرد در فایل های داده پوشش و ... استفاده می شود
فایل های شی که آنها را تولید می کنند. می توانید استفاده کنید بذر تصادفی گزینه ای برای تولید
فایل‌های شی یکسان قابل تکرار

La رشته باید برای هر فایلی که کامپایل می کنید متفاوت باشد.

-fsched-verbose=n
در اهدافی که از زمان‌بندی دستورالعمل استفاده می‌کنند، این گزینه مقدار آن را کنترل می‌کند
خروجی اشکال زدایی که زمانبندی چاپ می کند. این اطلاعات با خطای استاندارد نوشته شده است،
مگر -fdump-rtl-sched1 or -fdump-rtl-sched2 مشخص شده است که در این صورت خروجی است
به فایل فهرست روگرفت معمولی، .sched1 or .sched2 به ترتیب. با این حال برای n
بیشتر از نه، خروجی همیشه با خطای استاندارد چاپ می شود.

برای n بزرگتر از صفر، -fsched-verbose همان اطلاعات را خروجی می دهد
-fdump-rtl-sched1 و -fdump-rtl-sched2. برای n بزرگتر از یک، خروجی پایه نیز دارد
احتمالات بلوک، اطلاعات لیست آماده دقیق و اطلاعات واحد/inn. برای n
بیشتر از دو، شامل RTL در نقطه سقط، کنترل جریان و اطلاعات مناطق است. و
برای n بیش از چهار، -fsched-verbose همچنین شامل اطلاعات وابستگی است.

-Save- Temps
-save-temps=cwd
فایل‌های میانی «موقت» معمولی را به‌طور دائم ذخیره کنید. آنها را در جریان قرار دهید
دایرکتوری و آنها را بر اساس فایل منبع نامگذاری کنید. بنابراین، تدوین foo.c با -c
-Save- Temps فایل ها را تولید می کند foo.i و foo.s، و همچنین foo.o. این یک ایجاد می کند
پیش پردازش شده foo.i فایل خروجی حتی اگر کامپایلر در حال حاضر به طور معمول از یک استفاده می کند
پیش پردازنده یکپارچه

هنگامی که در ترکیب با -x گزینه خط فرمان، -Save- Temps معقول است
به اندازه کافی برای جلوگیری از نوشتن یک فایل منبع ورودی با پسوند یکسان
فایل میانی فایل میانی مربوطه را می توان با تغییر نام به دست آورد
فایل منبع قبل از استفاده -Save- Temps.

اگر GCC را به صورت موازی فراخوانی کنید، چندین فایل منبع مختلف را کامپایل می‌کنید که a را به اشتراک می‌گذارند
نام پایه مشترک در زیر شاخه های مختلف یا همان فایل منبع کامپایل شده برای
چندین مقصد خروجی، این احتمال وجود دارد که کامپایلرهای موازی مختلف این کار را انجام دهند
با یکدیگر تداخل کنند و فایل های موقت را بازنویسی کنند. برای مثال:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

ممکن است منجر شود foo.i و foo.o به طور همزمان توسط هر دو کامپایلر نوشته می شود.

-save-temps=obj
فایل‌های میانی «موقت» معمولی را به‌طور دائم ذخیره کنید. اگر -o گزینه استفاده می شود،
فایل های موقت بر اساس فایل شی هستند. اگر -o گزینه استفاده نمی شود،
-save-temps=obj سوئیچ مانند -Save- Temps.

مثلا:

gcc -save-temps=obj -c foo.c
gcc -save-temps=obj -c bar.c -o dir/xbar.o
gcc -save-temps=obj foobar.c -o dir2/yfoobar

ایجاد خواهد کرد foo.i, foo.s, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.sو
dir2/yfoobar.o.

-زمان[=پرونده]
زمان CPU صرف شده توسط هر زیرفرآیند را در دنباله کامپایل گزارش کنید. برای سی
فایل های منبع، این کامپایلر مناسب و اسمبلر است (به علاوه پیوند دهنده در صورت وجود پیوند
انجام شده).

بدون مشخصات فایل خروجی، خروجی به صورت زیر است:

# cc1 0.12 0.01
# به عنوان 0.00 0.01

اولین عدد در هر خط "زمان کاربر" است، یعنی زمان صرف شده برای اجرای آن
خود برنامه عدد دوم "زمان سیستم" است، زمان صرف شده برای اجرای عملیات
روال های سیستم از طرف برنامه هر دو عدد در ثانیه هستند.

با مشخصات یک فایل خروجی، خروجی به فایل نامگذاری شده اضافه می شود.
و به نظر می رسد این است:

0.12 0.01 سی سی 1
0.00 0.01 به عنوان

«زمان کاربر» و «زمان سیستم» قبل از نام برنامه منتقل می‌شوند
گزینه های ارسال شده به برنامه نمایش داده می شود تا بعداً بتوان تشخیص داد که چه فایلی بوده است
در حال کامپایل شدن و با کدام گزینه ها

-fvar-ردیابی
پاس ردیابی متغیر را اجرا کنید. محل ذخیره متغیرها در هر موقعیت را محاسبه می کند
در کد سپس اطلاعات اشکال زدایی بهتری تولید می شود (اگر اطلاعات اشکال زدایی باشد
فرمت این اطلاعات را پشتیبانی می کند).

هنگام کامپایل با بهینه سازی به طور پیش فرض فعال است (-اواس, -O, -O2، ...) ،
اشکال زدایی اطلاعات (-g) و فرمت اطلاعات اشکال زدایی از آن پشتیبانی می کند.

-fvar-ردیابی-تکالیف
در اوایل کامپایل، تکالیف را به متغیرهای کاربر حاشیه نویسی کنید و سعی کنید آن را انجام دهید
حاشیه نویسی در سراسر مجموعه تا انتها، در تلاشی
برای بهبود اطلاعات اشکال زدایی در حین بهینه سازی. استفاده از -gdwarf-4 همراه توصیه می شود
با آن است.

حتی اگر var-tracking غیرفعال باشد، می‌توان آن را فعال کرد، در این صورت حاشیه‌نویسی خواهد بود
ایجاد و نگهداری شد، اما در پایان دور انداخته شد.

-fvar-tracking-assignments-toggle
تعویض -fvar-ردیابی-تکالیف، به همان روشی که -تغییر ضامن -g.

-print-file-name=کتابخانه
نام مطلق کامل فایل کتابخانه را چاپ کنید کتابخانه که زمانی استفاده می شود
پیوند --- و هیچ کار دیگری انجام ندهید. با این گزینه، GCC کامپایل یا پیوند نمی دهد
هر چیزی؛ فقط نام فایل را چاپ می کند.

-چاپ-چند دایرکتوری
نام دایرکتوری مربوط به multilib انتخاب شده توسط هر سوییچ دیگر را چاپ کنید
موجود در خط فرمان این دایرکتوری قرار است در وجود داشته باشد GCC_EXEC_PREFIX.

-چاپ-چند لیب
نگاشت را از نام دایرکتوری های multilib به سوئیچ های کامپایلری که آنها را فعال می کنند چاپ کنید.
نام دایرکتوری با سوئیچ ها جدا می شود ;، و هر سوئیچ با یک شروع می شود
@ به جای -، بدون فاصله بین چندین سوئیچ. این قرار است
سهولت پردازش پوسته

-چاپ-چاپ-دایرکتوری
مسیر کتابخانه های سیستم عامل را برای چندلیب انتخابی، نسبت به برخی، چاپ کنید لوب
دایرکتوری فرعی اگر کتابخانه های سیستم عامل در لوب زیر شاخه و بدون چند لیب
استفاده می شود، این معمولا فقط است .، اگر کتابخانه های سیستم عامل در آن وجود داشته باشد پسوند lib خواهر و برادر
دایرکتوری هایی که این چاپ می کند ../lib64, ../ lib or ../lib32، یا اگر کتابخانه های سیستم عامل هستند
حاضر در lib/subdir دایرکتوری های فرعی که چاپ می کند amd64, sparcv9 or ev6.

-چاپ-چندارچ
مسیر کتابخانه‌های سیستم‌عامل را برای چند آرکی انتخابی، نسبت به برخی، چاپ کنید لوب
زیرشاخه

-Print-prog-name =برنامه
پسندیدن -چاپ-فایل-نام، اما به دنبال برنامه ای مانند cpp.

-print-libgcc-file-name
مثل -print-file-name=libgcc.a.

این در هنگام استفاده مفید است -nostdlib or -nodefaultlibs اما شما می خواهید با آن پیوند برقرار کنید
libgcc.a. شما می توانید انجام دهید

gcc -nostdlib ... `gcc -print-libgcc-file-name`

-چاپ-جستجو-dirs
نام دایرکتوری نصب پیکربندی شده و لیستی از برنامه ها را چاپ کنید
دایرکتوری های کتابخانه gcc جستجو می کند --- و هیچ کار دیگری انجام نمی دهد.

این زمانی مفید است که gcc پیغام خطا را چاپ می کند نصب و راه اندازی مسئله، نمی توان exec
cpp0: نه چنین پرونده or فهرست راهنما. برای حل این مشکل شما باید قرار دهید cpp0 و
سایر اجزای کامپایلر که در آن gcc انتظار دارد آنها را پیدا کند، یا می توانید تنظیم کنید
متغیر محیطی GCC_EXEC_PREFIX به دایرکتوری که آنها را نصب کرده اید. نکن
دنباله رو فراموش کن /.

-print-sysroot
دایرکتوری sysroot هدف را که در حین کامپایل استفاده می شود چاپ کنید. این است
sysroot هدف مشخص شده یا در زمان پیکربندی یا با استفاده از --sysroot گزینه،
احتمالاً با یک پسوند اضافی که به گزینه های کامپایل بستگی دارد. اگر هدف نیست
sysroot مشخص شده است، گزینه چیزی چاپ نمی کند.

پسوند -print-sysroot-headers
پسوند اضافه شده به sysroot هدف را هنگام جستجوی هدر چاپ کنید یا یک علامت بدهید
خطا اگر کامپایلر با چنین پسوندی پیکربندی نشده باشد --- و کاری انجام ندهید
چیز دیگری

-ماشین تخلیه
چاپ ماشین هدف کامپایلر (به عنوان مثال، i686-pc-linux-gnu)---و انجام نده
چیز دیگری مد نظر دارید.

- تخلیه
نسخه کامپایلر را چاپ کنید (به عنوان مثال، 3.0)--- و هیچ کار دیگری انجام ندهید.

زباله ها
مشخصات داخلی کامپایلر را چاپ کنید --- و هیچ کار دیگری انجام ندهید. (این زمانی استفاده می شود که
خود GCC در حال ساخت است.)

-feliminate-unused-debug-types
به طور معمول، هنگام تولید خروجی DWARF2، GCC اطلاعات اشکال زدایی را برای همه منتشر می کند
انواع اعلام شده در یک واحد کامپایل، صرف نظر از اینکه واقعاً هستند یا نه
در آن واحد تالیف استفاده می شود. گاهی اوقات این مفید است، مانند اگر، در دیباگر،
شما می خواهید مقداری را به نوعی ارسال کنید که واقعاً در برنامه شما استفاده نمی شود (اما هست
اعلام کرد). با این حال، بیشتر اوقات، این منجر به مقدار قابل توجهی از فضای تلف می شود.
با این گزینه، GCC از تولید خروجی نماد اشکال زدایی برای انواعی که هستند جلوگیری می کند
هیچ کجا در فایل منبع در حال کامپایل استفاده نشده است.

گزینه که کنترل بهینه سازی
این گزینه ها انواع مختلفی از بهینه سازی ها را کنترل می کنند.

بدون هیچ گزینه بهینه سازی، هدف کامپایلر کاهش هزینه کامپایل است
و اشکال زدایی نتایج مورد انتظار را ایجاد کند. بیانیه ها مستقل هستند: اگر شما
برنامه را با نقطه انفصال بین دستورات متوقف کنید، سپس می توانید یک مقدار جدید به آن اختصاص دهید
هر متغیر یا شمارنده برنامه را به هر دستور دیگری در تابع تغییر دهید و دریافت کنید
دقیقاً نتایجی که از کد منبع انتظار دارید.

روشن کردن پرچم‌های بهینه‌سازی باعث می‌شود کامپایلر تلاش کند عملکرد و/یا را بهبود بخشد
اندازه کد به هزینه زمان کامپایل و احتمالاً امکان اشکال زدایی
برنامه است.

کامپایلر بر اساس دانشی که از برنامه دارد بهینه سازی را انجام می دهد.
کامپایل چند فایل به طور همزمان در یک حالت فایل خروجی به کامپایلر امکان استفاده از آن را می دهد
اطلاعاتی که از تمام فایل ها هنگام کامپایل کردن هر یک از آنها به دست می آید.

همه بهینه سازی ها مستقیماً توسط یک پرچم کنترل نمی شوند. فقط بهینه سازی هایی که الف دارند
پرچم در این بخش ذکر شده است.

بیشتر بهینه‌سازی‌ها فقط در صورتی فعال می‌شوند که -O سطح در خط فرمان تنظیم شده است. در غیر این صورت
آنها غیرفعال هستند، حتی اگر پرچم های بهینه سازی فردی مشخص شده باشند.

بسته به هدف و نحوه پیکربندی GCC، مجموعه کمی متفاوت است
بهینه سازی ممکن است در هر یک فعال شود -O سطح از موارد ذکر شده در اینجا. شما می توانید GCC را فراخوانی کنید
با -Q --help=بهینه سازها برای پیدا کردن مجموعه دقیق بهینه‌سازی‌هایی که در آن فعال شده‌اند
هر سطح

-O
-O1 بهینه سازی کنید. بهینه سازی کامپایل تا حدودی زمان بیشتری می برد و حافظه بسیار بیشتری برای آن می طلبد
یک تابع بزرگ

با -O، کامپایلر سعی می کند اندازه کد و زمان اجرا را کاهش دهد، بدون اینکه انجام دهد
هر بهینه سازی که زمان زیادی را برای کامپایل می گیرد.

-O پرچم های بهینه سازی زیر را روشن می کند:

-fauto-inc-dec -FCOMPARE-elim -fcprop-رجیستر می کند -fdce -fdefer-pop -تاخیر-شاخه
-fdse fguess-branch-probability -fif-conversion2 تبدیل -fif -fipa-pure-const
-fipa-profile -fipa-reference ثابت-fmerge -fsplit-wide-types -ftree-bit-ccp
-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-forwprop -free-free -ftree-phiprop -ftree-sra
-ftree-pta -ftree-ter -funit در یک زمان

-O نیز روشن می شود -fomit-frame-pointer در ماشین هایی که انجام این کار تداخلی ندارد
با اشکال زدایی

-O2 حتی بیشتر بهینه سازی کنید. GCC تقریباً تمام بهینه سازی های پشتیبانی شده را انجام می دهد که این کار را نمی کنند
شامل یک معاوضه سرعت فضایی است. در مقایسه با -O، این گزینه هر دو را افزایش می دهد
زمان کامپایل و عملکرد کد تولید شده

-O2 تمام پرچم های بهینه سازی مشخص شده توسط را روشن می کند -O. موارد زیر را نیز روشن می کند
پرچم های بهینه سازی: -fthread-jumps -عملکردهای falign -فالین-پرش -فالین-حلقه ها
-falign-labels -fcaller-save fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -مجازی کردن -بهینه سازی ها -fgcse
-fgcse-lm -finline-small-functions -findirect-inlining -fipa-sra
-بهینه سازی تماس های خواهر و برادر -fpartial-inlining -fpeepole2 -حرکت فرگ -بلاک های سفارشی
توابع -freorder -frerun-cse-after-loop -fsched-interblock -fsched-spec
-fschedule-insns -fschedule-insns2 fstrict-aliasing -fstrict-سرریز
تبدیل -ftree-switch -ftree-tail-ادغام -ftree-pre -ftree-vrp

لطفا به هشدار زیر توجه کنید -fgcse در مورد استناد -O2 در برنامه هایی که از محاسبات استفاده می کنند
gotos

توجه: در اوبونتو 8.10 و نسخه های بعدی، -D_FORTIFY_SOURCE=2 به طور پیش فرض تنظیم شده است، و است
زمانی فعال می شود -O روی 2 یا بالاتر تنظیم شده است. این زمان کامپایل اضافی و
بررسی زمان اجرا برای چندین تابع libc. برای غیرفعال کردن، یکی را مشخص کنید
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 بهینه سازی بیشتر -O3 تمام بهینه سازی های مشخص شده توسط را روشن می کند -O2 و همچنین روشن می شود
la توابع -finline, -funswitch-loops, - پیش بینی کننده - مشترک, -fgcse-after-reload,
-ftree-vectorize, -ftree-partial-pre و -fipa-cp-clone گزینه.

-O0 زمان کامپایل را کاهش دهید و اشکال زدایی نتایج مورد انتظار را ایجاد کند. این است
به طور پیش فرض

-اواس بهینه سازی برای اندازه -اواس همه را قادر می سازد -O2 بهینه سازی هایی که معمولاً افزایش نمی یابند
اندازه کد همچنین بهینه سازی های بیشتری را انجام می دهد که برای کاهش اندازه کد طراحی شده اند.

-اواس پرچم های بهینه سازی زیر را غیرفعال می کند: -عملکردهای falign -فالین-پرش
-فالین-حلقه ها -falign-labels -بلاک های سفارشی -freorder-blocks-and-partition
-fprefetch-loop-arrays نسخه-ftree-vect-loop

سریع
رعایت استانداردهای سختگیرانه را نادیده بگیرید. سریع همه را قادر می سازد -O3 بهینه سازی ها آن را نیز
بهینه سازی هایی را فعال می کند که برای همه برنامه های سازگار استاندارد معتبر نیستند. آی تی
روشن سریع-ریاضی و مخصوص فرترن -FNO-PRECTECT-PARENS و آرایه های fstack.

اگر از چندگانه استفاده می کنید -O گزینه ها، با یا بدون اعداد سطح، آخرین گزینه چنین است
اونی که موثره

گزینه های فرم -fپرچم پرچم های مستقل از ماشین را مشخص کنید. اکثر پرچم ها هر دو را دارند
اشکال مثبت و منفی؛ شکل منفی از -فو خواهد بود -fno-foo. در جدول
در زیر، تنها یکی از فرم ها فهرست شده است --- فرمی که معمولاً از آن استفاده می کنید. می توانید رقم بزنید
شکل دیگر را با حذف کردن یکی کنید نه- یا اضافه کردن آن

گزینه های زیر بهینه سازی های خاص را کنترل می کنند. آنها یا توسط فعال می شوند -O
گزینه ها یا مربوط به مواردی هستند که هستند. شما می توانید از پرچم های زیر در موارد نادر استفاده کنید
مواردی که "تنظیم دقیق" بهینه سازی هایی که باید انجام شوند مورد نظر است.

-fno-default-inline
توابع اعضا را به طور پیش فرض به صورت درون خطی قرار ندهید، فقط به این دلیل که در داخل تعریف شده اند
محدوده کلاس (فقط C++). در غیر این صورت، زمانی که شما مشخص کنید -O، توابع عضو تعریف شده است
داخل کلاس به طور پیش فرض به صورت درون خطی کامپایل می شوند. یعنی نیازی به اضافه کردن ندارید خطی
جلوی نام تابع عضو.

-fno-defer-pop
همیشه به محض بازگشت آن تابع، آرگومان ها را به هر فراخوانی تابع اضافه کنید. برای
معمولاً کامپایلر اجازه می دهد تا ماشین هایی که باید آرگومان هایی را پس از فراخوانی تابع ایجاد کنند
آرگومان‌ها در پشته برای چندین فراخوانی تابع جمع می‌شوند و همه آنها را به نمایش می‌گذارند
یک بار.

در سطوح غیر فعال است -O, -O2, -O3, -اواس.

- فوروارد-تبلیغ کردن
یک پاس انتشار رو به جلو در RTL انجام دهید. پاس سعی می کند دو دستورالعمل را ترکیب کند
و بررسی می کند که آیا می توان نتیجه را ساده کرد. اگر حلقه unrolling فعال باشد، دو پاس می شود
انجام می شود و دومی پس از باز کردن حلقه برنامه ریزی می شود.

این گزینه به طور پیش فرض در سطوح بهینه سازی فعال است -O, -O2, -O3, -اواس.

-ffp-contract=سبک
-ffp-contract = خاموش انقباض بیان ممیز شناور را غیرفعال می کند. -ffp-contract=سریع
انقباض بیان ممیز شناور مانند تشکیل ضرب-جمع ذوب شده را ممکن می کند
اگر هدف از آنها پشتیبانی بومی داشته باشد. -ffp-contract=on را قادر می سازد
اگر استاندارد زبان مجاز باشد، انقباض عبارت ممیز شناور. این هست
در حال حاضر اجرا نشده و برابر با -ffp-contract = خاموش.

پیش فرض این است -ffp-contract=سریع.

-fomit-frame-pointer
نشانگر فریم را در یک رجیستر برای توابعی که نیازی به آن ندارند، نگه ندارید. این
از دستورالعمل‌های ذخیره، تنظیم و بازیابی نشانگرهای فریم اجتناب می‌کند. آن را نیز می سازد
ثبت اضافی در بسیاری از توابع موجود است. It همچنین می سازد اشکال زدایی غیر ممکن on
برخی از ماشین آلات.

در برخی از ماشین ها، مانند VAX، این پرچم هیچ تاثیری ندارد، زیرا استاندارد است
دنباله فراخوانی به طور خودکار نشانگر فریم را کنترل می کند و هیچ چیزی توسط آن ذخیره نمی شود
تظاهر به اینکه وجود ندارد ماکرو توصیف ماشین "FRAME_POINTER_REQUIRED"
کنترل می کند که آیا یک ماشین هدف از این پرچم پشتیبانی می کند یا خیر.

با شروع GCC نسخه 4.6، تنظیمات پیش‌فرض (در صورت بهینه‌سازی برای اندازه) برای
اهداف 32 بیتی لینوکس x86 و 32 بیتی Darwin x86 به تغییر یافته است
-fomit-frame-pointer. پیش فرض را می توان به حالت پیش فرض برگرداند -fno-omit-frame-pointer by
پیکربندی GCC با --enable-frame-pointer گزینه پیکربندی

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-بهینه سازی تماس های خواهر و برادر
بهینه سازی تماس های بازگشتی خواهر و برادر.

در سطوح فعال شده است -O2, -O3, -اواس.

-fno-inline
هیچ توابعی را به صورت درون خطی به غیر از آنهایی که با "always_inline" مشخص شده اند گسترش ندهید.
صفت. زمانی که بهینه سازی نمی شود این حالت پیش فرض است.

توابع منفرد را می توان با علامت گذاری آنها با "noinline" از درون خط کردن معاف کرد.
ویژگی.

-finline-small-functions
هنگامی که بدن آنها کوچکتر از حد انتظار است، عملکردها را در تماس گیرندگان خود ادغام کنید
کد فراخوانی تابع (بنابراین اندازه کلی برنامه کوچکتر می شود). کامپایلر
به صورت اکتشافی تصمیم می گیرد که کدام توابع به اندازه کافی ساده هستند که ارزش ادغام در آنها را داشته باشند
بدین ترتیب. این خط‌بندی برای همه توابع اعمال می‌شود، حتی آنهایی که به صورت درون خطی اعلام نشده‌اند.

در سطح فعال شد -O2.

-findirect-inlining
همچنین تماس های غیرمستقیم درون خطی که به لطف آنها در زمان کامپایل شناخته می شوند
خط کشی قبلی این گزینه تنها زمانی تأثیری دارد که خود inlining روشن باشد
توسط توابع -finline or -finline-small-functions گزینه.

در سطح فعال شد -O2.

توابع -finline
همه توابع را برای inlining در نظر بگیرید، حتی اگر به صورت inline تعریف نشده باشند. در
کامپایلر به صورت اکتشافی تصمیم می گیرد که کدام توابع ارزش ادغام را در این راه دارند.

اگر همه فراخوانی های یک تابع معین یکپارچه شوند و تابع اعلام شود
"استاتیک"، پس تابع معمولاً به تنهایی به عنوان کد اسمبلر خروجی نمی شود.

در سطح فعال شد -O3.

توابع-finline-یک بار فراخوانی می شود
تمام توابع "استاتیک" را یک بار برای ورود به تماس گیرنده خود فراخوانی می کنند حتی اگر
آنها "در خط" علامت گذاری نشده اند. اگر فراخوانی به یک تابع داده شده یکپارچه شود،
تابع به خودی خود به عنوان کد اسمبلر خروجی نیست.

در سطوح فعال شده است -O1, -O2, -O3 و -اواس.

ترسناک درون ریز
توابع درون خطی مشخص شده با "همیشه_در خط" و توابعی که بدن آنها کوچکتر از
فراخوانی تابع سربار قبل از انجام -fprofile-generate ابزار دقیق و
پاس داخلی واقعی انجام این کار باعث می شود پروفایل به طور قابل توجهی ارزان تر و معمولا
در برنامه‌هایی که زنجیره‌های بزرگی از توابع بسته‌بندی تودرتو دارند، سریع‌تر می‌شوند.

به طور پیش فرض فعال شده است.

-fipa-sra
انجام جایگزینی اسکالر بین رویه ای سنگدانه ها، حذف پارامترهای استفاده نشده
و جایگزینی پارامترهای ارسال شده توسط مرجع با پارامترهای ارسال شده توسط مقدار.

در سطوح فعال شده است -O2, -O3 و -اواس.

-Finline-limit =n
به‌طور پیش‌فرض، GCC اندازه توابع قابل تنظیم را محدود می‌کند. این پرچم اجازه می دهد
کنترل درشت این حد. n اندازه توابعی است که می توان درون آن خط بندی کرد
تعداد شبه دستورات

Inlining در واقع توسط تعدادی پارامتر کنترل می شود که ممکن است مشخص شود
به صورت جداگانه با استفاده از --پارام نام=ارزش. -Finline-limit =n گزینه برخی از
این پارامترها به شرح زیر است:

max-inline-insns-single
تنظیم شده است n/ 2.

Max-Inline-insns-auto
تنظیم شده است n/ 2.

برای مستنداتی از پارامترهای فردی که Inlining و را کنترل می کنند به زیر مراجعه کنید
برای پیش فرض های این پارامترها.

توجه داشته باشید: ممکن است هیچ ارزشی برای -finline-limit که منجر به رفتار پیش فرض می شود.

توجه داشته باشید: شبه دستورالعمل، در این زمینه خاص، یک انتزاع را نشان می دهد
اندازه گیری اندازه تابع به هیچ وجه نشان دهنده تعداد مونتاژ نیست
دستورالعمل ها و به این ترتیب معنای دقیق آن ممکن است از یک نسخه به یک تغییر کند
دیگر.

-fno-keep-inline-dllexport
این یک نسخه ریزدانه تر است -fkeep-inline-functions، که فقط برای
توابعی که با استفاده از ویژگی "dllexport" یا declspec اعلان می شوند

-fkeep-inline-functions
در C، توابع "استاتیک" را که "inline" در فایل شیء اعلان می شوند، منتشر کنید، حتی اگر
این تابع در تمام تماس گیرنده های آن گنجانده شده است. این سوئیچ تاثیری ندارد
توابع با استفاده از پسوند "خارجی درون خطی" در گنو C90. در C++، هر و همه را منتشر کنید
توابع درون خطی در فایل شی

-fkeep-static-consts
هنگامی که بهینه‌سازی روشن نیست، متغیرهایی را منتشر می‌کند که "Static Const" را اعلام می‌کنند، حتی اگر روشن باشد
به متغیرها ارجاع داده نمی شود

GCC این گزینه را به طور پیش فرض فعال می کند. اگر می خواهید کامپایلر را مجبور کنید بررسی کند که آیا
متغیر ارجاع داده شد، صرف نظر از اینکه بهینه سازی روشن است یا خیر، استفاده کنید
la -FNo-Keep-Static-Consts گزینه.

ثابت-fmerge
تلاش برای ادغام ثابت های یکسان (ثابت رشته ها و ثابت های ممیز شناور)
در سراسر واحدهای تلفیقی

این گزینه پیش فرض برای کامپایل بهینه سازی شده در صورت اسمبلر و لینکر است
آن را حمایت کن. استفاده کنید -fno-merge-constants برای جلوگیری از این رفتار

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-fmerge-all-constants
تلاش برای ادغام ثابت های یکسان و متغیرهای یکسان.

این گزینه دلالت دارد ثابت-fmerge. بعلاوه ثابت-fmerge این
به عنوان مثال، آرایه های اولیه ثابت یا متغیرهای ثابت اولیه با
انواع انتگرال یا ممیز شناور زبان هایی مانند C یا C++ به هر متغیر نیاز دارند،
از جمله چندین نمونه از یک متغیر در تماس های بازگشتی، برای داشتن متمایز
مکان‌ها، بنابراین استفاده از این گزینه منجر به رفتار ناسازگار می‌شود.

-fmodulo-sched
برنامه ریزی مدول نوسان را بلافاصله قبل از اولین پاس برنامه ریزی انجام دهید. این
pass به درونی‌ترین حلقه‌ها نگاه می‌کند و دستورالعمل‌های آن‌ها را با هم‌پوشانی متفاوت مرتب می‌کند
تکرار

-fmodulo-sched-allow-regmoves
برنامه ریزی مدول بر اساس پیامک تهاجمی تر را با حرکات ثبت نام مجاز انجام دهید. توسط
با تنظیم این پرچم، لبه‌های ضد وابستگی خاصی حذف می‌شوند که باعث می‌شود
تولید رگ-حرکات بر اساس تجزیه و تحلیل محدوده عمر. این گزینه است
موثر فقط با -fmodulo-sched فعال شده است

-fno-branch-count-reg
از دستورالعمل‌های «کاهش و انشعاب» در یک رجیستر شمارش استفاده نکنید، بلکه به جای آن
دنباله ای از دستورالعمل ها را ایجاد کنید که یک ثبات را کاهش می دهد، آن را با آن مقایسه کنید
صفر، سپس بر اساس نتیجه منشعب می شود. این گزینه فقط در حالت معنی دار است
معماری هایی که از چنین دستورالعمل هایی پشتیبانی می کنند، که شامل x86، PowerPC، IA-64 و
S / 390.

پیش فرض این است -fbranch-count-reg.

-fno-function-cse
آدرس های تابع را در رجیسترها قرار ندهید. هر دستورالعملی را که a را فراخوانی می کند، بسازید
تابع ثابت آدرس تابع را به صراحت در بر می گیرد.

این گزینه منجر به کد کمتر کارآمد می شود، اما برخی هک های عجیب و غریب که این کد را تغییر می دهند
خروجی اسمبلر ممکن است با بهینه سازی های انجام شده در زمانی که این گزینه وجود دارد اشتباه گرفته شود
استفاده نشده.

پیش فرض این است -function-cse

-fno-zero-initialized-in-bss
اگر هدف از یک بخش BSS پشتیبانی می کند، GCC به طور پیش فرض متغیرهایی را قرار می دهد که هستند
به صفر در BSS مقداردهی شد. این می تواند فضا را در کد حاصل ذخیره کند.

این گزینه این رفتار را خاموش می کند زیرا برخی از برنامه ها به طور صریح به متغیرها متکی هستند
رفتن به بخش داده به عنوان مثال، به طوری که فایل اجرایی حاصل می تواند آن را پیدا کند
شروع آن بخش و/یا فرضیاتی بر اساس آن ایجاد کنید.

پیش فرض این است -fzero-initialized-in-bss.

-fmudflap -fmudflapth -fmudflapir
برای فرانت‌اندهایی که از آن پشتیبانی می‌کنند (C و C++)، نشانگر/آرایه همه مخاطره‌آمیز را ابزار کنید
عملیات عدم ارجاع، برخی توابع استاندارد رشته/هیپ کتابخانه، و برخی دیگر
سازه های مرتبط با آزمون های دامنه/روایی. ماژول ها باید به گونه ای باشند
مصون از سرریز بافر، استفاده از پشته نامعتبر، و برخی دیگر از کلاس‌های C/C++
خطاهای برنامه نویسی ابزار دقیق به یک کتابخانه زمان اجرا جداگانه متکی است
(libmudflap) که به یک برنامه پیوند داده می شود اگر -fmudflap در زمان لینک داده می شود.
رفتار زمان اجرا برنامه ابزاردار توسط کنترل می شود MUDFLAP_OPTIONS
متغیر محیطی. برای گزینه های آن به "env MUDFLAP_OPTIONS=-help a.out" مراجعه کنید.

استفاده کنید -fmudflapth بجای -fmudflap برای کامپایل و پیوند دادن اگر برنامه شما چندگانه است
نخ دار استفاده کنید -fmudflapir، علاوه بر -fmudflap or -fmudflapth، اگر
ابزار دقیق باید خواندن نشانگر را نادیده بگیرد. این ابزار کمتری تولید می کند (و
بنابراین اجرای سریعتر) و همچنان مقداری محافظت در برابر حافظه کامل فراهم می کند
خراب کردن نوشته ها، اما اجازه می دهد تا داده های خوانده شده اشتباه در یک برنامه منتشر شوند.

-fthread-jumps
بهینه‌سازی‌هایی را در جایی که بررسی می‌کنیم بررسی می‌کنیم که آیا پرش به مکانی منشعب می‌شود یا خیر
مقایسه دیگری که توسط اولی در نظر گرفته شده است یافت می شود. اگر چنین است، اولین شاخه است
بلافاصله به مقصد شعبه دوم یا یک نقطه هدایت می شود
به دنبال آن، بسته به اینکه آیا این شرط درست یا نادرست شناخته شده است.

در سطوح فعال شده است -O2, -O3, -اواس.

-fsplit-wide-types
هنگام استفاده از نوعی که چندین رجیستر را اشغال می کند، مانند "long long" در یک 32 بیت
سیستم، رجیسترها را از هم جدا کرده و آنها را به طور مستقل تخصیص می دهد. این به طور معمول
کد بهتری را برای آن انواع تولید می کند، اما ممکن است اشکال زدایی را دشوارتر کند.

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-fcse-follow-jumps
در حذف عبارات فرعی رایج (CSE)، دستورالعمل های پرش را اسکن کنید
هدف پرش با هیچ مسیر دیگری قابل دسترسی نیست. به عنوان مثال، زمانی که CSE با
یک عبارت "اگر" با بند "دیگر"، CSE در هنگام شرط از پرش پیروی می کند
تست شده غلط است

در سطوح فعال شده است -O2, -O3, -اواس.

-fcse-skip-blocks
این شبیه به -fcse-follow-jumps، اما باعث می شود که CSE جهش هایی را دنبال کند
به صورت مشروط از بلوک ها عبور کنید. هنگامی که CSE با یک عبارت ساده "اگر" با شماره روبرو می شود
بند دیگری، -fcse-skip-blocks باعث می شود که CSE پرش را در اطراف بدنه دنبال کند
"اگر".

در سطوح فعال شده است -O2, -O3, -اواس.

-frerun-cse-after-loop
پس از انجام بهینه‌سازی حلقه، حذف زیرعبارت رایج را دوباره اجرا کنید.

در سطوح فعال شده است -O2, -O3, -اواس.

-fgcse
یک پاس حذف عمومی مشترک فرعی انجام دهید. این پاس نیز اجرا می کند
ثابت جهانی و انتشار کپی

توجه داشته باشید: هنگام کامپایل یک برنامه با استفاده از gotos محاسبه شده، یک پسوند GCC، ممکن است دریافت کنید
در صورت غیرفعال کردن حذف عمومی زیر بیان عمومی، عملکرد زمان اجرا بهتر است
با افزودن عبور کنید -fno-gcse به خط فرمان

در سطوح فعال شده است -O2, -O3, -اواس.

-fgcse-lm
چه زمانی -fgcse-lm فعال است، حذف زیرعبارت مشترک جهانی تلاش خواهد کرد
بارهایی را که فقط توسط فروشگاه‌ها کشته می‌شوند به درون خود منتقل کنید. این اجازه می دهد تا یک حلقه
حاوی یک توالی بار/ذخیره برای تغییر به یک بار خارج از حلقه، و a
کپی/ذخیره در حلقه

زمانی که gcse فعال باشد به طور پیش فرض فعال می شود.

-fgcse-sm
چه زمانی -fgcse-sm فعال است، یک پاس حرکت فروشگاه پس از مشترک جهانی اجرا می شود
حذف زیرعبارات این پاس سعی می کند فروشگاه ها را از حلقه ها خارج کند. چه زمانی
به همراه استفاده می شود -fgcse-lm، حلقه های حاوی یک توالی بار/ذخیره می توانند باشند
به یک بار قبل از حلقه و یک ذخیره بعد از حلقه تغییر کرد.

در هیچ سطح بهینه سازی فعال نیست.

-fgcse-las
چه زمانی -fgcse-las فعال است، پاس حذف عمومی زیرعبارت عمومی
بارهای اضافی را که پس از ذخیره در یک مکان حافظه (هر دو
تعدیل جزئی و کامل).

در هیچ سطح بهینه سازی فعال نیست.

-fgcse-after-reload
چه زمانی -fgcse-after-reload فعال است، یک پاس حذف بار اضافی انجام می شود
پس از بارگذاری مجدد هدف از این پاس، پاکسازی نشت های اضافی است.

-بهینه‌سازی‌های حلقه امن
اگر داده شود، بهینه ساز حلقه فرض می کند که شاخص های حلقه سرریز نمی شوند و این
حلقه‌های دارای شرایط خروج غیرمعمول بی‌نهایت نیستند. این امکان دامنه وسیع تری را فراهم می کند
بهینه سازی حلقه حتی اگر خود بهینه ساز حلقه نتواند این موارد را ثابت کند
مفروضات معتبر هستند استفاده كردن -بهینه سازی های حلقه Wunsafe، کامپایلر به شما هشدار می دهد
اگر این نوع حلقه را پیدا کند.

fcrossjumping
تبدیل متقاطع پرش را انجام دهید. این تبدیل کد معادل و
ذخیره اندازه کد کد به دست آمده ممکن است عملکرد بهتری نسبت به بدون متقاطع داشته باشد یا نداشته باشد.
پریدن

در سطوح فعال شده است -O2, -O3, -اواس.

-fauto-inc-dec
افزایش یا کاهش آدرس ها را با دسترسی های حافظه ترکیب کنید. این پاس است
همیشه از معماری هایی که دستورالعمل هایی برای پشتیبانی از آن ندارند صرف نظر می شود.
فعال به طور پیش فرض در -O و بالاتر در معماری هایی که از این پشتیبانی می کنند.

-fdce
حذف کد مرده (DCE) را در RTL انجام دهید. فعال به طور پیش فرض در -O و بالاتر

-fdse
حذف فروشگاه مرده (DSE) را در RTL انجام دهید. فعال به طور پیش فرض در -O و بالاتر

تبدیل -fif
سعی کنید پرش های شرطی را به معادل های بدون شاخه تبدیل کنید. این شامل استفاده است
از حرکات شرطی، حداقل، حداکثر، دستورات ست پرچم و شکم، و برخی از ترفندهای قابل انجام
بر اساس محاسبات استاندارد استفاده از اجرای مشروط در تراشه هایی که در آن قرار دارد
موجود توسط "if-conversion2" کنترل می شود.

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-fif-conversion2
از اجرای شرطی (در صورت وجود) برای تبدیل پرش های شرطی به
معادل های بدون شاخه

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-fdelete-null-pointer-checks
فرض کنید که برنامه ها نمی توانند به طور ایمن اشاره گرهای تهی را حذف کنند و هیچ کد یا داده ای وجود ندارد
عنصر در آنجا ساکن است. این امکان بهینه سازی ساده تاشوی ثابت را در همه فراهم می کند
سطوح بهینه سازی علاوه بر این، سایر پاس های بهینه سازی در GCC از این پرچم استفاده می کنند
کنترل تجزیه و تحلیل جریان داده های جهانی که بررسی های بی فایده برای نشانگرهای پوچ را حذف می کند.
اینها فرض می کنند که اگر یک اشاره گر بعد از اینکه قبلاً ارجاع داده نشده است بررسی شود، آن را
نمی تواند پوچ باشد

البته توجه داشته باشید که در برخی محیط ها این فرض درست نیست. استفاده کنید
-fno-delete-null-pointer-checks برای غیرفعال کردن این بهینه سازی برای برنامه هایی که وابسته هستند
روی آن رفتار

برخی از اهداف، به خصوص موارد تعبیه شده، این گزینه را در تمام سطوح غیرفعال می کنند. در غیر این صورت
در تمام سطوح فعال است: -O0, -O1, -O2, -O3, -اواس. پاس هایی که از اطلاعات استفاده می کنند
به طور مستقل در سطوح مختلف بهینه سازی فعال می شوند.

-مجازی کردن
سعی کنید تماس ها را به توابع مجازی به تماس های مستقیم تبدیل کنید. این هر دو انجام می شود
در یک رویه و به صورت بین رویه ای به عنوان بخشی از خط کشی غیرمستقیم
("-findirect-inlining") و انتشار ثابت بین رویه ای (-fipa-cp). فعال شد
در سطوح -O2, -O3, -اواس.

-بهینه سازی ها
تعدادی بهینه سازی جزئی را انجام دهید که نسبتاً گران هستند.

در سطوح فعال شده است -O2, -O3, -اواس.

-رایگان
سعی کنید دستورالعمل های افزونه اضافی را حذف کنید. این به ویژه برای
معماری x86-64 که به طور ضمنی در ثبات های 64 بیتی پس از
نوشتن به نیمه 32 بیتی پایین آنها.

برای x86 در سطوح فعال شده است -O2, -O3.

-foptimize-Register-Move
-حرکت فرگ
سعی کنید اعداد ثبت را در دستورالعمل های حرکت و به عنوان عملوندهای دیگر تخصیص دهید
دستورالعمل های ساده به منظور به حداکثر رساندن مقدار رجیستر. این هست
به ویژه در ماشین‌هایی با دستورالعمل‌های دو عاملی مفید است.

توجه داشته باشید -حرکت فرگ و -foptimize-Register-Move همان بهینه سازی هستند.

در سطوح فعال شده است -O2, -O3, -اواس.

-fira-algorithm=الگوریتم
از الگوریتم رنگ آمیزی مشخص شده برای تخصیص دهنده ثبت یکپارچه استفاده کنید. در
الگوریتم استدلال می تواند باشد اولویت، که رنگ آمیزی اولویت Chow را مشخص می کند یا CB,
که رنگ آمیزی Chaitin-Briggs را مشخص می کند. رنگ آمیزی Chaitin-Briggs اجرا نمی شود
برای همه معماری ها، اما برای اهدافی که از آن پشتیبانی می کنند، پیش فرض است
زیرا کد بهتری تولید می کند.

-فیرا-منطقه=منطقه
از مناطق مشخص شده برای تخصیص دهنده ثبت یکپارچه استفاده کنید. در منطقه استدلال
باید یکی از موارد زیر باشد:

تمام از همه حلقه ها به عنوان مناطق تخصیص ثبت استفاده کنید. این می تواند بهترین نتایج را برای
ماشین‌هایی با مجموعه رجیستر کوچک و/یا نامنظم.

مخلوط
از همه حلقه ها به جز حلقه هایی با فشار رجیستر کوچک به عنوان مناطق استفاده کنید. این
ارزش معمولاً در اکثر موارد و برای اکثر معماری ها بهترین نتایج را می دهد و
هنگام کامپایل با بهینه سازی سرعت، به طور پیش فرض فعال است (-O, -O2، ...).

یک از همه توابع به عنوان یک منطقه استفاده کنید. این معمولا منجر به کوچکترین کد می شود
اندازه، و به طور پیش فرض برای فعال است -اواس or -O0.

-فیرا-حلقه-فشار
از IRA برای ارزیابی فشار ثبت در حلقه ها برای تصمیم گیری برای جابجایی متغیرهای حلقه استفاده کنید.
این گزینه معمولاً منجر به تولید کدهای سریعتر و کوچکتر در ماشینهای با
فایل های رجیستر بزرگ (>= 32 رجیستر)، اما می تواند سرعت کامپایلر را کاهش دهد.

این گزینه در سطح فعال است -O3 برای برخی از اهداف

-fno-ira-share-save-slots
اشتراک‌گذاری شکاف‌های پشته‌ای را که برای ذخیره رجیسترهای سخت استفاده‌شده از تماس استفاده می‌شوند، غیرفعال کنید
تماس. هر رجیستر سخت یک اسلات پشته جداگانه و در نتیجه پشته تابع دریافت می کند
قاب ها بزرگتر هستند

-fno-ira-share-spill-slots
اشتراک گذاری شکاف های پشته ای اختصاص داده شده برای شبه ثبت نام ها را غیرفعال کنید. هر شبه ثبت
که یک رجیستر سخت دریافت نمی کند، یک اسلات پشته جداگانه و در نتیجه تابع دریافت می کند
قاب های پشته بزرگتر هستند.

-FIRA-VERBOSE =n
گویا بودن فایل dump را برای تخصیص دهنده ثبت یکپارچه کنترل کنید. در
مقدار پیش فرض 5 است. اگر مقدار n بزرگتر یا مساوی 10 باشد، خروجی dump ارسال می شود
به stderr با استفاده از همان فرمت n منهای 10

-تاخیر-شاخه
اگر برای ماشین هدف پشتیبانی می شود، سعی کنید دستورات را برای بهره برداری مجدد ترتیب دهید
اسلات های دستورالعمل پس از دستورالعمل های شعبه با تأخیر در دسترس هستند.

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-fschedule-insns
اگر برای ماشین هدف پشتیبانی می‌شود، سعی کنید دستورالعمل‌ها را برای حذف مجدد ترتیب دهید
به دلیل در دسترس نبودن داده های مورد نیاز، اجرا متوقف می شود. این به ماشین هایی کمک می کند که
با اجازه دادن به دستورالعمل‌های دیگر، دستورالعمل‌های ممیز شناور یا بار حافظه آهسته داشته باشید
تا زمانی که نتیجه بارگذاری یا دستورالعمل ممیز شناور مورد نیاز باشد صادر شود.

در سطوح فعال شده است -O2, -O3.

-fschedule-insns2
مشابه -fschedule-insns، اما یک مجوز اضافی برای زمانبندی دستورالعمل درخواست می کند
پس از تخصیص ثبت نام انجام شد. این امر به ویژه در ماشین‌هایی با a مفید است
تعداد نسبتاً کم رجیسترها و جایی که دستورالعمل‌های بارگذاری حافظه بیشتر از آن طول می‌کشد
یک چرخه

در سطوح فعال شده است -O2, -O3, -اواس.

-fno-sched-interblock
دستورالعمل ها را در بلوک های اصلی برنامه ریزی نکنید. این معمولاً به طور پیش فرض فعال است
هنگام برنامه ریزی قبل از تخصیص ثبت نام، یعنی با -fschedule-insns و یا در -O2 or
بالاتر

-fno-sched-spec
اجازه حرکت گمانه‌زنانه دستورالعمل‌های بدون بار را ندهید. این معمولا توسط فعال می شود
پیش فرض هنگام برنامه ریزی قبل از تخصیص ثبت نام، یعنی با -fschedule-insns و یا در
-O2 و یا بالاتر.

-fsched-pressure
قبل از تخصیص رجیستر، زمان‌بندی insn حساس به فشار ثبت را فعال کنید.
این تنها زمانی معنا پیدا می‌کند که زمان‌بندی قبل از اینکه تخصیص ثبت فعال شود، یعنی با
-fschedule-insns و یا در -O2 یا بالاتر استفاده از این گزینه می تواند تولید را بهبود بخشد
کد کنید و اندازه آن را با جلوگیری از افزایش فشار ثبت بیش از عدد کاهش دهید
رجیسترهای سخت موجود و در نتیجه نشت در رجیستر را ثبت کنید
تخصیص

-fsched-spec-load
اجازه حرکت گمانه زنی برخی دستورالعمل های بار را بدهید. این فقط زمانی معنا پیدا می کند که
برنامه ریزی قبل از تخصیص ثبت نام، یعنی با -fschedule-insns و یا در -O2 و یا بالاتر.

-fsched-spec-load-dangerous
اجازه حرکت گمانه‌زنی دستورالعمل‌های بار بیشتری را بدهید. این فقط زمانی معنا پیدا می کند که
برنامه ریزی قبل از تخصیص ثبت نام، یعنی با -fschedule-insns و یا در -O2 و یا بالاتر.

-fsched-stalled-insns
-fsched-stalled-insns=n
تعریف کنید که چه تعداد ins (در صورت وجود) می تواند پیش از موعد از صف متوقف شده جابجا شود.
در طول دومین پاس برنامه ریزی وارد لیست آماده می شود.
-fno-sched-stalled-insns به این معنی که هیچ شرکتی پیش از موعد جابجا نخواهد شد،
-fsched-stalled-insns=0 به این معنی است که هیچ محدودیتی برای تعداد insn های در صف قابل جابجایی وجود ندارد
زودرس -fsched-stalled-insns بدون مقدار معادل است
-fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
تعریف کنید که چند گروه insn (چرخه) برای وابستگی به یک Staled بررسی می شود
insn که کاندید حذف زودهنگام از صف insns های متوقف شده است. این
فقط در طول دومین پاس برنامه ریزی، و فقط اگر
-fsched-stalled-insns استفاده می شود. -fno-sched-stalled-insns-dep برابر است با
-fsched-stalled-insns-dep = 0. -fsched-stalled-insns-dep بدون مقدار معادل است
به -fsched-stalled-insns-dep = 1.

-FSched2-he-superblocks
هنگام زمان‌بندی پس از تخصیص رجیستر، از الگوریتم زمان‌بندی superblock استفاده کنید.
زمان‌بندی Superblock اجازه می‌دهد تا حرکت در مرزهای بلوک اصلی و در نتیجه سریع‌تر انجام شود
برنامه. این گزینه آزمایشی است، زیرا همه توصیفات ماشین توسط GCC استفاده نمی شود
CPU را به اندازه کافی از نزدیک مدل کنید تا از نتایج غیرقابل اعتماد الگوریتم جلوگیری کنید.

این فقط در هنگام برنامه ریزی پس از تخصیص ثبت، یعنی با
-fschedule-insns2 و یا در -O2 و یا بالاتر.

-fsched-group-heuristic
اکتشافی گروهی را در زمانبندی فعال کنید. این اکتشافی به نفع دستورالعمل است
که متعلق به یک گروه برنامه ریزی است. این به طور پیش فرض در هنگام برنامه ریزی فعال است
فعال، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2 و یا بالاتر.

-fsched-critical-path-heuristic
اکتشافی مسیر بحرانی را در زمانبندی فعال کنید. این اکتشافی به نفع
دستورالعمل در مسیر بحرانی این به طور پیش فرض در هنگام برنامه ریزی فعال است
فعال، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2 و یا بالاتر.

-fsched-spec-insn-heuristic
اکتشافی دستورات نظری را در زمانبندی فعال کنید. این اکتشافی به نفع
دستورالعمل های سوداگرانه با ضعف وابستگی بیشتر این به طور پیش فرض فعال است
زمانی که زمان‌بندی فعال است، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2
و یا بالاتر.

-fsched-rank-heuristic
اکتشافی رتبه را در زمانبندی فعال کنید. این اکتشافی به نفع دستورالعمل است
متعلق به یک بلوک اصلی با اندازه یا فرکانس بیشتر. این به طور پیش فرض فعال است
زمانی که زمان‌بندی فعال است، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2
و یا بالاتر.

-fsched-last-insn-heuristic
اکتشافی آخرین دستورالعمل را در زمانبندی فعال کنید. این اکتشافی به نفع
دستورالعملی که کمتر به آخرین دستورالعمل برنامه ریزی شده وابسته است. این فعال است
به طور پیش فرض زمانی که زمان بندی فعال است، یعنی با -fschedule-insns or -fschedule-insns2
و یا در -O2 و یا بالاتر.

-fsched-dep-count-heuristic
اکتشافی شمارش وابسته را در زمانبندی فعال کنید. این اکتشافی به نفع
دستورالعملی که بسته به آن دستورات بیشتری دارد. این به طور پیش فرض فعال است
زمانی که زمان‌بندی فعال است، یعنی با -fschedule-insns or -fschedule-insns2 و یا در -O2
و یا بالاتر.

-freschedule-modulo-scheduled-loops
اگر یک حلقه مدول بود، زمان‌بندی مدول قبل از زمان‌بندی سنتی می‌آید
برنامه ریزی شده ممکن است بخواهیم از تغییر پاس های زمان بندی بعدی جلوگیری کنیم
زمان بندی، ما از این گزینه برای کنترل آن استفاده می کنیم.

-برنامه ریزی انتخابی
دستورالعمل ها را با استفاده از الگوریتم زمان بندی انتخابی برنامه ریزی کنید. برنامه ریزی انتخابی اجرا می شود
به جای اولین پاس زمانبندی

-زمانبندی-fselective2
دستورالعمل ها را با استفاده از الگوریتم زمان بندی انتخابی برنامه ریزی کنید. برنامه ریزی انتخابی اجرا می شود
به جای پاس زمانبندی دوم.

-صیل صفحه بندی
در طول زمان‌بندی انتخابی، لوله‌گذاری نرم‌افزاری درونی‌ترین حلقه‌ها را فعال کنید. این
تا زمانی که یکی از گزینه ها باشد هیچ تاثیری ندارد -برنامه ریزی انتخابی or -زمانبندی-fselective2 is
روشن شد

حلقه های بیرونی لوله گذاری-fsel-sched
هنگام لوله‌کشی حلقه‌ها در طول زمان‌بندی انتخابی، حلقه‌های بیرونی را نیز خط‌کشی کنید. این
گزینه تاثیری ندارد تا زمانی که -صیل صفحه بندی روشن است

-Fshrink-Wrap
پیش‌گفتارهای تابع را فقط قبل از بخش‌هایی از تابع که به آن نیاز دارند، منتشر کنید
بالای تابع این پرچم به طور پیش فرض در فعال است -O و بالاتر

-fcaller-save
امکان تخصیص مقادیر در رجیسترهایی که با فراخوانی تابع از بین می روند،
با ارسال دستورالعمل های اضافی برای ذخیره و بازیابی رجیسترها در اطراف چنین تماس هایی.
چنین تخصیصی تنها زمانی انجام می‌شود که به نظر می‌رسد به کد بهتری نسبت به آن منجر شود
در غیر این صورت تولید شود.

این گزینه همیشه به صورت پیش‌فرض در ماشین‌های خاصی فعال است، معمولاً ماشین‌هایی که این کار را انجام می‌دهند
هیچ ثبت فراخوانی برای استفاده در عوض وجود ندارد.

در سطوح فعال شده است -O2, -O3, -اواس.

-fcombine-stack-adjustments
تنظیمات پشته (فشار و باز کردن) و منابع حافظه را پشته ردیابی می کند و سپس تلاش می کند
برای یافتن راه هایی برای ترکیب آنها.

فعال به طور پیش فرض در -O1 و بالاتر

-fconserve-stack
سعی کنید استفاده از پشته را به حداقل برسانید. کامپایلر سعی خواهد کرد از فضای پشته کمتری استفاده کند،
حتی اگر این باعث کندی برنامه شود. این گزینه به معنای تنظیم پشته بزرگ-
قاب پارامتر به 100 و پشته بزرگ-قاب-رشد پارامتر تا 400

-ftree-reassoc
پیوند مجدد را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O و بالاتر

-ftree-pre
حذف افزونگی جزئی (PRE) را روی درختان انجام دهید. این پرچم توسط فعال شده است
پیش فرض در -O2 و -O3.

-ftree-partial-pre
حذف جزئی افزونگی (PRE) را تهاجمی تر کنید. این پرچم توسط فعال شده است
پیش فرض در -O3.

-ftree-forwprop
انجام تکثیر رو به جلو روی درختان. این پرچم به طور پیش فرض در فعال است -O و
بالاتر

-free-free
حذف کامل افزونگی (رایگان) روی درختان انجام دهید. تفاوت بین FRE و
PRE این است که FRE فقط عباراتی را در نظر می گیرد که در تمام مسیرهای منتهی به محاسبه می شوند
محاسبات اضافی این تجزیه و تحلیل سریعتر از PRE است، اگرچه تعداد کمتری را در معرض دید قرار می دهد
تعدیل کار این پرچم به طور پیش فرض در فعال است -O و بالاتر

-ftree-phiprop
انجام بلند کردن بارها از نشانگرهای شرطی روی درختان. این پاس توسط فعال شده است
پیش فرض در -O و بالاتر

-ftree-copy-prop
انجام تکثیر کپی روی درختان. این پاس عملیات کپی غیر ضروری را حذف می کند.
این پرچم به طور پیش فرض در فعال است -O و بالاتر

-fipa-pure-const
کشف کنید که کدام توابع خالص یا ثابت هستند. فعال به طور پیش فرض در -O و بالاتر

-fipa-reference
کشف کنید که کدام متغیرهای استاتیک نمی توانند از واحد کامپایل فرار کنند.
فعال به طور پیش فرض در -O و بالاتر

-فیپا-پتا
انجام تجزیه و تحلیل اشاره گر بین رویه ای و اصلاح بین رویه ای و
تجزیه و تحلیل مرجع این گزینه می تواند باعث افزایش حافظه و استفاده از زمان کامپایل روشن شود
واحدهای تلفیقی بزرگ به طور پیش فرض در هیچ سطح بهینه سازی فعال نیست.

-fipa-profile
انتشار پروفایل بین رویه ای را انجام دهید. توابع فقط از سرما فراخوانی می شوند
عملکردها به عنوان سرد علامت گذاری شده اند. همچنین توابع یک بار اجرا می شوند (مانند "سرد"،
"noreturn"، سازنده های ساکن یا تخریب کننده ها) شناسایی می شوند. توابع سرد و
بخش های کمتری از توابع که یک بار اجرا می شوند، برای اندازه بهینه می شوند. فعال شده توسط
پیش فرض در -O و بالاتر

-fipa-cp
انتشار ثابت بین رویه ای را انجام دهید. این بهینه سازی برنامه را تحلیل می کند
برای تعیین اینکه چه زمانی مقادیر ارسال شده به توابع ثابت هستند و سپس بهینه می شود
بر این اساس. این بهینه سازی می تواند به طور قابل ملاحظه ای عملکرد را افزایش دهد اگر
برنامه دارای ثابت هایی است که به توابع منتقل می شوند. این پرچم به طور پیش فرض در فعال است
-O2, -اواس و -O3.

-fipa-cp-clone
شبیه سازی تابع را انجام دهید تا انتشار ثابت بین رویه ای قوی تر شود. چه زمانی
فعال شود، انتشار ثابت بین رویه‌ای، شبیه‌سازی عملکرد را انجام می‌دهد
تابع قابل مشاهده خارجی را می توان با آرگومان های ثابت فراخوانی کرد. چون این
بهینه سازی می تواند چندین نسخه از توابع ایجاد کند، ممکن است به طور قابل توجهی افزایش یابد
اندازه کد (نگاه کنید به --پارام ipcp-unit-growth=ارزش). این پرچم به طور پیش فرض در فعال است
-O3.

-fipa-matrix-reorg
صاف کردن و جابجایی ماتریس را انجام دهید. ماتریس مسطح سعی می کند جایگزین یک
ماتریس m بعدی با ماتریس n بعدی معادل آن، که در آن n < m. این
سطح غیر جهت مورد نیاز برای دسترسی به عناصر ماتریس را کاهش می دهد. در
بهینه سازی دوم، جابجایی ماتریس است که سعی می کند ترتیب ماتریس ها را تغییر دهد
ابعاد ماتریس به منظور بهبود موقعیت حافظه پنهان. هر دو بهینه سازی به این نیاز دارند
کل برنامه پرچم. انتقال تنها در صورتی فعال می شود که اطلاعات نمایه سازی فعال باشد
در دسترس نیست.

سه سینک
حرکت ذخیره رو به جلو را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O و
بالاتر

-ftree-bit-ccp
انتشار ثابت بیت شرطی پراکنده را روی درختان انجام دهید و نشانگر را منتشر کنید
اطلاعات تراز این پاس فقط بر روی متغیرهای اسکالر محلی عمل می کند و می باشد
فعال به طور پیش فرض در -O و بالاتر. مستلزم آن است -ftree-ccp فعال شده است.

-ftree-ccp
انتشار ثابت شرطی پراکنده (CCP) را روی درختان انجام دهید. فقط این پاس
روی متغیرهای اسکالر محلی عمل می کند و به طور پیش فرض در فعال است -O و بالاتر

تبدیل -ftree-switch
تبدیل مقادیر اولیه ساده در یک سوئیچ به مقداردهی اولیه از a را انجام دهید
آرایه اسکالر این پرچم به طور پیش فرض در فعال است -O2 و بالاتر

-ftree-tail-ادغام
دنبال دنباله کدهای یکسان باشید. وقتی پیدا شد، یکی را با پرش به دیگری جایگزین کنید.
این بهینه سازی به عنوان ادغام دم یا پرش متقاطع شناخته می شود. این پرچم توسط فعال شده است
پیش فرض در -O2 و بالاتر. زمان تدوین در این پاس را می توان با استفاده محدود کرد
حداکثر-دم-ادغام-مقایسه پارامتر و حداکثر-دم-ادغام-تکرار پارامتر.

-ftree-dce
حذف کد مرده (DCE) را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O
و بالاتر

-ftree-builtin-call-dce
اجرای حذف کد مرده شرطی (DCE) برای فراخوانی توابع داخلی که
ممکن است "errno" را تنظیم کند اما در غیر این صورت عاری از عوارض جانبی است. این پرچم به طور پیش فرض فعال است
at -O2 و بالاتر اگر -اواس نیز مشخص نشده است.

-ftree-dominator-opts
انجام انواع پاکسازی اسکالر ساده (تکثیر ثابت/کپی، افزونگی).
حذف، انتشار دامنه و ساده سازی بیان) بر اساس یک غالب
پیمایش درخت این نیز پرش threading را انجام می دهد (برای کاهش پرش به پرش). این
پرچم به طور پیش فرض در فعال است -O و بالاتر

-ftree-dse
حذف فروشگاه مرده (DSE) را روی درختان انجام دهید. یک فروشگاه مرده ذخیره ای برای یک خاطره است
مکانی که بعداً توسط فروشگاه دیگری بدون هیچ بار مداخله‌ای بازنویسی می‌شود. که در
در این مورد فروشگاه قبلی را می توان حذف کرد. این پرچم به طور پیش فرض در فعال است -O و
بالاتر

-ftree-ch
کپی هدر حلقه را روی درختان انجام دهید. این مفید است زیرا افزایش می یابد
اثربخشی بهینه سازی حرکت کد همچنین یک پرش را ذخیره می کند. این پرچم است
فعال به طور پیش فرض در -O و بالاتر. برای آن فعال نیست -اواس، از آنجایی که معمولا
اندازه کد را افزایش می دهد.

-ftree-loop-optimize
بهینه سازی حلقه ها را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O و
بالاتر

-ftree-loop-linear
تبدیل های تبادل حلقه را روی درخت انجام دهید. مثل -فلوپ-تبادل. برای استفاده
این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl و --with-cloog به
زیرساخت تبدیل حلقه گرافیت را فعال کنید.

-فلوپ-تبادل
تبدیل های تبادل حلقه را روی حلقه ها انجام دهید. تعویض دو حلقه تو در تو
حلقه های داخلی و خارجی را تغییر می دهد. به عنوان مثال، یک حلقه مانند:

DO J = 1، M
DO I = 1، N
A(J, I) = A(J, I) * C
در پایان
در پایان

تبادل حلقه حلقه را طوری تبدیل می کند که انگار کاربر نوشته است:

DO I = 1، N
DO J = 1، M
A(J, I) = A(J, I) * C
در پایان
در پایان

زمانی که "N" بزرگتر از حافظه پنهان باشد، می تواند مفید باشد، زیرا در Fortran، the
عناصر یک آرایه به طور پیوسته توسط ستون و نسخه اصلی در حافظه ذخیره می شوند
حلقه روی ردیف‌ها تکرار می‌شود و به طور بالقوه در هر دسترسی یک حافظه پنهان ایجاد می‌کند. این
بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و محدود به آن نیست
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl
و --with-cloog برای فعال کردن زیرساخت تبدیل حلقه گرافیت.

-فلوپ-نوار-معدن
تبدیل‌های استخراج نوار حلقه را روی حلقه‌ها انجام دهید. استخراج نواری یک حلقه را به آن تقسیم می کند
دو حلقه تو در تو حلقه بیرونی دارای گام هایی برابر با اندازه نوار و داخلی است
حلقه دارای گام هایی از حلقه اصلی در یک نوار است. طول نوار قابل تغییر است
با استفاده از حلقه-بلوک-کاشی-اندازه پارامتر. به عنوان مثال، یک حلقه مانند:

DO I = 1، N
A(I) = A(I) + C
در پایان

استخراج نوار حلقه حلقه را طوری تبدیل می کند که انگار کاربر نوشته است:

DO II = 1، N، 51
DO I = II، دقیقه (II + 50، N)
A(I) = A(I) + C
در پایان
در پایان

این بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و به آن محدود نمی شود
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl
و --with-cloog برای فعال کردن زیرساخت تبدیل حلقه گرافیت.

-فلوپ بلوک
تبدیل حلقه مسدود کننده را روی حلقه ها انجام دهید. Blocking strip mines هر حلقه در
لانه حلقه به گونه ای است که دسترسی های حافظه حلقه های عنصر در حافظه نهان قرار می گیرد. در
طول نوار را می توان با استفاده از حلقه-بلوک-کاشی-اندازه پارامتر. مثلا،
حلقه ای مانند:

DO I = 1، N
DO J = 1، M
A (j ، i) = b (i) + c (j)
در پایان
در پایان

مسدود کردن حلقه حلقه را طوری تبدیل می کند که انگار کاربر نوشته است:

DO II = 1، N، 51
DO JJ = 1، M، 51
DO I = II، دقیقه (II + 50، N)
DO J = JJ، دقیقه (JJ + 50، M)
A (j ، i) = b (i) + c (j)
در پایان
در پایان
در پایان
در پایان

که می تواند مفید باشد زمانی که "M" بزرگتر از حافظه پنهان است، زیرا درونی ترین حلقه است
روی مقدار کمتری از داده ها که می تواند در حافظه پنهان نگهداری شود، تکرار می شود. این
بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و محدود به آن نیست
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl
و --with-cloog برای فعال کردن زیرساخت تبدیل حلقه گرافیت.

-فگرافیت-هویت
تبدیل هویت برای گرافیت را فعال کنید. برای هر SCOP ما تولید می کنیم
نمایش چند وجهی و تبدیل آن به gimple. استفاده كردن -فگرافیت-هویت
ما می توانیم هزینه ها یا مزایای تبدیل GIMPLE -> GRAPHITE -> GIMPLE را بررسی کنیم.
برخی از حداقل بهینه‌سازی‌ها نیز توسط CLooG مولد کد انجام می‌شوند، مانند index
تقسیم و حذف کد مرده در حلقه ها.

-فلوپ صاف کردن
ساختار تودرتوی حلقه را حذف می کند: لانه حلقه را به یک حلقه تبدیل می کند. این
تبدیل می تواند به عنوان یک تبدیل توانمند برای برداری و
موازی سازی این ویژگی آزمایشی است. برای استفاده از این تبدیل کد، GCC
باید با پیکربندی شود --with-ppl و --with-cloog برای فعال کردن حلقه Graphite
زیرساخت های تحول

-floop-parallelize-all
از تحلیل وابستگی داده های گرافیت برای شناسایی حلقه هایی که می توانند موازی شوند استفاده کنید.
همه حلقه‌هایی را که می‌توان آنالیز کرد موازی کرد تا وابستگی‌های حامل حلقه را نداشته باشند
بدون بررسی اینکه موازی کردن حلقه ها سودآور است.

-fcheck-data-deps
نتایج چندین تحلیلگر وابستگی داده را مقایسه کنید. این گزینه برای
اشکال زدایی تحلیلگرهای وابستگی داده ها

-ftree-loop-if-convert
سعی کنید پرش های شرطی در درونی ترین حلقه ها را به بدون شاخه تبدیل کنید
معادل ها هدف حذف کنترل جریان از درونی ترین حلقه ها به ترتیب است
برای بهبود توانایی پاس برداری برای مدیریت این حلقه ها. این هست
اگر برداری فعال باشد به طور پیش فرض فعال می شود.

-ftree-loop-if-convert-stores
سعی کنید پرش های شرطی حاوی نوشته های حافظه را نیز تبدیل کنید. این
تبدیل می تواند برای برنامه های چند رشته ای ناامن باشد زیرا تبدیل به شرطی می شود
حافظه در حافظه بدون قید و شرط می نویسد. مثلا،

برای (i = 0؛ i < N؛ i++)
اگر (شرط)
A[i] = expr;

تبدیل خواهد شد به

برای (i = 0؛ i < N؛ i++)
A[i] = شرایط expr : A[i];

به طور بالقوه رقابت های داده را تولید می کند.

توزیع -ftree-loop
توزیع حلقه را انجام دهید. این پرچم می تواند عملکرد حافظه پنهان را در بدنه های حلقه بزرگ بهبود بخشد
و اجازه می دهد تا بهینه سازی های حلقه بیشتر، مانند موازی سازی یا برداری، انجام شود
محل. به عنوان مثال، حلقه

DO I = 1، N
A(I) = B(I) + C
D(I) = E(I) * F
در پایان

تبدیل می شود به

DO I = 1، N
A(I) = B(I) + C
در پایان
DO I = 1، N
D(I) = E(I) * F
در پایان

الگوی-حلقه-دور-توزیع
توزیع حلقه‌ای از الگوهایی را انجام دهید که می‌توانند کد با فراخوانی به a تولید شوند
کتابخانه این پرچم به طور پیش فرض در فعال است -O3.

این پاس حلقه های اولیه را توزیع می کند و یک فراخوانی به memset صفر ایجاد می کند.
به عنوان مثال، حلقه

DO I = 1، N
A(I) = 0
B(I) = A(I) + I
در پایان

تبدیل می شود به

DO I = 1، N
A(I) = 0
در پایان
DO I = 1، N
B(I) = A(I) + I
در پایان

و حلقه اولیه به یک فراخوانی به memset صفر تبدیل می شود.

-ftree-loop-im
حرکت ثابت حلقه را روی درختان انجام دهید. این پاس فقط ثابت‌هایی را جابه‌جا می‌کند
رسیدگی به آن در سطح RTL سخت است (تماس‌های تابع، عملیاتی که تا حد غیر ضروری گسترش می‌یابند
دنباله ای از insns). با -funswitch-loops همچنین عملوندهای شرایطی را که
خارج از حلقه ثابت هستند، به طوری که می‌توانیم از تحلیل بی‌تغییر ساده استفاده کنیم
در حلقه unswitching. پاس همچنین شامل حرکت فروشگاه است.

-ftree-loop-ivcanon
یک شمارنده متعارف برای تعداد تکرارها در حلقه هایی که برای آنها تعیین می شود ایجاد کنید
تعداد تکرار نیاز به تجزیه و تحلیل پیچیده دارد. بهینه سازی های بعدی ممکن است
تعداد را به راحتی تعیین کنید به ویژه در ارتباط با باز کردن چرخش مفید است.

-فیووپت
انجام بهینه سازی متغیرهای القایی (کاهش قدرت، متغیر القایی
ادغام و حذف متغیر القایی) روی درختان.

-ftree-parallylize-loops = n
حلقه ها را موازی کنید، یعنی فضای تکرار آنها را برای اجرا در n رشته تقسیم کنید. این هست
فقط برای حلقه هایی که تکرار آنها مستقل هستند و می توانند دلخواه باشند امکان پذیر است
دوباره سفارش داد. بهینه سازی فقط در ماشین های چند پردازنده ای برای حلقه ها سودآور است
که به جای اینکه به عنوان مثال توسط پهنای باند حافظه محدود شوند، CPU فشرده هستند. این گزینه
دلالت دارد - نخ، و بنابراین فقط در اهدافی پشتیبانی می شود که از آنها پشتیبانی می کنند
- نخ.

-ftree-pta
تجزیه و تحلیل تابع-محلی نقاط-به روی درختان را انجام دهید. این پرچم به طور پیش فرض فعال است
at -O و بالاتر

-ftree-sra
انجام تعویض اسکالر سنگدانه ها. این پاس جایگزین مراجع ساختاری می شود
با اسکالرها برای جلوگیری از تسلیم شدن ساختارها به حافظه خیلی زود. این پرچم است
فعال به طور پیش فرض در -O و بالاتر

-ftree-copyrename
تغییر نام کپی را روی درختان انجام دهید. این پاس سعی می کند نام کامپایلر موقت را به آن تغییر دهد
سایر متغیرها در مکان‌های کپی، معمولاً منجر به نام‌های متغیر می‌شوند که بیشتر
شباهت زیادی به متغیرهای اصلی دارد. این پرچم به طور پیش فرض در فعال است -O و
بالاتر

-ftree-Coalesce-inlined-vars
مجوز نام کپی را بگویید (نگاه کنید به -ftree-copyrename) تلاش برای ترکیب کاربر کوچک
متغیرها را نیز تعریف می‌کند، اما تنها در صورتی که از توابع دیگر خط‌بندی شده باشند. این هست یک
شکل محدودتر -ftree-Coalesce-vars. این ممکن است به اطلاعات اشکال زدایی این موارد آسیب برساند
متغیرهای inlined، اما متغیرهای تابع inlined-in را از هم جدا نگه می دارد
یکدیگر، به طوری که احتمال بیشتری وجود دارد که مقادیر مورد انتظار را در a داشته باشند
جلسه رفع اشکال این پیش‌فرض در نسخه‌های GCC قدیمی‌تر از 4.7 بود.

-ftree-Coalesce-vars
مجوز نام کپی را بگویید (نگاه کنید به -ftree-copyrename) تلاش برای ترکیب کاربر کوچک
به جای صرفاً موقتی کامپایلر، متغیرها را نیز تعریف کرد. این ممکن است به شدت محدود کند
توانایی اشکال زدایی یک برنامه بهینه سازی شده کامپایل شده با -fno-var-tracking-assignments.
در شکل نفی، این پرچم از ادغام SSA از متغیرهای کاربر از جمله جلوگیری می کند
خطوط خطی شده این گزینه به طور پیش فرض فعال است.

-ftree-ter
جایگزینی موقت بیان را در مرحله SSA-> طبیعی انجام دهید. تنها
استفاده/تک دف موقت در محل استفاده خود با تعریف خود جایگزین می شود
اصطلاح. این منجر به کد غیر GIMPLE می شود، اما به توسعه دهنده ها بسیار بیشتر می دهد
درختان پیچیده برای کار بر روی تولید RTL بهتر. این توسط فعال می شود
پیش فرض در -O و بالاتر

-ftree-vectorize
بردارسازی حلقه را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O3.

-FTREE-SLP-Vectorize
بردارسازی بلوک پایه را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O3 و
چه زمانی -ftree-vectorize فعال شده است.

نسخه-ftree-vect-loop
هنگام انجام حلقه برداری بر روی درختان، نسخه سازی حلقه را انجام دهید. هنگامی که یک حلقه ظاهر می شود
قابل برداری باشد با این تفاوت که تراز داده ها یا وابستگی داده ها را نمی توان تعیین کرد
در زمان کامپایل، سپس نسخه های برداری و غیربردار حلقه تولید می شود
به همراه بررسی های زمان اجرا برای همسویی یا وابستگی برای کنترل نسخه ای که وجود دارد
اجرا شده. این گزینه به طور پیش فرض به جز در سطح فعال است -اواس جایی که غیرفعال است

-fvect-cost-model
فعال کردن مدل هزینه برای برداری

-ftree-vrp
انتشار محدوده ارزش را روی درختان انجام دهید. این شبیه به انتشار ثابت است
عبور می کند، اما به جای مقادیر، محدوده ای از مقادیر منتشر می شود. این اجازه می دهد تا
بهینه سازها برای حذف بررسی های غیر ضروری محدوده مانند بررسی های محدود آرایه و اشاره گر تهی
چک ها این به طور پیش فرض در فعال است -O2 و بالاتر. حذف بررسی نشانگر تهی
فقط در صورتی انجام می شود که -fdelete-null-pointer-checks فعال شده است.

ردیاب
برای بزرگ کردن اندازه سوپر بلوک، تکثیر دم را انجام دهید. این تحول ساده می کند
جریان کنترل تابع به بهینه سازی های دیگر اجازه می دهد تا کار بهتری انجام دهند.

-funroll-loops
حلقه‌هایی که تعداد تکرارهای آن‌ها در زمان کامپایل یا بعد از آن قابل تعیین است را باز کنید
ورود به حلقه -funroll-loops دلالت دارد -frerun-cse-after-loop. این گزینه می سازد
کد بزرگتر است و ممکن است باعث شود سریعتر اجرا شود یا نه.

-funroll-all-loops
همه حلقه ها را باز کنید، حتی اگر تعداد تکرارهای آنها در زمانی که حلقه است نامشخص باشد
وارد شد. این معمولا باعث می شود برنامه ها کندتر اجرا شوند. -funroll-all-loops حاکی از
گزینه های مشابه -funroll-loops,

-fsplit-ivs-in-unroller
بیان مقادیر متغیرهای القایی را در تکرارهای بعدی فعال می کند
حلقه unrolled با استفاده از مقدار در اولین تکرار. این وابستگی طولانی مدت را از بین می برد
زنجیره‌ها، بنابراین کارایی پاس‌های برنامه‌ریزی را بهبود می‌بخشد.

ترکیبی از - وب و CSE اغلب برای به دست آوردن همان اثر کافی است. با این حال
در مواردی که بدنه حلقه پیچیده تر از یک بلوک اصلی باشد، اینطور نیست
قابل اعتماد. همچنین به دلیل وجود برخی از معماری ها اصلاً کار نمی کند
محدودیت در پاس CSE

این بهینه سازی به صورت پیش فرض فعال است.

-fvariable-expansion-in-unroller
با این گزینه، کامپایلر چندین نسخه از برخی متغیرهای محلی ایجاد می کند
هنگام باز کردن یک حلقه که می تواند منجر به کد برتر شود.

-fpartial-inlining
بخش های درون خطی توابع. این گزینه تنها زمانی تأثیری دارد که خود inlining باشد
روشن شده توسط توابع -finline or -finline-small-functions گزینه.

در سطح فعال شد -O2.

- پیش بینی کننده - مشترک
بهینه سازی مشترک پیش بینی را انجام دهید، به عنوان مثال، استفاده مجدد از محاسبات (به ویژه
بارگذاری و ذخیره حافظه) در تکرارهای قبلی حلقه ها انجام شده است.

این گزینه در سطح فعال است -O3.

-fprefetch-loop-arrays
اگر توسط ماشین مورد نظر پشتیبانی می‌شود، دستورالعمل‌هایی را برای واکشی اولیه حافظه ایجاد کنید
بهبود عملکرد حلقه هایی که به آرایه های بزرگ دسترسی دارند.

این گزینه ممکن است کد بهتر یا بدتری تولید کند. نتایج به شدت به
ساختار حلقه ها در کد منبع

غیر فعال در سطح -اواس.

-فنو-چشمک
-fno-peephole2
غیرفعال کردن هر گونه بهینه سازی سوراخ مخصوص ماشین. تفاوت میان
-فنو-چشمک و -fno-peephole2 نحوه پیاده سازی آنها در کامپایلر است. مقداری
اهداف از یکی استفاده می کنند، برخی از دیگری استفاده می کنند، تعداد کمی از هر دو استفاده می کنند.

-fpeephole به طور پیش فرض فعال است. -fpeepole2 در سطوح فعال شده است -O2, -O3, -اواس.

-فنو-حدس-شاخه-احتمال
با استفاده از اکتشافی احتمالات شاخه را حدس نزنید.

GCC از اکتشافی برای حدس زدن احتمالات شاخه استفاده می کند، اگر آنها توسط آنها ارائه نشده باشند
بازخورد پروفایل (-fprofile-arcs). این اکتشافات مبتنی بر جریان کنترل است
نمودار اگر برخی از احتمالات شاخه توسط __ساخته_انتظار، سپس
اکتشافی برای حدس زدن احتمالات شاخه برای بقیه جریان کنترل استفاده خواهد شد
نمودار، گرفتن __ساخته_انتظار اطلاعات در نظر گرفته شود تعاملات بین
اکتشافی و __ساخته_انتظار می تواند پیچیده باشد، و در برخی موارد، ممکن است مفید باشد
غیر فعال کردن اکتشافی به طوری که اثرات __ساخته_انتظار راحت تر هستند
فهمیدن.

پیش فرض این است fguess-branch-probability در سطوح -O, -O2, -O3, -اواس.

-بلاک های سفارشی
ترتیب بلوک های اساسی را در تابع کامپایل شده مجدداً ترتیب دهید تا تعداد موارد گرفته شده کاهش یابد
شاخه ها و بهبود محل کد.

در سطوح فعال شده است -O2, -O3.

-freorder-blocks-and-partition
علاوه بر مرتب سازی مجدد بلوک های اساسی در تابع کامپایل شده، به منظور کاهش
تعداد شاخه های گرفته شده، بلوک های سرد و گرم اصلی را به بخش های جداگانه تقسیم می کند
از فایل های اسمبلی و .o، برای بهبود عملکرد صفحه بندی و محل ذخیره کش.

این بهینه سازی به صورت خودکار در حضور مدیریت استثنا خاموش می شود.
برای بخش های linkonce، برای توابع با ویژگی بخش تعریف شده توسط کاربر و در هر کدام
معماری که از بخش های نامگذاری شده پشتیبانی نمی کند.

توابع -freorder
ترتیب توابع را در فایل شیء به منظور بهبود موقعیت کد. این هست
با استفاده از بخش های فرعی ویژه ".text.hot" برای اغلب موارد اجرا شده پیاده سازی شده است
توابع و ".text.unlikely" برای توابع غیرمحتمل اجرا شده. سفارش مجدد توسط
پیوند دهنده بنابراین فرمت فایل شی باید از بخش های نامگذاری شده پشتیبانی کند و پیوند دهنده باید قرار گیرد
آنها را به روشی معقول.

همچنین بازخورد نمایه باید در دسترس باشد تا این گزینه موثر باشد. دیدن
-fprofile-arcs برای جزئیات بیشتر.

در سطوح فعال شده است -O2, -O3, -اواس.

fstrict-aliasing
به کامپایلر اجازه دهید تا سخت‌گیرانه‌ترین قوانین نام‌گذاری را که برای زبان قابل اعمال است، در نظر بگیرد
در حال تدوین برای C (و C++)، این بهینه‌سازی‌ها را بر اساس نوع فعال می‌کند
اصطلاحات. به طور خاص، یک شی از یک نوع فرض می شود که هرگز در آن ساکن نیست
همان آدرس به عنوان یک شی از نوع متفاوت، مگر اینکه انواع تقریباً یکسان باشند.
به عنوان مثال، یک "int بدون علامت" می تواند مستعار "int" باشد، اما نه "void*" یا "double". آ
نوع کاراکتر ممکن است مستعار هر نوع دیگری باشد.

به کدهای زیر توجه ویژه ای داشته باشید:

اتحادیه a_union {
بین من
دو d;
};

int f() {
اتحادیه a_union t;
td = 3.0;
بازگشت ti;
}

تمرین خواندن از اعضای اتحادیه متفاوت از اخیرا
نوشته شده به (به نام "نوع مجازات") رایج است. حتی با fstrict-aliasing، نوع
punning مجاز است، مشروط بر اینکه حافظه از طریق نوع اتحاد قابل دسترسی باشد. بنابراین
کد بالا همانطور که انتظار می رود کار خواهد کرد. با این حال، این کد ممکن است:

int f() {
اتحادیه a_union t;
int* ip ؛
td = 3.0;
ip = &t.i;
بازگشت *ip;
}

به طور مشابه، با گرفتن آدرس، ارسال نشانگر به دست آمده و
عدم ارجاع نتیجه رفتار نامشخصی دارد، حتی اگر بازیگران از نوع اتحاد استفاده کنند،
به عنوان مثال:

int f() {
دو برابر d = 3.0;
return ((union a_union *) &d)->i;
}

La fstrict-aliasing گزینه در سطوح فعال است -O2, -O3, -اواس.

-fstrict-سرریز
به کامپایلر اجازه دهید بسته به زبان، قوانین سرریز امضا شده سختگیرانه را در نظر بگیرد
در حال تدوین برای C (و C++) این به این معنی است که هنگام انجام حساب با آن سرریز می شود
اعداد امضا شده تعریف نشده است، به این معنی که کامپایلر ممکن است فرض کند که این کار را نخواهد کرد
به وقوع پیوستن. این امکان بهینه سازی های مختلف را فراهم می کند. به عنوان مثال، کامپایلر فرض می کند
که عبارتی مانند "i + 10 > i" همیشه برای علامت "i" صادق خواهد بود. این
این فرض تنها زمانی معتبر است که سرریز علامت تعریف نشده باشد، زیرا عبارت نادرست است
اگر "i + 10" هنگام استفاده از محاسبات مکمل دو سرریز شود. وقتی این گزینه در دسترس است
هر تلاشی برای تعیین اینکه آیا یک عملیات روی اعداد امضا شده سرریز خواهد شد یا خیر را تحت تأثیر قرار می دهد
باید با دقت نوشته شود تا در واقع سرریز نشود.

این گزینه همچنین به کامپایلر اجازه می دهد تا معنای دقیق اشاره گر را فرض کند: با توجه به a
اشاره گر به یک شی، اگر اضافه کردن یک افست به آن اشاره گر نشانگر تولید نمی کند
به همان شیء، اضافه تعریف نشده است. این به کامپایلر اجازه می دهد تا نتیجه گیری کند
که "p + u > p" همیشه برای یک اشاره گر "p" و عدد صحیح بدون علامت "u" صادق است. این
فرض فقط به این دلیل معتبر است که نشانگر wraparound تعریف نشده است، همانطور که عبارت است
نادرست است اگر "p + u" با استفاده از محاسبات مکمل دو سرریز شود.

همچنین ببینید -fwrapv گزینه. استفاده كردن -fwrapv به این معنی است که سرریز علامت عدد صحیح است
کاملاً تعریف شده: می پیچد. چه زمانی -fwrapv استفاده می شود، هیچ تفاوتی بین آنها وجود ندارد
-fstrict-سرریز و -فنو-سخت-سرریز برای اعداد صحیح با -fwrapv انواع خاصی
سرریز مجاز هستند. به عنوان مثال، اگر کامپایلر هنگام انجام یک سرریز شود
با محاسبه روی ثابت ها، مقدار سرریز شده همچنان می تواند با آن استفاده شود -fwrapv، اما نه
در غیر این صورت.

La -fstrict-سرریز گزینه در سطوح فعال است -O2, -O3, -اواس.

-عملکردهای falign
-falign-functions=n
شروع توابع را با توان بعدی دو بزرگتر تراز کنید n، پرش تا n
بایت ها برای مثال، -falign-functions=32 توابع را با 32 بایت بعدی تراز می کند
مرز، اما -falign-functions=24 فقط در صورتی که با مرز 32 بایتی بعدی تراز شود
این را می توان با رد 23 بایت یا کمتر انجام داد.

-fno-align-functions و -falign-functions=1 معادل هستند و به معنی توابع هستند
تراز نخواهد شد.

برخی اسمبلرها فقط زمانی از این پرچم پشتیبانی می کنند n توان دو است. در آن صورت است
گرد کردن.

If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید.

در سطوح فعال شده است -O2, -O3.

-falign-labels
-این برچسب ها =n
همه اهداف شاخه را در یک مرز توان دو، با پرش تا مرز تراز کنید n بایت مانند
-عملکردهای falign. این گزینه به راحتی می تواند کد را کندتر کند، زیرا باید درج شود
عملیات ساختگی برای زمانی که به هدف شاخه در جریان معمول کد رسیده است.

-fno-align-labels و -بای برچسب = 1 معادل هستند و به این معنی است که برچسب ها نخواهد بود
هم راستا.

If -فالین-حلقه ها or -فالین-پرش قابل اجرا هستند و بزرگتر از این مقدار هستند
به جای آن از مقادیر آنها استفاده می شود.

If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید که بسیار محتمل است
به 1، به معنی عدم تراز.

در سطوح فعال شده است -O2, -O3.

-فالین-حلقه ها
-falign-loops=n
حلقه‌ها را به مرز دو توان تراز کنید و از آن بگذرید n بایت مانند -عملکردهای falign.
امید این است که حلقه بارها اجرا شود که هر کدام را جبران کند
اجرای عملیات ساختگی

-fno-align-loops و -falign-loops=1 معادل هستند و به این معنی است که حلقه ها نخواهد بود
هم راستا.

If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید.

در سطوح فعال شده است -O2, -O3.

-فالین-پرش
-falign-jumps=n
اهداف شاخه‌ای را با مرز قدرت دو تنظیم کنید، برای اهداف شاخه‌ای که در آن اهداف قرار دارند
فقط با پریدن و پرش تا بالا می توان به آن رسید n بایت مانند -عملکردهای falign. به
در این مورد، هیچ عملیات ساختگی لازم نیست اجرا شود.

-fno-align-jumps و -falign-jumps=1 معادل هستند و به این معنی است که حلقه ها نخواهد بود
هم راستا.

If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید.

در سطوح فعال شده است -O2, -O3.

-funit در یک زمان
این گزینه به دلایل سازگاری باقی مانده است. -funit در یک زمان هیچ تاثیری ندارد، در حالی که
-fno-واحد-در-یک-زمان دلالت دارد -fno-toplevel-reorder و fno-section-anchors.

به طور پیش فرض فعال شده است.

-fno-toplevel-reorder
توابع سطح بالا، متغیرها و عبارات "asm" را دوباره ترتیب ندهید. آنها را در خروجی قرار دهید
همان ترتیبی که در فایل ورودی ظاهر می شوند. وقتی از این گزینه استفاده می شود،
متغیرهای استاتیک ارجاع نشده حذف نخواهند شد. این گزینه برای پشتیبانی در نظر گرفته شده است
کد موجود که بر یک سفارش خاص متکی است. برای کد جدید بهتر است استفاده کنید
ویژگی های.

در سطح فعال شد -O0. هنگامی که به طور صریح غیرفعال است، همچنین به معنای آن است fno-section-anchors,
که در غیر این صورت در فعال می شود -O0 روی برخی اهداف

- وب
وب ها را همانطور که معمولاً برای اهداف تخصیص ثبت استفاده می شود می سازد و هر وب را اختصاص می دهد
ثبت شبه فردی این اجازه می دهد تا پاس تخصیص ثبت نام کار کند
شبه مستقیم، اما چندین پاس بهینه سازی دیگر مانند CSE را نیز تقویت می کند،
بهینه ساز حلقه و حذف کننده کد مرده بی اهمیت. با این حال، می تواند اشکال زدایی ایجاد کند
غیر ممکن است، زیرا متغیرها دیگر در یک "ثبت خانه" باقی نمی مانند.

فعال به طور پیش فرض با -funroll-loops.

کل برنامه
فرض کنید واحد کامپایل فعلی کل برنامه در حال کامپایل را نشان می دهد.
همه توابع و متغیرهای عمومی به استثنای "main" و آنهایی که توسط ادغام شده اند
ویژگی "externally_visible" به توابع ثابت تبدیل می شود و در عمل بهینه می شود
به طور تهاجمی تر توسط بهینه سازهای بین رویه ای. اگر طلا به عنوان پلاگین پیوند دهنده استفاده می شود،
ویژگی های "externally_visible" به طور خودکار به توابع اضافه می شوند (هنوز متغیر نیست
به دلیل یک جریان طلا مسئله) که مطابق با خارج از اشیاء LTO قابل دسترسی هستند
فایل وضوح تولید شده توسط طلا. برای پیوند دهنده های دیگر که نمی توانند وضوح ایجاد کنند
فایل، مشخصه های صریح "externally_visible" هنوز ضروری هستند. در حالی که این گزینه
معادل استفاده صحیح از کلمه کلیدی "استاتیک" برای برنامه هایی است که از a
تک فایل، در ترکیب با گزینه -flto از این پرچم می توان برای کامپایل بسیاری استفاده کرد
برنامه های مقیاس کوچکتر از آنجایی که توابع و متغیرها برای کل محلی می شوند
واحد کامپایل ترکیبی، نه برای خود فایل منبع واحد.

این گزینه دلالت دارد -fwhole-فایل برای برنامه های فرترن

-flto[=n]
این گزینه بهینه‌ساز استاندارد زمان پیوند را اجرا می‌کند. هنگامی که با کد منبع فراخوانی می شود، آن را
GIMPLE (یکی از نمایش‌های داخلی GCC) را تولید می‌کند و آن را در ELF ویژه می‌نویسد
بخش های موجود در فایل شی هنگامی که فایل های شی به هم مرتبط می شوند، همه
بدنه‌های تابع از این بخش‌های ELF خوانده می‌شوند و به‌گونه‌ای نمونه‌سازی می‌شوند که گویی وجود داشته‌اند
بخشی از همان واحد ترجمه

برای استفاده از بهینه ساز زمان پیوند، -flto باید در زمان کامپایل و در طول آن مشخص شود
لینک نهایی مثلا:

gcc -c -O2 -flto foo.c
gcc -c -O2 -flto bar.c
gcc -o myprog -flto -O2 foo.o bar.o

دو فراخوان اول به GCC یک نمایش بایت کد GIMPLE را در قسمت ویژه ذخیره می کند
بخش ELF در داخل foo.o و bar.o. فراخوان نهایی بایت کد GIMPLE را می خواند
از جانب foo.o و bar.o، دو فایل را در یک تصویر داخلی ادغام می کند و کامپایل می کند
نتیجه طبق معمول از آنجایی که هر دو foo.o و bar.o در یک تصویر واحد ادغام می شوند، این
باعث می شود تمام تحلیل ها و بهینه سازی های بین رویه ای در GCC در سراسر جهان کار کنند
دو فایل که انگار یک فایل واحد هستند. این به این معنی است که برای مثال، inliner است
قادر به درون خط کردن توابع در bar.o به توابع در foo.o و بالعکس.

راه دیگر (ساده تر) برای فعال کردن بهینه سازی زمان پیوند این است:

gcc -o myprog -flto -O2 foo.c bar.c

در بالا بایت کد برای foo.c و نوار، آنها را با هم در یک واحد ادغام می کند
نمایش GIMPLE و بهینه سازی آنها به طور معمول برای تولید myprog.

تنها نکته مهمی که باید در نظر داشته باشید این است که فعال کردن بهینه سازی زمان پیوند
-flto پرچم باید به هر دو دستور کامپایل و پیوند ارسال شود.

برای اینکه بهینه سازی کل برنامه موثر باشد، لازم است یک کل مشخصی ایجاد شود
مفروضات برنامه کامپایلر باید بداند که چه توابع و متغیرهایی می توانند باشند
توسط کتابخانه ها و زمان اجرا خارج از واحد بهینه سازی زمان پیوند قابل دسترسی است. چه زمانی
پشتیبانی شده توسط پیوند دهنده، افزونه پیوند دهنده (نگاه کنید به فیوز-لینکر-پلاگین) می گذرد
اطلاعات به کامپایلر در مورد نمادهای استفاده شده و قابل مشاهده خارجی. وقتی که
پلاگین لینکر در دسترس نیست، کل برنامه باید برای اجازه دادن به کامپایلر استفاده شود
برای ایجاد این مفروضات، که منجر به تصمیمات بهینه سازی تهاجمی تر می شود.

توجه داشته باشید که وقتی یک فایل با -flto، فایل شی تولید شده بزرگتر از
یک فایل شی معمولی زیرا حاوی بایت کدهای GIMPLE و کد نهایی معمول است.
این بدان معنی است که فایل های شی با اطلاعات LTO را می توان به عنوان یک شی معمولی پیوند داد
فایل ها؛ اگر -flto به پیوند دهنده منتقل نمی شود، هیچ بهینه سازی بین رویه ای وجود ندارد
کاربردی.

علاوه بر این، پرچم‌های بهینه‌سازی مورد استفاده برای کامپایل فایل‌های فردی نیستند
لزوماً مربوط به موارد استفاده شده در زمان پیوند است. برای مثال،

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o

این فایل‌های شی منفرد را با کد اسمبلر بهینه‌نشده تولید می‌کند، اما
باینری حاصل myprog در بهینه سازی شده است -O3. اگر در عوض، باینری نهایی باشد
تولید شده بدون -flto، و سپس myprog بهینه نشده است

هنگام تولید باینری نهایی با -flto، GCC فقط بهینه سازی زمان پیوند را اعمال می کند
به فایل هایی که حاوی بایت کد هستند. بنابراین، می توانید فایل های شی را با هم ترکیب و مطابقت دهید
و کتابخانه هایی با بایت کدهای GIMPLE و کد شی نهایی. GCC به طور خودکار انتخاب می کند
کدام فایل‌ها را در حالت LTO بهینه‌سازی کنید و کدام فایل‌ها را بدون بیشتر پیوند دهید
در حال پردازش.

برخی از پرچم های تولید کد وجود دارند که توسط GCC هنگام تولید بایت کدها حفظ می شوند
آنها باید در مرحله پیوند نهایی استفاده شوند. در حال حاضر گزینه های زیر
در فایل های بایت کد GIMPLE ذخیره می شوند: -fPIC, -fcommon و همه -m پرچم های هدف

در زمان پیوند، این گزینه ها خوانده می شوند و دوباره اعمال می شوند. توجه داشته باشید که جریان
پیاده سازی هیچ تلاشی برای تشخیص مقادیر متضاد این گزینه ها انجام نمی دهد. اگر
فایل های مختلف دارای مقادیر گزینه متناقض هستند (به عنوان مثال، یک فایل با کامپایل شده است -fPIC
و دیگری اینطور نیست)، کامپایلر به سادگی از آخرین مقدار خوانده شده از بایت کد استفاده می کند
فایل ها. بنابراین، توصیه می شود که تمام فایل های شرکت کننده در را کامپایل کنید
همان لینک با همان گزینه ها

اگر LTO با اشیایی با پیوند C مواجه شود که با انواع ناسازگار به طور جداگانه اعلام شده است
واحدهای ترجمه باید به یکدیگر مرتبط شوند (رفتار تعریف نشده بر اساس ISO C99
6.2.7)، ممکن است یک تشخیص غیرکشنده صادر شود. رفتار هنوز در اجرا تعریف نشده است
زمان.

یکی دیگر از ویژگی های LTO این است که امکان اعمال بهینه سازی های بین رویه ای وجود دارد
روی فایل های نوشته شده به زبان های مختلف این نیاز به پشتیبانی در جبهه زبان دارد
پایان. در حال حاضر، جلوی C، C++ و Fortran قادر به انتشار GIMPLE هستند.
بایت کدها، بنابراین چیزی شبیه به این باید کار کند:

gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

توجه داشته باشید که لینک نهایی با انجام شده است g ++ برای دریافت کتابخانه های زمان اجرا C++ و
-lgfortran برای دریافت کتابخانه های زمان اجرا فرترن اضافه شده است. به طور کلی، هنگام مخلوط کردن
زبان‌ها در حالت LTO، باید از همان گزینه‌های فرمان پیوند مانند هنگام میکس استفاده کنید
زبان‌ها در تلفیقی معمولی (غیر LTO). تنها چیزی که باید اضافه کنید این است -flto به همه
دستورات را کامپایل و پیوند دهید

اگر فایل‌های شی حاوی بایت کد GIMPLE در یک آرشیو کتابخانه ذخیره می‌شوند، مثلاً
libfoo.a، امکان استخراج و استفاده از آنها در یک لینک LTO وجود دارد اگر از a استفاده می کنید
پیوند دهنده با پشتیبانی از افزونه برای فعال کردن این ویژگی، از پرچم استفاده کنید فیوز-لینکر-پلاگین
در زمان لینک:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

با فعال بودن پلاگین لینکر، پیوند دهنده فایل های GIMPLE مورد نیاز را از آن استخراج می کند
libfoo.a و آنها را به شورای همکاری خلیج فارس در حال اجرا منتقل می کند تا آنها را به بخشی از مجموعه تبدیل کند
تصویر GIMPLE بهینه می شود.

اگر از پیوند دهنده با پشتیبانی افزونه استفاده نمی کنید و/یا پیوند دهنده را فعال نمی کنید
افزونه، سپس اشیاء داخل libfoo.a طبق معمول استخراج و پیوند می شوند، اما آنها
در فرآیند بهینه سازی LTO شرکت نکنید.

بهینه سازی زمان لینک برای کار کردن نیازی به حضور کل برنامه ندارد.
اگر برنامه نیاز به هیچ علامتی برای صادرات نداشته باشد، امکان ترکیب وجود دارد
-flto و کل برنامه به بهینه سازهای بین رویه ای اجازه می دهد تا بیشتر استفاده کنند
مفروضات تهاجمی که ممکن است منجر به بهبود فرصت های بهینه سازی شود. استفاده از
کل برنامه هنگامی که افزونه پیوند دهنده فعال است مورد نیاز نیست (نگاه کنید به فیوز-لینکر-پلاگین).

اجرای فعلی LTO هیچ تلاشی برای تولید بایت کدی که هست انجام نمی دهد
قابل حمل بین انواع مختلف هاست فایل های بایت کد نسخه شده و وجود دارد
یک بررسی دقیق نسخه است، بنابراین فایل های بایت کد تولید شده در یک نسخه از GCC انجام نمی شود
با نسخه قدیمی/ جدیدتر GCC کار کنید.

بهینه سازی زمان لینک با تولید اطلاعات اشکال زدایی به خوبی کار نمی کند.
ترکیب -flto با -g در حال حاضر آزمایشی است و انتظار می رود اشتباه تولید کند
نتایج.

اگر اختیاری را مشخص کنید n، بهینه سازی و تولید کد در زمان پیوند انجام می شود
با استفاده موازی اجرا می شود n کارهای موازی با استفاده از نصب شده ساخت برنامه است.
متغیر محیطی خلق کنید ممکن است برای نادیده گرفتن برنامه استفاده شده استفاده شود. پیشفرض
ارزش برای n 1 است

همچنین می توانید مشخص کنید -flto=jobserver برای استفاده از حالت سرور شغلی ساخت گنو برای تعیین
تعداد مشاغل موازی این زمانی مفید است که Makefile در حال فراخوانی GCC باشد
اجرا به صورت موازی شما باید a + به دستور دستور در والد
برای این کار فایل ایجاد کنید. این گزینه احتمالا فقط در صورتی کار می کند که خلق کنید ساخت گنو است.

این گزینه به طور پیش فرض غیر فعال است

-flto-partition =جلبک
الگوریتم پارتیشن بندی مورد استفاده توسط بهینه ساز زمان پیوند را مشخص کنید. ارزش است
یا "1to1" برای تعیین پارتیشن بندی که فایل های منبع اصلی را منعکس می کند یا
"متعادل" برای مشخص کردن پارتیشن بندی به قطعات هم اندازه (در صورت امکان).
مشخص کردن "هیچ" به عنوان یک الگوریتم، پارتیشن بندی و پخش جریانی را به طور کامل غیرفعال می کند. در
مقدار پیش فرض "متعادل" است.

-flto-compression-level=n
این گزینه میزان فشرده سازی مورد استفاده برای زبان نوشتاری متوسط ​​را مشخص می کند
به فایل های شی LTO، و تنها در رابطه با حالت LTO معنادار است (-flto).
مقادیر معتبر 0 (بدون فشرده سازی) تا 9 (حداکثر فشرده سازی) است. ارزش های خارج از این
محدوده به 0 یا 9 بسته می شود. اگر گزینه داده نشده است، یک تعادل پیش فرض وجود دارد
تنظیم فشرده سازی استفاده می شود.

-flto-گزارش
گزارشی با جزئیات داخلی در مورد عملکرد بهینه‌ساز زمان پیوند چاپ می‌کند. را
محتوای این گزارش از نسخه ای به نسخه دیگر متفاوت است. قرار است برای GCC مفید باشد
توسعه دهندگان هنگام پردازش فایل های شی در حالت LTO (از طریق -flto).

به طور پیش فرض غیر فعال شده است

فیوز-لینکر-پلاگین
استفاده از پلاگین لینکر را در طول بهینه سازی زمان پیوند فعال می کند. این گزینه متکی است
در پشتیبانی از افزونه در پیوند دهنده، که به رنگ طلایی یا در GNU ld 2.21 یا موجود است
جدیدتر

این گزینه استخراج فایل های شی با بایت کد GIMPLE را از کتابخانه فعال می کند
آرشیوها این امر کیفیت بهینه سازی را با قرار دادن کدهای بیشتر در پیوند بهبود می بخشد.
بهینه ساز زمان این اطلاعات مشخص می کند که به چه نمادهایی می توان از خارج دسترسی داشت
(توسط شی غیر LTO یا در حین پیوند پویا). در نتیجه بهبود کیفیت کد روشن است
باینری ها (و کتابخانه های مشترکی که از قابلیت مشاهده پنهان استفاده می کنند) مشابه هستند
"-fwhole-program". دیدن -flto برای توضیح تأثیر این پرچم و نحوه انجام آن
از آن استفاده کنید.

زمانی که پشتیبانی LTO در GCC فعال باشد و GCC فعال باشد این گزینه به طور پیش فرض فعال می شود
برای استفاده با پلاگین های پشتیبانی کننده پیوند دهنده (GNU ld 2.21 یا جدیدتر یا طلایی) پیکربندی شده است.

-ffat-lto-اشیاء
اشیاء Fat LTO فایل های شی هستند که هم شامل زبان میانی و هم زبان هستند
کد شی این باعث می شود که آنها هم برای پیوند LTO و هم برای پیوند عادی قابل استفاده باشند. این
گزینه فقط در هنگام کامپایل با -flto و در زمان پیوند نادیده گرفته می شود.

-fno-fat-lto-objects زمان کامپایل را نسبت به LTO ساده بهبود می بخشد، اما به آن نیاز دارد
زنجیره ابزار کامل برای آگاهی از LTO. این به یک پیوند دهنده با پشتیبانی از پلاگین لینکر نیاز دارد
برای عملکرد اولیه علاوه بر این، nm، ar و ranlib باید از لینکر پشتیبانی کنند
پلاگین هایی برای اجازه دادن به یک محیط ساخت با امکانات کامل (قابلیت ایجاد استاتیک
کتابخانه ها و غیره).

پیش فرض این است -ffat-lto-اشیاء اما این پیش فرض در نظر گرفته شده است که در آینده تغییر کند
زمانی منتشر می شود که محیط های فعال پلاگین لینکر رایج تر شوند.

-FCOMPARE-elim
پس از تخصیص ثبت و تقسیم دستورالعمل تخصیص پس از ثبت نام، شناسایی کنید
دستورالعمل های حسابی که پرچم های پردازنده را شبیه به یک عملیات مقایسه محاسبه می کند
بر اساس آن حساب در صورت امکان، عملیات مقایسه صریح را حذف کنید.

این مجوز فقط برای اهداف خاصی اعمال می شود که نمی توانند به صراحت نشان دهند
عملیات مقایسه قبل از تکمیل تخصیص ثبت.

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-fuse-ld=طلا
استفاده از طلا پیوند دهنده به جای پیوند دهنده پیش فرض.

-fuse-ld=bfd
استفاده از ld.bfd پیوند دهنده به جای پیوند دهنده پیش فرض.

-fcprop-رجیستر می کند
پس از تخصیص ثبت و تقسیم دستورالعمل تخصیص پس از ثبت نام، ما
برای کاهش وابستگی‌های زمان‌بندی، یک پاس انتشار کپی انجام دهید
گاهی اوقات کپی را حذف کنید.

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-fprofile-correction
نمایه های جمع آوری شده با استفاده از یک باینری ابزار برای برنامه های چند رشته ای ممکن است
به دلیل به‌روزرسانی‌های پیشخوان از دست رفته، ناسازگار است. وقتی این گزینه مشخص شد، GCC این کار را انجام می دهد
از روش های اکتشافی برای اصلاح یا هموار کردن چنین ناسازگاری ها استفاده کنید. به طور پیش فرض، GCC خواهد بود
هنگامی که یک نمایه ناسازگار شناسایی می شود، یک پیام خطا منتشر می کند.

-fprofile-dir=مسیر
دایرکتوری را برای جستجوی فایل های داده پروفایل در آن تنظیم کنید مسیر. این گزینه
فقط بر داده های نمایه تولید شده توسط -fprofile-generate, -آزمایش-پوشش,
-fprofile-arcs و استفاده شده توسط -fprofile-use و -شاخه-احتمالات و مرتبط با آن
گزینه ها. می توان از هر دو مسیر مطلق و نسبی استفاده کرد. به طور پیش فرض، GCC از
دایرکتوری فعلی به عنوان مسیر، بنابراین فایل داده پروفایل در همان صفحه ظاهر می شود
دایرکتوری به عنوان فایل شی

-fprofile-generate
-fprofile-generate=مسیر
فعال کردن گزینه‌هایی که معمولاً برای برنامه‌های ابزار دقیق استفاده می‌شوند تا نمایه مفید تولید شود
برای کامپایل مجدد بعدی با بهینه سازی مبتنی بر بازخورد نمایه. شما باید استفاده کنید
-fprofile-generate هم هنگام کامپایل و هم هنگام پیوند دادن برنامه شما.

گزینه های زیر فعال هستند: "-fprofile-arcs"، "-fprofile-values"، "-fvpt".

If مسیر مشخص شده است، GCC به آن نگاه خواهد کرد مسیر برای یافتن داده های بازخورد نمایه
فایل ها. دیدن -fprofile-dir.

-fprofile-use
-fprofile-use=مسیر
بهینه‌سازی‌های هدایت شده با بازخورد نمایه و بهینه‌سازی‌ها به طور کلی سودآور را فعال کنید
فقط با بازخورد نمایه موجود است.

گزینه های زیر فعال هستند: "-fbranch-probabilities"، "-fvpt"،
"-funroll-loops"، "-fpeel-loops"، "-ftracer"

به‌طور پیش‌فرض، اگر نمایه‌های بازخورد با آن مطابقت نداشته باشند، GCC یک پیام خطا منتشر می‌کند
کد منبع این خطا را می توان با استفاده به یک هشدار تبدیل کرد -پوشش-عدم تطابق.
توجه داشته باشید این ممکن است منجر به بهینه سازی ضعیف کد شود.

If مسیر مشخص شده است، GCC به آن نگاه خواهد کرد مسیر برای یافتن داده های بازخورد نمایه
فایل ها. دیدن -fprofile-dir.

گزینه های زیر رفتار کامپایلر را در مورد محاسبات ممیز شناور کنترل می کنند.
این گزینه ها بین سرعت و درستی معامله می شوند. همه باید به طور خاص فعال شوند.

-float-store
متغیرهای ممیز شناور را در رجیسترها ذخیره نکنید و گزینه های دیگر را مهار نکنید
ممکن است تغییر کند که آیا یک مقدار ممیز شناور از یک ثبات یا حافظه گرفته شده است.

این گزینه از دقت بیش از حد نامطلوب در ماشین هایی مانند 68000 جلوگیری می کند
رجیسترهای شناور (از 68881) دقت بیشتری نسبت به "دبل" فرضی دارند.
داشتن. به طور مشابه برای معماری x86. برای اکثر برنامه ها، دقت بیش از حد
فقط خوب است، اما چند برنامه به تعریف دقیق IEEE شناور تکیه می کنند
نقطه. استفاده کنید -float-store برای چنین برنامه هایی، پس از تغییر آنها برای ذخیره همه
محاسبات میانی مربوط به متغیرها

-fexcess-precision=سبک
این گزینه اجازه می دهد تا کنترل بیشتری بر دقت بیش از حد در ماشین هایی که شناور هستند
رجیسترهای نقطه ای دقت بیشتری نسبت به انواع "float" و "double" IEEE دارند
پردازنده از عملیات گرد کردن به آن انواع پشتیبانی نمی کند. به صورت پیش فرض،
-fexcess-precision=سریع در حال اجرا است؛ این بدان معنی است که عملیات در
دقت رجیسترها و غیرقابل پیش بینی بودن آن هنگام گرد کردن به انواع
مشخص شده در کد منبع صورت می گیرد. هنگام کامپایل C، اگر
-fexcess-precision=استاندارد مشخص شده است سپس دقت بیش از حد از قوانین پیروی می کند
مشخص شده در ISO C99؛ به طور خاص، هر دو نقش و تخصیص باعث می شوند که مقادیر باشند
گرد شده به انواع معنایی آنها (در حالی که -float-store فقط بر تکالیف تأثیر می گذارد).
این گزینه به طور پیش فرض برای C فعال است اگر یک گزینه انطباق دقیق مانند
-std=c99 استفاده می شود.

-fexcess-precision=استاندارد برای زبان هایی غیر از C اجرا نمی شود و هیچ
اثر اگر -بهینه‌سازی‌های ریاضی و سرگرم‌کننده or سریع-ریاضی مشخص شده است. در x86، آن را
همچنین هیچ تاثیری ندارد اگر -mfpMath = SSE or -mfpmath=sse+387 مشخص شده است؛ در سابق
در مورد، معنای IEEE بدون دقت بیش از حد اعمال می شود، و در مورد دوم، گرد کردن است
غیر قابل پیش بینی.

سریع-ریاضی
مجموعه -fno-math-errno, -بهینه‌سازی‌های ریاضی و سرگرم‌کننده, -فقط ریاضی محدود,
-منهای دور, -fno-signaling-nans و -fcx-limited-range.

این گزینه باعث می شود که ماکرو پیش پردازنده "__FAST_MATH__" تعریف شود.

این گزینه توسط هیچ کدام روشن نمی شود -O علاوه بر این گزینه سریع از آنجایی که می تواند منجر شود
خروجی نادرست برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارد
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند.

-fno-math-errno
پس از فراخوانی توابع ریاضی که با یک واحد اجرا می شوند، ERRNO را تنظیم نکنید
دستورالعمل، به عنوان مثال، sqrt. برنامه ای که برای خطاهای ریاضی به استثناهای IEEE متکی است
هندلینگ ممکن است بخواهد از این پرچم برای سرعت و در عین حال حفظ محاسبات IEEE استفاده کند
سازگاری.

این گزینه توسط هیچ کدام روشن نمی شود -O گزینه زیرا می تواند منجر به خروجی نادرست شود
برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارند
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند.

پیش فرض این است -fmath-errno.

در سیستم های داروین، کتابخانه ریاضی هرگز "errno" را تنظیم نمی کند. بنابراین هیچ دلیلی وجود ندارد
تا کامپایلر این امکان را در نظر بگیرد که ممکن است، و -fno-math-errno هست
به طور پیش فرض

-بهینه‌سازی‌های ریاضی و سرگرم‌کننده
بهینه سازی هایی برای محاسبات ممیز شناور مجاز است که (الف) آرگومان ها و
نتایج معتبر هستند و (ب) ممکن است استانداردهای IEEE یا ANSI را نقض کنند. هنگامی که در زمان پیوند استفاده می شود،
ممکن است شامل کتابخانه ها یا فایل های راه اندازی باشد که کلمه کنترل پیش فرض FPU یا
سایر بهینه سازی های مشابه

این گزینه توسط هیچ کدام روشن نمی شود -O گزینه زیرا می تواند منجر به خروجی نادرست شود
برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارند
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند. را قادر می سازد
-fno-signed-zeros, -fno-به دام انداختن-ریاضی, -تعدادی-ریاضی و -مقاومتی-ریاضی.

پیش فرض این است -fno-unsafe-math-optimizations.

-تعدادی-ریاضی
اجازه ارتباط مجدد عملوندها در یک سری عملیات ممیز شناور. این
با احتمالاً تغییر در نتیجه محاسبات، استاندارد زبان ISO C و C++ را نقض می کند.
توجه: مرتب کردن مجدد ممکن است علامت صفر را تغییر دهد و همچنین NaN ها را نادیده بگیرد و از یا
ایجاد underflow یا overflow (و بنابراین نمی توان روی کدهایی که متکی به گرد کردن هستند استفاده کرد
رفتاری مانند "(x + 2**52) - 2**52". همچنین ممکن است مقایسه های ممیز شناور را دوباره ترتیب دهد و
بنابراین زمانی که نیاز به مقایسه سفارشی است، نمی توان از آن استفاده کرد. این گزینه به آن نیاز دارد
هر دو -fno-signed-zeros و -fno-به دام انداختن-ریاضی در حال اجرا باشد. علاوه بر این، آن را نمی سازد
حس بسیار با -بنیادسازی-ریاضی. برای Fortran این گزینه به طور خودکار فعال می شود زمانی که
هر دو -fno-signed-zeros و -fno-به دام انداختن-ریاضی در حال اجرا هستند.

پیش فرض این است -fno-تداعی-ریاضی.

-مقاومتی-ریاضی
در صورت این، به جای تقسیم بر مقدار، اجازه استفاده متقابل یک مقدار را بدهید
بهینه سازی را امکان پذیر می کند. به عنوان مثال "x / y" را می توان با "x * (1/y)" جایگزین کرد
در صورتی مفید است که "(1/y)" در معرض حذف زیرعبارات رایج باشد. توجه داشته باشید که این
دقت را از دست می دهد و تعداد فلاپ هایی را که روی مقدار کار می کنند افزایش می دهد.

پیش فرض این است -fno-reciprocal-math.

-فقط ریاضی محدود
اجازه بهینه سازی برای محاسبات ممیز شناور که آرگومان ها و
نتایج NaN یا +-Infs نیستند.

این گزینه توسط هیچ کدام روشن نمی شود -O گزینه زیرا می تواند منجر به خروجی نادرست شود
برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارند
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند.

پیش فرض این است -فقط-fno-finite-math.

-fno-signed-zeros
اجازه بهینه سازی برای محاسبات ممیز شناور که علامت صفر را نادیده می گیرد.
محاسبات IEEE رفتار مقادیر متمایز +0.0 و -0.0 را مشخص می کند که سپس
ساده سازی عباراتی مانند x+0.0 یا 0.0*x (حتی با
-فقط ریاضی محدود). این گزینه به این معنی است که علامت یک نتیجه صفر نیست
قابل توجه.

پیش فرض این است -fsigned-صفرها.

-fno-به دام انداختن-ریاضی
کامپایل کد با این فرض که عملیات ممیز شناور نمی تواند کاربر قابل مشاهده است
تله ها این تله ها شامل تقسیم بر صفر، سرریز، زیر جریان، نتیجه غیر دقیق و
عملیات نامعتبر این گزینه به آن نیاز دارد -fno-signaling-nans در حال اجرا باشد.
تنظیم این گزینه ممکن است کدهای سریع تری را در صورت تکیه بر محاسبات "بدون توقف" IEEE امکان پذیر کند.
به عنوان مثال.

این گزینه هرگز نباید توسط هیچکس روشن شود -O گزینه از آنجایی که می تواند منجر شود
خروجی نادرست برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارد
قوانین/مشخصات برای توابع ریاضی.

پیش فرض این است -trapping-math.

-بنیادسازی-ریاضی
تبدیل ها و بهینه سازی هایی را که گرد کردن ممیز شناور پیش فرض را فرض می کنند غیرفعال کنید
رفتار - اخلاق. این دور به صفر برای همه تبدیل‌های ممیز شناور به عدد صحیح است و
گرد به نزدیک ترین برای همه برش های حسابی دیگر. این گزینه باید باشد
برای برنامه هایی که حالت گرد کردن FP را به صورت پویا تغییر می دهند، یا ممکن است مشخص شود
با حالت گرد کردن غیر پیش فرض اجرا می شود. این گزینه تا زدن دائمی را غیرفعال می کند
عبارات ممیز شناور در زمان کامپایل (که ممکن است تحت تأثیر حالت گرد کردن قرار گیرند)
و تبدیلات حسابی که در حضور وابسته به علامت ناامن هستند
حالت های گرد کردن

پیش فرض این است -منهای دور.

این گزینه آزمایشی است و در حال حاضر تضمینی برای غیرفعال کردن همه GCC نمی دهد
بهینه سازی هایی که تحت تاثیر حالت گرد کردن قرار می گیرند. ممکن است نسخه های آینده GCC ارائه شود
کنترل دقیق تر این تنظیم با استفاده از پراگما "FENV_ACCESS" C99. این خط فرمان
گزینه برای تعیین حالت پیش فرض برای "FENV_ACCESS" استفاده خواهد شد.

-fsignaling-nans
کامپایل کد با این فرض که IEEE سیگنالینگ NaNs ممکن است تله های قابل مشاهده توسط کاربر در طول ایجاد کند
عملیات ممیز شناور تنظیم این گزینه بهینه سازی هایی را که ممکن است تغییر کنند غیرفعال می کند
تعداد استثناهای قابل مشاهده با سیگنال NaNs. این گزینه دلالت دارد
-trapping-math.

این گزینه باعث می شود که ماکرو پیش پردازنده "__SUPPORT_SNAN__" تعریف شود.

پیش فرض این است -fno-signaling-nans.

این گزینه آزمایشی است و در حال حاضر تضمینی برای غیرفعال کردن همه GCC نمی دهد
بهینه‌سازی‌هایی که بر رفتار سیگنال‌دهی NaN تأثیر می‌گذارند.

-fsingle-precision-constant
به جای تبدیل ضمنی، ثابت های ممیز شناور را به عنوان یک دقت واحد در نظر بگیرید
آنها را به ثابت های با دقت دو برابر می کنند.

-fcx-limited-range
هنگامی که فعال است، این گزینه بیان می کند که یک مرحله کاهش محدوده زمانی لازم نیست
انجام تقسیم پیچیده همچنین، هیچ بررسی وجود ندارد که آیا نتیجه a
ضرب یا تقسیم مختلط "NaN + I*NaN" است، با تلاش برای نجات
وضعیت در آن مورد پیش فرض است -fno-cx-limited-range، اما توسط فعال می شود
سریع-ریاضی.

این گزینه تنظیمات پیش فرض ISO C99 "CX_LIMITED_RANGE" را کنترل می کند.
با این وجود، این گزینه برای همه زبان ها اعمال می شود.

-fcx-fortran-rules
ضرب و تقسیم مختلط از قوانین فرترن پیروی می کنند. کاهش دامنه به صورت انجام می شود
بخشی از تقسیم پیچیده است، اما هیچ بررسی وجود ندارد که آیا نتیجه یک مجتمع است
ضرب یا تقسیم "NaN + I*NaN" است، با تلاش برای نجات وضعیت
در این مورد.

پیش فرض این است -fno-cx-fortran-rules.

گزینه های زیر بهینه سازی هایی را کنترل می کنند که ممکن است عملکرد را بهبود بخشند، اما اینطور نیستند
فعال شده توسط هر -O گزینه ها. این بخش شامل گزینه های آزمایشی است که ممکن است تولید کنند
کد شکسته

-شاخه-احتمالات
پس از اجرای یک برنامه کامپایل شده با -fprofile-arcs، می توانید آن را برای بار دوم کامپایل کنید
با استفاده از -شاخه-احتمالات، برای بهبود بهینه سازی بر اساس تعداد دفعات
هر شاخه گرفته شد. زمانی که برنامه با -fprofile-arcs خارج می شود ذخیره می کند
اجرای قوس در فایلی به نام خوانده می شود sourcename.gcda برای هر فایل منبع در
اطلاعات موجود در این فایل داده بسیار به ساختار تولید شده بستگی دارد
کد، بنابراین باید از کد منبع یکسان و گزینه های بهینه سازی یکسان برای هر دو استفاده کنید
تالیفات

با -شاخه-احتمالات، GCC قرار می دهد REG_BR_PROB روی هر کدام یادداشت کنید JUMP_INSN و
CALL_INSN. از این موارد می توان برای بهبود بهینه سازی استفاده کرد. در حال حاضر فقط مورد استفاده قرار می گیرند
در یک مکان: در reorg.c، به جای حدس زدن به کدام مسیر یک شاخه بیشتر احتمال دارد
گرفتن، REG_BR_PROB از مقادیر برای تعیین دقیق مسیر بیشتر استفاده می شود
غالبا.

-fprofile-values
اگر با -fprofile-arcs، کد را اضافه می کند تا مقداری داده در مورد مقادیر از
عبارات در برنامه جمع آوری شده است.

با -شاخه-احتمالات، داده های جمع آوری شده از مقادیر پروفایل را بازخوانی می کند
عباراتی برای استفاده در بهینه سازی

فعال شده با -fprofile-generate و -fprofile-use.

-fvpt
اگر با -fprofile-arcs، به کامپایلر دستور می دهد تا یک کد برای جمع آوری اضافه کند
اطلاعاتی در مورد مقادیر عبارات

با -شاخه-احتمالات، داده های جمع آوری شده را بازخوانی می کند و در واقع آن را انجام می دهد
بهینه سازی بر اساس آنها در حال حاضر بهینه سازی ها شامل تخصص
عملیات تقسیم با استفاده از دانش در مورد مقدار مخرج.

-frename-registers
با استفاده از رجیسترهای سمت چپ، سعی کنید از وابستگی نادرست در کد برنامه ریزی شده جلوگیری کنید
پس از تخصیص ثبت نام به پایان رسید. این بهینه سازی بیشترین سود را برای پردازنده ها خواهد داشت
تعداد زیادی ثبت نام بسته به فرمت اطلاعات اشکال زدایی پذیرفته شده توسط هدف،
با این حال، می تواند اشکال زدایی را غیرممکن کند، زیرا متغیرها دیگر در a باقی نمی مانند
"ثبت خانه".

فعال به طور پیش فرض با -funroll-loops و -fpeel-loops.

ردیاب
برای بزرگ کردن اندازه سوپر بلوک، تکثیر دم را انجام دهید. این تحول ساده می کند
جریان کنترل تابع به بهینه سازی های دیگر اجازه می دهد تا کار بهتری انجام دهند.

فعال شده با -fprofile-use.

-funroll-loops
حلقه‌هایی که تعداد تکرارهای آن‌ها در زمان کامپایل یا بعد از آن قابل تعیین است را باز کنید
ورود به حلقه -funroll-loops دلالت دارد -frerun-cse-after-loop, - وب و
-frename-registers. همچنین لایه برداری کامل حلقه را روشن می کند (یعنی حذف کامل
حلقه هایی با تعداد تکرار ثابت کم). این گزینه کد را بزرگتر می کند و
ممکن است باعث شود سریعتر اجرا شود یا نه.

فعال شده با -fprofile-use.

-funroll-all-loops
همه حلقه ها را باز کنید، حتی اگر تعداد تکرارهای آنها در زمانی که حلقه است نامشخص باشد
وارد شد. این معمولا باعث می شود برنامه ها کندتر اجرا شوند. -funroll-all-loops حاکی از
گزینه های مشابه -funroll-loops.

-fpeel-loops
حلقه های لایه برداری که اطلاعات کافی برای آنها وجود دارد که زیاد غلت نمی خورند (از
بازخورد نمایه). همچنین لایه برداری کامل حلقه را روشن می کند (یعنی حذف کامل
حلقه هایی با تعداد تکرار ثابت کم).

فعال شده با -fprofile-use.

-fmove-loop-invariants
پاس حرکت ثابت حلقه را در بهینه ساز حلقه RTL فعال می کند. در سطح فعال شد
-O1

-funswitch-loops
شاخه ها را با شرایط ثابت حلقه به خارج از حلقه، با تکراری از حلقه منتقل کنید
حلقه روی هر دو شاخه (بر اساس نتیجه شرایط اصلاح شده است).

-function-sections
بخش‌های fdata
هر تابع یا آیتم داده را در بخش خود در فایل خروجی در صورت هدف قرار دهید
از بخش های دلخواه پشتیبانی می کند. نام تابع یا نام آیتم داده
نام بخش را در فایل خروجی تعیین می کند.

از این گزینه ها در سیستم هایی استفاده کنید که پیوند دهنده می تواند بهینه سازی هایی را برای بهبود انجام دهد
محل مرجع در فضای دستورالعمل اکثر سیستم ها از شی ELF استفاده می کنند
فرمت و پردازنده های SPARC که Solaris 2 را اجرا می کنند دارای پیوندهایی با چنین بهینه سازی هایی هستند.
AIX ممکن است این بهینه سازی ها را در آینده داشته باشد.

فقط زمانی از این گزینه ها استفاده کنید که مزایای قابل توجهی از انجام این کار وجود داشته باشد. وقتی تو
این گزینه ها را مشخص کنید، اسمبلر و لینکر شی بزرگتر و ایجاد می کنند
فایل های اجرایی و همچنین کندتر خواهند بود. شما نمی توانید از "gprof" در همه استفاده کنید
سیستم ها اگر این گزینه را مشخص کنید و در صورت وجود ممکن است با اشکال زدایی مشکل داشته باشید
هم این گزینه و هم را مشخص کنید -g.

-fbranch-target-load-optimize
بهینه سازی بار رجیستر هدف شاخه را قبل از threading/prologue/epilogue انجام دهید.
استفاده از رجیسترهای هدف معمولاً فقط در هنگام بارگذاری مجدد و در نتیجه بالا بردن قابل مشاهده است
بارگذاری خارج از حلقه و انجام زمان‌بندی بین بلوکی نیاز به یک بهینه‌سازی جداگانه دارد
عبور.

-fbranch-هدف-بار-بهینه 2
بهینه سازی بار رجیستر هدف شاخه را بعد از threading/prologue/epilogue انجام دهید.

-fbtr-bb-exclusive
هنگام انجام بهینه‌سازی بار ثبت هدف شاخه، از هدف شعبه مجدد استفاده نکنید
در هر بلوک اصلی ثبت می شود.

محافظ چوب
برای بررسی سرریزهای بافر، مانند حملات شکست پشته، کد اضافی منتشر کنید. این
با افزودن یک متغیر محافظ به توابع دارای اشیاء آسیب پذیر انجام می شود. این
شامل توابعی است که alloca را فراخوانی می کنند و توابعی با بافرهای بزرگتر از 8 بایت.
هنگامی که یک تابع وارد می شود، محافظ ها مقداردهی اولیه می شوند و پس از آن بررسی می شوند
تابع خارج می شود اگر یک بررسی گارد ناموفق باشد، یک پیام خطا چاپ می شود و برنامه
خارج می شود.

توجه: در اوبونتو 6.10 و نسخه های بعدی این گزینه به طور پیش فرض برای C، C++ فعال است،
ObjC، ObjC++، اگر هیچ کدام از آنها وجود نداشت -fno-stack-protector, -nostdlib، نه -مناسب هستند
پیدا شده است.

-fstack-protector-all
پسندیدن محافظ چوب به جز اینکه همه عملکردها محافظت می شوند.

-قطعات-لنگرها
سعی کنید تعداد محاسبات نشانی نمادین را با استفاده از "لنگر" مشترک کاهش دهید.
نمادها برای آدرس دادن به اشیاء نزدیک. این تبدیل می تواند به کاهش تعداد کمک کند
از ورودی های GOT و دسترسی های GOT در برخی از اهداف.

به عنوان مثال، اجرای تابع زیر "foo":

static int a, b, c;
int foo (void) { return a + b + c; }

معمولاً آدرس هر سه متغیر را محاسبه می کند، اما اگر آن را کامپایل کنید
با -قطعات-لنگرها، از یک نقطه لنگر مشترک به متغیرها دسترسی خواهد داشت
بجای. اثر مشابه شبه کد زیر است (که C معتبر نیست):

int foo (باطل)
{
ثبت نام int *xr = &x;
xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

همه اهداف از این گزینه پشتیبانی نمی کنند.

--پارام نام=ارزش
در برخی مکان‌ها، GCC از ثابت‌های مختلفی برای کنترل میزان بهینه‌سازی استفاده می‌کند
انجام شد. به عنوان مثال، GCC توابعی را که بیش از مقدار معینی را شامل می شوند، به صورت درون خطی نمی کند
تعداد دستورالعمل می توانید برخی از این ثابت ها را در خط فرمان کنترل کنید
با استفاده از --پارام گزینه.

نام پارامترهای خاص، و معنای مقادیر، به آن گره خورده است
داخلی کامپایلر، و ممکن است بدون اطلاع قبلی در آینده تغییر کنند
منتشر شده.

در هر مورد، ارزش یک عدد صحیح است انتخاب های مجاز برای نام داده می شوند
جدول زیر:

قابل پیش بینی-شاخه-نتیجه
زمانی که پیش بینی می شود شاخه با احتمال کمتر از این آستانه گرفته شود
(در درصد)، سپس به خوبی قابل پیش بینی در نظر گرفته می شود. پیش فرض 10 است.

max-crossjump-edges
حداکثر تعداد لبه های ورودی که برای پرش عرضی باید در نظر گرفته شود. الگوریتم
استفاده شده توسط fcrossjumping تعداد یال های ورودی به هر بلوک O(N^2) است.
افزایش مقادیر به معنای بهینه‌سازی تهاجمی‌تر است که زمان کامپایل را افزایش می‌دهد
افزایش احتمالاً با بهبود کوچک در اندازه اجرایی.

min-crossjump-insns
حداقل تعداد دستورالعمل هایی که باید در انتهای دو بلوک مطابقت داده شود
قبل از اینکه پرش متقاطع بر روی آنها انجام شود. این مقدار در مورد نادیده گرفته می شود
جایی که تمام دستورالعمل‌های بلوکی که از آن پرش می‌شود مطابقت دارند. در
مقدار پیش فرض 5 است.

max-grow-copy-bb-insns
حداکثر ضریب گسترش اندازه کد هنگام کپی کردن بلوک های اصلی به جای
پریدن بسط نسبت به یک دستورالعمل پرش است. مقدار پیش فرض است
8.

max-goto-duplication-insns
حداکثر تعداد دستورالعمل‌ها برای کپی کردن به بلوکی که به a می‌پرد
را محاسبه کرد. برای جلوگیری از رفتار O(N^2) در تعدادی از پاس ها، GCC فاکتورها را فاکتور می کند
در اوایل فرآیند کامپایل، gotos را محاسبه می‌کند و تا اواخر آن‌ها را از بین می‌برد
ممکن است. فقط جهش های محاسبه شده در انتهای یک بلوک اصلی با حداکثر حداکثر
goto-duplication-insns بدون عامل هستند. مقدار پیش فرض 8 است.

max-delay-slot-insn-search
حداکثر تعداد دستورالعمل هایی که باید در هنگام جستجوی دستورالعمل در نظر گرفته شوند
یک شکاف تاخیر را پر کنید اگر بیش از این تعداد دلخواه دستورالعمل باشد
جستجو، صرفه جویی در زمان پر کردن شکاف تاخیر حداقل خواهد بود، بنابراین توقف کنید
جستجوکردن. افزایش مقادیر به معنای بهینه سازی تهاجمی تر است که باعث می شود
زمان کامپایل با بهبودی اندک در زمان اجرا افزایش می یابد.

max-delay-slot-live-search
هنگام تلاش برای پر کردن شکاف‌های تاخیر، حداکثر تعداد دستورالعمل‌ها را در نظر بگیرید
هنگام جستجو برای بلوکی با اطلاعات ثبت زنده معتبر. افزایش این
مقدار دلخواه انتخاب شده به معنای بهینه سازی تهاجمی تر، افزایش مقدار است
زمان تدوین زمانی که کد شکاف تاخیر وجود دارد، این پارامتر باید حذف شود
برای حفظ نمودار کنترل جریان بازنویسی شده است.

max-gcse-memory
حداکثر مقدار تقریبی حافظه ای که به منظور تخصیص داده می شود
بهینه سازی حذف زیرعبارت مشترک جهانی را انجام دهید. اگر حافظه بیشتر
بیش از آنچه مشخص شده است، بهینه سازی انجام نخواهد شد.

max-gcse-insertion-ratio
اگر نسبت درج عبارت به حذف بزرگتر از این مقدار برای
هر عبارتی، سپس RTL PRE عبارت را درج یا حذف می کند و بنابراین خارج می شود
محاسبات جزئی زائد در جریان دستورالعمل مقدار پیش فرض است
20.

max-pending-list-length
حداکثر تعداد زمان‌بندی وابستگی‌های معلق قبل از شستشو مجاز است
وضعیت فعلی و شروع دوباره عملکردهای بزرگ با چند شاخه یا تماس
می تواند لیست های بسیار بزرگی ایجاد کند که بیهوده حافظه و منابع را مصرف می کند.

max-modulo-backtrack-attempts
حداکثر تعداد تلاش‌هایی که زمان‌بندی باید هنگام مدول کردن برای بازگشت به عقب انجام دهد
برنامه ریزی یک حلقه مقادیر بزرگتر می توانند زمان کامپایل را به صورت تصاعدی افزایش دهند.

max-inline-insns-single
چندین پارامتر خط داخلی درخت مورد استفاده در gcc را کنترل می کنند. این عدد تعیین می کند
حداکثر تعداد دستورالعمل ها (شمرده شده در نمایندگی داخلی شورای همکاری خلیج فارس) در الف
تابع تکی که خط داخلی درخت برای درون ریزی در نظر می گیرد. فقط این
بر توابع اعلام شده درون خطی و متدهای پیاده سازی شده در یک اعلان کلاس تأثیر می گذارد
(C++). مقدار پیش فرض 400 است.

Max-Inline-insns-auto
هنگام استفاده از توابع -finline (شامل در -O3)، بسیاری از توابع است که
در غیر این صورت برای درون نویسی توسط کامپایلر مورد بررسی قرار خواهد گرفت. به
آن توابع، یک محدودیت متفاوت (محدود کننده تر) در مقایسه با توابع
اعلام شده درون خطی را می توان اعمال کرد. مقدار پیش فرض 40 است.

کارکردهای بزرگ
محدودیتی که توابع واقعاً بزرگ را مشخص می کند. برای توابع بزرگتر از این حد
پس از inlining، inlining توسط محدود شده است --پارام عملکرد بزرگ - رشد. این
پارامتر در درجه اول برای جلوگیری از زمان فشرده سازی شدید ناشی از غیر
الگوریتم های خطی مورد استفاده در قسمت پشتی مقدار پیش فرض 2700 است.

عملکرد بزرگ - رشد
حداکثر رشد تابع بزرگ ناشی از خط‌بندی را بر حسب درصد مشخص می‌کند. در
مقدار پیش فرض 100 است که رشد عملکرد بزرگ را به 2.0 برابر اصلی محدود می کند
اندازه.

واحدهای بزرگ
محدودیتی که واحد ترجمه بزرگ را مشخص می کند. رشد ناشی از داخل شدن واحدها
بزرگتر از این حد محدود شده است --پارام درون خطی واحد رشد. برای واحدهای کوچک
این ممکن است خیلی تنگ باشد (واحد متشکل از تابع A که درون خطی است و
B که فقط سه بار A را صدا می کند. اگر B نسبت به A کوچک باشد، رشد واحد است
300% است و با این حال چنین خط‌بندی بسیار منطقی است. برای واحدهای بسیار بزرگ متشکل از
توابع خطی کوچک با این حال حد رشد واحد کلی مورد نیاز است
از انفجار نمایی اندازه کد جلوگیری کنید. بنابراین برای واحدهای کوچکتر، اندازه است
به افزایش --پارام واحدهای بزرگ قبل از درخواست --پارام درون خطی واحد رشد.
پیش فرض 10000 است

درون خطی واحد رشد
حداکثر رشد کلی واحد کامپایل ناشی از خط‌بندی را مشخص می‌کند. در
مقدار پیش فرض 30 است که رشد واحد را به 1.3 برابر اندازه اصلی محدود می کند.

ipcp-unit-growth
حداکثر رشد کلی واحد کامپایل ناشی از بین رویه ای را مشخص می کند
انتشار ثابت مقدار پیش فرض 10 است که رشد واحد را به 1.1 محدود می کند
برابر اندازه اصلی

قاب پشته بزرگ
محدودیتی که قاب های پشته بزرگ را مشخص می کند. در حالی که الگوریتم درون خطی در تلاش است
تا بیش از حد از این حد عبور نکنیم. مقدار پیش فرض 256 بایت است.

پشته بزرگ-قاب-رشد
حداکثر رشد فریم‌های پشته‌ای بزرگ را که به‌دلیل قرار گرفتن درونی در درصد ایجاد می‌شود، مشخص می‌کند.
مقدار پیش فرض 1000 است که رشد قاب پشته های بزرگ را به 11 برابر محدود می کند
اندازه اصلی

max-inline-insns-recursive
max-inline-insns-recursive-auto
حداکثر تعداد دستورالعمل‌های کپی خارج از خط از درون خطی بازگشتی خود را مشخص می‌کند
تابع می تواند با انجام درونی بازگشتی رشد کند.

برای توابع اعلام شده درون خطی --پارام max-inline-insns-recursive در نظر گرفته شده است
حساب. برای تابعی که به صورت درون خطی اعلام نشده است، درون خطی بازگشتی تنها زمانی اتفاق می افتد که
توابع -finline (شامل در -O3) فعال است و --پارام max-inline-insns-
بازگشتی-خودکار استفاده می شود. مقدار پیش فرض 450 است.

حداکثر عمق درون خطی بازگشتی
max-inline-recursive-depth-auto
حداکثر عمق بازگشتی را که توسط خط درونی بازگشتی استفاده می شود، مشخص می کند.

برای توابع اعلام شده درون خطی --پارام حداکثر عمق درون خطی بازگشتی در نظر گرفته شده است
حساب. برای تابعی که به صورت درون خطی اعلام نشده است، درون خطی بازگشتی تنها زمانی اتفاق می افتد که
توابع -finline (شامل در -O3) فعال است و --پارام حدا
عمق خودکار استفاده می شود. مقدار پیش فرض 8 است.

min-inline-recursive-probability
درون خطی بازگشتی فقط برای تابعی که بازگشت عمیق درون دارد سودآور است
متوسط ​​است و می تواند برای عملکردی که عمق بازگشت کمی دارد با افزایش آن صدمه بزند
اندازه پرولوگ یا پیچیدگی بدنه تابع به بهینه سازهای دیگر.

وقتی بازخورد نمایه در دسترس است (نگاه کنید به -fprofile-generate) بازگشت واقعی
عمق را می توان از روی احتمال بازگشت تابع از طریق تماس داده شده حدس زد
اصطلاح. این پارامتر، inlining را فقط برای فراخوانی عبارت who محدود می کند
احتمال بیشتر از آستانه داده شده (در درصد). مقدار پیش فرض 10 است.

اولیه-inlining-insns
رشدی که inliner اولیه می تواند ایجاد کند را مشخص کنید. در واقع مقدار آن را افزایش می دهد
درون‌نویسی برای کد دارای جریمه انتزاعی بزرگ. مقدار پیش فرض 10 است.

max-early-inliner-iterations
max-early-inliner-iterations
محدودیت تکرارهای داخلی اولیه. این اساساً تعداد تودرتو را محدود می کند
تماس های غیرمستقیم اولیه داخلی می تواند حل شود. زنجیرهای عمیق تر هنوز دیر رسیدگی می شود
خط کشی

قابلیت تقسیم مشترک
قابلیت تقسیم مشترک
احتمال (بر حسب درصد) که تابع درون خطی C++ با قابلیت مشاهده comdat خواهد بود
به اشتراک گذاشته شده در چندین واحد کامپایل. مقدار پیش فرض 20 است.

min-vect-loop-bound
حداقل تعداد تکرارهایی که تحت آن یک حلقه زمانی که بردار نمی شود
-ftree-vectorize استفاده می شود. تعداد تکرارها پس از بردارسازی نیاز دارد
بزرگتر از مقدار مشخص شده توسط این گزینه باشد تا امکان برداری را فراهم کند. در
مقدار پیش فرض 0 است.

gcse-cost-distance-ratio
ضریب مقیاس در محاسبه حداکثر فاصله یک عبارت را می توان با آن جابجا کرد
بهینه سازی GCSE این در حال حاضر فقط در کد بالابر پاس پشتیبانی می شود.
هر چه این نسبت بزرگتر باشد، بالا بردن کد تهاجمی تر با ساده خواهد بود
عبارت‌ها، یعنی عباراتی که هزینه کمتری دارند gcse-unrestricted-
هزینه. مشخص کردن 0 باعث غیرفعال کردن عبارات ساده می شود. پیشفرض
مقدار 10 است.

gcse-unrestricted-cost
هزینه، تقریباً به عنوان هزینه یک دستورالعمل ماشین معمولی اندازه گیری می شود
که بهینه سازی های GCSE فاصله ای را که یک عبارت می تواند طی کند محدود نمی کند.
این در حال حاضر فقط در کد بالابر پاس پشتیبانی می شود. هر چه هزینه کمتر،
بالا بردن کد تهاجمی تر خواهد بود. تعیین 0 به همه اجازه می دهد
عباراتی برای پیمودن مسافت های نامحدود مقدار پیش فرض 3 است.

حداکثر عمق بالابر
عمق جستجو در درخت غالب برای عباراتی که باید بالا بروند. این مورد استفاده قرار می گیرد
برای جلوگیری از رفتار درجه دوم در الگوریتم بالابر. مقدار 0 اجتناب خواهد شد
جستجو را محدود می کند، اما ممکن است کامپایل توابع عظیم را کند کند. پیشفرض
مقدار 30 است.

حداکثر-دم-ادغام-مقایسه
حداکثر مقدار bbs مشابه برای مقایسه یک bb با. این برای اجتناب استفاده می شود
رفتار درجه دوم در ادغام دم درختان مقدار پیش فرض 10 است.

حداکثر-دم-ادغام-تکرار
حداکثر مقدار تکرار عبور از تابع. این عادت دارد
محدود کردن زمان تدوین در ادغام دم درخت مقدار پیش فرض 2 است.

max-unrolled-insns
حداکثر تعداد دستوراتی که یک حلقه باید داشته باشد اگر آن حلقه باشد
unrolled شد، و اگر حلقه باز شود، تعیین می کند که کد حلقه چند برابر شود
باز شده است.

max-average-unrolled-insns
حداکثر تعداد دستورات مغرضانه با احتمال اجرای آنها که
یک حلقه باید داشته باشد اگر آن حلقه باز شود، و اگر حلقه باز شود، باید آن را داشته باشد
تعیین می کند که کد حلقه چند بار باز شده است.

حداکثر زمان بازگشایی
حداکثر تعداد باز شدن یک حلقه.

max-peeled-insns
حداکثر تعداد دستوراتی که یک حلقه باید داشته باشد در صورت جدا شدن آن حلقه،
و اگر حلقه لایه برداری شود، تعیین می کند که کد حلقه چند بار لایه برداری شود.

حداکثر زمان لایه برداری
حداکثر تعداد لایه برداری از یک حلقه.

max-complely-peeled-insns
حداکثر تعداد insns یک حلقه کاملاً کنده شده.

حداکثر زمان لایه برداری
حداکثر تعداد تکرار یک حلقه که برای لایه برداری کامل مناسب باشد.

حداکثر-کاملاً لایه برداری-حلقه-لانه-عمق
حداکثر عمق یک لانه حلقه مناسب برای لایه برداری کامل.

max-unswitch-insns
حداکثر تعداد insns یک حلقه بدون سوئیچ.

حداکثر سطح حذف سوئیچ
حداکثر تعداد انشعابات بدون سوئیچ در یک حلقه.

لیم گران
حداقل هزینه یک عبارت گران قیمت در حرکت ثابت حلقه.

iv-consider-all-candidates-bound
محدود به تعداد نامزدها برای متغیرهای القایی کمتر از همه نامزدها
برای هر استفاده در بهینه سازی متغیر القایی در نظر گرفته می شوند. فقط بیشترین
اگر نامزدهای بیشتری وجود داشته باشد، نامزدهای مربوطه در نظر گرفته می شوند تا از آن اجتناب شود
پیچیدگی زمانی درجه دوم

iv-max-considered-uses
بهینه‌سازی‌های متغیر القایی از حلقه‌هایی که حاوی القاء بیشتری هستند صرفنظر می‌کنند
کاربردهای متغیر

iv-always-prune-cand-set-bound
اگر تعداد نامزدهای مجموعه از این مقدار کمتر باشد، همیشه سعی می کنیم
وقتی یک iv جدید اضافه می‌شود، iv‌های غیرضروری را در هنگام بهینه‌سازی مجموعه حذف کنید
به مجموعه.

scev-max-expr-size
محدود به اندازه عبارات استفاده شده در تحلیلگر تکامل اسکالر. بزرگ
عبارات تحلیلگر را کند می کند.

scev-max-expr-complexity
محدود به پیچیدگی عبارات در تحلیلگر تکامل اسکالر.
عبارات پیچیده تحلیلگر را کند می کند.

omega-max-vars
حداکثر تعداد متغیرها در یک سیستم محدودیت امگا. مقدار پیش فرض
128 است

omega-max-geqs
حداکثر تعداد نابرابری در یک سیستم محدودیت امگا. پیشفرض
مقدار 256 است.

امگا-max-eqs
حداکثر تعداد برابری ها در یک سیستم محدودیت امگا. مقدار پیش فرض
128 است

omega-max-wild-cards
حداکثر تعداد متغیرهای wildcard که حل کننده امگا قادر به انجام آن خواهد بود
درج کنید. مقدار پیش فرض 18 است.

امگا-هش-اندازه جدول
اندازه جدول هش در حل کننده امگا. مقدار پیش فرض 550 است.

کلیدهای امگا حداکثر
حداکثر تعداد کلیدهای استفاده شده توسط حل کننده امگا. مقدار پیش فرض 500 است.

امگا-از بین بردن-زائد-محدودیت
هنگامی که روی 1 تنظیم می شود، از روش های گران قیمت برای حذف تمام محدودیت های اضافی استفاده کنید. در
مقدار پیش فرض 0 است.

vect-max-version-for-alignment-checks
حداکثر تعداد بررسی‌های زمان اجرا که می‌توان هنگام انجام حلقه انجام داد
نسخه سازی برای تراز در وکتوریزر. گزینه ftree-vect-loop-version را ببینید
برای اطلاعات بیشتر.

vect-max-version-for-alias-checks
حداکثر تعداد بررسی‌های زمان اجرا که می‌توان هنگام انجام حلقه انجام داد
نسخه سازی برای نام مستعار در vectorizer. گزینه ftree-vect-loop-version را ببینید
اطلاعات بیشتر.

حداکثر تکرار برای ردیابی
حداکثر تعداد تکرار یک حلقه الگوریتم نیروی brute برای تجزیه و تحلیل
از # تکرار حلقه سعی در ارزیابی دارد.

داغ-bb-شمارش-کسری
کسری از حداکثر تعداد تکرارهای بلوک اصلی در برنامه را انتخاب کنید
بلوک اصلی باید داغ در نظر گرفته شود.

داغ-bb-فرکانس-کسری
کسری از فرکانس بلوک ورودی اجرای بلوک اصلی را انتخاب کنید
تابع داده شده بلوک اصلی باید داغ در نظر گرفته شود.

حداکثر-پیش بینی-تکرار
حداکثر تعداد تکرارهای حلقه ای که به صورت ایستا پیش بینی می کنیم. این مفید است در
مواردی که تابع شامل یک حلقه با کران شناخته شده و حلقه دیگر با
ناشناس. ما تعداد تکرارهای شناخته شده را به درستی پیش بینی می کنیم، در حالی که مجهول است
تعداد تکرارها به طور متوسط ​​تقریباً 10 است. این بدان معنی است که حلقه بدون
مرزها نسبت به دیگری به طور مصنوعی سرد به نظر می رسند.

آستانه تراز
کسری از حداکثر فرکانس اجرای بلوک اصلی در تابع را انتخاب کنید
بلوک اصلی داده شده تراز می شود.

تکرارهای align-loop
حلقه ای که انتظار می رود حداقل تکرار شود
هم راستا.

ردیاب-دینامیک-پوشش
ردیاب-دینامیک-پوشش-بازخورد
این مقدار برای محدود کردن تشکیل سوپر بلوک یک بار درصد داده شده استفاده می شود
دستورالعمل های اجرا شده پوشش داده شده است. این گسترش غیر ضروری اندازه کد را محدود می کند.

La ردیاب-دینامیک-پوشش-بازخورد فقط زمانی استفاده می شود که بازخورد نمایه باشد
در دسترس. پروفایل های واقعی (برخلاف پروفایل های تخمین زده شده به صورت ایستا) بسیار زیاد است
متعادل تر است و اجازه می دهد آستانه مقدار بیشتری داشته باشد.

tracer-max-code-growth
وقتی رشد کد به درصد معین رسید، تکثیر دنباله را متوقف کنید. این هست
به جای بحث هوکی، زیرا اکثر موارد تکراری بعداً در ضربدر حذف خواهند شد
پرش، بنابراین ممکن است روی مقادیر بسیار بالاتر از رشد کد مورد نظر تنظیم شود.

نسبت ردیاب-دقیقه-شاخه
زمانی که احتمال معکوس بهترین لبه کمتر از این باشد، رشد معکوس را متوقف کنید
آستانه (در درصد).

نسبت ردیاب-دقیقه-شاخه
tracer-min-branch-ratio-feedback
اگر بهترین لبه احتمال کمتری از این داشته باشد، رشد رو به جلو را متوقف کنید
آستانه.

به همین ترتیب ردیاب-دینامیک-پوشش دو مقدار وجود دارد، یکی برای کامپایل
برای بازخورد نمایه و یکی برای گردآوری بدون. مقدار برای کامپایل
برای ایجاد بازخورد نمایه باید محافظه کارانه تر (بالاتر) باشد
ردیاب موثر

max-cse-path-length
حداکثر تعداد بلوک های اساسی در مسیری که cse در نظر می گیرد. پیش فرض 10 است.

max-cse-insns
حداکثر دستورالعمل CSE قبل از شستشو. پیش فرض 1000 است.

ggc-min-expand
شورای همکاری خلیج فارس از یک جمع کننده زباله برای مدیریت تخصیص حافظه خود استفاده می کند. این پارامتر
حداقل درصدی را مشخص می کند که توده زباله جمع کننده باید در آن باشد
امکان گسترش بین مجموعه ها وجود دارد. تنظیم این ممکن است سرعت کامپایل را بهبود بخشد.
هیچ تاثیری در تولید کد ندارد.

پیش‌فرض 30% + 70% * (RAM/1GB) با کران بالای 100% زمانی که RAM >= 1GB است.
اگر "getrlimit" در دسترس باشد، مفهوم "RAM" کوچکترین رم واقعی است و
"RLIMIT_DATA" یا "RLIMIT_AS". اگر GCC قادر به محاسبه RAM در یک خاص نباشد
پلت فرم، از حد پایین 30٪ استفاده می شود. تنظیم این پارامتر و ggc-min-
هیپسایز کردن به صفر باعث می شود در هر فرصتی یک مجموعه کامل رخ دهد. این هست
بسیار کند است، اما می تواند برای اشکال زدایی مفید باشد.

GGC-min-Heapsize
حداقل اندازه انبوه زباله جمع کن قبل از شروع به زحمت جمع آوری
زباله اولین مجموعه پس از بزرگ شدن پشته رخ می دهد ggc-min-expand%
خارج از GGC-min-Heapsize. باز هم، تنظیم این ممکن است سرعت کامپایل را بهبود بخشد، و
هیچ تاثیری در تولید کد ندارد.

پیش فرض کوچکتر از RAM/8، RLIMIT_RSS یا محدودیتی است که سعی می کند اطمینان حاصل کند
که از RLIMIT_DATA یا RLIMIT_AS تجاوز نمی شود، اما با کران پایین 4096
(چهار مگابایت) و حد بالایی 131072 (128 مگابایت). اگر GCC قادر نیست
برای محاسبه RAM در یک پلت فرم خاص، از کران پایین استفاده می شود. تنظیم این
پارامتر بسیار بزرگ به طور موثر جمع آوری زباله را غیرفعال می کند. تنظیم این
پارامتر و ggc-min-expand به صفر باعث می شود که یک مجموعه کامل در هر اتفاق بیفتد
فرصت.

max-reload-search-insns
حداکثر تعداد بارگذاری مجدد دستورالعمل باید به دنبال معادل به عقب باشد
ثبت نام. افزایش مقادیر به معنای بهینه سازی تهاجمی تر است که باعث می شود
زمان تدوین با عملکرد احتمالا کمی بهتر افزایش می یابد. پیشفرض
مقدار 100 است.

max-cselib-memory-locations
حداکثر تعداد مکان‌های حافظه که cselib باید در نظر گرفته شود.
افزایش مقادیر به معنای بهینه‌سازی تهاجمی‌تر است که زمان کامپایل را افزایش می‌دهد
افزایش با عملکرد احتمالا کمی بهتر است. مقدار پیش فرض 500 است.

reorder-blocks-duplicate
بازگرداندن بلوک ها
برای تصمیم گیری در مورد استفاده از شاخه بدون قید و شرط از طریق مجوز مرتب سازی مجدد بلوک های پایه استفاده می شود
یا کد را در مقصد آن کپی کنید. کد زمانی که تخمین زده شود تکرار می شود
اندازه کوچکتر از این مقدار ضرب در اندازه تخمینی بدون شرط است
پرش در نقاط داغ برنامه.

La reorder-block-duplicate-feedback فقط زمانی استفاده می شود که بازخورد نمایه باشد
موجود است و ممکن است روی مقادیر بالاتر از Reorder-Block-Duplice پس از
اطلاعات در مورد نقاط داغ دقیق تر است.

max-sched-ready-insns
حداکثر تعداد دستورالعمل های آماده برای صدور زمانبندی باید
در هر زمان معینی در طول اولین پاس برنامه ریزی در نظر بگیرید. افزایش ارزش ها
به معنای جستجوهای دقیق تر است که باعث می شود زمان تدوین با احتمال زیاد افزایش یابد
سود اندک مقدار پیش فرض 100 است.

max-sched-region-blocks
حداکثر تعداد بلوک‌ها در یک منطقه که برای بین بلوک در نظر گرفته می‌شود
برنامه ریزی. مقدار پیش فرض 10 است.

max-pipeline-region-blocks
حداکثر تعداد بلوک در یک منطقه که برای خط لوله در نظر گرفته می شود
زمانبندی انتخابی مقدار پیش فرض 15 است.

max-sched-region-insns
حداکثر تعداد insns در یک منطقه که برای اینتربلاک در نظر گرفته می شود
برنامه ریزی. مقدار پیش فرض 100 است.

حداکثر صفحه اصلی
حداکثر تعداد insns در یک منطقه که برای خط لوله در نظر گرفته می شود
زمانبندی انتخابی مقدار پیش فرض 200 است.

min-spec-prob
حداقل احتمال (بر حسب درصد) رسیدن به یک بلوک منبع برای اینتربلاک
زمان بندی سوداگرانه مقدار پیش فرض 40 است.

حداکثر-ثبت شده-دیافراگم
حداکثر تعداد تکرار از طریق CFG برای گسترش مناطق. 0 - غیر فعال کردن
پسوند منطقه، N - حداکثر N تکرار را انجام دهید. مقدار پیش فرض 0 است.

max-sched-insn-conflict-delay
حداکثر تاخیر در تعارض برای یک insn که برای حرکت گمانه‌زنی در نظر گرفته می‌شود.
مقدار پیش فرض 3 است.

sched-spec-prob-cutoff
حداقل احتمال موفقیت حدس و گمان (در درصد)، به طوری که حدس و گمان
insn برنامه ریزی خواهد شد. مقدار پیش فرض 40 است.

sched-mem-true-dep-cost
حداقل فاصله (در چرخه های CPU) بین ذخیره و بارگذاری که همان حافظه را هدف قرار می دهد
مکان ها مقدار پیش فرض 1 است.

باکره حداکثر
حداکثر اندازه پنجره پیش بینی برنامه ریزی انتخابی. یک عمق است
جستجو برای دستورالعمل های موجود مقدار پیش فرض 50 است.

selsched-max-sched-times
حداکثر تعداد دفعاتی که یک دستورالعمل در طول انتخابی برنامه ریزی می شود
برنامه ریزی. این محدودیت در تعداد تکرارهایی است که از طریق آن انجام می شود
دستورالعمل ممکن است خط لوله شود. مقدار پیش فرض 2 است.

selsched-max-insns-to-rename
حداکثر تعداد بهترین دستورالعمل ها در لیست آماده که برای آنها در نظر گرفته شده است
تغییر نام در زمانبندی انتخابی مقدار پیش فرض 2 است.

sms-min-sc
حداقل مقدار تعداد مرحله که زمان‌بندی مدول نوسانی ایجاد می‌کند. را
مقدار پیش فرض 2 است.

max-last-value-rtl
حداکثر اندازه اندازه گیری شده به عنوان تعداد RTLهایی که می توانند در یک عبارت ثبت شوند
در ترکیب کننده برای یک ثبات شبه به عنوان آخرین مقدار شناخته شده آن ثبات. در
پیش فرض 10000 است.

عدد صحیح سهم
ثابت های اعداد صحیح کوچک می توانند از یک ساختار داده مشترک استفاده کنند و کامپایلر را کاهش دهند
استفاده از حافظه و افزایش سرعت آن. این حداکثر مقدار اشتراک گذاری شده را تعیین می کند
ثابت عدد صحیح مقدار پیش فرض 256 است.

حداقل نگاشت مجازی
حداقل تعداد نگاشت مجازی را در به روز رسانی افزایشی SSA مشخص می کند
که باید ثبت شود تا اکتشافی نگاشت مجازی تعریف شده توسط
نسبت نگاشت مجازی مقدار پیش فرض 100 است.

نسبت نگاشت مجازی
اگر تعداد نقشه‌های مجازی مجازی باشد، نسبت بزرگتر از عدد است
نمادهای مجازی که باید به روز شوند، سپس به روز رسانی افزایشی SSA به a تغییر می کند
به روز رسانی کامل برای آن نمادها. نسبت پیش فرض 3 است.

ssp-buffer-size
حداقل اندازه بافرها (یعنی آرایه ها) که خرد شدن پشته را دریافت می کنند
حفاظت زمانی که fstack-protection استفاده می شود.

این پیش فرض قبل از اوبونتو 10.10 "8" بود. در حال حاضر "4" است، برای افزایش
تعداد عملکردهای محافظت شده توسط محافظ پشته

max-jump-thread-duplication-stmts
حداکثر تعداد عبارات مجاز در یک بلوک که باید در زمانی که باید تکرار شود
پرش نخ

max-fields-for-field-sensitive
حداکثر تعداد فیلدها در یک ساختار که به روشی حساس به میدان برخورد خواهیم کرد
در طول تجزیه و تحلیل اشاره گر پیش فرض برای -O0 صفر و برای -Os -O1 و 100 است.
-O2 و -O3.

پیش واکشی-تاخیر
میانگین تعداد دستورالعمل هایی که قبل از واکشی اولیه اجرا می شوند را تخمین بزنید
به پایان می رسد. فاصله ای که از قبل واکشی می کنیم با این ثابت متناسب است.
افزایش این تعداد همچنین ممکن است منجر به واکشی کمتر جریانی شود (نگاه کنید به
پیشگفتارهای همزمان).

پیشگفتارهای همزمان
حداکثر تعداد واکشی‌های اولیه که می‌توانند همزمان اجرا شوند.

l1-cache-line-size
اندازه خط کش در حافظه نهان L1، بر حسب بایت.

l1-cache-size
اندازه حافظه نهان L1، بر حسب کیلوبایت.

l2-cache-size
اندازه حافظه نهان L2، بر حسب کیلوبایت.

نسبت min-insn به prefetch
حداقل نسبت بین تعداد دستورالعمل ها و تعداد پیش واکشی ها
برای فعال کردن واکشی اولیه در یک حلقه.

نسبت prefetch-min-insn-to-mem
حداقل نسبت بین تعداد دستورالعمل ها و تعداد حافظه
ارجاعاتی برای فعال کردن واکشی اولیه در یک حلقه.

استفاده-معارف-انواع
آیا کامپایلر باید از سیستم نوع "کانونیکال" استفاده کند یا خیر. به طور پیش فرض، این
همیشه باید 1 باشد که از مکانیزم داخلی کارآمدتری برای مقایسه استفاده می کند
انواع در C++ و Objective-C++. با این حال، اگر اشکالات در سیستم نوع متعارف باشد
با ایجاد خرابی در کامپایل، این مقدار را روی 0 تنظیم کنید تا انواع متعارف غیرفعال شود.

سوئیچ-تبدیل-حداکثر-نسبت شاخه
تبدیل اولیه سوئیچ از ایجاد آرایه هایی که بزرگتر از آن هستند خودداری می کند
سوئیچ-تبدیل-حداکثر-نسبت شاخه برابر تعداد شاخه های سوئیچ.

حداکثر طول - جزئی - ضد
حداکثر طول مجموعه آنتیتیک جزئی محاسبه شده در طول درخت جزئی
بهینه سازی حذف افزونگی (-ftree-pre) هنگام بهینه سازی در -O3 و بالاتر.
برای برخی از انواع کد منبع، حذف افزونگی جزئی افزایش یافته است
بهینه سازی ممکن است از بین برود و تمام حافظه موجود در هاست را مصرف کند
دستگاه. این پارامتر محدودیتی را برای طول مجموعه هایی که محاسبه می شوند تعیین می کند.
که از رفتار فراری جلوگیری می کند. تنظیم مقدار 0 برای این پارامتر خواهد بود
طول مجموعه نامحدود را مجاز کنید.

sccvn-max-scc-size
حداکثر اندازه یک جزء قوی (SCC) در طول پردازش SCCVN. اگر
این محدودیت زده شده است، پردازش SCCVN برای کل تابع انجام نخواهد شد و
بهینه سازی بسته به آن غیرفعال خواهد شد. حداکثر اندازه SCC پیش فرض است
10000.

ira-max-loops-num
IRA به طور پیش فرض از تخصیص ثبت منطقه ای استفاده می کند. اگر تابعی حاوی مقدار بیشتری باشد
حلقه ها از تعداد داده شده توسط این پارامتر، فقط حداکثر تعداد داده شده از
حلقه هایی که اغلب اجرا می شوند، مناطقی را برای تخصیص ثبات منطقه ای تشکیل می دهند.
مقدار پیش فرض پارامتر 100 است.

ira-max-conflict-table-size
اگرچه IRA از یک الگوریتم پیچیده برای فشرده سازی جدول تضاد استفاده می کند
جدول هنوز هم می تواند به مقدار بیش از حد حافظه برای عملکردهای بزرگ نیاز داشته باشد. اگر
جدول تضاد برای یک تابع می تواند بیشتر از اندازه در مگابایت باشد
پارامتر، تخصیص دهنده ثبات در عوض از یک پارامتر سریعتر، ساده تر و پایین تر استفاده می کند.
الگوریتم کیفیت که نیازی به ساخت جدول تضاد شبه ثبت ندارد.
مقدار پیش فرض پارامتر 2000 است.

ira-loop-reserved-regs
IRA می تواند برای ارزیابی دقیق تر فشار ثبت در حلقه ها برای تصمیم گیری استفاده شود
برای جابجایی متغیرهای حلقه (نگاه کنید به -O3). تعداد ثبت های موجود رزرو شده برای
برخی اهداف دیگر توسط این پارامتر ارائه شده است. مقدار پیش فرض از
پارامتر 2 است که حداقل تعداد رجیسترهای مورد نیاز معمولی است
دستورالعمل ها. این مقدار بهترین چیزی است که از آزمایش های متعدد بدست آمده است.

loop-invariant-max-bbs-in-loop
حرکت ثابت حلقه می تواند بسیار گران باشد، چه در زمان کامپایل و چه در زمان
مقدار حافظه کامپایل زمان مورد نیاز، با حلقه های بسیار بزرگ. حلقه با بیشتر
بلوک های اصلی از این پارامتر، بهینه سازی حرکت ثابت حلقه را نخواهند داشت
روی آنها اجرا شد. مقدار پیش فرض پارامتر برای -O1000 و 1 10000 است
برای -O2 و بالاتر.

حلقه های حداکثر برای داده های
ایجاد وابستگی داده ها برای حلقه های بسیار بزرگ گران است. این پارامتر
تعداد ارجاع داده ها را در حلقه هایی که برای داده ها در نظر گرفته می شود، محدود می کند
تجزیه و تحلیل وابستگی این حلقه های بزرگ پس از آن توسط اداره نمی شود
بهینه سازی با استفاده از وابستگی داده های حلقه مقدار پیش فرض 1000 است.

max-vartrack-size
حداکثر تعداد اسلات جدول هش را برای استفاده در جریان داده ردیابی متغیر تنظیم می کند
تجزیه و تحلیل هر تابع اگر این محدودیت با ردیابی متغیر در
تکالیف فعال است، تجزیه و تحلیل برای آن تابع بدون آن، پس از آن دوباره امتحان می شود
حذف همه اشکال‌زدایی‌ها از تابع. اگر از حد تجاوز شود حتی بدون
اشکال زدایی insns، تجزیه و تحلیل ردیابی var برای عملکرد کاملاً غیرفعال است.
صفر کردن پارامتر آن را نامحدود می کند.

max-vartrack-expr-depth
هنگام تلاش برای نگاشت نام متغیرها، حداکثر تعداد سطوح بازگشتی را تنظیم می کند
اشکال زدایی موقت برای عبارات ارزش. این زمان کامپایل را با بیشتر معامله می کند
اطلاعات کامل اشکال زدایی اگر این خیلی کم تنظیم شده است، عباراتی را که هستند ارزش گذاری کنید
در دسترس است و می تواند در اطلاعات اشکال زدایی نمایش داده شود، ممکن است در نهایت استفاده نشود.
تنظیم این بالاتر ممکن است کامپایلر را قادر سازد تا اشکال زدایی پیچیده تری را پیدا کند
عبارات، اما زمان کامپایل و استفاده از حافظه ممکن است افزایش یابد. پیش فرض 12 است.

min-nondebug-insn-uid
از uid هایی که با این پارامتر شروع می شوند برای insns های nondebug استفاده کنید. محدوده زیر
پارامتر منحصراً برای اشکال زدایی insns ایجاد شده توسط
-fvar-ردیابی-تکالیف، اما insns های اشکال زدایی ممکن است Uid های (غیر همپوشانی) در بالا دریافت کنند
اگر محدوده رزرو شده تمام شود.

ipa-sra-ptr-factor-growth-factor
IPA-SRA یک اشاره گر به یک مجموعه را با یک یا چند پارامتر جدید جایگزین می کند
فقط زمانی که اندازه تجمعی آنها کمتر یا برابر باشد ipa-sra-ptr-factor-growth-factor
برابر اندازه پارامتر اشاره گر اصلی است.

tm-max-aggregate-size
هنگام ساخت کپی از متغیرهای thread-local در یک تراکنش، این پارامتر
اندازه را بر حسب بایت مشخص می کند که پس از آن متغیرها همراه با لاگ ذخیره می شوند
توابع بر خلاف ذخیره/بازیابی جفت دنباله کد. فقط این گزینه
هنگام استفاده اعمال می شود -fgnu-tm.

graphite-max-nb-scop-params
برای جلوگیری از اثرات نمایی در تبدیل حلقه گرافیت، تعداد
پارامترها در بخش کنترل استاتیک (SCoP) محدود است. مقدار پیش فرض 10 است
مولفه های. متغیری که مقدار آن در زمان کامپایل ناشناخته و تعریف شده است
خارج از یک SCoP یک پارامتر از SCoP است.

graphite-max-bbs-per-function
برای جلوگیری از اثرات نمایی در تشخیص SCoP ها، اندازه توابع
تجزیه و تحلیل شده توسط گرافیت محدود است. مقدار پیش فرض 100 بلوک اصلی است.

حلقه-بلوک-کاشی-اندازه
مسدود کردن حلقه یا تبدیل‌های استخراج نواری، فعال با -فلوپ بلوک or
-فلوپ-نوار-معدن، هر حلقه را در لانه حلقه با تعداد معینی از آن جدا کنید
تکرارها طول نوار را می توان با استفاده از حلقه-بلوک-کاشی-اندازه
پارامتر. مقدار پیش فرض 51 تکرار است.

IPA-CP-List-List
IPA-CP سعی می کند تمام مقادیر و انواع ممکن را که به یک تابع ارسال می شود ردیابی کند
پارامتر به منظور انتشار آنها و انجام مجازی سازی. ipa-cp-value-
اندازه فهرست حداکثر تعداد مقادیر و انواعی است که در هر فرمال ذخیره می کند
پارامتر یک تابع

پارتیشن های lto
تعداد دلخواه پارتیشن های تولید شده در طول کامپایل WHOPR را مشخص کنید. در
تعداد پارتیشن ها باید از تعداد CPU های استفاده شده برای کامپایل بیشتر باشد. در
مقدار پیش فرض 32 است.

lto-minpartition
اندازه حداقل پارتیشن برای WHOPR (در دستورالعمل های تخمینی). این مانع می شود
هزینه های تقسیم برنامه های بسیار کوچک به پارتیشن های بسیار زیاد.

cxx-max-namespaces-for-diagnostic-help
حداکثر تعداد فضاهای نامی که باید هنگام جستجوی نام C++ برای پیشنهادات مشورت کنید
برای یک شناسه ناموفق است. پیش فرض 1000 است.

سینک-فرکانس-آستانه
حداکثر فرکانس اجرای نسبی (بر حسب درصد) بلوک هدف
نسبت به بلوک اصلی یک دستور تا اجازه غرق شدن دستور a را بدهد
بیانیه. اعداد بزرگتر منجر به غرق شدن بیانیه تهاجمی تر می شود. در
مقدار پیش فرض 75 است. یک تعدیل مثبت کوچک برای عبارات با اعمال می شود
عملگرهای حافظه که حتی سودآورتر هستند بنابراین غرق شوید.

حداکثر ذخیره به سینک
حداکثر تعداد جفت فروشگاه های مشروط که می توانند غرق شوند. اگر 0 را تنظیم کنید
یا برداری (-ftree-vectorize) یا تبدیل اگر (-ftree-loop-if-convert)
از کار افتاده است. پیش فرض 2 است.

اجازه-بار-داده-مسابقه
به بهینه‌سازها اجازه دهید مسابقه‌های داده جدیدی را روی بارها معرفی کنند. برای اجازه دادن روی 1 تنظیم کنید،
در غیر این صورت به 0. این گزینه به طور پیش فرض فعال است مگر اینکه به طور ضمنی توسط
-fmemory-model= گزینه.

اجازه-ذخیره-مسابقه داده
به بهینه‌سازها اجازه دهید مسابقه‌های داده جدید را در فروشگاه‌ها معرفی کنند. برای اجازه دادن روی 1 تنظیم کنید،
در غیر این صورت به 0. این گزینه به طور پیش فرض فعال است مگر اینکه به طور ضمنی توسط
-fmemory-model= گزینه.

اجازه می دهد-بسته-بار-داده-مسابقه
به بهینه‌سازان اجازه دهید تا داده‌های جدیدی را در بارهای داده‌های بسته‌شده معرفی کنند. روی 1 تا تنظیم کنید
اجازه، در غیر این صورت به 0. این گزینه به طور پیش فرض فعال است مگر اینکه به طور ضمنی توسط تنظیم شده باشد
la -fmemory-model= گزینه.

مسابقات داده‌های ذخیره‌شده مجاز
به بهینه‌سازها اجازه دهید مسابقه‌های داده جدید را در فروشگاه‌های داده‌های بسته‌بندی شده معرفی کنند. روی 1 تا تنظیم کنید
اجازه، در غیر این صورت به 0. این گزینه به طور پیش فرض فعال است مگر اینکه به طور ضمنی توسط تنظیم شده باشد
la -fmemory-model= گزینه.

مورد-مقدار-آستانه
کمترین تعداد مقادیر مختلف که برای آنها بهتر است از جدول پرش استفاده شود
به جای درختی از شاخه های مشروط اگر مقدار 0 است، از پیش فرض برای استفاده کنید
ماشین. پیش فرض 0 است.

tree-reassoc-width
حداکثر تعداد دستورات اجرا شده به صورت موازی را در درخت مرتبط تنظیم کنید.
این پارامتر اکتشافی وابسته به هدف را که به طور پیش‌فرض مورد استفاده قرار می‌گیرد، در صورتی که فاقد آن باشد، لغو می‌کند
مقدار صفر

گزینه کنترل la پیش پردازنده
این گزینه‌ها پیش‌پردازنده C را کنترل می‌کنند که روی هر فایل منبع C قبل از واقعی اجرا می‌شود
تلفیقی.

اگر از شما استفاده می کنید -E گزینه، هیچ کاری به جز پیش پردازش انجام نمی شود. برخی از این گزینه ها
فقط همراه با معنا پیدا کند -E زیرا باعث می شوند خروجی پیش پردازنده باشد
نامناسب برای تدوین واقعی

-Wp،انتخاب
شما می توانید -Wp،انتخاب برای دور زدن درایور کامپایلر و عبور انتخاب به طور مستقیم از طریق
به پیش پردازنده اگر انتخاب حاوی کاما است، به چندین گزینه تقسیم می شود
ویرگول با این حال، بسیاری از گزینه ها اصلاح، ترجمه یا تفسیر می شوند
درایور کامپایلر قبل از انتقال به پیش پردازنده و -Wp به زور دور می زند
این فاز رابط مستقیم پیش پردازنده غیرمستند و مشمول است
تغییر دهید، بنابراین در صورت امکان باید از استفاده خودداری کنید -Wp و اجازه دهید راننده آن را مدیریت کند
در عوض گزینه ها

-Xpreprocessor انتخاب
عبور انتخاب به عنوان گزینه ای برای پیش پردازنده شما می توانید از این برای تامین سیستم استفاده کنید
گزینه های پیش پردازنده خاصی که GCC نمی داند چگونه آنها را تشخیص دهد.

اگر می خواهید گزینه ای را ارسال کنید که آرگومان می گیرد، باید از آن استفاده کنید -Xpreprocessor
دو بار، یک بار برای گزینه و یک بار برای استدلال.

-D نام
از پیش تعریف کنید نام به عنوان یک کلان، با تعریف 1.

-D نام=تعریف
محتویات تعریف نشانه گذاری می شوند و طوری پردازش می شوند که گویی در طی آن ظاهر شده اند
ترجمه فاز سه در الف #تعريف كردن بخشنامه به طور خاص، تعریف خواهد بود
توسط کاراکترهای جدید جاسازی شده کوتاه شده است.

اگر پیش پردازنده را از یک برنامه پوسته یا پوسته مانند فراخوانی می کنید، ممکن است نیاز داشته باشید
برای استفاده از نحو نقل قول پوسته برای محافظت از کاراکترهایی مانند فضاهایی که دارای a
معنی در نحو پوسته.

اگر می خواهید یک ماکرو تابع مانند در خط فرمان تعریف کنید، آرگومان آن را بنویسید
لیست با پرانتزهای اطراف قبل از علامت مساوی (در صورت وجود). پرانتز هستند
برای اکثر پوسته ها معنی دار است، بنابراین باید گزینه را نقل قول کنید. با sh و csh,
نام(ارگ...)=تعریف' کار می کند.

-D و -U گزینه ها به ترتیبی که در خط فرمان داده شده اند پردازش می شوند. همه
-ایماکرو پرونده و -عبارتند از پرونده پس از همه، گزینه ها پردازش می شوند -D و -U گزینه.

-U نام
هر گونه تعریف قبلی را لغو کنید نام، یا ساخته شده یا با یک -D گزینه.

-دف
ماکروهای خاص سیستم یا GCC را از پیش تعریف نکنید. استاندارد از پیش تعریف شده
ماکروها تعریف شده باقی می مانند.

-I دیر
دایرکتوری را اضافه کنید دیر به لیست دایرکتوری هایی که باید برای فایل های سرصفحه جستجو شوند.
فهرست راهنماهای نامگذاری شده توسط -I قبل از اینکه سیستم استاندارد شامل دایرکتوری ها باشد جستجو می شوند.
اگر دایرکتوری دیر یک سیستم استاندارد شامل دایرکتوری است، گزینه نادیده گرفته می شود
اطمینان حاصل کنید که ترتیب جستجوی پیش‌فرض برای فهرست‌های سیستم و رفتار ویژه
هدرهای سیستم شکست نمی خورد. اگر دیر با "="" شروع می شود، سپس "=" خواهد بود
با پیشوند sysroot جایگزین شده است. دیدن --sysroot و -isysroot.

-o پرونده
خروجی را بنویسید پرونده. این همان مشخص کردن است پرونده به عنوان دومین غیر گزینه
استدلال به cpp. gcc تفسیر متفاوتی از آرگومان غیر گزینه دوم دارد،
پس باید استفاده کنید -o برای تعیین فایل خروجی

-دیو
همه اخطارهای اختیاری را که برای کد معمولی مطلوب هستند روشن می کند. در حال حاضر این
is -کامنت کنید, Wtrigraphs, -Wmultichar و یک هشدار در مورد ارتقاء عدد صحیح که باعث a
تغییر علامت در عبارات "#if". توجه داشته باشید که بسیاری از هشدارهای پیش پردازنده
به طور پیش فرض روشن هستند و هیچ گزینه ای برای کنترل آنها ندارند.

-کامنت کنید
-نظرات
هر زمان که یک دنباله شروع نظر اخطار کنید /* ظاهر می شود در a /* نظر دهید، یا هر زمان که الف
بک اسلش-newline در یک ظاهر می شود // اظهار نظر. (هر دو شکل اثر یکسانی دارند.)

Wtrigraphs
اکثر سه نمودارها در نظرات نمی توانند بر معنای برنامه تأثیر بگذارند. با این حال، الف
سه گراف که یک خط جدید فرار تشکیل می دهد (??/ در انتهای یک خط) می تواند، توسط
تغییر نقطه شروع یا پایان نظر بنابراین، فقط سه نمودارهایی که تشکیل می شوند
خطوط جدید فراری هشدارهایی را در داخل یک نظر ایجاد می کنند.

این گزینه توسط -دیو. اگر -دیو داده نشده است، این گزینه همچنان فعال است
مگر اینکه سه نمودارها فعال باشند. برای دریافت تبدیل تریگراف بدون هشدار، اما دریافت کنید
دیگر -دیو هشدارها، استفاده کنید سه نمودارها -دیو Wno-trigraphs.

-غیر سنتی
در مورد ساختارهای خاصی که در سنتی و ISO C رفتار متفاوتی دارند هشدار دهید
در مورد ساختارهای ISO C که معادل C سنتی ندارند و مشکل ساز هستند هشدار دهید
سازه هایی که باید از آنها اجتناب کرد.

-وندف
هر زمان که یک شناسه که ماکرو نیست در یک مواجه شد هشدار دهید #اگر بخشنامه،
خارج از مشخص. چنین شناسه هایی با صفر جایگزین می شوند.

Wunused-macros
در مورد ماکروهای تعریف شده در فایل اصلی که استفاده نشده اند هشدار دهید. یک ماکرو است استفاده اگر هست
حداقل یک بار گسترش یافته یا برای وجود آزمایش شده است. پیش پردازنده همچنین هشدار می دهد اگر
ماکرو در زمان تعریف مجدد یا تعریف نشده استفاده نشده است.

ماکروهای داخلی، ماکروهای تعریف شده در خط فرمان و ماکروهای تعریف شده در شامل
فایل ها در مورد آنها هشدار داده نمی شود.

توجه داشته باشید: اگر واقعاً از یک ماکرو استفاده می شود، اما فقط در بلوک های شرطی نادیده گرفته شده استفاده می شود، پس
CPP آن را به عنوان استفاده نشده گزارش خواهد کرد. برای جلوگیری از هشدار در چنین مواردی، ممکن است بهبود پیدا کنید
محدوده تعریف ماکرو، برای مثال، با انتقال آن به اولین مورد پرش
مسدود کردن. از طرف دیگر، می توانید یک استفاده ساختگی با چیزی شبیه به:

#اگر_کلان_علت_هشدار تعریف شده است
# اندیف

برچسب های Wendif
هر زمان که # دیگر و یا # اندیف با متن دنبال می شوند. این معمولا در
کد فرم

#اگر FOO
...
#دیگر FOO
...
#NDIF FOO

دوم و سوم "FOO" باید در نظرات باشد، اما اغلب در برنامه های قدیمی تر نیستند.
این هشدار به طور پیش فرض روشن است.

-خطا
همه هشدارها را به خطاهای سخت تبدیل کنید. کد منبعی که باعث ایجاد هشدار می شود خواهد بود
رد شد

Wsystem-headers
اخطارهایی را برای کد در هدرهای سیستم صادر کنید. اینها معمولاً برای یافتن مفید نیستند
اشکالات در کد شما، بنابراین سرکوب شده است. اگر شما مسئول سیستم هستید
کتابخانه، ممکن است بخواهید آنها را ببینید.

-w تمام هشدارها، از جمله هشدارهایی که GNU CPP به طور پیش فرض صادر می کند، سرکوب کنید.

-پدانتیک
همه تشخیص های اجباری مندرج در استاندارد C را صادر کنید. برخی از آنها باقی مانده است
به طور پیش‌فرض خارج می‌شوند، زیرا اغلب روی کدهای بی‌ضرر فعال می‌شوند.

-اشتباهات
همه تشخیص های اجباری را صادر کنید و همه تشخیص های اجباری را به خطا تبدیل کنید.
این شامل تشخیص های اجباری است که GCC بدون آن صادر می کند -پدانتیک اما به عنوان رفتار می کند
هشدارها

-M به جای خروجی گرفتن نتیجه پیش پردازش، یک قانون مناسب برای خروجی ارائه دهید ساخت
شرح وابستگی های فایل منبع اصلی. پیش پردازنده یک خروجی می دهد
ساخت قانون حاوی نام فایل شی برای آن فایل منبع، یک دونقطه و نام ها
از همه فایل‌های موجود، از جمله فایل‌هایی که از آن‌ها می‌آیند -عبارتند از or -ایماکرو فرمان
گزینه های خط

مگر اینکه به صراحت مشخص شده باشد (با -MT or -MQ)، نام فایل شی از عبارت تشکیل شده است
نام فایل مبدأ با هر پسوندی جایگزین پسوند فایل شی و با هر
قطعات دایرکتوری اصلی حذف شدند. اگر تعداد زیادی فایل گنجانده شده باشد، قانون این است
تقسیم به چند خط با استفاده از \-خط جدید. قانون هیچ فرمانی ندارد.

این گزینه خروجی اشکال زدایی پیش پردازنده را سرکوب نمی کند، مانند -dM. برای جلوگیری
مخلوط کردن چنین خروجی اشکال زدایی با قوانین وابستگی، باید به صراحت آن را مشخص کنید
فایل خروجی وابستگی با -MF، یا از یک متغیر محیطی مانند استفاده کنید
DEPENDENCIES_OUTPUT. خروجی اشکال زدایی همچنان به جریان خروجی معمولی ارسال می شود
طبیعی است.

عبور -M به راننده اشاره می کند -E، و هشدارها را به طور ضمنی سرکوب می کند -w.

-مامان پسندیدن -M اما به فایل‌های هدری که در فهرست‌های هدر سیستم یافت می‌شوند اشاره نکنید،
و نه فایل‌های سرصفحه‌ای که به‌طور مستقیم یا غیرمستقیم از چنین هدری گنجانده شده‌اند.

این به این معنی است که انتخاب براکت های زاویه یا دو نقل قول در یک #include
دستورالعمل به خودی خود تعیین نمی کند که آیا آن هدر در ظاهر می شود یا خیر -مامان
خروجی وابستگی این یک تغییر جزئی در معناشناسی از GCC نسخه 3.0 و
قبلا

-MF پرونده
هنگامی که با استفاده می شود -M or -مامان، فایلی را برای نوشتن وابستگی ها مشخص می کند. اگر نه -MF
سوئیچ داده می شود که پیش پردازنده قوانین را به همان جایی که می فرستاد می فرستد
خروجی از پیش پردازش شده

هنگامی که با گزینه های درایور استفاده می شود -MD or -MMD, -MF وابستگی پیش فرض را لغو می کند
فایل خروجی.

-MG در ارتباط با گزینه ای مانند -M درخواست تولید وابستگی، -MG فرض می کند
فایل‌های هدر از دست رفته فایل‌هایی تولید می‌شوند و بدون آن‌ها را به لیست وابستگی اضافه می‌کنند
بالا بردن یک خطا نام فایل وابستگی مستقیماً از "#include" گرفته شده است.
دستورالعمل بدون پیش بینی هیچ مسیری. -MG همچنین خروجی از پیش پردازش شده را سرکوب می کند
فایل هدر از دست رفته این را بی فایده می کند.

این ویژگی در به روز رسانی خودکار فایل های make-files استفاده می شود.

-نماینده مجلس این گزینه به CPP دستور می دهد تا برای هر وابستگی به غیر از آن یک هدف ساختگی اضافه کند
فایل اصلی، که باعث می شود هر کدام به هیچ چیز وابسته نشوند. این قوانین ساختگی روی خطاها کار می کنند
ساخت می دهد اگر شما فایل های هدر را بدون به روز رسانی حذف کنید makefile مطابقت دادن

این خروجی معمولی است:

test.o: test.c test.h

test.h:

-MT هدف
هدف قانون صادر شده توسط تولید وابستگی را تغییر دهید. به طور پیش فرض CPP می گیرد
نام فایل ورودی اصلی، هر جزء دایرکتوری و هر پسوند فایل را حذف می کند
مانند .c، و پسوند شی معمولی پلتفرم را اضافه می کند. نتیجه هدف است.

An -MT گزینه هدف را دقیقاً همان رشته ای که شما مشخص کرده اید تنظیم می کند. اگر بخواهید
چندین هدف، می توانید آنها را به عنوان یک آرگومان واحد مشخص کنید -MT، یا از چندگانه استفاده کنید
-MT گزینه.

به عنوان مثال، -MT '$(objpfx)foo.o' ممکن است بدهد

$ (objpfx) foo.o: foo.c

-MQ هدف
مثل -MT، اما هر شخصیتی را که برای ساختن خاص است نقل قول می کند.
-MQ '$(objpfx)foo.o' می دهد

$ $ (objpfx) foo.o: foo.c

هدف پیش فرض به طور خودکار نقل قول می شود، گویی با آن داده شده است -MQ.

-MD -MD برابر است با -M -MF پرونده، غیر از آن -E ضمنی نیست. راننده
تعیین می کند پرونده بر اساس اینکه آیا یک -o گزینه داده شده است. اگر اینطور باشد، درایور از آن استفاده می کند
آرگومان اما با پسوند .d، در غیر این صورت نام فایل ورودی را می گیرد،
هر جزء و پسوند دایرکتوری را حذف می کند و a را اعمال می کند .d پسوند.

If -MD همراه با استفاده می شود -E، هرکسی -o سوئیچ برای مشخص کردن
فایل خروجی وابستگی، اما اگر بدون استفاده شود -E، هر یک -o برای مشخص کردن a درک می شود
فایل شی هدف

پس از -E ضمنی نیست، -MD می توان از آن برای تولید یک فایل خروجی وابستگی به صورت a استفاده کرد
عوارض جانبی فرآیند کامپایل

-MMD
پسندیدن -MD به جز ذکر فقط فایل های هدر کاربر، نه فایل های هدر سیستم.

-FPCH-DEPS
هنگام استفاده از هدرهای از پیش کامپایل شده، این پرچم باعث می شود که پرچم های وابستگی-خروجی به آن تبدیل شوند
همچنین فایل ها را از وابستگی های هدر از پیش کامپایل شده لیست کنید. اگر فقط مشخص نشده باشد
هدر از پیش کامپایل شده لیست می شود و نه فایل هایی که برای ایجاد آن استفاده شده اند
زیرا هنگام استفاده از هدر از پیش کامپایل شده، از آن فایل ها استفاده نمی شود.

-fpch-پیش پردازش
این گزینه اجازه می دهد تا از یک هدر از پیش کامپایل شده همراه با -E. خاصی را درج می کند
"#pragma"، "#pragma GCC pch_preprocess"نام فایل"" در خروجی برای علامت گذاری مکان
جایی که هدر از پیش کامپایل شده یافت شد و آن نام فایلاست. وقتی که -پیش پردازش شده هست در
استفاده کنید، GCC این "#pragma" را تشخیص داده و PCH را بارگیری می کند.

این گزینه به‌طور پیش‌فرض خاموش است، زیرا تنها خروجی از پیش پردازش شده به دست آمده است
واقعاً به عنوان ورودی GCC مناسب است. توسط آن روشن می شود -Save- Temps.

شما نباید این "#pragma" را در کد خود بنویسید، اما ویرایش آن امن است
نام فایل اگر فایل PCH در مکان دیگری در دسترس باشد. نام فایل ممکن است باشد
مطلق یا ممکن است نسبت به فهرست فعلی GCC باشد.

-x c
-x c ++
-x هدف-ج
-x اسمبلر-با-cpp
زبان مبدأ را مشخص کنید: C، C++، Objective-C، یا اسمبلی. این ربطی نداره
با انطباق با استانداردها یا الحاقات؛ صرفاً دستور پایه را انتخاب می کند
انتظار. اگر هیچ یک از این گزینه ها را ندهید، cpp زبان را از روی استنتاج می کند
پسوند فایل منبع: .c, . رونوشت, .m، یا .S. برخی از پسوندهای رایج دیگر برای
C++ و اسمبلی نیز شناخته شده است. اگر cpp پسوند را نشناسد، آن را
با فایل به صورت C رفتار می کند. این عمومی ترین حالت است.

توجه داشته باشید: نسخه‌های قبلی cpp a -زمانی گزینه ای که هر دو را انتخاب کرد
زبان و سطح انطباق استانداردها این گزینه حذف شده است، زیرا
با -l گزینه.

-std=استاندارد
-ansi
استانداردی را که کد باید با آن مطابقت داشته باشد را مشخص کنید. در حال حاضر CPP در مورد C می داند
و استانداردهای C++; سایرین ممکن است در آینده اضافه شوند.

استاندارد ممکن است یکی از:

"c90"
"c89"
"iso9899:1990"
استاندارد ISO C از سال 1990. c90 مخفف مرسوم این نسخه است
استاندارد.

La -ansi گزینه معادل است -std=c90.

"iso9899:199409"
استاندارد C 1990 که در سال 1994 اصلاح شد.

"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
استاندارد بازنگری شده ISO C، منتشر شده در دسامبر 1999. قبل از انتشار، این
با نام C9X شناخته می شد.

"iso9899:2011"
"c11"
"c1x"
استاندارد بازنگری شده ISO C، منتشر شده در دسامبر 2011. قبل از انتشار، این
با نام C1X شناخته می شد.

"gnu90"
"gnu89"
استاندارد C 1990 به همراه پسوندهای گنو. این پیش فرض است.

"gnu99"
"gnu9x"
استاندارد C 1999 به همراه پسوندهای گنو.

"gnu11"
"gnu1x"
استاندارد C 2011 به همراه پسوندهای گنو.

"c++98"
استاندارد ISO C++ 1998 به همراه اصلاحات.

"gnu++98"
همان -std = C ++ 98 به علاوه پسوندهای گنو این کد پیش فرض برای C++ است.

-من- مسیر شامل را تقسیم کنید. هر دایرکتوری مشخص شده با -I گزینه های قبل -من- هستند
فقط برای سرصفحه های درخواست شده با "#include" جستجو شدفایل""; آنها جستجو نمی شوند
"#عبارتند ازفایل>". اگر دایرکتوری های اضافی با -I گزینه های بعد از
-من-، آن دایرکتوری ها برای همه جستجو می شوند #include دستورالعمل.

علاوه بر این، -من- مانع استفاده از دایرکتوری دایرکتوری فایل فعلی به عنوان
اولین فهرست جستجو برای "#include"فایل"". این گزینه منسوخ شده است.

-nostdinc
در فهرست های استاندارد سیستم برای فایل های هدر جستجو نکنید. فقط دایرکتوری ها
شما مشخص کرده اید با -I گزینه ها (و دایرکتوری فایل فعلی، اگر
مناسب) جستجو می شوند.

-nostdinc++
فایل های هدر را در دایرکتوری های استاندارد خاص C++ جستجو نکنید، اما همچنان انجام دهید
سایر دایرکتوری های استاندارد را جستجو کنید. (این گزینه هنگام ساخت ++C استفاده می شود
کتابخانه.)

-عبارتند از پرونده
روند پرونده مثل اینکه "#include "file"" به عنوان اولین خط منبع اصلی ظاهر شد
فایل. با این حال، اولین دایرکتوری جستجو شد پرونده پیش پردازنده کار می کند
فهرست راهنما در عوض of دایرکتوری حاوی فایل منبع اصلی اگر پیدا نشد
در آنجا، در بقیه زنجیره جستجوی "#include "..." به عنوان جستجو می شود
طبیعی است.

اگر چندتایی باشد -عبارتند از گزینه های داده شده است، فایل ها به ترتیب آنها گنجانده شده است
در خط فرمان ظاهر شود.

-ایماکرو پرونده
دقیقا شبیه -عبارتند از، با این تفاوت که هر خروجی با اسکن تولید می شود پرونده پرتاب می شود
دور. ماکروهایی که تعریف می کند همچنان تعریف شده باقی می مانند. این به شما امکان می دهد تمام ماکروها را بدست آورید
از یک هدر بدون پردازش اعلان های آن.

تمام فایل های مشخص شده توسط -ایماکرو قبل از تمام فایل های مشخص شده توسط پردازش می شوند -عبارتند از.

-idirafter دیر
جستجو دیر برای فایل های هدر، اما این کار را انجام دهید بعد از همه دایرکتوری های مشخص شده با -I و
فهرست های استاندارد سیستم تمام شده اند. دیر به عنوان یک سیستم شامل
فهرست راهنما. اگر دیر با "="" شروع می شود، سپس "=" با sysroot جایگزین می شود
پیشوند؛ دیدن --sysroot و -isysroot.

-پیوند پیشوند
مشخص کردن پیشوند به عنوان پیشوند بعدی -ithprefix گزینه ها. اگر پیشوند
نشان دهنده یک دایرکتوری است، شما باید فینال را وارد کنید /.

-ithprefix دیر
-IwwithPrefixBefore دیر
ضمیمه کردن دیر به پیشوند مشخص شده قبلا با -پیوند، و حاصل را اضافه کنید
دایرکتوری به مسیر جستجو شامل. -IwwithPrefixBefore آن را در همان مکان قرار می دهد -I
خواهد شد -ithprefix آن را در جایی قرار می دهد -idirafter می توانست

-isysroot دیر
این گزینه مانند --sysroot گزینه ای است، اما فقط برای فایل های هدر (به جز برای
داروین را هدف می گیرد، جایی که هم برای فایل های هدر و هم برای کتابخانه ها اعمال می شود). را ببینید
--sysroot گزینه برای اطلاعات بیشتر

-imultilib دیر
استفاده کنید دیر به عنوان زیر شاخه ای از دایرکتوری حاوی سرصفحه های C++ خاص هدف.

-سیستم دیر
جستجو دیر برای فایل های هدر، بعد از همه دایرکتوری های مشخص شده توسط -I اما قبل از
دایرکتوری های سیستم استاندارد آن را به عنوان یک دایرکتوری سیستم علامت گذاری کنید، به طوری که یکسان شود
رفتار ویژه ای که برای فهرست های سیستم استاندارد اعمال می شود. اگر دیر آغاز می شود
با "="، سپس "=" با پیشوند sysroot جایگزین می شود. دیدن --sysroot و
-isysroot.

-نقل دادن دیر
جستجو دیر فقط برای فایل های هدر درخواست شده با "#include"فایل""; آنها نیستند
"#includeفایل>"، قبل از همه دایرکتوری های مشخص شده توسط -I و قبل از
دایرکتوری های سیستم استاندارد اگر دیر با "="" شروع می شود، سپس "="" جایگزین می شود
پیشوند sysroot؛ دیدن --sysroot و -isysroot.

fdirectives-only
هنگام پیش پردازش، دستورالعمل ها را مدیریت کنید، اما ماکروها را گسترش ندهید.

رفتار گزینه بستگی به -E و -پیش پردازش شده گزینه.

با -E، پیش پردازش محدود به رسیدگی به دستورالعمل هایی مانند "#define" است.
"#ifdef" و "#error". سایر عملیات پیش پردازنده، مانند توسعه ماکرو و
تبدیل سه گراف انجام نمی شود. علاوه بر این -DD گزینه به طور ضمنی است
فعال شده است

با -پیش پردازش شده، از پیش تعریف خط فرمان و اکثر ماکروهای داخلی می باشد
معلول. ماکروهایی مانند "__LINE__" که به بافت وابسته هستند، مدیریت می شوند
به طور معمول این امکان کامپایل فایل‌هایی را فراهم می‌کند که قبلاً با «-E» از پیش پردازش شده‌اند
-fdirectives-only".

با هر دو -E و -پیش پردازش شده، قوانین برای -پیش پردازش شده اولویت داشته باشد. این
پیش پردازش کامل فایل هایی را که قبلاً با "-E" از پیش پردازش شده اند، فعال می کند
-fdirectives-only".

-فرالورها در شناسایی کننده ها
پذیرفتن $ در شناسه ها

-fextended-identifiers
نام کاراکترهای جهانی را در شناسه ها بپذیرید. این گزینه آزمایشی است. در یک
نسخه آینده GCC، به طور پیش فرض برای C99 و C++ فعال خواهد شد.

-پیش پردازش شده
به پیش پردازنده نشان دهید که فایل ورودی قبلاً پردازش شده است. این
مواردی مانند بسط ماکرو، تبدیل سه گراف، اتصال خط جدید فرار شده را سرکوب می کند،
و پردازش بیشتر دستورالعمل ها. پیش پردازنده هنوز تشخیص می دهد و حذف می کند
نظرات، به طوری که شما می توانید یک فایل از پیش پردازش شده با ارسال کنید -C به کامپایلر بدون
چالش ها و مسائل. در این حالت، پیش پردازنده یکپارچه کمی بیشتر از یک توکنایزر است
برای قسمت های جلویی

-پیش پردازش شده اگر فایل ورودی دارای یکی از پسوندها باشد، ضمنی است .i, .ii or .mi.
اینها پسوندهایی هستند که GCC برای فایل های از پیش پردازش شده ایجاد شده توسط آنها استفاده می کند -Save- Temps.

-ftabstop =عرض
فاصله بین ایستگاه های تب را تنظیم کنید. این به پیش پردازنده کمک می کند تا ستون صحیح را گزارش دهد
اعداد در اخطارها یا خطاها، حتی اگر برگه ها در خط ظاهر شوند. اگر مقدار کمتر باشد
از 1 یا بیشتر از 100، گزینه نادیده گرفته می شود. پیش فرض 8 است.

-fdebug-cpp
این گزینه فقط برای اشکال زدایی GCC مفید است. هنگام استفاده با -E، اشکال زدایی را تخلیه می کند
اطلاعات در مورد نقشه های مکان قبل از هر نشانه در خروجی، dump of قرار می گیرد
نقشه ای که موقعیت آن به آن تعلق دارد. روگرفت نقشه که محل یک نشانه را در خود جای داده است
خواهد بود:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"م": ;"E": "محل": }

هنگام استفاده بدون -E، این گزینه هیچ تاثیری ندارد.

-افتراک-کلان-گسترش[=سطح]
ردیابی مکان نشانه‌ها در میان بسط‌های کلان. این به کامپایلر امکان انتشار می دهد
تشخیصی در مورد پشته گسترش ماکرو فعلی هنگامی که یک خطای کامپایل در آن رخ می دهد
یک گسترش کلان استفاده از این گزینه باعث مصرف پیش پردازنده و کامپایلر می شود
حافظه بیشتر را سطح پارامتر را می توان برای انتخاب سطح دقت نشانه استفاده کرد
ردیابی مکان بنابراین در صورت لزوم مصرف حافظه را کاهش می دهد. ارزش 0 of
سطح این گزینه را غیرفعال می کند مثل اینکه خیر -افتراک-کلان-گسترش حضور داشت در
خط فرمان ارزش 1 به‌خاطر این، مکان‌های نشانه‌ها را در حالت تنزل ردیابی می‌کند
حداقل سربار حافظه در این حالت تمام نشانه های حاصل از گسترش یک
آرگومان یک ماکرو تابع مانند مکان یکسانی دارد. ارزش 2 توکن ها را ردیابی می کند
مکان ها به طور کامل این مقدار بیشترین حافظه را تشنه می کند. وقتی این گزینه داده می شود
بدون آرگومان، مقدار پارامتر پیش فرض است 2.

-fexec-charset=کاراکتر
مجموعه کاراکترهای اجرایی را که برای ثابت های رشته و کاراکتر استفاده می شود، تنظیم کنید. پیشفرض
UTF-8 است. کاراکتر می تواند هر کدگذاری باشد که توسط کتابخانه "iconv" سیستم پشتیبانی می شود
معمولی

-FWIDE-EXEC-charset =کاراکتر
مجموعه کاراکترهای اجرای گسترده را که برای ثابت های رشته و کاراکتر گسترده استفاده می شود، تنظیم کنید.
پیش فرض UTF-32 یا UTF-16 است، هر کدام که با عرض "wchar_t" مطابقت دارد. مانند
با -Fexec-charset, کاراکتر می تواند هر رمزگذاری پشتیبانی شده توسط "iconv" سیستم باشد
روال کتابخانه؛ با این حال، شما با رمزگذاری هایی که مناسب نیستند مشکل خواهید داشت
دقیقا در "wchar_t".

-finput-charset=کاراکتر
مجموعه کاراکترهای ورودی را که برای ترجمه از مجموعه کاراکتر ورودی استفاده می‌شود، تنظیم کنید
فایل به مجموعه کاراکتر منبع مورد استفاده توسط GCC. اگر محل تعیین نشده باشد، یا GCC
نمی توان این اطلاعات را از محلی دریافت کرد، پیش فرض UTF-8 است. این میتواند باشد
توسط گزینه محلی یا این خط فرمان لغو می شود. در حال حاضر فرمان
در صورت وجود تضاد، گزینه line اولویت دارد. کاراکتر می تواند هر کدگذاری باشد
توسط روال کتابخانه "iconv" سیستم پشتیبانی می شود.

دایرکتوری fworking
تولید خط نشانگرها را در خروجی پیش پردازنده فعال کنید که به کامپایلر اجازه می دهد
دایرکتوری کاری فعلی را در زمان پیش پردازش بدانید. وقتی این گزینه است
فعال شود، پیش پردازنده پس از نشانگر خط اولیه، نشانگر خط دوم را منتشر می کند
با دایرکتوری کاری فعلی که با دو اسلش همراه است. GCC از این استفاده خواهد کرد
دایرکتوری، زمانی که در ورودی از پیش پردازش شده وجود دارد، به عنوان دایرکتوری که به عنوان ساطع می شود
دایرکتوری فعلی در برخی از فرمت های اطلاعات اشکال زدایی. این گزینه است
اگر اطلاعات اشکال زدایی فعال باشد، به طور ضمنی فعال می شود، اما می توان از این کار جلوگیری کرد
شکل نفی -fno-working-directory. اگر -P پرچم در دستور وجود دارد
خط، این گزینه هیچ تاثیری ندارد، زیرا هیچ دستورالعمل "#line" منتشر نمی شود.

-fno-show-column
شماره ستون ها را در عیب یابی چاپ نکنید. در صورت انجام تشخیص، این ممکن است ضروری باشد
اسکن شدن توسط برنامه ای که اعداد ستون ها را نمی فهمد، مانند
دژاگنو.

-A گزاره=پاسخ
با محمول ادعا کنید گزاره و پاسخ پاسخ. این فرم است
به شکل قدیمی تر ترجیح داده می شود -A گزاره(پاسخ)، که هنوز هم پشتیبانی می شود، زیرا
از کاراکترهای خاص پوسته استفاده نمی کند.

-A -گزاره=پاسخ
یک ادعا با محمول را لغو کنید گزاره و پاسخ پاسخ.

-dCHARS
کاراکترها دنباله ای از یک یا چند کاراکتر زیر است و نباید باشد
قبل از یک فاصله کاراکترهای دیگر توسط کامپایلر مناسب تفسیر می شوند
برای نسخه‌های آینده GCC محفوظ است، و بنابراین بی‌صدا نادیده گرفته می‌شوند. اگر مشخص کنید
شخصیت هایی که رفتارشان در تضاد است، نتیجه تعریف نشده است.

M به جای خروجی معمولی، فهرستی از #تعريف كردن بخشنامه برای همه
ماکروهای تعریف شده در طول اجرای پیش پردازنده، از جمله از پیش تعریف شده
ماکروها این به شما راهی می دهد تا بفهمید چه چیزی در نسخه شما از پیش تعریف شده است
پیش پردازنده با فرض اینکه فایلی ندارید foo.h، دستور

لمس foo.h; cpp -dM foo.h

تمام ماکروهای از پیش تعریف شده را نشان می دهد.

در صورت استفاده از -dM بدون -E گزینه، -dM به عنوان مترادف برای
-fdump-rtl-mach.

D پسندیدن M جز از دو جهت: انجام می دهد نه شامل ماکروهای از پیش تعریف شده و آن می شود
خروجی هر دو la #تعريف كردن دستورالعمل ها و نتیجه پیش پردازش هر دو نوع
خروجی به فایل خروجی استاندارد بروید.

N پسندیدن D، اما فقط نام های کلان را منتشر می کنند، نه بسط آنها.

I تولید #include دستورالعمل ها علاوه بر نتیجه پیش پردازش.

U پسندیدن D به جز اینکه فقط ماکروهایی که بسط می یابند یا تعریف آنها آزمایش می شود
در دستورالعمل های پیش پردازنده، خروجی هستند. خروجی تا زمان استفاده به تعویق می افتد
تست ماکرو؛ و # وندف دستورالعمل ها نیز خروجی برای ماکروهای آزمایش شده اما
در آن زمان تعریف نشده بود

-P جلوگیری از تولید نشانگرهای خط در خروجی از پیش پردازنده. این ممکن است
هنگام اجرای پیش پردازنده روی چیزی که کد C نیست مفید است و ارسال خواهد شد
به برنامه ای که ممکن است توسط خط نشانگرها اشتباه گرفته شود.

-C نظرات را نادیده نگیرید. همه نظرات به فایل خروجی ارسال می شوند، به جز
برای نظرات در دستورالعمل های پردازش شده، که همراه با دستورالعمل حذف می شوند.

هنگام استفاده باید برای عوارض جانبی آماده باشید -C; باعث می شود پیش پردازنده به
نظرات را در نوع خود به عنوان نشانه در نظر بگیرید. به عنوان مثال، نظرات ظاهر شده در
شروع این که چه چیزی می تواند یک خط دستورالعمل باشد، باعث می شود که آن خط به یک خط تبدیل شود
خط منبع معمولی، زیرا اولین نشانه روی خط دیگر a نیست #.

-CCC نظرات را نادیده نگیرید، از جمله در هنگام گسترش ماکرو. این شبیه است -C، بجز
که نظرات موجود در ماکروها نیز به فایل خروجی منتقل می شوند
ماکرو گسترش یافته است.

علاوه بر عوارض جانبی -C گزینه، -CCC گزینه باعث ایجاد تمام سبک های C++ می شود
نظرات داخل یک ماکرو برای تبدیل به نظرات به سبک C. این برای جلوگیری از بعد است
استفاده از آن ماکرو از اظهار نظر ناخواسته باقی مانده خط منبع.

La -CCC گزینه به طور کلی برای پشتیبانی از نظرات lint استفاده می شود.

سنتی-cpp
سعی کنید رفتار پیش پردازنده های قدیمی C را بر خلاف ISO C تقلید کنید
پیش پردازشگرها

سه نمودارها
توالی های سه گراف را پردازش کنید. اینها دنباله های سه شخصیتی هستند که همه با آنها شروع می شود
??، که توسط ISO C برای مخفف کاراکترهای منفرد تعریف می شوند. مثلا، ??/ می ایستد
برای \، به طوری که '??/n' یک کاراکتر ثابت برای یک خط جدید است. به طور پیش فرض، GCC نادیده می گیرد
سه گراف ها، اما در حالت های منطبق با استاندارد آنها را تبدیل می کند. را ببینید -std و -ansi
گزینه.

XNUMX تریگراف و جایگزین های آنها هستند

Trigraph: ??( ??) ??< ??> ??= ??/ ??' ؟؟! ??-
جایگزینی: [ ] { } # \ ^ | ~

نقشه برداری
کد ویژه را برای کار در سیستم های فایلی که فقط فایل های بسیار کوتاه را مجاز می دانند، فعال کنید
نام هایی مانند MS-DOS.

--کمک
--هدف-کمک
متنی را چاپ کنید که تمام گزینه های خط فرمان را به جای پیش پردازش هر چیزی توصیف می کند.

-v حالت پرمخاطب. شماره نسخه GNU CPP را در ابتدای اجرا چاپ کنید و
فرم نهایی مسیر شامل را گزارش دهید.

-H نام هر فایل هدر مورد استفاده را علاوه بر سایر فعالیت های عادی چاپ کنید. هر یک
نام تورفتگی نشان می دهد که چقدر در عمق است #include پشته آن است. هدر از پیش کامپایل شده
فایل‌ها نیز چاپ می‌شوند، حتی اگر نامعتبر باشند. یک از پیش کامپایل شده نامعتبر
فایل هدر با چاپ شده است ...ایکس و معتبر با ...! .

-version
- نسخه
شماره نسخه GNU CPP را چاپ کنید. با یک خط تیره، به طور معمول به پیش پردازش ادامه دهید.
با دو خط تیره فوراً خارج شوید.

عبور گزینه به la همگذار
می توانید گزینه ها را به اسمبلر منتقل کنید.

-وا،انتخاب
عبور انتخاب به عنوان یک گزینه برای اسمبلر. اگر انتخاب حاوی کاما است، تقسیم شده است
به گزینه های متعدد در کاما.

-Xassembler انتخاب
عبور انتخاب به عنوان یک گزینه برای اسمبلر. شما می توانید از این برای تامین سیستم خاص استفاده کنید
گزینه های اسمبلری که GCC نمی داند چگونه آنها را تشخیص دهد.

اگر می خواهید گزینه ای را ارسال کنید که آرگومان می گیرد، باید از آن استفاده کنید -Xassembler دو برابر،
یک بار برای گزینه و یک بار برای استدلال.

گزینه برای لینک
زمانی که کامپایلر فایل های شی را به یک فایل اجرایی پیوند می دهد، این گزینه ها وارد عمل می شوند
فایل خروجی. اگر کامپایلر یک مرحله پیوند را انجام ندهد، آنها بی معنی هستند.

شی-فایل-نام
نام فایلی که به یک پسوند شناخته شده خاص ختم نمی شود برای نام گذاری an در نظر گرفته می شود
فایل شی یا کتابخانه (فایل های شی با پیوند دهنده از کتابخانه ها متمایز می شوند
با توجه به محتویات فایل.) اگر پیوند انجام شود، از این فایل های شی به عنوان استفاده می شود
ورودی به پیوند دهنده

-c
-S
-E اگر هر یک از این گزینه ها استفاده شود، پیوند دهنده اجرا نمی شود و نام فایل ها را شیء می کند
نباید به عنوان استدلال استفاده شود.

-lکتابخانه
-l کتابخانه
کتابخانه نامگذاری شده را جستجو کنید کتابخانه هنگام پیوند دادن (دومین جایگزین با
کتابخانه به عنوان یک آرگومان جداگانه فقط برای انطباق با POSIX است و توصیه نمی شود.)

فرق می کند که در کدام دستور این گزینه را بنویسید. لینک دهنده جستجو می کند
و کتابخانه ها و فایل های شی را به ترتیبی که مشخص شده اند پردازش می کند. بدین ترتیب، foo.o
-lz bar.o کتابخانه را جستجو می کند z پس از فایل foo.o اما قبلاً bar.o. اگر bar.o اشاره دارد به
توابع در z، این توابع ممکن است بارگیری نشوند.

پیوند دهنده یک لیست استاندارد از دایرکتوری ها را برای کتابخانه جستجو می کند که در واقع همینطور است
فایلی به نام library.a. سپس پیوند دهنده از این فایل به گونه ای استفاده می کند که گویی مشخص شده است
دقیقا با نام

دایرکتوری های جستجو شده شامل چندین دایرکتوری استاندارد سیستم به علاوه هر کدام از شما هستند
مشخص کنید با -L.

معمولاً فایل‌هایی که از این طریق یافت می‌شوند فایل‌های کتابخانه‌ای هستند --- فایل‌های بایگانی که اعضای آن‌ها هستند
فایل های شی پیوند دهنده یک فایل بایگانی را با اسکن آن برای اعضا مدیریت می کند
که نمادهایی را تعریف می کنند که تاکنون به آنها ارجاع داده شده اما تعریف نشده اند. اما اگر
فایلی که پیدا می شود یک فایل شی معمولی است، به روش معمول پیوند داده شده است. در
تنها تفاوت بین استفاده از -l گزینه و تعیین نام فایل است که -l
احاطه می کند کتابخانه با لوب و .a و چندین دایرکتوری را جستجو می کند.

-lobjc
شما به این مورد خاص نیاز دارید -l گزینه ای به منظور پیوند Objective-C یا
برنامه Objective-C++.

-nostartfiles
هنگام پیوند از فایل های راه اندازی استاندارد سیستم استفاده نکنید. سیستم استاندارد
کتابخانه ها به طور معمول استفاده می شوند، مگر اینکه -nostdlib or -nodefaultlibs استفاده می شود.

-nodefaultlibs
هنگام پیوند از کتابخانه های سیستم استاندارد استفاده نکنید. فقط کتابخانه هایی که شما مشخص کرده اید
به پیوند دهنده منتقل می شود، گزینه هایی که پیوند کتابخانه های سیستم را مشخص می کنند، مانند
به عنوان "-static-libgcc" یا "-shared-libgcc"، نادیده گرفته می شود. فایل های راه اندازی استاندارد
به طور معمول استفاده می شوند، مگر اینکه -nostartfiles استفاده می شود. کامپایلر ممکن است فراخوانی ایجاد کند
"memcmp"، "memset"، "memcpy" و "memmove". این ورودی ها معمولاً توسط
ورودی های libc این نقاط ورودی باید از طریق مکانیسم دیگری تامین شود
زمانی که این گزینه مشخص شده است.

-nostdlib
هنگام پیوند، از فایل ها یا کتابخانه های راه اندازی سیستم استاندارد استفاده نکنید. بدون راه اندازی
فایل‌ها و فقط کتابخانه‌هایی که مشخص کرده‌اید به گزینه‌های پیوند دهنده ارسال می‌شوند
تعیین پیوند کتابخانه های سیستم، مانند "-static-libgcc" یا
"-shared-libgcc"، نادیده گرفته خواهد شد. کامپایلر ممکن است تماس هایی با "memcmp" ایجاد کند،
"memset"، "memcpy" و "memmove". این ورودی ها معمولاً با ورودی هایی در حل می شوند
libc این نقاط ورودی باید از طریق مکانیسم دیگری تامین شوند
گزینه مشخص شده است.

یکی از کتابخانه های استاندارد دور زده شده توسط -nostdlib و -nodefaultlibs is libgcc.a، یک
کتابخانه ای از زیر برنامه های داخلی که GCC برای غلبه بر کاستی های خاص استفاده می کند
ماشین‌ها یا نیازهای ویژه برای برخی از زبان‌ها.

در بیشتر موارد، شما نیاز دارید libgcc.a حتی زمانی که می خواهید از دیگر کتابخانه های استاندارد خودداری کنید.
به عبارت دیگر، زمانی که شما مشخص می کنید -nostdlib or -nodefaultlibs معمولا باید
مشخص كردن -lgcc همچنین. این تضمین می کند که هیچ مرجع حل نشده ای به آن ندارید
زیربرنامه های داخلی کتابخانه GCC (مثلا، __اصلی، برای اطمینان از C++ استفاده می شود
سازنده ها فراخوانی خواهند شد.)

- پای
یک موقعیت اجرایی مستقل بر روی اهدافی که از آن پشتیبانی می کنند، تولید کنید. برای قابل پیش بینی
نتایج، شما همچنین باید همان مجموعه ای از گزینه هایی را که برای تولید کد استفاده شده است را مشخص کنید
(-fpie, -fPIE، یا مدل های فرعی) زمانی که این گزینه را مشخص می کنید.

-rdynamic
پرچم را پاس کن صادرات - پویا به پیوند دهنده ELF، در اهدافی که از آن پشتیبانی می کنند. این
به پیوند دهنده دستور می دهد تا همه نمادها، نه تنها مورد استفاده، را به نماد پویا اضافه کند
جدول. این گزینه برای برخی از کاربردهای "dlopen" یا اجازه به دست آوردن مورد نیاز است
ردیابی از داخل یک برنامه

-s تمام جدول نمادها و اطلاعات جابجایی را از فایل اجرایی حذف کنید.

-استاتیک
در سیستم‌هایی که از پیوند پویا پشتیبانی می‌کنند، این از پیوند با اشتراک‌گذاری شده جلوگیری می‌کند
کتابخانه ها در سیستم های دیگر، این گزینه هیچ تاثیری ندارد.

-به اشتراک گذاشته شده
یک شی به اشتراک گذاشته شده تولید کنید که سپس می تواند با اشیاء دیگر پیوند داده شود تا یک شیء را تشکیل دهد
قابل اجرا همه سیستم ها از این گزینه پشتیبانی نمی کنند. برای نتایج قابل پیش بینی، شما باید
همچنین همان مجموعه ای از گزینه هایی را که برای تولید کد استفاده شده است را مشخص کنید (-fpic, -fPIC، یا
مدل فرعی) هنگامی که این گزینه را مشخص می کنید.[1]

-shared-libgcc
-static-libgcc
در سیستم هایی که ارائه می کنند libgcc به عنوان یک کتابخانه مشترک، این گزینه ها استفاده از
به ترتیب نسخه اشتراکی یا استاتیک. اگر نسخه مشترکی وجود ندارد libgcc بود
زمانی که کامپایلر پیکربندی شده بود ساخته شد، این گزینه ها هیچ تاثیری ندارند.

چندین موقعیت وجود دارد که در آن یک برنامه باید از اشتراک گذاری شده استفاده کند libgcc
به جای نسخه استاتیک رایج ترین آنها زمانی است که برنامه
مایل است استثناها را در کتابخانه های مشترک مختلف پرتاب کند و بگیرد. در این مورد،
هر یک از کتابخانه ها و همچنین خود برنامه باید از اشتراک گذاری استفاده کند libgcc.

بنابراین، درایورهای G++ و GCJ به طور خودکار اضافه می شوند -shared-libgcc هر وقت ساختی
یک کتابخانه مشترک یا یک فایل اجرایی اصلی، زیرا برنامه های C++ و جاوا معمولا از آن استفاده می کنند
استثناها، بنابراین این کار درستی است که باید انجام شود.

اگر در عوض از درایور GCC برای ایجاد کتابخانه های مشترک استفاده کنید، ممکن است متوجه شوید که آنها
همیشه به اشتراک گذاشته نخواهد شد libgcc. اگر GCC پیدا کند، در پیکربندی آن
زمانی که شما یک پیوند دهنده غیر گنو یا یک پیوند دهنده گنو دارید که از گزینه پشتیبانی نمی کند
--eh-frame-hdr، نسخه مشترک را پیوند خواهد داد libgcc به کتابخانه های مشترک توسط
پیش فرض در غیر این صورت، از مزایای پیوند دهنده استفاده می کند و آن را بهینه می کند
پیوند دادن با نسخه مشترک libgcc، پیوند با نسخه ثابت libgcc
به صورت پیش فرض. این اجازه می دهد تا استثناها از طریق چنین کتابخانه های مشترک منتشر شوند،
بدون متحمل شدن هزینه های جابجایی در زمان بارگذاری کتابخانه.

با این حال، اگر یک کتابخانه یا فایل اجرایی اصلی قرار است استثناهایی را ایجاد کند یا آن را بگیرد، شما
باید آن را با استفاده از درایور G++ یا GCJ، مطابق با زبان‌های مورد استفاده در آن، پیوند دهید
برنامه یا با استفاده از گزینه -shared-libgcc، به گونه ای که با اشتراک گذاری مرتبط است
libgcc.

-static-libstdc++
هنگامی که g ++ برنامه برای پیوند دادن یک برنامه ++C استفاده می شود، معمولاً به طور خودکار انجام می شود
لینک علیه libstdc++. اگر libstdc++ به عنوان یک کتابخانه مشترک در دسترس است، و
-استاتیک گزینه استفاده نمی شود، سپس این گزینه در برابر نسخه مشترک لینک خواهد شد
libstdc++. که به طور معمول خوب است. با این حال، گاهی اوقات فریز کردن آن مفید است
نسخه libstdc++ بدون رفتن به حالت کاملاً ایستا توسط برنامه استفاده می شود
ارتباط دادن. را -static-libstdc++ گزینه را هدایت می کند g ++ درایور به پیوند libstdc++
به صورت ایستا، بدون اینکه لزوماً کتابخانه های دیگر را به صورت ایستا به هم مرتبط کنند.

- نمادین
هنگام ساخت یک شی مشترک، ارجاعات را به نمادهای جهانی متصل کنید. هشدار در مورد هر
مراجع حل نشده (مگر اینکه توسط گزینه ویرایشگر پیوند لغو شود -xlinker -z
-xlinker دفاع می کند). فقط تعداد کمی از سیستم ها از این گزینه پشتیبانی می کنند.

-T خط
استفاده کنید خط به عنوان اسکریپت پیوند دهنده این گزینه توسط اکثر سیستم هایی که از آن استفاده می کنند پشتیبانی می شود
پیوند دهنده گنو. در برخی از اهداف، مانند اهداف بدون سیستم عامل،
la -T برای اجتناب از ارجاع به نمادهای تعریف نشده ممکن است هنگام پیوند مورد نیاز باشد.

-xlinker انتخاب
عبور انتخاب به عنوان گزینه ای برای پیوند دهنده. شما می توانید از این برای تامین سیستم خاص استفاده کنید
گزینه های پیوند دهنده که GCC آنها را نمی شناسد.

اگر می خواهید گزینه ای را ارسال کنید که یک آرگومان جداگانه می گیرد، باید از آن استفاده کنید -xlinker
دو بار، یک بار برای گزینه و یک بار برای استدلال. مثلا پاس دادن -اصرار
تعاریف، باید بنویسید -xlinker -اصرار -xlinker تعاریف. این کار نمی کند
به ارسال -xlinker "-اصرار تعاریف"، زیرا این کل رشته را به صورت a عبور می دهد
آرگومان واحد، که آن چیزی نیست که پیوند دهنده انتظار دارد.

هنگام استفاده از پیوند دهنده گنو، انتقال آرگومان ها به پیوند دهنده معمولا راحت تر است
گزینه ها با استفاده از انتخاب=ارزش نحو به عنوان آرگومان های جداگانه. مثلا شما
می تواند مشخص کند -xlinker -Map=output.map به جای -xlinker -نقشه -xlinker خروجی.نقشه.
سایر پیوند دهنده ها ممکن است از این نحو برای گزینه های خط فرمان پشتیبانی نکنند.

-Wl،انتخاب
عبور انتخاب به عنوان گزینه ای برای پیوند دهنده. اگر انتخاب حاوی کاما است، به تقسیم می شود
چندین گزینه در کاما می توانید از این نحو برای ارسال آرگومان به آن استفاده کنید
گزینه. مثلا، -Wl،-Map،output.map عبور می کند -نقشه خروجی.نقشه به پیوند دهنده چه زمانی
با استفاده از پیوند دهنده گنو، می توانید همان جلوه را با استفاده از آن نیز دریافت کنید -Wl،-Map=output.map.

توجه: در اوبونتو 8.10 و نسخه‌های بعدی، برای LDFLAGS، این گزینه وجود دارد -wl ، -z ، relro استفاده می شود.
برای غیرفعال کردن ، استفاده کنید -Wl،-z، نورلرو.

-u نماد
وانمود کردن نماد نماد تعریف نشده است، برای وادار کردن پیوند ماژول های کتابخانه برای تعریف
آی تی. شما می توانید استفاده کنید -u چندین بار با نمادهای مختلف برای بارگذاری اجباری
ماژول های کتابخانه اضافی

گزینه برای فهرست راهنما جستجو
این گزینه ها دایرکتوری هایی را برای جستجوی فایل های هدر، کتابخانه ها و قطعات مشخص می کنند
از کامپایلر:

-Iدیر
دایرکتوری را اضافه کنید دیر به سر فهرست دایرکتوری هایی که برای سربرگ جستجو می شوند
فایل ها. این می تواند برای نادیده گرفتن فایل هدر سیستم، جایگزین فایل شما استفاده شود
نسخه، زیرا این دایرکتوری ها قبل از فایل هدر سیستم جستجو می شوند
دایرکتوری ها با این حال، شما نباید از این گزینه برای افزودن دایرکتوری هایی که حاوی هستند استفاده کنید
فایل های هدر سیستم ارائه شده توسط فروشنده (استفاده از -سیستم برای آن). اگر از بیش از یک مورد استفاده می کنید
-I گزینه، دایرکتوری ها به ترتیب چپ به راست اسکن می شوند. سیستم استاندارد
دایرکتوری ها بعد از آن می آیند.

اگر یک سیستم استاندارد شامل دایرکتوری یا دایرکتوری مشخص شده با -سیستماست،
نیز مشخص شده است -Iاز -I گزینه نادیده گرفته خواهد شد. دایرکتوری همچنان خواهد بود
جستجو شده اما به عنوان دایرکتوری سیستم در موقعیت عادی خود در سیستم شامل زنجیره می شود.
این برای اطمینان از این است که رویه شورای همکاری خلیج فارس برای رفع هدرهای سیستم باگ و سفارش‌گذاری انجام می‌شود
برای دستورالعمل include_next سهوا تغییر نکرده اند. اگر واقعاً نیاز دارید
ترتیب جستجوی دایرکتوری های سیستم را تغییر دهید، از -nostdinc و / یا -سیستم
گزینه.

-iplugindir=دیر
دایرکتوری را برای جستجوی افزونه هایی تنظیم کنید که از آنها عبور می کنند -fplugin=نام بجای
-fplugin=مسیر/نام.بنابراین. این گزینه برای استفاده کاربر نیست، بلکه فقط مورد استفاده قرار می گیرد
از کنار راننده گذشت

-نقل دادندیر
دایرکتوری را اضافه کنید دیر به سر فهرست دایرکتوری هایی که برای سربرگ جستجو می شوند
فایل ها فقط برای مورد #include "پرونده"; آنها جستجو نمی شوند #include <پرونده>,
در غیر این صورت درست مثل -I.

-Lدیر
دایرکتوری اضافه کنید دیر به لیست دایرکتوری هایی که باید جستجو شوند -l.

-Bپیشوند
این گزینه مشخص می کند که کجا باید فایل های اجرایی، کتابخانه ها، شامل فایل ها و
فایل های داده خود کامپایلر

برنامه درایور کامپایلر یک یا چند زیربرنامه را اجرا می کند cpp, cc1, as و ld.
تلاش می کند پیشوند به عنوان پیشوند برای هر برنامه ای که سعی می کند اجرا شود، هم با و هم بدون
دستگاه/نسخه/.

برای اجرای هر زیربرنامه، درایور کامپایلر ابتدا آن را امتحان می کند -B پیشوند، در صورت وجود
اگر آن نام یافت نشد، یا اگر -B مشخص نشده بود، راننده دو استاندارد را امتحان می کند
پیشوندها، /usr/lib/gcc/ و /usr/local/lib/gcc/. اگر هیچ کدام از اینها منجر به الف نشود
نام فایلی که پیدا می شود، نام برنامه اصلاح نشده با استفاده از آن جستجو می شود
دایرکتوری های مشخص شده در شما PATH متغیر محیطی.

کامپایلر بررسی خواهد کرد که آیا مسیر ارائه شده توسط -B به یک دایرکتوری اشاره دارد،
و در صورت لزوم یک کاراکتر جداکننده دایرکتوری در انتهای مسیر اضافه می کند.

-B پیشوندهایی که به طور موثر نام دایرکتوری ها را مشخص می کنند برای کتابخانه های موجود نیز اعمال می شوند
لینکر، زیرا کامپایلر این گزینه ها را به آن ترجمه می کند -L گزینه های پیوند دهنده
آنها همچنین بر روی فایل های شامل در پیش پردازنده اعمال می شوند، زیرا کامپایلر ترجمه می کند
این گزینه ها به -سیستم گزینه هایی برای پیش پردازنده در این مورد، کامپایلر
ضمیمه می کند شامل به پیشوند

فایل پشتیبانی زمان اجرا libgcc.a همچنین می توان با استفاده از -B پیشوند، اگر
مورد نیاز است. اگر در آنجا یافت نشد، دو پیشوند استاندارد بالا امتحان می‌شوند و این
همش است. اگر فایل به این وسیله پیدا نشود از لینک خارج می شود.

راه دیگری برای تعیین یک پیشوند بسیار شبیه به -B پیشوند استفاده از محیط است
متغیر GCC_EXEC_PREFIX.

به عنوان یک کلاژ خاص، اگر مسیر ارائه شده توسط -B is [dir/]stageN/، که در آن N یک عدد است
در محدوده 0 تا 9، سپس با جایگزین می شود [dir/]شامل. این برای کمک است
بوت کردن کامپایلر

-specs =پرونده
روند پرونده پس از خواندن کامپایلر در استاندارد مشخصات فایل، به منظور لغو
پیش فرض هایی که gcc برنامه درایور هنگام تعیین سوئیچ هایی که باید عبور کنند استفاده می کند
به cc1, cc1plus, as, ldو غیره بیش از یک -specs =پرونده را می توان بر روی مشخص کرد
خط فرمان، و آنها به ترتیب، از چپ به راست پردازش می شوند.

--sysroot=دیر
استفاده کنید دیر به عنوان دایرکتوری ریشه منطقی برای هدرها و کتابخانه ها. به عنوان مثال، اگر
کامپایلر معمولاً سرصفحه ها را در آن جستجو می کند / usr / شامل و کتابخانه ها در / usr / معاونت,
در عوض جستجو خواهد کرد dir/usr/include و dir/usr/lib.

اگر هم از این گزینه و هم از -isysroot گزینه، سپس --sysroot گزینه خواهد شد
برای کتابخانه ها اعمال می شود، اما -isysroot گزینه برای فایل های هدر اعمال خواهد شد.

پیوند دهنده گنو (با نسخه 2.16 شروع می شود) پشتیبانی لازم برای این کار را دارد
گزینه. اگر پیوند دهنده شما از این گزینه پشتیبانی نمی کند، جنبه فایل هدر از
--sysroot همچنان کار خواهد کرد، اما جنبه کتابخانه ای کار نخواهد کرد.

-من- این گزینه منسوخ شده است. خواهش می کنم استفاده کنید -نقل دادن در عوض برای -I دایرکتوری های قبل
la -من- و حذف کنید -من-. هر دایرکتوری که با آن مشخص می کنید -I گزینه های قبل از
-من- گزینه فقط برای مورد جستجو می شود #include "پرونده"; آنها جستجو نمی شوند
برای #include <پرونده>.

اگر دایرکتوری های اضافی با -I گزینه های بعد از -من-، این
دایرکتوری ها برای همه جستجو می شوند #include بخشنامه ها (معمولا تمام -I دایرکتوری
از این طریق استفاده می شود.)

علاوه بر این، -من- گزینه استفاده از دایرکتوری فعلی (که در آن
فایل ورودی فعلی از) به عنوان اولین فهرست جستجو برای #include "پرونده".
هیچ راهی برای نادیده گرفتن این اثر وجود ندارد -من-. با -NS. می توانید جستجو را مشخص کنید
دایرکتوری که هنگام فراخوانی کامپایلر جاری بود. این دقیقاً این نیست
همان کاری که پیش پردازنده به طور پیش فرض انجام می دهد، اما اغلب رضایت بخش است.

-من- استفاده از دایرکتوری های سیستم استاندارد برای فایل های هدر را مهار نمی کند.
به این ترتیب، -من- و -nostdinc مستقل هستند.

تعیین هدف دستگاه و کامپایلر نسخه
روش معمول برای اجرای GCC اجرای فایل اجرایی فراخوانی شده است gcc، یا دستگاه-gcc وقتی متقابل
تدوین، یا دستگاه-gcc-نسخه برای اجرای نسخه ای غیر از نسخه ای که نصب شده است
آخر.

سخت افزار مدل و پیکربندی
هر نوع ماشین هدف می‌تواند گزینه‌های خاص خود را داشته باشد، با شروع -m، انتخاب کنید
در میان مدل‌ها یا پیکربندی‌های سخت‌افزاری مختلف --- برای مثال، 68010 در مقابل 68020، شناور
پردازنده مشترک یا هیچ کدام یک نسخه نصب شده از کامپایلر می تواند برای هر مدلی کامپایل شود
یا پیکربندی، با توجه به گزینه های مشخص شده.

برخی از تنظیمات کامپایلر نیز از گزینه های ویژه اضافی، معمولاً برای
سازگاری با سایر کامپایلرها در همان پلتفرم

آداپتوا ظهور و تجلی عیسی گزینه

اینها -m گزینه هایی برای Adapteva Epiphany تعریف شده است:

-mhalf-reg-file
هیچ ثباتی را در محدوده "r32"..."r63" اختصاص ندهید. این اجازه می دهد تا کد روی آن اجرا شود
انواع سخت افزاری که فاقد این رجیسترها هستند.

-mprefer-short-insn-regs
ترجیحاً رجیسترهایی را تخصیص دهید که اجازه تولید دستورالعمل کوتاه را می دهند. این می تواند
منجر به افزایش تعداد دستورالعمل ها می شود، بنابراین اگر این امر باعث کاهش یا افزایش اندازه کد شود
ممکن است از مورد به مورد متفاوت باشد.

-branch-cost=تعداد
هزینه شعب را تقریباً تنظیم کنید تعداد دستورالعمل های "ساده" این هزینه فقط یک است
اکتشافی است و تضمینی برای تولید نتایج ثابت در سراسر نسخه ها وجود ندارد.

-mcmove
تولید حرکات شرطی را فعال کنید.

-mnops=تعداد
منتشر می کنند تعداد نه قبل از هر دستورالعمل تولید شده دیگر.

-mno-soft-cmpsf
برای مقایسه‌های ممیز شناور با دقت تک، یک دستورالعمل fsub منتشر کنید و آن را آزمایش کنید
پرچم ها این سریعتر از مقایسه نرم افزاری است، اما می تواند نتایج نادرستی داشته باشد
وجود NaNs، یا زمانی که دو عدد کوچک مختلف با هم مقایسه می شوند به طوری که آنها
تفاوت صفر محاسبه می شود. پیش فرض است -msoft-cmpsf، که از کندتر استفاده می کند، اما
مقایسه نرم افزار سازگار با IEEE.

-mstack-offset=تعداد
فاصله بین بالای پشته و نشانگر پشته را تنظیم کنید. به عنوان مثال، مقدار 8
به این معنی که هشت بایت در محدوده sp+0...sp+7 را می توان توسط توابع برگ استفاده کرد
بدون تخصیص پشته ارزش هایی غیر از 8 or 16 آزمایش نشده و بعید است
کار همچنین توجه داشته باشید که این گزینه ABI را تغییر می دهد و یک برنامه را با a کامپایل می کند
آفست پشته های متفاوتی نسبت به کتابخانه هایی که با آنها کامپایل شده اند، معمولاً انجام نمی شود
کار کردن این گزینه می تواند مفید باشد اگر بخواهید ارزیابی کنید که آیا یک پشته متفاوت افست شده است یا خیر
کد بهتری به شما می دهد، اما در واقع از یک پشته افست متفاوت برای ساخت استفاده کنید
برنامه های کاری، توصیه می شود زنجیره ابزار را با مناسب پیکربندی کنید
--with-stack-offset=تعداد گزینه.

-منو-دور-شب
زمانبند را طوری فرض کنید که حالت گرد کردن روی کوتاهی تنظیم شده است. را
پیش فرض است -Mround-نزدیکترین.

تماس های طولانی
اگر غیر از این توسط یک ویژگی مشخص نشده است، فرض کنید همه فراخوانی ها ممکن است فراتر از این باشند
محدوده دستورات b/bl را جبران کنید و بنابراین آدرس تابع را در آن بارگذاری کنید
قبل از انجام تماس (در غیر این صورت مستقیم) ثبت نام کنید. این پیش فرض است.

تماس های کوتاه
اگر غیر از این توسط یک ویژگی مشخص نشده است، فرض کنید همه تماس های مستقیم در محدوده هستند
از دستورالعمل های b/bl، بنابراین از این دستورالعمل ها برای تماس های مستقیم استفاده کنید. پیشفرض
is تماس های طولانی.

-msmall16
فرض کنید آدرس ها را می توان به صورت مقادیر بدون علامت 16 بیتی بارگذاری کرد. این مربوط به
آدرس های تابع که تماس های طولانی معناشناسی در کار است.

-mfp-mode=حالت
حالت غالب واحد ممیز شناور را تنظیم کنید. این شناور را تعیین می کند
حالت نقطه ای که در زمان فراخوانی تابع و زمان بازگشت ارائه و انتظار می رود. ساخت
این حالت مطابق با حالتی است که شما در شروع عملکرد به آن نیاز دارید
برنامه های کوچکتر و سریعتر با اجتناب از سوئیچ های غیر ضروری حالت.

حالت را می توان به یکی از مقادیر زیر تنظیم کرد:

تماس گیرنده
هر حالتی در ورود تابع معتبر است و در هنگام عملکرد حفظ یا بازیابی می شود
برمی گرداند و زمانی که توابع دیگر را فراخوانی می کند. این حالت برای کامپایل مفید است
کتابخانه ها یا سایر واحدهای تلفیقی که ممکن است بخواهید آنها را در قالب های مختلف ادغام کنید
برنامه‌هایی با حالت‌های مختلف FPU غالب و سهولت در انجام آن
استفاده از یک فایل شی منفرد بیشتر از اندازه و سرعت سربار برای هر حالت اضافی است
تغییری که ممکن است مورد نیاز باشد، در مقایسه با آنچه که با موارد بیشتر مورد نیاز است
انتخاب خاص حالت FPU غالب.

کوتاه کردن
این حالتی است که برای محاسبات ممیز شناور با کوتاه کردن (یعنی دور
به سمت صفر) حالت گرد کردن. این شامل تبدیل از نقطه شناور به
عدد صحیح

دور نزدیکترین
این حالتی است که برای محاسبات ممیز شناور با دور به نزدیکترین یا
حتی حالت گرد کردن

INT این حالتی است که برای انجام محاسبات اعداد صحیح در FPU، به عنوان مثال عدد صحیح، استفاده می شود
ضرب، یا عدد صحیح ضرب-و-انباشت.

پیش فرض این است -mfp-mode=تماس گیرنده

-mnosplit-lohi
-mno-postinc
-mno-postmodify
ترفندهای تولید کد که به ترتیب، تقسیم بارهای 32 بیتی را غیرفعال می کند.
تولید آدرس‌های پس از افزایش، و تولید آدرس‌های پس از اصلاح. در
پیش فرض ها هستند msplit-lohi, -mpost-incو -mpost-modify.

-mnovect-double
حالت ترجیحی SIMD را به SImode تغییر دهید. پیش فرض است -مره، که با استفاده از
DImode به عنوان حالت ترجیحی SIMD.

-max-vect-align=تعداد
حداکثر تراز برای انواع حالت برداری SIMD. تعداد ممکن است 4 یا 8 باشد. پیش فرض این است
8. توجه داشته باشید که این یک تغییر ABI است، حتی اگر بسیاری از رابط های تابع کتابخانه این کار را انجام دهند
اگر از حالت‌های برداری SIMD در مکان‌هایی که بر اندازه تأثیر می‌گذارند استفاده نکنند، تحت تأثیر قرار نگیرند
و/یا تراز انواع مربوطه.

-msplit-vecmove-early
بردار تقسیم به تک کلمه حرکت می کند قبل از بارگذاری مجدد. در تئوری این می تواند بدهد
تخصیص ثبت نام بهتر است، اما تا کنون به نظر می رسد به طور کلی برعکس است.

-m1reg-REG
یک ثبات را برای نگه داشتن ثابت -1 مشخص کنید، که بارگذاری کوچک را منفی می کند
ثابت ها و بیت ماسک های خاص سریع تر. مقادیر مجاز برای reg r43 و r63 هستند،
که مشخص می کند از آن ثبات به عنوان یک ثبات ثابت استفاده شود و هیچ، به این معنی که خیر
ثبت نام برای این منظور استفاده می شود. پیش فرض است -m1reg-هیچکدام.

AAArch64 گزینه

این گزینه ها برای پیاده سازی AArch64 تعریف شده اند:

-mbig-endian
کد big-endian را تولید کنید. زمانی که GCC برای یک پیکربندی شده است، این پیش‌فرض است
aarch64_be-*-* هدف.

-mgeneral-regs-only
کدی را ایجاد کنید که فقط از رجیسترهای عمومی استفاده می کند.

-mlittle-endian
کد کمی endian تولید کنید. زمانی که GCC برای یک پیکربندی شده است، این پیش‌فرض است
aarch64-*-* اما نه aarch64_be-*-* هدف.

-mcmodel=کوچک
کد برای مدل کد کوچک تولید کنید. برنامه و نمادهای ایستا تعریف شده آن
باید در 1 گیگابایت از یکدیگر باشند. اشاره گرها 64 بیت هستند. برنامه ها می توانند به صورت ایستا باشند
یا به صورت پویا پیوند داده شده است. این مدل به طور کامل اجرا نشده است و بیشتر به عنوان
"کم اهمیت".

-mcmodel=small
کد برای مدل کد کوچک تولید کنید. برنامه و تعریف استاتیک آن
نمادها باید در 4 گیگابایت از یکدیگر باشند. اشاره گرها 64 بیت هستند. برنامه ها می توانند باشند
به صورت ایستا یا پویا پیوند خورده است. این مدل کد پیش فرض است.

-mcmodel=بزرگ
کد برای مدل کد بزرگ تولید کنید. این هیچ فرضی در مورد آدرس و
اندازه بخش ها اشاره گرها 64 بیت هستند. برنامه ها فقط می توانند به صورت ایستا پیوند شوند.

-mstrict-align
فرض نکنید که مراجع حافظه غیر تراز توسط سیستم مدیریت می شوند.

-momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer
نشانگر فریم را در توابع برگ حذف یا نگه دارید. رفتار سابق است
به طور پیش فرض

-mtls-dialect=desc
از توصیفگرهای TLS به عنوان مکانیزم ذخیره‌سازی محلی برای دسترسی‌های پویا به TLS استفاده کنید
متغیرها این پیش فرض است.

-mtls-dialect=سنتی
از TLS سنتی به عنوان مکانیزم ذخیره‌سازی محلی برای دسترسی‌های پویا به TLS استفاده کنید
متغیرها

-مارس=نام
نام معماری هدف را مشخص کنید که به صورت اختیاری با یک یا چند پسوند اضافه می شود
اصلاح کننده های ویژگی این گزینه دارای فرم است -مارس=قوس{+[نه]از ویژگی های}*، جایی که
فقط ارزش برای قوس is armv8-a. مقادیر ممکن برای از ویژگی های در مستند شده اند
زیر بخش زیر

در جایی که اصلاح کننده های ویژگی متضاد مشخص شده اند، از سمت راست ترین ویژگی استفاده می شود.

GCC از این نام برای تعیین نوع دستورالعمل‌هایی که می‌تواند هنگام تولید صادر کند استفاده می‌کند
کد اسمبلی این گزینه را می توان همراه یا به جای آن استفاده کرد -mcpu=
گزینه.

-mcpu=نام
نام پردازنده مورد نظر را که به صورت اختیاری با یک یا چند ویژگی پسوند می شود، مشخص کنید
اصلاح کننده ها این گزینه دارای فرم است -mcpu=پردازنده{+[نه]از ویژگی های}*، در صورت امکان
مقادیر برای پردازنده هستند عمومی, بزرگ. مقادیر ممکن برای از ویژگی های مستند شده اند در
زیر بخش زیر

در جایی که اصلاح کننده های ویژگی متضاد مشخص شده اند، از سمت راست ترین ویژگی استفاده می شود.

GCC از این نام برای تعیین نوع دستورالعمل‌هایی که می‌تواند هنگام تولید صادر کند استفاده می‌کند
کد اسمبلی

-mtune=نام
نام پردازنده را برای تنظیم عملکرد مشخص کنید. کد تنظیم خواهد شد
انگار پردازنده هدف از نوع مشخص شده در این گزینه است، اما همچنان از آن استفاده می کند
دستورالعمل های سازگار با پردازنده هدف مشخص شده توسط a -mcpu= گزینه. این
گزینه را نمی توان با اصلاح کننده های ویژگی پسوند کرد.

-مارس و -mcpu اصلاح کننده های ویژگی

اصلاح کننده های ویژگی مورد استفاده با -مارس و -mcpu می تواند یکی از موارد زیر باشد:

عضو سازمانهای سری ومخفی
افزونه Crypto را فعال کنید. این بدان معناست که SIMD پیشرفته فعال است.

fp دستورالعمل های ممیز شناور را فعال کنید.

شبیه سازی
دستورالعمل های پیشرفته SIMD را فعال کنید. این بدان معناست که دستورالعمل های ممیز شناور هستند
فعال شد. این پیش فرض برای تمام مقادیر ممکن فعلی برای گزینه ها است -مارس و
-mcpu=.

ARM گزینه

اینها -m گزینه ها برای معماری ماشین های پیشرفته RISC (ARM) تعریف شده اند:

-mabi=نام
کد برای ABI مشخص شده تولید کنید. مقادیر مجاز عبارتند از: apcs-gnu, atpcs, aapcs,
aapcs-linux و iwmmxt.

-mapcs-frame
یک قاب پشته ای ایجاد کنید که با استاندارد تماس رویه ARM برای همه سازگار باشد
توابع، حتی اگر این به شدت برای اجرای صحیح کد ضروری نباشد.
تعیین -fomit-frame-pointer با این گزینه باعث می شود که قاب های پشته ای نباشند
برای توابع برگ تولید شده است. پیش فرض است -mno-apcs-frame.

-mapcs
این مترادف برای -mapcs-frame.

-mthumb-interwork
کدی را ایجاد کنید که از تماس بین مجموعه دستورات ARM و Thumb پشتیبانی می کند.
بدون این گزینه، در معماری های pre-v5، دو مجموعه دستورالعمل نمی توانند باشند
به طور قابل اعتماد در داخل یک برنامه استفاده می شود. پیش فرض است -mno-thumb-interwork، از آنجایی که کمی
کد بزرگتر زمانی تولید می شود -mthumb-interwork مشخص شده است. در تنظیمات AAPCS
این گزینه بی معنی است

-mno-sched-prolog
از ترتیب مجدد دستورالعمل ها در پیش درآمد تابع یا ادغام آنها جلوگیری کنید
آن دستورالعمل ها با دستورالعمل های موجود در بدنه تابع. این بدان معنی است که همه
توابع با مجموعه ای از دستورالعمل ها (یا در واقع یکی از a
انتخاب از مجموعه کوچکی از پیش درآمدهای مختلف عملکرد)، و این اطلاعات می تواند باشد
برای تعیین محل شروع اگر توابع داخل یک قطعه کد اجرایی استفاده می شود. پیشفرض
is -msched-prolog.

-mfloat-abi=نام
مشخص می کند که از کدام ABI ممیز شناور استفاده شود. مقادیر مجاز عبارتند از: نرم, softfp و
سخت.

تعیین نرم باعث می شود GCC خروجی حاوی فراخوان های کتابخانه ای برای شناور تولید کند.
عملیات نقطه ای softfp امکان تولید کد با استفاده از ممیز شناور سخت افزاری را فراهم می کند
دستورالعمل ها، اما همچنان از قراردادهای فراخوانی نرم شناور استفاده می کند. سخت اجازه می دهد تا
تولید دستورالعمل های ممیز شناور و از قراردادهای فراخوانی خاص FPU استفاده می کند.

پیش فرض بستگی به پیکربندی هدف خاص دارد. توجه داشته باشید که هارد شناور
و ABI های شناور نرم با پیوند سازگار نیستند. شما باید کل برنامه خود را با
همان ABI، و پیوند با مجموعه ای از کتابخانه های سازگار.

-mlittle-endian
کدی را برای پردازنده ای که در حالت کمی اندین کار می کند ایجاد کنید. این پیش فرض برای است
تمام تنظیمات استاندارد

-mbig-endian
تولید کد برای پردازنده ای که در حالت big-endian اجرا می شود. پیش فرض کامپایل است
کد برای یک پردازنده کوچک اندین

-mwords-little-endian
این گزینه فقط در هنگام تولید کد برای پردازنده های بزرگ اندیان اعمال می شود. تولید می کنند
کد برای ترتیب کلمات کمی اندین اما ترتیب بایت های بزرگ اندین. یعنی یک بایت
ترتیب فرم 32107654. توجه: این گزینه فقط در صورت نیاز باید استفاده شود
سازگاری با کد برای پردازنده های ARM بزرگ endian تولید شده توسط نسخه های
کامپایلر قبل از 2.8. این گزینه اکنون منسوخ شده است.

-مارس=نام
این نام معماری ARM هدف را مشخص می کند. GCC از این نام استفاده می کند
تعیین کنید که چه نوع دستورالعمل هایی می تواند هنگام تولید کد اسمبلی صادر کند. این
گزینه را می توان همراه یا به جای آن استفاده کرد -mcpu= گزینه. جایز است
اسامی عبارتند از: armv2, armv2a, armv3, armv3m, armv4, armv4t, armv5, armv5t, armv5e,
armv5te, armv6, armv6j, armv6t2, armv6z, armv6zk, armv6-m, armv7, armv7-a, armv7-r,
armv7-m, armv7e-m, iwmmxt, iwmmxt2, ep9312.

-مارس=بومی باعث می شود کامپایلر به طور خودکار معماری بیلد را شناسایی کند
کامپیوتر. در حال حاضر این ویژگی فقط در لینوکس پشتیبانی می شود و نه همه آنها
معماری ها شناخته می شوند. اگر تشخیص خودکار ناموفق باشد، گزینه هیچ ندارد
اثر.

-mtune=نام
این گزینه نام پردازنده ARM مورد نظر را که GCC باید برای آن تنظیم کند، مشخص می کند
عملکرد کد برای برخی از پیاده سازی های ARM می توان عملکرد بهتری داشت
با استفاده از این گزینه به دست می آید. اسامی مجاز عبارتند از: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, بازو 7 متر, arm7d, arm7dm, arm7di, arm7dmi, arm70,
arm700, arm700i, arm710, arm710c, arm7100, arm720, arm7500, arm7500fe, arm7tdmi,
arm7tdmi-s, arm710t, arm720t, arm740t, بازوی قوی, Strongarm110, Strongarm1100,
Strongarm1110, arm8, arm810, arm9, arm9e, arm920, arm920t, arm922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, arm940t, arm9tdmi, arm10tdmi, arm1020t, arm1026ej-s,
arm10e, arm1020e, arm1022e, arm1136j-s, arm1136jf-s, mpcore, mpcorenovfp, arm1156t2-s,
arm1156t2f-s, arm1176jz-s, arm1176jzf-s, قشر-a5, قشر-a7, قشر-a8, قشر-a9,
قشر-a15, cortex-r4, cortex-r4f, cortex-r5, cortex-m4, cortex-m3, cortex-m1,
cortex-m0, xscale, iwmmxt, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

-mtune=generic-قوس مشخص می کند که GCC باید عملکرد را برای ترکیبی از تنظیم کند
پردازنده ها در معماری قوس. هدف تولید کدی است که به خوبی روی آن اجرا شود
محبوب ترین پردازنده های فعلی، تعادل بین بهینه سازی هایی که به نفع برخی هستند
CPU در محدوده، و اجتناب از مشکلات عملکرد دیگر CPU. اثرات از
این گزینه ممکن است در نسخه های بعدی GCC تغییر کند، زیرا مدل های CPU می آیند و می روند.

-mtune=بومی باعث می شود کامپایلر به طور خودکار CPU کامپیوتر ساخت را شناسایی کند. در
در حال حاضر، این ویژگی فقط در لینوکس پشتیبانی می شود و همه معماری ها پشتیبانی نمی شوند
شناسایی شده. اگر تشخیص خودکار ناموفق باشد، گزینه تاثیری ندارد.

-mcpu=نام
این نام پردازنده ARM مورد نظر را مشخص می کند. GCC از این نام برای استخراج استفاده می کند
نام معماری ARM هدف (مثل اینکه توسط -مارس) و پردازنده ARM
تایپ کنید که برای عملکرد تنظیم شود (مثل اینکه توسط -mtune). جایی که این گزینه
همراه با استفاده می شود -مارس or -mtune، آن گزینه ها بر گزینه ها اولویت دارند
بخش مناسب این گزینه

نام های مجاز برای این گزینه مانند نام های برای است -mtune.

-mcpu=generic-قوس نیز جایز است و معادل است -مارس=قوس
-mtune=generic-قوساست. دیدن -mtune برای اطلاعات بیشتر.

-mcpu=بومی باعث می شود کامپایلر به طور خودکار CPU کامپیوتر ساخت را شناسایی کند. در
در حال حاضر، این ویژگی فقط در لینوکس پشتیبانی می شود و همه معماری ها پشتیبانی نمی شوند
شناسایی شده. اگر تشخیص خودکار ناموفق باشد، گزینه تاثیری ندارد.

-mfpu=نام
-mfpe=عدد
-mfp=عدد
این مشخص می کند که چه سخت افزاری با ممیز شناور (یا شبیه سازی سخت افزار) در دسترس است
هدف. اسامی مجاز عبارتند از: fpa, fpe2, fpe3, تک رو, vfp, vfpv3, vfpv3-fp16,
vfpv3-d16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, گاز نئون, نئون-fp16, vfpv4, vfpv4-d16,
fpv4-sp-d16 و نئون-vfpv4. -mfp و -mfpe مترادف هستند برای -mfpu=fpeعدد، برای
سازگاری با نسخه های قدیمی GCC

If -msoft-float مشخص شده است این فرمت مقادیر ممیز شناور را مشخص می کند.

اگر سخت افزار ممیز شناور انتخابی شامل پسوند NEON باشد (به عنوان مثال -mfpu=گاز نئون),
توجه داشته باشید که عملیات ممیز شناور توسط مجوز بردارسازی خودکار GCC استفاده نخواهد شد
مگر -بهینه‌سازی‌های ریاضی و سرگرم‌کننده نیز مشخص شده است. این به دلیل سخت افزار NEON است
استاندارد IEEE 754 را برای محاسبات ممیز شناور (در
مقادیر غیر طبیعی خاص به عنوان صفر در نظر گرفته می شوند)، بنابراین استفاده از دستورالعمل های NEON ممکن است
منجر به از دست دادن دقت شود.

-mfp16-format=نام
فرمت نوع ممیز شناور نیمه دقیق "__fp16" را مشخص کنید. جایز است
نام ها هستند هیچ, یعنیو جایگزین; پیش فرض است هیچ، در این صورت "__fp16"
نوع تعریف نشده است

-mstructure-size-boundary=n
اندازه تمام ساختارها و اتحادیه ها به مضرب عدد گرد می شود
بیت های تنظیم شده توسط این گزینه. مقادیر مجاز 8، 32 و 64 هستند. مقدار پیش فرض
برای زنجیره های ابزار مختلف متفاوت است. برای زنجیره ابزار هدف COFF مقدار پیش فرض است
8. مقدار 64 تنها در صورتی مجاز است که ABI اصلی آن را پشتیبانی کند.

تعیین عدد بزرگتر می تواند کد سریعتر و کارآمدتر تولید کند، اما می تواند
حجم برنامه را افزایش دهید مقادیر مختلف به طور بالقوه ناسازگار هستند.
کد کامپایل شده با یک مقدار لزوماً نمی تواند انتظار داشته باشد که با کد یا کتابخانه ها کار کند
اگر با استفاده از ساختارها یا اتحادیه ها اطلاعات را مبادله کنند، با مقدار دیگری کامپایل می شود.

-mabort-on-noreturn
یک فراخوانی برای تابع "abort" در انتهای یک تابع "noreturn" ایجاد کنید. خواهد شد
اگر تابع بخواهد برگردد اجرا شود.

تماس های طولانی
-mno-long-تماس
به کامپایلر می‌گوید ابتدا با بارگذاری آدرس تابع، فراخوانی‌های تابع را انجام دهد
وارد یک ثبات شده و سپس یک فراخوانی زیر روال را روی این ثبات انجام می دهد. این
در صورتی که تابع هدف خارج از آدرس دهی 64 مگابایتی قرار گیرد، سوئیچ مورد نیاز است
محدوده نسخه مبتنی بر افست دستورالعمل فراخوانی زیر روال.

حتی اگر این سوئیچ فعال باشد، همه تماس‌های عملکرد به تماس‌های طولانی تبدیل نمی‌شوند.
اکتشافی این است که توابع ایستا، توابعی که دارای تماس کوتاه صفت،
توابعی که در محدوده a هستند #پراگما no_long_calls دستورالعمل و توابع
که تعاریف آن قبلاً در واحد تالیف فعلی گردآوری شده است
به تماس های طولانی تبدیل نمی شود. استثنای این قانون، عملکرد ضعیف است
تعاریف، توابع با تماس طولانی صفت یا بخش صفت، و
توابعی که در محدوده الف هستند #پراگما طولانی_تماس دستورالعمل، همیشه خواهد بود
به تماس های طولانی تبدیل شد

این ویژگی به طور پیش فرض فعال نیست. مشخص کردن -mno-long-تماس را بازیابی خواهد کرد
رفتار پیش‌فرض، مانند قرار دادن فراخوانی تابع در محدوده a #پراگما
تماس های طولانی بخشنامه توجه داشته باشید که این سوئیچ ها هیچ تاثیری بر نحوه کامپایلر ندارند
کدی را برای رسیدگی به فراخوانی تابع از طریق نشانگرهای تابع تولید می کند.

-msingle-pic-base
رجیستر مورد استفاده برای آدرس دهی PIC را به عنوان فقط خواندنی در نظر بگیرید، نه اینکه آن را در آن بارگیری کنید
مقدمه برای هر تابع سیستم زمان اجرا مسئول اولیه سازی این است
قبل از شروع اجرا با یک مقدار مناسب ثبت نام کنید.

-mpic-register=REG
رجیستر مورد استفاده برای آدرس دهی PIC را مشخص کنید. پیش فرض R10 است مگر اینکه پشته-
وقتی از R9 استفاده می شود، بررسی فعال است.

-mcirrus-fix-invalid-insns
NOPها را در جریان دستورالعمل قرار دهید تا مشکلات را حل کنید
ترکیب دستورات Maverick نامعتبر است. این گزینه فقط در صورتی معتبر است که
-mcpu=ep9312 گزینه برای فعال کردن تولید دستورالعمل برای Cirrus استفاده شده است
پردازنده مشترک ممیز شناور Maverick. این گزینه به طور پیش فرض فعال نیست، زیرا
مشکل فقط در پیاده سازی های قدیمی Maverick وجود دارد. پیش فرض می تواند دوباره
با استفاده از -mno-cirus-fix-invalid-insns سوئیچ.

-mpoke-function-name
نام هر تابع را مستقیماً قبل از تابع در قسمت متن بنویسید
مقدمه کد تولید شده مشابه این است:

t0
.ascii "arm_poke_function_name"، 0
تراز کردن
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp!، {fp، ip، lr، pc}
فریم فریم فریم، آی پی، #4

هنگام اجرای پشته پشته، کد می تواند مقدار "pc" ذخیره شده در "fp +" را بازرسی کند.
0. اگر تابع ردیابی به مکان "pc - 12" نگاه کند و 8 بیت بالا هستند
تنظیم کنید، سپس می دانیم که یک نام تابع بلافاصله قبل از آن تعبیه شده است
مکان و دارای طول "((pc[-3]) & 0xff000000) است.

-مهم
-مارم
بین تولید کدی که در حالت های ARM و Thumb اجرا می شود، انتخاب کنید. پیش فرض برای
اکثر تنظیمات برای تولید کدی است که در حالت ARM اجرا می شود، اما به طور پیش فرض
را می توان با پیکربندی GCC با --with-mode=بود گزینه پیکربندی

-mtpcs-frame
یک قاب پشته ای ایجاد کنید که با استاندارد فراخوانی روش شست مطابقت دارد
همه عملکردهای غیر برگ (یک تابع برگ تابعی است که تابع دیگری را فراخوانی نمی کند
توابع.) پیش فرض است -mno-tpcs-frame.

-mtpcs-leaf-frame
یک قاب پشته ای ایجاد کنید که با استاندارد فراخوانی روش شست مطابقت دارد
تمام عملکردهای برگ (یک تابع برگ تابعی است که هیچ تابع دیگری را فراخوانی نمی کند.)
پیش فرض این است -mno-apcs-leaf-frame.

-mcallee-super-interworking
به تمام توابع قابل مشاهده خارجی در فایل در حال کامپایل یک دستورالعمل ARM می دهد
هدر را تنظیم کنید که قبل از اجرای بقیه عملکرد به حالت Thumb تغییر کند.
این اجازه می دهد تا این توابع از کدهای غیر متقابل فراخوانی شوند. این گزینه است
در پیکربندی‌های AAPCS معتبر نیست زیرا کار درونی به‌طور پیش‌فرض فعال است.

-mcaller-super-interworking
به تماس ها از طریق نشانگرهای تابع (از جمله توابع مجازی) اجازه می دهد تا به درستی اجرا شوند
صرف نظر از اینکه کد هدف برای کار درونی کامپایل شده است یا خیر.
هزینه اجرای یک نشانگر تابع در صورتی که این گزینه وجود داشته باشد، سربار کمی دارد
فعال شده است. این گزینه در پیکربندی‌های AAPCS معتبر نیست زیرا interworking معتبر است
به طور پیش فرض فعال است

-mtp=نام
مدل دسترسی را برای نشانگر ذخیره‌سازی محلی رشته مشخص کنید. مدل های معتبر هستند
نرم، که تماس هایی به "__aeabi_read_tp" ایجاد می کند، cp15، که نخ را واکشی می کند
اشاره گر مستقیماً از "cp15" (در معماری arm6k پشتیبانی می شود)، و خودکار، که
از بهترین روش موجود برای پردازنده انتخاب شده استفاده می کند. تنظیمات پیش فرض است
خودکار.

-mtls-dialect=گویش
لهجه مورد استفاده برای دسترسی به حافظه محلی رشته را مشخص کنید. دو گویش هستند
پشتیبانی --- گوزن یالدار و gnu2. گوزن یالدار گویش طرح اصلی گنو را برای آن انتخاب می کند
پشتیبانی از مدل های پویا TLS محلی و جهانی در gnu2 گویش گنو را انتخاب می کند
طرح توصیفگر، که عملکرد بهتری را برای کتابخانه های مشترک ارائه می دهد. گنو
طرح توصیفگر با طرح اصلی سازگار است، اما نیاز به جدید دارد
اسمبلر، لینکر و پشتیبانی کتابخانه. مدل های TLS exec اولیه و محلی هستند
تحت تأثیر این گزینه قرار نگرفته و همیشه از طرح اصلی استفاده کنید.

-mword-relocations
فقط جابجایی های مطلق را روی مقادیر به اندازه کلمه ایجاد کنید (یعنی R_ARM_ABS32). این هست
به طور پیش فرض در اهداف (uClinux، SymbianOS) که در آن لودر زمان اجرا اعمال می شود، فعال می شود.
این محدودیت و چه زمانی -fpic or -fPIC مشخص شده است.

-mfix-cortex-m3-ldrd
برخی از هسته‌های Cortex-M3 می‌توانند باعث خرابی داده‌ها با دستورالعمل‌های "ldrd" شوند
از رجیسترهای مقصد و پایه همپوشانی استفاده می شود. این گزینه از تولید جلوگیری می کند
این دستورالعمل ها این گزینه به طور پیش فرض در زمانی فعال می شود -mcpu = Cortex-M3 is
مشخص شده.

-دسترسی چندجانبه
-mno-unaligned-access
خواندن و نوشتن مقادیر 16 و 32 بیتی از آدرس ها را فعال (یا غیرفعال می کند)
که 16 یا 32 بیت تراز نیستند. به طور پیش فرض دسترسی بدون تراز برای همه غیرفعال است
pre-ARMv6 و تمام معماری های ARMv6-M و برای تمام معماری های دیگر فعال است. اگر
دسترسی بدون تراز فعال نیست، سپس کلمات موجود در ساختارهای داده بسته بندی شده قابل دسترسی خواهند بود
یک بایت در یک زمان

ویژگی ARM "Tag_CPU_unaligned_access" در فایل شی تولید شده تنظیم خواهد شد.
به درست یا نادرست، بسته به تنظیمات این گزینه. در صورت عدم تراز
دسترسی فعال است سپس نماد پیش پردازنده "__ARM_FEATURE_UNALIGNED" نیز خواهد بود
تعریف شده است.

-mneon-for-64bit
استفاده از نئون را برای مدیریت عملیات اسکالر 64 بیتی فعال می کند. این به طور پیش فرض غیرفعال است
از آنجایی که هزینه انتقال داده ها از ثبات های اصلی به نئون بالا است.

APR گزینه

-mmcu=mcu
معماری مجموعه دستورات Atmel AVR (ISA) یا نوع MCU را مشخص کنید.

پیش فرض این گزینه @tie{}"avr2" است.

GCC از دستگاه های AVR و ISA های زیر پشتیبانی می کند:

"avr2"
دستگاه‌های «کلاسیک» با حداکثر 8@tie{}کی بایت حافظه برنامه. mcu@tie{}= "attiny22"،
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"avr25"
دستگاه‌های «کلاسیک» با حداکثر 8@tie{}KB حافظه برنامه و با «MOVW»
دستورالعمل mcu@tie{}= "ata6289"، "attiny13"، "attiny13a"، "attiny2313"،
«attiny2313a»، «attiny24»، «attiny24a»، «attiny25»، «attiny261»، «attiny261a»،
"attiny43u"، "attiny4313"، "attiny44"، "attiny44a"، "attiny45"، "attiny461"،
"attiny461a"، "attiny48"، "attiny84"، "attiny84a"، "attiny85"، "attiny861"،
"attiny861a"، "attiny87"، "attiny88"، "at86rf401".

"avr3"
دستگاه‌های "کلاسیک" با حافظه برنامه 16@tie{}KiB تا 64@tie{}KiB.
mcu@tie{}= "at43usb355"، "at76c711".

"avr31"
دستگاه های "کلاسیک" با 128@tie{}KiB حافظه برنامه. mcu@tie{}= "atmega103"،
"at43usb320".

"avr35"
دستگاه‌های "کلاسیک" با حافظه برنامه 16@tie{}KiB تا 64@tie{}KiB و با
دستورالعمل "MOVW". mcu@tie{}= "atmega16u2"، "atmega32u2"، "atmega8u2"،
"attiny167", "at90usb162", "at90usb82".

"avr4"
دستگاه‌های «پیشرفته» با حداکثر 8@tie{}کی بایت حافظه برنامه. mcu@tie{}=
"atmega48"، "atmega48a"، "atmega48p"، "atmega8"، "atmega8hva"، "atmega8515"،
"atmega8535"، "atmega88"، "atmega88a"، "atmega88p"، "atmega88pa"، "at90pwm1"،
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"avr5"
دستگاه‌های «پیشرفته» با حافظه برنامه 16@tie{}KiB تا 64@tie{}KiB.
mcu@tie{}= "atmega16"، "atmega16a"، "atmega16hva"، "atmega16hva2"، "atmega16hvb"،
"atmega16m1"، "atmega16u4"، "atmega161"، "atmega162"، "atmega163"، "atmega164a"،
"atmega164p"، "atmega165"، "atmega165a"، "atmega165p"، "atmega168"، "atmega168a"،
"atmega168p"، "atmega169"، "atmega169a"، "atmega169p"، "atmega169pa"، "atmega32"،
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323"، "atmega324a"، "atmega324p"، "atmega324pa"، "atmega325"، "atmega325a"،
"atmega325p"، "atmega3250"، "atmega3250a"، "atmega3250p"، "atmega328"،
"atmega328p"، "atmega329"، "atmega329a"، "atmega329p"، "atmega329pa"،
"atmega3290"، "atmega3290a"، "atmega3290p"، "atmega406"، "atmega64"، "atmega64c1"،
"atmega64hve"، "atmega64m1"، "atmega640"، "atmega644"، "atmega644a"، "atmega644p"،
"atmega644pa"، "atmega645"، "atmega645a"، "atmega645p"، "atmega6450"،
"atmega6450a"، "atmega6450p"، "atmega649"، "atmega649a"، "atmega649p"،
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646"، "at90usb647"، "at94k"، "m3000".

"avr51"
دستگاه‌های پیشرفته با 128@tie{}KiB حافظه برنامه. mcu@tie{}= "atmega128"،
"atmega128rfa1"، "atmega1280"، "atmega1281"، "atmega1284p"، "at90can128"،
"at90usb1286"، "at90usb1287".

"avr6"
دستگاه‌های «پیشرفته» با رایانه شخصی 3 بایت، یعنی با بیش از 128@tie{}KB برنامه
حافظه است. mcu@tie{}= "atmega2560"، "atmega2561".

"avrxmega2"
دستگاه های "XMEGA" با حافظه برنامه بیش از 8@tie{}KiB و حداکثر 64@tie{}KiB.
mcu@tie{}= "atxmega16a4"، "atxmega16d4"، "atxmega16x1"، "atxmega32a4"،
"atxmega32d4"، "atxmega32x1".

"avrxmega4"
دستگاه های "XMEGA" با برنامه بیش از 64@tie{}KiB و حداکثر 128@tie{}KiB
حافظه است. mcu@tie{}= "atxmega64a3"، "atxmega64d3".

"avrxmega5"
دستگاه های "XMEGA" با برنامه بیش از 64@tie{}KiB و حداکثر 128@tie{}KiB
حافظه و بیش از 64@tie{}KiB رم. mcu@tie{}= "atxmega64a1"،
"atxmega64a1u".

"avrxmega6"
دستگاه های "XMEGA" با بیش از 128@tie{}KiB حافظه برنامه. mcu@tie{}=
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
دستگاه های "XMEGA" با بیش از 128@tie{}KiB حافظه برنامه و بیش از
64@tie{}کی بایت رم. mcu@tie{}= "atxmega128a1"، "atxmega128a1u".

"avr1"
این ISA توسط حداقل هسته AVR پیاده سازی شده و فقط برای اسمبلر پشتیبانی می شود.
mcu@tie{}= "attiny11"، "attiny12"، "attiny15"، "attiny28"، "at90s1200".

تجمع-args
آرگومان های تابع خروجی را جمع آوری کنید و فضای پشته مورد نیاز را بدست آورید/آزاد کنید
آرگومان های تابع خروجی یک بار در مقدمه/موارض تابع. بدون این گزینه،
آرگومان های خروجی قبل از فراخوانی یک تابع فشار داده می شوند و پس از آن ظاهر می شوند.

ظاهر کردن آرگومان‌ها پس از فراخوانی تابع می‌تواند در AVR گران تمام شود
انباشتن فضای پشته ممکن است به فایل های اجرایی کوچکتری منجر شود زیرا آرگومان ها نیاز دارند
پس از چنین فراخوانی تابعی از پشته حذف نشود.

این گزینه می تواند منجر به کاهش اندازه کد برای عملکردهایی شود که چندین تماس را انجام می دهند
توابعی که آرگومان های خود را در پشته دریافت می کنند مانند فراخوانی توابع printf مانند.

-branch-cost=هزینه
هزینه های انشعاب را برای دستورالعمل های انشعاب مشروط به تنظیم کنید هزینه. ارزش های معقول
برای هزینه اعداد صحیح کوچک و غیر منفی هستند. هزینه شعبه پیش فرض 0 است.

-mcall-prologues
توابع پیش‌گفتار/اپیلوگ‌ها به عنوان فراخوانی به برنامه‌های فرعی مناسب گسترش می‌یابند. کد
اندازه کوچکتر است

-mint8
"int" را 8 بیتی صحیح فرض کنید. این روی اندازه‌های همه نوع تأثیر می‌گذارد: یک "char" 1 است
بایت، "int" 1 بایت، "long" 2 بایت و "long long" 4 بایت است. لطفا
توجه داشته باشید که این گزینه با استانداردهای C مطابقت ندارد، اما باعث کوچکتر شدن آن می شود
اندازه کد

-mno-وقفه می کند
کد تولید شده با وقفه های سخت افزاری سازگار نیست. اندازه کد کوچکتر است.

-آرامش کن
سعی کنید پاسخ "CALL" را جایگزین کنید. دستورالعمل "JMP" توسط "RCALL" کوتاهتر پاسخ. "RJMP"
دستورالعمل در صورت وجود تنظیم "-mrelax" فقط گزینه "--relax" را به آن اضافه می کند
خط فرمان linker هنگامی که پیوند دهنده فراخوانی می شود.

شل کردن پرش توسط پیوند دهنده انجام می شود زیرا قبلاً جبران پرش شناخته نشده بود
کد واقع شده است. بنابراین، کد اسمبلر تولید شده توسط کامپایلر یکسان است،
اما دستورالعمل های موجود در فایل اجرایی ممکن است با دستورالعمل های اسمبلر متفاوت باشد
کد

در صورت نیاز به پیوندهای خرد، Relaxing باید روشن شود، به بخش "EIND" و
پیوندهای خرد زیر.

تماس های کوتاه
این گزینه منسوخ شده است و در GCC 4.8 حذف خواهد شد. به "-mrelax" مراجعه کنید
جایگزینی.

از دستورالعمل‌های "RCALL"/"RJMP" حتی در دستگاه‌هایی با برنامه 16@tie{}KiB یا بیشتر استفاده کنید.
حافظه، یعنی در دستگاه هایی که دارای دستورالعمل های "CALL" و "JMP" هستند.

-msp8
رجیستر اشاره گر پشته را به عنوان یک ثبات 8 بیتی در نظر بگیرید، یعنی بایت بالا را در نظر بگیرید
نشانگر پشته صفر است. به طور کلی، نیازی به تنظیم این گزینه با دست ندارید.

این گزینه به صورت داخلی توسط کامپایلر برای انتخاب و ساخت مولتی لیب برای آن استفاده می شود
معماری های "avr2" و "avr25". این معماری ها دستگاه ها را با و بدون ترکیب می کنند
"SPH". برای هر تنظیمی غیر از "-mmcu=avr2" یا "-mmcu=avr25" درایور کامپایلر
این گزینه را از خط فرمان کامپایلر اضافه یا حذف خواهد کرد، زیرا
سپس کامپایلر می داند که آیا دستگاه یا معماری دارای نشانگر پشته 8 بیتی است یا خیر
ثبت نام "SPH" وجود ندارد یا خیر.

-Mstrict-X
از ثبت آدرس "X" به روشی که سخت افزار پیشنهاد می کند استفاده کنید. این به این معنی است که "X" است
فقط در آدرس دهی غیر مستقیم، پس از افزایش یا قبل از کاهش استفاده می شود.

بدون این گزینه، ثبات "X" ممکن است به همان روشی که "Y" یا "Z" استفاده می شود
سپس توسط دستورالعمل های اضافی شبیه سازی می شود. به عنوان مثال، بارگذاری یک مقدار با
آدرس دهی "X+const" با یک "const < 64" غیر منفی کوچک به یک ثبات Rn is
انجام شده است

adiw r26, const ; X += Const
ld ، ایکس ؛ = *X
sbiw r26, const ; X - = ثابت

-مدی استک
فقط 8@tie{}بیت های پایینی نشانگر پشته را تغییر دهید.

"EIND" و دستگاه هایی با بیش از 128 کیلو بایت فلش

نشانگرها در پیاده سازی 16@tie{}بیت عرض دارند. آدرس یک تابع یا برچسب
به عنوان آدرس کلمه نمایش داده می شود به طوری که پرش ها و تماس های غیر مستقیم می توانند هر کدی را هدف قرار دهند
آدرس در محدوده 64@tie{}کلمات Ki.

به منظور تسهیل پرش غیرمستقیم در دستگاه‌های با بیش از 128@tie{}کی بایت
فضای حافظه برنامه، یک ثبات تابع خاص به نام "EIND" وجود دارد که به عنوان کار می کند
مهم ترین بخش از آدرس هدف زمانی که دستورالعمل های "EICALL" یا "EIJMP" هستند
استفاده شده.

پرش ها و تماس های غیرمستقیم در این دستگاه ها به شرح زیر توسط کامپایلر انجام می شود و می باشد
مشروط به برخی محدودیت ها:

· کامپایلر هرگز "EIND" را تنظیم نمی کند.

· کامپایلر به طور ضمنی از "EIND" در دستورالعمل های "EICALL"/"EIJMP" استفاده می کند یا ممکن است بخواند
"EIND" به طور مستقیم به منظور تقلید یک تماس غیر مستقیم / پرش با استفاده از "RET"
دستورالعمل

· کامپایلر فرض می کند که "EIND" هرگز در طول کد راه اندازی یا در طول آن تغییر نمی کند
کاربرد. به طور خاص، "EIND" در عملکرد یا وقفه ذخیره/بازیابی نمی شود
مقدمه/مخاطره روتین خدمات.

· برای فراخوانی غیرمستقیم توابع و گفتوهای محاسبه شده، پیوند دهنده تولید می کند خرد خرد. خرد
پدهای پرش گاهی اوقات نیز نامیده می شوند ترامپولین ها. بنابراین، تماس غیرمستقیم/پرش به
چنین خرد خرد حاوی یک پرش مستقیم به آدرس مورد نظر است.

· آرامش پیوند دهنده باید روشن شود تا پیوند دهنده، خرد را تولید کند
به درستی همه موقعیت ها گزینه کامپایلر "-mrelax" و گزینه linler را ببینید
"--آروم باش". موارد گوشه‌ای وجود دارد که قرار است پیوند دهنده، خرد تولید کند اما
بدون آرامش و بدون پیام خطای مفید سقط می شود.

· اسکریپت پیوند دهنده پیش فرض برای کد با "EIND = 0" مرتب شده است. اگر قرار باشد کد
برای کار کردن برای راه اندازی با "EIND != 0"، یک اسکریپت پیوند دهنده سفارشی باید به ترتیب استفاده شود
برای قرار دادن بخش هایی که نام آنها با ".trampolines" شروع می شود در قسمتی که در آن قرار دارد
"EIND" به.

· کد راه اندازی از libgcc هرگز "EIND" را تنظیم نمی کند. توجه داشته باشید که کد راه اندازی یک ترکیب است
کد از libgcc و AVR-LibC. برای تأثیر AVR-LibC بر «EIND»، به AVR- مراجعه کنید.
راهنمای کاربر LibC ("http://nongnu.org/avr-libc/user-manual/").

· برای کد راه اندازی خاص کاربر مجاز است که "EIND" را زودتر راه اندازی کند، به عنوان مثال توسط
ابزار کد اولیه واقع در بخش ".init3". چنین کدی قبل از اجرا می شود
کد راه اندازی عمومی که RAM را مقداردهی اولیه می کند و سازنده ها را فراخوانی می کند، اما پس از بیت از
کد راه اندازی از AVR-LibC که "EIND" را در قسمتی که جدول برداری در آن قرار دارد تنظیم می کند.
واقع شده است.

#عبارتند از

باطل استاتیک
__خصیصه__((بخش(.init3")،خالی،استفاده شده،بدون_عملکرد_ابزار))
init3_set_eind (باطل)
{
__asm ​​فرار ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND): "r24"، "memory");
}

نماد "__trampolines_start" در اسکریپت پیوند دهنده تعریف شده است.

· در صورت وجود دو شرط زیر، خرده‌ها به‌طور خودکار توسط پیوند دهنده تولید می‌شوند
ملاقات کرد:

-
(کوتاه برای تولید می کنند خرد خرد) اینطوری:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
خارج از بخشی که خرده ها در آن قرار دارند.

· کامپایلر چنین اصلاح کننده های "gs" را برای برچسب های کد در شرایط زیر منتشر می کند:

-
-
- -mcall-prologues>
گزینه خط فرمان

-
جداول را می توانید مشخص کنید -Fno-Jump-Table گزینه خط فرمان

-
-
پرش به آدرس های غیر نمادین مانند چنین است نه پشتیبانی:

int main (خلأ)
{
/* فراخوانی تابع در آدرس word 0x2 */
بازگشت ((int(*)(void)) 0x2)();
}

در عوض، یک خرد باید تنظیم شود، یعنی تابع باید از طریق یک نماد فراخوانی شود
("func_4" در مثال):

int main (خلأ)
{
extern int func_4 (باطل) ؛

/* فراخوانی تابع در آدرس بایت 0x4 */
return func_4();
}

و برنامه با "-Wl,--defsym,func_4=0x4" پیوند داده شود. از طرف دیگر، "func_4"
را می توان در اسکریپت لینکر تعریف کرد.

مدیریت رجیسترهای عملکرد ویژه "RAMPD"، "RAMPX"، "RAMPY" و "RAMPZ"

برخی از دستگاه‌های AVR از حافظه‌های بزرگ‌تر از محدوده 64@tie{}KiB پشتیبانی می‌کنند که قابل دسترسی است.
با اشاره گرهای 16 بیتی برای دسترسی به مکان‌های حافظه خارج از این محدوده 64@tie{}KiB،
محتوای یک ثبات "RAMP" به عنوان قسمت بالای آدرس استفاده می شود: "X"، "Y"، "Z"
ثبت آدرس با عملکرد ویژه "RAMPX"، "RAMPY"، "RAMPZ" الحاق شده است
برای دریافت آدرس گسترده به ترتیب ثبت نام کنید. به طور مشابه، "RAMPD" همراه با استفاده می شود
آدرس دهی مستقیم

· کد راه اندازی، رجیسترهای تابع ویژه "RAMP" را با صفر مقداردهی اولیه می کند.

· اگر یک APR تحت عنوان نشانی: فضاها، نامگذاری شده است نشانی فضا غیر از عمومی یا "__flash" است
استفاده می شود، سپس "RAMPZ" در صورت نیاز قبل از عملیات تنظیم می شود.

· اگر دستگاه از رم بزرگتر از 64@tie{KiB} پشتیبانی می کند و کامپایلر باید تغییر کند.
"RAMPZ" برای انجام یک عملیات، "RAMPZ" پس از عملیات به صفر بازنشانی می شود.

· اگر دستگاه دارای یک رجیستر «RAMP» خاص باشد، مقدمه/پایان ISR
آن SFR را ذخیره/بازیابی می کند و در صورتی که کد ISR ممکن است آن را با صفر مقدار دهی اولیه می کند
(به طور ضمنی) از آن استفاده کنید.

· RAM بزرگتر از 64@tie{KiB} توسط GCC برای اهداف AVR پشتیبانی نمی شود. اگر استفاده می کنید
اسمبلر درون خطی برای خواندن از مکان های خارج از محدوده آدرس 16 بیتی و تغییر
یکی از رجیسترهای "RAMP" پس از دسترسی باید آن را به صفر برگردانید.

ماکروهای داخلی AVR

GCC چندین ماکرو داخلی را تعریف می کند تا کد کاربر بتواند حضور یا را آزمایش کند
عدم وجود ویژگی ها تقریباً هر یک از ماکروهای داخلی زیر از دستگاه استنباط می شود
قابلیت ها و در نتیجه توسط گزینه "-mmcu=" خط فرمان فعال می شود.

حتی بیشتر ماکروهای داخلی مخصوص AVR را ببینید APR تحت عنوان نشانی: فضاهای و APR توکار
توابع.

"__AVR_ARCH__"
ماکرو داخلی که به یک عدد اعشاری که معماری و مشخص می کند حل می شود
بستگی به "-mmcu=mcu" گزینه. مقادیر ممکن عبارتند از:

2، 25، 3، 31، 35، 4، 5، 51، 6، 102، 104، 105، 106، 107

برای mcu"avr2"، "avr25"، "avr3"، "avr31"، "avr35"، "avr4"، "avr5"، "avr51"، "avr6"،
به ترتیب "avrxmega2"، "avrxmega4"، "avrxmega5"، "avrxmega6"، "avrxmega7". اگر mcu
دستگاهی را مشخص می کند، این ماکرو داخلی بر این اساس تنظیم می شود. به عنوان مثال، با
"-mmcu=atmega8" ماکرو به 4 تعریف می شود.

"__AVR_دستگاه__"
تنظیم "-mmcu=دستگاه" این ماکرو داخلی را تعریف می کند که نام دستگاه را منعکس می کند.
به عنوان مثال، "-mmcu=atmega8" ماکرو داخلی "__AVR_ATmega8__" را تعریف می کند،
"-mmcu=attiny261a" "__AVR_ATtiny261A__" و غیره را تعریف می کند.

نام ماکروهای داخلی از طرح "__AVR_ پیروی می کند.دستگاه__" جایی که دستگاه هست
نام دستگاه مطابق دفترچه راهنمای کاربر AVR. تفاوت میان دستگاه در داخلی
ماکرو و دستگاه در "-mmcu=دستگاه" این است که دومی همیشه کوچک است.

If دستگاه یک دستگاه نیست بلکه فقط یک معماری هسته ای مانند "avr51" است، این ماکرو خواهد بود
تعریف نشود

"__AVR_XMEGA__"
دستگاه/معماری متعلق به خانواده دستگاه های XMEGA است.

"__AVR_HAVE_ELPM__"
دستگاه دارای دستورالعمل "ELPM" است.

"__AVR_HAVE_ELPMX__"
این دستگاه دارای "ELPM Rn، z" و "ELPM Rn، Z+" دستورالعمل.

"__AVR_HAVE_MOVW__"
این دستگاه دارای دستورالعمل "MOVW" برای انجام حرکات ثبت-رجیستر 16 بیتی است.

"__AVR_HAVE_LPMX__"
این دستگاه دارای "LPM Rn، z" و "LPM Rn، Z+" دستورالعمل.

"__AVR_HAVE_MUL__"
دستگاه دارای ضریب سخت افزاری است.

"__AVR_HAVE_JMP_CALL__"
دستگاه دارای دستورالعمل های "JMP" و "CALL" است. این مورد برای دستگاه های با
حداقل 16@tie{}KiB حافظه برنامه و اگر "-mshort-calls" تنظیم نشده باشد.

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
این دستگاه دارای دستورالعمل های "EIJMP" و "EICALL" است. این مورد برای دستگاه ها است
با بیش از 128@tie{}KiB حافظه برنامه. این نیز به این معنی است که برنامه
شمارنده (PC) 3@tie{}بایت عرض دارد.

"__AVR_2_BYTE_PC__"
شمارنده برنامه (PC) 2@tie{}بایت عرض دارد. این مورد برای دستگاه هایی با تا
128@tie{}کی بایت حافظه برنامه.

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
رجیستر نشانگر پشته (SP) به ترتیب توسط ثبات 8 بیتی 16 بیتی در نظر گرفته می شود
کامپایلر تعریف این ماکروها تحت تأثیر "-mtiny-stack" است.

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
دستگاه دارای ثبت عملکرد ویژه SPH (قسمت بالای نشانگر پشته) است یا دارای
به ترتیب یک نشانگر پشته 8 بیتی. تعریف این ماکروها متاثر از
"-mmcu=" و در موارد "-mmcu=avr2" و "-mmcu=avr25" نیز با "-msp8".

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
دستگاه دارای ثبت عملکرد ویژه "RAMPD"، "RAMPX"، "RAMPY"، "RAMPZ" است.
بود.

"__NO_INTERRUPTS__"
این ماکرو گزینه خط فرمان "-mno-interrupts" را منعکس می کند.

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
برخی از دستگاه های AVR (AT90S8515، ATmega103) نباید دستورالعمل های 32 بیتی را به دلیل
اشتباه سخت افزاری دستورالعمل های رد شدن عبارتند از "SBRS"، "SBRC"، "SBIS"، "SBIC" و "CPSE".
ماکرو دوم فقط در صورتی تعریف می شود که "__AVR_HAVE_JMP_CALL__" نیز تنظیم شده باشد.

"__AVR_SFR_OFFSET__=انحراف"
دستورالعمل هایی که می توانند به طور مستقیم به رجیسترهای تابع ویژه I/O مانند "IN" آدرس دهی کنند.
"OUT"، "SBI"، و غیره ممکن است از آدرس دیگری استفاده کنند که گویی توسط یک دستورالعمل به آدرس داده شده است
به RAM مانند "LD" یا "STS" دسترسی داشته باشید. این افست بستگی به معماری دستگاه دارد و دارد
باید از آدرس RAM کم شود تا آدرس I/O@tie{} مربوطه به دست آید.

"__WITH_AVRLIBC__"
کامپایلر برای استفاده همراه با AVR-Libc پیکربندی شده است. را ببینید
گزینه پیکربندی "--with-avrlibc".

بلک فین گزینه

-mcpu=پردازنده[-sirevision]
نام پردازنده Blackfin هدف را مشخص می کند. در حال حاضر، پردازنده می تواند یکی از
bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532,
bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m,
bf544m, bf547m, bf548m, bf549m, bf561, bf592. اختیاری sirevision را مشخص می کند
بازبینی سیلیکونی پردازنده Blackfin هدف. هر راه حل موجود برای
بازبینی سیلیکون هدفمند فعال خواهد شد. اگر sirevision is هیچ، هیچ راه حلی وجود ندارد
فعال شد. اگر sirevision is هر، همه راه حل ها برای پردازنده مورد نظر خواهد بود
فعال شد. ماکرو "__SILICON_REVISION__" به دو رقم هگزادسیمال تعریف شده است.
نشان دهنده اعداد اصلی و فرعی در ویرایش سیلیکون است. اگر sirevision is
هیچ، "__SILICON_REVISION__" تعریف نشده است. اگر sirevision is هراز
"__SILICON_REVISION__" به صورت 0xffff تعریف شده است. اگر این اختیاری است sirevision نیست
استفاده شده، GCC آخرین بازنگری سیلیکونی شناخته شده Blackfin مورد نظر را فرض می کند
پردازنده

پشتیبانی bf561 ناقص است برای bf561، فقط ماکرو پردازنده تعریف شده است.
بدون این گزینه، bf532 به طور پیش فرض به عنوان پردازنده استفاده می شود. مربوطه
ماکروهای پردازنده از پیش تعریف شده برای پردازنده قرار است تعریف شود. و برای bfin-elf زنجیره ابزار،
این باعث می شود که BSP سخت افزاری ارائه شده توسط libgloss به if مرتبط شود -msim نیست
داده شده.

-msim
مشخص می کند که برنامه روی شبیه ساز اجرا شود. این باعث شبیه ساز می شود
BSP ارائه شده توسط libgloss برای پیوند دادن. این گزینه فقط برای bfin-elf
زنجیره ابزار برخی از گزینه های دیگر، مانند -کتابخانه مشترک و -mfdpic، دلالت
-msim.

-momit-leaf-frame-pointer
نشانگر فریم را در یک رجیستر برای توابع برگ نگه ندارید. این از
دستورالعمل ذخیره، تنظیم و بازیابی نشانگرهای فریم و ایجاد یک ثبت اضافی
در توابع برگ موجود است. گزینه -fomit-frame-pointer قاب را برمی دارد
اشاره گر برای همه توابع، که ممکن است اشکال زدایی را سخت تر کند.

-mspecld-ناهنجاری
هنگامی که فعال باشد، کامپایلر اطمینان حاصل می کند که کد تولید شده حاوی کد نیست
بارهای گمانه زنی پس از دستورالعمل های پرش. در صورت استفاده از این گزینه،
"__WORKAROUND_SPECULATIVE_LOADS" تعریف شده است.

-mno-specld-anomaly
برای جلوگیری از بارهای گمانه زنی، کد اضافی تولید نکنید.

-mcsync-anomaly
هنگامی که فعال باشد، کامپایلر اطمینان حاصل می کند که کد تولید شده حاوی CSYNC نیست
یا دستورالعمل های SSYNC خیلی زود پس از شاخه های شرطی. در صورت استفاده از این گزینه،
"__WORKAROUND_SPECULATIVE_SYNCS" تعریف شده است.

-mno-csync-anomaly
برای جلوگیری از وقوع دستورالعمل‌های CSYNC یا SSYNC، کد اضافی تولید نکنید
به زودی پس از یک شاخه مشروط.

-mlow-64k
هنگامی که فعال می شود، کامپایلر آزاد است تا از دانش کل استفاده کند
این برنامه در حافظه کم 64k جای می گیرد.

-mno-low-64k
فرض کنید که برنامه به طور دلخواه بزرگ است. این پیش فرض است.

-mstack-check-l1
چک کردن پشته را با استفاده از اطلاعاتی که توسط uClinux در حافظه L1 Scratchpad قرار داده شده است انجام دهید
هسته

-کتابخانه مشترک
کدی را ایجاد کنید که از کتابخانه های مشترک از طریق روش شناسه کتابخانه پشتیبانی می کند. این اجازه می دهد
برای اجرای در محل و کتابخانه های مشترک در محیطی بدون حافظه مجازی
مدیریت. این گزینه دلالت دارد -fPIC. با یک bfin-elf هدف، این گزینه دلالت دارد
-msim.

-mno-id-shred-library
کدی را ایجاد کنید که فرض نمی‌کند از کتابخانه‌های مشترک مبتنی بر شناسه استفاده می‌شود. این هست
پیشفرض.

-mleaf-id-shred-library
کدی را ایجاد کنید که از کتابخانه های مشترک از طریق روش شناسه کتابخانه پشتیبانی می کند، اما فرض می کند
که این کتابخانه یا فایل اجرایی به هیچ کتابخانه مشترک شناسه دیگری پیوند نمی خورد.
این به کامپایلر اجازه می دهد تا از کدهای سریع تری برای پرش ها و تماس ها استفاده کند.

-mno-leaf-id-shred-library
تصور نکنید که کدی که کامپایل می شود با هیچ کتابخانه مشترک ID پیوندی ندارد.
کدهای آهسته تر برای پرش و تماس insns تولید می شود.

-mshared-library-id=n
شماره شناسایی کتابخانه مشترک مبتنی بر شناسه در حال تدوین را مشخص کرد.
تعیین مقدار 0 کد فشرده تری تولید می کند و تعیین مقادیر دیگر این کار را انجام می دهد
تخصیص آن شماره به کتابخانه فعلی را مجبور کنید اما فضای بیشتری وجود ندارد یا
زمان کارآمد از حذف این گزینه است.

-msep-data
کدی را ایجاد کنید که به بخش داده اجازه می دهد در ناحیه متفاوتی از حافظه قرار گیرد
از بخش متن این اجازه می دهد تا در محل در یک محیط بدون
مدیریت حافظه مجازی با حذف جابجایی در قسمت متن.

-mno-sep-data
کدی را ایجاد کنید که فرض می‌کند بخش داده از بخش متن پیروی می‌کند. این هست
پیشفرض.

تماس های طولانی
-mno-long-تماس
به کامپایلر می‌گوید ابتدا با بارگذاری آدرس تابع، فراخوانی‌های تابع را انجام دهد
وارد یک ثبات شده و سپس یک فراخوانی زیر روال را روی این ثبات انجام می دهد. این
اگر تابع هدف خارج از محدوده آدرس دهی 24 بیتی باشد، سوئیچ مورد نیاز است
نسخه مبتنی بر افست دستورالعمل فراخوانی زیر روال.

این ویژگی به طور پیش فرض فعال نیست. مشخص کردن -mno-long-تماس را بازیابی خواهد کرد
رفتار پیش فرض توجه داشته باشید که این سوئیچ ها هیچ تاثیری بر نحوه تولید کامپایلر ندارند
کد برای رسیدگی به فراخوانی تابع از طریق نشانگرهای تابع.

-mfast-fp
پیوند با کتابخانه سریع ممیز شناور. این کتابخانه برخی از IEEE را آرام می کند
قوانین استاندارد ممیز شناور برای بررسی ورودی ها در برابر غیر عددی (NAN)، در
علاقه به عملکرد

-minline-plt
فعال کردن ورودی های PLT در فراخوانی توابع به توابعی که شناخته شده نیستند
به صورت محلی متصل شود. بدون اثری ندارد -mfdpic.

چند هسته ای
ساخت اپلیکیشن مستقل برای پردازنده چند هسته ای Blackfin. فایل های شروع مناسب و
از اسکریپت های پیوند برای پشتیبانی چند هسته ای استفاده خواهد شد. این گزینه تعریف می کند
"__BFIN_MULTICORE". فقط با آن قابل استفاده است -mcpu=bf561[-sirevision]. قابل استفاده است
با -mcorea or -mcoreb. اگر بدون استفاده می شود -mcorea or -mcoreb، تک
از مدل برنامه نویسی کاربردی/دو هسته ای استفاده شده است. در این مدل، عملکرد اصلی از
Core B باید به عنوان coreb_main نامگذاری شود. اگر با آن استفاده شود -mcorea or -mcoreb، یکی
برنامه در هر هسته مدل برنامه نویسی استفاده می شود. در صورت عدم استفاده از این گزینه، تک
از مدل برنامه نویسی برنامه هسته ای استفاده شده است.

-mcorea
با استفاده از یک برنامه در هر هسته، یک برنامه مستقل برای Core A از BF561 بسازید
مدل برنامه نویسی فایل های شروع مناسب و اسکریپت های پیوند برای پشتیبانی از Core A استفاده خواهند شد.
این گزینه "__BFIN_COREA" را تعریف می کند. باید با آن استفاده شود چند هسته ای.

-mcoreb
هنگام استفاده از یک برنامه در هر هسته، یک برنامه مستقل برای Core B از BF561 بسازید
مدل برنامه نویسی فایل های شروع مناسب و اسکریپت های پیوند برای پشتیبانی از Core B استفاده خواهند شد.
این گزینه "__BFIN_COREB" را تعریف می کند. وقتی از این گزینه استفاده می شود، coreb_main باید باشد
به جای اصلی استفاده می شود. باید با آن استفاده شود چند هسته ای.

-msdram
ساخت اپلیکیشن مستقل برای SDRAM. فایل های شروع مناسب و اسکریپت های پیوند خواهند بود
برای قرار دادن برنامه در SDRAM استفاده می شود. لودر باید SDRAM را قبل از بارگیری مقداردهی اولیه کند
برنامه به SDRAM این گزینه "__BFIN_SDRAM" را تعریف می کند.

-micplb
فرض کنید ICPLB ها در زمان اجرا فعال هستند. این بر ناهنجاری خاصی تأثیر می گذارد
راه حل ها برای اهداف لینوکس، پیش فرض این است که فرض کنیم ICPLB ها فعال هستند. برای
برنامه های مستقل پیش فرض خاموش است.

C6X گزینه

-مارس=نام
این نام معماری هدف را مشخص می کند. GCC از این نام برای تعیین استفاده می کند
چه نوع دستورالعمل هایی می تواند هنگام تولید کد اسمبلی صادر کند. جایز است
اسامی عبارتند از: c62x, c64x, c64x+, c67x, c67x+, c674x.

-mbig-endian
کد برای یک هدف بزرگ endian ایجاد کنید.

-mlittle-endian
کدی را برای یک هدف کوچک endian ایجاد کنید. این پیش فرض است.

-msim
فایل های راه اندازی و اسکریپت پیوند دهنده مناسب برای شبیه ساز را انتخاب کنید.

-msdata=پیش‌فرض
داده های کوچک جهانی و ثابت را در آن قرار دهید .neardata بخش، که توسط
ثبت نام "B14". داده های جهانی و ایستا کوچک را که مقداردهی اولیه نشده اند در آن قرار دهید .bss بخش،
که در مجاورت است .neardata بخش. داده های کوچک فقط خواندنی را در آن قرار دهید rodata
بخش. بخش های مربوطه مورد استفاده برای داده های بزرگ هستند .fardata, دور
و .const.

-msdata=همه
همه داده ها، نه فقط اشیاء کوچک، را در بخش های رزرو شده برای داده های کوچک قرار دهید، و
برای دسترسی به آنها از آدرس دهی مربوط به رجیستر "B14" استفاده کنید.

-msdata=هیچ
از بخش های رزرو شده برای داده های کوچک استفاده نکنید و از آدرس های مطلق استفاده کنید
دسترسی به تمام داده ها همه داده های جهانی و استاتیک اولیه را در داخل قرار دهید .fardata بخش،
و تمام داده های اولیه در دور بخش. همه داده های ثابت را در .const
بخش.

CRIS گزینه

این گزینه ها به طور خاص برای پورت های CRIS تعریف شده اند.

-مارس=نوع معماری
-mcpu=نوع معماری
برای معماری مشخص شده کد تولید کنید. انتخاب ها برای نوع معماری هستند
v3, v8 و v10 به ترتیب برای ETRAX 4، ETRAX 100 و ETRAX 100 LX. پیش فرض است v0
به جز cris-axis-linux-gnu که پیش‌فرض آن است v10.

-mtune=نوع معماری
تنظیم کنید نوع معماری همه چیز قابل اجرا در مورد کد تولید شده، به جز
ABI و مجموعه دستورالعمل های موجود. انتخاب ها برای نوع معماری هستند
همان برای -مارس=نوع معماری.

-mmax-stack-frame =n
هنگامی که قاب پشته یک تابع بیشتر شد هشدار دهید n بایت

-metrax4
-metrax100
گزینه ها -metrax4 و -metrax100 مترادف هستند برای -مارس=v3 و -مارس=v8
بود.

-mmul-bug-راهکار
-mno-mul-bug-راهکار
در مورد یک اشکال در دستورالعمل های "muls" و "mulu" برای مدل های CPU که در آن وجود دارد، کار کنید
اعمال میشود. این گزینه به صورت پیش فرض فعال است.

-mpdebug
اطلاعات مربوط به اشکال زدایی دقیق CRIS را در کد اسمبلی فعال کنید. این
گزینه همچنین دارای اثر برای خاموش کردن است #بدون_برنامه نشانگر کد قالب بندی شده به
اسمبلر در ابتدای فایل اسمبلی.

-mcc-init
از نتایج کد شرط از دستورالعمل قبلی استفاده نکنید. همیشه منتشر می کنند مقایسه و
دستورالعمل تست قبل از استفاده از کدهای شرایط

عوارض جانبی mno
دستورالعمل هایی با عوارض جانبی در حالت های آدرس دهی به غیر از پست ارسال نکنید.
افزایش

-mstack-align
-mno-stack-align
-mdata-align
-mno-data-align
-mconst-align
-mno-const-align
این گزینه ها (بدون گزینه) ترتیبات (حذف ترتیبات) را برای stack-frame ترتیب می دهند،
داده ها و ثابت های منفرد برای حداکثر اندازه دسترسی به داده ها تراز شوند
برای مدل CPU انتخاب شده پیش فرض این است که برای تراز 32 بیتی ترتیب دهید. ABI
جزئیاتی مانند طرح ساختار تحت تأثیر این گزینه ها قرار نمی گیرند.

-m32-bit
-m16-bit
-m8-bit
مشابه گزینه های stack-data- و const-align در بالا، این گزینه ها ترتیب می دهند
stack-frame، داده های قابل نوشتن و ثابت ها برای همه 32 بیتی، 16 بیتی یا 8 بیتی تراز هستند.
پیش فرض تراز 32 بیتی است.

-mno-prologue-epilogue
-مقدمه-مخاطره
با -mno-prologue-epilogue، پیش درآمد عملکرد عادی و پایانی که راه اندازی می شود
قاب پشته حذف شده است و هیچ دستورالعمل بازگشت یا دنباله بازگشتی وجود ندارد
در کد ایجاد شده است. از این گزینه فقط همراه با بازرسی بصری استفاده کنید
کد کامپایل شده: هیچ اخطاری یا خطایی در زمانی که ثبت های ذخیره شده در تماس باید وجود داشته باشند ایجاد نمی شود
ذخیره شود، یا باید برای متغیر محلی فضای ذخیره سازی اختصاص داده شود.

-mno-gotplt
-mgotplt
با -fpic و -fPIC، توالی دستورالعمل هایی را که بارگذاری می کنند تولید نکنید (انجام دهید).
آدرس برای توابع از بخش PLT از GOT به جای (سنتی در سایر موارد
معماری) فراخوانی به PLT. پیش فرض است -mgotplt.

-ملف
گزینه بدون عملیات قدیمی فقط با cris-axis-elf و cris-axis-linux-gnu شناخته می شود.
اهداف.

-mlinux
گزینه no-op قدیمی فقط با هدف cris-axis-linux-gnu شناخته می شود.

سیم کارت
این گزینه که برای جنک محور بحرانی شناخته شده است، ترتیب پیوند با ورودی-خروجی را می دهد
توابع از یک کتابخانه شبیه ساز. کد، داده های اولیه و داده های صفر اولیه
به صورت متوالی تخصیص داده می شوند.

-sim2
پسندیدن سیم کارت، اما گزینه های پیوند دهنده را برای مکان یابی داده های اولیه در 0x40000000 و صفر ارسال کنید
داده های اولیه در 0x80000000.

CR16 گزینه

این گزینه ها به طور خاص برای پورت های CR16 تعریف شده اند.

-mmac
استفاده از دستورالعمل‌های multiply-cumulate را فعال کنید. به طور پیش فرض غیرفعال است.

-mcr16cplus
-mcr16c
کد برای معماری CR16C یا CR16C+ ایجاد کنید. معماری CR16C+ پیش فرض است.

-msim
کتابخانه libsim.a را که با شبیه ساز سازگار است پیوند می دهد. قابل اجرا برای جن
فقط کامپایلر

-mint32
نوع عدد صحیح را با عرض 32 بیت انتخاب کنید.

-mbit-ops
دستورالعمل های sbit/cbit را برای دستکاری بیت ایجاد می کند.

-mdata-model=مدل
یک مدل داده را انتخاب کنید. انتخاب ها برای مدل هستند نزدیک, بسیار or متوسط. متوسط پیش فرض است.
با این حال، بسیار زمانی که گزینه -mcr16c انتخاب می شود معتبر نیست زیرا معماری CR16C ندارد
پشتیبانی از مدل داده دور

داروین گزینه

این گزینه ها برای تمام معماری هایی که سیستم عامل داروین را اجرا می کنند تعریف شده اند.

FSF GCC در داروین فایل های شیء "چربی" ایجاد نمی کند. یک فایل شی برای آن ایجاد می کند
معماری واحدی که برای هدف قرار دادن آن ساخته شده است. GCC اپل در داروین ایجاد می کند
فایل های "چربی" در صورت متعدد بودن -ارشی گزینه ها استفاده می شود؛ این کار را با اجرای کامپایلر یا
چندین بار پیوند داده و نتایج را به هم متصل می کند لیپو.

نوع فرعی فایل ایجاد شده (مانند ppc7400 or ppc970 or i686) توسط تعیین می شود
پرچم هایی که ISA را مشخص می کنند که شورای همکاری خلیج فارس هدف قرار می دهد، مانند -mcpu or -مارس.
-force_cpusubtype_ALL می توان از گزینه برای نادیده گرفتن آن استفاده کرد.

ابزار داروین وقتی با عدم تطابق ISA ارائه می شود، رفتارشان متفاوت است. در
مونتاژ کننده، as، فقط اجازه استفاده از دستورالعمل هایی را می دهد که برای نوع فرعی معتبر هستند
فایلی که تولید می کند، بنابراین نمی توانید دستورالعمل های 64 بیتی را در a قرار دهید ppc750 پرونده شی
پیوند دهنده برای کتابخانه های مشترک، /usr/bin/libtool، خراب می شود و در صورت درخواست خطا چاپ می شود
برای ایجاد یک کتابخانه مشترک با یک زیرنوع محدودتر از فایل های ورودی آن (برای
به عنوان مثال، تلاش برای قرار دادن a ppc970 فایل شی در a ppc7400 کتابخانه). پیوند دهنده برای
فایل های اجرایی، ld، بی سر و صدا ترین نوع فرعی را به فایل اجرایی می دهد
فایل های ورودی آن

-Fدیر
فهرست فریمورک را اضافه کنید دیر به سر فهرست دایرکتوری هایی که باید جستجو شوند
برای فایل های هدر این دایرکتوری ها با آنهایی که توسط مشخص شده اند در هم می آمیزند -I
گزینه ها و به ترتیب چپ به راست اسکن می شوند.

دایرکتوری فریمورک دایرکتوری با فریمورک ها در آن است. یک چارچوب یک است
دایرکتوری با a "سربرگ" و / یا "Private Headers" دایرکتوری که مستقیماً در آن موجود است
که به پایان می رسد ".framework". نام فریمورک نام این دایرکتوری است
به استثنای ".framework". هدرهای مرتبط با چارچوب در یکی از آنها یافت می شود
آن دو دایرکتوری، با "سربرگ" ابتدا جستجو می شود یک زیر چارچوب یک است
فهرست فریمورک که در یک فریمورک است "چارچوب ها" فهرست راهنما. شامل از
سرصفحه های فریم ورک فقط می توانند در هدر چارچوبی ظاهر شوند که حاوی آن باشد
زیر چارچوب، یا در هدر زیر چارچوب خواهر و برادر. دو زیرفریم ورک خواهر و برادر هستند اگر
آنها در یک چارچوب رخ می دهند. یک زیرفریمورک نباید همنام a باشد
در صورت نقض این چارچوب، اخطار داده خواهد شد. در حال حاضر یک زیر چارچوب است
نمی تواند زیر چارچوب داشته باشد، در آینده، مکانیسم ممکن است به پشتیبانی گسترش یابد
این. چارچوب های استاندارد را می توان در "/System/Library/Frameworks" و
"/کتابخانه/چارچوب". یک مثال شامل به نظر می رسد مانند "#include "،
جایی که چارچوب نشان دهنده نام چارچوب است و header.h در آن یافت می شود
"Private Headers" or "سربرگ" دایرکتوری.

-iframeworkدیر
پسندیدن -F به جز دایرکتوری که به عنوان دایرکتوری سیستم در نظر گرفته می شود. تفاوت اصلی
بین این -iframework و -F است که با -iframework کامپایلر هشدار نمی دهد
درباره ساختارهای موجود در فایل‌های سرصفحه یافت شده از طریق دیر. این گزینه معتبر است
فقط برای خانواده زبان های C.

حدس زد
اطلاعات اشکال زدایی را برای نمادهایی که استفاده می شود منتشر کنید. برای فرمت اشکال زدایی STABS،
این را قادر می سازد -symbols-feliminate-unused-debug-symbols. این به طور پیش فرض روشن است.

-خوشحال
اطلاعات اشکال زدایی را برای همه نمادها و انواع منتشر می کند.

-mmacosx-version-min=نسخه
اولین نسخه MacOS X که این فایل اجرایی روی آن اجرا می شود، است نسخه. معمول
ارزش های نسخه شامل 10.1، 10.2 و 10.3.9 می شود.

اگر کامپایلر برای استفاده از هدرهای سیستم به طور پیش فرض ساخته شده است، پیش فرض برای
این گزینه نسخه سیستمی است که کامپایلر روی آن اجرا می شود، در غیر این صورت
پیش‌فرض انتخاب‌هایی است که با هر تعداد سیستم و پایه کد سازگار هستند
امکان پذیر است.

-mkernel
حالت توسعه هسته را فعال کنید. را -mkernel مجموعه های گزینه -استاتیک, -fno-common,
-fno-cxa-atexit, -fno-استثناها, -fno-non-call-exceptions, -fapple-kext, -فنو ضعیف
و -fno-rtti جایی که قابل اجراست این حالت نیز تنظیم می شود -mno-altivec, -msoft-float,
-فنو ساخته شده است و -mlong-branch برای اهداف PowerPC

-mone-byte-bool
نادیده گرفتن پیش فرض ها برای بول به طوری که sizeof(bool)==1به به صورت پیش فرض اندازه (bool) is 4
هنگام کامپایل برای Darwin/PowerPC و 1 هنگام کامپایل برای Darwin/x86، بنابراین این گزینه
روی x86 تاثیری نداره

هشدار: La -mone-byte-bool سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. استفاده از این سوئیچ ممکن است نیاز داشته باشد
کامپایل مجدد همه ماژول های دیگر در یک برنامه، از جمله کتابخانه های سیستم. از این استفاده کن
برای مطابقت با یک مدل داده غیر پیش فرض تغییر دهید.

-مفیکس
-fix-and-continue
-findirect-data
کد مناسب برای چرخش سریع توسعه ایجاد کنید. برای فعال کردن gdb به نیاز است
به صورت پویا فایل های ".o" را در برنامه های در حال اجرا بارگذاری کنید. -findirect-data و
-fix-and-continue برای سازگاری با عقب ارائه شده است.

-all_load
همه اعضای کتابخانه های آرشیو ایستا را بارگیری می کند. ببین مرد ld(1) برای اطلاعات بیشتر

-arch_errors_fatal
باعث می شود که خطاهای مربوط به فایل هایی که دارای معماری اشتباه هستند کشنده باشد.

-bind_at_load
باعث می شود فایل خروجی به گونه ای علامت گذاری شود که پیوند دهنده پویا همه را متصل کند
ارجاعات تعریف نشده هنگام بارگیری یا راه اندازی فایل.

-دسته
یک فایل با فرمت Mach-o باندل تولید کنید. ببین مرد ld(1) برای اطلاعات بیشتر

-bundle_loader قابل اجرا
این گزینه را مشخص می کند قابل اجرا که فایل خروجی ساخت را بارگذاری می کند
مرتبط. ببین مرد ld(1) برای اطلاعات بیشتر

-dynamiclib
وقتی این گزینه تصویب شود، GCC به جای یک فایل اجرایی، یک کتابخانه پویا تولید می کند
هنگام پیوند، با استفاده از داروین لیبوتول فرمان

-force_cpusubtype_ALL
این باعث می شود که فایل خروجی GCC دارای این باشد همه نوع فرعی، به جای یکی که توسط کنترل می شود
la -mcpu or -مارس گزینه.

-allowable_client نام مشتری
-نام مشتری
-compatibility_version
-نسخه فعلی
نوار_مرده
فایل-وابستگی
-dylib_file
-dylinker_install_name
-پویا
-list_symbols_exported
-فیلست
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-پایه_تصویر
-init
-install_name
-keep_private_externs
-multi_module
-multiply_defined
-Multiply_duped_Unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-نومولتیفز
-ناربند
noseglinkedit
-pagezero_size
-پیشبندی
-prebind_all_twolevel_modules
-بسته_خصوصی
-Read_Only_Relocs
-بخشی
- نمادهای بخش
-whyload
-seg1addr
-فرقه آفرینی
- نمادهای بخش
-بخش
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-Single_Module
-استاتیک
-زیر_کتابخانه
-sub_umbrella
-twolevel_namespace
-بله
-تعریف نشده
-لیست_symbols_unexported
-ناهمخوانی_اشاره_ضعیف
-واتس لود
این گزینه ها به پیوند دهنده داروین منتقل می شوند. صفحه مرد پیوند دهنده داروین توضیح می دهد
آنها را با جزئیات

دسامبر آلفا گزینه

اینها -m گزینه ها برای پیاده سازی های DEC Alpha تعریف شده اند:

-mno-soft-float
-msoft-float
از دستورالعمل های ممیز شناور سخت افزاری برای ممیز شناور استفاده کنید (استفاده نکنید).
عملیات چه زمانی -msoft-float مشخص شده است، توابع در libgcc.a عادت خواهد شد
انجام عملیات ممیز شناور مگر اینکه با روتین هایی که شبیه سازی می شوند جایگزین شوند
عملیات ممیز شناور، یا به گونه ای کامپایل شده است که چنین شبیه سازی هایی را فراخوانی کند
روال ها، این روال ها عملیات ممیز شناور را صادر می کنند. اگر در حال تدوین هستید
برای یک آلفا بدون عملیات ممیز شناور، باید مطمئن شوید که کتابخانه وجود دارد
ساخته شده تا به آنها زنگ نزند.

توجه داشته باشید که اجرای آلفا بدون عملیات ممیز شناور الزامی است
رجیسترهای ممیز شناور

-MFP- reg
-mno-fp-regs
کدی را ایجاد کنید که از مجموعه ثبت ممیز شناور استفاده می کند (از آن استفاده نمی کند). -mno-fp-regs
دلالت دارد -msoft-float. اگر از مجموعه ثبت ممیز شناور استفاده نمی شود، ممیز شناور
عملوندها به گونه ای که اعداد صحیح و ممیز شناور هستند در رجیسترهای اعداد صحیح ارسال می شوند
نتایج به جای $f0 در $0 ارسال می شود. این یک توالی فراخوانی غیر استاندارد است، بنابراین
هر تابع با آرگومان ممیز شناور یا مقدار بازگشتی که توسط کد کامپایل شده فراخوانی شده است
با -mno-fp-regs همچنین باید با آن گزینه کامپایل شود.

یک استفاده معمولی از این گزینه ساختن هسته ای است که از آن استفاده نمی کند و بنابراین نیاز دارد
هیچ ثبت ممیز شناور را ذخیره و بازیابی نکنید.

-مییی
معماری آلفا سخت افزار ممیز شناور را برای حداکثر بهینه سازی شده پیاده سازی می کند
کارایی. بیشتر با استاندارد ممیز شناور IEEE مطابقت دارد. با این حال،
برای انطباق کامل، کمک نرم افزار مورد نیاز است. این گزینه کد تولید می کند
کد کاملاً مطابق با IEEE جز که غیر دقیق پرچم نگهداری نمی شود (به زیر مراجعه کنید).
اگر این گزینه روشن باشد، ماکرو پیش پردازنده "_IEEE_FP" در طول تعریف می شود
تلفیقی. کد به دست آمده کارایی کمتری دارد اما می تواند به درستی پشتیبانی کند
اعداد غیرعادی شده و مقادیر استثنایی IEEE مانند عددی نیست و مثبت/منفی
بی نهایت. سایر کامپایلرهای آلفا این گزینه را فراخوانی می کنند -ieee_with_no_inexact.

-mieee-with-inexact
این مثل -مییی به جز کد تولید شده، IEEE را نیز حفظ می کند غیر دقیق پرچم.
روشن کردن این گزینه باعث می شود کد تولید شده IEEE کاملاً سازگار را پیاده سازی کند
ریاضی. علاوه بر "_IEEE_FP"، "_IEEE_FP_EXACT" به عنوان یک ماکرو پیش پردازنده تعریف می شود.
در برخی از پیاده‌سازی‌های آلفا، کدهای به‌دست‌آمده ممکن است بسیار کندتر از آن اجرا شوند
کد تولید شده به طور پیش فرض از آنجایی که کد بسیار کمی وجود دارد که به آن بستگی دارد
غیر دقیق پرچم، معمولاً نباید این گزینه را مشخص کنید. سایر کامپایلرهای آلفا تماس می گیرند
این گزینه -ieee_with_inexact.

-mfp-trap-mode=حالت تله
این گزینه کنترل می کند که چه تله های مربوط به ممیز شناور فعال هستند. آلفای دیگر
کامپایلرها این گزینه را فراخوانی می کنند -fptm حالت تله. حالت تله را می توان روی یکی از چهار تنظیم کرد
ارزش های:

n این تنظیم پیش فرض (عادی) است. تنها تله‌هایی که فعال هستند عبارتند از
مواردی که در نرم افزار غیرفعال نمی شوند (مثلاً تقسیم بر تله صفر).

u علاوه بر تله های فعال شده توسط n، تله های زیر جریان نیز فعال هستند.

su پسندیدن u، اما دستورالعمل ها برای تکمیل نرم افزار ایمن علامت گذاری شده اند (نگاه کنید به
راهنمای معماری آلفا برای جزئیات).

سای پسندیدن su، اما تله های غیر دقیق نیز فعال هستند.

-MFP-Rounding-Mode =حالت گرد
حالت گرد کردن IEEE را انتخاب می کند. سایر کامپایلرهای آلفا این گزینه را فراخوانی می کنند -fprm
حالت گرد. حالت گرد می تواند یکی از موارد زیر باشد:

n حالت عادی گرد کردن IEEE. اعداد ممیز شناور به سمت نزدیکترین گرد می شوند
شماره دستگاه یا به سمت شماره دستگاه زوج در صورت تساوی.

m گرد به سمت منهای بی نهایت.

c حالت گرد خرد شده. اعداد ممیز شناور به سمت صفر گرد می شوند.

d حالت گرد کردن پویا یک فیلد در رجیستر کنترل ممیز شناور (fpcr، نگاه کنید به
راهنمای مرجع معماری آلفا) حالت گرد کردن را کنترل می کند. سی
کتابخانه این رجیستر را برای گرد کردن به اضافه بی نهایت مقداردهی می کند. بدین ترتیب،
مگر اینکه برنامه شما آن را تغییر دهد fpcr, d مربوط به دور به مثبت است
بی نهایت.

-MTRAP-RECISION =تله دقیق
در معماری آلفا، تله های نقطه شناور نادقیق هستند. این یعنی بدون
کمک نرم افزاری غیر ممکن است که از یک تله شناور و برنامه بازیابی شود
اجرا معمولاً باید خاتمه یابد. GCC می تواند کدی تولید کند که می تواند کمک کند
کنترل کننده های تله سیستم عامل در تعیین مکان دقیقی که باعث ایجاد یک
تله ممیز شناور بسته به نیازهای یک برنامه، متفاوت است
سطوح دقت را می توان انتخاب کرد:

p دقت برنامه این گزینه پیش فرض است و به این معنی است که یک کنترل کننده تله فقط می تواند
مشخص کنید کدام برنامه باعث ایجاد استثنای ممیز شناور شده است.

f دقت عملکرد کنترل کننده تله می تواند عملکردی را که باعث a
استثنای ممیز شناور

i دقت دستورالعمل کنترل کننده تله می تواند دستورالعمل دقیق آن را تعیین کند
باعث استثنای ممیز شناور شد.

سایر کامپایلرهای آلفا گزینه های معادلی را ارائه می دهند که نامیده می شوند -scope_safe و
-Resumption_safe.

-mieee-conformant
این گزینه کد تولید شده را مطابق با IEEE علامت گذاری می کند. شما نباید از این گزینه استفاده کنید
مگر اینکه شما هم مشخص کنید -MTRAP-CENCISION = من و یا -mfp-trap-mode=su or
-mfp-trap-mode=sui. تنها اثر آن انتشار خط است .پرچم 48 در تابع
مقدمه فایل اسمبلی تولید شده تحت یونیکس DEC، این تأثیری دارد که
روال‌های کتابخانه ریاضی منطبق با IEEE در پیوند خواهند بود.

-mbuild-constants
به طور معمول GCC یک عدد صحیح 32 یا 64 بیتی را بررسی می کند تا ببیند آیا می تواند آن را بسازد یا خیر.
از ثابت های کوچکتر در دو یا سه دستورالعمل. اگر نتواند، خروجی می دهد
به عنوان یک کلمه ثابت است و کد تولید می کند تا آن را از بخش داده در زمان اجرا بارگیری کند.

برای ساختن GCC از این گزینه استفاده کنید تمام ثابت های عدد صحیح با استفاده از کد، حتی اگر
دستورالعمل های بیشتری را می طلبد (حداکثر شش است).

شما معمولاً از این گزینه برای ایجاد یک لودر دینامیک کتابخانه مشترک استفاده می کنید. خودش
یک کتابخانه مشترک، قبل از اینکه بتواند متغیرها را پیدا کند، باید خود را در حافظه جابجا کند
و ثابت در بخش داده خودش.

-malpha-as
-mgas
انتخاب کنید که آیا کد تولید شده توسط اسمبلر ارائه شده توسط فروشنده مونتاژ شود یا خیر
(-malpha-as) یا توسط اسمبلر گنو -mgas.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-fix
-mmax
-mno-max
مشخص کنید که آیا GCC باید کدی برای استفاده از BWX، CIX، FIX و MAX اختیاری ایجاد کند یا خیر
مجموعه های دستورالعمل پیش فرض استفاده از مجموعه دستورالعمل های پشتیبانی شده توسط CPU است
نوع مشخص شده از طریق -mcpu= گزینه یا CPU که GCC بر روی آن ساخته شده است، اگر هیچ کدام وجود نداشت
مشخص شده.

-mfloat-vax
-mfloat-ieee
کدی ایجاد کنید که به جای آن از محاسبات ممیز شناور VAX F و G استفاده می کند (از آن استفاده نمی کند).
با دقت تک و دوگانه IEEE.

-mexplicit-relocs
-mno-explicit-relocs
اسمبلرهای قدیمی آلفا هیچ راهی برای ایجاد جابجایی نمادها به جز از طریق ارائه نکردند
ماکروهای اسمبلر استفاده از این ماکروها امکان برنامه ریزی بهینه دستورالعمل را نمی دهد.
GNU binutils در نسخه 2.12 از یک نحو جدید پشتیبانی می کند که به کامپایلر اجازه می دهد تا
صراحتاً علامت گذاری کنید که کدام جابجایی باید در کدام دستورالعمل اعمال شود. این گزینه است
بیشتر برای اشکال زدایی مفید است، زیرا GCC قابلیت های اسمبلر را در هنگام تشخیص تشخیص می دهد
ساخته شده است و پیش فرض را بر اساس آن تنظیم می کند.

-msmall-data
داده های بزرگ
چه زمانی -mexplicit-relocs در واقع، داده های استاتیک از طریق gp-نسبی
جابجایی ها چه زمانی -msmall-data استفاده می شود، اشیایی به طول 8 بایت یا کوچکتر در آن قرار می گیرند
a کوچک داده ها منطقه (بخش های ".sdata" و ".sbss") و از طریق 16 بیت قابل دسترسی هستند.
جابجایی خارج از ثبات $gp. این اندازه ناحیه داده کوچک را محدود می کند
64 کیلوبایت، اما اجازه می دهد تا متغیرها مستقیماً از طریق یک دستورالعمل واحد دسترسی داشته باشند.

پیش فرض این است داده های بزرگ. با این گزینه، ناحیه داده فقط به زیر محدود می شود
2 گیگابایت. برنامه هایی که به بیش از 2 گیگابایت داده نیاز دارند باید از "malloc" یا "mmap" استفاده کنند
تخصیص داده ها در پشته به جای در بخش داده برنامه.

هنگام تولید کد برای کتابخانه های مشترک، -fpic دلالت دارد -msmall-data و -fPIC
دلالت دارد داده های بزرگ.

-msmall-text
-متن بزرگ
چه زمانی -msmall-text استفاده می شود، کامپایلر فرض می کند که کد کل برنامه است
(یا کتابخانه مشترک) در 4 مگابایت قرار می گیرد و بنابراین با دستورالعمل شعبه قابل دسترسی است.
چه زمانی -msmall-data استفاده می شود، کامپایلر می تواند فرض کند که همه نمادهای محلی به اشتراک گذاشته می شوند
همان مقدار gp $، و بنابراین تعداد دستورالعمل های مورد نیاز برای یک تابع را کاهش می دهد
از 4 تا 1 تماس بگیرید

پیش فرض این است -متن بزرگ.

-mcpu=cpu_type
مجموعه دستورالعمل و پارامترهای زمانبندی دستورالعمل را برای نوع ماشین تنظیم کنید
cpu_type. می توانید یکی را مشخص کنید EV نام سبک یا شماره تراشه مربوطه.
GCC از پارامترهای زمان بندی برای خانواده پردازنده های EV4، EV5 و EV6 پشتیبانی می کند و
مقادیر پیش فرض مجموعه دستورات را از پردازنده ای که شما مشخص کرده اید انتخاب می کند.
اگر نوع پردازنده را مشخص نکنید، GCC به طور پیش‌فرض به پردازنده‌ای که روی آن قرار دارد، خواهد بود
کامپایلر ساخته شد

مقادیر پشتیبانی شده برای cpu_type هستند

ev4
ev45
21064
به عنوان یک EV4 برنامه ریزی می کند و هیچ پسوند مجموعه دستورالعملی ندارد.

ev5
21164
به عنوان یک EV5 برنامه ریزی می کند و هیچ پسوند مجموعه دستورالعملی ندارد.

ev56
21164a
به عنوان یک EV5 برنامه ریزی می کند و از پسوند BWX پشتیبانی می کند.

pca56
21164pc
21164PC
به عنوان یک EV5 برنامه ریزی می کند و از افزونه های BWX و MAX پشتیبانی می کند.

ev6
21264
به عنوان EV6 برنامه ریزی می کند و از افزونه های BWX، FIX و MAX پشتیبانی می کند.

ev67
21264a
به عنوان یک EV6 برنامه ریزی می کند و از برنامه های افزودنی BWX، CIX، FIX و MAX پشتیبانی می کند.

زنجیره های ابزار بومی نیز از این ارزش پشتیبانی می کنند بومی، که بهترین معماری را انتخاب می کند
گزینه ای برای پردازنده میزبان -mcpu=بومی اگر GCC تشخیص ندهد هیچ تاثیری ندارد
پردازنده

-mtune=cpu_type
فقط پارامترهای زمانبندی دستورالعمل را برای نوع ماشین تنظیم کنید cpu_type.
مجموعه دستورالعمل تغییر نکرده است.

زنجیره های ابزار بومی نیز از این ارزش پشتیبانی می کنند بومی، که بهترین معماری را انتخاب می کند
گزینه ای برای پردازنده میزبان -mtune=بومی اگر GCC تشخیص ندهد هیچ تاثیری ندارد
پردازنده

-mmmory-latency=زمان
تأخیر زمانی را که زمانبندی باید برای مراجع معمول حافظه در نظر بگیرد را تنظیم می کند
برنامه. این عدد به شدت به الگوهای دسترسی به حافظه استفاده شده بستگی دارد
با استفاده از برنامه و اندازه حافظه پنهان خارجی روی دستگاه.

گزینه های معتبر برای زمان هستند

عدد
یک عدد اعشاری که نشان دهنده چرخه های ساعت است.

L1
L2
L3
اصلی
کامپایلر شامل تخمین‌هایی از تعداد چرخه‌های ساعت برای EV4 و "معمولی" است.
سخت افزار EV5 برای کش های سطح 1، 2 و 3 (همچنین Dcache، Scache و
Bcache)، و همچنین به حافظه اصلی. توجه داشته باشید که L3 فقط برای EV5 معتبر است.

دسامبر آلفا / VMS گزینه

اینها -m گزینه ها برای پیاده سازی DEC Alpha/VMS تعریف شده اند:

-mvms-return-codes
کدهای شرایط VMS را از main برگردانید. پیش‌فرض برگرداندن شرط سبک POSIX است
کدهای (مثلاً خطا).

-mdebug-main=پیشوند
اولین روتینی را که نامش با آن شروع می شود علامت گذاری کنید پیشوند به عنوان روال اصلی برای
اشکال زدا.

-mmalloc64
روال های تخصیص حافظه 64 بیتی پیش فرض.

FR30 گزینه

این گزینه ها به طور خاص برای پورت FR30 تعریف شده اند.

-msmall-model
از مدل فضای آدرس کوچک استفاده کنید. این می تواند کد کوچکتری تولید کند، اما فرض می کند
که تمام مقادیر نمادین و آدرس ها در یک محدوده 20 بیتی قرار می گیرند.

-mno-lsim
فرض کنید پشتیبانی زمان اجرا ارائه شده است و بنابراین نیازی به گنجاندن آن نیست
کتابخانه شبیه ساز (libsim.a) در خط فرمان لینکر.

LIF گزینه

-mgpr-32
فقط از اولین 32 ثبت همه منظوره استفاده کنید.

-mgpr-64
از تمام 64 رجیستر همه منظوره استفاده کنید.

-mfpr-32
فقط از 32 ثبت ممیز شناور اول استفاده کنید.

-mfpr-64
از تمام 64 رجیستر ممیز شناور استفاده کنید.

-mhard-float
از دستورالعمل های سخت افزاری برای عملیات ممیز شناور استفاده کنید.

-msoft-float
از روال های کتابخانه برای عملیات ممیز شناور استفاده کنید.

-Malloc-CC
تخصیص پویا رجیسترهای کد شرط.

-mfixed-cc
سعی نکنید به صورت پویا رجیسترهای کد شرط را تخصیص دهید، فقط از "icc0" و استفاده کنید
"fcc0".

-mdword
ABI را برای استفاده از دو کلمه insns تغییر دهید.

-mno-dword
از دستورالعمل های دو کلمه ای استفاده نکنید.

- دوبل
از دستورالعمل های دوگانه ممیز شناور استفاده کنید.

-mno-دبل
از دستورالعمل های دوگانه ممیز شناور استفاده نکنید.

- رسانه
از دستورالعمل های رسانه استفاده کنید.

-mno-media
از دستورالعمل های رسانه استفاده نکنید.

-mmuladd
از دستورات ضرب و جمع/ تفریق استفاده کنید.

-mno-muladd
از دستورات ضرب و جمع و تفریق استفاده نکنید.

-mfdpic
FDPIC ABI را انتخاب کنید که از توصیفگرهای تابع برای نشان دادن نشانگرها استفاده می کند
کارکرد. بدون هیچ گونه گزینه مرتبط با PIC/PIE، به این معنی است -fPIE. با -fpic or
-fpie، فرض می کند ورودی های GOT و داده های کوچک در محدوده 12 بیتی از GOT قرار دارند
آدرس پایه؛ با -fPIC or -fPIE، افست های GOT با 32 بیت محاسبه می شوند. با یک
bfin-elf هدف، این گزینه دلالت دارد -msim.

-minline-plt
فعال کردن ورودی های PLT در فراخوانی توابع به توابعی که شناخته شده نیستند
به صورت محلی متصل شود. بدون اثری ندارد -mfdpic. به طور پیش فرض فعال است اگر
بهینه سازی برای سرعت و کامپایل برای کتابخانه های مشترک (به عنوان مثال، -fPIC or -fpic)، یا
هنگامی که یک گزینه بهینه سازی مانند -O3 یا بالاتر در خط فرمان وجود دارد.

-mTLS
هنگام تولید کد محلی رشته، یک بخش TLS بزرگ را در نظر بگیرید.

-mtls
هنگام تولید کد محلی رشته، یک بخش TLS بزرگ در نظر نگیرید.

-mgprel-ro
استفاده از جابجایی های "GPREL" را در FDPIC ABI برای داده هایی که مشخص است در
بخش های فقط خواندنی این به طور پیش فرض فعال است، به جز برای -fpic or -fpie: بااینکه
ممکن است به کوچکتر کردن جدول افست جهانی کمک کند، 1 دستورالعمل را با 4 مبادله می کند
-fPIC or -fPIE، 3 دستورالعمل را با 4 مورد معامله می کند که یکی از آنها ممکن است توسط چندین مورد به اشتراک گذاشته شود
نمادها، و از نیاز به ورودی GOT برای نماد ارجاع شده جلوگیری می کند، بنابراین همینطور است
احتمال برد بیشتر است اگر نیست، -mno-gprel-ro می توان برای غیرفعال کردن آن استفاده کرد.

- multilib-library-pic
پیوند با کتابخانه های عکس (کتابخانه، نه FD). این به طور ضمنی توسط -مجموعه-عکس، همچنین
توسط توسط -fPIC و -fpic بدون -mfdpic. شما هرگز نباید به طور صریح از آن استفاده کنید.

-mlinked-fp
از الزامات EABI پیروی کنید که همیشه یک نشانگر فریم هر زمان که یک قاب پشته ایجاد می شود، ایجاد کنید
اختصاص داده شده است. این گزینه به طور پیش فرض فعال است و می توان با آن غیر فعال کرد
-mno-linked-fp.

تماس های طولانی
از آدرس دهی غیر مستقیم برای فراخوانی توابع خارج از واحد کامپایل فعلی استفاده کنید. این
به توابع اجازه می دهد تا در هر جایی در فضای آدرس 32 بیتی قرار گیرند.

برچسب های بدخیم
سعی کنید با قرار دادن nops در بسته قبلی، برچسب ها را با یک مرز 8 بایت تراز کنید.
این گزینه فقط زمانی تأثیر می گذارد که بسته بندی VLIW فعال باشد. جدید ایجاد نمی کند
بسته ها؛ صرفاً نوپ ها را به موارد موجود اضافه می کند.

-مجموعه-عکس
کد EABI مستقل از موقعیت را ایجاد کنید.

-macc-4
فقط از چهار رجیستر ذخیره کننده رسانه اول استفاده کنید.

-macc-8
از هر هشت رجیستر ذخیره کننده رسانه استفاده کنید.

-مپک
دستورالعمل های VLIW را بسته بندی کنید.

-mno-pack
دستورالعمل های VLIW را بسته بندی نکنید.

پرچم های mno
سوئیچ های ABI را در e_flag ها علامت گذاری نکنید.

-mcond-move
استفاده از دستورالعمل‌های انتقال شرطی (پیش‌فرض) را فعال کنید.

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mno-cond-move
استفاده از دستورالعمل های حرکت شرطی را غیرفعال کنید.

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mscc
استفاده از دستورالعمل های مجموعه شرطی (پیش فرض) را فعال کنید.

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mno-scc
استفاده از دستورالعمل های مجموعه شرطی را غیرفعال کنید.

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mcond-exec
استفاده از اجرای شرطی (پیش‌فرض) را فعال کنید.

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mno-cond-exec
غیرفعال کردن استفاده از اجرای شرطی

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mvliw-branch
یک پاس برای بسته بندی شاخه ها در دستورالعمل های VLIW (پیش فرض) اجرا کنید.

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mno-vliw-branch
برای بسته‌بندی شاخه‌ها در دستورالعمل‌های VLIW، پاسی را اجرا نکنید.

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mmulti-cond-exec
فعال کردن بهینه سازی "&&" و "||" در اجرای مشروط (پیش فرض).

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mno-multi-cond-exec
غیرفعال کردن بهینه سازی "&&" و "||" در اجرای مشروط

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mnested-cond-exec
بهینه‌سازی‌های اجرای شرطی تودرتو (پیش‌فرض) را فعال کنید.

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-mno-nested-cond-exec
بهینه‌سازی‌های اجرای شرطی تودرتو را غیرفعال کنید.

این سوئیچ عمدتاً برای رفع اشکال کامپایلر است و احتمالاً در یک حذف خواهد شد
نسخه آینده

-moptimize-membar
این سوئیچ دستورالعمل‌های اضافی «membar» را از کد تولید شده توسط کامپایلر حذف می‌کند.
به طور پیش فرض فعال است.

-mno-optimize-membar
این سوئیچ حذف خودکار دستورالعمل‌های «عضو» اضافی را غیرفعال می‌کند
کد تولید شده

-mtomcat-stats
باعث می شود که گاز آمار تامکت را چاپ کند.

-mcpu=پردازنده
نوع پردازنده ای را که برای آن کد تولید می شود انتخاب کنید. مقادیر ممکن هستند frv, fr550,
گربه نر, fr500, fr450, fr405, fr400, fr300 و ساده.

گنو / لینوکس گزینه

اینها -m گزینه ها برای اهداف گنو/لینوکس تعریف شده اند:

-mglibc
از کتابخانه گنو سی استفاده کنید. این پیش فرض است به جز روشن *-*-linux-*uclibc* و
*-*-linux-*اندروید* اهداف.

- muclibc
از کتابخانه uClibc C استفاده کنید. این پیش فرض روشن است *-*-linux-*uclibc* اهداف.

-مبیونیک
از کتابخانه Bionic C استفاده کنید. این پیش فرض روشن است *-*-linux-*اندروید* اهداف.

-ماندروید
کامپایل کد سازگار با پلتفرم اندروید. این پیش فرض روشن است
*-*-linux-*اندروید* اهداف.

هنگام کامپایل، این گزینه فعال می شود -مبیونیک, -fPIC, -fno-استثناها و -fno-rtti by
پیش فرض هنگام پیوند دادن، این گزینه باعث می‌شود درایور GCC از گزینه‌های مخصوص اندروید عبور کند
به پیوند دهنده در نهایت، این گزینه باعث می شود که ماکرو پیش پردازنده "__ANDROID__" باشد
تعریف شده است.

-tno-android-cc
غیر فعال کردن اثرات کامپایل از -ماندروید، یعنی فعال نکنید -مبیونیک, -fPIC,
-fno-استثناها و -fno-rtti به صورت پیش فرض.

-tno-android-ld
غیرفعال کردن اثرات پیوند -ماندروید، به عنوان مثال، گزینه های استاندارد پیوند لینوکس را به
پیوند دهنده

H8 / 300 گزینه

اینها -m گزینه هایی برای اجرای H8/300 تعریف شده است:

-آرامش کن
در صورت امکان برخی از مراجع آدرس را در زمان پیوند کوتاه کنید. از گزینه linker استفاده می کند
-آروم باش.

-mh کد برای H8/300H ایجاد کنید.

-اماس کد برای H8S تولید کنید.

- دقیقه کد H8S و H8/300H را در حالت عادی ایجاد کنید. این سوئیچ باید استفاده شود
یا با -mh or -اماس.

-ms2600
کد برای H8S/2600 ایجاد کنید. این سوئیچ باید با استفاده شود -اماس.

-mint32
داده های "int" را به طور پیش فرض 32 بیت کنید.

-بدخیم-300
در H8/300H و H8S، از قوانین ترازبندی مشابه برای H8/300 استفاده کنید. پیشفرض
برای H8/300H و H8S تراز کردن طول ها و شناورها در مرزهای 4 بایتی است.
-بدخیم-300 باعث تراز شدن آنها در مرزهای 2 بایتی می شود. این گزینه هیچ تاثیری ندارد
در H8/300.

HPPA گزینه

اینها -m گزینه هایی برای خانواده کامپیوترهای HPPA تعریف شده است:

-مارس=نوع معماری
برای معماری مشخص شده کد تولید کنید. انتخاب ها برای نوع معماری هستند
1.0 برای PA 1.0، 1.1 برای PA 1.1 و 2.0 برای پردازنده های PA 2.0. رجوع شود به
/usr/lib/sched.models در یک سیستم HP-UX برای تعیین گزینه معماری مناسب
برای ماشین شما کد کامپایل‌شده برای معماری‌های با شماره‌های پایین‌تر روی بالاتر اجرا می‌شود
معماری های شماره گذاری شده، اما نه برعکس.

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
مترادف برای -مارس=1.0, -مارس=1.1و -مارس=2.0 بود.

سوئیچ -mbig
کد مناسب برای جداول سوئیچ بزرگ تولید کنید. از این گزینه فقط در صورتی استفاده کنید که
اسمبلر/لینکر از شاخه های خارج از محدوده در جدول سوئیچ شکایت دارد.

-mjump-in-delay
با تغییر، شکاف‌های تاخیر فراخوانی تابع را با دستورالعمل‌های پرش بدون قید و شرط پر کنید
اشاره گر بازگشتی برای فراخوانی تابع که هدف پرش شرطی باشد.

-mdisable-fpregs
از استفاده از رجیسترهای ممیز شناور به هر نحوی جلوگیری کنید. این برای
کامپایل کردن هسته هایی که تغییر بافت تنبلی از ثبات های ممیز شناور را انجام می دهند. اگر
شما از این گزینه استفاده می کنید و سعی می کنید عملیات ممیز شناور، کامپایلر را انجام دهید
سقط می کند.

-ندار-نشانگر
از استفاده کامپایلر از حالت های آدرس نمایه سازی جلوگیری کنید. این امر باعث جلوگیری از برخی بیشتر می شود
مشکلات مبهم هنگام کامپایل کد تولید شده MIG تحت MACH.

-mno-space-regs
کدی را ایجاد کنید که فرض کند هدف هیچ ثبت فضایی ندارد. این به GCC اجازه می دهد
تماس‌های غیرمستقیم سریع‌تر ایجاد کنید و از حالت‌های نشانی شاخص مقیاس‌ناپذیر استفاده کنید.

چنین کدی برای سیستم ها و هسته های PA سطح 0 مناسب است.

-mfast-غیر مستقیم-تماس
کدی را ایجاد کنید که فرض می‌کند تماس‌ها هرگز از مرزهای فضا عبور نمی‌کنند. این به GCC اجازه می دهد
کدی را منتشر می کند که تماس های غیرمستقیم را سریعتر انجام می دهد.

این گزینه در حضور کتابخانه های مشترک یا توابع تو در تو کار نخواهد کرد.

-Mfixed-Range =محدوده ثبت نام
کدی را ایجاد کنید که محدوده رجیستر داده شده را به عنوان ثبات ثابت در نظر می گیرد. ثبت ثابت
یکی از مواردی است که تخصیص دهنده ثبات نمی تواند از آن استفاده کند. این در هنگام کامپایل کرنل مفید است
کد محدوده رجیستر به صورت دو رجیستر که با یک خط تیره از هم جدا شده اند، مشخص می شود. چندگانه
محدوده های ثبت را می توان با کاما از هم جدا کرد.

-mlong-load-store
ایجاد بار 3 دستورالعملی و ذخیره توالی ها همانطور که گاهی اوقات توسط HP-UX 10 لازم است
پیوند دهنده این معادل است +k گزینه ای برای کامپایلرهای HP.

قابل حمل - زمان اجرا
از قراردادهای تماس قابل حمل پیشنهاد شده توسط HP برای سیستم های ELF استفاده کنید.

-mgas
استفاده از دستورالعمل‌های اسمبلر را فعال کنید که فقط GAS می‌فهمد.

-mschedule=نوع cpu
کد را با توجه به محدودیت های نوع ماشین برنامه ریزی کنید نوع cpu. انتخاب ها
برای نوع cpu هستند 700 7100, 7100LC, 7200, 7300 و 8000. رجوع شود به
/usr/lib/sched.models در یک سیستم HP-UX برای تعیین گزینه زمانبندی مناسب برای
ماشین شما زمان بندی پیش فرض است 8000.

-mlinker-opt
پاس بهینه سازی را در پیوند دهنده HP-UX فعال کنید. توجه داشته باشید که این باعث اشکال زدایی نمادین می شود
غیر ممکن همچنین باعث ایجاد یک باگ در پیوندهای HP-UX 8 و HP-UX 9 می شود که در آن آنها
هنگام پیوند دادن برخی از برنامه ها، پیام های خطای جعلی بدهید.

-msoft-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور تولید کنید. هشدار: مورد نیاز
کتابخانه ها برای همه اهداف HPPA در دسترس نیستند. به طور معمول امکانات از
از کامپایلر C معمولی ماشین استفاده می شود، اما این کار را نمی توان مستقیماً در حالت متقابل انجام داد.
تلفیقی. شما باید ترتیبات خود را برای تهیه کتابخانه مناسب انجام دهید
توابع برای کامپایل متقابل

-msoft-float قرارداد فراخوانی را در فایل خروجی تغییر می دهد. بنابراین، آن را تنها
مفید است اگر کامپایل کنید تمام برنامه ای با این گزینه به طور خاص، شما نیاز دارید
گردآوری libgcc.a، کتابخانه ای که با GCC ارائه می شود، با -msoft-float به منظور این
به کار می کنند.

-msio
پیش تعریف "_SIO" را برای سرور IO ایجاد کنید. پیش فرض است -mwsio. این تولید می کند
از پیش تعریف شده، "__hp9000s700"، "__hp9000s700__" و "_WSIO"، برای ایستگاه کاری IO.
این گزینه ها تحت HP-UX و HI-UX در دسترس هستند.

-mgnu-ld
از گزینه های خاص GNU ld استفاده کنید. این می گذرد -به اشتراک گذاشته شده به ld هنگام ساخت اشتراکی
کتابخانه زمانی که GCC به طور صریح یا ضمنی با پیکربندی شده باشد، پیش‌فرض است
پیوند دهنده گنو. این گزینه هیچ تاثیری بر فراخوانی ld ندارد، فقط آن را دارد
پارامترهایی که به آن ld ارسال می شوند را تغییر می دهد. ld که فراخوانی می شود توسط تعیین می شود
la -با-LD گزینه پیکربندی، مسیر جستجوی برنامه GCC و در نهایت توسط کاربر
PATH. پیوند دهنده مورد استفاده توسط GCC را می توان با استفاده از آن چاپ کرد که gcc -print-prog-name=ld`.
این گزینه فقط در HP-UX GCC 64 بیتی موجود است، یعنی با پیکربندی شده است
hppa*64*-*-hpux*.

-mhp-ld
از گزینه های خاص HP ld استفاده کنید. این می گذرد -b به ld هنگام ساخت یک کتابخانه مشترک و
عبور می کند +قبول نوع عدم تطابق به ld در همه پیوندها. زمانی که GCC باشد پیش‌فرض است
به طور صریح یا ضمنی با پیوند دهنده HP پیکربندی شده است. این گزینه ندارد
هر تاثیری که ld فراخوانی شود، فقط پارامترهایی را که به آن ارسال می شود تغییر می دهد
ld ld که فراخوانی می شود توسط -با-LD گزینه پیکربندی، GCC's
مسیر جستجوی برنامه و در نهایت توسط کاربر PATH. پیوند دهنده استفاده شده توسط GCC می تواند باشد
چاپ شده با استفاده از که gcc -print-prog-name=ld`. این گزینه فقط در دسترس است
64 بیت HP-UX GCC، یعنی پیکربندی شده با hppa*64*-*-hpux*.

تماس های طولانی
کدی را ایجاد کنید که از توالی تماس های طولانی استفاده می کند. این تضمین می کند که یک تماس همیشه امکان پذیر است
برای رسیدن به خردهای ایجاد شده توسط پیوند دهنده. پیش‌فرض این است که تماس‌های طولانی فقط زمانی ایجاد شود که
فاصله از محل تماس تا ابتدای تابع یا واحد ترجمه، به عنوان
ممکن است مورد، از حد از پیش تعریف شده تعیین شده توسط نوع شاخه مورد استفاده فراتر رود. را
محدودیت برای تماس های معمولی برای PA 7,600,000 به ترتیب 240,000 و 2.0 بایت است.
و معماری PA 1.X. Sibcals همیشه در 240,000 بایت محدود است.

فاصله ها از ابتدای توابع در هنگام استفاده اندازه گیری می شوند
-function-sections گزینه، یا هنگام استفاده از -mgas و -mno-portable-runtime گزینه های
با هم تحت HP-UX با پیوند دهنده SOM.

معمولاً استفاده از این گزینه مطلوب نیست زیرا عملکرد را کاهش می دهد.
با این حال، ممکن است در برنامه های کاربردی بزرگ مفید باشد، به ویژه زمانی که پیوند جزئی وجود دارد
برای ساخت اپلیکیشن استفاده می شود.

انواع تماس های طولانی مورد استفاده بستگی به قابلیت اسمبلر و لینکر دارد.
و نوع کد تولید شده تأثیر بر سیستم هایی که طولانی مدت پشتیبانی می کنند
تماس های مطلق، و طولانی pic نماد-تفاوت یا تماس های نسبی pc باید باشد
نسبتا کوچک. با این حال، یک تماس غیر مستقیم در سیستم های ELF 32 بیتی در کد تصویر استفاده می شود
و بسیار طولانی است

-munix=unix-std
ایجاد کامپایلر از پیش تعریف شده و یک فایل شروع برای استاندارد یونیکس مشخص شده انتخاب کنید.
انتخاب ها برای unix-std هستند 93, 95 و 98. 93 در تمام نسخه های HP-UX پشتیبانی می شود.
95 در HP-UX 10.10 و جدیدتر موجود است. 98 در HP-UX 11.11 و جدیدتر موجود است.
مقادیر پیش فرض هستند 93 برای HP-UX 10.00، 95 برای HP-UX 10.10 هر چند تا 11.00، و 98
برای HP-UX 11.11 و جدیدتر.

-munix=93 همان پیش تعریف های GCC 3.3 و 3.4 را ارائه می دهد. -munix=95 فراهم می کند
پیش تعریف های اضافی برای "XOPEN_UNIX" و "_XOPEN_SOURCE_EXTENDED" و فایل شروع
unix95.o. -munix=98 پیش تعریف های اضافی برای "_XOPEN_UNIX" فراهم می کند،
"_XOPEN_SOURCE_EXTENDED"، "_INCLUDE__STDC_A1_SOURCE" و "_INCLUDE_XOPEN_SOURCE_500"،
و فایل شروع unix98.o.

است مهم توجه داشته باشید که این گزینه رابط های کتابخانه های مختلف را تغییر می دهد
کارهای روزمره. همچنین بر رفتار عملیاتی کتابخانه C تأثیر می گذارد. بدین ترتیب، مفرط
در استفاده از این گزینه دقت لازم است.

کد کتابخانه ای که قرار است با بیش از یک استاندارد یونیکس کار کند باید آزمایش شود،
متغیر را تنظیم و بازیابی کنید __xpg4_extended_mask به عنوان مناسب. اکثر نرم افزارهای گنو
این قابلیت را ارائه نمی دهد

-nolibdld
سرکوب تولید گزینه های پیوند برای جستجوی libdld.sl هنگامی که -استاتیک گزینه است
در HP-UX 10 و جدیدتر مشخص شده است.

-استاتیک
اجرای HP-UX setlocale در libc به libdld.sl وابسته است. آنجا
نسخه آرشیو libdld.sl نیست. بنابراین، زمانی که -استاتیک گزینه مشخص شده است،
برای حل این وابستگی به گزینه های پیوند خاصی نیاز است.

در HP-UX 10 و جدیدتر، درایور GCC گزینه‌های لازم را برای پیوند اضافه می‌کند
libdld.sl زمانی که -استاتیک گزینه مشخص شده است. این باعث می شود که باینری حاصل به
پویا باشد در پورت 64 بیتی، پیوند دهنده ها به طور پیش فرض باینری های پویا را تولید می کنند
هر مورد را -nolibdld می توان از گزینه برای جلوگیری از اضافه شدن درایور GCC استفاده کرد
این گزینه های پیوند

-موضوعات
اضافه کردن پشتیبانی برای multithreading با dce موضوع کتابخانه تحت HP-UX. این گزینه
پرچم ها را برای پیش پردازنده و پیوند دهنده تنظیم می کند.

اینتل 386 و AMD x86-64 گزینه

اینها -m گزینه‌ها برای رایانه‌های خانواده i386 و x86-64 تعریف شده‌اند:

-mtune=نوع cpu
تنظیم کنید نوع cpu همه چیز در مورد کد تولید شده قابل اجرا است، به جز ABI
و مجموعه دستورالعمل های موجود انتخاب ها برای نوع cpu هستند:

عمومی
کد بهینه سازی شده برای رایج ترین پردازنده های IA32/AMD64/EM64T تولید کنید. اگر شما
CPU را که کد شما روی آن اجرا می شود را بدانید، سپس باید از کد مربوطه استفاده کنید
-mtune گزینه به جای -mtune=عمومی. اما، اگر شما دقیقا نمی دانید چه CPU
کاربران برنامه شما خواهند داشت، پس باید از این گزینه استفاده کنید.

همانطور که پردازنده های جدید در بازار مستقر می شوند، رفتار این گزینه
تغییر خواهد کرد. بنابراین، اگر به نسخه جدیدتر GCC ارتقا دهید، کد
گزینه ایجاد شده برای منعکس کننده پردازنده هایی که در زمان رایج ترین بودند تغییر می کند
آن نسخه از GCC منتشر شد.

وجود ندارد -مارس=عمومی گزینه زیرا -مارس مجموعه دستورالعمل را نشان می دهد
کامپایلر می تواند استفاده کند، و هیچ مجموعه دستورالعمل عمومی قابل اجرا برای همه وجود ندارد
پردازنده ها متقابلا، -mtune پردازنده را نشان می دهد (یا در این مورد،
مجموعه ای از پردازنده ها) که کد برای آنها بهینه شده است.

بومی
این CPU را برای تنظیم در زمان کامپایل با تعیین پردازنده انتخاب می کند
نوع ماشین کامپایل استفاده كردن -mtune=بومی کد بهینه سازی شده تولید خواهد کرد
برای ماشین محلی تحت محدودیت های مجموعه دستورالعمل انتخاب شده.
با استفاده از -مارس=بومی تمام زیرمجموعه های دستورالعمل پشتیبانی شده توسط محلی را فعال می کند
ماشین (از این رو ممکن است نتیجه روی ماشین های مختلف اجرا نشود).

i386
پردازنده اصلی i386 اینتل.

i486
پردازنده مرکزی i486 اینتل. (هیچ برنامه ریزی برای این تراشه اجرا نشده است.)

i586 پنتیوم
سی پی یو پنتیوم اینتل بدون پشتیبانی از MMX.

پنتیوم-mmx
CPU Intel PentiumMMX مبتنی بر هسته پنتیوم با پشتیبانی از مجموعه دستورالعمل MMX.

پنتیوم پرو
سی پی یو اینتل پنتیوم پرو

i686
همان "عمومی" است، اما هنگامی که به عنوان گزینه "مارش" استفاده می شود، مجموعه دستورالعمل PentiumPro
استفاده خواهد شد، بنابراین کد روی همه تراشه های خانواده i686 اجرا می شود.

پنتیوم 2
CPU Intel Pentium2 بر اساس هسته PentiumPro با پشتیبانی از مجموعه دستورالعمل MMX.

پنتیوم 3، پنتیوم 3 متر
CPU اینتل Pentium3 مبتنی بر هسته PentiumPro با مجموعه دستورالعمل MMX و SSE
پشتیبانی می کند.

پنتیوم-m
نسخه کم مصرف CPU Intel Pentium3 با مجموعه دستورالعمل MMX، SSE و SSE2
پشتیبانی. توسط نوت بوک های Centrino استفاده می شود.

پنتیوم 4، پنتیوم 4 متر
CPU Intel Pentium4 با پشتیبانی از مجموعه دستورالعمل MMX، SSE و SSE2.

پیش فرض
نسخه بهبودیافته CPU Intel Pentium4 با دستورالعمل های MMX، SSE، SSE2 و SSE3
پشتیبانی را تنظیم کنید

نوکونا
نسخه بهبودیافته CPU Intel Pentium4 با پسوندهای 64 بیتی، MMX، SSE، SSE2 و
پشتیبانی از مجموعه دستورالعمل SSE3.

هسته 2
CPU Intel Core2 با پسوندهای 64 بیتی، دستورالعمل MMX، SSE، SSE2، SSE3 و SSSE3
پشتیبانی را تنظیم کنید

corei7
CPU Intel Core i7 با پسوندهای 64 بیتی، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1 و
پشتیبانی از مجموعه دستورالعمل SSE4.2.

corei7-avx
CPU Intel Core i7 با پسوندهای 64 بیتی، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1،
پشتیبانی از مجموعه دستورالعمل های SSE4.2، AVX، AES و PCLMUL.

core-avx-i
پردازنده مرکزی Intel Core با پسوندهای 64 بیتی، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1،
پشتیبانی از مجموعه دستورالعمل های SSE4.2، AVX، AES، PCLMUL، FSGSBASE، RDRND و F16C.

اتم
CPU Intel Atom با پسوندهای 64 بیتی، دستورالعمل MMX، SSE، SSE2، SSE3 و SSSE3
پشتیبانی را تنظیم کنید

k6 CPU AMD K6 با پشتیبانی از مجموعه دستورالعمل MMX.

k6-2، k6-3
نسخه های بهبود یافته CPU AMD K6 با MMX و 3DNow! پشتیبانی مجموعه دستورالعمل

دو و میدانی، athlon-tbird
CPU AMD Athlon با MMX، 3dNOW!، 3DNow پیشرفته! و دستورالعمل های پیش واکشی SSE
پشتیبانی می کند.

athlon-4، athlon-xp، athlon-mp
CPU AMD Athlon با MMX، 3DNow!، 3DNow پیشرفته! و آموزش کامل SSE
پشتیبانی را تنظیم کنید

k8، اپترون، athlon64، athlon-fx
CPU های مبتنی بر هسته AMD K8 با پشتیبانی از مجموعه دستورالعمل x86-64. (این MMX را فوق مجموعه می کند،
SSE، SSE2، 3DNow!، بهبود یافته 3DNow! و پسوندهای مجموعه دستورالعمل 64 بیتی.)

k8-sse3، opteron-sse3، athlon64-sse3
نسخه های بهبود یافته k8، opteron و athlon64 با پشتیبانی از مجموعه دستورالعمل SSE3.

amdfam10، بارسلونا
پردازنده‌های مبتنی بر هسته خانواده 10 ساعت AMD با پشتیبانی از مجموعه دستورالعمل x86-64. (این
supersets MMX، SSE، SSE2، SSE3، SSE4A، 3DNow!، بهبود یافته 3DNow!، ABM و 64 بیتی
پسوندهای مجموعه دستورالعمل.)

bdver1
پردازنده‌های مبتنی بر هسته خانواده 15 ساعت AMD با پشتیبانی از مجموعه دستورالعمل x86-64. (این
فوق مجموعه های FMA4، AVX، XOP، LWP، AES، PCL_MUL، CX16، MMX، SSE، SSE2، SSE3، SSE4A،
پسوندهای مجموعه دستورالعمل SSSE3، SSE4.1، SSE4.2، ABM و 64 بیتی.)

bdver2
پردازنده‌های مبتنی بر هسته خانواده 15 ساعت AMD با پشتیبانی از مجموعه دستورالعمل x86-64. (این
supersets BMI، TBM، F16C، FMA، AVX، XOP، LWP، AES، PCL_MUL، CX16، MMX، SSE، SSE2،
پسوندهای SSE3، SSE4A، SSSE3، SSE4.1، SSE4.2، ABM و مجموعه دستورالعمل های 64 بیتی.)

btver1
پردازنده‌های مبتنی بر هسته خانواده 14 ساعت AMD با پشتیبانی از مجموعه دستورالعمل x86-64. (این
مجموعه دستورات فوق مجموعه MMX، SSE، SSE2، SSE3، SSSE3، SSE4A، CX16، ABM و 64 بیتی
پسوند.)

winchip-c6
CPU IDT Winchip C6، به همان شیوه i486 با مجموعه دستورالعمل های اضافی MMX
پشتیبانی می کند.

winchip2
CPU IDT Winchip2، به همان شیوه i486 با MMX اضافی و 3DNow برخورد می کند!
پشتیبانی مجموعه دستورالعمل

c3 از طریق C3 CPU با MMX و 3DNow! پشتیبانی مجموعه دستورالعمل (بدون برنامه ریزی
برای این تراشه پیاده سازی شده است.)

c3-2
از طریق C3-2 CPU با پشتیبانی از مجموعه دستورالعمل MMX و SSE. (بدون برنامه ریزی
برای این تراشه پیاده سازی شده است.)

ژئود
CPU تعبیه شده AMD با MMX و 3DNow! پشتیبانی مجموعه دستورالعمل

در حین انتخاب یک مورد خاص نوع cpu کارها را به طور مناسب برای آن برنامه ریزی می کند
تراشه خاص، کامپایلر هیچ کدی را که روی آن اجرا نمی شود تولید نمی کند
نوع ماشین پیش فرض بدون -مارس=نوع cpu گزینه در حال استفاده به عنوان مثال، اگر
سپس GCC برای i686-pc-linux-gnu پیکربندی شده است -mtune=pentium4 کدی تولید خواهد کرد که
برای Pentium4 تنظیم شده است اما همچنان بر روی دستگاه های i686 اجرا می شود.

-مارس=نوع cpu
دستورالعمل هایی را برای نوع ماشین ایجاد کنید نوع cpu. انتخاب ها برای نوع cpu هستند
همان برای -mtune. علاوه بر این، مشخص کردن -مارس=نوع cpu دلالت دارد -mtune=نوع cpu.

-mcpu=نوع cpu
مترادف منسوخ شده برای -mtune.

-mfpmath=واحد
ایجاد محاسبات ممیز شناور برای واحد انتخاب شده واحد. انتخاب ها برای واحد هستند:

387 استفاده از پردازنده مشترک ممیز شناور استاندارد 387 موجود در اکثر تراشه ها
و در غیر این صورت تقلید می شود. کد کامپایل شده با این گزینه تقریباً در همه جا اجرا می شود.
نتایج موقت به جای دقت با دقت 80 بیتی محاسبه می شوند
بر اساس نوع مشخص شده، و در نتیجه نتایج کمی متفاوت در مقایسه با بسیاری از آنها حاصل می شود
تراشه های دیگر دیدن -float-store برای توضیحات بیشتر

این گزینه پیش فرض برای کامپایلر i386 است.

ESS از دستورالعمل های اسکالر ممیز شناور موجود در مجموعه دستورات SSE استفاده کنید. این
مجموعه دستورالعمل توسط پنتیوم 3 و تراشه های جدیدتر، در خط AMD پشتیبانی می شود
تراشه های Athlon-4، Athlon-xp و Athlon-mp. نسخه قبلی دستورالعمل SSE
مجموعه فقط از محاسبات تک دقیق پشتیبانی می کند، بنابراین دو و توسعه یافته-
محاسبات دقیق هنوز با استفاده از 387 انجام می شود. نسخه بعدی که فقط در موجود است
پنتیوم 4 و تراشه‌های آینده AMD x86-64، از محاسبات با دقت دوگانه پشتیبانی می‌کنند.
بیش از حد.

برای کامپایلر i386، باید از آن استفاده کنید -مارس=نوع cpu, -msse or -msse2 سوئیچ ها
برای فعال کردن پسوندهای SSE و موثر کردن این گزینه. برای کامپایلر x86-64،
این افزونه ها به صورت پیش فرض فعال هستند.

کد حاصل باید در اکثر موارد بسیار سریعتر باشد
از مشکلات بی ثباتی عددی کد 387 اجتناب کنید، اما ممکن است برخی از کدهای موجود را از بین ببرد
کدی که انتظار دارد موقتی 80 بیت باشد.

این انتخاب پیش فرض برای کامپایلر x86-64 است.

sse,387
sse+387
هر دو
سعی کنید از هر دو مجموعه دستورالعمل به طور همزمان استفاده کنید. این به طور موثر دو برابر
تعداد رجیسترهای موجود و روی تراشه‌های با واحدهای اجرایی مجزا برای 387
و SSE منابع اجرایی نیز. از این گزینه همانطور که هنوز است با احتیاط استفاده کنید
آزمایشی، زیرا تخصیص دهنده ثبات GCC مدل جداگانه ای را انجام نمی دهد
واحدهای عملکردی به خوبی منجر به عملکرد ناپایدار می شود.

-masm=گویش
خروجی دستورات asm با استفاده از انتخاب شده گویش. گزینه های پشتیبانی شده هستند اینتل or att
(پیش فرض). داروین پشتیبانی نمی کند اینتل.

-mieee-fp
-mno-ieee-fp
کنترل کنید که آیا کامپایلر از مقایسه های ممیز شناور IEEE استفاده می کند یا خیر. اینها
در مواردی که نتیجه مقایسه نامرتب است، به درستی رسیدگی کنید.

-msoft-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور تولید کنید. هشدار: مورد نیاز
کتابخانه ها بخشی از شورای همکاری خلیج فارس نیستند. به طور معمول امکانات C معمولی دستگاه
کامپایلر استفاده می شود، اما این کار را نمی توان به طور مستقیم در کامپایل متقابل انجام داد. شما باید
ترتیبات خود را برای ارائه عملکردهای کتابخانه ای مناسب برای متقابل فراهم کنید.
تلفیقی.

در ماشین‌هایی که تابعی ممیز شناور را برمی‌گرداند، رجیستر 80387 را نشان می‌دهد
پشته، برخی از کدهای عملیاتی ممیز شناور ممکن است منتشر شوند حتی اگر -msoft-float استفاده می شود.

-mno-fp-ret-in-387
از رجیسترهای FPU برای مقادیر بازگشتی توابع استفاده نکنید.

قرارداد فراخوانی معمول دارای توابعی است که مقادیری از انواع "float" و "double" را برمی گرداند.
در یک رجیستر FPU، حتی اگر FPU وجود نداشته باشد. ایده این است که سیستم عامل
باید یک FPU را شبیه سازی کند.

گزینه -mno-fp-ret-in-387 باعث می شود که چنین مقادیری در CPU معمولی برگردانده شوند
در عوض ثبت می کند.

-mno-fancy-math-387
برخی از 387 شبیه ساز از دستورالعمل های "sin"، "cos" و "sqrt" برای
387. برای جلوگیری از ایجاد آن دستورالعمل ها، این گزینه را مشخص کنید. این گزینه است
به طور پیش فرض در FreeBSD، OpenBSD و NetBSD. زمانی که این گزینه لغو می شود -مارس
نشان می دهد که CPU مورد نظر همیشه یک FPU خواهد داشت و بنابراین دستورالعمل نخواهد داشت
نیاز به شبیه سازی از ویرایش 2.6.1، این دستورالعمل ها تولید نمی شوند مگر اینکه شما
همچنین از -بهینه‌سازی‌های ریاضی و سرگرم‌کننده سوئیچ.

بدخیم-دوبرابر
-mno-align-double
کنترل کنید که آیا GCC متغیرهای "double"، "long double" و "long long" را روی a تراز می کند یا خیر
مرز دو کلمه ای یا مرز یک کلمه ای. تراز کردن متغیرهای "دو" در دو کلمه
مرز کدی را تولید می کند که تا حدودی سریعتر روی a اجرا می شود پنتیوم به هزینه بیشتر
حافظه است.

در x86-64، بدخیم-دوبرابر به طور پیش فرض فعال است.

هشدار: اگر از بدخیم-دوبرابر سوئیچ، سازه های حاوی انواع فوق
تراز متفاوتی نسبت به رابط باینری برنامه منتشر شده خواهد بود
مشخصات 386 و با ساختارهای کد سازگار باینری نخواهد بود
بدون آن سوئیچ کامپایل شده است.

-m96bit-long-double
-m128bit-long-double
این سوئیچ ها اندازه "دبل طولانی" را کنترل می کنند. باینری برنامه i386
رابط اندازه را 96 بیت تعیین می کند، بنابراین -m96bit-long-double پیش فرض در است
حالت 32 بیتی

معماری‌های مدرن (پنتیوم و جدیدتر) ترجیح می‌دهند "طولان دوبل" با 8 تراز شود.
یا مرز 16 بایتی. در آرایه ها یا ساختارهای منطبق با ABI، اینطور نیست
ممکن است. بنابراین مشخص کردن -m128bit-long-double "long double" را به 16 بایت تراز می کند
با اضافه کردن "دبل طولانی" با یک صفر 32 بیتی اضافی، مرز را تعیین کنید.

در کامپایلر x86-64، -m128bit-long-double انتخاب پیش فرض به عنوان ABI آن است
مشخص می کند که "long double" باید روی مرز 16 بایت تراز شود.

توجه داشته باشید که هیچ یک از این گزینه ها هیچ دقت بیشتری را نسبت به استاندارد x87 فعال نمی کنند
80 بیت برای "دبل طولانی".

هشدار: اگر مقدار پیش فرض را برای ABI هدف خود لغو کنید، ساختارها و
آرایه های حاوی متغیرهای "long double" اندازه و همچنین عملکرد خود را تغییر می دهند
کنوانسیون فراخوانی برای عملکرد "long double" اصلاح خواهد شد. از این رو آنها
با آرایه ها یا ساختارهای کد کامپایل شده بدون آن باینری سازگار نخواهد بود
سوئیچ.

-mlarge-data-threshold=عدد
چه زمانی -mcmodel=متوسط مشخص شده است، داده ها بیشتر از آستانه در بزرگ قرار می گیرند
بخش داده این مقدار باید در تمام شیء پیوند داده شده به باینری یکسان باشد
و پیش فرض 65535 است.

-mrtd
از یک قرارداد فراخوانی تابع متفاوت استفاده کنید، که در آن توابعی که یک حالت ثابت دارند
تعداد آرگومان ها با "ret" برمی گردند تعداد دستورالعمل، که استدلال های آنها را نشان می دهد
در حین بازگشت این یک دستورالعمل را در تماس گیرنده ذخیره می کند زیرا نیازی به آن نیست
استدلال ها را در آنجا مطرح کنید.

می توانید مشخص کنید که یک تابع جداگانه با این دنباله فراخوانی با فراخوانی شود
ویژگی تابع stdcall. شما همچنین می توانید لغو کنید -mrtd گزینه با استفاده از
ویژگی تابع cdecl.

هشدار: این قرارداد فراخوانی با قراردادی که معمولاً در یونیکس استفاده می شود ناسازگار است،
بنابراین اگر نیاز به فراخوانی کتابخانه های کامپایل شده با کامپایلر یونیکس دارید، نمی توانید از آن استفاده کنید.

همچنین، شما باید نمونه های اولیه تابع را برای همه توابعی که متغیر می گیرند ارائه دهید
تعداد آرگومان ها (از جمله "printf")؛ در غیر این صورت کد نادرست تولید خواهد شد
برای تماس با آن توابع.

علاوه بر این، اگر تابعی را با تعداد زیاد فراخوانی کنید، کد به طور جدی نادرست است
استدلال ها (به طور معمول، استدلال های اضافی بی ضرر نادیده گرفته می شوند.)

-mregparm =تعداد
کنترل تعداد رجیسترهایی که برای ارسال آرگومان های عدد صحیح استفاده می شوند. به طور پیش فرض، خیر
ثبات ها برای ارسال آرگومان ها استفاده می شوند و حداکثر می توان از 3 ثبات استفاده کرد. تو می توانی
این رفتار را برای یک تابع خاص با استفاده از ویژگی تابع کنترل کنید regparm.

هشدار: اگر از این سوئیچ استفاده می کنید، و تعداد غیر صفر است، پس باید همه ماژول ها را بسازید
با همان مقدار، از جمله هر کتابخانه. این شامل کتابخانه های سیستم و
ماژول های راه اندازی

-msseregparm
از قراردادهای عبور ثبت SSE برای آرگومان های شناور و دوبل و مقادیر بازگشتی استفاده کنید.
شما می توانید این رفتار را برای یک تابع خاص با استفاده از ویژگی تابع کنترل کنید
sseregparm.

هشدار: اگر از این سوئیچ استفاده می کنید، باید همه ماژول ها را با یک مقدار بسازید،
از جمله هر کتابخانه این شامل کتابخانه های سیستم و ماژول های راه اندازی می شود.

-mvect8-ret-in-mem
بردارهای 8 بایتی را به جای رجیسترهای MMX برگردانید. این پیش فرض روشن است
Solaris@tie{}8 و 9 و VxWorks برای مطابقت با ABI کامپایلرهای Sun Studio تا
نسخه 12. نسخه‌های کامپایلر بعدی (شروع با Studio 12 Update@tie{}1)
ABI مورد استفاده سایر اهداف x86، که پیش‌فرض در Solaris@tie{}10 ​​و بالاتر است.
تنها اگر نیاز به سازگاری با کدهای موجود تولید شده توسط دارید از این گزینه استفاده کنید
آن نسخه های کامپایلر قبلی یا نسخه های قدیمی GCC.

-mpc32
-mpc64
-mpc80
دقت ممیز شناور 80387 را روی 32، 64 یا 80 بیت تنظیم کنید. چه زمانی -mpc32 مشخص شده است،
معنی نتایج عملیات ممیز شناور به 24 بیت گرد می شود
(تک دقت)؛ -mpc64 معانی نتایج ممیز شناور را گرد می کند
عملیات تا 53 بیت (دقت دو برابر) و -mpc80 معنی نتایج را گرد می کند
از عملیات ممیز شناور تا 64 بیت (دقت مضاعف توسعه یافته)، که این است
پیش فرض وقتی از این گزینه استفاده می شود، عملیات ممیز شناور با دقت بالاتری انجام می شود
بدون تنظیم کلمه کنترل FPU به طور صریح برای برنامه نویس در دسترس نیست.

تنظیم گرد کردن عملیات ممیز شناور به کمتر از 80 بیت پیش فرض
سرعت برخی از برنامه ها 2 درصد یا بیشتر. توجه داشته باشید که برخی از کتابخانه های ریاضی چنین فرض می کنند
عملیات ممیز شناور با دقت گسترده (80 بیتی) به طور پیش فرض فعال هستند. کارهای روزمره
در چنین کتابخانه‌هایی معمولاً از طریق
زمانی که از این گزینه برای تنظیم دقت استفاده می شود، "لغو فاجعه بار" نامیده می شود
کمتر از دقت گسترده

-mstackrealign
پشته را در هنگام ورود مجدداً تنظیم کنید. در Intel x86، -mstackrealign گزینه ایجاد خواهد شد
پیش درآمد و پایانی جایگزین که در صورت لزوم پشته زمان اجرا را مجدداً تنظیم می کند.
این از ترکیب کدهای قدیمی پشتیبانی می کند که یک پشته 4 بایتی را با کدهای مدرن تراز می کند
که یک پشته 16 بایتی برای سازگاری با SSE نگه می دارند. صفت را نیز ببینید
"force_align_arg_pointer"، قابل اجرا برای توابع جداگانه.

-mpreferred-stack-boundary=تعداد
سعی کنید مرز پشته در تراز با 2 افزایش یافته باشد تعداد مرز بایت اگر
-مرجع پشته ترجیح داده شده مشخص نشده است، پیش فرض 4 (16 بایت یا 128 بیت) است.

هشدار: هنگام تولید کد برای معماری x86-64 با پسوندهای SSE
معلول، -mpreferred-stack-boundary=3 می توان برای تراز نگه داشتن مرز پشته استفاده کرد
تا مرز 8 بایت شما باید تمام ماژول ها را با -mpreferred-stack-boundary=3,
از جمله هر کتابخانه این شامل کتابخانه های سیستم و ماژول های راه اندازی می شود.

-mincoming-stack-boundary=تعداد
فرض کنید پشته ورودی به 2 تراز شده است تعداد مرز بایت اگر
-mincoming-stack-boundary مشخص نشده است، یکی که توسط
-مرجع پشته ترجیح داده شده استفاده خواهد شد.

در Pentium و PentiumPro، مقادیر "double" و "long double" باید با یک تراز شوند.
مرز 8 بایتی (نگاه کنید به بدخیم-دوبرابر) یا از عملکرد قابل توجهی در زمان اجرا رنج می برند
مجازات ها در Pentium III، نوع داده SIMD Extension Streaming (SSE) "__m128" ممکن است
اگر 16 بایت تراز نباشد به درستی کار نمی کند.

برای اطمینان از تراز مناسب این مقادیر در پشته، مرز پشته باید مانند باشد
مطابق با مقدار مورد نیاز هر مقدار ذخیره شده در پشته تراز می شود. علاوه بر این، هر تابع
باید به گونه ای تولید شود که پشته را در یک راستا نگه دارد. بنابراین فراخوانی یک تابع
با یک مرز پشته ترجیحی بالاتر از تابعی که با یک پایین کامپایل شده است
مرز پشته ترجیحی به احتمال زیاد پشته را نادرست تراز می کند. توصیه می شود که
کتابخانه هایی که از تماس های برگشتی استفاده می کنند همیشه از تنظیمات پیش فرض استفاده می کنند.

این تراز اضافی فضای اضافی پشته را مصرف می کند و به طور کلی کد را افزایش می دهد
اندازه. کدهایی که به استفاده از فضای پشته حساس هستند، مانند سیستم های تعبیه شده و
هسته های سیستم عامل، ممکن است بخواهند تراز ترجیحی را کاهش دهند
-mpreferred-stack-boundary=2.

-mmmx
-mno-mmx
-msse
-mno-sse
-msse2
-mno-sse2
-msse3
-mno-sse3
-mssse3
-mno-ssse3
-msse4.1
-mno-sse4.1
-msse4.2
-mno-sse4.2
-msse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-میس
-mno-aes
-mpclmul
-mno-pclmul
-mfsgsbase
-mno-fsgsbase
-مردرند
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-msse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-mabm
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-MTBM
-mno-tbm
این سوئیچ ها استفاده از دستورالعمل ها را در MMX، SSE، SSE2، SSE3، فعال یا غیرفعال می کنند.
SSSE3، SSE4.1، AVX، AVX2، AES، PCLMUL، FSGSBASE، RDRND، F16C، FMA، SSE4A، FMA4، XOP،
LWP، ABM، BMI، BMI2، LZCNT یا 3DNow!
مجموعه دستورالعمل های توسعه یافته این افزونه ها به صورت داخلی نیز موجود هستند
توابع: ببینید X86 توکار توابع، برای جزئیات عملکردهای فعال و
توسط این سوئیچ ها غیرفعال می شود.

برای اینکه دستورات SSE/SSE2 به طور خودکار از کد ممیز شناور تولید شوند (مانند
مخالف 387 دستورالعمل) را ببینید -mfpMath = SSE.

GCC دستورات SSEx را در زمانی که -mavx استفاده می شود. در عوض، AVX جدید تولید می کند
دستورالعمل ها یا معادل AVX برای تمام دستورالعمل های SSEx در صورت نیاز.

این گزینه‌ها GCC را قادر می‌سازد تا از این دستورالعمل‌های توسعه‌یافته در کد تولید شده استفاده کند.
حتی بدون -mfpMath = SSE. برنامه هایی که تشخیص CPU در زمان اجرا را انجام می دهند باید
با استفاده از پرچم های مناسب، فایل های جداگانه ای را برای هر معماری پشتیبانی شده کامپایل کنید.
به ویژه، فایل حاوی کد شناسایی CPU باید بدون کامپایل شود
این گزینه ها

-mcld
این گزینه به GCC دستور می دهد تا یک دستورالعمل "cld" را در مقدمه توابع منتشر کند
که از دستورالعمل های رشته ای استفاده می کنند. دستورالعمل های رشته برای انتخاب به پرچم DF بستگی دارد
بین حالت افزایش خودکار یا کاهش خودکار. در حالی که ABI پرچم DF را مشخص می کند
در هنگام ورود عملکرد پاک شود، برخی از سیستم عامل ها این مشخصات را با عدم تخطی می کنند
پاک کردن پرچم DF در توزیع کننده های استثنای خود. کنترل کننده استثنا می تواند باشد
با مجموعه پرچم DF فراخوانی می شود، که منجر به حالت جهت اشتباه در هنگام رشته می شود
دستورالعمل استفاده می شود. این گزینه را می توان به طور پیش فرض روی اهداف x32 86 بیتی فعال کرد
پیکربندی GCC با --enable-cld گزینه پیکربندی تولید "cld"
دستورالعمل ها را می توان با -mno-cld گزینه کامپایلر در این مورد.

-mvzeroupper
این گزینه به GCC دستور می دهد تا قبل از انتقال یک دستورالعمل "vzeroupper" را صادر کند
کنترل جریان خارج از تابع برای به حداقل رساندن جریمه انتقال AVX به SSE و همچنین
ذاتی های غیرضروری بالای صفر را حذف کنید.

-mprefer-avx128
این گزینه به GCC دستور می دهد تا از دستورالعمل های AVX 128 بیتی به جای AVX 256 بیتی استفاده کند.
دستورالعمل ها در بردار خودکار

-mcx16
این گزینه GCC را قادر می سازد تا از دستورالعمل CMPXCHG16B در کد تولید شده استفاده کند.
CMPXCHG16B اجازه می دهد تا عملیات اتمی روی داده های چهار کلمه ای (یا oword) 128 بیتی انجام شود.
انواع این برای شمارنده های با وضوح بالا که می توانند چندین بار به روز شوند مفید است
پردازنده ها (یا هسته ها). این دستورالعمل به عنوان بخشی از اتمی داخلی تولید می شود
توابع: ببینید __همگام سازی ساخته شده است or __اتمی ساخته شده است برای جزئیات بیشتر.

-مصحف
این گزینه GCC را قادر می سازد تا از دستورالعمل SAHF در کدهای 64 بیتی تولید شده استفاده کند. زود
پردازنده های اینتل با اینتل 64 فاقد دستورالعمل های LAHF و SAHF پشتیبانی شده توسط AMD64 بودند تا اینکه
معرفی مرحله Pentium 4 G1 در دسامبر 2005. LAHF و SAHF بارگیری و ذخیره می شوند
دستورالعمل ها، به ترتیب، برای پرچم های وضعیت خاص. در حالت 64 بیتی، SAHF
دستورالعمل برای بهینه سازی توابع داخلی "fmod"، "drem" یا "remainder" استفاده می شود: رجوع کنید به
دیگر ساخته شده است برای جزئیات بیشتر.

-mmovbe
این گزینه GCC را قادر می‌سازد تا از دستورالعمل movbe برای پیاده‌سازی «__builtin_bswap32» استفاده کند.
و "__builtin_bswap64".

-mcrc32
این گزینه توابع داخلی، "__builtin_ia32_crc32qi" را فعال می کند.
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" و "__builtin_ia32_crc32di" به
دستور ماشین crc32 را تولید کنید.

-مندی
این گزینه GCC را قادر می سازد تا از دستورالعمل های RCPSS و RSQRTSS (و آنها
انواع بردار RCPPS و RSQRTPS) با یک مرحله نیوتن-رافسون اضافی به
افزایش دقت به جای DIVSS و SQRTSS (و انواع بردار آنها) برای
آرگومان های ممیز شناور تک دقیق این دستورالعمل ها تنها زمانی تولید می شوند که
-بهینه‌سازی‌های ریاضی و سرگرم‌کننده همراه با فعال می شود -فقط ریاضی محدود و
-fno-به دام انداختن-ریاضی. توجه داشته باشید که در حالی که توان عملیاتی دنباله بالاتر از مقدار است
توان عملیات غیر متقابل دستورالعمل، دقت توالی می تواند باشد
تا 2 ulp کاهش یافت (یعنی معکوس 1.0 برابر 0.99999994 است).

توجه داشته باشید که GCC "1.0f/sqrtf(ایکس)" از نظر RSQRTSS (یا RSQRTPS) در حال حاضر با
سریع-ریاضی (یا ترکیب گزینه بالا)، و نیازی ندارد -مندی.

همچنین توجه داشته باشید که GCC دنباله فوق را با گام اضافی نیوتن-رافسون منتشر می کند
بردار تقسیم تک شناور و بردار "sqrtf(ایکس)" در حال حاضر با سریع-ریاضی
(یا ترکیب گزینه بالا)، و نیازی ندارد -مندی.

-mrecip=انتخاب کردن
این گزینه اجازه می دهد تا کنترل شود که کدام دستورالعمل های برآورد متقابل ممکن است استفاده شود. انتخاب کردن
یک لیست از گزینه ها جدا شده با کاما است که ممکن است قبل از آن یک "!" برای معکوس کردن
گزینه: "all": فعال کردن تمام دستورالعمل های تخمینی، "default": فعال کردن پیش فرض
دستورالعمل، معادل -مندی، "none": غیرفعال کردن تمام دستورالعمل های تخمینی،
معادل -mno-recip، "div": فعال کردن تقریب برای تقسیم اسکالر،
"vec-div": فعال کردن تقریب برای تقسیم بردار، "sqrt": فعال کردن
تقریب برای ریشه مربع اسکالر، "vec-sqrt": فعال کردن تقریب برای
جذر بردار.

بنابراین برای مثال، -mrecip=همه،!sqrt تمام تقریب های متقابل را فعال می کند،
به جز جذر

-mveclibabi=نوع
نوع ABI را برای استفاده برای بردار کردن ذاتی با استفاده از یک کتابخانه خارجی مشخص می کند.
انواع پشتیبانی شده "svml" برای کتابخانه ریاضی بردار کوتاه اینتل و "acml" برای این است
سبک رابط کتابخانه هسته ریاضی AMD. GCC در حال حاضر تماس هایی به
"vmldExp2"، "vmldLn2"، "vmldLog102"، "vmldLog102"، "vmldPow2"، "vmldTanh2"،
"vmldTan2"، "vmldAtan2"، "vmldAtanh2"، "vmldCbrt2"، "vmldSinh2"، "vmldSin2"،
"vmldAsinh2"، "vmldAsin2"، "vmldCosh2"، "vmldCos2"، "vmldAcosh2"، "vmldAcos2"،
"vmlsExp4"، "vmlsLn4"، "vmlsLog104"، "vmlsLog104"، "vmlsPow4"، "vmlsTanh4"،
"vmlsTan4"، "vmlsAtan4"، "vmlsAtanh4"، "vmlsCbrt4"، "vmlsSinh4"، "vmlsSin4"،
برای
نوع تابع مربوطه وقتی -mveclibabi=svml استفاده می شود و "__vrd2_sin"،
"__vrd2_cos"، "__vrd2_exp"، "__vrd2_log"، "__vrd2_log2"، "__vrd2_log10"،
"__vrs4_sinf"، "__vrs4_cosf"، "__vrs4_expf"، "__vrs4_logf"، "__vrs4_log2f"،
"__vrs4_log10f" و "__vrs4_powf" برای نوع تابع مربوطه زمانی که
-mveclibabi=acml استفاده می شود. هر دو -ftree-vectorize و -بهینه‌سازی‌های ریاضی و سرگرم‌کننده داشته باشد
فعال شود. یک کتابخانه سازگار با SVML یا ACML ABI باید در پیوند مشخص شود
زمان.

-mabi=نام
کد برای کنوانسیون تماس مشخص شده ایجاد کنید. مقادیر مجاز عبارتند از: sysv برای
ABI مورد استفاده در گنو/لینوکس و سایر سیستم ها و ms برای Microsoft ABI پیشفرض
استفاده از Microsoft ABI هنگام هدف قرار دادن ویندوز است. در تمام سیستم های دیگر، پیش فرض است
SYSV ABI است. شما می توانید این رفتار را برای یک تابع خاص با استفاده از
ویژگی تابع ms_abi/sysv_abi.

-mtls-dialect=نوع
ایجاد کد برای دسترسی به حافظه محلی رشته با استفاده از گوزن یالدار or gnu2 قراردادها گوزن یالدار
پیش فرض محافظه کارانه است. gnu2 کارآمدتر است، اما ممکن است کامپایل و اجرا را اضافه کند
نیازهای زمانی که در همه سیستم ها برآورده نمی شود.

-mpush-args
-mno-push-args
از عملیات PUSH برای ذخیره پارامترهای خروجی استفاده کنید. این روش کوتاهتر و معمولاً است
به همان اندازه سریع با استفاده از عملیات SUB/MOV و به طور پیش فرض فعال است. در برخی
موارد غیرفعال کردن آن ممکن است عملکرد را به دلیل بهبود زمان‌بندی و کاهش آن بهبود بخشد
وابستگی ها

انباشته-خروجی-آرگ
اگر فعال باشد، حداکثر فضای مورد نیاز برای آرگومان های خروجی خواهد بود
در مقدمه تابع محاسبه می شود. این در اکثر CPUهای مدرن سریعتر است زیرا
کاهش وابستگی، بهبود زمان‌بندی و کاهش استفاده از پشته در صورت ترجیح پشته
مرز برابر با 2 نیست. اشکال آن افزایش قابل توجه در اندازه کد است. این
سوئیچ دلالت می کند -mno-push-args.

-mthreads
پشتیبانی از مدیریت استثنایی ایمن در رشته Mingw32. کدی که مبتنی بر Thread-safe است
مدیریت استثنا باید همه کدها را با کد کامپایل و پیوند دهد -mthreads گزینه. چه زمانی
تدوین، -mthreads تعریف می کند -D_MT; هنگام پیوند، در یک کمک کننده موضوع خاص پیوند می دهد
کتابخانه -lmingwthrd که داده های رسیدگی به استثنای هر رشته را پاک می کند.

-منهای متناوب
مقصد عملیات رشته خطی را تراز نکنید. این سوئیچ اندازه کد را کاهش می دهد
و در صورتی که مقصد از قبل تراز شده باشد، عملکرد را بهبود می بخشد، اما GCC اینطور نیست
در مورد آن بدانید.

-minline-all-stringops
به‌طور پیش‌فرض GCC عملیات رشته‌ای را تنها زمانی که مقصد مشخص باشد، درون‌ریزی می‌کند
با حداقل یک مرز 4 بایت تراز شده است. این کار باعث می‌شود که درون خطی بیشتر، افزایش اندازه کد،
اما ممکن است عملکرد کدی را که به memcpy سریع، strlen و memset برای بستگی دارد، بهبود بخشد
طول های کوتاه

-minline-stringops-به صورت پویا
برای عملیات رشته ای با اندازه ناشناخته، از چک های زمان اجرا با کد درون خطی برای کوچک استفاده کنید
بلوک ها و یک کتابخانه برای بلوک های بزرگ فراخوانی می کند.

-mstringop-strategy=جلبک
بازنویسی اکتشافی تصمیم داخلی در مورد الگوریتم خاص به رشته خطی
عملیات با. مقادیر مجاز "rep_byte"، "rep_4byte"، "rep_8byte" برای
گسترش با استفاده از پیشوند i386 "rep" با اندازه مشخص، "byte_loop"، "loop"،
"unrolled_loop" برای گسترش حلقه درون خطی، "libcall" برای کتابخانه همیشه در حال گسترش
زنگ زدن.

-momit-leaf-frame-pointer
نشانگر فریم را در یک رجیستر برای توابع برگ نگه ندارید. این از
دستورالعمل ذخیره، تنظیم و بازیابی نشانگرهای فریم و ایجاد یک ثبت اضافی
در توابع برگ موجود است. گزینه -fomit-frame-pointer قاب را برمی دارد
اشاره گر برای همه توابع، که ممکن است اشکال زدایی را سخت تر کند.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
کنترل می کند که آیا متغیرهای TLS ممکن است با آفست های بخش TLS قابل دسترسی باشند یا خیر
ثبت (%gs برای 32 بیت، %fs برای 64 بیت)، یا اینکه آیا نشانگر پایه رشته باید باشد
اضافه. قانونی بودن یا نبودن این موضوع به سیستم عامل و اینکه آیا آن بستگی دارد
بخش را برای پوشش کل منطقه TLS ترسیم می کند.

برای سیستم هایی که از GNU libc استفاده می کنند، پیش فرض روشن است.

-msse2avx
-mno-sse2avx
مشخص کنید که اسمبلر باید دستورالعمل های SSE را با پیشوند VEX رمزگذاری کند. گزینه
-mavx این را به طور پیش فرض روشن می کند.

-mfentry
-Mno-Fentry
اگر پروفایل فعال است -صفحه فراخوان پیشخوان پروفایل را قبل از پرولوگ قرار دهید. توجه: روشن
معماری های x86 ویژگی "ms_hook_prologue" در حال حاضر برای آنها امکان پذیر نیست
-mfentry و -صفحه.

-m8bit-idiv
-mno-8bit-idiv
در برخی از پردازنده‌ها، مانند Intel Atom، تقسیم اعداد صحیح بدون علامت 8 بیتی بسیار سریع‌تر از
تقسیم اعداد صحیح 32 بیتی/64 بیتی. این گزینه یک بررسی زمان اجرا ایجاد می کند. اگر هر دو
تقسیم کننده و تقسیم کننده در محدوده 0 تا 255 هستند، تقسیم عدد صحیح بدون علامت 8 بیتی است
به جای تقسیم اعداد صحیح 32 بیتی/64 بیتی استفاده می شود.

-mavx256-split-unaligned-load
-mavx256-split-unaligned-store
بار 32 بایتی AVX بدون تراز را تقسیم کرده و ذخیره کنید.

اینها -m سوئیچ ها علاوه بر موارد فوق در پردازنده های AMD x86-64 پشتیبانی می شوند
محیط های 64 بیتی

-32
-64
-mx32
کد برای یک محیط 32 بیتی یا 64 بیتی تولید کنید. در -32 گزینه int، long و
اشاره گر به 32 بیت است و کدی تولید می کند که روی هر سیستم i386 اجرا می شود. در -64 انتخاب
int را روی 32 بیت و طولانی و اشاره گر را روی 64 بیت تنظیم می کند و کد برای AMD تولید می کند.
معماری x86-64. در -mx32 گزینه int، long و pointer را روی 32 بیت و
کد برای معماری x86-64 AMD تولید می کند. فقط برای داروین -64 گزینه تبدیل می شود
خاموش -fno-pic و -mdynamic-no-pic گزینه.

-mno-red-zone
برای کد x86-64 از به اصطلاح منطقه قرمز استفاده نکنید. منطقه قرمز توسط
x86-64 ABI، یک ناحیه 128 بایتی فراتر از محل نشانگر پشته است که
توسط کنترل کننده های سیگنال یا وقفه اصلاح نمی شود و بنابراین می توان برای آن استفاده کرد
داده های موقت بدون تنظیم نشانگر پشته. پرچم -mno-red-zone غیرفعال می کند
این منطقه قرمز

-mcmodel=small
ایجاد کد برای مدل کد کوچک: برنامه و نمادهای آن باید به آن پیوند داده شوند
2 گیگابایت پایین فضای آدرس. اشاره گرها 64 بیت هستند. برنامه ها می توانند باشند
به صورت ایستا یا پویا پیوند خورده است. این مدل کد پیش فرض است.

-mcmodel=kernel
برای مدل کد هسته کد تولید کنید. هسته در منفی 2 گیگابایت اجرا می شود
فضای آدرس این مدل باید برای کد هسته لینوکس استفاده شود.

-mcmodel=متوسط
ایجاد کد برای مدل متوسط: برنامه در 2 گیگابایت پایین پیوند داده شده است
فضای آدرس نمادهای کوچک نیز در آنجا قرار داده شده است. نمادهایی با اندازه های بزرگتر از
آستانه داده های بزرگ در بخش های بزرگ داده یا bss قرار می گیرند و می توانند مکان یابی شوند
بالای 2 گیگابایت برنامه ها را می توان به صورت ایستا یا پویا پیوند داد.

-mcmodel=بزرگ
ایجاد کد برای مدل بزرگ: این مدل هیچ فرضی در مورد آدرس ها و
اندازه بخش ها

-maddress-mode=طولانی
کد برای حالت آدرس طولانی تولید کنید. این فقط برای 64 بیت و x32 پشتیبانی می شود
محیط ها این حالت آدرس پیش فرض برای محیط های 64 بیتی است.

-maddress-mode=کوتاه
کد برای حالت آدرس کوتاه تولید کنید. این فقط برای 32 بیت و x32 پشتیبانی می شود
محیط ها این حالت آدرس پیش فرض برای محیط های 32 بیتی و x32 است.

i386 و x86-64 ویندوز گزینه

این گزینه های اضافی برای اهداف ویندوز در دسترس هستند:

-mconsole
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که یک کنسول
برنامه باید با دستور دادن به پیوند دهنده برای تنظیم هدر PE ایجاد شود
نوع زیرسیستم مورد نیاز برای برنامه های کنسول این رفتار پیش فرض برای است
اهداف Cygwin و MinGW.

-mdll
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که یک DLL - a
کتابخانه پیوند پویا - ایجاد می شود و امکان انتخاب موارد مورد نیاز را فراهم می کند
شی راه اندازی زمان اجرا و نقطه ورودی.

-mnop-fun-dllimport
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که
ویژگی dllimport باید نادیده گرفته شود.

-mthread
این گزینه برای اهداف MinGW موجود است. آن رشته مخصوص MinGW را مشخص می کند
پشتیبانی استفاده شود

-مونیکد
این گزینه برای اهداف mingw-w64 موجود است. مشخص می کند که ماکرو UNICODE
از پیش تعریف شده است و کد راه اندازی زمان اجرا با قابلیت یونیکد انتخاب شده است.

-mwin32
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که معمولی
ماکروهای از پیش تعریف شده ویندوز باید در پیش پردازنده تنظیم شوند، اما تأثیری ندارند
انتخاب کتابخانه زمان اجرا/کد راه اندازی.

-mwindows
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که یک رابط کاربری گرافیکی
برنامه باید با دستور دادن به پیوند دهنده برای تنظیم هدر PE ایجاد شود
نوع زیرسیستم مناسب

-fno-set-stack-executable
این گزینه برای اهداف MinGW موجود است. مشخص می کند که پرچم اجرایی برای
پشته استفاده شده توسط توابع تو در تو تنظیم نشده است. این برای اجرای باینری ها ضروری است
حالت هسته ویندوز، به عنوان user32 API، که برای تنظیم قابل اجرا استفاده می شود
امتیازات، در دسترس نیست.

-mpe-aligned-commons
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که گنو
پسوند فرمت فایل PE که امکان تراز صحیح متغیرهای COMMON را فراهم می کند
باید هنگام تولید کد استفاده شود. اگر GCC تشخیص دهد به طور پیش فرض فعال می شود
که اسمبلر هدف پیدا شده در طول پیکربندی از این ویژگی پشتیبانی می کند.

همچنین به زیر مراجعه کنید i386 و x86-64 گزینه برای گزینه های استاندارد

IA-64 گزینه

اینها هستند -m گزینه های تعریف شده برای معماری Intel IA-64.

-mbig-endian
کد برای یک هدف بزرگ endian ایجاد کنید. این پیش فرض برای HP-UX است.

-mlittle-endian
کدی را برای یک هدف کوچک endian ایجاد کنید. این پیش فرض برای AIX5 و GNU/Linux است.

-mgnu-as-as
-mno-gnu-as
برای اسمبلر گنو کد تولید کنید (یا نکنید). این پیش فرض است.

-mgnu-ld
-mno-gnu-ld
برای پیوند دهنده گنو کد تولید کنید (یا نکنید). این پیش فرض است.

-mno-pic
کدی را ایجاد کنید که از یک ثبت اشاره گر جهانی استفاده نمی کند. نتیجه موقعیت نیست
کد مستقل، و IA-64 ABI را نقض می کند.

-mvolatile-asm-stop
-mno-volatile-asm-stop
بلافاصله قبل و بعد از عبارات فرار asm کمی توقف ایجاد کنید (یا نکنید).

-mregister-names
-mno-register-names
ایجاد کنید (یا نکنید) in, LOCو خارج ثبت نام برای ثبت های پشته ای. این
ممکن است خروجی اسمبلر را خواناتر کند.

-mno-sdata
-msdata
بهینه‌سازی‌هایی را که از بخش داده‌های کوچک استفاده می‌کنند غیرفعال کنید (یا فعال کنید). این ممکن است مفید باشد
برای رفع اشکالات بهینه ساز.

-mconstant-gp
کدی را ایجاد کنید که از یک مقدار نشانگر جهانی واحد استفاده می کند. این زمانی مفید است که
کامپایل کردن کد هسته

-عکس خودکار
کدی را ایجاد کنید که قابلیت جابجایی خود را داشته باشد. این دلالت می کنه که -mconstant-gp. این مفید است
هنگام کامپایل کد سیستم عامل

-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
کدهای درون خطی برای sqrt تولید نکنید.

-mfused-madd
-mno-fused-madd
کدی تولید نکنید که از ضرب/افزودن یا ضرب/ تفریق استفاده می کند
دستورالعمل ها. پیش فرض این است که از این دستورالعمل ها استفاده کنید.

-mno-dwarf2-amp
-mdwarf2-asm
کد اسمبلر برای اطلاعات اشکال زدایی شماره خط DWARF2 تولید نکنید (یا انجام ندهید). این
ممکن است در هنگام عدم استفاده از اسمبلر گنو مفید باشد.

-stop-bits
-Mno-Early-Stop-Bits
اجازه دهید بیت های توقف زودتر از بلافاصله قبل از دستور قرار داده شوند
بیت توقف را فعال کرد. این می تواند زمان بندی آموزش را بهبود بخشد، اما همیشه اینطور نیست
همینطور

-Mfixed-Range =محدوده ثبت نام
کدی را ایجاد کنید که محدوده رجیستر داده شده را به عنوان ثبات ثابت در نظر می گیرد. ثبت ثابت
یکی از مواردی است که تخصیص دهنده ثبات نمی تواند از آن استفاده کند. این در هنگام کامپایل کرنل مفید است
کد محدوده رجیستر به صورت دو رجیستر که با یک خط تیره از هم جدا شده اند، مشخص می شود. چندگانه
محدوده های ثبت را می توان با کاما از هم جدا کرد.

-mtls-size=اندازه tls
اندازه بیت افست های فوری TLS را مشخص کنید. مقادیر معتبر 14، 22 و 64 هستند.

-mtune=نوع cpu
زمان‌بندی دستورالعمل‌ها را برای یک CPU خاص تنظیم کنید، مقادیر معتبر ایتانیوم هستند،
itanium1، merced، itanium2 و mckinley.

-milp32
-mlp64
کد برای یک محیط 32 بیتی یا 64 بیتی تولید کنید. محیط 32 بیتی int را تنظیم می کند،
طولانی و اشاره گر به 32 بیت. محیط 64 بیتی به 32 بیت و طولانی و
اشاره گر به 64 بیت اینها پرچم های خاص HP-UX هستند.

-mno-sched-br-data-spec
-msched-br-data-spec
(غیرفعال/فعال) زمان‌بندی گمانه‌زنی داده‌ها قبل از بارگیری مجدد. این منجر خواهد شد
تولید دستورالعمل های ld.a و دستورالعمل های بررسی مربوطه (ld.c /
chk.a). پیش فرض "غیرفعال" است.

-msched-ar-da-spec
-mno-sched-ar-da-spec
(En/غیرفعال کردن) زمان‌بندی گمانه‌زنی داده‌ها پس از بارگیری مجدد. این منجر به تولید نسل خواهد شد
از دستورالعمل های ld.a و دستورالعمل های چک مربوطه (ld.c / chk.a). در
پیش فرض "فعال" است.

-mno-sched-control-spec
-msched-control-spec
(غیرفعال/فعال کردن) برنامه ریزی سوداگرانه را کنترل کنید. این ویژگی فقط در طول
برنامه ریزی منطقه (یعنی قبل از بارگذاری مجدد). این منجر به تولید ld.s خواهد شد
دستورالعمل ها و دستورالعمل های چک مربوطه chk.s . پیش فرض است
'غیرفعال کردن'.

-msched-br-in-data-spec
-mno-sched-br-in-data-spec
(En/Dis)قابل برنامه ریزی گمانه زنی دستورالعمل هایی که به داده ها وابسته هستند
بارهای احتمالی قبل از بارگیری مجدد این تنها با موثر است -msched-br-data-spec
فعال شد. پیش فرض "فعال" است.

-msched-ar-in-da-spec
-mno-sched-ar-in-da-spec
(En/Dis)قابل برنامه ریزی گمانه زنی دستورالعمل هایی که به داده ها وابسته هستند
بارهای احتمالی پس از بارگذاری مجدد این تنها با موثر است -msched-ar-da-spec
فعال شد. پیش فرض "فعال" است.

-msched-in-control-spec
-mno-sched-in-control-spec
(En/Dis)قابل برنامه ریزی گمانه زنی دستورالعمل هایی که وابسته به
کنترل بارهای سوداگرانه این تنها با موثر است -msched-control-spec فعال شده است
پیش فرض "فعال" است.

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
اگر فعال باشد، دستورالعمل‌های گمانه‌زنی داده‌ها فقط در صورتی برای زمان‌بندی انتخاب می‌شوند
در حال حاضر هیچ انتخاب دیگری وجود ندارد. این باعث استفاده از حدس و گمان داده می شود
بسیار محافظه کار تر پیش فرض "غیرفعال" است.

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
در صورت فعال بودن، دستورالعمل‌های گمانه‌زنی کنترل تنها در صورتی برای زمان‌بندی انتخاب می‌شوند
در حال حاضر هیچ انتخاب دیگری وجود ندارد. این باعث استفاده از حدس و گمان کنترل می شود
بسیار محافظه کار تر پیش فرض "غیرفعال" است.

-mno-sched-count-spec-spec-in-critical-path
-msched-count-spec-in-critical-path
در صورت فعال بودن، وابستگی های احتمالی در حین محاسبه در نظر گرفته می شود
اولویت های دستورالعمل این کار استفاده از حدس و گمان را کمی بیشتر می کند
محافظه کار. پیش فرض "غیرفعال" است.

-msched-spec-ldc
از یک بررسی حدس و گمان داده ساده استفاده کنید. این گزینه به صورت پیش فرض روشن است.

-msched-control-spec-ldc
برای کنترل حدس و گمان از یک چک ساده استفاده کنید. این گزینه به صورت پیش فرض روشن است.

-msched-stop-bits-after- every-cycle
پس از هر چرخه هنگام برنامه ریزی، یک بیت توقف قرار دهید. این گزینه به صورت پیش فرض روشن است.

-msched-fp-mem-deps-zero-cost
فرض کنید که انبارها و بارهای ممیز شناور به احتمال زیاد باعث ایجاد تضاد نمی شوند
در همان گروه دستورالعمل قرار داده شده است. این گزینه به طور پیش فرض غیر فعال است.

-msel-sched-dont-check-control-spec
ایجاد چک برای کنترل حدس و گمان در برنامه ریزی انتخابی. این پرچم است
به طور پیش فرض غیرفعال است.

-msched-max-memory-insns=max-insns
محدود کردن تعداد insns حافظه در هر گروه دستورالعمل، دادن اولویت کمتر به
حافظه های بعدی تلاش می کنند تا در همان گروه دستورالعمل برنامه ریزی کنند.
اغلب برای جلوگیری از درگیری های بانک حافظه پنهان مفید است. مقدار پیش فرض 1 است.

-msched-max-memory-insns-hard-limit
بیش از «msched-max-memory-insns» در گروه دستورالعمل مجاز نیست. در غیر این صورت محدود کنید
"نرم" است به این معنی که در صورت رسیدن به حد مجاز، عملیات غیرحافظه را ترجیح می دهیم
ممکن است همچنان عملیات حافظه را برنامه ریزی کند.

IA-64/VMS گزینه

اینها -m گزینه ها برای پیاده سازی IA-64/VMS تعریف شده اند:

-mvms-return-codes
کدهای شرایط VMS را از main برگردانید. پیش‌فرض برگرداندن شرط سبک POSIX است
کدهای (مثلاً خطا).

-mdebug-main=پیشوند
اولین روتینی را که نامش با آن شروع می شود علامت گذاری کنید پیشوند به عنوان روال اصلی برای
اشکال زدا.

-mmalloc64
روال های تخصیص حافظه 64 بیتی پیش فرض.

LM32 گزینه

اینها -m گزینه هایی برای معماری Lattice Mico32 تعریف شده اند:

-barrel-shift-enabled
دستورالعمل های تغییر لوله را فعال کنید.

-mdivide-enabled
دستورالعمل های تقسیم و مدول را فعال کنید.

-Multiply-enabled
دستورالعمل های ضرب را فعال کنید.

-msign-extend-enabled
دستورالعمل های گسترش علامت را فعال کنید.

-muser-enabled
دستورالعمل های تعریف شده توسط کاربر را فعال کنید.

M32C گزینه

-mcpu=نام
CPU که کد برای آن تولید می شود را انتخاب کنید. نام ممکن است یکی از R8C برای R8C/Tiny
سلسله، m16c برای سری M16C (تا /60)، متر 32 سانتی متر برای سری M16C/80، یا m32c
برای سری M32C/80.

-msim
مشخص می کند که برنامه روی شبیه ساز اجرا شود. این باعث جایگزینی می شود
کتابخانه زمان اجرا پیوند داده می شود که در آن، به عنوان مثال، فایل ورودی/خروجی را پشتیبانی می کند. شما نباید
هنگام تولید برنامه هایی که روی سخت افزار واقعی اجرا می شوند از این گزینه استفاده کنید. شما باید
کتابخانه زمان اجرا خود را برای هر عملکرد ورودی/خروجی مورد نیاز فراهم کنید.

-memregs=عدد
تعداد شبه ثبت‌کننده‌های مبتنی بر حافظه را که GCC در طول کد استفاده می‌کند، مشخص می‌کند
نسل. این شبه‌رجیسترها مانند رجیسترهای واقعی استفاده خواهند شد، بنابراین یک وجود دارد
معاوضه بین توانایی GCC برای جا دادن کد در رجیسترهای موجود و
جریمه عملکرد استفاده از حافظه به جای ثبات. توجه داشته باشید که تمام ماژول ها در a
برنامه باید با همان مقدار برای این گزینه کامپایل شود. به خاطر آن، تو
نباید از این گزینه با ساخت‌های gcc کتابخانه‌های زمان اجرا پیش‌فرض استفاده کرد.

M32R/D گزینه

اینها -m گزینه ها برای معماری های Renesas M32R/D تعریف شده اند:

-m32r2
کد M32R/2 را ایجاد کنید.

-m32rx
کد M32R/X را ایجاد کنید.

-m32r
کد M32R را ایجاد کنید. این پیش فرض است.

-mmodel=small
فرض کنید همه اشیا در 16 مگابایت کمتر حافظه زندگی می کنند (به طوری که آدرس آنها می تواند باشد
با دستورالعمل "ld24" بارگذاری شده است)، و فرض کنید همه زیر روال ها با
دستورالعمل "bl". این پیش فرض است.

آدرس پذیری یک شی خاص را می توان با ویژگی "model" تنظیم کرد.

-mmodel=متوسط
فرض کنید اشیا ممکن است در هر جایی از فضای آدرس 32 بیتی باشند (کامپایلر تولید خواهد کرد
دستورالعمل‌های "seth/add3" برای بارگذاری آدرس‌های آن‌ها)، و فرض کنید همه زیرروال‌ها هستند
با دستورالعمل "bl" قابل دسترسی است.

-mmodel=بزرگ
فرض کنید اشیا ممکن است در هر جایی از فضای آدرس 32 بیتی باشند (کامپایلر تولید خواهد کرد
دستورالعمل‌های "seth/add3" برای بارگیری آدرس‌هایشان)، و فرض کنید که برنامه‌های فرعی ممکن است نباشند
قابل دسترسی با دستور "bl" (کامپایلر سرعت بسیار کندتری را تولید می کند
توالی دستورالعمل "seth/add3/jl").

-msdata=هیچ
استفاده از ناحیه داده کوچک را غیرفعال کنید. متغیرها در یکی از قرار خواهند گرفت .داده ها, bsss، یا
rodata (مگر اینکه ویژگی «بخش» مشخص شده باشد). این پیش فرض است.

ناحیه داده های کوچک از بخش هایی تشکیل شده است .sdata و .sbss. اشیاء ممکن است به صراحت باشد
با استفاده از یکی از این بخش ها، در ناحیه داده کوچک با ویژگی "section" قرار دهید.

-msdata=sdata
داده های کوچک جهانی و ثابت را در ناحیه داده های کوچک قرار دهید، اما خاص تولید نکنید
کد برای ارجاع به آنها

-msdata=استفاده
داده های کوچک جهانی و ثابت را در ناحیه داده های کوچک قرار دهید و خاص تولید کنید
دستورالعمل برای ارجاع به آنها

-G تعداد
اشیاء سراسری و ثابت را کمتر یا مساوی قرار دهید تعداد بایت به داده های کوچک یا
بخش های bss به جای داده های معمولی یا بخش های bss. مقدار پیش فرض از تعداد is
8. -msdata گزینه باید روی یکی از تنظیم شود sdata or استفاده کنید برای این گزینه برای داشتن هر
اثر.

همه ماژول ها باید با همان کامپایل شوند -G تعداد ارزش. تدوین با متفاوت
ارزش های تعداد ممکن است کار کند یا نباشد؛ اگر این کار را نکرد لینکر خطا می دهد
پیام --- کد نادرست ایجاد نخواهد شد.

-mdebug
باعث می شود کد خاص M32R در کامپایلر آماری را نشان دهد که ممکن است کمک کند
در برنامه های اشکال زدایی

-حلقه های بدخیم
همه حلقه ها را در یک مرز 32 بایت تراز کنید.

-mno-align-loops
تراز 32 بایتی را برای حلقه ها اعمال نکنید. این پیش فرض است.

-missue-rate=عدد
موضوع عدد دستورالعمل در هر چرخه عدد فقط می تواند 1 یا 2 باشد.

-branch-cost=عدد
عدد فقط می تواند 1 یا 2 باشد. اگر 1 باشد، شاخه ها بر آن ترجیح داده می شوند
کد شرطی، اگر 2 باشد، برعکس اعمال می شود.

-mflush-trap=عدد
شماره تله را مشخص می کند تا از آن برای شستشوی کش استفاده شود. پیش فرض 12 است. معتبر است
اعداد بین 0 تا 15 را شامل می شود.

-mno-flush-trap
مشخص می کند که کش را نمی توان با استفاده از یک تله پاک کرد.

-mflush-func=نام
نام تابع سیستم عاملی را که باید برای شستشوی حافظه پنهان فراخوانی شود، مشخص می کند. در
پیش فرض است _flush_cache، اما فراخوانی تابع فقط در صورتی استفاده می شود که تله نباشد
در دسترس نیست.

-mno-flush-func
نشان می دهد که هیچ عملکرد سیستم عامل برای شستشوی حافظه پنهان وجود ندارد.

M680x0 گزینه

اینها هستند -m گزینه های تعریف شده برای پردازنده های M680x0 و ColdFire. تنظیمات پیش فرض
بستگی به معماری انتخاب شده در هنگام پیکربندی کامپایلر دارد. پیش فرض ها
برای رایج ترین انتخاب ها در زیر آورده شده است.

-مارس=قوس
کدی را برای معماری مجموعه دستورات M680x0 یا ColdFire خاص ایجاد کنید.
مقادیر مجاز از قوس برای معماری های M680x0 عبارتند از: 68000, 68010, 68020, 68030,
68040, 68060 و CPU32. معماری ColdFire بر اساس Freescale انتخاب می شود
طبقه بندی ISA و مقادیر مجاز عبارتند از: ایسا, ایزاپلوس, ایزاب و ایساک.

gcc یک ماکرو را تعریف می کند __mcfقوس__ هر زمان که برای یک هدف ColdFire کد تولید می کند.
La قوس در این ماکرو یکی از -مارس استدلال های ارائه شده در بالا

هنگام استفاده با هم، -مارس و -mtune کدی را انتخاب کنید که روی یک خانواده مشابه اجرا شود
پردازنده ها اما برای یک ریزمعماری خاص بهینه شده است.

-mcpu=پردازنده
کد برای یک پردازنده خاص M680x0 یا ColdFire ایجاد کنید. M680x0 پردازندهs هستند:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 و CPU32. ColdFire پردازندهs
در جدول زیر آورده شده است که CPU ها را نیز به خانواده ها طبقه بندی می کند:

خانواده : -mcpu استدلال
51 : 51 51ac 51cn 51 ساعت 51q
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485

-mcpu=پردازنده نادیده گرفتن -مارس=قوس if قوس سازگار با پردازنده. ترکیبات دیگر از
-mcpu و -مارس رد می شوند

gcc ماکرو را تعریف می کند __mcf_cpu_پردازنده هنگامی که ColdFire هدف قرار می گیرد پردازنده انتخاب شده است. آن را نیز
تعریف می کند __mcf_family_خانواده، جایی که ارزش خانواده در جدول بالا آورده شده است.

-mtune=اهنگ
کد را برای یک ریزمعماری خاص، در محدوده محدودیت های تعیین شده تنظیم کنید -مارس
و -mcpu. ریزمعماری های M680x0 عبارتند از: 68000, 68010, 68020, 68030, 68040,
68060 و CPU32. ریزمعماری ColdFire عبارتند از: cfv1, cfv2, cfv3, cfv4 و
cfv4e.

VOUS استفاده pouvez aussi -mtune=68020-40 برای کدهایی که باید روی 68020 به خوبی اجرا شوند،
اهداف 68030 و 68040. -mtune=68020-60 مشابه است اما شامل 68060 هدف است
خوب. این دو گزینه همان تصمیمات تنظیم را انتخاب می کنند -m68020-40 و -m68020-60
بود.

gcc ماکروها را تعریف می کند __mcقوس و __mcقوس__ هنگام تنظیم برای معماری 680x0
قوس. همچنین تعریف می کند mcقوس مگر اینکه یکی -ansi یا غیر گنو -std گزینه استفاده می شود.
اگر gcc در حال تنظیم برای طیف وسیعی از معماری‌ها است، همانطور که توسط -mtune=68020-40 or
-mtune=68020-60، ماکروها را برای هر معماری در محدوده تعریف می کند.

gcc همچنین ماکرو را تعریف می کند __مارش__ هنگام تنظیم ریزمعماری ColdFire
ارش، که در آن ارش یکی از استدلال های ارائه شده در بالا است.

-68000
-mc68000
تولید خروجی برای 68000. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68000 معادل است با -مارس=68000.

از این گزینه برای میکروکنترلرهای با هسته 68000 یا EC000 از جمله 68008 استفاده کنید.
68302، 68306، 68307، 68322، 68328 و 68356.

-68010
تولید خروجی برای 68010. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68010 معادل است با -مارس=68010.

-68020
-mc68020
تولید خروجی برای 68020. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68020 معادل است با -مارس=68020.

-68030
تولید خروجی برای 68030. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68030 معادل است با -مارس=68030.

-68040
تولید خروجی برای 68040. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68040 معادل است با -مارس=68040.

این گزینه استفاده از دستورالعمل های 68881/68882 را که باید توسط
نرم افزار روی 68040. اگر 68040 شما کدی برای شبیه سازی ندارد از این گزینه استفاده کنید
آن دستورالعمل ها

-68060
تولید خروجی برای 68060. این پیش فرض زمانی است که کامپایلر برای پیکربندی
سیستم های مبتنی بر 68060 معادل است با -مارس=68060.

این گزینه استفاده از دستورالعمل های 68020 و 68881/68882 را که باید
شبیه سازی شده توسط نرم افزار در 68060. اگر 68060 شما کد ندارد از این گزینه استفاده کنید
برای تقلید از آن دستورالعمل ها

-mcpu32
تولید خروجی برای CPU32. زمانی که کامپایلر برای آن پیکربندی شده است، این پیش فرض است
سیستم های مبتنی بر CPU32 معادل است با -مارس=cpu32.

از این گزینه برای میکروکنترلرهایی با هسته CPU32 یا CPU32+ از جمله 68330 استفاده کنید.
68331، 68332، 68333، 68334، 68336، 68340، 68341، 68349 و 68360.

-5200
خروجی برای یک CPU ColdFire 520X ایجاد کنید. زمانی که کامپایلر باشد این پیش فرض است
برای سیستم های مبتنی بر 520X پیکربندی شده است. معادل است با -MCPU = 5206، و اکنون است
به نفع آن گزینه منسوخ شد.

از این گزینه برای میکروکنترلر با هسته 5200 استفاده کنید، از جمله MCF5202، MCF5203،
MCF5204 و MCF5206.

-m5206e
خروجی برای CPU ColdFire 5206e ایجاد کنید. اکنون گزینه به نفع منسوخ شده است
معادل -mcpu=5206e.

-m528x
خروجی برای یکی از اعضای خانواده ColdFire 528X ایجاد کنید. گزینه در حال حاضر است
به نفع معادل منسوخ شد -mcpu = 528x.

-5307
خروجی برای CPU ColdFire 5307 تولید کنید. این گزینه اکنون به نفع این منسوخ شده است
معادل -MCPU = 5307.

-5407
خروجی برای CPU ColdFire 5407 تولید کنید. این گزینه اکنون به نفع این منسوخ شده است
معادل -MCPU = 5407.

-mcfv4e
خروجی برای یک CPU خانواده ColdFire V4e (به عنوان مثال 547x/548x) تولید کنید. این شامل استفاده از
دستورالعمل های ممیز شناور سخت افزاری گزینه معادل است -mcpu = 547x، و است
اکنون به نفع آن گزینه منسوخ شده است.

-m68020-40
خروجی 68040 را بدون استفاده از هیچ یک از دستورالعمل های جدید تولید کنید. این نتیجه می شود
در کدی که می تواند به طور نسبتاً کارآمدی روی 68020/68881 یا 68030 یا
68040. کد تولید شده از دستورالعمل های 68881 استفاده می کند که در
68040.

گزینه معادل است -مارس=68020 -mtune=68020-40.

-m68020-60
خروجی 68060 را بدون استفاده از هیچ یک از دستورالعمل های جدید تولید کنید. این نتیجه می شود
در کدی که می تواند به طور نسبتاً کارآمدی روی 68020/68881 یا 68030 یا
68040. کد تولید شده از دستورالعمل های 68881 استفاده می کند که در
68060.

گزینه معادل است -مارس=68020 -mtune=68020-60.

-mhard-float
-68881
دستورالعمل های ممیز شناور را ایجاد کنید. این پیش فرض برای 68020 و بالاتر است و
برای دستگاه های ColdFire که دارای FPU هستند. ماکرو را تعریف می کند __HAVE_68881__ در M680x0
اهداف و __mcffpu__ روی اهداف ColdFire

-msoft-float
دستورالعمل های ممیز شناور ایجاد نکنید. به جای آن از تماس های کتابخانه استفاده کنید. این است
پیش فرض برای اهداف 68000، 68010 و 68832. همچنین پیش فرض ColdFire است
دستگاه هایی که FPU ندارند.

-mdiv
-mno-div
دستورالعمل های تقسیم و باقیمانده سخت افزار ColdFire را ایجاد کنید (تولید نکنید). اگر
-مارس بدون استفاده می شود -mcpu، پیش فرض برای معماری های ColdFire "روشن" و "خاموش" است.
برای معماری های M680x0. در غیر این صورت، پیش فرض از CPU هدف گرفته می شود (یا
CPU پیش فرض، یا آن که توسط -mcpu). به عنوان مثال، پیش فرض "خاموش" است
برای -MCPU = 5206 و "روشن" برای -mcpu=5206e.

gcc ماکرو را تعریف می کند __mcfhwdiv__ زمانی که این گزینه فعال است.

-mshort
نوع "int" را با عرض 16 بیت، مانند "int کوتاه" در نظر بگیرید. علاوه بر این، پارامترها
در پشته نیز با مرز 16 بیتی تراز می شوند حتی در اهدافی که API آنها
ارتقاء به 32 بیت را الزامی می کند.

-mno-کوتاه
نوع "int" را 16 بیت عرض در نظر نگیرید. این پیش فرض است.

-mnobitfield
-منو بیتفیلد
از دستورالعمل های فیلد بیت استفاده نکنید. در -68000, -mcpu32 و -5200 گزینه ها دلالت دارند
-mnobitfield.

-mbitfield
از دستورالعمل های فیلد بیتی استفاده کنید. را -68020 گزینه دلالت دارد -mbitfield. این هست
اگر از پیکربندی طراحی شده برای 68020 استفاده می کنید، پیش فرض است.

-mrtd
از یک قرارداد فراخوانی تابع متفاوت استفاده کنید، که در آن توابعی که یک حالت ثابت دارند
تعداد آرگومان‌ها با دستور «rtd» برمی‌گردند، که آرگومان‌های آنها را نمایش می‌دهد
در حین بازگشت این یک دستورالعمل را در تماس گیرنده ذخیره می کند زیرا نیازی به آن نیست
استدلال ها را در آنجا مطرح کنید.

این قرارداد فراخوانی با آنچه که معمولاً در یونیکس استفاده می شود ناسازگار است، بنابراین شما
اگر نیاز به فراخوانی کتابخانه های کامپایل شده با کامپایلر یونیکس دارید، نمی توانید از آن استفاده کنید.

همچنین، شما باید نمونه های اولیه تابع را برای همه توابعی که متغیر می گیرند ارائه دهید
تعداد آرگومان ها (از جمله "printf")؛ در غیر این صورت کد نادرست تولید خواهد شد
برای تماس با آن توابع.

علاوه بر این، اگر تابعی را با تعداد زیاد فراخوانی کنید، کد به طور جدی نادرست است
استدلال ها (به طور معمول، استدلال های اضافی بی ضرر نادیده گرفته می شوند.)

دستورالعمل "rtd" توسط 68010، 68020، 68030، 68040، 68060 و CPU32 پشتیبانی می شود.
پردازنده ها، اما نه با 68000 یا 5200.

-mno-rtd
از قراردادهای تماس انتخاب شده توسط استفاده نکنید -mrtd. این پیش فرض است.

بدخیم
-mno-align-int
کنترل کنید که آیا GCC "int"، "long"، "long long"، "float"، "double" و "long" تراز شود یا خیر
متغیرهای double" روی یک مرز 32 بیتی (بدخیم) یا یک مرز 16 بیتی
(-mno-align-int). تراز کردن متغیرها روی مرزهای 32 بیتی کدی را تولید می کند که اجرا می شود
در پردازنده هایی با گذرگاه های 32 بیتی تا حدودی سریعتر در هزینه حافظه بیشتر.

هشدار: اگر از بدخیم سوئیچ، GCC ساختارهای حاوی
انواع فوق متفاوت از اکثر برنامه های کاربردی منتشر شده رابط باینری است
مشخصات m68k

-mpcrel
از حالت آدرس دهی نسبی pc 68000 مستقیماً به جای استفاده از جهانی استفاده کنید
جدول افست در حال حاضر، این گزینه دلالت دارد -fpic، حداکثر امکان افست 16 بیتی را فراهم می کند
برای آدرس دهی نسبی کامپیوتر -fPIC در حال حاضر با پشتیبانی نمی شود -mpcrel، هر چند
این می تواند برای پردازنده های 68020 و بالاتر پشتیبانی شود.

-mno-strict-align
-mstrict-align
(نباید) تصور کنید که مراجع حافظه غیر تراز توسط سیستم مدیریت می شود.

-msep-data
کدی را ایجاد کنید که به بخش داده اجازه می دهد در ناحیه متفاوتی از حافظه قرار گیرد
از بخش متن این اجازه می دهد تا در محل در یک محیط بدون
مدیریت حافظه مجازی این گزینه دلالت دارد -fPIC.

-mno-sep-data
کدی را ایجاد کنید که فرض می‌کند بخش داده از بخش متن پیروی می‌کند. این هست
پیشفرض.

-کتابخانه مشترک
کدی را ایجاد کنید که از کتابخانه های مشترک از طریق روش شناسه کتابخانه پشتیبانی می کند. این اجازه می دهد
برای اجرای در محل و کتابخانه های مشترک در محیطی بدون حافظه مجازی
مدیریت. این گزینه دلالت دارد -fPIC.

-mno-id-shred-library
کدی را ایجاد کنید که فرض نمی‌کند از کتابخانه‌های مشترک مبتنی بر شناسه استفاده می‌شود. این هست
پیشفرض.

-mshared-library-id=n
شماره شناسایی کتابخانه مشترک مبتنی بر شناسه در حال تدوین را مشخص کرد.
تعیین مقدار 0 کد فشرده تری تولید می کند و تعیین مقادیر دیگر این کار را انجام می دهد
تخصیص آن شماره به کتابخانه فعلی را مجبور کنید اما فضای بیشتری وجود ندارد یا
زمان کارآمد از حذف این گزینه است.

-mxgot
-mno-xgot
هنگام تولید کد مستقل از موقعیت برای ColdFire، کدی تولید کنید که اگر کار کند
GOT بیش از 8192 ورودی دارد. این کد بزرگتر و کندتر از کد است
بدون این گزینه تولید می شود. در پردازنده های M680x0، این گزینه مورد نیاز نیست. -fPIC
کافی است

GCC معمولاً از یک دستورالعمل برای بارگذاری مقادیر از GOT استفاده می کند. در حالی که این است
نسبتا کارآمد، فقط در صورتی کار می کند که GOT کوچکتر از حدود 64k باشد. هر چیزی
بزرگتر باعث می شود که پیوند دهنده خطایی مانند:

جابجایی کوتاه شده به تناسب: R_68K_GOT16O فووبار

اگر این اتفاق افتاد، باید کد خود را دوباره با آن کامپایل کنید -mxgot. سپس باید با آن کار کند
GOT های بسیار بزرگ با این حال، کد تولید شده با -mxgot کارایی کمتری دارد، زیرا
برای واکشی ارزش یک نماد جهانی 4 دستورالعمل لازم است.

توجه داشته باشید که برخی از پیوند دهنده ها، از جمله نسخه های جدیدتر پیوند دهنده گنو، می توانند ایجاد کنند
چندین GOT و مرتب سازی ورودی های GOT. اگر چنین پیوند دهنده ای دارید، فقط باید نیاز داشته باشید
به استفاده از -mxgot هنگام کامپایل یک فایل شی منفرد که به بیش از 8192 GOT دسترسی دارد
ورودی های. تعداد بسیار کمی انجام می دهند.

این گزینه ها تاثیری ندارند مگر اینکه GCC کد مستقل از موقعیت تولید کند.

MCore گزینه

اینها هستند -m گزینه های تعریف شده برای پردازنده های Motorola M*Core.

-mhardlit
-mno-hardlit
اگر بتوان آن را در دو دستورالعمل یا کمتر انجام داد، ثابت های درونی در جریان کد.

-mdiv
-mno-div
از دستورالعمل تقسیم استفاده کنید. (به طور پیش فرض فعال است).

-mrelax- فوری
-mno-relax-فوری
اجازه دادن فوریت های با اندازه دلخواه در عملیات بیت.

-mwide-bitfields
-mno-wide-bitfields
همیشه فیلدهای بیتی را با اندازه بین‌المللی در نظر بگیرید.

-m4byte-توابع
-mno-4byte-functions
همه توابع را مجبور کنید تا در یک مرز 4 بایتی تراز شوند.

-mcalgraph-data
-mno-calgraph-data
انتشار اطلاعات کالنگراف

-mslow-bytes
-mno-slow-bytes
هنگام خواندن مقادیر بایت، دسترسی به کلمه را ترجیح دهید.

-mlittle-endian
-mbig-endian
کدی را برای یک هدف کوچک endian ایجاد کنید.

-210
-340
کد برای پردازنده 210 تولید کنید.

-mno-lsim
فرض کنید پشتیبانی از زمان اجرا ارائه شده است و بنابراین کتابخانه شبیه ساز را حذف کنید
(libsim.a) از خط فرمان لینکر.

-mstack-increment=اندازه
حداکثر مقدار را برای یک عملیات افزایشی تک پشته تنظیم کنید. مقادیر بزرگ می تواند
افزایش سرعت برنامه هایی که حاوی توابعی هستند که به مقدار زیادی نیاز دارند
فضای پشته، اما اگر پشته گسترش یابد، می توانند یک خطای تقسیم بندی را ایجاد کنند
خیلی زیاد. مقدار پیش فرض 0x1000 است.

MeP گزینه

-mabsdiff
دستور "abs" را فعال می کند، که تفاوت مطلق بین دو ثبات است.

-مرکز خرید
تمام دستورالعمل های اختیاری را فعال می کند - عملیات متوسط، ضرب، تقسیم، بیت،
صفر اول، تفاوت مطلق، حداقل/حداکثر، کلیپ و اشباع.

-متوسط
دستور "ave" را فعال می کند که میانگین دو رجیستر را محاسبه می کند.

-mbased =n
متغیرهای اندازه n بایت یا کوچکتر در بخش ".based" توسط قرار می گیرد
پیش فرض متغیرهای مبتنی بر ثبات $tp به عنوان ثبات پایه استفاده می کنند و یک وجود دارد
محدودیت 128 بایتی برای بخش ".based".

-mbitops
دستورالعمل های عملیات بیت را فعال می کند - تست بیت ("btstm")، تنظیم ("bsetm")، پاک کردن
("bclrm")، معکوس ("bnotm")، و تست و تنظیم ("tas").

-mc=نام
انتخاب می کند که داده های ثابت در کدام بخش قرار گیرند. نام ممکن است "کوچک"، "نزدیک" یا
"دور".

-mclip
دستور "کلیپ" را فعال می کند. توجه داشته باشید که "-mclip" مفید نیست مگر اینکه شما نیز
"-mminmax" را ارائه کنید.

-mconfig=نام
یکی از پیکربندی های هسته داخلی را انتخاب می کند. هر چیپ MeP یک یا چند تراشه دارد
ماژول های موجود در آن؛ هر ماژول دارای یک CPU هسته و انواع پردازنده های کمکی، اختیاری است
دستورالعمل ها و تجهیزات جانبی ابزار "MeP-Integrator" که بخشی از GCC نیست، فراهم می کند
این تنظیمات از طریق این گزینه; استفاده از این گزینه مانند استفاده از همه است
گزینه های خط فرمان مربوطه پیکربندی پیش فرض "پیش فرض" است.

-mcop
دستورات پردازنده کمکی را فعال می کند. به طور پیش فرض، این یک پردازنده مشترک 32 بیتی است. توجه داشته باشید
که معمولاً پردازنده مشترک از طریق گزینه "-mconfig=" فعال می شود.

-mcop32
دستورالعمل های پردازنده مشترک 32 بیتی را فعال می کند.

-mcop64
دستورالعمل های پردازنده مشترک 64 بیتی را فعال می کند.

-mivc2
برنامه ریزی IVC2 را فعال می کند. IVC2 یک پردازنده مشترک 64 بیتی VLIW است.

-mdc
باعث می شود که متغیرهای ثابت در بخش ".near" قرار گیرند.

-mdiv
دستورالعمل های "div" و "divu" را فعال می کند.

-meb
کد big-endian را تولید کنید.

-مل
کد کمی اندین تولید کنید.

میکرو فرار
به کامپایلر می گوید که هر متغیری که با ویژگی "io" مشخص شده باشد، باید باشد
فرار محسوب می شود.

میلی لیتر باعث می شود که متغیرها به طور پیش فرض به بخش ".far" اختصاص داده شوند.

-mleadz
دستور "leadz" (صفر اول) را فعال می کند.

-می باعث می شود که متغیرها به طور پیش فرض به بخش ".near" اختصاص داده شوند.

-mminmax
دستورالعمل های "min" و "max" را فعال می کند.

-ملت
دستورات ضرب و انباشتگی را فعال می کند.

-mno-opts
تمام دستورالعمل های اختیاری فعال شده توسط "-mall-opts" را غیرفعال می کند.

-تکرار مجدد
دستورالعمل‌های «تکرار» و «تکرار» را فعال می‌کند، که برای حلقه‌های سربار پایین استفاده می‌شود.

-اماس باعث می شود همه متغیرها به طور پیش فرض در بخش ".tiny" قرار گیرند. توجه داشته باشید که یک وجود دارد
محدودیت 65536 بایت برای این بخش. دسترسی به این متغیرها از پایه %gp استفاده می کند
ثبت نام.

-مساتور
دستورالعمل های اشباع را فعال می کند. توجه داشته باشید که کامپایلر در حال حاضر این کار را نمی کند
خود اینها را تولید کند، اما این گزینه برای سازگاری با ابزارهای دیگر گنجانده شده است.
مثل".

-msdram
زمان اجرا مبتنی بر SDRAM را به جای زمان اجرای پیش فرض مبتنی بر رام پیوند دهید.

-msim
کتابخانه های زمان اجرا شبیه ساز را پیوند دهید.

-msimnovec
پیوند کتابخانه های زمان اجرا شبیه ساز، به استثنای پشتیبانی داخلی برای بازنشانی و
بردارها و جداول استثنا

-mtf
باعث می شود همه توابع به طور پیش فرض در بخش ".far" قرار گیرند. بدون این گزینه، توابع
به طور پیش فرض در بخش ".near".

-mtiny=n
متغیرهایی که هستند n بایت یا کمتر به بخش ".tiny" اختصاص داده می شود. اینها
متغیرها از ثبات پایه $gp استفاده می کنند. پیش فرض این گزینه 4 است، اما توجه داشته باشید که
یک محدودیت 65536 بایتی برای بخش ".tiny" وجود دارد.

MicroBlaze گزینه

-msoft-float
از شبیه سازی نرم افزار برای ممیز شناور (پیش فرض) استفاده کنید.

-mhard-float
از دستورالعمل های ممیز شناور سخت افزاری استفاده کنید.

-mmemcpy
حرکات بلوک را بهینه نکنید، از "memcpy" استفاده کنید.

-mno-clearbss
این گزینه منسوخ شده است. استفاده کنید -fno-zero-initialized-in-bss به جای آن.

-mcpu=نوع cpu
از ویژگی ها و کد برنامه برای CPU داده شده استفاده کنید. مقادیر پشتیبانی شده در قالب هستند
vX.YY.Z، که در آن X نسخه اصلی است، YY نسخه مینور است و Z سازگاری است
کد مقادیر نمونه هستند نسخه 3.00.a, v4.00.b, نسخه 5.00.a, v5.00.b, v5.00.b, نسخه 6.00.a.

-mxl-soft-mul
از نرم افزار شبیه سازی ضرب (پیش فرض) استفاده کنید.

-mxl-soft-div
از شبیه سازی نرم افزاری برای تقسیم ها (پیش فرض) استفاده کنید.

-mxl-barrel-shift
از شیفتر بشکه سخت افزاری استفاده کنید.

-mxl-pattern-compare
از دستورالعمل های مقایسه الگو استفاده کنید.

-msmall-divides
از بهینه سازی جستجوی جدول برای تقسیمات اعداد صحیح امضا شده کوچک استفاده کنید.

-mxl-stack-check
این گزینه منسوخ شده است. به جای آن از -fstack-check استفاده کنید.

-mxl-gp-opt
از بخش های نسبی GP sdata/sbss استفاده کنید.

-mxl-multiply-high
برای قسمت بالای ضرب 32x32 از دستورالعمل های ضرب در بالا استفاده کنید.

-mxl-float-convert
از دستورالعمل های تبدیل ممیز شناور سخت افزاری استفاده کنید.

-mxl-float-sqrt
از دستورالعمل ممیز شناور سخت افزاری ریشه مربع استفاده کنید.

-mxl-mode-برنامه-مدل
مدل برنامه را انتخاب کنید برنامه-مدل. مدل های معتبر هستند

قابل اجرا
نرمال اجرایی (پیش فرض)، از کد راه اندازی استفاده می کند crt0.o.

xmdstub
برای استفاده با Xilinx Microprocessor Debugger (XMD) مبتنی بر نرم افزار اشکال زدایی نفوذی
عاملی به نام xmdstub. این از فایل راه اندازی استفاده می کند crt1.o و آدرس شروع را تنظیم می کند
برنامه باید 0x800 باشد.

بوت استرپ
برای برنامه هایی که با استفاده از بوت لودر بارگذاری می شوند. این مدل از فایل راه اندازی استفاده می کند
crt2.o که شامل کنترل کننده برداری بازنشانی پردازنده نیست. این مناسب است
برای انتقال کنترل روی ریست پردازنده به بوت لودر به جای
نرم افزار.

نوکتورها
برای برنامه هایی که به هیچ یک از بردارهای MicroBlaze نیاز ندارند. این گزینه
ممکن است برای برنامه هایی که در یک برنامه نظارتی اجرا می شوند مفید باشد. این مدل
استفاده crt3.o به عنوان یک فایل راه اندازی

گزینه -xl-mode-برنامه-مدل نام مستعار منسوخ شده برای است -mxl-mode-برنامه-مدل.

میپس گزینه

-EB کد big-endian را تولید کنید.

-The کد کمی اندین تولید کنید. این پیش فرض برای است mips*el-*-* پیکربندی.

-مارس=قوس
کدی را ایجاد کنید که روی آن اجرا شود قوس، که می تواند نام یک MIPS ISA عمومی باشد یا
نام یک پردازنده خاص اسامی ISA عبارتند از: mips1, mips2, mips3, mips4,
mips32, mips32r2, mips64 و mips64r2. نام پردازنده ها عبارتند از: 4 کیلوگرم, 4km, 4 کیلوگرم, 4kc,
4kec, 4 کیلومتر, 4 نگهدارنده, 4 کیلو گرم, 5 کیلوگرم, 5 کیلومتر, 20 کیلوگرم, 24 کیلوگرم, 24kf2_1, 24kf1_1, 24kec, 24kef2_1,
24kef1_1, 34 کیلوگرم, 34kf2_1, 34kf1_1, 74 کیلوگرم, 74kf2_1, 74kf1_1, 74kf3_2, 1004 کیلوگرم, 1004kf2_1,
1004kf1_1, لنگسون 2E, loongson2f, loongson3a, M4K, اکتئون, octeon +, octeon2, جبار,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 و xlr. ارزش ویژه from-abi سازگارترین را انتخاب می کند
معماری برای ABI انتخاب شده (یعنی mips1 برای ABI های 32 بیتی و mips3 برای 64 بیت
ABI ها).

زنجیره‌های ابزار بومی Linux/GNU و IRIX نیز از این مقدار پشتیبانی می‌کنند بومی، که انتخاب می کند
بهترین گزینه معماری برای پردازنده میزبان -مارس=بومی اگر شورای همکاری خلیج فارس تاثیری ندارد
پردازنده را نمی شناسد

در نام پردازنده، یک نهایی 000 را می توان به طور خلاصه به عنوان k (مثلا، -مارس=r2k).
پیشوندها اختیاری هستند و vr ممکن است نوشته شود r.

اسامی فرم ها nf2_1 به پردازنده‌هایی با FPU‌هایی که به نصف سرعت کلاک دارند مراجعه کنید
هسته، نام فرم nf1_1 به پردازنده هایی با FPU با سرعت یکسان کلاک مراجعه کنید
به عنوان هسته و نام های فرم nf3_2 به پردازنده هایی با نسبت کلاک FPU مراجعه کنید
از 3:2 با توجه به هسته. به دلایل سازگاری، nf به عنوان یک پذیرفته شده است
مترادف برای nf2_1 در حین nx و bfx به عنوان مترادف برای پذیرفته شده است nf1_1.

GCC بر اساس مقدار این گزینه دو ماکرو تعریف می کند. اولی این است _MIPS_ARCH,
که نام معماری هدف را به عنوان یک رشته می دهد. دومی فرم دارد
_MIPS_ARCH_فو، که در آن فو مقدار بزرگ شده است _MIPS_ARCH. مثلا،
-مارس=r2000 تنظیم خواهد شد _MIPS_ARCH به "r2000" و ماکرو را تعریف کنید _MIPS_ARCH_R2000.

توجه داشته باشید که _MIPS_ARCH ماکرو از نام پردازنده های ذکر شده در بالا استفاده می کند. به عبارت دیگر،
پیشوند کامل خواهد داشت و مخفف نمی شود 000 as k. در شرایطی که از جانب-
ابی، ماکرو معماری حل شده را نامگذاری می کند (یا "mips1" or "mips3"). نام می برد
معماری پیش فرض زمانی که نه -مارس گزینه داده شده است.

-mtune=قوس
برای بهینه سازی قوس. از جمله موارد دیگر، این گزینه نحوه دستورالعمل ها را کنترل می کند
برنامه ریزی شده و هزینه درک شده عملیات حسابی. لیست از قوس ارزش
همان است که برای -مارس.

هنگامی که این گزینه استفاده نمی شود، GCC برای پردازنده مشخص شده توسط بهینه سازی می شود -مارس.
با استفاده از -مارس و -mtune با هم، امکان تولید کدی وجود دارد که روی آن اجرا شود
خانواده ای از پردازنده ها، اما کد را برای یک عضو خاص از آن بهینه کنید
خانواده.

-mtune ماکروها را تعریف می کند _MIPS_TUNE و _MIPS_TUNE_فو، که به همان روش کار می کنند
la -مارس مواردی که در بالا توضیح داده شد

-mips1
معادل با -مارس=mips1.

-mips2
معادل با -مارس=mips2.

-mips3
معادل با -مارس=mips3.

-mips4
معادل با -مارس=mips4.

-mips32
معادل با -مارس=mips32.

-mips32r2
معادل با -مارس=mips32r2.

-mips64
معادل با -مارس=mips64.

-mips64r2
معادل با -مارس=mips64r2.

-mips16
-mno-mips16
کد MIPS16 را ایجاد کنید (تولید نکنید). اگر GCC یک MIPS32 یا MIPS64 را هدف قرار می دهد
معماری، از MIPS16e ASE استفاده خواهد کرد.

تولید کد MIPS16 را نیز می توان بر اساس هر تابع با استفاده از آن کنترل کرد
ویژگی های "mips16" و "nomips16".

-mflip-mips16
کد MIPS16 را روی توابع متناوب ایجاد کنید. این گزینه برای رگرسیون ارائه شده است
آزمایش تولید کد مختلط MIPS16/غیر MIPS16 و برای معمولی در نظر گرفته نشده است
استفاده در کامپایل کد کاربر

-minterlink-mips16
-mno-interlink-mips16
لازم است (لازم نیست) کد غیرMIPS16 با کد MIPS16 سازگار باشد.

به عنوان مثال، کد غیر MIPS16 نمی تواند مستقیماً به کد MIPS16 بپرد. یا باید از a استفاده کند
تماس یا پرش غیر مستقیم -minterlink-mips16 بنابراین پرش های مستقیم را غیرفعال می کند مگر اینکه
GCC می داند که هدف پرش MIPS16 نیست.

-mabi=32
-mabi=o64
-mabi=n32
-mabi=64
-mabi=eabi
کد برای ABI داده شده ایجاد کنید.

توجه داشته باشید که EABI دارای دو نسخه 32 بیتی و 64 بیتی است. GCC معمولاً 64 بیت تولید می کند
زمانی که معماری 64 بیتی را انتخاب می کنید کد کنید، اما می توانید از آن استفاده کنید -mgp32 برای دریافت کد 32 بیتی
به جای آن.

برای اطلاعات در مورد O64 ABI، نگاه کنیدhttp://gcc.gnu.org/projects/mipso64-abi.html>.

GCC از گونه ای از O32 ABI پشتیبانی می کند که در آن ثبات های ممیز شناور 64 هستند.
عرض بیش از 32 بیت می توانید این ترکیب را با -mabi=32 -mfp64. این ABI
متکی به mthc1 و mfhc1 دستورالعمل ها و بنابراین فقط برای پشتیبانی می شود
پردازنده های MIPS32R2

تخصیص ثبات برای آرگومان ها و مقادیر بازگشتی یکسان باقی می مانند، اما هر کدام
مقدار اسکالر در یک ثبات 64 بیتی به جای یک جفت 32 بیتی منتقل می شود
ثبت می کند. به عنوان مثال، مقادیر ممیز شناور اسکالر برگردانده می شوند f0 دلار فقط، نه a
f0 دلار/f1 دلار جفت مجموعه رجیسترهای ذخیره شده در تماس نیز ثابت می ماند، اما همه 64 بیت
ذخیره می شوند.

-Mabiccals
-mno-abicals
کدی را ایجاد کنید (تولید نکنید) که برای اشیاء پویا به سبک SVR4 مناسب است.
-Mabiccals پیش فرض برای سیستم های مبتنی بر SVR4 است.

-mshared
-mno-اشتراک گذاری شده
کدی را ایجاد کنید (تولید نکنید) که کاملاً مستقل از موقعیت باشد و می تواند
بنابراین به کتابخانه های مشترک پیوند داده شود. این گزینه فقط تاثیر می گذارد -Mabiccals.

معرفی -Mabiccals کد به طور سنتی بدون توجه به گزینه ها مستقل از موقعیت بوده است
پسندیدن -fPIC و -fpic. با این حال، به عنوان یک افزونه، زنجیره ابزار گنو به فایل های اجرایی اجازه می دهد
برای استفاده از دسترسی های مطلق برای نمادهای اتصال محلی. همچنین می تواند از پزشک عمومی کوتاه تری استفاده کند
توالی های اولیه سازی و ایجاد فراخوانی مستقیم به توابع تعریف شده محلی. این
حالت توسط انتخاب شده است -mno-اشتراک گذاری شده.

-mno-اشتراک گذاری شده به binutils 2.16 یا بالاتر بستگی دارد و اشیایی را تولید می کند که فقط می توانند باشند
توسط پیوند دهنده گنو پیوند داده شده است. با این حال، این گزینه بر ABI نهایی تأثیر نمی گذارد
قابل اجرا فقط ABI اشیاء قابل جابجایی را تحت تأثیر قرار می دهد. استفاده كردن -mno-اشتراک گذاری شده اراده
به طور کلی فایل های اجرایی را کوچکتر و سریعتر می کنند.

-mshared پیش فرض است.

-mplt
-mno-plt
فرض کنید (فرض نکنید) که پیوندهای استاتیک و پویا از PLT ها پشتیبانی می کنند و کپی می کنند
جابجایی ها این گزینه فقط تاثیر می گذارد -mno-اشتراک گذاری شده -Mabiccals. برای n64 ABI، این
گزینه بدون هیچ تاثیری ندارد -msym32.

شما می توانید -mplt پیش فرض با پیکربندی GCC با --with-mips-plt. به طور پیش فرض
is -mno-plt در غیر این صورت.

-mxgot
-mno-xgot
محدودیت های معمول در اندازه جدول افست جهانی را بردارید (بلند نکنید).

GCC معمولاً از یک دستورالعمل برای بارگذاری مقادیر از GOT استفاده می کند. در حالی که این است
نسبتا کارآمد، تنها زمانی کار می کند که GOT کوچکتر از حدود 64k باشد.
هر چیزی بزرگتر باعث می شود که پیوند دهنده خطایی را گزارش کند مانند:

جابجایی کوتاه شده به تناسب: R_MIPS_GOT16 foobar

اگر این اتفاق افتاد، باید کد خود را دوباره با آن کامپایل کنید -mxgot. سپس باید با آن کار کند
GOT های بسیار بزرگ، اگرچه کارایی کمتری نیز خواهد داشت، زیرا سه مورد طول می کشد
دستورالعمل هایی برای دریافت ارزش یک نماد جهانی

توجه داشته باشید که برخی از لینکرها می توانند چندین GOT ایجاد کنند. اگر شما چنین پیوند دهنده ای دارید، شما
فقط باید استفاده کرد -mxgot هنگامی که یک فایل شی منفرد به بیش از 64k دسترسی دارد
ارزش ورودی های GOT تعداد بسیار کمی انجام می دهند.

این گزینه ها تأثیری ندارند مگر اینکه GCC کد مستقل از موقعیت را ایجاد کند.

-mgp32
فرض کنید که ثبات های همه منظوره 32 بیت عرض دارند.

-mgp64
فرض کنید که ثبات های همه منظوره 64 بیت عرض دارند.

-mfp32
فرض کنید رجیسترهای ممیز شناور 32 بیت عرض دارند.

-mfp64
فرض کنید رجیسترهای ممیز شناور 64 بیت عرض دارند.

-mhard-float
از دستورالعمل های هم پردازنده ممیز شناور استفاده کنید.

-msoft-float
از دستورالعمل های هم پردازنده ممیز شناور استفاده نکنید. اجرای ممیز شناور
محاسبات با استفاده از تماس های کتابخانه در عوض.

چند شناور
فرض کنید که پردازنده مشترک ممیز شناور فقط از عملیات تک دقیق پشتیبانی می کند.

-mdouble-float
فرض کنید که پردازنده مشترک ممیز شناور از عملیات با دقت دوگانه پشتیبانی می کند. این
پیش فرض است.

-mlsc
-mno-llsc
استفاده کنید (استفاده نکنید) ll, scو همگام دستورالعمل های پیاده سازی حافظه اتمی داخلی
کارکرد. هنگامی که هیچ یک از گزینه ها مشخص نشده است، GCC از دستورالعمل ها استفاده می کند
معماری هدف از آنها پشتیبانی می کند.

-mlsc اگر محیط زمان اجرا بتواند دستورالعمل ها را تقلید کند مفید است -mno-llsc
می تواند هنگام کامپایل برای ISA های غیر استاندارد مفید باشد. شما می توانید هر یک از گزینه ها را بسازید
پیش فرض با پیکربندی GCC با --with-llsc و --without-llsc بود.
--with-llsc پیش فرض برای برخی از تنظیمات است. مستندات نصب را ببینید
برای جزئیات بیشتر.

-mdsp
-mno-dsp
از نسخه 1 MIPS DSP ASE (استفاده نکنید) استفاده کنید.
این گزینه ماکرو پیش پردازنده را تعریف می کند __mips_dsp. همچنین تعریف می کند
__mips_dsp_rev به 1.

-mdspr2
-mno-dspr2
از نسخه 2 MIPS DSP ASE (استفاده نکنید) استفاده کنید.
این گزینه ماکروهای پیش پردازنده را تعریف می کند __mips_dsp و __mips_dspr2. این نیز
تعریف می کند __mips_dsp_rev به 2.

-msmartmips
-mno-smartmips
از MIPS SmartMIPS ASE استفاده کنید (استفاده نکنید).

-مقابل-مجرد
-mno-paired-single
از دستورالعمل های ممیز شناور جفت-تک استفاده کنید (استفاده نکنید).
این گزینه برای فعال کردن پشتیبانی از نقطه شناور سخت افزاری نیاز دارد.

-mdmx
-mno-mdmx
از دستورالعمل های MIPS Digital Media Extension استفاده کنید (استفاده نکنید). این گزینه فقط می تواند باشد
هنگام تولید کد 64 بیتی استفاده می شود و برای پشتیبانی از نقطه شناور سخت افزاری نیاز دارد
فعال شده است

-mips3d
-mno-mips3d
از MIPS-3D ASE استفاده کنید (استفاده نکنید). گزینه -mips3d دلالت دارد -مقابل-مجرد.

-mmt
-mno-mt
از دستورالعمل های MT Multithreading (استفاده نکنید) استفاده کنید.

-mlong64
انواع "طولان" را مجبور کنید که 64 بیت عرض داشته باشند. دیدن -mlong32 برای توضیح پیش فرض
و روشی که اندازه اشاره گر تعیین می شود.

-mlong32
انواع "long"، "int" و اشاره گر را مجبور کنید که 32 بیت عرض داشته باشند.

اندازه پیش‌فرض «int»، «long» و اشاره‌گرها به ABI بستگی دارد. همه
ABI های پشتیبانی شده از "int" 32 بیتی استفاده می کنند. n64 ABI از 64 بیت طولانی استفاده می کند، همانطور که از 64 بیت استفاده می کند
EABI; بقیه از 32 بیتی "long" استفاده می کنند. اشاره گرها به اندازه "long" یا the هستند
اندازه رجیسترهای عدد صحیح، هر کدام کوچکتر باشد.

-msym32
-mno-sym32
فرض کنید (فرض نکنید) که همه نمادها دارای مقادیر 32 بیتی هستند، صرف نظر از انتخاب شده
ABI. این گزینه در ترکیب با -mabi=64 و -mno-abicals به این دلیل که
به GCC اجازه می دهد تا ارجاعات کوتاه تر و سریع تری به آدرس های نمادین ایجاد کند.

-G تعداد
تعاریف داده‌های قابل مشاهده خارجی را در یک بخش داده کوچک قرار دهید اگر آن داده وجود ندارد
بزرگتر از تعداد بایت ها پس از آن GCC می تواند به طور موثرتر به داده ها دسترسی داشته باشد. دیدن -mgpopt برای
جزئیات.

به طور پیش فرض -G گزینه بستگی به پیکربندی دارد.

-mlocal-sdata
-mno-local-sdata
تمدید کردن (بسط ندادن) the -G رفتار نسبت به داده های محلی نیز مانند متغیرهای استاتیک
در سی. -mlocal-sdata پیش فرض برای همه تنظیمات است.

اگر پیوند دهنده شکایت کند که یک برنامه از داده های بسیار کوچک استفاده می کند، ممکن است
می‌خواهید سعی کنید قطعاتی که عملکرد کمتر حیاتی دارند را بازسازی کنید -mno-local-sdataاست. شما
همچنین ممکن است بخواهید با آن کتابخانه های بزرگ بسازید -mno-local-sdata، به طوری که کتابخانه ها
فضای بیشتری برای برنامه اصلی بگذارید.

-مترن-سیتا
-mno-extern-sdata
فرض کنید (فرض نکنید) که داده‌های تعریف‌شده خارجی در یک بخش داده کوچک هستند اگر
که داده ها در داخل هستند -G حد. -مترن-سیتا پیش فرض برای همه است
پیکربندی.

اگر ماژول را کامپایل کنید وزارت دفاع با -مترن-سیتا -G تعداد -mgpoptو وزارت دفاع مراجع الف
متغیر هر که بزرگتر از آن نیست تعداد بایت، شما باید مطمئن شوید که هر قرار داده شده
در بخش داده های کوچک اگر هر توسط ماژول دیگری تعریف شده است، شما باید یا کامپایل کنید
که ماژول با به اندازه کافی بالا -G یک ویژگی "بخش" را تنظیم یا پیوست کنید هر's
تعریف. اگر هر رایج است، شما باید برنامه را با یک برنامه به اندازه کافی بالا پیوند دهید -G
تنظیم می باشد.

ساده ترین راه برای ارضای این محدودیت ها، کامپایل و پیوند دادن هر ماژول است
با همان -G گزینه. با این حال، ممکن است بخواهید کتابخانه ای بسازید که پشتیبانی کند
چندین محدودیت داده کوچک مختلف شما می توانید این کار را با کامپایل کتابخانه با
بالاترین پشتیبانی -G تنظیم و استفاده اضافی -mno-extern-sdata متوقف کردن
کتابخانه از ایجاد مفروضات در مورد داده های تعریف شده خارجی.

-mgpopt
-mno-gpopt
از دسترسی های مربوط به GP برای نمادهایی که مشخص است در یک داده کوچک هستند استفاده کنید
بخش؛ دیدن -G, -mlocal-sdata و -مترن-سیتا. -mgpopt پیش فرض برای همه است
پیکربندی.

-mno-gpopt برای مواردی که ثبات $gp ممکن است مقدار of را حفظ نکند مفید است
"_gp". به عنوان مثال، اگر کد بخشی از یک کتابخانه است که ممکن است در بوت استفاده شود
مانیتور، برنامه‌هایی که روتین‌های مانیتور بوت را فراخوانی می‌کنند، مقدار ناشناخته‌ای را در $gp ارسال می‌کنند.
(در چنین شرایطی، خود مانیتور بوت معمولاً با آن کامپایل می شود -G0.)

-mno-gpopt دلالت دارد -mno-local-sdata و -mno-extern-sdata.

داده های عضو شده
-mno-embedded-data
در صورت امکان ابتدا متغیرها را به بخش داده فقط خواندنی اختصاص دهید و سپس در قسمت بعدی
بخش داده کوچک در صورت امکان، در غیر این صورت در داده ها. این کد کمی کندتر می دهد
از حالت پیش‌فرض است، اما مقدار RAM مورد نیاز هنگام اجرا را کاهش می‌دهد و در نتیجه ممکن است
برای برخی از سیستم های تعبیه شده ترجیح داده شود.

-muninit-const-in-rodata
-mno-unit-const-in-rodata
متغیرهای "const" را که مقداردهی اولیه نشده اند را در بخش داده فقط خواندنی قرار دهید. این گزینه است
فقط در رابطه با داده های عضو شده.

-mcode-readable=محیط
مشخص کنید که آیا GCC ممکن است کدی تولید کند که از بخش‌های اجرایی خوانده شود. وجود دارد
سه تنظیمات ممکن:

-mcode-readable=بله
دستورالعمل ها ممکن است آزادانه به بخش های اجرایی دسترسی داشته باشند. این تنظیمات پیش فرض است.

-mcode-readable=pcrel
دستورالعمل‌های بار مربوط به رایانه شخصی MIPS16 می‌توانند به بخش‌های اجرایی دسترسی داشته باشند، اما موارد دیگر
دستورالعمل ها نباید این کار را انجام دهند. این گزینه در پردازنده های 4KSc و 4KSd مفید است
زمانی که TLB های کد دارای مجموعه بیت Read Inhibit هستند. در پردازنده ها نیز مفید است
که می تواند پیکربندی شود تا یک رابط SRAM دستورالعمل/داده دوگانه داشته باشد و اینکه
مانند M4K، بارهای مربوط به رایانه شخصی را به طور خودکار به رم دستورالعمل هدایت کنید.

-mcode-readable=نه
دستورالعمل ها نباید به بخش های اجرایی دسترسی داشته باشند. این گزینه می تواند مفید باشد
اهدافی که برای داشتن یک رابط SRAM دستورالعمل/داده دوگانه پیکربندی شده اند اما
که (برخلاف M4K) به طور خودکار بارهای مربوط به رایانه شخصی را به سمت دیگر هدایت نمی کنند
رم دستورالعمل

-msplit-addresss
-mno-split-addresss
استفاده از اپراتورهای جابجایی اسمبلر "%hi()" و "%lo()" را فعال کنید. این
گزینه جایگزین شده است -mexplicit-relocs اما برای عقب نگه داشته می شود
سازگاری.

-mexplicit-relocs
-mno-explicit-relocs
هنگام برخورد با آدرس های نمادین از اپراتورهای جابجایی اسمبلر استفاده کنید (از استفاده نکنید).
جایگزین، انتخاب شده توسط -mno-explicit-relocs، استفاده از ماکروهای اسمبلر است.

-mexplicit-relocs اگر GCC برای استفاده از اسمبلری پیکربندی شده باشد، پیش فرض است
از اپراتورهای جابجایی پشتیبانی می کند.

-mcheck-zero-division
-mno-check-zero-division
در تقسیم اعداد صحیح بر صفر تله بزنید (به دام نیفتید).

پیش فرض این است -mcheck-zero-division.

-mdivide-traps
-mdivide- breaks
سیستم های MIPS با ایجاد یک تله شرطی یا a تقسیم بر صفر را بررسی می کنند
آموزش شکستن استفاده از تله ها باعث ایجاد کد کوچکتر می شود، اما فقط در MIPS پشتیبانی می شود
II و بعد. همچنین، برخی از نسخه های هسته لینوکس دارای یک باگ هستند که از تله جلوگیری می کند
از تولید سیگنال مناسب ("SIGFPE"). استفاده کنید -mdivide-traps مشروط اجازه دادن
تله بر روی معماری هایی که از آنها پشتیبانی می کنند و -mdivide- breaks برای اجبار استفاده از
می شکند.

پیش فرض معمولاً است -mdivide-traps، اما این می تواند در زمان پیکربندی لغو شود
با استفاده از --with-divide=شکست. چک های تقسیم بر صفر را می توان با استفاده از آن به طور کامل غیرفعال کرد
-mno-check-zero-division.

-mmemcpy
-mno-memcpy
استفاده از "memcpy()" را برای حرکات بلوک اجباری (اجبار نکنید). پیشفرض
is -mno-memcpy، که به GCC اجازه می دهد تا اکثر کپی های با اندازه ثابت را درون خطی کند.

تماس های طولانی
-mno-long-تماس
استفاده از دستور "jal" را غیرفعال کنید (غیرفعال نکنید). فراخوانی توابع با استفاده از "jal"
کارآمدتر است اما نیاز دارد که تماس گیرنده و تماس گیرنده در یک 256 مگابایت باشند
بخش.

این گزینه روی کد abicalls تاثیری ندارد. پیش فرض است -mno-long-تماس.

-ممم
-mno-mad
استفاده از دستورالعمل های "mad"، "madu" و "mul" را همانطور که توسط
R4650 ISA.

-mfused-madd
-mno-fused-madd
استفاده از دستورات ضرب-انباشت ممیز شناور را فعال (غیرفعال) کنید، زمانی که آنها
موجود هستند. پیش فرض است -mfused-madd.

هنگامی که از دستورالعمل های ضرب-انباشت استفاده می شود، حاصل ضرب میانی محاسبه می شود
به دقت بی‌نهایت و تابع FCSR Flush to Zero بیت نیست. این ممکن است
در برخی شرایط نامطلوب

-nocpp
به اسمبلر MIPS بگویید که پیش پردازنده خود را روی فایل های اسمبلر کاربر اجرا نکند (با یک
.s پسوند) هنگام مونتاژ آنها.

-mfix-24k
-mno-fix-24k
در مورد خطای 24K E48 (از دست رفتن داده ها در فروشگاه ها در حین پر کردن مجدد) کار کنید. راه حل ها
توسط اسمبلر به جای GCC اجرا می شوند.

-mfix-r4000
-mno-fix-r4000
روی برخی از خطاهای CPU R4000 کار کنید:

- یک دو کلمه یا یک تغییر متغیر در صورت اجرا ممکن است نتیجه نادرستی بدهد
بلافاصله پس از شروع یک تقسیم عدد صحیح

- یک دو کلمه یا یک تغییر متغیر ممکن است نتیجه نادرستی در صورت اجرا در حالی که در حالی که اجرا می شود
یک ضرب عدد صحیح در حال انجام است.

- اگر در شکاف تاخیر a شروع شود، یک تقسیم عدد صحیح ممکن است نتیجه نادرستی بدهد
شاخه گرفته شده یا پرش.

-mfix-r4400
-mno-fix-r4400
روی برخی از خطاهای CPU R4400 کار کنید:

- یک دو کلمه یا یک تغییر متغیر در صورت اجرا ممکن است نتیجه نادرستی بدهد
بلافاصله پس از شروع یک تقسیم عدد صحیح

-mfix-r10000
-mno-fix-r10000
در مورد خطاهای R10000 خاص کار کنید:

- توالی های "ll"/"sc" ممکن است در ویرایش های قبل از نسخه 3.0 رفتار اتمی نداشته باشند. آنها ممکن است
بن بست در نسخه های 2.6 و قبل از آن.

این گزینه تنها در صورتی می تواند مورد استفاده قرار گیرد که معماری هدف از شاخه احتمالی پشتیبانی کند
دستورالعمل. -mfix-r10000 پیش فرض زمانی است -مارس=r10000 استفاده می شود؛ -mno-fix-r10000
در غیر این صورت پیش فرض است.

-mfix-vr4120
-mno-fix-vr4120
روی برخی خطاهای VR4120 کار کنید:

- "dmultu" همیشه نتیجه صحیح را ایجاد نمی کند.

- "div" و "ddiv" همیشه در صورت یکی از عملوندها نتیجه صحیح را ایجاد نمی کنند
منفی است

راه‌حل‌ها برای خطای تقسیم بر توابع ویژه در آن تکیه دارند libgcc.a. در
در حال حاضر، این توابع فقط توسط تنظیمات "mips64vr*-elf" ارائه می شوند.

سایر خطاهای VR4120 نیاز به قرار دادن یک nop بین جفت های خاصی دارند
دستورالعمل ها. این خطاها توسط اسمبلر مدیریت می شود، نه توسط خود GCC.

-mfix-vr4130
روی خطای "mflo"/"mfhi" VR4130 کار کنید. راه حل ها توسط
اسمبلر و نه توسط GCC، اگرچه GCC از استفاده از "mflo" و "mfhi" در صورت وجود اجتناب خواهد کرد
دستورالعمل های "macc"، "macchi"، "dmacc" و "dmacchi" VR4130 به جای آن در دسترس هستند.

-mfix-sb1
-mno-fix-sb1
در مورد برخی خطاهای هسته CPU SB-1 کار کنید. (این پرچم در حال حاضر در اطراف SB-1 کار می کند
بازبینی 2 "F1" و "F2" اشتباه ممیز شناور.)

-mr10k-cache-barrier=محیط
مشخص کنید که آیا GCC باید موانع کش را وارد کند تا از عوارض جانبی جلوگیری شود
حدس و گمان در مورد پردازنده های R10K

همانند بسیاری از پردازنده ها، R10K سعی می کند نتیجه یک شرطی را پیش بینی کند
شاخه و به صورت نظری دستورات را از شاخه "گرفته شده" اجرا می کند. بعدا
اگر نتیجه پیش‌بینی‌شده اشتباه بود، این دستورالعمل‌ها را لغو می‌کند. با این حال، در R10K،
حتی دستورالعمل های سقط شده می تواند عوارض جانبی داشته باشد.

این مشکل فقط بر روی حافظه های هسته و بسته به سیستم بارگذاری هسته تاثیر می گذارد.
به عنوان مثال، یک ذخیره‌سازی که به صورت فرضی اجرا شده ممکن است حافظه مورد نظر را در حافظه پنهان بارگذاری کند
و خط کش را به عنوان کثیف علامت گذاری کنید، حتی اگر خود فروشگاه بعداً لغو شود. اگر DMA
عملیات قبل از پاک شدن خط "کثیف" در همان ناحیه از حافظه می نویسد
داده های کش داده های DMA-ed را بازنویسی می کند. راهنمای کامل پردازنده R10K را ببینید
توضیحات، از جمله سایر مشکلات احتمالی

یک راه حل این است که قبل از هر دسترسی به حافظه، دستورالعمل های مانع کش را وارد کنید
ممکن است به صورت فرضی اجرا شود و حتی در صورت سقط شدن ممکن است عوارض جانبی داشته باشد.
-mr10k-cache-barrier=محیط اجرای این راه حل توسط GCC را کنترل می کند. آی تی
فرض می‌کند که دسترسی‌های قطع شده به هر بایت در مناطق زیر، سمتی ندارند
اثرات:

1. حافظه اشغال شده توسط قاب پشته تابع فعلی.

2. حافظه اشغال شده توسط آرگومان پشته ورودی.

3. حافظه اشغال شده توسط یک شی با آدرس پیوند زمان ثابت.

این مسئولیت هسته است که از دسترسی های احتمالی به این مناطق اطمینان حاصل کند
واقعا امن هستند

اگر برنامه ورودی حاوی یک اعلان تابع مانند:

void foo (باطل);

سپس اجرای "foo" باید اجازه دهد "j foo" و "jal foo" اجرا شود.
به صورت حدس و گمان GCC این محدودیت را برای توابعی که خودش کامپایل می کند رعایت می کند. آی تی
انتظار دارد توابع غیر GCC (مانند کد اسمبلی دست نویس) همین کار را انجام دهند.

گزینه سه شکل دارد:

-mr10k-cache-barrier=load-store
یک مانع حافظه پنهان را قبل از بارگذاری یا ذخیره‌سازی که ممکن است به صورت فرضی اجرا شود، وارد کنید
و حتی در صورت سقط جنین ممکن است عوارض جانبی داشته باشد.

-mr10k-cache-barrier=store
یک مانع کش را قبل از یک فروشگاه قرار دهید که ممکن است به صورت فرضی اجرا شود و
که حتی در صورت سقط جنین ممکن است عوارض جانبی داشته باشد.

-mr10k-cache-barrier=هیچکدام
درج موانع کش را غیرفعال کنید. این تنظیمات پیش فرض است.

-mflush-func=عملکرد
-mno-flush-func
تابعی را برای فراخوانی برای شستشوی کش های I و D یا عدم فراخوانی چنین مواردی مشخص می کند
عملکرد. اگر فراخوانی شود، تابع باید همان آرگومان های مشترک را بگیرد
"_flush_func()"، یعنی آدرس محدوده حافظه ای که کش برای آن وجود دارد
flushed، اندازه محدوده حافظه و عدد 3 (برای شستشوی هر دو کش). را
پیش‌فرض بستگی به هدفی دارد که GCC برای آن پیکربندی شده است، اما معمولاً یکی است
_flush_func or __cpu_flush.

شاخه-هزینه =تعداد
هزینه شعب را تقریباً تنظیم کنید تعداد دستورالعمل های "ساده" این هزینه فقط یک است
اکتشافی است و تضمینی برای تولید نتایج ثابت در سراسر نسخه ها وجود ندارد. یک صفر
هزینه به طور اضافی پیش فرض را انتخاب می کند که بر اساس آن است -mtune تنظیم می باشد.

-شاخه محتمل
-mno-branch- احتمال دارد
فعال یا غیرفعال کردن استفاده از دستورالعمل های Branch Likely، صرف نظر از پیش فرض برای
معماری انتخاب شده به‌طور پیش‌فرض، ممکن است دستورالعمل‌های Branch Likely ایجاد شود اگر
آنها توسط معماری انتخاب شده پشتیبانی می شوند. یک استثنا برای MIPS32 و
معماری ها و پردازنده های MIPS64 که این معماری ها را پیاده سازی می کنند. برای آنها،
دستورالعمل های Branch Likely به طور پیش فرض تولید نمی شوند زیرا MIPS32 و
معماری MIPS64 به طور خاص استفاده از آنها را منسوخ می کند.

-mfp-exceptions
-mno-fp-exceptions
مشخص می کند که آیا استثناهای FP فعال هستند یا خیر. این بر نحوه برنامه ریزی FP تأثیر می گذارد
دستورالعمل برای برخی از پردازنده ها پیش فرض این است که استثناهای FP فعال هستند.

به عنوان مثال، در SB-1، اگر استثناهای FP غیرفعال باشد، و ما 64 بیتی را منتشر می کنیم.
کد، سپس می توانیم از هر دو لوله FP استفاده کنیم. در غیر این صورت، ما فقط می توانیم از یک لوله FP استفاده کنیم.

-mvr4130-align
-mno-vr4130-align
خط لوله VR4130 فوق اسکالر دو طرفه است، اما فقط می تواند دو دستورالعمل صادر کند
با هم اگر اولی 8 بایت تراز باشد. وقتی این گزینه فعال باشد، GCC این کار را انجام خواهد داد
جفت دستورالعمل هایی را که فکر می کند باید به صورت موازی اجرا شوند، تراز کنید.

این گزینه فقط هنگام بهینه سازی برای VR4130 تأثیر می گذارد. به طور معمول کد می سازد
سریعتر، اما به قیمت بزرگتر کردن آن. این به طور پیش فرض در فعال است
سطح بهینه سازی -O3.

-msynci
-mno-synci
فعال کردن (غیرفعال) تولید دستورالعمل‌های «همگام‌سازی» در معماری‌هایی که از آن پشتیبانی می‌کنند.
دستورالعمل های "همگام سازی" (در صورت فعال بودن) زمانی تولید می شوند
"__builtin___clear_cache()" کامپایل شده است.

این گزینه به طور پیش‌فرض روی "-mno-synci" است، اما پیش‌فرض را می‌توان با پیکربندی لغو کرد.
با "--with-synci".

هنگام کامپایل کد برای سیستم های تک پردازنده، به طور کلی استفاده از "synci" بی خطر است.
با این حال، در بسیاری از سیستم‌های چند هسته‌ای (SMP)، دستور را باطل نمی‌کند
در تمام هسته ها ذخیره می شود و ممکن است منجر به رفتار نامشخص شود.

-mrelax-pic-calls
-تماس‌های mno-relax-pic
سعی کنید تماس‌های PIC که معمولاً از طریق ثبت نام ۲۵ دلاری ارسال می‌شوند را به تماس‌های مستقیم تبدیل کنید.
این تنها در صورتی امکان پذیر است که پیوند دهنده بتواند مقصد را در زمان پیوند و اگر تعیین کند
مقصد در محدوده تماس مستقیم است.

-mrelax-pic-calls اگر GCC برای استفاده از اسمبلر و a پیکربندی شده باشد، پیش فرض است
پیوندی که از دستورالعمل اسمبلی ".reloc" پشتیبانی می کند و "-mexplicit-relocs" در
اثر با "-mno-explicit-relocs"، این بهینه سازی را می توان توسط
اسمبلر و لینکر به تنهایی بدون کمک کامپایلر.

-mmcount-ra-address
-mno-mcount-ra-address
کدی را ارسال کنید (انتشار نکنید) که به "_mcount" اجازه می دهد تا بازگشت تابع فراخوان را تغییر دهد
نشانی. هنگامی که فعال باشد، این گزینه رابط معمول "_mcount" را با یک رابط جدید گسترش می دهد
نشانی ra پارامتر، که دارای نوع "intptr_t *" است و در ثبات $12 ارسال می شود.
سپس "_mcount" می تواند آدرس برگشتی را با انجام هر دو مورد زیر تغییر دهد:

· بازگشت آدرس جدید در ثبت نام $31.

· ذخیره آدرس جدید در "*نشانی ra"، اگر نشانی ra غیر پوچ است.

پیش فرض این است -mno-mcount-ra-address.

MMIX گزینه

این گزینه ها برای MMIX تعریف شده اند:

-mlibfuncs
-mno-libfuncs
مشخص کنید که توابع کتابخانه ذاتی در حال کامپایل هستند و همه مقادیر را وارد می کنند
بدون توجه به اندازه، ثبت می کند.

-مپسیلون
-mno-epsilon
دستورالعمل های مقایسه ممیز شناور را ایجاد کنید که با توجه به "rE" مقایسه شوند.
ثبت اپسیلون

-mabi=mmixware
-mabi=gnu
کدی تولید کنید که پارامترهای تابع را ارسال می کند و مقادیری را برمی گرداند که (در فراخوانی شده
تابع) به عنوان رجیسترهای $0 و بالاتر دیده می شوند، برخلاف GNU ABI که از global استفاده می کند
231 دلار و بالاتر ثبت می کند.

-mzero-extend
-mno-zero-extend
هنگام خواندن داده ها از حافظه در اندازه های کمتر از 64 بیت، از صفر استفاده کنید (استفاده نکنید)
گسترش دستورالعمل‌های بار به‌طور پیش‌فرض، به‌جای تمدید نشانه‌ها.

-mknuthdiv
-mno-knuthdiv
نتیجه تقسیمی را که باقیمانده به دست می‌آید همان علامت مقسوم‌گیرنده باشد.
با پیش فرض، -mno-knuthdiv، علامت باقیمانده به دنبال علامت the می آید
سود سهام هر دو روش از نظر حسابی معتبر هستند، دومی تقریباً منحصراً است
استفاده شده.

-mtoplevel-symbols
-mno-toplevel-symbols
Prepend (پیش نبندید) الف : به همه نمادهای جهانی، بنابراین کد اسمبلی می تواند استفاده شود
با دستورالعمل مونتاژ "PREFIX".

-ملف
یک فایل اجرایی در قالب ELF به جای پیش فرض ایجاد کنید mmo فرمت استفاده شده توسط
la mmix شبیه ساز

-شاخه-پیش بینی
-mno-branch-predict
هنگام پیش‌بینی شاخه ایستا از دستورالعمل‌های شاخه احتمالی (استفاده نکنید) استفاده کنید
شاخه احتمالی را نشان می دهد.

-آدرس های mbase
-mno-base-addresss
کدی را ایجاد کنید (تولید نکنید). پایه آدرس. با استفاده از آدرس پایه
به طور خودکار یک درخواست (که توسط اسمبلر و پیوند دهنده انجام می شود) برای a ایجاد می کند
ثابتی که باید در یک ثبت جهانی تنظیم شود. ثبات برای یک یا چند پایه استفاده می شود
آدرس درخواست ها در محدوده 0 تا 255 از مقدار موجود در رجیستر. را
به طور کلی منجر به کد کوتاه و سریع می شود، اما تعداد آیتم های داده های مختلف که
قابل رسیدگی محدود است. این بدان معنی است که برنامه ای که از داده های ثابت زیادی استفاده می کند
ممکن است مورد نیاز باشد -mno-base-addresss.

چند خروجی
-mno-single-exit
کد تولید شده را مجبور کنید (اجبار نکنید) یک نقطه خروج در هر تابع داشته باشد.

MN10300 گزینه

اینها -m گزینه ها برای معماری های Matsushita MN10300 تعریف شده اند:

-mult-bug
کد ایجاد کنید تا از اشکال در دستورالعمل های ضرب برای پردازنده های MN10300 جلوگیری کنید.
این پیش فرض است.

-mno-mult-bug
برای جلوگیری از اشکال در دستورالعمل های ضرب برای MN10300 کد تولید نکنید
پردازنده ها

-mam33
با استفاده از ویژگی های مخصوص پردازنده AM33 کد تولید کنید.

-mno-am33
با استفاده از ویژگی های خاص پردازنده AM33 کد تولید نکنید. این است
به طور پیش فرض

-mam33-2
با استفاده از ویژگی های مخصوص پردازنده AM33/2.0 کد تولید کنید.

-mam34
با استفاده از ویژگی های مخصوص پردازنده AM34 کد تولید کنید.

-mtune=نوع cpu
هنگام برنامه ریزی دستورالعمل ها از ویژگی های زمان بندی نوع CPU مشخص شده استفاده کنید.
این نوع پردازنده هدفمند را تغییر نمی دهد. نوع CPU باید یکی از آنها باشد
mn10300, am33, am33-2 or am34.

-mreturn-pointer-on-d0
هنگام تولید تابعی که نشانگر را برمی گرداند، نشانگر را در هر دو حالت "a0" و
"d0". در غیر این صورت، اشاره گر فقط در a0 برگردانده می شود و سعی می کند آن را فراخوانی کند
توابع بدون نمونه اولیه منجر به خطا می شود. توجه داشته باشید که این گزینه توسط فعال است
پیش فرض استفاده کنید -mno-return-pointer-on-d0 آن را غیرفعال کنید

-mno-crt0
در فایل شی مقداردهی اولیه C در زمان اجرا پیوند داده نشود.

-آرامش کن
به پیوند دهنده نشان دهید که باید یک پاس بهینه سازی آرامش را انجام دهد
شاخه ها، فراخوانی ها و آدرس های حافظه مطلق را کوتاه کنید. این گزینه فقط اثر دارد
هنگامی که در خط فرمان برای مرحله پیوند نهایی استفاده می شود.

این گزینه اشکال زدایی نمادین را غیرممکن می کند.

-mliw
به کامپایلر اجازه تولید بدهید طولانی دستور العمل کلمه دستورالعمل اگر هدف است
AM33 و یا بعد. این پیش فرض است. این گزینه ماکرو پیش پردازنده را تعریف می کند
__LIW__.

-منولیو
اجازه تولید کامپایلر را ندهید طولانی دستور العمل کلمه دستورالعمل ها. این گزینه
ماکرو پیش پردازنده را تعریف می کند __NO_LIW__.

-msetlb
به کامپایلر اجازه تولید SETLB و ال سی سی دستورالعمل اگر هدف است
AM33 و یا بعد. این پیش فرض است. این گزینه ماکرو پیش پردازنده را تعریف می کند
__SETLB__.

-منوستلب
اجازه تولید کامپایلر را ندهید SETLB or ال سی سی دستورالعمل ها. این گزینه تعریف می کند
ماکرو پیش پردازنده __NO_SETLB__.

PDP-11 گزینه

این گزینه ها برای PDP-11 تعریف شده اند:

-mfpu
از سخت افزار FPP ممیز شناور استفاده کنید. این پیش فرض است. (نقطه شناور FIS روی
PDP-11/40 پشتیبانی نمی شود.)

-msoft-float
از ممیز شناور سخت افزاری استفاده نکنید.

-mac0
نتایج ممیز شناور را به ac0 برگردانید (fr0 در نحو اسمبلر یونیکس).

-mno-ac0
نتایج ممیز شناور را در حافظه برگردانید. این پیش فرض است.

-40
کد PDP-11/40 را ایجاد کنید.

-45
کد PDP-11/45 را ایجاد کنید. این پیش فرض است.

-10
کد PDP-11/10 را ایجاد کنید.

-mbcopy-builtin
برای کپی کردن حافظه از الگوهای "movmemhi" درون خطی استفاده کنید. این پیش فرض است.

-mbcopy
از الگوهای درون خطی "movmemhi" برای کپی کردن حافظه استفاده نکنید.

-mint16
-mno-int32
از "int" 16 بیتی استفاده کنید. این پیش فرض است.

-mint32
-mno-int16
از "int" 32 بیتی استفاده کنید.

-mfloat64
-mno-float32
از "float" 64 بیتی استفاده کنید. این پیش فرض است.

-mfloat32
-mno-float64
از "float" 32 بیتی استفاده کنید.

-مبشی
از الگوی "abshi2" استفاده کنید. این پیش فرض است.

-mno-abshi
از الگوی "abshi2" استفاده نکنید.

-شاخه گران است
وانمود کنید که شاخه ها گران هستند. این برای آزمایش با تولید کد است
تنها.

-شاخه-ارزان
وانمود نکنید که شاخه ها گران هستند. این پیش فرض است.

-munix-asm
از دستور اسمبلر یونیکس استفاده کنید. این پیش‌فرض هنگام پیکربندی برای pdp11-*-bsd.

-mdec-asm
از دستور اسمبلر DEC استفاده کنید. هنگامی که برای هر هدف PDP-11 پیکربندی شده است، این پیش فرض است
به غیر از pdp11-*-bsd.

پیکو چیپ گزینه

اینها -m گزینه هایی برای پیاده سازی picoChip تعریف شده اند:

-mae=ae_type
مجموعه دستورالعمل، مجموعه ثبت، و پارامترهای زمانبندی دستورالعمل را برای آرایه تنظیم کنید
نوع عنصر ae_type. مقادیر پشتیبانی شده برای ae_type هستند هر گونه, چندو MAC.

-mae=هر یک نوع AE کاملاً عمومی را انتخاب می کند. کد تولید شده با این گزینه خواهد بود
روی هر یک از انواع دیگر AE اجرا شود. کد به اندازه ای که بود کارآمد نخواهد بود
برای یک نوع AE خاص و برخی از انواع عملیات (مثلاً ضرب) کامپایل شده است.
روی همه انواع AE به درستی کار نخواهد کرد.

-mae = mul یک نوع MUL AE را انتخاب می کند. این مفیدترین نوع AE برای کدهای کامپایل شده است،
و پیش فرض است.

-mae=MAC یک MAC AE به سبک DSP را انتخاب می کند. کد کامپایل شده با این گزینه ممکن است دچار مشکل شود
عملکرد ضعیف دستکاری بایت (char) زیرا DSP AE ارائه نمی دهد
پشتیبانی سخت افزاری برای بارگذاری/ذخیره های بایت.

-symbol-as-address
کامپایلر را فعال کنید تا مستقیماً از یک نام نماد به عنوان آدرس در یک بارگذاری/فروشگاه استفاده کند
دستورالعمل، بدون اینکه ابتدا آن را در یک ثبات بارگیری کنید. به طور معمول، استفاده از این
گزینه برنامه های بزرگتری تولید می کند که سریعتر از زمانی که گزینه نیست اجرا می شود
استفاده شده. با این حال، نتایج از برنامه ای به برنامه دیگر متفاوت است، بنابراین به عنوان یک کاربر باقی می ماند
گزینه، به جای اینکه برای همیشه فعال شود.

-mno-inefficient-warnings
هشدارهای مربوط به تولید کد ناکارآمد را غیرفعال می کند. این هشدارها می تواند باشد
برای مثال، هنگام کامپایل کدی که عملیات حافظه در سطح بایت را انجام می دهد، تولید می شود
در نوع MAC AE MAC AE هیچ پشتیبانی سخت افزاری برای حافظه سطح بایت ندارد
عملیات، بنابراین تمام بار/ذخیره‌های بایت باید از بارگذاری/ذخیره کلمه سنتز شوند
عملیات این ناکارآمد است و یک هشدار ایجاد خواهد شد که نشان دهنده آن است
برنامه نویس که آنها باید کد را بازنویسی کنند تا از عملیات بایت جلوگیری کنند یا برای هدف قرار دادن an
نوع AE که پشتیبانی سخت افزاری لازم را دارد. این گزینه هشدار را فعال می کند
خاموش شود

PowerPC گزینه

این موارد در زیر ذکر شده است

RL78 گزینه

-msim
پیوندهایی در کتابخانه های هدف اضافی برای پشتیبانی از عملیات در یک شبیه ساز.

-mmul=هیچ
-mmul=g13
-mmul=rl78
نوع پشتیبانی از ضرب سخت افزار مورد استفاده را مشخص می کند. پیش فرض است
"none" که از توابع ضرب نرم افزار استفاده می کند. گزینه "g13" برای
ضرب/تقسیم سخت افزار جانبی فقط در اهداف RL78/G13. گزینه "rl78".
برای ضرب استاندارد سخت افزار تعریف شده در کتابچه راهنمای نرم افزار RL78 است.

آی بی ام RS / 6000 و PowerPC گزینه

اینها -m گزینه هایی برای IBM RS/6000 و PowerPC تعریف شده است:

-قدرت
-mno-قدرت
-power2
-mno-power2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmfcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmbb
-mmfpgpr
-mno-mfpgpr
-mhard-dfp
-mno-hard-dfp
GCC از دو معماری مجموعه دستورالعمل مرتبط برای RS/6000 و PowerPC پشتیبانی می کند.
La POWER مجموعه دستورات دستورالعمل هایی هستند که توسط رودخانه ها چیپ ست استفاده شده
در سیستم های اصلی RS/6000 و PowerPC مجموعه دستورات معماری است
ریزپردازنده های Freescale MPC5xx، MPC6xx، MPC8xx و IBM 4xx، 6xx، و
ریزپردازنده های بعدی

هیچ یک از معماری زیرمجموعه دیگری نیست. با این حال یک زیر مجموعه مشترک بزرگ وجود دارد
دستورالعمل های پشتیبانی شده توسط هر دو. یک ثبات MQ در پردازنده ها گنجانده شده است
پشتیبانی از معماری POWER

شما از این گزینه ها استفاده می کنید تا مشخص کنید کدام دستورالعمل ها در پردازنده شما موجود است
استفاده می کنند. مقدار پیش فرض این گزینه ها هنگام پیکربندی GCC تعیین می شود.
مشخص کردن -mcpu=cpu_type مشخصات این گزینه ها را نادیده می گیرد. ما
توصیه می کنیم از -mcpu=cpu_type گزینه به جای گزینه های ذکر شده در بالا.

La -قدرت گزینه به GCC اجازه می دهد تا دستورالعمل هایی را ایجاد کند که فقط در آن یافت می شوند
معماری POWER و استفاده از ثبات MQ. مشخص کردن -power2 دلالت دارد قدرت و
همچنین به GCC اجازه می دهد تا دستورالعمل هایی را که در معماری POWER2 وجود دارد، ایجاد کند
اما نه معماری اصلی POWER.

La -mpowerpc گزینه به GCC اجازه می دهد تا دستورالعمل هایی را ایجاد کند که فقط در آن یافت می شوند
زیر مجموعه 32 بیتی معماری PowerPC. مشخص کردن -mpowerpc-gpopt دلالت دارد
-mpowerpc و همچنین به GCC اجازه می دهد تا از دستورالعمل های معماری PowerPC اختیاری استفاده کند
گروه هدف عمومی، از جمله جذر ممیز شناور. مشخص کردن
-mpowerpc-gfxopt دلالت دارد -mpowerpc و همچنین به GCC اجازه می دهد تا از PowerPC اختیاری استفاده کند
دستورالعمل های معماری در گروه Graphics، از جمله انتخاب ممیز شناور.

La -mmfcrf گزینه به GCC اجازه می دهد تا حرکت را از قسمت ثبت شرط ایجاد کند
دستورالعمل اجرا شده بر روی پردازنده POWER4 و سایر پردازنده هایی که از آن پشتیبانی می کنند
معماری PowerPC V2.01. در -mpopcntb گزینه به GCC اجازه می دهد تا popcount را ایجاد کند
و دستورالعمل تخمین متقابل FP با دقت دوگانه بر روی POWER5 پیاده سازی شده است
پردازنده و سایر پردازنده هایی که از معماری PowerPC V2.02 پشتیبانی می کنند. در
-mpopcntd این گزینه به GCC اجازه می دهد تا دستور popcount پیاده سازی شده در را ایجاد کند
پردازنده POWER7 و سایر پردازنده هایی که از معماری PowerPC V2.06 پشتیبانی می کنند.
La -mfprnd این گزینه به GCC اجازه می دهد تا دستورات دور FP به عدد صحیح را تولید کند
بر روی پردازنده POWER5+ و سایر پردازنده هایی که از PowerPC پشتیبانی می کنند پیاده سازی شده است
معماری V2.03. در -mcmpb این گزینه به GCC اجازه می دهد تا بایت های مقایسه را تولید کند
دستورالعمل اجرا شده بر روی پردازنده POWER6 و سایر پردازنده هایی که از آن پشتیبانی می کنند
معماری PowerPC V2.05. در -mmfpgpr گزینه به GCC اجازه می دهد تا حرکت FP را ایجاد کند
به/از دستورالعمل های ثبت همه منظوره که بر روی پردازنده POWER6X اجرا شده است و
پردازنده های دیگری که از معماری توسعه یافته PowerPC V2.05 پشتیبانی می کنند. در -mhard-dfp
این گزینه به GCC اجازه می دهد تا دستورالعمل های ممیز شناور اعشاری اجرا شده در آن را تولید کند
برخی از پردازنده های POWER

La -mpowerpc64 این گزینه به GCC اجازه می دهد تا دستورالعمل های 64 بیتی اضافی را ایجاد کند
در معماری کامل PowerPC64 یافت می شوند و GPR ها را به عنوان 64 بیتی دو کلمه ای در نظر می گیرند
مقادیر. GCC به طور پیش فرض روی است -mno-powerpc64.

اگر هر دو را مشخص کنید -mno-قدرت و -mno-powerpc، GCC فقط از دستورالعمل های موجود استفاده می کند
زیرمجموعه مشترک هر دو معماری به اضافه برخی فراخوانی های حالت مشترک AIX خاص و
از ثبت MQ استفاده نخواهد کرد. مشخص کردن هر دو -قدرت و -mpowerpc به GCC اجازه می دهد
از هر دستورالعملی از هر یک از معماری ها استفاده کنید و اجازه استفاده از ثبات MQ را بدهید.
این را برای Motorola MPC601 مشخص کنید.

-mnew-mnemonics
-قالب- یادگاری
انتخاب کنید که از کدام یادگاری در کد اسمبلر تولید شده استفاده شود. با -mnew-mnemonics,
GCC از حافظه اسمبلر تعریف شده برای معماری PowerPC استفاده می کند. با
-قالب- یادگاری از حافظه اسمبلر تعریف شده برای معماری POWER استفاده می کند.
دستورالعمل های تعریف شده فقط در یک معماری فقط یک یادگاری دارند. GCC از آن استفاده می کند
صرف نظر از اینکه کدام یک از این گزینه ها مشخص شده است.

GCC به طور پیش‌فرض به یادگاری مناسب برای معماری در حال استفاده می‌پردازد. مشخص کردن
-mcpu=cpu_type گاهی اوقات ارزش این گزینه ها را نادیده می گیرد. مگر اینکه در حال ساختن باشید
یک کامپایلر متقابل، معمولاً نباید آن را مشخص کنید -mnew-mnemonics or
-قالب- یادگاری، اما باید پیش فرض را بپذیرد.

-mcpu=cpu_type
نوع معماری را تنظیم کنید، استفاده از ثبت نام، انتخاب یادگاری، و زمان‌بندی دستورالعمل‌ها را تنظیم کنید
پارامترهای نوع ماشین cpu_type. مقادیر پشتیبانی شده برای cpu_type هستند 401, 403,
405, 405 فریم در ثانیه, 440, 440 فریم در ثانیه, 464, 464 فریم در ثانیه, 476, 476 فریم در ثانیه, 505, 601, 602, 603, 603e, 604, 604e,
620, 630, 740, 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
e500mc, e500mc64, ec603e, G3, G4, G5, تیتان, قدرت, 2, 3, 4, 5,
power5+, 6, قدرت 6x, 7, مشترک, پاور پی سی, powerpc64, رودخانه ها, رودخانه ها 1, رودخانه ها 2, csr,
و rs64.

-mcpu=متداول یک پردازنده کاملاً عمومی را انتخاب می کند. کد تولید شده تحت این گزینه
روی هر پردازنده POWER یا PowerPC اجرا می شود. GCC فقط از دستورالعمل‌های موجود در
زیر مجموعه مشترک هر دو معماری، و از ثبت MQ استفاده نخواهد کرد. GCC فرض می کند a
مدل پردازنده عمومی برای اهداف زمان بندی

-mcpu=قدرت, -mcpu=power2, -MCPU = PowerPCو -mcpu=powerpc64 POWER عمومی را مشخص کنید،
POWER2، PowerPC خالص 32 بیتی (یعنی نه MPC601) و معماری PowerPC 64 بیتی
انواع ماشین، با یک مدل پردازشگر عمومی مناسب که برای زمان‌بندی در نظر گرفته شده است
اهداف.

گزینه های دیگر یک پردازنده خاص را مشخص می کنند. کد تولید شده تحت آن گزینه ها
روی آن پردازنده به بهترین شکل اجرا می شود و ممکن است اصلاً روی پردازنده های دیگر اجرا نشود.

La -mcpu گزینه ها به طور خودکار گزینه های زیر را فعال یا غیرفعال می کنند:

-مالتیفک -mfprnd -mhard-float -mmfcrf -چندین -mnew-mnemonics -mpopcntb
-mpopcntd -قدرت -power2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
چند شناور -mdouble-float -msimple-fpu -mstring -mmulhw -mdlmzb -mmfpgpr -mvsx

گزینه های خاص تنظیم شده برای هر CPU خاص بین نسخه های کامپایلر متفاوت است.
بسته به اینکه به نظر می رسد چه تنظیماتی کد بهینه را برای آن CPU تولید می کند. آن را نمی کند
لزوماً منعکس کننده قابلیت های سخت افزار واقعی است. اگر مایل به تنظیم یک
گزینه فردی به یک مقدار خاص، می توانید آن را بعد از آن مشخص کنید -mcpu گزینه،
پسندیدن -MCPU = 970 -mno-altivec.

در AIX، -مالتیفک و -mpowerpc64 گزینه ها توسط این فعال یا غیرفعال نمی شوند -mcpu
در حال حاضر گزینه ای است زیرا AIX پشتیبانی کاملی از این گزینه ها ندارد. شما ممکن است
اگر مطمئن هستید که در شما کار می کند، همچنان آنها را به صورت جداگانه فعال یا غیرفعال کنید
محیط زیست است.

-mtune=cpu_type
پارامترهای زمانبندی دستورالعمل را برای نوع ماشین تنظیم کنید cpu_type، اما تنظیم نکنید
نوع معماری، استفاده از ثبت، یا انتخاب یادگاری، به عنوان -mcpu=cpu_type
خواهد شد همان مقادیر برای cpu_type برای استفاده می شود -mtune با توجه به -mcpu. اگر هر دو هستند
مشخص شده، کد تولید شده از معماری، ثبات ها و مجموعه یادگاری استفاده می کند
by -mcpu، اما پارامترهای زمانبندی تنظیم شده توسط -mtune.

-mcmodel=small
کد PowerPC64 را برای مدل کوچک ایجاد کنید: TOC به 64k محدود شده است.

-mcmodel=متوسط
کد PowerPC64 را برای مدل متوسط ​​ایجاد کنید: TOC و سایر داده های استاتیک ممکن است بالا باشند
در مجموع به اندازه 4G.

-mcmodel=بزرگ
کد PowerPC64 را برای مدل بزرگ ایجاد کنید: اندازه TOC ممکن است تا 4G باشد. دیگر
داده ها و کد فقط توسط فضای آدرس 64 بیتی محدود می شود.

-مالتیفک
-mno-altivec
کدی را ایجاد کنید که از دستورالعمل های AltiVec استفاده می کند (از آن استفاده نمی کند) و همچنین استفاده را فعال کنید
از توابع داخلی که امکان دسترسی مستقیم بیشتری به مجموعه دستورالعمل AltiVec را فراهم می کند.
همچنین ممکن است نیاز به تنظیم داشته باشید -mabi=altivec برای تنظیم ABI فعلی با AltiVec ABI
پیشرفت ها

-mvrsave
-mno-vrsave
هنگام تولید کد AltiVec دستورالعمل های VRSAVE را ایجاد کنید.

-mgen-cell-microcode
دستورالعمل های میکروکد سلول را ایجاد کنید

-mwarn-cell-microcode
هشدار زمانی که یک دستورالعمل میکروکد سلولی قرار است منتشر شود. نمونه ای از سلول
دستورالعمل میکروکد یک تغییر متغیر است.

-msecure-plt
کدی را ایجاد کنید که به ld و ld.so اجازه می‌دهد تا فایل‌های اجرایی و کتابخانه‌های مشترک بسازند
بخش های non-exec .plt و .got. این یک گزینه PowerPC 32 بیتی SYSV ABI است.

-mbss-plt
کدی را ایجاد کنید که از یک بخش BSS .plt استفاده می کند که ld.so آن را پر می کند و به .plt و نیاز دارد.
.got بخش هایی که هم قابل نوشتن و هم قابل اجرا هستند. این یک SYSV 32 بیتی PowerPC است
گزینه ABI.

-میزل
-mno-isel
این سوئیچ تولید دستورالعمل های ISEL را فعال یا غیرفعال می کند.

-misel=بله خیر
این سوئیچ منسوخ شده است. استفاده کنید -میزل و -mno-isel به جای آن.

-mspe
-mno-spe
این سوئیچ تولید دستورالعمل های SPE simd را فعال یا غیرفعال می کند.

-آسیب شده
-mno-paired
این سوئیچ تولید دستورالعمل های PAIRED simd را فعال یا غیرفعال می کند.

-mspe=بله خیر
این گزینه منسوخ شده است. استفاده کنید -mspe و -mno-spe به جای آن.

-mvsx
-mno-vsx
کدی را ایجاد کنید که از دستورالعمل های برداری/اسکالر (VSX) و همچنین استفاده می کند (از آن استفاده نمی کند).
استفاده از توابع داخلی را فعال کنید که امکان دسترسی مستقیم بیشتری به VSX را فراهم می کند
مجموعه دستورالعمل.

-mfloat-gprs=بله / تک / دو / خیر
-mfloat-gprs
این سوئیچ تولید عملیات ممیز شناور را فعال یا غیرفعال می کند
ثبت های همه منظوره برای معماری هایی که از آن پشتیبانی می کنند.

بحث و جدل بله or تنها استفاده از نقطه شناور تک دقیق را امکان پذیر می کند
عملیات.

بحث و جدل دو برابر امکان استفاده از ممیز شناور با دقت تک و دوگانه را فراهم می کند
عملیات.

بحث و جدل نه عملیات ممیز شناور در رجیسترهای همه منظوره را غیرفعال می کند.

این گزینه در حال حاضر فقط در MPC854x موجود است.

-32
-64
ایجاد کد برای محیط های 32 بیتی یا 64 بیتی اهداف داروین و SVR4 (شامل
گنو/لینوکس). محیط 32 بیتی int، long و pointer را روی 32 بیت و
کدی را تولید می کند که روی هر نوع PowerPC اجرا می شود. محیط 64 بیتی تنظیم می شود
32 بیت و طولانی و اشاره گر به 64 بیت، و کد برای PowerPC64 تولید می کند.
-mpowerpc64.

-mfull-toc
-mno-fp-in-toc
-mno-sum-in-toc
-mminimal-toc
تغییر نسل TOC (جدول مطالب)، که برای هر ایجاد شده است
فایل اجرایی. در -mfull-toc گزینه به طور پیش فرض انتخاب شده است. در آن صورت، GCC
حداقل یک ورودی TOC را برای هر مرجع متغیر غیر خودکار منحصر به فرد اختصاص می دهد
در برنامه شما GCC همچنین ثابت های ممیز شناور را در TOC قرار می دهد. با این حال،
فقط 16,384 ورودی در TOC موجود است.

اگر یک پیام خطای پیوند دهنده دریافت کردید که می گوید شما در دسترس را سرریز کرده اید
فضای TOC، می توانید مقدار فضای TOC استفاده شده را با آن کاهش دهید -mno-fp-in-toc و
-mno-sum-in-toc گزینه. -mno-fp-in-toc از قرار دادن ممیز شناور GCC جلوگیری می کند
ثابت در TOC و -mno-sum-in-toc GCC را مجبور به تولید کد برای محاسبه می کند
مجموع یک آدرس و یک ثابت در زمان اجرا به جای قرار دادن آن مجموع در TOC.
می توانید یک یا هر دوی این گزینه ها را مشخص کنید. هر کدام باعث می شود GCC تولید بسیار کند
کد کمی کندتر و بزرگتر به قیمت حفظ فضای TOC.

اگر حتی زمانی که هر دوی این گزینه‌ها را مشخص می‌کنید، همچنان در TOC فضای خالی دارید،
مشخص كردن -mminimal-toc بجای. این گزینه باعث می شود GCC تنها یک ورودی TOC برای آن ایجاد کند
هر فایل وقتی این گزینه را مشخص می کنید، GCC کدی را تولید می کند که کندتر است و
بزرگتر اما از فضای TOC بسیار کمی استفاده می کند. ممکن است بخواهید از این گزینه استفاده کنید
فقط در فایل هایی که حاوی کدهایی هستند که کمتر اجرا می شوند.

-maix64
-maix32
AIX ABI 64 بیتی و قرارداد فراخوانی را فعال کنید: نشانگرهای 64 بیتی، نوع "طولانی" 64 بیتی، و
زیرساخت های مورد نیاز برای حمایت از آنها. مشخص کردن -maix64 دلالت دارد -mpowerpc64 و
-mpowerpc، در حالی که -maix32 ABI 64 بیتی را غیرفعال می کند و به این معنی است -mno-powerpc64. شورای همکاری خلیج فارس
پیش فرض به -maix32.

-mxl-compat
-MNO-XL-COMPAT
هنگام استفاده از AIX- کدی تولید کنید که با معنایی کامپایلر IBM XL مطابقت بیشتری داشته باشد.
ABI سازگار ارسال آرگومان های ممیز شناور به توابع نمونه سازی شده فراتر از
علاوه بر آرگومان های FPR، ناحیه ذخیره (RSA) را در پشته ثبت کنید. فرض نکنید
مهم‌ترین دوبل در مقدار دو برابر طولانی 128 بیتی به درستی گرد می‌شود
مقایسه مقادیر و تبدیل به دو برابر. از نام نمادهای XL برای دوبل طولانی استفاده کنید
روال های پشتیبانی

کنوانسیون فراخوانی AIX تمدید شد اما در ابتدا برای رسیدگی به یک سند ثبت نشد
مورد مبهم K&R C فراخوانی تابعی که آدرس آرگومان های خود را با آن می گیرد
آرگومان های کمتر از آنچه اعلام شده است. کامپایلرهای IBM XL به آرگومان های ممیز شناور دسترسی دارند که
وقتی زیرروال بدون کامپایل می شود، در RSA از پشته قرار نمی گیرد
بهینه سازی. زیرا همیشه ذخیره آرگومان های ممیز شناور در پشته است
ناکارآمد و به ندرت مورد نیاز است، این گزینه به طور پیش فرض فعال نیست و فقط فعال است
هنگام فراخوانی زیربرنامه های کامپایل شده توسط کامپایلرهای IBM XL بدون بهینه سازی ضروری است.

-mpe
پشتیبــانی آی بی ام RS / 6000 SP موازی محیط (پلی اتیلن). برنامه ای را که برای استفاده نوشته شده است پیوند دهید
ارسال پیام با کد راه اندازی ویژه برای فعال کردن برنامه برای اجرا. را
سیستم باید PE در محل استاندارد نصب شده باشد (/usr/lpp/ppe.poe/)، یا
مشخصات فایل باید با -specs = گزینه مناسب را مشخص کنید
محل دایرکتوری محیط موازی از رشته ها پشتیبانی نمی کند، بنابراین -mpe
گزینه و - نخ گزینه ناسازگار هستند

-بدخیم-طبیعی
قدرت بدخیم
در AIX، داروین 32 بیتی و گنو/لینوکس PowerPC 64 بیتی، این گزینه -بدخیم-طبیعی
تراز تعریف شده توسط ABI انواع بزرگتر، مانند دو برابر ممیز شناور را نادیده می گیرد.
در مرز مبتنی بر اندازه طبیعی آنها. گزینه قدرت بدخیم به GCC دستور می دهد
قوانین تراز مشخص شده توسط ABI را دنبال کنید. GCC به طور پیش فرض به تراز استاندارد است
در ABI تعریف شده است.

در داروین 64 بیتی، تراز طبیعی پیش فرض است و قدرت بدخیم نیست
پشتیبانی.

-msoft-float
-mhard-float
کدی را ایجاد کنید که از مجموعه ثبت ممیز شناور استفاده نمی کند. نرم افزار
در صورت استفاده از شبیه سازی ممیز شناور ارائه می شود -msoft-float گزینه، و عبور از
گزینه GCC هنگام پیوند.

چند شناور
-mdouble-float
کد برای عملیات ممیز شناور با دقت تک یا دوگانه ایجاد کنید.
-mdouble-float دلالت دارد چند شناور.

-msimple-fpu
دستورالعمل های sqrt و div را برای واحد ممیز شناور سخت افزاری تولید نکنید.

-mfpu
نوع واحد ممیز شناور را مشخص کنید. مقادیر معتبر هستند sp_lite (معادل
-msingle-float -msimple-fpu)، dp_lite (معادل -mdouble-float -msimple-fpu)،
sp_full (معادل -msingle-float) و dp_full (معادل -mdouble-float).

-mxilinx-fpu
بهینه سازی واحد ممیز شناور را در Xilinx PPC 405/440 انجام دهید.

-چندین
-mno-چند
کدی را ایجاد کنید که از بارگیری دستورالعمل های چند کلمه ای استفاده می کند (استفاده نمی کند).
دستورالعمل های چند کلمه ای را ذخیره کنید. این دستورالعمل ها به طور پیش فرض در ایجاد می شوند
سیستم های POWER، و در سیستم های PowerPC تولید نمی شوند. استفاده نکن -چندین در کمی -
سیستم‌های PowerPC endian، زیرا این دستورالعمل‌ها زمانی که پردازنده در دسترس است کار نمی‌کنند
حالت کمی اندین استثناها PPC740 و PPC750 هستند که این موارد را مجاز می دانند
دستورالعمل ها در حالت کمی اندین

-mstring
-mno-string
کدی را ایجاد کنید که از دستورالعمل های رشته بارگیری و ذخیره استفاده می کند (از آن استفاده نمی کند).
دستورات کلمه رشته ای برای ذخیره چندین رجیستر و انجام حرکات بلوک کوچک. اینها
دستورالعمل ها به طور پیش فرض در سیستم های POWER تولید می شوند و در PowerPC تولید نمی شوند
سیستم های. استفاده نکن -mstring در سیستم‌های PowerPC کوچک، از آن زمان
دستورالعمل ها زمانی که پردازنده در حالت کمی اندین است کار نمی کند. استثناها
PPC740 و PPC750 هستند که این دستورالعمل ها را در حالت اندک اندین مجاز می کنند.

-به روز رسانی
-mno-update
کدی را ایجاد کنید که از بارگیری استفاده کند (استفاده نمی کند) یا دستورالعمل هایی را ذخیره می کند که به روز رسانی می شوند
ثبت پایه به آدرس محل حافظه محاسبه شده. این دستورالعمل ها
به صورت پیش فرض تولید می شوند. اگر استفاده می کنید -mno-update، یک پنجره کوچک بین
زمانی که نشانگر پشته به روز می شود و آدرس فریم قبلی است
ذخیره شده، به این معنی است که کدی که فریم پشته را از طریق وقفه ها یا سیگنال ها عبور می دهد
دریافت داده های خراب

-mavoid-index-addresss
-mno-ouced-indexed-Addresses
کدی را ایجاد کنید که سعی کند از استفاده از بار یا ذخیره فهرست شده جلوگیری کند (نه اجتناب کند).
دستورالعمل ها. این دستورالعمل ها می تواند جریمه عملکرد پردازنده های Power6 را در پی داشته باشد
در شرایط خاص، مانند هنگام عبور از آرایه های بزرگ که از 16M عبور می کنند
مرز این گزینه به طور پیش فرض در هنگام هدف گیری Power6 فعال و غیرفعال است
در غیر این صورت.

-mfused-madd
-mno-fused-madd
کدی را ایجاد کنید که از ضرب و انباشت ممیز شناور استفاده می کند (از آن استفاده نمی کند).
دستورالعمل ها. این دستورالعمل ها به صورت پیش فرض در صورت نقطه شناور سخت افزاری تولید می شوند
استفاده می شود. وابسته به ماشین -mfused-madd اکنون گزینه به ماشین نگاشت شده است-
مستقل -ffp-contract=سریع گزینه ، و -mno-fused-madd به نقشه برداری می شود
-ffp-contract = خاموش.

-mmulhw
-mno-mulhw
کدی تولید کنید که از نیم کلمه ضرب و ضرب-انباشت استفاده می کند (استفاده نمی کند)
دستورالعمل ها در مورد پردازنده های IBM 405، 440، 464 و 476. این دستورالعمل ها هستند
به طور پیش فرض هنگام هدف قرار دادن آن پردازنده ها تولید می شود.

-mdlmzb
-mno-dlmzb
کدی را ایجاد کنید که از جستجوی رشته ای استفاده می کند (از آن استفاده نمی کند). dlmzb دستورالعمل در مورد IBM
پردازنده های 405، 440، 464 و 476. این دستورالعمل به طور پیش فرض زمانی تولید می شود که
هدف قرار دادن آن پردازنده ها

mno-bit-align
-bit-align
در سیستم V.4 و سیستم‌های PowerPC تعبیه‌شده، ساختارها و اتحادیه‌ها را مجبور نمی‌کنند
که حاوی فیلدهای بیتی هستند که باید با نوع پایه فیلد بیتی تراز شوند.

برای مثال، به‌طور پیش‌فرض ساختاری حاوی چیزی جز 8 فیلد بیتی «بدون علامت» است
طول 1 با مرز 4 بایت تراز شده و اندازه آن 4 بایت است. با استفاده از
mno-bit-align، ساختار با یک مرز 1 بایت تراز شده است و اندازه آن 1 بایت است.

-mno-strict-align
-mstrict-align
در سیستم V.4 و سیستم‌های PowerPC تعبیه‌شده، این حافظه غیرهمتراز را فرض نمی‌کنند
مراجع توسط سیستم مدیریت خواهد شد.

-قابل جابجایی
-mno-replaceable
کدی را ایجاد کنید که اجازه می دهد (اجازه نمی دهد) یک فایل اجرایی استاتیک به a منتقل شود
آدرس های مختلف در زمان اجرا یک لودر سیستم PowerPC جاسازی شده ساده باید
کل محتویات "got2." و مکان های 4 بایتی فهرست شده در ".fixup" را جابجا کنید.
بخش، جدولی از آدرس های 32 بیتی ایجاد شده توسط این گزینه. برای این کار، همه
اشیاء مرتبط با هم باید با آنها کامپایل شوند -قابل جابجایی or -mrelocatable-lib.
-قابل جابجایی کد پشته را با مرز 8 بایت تراز می کند.

-mrelocatable-lib
-mno-relocatable-lib
پسندیدن -قابل جابجایی, -mrelocatable-lib یک بخش ".fixup" را ایجاد می کند تا ثابت کند
فایل های اجرایی باید در زمان اجرا جابه جا شوند، اما -mrelocatable-lib استفاده نمی کند
تراز پشته کوچکتر از -قابل جابجایی. اشیاء کامپایل شده با -mrelocatable-lib ممکن است
با اشیاء کامپایل شده با هر ترکیبی از -قابل جابجایی گزینه.

-mno-toc
-mtoc
در سیستم V.4 و سیستم‌های PowerPC تعبیه‌شده، فرض نمی‌کنند که ثبات 2 شامل
یک اشاره گر به یک منطقه جهانی که به آدرس های استفاده شده در برنامه اشاره می کند.

-کم
-mlittle-endian
در System V.4 و سیستم‌های PowerPC تعبیه‌شده، کدهای پردازنده را در اندکی کامپایل می‌کنند.
حالت اندیان در -mlittle-endian گزینه همان است -کم.

-بزرگ
-mbig-endian
در System V.4 و سیستم‌های PowerPC تعبیه‌شده، کدهای پردازنده را در ابعاد بزرگ کامپایل می‌کنند.
حالت اندیان در -mbig-endian گزینه همان است -بزرگ.

-mdynamic-no-pic
در سیستم‌های Darwin و Mac OS X، کد را کامپایل کنید تا قابل جابه‌جایی نباشد، اما همین
مراجع خارجی آن قابل جابجایی هستند. کد به دست آمده برای
برنامه ها، اما نه کتابخانه های مشترک.

-msingle-pic-base
رجیستر مورد استفاده برای آدرس دهی PIC را به عنوان فقط خواندنی در نظر بگیرید، نه اینکه آن را در آن بارگیری کنید
مقدمه برای هر تابع سیستم زمان اجرا مسئول اولیه سازی این است
قبل از شروع اجرا با یک مقدار مناسب ثبت نام کنید.

-mprioritize-restricted-insns=اولویت
این گزینه اولویتی را که به Slot-Slot محدود شده اختصاص داده شده است را کنترل می کند
دستورالعمل ها در طول پاس برنامه ریزی دوم. بحث و جدل اولویت ارزش را می گیرد
0/1/2 برای انتصاب بدون/بالاترین/دومین-بالاترین اولویت برای اسلات اعزام محدود شده است
دستورالعمل.

-msched-costly-dep=نوع_وابستگی
این گزینه کنترل می‌کند که کدام وابستگی‌ها در طول مدت توسط هدف پرهزینه در نظر گرفته شوند
زمان بندی آموزش بحث و جدل نوع_وابستگی یکی از موارد زیر را می گیرد
ارزش های: نه: هیچ وابستگی پرهزینه نیست، تمام: همه وابستگی ها پرهزینه هستند،
true_store_to_load: وابستگی واقعی از فروشگاه به بار پرهزینه است، store_to_load: هرکی
وابستگی از فروشگاه به بار پرهزینه است، عدد: هر وابستگی که برای آن تاخیر >=
عدد پرهزینه است

-minsert-sched-nops=طرح
این گزینه کنترل می کند که کدام طرح درج nop در طول دوم استفاده شود
پاس برنامه ریزی بحث و جدل طرح یکی از مقادیر زیر را می گیرد: نه: نکن
nops را درج کنید لایی: هر گروه اعزامی را که اسلات‌های خالی دارند با nops بپوشانید،
با توجه به گروه بندی زمانبندی regroup_exact: برای اجبار پرهزینه، نوک ها را وارد کنید
سازمان های وابسته به گروه های جداگانه دقیقاً به اندازه‌ای که برای فشار لازم است، نوک را وارد کنید
یک insn برای یک گروه جدید، با توجه به گروه بندی پردازنده تخمین زده شده است. عدد: درج کنید
نه برای وادار کردن مسافرخانه های پرهزینه وابسته به گروه های جداگانه. درج کنید عدد نه به
مجبور کردن یک sn به یک گروه جدید

-mcall-sysv
در سیستم V.4 و سیستم‌های PowerPC جاسازی شده کد را با استفاده از قراردادهای فراخوانی کامپایل می‌کنند
به پیش نویس مارس 1995 رابط باینری برنامه System V، PowerPC پایبند است.
مکمل پردازنده این پیش‌فرض است مگر اینکه GCC را با استفاده از آن پیکربندی کرده باشید
powerpc-*-eabiaix.

-mcall-sysv-eabi
-mcall-eabi
هر دو را مشخص کنید -mcall-sysv و -میابی گزینه.

-mcall-sysv-noeabi
هر دو را مشخص کنید -mcall-sysv و -mno-eabi گزینه.

-mcall-aixdesc
در System V.4 و سیستم‌های PowerPC تعبیه‌شده کد را برای سیستم عامل AIX کامپایل می‌کنند.

-mcall-linux
در System V.4 و سیستم‌های PowerPC تعبیه‌شده کد را برای GNU مبتنی بر لینوکس کامپایل می‌کنند
سیستم.

-mcall-freebsd
در System V.4 و سیستم‌های PowerPC جاسازی‌شده کد را برای عملیات FreeBSD کامپایل می‌کنند
سیستم.

-mcall-netbsd
در سیستم V.4 و سیستم‌های PowerPC تعبیه‌شده کد را برای عملیات NetBSD کامپایل می‌کنند
سیستم.

-mcall-openbsd
در سیستم V.4 و سیستم‌های PowerPC تعبیه‌شده کد را برای عملیات OpenBSD کامپایل می‌کنند
سیستم.

-maix-struct-return
تمام ساختارها را در حافظه برگردانید (همانطور که توسط AIX ABI مشخص شده است).

-msvr4-struct-return
ساختارهای کوچکتر از 8 بایت را در رجیسترها برگردانید (همانطور که توسط SVR4 ABI مشخص شده است).

-mabi=ابی نوع
ABI فعلی را با یک پسوند خاص گسترش دهید یا آن را حذف کنید. معتبر
ارزشها هستند altivec, بدون جایگزین, حرکت, بدون سرعت, ibmlongdouble, ieeelongdouble.

-mabi=spe
ABI فعلی را با پسوندهای SPE ABI گسترش دهید. این ABI پیش فرض را تغییر نمی دهد،
در عوض، پسوندهای SPE ABI را به ABI فعلی اضافه می کند.

-Mabi = NO-SPE
افزونه های Booke SPE ABI را برای ABI فعلی غیرفعال کنید.

-mabi=ibmlongdouble
ABI فعلی را برای استفاده از IBM با دقت طولانی طولانی تغییر دهید. این یک پاور پی سی است
گزینه 32 بیتی SYSV ABI.

-mabi=ieeelongdouble
ABI فعلی را برای استفاده از IEEE با دقت طولانی طولانی تغییر دهید. این یک پاور پی سی است
گزینه 32 بیتی لینوکس ABI.

- نمونه اولیه
-mno-نمونه اولیه
در سیستم V.4 و سیستم‌های PowerPC تعبیه‌شده فرض می‌کنند که همه به آرگومان متغیر فراخوانی می‌شوند
توابع به درستی نمونه اولیه هستند. در غیر این صورت، کامپایلر باید یک دستورالعمل درج کند
قبل از هر تماس غیر نمونه اولیه برای تنظیم یا پاک کردن بیت 6 از ثبت کد شرط
(CR) برای نشان دادن اینکه آیا مقادیر ممیز شناور در ممیز شناور ارسال شده است یا خیر
در صورتی که تابع آرگومان های متغیر را بگیرد، ثبت می کند. با - نمونه اولیه، فقط تماس می گیرد
توابع آرگومان متغیر نمونه اولیه بیت را تنظیم یا پاک می کند.

-msim
در سیستم های PowerPC جاسازی شده، فرض کنید که ماژول راه اندازی فراخوانی شده است sim-crt0.o و
که کتابخانه های استاندارد C هستند libsim.a و libc.a. این پیش فرض برای است
powerpc-*-eabisim پیکربندی.

-mmvme
در سیستم های PowerPC جاسازی شده، فرض کنید که ماژول راه اندازی فراخوانی شده است crt0.o و
کتابخانه های استاندارد C هستند libmvme.a و libc.a.

دیوانه ها
در سیستم های PowerPC جاسازی شده، فرض کنید که ماژول راه اندازی فراخوانی شده است crt0.o و
کتابخانه های استاندارد C هستند libads.a و libc.a.

-چاقوی میلو
در سیستم های PowerPC جاسازی شده، فرض کنید که ماژول راه اندازی فراخوانی شده است crt0.o و
کتابخانه های استاندارد C هستند libyk.a و libc.a.

-mvxworks
در System V.4 و سیستم های PowerPC جاسازی شده، مشخص کنید که در حال کامپایل کردن برای a هستید
سیستم VxWorks

-عضو
در سیستم های PowerPC تعبیه شده، تنظیم کنید PPC_EMB برای نشان دادن، در هدر ELF flags قرار دهید
که eabi جابجایی های طولانی استفاده می شود.

-میابی
-mno-eabi
در System V.4 و سیستم‌های PowerPC تعبیه‌شده به Embedded (نمی‌پیوندند)
رابط باینری برنامه ها (eabi) که مجموعه ای از تغییرات در سیستم V.4 است.
مشخصات فنی. انتخاب کردن -میابی به این معنی است که پشته به اندازه 8 بایت تراز شده است
مرز، یک تابع "__eabi" از "main" برای تنظیم محیط eabi فراخوانی می شود.
و -msdata گزینه می تواند از "r2" و "r13" برای اشاره به دو داده کوچک جداگانه استفاده کند
مناطق. انتخاب کردن -mno-eabi به این معنی است که پشته با یک مرز 16 بایتی تراز شده است، انجام دهید
تابع مقداردهی اولیه را از "main" فراخوانی نکنید و -msdata گزینه فقط استفاده خواهد شد
"r13" برای اشاره به یک منطقه داده کوچک. را -میابی گزینه به طور پیش فرض روشن است اگر شما
GCC را با استفاده از یکی از تنظیمات پیکربندی کرد powerpc*-*-eabi* گزینه.

-msdata=eabi
در System V.4 و سیستم‌های PowerPC تعبیه‌شده، «const» اولیه کوچک جهانی و
داده های استاتیک در sdata2 بخش، که با ثبات "r2" به آن اشاره می کند. کوچک قرار دهید
داده های سراسری و استاتیک غیر "const" اولیه در .sdata بخش، که اشاره شده است
با ثبت "r13". داده های جهانی و ایستا کوچک را که مقداردهی اولیه نشده اند در آن قرار دهید .sbss
بخش، که در مجاورت است .sdata بخش. -msdata=eabi گزینه است
ناسازگار با -قابل جابجایی گزینه. -msdata=eabi گزینه را نیز تنظیم می کند
-عضو گزینه.

-msdata=sysv
در System V.4 و سیستم‌های PowerPC تعبیه‌شده، داده‌های کوچک جهانی و ثابت را در آن قرار دهید
.sdata بخش، که توسط ثبات "r13" به آن اشاره شده است. جهانی کوچک بدون مقدار اولیه قرار دهید
و داده های استاتیک در .sbss بخش، که در مجاورت است .sdata بخش.
-msdata=sysv گزینه ناسازگار با -قابل جابجایی گزینه.

-msdata=پیش‌فرض
-msdata
در سیستم V.4 و سیستم های PowerPC تعبیه شده، اگر -میابی استفاده می شود، کد را کامپایل کنید
as -msdata=eabi، در غیر این صورت کد مشابه را کامپایل کنید -msdata=sysv.

-msdata=داده
در System V.4 و سیستم‌های PowerPC تعبیه‌شده، داده‌های جهانی کوچک را در آن قرار دهید .sdata
بخش. داده های جهانی کوچک و بدون مقدار اولیه را در آن قرار دهید .sbss بخش. استفاده نکن
با این حال، "r13" را برای آدرس دادن به داده های کوچک ثبت کنید. این رفتار پیش فرض است مگر اینکه
دیگر -msdata گزینه ها استفاده می شود.

-msdata=هیچ
-mno-sdata
در سیستم‌های PowerPC تعبیه‌شده، تمام داده‌های جهانی و استاتیک اولیه را در آن قرار دهید .داده ها
بخش، و تمام داده های اولیه در .bss بخش.

-mblock-move-inline-limit=تعداد
درون خطی همه حرکت‌های بلوک (مانند تماس‌های "memcpy" یا کپی‌های ساختاری) کمتر از یا
مساوی با تعداد بایت ها حداقل مقدار برای تعداد 32 بایت در اهداف 32 بیتی و 64 است
بایت در اهداف 64 بیتی مقدار پیش فرض برای هدف خاص است.

-G تعداد
در سیستم‌های PowerPC تعبیه‌شده، موارد کلی و ثابت را کمتر یا مساوی قرار دهید تعداد
بایت در بخش داده های کوچک یا bss به جای داده های معمولی یا بخش bss.
به طور پیش فرض، تعداد 8 است -G تعداد سوئیچ نیز به لینکر ارسال می شود. همه ماژول ها
باید با همان کامپایل شود -G تعداد ارزش.

-mregnames
-mno-regnames
در سیستم V.4 و سیستم‌های PowerPC تعبیه‌شده، نام‌های رجیستر را منتشر نمی‌کنند
خروجی زبان اسمبلی با استفاده از فرم های نمادین

-mlongcall
-mno-longcall
به‌طور پیش‌فرض فرض کنید که همه تماس‌ها دور هستند، بنابراین تماس طولانی‌تری گران‌تر است
توالی مورد نیاز است. این برای تماس های بیشتر از 32 مگابایت مورد نیاز است
(33,554,432 بایت) از مکان فعلی. تماس کوتاهی ایجاد خواهد شد اگر
کامپایلر می داند که تماس نمی تواند آنقدر دور باشد. این تنظیم را می توان با آن لغو کرد
ویژگی تابع "shortcall" یا با "#pragma تماس طولانی(0) ".

برخی از لینکرها قادر به تشخیص تماس های خارج از محدوده و تولید کد چسب هستند
پرواز. در این سیستم ها، تماس های طولانی غیر ضروری هستند و کد کندتری تولید می کنند. مانند
در این نوشته، پیوند دهنده AIX می تواند این کار را انجام دهد، و همچنین پیوند دهنده گنو برای PowerPC/64. آی تی
برنامه ریزی شده است که این ویژگی را برای سیستم های PowerPC 32 بیتی نیز به لینکر گنو اضافه کند.

در سیستم‌های داروین/PPC، "#pragma longcall" "jbsr callee, L42" و یک
"جزیره شاخه" (کد چسب). دو آدرس هدف نشان دهنده تماس گیرنده و the هستند
"جزیره شاخه". پیوند دهنده داروین/PPC آدرس اول را ترجیح می دهد و a را ایجاد می کند
"bl callee" اگر دستور PPC "bl" مستقیماً به تماس گیرنده برسد. در غیر این صورت،
لینکر "bl L42" را برای فراخوانی "جزیره شاخه" تولید می کند. "جزیره شاخه" است
به بدنه تابع فراخوان اضافه شده است. آدرس کامل 32 بیتی را محاسبه می کند
تماس گیرنده و به سمت آن می پرد.

در سیستم های Mach-O (داروین)، این گزینه کامپایلر را به چسب هدایت می کند.
هر تماس مستقیم، و پیوند دهنده داروین تصمیم می گیرد که از آن استفاده کند یا کنار بگذارد.

در آینده، ممکن است باعث شویم GCC در هنگام پیوند دهنده، تمام مشخصات تماس طولانی را نادیده بگیرد
به تولید چسب معروف است.

-mtls-نشانگرها
-mno-tls-نشانگرها
علامت‌گذاری (علامت‌گذاری نکنید) تماس‌های "__tls_get_addr" را با تغییر مکان که تابع را مشخص می‌کند
بحث و جدل. جابجایی به ld اجازه می دهد تا به طور قابل اعتمادی فراخوانی تابع را با آرگومان مرتبط کند
دستورالعمل های راه اندازی برای بهینه سازی TLS، که به نوبه خود به gcc اجازه می دهد تا برنامه ریزی بهتری داشته باشد
تسلسل و توالی.

- نخ
پشتیبانی از multithreading را با نخ ها کتابخانه این گزینه پرچم ها را برای
هم پیش پردازنده و هم پیوند دهنده.

-مندی
-mno-recip
این گزینه GCC را قادر می سازد تا از تخمین متقابل و جذر متقابل استفاده کند
دستورالعمل ها را با مراحل اضافی نیوتن رافسون برای افزایش دقت تخمین بزنید
به جای انجام تقسیم یا جذر و تقسیم برای آرگومان های ممیز شناور. شما
باید از سریع-ریاضی گزینه هنگام استفاده -مندی (یا حداقل
-بهینه‌سازی‌های ریاضی و سرگرم‌کننده, -فقط ریاضی محدود, -مقاومتی-ریاضی و
-fno-به دام انداختن-ریاضی). توجه داشته باشید که در حالی که توان عملیاتی دنباله به طور کلی است
بالاتر از توان عملیاتی دستور غیر متقابل، دقت
توالی را می توان تا 2 ulp کاهش داد (یعنی معکوس 1.0 برابر است با 0.99999994)
برای ریشه های مربع متقابل

-mrecip=انتخاب کردن
این گزینه اجازه می دهد تا کنترل شود که کدام دستورالعمل های برآورد متقابل ممکن است استفاده شود. انتخاب کردن
یک لیست از گزینه ها جدا شده با کاما است که ممکن است قبل از آن یک "!" برای معکوس کردن
گزینه: "all": فعال کردن تمام دستورالعمل های تخمینی، "default": فعال کردن پیش فرض
دستورالعمل، معادل -مندی، "none": غیرفعال کردن تمام دستورالعمل های تخمینی،
معادل -mno-recip; "div": دستورالعمل های تقریب متقابل را برای
دقت تک و دوتایی؛ "divf": فعال کردن تک دقیق متقابل
دستورالعمل های تقریب؛ "divd": فعال کردن متقابل دقت دوگانه
دستورالعمل های تقریب؛ "rsqrt": تقریب ریشه مربع متقابل را فعال کنید
دستورالعمل برای هر دو دقت تک و دو. "rsqrtf": فعال کردن تک
دستورالعمل تقریب دقیق متقابل ریشه مربع. "rsqrtd": فعال کردن
دستورالعمل تقریب ریشه مربعی متقابل با دقت دوگانه.

بنابراین برای مثال، -mrecip=all،!rsqrtd تمام برآورد متقابل را فعال می کند
دستورالعمل ها، به جز دستورالعمل های "FRSQRTE"، "XSRSQRTEDP" و "XVRSQRTEDP"
که محاسبات دوطرفه دوطرفه متقابل را انجام می دهند.

-mrecip-precision
-MNO-REPRIAL-DRECISION
فرض کنید (فرض نکنید) که دستورالعمل های برآورد متقابل بالاتری را ارائه می دهد.
تخمین های دقیقی که توسط PowerPC ABI اجباری شده است. انتخاب کردن -mcpu=power6 or
-mcpu=power7 به صورت خودکار انتخاب می کند -mrecip-precision. مربع با دقت دوگانه
دستورالعمل های برآورد ریشه به طور پیش فرض در ماشین های با دقت پایین تولید نمی شوند،
از آنجایی که آنها تخمینی ارائه نمی کنند که پس از سه مرحله همگرا شود.

-mveclibabi=نوع
نوع ABI را برای استفاده برای بردار کردن ذاتی با استفاده از یک کتابخانه خارجی مشخص می کند.
تنها نوع پشتیبانی شده در حال حاضر "انبوه" است که استفاده از IBM را مشخص می کند
کتابخانه های زیرسیستم شتاب ریاضی (MASS) برای بردارسازی ذاتی با استفاده از
کتابخانه های خارجی GCC در حال حاضر تماس هایی را به "acosd2"، "acosf4"، "acoshd2" ارسال می کند.
"acoshf4"، "asind2"، "asinf4"، "asinhd2"، "asinhf4"، "atan2d2"، "atan2f4"، "atand2"،
"atanf4"، "atanhd2"، "atanhf4"، "cbrtd2"، "cbrtf4"، "cosd2"، "cosf4"، "coshd2"،
"coshf4"، "erfcd2"، "erfcf4"، "erfd2"، "erff4"، "exp2d2"، "exp2f4"، "expd2"، "expf4"،
"expm1d2"، "expm1f4"، "hypotd2"، "hypotf4"، "lgammad2"، "lgammaf4"، "log10d2"،
"log10f4"، "log1pd2"، "log1pf4"، "log2d2"، "log2f4"، "logd2"، "logf4"، "powd2"،
"powf4"، "sind2"، "sinf4"، "sinhd2"، "sinhf4"، "sqrtd2"، "sqrtf4"، "tand2"، "tanf4"،
"tanhd2" و "tanhf4" هنگام تولید کد برای power7. هر دو -ftree-vectorize و
-بهینه‌سازی‌های ریاضی و سرگرم‌کننده باید فعال شوند کتابخانه های MASS باید باشند
در زمان پیوند مشخص شده است.

-مفریز
-mno-friz
زمانی که دستور "friz" را تولید کنید (تولید نکنید). -بهینه‌سازی‌های ریاضی و سرگرم‌کننده
گزینه برای بهینه سازی گرد کردن مقادیر ممیز شناور به عدد صحیح 64 بیتی و
بازگشت به نقطه شناور اگر دستور "friz" همان مقدار را برگرداند
عدد ممیز شناور آنقدر بزرگ است که در یک عدد صحیح قرار نمی گیرد.

توابع -mpointers-to-nested
-mno-pointers-to-nested-functions
برای بارگیری رجیستر زنجیره ایستا کد تولید کنید (تولید نکنید)r11) چه زمانی
فراخوانی از طریق یک اشاره گر در سیستم های لینوکس AIX و 64 بیتی که در آن یک اشاره گر تابع
به یک توصیفگر 3 کلمه ای اشاره می کند که آدرس تابع، مقدار TOC که باید در آن بارگذاری شود را نشان می دهد
ثبت نام r2، و مقدار زنجیره ایستا در رجیستر بارگذاری شود r11.
توابع -mpointers-to-nested به طور پیش فرض روشن است. شما نمی توانید از طریق تماس بگیرید
اشاره گر به توابع تو در تو یا اشاره گر به توابع کامپایل شده در زبان های دیگر که
در صورت استفاده از زنجیره استاتیک استفاده کنید -mno-pointers-to-nested-functions.

-msave-toc-indirect
-mno-save-toc-intrect
برای ذخیره مقدار TOC در محل ذخیره شده پشته کد تولید کنید (تولید نکنید).
اگر تابع از طریق یک اشاره گر در AIX و 64 بیتی فراخوانی می کند، در مقدمه تابع
سیستم های لینوکس اگر مقدار TOC در مقدمه ذخیره نشود، درست قبل از آن ذخیره می شود
تماس از طریق اشاره گر در -mno-save-toc-intrect گزینه پیش فرض است.

RX گزینه

این گزینه های خط فرمان برای اهداف RX تعریف شده اند:

-m64bit-دبل
-m32bit-دبل
نوع داده "دو" را 64 بیتی کنید (-m64bit-دبل) یا 32 بیت (-m32bit-دبل)
در اندازه. پیش فرض است -m32bit-دبل. توجه داشته باشید سخت افزار ممیز شناور RX فقط کار می کند
در مقادیر 32 بیتی، به همین دلیل است که پیش فرض است -m32bit-دبل.

-fpu
-nofpu
را قادر می سازد (-fpu) یا غیرفعال می کند (-nofpu) استفاده از سخت افزار ممیز شناور RX. را
پیش فرض برای RX600 سری و غیر فعال برای RX200 سری.

دستورالعمل های ممیز شناور فقط برای مقادیر ممیز شناور 32 بیتی تولید می شوند
با این حال، بنابراین اگر -m64bit-دبل گزینه در حال استفاده است، سپس سخت افزار FPU وجود نخواهد داشت
برای دونفره استفاده می شود

توجه داشته باشید اگر -fpu سپس گزینه فعال می شود -بهینه‌سازی‌های ریاضی و سرگرم‌کننده نیز فعال است
بطور خودکار. این به این دلیل است که دستورالعمل های RX FPU خود ناامن هستند.

-mcpu=نام
نوع CPU RX مورد نظر را انتخاب می کند. در حال حاضر سه نوع پشتیبانی می شود
عمومی RX600 و RX200 سخت افزار سری و خاص RX610 CPU. پیش فرض است
RX600.

تنها تفاوت بین RX600 و RX610 این است که RX610 را پشتیبانی نمی کند
دستورالعمل "MVTIPL".

La RX200 سری واحد ممیز شناور سخت افزاری ندارد و غیره -nofpu فعال شده است
به طور پیش فرض زمانی که این نوع انتخاب شده است.

-MBIG-ANDIAN-DATA
داده های کوچک انددیان
داده ها (اما نه کد) را در قالب big-endian ذخیره کنید. پیش فرض است
داده های کوچک انددیان، یعنی برای ذخیره داده ها در قالب کمی اندین.

-msmall-data-limit =N
حداکثر اندازه را بر حسب بایت از متغیرهای سراسری و ثابتی که می توان قرار داد را مشخص می کند
به ناحیه داده های کوچک استفاده از ناحیه کوچک داده می تواند منجر به کوچکتر و سریعتر شود
کد، اما اندازه منطقه محدود است و اطمینان از آن به عهده برنامه نویس است
منطقه سرریز نمی شود همچنین زمانی که از ناحیه داده های کوچک یکی از RX ها استفاده می شود
ثبات ها (معمولا "r13") برای استفاده با اشاره به این ناحیه رزرو شده است، بنابراین خیر
مدت زمان بیشتری برای استفاده توسط کامپایلر در دسترس است. این می تواند منجر به کندتر و/یا بزرگتر شود
کد اگر متغیرهایی که زمانی می توانستند در رجیستر رزرو شده نگه داشته شوند، اکنون هستند
را به پشته هل داد.

توجه داشته باشید، متغیرهای رایج (متغیرهایی که مقداردهی اولیه نشده اند) و ثابت هستند
در ناحیه داده های کوچک قرار نمی گیرند زیرا به بخش های دیگر در آن اختصاص داده شده اند
خروجی قابل اجرا

مقدار پیش فرض صفر است که این ویژگی را غیرفعال می کند. توجه داشته باشید، این ویژگی نیست
به طور پیش فرض با سطوح بهینه سازی بالاتر فعال شده است (-O2 و غیره) به دلیل
اثرات مخرب بالقوه رزرو ثبت نام بستگی به برنامه نویس داره
برای آزمایش و کشف اینکه آیا این ویژگی برای برنامه آنها مفید است یا خیر. دیدن
شرح -بی حال گزینه ای برای توضیح نحوه ثبت نام واقعی
نگه دارید نشانگر منطقه داده کوچک انتخاب شده است.

-msim
-mno-sim
از زمان اجرا شبیه ساز استفاده کنید. پیش فرض این است که از زمان اجرا خاص برد libgloss استفاده کنید.

-mas100-syntax
-mno-as100-syntax
هنگام تولید خروجی اسمبلر از نحوی استفاده کنید که با AS100 Renesas سازگار است.
مونتاژ کننده این نحو نیز می تواند توسط اسمبلر GAS اداره شود اما مقداری دارد
محدودیت ها بنابراین ایجاد آن گزینه پیش فرض نیست.

-mmax-constant-size=N
حداکثر اندازه ثابت را بر حسب بایت مشخص می کند که می تواند به عنوان عملوند در استفاده شود
یک دستورالعمل RX اگرچه مجموعه دستورات RX ثابت هایی تا 4 را مجاز می کند
طول بایت ها برای استفاده در دستورالعمل ها، مقدار طولانی تر برابر با طولانی تر است
دستورالعمل بنابراین در برخی شرایط محدود کردن اندازه آن می تواند مفید باشد
ثابت هایی که در دستورالعمل ها استفاده می شوند. ثابت هایی که خیلی بزرگ هستند در عوض هستند
در یک استخر ثابت قرار داده شده و از طریق غیر جهت ثبت ارجاع داده می شود.

ارزش N می تواند بین 0 و 4 باشد. مقدار 0 (پیش فرض) یا 4 به این معنی است
ثابت با هر اندازه مجاز است.

-آرامش کن
فعال کردن آرامش پیوند دهنده آرامش پیوند دهنده فرآیندی است که در آن پیوند دهنده این کار را انجام می دهد
تلاش برای کاهش اندازه یک برنامه با یافتن نسخه های کوتاه تر از انواع مختلف
دستورالعمل ها. به طور پیش فرض غیرفعال است.

-mint-register=N
تعداد رجیسترهایی را که باید برای عملکردهای کنترل کننده وقفه سریع رزرو شوند، مشخص کنید. را
ارزش N می تواند بین 0 و 4 باشد. مقدار 1 به این معنی است که ثبات "r13" خواهد بود
برای استفاده انحصاری از کنترل کننده های وقفه سریع محفوظ است. مقدار 2 ذخیره
"r13" و "r12". مقدار 3 ذخیره "r13"، "r12" و "r11" و مقدار 4
"r13" تا "r10" را ذخیره می کند. مقدار 0، به طور پیش فرض، هیچ یک را رزرو نمی کند
ثبت می کند.

-مساوه-در مداخلات
مشخص می کند که توابع کنترل کننده وقفه باید رجیستر انباشت کننده را حفظ کند.
این فقط در صورتی ضروری است که کد معمولی ممکن است برای مثال از رجیستر انباشت کننده استفاده کند
زیرا ضرب های 64 بیتی را انجام می دهد. پیش فرض نادیده گرفتن انباشت کننده است
زیرا این باعث می شود که کنترل کننده های وقفه سریعتر شوند.

-بی حال
-mno-pid
تولید داده های مستقل از موقعیت را فعال می کند. وقتی فعال است هر گونه دسترسی به
داده های ثابت از طریق یک آفست از یک آدرس پایه که در یک ثبات نگهداری می شود انجام می شود. این
اجازه می دهد تا مکان داده های ثابت در زمان اجرا بدون نیاز تعیین شود
فایل اجرایی برای جابجایی، که یک مزیت برای برنامه های جاسازی شده با تنگ است
محدودیت های حافظه داده هایی که قابل تغییر هستند تحت تأثیر این گزینه قرار نمی گیرند.

توجه داشته باشید، با استفاده از این ویژگی یک ثبات، معمولاً "r13" برای داده های ثابت رزرو می کند
آدرس پایه این می تواند منجر به کد کندتر و/یا بزرگتر شود، به خصوص در کدهای پیچیده
توابع.

ثبت واقعی انتخاب شده برای نگهداری آدرس پایگاه داده ثابت بستگی به این دارد که آیا
la -msmall-data-limit و / یا - ثبت نام ضرابخانه گزینه های خط فرمان فعال هستند.
با شروع ثبت "r13" و ادامه به سمت پایین، ابتدا رجیسترها تخصیص داده می شوند
برای برآوردن الزامات - ثبت نام ضرابخانه، و سپس -بی حال و در نهایت
-msmall-data-limit. بنابراین ممکن است برای ثبت منطقه داده کوچک "r8" باشد.
اگر هر دو -mint-register=4 و -بی حال در خط فرمان مشخص می شوند.

به طور پیش فرض این ویژگی فعال نیست. پیش فرض را می توان از طریق بازیابی کرد -mno-pid
گزینه خط فرمان

توجه داشته باشید: گزینه خط فرمان عمومی GCC -تثبیت شده-REG اهمیت ویژه ای برای RX دارد
پورت زمانی که با ویژگی تابع "وقفه" استفاده می شود. این ویژگی نشان می دهد a
عملکردی که برای پردازش وقفه های سریع در نظر گرفته شده است. شورای همکاری خلیج فارس مطمئن خواهد شد که فقط از آن استفاده می کند
"r10"، "r11"، "r12" و/یا "r13" را ثبت می‌کند و تنها به شرطی که استفاده عادی از
ثبت های مربوطه از طریق محدود شده اند -تثبیت شده-REG or - ثبت نام ضرابخانه
گزینه های خط فرمان

S / 390 و سری z گزینه

اینها هستند -m گزینه های تعریف شده برای معماری S/390 و zSeries.

-mhard-float
-msoft-float
از دستورالعمل های ممیز شناور سخت افزاری و ثبت نام های شناور استفاده کنید (استفاده نکنید)
عملیات نقطه ای چه زمانی -msoft-float مشخص شده است، توابع در libgcc.a استفاده خواهد شد
برای انجام عملیات ممیز شناور چه زمانی -mhard-float مشخص شده است، کامپایلر
دستورالعمل های ممیز شناور IEEE را تولید می کند. این پیش فرض است.

-mhard-dfp
-mno-hard-dfp
از دستورالعمل های سخت افزاری اعشاری ممیز شناور برای اعشار استفاده کنید (استفاده نکنید)
عملیات ممیز شناور چه زمانی -mno-hard-dfp مشخص شده است، توابع در libgcc.a
برای انجام عملیات ممیز شناور اعشاری استفاده خواهد شد. چه زمانی -mhard-dfp is
مشخص شده، کامپایلر دستورالعمل های سخت افزاری ممیز شناور اعشاری را تولید می کند. این
پیش فرض برای است -مارس=z9-ec و یا بالاتر.

-mlong-double-64
-mlong-double-128
این سوئیچ ها اندازه "دبل طولانی" را کنترل می کنند. اندازه 64 بیت باعث می شود
نوع "طولانی دوبل" معادل نوع "دو". این پیش فرض است.

- زنجیره پشتی
-mno-backchain
آدرس فریم تماس گیرنده را به عنوان نشانگر پشتیبان در آن ذخیره کنید (ذخیره نکنید).
قاب پشته callee. ممکن است به یک Backchain نیاز باشد تا امکان اشکال زدایی با استفاده از ابزارهایی وجود داشته باشد
اطلاعات فریم تماس DWARF-2 را درک نمی کنم. چه زمانی -mno-packed-stack هست در
در اثر، نشانگر backchain در پایین قاب پشته ذخیره می شود. چه زمانی
-mpacked-stack در واقع، زنجیره پشتی در بالاترین کلمه قرار می گیرد
96/160 بایت منطقه ذخیره ثبت نام.

به طور کلی، کد کامپایل شده با - زنجیره پشتی با کد کامپایل شده با تماس سازگار است
-mmo-backchain; با این حال، استفاده از backchain برای اهداف اشکال زدایی معمولاً نیاز دارد
که کل باینری با آن ساخته شده است - زنجیره پشتی. توجه داشته باشید که ترکیبی از
- زنجیره پشتی, -mpacked-stack و -mhard-float پشتیبانی نمی شود. به منظور ساخت یک
استفاده از کرنل لینوکس -msoft-float.

پیش فرض این است که زنجیره پشتی را حفظ نکنید.

-mpacked-stack
-mno-packed-stack
از طرح بندی پشته بسته بندی شده استفاده کنید (استفاده نکنید). چه زمانی -mno-packed-stack مشخص شده است،
کامپایلر از تمام فیلدهای منطقه ذخیره 96/160 بایتی فقط برای آنها استفاده می کند
هدف پیش فرض؛ فیلدهای استفاده نشده هنوز فضای پشته را اشغال می کنند. چه زمانی -mpacked-stack is
مشخص شده، شیارهای ذخیره رجیستر به صورت متراکم در بالای ذخیره رجیستر بسته بندی شده اند
حوزه؛ فضای بلااستفاده برای مقاصد دیگر مورد استفاده مجدد قرار می گیرد که امکان استفاده کارآمدتر را فراهم می کند
فضای پشته موجود با این حال، زمانی که - زنجیره پشتی همچنین در عمل، بالاترین
کلمه ناحیه ذخیره همیشه برای ذخیره سازی backchain و آدرس بازگشت استفاده می شود
ثبت همیشه دو کلمه در زیر زنجیره پشتی ذخیره می شود.

تا زمانی که پشته فریم پشته استفاده نمی شود، کد تولید شده با -mpacked-stack
با کد تولید شده با تماس سازگار است -mno-packed-stack. توجه داشته باشید که برخی غیر از FSF
نسخه GCC 2.95 برای S/390 یا کد zSeries تولید شده که از قاب پشته استفاده می کند
backchain در زمان اجرا، نه فقط برای اهداف اشکال زدایی. چنین کدی فراخوانی نیست-
سازگار با کد کامپایل شده با -mpacked-stack. همچنین توجه داشته باشید که ترکیبی از
- زنجیره پشتی, -mpacked-stack و -mhard-float پشتیبانی نمی شود. به منظور ساخت یک
استفاده از کرنل لینوکس -msoft-float.

پیش فرض این است که از طرح بندی پشته های بسته بندی شده استفاده نکنید.

-msmall-exec
-mno-small-exec
با استفاده از دستورالعمل "bras" برای انجام زیر روال کد تولید کنید (یا تولید نکنید).
تماس می گیرد. این تنها در صورتی قابل اعتماد عمل می کند که حجم کل قابل اجرا از 64k تجاوز نکند.
به طور پیش فرض استفاده از دستورالعمل "basr" به جای آن است که این را ندارد
محدودیت

-64
-31
چه زمانی -31 مشخص شده است، کدی مطابق با GNU/Linux برای S/390 ABI ایجاد کنید. چه زمانی
-64 مشخص شده است، کدی مطابق با گنو/لینوکس برای zSeries ABI تولید کنید. این
به ویژه به GCC اجازه می دهد تا دستورالعمل های 64 بیتی را تولید کند. برای s390 اهداف،
پیش فرض است -31، در حالی که s390x پیش فرض را هدف قرار می دهد -64.

-مزارچ
-مسا
چه زمانی -مزارچ مشخص شده است، کد را با استفاده از دستورالعمل های موجود در آن تولید کنید
z/معماری. چه زمانی -مسا مشخص شده است، با استفاده از دستورالعمل ها کد تولید کنید
موجود در ESA/390. توجه داشته باشید که -مسا امکان پذیر نیست با -64. هنگام تولید
کد مطابق با GNU/Linux برای S/390 ABI، پیش‌فرض است -مسا. هنگام تولید
کد مطابق با گنو/لینوکس برای zSeries ABI، پیش‌فرض است -مزارچ.

-mmvcle
-mno-mvcle
با استفاده از دستورالعمل "mvcle" برای اجرای بلوک، کد تولید کنید (یا تولید نکنید).
حرکت می کند. چه زمانی -mno-mvcle مشخص شده است، به جای آن از یک حلقه "mvc" استفاده کنید. این پیش فرض است
مگر اینکه برای اندازه بهینه شود.

-mdebug
-mno-debug
هنگام کامپایل، اطلاعات دیباگ اضافی را چاپ کنید (یا چاپ نکنید). پیش فرض است
تا اطلاعات اشکال زدایی چاپ نشود.

-مارس=نوع cpu
کدی را ایجاد کنید که روی آن اجرا شود نوع cpu، که نام سیستمی است که نشان دهنده a است
نوع پردازنده خاص مقادیر ممکن برای نوع cpu هستند g5, g6, z900, z990, z9-109,
z9-ec و z10. هنگام تولید کد با استفاده از دستورالعمل های موجود در
z/Architecture، پیش فرض است -مارس=z900. در غیر این صورت، پیش فرض است -مارس=g5.

-mtune=نوع cpu
تنظیم کنید نوع cpu همه چیز در مورد کد تولید شده قابل اجرا است، به جز ABI
و مجموعه دستورالعمل های موجود لیست از نوع cpu مقادیر مانند for است
-مارس. پیش فرض مقداری است که برای آن استفاده می شود -مارس.

-mtpf-trace
-MNO-TPF-TRACE
کدی را ایجاد کنید که در شاخه‌های خاص سیستم عامل TPF برای ردیابی روتین‌ها اضافه می‌کند (افزوده نمی‌کند)
در سیستم عامل این گزینه به طور پیش فرض خاموش است، حتی در هنگام کامپایل کردن برای
سیستم عامل TPF

-mfused-madd
-mno-fused-madd
کدی را ایجاد کنید که از ضرب و انباشت ممیز شناور استفاده می کند (از آن استفاده نمی کند).
دستورالعمل ها. این دستورالعمل ها به صورت پیش فرض در صورت نقطه شناور سخت افزاری تولید می شوند
استفاده می شود.

-mwarn-framesize=اندازه قاب
در صورتی که عملکرد فعلی از اندازه قاب داده شده بیشتر شود، هشدار ارسال کنید. زیرا این است
یک بررسی زمان کامپایل، لازم نیست هنگام اجرای برنامه مشکلی واقعی ایجاد کند. آی تی
هدف آن شناسایی توابعی است که به احتمال زیاد باعث سرریز پشته می شوند. این است
برای استفاده در محیطی با اندازه پشته محدود به عنوان مثال هسته لینوکس مفید است.

-mwarn-dynamicstack
اگر تابع alloca را فراخوانی کند یا از آرایه‌هایی با اندازه پویا استفاده کند، یک هشدار صادر می‌کند. این هست
به طور کلی یک ایده بد با اندازه پشته محدود است.

-mstack-guard=پشته نگهبان
-mstack-size=به اندازه پشته
اگر این گزینه‌ها ارائه شوند، بک‌اند s390 دستورالعمل‌های اضافی را در قسمت ارسال می‌کند
پیش درآمد تابعی که اگر اندازه پشته باشد، یک دام را راه اندازی می کند پشته نگهبان بایت بالا
la به اندازه پشته (به یاد داشته باشید که پشته در s390 به سمت پایین رشد می کند). اگر پشته نگهبان
گزینه حذف شده است کوچکترین قدرت 2 بزرگتر از اندازه فریم از کامپایل
تابع انتخاب شده است. این گزینه ها برای کمک به اشکال زدایی پشته استفاده می شوند
مشکلات سرریز کد ساطع شده اضافی فقط باعث سربار کمی می شود و
از این رو می توان در تولید مانند سیستم هایی بدون عملکرد بیشتر نیز استفاده کرد
تنزل. مقادیر داده شده باید توان های دقیق 2 و باشند به اندازه پشته باید باشد
بزرگتر از پشته نگهبان بدون بیش از 64 هزار به منظور کارآمدی اضافی
کد این فرض را ایجاد می کند که پشته در یک آدرس تراز شده با مقدار شروع می شود
داده شده توسط به اندازه پشته. پشته نگهبان گزینه فقط می تواند در ارتباط با
به اندازه پشته.

نمره گزینه

این گزینه ها برای اجرای امتیاز تعریف شده اند:

-meb
کامپایل کد برای حالت big-endian. این پیش فرض است.

-مل
کد را برای حالت کمی اندین کامپایل کنید.

-mnhwloop
دستور تولید bcnz را غیرفعال کنید.

-مولس
تولید بار غیر تراز و دستورالعمل ذخیره را فعال کنید.

-mmac
استفاده از دستورالعمل‌های multiply-cumulate را فعال کنید. به طور پیش فرض غیرفعال است.

-mscore5
SCORE5 را به عنوان معماری هدف مشخص کنید.

-mscore5u
SCORE5U معماری هدف را مشخص کنید.

-mscore7
SCORE7 را به عنوان معماری هدف مشخص کنید. این پیش فرض است.

-mscore7d
SCORE7D را به عنوان معماری هدف مشخص کنید.

SH گزینه

اینها -m گزینه هایی برای پیاده سازی SH تعریف شده است:

-1 کد برای SH1 تولید کنید.

-2 کد برای SH2 تولید کنید.

-m2e
کد برای SH2e ایجاد کنید.

-m2a-nofpu
برای SH2a بدون FPU یا برای SH2a-FPU کد ایجاد کنید به گونه ای که
واحد ممیز شناور استفاده نمی شود.

-m2a-تنها
کدی برای SH2a-FPU ایجاد کنید، به گونه ای که ممیز شناور با دقت دوگانه وجود نداشته باشد.
عملیات استفاده می شود.

-m2a-تک
ایجاد کد برای SH2a-FPU با فرض اینکه واحد ممیز شناور با دقت تک است.
حالت به طور پیش فرض

-m2a
ایجاد کد برای SH2a-FPU با فرض اینکه واحد ممیز شناور با دقت مضاعف است.
حالت به طور پیش فرض

-3 کد برای SH3 تولید کنید.

-m3e
کد برای SH3e ایجاد کنید.

-m4-nofpu
کد برای SH4 بدون واحد ممیز شناور ایجاد کنید.

-m4-تنها
ایجاد کد برای SH4 با واحد ممیز شناور که فقط از تک
محاسبات دقیق

-m4-تک
با فرض اینکه واحد ممیز شناور در حالت تک دقیق است، کدی برای SH4 ایجاد کنید
به صورت پیش فرض.

-4 کد برای SH4 تولید کنید.

-m4a-nofpu
کد برای SH4al-dsp یا برای SH4a به گونه ای ایجاد کنید که ممیز شناور
واحد استفاده نمی شود

-m4a-تنها
کدی برای SH4a ایجاد کنید، به گونه ای که ممیز شناور با دقت دوگانه وجود نداشته باشد
عملیات استفاده می شود.

-m4a-تک
با فرض اینکه واحد ممیز شناور تک دقیق است، کدی برای SH4a ایجاد کنید
حالت به طور پیش فرض

-m4a
کد برای SH4a تولید کنید.

-m4al
مثل -m4a-nofpu، با این تفاوت که به طور ضمنی می گذرد -dsp به مونتاژ کننده شورای همکاری خلیج فارس
در حال حاضر هیچ دستورالعمل DSP تولید نمی کند.

-MB کد را برای پردازنده در حالت big-endian کامپایل کنید.

میلی لیتر کامپایل کد برای پردازنده در حالت کمی اندین.

-mdalign
تراز دو برابر در مرزهای 64 بیتی. توجه داشته باشید که این امر قراردادهای فراخوانی را تغییر می دهد،
و بنابراین برخی از توابع از کتابخانه استاندارد C کار نمی کنند مگر اینکه شما دوباره کامپایل کنید
آن را ابتدا با -mdalign.

-آرامش کن
در صورت امکان برخی از مراجع آدرس را در زمان پیوند کوتاه کنید. از گزینه linker استفاده می کند
-آروم باش.

بزرگ
از افست های 32 بیتی در جداول "سوئیچ" استفاده کنید. پیش فرض استفاده از افست های 16 بیتی است.

-mbitops
استفاده از دستورالعمل های دستکاری بیت را در SH2A فعال کنید.

-mfmovd
استفاده از دستورالعمل "fmovd" را فعال کنید. بررسی -mdalign برای محدودیت های تراز

-میتاچی
مطابق با قراردادهای تماس تعریف شده توسط Renesas.

-مرنساس
مطابق با قراردادهای تماس تعریف شده توسط Renesas.

-mno-renesas
با کنوانسیون‌های فراخوانی که قبل از کنوانسیون‌های Renesas برای GCC تعریف شده‌اند، پیروی کنید
در دسترس بودند. این گزینه پیش فرض برای تمام اهداف زنجیره ابزار SH است.

-mnomacsave
ثبت "MAC" را به عنوان call-clobbered علامت گذاری کنید، حتی اگر -میتاچی داده شده است.

-مییی
-mno-ieee
انطباق IEEE را در مقایسه با ممیز شناور کنترل کنید، که بر روی مدیریت تأثیر می گذارد
مواردی که نتیجه مقایسه نامرتب است. به صورت پیش فرض -مییی is
به طور ضمنی فعال شده است. اگر -فقط ریاضی محدود فعال شده است -mno-ieee به طور ضمنی تنظیم شده است،
که منجر به مقایسه سریعتر ممیز شناور بیشتر برابر و کمتر برابر می شود. در
تنظیمات ضمنی را می توان با مشخص کردن یکی از آنها لغو کرد -مییی or -mno-ieee.

-minline-ic_invalidate
کد درون خطی برای باطل کردن ورودی های کش دستورالعمل ها پس از تنظیم عملکرد تودرتو
ترامپولین ها اگر -musermode فعال باشد و انتخاب شده باشد، این گزینه تاثیری ندارد
گزینه تولید کد (مثلا -m4) اجازه استفاده از دستورالعمل icbi را نمی دهد. اگر
گزینه تولید کد انتخاب شده اجازه استفاده از دستورالعمل icbi را نمی دهد،
و -musermode در کار نیست، کد خطی دستور را دستکاری می کند
آرایه آدرس کش به طور مستقیم با نوشتن انجمنی. این نه تنها نیاز دارد
حالت ممتاز، اما اگر خط کش از طریق TLB نگاشت شده باشد نیز با شکست مواجه خواهد شد
و بدون نقشه شده است.

-نادرست کردن
اندازه و مکان دستورالعمل را در کد اسمبلی قرار دهید.

-mpadstruct
این گزینه منسوخ شده است. این ساختارها را به مضرب 4 بایت اضافه می کند که این است
با SH ABI ناسازگار است.

-msoft-atomic
ایجاد توالی اتمی نرم افزار gUSA سازگار با گنو/لینوکس برای داخلی اتمی
کارکرد. دنباله های اتمی تولید شده نیاز به پشتیبانی از وقفه دارند /
کدهای کنترل استثنایی سیستم و فقط برای سیستم های تک هسته ای مناسب هستند.
آنها در سیستم های چند هسته ای به درستی عمل نمی کنند. این گزینه توسط
به طور پیش فرض زمانی که هدف "sh-*-linux*" باشد. برای جزئیات بیشتر در مورد داخلی اتمی
توابع را ببینید __اتمی ساخته شده است.

-mspace
به جای سرعت، فضا را بهینه کنید. ضمنی توسط -اواس.

ترجیح دادن
هنگام تولید کد مستقل از موقعیت، با استفاده از Global Offset فراخوانی تابع را ارسال کنید
جدول به جای جدول پیوند رویه.

-musermode
کد فقط حالت ممتاز تولید نکنید. به معنای -mno-inline-ic_invalidate در صورتی است
کد درون خطی در حالت کاربر کار نمی کند. این حالت پیش فرض زمانی است که هدف قرار دارد
"sh-*-linux*".

-MultCost =عدد
هزینه را برای یک insn چند برابری در نظر بگیرید.

-mdiv=استراتژی
استراتژی تقسیم را برای استفاده برای عملیات تقسیم عدد صحیح تنظیم کنید. برای SHmedia
استراتژی می تواند یکی از موارد زیر باشد:

fp عملیات را در ممیز شناور انجام می دهد. این تاخیر بسیار بالایی دارد، اما نیاز دارد
فقط چند دستورالعمل، بنابراین اگر کد شما به اندازه کافی باشد، ممکن است انتخاب خوبی باشد
ILP با قابلیت بهره برداری آسان به کامپایلر اجازه می دهد تا ممیز شناور را برنامه ریزی کند
دستورالعمل همراه با دستورالعمل های دیگر تقسیم بر صفر باعث الف می شود
استثنای ممیز شناور

INV از عملیات اعداد صحیح برای محاسبه معکوس مقسوم علیه و سپس استفاده می کند
سود تقسیمی را در معکوس ضرب می کند. این استراتژی اجازه می دهد تا CSE و بالا بردن
از محاسبه معکوس تقسیم بر صفر یک نتیجه نامشخص را محاسبه می کند،
اما به دام نمی اندازد.

inv:minlat
گونه ای از INV که در آن، اگر هیچ فرصت CSE یا بالا بردن یافت نشد، یا اگر
کل عملیات به همان مکان بالا رفته است، آخرین مراحل
محاسبات معکوس با ضرب نهایی در هم تنیده می شوند تا کل را کاهش دهند
تأخیر، به قیمت استفاده از چند دستورالعمل بیشتر، و در نتیجه ارائه کمتر
فرصت های زمان بندی با کدهای دیگر

صدا
تابع کتابخانه ای را فراخوانی می کند که معمولاً آن را پیاده سازی می کند inv:minlat استراتژی این
تراکم کد بالایی را برای کامپایل های "m5-*media-nofpu" می دهد.

call2
از نقطه ورودی متفاوتی از تابع کتابخانه یکسان استفاده می کند، جایی که فرض می کند a
اشاره گر به یک جدول جستجو قبلاً تنظیم شده است که بار اشاره گر را نشان می دهد
به CSE و بهینه سازی افزایش کد.

inv: call
inv:call2
inv:fp
استفاده از INV الگوریتم برای تولید کد اولیه، اما اگر کد باقی بماند
بهینه نشده، به صدا, call2، یا fp استراتژی ها، به ترتیب. توجه داشته باشید که
اثر جانبی بالقوه به دام انداختن تقسیم بر صفر توسط یک جداگانه انجام می شود
دستورالعمل، بنابراین ممکن است که تمام دستورالعمل های اعداد صحیح بالا بروند،
اما نشانگر عوارض جانبی در جایی که هست باقی می ماند. یک نوترکیب به
عملیات ممیز شناور یا تماس در آن صورت امکان پذیر نیست.

inv20u
inv20l
انواع از inv:minlat استراتژی در صورتی که محاسبه معکوس باشد
از ضرب جدا نمی شوند، آنها تقسیم را در جایی که سود تقسیم می کند سرعت می بخشند
به 20 بیت (علامت بعلاوه در صورت لزوم) با قرار دادن یک آزمایش برای رد شدن از تعدادی از
عملیات در این مورد؛ این آزمون باعث کاهش سرعت سود سهام بیشتر می شود.
inv20u فرض می کند که چنین سود سهام کوچکی بعید است، و inv20l
احتمال می دهد.

برای اهدافی غیر از SHmedia استراتژی می تواند یکی از موارد زیر باشد:

call-div1
تابع کتابخانه ای را فراخوانی می کند که از دستورالعمل تقسیم تک مرحله ای "div1" استفاده می کند
عملیات را انجام دهد. تقسیم بر صفر یک نتیجه نامشخص را محاسبه می کند و انجام می دهد
تله نیست این پیش فرض است به جز SH4، SH2A و SHcompact.

call-fp
تابع کتابخانه ای را فراخوانی می کند که عملیات را با دقت مضاعف شناور انجام می دهد
نقطه. تقسیم بر صفر باعث استثنای ممیز شناور می شود. این پیش فرض است
برای SHcompact با FPU. مشخص کردن این مورد برای اهدافی که دوتایی ندارند
Precision FPU به طور پیش فرض روی "call-div1" خواهد بود.

میز تماس
تابع کتابخانه ای را فراخوانی می کند که از یک جدول جستجو برای مقسوم علیه های کوچک استفاده می کند
دستورالعمل "div1" با تمایز حروف برای مقسوم‌گیرنده‌های بزرگتر. تقسیم بر صفر
یک نتیجه نامشخص را محاسبه می کند و به دام نمی اندازد. این پیش فرض برای SH4 است.
تعیین این مورد برای اهدافی که دستورالعمل های تغییر پویا ندارند
به طور پیش فرض "call-div1" است.

هنگامی که یک استراتژی تقسیم مشخص نشده است، استراتژی پیش فرض انتخاب می شود
بر اساس هدف فعلی برای SH2A استراتژی پیش فرض استفاده از "divs" و
دستورالعمل های "divu" به جای فراخوانی تابع کتابخانه.

انباشته-خروجی-آرگ
یک بار برای آرگومان های خروجی در پرولوگ تابع به جای اطراف، فضا رزرو کنید
هر تماس به طور کلی برای عملکرد و اندازه مفید است. همچنین برای باز کردن نیاز است
برای جلوگیری از تغییر قاب پشته در اطراف کد شرطی.

-mdivsi3_libfunc=نام
نام تابع کتابخانه مورد استفاده برای تقسیم امضا شده 32 بیتی را روی آن تنظیم کنید نام. این
فقط نام مورد استفاده در تماس و استراتژی های تقسیم تماس inv:call و
کامپایلر همچنان انتظار دارد همان مجموعه‌های ورودی/خروجی/ثبت‌های clobbered را داشته باشد
این گزینه وجود نداشت

-Mfixed-Range =محدوده ثبت نام
کدی را ایجاد کنید که محدوده رجیستر داده شده را به عنوان ثبات ثابت در نظر می گیرد. ثبت ثابت
یکی از مواردی است که تخصیص دهنده ثبات نمی تواند از آن استفاده کند. این در هنگام کامپایل کرنل مفید است
کد محدوده رجیستر به صورت دو رجیستر که با یک خط تیره از هم جدا شده اند، مشخص می شود. چندگانه
محدوده های ثبت را می توان با کاما از هم جدا کرد.

-madjust-unroll
باز کردن دریچه گاز برای جلوگیری از کوبیدن رجیسترهای هدف. این گزینه فقط یک
اگر پایه کد gcc از قلاب هدف TARGET_ADJUST_UNROLL_MAX پشتیبانی کند تأثیر می گذارد.

-مخاطبی-مخاطبی
استفاده از حالت آدرس دهی نمایه شده را برای SHmedia32/SHcompact فعال کنید. این فقط
اگر سخت‌افزار و/یا سیستم‌عامل معنایی 32 بیتی را برای نمایه‌سازی‌شده پیاده‌سازی کنند، ایمن است.
حالت آدرس دهی این معماری امکان اجرای پردازنده های 64 بیتی را فراهم می کند
MMU، که سیستم عامل می تواند از آن برای دریافت آدرس 32 بیتی استفاده کند، اما از آنجایی که سخت افزار فعلی وجود ندارد
پیاده سازی از این یا هر روش دیگری برای ایمن کردن حالت آدرس دهی نمایه شده پشتیبانی می کند
برای استفاده در ABI 32 بیتی، پیش فرض است -mno-indexed-addressing.

-mgettrcost=عدد
هزینه در نظر گرفته شده برای دستور gettr را تنظیم کنید عدد. پیش فرض 2 اگر است
-mpt-fixed در حال اجرا است، 100 در غیر این صورت.

-mpt-fixed
فرض کنید دستورالعمل های pt* به دام نمی افتند. این به طور کلی برنامه ریزی بهتری ایجاد می کند
کد، اما روی سخت افزار فعلی ناامن است. تعریف فعلی معماری می گوید
که ptabs و ptrel زمانی که هدف و با 3 برابر 3 باشد به دام می اندازند
اثر غیر عمدی ناامن کردن برنامه ریزی ptabs / ptrel قبل از یک شاخه، یا
آن را از یک حلقه بلند کنید. به عنوان مثال، __do_global_ctors، بخشی از libgcc که اجرا می شود
سازنده ها در راه اندازی برنامه، توابع را در لیستی فراخوانی می کند که با -1 محدود شده است.
با گزینه -mpt-fixed، ptab ها قبل از آزمایش در برابر -1 انجام می شود. که
به این معنی است که همه سازنده ها کمی سریعتر اجرا می شوند، اما زمانی که حلقه به حالت اولیه برسد
در انتهای لیست، برنامه از کار می افتد زیرا ptabs -1 را در یک هدف بارگذاری می کند
ثبت نام. از آنجایی که این گزینه برای هر سخت افزاری که جریان را اجرا می کند ناامن است
مشخصات معماری، پیش فرض -mno-pt-fixed است. مگر اینکه کاربر a را مشخص کند
هزینه خاص با -mgettrcost، -mno-pt-fixed نیز دلالت دارد -mgettrcost=100؛ این
از تخصیص رجیستر با استفاده از ثبات های هدف برای ذخیره اعداد صحیح معمولی جلوگیری می کند.

-منهای نمادین
فرض کنید نمادها ممکن است نامعتبر باشند. نمادهای تابع معمولی تولید شده توسط کامپایلر
همیشه برای بارگیری با movi/shori/ptabs یا movi/shori/ptrel معتبر خواهد بود، اما با
ترفندهای اسمبلر و/یا پیوند دهنده امکان تولید نمادهایی وجود دارد که باعث می شود
ptabs / ptrel به دام انداختن. این گزینه فقط زمانی معنی دارد که -mno-pt-fixed هست در
اثر سپس از cse بلوک های متقاطع، بالا بردن و اکثر برنامه ریزی ها جلوگیری می کند
نماد بارگیری می شود پیش فرض است -mno-Invalid-symbols.

-branch-cost=تعداد
فرض تعداد هزینه آموزش شعبه باشد. اعداد بالاتر باعث می شود
کامپایلر سعی کنید در صورت امکان کدهای بدون شاخه بیشتری تولید کند. اگر مشخص نشده است
مقدار بسته به نوع پردازنده ای که برای آن کامپایل می شود انتخاب می شود.

-mcbranchdi
الگوی دستورالعمل "cbranchdi4" را فعال کنید.

-mcmpeqdi
حتی زمانی که الگوی دستورالعمل "cmpeqdi_t" را منتشر کنید -mcbranchdi در عمل است

-mfused-madd
در صورتی که
نوع پردازنده آن را پشتیبانی می کند. فعال کردن این گزینه ممکن است کدی تولید کند که تولید می کند
نتایج متفاوت عددی ممیز شناور در مقایسه با محاسبات دقیق IEEE 754.

وانمود کردن - حرکت کردن
برای آموزش حرکت شرطی شاخه های شرطی با جابجایی صفر را ترجیح دهید
الگوها این می تواند منجر به کد سریعتر در پردازنده SH4 شود.

سولاریس 2 گزینه

اینها -m گزینه ها در Solaris 2 پشتیبانی می شوند:

-متن ناخالص
-متن ناخالص، علاوه بر استفاده از -به اشتراک گذاشته شده، به کامپایلر می گوید که پاس ندهد -z متن به
پیوند دهنده هنگام پیوند دادن یک شی مشترک. با استفاده از این گزینه، می توانید موقعیت را پیوند دهید-
کد وابسته به یک شی مشترک

-متن ناخالص "تغییر مکان ها در مقابل قابل تخصیص باقی می مانند اما غیرقابل نوشتن" را سرکوب می کند
پیام خطای پیوند دهنده بخش‌ها. با این حال، جابجایی‌های لازم باعث ایجاد کپی می‌شود.
در حالت نوشتن، و شی به اشتراک گذاشته شده در واقع در بین فرآیندها به اشتراک گذاشته نمی شود. بجای
با استفاده از -متن ناخالص، باید تمام کد منبع را با آن کامپایل کنید -fpic or -fPIC.

این سوئیچ ها علاوه بر موارد فوق در Solaris 2 پشتیبانی می شوند:

- نخ ها
با استفاده از کتابخانه رشته های POSIX، پشتیبانی از چند رشته ای را اضافه کنید. این گزینه تنظیم می شود
پرچم‌گذاری برای پیش‌پردازنده و پیوند دهنده. این گزینه روی موضوع تاثیری ندارد
ایمنی کد شی تولید شده توسط کامپایلر یا کتابخانه های ارائه شده با آن.

- نخ
این مترادف برای - نخ ها.

SPARC گزینه

اینها -m گزینه ها در SPARC پشتیبانی می شوند:

-mno-app-regs
-mapp-regs
مشخص کردن -mapp-regs برای تولید خروجی با استفاده از ثبت جهانی 2 تا 4 که
SPARC SVR4 ABI برای برنامه ها ذخیره می کند. مانند ثبت جهانی 1، هر جهانی
ثبت 2 تا 4 به عنوان یک ثبات قابل تخصیص در نظر گرفته می شود که توسط clobber شده است
فراخوانی تابع این پیش فرض است.

برای سازگاری کامل با SVR4 ABI به قیمت کاهش عملکرد، مشخص کنید
-mno-app-regs. شما باید کتابخانه ها و نرم افزار سیستم را با این گزینه کامپایل کنید.

-mflat
-mno-flat
با -mflat، کامپایلر دستورالعمل های ذخیره/بازیابی را ایجاد نمی کند و از a استفاده می کند
مدل پنجره "مسطح" یا تک ثبت. این مدل با معمولی سازگار است
مدل پنجره ثبت نام ثبات های محلی و رجیسترهای ورودی (0--5) هنوز هستند
به عنوان رجیسترهای "ذخیره شده در تماس" در نظر گرفته می شود و در صورت نیاز در پشته ذخیره می شود.

با -mno-flat (به طور پیش فرض)، کامپایلر دستورالعمل های ذخیره/بازیابی را تولید می کند (به جز
برای توابع برگ). این حالت عملکرد عادی است.

-mfpu
-mhard-float
خروجی حاوی دستورالعمل های ممیز شناور تولید کنید. این پیش فرض است.

-mno-fpu
-msoft-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور تولید کنید. هشدار: مورد نیاز
کتابخانه ها برای همه اهداف SPARC در دسترس نیستند. به طور معمول امکانات از
از کامپایلر C معمولی ماشین استفاده می شود، اما این کار را نمی توان مستقیماً در حالت متقابل انجام داد.
تلفیقی. شما باید ترتیبات خود را برای تهیه کتابخانه مناسب انجام دهید
توابع برای کامپایل متقابل اهداف تعبیه شده sprc-*-aout و اسپارکلیت-*-*
پشتیبانی نرم افزار ممیز شناور را ارائه دهید.

-msoft-float قرارداد فراخوانی را در فایل خروجی تغییر می دهد. بنابراین، آن را تنها
مفید است اگر کامپایل کنید تمام برنامه ای با این گزینه به طور خاص، شما نیاز دارید
گردآوری libgcc.a، کتابخانه ای که با GCC ارائه می شود، با -msoft-float به منظور این
به کار می کنند.

-مارد-طبقه شناور
خروجی حاوی دستورالعمل های ممیز شناور چهار کلمه ای (طولانی دوگانه) تولید کنید.

-msoft-quad-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور چهار کلمه ای (طولانی دوگانه) ایجاد کنید
دستورالعمل ها. توابع فراخوانی شده آنهایی هستند که در SPARC ABI مشخص شده اند. این است
به طور پیش فرض

تا زمان نگارش این مقاله، هیچ پیاده سازی SPARC که پشتیبانی سخت افزاری داشته باشد، وجود ندارد
دستورالعمل های ممیز شناور چهار کلمه ای. همه آنها یک Trap handler را برای یکی از آنها فراخوانی می کنند
این دستورالعمل ها، و سپس کنترل کننده تله اثر دستورالعمل را تقلید می کند.
به دلیل سربار کنترل کننده تله، این کار بسیار کندتر از فراخوانی کتابخانه ABI است
کارهای روزمره. بنابراین -msoft-quad-float گزینه پیش فرض است.

-mno-unaligned-doubles
دوبل
فرض کنید دوبل ها دارای تراز 8 بایتی هستند. این پیش فرض است.

با دوبل، GCC فرض می کند که دوبل ها فقط در صورتی تراز 8 بایتی دارند
در نوع دیگری وجود دارند، یا اگر آدرس مطلق دارند. در غیر این صورت، آن را
فرض می کند که آنها دارای تراز 4 بایتی هستند. با مشخص کردن این گزینه از موارد نادر جلوگیری می شود
مشکلات سازگاری با کدهای تولید شده توسط سایر کامپایلرها. پیش فرض نیست
زیرا منجر به از دست دادن عملکرد، به خصوص برای کد ممیز شناور می شود.

-mno-faster-structs
-mfaster-structs
با -mfaster-structs، کامپایلر فرض می کند که ساختارها باید 8 بایت داشته باشند
هم ترازی. این امکان استفاده از جفت دستورالعمل های "ldd" و "std" را برای کپی ها فراهم می کند
در انتساب ساختار، به جای دو برابر جفت "ld" و "st". با این حال
استفاده از این تراز تغییر یافته مستقیماً SPARC ABI را نقض می کند. بنابراین، در نظر گرفته شده است
فقط برای استفاده در اهدافی که توسعه دهنده تصدیق می کند که کد حاصل از آنها
مستقیماً مطابق با قوانین ABI نخواهد بود.

-mcpu=cpu_type
مجموعه دستورالعمل، مجموعه ثبت، و پارامترهای زمانبندی دستورالعمل را برای
ماشین تایپ cpu_type. مقادیر پشتیبانی شده برای cpu_type هستند v7, درخت سرو, v8, سوپراسپارک,
هایپر اسپارک, لئون, اسپارکلیت, f930, f934, sprclite86x, اسپارلت, tsc701, v9,
اولتراسپارک, ultrasparc3, نیاگارا, نیاگارا 2, نیاگارا 3و نیاگارا 4.

زنجیره‌های ابزار Native Solaris و GNU/Linux نیز از این مقدار پشتیبانی می‌کنند بومی، که انتخاب می کند
بهترین گزینه معماری برای پردازنده میزبان. -mcpu=بومی تاثیری ندارد اگر
GCC پردازنده را نمی شناسد.

پارامترهای زمانبندی دستورالعمل پیش فرض برای مقادیری که an را انتخاب می کنند استفاده می شود
معماری و نه اجرا. اینها هستند v7, v8, اسپارکلیت, اسپارلت, v9.

در اینجا لیستی از هر معماری پشتیبانی شده و پیاده سازی های پشتیبانی شده آنها آمده است.

v7 سرو

v8 supersparc، hypersparc، leon

اسپارکلیت
f930, f934, sparclite86x

اسپارلت
tsc701

v9 اولتراسپارک، اولتراسپارک3، نیاگارا، نیاگارا2، نیاگارا3، نیاگارا4

به‌طور پیش‌فرض (مگر اینکه پیکربندی دیگری انجام شده باشد)، GCC کدی را برای نوع V7 تولید می‌کند
معماری SPARC با -mcpu=سرو، کامپایلر به علاوه آن را برای آن بهینه می کند
تراشه Cypress CY7C602، همانطور که در سری SPARCStation/SPARCServer 3xx استفاده می شود. این هست
همچنین برای SPARCStation قدیمی 1، 2، IPX و غیره مناسب است.

با -mcpu=v8، GCC کدی را برای نوع V8 معماری SPARC تولید می کند. در
تنها تفاوت با کد V7 این است که کامپایلر ضرب عدد صحیح و را منتشر می کند
دستورالعمل های تقسیم عدد صحیح که در SPARC-V8 وجود دارد اما در SPARC-V7 وجود ندارد. با
-mcpu=supersparc، کامپایلر علاوه بر این، آن را برای تراشه SuperSPARC بهینه می کند
در سری SPARCStation 10، 1000 و 2000 استفاده می شود.

با -mcpu=sparclite، GCC کدی را برای نوع SPARClite SPARC تولید می کند
معماری. با این کار ضرب عدد صحیح، مرحله تقسیم عدد صحیح و اسکن ("ffs") اضافه می شود.
دستورالعمل هایی که در SPARClite وجود دارد اما در SPARC-V7 وجود ندارد. با -mcpu=f930از
کامپایلر علاوه بر این، آن را برای تراشه فوجیتسو MB86930 که تراشه اصلی است، بهینه می کند
SPARClite، بدون FPU. با -mcpu=f934، کامپایلر به علاوه آن را برای آن بهینه می کند
تراشه فوجیتسو MB86934، که جدیدترین SPARClite با FPU است.

با -mcpu= اسپارکلت، GCC کدی را برای نوع SPARClet SPARC تولید می کند
معماری. این عدد صحیح ضرب، ضرب/انباشته، تقسیم عدد صحیح را اضافه می کند
مرحله و اسکن ("ffs") دستورالعمل هایی که در SPARClet وجود دارد اما در SPARC-V7 وجود ندارد. با
-mcpu=tsc701، کامپایلر علاوه بر این آن را برای تراشه TEMIC SPARClet بهینه می کند.

با -mcpu=v9، GCC کدی را برای نوع V9 معماری SPARC تولید می کند. این
دستورالعمل حرکت اعداد صحیح و ممیز شناور 64 بیتی، 3 ممیز شناور اضافی را اضافه می کند
ثبت کد شرط و دستورالعمل های حرکت شرطی. با -mcpu=ultrasparc,
کامپایلر همچنین آن را برای تراشه های Sun UltraSPARC I/II/IIi بهینه می کند. با
-mcpu=ultrasparc3، کامپایلر علاوه بر این آن را برای Sun UltraSPARC بهینه می کند
تراشه های III/III+/IIIi/IIIi+/IV/IV+. با -mcpu=نیاگارا، کامپایلر علاوه بر این
آن را برای تراشه های Sun UltraSPARC T1 بهینه می کند. با -mcpu = niagara2، کامپایلر
علاوه بر این، آن را برای تراشه های Sun UltraSPARC T2 بهینه می کند. با -mcpu = niagara3از
کامپایلر علاوه بر این، آن را برای تراشه های Sun UltraSPARC T3 بهینه می کند. با -mcpu = niagara4,
کامپایلر علاوه بر این، آن را برای تراشه های Sun UltraSPARC T4 بهینه می کند.

-mtune=cpu_type
پارامترهای زمانبندی دستورالعمل را برای نوع ماشین تنظیم کنید cpu_type، اما تنظیم نکنید
مجموعه دستورات یا ثبت نام آن گزینه را تنظیم می کند -mcpu=cpu_type می توانست

همان مقادیر برای -mcpu=cpu_type می توان برای استفاده -mtune=cpu_type، اما تنها
مقادیر مفید آنهایی هستند که اجرای CPU خاصی را انتخاب می کنند. آنها هستند
درخت سرو, سوپراسپارک, هایپر اسپارک, لئون, f930, f934, sprclite86x, tsc701, اولتراسپارک,
ultrasparc3, نیاگارا, نیاگارا 2, نیاگارا 3 و نیاگارا 4. با سولاریس بومی و
زنجیره‌های ابزار گنو/لینوکس، بومی همچنین می تواند استفاده شود.

-mv8plus
-mno-v8plus
با -mv8plus، GCC کد برای SPARC-V8+ ABI تولید می کند. تفاوت با V8
ABI این است که رجیسترهای جهانی و خروجی با عرض 64 بیت در نظر گرفته می شوند. این فعال است
به طور پیش فرض در Solaris در حالت 32 بیتی برای همه پردازنده های SPARC-V9.

-mvis
-mno-vis
با -mvis، GCC کدی تولید می کند که از UltraSPARC Visual بهره می برد
پسوندهای مجموعه دستورالعمل. پیش فرض است -mno-vis.

-mvis2
-mno-vis2
با -mvis2، GCC کدی را تولید می کند که از نسخه 2.0 UltraSPARC بهره می برد
پسوندهای مجموعه دستورالعمل بصری. پیش فرض است -mvis2 هنگام هدف قرار دادن یک cpu که
از چنین دستورالعمل هایی مانند UltraSPARC-III و نسخه های جدیدتر پشتیبانی می کند. تنظیمات -mvis2 همچنین
مجموعه -mvis.

-mvis3
-mno-vis3
با -mvis3، GCC کدی را تولید می کند که از نسخه 3.0 UltraSPARC بهره می برد
پسوندهای مجموعه دستورالعمل بصری. پیش فرض است -mvis3 هنگام هدف قرار دادن یک cpu که
از چنین دستورالعمل هایی مانند niagara-3 و نسخه های جدیدتر پشتیبانی می کند. تنظیمات -mvis3 را نیز تنظیم می کند
-mvis2 و -mvis.

-mpopc
-mno-popc
با -mpopc، GCC کدی تولید می کند که از جمعیت UltraSPARC بهره می برد
دستور شمارش پیش فرض است -mpopc هنگام هدف قرار دادن پردازنده ای که از چنین چیزی پشتیبانی می کند
دستورالعمل هایی مانند نیاگارا-2 و نسخه های جدیدتر.

-mfmaf
-mno-fmaf
با -mfmaf، GCC کدی تولید می کند که از مزیت UltraSPARC Fused Multiply- بهره می برد.
افزودن پسوندهای ممیز شناور پیش فرض است -mfmaf هنگام هدف قرار دادن یک cpu که
از چنین دستورالعمل هایی مانند Niagara-3 و نسخه های جدیدتر پشتیبانی می کند.

-mfix-at697f
راه حل مستند برای خطای واحد پردازنده Atmel AT697F را فعال کنید
(که با خطای شماره 13 پردازنده AT697E مطابقت دارد).

اینها -m گزینه ها علاوه بر موارد فوق در پردازنده های SPARC-V9 در 64 بیت پشتیبانی می شوند
محیط ها:

-32
-64
کد برای یک محیط 32 بیتی یا 64 بیتی تولید کنید. محیط 32 بیتی int را تنظیم می کند،
طولانی و اشاره گر به 32 بیت. محیط 64 بیتی به 32 بیت و طولانی و
اشاره گر به 64 بیت

-mcmodel=که
مدل کد را روی یکی از آن قرار دهید

medlow
مدل کد متوسط/پایین: آدرس‌های 64 بیتی، برنامه‌ها باید در 32 پایین پیوند داده شوند.
تکه های حافظه برنامه ها را می توان به صورت ایستا یا پویا پیوند داد.

medmid
مدل کد متوسط/متوسط: آدرس‌های 64 بیتی، برنامه‌ها باید در پایین لینک شوند
44 بیت حافظه، بخش های متن و داده باید کمتر از 2 گیگابایت در حجم و
بخش داده باید در 2 گیگابایت از بخش متن قرار گیرد.

مدانی
مدل کد Medium/Anywhere: آدرس‌های 64 بیتی، برنامه‌ها ممکن است در هر جایی پیوند شوند
در حافظه، بخش های متن و داده باید کمتر از 2 گیگابایت و حجم داده ها باشد
بخش باید در 2 گیگابایت از بخش متن قرار گیرد.

ریختن
مدل کد Medium/Anywhere برای سیستم های جاسازی شده: آدرس های 64 بیتی، متن
و بخش های داده باید کمتر از 2 گیگابایت اندازه داشته باشند، هر دو از هر جایی از حافظه شروع می شوند
(در زمان پیوند تعیین می شود). ثبت جهانی %g4 به پایه داده ها اشاره می کند
بخش. برنامه ها به صورت ایستا مرتبط هستند و PIC پشتیبانی نمی شود.

-mmmory-model=مم-مدل
مدل حافظه موجود در پردازنده را روی یکی از آنها قرار دهید

به طور پیش فرض
مدل حافظه پیش فرض برای پردازنده و سیستم عامل.

rmo سفارش حافظه آرام

pso سفارش فروشگاهی جزئی

تسو کل سفارش فروشگاه

sc سازگاری ترتیبی

این مدل های حافظه به طور رسمی در ضمیمه D معماری Sparc V9 تعریف شده اند
همانطور که در قسمت "PSTATE.MM" پردازنده تنظیم شده است.

-mstack-bias
-mno-stack-bias
با -mstack-bias، GCC فرض می کند که نشانگر پشته و نشانگر فریم در صورت وجود،
با -2047 جبران می شوند که باید هنگام ایجاد ارجاعات قاب پشته به آن اضافه شود. این
پیش فرض در حالت 64 بیتی است. در غیر این صورت، فرض کنید چنین افستی وجود ندارد.

SPS گزینه

اینها -m گزینه ها در SPU پشتیبانی می شوند:

-mwarn-reloc
-mirror-reloc
لودر SPU جابجایی های پویا را مدیریت نمی کند. به طور پیش فرض، GCC یک را می دهد
خطا در هنگام تولید کدی که نیاز به جابجایی پویا دارد. -mno-error-reloc
خطا را غیرفعال می کند، -mwarn-reloc در عوض یک هشدار ایجاد می کند.

-msafe-dma
-munsafe-dma
دستورالعمل‌هایی که شروع یا آزمایش تکمیل DMA را انجام می‌دهند، نباید دوباره سفارش داده شوند
با توجه به بارها و ذخایر حافظه ای که در حال دسترسی است. کاربران معمولا
این مشکل را با استفاده از کلمه کلیدی فرار حل کنید، اما می تواند منجر به کد ناکارآمد شود
در جاهایی که حافظه تغییر نمی کند. به جای علامت گذاری حافظه به عنوان
فرار ما با دستورالعمل های DMA به عنوان به طور بالقوه بر تمام حافظه تاثیر می گذارد. با
-munsafe-dma کاربران باید از کلمه کلیدی فرار برای محافظت از دسترسی به حافظه استفاده کنند.

-شاخه-اشاره
به‌طور پیش‌فرض، GCC برای جلوگیری از توقف خط لوله، دستورالعملی برای راهنمایی ایجاد می‌کند
همیشه شاخه های گرفته شده یا احتمالاً گرفته شده است. یک اشاره نزدیکتر از 8 ایجاد نمی شود
دستورالعمل دور از شاخه آن دلیل کمی برای غیرفعال کردن آنها وجود دارد، به جز
اهداف اشکال زدایی یا کوچکتر کردن یک شی.

-msmall-mem
-mlarge-mem
به‌طور پیش‌فرض، GCC با این فرض که آدرس‌ها هرگز بزرگ‌تر از 18 بیت نیستند، کد تولید می‌کند.
با -mlarge-mem کدی تولید می شود که یک آدرس کامل 32 بیتی را فرض می کند.

-mstdmain
به‌طور پیش‌فرض، GCC با کد راه‌اندازی پیوند می‌خورد که عملکرد اصلی به سبک SPU را بر عهده می‌گیرد
رابط (که دارای یک لیست پارامترهای غیر متعارف است). با -mstdmain، GCC پیوند خواهد داد
برنامه شما در برابر کد راه اندازی که یک رابط به سبک C99 را به "اصلی" فرض می کند،
از جمله یک کپی محلی از رشته های "argv".

-Mfixed-Range =محدوده ثبت نام
کدی را ایجاد کنید که محدوده رجیستر داده شده را به عنوان ثبات ثابت در نظر می گیرد. ثبت ثابت
یکی از مواردی است که تخصیص دهنده ثبات نمی تواند از آن استفاده کند. این در هنگام کامپایل کرنل مفید است
کد محدوده رجیستر به صورت دو رجیستر که با یک خط تیره از هم جدا شده اند، مشخص می شود. چندگانه
محدوده های ثبت را می توان با کاما از هم جدا کرد.

-mea32
-mea64
با فرض اینکه اشاره گرها به فضای آدرس PPU از طریق "__ea" قابل دسترسی هستند، کد را کامپایل کنید.
رده‌بندی فضای آدرس نام‌گذاری شده 32 یا 64 بیت عرض دارند. پیش فرض 32 بیت است.
از آنجایی که این یک گزینه تغییر ABI است، تمام کدهای شی در یک فایل اجرایی باید کامپایل شوند
با همین تنظیمات

-مدرس-فضا-تبدیل
mno-address-space-conversion
اجازه/عدم استفاده از فضای آدرس "__ea" به عنوان ابرمجموعه آدرس عمومی
فضا. این امکان ارسال نوع صریح بین "__ea" و اشاره گر عمومی را نیز فراهم می کند
تبدیل ضمنی نشانگرهای عمومی به اشاره گرهای "__ea". پیش فرض اجازه دادن است
تبدیل نشانگر فضای آدرس

-Mcache size =اندازه حافظه پنهان
این گزینه نسخه libgcc را که کامپایلر به یک فایل اجرایی پیوند می دهد، کنترل می کند
و یک حافظه پنهان تحت مدیریت نرم افزار را برای دسترسی به متغیرهای آدرس "__ea" انتخاب می کند
فضایی با اندازه کش خاص گزینه های ممکن برای اندازه حافظه پنهان هستند 8, 16, 32, 64
و 128. اندازه پیش فرض کش 64 کیلوبایت است.

-به روز رسانی های matomic
به روز رسانی های mno-atomic
این گزینه نسخه libgcc را که کامپایلر به یک فایل اجرایی پیوند می دهد، کنترل می کند
و انتخاب می کند که آیا حافظه پنهان مدیریت شده توسط نرم افزار متغیرهای سمت PPU به روز شود یا خیر
استفاده می شود. اگر از به‌روزرسانی‌های اتمی استفاده می‌کنید، با استفاده از کد SPU به متغیر PPU تغییر می‌کند
واجد شرایط فضای آدرس "__ea" با تغییرات سایر PPU ها تداخلی نخواهد داشت
متغیرهای ساکن در همان خط کش از کد PPU. اگر از اتمی استفاده نمی کنید
به روز رسانی، چنین تداخلی ممکن است رخ دهد. با این حال، نوشتن پشت خطوط کش بیشتر خواهد بود
کارآمد. رفتار پیش فرض استفاده از به روز رسانی اتمی است.

-mdual-nops
-Mdual-nops =n
به‌طور پیش‌فرض، GCC زمانی که انتظار دارد مشکل دوگانه افزایش یابد، nops را وارد می‌کند
عملکرد. n می تواند مقداری از 0 تا 10 باشد. کوچکتر n نوپ های کمتری وارد می کند. 10
پیش فرض است، 0 همان است -mno-dual-nops. غیر فعال با -اواس.

-mhint-max-nops=n
حداکثر تعداد نوپ برای درج یک اشاره شاخه. یک اشاره شاخه باید حداقل 8 باشد
دستورالعمل های دور از شاخه ای که در حال اجراست. GCC تا درج خواهد شد n نه به
این را اجرا کنید، در غیر این صورت اشاره شاخه ایجاد نخواهد کرد.

-mhint-max-distance=n
رمزگذاری دستورالعمل راهنمایی شاخه، اشاره را در محدوده 256 محدود می کند
دستورالعمل های شعبه در حال اجرا است. به طور پیش فرض، GCC مطمئن می شود که در داخل است
125.

-msafe-hints
یک باگ سخت افزاری را حل کنید که باعث می شود SPU به طور نامحدود متوقف شود. به طور پیش فرض، GCC
دستورالعمل "hbrp" را وارد می کند تا مطمئن شود که این Stall اتفاق نمی افتد.

گزینه برای سیستم V

این گزینه های اضافی در System V Release 4 برای سازگاری با سایر گزینه ها در دسترس هستند
کامپایلرها در آن سیستم ها:

-G یک شیء مشترک ایجاد کنید. توصیه می شود که - نمادین or -به اشتراک گذاشته شده به جای آن استفاده شود.

-کی نسخه‌های هر ابزار مورد استفاده توسط کامپایلر را در اسمبلر «ident.» شناسایی کنید
دستورالعمل در خروجی

-Qn از افزودن دستورالعمل های ".ident" به فایل خروجی خودداری کنید (این حالت پیش فرض است).

-YP،دیر
دایرکتوری ها را جستجو کنید دیرو نه موارد دیگر، برای کتابخانه های مشخص شده با -l.

-ایم،دیر
تو دایرکتوری نگاه کن دیر برای پیدا کردن پیش پردازنده M4 اسمبلر از این استفاده می کند
گزینه.

TILE-Gx گزینه

اینها -m گزینه ها در TILE-Gx پشتیبانی می شوند:

-mcpu=نام
نوع CPU مورد نظر را انتخاب می کند. در حال حاضر تنها نوع پشتیبانی شده است tilegx.

-32
-64
کد برای یک محیط 32 بیتی یا 64 بیتی تولید کنید. محیط 32 بیتی int را تنظیم می کند،
طولانی و اشاره گر به 32 بیت است. محیط 64 بیتی به 32 بیت و طولانی و
اشاره گر به 64 بیت

TILEPro گزینه

اینها -m گزینه ها در TILEPro پشتیبانی می شوند:

-mcpu=نام
نوع CPU مورد نظر را انتخاب می کند. در حال حاضر تنها نوع پشتیبانی شده است tilepro.

-32
کدی را برای یک محیط 32 بیتی ایجاد کنید که int، long و اشاره گر را روی 32 بیت تنظیم می کند.
این تنها رفتار پشتیبانی شده است، بنابراین پرچم اساسا نادیده گرفته می شود.

V850 گزینه

اینها -m گزینه هایی برای پیاده سازی V850 تعریف شده اند:

تماس های طولانی
-mno-long-تماس
همه تماس ها را به عنوان تماس های دور (نزدیک) تلقی کنید. اگر تماس ها دور فرض شود،
کامپایلر همیشه آدرس توابع را در یک ثبات بارگذاری می کند و غیرمستقیم را فراخوانی می کند
از طریق اشاره گر

-mno-ep
-مپ
بلوک های اساسی را که از نشانگر شاخص 4 یا بیشتر استفاده می کنند، بهینه نکنید (بهینه سازی کنید).
بارها برای کپی کردن نشانگر در ثبات "ep" و استفاده از "sld" و "sst" کوتاهتر
دستورالعمل ها. در -مپ اگر بهینه سازی کنید گزینه به طور پیش فرض روشن است.

-mno-prolog-function
-mprolog-function
از توابع خارجی برای ذخیره و بازیابی رجیسترها در مقدمه استفاده نکنید
و پایان یک تابع. عملکردهای خارجی کندتر هستند، اما از کد کمتری استفاده می کنند
فاصله اگر بیش از یک تابع همان تعداد ثبات را ذخیره کند. در
-mprolog-function اگر بهینه سازی کنید گزینه به طور پیش فرض روشن است.

-mspace
سعی کنید کد را تا حد امکان کوچک کنید. در حال حاضر، این فقط روشن می شود -مپ
و -mprolog-function گزینه.

-mtda=n
متغیرهای ایستا یا سراسری را که اندازه آنها باشد قرار دهید n بایت یا کمتر در ناحیه داده کوچک
که ثبت "ep" به آن اشاره می کند. فضای کوچک داده در کل می تواند تا 256 بایت را در خود جای دهد
(128 بایت برای مراجع بایت).

-msda=n
متغیرهای ایستا یا سراسری را که اندازه آنها باشد قرار دهید n بایت یا کمتر در ناحیه داده کوچک
که ثبت "gp" به آن اشاره می کند. فضای کوچک داده می تواند تا 64 کیلوبایت را در خود جای دهد.

-مزدا=n
متغیرهای ایستا یا سراسری را که اندازه آنها باشد قرار دهید n بایت یا کمتر به 32 اول
کیلوبایت حافظه

-mv850
مشخص کنید که پردازنده مورد نظر V850 باشد.

سوئیچ -mbig
کد مناسب برای جداول سوئیچ بزرگ تولید کنید. از این گزینه فقط در صورتی استفاده کنید که
اسمبلر/لینکر از شاخه های خارج از محدوده در جدول سوئیچ شکایت دارد.

-mapp-regs
این گزینه باعث می شود از r2 و r5 در کد تولید شده توسط کامپایلر استفاده شود.
این تنظیم پیش فرض است.

-mno-app-regs
این گزینه باعث می شود که r2 و r5 به عنوان ثبات ثابت در نظر گرفته شوند.

-mv850e2v3
مشخص کنید که پردازنده مورد نظر V850E2V3 باشد. ثابت های پیش پردازنده
__v850e2v3__ در صورت استفاده از این گزینه تعریف می شود.

-MV850E2
مشخص کنید که پردازنده مورد نظر V850E2 باشد. ثابت های پیش پردازنده
__v850e2__ در صورت استفاده از این گزینه تعریف می شود.

-MV850E1
مشخص کنید که پردازنده مورد نظر V850E1 باشد. ثابت های پیش پردازنده
__v850e1__ و __v850e__ در صورت استفاده از این گزینه تعریف می شود.

-mv850s
مشخص کنید که پردازنده مورد نظر V850ES باشد. این نام مستعار برای -MV850E1
گزینه.

-mv850e
مشخص کنید که پردازنده مورد نظر V850E باشد. ثابت پیش پردازنده __v850e__
در صورت استفاده از این گزینه تعریف می شود.

اگر هیچ کدام -mv850 نه -mv850e نه -MV850E1 نه -MV850E2 نه -mv850e2v3 تعریف شده اند
سپس یک پردازنده هدف پیش فرض و مربوطه انتخاب خواهد شد __v850*__ پیش پردازنده
ثابت تعریف خواهد شد.

ثابت های پیش پردازنده __v850 و __v851__ همیشه بدون توجه به اینکه کدام تعریف می شوند
نوع پردازنده هدف است.

-mdisable-call
این گزینه تولید دستور CALLT را برای v850e، v850e1 متوقف می کند،
طعم های v850e2 و v850e2v3 از معماری v850. پیش فرض است
-mno-disable-call که اجازه می دهد از دستور CALLT استفاده شود.

VAX گزینه

اینها -m گزینه ها برای VAX تعریف شده اند:

-munix
دستورات پرش خاصی ("aobleq" و غیره) که اسمبلر یونیکس است را خروجی ندهید
زیرا VAX نمی تواند در محدوده های طولانی کار کند.

-mgnu
آن دستورالعمل های پرش را با این فرض که با آن مونتاژ خواهید کرد، خروجی بگیرید
اسمبلر گنو

-میلی گرم کد خروجی برای اعداد ممیز شناور با فرمت G به جای فرمت D.

VxWorks گزینه

گزینه های این بخش برای تمام اهداف VxWorks تعریف شده است. گزینه های خاص برای
سخت افزار هدف همراه با گزینه های دیگر برای آن هدف فهرست شده است.

-MRTP
GCC می تواند هم برای کرنل های VxWorks و هم برای فرآیندهای زمان واقعی (RTP) کد تولید کند. این
گزینه از اولی به دومی تغییر می کند. همچنین ماکرو پیش پردازنده را تعریف می کند
"__RTP__".

-غیر ساکن
یک فایل اجرایی RTP را با کتابخانه های مشترک به جای کتابخانه های ایستا پیوند دهید. را
گزینه های -استاتیک و -به اشتراک گذاشته شده همچنین می تواند برای RTP ها استفاده شود. -استاتیک پیش فرض است.

-Bstatic
-بی دینامیک
این گزینه ها به لینک دهنده منتقل می شوند. آنها برای سازگاری با
دیاب

-Xbind-تنبل
اتصال تنبل فراخوانی تابع را فعال کنید. این گزینه معادل است -Wl،-z، اکنون و است
برای سازگاری با Diab تعریف شده است.

-Xbind-اکنون
اتصال تنبل فراخوانی تابع را غیرفعال کنید. این گزینه پیش فرض است و برای آن تعریف شده است
سازگاری با دیاب

x86-64 گزینه

این موارد در زیر ذکر شده است

Xstormy16 گزینه

این گزینه ها برای Xstormy16 تعریف شده اند:

-msim
فایل های راه اندازی و اسکریپت پیوند دهنده مناسب برای شبیه ساز را انتخاب کنید.

Xtensa گزینه

این گزینه ها برای اهداف Xtensa پشتیبانی می شوند:

-mconst16
-mno-const16
استفاده از دستورالعمل های "CONST16" را برای بارگیری مقادیر ثابت فعال یا غیرفعال کنید. در
دستورالعمل "CONST16" در حال حاضر یک گزینه استاندارد از Tensilica نیست. چه زمانی
فعال باشد، دستورالعمل های "CONST16" همیشه به جای استاندارد "L32R" استفاده می شود.
دستورالعمل ها. استفاده از "CONST16" به طور پیش فرض تنها در صورتی فعال است که "L32R"
دستورالعمل در دسترس نیست

-mfused-madd
-mno-fused-madd
فعال یا غیرفعال کردن استفاده از دستورات ضرب/افزودن و ضرب/ تفریق ذوب شده در
گزینه ممیز شناور اگر گزینه ممیز شناور نیز نباشد، این تأثیری ندارد
فعال شد. غیرفعال کردن دستورات ضرب/جمع و ضرب/ تفریق ذوب شده را مجبور می کند
کامپایلر برای استفاده از دستورالعمل های جداگانه برای عملیات ضرب و جمع/ تفریق.
این ممکن است در برخی موارد که نتایج دقیق مطابق با IEEE 754 هستند، مطلوب باشد
مورد نیاز: دستورات افزودن/ تفریق ضرب ذوب شده میانی را گرد نمی کند
نتیجه، در نتیجه تولید نتایج با بیش بیت از دقت مشخص شده توسط
استاندارد IEEE غیرفعال کردن دستورالعمل‌های جمع و تفریق ضرب ذوب شده نیز این امر را تضمین می‌کند
خروجی برنامه به توانایی کامپایلر برای ترکیب ضرب و حساس نیست
عملیات جمع/ تفریق

-mserialize-volatile
-mno-serialize-volatile
هنگامی که این گزینه فعال است، GCC دستورالعمل های "MEMW" را قبل از حافظه "فرار" درج می کند
ارجاعاتی برای تضمین سازگاری متوالی پیش فرض است -mserialize-volatile.
استفاده کنید -mno-serialize-volatile برای حذف دستورالعمل های "MEMW".

-mforce-no-pic
برای اهداف، مانند گنو/لینوکس، که در آن همه کدهای Xtensa حالت کاربر باید موقعیت-
کد مستقل (PIC)، این گزینه PIC را برای کامپایل کد هسته غیرفعال می کند.

-مکس-لیترال
-mno-text-literals
درمان استخرهای تحت اللفظی را کنترل کنید. پیش فرض است -mno-text-literals,
که literals را در قسمتی جداگانه در فایل خروجی قرار می دهد. این اجازه می دهد تا
استخر تحت اللفظی در RAM/ROM داده قرار می گیرد و همچنین به پیوند دهنده اجازه می دهد تا ترکیب شود
استخرهای تحت اللفظی از فایل های شی مجزا برای حذف حروف اضافی و بهبود کد
اندازه. با -مکس-لیترال، لفظ ها در قسمت متن قرار گرفته اند
به منظور نزدیک نگه داشتن آنها تا حد امکان به مراجع خود. این ممکن است ضروری باشد
برای فایل های مونتاژ بزرگ

-Mtarget-Aligget
-mno-target-align
هنگامی که این گزینه فعال است، GCC به اسمبلر دستور می دهد تا به طور خودکار تراز شود
دستورالعمل هایی برای کاهش جریمه های شعب با هزینه برخی از تراکم کد. در
اسمبلر تلاش می کند تا دستورالعمل های چگالی را برای تراز کردن اهداف شاخه و
دستورالعمل های زیر دستورالعمل تماس اگر گاوصندوق قبلی کافی نباشد
دستورالعمل تراکم برای تراز کردن یک هدف، هیچ تعریض انجام نخواهد شد. پیش فرض است
-Mtarget-Aligget. این گزینه ها روی درمان تراز خودکار تأثیری ندارند
دستورالعمل‌هایی مانند «LOOP» که اسمبلر همیشه آن‌ها را تراز می‌کند، چه با باز کردن
دستورالعمل های چگالی یا با درج دستورالعمل های بدون عملیات.

-mlong calls
-mno-long calls
هنگامی که این گزینه فعال است، GCC به اسمبلر دستور می دهد تا تماس های مستقیم را به آن ترجمه کند
تماس های غیرمستقیم مگر اینکه بتواند تعیین کند که هدف تماس مستقیم در این است
محدوده مجاز توسط دستورالعمل تماس این ترجمه معمولاً برای تماس‌ها انجام می‌شود
توابع در فایل های منبع دیگر به طور خاص، اسمبلر یک مستقیم را ترجمه می کند
دستور "CALL" به یک "L32R" و به دنبال آن یک دستورالعمل "CALLX". پیش فرض است
-mno-long calls. این گزینه باید در برنامه هایی که هدف تماس می تواند استفاده شود
به طور بالقوه خارج از محدوده باشد. این گزینه در اسمبلر اجرا می شود نه در
کامپایلر، بنابراین کد اسمبلی تولید شده توسط GCC همچنان تماس مستقیم را نشان می دهد
دستورالعمل --- برای مشاهده دستورالعمل های واقعی به کد شیء جدا شده نگاه کنید.
توجه داشته باشید که اسمبلر از یک فراخوانی غیرمستقیم برای هر تماس بین فایلی استفاده می کند، نه فقط
آنهایی که واقعاً خارج از محدوده خواهند بود.

سری z گزینه

این موارد در زیر ذکر شده است

گزینه برای رمز نسل کنوانسیون
این گزینه های مستقل از ماشین، قراردادهای رابط مورد استفاده در کد را کنترل می کنند
نسل.

اکثر آنها هم اشکال مثبت و هم اشکال منفی دارند. شکل منفی از -فو خواهد بود
-fno-foo. در جدول زیر، تنها یکی از فرم‌ها فهرست شده است --- فرمی که نیست
پیش فرض با حذف هر یک از آنها می توانید شکل دیگر را کشف کنید نه- یا اضافه کردن آن

-fbounds-بررسی
برای فرانت‌اندهایی که از آن پشتیبانی می‌کنند، کد اضافی ایجاد کنید تا شاخص‌ها را بررسی کنید
آرایه های دسترسی در محدوده اعلام شده قرار دارند. این در حال حاضر فقط توسط
جاوا و فرترن به پایان می رسد، جایی که این گزینه به طور پیش فرض درست و نادرست است
بود.

-FTRAPV
این گزینه تله هایی را برای سرریز علامت دار هنگام جمع، تفریق و
عملیات ضرب

-fwrapv
این گزینه به کامپایلر دستور می دهد که سرریز حسابی امضا شده را فرض کند
جمع، تفریق و ضرب در اطراف با استفاده از مکمل دو نفره پیچیده می شود
نمایندگی. این پرچم برخی بهینه سازی ها را فعال و برخی دیگر را غیرفعال می کند. این
همانطور که توسط زبان جاوا مورد نیاز است، گزینه به طور پیش فرض برای قسمت جلویی جاوا فعال است
مشخصات.

- استثنائات
کنترل استثنا را فعال کنید. کد اضافی مورد نیاز برای انتشار استثناها را ایجاد می کند. برای
برخی از اهداف، این بدان معناست که GCC اطلاعات باز کردن قاب را برای همه ایجاد می کند
توابع، که می تواند سربار حجم داده قابل توجهی تولید کند، اگرچه اینطور نیست
بر اجرا تاثیر بگذارد اگر این گزینه را مشخص نکنید، GCC به طور پیش فرض آن را فعال می کند
برای زبان هایی مانند C++ که معمولاً به مدیریت استثنا نیاز دارند و آن را غیرفعال کنید
زبان هایی مانند C که معمولاً به آن نیاز ندارند. با این حال، ممکن است لازم باشد فعال کنید
این گزینه هنگام کامپایل کد C که باید به درستی با استثنا کار کند
هندلرهای نوشته شده در C++. همچنین ممکن است بخواهید این گزینه را غیرفعال کنید
کامپایل کردن برنامه های C++ قدیمی که از مدیریت استثنا استفاده نمی کنند.

-fnon-call-exceptions
کدی را ایجاد کنید که به دستورالعمل‌های به دام انداختن اجازه می‌دهد استثناها را پرتاب کند. توجه داشته باشید که این
به پشتیبانی زمان اجرا مخصوص پلتفرم نیاز دارد که در همه جا وجود ندارد. علاوه بر این،
فقط اجازه می دهد به دام انداختن دستورالعمل برای پرتاب استثناها، به عنوان مثال مراجع حافظه یا
دستورالعمل های ممیز شناور این اجازه نمی دهد که استثناها از دلخواه پرتاب شوند
کنترل کننده های سیگنال مانند "SIGALRM".

-funwind-جدول
مشابه - استثنائات، با این تفاوت که فقط هر داده استاتیک مورد نیاز را تولید می کند، اما
به هیچ وجه روی کد تولید شده تأثیری نخواهد گذاشت. شما به طور معمول فعال نمی کنید
این گزینه؛ در عوض، یک پردازشگر زبان که به این مدیریت نیاز دارد، آن را فعال می کند
از طرف شما.

جداول -فاسینکرون-باز کردن
در صورت پشتیبانی از ماشین هدف، جدول باز کردن در قالب dwarf2 ایجاد کنید. جدول است
دقیق در هر مرز دستورالعمل، بنابراین می توان از آن برای باز کردن پشته استفاده کرد
رویدادهای ناهمزمان (مانند دیباگر یا زباله گرد).

-fpcc-struct-return
مقادیر "کوتاه" "struct" و "union" را در حافظه مانند مقادیر طولانی تر به جای in برگردانید
ثبت می کند. این کنوانسیون کارایی کمتری دارد، اما مزیت اجازه دادن را دارد
قابلیت فراخوانی بین فایل های کامپایل شده توسط GCC و فایل های کامپایل شده با سایر کامپایلرها،
به ویژه کامپایلر C قابل حمل (pcc).

قرارداد دقیق برای بازگرداندن ساختارها در حافظه به هدف بستگی دارد
ماکروهای پیکربندی

ساختارها و اتحادیه های کوتاه آنهایی هستند که اندازه و هم ترازی آنها با برخی مطابقت دارد
نوع عدد صحیح

هشدار: کد کامپایل شده با -fpcc-struct-return سوئیچ باینری سازگار نیست
با کد کامپایل شده با -Freg-struct-return تعویض. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض

-Freg-struct-return
در صورت امکان مقادیر "struct" و "union" را در ثبات ها برگردانید. این کارایی بیشتری دارد
برای سازه های کوچک از -fpcc-struct-return.

اگر هیچ کدام را مشخص نکنید -fpcc-struct-return نه -Freg-struct-return، GCC به طور پیش فرض روی است
هر قراردادی که برای هدف استاندارد باشد. اگر کنوانسیون استانداردی وجود نداشته باشد،
GCC به طور پیش فرض روی است -fpcc-struct-return، به جز در اهدافی که GCC اصلی است
کامپایلر در این موارد، ما می توانیم استاندارد را انتخاب کنیم و کارآمدتر را انتخاب کنیم
ثبت نام جایگزین بازگشت.

هشدار: کد کامپایل شده با -Freg-struct-return سوئیچ باینری سازگار نیست
با کد کامپایل شده با -fpcc-struct-return تعویض. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض

-fshort-enums
به یک نوع "enum" فقط به همان تعداد بایت که برای محدوده اعلام شده نیاز دارد اختصاص دهید
مقادیر ممکن به طور خاص، نوع "enum" معادل کوچکترین خواهد بود
نوع عدد صحیح که فضای کافی دارد.

هشدار: la -fshort-enums سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض

-fshort-double
برای «دبل» از همان اندازه برای «شناور» استفاده کنید.

هشدار: la -fshort-double سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض

-fshort-wchar
نادیده گرفتن نوع زیربنایی برای wchar_t به کوتاه بدون امضا INT به جای
پیش فرض برای هدف این گزینه برای ساخت برنامه هایی که تحت آن اجرا می شوند مفید است
شراب.

هشدار: la -fshort-wchar سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. از آن برای مطابقت با یک غیر
رابط باینری برنامه پیش فرض

-fno-common
در کد C، قرار دادن متغیرهای سراسری اولیه را کنترل می کند. کامپایلرهای یونیکس سی
به طور سنتی تعاریف متعددی از این متغیرها را در موارد مختلف مجاز دانسته‌اند
واحدهای کامپایل با قرار دادن متغیرها در یک بلوک مشترک. این رفتار است
مشخص شده توسط -fcommon، و پیش فرض برای GCC در اکثر اهداف است. از سوی دیگر،
این رفتار توسط ISO C مورد نیاز نیست و در برخی از اهداف ممکن است دارای سرعت یا کد باشد
جریمه اندازه در مراجع متغیر در -fno-common گزینه مشخص می کند که
کامپایلر باید متغیرهای سراسری اولیه را در بخش داده شی قرار دهد
فایل، به جای تولید آنها به عنوان بلوک های مشترک. این اثر دارد که اگر
همان متغیر (بدون "خارجی") در دو کامپایل مختلف اعلام شده است
هنگامی که آنها را پیوند می دهید یک خطای تعریف چندگانه دریافت کنید. در این صورت باید کامپایل کنید
با -fcommon بجای. تدوین با -fno-common برای اهدافی مفید است
عملکرد بهتری را ارائه می دهد، یا اگر می خواهید تأیید کنید که برنامه روی آن کار می کند
سیستم‌های دیگری که همیشه با اعلان‌های متغیر بدون مقدار اولیه به این روش برخورد می‌کنند.

-fno-ident
نادیده گرفتن #شناسایی بخشنامه.

-finhibit-size-directive
دستور اسمبلر "size." یا هر چیز دیگری که باعث ایجاد مشکل می شود را خروجی ندهید
اگر تابع در وسط تقسیم شود، و دو نیمه در مکان های دور قرار گیرند
جدا در حافظه این گزینه در هنگام کامپایل استفاده می شود crtstuff.c; شما نباید نیاز داشته باشید
برای استفاده از آن برای هر چیز دیگری

-fverbose-asm
اطلاعات تفسیری اضافی را در کد اسمبلی تولید شده قرار دهید تا بیشتر شود
قابل خواندن این گزینه عموماً فقط برای کسانی کاربرد دارد که واقعاً نیاز به خواندن آن دارند
کد اسمبلی تولید شده (شاید در حین رفع اشکال خود کامپایلر).

-fno-verbose-asm، پیش فرض، باعث حذف اطلاعات اضافی می شود و است
هنگام مقایسه دو فایل اسمبلر مفید است.

-فرکورد-gcc-سوئیچ
این سوئیچ باعث می شود که خط فرمانی که برای فراخوانی کامپایلر استفاده شده است باشد
در فایل شی که در حال ایجاد است ثبت می شود. این سوئیچ فقط اجرا می شود
در برخی از اهداف و فرمت دقیق ضبط فرمت فایل هدف و باینری است
وابسته است، اما معمولاً به شکل یک بخش حاوی متن ASCII است. این
سوئیچ مربوط به -fverbose-asm سوئیچ، اما آن سوئیچ فقط ضبط می کند
اطلاعات موجود در فایل خروجی اسمبلر به صورت کامنت است، بنابراین هرگز به شیء نمی رسد
فایل. همچنین ببینید -سوئیچ‌های grecord-gcc برای روش دیگری برای ذخیره گزینه های کامپایلر در
فایل شی

-fpic
ایجاد کد مستقل از موقعیت (PIC) مناسب برای استفاده در یک کتابخانه مشترک، اگر
برای ماشین هدف پشتیبانی می شود. چنین کدی از طریق a به تمام آدرس های ثابت دسترسی دارد
جدول افست جهانی (GOT). لودر پویا ورودی های GOT را زمانی که
برنامه شروع می شود (لودر پویا بخشی از GCC نیست، بلکه بخشی از عملیات است
سیستم). اگر اندازه GOT برای فایل اجرایی پیوند داده شده از حداکثر ماشین خاص بیشتر شود
اندازه، یک پیام خطا از لینک دهنده دریافت می کنید که نشان دهنده آن است -fpic کار نمی کند؛ که در
آن مورد، دوباره کامپایل با -fPIC بجای. (این حداکثرها در SPARC 8k و 32k هستند
در m68k و RS/6000. 386 چنین محدودیتی ندارد.)

کد مستقل از موقعیت به پشتیبانی ویژه نیاز دارد و بنابراین فقط روی آن کار می کند
ماشین های خاص برای 386، GCC از PIC برای سیستم V پشتیبانی می کند اما برای خورشید نه
386i. کد تولید شده برای IBM RS/6000 همیشه مستقل از موقعیت است.

هنگامی که این پرچم تنظیم می شود، ماکروهای "__pic__" و "__PIC__" به 1 تعریف می شوند.

-fPIC
اگر برای ماشین هدف پشتیبانی می شود، کد مستقل از موقعیت، مناسب برای
پیوند پویا و اجتناب از هرگونه محدودیت در اندازه جدول افست جهانی. این
این گزینه در m68k، PowerPC و SPARC تفاوت ایجاد می کند.

کد مستقل از موقعیت به پشتیبانی ویژه نیاز دارد و بنابراین فقط روی آن کار می کند
ماشین های خاص

هنگامی که این پرچم تنظیم می شود، ماکروهای "__pic__" و "__PIC__" به 2 تعریف می شوند.

-fpie
-fPIE
این گزینه ها مشابه هستند -fpic و -fPIC، اما کد مستقل موقعیت را ایجاد کرد
فقط می توان به فایل های اجرایی پیوند داد. معمولا این گزینه ها زمانی استفاده می شوند که - پای GCC
گزینه در هنگام پیوند استفاده خواهد شد.

-fpie و -fPIE هر دو ماکروهای "__pie__" و "__PIE__" را تعریف می کنند. ماکروها دارای
مقدار 1 برای -fpie و 2 برای -fPIE.

-Fno-Jump-Table
از جداول پرش برای دستورهای سوئیچ حتی در جایی که کارآمدتر است استفاده نکنید
نسبت به سایر استراتژی های تولید کد. این گزینه در ارتباط با
-fpic or -fPIC برای ساخت کدی که بخشی از یک پیوند دهنده پویا را تشکیل می دهد و نمی تواند
به آدرس جدول پرش مراجعه کنید. در برخی از اهداف، میزهای پرش نیازی به الف ندارند
GOT و این گزینه مورد نیاز نیست.

-تثبیت شده-REG
ثبت نام را درمان کنید REG به عنوان یک ثبت ثابت؛ کد تولید شده هرگز نباید به آن اشاره کند
آن را (به جز شاید به عنوان نشانگر پشته، نشانگر فریم یا در نقش ثابت دیگری).

REG باید نام یک ثبت نام باشد. نام های ثبت پذیرفته شده مختص ماشین هستند
و در ماکرو "REGISTER_NAMES" در فایل ماکرو توضیحات ماشین تعریف شده اند.

این پرچم شکل منفی ندارد، زیرا انتخاب سه طرفه را مشخص می کند.

-fcall-استفاده شده-REG
ثبت نام را درمان کنید REG به عنوان یک ثبات قابل تخصیص که توسط تابع clobber شده است
تماس می گیرد. ممکن است برای متغیرهای موقت یا متغیرهایی که در سراسر a زندگی نمی کنند اختصاص داده شود
صدا زدن. توابع کامپایل شده به این روش رجیستر را ذخیره و بازیابی نمی کنند REG.

استفاده از این پرچم با نشانگر قاب یا نشانگر پشته یک خطا است. استفاده از این
برای سایر رجیسترها که نقش های فراگیر در اجرای ماشین ثابت کرده اند، پرچم گذاری کنید
مدل نتایج فاجعه باری را به همراه خواهد داشت.

این پرچم شکل منفی ندارد، زیرا انتخاب سه طرفه را مشخص می کند.

-fcall-saved-REG
ثبت نام را درمان کنید REG به عنوان یک ثبات قابل تخصیص که توسط توابع ذخیره می شود. ممکن است
حتی برای متغیرهای موقت یا متغیرهایی که در یک تماس زندگی می کنند اختصاص داده شده است. کارکرد
کامپایل شده به این ترتیب رجیستر را ذخیره و بازیابی می کند REG اگر از آن استفاده کنند

استفاده از این پرچم با نشانگر قاب یا نشانگر پشته یک خطا است. استفاده از این
برای سایر رجیسترها که نقش های فراگیر در اجرای ماشین ثابت کرده اند، پرچم گذاری کنید
مدل نتایج فاجعه باری را به همراه خواهد داشت.

نوع دیگری از فاجعه در نتیجه استفاده از این پرچم برای ثبت نام ایجاد می شود
کدام مقادیر تابع ممکن است برگردانده شود.

این پرچم شکل منفی ندارد، زیرا انتخاب سه طرفه را مشخص می کند.

-fpack-struct[=n]
بدون مقدار مشخص، تمام اعضای سازه را بدون سوراخ در کنار هم قرار دهید. وقتی یک
مقدار مشخص شده است (که باید توان کمی از دو باشد)، اعضای ساختار بسته
با توجه به این مقدار، نشان دهنده حداکثر تراز (یعنی اشیاء با
نیازهای تراز پیش فرض بزرگتر از این مقدار به طور بالقوه بدون تراز خروجی خواهد بود
در محل مناسب بعدی

هشدار: la -fpack-struct سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. علاوه بر این، کد را می سازد
زیرمجموعه. از آن برای مطابقت با یک رابط باینری برنامه غیر پیش فرض استفاده کنید.

-فشار-توابع
فراخوانی ابزار دقیق برای ورود و خروج به توابع ایجاد کنید. درست بعد از عملکرد
ورود و درست قبل از خروج تابع، توابع نمایه سازی زیر فراخوانی می شوند
با آدرس تابع فعلی و سایت فراخوانی آن. (در برخی از سکوها،
"__builtin_return_address" فراتر از تابع فعلی کار نمی کند، بنابراین سایت تماس بگیرید
در غیر این صورت ممکن است اطلاعات برای توابع پروفایل در دسترس نباشد.)

void __cyg_profile_func_enter (باطل *this_fn،
void *call_site) ؛
void __cyg_profile_func_exit (باطل *this_fn،
void *call_site) ؛

اولین آرگومان آدرس شروع تابع فعلی است که ممکن است باشد
دقیقاً در جدول نمادها نگاه کرد.

این ابزار دقیق برای توابع گسترش یافته درون خطی در سایر توابع نیز انجام می شود.
فراخوانی های پروفایل نشان می دهد که از نظر مفهومی، تابع درون خطی کجا وارد شده است
و خارج شد. این بدان معنی است که نسخه های آدرس پذیر چنین توابعی باید در دسترس باشند.
اگر تمام استفاده های شما از یک تابع به صورت درون خطی گسترش یافته باشد، ممکن است به معنای یک تابع اضافی باشد
گسترش اندازه کد اگر استفاده می کنید بیرونی خطی در کد C شما، یک آدرس پذیر است
نسخه ای از این توابع باید ارائه شود. (به هر حال معمولاً چنین است، اما
اگر خوش شانس باشید و بهینه ساز همیشه توابع را به صورت درون خطی گسترش دهد، ممکن است داشته باشید
بدون ارائه کپی های ثابت دور شد.)

ممکن است به یک تابع ویژگی "no_instrument_function" داده شود، در این صورت این است
ابزار دقیق انجام نخواهد شد این را می توان برای مثال برای پروفایل استفاده کرد
توابع ذکر شده در بالا، روتین های وقفه با اولویت بالا، و هر توابعی که از آنها وجود دارد
توابع پروفایل را نمی توان به طور ایمن فراخوانی کرد (شاید کنترل کننده های سیگنال، اگر
روال های پروفایل تولید خروجی یا تخصیص حافظه).

-Finstrument-Functions- لیست-فایل-لیست =پرونده,پرونده، ...
فهرستی از توابع حذف شده از ابزار دقیق را تنظیم کنید (به توضیحات مراجعه کنید
از "-instrument-functions"). اگر فایلی که حاوی یک تعریف تابع است مطابقت دارد
با یکی از پرونده، سپس آن تابع ابزاری نیست. مسابقه در تاریخ انجام می شود
رشته های فرعی: اگر پرونده پارامتر زیر رشته ای از نام فایل است که در نظر گرفته می شود
همسان باشد

مثلا:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

هر تابع درون خطی تعریف شده در فایل هایی که نام مسیر آنها حاوی "/bits/stl" باشد را حذف می کند.
یا "include/sys".

اگر به دلایلی می‌خواهید حرف '،' را در یکی از آن‌ها اضافه کنید همزاد، نوشتن '،'. برای
به عنوان مثال، "-finstrument-functions-exclude-file-list=',,tmp'" (به نقل قول تکی توجه کنید
اطراف گزینه).

-Finstrument-Functions-Function-Function-List =همزاد,همزاد، ...
این شبیه به "-finstrument-functions-exclude-file-list" است، اما این گزینه تنظیم می شود
لیستی از نام توابع که از ابزار دقیق حذف می شوند. نام تابع به
be matched نام قابل مشاهده کاربر آن است، مانند "بردار blah(بردار const &)"
نه نام مخدوش داخلی (به عنوان مثال، "_Z4blahRSt6vectorIiSaIiEE"). مسابقه انجام شد
در زیر رشته ها: اگر همزاد پارامتر زیر رشته ای از نام تابع است
به عنوان یک مسابقه در نظر گرفته شده است. برای شناسه های توسعه یافته C99 و C++، نام تابع
باید در UTF-8 داده شود، بدون استفاده از نام کاراکترهای جهانی.

-fstack-check
کد ایجاد کنید تا مطمئن شوید که از مرز پشته فراتر نمی روید. شما
اگر در محیطی با چندین رشته در حال اجرا هستید، باید این پرچم را مشخص کنید.
اما فقط به ندرت نیاز است که آن را در یک محیط تک رشته ای از زمان پشته مشخص کنید
اگر فقط یک پشته وجود داشته باشد، سرریز به طور خودکار در تقریباً همه سیستم ها شناسایی می شود.

توجه داشته باشید که این سوئیچ در واقع باعث بررسی انجام نمی شود. عامل
سیستم یا زمان اجرا زبان باید این کار را انجام دهد. سوئیچ باعث تولید کد می شود
مطمئن شوید که پشته در حال گسترش است.

علاوه بر این می توانید یک پارامتر رشته را مشخص کنید: "no" به معنای عدم بررسی، "عمومی" است.
به معنای اجبار استفاده از چک کردن به سبک قدیمی، "خاص" به معنای استفاده از بهترین بررسی است
روش و معادل برهنه است -fstack-check.

بررسی سبک قدیمی یک مکانیسم عمومی است که نیازی به پشتیبانی هدف خاصی ندارد
کامپایلر اما دارای اشکالات زیر است:

1. استراتژی تخصیص اصلاح شده برای اشیاء بزرگ: آنها همیشه تخصیص خواهند یافت
اگر اندازه آنها از یک آستانه ثابت بیشتر شود، به صورت پویا.

2. محدودیت ثابت در اندازه قاب استاتیک توابع: زمانی که با a در بالای آن قرار دارد
عملکرد خاص، چک کردن پشته قابل اعتماد نیست و یک هشدار توسط
گردآورنده

3. ناکارآمدی: به دلیل هر دو استراتژی تخصیص اصلاح شده و عمومی
پیاده سازی، عملکرد کد مختل می شود.

توجه داشته باشید که بررسی پشته به سبک قدیمی نیز روش بازگشتی برای «خاص» است، اگر خیر
پشتیبانی هدف در کامپایلر اضافه شده است.

-fstack-limit-register=REG
-fstack-limit-symbol=همزاد
-fno-stack-limit
کد ایجاد کنید تا مطمئن شوید که پشته از مقدار معینی نیز رشد نمی کند
ارزش یک رجیستر یا آدرس یک نماد. اگر پشته فراتر می رفت
مقدار، یک سیگنال افزایش می یابد. برای اکثر اهداف، سیگنال قبل از این بلند می شود
پشته از مرز عبور می کند، بنابراین دریافت سیگنال بدون گرفتن امکان پذیر است
مراقبت های ویژه.

به عنوان مثال، اگر پشته از آدرس مطلق شروع شود 0x80000000 و به سمت پایین رشد می کند،
می توانید از پرچم ها استفاده کنید -fstack-limit-symbol=__stack_limit و
-Wl,--defsym,__stack_limit=0x7ffe0000 برای اعمال محدودیت پشته 128 کیلوبایت. توجه داشته باشید که
این ممکن است فقط با پیوند دهنده گنو کار کند.

-fsplit-stack
برای تقسیم خودکار پشته قبل از سرریز شدن، کد ایجاد کنید. نتیجه
برنامه دارای یک پشته ناپیوسته است که فقط در صورتی می تواند سرریز شود که برنامه قادر به انجام آن نباشد
هر حافظه دیگری را اختصاص دهید این برای اجرای برنامه های رشته ای بسیار مفید است
دیگر نیازی به محاسبه اندازه پشته خوب برای استفاده برای هر رشته نیست. این هست
در حال حاضر فقط برای i386 و x86_64 با گنو/لینوکس اجرا شده است.

وقتی کد با -fsplit-stack کد تماس کامپایل شده بدون -fsplit-stack، آنجا
ممکن است فضای پشته زیادی برای اجرای کد دوم در دسترس نباشد. در صورت کامپایل کردن همه
کد، از جمله کد کتابخانه، با -fsplit-stack یک گزینه نیست، پس پیوند دهنده می تواند
این تماس ها را برطرف کنید تا کد بدون کامپایل شود -fsplit-stack همیشه بزرگ است
پشته. پشتیبانی از این در پیوند طلا در نسخه GNU binutils پیاده سازی شده است
2.21 و بعد

-فرار-برآمده
این گزینه و مشابه آن، -fno-Leading-Underscore، به زور راه C را تغییر دهید
نمادها در فایل شی نشان داده می شوند. یکی از کاربردها کمک به پیوند با میراث است
کد اسمبلی

هشدار: la -فرار-برآمده سوئیچ باعث می شود GCC کدی تولید کند که اینطور نیست
باینری سازگار با کد تولید شده بدون آن سوئیچ. از آن برای مطابقت با a استفاده کنید
رابط باینری برنامه غیر پیش فرض همه اهداف پشتیبانی کامل را ارائه نمی دهند
برای این سوئیچ

-ftls-model=مدل
مدل ذخیره سازی thread-local مورد استفاده را تغییر دهید. در مدل استدلال باید یکی از
«جهانی-دینامیک»، «محلی-دینامیک»، «محلی-اجرایی» یا «محلی-اجرایی».

پیش فرض بدون -fpic "initial-exec" است. با -fpic پیش فرض است
"جهانی - پویا".

-قابلیت مشاهده=پیش فرض|داخلی|پنهان|محافظت شده
مشاهده نماد تصویر ELF پیش فرض را روی گزینه مشخص شده تنظیم کنید --- همه نمادها خواهند بود
با این علامت گذاری شود مگر اینکه در کد لغو شود. استفاده از این ویژگی می تواند بسیار
به طور قابل ملاحظه ای پیوند و زمان بارگذاری کتابخانه های اشیاء مشترک را بهبود می بخشد، بیشتر تولید می کند
کد بهینه سازی شده، صادرات API تقریباً عالی را ارائه می دهد و از برخورد نمادها جلوگیری می کند. این است
به شدت توصیه می شود که از آن در هر شیء مشترکی که توزیع می کنید استفاده کنید.

با وجود نامگذاری، "پیش فرض" همیشه به معنای عمومی است. به عنوان مثال، برای پیوند در دسترس است
در مقابل از خارج از شی مشترک. "محافظت شده" و "داخلی" بسیار بی فایده هستند
در استفاده در دنیای واقعی، بنابراین تنها گزینه رایج دیگر "پنهان" خواهد بود. در
پیش فرض اگر -قابلیت مشاهده مشخص نشده است "پیش فرض" است، یعنی هر نماد را بسازید
عمومی --- این باعث همان رفتار نسخه های قبلی GCC می شود.

توضیح خوبی در مورد مزایای ارائه شده توسط اطمینان از صحت نمادهای ELF
قابلیت مشاهده توسط "چگونه کتابخانه های مشترک بنویسیم" توسط اولریش درپر (که می تواند
یافت شده درhttp://people.redhat.com/~drepper/>) --- با این حال راه حل برتر ساخته شده است
با این گزینه می‌توان مواردی را که در حالت پیش‌فرض عمومی است علامت‌گذاری کرد
به‌طور پیش‌فرض چیزها را پنهان کرده و علامت‌گذاری کنید. این هنجار با DLL در ویندوز و
با fvisibility = پنهان و "__ویژگی__ ((قابلیت مشاهده ("پیش فرض")))" به جای
"__declspec(dllexport)" معنایی تقریباً یکسان با نحو یکسان دریافت می کنید.
این یک موهبت بزرگ برای کسانی است که با پروژه های چند پلتفرمی کار می کنند.

برای کسانی که پشتیبانی قابلیت مشاهده را به کد موجود اضافه می کنند، می توانید پیدا کنید #پراگما GCC
دید استفاده این کار به این صورت است که شما اعلان‌هایی را که می‌خواهید تنظیم کنید، ضمیمه می‌کنید
دید برای با (مثلا) #پراگما GCC دید فشار (پنهان) و #پراگما GCC
دید پاپ. به خاطر داشته باشید که نمایان بودن نماد باید مشاهده شود as بخش of la
API رابط قرارداد و بنابراین همه کدهای جدید باید همیشه قابلیت مشاهده را مشخص کنند
پیش فرض نیست. به عنوان مثال، اعلانات فقط برای استفاده در DSO محلی باید همیشه
برای جلوگیری از هزینه های غیرمستقیم PLT به طور واضح به عنوان مخفی علامت گذاری شود---با این کار
واضح بودن بسیار به خوانایی و مستندسازی کد کمک می کند. توجه داشته باشید که
با توجه به الزامات مشخصات ISO C++، اپراتور جدید و اپراتور حذف باید
همیشه از دید پیش فرض باشد.

توجه داشته باشید که هدرهای خارج از پروژه شما، به ویژه هدرهای سیستم و
سرصفحه های هر کتابخانه دیگری که استفاده می کنید، ممکن است انتظار نداشته باشید که با آنها کامپایل شوند
دید غیر از حالت پیش فرض شاید لازم باشد به صراحت بگویید #پراگما GCC
دید فشار (پیش‌فرض) قبل از درج چنین هدرهایی

بیرونی اعلامیه ها تحت تاثیر قرار نمی گیرند -قابلیت مشاهده، بنابراین تعداد زیادی کد می تواند باشد
دوباره کامپایل شده با fvisibility = پنهان بدون هیچ تغییری با این حال، این بدان معنی است که
تماس می گیرد بیرونی توابع بدون دید واضح از PLT استفاده می کنند، بنابراین بیشتر است
موثر برای استفاده __صفت ((دید)) و / یا #پراگما GCC دید برای گفتن
کامپایلر که بیرونی اظهارات باید پنهان تلقی شوند.

توجه داشته باشید که -قابلیت مشاهده بر موجودیت های پیوند مبهم C++ تأثیر می گذارد. این بدان معنی است که، برای
به عنوان مثال، یک کلاس استثنایی که بین DSO ها پرتاب می شود باید به طور صریح باشد
با نمای پیش فرض مشخص شده است به طوری که type_info گره ها بین
DSOs

مروری بر این تکنیک ها، مزایای آن ها و نحوه استفاده از آن ها در اینجا آمده است
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict-volatile-bitfields
این گزینه باید در صورت دسترسی به فیلدهای بیت فرار (یا ساختارهای دیگر) استفاده شود
فیلدها، اگرچه کامپایلر معمولاً به هر حال آن انواع را ارج نهاده است) باید از یک تک استفاده کند
دسترسی به عرض نوع میدان، در صورت امکان به تراز طبیعی تراز شود.
به عنوان مثال، اهداف با رجیسترهای جانبی نقشه‌برداری شده با حافظه ممکن است به همه این موارد نیاز داشته باشند
دسترسی به عرض 16 بیت. با این پرچم کاربر می تواند تمام بیت های جانبی را اعلام کند.
فیلدهایی به عنوان "کوتاه بدون علامت" (با فرض اینکه کوتاه 16 بیت در این اهداف است) برای مجبور کردن GCC
برای استفاده از دسترسی های 16 بیتی به جای، شاید، دسترسی 32 بیتی کارآمدتر.

اگر این گزینه غیرفعال باشد، کامپایلر از کارآمدترین دستورالعمل استفاده می کند. که در
مثال قبلی، ممکن است یک دستورالعمل بار 32 بیتی باشد، حتی اگر چنین باشد
به بایت هایی دسترسی داشته باشید که حاوی هیچ بخشی از فیلد بیت یا نقشه برداری از حافظه نیستند
رجیسترهای نامرتبط با موردی که به روز می شود.

اگر هدف نیاز به تراز دقیق داشته باشد، و احترام به نوع میدان نیاز دارد
با نقض این تراز، اخطار صادر می شود. اگر فیلد دارای ویژگی "packed" باشد،
دسترسی بدون رعایت نوع فیلد انجام می شود. اگر زمینه ندارد
ویژگی "packed"، دسترسی با احترام به نوع فیلد انجام می شود. در هر دو مورد، GCC
فرض می کند که کاربر چیزی در مورد سخت افزار مورد نظر می داند که از آن بی اطلاع است.

مقدار پیش فرض این گزینه توسط رابط باینری برنامه تعیین می شود
پردازنده هدف

محیط زیست


این بخش چندین متغیر محیطی را توصیف می کند که بر نحوه عملکرد GCC تأثیر می گذارد. مقداری
از آنها با تعیین دایرکتوری ها یا پیشوندهایی برای استفاده در هنگام جستجوی انواع مختلف کار می کنند
از فایل ها برخی برای مشخص کردن سایر جنبه‌های محیط کامپایل استفاده می‌شوند.

توجه داشته باشید که می توانید مکان هایی را برای جستجو با استفاده از گزینه هایی مانند -B, -I و -L.
این موارد بر مکان‌هایی که با استفاده از متغیرهای محیطی مشخص شده‌اند، اولویت دارند
بر مواردی که توسط پیکربندی GCC مشخص شده است اولویت دارند.

زبان
LC_CTYPE
LC_MESSAGES
LC_ALL
این متغیرهای محیطی نحوه استفاده GCC از اطلاعات محلی سازی را کنترل می کنند
که به GCC اجازه می دهد تا با کنوانسیون های ملی مختلف کار کند. GCC منطقه را بازرسی می کند
دسته LC_CTYPE و LC_MESSAGES اگر برای این کار پیکربندی شده باشد. این محلی
دسته ها را می توان به هر مقداری که توسط نصب شما پشتیبانی می شود تنظیم کرد. یک مقدار معمولی است
en_GB.UTF-8 برای انگلیسی در بریتانیا کدگذاری شده در UTF-8.

La LC_CTYPE متغیر محیطی طبقه بندی کاراکترها را مشخص می کند. GCC از آن استفاده می کند
تعیین مرزهای کاراکتر در یک رشته؛ این برای چند بایت مورد نیاز است
رمزگذاری هایی که حاوی کاراکترهای نقل قول و فرار هستند که در غیر این صورت تفسیر می شوند
به عنوان انتهای رشته یا گریز.

La LC_MESSAGES متغیر محیطی زبان مورد استفاده در تشخیص را مشخص می کند
پیام ها.

اگر LC_ALL متغیر محیطی تنظیم شده است، مقدار آن را لغو می کند LC_CTYPE و
LC_MESSAGES؛ در غیر این صورت، LC_CTYPE و LC_MESSAGES به طور پیش فرض به مقدار زبان
متغیر محیطی. اگر هیچ یک از این متغیرها تنظیم نشده باشد، GCC به طور پیش فرض روی حالت سنتی قرار می گیرد
ج رفتار انگلیسی

TMPDIR
If TMPDIR تنظیم شده است، دایرکتوری مورد استفاده برای فایل های موقت را مشخص می کند. GCC استفاده می کند
فایل های موقت برای نگهداری خروجی یک مرحله از کامپایل که قرار است به عنوان استفاده شود
ورودی به مرحله بعدی: به عنوان مثال، خروجی پیش پردازنده، که عبارت است از
ورودی به کامپایلر مناسب

gcc_compare_debug
محیط gcc_compare_debug تقریبا معادل پاس کردن است -fcompare-debug به
درایور کامپایلر برای جزئیات بیشتر به مستندات این گزینه مراجعه کنید.

GCC_EXEC_PREFIX
If GCC_EXEC_PREFIX تنظیم شده است، پیشوندی را برای استفاده در نام های تعیین می کند
زیربرنامه هایی که توسط کامپایلر اجرا می شوند. هنگامی که این پیشوند ترکیب می شود، هیچ اسلشی اضافه نمی شود
با نام یک زیربرنامه، اما می توانید پیشوندی را مشخص کنید که با علامت اسلش به پایان می رسد اگر
شما آرزو دارید

If GCC_EXEC_PREFIX تنظیم نشده است، GCC سعی خواهد کرد پیشوند مناسبی برای آن پیدا کند
بر اساس نام مسیری که با آن فراخوانی شده است استفاده کنید.

اگر GCC نتواند زیربرنامه را با استفاده از پیشوند مشخص شده پیدا کند، سعی می کند در آن جستجو کند
مکان های معمول برای زیربرنامه

مقدار پیش فرض از GCC_EXEC_PREFIX is پیشوند/lib/gcc/ جایی که پیشوند پیشوند است
کامپایلر نصب شده در خیلی از موارد پیشوند مقدار "پیشوند" در هنگام اجرا است
پیکربندی اسکریپت

سایر پیشوندهای مشخص شده با -B بر این پیشوند ارجحیت دارد.

این پیشوند برای یافتن فایل هایی مانند crt0.o که برای پیوند استفاده می شود.

علاوه بر این، پیشوند به روشی غیرمعمول در یافتن دایرکتوری های مورد جستجو استفاده می شود
برای فایل های هدر برای هر یک از دایرکتوری های استاندارد که نام آنها معمولا شروع می شود
با /usr/local/lib/gcc (به طور دقیق تر، با ارزش GCC_INCLUDE_DIR، GCC تلاش می کند
جایگزین کردن آن با پیشوند مشخص شده برای تولید یک فهرست جایگزین
نام. بنابراین، با -بفو/، GCC جستجو خواهد کرد فو / بار جایی که معمولا جستجو می کند
/usr/local/lib/bar. این دایرکتوری های جایگزین ابتدا جستجو می شوند. استاندارد
دایرکتوری ها در مرحله بعدی قرار می گیرند. اگر یک دایرکتوری استاندارد با پیکربندی شده شروع شود پیشوند سپس
ارزش پیشوند جایگزین شده است GCC_EXEC_PREFIX هنگام جستجوی فایل های هدر

COMPILER_PATH
ارزش COMPILER_PATH فهرستی از دایرکتوری ها که با دو نقطه جدا شده است، بسیار شبیه به PATH.
GCC در صورت عدم امکان، دایرکتوری های مشخص شده را هنگام جستجوی زیربرنامه ها امتحان می کند
زیربرنامه ها را با استفاده از GCC_EXEC_PREFIX.

LIBRARY_PATH
ارزش LIBRARY_PATH فهرستی از دایرکتوری ها که با دو نقطه جدا شده است، بسیار شبیه به PATH.
هنگامی که به عنوان یک کامپایلر بومی پیکربندی می شود، GCC دایرکتوری هایی را که به این ترتیب مشخص شده است، امتحان می کند
جستجو برای فایل های پیوند دهنده خاص، در صورتی که با استفاده از آنها نتواند آنها را پیدا کند GCC_EXEC_PREFIX.
پیوند با استفاده از GCC همچنین از این دایرکتوری ها هنگام جستجوی کتابخانه های معمولی استفاده می کند
برای -l گزینه (اما دایرکتوری های مشخص شده با -L اول بیا).

زبان
این متغیر برای ارسال اطلاعات محلی به کامپایلر استفاده می شود. یک راه که در آن
این اطلاعات برای تعیین مجموعه کاراکتر مورد استفاده در هنگام کاراکتر استفاده می شود
literals، string literals و comments در C و C++ تجزیه می شوند. زمانی که کامپایلر است
پیکربندی شده است تا به کاراکترهای چند بایتی اجازه دهد، مقادیر زیر برای زبان هستند
شناسایی شده:

C-JIS
شخصیت های JIS را بشناسید.

C-SJIS
شخصیت های SJIS را بشناسید.

C-EUCJP
شخصیت های EUCJP را بشناسید.

If زبان تعریف نشده است، یا اگر مقدار دیگری داشته باشد، کامپایلر از آن استفاده خواهد کرد
mblen و mbtowc همانطور که توسط محلی پیش فرض برای شناسایی و ترجمه چند بایت تعریف شده است
کاراکتر باشد.

برخی از متغیرهای محیط اضافی بر رفتار پیش پردازنده تأثیر می گذارند.

CPATH
C_INCLUDE_PATH
cplus_include_path
OBJC_INCLUDE_PATH
مقدار هر متغیر فهرستی از دایرکتوری ها است که با یک کاراکتر خاص از هم جدا شده اند
پسندیدن PATH، که در آن به دنبال فایل های هدر بگردید. شخصیت خاص،
"PATH_SEPARATOR" وابسته به هدف است و در زمان ساخت GCC تعیین می شود. برای مایکروسافت
اهداف مبتنی بر ویندوز یک نقطه ویرگول است و تقریباً برای همه اهداف دیگر یک است
روده بزرگ

CPATH فهرستی از دایرکتوری‌ها را مشخص می‌کند که گویی با آنها مشخص شده است -I، اما
پس از هر مسیر داده شده با -I گزینه های موجود در خط فرمان این متغیر محیطی
بدون توجه به اینکه کدام زبان در حال پیش پردازش است استفاده می شود.

متغیرهای محیطی باقیمانده فقط هنگام پیش پردازش یک مورد خاص اعمال می شوند
زبان نشان داده شده است. هر کدام فهرستی از دایرکتوری ها را مشخص می کند که باید جستجو شوند
مشخص شده با -سیستم، اما پس از هر مسیر داده شده با -سیستم گزینه های موجود در
خط فرمان.

در تمام این متغیرها، یک عنصر خالی به کامپایلر دستور می دهد تا جریان خود را جستجو کند
دایرکتوری کار عناصر خالی می توانند در ابتدا یا انتهای یک مسیر ظاهر شوند. برای
به عنوان مثال، اگر مقدار CPATH ":/special/include" است که همان اثر را دارد
-NS. -I/ویژه/شامل.

DEPENDENCIES_OUTPUT
اگر این متغیر تنظیم شده باشد، مقدار آن نحوه خروجی‌سازی وابستگی‌ها را برای Make based مشخص می‌کند
روی فایل‌های هدر غیر سیستمی که توسط کامپایلر پردازش می‌شوند. فایل های هدر سیستم هستند
در خروجی وابستگی نادیده گرفته شده است.

ارزش DEPENDENCIES_OUTPUT می تواند فقط یک نام فایل باشد، در این صورت قوانین Make
با حدس زدن نام هدف از روی نام فایل منبع، روی آن فایل نوشته می شوند. یا
مقدار می تواند فرم داشته باشد پرونده هدف، در این صورت قوانین در فایل نوشته می شوند پرونده
با استفاده از هدف به عنوان نام هدف

به عبارت دیگر، این متغیر محیطی معادل ترکیب گزینه ها است -مامان
و -MF، با اختیاری -MT سوئیچ نیز

SUNPRO_DEPENDENCIES
این متغیر همان است DEPENDENCIES_OUTPUT (به بالا مراجعه کنید)، به جز آن سیستم
فایل‌های هدر نادیده گرفته نمی‌شوند، بنابراین دلالت دارد -M به جای -مامان. با این حال
وابستگی به فایل ورودی اصلی حذف شده است.

از g++-4.7 به صورت آنلاین با استفاده از خدمات onworks.net استفاده کنید


سرورها و ایستگاه های کاری رایگان

دانلود برنامه های ویندوز و لینوکس

  • 1
    turkdevops
    turkdevops
    TurkDevOps a ?k kaynak yaz?l?m
    geli?tirici topluluklar? DevTurks-Team
    Taraf?ndan desteklenmektedir..
    ویژگی ها:https://github.com/turkdevopshttps://turkdevops.g...
    Turkdevops را دانلود کنید
  • 2
    asammdf
    asammdf
    *asammdf* یک تجزیه کننده سریع پایتون است و
    ویرایشگر ASAM (Associtation for
    استانداردسازی اتوماسیون و
    سیستم های اندازه گیری) MDF / MF4
    (قالب داده های اندازه گیری...
    asammdf را دانلود کنید
  • 3
    LAME (لنگ رمزگذار MP3 نیست)
    LAME (لنگ رمزگذار MP3 نیست)
    LAME یک ابزار آموزشی برای استفاده است
    برای یادگیری در مورد رمزگذاری MP3. این
    هدف پروژه LAME بهبود است
    آکوستیک روانی، کیفیت و سرعت
    نماینده مجلس ...
    دانلود LAME (Lame Aint An MP3 Encoder)
  • 4
    wxPython
    wxPython
    مجموعه ای از ماژول های افزونه پایتون که
    کلاس های رابط کاربری گرافیکی کراس پلتفرم را از
    wxWidgets.. مخاطب: توسعه دهندگان. کاربر
    رابط: X Window System (X11)، Win32 ...
    دانلود wxPython
  • 5
    packfilemanager
    packfilemanager
    این فایل منیجر بسته Total War است
    پروژه، از نسخه 1.7 شروع می شود. آ
    معرفی کوتاه Warscape
    مودینگ: ...
    دانلود packfilemanager
  • 6
    IPerf2
    IPerf2
    ابزاری برای اندازه گیری ترافیک شبکه
    عملکرد TCP و UDP با معیارها
    در اطراف هر دو ظرفیت و تأخیر. در
    اهداف شامل حفظ یک فعال است
    کد iperf...
    IPerf2 را دانلود کنید
  • بیشتر "

دستورات لینوکس

Ad