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

اجرای سرورها | Ubuntu > | Fedora > |


فاویکون OnWorks

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

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

این دستور g++-4.8 است که می تواند در ارائه دهنده هاست رایگان 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, -فرمت و غیره اکثر اینها هم مثبت و هم منفی دارند
تشکیل می دهد؛ شکل منفی از -فو is -fno-foo. این کتابچه راهنمای تنها یکی از این موارد را مستند می کند
دو فرم، هر کدام که پیش فرض نباشد.

OPTIONS


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

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

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

++C زبان گزینه
-fabi-version=n -fno-access-control -fcheck-جدید -fconstexpr-depth=n
-friend-injection -fno-elide-constructors -fno-enforce-eh-specs -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-backtrace-limit=n -ftemplate-depth=n -fno-threadsafe-statics
-fuse-cxa-atexit -فنو ضعیف -nostdinc++ -fno-default-inline
-fvisibility-inlines-hidden -fvisibility-ms-compat -fext-numeric-literals -وابی
-Wconversion-null -Wctor-dtor-privacy -dtor-non-virtual-delete-dtor -Wliteral-پسوند
- تنگ کردن -به جز غیر مجازی-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 -fno-diagnostics-show-caret

هشدار گزینه
-fsyntax-only -fmax-errors=n -پدانتیک -اشتباهات -w -وکسترا -دیو
-وادرس -تجمیع-بازگشت -بهینه سازی های حلقه متحرک -محدوده های جنگی
-Wno-ویژگی ها -Wno-ساخته-کلان-بازتعریف شده است -Wc++-compat -Wc++11-compat -Wcast-align
-Wcast-qual -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-include-dirs -Wno-Mudflap -Wno-multichar
-بدون هیچ -سرریز -طبقه های تار بسته بندی شده -Wpacked-bitfield-compat
-پد شده -پرانتزها -فرمت Wpedantic-ms -فرمت Wno-pedantic-ms -Wpointer-arith
بدون اشاره گر به غیر بازیگری -Wredundant-decls -Wno-return-local-addr - نوع چرخشی
-توالی-نقطه -سایه -Wsign-مقایسه کنید -Wsign-تبدیل
-Wsizeof-pointer-memaccess -Wstack-محافظ -Wstack-usage=لن Wstrict-aliasing
-Wstrict-aliasing=n -سرریز مچ دست -Wstrict-overflow=n
-Wsuggest-attribute=[خالص|طراح|بدون بازگشت|قالب] -Wmissing-format-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-macros -بردار-عملیات-عملکرد -وولا -Wvolatile-register-var
-نوشتن رشته ها -Wzero-as-null-pointer-constant

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

اشکال زدایی گزینه
-dنامه ها زباله ها -ماشین تخلیه - تخلیه -fsanitize=سبک -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-unnumbered-links
-fdump-translation-unit[-n] -fdump-class-hierarchy[-n] -fdump-ipa-all
-fdump-ipa-cgraph -fdump-ipa-inline -fdump-passes -fdump-statistics -fdump-tree-all
-fdump-tree-original[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg -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 -fno-eliminate-unused-debug-types
-feliminate-unused-debug-symbols -femit-class-debug-always -قابل دفاع-نوع-عبور
-قابل دفاع-نوع-عبور=محدوده-لیست -fdebug-types-section -fmem-report-wpa -fmem-report
-fpre-ipa-mem-گزارش -fpost-ipa-mem-report -fprofile-arcs -fopt-info
-fopt-info-گزینه های[=پرونده] -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-asm -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 -زمان[=پرونده]

بهینه سازی گزینه
-بهینه سازی های حلقه-faggressive -falign-functions[=n] -falign-jumps[=n]
-falign-labels[=n] -falign-loops[=n] -تعدادی-ریاضی -fauto-inc-dec
-شاخه-احتمالات -fbranch-target-load-optimize -fbranch-target-load-optimize2
-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-sections -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 -fhoist- مجاور-بارها تبدیل -fif -fif-conversion2
-findirect-inlining توابع -finline توابع-finline-یک بار فراخوانی می شود -finline-limit=n
-finline-small-functions -fipa-cp -fipa-cp-clone -فیپا-پتا -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-nest-optimize -floop-parallelize-all -flto -flto-compression-level
-flto-partition=جلبک -flto-گزارش -fmerge-all-constants -fmerge-constants
-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-report -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-use-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-pipelining حلقه های بیرونی لوله گذاری-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-distribute-patterns
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-parallelize-loops=n
-ftree-pre -ftree-partial-pre -ftree-pta -ftree-reassoc سه سینک -ftree-slsr
-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 دیر
-iwithprefixbefore دیر -سیستم دیر -imultilib دیر -isysroot دیر -M -مامان -MF -MG
-نماینده مجلس -MQ -MT -nostdinc -P -fdebug-cpp -افتراک-کلان-گسترش دایرکتوری fworking
نقشه برداری سه نمودارها -دف -Uدرشت دستور -Wp،انتخاب -Xpreprocessor انتخاب -no-integrated-cpp

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

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

فهرست راهنما گزینه
-Bپیشوند -Iدیر -iplugindir=دیر -نقل دادندیر -Lدیر -specs=پرونده -من- --sysroot=دیر
--no-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=سنتی
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -مارس=نام -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=حالت
-mvect-double -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=نام -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 -mpoke-function-name
-مهم -مارم -mtpcs-frame -mtpcs-leaf-frame -mcaller-super-interworking
-mcallee-super-interworking -mtp=نام -mtls-dialect=گویش -mword-relocations
-mfix-cortex-m3-ldrd -دسترسی چندجانبه

APR گزینه -mmcu=mcu تجمع-args -branch-cost=هزینه -mcall-prologues -mint8
-mno-وقفه می کند -آرامش کن -mstrict-X -mtiny-stack -Waddr-space-convert

بلک فین گزینه -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_defined_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 -مییی -mieee-with-inexact
-mieee-conformant -mfp-trap-mode=حالت -mfp-rounding-mode=حالت -mtrap-precision=حالت
-mbuild-constants -mcpu=نوع cpu -mtune=نوع cpu -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data داده های بزرگ -msmall-text
-متن بزرگ -mmmory-latency=زمان

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

FRV گزینه -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 -اماس - دقیقه -مکسر -mno-exr -mint32 -بدخیم-300

HPPA گزینه -مارس=نوع معماری -mbig-switch -mdisable-fpregs
-mdisable-indexing -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 -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 -mrtm -mlwp -mthreads -mno-align-stringops
-minline-all-stringops -minline-stringops-به صورت پویا -mstringop-strategy=جلبک
-mpush-args انباشته-خروجی-آرگ -m128bit-long-double -m96bit-long-double
-mlong-double-64 -mlong-double-80 -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 -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

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 -mno-bitfield -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 -mcallgraph-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
-mbig-endian -mlittle-endian -mxl-reorder -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 -mno-float چند شناور -mdouble-float -mdsp
-mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -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 -mextern-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

مکسی گزینه -meb -مل -mno-crt0

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=کد-مدل
-mpowerpc64 -مالتیفک -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 -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-avoid-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
-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-indirect -power8-fusion -mno-mpower8-fusion
-power8-وکتور -mno-power8-وکتور -mcrypto -mno-crypto -mdirect-move -mno-direct-move
-mquad-memory -mno-quad-memory -mquad-memory-atomic -mno-quad-memory-atomic
-mcompat-align-parm -mno-compat-align-parm

RX گزینه -m64bit-دبل -m32bit-دبل -fpu -nofpu -mcpu= -mbig-endian-data
داده های کوچک انددیان -msmall-data -msim -mno-sim -mas100-syntax -mno-as100-syntax
-آرامش کن -mmax-constant-size= -mint-register= -بی حال -mno-warn-multiple-fast-interrupts
-msave-acc-in-interrupts

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 -mhotpatch=نیمه کلمات,نیمه کلمات

نمره گزینه -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=محدوده ثبت نام -مخاطبی-مخاطبی
-mgettrcost=عدد -mpt-fixed انباشته-خروجی-آرگ -minvalid-symbols
-matomic-model=مدل اتمی -branch-cost=تعداد -mzdcbranch -mno-zdcbranch -mcbranchdi
-mcmpeqdi -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
وانمود کردن - حرکت کردن -متاس

سولاریس 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 -mhard-quad-float
-msoft-quad-float -mstack-bias -mno-stack-bias دوبل
-mno-unaligned-doubles -Muser-mode -mno-user-mode -mv8plus -mno-v8plus -mvis
-mno-vis -mvis2 -mno-vis2 -mvis3 -mno-vis3 -mcbcond -mno-cbcond -mfmaf -mno-fmaf
-mpopc -mno-popc -mfix-at697f -mfix-ut699

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 -mcmodel=کد-مدل

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 -mv850e3v5 -mloop -آرامش کن -پرش های بلند -msoft-float -mhard-float -mgcc-abi
-mrh850-abi -mbig-switch

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

VMS گزینه -mvms-return-codes -mdebug-main=پیشوند -mmalloc64 -mpointer-size=اندازه

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 -mtext-section-literals
-mno-text-section-literals -mtarget-align -mno-target-align -mlong calls
-mno-long calls

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

رمز نسل گزینه
-fcall-saved-REG -fcall-استفاده شده-REG -تثبیت شده-REG - استثنائات -fnon-call-exceptions
-fdelete-dead-exceptions -funwind-جدول جداول -فاسینکرون-باز کردن -fno-gnu-unique
-finhibit-size-directive -فشار-توابع
-finstrument-functions-exclude-function-list=همزاد,همزاد، ...
-finstrument-functions-exclude-file-list=پرونده,پرونده، ... -fno-common -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tables -فرکورد-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=مدل
-fstack-reuse=استفاده مجدد -ftrapv -fwrapv -fbounds-بررسی -قابلیت مشاهده
-fstrict-volatile-bitfields -fsync-libcalls

گزینه کنترل 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 حاوی بدنه واحد کتابخانه (یک زیربرنامه یا بدنه بسته).
چنین فایل هایی نیز نامیده می شوند بدن.

پرونده.d
فایل کد منبع D.

پرونده.di
فایل کد رابط D.

پرونده.DD
فایل کد اسناد D.

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

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

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

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

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

زبان
نمایش گزینه های پشتیبانی شده برای زبان، که در آن زبان نام یکی از
زبان های پشتیبانی شده در این نسخه از 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 is
gdb --آرگس cc1 ....

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

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

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

-fada-spec-parent=واحد
در رابطه با -fdump-ada-spec[-سلیم] در بالا، مشخصات 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++ را مشخص می کند. درمان می کند .c, .h و .i فایل ها به عنوان
فایل های منبع C++ به جای فایل های منبع C، مگر اینکه -x استفاده می شود. این برنامه نیز مفید است
هنگام پیش کامپایل کردن یک فایل هدر 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/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
c++03
استاندارد ISO C++ 1998 به علاوه تصحیح فنی 2003 و برخی موارد دیگر
گزارش های نقص مثل -ansi برای کد ++C

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

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

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

c++1y
بازنگری بعدی استاندارد ISO C++، به طور آزمایشی برای سال 2017 برنامه ریزی شده است. پشتیبانی
بسیار تجربی است و تقریباً به طور قطع به روش های ناسازگاری تغییر خواهد کرد
نسخه های آینده

gnu++1y
گویش گنو از -std=c++1y. پشتیبانی بسیار آزمایشی است و تقریباً انجام خواهد شد
مطمئناً در نسخه های بعدی به روش های ناسازگار تغییر می کند.

-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
انطباق) دلالت دارد سه نمودارها.

-سنتی
سنتی-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. به همین ترتیب، گزینه -fno-signed-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 است.

نسخه 0 به نسخه ای اشاره دارد که بیشترین مطابقت را با مشخصات C++ ABI دارد.
بنابراین، ABI به دست آمده با استفاده از نسخه 0 در نسخه های مختلف G++ تغییر خواهد کرد
به عنوان اشکالات ABI رفع شده است.

نسخه 1 نسخه C++ ABI است که برای اولین بار در G++ 3.2 ظاهر شد.

نسخه 2 نسخه C++ ABI است که برای اولین بار در G++ 3.4 ظاهر شد.

نسخه 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" نشان داده می شود. همچنین ببینید جدید (نه از طرف دیگر).

-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-specs
برای بررسی نقض مشخصات استثنا در زمان اجرا، کد تولید نکنید.
این گزینه استاندارد C++ را نقض می کند، اما ممکن است برای کاهش اندازه کد مفید باشد
تولید می سازد، بسیار شبیه به تعریف NDEBUG. این اجازه کد کاربر را نمی دهد
برای ایجاد استثنا در نقض مشخصات استثنا. کامپایلر هنوز
بر اساس مشخصات بهینه می شود، بنابراین ایجاد یک استثنا غیرمنتظره منجر به نتیجه می شود
رفتار تعریف نشده در زمان اجرا

-fextern-tls-init
-fno-extern-tls-init
استانداردهای C++11 و OpenMP اجازه می دهند thread_local و threadprivate متغیرهایی برای داشتن
مقداردهی اولیه پویا (زمان اجرا). برای پشتیبانی از این، هر گونه استفاده از چنین متغیری می رود
از طریق یک تابع wrapper که هر مقدار اولیه لازم را انجام می دهد. زمانی که استفاده
و تعریف متغیر در همان واحد ترجمه هستند، این سربار می تواند باشد
بهینه شده است، اما زمانی که استفاده در یک واحد ترجمه متفاوت است، وجود دارد
سربار قابل توجه حتی اگر متغیر واقعاً به دینامیک نیاز نداشته باشد
مقداردهی اولیه. اگر برنامه نویس بتواند مطمئن باشد که هیچ استفاده ای از متغیر در غیر
تعریف TU نیاز به راه اندازی اولیه سازی پویا دارد (یا به این دلیل که متغیر است
به صورت استاتیکی مقداردهی اولیه می شود، یا استفاده از متغیر در TU تعریف کننده اجرا خواهد شد
قبل از هر گونه استفاده در TU دیگر)، آنها می توانند از این سربار اجتناب کنند
-fno-extern-tls-init گزینه.

در اهدافی که از نام مستعار نماد پشتیبانی می کنند، پیش فرض این است -fextern-tls-init. روی اهداف
که از نام مستعار نماد پشتیبانی نمی کنند، پیش فرض است -fno-extern-tls-init.

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

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

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

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

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

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

-اف ام اس-افزونه ها
اخطارهای Wpedantic را در مورد ساختارهای مورد استفاده در 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++ (دینامیک_کست و نوع گونه). اگر این کار را نکنید
با استفاده از آن قسمت های زبان، می توانید با استفاده از این پرچم مقداری فضا ذخیره کنید. توجه داشته باشید
مدیریت استثنا از همان اطلاعات استفاده می کند، اما G++ آن را در صورت نیاز تولید می کند. در
دینامیک_کست هنوز هم می توان از عملگر برای کست هایی استفاده کرد که به نوع زمان اجرا نیاز ندارند
اطلاعات، به عنوان مثال به "void *" یا به کلاس های پایه بدون ابهام فرستاده می شود.

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

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

-ftemplate-backtrace-limit=n
حداکثر تعداد یادداشت های نمونه سازی الگو را برای یک اخطار یا خطا تنظیم کنید
به n. مقدار پیش فرض 10 است.

-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" به طوری که اندازه آن 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" به عنوان در حافظه منتقل می شوند
در psABI مشخص شده است. مثلا:

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

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

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

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

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

#define __STDC_FORMAT_MACROS
#عبارتند از
#عبارتند از

int main () {
int64_t i64 = 123;
printf("My int64: %"PRID64"\n"، i64);
}

در این مورد، "PRId64" به عنوان یک توکن پیش پردازش جداگانه در نظر گرفته می شود.

این هشدار به طور پیش فرض فعال است.

- تنگ کردن (فقط 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++ مشخص شده است.

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

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

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

-fext-numeric-literals (فقط C++ و Objective-C++)
پسوندهای اعداد فرضی، نقطه ثابت یا ماشینی را به عنوان GNU بپذیرید
پسوندها هنگامی که این گزینه خاموش است، این پسوندها به عنوان کاربر C++11 در نظر گرفته می شوند.
پسوندهای عددی تحت اللفظی تعریف شده است. این به طور پیش‌فرض برای همه گویش‌های قبل از C++11 روشن است
و همه لهجه های گنو: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++1y. این
گزینه به طور پیش فرض برای ISO C++11 به بعد خاموش است (-std=c++11، ...).

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

-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" تعریف شده است. اگرچه باطل است
ثابت اشاره گر به جای یک اشاره گر تهی، تضمین می شود که اندازه آن یکسان باشد
به عنوان یک اشاره گر اما این استفاده در کامپایلرهای مختلف قابل حمل نیست.

-بدون قالب-دوست (فقط 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++ سعی کردند بدون امضا را حفظ کنند، اما استاندارد جریان فعلی را الزامی می‌کند
رفتار.

گزینه کنترل هدف-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 را ایجاد کنید که بزرگترین ساختاری را که در صورت وجود مقدار ارسال شده است را توصیف می کند.

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

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

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

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

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

-fno-diagnostics-show-caret
به‌طور پیش‌فرض، هر تشخیصی صادر شده شامل خط منبع اصلی و یک علامت «^» است.
نشان دهنده ستون این گزینه این اطلاعات را مخفی می کند.

گزینه به درخواست 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 (فقط برای C/ObjC) -بدون هیچ -پرانتزها -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 * شعاع * شعاع.
}

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

-فرمت
-Wformat=n
تماس های "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=1
-فرمت
گزینه -فرمت برابر است با -Wformat=1و -فرمت Wno برابر است با
-Wformat=0. پس از -فرمت همچنین آرگومان های فرمت تهی را برای چندین مورد بررسی می کند
توابع، -فرمت نیز دلالت دارد -بدون هیچ. برخی از جنبه های این سطح از قالب
بررسی را می توان با گزینه های زیر غیرفعال کرد: -Wno-format-contains-nul,
-Wno-format-extra-argsو -فرمت-Wno-طول صفر. -فرمت توسط فعال می شود
-دیو.

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

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

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

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

-Wformat=2
فعال -فرمت به علاوه بررسی های فرمت اضافی در حال حاضر معادل -فرمت
-Wformat-غیر تحت اللفظی -Wformat-security -Wformat-y2k.

-Wformat-غیر تحت اللفظی
If -فرمت مشخص شده است، همچنین اگر رشته قالب یک رشته واقعی نیست هشدار دهید
و بنابراین نمی توان آن را بررسی کرد، مگر اینکه تابع قالب آرگومان های قالب خود را به عنوان
یک "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-y2k
If -فرمت مشخص شده است، همچنین در مورد فرمت های "strftime" که ممکن است فقط a را ایجاد کنند هشدار دهید
سال دو رقمی

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

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

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

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

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

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

-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» تعلق دارد که
در این مثال "اگر (ب)" است. این اغلب آن چیزی نیست که برنامه نویس انتظارش را داشت
در مثال بالا با تورفتگی که برنامه نویس انتخاب کرده نشان داده شده است. وقتی که هست
بالقوه این سردرگمی، GCC زمانی که این پرچم مشخص شده است یک هشدار صادر می کند.
برای حذف اخطار، پرانتزهای صریح را در اطراف درونی ترین عبارت «اگر» اضافه کنید
هیچ راهی وجود ندارد که «دیگر» به «اگر» محصور شود. کد حاصل به نظر می رسد
مثل این:

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

همچنین برای استفاده خطرناک از پسوند گنو به "?:" با عملوند وسط حذف شده هشدار دهید.
هنگامی که شرط در عملگر "?": یک عبارت بولی است، مقدار حذف شده است
همیشه 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++.

-Wno-return-local-addr
در مورد برگرداندن یک اشاره گر (یا در 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=3.

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

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

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

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

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

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

-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 و
بالاتر سطوح بهینه سازی بالاتر دقت تحلیل را بهبود می بخشد.

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

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

-محدوده های جنگی
این گزینه فقط زمانی فعال است که -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++، کامپایلر در صورتی که یک متغیر محلی یک مقدار واضح را سایه بزند، هشدار می دهد
typedef، اما اگر یک struct/class/enum را سایه می اندازد نه.

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

-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 بستگی دارد.

-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 هستند. این هشدار
روشن - تنگ کردن و توسط -دیو.

-Wcast-qual
هر زمان که یک اشاره گر فرستاده می شود، هشدار دهید تا یک واجد شرایط نوع از نوع هدف حذف شود.
به عنوان مثال، اگر یک "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++، همچنین در مورد وضوح اضافه بار گیج کننده برای تبدیل های تعریف شده توسط کاربر هشدار دهید. و
تبدیل‌هایی که هرگز از عملگر تبدیل نوع استفاده نمی‌کنند: تبدیل‌ها به «باطل»، همان
نوع، یک کلاس پایه یا یک مرجع به آنها. هشدارها در مورد تبدیل بین امضا شده
و اعداد صحیح بدون علامت به طور پیش فرض در C++ غیرفعال هستند مگر اینکه -Wsign-تبدیل is
به صراحت فعال شده است.

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

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

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

-جسم خیس
اگر جسم خالی در یک رخ دهد هشدار دهید 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 نیز این گزینه توسط -تبدیل.

-Wsizeof-pointer-memaccess
برای پارامترهای طول مشکوک به رشته ها و توابع داخلی حافظه هشدار دهید
اگر آرگومان از "sizeof" استفاده کند. این هشدار به عنوان مثال در مورد "memset (ptr, 0, sizeof
(ptr));" اگر "ptr" یک آرایه نیست، بلکه یک اشاره گر است و یک راه حل ممکن را پیشنهاد می کند، یا
در مورد "memcpy (&foo، ptr، sizeof (&foo));". این هشدار توسط -دیو.

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

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

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

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

-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)
اگر یک تابع سراسری بدون اعلان نمونه اولیه قبلی تعریف شده باشد هشدار دهید. این
هشدار صادر می شود حتی اگر خود تعریف یک نمونه اولیه ارائه دهد. از این گزینه استفاده کنید
برای شناسایی توابع سراسری که اعلان نمونه مشابهی در a ندارند
فایل هدر این گزینه برای C++ معتبر نیست زیرا همه اعلان های تابع
نمونه های اولیه را ارائه کنید و یک اعلان غیر منطبق به جای اینکه اضافه بار را اعلام کند
مغایرت با اعلامیه قبلی استفاده کنید -Wmissing-اعلامیه ها برای شناسایی گمشده
اعلان ها در C++

-Wmissing-اعلامیه ها
اگر یک تابع سراسری بدون اعلان قبلی تعریف شده باشد هشدار دهید. حتی اگر این کار را انجام دهید
خود تعریف یک نمونه اولیه را ارائه می دهد. از این گزینه برای شناسایی جهانی استفاده کنید
توابعی که در فایل های هدر اعلان نشده اند. در 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.

-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 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)
در صورت مواجه شدن با اعلان "خارجی" در یک تابع، هشدار دهید.

-Wno-ارثی-variadic-ctor
اخطارهای مربوط به استفاده از سازنده های ارث بری C++11 را در کلاس پایه حذف کنید
به ارث رسیده از دارای یک سازنده متغیر 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-macros
در صورت استفاده از ماکروهای متغیر در حالت ISO C90 pedantic یا نحو جایگزین گنو هشدار دهید
زمانی که در حالت pedantic ISO C99 هستید. این پیش فرض است. برای ممانعت از پیام های هشدار، استفاده کنید
Wno-variadic-macros.

-واررگس
در مورد استفاده مشکوک از ماکروهایی که برای مدیریت آرگومان های متغیری مانند استفاده می شود هشدار دهید
va_start. این پیش فرض است. برای ممانعت از پیام های هشدار، استفاده کنید -Wno-varargs.

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

-Wno-Virtual-Move-assign
اخطارهای مربوط به ارث بردن از پایگاه مجازی را با یک حرکت غیر ضروری C++11 سرکوب کنید
اپراتور واگذاری این خطرناک است زیرا اگر پایگاه مجازی در امتداد قابل دسترسی باشد
بیش از یک مسیر، چندین بار جابجا خواهد شد، که می تواند به معنای پایان هر دو شی باشد
در حالت انتقال از اگر عملگر انتساب حرکت برای اجتناب نوشته شده باشد
حرکت از یک شی منتقل شده از، این هشدار را می توان غیر فعال کرد.

-وولا
در صورت استفاده از آرایه با طول متغیر در کد، هشدار دهید. -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)
برای هر ثابت شناوری که پسوند ندارد، هشدار صادر کنید. هنگام استفاده
با 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 با قابلیت بیشتر تولید شود
بیش از یک فرمت اشکال زدایی

-gsplit-dwarf
تا حد امکان اطلاعات مربوط به اشکال زدایی کوتوله را در یک فایل خروجی جداگانه جدا کنید
با پسوند dwo. این گزینه به سیستم ساخت اجازه می دهد تا از پیوند دادن فایل ها جلوگیری کند
با اطلاعات رفع اشکال برای مفید بودن، این گزینه به یک دیباگر با قابلیت نیاز دارد
خواندن فایل های .dwo.

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

-gpubnames
بخش‌های .debug_pubnames و .debug_pubtypes را ایجاد کنید.

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

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

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

-fdebug-types-section
هنگام استفاده از DWARF نسخه 4 یا بالاتر، نوع DIE را می توان در خود قرار داد
بخش ".debug_types" به جای اینکه آنها را بخشی از بخش ".debug_info" کنید. آی تی
قرار دادن آنها در یک بخش Comdat جداگانه کارآمدتر است زیرا پیوند دهنده می تواند پس از آن
موارد تکراری را حذف کنید اما همه مصرف کنندگان DWARF هنوز از بخش های ".debug_types" پشتیبانی نمی کنند
و در برخی از اشیاء ".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 (در صورت پشتیبانی) تولید کنید. ارزش
نسخه ممکن است 2، 3 یا 4 باشد. نسخه پیش فرض برای اکثر اهداف 4 است.

توجه داشته باشید که با 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
اطلاعات اشکال زدایی را در قالب اشکال زدایی Alpha/VMS (در صورت پشتیبانی) تولید کنید. این
فرمتی است که توسط DEBUG در سیستم های Alpha/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.

-fsanitize=آدرس
AddressSanitizer، آشکارساز سریع خطای حافظه را فعال کنید. دستورالعمل های دسترسی به حافظه
ابزاری برای شناسایی اشکالات خارج از محدوده و استفاده پس از رایگان خواهد بود. دیدن
<http://code.google.com/p/address-sanitizer/> برای جزئیات بیشتر

-fsanitize=نخ
ThreadSanitizer، آشکارساز مسابقه سریع داده را فعال کنید. دستورالعمل های دسترسی به حافظه خواهد بود
ابزاری برای شناسایی اشکالات مسابقه داده. دیدن
<http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> برای جزئیات بیشتر

-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-overridden، که GCC آن را به عنوان یک گزینه نامعتبر در هر موردی رد می کند
کامپایل (به جای پیش پردازش، مونتاژ یا پیوند). برای دریافت فقط یک هشدار،
محیط GCC_COMPARE_DEBUG به -w%n-fcompare-debug نه نادیده گرفته شده انجام خواهد داد

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

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

-feliminate-dwarf2-dups
فشرده سازی اطلاعات اشکال زدایی DWARF 2 با حذف اطلاعات تکراری در مورد
هر نماد این گزینه فقط در هنگام ایجاد اشکال زدایی DWARF 2 منطقی است
اطلاعات با -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-asm
به جای استفاده از بخش ".eh_frame" ایجاد شده توسط کامپایلر، اطلاعات بازگشایی DWARF 2 را منتشر کنید.
دستورالعمل های گاز ".cfi_*".

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

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

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

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

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

-fmem-report-wpa
کامپایلر را وادار می کند تا برخی از آمارهای مربوط به تخصیص حافظه دائمی برای WPA را چاپ کند
فقط فاز

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

-fprofile-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)" فقط برای اول true برمی گرداند
10 فراخوانی

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

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

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

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

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

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

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

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

# ccp1 را برای همه توابع غیرفعال کنید
-fdisable-tree-ccp1
# unroll کامل را برای تابعی که uid گره cgraph آن 1 است غیرفعال کنید
-fenable-tree-cunroll=1
# 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-عبور
-fdump-rtl-عبور=نام فایل
می گوید که در زمان کامپایل کردن، در زمان هایی که توسط آن مشخص شده است، اشکال زدایی dump ایجاد کنید نامه ها. این
برای اشکال زدایی پاس های مبتنی بر RTL کامپایلر استفاده می شود. نام فایل برای بیشتر
روگرفت ها با الحاق یک عدد پاس و یک کلمه به آن ساخته می شوند نام زباله، و
فایل ها در دایرکتوری فایل خروجی ایجاد می شوند. در صورت =نام فایل گزینه،
dump به جای فایل های dump شماره گذاری شده روی فایل داده شده خروجی می شود. توجه داشته باشید
که شماره پاس به صورت ایستا محاسبه می شود که پاس ها در پاس ثبت می شوند
مدیر. بنابراین شماره گذاری به ترتیب دینامیکی اجرای آن مربوط نمی شود
عبور می کند. به طور خاص، یک پاس نصب شده توسط یک افزونه می تواند عددی بیش از 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 امکان تخلیه پس از دو مشترک
حذف subexpression می گذرد.

-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 را به عنوان یک نظر در خروجی اسمبلر قرار دهید. همچنین
روشن -درد حاشیه نویسی

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

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

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

-fdump-unnumbered-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-statistics-انتخاب
فعال کردن و کنترل تخلیه آمار پاس در یک فایل جداگانه. نام فایل است
با اضافه کردن پسوندی به پایان می رسد .آمار به نام فایل منبع، و
فایل در همان دایرکتوری فایل خروجی ایجاد می شود. اگر -انتخاب شکل است
استفاده شده، -آمار باعث می شود شمارنده ها در کل واحد کامپایل در حالی که جمع شوند
-جزئیات هر رویدادی را به عنوان پاس‌ها ایجاد می‌کنند. پیش فرض بدون گزینه است
برای جمع شمارنده ها برای هر تابع کامپایل شده.

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

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

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

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

هنگام ریختن درختان با چاپ زیبا، این گزینه از ریختن اجسام جلوگیری می کند
ساختارهای کنترلی

هنگام تخلیه RTL، RTL را به‌جای پیش‌فرض به شکل باریک (متراکم) چاپ کنید
نمایش LISP مانند.

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

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

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

بلوک
فعال کردن نمایش مرزهای بلوک اصلی (غیرفعال در تخلیه خام).

گراف
برای هر یک از فایل های دامپ مشخص شده دیگر (-fdump-rtl-عبور)، تخلیه A
نمایش گراف جریان کنترل مناسب برای مشاهده با GraphViz به
file.passid.pass.dot. هر تابع در فایل به صورت زیرگراف زیبا چاپ شده است،
به طوری که GraphViz می تواند همه آنها را در یک طرح واحد ارائه دهد.

این گزینه در حال حاضر فقط برای تخلیه‌های RTL کار می‌کند و RTL همیشه در آن ریخته می‌شود
فرم باریک

vops
نمایش عملوندهای مجازی برای هر عبارت را فعال کنید.

لیننو
نمایش اعداد خط برای عبارات را فعال کنید.

UID نمایش شناسه منحصر به فرد ("DECL_UID") برای هر متغیر را فعال کنید.

واژگان
نمایش درخت dump برای هر عبارت را فعال کنید.

eh نمایش شماره منطقه EH حاوی هر عبارت را فعال کنید.

scev
نمایش جزئیات تجزیه و تحلیل تکامل اسکالر را فعال کنید.

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

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

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

=نام فایل
به جای یک فایل dump با نام خودکار، در نام فایل داده شده خروجی بگیرید. پرونده
نام stdout و استدرر به طور خاص درمان می شوند و از قبل باز در نظر گرفته می شوند
جریان های استاندارد مثلا،

gcc -O2 -ftree-vectorize -fdump-tree-vect-blocks=foo.dump
-fdump-tree-pre=stderr file.c

خروجی بردار تخلیه به foo.dump، در حالی که PRE dump روی به خروجی است استدرر.
اگر دو نام فایل dump متناقض برای یک پاس داده شود، دومی
گزینه قبلی را لغو می کند.

تمام همه گزینه ها را روشن کنید، به جز خام, لاغر, واژگان و لیننو.

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

تخلیه درختان زیر امکان پذیر است:

اصلی
قبل از هر بهینه سازی مبتنی بر درخت، تخلیه کنید file.original.

بهینه
پس از همه بهینه‌سازی‌های درختی، تخلیه به file.optimized.

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

cfg نمودار جریان کنترل هر تابع را در یک فایل تخلیه کنید. نام فایل توسط
ضمیمه کردن .cfg به نام فایل منبع

ch پس از کپی کردن هدرهای حلقه، هر تابع را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.ch به نام فایل منبع

SSA اطلاعات مربوط به SSA را در یک فایل تخلیه کنید. نام فایل با ضمیمه ساخته شده است .ssa
به نام فایل منبع

نام مستعار
اطلاعات نامگذاری را برای هر تابع تخلیه کنید. نام فایل با ضمیمه ساخته شده است
نام مستعار به نام فایل منبع

حزب کمونیست چین هر تابع را پس از CCP تخلیه کنید. نام فایل با ضمیمه ساخته شده است ccp به
نام فایل منبع

storeccp
هر تابع را پس از STORE-CCP تخلیه کنید. نام فایل با ضمیمه ساخته شده است .storeccp
به نام فایل منبع

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

فرکانس پس از حذف کامل افزونگی درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.free به نام فایل منبع

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

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

dce پس از حذف کد مرده، هر تابع را تخلیه کنید. نام فایل توسط
ضمیمه کردن .dce به نام فایل منبع

گل و لای
پس از افزودن ابزار دقیق mudflap، هر عملکرد را تخلیه کنید. نام فایل توسط
ضمیمه کردن گل و لای به نام فایل منبع

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

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

هدیه هر تابع را پس از اعمال بهینه‌سازی درختی Dominator تخلیه کنید. نام فایل است
با الحاق ساخته شده است .dom به نام فایل منبع

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

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

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

نام کپی
پس از اعمال بهینه سازی تغییر نام کپی، هر تابع را تخلیه کنید. نام فایل است
با الحاق ساخته شده است .نام کپی به نام فایل منبع

nrv هر تابع را پس از اعمال بهینه سازی مقدار بازگشتی نامگذاری شده در حالت عمومی، تخلیه کنید
درختان. نام فایل با ضمیمه ساخته شده است nrv به نام فایل منبع

بردار
پس از اعمال برداری از حلقه ها، هر تابع را تخلیه کنید. نام فایل ساخته شده است
با الحاق .vect به نام فایل منبع

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

vp هر تابع را پس از انتشار محدوده ارزش (VRP) تخلیه کنید. نام فایل توسط
ضمیمه کردن vrp به نام فایل منبع

تمام با پرچم های ارائه شده در این گزینه، تمام درختان dump های موجود را فعال کنید.

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

گزینه ها را می توان به دو گروه تقسیم کرد، 1) گزینه هایی که پرحرفی را توصیف می کنند
dump، و 2) گزینه هایی که توضیح می دهند کدام بهینه سازی باید گنجانده شود. گزینه ها
از هر دو گروه می توان آزادانه با هم مخلوط کرد زیرا همپوشانی ندارند. با این حال، در صورت
از هر گونه تضاد، گزینه های اخیر گزینه های قبلی در خط فرمان را لغو می کنند.
اگرچه چندین گزینه -fopt-info پذیرفته می شود، فقط یکی از آنها می تواند داشته باشد =نام فایل.
اگر نام فایل های دیگری ارائه شود، همه به جز اولین نام نادیده گرفته می شوند.

Dump verbosity گزینه های زیر را دارد

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

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

gcc -O2 -ftree-vectorize -fopt-info-vec-missed

اطلاعات مربوط به فرصت های بهینه سازی از دست رفته را از بردارسازی چاپ می کند
روی stderr می گذرد.

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

تمام چاپ اطلاعات دقیق بهینه سازی این شامل بهینه, از دست رفتهو
توجه داشته باشید.

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

ipa تخلیه‌ها را از همه بهینه‌سازی‌های بین رویه‌ای فعال کنید.

حلقه
Dump ها را از همه بهینه سازی های حلقه فعال کنید.

خطی
Dump ها را از همه بهینه سازی های درون خطی فعال کنید.

ویکی Dump ها را از همه بهینه سازی های برداری فعال کنید.

به عنوان مثال،

gcc -O3 -fopt-info-missed=missed.all

گزارش بهینه سازی از دست رفته را از همه پاس ها به خروجی می دهد از دست رفته.همه.

به عنوان مثال دیگر،

gcc -O3 -fopt-info-inline-optimized-missed=inline.txt

اطلاعات مربوط به بهینه سازی های از دست رفته و همچنین مکان های بهینه شده را از خروجی خروجی می دهد
تمام خطوط درونی به inline.txt.

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

gcc -O3 -fopt-info

توجه داشته باشید که -fopt-info-vec-missed رفتاری مشابه دارد -fopt-info-missed-vec.

به عنوان مثال دیگری در نظر بگیرید

gcc -fopt-info-vec-missed=vec.miss -fopt-info-loop-optimized=loop.opt

در اینجا دو نام فایل خروجی وجود دارد vec.miss و loop.opt در تضاد هستند زیرا تنها یکی
فایل خروجی مجاز است در این صورت فقط گزینه اول اثر می گذارد و
گزینه های بعدی نادیده گرفته می شوند. بنابراین تنها vec.miss تولید می شود که حاوی آن است
اطلاعاتی از وکتوریزر در مورد فرصت های از دست رفته.

-ftree-vectorizer-verbose=n
این گزینه منسوخ شده است و از نظر اجرا شده است -fopt-info. خواهش می کنم استفاده کنید
-fopt-info-نوع فرم به جای، کجا نوع یکی از گزینه های Opt-info معتبر است. آی تی
اطلاعات بهینه سازی اضافی را چاپ می کند. برای n=0 هیچ اطلاعات تشخیصی وجود ندارد
گزارش شده است. اگر n=1 بردار هر حلقه ای که بردار شده است و کل را گزارش می کند
تعداد حلقه هایی که بردار شدند اگر n=2 بردار مکان هایی را گزارش می کند که
نمی توان بردار شد و دلایل آن. برای تمام سطوح پرحرفی بالاتر
تجزیه و تحلیل و اطلاعات تبدیل از بردار گزارش شده است.

توجه داشته باشید که اطلاعات خروجی توسط -ftree-vectorizer-verbose گزینه ارسال می شود
استدرر. اگر فرم معادل -fopt-info-گزینه های=نام فایل استفاده می شود سپس خروجی است
ارسال شده به نام فایل به جای آن.

-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 در حال ساخت است.)

-fno-eliminate-unused-debug-types
به طور معمول، هنگام تولید خروجی DWARF 2، 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-constants -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-slsr
-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 -fhoist- مجاور-بارها -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, -fvect-cost-model, -ftree-partial-pre و -fipa-cp-clone گزینه.

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

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

-اواس پرچم های بهینه سازی زیر را غیرفعال می کند: -عملکردهای falign -فالین-پرش
-فالین-حلقه ها -falign-labels -بلاک های سفارشی -freorder-blocks-and-partition
-fprefetch-loop-arrays نسخه-ftree-vect-loop

سریع
رعایت استانداردهای سختگیرانه را نادیده بگیرید. سریع همه را قادر می سازد -O3 بهینه سازی ها آن را نیز
بهینه سازی هایی را فعال می کند که برای همه برنامه های سازگار با استاندارد معتبر نیستند. آی تی
روشن سریع-ریاضی و مخصوص فرترن -fno-protect-parens و آرایه های fstack.

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

اگر از چندگانه استفاده می کنید -O گزینه ها، با یا بدون اعداد سطح، آخرین گزینه چنین است
اونی که موثره

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

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

-fno-default-inline
توابع اعضا را به طور پیش فرض به صورت درون خطی قرار ندهید، فقط به این دلیل که در داخل تعریف شده اند
محدوده کلاس (فقط C++). در غیر این صورت، زمانی که شما مشخص کنید -O، توابع عضو تعریف شده است
داخل کلاس به طور پیش فرض به صورت درون خطی کامپایل می شوند. یعنی نیازی به اضافه کردن ندارید خطی
جلوی نام تابع عضو.

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

در سطوح غیر فعال است -O, -O2, -O3, -اواس.

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

این گزینه به طور پیش فرض در سطوح بهینه سازی فعال است -O, -O2, -O3, -اواس.

-ffp-contract=سبک
-ffp-contract=off انقباض بیان ممیز شناور را غیرفعال می کند. -ffp-contract=سریع
انقباض بیان ممیز شناور مانند تشکیل ضرب-جمع ذوب شده را ممکن می کند
اگر هدف از آنها پشتیبانی بومی داشته باشد. -ffp-contract=on را قادر می سازد
اگر استاندارد زبان مجاز باشد، انقباض عبارت ممیز شناور. این هست
در حال حاضر اجرا نشده و برابر با -ffp-contract=off.

پیش فرض این است -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 این گزینه را به طور پیش فرض فعال می کند. اگر می خواهید کامپایلر را مجبور کنید بررسی کند که آیا a
متغیر ارجاع داده می شود، صرف نظر از اینکه بهینه سازی روشن است یا نه، استفاده کنید
la -fno-keep-static-consts گزینه.

-fmerge-constants
تلاش برای ادغام ثابت های یکسان (ثابت رشته ها و ثابت های ممیز شناور)
در سراسر واحدهای تلفیقی

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

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-fmerge-all-constants
تلاش برای ادغام ثابت های یکسان و متغیرهای یکسان.

این گزینه دلالت دارد -fmerge-constants. بعلاوه -fmerge-constants این
به عنوان مثال، آرایه های اولیه ثابت یا متغیرهای ثابت اولیه با
انواع انتگرال یا ممیز شناور زبان هایی مانند C یا C++ به هر متغیر نیاز دارند،
از جمله چندین نمونه از یک متغیر در تماس های بازگشتی، برای داشتن متمایز
مکان‌ها، بنابراین استفاده از این گزینه منجر به رفتار ناسازگار می‌شود.

-fmodulo-sched
برنامه ریزی مدول نوسان را بلافاصله قبل از اولین پاس برنامه ریزی انجام دهید. این
pass به درونی‌ترین حلقه‌ها نگاه می‌کند و دستورالعمل‌های آن‌ها را با هم‌پوشانی متفاوت مرتب می‌کند
تکرار

-fmodulo-sched-allow-regmoves
برنامه ریزی ماژول مبتنی بر پیامک تهاجمی تر را با حرکات ثبت مجاز انجام دهید. توسط
با تنظیم این پرچم، لبه های ضد وابستگی خاصی حذف می شوند، که باعث می شود
تولید reg-moves بر اساس تجزیه و تحلیل محدوده عمر. این گزینه موثر است
فقط با -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) که به یک برنامه پیوند داده می شود if -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
توالی بارگذاری/ذخیره به یک بار خارج از حلقه و یک کپی/ذخیره در داخل تغییر کند
چرخه.

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

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

در هیچ سطح بهینه سازی فعال نیست.

-fgcse-las
چه زمانی -fgcse-las فعال است، پاس حذف عمومی زیرعبارت عمومی
بارهای اضافی را که پس از ذخیره در یک مکان حافظه (هر دو
تعدیل جزئی و کامل).

در هیچ سطح بهینه سازی فعال نیست.

-fgcse-after-reload
چه زمانی -fgcse-after-reload فعال است، یک پاس حذف بار اضافی انجام می شود
پس از بارگذاری مجدد هدف از این پاس، پاکسازی نشت های اضافی است.

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

-بهینه‌سازی‌های حلقه امن
این گزینه به بهینه ساز حلقه می گوید که فرض کند شاخص های حلقه سرریز نمی شوند و
که حلقه‌های با شرایط خروج غیرمعمول بی‌نهایت نیستند. این امکان را به صورت گسترده تر می دهد
محدوده بهینه سازی حلقه حتی اگر خود بهینه ساز حلقه نتواند این موارد را ثابت کند
مفروضات معتبر هستند اگر استفاده می کنید -بهینه سازی های حلقه 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 برای ارزیابی فشار رجیستر در کارت بالابر کد برای تصمیم گیری برای بالا بردن استفاده کنید
اصطلاحات. این گزینه معمولا منجر به کدهای کوچکتر می شود، اما می تواند سرعت را کاهش دهد
کامپایلر پایین

این گزینه در سطح فعال است -اواس برای همه اهداف

-فیرا-حلقه-فشار
از 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 یعنی وجود ندارد
محدودیت در تعداد insns های صف را می توان پیش از موعد جابجا کرد. -fsched-stalled-insns
بدون مقدار معادل است -fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
تعریف کنید که چند گروه insn (چرخه) برای وابستگی به یک insn متوقف شده بررسی می شوند
که کاندیدای حذف زودهنگام از صف انس های متوقف شده است. این دارد
یک اثر فقط در طول دومین پاس برنامه ریزی، و فقط اگر -fsched-stalled-insns is
استفاده شده. -fno-sched-stalled-insns-dep برابر است با -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep بدون مقدار معادل است
-fsched-stalled-insns-dep=1.

-fsched2-use-superblocks
هنگام برنامه ریزی پس از تخصیص رجیستر، از زمان بندی 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
دستورالعمل ها را با استفاده از الگوریتم زمان بندی انتخابی برنامه ریزی کنید. برنامه ریزی انتخابی اجرا می شود
به جای پاس زمانبندی دوم.

-fsel-sched-pipelining
در طول زمان‌بندی انتخابی، لوله‌گذاری نرم‌افزاری درونی‌ترین حلقه‌ها را فعال کنید. این
گزینه تاثیری ندارد مگر اینکه یکی از -برنامه ریزی انتخابی or -زمانبندی-fselective2
روشن است

حلقه های بیرونی لوله گذاری-fsel-sched
هنگام لوله‌کشی حلقه‌ها در طول زمان‌بندی انتخابی، حلقه‌های بیرونی را نیز خط‌کشی کنید. این
گزینه تاثیری ندارد مگر اینکه -fsel-sched-pipelining روشن است

-Fshrink-Wrap
پیش‌گفتارهای تابع را فقط قبل از بخش‌هایی از تابع که به آن نیاز دارند، منتشر کنید
بالای تابع این پرچم به طور پیش فرض در فعال است -O و بالاتر

-fcaller-save
فعال کردن تخصیص مقادیر به رجیسترهایی که توسط فراخوانی توابع clobber شده اند
ارسال دستورالعمل های اضافی برای ذخیره و بازیابی رجیسترها در اطراف چنین تماس هایی. چنین
تخصیص تنها زمانی انجام می شود که به نظر می رسد منجر به کد بهتر شود.

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

در سطوح فعال شده است -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 و بالاتر

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

-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.

سه سینک
حرکت ذخیره رو به جلو را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -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
ENDDO
ENDDO

تبادل حلقه حلقه را طوری تبدیل می کند که انگار نوشته شده است:

DO I = 1، N
DO J = 1، M
A(J, I) = A(J, I) * C
ENDDO
ENDDO

زمانی که "N" بزرگتر از حافظه پنهان باشد، می تواند مفید باشد، زیرا در Fortran، the
عناصر یک آرایه به طور پیوسته توسط ستون و نسخه اصلی در حافظه ذخیره می شوند
حلقه روی ردیف‌ها تکرار می‌شود و به طور بالقوه در هر دسترسی یک حافظه پنهان ایجاد می‌کند. این
بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و محدود به آن نیست
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl
و --with-cloog برای فعال کردن زیرساخت تبدیل حلقه گرافیت.

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

DO I = 1، N
A(I) = A(I) + C
ENDDO

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

DO II = 1، N، 51
DO I = II، دقیقه (II + 50، N)
A(I) = A(I) + C
ENDDO
ENDDO

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

-فلوپ بلوک
تبدیل حلقه مسدود کننده را روی حلقه ها انجام دهید. Blocking strip mines هر حلقه در
لانه حلقه به گونه ای است که دسترسی های حافظه حلقه های عنصر در حافظه نهان قرار می گیرد. در
طول نوار را می توان با استفاده از حلقه-بلوک-کاشی-اندازه پارامتر. مثلا،
حلقه ای مانند:

DO I = 1، N
DO J = 1، M
A(J, I) = B(I) + C(J)
ENDDO
ENDDO

مسدود کردن حلقه حلقه را طوری تبدیل می کند که انگار نوشته شده است:

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)
ENDDO
ENDDO
ENDDO
ENDDO

که می تواند مفید باشد زمانی که "M" بزرگتر از حافظه پنهان است، زیرا درونی ترین حلقه است
بر روی مقدار کمتری از داده ها که می تواند در حافظه پنهان نگهداری شود، تکرار می شود. این
بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و محدود به آن نیست
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-ppl
و --with-cloog برای فعال کردن زیرساخت تبدیل حلقه گرافیت.

-فگرافیت-هویت
تبدیل هویت برای گرافیت را فعال کنید. برای هر SCOP ما تولید می کنیم
نمایش چند وجهی و تبدیل آن به gimple. استفاده كردن -فگرافیت-هویت
ما می توانیم هزینه ها یا مزایای تبدیل GIMPLE -> GRAPHITE -> GIMPLE را بررسی کنیم.
برخی از حداقل بهینه‌سازی‌ها نیز توسط CLooG مولد کد انجام می‌شوند، مانند index
تقسیم و حذف کد مرده در حلقه ها.

-floop-nest-optimize
بهینه‌ساز آشیانه حلقه مبتنی بر ISL را فعال کنید. این یک بهینه ساز لانه حلقه عمومی است
در الگوریتم های بهینه سازی پلوتون یک ساختار حلقه بهینه شده را محاسبه می کند
داده-محلی و موازی. این گزینه آزمایشی است.

-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
ENDDO

تبدیل می شود به

DO I = 1، N
A(I) = B(I) + C
ENDDO
DO I = 1، N
D(I) = E(I) * F
ENDDO

-ftree-loop-distribute-patterns
توزیع حلقه‌ای از الگوهایی را انجام دهید که می‌توانند کد با فراخوانی به a تولید شوند
کتابخانه این پرچم به طور پیش فرض در فعال است -O3.

این پاس حلقه های اولیه را توزیع می کند و یک فراخوانی به memset صفر ایجاد می کند.
به عنوان مثال، حلقه

DO I = 1، N
A(I) = 0
B(I) = A(I) + I
ENDDO

تبدیل می شود به

DO I = 1، N
A(I) = 0
ENDDO
DO I = 1، N
B(I) = A(I) + I
ENDDO

و حلقه اولیه به یک فراخوانی به memset صفر تبدیل می شود.

-ftree-loop-im
حرکت ثابت حلقه را روی درختان انجام دهید. این پاس فقط ثابت هایی را که سخت هستند حرکت می دهد
برای رسیدگی در سطح RTL (تماس های تابع، عملیاتی که به دنباله های غیر ضروری گسترش می یابد
از insns). با -funswitch-loops همچنین عملوندهای شرایطی را که هستند حرکت می دهد
ثابت خارج از حلقه، به طوری که ما می توانیم فقط از تجزیه و تحلیل تغییر ناپذیری بی اهمیت در آن استفاده کنیم
حلقه لغو سوئیچینگ پاس همچنین شامل حرکت فروشگاه است.

-ftree-loop-ivcanon
یک شمارنده متعارف برای تعداد تکرارها در حلقه هایی که برای آنها تعیین می شود ایجاد کنید
تعداد تکرار نیاز به تجزیه و تحلیل پیچیده دارد. بهینه سازی های بعدی ممکن است
تعداد را به راحتی تعیین کنید به ویژه در ارتباط با باز کردن چرخش مفید است.

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

-ftree-parallelize-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-slsr
کاهش قدرت خط مستقیم را روی درختان انجام دهید. این مربوطه را به رسمیت می شناسد
عباراتی که شامل ضرب هستند و آنها را با محاسبات کم هزینه جایگزین می کند
در صورت امکان این به طور پیش فرض در فعال است -O و بالاتر

-ftree-vectorize
بردارسازی حلقه را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O3.

-ftree-slp-vectorize
بردارسازی بلوک پایه را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O3 و
چه زمانی -ftree-vectorize فعال شده است.

نسخه-ftree-vect-loop
هنگام انجام حلقه برداری بر روی درختان، نسخه سازی حلقه را انجام دهید. هنگامی که یک حلقه ظاهر می شود
قابل برداری باشد با این تفاوت که تراز داده ها یا وابستگی داده ها را نمی توان تعیین کرد
در زمان کامپایل، سپس نسخه های برداری و غیربردار حلقه تولید می شود
به همراه بررسی های زمان اجرا برای همسویی یا وابستگی برای کنترل نسخه ای که وجود دارد
اجرا شده. این گزینه به طور پیش فرض به جز در سطح فعال است -اواس جایی که غیرفعال است

-fvect-cost-model
فعال کردن مدل هزینه برای برداری این گزینه به طور پیش فرض در فعال است -O3.

-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 اغلب برای به دست آوردن همان اثر کافی است.
با این حال، در مواردی که بدنه حلقه پیچیده تر از a است، قابل اعتماد نیست
تک بلوک پایه همچنین به دلیل اینکه در برخی از معماری ها اصلا کار نمی کند
محدودیت در پاس 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
-falign-labels=n
همه اهداف شاخه را در یک مرز توان دو، با پرش تا مرز تراز کنید n بایت مانند
-عملکردهای falign. این گزینه به راحتی می تواند کد را کندتر کند، زیرا باید درج شود
عملیات ساختگی برای زمانی که به هدف شاخه در جریان معمول کد رسیده است.

-fno-align-labels و -falign-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" به توابع ثابت تبدیل می شود و در عمل بهینه می شود
به طور تهاجمی تر توسط بهینه سازهای بین رویه ای.

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

-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 و bar.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" برای تعیین پارتیشن بندی که فایل های منبع اصلی را منعکس می کند یا
"متعادل" برای تعیین پارتیشن بندی به قطعات هم اندازه (در صورت امکان) یا
"max" برای ایجاد پارتیشن جدید برای هر نماد در صورت امکان. مشخص کردن "هیچ" به عنوان
یک الگوریتم پارتیشن بندی و استریم را به طور کامل غیرفعال می کند. مقدار پیش فرض است
"متعادل". در حالی که "1to1" می تواند به عنوان یک راه حل برای ترتیب کدهای مختلف استفاده شود
مسائل، پارتیشن بندی "max" فقط برای آزمایش داخلی در نظر گرفته شده است.

-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 نیاز به پشتیبانی از لینکر
پلاگین هایی برای اجازه دادن به یک محیط ساخت با امکانات کامل (قابلیت ایجاد استاتیک
کتابخانه ها و غیره). GCC فراهم می کند gcc-ar, gcc-nm, gcc-ranlib لفاف برای عبور از
گزینه های مناسب برای این ابزار. با استفاده از فایل های LTO بدون چربی، برای استفاده باید اصلاح شوند
آنها.

پیش فرض این است -ffat-lto-اشیاء اما این پیش فرض در نظر گرفته شده است که در آینده تغییر کند
زمانی منتشر می شود که محیط های فعال پلاگین لینکر رایج تر شوند.

-fcompare-elim
پس از تخصیص ثبت و تقسیم دستورالعمل تخصیص پس از ثبت نام، شناسایی کنید
دستورالعمل های حسابی که پرچم های پردازنده را شبیه به یک عملیات مقایسه محاسبه می کند
بر اساس آن حساب در صورت امکان، عملیات مقایسه صریح را حذف کنید.

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

در سطوح فعال شده است -O, -O2, -O3, -اواس.

-fuse-ld=bfd
استفاده از bfd پیوند دهنده به جای پیوند دهنده پیش فرض.

-fuse-ld=طلا
استفاده از طلا پیوند دهنده به جای پیوند دهنده پیش فرض.

-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"، "-ftree-vectorize"،
"فره حلقه- توزیع-الگوها"

به‌طور پیش‌فرض، اگر نمایه‌های بازخورد با آن مطابقت نداشته باشند، 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-rounding-math, -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 را به صورت پویا تغییر می دهند، یا ممکن است مشخص شود
با حالت گرد کردن غیر پیش فرض اجرا می شود. این گزینه تا زدن دائمی را غیرفعال می کند
عبارات ممیز شناور در زمان کامپایل (که ممکن است تحت تأثیر حالت گرد کردن قرار گیرند)
و تبدیلات حسابی که در حضور وابسته به علامت ناامن هستند
حالت های گرد کردن

پیش فرض این است -fno-rounding-math.

این گزینه آزمایشی است و در حال حاضر تضمینی برای غیرفعال کردن همه 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
با استفاده از رجیسترهای سمت چپ، سعی کنید از وابستگی نادرست در کد برنامه ریزی شده جلوگیری کنید
پس از تخصیص ثبت نام به پایان رسید. این بهینه سازی بیشترین سود را برای پردازنده ها دارد
از ثبت ها بسته به فرمت اطلاعات اشکال زدایی پذیرفته شده توسط هدف،
با این حال، می تواند اشکال زدایی را غیرممکن کند، زیرا متغیرها دیگر در خانه نمی مانند
ثبت نام".

فعال به طور پیش فرض با -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-sections
هر تابع یا آیتم داده را در بخش خود در فایل خروجی در صورت هدف قرار دهید
از بخش های دلخواه پشتیبانی می کند. نام تابع یا نام آیتم داده
نام بخش را در فایل خروجی تعیین می کند.

از این گزینه ها در سیستم هایی استفاده کنید که پیوند دهنده می تواند بهینه سازی هایی را برای بهبود انجام دهد
محل مرجع در فضای دستورالعمل اکثر سیستم ها از شی ELF استفاده می کنند
فرمت و پردازنده های SPARC که Solaris 2 را اجرا می کنند دارای پیوندهایی با چنین بهینه سازی هایی هستند.
AIX ممکن است این بهینه سازی ها را در آینده داشته باشد.

فقط زمانی از این گزینه ها استفاده کنید که مزایای قابل توجهی از انجام این کار وجود داشته باشد. وقتی تو
این گزینه ها را مشخص کنید، اسمبلر و لینکر شی بزرگتر و قابل اجرایی ایجاد می کنند
فایل ها و همچنین کندتر هستند. اگر این را مشخص کنید، نمی توانید از "gprof" در همه سیستم ها استفاده کنید
گزینه، و اگر هم این گزینه و هم را مشخص کنید ممکن است با اشکال زدایی مشکل داشته باشید
-g.

-fbranch-target-load-optimize
بهینه سازی بار رجیستر هدف شاخه را قبل از threading/prologue/epilogue انجام دهید.
استفاده از رجیسترهای هدف معمولاً فقط در هنگام بارگذاری مجدد و در نتیجه بالا بردن قابل مشاهده است
بارگذاری خارج از حلقه و انجام زمان‌بندی بین بلوکی نیاز به یک بهینه‌سازی جداگانه دارد
عبور.

-fbranch-target-load-optimize2
بهینه سازی بار رجیستر هدف شاخه را بعد از 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)، بسیاری از توابع است که
در غیر این صورت برای inlining توسط کامپایلر مورد بررسی قرار نمی گیرند. به
آن توابع، یک محدودیت متفاوت (محدود کننده تر) در مقایسه با توابع
اعلام شده درون خطی را می توان اعمال کرد. مقدار پیش فرض 40 است.

inline-min-speedup
زمانی که بهبود عملکرد تخمین زده شده زمان اجرا تماس گیرنده + تماس گیرنده بیش از این باشد
آستانه (به صورت Precent)، تابع را می توان بدون در نظر گرفتن محدودیت در خط خطی کرد
--پارام max-inline-insns-single و --پارام max-inline-insns-auto.

کارکردهای بزرگ
محدودیتی که توابع واقعاً بزرگ را مشخص می کند. برای توابع بزرگتر از این حد
پس از 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) فعال است و --پارام max-inline-recursive-
عمق خودکار استفاده می شود. مقدار پیش فرض 8 است.

min-inline-recursive-probability
درون خطی بازگشتی فقط برای تابعی که بازگشت عمیق درون دارد سودآور است
متوسط ​​است و می تواند برای عملکردی که عمق بازگشت کمی دارد با افزایش آن صدمه بزند
اندازه پرولوگ یا پیچیدگی بدنه تابع به بهینه سازهای دیگر.

وقتی بازخورد نمایه در دسترس است (نگاه کنید به -fprofile-generate) بازگشت واقعی
عمق را می توان از روی احتمال بازگشت تابع از طریق یک فراخوانی مشخص حدس زد
اصطلاح. این پارامتر، inlining را فقط به فراخوانی عباراتی که
احتمال بیشتر از آستانه داده شده (در درصد). مقدار پیش فرض 10 است.

اولیه-inlining-insns
رشدی را مشخص کنید که داخلی اولیه می تواند ایجاد کند. در واقع مقدار آن را افزایش می دهد
از inlining برای کد که جریمه انتزاعی زیادی دارد. مقدار پیش فرض 10 است.

max-early-inliner-iterations
max-early-inliner-iterations
محدودیت تکرارهای داخلی اولیه. این اساساً تعداد را محدود می کند
تماس‌های غیرمستقیم تودرتو که خط داخلی اولیه می‌تواند حل کند. زنجیرهای عمیق تر هنوز هستند
توسط خط کشی دیر انجام می شود.

comdat-sharing-probability
comdat-sharing-probability
احتمال (بر حسب درصد) که تابع درون خطی 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
حداکثر تعداد دستورالعمل هایی که ممکن است یک حلقه باید باز شود. اگر یک حلقه
باز می شود، این پارامتر همچنین تعیین می کند که کد حلقه چند بار است
باز شد.

max-average-unrolled-insns
حداکثر تعداد دستورات مغرضانه با احتمال اجرای آنها که
ممکن است یک حلقه باید باز شود. اگر یک حلقه باز شود، این پارامتر نیز
تعیین می کند که کد حلقه چند بار باز شده است.

حداکثر زمان بازگشایی
حداکثر تعداد باز شدن یک حلقه.

max-peeled-insns
حداکثر تعداد دستورالعمل هایی که ممکن است یک حلقه باید کنده شود. اگر یک حلقه
لایه برداری می شود، این پارامتر همچنین تعیین می کند که کد حلقه چند بار لایه برداری شود.

حداکثر زمان لایه برداری
حداکثر تعداد لایه برداری از یک حلقه.

max-peel- شاخه ها
حداکثر تعداد شاخه ها در مسیر گرم از طریق دنباله پوست کنده.

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 های غیر ضروری از مجموعه حذف کنید.

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
برای اطلاعات بیشتر.

vect-max-version-for-alias-checks
حداکثر تعداد بررسی‌های زمان اجرا که می‌توان هنگام انجام حلقه انجام داد
نسخه سازی برای نام مستعار در vectorizer. گزینه را ببینید نسخه-ftree-vect-loop برای
اطلاعات بیشتر.

حداکثر تکرار برای ردیابی
حداکثر تعداد تکرار یک حلقه الگوریتم brute-force برای تجزیه و تحلیل
تعداد تکرارهای حلقه سعی در ارزیابی دارد.

hot-bb-count-ws-permille
اگر به مقدار داده شده کمک کند، یک تعداد نمایه بلوک اولیه داغ در نظر گرفته می شود
پرمیلاژ (یعنی 0...1000) کل اجرای پروفیل.

داغ-bb-فرکانس-کسری
کسری از فرکانس بلوک ورودی اجرای بلوک اصلی را انتخاب کنید
تابع داده شده بلوک اصلی باید داغ در نظر گرفته شود.

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

آستانه تراز
کسری از حداکثر فرکانس اجرای یک بلوک پایه را در a انتخاب کنید
عملکرد تراز کردن بلوک اصلی.

تکرارهای 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
reorder-blocks-duplicate-feedback
برای تصمیم گیری در مورد استفاده بدون قید و شرط از طریق مجوز مرتب سازی مجدد بلوک اصلی استفاده می شود
کد را در مقصد خود شاخه یا کپی کنید. کد زمانی کپی می شود
اندازه تخمینی کوچکتر از این مقدار ضربدر اندازه تخمینی است
پرش بی قید و شرط در نقاط داغ برنامه.

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 است.

max-pipeline-region-insns
حداکثر تعداد insns در یک منطقه که برای خط لوله در نظر گرفته می شود
زمانبندی انتخابی مقدار پیش فرض 200 است.

min-spec-prob
حداقل احتمال (بر حسب درصد) رسیدن به یک بلوک منبع برای اینتربلاک
زمان بندی سوداگرانه مقدار پیش فرض 40 است.

max-sched-extend-regions-iters
حداکثر تعداد تکرار از طریق CFG برای گسترش مناطق. مقدار 0 (
پیش فرض) پسوندهای منطقه را غیرفعال می کند.

max-sched-insn-conflict-delay
حداکثر تاخیر در تعارض برای یک insn که برای حرکت گمانه‌زنی در نظر گرفته می‌شود.
مقدار پیش فرض 3 است.

sched-spec-prob-cutoff
حداقل احتمال موفقیت حدس و گمان (در درصد)، به طوری که حدس و گمان
inss برنامه ریزی شده است. مقدار پیش فرض 40 است.

sched-spec-state-edge-prob-cutoff
حداقل احتمالی که یک یال باید داشته باشد تا زمانبندی کننده حالت خود را ذخیره کند
در سراسر آن مقدار پیش فرض 10 است.

sched-mem-true-dep-cost
حداقل فاصله (در چرخه های CPU) بین ذخیره و بارگذاری که همان حافظه را هدف قرار می دهد
مکان ها مقدار پیش فرض 1 است.

selsched-max-lookahead
حداکثر اندازه پنجره پیش بینی برنامه ریزی انتخابی. یک عمق است
جستجو برای دستورالعمل های موجود مقدار پیش فرض 50 است.

selsched-max-sched-times
حداکثر تعداد دفعاتی که یک دستورالعمل در طول انتخابی برنامه ریزی می شود
برنامه ریزی. این محدودیت در تعداد تکرارهایی است که از طریق آن انجام می شود
دستورالعمل ممکن است خط لوله شود. مقدار پیش فرض 2 است.

selsched-max-insns-to-rename
حداکثر تعداد بهترین دستورالعمل ها در لیست آماده که برای آنها در نظر گرفته شده است
تغییر نام در زمانبندی انتخابی مقدار پیش فرض 2 است.

sms-min-sc
حداقل مقدار تعداد مرحله که زمان‌بندی مدول نوسانی ایجاد می‌کند. در
مقدار پیش فرض 2 است.

max-last-value-rtl
حداکثر اندازه اندازه گیری شده به عنوان تعداد RTLهایی که می توانند در یک عبارت ثبت شوند
در ترکیب کننده برای یک ثبات شبه به عنوان آخرین مقدار شناخته شده آن ثبات. در
پیش فرض 10000 است.

عدد صحیح سهم
ثابت های اعداد صحیح کوچک می توانند از یک ساختار داده مشترک استفاده کنند و کامپایلر را کاهش دهند
استفاده از حافظه و افزایش سرعت آن. این حداکثر مقدار اشتراک گذاری شده را تعیین می کند
ثابت عدد صحیح مقدار پیش فرض 256 است.

ssp-buffer-size
حداقل اندازه بافرها (یعنی آرایه ها) که محافظت در برابر شکست پشته را دریافت می کنند
چه زمانی fstack-protection استفاده می شود.

این پیش فرض قبل از اوبونتو 10.10 "8" بود. در حال حاضر "4" است، برای افزایش
تعداد عملکردهای محافظت شده توسط محافظ پشته

max-jump-thread-duplication-stmts
حداکثر تعداد عبارات مجاز در یک بلوک که باید در زمانی که باید تکرار شود
پرش نخ

max-fields-for-field-sensitive
حداکثر تعداد فیلدها در ساختاری که به روشی حساس به میدان درمان شده است
تحلیل اشاره گر پیش فرض برای صفر است -O0 و -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.

sccvn-max-alias-queries-per-access
حداکثر تعداد پرس‌و‌جوهای alias-oracle که هنگام جستجوی افزونگی‌ها انجام می‌دهیم
برای بارها و فروشگاه ها در صورت رسیدن به این حد، جستجو لغو می شود و بارگذاری یا
فروشگاه اضافی محسوب نمی شود تعداد پرس و جوها به صورت الگوریتمی است
محدود به تعداد ذخایر در همه مسیرها از بارگذاری تا ورودی تابع.
حداکثر تعداد پیش فرض پرس و جوها 1000 است.

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
حرکت ثابت حلقه می تواند بسیار گران باشد، چه در زمان کامپایل و چه در زمان
مقدار حافظه کامپایل زمان مورد نیاز، با حلقه های بسیار بزرگ. حلقه با بیشتر
بلوک های اصلی از این پارامتر، بهینه سازی حرکت ثابت حلقه را نخواهند داشت
روی آنها اجرا شد. مقدار پیش فرض پارامتر 1000 برای است -O1 و 10000
برای -O2 و بالاتر.

loop-max-datarefs-for-datadeps
ایجاد وابستگی داده ها برای حلقه های بسیار بزرگ گران است. این پارامتر
تعداد ارجاع داده ها را در حلقه هایی که برای داده ها در نظر گرفته می شود، محدود می کند
تجزیه و تحلیل وابستگی این حلقه های بزرگ توسط بهینه سازی استفاده نمی شود
وابستگی های داده حلقه مقدار پیش فرض 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-value-list-size
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
حداکثر تعداد دستورات اجرا شده به صورت موازی را در درخت مرتبط تنظیم کنید.
این پارامتر اکتشافی وابسته به هدف را که به طور پیش‌فرض مورد استفاده قرار می‌گیرد، در صورتی که فاقد آن باشد، لغو می‌کند
مقدار صفر

الگوریتم sched-pressure
بین دو پیاده سازی موجود از را انتخاب کنید -fsched-pressure. الگوریتم 1
پیاده سازی اصلی است و به احتمال زیاد از دستورالعمل ها جلوگیری می کند
در حال سفارش مجدد الگوریتم 2 برای سازش بین
رویکرد نسبتا محافظه کارانه الگوریتم 1 و نسبتاً تهاجمی اتخاذ شده است
رویکرد اتخاذ شده توسط زمانبندی پیش فرض. بیشتر به داشتن یک متکی است
فایل رجیستر معمولی و کلاس های فشار رجیستر دقیق. دیدن haifa-sched.c
در منابع GCC برای جزئیات بیشتر.

انتخاب پیش فرض بستگی به هدف دارد.

max-slsr-cand-scan
حداکثر تعداد نامزدهای موجود را که هنگام جستجو در نظر گرفته می شوند، تنظیم کنید
مبنایی برای کاندیدای جدید کاهش قدرت خط مستقیم.

گزینه کنترل la پیش پردازنده
این گزینه‌ها پیش‌پردازنده C را کنترل می‌کنند که روی هر فایل منبع C قبل از واقعی اجرا می‌شود
تلفیقی.

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

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

-Xpreprocessor انتخاب
عبور انتخاب به عنوان گزینه ای برای پیش پردازنده شما می توانید از این برای تامین سیستم استفاده کنید
گزینه های پیش پردازنده خاصی که GCC آنها را نمی شناسد.

اگر می خواهید گزینه ای را ارسال کنید که آرگومان می گیرد، باید از آن استفاده کنید -Xpreprocessor
دو بار، یک بار برای گزینه و یک بار برای استدلال.

-no-integrated-cpp
قبل از کامپایل، پیش پردازش را به عنوان یک پاس جداگانه انجام دهید. به طور پیش فرض، GCC انجام می دهد
پیش پردازش به عنوان بخشی یکپارچه از نشانه گذاری و تجزیه ورودی. اگر این گزینه
ارائه شده است، جلوی زبان مناسب (cc1, cc1plus، یا cc1obj برای C، C++،
و Objective-C به ترتیب) در عوض دو بار فراخوانی می شود، یک بار فقط برای پیش پردازش
و یک بار برای کامپایل واقعی ورودی از پیش پردازش شده. این گزینه ممکن است مفید باشد
در رابطه با -B or لفاف گزینه هایی برای تعیین پیش پردازنده جایگزین یا
انجام پردازش اضافی از منبع برنامه بین پیش پردازش عادی و
تلفیقی.

-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
...
#endif 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 دیر
-iwithprefixbefore دیر
ضمیمه کردن دیر به پیشوند مشخص شده قبلا با -پیوند، و حاصل را اضافه کنید
دایرکتوری به مسیر جستجو شامل. -iwithprefixbefore آن را در همان مکان قرار می دهد -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".

-fdollars-in-identifiers
پذیرفتن $ در شناسه ها

-fextended-identifiers
نام کاراکترهای جهانی را در شناسه ها بپذیرید. این گزینه آزمایشی است. در یک
نسخه آینده GCC، به طور پیش فرض برای C99 و C++ فعال خواهد شد.

-Fno-canonical-system-headers
هنگام پیش پردازش، مسیرهای هدر سیستم را با متعارف سازی کوتاه نکنید.

-پیش پردازش شده
به پیش پردازنده نشان دهید که فایل ورودی قبلاً پردازش شده است. این
مواردی مانند بسط ماکرو، تبدیل سه گراف، اتصال خط جدید فرار شده را سرکوب می کند،
و پردازش بیشتر دستورالعمل ها. پیش پردازنده هنوز تشخیص می دهد و حذف می کند
نظرات، به طوری که شما می توانید یک فایل از پیش پردازش شده با ارسال کنید -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.

توجه داشته باشید که -ftrack-macro-expansion=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، یا مدل
suboptions) هنگامی که این گزینه پیوند دهنده را مشخص می کنید.[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-libasan
هنگامی که -fsanitize=آدرس گزینه برای پیوند دادن یک برنامه، درایور GCC استفاده می شود
به طور خودکار علیه لیباسان. اگر لیباسان به عنوان یک کتابخانه مشترک در دسترس است، و
la -استاتیک گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود لیباسان.
La -static-libasan گزینه درایور GCC را به پیوند هدایت می کند لیباسان به صورت ایستا، بدون
لزوماً کتابخانه های دیگر را به صورت ایستا پیوند می دهد.

-static-libtsan
هنگامی که -fsanitize=نخ گزینه برای پیوند دادن یک برنامه، درایور GCC استفاده می شود
به طور خودکار علیه لیبتسان. اگر لیبتسان به عنوان یک کتابخانه مشترک در دسترس است، و
la -استاتیک گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود لیبتسان.
La -static-libtsan گزینه درایور GCC را به پیوند هدایت می کند لیبتسان به صورت ایستا، بدون
لزوماً کتابخانه های دیگر را به صورت ایستا پیوند می دهد.

-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 هنوز کار می کند، اما جنبه کتابخانه ای کار نمی کند.

--no-sysroot-پسوند
برای برخی از اهداف، یک پسوند به دایرکتوری ریشه مشخص شده با اضافه می شود --sysroot,
بسته به سایر گزینه های مورد استفاده، به طوری که برای مثال ممکن است سرصفحه ها در آنها یافت شوند
dir/پسوند/usr/include بجای dir/usr/include. این گزینه افزودن را غیرفعال می کند
از چنین پسوندی

-من- این گزینه منسوخ شده است. خواهش می کنم استفاده کنید -نقل دادن در عوض برای -I دایرکتوری های قبل
la -من- و حذف کنید -من-. هر دایرکتوری که با آن مشخص می کنید -I گزینه های قبل از
-من- گزینه فقط برای مورد جستجو می شود #include "پرونده"; آنها جستجو نمی شوند
برای #include <پرونده>.

اگر دایرکتوری های اضافی با -I گزینه های بعد از -من-، این
دایرکتوری ها برای همه جستجو می شوند #include بخشنامه ها (معمولا تمام -I دایرکتوری
از این طریق استفاده می شود.)

علاوه بر این، -من- گزینه استفاده از دایرکتوری فعلی (که در آن
فایل ورودی فعلی از) به عنوان اولین فهرست جستجو برای #include "پرونده".
هیچ راهی برای نادیده گرفتن این اثر وجود ندارد -من-. با -NS. می توانید جستجو را مشخص کنید
دایرکتوری که هنگام فراخوانی کامپایلر جاری است. این دقیقاً این نیست
همان کاری که پیش پردازنده به طور پیش فرض انجام می دهد، اما اغلب رضایت بخش است.

-من- استفاده از دایرکتوری های سیستم استاندارد برای فایل های هدر را مهار نمی کند.
به این ترتیب، -من- و -nostdinc مستقل هستند.

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

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

برخی از تنظیمات کامپایلر نیز از گزینه های ویژه اضافی، معمولاً برای
سازگاری با سایر کامپایلرها در همان پلتفرم

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 استفاده کنید
متغیرها

-mfix-cortex-a53-835769
-mno-fix-cortex-a53-835769
راه حل ARM Cortex-A53 erratum شماره 835769 را فعال یا غیرفعال کنید.
شامل قرار دادن یک دستورالعمل NOP بین دستورالعمل های حافظه و 64 بیتی است
دستورات ضرب-انباشت عدد صحیح

-مارس=نام
نام معماری هدف را مشخص کنید که به صورت اختیاری با یک یا چند پسوند اضافه می شود
اصلاح کننده های ویژگی این گزینه دارای فرم است -مارس=قوس{+[نه]از ویژگی های}*، جایی که
فقط ارزش برای قوس is armv8-a. مقادیر ممکن برای از ویژگی های در مستند شده اند
زیر بخش زیر

در جایی که اصلاح کننده های ویژگی متضاد مشخص شده اند، از سمت راست ترین ویژگی استفاده می شود.

GCC از این نام برای تعیین نوع دستورالعمل‌هایی که می‌تواند هنگام تولید صادر کند استفاده می‌کند
کد اسمبلی این گزینه را می توان همراه یا به جای آن استفاده کرد -mcpu=
گزینه.

-mcpu=نام
نام پردازنده مورد نظر را که به صورت اختیاری با یک یا چند ویژگی پسوند می شود، مشخص کنید
اصلاح کننده ها این گزینه دارای فرم است -mcpu=پردازنده{+[نه]از ویژگی های}*، در صورت امکان
مقادیر برای پردازنده هستند عمومی, بزرگ. مقادیر ممکن برای از ویژگی های مستند شده اند در
زیر بخش زیر

در جایی که اصلاح کننده های ویژگی متضاد مشخص شده اند، از سمت راست ترین ویژگی استفاده می شود.

GCC از این نام برای تعیین نوع دستورالعمل‌هایی که می‌تواند هنگام تولید صادر کند استفاده می‌کند
کد اسمبلی

-mtune=نام
نام پردازنده را برای تنظیم عملکرد مشخص کنید. کد تنظیم خواهد شد
انگار پردازنده هدف از نوع مشخص شده در این گزینه است، اما همچنان از آن استفاده می کند
دستورالعمل های سازگار با پردازنده هدف مشخص شده توسط a -mcpu= گزینه. این
گزینه را نمی توان با اصلاح کننده های ویژگی پسوند کرد.

-مارس و -mcpu اصلاح کننده های ویژگی

اصلاح کننده های ویژگی مورد استفاده با -مارس و -mcpu می تواند یکی از موارد زیر باشد:

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

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

شبیه سازی
دستورالعمل های پیشرفته SIMD را فعال کنید. این بدان معناست که دستورالعمل های ممیز شناور هستند
فعال شد. این پیش فرض برای تمام مقادیر ممکن فعلی برای گزینه ها است -مارس و
-mcpu=.

آداپتوا ظهور و تجلی عیسی گزینه

اینها -m گزینه هایی برای Adapteva Epiphany تعریف شده است:

-mhalf-reg-file
هیچ ثباتی را در محدوده "r32"..."r63" اختصاص ندهید. این اجازه می دهد تا کد روی آن اجرا شود
انواع سخت افزاری که فاقد این رجیسترها هستند.

-mprefer-short-insn-regs
ترجیحاً رجیسترهایی را تخصیص دهید که اجازه تولید دستورالعمل کوتاه را می دهند. این می تواند
منجر به افزایش تعداد دستورالعمل ها می شود، بنابراین ممکن است به طور کلی کاهش یا افزایش یابد
اندازه کد

-branch-cost=تعداد
هزینه شعب را تقریباً تنظیم کنید تعداد دستورالعمل های "ساده" این هزینه فقط یک است
اکتشافی است و تضمینی برای تولید نتایج ثابت در سراسر نسخه ها وجود ندارد.

-mcmove
تولید حرکات شرطی را فعال کنید.

-mnops=تعداد
منتشر می کنند تعداد NOP قبل از هر دستورالعمل تولید شده دیگر.

-mno-soft-cmpsf
برای مقایسه‌های ممیز شناور با دقت تک، یک دستورالعمل «fsub» منتشر کنید و آزمایش کنید
پرچم ها این سریعتر از مقایسه نرم افزاری است، اما می تواند نتایج نادرستی داشته باشد
در حضور NaNs، یا زمانی که دو عدد کوچک متفاوت با هم مقایسه می‌شوند
تفاوت آنها صفر محاسبه می شود. پیش فرض است -msoft-cmpsf، که با استفاده از
مقایسه نرم افزاری کندتر، اما مطابق با IEEE.

-mstack-offset=تعداد
فاصله بین بالای پشته و نشانگر پشته را تنظیم کنید. به عنوان مثال، مقدار 8
به این معنی که هشت بایت در محدوده "sp+0...sp+7" را می توان توسط توابع برگ استفاده کرد
بدون تخصیص پشته ارزش هایی غیر از 8 or 16 آزمایش نشده و بعید است
کار همچنین توجه داشته باشید که این گزینه ABI را تغییر می دهد. کامپایل کردن برنامه با a
آفست پشته های مختلف نسبت به کتابخانه هایی که با آنها کامپایل شده اند، به طور کلی نمی کند
کار کردن این گزینه می تواند مفید باشد اگر بخواهید ارزیابی کنید که آیا یک پشته متفاوت افست شده است یا خیر
کد بهتری به شما می دهد، اما در واقع از یک پشته افست متفاوت برای ساخت استفاده کنید
برنامه های کاری، توصیه می شود زنجیره ابزار را با مناسب پیکربندی کنید
--with-stack-offset=تعداد گزینه.

-mno-round-nearest
زمانبند را طوری فرض کنید که حالت گرد کردن روی کوتاهی تنظیم شده است. را
پیش فرض است -Mround-نزدیکترین.

تماس های طولانی
اگر غیر از این توسط یک ویژگی مشخص نشده است، فرض کنید همه فراخوانی ها ممکن است فراتر از این باشند
محدوده دستورات "b" / "bl" را جبران کنید و در نتیجه آدرس تابع را بارگیری کنید
قبل از انجام یک تماس (در غیر این صورت مستقیم) وارد یک ثبت نام کنید. این پیش فرض است.

تماس های کوتاه
اگر غیر از این توسط یک ویژگی مشخص نشده است، فرض کنید همه تماس های مستقیم در محدوده هستند
از دستورالعمل های "b" / "bl"، بنابراین از این دستورالعمل ها برای تماس های مستقیم استفاده کنید. در
پیش فرض است تماس های طولانی.

-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 تغییر دهید. پیش فرض است -mvect-double، که با استفاده از
DImode به عنوان حالت ترجیحی SIMD.

-max-vect-align=تعداد
حداکثر تراز برای انواع حالت برداری SIMD. تعداد ممکن است 4 یا 8 باشد. پیش فرض این است
8. توجه داشته باشید که این یک تغییر ABI است، حتی اگر بسیاری از رابط های تابع کتابخانه چنین هستند
اگر از حالت‌های برداری SIMD در مکان‌هایی که بر اندازه و/یا تأثیر می‌گذارند استفاده نکنند، تحت تأثیر قرار نمی‌گیرند
تراز انواع مربوطه

-msplit-vecmove-early
بردار تقسیم به تک کلمه حرکت می کند قبل از بارگذاری مجدد. در تئوری این می تواند بدهد
تخصیص ثبت نام بهتر است، اما تا کنون به نظر می رسد به طور کلی برعکس است.

-m1reg-REG
یک ثبات را برای نگه داشتن ثابت -1 مشخص کنید، که بارگذاری کوچک را منفی می کند
ثابت ها و بیت ماسک های خاص سریع تر. مقادیر مجاز برای REG هستند r43 و r63,
که استفاده از آن رجیستر را به عنوان یک ثبت ثابت مشخص می کند و هیچ، یعنی خیر
ثبت نام برای این منظور استفاده می شود. پیش فرض است -m1reg-هیچکدام.

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
از ترتیب مجدد دستورالعمل ها در پیش درآمد تابع یا ادغام آنها جلوگیری کنید
آن دستورالعمل ها با دستورالعمل های موجود در بدنه تابع. این بدان معنی است که همه
توابع با مجموعه ای قابل تشخیص از دستورالعمل ها (یا در واقع یکی از انتخاب ها) شروع می شوند
از مجموعه کوچکی از پیش درآمدهای مختلف عملکرد)، و این اطلاعات می تواند مورد استفاده قرار گیرد
شروع توابع را در داخل یک قطعه کد اجرایی قرار دهید. پیش فرض است
-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 armv8-a, 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, cortex-m0plus, marvell-pj4, 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=نام
این مشخص می کند که چه سخت افزاری با ممیز شناور (یا شبیه سازی سخت افزار) در دسترس است
هدف. اسامی مجاز عبارتند از: vfp, vfpv3, vfpv3-fp16, vfpv3-d16, vfpv3-d16-fp16,
vfpv3xd, vfpv3xd-fp16, گاز نئون, نئون-fp16, vfpv4, vfpv4-d16, fpv4-sp-d16, نئون-vfpv4,
fp-armv8, neon-fp-armv8و crypto-neon-fp-armv8.

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 را مشخص کنید. برای کیس پایه PIC استاندارد،
پیش فرض هر ثبات مناسبی است که توسط کامپایلر تعیین می شود. برای پایه PIC تک
مورد، پیش فرض است R9 اگر هدف مبتنی بر EABI باشد یا چک کردن پشته فعال باشد،
در غیر این صورت پیش فرض است R10.

-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" نیز خواهد بود
تعریف شده است.

APR گزینه

این گزینه ها برای پیاده سازی AVR تعریف شده اند:

-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{}= "ata5272"، "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{}= "ata5505"، "atmega16u2"، "atmega32u2"،
"atmega8u2"، "attiny1634"، "attiny167"، "at90usb162"، "at90usb82".

"avr4"
دستگاه‌های «پیشرفته» با حداکثر 8@tie{}کی بایت حافظه برنامه. mcu@tie{}= "ata6285"،
"ata6286"، "atmega48"، "atmega48a"، "atmega48p"، "atmega48pa"، "atmega8"،
"atmega8a"، "atmega8hva"، "atmega8515"، "atmega8535"، "atmega88"، "atmega88a"،
"atmega88p"، "atmega88pa"، "at90pwm1"، "at90pwm2"، "at90pwm2b"، "at90pwm3"،
"at90pwm3b"، "at90pwm81".

"avr5"
دستگاه‌های «پیشرفته» با حافظه برنامه 16@tie{}KiB تا 64@tie{}KiB.
mcu@tie{}= "ata5790"، "ata5790n"، "ata5795"، "atmega16"، "atmega16a"،
"atmega16hva"، "atmega16hva2"، "atmega16hvb"، "atmega16hvbrevb"، "atmega16m1"،
"atmega16u4"، "atmega161"، "atmega162"، "atmega163"، "atmega164a"، "atmega164p"،
"atmega164pa"، "atmega165"، "atmega165a"، "atmega165p"، "atmega165pa"،
"atmega168"، "atmega168a"، "atmega168p"، "atmega168pa"، "atmega169"، "atmega169a"،
"atmega169p"، "atmega169pa"، "atmega26hvg"، "atmega32"، "atmega32a"، "atmega32c1"،
"atmega32hvb"، "atmega32hvbrevb"، "atmega32m1"، "atmega32u4"، "atmega32u6"،
"atmega323"، "atmega324a"، "atmega324p"، "atmega324pa"، "atmega325"، "atmega325a"،
"atmega325p"، "atmega3250"، "atmega3250a"، "atmega3250p"، "atmega3250pa"،
"atmega328"، "atmega328p"، "atmega329"، "atmega329a"، "atmega329p"، "atmega329pa"،
"atmega3290"، "atmega3290a"، "atmega3290p"، "atmega3290pa"، "atmega406"،
"atmega48hvf"، "atmega64"، "atmega64a"، "atmega64c1"، "atmega64hve"، "atmega64m1"،
"atmega64rfa2"، "atmega64rfr2"، "atmega640"، "atmega644"، "atmega644a"،
"atmega644p"، "atmega644pa"، "atmega645"، "atmega645a"، "atmega645p"،
"atmega6450"، "atmega6450a"، "atmega6450p"، "atmega649"، "atmega649a"،
"atmega649p"، "atmega6490"، "atmega6490a"، "atmega6490p"، "at90can32"،
"at90can64", "at90pwm161", "at90pwm216", "at90pwm316", "at90scr100", "at90usb646",
"at90usb647"، "at94k"، "m3000".

"avr51"
دستگاه‌های پیشرفته با 128@tie{}KiB حافظه برنامه. mcu@tie{}= "atmega128"،
"atmega128a"، "atmega128rfa1"، "atmega1280"، "atmega1281"، "atmega1284"،
"atmega1284p", "at90can128", "at90usb1286", "at90usb1287".

"avr6"
دستگاه‌های «پیشرفته» با رایانه شخصی 3 بایت، یعنی با بیش از 128@tie{}KB برنامه
حافظه است. mcu@tie{}= "atmega2560"، "atmega2561".

"avrxmega2"
دستگاه های "XMEGA" با حافظه برنامه بیش از 8@tie{}KiB و حداکثر 64@tie{}KiB.
mcu@tie{}= "atmxt112sl"، "atmxt224"، "atmxt224e"، "atmxt336s"، "atxmega16a4"،
"atxmega16a4u", "atxmega16c4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32a4u", "atxmega32c4", "atxmega32d4", "atxmega32e5", "atxmega32x1".

"avrxmega4"
دستگاه های "XMEGA" با برنامه بیش از 64@tie{}KiB و حداکثر 128@tie{}KiB
حافظه است. mcu@tie{}= "atxmega64a3"، "atxmega64a3u"، "atxmega64a4u"، "atxmega64b1"،
"atxmega64b3", "atxmega64c3", "atxmega64d3", "atxmega64d4".

"avrxmega5"
دستگاه های "XMEGA" با برنامه بیش از 64@tie{}KiB و حداکثر 128@tie{}KiB
حافظه و بیش از 64@tie{}KiB رم. mcu@tie{}= "atxmega64a1"،
"atxmega64a1u".

"avrxmega6"
دستگاه های "XMEGA" با بیش از 128@tie{}KiB حافظه برنامه. mcu@tie{}=
"atmxt540s"، "atmxt540sreva"، "atxmega128a3"، "atxmega128a3u"، "atxmega128b1"،
"atxmega128b3", "atxmega128c3", "atxmega128d3", "atxmega128d4", "atxmega192a3",
"atxmega192a3u", "atxmega192c3", "atxmega192d3", "atxmega256a3", "atxmega256a3b",
"atxmega256a3bu", "atxmega256a3u", "atxmega256c3", "atxmega256d3", "atxmega384c3",
"atxmega384d3".

"avrxmega7"
دستگاه های "XMEGA" با بیش از 128@tie{}KiB حافظه برنامه و بیش از
64@tie{}کی بایت رم. mcu@tie{}= "atxmega128a1"، "atxmega128a1u"، "atxmega128a4u".

"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" و
پیوندهای خرد زیر.

-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 - = ثابت

-mtiny-stack
فقط 8@tie{}بیت های پایینی نشانگر پشته را تغییر دهید.

-Waddr-space-convert
هشدار در مورد تبدیل بین فضاهای آدرس در موردی که آدرس حاصل می شود
فضا در فضای آدرس ورودی موجود نیست.

"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-tables گزینه خط فرمان

-
-
پرش به آدرس های غیر نمادین مانند چنین است نه پشتیبانی:

int main (خلأ)
{
/* فراخوانی تابع در آدرس word 0x2 */
بازگشت ((int(*)(void)) 0x2)();
}

در عوض، یک خرد باید تنظیم شود، یعنی تابع باید از طریق یک نماد فراخوانی شود
("func_4" در مثال):

int main (خلأ)
{
extern int func_4 (void);

/* فراخوانی تابع در آدرس بایت 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 حافظه برنامه.

"__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 هدف را مشخص می کند
پردازنده هر راه حل موجود برای بازبینی سیلیکون هدفمند فعال است.
If sirevision is هیچ، هیچ راه حلی فعال نیست. اگر sirevision is هر، همه
راه حل برای پردازنده هدف فعال است. ماکرو "__SILICON_REVISION__".
به دو رقم هگزادسیمال تعریف می شود که نشان دهنده اعداد اصلی و کوچک هستند
تجدید نظر سیلیکون اگر sirevision is هیچ، "__SILICON_REVISION__" تعریف نشده است.
If sirevision is هر، "__SILICON_REVISION__" به صورت 0xffff تعریف شده است. اگر این
اختیاری sirevision استفاده نمی شود، GCC آخرین ویرایش سیلیکونی شناخته شده را فرض می کند
پردازنده Blackfin هدفمند

GCC یک ماکرو پیش پردازنده برای موارد مشخص شده تعریف می کند پردازنده. برای bfin-elf زنجیره ابزار،
این گزینه باعث می شود که BSP سخت افزاری ارائه شده توسط libgloss به if مرتبط شود -msim is
داده نشده.

بدون این گزینه، bf532 به طور پیش فرض به عنوان پردازنده استفاده می شود.

توجه داشته باشید که پشتیبانی برای bf561 ناقص است برای bf561، فقط ماکرو پیش پردازنده است
تعریف شده است.

-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
هنگام استفاده از برنامه one-application-per- یک برنامه مستقل برای Core A از BF561 بسازید.
مدل برنامه نویسی اصلی فایل های شروع مناسب و اسکریپت های پیوند برای پشتیبانی از Core استفاده می شود
A، و ماکرو "__BFIN_COREA" تعریف شده است. این گزینه فقط در
پیوند با چند هسته ای.

-mcoreb
هنگام استفاده از برنامه one-application-per- یک برنامه مستقل برای Core B از BF561 بسازید.
مدل برنامه نویسی اصلی فایل های شروع مناسب و اسکریپت های پیوند برای پشتیبانی از Core استفاده می شود
B، و ماکرو "__BFIN_COREB" تعریف شده است. وقتی از این گزینه استفاده می شود، "coreb_main"
باید به جای "اصلی" استفاده شود. این گزینه را فقط می توان در ارتباط با
چند هسته ای.

-msdram
یک برنامه مستقل برای SDRAM بسازید. فایل های شروع مناسب و اسکریپت های پیوند استفاده می شود
برای قرار دادن برنامه در SDRAM، و ماکرو "__BFIN_SDRAM" تعریف می شود. در
لودر باید قبل از بارگیری برنامه، 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
این گزینه ها (نه- گزینه ها) ترتیب (حذف ترتیبات) برای قاب پشته،
داده ها و ثابت های منفرد برای حداکثر اندازه دسترسی به داده ها تراز شوند
برای مدل CPU انتخاب شده پیش فرض این است که برای تراز 32 بیتی ترتیب دهید. ABI
جزئیاتی مانند طرح ساختار تحت تأثیر این گزینه ها قرار نمی گیرند.

-m32-bit
-m16-bit
-m8-bit
مشابه گزینه های stack-data- و const-align در بالا، این گزینه ها ترتیب می دهند
قاب پشته‌ای، داده‌های قابل نوشتن و ثابت‌های همگی 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 شناخته می شود.

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

-sim2
پسندیدن سیم کارت، اما گزینه های پیوند دهنده را برای مکان یابی داده های اولیه در 0x40000000 و صفر ارسال کنید
داده های اولیه در 0x80000000.

CR16 گزینه

این گزینه ها به طور خاص برای پورت های CR16 تعریف شده اند.

-mmac
استفاده از دستورالعمل‌های multiply-cumulate را فعال کنید. به طور پیش فرض غیرفعال است.

-mcr16cplus
-mcr16c
کد برای معماری CR16C یا CR16C+ ایجاد کنید. معماری CR16C+ پیش فرض است.

-msim
کتابخانه libsim.a را که با شبیه ساز سازگار است پیوند می دهد. قابل اجرا برای ELF
فقط کامپایلر

-mint32
نوع عدد صحیح را با عرض 32 بیت انتخاب کنید.

-mbit-ops
دستورالعمل های "sbit"/"cbit" را برای دستکاری بیت ها ایجاد می کند.

-mdata-model=مدل
یک مدل داده را انتخاب کنید. انتخاب ها برای مدل هستند نزدیک, بسیار or متوسط. متوسط پیش فرض است.
با این حال، بسیار معتبر نیست با -mcr16c، زیرا معماری CR16C از این پشتیبانی نمی کند
مدل داده های دور

داروین گزینه

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

FSF GCC در داروین فایل های شیء "چربی" ایجاد نمی کند. یک فایل شی برای
معماری واحدی که GCC برای هدف قرار دادن آن ساخته شده است. GCC اپل در مورد داروین باعث ایجاد "چربی" می شود
فایل ها در صورت متعدد بودن -ارشی گزینه ها استفاده می شود؛ این کار را با اجرای کامپایلر یا پیوند دهنده انجام می دهد
چندین بار و پیوستن نتایج به همراه لیپو.

نوع فرعی فایل ایجاد شده (مانند ppc7400 or ppc970 or i686) توسط تعیین می شود
پرچم هایی که ISA را مشخص می کنند که شورای همکاری خلیج فارس هدف قرار می دهد، مانند -mcpu or -مارس.
-force_cpusubtype_ALL می توان از گزینه برای نادیده گرفتن آن استفاده کرد.

ابزار داروین وقتی با عدم تطابق ISA ارائه می شود، رفتارشان متفاوت است. در
مونتاژ کننده، as، فقط اجازه استفاده از دستورالعمل هایی را می دهد که برای نوع فرعی معتبر هستند
فایلی که در حال تولید است، بنابراین نمی توانید دستورالعمل های 64 بیتی را در یک قرار دهید ppc750 فایل شی در
پیوند دهنده برای کتابخانه های مشترک، /usr/bin/libtool، خراب می شود و در صورت درخواست، خطا را چاپ می کند
ایجاد یک کتابخانه مشترک با یک نوع فرعی کمتر محدودتر از فایل های ورودی آن (برای
به عنوان مثال، تلاش برای قرار دادن a ppc970 فایل شی در a ppc7400 کتابخانه). پیوند دهنده برای
فایل های اجرایی، ld، به صورت بی سر و صدا محدودترین نوع فرعی را به فایل اجرایی می دهد
فایل های ورودی

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

دایرکتوری فریمورک دایرکتوری با فریمورک ها در آن است. یک چارچوب یک است
دایرکتوری با a سرآیندهای و / یا PrivateHeaders دایرکتوری که مستقیماً در آن موجود است
به پایان می رسد در .چارچوب. نام یک چارچوب نام این دایرکتوری است به استثنای
la .چارچوب. سرصفحه های مرتبط با چارچوب در یکی از آن دو یافت می شوند
دایرکتوری ها، با سرآیندهای ابتدا جستجو می شود زیر چارچوب یک چارچوب است
دایرکتوری که در یک چارچوب است چارچوب فهرست راهنما. شامل زیر چارچوب
سرصفحه ها فقط می توانند در هدر چارچوبی ظاهر شوند که حاوی زیرفریم ورک یا
در هدر زیر چارچوب خواهر و برادر. دو زیر چارچوب اگر در آن رخ دهند خواهر و برادر هستند
همان چارچوب یک فریم ورک نباید همنام فریمورک باشد. آ
در صورت نقض این اخطار صادر می شود. در حال حاضر یک زیر چارچوب نمی تواند داشته باشد
زیر چارچوب ها؛ در آینده، مکانیسم ممکن است برای پشتیبانی از این گسترش یابد. در
چارچوب های استاندارد را می توان در / سیستم / کتابخانه / قاب و
/ کتابخانه / قاب. یک مثال شامل به نظر می رسد مانند "#include "،
جایی که چارچوب نشان دهنده نام چارچوب و header.h در یافت می شود
PrivateHeaders or سرآیندهای دایرکتوری.

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

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

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

-mmacosx-version-min=نسخه
اولین نسخه MacOS X که این فایل اجرایی روی آن اجرا می شود، است نسخه. معمول
ارزش های نسخه شامل 10.1، 10.2 و 10.3.9 می شود.

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

-mkernel
حالت توسعه هسته را فعال کنید. را -mkernel مجموعه های گزینه -استاتیک, -fno-common,
-fno-use-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 کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. استفاده از این سوئیچ ممکن است نیاز داشته باشد
کامپایل مجدد همه ماژول های دیگر در یک برنامه، از جمله کتابخانه های سیستم. از این استفاده کن
برای مطابقت با یک مدل داده غیر پیش فرض تغییر دهید.

-mfix-and-continue
-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_defined_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-precision=تله دقیق
در معماری آلفا، تله های نقطه شناور نادقیق هستند. این یعنی بدون
کمک نرم افزاری غیر ممکن است که از یک تله شناور و برنامه بازیابی شود
اجرا معمولاً باید خاتمه یابد. GCC می تواند کدی تولید کند که می تواند کمک کند
کنترل کننده های تله سیستم عامل در تعیین مکان دقیقی که باعث ایجاد یک
تله ممیز شناور بسته به نیازهای یک برنامه، متفاوت است
سطوح دقت را می توان انتخاب کرد:

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

f دقت عملکرد کنترل کننده تله می تواند عملکردی را که باعث a
استثنای ممیز شناور

i دقت دستورالعمل کنترل کننده تله می تواند دستورالعمل دقیق آن را تعیین کند
باعث استثنای ممیز شناور شد.

سایر کامپایلرهای آلفا گزینه های معادلی را ارائه می دهند که نامیده می شوند -scope_safe و
-Resumption_safe.

-mieee-conformant
این گزینه کد تولید شده را مطابق با IEEE علامت گذاری می کند. شما نباید از این گزینه استفاده کنید
مگر اینکه شما هم مشخص کنید -mtrap-precision=i و یا -mfp-trap-mode=su or
-mfp-trap-mode=sui. تنها اثر آن انتشار خط است .پرچم 48 در تابع
مقدمه فایل اسمبلی تولید شده

-mbuild-constants
به طور معمول GCC یک عدد صحیح 32 یا 64 بیتی را بررسی می کند تا ببیند آیا می تواند آن را بسازد یا خیر.
از ثابت های کوچکتر در دو یا سه دستورالعمل. اگر نتواند، آن را خروجی می دهد
به عنوان یک کلمه ثابت است و کدی را برای بارگذاری آن از بخش داده در زمان اجرا تولید می کند.

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

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

-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 معتبر است.

FR30 گزینه

این گزینه ها به طور خاص برای پورت FR30 تعریف شده اند.

-msmall-model
از مدل فضای آدرس کوچک استفاده کنید. این می تواند کد کوچکتری تولید کند، اما فرض می کند
که تمام مقادیر نمادین و آدرس ها در یک محدوده 20 بیتی قرار می گیرند.

-mno-lsim
فرض کنید پشتیبانی زمان اجرا ارائه شده است و بنابراین نیازی به گنجاندن آن نیست
کتابخانه شبیه ساز (libsim.a) در خط فرمان لینکر.

FRV گزینه

-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 بیتی قرار گیرند.

برچسب های بدخیم
سعی کنید با قرار دادن NOPها در بسته قبلی، برچسب ها را با یک مرز 8 بایتی تراز کنید.
این گزینه فقط زمانی تأثیر می گذارد که بسته بندی VLIW فعال باشد. جدید ایجاد نمی کند
بسته ها؛ فقط NOPها را به موارد موجود اضافه می کند.

-مجموعه-عکس
کد 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 ایجاد کنید. این سوئیچ باید با استفاده شود -اماس.

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

-mno-exr
ثبات های توسعه یافته قبل از اجرای عملکرد با مانیتور در پشته ذخیره نمی شوند
صفت. گزینه پیش فرض است -mno-exr. این گزینه فقط برای اهداف H8S معتبر است.

-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-switch
کد مناسب برای جداول سوئیچ بزرگ تولید کنید. از این گزینه فقط در صورتی استفاده کنید که
اسمبلر/لینکر از شاخه های خارج از محدوده در جدول سوئیچ شکایت دارد.

-mjump-in-delay
با تغییر، شکاف‌های تاخیر فراخوانی تابع را با دستورالعمل‌های پرش بدون قید و شرط پر کنید
اشاره گر بازگشتی برای فراخوانی تابع که هدف پرش شرطی باشد.

-mdisable-fpregs
از استفاده از رجیسترهای ممیز شناور به هر نحوی جلوگیری کنید. این برای
کامپایل کردن هسته هایی که تغییر بافت تنبلی از ثبات های ممیز شناور را انجام می دهند. اگر
شما از این گزینه استفاده می کنید و سعی می کنید عملیات ممیز شناور، کامپایلر را انجام دهید
سقط می کند.

-mdisable-indexing
از استفاده کامپایلر از حالت های آدرس نمایه سازی جلوگیری کنید. این امر باعث جلوگیری از برخی بیشتر می شود
مشکلات مبهم هنگام کامپایل کد تولید شده 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
از گزینه های مخصوص گنو استفاده کنید ld. این می گذرد -به اشتراک گذاشته شده به ld هنگام ساخت یک اشتراک گذاری
کتابخانه زمانی که GCC به طور صریح یا ضمنی با پیکربندی شده باشد، پیش‌فرض است
پیوند دهنده گنو. این گزینه بر کدام یک تأثیر نمی گذارد ld نامیده میشود؛ فقط چیزی را تغییر می دهد
پارامترها به آن منتقل می شوند ld. ld که نامیده می شود توسط تعیین می شود
--with-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
که نامیده می شود توسط تعیین می شود --with-ld گزینه پیکربندی، جستجوی برنامه GCC
مسیر و در نهایت توسط کاربر PATH. پیوند دهنده مورد استفاده توسط GCC را می توان با استفاده از آن چاپ کرد
که gcc -print-prog-name=ld`. این گزینه فقط در HP-UX 64 بیتی موجود است
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 تعریف شده‌اند:

-مارس=نوع cpu
دستورالعمل هایی را برای نوع ماشین ایجاد کنید نوع cpu. در مقابل -mtune=نوع cpu,
که صرفاً کد تولید شده را برای موارد مشخص شده تنظیم می کند نوع cpu, -مارس=نوع cpu
به GCC اجازه می دهد تا کدی تولید کند که ممکن است اصلاً روی پردازنده های دیگری غیر از آن اجرا نشود
نشان داد. مشخص کردن -مارس=نوع cpu دلالت دارد -mtune=نوع cpu.

انتخاب ها برای نوع cpu هستند:

بومی
این CPU را برای تولید کد در زمان کامپایل با تعیین مقدار انتخاب می کند
نوع پردازنده ماشین کامپایل استفاده كردن -مارس=بومی همه را قادر می سازد
زیرمجموعه های دستورالعمل که توسط ماشین محلی پشتیبانی می شوند (از این رو ممکن است نتیجه اجرا نشود
در ماشین های مختلف). استفاده كردن -mtune=بومی کد بهینه شده برای محلی را تولید می کند
ماشین تحت محدودیت های مجموعه دستورالعمل انتخاب شده است.

i386
سی پی یو اصلی اینتل i386.

i486
سی پی یو اینتل i486. (هیچ برنامه ریزی برای این تراشه اجرا نشده است.)

i586
پنتیوم
سی پی یو پنتیوم اینتل بدون پشتیبانی از MMX.

پنتیوم-mmx
CPU Intel Pentium MMX، مبتنی بر هسته Pentium با پشتیبانی از مجموعه دستورالعمل MMX.

پنتیوم پرو
سی پی یو پنتیوم پرو اینتل.

i686
هنگامی که با استفاده می شود -مارس، از مجموعه دستورالعمل Pentium Pro استفاده می شود، بنابراین کد اجرا می شود
در تمام تراشه های خانواده i686. هنگام استفاده با -mtune، همان معنی را دارد
عمومی.

پنتیوم 2
CPU Intel Pentium II، مبتنی بر هسته Pentium Pro با پشتیبانی از مجموعه دستورالعمل MMX.

پنتیوم 3
پنتیوم 3 متر
CPU Intel Pentium III، بر اساس هسته Pentium Pro با مجموعه دستورالعمل MMX و SSE
پشتیبانی می کند.

پنتیوم-m
اینتل پنتیوم ام; نسخه کم مصرف CPU Intel Pentium III با MMX، SSE و SSE2
پشتیبانی مجموعه دستورالعمل توسط نوت بوک های Centrino استفاده می شود.

پنتیوم 4
پنتیوم 4 متر
CPU Intel Pentium 4 با پشتیبانی از مجموعه دستورالعمل MMX، SSE و SSE2.

پیش فرض
نسخه بهبودیافته CPU Intel Pentium 4 با دستورات MMX، SSE، SSE2 و SSE3
پشتیبانی را تنظیم کنید

نوکونا
نسخه بهبودیافته CPU Intel Pentium 4 با پسوندهای 64 بیتی، MMX، SSE، SSE2 و
پشتیبانی از مجموعه دستورالعمل SSE3.

هسته 2
CPU Intel Core 2 با پسوندهای 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.

core-avx2
پردازنده مرکزی Intel Core با پسوندهای 64 بیتی، MOVBE، MMX، SSE، SSE2، SSE3، SSSE3، SSE4.1،
SSE4.2، AVX، AVX2، AES، PCLMUL، FSGSBASE، RDRND، FMA، BMI، BMI2 و F16C
پشتیبانی مجموعه دستورالعمل

اتم
CPU Intel Atom با پسوندهای 64 بیتی، MOVBE، MMX، SSE، SSE2، SSE3 و SSSE3
پشتیبانی مجموعه دستورالعمل

k6 CPU AMD K6 با پشتیبانی از مجموعه دستورالعمل MMX.

k6-2
k6-3
نسخه های بهبود یافته CPU AMD K6 با MMX و 3DNow! پشتیبانی مجموعه دستورالعمل

پردازنده های Athlon
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
پردازنده های مبتنی بر هسته AMD K8 با پشتیبانی از مجموعه دستورالعمل x86-64، از جمله
پردازنده های AMD Opteron، Athlon 64 و Athlon 64 FX. (این MMX را فوق مجموعه می کند،
SSE، SSE2، 3DNow!، بهبود یافته 3DNow! و پسوندهای مجموعه دستورالعمل 64 بیتی.)

k8-sse3
opteron-sse3
athlon64-sse3
نسخه های بهبود یافته هسته های AMD K8 با پشتیبانی از مجموعه دستورالعمل SSE3.

amdfam10
بارسلونا
پردازنده‌های مبتنی بر هسته‌های AMD Family 10h با پشتیبانی از مجموعه دستورالعمل x86-64. (این
supersets MMX، SSE، SSE2، SSE3، SSE4A، 3DNow!، بهبود یافته 3DNow!، ABM و 64 بیتی
پسوندهای مجموعه دستورالعمل.)

bdver1
پردازنده‌های مبتنی بر هسته‌های AMD Family 15h با پشتیبانی از مجموعه دستورالعمل 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 بیتی.)

bdver3
پردازنده‌های مبتنی بر هسته خانواده 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
پردازنده‌های مبتنی بر هسته‌های AMD Family 14h با پشتیبانی از مجموعه دستورالعمل x86-64. (این
مجموعه دستورات فوق مجموعه MMX، SSE، SSE2، SSE3، SSSE3، SSE4A، CX16، ABM و 64 بیتی
پسوند.)

btver2
پردازنده‌های مبتنی بر هسته‌های AMD Family 16h با پشتیبانی از مجموعه دستورالعمل x86-64. این
شامل MOVBE، F16C، BMI، AVX، PCL_MUL، AES، SSE4.2، SSE4.1، CX16، ABM، SSE4A،
پسوندهای مجموعه دستورالعمل SSSE3، SSE3، SSE2، SSE، MMX و 64 بیتی.

winchip-c6
CPU IDT WinChip C6، به همان روش i486 با مجموعه دستورات اضافی MMX
پشتیبانی می کند.

winchip2
CPU IDT WinChip 2، به همان شیوه i486 با MMX اضافی و 3DNow برخورد می کند!
پشتیبانی مجموعه دستورالعمل

c3 CPU از طریق C3 با MMX و 3DNow! پشتیبانی مجموعه دستورالعمل (بدون برنامه ریزی
برای این تراشه پیاده سازی شده است.)

c3-2
CPU VIA C3-2 (Nehemiah/C5XL) با پشتیبانی از مجموعه دستورالعمل MMX و SSE. (خیر
زمان‌بندی برای این تراشه اجرا شده است.)

ژئود
پردازنده جاسازی شده AMD Geode با MMX و 3DNow! پشتیبانی مجموعه دستورالعمل

-mtune=نوع cpu
تنظیم کنید نوع cpu همه چیز در مورد کد تولید شده قابل اجرا است، به جز ABI
و مجموعه دستورالعمل های موجود در حین انتخاب یک مورد خاص نوع cpu برنامه
چیزهای مناسب برای آن تراشه خاص، کامپایلر هیچ کدی تولید نمی کند
که نمی تواند روی نوع ماشین پیش فرض اجرا شود مگر اینکه از a استفاده کنید -مارس=نوع cpu گزینه.
برای مثال، اگر GCC برای i686-pc-linux-gnu پیکربندی شده باشد، پس -mtune=pentium4 تولید می کند
کدی که برای پنتیوم 4 تنظیم شده است اما همچنان روی دستگاه های i686 اجرا می شود.

انتخاب ها برای نوع cpu مانند برای هستند -مارس. علاوه بر این، -mtune پشتیبانی می کند از
انتخاب اضافی برای نوع cpu:

عمومی
کد بهینه سازی شده برای رایج ترین پردازنده های IA32/AMD64/EM64T تولید کنید. اگر شما
CPU را که کد شما روی آن اجرا می شود را بدانید، سپس باید از کد مربوطه استفاده کنید
-mtune or -مارس گزینه به جای -mtune=عمومی. اما، اگر نمی دانید
دقیقا همان چیزی که کاربران CPU برنامه شما خواهند داشت، پس باید از آن استفاده کنید
گزینه.

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

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

-mcpu=نوع cpu
مترادف منسوخ شده برای -mtune.

-mfpmath=واحد
ایجاد محاسبات ممیز شناور برای واحد انتخاب شده واحد. انتخاب ها برای واحد هستند:

387 استفاده از پردازنده مشترک ممیز شناور استاندارد 387 موجود در اکثر تراشه ها
و در غیر این صورت تقلید می شود. کد کامپایل شده با این گزینه تقریباً در همه جا اجرا می شود.
نتایج موقت به جای دقت با دقت 80 بیتی محاسبه می شوند
بر اساس نوع مشخص شده، و در نتیجه نتایج کمی متفاوت در مقایسه با بسیاری از آنها حاصل می شود
تراشه های دیگر دیدن -float-store برای توضیحات بیشتر

این گزینه پیش فرض برای کامپایلر i386 است.

ESS از دستورالعمل های اسکالر ممیز شناور موجود در مجموعه دستورات SSE استفاده کنید. این
مجموعه دستورالعمل توسط تراشه های Pentium III و جدیدتر و در خط AMD پشتیبانی می شود
توسط تراشه های Athlon-4، Athlon XP و Athlon MP. نسخه قبلی SSE
مجموعه دستورالعمل فقط از محاسبات تک دقیق پشتیبانی می کند، بنابراین دو و
محاسبات با دقت گسترده هنوز با استفاده از 387 انجام می شود. نسخه بعدی موجود است
فقط در تراشه های Pentium 4 و AMD x86-64، از محاسبات با دقت دوگانه نیز پشتیبانی می کند.

برای کامپایلر i386 باید استفاده کنید -مارس=نوع cpu, -msse or -msse2 تغییر می کند به
پسوندهای SSE را فعال کنید و این گزینه را موثر کنید. برای کامپایلر x86-64،
این افزونه ها به صورت پیش فرض فعال هستند.

کد حاصل باید در اکثر موارد بسیار سریعتر باشد
از مشکلات بی ثباتی عددی کد 387 اجتناب کنید، اما ممکن است برخی از کدهای موجود را از بین ببرد
کدی که انتظار دارد موقتی 80 بیت باشد.

این انتخاب پیش فرض برای کامپایلر x86-64 است.

sse,387
sse+387
هر دو
سعی کنید از هر دو مجموعه دستورالعمل به طور همزمان استفاده کنید. این به طور موثر دو برابر می شود
تعداد رجیسترهای موجود و روی تراشه‌هایی با واحدهای اجرایی مجزا برای 387
و SSE منابع اجرایی نیز. از این گزینه همانطور که هنوز است با احتیاط استفاده کنید
آزمایشی، زیرا تخصیص دهنده ثبات GCC مدل جداگانه ای را انجام نمی دهد
واحدهای عملکردی به خوبی، در نتیجه عملکرد ناپایدار.

-masm=گویش
دستورالعمل مونتاژ خروجی با استفاده از انتخاب شده گویش. گزینه های پشتیبانی شده هستند اینتل or
att (پیشفرض). داروین پشتیبانی نمی کند اینتل.

-mieee-fp
-mno-ieee-fp
کنترل کنید که آیا کامپایلر از مقایسه های ممیز شناور IEEE استفاده می کند یا خیر. اینها
در مواردی که نتیجه مقایسه نامرتب است به درستی رسیدگی کنید.

-msoft-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور تولید کنید.

هشدار: کتابخانه های مورد نیاز بخشی از GCC نیستند. به طور معمول امکانات از
از کامپایلر 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 دارد و بنابراین دستورالعمل نیازی ندارد
تقلید این دستورالعمل‌ها ایجاد نمی‌شوند مگر اینکه شما نیز از آن استفاده کنید
-بهینه‌سازی‌های ریاضی و سرگرم‌کننده سوئیچ.

بدخیم-دوبرابر
-mno-align-double
کنترل کنید که آیا GCC متغیرهای "double"، "long double" و "long long" را روی 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" دریافت می کنند. از این رو آنها نیستند
سازگار با کد باینری که بدون آن سوئیچ کامپایل شده است.

-mlong-double-64
-mlong-double-80
این سوئیچ ها اندازه "دبل طولانی" را کنترل می کنند. اندازه 64 بیت باعث می شود
نوع "طولانی دوبل" معادل نوع "دو". این پیش فرض برای Bionic C است
کتابخانه

هشدار: اگر مقدار پیش فرض را برای 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 بایت از آنجایی که x86-64 ABI به تراز پشته 16 بایتی نیاز دارد، این ABI است
ناسازگار و در نظر گرفته شده برای استفاده در محیط کنترل شده که فضای پشته است
محدودیت مهم این گزینه در هنگام کامپایل شدن توابع منجر به کد اشتباه می شود
با تراز پشته 16 بایتی (مانند توابع از یک کتابخانه استاندارد) فراخوانی می شود
با پشته نامناسب. در این مورد، دستورالعمل های SSE ممکن است منجر به عدم تراز حافظه شود
تله های دسترسی علاوه بر این، آرگومان های متغیر برای 16 بایت به اشتباه مدیریت می شوند
اشیاء تراز شده (از جمله x87 long double و __int128)، که منجر به نتایج اشتباه می شود.
شما باید تمام ماژول ها را با -mpreferred-stack-boundary=3، از جمله هر کتابخانه.
این شامل کتابخانه های سیستم و ماژول های راه اندازی می شود.

-mincoming-stack-boundary=تعداد
فرض کنید پشته ورودی به 2 تراز شده است تعداد مرز بایت اگر
-mincoming-stack-boundary مشخص نشده است، یکی که توسط
-مرجع پشته ترجیح داده شده استفاده می شود.

در Pentium و Pentium Pro، مقادیر "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
-mrtm
-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، RTM یا 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 __اتمی ساخته شده است برای جزئیات بیشتر.

-مصحف
این گزینه تولید دستورالعمل های "SAHF" را در کد 64 بیتی فعال می کند. اینتل اولیه
پردازنده‌های پنتیوم 4 با پشتیبانی از Intel 64، قبل از معرفی مرحله Pentium 4 G1
در دسامبر 2005، فاقد دستورالعمل های "LAHF" و "SAHF" بود که توسط
AMD64. اینها به ترتیب دستورالعمل های بارگیری و ذخیره برای پرچم های وضعیت خاص هستند.
در حالت 64 بیتی، دستور SAHF برای بهینه سازی fmod، drem و
توابع داخلی "باقی مانده"؛ دیدن دیگر ساخته شده است برای جزئیات بیشتر.

-mmovbe
این گزینه استفاده از دستورالعمل "movbe" را برای پیاده سازی "__builtin_bswap32" فعال می کند.
و "__builtin_bswap64".

-mcrc32
این گزینه توابع داخلی "__builtin_ia32_crc32qi" را فعال می کند.
"__builtin_ia32_crc32hi"، "__builtin_ia32_crc32si" و "__builtin_ia32_crc32di" به
دستور ماشین crc32 را تولید کنید.

-mrecip
این گزینه استفاده از دستورالعمل های "RCPSS" و "RSQRTSS" (و بردار آنها) را فعال می کند
انواع "RCPPS" و "RSQRTPS") با یک گام اضافی نیوتن رافسون برای افزایش
دقت به جای "DIVSS" و "SQRTSS" (و انواع بردار آنها) برای تک
آرگومان های ممیز شناور دقیق این دستورالعمل ها تنها زمانی تولید می شوند که
-بهینه‌سازی‌های ریاضی و سرگرم‌کننده همراه با فعال می شود -فقط ریاضی محدود و
-fno-به دام انداختن-ریاضی. توجه داشته باشید که در حالی که توان عملیاتی دنباله بالاتر از مقدار است
توان عملیات غیر متقابل دستورالعمل، دقت توالی می تواند باشد
تا 2 ulp کاهش یافت (یعنی معکوس 1.0 برابر 0.99999994 است).

توجه داشته باشید که GCC "1.0f/sqrtf(ایکس)" از نظر "RSQRTSS" (یا "RSQRTPS") در حال حاضر
با سریع-ریاضی (یا ترکیب گزینه بالا)، و نیازی ندارد -mrecip.

همچنین توجه داشته باشید که GCC دنباله فوق را با گام اضافی نیوتن-رافسون منتشر می کند
بردار تقسیم تک شناور و بردار "sqrtf(ایکس)" در حال حاضر با سریع-ریاضی
(یا ترکیب گزینه بالا)، و نیازی ندارد -mrecip.

-mrecip=انتخاب کردن
این گزینه کنترل می کند که کدام دستورالعمل های برآورد متقابل ممکن است استفاده شود. انتخاب کردن هست یک
فهرستی از گزینه‌های جدا شده با کاما، که ممکن است قبل از آن a ! برای معکوس کردن گزینه:

تمام تمام دستورالعمل های برآورد را فعال کنید.

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

هیچ
غیرفعال کردن همه دستورالعمل های تخمینی، معادل -mno-recip.

DIV تقریب را برای تقسیم اسکالر فعال کنید.

vec-div
تقریب را برای تقسیم بردار فعال کنید.

sqrt
تقریب را برای ریشه مربع اسکالر فعال کنید.

vec-sqrt
تقریب را برای ریشه مربع بردار فعال کنید.

به عنوان مثال ، -mrecip=همه،!sqrt تمام تقریب های متقابل را فعال می کند،
به جز جذر

-mveclibabi=نوع
نوع ABI را برای استفاده برای بردار کردن ذاتی با استفاده از یک کتابخانه خارجی مشخص می کند.
مقادیر پشتیبانی شده برای نوع هستند svml برای کتابخانه ریاضی بردار کوتاه اینتل و acml
برای کتابخانه هسته ریاضی AMD. برای استفاده از این گزینه، هر دو -ftree-vectorize و
-بهینه‌سازی‌های ریاضی و سرگرم‌کننده باید فعال باشد و یک SVML یا ACML ABI سازگار باشد
کتابخانه باید در زمان پیوند مشخص شود.

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"، "vmlsAsinh4"، "vmlsAsin4"، "vmlsCosh4"، "vmlsCos4"،
"vmlsAcosh4" و "vmlsAcos4" برای نوع تابع مربوطه وقتی -mveclibabi=svml is
استفاده می شود، و "__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 استفاده می شود.

-mabi=نام
کد برای کنوانسیون تماس مشخص شده ایجاد کنید. مقادیر مجاز هستند sysv برای
ABI مورد استفاده در گنو/لینوکس و سایر سیستم ها، و ms برای Microsoft ABI در
پیش فرض استفاده از Microsoft ABI هنگام هدف قرار دادن Microsoft Windows و 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
از مدیریت استثنایی ایمن رشته در MinGW پشتیبانی کنید. برنامه هایی که به Thread-safe متکی هستند
مدیریت استثنا باید همه کدها را با کد کامپایل و پیوند دهد -mthreads گزینه. چه زمانی
تدوین، -mthreads "-D_MT" را تعریف می کند. هنگام پیوند، در یک موضوع خاص لینک می شود
کتابخانه کمکی -lmingwthrd که داده های رسیدگی به استثنای هر رشته را پاک می کند.

-mno-align-stringops
مقصد عملیات رشته خطی را تراز نکنید. این سوئیچ کد را کاهش می دهد
اندازه و عملکرد را بهبود می بخشد در صورتی که مقصد از قبل تراز شده باشد، اما GCC
در مورد آن نمی داند

-minline-all-stringops
به‌طور پیش‌فرض GCC عملیات رشته‌ای را تنها زمانی که مقصد مشخص باشد، درون‌ریزی می‌کند
با حداقل یک مرز 4 بایت تراز شده است. این کار باعث می شود تا کدهای درونی بیشتر و کد افزایش یابد
اندازه، اما ممکن است عملکرد کد را بهبود بخشد که به سریع "memcpy"، "strlen" و
"ممست" برای قدهای کوتاه.

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

-mstringop-strategy=جلبک
نادیده گرفتن اکتشافی تصمیم داخلی برای الگوریتم خاص برای استفاده
عملیات رشته درونی مقادیر مجاز برای جلبک هستند:

rep_byte
rep_4byte
rep_8byte
با استفاده از پیشوند i386 "rep" با اندازه مشخص شده را باز کنید.

بایت_حلقه
حلقه
unrolled_loop
به یک حلقه درون خطی گسترش دهید.

libcall
همیشه از تماس کتابخانه استفاده کنید.

-momit-leaf-frame-pointer
نشانگر فریم را در یک رجیستر برای توابع برگ نگه ندارید. این از
دستورالعمل هایی برای ذخیره، راه اندازی و بازیابی نشانگرهای فریم و ایجاد یک ثبت اضافی
در توابع برگ موجود است. گزینه -fomit-leaf-frame-pointer قاب را برمی دارد
اشاره گر برای توابع برگ، که ممکن است اشکال زدایی را سخت تر کند.

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
کنترل می کند که آیا متغیرهای TLS ممکن است با آفست های بخش TLS قابل دسترسی باشند یا خیر
ثبت (%gs برای 32 بیت، %fs برای 64 بیت)، یا اینکه آیا نشانگر پایه رشته باید باشد
اضافه. معتبر بودن یا نبودن این مورد به سیستم عامل و اینکه آیا آن معتبر است بستگی دارد
بخش را برای پوشش کل منطقه TLS ترسیم می کند.

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

-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 سوئیچ ها علاوه بر موارد فوق در پردازنده های x86-64 در 64 بیت پشتیبانی می شوند
محیط.

-32
-64
-mx32
کد برای یک محیط 32 بیتی یا 64 بیتی تولید کنید. در -32 گزینه های "int"، "long"،
و نشانگر را به 32 بیت تایپ می کند و کدی را تولید می کند که روی هر سیستم i386 اجرا می شود.

La -64 گزینه "int" را روی 32 بیت و "long" و انواع اشاره گر را روی 64 بیت تنظیم می کند.
کد برای معماری x86-64 تولید می کند. فقط برای داروین -64 گزینه نیز
خاموش می کند -fno-pic و -mdynamic-no-pic گزینه.

La -mx32 گزینه "int"، "long" و انواع اشاره گر را روی 32 بیت تنظیم می کند و کد تولید می کند
برای معماری x86-64.

-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 ویندوز گزینه

این گزینه های اضافی برای اهداف Microsoft Windows در دسترس هستند:

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

-mdll
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که یک DLL---a
کتابخانه پیوند پویا --- باید تولید شود و امکان انتخاب موارد مورد نیاز را فراهم کند
شی راه اندازی زمان اجرا و نقطه ورودی.

-mnop-fun-dllimport
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که
ویژگی "dllimport" باید نادیده گرفته شود.

-mthread
این گزینه برای اهداف MinGW موجود است. آن رشته مخصوص MinGW را مشخص می کند
پشتیبانی استفاده شود

-مونیکد
این گزینه برای اهداف MinGW-w64 موجود است. باعث ایجاد پیش پردازنده "یونیکد" می شود
ماکرو از پیش تعریف شده است و کد راه اندازی زمان اجرا با قابلیت یونیکد را انتخاب می کند.

-mwin32
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که معمولی
ماکروهای از پیش تعریف شده ویندوز مایکروسافت باید در پیش پردازنده تنظیم شوند، اما اینطور نیست
بر انتخاب کتابخانه زمان اجرا/کد راه اندازی تأثیر می گذارد.

-mwindows
این گزینه برای اهداف Cygwin و MinGW موجود است. مشخص می کند که یک رابط کاربری گرافیکی
برنامه باید با دستور دادن به پیوند دهنده برای تنظیم هدر PE ایجاد شود
نوع زیرسیستم مناسب

-fno-set-stack-executable
این گزینه برای اهداف MinGW موجود است. مشخص می کند که پرچم اجرایی برای
پشته استفاده شده توسط توابع تو در تو تنظیم نشده است. این برای اجرای باینری ها ضروری است
در حالت هسته مایکروسافت ویندوز، همانطور که User32 API وجود دارد که برای تنظیم استفاده می شود
امتیازات اجرایی، در دسترس نیست.

-fwritable-relocated-data
این گزینه برای اهداف MinGW و Cygwin موجود است. مشخص می کند که تغییر مکان-
داده ها در بخش فقط خواندنی در بخش .data قرار می گیرند. این برای افراد مسن ضروری است
زمان‌های اجرا از اصلاح بخش‌های .rdata برای جابجایی شبه پشتیبانی نمی‌کنند.

-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
-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-asm
-mdwarf2-asm
کد اسمبلر برای اطلاعات اشکال زدایی شماره خط DWARF 2 تولید نکنید (یا انجام ندهید).
این ممکن است زمانی مفید باشد که از اسمبلر گنو استفاده نمی کنید.

-stop-bits
-mno-early-stop-bits
اجازه دهید بیت های توقف زودتر از بلافاصله قبل از دستور قرار داده شوند
بیت توقف را فعال کرد. این می تواند زمان بندی آموزش را بهبود بخشد، اما همیشه اینطور نیست
همینطور

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

-mtls-size=اندازه tls
اندازه بیت افست های فوری TLS را مشخص کنید. مقادیر معتبر 14، 22 و 64 هستند.

-mtune=نوع cpu
زمانبندی دستورالعمل را برای یک CPU خاص تنظیم کنید، مقادیر معتبر هستند ایتانیوم,
ایتانیوم 1, رحمت, ایتانیوم 2و مک کینلی.

-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 یک محدودیت سخت، عدم اجازه بیشتر
از آن عدد در یک گروه دستورالعمل. وگرنه حد «نرم» است یعنی
این که عملیات غیرحافظه ای ترجیح داده می شود زمانی که به محدودیت رسیده است، اما حافظه
ممکن است عملیات هنوز برنامه ریزی شده باشد.

LM32 گزینه

اینها -m گزینه هایی برای معماری LatticeMico32 تعریف شده اند:

-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 برای جا دادن کد در رجیسترهای موجود و جریمه عملکرد
استفاده از حافظه به جای ثبات توجه داشته باشید که همه ماژول های یک برنامه باید باشند
با همان مقدار برای این گزینه کامپایل شده است. به همین دلیل، شما نباید از این استفاده کنید
گزینه ای با کتابخانه های زمان اجرا پیش فرض 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=هیچ
استفاده از ناحیه داده کوچک را غیرفعال کنید. متغیرها در یکی از قرار می گیرند .داده ها, .bss، یا
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 51 گرم 51cn 51 ساعت 51 جی 51jf 51 جی جی 51 jm 51mm 51q 51 متر مربع
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
-mno-bitfield
از دستورالعمل های فیلد بیت استفاده نکنید. در -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
همیشه فیلدهای بیت را به اندازه "int" در نظر بگیرید.

-m4byte-توابع
-mno-4byte-functions
همه توابع را مجبور کنید تا در یک مرز 4 بایتی تراز شوند.

-mcallgraph-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 is
کد سازگاری مقادیر نمونه هستند v3.00.a, v4.00.b, v5.00.a, v5.00.b, v5.00.b,
v6.00.a.

-mxl-soft-mul
از نرم افزار شبیه سازی ضرب (پیش فرض) استفاده کنید.

-mxl-soft-div
از شبیه سازی نرم افزاری برای تقسیم ها (پیش فرض) استفاده کنید.

-mxl-barrel-shift
از شیفتر بشکه سخت افزاری استفاده کنید.

-mxl-pattern-compare
از دستورالعمل های مقایسه الگو استفاده کنید.

-msmall-divides
از بهینه سازی جستجوی جدول برای تقسیمات اعداد صحیح امضا شده کوچک استفاده کنید.

-mxl-stack-check
این گزینه منسوخ شده است. استفاده کنید -fstack-check به جای آن.

-mxl-gp-opt
از بخش های ".sdata"/.sbss مربوط به GP استفاده کنید.

-mxl-multiply-high
برای قسمت بالای ضرب 32x32 از دستورالعمل های ضرب در بالا استفاده کنید.

-mxl-float-convert
از دستورالعمل های تبدیل ممیز شناور سخت افزاری استفاده کنید.

-mxl-float-sqrt
از دستورالعمل ممیز شناور سخت افزاری ریشه مربع استفاده کنید.

-mbig-endian
کد برای یک هدف بزرگ endian ایجاد کنید.

-mlittle-endian
کدی را برای یک هدف کوچک endian ایجاد کنید.

-mxl-reorder
از دستورالعمل‌های ترتیب مجدد استفاده کنید (بارگذاری/ذخیره معکوس بایت و تعویض بایت).

-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, 34kn, 74 کیلوگرم