این دستور g++-5 است که می تواند در ارائه دهنده هاست رایگان 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 -مناسب -fopenacc -فوپنمپ -fopenmp-simd -اف ام اس-افزونه ها
-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 -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 -fsized-تخصیص -fstats
-ftemplate-backtrace-limit=n -ftemplate-depth=n -fno-threadsafe-statics
-fuse-cxa-atexit -فنو ضعیف -nostdinc++ -fvisibility-inlines-hidden
-fvtable- Verify =[STD|preinit|هیچ] -fvtv- شمارش می کند -fvtv-debug -fvisibility-ms-compat
-fext-numeric-literals -وابی=n -تگ وابی -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 -فنو-کابین-آژانس
-fivar-visibility=[عمومی|محفوظ|خصوصی|بسته] -freplace-objc-classes
-fzero-link -gen-decls -Wassign-intercept - پروتکل Wno -انتخاب کننده
-Wstrict-Selector-Match -Wundeclared-Selector
زبان مستقل گزینه
-fmessage-length=n -fdiagnostics-show-location=[یک بار|هر خط]
-fdiagnostics-color=[خودکار|هرگز|همیشه] -fno-diagnostics-show-option
-fno-diagnostics-show-caret
هشدار گزینه
-fsyntax-only -fmax-errors=n -پدانتیک -اشتباهات -w -وکسترا -دیو
-وادرس -تجمیع-بازگشت -بهینه سازی های حلقه متحرک -محدوده های جنگی
-Warray-bounds=n -Wbool-مقایسه کنید -Wno-ویژگی ها -Wno-ساخته-کلان-بازتعریف شده است
-Wc90-c99-compat -Wc99-c11-compat -Wc++-compat -Wc++11-compat -Wc++14-compat
-Wcast-align -استاک -Wchar-مشترک ها -وکلوببر شده -کامنت کنید
بدون شرط پشتیبانی می شود -تبدیل -پوشش-عدم تطابق -تاریخ-زمان
حذف - ناقص -Wno-cpp -منسوخ شده است -Wno-منسوخ-اعلامیه
-Wno-Designated-Init -Wdisabled-بهینه سازی -Wno-دور انداخته-واجد شرایط
Wno-discarded-array-qualifiers -Wno-div-by-zero -ترفیع دوگانه -جسم خیس
-Wenum-مقایسه کنید Wno-endif-labels -خطا -خطا=* -Wfatal-خطاها -Wfloat-برابر
-فرمت -Wformat=2 -Wno-format-contains-nul -Wno-format-extra-args
-Wformat-غیر تحت اللفظی -Wformat-security -Wformat-signedness -Wformat-y2k
-Wframe-larger-than=لن -Wno-free-nonheap-object -Wjump-misses-init
نادیده گرفته شده واجد شرایط -Wincompatible اشاره گر انواع -حرفه ای
-Wimplicit-function-declaration -Wimplicit-int -برخود -وین لاین
-Wno-In-Conversion -بازیگرها از بین نرفتن به اشاره گر -Wno-invalid-offsetof -Winvalid-PCH
-بزرگتر از=لن -بهینه سازی های حلقه Wunsafe Wlogical-op -Wlogical-not-پرانتز
-طولانی طولانی -Wmain -Wmaybe-unitialized -Wmemset-transposed-args پرانتزهای Wmissing
Wmissing-field-initializers -Wmissing-include-dirs -Wno-multichar -بدون هیچ
غیر عادی شده=[هیچ|id|NFC|nfkc]
-Wodr -سرریز -Wopenmp-simd -طبقه های تار بسته بندی شده
-Wpacked-bitfield-compat -پد شده -پرانتزها -فرمت Wpedantic-ms
-فرمت Wno-pedantic-ms -wpointer-arith بدون اشاره گر به غیر بازیگری -Wredundant-decls
-Wno-return-local-addr - نوع چرخشی -توالی-نقطه -سایه -Wno-shadow-ivar
-Wshift-count-negative -Wshift-count-overflow -Wsign-مقایسه کنید -Wsign-تبدیل
-Wfloat-تبدیل -Wsizeof-pointer-memaccess -Wsizeof-Array-Argument
-Wstack-محافظ -Wstack-usage=لن Wstrict-aliasing -Wstrict-aliasing=n
-سرریز مچ دست -Wstrict-overflow=n -Wsuggest-attribute=[خالص|طراح|بدون بازگشت|قالب]
پیشنهاد-نهایی-انواع -پیشنهاد-نهایی-روش -Wsuggest-Oride
-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
-بردار-عملیات-عملکرد -وولا -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=سبک -فسانیزه کردن-بازیابی
-fsanitize-recover=سبک -fasan-shadow-offset=عدد
-fsanitize-undefined-trap-on-error -fcheck-pointer-bounds -fchkp-check-incomplete-type
-fchkp-first-field-has-own-bounds -fchkp-محدوده های باریک
-fchkp-arrow-to-innermost-array -fchkp-بهینه سازی -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-functions -fchkp-use-static-bounds
-fchkp-use-static-const-bounds -fchkp-treat-zero-dynamic-size-as-infinite
-fchkp-check-read -fchkp-check-read -fchkp-check-write -fchkp-store-bounds
-FCHKP-INstrument-Calls -fchkp-instrument-marked-only -fchkp-use-wrappers
-fdbg-cnt-list -fdbg-cnt=لیست ضد ارزش -fdisable-ipa-pass_name
-fdisable-rtl-pass_name -fdisable-rtl-پاس-نام=محدوده-لیست -fdisable-tree-pass_name
-fdisable-tree-پاس-نام=محدوده-لیست -fdump-noaddr -fdump-بدون شماره
-Fdump-Numbered-Links -fdump-translation-unit[-n] -fdump-class-hierarchy[-n]
-fdump-ipa-all -fdump-ipa-cgrap -fdump-ipa-inline -fdump-passes -fdump-statistics
-fdump-tree-all -fdump-tree-original[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg
-fdump-tree-نام مستعار -fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n]
-fdump-tree-ccp[-n] -fdump-tree-dce[-n] -fdump-tree-gimple[-خام] -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-vtable-verify -fdump-tree-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns=پرونده -fcompare-debug[=انتخاب می کند] -fcompare-debug-second
-feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
-symbols-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+ -gz[=نوع] -fno-merge-debug-strings
-fno-dwarf2-cfi-aasm -fdebug-prefix-map=قدیمی=جدید -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-detailed[=لیست مشخصات] -p -صفحه
-print-file-name=کتابخانه -print-libgcc-file-name -چاپ-چند دایرکتوری
-چاپ-چند لیب -چاپ-چاپ-دایرکتوری -Print-prog-name =برنامه
-چاپ-جستجو-dirs -Q -print-sysroot پسوند -print-sysroot-headers -Save- Temps
-save-temps=cwd -save-temps=obj -زمان[=پرونده]
بهینه سازی گزینه
-بهینه سازی های حلقه-faggressive -falign-functions[=n] -falign-jumps[=n]
-falign-labels[=n] -falign-loops[=n] -تعدادی-ریاضی -پروفایل خودکار
-fauto-profile[=مسیر] -fauto-inc-dec -شاخه-احتمالات
-fbranch-target-load-optimize -fbranch-هدف-بار-بهینه 2 -fbtr-bb-exclusive
-fcaller-save -fcheck-data-deps -fcombine-stack-adjustments -fconserve-stack
-FCOMPARE-elim -fcprop-رجیستر می کند fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fcx-fortran-rules -fcx-limited-range بخشهای fdata -fdce -تاخیر-شاخه
-fdelete-null-pointer-checks -مجازی کردن -fdevirtualize-speculatively
-fdevirtualize-at-ltrans -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-cp-alignment -فیپا-پتا
-fipa-profile -fipa-pure-const -fipa-reference -fipa-icf -fira-algorithm=الگوریتم
-فیرا-منطقه=منطقه -فیرا-بالابر-فشار -فیرا-حلقه-فشار -fno-ira-share-save-slots
-fno-ira-share-spill-slots -FIRA-VERBOSE =n -fisolate-erronous-paths-dereference
ویژگی-fisolate-erroneous paths -فیووپت -fkeep-inline-functions
-fkeep-static-consts -رشد-محدوده-کوچک شدن -فلوپ بلوک -فلوپ-تبادل
-فلوپ-نوار-معدن -فلوپ باز کردن و جم کردن -floop-nest-optimize -floop-parallelize-all
-flra-remat -flto -flto-compression-level -flto-partition =جلبک -flto-گزارش
-flto-report-wpa -fmerge-all-constants ثابت-fmerge -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-invariants -fno-branch-count-reg
-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 -بهینه سازی تماس های خواهر و برادر
-fpartial-inlining -fpeel-loops - پیش بینی کننده - مشترک -fprefetch-loop-arrays
-fprofile-report -fprofile-correction -fprofile-dir=مسیر -fprofile-generate
-fprofile-generate=مسیر -fprofile-use -fprofile-use=مسیر -fprofile-values
-fprofile-reorder-functions -مقاومتی-ریاضی -رایگان -frename-registers
-بلاک های سفارشی -freorder-blocks-and-partition توابع -freorder
-frerun-cse-after-loop -freschedule-modulo-scheduled-loops -بنیادسازی-ریاضی
-FSched2-he-superblocks -fsched-pressure -fsched-spec-load
-fsched-spec-load-dangerous -fsched-stalled-insns-dep[=n] -fsched-stalled-insns[=n]
-fsched-group-heuristic -fsched-critical-path-heuristic -fsched-spec-insn-heuristic
-fsched-rank-heuristic -fsched-last-insn-heuristic -fsched-dep-count-heuristic
-fschedule-fusion -fschedule-insns -fschedule-insns2 -قطعات-لنگرها
-برنامه ریزی انتخابی -زمانبندی-fselective2 -صیل صفحه بندی
حلقه های بیرونی لوله گذاری-fsel-sched -تداخل معنایی -Fshrink-Wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -FSSA-Phiopt محافظ چوب -fstack-protector-all
-fstack-محافظ-قوی -fstack-protector-explicit -fstdarg-opt fstrict-aliasing
-fstrict-سرریز -fthread-jumps ردیاب -ftree-bit-ccp -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-Coalesce-inline-vars -ftree-Coalesce-vars -ftree-copy-prop
-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
-free-free -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop توزیع -ftree-loop الگوی-حلقه-دور-توزیع
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-loop-vectorize
-ftree-parallelize-loops=n -ftree-pre -ftree-partial-pre -ftree-pta -ftree-reassoc
سه سینک -ftree-slsr -ftree-sra تبدیل -ftree-switch -ftree-tail-ادغام
-ftree-ter -ftree-vectorize -ftree-vrp -funit در یک زمان -funroll-all-loops
-funroll-loops -بهینهسازیهای حلقه امن -بهینهسازیهای ریاضی و سرگرمکننده
-funswitch-loops -فیپا-را -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
- وب کل برنامه -fwpa فیوز-لینکر-پلاگین --پارام نام=ارزش -O -O0 -O1 -O2
-O3 -اواس سریع -اوگ
پیش پردازنده گزینه
-Aسوال=پاسخ -آ-سوال[=پاسخ] -C -DD -dI -dM -dN -Dدرشت دستور[=تعریف کنید] -E -H
-idirafter دیر -عبارتند از پرونده -ایماکرو پرونده -پیوند پرونده -ithprefix دیر
-IwwithPrefixBefore دیر -سیستم دیر -imultilib دیر -isysroot دیر -M -مامان -MF -MG
-نماینده مجلس -MQ -MT -nostdinc -P -fdebug-cpp -افتراک-کلان-گسترش دایرکتوری fworking
نقشه برداری سه نمودارها -دف -Uدرشت دستور -Wp،انتخاب -Xpreprocessor انتخاب -no-integrated-cpp
همگذار گزینه
-وا،انتخاب -Xassembler انتخاب
لینک دهنده گزینه
شی-فایل-نام -fuse-ld=ها -lکتابخانه -nostartfiles -nodefaultlibs -nostdlib
- پای -rdynamic -s -استاتیک -static-libgcc -static-libstdc++ -static-libasan
static-libtsan استاتیک-لیبلسان استاتیک-لیبوسان -static-libmpx static-libmpxwrappers
-به اشتراک گذاشته شده -shared-libgcc - نمادین -T خط -Wl،انتخاب -xlinker انتخاب -u نماد -z
کلمه کلیدی
فهرست راهنما گزینه
-Bپیشوند -Iدیر -iplugindir=دیر -نقل دادندیر -Lدیر -specs =پرونده -من- --sysroot=دیر
--no-sysroot-پسوند
دستگاه وابسته گزینه
AAArch64 گزینه -mabi=نام -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 -mfix-cortex-a53-843419
-MNO-FIX-CORTEX-A53-843419 -مارس=نام -mcpu=نام -mtune=نام
آداپتوا ظهور و تجلی عیسی گزینه -mhalf-reg-file -mprefer-short-insn-regs -branch-cost=تعداد
-mcmove -mnops=تعداد -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modify
-mstack-offset=تعداد -Mround-نزدیکترین تماس های طولانی تماس های کوتاه -msmall16 -mfp-mode=حالت
-مره -max-vect-align=تعداد -msplit-vecmove-early -m1reg-REG
ARC گزینه بشکه-شفتر -mcpu=پردازنده -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-compact -mdpfp-سریع -mno-dpfp-lrsr -میا -mno-mpy -mmul32x16 -mmul64 -mnorm
-mspfp -mspfp-compact -MSPFP سریع -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-ملاک -mmac-d16 -mmac-24 -mrtsc mswape -متلفونی -mxy -نادرست کردن -mannotate-align
-مارکلینوکس -marclinux_prof -mepilogue-cfi تماس های طولانی -تماس های متوسط -msdata
-mucb-mcount -mvolatile-cache بدخیم تماس بگیرید -mauto-modify-reg -mbbit-peephole -mno-brcc
-mcase-vector-pcrel mcompact-casesi -mno-cond-exec -مرغ-cbranchsi -mexpand-adddi
بارهای ترکیبی -mlra -mlra-priority-none -mlra-priority-compact mlra-اولویت-
غیر فشرده -mno-millicode کد مختلط -mq-class -mRcq -mRcw -msize-level=سطح
-mtune=پردازنده -multcost=تعداد -munalign-prob-threshold=احتمال
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
-mfloat-abi=نام -mfp16-format=نام -mthumb-interwork -mno-thumb-interwork -mcpu=نام
-مارس=نام -mfpu=نام -mtune=نام -mprint-tune-info -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 -دسترسی چندجانبه -mneon-for-64bit mslow-flash-data
-masm-syntax-unified آن را محدود کن
APR گزینه -mmcu=mcu تجمع-args -branch-cost=هزینه -mcall-prologues -mint8
-mn_flash=اندازه -mno-وقفه می کند -آرامش کن -mrmw -Mstrict-X -مدی استک -nodevicelib
-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_duped_Unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -نومولتیفز -ناربند
noseglinkedit -pagezero_size -پیشبندی -prebind_all_twolevel_modules -بسته_خصوصی
-Read_Only_Relocs -بخشی - نمادهای بخش -whyload -seg1addr -فرقه آفرینی
- نمادهای بخش -بخش -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -Single_Module -استاتیک -زیر_کتابخانه -sub_umbrella
-twolevel_namespace -بله -تعریف نشده -لیست_symbols_unexported
-ناهمخوانی_اشاره_ضعیف -واتس لود -F حدس زد -خوشحال -mmacosx-version-min=نسخه
-mkernel -mone-byte-bool
دسامبر آلفا گزینه -mno-fp-regs -msoft-float -مییی -mieee-with-inexact
-mieee-conformant -mfp-trap-mode=حالت -MFP-Rounding-Mode =حالت -MTRAP-RECISION =حالت
-mbuild-constants -mcpu=نوع cpu -mtune=نوع cpu -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data داده های بزرگ -msmall-text
-متن بزرگ -mmmory-latency=زمان
FR30 گزینه -msmall-model -mno-lsim
LIF گزینه -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-Malloc-CC -mfixed-cc -mdword -mno-dword - دوبل -mno-دبل - رسانه -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgprel-ro - multilib-library-pic
-mlinked-fp تماس های طولانی برچسب های بدخیم -مجموعه-عکس -macc-4 -macc-8 -مپک
-mno-pack پرچم های mno -mcond-move -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-branch
-mno-vliw-branch -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-stats -mTLS -mtls -mcpu=پردازنده
گنو / لینوکس گزینه -mglibc - muclibc -مبیونیک -ماندروید -tno-android-cc -tno-android-ld
H8 / 300 گزینه -آرامش کن -mh -اماس - دقیقه -مکسر -mno-exr -mint32 -بدخیم-300
HPPA گزینه -مارس=نوع معماری -mdisable-fpregs -ندار-نشانگر
-mfast-غیر مستقیم-تماس -mgas -mgnu-ld -mhp-ld -Mfixed-Range =محدوده ثبت نام
-mjump-in-delay -mlinker-opt تماس های طولانی -mlong-load-store -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 -استاتیک
-موضوعات
IA-64 گزینه -mbig-endian -mlittle-endian -mgnu-as-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-names -msdata -mno-sdata -mconstant-gp -عکس خودکار
-mfused-madd -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latency
-minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm -stop-bits
-Mfixed-Range =محدوده ثبت نام -mtls-size=اندازه tls -mtune=نوع cpu -milp32 -mlp64
-msched-br-data-spec -msched-ar-da-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-da-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-after- every-cycle
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memory-insns=max-insns
LM32 گزینه -barrel-shift-enabled -mdivide-enabled -Multiply-enabled
-msign-extend-enabled -muser-enabled
M32R/D گزینه -m32r2 -m32rx -m32r -mdebug -حلقه های بدخیم -mno-align-loops
-missue-rate=عدد -branch-cost=عدد -mmodel=کد-اندازه-مدل-نوع -msdata=sdata-
نوع -mno-flush-func -mflush-func=نام -mno-flush-trap -mflush-trap=عدد -G تعداد
M32C گزینه -mcpu=پردازنده -msim -memregs=عدد
M680x0 گزینه -مارس=قوس -mcpu=پردازنده -mtune=اهنگ -68000 -68020 -m68020-40
-m68020-60 -68030 -68040 -68060 -mcpu32 -5200 -m5206e -m528x -5307 -5407
-mcfv4e -mbitfield -منو بیتفیلد -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mshort -mno-کوتاه -mhard-float -68881 -msoft-float -mpcrel
بدخیم -mstrict-align -msep-data -mno-sep-data -mshared-library-id=n
-کتابخانه مشترک -mno-id-shred-library -mxgot -mno-xgot
MCore گزینه -mhardlit -mno-hardlit -mdiv -mno-div -mrelax- فوری
-mno-relax-فوراً -mwide-bitfields -mno-wide-bitfields -m4byte-توابع
-mno-4byte-functions -mcalgraph-data -mno-calgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -210 -340
-mstack-increment
MeP گزینه -mabsdiff -مرکز خرید -متوسط -mbased =n -mbitops -mc=n -mclip
-mconfig=نام -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -meb -مل میکرو فرار میلی لیتر
-mleadz -می -mminmax -ملت -mno-opts -تکرار مجدد -اماس -مساتور -msdram -msim -msimnovec
-mtf -mtiny=n
MicroBlaze گزینه -msoft-float -mhard-float -msmall-divides -mcpu=پردازنده -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-pattern-compare -mxl-stack-check
-mxl-gp-opt -mno-clearbss -mxl-multiply-high -mxl-float-convert -mxl-float-sqrt
-mbig-endian -mlittle-endian -mxl-reorder -mxl-mode-برنامه-مدل
میپس گزینه -The -EB -مارس=قوس -mtune=قوس -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink فشرده شده است
-mno-interlink-compressed -minterlink-mips16 -mno-interlink-mips16 -mabi=ابی
-Mabiccals -mno-abicals -mshared -mno-اشتراک گذاری شده -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-float
چند شناور -mdouble-float -modd-spreg -mno-odd-spreg -mabs=حالت -mnan=پشتیبانی می کند
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -موا -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -mmicromips -mno-micromips -mfpu=نوع fpu -msmartmips -mno-smartmips
-مقابل-مجرد -mno-paired-single -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt
-mno-mt -mlsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gتعداد
-mlocal-sdata -mno-local-sdata -مترن-سیتا -mno-extern-sdata -mgpopt -mno-gopt
داده های عضو شده -mno-embedded-data -muninit-const-in-rodata
-mno-unit-const-in-rodata -mcode-readable=محیط -msplit-addresss
-mno-split-addresss -mexplicit-relocs -mno-explicit-relocs -mcheck-zero-division
-mno-check-zero-division -mdivide-traps -mdivide- breaks -mmemcpy -mno-memcpy
تماس های طولانی -mno-long-تماس -ممم -mno-mad -میمد -mno-imadd -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-rm7000 -mno-fix-rm7000
-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 -مل -mmul.x -mno-crt0
MSP430 گزینه -msim -masm-hex -mmcu= -mcpu= -بزرگ - کوچک -آرامش کن -mhwmult= -minrt
NDS32 گزینه -mbig-endian -mlittle-endian -کاهش-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-extext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vector-size=تعداد
-mcache-block-size=تعداد -مارس=قوس -mcmodel=کد-مدل -mctor-dtor -آرامش کن
نیوس II گزینه -G تعداد -mgpopt=انتخاب -mgpopt -mno-gpopt -مل -meb -mno-bypass-cache
-mbypass-cache -mno-cache-volatile -mcache-volatile -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -عادی-insn=N
-mno-custom-insn -mcustom-fpu-cfg=نام -محل -msmallc -msys-crt0=نام -msys-lib=نام
کارت گرافیک Nvidia PTX گزینه -32 -64 -mmainkernel
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 -m64bit-دبل -m32bit-دبل
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-ouced-indexed-Addresses -mfused-madd -mno-fused-madd -bit-align
mno-bit-align -mstrict-align -mno-strict-align -قابل جابجایی -mno-replaceable
-mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -کم -mlittle-endian
-بزرگ -mbig-endian -mdynamic-no-pic -مالتیفک -mswdiv -msingle-pic-base
-mprioritize-restricted-insns=اولویت -msched-costly-dep=نوع_وابستگی
-minsert-sched-nops=طرح -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi=ابی نوع -msecure-plt -mbss-plt
-mblock-move-inline-limit=تعداد -میزل -mno-isel -misel=بله -misel=نه -mspe -mno-spe
-mspe=بله -mspe=نه -آسیب شده -mgen-cell-microcode -mwarn-cell-microcode -mvrsave
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=بله -mfloat-gprs=no
-mfloat-gprs=تک -mfloat-gprs=دوبل - نمونه اولیه -mno-نمونه اولیه -msim -mmvme
دیوانه ها -چاقوی میلو -عضو -msdata -msdata=انتخاب کردن -mvxworks -G تعداد - نخ -مندی
-mrecip=انتخاب کردن -mno-recip -mrecip-precision -MNO-REPRIAL-DRECISION -mveclibabi=نوع -مفریز
-mno-friz توابع -mpointers-to-nested -mno-pointers-to-nested-functions
-msave-toc-indirect -mno-save-toc-intrect -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 -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf -مپر-قانون -mno-upper-regs
RX گزینه -m64bit-دبل -m32bit-دبل -fpu -nofpu -mcpu= -MBIG-ANDIAN-DATA
داده های کوچک انددیان -msmall-data -msim -mno-sim -mas100-syntax -mno-as100-syntax
-آرامش کن -mmax-constant-size= -mint-register= -بی حال -mno-warn-multiple-fast-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 انباشته-خروجی-آرگ -منهای نمادین
-matomic-model=مدل اتمی -branch-cost=تعداد -mzdcbranch -mno-zdcbranch
-mcbranch-force-dlay-slot -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra وانمود کردن - حرکت کردن -متاس
سولاریس 2 گزینه -mclear-hwcap -mno-clear-hwcap -متن ناخالص -mno-npure-text
- نخ ها - نخ
SPARC گزینه -mcpu=نوع cpu -mtune=نوع cpu -mcmodel=کد-مدل -mmmory-model=یادداشت-
مدل -32 -64 -mapp-regs -mno-app-regs -mfaster-structs -mno-faster-structs
-mflat -mno-flat -mfpu -mno-fpu -mhard-float -msoft-float -مارد-طبقه شناور
-msoft-quad-float -mstack-bias -mno-stack-bias دوبل
-mno-unaligned-doubles -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=CPU -32 -64 -mbig-endian -mlittle-endian -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
VAX گزینه -میلی گرم -mgnu -munix
ویزیوم گزینه -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=نوع cpu
-mtune=نوع cpu -msv-mode -Muser-mode
VMS گزینه -mvms-return-codes -mdebug-main=پیشوند -mmalloc64 -mpointer-size=اندازه
VxWorks گزینه -MRTP -غیر ساکن -Bstatic -بی دینامیک -Xbind-تنبل -Xbind-اکنون
x86 گزینه -mtune=نوع cpu -مارس=نوع cpu -mtune-ctrl=لیست ویژگی
ویژگی های mdump-tune -mno-default -mfpmath=واحد -masm=گویش -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -mno-wide-multiply -mrtd بدخیم-دوبرابر
-mpreferred-stack-boundary=تعداد -mincoming-stack-boundary=تعداد -mcld -mcx16 -مصحف
-mmovbe -mcrc32 -مندی -mrecip=انتخاب کردن -mvzeroupper -mprefer-avx128 -mmmx -msse -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -مشا -میس -mpclmul -mfsgsbase -مردرند -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -msse4a -m3dnow -mpopcnt -mabm -mbmi -MTBM -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
-منهای متناوب -minline-all-stringops -minline-stringops-به صورت پویا
-mstringop-strategy=جلبک -mmemcpy-strategy=استراتژی -mmemset-strategy=استراتژی
-mpush-args انباشته-خروجی-آرگ -m128bit-long-double -m96bit-long-double
-mlong-double-64 -mlong-double-80 -mlong-double-128 -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 -16 -mlarge-data-threshold=تعداد
-msse2avx -mfentry -Mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -Malign-data =نوع
-mstack-protector-guard=گارد
x86 ویندوز گزینه -mconsole -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
-مونیکد -mwin32 -mwindows -fno-set-stack-executable
Xstormy16 گزینه -msim
Xtensa گزینه -mconst16 -mno-const16 -mfused-madd -mno-fused-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -مکس-لیترال
-mno-text-literals -Mtarget-Aligget -mno-target-align -mlong calls
-mno-long calls
سری z گزینه S/390 و zSeries Options را ببینید.
رمز نسل گزینه
-fcall-saved-REG -fcall-استفاده شده-REG -تثبیت شده-REG - استثنائات -fnon-call-exceptions
-fdelete-dead-exceptions -funwind-جدول جداول -فاسینکرون-باز کردن -fno-gnu-unique
-finhibit-size-directive -فشار-توابع
-Finstrument-Functions-Function-Function-List =همزاد,همزاد، ...
-Finstrument-Functions- لیست-فایل-لیست =پرونده,پرونده، ... -fno-common -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -Fno-Jump-Table -فرکورد-gcc-سوئیچ
-Freg-struct-return -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-check -fstack-limit-register=REG -fstack-limit-symbol=همزاد
-fno-stack-limit -fsplit-stack -فرار-برآمده -ftls-model=مدل
-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 حاوی بدنه واحد کتابخانه (یک زیربرنامه یا بدنه بسته).
چنین فایل هایی نیز نامیده می شوند بدن.
پرونده.s
کد اسمبلر
پرونده.S
پرونده.sx
کد اسمبلر که باید از قبل پردازش شود.
دیگر
یک فایل شی که مستقیماً به پیوند داده می شود. هر نام فایل بدون شناسایی
پسوند به این صورت رفتار می شود.
شما می توانید زبان ورودی را به صراحت با -x گزینه:
-x زبان
را به صراحت مشخص کنید زبان برای فایل های ورودی زیر (به جای اجازه دادن به
کامپایلر یک پیش فرض را بر اساس پسوند نام فایل انتخاب می کند). این گزینه برای همه اعمال می شود
فایل های ورودی را تا بعدی دنبال کنید -x گزینه. مقادیر ممکن برای زبان هستند:
c-header cpp-output
c++ c++-header c++-cpp-output
هدف-c هدف-c-هدر هدف-c-cpp-خروجی
هدف-c++ هدف-c++-هدر هدف-c++-cpp-خروجی
اسمبلر اسمبلر-با-cpp
ADA
f77 f77-cpp-ورودی f95 f95-cpp-ورودی
go
جاوه
-x هیچ
هر گونه مشخصات یک زبان را خاموش کنید تا فایل های بعدی مدیریت شوند
با توجه به پسوندهای نام فایل آنها (همانطور که هستند -x اصلا استفاده نشده است).
کدهای عبور-خروج
به طور معمول gcc در صورت بازگشت هر مرحله از کامپایلر، برنامه با کد 1 خارج می شود
یک کد بازگشت ناموفق اگر مشخص کنید کدهای عبور-خروجاز gcc در عوض برنامه
با بالاترین عدد خطای تولید شده توسط هر فازی که خطا را برمی گرداند، برمی گردد
نشانه در صورت بروز خطای کامپایلر داخلی، قسمت جلویی C، C++ و Fortran عدد 4 را برمیگرداند
مواجه می شود.
اگر فقط برخی از مراحل تدوین را می خواهید، می توانید استفاده کنید -x (یا پسوند نام فایل)
گفتن gcc از کجا شروع کنیم و یکی از گزینه ها -c, -S، یا -E برای گفتن کجا gcc به
متوقف کردن. توجه داشته باشید که برخی از ترکیبات (به عنوان مثال، -x CPP-output -E) دستور دهید gcc به انجام
اصلا هیچی
-c فایل های منبع را کامپایل یا مونتاژ کنید، اما پیوند ندهید. مرحله پیوند به سادگی است
انجام نشده. خروجی نهایی به شکل یک فایل شی برای هر فایل منبع است.
به طور پیش فرض، نام فایل شی برای یک فایل منبع با جایگزینی پسوند ساخته می شود .c,
.i, .sو غیره با .o.
فایل های ورودی شناسایی نشده، که نیازی به کامپایل یا مونتاژ ندارند، نادیده گرفته می شوند.
-S توقف پس از مرحله تدوین مناسب. مونتاژ نکنید خروجی در
فرم یک فایل کد اسمبلر برای هر فایل ورودی غیر اسمبلر مشخص شده است.
به طور پیش فرض، نام فایل اسمبلر برای یک فایل منبع با جایگزینی پسوند ساخته می شود
.c, .iو غیره با .s.
فایل های ورودی که نیازی به کامپایل ندارند نادیده گرفته می شوند.
-E توقف پس از مرحله پیش پردازش؛ کامپایلر را به درستی اجرا نکنید. خروجی در است
فرم کد منبع از پیش پردازش شده، که به خروجی استاندارد ارسال می شود.
فایل های ورودی که نیازی به پیش پردازش ندارند نادیده گرفته می شوند.
-o پرونده
خروجی را در فایل قرار دهید پرونده. این در مورد هر نوع خروجی که تولید می شود صدق می کند،
خواه یک فایل اجرایی، یک فایل شی، یک فایل اسمبلر یا C از پیش پردازش شده باشد
کد
If -o مشخص نشده است، پیش فرض قرار دادن یک فایل اجرایی است a.out، شیء
پرونده برای منبع.پسوند in منبع.o، فایل اسمبلر آن در منبع.s، از پیش کامپایل شده
فایل هدر در منبع.پسوند.gchو تمام منبع C از پیش پردازش شده در خروجی استاندارد.
-v چاپ (در خروجی خطای استاندارد) دستورات اجرا شده برای اجرای مراحل
تلفیقی. همچنین شماره نسخه برنامه درایور کامپایلر و نسخه را چاپ کنید
پیش پردازنده و کامپایلر مناسب
-###
پسندیدن -v به جز اینکه دستورات اجرا نمی شوند و آرگومان ها نقل قول می شوند مگر اینکه آنها را انجام دهند
فقط شامل کاراکترهای الفبایی یا "./-_" باشد. این برای اسکریپت های پوسته مفید است
خطوط فرمان تولید شده توسط راننده را ضبط کنید.
لوله
برای ارتباط بین مراحل مختلف به جای فایل های موقت از لوله ها استفاده کنید
تلفیقی. این در برخی از سیستم هایی که اسمبلر قادر به خواندن نیست کار نمی کند
از یک لوله؛ اما اسمبلر گنو مشکلی ندارد.
--کمک
چاپ (روی خروجی استاندارد) شرحی از گزینه های خط فرمان که توسط آنها قابل درک است
gcc. اگر -v سپس گزینه نیز مشخص می شود --کمک به انواع مختلف نیز منتقل می شود
فرآیندهای فراخوانی شده توسط gcc، به طوری که آنها می توانند گزینه های خط فرمان خود را نمایش دهند
تایید کنید. اگر -وکسترا گزینه نیز مشخص شده است (قبل از --کمک گزینه)،
سپس گزینه های خط فرمان که هیچ سندی با آنها مرتبط نیست نیز هستند
نمایش داده.
--هدف-کمک
چاپ (روی خروجی استاندارد) شرح گزینه های خط فرمان خاص هدف
برای هر ابزار برای برخی از اهداف، ممکن است اطلاعات اضافی مربوط به هدف نیز وجود داشته باشد
چاپ شده.
--help={کلاس|[^]مقدماتی}[، ...]
چاپ (روی خروجی استاندارد) شرحی از گزینه های خط فرمان که توسط آنها قابل درک است
کامپایلری که در تمام کلاس ها و واجد شرایط قرار می گیرد. اینها هستند
کلاس های پشتیبانی شده:
بهینه سازها
نمایش تمام گزینه های بهینه سازی پشتیبانی شده توسط کامپایلر.
هشدارها
نمایش تمام گزینه های کنترل کننده پیام های هشدار تولید شده توسط کامپایلر.
هدف
نمایش گزینه های خاص هدف بر خلاف --هدف-کمک گزینه با این حال، هدف-
گزینه های خاص پیوند دهنده و اسمبلر نمایش داده نمی شود. این به دلیل این هست که
این ابزارها در حال حاضر توسعه یافته را پشتیبانی نمی کنند --کمک= نحو.
پارام ها
نمایش مقادیر شناسایی شده توسط --پارام گزینه.
زبان
نمایش گزینه های پشتیبانی شده برای زبان، که در آن زبان نام یکی از
زبان های پشتیبانی شده در این نسخه از 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. این استاندارد بطور قابل ملاحظه ای به طور کامل پشتیبانی می شود، اشکالات مدولو و
مسائل مربوط به ممیز شناور (عمدتاً اما نه کاملاً به ویژگی های اختیاری C99 مربوط می شود
از ضمیمه های F و G). دیدنhttp://gcc.gnu.org/c99status.html> برای بیشتر
اطلاعات نام ها c9x و iso9899:199x منسوخ شده اند.
c11
c1x
iso9899: 2011
ISO C11، تجدید نظر در سال 2011 استاندارد ISO C. این استاندارد به طور قابل ملاحظه ای است
به طور کامل پشتیبانی می شود، باگ های مدول، مسائل مربوط به ممیز شناور (عمدتاً اما نه به طور کامل
مربوط به ویژگی های اختیاری C11 از ضمیمه های F و G) و ضمیمه های اختیاری K
(رابط های بررسی مرزها) و L (قابلیت تجزیه و تحلیل). نام c1x منسوخ شده است.
gnu90
gnu89
گویش گنو ISO C90 (شامل برخی از ویژگی های C99).
gnu99
gnu9x
گویش گنو ISO C99. نام gnu9x منسوخ شده است.
gnu11
gnu1x
گویش گنو ISO C11. این پیش فرض برای کد C است. نام gnu1x is
منسوخ.
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++0x منسوخ شده است.
gnu++11
gnu++0x
گویش گنو از -std = C ++ 11. نام gnu++0x منسوخ شده است.
c++14
c++1y
استاندارد ISO C++ 2014 به همراه اصلاحات. نام c++1y منسوخ شده است.
gnu++14
gnu++1y
گویش گنو از -std = C ++ 14. نام gnu++1y منسوخ شده است.
c++1z
بازنگری بعدی استاندارد ISO C++، به طور آزمایشی برای سال 2017 برنامه ریزی شده است. پشتیبانی
بسیار تجربی است و تقریباً به طور قطع به روش های ناسازگاری تغییر خواهد کرد
نسخه های آینده
gnu++1z
گویش گنو از -std = C ++ 1Z. پشتیبانی بسیار آزمایشی است و تقریباً انجام خواهد شد
مطمئناً در نسخه های بعدی به روش های ناسازگار تغییر می کند.
-fgnu89-inline
گزینه -fgnu89-inline به شورای همکاری خلیج فارس می گوید که از معنای سنتی گنو برای «داخلی» استفاده کند.
در حالت C99 کار می کند.
استفاده از این گزینه تقریباً معادل افزودن ویژگی تابع "gnu_inline" است
به همه توابع درون خطی
گزینه -fno-gnu89-inline صریحاً به GCC میگوید که از معنای C99 استفاده کند
"inline" در حالت C99 یا gnu99 (یعنی رفتار پیش فرض را مشخص می کند). این
گزینه در پشتیبانی نمی شود -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.
-fopenacc
مدیریت دستورات OpenACC "#pragma acc" در C/C++ و "!$acc" در Fortran را فعال کنید.
چه زمانی -fopenacc مشخص شده است، کامپایلر کدهای شتابی را با توجه به
رابط برنامه نویسی برنامه OpenACC نسخه 2.0http://www.openacc.org/> این گزینه
دلالت دارد - نخ، و بنابراین فقط در اهدافی پشتیبانی می شود که از آنها پشتیبانی می کنند
- نخ.
توجه داشته باشید که این یک ویژگی آزمایشی است، ناقص است و ممکن است در آینده تغییر کند
نسخه های GCC دیدنhttps://gcc.gnu.org/wiki/OpenACC> برای اطلاعات بیشتر
-فوپنمپ
مدیریت دستورات OpenMP "#pragma omp" در C/C++ و "!$omp" در Fortran را فعال کنید.
چه زمانی -فوپنمپ مشخص شده است، کامپایلر مطابق با کد موازی تولید می کند
رابط برنامه کاربردی OpenMP نسخه 4.0http://www.openmp.org/> این گزینه
دلالت دارد - نخ، و بنابراین فقط در اهدافی پشتیبانی می شود که از آنها پشتیبانی می کنند
- نخ. -فوپنمپ دلالت دارد -fopenmp-simd.
-fopenmp-simd
فعال کردن مدیریت دستورات SIMD OpenMP با "#pragma omp" در C/C++ و "!$omp" در
فرترن سایر دستورالعمل های OpenMP نادیده گرفته می شوند.
-fcilkplus
استفاده از ویژگی های برنامه افزودنی زبان Cilk Plus را برای C/C++ فعال کنید. زمانی که گزینه
-fcilkplus مشخص شده است، استفاده از ویژگی های برنامه افزودنی زبان Cilk Plus را فعال کنید
برای C/C++. اجرای حاضر از نسخه 1.2 ABI پیروی می کند. این یک
ویژگی آزمایشی که فقط تا حدی کامل شده است و رابط کاربری آن ممکن است تغییر کند
در نسخه های بعدی GCC با تغییر مشخصات رسمی. در حال حاضر، همه
ویژگی هایی اما "_Cilk_for" پیاده سازی شده است.
-fgnu-tm
زمانی که گزینه -fgnu-tm مشخص شده است، کامپایلر کدی را برای لینوکس تولید می کند
گونه ای از سند مشخصات ABI حافظه تراکنش فعلی اینتل (بازبینی
1.1، 6 مه 2009). این یک ویژگی آزمایشی است که ممکن است رابط کاربری آن تغییر کند
نسخه های آینده GCC، با تغییر مشخصات رسمی. لطفا توجه داشته باشید که نه
تمام معماری ها برای این ویژگی پشتیبانی می شوند.
برای اطلاعات بیشتر در مورد پشتیبانی GCC از حافظه تراکنشی،
توجه داشته باشید که ویژگی حافظه تراکنشی با استثناهای غیر تماس پشتیبانی نمی شود
(-fnon-call-exceptions).
-اف ام اس-افزونه ها
برخی از ساختارهای غیر استاندارد مورد استفاده در فایلهای هدر مایکروسافت را بپذیرید.
در کد ++C، این اجازه می دهد تا نام اعضا در ساختارها مشابه انواع قبلی باشد
اعلامیه ها
typedef int UOW;
ساختار ABC {
UOW UOW;
};
برخی از فیلدهای بدون نام در ساختارها و اتحادیه ها فقط با این مورد پذیرفته می شوند
گزینه.
توجه داشته باشید که این گزینه برای همه اهداف غیر از x86 با استفاده از ms-abi خاموش است.
-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. به همین ترتیب، گزینه -منوم-امضای برابر است با
-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. پیش فرض نسخه 0 است.
نسخه 0 به نسخه ای اشاره دارد که بیشترین مطابقت را با مشخصات C++ ABI دارد.
بنابراین، ABI به دست آمده با استفاده از نسخه 0 در نسخه های مختلف G++ تغییر خواهد کرد
به عنوان اشکالات ABI رفع شده است.
نسخه 1 نسخه C++ ABI است که برای اولین بار در G++ 3.2 ظاهر شد.
نسخه 2 نسخه C++ ABI است که برای اولین بار در G++ 3.4 ظاهر شد و
پیش فرض از طریق G++ 4.9.
نسخه 3 یک خطا را در مخفی کردن یک آدرس ثابت به عنوان آرگومان الگو تصحیح می کند.
نسخه 4 که برای اولین بار در G++ 4.5 ظاهر شد، یک mangling استاندارد برای برداری را پیاده سازی می کند.
انواع.
نسخه 5 که برای اولین بار در G++ 4.6 ظاهر شد، اشتباه بودن ویژگی را تصحیح می کند
const/volatile در انواع نشانگر تابع، decltype یک decl ساده و استفاده از a
پارامتر تابع در اعلام یک پارامتر دیگر.
نسخه 6 که برای اولین بار در G++ 4.7 ظاهر شد، رفتار تبلیغاتی C++11 را تصحیح می کند.
فهرستهای دامنهدار و مخدوش کردن بستههای آرگومان الگو، const/static_cast، پیشوند ++
و -- و یک تابع محدوده کلاس که به عنوان آرگومان الگو استفاده می شود.
نسخه 7 که برای اولین بار در G++ 4.8 ظاهر شد، nullptr_t را به عنوان یک نوع داخلی در نظر می گیرد.
و پارگی لامبداها را در محدوده آرگومان پیش فرض تصحیح می کند.
نسخه 8 که برای اولین بار در G++ 4.9 ظاهر شد، رفتار جایگزینی را تصحیح می کند
انواع تابع با تابع-cv-کالیفایر.
همچنین مشاهده کنید -وابی.
-Fabi-compat-version =n
در اهدافی که از نام مستعار قوی پشتیبانی میکنند، G++ با ایجاد تغییرات، تغییرات را درهم میریزد
یک نام مستعار با نام مخدوش صحیح هنگام تعریف نماد با نام نادرست
نام خراب این سوئیچ مشخص می کند که از کدام نسخه ABI برای نام مستعار استفاده شود.
با -fabi-version=0 (به طور پیش فرض)، این به طور پیش فرض 2 است. اگر نسخه ABI دیگری باشد
به صراحت انتخاب شده است، این به طور پیش فرض روی 0 است.
نسخه سازگاری نیز توسط تنظیم شده است -وابی=n.
-fno-access-control
تمام بررسی دسترسی را خاموش کنید. این سوئیچ عمدتاً برای رفع اشکالات مفید است
کد کنترل دسترسی
-fcheck-جدید
قبل از تلاش، بررسی کنید که نشانگر بازگردانده شده توسط "اپراتور جدید" تهی نباشد
ذخیره سازی اختصاص داده شده را تغییر دهید. این بررسی معمولاً غیر ضروری است زیرا C++
استاندارد مشخص می کند که "اپراتور new" تنها در صورتی 0 را برمی گرداند که "throw()" در اعلام شده باشد
در این صورت کامپایلر همیشه مقدار بازگشتی را حتی بدون این گزینه بررسی می کند. که در
همه موارد دیگر، زمانی که "اپراتور جدید" دارای یک ویژگی استثنای غیر خالی، حافظه است
خستگی با پرتاب "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++. با این حال، در ISO C++ a
تابع دوستی که در یک محدوده محصور اعلام نشده است را فقط می توان با استفاده از آن یافت
جستجوی وابسته به آرگومان GCC رفتار استاندارد را پیشفرض میکند.
این گزینه برای سازگاری است و ممکن است در نسخه بعدی G++ حذف شود.
fno-elide-constructors
استاندارد C++ به یک پیاده سازی اجازه می دهد تا ایجاد موقتی را که فقط است حذف کند
برای مقداردهی اولیه یک شی دیگر از همان نوع استفاده می شود. با تعیین این گزینه غیرفعال می شود
این بهینه سازی، و G++ را مجبور می کند تا سازنده کپی را در همه موارد فراخوانی کند.
مشخصات -fno-enforce-eh
برای بررسی نقض مشخصات استثنا در زمان اجرا، کد تولید نکنید.
این گزینه استاندارد 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++ مشخص شده است به خود حلقه "for" محدود می شود. اگر
-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++ ("dynamic_cast" و "typeid"). اگر شما
از آن قسمت های زبان استفاده نکنید، می توانید با استفاده از این پرچم مقداری فضا ذخیره کنید.
توجه داشته باشید که مدیریت استثنا از همان اطلاعات استفاده می کند، اما G++ آن را به عنوان تولید می کند
مورد نیاز است. عملگر "dynamic_cast" همچنان می تواند برای کست هایی که نیازی ندارند استفاده شود
اطلاعات نوع زمان اجرا، به عنوان مثال به "void *" یا به کلاس های پایه بدون ابهام فرستاده می شود.
-fsized-تخصیص
اعلامیه های داخلی داخلی را فعال کنید
عملگر void delete (void *, std::size_t) noexcept;
عملگر void delete[] (void *, std::size_t) noexcept;
همانطور که در C++14 معرفی شد. این برای جانشینی جایگزینی تعریف شده توسط کاربر مفید است
توابعی که به عنوان مثال از اندازه شیء استفاده می کنند تا انتقال سریعتر انجام شود.
به طور پیش فرض در زیر فعال شده است -std = C ++ 14 و بالاتر. پرچم -Wsized-تخصیص هشدار می دهد
در مورد مکان هایی که ممکن است بخواهند تعریفی اضافه کنند.
-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 برای تعریف انواع با نام مشابه متفاوت است.
-fvtable- Verify =[STD|preinit|هیچ]
روشن (یا خاموش، در صورت استفاده). -fvtable-verify=هیچکدام) ویژگی امنیتی که در تأیید می شود
زمان اجرا، برای هر تماس مجازی، نشانگر vtable که از طریق آن تماس انجام می شود
made برای نوع شی معتبر است و خراب یا رونویسی نشده است.
اگر یک نشانگر vtable نامعتبر در زمان اجرا شناسایی شود، یک خطا گزارش می شود و
اجرای برنامه بلافاصله متوقف می شود.
این گزینه باعث می شود که ساختارهای داده زمان اجرا در هنگام راه اندازی برنامه ساخته شوند، که هستند
برای تأیید نشانگرهای vtable استفاده می شود. گزینه ها STD و preinit کنترل
زمان ساخت این ساختارهای داده در هر دو مورد ساختار داده ها هستند
ساخته شده قبل از اجرا به "اصلی". استفاده كردن -fvtable-verify=std باعث داده ها می شود
ساختارهایی که پس از بارگیری و تنظیم اولیه کتابخانه های مشترک ساخته می شوند.
-fvtable- Verify = preinit باعث می شود آنها قبل از ایجاد کتابخانه های مشترک ساخته شوند
بارگیری و مقداردهی اولیه شد.
اگر این گزینه چندین بار در خط فرمان با مقادیر مختلف ظاهر شود
مشخص شده، هیچ بالاترین اولویت را نسبت به هر دو دارد STD و preinit; preinit طول می کشد
اولویت بر STD.
-fvtv-debug
هنگام استفاده همراه با -fvtable-verify=std or -fvtable- Verify = preinit، علل
نسخه های اشکال زدایی توابع زمان اجرا برای ویژگی تأیید vtable باشد
تماس گرفت. این پرچم همچنین باعث می شود کامپایلر اطلاعات مربوط به کدام vtable را ثبت کند
اشاره گرهایی که برای هر کلاس پیدا می کند. این اطلاعات در فایلی به نام نوشته می شود
vtv_set_ptr_data.log در دایرکتوری که توسط متغیر محیطی نامگذاری شده است VTV_LOGS_DIR
اگر آن تعریف شده باشد یا دایرکتوری کاری فعلی در غیر این صورت.
توجه: این ویژگی ضمیمه می کند داده ها به فایل گزارش اگر یک فایل لاگ تازه می خواهید، باشید
مطمئن شوید که هر مورد موجود را حذف کنید.
-fvtv- شمارش می کند
این یک پرچم اشکال زدایی است. هنگام استفاده همراه با -fvtable-verify=std or
-fvtable- Verify = preinit، این باعث می شود که کامپایلر تعداد کل موارد را پیگیری کند
تماس های مجازی با آن و تعداد تأییدهایی که درج می کند. آن را نیز
تعداد تماسهایی را که به برخی از توابع کتابخانه زمان اجرا درج میکند، میشمارد و
این اطلاعات را برای هر واحد کامپایل ثبت می کند. کامپایلر این اطلاعات را می نویسد
به فایلی به نام vtv_count_data.log در دایرکتوری که توسط متغیر محیطی نامگذاری شده است
VTV_LOGS_DIR اگر آن تعریف شده باشد یا دایرکتوری کاری فعلی در غیر این صورت. آن را نیز
اندازه مجموعه های اشاره گر vtable را برای هر کلاس می شمارد و این اطلاعات را می نویسد
به vtv_class_set_sizes.log در همان دایرکتوری
توجه: این ویژگی ضمیمه می کند داده ها به فایل های گزارش برای دریافت فایل های گزارش تازه، حتما
موارد موجود را حذف کنید
-فنو ضعیف
از پشتیبانی نماد ضعیف استفاده نکنید، حتی اگر توسط پیوند دهنده ارائه شده باشد. به طور پیش فرض، G++
در صورت موجود بودن از نمادهای ضعیف استفاده می کند. این گزینه فقط برای تست وجود دارد و
نباید توسط کاربران نهایی استفاده شود. منجر به کد پایین تر می شود و هیچ مزیتی ندارد.
این گزینه ممکن است در نسخه بعدی G++ حذف شود.
-nostdinc++
فایل های هدر را در دایرکتوری های استاندارد مخصوص C++ جستجو نکنید، اما این کار را انجام دهید
هنوز دایرکتوری های استاندارد دیگر را جستجو کنید. (این گزینه در هنگام ساخت استفاده می شود
کتابخانه C++.)
علاوه بر این، این گزینه های بهینه سازی، هشدار و تولید کد فقط معانی دارند
برای برنامه های ++C:
-وابی (فقط C، Objective-C، C++ و Objective-C++)
وقتی صریح -fabi-version=n گزینه استفاده می شود، باعث می شود G++ هنگام تولید هشدار دهد
کدی که احتمالاً با C++ ABI خنثی فروشنده سازگار نیست. از G++ در حال حاضر
پیش فرض به -fabi-version=0, -وابی هیچ تاثیری ندارد مگر اینکه نسخه قدیمی ABI باشد
انتخاب شده (با -fabi-version=n) یا یک نسخه سازگار قدیمی انتخاب شده است (با
-وابی=n or -Fabi-compat-version =n).
اگرچه تلاش شده است در مورد همه این موارد هشدار داده شود، اما احتمالا مواردی وجود دارد
مواردی که در مورد آنها هشدار داده نشده است، حتی اگر G++ در حال تولید کد ناسازگار است.
همچنین ممکن است مواردی وجود داشته باشد که اخطارها حتی با وجود کدی که وجود دارد صادر شود
تولید شده سازگار است.
اگر در مورد آن نگران هستید، باید کد خود را بازنویسی کنید تا از این هشدارها جلوگیری کنید
این واقعیت که کد تولید شده توسط G++ ممکن است با کد تولید شده توسط باینری سازگار نباشد
سایر کامپایلرها
-وابی همچنین می تواند با شماره نسخه صریح برای هشدار در مورد سازگاری استفاده شود
با یک خاص -نسخه فابی سطح، به عنوان مثال -وابی=2 برای هشدار در مورد تغییرات نسبت به
-fabi-version=2. تعیین شماره نسخه نیز تنظیم می شود -Fabi-compat-version =n.
ناسازگاری های شناخته شده در -fabi-version=2 (که پیشفرض از GCC 3.4 به
4.9) شامل:
* یک الگو با پارامتر الگوی غیر نوع از نوع مرجع مخدوش شد
نادرست:
خارجی int N;
قالب ساختار S {};
void n (S ) {2}
این در رفع شد -fabi-version=3.
* انواع بردار SIMD اعلام شده با استفاده از "__خصیصه ((اندازه_بردار))" در یک
روشی غیر استاندارد که اجازه بارگذاری بیش از حد توابع بردار را نمی دهد
در اندازه های مختلف
منگل در عوض شد -fabi-version=4.
* "__ویژگی ((const))" و "noreturn" به عنوان واجد شرایط نوع مخدوش شدند، و
"decltype" یک اعلامیه ساده کنار گذاشته شد.
این مشکلات درهم ریختگی رفع شد -fabi-version=5.
* شمارشگرهای محدودهای که بهعنوان آرگومانهای یک تابع متغیر ارسال میشوند، مانند این ارتقا مییابند
شمارشگرهای بدون محدوده، باعث شکایت "va_arg" می شود. در بیشتر اهداف اینطور نیست
در واقع روی پارامتری که ABI را ارسال می کند، تأثیر می گذارد، زیرا راهی برای ارسال آرگومان وجود ندارد
کوچکتر از "int".
همچنین، ABI تغییر در بستههای آرگومان الگو، "const_cast" را تغییر داد.
"static_cast"، پیشوند افزایش/کاهش، و یک تابع محدوده کلاس که به عنوان یک استفاده می شود
استدلال الگو
این مسائل در اصلاح شد -fabi-version=6.
* لامبداها در محدوده آرگومان پیشفرض به اشتباه مخدوش شدند و ABI تغییر کرد
دستکاری "nullptr_t".
این مسائل در اصلاح شد -fabi-version=7.
* هنگامی که یک نوع تابع را با واجد شرایط تابع-cv ترکیب میکنید، غیر واجد شرایط
نوع تابع به اشتباه به عنوان کاندیدای جایگزینی در نظر گرفته شد.
این در رفع شد -fabi-version=8.
همچنین در مورد تغییرات مربوط به psABI هشدار می دهد. psABI شناخته شده در این مرحله تغییر می کند
عبارتند از:
* برای SysV/x86-64، اتحادیه های دارای اعضای "long double" به عنوان در حافظه منتقل می شوند
در psABI مشخص شده است. مثلا:
اتحادیه U {
بلند دوبل ld;
بین من
};
"union U" همیشه در حافظه منتقل می شود.
-تگ وابی (فقط C++ و Objective-C++)
هنگامی که یک نوع با برچسب ABI در زمینه ای استفاده می شود که آن تگ ABI را ندارد هشدار دهید.
دیدن ++C خواص برای اطلاعات بیشتر در مورد برچسب های ABI.
-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 به دلیل فراخوانی یک تابع به نادرست ارزیابی می شود، هشدار دهید
که دارای مشخصات استثنایی غیر پرتاب کننده (یعنی "throw()" یا
"noexcept") اما توسط کامپایلر شناخته شده است که هرگز استثناء ایجاد نمی کند.
غیر مجازی-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++14. این
گزینه به طور پیش فرض برای ISO C++11 به بعد خاموش است (-std = C ++ 11، ...).
در زیر -و... گزینه ها تحت تاثیر قرار نمی گیرند -دیو.
-Weffc++ (فقط C++ و Objective-C++)
هشدار در مورد نقض دستورالعمل های سبک زیر توسط اسکات مایرز موثر
++C سری کتاب:
* یک سازنده کپی و یک عملگر انتساب برای کلاس هایی با پویا تعریف کنید
حافظه اختصاص داده شده
* مقدار دهی اولیه را به انتساب در سازنده ها ترجیح دهید.
* "operator=" یک مرجع به *این را برگردانید.
* زمانی که باید یک شی را برگردانید، سعی نکنید یک مرجع را برگردانید.
* بین اشکال پیشوند و پسوند عملگرهای افزایشی و کاهشی تمایز قائل شوید.
* هرگز «&&»، «||»، یا «،» را بیش از حد بارگذاری نکنید.
این گزینه را نیز فعال می کند غیر مجازی-dtorکه یکی از C++های موثر نیز می باشد
توصیه ها با این حال، چک برای هشدار در مورد عدم وجود مجازی تمدید شده است
ویرانگر در کلاس های پایه های غیر چند شکلی قابل دسترس نیز.
هنگام انتخاب این گزینه، توجه داشته باشید که سرصفحه های استاندارد کتابخانه از همه پیروی نمی کنند
از این دستورالعمل ها؛ استفاده کنید 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) به نوع غیر خالی استفاده می شود، هشدار دهید.
بازیگران سبک جدید ("dynamic_cast"، "static_cast"، "reinterpret_cast"، و
"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("...")" بدون توجه به گزینه های خط فرمان.
-فنو-کابین-آژانس
بهطور پیشفرض، متغیرهای نمونه در Objective-C را میتوان بهگونهای که گویی محلی هستند، دسترسی داشت
متغیرها از درون متدهای کلاسی که در آن اعلام شده اند. این می تواند منجر به
سایه انداختن بین متغیرهای نمونه و سایر متغیرهای اعلام شده به صورت محلی
داخل یک متد کلاس یا به صورت سراسری با همین نام. مشخص کردن -فنو-کابین-آژانس
flag این رفتار را غیرفعال می کند و بنابراین از مسائل سایه متغیر جلوگیری می کند.
-fivar-visibility=[عمومی|محفوظ|خصوصی|بسته]
مشاهده متغیر نمونه پیش فرض را روی گزینه مشخص شده تنظیم کنید تا آن نمونه
متغیرهای اعلام شده خارج از محدوده هر دستورالعمل اصلاح کننده دسترسی به طور پیش فرض به
دید مشخص شده
-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 شخصیت ها. اگر n is
صفر، پس از آن هیچ خط بسته بندی انجام نمی شود. هر پیام خطا در یک خط ظاهر می شود.
این پیشفرض برای همه قسمتهای جلویی است.
-fdiagnostics-show-location=یک بار
فقط در حالت بسته بندی خط معنادار است. به خبرنگار پیام های تشخیصی دستور می دهد
اطلاعات مکان منبع را منتشر می کند یک بار; یعنی در صورتی که پیام خیلی طولانی باشد که مناسب نباشد
روی یک خط فیزیکی واحد و باید پیچیده شود، مکان منبع منتشر نخواهد شد
(به عنوان پیشوند) دوباره، بارها و بارها، در خطوط ادامه بعدی. این است
رفتار پیش فرض
-fdiagnostics-show-location=هر خط
فقط در حالت بسته بندی خط معنادار است. به خبرنگار پیام های تشخیصی دستور می دهد
همان اطلاعات مکان منبع (به عنوان پیشوند) را برای خطوط فیزیکی ایجاد می کند
از فرآیند شکستن پیامی که آنقدر طولانی است که در یک خط قرار نمی گیرد.
-fdiagnostics-color[=WHEN]
-fno-diagnostics-color
از رنگ در تشخیص استفاده کنید. WHEN is هرگز, همیشه، یا خودکار. پیش فرض بستگی به چگونگی آن دارد
کامپایلر پیکربندی شده است، می تواند هر یک از موارد بالا باشد WHEN گزینه ها یا همچنین
هرگز if GCC_COLORS متغیر محیطی در محیط وجود ندارد و خودکار
در غیر این صورت. خودکار به معنای استفاده از رنگ تنها زمانی است که خطای استاندارد ترمینال باشد. در
اشکال -fdiagnostics-color و -fno-diagnostics-color نام مستعار برای
-fdiagnostics-color=همیشه و -fdiagnostics-color=هرگزبود.
رنگ ها توسط متغیر محیطی تعریف می شوند GCC_COLORS. مقدار آن یک کولون است-
فهرستی از قابلیتها جدا شده و زیررشتههای نمایش گرافیکی (SGR) را انتخاب کنید. SGR
دستورات توسط ترمینال یا شبیه ساز ترمینال تفسیر می شوند. (به بخش در مراجعه کنید
مستندات پایانه متنی شما برای مقادیر مجاز و معانی آنها به عنوان
ویژگی های کاراکتر.) این مقادیر زیر رشته ای اعداد صحیح در نمایش اعشاری هستند
و می توان با نقطه ویرگول الحاق کرد. مقادیر رایج برای الحاق عبارتند از 1 برای
جسورانه ، 4 برای خط کشی، 5 برای پلک زدن، 7 برای معکوس، 39 برای رنگ پیش زمینه پیش فرض، 30
به 37 برای رنگ های پیش زمینه، 90 به 97 برای رنگ های پیش زمینه حالت 16 رنگ، 38؛ 5؛ 0 به
38؛ 5؛ 255 برای رنگ های پیش زمینه 88 رنگ و 256 رنگ، 49 برای پس زمینه پیش فرض
رنگ ، 40 به 47 برای رنگ های پس زمینه، 100 به 107 برای رنگ های پس زمینه حالت 16 رنگ،
و 48؛ 5؛ 0 به 48؛ 5؛ 255 برای رنگ های پس زمینه 88 رنگ و 256 رنگ.
به طور پیش فرض GCC_COLORS is
error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01
جایی که 01، 31 قرمز پررنگ است، 01، 35 سرخابی پررنگ است، 01، 36 فیروزه ای پررنگ است، 01، 32 جسور است
سبز و 01 جسور است تنظیمات GCC_COLORS به رشته خالی رنگ ها را غیرفعال می کند.
قابلیت های پشتیبانی شده به شرح زیر است.
"خطا"
زیر رشته SGR برای خطا: نشانگرها.
"هشدار="
زیر رشته SGR برای هشدار: نشانگرها.
"توجه"
زیر رشته SGR برای یادداشت: نشانگرها.
"caret="
زیر رشته SGR برای خط کارت.
"منبع = "
زیر رشته SGR برای اطلاعات مکان، فایل: خط or فایل:خط:ستون و غیره.
" نقل قول "
زیر رشته SGR برای اطلاعات چاپ شده در داخل نقل قول.
-fno-diagnostics-show-option
بهطور پیشفرض، هر تشخیصی که منتشر میشود شامل متنی است که گزینه خط فرمان را نشان میدهد
که مستقیماً تشخیص را کنترل می کند (اگر چنین گزینه ای برای تشخیصی شناخته شده باشد
دستگاه). مشخص کردن -fno-diagnostics-show-option پرچم آن را سرکوب می کند
رفتار.
-fno-diagnostics-show-caret
بهطور پیشفرض، هر تشخیصی صادر شده شامل خط منبع اصلی و یک علامت «^» است.
نشان دهنده ستون این گزینه این اطلاعات را مخفی می کند. خط منبع است
کوتاه شده به n شخصیت ها، اگر -fmessage-length=n گزینه داده شده است. زمانی که خروجی
به ترمینال انجام می شود، عرض محدود به عرض داده شده توسط ستون ها
متغیر محیطی یا، اگر تنظیم نشده باشد، به عرض ترمینال.
گزینه به درخواست 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++ گفتار گزینه.
-دیو پرچم های هشدار زیر را روشن می کند:
-وادرس -Warray-bounds=1 (فقط با -O2) -Wc++11-compat -Wc++14-compat
-Wchar-مشترک ها -Wenum-مقایسه کنید (در C/ObjC؛ این به طور پیش فرض در C++ روشن است)
-Wimplicit-int (فقط C و Objective-C) -Wimplicit-function-declaration (C و
فقط هدف-C) -کامنت کنید -فرمت -Wmain (فقط برای C/ObjC و مگر اینکه
-مناسب) -Wmaybe-unitialized پرانتزهای Wmissing (فقط برای C/ObjC) -بدون هیچ
-Wopenmp-simd -پرانتزها -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-غیر تحت اللفظی.)
-Wformat-signedness
If -فرمت مشخص شده است، همچنین اگر رشته قالب نیاز به علامت بدون علامت دارد، هشدار می دهد
استدلال و استدلال امضا می شود و بالعکس.
توجه: در اوبونتو 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++، یک تابع بدون نوع بازگشت همیشه یک پیام تشخیصی حتی یکنواخت تولید می کند
چه زمانی -از نوع بدون بازگشت مشخص شده است. تنها استثناها "اصلی" و توابع هستند
در هدرهای سیستم تعریف شده است.
این هشدار توسط -دیو.
-Wshift-count-negative
در صورت منفی بودن تعداد شیفت ها هشدار دهید. این هشدار به طور پیش فرض فعال است.
-Wshift-count-overflow
هشدار اگر تعداد شیفت >= عرض نوع. این هشدار به طور پیش فرض فعال است.
-سوئیچ
هر زمان که یک عبارت "switch" دارای شاخصی از نوع شمارش شده و فاقد "مورد" باشد، هشدار دهید.
برای یک یا چند کد نامگذاری شده آن شمارش. (وجود یک "پیش فرض"
برچسب از این هشدار جلوگیری می کند.) برچسب های "case" خارج از محدوده شمارش نیز
هنگام استفاده از این گزینه، هشدارها را تحریک کنید (حتی اگر یک برچسب "پیش فرض" وجود داشته باشد). این
هشدار توسط فعال می شود -دیو.
-Switch-default
هر زمان که عبارت «switch» دارای حالت «پیشفرض» نباشد، هشدار دهید.
-Switch-enum
هر زمان که یک عبارت "switch" دارای شاخصی از نوع شمارش شده و فاقد "مورد" باشد، هشدار دهید.
برای یک یا چند کد نامگذاری شده آن شمارش. برچسب های "مورد" خارج از
محدوده شمارش همچنین هنگام استفاده از این گزینه هشدارهایی را ایجاد می کند. تنها تفاوت
میان -سوئیچ و این گزینه به این صورت است که این گزینه هشداری در مورد حذف شده می دهد
کد شمارش حتی اگر یک برچسب "پیش فرض" وجود داشته باشد.
-سوئیچ-بول
هر زمان که عبارت "switch" دارای شاخصی از نوع بولی باشد، هشدار دهید. ممکن است که
این اخطار را با فرستادن عبارت کنترل کننده به یک نوع دیگر سرکوب کنید
"بول". مثلا:
سوئیچ ((int) (a == 4))
{
...
}
این هشدار به طور پیش فرض برای برنامه های C و C++ فعال است.
-Wsync-nand (فقط C و C++)
هنگامی که توابع داخلی "__sync_fetch_and_nand" و "__sync_nand_and_fetch" هستند، هشدار دهید
استفاده شده. این توابع معنایی را در GCC 4.4 تغییر دادند.
Wtrigraphs
در صورت مواجه شدن با سه نموداری که ممکن است معنای برنامه را تغییر دهد، هشدار دهید
(سه نمودارهای داخل نظرات هشدار داده نمی شوند). این هشدار توسط -دیو.
پارامتر -Wunused-but-set
هر زمان که یک پارامتر تابع به آن اختصاص داده شود، اما در غیر این صورت استفاده نشده است (به غیر از
اعلامیه آن).
برای سرکوب این هشدار از ویژگی "unused" استفاده کنید.
این هشدار نیز توسط -استفاده نشده با -وکسترا.
-متغیر-استفاده نشده-اما-ست
هر زمان که یک متغیر محلی به آن اختصاص داده شود، اما در غیر این صورت استفاده نشده است (به غیر از آن، هشدار دهید
اعلام). این هشدار توسط -دیو.
برای سرکوب این هشدار از ویژگی "unused" استفاده کنید.
این هشدار نیز توسط -استفاده نشده، که توسط فعال می شود -دیو.
-Wunused-function
هر زمان که یک تابع استاتیک اعلام می شود اما تعریف نشده است یا یک تابع غیر خطی است، هشدار می دهد
تابع استفاده نشده است این هشدار توسط -دیو.
Wunused-برچسب
هر زمان که برچسبی اعلام شد اما استفاده نشد هشدار دهید. این هشدار توسط -دیو.
برای سرکوب این هشدار از ویژگی "unused" استفاده کنید.
Wunused-local-typedefs (فقط C، Objective-C، C++ و Objective-C++)
وقتی از typedef تعریف شده محلی در یک تابع استفاده نمی شود هشدار دهید. این هشدار است
فعال شده توسط -دیو.
-پارامتر Wunused
هر زمان که یک پارامتر تابع به غیر از اعلان آن استفاده نشود، هشدار دهید.
برای سرکوب این هشدار از ویژگی "unused" استفاده کنید.
-نتیجه استفاده نشده است
اگر فراخوان دهنده تابعی که با ویژگی "warn_unused_result" علامت گذاری شده است، هشدار ندهید
از مقدار برگشتی آن استفاده نکنید. پیش فرض است استفاده نشده-نتیجه.
-Wunused-متغیر
هر زمان که یک متغیر محلی یا متغیر ثابت غیر ثابت به غیر از آن استفاده نشود، هشدار دهید
اعلامیه آن این هشدار توسط -دیو.
برای سرکوب این هشدار از ویژگی "unused" استفاده کنید.
-ارزش استفاده نشده
هر زمان که عبارتی نتیجه ای را محاسبه می کند که صراحتاً استفاده نمی شود هشدار دهید. سرکوب کردن
این اخطار عبارت استفاده نشده را به "باطل" فرستاد. این شامل یک عبارت است -
عبارت یا سمت چپ عبارت کاما که فاقد عوارض جانبی است.
به عنوان مثال، عبارتی مانند "x[i,j]" باعث هشدار می شود، در حالی که "x[(void)i,j]"
نمی کند
این هشدار توسط -دیو.
-استفاده نشده
همه موارد بالا -استفاده نشده گزینه های ترکیب شده
برای دریافت اخطار در مورد یک پارامتر تابع استفاده نشده، باید یکی را مشخص کنید
-وکسترا -استفاده نشده (توجه داشته باشید که -دیو دلالت دارد -استفاده نشده) یا به طور جداگانه مشخص کنید
-پارامتر Wunused.
-Wunitarized
در صورت استفاده از یک متغیر خودکار بدون مقداردهی اولیه یا در صورت استفاده از متغیر، هشدار دهید
ممکن است با یک تماس "setjmp" clobber شود. در C++، اگر یک مرجع غیر ایستا یا غیر ایستا
عضو ثابت "const" در یک کلاس بدون سازنده ظاهر می شود.
اگر می خواهید در مورد کدی که از مقدار اولیه متغیر 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") اگر نتواند این تابع را ثابت کند
به طور عادی برمی گردد. اگر تابعی شامل بی نهایت نباشد، به طور معمول برمی گردد
حلقه یا بازگشت غیرعادی با پرتاب کردن، صدا زدن "سقط" یا به دام انداختن. این تحلیل
نیاز به گزینه دارد -fipa-pure-const، که به طور پیش فرض در فعال است -O و بالاتر
سطوح بهینه سازی بالاتر دقت تحلیل را بهبود می بخشد.
-Wsuggest-attribute=قالب
-Wmissing-format-attribute
در مورد اشاره گرهای تابعی که ممکن است کاندید ویژگی های "format" باشند، هشدار دهید.
توجه داشته باشید که اینها فقط نامزدهای احتمالی هستند، نه مطلق. GCC این را حدس می زند
نشانگرهای تابع با ویژگی های "format" که در انتساب استفاده می شوند،
دستورات مقداردهی اولیه، ارسال پارامتر یا بازگشت باید دارای یک متناظر باشند
ویژگی "format" در نوع حاصل. یعنی سمت چپ
تخصیص یا مقداردهی اولیه، نوع متغیر پارامتر یا بازگشت
نوع تابع حاوی نیز به ترتیب باید دارای ویژگی "format" باشد
برای جلوگیری از هشدار
GCC همچنین در مورد تعاریف تابعی که ممکن است نامزد "قالب" باشند هشدار می دهد.
ویژگی های. باز هم، اینها فقط نامزدهای احتمالی هستند. شورای همکاری خلیج فارس آن "قالب" را حدس می زند
ویژگی ها ممکن است برای هر تابعی که تابعی را فراخوانی می کند مناسب باشد
"vprintf" یا "vscanf"، اما ممکن است همیشه اینطور نباشد، و برخی از توابع
که ویژگی های "قالب" برای آنها مناسب است ممکن است شناسایی نشود.
پیشنهاد-نهایی-انواع
در مورد انواع با روش های مجازی هشدار دهید که در صورت نوع کد، کیفیت کد بهبود می یابد
با مشخص کننده "نهایی" C++11 یا در صورت امکان در یک اعلان شدند
فضای نام ناشناس این به GCC اجازه می دهد تا به طور تهاجمی تری از چند شکلی مجازی سازی کند
تماس می گیرد. این هشدار با بهینهسازی زمان پیوند مؤثرتر است، جایی که
اطلاعات در مورد گراف سلسله مراتب کلاس کامل تر است.
-پیشنهاد-نهایی-روش
در مورد روشهای مجازی هشدار دهید که در صورت وجود روش، کیفیت کد بهبود مییابد
با مشخص کننده "نهایی" C++11، یا در صورت امکان، نوع آن در اعلام شد
یک فضای نام ناشناس یا با مشخص کننده "نهایی". این هشدار موثرتر است
با بهینه سازی زمان پیوند، جایی که اطلاعات مربوط به نمودار سلسله مراتبی کلاس است
کامل تر توصیه می شود ابتدا پیشنهادات را در نظر بگیرید
پیشنهاد-نهایی-انواع و سپس با حاشیه نویسی های جدید بازسازی کنید.
-Wsuggest-Oride
در مورد توابع مجازی نادیده گرفته شده که با کلمه کلیدی override علامت گذاری نشده اند، هشدار دهید.
-محدوده های جنگی
-Warray-bounds=n
این گزینه فقط زمانی فعال است که -ftree-vrp فعال است (پیش فرض برای -O2 و بالاتر). آی تی
در مورد زیرنویس های آرایه هایی که همیشه خارج از محدوده هستند هشدار می دهد. این هشدار است
فعال شده توسط -دیو.
-Warray-bounds=1
این سطح هشدار است -محدوده های جنگی و توسط -دیو; سطوح بالاتر
نیستند و باید صریحاً درخواست شوند.
-Warray-bounds=2
این سطح هشدار همچنین در مورد دسترسی خارج از محدوده برای آرایه ها در پایان هشدار می دهد
یک ساختار و برای آرایه هایی که از طریق اشاره گرها قابل دسترسی هستند. این سطح هشدار ممکن است یک نشان دهد
تعداد بیشتری از موارد مثبت کاذب و به طور پیش فرض غیرفعال می شود.
-Wbool-مقایسه کنید
هشدار در مورد بیان بولی در مقایسه با یک مقدار صحیح متفاوت از
"درست غلط". به عنوان مثال، مقایسه زیر همیشه نادرست است:
int n = 5؛
...
اگر ((n > 1) == 2) { ... }
این هشدار توسط -دیو.
-Wno-دور انداخته-واجد شرایط (فقط C و Objective-C)
در صورت نادیده گرفتن واجد شرایط نوع در نشانگرها هشدار ندهید. به طور معمول،
کامپایلر هشدار می دهد اگر یک متغیر "const char *" به تابعی که "char" می گیرد ارسال شود
پارامتر *" از این گزینه می توان برای سرکوب چنین هشداری استفاده کرد.
Wno-discarded-array-qualifiers (فقط C و Objective-C)
در صورت وجود واجد شرایط در آرایه هایی که هدف اشاره گر هستند، هشدار ندهید
دور انداخته شد. به طور معمول، کامپایلر هشدار می دهد اگر یک متغیر "const int (*)[]" به
تابعی که یک پارامتر "int (*)[]" می گیرد. از این گزینه می توان برای سرکوب استفاده کرد
چنین هشداری
-انواع اشاره گر-ناسازگار (فقط C و Objective-C)
هنگامی که بین نشانگرهایی که انواع ناسازگار دارند تبدیل وجود دارد هشدار ندهید.
این هشدار برای مواردی است که تحت پوشش نیست - نشانگر Wno، که برای اشاره گر هشدار می دهد
انتقال یا انتساب آرگومان با امضای متفاوت.
-Wno-In-Conversion (فقط C و Objective-C)
در مورد تبدیل عدد صحیح به اشاره گر و اشاره گر به عدد صحیح ناسازگار هشدار ندهید.
این هشدار در مورد تبدیل های ضمنی است. برای تبدیل های صریح هشدارها
-بازیگرها از بین نرفتن به اشاره گر و بدون اشاره گر به غیر بازیگری ممکن است مورد استفاده قرار گیرد
-Wno-div-by-zero
در مورد تقسیم اعداد صحیح کامپایل بر صفر هشدار ندهید. تقسیم ممیز شناور بر
در مورد صفر هشدار داده نمی شود، زیرا می تواند یک راه قانونی برای به دست آوردن بی نهایت و
NaNs.
Wsystem-headers
پیامهای هشدار را برای ساختارهای موجود در فایلهای هدر سیستم چاپ کنید. هشدارها از
هدرهای سیستم معمولاً سرکوب می شوند، با این فرض که معمولاً این کار را نمی کنند
مشکلات واقعی را نشان می دهد و تنها خواندن خروجی کامپایلر را سخت تر می کند. استفاده كردن
این گزینه خط فرمان به شورای همکاری خلیج فارس میگوید که اخطارهایی را از سرصفحههای سیستم صادر کند، انگار که آنها هشدار میدهند
در کد کاربر رخ داده است. با این حال، توجه داشته باشید که با استفاده از -دیو در ارتباط با این گزینه
میکند نه هشدار در مورد پراگماهای ناشناخته در هدرهای سیستم --- برای آن، -Wunknown-pragmas
همچنین باید استفاده شود
-ترامپولین
در مورد ترامپولین های ایجاد شده برای نشانگرهای توابع تو در تو هشدار دهید. ترامپولین یک است
قطعه کوچکی از داده یا کدی که در زمان اجرا روی پشته و هنگام آدرس ایجاد می شود
از یک تابع تو در تو گرفته می شود و برای فراخوانی غیر مستقیم تابع تودرتو استفاده می شود.
برای برخی از اهداف، فقط از داده ها تشکیل شده است و بنابراین نیازی به درمان خاصی ندارد.
اما، برای اکثر اهداف، از کد تشکیل شده است و بنابراین نیاز به پشته دارد
قابل اجرا برای اینکه برنامه به درستی کار کند.
-Wfloat-برابر
در صورت استفاده از مقادیر ممیز شناور در مقایسه برابری هشدار دهید.
ایده پشت این کار این است که گاهی اوقات (برای برنامه نویس) راحت است
مقادیر ممیز شناور را تقریبی به اعداد واقعی بی نهایت دقیق در نظر بگیرید.
اگر این کار را انجام می دهید، پس باید محاسبه کنید (با تجزیه و تحلیل کد، یا در برخی موارد
به روش دیگر) حداکثر یا حداکثر خطای احتمالی که محاسبات معرفی می کند، و
هنگام انجام مقایسه (و هنگام تولید خروجی، اما این یک
مشکل متفاوت). به ویژه، به جای آزمایش برابری، باید بررسی کنید
برای دیدن اینکه آیا دو مقدار دارای محدوده هایی هستند که همپوشانی دارند یا خیر. و این کار با
عملگرهای رابطه ای، بنابراین مقایسه برابری احتمالاً اشتباه است.
-غیر سنتی (فقط C و Objective-C)
در مورد ساختارهای خاصی که در سنتی و ISO C رفتار متفاوتی دارند هشدار دهید
در مورد ساختارهای ISO C که معادل C سنتی ندارند و/یا مشکل ساز هستند هشدار دهید
سازه هایی که باید از آنها اجتناب کرد.
* پارامترهای کلان که در لفظ رشته در بدنه ماکرو ظاهر می شوند. که در
جایگزینی ماکرو سنتی C در لفظ رشته ای انجام می شود، اما در ISO C
انجام نمیدهد.
* در C سنتی، برخی از دستورالعمل های پیش پردازنده وجود نداشت. سنتی
پیش پردازشگرها تنها در صورتی خط را به عنوان یک دستورالعمل در نظر می گیرند # در ستون ظاهر شد
1 در خط. از این رو -غیر سنتی در مورد دستورالعمل هایی هشدار می دهد که C سنتی
می فهمد اما نادیده می گیرد زیرا # به عنوان کاراکتر اول ظاهر نمی شود
خط همچنین به شما پیشنهاد میکند دستورالعملهایی مانند "#pragma" را که توسط آنها قابل درک نیست پنهان کنید
C سنتی با تورفتگی آنها. برخی از پیاده سازی های سنتی این کار را نمی کنند
"#elif" را تشخیص دهید، بنابراین این گزینه پیشنهاد می کند که به طور کامل از آن اجتناب کنید.
* یک ماکرو تابع مانند که بدون آرگومان ظاهر می شود.
* عملگر 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
-وندف
اگر یک شناسه تعریف نشده در دستورالعمل "#if" ارزیابی شود، هشدار دهید.
Wno-endif-labels
هر زمان که یک "#else" یا "#endif" با متن دنبال می شود هشدار ندهید.
-سایه
هر زمان که یک متغیر محلی یا اعلان نوع متغیر دیگری را تحت الشعاع قرار داد، هشدار دهید،
پارامتر، نوع، عضو کلاس (در C++)، یا متغیر نمونه (در Objective-C) یا
هر زمان که یک تابع داخلی در سایه قرار می گیرد. توجه داشته باشید که در C++، کامپایلر هشدار می دهد اگر a
متغیر محلی یک typedef صریح را سایه میزند، اما اگر یک struct/class/enum را سایه میاندازد، نه.
-Wno-shadow-ivar (فقط Objective-C)
هر زمان که یک متغیر محلی روی یک متغیر نمونه در Objective-C سایه می اندازد هشدار ندهید
روش.
-بزرگتر از=لن
هر زمان که یک شی بزرگتر از لن بایت تعریف شده است.
-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
اخطار دهید اگر یک مقایسه همیشه درست است یا همیشه نادرست است به دلیل محدوده محدود
نوع داده، اما برای عبارات ثابت هشدار ندهید. به عنوان مثال، اگر علامتی ندارد، هشدار دهید
متغیر در برابر صفر با "<" یا ">=" مقایسه می شود. این هشدار نیز توسط
-وکسترا.
-Wbad-function-cast (فقط C و Objective-C)
هنگامی که یک فراخوانی تابع به یک نوع غیر منطبق ارسال می شود، هشدار دهید. به عنوان مثال، در صورت تماس، هشدار دهید
به تابعی که یک نوع عدد صحیح را برمی گرداند به یک نوع اشاره گر فرستاده می شود.
-Wc90-c99-compat (فقط C و Objective-C)
در مورد ویژگی هایی که در ISO C90 وجود ندارند، اما در ISO C99 وجود دارند، هشدار دهید. برای مثال،
هشدار در مورد استفاده از آرایه های با طول متغیر، نوع "long long"، نوع "bool"، ترکیبی
literals، مقداردهی اولیه تعیین شده، و غیره. این گزینه مستقل از
حالت استاندارد هشدارها در عبارت «__extension__» غیرفعال هستند.
-Wc99-c11-compat (فقط C و Objective-C)
در مورد ویژگی هایی که در ISO C99 وجود ندارند، اما در ISO C11 وجود دارند، هشدار دهید. برای مثال،
هشدار در مورد استفاده از ساختارها و اتحادیه های ناشناس، واجد شرایط نوع "_Atomic"،
مشخصکننده کلاس ذخیرهسازی «_Thread_local»، مشخصکننده «_Alignas»، عملگر «Alignof»،
کلمه کلیدی "_Generic" و غیره. این گزینه مستقل از حالت استاندارد است.
هشدارها در عبارت «__extension__» غیرفعال هستند.
-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 هستند. این هشدار
روشن - تنگ کردن و توسط -دیو.
-Wc++14-compat (فقط C++ و Objective-C++)
در مورد ساختارهای C++ که معنای آنها بین ISO C++ 2011 و ISO C++ 2014 متفاوت است، هشدار دهید.
این هشدار توسط -دیو.
-استاک
هر زمان که یک اشاره گر فرستاده می شود، هشدار دهید تا یک واجد شرایط نوع از نوع هدف حذف شود.
به عنوان مثال، اگر یک "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" یا "vfork" تغییر کنند. این هشدار است
همچنین توسط -وکسترا.
بدون شرط پشتیبانی می شود (فقط C++ و Objective-C++)
هشدار برای ساختارهای با پشتیبانی شرطی (C++11 [intro.defs]).
-تبدیل
برای تبدیلهای ضمنی که ممکن است یک مقدار را تغییر دهند هشدار دهید. این شامل تبدیل ها می شود
بین واقعی و صحیح، مانند "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 را تسهیل کنید.
-تاریخ-زمان
هنگامی که ماکروهای "__TIME__"، "__DATE__" یا "__TIMESTAMP__" با آنها مواجه می شوند، هشدار می دهند.
ممکن است از کامپایلهای تکثیرپذیر یکسان به صورت بیتی جلوگیری کند.
حذف - ناقص (فقط C++ و Objective-C++)
هنگام حذف یک اشاره گر به نوع ناقص هشدار دهید، که ممکن است باعث رفتار نامشخص در آن شود
زمان اجرا این هشدار به طور پیش فرض فعال است.
بازیگران بی فایده (فقط C++ و Objective-C++)
هنگامی که یک عبارت به نوع خودش ریخته می شود هشدار دهید.
-جسم خیس
اگر بدنه خالی در عبارت "if"، "else" یا "do while" وجود دارد، هشدار دهید. این هشدار
نیز توسط -وکسترا.
-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 نیز این گزینه توسط -تبدیل.
-Wfloat-تبدیل
برای تبدیلهای ضمنی که دقت یک مقدار واقعی را کاهش میدهند، هشدار دهید. این
شامل تبدیل از واقعی به عدد صحیح، و از دقت بالاتر واقعی به کمتر است
مقادیر واقعی دقیق این گزینه نیز توسط -تبدیل.
-Wsized-تخصیص (فقط C++ و Objective-C++)
در مورد تعریف تابع توزیع بدون اندازه هشدار دهید
عملگر void delete (void *) noexcept;
عملگر void delete[] (void *) noexcept;
بدون تعریف تابع توزیع اندازه مربوطه
عملگر void delete (void *, std::size_t) noexcept;
عملگر void delete[] (void *, std::size_t) noexcept;
یا برعکس. فعال شده توسط -وکسترا همراه با -fsized-تخصیص.
-Wsizeof-pointer-memaccess
برای پارامترهای طول مشکوک به رشته ها و توابع داخلی حافظه هشدار دهید
اگر آرگومان از "sizeof" استفاده کند. این هشدار به عنوان مثال در مورد "memset (ptr, 0, sizeof
(ptr));" اگر "ptr" یک آرایه نیست، بلکه یک اشاره گر است و یک راه حل ممکن را پیشنهاد می کند، یا
در مورد "memcpy (&foo، ptr، sizeof (&foo));". این هشدار توسط -دیو.
-Wsizeof-Array-Argument
هنگامی که عملگر "sizeof" به پارامتری که به عنوان یک آرایه اعلام شده است اعمال می شود، هشدار دهید
در یک تعریف تابع این هشدار به طور پیش فرض برای برنامه های C و C++ فعال است.
-Wmemset-transposed-args
برای فراخوانی های مشکوک به تابع داخلی "memset" هشدار دهید، اگر آرگومان دوم باشد
صفر نیست و آرگومان سوم صفر است. این به عنوان مثال @ در مورد "memset (buf, sizeof
buf, 0)" که به احتمال زیاد "memset (buf, 0, sizeof buf)" به جای آن منظور شده است.
تشخیص تنها در صورتی صادر می شود که آرگومان سوم به معنای واقعی کلمه صفر باشد. اگر مقداری باشد
عبارتی که به صفر تا شده باشد، یک قالب صفر تا فلان نوع، و غیره، بسیار کمتر است
احتمالاً کاربر به اشتباه آرگومان ها را رد و بدل کرده است و هیچ هشداری صادر نمی شود.
این هشدار توسط -دیو.
-وادرس
در مورد استفاده های مشکوک از آدرس های حافظه هشدار دهید. اینها شامل استفاده از آدرس a
تابع در یک عبارت شرطی، مانند "void func(void); if (func)" و
مقایسه با آدرس حافظه یک رشته تحت اللفظی، مانند "if (x == "abc")".
چنین استفاده هایی معمولاً نشان دهنده یک خطای برنامه نویس است: آدرس یک تابع همیشه
به درستی ارزیابی می شود، بنابراین استفاده از آنها در یک شرطی معمولاً نشان می دهد که برنامه نویس
پرانتزها را در فراخوانی تابع فراموش کرد. و مقایسه در برابر لفظ رشته
منجر به رفتار نامشخص می شوند و در C قابل حمل نیستند، بنابراین معمولاً نشان می دهند
که برنامه نویس قصد استفاده از "strcmp" را داشته است. این هشدار توسط -دیو.
Wlogical-op
در مورد استفاده مشکوک از عملگرهای منطقی در عبارات هشدار دهید. این شامل استفاده از
عملگرهای منطقی در زمینه هایی که احتمالاً یک عملگر بیت عاقلانه انتظار می رود.
-Wlogical-not-پرانتز
هشدار در مورد منطقی که در عملوند سمت چپ مقایسه استفاده نشده است. این
اگر عملوند RHS از نوع بولی باشد، گزینه هشدار نمی دهد. هدف آن این است که
شناسایی کدهای مشکوک مانند زیر:
int a؛
...
اگر (!a > 1) { ... }
می توان با قرار دادن LHS در پرانتز هشدار را سرکوب کرد:
اگر ((!a) > 1) { ... }
این هشدار توسط -دیو.
-تجمیع-بازگشت
در صورت تعریف یا فراخوانی توابعی که ساختارها یا اتحادیه ها را برمی گرداند هشدار دهید. (که در
زبانهایی که میتوانید آرایهای را برگردانید، این نیز یک هشدار ایجاد میکند.)
-بهینه سازی های حلقه-تهاجمی-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 };
در C++ این گزینه در مورد مقدار اولیه اولیه خالی { } نیز هشدار نمی دهد، به عنوان مثال:
ساختار s { int f, g, h; };
sx = {};
این هشدار درج شده است -وکسترا. برای بدست آوردن دیگری -وکسترا اخطار بدون این،
استفاده کنید -وکسترا -Wno-missing-field-initializers.
-Wno-multichar
در صورت ثابت بودن چند نویسه هشدار ندهید ("FOOF") استفاده می شود. معمولاً الف را نشان می دهند
اشتباه تایپی در کد کاربر، زیرا دارای مقادیر تعریف شده توسط پیاده سازی است و نباید باشد
در کدهای قابل حمل استفاده می شود.
- غیر عادی شده[=<هیچ|id|NFC|nfkc>]
در 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 هشدار برای این شخصیت ها را سرکوب می کند. امید است که آینده
نسخه های استانداردهای مربوطه این را اصلاح می کنند، به همین دلیل است که این گزینه درست نیست
پیشفرض.
می توانید با نوشتن اخطار را برای همه کاراکترها خاموش کنید -غیر عادی = هیچکدام or
-بدون نرمال. فقط در صورتی باید این کار را انجام دهید که از نرمال سازی دیگری استفاده می کنید
طرح (مانند "D")، زیرا در غیر این صورت می توانید به راحتی باگ هایی ایجاد کنید که به معنای واقعی کلمه هستند
غیر ممکن برای دیدن
برخی از کاراکترها در ISO 10646 معانی متمایزی دارند اما در برخی فونت ها یکسان به نظر می رسند
یا متدولوژی های نمایش، به خصوص زمانی که قالب بندی اعمال شده است. برای مثال
"\u207F"، "SUPERSCRIPT LATIN SMALL LETTER N"، درست مانند یک "n" معمولی نمایش داده می شود که
در یک بالانویس قرار داده شده است. ISO 10646 تعریف می کند NFKC طرح عادی سازی به
همه اینها را نیز به یک فرم استاندارد تبدیل کنید و اگر کد شما وارد نشده باشد، GCC هشدار می دهد
اگر از NFKC استفاده می کنید -Wnormalized=nfkc. این هشدار با هشدار در مورد هر یک قابل مقایسه است
شناسه ای که حاوی حرف O است زیرا ممکن است با رقم 0 اشتباه گرفته شود،
و بنابراین پیشفرض نیست، اما ممکن است به عنوان یک قرارداد کدگذاری محلی مفید باشد
محیط برنامه نویسی را نمی توان برای نمایش مشخص این کاراکترها اصلاح کرد.
-منسوخ شده است
در مورد استفاده از ویژگی های منسوخ هشدار ندهید.
-Wno-منسوخ-اعلامیه
در مورد استفاده از توابع، متغیرها و انواع علامت گذاری شده به عنوان منسوخ شده هشدار ندهید
با استفاده از ویژگی "منسوخ شده".
-سرریز
در مورد سرریز زمان کامپایل در عبارات ثابت هشدار ندهید.
-wno-odr
در مورد نقض قوانین One Definition در طول بهینه سازی زمان پیوند هشدار دهید. نیاز دارد
-flto-odr-نوع-ادغام فعال شود. به طور پیش فرض فعال است.
-Wopenmp-simd
اگر مدل هزینه بردارساز OpenMP یا دستورالعمل simd Cilk Plus را لغو کند، هشدار دهید
توسط کاربر تنظیم شده است در -fsimd-cost-model=نامحدود گزینه را می توان برای کاهش هزینه استفاده کرد
مدل.
-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++)
اخطارها را از اعمال ماکرو "offsetof" به یک نوع غیر POD سرکوب کنید. مطابق با
استاندارد ISO C++ 2014، اعمال "offsetof" برای یک نوع طرح بندی غیر استاندارد
تعریف نشده با این حال، در پیاده سازی های موجود C++، "offsetof" معمولاً ارائه می دهد
نتایج معنی دار این پرچم برای کاربرانی است که از نوشتن آگاه هستند
کد غیرقابل حمل و کسانی که عمداً اخطار مربوط به آن را نادیده گرفته اند.
ممکن است محدودیتهای "offsetof" در نسخه بعدی استاندارد C++ کاهش یابد.
-بازیگرها از بین نرفتن به اشاره گر
اخطارها را از کست به نوع اشاره گر یک عدد صحیح با اندازه متفاوت سرکوب کنید. که در
C++، ارسال به یک نوع اشاره گر با اندازه کوچکتر یک خطا است. بازیگران زمستان به اشاره گر is
به طور پیش فرض فعال است
بدون اشاره گر به غیر بازیگری (فقط C و Objective-C)
اخطارهای ارسالی از یک اشاره گر به یک نوع عدد صحیح با اندازه متفاوت را سرکوب کنید.
-Winvalid-PCH
اگر سرصفحه ای از پیش کامپایل شده در مسیر جستجو یافت شد اما نمی توان از آن استفاده کرد، هشدار دهید.
-طولانی طولانی
در صورت استفاده از نوع "long long" هشدار دهید. این توسط هر دو فعال می شود -پدانتیک or
-غیر سنتی در حالت های ISO C90 و C++98. برای ممانعت از پیام های هشدار، استفاده کنید
-Wno-long-long.
ماکروهای Wvariadic
در صورت استفاده از ماکروهای متغیر در حالت ISO C90، یا اگر نحو جایگزین گنو
در حالت ISO C99 استفاده می شود. این توسط هر دو فعال می شود -پدانتیک or -غیر سنتی. به
پیام های هشدار را مهار کنید، استفاده کنید 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-محافظ
این گزینه فقط زمانی فعال است که محافظ چوب فعال است. در مورد عملکردها هشدار می دهد
که در برابر خرد شدن پشته محافظت نمی شوند.
-طبقه های تار
در مورد ثابت های رشته ای که بیشتر از طول "حداقل حداکثر" هستند هشدار دهید
در استاندارد C مشخص شده است. کامپایلرهای مدرن معمولاً ثابت های رشته ای را مجاز می دانند
بسیار طولانی تر از حداقل حد استاندارد هستند، اما برنامه های بسیار قابل حمل باید
از استفاده از رشته های بلندتر خودداری کنید.
محدودیت اعمال می شود بعد از الحاق رشته ثابت، و دنباله را به حساب نمی آورد
NUL. در C90، محدودیت 509 کاراکتر بود. در C99، به 4095 افزایش یافت. C++98 این کار را انجام می دهد
ماکزیمم حداقل هنجاری را مشخص نمی کنیم، بنابراین رشته های طولی را در آن تشخیص نمی دهیم
++ C
این گزینه توسط -پدانتیک، و می توان با آن غیر فعال کرد
رشته های بدون طول.
-ثابت-شناور-بدون پسوند (فقط C و Objective-C)
برای هر ثابت شناوری که پسوند ندارد، هشدار صادر کنید. هنگام استفاده
با Wsystem-headers در مورد چنین ثابت هایی در فایل های هدر سیستم هشدار می دهد.
این می تواند هنگام تهیه کد برای استفاده با پراگما "FLOAT_CONST_DECIMAL64" مفید باشد.
از پسوند ممیز شناور اعشاری تا C99.
-Wno-Designated-Init (فقط C و Objective-C)
هنگامی که از یک اولیه ساز موقعیتی برای مقداردهی اولیه ساختاری استفاده می شود، هشدارها را سرکوب کنید
با ویژگی "designated_init" علامت گذاری شده است.
گزینه برای اشکال زدایی شما برنامه 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 را ایجاد کنید.
-ggnu-pubnames
ایجاد بخشهای .debug_pubnames و .debug_pubtypes در قالبی مناسب برای
تبدیل به شاخص GDB این گزینه فقط با پیوند دهنده ای که می تواند مفید است
نسخه 7 شاخص GDB را تولید کنید.
-gstabs
اطلاعات اشکال زدایی را در قالب stabs (در صورت پشتیبانی) بدون GDB تولید کنید
پسوندها این فرمتی است که توسط DBX در اکثر سیستم های BSD استفاده می شود. در MIPS، آلفا و
System V Release 4 این گزینه خروجی اشکال زدایی stabs تولید می کند که اینطور نیست
توسط DBX یا SDB قابل درک است. در سیستم های System V Release 4 این گزینه به GNU نیاز دارد
مونتاژ کننده
-symbols-feliminate-unused-debug-symbols
اطلاعات اشکال زدایی را در قالب stabs (در صورت پشتیبانی) فقط برای نمادها تولید کنید
که در واقع استفاده می شوند.
-femit-class-debug-always
به جای انتشار اطلاعات اشکال زدایی برای کلاس C++ تنها در یک فایل شی،
آن را در تمام فایل های شی با استفاده از کلاس منتشر کنید. این گزینه باید فقط با استفاده شود
اشکال زدایی که نمی توانند روشی را که GCC معمولاً اطلاعات اشکال زدایی را منتشر می کند کنترل کنند
برای کلاس ها زیرا استفاده از این گزینه اندازه اطلاعات اشکال زدایی را افزایش می دهد
به اندازه ضریب دو
-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 یا 5 باشد. نسخه پیش فرض برای اکثر اهداف 4 است. DWARF
نسخه 5 فقط آزمایشی است.
توجه داشته باشید که با 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 جدید نسبت به انتخاب شده با آن
-کوتوله-نسخه.
-gz[=نوع]
در صورت پشتیبانی، بخش های اشکال زدایی فشرده را با فرمت DWARF تولید کنید. اگر نوع is
داده نشده است، نوع پیش فرض بستگی به قابلیت های اسمبلر و لینکر دارد
استفاده شده. نوع ممکن است یکی از هیچ (بخش های اشکال زدایی را فشرده نکنید)، زلیب (از zlib استفاده کنید
فشرده سازی در قالب ELF gABI)، یا Zlib-Gnu (از فشرده سازی zlib در گنو سنتی استفاده کنید
قالب). اگر پیوند دهنده از نوشتن بخش های اشکال زدایی فشرده پشتیبانی نمی کند، این گزینه
رد می شود. در غیر این صورت، اگر اسمبلر از آنها پشتیبانی نمی کند، -gz بی صدا است
هنگام تولید فایل های شی نادیده گرفته می شود.
-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، آشکارساز سریع خطای حافظه را فعال کنید. دستورالعمل های دسترسی به حافظه هستند
ابزاری برای شناسایی اشکالات خارج از محدوده و استفاده پس از رایگان. دیدن
<https://github.com/google/sanitizers/wiki/AddressSanitizer> برای جزئیات بیشتر در
رفتار زمان اجرا را می توان با استفاده از ASAN_OPTIONS متغیر محیطی. چه زمانی
روی "help=1" تنظیم کنید، گزینه های موجود در هنگام راه اندازی ابزار نشان داده می شوند
برنامه دیدن
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> برای یک
لیست گزینه های پشتیبانی شده
-fsanitize=آدرس هسته
AddressSanitizer را برای هسته لینوکس فعال کنید. دیدنhttps://github.com/google/kasan/wiki>
برای جزئیات بیشتر.
-fsanitize=نخ
ThreadSanitizer، آشکارساز مسابقه سریع داده را فعال کنید. دستورالعمل های دسترسی به حافظه هستند
ابزاری برای شناسایی اشکالات مسابقه داده. دیدن
<https://github.com/google/sanitizers/wiki#threadsanitizer> برای جزئیات بیشتر اجرا-
رفتار زمانی را می توان با استفاده از TSAN_OPTIONS متغیر محیطی؛ دیدن
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> برای لیستی از
گزینه های پشتیبانی شده
-fsanitize=نشت
LeakSanitizer، یک آشکارساز نشت حافظه را فعال کنید. این گزینه فقط برای پیوند دادن اهمیت دارد
فایل های اجرایی و اگر هیچ کدام -fsanitize=آدرس نه -fsanitize=نخ استفاده می شود. در آن
در صورتی که فایل اجرایی با کتابخانه ای مرتبط است که "malloc" و موارد دیگر را لغو می کند
توابع تخصیص دهنده دیدن
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> برای بیشتر
جزئیات. رفتار زمان اجرا را می توان با استفاده از LSAN_OPTIONS محیط
متغیر.
-fsanitize=تعریف نشده
UndefinedBehaviorSanitizer، یک آشکارساز رفتار تعریف نشده سریع را فعال کنید. مختلف
محاسبات برای تشخیص رفتار نامشخص در زمان اجرا به کار می روند. جاری
گزینه های فرعی عبارتند از:
-fsanitize = تغییر
این گزینه بررسی اینکه نتیجه عملیات شیفت نیست را فعال می کند
تعریف نشده توجه داشته باشید که آنچه دقیقاً تعریف نشده در نظر گرفته می شود کمی متفاوت است
بین C و C++ و همچنین بین ISO C90 و C99 و غیره.
-fsanitize=عدد صحیح تقسیم بر صفر
تقسیم عدد صحیح بر صفر و همچنین تقسیم "INT_MIN / -1" را تشخیص دهید.
-fsanitize=دست نیافتنی
با این گزینه، کامپایلر فراخوانی "__builtin_unreachable" را به یک تبدیل می کند
به جای آن پیام تشخیصی تماس بگیرید. هنگام رسیدن به تماس "__builtin_unreachable"،
رفتار تعریف نشده است
-fsanitize=vla-bound
این گزینه به کامپایلر دستور می دهد که اندازه یک طول متغیر را بررسی کند
آرایه مثبت است
-fsanitize=null
این گزینه بررسی اشاره گر را فعال می کند. به ویژه، برنامه ساخته شده با
این گزینه روشن شده زمانی که سعی می کند ارجاع a را لغو کند، پیغام خطا صادر می کند
اشاره گر NULL، یا اگر یک مرجع (احتمالاً یک مرجع rvalue) به یک NULL محدود شده باشد
اشاره گر، یا اگر یک متد بر روی یک شی که توسط یک اشاره گر NULL اشاره شده است فراخوانی شود.
-fsanitize=بازگشت
این گزینه بررسی بیانیه بازگشت را فعال می کند. برنامه های ساخته شده با این گزینه
هنگامی که یک تابع غیر باطل به پایان می رسد، یک پیام خطا صادر می کند
بدون برگرداندن مقدار واقعی به آن رسیده است. این گزینه فقط در C++ کار می کند.
-fsanitize=signed-integer-overflow
این گزینه بررسی سرریز اعداد صحیح امضا شده را فعال می کند. ما بررسی می کنیم که نتیجه از
"+"، "*"، و "-" یکپارچه و باینری در علامت سرریز نمی شود
حسابی توجه داشته باشید، قوانین ارتقاء عدد صحیح باید در نظر گرفته شود. به این معنا که،
موارد زیر سرریز نیست:
امضا شده char a = SCHAR_MAX;
a++;
-fsanitize=محدوده
این گزینه ابزار دقیق محدوده های آرایه را فعال می کند. مختلف خارج از محدوده
دسترسی ها شناسایی می شوند. اعضای آرایه انعطاف پذیر، آرایه های عضو آرایه منعطف،
و مقداردهی اولیه متغیرها با ذخیرهسازی استاتیک، ابزار دقیقی ندارند.
-fsanitize=تراز کردن
این گزینه بررسی ترازبندی نشانگرها را در صورت عدم ارجاع آنها فعال می کند.
یا زمانی که یک مرجع به هدف به اندازه کافی تراز نشده است، یا زمانی که یک روش یا
سازنده در شیئی که به اندازه کافی تراز نشده است فراخوانی می شود.
-fsanitize=ابژه-اندازه
این گزینه ابزار دقیق مراجع حافظه را با استفاده از
تابع "__builtin_object_size". دسترسی های اشاره گر خارج از محدوده مختلف هستند
شناسایی شده.
-fsanitize= شناور-تقسیم-بر-صفر
تقسیم ممیز شناور بر صفر را تشخیص دهید. برخلاف سایر گزینه های مشابه،
-fsanitize= شناور-تقسیم-بر-صفر توسط فعال نمی شود -fsanitize=تعریف نشده، از آنجا که
تقسیم ممیز شناور بر صفر می تواند یک راه قانونی برای به دست آوردن بی نهایت ها باشد
و NaNs
-fsanitize= شناور- ریخته گری- سرریز
این گزینه بررسی تبدیل نوع ممیز شناور به عدد صحیح را فعال می کند. بررسی می کنیم
که نتیجه تبدیل سرریز نشود. بر خلاف سایر موارد مشابه
گزینه ها، -fsanitize= شناور- ریخته گری- سرریز توسط فعال نمی شود -fsanitize=تعریف نشده.
این گزینه با فعال بودن استثناهای "FE_INVALID" به خوبی کار نمی کند.
-fsanitize=nonnull-attribute
این گزینه ابزار دقیق تماس ها را فعال می کند و بررسی می کند که آیا مقادیر تهی نیستند
به آرگومان هایی که توسط تابع "nonnull" به عنوان نیاز به مقدار غیر تهی علامت گذاری شده اند ارسال می شود
ویژگی.
-fsanitize=مشخصه-nonnull را برمی گرداند
این گزینه ابزار دقیق عبارات بازگشتی را در توابعی که با علامت گذاری شده اند فعال می کند
ویژگی تابع "returns_nonnull"، برای تشخیص بازگشت مقادیر تهی از این ویژگی
توابع.
-fsanitize=bool
این گزینه ابزار دقیق بارهای bool را فعال می کند. اگر مقداری غیر از 0/1 باشد
بارگذاری می شود، یک خطای زمان اجرا صادر می شود.
-fsanitize=enum
این گزینه ابزار دقیق بارها را از نوع enum فعال می کند. اگر یک مقدار
خارج از محدوده مقادیر برای نوع enum بارگذاری می شود، خطای زمان اجرا است
صادر شده.
-fsanitize=vptr
این گزینه ابزار دقیق تماس های تابع عضو C++، دسترسی اعضا را فعال می کند
و برخی از تبدیل بین اشاره گر به پایه و کلاس های مشتق شده، برای تایید
شی ارجاع شده دارای نوع دینامیکی صحیح است.
در حالی که -FTRAPV باعث می شود تله هایی برای سرریزهای امضا شده منتشر شود، -fsanitize=تعریف نشده
یک پیام تشخیصی می دهد. این در حال حاضر فقط برای خانواده زبان های C کار می کند.
-fno-sanitize=همه
این گزینه همه ضدعفونیکنندههای فعال قبلی را غیرفعال میکند. -fsanitize=همه نیست
مجاز است، زیرا برخی از مواد ضدعفونی کننده را نمی توان با هم استفاده کرد.
-fasan-shadow-offset=عدد
این گزینه GCC را مجبور میکند تا در بررسیهای AddressSanitizer از افست سایه سفارشی استفاده کند. این است
برای آزمایش طرحبندیهای حافظه سایهای مختلف در Kernel مفید است
AddressSanitizer.
-فسانیزه کردن-بازیابی[=انتخاب می کند]
-fsanitize-recover= حالت بازیابی خطا را برای ضدعفونیکنندههای ذکر شده در کاما- کنترل میکند.
لیست جدا شده از انتخاب می کند. فعال کردن این گزینه برای یک جزء ضدعفونی کننده باعث می شود
سعی کنید برنامه را طوری اجرا کنید که گویی هیچ خطایی رخ نداده است. این به معنای چندگانه است
خطاهای زمان اجرا را می توان در یک برنامه اجرا کرد و کد خروج از آن را گزارش کرد
برنامه ممکن است نشان دهنده موفقیت باشد حتی زمانی که خطا گزارش شده باشد. در
-fno-sanitize-recover= می توان از گزینه برای تغییر این رفتار استفاده کرد: فقط اولین
خطای شناسایی شده گزارش می شود و برنامه با یک کد خروج غیر صفر خارج می شود.
در حال حاضر این ویژگی فقط برای -fsanitize=تعریف نشده (و زیرگزینه های آن به جز
برای -fsanitize=دست نیافتنی و -fsanitize=بازگشت), -fsanitize= شناور- ریخته گری- سرریز,
-fsanitize= شناور-تقسیم-بر-صفر و -fsanitize=آدرس هسته. برای این ضدعفونی کننده ها
بازیابی خطا به طور پیش فرض روشن است. -fsanitize-recover=همه و
-fno-sanitize-recover=همه همچنین پذیرفته شده است، اولی امکان بهبود را برای همه فراهم می کند
ضدعفونیکنندههایی که از آن پشتیبانی میکنند، دومی بازیابی را برای همه ضدعفونیکنندههایی که از آن پشتیبانی میکنند غیرفعال میکند
آن را حمایت کن.
نحو بدون صریح انتخاب می کند پارامتر منسوخ شده است. معادل است با
-fsanitize-recover = تعریف نشده ، شناور-ریخته شده ، جریان شناور ، شناور توسط صفر
به طور مشابه -fno-sanitize-recover برابر است با
-fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-zero
-fsanitize-undefined-trap-on-error
La -fsanitize-undefined-trap-on-error گزینه به کامپایلر دستور گزارش می دهد
رفتار تعریف نشده با استفاده از "__builtin_trap" به جای یک روال کتابخانه "libubsan".
مزیت این کار این است که کتابخانه "libubsan" مورد نیاز نیست و پیوند داده نمی شود
در، بنابراین حتی در محیط های مستقل نیز قابل استفاده است.
-fcheck-pointer-bounds
ابزار دقیق Pointer Bounds Checker را فعال کنید. هر مرجع حافظه دارای ابزار دقیق است
با بررسی نشانگر مورد استفاده برای دسترسی به حافظه در برابر مرزهای مرتبط با آن
اشاره گر
در حال حاضر تنها یک پیاده سازی برای Intel MPX موجود است، بنابراین x86 target و
-mmpx برای فعال کردن این ویژگی مورد نیاز است. ابزار دقیق مبتنی بر MPX نیاز به یک
کتابخانه زمان اجرا برای فعال کردن MPX در سخت افزار و کنترل سیگنال های نقض مرزها. توسط
پیش فرض چه زمانی -fcheck-pointer-bounds و -mmpx از گزینه ها برای پیوند دادن یک برنامه استفاده می شود
درایور GCC در برابر libmpx کتابخانه زمان اجرا و libmpxwrappers کتابخانه آی تی
همچنین '-z bndplt' را به یک پیوند دهنده در صورتی که از این گزینه پشتیبانی می کند (که علامت زده شده است) ارسال می کند
در پیکربندی libmpx). توجه داشته باشید که نسخه های قدیمی لینکر ممکن است گزینه را نادیده بگیرند. طلا
لینکر از گزینه '-z bndplt' پشتیبانی نمی کند. بدون پشتیبانی از '-z bndplt' در لینکر همه
تماسهای کتابخانههای پویا محدودیتهای عبور شده را از دست میدهند و سطح حفاظت کلی را کاهش میدهند. این است
استفاده از لینکر با پشتیبانی از '-z bndplt' بسیار توصیه می شود. در صورتی که چنین پیوند دهنده ای نباشد
در دسترس است توصیه می شود همیشه استفاده کنید static-libmpxwrappers برای محافظت بهتر
سطح یا استفاده -استاتیک برای جلوگیری از تماس های خارجی به کتابخانه های پویا. MPX-
ابزار دقیق ممکن است برای اشکال زدایی استفاده شود و همچنین ممکن است در تولید گنجانده شود
کد برای افزایش امنیت برنامه بسته به استفاده، ممکن است متفاوت باشد
الزامات برای کتابخانه زمان اجرا نسخه فعلی کتابخانه MPX زمان اجرا
بیشتر برای استفاده به عنوان یک ابزار اشکال زدایی جهت گیری شده است. استفاده از کتابخانه زمان اجرا MPX دلالت بر آن دارد
-lpthread. همچنین ببینید -static-libmpx. رفتار کتابخانه زمان اجرا می تواند تحت تأثیر قرار گیرد
با استفاده از مختلف CHKP_RT_* متغیرهای محیطی. دیدن
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> برای بیشتر
جزئیات.
ابزار دقیق تولید شده ممکن است توسط انواع مختلفی کنترل شود -fchkp-* گزینه ها و توسط
ویژگی فیلد ساختار "bnd_variable_size" و "bnd_legacy" و "bnd_instrument"
ویژگی های تابع GCC همچنین تعدادی عملکرد داخلی را برای کنترل فراهم می کند
جستجوگر مرزهای اشاره گر.
-fchkp-check-incomplete-type
برای متغیرهایی با نوع ناقص، بررسی کران اشاره گر ایجاد کنید. فعال شده توسط
به طور پیش فرض
-fchkp-محدوده های باریک
محدوده های استفاده شده توسط Pointer Bounds Checker برای نشانگرها به فیلدهای شی را کنترل می کند. اگر
باریک کردن فعال است سپس از کران های فیلد استفاده می شود. در غیر این صورت از کران شی استفاده می شود.
همچنین مشاهده کنید -fchkp-arrow-to-innermost-array و -fchkp-first-field-has-own-bounds.
به طور پیش فرض فعال شده است.
-fchkp-first-field-has-own-bounds
جستجوگر مرزهای اشاره گر را مجبور می کند تا از کران های باریک شده برای آدرس اول استفاده کند
میدان در ساختار به طور پیش فرض یک اشاره گر به فیلد اول دارای همان محدوده است
به عنوان یک اشاره گر به کل ساختار.
-fchkp-arrow-to-innermost-array
جستجوگر مرزهای اشاره گر را مجبور به استفاده از مرزهای داخلی ترین آرایه ها در صورت تو در تو می کند.
دسترسی به آرایه استاتیک به طور پیشفرض این گزینه غیرفعال است و مرزهای بیرونیترین آن را محدود میکند
آرایه استفاده می شود.
-fchkp-بهینه سازی
بهینه سازی Pointer Bounds Checker را فعال می کند. به طور پیش فرض در بهینه سازی فعال می شود
سطح -O, -O2, -O3.
-fchkp-use-fast-string-functions
استفاده از نسخه های *_nobnd توابع رشته (بدون کپی کردن کران ها) توسط اشاره گر را فعال می کند.
جستجوگر مرزها. به طور پیش فرض غیرفعال است.
-fchkp-use-nochk-string-functions
استفاده از نسخه های *_nochk توابع رشته (بدون بررسی کران ها) توسط اشاره گر را فعال می کند.
جستجوگر مرزها. به طور پیش فرض غیرفعال است.
-fchkp-use-static-bounds
به Pointer Bounds Checker اجازه دهید تا مرزهای ایستا را با نگه داشتن مرزهای ایستا ایجاد کند
متغیرها به طور پیش فرض فعال است.
-fchkp-use-static-const-bounds
به جای ایجاد کران های ثابت، از کران های اولیه استاتیکی استفاده کنید
زمان مورد نیاز آنها به طور پیشفرض زمانی فعال است -fchkp-use-static-bounds فعال شده است.
-fchkp-treat-zero-dynamic-size-as-infinite
با این گزینه، اشیایی با نوع ناقص که اندازه پویا به دست آمده صفر است
در عوض توسط Pointer Bounds Checker به عنوان دارای اندازه بی نهایت رفتار می شوند. این گزینه
اگر یک برنامه با یک کتابخانه پیوند داده شده باشد، ممکن است مفید باشد
نمادها به طور پیش فرض غیرفعال است.
-fchkp-check-read
به Pointer Bounds Checker دستور می دهد تا چک هایی را برای همه دسترسی های خواندنی به حافظه ایجاد کند.
به طور پیش فرض فعال شده است.
-fchkp-check-write
به Pointer Bounds Checker دستور می دهد تا چک هایی را برای همه دسترسی های نوشتن به حافظه ایجاد کند.
به طور پیش فرض فعال شده است.
-fchkp-store-bounds
به Pointer Bounds Checker دستور می دهد تا برای نوشته های اشاره گر ذخیره کرانه ها ایجاد کند.
به طور پیش فرض فعال شده است.
-FCHKP-INstrument-Calls
به Pointer Bounds Checker دستور می دهد تا کران نشانگر را به تماس ها منتقل کند. به طور پیش فرض فعال است.
-fchkp-instrument-marked-only
به ابزار Pointer Bounds Checker دستور می دهد تا فقط عملکردهایی را که با علامت علامت گذاری شده اند
ویژگی "bnd_instrument". به طور پیش فرض غیرفعال است.
-fchkp-use-wrappers
به Pointer Bounds Checker اجازه میدهد تا تماسهای توابع داخلی را با تماسهایی جایگزین کند
توابع لفاف چه زمانی -fchkp-use-wrappers برای پیوند دادن یک برنامه، درایور GCC استفاده می شود
به طور خودکار علیه libmpxwrappers. همچنین ببینید static-libmpxwrappers. فعال شد
به صورت پیش فرض.
-fdump-final-insns[=پرونده]
نمایش داخلی نهایی (RTL) را در آن تخلیه کنید پرونده. اگر آرگومان اختیاری باشد
حذف شده (یا اگر پرونده "." است)، نام فایل dump با ضمیمه تعیین می شود
".gkd" به نام فایل خروجی کامپایل.
-fcompare-debug[=انتخاب می کند]
اگر در حین کامپایل خطایی رخ نداد، کامپایلر را برای بار دوم اجرا کنید و اضافه کنید انتخاب می کند و
-fcompare-debug-second به استدلال های ارائه شده به مجموعه دوم. تخلیه کنید
نمایش داخلی نهایی در هر دو کامپایل، و چاپ خطا در صورت متفاوت بودن.
اگر علامت مساوی حذف شود، پیش فرض است -تغییر استفاده می شود.
متغیر محیطی gcc_compare_debug، در صورت تعریف، غیر خالی و غیر صفر،
به طور ضمنی امکان می دهد -fcompare-debug. اگر gcc_compare_debug به یک رشته تعریف شده است
با یک خط تیره شروع می شود، سپس برای استفاده می شود انتخاب می کند، در غیر این صورت پیش فرض است -تغییر is
استفاده شده.
-fcompare-debug=، با علامت مساوی اما بدون انتخاب می کند، برابر است با
-fno-compare-debug، که باعث غیرفعال شدن دامپینگ نمایش نهایی و
تدوین دوم، جلوگیری از حتی gcc_compare_debug از اثرگذاری
برای تایید پوشش کامل در طول -fcompare-debug تست، تنظیم gcc_compare_debug گفتن
-FCOMPARE-DEBUG-NOT-OVERRIDDEND، که GCC آن را به عنوان یک گزینه نامعتبر در هر موردی رد می کند
کامپایل (به جای پیش پردازش، مونتاژ یا پیوند). برای دریافت فقط یک هشدار،
محیط gcc_compare_debug به -w%n-fcompare-debug نه نادیده گرفته شده انجام خواهد داد
-fcompare-debug-second
این گزینه به طور ضمنی به کامپایلر برای کامپایل دوم درخواستی ارسال می شود
by -fcompare-debug، همراه با گزینه هایی برای خاموش کردن هشدارها و حذف گزینه های دیگر
که باعث خروجی های کامپایلر به فایل ها یا خروجی استاندارد می شود.
نام فایلهای Dump و فایلهای موقت حفظ شده به گونهای تغییر داده میشوند که حاوی ".gk" باشند.
پسوند اضافی در طول کامپایل دوم، برای جلوگیری از بازنویسی آنها
تولید شده توسط اولین
هنگامی که این گزینه به درایور کامپایلر منتقل می شود، باعث می شود اول تالیف به
نادیده گرفته شود، که آن را برای مواردی غیر از اشکال زدایی مناسب کامپایلر مفید می کند.
-feliminate-dwarf2-dups
فشرده سازی اطلاعات اشکال زدایی 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-aasm
به جای استفاده از بخش ".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)" فقط برای 10 مورد اول true برمی گرداند
فراخوان ها
-قابل دفاع-نوع-عبور
-غیرفعال کردن-نوع-عبور=محدوده-لیست
این مجموعه ای از گزینه هایی است که برای غیرفعال کردن/فعال کردن صریح بهینه سازی استفاده می شود
عبور می کند. این گزینه ها برای استفاده برای اشکال زدایی 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 شروع می شود.
-با- rtl-عبور
-با- rtl-عبور=محدوده-لیست
پاس RTL را فعال کنید عبوراست. دیدن -fdisable-rtl برای توضیح آرگومان گزینه و
مثال ها.
-درخت قابل فن-عبور
-درخت قابل فن-عبور=محدوده-لیست
عبور درختی را فعال کنید عبوراست. دیدن -fdisable-rtl برای توضیح آرگومان های گزینه
در اینجا چند نمونه وجود دارد که کاربرد این گزینه ها را نشان می دهد.
# ccp1 را برای همه توابع غیرفعال کنید
-fdisable-tree-ccp1
# unroll کامل را برای تابعی که uid گره cgraph آن 1 است غیرفعال کنید
-1-کونرول = XNUMX
# gcse2 را برای توابع در محدوده های زیر غیرفعال کنید [1,1،XNUMX]،
# [300,400] و [400,1000]
# gcse2 را برای توابع foo و foo2 غیرفعال کنید
-fdisable-rtl-gcse2 = foo ، foo2
# خطبندی اولیه را غیرفعال کنید
-fdisable-tree-einline
# inlining ipa را غیرفعال کنید
-fdisable-ipa-inline
# باز کردن کامل درخت را فعال کنید
-پندار-درخت-باز کردن
-dنامه ها
-fdump-rtl-عبور
-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-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 و -fdump-rtl-sched2 تخلیه پس از بلوک اصلی را فعال کنید
پاس های برنامه ریزی
-fdump-rtl-ree
تخلیه پس از حذف علامت/صفر پسوند.
-fdump-rtl-seqabstr
پس از کشف توالی رایج، تخلیه کنید.
-fdump-rtl-کوتاه کردن
پس از کوتاه کردن شاخه ها تخلیه کنید.
-fdump-rtl- خواهر و برادر
پس از بهینه سازی تماس خواهر و برادر، تخلیه کنید.
-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 مختلف.
-فرپورت-اشکال
اگر ICE در کامپایلر C/C++ است، اطلاعات مربوط به اشکال زدایی را جمع آوری کرده و در فایل موقت قرار دهید
رخ داده
-fdump-بدون شماره
هنگام انجام اشکالزدایی dumps، شماره دستورالعملها و خروجی آدرس را حذف کنید. این
استفاده از diff در اشکال زدایی dump ها برای فراخوانی کامپایلر را امکان پذیرتر می کند
گزینه های مختلف، به ویژه با و بدون -g.
-Fdump-Numbered-Links
هنگام انجام اشکال زدایی dump (نگاه کنید به -d گزینه بالا)، اعداد دستورالعمل را سرکوب کنید
پیوندهایی به دستورالعمل های قبلی و بعدی به صورت متوالی.
-fdump-translation-unit (فقط C++)
-fdump-translation-unit-گزینه های (فقط C++)
نمایشی از ساختار درختی کل واحد ترجمه را در یک فایل تخلیه کنید.
نام فایل با ضمیمه ساخته شده است .تو به نام فایل منبع، و فایل است
در همان دایرکتوری فایل خروجی ایجاد شده است. اگر -گزینه های فرم استفاده می شود،
گزینه های جزئیات تخلیه را همانطور که برای -fdump-tree گزینه.
-fdump-class-hierarchy (فقط C++)
-fdump-class-hierarchy-گزینه های (فقط C++)
نمایشی از سلسله مراتب و چیدمان جدول تابع مجازی هر کلاس را در a قرار دهید
فایل. نام فایل با ضمیمه ساخته شده است .کلاس به نام فایل منبع و فایل
در همان دایرکتوری فایل خروجی ایجاد می شود. اگر -گزینه های فرم استفاده می شود،
گزینه های جزئیات تخلیه را همانطور که برای -fdump-tree گزینه.
-fdump-ipa-گزینه
کنترل دامپینگ در مراحل مختلف درخت زبان تجزیه و تحلیل بین رویه ای به الف
فایل. نام فایل با اضافه کردن یک پسوند خاص سوئیچ به منبع ایجاد می شود
نام فایل، و فایل در همان دایرکتوری فایل خروجی ایجاد می شود. در
تخلیه زیر ممکن است:
تمام همه تخلیه های تحلیل بین رویه ای را فعال می کند.
cgraph
اطلاعات مربوط به بهینه سازی گراف فراخوانی، حذف توابع استفاده نشده و
تصمیمات درونی
خطی
تخلیه پس از تابع درونی.
-fdump-passes
فهرست پاس های بهینه سازی که با جریان روشن و خاموش می شوند را خالی کنید
گزینه های خط فرمان
-ممپام-آمپولیک-انتخاب
فعال کردن و کنترل تخلیه آمار پاس در یک فایل جداگانه. نام فایل است
با اضافه کردن پسوندی به پایان می رسد .آمار به نام فایل منبع، و
فایل در همان دایرکتوری فایل خروجی ایجاد می شود. اگر -انتخاب شکل است
استفاده شده، -آمار باعث می شود شمارنده ها در کل واحد کامپایل در حالی که جمع شوند
-جزئیات هر رویدادی را به عنوان پاسها ایجاد میکنند. پیش فرض بدون گزینه است
برای جمع شمارنده ها برای هر تابع کامپایل شده.
-fdump-tree-گزینه
-fdump-tree-گزینه-گزینه های
-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.
بهینه
پس از همه بهینهسازیهای درختی، تخلیه به پرونده. بهینه سازی شده.
ساده
هر تابع را قبل و بعد از ارسال ساده سازی به یک فایل تخلیه کنید. پرونده
نام با الحاق ساخته شده است .gimple به نام فایل منبع
cfg نمودار جریان کنترل هر تابع را در یک فایل تخلیه کنید. نام فایل توسط
ضمیمه کردن .cfg به نام فایل منبع
ch پس از کپی کردن هدرهای حلقه، هر تابع را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.ch به نام فایل منبع
SSA اطلاعات مربوط به SSA را در یک فایل تخلیه کنید. نام فایل با ضمیمه ساخته شده است .ssa
به نام فایل منبع
نام مستعار
اطلاعات نامگذاری را برای هر تابع تخلیه کنید. نام فایل با ضمیمه ساخته شده است
نام مستعار به نام فایل منبع
حزب کمونیست چین هر تابع را پس از CCP تخلیه کنید. نام فایل با ضمیمه ساخته شده است ccp به
نام فایل منبع
storeccp
هر تابع را پس از STORE-CCP تخلیه کنید. نام فایل با ضمیمه ساخته شده است .storeccp
به نام فایل منبع
پیش پس از حذف جزئی افزونگی، درختان را تخلیه کنید. نام فایل توسط
ضمیمه کردن .پیش به نام فایل منبع
فرکانس پس از حذف کامل افزونگی درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.free به نام فایل منبع
کپی پروپ
پس از تکثیر کپی درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است .copyprop
به نام فایل منبع
store_copyprop
پس از انتشار کپی در فروشگاه، درختان را تخلیه کنید. نام فایل با ضمیمه ساخته شده است
.store_copyprop به نام فایل منبع
dce پس از حذف کد مرده، هر تابع را تخلیه کنید. نام فایل توسط
ضمیمه کردن .DE به نام فایل منبع
آقا خانم پس از انجام جایگزینی اسکالر سنگدانه ها، هر تابع را تخلیه کنید. پرونده
نام با الحاق ساخته شده است .sra به نام فایل منبع
فرو رفتن
پس از انجام کد سینک کردن، هر تابع را تخلیه کنید. نام فایل توسط
ضمیمه کردن .فرو رفتن به نام فایل منبع
هدیه هر تابع را پس از اعمال بهینهسازی درختی Dominator تخلیه کنید. نام فایل است
با الحاق ساخته شده است .dom به نام فایل منبع
گفتن پس از اعمال حذف فروشگاه مرده، هر تابع را تخلیه کنید. نام فایل ساخته شده است
با الحاق .dse به نام فایل منبع
فیوپت
هر تابع را پس از بهینه سازی گره های PHI در کد مستقیم تخلیه کنید. پرونده
نام با الحاق ساخته شده است فیوپت به نام فایل منبع
forwprop
هر تابع را پس از انتشار رو به جلو متغیرهای یکبار مصرف تخلیه کنید. نام فایل
با الحاق ساخته می شود . forwrprop به نام فایل منبع
نام کپی
پس از اعمال بهینه سازی تغییر نام کپی، هر تابع را تخلیه کنید. نام فایل است
با الحاق ساخته شده است .نام کپی به نام فایل منبع
nrv هر تابع را پس از اعمال بهینه سازی مقدار بازگشتی نامگذاری شده در حالت عمومی، تخلیه کنید
درختان. نام فایل با ضمیمه ساخته شده است nrv به نام فایل منبع
بردار
پس از اعمال برداری از حلقه ها، هر تابع را تخلیه کنید. نام فایل ساخته شده است
با الحاق .vect به نام فایل منبع
اسلپ پس از اعمال برداری از بلوک های اساسی، هر تابع را تخلیه کنید. نام فایل است
با الحاق ساخته شده است .slp به نام فایل منبع
vp هر تابع را پس از انتشار محدوده ارزش (VRP) تخلیه کنید. نام فایل توسط
ضمیمه کردن vrp به نام فایل منبع
تمام با پرچم های ارائه شده در این گزینه، تمام درختان dump های موجود را فعال کنید.
-fopt-info
-fopt-info-گزینه های
-fopt-info-گزینه های=نام فایل
تخلیه های بهینه سازی را از پاس های بهینه سازی مختلف کنترل می کند. اگر -گزینه های شکل است
استفاده شده، گزینه های لیستی از - کلمات کلیدی گزینه جدا شده برای انتخاب جزئیات روگرفت و
بهینه سازی ها
La گزینه های را می توان به دو گروه تقسیم کرد: گزینه هایی که پرحرفی را توصیف می کنند
dump و گزینه هایی که توضیح می دهند کدام بهینه سازی باید گنجانده شود. گزینه های از
هر دو گروه را می توان آزادانه با هم مخلوط کرد زیرا همپوشانی ندارند. با این حال، در صورت
هر گونه تضاد، گزینه های بعدی گزینه های قبلی را در خط فرمان لغو می کنند.
گزینه های زیر پرحرفی dump را کنترل می کنند:
بهینه
هنگامی که بهینه سازی با موفقیت اعمال شد، اطلاعات را چاپ کنید. تا یک پاس است
تصمیم بگیرید که کدام اطلاعات مرتبط است. به عنوان مثال، وکتوریزر چاپ را عبور می دهد
محل منبع حلقه هایی که با موفقیت بردار شده اند.
از دست رفته
اطلاعات مربوط به بهینه سازی های از دست رفته را چاپ کنید. پاس های فردی کنترل که
اطلاعاتی که باید در خروجی گنجانده شود.
توجه داشته باشید
چاپ اطلاعات مفصل درباره بهینه سازی ها، مانند تبدیل های خاص،
پیام های دقیق تر در مورد تصمیمات و غیره
تمام چاپ اطلاعات دقیق بهینه سازی این شامل بهینه, از دست رفتهو
توجه داشته باشید.
یک یا چند مورد از کلیدواژه های گزینه زیر را می توان برای توصیف گروهی استفاده کرد
بهینه سازی:
خشونت تخلیهها را از همه بهینهسازیهای بین رویهای فعال کنید.
حلقه
Dump ها را از همه بهینه سازی های حلقه فعال کنید.
خطی
Dump ها را از همه بهینه سازی های درون خطی فعال کنید.
ویکی Dump ها را از همه بهینه سازی های برداری فعال کنید.
اپتال
Dump ها را از همه بهینه سازی ها فعال کنید. این مجموعه ای از گروه های بهینه سازی است
ذکر شده در بالا
If گزینه های حذف شده است، به طور پیش فرض به Optall بهینه شده، که به معنای ریختن تمام اطلاعات است
در مورد بهینه سازی های موفق از همه پاس ها.
اگر نام فایل ارائه شده است، سپس تخلیه از تمام بهینه سازی های قابل اجرا است
الحاق شده به نام فایل. در غیر این صورت تخلیه بر روی خروجی است استدرر. گرچه
چندگانه -fopt-info گزینه ها پذیرفته می شوند، فقط یکی از آنها می تواند شامل الف باشد نام فایل. اگر
نام فایل های دیگر ارائه می شود و سپس همه آنها به جز اولین گزینه نادیده گرفته می شوند.
توجه داشته باشید که خروجی نام فایل در صورت وجود چندین واحد ترجمه بازنویسی می شود. اگر
خروجی ترکیبی از چندین واحد ترجمه مورد نظر است، استدرر باید استفاده شود
به جای آن.
در مثال زیر، اطلاعات بهینه سازی به خروجی داده می شود استدرر:
gcc -O3 -fopt-info
این مثال:
gcc -O3 -fopt-info-missed=missed.all
گزارش بهینه سازی از دست رفته را از همه پاس ها به خروجی می دهد از دست رفته.همه، و این یکی:
gcc -O2 -ftree-vectorize -fopt-info-vec-missed
اطلاعات مربوط به فرصت های بهینه سازی از دست رفته را از پاس های برداری چاپ می کند
on استدرر. توجه داشته باشید که -Fopt-info-vec-sissed برابر است با -fopt-info-missed-vec.
به عنوان مثال دیگر،
gcc -O3 -fopt-info-inline-optimized-missed=inline.txt
اطلاعات مربوط به بهینه سازی های از دست رفته و همچنین مکان های بهینه شده را از همه خروجی می دهد
درون خطی عبور می کند inline.txt.
در نهایت، در نظر بگیرید:
GCC -FOPT-INFO-VEC-MISSED = VEC.MISS -FOPT-INFO-LOOP-OPTIMISED = loop.opt
در اینجا دو نام فایل خروجی وجود دارد vec.miss و loop.opt در تضاد هستند زیرا تنها یکی
فایل خروجی مجاز است در این صورت فقط گزینه اول اثر می گذارد و
گزینه های بعدی نادیده گرفته می شوند. بنابراین فقط vec.miss تولید می شود که حاوی زباله است
از بردار درباره فرصت های از دست رفته.
-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-ردیابی، به جز زمانی که زمانبندی انتخابی فعال باشد.
-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 -fbranch-count-reg -fcombine-stack-adjustments -FCOMPARE-elim
-fcprop-رجیستر می کند -fdce -fdefer-pop -تاخیر-شاخه -fdse - فوروارد-تبلیغ کردن
fguess-branch-probability -fif-conversion2 تبدیل -fif
توابع-finline-یک بار فراخوانی می شود -fipa-pure-const -fipa-profile -fipa-reference
ثابت-fmerge -fmove-loop-invariants -Fshrink-Wrap -fsplit-wide-types
-ftree-bit-ccp -ftree-ccp -FSSA-Phiopt -ftree-ch -ftree-copy-prop -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 -مجازی کردن -fdevirtualize-speculatively
-بهینه سازی ها -fgcse -fgcse-lm -fhoist- مجاور-بارها
-finline-small-functions -findirect-inlining -fipa-cp -fipa-cp-alignment -fipa-sra
-fipa-icf -fisolate-erronous-paths-dereference -flra-remat -بهینه سازی تماس های خواهر و برادر
-foptimize-strlen -fpartial-inlining -fpeepole2 -بلاک های سفارشی
-freorder-blocks-and-partition توابع -freorder -frerun-cse-after-loop
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 fstrict-aliasing
-fstrict-سرریز -ftree-builtin-call-dce تبدیل -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-loop-vectorize, الگوی-حلقه-دور-توزیع, -FTREE-SLP-Vectorize,
-fvect-cost-model, -ftree-partial-pre و -fipa-cp-clone گزینه.
-O0 زمان کامپایل را کاهش دهید و اشکال زدایی نتایج مورد انتظار را ایجاد کند. این است
به طور پیش فرض
-اواس بهینه سازی برای اندازه -اواس همه را قادر می سازد -O2 بهینه سازی هایی که معمولاً افزایش نمی یابند
اندازه کد همچنین بهینه سازی های بیشتری را انجام می دهد که برای کاهش اندازه کد طراحی شده اند.
-اواس پرچم های بهینه سازی زیر را غیرفعال می کند: -عملکردهای falign -فالین-پرش
-فالین-حلقه ها -falign-labels -بلاک های سفارشی -freorder-blocks-and-partition
-fprefetch-loop-arrays
سریع
رعایت استانداردهای سختگیرانه را نادیده بگیرید. سریع همه را قادر می سازد -O3 بهینه سازی ها آن را نیز
بهینه سازی هایی را فعال می کند که برای همه برنامه های سازگار با استاندارد معتبر نیستند. آی تی
روشن سریع-ریاضی و مخصوص فرترن -FNO-PRECTECT-PARENS و آرایه های fstack.
-اوگ تجربه اشکال زدایی را بهینه کنید. -اوگ بهینه سازی هایی را فعال می کند که تداخلی با آن نداشته باشند
اشکال زدایی. این باید سطح بهینه سازی انتخابی برای ویرایش استاندارد باشد.
چرخه کامپایل-اشکال زدایی، ارائه سطح معقولی از بهینه سازی در حین حفظ
کامپایل سریع و یک تجربه اشکال زدایی خوب.
اگر از چندگانه استفاده می کنید -O گزینه ها، با یا بدون اعداد سطح، آخرین گزینه چنین است
اونی که موثره
گزینه های فرم -fپرچم پرچم های مستقل از ماشین را مشخص کنید. اکثر پرچم ها هر دو را دارند
اشکال مثبت و منفی؛ شکل منفی از -فو is -fno-foo. در جدول زیر،
فقط یکی از فرم ها فهرست شده است --- فرمی که معمولاً استفاده می کنید. شما می توانید دیگری را کشف کنید
با حذف هر دو شکل دهید نه- یا اضافه کردن آن
گزینه های زیر بهینه سازی های خاص را کنترل می کنند. آنها یا توسط فعال می شوند -O
گزینه ها یا مربوط به مواردی هستند که هستند. شما می توانید از پرچم های زیر در موارد نادر استفاده کنید
مواردی که "تنظیم دقیق" بهینه سازی هایی که باید انجام شوند مورد نظر است.
-fno-defer-pop
همیشه به محض بازگشت آن تابع، آرگومان ها را به هر فراخوانی تابع اضافه کنید. برای
معمولاً کامپایلر اجازه می دهد تا ماشین هایی که باید آرگومان هایی را پس از فراخوانی تابع ایجاد کنند
آرگومانها در پشته برای چندین فراخوانی تابع جمع میشوند و همه آنها را به نمایش میگذارند
یک بار.
در سطوح غیر فعال است -O, -O2, -O3, -اواس.
- فوروارد-تبلیغ کردن
یک پاس انتشار رو به جلو در RTL انجام دهید. پاس سعی می کند دو دستورالعمل را ترکیب کند
و بررسی می کند که آیا می توان نتیجه را ساده کرد. اگر حلقه unrolling فعال باشد، دو پاس می شود
انجام می شود و دومی پس از باز کردن حلقه برنامه ریزی می شود.
این گزینه به طور پیش فرض در سطوح بهینه سازی فعال است -O, -O2, -O3, -اواس.
-ffp-contract=سبک
-ffp-contract = خاموش انقباض بیان ممیز شناور را غیرفعال می کند. -ffp-contract=سریع
انقباض بیان ممیز شناور مانند تشکیل ضرب-جمع ذوب شده را ممکن می کند
اگر هدف از آنها پشتیبانی بومی داشته باشد. -ffp-contract=on را قادر می سازد
اگر استاندارد زبان مجاز باشد، انقباض عبارت ممیز شناور. این هست
در حال حاضر اجرا نشده و برابر با -ffp-contract = خاموش.
پیش فرض این است -ffp-contract=سریع.
-fomit-frame-pointer
نشانگر فریم را در یک رجیستر برای توابعی که نیازی به آن ندارند، نگه ندارید. این
از دستورالعملهای ذخیره، تنظیم و بازیابی نشانگرهای فریم اجتناب میکند. آن را نیز می سازد
ثبت اضافی در بسیاری از توابع موجود است. It همچنین می سازد اشکال زدایی غیر ممکن on
برخی از ماشین آلات.
در برخی از ماشین ها، مانند VAX، این پرچم هیچ تاثیری ندارد، زیرا استاندارد است
دنباله فراخوانی به طور خودکار نشانگر فریم را کنترل می کند و هیچ چیزی توسط آن ذخیره نمی شود
تظاهر به اینکه وجود ندارد ماکرو توصیف ماشین "FRAME_POINTER_REQUIRED"
کنترل می کند که آیا یک ماشین هدف از این پرچم پشتیبانی می کند یا خیر.
تنظیم پیشفرض (زمانی که برای اندازه بهینه نمیشود) برای گنو/لینوکس x32 و 86 بیتی 32 بیتی
Darwin x86 targets است -fomit-frame-pointer. می توانید GCC را با
--enable-frame-pointer پیکربندی گزینه برای تغییر پیش فرض.
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-بهینه سازی تماس های خواهر و برادر
بهینه سازی تماس های بازگشتی خواهر و برادر.
در سطوح فعال شده است -O2, -O3, -اواس.
-foptimize-strlen
بهینه سازی توابع مختلف رشته استاندارد C (به عنوان مثال "strlen"، "strchr" یا "strcpy") و
همتایان "_FORTIFY_SOURCE" آنها به جایگزین های سریع تری تبدیل می شوند.
در سطوح فعال شده است -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
تلاش برای ادغام ثابت های یکسان (ثابت رشته ها و ثابت های ممیز شناور)
در سراسر واحدهای تلفیقی
این گزینه پیش فرض برای کامپایل بهینه سازی شده در صورت اسمبلر و لینکر است
آن را حمایت کن. استفاده کنید -fno-merge-constants برای جلوگیری از این رفتار
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fmerge-all-constants
تلاش برای ادغام ثابت های یکسان و متغیرهای یکسان.
این گزینه دلالت دارد ثابت-fmerge. بعلاوه ثابت-fmerge این
به عنوان مثال، آرایه های اولیه ثابت یا متغیرهای ثابت اولیه با
انواع انتگرال یا ممیز شناور زبان هایی مانند C یا C++ به هر متغیر نیاز دارند،
از جمله چندین نمونه از یک متغیر در تماس های بازگشتی، برای داشتن متمایز
مکانها، بنابراین استفاده از این گزینه منجر به رفتار ناسازگار میشود.
-fmodulo-sched
برنامه ریزی مدول نوسان را بلافاصله قبل از اولین پاس برنامه ریزی انجام دهید. این
pass به درونیترین حلقهها نگاه میکند و دستورالعملهای آنها را با همپوشانی متفاوت مرتب میکند
تکرار
-fmodulo-sched-allow-regmoves
برنامه ریزی ماژول مبتنی بر پیامک تهاجمی تر را با حرکات ثبت مجاز انجام دهید. توسط
با تنظیم این پرچم، لبه های ضد وابستگی خاصی حذف می شوند، که باعث می شود
تولید reg-moves بر اساس تجزیه و تحلیل محدوده عمر. این گزینه موثر است
فقط با -fmodulo-sched فعال شده است
-fno-branch-count-reg
از دستورالعملهای «کاهش و انشعاب» در یک رجیستر شمارش استفاده نکنید، بلکه به جای آن
دنباله ای از دستورالعمل ها را ایجاد کنید که یک ثبات را کاهش می دهد، آن را با آن مقایسه کنید
صفر، سپس بر اساس نتیجه منشعب می شود. این گزینه فقط در حالت معنی دار است
معماری هایی که از چنین دستورالعمل هایی پشتیبانی می کنند، که شامل x86، PowerPC، IA-64 و
S / 390.
فعال به طور پیش فرض در -O1 و بالاتر
پیش فرض این است -fbranch-count-reg.
-fno-function-cse
آدرس های تابع را در رجیسترها قرار ندهید. هر دستورالعملی را که a را فراخوانی می کند، بسازید
تابع ثابت آدرس تابع را به صراحت در بر می گیرد.
این گزینه منجر به کد کمتر کارآمد می شود، اما برخی هک های عجیب و غریب که این کد را تغییر می دهند
خروجی اسمبلر ممکن است با بهینه سازی های انجام شده در زمانی که این گزینه وجود دارد اشتباه گرفته شود
استفاده نشده.
پیش فرض این است -function-cse
-fno-zero-initialized-in-bss
اگر هدف از یک بخش BSS پشتیبانی می کند، GCC به طور پیش فرض متغیرهایی را قرار می دهد که هستند
به صفر در BSS مقداردهی شد. این می تواند فضا را در کد حاصل ذخیره کند.
این گزینه این رفتار را خاموش می کند زیرا برخی از برنامه ها به طور صریح به متغیرها متکی هستند
رفتن به بخش داده --- به عنوان مثال، به طوری که فایل اجرایی به دست آمده می تواند آن را پیدا کند
شروع آن بخش و/یا فرضیاتی بر اساس آن ایجاد کنید.
پیش فرض این است -fzero-initialized-in-bss.
-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
تلاش برای تبدیل پرش های شرطی به معادل های بدون شاخه. این شامل
استفاده از حرکات شرطی، حداقل، حداکثر، دستورات ست پرچم و شکم و برخی ترفندها
با محاسبات استاندارد قابل انجام است. استفاده از اجرای مشروط در تراشه هایی که در آن قرار دارد
موجود توسط کنترل می شود -fif-conversion2.
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fif-conversion2
از اجرای شرطی (در صورت وجود) برای تبدیل پرش های شرطی به
معادل های بدون شاخه
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-fdeclone-ctor-dtor
C++ ABI به چندین نقطه ورودی برای سازنده و مخرب نیاز دارد: یکی برای a
زیر شی پایه، یکی برای یک شی کامل، و دیگری برای یک تخریبگر مجازی که فراخوانی می کند
اپراتور پس از آن حذف شود. برای یک سلسله مراتب با پایگاه های مجازی، پایه و کامل است
واریانت ها کلون هستند که به معنای دو کپی از تابع است. با این گزینه،
انواع پایه و کامل به Thunk هایی تبدیل می شوند که پیاده سازی مشترک را می نامند.
فعال شده توسط -اواس.
-fdelete-null-pointer-checks
فرض کنید که برنامه ها نمی توانند به طور ایمن اشاره گرهای تهی را حذف کنند و هیچ کد یا داده ای وجود ندارد
عنصر در آنجا ساکن است. این امکان بهینه سازی ساده تاشوی ثابت را در همه فراهم می کند
سطوح بهینه سازی علاوه بر این، سایر پاس های بهینه سازی در GCC از این پرچم استفاده می کنند
کنترل تجزیه و تحلیل جریان داده های جهانی که بررسی های بی فایده برای نشانگرهای پوچ را حذف می کند.
اینها فرض می کنند که اگر یک اشاره گر بعد از اینکه قبلاً ارجاع داده نشده است بررسی شود، آن را
نمی تواند پوچ باشد
البته توجه داشته باشید که در برخی محیط ها این فرض درست نیست. استفاده کنید
-fno-delete-null-pointer-checks برای غیرفعال کردن این بهینه سازی برای برنامه هایی که وابسته هستند
روی آن رفتار
برخی از اهداف، به خصوص موارد تعبیه شده، این گزینه را در تمام سطوح غیرفعال می کنند. در غیر این صورت
در تمام سطوح فعال است: -O0, -O1, -O2, -O3, -اواس. پاس هایی که از اطلاعات استفاده می کنند
به طور مستقل در سطوح مختلف بهینه سازی فعال می شوند.
-مجازی کردن
سعی کنید تماس ها را به توابع مجازی به تماس های مستقیم تبدیل کنید. این هر دو انجام می شود
در یک رویه و به صورت بین رویه ای به عنوان بخشی از خط کشی غیرمستقیم
(-findirect-inlining) و انتشار ثابت بین رویه ای (-fipa-cp). فعال در
سطح -O2, -O3, -اواس.
-fdevirtualize-speculatively
سعی کنید تماس ها را به توابع مجازی به تماس های مستقیم گمانه زنی تبدیل کنید. بر اساس
تجزیه و تحلیل گراف وراثت نوع، تعیین مجموعه ای از برای یک فراخوانی داده شده است
اهداف احتمالی اگر مجموعه کوچک است، ترجیحاً اندازه 1، تماس را به a تغییر دهید
تصمیم گیری مشروط بین تماس مستقیم و غیر مستقیم تماس های سوداگرانه را فعال می کند
بهینه سازی های بیشتر، مانند inlining. وقتی بعد از ادامه بی فایده به نظر می رسند
بهینه سازی، دوباره به شکل اصلی تبدیل می شوند.
-fdevirtualize-at-ltrans
هنگام اجرای پیوند، اطلاعات اضافی مورد نیاز برای غیر مجازی سازی تهاجمی را پخش کنید-
بهینه ساز زمان در حالت تبدیل محلی. این گزینه بیشتر را فعال می کند
غیر مجازی سازی اما به طور قابل توجهی اندازه داده های جریانی را افزایش می دهد. برای این
به این دلیل که به طور پیش فرض غیرفعال است.
-بهینه سازی ها
تعدادی بهینه سازی جزئی را انجام دهید که نسبتاً گران هستند.
در سطوح فعال شده است -O2, -O3, -اواس.
-رایگان
سعی کنید دستورالعمل های افزونه اضافی را حذف کنید. این به ویژه برای
معماری x86-64، که به طور ضمنی در ثبات های 64 بیتی پس از
نوشتن به نیمه 32 بیتی پایین آنها.
برای Alpha، AArch64 و x86 در سطوح فعال است -O2, -O3, -اواس.
-fno-lifetime-dse
در C++ مقدار یک شی فقط تحت تأثیر تغییرات در طول عمر آن قرار می گیرد: وقتی
سازنده شروع می شود، شی دارای یک مقدار نامشخص است، و هر گونه تغییر در طول
زمانی که شیء از بین می رود، عمر جسم مرده است. فروشگاه به طور معمول مرده
حذف از این مزیت استفاده خواهد کرد. اگر کد شما متکی به مقدار است
ذخیره سازی اشیا فراتر از طول عمر جسم باقی می ماند، می توانید از این پرچم استفاده کنید
این بهینه سازی را غیرفعال کنید
-رشد-محدوده-کوچک شدن
تلاش برای کاهش فشار رجیستر از طریق انقباض محدوده زنده ثبت. این هست
برای پردازنده های سریع با مجموعه های ثبت اندازه کوچک یا متوسط مفید است.
-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
-flra-remat
فعالسازی مجدد مواد حساس به CFG در LRA. به جای بارگذاری مقادیر ریخته شده
شبه، LRA سعی می کند در صورت سودآوری، مقادیر را مجدداً مادی کند (دوباره محاسبه کند).
در سطوح فعال شده است -O2, -O3, -اواس.
-تاخیر-شاخه
اگر برای ماشین هدف پشتیبانی می شود، سعی کنید دستورات را برای بهره برداری مجدد ترتیب دهید
اسلات های دستورالعمل پس از دستورالعمل های شعبه با تأخیر در دسترس هستند.
در سطوح فعال شده است -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-he-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
دستورالعمل ها را با استفاده از الگوریتم زمان بندی انتخابی برنامه ریزی کنید. برنامه ریزی انتخابی اجرا می شود
به جای پاس زمانبندی دوم.
-صیل صفحه بندی
در طول زمانبندی انتخابی، لولهگذاری نرمافزاری درونیترین حلقهها را فعال کنید. این
گزینه تاثیری ندارد مگر اینکه یکی از -برنامه ریزی انتخابی or -زمانبندی-fselective2
روشن است
حلقه های بیرونی لوله گذاری-fsel-sched
هنگام لولهکشی حلقهها در طول زمانبندی انتخابی، حلقههای بیرونی را نیز خطکشی کنید. این
گزینه تاثیری ندارد مگر اینکه -صیل صفحه بندی روشن است
-تداخل معنایی
برخی از قالبهای شی، مانند ELF، امکان قرار دادن نمادها توسط پیوند دهنده پویا را میدهند.
این بدان معنی است که برای نمادهای صادر شده از DSO، کامپایلر نمی تواند کار کند
انتشار بین رویه ای، درون ریزی و سایر بهینه سازی ها در پیش بینی که
تابع یا متغیر مورد نظر ممکن است تغییر کند. در حالی که این ویژگی مفید است، برای
به عنوان مثال، برای بازنویسی توابع تخصیص حافظه توسط یک پیاده سازی اشکال زدایی، آن است
از نظر کیفیت کد گران است. با -فنو-معنای-تداخلی کامپایلر
فرض میکند که اگر برای توابع تداخل ایجاد شود، تابع رونویسی خواهد بود
دقیقا همان معناشناسی (و عوارض جانبی). به طور مشابه اگر تداخل اتفاق بیفتد
برای متغیرها، سازنده متغیر یکسان خواهد بود. پرچم ندارد
اثر برای توابعی که به صراحت به صورت درون خطی اعلام شده است (جایی که هرگز مجاز نیست
تداخل برای تغییر معناشناسی) و برای نمادها به صراحت ضعیف اعلام شده است.
-Fshrink-Wrap
پیشگفتارهای تابع را فقط قبل از بخشهایی از تابع که به آن نیاز دارند، منتشر کنید
بالای تابع این پرچم به طور پیش فرض در فعال است -O و بالاتر
-fcaller-save
فعال کردن تخصیص مقادیر به رجیسترهایی که توسط فراخوانی توابع clobber شده اند
ارسال دستورالعمل های اضافی برای ذخیره و بازیابی رجیسترها در اطراف چنین تماس هایی. چنین
تخصیص تنها زمانی انجام می شود که به نظر می رسد منجر به کد بهتر شود.
این گزینه همیشه به صورت پیشفرض در ماشینهای خاصی فعال است، معمولاً ماشینهایی که این کار را انجام میدهند
هیچ ثبت فراخوانی برای استفاده در عوض وجود ندارد.
در سطوح فعال شده است -O2, -O3, -اواس.
-fcombine-stack-adjustments
تنظیمات پشته (فشار و باز کردن) و منابع حافظه را پشته ردیابی می کند و سپس تلاش می کند
برای یافتن راه هایی برای ترکیب آنها.
فعال به طور پیش فرض در -O1 و بالاتر
-فیپا-را
اگر این ثبات ها توسط هیچ فراخوانی استفاده نمی شود، از ثبات های ذخیره تماس گیرنده برای تخصیص استفاده کنید
عملکرد. در این صورت نیازی به ذخیره و بازیابی آنها در اطراف تماس ها نیست.
این تنها در صورتی امکان پذیر است که توابع فراخوانی شده بخشی از همان واحد کامپایل فعلی باشند
تابع و قبل از آن کامپایل می شوند.
در سطوح فعال شده است -O2, -O3, -اواس.
-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.
-fipa-cp-alignment
هنگامی که فعال باشد، این بهینه سازی تراز پارامترهای تابع را برای پشتیبانی منتشر می کند
عملیات برداری و رشته ای بهتر
این پرچم به طور پیش فرض در فعال است -O2 و -اواس. مستلزم آن است -fipa-cp فعال شده است.
-fipa-icf
تا کردن کد یکسان را برای توابع و متغیرهای فقط خواندنی انجام دهید. در
بهینه سازی اندازه کد را کاهش می دهد و ممکن است با جایگزین کردن یک تابع، پشته های باز کردن را مختل کند
توسط یک معادل با نام متفاوت. بهینه سازی به طور موثرتری با
بهینه سازی زمان پیوند فعال شد.
با این وجود این رفتار شبیه بهینه سازی Gold Linker ICF است، GCC ICF روی آن کار می کند
سطوح مختلف و بنابراین بهینه سازی ها یکسان نیستند - معادل هایی وجود دارد که
فقط توسط GCC و معادلها فقط توسط Gold یافت میشوند.
این پرچم به طور پیش فرض در فعال است -O2 و -اواس.
-fisolate-erronous-paths-dereference
مسیرهایی را شناسایی کنید که به دلیل عدم ارجاع یک عدد تهی، رفتار نادرست یا تعریف نشده ای را ایجاد می کنند
اشاره گر آن مسیرها را از جریان کنترل اصلی جدا کنید و عبارت را با آن تغییر دهید
رفتار اشتباه یا تعریف نشده در تله این پرچم به طور پیش فرض در فعال است -O2
و بالاتر
ویژگی-fisolate-erroneous paths
مسیرهایی را که به دلیل استفاده از مقدار تهی، رفتار اشتباه یا نامشخصی را تحریک می کنند، شناسایی کنید
به نحوی که توسط ویژگی "returns_nonnull" یا "nonnull" ممنوع شده است. آن مسیرها را جدا کنید
از جریان کنترل اصلی و تبدیل عبارت با رفتار اشتباه یا تعریف نشده
به یک تله این در حال حاضر فعال نیست، اما ممکن است توسط فعال شود -O2 در آینده است.
سه سینک
حرکت ذخیره رو به جلو را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O و
بالاتر
-ftree-bit-ccp
انتشار ثابت بیت شرطی پراکنده را روی درختان انجام دهید و نشانگر را منتشر کنید
اطلاعات تراز این پاس فقط بر روی متغیرهای اسکالر محلی عمل می کند و می باشد
فعال به طور پیش فرض در -O و بالاتر. مستلزم آن است -ftree-ccp فعال شده است.
-ftree-ccp
انتشار ثابت شرطی پراکنده (CCP) را روی درختان انجام دهید. فقط این پاس
روی متغیرهای اسکالر محلی عمل می کند و به طور پیش فرض در فعال است -O و بالاتر
-FSSA-Phiopt
برای بهینه سازی کد شرطی، تطبیق الگو را روی گره های SSA PHI انجام دهید. این پاس است
فعال به طور پیش فرض در -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-isl برای فعال کردن
زیرساخت تبدیل حلقه گرافیت
-فلوپ-تبادل
تبدیل های تبادل حلقه را روی حلقه ها انجام دهید. تعویض دو حلقه تو در تو
حلقه های داخلی و خارجی را تغییر می دهد. به عنوان مثال، یک حلقه مانند:
DO J = 1، M
DO I = 1، N
A(J, I) = A(J, I) * C
در پایان
در پایان
تبادل حلقه حلقه را طوری تبدیل می کند که انگار نوشته شده است:
DO I = 1، N
DO J = 1، M
A(J, I) = A(J, I) * C
در پایان
در پایان
زمانی که "N" بزرگتر از حافظه پنهان باشد، می تواند مفید باشد، زیرا در Fortran، the
عناصر یک آرایه به طور پیوسته توسط ستون و نسخه اصلی در حافظه ذخیره می شوند
حلقه روی ردیفها تکرار میشود و به طور بالقوه در هر دسترسی یک حافظه پنهان ایجاد میکند. این
بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و محدود به آن نیست
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-isl به
زیرساخت تبدیل حلقه گرافیت را فعال کنید.
-فلوپ-نوار-معدن
تبدیلهای استخراج نوار حلقه را روی حلقهها انجام دهید. استخراج نواری یک حلقه را به آن تقسیم می کند
دو حلقه تو در تو حلقه بیرونی دارای گام هایی برابر با اندازه نوار و داخلی است
حلقه دارای گام هایی از حلقه اصلی در یک نوار است. طول نوار قابل تغییر است
با استفاده از حلقه-بلوک-کاشی-اندازه پارامتر. به عنوان مثال، یک حلقه مانند:
DO I = 1، N
A(I) = A(I) + C
در پایان
استخراج نوار حلقه حلقه را طوری تبدیل می کند که انگار نوشته شده است:
DO II = 1، N، 51
DO I = II، دقیقه (II + 50، N)
A(I) = A(I) + C
در پایان
در پایان
این بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و به آن محدود نمی شود
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-isl به
زیرساخت تبدیل حلقه گرافیت را فعال کنید.
-فلوپ بلوک
تبدیل حلقه مسدود کننده را روی حلقه ها انجام دهید. Blocking strip mines هر حلقه در
لانه حلقه به گونه ای است که دسترسی های حافظه حلقه های عنصر در حافظه نهان قرار می گیرد. در
طول نوار را می توان با استفاده از حلقه-بلوک-کاشی-اندازه پارامتر. مثلا،
حلقه ای مانند:
DO I = 1، N
DO J = 1، M
A (j ، i) = b (i) + c (j)
در پایان
در پایان
مسدود کردن حلقه حلقه را طوری تبدیل می کند که انگار نوشته شده است:
DO II = 1، N، 51
DO JJ = 1، M، 51
DO I = II، دقیقه (II + 50، N)
DO J = JJ، دقیقه (JJ + 50، M)
A (j ، i) = b (i) + c (j)
در پایان
در پایان
در پایان
در پایان
که می تواند مفید باشد زمانی که "M" بزرگتر از حافظه پنهان است، زیرا درونی ترین حلقه است
بر روی مقدار کمتری از داده ها که می تواند در حافظه پنهان نگهداری شود، تکرار می شود. این
بهینه سازی برای همه زبان های پشتیبانی شده توسط GCC اعمال می شود و محدود به آن نیست
فرترن برای استفاده از این تبدیل کد، GCC باید با آن پیکربندی شود --with-isl به
زیرساخت تبدیل حلقه گرافیت را فعال کنید.
-فگرافیت-هویت
تبدیل هویت برای گرافیت را فعال کنید. برای هر SCOP ما تولید می کنیم
نمایش چند وجهی و تبدیل آن به gimple. استفاده كردن -فگرافیت-هویت
ما می توانیم هزینه ها یا مزایای تبدیل GIMPLE -> GRAPHITE -> GIMPLE را بررسی کنیم.
برخی از حداقل بهینهسازیها نیز توسط مولد کد ISL انجام میشوند، مانند index
تقسیم و حذف کد مرده در حلقه ها.
-floop-nest-optimize
بهینهساز آشیانه حلقه مبتنی بر ISL را فعال کنید. این یک بهینه ساز لانه حلقه عمومی است
در الگوریتم های بهینه سازی پلوتون یک ساختار حلقه بهینه شده را محاسبه می کند
داده-محلی و موازی. این گزینه آزمایشی است.
-فلوپ باز کردن و جم کردن
Unroll و jam را برای بهینهساز آشیانه حلقه مبتنی بر ISL فعال کنید. عامل unroll می تواند باشد
با استفاده از loop-unroll-jam-size پارامتر. بعد رول نشده (شمارش
از درونی ترین) را می توان با استفاده از loop-unroll-jam-depth پارامتر.
.
-floop-parallelize-all
از تحلیل وابستگی داده های گرافیت برای شناسایی حلقه هایی که می توانند موازی شوند استفاده کنید.
همه حلقههایی را که میتوان آنالیز کرد موازی کرد تا وابستگیهای حامل حلقه را نداشته باشند
بدون بررسی اینکه موازی کردن حلقه ها سودآور است.
-fcheck-data-deps
نتایج چندین تحلیلگر وابستگی داده را مقایسه کنید. این گزینه برای
اشکال زدایی تحلیلگرهای وابستگی داده ها
-ftree-loop-if-convert
سعی کنید پرش های شرطی در درونی ترین حلقه ها را به بدون شاخه تبدیل کنید
معادل ها هدف حذف کنترل جریان از درونی ترین حلقه ها به ترتیب است
برای بهبود توانایی پاس برداری برای مدیریت این حلقه ها. این هست
اگر برداری فعال باشد به طور پیش فرض فعال می شود.
-ftree-loop-if-convert-stores
سعی کنید پرش های شرطی حاوی نوشته های حافظه را نیز تبدیل کنید. این
تبدیل می تواند برای برنامه های چند رشته ای ناامن باشد زیرا تبدیل به شرطی می شود
حافظه در حافظه بدون قید و شرط می نویسد. مثلا،
برای (i = 0؛ i < N؛ i++)
اگر (شرط)
A[i] = expr;
تبدیل می شود به
برای (i = 0؛ i < N؛ i++)
A[i] = شرایط expr : A[i];
به طور بالقوه رقابت های داده را تولید می کند.
توزیع -ftree-loop
توزیع حلقه را انجام دهید. این پرچم می تواند عملکرد حافظه پنهان را در بدنه های حلقه بزرگ بهبود بخشد
و اجازه می دهد تا بهینه سازی های حلقه بیشتر، مانند موازی سازی یا برداری، انجام شود
محل. به عنوان مثال، حلقه
DO I = 1، N
A(I) = B(I) + C
D(I) = E(I) * F
در پایان
تبدیل می شود به
DO I = 1، N
A(I) = B(I) + C
در پایان
DO I = 1، N
D(I) = E(I) * F
در پایان
الگوی-حلقه-دور-توزیع
توزیع حلقهای از الگوهایی را انجام دهید که میتوانند کد با فراخوانی به a تولید شوند
کتابخانه این پرچم به طور پیش فرض در فعال است -O3.
این پاس حلقه های اولیه را توزیع می کند و یک فراخوانی به memset صفر ایجاد می کند.
به عنوان مثال، حلقه
DO I = 1، N
A(I) = 0
B(I) = A(I) + I
در پایان
تبدیل می شود به
DO I = 1، N
A(I) = 0
در پایان
DO I = 1، N
B(I) = A(I) + I
در پایان
و حلقه اولیه به یک فراخوانی به memset صفر تبدیل می شود.
-ftree-loop-im
حرکت ثابت حلقه را روی درختان انجام دهید. این پاس فقط ثابت هایی را که سخت هستند حرکت می دهد
برای رسیدگی در سطح RTL (تماس های تابع، عملیاتی که به دنباله های غیر ضروری گسترش می یابد
از insns). با -funswitch-loops همچنین عملوندهای شرایطی را که هستند حرکت می دهد
ثابت خارج از حلقه، به طوری که ما می توانیم فقط از تجزیه و تحلیل تغییر ناپذیری بی اهمیت در آن استفاده کنیم
حلقه لغو سوئیچینگ پاس همچنین شامل حرکت فروشگاه است.
-ftree-loop-ivcanon
یک شمارنده متعارف برای تعداد تکرارها در حلقه هایی که برای آنها تعیین می شود ایجاد کنید
تعداد تکرار نیاز به تجزیه و تحلیل پیچیده دارد. بهینه سازی های بعدی ممکن است
تعداد را به راحتی تعیین کنید به ویژه در ارتباط با باز کردن چرخش مفید است.
-فیووپت
انجام بهینه سازی متغیرهای القایی (کاهش قدرت، متغیر القایی
ادغام و حذف متغیر القایی) روی درختان.
-ftree-parallylize-loops = n
حلقه ها را موازی کنید، یعنی فضای تکرار آنها را برای اجرا در n رشته تقسیم کنید. این هست
فقط برای حلقه هایی که تکرار آنها مستقل هستند و می توانند دلخواه باشند امکان پذیر است
دوباره سفارش داد. بهینه سازی فقط در ماشین های چند پردازنده ای برای حلقه ها سودآور است
که به جای اینکه به عنوان مثال توسط پهنای باند حافظه محدود شوند، CPU فشرده هستند. این گزینه
دلالت دارد - نخ، و بنابراین فقط در اهدافی پشتیبانی می شود که از آنها پشتیبانی می کنند
- نخ.
-ftree-pta
تجزیه و تحلیل تابع-محلی نقاط-به روی درختان را انجام دهید. این پرچم به طور پیش فرض فعال است
at -O و بالاتر
-ftree-sra
انجام تعویض اسکالر سنگدانه ها. این پاس جایگزین مراجع ساختاری می شود
با اسکالرها برای جلوگیری از تسلیم شدن ساختارها به حافظه خیلی زود. این پرچم است
فعال به طور پیش فرض در -O و بالاتر
-ftree-copyrename
تغییر نام کپی را روی درختان انجام دهید. این پاس سعی می کند نام کامپایلر موقت را به آن تغییر دهد
سایر متغیرها در مکانهای کپی، معمولاً منجر به نامهای متغیر میشوند که بیشتر
شباهت زیادی به متغیرهای اصلی دارد. این پرچم به طور پیش فرض در فعال است -O و
بالاتر
-ftree-Coalesce-inlined-vars
مجوز نام کپی را بگویید (نگاه کنید به -ftree-copyrename) تلاش برای ترکیب کاربر کوچک
متغیرها را نیز تعریف می کند، اما فقط در صورتی که از توابع دیگر خطی شده باشند. این هست یک
شکل محدودتر -ftree-Coalesce-vars. این ممکن است به اطلاعات اشکال زدایی این موارد آسیب برساند
متغیرهای inlined، اما متغیرهای تابع inlined-in را جدا از هر یک نگه می دارد
دیگر، به گونه ای که احتمال بیشتری وجود دارد که مقادیر مورد انتظار را در اشکال زدایی داشته باشند
جلسه
-ftree-Coalesce-vars
مجوز نام کپی را بگویید (نگاه کنید به -ftree-copyrename) تلاش برای ترکیب کاربر کوچک
به جای صرفاً موقتی کامپایلر، متغیرها را نیز تعریف کرد. این ممکن است به شدت محدود کند
توانایی اشکال زدایی یک برنامه بهینه سازی شده کامپایل شده با -fno-var-tracking-assignments.
در شکل نفی، این پرچم از ادغام SSA از متغیرهای کاربر از جمله جلوگیری می کند
خطوط خطی شده این گزینه به طور پیش فرض فعال است.
-ftree-ter
جایگزینی موقت بیان را در مرحله SSA-> طبیعی انجام دهید. تنها
استفاده/تک دف موقت در محل استفاده خود با تعریف خود جایگزین می شود
اصطلاح. این منجر به کد غیر GIMPLE می شود، اما به توسعه دهنده ها بسیار بیشتر می دهد
درختان پیچیده برای کار بر روی تولید RTL بهتر. این توسط فعال می شود
پیش فرض در -O و بالاتر
-ftree-slsr
کاهش قدرت خط مستقیم را روی درختان انجام دهید. این مربوطه را به رسمیت می شناسد
عباراتی که شامل ضرب هستند و آنها را با محاسبات کم هزینه جایگزین می کند
در صورت امکان این به طور پیش فرض در فعال است -O و بالاتر
-ftree-vectorize
بردارسازی را روی درختان انجام دهید. این پرچم را قادر می سازد -ftree-loop-vectorize و
-FTREE-SLP-Vectorize اگر به صراحت مشخص نشده باشد.
-ftree-loop-vectorize
بردارسازی حلقه را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O3 و وقتی که
-ftree-vectorize فعال شده است.
-FTREE-SLP-Vectorize
بردارسازی بلوک پایه را روی درختان انجام دهید. این پرچم به طور پیش فرض در فعال است -O3 و
چه زمانی -ftree-vectorize فعال شده است.
-fvect-cost-model=مدل
مدل هزینه مورد استفاده برای برداری را تغییر دهید. در مدل استدلال باید یکی از
نا محدود, پویا or ارزان. با نا محدود مدل مسیر کد برداری شده است
در حالی که با پویا مدل یک چک زمان اجرا محافظ
مسیر کد برداری شده برای فعال کردن آن فقط برای تعداد تکراری که احتمالاً اجرا می شود
سریعتر از هنگام اجرای حلقه اسکالر اصلی. در ارزان مدل غیرفعال می کند
بردار سازی حلقه ها در جایی که انجام این کار به عنوان مثال به دلیل هزینه زیاد است
زمان اجرا مورد نیاز برای وابستگی یا تراز داده ها بررسی می شود اما در غیر این صورت برابر است
پویا مدل. مدل هزینه پیشفرض به سایر پرچمهای بهینهسازی بستگی دارد و میباشد
هر دو پویا or ارزان.
-fsimd-cost-model=مدل
مدل هزینه مورد استفاده برای برداری حلقه هایی که با OpenMP یا Cilk مشخص شده اند را تغییر دهید
دستورالعمل پلاس simd. در مدل استدلال باید یکی از نا محدود, پویا, ارزان.
تمام ارزش های مدل همان معنایی دارند که در آن توضیح داده شد -fvect-cost-model و با
پیش فرض یک مدل هزینه تعریف شده با -fvect-cost-model استفاده می شود.
-ftree-vrp
انتشار محدوده ارزش را روی درختان انجام دهید. این شبیه به انتشار ثابت است
عبور می کند، اما به جای مقادیر، محدوده ای از مقادیر منتشر می شود. این اجازه می دهد تا
بهینه سازها برای حذف بررسی های غیر ضروری محدوده مانند بررسی های محدود آرایه و اشاره گر تهی
چک ها این به طور پیش فرض در فعال است -O2 و بالاتر. حذف بررسی نشانگر تهی
فقط در صورتی انجام می شود که -fdelete-null-pointer-checks فعال شده است.
-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). این اکتشافات مبتنی بر جریان کنترل است
نمودار اگر برخی از احتمالات شاخه با "__builtin_expect" مشخص شده باشند،
اکتشافی برای حدس زدن احتمالات شاخه برای بقیه جریان کنترل استفاده می شود
نمودار، با در نظر گرفتن اطلاعات "__builtin_expect". تعاملات بین
اکتشافی و "__builtin_expect" می تواند پیچیده باشد، و در برخی موارد، ممکن است مفید باشد
برای غیرفعال کردن اکتشافی به طوری که اثرات "__builtin_expect" آسان تر باشد
فهمیدن.
پیش فرض این است fguess-branch-probability در سطوح -O, -O2, -O3, -اواس.
-بلاک های سفارشی
ترتیب بلوک های اساسی را در تابع کامپایل شده مجدداً ترتیب دهید تا تعداد موارد گرفته شده کاهش یابد
شاخه ها و بهبود محل کد.
در سطوح فعال شده است -O2, -O3.
-freorder-blocks-and-partition
علاوه بر مرتب سازی مجدد بلوک های اساسی در تابع کامپایل شده، به منظور کاهش
تعداد شاخه های گرفته شده، بلوک های سرد و گرم اصلی را به بخش های جداگانه تقسیم می کند
از فایل های اسمبلی و .o، برای بهبود عملکرد صفحه بندی و محل ذخیره کش.
این بهینه سازی به صورت خودکار در حضور مدیریت استثنا خاموش می شود.
برای بخش های linkonce، برای توابع با ویژگی بخش تعریف شده توسط کاربر و در هر کدام
معماری که از بخش های نامگذاری شده پشتیبانی نمی کند.
برای x86 در سطوح فعال شده است -O2, -O3.
توابع -freorder
ترتیب توابع را در فایل شیء به منظور بهبود موقعیت کد. این هست
با استفاده از بخش های فرعی ویژه ".text.hot" برای اغلب موارد اجرا شده پیاده سازی شده است
توابع و ".text.unlikely" برای توابع غیرمحتمل اجرا شده. سفارش مجدد توسط
پیوند دهنده بنابراین فرمت فایل شی باید از بخش های نامگذاری شده پشتیبانی کند و پیوند دهنده باید قرار گیرد
آنها را به روشی معقول.
همچنین بازخورد نمایه باید در دسترس باشد تا این گزینه موثر باشد. دیدن
-fprofile-arcs برای جزئیات بیشتر.
در سطوح فعال شده است -O2, -O3, -اواس.
fstrict-aliasing
به کامپایلر اجازه دهید تا سختگیرانهترین قوانین نامگذاری را که برای زبان قابل اعمال است، در نظر بگیرد
در حال تدوین برای C (و C++)، این بهینهسازیها را بر اساس نوع فعال میکند
اصطلاحات. به طور خاص، یک شی از یک نوع فرض می شود که هرگز در آن ساکن نیست
همان آدرس به عنوان یک شی از نوع متفاوت، مگر اینکه انواع تقریباً یکسان باشند.
به عنوان مثال، یک "int بدون علامت" می تواند مستعار "int" باشد، اما نه "void*" یا "double". آ
نوع کاراکتر ممکن است مستعار هر نوع دیگری باشد.
به کدهای زیر توجه ویژه ای داشته باشید:
اتحادیه a_union {
بین من
دو d;
};
int f() {
اتحادیه a_union t;
td = 3.0;
بازگشت ti;
}
تمرین خواندن از اعضای اتحادیه متفاوت از اخیرا
نوشته شده به (به نام "نوع مجازات") رایج است. حتی با fstrict-aliasing، نوع
punning مجاز است، مشروط بر اینکه حافظه از طریق نوع اتحاد قابل دسترسی باشد. بنابراین
کد بالا همانطور که انتظار می رود کار می کند. با این حال، این کد ممکن است:
int f() {
اتحادیه a_union t;
int* ip ؛
td = 3.0;
ip = &t.i;
بازگشت *ip;
}
به طور مشابه، با گرفتن آدرس، ارسال نشانگر به دست آمده و
عدم ارجاع نتیجه رفتار نامشخصی دارد، حتی اگر بازیگران از نوع اتحاد استفاده کنند،
به عنوان مثال:
int f() {
دو برابر d = 3.0;
return ((union a_union *) &d)->i;
}
La fstrict-aliasing گزینه در سطوح فعال است -O2, -O3, -اواس.
-fstrict-سرریز
به کامپایلر اجازه دهید بسته به زبان، قوانین سرریز امضا شده سختگیرانه را در نظر بگیرد
در حال تدوین برای C (و C++) این به این معنی است که هنگام انجام حساب با آن سرریز می شود
اعداد امضا شده تعریف نشده است، به این معنی که کامپایلر ممکن است فرض کند که اینطور نیست
به وقوع پیوستن. این امکان بهینه سازی های مختلف را فراهم می کند. برای مثال، کامپایلر چنین فرض می کند
عبارتی مانند "i + 10 > i" همیشه برای علامت "i" صادق است. این فرض است
فقط در صورتی معتبر است که سرریز علامت تعریف نشده باشد، زیرا اگر "i + 10" عبارت نادرست است.
هنگام استفاده از محاسبات مکمل دوگانه سرریز می شود. هنگامی که این گزینه در حال اجرا است
تلاش برای تعیین اینکه آیا عملیات روی سرریز اعداد امضا شده باید نوشته شود یا خیر
دقت کنید تا در واقع سرریز نشود.
این گزینه همچنین به کامپایلر اجازه می دهد تا معنای دقیق اشاره گر را فرض کند: با توجه به a
اشاره گر به یک شی، اگر اضافه کردن یک افست به آن اشاره گر نشانگر تولید نمی کند
به همان شیء، اضافه تعریف نشده است. این به کامپایلر اجازه می دهد تا نتیجه گیری کند
که "p + u > p" همیشه برای یک اشاره گر "p" و عدد صحیح بدون علامت "u" صادق است. این
فرض فقط به این دلیل معتبر است که نشانگر wraparound تعریف نشده است، همانطور که عبارت است
نادرست است اگر "p + u" با استفاده از محاسبات مکمل دو سرریز شود.
همچنین ببینید -fwrapv گزینه. استفاده كردن -fwrapv به این معنی است که سرریز علامت عدد صحیح است
کاملاً تعریف شده: می پیچد. چه زمانی -fwrapv استفاده می شود، هیچ تفاوتی بین آنها وجود ندارد
-fstrict-سرریز و -فنو-سخت-سرریز برای اعداد صحیح با -fwrapv انواع خاصی
سرریز مجاز هستند. به عنوان مثال، اگر کامپایلر هنگام انجام یک سرریز شود
با محاسبه روی ثابت ها، مقدار سرریز شده همچنان می تواند با آن استفاده شود -fwrapv، اما نه
در غیر این صورت.
La -fstrict-سرریز گزینه در سطوح فعال است -O2, -O3, -اواس.
-عملکردهای falign
-falign-functions=n
شروع توابع را با توان بعدی دو بزرگتر تراز کنید n، پرش تا n
بایت ها برای مثال، -falign-functions=32 توابع را با 32 بایت بعدی تراز می کند
مرز، اما -falign-functions=24 فقط در این صورت با مرز 32 بایت بعدی تراز می شود
را می توان با رد 23 بایت یا کمتر انجام داد.
-fno-align-functions و -falign-functions=1 معادل هستند و به معنی توابع هستند
همسو نیستند.
برخی اسمبلرها فقط زمانی از این پرچم پشتیبانی می کنند n توان دو است. در آن صورت است
گرد کردن.
If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید.
در سطوح فعال شده است -O2, -O3.
-falign-labels
-این برچسب ها =n
همه اهداف شاخه را در یک مرز توان دو، با پرش تا مرز تراز کنید n بایت مانند
-عملکردهای falign. این گزینه به راحتی می تواند کد را کندتر کند، زیرا باید درج شود
عملیات ساختگی برای زمانی که به هدف شاخه در جریان معمول کد رسیده است.
-fno-align-labels و -بای برچسب = 1 معادل هستند و به این معنی است که برچسب ها نیستند
هم راستا.
If -فالین-حلقه ها or -فالین-پرش قابل اجرا هستند و بزرگتر از این مقدار هستند
به جای آن از مقادیر آنها استفاده می شود.
If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید که بسیار محتمل است
به 1، به معنی عدم تراز.
در سطوح فعال شده است -O2, -O3.
-فالین-حلقه ها
-falign-loops=n
حلقهها را به مرز دو توان تراز کنید و از آن بگذرید n بایت مانند -عملکردهای falign.
اگر حلقه ها بارها اجرا شوند، هر گونه اجرای ساختگی را جبران می کند
عملیات.
-fno-align-loops و -falign-loops=1 معادل هستند و به این معنی است که حلقه ها نیستند
هم راستا.
If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید.
در سطوح فعال شده است -O2, -O3.
-فالین-پرش
-falign-jumps=n
اهداف شاخهای را با مرز قدرت دو تنظیم کنید، برای اهداف شاخهای که در آن اهداف قرار دارند
فقط با پریدن و پرش تا بالا می توان به آن رسید n بایت مانند -عملکردهای falign. به
در این مورد، هیچ عملیات ساختگی لازم نیست اجرا شود.
-fno-align-jumps و -falign-jumps=1 معادل هستند و به این معنی است که حلقه ها نیستند
هم راستا.
If n مشخص نشده است یا صفر است، از یک پیش فرض وابسته به ماشین استفاده کنید.
در سطوح فعال شده است -O2, -O3.
-funit در یک زمان
این گزینه به دلایل سازگاری باقی مانده است. -funit در یک زمان هیچ تاثیری ندارد، در حالی که
-fno-واحد-در-یک-زمان دلالت دارد -fno-toplevel-reorder و fno-section-anchors.
به طور پیش فرض فعال شده است.
-fno-toplevel-reorder
توابع سطح بالا، متغیرها و عبارات "asm" را دوباره ترتیب ندهید. آنها را در خروجی قرار دهید
همان ترتیبی که در فایل ورودی ظاهر می شوند. وقتی از این گزینه استفاده می شود،
متغیرهای استاتیک ارجاع نشده حذف نمی شوند. این گزینه برای پشتیبانی در نظر گرفته شده است
کد موجود که بر یک سفارش خاص متکی است. برای کد جدید بهتر است استفاده کنید
صفات در صورت امکان
در سطح فعال شد -O0. هنگامی که به طور صریح غیرفعال است، همچنین به معنای آن است fno-section-anchors,
که در غیر این صورت در فعال می شود -O0 روی برخی اهداف
- وب
وب ها را همانطور که معمولاً برای اهداف تخصیص ثبت استفاده می شود می سازد و هر وب را اختصاص می دهد
ثبت شبه فردی این اجازه می دهد تا پاس تخصیص ثبت نام کار کند
شبه مستقیم، اما چندین پاس بهینه سازی دیگر مانند CSE را نیز تقویت می کند،
بهینه ساز حلقه و حذف کننده کد مرده بی اهمیت. با این حال، می تواند اشکال زدایی ایجاد کند
غیر ممکن است، زیرا متغیرها دیگر در یک "ثبت خانه" باقی نمی مانند.
فعال به طور پیش فرض با -funroll-loops.
کل برنامه
فرض کنید واحد کامپایل فعلی کل برنامه در حال کامپایل را نشان می دهد.
همه توابع و متغیرهای عمومی به استثنای "main" و آنهایی که توسط ادغام شده اند
ویژگی "externally_visible" به توابع ثابت تبدیل می شود و در عمل بهینه می شود
به طور تهاجمی تر توسط بهینه سازهای بین رویه ای.
این گزینه نباید در ترکیب با -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 و نوار، آنها را با هم در یک واحد ادغام می کند
نمایش GIMPLE و بهینه سازی آنها به طور معمول برای تولید myprog.
تنها نکته مهمی که باید در نظر داشته باشید این است که بهینه سازی زمان پیوند را فعال کنید
برای انجام پیوند مرحله باید از درایور GCC استفاده کنید. سپس GCC به طور خودکار انجام می شود
بهینه سازی زمان پیوند اگر هر یک از اشیاء درگیر با آن کامپایل شده باشد -flto
گزینه خط فرمان به طور کلی باید گزینه های بهینه سازی مورد استفاده را مشخص کنید
برای بهینهسازی زمان پیوند، اگرچه GCC سعی میکند در حدس زدن بهینهسازی هوشمندانه عمل کند
سطحی برای استفاده از گزینه های مورد استفاده در زمان کامپایل اگر نتوانستید یکی را در پیوند مشخص کنید
زمان. همیشه میتوانید تصمیم خودکار برای انجام بهینهسازی زمان پیوند را لغو کنید
پیوند زمان با گذشت -fno-lto به دستور پیوند.
برای اینکه بهینه سازی کل برنامه موثر باشد، لازم است یک کل مشخصی ایجاد شود
مفروضات برنامه کامپایلر باید بداند که چه توابع و متغیرهایی می توانند باشند
توسط کتابخانه ها و زمان اجرا خارج از واحد بهینه سازی زمان پیوند قابل دسترسی است. چه زمانی
پشتیبانی شده توسط پیوند دهنده، افزونه پیوند دهنده (نگاه کنید به فیوز-لینکر-پلاگین) می گذرد
اطلاعات به کامپایلر در مورد نمادهای استفاده شده و قابل مشاهده خارجی. وقتی که
پلاگین لینکر در دسترس نیست، کل برنامه باید برای اجازه دادن به کامپایلر استفاده شود
برای ایجاد این مفروضات، که منجر به تصمیمات بهینه سازی تهاجمی تر می شود.
چه زمانی فیوز-لینکر-پلاگین هنگامی که یک فایل با کامپایل می شود فعال نمی شود -fltoاز
فایل شی تولید شده بزرگتر از یک فایل شی معمولی است زیرا حاوی GIMPLE است
کدهای بایت و کد نهایی معمول (نگاه کنید به -ffat-lto-اشیاء. این به معنای آن شی است
فایل های دارای اطلاعات LTO را می توان به عنوان فایل های شی معمولی پیوند داد. اگر -fno-lto تصویب شده است
برای پیوند دهنده، هیچ بهینه سازی بین رویه ای اعمال نمی شود. توجه داشته باشید که وقتی
-fno-fat-lto-objects فعال است مرحله کامپایل سریعتر است اما نمی توانید a را انجام دهید
پیوند منظم و غیر LTO روی آنها.
علاوه بر این، پرچمهای بهینهسازی مورد استفاده برای کامپایل فایلهای فردی نیستند
لزوماً مربوط به موارد استفاده شده در زمان پیوند است. برای مثال،
gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o
این فایلهای شی منفرد را با کد اسمبلر بهینهنشده تولید میکند، اما
باینری حاصل myprog در بهینه سازی شده است -O3. اگر در عوض، باینری نهایی باشد
تولید شده با -fno-lto، و سپس myprog بهینه نشده است
هنگام تولید باینری نهایی، GCC فقط بهینهسازی زمان پیوند را برای آنها اعمال میکند
فایل هایی که حاوی بایت کد هستند. بنابراین، می توانید فایل های شی را با هم ترکیب و مطابقت دهید
کتابخانه هایی با کد بایت GIMPLE و کد شی نهایی. GCC به طور خودکار انتخاب می کند
کدام فایلها را در حالت LTO بهینهسازی کنید و کدام فایلها را بدون بیشتر پیوند دهید
در حال پردازش.
برخی از پرچم های تولید کد وجود دارند که توسط GCC هنگام تولید بایت کدها حفظ می شوند
آنها باید در مرحله پیوند نهایی استفاده شوند. به طور کلی گزینه های مشخص شده در
پیوند-زمان مواردی را که در زمان کامپایل مشخص شده اند نادیده می گیرد.
اگر گزینه سطح بهینه سازی را مشخص نکنید -O در زمان پیوند و سپس GCC محاسبه می کند
یکی بر اساس سطوح بهینه سازی مورد استفاده در هنگام کامپایل فایل های شی. در
بالاترین سطح بهینه سازی در اینجا برنده می شود.
در حال حاضر گزینه های زیر و تنظیمات آنها برگرفته از فایل شی اول است
که به صراحت آن را مشخص کرد: -fPIC, -fpic, -fpie, -fcommon, - استثنائات,
-fnon-call-exceptions, -fgnu-tm و همه -m پرچم های هدف
برخی از پرچمهای تغییر ABI باید در همه واحدهای کامپایل و آزمایش مطابقت داشته باشند
برای لغو این در زمان پیوند با مقدار متضاد نادیده گرفته می شود. این شامل
گزینه هایی مانند -Freg-struct-return و -fpcc-struct-return.
گزینه های دیگر مانند -ffp-contract, -فنو-سخت-سرریز, -fwrapv, -fno-trapv or
-fno-strict-aliasing به مرحله پیوند منتقل می شوند و به صورت محافظه کارانه ادغام می شوند
برای واحدهای ترجمه متناقض به طور مشخص -فنو-سخت-سرریز, -fwrapv و
-fno-trapv اولویت داشته باشند و به عنوان مثال -ffp-contract = خاموش بر آن اولویت دارد
-ffp-contract=سریع. شما می توانید آنها را در زمان پیوند لغو کنید.
توصیه می شود تمام فایل های شرکت کننده در همان لینک را با آن کامپایل کنید
همان گزینه ها و همچنین آن گزینه ها را در زمان پیوند مشخص کنید.
اگر LTO با اشیایی با پیوند C مواجه شود که با انواع ناسازگار به طور جداگانه اعلام شده است
واحدهای ترجمه باید به یکدیگر مرتبط شوند (رفتار تعریف نشده بر اساس ISO C99
6.2.7)، ممکن است یک تشخیص غیرکشنده صادر شود. رفتار هنوز در اجرا تعریف نشده است
زمان. تشخیص مشابه ممکن است برای زبان های دیگر مطرح شود.
یکی دیگر از ویژگی های LTO این است که امکان اعمال بهینه سازی های بین رویه ای وجود دارد
در فایل های نوشته شده به زبان های مختلف:
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).
اگر فایلهای شی حاوی بایت کد GIMPLE در یک آرشیو کتابخانه ذخیره میشوند، مثلاً
libfoo.a، امکان استخراج و استفاده از آنها در یک لینک LTO وجود دارد اگر از a استفاده می کنید
پیوند دهنده با پشتیبانی از افزونه برای ایجاد کتابخانه های استاتیک مناسب برای LTO، استفاده کنید gcc-ar
و gcc-ranlib بجای ar و ranlib; برای نشان دادن نمادهای فایل های شی با
بایت کد GIMPLE، استفاده کنید gcc-nm. این دستورات مستلزم آن هستند ar, ranlib و nm شده اند
با پشتیبانی افزونه کامپایل شده است. در زمان پیوند، از پرچم استفاده کنید فیوز-لینکر-پلاگین به
اطمینان حاصل کنید که کتابخانه در فرآیند بهینه سازی LTO شرکت می کند:
gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo
با فعال بودن پلاگین لینکر، پیوند دهنده فایل های GIMPLE مورد نیاز را از آن استخراج می کند
libfoo.a و آنها را به شورای همکاری خلیج فارس در حال اجرا منتقل می کند تا آنها را به بخشی از مجموعه تبدیل کند
تصویر GIMPLE بهینه می شود.
اگر از پیوند دهنده با پشتیبانی افزونه استفاده نمی کنید و/یا پیوند دهنده را فعال نمی کنید
افزونه، سپس اشیاء داخل libfoo.a طبق معمول استخراج و پیوند می شوند، اما آنها
در فرآیند بهینه سازی LTO شرکت نکنید. به منظور ایجاد یک کتابخانه استاتیک
هم برای بهینه سازی LTO و هم برای پیوند معمولی مناسب است، فایل های شی آن را با
-flto -ffat-lto-اشیاء.
بهینه سازی زمان لینک برای کار کردن نیازی به حضور کل برنامه ندارد.
اگر برنامه نیاز به هیچ علامتی برای صادرات نداشته باشد، امکان ترکیب وجود دارد
-flto و کل برنامه به بهینه سازهای بین رویه ای اجازه می دهد تا بیشتر استفاده کنند
مفروضات تهاجمی که ممکن است منجر به بهبود فرصت های بهینه سازی شود. استفاده از
کل برنامه هنگامی که افزونه پیوند دهنده فعال است مورد نیاز نیست (نگاه کنید به فیوز-لینکر-پلاگین).
اجرای فعلی LTO هیچ تلاشی برای تولید بایت کدی که هست انجام نمی دهد
قابل حمل بین انواع مختلف هاست فایل های بایت کد نسخه شده و وجود دارد
یک بررسی دقیق نسخه است، بنابراین فایل های بایت کد تولید شده در یک نسخه از GCC انجام نمی شود
با نسخه قدیمی یا جدیدتر GCC کار کنید.
بهینه سازی زمان لینک با تولید اطلاعات اشکال زدایی به خوبی کار نمی کند.
ترکیب -flto با -g در حال حاضر آزمایشی است و انتظار می رود تولید غیرمنتظره ای داشته باشد
نتایج.
اگر اختیاری را مشخص کنید n، بهینه سازی و تولید کد در زمان پیوند انجام می شود
با استفاده موازی اجرا می شود n کارهای موازی با استفاده از نصب شده ساخت برنامه است.
متغیر محیطی خلق کنید ممکن است برای نادیده گرفتن برنامه استفاده شده استفاده شود. پیشفرض
ارزش برای n 1 است
همچنین می توانید مشخص کنید -flto=jobserver برای استفاده از حالت سرور شغلی ساخت گنو برای تعیین
تعداد مشاغل موازی این زمانی مفید است که Makefile در حال فراخوانی GCC باشد
اجرا به صورت موازی شما باید a + به دستور دستور در والد
برای این کار فایل ایجاد کنید. این گزینه احتمالا فقط در صورتی کار می کند که خلق کنید ساخت گنو است.
-flto-partition =جلبک
الگوریتم پارتیشن بندی مورد استفاده توسط بهینه ساز زمان پیوند را مشخص کنید. ارزش است
هر دو 1to1 برای تعیین یک پارتیشن بندی که فایل های منبع اصلی را منعکس می کند یا متعادل
برای تعیین پارتیشن بندی به قطعات هم اندازه (در صورت امکان) یا حداکثر برای ایجاد
پارتیشن جدید برای هر نماد در صورت امکان. مشخص کردن هیچ به عنوان یک الگوریتم
پارتیشن بندی و استریم را به طور کامل غیرفعال می کند. مقدار پیش فرض است متعادل. در حالی که
1to1 می تواند به عنوان راه حلی برای مسائل مختلف سفارش کد استفاده شود حداکثر
پارتیشن بندی فقط برای تست داخلی در نظر گرفته شده است. ارزش یک مشخص می کند که
دقیقاً یک پارتیشن باید در حالی که مقدار استفاده شود هیچ دور زدن پارتیشن بندی و
مرحله بهینه سازی زمان پیوند را مستقیماً از مرحله WPA اجرا می کند.
-flto-odr-نوع-ادغام
پخش جریانی نام انواع مخدوش انواع C++ و یکسان سازی آنها را در
زمان پیوند این اندازه فایل های شی LTO را افزایش می دهد، اما تشخیص را در مورد One فعال می کند
نقض قوانین تعریف
-flto-compression-level=n
این گزینه میزان فشرده سازی مورد استفاده برای زبان نوشتاری متوسط را مشخص می کند
به فایل های شی LTO، و تنها در رابطه با حالت LTO معنادار است (-flto).
مقادیر معتبر 0 (بدون فشرده سازی) تا 9 (حداکثر فشرده سازی) است. ارزش های خارج از این
محدوده به 0 یا 9 بسته می شود. اگر گزینه داده نشده است، یک تعادل پیش فرض وجود دارد
تنظیم فشرده سازی استفاده می شود.
-flto-گزارش
گزارشی با جزئیات داخلی در مورد عملکرد بهینهساز زمان پیوند چاپ میکند. را
محتوای این گزارش از نسخه ای به نسخه دیگر متفاوت است. قرار است برای GCC مفید باشد
توسعه دهندگان هنگام پردازش فایل های شی در حالت LTO (از طریق -flto).
به طور پیش فرض غیر فعال شده است
-flto-report-wpa
پسندیدن -flto-گزارش، اما فقط برای مرحله WPA از Link Time Optimization چاپ کنید.
فیوز-لینکر-پلاگین
استفاده از پلاگین لینکر را در طول بهینه سازی زمان پیوند فعال می کند. این گزینه متکی است
در پشتیبانی از افزونه در پیوند دهنده، که به رنگ طلایی یا در GNU ld 2.21 یا موجود است
جدیدتر
این گزینه استخراج فایل های شی با بایت کد GIMPLE را از کتابخانه فعال می کند
آرشیوها این امر کیفیت بهینه سازی را با قرار دادن کدهای بیشتر در پیوند بهبود می بخشد.
بهینه ساز زمان این اطلاعات مشخص می کند که به چه نمادهایی می توان از خارج دسترسی داشت
(توسط شی غیر LTO یا در حین پیوند پویا). در نتیجه بهبود کیفیت کد روشن است
باینری ها (و کتابخانه های مشترکی که از قابلیت مشاهده پنهان استفاده می کنند) مشابه هستند
کل برنامهاست. دیدن -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 بدون چربی، برای استفاده باید اصلاح شوند
آنها.
پیش فرض این است -fno-fat-lto-objects در اهداف با پشتیبانی از پلاگین لینکر.
-FCOMPARE-elim
پس از تخصیص ثبت و تقسیم دستورالعمل تخصیص پس از ثبت نام، شناسایی کنید
دستورالعمل های حسابی که پرچم های پردازنده را شبیه به یک عملیات مقایسه محاسبه می کند
بر اساس آن حساب در صورت امکان، عملیات مقایسه صریح را حذف کنید.
این مجوز فقط برای اهداف خاصی اعمال می شود که نمی توانند به صراحت نشان دهند
عملیات مقایسه قبل از تکمیل تخصیص ثبت.
در سطوح فعال شده است -O, -O2, -O3, -اواس.
-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=مسیر
بهینهسازیهای مبتنی بر بازخورد نمایه و بهینهسازیهای زیر را فعال کنید
به طور کلی فقط با بازخورد نمایه در دسترس هستند: -شاخه-احتمالات,
-fvpt, -funroll-loops, -fpeel-loops, ردیاب, -ftree-vectorizeو سه حلقه-
توزیع-الگوها.
بهطور پیشفرض، اگر نمایههای بازخورد با آن مطابقت نداشته باشند، GCC یک پیام خطا منتشر میکند
کد منبع این خطا را می توان با استفاده به یک هشدار تبدیل کرد -پوشش-عدم تطابق.
توجه داشته باشید این ممکن است منجر به بهینه سازی ضعیف کد شود.
If مسیر مشخص شده است، GCC به نظر می رسد مسیر برای یافتن فایل های داده بازخورد نمایه
دیدن -fprofile-dir.
-پروفایل خودکار
-fauto-profile=مسیر
بهینهسازیهای مبتنی بر بازخورد و بهینهسازیهای زیر را فعال کنید
که معمولاً فقط با بازخورد نمایه در دسترس هستند:
-شاخه-احتمالات, -fvpt, -funroll-loops, -fpeel-loops, ردیاب,
-ftree-vectorize, توابع -finline, -fipa-cp, -fipa-cp-clone,
- پیش بینی کننده - مشترک, -funswitch-loops, -fgcse-after-reloadو
الگوی-حلقه-دور-توزیع.
مسیر نام یک فایل حاوی اطلاعات نمایه AutoFDO است. در صورت حذف، آن را
پیش فرض به fbdata.afdo در دایرکتوری فعلی
برای تولید یک فایل داده پروفایل AutoFDO نیاز به اجرای برنامه شما با پرفیوم
ابزار در یک سیستم هدف پشتیبانی شده گنو/لینوکس. برای اطلاعات بیشتر ببین
<https://perf.wiki.kernel.org/>.
به عنوان مثال
رکورد perf -e br_inst_retired:near_taken -b -o perf.data \
- برنامه_ شما
سپس از create_gcov ابزاری برای تبدیل داده های نمایه خام به فرمتی که می تواند باشد
توسط GCC استفاده می شود. شما همچنین باید باینری unstripped را برای برنامه خود به این مورد ارائه دهید
ابزار دیدنhttps://github.com/google/autofdo>.
به عنوان مثال
create_gcov --binary=your_program.unstripped --profile=perf.data \
--gcov=profile.afdo
گزینه های زیر رفتار کامپایلر را در مورد محاسبات ممیز شناور کنترل می کنند.
این گزینه ها بین سرعت و درستی معامله می شوند. همه باید به طور خاص فعال شوند.
-float-store
متغیرهای ممیز شناور را در رجیسترها ذخیره نکنید و گزینه های دیگر را مهار نکنید
ممکن است تغییر کند که آیا یک مقدار ممیز شناور از یک ثبات یا حافظه گرفته شده است.
این گزینه از دقت بیش از حد نامطلوب در ماشین هایی مانند 68000 جلوگیری می کند
رجیسترهای شناور (از 68881) دقت بیشتری نسبت به "دبل" فرضی دارند.
داشتن. به طور مشابه برای معماری x86. برای اکثر برنامه ها، دقت بیش از حد
فقط خوب است، اما چند برنامه به تعریف دقیق IEEE شناور تکیه می کنند
نقطه. استفاده کنید -float-store برای چنین برنامه هایی، پس از تغییر آنها برای ذخیره همه
محاسبات میانی مربوط به متغیرها
-fexcess-precision=سبک
این گزینه اجازه می دهد تا کنترل بیشتری بر دقت بیش از حد در ماشین هایی که شناور هستند
رجیسترهای نقطه ای دقت بیشتری نسبت به انواع "float" و "double" IEEE دارند
پردازنده از عملیات گرد کردن به آن انواع پشتیبانی نمی کند. به صورت پیش فرض،
-fexcess-precision=سریع در حال اجرا است؛ این بدان معنی است که عملیات در
دقت رجیسترها و غیرقابل پیش بینی بودن آن هنگام گرد کردن به انواع
مشخص شده در کد منبع صورت می گیرد. هنگام کامپایل C، اگر
-fexcess-precision=استاندارد مشخص می شود سپس دقت بیش از حد از قوانین پیروی می کند
مشخص شده در ISO C99؛ به طور خاص، هر دو نقش و تخصیص باعث می شوند که مقادیر باشند
گرد شده به انواع معنایی آنها (در حالی که -float-store فقط بر تکالیف تأثیر می گذارد).
این گزینه به طور پیش فرض برای C فعال است اگر یک گزینه انطباق دقیق مانند
-std=c99 استفاده می شود.
-fexcess-precision=استاندارد برای زبان هایی غیر از C اجرا نمی شود و هیچ
اثر اگر -بهینهسازیهای ریاضی و سرگرمکننده or سریع-ریاضی مشخص شده است. در x86، آن را
همچنین هیچ تاثیری ندارد اگر -mfpMath = SSE or -mfpmath=sse+387 مشخص شده است؛ در سابق
در مورد، معنای IEEE بدون دقت بیش از حد اعمال می شود، و در مورد دوم، گرد کردن است
غیر قابل پیش بینی.
سریع-ریاضی
گزینه ها را تنظیم می کند -fno-math-errno, -بهینهسازیهای ریاضی و سرگرمکننده, -فقط ریاضی محدود,
-منهای دور, -fno-signaling-nans و -fcx-limited-range.
این گزینه باعث می شود که ماکرو پیش پردازنده "__FAST_MATH__" تعریف شود.
این گزینه توسط هیچ کدام روشن نمی شود -O علاوه بر این گزینه سریع از آنجایی که می تواند منجر شود
خروجی نادرست برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارد
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند.
-fno-math-errno
پس از فراخوانی توابع ریاضی که با یک واحد اجرا می شوند، «errno» را تنظیم نکنید
دستورالعمل، به عنوان مثال، "sqrt". برنامه ای که برای خطاهای ریاضی به استثناهای IEEE متکی است
هندلینگ ممکن است بخواهد از این پرچم برای سرعت و در عین حال حفظ محاسبات IEEE استفاده کند
سازگاری.
این گزینه توسط هیچ کدام روشن نمی شود -O گزینه زیرا می تواند منجر به خروجی نادرست شود
برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارند
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند.
پیش فرض این است -fmath-errno.
در سیستم های داروین، کتابخانه ریاضی هرگز "errno" را تنظیم نمی کند. بنابراین هیچ دلیلی وجود ندارد
تا کامپایلر این امکان را در نظر بگیرد که ممکن است، و -fno-math-errno هست
به طور پیش فرض
-بهینهسازیهای ریاضی و سرگرمکننده
بهینه سازی هایی برای محاسبات ممیز شناور مجاز است که (الف) آرگومان ها و
نتایج معتبر هستند و (ب) ممکن است استانداردهای IEEE یا ANSI را نقض کنند. هنگامی که در زمان پیوند استفاده می شود،
ممکن است شامل کتابخانه ها یا فایل های راه اندازی باشد که کلمه کنترل پیش فرض FPU یا
سایر بهینه سازی های مشابه
این گزینه توسط هیچ کدام روشن نمی شود -O گزینه زیرا می تواند منجر به خروجی نادرست شود
برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارند
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند. را قادر می سازد
-fno-signed-zeros, -fno-به دام انداختن-ریاضی, -تعدادی-ریاضی و -مقاومتی-ریاضی.
پیش فرض این است -fno-unsafe-math-optimizations.
-تعدادی-ریاضی
اجازه ارتباط مجدد عملوندها در یک سری عملیات ممیز شناور. این
با احتمالاً تغییر در نتیجه محاسبات، استاندارد زبان ISO C و C++ را نقض می کند.
توجه: مرتب کردن مجدد ممکن است علامت صفر را تغییر دهد و همچنین NaN ها را نادیده بگیرد و از یا
ایجاد underflow یا overflow (و بنابراین نمی توان روی کدهایی که متکی به گرد کردن هستند استفاده کرد
رفتاری مانند "(x + 2**52) - 2**52". همچنین ممکن است مقایسه های ممیز شناور را دوباره ترتیب دهد و
بنابراین زمانی که نیاز به مقایسه سفارشی است، نمی توان از آن استفاده کرد. این گزینه به آن نیاز دارد
هر دو -fno-signed-zeros و -fno-به دام انداختن-ریاضی در حال اجرا باشد. علاوه بر این، آن را نمی سازد
حس بسیار با -بنیادسازی-ریاضی. برای Fortran این گزینه به طور خودکار فعال می شود زمانی که
هر دو -fno-signed-zeros و -fno-به دام انداختن-ریاضی در حال اجرا هستند.
پیش فرض این است -fno-تداعی-ریاضی.
-مقاومتی-ریاضی
در صورت این، به جای تقسیم بر مقدار، اجازه استفاده متقابل یک مقدار را بدهید
بهینه سازی را امکان پذیر می کند. به عنوان مثال "x / y" را می توان با "x * (1/y)" جایگزین کرد
در صورتی مفید است که "(1/y)" در معرض حذف زیرعبارات رایج باشد. توجه داشته باشید که این
دقت را از دست می دهد و تعداد فلاپ هایی را که روی مقدار کار می کنند افزایش می دهد.
پیش فرض این است -fno-reciprocal-math.
-فقط ریاضی محدود
اجازه بهینه سازی برای محاسبات ممیز شناور که آرگومان ها و
نتایج NaN یا +-Infs نیستند.
این گزینه توسط هیچ کدام روشن نمی شود -O گزینه زیرا می تواند منجر به خروجی نادرست شود
برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارند
قوانین/مشخصات برای توابع ریاضی. با این حال، ممکن است کد سریع تری برای آن ارائه دهد
برنامه هایی که به ضمانت این مشخصات نیاز ندارند.
پیش فرض این است -فقط-fno-finite-math.
-fno-signed-zeros
اجازه بهینه سازی برای محاسبات ممیز شناور که علامت صفر را نادیده می گیرد.
محاسبات IEEE رفتار مقادیر متمایز +0.0 و -0.0 را مشخص می کند که سپس
ساده سازی عباراتی مانند x+0.0 یا 0.0*x (حتی با
-فقط ریاضی محدود). این گزینه به این معنی است که علامت یک نتیجه صفر نیست
قابل توجه.
پیش فرض این است -fsigned-صفرها.
-fno-به دام انداختن-ریاضی
کامپایل کد با این فرض که عملیات ممیز شناور نمی تواند کاربر قابل مشاهده است
تله ها این تله ها شامل تقسیم بر صفر، سرریز، زیر جریان، نتیجه غیر دقیق و
عملیات نامعتبر این گزینه به آن نیاز دارد -fno-signaling-nans در حال اجرا باشد.
تنظیم این گزینه ممکن است کدهای سریع تری را در صورت تکیه بر محاسبات "بدون توقف" IEEE امکان پذیر کند.
به عنوان مثال.
این گزینه هرگز نباید توسط هیچکس روشن شود -O گزینه از آنجایی که می تواند منجر شود
خروجی نادرست برای برنامه هایی که به اجرای دقیق IEEE یا ISO بستگی دارد
قوانین/مشخصات برای توابع ریاضی.
پیش فرض این است -trapping-math.
-بنیادسازی-ریاضی
تبدیل ها و بهینه سازی هایی را که گرد کردن ممیز شناور پیش فرض را فرض می کنند غیرفعال کنید
رفتار - اخلاق. این دور به صفر برای همه تبدیلهای ممیز شناور به عدد صحیح است و
گرد به نزدیک ترین برای همه برش های حسابی دیگر. این گزینه باید باشد
برای برنامه هایی که حالت گرد کردن FP را به صورت پویا تغییر می دهند، یا ممکن است مشخص شود
با حالت گرد کردن غیر پیش فرض اجرا می شود. این گزینه تا زدن دائمی را غیرفعال می کند
عبارات ممیز شناور در زمان کامپایل (که ممکن است تحت تأثیر حالت گرد کردن قرار گیرند)
و تبدیلات حسابی که در حضور وابسته به علامت ناامن هستند
حالت های گرد کردن
پیش فرض این است -منهای دور.
این گزینه آزمایشی است و در حال حاضر تضمینی برای غیرفعال کردن همه GCC نمی دهد
بهینه سازی هایی که تحت تاثیر حالت گرد کردن قرار می گیرند. ممکن است نسخه های آینده GCC ارائه شود
کنترل دقیق تر این تنظیم با استفاده از پراگما "FENV_ACCESS" C99. این خط فرمان
گزینه برای تعیین حالت پیش فرض برای "FENV_ACCESS" استفاده خواهد شد.
-fsignaling-nans
کامپایل کد با این فرض که IEEE سیگنالینگ NaNs ممکن است تله های قابل مشاهده توسط کاربر در طول ایجاد کند
عملیات ممیز شناور تنظیم این گزینه بهینه سازی هایی را که ممکن است تغییر کنند غیرفعال می کند
تعداد استثناهای قابل مشاهده با سیگنال NaNs. این گزینه دلالت دارد
-trapping-math.
این گزینه باعث می شود که ماکرو پیش پردازنده "__SUPPORT_SNAN__" تعریف شود.
پیش فرض این است -fno-signaling-nans.
این گزینه آزمایشی است و در حال حاضر تضمینی برای غیرفعال کردن همه GCC نمی دهد
بهینهسازیهایی که بر رفتار سیگنالدهی NaN تأثیر میگذارند.
-fsingle-precision-constant
به جای تبدیل ضمنی، ثابت های ممیز شناور را به عنوان یک دقت واحد در نظر بگیرید
آنها را به ثابت های با دقت دو برابر می کنند.
-fcx-limited-range
هنگامی که فعال است، این گزینه بیان می کند که یک مرحله کاهش محدوده زمانی لازم نیست
انجام تقسیم پیچیده همچنین، هیچ بررسی وجود ندارد که آیا نتیجه a
ضرب یا تقسیم مختلط "NaN + I*NaN" است، با تلاش برای نجات
وضعیت در آن مورد پیش فرض است -fno-cx-limited-range، اما توسط فعال می شود
سریع-ریاضی.
این گزینه تنظیمات پیش فرض ISO C99 "CX_LIMITED_RANGE" را کنترل می کند.
با این وجود، این گزینه برای همه زبان ها اعمال می شود.
-fcx-fortran-rules
ضرب و تقسیم مختلط از قوانین فرترن پیروی می کنند. کاهش دامنه به صورت انجام می شود
بخشی از تقسیم پیچیده است، اما هیچ بررسی وجود ندارد که آیا نتیجه یک مجتمع است
ضرب یا تقسیم "NaN + I*NaN" است، با تلاش برای نجات وضعیت
در این مورد.
پیش فرض این است -fno-cx-fortran-rules.
گزینه های زیر بهینه سازی هایی را کنترل می کنند که ممکن است عملکرد را بهبود بخشند، اما اینطور نیستند
فعال شده توسط هر -O گزینه ها. این بخش شامل گزینه های آزمایشی است که ممکن است تولید کنند
کد شکسته
-شاخه-احتمالات
پس از اجرای یک برنامه کامپایل شده با -fprofile-arcs، می توانید آن را برای بار دوم کامپایل کنید
با استفاده از -شاخه-احتمالات، برای بهبود بهینه سازی بر اساس تعداد دفعات
هر شاخه گرفته شد. زمانی که یک برنامه با -fprofile-arcs خارج می شود، ذخیره می کند
اجرای قوس در فایلی به نام خوانده می شود sourcename.gcda برای هر فایل منبع در
اطلاعات موجود در این فایل داده بسیار به ساختار تولید شده بستگی دارد
کد، بنابراین باید از کد منبع یکسان و گزینه های بهینه سازی یکسان برای هر دو استفاده کنید
تالیفات
با -شاخه-احتمالات، GCC قرار می دهد REG_BR_PROB روی هر کدام یادداشت کنید JUMP_INSN و
CALL_INSN. از این موارد می توان برای بهبود بهینه سازی استفاده کرد. در حال حاضر فقط مورد استفاده قرار می گیرند
در یک مکان: در reorg.c، به جای حدس زدن به کدام مسیر یک شاخه بیشتر احتمال دارد
گرفتن، REG_BR_PROB از مقادیر برای تعیین دقیق مسیر بیشتر استفاده می شود
غالبا.
-fprofile-values
اگر با -fprofile-arcs، کد را اضافه می کند تا مقداری داده در مورد مقادیر از
عبارات در برنامه جمع آوری شده است.
با -شاخه-احتمالات، داده های جمع آوری شده از مقادیر پروفایل را بازخوانی می کند
عباراتی برای استفاده در بهینه سازی
فعال شده با -fprofile-generate و -fprofile-use.
-fprofile-reorder-functions
ترتیب مجدد عملکرد بر اساس ابزار دقیق نمایه، اولین بار اجرا را جمع آوری می کند
یک تابع و این توابع را به ترتیب صعودی مرتب می کند.
فعال شده با -fprofile-use.
-fvpt
اگر با -fprofile-arcs، این گزینه به کامپایلر دستور اضافه کردن کد را می دهد
جمع آوری اطلاعات در مورد مقادیر عبارات
با -شاخه-احتمالات، داده های جمع آوری شده را بازخوانی می کند و در واقع آن را انجام می دهد
بهینه سازی بر اساس آنها در حال حاضر بهینه سازی ها شامل تخصص
عملیات تقسیم با استفاده از دانش در مورد مقدار مخرج.
-frename-registers
با استفاده از رجیسترهای سمت چپ، سعی کنید از وابستگی نادرست در کد برنامه ریزی شده جلوگیری کنید
پس از تخصیص ثبت نام به پایان رسید. این بهینه سازی بیشترین سود را برای پردازنده ها دارد
از ثبت ها بسته به فرمت اطلاعات اشکال زدایی پذیرفته شده توسط هدف،
با این حال، می تواند اشکال زدایی را غیرممکن کند، زیرا متغیرها دیگر در خانه نمی مانند
ثبت نام".
فعال به طور پیش فرض با -funroll-loops و -fpeel-loops.
-fschedule-fusion
برای برنامهریزی دستورالعملها، یک پاس وابسته به هدف را از طریق جریان دستورالعمل انجام میدهد
از یک نوع با هم هستند زیرا ماشین هدف می تواند آنها را با کارایی بیشتری اجرا کند
در جریان دستورالعمل مجاور یکدیگر هستند.
در سطوح فعال شده است -O2, -O3, -اواس.
ردیاب
برای بزرگ کردن اندازه سوپر بلوک، تکثیر دم را انجام دهید. این تحول ساده می کند
جریان کنترل تابع به بهینه سازی های دیگر اجازه می دهد کار بهتری انجام دهند.
فعال شده با -fprofile-use.
-funroll-loops
حلقههایی که تعداد تکرارهای آنها در زمان کامپایل یا بعد از آن قابل تعیین است را باز کنید
ورود به حلقه -funroll-loops دلالت دارد -frerun-cse-after-loop, - وب و
-frename-registers. همچنین لایه برداری کامل حلقه را روشن می کند (یعنی حذف کامل
حلقه هایی با تعداد تکرار ثابت کم). این گزینه کد را بزرگتر می کند و
ممکن است باعث شود سریعتر اجرا شود یا نه.
فعال شده با -fprofile-use.
-funroll-all-loops
همه حلقه ها را باز کنید، حتی اگر تعداد تکرارهای آنها در زمانی که حلقه است نامشخص باشد
وارد شد. این معمولا باعث می شود برنامه ها کندتر اجرا شوند. -funroll-all-loops حاکی از
گزینه های مشابه -funroll-loops.
-fpeel-loops
حلقه های لایه برداری که اطلاعات کافی برای آنها وجود دارد که زیاد غلت نمی خورند (از
بازخورد نمایه). همچنین لایه برداری کامل حلقه را روشن می کند (یعنی حذف کامل
حلقه هایی با تعداد تکرار ثابت کم).
فعال شده با -fprofile-use.
-fmove-loop-invariants
پاس حرکت ثابت حلقه را در بهینه ساز حلقه RTL فعال می کند. در سطح فعال شد
-O1
-funswitch-loops
شاخه ها را با شرایط ثابت حلقه به خارج از حلقه، با تکراری از حلقه منتقل کنید
حلقه روی هر دو شاخه (بر اساس نتیجه شرایط اصلاح شده است).
-function-sections
بخشهای fdata
هر تابع یا آیتم داده را در بخش خود در فایل خروجی در صورت هدف قرار دهید
از بخش های دلخواه پشتیبانی می کند. نام تابع یا نام آیتم داده
نام بخش را در فایل خروجی تعیین می کند.
از این گزینه ها در سیستم هایی استفاده کنید که پیوند دهنده می تواند بهینه سازی هایی را برای بهبود انجام دهد
محل مرجع در فضای دستورالعمل اکثر سیستم ها از شی ELF استفاده می کنند
فرمت و پردازنده های SPARC که Solaris 2 را اجرا می کنند دارای پیوندهایی با چنین بهینه سازی هایی هستند.
AIX ممکن است این بهینه سازی ها را در آینده داشته باشد.
فقط زمانی از این گزینه ها استفاده کنید که مزایای قابل توجهی از انجام این کار وجود داشته باشد. وقتی تو
این گزینه ها را مشخص کنید، اسمبلر و لینکر شی بزرگتر و قابل اجرایی ایجاد می کنند
فایل ها و همچنین کندتر هستند. شما نمی توانید استفاده کنید gprof در تمام سیستم ها اگر این را مشخص کنید
گزینه، و اگر هم این گزینه و هم را مشخص کنید ممکن است با اشکال زدایی مشکل داشته باشید
-g.
-fbranch-target-load-optimize
بهینه سازی بار رجیستر هدف شاخه را قبل از threading/prologue/epilogue انجام دهید.
استفاده از رجیسترهای هدف معمولاً فقط در هنگام بارگذاری مجدد و در نتیجه بالا بردن قابل مشاهده است
بارگذاری خارج از حلقه و انجام زمانبندی بین بلوکی نیاز به یک بهینهسازی جداگانه دارد
عبور.
-fbranch-هدف-بار-بهینه 2
بهینه سازی بار رجیستر هدف شاخه را بعد از threading/prologue/epilogue انجام دهید.
-fbtr-bb-exclusive
هنگام انجام بهینهسازی بار ثبت هدف شاخه، از هدف شعبه مجدد استفاده نکنید
در هر بلوک اصلی ثبت می شود.
محافظ چوب
برای بررسی سرریزهای بافر، مانند حملات شکست پشته، کد اضافی منتشر کنید. این
با افزودن یک متغیر محافظ به توابع دارای اشیاء آسیب پذیر انجام می شود. این
شامل توابعی است که "alloca" را صدا می کنند و توابعی با بافرهای بزرگتر از 8 بایت.
هنگامی که یک تابع وارد می شود، محافظ ها مقداردهی اولیه می شوند و پس از آن بررسی می شوند
تابع خارج می شود اگر یک بررسی گارد ناموفق باشد، یک پیام خطا چاپ می شود و برنامه
خارج می شود.
-fstack-protector-all
پسندیدن محافظ چوب به جز اینکه همه عملکردها محافظت می شوند.
-fstack-محافظ-قوی
پسندیدن محافظ چوب اما شامل توابع اضافی برای محافظت --- آن
که دارای تعاریف آرایه محلی هستند یا به آدرس های فریم محلی ارجاع دارند.
-fstack-protector-explicit
پسندیدن محافظ چوب اما فقط از آن توابعی محافظت می کند که دارای این هستند
ویژگی "stack_protect".
-fstdarg-opt
مقدمه توابع آرگومان متغیر را با توجه به استفاده از آنها بهینه کنید
استدلال
توجه: در اوبونتو 14.10 و نسخه های بعدی، -fstack-محافظ-قوی توسط فعال می شود
پیشفرض برای C، C++، ObjC، ObjC++، اگر هیچکدام از آنها نباشد -fno-stack-protector, -nostdlib، نه
-مناسب پیدا شدند.
-قطعات-لنگرها
سعی کنید تعداد محاسبات نشانی نمادین را با استفاده از "لنگر" مشترک کاهش دهید.
نمادها برای آدرس دادن به اشیاء نزدیک. این تبدیل می تواند به کاهش تعداد کمک کند
از ورودی های 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 است.
درون خطی واحد رشد
حداکثر رشد کلی واحد کامپایل ناشی از خطبندی را مشخص میکند. در
مقدار پیش فرض 20 است که رشد واحد را به 1.2 برابر اندازه اصلی محدود می کند. سرد
توابع (از طریق یک ویژگی یا با بازخورد نمایه به صورت سرد مشخص شده اند) نیستند
به اندازه واحد حساب می شود.
ipcp-unit-growth
حداکثر رشد کلی واحد کامپایل ناشی از بین رویه ای را مشخص می کند
انتشار ثابت مقدار پیش فرض 10 است که رشد واحد را به 1.1 محدود می کند
برابر اندازه اصلی
قاب پشته بزرگ
محدودیتی که قاب های پشته بزرگ را مشخص می کند. در حالی که الگوریتم درون خطی در تلاش است
تا بیش از حد از این حد عبور نکنیم. مقدار پیش فرض 256 بایت است.
پشته بزرگ-قاب-رشد
حداکثر رشد فریمهای پشتهای بزرگ را که بهدلیل قرار گرفتن درونی در درصد ایجاد میشود، مشخص میکند.
مقدار پیش فرض 1000 است که رشد قاب پشته های بزرگ را به 11 برابر محدود می کند
اندازه اصلی
max-inline-insns-recursive
max-inline-insns-recursive-auto
حداکثر تعداد دستورالعمل ها را مشخص می کند که یک کپی خارج از خط از یک خودکار
تابع درون خطی بازگشتی میتواند با انجام خطبندی بازگشتی رشد کند.
--پارام max-inline-insns-recursive برای توابع اعلام شده درون خطی اعمال می شود. برای
توابع به صورت درون خطی اعلام نشده اند، درون خطی بازگشتی تنها زمانی اتفاق می افتد که
توابع -finline (شامل در -O3) فعال شده است؛ --پارام max-inline-insns-
بازگشتی-خودکار در عوض اعمال می شود. مقدار پیش فرض 450 است.
حداکثر عمق درون خطی بازگشتی
max-inline-recursive-depth-auto
حداکثر عمق بازگشتی مورد استفاده برای خطبندی بازگشتی را مشخص میکند.
--پارام حداکثر عمق درون خطی بازگشتی برای توابع اعلام شده درون خطی اعمال می شود. برای
توابع به صورت درون خطی اعلام نشده اند، درون خطی بازگشتی تنها زمانی اتفاق می افتد که
توابع -finline (شامل در -O3) فعال شده است؛ --پارام حدا
عمق خودکار در عوض اعمال می شود. مقدار پیش فرض 8 است.
min-inline-recursive-probability
درون خطی بازگشتی فقط برای تابعی که بازگشت عمیق درون دارد سودآور است
متوسط است و می تواند برای عملکردی که عمق بازگشت کمی دارد با افزایش آن صدمه بزند
اندازه پرولوگ یا پیچیدگی بدنه تابع به بهینه سازهای دیگر.
وقتی بازخورد نمایه در دسترس است (نگاه کنید به -fprofile-generate) بازگشت واقعی
عمق را می توان از روی احتمال بازگشت تابع از طریق یک فراخوانی مشخص حدس زد
اصطلاح. این پارامتر، inlining را فقط به فراخوانی عباراتی که
احتمال بیشتر از آستانه داده شده (در درصد). مقدار پیش فرض 10 است.
اولیه-inlining-insns
رشدی را مشخص کنید که داخلی اولیه می تواند ایجاد کند. در واقع مقدار آن را افزایش می دهد
از inlining برای کد که جریمه انتزاعی زیادی دارد. مقدار پیش فرض 14 است.
max-early-inliner-iterations
محدودیت تکرارهای داخلی اولیه. این اساساً تعداد را محدود می کند
تماسهای غیرمستقیم تودرتو که خط داخلی اولیه میتواند حل کند. زنجیرهای عمیق تر هنوز هستند
توسط خط کشی دیر انجام می شود.
قابلیت تقسیم مشترک
احتمال (بر حسب درصد) که تابع درون خطی C++ با قابلیت مشاهده comdat هستند
به اشتراک گذاشته شده در چندین واحد کامپایل. مقدار پیش فرض 20 است.
profile-func-internal-id
پارامتری برای کنترل استفاده از شناسه داخلی تابع در پایگاه داده پروفایل
جستجو. اگر مقدار 0 باشد، کامپایلر از یک شناسه مبتنی بر تابع استفاده می کند
نام اسمبلر و نام فایل، که داده های نمایه قدیمی را نسبت به منبع تحمل بیشتری می کند
تغییراتی مانند ترتیب مجدد تابع و غیره. مقدار پیش فرض 0 است.
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
حداکثر تعداد بررسیهای زمان اجرا که میتوان هنگام انجام حلقه انجام داد
نسخه سازی برای تراز در وکتورایزر.
vect-max-version-for-alias-checks
حداکثر تعداد بررسیهای زمان اجرا که میتوان هنگام انجام حلقه انجام داد
نسخه سازی برای نام مستعار در vectorizer.
vect-max-peeling-for-alignment
حداکثر تعداد لایه برداری حلقه برای افزایش تراز دسترسی برای بردار. ارزش
-1 به معنای "بدون محدودیت" است.
حداکثر تکرار برای ردیابی
حداکثر تعداد تکرار یک حلقه الگوریتم brute-force برای تجزیه و تحلیل
تعداد تکرارهای حلقه سعی در ارزیابی دارد.
hot-bb-count-ws-permille
اگر به مقدار داده شده کمک کند، یک تعداد نمایه بلوک اولیه داغ در نظر گرفته می شود
پرمیلاژ (یعنی 0...1000) کل اجرای پروفیل.
داغ-bb-فرکانس-کسری
کسری از فرکانس بلوک ورودی اجرای بلوک اصلی را انتخاب کنید
تابع داده شده بلوک اصلی باید داغ در نظر گرفته شود.
حداکثر-پیش بینی-تکرار
حداکثر تعداد تکرارهای حلقه ای که به صورت ایستا پیش بینی می کنیم. این مفید است در
مواردی که یک تابع شامل یک حلقه منفرد با کران شناخته شده و یک حلقه دیگر است
با کران نامعلوم تعداد شناخته شده تکرار به درستی پیش بینی می شود، در حالی که
تعداد مجهول تکرارها به طور متوسط تقریباً 10 است. این بدان معنی است که حلقه
بدون مرز نسبت به دیگری به طور مصنوعی سرد به نظر می رسد.
ساخته شده-انتظار-احتمال
احتمال اینکه عبارت دارای مقدار مشخص شده باشد را کنترل کنید. این
پارامتر یک درصد (یعنی 0 ... 100) را به عنوان ورودی می گیرد. احتمال پیش فرض
از 90 به صورت تجربی به دست می آید.
آستانه تراز
کسری از حداکثر فرکانس اجرای یک بلوک پایه را در 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
بازگرداندن بلوک ها
برای تصمیم گیری در مورد استفاده بدون قید و شرط از طریق مجوز مرتب سازی مجدد بلوک اصلی استفاده می شود
کد را در مقصد خود شاخه یا کپی کنید. کد زمانی کپی می شود
اندازه تخمینی کوچکتر از این مقدار ضربدر اندازه تخمینی است
پرش بی قید و شرط در نقاط داغ برنامه.
La reorder-block-duplicate-feedback پارامتر فقط در هنگام بازخورد نمایه استفاده می شود
موجود است. ممکن است روی مقادیر بالاتر از Reorder-Block-Duplice پس از
اطلاعات در مورد نقاط داغ دقیق تر است.
max-sched-ready-insns
حداکثر تعداد دستورالعمل های آماده برای صدور زمانبندی باید
در هر زمان معینی در طول اولین پاس برنامه ریزی در نظر بگیرید. افزایش ارزش ها
به معنای جستجوهای دقیق تر است که باعث می شود زمان تدوین با احتمال زیاد افزایش یابد
سود اندک مقدار پیش فرض 100 است.
max-sched-region-blocks
حداکثر تعداد بلوکها در یک منطقه که برای بین بلوک در نظر گرفته میشود
برنامه ریزی. مقدار پیش فرض 10 است.
max-pipeline-region-blocks
حداکثر تعداد بلوک در یک منطقه که برای خط لوله در نظر گرفته می شود
زمانبندی انتخابی مقدار پیش فرض 15 است.
max-sched-region-insns
حداکثر تعداد insns در یک منطقه که برای اینتربلاک در نظر گرفته می شود
برنامه ریزی. مقدار پیش فرض 100 است.
حداکثر صفحه اصلی
حداکثر تعداد insns در یک منطقه که برای خط لوله در نظر گرفته می شود
زمانبندی انتخابی مقدار پیش فرض 200 است.
min-spec-prob
حداقل احتمال (بر حسب درصد) رسیدن به یک بلوک منبع برای اینتربلاک
زمان بندی سوداگرانه مقدار پیش فرض 40 است.
حداکثر-ثبت شده-دیافراگم
حداکثر تعداد تکرار از طریق CFG برای گسترش مناطق. مقدار 0 (
پیش فرض) پسوندهای منطقه را غیرفعال می کند.
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 است.
باکره حداکثر
حداکثر اندازه پنجره پیش بینی برنامه ریزی انتخابی. یک عمق است
جستجو برای دستورالعمل های موجود مقدار پیش فرض 50 است.
selsched-max-sched-times
حداکثر تعداد دفعاتی که یک دستورالعمل در طول انتخابی برنامه ریزی می شود
برنامه ریزی. این محدودیت در تعداد تکرارهایی است که از طریق آن انجام می شود
دستورالعمل ممکن است خط لوله شود. مقدار پیش فرض 2 است.
selsched-max-insns-to-rename
حداکثر تعداد بهترین دستورالعمل ها در لیست آماده که برای آنها در نظر گرفته شده است
تغییر نام در زمانبندی انتخابی مقدار پیش فرض 2 است.
sms-min-sc
حداقل مقدار تعداد مرحله که زمانبندی مدول نوسانی ایجاد میکند. در
مقدار پیش فرض 2 است.
max-last-value-rtl
حداکثر اندازه اندازه گیری شده به عنوان تعداد RTLهایی که می توانند در یک عبارت ثبت شوند
در ترکیب کننده برای یک ثبات شبه به عنوان آخرین مقدار شناخته شده آن ثبات. در
پیش فرض 10000 است.
حداکثر و کمربند
حداکثر تعداد دستورالعمل هایی که ترکیب کننده RTL سعی می کند ترکیب کند. پیشفرض
مقدار 2 در است -اوگ و 4 در غیر این صورت.
عدد صحیح سهم
ثابت های اعداد صحیح کوچک می توانند از یک ساختار داده مشترک استفاده کنند و کامپایلر را کاهش دهند
استفاده از حافظه و افزایش سرعت آن. این حداکثر مقدار اشتراک گذاری شده را تعیین می کند
ثابت عدد صحیح مقدار پیش فرض 256 است.
ssp-buffer-size
حداقل اندازه بافرها (یعنی آرایه ها) که محافظت در برابر شکست پشته را دریافت می کنند
چه زمانی fstack-protection استفاده می شود.
این پیش فرض قبل از اوبونتو 10.10 "8" بود. در حال حاضر "4" است، برای افزایش
تعداد عملکردهای محافظت شده توسط محافظ پشته
اندازه کوچک برای اشتراک گذاری پشته
حداقل اندازه متغیرهایی که در اشتراکگذاری شکاف پشته شرکت میکنند، در حالی که نه
بهینه سازی مقدار پیش فرض 32 است.
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 است که حداقل تعداد رجیسترهای مورد نیاز معمولی است
دستورالعمل ها. این مقدار بهترین چیزی است که از آزمایش های متعدد بدست آمده است.
lra-وارث-آب-احتمال-قطع
LRA سعی می کند از مقادیر بارگیری مجدد در ثبات ها در insn های بعدی دوباره استفاده کند. این
بهینه سازی وراثت نامیده می شود. EBB به عنوان یک منطقه برای انجام این کار استفاده می شود
بهینه سازی. این پارامتر حداقل احتمال سقوط از طریق لبه را تعریف می کند
درصد مورد استفاده برای افزودن BB به ارث EBB در LRA. مقدار پیش فرض از
پارامتر 40 است. مقدار از اجراهای متعدد SPEC2000 در x86-64 انتخاب شد.
loop-invariant-max-bbs-in-loop
حرکت ثابت حلقه می تواند بسیار گران باشد، چه در زمان کامپایل و چه در زمان
مقدار حافظه کامپایل زمان مورد نیاز، با حلقه های بسیار بزرگ. حلقه با بیشتر
بلوک های اصلی از این پارامتر، بهینه سازی حرکت ثابت حلقه را نخواهند داشت
روی آنها اجرا شد. مقدار پیش فرض پارامتر 1000 برای است -O1 و 10000
برای -O2 و بالاتر.
حلقه های حداکثر برای داده های
ایجاد وابستگی داده ها برای حلقه های بسیار بزرگ گران است. این پارامتر
تعداد ارجاع داده ها را در حلقه هایی که برای داده ها در نظر گرفته می شود، محدود می کند
تجزیه و تحلیل وابستگی این حلقه های بزرگ توسط بهینه سازی استفاده نمی شود
وابستگی های داده حلقه مقدار پیش فرض 1000 است.
max-vartrack-size
حداکثر تعداد اسلات جدول هش را برای استفاده در جریان داده ردیابی متغیر تنظیم می کند
تجزیه و تحلیل هر تابع اگر این محدودیت با ردیابی متغیر در
تکالیف فعال است، تجزیه و تحلیل برای آن تابع بدون آن، پس از آن دوباره امتحان می شود
حذف همه اشکالزداییها از تابع. اگر از حد تجاوز شود حتی بدون
اشکال زدایی insns، تجزیه و تحلیل ردیابی var برای عملکرد کاملاً غیرفعال است.
صفر کردن پارامتر آن را نامحدود می کند.
max-vartrack-expr-depth
هنگام تلاش برای نگاشت نام متغیرها، حداکثر تعداد سطوح بازگشتی را تنظیم می کند
اشکال زدایی موقت برای عبارات ارزش. این زمان کامپایل را با بیشتر معامله می کند
اطلاعات کامل اشکال زدایی اگر این خیلی کم تنظیم شده است، عباراتی را که هستند ارزش گذاری کنید
در دسترس است و می تواند در اطلاعات اشکال زدایی نمایش داده شود، ممکن است در نهایت استفاده نشود.
تنظیم این بالاتر ممکن است کامپایلر را قادر سازد تا اشکال زدایی پیچیده تری را پیدا کند
عبارات، اما زمان کامپایل و استفاده از حافظه ممکن است افزایش یابد. پیش فرض 12 است.
min-nondebug-insn-uid
از uid هایی که با این پارامتر شروع می شوند برای insns های nondebug استفاده کنید. محدوده زیر
پارامتر منحصراً برای اشکال زدایی insns ایجاد شده توسط
-fvar-ردیابی-تکالیف، اما insns های اشکال زدایی ممکن است Uid های (غیر همپوشانی) در بالا دریافت کنند
اگر محدوده رزرو شده تمام شود.
ipa-sra-ptr-factor-growth-factor
IPA-SRA تنها با یک یا چند پارامتر جدید یک اشاره گر به یک مجموعه را جایگزین می کند
زمانی که اندازه تجمعی آنها کمتر یا مساوی باشد ipa-sra-ptr-factor-growth-factor چند بار
اندازه پارامتر اشاره گر اصلی
sra-max-scalarization-size-Ospeed
sra-max-scalarization-size-osize
دو پاس کاهش اسکالر مصالح (SRA و IPA-SRA) با هدف جایگزینی
بخش های اسکالر سنگدانه ها با استفاده از متغیرهای اسکالر مستقل. اینها
پارامترها حداکثر اندازه کل را در واحدهای ذخیره سازی کنترل می کنند
هنگام کامپایل برای سرعت، جایگزینی در نظر گرفته شود (sra-max-scalarization-size-
اوسپید) یا اندازه (sra-max-scalarization-size-osize) به ترتیب.
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 تکرار است.
loop-unroll-jam-size
ضریب unroll را برای -فلوپ باز کردن و جم کردن گزینه. مقدار پیش فرض
4 است
loop-unroll-jam-depth
ابعادی را که باید باز شود (با شمارش از درونی ترین حلقه) برای آن مشخص کنید
-فلوپ باز کردن و جم کردن. مقدار پیش فرض 2 است.
IPA-CP-List-List
IPA-CP سعی می کند تمام مقادیر و انواع ممکن را که به یک تابع ارسال می شود ردیابی کند
پارامتر به منظور انتشار آنها و انجام مجازی سازی. ipa-cp-value-
اندازه فهرست حداکثر تعداد مقادیر و انواعی است که در هر فرمال ذخیره می کند
پارامتر یک تابع
ipa-cp-eval-threshold
IPA-CP امتیاز خود را از اکتشافات سودآوری شبیه سازی محاسبه می کند و انجام می دهد
آن فرصت های شبیه سازی با امتیازهای بیش از حد ipa-cp-eval-threshold.
ipa-cp-recursion-penalty
درصد جریمه ای که توابع بازگشتی هنگام ارزیابی دریافت خواهند کرد
برای شبیه سازی
ipa-cp-single-call-penalty
توابع جریمه درصد شامل یک فراخوانی واحد به تابع دیگری خواهد بود
دریافت زمانی که آنها برای شبیه سازی ارزیابی می شوند.
ipa-max-agg-items
IPA-CP همچنین قادر به انتشار تعدادی از مقادیر اسکالر ارسال شده در یک است
تجمیع. ipa-max-agg-items حداکثر تعداد چنین مقادیری را در هر یک کنترل می کند
پارامتر.
ipa-cp-loop-hint-bonus
هنگامی که IPA-CP تعیین می کند که یک کاندید شبیه سازی می تواند تعداد آنها را ایجاد کند
تکرار یک حلقه شناخته شده، یک جایزه اضافه می کند ipa-cp-loop-hint-bonus به
امتیاز سودآوری نامزد
ipa-cp-array-index-hint-bonus
هنگامی که IPA-CP تعیین می کند که یک کاندید شبیه سازی می تواند شاخص یک آرایه را ایجاد کند
دسترسی شناخته شده، آن را اضافه می کند یک جایزه از ipa-cp-array-index-hint-bonus به
امتیاز سودآوری نامزد
IPA-MAX-AA-STEPS
در طول تجزیه و تحلیل بدنه های تابع، IPA-CP از تجزیه و تحلیل مستعار استفاده می کند تا بتواند
مقادیر مسیر که توسط پارامترهای تابع به آنها اشاره می شود. برای اینکه زمان زیادی را صرف نکنید
با تجزیه و تحلیل توابع عظیم، آن را رها می کند و تمام حافظه را پس از آن clobbered در نظر می گیرد
بررسی IPA-MAX-AA-STEPS عبارات اصلاح کننده حافظه
پارتیشن های 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. این گزینه به طور پیش فرض در سطح بهینه سازی فعال است سریع.
مورد-مقدار-آستانه
کمترین تعداد مقادیر مختلف که برای آنها بهتر است از جدول پرش استفاده شود
به جای درختی از شاخه های مشروط اگر مقدار 0 است، از پیش فرض برای استفاده کنید
ماشین. پیش فرض 0 است.
tree-reassoc-width
حداکثر تعداد دستورات اجرا شده به صورت موازی را در درخت مرتبط تنظیم کنید.
این پارامتر اکتشافی وابسته به هدف را که به طور پیشفرض مورد استفاده قرار میگیرد، در صورتی که فاقد آن باشد، لغو میکند
مقدار صفر
الگوریتم sched-pressure
بین دو پیاده سازی موجود از را انتخاب کنید -fsched-pressure. الگوریتم 1
پیاده سازی اصلی است و به احتمال زیاد از دستورالعمل ها جلوگیری می کند
در حال سفارش مجدد الگوریتم 2 برای سازش بین
رویکرد نسبتا محافظه کارانه الگوریتم 1 و نسبتاً تهاجمی اتخاذ شده است
رویکرد اتخاذ شده توسط زمانبندی پیش فرض. بیشتر به داشتن یک متکی است
فایل رجیستر معمولی و کلاس های فشار رجیستر دقیق. دیدن haifa-sched.c
در منابع GCC برای جزئیات بیشتر.
انتخاب پیش فرض بستگی به هدف دارد.
max-slsr-cand-scan
حداکثر تعداد نامزدهای موجود را که هنگام جستجوی الف در نظر گرفته می شوند، تنظیم کنید
مبنایی برای کاندیدای جدید کاهش قدرت خط مستقیم.
asan-globals
فعال کردن تشخیص سرریز بافر برای اشیاء سراسری. این نوع حفاظت است
در صورت استفاده به طور پیش فرض فعال است -fsanitize=آدرس گزینه. برای غیرفعال کردن جهانی
استفاده از حفاظت از اشیاء --پارام asan-globals = 0.
asan-stack
فعال کردن تشخیص سرریز بافر برای اشیاء پشته. این نوع حفاظت است
هنگام استفاده به طور پیش فرض فعال می شود-fsanitize=آدرس. برای غیرفعال کردن استفاده از حفاظت پشته
--پارام asan-stack=0 گزینه.
asan-instrust-reads
شناسایی سرریز بافر را برای خواندن حافظه فعال کنید. این نوع حفاظت است
هنگام استفاده به طور پیش فرض فعال می شود -fsanitize=آدرس. برای غیرفعال کردن حافظه خواندن
استفاده حفاظتی --پارام asan-instrument-reads=0.
asan-instrument-نوشته
فعال کردن تشخیص سرریز بافر برای نوشتن حافظه. این نوع حفاظت است
هنگام استفاده به طور پیش فرض فعال می شود -fsanitize=آدرس. برای غیر فعال کردن حافظه می نویسد
استفاده حفاظتی --پارام asan-instrument-writes=0 گزینه.
asan-memintrin
فعال کردن تشخیص برای توابع داخلی. این نوع حفاظت توسط فعال می شود
پیش فرض هنگام استفاده -fsanitize=آدرس. برای غیرفعال کردن محافظت از عملکردهای داخلی
استفاده کنید --پارام Asan-Memintrin = 0.
آسان-استفاده-پس از بازگشت
فعال کردن تشخیص استفاده پس از بازگشت. این نوع حفاظت توسط فعال می شود
پیش فرض هنگام استفاده -fsanitize=آدرس گزینه. برای غیرفعال کردن استفاده پس از بازگشت
استفاده تشخیص --پارام asan-use-after-return = 0.
با آستانه کالی
اگر تعداد دسترسیهای حافظه در تابع مورد استفاده بیشتر یا مساوی باشد
این شماره، به جای چک های درون خطی، از تماس های برگشتی استفاده کنید. به عنوان مثال برای غیرفعال کردن کد درون خطی
استفاده کنید --پارام asan-instrumentation-with-call-threshold=0.
chkp-max-ctor-size
سازنده های استاتیک تولید شده توسط Pointer Bounds Checker ممکن است بسیار بزرگ شوند و
به طور قابل توجهی زمان کامپایل را در سطح بهینه سازی افزایش می دهد -O1 و بالاتر. این
پارامتر حداکثر عددی از عبارات در یک سازنده تولید شده است.
مقدار پیش فرض 5000 است.
Max-FSM-Thread-Path-Insns
حداکثر تعداد دستورالعمل برای کپی در هنگام کپی کردن بلوک ها در حالت محدود
مسیر نخ پرش خودکار. پیش فرض 100 است.
max-fsm-thread-length
حداکثر تعداد بلوک های اساسی در مسیر رشته پرش خودکار حالت محدود. در
پیش فرض 10 است.
max-fsm-thread-paths
حداکثر تعداد مسیرهای رشته پرش جدید برای ایجاد یک خودکار حالت محدود.
پیش فرض 50 است.
گزینه کنترل 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
...
#NDIF FOO
دوم و سوم "FOO" باید در نظرات باشد، اما اغلب در برنامه های قدیمی تر نیستند.
این هشدار به طور پیش فرض روشن است.
-خطا
همه هشدارها را به خطاهای سخت تبدیل کنید. کد منبعی که باعث ایجاد هشدار می شود خواهد بود
رد شد
Wsystem-headers
اخطارهایی را برای کد در هدرهای سیستم صادر کنید. اینها معمولاً برای یافتن مفید نیستند
اشکالات در کد شما، بنابراین سرکوب شده است. اگر شما مسئول سیستم هستید
کتابخانه، ممکن است بخواهید آنها را ببینید.
-w تمام هشدارها، از جمله هشدارهایی که GNU CPP به طور پیش فرض صادر می کند، سرکوب کنید.
-پدانتیک
همه تشخیص های اجباری مندرج در استاندارد C را صادر کنید. برخی از آنها باقی مانده است
به طور پیشفرض خارج میشوند، زیرا اغلب روی کدهای بیضرر فعال میشوند.
-اشتباهات
همه تشخیص های اجباری را صادر کنید و همه تشخیص های اجباری را به خطا تبدیل کنید.
این شامل تشخیص های اجباری است که GCC بدون آن صادر می کند -پدانتیک اما به عنوان رفتار می کند
هشدارها
-M به جای خروجی گرفتن نتیجه پیش پردازش، یک قانون مناسب برای خروجی ارائه دهید ساخت
شرح وابستگی های فایل منبع اصلی. پیش پردازنده یک خروجی می دهد
ساخت قانون حاوی نام فایل شی برای آن فایل منبع، یک دونقطه و نام ها
از همه فایلهای موجود، از جمله فایلهایی که از آنها میآیند -عبارتند از or -ایماکرو فرمان -
گزینه های خط
مگر اینکه به صراحت مشخص شده باشد (با -MT or -MQ)، نام فایل شی از عبارت تشکیل شده است
نام فایل مبدأ با هر پسوندی جایگزین پسوند فایل شی و با هر
قطعات دایرکتوری اصلی حذف شدند. اگر تعداد زیادی فایل گنجانده شده باشد، قانون این است
تقسیم به چند خط با استفاده از \-خط جدید. قانون هیچ فرمانی ندارد.
این گزینه خروجی اشکال زدایی پیش پردازنده را سرکوب نمی کند، مانند -dM. برای جلوگیری
مخلوط کردن چنین خروجی اشکال زدایی با قوانین وابستگی، باید به صراحت آن را مشخص کنید
فایل خروجی وابستگی با -MF، یا از یک متغیر محیطی مانند استفاده کنید
DEPENDENCIES_OUTPUT. خروجی اشکال زدایی همچنان به جریان خروجی معمولی ارسال می شود
طبیعی است.
عبور -M به راننده اشاره می کند -E، و هشدارها را به طور ضمنی سرکوب می کند -w.
-مامان پسندیدن -M اما به فایلهای هدری که در فهرستهای هدر سیستم یافت میشوند اشاره نکنید،
و نه فایلهای سرصفحهای که بهطور مستقیم یا غیرمستقیم از چنین هدری گنجانده شدهاند.
این به این معنی است که انتخاب براکت های زاویه یا دو نقل قول در یک #include
دستورالعمل به خودی خود تعیین نمی کند که آیا آن هدر در ظاهر می شود یا خیر -مامان
خروجی وابستگی این یک تغییر جزئی در معناشناسی از GCC نسخه 3.0 و
قبلا
-MF پرونده
هنگامی که با استفاده می شود -M or -مامان، فایلی را برای نوشتن وابستگی ها مشخص می کند. اگر نه -MF
سوئیچ داده می شود که پیش پردازنده قوانین را به همان جایی که می فرستاد می فرستد
خروجی از پیش پردازش شده
هنگامی که با گزینه های درایور استفاده می شود -MD or -MMD, -MF وابستگی پیش فرض را لغو می کند
فایل خروجی.
-MG در ارتباط با گزینه ای مانند -M درخواست تولید وابستگی، -MG فرض می کند
فایلهای هدر از دست رفته فایلهایی تولید میشوند و بدون آنها را به لیست وابستگی اضافه میکنند
بالا بردن یک خطا نام فایل وابستگی مستقیماً از "#include" گرفته شده است.
دستورالعمل بدون پیش بینی هیچ مسیری. -MG همچنین خروجی از پیش پردازش شده را سرکوب می کند
فایل هدر از دست رفته این را بی فایده می کند.
این ویژگی در به روز رسانی خودکار فایل های make-files استفاده می شود.
-نماینده مجلس این گزینه به CPP دستور می دهد تا برای هر وابستگی به غیر از آن یک هدف ساختگی اضافه کند
فایل اصلی، که باعث می شود هر کدام به هیچ چیز وابسته نشوند. این قوانین ساختگی روی خطاها کار می کنند
ساخت می دهد اگر شما فایل های هدر را بدون به روز رسانی حذف کنید makefile مطابقت دادن
این خروجی معمولی است:
test.o: test.c test.h
test.h:
-MT هدف
هدف قانون صادر شده توسط تولید وابستگی را تغییر دهید. به طور پیش فرض CPP می گیرد
نام فایل ورودی اصلی، هر جزء دایرکتوری و هر پسوند فایل را حذف می کند
مانند .c، و پسوند شی معمولی پلتفرم را اضافه می کند. نتیجه هدف است.
An -MT گزینه هدف را دقیقاً همان رشته ای که شما مشخص کرده اید تنظیم می کند. اگر بخواهید
چندین هدف، می توانید آنها را به عنوان یک آرگومان واحد مشخص کنید -MT، یا از چندگانه استفاده کنید
-MT گزینه.
به عنوان مثال، -MT '$(objpfx)foo.o' ممکن است بدهد
$ (objpfx) foo.o: foo.c
-MQ هدف
مثل -MT، اما هر شخصیتی را که برای ساختن خاص است نقل قول می کند.
-MQ '$(objpfx)foo.o' می دهد
$ $ (objpfx) foo.o: foo.c
هدف پیش فرض به طور خودکار نقل قول می شود، گویی با آن داده شده است -MQ.
-MD -MD برابر است با -M -MF پرونده، غیر از آن -E ضمنی نیست. راننده
تعیین می کند پرونده بر اساس اینکه آیا یک -o گزینه داده شده است. اگر اینطور باشد، درایور از آن استفاده می کند
آرگومان اما با پسوند .d، در غیر این صورت نام فایل ورودی را می گیرد،
هر جزء و پسوند دایرکتوری را حذف می کند و a را اعمال می کند .d پسوند.
If -MD همراه با استفاده می شود -E، هرکسی -o سوئیچ برای مشخص کردن
فایل خروجی وابستگی، اما اگر بدون استفاده شود -E، هر یک -o برای مشخص کردن a درک می شود
فایل شی هدف
پس از -E ضمنی نیست، -MD می توان از آن برای تولید یک فایل خروجی وابستگی به صورت a استفاده کرد
عوارض جانبی فرآیند کامپایل
-MMD
پسندیدن -MD به جز ذکر فقط فایل های هدر کاربر، نه فایل های هدر سیستم.
-FPCH-DEPS
هنگام استفاده از هدرهای از پیش کامپایل شده، این پرچم باعث می شود که پرچم های وابستگی-خروجی به آن تبدیل شوند
همچنین فایل ها را از وابستگی های هدر از پیش کامپایل شده لیست کنید. اگر فقط مشخص نشده باشد
هدر از پیش کامپایل شده لیست می شود و نه فایل هایی که برای ایجاد آن استفاده شده اند
زیرا هنگام استفاده از هدر از پیش کامپایل شده، از آن فایل ها استفاده نمی شود.
-fpch-پیش پردازش
این گزینه اجازه می دهد تا از یک هدر از پیش کامپایل شده همراه با -E. خاصی را درج می کند
"#pragma"، "#pragma GCC pch_preprocess"نام فایل"" در خروجی برای علامت گذاری مکان
جایی که هدر از پیش کامپایل شده یافت شد و آن نام فایلاست. وقتی که -پیش پردازش شده هست در
استفاده کنید، GCC این "#pragma" را تشخیص داده و PCH را بارگیری می کند.
این گزینه بهطور پیشفرض خاموش است، زیرا تنها خروجی از پیش پردازش شده به دست آمده است
واقعاً به عنوان ورودی GCC مناسب است. توسط آن روشن می شود -Save- Temps.
شما نباید این "#pragma" را در کد خود بنویسید، اما ویرایش آن امن است
نام فایل اگر فایل PCH در مکان دیگری در دسترس باشد. نام فایل ممکن است باشد
مطلق یا ممکن است نسبت به فهرست فعلی GCC باشد.
-x c
-x c ++
-x هدف-ج
-x اسمبلر-با-cpp
زبان مبدأ را مشخص کنید: C، C++، Objective-C، یا اسمبلی. این ربطی نداره
با انطباق با استانداردها یا الحاقات؛ صرفاً دستور پایه را انتخاب می کند
انتظار. اگر هیچ یک از این گزینه ها را ندهید، cpp زبان را از روی استنتاج می کند
پسوند فایل منبع: .c, . رونوشت, .m، یا .S. برخی از پسوندهای رایج دیگر برای
C++ و اسمبلی نیز شناخته شده است. اگر cpp پسوند را نشناسد، آن را
با فایل به صورت C رفتار می کند. این عمومی ترین حالت است.
توجه داشته باشید: نسخههای قبلی cpp a -زمانی گزینه ای که هر دو را انتخاب کرد
زبان و سطح انطباق استانداردها این گزینه حذف شده است، زیرا
با -l گزینه.
-std=استاندارد
-ansi
استانداردی را که کد باید با آن مطابقت داشته باشد را مشخص کنید. در حال حاضر CPP در مورد C می داند
و استانداردهای C++; سایرین ممکن است در آینده اضافه شوند.
استاندارد ممکن است یکی از:
"c90"
"c89"
"iso9899:1990"
استاندارد ISO C از سال 1990. c90 مخفف مرسوم این نسخه است
استاندارد.
La -ansi گزینه معادل است -std=c90.
"iso9899:199409"
استاندارد C 1990 که در سال 1994 اصلاح شد.
"iso9899:1999"
"c99"
"iso9899:199x"
"c9x"
استاندارد بازنگری شده ISO C، منتشر شده در دسامبر 1999. قبل از انتشار، این
با نام C9X شناخته می شد.
"iso9899:2011"
"c11"
"c1x"
استاندارد بازنگری شده ISO C، منتشر شده در دسامبر 2011. قبل از انتشار، این
با نام C1X شناخته می شد.
"gnu90"
"gnu89"
استاندارد C 1990 به همراه پسوندهای گنو. این پیش فرض است.
"gnu99"
"gnu9x"
استاندارد C 1999 به همراه پسوندهای گنو.
"gnu11"
"gnu1x"
استاندارد C 2011 به همراه پسوندهای گنو.
"c++98"
استاندارد ISO C++ 1998 به همراه اصلاحات.
"gnu++98"
همان -std = C ++ 98 به علاوه پسوندهای گنو این کد پیش فرض برای C++ است.
-من- مسیر شامل را تقسیم کنید. هر دایرکتوری مشخص شده با -I گزینه های قبل -من- هستند
فقط برای سرصفحه های درخواست شده با "#include" جستجو شدفایل""; آنها جستجو نمی شوند
"#عبارتند ازفایل>". اگر دایرکتوری های اضافی با -I گزینه های بعد از
-من-، آن دایرکتوری ها برای همه جستجو می شوند #include دستورالعمل.
علاوه بر این، -من- مانع استفاده از دایرکتوری دایرکتوری فایل فعلی به عنوان
اولین فهرست جستجو برای "#include"فایل"". این گزینه منسوخ شده است.
-nostdinc
در فهرست های استاندارد سیستم برای فایل های هدر جستجو نکنید. فقط دایرکتوری ها
شما مشخص کرده اید با -I گزینه ها (و دایرکتوری فایل فعلی، اگر
مناسب) جستجو می شوند.
-nostdinc++
فایل های هدر را در دایرکتوری های استاندارد خاص C++ جستجو نکنید، اما همچنان انجام دهید
سایر دایرکتوری های استاندارد را جستجو کنید. (این گزینه هنگام ساخت ++C استفاده می شود
کتابخانه.)
-عبارتند از پرونده
روند پرونده مثل اینکه "#include "file"" به عنوان اولین خط منبع اصلی ظاهر شد
فایل. با این حال، اولین دایرکتوری جستجو شد پرونده پیش پردازنده کار می کند
فهرست راهنما در عوض of دایرکتوری حاوی فایل منبع اصلی اگر پیدا نشد
در آنجا، در بقیه زنجیره جستجوی "#include "..." به عنوان جستجو می شود
طبیعی است.
اگر چندتایی باشد -عبارتند از گزینه های داده شده است، فایل ها به ترتیب آنها گنجانده شده است
در خط فرمان ظاهر شود.
-ایماکرو پرونده
دقیقا شبیه -عبارتند از، با این تفاوت که هر خروجی با اسکن تولید می شود پرونده پرتاب می شود
دور. ماکروهایی که تعریف می کند همچنان تعریف شده باقی می مانند. این به شما امکان می دهد تمام ماکروها را بدست آورید
از یک هدر بدون پردازش اعلان های آن.
تمام فایل های مشخص شده توسط -ایماکرو قبل از تمام فایل های مشخص شده توسط پردازش می شوند -عبارتند از.
-idirafter دیر
جستجو دیر برای فایل های هدر، اما این کار را انجام دهید بعد از همه دایرکتوری های مشخص شده با -I و
فهرست های استاندارد سیستم تمام شده اند. دیر به عنوان یک سیستم شامل
فهرست راهنما. اگر دیر با "="" شروع می شود، سپس "=" با sysroot جایگزین می شود
پیشوند؛ دیدن --sysroot و -isysroot.
-پیوند پیشوند
مشخص کردن پیشوند به عنوان پیشوند بعدی -ithprefix گزینه ها. اگر پیشوند
نشان دهنده یک دایرکتوری است، شما باید فینال را وارد کنید /.
-ithprefix دیر
-IwwithPrefixBefore دیر
ضمیمه کردن دیر به پیشوند مشخص شده قبلا با -پیوند، و حاصل را اضافه کنید
دایرکتوری به مسیر جستجو شامل. -IwwithPrefixBefore آن را در همان مکان قرار می دهد -I
خواهد شد -ithprefix آن را در جایی قرار می دهد -idirafter می توانست
-isysroot دیر
این گزینه مانند --sysroot گزینه ای است، اما فقط برای فایل های هدر (به جز برای
داروین را هدف می گیرد، جایی که هم برای فایل های هدر و هم برای کتابخانه ها اعمال می شود). را ببینید
--sysroot گزینه برای اطلاعات بیشتر
-imultilib دیر
استفاده کنید دیر به عنوان زیر شاخه ای از دایرکتوری حاوی سرصفحه های C++ خاص هدف.
-سیستم دیر
جستجو دیر برای فایل های هدر، بعد از همه دایرکتوری های مشخص شده توسط -I اما قبل از
دایرکتوری های سیستم استاندارد آن را به عنوان یک دایرکتوری سیستم علامت گذاری کنید، به طوری که یکسان شود
رفتار ویژه ای که برای فهرست های سیستم استاندارد اعمال می شود. اگر دیر آغاز می شود
با "="، سپس "=" با پیشوند sysroot جایگزین می شود. دیدن --sysroot و
-isysroot.
-نقل دادن دیر
جستجو دیر فقط برای فایل های هدر درخواست شده با "#include"فایل""; آنها نیستند
"#includeفایل>"، قبل از همه دایرکتوری های مشخص شده توسط -I و قبل از
دایرکتوری های سیستم استاندارد اگر دیر با "="" شروع می شود، سپس "="" جایگزین می شود
پیشوند sysroot؛ دیدن --sysroot و -isysroot.
fdirectives-only
هنگام پیش پردازش، دستورالعمل ها را مدیریت کنید، اما ماکروها را گسترش ندهید.
رفتار گزینه بستگی به -E و -پیش پردازش شده گزینه.
با -E، پیش پردازش محدود به رسیدگی به دستورالعمل هایی مانند "#define" است.
"#ifdef" و "#error". سایر عملیات پیش پردازنده، مانند توسعه ماکرو و
تبدیل سه گراف انجام نمی شود. علاوه بر این -DD گزینه به طور ضمنی است
فعال شده است
با -پیش پردازش شده، از پیش تعریف خط فرمان و اکثر ماکروهای داخلی می باشد
معلول. ماکروهایی مانند "__LINE__" که به بافت وابسته هستند، مدیریت می شوند
به طور معمول این امکان کامپایل فایلهایی را فراهم میکند که قبلاً با «-E» از پیش پردازش شدهاند
-fdirectives-only".
با هر دو -E و -پیش پردازش شده، قوانین برای -پیش پردازش شده اولویت داشته باشد. این
پیش پردازش کامل فایل هایی را که قبلاً با "-E" از پیش پردازش شده اند، فعال می کند
-fdirectives-only".
-فرالورها در شناسایی کننده ها
پذیرفتن $ در شناسه ها
-fextended-identifiers
نام کاراکترهای جهانی را در شناسه ها بپذیرید. این گزینه به طور پیش فرض فعال است
برای C99 (و نسخه های بعدی C استاندارد) و 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 اگر هر یک از این گزینه ها استفاده شود، پیوند دهنده اجرا نمی شود و نام فایل ها را شیء می کند
نباید به عنوان استدلال استفاده شود.
-fuse-ld=bfd
استفاده از bfd پیوند دهنده به جای پیوند دهنده پیش فرض.
-fuse-ld=طلا
استفاده از طلا پیوند دهنده به جای پیوند دهنده پیش فرض.
-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
هنگام پیوند از کتابخانه های سیستم استاندارد استفاده نکنید. فقط کتابخانه هایی که شما مشخص کرده اید
به پیوند دهنده منتقل می شوند و گزینه هایی که پیوند کتابخانه های سیستم را مشخص می کنند، مانند
as -static-libgcc or -shared-libgcc، نادیده گرفته می شوند. فایل های راه اندازی استاندارد استفاده می شود
به طور معمول، مگر اینکه -nostartfiles استفاده می شود.
کامپایلر ممکن است برای "memcmp"، "memset"، "memcpy" و "memmove" فراخوانی ایجاد کند. اینها
ورودی ها معمولاً با ورودی های libc حل می شوند. این نقاط ورود باید باشد
زمانی که این گزینه مشخص شده باشد از طریق مکانیسم دیگری عرضه می شود.
-nostdlib
هنگام پیوند، از فایل ها یا کتابخانه های راه اندازی سیستم استاندارد استفاده نکنید. بدون راه اندازی
فایلها و فقط کتابخانههایی که مشخص میکنید به پیوند دهنده و گزینهها منتقل میشوند
تعیین پیوند کتابخانه های سیستم، مانند -static-libgcc or -shared-libgcc,
نادیده گرفته می شوند
کامپایلر ممکن است برای "memcmp"، "memset"، "memcpy" و "memmove" فراخوانی ایجاد کند. اینها
ورودی ها معمولاً با ورودی های libc حل می شوند. این نقاط ورود باید باشد
زمانی که این گزینه مشخص شده باشد از طریق مکانیسم دیگری عرضه می شود.
یکی از کتابخانه های استاندارد دور زده شده توسط -nostdlib و -nodefaultlibs is libgcc.a، یک
کتابخانه ای از زیر برنامه های داخلی که GCC برای غلبه بر کاستی های خاص استفاده می کند
ماشینها یا نیازهای ویژه برای برخی از زبانها.
در بیشتر موارد، شما نیاز دارید libgcc.a حتی زمانی که می خواهید از دیگر کتابخانه های استاندارد خودداری کنید.
به عبارت دیگر، زمانی که شما مشخص می کنید -nostdlib or -nodefaultlibs معمولا باید
مشخص كردن -lgcc همچنین. این تضمین می کند که هیچ مرجع حل نشده ای به آن ندارید
زیربرنامه های داخلی کتابخانه GCC (نمونه ای از چنین زیربرنامه داخلی است
"__main" برای اطمینان از فراخوانی سازنده های 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 را به پیوند هدایت می کند لیبتسان به صورت ایستا، بدون
لزوماً کتابخانه های دیگر را به صورت ایستا پیوند می دهد.
استاتیک-لیبلسان
هنگامی که -fsanitize=نشت گزینه برای پیوند دادن یک برنامه، درایور GCC استفاده می شود
به طور خودکار علیه لیبلسان. اگر لیبلسان به عنوان یک کتابخانه مشترک در دسترس است، و
la -استاتیک گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود لیبلسان.
La استاتیک-لیبلسان گزینه درایور GCC را به پیوند هدایت می کند لیبلسان به صورت ایستا، بدون
لزوماً کتابخانه های دیگر را به صورت ایستا پیوند می دهد.
استاتیک-لیبوسان
هنگامی که -fsanitize=تعریف نشده گزینه برای پیوند دادن یک برنامه، درایور GCC استفاده می شود
به طور خودکار علیه لیبوبسان. اگر لیبوبسان به عنوان یک کتابخانه مشترک در دسترس است،
و -استاتیک گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود
لیبوبسان. استاتیک-لیبوسان گزینه درایور GCC را به پیوند هدایت می کند لیبوبسان
به صورت ایستا، بدون اینکه لزوماً کتابخانه های دیگر را به صورت ایستا به هم مرتبط کنند.
-static-libmpx
هنگامی که -fcheck-pointer مرزها و -mmpx از گزینه ها برای پیوند دادن یک برنامه، GCC استفاده می شود
درایور به طور خودکار در مقابل لینک می شود libmpx. اگر libmpx به صورت اشتراکی موجود است
کتابخانه، و -استاتیک گزینه استفاده نمی شود، سپس این لینک در برابر اشتراک گذاری شده است
نسخه libmpx. -static-libmpx گزینه درایور GCC را به پیوند هدایت می کند libmpx
به صورت ایستا، بدون اینکه لزوماً کتابخانه های دیگر را به صورت ایستا به هم مرتبط کنند.
static-libmpxwrappers
هنگامی که -fcheck-pointer مرزها و -mmpx از گزینه ها برای پیوند دادن یک برنامه بدون استفاده می شود
همچنین با استفاده از -fno-chkp-use-wrappers، درایور GCC به طور خودکار با آن پیوند برقرار می کند
libmpxwrappers. اگر libmpxwrappers به عنوان یک کتابخانه مشترک در دسترس است، و -استاتیک
گزینه استفاده نمی شود، سپس این در برابر نسخه مشترک لینک می شود libmpxwrappers.
static-libmpxwrappers گزینه درایور GCC را به پیوند هدایت می کند libmpxwrappers
به صورت ایستا، بدون اینکه لزوماً کتابخانه های دیگر را به صورت ایستا به هم مرتبط کنند.
-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 چندین بار با نمادهای مختلف برای بارگذاری اجباری
ماژول های کتابخانه اضافی
-z کلمه کلیدی
-z مستقیماً به همراه کلمه کلیدی به پیوند دهنده منتقل می شود کلمه کلیدی. بخش را ببینید
در اسناد پیوند دهنده شما برای مقادیر مجاز و معانی آنها.
گزینه برای فهرست راهنما جستجو
این گزینه ها دایرکتوری هایی را برای جستجوی فایل های هدر، کتابخانه ها و قطعات مشخص می کنند
از کامپایلر:
-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 گزینه های قبل
la -من- گزینه فقط برای مورد "#include" جستجو می شودفایل""; آنها نیستند
"#includeفایل>".
اگر دایرکتوری های اضافی با -I گزینه های بعد از -من- گزینه، اینها
دایرکتوری ها برای همه دستورالعمل های "#include" جستجو می شوند. (معمولا تمام -I
دایرکتوری ها به این روش استفاده می شوند.)
علاوه بر این، -من- گزینه استفاده از دایرکتوری فعلی (که در آن
فایل ورودی فعلی از) به عنوان اولین فهرست جستجو برای "#include" آمده است.فایل"".
هیچ راهی برای نادیده گرفتن این اثر وجود ندارد -من-. با -NS. می توانید جستجو را مشخص کنید
دایرکتوری که هنگام فراخوانی کامپایلر جاری است. این دقیقاً این نیست
همان کاری که پیش پردازنده به طور پیش فرض انجام می دهد، اما اغلب رضایت بخش است.
-من- استفاده از دایرکتوری های سیستم استاندارد برای فایل های هدر را مهار نمی کند.
به این ترتیب، -من- و -nostdinc مستقل هستند.
تعیین هدف دستگاه و کامپایلر نسخه
روش معمول برای اجرای GCC اجرای فایل اجرایی فراخوانی شده است gcc، یا دستگاه-gcc وقتی متقابل
تدوین، یا دستگاه-gcc-نسخه برای اجرای نسخه ای غیر از نسخه ای که نصب شده است
آخر.
سخت افزار مدل و پیکربندی
هر نوع ماشین هدف میتواند گزینههای خاص خود را داشته باشد، با شروع -m، انتخاب کنید
در میان مدلها یا پیکربندیهای سختافزاری مختلف --- برای مثال، 68010 در مقابل 68020، شناور
پردازنده مشترک یا هیچ کدام یک نسخه نصب شده از کامپایلر می تواند برای هر مدلی کامپایل شود
یا پیکربندی، با توجه به گزینه های مشخص شده.
برخی از تنظیمات کامپایلر نیز از گزینه های ویژه اضافی، معمولاً برای
سازگاری با سایر کامپایلرها در همان پلتفرم
AAArch64 گزینه
این گزینه ها برای پیاده سازی AArch64 تعریف شده اند:
-mabi=نام
کد برای مدل داده مشخص شده ایجاد کنید. مقادیر مجاز هستند ilp32 برای SysV-
مانند مدل داده که در آن int، long int و اشاره گر 32 بیتی هستند و lp64 برای SysV مانند
مدل داده ای که در آن int 32 بیتی است، اما int طولانی و اشاره گر 64 بیتی است.
پیش فرض بستگی به پیکربندی هدف خاص دارد. توجه داشته باشید که LP64 و
ABI های ILP32 با پیوند سازگار نیستند. شما باید کل برنامه خود را با همان کامپایل کنید
ABI، و پیوند با مجموعه ای از کتابخانه های سازگار.
-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 بیتی است
دستورات ضرب-انباشت
-mfix-cortex-a53-843419
-MNO-FIX-CORTEX-A53-843419
راه حل ARM Cortex-A53 erratum شماره 843419 را فعال یا غیرفعال کنید.
راه حل اشتباه در زمان پیوند ایجاد می شود و این فقط پرچم مربوطه را عبور می دهد
به پیوند دهنده
-مارس=نام
نام معماری هدف را مشخص کنید که به صورت اختیاری با یک یا چند پسوند اضافه می شود
اصلاح کننده های ویژگی این گزینه دارای فرم است -مارس=قوس{+[نه]از ویژگی های}*، جایی که
فقط مقدار مجاز برای قوس is armv8-a. مقادیر مجاز برای از ویژگی های هستند
در زیر بخش زیر مستند شده است.
در جایی که اصلاح کننده های ویژگی متضاد مشخص شده اند، از سمت راست ترین ویژگی استفاده می شود.
GCC از این نام برای تعیین نوع دستورالعملهایی که میتواند هنگام تولید صادر کند استفاده میکند
کد اسمبلی
جایی که -مارس بدون هیچ یک از آنها مشخص شده است -mtune or -mcpu همچنین مشخص شده است،
کد به گونه ای تنظیم شده است که در طیف وسیعی از پردازنده های هدف پیاده سازی شده به خوبی عمل کند
معماری هدف
-mtune=نام
نام پردازنده هدفی را که GCC باید عملکرد آن را تنظیم کند، مشخص کنید
کد. مقادیر مجاز برای این گزینه عبارتند از: عمومی, قشر-a53, قشر-a57,
قشر-a72, exynos-m1, تندرکس, xgene1.
علاوه بر این، این گزینه می تواند مشخص کند که GCC باید عملکرد کد را تنظیم کند
برای یک سیستم big.LITTLE. مقادیر مجاز برای این گزینه عبارتند از:
cortex-a57.cortex-a53, cortex-a72.cortex-a53.
جایی که هیچ کدام -mtune=, -mcpu= or -مارس= مشخص شده اند، کد برای اجرا تنظیم شده است
به خوبی در طیف وسیعی از پردازنده های هدف.
این گزینه توسط اصلاح کننده های ویژگی نمی تواند پسوند شود.
-mcpu=نام
نام پردازنده مورد نظر را که به صورت اختیاری با یک یا چند ویژگی پسوند می شود، مشخص کنید
اصلاح کننده ها این گزینه دارای فرم است -mcpu=پردازنده{+[نه]از ویژگی های}*، جایی که جایز است
مقادیر برای پردازنده همان موارد موجود برای -mtune.
مقادیر مجاز برای از ویژگی های در زیر بخش زیر مستند شده است.
در جایی که اصلاح کننده های ویژگی متضاد مشخص شده اند، از سمت راست ترین ویژگی استفاده می شود.
GCC از این نام برای تعیین نوع دستورالعملهایی که میتواند هنگام تولید صادر کند استفاده میکند
کد اسمبلی (مثل اینکه توسط -مارس) و برای تعیین پردازنده هدف که برای
کوک برای اجرا (مثل اینکه توسط -mtune). جایی که این گزینه همراه با استفاده می شود
-مارس or -mtune، آن گزینه ها بر قسمت مناسب این قسمت اولویت دارند
گزینه.
-مارس و -mcpu اصلاح کننده های ویژگی
اصلاح کننده های ویژگی مورد استفاده با -مارس و -mcpu می تواند یکی از موارد زیر باشد:
CRC برنامه افزودنی CRC را فعال کنید.
عضو سازمانهای سری ومخفی
افزونه 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=تعداد گزینه.
-منو-دور-شب
زمانبند را طوری فرض کنید که حالت گرد کردن روی کوتاهی تنظیم شده است. را
پیش فرض است -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 تغییر دهید. پیش فرض است -مره، که با استفاده از
DImode به عنوان حالت ترجیحی SIMD.
-max-vect-align=تعداد
حداکثر تراز برای انواع حالت برداری SIMD. تعداد ممکن است 4 یا 8 باشد. پیش فرض این است
8. توجه داشته باشید که این یک تغییر ABI است، حتی اگر بسیاری از رابط های تابع کتابخانه چنین هستند
اگر از حالتهای برداری SIMD در مکانهایی که بر اندازه و/یا تأثیر میگذارند استفاده نکنند، تحت تأثیر قرار نمیگیرند
تراز انواع مربوطه
-msplit-vecmove-early
بردار تقسیم به تک کلمه حرکت می کند قبل از بارگذاری مجدد. در تئوری این می تواند بدهد
تخصیص ثبت نام بهتر است، اما تا کنون به نظر می رسد به طور کلی برعکس است.
-m1reg-REG
یک ثبات را برای نگه داشتن ثابت -1 مشخص کنید، که بارگذاری کوچک را منفی می کند
ثابت ها و بیت ماسک های خاص سریع تر. مقادیر مجاز برای REG هستند r43 و r63,
که استفاده از آن رجیستر را به عنوان یک ثبت ثابت مشخص می کند و هیچ، یعنی خیر
ثبت نام برای این منظور استفاده می شود. پیش فرض است -m1reg-هیچکدام.
ARC گزینه
گزینه های زیر نوع معماری که کد برای آن کامپایل می شود را کنترل می کنند:
بشکه-شفتر
دستورالعمل های پشتیبانی شده توسط شیفتر بشکه را ایجاد کنید. این پیش فرض است مگر اینکه
-mcpu=ARC601 در عمل است
-mcpu=پردازنده
نوع معماری، استفاده از ثبت، و پارامترهای زمان بندی دستورالعمل را برای پردازنده.
همچنین گزینه های نام مستعار میانبر برای سازگاری با عقب و
راحتی مقادیر پشتیبانی شده برای پردازنده هستند
ARC600
کامپایل برای ARC600. نام مستعار: -mA6, -mARC600.
ARC601
کامپایل برای ARC601. نام مستعار: -mARC601.
ARC700
کامپایل برای ARC700. نام مستعار: -mA7, -mARC700. این حالت پیش فرض در هنگام پیکربندی است
با --with-cpu=arc700.
-mdpfp
-mdpfp-compact
FPX: دستورالعمل های FPX Double Precision را ایجاد کنید، که برای اجرای فشرده تنظیم شده است.
-mdpfp-سریع
FPX: دستورالعمل های FPX Double Precision را ایجاد کنید، که برای اجرای سریع تنظیم شده است.
-mno-dpfp-lrsr
دستورالعمل های LR و SR را از استفاده از رجیسترهای اکستنشن FPX غیرفعال کنید.
-میا
دستورالعمل های حسابی توسعه یافته را ایجاد کنید. در حال حاضر فقط "divaw"، "adds"، "subs"،
و "sat16" پشتیبانی می شوند. این همیشه برای فعال است -mcpu=ARC700.
-mno-mpy
دستورالعمل های mpy را برای ARC700 تولید نکنید.
-mmul32x16
دستورالعمل های ضرب و مک 32x16 بیتی را ایجاد کنید.
-mmul64
دستورالعمل های mul64 و mulu64 را ایجاد کنید. فقط برای -mcpu=ARC600.
-mnorm
ایجاد دستورالعمل هنجار. این پیش فرض اگر است -mcpu=ARC700 در عمل است
-mspfp
-mspfp-compact
FPX: دستورالعمل های Single Precision FPX را ایجاد کنید، که برای اجرای فشرده تنظیم شده است.
-MSPFP سریع
FPX: دستورالعمل های Single Precision FPX را ایجاد کنید که برای اجرای سریع تنظیم شده است.
-msimd
تولید دستورالعمل های ARC SIMD را از طریق داخلی های خاص هدف فعال کنید. فقط معتبر
برای -mcpu=ARC700.
-msoft-float
این گزینه نادیده گرفته شد. فقط برای اهداف سازگاری ارائه شده است. نرم افزار
کد ممیز شناور به طور پیش فرض منتشر می شود و این پیش فرض می تواند توسط FPX لغو شود
گزینه ها؛ mspfp, mspfp-compact، یا mspfp-fast برای دقت تک، و mdpfp, mdpfp-
جمع و جور، یا mdpfp-fast برای دقت مضاعف
-mswap
دستورالعمل های مبادله را ایجاد کنید.
گزینه های زیر به اسمبلر منتقل می شوند و پیش پردازنده را نیز تعریف می کنند
نمادهای کلان
-mdsp-packa
برای فعال کردن پسوندهای DSP Pack A به اسمبلر منتقل شد. را نیز تنظیم می کند
نماد پیش پردازنده "__Xdsp_packa".
-mdvbf
برای فعال کردن پسوند پروانه ای دوگانه ویتربی به اسمبلر منتقل شد. همچنین
نماد پیش پردازنده "__Xdvbf" را تنظیم می کند.
-ملاک
برای فعال کردن پسوند Locked Load/Store Conditional به اسمبلر منتقل شد.
همچنین نماد پیش پردازنده "__Xlock" را تنظیم می کند.
-mmac-d16
به اسمبلر منتقل شد. همچنین نماد پیش پردازنده "__Xxmac_d16" را تنظیم می کند.
-mmac-24
به اسمبلر منتقل شد. همچنین نماد پیش پردازنده "__Xxmac_24" را تنظیم می کند.
-mrtsc
برای فعال کردن پسوند 64 بیتی Time-Stamp Counter به اسمبلر منتقل شد
دستورالعمل همچنین نماد پیش پردازنده "__Xrtsc" را تنظیم می کند.
mswape
به اسمبلر منتقل شد تا دستور الحاقی سفارش بایت مبادله را فعال کند.
همچنین نماد پیش پردازنده "__Xswape" را تنظیم می کند.
-متلفونی
برای فعال کردن دستورالعملهای عملوند دوگانه و تکی به اسمبلر منتقل شد
تلفن همچنین نماد پیش پردازنده "__Xtelephony" را تنظیم می کند.
-mxy
برای فعال کردن پسوند حافظه XY به اسمبلر منتقل شد. را نیز تنظیم می کند
نماد پیش پردازنده "__Xxy".
گزینه های زیر نحوه حاشیه نویسی کد اسمبلی را کنترل می کنند:
-نادرست کردن
دستورالعمل های اسمبلر را با آدرس های تخمینی حاشیه نویسی کنید.
-mannotate-align
توضیح دهید که چه ملاحظات همسویی منجر به تصمیم گیری برای یک دستورالعمل می شود
کوتاه یا بلند
گزینه های زیر به پیوند دهنده منتقل می شوند:
-مارکلینوکس
برای مشخص کردن استفاده از شبیه سازی "arclinux" به پیوند دهنده منتقل می شود. این گزینه
به طور پیش فرض در زنجیره های ابزار ساخته شده برای "arc-linux-uclibc" و فعال است
"arceb-linux-uclibc" زمانی را هدف قرار می دهد که پروفایل درخواستی نباشد.
-marclinux_prof
برای مشخص کردن استفاده از شبیه سازی "arclinux_prof" به پیوند دهنده منتقل می شود. این
گزینه به طور پیش فرض در زنجیره های ابزار ساخته شده برای "arc-linux-uclibc" فعال است و
"arceb-linux-uclibc" زمانی که پروفایل درخواست می شود هدف می گیرد.
گزینه های زیر معنای کد تولید شده را کنترل می کنند:
-mepilogue-cfi
تولید اطلاعات فریم تماس را برای اپیلوگ ها فعال کنید.
-mno-epilogue-cfi
تولید اطلاعات فریم تماس را برای اپیلوگ ها غیرفعال کنید.
تماس های طولانی
insns تماس را به عنوان تماس های غیرمستقیم ثبت کنید، بنابراین دسترسی کامل را فراهم کنید
محدوده آدرس 32 بیتی
-تماس های متوسط
از محدوده آدرس دهی کمتر از 25 بیت برای تماس ها استفاده نکنید، که افست موجود است
برای یک دستورالعمل شاخه و پیوند بدون قید و شرط. اجرای مشروط تابع
تماسها سرکوب میشوند تا امکان استفاده از محدوده 25 بیتی به جای محدوده 21 بیتی فراهم شود.
با شاخه و پیوند مشروط. این پیشفرض برای زنجیرههای ابزار ساخته شده برای آن است
اهداف "arc-linux-uclibc" و "arceb-linux-uclibc".
-mno-sdata
ارجاعات sdata تولید نکنید. این پیشفرض برای زنجیرههای ابزار ساخته شده برای آن است
اهداف "arc-linux-uclibc" و "arceb-linux-uclibc".
-mucb-mcount
ابزاری با تماس های mcount همانطور که در کد UCB استفاده می شود. یعنی شمارش را در فراخوان انجام دهید،
تماس گیرنده نیست به طور پیش فرض ابزار دقیق ARC در تماس گیرنده حساب می شود.
-mvolatile-cache
برای مراجع فرار از دسترسی های حافظه کش معمولی استفاده کنید. این پیش فرض است.
-mno-cache-cache
بای پس کش را برای مراجع فرار فعال کنید.
گزینه های زیر تولید کد دقیق را تنظیم کنید:
بدخیم تماس بگیرید
بهینه سازی تراز را برای دستورالعمل های تماس انجام دهید.
-mauto-modify-reg
استفاده از اصلاح قبل/پست با جابجایی ثبت را فعال کنید.
-mbbit-peephole
bbit peephole2 را فعال کنید.
-mno-brcc
این گزینه یک ورود به هدف خاص را غیرفعال می کند arc_reorg برای تولید "BRcc"
دستورالعمل ها. این هیچ تأثیری بر تولید "BRcc" که توسط پاس ترکیبی هدایت می شود ندارد.
-mcase-vector-pcrel
از جداول سوئیچ مربوط به کامپیوتر استفاده کنید - این کار کوتاه کردن میز کیس را امکان پذیر می کند. این است
پیش فرض برای -اواس.
mcompact-casesi
الگوی فشرده فشرده را فعال کنید. این پیش فرض برای است -اواس.
-mno-cond-exec
برای ایجاد دستورالعمل های اجرای مشروط، پاس خاص ARCompact را غیرفعال کنید. ناشی از
برای به تاخیر انداختن زمانبندی شکافها و برهمکنشهای بین اعداد عملوند، اندازههای تحت اللفظی،
طول دستورالعمل، و پشتیبانی از اجرای مشروط، مستقل از هدف
عبور برای تولید اجرای شرطی اغلب وجود ندارد، بنابراین پورت ARC a را نگه داشته است
پاس ویژه ای که سعی می کند اجرای مشروط بیشتری را تولید کند
فرصتها پس از تخصیص ثبت، کوتاه شدن شعبه و زمانبندی شکاف تاخیر
انجام شده است. این پاس به طور کلی، اما نه همیشه، عملکرد و کد را بهبود می بخشد
اندازه، به هزینه زمان اضافی کامپایل، به همین دلیل است که گزینه ای برای تغییر وجود دارد
آن را خاموش کنید. اگر با دستورات تماس بیش از مقدار مجاز آنها مشکل دارید
محدوده چون شرطی هستند، باید استفاده از آنها را در نظر بگیرید -تماس های متوسط
به جای آن.
-مرغ-cbranchsi
استفاده از پیش بارگیری مجدد الگوی cbranchsi را فعال کنید.
-mexpand-adddi
"adddi3" و "subdi3" را در زمان تولید rtl به "add.f"، "adc" و غیره گسترش دهید.
بارهای ترکیبی
استفاده از بارهای فهرست شده را فعال کنید. این می تواند مشکل ساز باشد زیرا برخی از بهینه سازها در آن زمان هستند
فرض کنید فروشگاه های نمایه شده وجود دارند، که اینطور نیست.
-mlra
تخصیص ثبت محلی را فعال کنید. این هنوز برای ARC آزمایشی است، بنابراین به طور پیش فرض
کامپایلر از بارگذاری مجدد استاندارد (به عنوان مثال -mno-lra).
-mlra-priority-none
هیچ اولویتی برای ثبت های هدف مشخص نکنید.
-mlra-priority-compact
اولویت ثبت هدف را برای r0..r3 / r12..r15 نشان دهید.
-mlra-priority-noncompact
اولویت ثبت کننده هدف را برای r0..r3 / r12..r15 کاهش دهید.
-mno-millicode
هنگام بهینه سازی برای اندازه (استفاده از -اواس)، پیش درآمدها و پایانی هایی که باید ذخیره یا
بازیابی تعداد زیادی از رجیسترها اغلب با استفاده از فراخوانی به ویژه کوتاه می شوند
تابع در libgcc; این به عنوان یک نامیده می شود میلی کد صدا زدن. همانطور که این تماس ها می توانند مطرح شوند
مشکلات عملکرد، و/یا ایجاد مشکلات پیوند هنگام پیوند دادن به روشی غیراستاندارد،
این گزینه برای خاموش کردن تولید تماس میلیکد ارائه شده است.
کد مختلط
تخصیص رجیستر را برای کمک به تولید دستورالعمل 16 بیتی تغییر دهید. این به طور کلی دارد
اثر کاهش متوسط اندازه دستورالعمل در حین افزایش دستورالعمل
شمردن.
-mq-class
گزینه های دستورالعمل 'q' را فعال کنید. این پیش فرض برای است -اواس.
-mRcq
کنترل محدودیت Rcq را فعال کنید - اکثر تولید کدهای کوتاه به این بستگی دارد. این هست
پیشفرض.
-mRcw
کنترل محدودیت Rcw را فعال کنید - ccfsm condexec بیشتر به این بستگی دارد. این است
به طور پیش فرض
-msize-level=سطح
بهینه سازی اندازه دقیق با توجه به طول دستورالعمل و تراز. در
مقادیر شناخته شده برای سطح هستند:
0 بدون بهینه سازی اندازه این سطح منسوخ شده و مانند آن رفتار می شود 1.
1 دستورالعمل های کوتاه به طور فرصت طلبانه استفاده می شود.
2 علاوه بر این، تراز حلقه ها و کد پس از موانع حذف می شوند.
3 علاوه بر این، تراز داده های اختیاری حذف می شود و گزینه Os فعال شده است.
این به صورت پیش فرض است 3 چه زمانی -اواس در حال اجرا است. در غیر این صورت، رفتار زمانی که این نیست
مجموعه معادل سطح است 1.
-mtune=پردازنده
تنظیم پارامترهای زمانبندی دستورالعمل برای پردازنده، نادیده گرفتن هر مورد ضمنی توسط -mcpu=.
مقادیر پشتیبانی شده برای پردازنده هستند
ARC600
برای cpu ARC600 تنظیم کنید.
ARC601
برای cpu ARC601 تنظیم کنید.
ARC700
برای cpu ARC700 با بلوک ضریب استاندارد تنظیم کنید.
ARC700-xmac
برای پردازنده ARC700 با بلوک XMAC تنظیم کنید.
ARC725D
برای پردازنده ARC725D تنظیم کنید.
ARC750D
برای پردازنده ARC750D تنظیم کنید.
-multcost=تعداد
هزینه در نظر گرفته شده برای یک دستور ضرب، با 4 برابر بودن با یک دستورالعمل معمولی
-munalign-prob-threshold=احتمال
آستانه احتمال را برای شاخه های بدون تراز تنظیم کنید. هنگام تنظیم برای ARC700 و
با بهینه سازی سرعت، شاخه های بدون شکاف تاخیر پر شده ترجیحا ساطع می شوند
بدون تراز و طولانی، مگر اینکه نمایه نشان دهد که احتمال شعبه به
گرفته شود در زیر آمده است احتمال. پیش فرض (REG_BR_PROB_BASE/2)، یعنی 5000 است.
گزینه های زیر برای سازگاری با عقب نگهداری می شوند، اما اکنون منسوخ شده اند
و در نسخه بعدی حذف خواهد شد:
-مارگونات
FPX منسوخ شده
-mbig-endian
-EB کامپایل کد برای اهداف بزرگ اندیان. استفاده از این گزینه ها اکنون منسوخ شده است. کاربران
اگر کد بزرگ endian می خواهید، باید از اهداف "arceb-elf32" و "arceb-linux-uclibc" استفاده کنید.
هنگام ساخت زنجیره ابزار، که big-endian پیش فرض آن است.
-mlittle-endian
-The کامپایل کد برای اهداف اندیان کوچک. استفاده از این گزینه ها اکنون منسوخ شده است.
کاربرانی که خواهان کد کمی اندین هستند باید از "arc-elf32" و "arc-linux-uclibc" استفاده کنند.
در هنگام ساخت زنجیره ابزار، که کمی endian پیشفرض است، هدفگذاری میکند.
-barrel_shifter
جایگزین توسط بشکه-شفتر.
-mdpfp_compact
جایگزین توسط -mdpfp-compact.
-mdpfp_fast
جایگزین توسط -mdpfp-سریع.
-mdsp_packa
جایگزین توسط -mdsp-packa.
-mEA
جایگزین توسط -میا.
-mmac_24
جایگزین توسط -mmac-24.
-mmac_d16
جایگزین توسط -mmac-d16.
-MSPFP_COMPACT
جایگزین توسط -mspfp-compact.
-mspfp_fast
جایگزین توسط -MSPFP سریع.
-mtune=پردازنده
ارزشها ARC600, ARC601, ARC700 و arc700-xmac برای پردازنده جایگزین می شوند با ARC600, ARC601,
ARC700 و ARC700-xmac به ترتیب
-MultCost =تعداد
جایگزین توسط چند هزینه.
ARM گزینه
اینها -m گزینه هایی برای پورت 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 اجرا می شود. پیش فرض کامپایل است
کد برای یک پردازنده کوچک اندین
-مارس=نام
این نام معماری 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, armv7ve, armv8-a, armv8-a+crc, iwmmxt, iwmmxt2, ep9312.
-مارچ=armv7ve معماری armv7-a با پسوندهای مجازی سازی است.
-مارس=armv8-a+crc تولید کد را برای معماری ARMv8-A همراه با
پسوندهای اختیاری CRC32
-مارس=بومی باعث می شود کامپایلر به طور خودکار معماری بیلد را شناسایی کند
کامپیوتر. در حال حاضر، این ویژگی فقط در گنو/لینوکس پشتیبانی میشود و نه همه
معماری ها شناخته می شوند. اگر تشخیص خودکار ناموفق باشد، گزینه هیچ ندارد
اثر.
-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,
قشر-a12, قشر-a15, قشر-a53, قشر-a57, قشر-a72, cortex-r4, cortex-r4f,
cortex-r5, cortex-r7, cortex-m7, cortex-m4, cortex-m3, cortex-m1, cortex-m0,
cortex-m0plus, cortex-m1.small-multiply, cortex-m0.small-multiply,
cortex-m0plus.small-multiply, exynos-m1, marvell-pj4, xscale, iwmmxt, iwmmxt2, ep9312,
fa526, fa626, fa606te, fa626te, fmp626, fa726te, xgene1.
علاوه بر این، این گزینه می تواند مشخص کند که GCC باید عملکرد کد را تنظیم کند
برای یک سیستم big.LITTLE. اسامی مجاز عبارتند از: cortex-a15.cortex-a7,
cortex-a57.cortex-a53, cortex-a72.cortex-a53.
-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,
fpv5-d16, fpv5-sp-d16, 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 مگابایتی باشد، سوئیچ مورد نیاز است
محدوده دستورالعمل فراخوانی مبتنی بر افست.
حتی اگر این سوئیچ فعال باشد، همه تماسهای عملکرد به تماسهای طولانی تبدیل نمیشوند.
اکتشافی این است که توابع ایستا، توابعی که دارای "short_call" هستند.
ویژگی، توابعی که در محدوده دستورالعمل "#pragma no_long_calls" قرار دارند،
و توابعی که تعاریف آنها قبلاً در جریان کامپایل شده است
واحد کامپایل به تماس های طولانی تبدیل نمی شود. استثناهای این قاعده این است که
تعاریف ضعیف توابع، توابعی با ویژگی "long_call" یا "section"
ویژگی، و توابعی که در محدوده دستورالعمل "#pragma_long_calls" هستند
همیشه به تماس های طولانی تبدیل می شوند.
این ویژگی به طور پیش فرض فعال نیست. مشخص کردن -mno-long-تماس بازیابی
رفتار پیشفرض، مانند قرار دادن فراخوانی تابع در محدوده یک "#pragma
دستورالعمل long_calls_off". توجه داشته باشید که این سوئیچ ها هیچ تاثیری بر نحوه کامپایلر ندارند
کدی را برای رسیدگی به فراخوانی تابع از طریق نشانگرهای تابع تولید می کند.
-msingle-pic-base
رجیستر مورد استفاده برای آدرس دهی PIC را به عنوان فقط خواندنی در نظر بگیرید، نه اینکه آن را در آن بارگیری کنید
مقدمه برای هر تابع سیستم زمان اجرا مسئول اولیه سازی این است
قبل از شروع اجرا با یک مقدار مناسب ثبت نام کنید.
-mpic-register=REG
رجیستر مورد استفاده برای آدرس دهی PIC را مشخص کنید. برای کیس پایه PIC استاندارد،
پیش فرض هر ثبات مناسبی است که توسط کامپایلر تعیین می شود. برای یک کیس پایه PIC،
پیش فرض است R9 اگر هدف مبتنی بر EABI باشد یا چک کردن پشته فعال باشد، در غیر این صورت
پیش فرض است R10.
-mpic-data-is-text-relative
فرض کنید که هر بخش داده نسبت به بخش متن در زمان بارگذاری است. از این رو،
این امکان آدرس دهی داده ها را با استفاده از عملیات مربوط به رایانه شخصی فراهم می کند. این گزینه به صورت پیش فرض روشن است
برای اهدافی غیر از VxWorks RTP.
-mpoke-function-name
نام هر تابع را مستقیماً قبل از تابع در قسمت متن بنویسید
مقدمه کد تولید شده مشابه این است:
t0
.ascii "arm_poke_function_name"، 0
تراز کردن
t1
.word 0xff000000 + (t1 - t0)
arm_poke_function_name
mov ip, sp
stmfd sp!، {fp، ip، lr، pc}
فریم فریم فریم، آی پی، #4
هنگام اجرای پشته پشته، کد می تواند مقدار "pc" ذخیره شده در "fp +" را بازرسی کند.
0. اگر تابع ردیابی به مکان "pc - 12" نگاه کند و 8 بیت بالا هستند
تنظیم کنید، سپس می دانیم که یک نام تابع بلافاصله قبل از آن تعبیه شده است
مکان و دارای طول "((pc[-3]) & 0xff000000) است.
-مهم
-مارم
بین تولید کدی که در حالت های ARM و Thumb اجرا می شود، انتخاب کنید. پیش فرض برای
اکثر تنظیمات برای تولید کدی است که در حالت ARM اجرا می شود، اما به طور پیش فرض
را می توان با پیکربندی GCC با --with-mode=بود گزینه پیکربندی
-mtpcs-frame
یک قاب پشته ای ایجاد کنید که با استاندارد فراخوانی روش شست مطابقت دارد
همه عملکردهای غیر برگ (یک تابع برگ تابعی است که تابع دیگری را فراخوانی نمی کند
توابع.) پیش فرض است -mno-tpcs-frame.
-mtpcs-leaf-frame
یک قاب پشته ای ایجاد کنید که با استاندارد فراخوانی روش شست مطابقت دارد
تمام عملکردهای برگ (یک تابع برگ تابعی است که هیچ تابع دیگری را فراخوانی نمی کند.)
پیش فرض این است -mno-apcs-leaf-frame.
-mcallee-super-interworking
به تمام توابع قابل مشاهده خارجی در فایل در حال کامپایل یک دستورالعمل ARM می دهد
هدر را تنظیم کنید که قبل از اجرای بقیه عملکرد به حالت Thumb تغییر کند.
این اجازه می دهد تا این توابع از کدهای غیر متقابل فراخوانی شوند. این گزینه است
در پیکربندیهای AAPCS معتبر نیست زیرا کار درونی بهطور پیشفرض فعال است.
-mcaller-super-interworking
به تماس ها از طریق نشانگرهای تابع (از جمله توابع مجازی) اجازه می دهد تا به درستی اجرا شوند
صرف نظر از اینکه کد هدف برای کار درونی کامپایل شده است یا خیر.
هزینه اجرای یک نشانگر تابع در صورتی که این گزینه وجود داشته باشد، سربار کمی دارد
فعال شده است. این گزینه در پیکربندیهای AAPCS معتبر نیست زیرا interworking معتبر است
به طور پیش فرض فعال است
-mtp=نام
مدل دسترسی را برای نشانگر ذخیرهسازی محلی رشته مشخص کنید. مدل های معتبر هستند
نرم، که تماس هایی به "__aeabi_read_tp" ایجاد می کند، cp15، که نخ را واکشی می کند
اشاره گر مستقیماً از "cp15" (در معماری arm6k پشتیبانی می شود)، و خودکار، که
از بهترین روش موجود برای پردازنده انتخاب شده استفاده می کند. تنظیمات پیش فرض است
خودکار.
-mtls-dialect=گویش
لهجه مورد استفاده برای دسترسی به حافظه محلی رشته را مشخص کنید. دو گویشهستند
پشتیبانی---گوزن یالدار و gnu2. گوزن یالدار گویش طرح اصلی گنو را برای آن انتخاب می کند
پشتیبانی از مدل های پویا TLS محلی و جهانی در gnu2 گویش گنو را انتخاب می کند
طرح توصیفگر، که عملکرد بهتری را برای کتابخانه های مشترک ارائه می دهد. گنو
طرح توصیفگر با طرح اصلی سازگار است، اما نیاز به جدید دارد
اسمبلر، لینکر و پشتیبانی کتابخانه. مدل های TLS exec اولیه و محلی هستند
تحت تأثیر این گزینه قرار نگرفته و همیشه از طرح اصلی استفاده کنید.
-mword-relocations
فقط جابجایی های مطلق را روی مقادیر به اندازه کلمه ایجاد کنید (یعنی R_ARM_ABS32). این هست
به طور پیش فرض در اهداف (uClinux، SymbianOS) که در آن لودر زمان اجرا اعمال می شود، فعال می شود.
این محدودیت و چه زمانی -fpic or -fPIC مشخص شده است.
-mfix-cortex-m3-ldrd
برخی از هستههای Cortex-M3 میتوانند باعث خرابی دادهها با دستورالعملهای "ldrd" شوند
از رجیسترهای مقصد و پایه همپوشانی استفاده می شود. این گزینه از تولید جلوگیری می کند
این دستورالعمل ها این گزینه به طور پیش فرض در زمانی فعال می شود -mcpu = Cortex-M3 is
مشخص شده.
-دسترسی چندجانبه
-mno-unaligned-access
خواندن و نوشتن مقادیر 16 و 32 بیتی از آدرس ها را فعال (یا غیرفعال می کند)
که 16 یا 32 بیت تراز نیستند. به طور پیش فرض دسترسی بدون تراز برای همه غیرفعال است
pre-ARMv6 و تمام معماری های ARMv6-M و برای تمام معماری های دیگر فعال است. اگر
دسترسی بدون تراز فعال نیست، سپس به کلمات در ساختارهای داده های بسته بندی شده دسترسی پیدا می شود
بایت در یک زمان
ویژگی ARM "Tag_CPU_unaligned_access" در فایل شی تولید شده به
بسته به تنظیمات این گزینه، درست یا نادرست است. در صورت دسترسی بدون تراز
فعال می شود سپس نماد پیش پردازنده "__ARM_FEATURE_UNALIGNED" نیز تعریف می شود.
-mneon-for-64bit
استفاده از نئون را برای مدیریت عملیات اسکالر 64 بیتی فعال می کند. این به طور پیش فرض غیرفعال است
از آنجایی که هزینه انتقال داده ها از ثبات های اصلی به نئون بالا است.
mslow-flash-data
فرض کنید بارگیری داده ها از فلش کندتر از واکشی دستورالعمل است. بنابراین تحت اللفظی
بار برای عملکرد بهتر به حداقل می رسد. این گزینه فقط زمانی پشتیبانی می شود که
کامپایل برای نمایه M ARMv7 و به طور پیش فرض خاموش است.
-masm-syntax-unified
فرض کنید اسمبلر درون خطی از نحو یکپارچه asm استفاده می کند. پیش فرض در حال حاضر خاموش است
که دلالت بر نحو تقسیم شده دارد. در حال حاضر این گزینه فقط برای Thumb1 و
روی حالت ARM و Thumb2 تاثیری ندارد. با این حال، این ممکن است در نسخه های بعدی تغییر کند
شورای همکاری خلیج فارس نحو تقسیم شده باید منسوخ شده در نظر گرفته شود.
آن را محدود کن
تولید بلوک های IT را برای مطابقت با قوانین ARMv8 محدود می کند. بلوک های فناوری اطلاعات می توانند
فقط شامل یک دستورالعمل 16 بیتی از مجموعه منتخبی از دستورالعمل ها است. این
گزینه به طور پیش فرض برای حالت ARMv8 Thumb روشن است.
-mprint-tune-info
چاپ اطلاعات تنظیم CPU به عنوان نظر در فایل اسمبلر. این یک گزینه استفاده شده است
فقط برای تست رگرسیون کامپایلر و برای استفاده معمولی در نظر گرفته نشده است
کامپایل کردن کد این گزینه به طور پیش فرض غیر فعال است.
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"، "ata6616c"، "attiny13"، "attiny13a"،
"attiny2313"، "attiny2313a"، "attiny24"، "attiny24a"، "attiny25"، "attiny261"،
"attiny261a"، "attiny43u"، "attiny4313"، "attiny44"، "attiny44a"، "attiny441"،
"attiny45"، "attiny461"، "attiny461a"، "attiny48"، "attiny828"، "attiny84"،
"attiny84a"، "attiny841"، "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"، "ata6617c"، "ata664251"،
"atmega16u2"، "atmega32u2"، "atmega8u2"، "attiny1634"، "attiny167"، "at90usb162"،
"at90usb82".
"avr4"
دستگاههای «پیشرفته» با حداکثر 8@tie{}کی بایت حافظه برنامه. mcu@tie{}= "ata6285"،
"ata6286"، "ata6289"، "ata6612c"، "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{}= "ata5702m322"، "ata5782"، "ata5790"، "ata5790n"، "ata5795"، "ata5831"،
"ata6613c"، "ata6614q"، "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"، "atmega32"، "atmega32a"، "atmega32c1"، "atmega32hvb"،
"atmega32hvbrevb"، "atmega32m1"، "atmega32u4"، "atmega32u6"، "atmega323"،
"atmega324a"، "atmega324p"، "atmega324pa"، "atmega325"، "atmega325a"،
"atmega325p"، "atmega325pa"، "atmega3250"، "atmega3250a"، "atmega3250p"،
"atmega3250pa"، "atmega328"، "atmega328p"، "atmega329"، "atmega329a"،
"atmega329p"، "atmega329pa"، "atmega3290"، "atmega3290a"، "atmega3290p"،
"atmega3290pa"، "atmega406"، "atmega64"، "atmega64a"، "atmega64c1"، "atmega64hve"،
"atmega64hve2"، "atmega64m1"، "atmega64rfr2"، "atmega640"، "atmega644"،
"atmega644a"، "atmega644p"، "atmega644pa"، "atmega644rfr2"، "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"، "atmega128rfr2"، "atmega1280"، "atmega1281"،
"atmega1284"، "atmega1284p"، "atmega1284rfr2"، "at90can128"، "at90usb1286"،
"at90usb1287".
"avr6"
دستگاههای «پیشرفته» با رایانه شخصی 3 بایت، یعنی با بیش از 128@tie{}KB برنامه
حافظه است. mcu@tie{}= "atmega256rfr2"، "atmega2560"، "atmega2561"، "atmega2564rfr2".
"avrxmega2"
دستگاه های "XMEGA" با حافظه برنامه بیش از 8@tie{}KiB و حداکثر 64@tie{}KiB.
mcu@tie{}= "atxmega16a4"، "atxmega16a4u"، "atxmega16c4"، "atxmega16d4"،
"atxmega16e5", "atxmega32a4", "atxmega32a4u", "atxmega32c3", "atxmega32c4",
"atxmega32d3", "atxmega32d4", "atxmega32e5", "atxmega8e5".
"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{}=
"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".
"اورتینی"
"TINY" دستگاه های هسته کوچک با 512@tie{}B تا 4@tie{}KiB حافظه برنامه.
mcu@tie{}= "attiny10"، "attiny20"، "attiny4"، "attiny40"، "attiny5"، "attiny9".
"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 مطابقت ندارد، اما باعث کوچکتر شدن آن می شود
اندازه کد
-mn-flash=تعداد
فرض کنید که فلش مموری اندازه ای از تعداد بار 64@tie{}KiB.
-mno-وقفه می کند
کد تولید شده با وقفه های سخت افزاری سازگار نیست. اندازه کد کوچکتر است.
-آرامش کن
سعی کنید پاسخ "CALL" را جایگزین کنید. دستورالعمل "JMP" توسط "RCALL" کوتاهتر پاسخ. "RJMP"
دستورالعمل در صورت وجود تنظیمات -آرامش کن فقط اضافه می کند --mlink-relax گزینه به
خط فرمان اسمبلر و --آروم باش گزینه ای برای خط فرمان پیوند دهنده.
شل کردن پرش توسط پیوند دهنده انجام می شود زیرا قبلاً جبران پرش شناخته نشده بود
کد واقع شده است. بنابراین، کد اسمبلر تولید شده توسط کامپایلر یکسان است،
اما دستورالعمل های موجود در فایل اجرایی ممکن است با دستورالعمل های اسمبلر متفاوت باشد
کد
در صورت نیاز به پیوندهای خرد، Relaxing باید روشن شود، به بخش "EIND" و
پیوندهای خرد زیر.
-mrmw
فرض کنید که دستگاه از دستورالعمل های Read-Modify-Write "XCH"، "LAC"، "LAS" پشتیبانی می کند.
و "LAT".
-msp8
رجیستر اشاره گر پشته را به عنوان یک ثبات 8 بیتی در نظر بگیرید، یعنی بایت بالا را در نظر بگیرید
نشانگر پشته صفر است. به طور کلی، نیازی به تنظیم این گزینه با دست ندارید.
این گزینه به صورت داخلی توسط کامپایلر برای انتخاب و ساخت مولتی لیب برای آن استفاده می شود
معماری های "avr2" و "avr25". این معماری ها دستگاه ها را با و بدون ترکیب می کنند
"SPH". برای هر تنظیمی غیر از -mmcu=avr2 or -mmcu=avr25 درایور کامپایلر اضافه می کند
یا این گزینه را از خط فرمان کامپایلر حذف می کند، زیرا کامپایلر
سپس می داند که آیا دستگاه یا معماری دارای نشانگر پشته 8 بیتی است و بنابراین "SPH" ندارد.
ثبت نام کنند یا نه
-Mstrict-X
از ثبت آدرس "X" به روشی که سخت افزار پیشنهاد می کند استفاده کنید. این به این معنی است که "X" است
فقط در آدرس دهی غیر مستقیم، پس از افزایش یا قبل از کاهش استفاده می شود.
بدون این گزینه، ثبات "X" ممکن است به همان روشی که "Y" یا "Z" استفاده می شود
سپس توسط دستورالعمل های اضافی شبیه سازی می شود. به عنوان مثال، بارگذاری یک مقدار با
آدرس دهی "X+const" با یک "const < 64" غیر منفی کوچک به یک ثبات Rn is
انجام شده است
adiw r26, const ; X += Const
ld ، ایکس ؛ = *X
sbiw r26, const ; X - = ثابت
-مدی استک
فقط 8@tie{}بیت های پایینی نشانگر پشته را تغییر دهید.
-nodevicelib
با کتابخانه خاص دستگاه AVR-LibC "libdev.a" پیوند نزنید.
-Waddr-space-convert
هشدار در مورد تبدیل بین فضاهای آدرس در موردی که آدرس حاصل می شود
فضا در فضای آدرس ورودی موجود نیست.
"EIND" و دستگاه هایی با بیش از 128 کیلو بایت فلش
نشانگرها در پیاده سازی 16@tie{}بیت عرض دارند. آدرس یک تابع یا برچسب
به عنوان آدرس کلمه نمایش داده می شود به طوری که پرش ها و تماس های غیر مستقیم می توانند هر کدی را هدف قرار دهند
آدرس در محدوده 64@tie{}کلمات Ki.
به منظور تسهیل پرش غیرمستقیم در دستگاههای با بیش از 128@tie{}کی بایت
فضای حافظه برنامه، یک ثبات تابع خاص به نام "EIND" وجود دارد که به عنوان کار می کند
مهم ترین بخش از آدرس هدف زمانی که دستورالعمل های "EICALL" یا "EIJMP" هستند
استفاده شده.
پرش ها و تماس های غیرمستقیم در این دستگاه ها به شرح زیر توسط کامپایلر انجام می شود و می باشد
مشروط به برخی محدودیت ها:
* کامپایلر هرگز "EIND" را تنظیم نمی کند.
* کامپایلر به طور ضمنی از "EIND" در دستورالعمل های "EICALL"/"EIJMP" استفاده می کند یا ممکن است بخواند
"EIND" به طور مستقیم به منظور تقلید یک تماس غیر مستقیم / پرش با استفاده از "RET"
دستورالعمل
* کامپایلر فرض میکند که «EIND» هرگز در طول کد راهاندازی یا در طول آن تغییر نمیکند
کاربرد. به طور خاص، "EIND" در عملکرد یا وقفه ذخیره/بازیابی نمی شود
مقدمه/مخاطره روتین خدمات.
* برای فراخوانی غیرمستقیم توابع و Goto محاسبه شده، پیوند دهنده تولید می کند خرد خرد. خرد
پدهای پرش گاهی اوقات نیز نامیده می شوند ترامپولین ها. بنابراین، تماس غیرمستقیم/پرش به
چنین خرد خرد حاوی یک پرش مستقیم به آدرس مورد نظر است.
* لینکر ریلکسیشن باید روشن باشد تا پیوند دهنده به درستی خردها را تولید کند
در همه شرایط به گزینه کامپایلر مراجعه کنید -آرامش کن و گزینه لینکر --آروم باش.
موارد گوشه ای وجود دارد که پیوند دهنده قرار است خرد ایجاد کند اما سقط می شود
بدون آرامش و بدون پیام خطای مفید.
* اسکریپت پیوند دهنده پیش فرض برای کد با "EIND = 0" مرتب شده است. اگر قرار باشد کد
برای کار کردن برای راه اندازی با "EIND != 0"، یک اسکریپت پیوند دهنده سفارشی باید به ترتیب استفاده شود
برای قرار دادن بخش هایی که نام آنها با ".trampolines" شروع می شود در قسمتی که در آن قرار دارد
"EIND" به.
* کد راه اندازی از libgcc هرگز "EIND" را تنظیم نمی کند. توجه داشته باشید که کد راه اندازی یک ترکیب است
کد از libgcc و AVR-LibC. برای تأثیر AVR-LibC بر «EIND»، به AVR- مراجعه کنید.
راهنمای کاربر LibC ("http://nongnu.org/avr-libc/user-manual/").
* برای کد راهاندازی خاص کاربر مجاز است که «EIND» را زودتر راهاندازی کند، برای مثال توسط
ابزار کد اولیه واقع در بخش ".init3". چنین کدی قبل از اجرا می شود
کد راه اندازی عمومی که RAM را مقداردهی اولیه می کند و سازنده ها را فراخوانی می کند، اما پس از بیت از
کد راه اندازی از AVR-LibC که "EIND" را در قسمتی که جدول برداری در آن قرار دارد تنظیم می کند.
واقع شده است.
#عبارتند از
باطل استاتیک
__خصیصه__((بخش(.init3")،خالی،استفاده شده،بدون_عملکرد_ابزار))
init3_set_eind (باطل)
{
__asm فرار ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"out %i0,r24" :: "n" (&EIND): "r24"، "memory");
}
نماد "__trampolines_start" در اسکریپت پیوند دهنده تعریف شده است.
* در صورت وجود دو شرط زیر، خردهها بهطور خودکار توسط پیوند دهنده تولید میشوند
ملاقات کرد:
-
(کوتاه برای تولید می کنند خرد خرد) اینطوری:
LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))
-
خارج از بخشی که خرده ها در آن قرار دارند.
* کامپایلر چنین اصلاح کننده های "gs" را برای برچسب های کد در شرایط زیر منتشر می کند:
-
-
- -mcall-prologues>
گزینه خط فرمان
-
جداول را می توانید مشخص کنید -Fno-Jump-Table گزینه خط فرمان
-
-
* پرش به آدرس های غیر نمادین مانند چنین است نه پشتیبانی:
int main (خلأ)
{
/* فراخوانی تابع در آدرس word 0x2 */
بازگشت ((int(*)(void)) 0x2)();
}
در عوض، یک خرد باید تنظیم شود، یعنی تابع باید از طریق یک نماد فراخوانی شود
("func_4" در مثال):
int main (خلأ)
{
extern int func_4 (باطل) ؛
/* فراخوانی تابع در آدرس بایت 0x4 */
return func_4();
}
و برنامه با آن مرتبط شود -Wl،--defsym,func_4=0x4. از طرف دیگر، "func_4"
را می توان در اسکریپت لینکر تعریف کرد.
مدیریت رجیسترهای عملکرد ویژه "RAMPD"، "RAMPX"، "RAMPY" و "RAMPZ"
برخی از دستگاههای AVR از حافظههای بزرگتر از محدوده 64@tie{}KiB پشتیبانی میکنند که قابل دسترسی است.
با اشاره گرهای 16 بیتی برای دسترسی به مکانهای حافظه خارج از این محدوده 64@tie{}KiB،
محتوای یک ثبات "RAMP" به عنوان قسمت بالای آدرس استفاده می شود: "X"، "Y"، "Z"
ثبت آدرس با عملکرد ویژه "RAMPX"، "RAMPY"، "RAMPZ" الحاق شده است
برای دریافت آدرس گسترده به ترتیب ثبت نام کنید. به طور مشابه، "RAMPD" همراه با استفاده می شود
آدرس دهی مستقیم
* کد راه اندازی، رجیسترهای تابع ویژه "RAMP" را با صفر مقداردهی اولیه می کند.
* اگر یک APR تحت عنوان نشانی: فضاها، نامگذاری شده است نشانی فضا غیر از عمومی یا "__flash" است
استفاده می شود، سپس "RAMPZ" در صورت نیاز قبل از عملیات تنظیم می شود.
* اگر دستگاه از رم بزرگتر از 64@tie{}KiB پشتیبانی می کند و کامپایلر باید تغییر کند
"RAMPZ" برای انجام یک عملیات، "RAMPZ" پس از عملیات به صفر بازنشانی می شود.
* اگر دستگاه دارای یک رجیستر «RAMP» خاص باشد، مقدمه/خاطره ISR
آن SFR را ذخیره/بازیابی می کند و در صورتی که کد ISR ممکن است آن را با صفر مقدار دهی اولیه می کند
(به طور ضمنی) از آن استفاده کنید.
* RAM بزرگتر از 64@tie{}KiB توسط GCC برای اهداف AVR پشتیبانی نمی شود. اگر استفاده می کنید
اسمبلر درون خطی برای خواندن از مکان های خارج از محدوده آدرس 16 بیتی و تغییر
یکی از رجیسترهای "RAMP" پس از دسترسی باید آن را به صفر برگردانید.
ماکروهای داخلی AVR
GCC چندین ماکرو داخلی را تعریف می کند تا کد کاربر بتواند حضور یا را آزمایش کند
عدم وجود ویژگی ها تقریباً هر یک از ماکروهای داخلی زیر از دستگاه استنباط می شود
قابلیت ها و در نتیجه توسط -mmcu= گزینه خط فرمان
حتی بیشتر ماکروهای داخلی مخصوص AVR را ببینید APR تحت عنوان نشانی: فضاهای و APR توکار
توابع.
"__AVR_ARCH__"
ماکرو داخلی که به یک عدد اعشاری که معماری و مشخص می کند حل می شود
بستگی دارد به -mmcu=mcu گزینه. مقادیر ممکن عبارتند از:
2، 25، 3 31، 35، 4، 5، 51، 6
برای mcu"avr2"، "avr25"، "avr3"، "avr31"، "avr35"، "avr4"، "avr5"، "avr51"، "avr6"،
به ترتیب و
100، 102، 104، 105، 106، 107
برای mcu"avrtiny"، "avrxmega2"، "avrxmega4"، "avrxmega5"، "avrxmega6"، "avrxmega7"،
به ترتیب. اگر mcu دستگاهی را مشخص می کند، این ماکرو داخلی بر این اساس تنظیم می شود. برای
به عنوان مثال، با -mmcu = atmega8 ماکرو 4 تعریف شده است.
"__AVR_دستگاه__"
محیط -mmcu=دستگاه این ماکرو داخلی را تعریف می کند که نام دستگاه را منعکس می کند. برای
مثال، -mmcu = atmega8 ماکرو داخلی "__AVR_ATmega8__" را تعریف می کند. -mmcu = attiny261a
"__AVR_ATtiny261A__" و غیره را تعریف می کند.
نام ماکروهای داخلی از طرح "__AVR_ پیروی می کند.دستگاه__" جایی که دستگاه هست
نام دستگاه مطابق دفترچه راهنمای کاربر AVR. تفاوت میان دستگاه در داخلی
ماکرو و دستگاه in -mmcu=دستگاه این است که دومی همیشه کوچک است.
If دستگاه یک دستگاه نیست بلکه فقط یک معماری اصلی است avr51، این ماکرو نیست
تعریف شده است.
"__AVR_DEVICE_NAME__"
محیط -mmcu=دستگاه این ماکرو داخلی را به نام دستگاه تعریف می کند. مثلا،
با -mmcu = atmega8 ماکرو به "atmega8" تعریف شده است.
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 بیتی در نظر گرفته می شود
کامپایلر تعریف این ماکروها متاثر از -مدی استک.
"__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-وقفه می کند گزینه خط فرمان
"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
برخی از دستگاه های AVR (AT90S8515، ATmega103) نباید دستورالعمل های 32 بیتی را به دلیل
اشتباه سخت افزاری دستورالعمل های رد شدن عبارتند از "SBRS"، "SBRC"، "SBIS"، "SBIC" و "CPSE".
ماکرو دوم فقط در صورتی تعریف می شود که "__AVR_HAVE_JMP_CALL__" نیز تنظیم شده باشد.
"__AVR_ISA_RMW__"
دستگاه دارای دستورالعمل های Read-Modify-Write (XCH، LAC، LAS و LAT) است.
"__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"، ".far" و ".const".
-msdata=همه
همه داده ها، نه فقط اشیاء کوچک، را در بخش های رزرو شده برای داده های کوچک قرار دهید، و
برای دسترسی به آنها از آدرس دهی مربوط به رجیستر "B14" استفاده کنید.
-msdata=هیچ
از بخش های رزرو شده برای داده های کوچک استفاده نکنید و از آدرس های مطلق استفاده کنید
دسترسی به تمام داده ها همه داده های اولیه و استاتیک اولیه را در ".fardata" قرار دهید
بخش، و تمام داده های بدون مقدار اولیه در بخش ".far". تمام داده های ثابت را در آن قرار دهید
بخش ".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،
این را قادر می سازد -symbols-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
پیش فرض های "bool" را لغو کنید تا "sizeof(bool)==1". به طور پیش فرض "sizeof(bool)"
هنگام کامپایل کردن برای Darwin/PowerPC 4 و هنگام کامپایل برای Darwin/x1 86 است، بنابراین این
گزینه هیچ تاثیری روی x86 ندارد.
هشدار: La -mone-byte-bool سوئیچ باعث می شود GCC کدی تولید کند که باینری نیست
سازگار با کد تولید شده بدون آن سوئیچ. استفاده از این سوئیچ ممکن است نیاز داشته باشد
کامپایل مجدد همه ماژول های دیگر در یک برنامه، از جمله کتابخانه های سیستم. از این استفاده کن
برای مطابقت با یک مدل داده غیر پیش فرض تغییر دهید.
-مفیکس
-fix-and-continue
-findirect-data
کد مناسب برای توسعه سریع چرخش ایجاد کنید، مانند اجازه دادن به GDB
به صورت پویا بارگیری می شود .o فایلها را در برنامههایی که قبلاً در حال اجرا هستند. -findirect-data و
-fix-and-continue برای سازگاری با عقب ارائه شده است.
-all_load
همه اعضای کتابخانه های آرشیو ایستا را بارگیری می کند. ببین مرد ld(1) برای اطلاعات بیشتر
-arch_errors_fatal
باعث می شود که خطاهای مربوط به فایل هایی که دارای معماری اشتباه هستند کشنده باشد.
-bind_at_load
باعث می شود فایل خروجی به گونه ای علامت گذاری شود که پیوند دهنده پویا همه را متصل کند
ارجاعات تعریف نشده هنگام بارگیری یا راه اندازی فایل.
-دسته
یک فایل با فرمت Mach-o باندل تولید کنید. ببین مرد ld(1) برای اطلاعات بیشتر
-bundle_loader قابل اجرا
این گزینه را مشخص می کند قابل اجرا که فایل خروجی ساخت را بارگذاری می کند
مرتبط. ببین مرد ld(1) برای اطلاعات بیشتر
-dynamiclib
با تصویب این گزینه، GCC یک کتابخانه پویا به جای یک فایل اجرایی زمانی تولید می کند
پیوند دادن، با استفاده از داروین لیبوتول فرمان
-force_cpusubtype_ALL
این باعث می شود که فایل خروجی GCC دارای این باشد همه نوع فرعی، به جای یکی که توسط کنترل می شود
la -mcpu or -مارس گزینه.
-allowable_client نام مشتری
-نام مشتری
-compatibility_version
-نسخه فعلی
نوار_مرده
فایل-وابستگی
-dylib_file
-dylinker_install_name
-پویا
-list_symbols_exported
-فیلست
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-پایه_تصویر
-init
-install_name
-keep_private_externs
-multi_module
-multiply_defined
-Multiply_duped_Unused
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-نومولتیفز
-ناربند
noseglinkedit
-pagezero_size
-پیشبندی
-prebind_all_twolevel_modules
-بسته_خصوصی
-Read_Only_Relocs
-بخشی
- نمادهای بخش
-whyload
-seg1addr
-فرقه آفرینی
- نمادهای بخش
-بخش
-segaddr
-segs_read_only_addr
-segs_read_write_addr
-seg_addr_table
-seg_addr_table_filename
-seglinkedit
-segprot
-segs_read_only_addr
-segs_read_write_addr
-Single_Module
-استاتیک
-زیر_کتابخانه
-sub_umbrella
-twolevel_namespace
-بله
-تعریف نشده
-لیست_symbols_unexported
-ناهمخوانی_اشاره_ضعیف
-واتس لود
این گزینه ها به پیوند دهنده داروین منتقل می شوند. صفحه مرد پیوند دهنده داروین توضیح می دهد
آنها را با جزئیات
دسامبر آلفا گزینه
اینها -m گزینه ها برای پیاده سازی های DEC Alpha تعریف شده اند:
-mno-soft-float
-msoft-float
از دستورالعمل های ممیز شناور سخت افزاری برای ممیز شناور استفاده کنید (استفاده نکنید).
عملیات چه زمانی -msoft-float مشخص شده است، توابع در libgcc.a برای اجرا استفاده می شوند
عملیات ممیز شناور مگر اینکه با روتین هایی جایگزین شوند که شبیه سازی شوند
عملیات ممیز شناور یا کامپایل شده به گونه ای که چنین شبیه سازی هایی را فراخوانی کند
روتین ها، این روال ها عملیات ممیز شناور را صادر می کنند. اگر در حال تدوین برای
یک آلفا بدون عملیات ممیز شناور، باید مطمئن شوید که کتابخانه ساخته شده است
تا با آنها تماس نگیریم
توجه داشته باشید که اجرای آلفا بدون عملیات ممیز شناور الزامی است
رجیسترهای ممیز شناور
-MFP- reg
-mno-fp-regs
کدی را ایجاد کنید که از مجموعه ثبت ممیز شناور استفاده می کند (از آن استفاده نمی کند). -mno-fp-regs
دلالت دارد -msoft-float. اگر از مجموعه ثبت ممیز شناور استفاده نمی شود، ممیز شناور
عملوندها به گونه ای که اعداد صحیح و ممیز شناور هستند در رجیسترهای اعداد صحیح ارسال می شوند
نتایج به جای $f0 در $0 ارسال می شود. این یک توالی فراخوانی غیر استاندارد است، بنابراین
هر تابع با آرگومان ممیز شناور یا مقدار بازگشتی که توسط کد کامپایل شده فراخوانی شده است
با -mno-fp-regs همچنین باید با آن گزینه کامپایل شود.
یک استفاده معمولی از این گزینه ساختن هسته ای است که از آن استفاده نمی کند و بنابراین نیاز دارد
هیچ ثبت ممیز شناور را ذخیره و بازیابی نکنید.
-مییی
معماری آلفا سخت افزار ممیز شناور را برای حداکثر بهینه سازی شده پیاده سازی می کند
کارایی. بیشتر با استاندارد ممیز شناور IEEE مطابقت دارد. با این حال،
برای انطباق کامل، کمک نرم افزار مورد نیاز است. این گزینه کد تولید می کند
کد کاملاً مطابق با IEEE جز که غیر دقیق پرچم نگهداری نمی شود (به زیر مراجعه کنید).
اگر این گزینه روشن باشد، ماکرو پیش پردازنده "_IEEE_FP" در طول تعریف می شود
تلفیقی. کد به دست آمده کارایی کمتری دارد اما می تواند به درستی پشتیبانی کند
اعداد غیرعادی شده و مقادیر استثنایی IEEE مانند عددی نیست و مثبت/منفی
بی نهایت. سایر کامپایلرهای آلفا این گزینه را فراخوانی می کنند -ieee_with_no_inexact.
-mieee-with-inexact
این مثل -مییی به جز کد تولید شده، IEEE را نیز حفظ می کند غیر دقیق پرچم.
روشن کردن این گزینه باعث می شود کد تولید شده IEEE کاملاً سازگار را پیاده سازی کند
ریاضی. علاوه بر "_IEEE_FP"، "_IEEE_FP_EXACT" به عنوان یک ماکرو پیش پردازنده تعریف می شود.
در برخی از پیادهسازیهای آلفا، کدهای بهدستآمده ممکن است بسیار کندتر از آن اجرا شوند
کد تولید شده به طور پیش فرض از آنجایی که کد بسیار کمی وجود دارد که به آن بستگی دارد
غیر دقیق پرچم، معمولاً نباید این گزینه را مشخص کنید. سایر کامپایلرهای آلفا تماس می گیرند
این گزینه -ieee_with_inexact.
-mfp-trap-mode=حالت تله
این گزینه کنترل می کند که چه تله های مربوط به ممیز شناور فعال هستند. آلفای دیگر
کامپایلرها این گزینه را فراخوانی می کنند -fptm حالت تله. حالت تله را می توان روی یکی از چهار تنظیم کرد
ارزش های:
n این تنظیم پیش فرض (عادی) است. تنها تلههایی که فعال هستند عبارتند از
مواردی که در نرم افزار غیرفعال نمی شوند (مثلاً تقسیم بر تله صفر).
u علاوه بر تله های فعال شده توسط n، تله های زیر جریان نیز فعال هستند.
su پسندیدن u، اما دستورالعمل ها برای تکمیل نرم افزار ایمن علامت گذاری شده اند (نگاه کنید به
راهنمای معماری آلفا برای جزئیات).
سای پسندیدن su، اما تله های غیر دقیق نیز فعال هستند.
-MFP-Rounding-Mode =حالت گرد
حالت گرد کردن IEEE را انتخاب می کند. سایر کامپایلرهای آلفا این گزینه را فراخوانی می کنند -fprm
حالت گرد. حالت گرد می تواند یکی از موارد زیر باشد:
n حالت عادی گرد کردن IEEE. اعداد ممیز شناور به سمت نزدیکترین گرد می شوند
شماره دستگاه یا به سمت شماره دستگاه زوج در صورت تساوی.
m گرد به سمت منهای بی نهایت.
c حالت گرد خرد شده. اعداد ممیز شناور به سمت صفر گرد می شوند.
d حالت گرد کردن پویا یک فیلد در رجیستر کنترل ممیز شناور (fpcr، نگاه کنید به
راهنمای مرجع معماری آلفا) حالت گرد کردن را کنترل می کند. سی
کتابخانه این رجیستر را برای گرد کردن به اضافه بی نهایت مقداردهی می کند. بدین ترتیب،
مگر اینکه برنامه شما آن را تغییر دهد fpcr, d مربوط به دور به مثبت است
بی نهایت.
-MTRAP-RECISION =تله دقیق
در معماری آلفا، تله های نقطه شناور نادقیق هستند. این یعنی بدون
کمک نرم افزاری غیر ممکن است که از یک تله شناور و برنامه بازیابی شود
اجرا معمولاً باید خاتمه یابد. GCC می تواند کدی تولید کند که می تواند کمک کند
کنترل کننده های تله سیستم عامل در تعیین مکان دقیقی که باعث ایجاد یک
تله ممیز شناور بسته به نیازهای یک برنامه، متفاوت است
سطوح دقت را می توان انتخاب کرد:
p دقت برنامه این گزینه پیش فرض است و به این معنی است که یک کنترل کننده تله فقط می تواند
مشخص کنید کدام برنامه باعث ایجاد استثنای ممیز شناور شده است.
f دقت عملکرد کنترل کننده تله می تواند عملکردی را که باعث a
استثنای ممیز شناور
i دقت دستورالعمل کنترل کننده تله می تواند دستورالعمل دقیق آن را تعیین کند
باعث استثنای ممیز شناور شد.
سایر کامپایلرهای آلفا گزینه های معادلی را ارائه می دهند که نامیده می شوند -scope_safe و
-Resumption_safe.
-mieee-conformant
این گزینه کد تولید شده را مطابق با IEEE علامت گذاری می کند. شما نباید از این گزینه استفاده کنید
مگر اینکه شما هم مشخص کنید -MTRAP-CENCISION = من و یا -mfp-trap-mode=su or
-mfp-trap-mode=sui. تنها اثر آن انتشار خط است .پرچم 48 در تابع
مقدمه فایل اسمبلی تولید شده
-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) در خط فرمان لینکر.
LIF گزینه
-mgpr-32
فقط از اولین 32 ثبت همه منظوره استفاده کنید.
-mgpr-64
از تمام 64 رجیستر همه منظوره استفاده کنید.
-mfpr-32
فقط از 32 ثبت ممیز شناور اول استفاده کنید.
-mfpr-64
از تمام 64 رجیستر ممیز شناور استفاده کنید.
-mhard-float
از دستورالعمل های سخت افزاری برای عملیات ممیز شناور استفاده کنید.
-msoft-float
از روال های کتابخانه برای عملیات ممیز شناور استفاده کنید.
-Malloc-CC
تخصیص پویا رجیسترهای کد شرط.
-mfixed-cc
سعی نکنید به صورت پویا رجیسترهای کد شرط را تخصیص دهید، فقط از "icc0" و استفاده کنید
"fcc0".
-mdword
ABI را برای استفاده از دو کلمه insns تغییر دهید.
-mno-dword
از دستورالعمل های دو کلمه ای استفاده نکنید.
- دوبل
از دستورالعمل های دوگانه ممیز شناور استفاده کنید.
-mno-دبل
از دستورالعمل های دوگانه ممیز شناور استفاده نکنید.
- رسانه
از دستورالعمل های رسانه استفاده کنید.
-mno-media
از دستورالعمل های رسانه استفاده نکنید.
-mmuladd
از دستورات ضرب و جمع/ تفریق استفاده کنید.
-mno-muladd
از دستورات ضرب و جمع و تفریق استفاده نکنید.
-mfdpic
FDPIC ABI را انتخاب کنید که از توصیفگرهای تابع برای نشان دادن نشانگرها استفاده می کند
کارکرد. بدون هیچ گونه گزینه مرتبط با PIC/PIE، به این معنی است -fPIE. با -fpic or
-fpie، فرض می کند ورودی های GOT و داده های کوچک در محدوده 12 بیتی از GOT قرار دارند
آدرس پایه؛ با -fPIC or -fPIE، افست های GOT با 32 بیت محاسبه می شوند. با یک
bfin-elf هدف، این گزینه دلالت دارد -msim.
-minline-plt
فعال کردن ورودی های PLT در فراخوانی توابع به توابعی که شناخته شده نیستند
به صورت محلی متصل شود. بدون اثری ندارد -mfdpic. به طور پیش فرض فعال است اگر
بهینه سازی برای سرعت و کامپایل برای کتابخانه های مشترک (به عنوان مثال، -fPIC or -fpic)، یا
هنگامی که یک گزینه بهینه سازی مانند -O3 یا بالاتر در خط فرمان وجود دارد.
-mTLS
هنگام تولید کد محلی رشته، یک بخش TLS بزرگ را در نظر بگیرید.
-mtls
هنگام تولید کد محلی رشته، یک بخش TLS بزرگ در نظر نگیرید.
-mgprel-ro
استفاده از جابجایی های "GPREL" را در FDPIC ABI برای داده هایی که مشخص است در
بخش های فقط خواندنی این به طور پیش فرض فعال است، به جز برای -fpic or -fpie: بااینکه
ممکن است به کوچکتر کردن جدول افست جهانی کمک کند، 1 دستورالعمل را با 4 مبادله می کند
-fPIC or -fPIE، 3 دستورالعمل را با 4 مورد معامله می کند که یکی از آنها ممکن است توسط چندین مورد به اشتراک گذاشته شود
نمادها، و از نیاز به ورودی GOT برای نماد ارجاع شده جلوگیری می کند، بنابراین همینطور است
احتمال برد بیشتر است اگر نیست، -mno-gprel-ro می توان برای غیرفعال کردن آن استفاده کرد.
- multilib-library-pic
پیوند با کتابخانه های عکس (کتابخانه، نه FD). این به طور ضمنی توسط -مجموعه-عکس، همچنین
توسط توسط -fPIC و -fpic بدون -mfdpic. شما هرگز نباید به طور صریح از آن استفاده کنید.
-mlinked-fp
از الزامات EABI پیروی کنید که همیشه یک نشانگر فریم هر زمان که یک قاب پشته ایجاد می شود، ایجاد کنید
اختصاص داده شده است. این گزینه به طور پیش فرض فعال است و می توان با آن غیر فعال کرد
-mno-linked-fp.
تماس های طولانی
از آدرس دهی غیر مستقیم برای فراخوانی توابع خارج از واحد کامپایل فعلی استفاده کنید. این
به توابع اجازه می دهد تا در هر جایی در فضای آدرس 32 بیتی قرار گیرند.
برچسب های بدخیم
سعی کنید با قرار دادن 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 بود.
-mjump-in-delay
این گزینه نادیده گرفته شده و فقط برای اهداف سازگاری ارائه شده است.
-mdisable-fpregs
از استفاده از رجیسترهای ممیز شناور به هر نحوی جلوگیری کنید. این برای
کامپایل کردن هسته هایی که تغییر بافت تنبلی از ثبات های ممیز شناور را انجام می دهند. اگر
شما از این گزینه استفاده می کنید و سعی می کنید عملیات ممیز شناور، کامپایلر را انجام دهید
سقط می کند.
-ندار-نشانگر
از استفاده کامپایلر از حالت های آدرس نمایه سازی جلوگیری کنید. این امر باعث جلوگیری از برخی بیشتر می شود
مشکلات مبهم هنگام کامپایل کد تولید شده MIG تحت MACH.
-mno-space-regs
کدی را ایجاد کنید که فرض کند هدف هیچ ثبت فضایی ندارد. این به GCC اجازه می دهد
تماسهای غیرمستقیم سریعتر ایجاد کنید و از حالتهای نشانی شاخص مقیاسناپذیر استفاده کنید.
چنین کدی برای سیستم ها و هسته های PA سطح 0 مناسب است.
-mfast-غیر مستقیم-تماس
کدی را ایجاد کنید که فرض میکند تماسها هرگز از مرزهای فضا عبور نمیکنند. این به GCC اجازه می دهد
کدی را منتشر می کند که تماس های غیرمستقیم را سریعتر انجام می دهد.
این گزینه در حضور کتابخانه های مشترک یا توابع تو در تو کار نمی کند.
-Mfixed-Range =محدوده ثبت نام
کدی را ایجاد کنید که محدوده رجیستر داده شده را به عنوان ثبات ثابت در نظر می گیرد. ثبت ثابت
یکی از مواردی است که تخصیص دهنده ثبات نمی تواند از آن استفاده کند. این در هنگام کامپایل کرنل مفید است
کد محدوده رجیستر به صورت دو رجیستر که با یک خط تیره از هم جدا شده اند، مشخص می شود. چندگانه
محدوده های ثبت را می توان با کاما از هم جدا کرد.
-mlong-load-store
ایجاد بار 3 دستورالعملی و ذخیره توالی ها همانطور که گاهی اوقات توسط HP-UX 10 لازم است
پیوند دهنده این معادل است +k گزینه ای برای کامپایلرهای HP.
قابل حمل - زمان اجرا
از قراردادهای تماس قابل حمل پیشنهاد شده توسط HP برای سیستم های ELF استفاده کنید.
-mgas
استفاده از دستورالعملهای اسمبلر را فعال کنید که فقط GAS میفهمد.
-mschedule=نوع cpu
کد را با توجه به محدودیت های نوع ماشین برنامه ریزی کنید نوع cpu. انتخاب ها
برای نوع cpu هستند 700 7100, 7100LC, 7200, 7300 و 8000. رجوع شود به
/usr/lib/sched.models در یک سیستم HP-UX برای تعیین گزینه زمانبندی مناسب برای
ماشین شما زمان بندی پیش فرض است 8000.
-mlinker-opt
پاس بهینه سازی را در پیوند دهنده HP-UX فعال کنید. توجه داشته باشید که این باعث اشکال زدایی نمادین می شود
غیر ممکن همچنین باعث ایجاد یک باگ در پیوندهای HP-UX 8 و HP-UX 9 می شود که در آن آنها
هنگام پیوند دادن برخی از برنامه ها، پیام های خطای جعلی بدهید.
-msoft-float
خروجی حاوی فراخوان های کتابخانه ای برای ممیز شناور تولید کنید. هشدار: مورد نیاز
کتابخانه ها برای همه اهداف HPPA در دسترس نیستند. به طور معمول امکانات از
از کامپایلر C معمولی ماشین استفاده می شود، اما این کار را نمی توان مستقیماً در حالت متقابل انجام داد.
تلفیقی. شما باید ترتیبات خود را برای تهیه کتابخانه مناسب انجام دهید
توابع برای کامپایل متقابل
-msoft-float قرارداد فراخوانی را در فایل خروجی تغییر می دهد. بنابراین، آن را تنها
مفید است اگر کامپایل کنید تمام برنامه ای با این گزینه به طور خاص، شما نیاز دارید
گردآوری libgcc.a، کتابخانه ای که با GCC ارائه می شود، با -msoft-float به منظور این
به کار می کنند.
-msio
پیش تعریف "_SIO" را برای سرور IO ایجاد کنید. پیش فرض است -mwsio. این تولید می کند
از پیش تعریف شده، "__hp9000s700"، "__hp9000s700__" و "_WSIO"، برای ایستگاه کاری IO.
این گزینه ها تحت HP-UX و HI-UX در دسترس هستند.
-mgnu-ld
از گزینه های مخصوص گنو استفاده کنید ld. این می گذرد -به اشتراک گذاشته شده به ld هنگام ساخت یک اشتراک گذاری
کتابخانه زمانی که GCC به طور صریح یا ضمنی با پیکربندی شده باشد، پیشفرض است
پیوند دهنده گنو. این گزینه بر کدام یک تأثیر نمی گذارد ld نامیده میشود؛ فقط چیزی را تغییر می دهد
پارامترها به آن منتقل می شوند ld. ld که نامیده می شود توسط تعیین می شود
-با-LD گزینه پیکربندی، مسیر جستجوی برنامه GCC و در نهایت توسط کاربر PATH.
پیوند دهنده مورد استفاده توسط GCC را می توان با استفاده از آن چاپ کرد که gcc -print-prog-name=ld`. این
گزینه فقط در HP-UX GCC 64 بیتی موجود است، یعنی با پیکربندی شده است
hppa*64*-*-hpux*.
-mhp-ld
از گزینه های خاص HP استفاده کنید ld. این می گذرد -b به ld هنگام ساخت یک کتابخانه مشترک
و پاس می دهد +قبول نوع عدم تطابق به ld در تمام لینک ها زمانی که GCC باشد پیشفرض است
به طور صریح یا ضمنی با پیوند دهنده HP پیکربندی شده است. این گزینه تاثیری ندارد
که ld نامیده میشود؛ این فقط پارامترهایی را که به آن ارسال می شود تغییر می دهد ld. ld
که نامیده می شود توسط تعیین می شود -با-LD گزینه پیکربندی، جستجوی برنامه GCC
مسیر و در نهایت توسط کاربر PATH. پیوند دهنده مورد استفاده توسط GCC را می توان با استفاده از آن چاپ کرد
که gcc -print-prog-name=ld`. این گزینه فقط در HP-UX 64 بیتی موجود است
GCC، یعنی با پیکربندی شده است hppa*64*-*-hpux*.
تماس های طولانی
کدی را ایجاد کنید که از توالی تماس های طولانی استفاده می کند. این تضمین می کند که یک