ພາສາອັງກິດພາສາຝຣັ່ງເຢຍລະມັນItalianປອກຕຸຍການລັດເຊຍແອສປາໂຍນ

OnWorks favicon

mips-linux-gnu-gcc - ອອນລາຍໃນຄລາວ

ແລ່ນ mips-linux-gnu-gcc ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີຜ່ານ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ນີ້ແມ່ນຄໍາສັ່ງ mips-linux-gnu-gcc ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


gcc - GNU project C ແລະ C++ compiler

ສະຫຼຸບສັງລວມ


gcc [-c|-S|-E] [-std=ມາດຕະຖານ]
[-g] [- ໜ້າ] [-Oລະດັບ]
[-Wເຕືອນ... ] [-Wpedantic]
[-Idir... ] [-Ldir... ]
[-Dມະຫາພາກ[=defn]...] [-Uມະຫາພາກ]
[-fທາງເລືອກ... ] [-mທາງ​ເລືອກ​ເຄື່ອງ​... ]
[-o outfile] [@ເອກະສານ] infile...

ພຽງແຕ່ທາງເລືອກທີ່ເປັນປະໂຫຍດທີ່ສຸດແມ່ນໄດ້ລະບຸໄວ້ຢູ່ທີ່ນີ້; ເບິ່ງຂ້າງລຸ່ມນີ້ສໍາລັບສ່ວນທີ່ເຫຼືອ. g ++ ຍອມຮັບ
ສ່ວນຫຼາຍແມ່ນທາງເລືອກດຽວກັນກັບ gcc.

ລາຍລະອຽດ


ເມື່ອທ່ານຮຽກຮ້ອງ GCC, ມັນປົກກະຕິຈະດໍາເນີນການກ່ອນ, ການລວບລວມ, ການປະກອບແລະການເຊື່ອມໂຍງ.
"ທາງເລືອກໂດຍລວມ" ອະນຸຍາດໃຫ້ທ່ານຢຸດຂະບວນການນີ້ຢູ່ໃນຂັ້ນຕອນກາງ. ສໍາລັບ
ຍົກຕົວຢ່າງ, the -c ທາງເລືອກບອກວ່າບໍ່ໃຫ້ແລ່ນຕົວເຊື່ອມຕໍ່. ຫຼັງຈາກນັ້ນ, ຜົນຜະລິດປະກອບດ້ວຍວັດຖຸ
ໄຟລ໌ຜົນຜະລິດໂດຍຜູ້ປະກອບ.

ທາງ​ເລືອກ​ອື່ນ​ຖືກ​ສົ່ງ​ໄປ​ໃນ​ຂັ້ນ​ຕອນ​ຂອງ​ການ​ປຸງ​ແຕ່ງ​. ທາງ​ເລືອກ​ບາງ​ຢ່າງ​ຄວບ​ຄຸມ​
preprocessor ແລະອື່ນໆ compiler ຕົວຂອງມັນເອງ. ແຕ່ທາງເລືອກອື່ນຄວບຄຸມການປະກອບແລະ
ຕົວເຊື່ອມຕໍ່; ສ່ວນໃຫຍ່ເຫຼົ່ານີ້ບໍ່ໄດ້ບັນທຶກຢູ່ທີ່ນີ້, ເພາະວ່າທ່ານບໍ່ຄ່ອຍຈະຈໍາເປັນຕ້ອງໃຊ້ພວກມັນໃດໆ.

ຕົວເລືອກເສັ້ນຄໍາສັ່ງສ່ວນໃຫຍ່ທີ່ທ່ານສາມາດນໍາໃຊ້ກັບ GCC ແມ່ນເປັນປະໂຫຍດສໍາລັບໂຄງການ C; ເມື່ອ​ໃດ​
ທາງເລືອກແມ່ນເປັນປະໂຫຍດພຽງແຕ່ກັບພາສາອື່ນ (ປົກກະຕິແລ້ວ C ++), ຄໍາອະທິບາຍເວົ້າວ່າດັ່ງນັ້ນ
ຢ່າງຈະແຈ້ງ. ຖ້າຄໍາອະທິບາຍສໍາລັບທາງເລືອກສະເພາະໃດຫນຶ່ງບໍ່ໄດ້ກ່າວເຖິງແຫຼ່ງໃດຫນຶ່ງ
ພາສາ, ທ່ານສາມາດນໍາໃຊ້ທາງເລືອກນັ້ນກັບທຸກພາສາທີ່ສະຫນັບສະຫນູນ.

ໄດ້ gcc ໂຄງການຍອມຮັບທາງເລືອກແລະຊື່ໄຟລ໌ເປັນຕົວປະຕິບັດການ. ມີ​ຫຼາຍ​ທາງ​ເລືອກ​ທີ່​ມີ​ຫຼາຍ
ຊື່ຕົວອັກສອນ; ດັ່ງນັ້ນຫຼາຍທາງເລືອກຕົວອັກສອນດຽວອາດຈະ ບໍ່ ຖືກຈັດເປັນກຸ່ມ: -ດີວີດີ ແມ່ນຫຼາຍ
ແຕກ​ຕ່າງ​ຈາກ -d -v.

ທ່ານສາມາດປະສົມທາງເລືອກແລະການໂຕ້ຖຽງອື່ນໆ. ສໍາລັບສ່ວນໃຫຍ່, ຄໍາສັ່ງທີ່ທ່ານໃຊ້ບໍ່ໄດ້
ເລື່ອງ. ຄໍາສັ່ງບໍ່ສໍາຄັນໃນເວລາທີ່ທ່ານໃຊ້ຫຼາຍທາງເລືອກຂອງປະເພດດຽວກັນ; ຕົວຢ່າງ, ຖ້າ
ທ່ານລະບຸ -L ຫຼາຍກວ່າຫນຶ່ງຄັ້ງ, ໄດເລກະທໍລີຖືກຄົ້ນຫາໃນຄໍາສັ່ງທີ່ກໍານົດໄວ້. ນອກຈາກນີ້,
ການບັນຈຸເຂົ້າຮຽນຂອງ -l ທາງເລືອກແມ່ນສໍາຄັນ.

ທາງເລືອກຫຼາຍມີຊື່ຍາວເລີ່ມຕົ້ນດ້ວຍ -f ຫຼືກັບ -W---ຍົກ​ຕົວ​ຢ່າງ,
-fmove-loop-invariants, -Wformat ແລະອື່ນໆ. ສ່ວນໃຫຍ່ເຫຼົ່ານີ້ມີທັງທາງບວກແລະທາງລົບ
ແບບຟອມ; ຮູບ​ແບບ​ທາງ​ລົບ​ຂອງ​ -ffoo is -fno-foo. ເອກະສານຄູ່ມືນີ້ມີພຽງແຕ່ຫນຶ່ງໃນເຫຼົ່ານີ້
ສອງຮູບແບບ, ອັນໃດບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ.

OPTIONS


ທາງເລືອກ Summary
ນີ້ແມ່ນບົດສະຫຼຸບຂອງຕົວເລືອກທັງໝົດ, ຈັດກຸ່ມຕາມປະເພດ. ຄໍາອະທິບາຍຢູ່ໃນຕໍ່ໄປນີ້
ພາກສ່ວນ.

ໂດຍລວມ ທາງເລືອກໃນການ
-c -S -E -o ເອກະສານ -no-canonical-prefixes - ປຸບ -pass-exit-codes -x ພາສາ -v
-### - ຊ່ວຍ[=ລະດັບ[...]] --ເປົ້າ​ຫມາຍ​ການ​ຊ່ວຍ​ເຫຼືອ​ - ການປ່ຽນແປງ - ຫໍ່ @ເອກະສານ -fplugin=ເອກະສານ
-fplugin-arg-ຊື່=arg -fdump-ada-spec[-ບາງ] -fada-spec-parent=ຫນ່ວຍບໍລິການ
-fdump-go-spec=ເອກະສານ

C ພາສາ ທາງເລືອກໃນການ
-ansi -std=ມາດຕະຖານ -fgnu89-inline -aux-info ຊື່​ເອ​ກະ​ສານ
-fallow-parameterless-variadic-functions -fno-asm -fno-builtin -fno-builtin-ຫນ້າທີ່
-fhosted - freestanding -fopenacc -fopenmp -fopenmp-simd -fms-ສ່ວນຂະຫຍາຍ
-fplan9-ສ່ວນຂະຫຍາຍ -trigraphs - ແບບດັ້ງເດີມ -cpp -fallow-single-precision
-fcond-ບໍ່ກົງກັນ -flax-vector-ແປງ -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char

C ++ ພາສາ ທາງເລືອກໃນການ
-fabi-version=n -fno-access-control -fcheck-ໃໝ່ -fconstexpr-depth=n
-ffriend-ສັກຢາ -fno-elide-constructors -fno-enforce-eh-specs -ffor-scope
-fno-for-scope -fno-gnu-keywords -fno-implicit-templates
-fno-implicit-inline-templates -fno-implement-inlines -fms-ສ່ວນຂະຫຍາຍ
-fno-nonansi-builtins -fnotrow-opt -fno-operator-names -fno-optional-diags
-fpermissive -fno-pretty-templates -frepo -fno-rtti -fsized-deallocation -fstats
-ftemplate-backtrace-limit=n -ftemplate-depth=n -fno-threadsafe-statics
-fuse-cxa-atexit -fno-ອ່ອນແອ -nostdinc++ -fvisibility-inlines-hidden
-fvtable-verify=[std|ເບື້ອງຕົ້ນ|none] -fvtv-ນັບ -fvtv-debug -fvisibility-ms-compat
-fext-ຕົວເລກ-ຕົວໜັງສື -Wabi=n -Wabi-tag -Wconversion-null -Wctor-dtor-ຄວາມເປັນສ່ວນຕົວ
-Wdelete-ບໍ່ແມ່ນ virtual-dtor -Wliteral-suffix - ການ​ຂັດ​ຂວາງ​ - ຍົກເວັ້ນ -Wnon-virtual-dtor
- ຄໍາ​ສັ່ງ​ -Weffc++ -Wstrict-null-sentinel -Wno-ບໍ່ແມ່ນແມ່ແບບ-ເພື່ອນ -Wold-style-cast
-Woverloaded-virtual -Wno-pmf-ແປງ -Wsign-promo

Objective-C ແລະ ຈຸດປະສົງ-C++ ພາສາ ທາງເລືອກໃນການ
-fconstant-string-class=ຊື່​ຫ້ອງ​ -fgnu-runtime -fnext-runtime -fno-nil-receivers
-fobjc-abi-version=n -fobjc-call-cxx-cdtors -fobjc-ສົ່ງໂດຍກົງ -fobjc-ຂໍ້ຍົກເວັ້ນ
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-local-ivars
-fivar-visibility=[ສາທາລະນະ|ປ້ອງກັນ|ສ່ວນຕົວ|ຊຸດ] -freplace-objc-classes
-fzero-link -gen-decls -Wassign-intercept -Wno-protocol - ຜູ້​ເລືອກ​
-Wstrict-select-match -Wunddeclared-ເລືອກ

ພາສາ ເອກະລາດ ທາງເລືອກໃນການ
-fmessage-length=n -fdiagnostics-show-location=[ຄັ້ງຫນຶ່ງ|ທຸກເສັ້ນ]
-fdiagnostics-color=[ອັດຕະໂນມັດ|ບໍ່ເຄີຍ|ສະເຫມີໄປ] -fno-diagnostics-show-option
-fno-diagnostics-show-caret

ການ​ເຕືອນ​ໄພ ທາງເລືອກໃນການ
-fsyntax ເທົ່ານັ້ນ -fmax-errors=n -Wpedantic -pedantic ຜິດ​ພາດ​ -w -Wextra - ຝາ
-Waddress -Waggregate-ກັບຄືນ -Waggressive-loop-optimizations - Warray-bounds
-Warray-bounds=n -Wbool-ປຽບທຽບ - ຄຸນ​ລັກ​ສະ​ນະ Wno​ -Wno-builtin-macro-redefined
-Wc90-c99-compat -Wc99-c11-compat -Wc++-compat -Wc++11-compat -Wc++14-compat
-Wcast-align -Wcast-qual -Wchar-subscripts - Wclobbered - ຄໍາເຫັນ
- ສະ​ຫນັບ​ສະ​ຫນູນ​ຕາມ​ເງື່ອນ​ໄຂ​ - ການ​ປ່ຽນ​ແປງ​ -Wcoverage-mismatch -Wdate-time
-Wdelete-ບໍ່ສົມບູນ -Wno-cpp -Wno-deprecated -Wno-deprecated-ປະກາດ
-Wno-designated-init -Wdisabled-optimization -Wno-discarded-qualifiers
-Wno-discarded-array-qualifiers -Wno-div-by-zero - ການ​ສົ່ງ​ເສີມ​ສອງ​ຄັ້ງ​ - ຮ່າງກາຍອ່ອນເພຍ
-Wenum ປຽບທຽບ -wno-endif-labels - ຄວາມ​ຜິດ​ພາດ​ -Wror=* - ຄວາມ​ຜິດ​ພາດ Wfatal​ -Wfloat-ເທົ່າທຽມກັນ
-Wformat -Wformat=2 -Wno-format-contains-nul -Wno-format-extra-args
-Wformat-nonliteral -Wformat ຄວາມ​ປອດ​ໄພ​ - ການ​ລົງ​ນາມ​ຮູບ​ແບບ​ຮູບ​ແບບ​ -Wformat-y2k
-Wframe-larger-than=len -Wno-free-nonheap-object -Wjump-misses-init
-Wignored-qualifiers -Wincompatible-pointer-types - Wimplicit
-Wimplicit-function-ປະກາດ -Wimplicit-int - ວິນ​ຍານ​ຕົນ​ເອງ​ - Winline
-Wno-int-ແປງ -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch
-Wlarger-than=len -Wunsafe-loop-optimizations -Wlogical-op -Wlogical-not-partheses
- ຍາວ - ຍາວ - ຜູ້ຍິງ -Wmaybe-unitialized -Wmemset-transposed-args -Wmissing-braces
-Wmissing-field-initializers -Wmissing-include-dirs -Wno-multichar -Wnonnull
-Wnormalized=[none|id|nfc|nfkc]
-Wodr -Wno-ລົ້ນ -Wopenmp-simd -Woverlength-strings - ຫໍ່
-Wpacked-bitfield-compat - ແຜ່ນແພ -Wparentheses -Wpedantic-ms-format
-Wno-pedantic-ms-format -Wpointer-arith -Wno-pointer-to-int-cast -Wredundant-decls
-Wno-return-local-addr - ປະ​ເພດ Wreturn​ - ລໍາດັບຈຸດ - ເງົາ -Wno-shadow-ivar
-Wshift-ນັບ-ລົບ -Wshift-count-overflow -Wsign-ປຽບທຽບ -Wsign ການ​ປ່ຽນ​ແປງ​
- ການ​ປ່ຽນ​ແປງ Wfloat​ -Wsizeof-pointer-memaccess -Wsizeof-array-argument
-Wstack-protector -Wstack-usage=len -Wstrict-aliasing -Wstrict-aliasing=n
-Wstrict-ລົ້ນ -Wstrict-overflow=n -Wsuggest-attribute=[ບໍລິສຸດ|const|noreturn|ຮູບແບບ]
-Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-override
-Wmissing-format-attribute - ສະຫວິດ -Wswitch-default -Wwwitch-enum -Wswitch-bool
-Wsync-nand -Wsystem-headers -Wtrampolines -Wtrigraphs -Wtype- limits -Wundef
- ປະກາດ -Wunknown-pragmas -Wno-pragmas -Wunsuffixed-float-constants
- ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ -Wunused-function -Wunused-label -Wunused-local-typedefs -Wunused-ພາລາມິເຕີ
-Wno-unused-ຜົນ -Wunused-value -Wunused-variable -Wunused-but-set-parameter
-Wunused-but-set-variable -Wuseless-cast -Wvariadic-macros
-Wvector-ປະຕິບັດການ-ປະສິດທິພາບ -Wvla -Wvolatile-register-var -Write-strings
-Wzero-as-null-pointer-constant

C ແລະ ຈຸດປະສົງ-C-ເທົ່ານັ້ນ ການ​ເຕືອນ​ໄພ ທາງເລືອກໃນການ
-Wbad-function-cast -Wmissing ການ​ປະ​ກາດ​ -Wmissing-parameter-type
-Wmissing-prototypes -Wnested-externs -Wold-style-ປະກາດ -Wold-style-ນິຍາມ
-Wstrict-prototypes - ແບບດັ້ງເດີມ - ການ​ປ່ຽນ​ແປງ​ແບບ​ດັ້ງ​ເດີມ​
-Wdeclaration ຫຼັງ​ຈາກ​ການ​ຖະ​ແຫຼງ​ການ​ -Wpointer-ເຊັນ​

Debugging ທາງເລືອກໃນການ
-dຕົວອັກສອນ - dumpspecs - ເຄື່ອງ​ຂີ້​ຝຸ່ນ - dumpversion -fsanitize=ແບບ -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-narrow-bounds
-fchkp-narrow-to-innermost-array -fchkp-optimize -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-pass-name=ບັນຊີລາຍຊື່ໄລຍະ -fdisable-tree-pass_name
-fdisable-tree-pass-name=ບັນຊີລາຍຊື່ໄລຍະ -fdump-noaddr -fdump-ບໍ່ມີຕົວເລກ
-fdump-unnumbered-links -fdump-translation-unit[-n] -fdump-class-hierarchy[-n]
-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-inline -fdump-ຜ່ານ -fdump-ສະຖິຕິ
-fdump-tree-ທັງໝົດ -fdump-ຕົ້ນໄມ້-ຕົ້ນສະບັບ[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg
-fdump-tree-alias -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-ວິນາທີ
-feliminate-dwarf2-dups -fno-eliminate-unused-debug-types
-feliminate-unused-debug-ສັນຍາລັກ -femit-class-debug-ສະເໝີ -fenable-ປະເພດ-ຜ່ານ
-fenable-ປະເພດ-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ -fdebug-types-section -fmem-report-wpa -fmem ບົດລາຍງານ
-fpre-ipa-mem-ລາຍງານ -fpost-ipa-mem-report -fprofile-arcs -fopt-info
- fopt-ຂໍ້​ມູນ-ທາງເລືອກໃນການ[=ເອກະສານ] -frandom-seed=ຈໍານວນ -fsched-verbose=n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack ການ​ນໍາ​ໃຊ້​ -ftest-ການ​ຄຸ້ມ​ຄອງ​
-ftime ລາຍ​ງານ​ -fvar-ຕິດຕາມ -fvar-tracking-assignments
-fvar-tracking-assignments-toggle -g -gລະດັບ -gtoggle -gcoff -gdwarf-ສະບັບພາສາ -ggdb
-grecord-gcc-ສະຫຼັບ -gno-record-gcc-switches -gstabs -gstabs+ -gstrict-dwarf
-gno-strict-dwarf -gvms -gxcoff -gxcoff+ -gz[=ປະເພດ] -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map=ອາຍຸ=ໃຫມ່ -femit-struct-debug-baseonly
-femit-struct-debug-ຫຼຸດລົງ -femit-struct-debug-ລາຍລະອຽດ[=ລາຍຊື່ສະເພາະ] -p - ໜ້າ
-print-file-name=ຫ້ອງສະຫມຸດ -print-libgcc-file-name -print-multi-directory
-print-multi-lib -print-multi-os-directory -print-prog-name=ໂຄງການ
-print-search-dirs -Q -print-sysroot -print-sysroot-headers-suffix - save-temps​
-save-temps=cwd -save-temps=obj ເວລາ[=ເອກະສານ]

ທີ່ດີທີ່ສຸດ ທາງເລືອກໃນການ
-faggressive-loop-optimizations -falign-functions[=n] -falign-jumps[=n]
-falign-labels[=n] -falign-loops[=n] -fassociative-ຄະນິດສາດ -fauto-profile
-fauto-profile[=ເສັ້ນທາງ] -fauto-inc-dec -fbranch-ຄວາມເປັນໄປໄດ້
-fbranch-target-load-optimize -fbranch-target-load-optimize2 -fbtr-bb-ສະເພາະ
-fcaller-ປະຫຍັດ -fcheck-data-deps -fcombine-stack-ປັບ -fconserve-stack
-fcompare-elim -fcprop-ລົງທະບຽນ -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fcx-fortran-ກົດລະບຽບ -fcx-limited-range -fdata-sections -fdce -fdelayed-ສາຂາ
-fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively
-fdevirtualize-at-ltrans -fdse - ຄວາມ​ຢ້ານ​ກົວ​, inlining​ -fipa-sra -fexpensive-optimizations
-ffat-lto-ວັດຖຸ -fast ຄະ​ນິດ​ສາດ​ -ffinite-math-ເທົ່ານັ້ນ - ຮ້ານຂາຍເຄື່ອງຍ່ອຍ
-fexcess-precision=ແບບ -fforward-ຂະຫຍາຍພັນ -ffp-ສັນຍາ=ແບບ -function-sections
-fgcse -fgcse-after-reload -fgcse-las -fgcse-lm -fgraphite-ຕົວຕົນ -fgcse-sm
-fhoist-adjacent-loads -fif ການ​ປ່ຽນ​ແປງ​ -fif ການ​ປ່ຽນ​ແປງ 2​ -findirect-inlining
-finline-functions -finline-functions-called-one ດຽວ -finline-limit=n
-finline-small-functions -fipa-cp -fipa-cp-clone -fipa-cp-alignment -fipa-pta
-fipa-profile -fipa-pure-const -fipa ອ້າງ​ອີງ​ -fipa-icf -fira-algorithm=ຂັ້ນຕອນວິທີ
-fira-region=ພູມິພາກ -fira-hoist-pressure -fira-loop-pressure -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose=n -fisolate-erroneous-paths-dereference
-fisolate-erroneous-paths-attribute -fivopts -fkeep-inline-ຟັງຊັນ
-fkeep-static-consts -flive-range-shrinkage -floop-block -floop-interchange
-floop-strip-mine -floop-unroll-and- jam -floop-nest-optimize -floop-parallelize-ທັງໝົດ
-flra-remat -flto -flto-compression-level -flto-partition=ພຶຊະຄະນິດ flto-ບົດລາຍງານ
-flto-report-wpa -fmerge-ທັງໝົດ-ຄົງທີ່ -fmerge-ຄົງທີ່ -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-invariants -fno-branch-count-reg
-fno-defer-pop -fno-function-cse -fno-guess-branch-probability -fno-inline
-fno-math-errno -fno-peephole -fno-peephole2 -fno-sched-interblock -fno-sched-spec
-fno-ເຊັນຊື່-ສູນ -fno-toplevel-reorder -fno-traping-ຄະນິດສາດ
-fno-zero-initialized-in-bss -fomit-frame-pointer -foptimize-sibling-calls
-fpartial-inlining -fpeel-loops -fpredictive-commoning -fprefetch-loop-arrays
-fprofile-report -fprofile-ການ​ແກ້​ໄຂ​ -fprofile-dir=ເສັ້ນທາງ -fprofile-generate
-fprofile-generate=ເສັ້ນທາງ -fprofile-ໃຊ້ -fprofile-use=ເສັ້ນທາງ -fprofile-ຄ່າ
-fprofile-reorder-functions -freciprocal-ຄະນິດສາດ ຟຣີ -frename-ລົງທະບຽນ
-freorder-ຕັນ -freorder-blocks-and-partition -freorder-functions
-frerun-cse-after-loop -freschedule-modulo-schedule-loops - ຄະ​ນິດ​ສາດ​ພື້ນ​ຖານ​
-fsched2-use-superblocks -fsched-ຄວາມກົດດັນ -fsched-spec-load
-fsched-spec-load-ອັນຕະລາຍ -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 -fsection-anchors
-fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​ -fselective-ກຳນົດ​ເວລາ2 -fsel-sched-pipelining
-fsel-sched-pipelining-outer-loops -fsemantic-interposition -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -fssa-phiopt -stack-protector -fstack-protector-ທັງໝົດ
-fstack-protector-strong -fstack-protector-explicit -fstdarg-opt -fstrict-aliasing
-fstrict-ລົ້ນ -fthread-jumps -ftracer -ftree-bit-ccp -ftree-builtin-call-dce
-ftree-ccp -ftre-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop
-free-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
- ຟຣີ​ຟຣີ​ -ftree-loop-if-convert -ftree-loop-if-convert-stores -ftree-loop-im
-ftree-phiprop -ftree-loop-ການແຜ່ກະຈາຍ -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-loop-vectorize
-ftree-parallelize-loops=n -ftre-pre -ftree-partial-pre -ftree-pta -ftree-reassoc
- ອ່າງລ້າງມື -ftree-slsr -ftree-sra -ftre-switch-ແປງ -ftree-tail-merge
- ຫ້າ​ປີ​ -ftree-vectorize -ftree-vrp -funit-at-a-time -funroll-all-loops
-funroll-loops -funsafe-loop-optimizations -funsafe-math-optimizations
-funswitch-loops -fipa-ra -fvariable-expansion-in-unroller -fvect-cost-model -fvpt
-fweb - ໂຄງ​ການ​ທັງ​ຫມົດ​ -fwpa -fuse-linker-plugin --param ຊື່=ມູນຄ່າ -O -O0 -O1 -O2
-O3 -ອສ - ໄວ - ອຈ

ໂປເຈັກເຕີ້ ທາງເລືອກໃນການ
-Aຄໍາຖາມ=ຄໍາຕອບ -A-ຄໍາຖາມ[=ຄໍາຕອບ] -C -dD -dI -dM -dN -Dມະຫາພາກ[=defn] -E -H
-idirafter dir - ລວມ​ທັງ​ ເອກະສານ - ໄອມາໂຄຣ ເອກະສານ - ຄໍາ​ນິ​ຍາມ​ ເອກະສານ -iwithprefix dir
-iwithprefix ກ່ອນ dir - ລະບົບ dir -Imultilib dir -isysroot dir -M ເອັມ -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-macro-ຂະຫຍາຍ -fworking-directory
-remap -trigraphs -undef -Uມະຫາພາກ -Wp​,ທາງເລືອກ - ໂປເຊດເຊີ Xpre ທາງເລືອກ -no-integrated-cpp

ຄົນລອບສັງຫານ ທາງເລືອກ
- ວ.ທາງເລືອກ -Xassembler ທາງເລືອກ

ຜູ້ເຊື່ອມໂຍງ ທາງເລືອກໃນການ
object-file-name -fuse-ld=linker -lຫ້ອງສະຫມຸດ -nostartfiles -nodefaultlibs -nostdlib
-pie -rdynamic -s -static -static-libgcc -static-libstdc++ -static-libasan
-static-libtsan -static-liblsan -static-libubsan -static-libmpx -static-libmpxwrappers
- ແບ່ງ​ປັນ​ -shared-libgcc - ສັນ​ຍາ​ລັກ​ -T script -Wl,ທາງເລືອກ -Xlinker ທາງເລືອກ -u ສັນຍາລັກ -z
ຄໍາ

Directory ທາງເລືອກໃນການ
-Bຄຳ ນຳ ໜ້າ -Idir -iplugindir=dir -iquotedir -Ldir -spec=ເອກະສານ -I- --sysroot=dir
--no-sysroot-suffix

ເຄື່ອງ ເພິ່ງພາອາໄສ ທາງເລືອກໃນການ
AAArch64 ທາງເລືອກໃນການ -mabi=ຊື່ -mbig-endian -mlittle-endian -mgeneral-regs-ເທົ່ານັ້ນ
-mcmodel=ຂະໜາດນ້ອຍ -mcmodel=ຂະໜາດນ້ອຍ -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=ຊື່

Adapteva Epiphany ທາງເລືອກໃນການ -mhalf-reg-file -mprefer-short-insn-regs -mbranch-cost=num
-mcmove -mnops=num -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-ປັບ​ປຸງ​ແກ້​ໄຂ​
-mstack-offset=num -mround-ໃກ້ທີ່ສຸດ -mlong-ໂທ -mshort-ໂທ -msmall16 -mfp-mode=ຮູບແບບການ
-mvect-double -max-vect-align=num -msplit-vecmove-ຕົ້ນ -m1reg-reg

ARC ທາງເລືອກໃນການ -mbarrel-shifter -mcpu=cpu -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-ກະທັດຮັດ -mdpfp-ໄວ -mno-dpfp-lrsr - ເມ -mno-mpy - mmul32x16 -mmul64 -mnorm
-mspfp -mspfp-ກະທັດຮັດ -mspfp-ໄວ -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
- mlock -mmac-d16 -mmac-24 -mrtsc -mswpe - ໂທ​ລະ​ສັບ -mxy - misize -mannotate-align
-marclinux -marclinux_prof -mepilogue-cfi -mlong-ໂທ -ໂທປານກາງ -msdata
-mucb-mcount -mvolatile-cache -malign-ໂທ -mauto-modify-reg -mbbit-peephole -mno-brcc
-mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -mearly-cbranchsi -mexpand-adddi
-mindexed-loads -mlra -mlra-priority-none -mlra-priority-compact mlra ບູລິມະສິດ-
ບໍ່ກະທັດຮັດ -mno-millicode - ລະ​ຫັດ​ປະ​ສົມ​ -mq-ຊັ້ນ -mRcq -mRcw -msize-level=ລະດັບ
-mtune=cpu -mmultcost=num -munalign-prob-threshold=ການຄາດຄະເນ

ARM ທາງເລືອກໃນການ -mapcs-frame -mno-apcs-frame -mabi=ຊື່ -mapcs-stack-ກວດ
-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-norturn -mlong-ໂທ -mno-long-calls -msingle-pic-base
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mpoke-function-name
- ໂປ້ມື - ມາມ -mtpcs-frame -mtpcs-ໃບ-ກອບ -mcaller-super-interworking
-mcallee-super-interworking -mtp=ຊື່ -mtls-ພາສາ =ພາສາ -mword ການ​ຍົກ​ຍ້າຍ​
-mfix-cortex-m3-ldrd -munaligned-ເຂົ້າ​ເຖິງ​ -mneon-for-64bits -mslow-flash-data
-masm-syntax-unified - ຈໍາ​ກັດ​ມັນ​

APR ທາງເລືອກໃນການ -mmcu=mcu -maccumulate-args -mbranch-cost=ຄ່າໃຊ້ຈ່າຍ -mcall-prologues - mint8
-mn_flash=ຂະຫນາດ -mno-interrupts -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib
-Waddr-space-ແປງ

ດຳ ທາງເລືອກໃນການ -mcpu=cpu[-sirevision] - ຊິມ -momit-leaf-frame-pointer
-mno-omit-leaf-frame-pointer -mspecld-ຜິດປົກກະຕິ -mno-specld-ຜິດປົກກະຕິ -mcsync-ຜິດປົກກະຕິ
-mno-csync-ຜິດປົກກະຕິ -mlow-64k -mno-low64k -mstack-check-l1 - ຫໍສະໝຸດກາງ
-mno-id-shared-library -mshared-library-id=n -mleaf-id-shared-library
-mno-leaf-id-shared-library -msep-ຂໍ້ມູນ -mno-sep-data -mlong-ໂທ -mno-long-calls
-mfast-fp -minline-plt - mmulticore - mcorea -mcoreb -msdram -micplb

C6X ທາງເລືອກໃນການ -mbig-endian -mlittle-endian - ມີນາ=cpu - ຊິມ -msdata=ປະເພດ sdata

CRIS ທາງເລືອກໃນການ -mcpu=cpu - ມີນາ=cpu -mtune=cpu -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-ຜົນຂ້າງຄຽງ
-mstack-align -mdata-align -mconst-align -m32-ບິດ -m16-ບິດ -m8-ບິດ
-mno-prologue-epilogue -mno-gotplt -melf - maout -melinux -mlinux -ຊິມ -sim2
-mmul-bug-ແກ້ໄຂ -mno-mul-bug-ແກ້ໄຂ

CR16 ທາງເລືອກໃນການ -mmac -mcr16cplus -mcr16c - ຊິມ - mint32 -mbit-ops -mdata-model=ຮູບແບບ

Darwin ທາງເລືອກໃນການ -all_load -allowable_client -ໂຄ້ງ -arch_errors_fatal -arch_only
-bind_at_load - ມັດ -bundle_loader -client_name -compatibility_version
- ຮຸ່ນ_ປະຈຸບັນ -dead_strip -dependency-file -dylib_file -dylinker_install_name
- ແບບເຄື່ອນໄຫວ -dynamiclib -exported_symbols_list - ບັນ​ຊີ​ລາຍ​ການ​ -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names - ໂຄງ​ການ​ຮູບ​ພາບ​
-image_base -ໃນ​ມັນ -install_name -keep_private_externs -multi_module
-multiply_defined -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding - ນາມສະກຸນ - noprebind
-noseglinkedit -pagezero_size - prebind -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -sectalign -sectobject ສັນ​ຍາ​ລັກ​ - ເປັນ​ຫຍັງ​ການ​ໂຫຼດ​ -seg1 addr -sectcreate
-sectobject ສັນ​ຍາ​ລັກ​ - ຂະ​ແຫນງ​ການ​ -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -single_module -static -sub_library -sub_umbrella
- twolevel_namespace - ຄັນຮົ່ມ - ບໍ່​ໄດ້​ກໍາ​ນົດ​ -unexported_symbols_list
-weak_reference_mismatch - whatsloaded -F -gused - gfull -mmacosx-version-min=ສະບັບພາສາ
- mkernel -mone-byte-bool

DEC Alpha ທາງເລືອກໃນການ -mno-fp-regs -msoft-float -ມີ່ -mieee-with-inexact
-mieee-ສອດຄ່ອງ -mfp-trap-mode=ຮູບແບບການ -mfp-rounding-mode=ຮູບແບບການ -mtrap-precision=ຮູບແບບການ
-mbuild-ຄົງທີ່ -mcpu=cpu-type -mtune=cpu-type -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data -mlarge-data -msmall-text
- ຂະ​ຫນາດ​ໃຫຍ່​ຂໍ້​ຄວາມ​ -mmemory-latency=ທີ່ໃຊ້ເວລາ

FR30 ທາງເລືອກໃນການ -msmall-ແບບ -mno-lsim

FRV ທາງເລືອກໃນການ -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdouble -mno-double - ສື່​ມວນ​ຊົນ -mno-media
- ມົວລັດ -mno-muladd -mfdpic -minline-plt -mgrel-ro -multilib-library-pic
-mlinked-fp -mlong-ໂທ -malign-labels -mlibrary-pic -macc-4 -macc-8 -mpack
-mno-pack -mno-ທຸງ -mcond-ຍ້າຍ -mno-cond-move -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-ສາຂາ
-mno-vliw-ສາຂາ -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-ສະຖິຕິ -mTLS -mtls -mcpu=cpu

GNU / Linux ທາງເລືອກໃນການ -mglibc - muclibc -mbionic -mandroid -tno-android-cc -tno-android-ld

H8 / 300 ທາງເລືອກໃນການ -mrelax -mh -ນາງ​ສາວ - ນ -mexr -mno-exr - mint32 -malign-300

HPPA ທາງເລືອກໃນການ - ມີນາ=ປະເພດສະຖາປັດຕະຍະກໍາ -mdisable-fpregs -mdisable-indexing
-mfast-indirect-calls - ມກ -mgnu-ld -mhp-ld -mfixed-range=ໄລຍະລົງທະບຽນ
-mjump-in-delay -mlinker-opt -mlong-ໂທ -mlong-load-store -mno-disable-fpregs
-mno-disable-indexing -mno-fast-indirect-calls -mno-gas -mno-jump-in-delay
-mno-long-load-store -mno-portable-runtime -mno-soft-float -mno-space-regs
-msoft-float -mpa-risc-1-0 -mpa-risc-1-1 -mpa-risc-2-0 -mportable-runtime
-mschedule=cpu-type -mspace-regs -msio -mwsio -muix=unix-std -nolibdld -static
- ກະທູ້

IA-64 ທາງເລືອກໃນການ -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-names -msdata -mno-sdata -mconstant-gp -mauto-pic
-mfused-madd -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-divide -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-divide -minline-sqrt-min-latency
-minline-sqrt-max-throughput -mno-inline-sqrt -mdwarf2-asm -mearly-stop-bits
-mfixed-range=ໄລຍະລົງທະບຽນ -mtls-size=tls-size -mtune=cpu-type -milp32 -mlp64
-msched-br-data-spec -msched-ar-data-spec -msched-control-spec -msched-br-in-data-spec
-msched-ar-in-data-spec -msched-in-control-spec -msched-spec-ldc
-msched-spec-control-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-ຫຼັງຈາກ-ທຸກໆຮອບວຽນ
-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 ທາງເລືອກໃນການ -mbarrel-shift-enabled -mdivide-ເປີດໃຊ້ງານ - multiply-enabled
-msign-extend-enabled -muser-enabled

M32R/D ທາງເລືອກໃນການ -m32r2 -m32rx -m32r -mdebug -malign-loops -mno-align-loops
-missue-rate=ຈໍານວນ -mbranch-cost=ຈໍານວນ -mmodel=code-size-model-type -msdata=ຂໍ້ມູນ-
ປະເພດ -mno-flush-func -mflush-func=ຊື່ -mno-flush-ດັກ -mflush-trap=ຈໍານວນ -G num

M32C ທາງເລືອກໃນການ -mcpu=cpu - ຊິມ -memregs=ຈໍານວນ

M680x0 ທາງເລືອກໃນການ - ມີນາ=ໂຄ້ງ -mcpu=cpu -mtune=ປບັ -m68000 -m68020 -m68020-40
-m68020-60 -m68030 -m68040 -m68060 -mcpu32 -m5200 -m5206e -m528x -m5307 -m5407
-mcfv4e -mbitfield -mno-bitfield -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mshort -mno-ສັ້ນ -mhard-float -m68881 -msoft-float -mpcrel
-malign-int -mstrict-align -msep-ຂໍ້ມູນ -mno-sep-data -mshared-library-id=n
- ຫໍສະໝຸດກາງ -mno-id-shared-library -mxgot -mno-xgot

MCore ທາງເລືອກໃນການ -mhardlit -mno-hardlit -mdiv -mno-div -mrelax ທັນທີ
-mno-ຜ່ອນຄາຍ-ທັນທີ -mwide-bitfields -mno-wide-bitfields -m4byte functions
-mno-4byte-functions -mcallgraph-data -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-increment

ເມປ ທາງເລືອກໃນການ -mabsdiff -mall-opts - ສະເລ່ຍ -mbased=n - ບິດ -mc=n -mclip
-mconfig=ຊື່ -mcop -mcop32 -mcop64 -mivc2 -mdc -mdiv -ເມບ -mel -mio-volatile -ml
-mleaz -ມມ -mminmax - mmult -mno-opts -mrepeat -ນາງ​ສາວ -msatur -msdram - ຊິມ -msimnovec
-mtf -mtiny=n

MicroBlaze ທາງເລືອກໃນການ -msoft-float -mhard-float -msmall-divides -mcpu=cpu -mmmcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-pattern-ປຽບທຽບ -mxl-stack-ກວດ
-mxl-gp-opt -mno-clearbss -mxl-ຄູນ-ສູງ -mxl-float-ແປງ -mxl-float-sqrt
-mbig-endian -mlittle-endian -mxl-ສັ່ງຄືນໃໝ່ -mxl-mode-app-model

MIPS ທາງເລືອກໃນການ -EL -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=ຊ່ວຍເຫລືອ
- mabicalls -mno-abicalls -mshared -mno-ແບ່ງປັນ -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpx -mfp64 -mhard-float -msoft-float -mno-float
-msingle-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 -mmmicromips -mno-micromips -mfpu=fpu-type -msmartmips -mno-smartmips
- ຄູ່ດຽວ -mno-paired-single -mdmx -mno-mdmx -mips3d -mno-mips3d -mmt
-mno-mt -mllsc -mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -Gnum
-mlocal-sdata -mno-local-sdata -mextern-sdata -mno-extern-sdata -mgpopt -mno-gopt
-membedded-data -mno-embedded-data -muninit-const-in-rodata
-mno-uninit-const-in-rodata -mcode-readable=ຕັ້ງ -msplit-ທີ່ຢູ່
-mno-split-addresses -mexplicit-relocs -mno-explicit-relocs -mcheck-ສູນ-ພະແນກ
-mno-check-zero-division -mdivide-ກັບດັກ -mdivide-breaks -mmmcpy -mno-memcpy
-mlong-ໂທ -mno-long-calls - ບ້າ -mno-mad - mimadd -mno-imadd -mfused-madd
-mno-fused-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000
-mfix-r4400 -mno-fix-r4400 -mfix-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 -mbranch-cost=num - ສາຂາທີ່ອາດຈະເປັນໄປໄດ້
-mno-ສາຂາ-ອາດຈະ -mfp-ຂໍ້ຍົກເວັ້ນ -mno-fp-ຂໍ້ຍົກເວັ້ນ -mvr4130-ຈັດຮຽງ -mno-vr4130-align
-msynci -mno-sync -mrelax-pic-ໂທ -mno-relax-pic-calls -mmcount-ra-ທີ່ຢູ່

MMIX ທາງເລືອກໃນການ -mlibfuncs -mno-libfuncs - mepsilon -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-extend -mknutdiv -mtoplevel - ສັນ​ຍາ​ລັກ​ -melf -mbranch-ຄາດ
-mno-branch-predict -mbase-ທີ່ຢູ່ -mno-base-dresses -msingle-ອອກ
-mno-single-ອອກ

MN10300 ທາງເລືອກໃນການ - ແມງໄມ້ຫຼາຍ -mno-mult-bug -mno-am33 -ແມ່33 -mam33-2 -ແມ່34 -mtune=cpu-
ປະເພດ -mreturn-pointer-on-d0 -mno-crt0 -mrelax - ມະລີ -msetlb

Moxie ທາງເລືອກໃນການ -ເມບ -mel -mmul.x -mno-crt0

MSP430 ທາງເລືອກໃນການ - ຊິມ -masm-hex -mmcu= -mcpu= - ຂະ​ຫນາດ​ໃຫຍ່​ -msall -mrelax -mhwmult= - minrt

NDS32 ທາງເລືອກໃນການ -mbig-endian -mlittle-endian -mreduced-regs -mful-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vector-size=num
-mcache-block-size=num - ມີນາ=ໂຄ້ງ -mcmodel=code-model -mctor-dtor -mrelax

Nios II ທາງເລືອກໃນການ -G num -mgpopt=ທາງເລືອກ -mgpopt -mno-gpopt -mel -ເມບ -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 -mcustom-insn=N
-mno- custom-insn -mcustom-fpu-cfg=ຊື່ - mhal -msmallc -msys-crt0=ຊື່ -msys-lib=ຊື່

Nvidia PTX ທາງເລືອກໃນການ -m32 -m64 -mmainkernel

PDP-11 ທາງເລືອກໃນການ -mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 -mbcopy
-mbcopy-builtin - mint32 -mno-int16 - mint16 -mno-int32 -mfloat32 -mno-float64
-mfloat64 -mno-float32 - mabshi -mno-abshi -ສາຂາ-ແພງ -ສາຂາ-ລາຄາຖືກ
-munix-asm -mdec-asm

picoChip ທາງເລືອກໃນການ -mae=ae_type -mvliw-lookahead=N -msymbol-as-address
-mno-inefficient-ເຕືອນ

PowerPC ທາງເລືອກໃນການ ເບິ່ງຕົວເລືອກ RS/6000 ແລະ PowerPC.

RL78 ທາງເລືອກໃນການ - ຊິມ -mmul=ບໍ່ມີ -mmul=g13 -mmul=rl78 -m64bit-ສອງເທົ່າ -m32bit-ສອງເທົ່າ

RS / 6000 ແລະ PowerPC ທາງເລືອກໃນການ -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model
-mpowerpc64 -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmfcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-hard-dfp -mful-toc -ໜ້ອຍສຸດ-toc -mno-fp-in-toc -mno-sum-in-toc
-m64 -m32 -mxl-compat -mno-xl-compat -mpe -malign-power -malign-natural
-msoft-float -mhard-float - ຫຼາຍ -mno-ຫຼາຍ -msingle-float -mdouble-float
-msimple-fpu -mstring -mno-string - ການ​ປັບ​ປຸງ​ -mno-ການ​ປັບ​ປຸງ​ -mavoid-indexed-addresses
-mno-avoid-indexed-addresses -mfused-madd -mno-fused-madd -mbit-align
-mno-bit-align -mstrict-align -mno-strict-align - ສາມາດຍ້າຍໄດ້ -mno-relocateable
-mrelocatable-lib -mno-relocateable-lib -mtoc -mno-toc - ໜ້ອຍ -mlittle-endian
- ໃຫຍ່ -mbig-endian -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base
-mprioritize-restricted-insns=ບູລິມະສິດ -msched-costly-dep=dependence_type
-minsert-sched-nops=ໂຄງການ -mcall-sysv -mcall-netbsd -maix-struct-return
-msvr4-struct-return -mabi=ປະເພດ Abi -msecure-plt -mbss-plt
-mblock-move-inline-limit=num -misel -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=ບໍ່
-mfloat-gprs=ດ່ຽວ -mfloat-gprs=ສອງເທົ່າ -mprototype -mno-prototype - ຊິມ -mmvme
- ບ້າ - myellowknife - memb -msdata -msdata=ເລືອກ -mvxworks -G num - ກະທູ້ -mrecip
-mrecip=ເລືອກ -mno-recip -mrecip-precision -mno-recip-precision -mveclibabi=ປະເພດ -mfriz
-mno-friz -mpointers-to-nested-functions -mno-pointers-to-nested-functions
-msave-toc-ທາງອ້ອມ -mno-save-toc-indirect -mpower8-fusion -mno-mpower8-fusion
-mpower8-vector -mno-power8-vector -mcrypto -mno-crypto -mdirect-ຍ້າຍ -mno-direct-ຍ້າຍ
-mquad ຄວາມ​ຈໍາ​ -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 -mupper-regs -mno-upper-regs

RX ທາງເລືອກໃນການ -m64bit-ສອງເທົ່າ -m32bit-ສອງເທົ່າ -fpu -nofpu -mcpu= -mbig-endian-data
-mlittle-endian-data -msmall-data - ຊິມ -mno-sim -mas100- syntax -mno-as100-syntax
-mrelax -mmax-constant-size= -mint-register= - mpid -mno-warn-multiple-fast-interrupts
-msave-acc-in-interrupts

S / 390 ແລະ zSeries ທາງເລືອກໃນການ -mtune=cpu-type - ມີນາ=cpu-type -mhard-float -msoft-float
-mhard-dfp -mno-hard-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-backchain -mpacked-stack -mno-packed-stack -msmall-exec -mno-small-exec
-mmvcle -mno-mvcle -m64 -m31 -mdebug -mno-debug -ເມຊາ -mzarch -mtpf-trace
-mno-tpf-trace -mfused-madd -mno-fused-madd -mwarn-framesize -mwar-dynamicstack
-mstack ຂະ​ຫນາດ​ -mstack-ກອງ -mhotpatch=ຄໍາເຄິ່ງ,ຄໍາເຄິ່ງ

ຜະລິດແນນ ທາງເລືອກໃນການ -ເມບ -mel -mnhwloop -muls -mmac - ຄະ​ແນນ 5 - ຄະແນນ 5u - ຄະ​ແນນ 7 -mscore7d

SH ທາງເລືອກໃນການ -m1 -m2 -m2e -m2a-nofpu -m2a-ດຽວເທົ່ານັ້ນ -m2a-ດຽວ -m2a -m3 -m3e
-m4-nofpu -m4-ດຽວເທົ່ານັ້ນ -m4-ດຽວ -m4 -m4a-nofpu -m4a-ດຽວເທົ່ານັ້ນ -m4a-ດຽວ
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-ກະທັດຮັດ
-m5-compact-nofpu -mb -ml -mdalign -mrelax -migtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -ມີ່ -mno-ieee - ບິດ - misize -minline-ic_invalidate
- ຂົວ -mspace - ມັກ -musermode -multcost=ຈໍານວນ -mdiv=ແຜນຍຸດທະສາດ
-mdivsi3_libfunc=ຊື່ -mfixed-range=ໄລຍະລົງທະບຽນ -mindexed-addressing
-mgettrcost=ຈໍານວນ -mpt-ແກ້ໄຂ -maccumulate-outgoing-args -minvalid-ສັນຍາລັກ
-matomic-model=ຮູບແບບປະລໍາມະນູ -mbranch-cost=num -mzdcbranch -mno-zdcbranch
-mcbranch-force-delay-slot -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -mpretend-cmove -mtas

ແສງອາທິດ 2 ທາງເລືອກໃນການ -mclear-hwcap -mno-clear-hwcap - ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ -mno- impure-text
- ກະທູ້ - ກະທູ້

SPARC ທາງເລືອກໃນການ -mcpu=cpu-type -mtune=cpu-type -mcmodel=code-model -mmemory-model=mem-
ຮູບແບບ -m32 -m64 -mapp-regs -mno-app-regs -mfaster-structs -mno-ໄວ-ໂຄງສ້າງ
-mflat -mno-ແປ -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-ອະຄະຕິ -mno-stack-bias -munaligned-doubles
-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

SPU ທາງເລືອກໃນການ -mwar-reloc -merror-reloc -msafe-dma -munsafe-dma -branch - ຄໍາ​ແນະ​ນໍາ​
-msmall-mem -mlarge-mem -mstdmain -mfixed-range=ໄລຍະລົງທະບຽນ -mea32 -mea64
-maddress-space-ແປງ -mno-address-space-ການແປງ -mcache-size=ຂະຫນາດ cache
- ການ​ປັບ​ປຸງ matomic​ -mno-atomic-ການອັບເດດ

ລະບົບ V ທາງເລືອກໃນການ - ຖາມ -Qn -YP,ເສັ້ນທາງ -Ym,dir

TILE-Gx ທາງເລືອກໃນການ -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian -mcmodel=code-model

TILEPro ທາງເລືອກໃນການ -mcpu=cpu -m32

V850 ທາງເລືອກໃນການ -mlong-ໂທ -mno-long-calls -mep -mno-ep -mprolog-function
-mno-prolog-function -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-callt -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 - ມົວ -mrelax -mlong-ໂດດ -msoft-float -mhard-float -mgcc-abi
-mrh850-abi -mbig-ສະຫຼັບ

Vax ທາງເລືອກໃນການ - ມກ -mgnu - munix

ວິໄສທັດ ທາງເລືອກໃນການ -mdebug - ຊິມ -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=cpu-type
-mtune=cpu-type -msv-mode -muser-mode

VMS ທາງເລືອກໃນການ -mvms-return-codes -mdebug-main=ຄຳ ນຳ ໜ້າ - mmalloc64 -mpointer-size=ຂະຫນາດ

VxWorks ທາງເລືອກໃນການ -mrtp - ບໍ່ສະຖິດ -Bstatic -Bdynamic -Xbind-lazy -Xbind-ດຽວນີ້

x86 ທາງເລືອກໃນການ -mtune=cpu-type - ມີນາ=cpu-type -mtune-ctrl=ບັນຊີລາຍຊື່ຄຸນນະສົມບັດ
-mdump-tune-ຄຸນນະສົມບັດ -mno-default -mfpmath=ຫນ່ວຍບໍລິການ -masm=ພາສາ -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -mno-wide-ຄູນ -mrtd -malign-double
-mpreferred-stack-boundary=num -mincoming-stack-boundary=num -mcld -mcx16 -msahf
- mmovbe -mcrc32 -mrecip -mrecip=ເລືອກ -mvzeroupper -mprefer-avx128 -mmmx -msse -msse2
-msse3 -mssse3 -msse4.1 -msse4.2 -msse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha - ແມ່ -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -msse4a -m3dnow -mpopcnt - mabm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
-mno-align-stringops -minline-all-stringops -minline-stringops-ແບບໄດນາມິກ
-mstringop-strategy=ພຶຊະຄະນິດ -mmemcpy-strategy=ແຜນຍຸດທະສາດ -mmemset-strategy=ແຜນຍຸດທະສາດ
-mpush-args -maccumulate-outgoing-args -m128bit-ຍາວ-ສອງເທົ່າ -m96bit-ຍາວ-ສອງເທົ່າ
-mlong-double-64 -mlong-double-80 -mlong-double-128 -mregparm=num -msseregparm
-mveclibabi=ປະເພດ -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-pointer -mno-red-zone -mno-tls-direct-seg-refs -mcmodel=code-model
-mabi=ຊື່ -maddress-mode=ຮູບແບບການ -m32 -m64 -mx32 -m16 -mlarge-data-threshold=num
-msse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data=ປະເພດ
-mstack-protector-guard=ກອງ

x86 Windows ທາງເລືອກໃນການ -mconsole -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
-municode -mwin32 - ປ່ອງຢ້ຽມ -fno-set-stack-executable

Xstormy16 ທາງເລືອກໃນການ - ຊິມ

Xtensa ທາງເລືອກໃນການ -mconst16 -mno-const16 -mfused-madd -mno-fused-madd -mforce-no-pic
-mserialize-volatile -mno-serialize-volatile -mtext-section-literals
-mno-text-section-literals -mtarget-align -mno-target-align -mlongcalls
-mno-longcalls

zSeries ທາງເລືອກໃນການ ເບິ່ງຕົວເລືອກ S/390 ແລະ zSeries.

ລະຫັດ ການຜະລິດ ທາງເລືອກໃນການ
-fcall-ບັນທຶກ-reg -fcall-ໃຊ້-reg - ຄົງ​ທີ່ -reg - ຂໍ້​ຍົກ​ເວັ້ນ​ -fnon-call-exceptions
-fdelete-dead-exceptions -funwind-ຕາຕະລາງ -fasynchronous-unwind-ຕາຕະລາງ -fno-gnu-ເປັນເອກະລັກ
-finhibit-size-directive - finstrument - ຫນ້າ​ທີ່​
-finstrument-functions-exclude-function-list=ຊິມ,ຊິມ...
-finstrument-functions-exclude-file-list=ເອກະສານ,ເອກະສານ... -fno-ທົ່ວໄປ -fno-ident
-fpcc-struct-return -fpic -fPIC -fpie -fPIE -fno-jump-tables -frecord-gcc-ສະຫຼັບ
-freg-struct-return -fshort-enums -fshort-double -fshort-wchar -fverbose-asm
-fpack-struct[=n] -fstack-ກວດ​ສອບ​ -fstack-limit-register=reg -fstack-limit-symbol=ຊິມ
-fno-stack-ຈຳກັດ -fsplit-stack -fleading-underscore -ftls-model=ຮູບແບບ
-fstack-reuse=reuse_level -ftrapv -fwrapv -fbounds-ກວດ​ສອບ​
-fvisibility=[Default|ພາຍໃນ|ເຊື່ອງໄວ້|ປ້ອງກັນ] -fstrict-volatile-bitfields
-fsync-libcalls

ທາງເລືອກໃນການ ການຄວບຄຸມ ໄດ້ ປະເພດ of ຜົນຜະລິດ
ການລວບລວມສາມາດມີເຖິງສີ່ຂັ້ນຕອນ: preprocessing, compilation ເຫມາະສົມ, ປະກອບແລະ
ການເຊື່ອມໂຍງ, ສະເຫມີໃນຄໍາສັ່ງນັ້ນ. GCC ມີຄວາມສາມາດໃນການປຸງແຕ່ງແລະລວບລວມຫຼາຍໆຢ່າງ
ໄຟລ​໌​ບໍ່​ວ່າ​ຈະ​ເຂົ້າ​ໄປ​ໃນ​ໄຟລ​໌​ປ້ອນ​ຂໍ້​ມູນ​ຂອງ​ຕົວ​ປະ​ກອບ​ຈໍາ​ນວນ​ຫນຶ່ງ​, ຫຼື​ເຂົ້າ​ໄປ​ໃນ​ເອ​ກະ​ສານ​ການ​ປ້ອນ​ຂໍ້​ມູນ assembler​; ແລ້ວ
ແຕ່ລະເອກະສານປະກອບປະກອບສ້າງໄຟລ໌ວັດຖຸ, ແລະການເຊື່ອມໂຍງປະສົມປະສານວັດຖຸທັງຫມົດ
ໄຟລ໌ (ທີ່ລວບລວມໃຫມ່, ແລະທີ່ລະບຸໄວ້ເປັນ input) ເຂົ້າໄປໃນໄຟລ໌ປະຕິບັດໄດ້.

ສໍາລັບໄຟລ໌ປ້ອນຂໍ້ມູນໃດນຶ່ງ, ນາມສະກຸນຂອງໄຟລ໌ຈະກໍານົດປະເພດຂອງການລວບລວມຂໍ້ມູນ
ເຮັດແລ້ວ:

ເອກະສານ.c
ລະຫັດແຫຼ່ງ C ທີ່ຕ້ອງໄດ້ຮັບການປຸງແຕ່ງກ່ອນ.

ເອກະສານ.i
ລະຫັດແຫຼ່ງ C ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.ii
ລະຫັດແຫຼ່ງ C++ ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.m
ລະຫັດແຫຼ່ງ Objective-C. ໃຫ້ສັງເກດວ່າທ່ານຕ້ອງເຊື່ອມຕໍ່ກັບ libobjc ຫ້ອງສະຫມຸດເພື່ອເຮັດໃຫ້ເປັນ
ວຽກໂຄງການ Objective-C.

ເອກະສານ.ໄມ
ລະຫັດແຫຼ່ງ Objective-C ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານmm
ເອກະສານ.M
ລະຫັດແຫຼ່ງ Objective-C++. ໃຫ້ສັງເກດວ່າທ່ານຕ້ອງເຊື່ອມຕໍ່ກັບ libobjc ຫ້ອງສະຫມຸດເພື່ອເຮັດໃຫ້
ໂປຣແກຣມ Objective-C++ ເຮັດວຽກ. ໃຫ້ສັງເກດວ່າ .M ຫມາຍເຖິງຕົວຫນັງສື M.

ເອກະສານ.mii
ລະຫັດແຫຼ່ງ Objective-C++ ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.h
C, C++, Objective-C ຫຼື Objective-C++ header file ທີ່ຈະປ່ຽນເປັນ precompiled
header (ຄ່າເລີ່ມຕົ້ນ), ຫຼື C, C++ header ທີ່ຈະປ່ຽນເປັນ Ada spec (ຜ່ານ
-fdump-ada-spec ສະຫຼັບ).

ເອກະສານcc
ເອກະສານ.cp
ເອກະສານ.cxx
ເອກະສານ.cpp
ເອກະສານ.CPP
ເອກະສານ.c++
ເອກະສານ.C
ລະຫັດແຫຼ່ງ C++ ທີ່ຕ້ອງໄດ້ຮັບການປຸງແຕ່ງກ່ອນ. ໃຫ້ສັງເກດວ່າໃນ .cxx, ສອງຕົວອັກສອນສຸດທ້າຍ
ທັງສອງຈະຕ້ອງເປັນຕົວຫນັງສື x. ເຊັ່ນດຽວກັນ, .C ໝາຍເຖິງຕົວໜັງສື C.

ເອກະສານmm
ເອກະສານ.M
ລະຫັດແຫຼ່ງ Objective-C++ ທີ່ຕ້ອງໄດ້ປະມວນຜົນກ່ອນ.

ເອກະສານ.mii
ລະຫັດແຫຼ່ງ Objective-C++ ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.ຊມ
ເອກະສານ.H
ເອກະສານ.hp
ເອກະສານ.hxx
ເອກະສານ.hp
ເອກະສານ.HPP
ເອກະສານ.h++
ເອກະສານ.tcc
ໄຟລ໌ສ່ວນຫົວ C++ ທີ່ຈະປ່ຽນເປັນສ່ວນຫົວທີ່ລວບລວມໄວ້ກ່ອນ ຫຼື Ada spec.

ເອກະສານ.f
ເອກະສານ.ສໍາລັບ
ເອກະສານ.ftn
ລະຫັດແຫຼ່ງ Fortran ຄົງທີ່ທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.F
ເອກະສານ.FOR
ເອກະສານ.fpp
ເອກະສານ.FPP
ເອກະສານ.FTN
ລະຫັດແຫຼ່ງ Fortran ຄົງທີ່ຈະຕ້ອງຖືກປຸງແຕ່ງກ່ອນ (ກັບແບບດັ້ງເດີມ
preprocessor).

ເອກະສານ.f90
ເອກະສານ.f95
ເອກະສານ.f03
ເອກະສານ.f08
ລະຫັດແຫຼ່ງ Fortran ຟຣີທີ່ບໍ່ຄວນປະມວນຜົນກ່ອນ.

ເອກະສານ.F90
ເອກະສານ.F95
ເອກະສານ.F03
ເອກະສານ.F08
ລະຫັດແຫຼ່ງ Fortran ຟຣີທີ່ຕ້ອງໄດ້ຮັບການປຸງແຕ່ງກ່ອນ (ກັບແບບດັ້ງເດີມ
preprocessor).

ເອກະສານ.ໄປ
ໄປລະຫັດແຫຼ່ງ.

ເອກະສານ.ໂຄສະນາ
ໄຟລ໌ລະຫັດແຫຼ່ງ Ada ທີ່ປະກອບດ້ວຍການປະກາດຫົວໜ່ວຍຫ້ອງສະໝຸດ (ການປະກາດຂອງ a
package, subprogram, or generic, or a generic instantiation), ຫຼື ຫ້ອງສະໝຸດ
ການ​ປ່ຽນ​ຊື່​ການ​ປະ​ກາດ (ຊຸດ​, ທົ່ວ​ໄປ​, ຫຼື​ການ​ປະ​ກາດ​ການ​ປ່ຽນ​ຊື່​ໂຄງ​ການ​ຍ່ອຍ​)​. ດັ່ງກ່າວ
ໄຟລ໌ຍັງຖືກເອີ້ນວ່າ ຂໍ້ກໍາຫນົດ.

ເອກະສານ.adb
ໄຟລ໌ລະຫັດແຫຼ່ງ Ada ທີ່ມີເນື້ອໃນຂອງຫ້ອງສະໝຸດ (ໂຄງການຍ່ອຍ ຫຼືເນື້ອໃນຊຸດ).
ໄຟລ໌ດັ່ງກ່າວຍັງຖືກເອີ້ນວ່າ ຮ່າງກາຍ.

ເອກະສານ.s
ລະຫັດປະກອບ.

ເອກະສານ.S
ເອກະສານsx
ລະຫັດ Assembler ທີ່ຕ້ອງໄດ້ຮັບການປຸງແຕ່ງກ່ອນ.

ອື່ນໆ
ໄຟລ໌ວັດຖຸທີ່ຈະປ້ອນໂດຍກົງເຂົ້າໃນການເຊື່ອມໂຍງ. ຊື່ໄຟລ໌ໃດນຶ່ງທີ່ບໍ່ມີການຮັບຮູ້
suffix ແມ່ນປະຕິບັດດ້ວຍວິທີນີ້.

ທ່ານສາມາດລະບຸພາສາປ້ອນຂໍ້ມູນຢ່າງຊັດເຈນດ້ວຍ -x ຕົວເລືອກ:

-x ພາສາ
ລະບຸຢ່າງຈະແຈ້ງ ພາສາ ສໍາລັບໄຟລ໌ປ້ອນຂໍ້ມູນຕໍ່ໄປນີ້ (ແທນທີ່ຈະປ່ອຍໃຫ້
compiler ເລືອກຄ່າເລີ່ມຕົ້ນໂດຍອີງໃສ່ຊື່ໄຟລ໌ suffix). ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບທຸກຄົນ
ປະຕິບັດຕາມໄຟລ໌ປ້ອນຂໍ້ມູນຈົນກ່ວາຕໍ່ໄປ -x ທາງເລືອກ. ຄ່າທີ່ເປັນໄປໄດ້ສໍາລັບ ພາສາ ແມ່ນ:

c c-header cpp-output
c++ c++-header c++-cpp-output
objective-c objective-c-header objective-c-cpp-output
objective-c++ objective-c++-header objective-c++-cpp-output
assembler-with-cpp
ada
f77 f77-cpp-input f95 f95-cpp-input
go
java

-x none
ປິດສະເພາະຂອງພາສາໃດນຶ່ງ, ເພື່ອໃຫ້ໄຟລ໌ຕໍ່ມາຖືກຈັດການ
ອີງ​ຕາມ​ການ​ຕໍ່​ທ້າຍ​ຊື່​ໄຟລ​໌​ຂອງ​ເຂົາ​ເຈົ້າ (ດັ່ງ​ທີ່​ພວກ​ເຂົາ​ເຈົ້າ​ແມ່ນ​ຖ້າ​ຫາກ​ວ່າ​ -x ບໍ່​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​ທັງ​ຫມົດ).

-pass-exit-codes
ທຳ ມະດາ gcc ໂປລແກລມອອກດ້ວຍລະຫັດ 1 ຖ້າໄລຍະໃດນຶ່ງຂອງ compiler ກັບຄືນມາ
ລະຫັດກັບຄືນມາທີ່ບໍ່ສໍາເລັດ. ຖ້າທ່ານລະບຸ -pass-exit-codes, ການ gcc ໂຄງການແທນ
ຕອບກັບຄວາມຜິດພາດທີ່ສູງທີ່ສຸດເປັນຕົວເລກທີ່ຜະລິດໂດຍໄລຍະໃດໆທີ່ສົ່ງຄືນຂໍ້ຜິດພາດ
ຕົວຊີ້ບອກ. ດ້ານໜ້າຂອງ C, C++, ແລະ Fortran ກັບຄືນມາ 4 ຖ້າມີຂໍ້ຜິດພາດໃນການລວບລວມຂໍ້ມູນພາຍໃນ
ແມ່ນພົບ.

ຖ້າທ່ານຕ້ອງການພຽງແຕ່ບາງຂັ້ນຕອນຂອງການລວບລວມ, ທ່ານສາມາດນໍາໃຊ້ -x (ຫຼືຊື່ໄຟລ໌ຕໍ່ທ້າຍ)
ບອກ gcc ບ່ອນທີ່ຈະເລີ່ມຕົ້ນ, ແລະຫນຶ່ງໃນທາງເລືອກ -c, -S, ຫຼື -E ເວົ້າຢູ່ໃສ gcc ແມ່ນເພື່ອ
ຢຸດ. ໃຫ້ສັງເກດວ່າບາງການປະສົມປະສານ (ຕົວຢ່າງ, -x cpp-output -E) ຄໍາ​ແນະ​ນໍາ​ gcc to do
ບໍ່​ມີ​ຫຍັງ​ເລີຍ.

-c ລວບລວມຫຼືປະກອບໄຟລ໌ຕົ້ນສະບັບ, ແຕ່ບໍ່ເຊື່ອມຕໍ່. ຂັ້ນຕອນການເຊື່ອມໂຍງແມ່ນງ່າຍດາຍ
ບໍ່ໄດ້ເຮັດ. ຜົນໄດ້ຮັບທີ່ສຸດແມ່ນຢູ່ໃນຮູບແບບຂອງໄຟລ໌ວັດຖຸສໍາລັບແຕ່ລະໄຟລ໌ແຫຼ່ງ.

ໂດຍຄ່າເລີ່ມຕົ້ນ, ຊື່ໄຟລ໌ວັດຖຸສໍາລັບໄຟລ໌ແຫຼ່ງແມ່ນເຮັດໂດຍການປ່ຽນແທນຄໍາຕໍ່ທ້າຍ .c,
.i, .s, ແລະອື່ນໆ, ກັບ .o.

ໄຟລ໌ປ້ອນຂໍ້ມູນທີ່ບໍ່ຮູ້ຈັກ, ບໍ່ຮຽກຮ້ອງໃຫ້ມີການລວບລວມຂໍ້ມູນ ຫຼືການປະກອບ, ແມ່ນຖືກລະເລີຍ.

-S ຢຸດເຊົາຫຼັງຈາກຂັ້ນຕອນຂອງການລວບລວມທີ່ເຫມາະສົມ; ຢ່າ​ເຕົ້າ​ໂຮມ. ຜົນຜະລິດແມ່ນຢູ່ໃນ
ຮູບ​ແບບ​ຂອງ​ໄຟລ​໌​ລະ​ຫັດ assembler ສໍາ​ລັບ​ແຕ່​ລະ​ໄຟລ​໌​ປ້ອນ​ຂໍ້​ມູນ​ທີ່​ບໍ່​ແມ່ນ​ສະ​ມາ​ຊິກ​ໄດ້​ລະ​ບຸ​ໄວ້​.

ໂດຍຄ່າເລີ່ມຕົ້ນ, ຊື່ໄຟລ໌ assembler ສໍາລັບໄຟລ໌ແຫຼ່ງແມ່ນເຮັດໂດຍການປ່ຽນແທນຄໍາຕໍ່ທ້າຍ
.c, .i, ແລະອື່ນໆ, ກັບ .s.

ການປ້ອນຂໍ້ມູນໄຟລ໌ທີ່ບໍ່ຕ້ອງການການລວບລວມແມ່ນຖືກລະເລີຍ.

-E ຢຸດຫຼັງຈາກຂັ້ນຕອນການປຸງແຕ່ງກ່ອນ; ບໍ່ດໍາເນີນການ compiler ທີ່ເຫມາະສົມ. ຜົນຜະລິດແມ່ນຢູ່ໃນ
ຮູບແບບຂອງລະຫັດແຫຼ່ງ preprocessed, ເຊິ່ງຖືກສົ່ງໄປຫາຜົນໄດ້ຮັບມາດຕະຖານ.

ການປ້ອນຂໍ້ມູນໄຟລ໌ທີ່ບໍ່ຕ້ອງການການປະມວນຜົນກ່ອນຈະຖືກລະເລີຍ.

-o ເອກະສານ
ວາງຜົນຜະລິດໃນໄຟລ໌ ເອກະສານ. ນີ້ໃຊ້ກັບຜົນຜະລິດປະເພດໃດກໍ່ຕາມ,
ບໍ່​ວ່າ​ຈະ​ເປັນ​ໄຟລ​໌​ປະ​ຕິ​ບັດ​ໄດ້​, ໄຟລ​໌​ວັດ​ຖຸ​, ໄຟລ​໌ assembler ຫຼື preprocessed C
ລະຫັດ.

If -o ບໍ່ໄດ້ລະບຸໄວ້, ຄ່າເລີ່ມຕົ້ນແມ່ນການໃສ່ໄຟລ໌ທີ່ສາມາດປະຕິບັດໄດ້ , ວັດຖຸ
file for source.suffix in ແຫຼ່ງ.o, ເອກະສານປະກອບຂອງຕົນໃນ source.s, ເປັນ precompiled
ໄຟລ໌ຫົວໃນ source.suffix.gch, ແລະແຫຼ່ງ C preprocessed ທັງໝົດໃນຜົນຜະລິດມາດຕະຖານ.

-v ພິມ (ຕາມຄວາມຜິດພາດມາດຕະຖານອອກ) ຄໍາສັ່ງປະຕິບັດເພື່ອດໍາເນີນການຂັ້ນຕອນຂອງ
ການລວບລວມ. ນອກຈາກນັ້ນ, ພິມຈໍານວນສະບັບຂອງໂປລແກລມໄດເວີ compiler ແລະຂອງ
preprocessor ແລະ compiler ເຫມາະສົມ.

-###
ຄື -v ຍົກ​ເວັ້ນ​ຄໍາ​ສັ່ງ​ແມ່ນ​ບໍ່​ໄດ້​ປະ​ຕິ​ບັດ​ແລະ​ການ​ໂຕ້​ຖຽງ​ແມ່ນ​ຍົກ​ເວັ້ນ​ແຕ່​ພວກ​ເຂົາ​ເຈົ້າ​
ມີພຽງແຕ່ຕົວອັກສອນທີ່ເປັນຕົວເລກ ຫຼື "./-_". ນີ້ແມ່ນເປັນປະໂຫຍດສໍາລັບ shell scripts
ຈັບບັນທັດຄໍາສັ່ງທີ່ສ້າງໂດຍຄົນຂັບ.

- ປຸບ
ໃຊ້ທໍ່ຫຼາຍກວ່າໄຟລ໌ຊົ່ວຄາວສໍາລັບການສື່ສານລະຫວ່າງຂັ້ນຕອນຕ່າງໆຂອງ
ການລວບລວມ. ອັນນີ້ບໍ່ສາມາດເຮັດວຽກໃນບາງລະບົບທີ່ຕົວປະກອບບໍ່ສາມາດອ່ານໄດ້
ຈາກທໍ່; ແຕ່ຜູ້ປະກອບ GNU ບໍ່ມີບັນຫາ.

- ຊ່ວຍ
ພິມ (ຕາມມາດຕະຖານຜົນຜະລິດ) ລາຍລະອຽດຂອງຕົວເລືອກແຖວຄໍາສັ່ງເຂົ້າໃຈໂດຍ
gccທີ່ຢູ່ ຖ້າຫາກວ່າ -v ທາງ​ເລືອກ​ຍັງ​ໄດ້​ລະ​ບຸ​ໄວ້​ຫຼັງ​ຈາກ​ນັ້ນ​ - ຊ່ວຍ ຍັງ​ໄດ້​ຖືກ​ສົ່ງ​ຕໍ່​ກັບ​ຕ່າງໆ​
ຂະ​ບວນ​ການ​ຮຽກ​ຮ້ອງ​ໂດຍ​ gcc, ເພື່ອໃຫ້ພວກເຂົາສາມາດສະແດງຕົວເລືອກເສັ້ນຄໍາສັ່ງຂອງພວກເຂົາ
ຍອມ​ຮັບ. ຖ້າ -Wextra ທາງ​ເລືອກ​ຍັງ​ໄດ້​ຮັບ​ການ​ລະ​ບຸ​ໄວ້ (ກ່ອນ​ທີ່​ຈະ​ - ຊ່ວຍ ທາງ​ເລືອກ​)
ຫຼັງຈາກນັ້ນ, ທາງເລືອກແຖວຄໍາສັ່ງທີ່ບໍ່ມີເອກະສານທີ່ກ່ຽວຂ້ອງກັບພວກມັນແມ່ນຄືກັນ
ສະແດງ.

--ເປົ້າ​ຫມາຍ​ການ​ຊ່ວຍ​ເຫຼືອ​
ພິມ (ຕາມມາດຕະຖານຜົນຜະລິດ) ລາຍລະອຽດຂອງຕົວເລືອກເສັ້ນຄໍາສັ່ງສະເພາະເປົ້າຫມາຍ
ສໍາລັບແຕ່ລະເຄື່ອງມື. ສຳລັບບາງເປົ້າໝາຍ ຂໍ້ມູນສະເພາະເປົ້າໝາຍພິເສດອາດເປັນ
ພິມອອກ.

--help={ລະດັບ|[^]ມີຄຸນສົມບັດ}[...]
ພິມ (ຕາມມາດຕະຖານຜົນຜະລິດ) ລາຍລະອຽດຂອງຕົວເລືອກແຖວຄໍາສັ່ງເຂົ້າໃຈໂດຍ
compiler ທີ່ເຫມາະກັບຫ້ອງຮຽນທີ່ລະບຸໄວ້ທັງຫມົດແລະຄຸນສົມບັດ. ເຫຼົ່ານີ້ແມ່ນ
ຫ້ອງ​ຮຽນ​ສະ​ຫນັບ​ສະ​ຫນູນ​:

ເຄື່ອງມືເພີ່ມປະສິດທິພາບ
ສະແດງຕົວເລືອກການເພີ່ມປະສິດທິພາບທັງໝົດທີ່ຮອງຮັບໂດຍ compiler.

ຄໍາເຕືອນ
ສະແດງຕົວເລືອກທັງໝົດທີ່ຄວບຄຸມຂໍ້ຄວາມເຕືອນທີ່ຜະລິດໂດຍຄອມພີວເຕີ.

ເປົ້າ​ຫມາຍ
ສະແດງຕົວເລືອກສະເພາະເປົ້າໝາຍ. ບໍ່ເຫມືອນກັບ --ເປົ້າ​ຫມາຍ​ການ​ຊ່ວຍ​ເຫຼືອ​ ທາງເລືອກ, ຢ່າງໃດກໍຕາມ, ເປົ້າຫມາຍ
ຕົວເລືອກສະເພາະຂອງຕົວເຊື່ອມຕໍ່ ແລະຕົວປະກອບບໍ່ໄດ້ສະແດງ. ນີ້​ແມ່ນ​ຍ້ອນ​ວ່າ
ເຄື່ອງມືເຫຼົ່ານັ້ນບໍ່ຮອງຮັບການຂະຫຍາຍ --help= syntax

params
ສະແດງຄ່າທີ່ຮັບຮູ້ໂດຍ --param ທາງເລືອກ.

ພາສາ
ສະແດງຕົວເລືອກທີ່ຮອງຮັບ ພາສາ, ບ່ອນທີ່ ພາສາ ແມ່ນ​ຊື່​ຂອງ​ຫນຶ່ງ​ໃນ​
ພາສາທີ່ຮອງຮັບໃນ GCC ລຸ້ນນີ້.

ທົ່ວໄປ
ສະ​ແດງ​ຕົວ​ເລືອກ​ທີ່​ມີ​ທົ່ວ​ໄປ​ໃນ​ທຸກ​ພາ​ສາ​.

ນີ້ແມ່ນເງື່ອນໄຂທີ່ຮອງຮັບ:

ບໍ່ມີຫຼັກຖານຢັ້ງຢືນ
ສະແດງພຽງແຕ່ທາງເລືອກເຫຼົ່ານັ້ນທີ່ບໍ່ມີເອກະສານ.

ເຂົ້າຮ່ວມ
ຕົວເລືອກສະແດງການໂຕ້ແຍ້ງທີ່ປະກົດຂຶ້ນຫຼັງຈາກສັນຍານເທົ່າທຽມກັນໃນອັນດຽວກັນ
ຂໍ້ຄວາມຕໍ່ເນື່ອງ, ເຊັ່ນ: --help=ເປົ້າໝາຍ.

ແຍກຕ່າງຫາກ
ຕົວເລືອກສະແດງການໂຕ້ຖຽງທີ່ປາກົດເປັນຄໍາແຍກຕ່າງຫາກດັ່ງຕໍ່ໄປນີ້
ທາງເລືອກຕົ້ນສະບັບ, ເຊັ່ນ: -o output-file.

ດັ່ງນັ້ນ, ສໍາລັບການຍົກຕົວຢ່າງເພື່ອສະແດງທຸກສະຫຼັບເປົ້າຫມາຍທີ່ບໍ່ມີເອກະສານສະຫນັບສະຫນຸນໂດຍ
compiler ໄດ້, ໃຊ້:

--help=ເປົ້າໝາຍ,ບໍ່ມີເອກະສານ

ຄວາມ​ຮູ້​ສຶກ​ຂອງ​ຄຸນ​ສົມ​ບັດ​ສາ​ມາດ inverted ໂດຍ​ການ​ນໍາ​ຫນ້າ​ມັນ​ກັບ​ ^ ລັກສະນະ, ດັ່ງນັ້ນ
ຍົກ​ຕົວ​ຢ່າງ​ທີ່​ຈະ​ສະ​ແດງ​ທາງ​ເລືອກ​ການ​ເຕືອນ​ໄພ​ສອງ​ທັງ​ຫມົດ (ເຊັ່ນ​, ຫນຶ່ງ​ທີ່​ມີ​ທັງ​ການ​ເປີດ​ຫຼື​ປິດ​
ແລະບໍ່ເອົາການໂຕ້ຖຽງ) ທີ່ມີຄໍາອະທິບາຍ, ໃຊ້:

--help=warnings,^ເຂົ້າຮ່ວມ,^ບໍ່ມີເອກະສານ

ການໂຕ້ຖຽງກັບ --help= ບໍ່ຄວນປະກອບດ້ວຍເງື່ອນໄຂທີ່ປີ້ນກັບກັນເທົ່ານັ້ນ.

ການລວມເອົາຫ້ອງຮຽນຫຼາຍແມ່ນເປັນໄປໄດ້, ເຖິງແມ່ນວ່ານີ້ປົກກະຕິແລ້ວຈໍາກັດຜົນຜະລິດດັ່ງນັ້ນ
ຫຼາຍທີ່ບໍ່ມີຫຍັງທີ່ຈະສະແດງ. ກໍລະນີຫນຶ່ງທີ່ມັນເຮັດວຽກ, ຢ່າງໃດກໍຕາມ, ແມ່ນເວລາ
ຫນຶ່ງໃນຫ້ອງຮຽນແມ່ນ ເປົ້າ​ຫມາຍ. ຕົວຢ່າງ, ເພື່ອສະແດງທຸກເປົ້າຫມາຍສະເພາະ
ທາງເລືອກໃນການເພີ່ມປະສິດທິພາບ, ໃຊ້:

--help=ເປົ້າໝາຍ,ຕົວເພີ່ມປະສິດທິພາບ

ໄດ້ --help= ທາງເລືອກສາມາດຖືກຊ້ໍາໃນເສັ້ນຄໍາສັ່ງ. ແຕ່ລະການສະແດງຜົນການນໍາໃຊ້ຢ່າງຕໍ່ເນື່ອງ
ຫ້ອງຮຽນທີ່ຕ້ອງການຂອງມັນ, ຂ້າມທາງເລືອກທີ່ໄດ້ຖືກສະແດງແລ້ວ.

ຖ້າ -Q ທາງເລືອກຈະປາກົດຢູ່ໃນເສັ້ນຄໍາສັ່ງກ່ອນ --help= ທາງ​ເລືອກ​, ຫຼັງ​ຈາກ​ນັ້ນ​
ຂໍ້ຄວາມອະທິບາຍສະແດງໂດຍ --help= ມີການປ່ຽນແປງ. ແທນທີ່ຈະອະທິບາຍສິ່ງທີ່ສະແດງ
ທາງ​ເລືອກ​, ການ​ຊີ້​ບອກ​ແມ່ນ​ໄດ້​ຮັບ​ວ່າ​ເປັນ​ທາງ​ເລືອກ​ທີ່​ໄດ້​ຖືກ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​, ປິດ​ຫຼື​ຕັ້ງ​
ກັບຄ່າສະເພາະ (ສົມມຸດວ່າ compiler ຮູ້ນີ້ຢູ່ໃນຈຸດທີ່
--help= ທາງ​ເລືອກ​ແມ່ນ​ການ​ນໍາ​ໃຊ້​)​.

ນີ້ແມ່ນຕົວຢ່າງທີ່ຖືກຕັດອອກຈາກພອດ ARM ຂອງ gcc:

% gcc -Q -mabi=2 --help=target -c
ຕົວເລືອກຕໍ່ໄປນີ້ແມ່ນເປົ້າໝາຍສະເພາະ:
-mabi=2
-mabort-on-noreturn [ຄົນພິການ]
- ແຜນທີ່ [ປິດການໃຊ້ງານ]

ຜົນຜະລິດແມ່ນມີຄວາມອ່ອນໄຫວຕໍ່ກັບຜົນກະທົບຂອງທາງເລືອກແຖວຄໍາສັ່ງທີ່ຜ່ານມາ, ດັ່ງນັ້ນສໍາລັບ
ຕົວຢ່າງ, ມັນເປັນໄປໄດ້ທີ່ຈະຊອກຫາການເພີ່ມປະສິດທິພາບໃດທີ່ຖືກເປີດໃຊ້ຢູ່ -O2 ໂດຍ​ການ​ນໍາ​ໃຊ້​:

-Q -O2 --help=optimizers

ອີກທາງເລືອກ, ທ່ານສາມາດຄົ້ນພົບວ່າການເພີ່ມປະສິດທິພາບ binary ໃດຖືກເປີດໃຊ້ໂດຍ -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 ເປີດໃຊ້ງານ

-no-canonical-prefixes
ບໍ່ຂະຫຍາຍການເຊື່ອມຕໍ່ສັນຍາລັກໃດໆ, ແກ້ໄຂການອ້າງອີງເຖິງ /../ or /./, ຫຼືເຮັດໃຫ້ເສັ້ນທາງ
ຢ່າງແທ້ຈິງເມື່ອສ້າງຄໍານໍາຫນ້າທີ່ກ່ຽວຂ້ອງ.

- ການປ່ຽນແປງ
ສະແດງໝາຍເລກເວີຊັນ ແລະລິຂະສິດຂອງ GCC ທີ່ຖືກຮຽກຮ້ອງ.

- ຫໍ່
ເອີ້ນຄໍາສັ່ງຍ່ອຍທັງຫມົດພາຍໃຕ້ໂຄງການ wrapper. ຊື່ຂອງໂຄງການ wrapper ແລະ
ຕົວກໍານົດການຂອງມັນຖືກສົ່ງຜ່ານເປັນລາຍການທີ່ແຍກດ້ວຍເຄື່ອງໝາຍຈຸດ.

gcc -c tc -wrapper gdb,--args

ນີ້ຮຽກຮ້ອງໃຫ້ໂຄງການຍ່ອຍທັງຫມົດຂອງ gcc ພາຍໃຕ້ການ gdb --args, ດັ່ງນັ້ນການຮຽກຮ້ອງຂອງ cc1 is
gdb --args cc1 ....

-fplugin=ຊື່ດັ່ງນັ້ນ,
ໂຫລດລະຫັດ plugin ໃນໄຟລ໌ ຊື່.so, ສົມມຸດວ່າເປັນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເພື່ອ dlopen'd ໂດຍ
compiler ໄດ້. ຊື່ພື້ນຖານຂອງໄຟລ໌ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເພື່ອລະບຸຕົວປລັກອິນ
ສໍາລັບຈຸດປະສົງຂອງການວິເຄາະການໂຕ້ຖຽງ (ເບິ່ງ -fplugin-arg-ຊື່-ທີ່ສໍາຄັນ=ມູນຄ່າ ຂ້າງລຸ່ມນີ້). ແຕ່ລະ
plugin ຄວນກໍານົດຫນ້າທີ່ callback ທີ່ລະບຸໄວ້ໃນ Plugins API.

-fplugin-arg-ຊື່-ທີ່ສໍາຄັນ=ມູນຄ່າ
ກໍານົດການໂຕ້ຖຽງທີ່ເອີ້ນວ່າ ທີ່ສໍາຄັນ ດ້ວຍມູນຄ່າ ມູນຄ່າ ສໍາລັບ plugin ເອີ້ນວ່າ ຊື່.

-fdump-ada-spec[-ບາງ]
ສໍາລັບແຫຼ່ງ C ແລະ C ++ ແລະປະກອບມີໄຟລ໌, ສ້າງ specs Ada ທີ່ສອດຄ້ອງກັນ.

-fada-spec-parent=ຫນ່ວຍບໍລິການ
ຮ່ວມກັນກັບ -fdump-ada-spec[-ບາງ] ຂ້າງເທິງ, ສ້າງ Ada specs ເປັນຫນ່ວຍງານລູກຂອງ
ພໍ່ແມ່ ຫນ່ວຍບໍລິການ.

-fdump-go-spec=ເອກະສານ
ສໍາລັບການປ້ອນໄຟລ໌ໃນພາສາໃດກໍ່ຕາມ, ສ້າງການປະກາດ Go ທີ່ສອດຄ້ອງກັນໃນ ເອກະສານ. ນີ້
ສ້າງການປະກາດ Go "const", "type", "var", ແລະ "func" ເຊິ່ງອາດຈະເປັນວິທີທີ່ເປັນປະໂຫຍດ.
ເພື່ອເລີ່ມຕົ້ນການຂຽນສ່ວນຕິດຕໍ່ Go ກັບລະຫັດທີ່ຂຽນເປັນພາສາອື່ນ.

@ເອກະສານ
ອ່ານຕົວເລືອກແຖວຄໍາສັ່ງຈາກ ເອກະສານ. ທາງ​ເລືອກ​ທີ່​ອ່ານ​ໄດ້​ຖືກ​ໃສ່​ແທນ​ທີ່​ຂອງ​
ຕົ້ນສະບັບ @ເອກະສານ ທາງເລືອກ. ຖ້າ ເອກະສານ ບໍ່ມີ, ຫຼືບໍ່ສາມາດອ່ານໄດ້, ຫຼັງຈາກນັ້ນທາງເລືອກ
ຈະ​ໄດ້​ຮັບ​ການ​ປິ່ນ​ປົວ​ທີ່​ຮູ້​ຫນັງ​ສື​, ແລະ​ບໍ່​ໄດ້​ຮັບ​ການ​ໂຍກ​ຍ້າຍ​ອອກ​.

ຕົວເລືອກຕ່າງໆໃນ ເອກະສານ ຖືກແຍກອອກໂດຍຊ່ອງຫວ່າງ. ອາດມີຕົວອັກສອນຊ່ອງຫວ່າງໃສ່ນຳ
ໃນທາງເລືອກໂດຍການອ້ອມຮອບທາງເລືອກທັງຫມົດໃນວົງຢືມດຽວຫຼືຄູ່. ໃດ
ຕົວອັກສອນ (ລວມທັງ backslash) ອາດຈະຖືກລວມເຂົ້າໂດຍການນໍາຫນ້າຕົວອັກສອນທີ່ຈະເປັນ
ລວມໄປດ້ວຍ backslash. ໄດ້ ເອກະສານ ຕົວຂອງມັນເອງອາດຈະມີ @ ເພີ່ມເຕີມເອກະສານ ທາງເລືອກ; ໃດ
ທາງເລືອກດັ່ງກ່າວຈະຖືກປະມວນຜົນແບບ recursively.

ການລວບລວມ C ++ ໂຄງການ
ໄຟລ໌ແຫຼ່ງ C++ ຕາມທຳມະດາໃຊ້ໜຶ່ງໃນຄຳຕໍ່ທ້າຍ .C, cc, .cpp, .CPP, .c++, .cp, ຫຼື
.cxx; ໄຟລ໌ສ່ວນຫົວ C++ ມັກຈະໃຊ້ .ຊມ, .hp, .H, ຫຼື (ສໍາລັບລະຫັດແມ່ແບບທີ່ແບ່ງປັນ) .tcc; ແລະ
ໄຟລ໌ C++ preprocessed ໃຊ້ຄໍາຕໍ່ທ້າຍ .ii. GCC ຮັບຮູ້ໄຟລ໌ທີ່ມີຊື່ເຫຼົ່ານີ້ ແລະ
ລວບລວມພວກມັນເປັນໂປແກມ C ++ ເຖິງແມ່ນວ່າທ່ານຈະໂທຫາ compiler ແບບດຽວກັນກັບການລວບລວມ
ໂປຣແກຣມ C (ປົກກະຕິແລ້ວມີຊື່ gcc).

ຢ່າງໃດກໍຕາມ, ການນໍາໃຊ້ gcc ບໍ່ໄດ້ເພີ່ມຫ້ອງສະໝຸດ C++. g ++ ແມ່ນໂຄງການທີ່ເອີ້ນວ່າ GCC ແລະ
ອັດຕະໂນມັດກໍານົດການເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດ C ++. ມັນປິ່ນປົວ .c, .h ແລະ .i ໄຟລ໌ເປັນ
ໄຟລ໌ແຫຼ່ງ C++ ແທນໄຟລ໌ແຫຼ່ງ C ເວັ້ນເສຍແຕ່ -x ຖືກນໍາໃຊ້. ໂຄງ​ການ​ນີ້​ຍັງ​ເປັນ​ປະ​ໂຫຍດ​
ໃນເວລາທີ່ precompiling ໄຟລ໌ຫົວ C ກັບ a .h ສ່ວນຂະຫຍາຍເພື່ອໃຊ້ໃນການລວບລວມຂໍ້ມູນ C++. ສຸດ
ຫຼາຍ​ລະ​ບົບ​, g ++ ຍັງຖືກຕິດຕັ້ງດ້ວຍຊື່ c ++.

ເມື່ອທ່ານລວບລວມໂປແກຼມ C ++, ທ່ານອາດຈະລະບຸຕົວເລືອກເສັ້ນຄໍາສັ່ງດຽວກັນຫຼາຍອັນ
ທ່ານໃຊ້ສໍາລັບການລວບລວມບັນດາໂຄງການໃນພາສາໃດກໍ່ຕາມ; ຫຼືຕົວເລືອກເສັ້ນຄໍາສັ່ງທີ່ມີຄວາມຫມາຍສໍາລັບ C
ແລະພາສາທີ່ກ່ຽວຂ້ອງ; ຫຼືທາງເລືອກທີ່ມີຄວາມຫມາຍສໍາລັບໂຄງການ C ++ ເທົ່ານັ້ນ.

ທາງເລືອກໃນການ ການຄວບຄຸມ C ພາສາ
ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມພາສາຂອງ C (ຫຼືພາສາທີ່ມາຈາກ C, ເຊັ່ນ C++,
Objective-C ແລະ Objective-C++) ທີ່ compiler ຍອມຮັບ:

-ansi
ໃນໂຫມດ C, ນີ້ແມ່ນເທົ່າກັບ -std=c90. ໃນໂຫມດ C ++, ມັນທຽບເທົ່າກັບ
-std=c++98.

ນີ້ຈະເປັນການປິດຄຸນສົມບັດບາງຢ່າງຂອງ GCC ທີ່ບໍ່ເຂົ້າກັນໄດ້ກັບ ISO C90 (ເມື່ອ
ການລວບລວມລະຫັດ C), ຫຼືມາດຕະຖານ C ++ (ເມື່ອລວບລວມລະຫັດ C ++), ເຊັ່ນ "asm" ແລະ
"typeof" ຄໍາສໍາຄັນ, ແລະ macros ທີ່ກໍານົດໄວ້ລ່ວງຫນ້າເຊັ່ນ "unix" ແລະ "vax" ທີ່ກໍານົດ.
ປະເພດຂອງລະບົບທີ່ທ່ານກໍາລັງໃຊ້. ມັນຍັງເຮັດໃຫ້ ISO ທີ່ບໍ່ຕ້ອງການ ແລະບໍ່ຄ່ອຍໄດ້ໃຊ້
ຄຸນ​ນະ​ສົມ​ບັດ trigraph​. ສໍາລັບ C compiler, ມັນປິດການຮັບຮູ້ຂອງ C++ style //
ຄໍາຄິດຄໍາເຫັນເຊັ່ນດຽວກັນກັບຄໍາສໍາຄັນ "inline".

ຄຳສັບສຳຮອງ "__asm__", "__extension__", "__inline__" ແລະ "__typeof__"
ສືບຕໍ່ເຮັດວຽກເຖິງແມ່ນວ່າ -ansi. ທ່ານຈະບໍ່ຕ້ອງການທີ່ຈະນໍາໃຊ້ພວກມັນຢູ່ໃນໂຄງການ ISO C,
ແນ່ນອນ, ແຕ່ມັນເປັນປະໂຫຍດທີ່ຈະເອົາພວກມັນເຂົ້າໄປໃນໄຟລ໌ header ທີ່ອາດຈະຖືກລວມເຂົ້າໃນ
ການລວບລວມເຮັດດ້ວຍ -ansi. ສະຫຼັບມາໂຄຣທີ່ກຳນົດໄວ້ລ່ວງໜ້າເຊັ່ນ "__unix__" ແລະ
"__vax__" ຍັງມີຢູ່, ມີຫຼືບໍ່ມີ -ansi.

ໄດ້ -ansi ທາງເລືອກບໍ່ໄດ້ເຮັດໃຫ້ໂຄງການທີ່ບໍ່ແມ່ນ ISO ຖືກປະຕິເສດໂດຍບໍ່ເສຍຄ່າ. ສໍາລັບ
ວ່າ, -Wpedantic ແມ່ນຕ້ອງການນອກເຫນືອໄປຈາກ -ansi.

ມະຫາພາກ "__STRICT_ANSI__" ຖືກກໍານົດໄວ້ລ່ວງໜ້າເມື່ອ -ansi ທາງເລືອກແມ່ນຖືກນໍາໃຊ້. ບາງສ່ວນຫົວ
ໄຟ​ລ໌​ອາດ​ຈະ​ສັງ​ເກດ​ເຫັນ​ມະ​ຫາ​ພາກ​ນີ້​ແລະ​ລະ​ເວັ້ນ​ຈາກ​ການ​ປະ​ກາດ​ບາງ​ຫນ້າ​ທີ່​ຫຼື​ການ​ກໍາ​ນົດ​
ມະຫາພາກສະເພາະທີ່ມາດຕະຖານ ISO ບໍ່ໄດ້ຮຽກຮ້ອງ; ນີ້ແມ່ນເພື່ອຫຼີກເວັ້ນການແຊກແຊງ
ກັບບັນດາໂຄງການທີ່ອາດຈະໃຊ້ຊື່ເຫຼົ່ານີ້ສໍາລັບສິ່ງອື່ນໆ.

ຟັງຊັນທີ່ປົກກະຕິສ້າງຂຶ້ນໃນແຕ່ບໍ່ມີ semantics ກໍານົດໂດຍ ISO C (ເຊັ່ນ
ເປັນ "alloca" ແລະ "ffs") ບໍ່ແມ່ນຫນ້າທີ່ສ້າງໃນເມື່ອ -ansi ຖືກນໍາໃຊ້.

-std=
ກໍານົດມາດຕະຖານພາສາ. ຕົວເລືອກນີ້ໄດ້ຮັບການສະຫນັບສະຫນູນພຽງແຕ່ໃນເວລາທີ່
ລວບລວມ C ຫຼື C++.

compiler ສາມາດຍອມຮັບມາດຕະຖານພື້ນຖານຈໍານວນຫນຶ່ງ, ເຊັ່ນ: c90 or c++98, ແລະພາສາ GNU
ຂອງມາດຕະຖານເຫຼົ່ານັ້ນ, ເຊັ່ນ: gnu90 or gnu++98. ເມື່ອມາດຕະຖານພື້ນຖານຖືກລະບຸ, the
compiler ຍອມຮັບທຸກໂຄງການປະຕິບັດຕາມມາດຕະຖານນັ້ນບວກກັບການນໍາໃຊ້ສ່ວນຂະຫຍາຍ GNU
ວ່າບໍ່ຂັດມັນ. ຍົກ​ຕົວ​ຢ່າງ, -std=c90 ປິດຄຸນສົມບັດບາງຢ່າງຂອງ GCC
ທີ່ບໍ່ເຂົ້າກັນໄດ້ກັບ ISO C90, ເຊັ່ນວ່າ "asm" ແລະ "typeof" ຄໍາສໍາຄັນ, ແຕ່ບໍ່ແມ່ນ.
ສ່ວນຂະຫຍາຍ GNU ອື່ນໆທີ່ບໍ່ມີຄວາມຫມາຍໃນ ISO C90, ເຊັ່ນ: ການລະເວັ້ນ
ຄໍາສັບກາງຂອງ "?:" ສະແດງອອກ. ໃນທາງກົງກັນຂ້າມ, ເມື່ອພາສາ GNU ຂອງມາດຕະຖານ
ໄດ້ຖືກລະບຸໄວ້, ຄຸນນະສົມບັດທັງຫມົດທີ່ສະຫນັບສະຫນູນໂດຍ compiler ໄດ້ຖືກເປີດໃຊ້, ເຖິງແມ່ນວ່າໃນເວລາທີ່
ລັກສະນະການປ່ຽນແປງຄວາມຫມາຍຂອງມາດຕະຖານພື້ນຖານ. ດັ່ງນັ້ນ, ບາງອັນທີ່ເຄັ່ງຄັດ
ໂຄງການອາດຈະຖືກປະຕິເສດ. ມາດຕະຖານໂດຍສະເພາະຖືກນໍາໃຊ້ໂດຍ -Wpedantic ການລະບຸ
ຄຸນສົມບັດໃດເປັນສ່ວນຂະຫຍາຍ GNU ທີ່ໃຫ້ມາດຕະຖານສະບັບນັ້ນ. ຍົກ​ຕົວ​ຢ່າງ
-std=gnu90 -Wpedantic ເຕືອນກ່ຽວກັບຮູບແບບ C++ // ຄໍາເຫັນ, ໃນຂະນະທີ່ -std=gnu99 -Wpedantic
ບໍ່.

ຄ່າສໍາລັບທາງເລືອກນີ້ຕ້ອງໄດ້ຮັບການສະຫນອງໃຫ້; ຄ່າທີ່ເປັນໄປໄດ້ແມ່ນ

c90
c89
iso9899:1990
ສະຫນັບສະຫນູນທຸກໂຄງການ ISO C90 (ບາງສ່ວນຂະຫຍາຍ GNU ທີ່ຂັດກັບ ISO C90
ຖືກປິດ). ຄື​ກັນ​ກັບ -ansi ສໍາລັບລະຫັດ C.

iso9899:199409
ISO C90 ຕາມ​ການ​ແກ້​ໄຂ​ໃນ​ການ​ແກ້​ໄຂ 1.

c99
c9x
iso9899:1999
iso9899:199x
ISO C99. ມາດ​ຕະ​ຖານ​ນີ້​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ຢ່າງ​ຫຼວງ​ຫຼາຍ​, ແມງ​ໄມ້ modulo ແລະ​
ບັນຫາຈຸດລອຍ (ສ່ວນໃຫຍ່ແມ່ນແຕ່ບໍ່ກ່ຽວຂ້ອງກັບຄຸນສົມບັດທາງເລືອກ C99
ຈາກເອກະສານຊ້ອນທ້າຍ F ແລະ G). ເບິ່ງhttp://gcc.gnu.org/c99status.html> ສໍາລັບການເພີ່ມເຕີມ
ຂໍ້ມູນ. ຊື່ c9x ແລະ iso9899:199x ຖືກຄັດຄ້ານ.

c11
c1x
iso9899:2011
ISO C11, ການແກ້ໄຂມາດຕະຖານ ISO C ປີ 2011. ມາດຕະຖານນີ້ແມ່ນຢ່າງຫຼວງຫຼາຍ
ສະ​ຫນັບ​ສະ​ຫນູນ​ຢ່າງ​ສົມ​ບູນ​, ແມງ​ໄມ້ modulo​, ບັນ​ຫາ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້ (ສ່ວນ​ໃຫຍ່​ແມ່ນ​ແຕ່​ບໍ່​ແມ່ນ​ທັງ​ຫມົດ​
ກ່ຽວຂ້ອງກັບລັກສະນະທາງເລືອກ C11 ຈາກເອກະສານຊ້ອນທ້າຍ F ແລະ G) ແລະເອກະສານຄັດຕິດທາງເລືອກ K
(Bounds-checking interfaces) ແລະ L (Analyzability). ຊື່ c1x ຖືກຄັດຄ້ານ.

gnu90
gnu89
ພາສາ GNU ຂອງ ISO C90 (ລວມທັງບາງລັກສະນະ C99).

gnu99
gnu9x
ພາສາ GNU ຂອງ ISO C99. ຊື່ gnu9x ຖືກຄັດຄ້ານ.

gnu11
gnu1x
ພາສາ GNU ຂອງ ISO C11. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງລະຫັດ C. ຊື່ gnu1x is
ເຊົາໃຊ້ແລ້ວ.

c++98
c++03
ມາດຕະຖານ ISO C++ ປີ 1998 ບວກກັບ corrigendum ດ້ານວິຊາການ 2003 ແລະ ເພີ່ມເຕີມບາງອັນ
ບົດ​ລາຍ​ງານ​ຂໍ້​ບົກ​ຜ່ອງ​. ຄື​ກັນ​ກັບ -ansi ສໍາລັບລະຫັດ C++.

gnu++98
gnu++03
ພາສາ GNU ຂອງ -std=c++98. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງລະຫັດ C++.

c++11
c++0x
ມາດຕະຖານ ISO C++ ປີ 2011 ບວກກັບການແກ້ໄຂ. ຊື່ c++0x ຖືກຄັດຄ້ານ.

gnu++11
gnu++0x
ພາສາ GNU ຂອງ -std=c++11ທີ່ຢູ່ ຊື່ gnu++0x ຖືກຄັດຄ້ານ.

c++14
c++1y
ມາດຕະຖານ ISO C++ ປີ 2014 ບວກກັບການແກ້ໄຂ. ຊື່ c++1y ຖືກຄັດຄ້ານ.

gnu++14
gnu++1y
ພາສາ GNU ຂອງ -std=c++14ທີ່ຢູ່ ຊື່ gnu++1y ຖືກຄັດຄ້ານ.

c++1z
ການປັບປຸງມາດຕະຖານ ISO C++ ຕໍ່ໄປ, ວາງແຜນໄວ້ຢ່າງບໍ່ຢຸດຢັ້ງສຳລັບປີ 2017. ສະໜັບສະໜູນ
ແມ່ນ​ການ​ທົດ​ລອງ​ສູງ, ແລະ​ເກືອບ​ແນ່​ນອນ​ວ່າ​ຈະ​ມີ​ການ​ປ່ຽນ​ແປງ​ໃນ​ວິ​ທີ​ທີ່​ບໍ່​ເຂົ້າ​ກັນ​ໄດ້​ໃນ
ການປ່ອຍໃນອະນາຄົດ.

gnu++1z
ພາສາ GNU ຂອງ -std=c++1z. ສະຫນັບສະຫນູນແມ່ນການທົດລອງສູງ, ແລະເກືອບຈະ
ແນ່ນອນວ່າມີການປ່ຽນແປງໃນວິທີການທີ່ບໍ່ເຂົ້າກັນໄດ້ໃນການປ່ອຍໃນອະນາຄົດ.

-fgnu89-inline
ທາງເລືອກ -fgnu89-inline ບອກ GCC ໃຫ້ໃຊ້ຄໍາສັບ GNU ແບບດັ້ງເດີມສໍາລັບ "inline"
ເຮັດວຽກໃນເວລາທີ່ຢູ່ໃນໂຫມດ C99.

ການໃຊ້ຕົວເລືອກນີ້ແມ່ນເທົ່າກັບການເພີ່ມຄຸນສົມບັດຂອງຟັງຊັນ "gnu_inline".
ກັບຟັງຊັນ inline ທັງຫມົດ.

ທາງເລືອກ -fno-gnu89-inline ບອກ GCC ຢ່າງຈະແຈ້ງໃຫ້ໃຊ້ C99 semantics ສໍາລັບ
"inline" ເມື່ອຢູ່ໃນໂຫມດ C99 ຫຼື gnu99 (ie, ມັນກໍານົດພຶດຕິກໍາໃນຕອນຕົ້ນ). ນີ້
ບໍ່ຮອງຮັບທາງເລືອກໃນ -std=c90 or -std=gnu90 mode

ມາໂຄຣໂປຣເຊສເຊີກ່ອນ "__GNUC_GNU_INLINE__" ແລະ "__GNUC_STDC_INLINE__" ອາດຈະຖືກໃຊ້
ເພື່ອກວດເບິ່ງວ່າຄວາມຫມາຍໃດທີ່ມີຜົນກະທົບສໍາລັບຫນ້າທີ່ "inline".

-aux-info ຊື່​ເອ​ກະ​ສານ
ສົ່ງຜົນໃຫ້ການປະກາດຕົ້ນແບບຂອງຊື່ໄຟລ໌ທີ່ໃຫ້ໄວ້ສຳລັບຟັງຊັນທັງໝົດທີ່ປະກາດ ແລະ/ຫຼື
ກໍານົດຢູ່ໃນຫນ່ວຍງານການແປ, ລວມທັງທີ່ຢູ່ໃນໄຟລ໌ header. ທາງເລືອກນີ້ແມ່ນ
ບໍ່ສົນໃຈຢ່າງງຽບໆໃນພາສາອື່ນນອກເໜືອໄປຈາກ C.

ນອກ​ຈາກ​ການ​ປະ​ກາດ​, ເອ​ກະ​ສານ​ຊີ້​ບອກ​, ໃນ​ຄໍາ​ຄິດ​ເຫັນ​, ຕົ້ນ​ກໍາ​ເນີດ​ຂອງ​ການ​ປະ​ກາດ​ແຕ່​ລະ​ຄົນ​
(ແຫຼ່ງໄຟລ໌ແລະແຖວ), ບໍ່ວ່າຈະເປັນການປະກາດ implicit, prototyped ຫຼື
ບໍ່ມີຕົ້ນແບບ (I, N ສໍາ​ລັບ​ການ​ໃຫມ່​ຫຼື​ O ສໍາລັບອາຍຸ, ຕາມລໍາດັບ, ໃນລັກສະນະທໍາອິດຫຼັງຈາກ
ຕົວເລກເສັ້ນ ແລະຈໍ້າສອງເມັດ), ແລະບໍ່ວ່າຈະມາຈາກຄໍາປະກາດ ຫຼືຄໍານິຍາມ
(C or F, ຕາມລໍາດັບ, ໃນລັກສະນະດັ່ງຕໍ່ໄປນີ້). ໃນກໍລະນີຂອງຫນ້າທີ່
ຄໍານິຍາມ, ບັນຊີລາຍຊື່ແບບ K&R ຂອງການໂຕ້ຖຽງທີ່ຕິດຕາມດ້ວຍການປະກາດຂອງພວກເຂົາແມ່ນເຊັ່ນກັນ
ສະຫນອງໃຫ້, ພາຍໃນຄໍາເຫັນ, ຫຼັງຈາກການປະກາດ.

-fallow-parameterless-variadic-functions
ຍອມຮັບຟັງຊັນ varidic ໂດຍບໍ່ມີການຕັ້ງຊື່.

ເຖິງແມ່ນວ່າມັນເປັນໄປໄດ້ທີ່ຈະກໍານົດຫນ້າທີ່ດັ່ງກ່າວ, ນີ້ບໍ່ແມ່ນປະໂຫຍດຫຼາຍຍ້ອນວ່າມັນເປັນ
ບໍ່ສາມາດອ່ານການໂຕ້ຖຽງໄດ້. ນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ C ຍ້ອນວ່າການກໍ່ສ້າງນີ້ແມ່ນ
ອະນຸຍາດໂດຍ C++.

-fno-asm
ຢ່າຮັບຮູ້ "asm", "inline" ຫຼື "typeof" ເປັນຄໍາສໍາຄັນ, ດັ່ງນັ້ນລະຫັດສາມາດນໍາໃຊ້ເຫຼົ່ານີ້
ຄໍາສັບຕ່າງໆເປັນຕົວລະບຸ. ທ່ານສາມາດນໍາໃຊ້ຄໍາສໍາຄັນ "__asm__", "__inline__" ແລະ
"__typeof__" ແທນ. -ansi implies -fno-asm.

ໃນ C ++, ສະຫຼັບນີ້ມີຜົນກະທົບພຽງແຕ່ "ປະເພດ" ຄໍາສໍາຄັນ, ເນື່ອງຈາກວ່າ "asm" ແລະ "inline" ແມ່ນ.
ຄໍາມາດຕະຖານ. ທ່ານອາດຈະຕ້ອງການໃຊ້ -fno-gnu-keywords ທຸງແທນ, ທີ່ມີ
ຜົນກະທົບດຽວກັນ. ໃນໂຫມດ C99 (-std=c99 or -std=gnu99), ສະຫຼັບນີ້ມີຜົນກະທົບພຽງແຕ່ໄດ້
"asm" ແລະ "typeof" ຄໍາສໍາຄັນ, ເນື່ອງຈາກວ່າ "inline" ເປັນຄໍາສໍາຄັນມາດຕະຖານໃນ ISO C99.

-fno-builtin
-fno-builtin-ຫນ້າທີ່
ບໍ່ຮັບຮູ້ຟັງຊັນໃນຕົວທີ່ບໍ່ໄດ້ເລີ່ມຕົ້ນດ້ວຍ __ກໍ່ສ້າງ_ ເປັນຄໍານໍາຫນ້າ.

ໂດຍປົກກະຕິ GCC ຈະສ້າງລະຫັດພິເສດເພື່ອຈັດການຟັງຊັນໃນຕົວບາງຢ່າງຫຼາຍຂຶ້ນ
ມີປະສິດທິພາບ; ສໍາລັບຕົວຢ່າງ, ການໂທຫາ "alloca" ອາດຈະກາຍເປັນຄໍາແນະນໍາດຽວ
ປັບ stack ໂດຍກົງ, ແລະການໂທຫາ "memcpy" ອາດຈະກາຍເປັນ inline copy loops. ໄດ້
ລະຫັດຜົນໄດ້ຮັບມັກຈະມີທັງນ້ອຍກວ່າ ແລະໄວກວ່າ, ແຕ່ເນື່ອງຈາກຟັງຊັນເອີ້ນວ່າບໍ່ມີ
ດົນກວ່ານັ້ນປະກົດຂຶ້ນ, ທ່ານບໍ່ສາມາດຕັ້ງຈຸດຢຸດໃນການໂທເຫຼົ່ານັ້ນ, ແລະທ່ານສາມາດປ່ຽນໄດ້
ພຶດຕິກໍາຂອງຫນ້າທີ່ໂດຍການເຊື່ອມຕໍ່ກັບຫ້ອງສະຫມຸດທີ່ແຕກຕ່າງກັນ. ນອກຈາກນັ້ນ, ເມື່ອ
ຟັງຊັນຖືກຮັບຮູ້ວ່າເປັນຫນ້າທີ່ສ້າງໃນ, GCC ອາດຈະໃຊ້ຂໍ້ມູນກ່ຽວກັບເລື່ອງນັ້ນ
ຟັງຊັນເພື່ອເຕືອນກ່ຽວກັບບັນຫາກັບການໂທໄປຫາຟັງຊັນນັ້ນ, ຫຼືເພື່ອສ້າງເພີ່ມເຕີມ
ລະ​ຫັດ​ປະ​ສິດ​ທິ​ພາບ​, ເຖິງ​ແມ່ນ​ວ່າ​ລະ​ຫັດ​ຜົນ​ໄດ້​ຮັບ​ຍັງ​ມີ​ການ​ໂທ​ຫາ​ຫນ້າ​ທີ່​ນັ້ນ​. ສໍາລັບ
ຍົກ​ຕົວ​ຢ່າງ​, ຄໍາ​ເຕືອນ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ໃຫ້​ກັບ​ -Wformat ສໍາລັບການໂທຫາທີ່ບໍ່ດີກັບ "printf" ເມື່ອ "printf" ແມ່ນ
ສ້າງຂຶ້ນໃນແລະ "strlen" ເປັນທີ່ຮູ້ຈັກບໍ່ດັດແປງຫນ່ວຍຄວາມຈໍາທົ່ວໂລກ.

ມີ -fno-builtin-ຫນ້າທີ່ ທາງ​ເລືອກ​ພຽງ​ແຕ່​ການ​ທໍາ​ງານ​ໃນ​ຕົວ​ ຫນ້າທີ່ ເປັນຄົນພິການ.
ຫນ້າທີ່ ບໍ່ຄວນເລີ່ມຕົ້ນດ້ວຍ __ກໍ່ສ້າງ_. ຖ້າຟັງຊັນຖືກຕັ້ງຊື່ທີ່ບໍ່ໄດ້ຢູ່ໃນຕົວ
ໃນ GCC ລຸ້ນນີ້, ຕົວເລືອກນີ້ຖືກລະເລີຍ. ບໍ່ມີທີ່ສອດຄ້ອງກັນ
-fbuiltin-ຫນ້າທີ່ ທາງເລືອກ; ຖ້າທ່ານຕ້ອງການເປີດໃຊ້ຟັງຊັນໃນຕົວເລືອກເມື່ອໃດ
ການນໍາໃຊ້ -fno-builtin or - freestanding, ທ່ານອາດຈະກໍານົດ macro ເຊັ່ນ:

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

-fhosted
ຢືນຢັນວ່າການລວບລວມແມ່ນເປົ້າຫມາຍສະພາບແວດລ້ອມທີ່ເປັນເຈົ້າພາບ. ນີ້ຫມາຍຄວາມວ່າ -fbuiltin. A
ສະພາບແວດລ້ອມທີ່ເປັນເຈົ້າພາບແມ່ນຫນຶ່ງທີ່ຫ້ອງສະຫມຸດມາດຕະຖານທັງຫມົດແມ່ນມີຢູ່, ແລະໃນ
ເຊິ່ງ "ຕົ້ນຕໍ" ມີປະເພດຜົນຕອບແທນຂອງ "int". ຕົວຢ່າງແມ່ນເກືອບທຸກຢ່າງຍົກເວັ້ນ a
ແກ່ນ. ນີ້ແມ່ນເທົ່າກັບ -fno-freestanding.

- freestanding
ຢືນຢັນວ່າການສັງລວມແມ່ນແນໃສ່ສະພາບແວດລ້ອມທີ່ເປັນເອກະລາດ. ນີ້ຫມາຍຄວາມວ່າ
-fno-builtin. ສະພາບແວດລ້ອມທີ່ເປັນເອກະລາດແມ່ນຫນຶ່ງທີ່ຫ້ອງສະຫມຸດມາດຕະຖານອາດຈະບໍ່
ມີຢູ່, ແລະການເລີ່ມຕົ້ນໂຄງການອາດຈະບໍ່ຈໍາເປັນທີ່ "ຕົ້ນຕໍ". ຕົວຢ່າງທີ່ຈະແຈ້ງທີ່ສຸດ
ເປັນ OS kernel. ນີ້ແມ່ນເທົ່າກັບ -fno-hosted.

-fopenacc
ເປີດໃຊ້ການຈັດການຄຳສັ່ງ OpenACC "#pragma acc" ໃນ C/C++ ແລະ "!$acc" ໃນ Fortran.
ເມື່ອ​ໃດ​ -fopenacc ຖືກກໍານົດໄວ້, compiler ສ້າງລະຫັດເລັ່ງອີງຕາມການ
OpenACC Application Programming Interface v2.0http://www.openacc.org/>. ທາງເລືອກນີ້
implies - ກະທູ້, ແລະດັ່ງນັ້ນຈຶ່ງໄດ້ຮັບການສະຫນັບສະຫນູນພຽງແຕ່ກ່ຽວກັບເປົ້າຫມາຍທີ່ມີການສະຫນັບສະຫນູນ
- ກະທູ້.

ຈົ່ງຈື່ໄວ້ວ່ານີ້ແມ່ນຄຸນສົມບັດທົດລອງ, ບໍ່ສົມບູນ, ແລະມີການປ່ຽນແປງໃນອະນາຄົດ
ລຸ້ນຂອງ GCC. ເບິ່ງhttps://gcc.gnu.org/wiki/OpenACC> ສຳ ລັບຂໍ້ມູນເພີ່ມເຕີມ.

-fopenmp
ເປີດໃຊ້ການຈັດການຄໍາສັ່ງ OpenMP "#pragma omp" ໃນ C/C++ ແລະ "!$omp" ໃນ Fortran.
ເມື່ອ​ໃດ​ -fopenmp ຖືກລະບຸໄວ້, compiler ສ້າງລະຫັດຂະຫນານຕາມ
OpenMP Application Program Interface v4.0http://www.openmp.org/>. ທາງເລືອກນີ້
implies - ກະທູ້, ແລະດັ່ງນັ້ນຈຶ່ງໄດ້ຮັບການສະຫນັບສະຫນູນພຽງແຕ່ກ່ຽວກັບເປົ້າຫມາຍທີ່ມີການສະຫນັບສະຫນູນ
- ກະທູ້. -fopenmp implies -fopenmp-simd.

-fopenmp-simd
ເປີດໃຊ້ການຈັດການຄຳສັ່ງ SIMD ຂອງ OpenMP ດ້ວຍ "#pragma omp" ໃນ C/C++ ແລະ "!$omp" ໃນ
ຟໍຣັນ. ຄຳສັ່ງ OpenMP ອື່ນໆແມ່ນຖືກລະເລີຍ.

-fcilkplus
ເປີດໃຊ້ຄຸນສົມບັດການຂະຫຍາຍພາສາ Cilk Plus ສໍາລັບ C/C++. ໃນເວລາທີ່ທາງເລືອກ
-fcilkplus ຖືກລະບຸໄວ້, ເປີດໃຊ້ຄຸນສົມບັດການຂະຫຍາຍພາສາ Cilk Plus
ສໍາລັບ C/C++. ການປະຕິບັດໃນປັດຈຸບັນປະຕິບັດຕາມ ABI ຮຸ່ນ 1.2. ນີ້ແມ່ນ
ລັກສະນະການທົດລອງທີ່ສົມບູນພຽງແຕ່ບາງສ່ວນ, ແລະການໂຕ້ຕອບຂອງມັນອາດຈະມີການປ່ຽນແປງ
ໃນ GCC ຮຸ່ນໃນອະນາຄົດເນື່ອງຈາກການປ່ຽນແປງສະເພາະຢ່າງເປັນທາງການ. ໃນປັດຈຸບັນ, ທັງຫມົດ
ຄຸນນະສົມບັດແຕ່ "_Cilk_for" ໄດ້ຖືກປະຕິບັດ.

-fgnu-tm
ໃນເວລາທີ່ທາງເລືອກ -fgnu-tm ຖືກກໍານົດໄວ້, compiler ສ້າງລະຫັດສໍາລັບ Linux
ຕົວແປຂອງເອກະສານສະເພາະ Transactional Memory ABI ຂອງ Intel (ສະບັບປັບປຸງ
1.1, 6 ພຶດສະພາ 2009). ນີ້​ແມ່ນ​ຄຸນ​ສົມ​ບັດ​ການ​ທົດ​ລອງ​ທີ່​ມີ​ການ​ໂຕ້​ຕອບ​ທີ່​ອາດ​ຈະ​ມີ​ການ​ປ່ຽນ​ແປງ​ໃນ​
ລຸ້ນ GCC ໃນອະນາຄົດ, ເນື່ອງຈາກການປ່ຽນສະເພາະຢ່າງເປັນທາງການ. ກະລຸນາສັງເກດວ່າບໍ່ແມ່ນ
ສະຖາປັດຕະຍະກໍາທັງຫມົດແມ່ນສະຫນັບສະຫນູນສໍາລັບຄຸນສົມບັດນີ້.

ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບການຊ່ວຍເຫຼືອຂອງ GCC ສໍາລັບຫນ່ວຍຄວາມຈໍາການເຮັດທຸລະກໍາ,

ກະລຸນາຮັບຊາບວ່າຄຸນສົມບັດໜ່ວຍຄວາມຈຳການເຮັດທຸລະກຳແມ່ນບໍ່ຮອງຮັບດ້ວຍການຍົກເວັ້ນການໂທ
(-fnon-call-exceptions).

-fms-ສ່ວນຂະຫຍາຍ
ຍອມຮັບບາງໂຄງສ້າງທີ່ບໍ່ແມ່ນມາດຕະຖານທີ່ໃຊ້ໃນໄຟລ໌ສ່ວນຫົວຂອງ Microsoft.

ໃນລະຫັດ C ++, ນີ້ອະນຸຍາດໃຫ້ຊື່ສະມາຊິກໃນໂຄງສ້າງຄ້າຍຄືກັນກັບປະເພດທີ່ຜ່ານມາ
ຖະແຫຼງການ.

typedef int UOW;
ໂຄງສ້າງ ABC {
UOW UOW;
};

ບາງກໍລະນີຂອງທົ່ງນາທີ່ບໍ່ມີຊື່ໃນໂຄງສ້າງແລະສະຫະພັນແມ່ນໄດ້ຮັບການຍອມຮັບພຽງແຕ່ກັບເລື່ອງນີ້
ທາງເລືອກ.

ໃຫ້ສັງເກດວ່າທາງເລືອກນີ້ແມ່ນປິດສໍາລັບເປົ້າຫມາຍທັງຫມົດແຕ່ເປົ້າຫມາຍ x86 ໂດຍໃຊ້ ms-abi.

-fplan9-ສ່ວນຂະຫຍາຍ
ຍອມຮັບບາງສິ່ງກໍ່ສ້າງທີ່ບໍ່ແມ່ນມາດຕະຖານທີ່ໃຊ້ໃນລະຫັດແຜນ 9.

ອັນນີ້ເຮັດໃຫ້ -fms-ສ່ວນຂະຫຍາຍ, ອະນຸຍາດໃຫ້ສົ່ງຕົວຊີ້ໄປຫາໂຄງສ້າງທີ່ບໍ່ເປີດເຜີຍຊື່
ຊ່ອງຂໍ້ມູນໄປຫາຫນ້າທີ່ຄາດຫວັງວ່າຕົວຊີ້ໄປຫາອົງປະກອບຂອງປະເພດຂອງພາກສະຫນາມ, ແລະ
ອະ​ນຸ​ຍາດ​ໃຫ້​ໂດຍ​ອ້າງ​ອີງ​ໃສ່​ຊ່ອງ​ຂໍ້​ມູນ​ທີ່​ບໍ່​ລະ​ບຸ​ຊື່​ປະ​ກາດ​ໂດຍ​ໃຊ້ typedef​. ນີ້ແມ່ນພຽງແຕ່
ຮອງຮັບ C, ບໍ່ແມ່ນ C ++.

-trigraphs
ຮອງຮັບ ISO C trigraphs. ໄດ້ -ansi ທາງເລືອກ (ແລະ -std ທາງເລືອກສໍາລັບ ISO C ທີ່ເຄັ່ງຄັດ
ຄວາມສອດຄ່ອງ) ໝາຍເຖິງ -trigraphs.

- ແບບດັ້ງເດີມ
-cpp
ໃນເມື່ອກ່ອນ, ທາງເລືອກເຫຼົ່ານີ້ເຮັດໃຫ້ GCC ພະຍາຍາມເຮັດຕາມມາດຕະຖານ C compiler ກ່ອນ.
ໃນປັດຈຸບັນເຂົາເຈົ້າໄດ້ຮັບການສະຫນັບສະຫນູນພຽງແຕ່ກັບ -E ສະຫຼັບ. preprocessor ສືບຕໍ່ສະຫນັບສະຫນູນ
ໂໝດມາດຕະຖານກ່ອນ. ເບິ່ງຄູ່ມື GNU CPP ສໍາລັບລາຍລະອຽດ.

-fcond-ບໍ່ກົງກັນ
ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ສະ​ແດງ​ອອກ​ເງື່ອນ​ໄຂ​ທີ່​ມີ​ປະ​ເພດ​ທີ່​ບໍ່​ກົງ​ກັນ​ໃນ​ການ​ໂຕ້​ຖຽງ​ທີ​ສອງ​ແລະ​ທີ​ສາມ​.
ມູນຄ່າຂອງການສະແດງອອກດັ່ງກ່າວເປັນໂມຄະ. ຕົວເລືອກນີ້ບໍ່ຮອງຮັບ C++.

-flax-vector-ແປງ
ອະ​ນຸ​ຍາດ​ໃຫ້​ມີ​ການ​ປ່ຽນ​ແປງ implicit ລະ​ຫວ່າງ vectors ມີ​ຈໍາ​ນວນ​ທີ່​ແຕກ​ຕ່າງ​ກັນ​ຂອງ​ອົງ​ປະ​ກອບ​ແລະ / ຫຼື​
ປະເພດອົງປະກອບທີ່ບໍ່ເຂົ້າກັນໄດ້. ຕົວເລືອກນີ້ບໍ່ຄວນໃຊ້ສໍາລັບລະຫັດໃຫມ່.

-funsigned-char
ໃຫ້ປະເພດ "char" ບໍ່ໄດ້ເຊັນ, ເຊັ່ນ "unsigned char".

ແຕ່ລະປະເພດຂອງເຄື່ອງຈັກມີຄ່າເລີ່ມຕົ້ນສໍາລັບສິ່ງທີ່ "char" ຄວນຈະເປັນ. ມັນຄືກັນ
"unsigned char" ຕາມຄ່າເລີ່ມຕົ້ນ ຫຼືຄ້າຍຄື "signed char" ຕາມຄ່າເລີ່ມຕົ້ນ.

ໂດຍຫລັກການແລ້ວ, ໂປຣແກຣມເຄື່ອນທີ່ຄວນໃຊ້ "signed char" ຫຼື "unsigned char" ເມື່ອມັນ
ຂຶ້ນກັບການເຊັນຂອງວັດຖຸ. ແຕ່ໂຄງການຈໍານວນຫຼາຍໄດ້ຖືກຂຽນເພື່ອນໍາໃຊ້
ທໍາມະດາ "char" ແລະຄາດວ່າຈະໄດ້ຮັບການລົງນາມ, ຫຼືຄາດຫວັງວ່າມັນຈະ unsigned, ຂຶ້ນກັບ
ເຄື່ອງທີ່ເຂົາເຈົ້າໄດ້ຖືກຂຽນສໍາລັບ. ທາງເລືອກນີ້, ແລະປີ້ນກັບກັນ, ໃຫ້ທ່ານເຮັດເຊັ່ນນັ້ນ
ໂຄງການເຮັດວຽກກັບຄ່າເລີ່ມຕົ້ນທີ່ກົງກັນຂ້າມ.

ປະເພດ "char" ແມ່ນສະເຫມີເປັນປະເພດທີ່ແຕກຕ່າງຈາກແຕ່ລະ "char signed char" ຫຼື "unsigned
char ", ເຖິງແມ່ນວ່າພຶດຕິກໍາຂອງມັນສະເຫມີຄືກັນກັບຫນຶ່ງໃນສອງນັ້ນ.

-fsigned-char
ໃຫ້ປະເພດ "char" ຖືກເຊັນ, ເຊັ່ນ "ເຊັນ char".

ໃຫ້ສັງເກດວ່ານີ້ເທົ່າກັບ -fno-unsigned-char, ຊຶ່ງເປັນຮູບແບບລົບຂອງ
-funsigned-char. ເຊັ່ນດຽວກັນ, ທາງເລືອກ -fno-signed-char ເທົ່າກັບ
-funsigned-char.

-fsigned-bitfields
-funsigned-bitfields
-fno-signed-bitfields
-fno-unsigned-bitfields
ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ຄວບ​ຄຸມ​ບໍ່​ວ່າ​ຈະ​ເປັນ bit-field ຖືກ​ເຊັນ​ຫຼື​ບໍ່​ໄດ້​ເຊັນ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປະ​ກາດ​
ບໍ່ໄດ້ໃຊ້ "ເຊັນ" ຫຼື "ບໍ່ໄດ້ເຊັນ". ໂດຍຄ່າເລີ່ມຕົ້ນ, ຊ່ອງຂໍ້ມູນດັ່ງກ່າວຖືກເຊັນ,
ເນື່ອງຈາກວ່ານີ້ແມ່ນສອດຄ່ອງ: ປະເພດຈໍານວນເຕັມພື້ນຖານເຊັ່ນ "int" ແມ່ນປະເພດເຊັນ.

ທາງເລືອກໃນການ ການຄວບຄຸມ C ++ ພາສາ
ພາກນີ້ອະທິບາຍຕົວເລືອກແຖວຄໍາສັ່ງທີ່ມີຄວາມຫມາຍສໍາລັບໂຄງການ C++ ເທົ່ານັ້ນ.
ນອກນັ້ນທ່ານຍັງສາມາດໃຊ້ທາງເລືອກການລວບລວມ GNU ສ່ວນໃຫຍ່ໂດຍບໍ່ຄໍານຶງເຖິງພາສາໃດກໍ່ຕາມຂອງໂປຼແກຼມຂອງທ່ານ
ຢູ່ໃນ. ຕົວຢ່າງ, ທ່ານອາດຈະລວບລວມໄຟລ໌ firstClass.C ເຊັ່ນນີ້:

g++ -g -frepo -O -c firstClass.C

ໃນຕົວຢ່າງນີ້, ພຽງແຕ່ -frepo ເປັນທາງເລືອກທີ່ຫມາຍຄວາມວ່າພຽງແຕ່ສໍາລັບໂຄງການ 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 ທຳອິດ, ປະຕິບັດການຈັດການມາດຕະຖານສຳລັບ vector
ປະເພດ

ເວີຊັ່ນ 5, ເຊິ່ງປາກົດໃນ G++ 4.6 ທຳອິດ, ແກ້ໄຂການຫຼອກລວງຂອງຄຸນສົມບັດ
const/volatile ໃນປະເພດຕົວຊີ້ຟັງຊັນ, decltype ຂອງ decl ທໍາມະດາ, ແລະການນໍາໃຊ້ a
ພາຣາມິເຕີຟັງຊັນໃນການປະກາດພາຣາມິເຕີອື່ນ.

ເວີຊັ່ນ 6, ເຊິ່ງປາກົດໃນ G++ 4.7 ທຳອິດ, ແກ້ໄຂພຶດຕິກຳການສົ່ງເສີມຂອງ C++11
enums ທີ່​ມີ​ຂອບ​ເຂດ​ແລະ​ການ​ຄວບ​ຄຸມ​ຂອງ​ຊອງ argument ແມ່​ແບບ​, const/static_cast​, ຄໍາ​ນໍາ​ຫນ້າ ++
ແລະ --, ແລະຟັງຊັນຂອບເຂດຫ້ອງຮຽນທີ່ໃຊ້ເປັນອາກິວເມັນແມ່ແບບ.

ເວີຊັ່ນ 7, ເຊິ່ງປາກົດໃນ G++ 4.8 ທຳອິດ, ທີ່ປະຕິບັດຕໍ່ nullptr_t ເປັນປະເພດ buildin.
ແລະແກ້ໄຂການຫຼອກລວງຂອງ lambdas ໃນຂອບເຂດການໂຕ້ຖຽງເລີ່ມຕົ້ນ.

ເວີຊັນ 8, ເຊິ່ງປາກົດໃນ G++ 4.9 ຄັ້ງທໍາອິດ, ແກ້ໄຂພຶດຕິກໍາການທົດແທນຂອງ
ປະເພດຟັງຊັນທີ່ມີ function-cv-qualifiers.

ເບິ່ງ - ວາບີ.

-fabi-compat-version=n
ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນນາມແຝງທີ່ເຂັ້ມແຂງ, G++ ເຮັດວຽກກ່ຽວກັບການປ່ຽນແປງ mangling ໂດຍການສ້າງ
alias ທີ່ມີຊື່ mangled ທີ່ຖືກຕ້ອງໃນເວລາທີ່ກໍານົດສັນຍາລັກທີ່ບໍ່ຖືກຕ້ອງ
ຊື່​ສາ​ກົນ​. ສະຫຼັບນີ້ລະບຸວ່າ ABI ລຸ້ນໃດທີ່ຈະໃຊ້ສຳລັບນາມແຝງ.

ກັບ -fabi-version=0 (ຄ່າເລີ່ມຕົ້ນ), ນີ້ຄ່າເລີ່ມຕົ້ນເປັນ 2. ຖ້າລຸ້ນ ABI ອື່ນແມ່ນ
ເລືອກຢ່າງຈະແຈ້ງ, ນີ້ກຳນົດຄ່າເລີ່ມຕົ້ນເປັນ 0.

ສະບັບເຂົ້າກັນໄດ້ຖືກກໍານົດໂດຍ -Wabi=n.

-fno-access-control
ປິດການກວດສອບການເຂົ້າເຖິງທັງໝົດ. ສະວິດນີ້ສ່ວນໃຫຍ່ແມ່ນເປັນປະໂຫຍດສໍາລັບການເຮັດວຽກປະມານແມງໄມ້ໃນ
ລະ​ຫັດ​ການ​ຄວບ​ຄຸມ​ການ​ເຂົ້າ​ເຖິງ​.

-fcheck-ໃໝ່
ກວດເບິ່ງວ່າຕົວຊີ້ທີ່ສົ່ງຄືນໂດຍ "operator new" ບໍ່ແມ່ນ null ກ່ອນທີ່ຈະພະຍາຍາມ
ແກ້ໄຂການຈັດສັນທີ່ເກັບຮັກສາໄວ້. ການກວດສອບນີ້ແມ່ນປົກກະຕິບໍ່ຈໍາເປັນເພາະວ່າ C ++
ມາດຕະຖານກໍານົດວ່າ "ຜູ້ປະຕິບັດການໃຫມ່" ພຽງແຕ່ກັບຄືນ 0 ຖ້າມັນຖືກປະກາດ "ຖິ້ມ()", ໃນ
ກໍລະນີໃດທີ່ຜູ້ລວບລວມຂໍ້ມູນຈະກວດເບິ່ງຄ່າກັບຄືນເຖິງແມ່ນວ່າບໍ່ມີທາງເລືອກນີ້. ໃນ
ກໍລະນີອື່ນໆທັງຫມົດ, ໃນເວລາທີ່ "operator ໃຫມ່" ມີຂໍ້ກໍານົດການຍົກເວັ້ນບໍ່ຫວ່າງເປົ່າ, ຫນ່ວຍຄວາມຈໍາ
ຄວາມອິດເມື່ອຍແມ່ນສັນຍານໂດຍການຖິ້ມ "std::bad_alloc". ເບິ່ງນຳ ໃຫມ່ (ໂນນໂທຣ).

-fconstexpr-depth=n
ກຳນົດຄວາມເລິກການປະເມີນທີ່ຊ້ອນກັນສູງສຸດສຳລັບຟັງຊັນ C++11 constexpr ເປັນ n. ຂີດຈຳກັດ
ແມ່ນຈໍາເປັນເພື່ອກວດພົບການເອີ້ນຄືນທີ່ບໍ່ມີທີ່ສິ້ນສຸດໃນລະຫວ່າງການປະເມີນຜົນການສະແດງອອກຢ່າງຕໍ່ເນື່ອງ. ໄດ້
ຕໍາ່ສຸດທີ່ກໍານົດໂດຍມາດຕະຖານແມ່ນ 512.

-fdeduce-init-list
ເປີດໃຊ້ການຫັກຄ່າພາຣາມີເຕີປະເພດແມ່ແບບເປັນ "std::initializer_list" ຈາກວົງເລັບ-
enclosed ບັນຊີລາຍຊື່ເບື້ອງຕົ້ນ, ie

ແມ່ແບບ auto forward(T t) -> decltype (realfn (t))
{
ກັບຄືນ realfn (t);
}

void f()
{
forward({1,2}); // ໂທ​ໄປ​ຂ້າງ​ຫນ້າ​ >
}

ການຫັກນີ້ໄດ້ຖືກປະຕິບັດເປັນການຂະຫຍາຍທີ່ເປັນໄປໄດ້ກັບການສະເຫນີເບື້ອງຕົ້ນ
semantics ສໍາລັບມາດຕະຖານ C ++11, ແຕ່ບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງມາດຕະຖານສຸດທ້າຍ, ດັ່ງນັ້ນມັນແມ່ນ
ປິດການໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ. ຕົວເລືອກນີ້ຖືກປະຕິເສດ, ແລະອາດຈະຖືກລຶບອອກໃນອະນາຄົດ
ລຸ້ນ G++.

-ffriend-ສັກຢາ
ສັກຢາຟັງຊັນຂອງໝູ່ເຂົ້າໄປໃນຊ່ອງຊື່ທີ່ປິດລ້ອມ, ເພື່ອໃຫ້ພວກມັນເບິ່ງເຫັນໄດ້ພາຍນອກ
ຂອບເຂດຂອງຫ້ອງຮຽນທີ່ເຂົາເຈົ້າໄດ້ຖືກປະກາດ. ຫນ້າທີ່ເພື່ອນໄດ້ຖືກບັນທຶກໄວ້
ເຮັດວຽກດ້ວຍວິທີນີ້ໃນ Annotated C++ Reference Manual. ຢ່າງໃດກໍຕາມ, ໃນ ISO C++ a
ຟັງຊັນເພື່ອນທີ່ບໍ່ໄດ້ຖືກປະກາດຢູ່ໃນຂອບເຂດທີ່ປິດລ້ອມສາມາດພົບໄດ້ໂດຍໃຊ້ເທົ່ານັ້ນ
ການຊອກຫາການໂຕ້ຖຽງຂຶ້ນກັບ. GCC ເລີ່ມຕົ້ນເປັນພຶດຕິກໍາມາດຕະຖານ.

ຕົວເລືອກນີ້ແມ່ນເພື່ອຄວາມເຂົ້າກັນໄດ້, ແລະອາດຈະຖືກໂຍກຍ້າຍອອກໃນການປ່ອຍ G++ ໃນອະນາຄົດ.

-fno-elide-constructors
ມາດຕະຖານ C ++ ອະນຸຍາດໃຫ້ການປະຕິບັດເພື່ອຍົກເລີກການສ້າງຊົ່ວຄາວເທົ່ານັ້ນ
ໃຊ້ເພື່ອເລີ່ມຕົ້ນວັດຖຸອື່ນຂອງປະເພດດຽວກັນ. ການລະບຸທາງເລືອກນີ້ປິດໃຊ້ງານ
ການເພີ່ມປະສິດທິພາບນັ້ນ, ແລະບັງຄັບໃຫ້ G ++ ໂທຫາຕົວສ້າງສໍາເນົາໃນທຸກກໍລະນີ.

-fno-enforce-eh-specs
ຢ່າສ້າງລະຫັດເພື່ອກວດເບິ່ງການລະເມີດຂໍ້ຍົກເວັ້ນສະເພາະໃນເວລາແລ່ນ.
ຕົວເລືອກນີ້ລະເມີດມາດຕະຖານ C ++, ແຕ່ອາດຈະເປັນປະໂຫຍດສໍາລັບການຫຼຸດຜ່ອນຂະຫນາດລະຫັດໃນ
ການສ້າງການຜະລິດ, ຄືກັນກັບການກໍານົດ "NDEBUG". ນີ້ບໍ່ໄດ້ໃຫ້ລະຫັດຜູ້ໃຊ້
ການ​ອະ​ນຸ​ຍາດ​ໃຫ້​ຍົກ​ເວັ້ນ​ການ​ຍົກ​ເວັ້ນ​ການ​ລະ​ເມີດ​ສະ​ເພາະ​ການ​ຍົກ​ເວັ້ນ​; ໄດ້
compiler ຍັງຄົງ optimize ໂດຍອີງໃສ່ຂໍ້ມູນສະເພາະ, ດັ່ງນັ້ນການຖິ້ມສິ່ງທີ່ບໍ່ຄາດຄິດ
ຂໍ້ຍົກເວັ້ນເຮັດໃຫ້ພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດໃນເວລາແລ່ນ.

-fextern-tls-init
-fno-extern-tls-init
ມາດຕະຖານ C ++ 11 ແລະ OpenMP ອະນຸຍາດໃຫ້ຕົວແປ "thread_local" ແລະ "threadprivate" ເພື່ອ
ມີການເລີ່ມຕົ້ນແບບເຄື່ອນໄຫວ (runtime). ເພື່ອສະຫນັບສະຫນູນນີ້, ການນໍາໃຊ້ຕົວແປດັ່ງກ່າວ
ຜ່ານຟັງຊັນ wrapper ທີ່ປະຕິບັດການເລີ່ມຕົ້ນທີ່ຈໍາເປັນ. ໃນ​ເວ​ລາ​ທີ່
ການ​ນໍາ​ໃຊ້​ແລະ​ຄໍາ​ນິ​ຍາມ​ຂອງ​ຕົວ​ປ່ຽນ​ແປງ​ແມ່ນ​ຢູ່​ໃນ​ຫນ່ວຍ​ບໍ​ລິ​ການ​ແປ​ພາ​ສາ​ດຽວ​ກັນ​, overhead ນີ້​ສາ​ມາດ​ເຮັດ​ໄດ້​
ໄດ້ຮັບການ optimized ທັນທີ, ແຕ່ໃນເວລາທີ່ການນໍາໃຊ້ແມ່ນຢູ່ໃນຫນ່ວຍງານການແປພາສາທີ່ແຕກຕ່າງກັນມີ
ທີ່ສໍາຄັນ overhead ເຖິງແມ່ນວ່າຕົວແປບໍ່ຈໍາເປັນຕ້ອງເປັນແບບເຄື່ອນໄຫວ
ການເລີ່ມຕົ້ນ. ຖ້ານັກຂຽນໂປລແກລມສາມາດແນ່ໃຈວ່າບໍ່ມີການນໍາໃຊ້ຕົວແປໃນ non-
ການກໍານົດ TU ຕ້ອງການກະຕຸ້ນການເລີ່ມຕົ້ນແບບເຄື່ອນໄຫວ (ບໍ່ວ່າຈະເປັນຕົວແປແມ່ນ
ການເລີ່ມຕົ້ນທາງສະຖິຕິ, ຫຼືການນໍາໃຊ້ຕົວແປໃນການກໍານົດ TU ຈະຖືກປະຕິບັດ
ກ່ອນທີ່ຈະໃຊ້ໃນ TU ອື່ນ), ພວກເຂົາສາມາດຫຼີກລ້ຽງການ overhead ນີ້ກັບ
-fno-extern-tls-init ທາງເລືອກ.

ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນສັນຍາລັກນາມແຝງ, ຄ່າເລີ່ມຕົ້ນແມ່ນ -fextern-tls-init. ເປົ້າໝາຍ
ທີ່ບໍ່ຮອງຮັບສັນຍາລັກນາມແຝງ, ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-extern-tls-init.

-ffor-scope
-fno-for-scope
If -ffor-scope ຖືກກໍານົດ, ຂອບເຂດຂອງຕົວແປທີ່ປະກາດໃນ a for-init-statement
ຖືກຈໍາກັດພຽງແຕ່ "ສໍາລັບ" loop ຕົວຂອງມັນເອງ, ຕາມທີ່ກໍານົດໂດຍມາດຕະຖານ C ++. ຖ້າ
-fno-for-scope ຖືກກໍານົດ, ຂອບເຂດຂອງຕົວແປທີ່ປະກາດໃນ a for-init-statement
ຂະຫຍາຍໄປເຖິງຈຸດສິ້ນສຸດຂອງຂອບເຂດການປິດ, ເຊັ່ນດຽວກັບກໍລະນີຂອງ G++ ລຸ້ນເກົ່າ, ແລະ
ການປະຕິບັດອື່ນໆ (ແບບດັ້ງເດີມ) ຂອງ C++.

ຖ້າບໍ່ໄດ້ໃຫ້ທຸງທັງສອງ, ຄ່າເລີ່ມຕົ້ນແມ່ນປະຕິບັດຕາມມາດຕະຖານ, ແຕ່ອະນຸຍາດໃຫ້ແລະໃຫ້
ຄໍາເຕືອນສໍາລັບລະຫັດແບບເກົ່າທີ່ຈະບໍ່ຖືກຕ້ອງ, ຫຼືມີຄວາມແຕກຕ່າງກັນ
ພຶດຕິ ກຳ.

-fno-gnu-keywords
ບໍ່ໄດ້ຮັບຮູ້ "typeof" ເປັນຄໍາສໍາຄັນ, ດັ່ງນັ້ນລະຫັດສາມາດນໍາໃຊ້ຄໍານີ້ເປັນ
ຕົວລະບຸ. ທ່ານສາມາດນໍາໃຊ້ຄໍາສໍາຄັນ "__typeof__" ແທນ. -ansi implies
-fno-gnu-keywords.

-fno-implicit-templates
ບໍ່ເຄີຍປ່ອຍລະຫັດສໍາລັບແມ່ແບບທີ່ບໍ່ແມ່ນຢູ່ໃນແຖວທີ່ຖືກສົ່ງອອກທັນທີໂດຍ implicitly (ເຊັ່ນ: ໂດຍ
ການນໍາໃຊ້); ພຽງແຕ່ປ່ອຍລະຫັດສໍາລັບ instantiations ຢ່າງຊັດເຈນ.

-fno-implicit-inline-templates
ຢ່າປ່ອຍລະຫັດສໍາລັບການທັນທີໂດຍຫຍໍ້ຂອງແມ່ແບບໃນແຖວ, ຄືກັນ. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນການຈັດການກັບ inlines ທີ່ແຕກຕ່າງກັນເພື່ອໃຫ້ລວບລວມໂດຍແລະບໍ່ຈໍາເປັນຕ້ອງເພີ່ມປະສິດທິພາບ
ຊຸດດຽວກັນຂອງ instantiations ຢ່າງຊັດເຈນ.

-fno-implement-inlines
ເພື່ອປະຢັດພື້ນທີ່, ຢ່າປ່ອຍສຳເນົາຂອງຟັງຊັນໃນແຖວທີ່ຄວບຄຸມໂດຍ
"#pragma ການປະຕິບັດ". ນີ້ເຮັດໃຫ້ເກີດຄວາມຜິດພາດຂອງຕົວເຊື່ອມຕໍ່ຖ້າຫນ້າທີ່ເຫຼົ່ານີ້ບໍ່ແມ່ນ
inlined ຢູ່ທົ່ວທຸກແຫ່ງເຂົາເຈົ້າເອີ້ນວ່າ.

-fms-ສ່ວນຂະຫຍາຍ
ປິດການເຕືອນ Wpedantic ກ່ຽວກັບການກໍ່ສ້າງທີ່ໃຊ້ໃນ MFC, ເຊັ່ນ implicit int ແລະ
ໄດ້ຮັບຕົວຊີ້ໄປຫາຫນ້າທີ່ສະມາຊິກໂດຍຜ່ານ syntax ທີ່ບໍ່ແມ່ນມາດຕະຖານ.

-fno-nonansi-builtins
ປິດ​ການ​ໃຊ້​ງານ​ການ​ປະ​ກາດ​ໃນ​ຕົວ​ຂອງ​ຫນ້າ​ທີ່​ທີ່​ບໍ່​ໄດ້​ຮັບ​ການ​ມອບ​ຫມາຍ​ໂດຍ ANSI/ISO C. ເຫຼົ່າ​ນີ້
ປະກອບມີ "ffs", "alloca", "_exit", "index", "bzero", "conjf", ແລະອື່ນໆທີ່ກ່ຽວຂ້ອງ
ປະຕິບັດຫນ້າ.

-fnotrow-opt
ປະຕິບັດຂໍ້ຍົກເວັ້ນ "ຖິ້ມ()" ຄືກັບວ່າມັນເປັນ "ບໍ່ມີຂໍ້ຍົກເວັ້ນ" ສະເພາະ
ຫຼຸດ ຫຼືລົບລ້າງຂະໜາດຂໍ້ຄວາມທີ່ຢູ່ເທິງຫົວທີ່ກ່ຽວຂ້ອງກັບຟັງຊັນທີ່ບໍ່ມີຂໍ້ຍົກເວັ້ນ
ສະເພາະ. ຖ້າຟັງຊັນມີຕົວແປທ້ອງຖິ່ນຂອງປະເພດທີ່ບໍ່ເປັນເລື່ອງເລັກໆນ້ອຍໆ
destructors, ຂໍ້ຍົກເວັ້ນໃນຕົວຈິງແມ່ນເຮັດໃຫ້ຫນ້າທີ່ນ້ອຍລົງເພາະວ່າ
ການອະນາໄມ EH ສໍາລັບຕົວແປເຫຼົ່ານັ້ນສາມາດຖືກປັບໃຫ້ເໝາະສົມໄດ້ທັນທີ. ຜົນກະທົບ semantic ແມ່ນ
ວ່າຂໍ້ຍົກເວັ້ນທີ່ຖືກຖິ້ມອອກຈາກຫນ້າທີ່ທີ່ມີຂໍ້ຍົກເວັ້ນດັ່ງກ່າວ
ສົ່ງຜົນໃຫ້ມີການໂທຫາ "ຢຸດ" ແທນທີ່ຈະ "ບໍ່ຄາດຄິດ".

-fno-operator-names
ຢ່າປະຕິບັດກັບຄໍາທີ່ໃຊ້ຊື່ຜູ້ປະກອບການ "ແລະ", "bitand", "bitor", "compl", "not", "ຫຼື"
ແລະ "xor" ເປັນຄໍາສັບຄ້າຍຄືຄໍາສໍາຄັນ.

-fno-optional-diags
ປິດການວິນິດໄສທີ່ມາດຕະຖານບອກວ່າຄອມພີວເຊີບໍ່ຈໍາເປັນຕ້ອງອອກ.
ໃນປັດຈຸບັນ, ການວິນິດໄສດັ່ງກ່າວດຽວທີ່ອອກໂດຍ G ++ ແມ່ນຫນຶ່ງສໍາລັບການມີຊື່
ຄວາມ​ຫມາຍ​ຫຼາຍ​ໃນ​ຫ້ອງ​ຮຽນ​.

-fpermissive
ດາວເກຣດການວິນິໄສບາງອັນກ່ຽວກັບລະຫັດທີ່ບໍ່ສອດຄ່ອງກັນຈາກຄວາມຜິດພາດໄປສູ່ການເຕືອນ. ດັ່ງນັ້ນ,
ການນໍາໃຊ້ -fpermissive ອະນຸຍາດໃຫ້ລວບລວມລະຫັດທີ່ບໍ່ສອດຄ່ອງບາງຢ່າງ.

-fno-pretty-templates
ເມື່ອຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຫມາຍເຖິງຄວາມຊ່ຽວຊານຂອງແມ່ແບບຟັງຊັນ, compiler
ປົກກະຕິພິມລາຍເຊັນຂອງແມ່ແບບຕາມດ້ວຍການໂຕ້ຖຽງແມ່ແບບ ແລະ
typedefs ຫຼື typenames ໃນລາຍເຊັນ (ເຊັ່ນ: "void f(T) [with T = int]" ແທນທີ່ຈະ.
ກ່ວາ "void f (int)") ເພື່ອໃຫ້ມັນຊັດເຈນວ່າແມ່ແບບໃດມີສ່ວນຮ່ວມ. ເມື່ອ​ເກີດ​ຄວາມ​ຜິດ​ພາດ​
ຂໍ້ຄວາມຫມາຍເຖິງຄວາມຊ່ຽວຊານຂອງແມ່ແບບຫ້ອງຮຽນ, compiler ຍົກເວັ້ນໃດໆ
ອາກິວເມັນແມ່ແບບທີ່ກົງກັບອາກິວເມັນແມ່ແບບເລີ່ມຕົ້ນສໍາລັບແມ່ແບບນັ້ນ. ຖ້າ
ພຶດຕິກໍາເຫຼົ່ານີ້ເຮັດໃຫ້ມັນຍາກທີ່ຈະເຂົ້າໃຈຂໍ້ຄວາມຄວາມຜິດພາດແທນທີ່ຈະເປັນ
ງ່າຍ​ຂຶ້ນ​, ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້​ -fno-pretty-templates ເພື່ອປິດການທໍາງານໃຫ້ເຂົາເຈົ້າ.

-frepo
ເປີດໃຊ້ການກະຕຸ້ນແມ່ແບບອັດຕະໂນມັດໃນເວລາເຊື່ອມຕໍ່. ທາງເລືອກນີ້ຍັງຫມາຍເຖິງ
-fno-implicit-templates.

-fno-rtti
ປິດການທໍາງານຂອງການສ້າງຂໍ້ມູນກ່ຽວກັບທຸກຫ້ອງຮຽນທີ່ມີຟັງຊັນ virtual ສໍາລັບການນໍາໃຊ້ໂດຍ
ຄຸນສົມບັດການລະບຸປະເພດເວລາແລ່ນ C++ ("dynamic_cast" ແລະ "typeid"). ຖ້າ​ເຈົ້າ
ຢ່າໃຊ້ພາກສ່ວນເຫຼົ່ານັ້ນຂອງພາສາ, ທ່ານສາມາດປະຫຍັດພື້ນທີ່ບາງຢ່າງໂດຍການໃຊ້ທຸງນີ້.
ໃຫ້ສັງເກດວ່າການຈັດການຂໍ້ຍົກເວັ້ນໃຊ້ຂໍ້ມູນດຽວກັນ, ແຕ່ G++ ສ້າງມັນເປັນ
ຕ້ອງການ. ຕົວປະຕິບັດການ "dynamic_cast" ຍັງສາມາດຖືກນໍາໃຊ້ສໍາລັບການສົ່ງສັນຍານທີ່ບໍ່ຕ້ອງການ
ຂໍ້ມູນປະເພດເວລາແລ່ນ, ເຊັ່ນ: ໂຍນເປັນ "void *" ຫຼືໄປຫາຫ້ອງຮຽນພື້ນຖານທີ່ບໍ່ຊັດເຈນ.

-fsized-deallocation
ເປີດໃຊ້ການປະກາດທົ່ວໂລກໃນຕົວ

void operator ລົບ (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;

ດັ່ງທີ່ໄດ້ແນະນໍາໃນ C++14. ອັນນີ້ເປັນປະໂຫຍດສໍາລັບການຈັດສັນການທົດແທນທີ່ກໍານົດໂດຍຜູ້ໃຊ້
ຟັງຊັນທີ່, ຕົວຢ່າງ, ໃຊ້ຂະຫນາດຂອງວັດຖຸເພື່ອເຮັດໃຫ້ການຈັດສັນໄວຂຶ້ນ.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນພາຍໃຕ້ -std=c++14 ແລະຂ້າງເທິງ. ທຸງ - ການ​ຈັດ​ແບ່ງ​ຂະ​ຫນາດ​ໃຫຍ່​ ເຕືອນ
ກ່ຽວກັບສະຖານທີ່ທີ່ອາດຈະຕ້ອງການເພີ່ມຄໍານິຍາມ.

-fstats
ປ່ອຍສະຖິຕິກ່ຽວກັບການປະມວນຜົນດ້ານຫນ້າໃນຕອນທ້າຍຂອງການລວບລວມ. ນີ້
ໂດຍ​ທົ່ວ​ໄປ​ຂໍ້​ມູນ​ແມ່ນ​ເປັນ​ປະ​ໂຫຍດ​ພຽງ​ແຕ່​ກັບ​ທີມ​ງານ​ພັດ​ທະ​ນາ G++ .

-fstrict-enums
ອະນຸຍາດໃຫ້ compiler ເພີ່ມປະສິດທິພາບໂດຍໃຊ້ສົມມຸດວ່າມູນຄ່າຂອງປະເພດ enumerated
ສາມາດເປັນໜຶ່ງໃນມູນຄ່າຂອງ enumeration (ຕາມທີ່ໄດ້ກຳນົດໄວ້ໃນມາດຕະຖານ C++;
ໂດຍພື້ນຖານແລ້ວ, ຄ່າທີ່ສາມາດຖືກສະແດງຢູ່ໃນຈໍານວນຕໍາ່ສຸດທີ່ຂອງ bits ທີ່ຕ້ອງການ
ເປັນ​ຕົວ​ແທນ​ຂອງ​ຜູ້​ຈໍາ​ນວນ​ທັງ​ຫມົດ​)​. ສົມມຸດຕິຖານນີ້ອາດຈະບໍ່ຖືກຕ້ອງຖ້າໂຄງການໃຊ້
ຄາສທເພື່ອປ່ຽນຄ່າຈຳນວນເຕັມທີ່ກຳນົດເອງເປັນປະເພດການນັບຈຳນວນ.

-ftemplate-backtrace-limit=n
ກໍານົດຈໍານວນສູງສຸດຂອງບັນທຶກການກະຕຸ້ນແມ່ແບບສໍາລັບຄໍາເຕືອນດຽວຫຼືຄວາມຜິດພາດ
to n. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

-ftemplate-depth=n
ກໍານົດຄວາມເລິກ instantiation ສູງສຸດສໍາລັບຫ້ອງຮຽນແມ່ແບບ n. ຂອບເຂດຈໍາກັດກ່ຽວກັບ
ຄວາມເລິກ instantiation ຂອງແມ່ແບບແມ່ນຈໍາເປັນເພື່ອກວດພົບ recursions ທີ່ບໍ່ມີທີ່ສິ້ນສຸດໃນລະຫວ່າງແມ່ແບບ
ທັນທີທັນໃດຊັ້ນ. ໂຄງການທີ່ສອດຄ່ອງກັບ ANSI/ISO C++ ຈະຕ້ອງບໍ່ອີງໃສ່ສູງສຸດ
ຄວາມເລິກຫຼາຍກວ່າ 17 (ປ່ຽນເປັນ 1024 ໃນ C++11). ຄ່າເລີ່ມຕົ້ນແມ່ນ 900, ເປັນ
compiler ສາມາດຫມົດພື້ນທີ່ stack ກ່ອນທີ່ຈະຕີ 1024 ໃນບາງສະຖານະການ.

-fno-threadsafe-statics
ຢ່າປ່ອຍລະຫັດເພີ່ມເຕີມເພື່ອໃຊ້ການປົກກະຕິທີ່ລະບຸໄວ້ໃນ C++ ABI ສໍາລັບ thread-
ການເລີ່ມຕົ້ນທີ່ປອດໄພຂອງສະຖິດທ້ອງຖິ່ນ. ທ່ານສາມາດນໍາໃຊ້ທາງເລືອກນີ້ເພື່ອຫຼຸດຜ່ອນຂະຫນາດລະຫັດ
ເລັກນ້ອຍໃນລະຫັດທີ່ບໍ່ຈໍາເປັນຕ້ອງປອດໄພ thread.

-fuse-cxa-atexit
ລົງທະບຽນ destructors ສໍາລັບວັດຖຸທີ່ມີໄລຍະເວລາເກັບຮັກສາຄົງທີ່ດ້ວຍ "__cxa_atexit"
ເຮັດວຽກແທນທີ່ຈະເປັນ "atexit". ທາງເລືອກນີ້ແມ່ນຕ້ອງການສໍາລັບການຢ່າງເຕັມສ່ວນ
ການ​ຈັດ​ການ​ຕາມ​ມາດ​ຕະ​ຖານ​ຂອງ​ການ​ທໍາ​ລາຍ​ສະ​ຖິດ​, ແຕ່​ວ່າ​ຈະ​ເຮັດ​ວຽກ​ພຽງ​ແຕ່​ຖ້າ​ຫາກ​ວ່າ​ຫ້ອງ​ສະ​ຫມຸດ C ຂອງ​ທ່ານ​
ຮອງຮັບ "__cxa_atexit".

-fno-use-cxa-get-exception-ptr
ຢ່າໃຊ້ "__cxa_get_exception_ptr" ປະຈຳເວລາແລ່ນ. ສາເຫດນີ້
"std::uncaught_exception" ບໍ່ຖືກຕ້ອງ, ແຕ່ເປັນສິ່ງຈໍາເປັນຖ້າ runtime routine ແມ່ນ.
ບໍ່​ສາ​ມາດ​ໃຊ້​ໄດ້.

-fvisibility-inlines-hidden
ສະວິດນີ້ປະກາດວ່າຜູ້ໃຊ້ບໍ່ໄດ້ພະຍາຍາມປຽບທຽບຕົວຊີ້ໄປຫາໃນແຖວ
ຫນ້າທີ່ຫຼືວິທີການທີ່ທີ່ຢູ່ຂອງສອງຫນ້າທີ່ຖືກປະຕິບັດແຕກຕ່າງກັນ
ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.

ຜົນກະທົບຂອງການນີ້ແມ່ນວ່າ GCC ອາດຈະ, ປະສິດທິຜົນ, ເຄື່ອງຫມາຍວິທີການໃນແຖວ
"__attribute__ ((ການເບິ່ງເຫັນ ("ເຊື່ອງໄວ້")))" ເພື່ອບໍ່ໃຫ້ພວກມັນປາກົດຢູ່ໃນການສົ່ງອອກ.
ຕາຕະລາງຂອງ DSO ແລະບໍ່ຕ້ອງການ PLT indirection ເມື່ອໃຊ້ພາຍໃນ DSO.
ການເປີດໃຊ້ທາງເລືອກນີ້ສາມາດມີຜົນກະທົບຢ່າງຫຼວງຫຼາຍຕໍ່ເວລາໂຫຼດແລະການເຊື່ອມຕໍ່ຂອງ DSO ຍ້ອນວ່າມັນ
ຢ່າງຫຼວງຫຼາຍຫຼຸດຜ່ອນຂະຫນາດຂອງຕາຕະລາງສົ່ງອອກແບບເຄື່ອນໄຫວໃນເວລາທີ່ຫ້ອງສະຫມຸດເຮັດໃຫ້ຫນັກ
ການນໍາໃຊ້ແມ່ແບບ.

ພຶດຕິກຳຂອງສະວິດນີ້ບໍ່ຄືກັບການໝາຍວິທີການທີ່ເຊື່ອງໄວ້
ໂດຍກົງ, ເນື່ອງຈາກວ່າມັນບໍ່ມີຜົນກະທົບຕໍ່ຕົວແປ static ທ້ອງຖິ່ນຕໍ່ກັບຫນ້າທີ່ຫຼືສາເຫດ
compiler ເພື່ອ deduce ວ່າຟັງຊັນໄດ້ຖືກກໍານົດຢູ່ໃນພຽງແຕ່ຫນຶ່ງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ.

ທ່ານ​ອາດ​ຈະ​ຫມາຍ​ວິ​ທີ​ການ​ທີ່​ມີ​ການ​ສັງ​ເກດ​ເຫັນ​ຢ່າງ​ຊັດ​ເຈນ​ເພື່ອ​ລົບ​ລ້າງ​ຜົນ​ກະ​ທົບ​ຂອງ​
ສະຫຼັບວິທີການນັ້ນ. ຕົວຢ່າງ, ຖ້າທ່ານຕ້ອງການປຽບທຽບຕົວຊີ້ໄປຫາ a
ວິທີການໃນແຖວໂດຍສະເພາະ, ທ່ານອາດຈະຫມາຍວ່າມັນມີການເບິ່ງເຫັນໃນຕອນຕົ້ນ. ເຄື່ອງຫມາຍ
ການປິດຫ້ອງຮຽນດ້ວຍການເບິ່ງເຫັນຢ່າງຊັດເຈນບໍ່ມີຜົນຫຍັງເລີຍ.

ວິທີການ inline ທັນທີທີ່ບໍ່ໄດ້ຮັບຜົນກະທົບຈາກທາງເລືອກນີ້ເປັນການເຊື່ອມໂຍງຂອງພວກເຂົາ
ຖ້າບໍ່ດັ່ງນັ້ນອາດຈະຂ້າມຂອບເຂດຫ້ອງສະຫມຸດຮ່ວມກັນ.

-fvisibility-ms-compat
ທຸງນີ້ພະຍາຍາມໃຊ້ການຕັ້ງຄ່າການເບິ່ງເຫັນເພື່ອເຮັດໃຫ້ຮູບແບບການເຊື່ອມໂຍງ C++ ຂອງ GCC
ເຂົ້າກັນໄດ້ກັບ Microsoft Visual Studio.

ທຸງເຮັດໃຫ້ການປ່ຽນແປງເຫຼົ່ານີ້ຕໍ່ກັບຮູບແບບການເຊື່ອມໂຍງຂອງ GCC:

1. ມັນກໍານົດການເບິ່ງເຫັນໃນຕອນຕົ້ນເປັນ "ເຊື່ອງໄວ້", ຄື -fvisibility=hidden.

2. ປະເພດ, ແຕ່ບໍ່ແມ່ນສະມາຊິກຂອງເຂົາເຈົ້າ, ບໍ່ໄດ້ຖືກເຊື່ອງໄວ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

3. ກົດລະບຽບຫນຶ່ງຄໍານິຍາມແມ່ນຜ່ອນຄາຍສໍາລັບປະເພດທີ່ບໍ່ມີການເບິ່ງເຫັນຢ່າງຊັດເຈນ
ສະເພາະທີ່ກຳນົດໄວ້ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນຫຼາຍກວ່າໜຶ່ງອັນ: ການປະກາດເຫຼົ່ານັ້ນ
ແມ່ນອະນຸຍາດຖ້າພວກມັນຖືກອະນຸຍາດເມື່ອຕົວເລືອກນີ້ບໍ່ໄດ້ໃຊ້.

ໃນລະຫັດໃຫມ່ມັນດີກວ່າທີ່ຈະໃຊ້ -fvisibility=hidden ແລະສົ່ງອອກຫ້ອງຮຽນເຫຼົ່ານັ້ນ
ມີຈຸດປະສົງເພື່ອເບິ່ງເຫັນພາຍນອກ. ແຕ່ຫນ້າເສຍດາຍ, ມັນເປັນໄປໄດ້ສໍາລັບລະຫັດທີ່ຈະອີງໃສ່,
ບາງທີອາດມີໂດຍບັງເອີນ, ກ່ຽວກັບພຶດຕິກໍາ Visual Studio.

ໃນບັນດາຜົນສະທ້ອນຂອງການປ່ຽນແປງເຫຼົ່ານີ້ແມ່ນວ່າສະມາຊິກຂໍ້ມູນສະຖິດຂອງປະເພດດຽວກັນ
ທີ່ມີຊື່ດຽວກັນແຕ່ກໍານົດໄວ້ໃນວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ແຕກຕ່າງກັນແມ່ນແຕກຕ່າງກັນ, ດັ່ງນັ້ນການປ່ຽນແປງ
ຫນຶ່ງບໍ່ປ່ຽນແປງອີກອັນຫນຶ່ງ; ແລະທີ່ຊີ້ໄປຫາສະມາຊິກທີ່ກໍານົດໃນ
ວັດຖຸທີ່ໃຊ້ຮ່ວມກັນທີ່ແຕກຕ່າງກັນອາດຈະບໍ່ສົມທຽບເທົ່າກັນ. ເມື່ອທຸງນີ້ຖືກມອບໃຫ້, ມັນແມ່ນ ກ
ການລະເມີດ ODR ເພື່ອກໍານົດປະເພດທີ່ມີຊື່ດຽວກັນແຕກຕ່າງກັນ.

-fvtable-verify=[std|ເບື້ອງຕົ້ນ|none]
ເປີດ (ຫຼືປິດ, ຖ້າໃຊ້ -fvtable-verify=ບໍ່ມີ) ຄຸນ​ນະ​ສົມ​ບັດ​ຄວາມ​ປອດ​ໄພ​ທີ່​ກວດ​ສອບ​ທີ່​
ແລ່ນເວລາ, ສໍາລັບທຸກໆການໂທ virtual, ວ່າຕົວຊີ້ vtable ຜ່ານການໂທແມ່ນ
ເຮັດແມ່ນຖືກຕ້ອງສໍາລັບປະເພດຂອງວັດຖຸ, ແລະບໍ່ໄດ້ຮັບການເສຍຫາຍຫຼືຂຽນທັບ.
ຖ້າຕົວຊີ້ vtable ທີ່ບໍ່ຖືກຕ້ອງຖືກກວດພົບໃນເວລາແລ່ນ, ຂໍ້ຜິດພາດຈະຖືກລາຍງານແລະ
ການ​ປະ​ຕິ​ບັດ​ໂຄງ​ການ​ແມ່ນ​ຢຸດ​ເຊົາ​ທັນ​ທີ​.

ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ໂຄງ​ສ້າງ​ຂໍ້​ມູນ​ທີ່​ໃຊ້​ເວ​ລາ​ທີ່​ຈະ​ໄດ້​ຮັບ​ການ​ສ້າງ​ຕັ້ງ​ຂຶ້ນ​ໃນ​ການ​ເລີ່ມ​ຕົ້ນ​ໂຄງ​ການ​, ເຊິ່ງ​ແມ່ນ​
ໃຊ້ສໍາລັບການກວດສອບຕົວຊີ້ vtable. ທາງເລືອກ std ແລະ ເບື້ອງຕົ້ນ ຄວບ​ຄຸມ
ໄລຍະເວລາຂອງເວລາທີ່ໂຄງສ້າງຂໍ້ມູນເຫຼົ່ານີ້ຖືກສ້າງຂຶ້ນ. ໃນທັງສອງກໍລະນີໂຄງສ້າງຂໍ້ມູນແມ່ນ
ການກໍ່ສ້າງກ່ອນທີ່ຈະປະຕິບັດເຖິງ "ຕົ້ນຕໍ". ການນໍາໃຊ້ -fvtable-verify=std ເຮັດໃຫ້ຂໍ້ມູນ
ໂຄງສ້າງທີ່ຈະຖືກສ້າງຂຶ້ນຫຼັງຈາກຫ້ອງສະຫມຸດຮ່ວມກັນໄດ້ຖືກໂຫລດແລະເລີ່ມຕົ້ນ.
-fvtable-verify=preinit ເຮັດໃຫ້ພວກເຂົາຖືກສ້າງຂຶ້ນກ່ອນທີ່ຈະມີຫ້ອງສະຫມຸດຮ່ວມກັນ
ໂຫລດ​ແລະ​ເລີ່ມ​ຕົ້ນ​.

ຖ້າຕົວເລືອກນີ້ປາກົດຫຼາຍຄັ້ງໃນແຖວຄໍາສັ່ງທີ່ມີຄ່າທີ່ແຕກຕ່າງກັນ
ລະບຸ, none ເອົາບູລິມະສິດສູງສຸດທັງສອງ std ແລະ ເບື້ອງຕົ້ນ; ເບື້ອງຕົ້ນ ໃຊ້ເວລາ
ບູລິມະສິດຫຼາຍກວ່າ std.

-fvtv-debug
ເມື່ອໃຊ້ຮ່ວມກັບ -fvtable-verify=std or -fvtable-verify=preinit, ສາເຫດ
ສະບັບ debug ຂອງຟັງຊັນ runtime ສໍາລັບຄຸນນະສົມບັດການກວດສອບ vtable ຈະເປັນ
ເອີ້ນວ່າ. ທຸງນີ້ຍັງເຮັດໃຫ້ compiler ບັນທຶກຂໍ້ມູນກ່ຽວກັບ vtable ໃດ
ຕົວຊີ້ວັດທີ່ມັນຊອກຫາສໍາລັບແຕ່ລະຫ້ອງຮຽນ. ຂໍ້ມູນນີ້ຖືກຂຽນໃສ່ໄຟລ໌ທີ່ມີຊື່
vtv_set_ptr_data.log ໃນໄດເລກະທໍລີທີ່ມີຊື່ໂດຍຕົວແປສະພາບແວດລ້ອມ VTV_LOGS_DIR
ຖ້າມັນຖືກກໍານົດໄວ້ຫຼືໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນ.

ຫມາຍ​ເຫດ​: ຄຸນ​ນະ​ສົມ​ບັດ​ນີ້​ ເພີ່ມເຕີມ ຂໍ້ມູນໃສ່ໄຟລ໌ບັນທຶກ. ຖ້າທ່ານຕ້ອງການໄຟລ໌ບັນທຶກສົດ, ເປັນ
ໃຫ້ແນ່ໃຈວ່າຈະລຶບອັນໃດນຶ່ງທີ່ມີຢູ່ແລ້ວອອກ.

-fvtv-ນັບ
ນີ້ແມ່ນທຸງດີບັກ. ເມື່ອໃຊ້ຮ່ວມກັບ -fvtable-verify=std or
-fvtable-verify=preinit, ນີ້ເຮັດໃຫ້ compiler ຕິດຕາມຈໍານວນທັງຫມົດຂອງ
ການໂທ virtual ທີ່ມັນພົບແລະຈໍານວນການຢືນຢັນທີ່ມັນໃສ່. ມັນຍັງ
ນັບຈໍານວນການໂທໄປຫາບາງຟັງຊັນຫ້ອງສະໝຸດເວລາແລ່ນທີ່ມັນໃສ່ ແລະ
ບັນທຶກຂໍ້ມູນນີ້ສໍາລັບແຕ່ລະຫນ່ວຍງານລວບລວມ. compiler ຂຽນຂໍ້ມູນນີ້
ກັບໄຟລ໌ທີ່ມີຊື່ vtv_count_data.log ໃນໄດເລກະທໍລີທີ່ມີຊື່ໂດຍຕົວແປສະພາບແວດລ້ອມ
VTV_LOGS_DIR ຖ້າມັນຖືກກໍານົດໄວ້ຫຼືໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນ. ມັນຍັງ
ນັບຂະຫນາດຂອງຊຸດຕົວຊີ້ vtable ສໍາລັບແຕ່ລະຫ້ອງຮຽນ, ແລະຂຽນຂໍ້ມູນນີ້
to vtv_class_set_sizes.log ໃນໄດເລກະທໍລີດຽວກັນ.

ຫມາຍ​ເຫດ​: ຄຸນ​ນະ​ສົມ​ບັດ​ນີ້​ ເພີ່ມເຕີມ ຂໍ້ມູນໄປຍັງໄຟລ໌ບັນທຶກ. ເພື່ອໃຫ້ໄດ້ຮັບໄຟລ໌ບັນທຶກສົດ, ໃຫ້ແນ່ໃຈວ່າ
ລຶບອັນໃດນຶ່ງທີ່ມີຢູ່ແລ້ວອອກ.

-fno-ອ່ອນແອ
ຢ່າໃຊ້ການສະຫນັບສະຫນູນສັນຍາລັກທີ່ອ່ອນແອ, ເຖິງແມ່ນວ່າມັນຖືກສະຫນອງໂດຍຕົວເຊື່ອມຕໍ່. ໂດຍຄ່າເລີ່ມຕົ້ນ, G++
ໃຊ້ສັນຍາລັກທີ່ອ່ອນແອຖ້າພວກມັນມີຢູ່. ທາງເລືອກນີ້ມີພຽງແຕ່ສໍາລັບການທົດສອບ, ແລະ
ບໍ່ຄວນໃຊ້ໂດຍຜູ້ໃຊ້ສຸດທ້າຍ; ມັນສົ່ງຜົນໃຫ້ລະຫັດ inferior ແລະບໍ່ມີຜົນປະໂຫຍດ.
ຕົວເລືອກນີ້ອາດຈະຖືກໂຍກຍ້າຍອອກໃນການປ່ອຍ G++ ໃນອະນາຄົດ.

-nostdinc++
ຢ່າຊອກຫາໄຟລ໌ header ໃນໄດເລກະທໍລີມາດຕະຖານສະເພາະກັບ C ++, ແຕ່ເຮັດ
ຍັງຊອກຫາໄດເລກະທໍລີມາດຕະຖານອື່ນໆ. (ທາງເລືອກນີ້ຖືກນໍາໃຊ້ໃນເວລາສ້າງ
ຫ້ອງສະໝຸດ C++.)

ນອກຈາກນັ້ນ, ທາງເລືອກໃນການເພີ່ມປະສິດທິພາບ, ການເຕືອນໄພ, ແລະການສ້າງລະຫັດເຫຼົ່ານີ້ມີຄວາມຫມາຍເທົ່ານັ້ນ
ສໍາ​ລັບ​ໂຄງ​ການ C++​:

- ວາບີ (C, Objective-C, C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ໃນເວລາທີ່ຈະແຈ້ງ -fabi-version=n ທາງເລືອກແມ່ນຖືກນໍາໃຊ້, ເຮັດໃຫ້ G ++ ເຕືອນເມື່ອມັນສ້າງ
ລະຫັດທີ່ອາດຈະບໍ່ເຂົ້າກັນໄດ້ກັບ vendor-neutral C++ ABI. ຕັ້ງແຕ່ G++ ດຽວນີ້
ເລີ່ມຕົ້ນເປັນ -fabi-version=0, - ວາບີ ບໍ່ມີຜົນໃດໆເວັ້ນເສຍແຕ່ວ່າ ABI ລຸ້ນເກົ່າແມ່ນ
ເລືອກ (ມີ -fabi-version=n) ຫຼືລຸ້ນທີ່ເຂົ້າກັນໄດ້ທີ່ເກົ່າກວ່າຖືກເລືອກ (ກັບ
-Wabi=n or -fabi-compat-version=n).

​ເຖິງ​ແມ່ນ​ວ່າ​ໄດ້​ມີ​ຄວາມ​ພະຍາຍາມ​ເພື່ອ​ເຕືອນ​ກ່ຽວ​ກັບ​ກໍລະນີ​ດັ່ງກ່າວ​ທັງ​ໝົດ, ​ແຕ່​ອາດ​ມີ​ບາງ​ຢ່າງ
ກໍລະນີທີ່ບໍ່ໄດ້ຖືກເຕືອນ, ເຖິງແມ່ນວ່າ G++ ກໍາລັງສ້າງລະຫັດທີ່ບໍ່ເຂົ້າກັນໄດ້.
ມັນອາດຈະເປັນກໍລະນີທີ່ມີການເຕືອນໄພເຖິງແມ່ນວ່າລະຫັດທີ່ເປັນ
ສ້າງຂຶ້ນແມ່ນເຂົ້າກັນໄດ້.

ທ່ານຄວນຂຽນລະຫັດຂອງທ່ານເພື່ອຫຼີກເວັ້ນການເຕືອນເຫຼົ່ານີ້ຖ້າຫາກວ່າທ່ານມີຄວາມກັງວົນກ່ຽວກັບ
ຄວາມຈິງທີ່ວ່າລະຫັດທີ່ສ້າງຂຶ້ນໂດຍ G ++ ອາດຈະບໍ່ເຂົ້າກັນໄດ້ກັບລະຫັດຄູ່ທີ່ສ້າງຂຶ້ນໂດຍ
compilers ອື່ນໆ.

- ວາບີ ຍັງສາມາດໃຊ້ກັບໝາຍເລກເວີຊັນທີ່ຊັດເຈນເພື່ອເຕືອນກ່ຽວກັບຄວາມເຂົ້າກັນໄດ້
ສະເພາະ - ສະ​ບັບ Fabi​ ລະດັບ, ຕົວຢ່າງ -Wabi=2 ເພື່ອເຕືອນກ່ຽວກັບການປ່ຽນແປງທີ່ກ່ຽວຂ້ອງກັບ
-fabi-version=2. ການລະບຸໝາຍເລກເວີຊັນຍັງກຳນົດ -fabi-compat-version=n.

ຄວາມບໍ່ເຂົ້າກັນທີ່ຮູ້ຈັກໃນ -fabi-version=2 (ເຊິ່ງເປັນຄ່າເລີ່ມຕົ້ນຈາກ GCC 3.4 ຫາ
4.9) ລວມມີ:

* ແມ່ແບບທີ່ມີຕົວກໍານົດການແມ່ແບບທີ່ບໍ່ແມ່ນປະເພດຂອງການອ້າງອິງໄດ້ຖືກທໍາລາຍ
ບໍ່ຖືກຕ້ອງ:

extern int N;
ແມ່ແບບ ໂຄງສ້າງ S {};
void n (ສ ) {2}

ນີ້ໄດ້ຖືກແກ້ໄຂໃນ -fabi-version=3.

* ປະເພດ vector ຂອງ SIMD ທີ່ປະກາດໃຊ້ "__attribute ((vector_size))" ໄດ້ຖືກທໍາລາຍໃນ
ວິທີການທີ່ບໍ່ແມ່ນມາດຕະຖານທີ່ບໍ່ອະນຸຍາດໃຫ້ສໍາລັບການ overloading ຂອງຫນ້າທີ່ກິນ vectors
ຂະຫນາດທີ່ແຕກຕ່າງກັນ.

mangling ໄດ້ມີການປ່ຽນແປງໃນ -fabi-version=4.

* "__attribute ((const))" ແລະ "noreturn" ຖືກທໍາລາຍເປັນຕົວກໍານົດປະເພດ, ແລະ
"decltype" ຂອງການປະກາດທໍາມະດາຖືກພັບອອກໄປ.

ບັນ​ຫາ​ລັກ​ສະ​ນະ​ເຫຼົ່າ​ນີ້​ໄດ້​ຮັບ​ການ​ແກ້​ໄຂ​ໃນ​ -fabi-version=5.

* ຕົວເລກທີ່ກຳນົດຂອບເຂດທີ່ຜ່ານການໂຕ້ແຍ້ງຕໍ່ກັບໜ້າທີ່ປ່ຽນແປງແມ່ນໄດ້ຮັບການສົ່ງເສີມຄື
unscoped enumerators, ເຮັດໃຫ້ "va_arg" ຈົ່ມ. ໃນເປົ້າຫມາຍສ່ວນໃຫຍ່ນີ້ບໍ່ໄດ້
ຕົວຈິງແລ້ວຜົນກະທົບຕໍ່ພາລາມິເຕີທີ່ຜ່ານ ABI, ຍ້ອນວ່າບໍ່ມີທາງທີ່ຈະຜ່ານການໂຕ້ຖຽງ
ຂະຫນາດນ້ອຍກວ່າ "int".

ນອກຈາກນີ້, ABI ໄດ້ປ່ຽນການບີບບັງຄັບຂອງຊຸດການໂຕ້ຖຽງແມ່ແບບ, "const_cast",
"static_cast", prefix increment/decrement, ແລະຟັງຊັນຂອບເຂດຫ້ອງຮຽນທີ່ໃຊ້ເປັນ a
ການໂຕ້ຖຽງແມ່ແບບ.

ບັນຫາເຫຼົ່ານີ້ໄດ້ຖືກແກ້ໄຂໃນ -fabi-version=6.

* Lambdas ຢູ່ໃນຂອບເຂດການໂຕ້ຖຽງເລີ່ມຕົ້ນຖືກທໍາລາຍຢ່າງບໍ່ຖືກຕ້ອງ, ແລະ ABI ໄດ້ປ່ຽນແປງ.
ການຫຼອກລວງຂອງ "nullptr_t".

ບັນຫາເຫຼົ່ານີ້ໄດ້ຖືກແກ້ໄຂໃນ -fabi-version=7.

* ໃນ​ເວ​ລາ​ທີ່​ການ​ຈັດ​ປະ​ເພດ​ການ​ທໍາ​ງານ​ທີ່​ມີ function-cv​-qualifiers​, ບໍ່​ມີ​ຄຸນ​ສົມ​ບັດ​
ປະເພດຟັງຊັນຖືກປະຕິບັດບໍ່ຖືກຕ້ອງໃນຖານະຜູ້ສະໝັກແທນ.

ນີ້ໄດ້ຖືກແກ້ໄຂໃນ -fabi-version=8.

ມັນຍັງເຕືອນກ່ຽວກັບການປ່ຽນແປງທີ່ກ່ຽວຂ້ອງກັບ psABI. ການປ່ຽນແປງ psABI ທີ່ຮູ້ຈັກໃນຈຸດນີ້
ປະກອບມີ:

* ສໍາລັບ SysV/x86-64, ສະຫະພັນທີ່ມີສະມາຊິກ "ຄູ່ຍາວ" ແມ່ນຜ່ານໃນຄວາມຊົງຈໍາ
ລະບຸໄວ້ໃນ psABI. ຍົກ​ຕົວ​ຢ່າງ:

ສະຫະພັນ U {
long double ld;
int i;
};

"ສະຫະພັນ U" ແມ່ນຜ່ານຄວາມຊົງຈໍາສະເຫມີ.

-Wabi-tag (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອປະເພດທີ່ມີແທັກ ABI ຖືກໃຊ້ໃນບໍລິບົດທີ່ບໍ່ມີແທັກ ABI ນັ້ນ.
ເບິ່ງ C ++ ຄຸນລັກສະນະ ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມກ່ຽວກັບ tags ABI.

-Wctor-dtor-ຄວາມເປັນສ່ວນຕົວ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຫ້ອງຮຽນເບິ່ງຄືວ່າໃຊ້ບໍ່ໄດ້ເພາະວ່າຜູ້ກໍ່ສ້າງຫຼືຕົວທໍາລາຍທັງຫມົດໃນນັ້ນ
ຊັ້ນຮຽນແມ່ນເປັນສ່ວນຕົວ, ແລະມັນບໍ່ມີທັງເພື່ອນຫຼືຟັງຊັນສະມາຊິກສະຖິດສາທາລະນະ.
ເຕືອນອີກວ່າບໍ່ມີວິທີການທີ່ບໍ່ແມ່ນສ່ວນຕົວ, ແລະມີສະມາຊິກສ່ວນຕົວຢ່າງໜ້ອຍໜຶ່ງຄົນ
ຟັງຊັນທີ່ບໍ່ແມ່ນ constructor ຫຼື destructor.

-Wdelete-ບໍ່ແມ່ນ virtual-dtor (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອ "ລຶບ" ຖືກນໍາໃຊ້ເພື່ອທໍາລາຍຕົວຢ່າງຂອງຫ້ອງຮຽນທີ່ມີ virtual
ຫນ້າທີ່ແລະຕົວທໍາລາຍທີ່ບໍ່ແມ່ນ virtual. ມັນບໍ່ປອດໄພທີ່ຈະລຶບຕົວຢ່າງທີ່ມາຈາກ
class ຜ່ານ pointer ຫາ base class ຖ້າ base class ບໍ່ມີ virtual
ຜູ້ທຳລາຍ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wliteral-suffix (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອສະຕຣິງ ຫຼືຕົວໜັງສືຖືກຕາມດ້ວຍ ud-suffix ເຊິ່ງບໍ່ແມ່ນ
ເລີ່ມຕົ້ນດ້ວຍຂີດກ້ອງ. ໃນຖານະເປັນສ່ວນຂະຫຍາຍທີ່ສອດຄ່ອງ, GCC ປະຕິບັດຕໍ່ທ້າຍເຊັ່ນ:
tokens preprocessing ແຍກຕ່າງຫາກເພື່ອຮັກສາຄວາມເຂົ້າກັນໄດ້ໃນດ້ານຫລັງກັບລະຫັດ
ທີ່ໃຊ້ຮູບແບບ macro ຈາກ " ". ຍົກ​ຕົວ​ຢ່າງ:

#define __STDC_FORMAT_MACROS
#ລວມທັງ
#ລວມ

int ຕົ້ນຕໍ () {
int64_t i64 = 123;
printf("int64 ຂອງຂ້ອຍ: %"PRId64"\n", i64);
}

ໃນກໍລະນີນີ້, "PRId64" ຖືກປະຕິບັດເປັນ token preprocessing ແຍກຕ່າງຫາກ.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

- ການ​ຂັດ​ຂວາງ​ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການຫັນປ່ຽນແຄບທີ່ຫ້າມໂດຍ C++11 ເກີດຂຶ້ນພາຍໃນ { }, ຕົວຢ່າງ

int i = { 2.2 }; // error: ແຄບຈາກ double ກັບ int

ທຸງນີ້ແມ່ນລວມຢູ່ໃນ - ຝາ ແລະ -Wc++11-compat.

ກັບ -std=c++11, -Wno-ແຄບ ສະກັດກັ້ນການວິນິດໄສທີ່ຕ້ອງການໂດຍມາດຕະຖານ.
ໃຫ້ສັງເກດວ່ານີ້ບໍ່ມີຜົນກະທົບຕໍ່ຄວາມຫມາຍຂອງລະຫັດທີ່ມີຮູບແບບທີ່ດີ; ການ​ປ່ຽນ​ແປງ​ທີ່​ແຄບ​ລົງ​
ຍັງຖືກພິຈາລະນາວ່າບໍ່ດີຢູ່ໃນສະພາບການ SFINAE.

- ຍົກເວັ້ນ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນໃນເວລາທີ່ noexcept-expression ປະເມີນເປັນຜິດເນື່ອງຈາກການໂທຫາຟັງຊັນ
ທີ່​ບໍ່​ມີ​ຂໍ້​ຍົກ​ເວັ້ນ​ການ​ຍົກ​ເວັ້ນ​ການ​ບໍ່​ຖິ້ມ (ເຊັ່ນ "ຖິ້ມ()" ຫຼື
"noexcept") ແຕ່ເປັນທີ່ຮູ້ຈັກໂດຍ compiler ວ່າບໍ່ເຄີຍຖິ້ມຂໍ້ຍົກເວັ້ນ.

-Wnon-virtual-dtor (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຫ້ອງຮຽນມີຟັງຊັນສະເໝືອນ ແລະຕົວທຳລາຍທີ່ບໍ່ສະເໝືອນທີ່ເຂົ້າເຖິງໄດ້
ຕົວຂອງມັນເອງຫຼືໃນຫ້ອງຮຽນພື້ນຖານ polymorphic ສາມາດເຂົ້າເຖິງໄດ້, ໃນກໍລະນີນີ້ມັນເປັນໄປໄດ້ແຕ່
ບໍ່ປອດໄພທີ່ຈະລຶບຕົວຢ່າງຂອງຊັ້ນຮຽນທີ່ໄດ້ມາຈາກຕົວຊີ້ໄປຫາຊັ້ນຮຽນນັ້ນເອງ
ຫຼືຊັ້ນພື້ນຖານ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍອັດຕະໂນມັດຖ້າ -Weffc++ ຖືກກໍານົດ.

- ຄໍາ​ສັ່ງ​ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຄໍາສັ່ງຂອງສະມາຊິກເບື້ອງຕົ້ນທີ່ລະບຸໄວ້ໃນລະຫັດບໍ່ກົງກັບຄໍາສັ່ງ
ໃນ​ທີ່​ເຂົາ​ເຈົ້າ​ຕ້ອງ​ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​. ຕົວ​ຢ່າງ:

ໂຄງສ້າງ A {
int i;
int j ;
A(): j (0), i (1) { }
};

compiler ຈັດລຽງການເລີ່ມຕົ້ນສະມາຊິກໃຫມ່ສໍາລັບ "i" ແລະ "j" ເພື່ອໃຫ້ກົງກັບ
ຄໍາ​ສັ່ງ​ຂອງ​ສະ​ມາ​ຊິກ​ປະ​ກາດ​, emitting ການ​ເຕືອນ​ໄພ​ຜົນ​ກະ​ທົບ​ນັ້ນ​. ການເຕືອນໄພນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍ - ຝາ.

-fext-ຕົວເລກ-ຕົວໜັງສື (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ຍອມຮັບຕົວໜັງສືຕາມຈິນຕະນາການ, ຈຸດຄົງທີ່, ຫຼືຕົວໜັງສືທີ່ກຳນົດໄວ້ໂດຍເຄື່ອງຈັກເປັນ GNU
ສ່ວນຂະຫຍາຍ. ເມື່ອຕົວເລືອກນີ້ຖືກປິດການຕໍ່ທ້າຍເຫຼົ່ານີ້ຈະຖືກຖືວ່າເປັນຜູ້ໃຊ້ C++11-
ກຳນົດຄຳຕໍ່ທ້າຍຕົວເລກຕາມຕົວໜັງສື. ອັນນີ້ຖືກເປີດເປັນຄ່າເລີ່ມຕົ້ນສຳລັບທຸກພາສາກ່ອນ C++11
ແລະພາສາ GNU ທັງໝົດ: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14. ນີ້
ທາງ​ເລືອກ​ແມ່ນ​ປິດ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ ISO C++ 11 ເປັນ​ຕົ້ນ​ໄປ (-std=c++11, ...).

ຕໍ່ໄປນີ້ -ວ... ທາງ​ເລືອກ​ບໍ່​ໄດ້​ຮັບ​ຜົນ​ກະ​ທົບ​ໂດຍ​ - ຝາ.

-Weffc++ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບການລະເມີດຂໍ້ແນະນຳຮູບແບບຕໍ່ໄປນີ້ຈາກ Scott Meyers' ປະສິດທິພາບ
C ++ ຊຸດ​ຂອງ​ປຶ້ມ​:

* ກໍາ​ນົດ​ຕົວ​ສ້າງ​ສໍາ​ເນົາ​ແລະ​ຕົວ​ປະ​ຕິ​ບັດ​ການ​ມອບ​ຫມາຍ​ສໍາ​ລັບ​ຫ້ອງ​ຮຽນ​ທີ່​ມີ​ການ​ເຄື່ອນ​ໄຫວ -
ຫນ່ວຍຄວາມຈໍາຈັດສັນ.

* ມັກການເລີ່ມຕົ້ນໃນການມອບໝາຍໃນຕົວສ້າງ.

* ມີ "operator=" ສົ່ງຄືນການອ້າງອີງເຖິງ * ນີ້.

* ຢ່າພະຍາຍາມສົ່ງຂໍ້ມູນອ້າງອີງເມື່ອເຈົ້າຕ້ອງສົ່ງຄືນວັດຖຸ.

* ຈໍາ​ແນກ​ລະ​ຫວ່າງ​ຄໍາ​ນໍາ​ຫນ້າ​ແລະ​ຮູບ​ແບບ postfix ຂອງ increment ແລະ​ການ​ຫຼຸດ​ລົງ​ປະ​ຕິ​ບັດ​ການ​.

* ຢ່າໂຫຼດ "&&", "||", ຫຼື ",".

ຕົວເລືອກນີ້ຍັງເປີດໃຊ້ງານ -Wnon-virtual-dtor, ເຊິ່ງເປັນຫນຶ່ງໃນ C ++ ທີ່ມີປະສິດທິພາບ
ຄຳແນະນຳ. ຢ່າງໃດກໍ່ຕາມ, ການກວດສອບແມ່ນຂະຫຍາຍອອກໄປເພື່ອເຕືອນກ່ຽວກັບການຂາດ virtual
destructor ໃນຫ້ອງຮຽນພື້ນຖານທີ່ບໍ່ແມ່ນ polymorphic ທີ່ສາມາດເຂົ້າເຖິງໄດ້ຄືກັນ.

ໃນ​ເວ​ລາ​ທີ່​ເລືອກ​ເອົາ​ທາງ​ເລືອກ​ນີ້​, ຮັບ​ຮູ້​ວ່າ​ຫົວ​ຫ້ອງ​ສະ​ຫມຸດ​ມາດ​ຕະ​ຖານ​ບໍ່​ໄດ້​ເຊື່ອ​ຟັງ​ທັງ​ຫມົດ​
ຂອງຄໍາແນະນໍາເຫຼົ່ານີ້; ໃຊ້ grep -v ເພື່ອກັ່ນຕອງຄຳເຕືອນເຫຼົ່ານັ້ນອອກ.

-Wstrict-null-sentinel (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບການນໍາໃຊ້ "NULL" ທີ່ບໍ່ມີການຂັບໄລ່ເປັນ sentinel. ເມື່ອລວບລວມພຽງແຕ່ກັບ GCC
ນີ້ແມ່ນຕົວສົ່ງທີ່ຖືກຕ້ອງ, ຍ້ອນວ່າ "NULL" ຖືກກໍານົດເປັນ "__null". ເຖິງແມ່ນວ່າມັນເປັນ null
ຕົວຊີ້ຄົງທີ່ແທນທີ່ຈະເປັນຕົວຊີ້ null, ມັນຮັບປະກັນວ່າມີຂະຫນາດດຽວກັນ
ເປັນຕົວຊີ້. ແຕ່ການນໍາໃຊ້ນີ້ແມ່ນບໍ່ສາມາດເຄື່ອນທີ່ໃນທົ່ວ compilers ທີ່ແຕກຕ່າງກັນ.

-Wno-ບໍ່ແມ່ນແມ່ແບບ-ເພື່ອນ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ປິດການເຕືອນໄພເມື່ອຟັງຊັນເພື່ອນທີ່ບໍ່ແມ່ນແມ່ແບບຖືກປະກາດພາຍໃນແມ່ແບບ.
ນັບຕັ້ງແຕ່ການມາເຖິງຂອງການສະຫນັບສະຫນູນສະເພາະແມ່ແບບທີ່ຊັດເຈນໃນ G++, ຖ້າຊື່ຂອງ
ໝູ່ແມ່ນ ID ທີ່ບໍ່ມີເງື່ອນໄຂ (ເຊັ່ນ: ຫມູ່ເພື່ອນ foo(int)), ການກໍານົດພາສາ C++
ຮຽກຮ້ອງໃຫ້ເພື່ອນປະກາດຫຼືກໍານົດຫນ້າທີ່ທໍາມະດາ, nontemplate. (ພາກ
14.5.3). ກ່ອນທີ່ G++ ປະຕິບັດຂໍ້ມູນສະເພາະທີ່ຊັດເຈນ, ids ທີ່ບໍ່ມີເງື່ອນໄຂອາດຈະເປັນ
ຖືກຕີຄວາມວ່າເປັນຄວາມຊ່ຽວຊານສະເພາະຂອງຟັງຊັນ templatized. ເນື່ອງຈາກວ່ານີ້
ພຶດຕິກຳທີ່ບໍ່ສອດຄ່ອງບໍ່ແມ່ນພຶດຕິກຳເລີ່ມຕົ້ນສຳລັບ G++,
-Wnon-ແມ່ແບບ-ເພື່ອນ ອະນຸຍາດໃຫ້ compiler ກວດສອບລະຫັດທີ່ມີຢູ່ແລ້ວສໍາລັບບັນຫາທີ່ເປັນໄປໄດ້
ຈຸດໆ ແລະເປີດຢູ່ຕາມຄ່າເລີ່ມຕົ້ນ. ພຶດຕິກໍາການລວບລວມໃຫມ່ນີ້ສາມາດຖືກປິດດ້ວຍ
-Wno-ບໍ່ແມ່ນແມ່ແບບ-ເພື່ອນ, ເຊິ່ງຮັກສາລະຫັດ compiler ທີ່ສອດຄ່ອງແຕ່ປິດການໃຊ້ງານ
ເຕືອນໄພທີ່ເປັນປະໂຫຍດ.

-Wold-style-cast (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າຫາກວ່າຮູບແບບເກົ່າ (C-style) cast ເປັນປະເພດທີ່ບໍ່ແມ່ນ void ຖືກນໍາໃຊ້ພາຍໃນໂຄງການ C++.
ການຄາສທ໌ແບບໃໝ່ ("dynamic_cast", "static_cast", "reinterpret_cast", ແລະ
"const_cast") ມີຄວາມສ່ຽງໜ້ອຍຕໍ່ກັບຜົນກະທົບທີ່ບໍ່ໄດ້ຕັ້ງໃຈ ແລະຊອກຫາໄດ້ງ່າຍກວ່າ.

-Woverloaded-virtual (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການປະກາດຟັງຊັນເຊື່ອງຟັງຊັນສະເໝືອນຈາກຊັ້ນພື້ນຖານ. ສໍາລັບ
ຕົວຢ່າງ, ໃນ:

ໂຄງສ້າງ A {
virtual void f();
};

ໂຄງສ້າງ B: ສາທາລະນະ A {
void f(int);
};

ຮຸ່ນ "A" ຂອງ "f" ຖືກເຊື່ອງໄວ້ໃນ "B", ແລະລະຫັດເຊັ່ນ:

ຂ* ຂ;
b->f();

ລົ້ມເຫລວໃນການລວບລວມ.

-Wno-pmf-ແປງ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ປິດການນຳໃຊ້ການວິນິໄສສຳລັບການປ່ຽນຕົວຊີ້ທີ່ຜູກມັດເປັນໜ້າທີ່ຂອງສະມາຊິກໃຫ້ເປັນແບບທຳມະດາ
ຕົວຊີ້.

-Wsign-promo (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນໃນເວລາທີ່ການແກ້ໄຂ overload ເລືອກການສົ່ງເສີມການຈາກປະເພດທີ່ບໍ່ໄດ້ເຊັນຫຼື enumerated ກັບ
ປະເພດທີ່ມີລາຍເຊັນ, ຫຼາຍກວ່າການປ່ຽນເປັນປະເພດທີ່ບໍ່ມີລາຍເຊັນຂອງຂະຫນາດດຽວກັນ. ທີ່ຜ່ານມາ
ລຸ້ນ G ++ ພະຍາຍາມຮັກສາຄວາມບໍ່ລົງນາມ, ແຕ່ມາດຕະຖານບັງຄັບໃຊ້ໃນປະຈຸບັນ
ພຶດຕິ ກຳ.

ທາງເລືອກໃນການ ການຄວບຄຸມ Objective-C ແລະ ຈຸດປະສົງ-C++ ພາສາພາສາ
(ໝາຍເຫດ: ຄູ່ມືນີ້ບໍ່ໄດ້ອະທິບາຍພາສາ Objective-C ແລະ Objective-C++
ຕົວເອງ

ພາກນີ້ອະທິບາຍຕົວເລືອກແຖວຄໍາສັ່ງທີ່ມີຄວາມຫມາຍສໍາລັບ Objective-C ເທົ່ານັ້ນ
ແລະໂຄງການ Objective-C++. ທ່ານຍັງສາມາດໃຊ້ GNU ທີ່ບໍ່ຂຶ້ນກັບພາສາສ່ວນໃຫຍ່
ທາງເລືອກໃນການລວບລວມ. ຕົວຢ່າງ, ທ່ານອາດຈະລວບລວມໄຟລ໌ some_class.m ເຊັ່ນນີ້:

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

ໃນຕົວຢ່າງນີ້, -fgnu-runtime ເປັນທາງເລືອກທີ່ຫມາຍຄວາມວ່າພຽງແຕ່ສໍາລັບ Objective-C ແລະ Objective-C ++
ໂຄງການ; ທ່ານສາມາດນໍາໃຊ້ທາງເລືອກອື່ນກັບພາສາໃດໆທີ່ສະຫນັບສະຫນູນໂດຍ GCC.

ໃຫ້ສັງເກດວ່ານັບຕັ້ງແຕ່ Objective-C ເປັນການຂະຫຍາຍຂອງພາສາ C, Objective-C compilations
ອາດຈະໃຊ້ຕົວເລືອກສະເພາະກັບ C front-end (ເຊັ່ນ: - ແບບດັ້ງເດີມ). ເຊັ່ນດຽວກັນ,
ການລວບລວມ Objective-C++ ອາດຈະໃຊ້ຕົວເລືອກສະເພາະ C++ (ເຊັ່ນ: - ວາບີ).

ນີ້ແມ່ນບັນຊີລາຍຊື່ຂອງທາງເລືອກທີ່ເປັນ ພຽງແຕ່ ສໍາລັບການລວບລວມ Objective-C ແລະ Objective-C++
ໂຄງການ:

-fconstant-string-class=ຊື່​ຫ້ອງ​
ການນໍາໃຊ້ ຊື່​ຫ້ອງ​ ເປັນຊື່ຂອງຫ້ອງຮຽນເພື່ອ instantiate ສໍາລັບແຕ່ລະສາຍອັກສອນ
ລະບຸດ້ວຍ syntax "@"..."". ຊື່ຫ້ອງຮຽນເລີ່ມຕົ້ນແມ່ນ "NXConstantString" ຖ້າ
ເວລາແລ່ນ GNU ຖືກໃຊ້, ແລະ "NSConstantString" ຖ້າເວລາແລ່ນ NeXT ກໍາລັງຖືກ
ໃຊ້ (ເບິ່ງຂ້າງລຸ່ມນີ້). ໄດ້ -fconstant-cfstrings ທາງ​ເລືອກ, ຖ້າ​ຫາກ​ວ່າ​ປະ​ຈຸ​ບັນ, overrides ໄດ້
-fconstant-string-class ການຕັ້ງຄ່າແລະເຮັດໃຫ້ເກີດ "@"..."" ຕົວຫນັງສືຖືກວາງໄວ້ເປັນຄົງທີ່
CoreFoundation strings.

-fgnu-runtime
ສ້າງລະຫັດວັດຖຸທີ່ເຂົ້າກັນໄດ້ກັບເວລາແລ່ນ GNU Objective-C ມາດຕະຖານ. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນຂອງລະບົບສ່ວນໃຫຍ່.

-fnext-runtime
ສ້າງຜົນຜະລິດທີ່ເຂົ້າກັນໄດ້ກັບເວລາແລ່ນ NeXT. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບ NeXT-based
ລະບົບ, ລວມທັງ Darwin ແລະ Mac OS X. ມະຫາພາກ "__NEXT_RUNTIME__" ແມ່ນຖືກກໍານົດໄວ້ລ່ວງໜ້າຖ້າ
(ແລະພຽງແຕ່ຖ້າ) ທາງເລືອກນີ້ຖືກນໍາໃຊ້.

-fno-nil-receivers
ສົມມຸດວ່າຂໍ້ຄວາມ Objective-C ທັງໝົດສົ່ງໄປ ("[ຂໍ້ຄວາມຜູ້ຮັບ: arg]") ໃນນີ້
ຫນ່ວຍບໍລິການແປພາສາໃຫ້ແນ່ໃຈວ່າຜູ້ຮັບບໍ່ແມ່ນ "nil". ນີ້ອະນຸຍາດໃຫ້ສໍາລັບການເພີ່ມເຕີມ
ຈຸດເຂົ້າທີ່ມີປະສິດທິພາບໃນ runtime ທີ່ຈະໃຊ້. ທາງເລືອກນີ້ແມ່ນມີພຽງແຕ່ຢູ່ໃນ
ສົມທົບກັບ NeXT runtime ແລະ ABI ຮຸ່ນ 0 ຫຼື 1.

-fobjc-abi-version=n
ໃຊ້ສະບັບ n ຂອງ Objective-C ABI ສໍາລັບ runtime ທີ່ເລືອກ. ທາງເລືອກນີ້ແມ່ນ
ໃນປັດຈຸບັນສະຫນັບສະຫນູນພຽງແຕ່ສໍາລັບການແລ່ນ NeXT. ໃນກໍລະນີດັ່ງກ່າວ, ສະບັບ 0 ແມ່ນ
ABI ແບບດັ້ງເດີມ (32-ບິດ) ໂດຍບໍ່ມີການຮອງຮັບຄຸນສົມບັດ ແລະຈຸດປະສົງ-C 2.0 ອື່ນໆ
ເພີ່ມເຕີມ. ຮຸ່ນ 1 ແມ່ນ ABI ແບບດັ້ງເດີມ (32-ບິດ) ທີ່ມີການສະຫນັບສະຫນູນຄຸນສົມບັດແລະ
ເພີ່ມເຕີມ Objective-C 2.0 ອື່ນໆ. ຮຸ່ນ 2 ແມ່ນ ABI ທີ່ທັນສະໄຫມ (64-bit). ຖ້າບໍ່ມີຫຍັງ
ລະບຸໄວ້, ຄ່າເລີ່ມຕົ້ນແມ່ນເວີຊັນ 0 ໃນເຄື່ອງເປົ້າໝາຍ 32-ບິດ, ແລະເວີຊັນ 2 ໃນ 64-ບິດ.
ເຄື່ອງ​ເປົ້າ​ຫມາຍ​.

-fobjc-call-cxx-cdtors
ສໍາລັບແຕ່ລະຫ້ອງຮຽນ Objective-C, ກວດເບິ່ງວ່າຕົວແປຕົວຢ່າງໃດນຶ່ງຂອງມັນແມ່ນ C++ object
ກັບ constructor ເລີ່ມຕົ້ນທີ່ບໍ່ແມ່ນ trivial. ຖ້າເປັນດັ່ງນັ້ນ, ສັງເຄາະພິເສດ "- (id)
.cxx_construct" instance method ທີ່ເອີ້ນໃຊ້ຕົວສ້າງເລີ່ມຕົ້ນທີ່ບໍ່ແມ່ນເລື່ອງຫຍໍ້ໆ
ຕົວແປດັ່ງກ່າວ, ໃນຄໍາສັ່ງ, ແລະຫຼັງຈາກນັ້ນກັບຄືນ "ຕົນເອງ". ເຊັ່ນດຽວກັນ, ກວດເບິ່ງວ່າມີ
ຕົວແປ instance ແມ່ນວັດຖຸ C ++ ທີ່ມີຕົວທໍາລາຍທີ່ບໍ່ແມ່ນເລື່ອງເລັກໆນ້ອຍໆ, ແລະຖ້າເປັນດັ່ງນັ້ນ, ສັງເຄາະ.
ພິເສດ "- (void).cxx_destruct" ວິທີການທີ່ດໍາເນີນການ destructors ເລີ່ມຕົ້ນດັ່ງກ່າວທັງຫມົດ, ໃນ
ຄໍາສັ່ງປີ້ນກັບກັນ.

ວິທີການ "- (id).cxx_construct" ແລະ "- (void).cxx_destruct" ດັ່ງນັ້ນຈຶ່ງສ້າງພຽງແຕ່
ດໍາເນີນການກ່ຽວກັບຕົວແປ instance ທີ່ປະກາດໃນຫ້ອງຮຽນ Objective-C ໃນປະຈຸບັນ, ແລະບໍ່ແມ່ນສິ່ງເຫຼົ່ານັ້ນ
ສືບທອດມາຈາກ superclasses. ມັນເປັນຄວາມຮັບຜິດຊອບຂອງເວລາແລ່ນ Objective-C ເພື່ອ
ຮຽກຮ້ອງວິທີການດັ່ງກ່າວທັງໝົດໃນລຳດັບການສືບທອດຂອງວັດຖຸ. The "- (id)
ວິທີການ .cxx_construct" ຖືກເອີ້ນໂດຍ runtime ທັນທີຫຼັງຈາກວັດຖຸໃຫມ່
ຕົວຢ່າງແມ່ນຈັດສັນ; ວິທີການ "- (void).cxx_destruct" ຖືກເອີ້ນໃນທັນທີ
ກ່ອນທີ່ runtime ຈະ deallocate a object instance.

ໃນ​ຖາ​ນະ​ເປັນ​ຂອງ​ລາຍ​ລັກ​ອັກ​ສອນ​ນີ້​, ພຽງ​ແຕ່​ແລ່ນ NeXT ໃນ Mac OS X 10.4 ແລະ​ຕໍ່​ມາ​ມີ​ການ​ສະ​ຫນັບ​ສະ​ຫນູນ​ສໍາ​ລັບ​ການ​
ເອີ້ນວິທີການ "- (id).cxx_construct" ແລະ "- (void).cxx_destruct".

-fobjc-ສົ່ງໂດຍກົງ
ອະນຸຍາດໃຫ້ກະໂດດໄວໄປຫາຕົວສົ່ງຂໍ້ຄວາມ. ກ່ຽວກັບ Darwin ນີ້ແມ່ນສໍາເລັດໂດຍຜ່ານ
com ຫນ້າ.

-fobjc-ຂໍ້ຍົກເວັ້ນ
ເປີດໃຊ້ການຮອງຮັບ syntactic ສໍາລັບການຈັດການຂໍ້ຍົກເວັ້ນທີ່ມີໂຄງສ້າງໃນ Objective-C, ຄ້າຍຄືກັນກັບ
ສິ່ງທີ່ສະເຫນີໂດຍ C ++ ແລະ Java. ທາງເລືອກນີ້ຈໍາເປັນຕ້ອງໃຊ້ Objective-C
ຄໍາສໍາຄັນ @try, @throw, @catch, @finally ແລະ @synchronized. ທາງເລືອກນີ້ສາມາດໃຊ້ໄດ້
ກັບທັງເວລາແລ່ນ GNU ແລະເວລາແລ່ນ NeXT (ແຕ່ບໍ່ມີໃຫ້ຮ່ວມກັບ
ເວລາແລ່ນ NeXT ໃນ Mac OS X 10.2 ແລະກ່ອນໜ້ານັ້ນ).

-fobjc-gc
ເປີດໃຊ້ການເກັບຂີ້ເຫຍື້ອ (GC) ໃນໂຄງການ Objective-C ແລະ Objective-C++. ທາງເລືອກນີ້
ສາມາດໃຊ້ໄດ້ກັບ NeXT runtime ເທົ່ານັ້ນ; GNU runtime ມີຂີ້ເຫຍື້ອທີ່ແຕກຕ່າງກັນ
ການປະຕິບັດການເກັບກໍາທີ່ບໍ່ຈໍາເປັນຕ້ອງມີທຸງ compiler ພິເສດ.

-fobjc-nilcheck
ສໍາລັບເວລາແລ່ນ NeXT ກັບລຸ້ນ 2 ຂອງ ABI, ໃຫ້ກວດເບິ່ງວິທີການຮັບ nil
invocations ກ່ອນທີ່ຈະດໍາເນີນການໂທຫາວິທີການຕົວຈິງ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນແລະສາມາດເປັນ
ປິດການໃຊ້ງານ -fno-objc-nilcheck. ວິທີການຫ້ອງຮຽນ ແລະການໂທ super ແມ່ນບໍ່ເຄີຍຖືກກວດສອບ
ສໍາລັບ nil ໃນວິທີການນີ້ບໍ່ວ່າທຸງນີ້ຖືກຕັ້ງເປັນ. ໃນປັດຈຸບັນທຸງນີ້ເຮັດ
ບໍ່ມີຫຍັງເມື່ອເວລາແລ່ນ GNU, ຫຼືລຸ້ນເກົ່າຂອງ NeXT runtime ABI, ຖືກໃຊ້.

-fobjc-std=objc1
ສອດຄ່ອງກັບໄວຍະກອນພາສາຂອງ Objective-C 1.0, ພາສາທີ່ຮັບຮູ້ໂດຍ GCC 4.0.
ອັນນີ້ມີຜົນກະທົບພຽງແຕ່ການເພີ່ມ Objective-C ກັບພາສາ C/C++; ມັນບໍ່ມີຜົນກະທົບ
ການປະຕິບັດຕາມມາດຕະຖານ C/C++, ເຊິ່ງຖືກຄວບຄຸມໂດຍພາສາ C/C++ ແຍກຕ່າງຫາກ
ທຸງທາງເລືອກ. ເມື່ອຕົວເລືອກນີ້ຖືກໃຊ້ກັບ Objective-C ຫຼື Objective-C++
compiler, ທຸກ syntax Objective-C ທີ່ບໍ່ໄດ້ຮັບການຮັບຮູ້ໂດຍ GCC 4.0 ຖືກປະຕິເສດ. ນີ້
ເປັນປະໂຫຍດຖ້າທ່ານຕ້ອງການໃຫ້ແນ່ໃຈວ່າລະຫັດ Objective-C ຂອງທ່ານສາມາດຖືກລວບລວມດ້ວຍ
GCC ລຸ້ນເກົ່າ.

-freplace-objc-classes
ປ່ອຍຕົວຊີ້ບອກເຄື່ອງໝາຍພິເສດ ld(1​) ບໍ່ໃຫ້ເຊື່ອມໂຍງຢ່າງສະຖິດຢູ່ໃນວັດຖຸຜົນໄດ້ຮັບ
ໄຟລ໌, ແລະອະນຸຍາດໃຫ້ ຍ້ອມ(1​) ເພື່ອໂຫຼດມັນໃນເວລາແລ່ນແທນ. ນີ້ແມ່ນໃຊ້ໃນ
ສົມທົບກັບ Fix-and-Continue debugging mode, ບ່ອນທີ່ໄຟລ໌ວັດຖຸຢູ່ໃນ
ຄໍາຖາມອາດຈະຖືກລວບລວມຄືນໃຫມ່ແລະໂຫຼດໃຫມ່ແບບເຄື່ອນໄຫວໃນໄລຍະໂຄງການ
ການ​ປະ​ຕິ​ບັດ​, ໂດຍ​ບໍ່​ຈໍາ​ເປັນ​ຕ້ອງ restart ໂຄງ​ການ​ຕົວ​ຂອງ​ມັນ​ເອງ​. ໃນປັດຈຸບັນ, ແກ້ໄຂແລະ
ສືບຕໍ່ການທໍາງານແມ່ນສາມາດໃຊ້ໄດ້ໂດຍສົມທົບກັບ NeXT runtime ໃນ Mac ເທົ່ານັ້ນ
OS X 10.3 ແລະຕໍ່ມາ.

-fzero-link
ເມື່ອລວບລວມເວລາແລ່ນ NeXT, ຄອມພີວເຕີປົກກະຕິແທນການໂທຫາ
"objc_getClass("...")" (ເມື່ອຊື່ຂອງຊັ້ນແມ່ນຮູ້ຈັກໃນເວລາລວບລວມ) ກັບ
ການອ້າງອິງຊັ້ນແບບຄົງທີ່ທີ່ໄດ້ຮັບການເລີ່ມຕົ້ນໃນເວລາໂຫຼດ, ເຊິ່ງປັບປຸງເວລາແລ່ນ
ການປະຕິບັດ. ການ​ລະ​ບຸ -fzero-link ທຸງສະກັດກັ້ນພຶດຕິກໍາແລະສາເຫດນີ້
ໂທຫາ "objc_getClass("...")" ທີ່ຈະຮັກສາໄວ້. ນີ້ແມ່ນເປັນປະໂຫຍດໃນ Zero-Link
ໂຫມດ debugging, ເນື່ອງຈາກວ່າມັນອະນຸຍາດໃຫ້ສໍາລັບການປະຕິບັດຊັ້ນຮຽນສ່ວນບຸກຄົນໄດ້ຮັບການດັດແກ້
ໃນ​ລະ​ຫວ່າງ​ການ​ປະ​ຕິ​ບັດ​ໂຄງ​ການ​. ປະຈຸບັນ GNU runtime ຮັກສາການໂທໄປຫາ
"objc_get_class("...")" ໂດຍບໍ່ຄໍານຶງເຖິງຕົວເລືອກແຖວຄໍາສັ່ງ.

-fno-local-ivars
ໂດຍຄ່າເລີ່ມຕົ້ນຕົວແປ instance ໃນ Objective-C ສາມາດເຂົ້າເຖິງໄດ້ຄືກັບວ່າພວກມັນຢູ່ໃນທ້ອງຖິ່ນ
ຕົວແປຈາກພາຍໃນວິທີການຂອງຫ້ອງຮຽນທີ່ເຂົາເຈົ້າໄດ້ຖືກປະກາດໃນ. ນີ້ສາມາດນໍາໄປສູ່ການ
shadowing ລະຫວ່າງຕົວແປ instance ແລະຕົວແປອື່ນໆທີ່ປະກາດຢູ່ໃນທ້ອງຖິ່ນ
ພາຍໃນວິທີການຫ້ອງຮຽນຫຼືທົ່ວໂລກທີ່ມີຊື່ດຽວກັນ. ການ​ລະ​ບຸ -fno-local-ivars
ທຸງປິດການທໍາງານນີ້ດັ່ງນັ້ນຈຶ່ງຫຼີກເວັ້ນບັນຫາ shadowing ຕົວປ່ຽນແປງ.

-fivar-visibility=[ສາທາລະນະ|ປ້ອງກັນ|ສ່ວນຕົວ|ຊຸດ]
ຕັ້ງຄ່າການເບິ່ງເຫັນຕົວແປ instance ເລີ່ມຕົ້ນເປັນທາງເລືອກທີ່ລະບຸໄວ້ເພື່ອໃຫ້ຕົວຢ່າງນັ້ນ
ຕົວແປທີ່ປະກາດຢູ່ນອກຂອບເຂດຂອງຄໍາແນະນໍາຕົວແກ້ໄຂການເຂົ້າເຖິງໃດໆທີ່ເປັນຄ່າເລີ່ມຕົ້ນຂອງ
ການ​ສັງ​ເກດ​ທີ່​ລະ​ບຸ​ໄວ້​.

-gen-decls
Dump ການປະກາດການໂຕ້ຕອບສໍາລັບທຸກຊັ້ນຮຽນທີ່ເຫັນໃນໄຟລ໌ແຫຼ່ງໄປຫາໄຟລ໌ທີ່ມີຊື່
sourcename.decl.

-Wassign-intercept (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນທຸກຄັ້ງທີ່ການມອບໝາຍ Objective-C ຖືກຂັດຂວາງໂດຍຜູ້ເກັບຂີ້ເຫຍື້ອ.

-Wno-protocol (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ຖ້າຫ້ອງຮຽນຖືກປະກາດໃຫ້ປະຕິບັດໂປໂຕຄອນ, ການເຕືອນໄພແມ່ນອອກສໍາລັບທຸກໆວິທີການ
ໃນໂປໂຕຄອນທີ່ບໍ່ໄດ້ຖືກປະຕິບັດໂດຍຫ້ອງຮຽນ. ພຶດຕິກໍາເລີ່ມຕົ້ນແມ່ນເພື່ອ
ອອກຄໍາເຕືອນສໍາລັບທຸກໆວິທີການທີ່ບໍ່ໄດ້ປະຕິບັດຢ່າງຊັດເຈນໃນຫ້ອງຮຽນ, ເຖິງແມ່ນວ່າ a
ການປະຕິບັດວິທີການແມ່ນສືບທອດມາຈາກ superclass. ຖ້າທ່ານໃຊ້ -Wno-protocol
ທາງເລືອກ, ຫຼັງຈາກນັ້ນວິທີການທີ່ສືບທອດມາຈາກ superclass ແມ່ນຖືວ່າຖືກປະຕິບັດ,
ແລະບໍ່ມີການເຕືອນໄພໃຫ້ເຂົາເຈົ້າ.

- ຜູ້​ເລືອກ​ (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າວິທີການຫຼາຍປະເພດທີ່ແຕກຕ່າງກັນສໍາລັບຕົວເລືອກດຽວກັນພົບໃນລະຫວ່າງ
ການລວບລວມ. ການກວດສອບແມ່ນປະຕິບັດໃນບັນຊີລາຍຊື່ຂອງວິທີການໃນຂັ້ນຕອນສຸດທ້າຍຂອງ
ການລວບລວມ. ນອກຈາກນັ້ນ, ການກວດສອບແມ່ນດໍາເນີນການສໍາລັບແຕ່ລະຕົວເລືອກທີ່ປາກົດຢູ່ໃນ a
"@selector(...)" ສະແດງອອກ, ແລະວິທີການທີ່ສອດຄ້ອງກັນສໍາລັບຕົວເລືອກນັ້ນແມ່ນ
ພົບເຫັນໃນລະຫວ່າງການລວບລວມ. ເນື່ອງຈາກວ່າການກວດສອບເຫຼົ່ານີ້ສະແກນຕາຕະລາງວິທີການພຽງແຕ່ໃນຕອນທ້າຍຂອງ
ຂອງການລວບລວມ, ຄໍາເຕືອນເຫຼົ່ານີ້ບໍ່ໄດ້ຜະລິດຖ້າຫາກວ່າຂັ້ນຕອນສຸດທ້າຍຂອງການລວບລວມແມ່ນ
ບໍ່ບັນລຸໄດ້, ສໍາລັບການຍົກຕົວຢ່າງເນື່ອງຈາກວ່າມີຄວາມຜິດພາດທີ່ພົບເຫັນໃນລະຫວ່າງການລວບລວມ, ຫຼືເນື່ອງຈາກວ່າ
-fsyntax ເທົ່ານັ້ນ ທາງເລືອກແມ່ນຖືກນໍາໃຊ້.

-Wstrict-select-match (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າຫາກວ່າຫຼາຍວິທີການທີ່ມີການໂຕ້ຖຽງທີ່ແຕກຕ່າງກັນແລະ / ຫຼືປະເພດຜົນຕອບແທນແມ່ນພົບເຫັນສໍາລັບ a
ຕົວເລືອກທີ່ໃຫ້ໃນເວລາພະຍາຍາມສົ່ງຂໍ້ຄວາມໂດຍໃຊ້ຕົວເລືອກນີ້ໄປຫາຜູ້ຮັບ
ພິມ "id" ຫຼື "Class". ເມື່ອທຸງນີ້ຖືກປິດ (ເຊິ່ງເປັນພຶດຕິກໍາເລີ່ມຕົ້ນ), the
compiler ຍົກເລີກການເຕືອນດັ່ງກ່າວຖ້າຫາກວ່າຄວາມແຕກຕ່າງໃດໆທີ່ພົບເຫັນແມ່ນຖືກຈໍາກັດຢູ່ໃນປະເພດທີ່ແບ່ງປັນ
ຂະຫນາດດຽວກັນແລະສອດຄ່ອງ.

-Wunddeclared-ເລືອກ (Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າການສະແດງອອກ "@selector(...)" ອ້າງອີງເຖິງຕົວເລືອກທີ່ຍັງບໍ່ໄດ້ປະກາດ. ກ
ໂຕເລືອກແມ່ນຖືວ່າບໍ່ຖືກປະກາດ ຖ້າບໍ່ມີວິທີການທີ່ມີຊື່ນັ້ນຖືກປະກາດມາກ່ອນ
ສະແດງອອກ "@selector(...)" ຢ່າງຊັດເຈນຢູ່ໃນ @interface ຫຼື @protocol
ປະກາດ, ຫຼື implicitly ໃນພາກສ່ວນ @implementation. ທາງເລືອກນີ້ປະຕິບັດສະເຫມີ
ການກວດສອບຂອງມັນທັນທີທີ່ "@selector(...)" ສະແດງອອກ, ໃນຂະນະທີ່ - ຜູ້​ເລືອກ​ ພຽງແຕ່
ປະຕິບັດການກວດສອບຂອງຕົນໃນຂັ້ນຕອນສຸດທ້າຍຂອງການລວບລວມ. ນີ້ຍັງບັງຄັບໃຊ້ລະຫັດ
ສົນທິສັນຍາສະໄຕລ໌ທີ່ວິທີການແລະຕົວເລືອກຕ້ອງໄດ້ຮັບການປະກາດກ່ອນທີ່ຈະຖືກນໍາໃຊ້.

-print-objc-runtime-info
ສ້າງສ່ວນຫົວ C ທີ່ອະທິບາຍໂຄງສ້າງທີ່ໃຫຍ່ທີ່ສຸດທີ່ຜ່ານໂດຍມູນຄ່າ, ຖ້າມີ.

ທາງເລືອກໃນການ to ການຄວບຄຸມ ການວິນິດໄສ ຂໍ້ຄວາມ ການສ້າງຮູບແບບ
ຕາມປະເພນີ, ຂໍ້ຄວາມວິນິດໄສໄດ້ຖືກຈັດຮູບແບບໂດຍບໍ່ຄໍານຶງເຖິງອຸປະກອນຜົນຜະລິດ
ລັກສະນະ (ເຊັ່ນ: ຄວາມກວ້າງຂອງມັນ, ...). ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້​ທາງ​ເລືອກ​ທີ່​ອະ​ທິ​ບາຍ​ຂ້າງ​ລຸ່ມ​ນີ້​ເພື່ອ​ຄວບ​ຄຸມ​
ຂັ້ນຕອນການຈັດຮູບແບບສໍາລັບຂໍ້ຄວາມການວິນິດໄສ, ເຊັ່ນ: ຈໍານວນຕົວອັກສອນຕໍ່ແຖວ, ເລື້ອຍໆເທົ່າໃດ
ຂໍ້ມູນສະຖານທີ່ແຫຼ່ງຄວນໄດ້ຮັບການລາຍງານ. ໃຫ້ສັງເກດວ່າບາງພາສາດ້ານຫນ້າອາດຈະ
ບໍ່ໃຫ້ກຽດທາງເລືອກເຫຼົ່ານີ້.

-fmessage-length=n
ພະ​ຍາ​ຍາມ​ຈັດ​ຮູບ​ແບບ​ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ເພື່ອ​ໃຫ້​ພວກ​ເຂົາ​ເຫມາະ​ກັບ​ເສັ້ນ​ກ່ຽວ​ກັບ​ການ​ n ຕົວລະຄອນ. ຖ້າ n is
ສູນ, ຫຼັງຈາກນັ້ນບໍ່ມີການຫໍ່ເສັ້ນແມ່ນເຮັດ; ແຕ່ລະຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຈະປາກົດຢູ່ໃນແຖວດຽວ.
ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງສ່ວນໜ້າທັງໝົດ.

-fdiagnostics-show-location=ຄັ້ງດຽວ
ມີ​ຄວາມ​ຫມາຍ​ພຽງ​ແຕ່​ໃນ​ຮູບ​ແບບ​ການ​ຫໍ່​ເສັ້ນ​. ແນະນຳໃຫ້ນັກຂ່າວກວດຫາຂໍ້ຄວາມ
ປ່ອຍຂໍ້ມູນສະຖານທີ່ແຫຼ່ງ ຄັ້ງຫນຶ່ງ; ນັ້ນແມ່ນ, ໃນກໍລະນີທີ່ຂໍ້ຄວາມຍາວເກີນໄປທີ່ຈະເຫມາະ
ຢູ່ໃນເສັ້ນດຽວແລະຕ້ອງໄດ້ຮັບການຫໍ່, ສະຖານທີ່ແຫຼ່ງຈະບໍ່ຖືກປ່ອຍອອກມາ
(ເປັນຄໍານໍາຫນ້າ) ອີກເທື່ອຫນຶ່ງ, ຫຼາຍກວ່າແລະຫຼາຍກວ່າ, ໃນສາຍຕໍ່ໆມາ. ນີ້​ແມ່ນ
ພຶດຕິກໍາເລີ່ມຕົ້ນ.

-fdiagnostics-show-location=ທຸກແຖວ
ມີ​ຄວາມ​ຫມາຍ​ພຽງ​ແຕ່​ໃນ​ຮູບ​ແບບ​ການ​ຫໍ່​ເສັ້ນ​. ແນະນຳໃຫ້ນັກຂ່າວກວດຫາຂໍ້ຄວາມ
ປ່ອຍຂໍ້ມູນສະຖານທີ່ແຫຼ່ງດຽວກັນ (ເປັນຄໍານໍາຫນ້າ) ສໍາລັບເສັ້ນຕົວຈິງທີ່ເປັນຜົນ
ຈາກຂະບວນການທໍາລາຍຂໍ້ຄວາມທີ່ຍາວເກີນໄປທີ່ຈະເຫມາະໃນແຖວດຽວ.

-fdiagnostics-color[=ເມື່ອ​ໃດ​]
-fno-diagnostics-ສີ
ໃຊ້ສີໃນການວິນິດໄສ. ເມື່ອ​ໃດ​ is ບໍ່ເຄີຍ, ສະເຫມີໄປ, ຫຼື ອັດຕະໂນມັດ. ຄ່າເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບວິທີການ
compiler ໄດ້ຖືກກໍານົດ, ມັນສາມາດເປັນອັນໃດອັນຫນຶ່ງຂ້າງເທິງ ເມື່ອ​ໃດ​ ທາງ​ເລືອກ​ຫຼື​ຍັງ​
ບໍ່ເຄີຍ if GCC_COLORS ຕົວແປສະພາບແວດລ້ອມແມ່ນບໍ່ມີຢູ່ໃນສະພາບແວດລ້ອມ, ແລະ ອັດຕະໂນມັດ
ຖ້າບໍ່ດັ່ງນັ້ນ. ອັດຕະໂນມັດ ຫມາຍຄວາມວ່າຈະໃຊ້ສີພຽງແຕ່ເມື່ອຄວາມຜິດພາດມາດຕະຖານເປັນຈຸດ. ໄດ້
ຮູບແບບ -fdiagnostics-ສີ ແລະ -fno-diagnostics-ສີ ແມ່ນນາມແຝງສໍາລັບ
-fdiagnostics-color=ສະເໝີ ແລະ -fdiagnostics-color=ບໍ່ເຄີຍ, ຕາມລໍາດັບ.

ສີແມ່ນຖືກກໍານົດໂດຍຕົວແປສະພາບແວດລ້ອມ GCC_COLORS. ມູນ​ຄ່າ​ຂອງ​ມັນ​ແມ່ນ​ລໍາ​ໄສ້
ລາຍຊື່ຄວາມສາມາດທີ່ແຍກອອກ ແລະເລືອກສາຍຍ່ອຍຂອງ Graphic Rendition (SGR). SGR
ຄໍາສັ່ງຖືກຕີຄວາມຫມາຍໂດຍ terminal ຫຼື terminal emulator. (ເບິ່ງພາກໃນ
ເອ ກະ ສານ ຂອງ terminal ຂໍ້ ຄວາມ ຂອງ ທ່ານ ສໍາ ລັບ ຄຸນ ຄ່າ ທີ່ ອະ ນຸ ຍາດ ແລະ ຄວາມ ຫມາຍ ຂອງ ເຂົາ ເຈົ້າ ເປັນ
ຄຸນ​ລັກ​ສະ​ນະ​ຂອງ​ຕົວ​ອັກ​ສອນ​
ແລະສາມາດ concatenated ກັບ semicolons. ຄ່າທົ່ວໄປທີ່ຈະລວມເຂົ້າກັນລວມມີ 1 ສໍາລັບການ
ກ້າຫານ, 4 ສໍາລັບການ underline, 5 ສໍາລັບການກະພິບ, 7 ສໍາລັບປີ້ນກັບກັນ, 39 ສໍາລັບສີພື້ນຫລັງເລີ່ມຕົ້ນ, 30
to 37 ສໍາ​ລັບ​ສີ​ພື້ນ​ຫນ້າ​, 90 to 97 ສໍາ​ລັບ​ການ 16 ສີ​ໃນ​ຮູບ​ແບບ​ສີ​ທາງ​ຫນ້າ​, 38 5 0 to
38 5 255 ສໍາລັບ 88 ສີແລະ 256 ໂຫມດສີດ້ານຫນ້າ, 49 ສໍາລັບພື້ນຫລັງເລີ່ມຕົ້ນ
ສີ, 40 to 47 ສໍາ​ລັບ​ສີ​ພື້ນ​ຖານ​, 100 to 107 ສໍາລັບສີພື້ນຫຼັງຂອງໂໝດ 16 ສີ,
ແລະ 48 5 0 to 48 5 255 ສໍາລັບ 88-color ແລະ 256-color modes ສີພື້ນຫລັງ.

ຄ່າເລີ່ມຕົ້ນ 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 substring ສໍາລັບຄວາມຜິດພາດ: ເຄື່ອງຫມາຍ.

"ຄຳເຕືອນ="
SGR substring ສໍາລັບການເຕືອນໄພ: ເຄື່ອງຫມາຍ.

"ຫມາຍເຫດ="
SGR substring ສໍາລັບຫມາຍເຫດ: ເຄື່ອງຫມາຍ.

"caret="
SGR substring ສໍາລັບເສັ້ນ cart.

"locus="
SGR substring ສໍາລັບຂໍ້ມູນສະຖານທີ່, file:line or file:line:column ແລະອື່ນໆ

"quote="
SGR substring ສໍາລັບຂໍ້ມູນທີ່ພິມຢູ່ໃນວົງຢືມ.

-fno-diagnostics-show-option
ໂດຍຄ່າເລີ່ມຕົ້ນ, ແຕ່ລະການວິນິດໄສທີ່ປ່ອຍອອກມາປະກອບມີຂໍ້ຄວາມທີ່ຊີ້ບອກທາງເລືອກແຖວຄໍາສັ່ງ
ທີ່ຄວບຄຸມການວິນິດໄສໂດຍກົງ (ຖ້າທາງເລືອກດັ່ງກ່າວເປັນທີ່ຮູ້ຈັກກັບການວິນິດໄສ
ເຄື່ອງຈັກ). ການ​ລະ​ບຸ -fno-diagnostics-show-option ທຸງ​ສະ​ກັດ​ກັ້ນ​ນັ້ນ
ພຶດຕິ ກຳ.

-fno-diagnostics-show-caret
ໂດຍຄ່າເລີ່ມຕົ້ນ, ແຕ່ລະການວິນິດໄສທີ່ປ່ອຍອອກມາລວມມີສາຍຕົ້ນສະບັບ ແລະ ຄາບ '^'
ຊີ້ບອກຖັນ. ທາງເລືອກນີ້ສະກັດກັ້ນຂໍ້ມູນນີ້. ເສັ້ນແຫຼ່ງແມ່ນ
ຕັດເປັນ n ລັກສະນະ, ຖ້າຫາກວ່າ -fmessage-length=n ທາງເລືອກແມ່ນໃຫ້. ເມື່ອຜົນຜະລິດ
ແມ່ນເຮັດກັບ terminal, width ໄດ້ຖືກຈໍາກັດກັບ width ໃຫ້ໂດຍ ສີ
ຕົວແປສະພາບແວດລ້ອມຫຼື, ຖ້າບໍ່ໄດ້ຕັ້ງ, ເປັນຄວາມກວ້າງຂອງເຄື່ອງໃຊ້ໄຟຟ້າ.

ທາງເລືອກໃນການ to ການຮ້ອງຂໍ or ສະກັດກັ້ນ ຄໍາເຕືອນ
ຄໍາເຕືອນແມ່ນຂໍ້ຄວາມວິນິດໄສທີ່ລາຍງານການກໍ່ສ້າງທີ່ບໍ່ໄດ້ປະກົດຕົວ
ຜິດພາດແຕ່ວ່າມີຄວາມສ່ຽງຫຼືແນະນໍາວ່າອາດຈະມີຄວາມຜິດພາດ.

ຕົວເລືອກທີ່ບໍ່ຂຶ້ນກັບພາສາຕໍ່ໄປນີ້ບໍ່ໄດ້ເປີດໃຊ້ການເຕືອນສະເພາະແຕ່ຄວບຄຸມ
ປະເພດຂອງການວິນິດໄສທີ່ຜະລິດໂດຍ GCC.

-fsyntax ເທົ່ານັ້ນ
ກວດເບິ່ງລະຫັດສໍາລັບ syntax ຜິດພາດ, ແຕ່ຢ່າເຮັດຫຍັງນອກເຫນືອຈາກນັ້ນ.

-fmax-errors=n
ຈໍາ​ກັດ​ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ເພື່ອ​ n, ໃນຈຸດນັ້ນ GCC ປະຕິເສດແທນທີ່ຈະ
ຫຼາຍກວ່າການພະຍາຍາມສືບຕໍ່ປະມວນຜົນລະຫັດແຫຼ່ງ. ຖ້າ n ແມ່ນ 0 (ຄ່າເລີ່ມຕົ້ນ),
ບໍ່ມີຂອບເຂດຈໍາກັດກ່ຽວກັບຈໍານວນຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດທີ່ຜະລິດ. ຖ້າ - ຄວາມ​ຜິດ​ພາດ Wfatal​ ແມ່ນຍັງ
ລະບຸ, ຈາກນັ້ນ - ຄວາມ​ຜິດ​ພາດ Wfatal​ ມີຄວາມສຳຄັນກວ່າຕົວເລືອກນີ້.

-w ຍັບຍັ້ງຂໍ້ຄວາມເຕືອນທັງຫມົດ.

- ຄວາມ​ຜິດ​ພາດ​
ເຮັດໃຫ້ການເຕືອນໄພທັງຫມົດເຂົ້າໄປໃນຄວາມຜິດພາດ.

- ຄວາມ​ຜິດ​ພາດ =​
ເຮັດໃຫ້ຄໍາເຕືອນທີ່ລະບຸໄວ້ເປັນຄວາມຜິດພາດ. ຕົວລະບຸການເຕືອນໄພຖືກຕໍ່ທ້າຍ;
ຍົກ​ຕົວ​ຢ່າງ -Wrror=ປ່ຽນ ປ່ຽນ​ການ​ເຕືອນ​ໄພ​ທີ່​ຄວບ​ຄຸມ​ໂດຍ​ - ສະຫວິດ ເຂົ້າ​ໄປ​ໃນ​ຄວາມ​ຜິດ​ພາດ​.
ສະຫຼັບນີ້ໃຊ້ຮູບແບບລົບ, ເພື່ອໃຊ້ເພື່ອປະຕິເສດ - ຄວາມ​ຜິດ​ພາດ​ ສໍາລັບການເຕືອນໄພສະເພາະ;
ຍົກ​ຕົວ​ຢ່າງ -Wno-error=ສະຫຼັບ ເຮັດໃຫ້ - ສະຫວິດ ການເຕືອນໄພບໍ່ແມ່ນຄວາມຜິດພາດ, ເຖິງແມ່ນວ່າໃນເວລາທີ່ - ຄວາມ​ຜິດ​ພາດ​
ແມ່ນຢູ່ໃນຜົນກະທົບ.

ຂໍ້ຄວາມເຕືອນສໍາລັບແຕ່ລະຄໍາເຕືອນທີ່ສາມາດຄວບຄຸມໄດ້ປະກອບມີທາງເລືອກທີ່ຄວບຄຸມ
ການເຕືອນໄພ. ທາງເລືອກນັ້ນສາມາດຖືກນໍາໃຊ້ກັບ - ຄວາມ​ຜິດ​ພາດ =​ ແລະ -Wno-error= ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້
ຂ້າງເທິງ. (ການພິມທາງເລືອກໃນຂໍ້ຄວາມເຕືອນສາມາດຖືກປິດການໃຊ້ງານ
-fno-diagnostics-show-option ທຸງ.)

ໃຫ້ສັງເກດວ່າການກໍານົດ - ຄວາມ​ຜິດ​ພາດ =​ຟູ ອັດຕະໂນມັດຫມາຍເຖິງ -Wຟູທີ່ຢູ່ ເຖິງຢ່າງໃດກໍ່ຕາມ, -Wno-error=ຟູ
ບໍ່ໄດ້ຫມາຍເຖິງຫຍັງ.

- ຄວາມ​ຜິດ​ພາດ Wfatal​
ຕົວເລືອກນີ້ເຮັດໃຫ້ compiler ຍົກເລີກການລວບລວມຂໍ້ມູນໃນຄວາມຜິດພາດທໍາອິດທີ່ເກີດຂຶ້ນ
ແທນທີ່ຈະພະຍາຍາມສືບຕໍ່ແລະພິມຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຕື່ມອີກ.

ທ່ານ​ສາ​ມາດ​ຮ້ອງ​ຂໍ​ການ​ເຕືອນ​ໄພ​ສະ​ເພາະ​ຈໍາ​ນວນ​ຫຼາຍ​ທີ່​ມີ​ທາງ​ເລືອກ​ທີ່​ເລີ່ມ​ຕົ້ນ​ດ້ວຍ​ -W, ຍົກ​ຕົວ​ຢ່າງ
- Wimplicit ເພື່ອຮ້ອງຂໍການເຕືອນໄພກ່ຽວກັບການປະກາດ implicit. ແຕ່ລະຄໍາເຕືອນສະເພາະເຫຼົ່ານີ້
ທາງເລືອກຍັງມີຮູບແບບລົບເລີ່ມຕົ້ນ -Wno- ປິດ​ການ​ເຕືອນ​ໄພ​; ຍົກ​ຕົວ​ຢ່າງ,
-Wno - implicit. ຄູ່ມືນີ້ສະແດງພຽງແຕ່ຫນຶ່ງໃນສອງຮູບແບບ, ອັນໃດກໍ່ຕາມບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ.
ສໍາລັບທາງເລືອກພາສາສະເພາະເພີ່ມເຕີມຍັງອ້າງອີງເຖິງ C ++ ພາສາ ທາງເລືອກໃນການ ແລະ Objective-C
ແລະ ຈຸດປະສົງ-C++ ພາສາ ທາງເລືອກໃນການ.

ບາງທາງເລືອກ, ເຊັ່ນ: - ຝາ ແລະ -Wextra, ເປີດທາງເລືອກອື່ນ, ເຊັ່ນ: - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​, ທີ່
ອາດຈະເປີດທາງເລືອກເພີ່ມເຕີມ, ເຊັ່ນ: -Wunused-value. ຜົນກະທົບລວມຂອງບວກແລະ
ຮູບ​ແບບ​ທາງ​ລົບ​ແມ່ນ​ວ່າ​ທາງ​ເລືອກ​ທີ່​ສະ​ເພາະ​ຫຼາຍ​ມີ​ບູ​ລິ​ມະ​ສິດ​ຫຼາຍ​ກ​່​ວາ​ຫນຶ່ງ​ທີ່​ສະ​ເພາະ​ຫນ້ອຍ​,
ເປັນເອກະລາດຂອງຕໍາແໜ່ງຂອງເຂົາເຈົ້າຢູ່ໃນເສັ້ນຄໍາສັ່ງ. ສໍາ​ລັບ​ທາງ​ເລືອກ​ຂອງ​ການ​ສະ​ເພາະ​ດຽວ​ກັນ​,
ອັນສຸດທ້າຍມີຜົນ. ທາງເລືອກທີ່ເປີດຫຼືປິດການໃຊ້ງານຜ່ານ pragmas ມີຜົນຄືກັບວ່າພວກມັນ
ປາກົດຢູ່ໃນຕອນທ້າຍຂອງເສັ້ນຄໍາສັ່ງ.

ເມື່ອມີການຮ້ອງຂໍທາງເລືອກເຕືອນທີ່ບໍ່ຮູ້ຈັກ (ຕົວຢ່າງ: - ການ​ເຕືອນ​ໄພ​ບໍ່​ຮູ້​ຈັກ​), GCC emits a
ການວິນິດໄສທີ່ລະບຸວ່າທາງເລືອກບໍ່ຖືກຮັບຮູ້. ຢ່າງໃດກໍຕາມ, ຖ້າຫາກວ່າ -Wno- ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​,
ພຶດຕິກໍາແມ່ນແຕກຕ່າງກັນເລັກນ້ອຍ: ບໍ່ມີການວິນິດໄສແມ່ນຜະລິດສໍາລັບ -Wno-unknown-ເຕືອນ
ເວັ້ນເສຍແຕ່ວ່າການວິນິດໄສອື່ນໆກໍາລັງຖືກຜະລິດ. ນີ້ອະນຸຍາດໃຫ້ນໍາໃຊ້ໃຫມ່ -Wno- ທາງເລືອກໃນການ
ກັບ compilers ເກົ່າ, ແຕ່ຖ້າຫາກວ່າບາງສິ່ງບາງຢ່າງຜິດພາດ, compiler ເຕືອນວ່າ unrecognized
ທາງເລືອກແມ່ນປະຈຸບັນ.

-Wpedantic
- pedantic
ອອກຄໍາເຕືອນທັງຫມົດທີ່ຕ້ອງການໂດຍ ISO C ແລະ ISO C++ ທີ່ເຄັ່ງຄັດ; ປະຕິເສດໂຄງການທັງຫມົດ
ໃຊ້ສ່ວນຂະຫຍາຍທີ່ຖືກຫ້າມ, ແລະບາງໂຄງການອື່ນໆທີ່ບໍ່ປະຕິບັດຕາມ ISO C ແລະ ISO
C++. ສໍາລັບ ISO C, ປະຕິບັດຕາມສະບັບຂອງມາດຕະຖານ ISO C ທີ່ລະບຸໄວ້ໂດຍໃດໆ -std
ທາງ​ເລືອກ​ທີ່​ນໍາ​ໃຊ້​.

ໂປຣແກຣມ ISO C ແລະ ISO C++ ທີ່ຖືກຕ້ອງຄວນລວບລວມຢ່າງຖືກຕ້ອງໂດຍມີ ຫຼືບໍ່ມີທາງເລືອກນີ້
(ເຖິງແມ່ນວ່າຈໍານວນຫນ້ອຍທີ່ຫາຍາກຕ້ອງການ -ansi ຫຼື -std ທາງ​ເລືອກ​ການ​ລະ​ບຸ​ສະ​ບັບ​ທີ່​ຕ້ອງ​ການ​ຂອງ​
ISO C). ຢ່າງໃດກໍຕາມ, ໂດຍບໍ່ມີທາງເລືອກນີ້, ບາງສ່ວນຂະຫຍາຍ GNU ແລະ C ແບບດັ້ງເດີມແລະ
ຄຸນນະສົມບັດ C ++ ໄດ້ຮັບການສະຫນັບສະຫນູນເຊັ່ນດຽວກັນ. ດ້ວຍທາງເລືອກນີ້, ພວກເຂົາຖືກປະຕິເສດ.

-Wpedantic ບໍ່ໄດ້ເຮັດໃຫ້ເກີດຂໍ້ຄວາມເຕືອນສໍາລັບການນໍາໃຊ້ຄໍາສໍາຮອງທີ່ມີ
ຊື່ເລີ່ມຕົ້ນແລະລົງທ້າຍດ້ວຍ __. ການເຕືອນໄພ Pedantic ຍັງຖືກປິດຢູ່ໃນການສະແດງຜົນ
ທີ່ປະຕິບັດຕາມ "__extension__". ຢ່າງໃດກໍ່ຕາມ, ໄຟລ໌ສ່ວນຫົວຂອງລະບົບເທົ່ານັ້ນຄວນໃຊ້ສິ່ງເຫຼົ່ານີ້
ເສັ້ນທາງຫນີ; ໂຄງການຄໍາຮ້ອງສະຫມັກຄວນຫຼີກເວັ້ນພວກມັນ.

ຜູ້ໃຊ້ບາງຄົນພະຍາຍາມໃຊ້ -Wpedantic ກວດ​ສອບ​ບັນ​ດາ​ໂຄງ​ການ​ສໍາ​ລັບ​ການ​ສອດ​ຄ່ອງ ISO C ຢ່າງ​ເຂັ້ມ​ງວດ​. ເຂົາເຈົ້າ
ທັນທີທີ່ພົບວ່າມັນບໍ່ໄດ້ເຮັດສິ່ງທີ່ພວກເຂົາຕ້ອງການ: ມັນພົບເຫັນບາງການປະຕິບັດທີ່ບໍ່ແມ່ນ ISO,
ແຕ່​ບໍ່​ແມ່ນ​ທັງ​ຫມົດ --- ພຽງ​ແຕ່​ທີ່ ISO C ຕ້ອງການ ການວິນິດໄສ, ແລະບາງອັນອື່ນໆສໍາລັບ
ເຊິ່ງການວິນິດໄສໄດ້ຖືກເພີ່ມ.

ຄຸນສົມບັດເພື່ອລາຍງານຄວາມລົ້ມເຫລວໃນການປະຕິບັດຕາມ ISO C ອາດຈະເປັນປະໂຫຍດໃນບາງກໍລະນີ,
ແຕ່ຈະຮຽກຮ້ອງໃຫ້ມີວຽກງານເພີ່ມເຕີມຢ່າງຫຼວງຫຼາຍແລະຈະຂ້ອນຂ້າງແຕກຕ່າງຈາກ
-Wpedantic. ພວກເຮົາບໍ່ມີແຜນທີ່ຈະຮອງຮັບຄຸນສົມບັດດັ່ງກ່າວໃນອະນາຄົດອັນໃກ້ນີ້.

ບ່ອນທີ່ມາດຕະຖານທີ່ລະບຸໄວ້ກັບ -std ເປັນຕົວແທນຂອງພາສາ GNU ຂະຫຍາຍ C, ເຊັ່ນ:
gnu90 or gnu99, ມີທີ່ສອດຄ້ອງກັນ ຖານ ມາດຕະຖານ, ສະບັບຂອງ ISO C ທີ່
ພາສາ GNU ຂະຫຍາຍແມ່ນອີງໃສ່. ຄຳເຕືອນຈາກ -Wpedantic ໄດ້ຖືກມອບໃຫ້ບ່ອນທີ່ພວກເຂົາຢູ່
ຕ້ອງການໂດຍມາດຕະຖານພື້ນຖານ. (ມັນບໍ່ມີຄວາມຫມາຍສໍາລັບການເຕືອນໄພດັ່ງກ່າວ
ພຽງ​ແຕ່​ສໍາ​ລັບ​ລັກ​ສະ​ນະ​ທີ່​ບໍ່​ໄດ້​ຢູ່​ໃນ​ພາ​ສາ GNU C ທີ່​ກໍາ​ນົດ​ໄວ້​, ນັບ​ຕັ້ງ​ແຕ່​ໂດຍ​ຄໍາ​ນິ​ຍາມ GNU​
ພາສາຂອງ C ປະກອບມີລັກສະນະທັງຫມົດທີ່ compiler ສະຫນັບສະຫນູນກັບທາງເລືອກທີ່ໃຫ້, ແລະ
ຈະ​ບໍ່​ມີ​ຫຍັງ​ທີ່​ຈະ​ເຕືອນ​ກ່ຽວ​ກັບ​ການ​.)

-pedantic ຜິດ​ພາດ​
ໃຫ້ຄວາມຜິດພາດທຸກຄັ້ງທີ່ ຖານ ມາດຕະຖານ (ເບິ່ງ -Wpedantic) ຮຽກຮ້ອງໃຫ້ມີການວິນິດໄສ, ໃນ
ບາງກໍລະນີທີ່ມີພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດໃນເວລາລວບລວມແລະໃນບາງກໍລະນີອື່ນໆ
ທີ່ບໍ່ໄດ້ປ້ອງກັນການລວບລວມບັນດາໂຄງການທີ່ຖືກຕ້ອງຕາມມາດຕະຖານ.
ອັນນີ້ບໍ່ເທົ່າກັບ -Wrror=pedantic, ເນື່ອງຈາກວ່າມີຂໍ້ຜິດພາດທີ່ເປີດໃຊ້ໂດຍນີ້
ທາງ​ເລືອກ​ແລະ​ບໍ່​ໄດ້​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ການ​ຫຼັງ​ແລະ​ກົງ​ກັນ​ຂ້າມ​.

- ຝາ
ນີ້ເຮັດໃຫ້ການເຕືອນໄພທັງຫມົດກ່ຽວກັບການກໍ່ສ້າງທີ່ຜູ້ໃຊ້ບາງຄົນພິຈາລະນາ
ຄໍາຖາມ, ແລະທີ່ງ່າຍຕໍ່ການຫຼີກເວັ້ນ (ຫຼືດັດແປງເພື່ອປ້ອງກັນການເຕືອນ), ເຖິງແມ່ນວ່າຢູ່ໃນ
ສົມທົບກັບມະຫາພາກ. ອັນນີ້ຍັງເປີດການນຳໃຊ້ຄຳເຕືອນສະເພາະພາສາທີ່ອະທິບາຍໄວ້
in C ++ ພາສາ ທາງເລືອກໃນການ ແລະ Objective-C ແລະ ຈຸດປະສົງ-C++ ພາສາ ທາງເລືອກໃນການ.

- ຝາ ເປີດທຸງເຕືອນຕໍ່ໄປນີ້:

-Waddress -Warray-bounds=1 (ພຽງແຕ່ກັບ -O2) -Wc++11-compat -Wc++14-compat
-Wchar-subscripts -Wenum ປຽບທຽບ (ໃນ C/ObjC; ອັນນີ້ແມ່ນເປີດໂດຍຄ່າເລີ່ມຕົ້ນໃນ C++)
-Wimplicit-int (C ແລະ Objective-C ເທົ່ານັ້ນ) -Wimplicit-function-ປະກາດ (ຄ ແລະ
Objective-C ເທົ່ານັ້ນ) - ຄໍາເຫັນ -Wformat - ຜູ້ຍິງ (ພຽງແຕ່ສໍາລັບ C/ObjC ແລະເວັ້ນເສຍແຕ່
- freestanding) -Wmaybe-unitialized -Wmissing-braces (ສະເພາະ C/ObjC) -Wnonnull
-Wopenmp-simd -Wparentheses -Wpointer-ເຊັນ​ - ຄໍາ​ສັ່ງ​ - ປະ​ເພດ Wreturn​ - ລໍາດັບຈຸດ
-Wsign-ປຽບທຽບ (ສະເພາະໃນ C++) -Wstrict-aliasing -Wstrict-overflow=1 - ສະຫວິດ
-Wtrigraphs - ປະກາດ -Wunknown-pragmas -Wunused-function -Wunused-label
-Wunused-value -Wunused-variable -Wvolatile-register-var

ໃຫ້ສັງເກດວ່າທຸງເຕືອນໄພບາງອັນບໍ່ໄດ້ຫມາຍເຖິງ - ຝາ. ບາງຄົນຂອງພວກເຂົາເຕືອນກ່ຽວກັບ
ການກໍ່ສ້າງທີ່ຜູ້ໃຊ້ໂດຍທົ່ວໄປບໍ່ໄດ້ພິຈາລະນາເປັນຄໍາຖາມ, ແຕ່ວ່າ
ບາງຄັ້ງທ່ານອາດຈະຕ້ອງການກວດເບິ່ງ; ຄົນອື່ນເຕືອນກ່ຽວກັບການກໍ່ສ້າງທີ່ເປັນ
ມີຄວາມຈໍາເປັນຫຼືຍາກທີ່ຈະຫຼີກເວັ້ນໃນບາງກໍລະນີ, ແລະບໍ່ມີວິທີງ່າຍໆທີ່ຈະດັດແປງ
ລະຫັດເພື່ອສະກັດກັ້ນການເຕືອນ. ບາງສ່ວນຂອງພວກມັນຖືກເປີດໃຊ້ໂດຍ -Wextra ແຕ່ຈໍານວນຫຼາຍຂອງພວກເຂົາ
ຕ້ອງໄດ້ຮັບການເປີດໃຊ້ເປັນສ່ວນບຸກຄົນ.

-Wextra
ນີ້ເຮັດໃຫ້ບາງທຸງເຕືອນໄພພິເສດທີ່ບໍ່ໄດ້ເປີດໃຊ້ໂດຍ - ຝາ. (ທາງເລືອກນີ້ໃຊ້
ຈະຖືກເອີ້ນ -W. ຊື່ເກົ່າແມ່ນຍັງສະຫນັບສະຫນູນ, ແຕ່ຊື່ໃຫມ່ແມ່ນຫຼາຍ
ອະທິບາຍ.)

- Wclobbered - ຮ່າງກາຍອ່ອນເພຍ -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C ເທົ່ານັ້ນ) -Wold-style-ປະກາດ (C ເທົ່ານັ້ນ) -Woverride-init
-Wsign-ປຽບທຽບ -Wtype- limits - ປະກາດ -Wunused-ພາລາມິເຕີ (ພຽງແຕ່ກັບ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ or
- ຝາ) -Wunused-but-set-parameter (ພຽງແຕ່ກັບ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ or - ຝາ)

ທາງເລືອກ -Wextra ຍັງພິມຂໍ້ຄວາມເຕືອນສໍາລັບກໍລະນີຕໍ່ໄປນີ້:

* ຕົວຊີ້ຖືກປຽບທຽບກັບເລກສູນດ້ວຍ "<", "<=", ">", ຫຼື ">=".

* (C++ ເທົ່ານັ້ນ) ຕົວນັບຈຳ ນວນ ແລະ ຜູ້ບໍ່ຈຳແນກທັງສອງປະກົດຢູ່ໃນເງື່ອນໄຂ
ການສະແດງອອກ.

* (C++ ເທົ່ານັ້ນ) ພື້ນຖານສະເໝືອນທີ່ບໍ່ຊັດເຈນ.

* (C++ ເທົ່ານັ້ນ) ການສະໝັກສະມາຊິກອາເຣທີ່ໄດ້ຖືກປະກາດວ່າ "ລົງທະບຽນ".

* (C++ ເທົ່ານັ້ນ) ເອົາທີ່ຢູ່ຂອງຕົວແປທີ່ໄດ້ຖືກປະກາດວ່າ "ລົງທະບຽນ".

* (C++ ເທົ່ານັ້ນ) ຫ້ອງຮຽນພື້ນຖານບໍ່ໄດ້ຖືກເລີ່ມຕົ້ນໃນຕົວສ້າງສຳເນົາຂອງຊັ້ນທີ່ມາຈາກ.

-Wchar-subscripts
ເຕືອນຖ້າຫາກວ່າ subscript array ມີປະເພດ "char". ນີ້ແມ່ນສາເຫດທົ່ວໄປຂອງຄວາມຜິດພາດ, ເປັນ
ຜູ້ຂຽນໂປລແກລມມັກຈະລືມວ່າປະເພດນີ້ຖືກເຊັນໃນບາງເຄື່ອງ. ການເຕືອນໄພນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍ - ຝາ.

- ຄໍາເຫັນ
ເຕືອນທຸກຄັ້ງທີ່ລຳດັບຄຳເຫັນເລີ່ມຕົ້ນ /* ປາກົດຢູ່ໃນ a /* ຄໍາເຫັນ, ຫຼືທຸກຄັ້ງ a
Backslash-Newline ປະກົດຢູ່ໃນ a // ຄໍາເຫັນ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wno- coverage-mismatch
ເຕືອນຖ້າຫາກວ່າໂປຣໄຟລ໌ຄໍາຄຶດຄໍາເຫັນບໍ່ກົງກັນໃນເວລາທີ່ການນໍາໃຊ້ -fprofile-ໃຊ້ ທາງເລືອກ. ຖ້າ ກ
ໄຟລ໌ແຫຼ່ງແມ່ນມີການປ່ຽນແປງລະຫວ່າງການລວບລວມກັບ -fprofile-gen ແລະມີ -fprofile-ໃຊ້,
ໄຟລ໌ທີ່ມີຄໍາຕິຊົມໂປຣໄຟລ໌ບໍ່ສາມາດກົງກັບໄຟລ໌ຕົ້ນສະບັບໄດ້ ແລະ GCC ບໍ່ສາມາດ
ໃຊ້ຂໍ້ມູນການຕິຊົມໂປຣໄຟລ໌. ໂດຍຄ່າເລີ່ມຕົ້ນ, ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ງານ ແລະເປັນ
ຖືວ່າເປັນຄວາມຜິດພາດ. -Wno- coverage-mismatch ສາມາດຖືກນໍາໃຊ້ເພື່ອປິດການເຕືອນໄພຫຼື
-Wno-error= coverage-mismatch ສາມາດໃຊ້ເພື່ອປິດການໃຊ້ງານໄດ້. ການປິດໃຊ້ງານຄວາມຜິດພາດ
ສໍາລັບການເຕືອນນີ້ສາມາດສົ່ງຜົນໃຫ້ລະຫັດ optimized ບໍ່ດີແລະເປັນປະໂຫຍດພຽງແຕ່ໃນກໍລະນີຂອງ
ການ​ປ່ຽນ​ແປງ​ເລັກ​ນ້ອຍ​ຫຼາຍ​ເຊັ່ນ​ການ​ແກ້​ໄຂ bug ກັບ​ຖານ​ລະ​ຫັດ​ທີ່​ມີ​ຢູ່​ແລ້ວ​. ປິດການໃຊ້ງານຢ່າງສົມບູນ
ການເຕືອນໄພແມ່ນບໍ່ແນະນໍາ.

-Wno-cpp
(C, Objective-C, C++, Objective-C++ ແລະ Fortran ເທົ່ານັ້ນ)

ສະກັດກັ້ນຂໍ້ຄວາມເຕືອນທີ່ປ່ອຍອອກມາໂດຍຄໍາສັ່ງ "#warning".

- ການ​ສົ່ງ​ເສີມ​ສອງ​ຄັ້ງ​ (C, C++, Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ໃຫ້ຄໍາເຕືອນເມື່ອມູນຄ່າຂອງປະເພດ "ເລື່ອນ" ຖືກສົ່ງເສີມເປັນ "ສອງເທົ່າ". CPUs
ດ້ວຍ 32-bit "single-precision" ຫນ່ວຍບໍລິການຈຸດລອຍຕົວປະຕິບັດ "float" ໃນຮາດແວ,
ແຕ່ເຮັດຕາມ "ສອງ" ໃນຊອບແວ. ໃນເຄື່ອງດັ່ງກ່າວ, ເຮັດການຄິດໄລ່ການນໍາໃຊ້
ຄ່າ "ສອງເທົ່າ" ແມ່ນລາຄາແພງກວ່າຫຼາຍເນື່ອງຈາກຄ່າໃຊ້ຈ່າຍເກີນທີ່ຕ້ອງການສໍາລັບຊອບແວ
emulation.

ມັນງ່າຍທີ່ຈະເຮັດການຄິດໄລ່ໂດຍບັງເອີນດ້ວຍ "ສອງ" ເພາະວ່າຈຸດລອຍ
ຕົວຫນັງສືແມ່ນ implicitly ຂອງປະເພດ "double". ຕົວຢ່າງ, ໃນ:

ພື້ນທີ່ເລື່ອນ (ລັດສະໝີລອຍ)
{
ກັບຄືນ 3.14159 * radius * radius;
}

compiler ປະຕິບັດການຄິດໄລ່ທັງຫມົດດ້ວຍ "double" ເນື່ອງຈາກວ່າຈຸດທີ່ເລື່ອນໄດ້
ຕົວຫນັງສືແມ່ນ "ສອງ".

-Wformat
-Wformat=n
ກວດເບິ່ງການໂທຫາ "printf" ແລະ "scanf", ແລະອື່ນໆ, ເພື່ອໃຫ້ແນ່ໃຈວ່າການໂຕ້ຖຽງທີ່ສະຫນອງ.
ມີ​ປະ​ເພດ​ທີ່​ເຫມາະ​ສົມ​ກັບ​ສະ​ຕ​ຣິງ​ຮູບ​ແບບ​ທີ່​ລະ​ບຸ​ໄວ້​, ແລະ​ວ່າ​ການ​ປ່ຽນ​ແປງ​
ທີ່ລະບຸໄວ້ໃນສະຕຣິງຮູບແບບເຮັດໃຫ້ຄວາມຮູ້ສຶກ. ນີ້ປະກອບມີຫນ້າທີ່ມາດຕະຖານ, ແລະ
ອື່ນໆທີ່ລະບຸໄວ້ໃນຄຸນລັກສະນະຮູບແບບ, ໃນ "printf", "scanf", "strftime" ແລະ
"strfmon" (ສ່ວນຂະຫຍາຍ X/Open, ບໍ່ແມ່ນຢູ່ໃນມາດຕະຖານ C) ຄອບຄົວ (ຫຼືເປົ້າຫມາຍອື່ນໆ-
ຄອບຄົວສະເພາະ). ຟັງຊັນໃດຖືກກວດສອບໂດຍບໍ່ມີຄຸນລັກສະນະຂອງຮູບແບບ
ກໍານົດແມ່ນຂຶ້ນກັບສະບັບມາດຕະຖານທີ່ເລືອກ, ແລະການກວດສອບຫນ້າທີ່ດັ່ງກ່າວ
ໂດຍ​ບໍ່​ມີ​ຄຸນ​ສົມ​ບັດ​ທີ່​ລະ​ບຸ​ໄວ້​ແມ່ນ​ປິດ​ການ​ໃຊ້​ງານ​ໂດຍ​ - freestanding or -fno-builtin.

ຮູບແບບຕ່າງໆໄດ້ຖືກກວດສອບຕໍ່ກັບລັກສະນະຮູບແບບທີ່ຮອງຮັບໂດຍ GNU libc ເວີຊັນ 2.2.
ເຫຼົ່ານີ້ລວມມີຄຸນສົມບັດ ISO C90 ແລະ C99 ທັງໝົດ, ເຊັ່ນດຽວກັນກັບຄຸນສົມບັດຈາກ Single Unix
ຂໍ້ມູນຈໍາເພາະແລະບາງສ່ວນຂະຫຍາຍ BSD ແລະ GNU. ການປະຕິບັດຫ້ອງສະຫມຸດອື່ນໆອາດຈະບໍ່
ສະຫນັບສະຫນູນລັກສະນະເຫຼົ່ານີ້ທັງຫມົດ; GCC ບໍ່ຮອງຮັບການເຕືອນກ່ຽວກັບຄຸນສົມບັດທີ່ເກີນກວ່າ
ຂໍ້ຈໍາກັດຂອງຫ້ອງສະຫມຸດສະເພາະ. ຢ່າງໃດກໍຕາມ, ຖ້າ -Wpedantic ຖືກນໍາໃຊ້ກັບ -Wformat,
ມີການເຕືອນກ່ຽວກັບລັກສະນະຮູບແບບທີ່ບໍ່ແມ່ນຢູ່ໃນສະບັບມາດຕະຖານທີ່ເລືອກ (ແຕ່ບໍ່ແມ່ນ
ສໍາລັບຮູບແບບ "strfmon", ນັບຕັ້ງແຕ່ນັ້ນບໍ່ແມ່ນຢູ່ໃນສະບັບຂອງມາດຕະຖານ C).

-Wformat=1
-Wformat
ທາງເລືອກ -Wformat ເທົ່າກັບ -Wformat=1, ແລະ -Wno ຮູບ​ແບບ​ ເທົ່າກັບ
-Wformat=0ທີ່ຢູ່ ຕັ້ງແຕ່ -Wformat ຍັງກວດເບິ່ງການໂຕ້ຖຽງຮູບແບບ null ສໍາລັບຫຼາຍໆອັນ
ໜ້າ ທີ່, -Wformat ຍັງໝາຍເຖິງ -Wnonnull. ບາງດ້ານຂອງຮູບແບບລະດັບນີ້
ການກວດສອບສາມາດປິດໄດ້ໂດຍທາງເລືອກ: -Wno-format-contains-nul,
-Wno-format-extra-args, ແລະ -Wno-format-zero-length. -Wformat ຖືກເປີດໃຊ້ໂດຍ
- ຝາ.

-Wno-format-contains-nul
If -Wformat ຖືກລະບຸໄວ້, ຢ່າເຕືອນກ່ຽວກັບຮູບແບບສະຕຣິງທີ່ມີ NUL bytes.

-Wno-format-extra-args
If -Wformat ແມ່ນລະບຸໄວ້, ບໍ່ໄດ້ເຕືອນກ່ຽວກັບການໂຕ້ຖຽງເກີນເປັນ "printf" ຫຼື
ຟັງຊັນຮູບແບບ "scanf". ມາດຕະຖານ C ກໍານົດວ່າການໂຕ້ຖຽງດັ່ງກ່າວແມ່ນ
ບໍ່ສົນໃຈ.

ບ່ອນທີ່ອາກິວເມັນທີ່ບໍ່ໄດ້ໃຊ້ແມ່ນຢູ່ລະຫວ່າງອາກິວເມັນທີ່ໃຊ້ແລ້ວທີ່ລະບຸໄວ້ກັບ $
ຕົວເລກ operand ສະເພາະ, ປົກກະຕິແລ້ວການເຕືອນໄພແມ່ນຍັງໄດ້ຮັບ, ນັບຕັ້ງແຕ່
ການປະຕິບັດບໍ່ສາມາດຮູ້ວ່າປະເພດໃດທີ່ຈະສົ່ງໄປຫາ "va_arg" ເພື່ອຂ້າມສິ່ງທີ່ບໍ່ໄດ້ໃຊ້
ການໂຕ້ຖຽງ. ຢ່າງໃດກໍຕາມ, ໃນກໍລະນີຂອງຮູບແບບ "scanf", ທາງເລືອກນີ້ສະກັດກັ້ນ
ເຕືອນຖ້າການໂຕ້ຖຽງທີ່ບໍ່ໄດ້ໃຊ້ແມ່ນຕົວຊີ້ທັງຫມົດ, ນັບຕັ້ງແຕ່ Unix ດຽວ
ຂໍ້ມູນຈໍາເພາະກ່າວວ່າການໂຕ້ຖຽງທີ່ບໍ່ໄດ້ໃຊ້ດັ່ງກ່າວໄດ້ຖືກອະນຸຍາດ.

-Wno-format-zero-length
If -Wformat ຖືກລະບຸໄວ້, ຢ່າເຕືອນກ່ຽວກັບຮູບແບບຄວາມຍາວສູນ. ມາດຕະຖານ C
ລະບຸວ່າຮູບແບບຄວາມຍາວສູນແມ່ນອະນຸຍາດ.

-Wformat=2
ເປີດນໍາໃຊ້ -Wformat ບວກກັບການກວດສອບຮູບແບບເພີ່ມເຕີມ. ໃນປັດຈຸບັນເທົ່າກັບ -Wformat
-Wformat-nonliteral -Wformat ຄວາມ​ປອດ​ໄພ​ -Wformat-y2k.

-Wformat-nonliteral
If -Wformat ຖືກລະບຸໄວ້, ຍັງເຕືອນຖ້າຮູບແບບສະຕຣິງບໍ່ແມ່ນຕົວໜັງສືສະຕຣິງ
ແລະດັ່ງນັ້ນບໍ່ສາມາດກວດສອບໄດ້, ເວັ້ນເສຍແຕ່ວ່າຟັງຊັນຮູບແບບຈະໃຊ້ arguments ຮູບແບບຂອງມັນ
ເປັນ "va_list".

-Wformat ຄວາມ​ປອດ​ໄພ​
If -Wformat ໄດ້ຖືກລະບຸໄວ້, ຍັງເຕືອນກ່ຽວກັບການໃຊ້ຟັງຊັນຮູບແບບທີ່ເປັນຕົວແທນ
ບັນຫາຄວາມປອດໄພທີ່ເປັນໄປໄດ້. ໃນປັດຈຸບັນ, ນີ້ເຕືອນກ່ຽວກັບການໂທຫາ "printf" ແລະ
"scanf" ຟັງຊັນທີ່ສະຕຣິງຮູບແບບບໍ່ແມ່ນສະຕຣິງທີ່ຮູ້ຫນັງສືແລະບໍ່ມີ
ຮູບແບບການໂຕ້ຖຽງ, ເຊັ່ນດຽວກັບ "printf (foo);". ນີ້ອາດຈະເປັນຂຸມຄວາມປອດໄພຖ້າຫາກວ່າ
ຮູບແບບສະຕຣິງມາຈາກການປ້ອນຂໍ້ມູນທີ່ບໍ່ເຊື່ອຖື ແລະປະກອບດ້ວຍ %n. (ປະຈຸບັນນີ້ແມ່ນເປັນ
ຊຸດຍ່ອຍຂອງສິ່ງທີ່ -Wformat-nonliteral ເຕືອນ​ກ່ຽວ​ກັບ​ການ​, ແຕ່​ວ່າ​ໃນ​ອະ​ນາ​ຄົດ​ການ​ເຕືອນ​ໄພ​ອາດ​ຈະ​ເປັນ​
ເພີ່ມເຂົ້າ -Wformat ຄວາມ​ປອດ​ໄພ​ ທີ່ບໍ່ໄດ້ລວມຢູ່ໃນ -Wformat-nonliteral.)

- ການ​ລົງ​ນາມ​ຮູບ​ແບບ​ຮູບ​ແບບ​
If -Wformat ໄດ້ຖືກລະບຸໄວ້, ຍັງເຕືອນຖ້າຫາກວ່າສະຕຣິງຮູບແບບຕ້ອງການ unsigned
ການໂຕ້ຖຽງແລະການໂຕ້ຖຽງໄດ້ຖືກເຊັນແລະໃນທາງກັບກັນ.

ຫມາຍ​ເຫດ​: ໃນ Ubuntu 8.10 ແລະ​ສະ​ບັບ​ຕໍ່​ມາ​ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຖືກ​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ C​,
C++, ObjC, ObjC++. ເພື່ອປິດການໃຊ້ງານ, ໃຊ້ -Wno-format-ຄວາມປອດໄພ, ຫຼືປິດການໃຊ້ງານຮູບແບບທັງຫມົດ
ຄໍາ​ເຕືອນ​ທີ່​ມີ​ -Wformat=0. ເພື່ອເຮັດໃຫ້ການເຕືອນຄວາມປອດໄພຮູບແບບຕາຍ, ໃຫ້ລະບຸ
-Werror=format-security.

-Wformat-y2k
If -Wformat ຖືກລະບຸໄວ້, ຍັງເຕືອນກ່ຽວກັບຮູບແບບ "strftime" ທີ່ອາດຈະໃຫ້ຜົນໄດ້ຮັບພຽງແຕ່ a
ປີສອງຕົວເລກ.

-Wnonnull
ເຕືອນກ່ຽວກັບການຖ່າຍທອດຕົວຊີ້ null ສໍາລັບອາກິວເມັນທີ່ໝາຍວ່າຕ້ອງການຄ່າທີ່ບໍ່ແມ່ນ null
ໂດຍຄຸນສົມບັດຂອງຟັງຊັນ "nonnull".

-Wnonnull ແມ່ນລວມຢູ່ໃນ - ຝາ ແລະ -Wformat. ມັນສາມາດໄດ້ຮັບການພິການດ້ວຍ -Wno-nonnull
ທາງເລືອກ.

- ວິນ​ຍານ​ຕົນ​ເອງ​ (C, C++, Objective-C ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບຕົວແປ uninitialized ທີ່ເລີ່ມຕົ້ນດ້ວຍຕົວມັນເອງ. ຫມາຍເຫດນີ້
ທາງ​ເລືອກ​ພຽງ​ແຕ່​ສາ​ມາດ​ຖືກ​ນໍາ​ໃຊ້​ກັບ​ - ປະກາດ ທາງເລືອກ.

ຕົວຢ່າງ, GCC ເຕືອນກ່ຽວກັບ "i" ບໍ່ໄດ້ຖືກຕັ້ງຢູ່ໃນຕົວຢ່າງຕໍ່ໄປນີ້ເທົ່ານັ້ນ
ໃນເວລາທີ່ - ວິນ​ຍານ​ຕົນ​ເອງ​ ໄດ້​ລະ​ບຸ​ໄວ້​:

int f()
{
int i = i;
ກັບຄືນ i;
}

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ ໃນ C++.

-Wimplicit-int (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການປະກາດບໍ່ໄດ້ລະບຸປະເພດ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wimplicit-function-ປະກາດ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ໃຫ້ຄໍາເຕືອນທຸກຄັ້ງທີ່ຟັງຊັນຖືກໃຊ້ກ່ອນທີ່ຈະຖືກປະກາດ. ໃນໂຫມດ C99
(-std=c99 or -std=gnu99), ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນແລະມັນຖືກສ້າງເປັນ
ຄວາມ​ຜິດ​ພາດ​ໂດຍ -pedantic ຜິດ​ພາດ​. ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ - ຝາ.

- Wimplicit (C ແລະ Objective-C ເທົ່ານັ້ນ)
ຄື​ກັນ​ກັບ -Wimplicit-int ແລະ -Wimplicit-function-ປະກາດ. ການເຕືອນນີ້ຖືກເປີດໃຊ້
by - ຝາ.

-Wignored-qualifiers (C ແລະ C++ ເທົ່ານັ້ນ)
ເຕືອນຖ້າປະເພດກັບຄືນຂອງຟັງຊັນມີຄຸນສົມບັດປະເພດເຊັ່ນ "const". ສໍາລັບ ISO C
ຄຸນສົມບັດປະເພດດັ່ງກ່າວບໍ່ມີຜົນ, ເພາະວ່າຄ່າທີ່ສົ່ງຄືນໂດຍຟັງຊັນບໍ່ແມ່ນ
ມູນຄ່າ. ສໍາລັບ C ++, ການເຕືອນແມ່ນປ່ອຍອອກມາພຽງແຕ່ສໍາລັບປະເພດ scalar ຫຼື "void". ISO C
ຫ້າມປະເພດການສົ່ງຄືນ "void" ທີ່ມີຄຸນວຸດທິໃນຄໍານິຍາມຂອງຫນ້າທີ່, ດັ່ງນັ້ນປະເພດການກັບຄືນດັ່ງກ່າວ
ໄດ້ຮັບການເຕືອນສະເຫມີເຖິງແມ່ນວ່າບໍ່ມີທາງເລືອກນີ້.

ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ -Wextra.

- ຜູ້ຍິງ
ເຕືອນຖ້າຫາກວ່າປະເພດຂອງ "ຕົ້ນຕໍ" ແມ່ນສົງໃສ. "ຕົ້ນຕໍ" ຄວນຈະເປັນຫນ້າທີ່ກັບພາຍນອກ
linkage, ກັບຄືນ int, ເອົາບໍ່ວ່າຈະເປັນສູນ arguments, ສອງ, ຫຼືສາມ arguments ຂອງ
ປະເພດທີ່ເຫມາະສົມ. ການເຕືອນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນ C++ ແລະຖືກເປີດໃຊ້ໂດຍທັງສອງ
- ຝາ or -Wpedantic.

-Wmissing-braces
ເຕືອນຖ້າຫາກວ່າການລວບລວມຫຼືການເລີ່ມຕົ້ນຂອງສະຫະພັນແມ່ນບໍ່ໄດ້ຢູ່ໃນວົງເລັບຢ່າງເຕັມສ່ວນ. ໃນຕໍ່ໄປນີ້
ຕົວຢ່າງ, ຕົວກໍານົດຕົ້ນສໍາລັບ "a" ບໍ່ໄດ້ຢູ່ໃນວົງເລັບຢ່າງເຕັມທີ່, ແຕ່ວ່າສໍາລັບ "b" ແມ່ນຢ່າງເຕັມສ່ວນ
ວົງເລັບ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ ໃນ C.

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++ ເທົ່ານັ້ນ)
ເຕືອນ ຖ້າ ຫາກ ວ່າ ຜູ້ ໃຊ້ ສະ ຫນອງ ໃຫ້ ປະ ກອບ ມີ directory ບໍ່ ມີ.

-Wparentheses
ເຕືອນຖ້າວົງເລັບຖືກລະເວັ້ນໃນບາງສະພາບການ, ເຊັ່ນ: ເມື່ອມີ
ການມອບໝາຍໃນບໍລິບົດທີ່ຄາດການຄ່າຄວາມຈິງ, ຫຼືເມື່ອຕົວປະຕິບັດການຖືກວາງໄວ້
ຄົນກ່ອນໜ້ານັ້ນມັກສັບສົນ.

ຍັງເຕືອນຖ້າການປຽບທຽບເຊັ່ນ "x<=y<=z" ປະກົດຂຶ້ນ; ອັນນີ້ເທົ່າກັບ "(x<=y ? 1 :
0) <= z” ເຊິ່ງເປັນການຕີຄວາມໝາຍທີ່ແຕກຕ່າງຈາກຄະນິດສາດທຳມະດາ
ແນວຄິດ.

ນອກຈາກນີ້ຍັງເຕືອນກ່ຽວກັບການກໍ່ສ້າງທີ່ອາດຈະສັບສົນກັບຄໍາວ່າ "ຖ້າ" ເປັນ
ສາຂາ "ອື່ນ" ເປັນ. ນີ້ແມ່ນຕົວຢ່າງຂອງກໍລະນີດັ່ງກ່າວ:

{
ຖ້າ (ກ)
ຖ້າ (ຂ)
foo ();
ອື່ນ
ບາ ();
}

ໃນ C/C ++, ທຸກໆສາຂາ "ອື່ນ" ເປັນຂອງຂໍ້ຄວາມ "ຖ້າ" ທີ່ເປັນໄປໄດ້, ເຊິ່ງ
ໃນຕົວຢ່າງນີ້ແມ່ນ "ຖ້າ (b)". ນີ້ມັກຈະບໍ່ແມ່ນສິ່ງທີ່ນັກຂຽນໂປລແກລມຄາດໄວ້, ເປັນ
ສະແດງໃຫ້ເຫັນໃນຕົວຢ່າງຂ້າງເທິງໂດຍການຫຍໍ້ຫນ້າໂປລແກລມເລືອກ. ເມື່ອມີ
ທ່າແຮງສໍາລັບຄວາມສັບສົນນີ້, GCC ອອກຄໍາເຕືອນເມື່ອທຸງນີ້ຖືກກໍານົດ.
ເພື່ອລົບລ້າງການເຕືອນໄພ, ໃຫ້ເພີ່ມວົງເລັບທີ່ຊັດເຈນປະມານຂໍ້ຄວາມ "ຖ້າ" ພາຍໃນທີ່ສຸດ
ບໍ່ມີທາງທີ່ "ອື່ນ" ສາມາດເປັນຂອງ "ຖ້າ". ລະຫັດຜົນໄດ້ຮັບເບິ່ງ
ເຊັ່ນນີ້:

{
ຖ້າ (ກ)
{
ຖ້າ (ຂ)
foo ();
ອື່ນ
ບາ ();
}
}

ນອກຈາກນີ້ຍັງເຕືອນສໍາລັບການນໍາໃຊ້ອັນຕະລາຍຂອງການຂະຫຍາຍ GNU ກັບ "?:" ທີ່ມີ operand ກາງທີ່ຖືກລະເວັ້ນ.
ເມື່ອເງື່ອນໄຂໃນ "?": operator ແມ່ນການສະແດງອອກ boolean, ມູນຄ່າທີ່ຖືກຍົກເລີກແມ່ນ
1. ເລື້ອຍໆນັກຂຽນໂປລແກລມຄາດຫວັງວ່າມັນເປັນຄ່າທີ່ຄິດໄລ່ພາຍໃນເງື່ອນໄຂ
ການສະແດງອອກແທນ.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

- ລໍາດັບຈຸດ
ເຕືອນກ່ຽວກັບລະຫັດທີ່ອາດມີ semantics ບໍ່ໄດ້ກໍານົດເນື່ອງຈາກການລະເມີດລໍາດັບ
ກົດລະບຽບຈຸດໃນມາດຕະຖານ C ແລະ C ++.

ມາດຕະຖານ C ແລະ C ++ ກໍານົດຄໍາສັ່ງທີ່ສະແດງອອກໃນໂຄງການ C / C ++
ການປະເມີນໃນແງ່ຂອງ ລໍາດັບ ຈຸດ, ເຊິ່ງເປັນຕົວແທນຂອງຄໍາສັ່ງບາງສ່ວນລະຫວ່າງ
ການ​ປະ​ຕິ​ບັດ​ຂອງ​ພາກ​ສ່ວນ​ຂອງ​ໂຄງ​ການ​: ຜູ້​ທີ່​ປະ​ຕິ​ບັດ​ກ່ອນ​ທີ່​ຈຸດ​ລໍາ​ດັບ​, ແລະ​ເຫຼົ່າ​ນັ້ນ​
ປະ​ຕິ​ບັດ​ຫຼັງ​ຈາກ​ນັ້ນ​. ເຫຼົ່ານີ້ເກີດຂຶ້ນຫຼັງຈາກການປະເມີນຜົນຂອງການສະແດງອອກຢ່າງເຕັມທີ່ (ຫນຶ່ງທີ່
ບໍ່ແມ່ນສ່ວນຫນຶ່ງຂອງການສະແດງອອກທີ່ໃຫຍ່ກວ່າ), ຫຼັງຈາກການປະເມີນຜົນຂອງ operand ທໍາອິດຂອງ a
"&&", "||", "? :" ຫຼື "," (ເຄື່ອງໝາຍຈຸດ), ກ່ອນທີ່ຈະເອີ້ນຟັງຊັນໃດໜຶ່ງ (ແຕ່ຫຼັງຈາກ
ການ​ປະ​ເມີນ​ຜົນ​ຂອງ​ການ​ໂຕ້​ຖຽງ​ຂອງ​ຕົນ​ແລະ​ການ​ສະ​ແດງ​ອອກ​ທີ່​ລະ​ບຸ​ຫນ້າ​ທີ່​ເອີ້ນ​ວ່າ​)​, ແລະ​ໃນ​
ບາງບ່ອນ. ນອກເຫນືອຈາກການສະແດງອອກໂດຍກົດລະບຽບຈຸດລໍາດັບ, ຄໍາສັ່ງ
ຂອງການປະເມີນ subexpressions ຂອງການສະແດງອອກແມ່ນບໍ່ໄດ້ລະບຸໄວ້. ກົດລະບຽບທັງຫມົດເຫຼົ່ານີ້
ອະທິບາຍພຽງແຕ່ຄໍາສັ່ງບາງສ່ວນແທນທີ່ຈະເປັນຄໍາສັ່ງທັງຫມົດ, ເນື່ອງຈາກວ່າ, ສໍາລັບການຍົກຕົວຢ່າງ, ຖ້າຫາກວ່າສອງ
ຫນ້າທີ່ຖືກເອີ້ນວ່າພາຍໃນຫນຶ່ງສະແດງອອກທີ່ບໍ່ມີຈຸດລໍາດັບລະຫວ່າງພວກມັນ, the
ຄໍາສັ່ງໃນຫນ້າທີ່ຖືກເອີ້ນວ່າບໍ່ໄດ້ລະບຸ. ຢ່າງໃດກໍຕາມ, ມາດຕະຖານ
ຄະນະກໍາມະການໄດ້ຕັດສິນວ່າການໂທຫາຫນ້າທີ່ບໍ່ຊ້ໍາກັນ.

ມັນບໍ່ໄດ້ຖືກລະບຸໃນເວລາທີ່ລະຫວ່າງການດັດແກ້ຈຸດລໍາດັບກັບຄ່າຂອງ
ວັດຖຸມີຜົນ. ບັນດາໂຄງການທີ່ມີພຶດຕິກໍາຂຶ້ນກັບນີ້ ມີພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດ;
ມາດຕະຖານ C ແລະ C ++ ລະບຸວ່າ "ລະຫວ່າງລໍາດັບທີ່ຜ່ານມາແລະຕໍ່ໄປຊີ້ໃຫ້ເຫັນເຖິງ
ວັດ​ຖຸ​ຈະ​ມີ​ມູນ​ຄ່າ​ທີ່​ເກັບ​ຮັກ​ສາ​ໄວ້​ຂອງ​ຕົນ​ໃນ​ຫຼາຍ​ທີ່​ສຸດ​ຄັ້ງ​ດຽວ​ໂດຍ​ການ​ປະ​ເມີນ​ຜົນ​ຂອງ​
ການສະແດງອອກ. ນອກຈາກນັ້ນ, ມູນຄ່າກ່ອນຫນ້າຈະຖືກອ່ານພຽງແຕ່ເພື່ອກໍານົດມູນຄ່າທີ່ຈະ
ຈະຖືກເກັບຮັກສາໄວ້.". ຖ້າໂຄງການໃດນຶ່ງລະເມີດກົດລະບຽບເຫຼົ່ານີ້, ຜົນໄດ້ຮັບໂດຍສະເພາະ
ການປະຕິບັດແມ່ນບໍ່ສາມາດຄາດເດົາໄດ້ທັງຫມົດ.

ຕົວຢ່າງຂອງລະຫັດທີ່ມີພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດແມ່ນ "a = a++;", "a[n] = b[n++]" ແລະ "a[i++] =
i;". ບາງກໍລະນີທີ່ສັບສົນຫຼາຍບໍ່ໄດ້ຖືກວິນິດໄສໂດຍທາງເລືອກນີ້, ແລະມັນອາດຈະໃຫ້
ບາງຄັ້ງຜົນໄດ້ຮັບໃນທາງບວກທີ່ບໍ່ຖືກຕ້ອງ, ແຕ່ໂດຍທົ່ວໄປແລ້ວມັນໄດ້ຖືກພົບເຫັນວ່າມີຜົນດີຢູ່
ກວດພົບບັນຫາແບບນີ້ຢູ່ໃນບັນດາໂຄງການ.

ມາດຕະຖານແມ່ນຄໍາສັບທີ່ສັບສົນ, ດັ່ງນັ້ນຈຶ່ງມີການໂຕ້ວາທີບາງຢ່າງກ່ຽວກັບຄວາມຊັດເຈນ
ຄວາມຫມາຍຂອງກົດລະບຽບຈຸດລໍາດັບໃນກໍລະນີຂອງ subtle. ການ​ເຊື່ອມ​ຕໍ່​ກັບ​ການ​ສົນ​ທະ​ນາ​ຂອງ​
ບັນຫາ, ລວມທັງຄໍານິຍາມຢ່າງເປັນທາງການທີ່ສະເຫນີ, ອາດຈະພົບຢູ່ໃນຫນ້າອ່ານ GCC,
ຢູ່http://gcc.gnu.org/readings.html>.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ ສໍາລັບ C ແລະ C ++.

-Wno-return-local-addr
ຢ່າເຕືອນກ່ຽວກັບການກັບຄືນຕົວຊີ້ (ຫຼືໃນ C ++, ເອກະສານອ້າງອີງ) ໄປຫາຕົວແປທີ່ໄປ
ອອກຈາກຂອບເຂດຫຼັງຈາກຟັງຊັນກັບຄືນມາ.

- ປະ​ເພດ Wreturn​
ເຕືອນທຸກຄັ້ງທີ່ຟັງຊັນຖືກກຳນົດດ້ວຍປະເພດຜົນຕອບແທນທີ່ເປັນຄ່າເລີ່ມຕົ້ນເປັນ "int". ນອກຈາກນີ້
ເຕືອນກ່ຽວກັບຄໍາຖະແຫຼງທີ່ "ກັບຄືນ" ໃດໆທີ່ບໍ່ມີຄ່າກັບຄືນໃນຟັງຊັນທີ່ມີປະເພດຜົນຕອບແທນ
ບໍ່ແມ່ນ "void" (ການຫຼຸດລົງອອກຈາກການສິ້ນສຸດຂອງຮ່າງກາຍຂອງຫນ້າທີ່ແມ່ນຖືວ່າກັບຄືນມາ
ໂດຍບໍ່ມີຄ່າ), ແລະກ່ຽວກັບຄໍາຖະແຫຼງ "ກັບຄືນ" ດ້ວຍການສະແດງອອກໃນຫນ້າທີ່
ປະເພດຂອງການກັບຄືນຂອງມັນແມ່ນ "void".

ສໍາລັບ C ++, ຟັງຊັນທີ່ບໍ່ມີປະເພດກັບຄືນສະເຫມີຜະລິດຂໍ້ຄວາມວິນິດໄສ, ເຖິງແມ່ນວ່າ
ໃນເວລາທີ່ -Wno-return-type ຖືກກໍານົດ. ຂໍ້ຍົກເວັ້ນພຽງແຕ່ "ຕົ້ນຕໍ" ແລະຫນ້າທີ່
ກໍານົດຢູ່ໃນສ່ວນຫົວຂອງລະບົບ.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wshift-ນັບ-ລົບ
ເຕືອນຖ້າການນັບການປ່ຽນແປງເປັນລົບ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-Wshift-count-overflow
ເຕືອນຖ້າ shift ນັບ >= width of type. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

- ສະຫວິດ
ເຕືອນທຸກຄັ້ງທີ່ຖະແຫຼງການ "ສະຫຼັບ" ມີດັດຊະນີຂອງປະເພດການນັບ ແລະຂາດ "ກໍລະນີ"
ສໍາລັບຫນຶ່ງຫຼືຫຼາຍກວ່າລະຫັດທີ່ມີຊື່ຂອງການນັບຈໍານວນນັ້ນ. (ການປະກົດຕົວຂອງ "ຄ່າເລີ່ມຕົ້ນ"
ປ້າຍຊື່ປ້ອງກັນການເຕືອນນີ້.) "ກໍລະນີ" ປ້າຍຊື່ຢູ່ນອກຂອບເຂດການນັບ
ກະຕຸ້ນເຕືອນເມື່ອທາງເລືອກນີ້ຖືກນໍາໃຊ້ (ເຖິງແມ່ນວ່າມີປ້າຍຊື່ "ຄ່າເລີ່ມຕົ້ນ"). ນີ້
ການເຕືອນໄພຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wswitch-default
ເຕືອນທຸກຄັ້ງທີ່ຂໍ້ຄວາມ "ສະຫຼັບ" ບໍ່ມີກໍລະນີ "ເລີ່ມຕົ້ນ".

-Wwwitch-enum
ເຕືອນທຸກຄັ້ງທີ່ຖະແຫຼງການ "ສະຫຼັບ" ມີດັດຊະນີຂອງປະເພດການນັບ ແລະຂາດ "ກໍລະນີ"
ສໍາລັບຫນຶ່ງຫຼືຫຼາຍກວ່າລະຫັດທີ່ມີຊື່ຂອງການນັບຈໍານວນນັ້ນ. ປ້າຍ "ກໍລະນີ" ຢູ່ນອກ
ຊ່ວງການນັບເລກຍັງເຮັດໃຫ້ເກີດການເຕືອນເມື່ອຕົວເລືອກນີ້ຖືກໃຊ້. ຄວາມແຕກຕ່າງພຽງແຕ່
ລະຫວ່າງ - ສະຫວິດ ແລະທາງເລືອກນີ້ແມ່ນວ່າທາງເລືອກນີ້ໃຫ້ຄໍາເຕືອນກ່ຽວກັບການລະເວັ້ນ
ລະຫັດ enumeration ເຖິງແມ່ນວ່າຈະມີປ້າຍ "ຄ່າເລີ່ມຕົ້ນ".

-Wswitch-bool
ເຕືອນທຸກຄັ້ງທີ່ຂໍ້ຄວາມ "ສະຫຼັບ" ມີດັດຊະນີຂອງປະເພດ boolean. ມັນເປັນໄປໄດ້
ສະກັດກັ້ນການເຕືອນນີ້ໂດຍການສົ່ງສັນຍານການຄວບຄຸມໄປຫາປະເພດອື່ນທີ່ບໍ່ແມ່ນ
"ບູລ". ຍົກ​ຕົວ​ຢ່າງ:

ສະຫຼັບ ((int) (a == 4))
{
...
}

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສຳລັບໂປຣແກຣມ C ແລະ C++.

-Wsync-nand (C ແລະ C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຟັງຊັນໃນຕົວ "__sync_fetch_and_nand" ແລະ "__sync_nand_and_fetch"
ໃຊ້. ໜ້າທີ່ເຫຼົ່ານີ້ໄດ້ປ່ຽນຄວາມໝາຍໃນ GCC 4.4.

-Wtrigraphs
ເຕືອນຖ້າພົບ trigraphs ທີ່ອາດຈະປ່ຽນຄວາມຫມາຍຂອງໂຄງການ
(trigraphs ພາຍໃນຄໍາເຫັນບໍ່ໄດ້ຖືກເຕືອນກ່ຽວກັບ). ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wunused-but-set-parameter
ເຕືອນທຸກຄັ້ງທີ່ພາຣາມິເຕີຟັງຊັນຖືກມອບໝາຍໃຫ້, ແຕ່ບໍ່ຖືກໃຊ້ (ນອກເໜືອໄປຈາກ
ຖະ​ແຫຼງ​ການ​ຂອງ​ຕົນ).

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ ພ້ອມດ້ວຍ -Wextra.

-Wunused-but-set-variable
ເຕືອນທຸກຄັ້ງທີ່ຕົວແປທ້ອງຖິ່ນຖືກມອບໝາຍໃຫ້, ແຕ່ຖ້າບໍ່ດັ່ງນັ້ນບໍ່ໄດ້ໃຊ້ (ນອກຈາກມັນ
ປະກາດ). ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​, ເຊິ່ງຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wunused-function
ເຕືອນທຸກຄັ້ງທີ່ຟັງຊັນສະຖິດຖືກປະກາດແຕ່ບໍ່ໄດ້ກຳນົດ ຫຼືເປັນສະຖິດທີ່ບໍ່ຢູ່ໃນແຖວ
ຟັງຊັນບໍ່ໄດ້ໃຊ້. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wunused-label
ເຕືອນທຸກຄັ້ງທີ່ປ້າຍຖືກປະກາດແຕ່ບໍ່ໄດ້ໃຊ້. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

-Wunused-local-typedefs (C, Objective-C, C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນໃນເວລາທີ່ typedef ທີ່ກໍານົດຢູ່ໃນທ້ອງຖິ່ນໃນຟັງຊັນບໍ່ຖືກນໍາໃຊ້. ການເຕືອນໄພນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍ - ຝາ.

-Wunused-ພາລາມິເຕີ
ເຕືອນທຸກຄັ້ງທີ່ພາຣາມິເຕີຟັງຊັນບໍ່ໄດ້ໃຊ້ນອກຈາກການປະກາດຂອງມັນ.

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

-Wno-unused-ຜົນ
ຢ່າເຕືອນຖ້າຜູ້ໂທຂອງຟັງຊັນທີ່ຖືກຫມາຍດ້ວຍຄຸນລັກສະນະ "warn_unused_result" ເຮັດ.
ບໍ່ໃຊ້ມູນຄ່າກັບຄືນຂອງມັນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -Wunused ຜົນ​ໄດ້​ຮັບ​.

-Wunused-variable
ເຕືອນທຸກຄັ້ງທີ່ຕົວແປທ້ອງຖິ່ນ ຫຼືຕົວແປສະຖິດທີ່ບໍ່ຄົງທີ່ຈະບໍ່ຖືກໃຊ້ນອກເໜືອໄປຈາກ
ການ​ປະ​ກາດ​ຂອງ​ຕົນ​. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

ເພື່ອສະກັດກັ້ນການເຕືອນນີ້ໃຫ້ໃຊ້ຄຸນລັກສະນະ "ບໍ່ໄດ້ໃຊ້".

-Wunused-value
ເຕືອນທຸກຄັ້ງທີ່ຄຳຖະແຫຼງຄຳນວນຜົນທີ່ບໍ່ໄດ້ໃຊ້ຢ່າງຈະແຈ້ງ. ເພື່ອສະກັດກັ້ນ
ການເຕືອນໄພນີ້ເຮັດໃຫ້ການສະແດງອອກທີ່ບໍ່ໄດ້ໃຊ້ເປັນ "ໂມ້". ນີ້​ປະ​ກອບ​ມີ​ການ​ສະ​ແດງ​ອອກ -
ຖະແຫຼງການ ຫຼືທາງຊ້າຍຂອງເຄື່ອງໝາຍຈຸດທີ່ບໍ່ມີຜົນຂ້າງຄຽງ.
ຕົວຢ່າງເຊັ່ນ "x[i,j]" ເຮັດໃຫ້ເກີດການເຕືອນ, ໃນຂະນະທີ່ "x[(void)i,j]"
ບໍ່.

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

- ບໍ່​ໄດ້​ນໍາ​ໃຊ້​
ທັງ ໝົດ ຂ້າງເທິງ - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ ທາງ​ເລືອກ​ລວມ​.

ເພື່ອ​ໃຫ້​ໄດ້​ຮັບ​ຄໍາ​ເຕືອນ​ກ່ຽວ​ກັບ​ຕົວ​ກໍາ​ນົດ​ການ​ທໍາ​ງານ​ທີ່​ບໍ່​ໄດ້​ນໍາ​ໃຊ້​, ທ່ານ​ຈະ​ຕ້ອງ​ລະ​ບຸ​
-Wextra - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​ (ໃຫ້ສັງເກດວ່າ - ຝາ implies - ບໍ່​ໄດ້​ນໍາ​ໃຊ້​), ຫຼືລະບຸແຍກຕ່າງຫາກ
-Wunused-ພາລາມິເຕີ.

- ປະກາດ
ເຕືອນຖ້າຕົວແປອັດຕະໂນມັດຖືກໃຊ້ໂດຍບໍ່ໄດ້ເລີ່ມຕົ້ນກ່ອນ ຫຼືຖ້າຕົວແປ
ອາດຈະຖືກ clobbed ໂດຍການໂທ "setjmp". ໃນ C ++, ເຕືອນຖ້າການອ້າງອີງທີ່ບໍ່ແມ່ນສະຖິດ ຫຼື ບໍ່ແມ່ນ.
ສະມາຊິກ "const" ຄົງທີ່ປາກົດຢູ່ໃນຫ້ອງຮຽນທີ່ບໍ່ມີຕົວສ້າງ.

ຖ້າທ່ານຕ້ອງການເຕືອນກ່ຽວກັບລະຫັດທີ່ໃຊ້ຄ່າ uninitialized ຂອງຕົວແປໃນ
initializer ຂອງຕົນເອງ, ການນໍາໃຊ້ - ວິນ​ຍານ​ຕົນ​ເອງ​ ທາງເລືອກ.

ການເຕືອນໄພເຫຼົ່ານີ້ເກີດຂຶ້ນສໍາລັບອົງປະກອບຂອງໂຄງສ້າງທີ່ບໍ່ໄດ້ກໍານົດເອງຫຼື clobbered ສ່ວນບຸກຄົນ,
union ຫຼື array variables ເຊັ່ນດຽວກັນກັບຕົວແປທີ່ uninitialized ຫຼື clobbered
ໂດຍລວມ. ພວກມັນບໍ່ເກີດຂຶ້ນສໍາລັບຕົວແປຫຼືອົງປະກອບທີ່ປະກາດວ່າ "ການເຫນັງຕີງ". ເນື່ອງຈາກວ່າ
ການເຕືອນໄພເຫຼົ່ານີ້ແມ່ນຂຶ້ນກັບການເພີ່ມປະສິດທິພາບ, ຕົວແປທີ່ແນ່ນອນຫຼືອົງປະກອບທີ່ມີ
ຄໍາເຕືອນແມ່ນຂຶ້ນກັບທາງເລືອກການເພີ່ມປະສິດທິພາບທີ່ຊັດເຈນແລະສະບັບຂອງ GCC ທີ່ໃຊ້.

ໃຫ້ສັງເກດວ່າອາດຈະບໍ່ມີຄໍາເຕືອນກ່ຽວກັບຕົວແປທີ່ຖືກນໍາໃຊ້ເພື່ອຄິດໄລ່ a
ຄ່າຕົວຂອງມັນເອງບໍ່ເຄີຍຖືກໃຊ້, ເພາະວ່າການຄິດໄລ່ດັ່ງກ່າວອາດຈະຖືກລຶບໂດຍການໄຫຼຂອງຂໍ້ມູນ
ການວິເຄາະກ່ອນທີ່ຈະພິມຄໍາເຕືອນ.

-Wmaybe-unitialized
ສໍາລັບຕົວແປອັດຕະໂນມັດ, ຖ້າມີເສັ້ນທາງຈາກຫນ້າທີ່ເຂົ້າໄປຫາການນໍາໃຊ້
ຕົວ​ປ່ຽນ​ແປງ​ທີ່​ໄດ້​ຮັບ​ການ​ເລີ່ມ​ຕົ້ນ​, ແຕ່​ວ່າ​ມີ​ບາງ​ເສັ້ນ​ທາງ​ອື່ນໆ​ສໍາ​ລັບ​ການ​
ຕົວແປບໍ່ໄດ້ຖືກເລີ່ມຕົ້ນ, compiler ປ່ອຍຄໍາເຕືອນຖ້າມັນບໍ່ສາມາດພິສູດໄດ້
ເສັ້ນທາງທີ່ບໍ່ໄດ້ເລີ່ມຕົ້ນແມ່ນບໍ່ໄດ້ປະຕິບັດໃນເວລາແລ່ນ. ການເຕືອນເຫຼົ່ານີ້ຖືກສ້າງເປັນທາງເລືອກ
ເນື່ອງຈາກວ່າ GCC ບໍ່ສະຫລາດພໍທີ່ຈະເຫັນເຫດຜົນທັງຫມົດວ່າເປັນຫຍັງລະຫັດອາດຈະຖືກຕ້ອງ
ເຖິງວ່າຈະມີປະກົດວ່າມີຄວາມຜິດພາດ. ນີ້ແມ່ນຕົວຢ່າງຫນຶ່ງຂອງວິທີການນີ້ສາມາດເກີດຂຶ້ນໄດ້:

{
int x;
ສະຫຼັບ (y)
{
ກໍລະນີ 1: x = 1;
ທໍາລາຍ;
ກໍລະນີ 2: x = 4;
ທໍາລາຍ;
ກໍລະນີ 3: x = 5;
}
foo(x);
}

ຖ້າຄ່າຂອງ "y" ແມ່ນສະເຫມີ 1, 2 ຫຼື 3, ຫຼັງຈາກນັ້ນ "x" ຈະຖືກເລີ່ມຕົ້ນສະເຫມີ, ແຕ່ GCC.
ບໍ່ຮູ້ເລື່ອງນີ້. ເພື່ອສະກັດກັ້ນການເຕືອນໄພ, ທ່ານຈໍາເປັນຕ້ອງໃຫ້ກໍລະນີເລີ່ມຕົ້ນທີ່ມີ
ຢືນຢັນ(0) ຫຼືລະຫັດທີ່ຄ້າຍຄືກັນ.

ທາງ​ເລືອກ​ນີ້​ຍັງ​ເຕືອນ​ວ່າ​ໃນ​ເວ​ລາ​ທີ່​ຕົວ​ປ່ຽນ​ແປງ​ອັດ​ຕະ​ໂນ​ມັດ​ທີ່​ບໍ່​ມີ​ການ​ລະ​ເຫີຍ​ອາດ​ຈະ​ໄດ້​ຮັບ​ການ​ປ່ຽນ​ແປງ​ໂດຍ a
ໂທຫາ "longjmp". ການເຕືອນໄພເຫຼົ່ານີ້ແມ່ນເປັນໄປໄດ້ພຽງແຕ່ໃນການເພີ່ມປະສິດທິພາບ
ການລວບລວມ.

compiler ເຫັນພຽງແຕ່ການໂທຫາ "setjmp". ມັນບໍ່ສາມາດຮູ້ວ່າ "longjmp" ຈະຢູ່ໃສ
ເອີ້ນວ່າ; ໃນຄວາມເປັນຈິງ, ຕົວຈັບສັນຍານສາມາດໂທຫາມັນຢູ່ໃນຈຸດໃດຫນຶ່ງໃນລະຫັດ. ເປັນ
ຜົນໄດ້ຮັບ, ທ່ານອາດຈະໄດ້ຮັບການເຕືອນໄພເຖິງແມ່ນວ່າໃນຄວາມເປັນຈິງບໍ່ມີບັນຫາເພາະວ່າ "longjmp"
ໃນຄວາມເປັນຈິງບໍ່ສາມາດຖືກເອີ້ນຢູ່ໃນສະຖານທີ່ທີ່ຈະເຮັດໃຫ້ເກີດບັນຫາ.

ບາງຄໍາເຕືອນທີ່ຂີ້ຮ້າຍສາມາດຫຼີກລ່ຽງໄດ້ຖ້າທ່ານປະກາດຫນ້າທີ່ທັງຫມົດທີ່ເຈົ້າໃຊ້ນັ້ນ
ບໍ່ເຄີຍກັບຄືນມາເປັນ "noreturn".

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ or -Wextra.

-Wunknown-pragmas
ເຕືອນເມື່ອພົບຄຳສັ່ງ "#pragma" ທີ່ GCC ບໍ່ເຂົ້າໃຈ. ຖ້ານີ້
ທາງເລືອກເສັ້ນຄໍາສັ່ງຖືກນໍາໃຊ້, ການເຕືອນໄພແມ່ນຍັງອອກສໍາລັບ pragmas ທີ່ບໍ່ຮູ້ຈັກໃນລະບົບ
ໄຟລ໌ຫົວ. ນີ້ບໍ່ແມ່ນກໍລະນີຖ້າຫາກວ່າຄໍາເຕືອນໄດ້ຖືກເປີດໃຊ້ພຽງແຕ່ໂດຍ - ຝາ
ທາງເລືອກແຖວຄໍາສັ່ງ.

-Wno-pragmas
ຢ່າເຕືອນກ່ຽວກັບການໃຊ້ pragmas ທີ່ບໍ່ຖືກຕ້ອງ, ເຊັ່ນ: ຕົວກໍານົດການທີ່ບໍ່ຖືກຕ້ອງ, syntax ທີ່ບໍ່ຖືກຕ້ອງ, ຫຼື
ຂໍ້ຂັດແຍ່ງລະຫວ່າງ pragmas. ເບິ່ງນຳ -Wunknown-pragmas.

-Wstrict-aliasing
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -fstrict-aliasing ມີການເຄື່ອນໄຫວ. ມັນເຕືອນກ່ຽວກັບລະຫັດວ່າ
ອາດຈະທໍາລາຍກົດລະບຽບນາມແຝງທີ່ເຄັ່ງຄັດທີ່ compiler ກໍາລັງໃຊ້ສໍາລັບການເພີ່ມປະສິດທິພາບ.
ການ​ເຕືອນ​ໄພ​ບໍ່​ໄດ້​ຈັບ​ທຸກ​ກໍ​ລະ​ນີ​, ແຕ່​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ຈັບ​ຫຼາຍ​ທົ່ວ​ໄປ​
ຂຸມ. ມັນລວມຢູ່ໃນ - ຝາ. ມັນເທົ່າກັບ -Wstrict-aliasing=3

-Wstrict-aliasing=n
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -fstrict-aliasing ມີການເຄື່ອນໄຫວ. ມັນເຕືອນກ່ຽວກັບລະຫັດວ່າ
ອາດຈະທໍາລາຍກົດລະບຽບນາມແຝງທີ່ເຄັ່ງຄັດທີ່ compiler ກໍາລັງໃຊ້ສໍາລັບການເພີ່ມປະສິດທິພາບ.
ລະດັບທີ່ສູງຂຶ້ນກົງກັບຄວາມຖືກຕ້ອງທີ່ສູງຂຶ້ນ (ຜົນບວກທີ່ບໍ່ຖືກຕ້ອງຫນ້ອຍລົງ). ລະດັບທີ່ສູງຂຶ້ນ
ຍັງສອດຄ່ອງກັບຄວາມພະຍາຍາມຫຼາຍ, ຄ້າຍຄືກັນກັບວິທີການ -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-ລົ້ນ
-Wstrict-overflow=n
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -fstrict-ລົ້ນ ມີການເຄື່ອນໄຫວ. ມັນເຕືອນກ່ຽວກັບກໍລະນີ
ບ່ອນທີ່ compiler optimize ໂດຍອີງໃສ່ສົມມຸດຕິຖານທີ່ລົງນາມ overflow ບໍ່
ເກີດຂຶ້ນ. ໃຫ້ສັງເກດວ່າມັນບໍ່ເຕືອນກ່ຽວກັບທຸກກໍລະນີທີ່ລະຫັດອາດຈະລົ້ນ: ມັນ
ພຽງແຕ່ເຕືອນກ່ຽວກັບກໍລະນີທີ່ compiler ປະຕິບັດການເພີ່ມປະສິດທິພາບບາງຢ່າງ. ດັ່ງນັ້ນນີ້
ການເຕືອນໄພແມ່ນຂຶ້ນກັບລະດັບການເພີ່ມປະສິດທິພາບ.

ການເພີ່ມປະສິດທິພາບທີ່ສົມມຸດວ່າການລົງນາມ overflow ບໍ່ເກີດຂຶ້ນແມ່ນປອດໄພຢ່າງສົມບູນຖ້າ
ຄຸນຄ່າຂອງຕົວແປທີ່ກ່ຽວຂ້ອງແມ່ນແບບທີ່ overflow ບໍ່ເຄີຍເຮັດ, ໃນຄວາມເປັນຈິງ,
ເກີດຂຶ້ນ. ດັ່ງນັ້ນ, ການເຕືອນໄພນີ້ສາມາດໃຫ້ຜົນບວກທີ່ບໍ່ຖືກຕ້ອງໄດ້ຢ່າງງ່າຍດາຍ: ການເຕືອນກ່ຽວກັບລະຫັດ
ຕົວຈິງແລ້ວບໍ່ແມ່ນບັນຫາ. ເພື່ອຊ່ວຍສຸມໃສ່ບັນຫາທີ່ສໍາຄັນ, ການເຕືອນໄພຈໍານວນຫນຶ່ງ
ລະ​ດັບ​ແມ່ນ​ໄດ້​ກໍາ​ນົດ​. ບໍ່​ມີ​ການ​ເຕືອນ​ໄພ​ອອກ​ສໍາ​ລັບ​ການ​ນໍາ​ໃຊ້​ຂອງ​ການ​ເກີນ​ລົງ​ນາມ​ທີ່​ບໍ່​ໄດ້​ກໍາ​ນົດ​
ໃນ​ເວ​ລາ​ທີ່​ການ​ຄາດ​ຄະ​ເນ​ຈໍາ​ນວນ​ຫຼາຍ​ການ​ຊ​້​ໍ​າ loop ຮຽກ​ຮ້ອງ​ໃຫ້​ມີ​, ໂດຍ​ສະ​ເພາະ​ແມ່ນ​ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍາ​ນົດ​
ບໍ່ວ່າຈະເປັນ loop ຈະຖືກປະຕິບັດທັງຫມົດ.

-Wstrict-overflow=1
ເຕືອນກ່ຽວກັບກໍລະນີທີ່ມີທັງຄໍາຖາມແລະງ່າຍທີ່ຈະຫຼີກເວັ້ນ. ຕົວຢ່າງ, ກັບ
-fstrict-ລົ້ນ, compiler simplifies "x + 1 > x" ເປັນ 1. ລະດັບນີ້
-Wstrict-ລົ້ນ ຖືກເປີດໃຊ້ໂດຍ - ຝາ; ລະດັບສູງບໍ່ແມ່ນ, ແລະຈະຕ້ອງເປັນ
ຮຽກຮ້ອງຢ່າງຈະແຈ້ງ.

-Wstrict-overflow=2
ນອກຈາກນີ້ຍັງເຕືອນກ່ຽວກັບກໍລະນີອື່ນໆທີ່ການປຽບທຽບແມ່ນງ່າຍເປັນຄົງທີ່. ສໍາລັບ
ຕົວຢ່າງ: "abs (x) >= 0". ນີ້ພຽງແຕ່ສາມາດງ່າຍດາຍໃນເວລາທີ່ -fstrict-ລົ້ນ ແມ່ນຢູ່ໃນ
ຜົນກະທົບ, ເພາະວ່າ "abs (INT_MIN)" overflows ກັບ "INT_MIN", ເຊິ່ງແມ່ນຫນ້ອຍກວ່າສູນ.
-Wstrict-ລົ້ນ (ບໍ່ມີລະດັບ) ແມ່ນຄືກັນກັບ -Wstrict-overflow=2.

-Wstrict-overflow=3
ນອກຈາກນີ້ຍັງເຕືອນກ່ຽວກັບກໍລະນີອື່ນໆທີ່ການປຽບທຽບແມ່ນງ່າຍດາຍ. ຕົວຢ່າງ: "x + 1
> 1" ຖືກແປເປັນ "x > 0".

-Wstrict-overflow=4
ຍັງເຕືອນກ່ຽວກັບຄວາມງ່າຍດາຍອື່ນໆທີ່ບໍ່ໄດ້ກວມເອົາໂດຍກໍລະນີຂ້າງເທິງ. ສໍາລັບ
ຕົວຢ່າງ: "(x * 10) / 5" ແມ່ນ simplified ກັບ "x * 2".

-Wstrict-overflow=5
ຍັງເຕືອນກ່ຽວກັບກໍລະນີທີ່ compiler ຫຼຸດຜ່ອນຂະຫນາດຂອງຄົງທີ່
ມີສ່ວນຮ່ວມໃນການປຽບທຽບ. ຕົວຢ່າງ: "x + 2 > y" ຖືກແປເປັນ "x + 1 >= y".
ນີ້ແມ່ນລາຍງານພຽງແຕ່ຢູ່ໃນລະດັບເຕືອນໄພສູງສຸດເພາະວ່າຄວາມງ່າຍດາຍນີ້
ໃຊ້ກັບການປຽບທຽບຫຼາຍ, ດັ່ງນັ້ນລະດັບການເຕືອນໄພນີ້ເຮັດໃຫ້ຈໍານວນຂະຫນາດໃຫຍ່ຫຼາຍ
ບວກທີ່ບໍ່ຖືກຕ້ອງ.

-Wsuggest-attribute=[ບໍລິສຸດ|const|noreturn|ຮູບແບບ]
ເຕືອນສໍາລັບກໍລະນີທີ່ການເພີ່ມຄຸນສົມບັດອາດຈະເປັນປະໂຫຍດ. ຄຸນ​ລັກ​ສະ​ນະ​ໃນ​ປັດ​ຈຸ​ບັນ​
ສະ​ຫນັບ​ສະ​ຫນູນ​ແມ່ນ​ລະ​ບຸ​ໄວ້​ຂ້າງ​ລຸ່ມ​ນີ້​.

-Wsuggest-attribute=ບໍລິສຸດ
-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn
ເຕືອນກ່ຽວກັບຫນ້າທີ່ອາດຈະເປັນຜູ້ສະຫມັກສໍາລັບຄຸນລັກສະນະ "ບໍລິສຸດ", "const" ຫຼື
"noreturn". compiler ພຽງແຕ່ເຕືອນສໍາລັບຫນ້າທີ່ສັງເກດເຫັນໃນການລວບລວມຂໍ້ມູນອື່ນໆ
ຫນ່ວຍຫຼື (ໃນກໍລະນີຂອງ "ບໍລິສຸດ" ແລະ "const") ຖ້າມັນບໍ່ສາມາດພິສູດໄດ້ວ່າຫນ້າທີ່
ກັບຄືນມາເປັນປົກກະຕິ. ຟັງຊັນຈະກັບຄືນມາຕາມປົກກະຕິຖ້າມັນບໍ່ມີອັນເປັນນິດ
loop ຫຼືກັບຄືນຜິດປົກກະຕິໂດຍການຖິ້ມ, ເອີ້ນວ່າ "ເອົາລູກອອກ" ຫຼືໃສ່ກັບດັກ. ການວິເຄາະນີ້
ຕ້ອງການທາງເລືອກ -fipa-pure-const, ເຊິ່ງຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.
ລະດັບການເພີ່ມປະສິດທິພາບທີ່ສູງຂຶ້ນປັບປຸງຄວາມຖືກຕ້ອງຂອງການວິເຄາະ.

-Wsuggest-attribute=ຮູບແບບ
-Wmissing-format-attribute
ເຕືອນກ່ຽວກັບຕົວຊີ້ຟັງຊັນທີ່ອາດຈະເປັນຕົວສະຫມັກສໍາລັບຄຸນລັກສະນະ "ຮູບແບບ".
ໃຫ້ສັງເກດວ່າເຫຼົ່ານີ້ແມ່ນພຽງແຕ່ຜູ້ສະຫມັກທີ່ເປັນໄປໄດ້, ບໍ່ແມ່ນຢ່າງແທ້ຈິງ. GCC ເດົາວ່າ
ຕົວຊີ້ຟັງຊັນທີ່ມີຄຸນລັກສະນະ "ຮູບແບບ" ທີ່ຖືກນໍາໃຊ້ໃນການມອບຫມາຍ,
ການເລີ່ມຕົ້ນ, ການຖ່າຍທອດພາລາມິເຕີຫຼືຄໍາຖະແຫຼງການກັບຄືນຄວນມີຄວາມສອດຄ່ອງ
"format" attribute ໃນປະເພດຜົນໄດ້ຮັບ. ເຊັ່ນ: ຊ້າຍມືຂອງ
ການມອບຫມາຍຫຼືເບື້ອງຕົ້ນ, ປະເພດຂອງຕົວແປຕົວແປ, ຫຼືຜົນຕອບແທນ
ປະເພດຂອງຟັງຊັນທີ່ບັນຈຸຕາມລໍາດັບຄວນມີຄຸນລັກສະນະ "ຮູບແບບ".
ເພື່ອຫຼີກເວັ້ນການເຕືອນ.

GCC ຍັງເຕືອນກ່ຽວກັບຄໍານິຍາມຫນ້າທີ່ອາດຈະເປັນຜູ້ສະຫມັກສໍາລັບ "ຮູບແບບ"
ຄຸນ​ລັກ​ສະ​ນະ. ອີກເທື່ອຫນຶ່ງ, ເຫຼົ່ານີ້ແມ່ນພຽງແຕ່ຜູ້ສະຫມັກທີ່ເປັນໄປໄດ້. GCC ເດົາວ່າ "ຮູບແບບ"
ຄຸນ​ລັກ​ສະ​ນະ​ອາດ​ຈະ​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ທີ່​ເອີ້ນ​ວ່າ​ຫນ້າ​ທີ່​ເຊັ່ນ​
"vprintf" ຫຼື "vscanf", ແຕ່ນີ້ອາດຈະບໍ່ສະເຫມີໄປ, ແລະບາງຫນ້າທີ່
ສໍາລັບຄຸນລັກສະນະ "ຮູບແບບ" ທີ່ເຫມາະສົມອາດຈະບໍ່ຖືກກວດພົບ.

-Wsuggest-final-types
ເຕືອນກ່ຽວກັບປະເພດທີ່ມີວິທີການ virtual ທີ່ຄຸນນະພາບລະຫັດຈະໄດ້ຮັບການປັບປຸງຖ້າຫາກວ່າປະເພດ
ໄດ້ຖືກປະກາດດ້ວຍຕົວລະບຸ "ສຸດທ້າຍ" C++ 11, ຫຼື, ຖ້າເປັນໄປໄດ້, ປະກາດໃນ
namespace ທີ່ບໍ່ເປີດເຜີຍຊື່. ນີ້ອະນຸຍາດໃຫ້ GCC ຮຸກຮານຫຼາຍ devirtualize polymorphic
ໂທ. ການເຕືອນໄພນີ້ແມ່ນມີປະສິດທິພາບຫຼາຍຂຶ້ນດ້ວຍການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່, ບ່ອນທີ່
ຂໍ້​ມູນ​ກ່ຽວ​ກັບ​ເສັ້ນ​ສະ​ແດງ​ຊັ້ນ​ຮຽນ​ແມ່ນ​ສໍາ​ເລັດ​ຫຼາຍ​ກວ່າ​.

-Wsuggest-final-methods
ເຕືອນກ່ຽວກັບວິທີການ virtual ທີ່ຄຸນນະພາບລະຫັດຈະຖືກປັບປຸງຖ້າຫາກວ່າວິທີການແມ່ນ
ປະກາດດ້ວຍຕົວລະບຸ "ສຸດທ້າຍ" C++11, ຫຼື, ຖ້າເປັນໄປໄດ້, ປະເພດຂອງມັນຖືກປະກາດໃນ
namespace ທີ່ບໍ່ເປີດເຜີຍຊື່ ຫຼືມີຕົວລະບຸ "ສຸດທ້າຍ". ການເຕືອນໄພນີ້ມີປະສິດທິພາບຫຼາຍຂຶ້ນ
ດ້ວຍການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່, ບ່ອນທີ່ຂໍ້ມູນກ່ຽວກັບກາຟລໍາດັບຊັ້ນແມ່ນ
ສົມບູນກວ່າ. ມັນແມ່ນແນະນໍາໃຫ້ທໍາອິດພິຈາລະນາຄໍາແນະນໍາຂອງ
-Wsuggest-final-types ແລະຫຼັງຈາກນັ້ນສ້າງໃຫມ່ດ້ວຍຄໍາບັນຍາຍໃຫມ່.

-Wsuggest-override
ເຕືອນກ່ຽວກັບການ overriding ຟັງຊັນ virtual ທີ່ບໍ່ໄດ້ຫມາຍດ້ວຍ override keyword.

- Warray-bounds
-Warray-bounds=n
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -ftree-vrp ມີການເຄື່ອນໄຫວ (ຄ່າເລີ່ມຕົ້ນສໍາລັບ -O2 ແລະຂ້າງເທິງ). ມັນ
ເຕືອນກ່ຽວກັບ subscripts ກັບ arrays ສະເຫມີຢູ່ນອກຂອບເຂດ. ການເຕືອນໄພນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍ - ຝາ.

-Warray-bounds=1
ນີ້ແມ່ນລະດັບການເຕືອນໄພຂອງ - Warray-bounds ແລະຖືກເປີດໃຊ້ໂດຍ - ຝາ; ລະດັບສູງ
ບໍ່ແມ່ນ, ແລະຕ້ອງໄດ້ຮັບການຮ້ອງຂໍຢ່າງຈະແຈ້ງ.

-Warray-bounds=2
ລະດັບການເຕືອນໄພນີ້ຍັງເຕືອນກ່ຽວກັບການອອກຈາກຂອບເຂດການເຂົ້າເຖິງສໍາລັບ arrays ໃນຕອນທ້າຍຂອງ
ໂຄງສ້າງແລະສໍາລັບ arrays ທີ່ເຂົ້າເຖິງໂດຍຜ່ານຕົວຊີ້. ລະດັບການເຕືອນໄພນີ້ອາດຈະເຮັດໃຫ້ a
ຈໍານວນຜົນບວກທີ່ບໍ່ຖືກຕ້ອງທີ່ໃຫຍ່ກວ່າແລະຖືກປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ.

-Wbool-ປຽບທຽບ
ເຕືອນກ່ຽວກັບການສະແດງອອກ boolean ທຽບກັບຄ່າ integer ທີ່ແຕກຕ່າງຈາກ
"ຈິງ"/"ບໍ່ຖືກຕ້ອງ". ຕົວຢ່າງ, ການປຽບທຽບຕໍ່ໄປນີ້ແມ່ນບໍ່ຖືກຕ້ອງສະເໝີ:

int n = 5;
...
ຖ້າ ((n > 1) == 2) { ... }

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wno-discarded-qualifiers (C ແລະ Objective-C ເທົ່ານັ້ນ)
ຢ່າເຕືອນຖ້າຕົວຊີ້ປະເພດຢູ່ໃນຕົວຊີ້ຖືກຍົກເລີກ. ໂດຍປົກກະຕິ, ໄດ້
compiler ເຕືອນຖ້າຕົວແປ "const char *" ຖືກສົ່ງກັບຟັງຊັນທີ່ໃຊ້ "char
*" ພາລາມິເຕີ. ທາງເລືອກນີ້ສາມາດຖືກໃຊ້ເພື່ອສະກັດກັ້ນການເຕືອນດັ່ງກ່າວ.

-Wno-discarded-array-qualifiers (C ແລະ Objective-C ເທົ່ານັ້ນ)
ຢ່າເຕືອນຖ້າປະເພດຄຸນສົມບັດຢູ່ໃນອາເຣທີ່ເປັນເປົ້າໝາຍຕົວຊີ້
ຍົກເລີກ. ໂດຍປົກກະຕິ, compiler ເຕືອນຖ້າຕົວແປ "const int (*)[]" ຖືກສົ່ງໄປຫາ.
ຟັງຊັນທີ່ໃຊ້ພາລາມິເຕີ "int (*)[]". ທາງເລືອກນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອສະກັດກັ້ນ
ການເຕືອນໄພດັ່ງກ່າວ.

-Wno-incompatible-pointer-types (C ແລະ Objective-C ເທົ່ານັ້ນ)
ຢ່າເຕືອນເມື່ອມີການແປງລະຫວ່າງຕົວຊີ້ທີ່ມີປະເພດທີ່ບໍ່ເຂົ້າກັນໄດ້.
ຄໍາເຕືອນນີ້ແມ່ນສໍາລັບກໍລະນີທີ່ບໍ່ກວມເອົາໂດຍ -Wno-pointer-sign, ເຊິ່ງເຕືອນສໍາລັບຕົວຊີ້
argument passing ຫຼືການມອບຫມາຍທີ່ມີເຊັນທີ່ແຕກຕ່າງກັນ.

-Wno-int-ແປງ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ຢ່າເຕືອນກ່ຽວກັບການແປງຈໍານວນບໍ່ເຂົ້າກັນກັບຕົວຊີ້ ແລະຕົວຊີ້ໄປຫາຈໍານວນເຕັມ.
ຄໍາເຕືອນນີ້ແມ່ນກ່ຽວກັບການປ່ຽນໃຈເຫລື້ອມໃສ implicit; ສໍາ​ລັບ​ການ​ປ່ຽນ​ແປງ​ທີ່​ຊັດ​ເຈນ​ຄໍາ​ເຕືອນ​
-Wno-int-to-pointer-cast ແລະ -Wno-pointer-to-int-cast ອາດຈະຖືກນໍາໃຊ້.

-Wno-div-by-zero
ຢ່າເຕືອນກ່ຽວກັບການລວບລວມເວລາການຫານຈໍານວນເຕັມໂດຍສູນ. ການແບ່ງຈຸດທີ່ເລື່ອນໄດ້ໂດຍ
ສູນບໍ່ໄດ້ຖືກເຕືອນກ່ຽວກັບ, ຍ້ອນວ່າມັນສາມາດເປັນວິທີທີ່ຖືກຕ້ອງຂອງການໄດ້ຮັບ infinities ແລະ
NaNs.

-Wsystem-headers
ພິມຂໍ້ຄວາມເຕືອນສໍາລັບໂຄງສ້າງທີ່ພົບເຫັນຢູ່ໃນໄຟລ໌ສ່ວນຫົວຂອງລະບົບ. ຄຳເຕືອນຈາກ
ສ່ວນຫົວຂອງລະບົບແມ່ນຖືກສະກັດກັ້ນຕາມປົກກະຕິ, ໂດຍສົມມຸດຕິຖານວ່າພວກມັນມັກຈະບໍ່ເຮັດ
ຊີ້ບອກເຖິງບັນຫາທີ່ແທ້ຈິງ ແລະພຽງແຕ່ຈະເຮັດໃຫ້ຜົນອອກຂອງ compiler ຍາກທີ່ຈະອ່ານໄດ້. ການນໍາໃຊ້
ຕົວເລືອກເສັ້ນຄໍາສັ່ງນີ້ບອກ GCC ໃຫ້ອອກຄໍາເຕືອນຈາກສ່ວນຫົວຂອງລະບົບຄືກັບວ່າພວກເຂົາ
ເກີດຂຶ້ນໃນລະຫັດຜູ້ໃຊ້. ຢ່າງໃດກໍຕາມ, ໃຫ້ສັງເກດວ່າການນໍາໃຊ້ - ຝາ ສົມທົບກັບທາງເລືອກນີ້
ບໍ່ ບໍ່ ເຕືອນກ່ຽວກັບ pragmas ທີ່ບໍ່ຮູ້ຈັກໃນສ່ວນຫົວຂອງລະບົບ --- ສໍາລັບການນັ້ນ, -Wunknown-pragmas
ຍັງຕ້ອງໄດ້ໃຊ້.

-Wtrampolines
ເຕືອນກ່ຽວກັບ trampolines ທີ່ສ້າງຂຶ້ນສໍາລັບຕົວຊີ້ໄປຫາຫນ້າທີ່ຊ້ອນກັນ. trampoline ເປັນ
ຊິ້ນສ່ວນຂະຫນາດນ້ອຍຂອງຂໍ້ມູນຫຼືລະຫັດທີ່ຖືກສ້າງຂື້ນໃນເວລາແລ່ນຢູ່ເທິງ stack ເມື່ອທີ່ຢູ່
ຂອງຟັງຊັນ nested ຖືກປະຕິບັດ, ແລະຖືກນໍາໃຊ້ເພື່ອໂທຫາຫນ້າທີ່ nested ໂດຍທາງອ້ອມ.
ສໍາລັບບາງເປົ້າຫມາຍ, ມັນປະກອບດ້ວຍຂໍ້ມູນເທົ່ານັ້ນແລະດັ່ງນັ້ນຈຶ່ງບໍ່ຈໍາເປັນຕ້ອງມີການປິ່ນປົວພິເສດ.
ແຕ່, ສໍາລັບເປົ້າຫມາຍສ່ວນໃຫຍ່, ມັນແມ່ນປະກອບດ້ວຍລະຫັດແລະດັ່ງນັ້ນຈຶ່ງຮຽກຮ້ອງໃຫ້ມີ stack ທີ່ຈະເຮັດ
ສາມາດປະຕິບັດໄດ້ເພື່ອໃຫ້ໂຄງການເຮັດວຽກຢ່າງຖືກຕ້ອງ.

-Wfloat-ເທົ່າທຽມກັນ
ເຕືອນຖ້າຄ່າຈຸດລອຍຖືກໃຊ້ໃນການປຽບທຽບຄວາມສະເໝີພາບ.

ແນວຄວາມຄິດທີ່ຢູ່ເບື້ອງຫລັງນີ້ແມ່ນວ່າບາງຄັ້ງມັນກໍ່ສະດວກ (ສໍາລັບນັກຂຽນໂປລແກລມ) ເພື່ອ
ພິ​ຈາ​ລະ​ນາ​ຄ່າ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​ເປັນ​ການ​ປະ​ມານ​ກັບ​ຈໍາ​ນວນ​ແທ້​ຈິງ​ທີ່​ຊັດ​ເຈນ infinitely.
ຖ້າທ່ານກໍາລັງເຮັດນີ້, ຫຼັງຈາກນັ້ນທ່ານຈໍາເປັນຕ້ອງຄິດໄລ່ (ໂດຍການວິເຄາະລະຫັດ, ຫຼືບາງ
ວິ​ທີ​ການ​ອື່ນໆ​) ຄວາມ​ຜິດ​ພາດ​ສູງ​ສຸດ​ຫຼື​ອາດ​ຈະ​ສູງ​ສຸດ​ທີ່​ຄໍາ​ນວນ​ແນະ​ນໍາ​, ແລະ​
ອະ​ນຸ​ຍາດ​ໃຫ້​ສໍາ​ລັບ​ມັນ​ໃນ​ເວ​ລາ​ທີ່​ປະ​ຕິ​ບັດ​ການ​ປຽບ​ທຽບ (ແລະ​ໃນ​ເວ​ລາ​ທີ່​ການ​ຜະ​ລິດ​ຜົນ​ຜະ​ລິດ​, ແຕ່​ວ່າ​ເປັນ​
ບັນ​ຫາ​ທີ່​ແຕກ​ຕ່າງ​ກັນ​)​. ໂດຍສະເພາະ, ແທນທີ່ຈະທົດສອບຄວາມສະເຫມີພາບ, ທ່ານຄວນກວດເບິ່ງ
ເພື່ອເບິ່ງວ່າທັງສອງຄ່າມີໄລຍະທີ່ທັບຊ້ອນກັນ; ແລະນີ້ແມ່ນເຮັດໄດ້ກັບ
ຜູ້ປະກອບການທີ່ກ່ຽວຂ້ອງ, ດັ່ງນັ້ນການປຽບທຽບຄວາມສະເຫມີພາບແມ່ນອາດຈະຜິດພາດ.

- ແບບດັ້ງເດີມ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບສິ່ງກໍ່ສ້າງບາງຢ່າງທີ່ມີລັກສະນະແຕກຕ່າງກັນໃນແບບດັ້ງເດີມ ແລະ ISO C. ນອກຈາກນີ້
ເຕືອນກ່ຽວກັບໂຄງສ້າງ ISO C ທີ່ບໍ່ມີການທຽບເທົ່າ C ແບບດັ້ງເດີມ, ແລະ/ຫຼືມີບັນຫາ
ການກໍ່ສ້າງທີ່ຄວນຫຼີກເວັ້ນ.

* ຕົວກໍານົດການ Macro ທີ່ປາກົດຢູ່ໃນຕົວຫນັງສືສະຕຣິງຢູ່ໃນຕົວ macro. ໃນ
ການທົດແທນມະຫາພາກ C ແບບດັ້ງເດີມເກີດຂຶ້ນພາຍໃນຕົວໜັງສືສະຕຣິງ, ແຕ່ໃນ ISO C
ມັນບໍ່.

* ໃນ C ແບບດັ້ງເດີມ, ບາງຄໍາສັ່ງ preprocessor ບໍ່ມີ. ແບບດັ້ງເດີມ
preprocessors ພຽງແຕ່ພິຈາລະນາເສັ້ນທີ່ຈະເປັນຄໍາແນະນໍາຖ້າຫາກວ່າ # ປາກົດຢູ່ໃນຖັນ
1 ຢູ່ໃນເສັ້ນ. ເພາະສະນັ້ນ - ແບບດັ້ງເດີມ ເຕືອນ​ກ່ຽວ​ກັບ​ຄໍາ​ສັ່ງ​ທີ່​ດັ້ງ​ເດີມ C
ເຂົ້າໃຈແຕ່ບໍ່ສົນໃຈເພາະວ່າ # ບໍ່ປາກົດເປັນຕົວອັກສອນທໍາອິດ
ເສັ້ນ. ມັນຍັງແນະນໍາໃຫ້ທ່ານເຊື່ອງຄໍາແນະນໍາເຊັ່ນ "#pragma" ບໍ່ເຂົ້າໃຈໂດຍ
C ແບບດັ້ງເດີມໂດຍການຫຍໍ້ຫນ້າພວກມັນ. ບາງການປະຕິບັດແບບດັ້ງເດີມບໍ່ໄດ້ເຮັດ
ຮັບຮູ້ "#elif", ດັ່ງນັ້ນທາງເລືອກນີ້ແນະນໍາໃຫ້ຫຼີກເວັ້ນມັນທັງຫມົດ.

* ມະຫາພາກຄ້າຍຄືຟັງຊັນທີ່ປາກົດໂດຍບໍ່ມີການໂຕ້ຖຽງ.

* ຕົວປະຕິບັດການ unary plus.

* The U integer constant suffix, ຫຼື F or L ຄຳຕໍ່ທ້າຍຄົງທີ່ຂອງຈຸດລອຍ.
(C ແບບດັ້ງເດີມສະຫນັບສະຫນູນ L suffix ສຸດ integer constants.) ຫມາຍເຫດ, ເຫຼົ່ານີ້
suffixes ປະກົດຢູ່ໃນ macros ທີ່ກໍານົດໄວ້ໃນສ່ວນຫົວລະບົບຂອງລະບົບທີ່ທັນສະໄຫມຫຼາຍທີ່ສຸດ,
ຕົວຢ່າງ _MIN/_MAX ມະຫາພາກໃນ " ". ການນໍາໃຊ້ macro ເຫຼົ່ານີ້ຢູ່ໃນລະຫັດຜູ້ໃຊ້ອາດຈະ
ປົກກະຕິແລ້ວນໍາໄປສູ່ການເຕືອນໄພ spurious, ແນວໃດກໍ່ຕາມ preprocessor ປະສົມປະສານຂອງ GCC ມີ
ສະພາບການພຽງພໍເພື່ອຫຼີກເວັ້ນການເຕືອນໃນກໍລະນີເຫຼົ່ານີ້.

* ຟັງຊັນປະກາດພາຍນອກໃນຫນຶ່ງຕັນແລະຫຼັງຈາກນັ້ນນໍາໃຊ້ຫຼັງຈາກສິ້ນສຸດຂອງ
block.

* ຄໍາຖະແຫຼງການ "ສະຫຼັບ" ມີ operand ຂອງປະເພດ "ຍາວ".

* ການປະກາດຟັງຊັນທີ່ບໍ່ແມ່ນ "static" ປະຕິບັດຕາມ "static" ຫນຶ່ງ. ການກໍ່ສ້າງນີ້ບໍ່ແມ່ນ
ຍອມຮັບໂດຍຜູ້ລວບລວມຂໍ້ມູນ C ແບບດັ້ງເດີມຈໍານວນຫນຶ່ງ.

* ປະເພດ ISO ຂອງຄ່າຄົງທີ່ຈຳນວນເຕັມມີຄວາມກວ້າງ ຫຼື signedness ແຕກຕ່າງຈາກຂອງມັນ
ປະ​ເພດ​ພື້ນ​ເມືອງ​. ການເຕືອນໄພນີ້ແມ່ນອອກພຽງແຕ່ຖ້າພື້ນຖານຂອງຄ່າຄົງທີ່ແມ່ນສິບ.
ເຊັ່ນ: ຄ່າເລກຖານສິບຫົກ ຫຼືຄ່າເລກແປດ, ເຊິ່ງໂດຍທົ່ວໄປແລ້ວສະແດງເຖິງຮູບແບບບິດ, ບໍ່ແມ່ນ
ເຕືອນກ່ຽວກັບ.

* ການ​ນໍາ​ໃຊ້​ຂອງ ISO string concatenation ຖືກ​ກວດ​ພົບ​.

* ການ​ເລີ່ມ​ຕົ້ນ​ຂອງ​ການ​ລວມ​ອັດ​ຕະ​ໂນ​ມັດ​.

* ຕົວລະບຸຂັດກັບປ້າຍກຳກັບ. ແບບດັ້ງເດີມ C ຂາດ namespace ແຍກຕ່າງຫາກສໍາລັບ
ປ້າຍ ກຳ ກັບ.

* ການເລີ່ມຕົ້ນຂອງສະຫະພັນ. ຖ້າຕົວເລີ່ມຕົ້ນແມ່ນສູນ, ການເຕືອນຈະຖືກລະເວັ້ນ.
ນີ້ແມ່ນເຮັດພາຍໃຕ້ການສົມມຸດວ່າສູນເບື້ອງຕົ້ນໃນລະຫັດຜູ້ໃຊ້ປາກົດ
ເງື່ອນໄຂໃນຕົວຢ່າງ "__STDC__" ເພື່ອຫຼີກເວັ້ນການຄໍາເຕືອນເບື້ອງຕົ້ນທີ່ຂາດຫາຍໄປແລະອີງໃສ່
ການເລີ່ມຕົ້ນເລີ່ມຕົ້ນເປັນສູນໃນກໍລະນີ C ແບບດັ້ງເດີມ.

* ການ​ປ່ຽນ​ແປງ​ໂດຍ​ຕົ້ນ​ແບບ​ລະ​ຫວ່າງ​ຄ່າ​ຄົງ​ທີ່ / floating -ຈຸດ​ແລະ​ກົງ​ກັນ​ຂ້າມ​. ໄດ້
ການຂາດຕົວແບບເຫຼົ່ານີ້ເມື່ອລວບລວມກັບ C ແບບດັ້ງເດີມເຮັດໃຫ້ຮ້າຍແຮງ
ບັນຫາ. ນີ້ແມ່ນຊຸດຍ່ອຍຂອງຄໍາເຕືອນການປ່ຽນແປງທີ່ເປັນໄປໄດ້; ສໍາລັບຊຸດເຕັມ
ການນໍາໃຊ້ - ການ​ປ່ຽນ​ແປງ​ແບບ​ດັ້ງ​ເດີມ​.

* ການ​ນໍາ​ໃຊ້​ຄໍາ​ນິ​ຍາມ​ການ​ທໍາ​ງານ​ຮູບ​ແບບ ISO C​. ການເຕືອນໄພນີ້ແມ່ນຕັ້ງໃຈ ບໍ່ ອອກມາ
ສໍາ​ລັບ​ການ​ປະ​ກາດ​ຕົ້ນ​ແບບ​ຫຼື​ຫນ້າ​ທີ່​ແຕກ​ຕ່າງ​ກັນ​ເນື່ອງ​ຈາກ​ວ່າ​ຄຸນ​ສົມ​ບັດ ISO C ເຫຼົ່າ​ນີ້​
ປາກົດຢູ່ໃນລະຫັດຂອງທ່ານເມື່ອໃຊ້ macro ຄວາມເຂົ້າກັນໄດ້ C ແບບດັ້ງເດີມຂອງ libiberty,
"PARAMS" ແລະ "VPARAMS". ການເຕືອນນີ້ຍັງຖືກຂ້າມຜ່ານສໍາລັບຟັງຊັນທີ່ວາງໄວ້
ເພາະວ່າຄຸນສົມບັດນັ້ນເປັນສ່ວນຂະຫຍາຍ GCC ແລ້ວ ແລະດັ່ງນັ້ນຈຶ່ງບໍ່ກ່ຽວຂ້ອງກັບ
ຄວາມເຂົ້າກັນໄດ້ຂອງ C ແບບດັ້ງເດີມ.

- ການ​ປ່ຽນ​ແປງ​ແບບ​ດັ້ງ​ເດີມ​ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຕົ້ນແບບເຮັດໃຫ້ເກີດການແປງປະເພດທີ່ແຕກຕ່າງຈາກສິ່ງທີ່ຈະເກີດຂຶ້ນ
ກັບການໂຕ້ຖຽງດຽວກັນໃນກໍລະນີທີ່ບໍ່ມີຕົວແບບ. ນີ້ປະກອບມີການແປງຂອງ
ຈຸດຄົງທີ່ທີ່ຈະເລື່ອນແລະໃນທາງກັບກັນ, ແລະການແປງການປ່ຽນແປງຄວາມກວ້າງຫຼື
ການລົງນາມຂອງການໂຕ້ແຍ້ງຈຸດຄົງທີ່ຍົກເວັ້ນເວລາທີ່ຄືກັນກັບການສົ່ງເສີມໃນຕອນຕົ້ນ.

-Wdeclaration ຫຼັງ​ຈາກ​ການ​ຖະ​ແຫຼງ​ການ​ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການປະກາດຖືກພົບເຫັນຫຼັງຈາກຄໍາຖະແຫຼງໃນບລັອກ. ການກໍ່ສ້າງນີ້, ເປັນທີ່ຮູ້ຈັກ
ຈາກ C ++, ຖືກນໍາສະເຫນີດ້ວຍ ISO C99 ແລະຖືກອະນຸຍາດໂດຍຄ່າເລີ່ມຕົ້ນໃນ GCC. ມັນ​ບໍ່​ແມ່ນ
ຮອງຮັບ ISO C90.

-Wundef
ເຕືອນຖ້າຕົວລະບຸທີ່ບໍ່ໄດ້ກໍານົດຖືກປະເມີນຢູ່ໃນຄໍາສັ່ງ "#if".

-wno-endif-labels
ຢ່າເຕືອນທຸກຄັ້ງທີ່ "#else" ຫຼື "#endif" ຖືກຕິດຕາມດ້ວຍຂໍ້ຄວາມ.

- ເງົາ
ເຕືອນທຸກຄັ້ງທີ່ຕົວແປທ້ອງຖິ່ນ ຫຼືການປະກາດປະເພດເປັນເງົາຂອງຕົວແປອື່ນ,
ພາລາມິເຕີ, ປະເພດ, ສະມາຊິກຊັ້ນຮຽນ (ໃນ C ++), ຫຼືຕົວແປຕົວຢ່າງ (ໃນ Objective-C) ຫຼື
ທຸກຄັ້ງທີ່ຟັງຊັນໃນຕົວແມ່ນເປັນເງົາ. ໃຫ້ສັງເກດວ່າໃນ C ++, compiler ເຕືອນຖ້າ a
ຕົວແປທ້ອງຖິ່ນເຮັດໃຫ້ເງົາເປັນ typedef ຢ່າງຊັດເຈນ, ແຕ່ບໍ່ແມ່ນຖ້າມັນເຮັດໃຫ້ເງົາ struct/class/enum.

-Wno-shadow-ivar (ຈຸດປະສົງ-C ເທົ່ານັ້ນ)
ຢ່າເຕືອນທຸກຄັ້ງທີ່ຕົວແປທ້ອງຖິ່ນບັງຕົວແປຕົວແປໃນ Objective-C
ວິທີການ.

-Wlarger-than=len
ເຕືອນທຸກຄັ້ງທີ່ວັດຖຸໃຫຍ່ກວ່າ len bytes ຖືກກໍານົດ.

-Wframe-larger-than=len
ເຕືອນຖ້າຂະຫນາດຂອງກອບຟັງຊັນໃຫຍ່ກວ່າ len ໄບຕ໌. ການ​ຄິດ​ໄລ່​ສໍາ​ເລັດ​
ເພື່ອກໍານົດຂະຫນາດກອບ stack ແມ່ນໂດຍປະມານແລະບໍ່ອະນຸລັກ. ຕົວຈິງ
ຄວາມຕ້ອງການອາດຈະຫຼາຍກວ່າບາງຢ່າງ len ເຖິງແມ່ນວ່າທ່ານຈະບໍ່ໄດ້ຮັບການເຕືອນ. ໃນ
ນອກຈາກນັ້ນ, ພື້ນທີ່ໃດກໍໄດ້ຈັດສັນຜ່ານ "alloca", arrays ຄວາມຍາວຕົວແປ, ຫຼືທີ່ກ່ຽວຂ້ອງ
constructs ບໍ່ໄດ້ຖືກລວມເຂົ້າໂດຍ compiler ໃນເວລາທີ່ກໍານົດວ່າຈະອອກຫຼືບໍ່
ຄຳ ເຕືອນ.

-Wno-free-nonheap-object
ຢ່າເຕືອນໃນເວລາທີ່ພະຍາຍາມປົດປ່ອຍວັດຖຸທີ່ບໍ່ໄດ້ຈັດສັນຢູ່ໃນ heap.

-Wstack-usage=len
ເຕືອນຖ້າຫາກວ່າການໃຊ້ stack ຂອງຟັງຊັນອາດຈະໃຫຍ່ກວ່າ len ໄບຕ໌. ການ​ຄິດ​ໄລ່​
ເຮັດເພື່ອກໍານົດການນໍາໃຊ້ stack ແມ່ນອະນຸລັກ. ພື້ນທີ່ໃດກໍໄດ້ຈັດສັນຜ່ານ "alloca",
variable-length arrays, ຫຼື constructs ທີ່ກ່ຽວຂ້ອງແມ່ນລວມເຂົ້າໂດຍ compiler ເມື່ອ
ກໍານົດວ່າຈະອອກຄໍາເຕືອນຫຼືບໍ່.

ຂໍ້ຄວາມແມ່ນຢູ່ໃນການຮັກສາກັບຜົນຜະລິດຂອງ -fstack ການ​ນໍາ​ໃຊ້​.

* ຖ້າ​ຫາກ​ວ່າ​ການ​ນໍາ​ໃຊ້ stack ແມ່ນ​ຄົງ​ທີ່​ຢ່າງ​ເຕັມ​ທີ່​ແຕ່​ເກີນ​ຈໍາ​ນວນ​ທີ່​ກໍາ​ນົດ​ໄວ້​, ມັນ​ເປັນ​:

ຄໍາເຕືອນ: ການໃຊ້ stack ແມ່ນ 1120 bytes

* ຖ້າ​ຫາກ​ວ່າ​ການ​ນໍາ​ໃຊ້ stack ແມ່ນ (ບາງ​ສ່ວນ​) dynamic ແຕ່​ມີ​ຂອບ​ເຂດ​, ມັນ​ເປັນ​:

ຄໍາເຕືອນ: ການໃຊ້ stack ອາດຈະເປັນ 1648 bytes

* ຖ້າ​ຫາກ​ວ່າ​ການ​ນໍາ​ໃຊ້ stack ແມ່ນ (ບາງ​ສ່ວນ​) dynamic ແລະ​ບໍ່​ມີ​ຂອບ​ເຂດ​, ມັນ​ເປັນ​:

ຄໍາເຕືອນ: ການໃຊ້ stack ອາດຈະບໍ່ມີຂອບເຂດ

-Wunsafe-loop-optimizations
ເຕືອນຖ້າຫາກວ່າ loop ບໍ່ສາມາດປັບໄດ້ເນື່ອງຈາກວ່າ compiler ບໍ່ສາມາດສົມມຸດວ່າມີຫຍັງຢູ່ໃນ
ຂອບເຂດຂອງຕົວຊີ້ວັດ loop. ກັບ -funsafe-loop-optimizations ເຕືອນຖ້າ compiler
ເຮັດໃຫ້ສົມມຸດຕິຖານດັ່ງກ່າວ.

-Wno-pedantic-ms-format (ເປົ້າໝາຍ MinGW ເທົ່ານັ້ນ)
ເມື່ອໃຊ້ປະສົມປະສານກັບ -Wformat ແລະ - pedantic ໂດຍບໍ່ມີການຂະຫຍາຍ GNU, ນີ້
ທາງເລືອກປິດການເຕືອນກ່ຽວກັບການທີ່ບໍ່ແມ່ນ ISO "printf" / "scanf" ຕົວລະບຸຄວາມກວ້າງຂອງຮູບແບບ
"I32", "I64", ແລະ "I" ທີ່ໃຊ້ໃນເປົ້າຫມາຍ Windows, ເຊິ່ງຂຶ້ນກັບເວລາແລ່ນ MS.

-Wpointer-arith
ເຕືອນກ່ຽວກັບສິ່ງໃດແດ່ທີ່ຂຶ້ນກັບ "ຂະຫນາດ" ປະເພດຟັງຊັນ ຫຼື "ຫວ່າງເປົ່າ". GNU C
ກໍານົດປະເພດເຫຼົ່ານີ້ຂະຫນາດຂອງ 1, ເພື່ອຄວາມສະດວກໃນການຄິດໄລ່ດ້ວຍ "void *"
ຕົວຊີ້ແລະຕົວຊີ້ໄປຫາຫນ້າທີ່. ໃນ C ++, ເຕືອນເມື່ອການດຳເນີນການເລກເລກ
ກ່ຽວຂ້ອງກັບ "NULL". ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ -Wpedantic.

-Wtype- limits
ເຕືອນຖ້າການປຽບທຽບແມ່ນຖືກຕ້ອງສະເໝີ ຫຼືຜິດສະເໝີເນື່ອງຈາກຂອບເຂດຈຳກັດຂອງ
ປະເພດຂໍ້ມູນ, ແຕ່ບໍ່ເຕືອນສໍາລັບການສະແດງອອກຄົງທີ່. ຕົວຢ່າງ, ເຕືອນຖ້າບໍ່ມີລາຍເຊັນ
ຕົວແປແມ່ນປຽບທຽບກັບສູນດ້ວຍ "<" ຫຼື ">=". ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ
-Wextra.

-Wbad-function-cast (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນເມື່ອການໂທຟັງຊັນຖືກສົ່ງສັນຍານໄປຫາປະເພດທີ່ບໍ່ກົງກັນ. ຕົວຢ່າງ, ເຕືອນຖ້າມີການໂທ
ໄປຫາຟັງຊັນທີ່ສົ່ງຄືນປະເພດຈຳນວນເຕັມແມ່ນຖືກສົ່ງກັບປະເພດຕົວຊີ້.

-Wc90-c99-compat (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບຄຸນສົມບັດທີ່ບໍ່ມີຢູ່ໃນ ISO C90, ແຕ່ມີຢູ່ໃນ ISO C99. ຕົວ​ຢ່າງ,
ເຕືອນກ່ຽວກັບການນໍາໃຊ້ array ຄວາມຍາວຕົວແປ, ປະເພດ "ຍາວຍາວ", ປະເພດ "bool", ປະສົມ
ຕົວອັກສອນ, ຕົວກໍານົດການເລີ່ມຕົ້ນ, ແລະອື່ນໆ. ທາງເລືອກນີ້ແມ່ນເປັນເອກະລາດຂອງ
ຮູບ​ແບບ​ມາດ​ຕະ​ຖານ​. ຄຳເຕືອນຖືກປິດການນຳໃຊ້ໃນການສະແດງຜົນທີ່ຕໍ່ໄປນີ້ "__extension__".

-Wc99-c11-compat (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບຄຸນສົມບັດທີ່ບໍ່ມີຢູ່ໃນ ISO C99, ແຕ່ມີຢູ່ໃນ ISO C11. ຕົວ​ຢ່າງ,
ເຕືອນກ່ຽວກັບການນໍາໃຊ້ໂຄງສ້າງທີ່ບໍ່ເປີດເຜີຍຊື່ແລະສະຫະພັນ, "_Atomic" qualifier,
"_Thread_local" ຕົວລະບຸລະດັບການເກັບຮັກສາ, "_Alignas", ຕົວປະຕິບັດການ "Alignof",
ຄໍາສໍາຄັນ "_generic", ແລະອື່ນໆ. ຕົວເລືອກນີ້ແມ່ນບໍ່ຂຶ້ນກັບຮູບແບບມາດຕະຖານ.
ຄຳເຕືອນຖືກປິດການນຳໃຊ້ໃນການສະແດງຜົນທີ່ຕໍ່ໄປນີ້ "__extension__".

-Wc++-compat (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບໂຄງສ້າງ ISO C ທີ່ຢູ່ນອກຊຸດຍ່ອຍທົ່ວໄປຂອງ ISO C ແລະ ISO
C++, ເຊັ່ນ: ການຮ້ອງຂໍການປ່ຽນ implicit ຈາກ "void *" ໄປຫາ pointer ເປັນ non- "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.
ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wcast-qual
ເຕືອນທຸກຄັ້ງທີ່ຕົວຊີ້ຖືກສົ່ງສັນຍານເພື່ອເອົາຕົວຊີ້ບອກປະເພດໃດໜຶ່ງອອກຈາກປະເພດເປົ້າໝາຍ.
ຕົວຢ່າງ, ເຕືອນຖ້າ "const char *" ຖືກໂຍນໄປຫາ "char *".

ນອກຈາກນັ້ນ, ເຕືອນໃນເວລາສ້າງການສົ່ງສັນຍານທີ່ແນະນໍາປະເພດຄຸນສົມບັດໃນທາງທີ່ບໍ່ປອດໄພ. ສໍາລັບ
ຕົວຢ່າງ, ການໂຍນ "char **" ເປັນ "const char **" ແມ່ນບໍ່ປອດໄພ, ເຊັ່ນດຽວກັບຕົວຢ່າງນີ້:

/* p ແມ່ນ char ** ຄ່າ. */
const char **q = (const char **) p;
/* ການມອບໝາຍຂອງ readonly string ໃຫ້ກັບ const char * ແມ່ນ OK. */
*q = "string";
/* Now char** pointer pointer to read-only memory. */
**p = 'ຂ';

-Wcast-align
ເຕືອນທຸກຄັ້ງທີ່ຕົວຊີ້ຖືກໂຍນລົງໄປເຊັ່ນວ່າການຈັດລຽງຕາມເປົ້າໝາຍທີ່ຕ້ອງການ
ເພີ່ມຂຶ້ນ. ຕົວຢ່າງ, ເຕືອນຖ້າ "char *" ຖືກໂຍນເປັນ "int *" ໃນເຄື່ອງທີ່
ຈໍານວນເຕັມສາມາດເຂົ້າເຖິງໄດ້ພຽງແຕ່ຢູ່ໃນຂອບເຂດຊາຍແດນສອງຫຼືສີ່ໄບ.

-Write-strings
ເມື່ອລວບລວມ C, ໃຫ້ string constants ປະເພດ "const char[ຄວາມຍາວ]" ດັ່ງນັ້ນການສໍາເນົາ
ທີ່ຢູ່ຂອງຫນຶ່ງເຂົ້າໄປໃນຕົວຊີ້ທີ່ບໍ່ແມ່ນ "const" "char *" ຜະລິດຄໍາເຕືອນ. ເຫຼົ່ານີ້
ການເຕືອນໄພຊ່ວຍໃຫ້ທ່ານຊອກຫາຢູ່ໃນການລວບລວມລະຫັດເວລາທີ່ສາມາດພະຍາຍາມຂຽນເຂົ້າໄປໃນສະຕຣິງ
ຄົງທີ່, ແຕ່ວ່າພຽງແຕ່ຖ້າທ່ານໄດ້ລະມັດລະວັງຫຼາຍກ່ຽວກັບການນໍາໃຊ້ "const" ໃນການປະກາດ
ແລະຕົ້ນແບບ. ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນເປັນພຽງແຕ່ຄວາມລົບກວນ. ນີ້ແມ່ນເຫດຜົນທີ່ພວກເຮົາບໍ່ໄດ້ເຮັດ - ຝາ
ຮ້ອງຂໍການເຕືອນເຫຼົ່ານີ້.

ໃນ​ເວ​ລາ​ທີ່​ການ​ສັງ​ລວມ C ++, ເຕືອນ​ກ່ຽວ​ກັບ​ການ​ປ່ຽນ​ແປງ​ທີ່​ຖືກ​ສະ​ແດງ​ໃຫ້​ເຫັນ​ຈາກ​ຕົວ​ຫນັງ​ສື​ສະ​ຕ​ຣິງ​ເປັນ "char
*". ການເຕືອນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບໂຄງການ C++.

- Wclobbered
ເຕືອນສໍາລັບຕົວແປທີ່ອາດຈະມີການປ່ຽນແປງໂດຍ "longjmp" ຫຼື "vfork". ການເຕືອນໄພນີ້ແມ່ນ
ຍັງເປີດໃຊ້ງານໂດຍ -Wextra.

- ສະ​ຫນັບ​ສະ​ຫນູນ​ຕາມ​ເງື່ອນ​ໄຂ​ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນສໍາລັບໂຄງສ້າງທີ່ຮອງຮັບ (C++11 [intro.defs]).

- ການ​ປ່ຽນ​ແປງ​
ເຕືອນສໍາລັບການແປງ implicit ທີ່ອາດຈະມີການປ່ຽນແປງມູນຄ່າ. ນີ້ລວມມີການແປງ
ລະຫວ່າງຈິງ ແລະຈຳນວນເຕັມ, ເຊັ່ນ "abs (x)" ເມື່ອ "x" ແມ່ນ "ຄູນ"; ການປ່ຽນແປງລະຫວ່າງ
ເຊັນແລະບໍ່ໄດ້ເຊັນ, ເຊັ່ນ "unsigned ui = -1"; ແລະການແປງເປັນປະເພດຂະຫນາດນ້ອຍ, ເຊັ່ນ:
"sqrtf (M_PI)". ຢ່າເຕືອນສໍາລັບສຽງໂຫວດທັງຫມົດຢ່າງຊັດເຈນເຊັ່ນ "abs ((int) x)" ແລະ "ui =
(unsigned) -1", ຫຼືຖ້າຄ່າບໍ່ມີການປ່ຽນແປງໂດຍການແປງເຊັ່ນໃນ "abs (2.0)".
ຄຳເຕືອນກ່ຽວກັບການແປງລະຫວ່າງຈຳນວນທີ່ລົງລາຍເຊັນ ແລະບໍ່ໄດ້ເຊັນສາມາດຖືກປິດການນຳໃຊ້ໄດ້ໂດຍ
ການນໍາໃຊ້ -Wno-sign-ແປງ.

ສໍາລັບ C++, ຍັງເຕືອນສໍາລັບການແກ້ໄຂ overload ສັບສົນສໍາລັບການປ່ຽນແປງທີ່ກໍານົດໂດຍຜູ້ໃຊ້; ແລະ
ການປ່ຽນແປງທີ່ບໍ່ເຄີຍໃຊ້ຕົວປະຕິບັດການແປງປະເພດ: ການແປງເປັນ "void", ດຽວກັນ
ປະເພດ, ຫ້ອງຮຽນພື້ນຖານຫຼືການອ້າງອີງເຖິງພວກມັນ. ຄໍາເຕືອນກ່ຽວກັບການແປງລະຫວ່າງເຊັນ
ແລະຈຳນວນທີ່ບໍ່ໄດ້ເຊັນແມ່ນຖືກປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນ C++ ເວັ້ນເສຍແຕ່ -Wsign ການ​ປ່ຽນ​ແປງ​ is
ເປີດໃຊ້ຢ່າງຈະແຈ້ງ.

-Wno-conversion-null (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ຢ່າເຕືອນສໍາລັບການແປງລະຫວ່າງ "NULL" ແລະປະເພດທີ່ບໍ່ແມ່ນຕົວຊີ້. -Wconversion-null is
ເປີດໃຊ້ຕາມຄ່າເລີ່ມຕົ້ນ.

-Wzero-as-null-pointer-constant (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຕົວໜັງສື '0' ຖືກໃຊ້ເປັນຄ່າຄົງທີ່ຕົວຊີ້ null. ນີ້ສາມາດເປັນປະໂຫຍດກັບ
ອຳນວຍຄວາມສະດວກໃນການປ່ຽນເປັນ "nullptr" ໃນ C++11.

-Wdate-time
ເຕືອນເມື່ອພົບມາໂຄຣ "__TIME__", "__DATE__" ຫຼື "__TIMESTAMP__" ຍ້ອນພວກມັນ
ອາດຈະປ້ອງກັນການລວບລວມການແຜ່ພັນທີ່ມີລັກສະນະຄ້າຍຄືກັນເລັກນ້ອຍ.

-Wdelete-ບໍ່ສົມບູນ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອລຶບຕົວຊີ້ໄປຫາປະເພດທີ່ບໍ່ຄົບຖ້ວນ, ເຊິ່ງອາດຈະເຮັດໃຫ້ເກີດພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດຢູ່
ເວລາແລ່ນ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-Wuseless-cast (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອສະແດງອອກເປັນປະເພດຂອງຕົນເອງ.

- ຮ່າງກາຍອ່ອນເພຍ
ເຕືອນຖ້າຫາກວ່າຮ່າງກາຍຫວ່າງເປົ່າເກີດຂຶ້ນໃນ "ຖ້າ", "ອື່ນ" ຫຼື "ເຮັດໃນຂະນະທີ່". ຄຳເຕືອນນີ້
ຍັງຖືກເປີດໃຊ້ໂດຍ -Wextra.

-Wenum ປຽບທຽບ
ເຕືອນກ່ຽວກັບການປຽບທຽບລະຫວ່າງຄ່າຂອງປະເພດການນັບຈໍານວນທີ່ແຕກຕ່າງກັນ. ໃນ C++ enumeral
ບໍ່ກົງກັນໃນການສະແດງອອກຕາມເງື່ອນໄຂຍັງຖືກວິນິດໄສແລະການເຕືອນໄພຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນ. ໃນ C ຄໍາເຕືອນນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wjump-misses-init (C, Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຄຳຖະແຫຼງ “goto” ຫຼື ຄຳຖະແຫຼງ “ສະຫຼັບ” ໂດດໄປຂ້າງໜ້າ
ການເລີ່ມຕົ້ນຂອງຕົວແປ, ຫຼືໂດດກັບຄືນໄປຫາປ້າຍຊື່ຫຼັງຈາກຕົວແປໄດ້
ເລີ່ມຕົ້ນ. ນີ້ພຽງແຕ່ເຕືອນກ່ຽວກັບຕົວແປທີ່ເລີ່ມຕົ້ນເມື່ອພວກເຂົາຢູ່
ປະກາດ. ການເຕືອນນີ້ແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ C ແລະ Objective-C; ໃນ C++ ປະເພດນີ້
ສາຂາແມ່ນຄວາມຜິດພາດໃນກໍລະນີໃດກໍ່ຕາມ.

-Wjump-misses-init ແມ່ນລວມຢູ່ໃນ -Wc++-compat. ມັນສາມາດໄດ້ຮັບການພິການດ້ວຍ
-Wno-jump-misses-init ທາງເລືອກ.

-Wsign-ປຽບທຽບ
ເຕືອນເມື່ອການປຽບທຽບລະຫວ່າງຄ່າທີ່ລົງລາຍເຊັນ ແລະ ບໍ່ໄດ້ລົງລາຍເຊັນສາມາດເຮັດໃຫ້ເກີດຄວາມຜິດພາດໄດ້
ຜົນໄດ້ຮັບເມື່ອຄ່າທີ່ໄດ້ເຊັນຖືກປ່ຽນເປັນ unsigned. ການເຕືອນນີ້ຍັງຖືກເປີດໃຊ້ງານ
by -Wextra; ເພື່ອ​ໃຫ້​ໄດ້​ຮັບ​ຄໍາ​ເຕືອນ​ອື່ນໆ​ຂອງ​ -Wextra ໂດຍບໍ່ມີການເຕືອນນີ້, ໃຊ້ -Wextra
-Wno-sign-ປຽບທຽບ.

-Wsign ການ​ປ່ຽນ​ແປງ​
ເຕືອນສໍາລັບການແປງ implicit ທີ່ອາດຈະມີການປ່ຽນແປງເຄື່ອງຫມາຍຂອງຄ່າ integer, ເຊັ່ນ:
ການມອບໝາຍຈຳນວນເຕັມທີ່ສະແດງອອກໃຫ້ກັບຕົວແປຈຳນວນເຕັມທີ່ບໍ່ໄດ້ເຊັນ. ຈະແຈ້ງ
ໂຍນສຽງເຕືອນໃຫ້ມິດງຽບ. ໃນ C, ທາງເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍ - ການ​ປ່ຽນ​ແປງ​.

- ການ​ປ່ຽນ​ແປງ Wfloat​
ເຕືອນສໍາລັບການແປງ implicit ທີ່ຫຼຸດຜ່ອນຄວາມແມ່ນຍໍາຂອງມູນຄ່າທີ່ແທ້ຈິງ. ນີ້
ຮວມເຖິງການແປງຈາກຈິງເປັນຈຳນວນເຕັມ, ແລະຈາກຄວາມແມ່ນຍໍາສູງກວ່າຈິງຫາຕໍ່າກວ່າ
ຄວາມຖືກຕ້ອງຂອງມູນຄ່າທີ່ແທ້ຈິງ. ທາງເລືອກນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ - ການ​ປ່ຽນ​ແປງ​.

- ການ​ຈັດ​ແບ່ງ​ຂະ​ຫນາດ​ໃຫຍ່​ (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນກ່ຽວກັບຄຳນິຍາມຂອງຟັງຊັນການຈັດສັນທີ່ບໍ່ຂະໜາດ

void operator ລົບ (void *) noexcept;
void operator delete[] (void *) noexcept;

ໂດຍບໍ່ມີຄໍານິຍາມຂອງຫນ້າທີ່ການຈັດສັນຂະຫນາດທີ່ສອດຄ້ອງກັນ

void operator ລົບ (void *, std::size_t) noexcept;
void operator delete[] (void *, std::size_t) noexcept;

ຫຼືໃນທາງກັບກັນ. ເປີດໃຊ້ໂດຍ -Wextra ຄຽງຄູ່ກັບການ -fsized-deallocation.

-Wsizeof-pointer-memaccess
ເຕືອນສໍາລັບພາລາມິເຕີຄວາມຍາວທີ່ຫນ້າສົງໄສຕໍ່ກັບຟັງຊັນສະຕຣິງແລະຫນ່ວຍຄວາມຈໍາທີ່ແນ່ນອນ
ຖ້າການໂຕ້ຖຽງໃຊ້ "sizeof". ຄໍາເຕືອນນີ້ເຕືອນ eg ກ່ຽວກັບ "memset (ptr, 0, sizeof
(ptr));" ຖ້າ "ptr" ບໍ່ແມ່ນ array, ແຕ່ເປັນຕົວຊີ້, ແລະແນະນໍາການແກ້ໄຂທີ່ເປັນໄປໄດ້, ຫຼື.
ກ່ຽວກັບ "memcpy (&foo, ptr, sizeof (&foo));". ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wsizeof-array-argument
ເຕືອນເມື່ອຕົວປະຕິບັດການ "sizeof" ຖືກນໍາໃຊ້ກັບພາລາມິເຕີທີ່ຖືກປະກາດວ່າເປັນອາເຣ
ໃນ​ຄໍາ​ນິ​ຍາມ​ຫນ້າ​ທີ່​. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສຳລັບໂປຣແກຣມ C ແລະ C++.

-Wmemset-transposed-args
ເຕືອນສໍາລັບການໂທທີ່ຫນ້າສົງໄສກັບ "memset" ຟັງຊັນໃນຕົວ, ຖ້າການໂຕ້ຖຽງທີສອງແມ່ນ.
ບໍ່ແມ່ນສູນ ແລະການໂຕ້ຖຽງທີສາມແມ່ນສູນ. ນີ້ເຕືອນ eg@ ກ່ຽວກັບ "memset (buf, sizeof
buf, 0)" ເຊິ່ງສ່ວນຫຼາຍອາດຈະເປັນ "memset (buf, 0, sizeof buf)" ແທນ.
ການວິນິດໄສຈະຖືກປ່ອຍອອກມາພຽງແຕ່ຖ້າການໂຕ້ຖຽງທີສາມແມ່ນສູນຕົວໜັງສື. ຖ້າຫາກວ່າມັນເປັນບາງ
ການສະແດງຜົນທີ່ຖືກພັບເປັນສູນ, ສຽງໂຫວດທັງຫມົດສູນໄປຫາບາງປະເພດ, ແລະອື່ນໆ, ມັນແມ່ນຫນ້ອຍ
ອາດຈະເປັນທີ່ຜູ້ໃຊ້ໄດ້ແລກປ່ຽນການໂຕ້ຖຽງຜິດພາດແລະບໍ່ມີການເຕືອນໄພຖືກປ່ອຍອອກມາ.
ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Waddress
ເຕືອນກ່ຽວກັບການນຳໃຊ້ທີ່ຢູ່ຄວາມຈຳທີ່ໜ້າສົງໄສ. ເຫຼົ່ານີ້ລວມມີການນໍາໃຊ້ທີ່ຢູ່ຂອງ a
ຟັງຊັນໃນການສະແດງເງື່ອນໄຂ, ເຊັ່ນ "void func(void); if (func)", ແລະ
ການປຽບທຽບກັບທີ່ຢູ່ໜ່ວຍຄວາມຈຳຂອງຕົວໜັງສືສະຕຣິງ ເຊັ່ນ "ຖ້າ (x == "abc")".
ການ​ນໍາ​ໃຊ້​ດັ່ງ​ກ່າວ​ໂດຍ​ປົກ​ກະ​ຕິ​ຊີ້​ບອກ​ເຖິງ​ຄວາມ​ຜິດ​ພາດ​ຂອງ​ໂຄງ​ການ​: ທີ່​ຢູ່​ຂອງ​ຫນ້າ​ທີ່​ສະ​ເຫມີ​ໄປ​
ປະເມີນເປັນຄວາມຈິງ, ດັ່ງນັ້ນການນໍາໃຊ້ຂອງພວກເຂົາໃນເງື່ອນໄຂມັກຈະຊີ້ໃຫ້ເຫັນວ່ານັກຂຽນໂປລແກລມ
ລືມວົງເລັບໃນການໂທຟັງຊັນ; ແລະການປຽບທຽບກັບຕົວໜັງສືສະຕຣິງ
ສົ່ງຜົນໃຫ້ເກີດພຶດຕິກຳທີ່ບໍ່ລະບຸ ແລະບໍ່ສາມາດເຄື່ອນທີ່ໃນ C, ດັ່ງນັ້ນພວກມັນມັກຈະຊີ້ບອກ
ທີ່ນັກຂຽນໂປລແກລມຕັ້ງໃຈໃຊ້ "strcmp". ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wlogical-op
ເຕືອນກ່ຽວກັບການນຳໃຊ້ຕົວປະຕິບັດການຢ່າງມີເຫດຜົນໃນການສະແດງອອກ. ນີ້ປະກອບມີການນໍາໃຊ້
ຕົວປະຕິບັດການຢ່າງມີເຫດຜົນໃນສະພາບການທີ່ຕົວປະຕິບັດການທີ່ສະຫລາດເລັກນ້ອຍແມ່ນຄາດວ່າຈະຖືກຄາດຫວັງ.

-Wlogical-not-partheses
ເຕືອນກ່ຽວກັບເຫດຜົນບໍ່ໄດ້ໃຊ້ໃນຕົວປະຕິບັດການດ້ານຊ້າຍມືຂອງການປຽບທຽບ. ນີ້
ທາງເລືອກບໍ່ໄດ້ເຕືອນຖ້າ RHS operand ເປັນປະເພດ boolean. ຈຸດປະສົງຂອງມັນແມ່ນເພື່ອ
ກວດຫາລະຫັດທີ່ໜ້າສົງໄສເຊັ່ນ:

int a;
...
ຖ້າ (!a > 1) { ... }

ມັນເປັນໄປໄດ້ທີ່ຈະສະກັດກັ້ນການເຕືອນໄພໂດຍການຫໍ່ LHS ເຂົ້າໄປໃນວົງເລັບ:

ຖ້າ ((!a) > 1) { ... }

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Waggregate-ກັບຄືນ
ເຕືອນຖ້າຫາກວ່າຫນ້າທີ່ໃດທີ່ສົ່ງຄືນໂຄງສ້າງຫຼືສະຫະພັນໄດ້ຖືກກໍານົດຫຼືເອີ້ນວ່າ. (ໃນ
ພາ​ສາ​ທີ່​ທ່ານ​ສາ​ມາດ​ກັບ​ຄືນ array ໄດ້​, ນີ້​ຍັງ elicits ຄໍາ​ເຕືອນ​.

-Wno-aggressive-loop-optimizations
ເຕືອນຖ້າຫາກວ່າຢູ່ໃນ loop ທີ່ມີຈໍານວນຄົງທີ່ຂອງ reterations, compiler ກວດພົບບໍ່ໄດ້ກໍານົດ
ພຶດຕິກຳໃນບາງຄຳຖະແຫຼງໃນລະຫວ່າງການເຮັດຊ້ຳໜຶ່ງ ຫຼືຫຼາຍກວ່ານັ້ນ.

- ຄຸນ​ລັກ​ສະ​ນະ Wno​
ຢ່າເຕືອນຖ້າ "__attribute__" ທີ່ບໍ່ຄາດຄິດຖືກໃຊ້, ເຊັ່ນ: ຄຸນລັກສະນະທີ່ບໍ່ຮູ້ຈັກ,
ຄຸນ​ລັກ​ສະ​ນະ​ການ​ທໍາ​ງານ​ນໍາ​ໃຊ້​ກັບ​ຕົວ​ປ່ຽນ​ແປງ​, ແລະ​ອື່ນໆ​. ນີ້​ບໍ່​ໄດ້​ຢຸດ​ເຊົາ​ການ​ຜິດ​ພາດ​ສໍາ​ລັບ​ການ​
ການນໍາໃຊ້ບໍ່ຖືກຕ້ອງຂອງຄຸນລັກສະນະທີ່ສະຫນັບສະຫນູນ.

-Wno-builtin-macro-redefined
ຢ່າເຕືອນວ່າມາໂຄໃນຕົວທີ່ແນ່ນອນຖືກກຳນົດຄືນໃໝ່. ນີ້ສະກັດກັ້ນການເຕືອນໄພສໍາລັບ
ນິຍາມໃໝ່ຂອງ "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__", ແລະ
"__BASE_FILE__".

-Wstrict-prototypes (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຟັງຊັນໃດໜຶ່ງຖືກປະກາດ ຫຼືກຳນົດໂດຍບໍ່ລະບຸປະເພດອາກິວເມັນ. (ອັນ
ຄໍານິຍາມຟັງຊັນແບບເກົ່າແມ່ນອະນຸຍາດໂດຍບໍ່ມີການເຕືອນຖ້າຫາກວ່ານໍາຫນ້າດ້ວຍ a
ການປະກາດທີ່ລະບຸປະເພດຂອງການໂຕ້ຖຽງ.)

-Wold-style-ປະກາດ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນສໍາລັບການນໍາໃຊ້ທີ່ລ້າສະໄຫມ, ອີງຕາມມາດຕະຖານ C, ໃນການປະກາດ. ສໍາລັບ
ຕົວຢ່າງ, ເຕືອນຖ້າຕົວລະບຸລະດັບການເກັບຮັກສາເຊັ່ນ "static" ບໍ່ແມ່ນສິ່ງທໍາອິດໃນ a
ຖະແຫຼງການ. ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ -Wextra.

-Wold-style-ນິຍາມ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າໃຊ້ນິຍາມຟັງຊັນແບບເກົ່າ. ມີການເຕືອນໄພເຖິງແມ່ນວ່າຈະມີ
ຕົ້ນແບບກ່ອນໜ້ານີ້.

-Wmissing-parameter-type (C ແລະ Objective-C ເທົ່ານັ້ນ)
ພາຣາມິເຕີຟັງຊັນຖືກປະກາດໂດຍບໍ່ມີຕົວລະບຸປະເພດໃນຟັງຊັນແບບ K&R:

void foo(bar) { }

ການເຕືອນໄພນີ້ຍັງຖືກເປີດໃຊ້ໂດຍ -Wextra.

-Wmissing-prototypes (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຟັງຊັນທົ່ວໂລກຖືກກຳນົດໂດຍບໍ່ມີການປະກາດຕົ້ນແບບກ່ອນໜ້າ. ນີ້
ການເຕືອນໄພແມ່ນອອກເຖິງແມ່ນວ່າຄໍານິຍາມຕົວມັນເອງສະຫນອງຕົວແບບ. ໃຊ້ຕົວເລືອກນີ້
ເພື່ອກວດຫາຟັງຊັນທົ່ວໂລກທີ່ບໍ່ມີການປະກາດຕົ້ນແບບທີ່ກົງກັນໃນ a
ໄຟລ໌ຫົວ. ຕົວເລືອກນີ້ບໍ່ຖືກຕ້ອງສໍາລັບ C++ ເພາະວ່າການປະກາດຟັງຊັນທັງໝົດ
ໃຫ້ prototypes ແລະການປະກາດທີ່ບໍ່ກົງກັນປະກາດ overload ແທນທີ່ຈະ
ຂັດກັບການປະກາດກ່ອນໜ້ານີ້. ໃຊ້ -Wmissing ການ​ປະ​ກາດ​ ເພື່ອ​ຊອກ​ຫາ​ທີ່​ຂາດ​ຫາຍ​ໄປ​
ປະກາດໃນ C++.

-Wmissing ການ​ປະ​ກາດ​
ເຕືອນຖ້າຟັງຊັນທົ່ວໂລກຖືກກຳນົດໂດຍບໍ່ມີການປະກາດກ່ອນໜ້າ. ເຮັດແນວນັ້ນເຖິງແມ່ນວ່າ
ຄໍານິຍາມຂອງຕົວມັນເອງສະຫນອງຕົ້ນແບບ. ໃຊ້ຕົວເລືອກນີ້ເພື່ອກວດຫາທົ່ວໂລກ
ຟັງຊັນທີ່ບໍ່ໄດ້ຖືກປະກາດໃນໄຟລ໌ header. ໃນ C, ບໍ່ມີການເຕືອນໄພອອກສໍາລັບ
ປະຕິບັດຫນ້າກັບການປະກາດທີ່ບໍ່ແມ່ນຕົວແບບທີ່ຜ່ານມາ; ໃຊ້ -Wmissing-prototypes ການກວດສອບ
ຕົ້ນແບບທີ່ຂາດຫາຍໄປ. ໃນ C ++, ບໍ່ມີການເຕືອນໄພສໍາລັບແມ່ແບບຟັງຊັນ, ຫຼືສໍາລັບ
ຟັງຊັນ inline, ຫຼືສໍາລັບຫນ້າທີ່ຢູ່ໃນ namespaces ທີ່ບໍ່ເປີດເຜີຍຊື່.

-Wmissing-field-initializers
ເຕືອນຖ້າຕົວເລີ່ມຕົ້ນຂອງໂຄງສ້າງມີບາງຊ່ອງຂໍ້ມູນຫາຍໄປ. ຕົວຢ່າງ, ຕໍ່ໄປນີ້
ລະຫັດເຮັດໃຫ້ເກີດການເຕືອນດັ່ງກ່າວ, ເພາະວ່າ "xh" ແມ່ນສູນ implicitly:

struct s { int f, g, h; } ;
ໂຄງສ້າງ sx = { 3, 4 };

ຕົວເລືອກນີ້ບໍ່ໄດ້ເຕືອນກ່ຽວກັບຕົວກໍານົດເບື້ອງຕົ້ນ, ດັ່ງນັ້ນການດັດແກ້ຕໍ່ໄປນີ້
ບໍ່ກະຕຸ້ນເຕືອນ:

struct s { int f, g, h; } ;
struct sx = { .f = 3 , .g = 4 } ;

ໃນ C++ ຕົວເລືອກນີ້ບໍ່ໄດ້ເຕືອນກ່ຽວກັບຕົວເລີ່ມຕົ້ນ { } ຫວ່າງເປົ່າ, ຕົວຢ່າງ:

struct s { int f, g, h; } ;
sx = { };

ການເຕືອນໄພນີ້ແມ່ນລວມຢູ່ໃນ -Wextra. ເພື່ອໃຫ້ໄດ້ຮັບອື່ນໆ -Wextra ຄໍາ​ເຕືອນ​ໂດຍ​ບໍ່​ມີ​ການ​ນີ້​,
ການນໍາໃຊ້ -Wextra -Wno-missing-field-initializers.

-Wno-multichar
ຢ່າເຕືອນຖ້າ multicharacter ຄົງທີ່ ('FOOF') ຖືກ​ນໍາ​ໃຊ້​. ປົກກະຕິແລ້ວພວກເຂົາຊີ້ບອກ a
typo ໃນລະຫັດຂອງຜູ້ໃຊ້, ຍ້ອນວ່າພວກເຂົາມີມູນຄ່າການຈັດຕັ້ງປະຕິບັດ, ແລະບໍ່ຄວນຈະເປັນ
ໃຊ້ໃນລະຫັດແບບພົກພາ.

- ປົກກະຕິ[=<none|id|nfc|nfkc>]
ໃນ ISO C ແລະ ISO C ++, ສອງຕົວລະບຸຈະແຕກຕ່າງກັນຖ້າພວກເຂົາເປັນລໍາດັບທີ່ແຕກຕ່າງກັນຂອງ
ຕົວລະຄອນ. ຢ່າງໃດກໍຕາມ, ບາງຄັ້ງເມື່ອຕົວລະຄອນຢູ່ນອກຊຸດຕົວອັກສອນ ASCII ພື້ນຖານ
ຖືກນໍາໃຊ້, ທ່ານສາມາດມີສອງລໍາດັບລັກສະນະທີ່ແຕກຕ່າງກັນທີ່ມີລັກສະນະດຽວກັນ. ເພື່ອຫຼີກເວັ້ນການ
ຄວາມສັບສົນ, ມາດຕະຖານ ISO 10646 ກໍານົດບາງອັນ ຄວາມເປັນປົກກະຕິ ກົດລະບຽບ ເຊິ່ງເມື່ອນຳໃຊ້ແລ້ວ
ໃຫ້​ແນ່​ໃຈວ່​າ​ວ່າ​ສອງ​ລໍາ​ດັບ​ທີ່​ຄ້າຍ​ຄື​ກັນ​ໄດ້​ກາຍ​ເປັນ​ລໍາ​ດັບ​ດຽວ​ກັນ​. GCC
ສາມາດເຕືອນທ່ານຖ້າຫາກວ່າທ່ານກໍາລັງໃຊ້ຕົວລະບຸທີ່ຍັງບໍ່ທັນໄດ້ປົກກະຕິ; ທາງເລືອກນີ້
ຄວບຄຸມການເຕືອນໄພນັ້ນ.

ມີສີ່ລະດັບຂອງການເຕືອນໄພສະຫນັບສະຫນູນໂດຍ GCC. ຄ່າເລີ່ມຕົ້ນແມ່ນ -Wnormalized=nfc,
ເຊິ່ງເຕືອນກ່ຽວກັບຕົວລະບຸໃດໆທີ່ບໍ່ໄດ້ຢູ່ໃນຮູບແບບປົກກະຕິ ISO 10646 "C",
NFC. NFC ແມ່ນຮູບແບບທີ່ແນະນໍາສໍາລັບການນໍາໃຊ້ສ່ວນໃຫຍ່. ມັນເທົ່າກັບ - ປົກກະຕິ.

ແຕ່ຫນ້າເສຍດາຍ, ມີບາງຕົວອັກສອນທີ່ອະນຸຍາດໃຫ້ຢູ່ໃນຕົວລະບຸໂດຍ ISO C ແລະ ISO C++
ວ່າ, ເມື່ອປ່ຽນເປັນ NFC, ບໍ່ໄດ້ຖືກອະນຸຍາດໃຫ້ຢູ່ໃນຕົວລະບຸ. ນັ້ນແມ່ນ, ບໍ່ມີທາງ
ເພື່ອໃຊ້ສັນຍາລັກເຫຼົ່ານີ້ຢູ່ໃນ ISO C ຫຼື C++ ແບບພົກພາ ແລະມີຕົວລະບຸທັງໝົດຂອງທ່ານໃນ NFC.
-Wnormalized=id ສະກັດກັ້ນການເຕືອນໄພສໍາລັບລັກສະນະເຫຼົ່ານີ້. ຫວັງວ່າໃນອະນາຄົດ
ສະບັບຂອງມາດຕະຖານທີ່ກ່ຽວຂ້ອງຈະແກ້ໄຂອັນນີ້, ຊຶ່ງເປັນເຫດຜົນທີ່ວ່າທາງເລືອກນີ້ບໍ່ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ.

ທ່ານສາມາດປິດການເຕືອນໄພສໍາລັບຕົວອັກສອນທັງຫມົດໂດຍການຂຽນ -Wnormalized=none or
-Wno-ປົກກະຕິ. ທ່ານຄວນເຮັດສິ່ງນີ້ພຽງແຕ່ຖ້າຫາກວ່າທ່ານກໍາລັງໃຊ້ບາງ normalization ອື່ນໆ
scheme (ເຊັ່ນ "D"), ເພາະວ່າຖ້າບໍ່ດັ່ງນັ້ນທ່ານສາມາດສ້າງແມງໄມ້ທີ່ຮູ້ຫນັງສືໄດ້ຢ່າງງ່າຍດາຍ
ເປັນ​ໄປ​ບໍ່​ໄດ້​ທີ່​ຈະ​ເບິ່ງ​.

ບາງຕົວອັກສອນໃນ ISO 10646 ມີຄວາມໝາຍທີ່ແຕກຕ່າງ ແຕ່ເບິ່ງຄືກັນໃນບາງຕົວອັກສອນ
ຫຼືວິທີການສະແດງ, ໂດຍສະເພາະເມື່ອການຈັດຮູບແບບໄດ້ຖືກນໍາໃຊ້. ຕົວ​ຢ່າງ
"\u207F", "SUPERSCRIPT Latin LETTER N", ສະແດງຄືກັນກັບ "n" ປົກກະຕິທີ່
ໄດ້ຖືກວາງໄວ້ໃນຕົວຫຍໍ້. ISO 10646 ກໍານົດ NFKC ໂຄງ​ການ​ປົກ​ກະ​ຕິ​
ປ່ຽນສິ່ງເຫຼົ່ານີ້ເປັນຮູບແບບມາດຕະຖານເຊັ່ນດຽວກັນ, ແລະ GCC ເຕືອນຖ້າລະຫັດຂອງທ່ານບໍ່ຢູ່ໃນ
NFKC ຖ້າທ່ານໃຊ້ -Wnormalized=nfkc. ການເຕືອນໄພນີ້ແມ່ນປຽບທຽບກັບການເຕືອນກ່ຽວກັບທຸກໆ
ຕົວລະບຸທີ່ມີຕົວອັກສອນ O ເພາະວ່າມັນອາດຈະສັບສົນກັບຕົວເລກ 0,
ແລະດັ່ງນັ້ນບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ, ແຕ່ອາດຈະເປັນປະໂຫຍດເປັນສົນທິສັນຍາລະຫັດທ້ອງຖິ່ນຖ້າຫາກວ່າ
ສະພາບແວດລ້ອມການຂຽນໂປລແກລມບໍ່ສາມາດຖືກແກ້ໄຂເພື່ອສະແດງຕົວລະຄອນເຫຼົ່ານີ້ຢ່າງຊັດເຈນ.

-Wno-deprecated
ຢ່າເຕືອນກ່ຽວກັບການນຳໃຊ້ຄຸນສົມບັດທີ່ບໍ່ໄດ້ນຳໃຊ້.

-Wno-deprecated-ປະກາດ
ຢ່າເຕືອນກ່ຽວກັບການໃຊ້ຟັງຊັນ, ຕົວແປ, ແລະປະເພດທີ່ຖືກໝາຍວ່າຖືກຍົກເລີກໂດຍ
ການນໍາໃຊ້ຄຸນສົມບັດ "ປະຕິເສດ".

-Wno-ລົ້ນ
ຢ່າເຕືອນກ່ຽວກັບການລວບລວມເວລາ overflow ໃນການສະແດງອອກຄົງທີ່.

-Wno-odr
ເຕືອນກ່ຽວກັບການລະເມີດກົດລະບຽບຫນຶ່ງຄໍານິຍາມໃນລະຫວ່າງການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່. ຕ້ອງການ
-flto-odr-type-merging ຈະຖືກເປີດໃຊ້. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-Wopenmp-simd
ເຕືອນຖ້າຕົວແບບລາຄາ vectorizer overrides ຄໍາສັ່ງ OpenMP ຫຼື Cilk Plus simd
ກໍານົດໂດຍຜູ້ໃຊ້. ໄດ້ -fsimd-cost-model=ບໍ່ຈຳກັດ ທາງເລືອກສາມາດນໍາໃຊ້ເພື່ອຜ່ອນຄາຍຄ່າໃຊ້ຈ່າຍ
model

-Woverride-init (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າຊ່ອງຂໍ້ມູນເບື້ອງຕົ້ນທີ່ບໍ່ມີຜົນກະທົບຂ້າງຄຽງຈະຖືກ overridden ໃນເວລາທີ່ການນໍາໃຊ້ທີ່ກໍານົດ
ຕົວເລີ່ມຕົ້ນ.

ການເຕືອນໄພນີ້ແມ່ນລວມຢູ່ໃນ -Wextra. ເພື່ອໃຫ້ໄດ້ຮັບອື່ນໆ -Wextra ຄໍາ​ເຕືອນ​ໂດຍ​ບໍ່​ມີ​ການ​ນີ້​,
ການນໍາໃຊ້ -Wextra -Wno-override-init.

- ຫໍ່
ເຕືອນຖ້າໂຄງສ້າງແມ່ນໃຫ້ຄຸນລັກສະນະບັນຈຸ, ແຕ່ຄຸນລັກສະນະບັນຈຸບໍ່ມີ
ຜົນກະທົບຕໍ່ຮູບແບບຫຼືຂະຫນາດຂອງໂຄງສ້າງ. ໂຄງສ້າງດັ່ງກ່າວອາດຈະຖືກຈັດໃສ່ຜິດ
ຜົນ​ປະ​ໂຫຍດ​ພຽງ​ເລັກ​ນ້ອຍ​. ຕົວຢ່າງ, ໃນລະຫັດນີ້, ຕົວແປ "fx" ໃນ "struct bar" ແມ່ນ
misaligned ເຖິງແມ່ນວ່າ "ແຖບໂຄງສ້າງ" ບໍ່ມີຕົວມັນເອງມີຄຸນລັກສະນະບັນຈຸ:

ໂຄງສ້າງ foo {
int x;
char a,b,c,d;
} __attribute __ ((ບັນຈຸ));
ແຖບໂຄງສ້າງ {
char z ;
ໂຄງສ້າງ foo f;
};

-Wpacked-bitfield-compat
ຊຸດ 4.1, 4.2 ແລະ 4.3 ຂອງ GCC ບໍ່ສົນໃຈຄຸນສົມບັດ "packed" ໃນ bit-fields ຂອງປະເພດ.
"char". ນີ້ໄດ້ຖືກແກ້ໄຂໃນ GCC 4.4 ແຕ່ການປ່ຽນແປງສາມາດນໍາໄປສູ່ຄວາມແຕກຕ່າງໃນ
ຮູບ​ແບບ​ໂຄງ​ສ້າງ​. GCC ແຈ້ງໃຫ້ທ່ານຮູ້ເມື່ອການຊົດເຊີຍຂອງຊ່ອງຂໍ້ມູນດັ່ງກ່າວມີການປ່ຽນແປງໃນ GCC
4.4. ສໍາລັບຕົວຢ່າງ, ບໍ່ມີຊ່ອງຫວ່າງ 4-bit ລະຫວ່າງພາກສະຫນາມ "a" ແລະ "b" ໃນນີ້
ໂຄງສ້າງ:

ໂຄງສ້າງ foo
{
char a:4;
char b:8;
} __attribute__ ((ບັນຈຸ));

ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. ໃຊ້ -Wno-packed-bitfield-compat ເພື່ອປິດການທໍາງານນີ້
ຄຳ ເຕືອນ.

- ແຜ່ນແພ
ເຕືອນຖ້າຫາກວ່າ padding ແມ່ນລວມຢູ່ໃນໂຄງສ້າງ, ບໍ່ວ່າຈະເປັນການຈັດອົງປະກອບຂອງ
ໂຄງສ້າງຫຼືການຈັດໂຄງສ້າງທັງຫມົດ. ບາງຄັ້ງເມື່ອສິ່ງນີ້ເກີດຂື້ນມັນກໍ່ເປັນໄປໄດ້
ເພື່ອ rearrange ທົ່ງນາຂອງໂຄງສ້າງເພື່ອຫຼຸດຜ່ອນ padding ແລະດັ່ງນັ້ນຈິ່ງເຮັດໃຫ້
ໂຄງສ້າງຂະຫນາດນ້ອຍກວ່າ.

-Wredundant-decls
ເຕືອນວ່າມີອັນໃດຖືກປະກາດຫຼາຍກວ່າຫນຶ່ງຄັ້ງໃນຂອບເຂດດຽວກັນ, ເຖິງແມ່ນວ່າໃນກໍລະນີ
ການປະກາດຫຼາຍອັນຖືກຕ້ອງ ແລະບໍ່ມີຫຍັງປ່ຽນແປງ.

-Wnested-externs (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນຖ້າມີການປະກາດ "extern" ຢູ່ໃນຟັງຊັນ.

-Wno-inherited-variadic-ctor
ສະກັດກັ້ນການເຕືອນກ່ຽວກັບການໃຊ້ C++11 ສືບທອດຕົວສ້າງເມື່ອຫ້ອງຮຽນພື້ນຖານ
ສືບທອດມາຈາກມີຕົວສ້າງ C variadic; ການເຕືອນໄພແມ່ນເປີດໂດຍຄ່າເລີ່ມຕົ້ນເພາະວ່າ
ellipsis ບໍ່ໄດ້ຖືກສືບທອດ.

- Winline
ເຕືອນຖ້າຟັງຊັນທີ່ຖືກປະກາດວ່າເປັນ inline ບໍ່ສາມາດໃສ່ໃນແຖວໄດ້. ເຖິງແມ່ນວ່າມີນີ້
ທາງເລືອກ, compiler ບໍ່ໄດ້ເຕືອນກ່ຽວກັບຄວາມລົ້ມເຫຼວຂອງຫນ້າທີ່ inline ປະກາດໃນ
ສ່ວນຫົວຂອງລະບົບ.

compiler ໃຊ້ຄວາມຫລາກຫລາຍຂອງ heuristics ເພື່ອກໍານົດວ່າຈະ inline a ຫຼືບໍ່
ຫນ້າທີ່. ຕົວຢ່າງ, compiler ພິຈາລະນາຂະຫນາດຂອງຫນ້າທີ່ເປັນ
inlined ແລະຈໍານວນຂອງ inlining ທີ່ໄດ້ເຮັດແລ້ວໃນຫນ້າທີ່ປະຈຸບັນ.
ດັ່ງນັ້ນ, ເບິ່ງຄືວ່າການປ່ຽນແປງທີ່ບໍ່ສໍາຄັນໃນໂຄງການແຫຼ່ງສາມາດເຮັດໃຫ້ເກີດ
ຄໍາ​ເຕືອນ​ທີ່​ຜະ​ລິດ​ໂດຍ​ - Winline ປາກົດ ຫຼືຫາຍໄປ.

-Wno-invalid-offsetof (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ສະກັດກັ້ນການເຕືອນຈາກການນໍາໃຊ້ "offsetof" macro ກັບປະເພດທີ່ບໍ່ແມ່ນ POD. ອີງ​ຕາມ
ມາດຕະຖານ ISO C ++ ປີ 2014, ການນຳໃຊ້ "offsetof" ກັບປະເພດໂຄງຮ່າງທີ່ບໍ່ໄດ້ມາດຕະຖານແມ່ນ
ບໍ່ໄດ້ກໍານົດ. ໃນການປະຕິບັດ C ++ ທີ່ມີຢູ່ແລ້ວ, ແນວໃດກໍ່ຕາມ, "offsetof" ມັກຈະໃຫ້
ຜົນໄດ້ຮັບທີ່ມີຄວາມຫມາຍ. ທຸງນີ້ແມ່ນສໍາລັບຜູ້ໃຊ້ທີ່ຮູ້ວ່າພວກເຂົາກໍາລັງຂຽນ
ລະຫັດ nonportable ແລະຜູ້ທີ່ໄດ້ເລືອກໂດຍເຈດຕະນາທີ່ຈະບໍ່ສົນໃຈຄໍາເຕືອນກ່ຽວກັບມັນ.

ຂໍ້ຈໍາກັດກ່ຽວກັບ "offsetof" ອາດຈະໄດ້ຮັບການຜ່ອນຄາຍໃນມາດຕະຖານ C ++ ຮຸ່ນໃນອະນາຄົດ.

-Wno-int-to-pointer-cast
ສະກັດກັ້ນການເຕືອນຈາກຄາສທໄປຫາປະເພດຕົວຊີ້ຂອງຈຳນວນເຕັມທີ່ຂະໜາດຕ່າງກັນ. ໃນ
C++, ການສົ່ງສັນຍານໄປຫາປະເພດຕົວຊີ້ຂອງຂະໜາດນ້ອຍກວ່ານັ້ນແມ່ນຄວາມຜິດພາດ. Wint-to-pointer-cast is
ເປີດໃຊ້ຕາມຄ່າເລີ່ມຕົ້ນ.

-Wno-pointer-to-int-cast (C ແລະ Objective-C ເທົ່ານັ້ນ)
ສະກັດກັ້ນການເຕືອນໄພຈາກການຄາສທຈາກຕົວຊີ້ໄປຫາປະເພດຈໍານວນເຕັມຂອງຂະຫນາດທີ່ແຕກຕ່າງກັນ.

-Winvalid-pch
ເຕືອນ ຖ້າພົບເຫັນສ່ວນຫົວທີ່ລວບລວມໄວ້ລ່ວງໜ້າຢູ່ໃນເສັ້ນທາງຄົ້ນຫາ ແຕ່ບໍ່ສາມາດນຳໃຊ້ໄດ້.

- ຍາວ - ຍາວ
ເຕືອນຖ້າປະເພດ "ຍາວຍາວ" ຖືກໃຊ້. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍທັງສອງ -Wpedantic or
- ແບບດັ້ງເດີມ ໃນໂໝດ ISO C90 ແລະ C++ 98. ເພື່ອຍັບຍັ້ງຂໍ້ຄວາມເຕືອນ, ໃຊ້
-Wno-ຍາວ-ຍາວ.

-Wvariadic-macros
ເຕືອນຖ້າ macro variadic ຖືກໃຊ້ໃນໂຫມດ ISO C90, ຫຼືຖ້າ syntax ທາງເລືອກ GNU ແມ່ນ
ໃຊ້ໃນໂຫມດ ISO C99. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍທັງສອງ -Wpedantic or - ແບບດັ້ງເດີມທີ່ຢູ່ To
ຍັບຍັ້ງຂໍ້ຄວາມເຕືອນ, ການນໍາໃຊ້ -Wno-variadic-macros.

-Wvarargs
ເຕືອນເມື່ອມີຄໍາຖາມກ່ຽວກັບການນໍາໃຊ້ macros ທີ່ໃຊ້ເພື່ອຈັດການກັບການໂຕ້ຖຽງຕົວແປເຊັ່ນ
"va_start". ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ. ເພື່ອຍັບຍັ້ງຂໍ້ຄວາມເຕືອນ, ໃຊ້ -Wno-varargs.

-Wvector-ປະຕິບັດການ-ປະສິດທິພາບ
ເຕືອນຖ້າຫາກວ່າການປະຕິບັດ vector ບໍ່ຖືກປະຕິບັດໂດຍຜ່ານຄວາມສາມາດ SIMD ຂອງສະຖາປັດຕະ.
ສ່ວນໃຫຍ່ແມ່ນເປັນປະໂຫຍດສໍາລັບການປັບປະສິດທິພາບ. ການປະຕິບັດ vector ສາມາດປະຕິບັດໄດ້
"piecewise", ຊຶ່ງຫມາຍຄວາມວ່າການດໍາເນີນງານ scalar ແມ່ນດໍາເນີນຢູ່ໃນທຸກ vector
ອົງປະກອບ; "ໃນຂະຫນານ", ຊຶ່ງຫມາຍຄວາມວ່າການດໍາເນີນງານ vector ໄດ້ຖືກປະຕິບັດໂດຍໃຊ້
ເກັດຂອງປະເພດກວ້າງ, ເຊິ່ງປົກກະຕິແມ່ນປະສິດທິພາບຫຼາຍ; ແລະ "ເປັນໂສດ
scalar", ຊຶ່ງຫມາຍຄວາມວ່າ vector ເຫມາະກັບປະເພດ scalar.

-Wno-virtual-move-assign
ສະກັດກັ້ນການເຕືອນກ່ຽວກັບການສືບທອດຈາກຖານສະເໝືອນຈິງດ້ວຍການຍ້າຍ C++11 ທີ່ບໍ່ແມ່ນເລື່ອງເລັກໆນ້ອຍໆ
ຜູ້ປະຕິບັດການມອບຫມາຍ. ນີ້ແມ່ນອັນຕະລາຍເພາະວ່າຖ້າພື້ນຖານ virtual ແມ່ນສາມາດບັນລຸໄດ້
ຫຼາຍກວ່າຫນຶ່ງເສັ້ນທາງ, ມັນຖືກຍ້າຍຫຼາຍຄັ້ງ, ຊຶ່ງສາມາດຫມາຍຄວາມວ່າວັດຖຸທັງສອງສິ້ນສຸດລົງໃນ
ການ​ຍ້າຍ​ອອກ​ຈາກ​ລັດ​. ຖ້າຜູ້ປະຕິບັດການມອບຫມາຍຍ້າຍຖືກຂຽນເພື່ອຫຼີກເວັ້ນການຍ້າຍຈາກ
ວັດຖຸທີ່ຍ້າຍມາຈາກ, ການເຕືອນໄພນີ້ສາມາດຖືກປິດໃຊ້ງານໄດ້.

-Wvla
ເຕືອນຖ້າ array ຄວາມຍາວຕົວແປຖືກໃຊ້ໃນລະຫັດ. -Wno-vla ປ້ອງກັນໄດ້ -Wpedantic
ເຕືອນຂອງອາເຣຄວາມຍາວຕົວແປ.

-Wvolatile-register-var
ເຕືອນຖ້າຕົວແປການລົງທະບຽນຖືກປະກາດວ່າມີການປ່ຽນແປງ. ຕົວແກ້ໄຂການລະເຫີຍບໍ່ໄດ້
ຍັບຍັ້ງການເພີ່ມປະສິດທິພາບທັງຫມົດທີ່ອາດຈະລົບລ້າງການອ່ານແລະ / ຫຼືການຂຽນເພື່ອລົງທະບຽນ
ຕົວແປ. ການເຕືອນໄພນີ້ຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-Wdisabled-optimization
ເຕືອນຖ້າບັດການເພີ່ມປະສິດທິພາບທີ່ຮ້ອງຂໍຖືກປິດໃຊ້ງານ. ການເຕືອນໄພນີ້ບໍ່ໄດ້ໂດຍທົ່ວໄປ
ຊີ້ບອກວ່າມີອັນໃດຜິດພາດກັບລະຫັດຂອງເຈົ້າ; ມັນພຽງແຕ່ຊີ້ໃຫ້ເຫັນວ່າ GCC ຂອງ
optimizers ບໍ່ສາມາດຈັດການກັບລະຫັດປະສິດທິຜົນ. ເລື້ອຍໆ, ບັນຫາແມ່ນວ່າຂອງເຈົ້າ
ລະຫັດໃຫຍ່ເກີນໄປ ຫຼືສັບສົນເກີນໄປ; GCC ປະຕິເສດການເພີ່ມປະສິດທິພາບໂຄງການໃນເວລາທີ່ການເພີ່ມປະສິດທິພາບ
ຕົວຂອງມັນເອງມີແນວໂນ້ມທີ່ຈະໃຊ້ເວລາທີ່ໃຊ້ເວລາ inordinate.

-Wpointer-ເຊັນ​ (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນສໍາລັບການໂຕ້ຖຽງຕົວຊີ້ຜ່ານຫຼືການມອບຫມາຍທີ່ມີການລົງນາມທີ່ແຕກຕ່າງກັນ. ນີ້
ທາງເລືອກແມ່ນສະຫນັບສະຫນູນພຽງແຕ່ສໍາລັບ C ແລະ Objective-C. ມັນຫມາຍເຖິງ - ຝາ ແລະໂດຍ
-Wpedantic, ເຊິ່ງສາມາດໄດ້ຮັບການພິການກັບ -Wno-pointer-sign.

-Wstack-protector
ຕົວເລືອກນີ້ແມ່ນມີການເຄື່ອນໄຫວພຽງແຕ່ເມື່ອ -stack-protector ມີການເຄື່ອນໄຫວ. ມັນເຕືອນກ່ຽວກັບຫນ້າທີ່
ທີ່ບໍ່ໄດ້ຮັບການປົກປ້ອງຈາກການຕີ stack.

-Woverlength-strings
ເຕືອນກ່ຽວກັບຄ່າຄົງທີ່ຂອງສະຕຣິງທີ່ຍາວກວ່າຄວາມຍາວ "ສູງສຸດຕໍ່າສຸດ".
ລະບຸໄວ້ໃນມາດຕະຖານ C. ໂດຍທົ່ວໄປແລ້ວ compilers ທີ່ທັນສະໄຫມອະນຸຍາດໃຫ້ string ຄົງທີ່
ຍາວກວ່າຂອບເຂດຈໍາກັດຂັ້ນຕໍ່າຂອງມາດຕະຖານ, ແຕ່ບັນດາໂຄງການແບບພົກພາຫຼາຍຄວນ
ຫຼີກເວັ້ນການໃຊ້ສາຍຍາວ.

ຂີດຈຳກັດນຳໃຊ້ ຫຼັງຈາກ string concatenation ຄົງທີ່, ແລະບໍ່ນັບ trailing
NUL. ໃນ C90, ຂີດຈໍາກັດແມ່ນ 509 ຕົວອັກສອນ; ໃນ C99, ມັນໄດ້ຖືກຍົກຂຶ້ນມາເປັນ 4095. C ++ 98 ບໍ່
ບໍ່ໄດ້ລະບຸຄ່າສູງສຸດຕໍາ່ສຸດທີ່ເປັນມາດຕະຖານ, ດັ່ງນັ້ນພວກເຮົາຈຶ່ງບໍ່ໄດ້ວິນິດໄສສາຍເຊືອກທີ່ມີຄວາມຍາວເກີນ
C++.

ທາງເລືອກນີ້ແມ່ນຊີ້ໃຫ້ເຫັນໂດຍ -Wpedantic, ແລະສາມາດໄດ້ຮັບການພິການກັບ
-Wno-overlength-strings.

-Wunsuffixed-float-constants (C ແລະ Objective-C ເທົ່ານັ້ນ)
ອອກຄຳເຕືອນສຳລັບຄ່າຄົງທີ່ທີ່ລອຍຕົວທີ່ບໍ່ມີຕົວຕໍ່ທ້າຍ. ເມື່ອໃຊ້
ພ້ອມດ້ວຍ -Wsystem-headers ມັນເຕືອນກ່ຽວກັບຄ່າຄົງທີ່ດັ່ງກ່າວຢູ່ໃນໄຟລ໌ສ່ວນຫົວຂອງລະບົບ.
ນີ້ສາມາດເປັນປະໂຫຍດໃນເວລາກະກຽມລະຫັດເພື່ອໃຊ້ກັບ "FLOAT_CONST_DECIMAL64" pragma
ຈາກສ່ວນຂະຫຍາຍຈຸດເລື່ອນເລກຖານສິບຫາ C99.

-Wno-designated-init (C ແລະ Objective-C ເທົ່ານັ້ນ)
ສະກັດກັ້ນການເຕືອນໄພເມື່ອຕົວຕັ້ງຕົວຕັ້ງຕົວຕີຖືກໃຊ້ເພື່ອເລີ່ມຕົ້ນໂຄງສ້າງທີ່
ໄດ້ຖືກໝາຍດ້ວຍຄຸນສົມບັດ "designated_init".

ທາງເລືອກໃນການ ສໍາລັບການ Debugging ຂອງທ່ານ ໂຄງການ or GCC
GCC ມີທາງເລືອກພິເສດຕ່າງໆທີ່ໃຊ້ສໍາລັບການດີບັກບໍ່ວ່າຈະເປັນໂຄງການຫຼື GCC ຂອງທ່ານ:

-g ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບພື້ນເມືອງຂອງລະບົບປະຕິບັດການ (stabs, COFF,
XCOFF, ຫຼື DWARF 2). GDB ສາມາດເຮັດວຽກກັບຂໍ້ມູນການດີບັກນີ້.

ໃນລະບົບສ່ວນໃຫຍ່ທີ່ໃຊ້ຮູບແບບ stabs, -g ເປີດການນຳໃຊ້ຂໍ້ມູນການດີບັກເພີ່ມເຕີມ
ທີ່ພຽງແຕ່ GDB ສາມາດນໍາໃຊ້; ຂໍ້ມູນພິເສດນີ້ເຮັດໃຫ້ການດີບັກເຮັດວຽກດີຂຶ້ນໃນ GDB ແຕ່
ອາດຈະເຮັດໃຫ້ debuggers ອື່ນໆຂັດຂ້ອງຫຼືປະຕິເສດທີ່ຈະອ່ານໂຄງການ. ຖ້າທ່ານຕ້ອງການ
ການ​ຄວບ​ຄຸມ​ສໍາ​ລັບ​ການ​ແນ່​ນອນ​ວ່າ​ຈະ​ສ້າງ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ​, ການ​ນໍາ​ໃຊ້​ -gstabs+, -gstabs,
-gxcoff+, -gxcoff, ຫຼື -gvms (ເບິ່ງຂ້າງລຸ່ມ).

GCC ອະນຸຍາດໃຫ້ທ່ານໃຊ້ -g ກັບ -O. ທາງລັດປະຕິບັດໂດຍລະຫັດທີ່ດີທີ່ສຸດອາດຈະ
ເປັນບາງໂອກາດສ້າງຜົນໄດ້ຮັບທີ່ຫນ້າປະຫລາດໃຈ: ບາງຕົວແປທີ່ທ່ານປະກາດອາດຈະບໍ່ມີຢູ່
ທັງໝົດ; ການໄຫຼເຂົ້າຂອງການຄວບຄຸມອາດຈະເຄື່ອນຍ້າຍໄລຍະສັ້ນໆທີ່ທ່ານບໍ່ໄດ້ຄາດຫວັງ; ບາງຄໍາຖະແຫຼງອາດຈະ
ບໍ່ໄດ້ຖືກປະຕິບັດເພາະວ່າພວກເຂົາຄິດໄລ່ຜົນໄດ້ຮັບຄົງທີ່ຫຼືມູນຄ່າຂອງພວກເຂົາຢູ່ທີ່ແລ້ວ
ມື; ບາງຄໍາຖະແຫຼງທີ່ອາດຈະປະຕິບັດຢູ່ໃນສະຖານທີ່ຕ່າງໆເພາະວ່າພວກມັນຖືກຍ້າຍອອກໄປ
ຂອງ loops.

ຢ່າງໃດກໍຕາມ, ມັນພິສູດໄດ້ວ່າເປັນໄປໄດ້ທີ່ຈະ debug ຜົນຜະລິດທີ່ດີທີ່ສຸດ. ນີ້ເຮັດໃຫ້ມັນສົມເຫດສົມຜົນ
ເພື່ອໃຊ້ຕົວເພີ່ມປະສິດທິພາບສໍາລັບໂຄງການທີ່ອາດຈະມີຂໍ້ບົກພ່ອງ.

ຕົວເລືອກຕໍ່ໄປນີ້ແມ່ນເປັນປະໂຫຍດເມື່ອ GCC ຖືກສ້າງຂຶ້ນດ້ວຍຄວາມສາມາດເພີ່ມເຕີມ
ຫຼາຍກ່ວາຮູບແບບການດີບັກ.

-gsplit-dwarf
ແຍກຂໍ້ມູນ debugging dwarf ຫຼາຍເທົ່າທີ່ເປັນໄປໄດ້ເຂົ້າໄປໃນໄຟລ໌ຜົນຜະລິດແຍກຕ່າງຫາກ
ດ້ວຍການຂະຫຍາຍ .dwo. ທາງເລືອກນີ້ອະນຸຍາດໃຫ້ລະບົບການກໍ່ສ້າງເພື່ອຫຼີກເວັ້ນການເຊື່ອມຕໍ່ໄຟລ໌
ກັບຂໍ້ມູນດີບັກ. ເພື່ອໃຫ້ເປັນປະໂຫຍດ, ຕົວເລືອກນີ້ຕ້ອງການຕົວດີບັກທີ່ມີຄວາມສາມາດ
ອ່ານໄຟລ໌ .dwo.

-ggdb
ຜະລິດຂໍ້ມູນການດີບັກເພື່ອໃຊ້ໂດຍ GDB. ນີ້ຫມາຍຄວາມວ່າຈະໃຊ້ການສະແດງອອກທີ່ສຸດ
ຮູບແບບທີ່ມີຢູ່ (DWARF 2, stabs, ຫຼືຮູບແບບພື້ນເມືອງຖ້າບໍ່ມີທັງສອງອັນ
ຮອງຮັບ), ລວມທັງການຂະຫຍາຍ GDB ຖ້າເປັນໄປໄດ້.

-gpubnames
ສ້າງພາກສ່ວນ .debug_pubnames dwarf ແລະ .debug_pubtypes.

-ggnu-pubnames
ສ້າງພາກສ່ວນ .debug_pubnames ແລະ .debug_pubtypes ໃນຮູບແບບທີ່ເໝາະສົມກັບ
ການປ່ຽນເປັນດັດຊະນີ GDB. ຕົວເລືອກນີ້ມີປະໂຫຍດພຽງແຕ່ກັບຕົວເຊື່ອມຕໍ່ທີ່ສາມາດ
ຜະລິດດັດຊະນີ GDB ຮຸ່ນ 7.

-gstabs
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ stabs (ຖ້າມັນຖືກສະຫນັບສະຫນູນ), ໂດຍບໍ່ມີ GDB
ສ່ວນຂະຫຍາຍ. ນີ້ແມ່ນຮູບແບບທີ່ໃຊ້ໂດຍ DBX ໃນລະບົບ BSD ສ່ວນໃຫຍ່. ໃນ MIPS, Alpha ແລະ
System V Release 4 ລະບົບທາງເລືອກນີ້ຜະລິດ stabs debugging output ທີ່ບໍ່ແມ່ນ
ເຂົ້າໃຈໂດຍ DBX ຫຼື SDB. ໃນ System V Release 4 ລະບົບທາງເລືອກນີ້ຕ້ອງການ GNU
ຜູ້ປະກອບ.

-feliminate-unused-debug-ສັນຍາລັກ
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ stabs (ຖ້ານັ້ນຖືກສະຫນັບສະຫນູນ), ສໍາລັບສັນຍາລັກເທົ່ານັ້ນ
ທີ່ຖືກນໍາໃຊ້ຕົວຈິງ.

-femit-class-debug-ສະເໝີ
ແທນ​ທີ່​ຈະ​ປ່ອຍ​ອອກ​ມາ​ຂໍ້​ມູນ​ການ​ແກ້​ໄຂ​ບັນ​ຫາ​ສໍາ​ລັບ​ຫ້ອງ C ++ ໃນ​ພຽງ​ແຕ່​ຫນຶ່ງ​ໄຟລ​໌​ວັດ​ຖຸ​,
ປ່ອຍມັນຢູ່ໃນໄຟລ໌ວັດຖຸທັງໝົດໂດຍໃຊ້ຫ້ອງຮຽນ. ທາງເລືອກນີ້ຄວນຈະຖືກນໍາໃຊ້ພຽງແຕ່ກັບ
debugger ທີ່ບໍ່ສາມາດຈັດການກັບວິທີການ GCC ປົກກະຕິປ່ອຍຂໍ້ມູນການດີບັກ
ສໍາລັບຫ້ອງຮຽນເນື່ອງຈາກວ່າການນໍາໃຊ້ທາງເລືອກນີ້ເພີ່ມຂະຫນາດຂອງຂໍ້ມູນການແກ້ບັນຫາໂດຍ
ຫຼາຍເທົ່າທີ່ເປັນປັດໄຈຂອງສອງ.

-fdebug-types-section
ເມື່ອໃຊ້ DWARF ຮຸ່ນ 4 ຫຼືສູງກວ່າ, ປະເພດ DIEs ສາມາດຖືກໃສ່ເຂົ້າໄປໃນຂອງຕົນເອງ
ພາກສ່ວນ ".debug_types" ແທນທີ່ຈະເຮັດໃຫ້ພວກມັນເປັນສ່ວນຫນຶ່ງຂອງພາກ ".debug_info". ມັນ
ມີປະສິດທິພາບຫຼາຍຂຶ້ນໃນການວາງພວກມັນຢູ່ໃນພາກສ່ວນ comdat ແຍກຕ່າງຫາກນັບຕັ້ງແຕ່ຕົວເຊື່ອມຕໍ່ສາມາດຫຼັງຈາກນັ້ນ
ເອົາສິ່ງທີ່ຊໍ້າກັນ. ແຕ່ຜູ້ບໍລິໂພກ DWARF ທັງໝົດບໍ່ຮອງຮັບພາກສ່ວນ ".debug_types" ເທື່ອ
ແລະໃນບາງວັດຖຸ ".debug_types" ຜະລິດຂະຫນາດໃຫຍ່ແທນທີ່ຈະເປັນການດີບັກຂະຫນາດນ້ອຍກວ່າ
ຂໍ້ມູນຂ່າວສານ.

-gstabs+
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ stabs (ຖ້າມັນຖືກສະຫນັບສະຫນູນ), ໂດຍໃຊ້ GNU
ສ່ວນຂະຫຍາຍທີ່ເຂົ້າໃຈພຽງແຕ່ໂດຍ GNU debugger (GDB). ການນໍາໃຊ້ການຂະຫຍາຍເຫຼົ່ານີ້ແມ່ນ
ອາດຈະເຮັດໃຫ້ debugger ອື່ນໆຂັດຂ້ອງ ຫຼືປະຕິເສດການອ່ານໂຄງການ.

-gcoff
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ COFF (ຖ້າວ່ານັ້ນຖືກຮອງຮັບ). ນີ້​ແມ່ນ
ຮູບແບບທີ່ໃຊ້ໂດຍ SDB ໃນລະບົບ V ສ່ວນໃຫຍ່ກ່ອນ System V Release 4.

-gxcoff
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ XCOFF (ຖ້າວ່ານັ້ນຖືກຮອງຮັບ). ນີ້​ແມ່ນ
ຮູບແບບທີ່ໃຊ້ໂດຍ DBX debugger ໃນລະບົບ IBM RS/6000.

-gxcoff+
ຜະລິດຂໍ້ມູນ debugging ໃນຮູບແບບ XCOFF (ຖ້າວ່ານັ້ນຖືກຮອງຮັບ), ໂດຍໃຊ້ GNU
ສ່ວນຂະຫຍາຍທີ່ເຂົ້າໃຈພຽງແຕ່ໂດຍ GNU debugger (GDB). ການນໍາໃຊ້ການຂະຫຍາຍເຫຼົ່ານີ້ແມ່ນ
ອາດຈະເຮັດໃຫ້ debugger ອື່ນຂັດຂ້ອງ ຫຼືປະຕິເສດການອ່ານໂຄງການ, ແລະອາດຈະເຮັດໃຫ້ເກີດ
ເຄື່ອງປະກອບອື່ນນອກເໜືອໄປຈາກຕົວປະກອບ GNU (GAS) ລົ້ມເຫລວດ້ວຍຄວາມຜິດພາດ.

-gdwarf-ສະບັບພາສາ
ຜະລິດຂໍ້ມູນການດີບັກໃນຮູບແບບ DWARF (ຖ້າອັນນັ້ນຖືກຮອງຮັບ). ມູນຄ່າຂອງ
ສະບັບພາສາ ອາດຈະເປັນ 2, 3, 4 ຫຼື 5; ສະບັບເລີ່ມຕົ້ນສໍາລັບເປົ້າຫມາຍຫຼາຍທີ່ສຸດແມ່ນ 4. DWARF
ເວີຊັ່ນ 5 ແມ່ນພຽງແຕ່ການທົດລອງ.

ໃຫ້ສັງເກດວ່າດ້ວຍ DWARF ເວີຊັ່ນ 2, ບາງພອດຕ້ອງການ ແລະໃຊ້ບາງອັນທີ່ບໍ່ຂັດກັນສະເໝີ
ການຂະຫຍາຍ DWARF 3 ໃນຕາຕະລາງ unwind.

ເວີຊັ່ນ 4 ອາດຈະຕ້ອງການ GDB 7.0 ແລະ -fvar-tracking-assignments ເພື່ອຜົນປະໂຫຍດສູງສຸດ.

-grecord-gcc-ສະຫຼັບ
ສະວິດນີ້ເຮັດໃຫ້ຕົວເລືອກແຖວຄໍາສັ່ງທີ່ໃຊ້ເພື່ອເອີ້ນ compiler ທີ່ອາດຈະ
ກະທົບຕໍ່ການສ້າງລະຫັດທີ່ຈະໃສ່ເຂົ້າກັບຄຸນລັກສະນະ DW_AT_producer ໃນ DWARF
ຂໍ້ມູນການດີບັກ. ທາງເລືອກແມ່ນ concatenated ກັບຊ່ອງທີ່ແຍກເຂົາເຈົ້າອອກຈາກ
ເຊິ່ງກັນແລະກັນແລະຈາກສະບັບ compiler. ເບິ່ງນຳ -frecord-gcc-ສະຫຼັບ ສໍາລັບຄົນອື່ນ
ວິທີການເກັບຮັກສາຕົວເລືອກ compiler ເຂົ້າໄປໃນໄຟລ໌ວັດຖຸ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-gno-record-gcc-switches
ບໍ່ອະນຸຍາດໃຫ້ເພີ່ມຕົວເລືອກແຖວຄຳສັ່ງໃສ່ຄຸນລັກສະນະ DW_AT_producer ໃນ DWARF
ຂໍ້ມູນການດີບັກ.

-gstrict-dwarf
ບໍ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ສ່ວນ​ຂະ​ຫຍາຍ​ຂອງ​ສະ​ບັບ​ມາດ​ຕະ​ຖານ DWARF ຕໍ່​ມາ​ກ​່​ວາ​ທີ່​ເລືອກ​ດ້ວຍ
-gdwarf-ສະບັບພາສາ. ໃນເປົ້າຫມາຍສ່ວນໃຫຍ່ໂດຍໃຊ້ສ່ວນຂະຫຍາຍ DWARF ທີ່ບໍ່ຂັດແຍ້ງຈາກຕໍ່ມາ
ສະບັບມາດຕະຖານແມ່ນອະນຸຍາດ.

-gno-strict-dwarf
ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ສ່ວນ​ຂະ​ຫຍາຍ​ຂອງ​ສະ​ບັບ​ມາດ​ຕະ​ຖານ DWARF ຕໍ່​ມາ​ກ​່​ວາ​ທີ່​ເລືອກ​ດ້ວຍ
-gdwarf-ສະບັບພາສາ.

-gz[=ປະເພດ]
ຜະລິດພາກສ່ວນດີບັກທີ່ຖືກບີບອັດໃນຮູບແບບ DWARF, ຖ້າອັນນັ້ນຖືກຮອງຮັບ. ຖ້າ ປະເພດ is
ບໍ່ໄດ້ໃຫ້, ປະເພດເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບຄວາມສາມາດຂອງຕົວປະກອບແລະຕົວເຊື່ອມຕໍ່
ໃຊ້ແລ້ວ. ປະເພດ ອາດ​ຈະ​ເປັນ​ຫນຶ່ງ​ໃນ none (ຢ່າບີບອັດພາກສ່ວນດີບັກ), zlib (ໃຊ້ zlib
ການບີບອັດໃນຮູບແບບ ELF gABI), ຫຼື zlib-gnu (ໃຊ້ການບີບອັດ zlib ໃນ GNU ແບບດັ້ງເດີມ
ຮູບແບບ). ຖ້າຕົວເຊື່ອມຕໍ່ບໍ່ສະຫນັບສະຫນູນການຂຽນສ່ວນດີບັກທີ່ຖືກບີບອັດ, ທາງເລືອກ
ຖືກປະຕິເສດ. ຖ້າບໍ່ດັ່ງນັ້ນ, ຖ້າຜູ້ປະກອບບໍ່ສະຫນັບສະຫນູນພວກເຂົາ, -gz ແມ່ນງຽບໆ
ບໍ່ສົນໃຈໃນເວລາຜະລິດໄຟລ໌ວັດຖຸ.

-gvms
ຜະລິດຂໍ້ມູນການດີບັກໃນຮູບແບບການດີບັກ Alpha/VMS (ຖ້າອັນນັ້ນຖືກຮອງຮັບ). ນີ້
ແມ່ນຮູບແບບທີ່ໃຊ້ໂດຍ DEBUG ໃນລະບົບ Alpha/VMS.

-gລະດັບ
-ggdbລະດັບ
-gstabsລະດັບ
-gcoffລະດັບ
-gxcoffລະດັບ
-gvmsລະດັບ
ຂໍຂໍ້ມູນການດີບັກ ແລະຍັງໃຊ້ ລະດັບ ເພື່ອລະບຸຂໍ້ມູນຫຼາຍປານໃດ. ໄດ້
ລະດັບເລີ່ມຕົ້ນແມ່ນ 2.

ລະດັບ 0 ບໍ່ມີຂໍ້ມູນດີບັ໊ກເລີຍ. ດັ່ງນັ້ນ, -g0 ປະຕິເສດ -g.

ລະດັບ 1 ຜະລິດຂໍ້ມູນຫນ້ອຍ, ພຽງພໍສໍາລັບການເຮັດໃຫ້ backtraces ໃນພາກສ່ວນຂອງ
ໂຄງການທີ່ທ່ານບໍ່ໄດ້ວາງແຜນທີ່ຈະ debug. ນີ້ປະກອບມີຄໍາອະທິບາຍກ່ຽວກັບຫນ້າທີ່ແລະ
ຕົວແປພາຍນອກ, ແລະຕາຕະລາງຕົວເລກ, ແຕ່ບໍ່ມີຂໍ້ມູນກ່ຽວກັບຕົວແປທ້ອງຖິ່ນ.

ລະດັບ 3 ປະກອບມີຂໍ້ມູນເພີ່ມເຕີມ, ເຊັ່ນ: ນິຍາມມະຫາພາກທັງໝົດທີ່ມີຢູ່ໃນ
ໂຄງການ. ບາງຕົວດີບັກຮອງຮັບການຂະຫຍາຍມະຫາພາກເມື່ອທ່ານໃຊ້ -g3.

-gdwarf-2 ບໍ່ຍອມຮັບລະດັບດີບັ໊ກທີ່ປະສົມປະສານ, ເພາະວ່າ GCC ໃຊ້ເພື່ອສະຫນັບສະຫນູນ
ທາງເລືອກ -gdwarf ນັ້ນໝາຍເຖິງການສ້າງຂໍ້ມູນດີບັກໃນເວີຊັນ 1 ຂອງ DWARF
ຮູບແບບ (ເຊິ່ງແຕກຕ່າງກັນຫຼາຍຈາກຮຸ່ນ 2), ແລະມັນອາດຈະສັບສົນເກີນໄປ.
ຮູບ​ແບບ​ດີ​ບັກ​ນັ້ນ​ລ້າ​ສະ​ໄໝ​ດົນ​ນານ, ແຕ່​ທາງ​ເລືອກ​ບໍ່​ສາ​ມາດ​ປ່ຽນ​ໄດ້​ໃນ​ປັດ​ຈຸ​ບັນ. ແທນທີ່ຈະໃຊ້
ເພີ່ມເຕີມ -gລະດັບ ທາງເລືອກທີ່ຈະປ່ຽນລະດັບດີບັກສໍາລັບ DWARF.

-gtoggle
ປິດການສ້າງຂໍ້ມູນດີບັ໊ກ, ຖ້າອອກຈາກຕົວເລືອກນີ້ຈະສ້າງມັນ, ຫຼືເປີດມັນ
ຢູ່ໃນລະດັບ 2 ຖ້າບໍ່ດັ່ງນັ້ນ. ຕໍາແຫນ່ງຂອງການໂຕ້ຖຽງນີ້ຢູ່ໃນເສັ້ນຄໍາສັ່ງບໍ່ໄດ້
ເລື່ອງ; ມັນ​ມີ​ຜົນ​ກະ​ທົບ​ຫຼັງ​ຈາກ​ທີ່​ທາງ​ເລືອກ​ອື່ນໆ​ທັງ​ຫມົດ​ໄດ້​ຮັບ​ການ​ປຸງ​ແຕ່ງ​, ແລະ​ມັນ​ເຮັດ​ໄດ້​ພຽງ​ແຕ່​
ຄັ້ງດຽວ, ບໍ່ວ່າມັນຈະໃຫ້ຈັກເທື່ອ. ນີ້ແມ່ນຈຸດປະສົງຕົ້ນຕໍເພື່ອນໍາໃຊ້ກັບ
-fcompare-debug.

-fsanitize=ທີ່ຢູ່
ເປີດໃຊ້ AddressSanitizer, ເຄື່ອງກວດຈັບຄວາມຜິດພາດຄວາມຈຳໄວ. ຄໍາແນະນໍາການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາແມ່ນ
ເຄື່ອງ​ມື​ເພື່ອ​ກວດ​ສອບ​ນອກ​ເຂດ​ແດນ​ແລະ​ການ​ນໍາ​ໃຊ້​ຫຼັງ​ຈາກ​ການ​ບໍ່​ມີ​ຂໍ້​ບົກ​ພ່ອງ​. ເບິ່ງ
<https://github.com/google/sanitizers/wiki/AddressSanitizer> ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ. ໄດ້
ພຶດຕິກໍາການແລ່ນເວລາສາມາດໄດ້ຮັບອິດທິພົນໂດຍໃຊ້ ASAN_OPTIONS ສະພາບແວດລ້ອມປ່ຽນແປງ. ເມື່ອ​ໃດ​
ຕັ້ງຄ່າເປັນ "help=1", ທາງເລືອກທີ່ມີຢູ່ແມ່ນສະແດງໃຫ້ເຫັນໃນຕອນເລີ່ມຕົ້ນຂອງ instrumended
ໂຄງການ. ເບິ່ງ
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> ສໍາລັບ ກ
ບັນຊີລາຍຊື່ຂອງທາງເລືອກທີ່ສະຫນັບສະຫນູນ.

-fsanitize=kernel-address
ເປີດໃຊ້ AddressSanitizer ສໍາລັບ Linux kernel. ເບິ່ງ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=ທີ່ຢູ່ neither -fsanitize=ກະທູ້ ຖືກນໍາໃຊ້. ໃນ​ນັ້ນ
ກໍ​ລະ​ນີ​ທີ່​ປະ​ຕິ​ບັດ​ແມ່ນ​ເຊື່ອມ​ຕໍ່​ກັບ​ຫ້ອງ​ສະ​ຫມຸດ​ທີ່ overrides "malloc​" ແລະ​ອື່ນໆ​
ຫນ້າທີ່ຜູ້ຈັດສັນ. ເບິ່ງ
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> ສໍາລັບການເພີ່ມເຕີມ
ລາຍລະອຽດ. ພຶດຕິກໍາການແລ່ນເວລາສາມາດໄດ້ຮັບອິດທິພົນໂດຍໃຊ້ LSAN_OPTIONS ສະພາບແວດລ້ອມ
ຕົວແປ.

-fsanitize=ບໍ່ໄດ້ກຳນົດ
ເປີດໃຊ້ UndefinedBehaviorSanitizer, ເຄື່ອງກວດຈັບພຶດຕິກຳທີ່ບໍ່ໄດ້ກຳນົດໄວ. ຕ່າງໆ
ການ​ຄິດ​ໄລ່​ແມ່ນ​ເປັນ​ເຄື່ອງ​ມື​ເພື່ອ​ກວດ​ສອບ​ພຶດ​ຕິ​ກໍາ​ທີ່​ບໍ່​ໄດ້​ກໍາ​ນົດ​ຢູ່​ໃນ runtime​. ປະຈຸບັນ
ຕົວເລືອກຍ່ອຍແມ່ນ:

-fsanitize=shift
ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ການ​ກວດ​ສອບ​ວ່າ​ຜົນ​ຂອງ​ການ​ດໍາ​ເນີນ​ງານ​ການ​ປ່ຽນ​ແປງ​ແມ່ນ​ບໍ່​ໄດ້​
ບໍ່ໄດ້ກໍານົດ. ໃຫ້ສັງເກດວ່າສິ່ງທີ່ຖືກພິຈາລະນາຢ່າງແນ່ນອນແມ່ນແຕກຕ່າງກັນເລັກນ້ອຍ
ລະຫວ່າງ C ແລະ C ++, ເຊັ່ນດຽວກັນກັບລະຫວ່າງ ISO C90 ແລະ C99, ແລະອື່ນໆ.

-fsanitize=integer-divide-by-zero
ກວດພົບການຫານຈໍານວນເຕັມດ້ວຍສູນເຊັ່ນດຽວກັນກັບການຫານ "INT_MIN / -1".

-fsanitize=ບໍ່ສາມາດເຂົ້າເຖິງໄດ້
ດ້ວຍທາງເລືອກນີ້, ຄອມພີວເຕີຈະປ່ຽນການໂທ "__builtin_unreachable" ໃຫ້ເປັນ
ໂທຫາຂໍ້ຄວາມການວິນິດໄສແທນ. ເມື່ອເຖິງການໂທ "__builtin_unreachable",
ພຶດຕິກໍາແມ່ນບໍ່ໄດ້ກໍານົດ.

-fsanitize=vla-bound
ຕົວເລືອກນີ້ສັ່ງໃຫ້ compiler ກວດເບິ່ງວ່າຂະຫນາດຂອງຄວາມຍາວຕົວແປ
array ເປັນບວກ.

-fsanitize=null
ຕົວເລືອກນີ້ເປີດໃຊ້ການກວດສອບຕົວຊີ້. ໂດຍສະເພາະ, ຄໍາຮ້ອງສະຫມັກທີ່ສ້າງຂຶ້ນດ້ວຍ
ທາງ​ເລືອກ​ນີ້​ເປີດ​ຈະ​ອອກ​ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ໃນ​ເວ​ລາ​ທີ່​ມັນ​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ dereference a
ຕົວຊີ້ NULL, ຫຼືຖ້າການອ້າງອີງ (ອາດຈະເປັນການອ້າງອີງ rvalue) ຖືກຜູກມັດກັບ NULL
ຕົວຊີ້, ຫຼືຖ້າວິທີການຖືກເອີ້ນໃສ່ວັດຖຸທີ່ຊີ້ໂດຍຕົວຊີ້ NULL.

-fsanitize=ກັບຄືນ
ຕົວເລືອກນີ້ເຮັດໃຫ້ການກວດສອບໃບແຈ້ງຍອດກັບຄືນ. ໂຄງການທີ່ສ້າງຂຶ້ນດ້ວຍທາງເລືອກນີ້
ເປີດຈະອອກຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດໃນເວລາທີ່ສິ້ນສຸດຂອງຟັງຊັນທີ່ບໍ່ແມ່ນ void ແມ່ນ
ບັນລຸໄດ້ໂດຍບໍ່ໄດ້ສົ່ງຄືນຄ່າຕົວຈິງ. ທາງເລືອກນີ້ເຮັດວຽກຢູ່ໃນ C ++ ເທົ່ານັ້ນ.

-fsanitize=signed-integer-overflow
ຕົວເລືອກນີ້ເປີດໃຊ້ການກວດສອບການລົ້ນຈຳນວນເຕັມທີ່ເຊັນແລ້ວ. ພວກເຮົາກວດເບິ່ງວ່າຜົນໄດ້ຮັບຂອງ
"+", "*", ແລະທັງ unary ແລະ binary "-" ບໍ່ overflow ໃນເຊັນ
ເລກຄະນິດສາດ. ໝາຍເຫດ, ກົດລະບຽບການສົ່ງເສີມຈຳນວນເຕັມຈະຕ້ອງຖືກພິຈາລະນາ. ນັ້ນ​ແມ່ນ,
ຕໍ່ໄປນີ້ບໍ່ແມ່ນ overflow:

ເຊັນ char a = SCHAR_MAX;
a++;

-fsanitize=ຂອບເຂດ
ຕົວເລືອກນີ້ເປີດໃຊ້ເຄື່ອງມືຂອງຂອບເຂດອາເຣ. ຕ່າງໆນອກຂອບເຂດ
ກວດພົບການເຂົ້າເຖິງ. ສະ​ມາ​ຊິກ array ຢືດ​ຢຸ່ນ​, ອາ​ເຣ​ສະ​ມາ​ຊິກ array ຢືດ​ຢຸ່ນ​,
ແລະຕົວກໍານົດເບື້ອງຕົ້ນຂອງຕົວແປທີ່ມີການເກັບຮັກສາແບບຄົງທີ່ບໍ່ໄດ້ຖືກປະຕິບັດ.

-fsanitize=ການຈັດຮຽງ
ຕົວເລືອກນີ້ເຮັດໃຫ້ການກວດສອບການຈັດລຽງຂອງຕົວຊີ້ເມື່ອພວກມັນຖືກອ້າງອີງ
ຫຼືໃນເວລາທີ່ການອ້າງອີງຖືກຜູກມັດກັບເປົ້າຫມາຍທີ່ສອດຄ່ອງບໍ່ພຽງພໍ, ຫຼືໃນເວລາທີ່ວິທີການຫຼື
constructor ແມ່ນ invoked ໃນວັດຖຸທີ່ສອດຄ່ອງບໍ່ພຽງພໍ.

-fsanitize=object-size
ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ເຄື່ອງ​ມື​ຂອງ​ການ​ອ້າງ​ອີງ​ຄວາມ​ຊົງ​ຈໍາ​ໂດຍ​ການ​ນໍາ​ໃຊ້​
ຟັງຊັນ "__builtin_object_size". ການເຂົ້າເຖິງຕົວຊີ້ອອກນອກຂອບເຂດຕ່າງໆແມ່ນ
ກວດພົບ.

-fsanitize=float-divide-by-zero
ກວດພົບການແບ່ງຈຸດລອຍດ້ວຍສູນ. ແຕກຕ່າງຈາກທາງເລືອກອື່ນທີ່ຄ້າຍຄືກັນ,
-fsanitize=float-divide-by-zero ບໍ່ໄດ້ເປີດໃຊ້ໂດຍ -fsanitize=ບໍ່ໄດ້ກຳນົດ, ນັບຕັ້ງແຕ່
ການແບ່ງຈຸດເລື່ອນໂດຍສູນສາມາດເປັນວິທີທີ່ຖືກຕ້ອງຂອງການໄດ້ຮັບອັນເປັນນິດ
ແລະ NaNs.

-fsanitize=float-cast-overflow
ຕົວເລືອກນີ້ເປີດໃຊ້ງານປະເພດຈຸດລອຍເພື່ອກວດສອບການແປງຈຳນວນເຕັມ. ພວກເຮົາກວດສອບ
ວ່າຜົນຂອງການປ່ຽນໃຈເຫລື້ອມໃສບໍ່ overflow. ແຕກຕ່າງຈາກອື່ນໆທີ່ຄ້າຍຄືກັນ
ທາງເລືອກ, -fsanitize=float-cast-overflow ບໍ່ໄດ້ເປີດໃຊ້ໂດຍ -fsanitize=ບໍ່ໄດ້ກຳນົດ.
ຕົວເລືອກນີ້ໃຊ້ບໍ່ໄດ້ດີກັບຂໍ້ຍົກເວັ້ນ "FE_INVALID" ທີ່ເປີດໃຊ້ງານ.

-fsanitize=nonnull-attribute
ຕົວເລືອກນີ້ເປີດໃຊ້ເຄື່ອງມືການໂທ, ກວດເບິ່ງວ່າຄ່າ null ບໍ່ແມ່ນບໍ
ຜ່ານໄປຫາ arguments ທີ່ໝາຍວ່າຕ້ອງການຄ່າທີ່ບໍ່ແມ່ນ null ໂດຍຟັງຊັນ "nonnull".
attribute

-fsanitize=returns-nonnull-attribute
ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ເຄື່ອງ​ມື​ຂອງ​ຄໍາ​ບັນ​ຍາຍ​ຜົນ​ຕອບ​ແທນ​ໃນ​ຫນ້າ​ທີ່​ຫມາຍ​ດ້ວຍ​
"returns_nonnull" ຄຸນ​ລັກ​ສະ​ນະ​ການ​ທໍາ​ງານ​, ເພື່ອ​ກວດ​ສອບ​ການ​ກັບ​ຄືນ​ຂອງ​ຄ່າ null ຈາກ​ດັ່ງ​ກ່າວ​
ປະຕິບັດຫນ້າ.

-fsanitize=bool
ທາງເລືອກນີ້ເຮັດໃຫ້ເຄື່ອງມືການໂຫຼດຈາກ bool. ຖ້າຄ່າອື່ນນອກຈາກ 0/1
ຖືກໂຫລດ, ຂໍ້ຜິດພາດໃນເວລາແລ່ນແມ່ນອອກ.

-fsanitize=enum
ຕົວເລືອກນີ້ເປີດໃຊ້ເຄື່ອງມືການໂຫຼດຈາກປະເພດ enum. ຖ້າມູນຄ່າ
ຢູ່ນອກຂອບເຂດຂອງຄ່າສໍາລັບປະເພດ enum ແມ່ນການໂຫຼດ, ຂໍ້ຜິດພາດໃນເວລາແລ່ນແມ່ນ
ອອກ.

-fsanitize=vptr
ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ການ​ນໍາ​ໃຊ້​ເຄື່ອງ​ມື​ຂອງ​ການ​ໂທ​ຫນ້າ​ທີ່​ສະ​ມາ​ຊິກ C++​, ການ​ເຂົ້າ​ເຖິງ​ສະ​ມາ​ຊິກ​
ແລະບາງການປ່ຽນແປງລະຫວ່າງຕົວຊີ້ໄປຫາຖານແລະຊັ້ນຮຽນທີ່ມາຈາກ, ເພື່ອກວດສອບ
ວັດຖຸອ້າງອີງມີປະເພດໄດນາມິກທີ່ຖືກຕ້ອງ.

ໃນຂະນະທີ່ -ftrapv ເຮັດ​ໃຫ້​ກັບ​ດັກ​ສໍາ​ລັບ​ການ overflows ໄດ້​ລົງ​ນາມ​ທີ່​ຈະ​ຖືກ​ປ່ອຍ​ອອກ​ມາ​, -fsanitize=ບໍ່ໄດ້ກຳນົດ
ໃຫ້ຂໍ້ຄວາມວິນິດໄສ. ໃນປັດຈຸບັນນີ້ໃຊ້ໄດ້ກັບພາສາ C ຄອບຄົວເທົ່ານັ້ນ.

-fno-sanitize=ທັງໝົດ
ຕົວເລືອກນີ້ປິດການທໍາງານຂອງຢາຂ້າເຊື້ອອະສຸຈິທັງຫມົດທີ່ເປີດໃຊ້ກ່ອນຫນ້ານີ້. -fsanitize=ທັງໝົດ ບໍ່​ແມ່ນ
ອະ​ນຸ​ຍາດ​ໃຫ້​, ເນື່ອງ​ຈາກ​ວ່າ​ຢາ​ອະ​ນາ​ໄມ​ບາງ​ຢ່າງ​ບໍ່​ສາ​ມາດ​ນໍາ​ໃຊ້​ຮ່ວມ​ກັນ​.

-fasan-shadow-offset=ຈໍານວນ
ຕົວເລືອກນີ້ບັງຄັບໃຫ້ GCC ໃຊ້ການຊົດເຊີຍເງົາແບບກຳນົດເອງໃນການກວດສອບ AddressSanitizer. ມັນ​ແມ່ນ
ເປັນປະໂຫຍດສໍາລັບການທົດລອງກັບ shadow memory layouts ທີ່ແຕກຕ່າງກັນໃນ Kernel
ທີ່ຢູ່

-fsanitize-ຟື້ນຕົວ[=ເລືອກ]
-fsanitize-recover= ຄວບຄຸມຮູບແບບການຟື້ນຕົວຄວາມຜິດພາດສໍາລັບຢາຂ້າເຊື້ອທີ່ໄດ້ກ່າວໄວ້ໃນເຄື່ອງໝາຍຈຸດ-
ບັນຊີລາຍຊື່ທີ່ແຍກອອກ ເລືອກ. ການເປີດໃຊ້ງານທາງເລືອກນີ້ສໍາລັບອົງປະກອບຂອງສຸຂາພິບານເຮັດໃຫ້ມັນ
ພະຍາຍາມສືບຕໍ່ແລ່ນໂຄງການຄືກັບວ່າບໍ່ມີຂໍ້ຜິດພາດເກີດຂຶ້ນ. ນີ້ຫມາຍຄວາມວ່າຫຼາຍ
ຄວາມຜິດພາດ runtime ສາມາດຖືກລາຍງານຢູ່ໃນໂຄງການດຽວແລ່ນ, ແລະລະຫັດອອກຂອງ
ໂຄງ​ການ​ອາດ​ຈະ​ຊີ້​ບອກ​ຄວາມ​ສໍາ​ເລັດ​ເຖິງ​ແມ່ນ​ວ່າ​ໃນ​ເວ​ລາ​ທີ່​ຂໍ້​ຜິດ​ພາດ​ໄດ້​ຮັບ​ການ​ລາຍ​ງານ​. ໄດ້
-fno-sanitize-recover= ທາງ​ເລືອກ​ສາ​ມາດ​ຖືກ​ນໍາ​ໃຊ້​ເພື່ອ​ປັບ​ປຸງ​ພຶດ​ຕິ​ກໍາ​ນີ້​: ພຽງ​ແຕ່​ຄັ້ງ​ທໍາ​ອິດ​
ຂໍ້ຜິດພາດທີ່ກວດພົບຈະຖືກລາຍງານ ແລະໂປຣແກຣມຈະອອກດ້ວຍລະຫັດອອກທີ່ບໍ່ແມ່ນສູນ.

ໃນປັດຈຸບັນຄຸນນະສົມບັດນີ້ພຽງແຕ່ເຮັດວຽກສໍາລັບ -fsanitize=ບໍ່ໄດ້ກຳນົດ (ແລະຕົວເລືອກຍ່ອຍຂອງມັນຍົກເວັ້ນ
ສໍາລັບການ -fsanitize=ບໍ່ສາມາດເຂົ້າເຖິງໄດ້ ແລະ -fsanitize=ກັບຄືນ), -fsanitize=float-cast-overflow,
-fsanitize=float-divide-by-zero ແລະ -fsanitize=kernel-address. ສໍາລັບຢາຂ້າເຊື້ອໂລກເຫຼົ່ານີ້
ການ​ຟື້ນ​ຟູ​ຄວາມ​ຜິດ​ພາດ​ແມ່ນ​ໄດ້​ເປີດ​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​. -fsanitize-recover=ທັງໝົດ ແລະ
-fno-sanitize-recover=ທັງໝົດ ຍັງໄດ້ຮັບການຍອມຮັບ, ອະດີດເຮັດໃຫ້ການຟື້ນຕົວສໍາລັບທຸກຄົນ
ສຸຂາພິບານທີ່ສະຫນັບສະຫນູນມັນ, ສຸດທ້າຍປິດການໃຊ້ງານການຟື້ນຕົວສໍາລັບສຸຂາພິບານທັງຫມົດທີ່
ສະຫນັບສະຫນູນມັນ.

Syntax ໂດຍບໍ່ມີຄວາມຊັດເຈນ ເລືອກ ພາຣາມິເຕີຖືກປະຕິເສດ. ມັນເທົ່າກັບ

-fsanitize-recover=undefined,float-cast-overflow,float-divide-by-zero

ຄ້າຍຄືກັນ -fno-sanitize-ຟື້ນຕົວ ເທົ່າກັບ

-fno-sanitize-recover=undefined,float-cast-overflow,float-divide-by-zero

-fsanitize-undefined-trap-on-error
ໄດ້ -fsanitize-undefined-trap-on-error ທາງເລືອກສັ່ງໃຫ້ compiler ລາຍງານ
ພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດໂດຍໃຊ້ "__builtin_trap" ແທນທີ່ຈະເປັນຫ້ອງສະຫມຸດ "libubsan".
ປະໂຫຍດຂອງສິ່ງນີ້ແມ່ນວ່າຫ້ອງສະຫມຸດ "libubsan" ບໍ່ຈໍາເປັນແລະບໍ່ມີການເຊື່ອມໂຍງ
ໃນ, ດັ່ງນັ້ນນີ້ແມ່ນໃຊ້ໄດ້ເຖິງແມ່ນວ່າໃນສະພາບແວດລ້ອມເອກະລາດ.

-fcheck-pointer-bounds
ເປີດໃຊ້ເຄື່ອງມືກວດສອບ Pointer Bounds Checker. ແຕ່ລະເອກະສານອ້າງອີງຄວາມຊົງຈໍາແມ່ນເຄື່ອງມື
ກັບການກວດສອບຕົວຊີ້ທີ່ໃຊ້ສໍາລັບການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາຕໍ່ກັບຂອບເຂດທີ່ກ່ຽວຂ້ອງກັບສິ່ງນັ້ນ
ຕົວຊີ້.

ໃນປັດຈຸບັນມີພຽງແຕ່ການປະຕິບັດສໍາລັບ Intel MPX ທີ່ມີຢູ່, ດັ່ງນັ້ນ x86 ເປົ້າຫມາຍແລະ
-mmpx ຕ້ອງການເພື່ອເປີດໃຊ້ຄຸນສົມບັດນີ້. ເຄື່ອງມືທີ່ອີງໃສ່ MPX ຕ້ອງການ a
runtime library ເພື່ອເປີດໃຊ້ MPX ໃນຮາດແວແລະຈັດການສັນຍານການລະເມີດຂອບເຂດ. ໂດຍ
ຄ່າເລີ່ມຕົ້ນເມື່ອ -fcheck-pointer-bounds ແລະ -mmpx ທາງ ເລືອກ ໃນ ການ ນໍາ ໃຊ້ ເພື່ອ ເຊື່ອມ ຕໍ່ ໂຄງ ການ, ໄດ້
ຄົນຂັບ GCC ເຊື່ອມຕໍ່ກັບ libmpx ຫໍສະຫມຸດ runtime ແລະ libmpxwrappers ຫໍສະໝຸດ. ມັນ
ຍັງຜ່ານ '-z bndplt' ໄປຫາຕົວເຊື່ອມຕໍ່ໃນກໍລະນີທີ່ມັນສະຫນັບສະຫນູນທາງເລືອກນີ້ (ເຊິ່ງຖືກກວດສອບ.
ໃນ​ການ​ຕັ້ງ​ຄ່າ libmpx​)​. ໃຫ້ສັງເກດວ່າຕົວເຊື່ອມຕໍ່ຮຸ່ນເກົ່າອາດຈະບໍ່ສົນໃຈທາງເລືອກ. ຄໍາ
linker ບໍ່ສະຫນັບສະຫນູນ '-z bndplt' ທາງເລືອກ. ໂດຍບໍ່ມີການສະຫນັບສະຫນູນ '-z bndplt' ໃນ linker ທັງຫມົດ
ການໂທຫາຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວໄດ້ສູນເສຍຂອບເຂດການຫຼຸດຜ່ອນລະດັບການປົກປ້ອງໂດຍລວມ. ມັນ
ແນະນໍາໃຫ້ໃຊ້ຕົວເຊື່ອມຕໍ່ທີ່ມີການສະຫນັບສະຫນູນ '-z bndplt'. ໃນກໍລະນີທີ່ຕົວເຊື່ອມຕໍ່ດັ່ງກ່າວບໍ່ແມ່ນ
ສາມາດໃຊ້ໄດ້, ມັນແມ່ນແນະນໍາໃຫ້ໃຊ້ຢູ່ສະເຫມີ -static-libmpxwrappers ເພື່ອການປ້ອງກັນທີ່ດີກວ່າ
ລະດັບຫຼືການນໍາໃຊ້ -static ເພື່ອຫຼີກເວັ້ນການໂທຫາພາຍນອກກັບຫ້ອງສະຫມຸດແບບເຄື່ອນໄຫວຢ່າງສົມບູນ. MPX-
ເຄື່ອງມືໂດຍອີງໃສ່ອາດຈະຖືກນໍາໃຊ້ສໍາລັບການ debugging ແລະຍັງອາດຈະຖືກລວມເຂົ້າໃນການຜະລິດ
ລະຫັດເພື່ອເພີ່ມຄວາມປອດໄພຂອງໂປຣແກຣມ. ອີງຕາມການນໍາໃຊ້, ທ່ານອາດຈະແຕກຕ່າງກັນ
ຄວາມຕ້ອງການສໍາລັບຫ້ອງສະຫມຸດ runtime. ສະບັບປະຈຸບັນຂອງຫ້ອງສະຫມຸດເວລາແລ່ນ MPX
ແມ່ນຮັດກຸມຫຼາຍສໍາລັບການນໍາໃຊ້ເປັນເຄື່ອງມືແກ້ບັນຫາ. ການ​ນໍາ​ໃຊ້​ຫ້ອງ​ສະ​ຫມຸດ runtime MPX ຫມາຍ​ຄວາມ​ວ່າ​
- ຫົວຂໍ້. ເບິ່ງຕື່ມ -static-libmpx. ພຶດຕິກໍາຫ້ອງສະຫມຸດ runtime ສາມາດໄດ້ຮັບອິດທິພົນ
ການ​ນໍາ​ໃຊ້​ຕ່າງໆ​ 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
ສ້າງການກວດສອບຂອບເຂດຕົວຊີ້ສໍາລັບຕົວແປທີ່ມີປະເພດບໍ່ຄົບຖ້ວນ. ເປີດໃຊ້ໂດຍ
Default

-fchkp-narrow-bounds
ຂອບເຂດການຄວບຄຸມທີ່ໃຊ້ໂດຍ Pointer Bounds Checker ສໍາລັບຕົວຊີ້ໄປຫາຊ່ອງຂໍ້ມູນ. ຖ້າ
ແຄບແມ່ນເປີດໃຊ້ແລ້ວຂອບພາກສະຫນາມຖືກນໍາໃຊ້. ຖ້າບໍ່ດັ່ງນັ້ນ, ຂອບເຂດວັດຖຸຖືກໃຊ້.
ເບິ່ງ -fchkp-narrow-to-innermost-array ແລະ -fchkp-first-field-has-own-bounds.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-first-field-has-own-bounds
Forces Pointer Bounds Checker ເພື່ອໃຊ້ຂອບເຂດແຄບສໍາລັບທີ່ຢູ່ຂອງທໍາອິດ
ພາກສະຫນາມໃນໂຄງສ້າງ. ໂດຍຄ່າເລີ່ມຕົ້ນຕົວຊີ້ໄປຫາຊ່ອງຂໍ້ມູນທໍາອິດມີຂອບເຂດດຽວກັນ
ເປັນຕົວຊີ້ເຖິງໂຄງສ້າງທັງຫມົດ.

-fchkp-narrow-to-innermost-array
Forces Pointer Bounds Checker ເພື່ອໃຊ້ຂອບເຂດຂອງ arrays ຊັ້ນໃນສຸດໃນກໍລະນີຂອງ nested
ການເຂົ້າເຖິງ array static. ໂດຍຄ່າເລີ່ມຕົ້ນທາງເລືອກນີ້ຖືກປິດໃຊ້ງານແລະຂອບເຂດຂອງນອກທີ່ສຸດ
array ຖືກນໍາໃຊ້.

-fchkp-optimize
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບຕົວຊີ້ຕົວກວດສອບຂອບເຂດ. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ການເພີ່ມປະສິດທິພາບ
ລະດັບ -O, -O2, -O3.

-fchkp-use-fast-string-functions
ເປີດໃຊ້ການໃຊ້ງານ *_nobnd ເວີຊັນຂອງຟັງຊັນສະຕຣິງ (ບໍ່ສຳເນົາຂອບເຂດ) ໂດຍຕົວຊີ້
Bounds Checker. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-use-nochk-string-functions
ເປີດໃຊ້ການໃຊ້ງານ *_nochk ເວີຊັນຂອງຟັງຊັນສະຕຣິງ (ບໍ່ກວດສອບຂອບເຂດ) ໂດຍຕົວຊີ້
Bounds Checker. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-use-static-bounds
ອະນຸຍາດໃຫ້ຕົວກວດສອບຂອບເຂດຕົວຊີ້ເພື່ອສ້າງຂອບເຂດຄົງທີ່ຖືຂອບເຂດຄົງທີ່
ຕົວແປ. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-use-static-const-bounds
ໃຊ້ statically-initialized bounds ສໍາລັບຂອບເຂດຄົງທີ່ແທນທີ່ຈະສ້າງໃຫ້ເຂົາເຈົ້າແຕ່ລະຄົນ
ເວລາທີ່ເຂົາເຈົ້າຕ້ອງການ. ໂດຍຄ່າເລີ່ມຕົ້ນເປີດໃຊ້ງານເມື່ອ -fchkp-use-static-bounds ເປີດໃຊ້ງານ.

-fchkp-treat-zero-dynamic-size-as-infinite
ດ້ວຍຕົວເລືອກນີ້, ວັດຖຸທີ່ມີປະເພດບໍ່ສົມບູນທີ່ຂະໜາດທີ່ໄດ້ຮັບແບບໄດນາມິກແມ່ນສູນ
ຖືກປະຕິບັດວ່າເປັນຂະຫນາດທີ່ບໍ່ມີຂອບເຂດແທນໂດຍ Pointer Bounds Checker. ທາງເລືອກນີ້
ອາດຈະເປັນປະໂຫຍດຖ້າໂຄງການເຊື່ອມໂຍງກັບຫ້ອງສະຫມຸດທີ່ບໍ່ມີຂໍ້ມູນຂະຫນາດສໍາລັບບາງຄົນ
ສັນຍາລັກ. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-check-read
ແນະນຳຕົວກວດສອບຈຸດຜູກມັດຂອງຕົວຊີ້ເພື່ອສ້າງການກວດສອບສຳລັບການເຂົ້າເຖິງການອ່ານທັງໝົດຂອງໜ່ວຍຄວາມຈຳ.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-check-write
ແນະນຳຕົວກວດສອບຈຸດຜູກມັດຂອງຕົວຊີ້ເພື່ອສ້າງການກວດສອບສຳລັບການເຂົ້າເຖິງການຂຽນທັງໝົດໃນໜ່ວຍຄວາມຈຳ.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-store-bounds
ແນະນຳຕົວກວດສອບການຜູກມັດຕົວຊີ້ເພື່ອສ້າງຮ້ານຄ້າຂອບເຂດສຳລັບການຂຽນຕົວຊີ້.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-instrument-calls
ແນະນຳຕົວກວດສອບຈຸດຜູກມັດຕົວຊີ້ເພື່ອຜ່ານຂອບເຂດຕົວຊີ້ໄປຫາການໂທ. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-instrument-marked-only
ແນະນຳຕົວກວດສອບການຜູກມັດຕົວຊີ້ໄປຫາເຄື່ອງມືທີ່ເຮັດໜ້າທີ່ໝາຍດ້ວຍເຄື່ອງໝາຍເທົ່ານັ້ນ
"bnd_instrument" ຄຸນລັກສະນະ. ປິດການນຳໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fchkp-use-wrappers
ອະນຸຍາດໃຫ້ Pointer Bounds Checker ທົດແທນການໂທໄປຫາຟັງຊັນໃນຕົວດ້ວຍການໂທຫາ
ຟັງຊັນ wrapper. ເມື່ອ​ໃດ​ -fchkp-use-wrappers ຖືກນໍາໃຊ້ເພື່ອເຊື່ອມຕໍ່ໂຄງການ, ໄດເວີ GCC
ເຊື່ອມຕໍ່ອັດຕະໂນມັດຕໍ່ກັບ libmpxwrappers. ເບິ່ງຕື່ມ -static-libmpxwrappers. ເປີດໃຊ້ແລ້ວ
ໂດຍຄ່າເລີ່ມຕົ້ນ

-fdump-final-insns[=ເອກະສານ]
ຖິ້ມການເປັນຕົວແທນພາຍໃນສຸດທ້າຍ (RTL) ໄປ ເອກະສານ. ຖ້າການໂຕ້ຖຽງທາງເລືອກແມ່ນ
ຖືກລະເວັ້ນ (ຫຼືຖ້າ ເອກະສານ ແມ່ນ "."), ຊື່ຂອງໄຟລ໌ dump ຖືກກໍານົດໂດຍການເພີ່ມເຕີມ
".gkd" ໃສ່ຊື່ໄຟລ໌ຜົນຜະລິດການລວບລວມ.

-fcompare-debug[=ເລືອກ]
ຖ້າບໍ່ມີຂໍ້ຜິດພາດເກີດຂື້ນໃນລະຫວ່າງການລວບລວມ, ດໍາເນີນການລວບລວມຂໍ້ມູນເປັນຄັ້ງທີສອງ, ເພີ່ມ ເລືອກ ແລະ
-fcompare-debug-ວິນາທີ ການໂຕ້ຖຽງທີ່ຜ່ານໄປຫາການລວບລວມທີສອງ. ຖິ້ມ
ການເປັນຕົວແທນພາຍໃນສຸດທ້າຍໃນການລວບລວມທັງສອງ, ແລະພິມຂໍ້ຜິດພາດຖ້າພວກເຂົາແຕກຕ່າງກັນ.

ຖ້າເຄື່ອງໝາຍເທົ່າທຽມກັນຖືກລະເວັ້ນ, ຄ່າເລີ່ມຕົ້ນ -gtoggle ຖືກນໍາໃຊ້.

ສະພາບແວດລ້ອມປ່ຽນແປງໄດ້ GCC_COMPARE_DEBUG, ຖ້າກໍານົດ, ບໍ່ຫວ່າງເປົ່າແລະບໍ່ສູນ,
implicitly ເປີດໃຊ້ -fcompare-debugທີ່ຢູ່ ຖ້າຫາກວ່າ GCC_COMPARE_DEBUG ຖືກກໍານົດເປັນສະຕຣິງ
ເລີ່ມຕົ້ນດ້ວຍ dash, ຫຼັງຈາກນັ້ນມັນຖືກນໍາໃຊ້ສໍາລັບ ເລືອກ, ຖ້າບໍ່ດັ່ງນັ້ນຄ່າເລີ່ມຕົ້ນ -gtoggle is
ໃຊ້ແລ້ວ.

-fcompare-debug=, ມີເຄື່ອງຫມາຍເທົ່າທຽມກັນແຕ່ບໍ່ມີ ເລືອກ, ເທົ່າກັບ
-fno-compare-debug, ເຊິ່ງປິດການຖິ້ມຂີ້ເຫຍື້ອຂອງຕົວແທນສຸດທ້າຍແລະ
ການລວບລວມທີສອງ, ປ້ອງກັນເຖິງແມ່ນວ່າ GCC_COMPARE_DEBUG ຈາກ​ການ​ມີ​ຜົນ​ກະ​ທົບ​.

ເພື່ອກວດສອບການຄຸ້ມຄອງຢ່າງເຕັມທີ່ໃນລະຫວ່າງ -fcompare-debug ການ​ທົດ​ສອບ​, ກໍາ​ນົດ​ GCC_COMPARE_DEBUG ເວົ້າ
-fcompare-debug-not-overridden, ເຊິ່ງ GCC ປະຕິເສດວ່າເປັນທາງເລືອກທີ່ບໍ່ຖືກຕ້ອງໃນຕົວຈິງໃດໆ
ການລວບລວມ (ແທນທີ່ຈະກ່ວາການປຸງແຕ່ງກ່ອນ, ການປະກອບຫຼືການເຊື່ອມໂຍງ). ເພື່ອໃຫ້ໄດ້ຮັບພຽງແຕ່ການເຕືອນໄພ,
ຕັ້ງ GCC_COMPARE_DEBUG to -w%n-fcompare-debug ບໍ່ ຖືກຍົກເລີກ ຈະ​ເຮັດ.

-fcompare-debug-ວິນາທີ
ທາງເລືອກນີ້ຖືກສົ່ງຜ່ານ implicitly ກັບ compiler ສໍາລັບການລວບລວມທີສອງຮ້ອງຂໍ
by -fcompare-debug, ພ້ອມກັບທາງເລືອກໃນການປິດສຽງການເຕືອນ, ແລະການລະເວັ້ນທາງເລືອກອື່ນ
ທີ່ຈະເຮັດໃຫ້ເກີດຜົນຂ້າງຄຽງຂອງ compiler outputs ກັບໄຟລ໌ຫຼືຜົນຜະລິດມາດຕະຖານ.
ໄຟລ໌ Dump ແລະໄຟລ໌ຊົ່ວຄາວທີ່ເກັບຮັກສາໄວ້ໄດ້ຖືກປ່ຽນຊື່ເພື່ອໃຫ້ມີ ".gk"
ສ່ວນຂະຫຍາຍເພີ່ມເຕີມໃນລະຫວ່າງການລວບລວມທີສອງ, ເພື່ອຫຼີກເວັ້ນການຂຽນທັບເຫຼົ່ານັ້ນ
ສ້າງຂຶ້ນໂດຍຄັ້ງທໍາອິດ.

ໃນ​ເວ​ລາ​ທີ່​ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ສົ່ງ​ຕໍ່​ກັບ​ໄດ​ເວີ compiler​, ມັນ​ເຮັດ​ໃຫ້​ເກີດ​ການ​ ຄັ້ງທໍາອິດ ການລວບລວມກັບ
ຂ້າມໄປ, ເຊິ່ງເຮັດໃຫ້ມັນເປັນປະໂຫຍດສໍາລັບການອື່ນນອກຈາກການ debugging compiler ທີ່ເຫມາະສົມ.

-feliminate-dwarf2-dups
ບີບອັດຂໍ້ມູນການດີບັກ DWARF 2 ໂດຍການກໍາຈັດຂໍ້ມູນທີ່ຊໍ້າກັນກ່ຽວກັບ
ແຕ່ລະສັນຍາລັກ. ຕົວເລືອກນີ້ເຮັດໃຫ້ຄວາມຮູ້ສຶກພຽງແຕ່ເມື່ອສ້າງການດີບັກ DWARF 2
ຂໍ້ມູນກັບ -gdwarf-2.

-femit-struct-debug-baseonly
ປ່ອຍຂໍ້ມູນການດີບັ໊ກສໍາລັບປະເພດໂຄງສ້າງທີ່ຄ້າຍຄືເມື່ອຊື່ພື້ນຖານຂອງ
ໄຟລ໌ແຫຼ່ງການລວບລວມກົງກັບຊື່ພື້ນຖານຂອງໄຟລ໌ທີ່ໂຄງສ້າງຖືກກໍານົດ.

ຕົວເລືອກນີ້ຫຼຸດລົງຢ່າງຫຼວງຫຼາຍຂອງຂໍ້ມູນ debugging, ແຕ່ວ່າຢູ່ທີ່
ການສູນເສຍທີ່ອາດເກີດຂຶ້ນຢ່າງຫຼວງຫຼາຍໃນຂໍ້ມູນປະເພດຕໍ່ກັບຕົວດີບັກ. ເບິ່ງ
-femit-struct-debug-ຫຼຸດລົງ ສໍາລັບທາງເລືອກທີ່ຮຸກຮານຫນ້ອຍ. ເບິ່ງ
-femit-struct-debug-ລາຍລະອຽດ ສໍາລັບການຄວບຄຸມລາຍລະອຽດເພີ່ມເຕີມ.

ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບ DWARF 2 ເທົ່ານັ້ນ.

-femit-struct-debug-ຫຼຸດລົງ
ປ່ອຍຂໍ້ມູນການດີບັ໊ກສໍາລັບປະເພດໂຄງສ້າງທີ່ຄ້າຍຄືເມື່ອຊື່ພື້ນຖານຂອງ
ໄຟລ໌ແຫຼ່ງການລວບລວມກົງກັບຊື່ພື້ນຖານຂອງໄຟລ໌ທີ່ປະເພດຖືກກໍານົດ,
ເວັ້ນເສຍແຕ່ວ່າໂຄງສ້າງແມ່ນແມ່ແບບຫຼືກໍານົດຢູ່ໃນສ່ວນຫົວຂອງລະບົບ.

ທາງເລືອກນີ້ຫຼຸດລົງຢ່າງຫຼວງຫຼາຍຂອງຂໍ້ມູນ debugging, ມີບາງ
ການສູນເສຍທີ່ອາດຈະເກີດຂື້ນໃນຂໍ້ມູນປະເພດຕໍ່ກັບຕົວດີບັກ. ເບິ່ງ -femit-struct-debug-baseonly
ສໍາລັບທາງເລືອກທີ່ຮຸກຮານຫຼາຍ. ເບິ່ງ -femit-struct-debug-ລາຍລະອຽດ ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ
ຄວບຄຸມ.

ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບ DWARF 2 ເທົ່ານັ້ນ.

-femit-struct-debug-ລາຍລະອຽດ[=ລາຍຊື່ສະເພາະ]
ລະບຸປະເພດໂຄງສ້າງທີ່ compiler ສ້າງຂໍ້ມູນດີບັກ. ໄດ້
ຈຸດປະສົງແມ່ນເພື່ອຫຼຸດຜ່ອນຂໍ້ມູນການດີບັກໂຄງສ້າງທີ່ຊ້ໍາກັນລະຫວ່າງໄຟລ໌ວັດຖຸທີ່ແຕກຕ່າງກັນ
ພາຍໃນໂຄງການດຽວກັນ.

ທາງເລືອກນີ້ແມ່ນສະບັບລາຍລະອຽດຂອງ -femit-struct-debug-ຫຼຸດລົງ ແລະ
-femit-struct-debug-baseonly, ເຊິ່ງໃຫ້ບໍລິການສໍາລັບຄວາມຕ້ອງການຫຼາຍທີ່ສຸດ.

ຂໍ້ມູນຈໍາເພາະມີ syntax [dir:|ind:][ຄໍາສັ່ງ:|gen:](ໃດ|sys|ຖານ|none)

ຄໍາທໍາອິດທາງເລືອກຈໍາກັດການກໍານົດສະເພາະກັບໂຄງສ້າງທີ່ຖືກນໍາໃຊ້ໂດຍກົງ
(dir:) ຫຼື​ໃຊ້​ໂດຍ​ທາງ​ອ້ອມ (ind:). ປະເພດໂຄງສ້າງແມ່ນໃຊ້ໂດຍກົງເມື່ອມັນເປັນປະເພດ
ຂອງຕົວແປ, ສະມາຊິກ. ການນໍາໃຊ້ທາງອ້ອມເກີດຂື້ນໂດຍຜ່ານຕົວຊີ້ໄປຫາໂຄງສ້າງ. ນັ້ນ​ແມ່ນ,
ໃນເວລາທີ່ການນໍາໃຊ້ໂຄງສ້າງທີ່ບໍ່ຄົບຖ້ວນແມ່ນຖືກຕ້ອງ, ການນໍາໃຊ້ແມ່ນທາງອ້ອມ. ຕົວຢ່າງແມ່ນ ໂຄງສ້າງ
ຫນຶ່ງ ໂດຍກົງ; ໂຄງສ້າງ ສອງ * ທາງອ້ອມ;.

ຄໍາທີ່ສອງທາງເລືອກຈໍາກັດການກໍານົດສະເພາະກັບໂຄງສ້າງທໍາມະດາ (ຄໍາສັ່ງ:) ຫຼື
ໂຄງສ້າງທົ່ວໄປ (gen:). ໂຄງສ້າງທົ່ວໄປແມ່ນສັບສົນເລັກນ້ອຍເພື່ອອະທິບາຍ. ສໍາລັບ C++,
ເຫຼົ່ານີ້ແມ່ນຄວາມຊ່ຽວຊານທີ່ບໍ່ຊັດເຈນຂອງຫ້ອງຮຽນແມ່ແບບ, ຫຼືຫ້ອງຮຽນທີ່ບໍ່ແມ່ນແມ່ແບບ
ພາຍໃນຂ້າງເທິງ. ພາສາການຂຽນໂປລແກລມອື່ນມີ generics, ແຕ່
-femit-struct-debug-ລາຍລະອຽດ ຍັງບໍ່ທັນໄດ້ປະຕິບັດໃຫ້ເຂົາເຈົ້າ.

ຄໍາທີສາມກໍານົດໄຟລ໌ຕົ້ນສະບັບສໍາລັບໂຄງສ້າງເຫຼົ່ານັ້ນທີ່ compiler
ຄວນປ່ອຍຂໍ້ມູນດີບັກ. ຄຸນຄ່າ none ແລະ ໃດ ມີ​ຄວາມ​ຫມາຍ​ປົກ​ກະ​ຕິ​. ໄດ້
ມູນຄ່າ ຖານ ຫມາຍຄວາມວ່າພື້ນຖານຂອງຊື່ຂອງໄຟລ໌ໃນການປະກາດປະເພດ
ປາກົດຕ້ອງກົງກັບຖານຂອງຊື່ຂອງໄຟລ໌ການລວບລວມຕົ້ນຕໍ. ໃນທາງປະຕິບັດ,
ນີ້ຫມາຍຄວາມວ່າໃນເວລາທີ່ລວບລວມ foo.c, ຂໍ້ມູນ debug ຖືກສ້າງຂຶ້ນສໍາລັບປະເພດ
ປະກາດໃນເອກະສານນັ້ນແລະ foo.h, ແຕ່ບໍ່ແມ່ນໄຟລ໌ຫົວອື່ນ. ມູນຄ່າ sys ວິທີການ
ປະເພດເຫຼົ່ານັ້ນທີ່ພໍໃຈ ຖານ ຫຼືປະກາດໃນສ່ວນຫົວຂອງລະບົບ ຫຼື compiler.

ທ່ານອາດຈະຈໍາເປັນຕ້ອງໄດ້ທົດລອງເພື່ອກໍານົດການຕັ້ງຄ່າທີ່ດີທີ່ສຸດສໍາລັບຄໍາຮ້ອງສະຫມັກຂອງທ່ານ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -femit-struct-debug-detailed=ທັງໝົດ.

ຕົວເລືອກນີ້ໃຊ້ໄດ້ກັບ DWARF 2 ເທົ່ານັ້ນ.

-fno-merge-debug-strings
ຊີ້ບອກຕົວເຊື່ອມຕໍ່ເພື່ອບໍ່ໃຫ້ສາຍເຂົ້າກັນເຂົ້າກັນໃນຂໍ້ມູນການດີບັກທີ່ເປັນ
ຄືກັນໃນໄຟລ໌ວັດຖຸທີ່ແຕກຕ່າງກັນ. ການຜະສົມຜະສານບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນໂດຍຜູ້ປະກອບທັງຫມົດຫຼື
ຕົວເຊື່ອມຕໍ່. ການລວມຕົວຫຼຸດລົງຂະຫນາດຂອງຂໍ້ມູນ debug ໃນໄຟລ໌ຜົນຜະລິດຢູ່ທີ່
ຄ່າໃຊ້ຈ່າຍຂອງການເພີ່ມເວລາການປຸງແຕ່ງການເຊື່ອມຕໍ່. ການລວມເຂົ້າກັນແມ່ນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fdebug-prefix-map=ອາຍຸ=ໃຫມ່
ເມື່ອລວບລວມໄຟລ໌ຢູ່ໃນໄດເລກະທໍລີ ອາຍຸ, ບັນທຶກຂໍ້ມູນ debugging ອະທິບາຍໃຫ້ເຂົາເຈົ້າເປັນ
in ໃຫມ່ ແທນທີ່ຈະເປັນ.

-fno-dwarf2-cfi-asm
ປ່ອຍຂໍ້ມູນ DWARF 2 unwind ເປັນ compiler ສ້າງພາກສ່ວນ ".eh_frame" ແທນທີ່ຈະໃຊ້
GAS ".cfi_*" ຄໍາແນະນໍາ.

-p ສ້າງລະຫັດເພີ່ມເຕີມເພື່ອຂຽນຂໍ້ມູນໂປຣໄຟລ໌ທີ່ເຫມາະສົມສໍາລັບໂຄງການການວິເຄາະ
prof. ທ່ານຕ້ອງໃຊ້ຕົວເລືອກນີ້ໃນເວລາລວບລວມໄຟລ໌ແຫຼ່ງທີ່ທ່ານຕ້ອງການຂໍ້ມູນ,
ແລະທ່ານຍັງຕ້ອງໃຊ້ມັນໃນເວລາເຊື່ອມຕໍ່.

- ໜ້າ ສ້າງລະຫັດເພີ່ມເຕີມເພື່ອຂຽນຂໍ້ມູນໂປຣໄຟລ໌ທີ່ເຫມາະສົມສໍາລັບໂຄງການການວິເຄາະ
gprof. ທ່ານຕ້ອງໃຊ້ຕົວເລືອກນີ້ໃນເວລາລວບລວມໄຟລ໌ແຫຼ່ງທີ່ທ່ານຕ້ອງການຂໍ້ມູນ,
ແລະທ່ານຍັງຕ້ອງໃຊ້ມັນໃນເວລາເຊື່ອມຕໍ່.

-Q ເຮັດໃຫ້ compiler ພິມອອກແຕ່ລະຊື່ຟັງຊັນຍ້ອນວ່າມັນຖືກລວບລວມ, ແລະພິມບາງ
ສະຖິຕິກ່ຽວກັບແຕ່ລະ pass ເມື່ອມັນສໍາເລັດ.

-ftime ລາຍ​ງານ​
ເຮັດໃຫ້ compiler ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບເວລາທີ່ບໍລິໂພກໂດຍແຕ່ລະ pass ໃນເວລາທີ່ມັນ
ສຳ ເລັດຮູບ.

-fmem ບົດລາຍງານ
ເຮັດໃຫ້ compiler ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບການຈັດສັນຫນ່ວຍຄວາມຈໍາຖາວອນໃນເວລາທີ່ມັນ
ສຳ ເລັດຮູບ.

-fmem-report-wpa
ເຮັດໃຫ້ compiler ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບການຈັດສັນຫນ່ວຍຄວາມຈໍາຖາວອນສໍາລັບ WPA
ໄລຍະເທົ່ານັ້ນ.

-fpre-ipa-mem-ລາຍງານ
-fpost-ipa-mem-report
ເຮັດໃຫ້ compiler ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບການຈັດສັນຫນ່ວຍຄວາມຈໍາຖາວອນກ່ອນຫຼື
ຫຼັງຈາກການເພີ່ມປະສິດທິພາບ interprocedural.

-fprofile-report
ເຮັດໃຫ້ compiler ພິມສະຖິຕິບາງຢ່າງກ່ຽວກັບຄວາມສອດຄ່ອງຂອງ profile (ຄາດຄະເນ).
ແລະຜົນກະທົບຂອງ passes ບຸກຄົນ.

-fstack ການ​ນໍາ​ໃຊ້​
ເຮັດໃຫ້ compiler output ຂໍ້ມູນການນໍາໃຊ້ stack ສໍາລັບໂຄງການ, ຕາມການທໍາງານ
ພື້ນຖານ. ຊື່ໄຟລ໌ສໍາລັບການ dump ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ ຊູ ການ ຊື່ແທນ. ຊື່ແທນ is
ສ້າງຂຶ້ນຈາກຊື່ຂອງໄຟລ໌ຜົນຜະລິດ, ຖ້າລະບຸຢ່າງຊັດເຈນ ແລະມັນບໍ່ແມ່ນ
ສາມາດປະຕິບັດໄດ້, ຖ້າບໍ່ດັ່ງນັ້ນມັນເປັນຊື່ພື້ນຖານຂອງໄຟລ໌ແຫຼ່ງ. ການເຂົ້າແມ່ນປະກອບດ້ວຍ
ສາມ​ພາກ​ສະ​ຫນາມ​:

* ຊື່​ຂອງ​ຫນ້າ​ທີ່​.

* ຈໍານວນຂອງ bytes.

* ຫນຶ່ງຫຼືຫຼາຍຄຸນສົມບັດ: "static", "dynamic", "bounded".

ຄຸນສົມບັດ "ສະຖິດ" ຫມາຍຄວາມວ່າຟັງຊັນຈັດການ stack ຄົງທີ່: a
ຈໍາ​ນວນ​ຄົງ​ທີ່​ຂອງ​ໄບ​ຕ​໌​ແມ່ນ​ໄດ້​ຖືກ​ຈັດ​ສັນ​ສໍາ​ລັບ​ກອບ​ໃນ​ການ​ເຂົ້າ​ຫນ້າ​ທີ່​ແລະ​ປ່ອຍ​ອອກ​ມາ​ເມື່ອ​
function ອອກ; ບໍ່​ມີ​ການ​ປັບ stack ແມ່ນ​ເຮັດ​ໄດ້​ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​ໃນ​ຫນ້າ​ທີ່​. ທີ່​ສອງ
ຊ່ອງຂໍ້ມູນແມ່ນຕົວເລກຄົງທີ່ຂອງໄບຕ໌ນີ້.

ຄຸນສົມບັດ "dynamic" ຫມາຍຄວາມວ່າຫນ້າທີ່ຈັດການ stack ແບບເຄື່ອນໄຫວ: ໃນ
ນອກເຫນືອໄປຈາກການຈັດສັນ static ທີ່ອະທິບາຍຂ້າງເທິງ, ການປັບ stack ແມ່ນເຮັດຢູ່ໃນ
ຮ່າງກາຍຂອງຟັງຊັນ, ຕົວຢ່າງເພື່ອຍູ້/ປ໊ອບອາກິວເມັນຮອບການໂທຟັງຊັນ. ຖ້າ
ຄຸນ​ນະ​ສົມ​ບັດ "bounded​" ແມ່ນ​ຍັງ​ປະ​ຈຸ​ບັນ​, ຈໍາ​ນວນ​ຂອງ​ການ​ປັບ​ຄ່າ​ເຫຼົ່າ​ນີ້​ແມ່ນ bounded ຢູ່​ທີ່​
ລວບລວມເວລາແລະພາກສະຫນາມທີສອງແມ່ນຂອບເຂດເທິງຂອງຈໍານວນທັງຫມົດຂອງ stack ທີ່ໃຊ້
ໂດຍຫນ້າທີ່. ຖ້າມັນບໍ່ມີ, ຈໍານວນການປັບຕົວເຫຼົ່ານີ້ບໍ່ມີຂອບເຂດ
ໃນເວລາລວບລວມແລະພາກສະຫນາມທີສອງພຽງແຕ່ເປັນຕົວແທນຂອງພາກສ່ວນທີ່ຖືກຜູກມັດ.

-fprofile-arcs
ເພີ່ມລະຫັດເພື່ອໃຫ້ໂປຣແກມໄຫລໄປ arcs ແມ່ນເຄື່ອງມື. ໃນ​ລະ​ຫວ່າງ​ການ​ປະ​ຕິ​ບັດ​ໂຄງ​ການ​
ບັນທຶກຈໍານວນຄັ້ງທີ່ແຕ່ລະສາຂາແລະການໂທຖືກປະຕິບັດແລະຈໍານວນຄັ້ງທີ່ມັນຖືກປະຕິບັດ
ຫຼືກັບຄືນ. ເມື່ອໂຄງການທີ່ລວບລວມອອກມາ, ມັນຈະບັນທຶກຂໍ້ມູນນີ້ໄວ້ໃນໄຟລ໌ທີ່ເອີ້ນວ່າ
auxname.gcda ສໍາລັບແຕ່ລະໄຟລ໌ແຫຼ່ງ. ຂໍ້ມູນດັ່ງກ່າວອາດຈະຖືກໃຊ້ເພື່ອແນໃສ່ໂປຣໄຟລ໌
ການເພີ່ມປະສິດທິພາບ (-fbranch-ຄວາມເປັນໄປໄດ້), ຫຼືສໍາລັບການວິເຄາະການຄຸ້ມຄອງການທົດສອບ
(-ftest-ການ​ຄຸ້ມ​ຄອງ​). ແຕ່ລະໄຟລ໌ວັດຖຸ ຊື່ແທນ ແມ່ນຜະລິດຈາກຊື່ຂອງ
ໄຟລ໌ຜົນຜະລິດ, ຖ້າລະບຸຢ່າງຊັດເຈນແລະມັນບໍ່ແມ່ນການປະຕິບັດສຸດທ້າຍ, ຖ້າບໍ່ດັ່ງນັ້ນມັນ
ແມ່ນຊື່ພື້ນຖານຂອງໄຟລ໌ແຫຼ່ງ. ໃນທັງສອງກໍລະນີ, ຄໍາຕໍ່ທ້າຍໃດໆຖືກໂຍກຍ້າຍອອກ (ຕົວຢ່າງ
foo.gcda ສໍາລັບການປ້ອນໄຟລ໌ dir/foo.c, ຫຼື dir/foo.gcda ສໍາ​ລັບ​ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​ລະ​ບຸ​ໄວ້​ເປັນ​ -o
dir/foo.o).

-- ການຄຸ້ມຄອງ
ທາງເລືອກນີ້ຖືກນໍາໃຊ້ເພື່ອລວບລວມແລະເຊື່ອມຕໍ່ລະຫັດເຄື່ອງມືສໍາລັບການວິເຄາະການຄຸ້ມຄອງ. ໄດ້
ທາງເລືອກແມ່ນຄໍາສັບຄ້າຍຄື -fprofile-arcs -ftest-ການ​ຄຸ້ມ​ຄອງ​ (ເມື່ອລວບລວມ) ແລະ -lgcov
(ເມື່ອເຊື່ອມຕໍ່). ເບິ່ງເອກະສານສໍາລັບທາງເລືອກເຫຼົ່ານັ້ນສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.

* ລວບລວມໄຟລ໌ແຫຼ່ງທີ່ມີ -fprofile-arcs ບວກກັບການເພີ່ມປະສິດທິພາບແລະການສ້າງລະຫັດ
ທາງເລືອກ. ສໍາລັບການວິເຄາະການຄຸ້ມຄອງການທົດສອບ, ໃຊ້ເພີ່ມເຕີມ -ftest-ການ​ຄຸ້ມ​ຄອງ​ ທາງເລືອກ.
ທ່ານບໍ່ຈໍາເປັນຕ້ອງ profile ທຸກໄຟລ໌ແຫຼ່ງໃນໂຄງການ.

* ເຊື່ອມຕໍ່ໄຟລ໌ວັດຖຸຂອງທ່ານກັບ -lgcov or -fprofile-arcs (ອັນສຸດທ້າຍຫມາຍເຖິງ
ອະດີດ).

* ດໍາ​ເນີນ​ການ​ໂຄງ​ການ​ກ່ຽວ​ກັບ​ວຽກ​ງານ​ຕົວ​ແທນ​ເພື່ອ​ສ້າງ profile arc ໄດ້​
ຂໍ້ມູນ. ອັນນີ້ອາດຈະຖືກເຮັດຊ້ຳຫຼາຍຄັ້ງ. ທ່ານສາມາດດໍາເນີນການພ້ອມກັນ
ຕົວ ຢ່າງ ຂອງ ໂຄງ ການ ຂອງ ທ່ານ, ແລະ ສະ ຫນອງ ໃຫ້ ລະ ບົບ ໄຟລ ໌ ສະ ຫນັບ ສະ ຫນູນ ການ locking, ໄດ້
ໄຟລ໌ຂໍ້ມູນຈະຖືກປັບປຸງຢ່າງຖືກຕ້ອງ. ນອກຈາກນີ້ "ສ້ອມ" ໂທຖືກກວດພົບແລະ
ຈັດການຢ່າງຖືກຕ້ອງ (ການນັບສອງເທົ່າຈະບໍ່ເກີດຂຶ້ນ).

* ສໍາລັບການເພີ່ມປະສິດທິພາບຂອງ profile-directed, ລວບລວມໄຟລ໌ຕົ້ນສະບັບອີກເທື່ອຫນຶ່ງດ້ວຍອັນດຽວກັນ
ການເພີ່ມປະສິດທິພາບແລະທາງເລືອກການຜະລິດລະຫັດບວກ -fbranch-ຄວາມເປັນໄປໄດ້.

* ສໍາລັບການວິເຄາະການຄຸ້ມຄອງການທົດສອບ, ການນໍາໃຊ້ gcov ເພື່ອຜະລິດຂໍ້ມູນທີ່ສາມາດອ່ານໄດ້ຂອງມະນຸດຈາກ
ໄດ້ .gcno ແລະ .gcda ໄຟລ໌. ອ້າງເຖິງ gcov ເອກະສານເພີ່ມເຕີມ
ຂໍ້ມູນຂ່າວສານ.

ກັບ -fprofile-arcs, ສໍາລັບແຕ່ລະຫນ້າທີ່ຂອງໂປຼແກຼມຂອງທ່ານ GCC ສ້າງການໄຫຼຂອງໂປຼແກຼມ
graph, ຫຼັງຈາກນັ້ນຊອກຫາຕົ້ນໄມ້ spanning ສໍາລັບເສັ້ນສະແດງ. ພຽງແຕ່ arcs ທີ່ບໍ່ມີຢູ່ໃນ
spanning tree ຕ້ອງໄດ້ຮັບການເຄື່ອງມື: compiler ເພີ່ມລະຫັດເພື່ອນັບຈໍານວນຂອງ
ເວ ລາ ທີ່ arcs ເຫຼົ່າ ນີ້ ແມ່ນ ປະ ຕິ ບັດ. ເມື່ອເສັ້ນໂຄ້ງແມ່ນທາງອອກດຽວ ຫຼືທາງເຂົ້າເທົ່ານັ້ນ
ຕັນ, ລະຫັດເຄື່ອງມືສາມາດຖືກເພີ່ມໃສ່ບລັອກ; ຖ້າບໍ່ດັ່ງນັ້ນ, ພື້ນຖານໃຫມ່
ບລັອກຕ້ອງຖືກສ້າງຂື້ນເພື່ອຖືລະຫັດເຄື່ອງມື.

-ftest-ການ​ຄຸ້ມ​ຄອງ​
ຜະລິດເອກະສານບັນທຶກທີ່ gcov code-coverage utility ສາມາດໃຊ້ເພື່ອສະແດງໂປຼແກຼມ
ການຄຸ້ມຄອງ. ໄຟລ໌ບັນທຶກຂອງແຕ່ລະແຫຼ່ງແມ່ນເອີ້ນວ່າ auxname.gcno. ອ້າງອີງເຖິງ
-fprofile-arcs ທາງເລືອກຂ້າງເທິງສໍາລັບຄໍາອະທິບາຍຂອງ ຊື່ແທນ ແລະຄໍາແນະນໍາກ່ຽວກັບວິທີການ
ສ້າງຂໍ້ມູນການຄຸ້ມຄອງການທົດສອບ. ຂໍ້​ມູນ​ການ​ຄຸ້ມ​ຄອງ​ກົງ​ກັບ​ໄຟລ​໌​ແຫຼ່ງ​ທີ່​ໃກ້​ຊິດ​ຫຼາຍ​ຖ້າ​ຫາກ​ວ່າ​
ທ່ານບໍ່ເພີ່ມປະສິດທິພາບ.

-fdbg-cnt-list
ພິມຊື່ ແລະ Counter ຜູກມັດດ້ານເທິງສໍາລັບຕົວນັບການດີບັກທັງໝົດ.

-fdbg-cnt=ບັນຊີລາຍການຕ້ານມູນຄ່າ
ຕັ້ງຄ່າຕົວຕ້ານການດີບັ໊ກພາຍໃນຂອບເທິງ. ບັນຊີລາຍການຕ້ານມູນຄ່າ ແມ່ນເຄື່ອງໝາຍຈຸດທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດ
ລາຍຊື່ຂອງ ຊື່:ມູນຄ່າ ຄູ່ທີ່ກໍານົດຂອບເຂດເທິງຂອງແຕ່ລະຕົວຕ້ານການດີບັກ ຊື່ to
ມູນຄ່າ. ຕົວນັບການດີບັກທັງໝົດມີຂອບເທິງຂອງ "UINT_MAX"; ດັ່ງນັ້ນ "dbg_cnt"
ກັບຄືນຄວາມຈິງສະເໝີ ເວັ້ນເສຍແຕ່ວ່າຂອບເຂດເທິງຈະຖືກຕັ້ງໂດຍຕົວເລືອກນີ້. ຕົວຢ່າງ, ກັບ
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" ກັບຄືນຄວາມຈິງພຽງແຕ່ສໍາລັບ 10 ທໍາອິດ
ຄຳຮຽກຮ້ອງ.

-fenable-ປະເພດ-ຜ່ານ
-fdisable-ປະເພດ-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
ນີ້​ແມ່ນ​ຊຸດ​ຂອງ​ທາງ​ເລືອກ​ທີ່​ຖືກ​ນໍາ​ໃຊ້​ເພື່ອ​ຢ່າງ​ຊັດ​ເຈນ​ປິດ​ການ​ທໍາ​ງານ / ເຮັດ​ໃຫ້​ເຫມາະ​ສົມ​
ຜ່ານ. ຕົວເລືອກເຫຼົ່ານີ້ແມ່ນມີຈຸດປະສົງເພື່ອໃຊ້ສໍາລັບການດີບັກ GCC. ຜູ້ໃຊ້ Compiler ຄວນ
ໃຊ້ຕົວເລືອກປົກກະຕິສໍາລັບການເປີດ/ປິດການໃຊ້ງານບັດຜ່ານແທນ.

-fdisable-ipa-ຜ່ານ
ປິດການນຳໃຊ້ບັດ IPA ຜ່ານ. ຜ່ານ ແມ່ນຊື່ຜ່ານ. ຖ້າຜ່ານທາງດຽວກັນແມ່ນສະຖິຕິ
invoked ໃນ compiler ຫຼາຍຄັ້ງ, ຊື່ pass ຄວນຖືກຕໍ່ທ້າຍດ້ວຍ a
ເລກລໍາດັບເລີ່ມຕົ້ນຈາກ 1.

-fdisable-rtl-ຜ່ານ
-fdisable-rtl-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
ປິດການໃຊ້ງານ RTL pass ຜ່ານ. ຜ່ານ ແມ່ນຊື່ຜ່ານ. ຖ້າຜ່ານທາງດຽວກັນແມ່ນສະຖິຕິ
invoked ໃນ compiler ຫຼາຍຄັ້ງ, ຊື່ pass ຄວນຖືກຕໍ່ທ້າຍດ້ວຍ a
ເລກລໍາດັບເລີ່ມຕົ້ນຈາກ 1. ບັນຊີລາຍຊື່ໄລຍະ ແມ່ນບັນຊີລາຍຊື່ທີ່ຂັ້ນດ້ວຍເຄື່ອງໝາຍຈຸດ
ຊ່ວງຟັງຊັນ ຫຼືຊື່ຕົວປະກອບ. ແຕ່ລະໄລຍະແມ່ນຄູ່ຕົວເລກທີ່ແຍກອອກດ້ວຍ a
ຈໍ້າສອງເມັດ. ໄລຍະແມ່ນລວມຢູ່ໃນທັງສອງສົ້ນ. ຖ້າໄລຍະແມ່ນເລັກນ້ອຍ, ຕົວເລກ
ຄູ່ສາມາດງ່າຍເປັນຕົວເລກດຽວ. ຖ້າຟັງຊັນຂອງ call graph node's
uid ຕົກຢູ່ໃນຂອບເຂດທີ່ລະບຸໄວ້, ໄດ້ ຜ່ານ ແມ່ນພິການສໍາລັບການນັ້ນ
ໜ້າ ທີ່. ທ uid ແມ່ນສະແດງຢູ່ໃນຫົວຂໍ້ຟັງຊັນຂອງໄຟລ໌ dump, ແລະ pass
ຊື່ສາມາດຖືກ dumped ໂດຍໃຊ້ທາງເລືອກ -fdump-ຜ່ານ.

-fdisable-tree-ຜ່ານ
-fdisable-tree-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
ປິດການນຳໃຊ້ທາງຜ່ານຕົ້ນໄມ້ ຜ່ານ, ທະເລສາບ -fdisable-rtl ສໍາລັບຄໍາອະທິບາຍທາງເລືອກ
ການໂຕ້ຖຽງ.

-fenable-ipa-ຜ່ານ
ເປີດໃຊ້ IPA pass ຜ່ານ. ຜ່ານ ແມ່ນຊື່ຜ່ານ. ຖ້າຜ່ານທາງດຽວກັນແມ່ນສະຖິຕິ
invoked ໃນ compiler ຫຼາຍຄັ້ງ, ຊື່ pass ຄວນຖືກຕໍ່ທ້າຍດ້ວຍ a
ເລກລໍາດັບເລີ່ມຕົ້ນຈາກ 1.

-fenable-rtl-ຜ່ານ
-fenable-rtl-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
ເປີດໃຊ້ RTL pass ຜ່ານ, ທະເລສາບ -fdisable-rtl ສໍາລັບຄໍາອະທິບາຍທາງເລືອກການໂຕ້ຖຽງແລະ
ຕົວຢ່າງ.

-fenable-ຕົ້ນໄມ້-ຜ່ານ
-fenable-ຕົ້ນໄມ້-ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ
ເປີດໃຊ້ໃບຜ່ານຕົ້ນໄມ້ ຜ່ານ, ທະເລສາບ -fdisable-rtl ສໍາລັບລາຍລະອຽດຂອງການໂຕ້ຖຽງທາງເລືອກ.

ນີ້ແມ່ນບາງຕົວຢ່າງທີ່ສະແດງໃຫ້ເຫັນການນໍາໃຊ້ທາງເລືອກເຫຼົ່ານີ້.

# ປິດການໃຊ້ງານ ccp1 ສໍາລັບທຸກຟັງຊັນ
-fdisable-tree-ccp1
# ປິດການຖອດຖອນທີ່ສົມບູນສໍາລັບຟັງຊັນທີ່ cgraph node uid ແມ່ນ 1
-fenable-tree-cunroll=1
# ປິດການໃຊ້ງານ gcse2 ສໍາລັບຫນ້າທີ່ຢູ່ໃນລະດັບຕໍ່ໄປນີ້ [1,1],
# [300,400], ແລະ [400,1000]
# ປິດການໃຊ້ງານ gcse2 ສໍາລັບຟັງຊັນ foo ແລະ foo2
-fdisable-rtl-gcse2=foo,foo2
# ປິດ​ການ​ທໍາ​ງານ inlining ຕົ້ນ​
-fdisable-tree-einline
# ປິດການໃຊ້ງານ ipa inlining
-fdisable-ipa-inline
# ເປີດການຖອດຖອນຕົ້ນໄມ້ເຕັມ
-fenable-tree-unroll

-dຕົວອັກສອນ
-fdump-rtl-ຜ່ານ
-fdump-rtl-ຜ່ານ=ຊື່​ເອ​ກະ​ສານ
ເວົ້າວ່າເພື່ອເຮັດໃຫ້ debugging dumps ໃນລະຫວ່າງການລວບລວມໃນເວລາທີ່ກໍານົດໂດຍ ຕົວອັກສອນ. ນີ້
ຖືກນໍາໃຊ້ສໍາລັບການ debugging ຜ່ານ RTL-based ຂອງ compiler. ຊື່ໄຟລ໌ສ່ວນໃຫຍ່
ຂອງການຖິ້ມຂີ້ເຫຍື້ອແມ່ນເຮັດໄດ້ໂດຍການຕື່ມຕົວເລກຜ່ານແລະຄໍາສັບໃສ່ກັບ dumpname, ແລະ
ໄຟລ໌ຖືກສ້າງຂື້ນຢູ່ໃນໄດເລກະທໍລີຂອງໄຟລ໌ຜົນຜະລິດ. ໃນ​ກໍ​ລະ​ນີ​ຂອງ =ຊື່​ເອ​ກະ​ສານ ທາງເລືອກ,
dump ແມ່ນຜົນຜະລິດໃນໄຟລ໌ທີ່ໃຫ້ແທນທີ່ຈະເປັນ pass numbered dump ໄຟລ໌. ຫມາຍ​ເຫດ​
ວ່າຕົວເລກຜ່ານໄດ້ຖືກຄິດໄລ່ຢ່າງສະຖິດຍ້ອນວ່າບັດຜ່ານໄດ້ຮັບການລົງທະບຽນເຂົ້າໄປໃນບັດ
ຜູ້​ຈັດ​ການ. ດັ່ງນັ້ນຕົວເລກບໍ່ກ່ຽວຂ້ອງກັບຄໍາສັ່ງແບບເຄື່ອນໄຫວຂອງການປະຕິບັດ
ຜ່ານ. ໂດຍສະເພາະ, pass ທີ່ຕິດຕັ້ງໂດຍ plugin ສາມາດມີຈໍານວນຫຼາຍກວ່າ 200 ເຖິງແມ່ນວ່າ
ຖ້າ​ຫາກ​ວ່າ​ມັນ​ປະ​ຕິ​ບັດ​ຂ້ອນ​ຂ້າງ​ໄວ​. dumpname ຖືກ​ສ້າງ​ຂຶ້ນ​ຈາກ​ຊື່​ຂອງ​ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​ໄດ້​,
ຖ້າ​ຫາກ​ວ່າ​ລະ​ບຸ​ໄວ້​ຢ່າງ​ຊັດ​ເຈນ​ແລະ​ມັນ​ບໍ່​ແມ່ນ​ການ​ປະ​ຕິ​ບັດ​, ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​ມັນ​ແມ່ນ​ຊື່​ພື້ນ​ຖານ​ຂອງ​
ໄຟລ໌ແຫຼ່ງ. ສະຫຼັບເຫຼົ່ານີ້ອາດຈະມີຜົນກະທົບທີ່ແຕກຕ່າງກັນໃນເວລາທີ່ -E ຖືກນໍາໃຊ້ສໍາລັບການ
ການປຸງແຕ່ງກ່ອນ.

Debug dumps ສາມາດຖືກເປີດໃຊ້ດ້ວຍ a -fdump-rtl ສະຫຼັບຫຼືບາງ -d ທາງເລືອກ ຕົວອັກສອນທີ່ຢູ່ ທີ່ນີ້
ແມ່ນຕົວອັກສອນທີ່ເປັນໄປໄດ້ສໍາລັບການນໍາໃຊ້ໃນ ຜ່ານ ແລະ ຕົວອັກສອນ, ແລະ​ຄວາມ​ຫມາຍ​ຂອງ​ເຂົາ​ເຈົ້າ​:

-fdump-rtl-alignments
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການຈັດຮຽງສາຂາໄດ້ຖືກຄິດໄລ່.

-fdump-rtl-asmcons
Dump ຫຼັງຈາກການແກ້ໄຂຄໍາຖະແຫຼງທີ່ rtl ທີ່ມີຂໍ້ຈໍາກັດໃນ / ອອກທີ່ບໍ່ພໍໃຈ.

-fdump-rtl-auto_inc_dec
ຖິ້ມຫຼັງຈາກການຄົ້ນພົບ auto-inc-dec. ໃບຜ່ານນີ້ແມ່ນໃຊ້ໃນສະຖາປັດຕະຍະກໍາເທົ່ານັ້ນ
ມີ auto inc ຫຼືຄໍາແນະນໍາອັດຕະໂນມັດ dec.

-fdump-rtl-ສິ່ງກີດຂວາງ
ຖິ້ມຫຼັງຈາກທໍາຄວາມສະອາດຄໍາແນະນໍາອຸປະສັກ.

-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
ຖິ້ມຫຼັງຈາກ duplicating the computed 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
Dump ຫຼັງຈາກສົມທົບການປັບ stack.

-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
Dump ຫຼັງຈາກສຸດທ້າຍຂອງລະຫັດການຈັດການ EH.

-fdump-rtl-eh_ranges
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການປ່ຽນແປງຂອງພາກພື້ນໄລຍະການຈັດການ EH.

-fdump-rtl-ຂະຫຍາຍ
ຖິ້ມຫຼັງຈາກການຜະລິດ 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 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກທົ່ວໄປທົ່ວໂລກ
ການ​ລົບ​ລ້າງ subexpression​.

-fdump-rtl-init-regs
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການເລີ່ມຕົ້ນຂອງທະບຽນ.

-fdump-rtl-initvals
ຖິ້ມຫຼັງຈາກຄໍານວນຂອງຊຸດມູນຄ່າເບື້ອງຕົ້ນ.

-fdump-rtl-into_cfglayout
ຖິ້ມຫຼັງຈາກປ່ຽນເປັນໂໝດ cfglayout.

-fdump-rtl-ira
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການຈັດສັນການລົງທະບຽນ iterated.

-fdump-rtl-jump
Dump ຫຼັງຈາກການເພີ່ມປະສິດທິພາບການໂດດຄັ້ງທີສອງ.

-fdump-rtl-loop2
-fdump-rtl-loop2 ເປີດໃຊ້ການ dumping ຫຼັງຈາກ rtl loop optimization ຜ່ານໄປ.

-fdump-rtl-mach
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກປະຕິບັດການ reorganization pass ຂຶ້ນກັບເຄື່ອງຈັກ, ຖ້າຫາກວ່າຜ່ານ
ລາຄາ:.

-fdump-rtl-mode_sw
ຖິ້ມຫຼັງຈາກຖອດປຸ່ມໂໝດຊ້ຳຊ້ອນ.

-fdump-rtl-rnreg
ຖິ້ມຫຼັງຈາກລົງທະບຽນການປ່ຽນເລກ.

-fdump-rtl-outof_cfglayout
ຖິ້ມຫຼັງຈາກປ່ຽນຈາກໂຫມດ cfglayout.

-fdump-rtl-peephole2
ຖິ້ມຫຼັງຈາກປາກຊ່ອງຜ່ານ.

-fdump-rtl-postreload
ຖິ້ມຫຼັງການເພີ່ມປະສິດທິພາບຫຼັງການໂຫຼດໃໝ່.

-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-sibling
ຖິ້ມຫຼັງຈາກການເພີ່ມປະສິດທິພາບການໂທພີ່ນ້ອງ.

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
ທາງເລືອກເຫຼົ່ານີ້ເຮັດໃຫ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກຫ້າຮອບຂອງການແຍກຄໍາແນະນໍາ.

-fdump-rtl-sms
ຖິ້ມຫຼັງຈາກກຳນົດເວລາແບບໂມດູໂລ. ບັດນີ້ໃຊ້ໄດ້ກັບບາງສະຖາປັດຕະຍະກຳເທົ່ານັ້ນ.

-fdump-rtl-stack
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການປ່ຽນແປງຈາກ "ໄຟລ໌ລົງທະບຽນແປ" ຂອງ GCC ລົງທະບຽນກັບ x87's
ທະບຽນແບບ stack. ບັດນີ້ໃຊ້ໄດ້ກັບຕົວແປ x86 ເທົ່ານັ້ນ.

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 ແລະ -fdump-rtl-subreg2 ເປີດໃຊ້ dumping ຫຼັງຈາກສອງ subreg
ການຂະຫຍາຍຜ່ານ.

-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
dumps ເຫຼົ່ານີ້ແມ່ນຖືກກໍານົດແຕ່ຜະລິດໄຟລ໌ຫວ່າງເປົ່າສະເຫມີ.

-in
-fdump-rtl-ທັງໝົດ
ຜະລິດ dumps ທັງຫມົດທີ່ລະບຸໄວ້ຂ້າງເທິງ.

-dA ບັນທຶກຜົນອອກມາຂອງຕົວປະກອບດ້ວຍຂໍ້ມູນການດີບັກອື່ນໆ.

-dD ຖິ້ມນິຍາມມະຫາພາກທັງໝົດ, ໃນຕອນທ້າຍຂອງການປະມວນຜົນກ່ອນ, ນອກເໜືອໄປຈາກປົກກະຕິ
ຜົນຜະລິດ.

-dH ຜະລິດ dump ຫຼັກທຸກຄັ້ງທີ່ເກີດຄວາມຜິດພາດ.

-dp ບັນທຶກຜົນອອກມາຂອງຕົວປະກອບດ້ວຍຄຳເຫັນທີ່ຊີ້ບອກວ່າຮູບແບບໃດ ແລະ
ທາງເລືອກແມ່ນຖືກນໍາໃຊ້. ຄວາມຍາວຂອງແຕ່ລະຄໍາແນະນໍາຍັງຖືກພິມອອກ.

-dP ຖິ້ມ RTL ໃນຜົນຜະລິດຂອງຕົວປະກອບເປັນຄໍາຄິດຄໍາເຫັນກ່ອນແຕ່ລະຄໍາແນະນໍາ. ນອກຈາກນີ້
ເປີດ -dp ຄຳ ອະທິບາຍ.

-dx ພຽງແຕ່ສ້າງ RTL ສໍາລັບຫນ້າທີ່ແທນທີ່ຈະລວບລວມມັນ. ປົກກະຕິແລ້ວໃຊ້ກັບ
-fdump-rtl-ຂະຫຍາຍ.

-fdump-noaddr
ໃນເວລາທີ່ດໍາເນີນການ debugging dumps, ສະກັດກັ້ນຜົນຜະລິດທີ່ຢູ່. ນີ້ເຮັດໃຫ້ມັນເປັນໄປໄດ້ຫຼາຍທີ່ຈະ
ໃຊ້ diff ໃນການດີບັກການຖິ້ມຂີ້ເຫຍື້ອສໍາລັບການເອີ້ນ compiler ກັບ binaries compiler ທີ່ແຕກຕ່າງກັນ
ແລະ / ຫຼືຂໍ້ຄວາມ / bss / ຂໍ້ມູນ / heap / stack / dso ເລີ່ມຕົ້ນທີ່ແຕກຕ່າງກັນ.

-freport-bug
ເກັບກໍາແລະ dump ຂໍ້ມູນ debug ເຂົ້າໄປໃນໄຟລ໌ຊົ່ວຄາວຖ້າຫາກວ່າ ICE ໃນ C/C++ compiler
ເກີດຂຶ້ນ.

-fdump-ບໍ່ມີຕົວເລກ
ໃນເວລາທີ່ດໍາເນີນການ debugging dumps, ສະກັດກັ້ນຕົວເລກຄໍາແນະນໍາແລະທີ່ຢູ່ອອກ. ນີ້
ເຮັດໃຫ້ມັນເປັນໄປໄດ້ຫຼາຍທີ່ຈະໃຊ້ diff ໃນ debugging dumps ສໍາລັບ compiler invocations ກັບ
ທາງເລືອກທີ່ແຕກຕ່າງກັນ, ໂດຍສະເພາະກັບແລະບໍ່ມີ -g.

-fdump-unnumbered-links
ໃນເວລາທີ່ດໍາເນີນການ debugging dumps (ເບິ່ງ -d ທາງເລືອກຂ້າງເທິງ), ສະກັດກັ້ນຕົວເລກຄໍາແນະນໍາສໍາລັບ
ເຊື່ອມຕໍ່ກັບຄໍາແນະນໍາທີ່ຜ່ານມາແລະຕໍ່ໄປໃນລໍາດັບ.

-fdump-translation-unit (C++ ເທົ່ານັ້ນ)
-fdump-translation-unit-ທາງເລືອກໃນການ (C++ ເທົ່ານັ້ນ)
ຖິ້ມການເປັນຕົວແທນຂອງໂຄງສ້າງຕົ້ນໄມ້ສໍາລັບຫນ່ວຍງານການແປທັງຫມົດໄປຫາໄຟລ໌.
ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .tu ກັບຊື່ໄຟລ໌ແຫຼ່ງ, ແລະໄຟລ໌ແມ່ນ
ສ້າງຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ. ຖ້າ -ທາງເລືອກໃນການ ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​,
ທາງເລືອກໃນການ ຄວບຄຸມລາຍລະອຽດຂອງ dump ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້ສໍາລັບການ -fdump-ຕົ້ນໄມ້ ຕົວເລືອກ

-fdump-class-hierarchy (C++ ເທົ່ານັ້ນ)
-fdump-class-hierarchy-ທາງເລືອກໃນການ (C++ ເທົ່ານັ້ນ)
ຖິ້ມການເປັນຕົວແທນຂອງລໍາດັບຊັ້ນຂອງແຕ່ລະຊັ້ນຮຽນແລະຮູບແບບຕາຕະລາງຟັງຊັນ virtual ໄປຫາ a
ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .ຫ້ອງຮຽນ ກັບຊື່ໄຟລ໌ແຫຼ່ງ, ແລະໄຟລ໌
ຖືກສ້າງຂື້ນຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ. ຖ້າ -ທາງເລືອກໃນການ ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​,
ທາງເລືອກໃນການ ຄວບຄຸມລາຍລະອຽດຂອງ dump ດັ່ງທີ່ໄດ້ອະທິບາຍໄວ້ສໍາລັບການ -fdump-ຕົ້ນໄມ້ ຕົວເລືອກ

-fdump-ipa-ສະຫຼັບ
ຄວບ​ຄຸມ​ການ​ຖິ້ມ​ຂີ້​ເຫຍື້ອ​ໃນ​ຂັ້ນ​ຕອນ​ຕ່າງໆ​ຂອງ​ການ​ວິ​ເຄາະ​ລະ​ບົບ​ລະ​ບຽບ​ການ​ຂອງ​ພາ​ສາ​ເປັນ​
ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນສ້າງຂຶ້ນໂດຍການຕໍ່ທ້າຍສະວິດສະເພາະກັບແຫຼ່ງທີ່ມາ
ຊື່ໄຟລ໌, ແລະໄຟລ໌ຖືກສ້າງຂື້ນຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ. ໄດ້
ການຖິ້ມຂີ້ເຫຍື້ອຕໍ່ໄປນີ້ແມ່ນເປັນໄປໄດ້:

ທັງຫມົດ ເປີດໃຊ້ການຖິ້ມການວິເຄາະລະຫວ່າງຂັ້ນຕອນທັງໝົດ.

ຖັນ
dumps ຂໍ້​ມູນ​ກ່ຽວ​ກັບ​ການ​ປັບ​ຄ່າ​ກາ​ຟ​ໂທ​, ການ​ລົບ​ຫນ້າ​ທີ່​ທີ່​ບໍ່​ໄດ້​ນໍາ​ໃຊ້​, ແລະ​
ການ​ຕັດ​ສິນ​ໃຈ inlining​.

inline
ຖິ້ມຫຼັງຈາກຟັງຊັນ inlining.

-fdump-ຜ່ານ
ຖິ້ມບັນຊີລາຍຊື່ຂອງການເພີ່ມປະສິດທິພາບການສົ່ງຜ່ານທີ່ເປີດແລະປິດໂດຍປະຈຸບັນ
ຕົວເລືອກແຖວຄໍາສັ່ງ.

-fdump-ສະຖິຕິ-ທາງເລືອກ
ເປີດໃຊ້ ແລະຄວບຄຸມການຖິ້ມສະຖິຕິຜ່ານໃນໄຟລ໌ແຍກຕ່າງຫາກ. ຊື່ໄຟລ໌ແມ່ນ
ສ້າງຂຶ້ນໂດຍການໃສ່ຄຳຕໍ່ທ້າຍທີ່ລົງທ້າຍດ້ວຍ .ສະຖິຕິ ກັບຊື່ໄຟລ໌ແຫຼ່ງ, ແລະ
ໄຟລ໌ຖືກສ້າງຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ. ຖ້າ -ທາງເລືອກ ແບບຟອມແມ່ນ
ໃຊ້ແລ້ວ, - ສະ​ຖິ​ຕິ​ ເຮັດ ໃຫ້ ຕົວ ຊີ້ ວັດ ທີ່ ຈະ ໄດ້ ຮັບ ການ summed ທົ່ວ ຫນ່ວຍ ບໍ ລິ ການ ທັງ ຫມົດ ໃນ ຂະ ນະ ທີ່
- ລາຍ​ລະ​ອຽດ​ dumps ທຸກກໍລະນີເປັນ passes ສ້າງໃຫ້ເຂົາເຈົ້າ. ຄ່າເລີ່ມຕົ້ນທີ່ບໍ່ມີທາງເລືອກແມ່ນ
ເພື່ອລວມຕົວນັບສໍາລັບແຕ່ລະຫນ້າທີ່ລວບລວມ.

-fdump-ຕົ້ນໄມ້-ສະຫຼັບ
-fdump-ຕົ້ນໄມ້-ສະຫຼັບ-ທາງເລືອກໃນການ
-fdump-ຕົ້ນໄມ້-ສະຫຼັບ-ທາງເລືອກໃນການ=ຊື່​ເອ​ກະ​ສານ
ຄວບຄຸມການຖິ້ມຂີ້ເຫຍື້ອໃນຂັ້ນຕອນຕ່າງໆຂອງການປຸງແຕ່ງຕົ້ນໄມ້ພາສາລະດັບປານກາງເພື່ອ
ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນສ້າງຂຶ້ນໂດຍການຕໍ່ທ້າຍສະວິດສະເພາະກັບ
ຊື່ໄຟລ໌ແຫຼ່ງ, ແລະໄຟລ໌ຖືກສ້າງຂື້ນຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບໄຟລ໌ຜົນຜະລິດ. ໃນ
ກໍລະນີຂອງ =ຊື່​ເອ​ກະ​ສານ ທາງເລືອກ, dump ແມ່ນຜົນຜະລິດໃນໄຟລ໌ທີ່ໃຫ້ແທນທີ່ຈະອັດຕະໂນມັດ
ໄຟລ໌ທີ່ຕັ້ງຊື່ dump. ຖ້າ -ທາງເລືອກໃນການ ຮູບ​ແບບ​ການ​ນໍາ​ໃຊ້​, ທາງເລືອກໃນການ ແມ່ນບັນຊີລາຍຊື່ຂອງ - ແຍກອອກຈາກກັນ
ທາງເລືອກທີ່ຄວບຄຸມລາຍລະອຽດຂອງ dump ໄດ້. ບໍ່ແມ່ນທາງເລືອກທັງໝົດແມ່ນໃຊ້ໄດ້ກັບທຸກຄົນ
dumps; ສິ່ງທີ່ບໍ່ມີຄວາມຫມາຍແມ່ນຖືກລະເລີຍ. ທາງເລືອກຕໍ່ໄປນີ້ແມ່ນມີຢູ່

ທີ່ຢູ່
ພິມທີ່ຢູ່ຂອງແຕ່ລະ node. ປົກກະຕິແລ້ວນີ້ບໍ່ມີຄວາມຫມາຍຍ້ອນວ່າມັນປ່ຽນແປງ
ອີງຕາມສະພາບແວດລ້ອມແລະໄຟລ໌ແຫຼ່ງ. ການ​ນໍາ​ໃຊ້​ຕົ້ນ​ຕໍ​ຂອງ​ມັນ​ແມ່ນ​ສໍາ​ລັບ​ການ​ເຊື່ອມ​ຕໍ່​ເປັນ​
dump ໄຟລ໌ທີ່ມີສະພາບແວດລ້ອມດີບັກ.

asmname
ຖ້າ "DECL_ASSEMBLER_NAME" ໄດ້ຖືກຕັ້ງເປັນ decl ທີ່ໃຫ້, ໃຊ້ມັນຢູ່ໃນ dump
ແທນ "DECL_NAME". ການ​ນໍາ​ໃຊ້​ຕົ້ນ​ຕໍ​ຂອງ​ຕົນ​ແມ່ນ​ຄວາມ​ງ່າຍ​ຂອງ​ການ​ນໍາ​ໃຊ້​ເຮັດ​ວຽກ​ກັບ​ຄືນ​ໄປ​ບ່ອນ​ຈາກ​
mangled ຊື່ໃນເອກະສານປະກອບ.

ກະທັດຮັດ
ໃນ​ເວ​ລາ​ທີ່ dumping front-end ຕົວ​ແທນ​ລະ​ດັບ​ປານ​ກາງ, inhibiting dumping ຂອງ​ສະ​ມາ​ຊິກ​ຂອງ
ຂອບເຂດຫຼືຮ່າງກາຍຂອງຫນ້າທີ່ພຽງແຕ່ເນື່ອງຈາກວ່າຂອບເຂດນັ້ນໄດ້ບັນລຸ. ເທົ່ານັ້ນ
ຖິ້ມລາຍການດັ່ງກ່າວເມື່ອພວກມັນສາມາດເຂົ້າຫາໄດ້ໂດຍກົງໂດຍເສັ້ນທາງອື່ນ.

ໃນເວລາທີ່ dumping ຕົ້ນໄມ້ pretty-printed, ທາງເລືອກນີ້ inhibits dumping ອົງການຈັດຕັ້ງຂອງ
ໂຄງ​ສ້າງ​ການ​ຄວບ​ຄຸມ​.

ເມື່ອຖິ້ມ RTL, ພິມ RTL ໃນຮູບແບບກະທັດຮັດ (ຂົ້ນ) ແທນທີ່ຈະເປັນຄ່າເລີ່ມຕົ້ນ
ການເປັນຕົວແທນຂອງ LISP.

ວັດຖຸດິບ ພິມຕົວແທນວັດຖຸດິບຂອງຕົ້ນໄມ້. ໂດຍຄ່າເລີ່ມຕົ້ນ, ຕົ້ນໄມ້ຖືກພິມອອກຢ່າງສວຍງາມ
ຕົວ​ແທນ​ທີ່​ຄ້າຍ​ຄື C​.

ລາຍລະອຽດ
ເປີດໃຊ້ການ dumps ທີ່ມີລາຍລະອຽດເພີ່ມເຕີມ (ບໍ່ເປັນກຽດໂດຍທຸກໆທາງເລືອກ dump). ລວມທັງ
ຂໍ້ມູນຈາກການເພີ່ມປະສິດທິພາບຜ່ານ.

ສະຖິຕິ
ເປີດໃຊ້ການຖິ້ມສະຖິຕິຕ່າງໆກ່ຽວກັບບັດຜ່ານ (ບໍ່ຖືກຍົກຍ້ອງຈາກທຸກໆການຖິ້ມ
ທາງ​ເລືອກ).

ຕັນ
ເປີດໃຊ້ການສະແດງຂອບເຂດບລັອກພື້ນຖານ (ປິດການໃຊ້ງານຢູ່ໃນບ່ອນຖິ້ມຂີ້ເຫຍື້ອ).

graph
ສໍາລັບແຕ່ລະໄຟລ໌ dump ຊີ້ບອກອື່ນໆ (-fdump-rtl-ຜ່ານ), dump ກ
ການເປັນຕົວແທນຂອງກາຟການໄຫຼຂອງການຄວບຄຸມທີ່ເຫມາະສົມສໍາລັບການເບິ່ງກັບ GraphViz ກັບ
file.passid.pass.dot. ແຕ່ລະຟັງຊັນໃນໄຟລ໌ແມ່ນພິມອອກເປັນຮູບຍ່ອຍ,
ດັ່ງນັ້ນ GraphViz ສາມາດສະແດງພວກມັນທັງຫມົດໃນດິນຕອນດຽວ.

ທາງເລືອກນີ້ປະຈຸບັນພຽງແຕ່ໃຊ້ໄດ້ສໍາລັບການ dumps RTL, ແລະ RTL ໄດ້ຖືກ dumped ສະເຫມີ
ຮູບແບບກະທັດຮັດ.

vops
ເປີດໃຊ້ການສະແດງຕົວປະຕິບັດການ virtual ສໍາລັບທຸກໆຄໍາຖະແຫຼງການ.

lineno
ເປີດໃຊ້ການສະແດງຕົວເລກແຖວສໍາລັບຄໍາຖະແຫຼງການ.

uid ເປີດໃຊ້ການສະແດງ ID ທີ່ເປັນເອກະລັກ ("DECL_UID") ສໍາລັບແຕ່ລະຕົວແປ.

ຄຳເວົ້າ
ເປີດໃຊ້ການສະແດງການຖິ້ມຕົ້ນໄມ້ສໍາລັບແຕ່ລະຄໍາຖະແຫຼງການ.

eh ເປີດໃຊ້ການສະແດງຕົວເລກພາກພື້ນ EH ຖືແຕ່ລະຄໍາຖະແຫຼງການ.

scev
ເປີດໃຊ້ການສະແດງລາຍລະອຽດການວິເຄາະວິວັຖນາການ.

ທີ່ດີທີ່ສຸດ
ເປີດໃຊ້ການສະແດງຂໍ້ມູນການເພີ່ມປະສິດທິພາບ (ມີຢູ່ໃນບາງບັດເທົ່ານັ້ນ).

ພາດໂອກາດນີ້
ເປີດໃຊ້ການສະແດງຂໍ້ມູນການເພີ່ມປະສິດທິພາບທີ່ພາດໄປ (ມີຢູ່ໃນບາງບັດເທົ່ານັ້ນ).

ຫມາຍ​ເຫດ​
ເປີດໃຊ້ຂໍ້ມູນການເພີ່ມປະສິດທິພາບລະອຽດອື່ນໆ (ມີຢູ່ໃນບາງບັດເທົ່ານັ້ນ).

=ຊື່​ເອ​ກະ​ສານ
ແທນ​ທີ່​ຈະ​ເປັນ​ໄຟລ​໌ dump ທີ່​ມີ​ຊື່​ອັດ​ຕະ​ໂນ​ມັດ​, ຜົນ​ຜະ​ລິດ​ເຂົ້າ​ໄປ​ໃນ​ຊື່​ໄຟລ​໌​ທີ່​ໄດ້​ຮັບ​. ໄຟລ໌
ຊື່ stdout ແລະ stderr ໄດ້ຖືກປະຕິບັດເປັນພິເສດແລະຖືວ່າເປີດແລ້ວ
ກະແສມາດຕະຖານ. ຍົກ​ຕົວ​ຢ່າງ,

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

ສົ່ງຜົນໃຫ້ vectorizer dump ເຂົ້າໄປໃນ foo.dump, ໃນຂະນະທີ່ dump PRE ແມ່ນຜົນຜະລິດສຸດ stderr.
ຖ້າສອງຊື່ໄຟລ໌ dump ທີ່ຂັດແຍ້ງກັນໄດ້ຖືກມອບໃຫ້ສໍາລັບການຜ່ານດຽວກັນ, ຫຼັງຈາກນັ້ນ
ທາງເລືອກແມ່ນ overrides ກ່ອນຫນ້ານີ້.

ທັງຫມົດ ເປີດຕົວເລືອກທັງໝົດ, ຍົກເວັ້ນ ວັດຖຸດິບ, ກະທັດຮັດ, ຄຳເວົ້າ ແລະ lineno.

optall
ເປີດຕົວເລືອກການເພີ່ມປະສິດທິພາບທັງໝົດ, ເຊັ່ນ: ທີ່ດີທີ່ສຸດ, ພາດໂອກາດນີ້, ແລະ ຫມາຍ​ເຫດ​.

ການຖິ້ມຂີ້ເຫຍື້ອຕົ້ນໄມ້ຕໍ່ໄປນີ້ແມ່ນເປັນໄປໄດ້:

ຕົ້ນສະບັບ
ຖິ້ມກ່ອນການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ຕົ້ນໄມ້, ເພື່ອ file.original.

ທີ່ດີທີ່ສຸດ
dump ຫຼັງ​ຈາກ​ການ​ປັບ​ປຸງ​ຕົ້ນ​ໄມ້​ທັງ​ຫມົດ​ທີ່​ເຫມາະ​ສົມ​, ກັບ​ file.optimized.

gimple
ຖິ້ມແຕ່ລະຟັງຊັນກ່ອນ ແລະຫຼັງຈາກ gimplification ຜ່ານໄປຫາໄຟລ໌. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .gimple ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

cfg ຖິ້ມເສັ້ນສະແດງການໄຫຼຂອງການຄວບຄຸມຂອງແຕ່ລະຟັງຊັນໃສ່ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .cfg ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ch ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກຄັດລອກສ່ວນຫົວຂອງ loop. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
ch ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ssa ຖິ້ມຂໍ້ມູນທີ່ກ່ຽວຂ້ອງກັບ SSA ໃສ່ໄຟລ໌. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .ສສ
ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

alias
ຖິ້ມຂໍ້ມູນນາມແຝງສຳລັບແຕ່ລະຟັງຊັນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
.ນາມແຝງ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

CCP ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກ CCP. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .ccp ການ
ຊື່ໄຟລ໌ແຫຼ່ງ.

storeccp
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກ STORE-CCP. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .storeccp
ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

pre ຖິ້ມຕົ້ນໄມ້ຫຼັງຈາກການກໍາຈັດການຊໍ້າຊ້ອນບາງສ່ວນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .ກ່ອນ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ອິດສະລະ ຖິ້ມຕົ້ນໄມ້ຫຼັງຈາກການກໍາຈັດການຊໍ້າຊ້ອນຢ່າງເຕັມທີ່. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
.ຟຣີ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

copyprop
ຖິ້ມຕົ້ນໄມ້ພາຍຫຼັງການຂະຫຍາຍພັນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .copyprop
ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

store_copyprop
ຖິ້ມຕົ້ນໄມ້ຫຼັງຈາກເກັບຮັກສາສໍາເນົາການຂະຫຍາຍພັນ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ
.store_copyprop ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

dce ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກການກໍາຈັດລະຫັດຕາຍ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .dce ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ທ່ານ / ນາງ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກປະຕິບັດການທົດແທນການລວບລວມຂໍ້ມູນ. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .sra ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຈົມລົງ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກປະຕິບັດການຈົມລົງລະຫັດ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .ຈົມ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

dom ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງຕົ້ນໄມ້ເດັ່ນ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .dom ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

dse ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ການກໍາຈັດຮ້ານຄ້າທີ່ຕາຍແລ້ວ. ຊື່ໄຟລ໌ແມ່ນເຮັດ
ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .dse ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

phiopt
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກເພີ່ມປະສິດທິພາບ PHI nodes ເຂົ້າໄປໃນລະຫັດເສັ້ນກົງ. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .phiopt ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

forwprop
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກສົ່ງຕໍ່ຂະຫຍາຍຕົວແປທີ່ໃຊ້ດຽວ. ຊື່ໄຟລ໌
ແມ່ນ​ເຮັດ​ໄດ້​ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .forwprop ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຊື່ສຳເນົາ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງການປ່ຽນຊື່ສຳເນົາ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .copyrename ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ສະບັບເລກທີ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງຄ່າສົ່ງຄືນທີ່ມີຊື່ໃນແບບທົ່ວໄປ
ຕົ້ນໄມ້. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .nrv ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ວີທີ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ vectorization ຂອງ loops. ຊື່ໄຟລ໌ແມ່ນເຮັດ
ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .vect ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

slp ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ vectorization ຂອງຕັນພື້ນຖານ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .slp ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

vrp ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກການຂະຫຍາຍພັນມູນຄ່າ (VRP). ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .vrp ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ທັງຫມົດ ເປີດໃຊ້ການຖິ້ມຕົ້ນໄມ້ທັງໝົດທີ່ມີທຸງທີ່ມີໃຫ້ຢູ່ໃນຕົວເລືອກນີ້.

-fopt-info
- fopt-ຂໍ້​ມູນ-ທາງເລືອກໃນການ
- fopt-ຂໍ້​ມູນ-ທາງເລືອກໃນການ=ຊື່​ເອ​ກະ​ສານ
ຄວບ​ຄຸມ​ການ​ປະ​ຕິ​ບັດ dumps ຈາກ​ຜ່ານ​ການ​ປັບ​ປຸງ​ຕ່າງໆ​. ຖ້າ -ທາງເລືອກໃນການ ແບບຟອມແມ່ນ
ໃຊ້ແລ້ວ, ທາງເລືອກໃນການ ແມ່ນບັນຊີລາຍຊື່ຂອງ - ແຍກຄໍາທາງເລືອກໃນການເລືອກລາຍລະອຽດ dump ແລະ
ການເພີ່ມປະສິດທິພາບ.

ໄດ້ ທາງເລືອກໃນການ ສາມາດແບ່ງອອກເປັນສອງກຸ່ມ: ທາງເລືອກໃນການອະທິບາຍ verbosity ຂອງ
dump, ແລະທາງເລືອກທີ່ອະທິບາຍວ່າການເພີ່ມປະສິດທິພາບຄວນຖືກລວມເຂົ້າ. ທາງ​ເລືອກ​ຈາກ​
ທັງສອງກຸ່ມສາມາດປະສົມກັນໄດ້ຢ່າງເສລີຍ້ອນວ່າພວກມັນບໍ່ທັບຊ້ອນກັນ. ຢ່າງໃດກໍຕາມ, ໃນກໍລະນີຂອງ
ຂໍ້ຂັດແຍ່ງໃດໆ, ທາງເລືອກຕໍ່ມາ override ທາງເລືອກກ່ອນຫນ້ານີ້ໃນເສັ້ນຄໍາສັ່ງ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມການ dump verbosity:

ທີ່ດີທີ່ສຸດ
ພິມຂໍ້ມູນເມື່ອການເພີ່ມປະສິດທິພາບຖືກນຳໃຊ້ຢ່າງສຳເລັດຜົນ. ມັນຂຶ້ນກັບຜ່ານ
ເພື່ອຕັດສິນໃຈວ່າຂໍ້ມູນໃດມີຄວາມກ່ຽວຂ້ອງ. ຕົວຢ່າງ, vectorizer ຜ່ານການພິມ
ສະຖານທີ່ແຫຼ່ງຂອງ loops ສົບຜົນສໍາເລັດ vectorized.

ພາດໂອກາດນີ້
ພິມຂໍ້ມູນກ່ຽວກັບການເພີ່ມປະສິດທິພາບທີ່ພາດ. ບຸກຄົນຜ່ານການຄວບຄຸມທີ່
ຂໍ້ມູນທີ່ຈະລວມຢູ່ໃນຜົນຜະລິດ.

ຫມາຍ​ເຫດ​
ພິມຂໍ້ມູນ verbose ກ່ຽວກັບການເພີ່ມປະສິດທິພາບ, ເຊັ່ນ: ການຫັນປ່ຽນທີ່ແນ່ນອນ,
ຂໍ້ຄວາມລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບການຕັດສິນໃຈແລະອື່ນໆ.

ທັງຫມົດ ພິມຂໍ້ມູນການເພີ່ມປະສິດທິພາບລະອຽດ. ນີ້ປະກອບມີ ທີ່ດີທີ່ສຸດ, ພາດໂອກາດນີ້, ແລະ
ຫມາຍ​ເຫດ​.

ຫນຶ່ງຫຼືຫຼາຍຄໍາທາງເລືອກຕໍ່ໄປນີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອອະທິບາຍກຸ່ມຂອງ
ການເພີ່ມປະສິດທິພາບ:

ອີນເຕີເນັດ ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຈາກການເພີ່ມປະສິດທິພາບລະຫວ່າງຂັ້ນຕອນທັງຫມົດ.

loop
ເປີດໃຊ້ການ dumps ຈາກການເພີ່ມປະສິດທິພາບ loop ທັງຫມົດ.

inline
ເປີດໃຊ້ການ dumps ຈາກການເພີ່ມປະສິດທິພາບ inlining ທັງຫມົດ.

ສິ່ງໜຶ່ງ ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຈາກການເພີ່ມປະສິດທິພາບ vectorization ທັງຫມົດ.

optall
ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຈາກການເພີ່ມປະສິດທິພາບທັງຫມົດ. ນີ້ແມ່ນ superset ຂອງກຸ່ມການເພີ່ມປະສິດທິພາບ
ລາຍຊື່ຂ້າງເທິງ.

If ທາງເລືອກໃນການ ຖືກລະເວັ້ນ, ມັນຕັ້ງໄວ້ໃນຕອນຕົ້ນ optimized-optall, ຊຶ່ງຫມາຍຄວາມວ່າຈະຖິ້ມຂໍ້ມູນທັງຫມົດ
ກ່ຽວກັບການເພີ່ມປະສິດທິພາບທີ່ປະສົບຜົນສໍາເລັດຈາກການຜ່ານທັງຫມົດ.

ຖ້າ ຊື່​ເອ​ກະ​ສານ ໄດ້ຖືກສະຫນອງໃຫ້, ຫຼັງຈາກນັ້ນ dumps ຈາກການເພີ່ມປະສິດທິພາບທັງຫມົດແມ່ນ
concatenated ເຂົ້າໄປໃນ ຊື່​ເອ​ກະ​ສານ. ຖ້າບໍ່ດັ່ງນັ້ນ dump ແມ່ນຜົນຜະລິດໃສ່ stderr. ເຖິງແມ່ນວ່າ
ຫຼາຍ -fopt-info ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ຍອມ​ຮັບ​, ພຽງ​ແຕ່​ຫນຶ່ງ​ຂອງ​ເຂົາ​ເຈົ້າ​ສາ​ມາດ​ປະ​ກອບ​ມີ a ຊື່​ເອ​ກະ​ສານທີ່ຢູ່ ຖ້າຫາກວ່າ
ຊື່ໄຟລ໌ອື່ນໆແມ່ນໄດ້ຖືກສະຫນອງໃຫ້ຫຼັງຈາກນັ້ນທັງຫມົດແຕ່ທາງເລືອກທໍາອິດດັ່ງກ່າວແມ່ນຖືກລະເລີຍ.

ໃຫ້ສັງເກດວ່າຜົນຜະລິດ ຊື່​ເອ​ກະ​ສານ ຖືກຂຽນທັບໃນກໍລະນີທີ່ມີຫົວຫນ່ວຍການແປຫຼາຍອັນ. ຖ້າ
ຕ້ອງການຜົນຜະລິດລວມຈາກຫຼາຍຫນ່ວຍການແປ, stderr ຄວນຈະຖືກນໍາໃຊ້
ແທນທີ່ຈະເປັນ.

ໃນຕົວຢ່າງຕໍ່ໄປນີ້, ຂໍ້ມູນການເພີ່ມປະສິດທິພາບແມ່ນຜົນຜະລິດໄປຫາ stderr:

gcc -O3 -fopt-info

ຕົວຢ່າງນີ້:

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

ຜົນ​ໄດ້​ຮັບ​ພາດ​ໂອ​ກາດ​ການ​ປັບ​ປຸງ​ບົດ​ລາຍ​ງານ​ຈາກ​ການ​ຜ່ານ​ທັງ​ຫມົດ​ເຂົ້າ​ໄປ​ໃນ missed.ທັງໝົດ, ແລະອັນນີ້:

gcc -O2 -ftree-vectorize -fopt-info-vec-ພາດ

ພິມຂໍ້ມູນກ່ຽວກັບໂອກາດການເພີ່ມປະສິດທິພາບທີ່ພາດຈາກການສົ່ງຜ່ານ vectorization
on stderr. ໃຫ້ສັງເກດວ່າ -fopt-info-vec-ພາດ ເທົ່າກັບ -fopt-info-missed-vec.

ເປັນຕົວຢ່າງອື່ນ,

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

ຜົນໄດ້ຮັບຂໍ້ມູນກ່ຽວກັບການເພີ່ມປະສິດທິພາບທີ່ພາດໄປເຊັ່ນດຽວກັນກັບສະຖານທີ່ທີ່ດີທີ່ສຸດຈາກທັງຫມົດ
inlining ໄດ້ ຜ່ານ ເຂົ້າ ໄປ ໃນ inline.txt.

ສຸດທ້າຍ, ພິຈາລະນາ:

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

ທີ່ນີ້ທັງສອງຊື່ໄຟລ໌ຜົນຜະລິດ vec.mis ແລະ loop.opt ມີຄວາມຂັດແຍ້ງນັບຕັ້ງແຕ່ພຽງແຕ່ຫນຶ່ງ
ໄຟລ໌ຜົນຜະລິດໄດ້ຮັບອະນຸຍາດ. ໃນກໍລະນີນີ້, ພຽງແຕ່ທາງເລືອກທໍາອິດທີ່ມີຜົນກະທົບແລະ
ທາງເລືອກຕໍ່ມາຖືກລະເລີຍ. ດັ່ງນັ້ນເທົ່ານັ້ນ vec.mis ແມ່ນຜະລິດທີ່ບັນຈຸຂີ້ເຫຍື້ອ
ຈາກ vectorizer ກ່ຽວກັບໂອກາດພາດ.

-frandom-seed=ຈໍານວນ
ຕົວເລືອກນີ້ສະຫນອງແນວພັນທີ່ GCC ໃຊ້ແທນຕົວເລກແບບສຸ່ມໃນການສ້າງ
ຊື່ສັນຍາລັກທີ່ແນ່ນອນຈະຕ້ອງແຕກຕ່າງກັນໃນທຸກໄຟລ໌ທີ່ລວບລວມ. ມັນຍັງເປັນ
ໃຊ້ເພື່ອວາງສະແຕມທີ່ເປັນເອກະລັກໃນໄຟລ໌ຂໍ້ມູນການຄຸ້ມຄອງແລະໄຟລ໌ວັດຖຸທີ່ຜະລິດ
ເຂົາເຈົ້າ. ທ່ານສາມາດນໍາໃຊ້ໄດ້ - ເມັດພັນ ທາງເລືອກທີ່ຈະຜະລິດວັດຖຸທີ່ມີລັກສະນະດຽວກັນ
ໄຟລ໌.

ໄດ້ ຈໍານວນ ຄວນຈະແຕກຕ່າງກັນສໍາລັບທຸກໆໄຟລ໌ທີ່ທ່ານລວບລວມ.

-fsched-verbose=n
ກ່ຽວກັບເປົ້າຫມາຍທີ່ນໍາໃຊ້ຕາຕະລາງຄໍາແນະນໍາ, ທາງເລືອກນີ້ຄວບຄຸມປະລິມານຂອງ
debugging output the scheduler prints . ຂໍ້​ມູນ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ຂຽນ​ເປັນ​ຄວາມ​ຜິດ​ພາດ​ມາດ​ຕະ​ຖານ​,
ເວັ້ນເສຍແຕ່ວ່າ -fdump-rtl-sched1 or -fdump-rtl-sched2 ແມ່ນລະບຸໄວ້, ໃນກໍລະນີນີ້ມັນແມ່ນຜົນຜະລິດ
ໄປຫາໄຟລ໌ລາຍຊື່ dump ປົກກະຕິ, .sched1 or .sched2 ຕາມລໍາດັບ. ຢ່າງໃດກໍຕາມສໍາລັບ n
ຫຼາຍກ່ວາເກົ້າ, ຜົນຜະລິດໄດ້ຖືກພິມອອກສະເຫມີກັບຄວາມຜິດພາດມາດຕະຖານ.

ສໍາລັບການ n ຫຼາຍ​ກ​່​ວາ​ສູນ​, -fsched-verbose outputs ຂໍ້ມູນດຽວກັນກັບ
-fdump-rtl-sched1 ແລະ -fdump-rtl-sched2ທີ່ຢູ່ ສໍາລັບ n ຫຼາຍກ່ວາຫນຶ່ງ, ມັນຍັງຜົນຜະລິດພື້ນຖານ
ຄວາມ​ເປັນ​ໄປ​ໄດ້ block​, ຂໍ້​ມູນ​ບັນ​ຊີ​ລາຍ​ລະ​ອຽດ​ທີ່​ກຽມ​ພ້ອມ​ແລະ​ຂໍ້​ມູນ​ຫນ່ວຍ​ງານ / insn​. ສໍາລັບ n
ຫຼາຍກວ່າສອງ, ມັນປະກອບມີ RTL ຢູ່ຈຸດທີ່ເອົາລູກອອກ, ການຄວບຄຸມການໄຫຼເຂົ້າແລະຂໍ້ມູນພາກພື້ນ. ແລະ
ສໍາລັບການ n ຫຼາຍ​ກວ່າ​ສີ່​, -fsched-verbose ລວມທັງຂໍ້ມູນການເພິ່ງພາອາໄສ.

- save-temps​
-save-temps=cwd
ເກັບຮັກສາໄຟລ໌ກາງ "ຊົ່ວຄາວ" ປົກກະຕິຢ່າງຖາວອນ; ວາງພວກມັນຢູ່ໃນປະຈຸບັນ
ໄດເລກະທໍລີແລະຕັ້ງຊື່ພວກເຂົາໂດຍອີງໃສ່ໄຟລ໌ແຫຼ່ງ. ດັ່ງນັ້ນ, ການລວບລວມ foo.c ກັບ -c
- save-temps​ ຜະລິດໄຟລ໌ foo.i ແລະ foo.sເຊັ່ນດຽວກັບ foo.o. ນີ້ສ້າງເປັນ
ປຸງແຕ່ງກ່ອນ foo.i ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​ເຖິງ​ແມ່ນ​ວ່າ compiler ໃນ​ປັດ​ຈຸ​ບັນ​ປົກ​ກະ​ຕິ​ການ​ນໍາ​ໃຊ້ an
preprocessor ປະສົມປະສານ.

ເມື່ອໃຊ້ປະສົມປະສານກັບ -x ທາງເລືອກແຖວຄໍາສັ່ງ, - save-temps​ ແມ່ນສົມເຫດສົມຜົນ
ພຽງ​ພໍ​ທີ່​ຈະ​ຫຼີກ​ເວັ້ນ​ການ​ຂຽນ​ໄຟລ​໌​ແຫຼ່ງ​ຂໍ້​ມູນ​ທີ່​ມີ​ການ​ຂະ​ຫຍາຍ​ດຽວ​ກັນ​ກັບ an
ໄຟລ໌ກາງ. ໄຟລ໌ກາງທີ່ສອດຄ້ອງກັນອາດຈະໄດ້ຮັບໂດຍການປ່ຽນຊື່
ໄຟລ໌ຕົ້ນສະບັບກ່ອນທີ່ຈະນໍາໃຊ້ - save-temps​.

ຖ້າທ່ານເອີ້ນ GCC ໃນຂະຫນານ, ລວບລວມໄຟລ໌ແຫຼ່ງທີ່ແຕກຕ່າງກັນຫຼາຍທີ່ແບ່ງປັນ a
ຊື່ພື້ນຖານທົ່ວໄປຢູ່ໃນໄດເລກະທໍລີຍ່ອຍທີ່ແຕກຕ່າງກັນຫຼືໄຟລ໌ແຫຼ່ງດຽວກັນທີ່ລວບລວມສໍາລັບ
ຈຸດຫມາຍປາຍທາງຜົນຜະລິດຫຼາຍ, ມັນເປັນໄປໄດ້ວ່າ compilers ຂະຫນານທີ່ແຕກຕ່າງກັນຈະ
ແຊກແຊງເຊິ່ງກັນແລະກັນ, ແລະຂຽນທັບໄຟລ໌ຊົ່ວຄາວ. ຕົວ​ຢ່າງ:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

ອາດຈະສົ່ງຜົນໃນ foo.i ແລະ foo.o ຖືກຂຽນໄປພ້ອມໆກັນໂດຍ compilers ທັງສອງ.

-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 ທີ່ປະຕິບັດໂດຍແຕ່ລະຂະບວນການຍ່ອຍໃນລໍາດັບການລວບລວມ. ສໍາລັບ C
ໄຟລ໌ແຫຼ່ງ, ນີ້ແມ່ນ compiler ທີ່ເຫມາະສົມແລະ assembler (ບວກກັບ linker ຖ້າການເຊື່ອມໂຍງແມ່ນ
ສໍາເລັດ).

ໂດຍ​ບໍ່​ມີ​ການ​ສະ​ເພາະ​ຂອງ​ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​, ຜົນ​ຜະ​ລິດ​ເບິ່ງ​ຄື​ນີ້​:

#cc1 0.12 0.01
# ເປັນ 0.00 0.01

ຕົວເລກທໍາອິດໃນແຕ່ລະເສັ້ນແມ່ນ "ເວລາຂອງຜູ້ໃຊ້", ນັ້ນແມ່ນເວລາທີ່ໃຊ້ໃນການປະຕິບັດ
ໂຄງການຕົວມັນເອງ. ຕົວເລກທີສອງແມ່ນ "ເວລາຂອງລະບົບ", ເວລາທີ່ໃຊ້ໃນການປະຕິບັດງານ
ປົກກະຕິຂອງລະບົບໃນນາມຂອງໂຄງການ. ຕົວເລກທັງສອງແມ່ນຢູ່ໃນວິນາທີ.

ດ້ວຍ​ຂໍ້​ມູນ​ສະ​ເພາະ​ຂອງ​ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​ໄດ້​, ຜົນ​ຜະ​ລິດ​ໄດ້​ຖືກ​ຕໍ່​ທ້າຍ​ກັບ​ໄຟລ​໌​ທີ່​ມີ​ຊື່​,
ແລະມັນເບິ່ງຄືວ່ານີ້:

0.12 0.01 cc1
0.00 0.01 ເປັນ

"ເວລາຜູ້ໃຊ້" ແລະ "ເວລາຂອງລະບົບ" ຖືກຍ້າຍໄປກ່ອນຊື່ໂຄງການ, ແລະ
ທາງ​ເລືອກ​ທີ່​ຜ່ານ​ໄປ​ໃນ​ໂຄງ​ການ​ແມ່ນ​ສະ​ແດງ​ໃຫ້​ເຫັນ​, ດັ່ງ​ນັ້ນ​ຫນຶ່ງ​ໃນ​ຕໍ່​ມາ​ສາ​ມາດ​ບອກ​ໄດ້​ວ່າ​ໄຟລ​໌​ແມ່ນ​
ຖືກລວບລວມ, ແລະມີທາງເລືອກໃດ.

-fvar-ຕິດຕາມ
ດໍາເນີນການຕິດຕາມຕົວແປ. ມັນຄິດໄລ່ບ່ອນທີ່ຕົວແປຖືກເກັບໄວ້ໃນແຕ່ລະຕໍາແຫນ່ງ
ໃນລະຫັດ. ຂໍ້ມູນ debugging ທີ່ດີກວ່າແມ່ນຫຼັງຈາກນັ້ນຖືກສ້າງຂຶ້ນ (ຖ້າຫາກວ່າຂໍ້ມູນ debugging
ຮູບ​ແບບ​ສະ​ຫນັບ​ສະ​ຫນູນ​ຂໍ້​ມູນ​ນີ້​)​.

ມັນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອລວບລວມກັບການເພີ່ມປະສິດທິພາບ (-ອສ, -O, -O2, ... ),
ຂໍ້ມູນການດີບັກ (-g) ແລະຮູບແບບຂໍ້ມູນ debug ສະຫນັບສະຫນູນມັນ.

-fvar-tracking-assignments
ບັນທຶກການມອບໝາຍໃຫ້ກັບຕົວແປຂອງຜູ້ໃຊ້ໃນຕອນຕົ້ນຂອງການລວບລວມ ແລະພະຍາຍາມປະຕິບັດ
ຄໍາບັນຍາຍໃນໄລຍະການລວບລວມຕະຫຼອດໄປຈົນເຖິງທີ່ສຸດ, ໃນຄວາມພະຍາຍາມ
ເພື່ອປັບປຸງຂໍ້ມູນດີບັກໃນຂະນະທີ່ເພີ່ມປະສິດທິພາບ. ການນໍາໃຊ້ -gdwarf-4 ແມ່ນແນະນໍາພ້ອມ
ກັບ​ມັນ.

ມັນສາມາດເປີດໃຊ້ໄດ້ເຖິງແມ່ນວ່າການຕິດຕາມ var ຈະຖືກປິດໃຊ້ງານ, ໃນກໍລະນີທີ່ມີຄໍາບັນຍາຍ
ສ້າງແລະຮັກສາ, ແຕ່ຖືກຍົກເລີກໃນຕອນທ້າຍ. ໂດຍຄ່າເລີ່ມຕົ້ນ, ທຸງນີ້ຖືກເປີດໃຊ້ງານ
ພ້ອມດ້ວຍ -fvar-ຕິດຕາມ, ຍົກ​ເວັ້ນ​ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍາ​ນົດ​ເວ​ລາ​ການ​ຄັດ​ເລືອກ​ໄດ້​ຖືກ​ເປີດ​ໃຊ້​ງານ​.

-fvar-tracking-assignments-toggle
Toggle -fvar-tracking-assignments, ໃນທາງດຽວກັນນັ້ນ -gtoggle ສະຫຼັບ -g.

-print-file-name=ຫ້ອງສະຫມຸດ
ພິມຊື່ເຕັມຂອງໄຟລ໌ຫ້ອງສະໝຸດ ຫ້ອງສະຫມຸດ ທີ່ຈະຖືກນໍາໃຊ້ໃນເວລາທີ່
ເຊື່ອມຕໍ່--- ແລະຢ່າເຮັດຫຍັງອີກ. ດ້ວຍຕົວເລືອກນີ້, GCC ບໍ່ໄດ້ລວບລວມຫຼືເຊື່ອມຕໍ່
ຫຍັງ; ມັນພຽງແຕ່ພິມຊື່ໄຟລ໌.

-print-multi-directory
ພິມຊື່ໄດເລກະທໍລີທີ່ສອດຄ້ອງກັບ multilib ທີ່ເລືອກໂດຍສະວິດອື່ນ
ມີຢູ່ໃນເສັ້ນຄໍາສັ່ງ. ໄດເລກະທໍລີນີ້ຄວນຈະມີຢູ່ໃນ GCC_EXEC_PREFIX.

-print-multi-lib
ພິມແຜນທີ່ຈາກຊື່ໄດເລກະທໍລີ multilib ໄປຫາສະຫຼັບ compiler ທີ່ເປີດໃຊ້ພວກມັນ.
ຊື່ໄດເລກະທໍລີຖືກແຍກອອກຈາກສະຫຼັບໂດຍ ;, ແລະແຕ່ລະສະຫຼັບເລີ່ມຕົ້ນດ້ວຍ
@ ແທນທີ່ຈະ -, ໂດຍບໍ່ມີຊ່ອງຫວ່າງລະຫວ່າງສະຫຼັບຫຼາຍ. ນີ້ແມ່ນ supposed
ງ່າຍການປຸງແຕ່ງແກະ.

-print-multi-os-directory
ພິມເສັ້ນທາງໄປຫາຫ້ອງສະໝຸດ OS ສໍາລັບ multilib ທີ່ເລືອກ, ທຽບກັບບາງອັນ lib
ບັນຊີຍ່ອຍ. ຖ້າມີຫ້ອງສະຫມຸດ OS ຢູ່ໃນ lib subdirectory ແລະບໍ່ມີ multilibs
ຖືກນໍາໃຊ້, ນີ້ແມ່ນປົກກະຕິແລ້ວພຽງແຕ່ ., ຖ້າມີຫ້ອງສະຫມຸດ OS ຢູ່ໃນ libsuffix ອ້າຍເອື້ອຍນ້ອງ
ໄດເລກະທໍລີນີ້ພິມເຊັ່ນ: ../lib64, ../ lib or ../lib32, ຫຼືຖ້າມີຫ້ອງສະຫມຸດ OS
ປະຈຸບັນໃນ lib/subdir subdirectories ມັນພິມເຊັ່ນ: amd64, sparcv9 or ev6.

-print-multiarch
ພິມເສັ້ນທາງໄປຫາຫ້ອງສະໝຸດ OS ສໍາລັບ multiarch ທີ່ເລືອກ, ທຽບກັບບາງອັນ lib
ໄດເຣັກທໍຣີຍ່ອຍ

-print-prog-name=ໂຄງການ
ຄື -print-file-name, ແຕ່ຄົ້ນຫາສໍາລັບໂຄງການເຊັ່ນ: cpp.

-print-libgcc-file-name
ຄື​ກັນ​ກັບ -print-file-name=libgcc.a.

ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ທ່ານໃຊ້ -nostdlib or -nodefaultlibs ແຕ່ທ່ານຕ້ອງການເຊື່ອມຕໍ່ກັບ
libgcc.a. ທ່ານສາມາດເຮັດໄດ້:

gcc -nostdlib ... `gcc -print-libgcc-file-name`

-print-search-dirs
ພິມຊື່ຂອງໄດເລກະທໍລີການຕິດຕັ້ງທີ່ກໍານົດໄວ້ແລະບັນຊີລາຍຊື່ຂອງໂປລແກລມແລະ
ລາຍຊື່ຫ້ອງສະໝຸດ gcc ຄົ້ນຫາ --- ແລະບໍ່ເຮັດຫຍັງອີກ.

ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ gcc ພິມ​ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ ການຕິດຕັ້ງ ປັນຫາ, ບໍ່ສາມາດເຮັດໄດ້ exec
cpp0: No ດັ່ງກ່າວ ເອກະສານ or ລະບົບ. ເພື່ອແກ້ໄຂບັນຫານີ້, ທ່ານ ຈຳ ເປັນຕ້ອງໃສ່ cpp0 ແລະ
ອົງປະກອບ compiler ອື່ນໆທີ່ gcc ຄາດວ່າຈະຊອກຫາໃຫ້ເຂົາເຈົ້າ, ຫຼືທ່ານສາມາດກໍານົດໄດ້
ຕົວແປສິ່ງແວດລ້ອມ GCC_EXEC_PREFIX ໄປຫາໄດເລກະທໍລີທີ່ທ່ານຕິດຕັ້ງພວກມັນ. ຢ່າ
ລືມຕິດຕາມ /.

-print-sysroot
ພິມໄດເຣັກທໍຣີ sysroot ເປົ້າຫມາຍທີ່ຖືກນໍາໃຊ້ໃນລະຫວ່າງການລວບລວມ. ນີ້​ແມ່ນ
sysroot ເປົ້າ​ຫມາຍ​ທີ່​ລະ​ບຸ​ໄວ້​ທັງ​ໃນ​ເວ​ລາ​ທີ່​ກໍາ​ນົດ​ໄວ້​ຫຼື​ການ​ນໍາ​ໃຊ້​ --sysroot ທາງເລືອກ,
ອາດຈະເປັນການຕໍ່ທ້າຍເພີ່ມເຕີມທີ່ຂຶ້ນກັບທາງເລືອກການລວບລວມ. ຖ້າບໍ່ມີເປົ້າໝາຍ
sysroot ຖືກລະບຸ, ທາງເລືອກທີ່ພິມບໍ່ມີຫຍັງ.

-print-sysroot-headers-suffix
ພິມຄໍາຕໍ່ທ້າຍທີ່ເພີ່ມໃສ່ sysroot ເປົ້າຫມາຍໃນເວລາທີ່ຊອກຫາ headers, ຫຼືໃຫ້ an
ຜິດພາດຖ້າຫາກວ່າ compiler ບໍ່ໄດ້ configured ກັບດັ່ງກ່າວ suffix --- ແລະບໍ່ເຮັດຫຍັງ.
ອື່ນ ໆ

- ເຄື່ອງ​ຂີ້​ຝຸ່ນ
ພິມເຄື່ອງເປົ້າໝາຍຂອງຜູ້ລວບລວມຂໍ້ມູນ (ຕົວຢ່າງ: i686-pc-linux-gnu) --- ແລະຢ່າເຮັດ
ມີ​ຫຍັງ​ອີກ​ບໍ່.

- dumpversion
ພິມສະບັບ compiler (ຕົວຢ່າງ: 3.0)--- ແລະຢ່າເຮັດອັນອື່ນ.

- dumpspecs
ພິມຂໍ້ມູນຈໍາເພາະໃນຕົວຂອງ compiler-- ແລະຢ່າເຮັດອັນອື່ນ. (ນີ້​ແມ່ນ​ການ​ນໍາ​ໃຊ້​ໃນ​ເວ​ລາ​ທີ່​
GCC ຕົວມັນເອງກໍາລັງຖືກສ້າງ.)

-fno-eliminate-unused-debug-types
ໂດຍປົກກະຕິ, ເມື່ອຜະລິດຜົນຜະລິດ DWARF 2, GCC ຫຼີກເວັ້ນການຜະລິດສັນຍາລັກດີບັກສໍາລັບ
ປະ​ເພດ​ທີ່​ບໍ່​ມີ​ບ່ອນ​ທີ່​ນໍາ​ໃຊ້​ໃນ​ໄຟລ​໌​ແຫຼ່ງ​ທີ່​ຖືກ​ລວບລວມ​. ບາງຄັ້ງມັນເປັນປະໂຫຍດ
ເພື່ອໃຫ້ GCC ປ່ອຍຂໍ້ມູນການດີບັກສໍາລັບທຸກປະເພດທີ່ຖືກປະກາດຢູ່ໃນຫນ່ວຍງານລວບລວມ,
ໂດຍບໍ່ຄໍານຶງເຖິງວ່າພວກມັນຖືກນໍາໃຊ້ຢ່າງແທ້ຈິງໃນຫນ່ວຍງານລວບລວມນັ້ນ, ສໍາລັບ
ຕົວຢ່າງຖ້າ, ໃນ debugger, ທ່ານຕ້ອງການສົ່ງຄ່າໄປຫາປະເພດທີ່ບໍ່ແມ່ນຕົວຈິງ
ໃຊ້ໃນໂຄງການຂອງທ່ານ (ແຕ່ຖືກປະກາດ). ເລື້ອຍໆ, ແນວໃດກໍ່ຕາມ, ນີ້ສົ່ງຜົນໃຫ້ a
ພື້ນທີ່ເສຍເງິນຢ່າງຫຼວງຫຼາຍ.

ທາງເລືອກໃນການ ທີ່ ການຄວບຄຸມ ທີ່ດີທີ່ສຸດ
ຕົວເລືອກເຫຼົ່ານີ້ຄວບຄຸມການເພີ່ມປະສິດທິພາບປະເພດຕ່າງໆ.

ໂດຍບໍ່ມີທາງເລືອກການເພີ່ມປະສິດທິພາບໃດໆ, ເປົ້າຫມາຍຂອງຜູ້ລວບລວມຂໍ້ມູນແມ່ນເພື່ອຫຼຸດຜ່ອນຄ່າໃຊ້ຈ່າຍຂອງການລວບລວມ
ແລະເພື່ອເຮັດໃຫ້ debugging ຜະລິດຜົນໄດ້ຮັບທີ່ຄາດໄວ້. ຖະແຫຼງການແມ່ນເອກະລາດ: ຖ້າເຈົ້າ
ຢຸດໂຄງການທີ່ມີຈຸດແບ່ງລະຫວ່າງຄໍາຖະແຫຼງການ, ຫຼັງຈາກນັ້ນທ່ານສາມາດກໍານົດຄ່າໃຫມ່ໃຫ້ກັບ
ຕົວແປໃດໆຫຼືການປ່ຽນແປງໂຄງການຕ້ານກັບຄໍາຖະແຫຼງອື່ນໆໃນຫນ້າທີ່ແລະໄດ້ຮັບ
ແນ່ນອນວ່າຜົນໄດ້ຮັບທີ່ທ່ານຄາດຫວັງຈາກລະຫັດແຫຼ່ງ.

ການເປີດທຸງການເພີ່ມປະສິດທິພາບເຮັດໃຫ້ compiler ພະຍາຍາມປັບປຸງປະສິດທິພາບ ແລະ/ຫຼື
ຂະ​ຫນາດ​ລະ​ຫັດ​ທີ່​ໃຊ້​ເວ​ລາ​ຂອງ​ການ​ລວບ​ລວມ​ແລະ​ຄວາມ​ສາ​ມາດ​ທີ່​ຈະ debug ໄດ້​
ໂຄງການ.

compiler ປະຕິບັດການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ຄວາມຮູ້ທີ່ມັນມີຂອງໂຄງການ.
ການລວບລວມໄຟລ໌ຫຼາຍໄຟລ໌ໃນເວລາດຽວກັນກັບໂຫມດໄຟລ໌ຜົນຜະລິດດຽວເຮັດໃຫ້ການລວບລວມຂໍ້ມູນນໍາໃຊ້
ຂໍ້​ມູນ​ທີ່​ໄດ້​ຮັບ​ຈາກ​ທັງ​ຫມົດ​ຂອງ​ໄຟລ​໌​ໃນ​ເວ​ລາ​ທີ່​ການ​ສັງ​ລວມ​ຂອງ​ເຂົາ​ເຈົ້າ​ແຕ່​ລະ​ຄົນ​.

ບໍ່ແມ່ນການເພີ່ມປະສິດທິພາບທັງໝົດຖືກຄວບຄຸມໂດຍກົງໂດຍທຸງ. ພຽງແຕ່ການເພີ່ມປະສິດທິພາບທີ່ມີ a
ທຸງແມ່ນລະບຸໄວ້ໃນພາກນີ້.

ການເພີ່ມປະສິດທິພາບສ່ວນໃຫຍ່ຖືກເປີດໃຊ້ພຽງແຕ່ຖ້າມີ -O ລະດັບແມ່ນກໍານົດຢູ່ໃນເສັ້ນຄໍາສັ່ງ. ຖ້າບໍ່ດັ່ງນັ້ນ
ພວກມັນຖືກປິດການໃຊ້ງານ, ເຖິງແມ່ນວ່າຈະລະບຸທຸງການເພີ່ມປະສິດທິພາບສ່ວນບຸກຄົນ.

ອີງຕາມເປົ້າຫມາຍແລະວິທີການ GCC ໄດ້ຖືກຕັ້ງຄ່າ, ຊຸດທີ່ແຕກຕ່າງກັນເລັກນ້ອຍຂອງ
ການເພີ່ມປະສິດທິພາບອາດຈະຖືກເປີດໃຊ້ໃນແຕ່ລະຄັ້ງ -O ລະ​ດັບ​ກ​່​ວາ​ທີ່​ລະ​ບຸ​ໄວ້​ທີ່​ນີ້​. ທ່ານສາມາດເອີ້ນ GCC ໄດ້
ກັບ -Q --help=optimizers ເພື່ອຊອກຫາຊຸດການເພີ່ມປະສິດທິພາບທີ່ແນ່ນອນທີ່ເປີດໃຊ້ຢູ່
ແຕ່ລະຂັ້ນ.

-O
-O1 ເພີ່ມປະສິດທິພາບ. ການປັບແຕ່ງການລວບລວມຂໍ້ມູນຕ້ອງໃຊ້ເວລາຫຼາຍກວ່າ, ແລະຄວາມຊົງຈໍາຫຼາຍກວ່າເກົ່າ
ຫນ້າທີ່ຂະຫນາດໃຫຍ່.

ກັບ -O, compiler ພະຍາຍາມຫຼຸດຜ່ອນຂະຫນາດລະຫັດແລະເວລາປະຕິບັດ, ໂດຍບໍ່ມີການປະຕິບັດ
ການເພີ່ມປະສິດທິພາບໃດໆທີ່ຈະໃຊ້ເວລາການລວບລວມຢ່າງຫຼວງຫຼາຍ.

-O ເປີດທຸງການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້:

-fauto-inc-dec -fbranch-count-reg -fcombine-stack-ປັບ -fcompare-elim
-fcprop-ລົງທະບຽນ -fdce -fdefer-pop -fdelayed-ສາຂາ -fdse -fforward-ຂະຫຍາຍພັນ
-fguess-ສາຂາ-ຄວາມເປັນໄປໄດ້ -fif ການ​ປ່ຽນ​ແປງ 2​ -fif ການ​ປ່ຽນ​ແປງ​
-finline-functions-called-one ດຽວ -fipa-pure-const -fipa-profile -fipa ອ້າງ​ອີງ​
-fmerge-ຄົງທີ່ -fmove-loop-invariants -fshrink-wrap -fsplit-wide-types
-ftree-bit-ccp -ftree-ccp -fssa-phiopt -ftre-ch -ftree-copy-prop -free-copyrename
-ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop - ຟຣີ​ຟຣີ​ -ftree-phiprop
- ອ່າງລ້າງມື -ftree-slsr -ftree-sra -ftree-pta - ຫ້າ​ປີ​ -funit-at-a-time

-O ຍັງເປີດຢູ່ -fomit-frame-pointer ໃນເຄື່ອງທີ່ເຮັດແນວນັ້ນບໍ່ແຊກແຊງ
ກັບ debugging.

-O2 ເພີ່ມປະສິດທິພາບຫຼາຍກວ່າເກົ່າ. GCC ປະຕິບັດການເພີ່ມປະສິດທິພາບທີ່ສະຫນັບສະຫນູນເກືອບທັງຫມົດທີ່ບໍ່ມີ
ມີ​ສ່ວນ​ຮ່ວມ​ໃນ​ການ​ແລກ​ປ່ຽນ​ຄວາມ​ໄວ​ອະ​ວະ​ກາດ​. ເມື່ອປຽບທຽບກັບ -O, ທາງເລືອກນີ້ເພີ່ມຂຶ້ນທັງສອງ
ເວລາການລວບລວມແລະການປະຕິບັດຂອງລະຫັດທີ່ສ້າງຂຶ້ນ.

-O2 ເປີດທຸງການເພີ່ມປະສິດທິພາບທັງໝົດທີ່ລະບຸໄວ້ໂດຍ -O. ມັນຍັງເປີດຕໍ່ໄປນີ້
ທຸງການເພີ່ມປະສິດທິພາບ: -fthread-jumps -falign-functions -falign-jumps -falign-loops
-falign-ປ້າຍ -fcaller-ປະຫຍັດ -fcrossjumping -fcse-follow-jumps -fcse-skip-blocks
-fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-speculatively
-fexpensive-optimizations -fgcse -fgcse-lm -fhoist-adjacent-loads
-finline-small-functions -findirect-inlining -fipa-cp -fipa-cp-alignment -fipa-sra
-fipa-icf -fisolate-erroneous-paths-dereference -flra-remat -foptimize-sibling-calls
-foptimize-strlen -fpartial-inlining -fpeephole2 -freorder-ຕັນ
-freorder-blocks-and-partition -freorder-functions -frerun-cse-after-loop
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing
-fstrict-ລົ້ນ -ftree-builtin-call-dce -ftre-switch-ແປງ -ftree-tail-merge
-ftre-pre -ftree-vrp -fipa-ra

ກະລຸນາສັງເກດຄໍາເຕືອນພາຍໃຕ້ -fgcse ກ່ຽວກັບການຮຽກຮ້ອງ -O2 ກ່ຽວກັບໂຄງການທີ່ໃຊ້ຄອມພິວເຕີ້
ໂກໂຕ.

ຫມາຍເຫດ: ໃນ Ubuntu 8.10 ແລະຮຸ່ນຕໍ່ມາ, -D_FORTIFY_SOURCE=2 ຖືກກໍານົດໂດຍຄ່າເລີ່ມຕົ້ນ, ແລະແມ່ນ
ເປີດໃຊ້ເມື່ອ -O ຖືກກໍານົດເປັນ 2 ຫຼືສູງກວ່າ. ນີ້ເຮັດໃຫ້ການລວບລວມເວລາເພີ່ມເຕີມແລະ
ການກວດສອບເວລາແລ່ນສໍາລັບຫນ້າທີ່ libc ຫຼາຍ. ເພື່ອປິດການໃຊ້ງານ, ໃຫ້ລະບຸອັນໃດນຶ່ງ
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 ປັບ​ໃຫ້​ດີ​ຫຼາຍ​. -O3 ເປີດການເພີ່ມປະສິດທິພາບທັງຫມົດທີ່ລະບຸໂດຍ -O2 ແລະຍັງເປີດ
ໄດ້ -finline-functions, -funswitch-loops, -fpredictive-commoning, -fgcse-after-reload,
-ftree-loop-vectorize, -ftree-loop-distribute-patterns, -ftree-slp-vectorize,
-fvect-cost-model, -ftree-partial-pre ແລະ -fipa-cp-clone ຕົວເລືອກ

-O0 ຫຼຸດຜ່ອນເວລາການລວບລວມແລະເຮັດໃຫ້ການດີບັກສ້າງຜົນໄດ້ຮັບທີ່ຄາດໄວ້. ນີ້​ແມ່ນ
Default

-ອສ ປັບແຕ່ງຂະໜາດ. -ອສ ເຮັດໃຫ້ທັງຫມົດ -O2 ການເພີ່ມປະສິດທິພາບທີ່ບໍ່ປົກກະຕິເພີ່ມຂຶ້ນ
ຂະຫນາດລະຫັດ. ມັນຍັງດໍາເນີນການເພີ່ມປະສິດທິພາບເພີ່ມເຕີມທີ່ຖືກອອກແບບມາເພື່ອຫຼຸດຜ່ອນຂະຫນາດລະຫັດ.

-ອສ ປິດການໃຊ້ງານທຸງການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້: -falign-functions -falign-jumps
-falign-loops -falign-ປ້າຍ -freorder-ຕັນ -freorder-blocks-and-partition
-fprefetch-loop-arrays

- ໄວ
ບໍ່ສົນໃຈການປະຕິບັດຕາມມາດຕະຖານທີ່ເຄັ່ງຄັດ. - ໄວ ເຮັດໃຫ້ທັງຫມົດ -O3 ການເພີ່ມປະສິດທິພາບ. ມັນຍັງ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບທີ່ບໍ່ຖືກຕ້ອງສໍາລັບທຸກໂຄງການທີ່ສອດຄ່ອງກັບມາດຕະຖານ. ມັນ
ເປີດ -fast ຄະ​ນິດ​ສາດ​ ແລະ Fortran ສະເພາະ -fno-protect-parens ແລະ -fstack-arrays.

- ອຈ ປັບປຸງປະສົບການການດີບັກ. - ອຈ ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບທີ່ບໍ່ແຊກແຊງ
ການດີບັກ. ມັນຄວນຈະເປັນລະດັບການເພີ່ມປະສິດທິພາບຂອງທາງເລືອກສໍາລັບການດັດແກ້ມາດຕະຖານ.
compile-debug cycle, ສະເຫນີລະດັບທີ່ເຫມາະສົມຂອງການເພີ່ມປະສິດທິພາບໃນຂະນະທີ່ຮັກສາ
ການລວບລວມໄວແລະປະສົບການດີບັກທີ່ດີ.

ຖ້າທ່ານໃຊ້ຫຼາຍ -O ທາງເລືອກ, ມີຫຼືບໍ່ມີຕົວເລກລະດັບ, ທາງເລືອກສຸດທ້າຍແມ່ນ
ອັນທີ່ມີປະສິດທິຜົນ.

ທາງເລືອກຂອງແບບຟອມ -fທຸງ ລະບຸທຸງເອກະລາດຂອງເຄື່ອງຈັກ. ທຸງສ່ວນໃຫຍ່ມີທັງສອງ
ຮູບ​ແບບ​ທາງ​ບວກ​ແລະ​ທາງ​ລົບ​; ຮູບ​ແບບ​ທາງ​ລົບ​ຂອງ​ -ffoo is -fno-foo. ໃນຕາຕະລາງຂ້າງລຸ່ມນີ້,
ມີພຽງແຕ່ແບບຟອມດຽວເທົ່ານັ້ນທີ່ລະບຸໄວ້ --- ແບບຟອມທີ່ທ່ານໃຊ້ໂດຍທົ່ວໄປ. ທ່ານສາມາດຄິດອອກອື່ນໆ
ແບບຟອມໂດຍການຖອນອອກ ບໍ່- ຫຼືເພີ່ມມັນ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມການເພີ່ມປະສິດທິພາບສະເພາະ. ພວກມັນຖືກເປີດໃຊ້ໂດຍ -O
ທາງ​ເລືອກ​ຫຼື​ກ່ຽວ​ກັບ​ການ​ທີ່​ມີ​. ທ່ານສາມາດນໍາໃຊ້ທຸງດັ່ງຕໍ່ໄປນີ້ໃນທີ່ຫາຍາກ
ກໍລະນີໃນເວລາທີ່ "ປັບລະອຽດ" ຂອງການເພີ່ມປະສິດທິພາບທີ່ຈະປະຕິບັດແມ່ນຕ້ອງການ.

-fno-defer-pop
ປະກົດການໂຕ້ແຍ້ງໃຫ້ກັບແຕ່ລະການເອີ້ນຟັງຊັນທັນທີທີ່ຟັງຊັນນັ້ນກັບຄືນມາ. ສໍາລັບ
ເຄື່ອງຈັກທີ່ຕ້ອງປະກົດການໂຕ້ຖຽງຫຼັງຈາກການໂທຟັງຊັນ, ປົກກະຕິແລ້ວ compiler ອະນຸຍາດໃຫ້
arguments ສະສົມຢູ່ໃນ stack ສໍາລັບການໂທຫຼາຍຫນ້າທີ່ແລະ pops ໃຫ້ເຂົາເຈົ້າທັງຫມົດຢູ່ທີ່
ຄັ້ງຫນຶ່ງ.

ຄົນພິການໃນລະດັບ -O, -O2, -O3, -ອສ.

-fforward-ຂະຫຍາຍພັນ
ດໍາເນີນການສົ່ງຕໍ່ການຂະຫຍາຍພັນໃນ RTL. ຜ່ານພະຍາຍາມສົມທົບສອງຄໍາແນະນໍາ
ແລະກວດເບິ່ງວ່າຜົນໄດ້ຮັບສາມາດງ່າຍດາຍ. ຖ້າການຖອດ looping ເຮັດວຽກ, ສອງ passes
ໄດ້ຖືກປະຕິບັດແລະຄັ້ງທີສອງແມ່ນກໍານົດເວລາຫຼັງຈາກ loop unrolling.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນລະດັບການເພີ່ມປະສິດທິພາບ -O, -O2, -O3, -ອສ.

-ffp-ສັນຍາ=ແບບ
-ffp-contract=ປິດ ປິດໃຊ້ງານການຫົດຕົວສະແດງຈຸດລອຍ. -ffp-contract=ໄວ
ເຮັດ​ໃຫ້​ການ​ຫົດ​ຕົວ​ການ​ສະ​ແດງ​ອອກ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​ເຊັ່ນ​ການ​ສ້າງ​ເປັນ fused multiply-add​
ການດໍາເນີນງານຖ້າຫາກວ່າເປົ້າຫມາຍມີການສະຫນັບສະຫນູນພື້ນເມືອງສໍາລັບພວກເຂົາ. -ffp-contract=on ເຮັດໃຫ້
ການຫົດຕົວສະແດງຈຸດລອຍຖ້າອະນຸຍາດໂດຍມາດຕະຖານພາສາ. ນີ້​ແມ່ນ
ໃນປັດຈຸບັນບໍ່ໄດ້ປະຕິບັດແລະປະຕິບັດເທົ່າກັບ -ffp-contract=ປິດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -ffp-contract=ໄວ.

-fomit-frame-pointer
ຢ່າເກັບຕົວຊີ້ກອບຢູ່ໃນທະບຽນສໍາລັບຟັງຊັນທີ່ບໍ່ຕ້ອງການຫນຶ່ງ. ນີ້
ຫຼີກ​ລ້ຽງ​ຄໍາ​ແນະ​ນໍາ​ເພື່ອ​ຊ່ວຍ​ປະ​ຢັດ​, ການ​ຕັ້ງ​ຄ່າ​ແລະ​ການ​ຟື້ນ​ຟູ​ຕົວ​ຊີ້​ກອບ​; ມັນຍັງເຮັດໃຫ້ເປັນ
ລົງທະບຽນພິເສດທີ່ມີຢູ່ໃນຫຼາຍຫນ້າທີ່. It ຍັງ ເຮັດໃຫ້ debugging ເປັນໄປບໍ່ໄດ້ on
ບາງ ເຄື່ອງຈັກ.

ໃນບາງເຄື່ອງຈັກ, ເຊັ່ນ VAX, ທຸງນີ້ບໍ່ມີຜົນ, ເພາະວ່າມາດຕະຖານ
ລໍາດັບການໂທອັດຕະໂນມັດຈັດການຕົວຊີ້ກອບແລະບໍ່ມີຫຍັງຖືກບັນທຶກໄວ້ໂດຍ
ທຳທ່າວ່າບໍ່ມີຢູ່. ມະຫາພາກຄຳອະທິບາຍເຄື່ອງ "FRAME_POINTER_REQUIRED"
ຄວບຄຸມວ່າເຄື່ອງຈັກເປົ້າໝາຍຮອງຮັບທຸງນີ້ຫຼືບໍ່.

ການຕັ້ງຄ່າເລີ່ມຕົ້ນ (ເມື່ອບໍ່ປັບແຕ່ງຂະໜາດ) ສໍາລັບ 32-bit GNU/Linux x86 ແລະ 32-bit
Darwin x86 ເປົ້າຫມາຍແມ່ນ -fomit-frame-pointer. ທ່ານສາມາດ configure GCC ກັບ
--enable-frame-pointer ຕັ້ງຄ່າຕົວເລືອກເພື່ອປ່ຽນຄ່າເລີ່ມຕົ້ນ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-foptimize-sibling-calls
ປັບແຕ່ງການໂທຫາອ້າຍເອື້ອຍນ້ອງ ແລະຫາງສຽງຊ້ຳ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-foptimize-strlen
ປັບແຕ່ງຟັງຊັນ C string ມາດຕະຖານຕ່າງໆ (ເຊັ່ນ: "strlen", "strchr" ຫຼື "strcpy") ແລະ
ຄູ່ "_FORTIFY_SOURCE" ຂອງເຂົາເຈົ້າເປັນທາງເລືອກທີ່ໄວກວ່າ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-fno-inline
ຢ່າຂະຫຍາຍຟັງຊັນໃດນຶ່ງໃນແຖວ ນອກຈາກສິ່ງທີ່ໝາຍໄວ້ດ້ວຍ "always_inline"
ຄຸນ​ລັກ​ສະ​ນະ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນເມື່ອບໍ່ເພີ່ມປະສິດທິພາບ.

ຟັງຊັນດຽວສາມາດຖືກຍົກເວັ້ນຈາກ inlining ໂດຍການຫມາຍໃຫ້ພວກເຂົາດ້ວຍ "noinline"
attribute

-finline-small-functions
ປະສົມປະສານຫນ້າທີ່ເຂົ້າໄປໃນຜູ້ໂທຂອງພວກເຂົາເມື່ອຮ່າງກາຍຂອງພວກເຂົາມີຂະຫນາດນ້ອຍກວ່າທີ່ຄາດໄວ້
ລະຫັດການໂທຫາຟັງຊັນ (ດັ່ງນັ້ນຂະຫນາດລວມຂອງໂປລແກລມມີຂະຫນາດນ້ອຍກວ່າ). ຜູ້ສັງລວມ
heuristically ຕັດ ສິນ ໃຈ ທີ່ ຫນ້າ ທີ່ ແມ່ນ ງ່າຍ ດາຍ ພຽງ ພໍ ທີ່ ຈະ ຕົກ ເປັນ ມູນ ຄ່າ ລວມ ເຂົ້າ ໃນ
ວິທີນີ້. inlining ນີ້ໃຊ້ກັບຫນ້າທີ່ທັງຫມົດ, ເຖິງແມ່ນວ່າບໍ່ໄດ້ປະກາດໃນແຖວ.

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O2.

-findirect-inlining
Inline ຍັງໂທຫາທາງອ້ອມທີ່ຖືກຄົ້ນພົບທີ່ຮູ້ຈັກໃນເວລາລວບລວມຂອບໃຈ
inlining ທີ່ຜ່ານມາ. ຕົວເລືອກນີ້ມີຜົນກະທົບພຽງແຕ່ເມື່ອ inlining ຕົວຂອງມັນເອງເປີດ
ໂດຍ -finline-functions or -finline-small-functions ຕົວເລືອກ

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O2.

-finline-functions
ພິຈາລະນາຫນ້າທີ່ທັງຫມົດສໍາລັບການ inlining, ເຖິງແມ່ນວ່າພວກເຂົາບໍ່ໄດ້ຖືກປະກາດໃນແຖວ. ໄດ້
compiler heuristically ຕັດ ສິນ ໃຈ ທີ່ ຫນ້າ ທີ່ ມີ ມູນ ຄ່າ ການ ເຊື່ອມ ໂຍງ ໃນ ວິ ທີ ການ ນີ້.

ຖ້າການໂທທັງຫມົດໄປຫາຟັງຊັນທີ່ໃຫ້ຖືກປະສົມປະສານ, ແລະຟັງຊັນຖືກປະກາດ
"static", ຫຼັງຈາກນັ້ນ, ຟັງຊັນແມ່ນປົກກະຕິບໍ່ໄດ້ອອກເປັນລະຫັດ assembler ໃນສິດທິຂອງຕົນເອງ.

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O3.

-finline-functions-called-one ດຽວ
ພິ​ຈາ​ລະ​ນາ​ທຸກ​ຫນ້າ​ທີ່ "static​" ເອີ້ນ​ວ່າ​ຄັ້ງ​ດຽວ​ສໍາ​ລັບ inlining ເຂົ້າ​ໄປ​ໃນ​ການ​ໂທ​ຂອງ​ເຂົາ​ເຈົ້າ​ເຖິງ​ແມ່ນ​ວ່າ​
ພວກມັນບໍ່ໄດ້ຖືກໝາຍວ່າ "ໃນແຖວ". ຖ້າການໂທໄປຫາຫນ້າທີ່ໃຫ້ຖືກປະສົມປະສານ, ຫຼັງຈາກນັ້ນ
ຟັງຊັນບໍ່ແມ່ນ output ເປັນລະຫັດ assembler ໃນສິດທິຂອງຕົນເອງ.

ເປີດໃຊ້ໃນລະດັບ -O1, -O2, -O3 ແລະ -ອສ.

- ຄວາມ​ຢ້ານ​ກົວ​, inlining​
ຟັງຊັນໃນແຖວໝາຍໂດຍ "always_inline" ແລະຟັງຊັນທີ່ຮ່າງກາຍເບິ່ງຄືວ່ານ້ອຍກວ່າ
ຟັງຊັນໂທ overhead ຕົ້ນກ່ອນເຮັດ -fprofile-generate ເຄື່ອງມືແລະ
ຜ່ານ inlining ທີ່ແທ້ຈິງ. ການເຮັດດັ່ງນັ້ນເຮັດໃຫ້ profileing ລາຄາຖືກລົງຢ່າງຫຼວງຫຼາຍແລະປົກກະຕິ
inlining ໄວຂຶ້ນກ່ຽວກັບໂຄງການທີ່ມີຕ່ອງໂສ້ຂະຫນາດໃຫຍ່ຂອງຫນ້າທີ່ wrapper ຮັງ.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fipa-sra
ປະຕິບັດການທົດແທນ scalar interprocedural ຂອງການລວບລວມ, ການກໍາຈັດພາລາມິເຕີທີ່ບໍ່ໄດ້ໃຊ້
ແລະການທົດແທນຂອງພາລາມິເຕີທີ່ຜ່ານໂດຍການອ້າງອີງໂດຍຕົວກໍານົດການທີ່ຜ່ານໂດຍມູນຄ່າ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3 ແລະ -ອສ.

-finline-limit=n
ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈຳກັດຂະໜາດຂອງຟັງຊັນທີ່ສາມາດໃສ່ໃນແຖວໄດ້. ທຸງນີ້ອະນຸຍາດໃຫ້
ການຄວບຄຸມຫຍາບຂອງຂອບເຂດຈໍາກັດນີ້. n ແມ່ນຂະຫນາດຂອງຫນ້າທີ່ສາມາດ inlined ໃນ
ຈໍານວນຂອງຄໍາແນະນໍາ pseudo.

Inlining ຕົວຈິງແມ່ນຄວບຄຸມໂດຍຕົວກໍານົດການຈໍານວນຫນຶ່ງ, ເຊິ່ງອາດຈະຖືກກໍານົດ
ສ່ວນບຸກຄົນໂດຍການນໍາໃຊ້ --param ຊື່=ມູນຄ່າ. ໄດ້ -finline-limit=n ທາງ​ເລືອກ​ກໍາ​ນົດ​ບາງ​ສ່ວນ​ຂອງ​
ຕົວກໍານົດການເຫຼົ່ານີ້ດັ່ງຕໍ່ໄປນີ້:

max-inline-insns-single
ຖືກກໍານົດໃຫ້ n/ 2

max-inline-insns-auto
ຖືກກໍານົດໃຫ້ n/ 2

ເບິ່ງຂ້າງລຸ່ມນີ້ສໍາລັບເອກະສານຂອງຕົວກໍານົດການສ່ວນບຸກຄົນຄວບຄຸມ inlining ແລະ
ສໍາລັບຄ່າເລີ່ມຕົ້ນຂອງພາລາມິເຕີເຫຼົ່ານີ້.

ຫມາຍ​ເຫດ​: ອາດຈະບໍ່ມີມູນຄ່າ -finline-ຈຳກັດ ທີ່ສົ່ງຜົນໃຫ້ມີພຶດຕິກໍາເລີ່ມຕົ້ນ.

ຫມາຍ​ເຫດ​: ຄໍາແນະນໍາ pseudo ເປັນຕົວແທນ, ໃນສະພາບການສະເພາະນີ້, ເປັນບົດຄັດຫຍໍ້
ການວັດແທກຂະຫນາດຂອງຫນ້າທີ່. ໃນທາງໃດກໍ່ຕາມ, ມັນເປັນຕົວແທນຂອງຈໍານວນການຊຸມນຸມ
ຄໍາແນະນໍາແລະດັ່ງນັ້ນຄວາມຫມາຍທີ່ແນ່ນອນຂອງມັນອາດຈະປ່ຽນຈາກການປ່ອຍຫນຶ່ງໄປຫາຫນຶ່ງ
ອີກຄົນຫນຶ່ງ.

-fno-keep-inline-dllexport
ນີ້ແມ່ນສະບັບທີ່ລະອຽດກວ່າຂອງ -fkeep-inline-ຟັງຊັນ, ເຊິ່ງໃຊ້ພຽງແຕ່ກັບ
ຟັງຊັນທີ່ຖືກປະກາດໂດຍໃຊ້ຄຸນລັກສະນະ "dllexport" ຫຼື declspec

-fkeep-inline-ຟັງຊັນ
ໃນ C, ປ່ອຍຟັງຊັນ "static" ທີ່ຖືກປະກາດວ່າ "inline" ເຂົ້າໄປໃນໄຟລ໌ວັດຖຸ, ເຖິງແມ່ນວ່າ.
ຟັງຊັນໄດ້ຖືກບັນຈຸເຂົ້າໃນຜູ້ໂທທັງຫມົດຂອງມັນ. ສະວິດນີ້ບໍ່ມີຜົນກະທົບ
ປະຕິບັດຫນ້າໂດຍໃຊ້ສ່ວນຂະຫຍາຍ "extern inline" ໃນ GNU C90. ໃນ C ++, ປ່ອຍອັນໃດກໍໄດ້
inline functions ເຂົ້າໄປໃນໄຟລ໌ວັດຖຸ.

-fkeep-static-consts
ປ່ອຍຕົວແປທີ່ປະກາດວ່າ "static const" ເມື່ອການເພີ່ມປະສິດທິພາບບໍ່ໄດ້ເປີດ, ເຖິງແມ່ນວ່າ
ຕົວແປບໍ່ໄດ້ອ້າງອີງ.

GCC ເປີດໃຊ້ຕົວເລືອກນີ້ຕາມຄ່າເລີ່ມຕົ້ນ. ຖ້າທ່ານຕ້ອງການບັງຄັບໃຫ້ compiler ກວດເບິ່ງວ່າ a
ຕົວແປແມ່ນອ້າງອີງ, ໂດຍບໍ່ຄໍານຶງເຖິງການເພີ່ມປະສິດທິພາບຫຼືບໍ່ເປີດ, ໃຫ້ໃຊ້
ໄດ້ -fno-keep-static-consts ທາງເລືອກ.

-fmerge-ຄົງທີ່
ພະຍາຍາມຮວມຄ່າຄົງທີ່ທີ່ຄືກັນ (ຄ່າຄົງທີ່ສະຕຣິງ ແລະຄ່າຄົງທີ່ຈຸດລອຍ)
ໃນທົ່ວຫນ່ວຍງານລວບລວມ.

ຕົວເລືອກນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນສໍາລັບການລວບລວມຂໍ້ມູນທີ່ເຫມາະສົມຖ້າຕົວປະກອບແລະຕົວເຊື່ອມຕໍ່
ສະຫນັບສະຫນູນມັນ. ໃຊ້ -fno-merge-ຄົງທີ່ ເພື່ອຂັດຂວາງພຶດຕິກໍານີ້.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fmerge-ທັງໝົດ-ຄົງທີ່
ພະຍາຍາມລວມຄ່າຄົງທີ່ທີ່ຄືກັນ ແລະຕົວແປທີ່ຄືກັນ.

ທາງເລືອກນີ້ຫມາຍເຖິງ -fmerge-ຄົງທີ່. ນອກ​ຈາກ​ນັ້ນ -fmerge-ຄົງທີ່ ນີ້
ພິ​ຈາ​ລະ​ນາ​ຕົວ​ຢ່າງ​ເຖິງ​ແມ່ນ​ວ່າ arrays ເບື້ອງ​ຕົ້ນ​ຄົງ​ທີ່​ຫຼື​ຕົວ​ແປ​ຄົງ​ທີ່​ເບື້ອງ​ຕົ້ນ​ທີ່​ມີ
ປະ​ເພດ​ປະ​ສົມ​ຫຼື​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​. ພາສາເຊັ່ນ C ຫຼື C ++ ຕ້ອງການແຕ່ລະຕົວແປ,
ລວມທັງຫຼາຍຕົວຢ່າງຂອງຕົວແປດຽວກັນໃນການໂທ recursive, ເພື່ອໃຫ້ມີຄວາມແຕກຕ່າງກັນ
ສະຖານທີ່, ດັ່ງນັ້ນການນໍາໃຊ້ທາງເລືອກນີ້ເຮັດໃຫ້ພຶດຕິກໍາທີ່ບໍ່ສອດຄ່ອງ.

-fmodulo-sched
ດໍາເນີນການກໍານົດເວລາ swing modulo ທັນທີກ່ອນທີ່ຈະກໍານົດເວລາທໍາອິດຜ່ານ. ນີ້
pass ເບິ່ງຢູ່ໃນ loops ພາຍໃນທີ່ສຸດແລະ reorders ຄໍາແນະນໍາຂອງເຂົາເຈົ້າໂດຍການ overlapping ທີ່ແຕກຕ່າງກັນ
ການຊໍ້າຄືນ.

-fmodulo-sched-allow-regmoves
ປະຕິບັດການກຳນົດເວລາໂມດູໂລທີ່ອີງໃສ່ SMS ທີ່ຮຸກຮານຫຼາຍຂຶ້ນດ້ວຍການຍ້າຍການລົງທະບຽນທີ່ອະນຸຍາດ. ໂດຍ
ການຕັ້ງທຸງນີ້ ຂອບຕ້ານການເອື່ອຍອີງທີ່ແນ່ນອນຈະຖືກລຶບ, ເຊິ່ງກໍ່ໃຫ້ເກີດການ
ການຜະລິດຂອງການເຄື່ອນໄຫວ reg ໂດຍອີງໃສ່ການວິເຄາະໄລຍະຊີວິດ. ທາງເລືອກນີ້ມີປະສິດທິພາບ
ພຽງແຕ່ມີ -fmodulo-sched enabled

-fno-branch-count-reg
ຢ່າໃຊ້ຄໍາແນະນໍາ "ຫຼຸດລົງແລະສາຂາ" ໃນທະບຽນການນັບ, ແຕ່ແທນທີ່ຈະ
ສ້າງລໍາດັບຂອງຄໍາແນະນໍາທີ່ຫຼຸດລົງການລົງທະບຽນ, ປຽບທຽບກັບ
ສູນ, ຫຼັງຈາກນັ້ນສາຂາໂດຍອີງໃສ່ຜົນໄດ້ຮັບ. ຕົວເລືອກນີ້ມີຄວາມຫມາຍພຽງແຕ່ກ່ຽວກັບ
ສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນຄໍາແນະນໍາດັ່ງກ່າວ, ເຊິ່ງປະກອບມີ x86, PowerPC, IA-64 ແລະ
S / 390.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O1 ແລະສູງກວ່າ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fbranch-count-reg.

-fno-function-cse
ຢ່າໃສ່ທີ່ຢູ່ຂອງຫນ້າທີ່ຢູ່ໃນທະບຽນ; ເຮັດແຕ່ລະຄໍາແນະນໍາທີ່ໂທຫາ a
ຟັງຊັນຄົງທີ່ປະກອບດ້ວຍທີ່ຢູ່ຂອງຟັງຊັນຢ່າງຊັດເຈນ.

ທາງເລືອກນີ້ສົ່ງຜົນໃຫ້ລະຫັດປະສິດທິພາບຫນ້ອຍ, ແຕ່ບາງ hacks strange ທີ່ປ່ຽນແປງໄດ້
ຜົນຜະລິດຂອງ assembler ອາດຈະສັບສົນໂດຍການເພີ່ມປະສິດທິພາບທີ່ປະຕິບັດໃນເວລາທີ່ທາງເລືອກນີ້ແມ່ນ
ບໍ່​ໄດ້​ນໍາ​ໃຊ້.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -function-cse

-fno-zero-initialized-in-bss
ຖ້າເປົ້າຫມາຍສະຫນັບສະຫນູນພາກສ່ວນ BSS, GCC ໂດຍຄ່າເລີ່ມຕົ້ນຈະວາງຕົວແປທີ່ເປັນ
ເລີ່ມຕົ້ນເປັນສູນເຂົ້າໄປໃນ BSS. ນີ້ສາມາດປະຫຍັດພື້ນທີ່ໃນລະຫັດຜົນໄດ້ຮັບ.

ຕົວເລືອກນີ້ປິດພຶດຕິກໍານີ້ເພາະວ່າບາງໂຄງການອີງໃສ່ຕົວແປຢ່າງຊັດເຈນ
ໄປ​ທີ່​ຂໍ້​ມູນ​ພາກ​ສ່ວນ --- ຕົວ​ຢ່າງ​, ດັ່ງ​ນັ້ນ​ການ​ປະ​ຕິ​ບັດ​ຜົນ​ໄດ້​ຮັບ​ສາ​ມາດ​ຊອກ​ຫາ​ໄດ້​
ການເລີ່ມຕົ້ນຂອງພາກນັ້ນແລະ / ຫຼືເຮັດໃຫ້ສົມມຸດຕິຖານໂດຍອີງໃສ່ນັ້ນ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fzero-initialized-in-bss.

-fthread-jumps
ປະຕິບັດການເພີ່ມປະສິດທິພາບທີ່ກວດເບິ່ງວ່າມີສາຂາໂດດໄປຫາບ່ອນອື່ນຫຼືບໍ່
ການປຽບທຽບທີ່ເອົາມາໂດຍອັນທໍາອິດແມ່ນພົບເຫັນ. ຖ້າເປັນດັ່ງນັ້ນ, ສາຂາທໍາອິດຖືກໂອນໄປຫາ
ບໍ່ວ່າຈຸດຫມາຍປາຍທາງຂອງສາຂາທີສອງຫຼືຈຸດທີ່ຕິດຕາມມັນທັນທີ,
ຂຶ້ນກັບວ່າເງື່ອນໄຂທີ່ຮູ້ວ່າເປັນຄວາມຈິງ ຫຼືບໍ່ຖືກຕ້ອງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fsplit-wide-types
ເມື່ອໃຊ້ປະເພດທີ່ຄອບຄອງຫຼາຍທະບຽນ, ເຊັ່ນ "ຍາວຍາວ" ໃນ 32-bit
ລະ​ບົບ​, ການ​ແບ່ງ​ປັນ​ການ​ຈົດ​ທະ​ບຽນ​ແຍກ​ຕ່າງ​ຫາກ​ແລະ​ຈັດ​ສັນ​ໃຫ້​ເຂົາ​ເຈົ້າ​ເປັນ​ເອ​ກະ​ລາດ​. ນີ້ຕາມປົກກະຕິ
ສ້າງລະຫັດທີ່ດີກວ່າສໍາລັບປະເພດເຫຼົ່ານັ້ນ, ແຕ່ອາດຈະເຮັດໃຫ້ການດີບັກມີຄວາມຫຍຸ້ງຍາກຫຼາຍ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fcse-follow-jumps
ໃນການລົບລ້າງ subexpression ທົ່ວໄປ (CSE), ສະແກນຜ່ານຄໍາແນະນໍາກະໂດດໃນເວລາທີ່
ເປົ້າໝາຍຂອງການກະໂດດບໍ່ບັນລຸໄດ້ໂດຍທາງອື່ນ. ຕົວຢ່າງ, ເມື່ອ CSE ພົບ
ຄໍາຖະແຫຼງ "ຖ້າ" ທີ່ມີປະໂຫຍກ "ອື່ນ", CSE ປະຕິບັດຕາມການກະໂດດໃນເວລາທີ່ເງື່ອນໄຂ
ການທົດສອບແມ່ນບໍ່ຖືກຕ້ອງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fcse-skip-blocks
ນີ້ແມ່ນຄ້າຍຄືກັນກັບ -fcse-follow-jumps, ແຕ່ເຮັດໃຫ້ CSE ປະຕິບັດຕາມການກະໂດດ
ຕາມເງື່ອນໄຂໃຫ້ຂ້າມທ່ອນໄມ້. ເມື່ອ CSE ພົບກັບຄໍາຖະແຫຼງທີ່ງ່າຍດາຍ "ຖ້າ" ທີ່ບໍ່ມີ
ຂໍ້​ອື່ນ​, -fcse-skip-blocks ເຮັດໃຫ້ CSE ປະຕິບັດຕາມການກະໂດດປະມານຮ່າງກາຍຂອງ
"ຖ້າ".

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-frerun-cse-after-loop
ດໍາເນີນການລົບລ້າງ subexpression ທົ່ວໄປຄືນໃຫມ່ຫຼັງຈາກການເພີ່ມປະສິດທິພາບ loop ຖືກປະຕິບັດ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fgcse
ດໍາເນີນການຜ່ານການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກ. ຜ່ານນີ້ຍັງປະຕິບັດ
ຄົງທີ່ໃນທົ່ວໂລກແລະການຂະຫຍາຍພັນສໍາເນົາ.

ຫມາຍ​ເຫດ​: ເມື່ອລວບລວມໂຄງການໂດຍໃຊ້ computed gotos, ການຂະຫຍາຍ GCC, ທ່ານອາດຈະໄດ້ຮັບ
ການປະຕິບັດເວລາແລ່ນທີ່ດີກວ່າຖ້າທ່ານປິດການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກ
ຜ່ານໂດຍການເພີ່ມ -fno-gcse ໄປຫາເສັ້ນຄໍາສັ່ງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fgcse-lm
ເມື່ອ​ໃດ​ -fgcse-lm ຖືກເປີດໃຊ້, ການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກພະຍາຍາມຍ້າຍ
ການໂຫຼດທີ່ພຽງແຕ່ຖືກຂ້າໂດຍຮ້ານຄ້າເຂົ້າໄປໃນຕົວຂອງມັນເອງ. ນີ້ອະນຸຍາດໃຫ້ loop ປະກອບດ້ວຍ a
ລຳດັບການໂຫຼດ/ເກັບຮັກສາເພື່ອປ່ຽນເປັນການໂຫຼດຢູ່ນອກວົງການ, ແລະສຳເນົາ/ເກັບຮັກສາພາຍໃນ
the loop

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອ -fgcse ເປີດໃຊ້ງານ.

-fgcse-sm
ເມື່ອ​ໃດ​ -fgcse-sm ຖືກເປີດໃຊ້ງານ, store motion pass ແມ່ນດໍາເນີນການຫຼັງຈາກທົ່ວໄປທົ່ວໂລກ
ການ​ລົບ​ລ້າງ subexpression​. ບັດນີ້ພະຍາຍາມຍ້າຍຮ້ານຄ້າອອກຈາກ loops. ເມື່ອໃຊ້
ຮ່ວມກັນກັບ -fgcse-lm, loops ທີ່ມີລໍາດັບການໂຫຼດ / ຮ້ານສາມາດປ່ຽນແປງໄດ້
ກັບການໂຫຼດກ່ອນ loop ແລະຮ້ານຫຼັງຈາກ loop.

ບໍ່ໄດ້ເປີດໃຊ້ໃນລະດັບການເພີ່ມປະສິດທິພາບໃດໆ.

-fgcse-las
ເມື່ອ​ໃດ​ -fgcse-las ຖືກເປີດໃຊ້ງານ, ການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກ
ກໍາຈັດການໂຫຼດທີ່ຊໍ້າຊ້ອນທີ່ມາຈາກຮ້ານຄ້າໄປຫາສະຖານທີ່ຫນ່ວຍຄວາມຈໍາດຽວກັນ (ທັງສອງ
ຊ້ຳຊ້ອນບາງສ່ວນ ແລະເຕັມ).

ບໍ່ໄດ້ເປີດໃຊ້ໃນລະດັບການເພີ່ມປະສິດທິພາບໃດໆ.

-fgcse-after-reload
ເມື່ອ​ໃດ​ -fgcse-after-reload ຖືກເປີດໃຊ້ແລ້ວ, ການກໍາຈັດການໂຫຼດຊໍ້າຊ້ອນແມ່ນດໍາເນີນການ
ຫຼັງຈາກໂຫຼດໃໝ່. ຈຸດ​ປະ​ສົງ​ຂອງ​ການ​ຜ່ານ​ຄັ້ງ​ນີ້​ແມ່ນ​ເພື່ອ​ທໍາ​ຄວາມ​ສະ​ອາດ​ການ​ຮົ່ວ​ໄຫລ​ຊ້ຳ​ຊ້ອນ.

-faggressive-loop-optimizations
ຕົວເລືອກນີ້ບອກຕົວເພີ່ມປະສິດທິພາບຂອງ loop ໃຫ້ໃຊ້ຂໍ້ຈໍາກັດຂອງພາສາເພື່ອກໍານົດຂອບເຂດສໍາລັບ
ຈໍາ​ນວນ​ຂອງ​ການ​ຊ​້​ໍາ​ຂອງ loop ໄດ້​. ນີ້ສົມມຸດວ່າລະຫັດ loop ບໍ່ໄດ້ຮຽກຮ້ອງ
ພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດໂດຍຕົວຢ່າງເຮັດໃຫ້ຈໍານວນເຕັມລົງລາຍເຊັນ overflows ຫຼື out-of-bound
ການເຂົ້າເຖິງ array. ຂອບເຂດສໍາລັບຈໍານວນຂອງການຊໍ້າຄືນຂອງ loop ຖືກນໍາໃຊ້ເພື່ອນໍາພາ
loop unrolling ແລະການປອກເປືອກແລະ loop exit ການເພີ່ມປະສິດທິພາບການທົດສອບ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້
ໂດຍຄ່າເລີ່ມຕົ້ນ

-funsafe-loop-optimizations
ຕົວເລືອກນີ້ບອກຕົວເພີ່ມປະສິດທິພາບ loop ໃຫ້ສົມມຸດວ່າດັດຊະນີ loop ບໍ່ overflow, ແລະ
ວ່າ loops ທີ່ມີເງື່ອນໄຂທາງອອກ nontrivial ແມ່ນບໍ່ເປັນນິດ. ນີ້ເຮັດໃຫ້ກວ້າງຂຶ້ນ
ຊ່ວງຂອງການເພີ່ມປະສິດທິພາບຂອງ loop ເຖິງແມ່ນວ່າຕົວເພີ່ມປະສິດທິພາບ loop ຕົວມັນເອງບໍ່ສາມາດພິສູດໄດ້ວ່າສິ່ງເຫຼົ່ານີ້
ສົມມຸດຕິຖານຖືກຕ້ອງ. ຖ້າທ່ານໃຊ້ -Wunsafe-loop-optimizations, compiler ເຕືອນທ່ານ
ຖ້າຫາກວ່າມັນພົບເຫັນປະເພດຂອງ loop ນີ້.

-fcrossjumping
ປະຕິບັດການຫັນປ່ຽນຂ້າມໂດດ. ການຫັນເປັນນີ້ unifies ລະຫັດທຽບເທົ່າແລະ
ບັນທຶກຂະຫນາດລະຫັດ. ລະຫັດຜົນໄດ້ຮັບອາດຈະຫຼືອາດຈະບໍ່ປະຕິບັດໄດ້ດີກ່ວາບໍ່ມີ cross-
ໂດດ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fauto-inc-dec
ສົມທົບການເພີ່ມຂຶ້ນຫຼືຫຼຸດລົງຂອງທີ່ຢູ່ທີ່ມີການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາ. ຜ່ານນີ້ແມ່ນ
ສະເຫມີຂ້າມສະຖາປັດຕະຍະກໍາທີ່ບໍ່ມີຄໍາແນະນໍາເພື່ອສະຫນັບສະຫນູນສິ່ງນີ້.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າກ່ຽວກັບສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນນີ້.

-fdce
ດໍາເນີນການກໍາຈັດລະຫັດຕາຍ (DCE) ໃນ RTL. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fdse
ດໍາເນີນການກໍາຈັດຮ້ານຕາຍ (DSE) ໃນ RTL. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fif ການ​ປ່ຽນ​ແປງ​
ພະຍາຍາມຫັນປ່ຽນການໂດດຕາມເງື່ອນໄຂໄປສູ່ການທຽບເທົ່າສາຂາ-ໜ້ອຍ. ນີ້ປະກອບມີ
ການນໍາໃຊ້ການເຄື່ອນໄຫວຕາມເງື່ອນໄຂ, min, ສູງສຸດ, ກໍານົດທຸງແລະຄໍາແນະນໍາ abs, ແລະບາງ tricks
ສາມາດເຮັດໄດ້ໂດຍເລກເລກມາດຕະຖານ. ການນໍາໃຊ້ການປະຕິບັດເງື່ອນໄຂໃນຊິບບ່ອນທີ່ມັນຢູ່
ສາມາດໃຊ້ໄດ້ແມ່ນຄວບຄຸມໂດຍ -fif ການ​ປ່ຽນ​ແປງ 2​.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fif ການ​ປ່ຽນ​ແປງ 2​
ໃຊ້ການປະຕິບັດຕາມເງື່ອນໄຂ (ບ່ອນມີ) ເພື່ອປ່ຽນການກະໂດດຕາມເງື່ອນໄຂ
ສາຂາ-ໜ້ອຍທຽບເທົ່າ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fdeclone-ctor-dtor
C ++ ABI ຕ້ອງການຈຸດເຂົ້າຫຼາຍຈຸດສໍາລັບຜູ້ກໍ່ສ້າງ ແລະຕົວທໍາລາຍ: ຫນຶ່ງສໍາລັບ a
subobject ພື້ນຖານ, ຫນຶ່ງສໍາລັບວັດຖຸທີ່ສົມບູນ, ແລະຫນຶ່ງສໍາລັບການ destructor virtual ທີ່ໂທຫາ
ຜູ້ປະກອບການລຶບອອກຫຼັງຈາກນັ້ນ. ສໍາລັບລໍາດັບຊັ້ນທີ່ມີຖານ virtual, ພື້ນຖານແລະສົມບູນ
variants ແມ່ນ clones, ຊຶ່ງຫມາຍຄວາມວ່າສອງສໍາເນົາຂອງຫນ້າທີ່. ດ້ວຍທາງເລືອກນີ້, ໄດ້
ພື້ນຖານແລະຕົວແປທີ່ສົມບູນໄດ້ຖືກປ່ຽນເປັນຂອບໃຈທີ່ເອີ້ນການປະຕິບັດທົ່ວໄປ.

ເປີດໃຊ້ໂດຍ -ອສ.

-fdelete-null-pointer-checks
ສົມມຸດວ່າບັນດາໂຄງການບໍ່ສາມາດອ້າງອີງຕົວຊີ້ null ໄດ້ຢ່າງປອດໄພ, ແລະບໍ່ມີລະຫັດ ຫຼືຂໍ້ມູນ
ອົງ​ປະ​ກອບ​ອາ​ໃສ​ຢູ່​ທີ່​ນັ້ນ​. ນີ້ເຮັດໃຫ້ການເພີ່ມປະສິດທິພາບການພັບຄົງທີ່ງ່າຍດາຍຢູ່ທັງຫມົດ
ລະດັບການເພີ່ມປະສິດທິພາບ. ນອກຈາກນັ້ນ, ການເພີ່ມປະສິດທິພາບອື່ນໆໃນ GCC ໃຊ້ທຸງນີ້ເພື່ອ
ຄວບຄຸມການວິເຄາະກະແສຂໍ້ມູນທົ່ວໂລກທີ່ລົບລ້າງການກວດສອບທີ່ບໍ່ມີປະໂຫຍດສໍາລັບຕົວຊີ້ null;
ເຫຼົ່ານີ້ສົມມຸດວ່າຖ້າຕົວຊີ້ຖືກກວດສອບຫຼັງຈາກມັນຖືກປະຕິເສດແລ້ວ, ມັນ
ບໍ່ສາມາດເປັນ null.

ໃຫ້ສັງເກດວ່າແນວໃດກໍ່ຕາມ, ໃນບາງສະພາບແວດລ້ອມ, ການສົມມຸດຕິຖານນີ້ບໍ່ແມ່ນຄວາມຈິງ. ໃຊ້
-fno-delete-null-pointer-checks ເພື່ອປິດການເພີ່ມປະສິດທິພາບນີ້ສໍາລັບໂຄງການທີ່ຂຶ້ນກັບ
ກ່ຽວ​ກັບ​ພຶດຕິ​ກຳ​ນັ້ນ.

ບາງເປົ້າໝາຍ, ໂດຍສະເພາະອັນທີ່ຝັງໄວ້, ປິດການນຳໃຊ້ຕົວເລືອກນີ້ໃນທຸກລະດັບ. ຖ້າບໍ່ດັ່ງນັ້ນ
ມັນຖືກເປີດໃຊ້ໃນທຸກລະດັບ: -O0, -O1, -O2, -O3, -ອສ. ຜ່ານທີ່ໃຊ້ຂໍ້ມູນ
ຖືກເປີດໃຊ້ເປັນເອກະລາດໃນລະດັບການເພີ່ມປະສິດທິພາບທີ່ແຕກຕ່າງກັນ.

-fdevirtualize
ພະຍາຍາມປ່ຽນການໂທເປັນຟັງຊັນສະເໝືອນເປັນການໂທໂດຍກົງ. ນີ້ແມ່ນເຮັດທັງສອງ
ພາຍໃນຂັ້ນຕອນແລະ interprocedurally ເປັນສ່ວນຫນຶ່ງຂອງ inlining ທາງອ້ອມ
(-findirect-inlining) ແລະ​ການ​ຂະ​ຫຍາຍ​ພັນ​ຄົງ​ທີ່ interprocedural (-fipa-cp). ເປີດໃຊ້ຢູ່
ລະດັບ -O2, -O3, -ອສ.

-fdevirtualize-speculatively
ພະຍາຍາມປ່ຽນການໂທໄປເປັນຟັງຊັນສະເໝືອນເປັນການໂທໂດຍກົງແບບຄາດເດົາ. ອີງໃສ່
ການ​ວິ​ເຄາະ​ຮູບ​ການ​ສືບ​ທອດ​ປະ​ເພດ​, ການ​ກໍາ​ນົດ​ສໍາ​ລັບ​ການ​ເອີ້ນ​ທີ່​ກໍາ​ນົດ​ໄວ້​ຂອງ​
ເປົ້າ​ຫມາຍ​ທີ່​ເປັນ​ໄປ​ໄດ້​. ຖ້າຊຸດມີຂະຫນາດນ້ອຍ, ມັກຂະຫນາດ 1, ປ່ຽນການໂທເປັນ a
ການຕັດສິນໃຈຕາມເງື່ອນໄຂລະຫວ່າງການໂທໂດຍກົງແລະທາງອ້ອມ. ການໂທທີ່ຄາດເດົາໄດ້ເປີດໃຊ້ງານ
ການເພີ່ມປະສິດທິພາບເພີ່ມເຕີມ, ເຊັ່ນ inlining. ໃນເວລາທີ່ພວກເຂົາເບິ່ງຄືວ່າບໍ່ມີປະໂຫຍດຕໍ່ໄປອີກ
ການເພີ່ມປະສິດທິພາບ, ພວກມັນຖືກປ່ຽນເປັນຮູບແບບຕົ້ນສະບັບ.

-fdevirtualize-at-ltrans
Stream ຂໍ້ມູນເພີ່ມເຕີມທີ່ຈໍາເປັນສໍາລັບການ devirtualization ຮຸກຮານໃນເວລາທີ່ແລ່ນການເຊື່ອມຕໍ່-
ເຄື່ອງມືປັບປຸງເວລາໃນຮູບແບບການຫັນເປັນທ້ອງຖິ່ນ. ທາງເລືອກນີ້ເຮັດໃຫ້ຫຼາຍ
devirtualization ແຕ່ຢ່າງຫຼວງຫຼາຍເພີ່ມຂະຫນາດຂອງຂໍ້ມູນນ້ໍາ. ສໍາລັບການນີ້
ເຫດຜົນມັນຖືກປິດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ.

-fexpensive-optimizations
ປະຕິບັດການເພີ່ມປະສິດທິພາບເລັກນ້ອຍທີ່ຂ້ອນຂ້າງແພງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

ຟຣີ
ພະຍາຍາມເອົາຄໍາແນະນໍາການຂະຫຍາຍທີ່ຊໍ້າຊ້ອນ. ນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະສໍາລັບ
ສະຖາປັດຕະຍະກໍາ x86-64, ເຊິ່ງ implicitly zero-extens ໃນ 64-bit registers ຫຼັງຈາກ.
ຂຽນໃສ່ເຄິ່ງ 32-bit ຕ່ໍາຂອງພວກເຂົາ.

ເປີດໃຊ້ສໍາລັບ Alpha, AArch64 ແລະ x86 ໃນລະດັບ -O2, -O3, -ອສ.

-fno-lifetime-dse
ໃນ C ++ ມູນຄ່າຂອງວັດຖຸໄດ້ຮັບຜົນກະທົບພຽງແຕ່ການປ່ຽນແປງພາຍໃນຊີວິດຂອງມັນ: ເມື່ອ
constructor ເລີ່ມຕົ້ນ, ວັດຖຸມີຄ່າ indeterminate, ແລະການປ່ຽນແປງໃດໆໃນລະຫວ່າງ
ອາຍຸຂອງວັດຖຸແມ່ນຕາຍເມື່ອວັດຖຸຖືກທໍາລາຍ. ປົກກະຕິຮ້ານຕາຍ
ການລົບລ້າງຈະໃຊ້ປະໂຫຍດຈາກສິ່ງນີ້; ຖ້າລະຫັດຂອງທ່ານອີງໃສ່ມູນຄ່າຂອງ
ການ​ເກັບ​ຮັກ​ສາ​ວັດ​ຖຸ​ທີ່​ຍັງ​ຄົງ​ຢູ່​ເກີນ​ຊີ​ວິດ​ຂອງ​ວັດ​ຖຸ​, ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້​ທຸງ​ນີ້​ເພື່ອ​
ປິດການເພີ່ມປະສິດທິພາບນີ້.

-flive-range-shrinkage
ພະຍາຍາມຫຼຸດຜ່ອນຄວາມກົດດັນຂອງການລົງທະບຽນໂດຍຜ່ານການຫົດຕົວຂອງລະດັບຊີວິດການລົງທະບຽນ. ນີ້​ແມ່ນ
ທີ່ເປັນປະໂຫຍດສໍາລັບໂປເຊດເຊີໄວທີ່ມີຊຸດລົງທະບຽນຂະຫນາດນ້ອຍຫຼືປານກາງ.

-fira-algorithm=ຂັ້ນຕອນວິທີ
ໃຊ້ສູດການໃສ່ສີທີ່ລະບຸໄວ້ສໍາລັບຜູ້ຈັດສັນການລົງທະບຽນປະສົມປະສານ. ໄດ້
ຂັ້ນຕອນວິທີ ການໂຕ້ຖຽງສາມາດເປັນ ບູລິມະສິດ, ເຊິ່ງກໍານົດສີບູລິມະສິດຂອງ Chow, ຫຼື CB,
ເຊິ່ງລະບຸການໃສ່ສີ Chaitin-Briggs. ການໃສ່ສີ Chaitin-Briggs ບໍ່ໄດ້ຖືກປະຕິບັດ
ສໍາລັບສະຖາປັດຕະຍະກໍາທັງຫມົດ, ແຕ່ສໍາລັບເປົ້າຫມາຍເຫຼົ່ານັ້ນທີ່ສະຫນັບສະຫນູນມັນ, ມັນເປັນຄ່າເລີ່ມຕົ້ນ
ເນື່ອງຈາກວ່າມັນສ້າງລະຫັດທີ່ດີກວ່າ.

-fira-region=ພູມິພາກ
ໃຊ້ພາກພື້ນທີ່ລະບຸໄວ້ສໍາລັບຜູ້ຈັດສັນການລົງທະບຽນປະສົມປະສານ. ໄດ້ ພູມິພາກ ການໂຕ້ຖຽງ
ຄວນຈະເປັນຫນຶ່ງໃນດັ່ງຕໍ່ໄປນີ້:

ທັງຫມົດ ໃຊ້ loops ທັງໝົດເປັນເຂດການຈັດສັນການລົງທະບຽນ. ນີ້ສາມາດໃຫ້ຜົນໄດ້ຮັບທີ່ດີທີ່ສຸດສໍາລັບ
ເຄື່ອງຈັກທີ່ມີຊຸດການລົງທະບຽນຂະຫນາດນ້ອຍແລະ / ຫຼືສະຫມໍ່າສະເຫມີ.

ປະສົມ
ໃຊ້ loops ທັງຫມົດຍົກເວັ້ນ loops ທີ່ມີຄວາມກົດດັນລົງທະບຽນຂະຫນາດນ້ອຍເປັນພາກພື້ນ. ນີ້
ຄ່າປົກກະຕິຈະໃຫ້ຜົນໄດ້ຮັບທີ່ດີທີ່ສຸດໃນກໍລະນີຫຼາຍທີ່ສຸດແລະສໍາລັບສະຖາປັດຕະຍະກໍາສ່ວນໃຫຍ່, ແລະ
ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອລວບລວມກັບການເພີ່ມປະສິດທິພາບສໍາລັບຄວາມໄວ (-O, -O2, ...).

ຫນຶ່ງ ໃຊ້ຟັງຊັນທັງໝົດເປັນພາກພື້ນດຽວ. ໂດຍທົ່ວໄປແລ້ວນີ້ເຮັດໃຫ້ລະຫັດນ້ອຍທີ່ສຸດ
ຂະຫນາດ, ແລະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບ -ອສ or -O0.

-fira-hoist-pressure
ໃຊ້ IRA ເພື່ອປະເມີນຄວາມກົດດັນຂອງການລົງທະບຽນໃນລະຫັດ hoisting pass ສໍາລັບການຕັດສິນໃຈທີ່ຈະ hoist
ການສະແດງອອກ. ຕົວເລືອກນີ້ມັກຈະເຮັດໃຫ້ລະຫັດຂະຫນາດນ້ອຍກວ່າ, ແຕ່ມັນສາມາດຊ້າລົງ
compiler ລົງ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໃນລະດັບ -ອສ ສໍາລັບເປົ້າຫມາຍທັງຫມົດ.

-fira-loop-pressure
ໃຊ້ IRA ເພື່ອປະເມີນຄວາມກົດດັນຂອງການລົງທະບຽນໃນ loops ສໍາລັບການຕັດສິນໃຈຍ້າຍ loop invariants.
ທາງ​ເລືອກ​ນີ້​ໂດຍ​ປົກ​ກະ​ຕິ​ຜົນ​ໄດ້​ຮັບ​ໃນ​ການ​ຜະ​ລິດ​ຂອງ​ລະ​ຫັດ​ໄວ​ແລະ​ຂະ​ຫນາດ​ນ້ອຍ​ໃນ​ເຄື່ອງ​ຈັກ​ທີ່​ມີ
ໄຟລ໌ລົງທະບຽນຂະຫນາດໃຫຍ່ (>= 32 ລົງທະບຽນ), ແຕ່ມັນສາມາດເຮັດໃຫ້ compiler ຊ້າລົງ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໃນລະດັບ -O3 ສໍາລັບບາງເປົ້າໝາຍ.

-fno-ira-share-save-slots
ປິດການໃຊ້ງານການແບ່ງປັນສະລັອດຕິງທີ່ໃຊ້ເພື່ອບັນທຶກການໂທທີ່ໃຊ້ຍາກໃນການລົງທະບຽນ
ໂທ. ແຕ່ລະການລົງທະບຽນຍາກໄດ້ຮັບຊ່ອງ stack ແຍກຕ່າງຫາກ, ແລະເປັນ stack ຫນ້າທີ່ຜົນໄດ້ຮັບ
ກອບມີຂະຫນາດໃຫຍ່ກວ່າ.

-fno-ira-share-spill-slots
ປິດການນຳໃຊ້ການແບ່ງປັນສະລັອດຕິງທີ່ຈັດສັນໄວ້ສຳລັບການລົງທະບຽນ pseudo. ແຕ່ລະ pseudo-ລົງທະບຽນ
ທີ່ບໍ່ໄດ້ຮັບການລົງທະບຽນຍາກໄດ້ຮັບສະລັອດຕິງ stack ແຍກຕ່າງຫາກ, ແລະເປັນຫນ້າທີ່ຜົນໄດ້ຮັບ
stack frames ມີຂະຫນາດໃຫຍ່ກວ່າ.

-fira-verbose=n
ຄວບຄຸມ verbosity ຂອງໄຟລ໌ dump ສໍາລັບຜູ້ຈັດສັນການລົງທະບຽນປະສົມປະສານ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 5. ຖ້າຄ່າ n ແມ່ນໃຫຍ່ກວ່າຫຼືເທົ່າກັບ 10, ຜົນຜະລິດ dump ຖືກສົ່ງໄປ
to stderr ໂດຍໃຊ້ຮູບແບບດຽວກັນກັບ n ລົບ 10.

-flra-remat
ເປີດໃຊ້ CFG-sensitive rematerialization ໃນ LRA. ແທນທີ່ຈະໂຫລດມູນຄ່າຂອງການຮົ່ວໄຫລ
pseudos, LRA ພະຍາຍາມ rematerialize (recalculate) ຄ່າຖ້າຫາກວ່າມັນມີກໍາໄລ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fdelayed-ສາຂາ
ຖ້າສະຫນັບສະຫນູນເຄື່ອງຈັກເປົ້າຫມາຍ, ພະຍາຍາມຈັດລໍາດັບຄໍາແນະນໍາຄືນໃຫມ່ເພື່ອຂຸດຄົ້ນ
ຊ່ອງຄໍາແນະນໍາທີ່ມີຢູ່ຫຼັງຈາກຄໍາແນະນໍາສາຂາທີ່ຊັກຊ້າ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fschedule-insns
ຖ້າສະຫນັບສະຫນູນເຄື່ອງຈັກເປົ້າຫມາຍ, ພະຍາຍາມຈັດລໍາດັບຄໍາແນະນໍາຄືນໃຫມ່ເພື່ອລົບລ້າງ
ການ​ປະ​ຕິ​ບັດ​ຢຸດ​ເຊົາ​ເນື່ອງ​ຈາກ​ວ່າ​ຂໍ້​ມູນ​ທີ່​ຈໍາ​ເປັນ​ບໍ່​ມີ​. ນີ້ຊ່ວຍເຄື່ອງຈັກທີ່
ມີຈຸດເລື່ອນຊ້າຫຼືຄໍາແນະນໍາການໂຫຼດຫນ່ວຍຄວາມຈໍາໂດຍການອະນຸຍາດໃຫ້ຄໍາແນະນໍາອື່ນໆ
ຈະຖືກອອກຈົນກ່ວາຜົນຂອງການໂຫຼດຫຼືຄໍາແນະນໍາທີ່ເລື່ອນໄດ້ແມ່ນຕ້ອງການ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-fschedule-insns2
ຄ້າຍ​ຄື​ກັບ -fschedule-insns, ແຕ່ຂໍໃຫ້ມີການກໍານົດເວລາການສອນເພີ່ມເຕີມ
ຫຼັງ​ຈາກ​ການ​ຈັດ​ສັນ​ການ​ລົງ​ທະ​ບຽນ​ໄດ້​ຮັບ​ການ​ເຮັດ​ໄດ້​. ນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະໃນເຄື່ອງຈັກທີ່ມີ a
ຈໍານວນການລົງທະບຽນຂ້ອນຂ້າງຫນ້ອຍແລະບ່ອນທີ່ຄໍາແນະນໍາການໂຫຼດຫນ່ວຍຄວາມຈໍາໃຊ້ເວລາຫຼາຍກ່ວາ
ຫນຶ່ງຮອບ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fno-sched-interblock
ຢ່າຈັດຕາຕະລາງຄໍາແນະນໍາໃນທົ່ວບລັອກພື້ນຖານ. ປົກກະຕິອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ໃນເວລາທີ່ກໍານົດເວລາກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນ, ie ກັບ -fschedule-insns ຫຼືຢູ່ -O2 or
ສູງຂຶ້ນ.

-fno-sched-spec
ບໍ່ອະນຸຍາດໃຫ້ມີການເຄື່ອນໄຫວແບບຄາດເດົາຂອງຄໍາແນະນໍາທີ່ບໍ່ແມ່ນການໂຫຼດ. ປົກກະຕິນີ້ແມ່ນເປີດໃຊ້ໂດຍ
default ໃນເວລາທີ່ກໍານົດເວລາກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນ, ie ກັບ -fschedule-insns ຫຼືຢູ່
-O2 ຫຼືສູງກວ່າ.

-fsched-ຄວາມກົດດັນ
ເປີດໃຊ້ການລົງທະບຽນ insn ກໍານົດເວລາທີ່ມີຄວາມກົດດັນທີ່ລະອຽດອ່ອນກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນ. ນີ້
ພຽງແຕ່ເຮັດໃຫ້ຄວາມຮູ້ສຶກໃນເວລາທີ່ກໍານົດເວລາກ່ອນການຈັດສັນການລົງທະບຽນຖືກເປີດໃຊ້, ie
-fschedule-insns ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ. ການ​ນໍາ​ໃຊ້​ທາງ​ເລືອກ​ນີ້​ສາ​ມາດ​ປັບ​ປຸງ​ການ​ຜະ​ລິດ​ໄດ້​
ລະ​ຫັດ​ແລະ​ຫຼຸດ​ລົງ​ຂະ​ຫນາດ​ຂອງ​ຕົນ​ໂດຍ​ການ​ປ້ອງ​ກັນ​ຄວາມ​ກົດ​ດັນ​ການ​ຈົດ​ທະ​ບຽນ​ເພີ່ມ​ຂຶ້ນ​ຂ້າງ​ເທິງ​ຕົວ​ເລກ​ໄດ້​
ຂອງການລົງທະບຽນແຂງທີ່ມີຢູ່ແລະການຮົ່ວໄຫຼຕໍ່ມາໃນການຈັດສັນການລົງທະບຽນ.

-fsched-spec-load
ອະ​ນຸ​ຍາດ​ໃຫ້​ມີ​ການ​ເຄື່ອນ​ໄຫວ​ຄາດ​ຄະ​ເນ​ຂອງ​ບາງ​ຄໍາ​ແນະ​ນໍາ​ການ​ໂຫຼດ​. ນີ້ພຽງແຕ່ເຮັດໃຫ້ຄວາມຮູ້ສຶກໃນເວລາທີ່
ການກໍານົດເວລາກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນ, ie ກັບ -fschedule-insns ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-spec-load-ອັນຕະລາຍ
ອະນຸຍາດໃຫ້ມີການເຄື່ອນໄຫວແບບຄາດເດົາຂອງຄໍາແນະນໍາການໂຫຼດເພີ່ມເຕີມ. ນີ້ພຽງແຕ່ເຮັດໃຫ້ຄວາມຮູ້ສຶກໃນເວລາທີ່
ການກໍານົດເວລາກ່ອນທີ່ຈະລົງທະບຽນການຈັດສັນ, ie ກັບ -fschedule-insns ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-stalled-insns
-fsched-stalled-insns=n
ກໍານົດຈໍານວນ insns (ຖ້າມີ) ສາມາດຖືກຍ້າຍກ່ອນໄວອັນຄວນຈາກແຖວຂອງການຢຸດເຊົາ
insns ເຂົ້າໄປໃນບັນຊີລາຍຊື່ທີ່ກຽມພ້ອມໃນລະຫວ່າງການກໍານົດເວລາທີສອງ. -fno-sched-stalled-insns
ຫມາຍຄວາມວ່າບໍ່ມີການຍ້າຍ insns ກ່ອນໄວອັນຄວນ, -fsched-stalled-insns=0 ຫມາຍຄວາມວ່າບໍ່ມີ
ຈໍາ​ກັດ​ກ່ຽວ​ກັບ​ຈໍາ​ນວນ insns ຄິວ​ທີ່​ສາ​ມາດ​ຖືກ​ຍ້າຍ​ກ່ອນ​ໄວ​ອັນ​ຄວນ​. -fsched-stalled-insns
ບໍ່ມີຄ່າເທົ່າກັບ -fsched-stalled-insns=1.

-fsched-stalled-insns-dep
-fsched-stalled-insns-dep=n
ກໍານົດຈໍານວນກຸ່ມ insn (ຮອບວຽນ) ຖືກກວດສອບສໍາລັບການຂຶ້ນກັບ insn ທີ່ຢຸດເຊົາ.
ນັ້ນແມ່ນຜູ້ສະຫມັກສໍາລັບການໂຍກຍ້າຍກ່ອນໄວອັນຄວນຈາກແຖວຂອງ insns ທີ່ຢຸດເຊົາ. ນີ້ມີ
ຜົນກະທົບພຽງແຕ່ໃນລະຫວ່າງການກໍານົດເວລາທີສອງ, ແລະພຽງແຕ່ຖ້າ -fsched-stalled-insns is
ໃຊ້ແລ້ວ. -fno-sched-stalled-insns-dep ເທົ່າກັບ -fsched-stalled-insns-dep=0.
-fsched-stalled-insns-dep ບໍ່ມີຄ່າເທົ່າກັບ
-fsched-stalled-insns-dep=1.

-fsched2-use-superblocks
ເມື່ອກໍານົດເວລາຫຼັງຈາກການຈັດສັນການລົງທະບຽນ, ໃຊ້ການກໍານົດເວລາ superblock. ນີ້ອະນຸຍາດໃຫ້
ການເຄື່ອນໄຫວຂ້າມຂອບເຂດຕັນພື້ນຖານ, ສົ່ງຜົນໃຫ້ຕາຕະລາງໄວຂຶ້ນ. ທາງເລືອກນີ້ແມ່ນ
ການທົດລອງ, ຍ້ອນວ່າບໍ່ແມ່ນຄໍາອະທິບາຍເຄື່ອງຈັກທັງຫມົດທີ່ໃຊ້ໂດຍ GCC ແບບຈໍາລອງ CPU ຢ່າງໃກ້ຊິດພຽງພໍ
ເພື່ອຫຼີກເວັ້ນການຜົນໄດ້ຮັບທີ່ບໍ່ຫນ້າເຊື່ອຖືຈາກ algorithm.

ນີ້ພຽງແຕ່ເຮັດໃຫ້ຄວາມຮູ້ສຶກໃນເວລາທີ່ກໍານົດເວລາຫຼັງຈາກການຈັດສັນການລົງທະບຽນ, ie ກັບ
-fschedule-insns2 ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-group-heuristic
ເປີດໃຊ້ heuristic ກຸ່ມໃນຕົວກໍານົດເວລາ. heuristic ນີ້ມັກຄໍາແນະນໍາ
ທີ່ເປັນຂອງກຸ່ມຕາຕະລາງ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອກຳນົດເວລາ
ເປີດໃຊ້, ie ກັບ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-critical-path-heuristic
ເປີດໃຊ້ heuristic ເສັ້ນທາງທີ່ສໍາຄັນໃນຕົວກໍານົດເວລາ. ນີ້ມັກ heuristic
ຄໍາແນະນໍາກ່ຽວກັບເສັ້ນທາງທີ່ສໍາຄັນ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອກຳນົດເວລາ
ເປີດໃຊ້, ie ກັບ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-spec-insn-heuristic
ເປີດໃຊ້ heuristic ຄໍາແນະນໍາການຄາດເດົາໃນຕົວກໍານົດເວລາ. ນີ້ມັກ heuristic
ຄໍາແນະນໍາການຄາດເດົາທີ່ມີຄວາມອ່ອນເພຍຫຼາຍຂື້ນ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍາ​ນົດ​ເວ​ລາ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​, ເຊັ່ນ​: ມີ​ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2
ຫຼືສູງກວ່າ.

-fsched-rank-heuristic
ເປີດໃຊ້ heuristic ອັນດັບໃນຕົວກໍານົດເວລາ. heuristic ນີ້ມັກຄໍາແນະນໍາ
ເປັນຂອງບລັອກພື້ນຖານທີ່ມີຂະໜາດ ຫຼືຄວາມຖີ່ຫຼາຍກວ່າ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍາ​ນົດ​ເວ​ລາ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​, ເຊັ່ນ​: ມີ​ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2
ຫຼືສູງກວ່າ.

-fsched-last-insn-heuristic
ເປີດໃຊ້ heuristic ຄໍາແນະນໍາສຸດທ້າຍໃນຕົວກໍານົດເວລາ. heuristic ນີ້ favors ໄດ້
ຄໍາແນະນໍາທີ່ຫນ້ອຍແມ່ນຂຶ້ນກັບຄໍາແນະນໍາສຸດທ້າຍທີ່ໄດ້ກໍານົດໄວ້. ອັນນີ້ຖືກເປີດໃຊ້
ໂດຍຄ່າເລີ່ມຕົ້ນໃນເວລາທີ່ການກໍານົດເວລາຖືກເປີດໃຊ້, ie ກັບ -fschedule-insns or -fschedule-insns2
ຫຼືຢູ່ -O2 ຫຼືສູງກວ່າ.

-fsched-dep-count-heuristic
ເປີດໃຊ້ heuristic ການນັບຂຶ້ນກັບຢູ່ໃນຕົວກໍານົດເວລາ. heuristic ນີ້ favors ໄດ້
ຄໍາແນະນໍາທີ່ມີຄໍາແນະນໍາຫຼາຍຂື້ນກັບມັນ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ
ໃນ​ເວ​ລາ​ທີ່​ການ​ກໍາ​ນົດ​ເວ​ລາ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​, ເຊັ່ນ​: ມີ​ -fschedule-insns or -fschedule-insns2 ຫຼືຢູ່ -O2
ຫຼືສູງກວ່າ.

-freschedule-modulo-schedule-loops
ການກຳນົດເວລາຂອງໂມດູໂລແມ່ນປະຕິບັດກ່ອນການກຳນົດເວລາແບບດັ້ງເດີມ. ຖ້າ loop ເປັນ modulo
ກໍານົດເວລາ, ຕໍ່ມາການກໍານົດເວລາຜ່ານອາດຈະມີການປ່ຽນແປງຕາຕະລາງຂອງມັນ. ໃຊ້ຕົວເລືອກນີ້ເພື່ອ
ຄວບຄຸມພຶດຕິກຳນັ້ນ.

-fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​
ກໍານົດເວລາຄໍາແນະນໍາໂດຍໃຊ້ສູດການຄິດໄລ່ການເລືອກ. ການເລືອກຕາຕະລາງການແລ່ນ
ແທນການຜ່ານຕາຕະລາງທໍາອິດ.

-fselective-ກຳນົດ​ເວລາ2
ກໍານົດເວລາຄໍາແນະນໍາໂດຍໃຊ້ສູດການຄິດໄລ່ການເລືອກ. ການເລືອກຕາຕະລາງການແລ່ນ
ແທນການຜ່ານຕາຕະລາງທີສອງ.

-fsel-sched-pipelining
ເປີດໃຊ້ການວາງທໍ່ຊອບແວຂອງ loops ພາຍໃນທີ່ສຸດໃນລະຫວ່າງການກໍານົດເວລາການເລືອກ. ນີ້
ທາງເລືອກທີ່ບໍ່ມີຜົນກະທົບເວັ້ນເສຍແຕ່ວ່າຫນຶ່ງໃນ -fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​ or -fselective-ກຳນົດ​ເວລາ2
ແມ່ນໄດ້ຫັນສຸດ.

-fsel-sched-pipelining-outer-loops
ໃນເວລາທີ່ທໍ່ loops ໃນລະຫວ່າງການກໍານົດເວລາການຄັດເລືອກ, ຍັງທໍ່ loops ພາຍນອກ. ນີ້
ທາງເລືອກທີ່ບໍ່ມີຜົນກະທົບເວັ້ນເສຍແຕ່ -fsel-sched-pipelining ແມ່ນໄດ້ຫັນສຸດ.

-fsemantic-interposition
ຮູບແບບວັດຖຸບາງອັນ, ເຊັ່ນ ELF, ອະນຸຍາດໃຫ້ມີການເຊື່ອມໂຍງຂອງສັນຍາລັກໂດຍຕົວເຊື່ອມຕໍ່ແບບເຄື່ອນໄຫວ.
ນີ້ຫມາຍຄວາມວ່າສໍາລັບສັນຍາລັກທີ່ສົ່ງອອກມາຈາກ DSO, compiler ບໍ່ສາມາດປະຕິບັດໄດ້
ການຂະຫຍາຍພັນແບບ interprocedural, inlining ແລະການເພີ່ມປະສິດທິພາບອື່ນໆທີ່ຄາດວ່າຈະມີ
ຟັງຊັນຫຼືຕົວແປໃນຄໍາຖາມອາດຈະມີການປ່ຽນແປງ. ໃນຂະນະທີ່ຄຸນນະສົມບັດນີ້ແມ່ນເປັນປະໂຫຍດ, ສໍາລັບ
ຕົວຢ່າງ, ເພື່ອຂຽນຄືນຫນ້າທີ່ການຈັດສັນຫນ່ວຍຄວາມຈໍາໂດຍການດໍາເນີນການ debugging, ມັນແມ່ນ
ລາຄາແພງໃນດ້ານຄຸນນະພາບຂອງລະຫັດ. ກັບ -fno-semantic-interposition compiler ໄດ້
ສົມມຸດວ່າຖ້າ interposition ເກີດຂຶ້ນສໍາລັບຟັງຊັນ, ຟັງຊັນການຂຽນທັບຈະມີ
ຊັດເຈນ semantics ດຽວກັນ (ແລະຜົນຂ້າງຄຽງ). ເຊັ່ນດຽວກັນຖ້າຫາກວ່າ interposition ເກີດຂຶ້ນ
ສໍາລັບຕົວແປ, constructor ຂອງຕົວແປຈະຄືກັນ. ທຸງບໍ່ມີ
ຜົນ​ກະ​ທົບ​ສໍາ​ລັບ​ຫນ້າ​ທີ່​ປະ​ກາດ​ຢ່າງ​ຊັດ​ເຈນ​ໃນ​ເສັ້ນ (ທີ່​ມັນ​ບໍ່​ເຄີຍ​ອະ​ນຸ​ຍາດ​ໃຫ້​ສໍາ​ລັບ​ການ​
interposition ການປ່ຽນແປງ semantics) ແລະສໍາລັບສັນຍາລັກປະກາດຢ່າງຈະແຈ້ງວ່າອ່ອນແອ.

-fshrink-wrap
ປ່ອຍ prologues ຟັງຊັນພຽງແຕ່ກ່ອນບາງສ່ວນຂອງຟັງຊັນທີ່ຕ້ອງການ, ແທນທີ່ຈະຢູ່
ເທິງສຸດຂອງຫນ້າທີ່. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fcaller-ປະຫຍັດ
ເຮັດ​ໃຫ້​ການ​ຈັດ​ສັນ​ຂອງ​ຄຸນ​ຄ່າ​ກັບ​ການ​ລົງ​ທະ​ບຽນ​ທີ່ clobbered ໂດຍ​ການ​ໂທ​ຫນ້າ​ທີ່​, ໂດຍ​
ປ່ອຍຄໍາແນະນໍາເພີ່ມເຕີມເພື່ອຊ່ວຍປະຢັດແລະຟື້ນຟູການລົງທະບຽນປະມານການໂທດັ່ງກ່າວ. ດັ່ງກ່າວ
ການຈັດສັນແມ່ນເຮັດພຽງແຕ່ໃນເວລາທີ່ມັນເບິ່ງຄືວ່າຈະສົ່ງຜົນໃຫ້ລະຫັດທີ່ດີກວ່າ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ສະ ເໝີ ໃນບາງເຄື່ອງ, ໂດຍປົກກະຕິແມ່ນເຄື່ອງທີ່ມີ
ບໍ່ມີການໂທທີ່ເກັບຮັກສາໄວ້ລົງທະບຽນເພື່ອໃຊ້ແທນ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fcombine-stack-ປັບ
ຕິດຕາມການປັບຕົວ stack (pushes ແລະ pops) ແລະ stack ການອ້າງອີງຫນ່ວຍຄວາມຈໍາແລະຫຼັງຈາກນັ້ນພະຍາຍາມ
ເພື່ອຊອກຫາວິທີທີ່ຈະສົມທົບພວກມັນ.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O1 ແລະສູງກວ່າ.

-fipa-ra
ໃຊ້ການລົງທະບຽນບັນທຶກຜູ້ໂທສໍາລັບການຈັດສັນຖ້າການລົງທະບຽນເຫຼົ່ານັ້ນບໍ່ໄດ້ຖືກນໍາໃຊ້ໂດຍການເອີ້ນໃດໆ
ຫນ້າທີ່. ໃນກໍລະນີດັ່ງກ່າວ, ມັນບໍ່ຈໍາເປັນທີ່ຈະຊ່ວຍປະຢັດແລະຟື້ນຟູໃຫ້ເຂົາເຈົ້າກ່ຽວກັບການໂທຫາ.
ອັນນີ້ເປັນໄປໄດ້ພຽງແຕ່ຖ້າຟັງຊັນເອີ້ນວ່າເປັນສ່ວນໜຶ່ງຂອງໜ່ວຍລວບລວມຂໍ້ມູນດຽວກັນກັບປັດຈຸບັນ
ຟັງຊັນແລະພວກມັນຖືກລວບລວມກ່ອນມັນ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fconserve-stack
ພະຍາຍາມຫຼຸດຜ່ອນການໃຊ້ stack. compiler ພະຍາຍາມໃຊ້ພື້ນທີ່ stack ຫນ້ອຍ, ເຖິງແມ່ນວ່າ
ຖ້າມັນເຮັດໃຫ້ໂຄງການຊ້າລົງ. ທາງເລືອກນີ້ຫມາຍເຖິງການກໍານົດ ໃຫຍ່ stack-frame
ພາລາມິເຕີເຖິງ 100 ແລະ large-stack-frame-growth ພາລາມິເຕີເຖິງ 400.

-ftree-reassoc
ປະຕິບັດການເຊື່ອມໂຍງກັບຕົ້ນໄມ້ຄືນໃໝ່. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftre-pre
ປະຕິບັດການກໍາຈັດການຊໍ້າຊ້ອນບາງສ່ວນ (PRE) ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O2 ແລະ -O3.

-ftree-partial-pre
ເຮັດໃຫ້ການລົບລ້າງການຊໍ້າຊ້ອນບາງສ່ວນ (PRE) ຮຸກຮານຫຼາຍຂຶ້ນ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O3.

-ftree-forwprop
ສືບຕໍ່ຂະຫຍາຍພັນຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

- ຟຣີ​ຟຣີ​
ປະຕິບັດການກໍາຈັດການຊໍ້າຊ້ອນຢ່າງເຕັມທີ່ (FRE) ກ່ຽວກັບຕົ້ນໄມ້. ຄວາມແຕກຕ່າງລະຫວ່າງ FRE ແລະ
PRE ແມ່ນວ່າ FRE ພຽງແຕ່ພິຈາລະນາການສະແດງອອກທີ່ຖືກຄິດໄລ່ຢູ່ໃນທຸກເສັ້ນທາງທີ່ນໍາໄປສູ່
ການ​ຄິດ​ໄລ່​ທີ່​ຊໍ້າ​ຊ້ອນ​. ການວິເຄາະນີ້ແມ່ນໄວກວ່າ PRE, ເຖິງແມ່ນວ່າມັນເປີດເຜີຍຫນ້ອຍລົງ
ຊໍ້າຊ້ອນ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftree-phiprop
ປະຕິບັດການຍົກການໂຫຼດຈາກຕົວຊີ້ຕາມເງື່ອນໄຂໃສ່ຕົ້ນໄມ້. ບັດນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O ແລະສູງກວ່າ.

-fhoist-adjacent-loads
ໂດຍຄາດການວ່າ hoist loads ຈາກທັງສອງສາຂາຂອງ if-then-else ຖ້າການໂຫຼດມາຈາກ
ສະຖານທີ່ໃກ້ຄຽງໃນໂຄງສ້າງດຽວກັນແລະສະຖາປັດຕະຍະກໍາເປົ້າຫມາຍມີເງື່ອນໄຂ
ການ​ເຄື່ອນ​ໄຫວ​ຄໍາ​ແນະ​ນໍາ​. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະສູງກວ່າ.

-ftree-copy-prop
ປະຕິບັດການຂະຫຍາຍພັນຕົ້ນໄມ້. ບັດນີ້ກໍາຈັດການດໍາເນີນການສໍາເນົາທີ່ບໍ່ຈໍາເປັນ.
ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fipa-pure-const
ຄົ້ນພົບຟັງຊັນໃດທີ່ບໍລິສຸດ ຫຼືຄົງທີ່. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fipa ອ້າງ​ອີງ​
ຄົ້ນພົບຕົວແປສະຖິດໃດທີ່ບໍ່ໜີຈາກໜ່ວຍການລວບລວມຂໍ້ມູນ. ເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O ແລະສູງກວ່າ.

-fipa-pta
ປະຕິບັດການວິເຄາະຕົວຊີ້ interprocedural ແລະການແກ້ໄຂ interprocedural ແລະ
ການວິເຄາະອ້າງອີງ. ຕົວເລືອກນີ້ສາມາດເຮັດໃຫ້ເກີດຄວາມຊົງຈໍາຫຼາຍເກີນໄປ ແລະການໃຊ້ເວລາລວບລວມຢູ່ໃນ
ຫນ່ວຍງານລວບລວມຂະຫນາດໃຫຍ່. ມັນບໍ່ໄດ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນລະດັບການເພີ່ມປະສິດທິພາບໃດໆ.

-fipa-profile
ດໍາເນີນການຂະຫຍາຍໂປຼໄຟລ໌ລະຫວ່າງຂັ້ນຕອນ. ຫນ້າທີ່ເອີ້ນວ່າພຽງແຕ່ຈາກເຢັນ
ຫນ້າທີ່ຖືກຫມາຍເປັນເຢັນ. ນອກຈາກນີ້ຍັງປະຕິບັດຫນ້າຫນຶ່ງຄັ້ງ (ເຊັ່ນ: "ເຢັນ",
"noreturn", constructors static ຫຼື destructors) ຖືກກໍານົດ. ຫນ້າທີ່ເຢັນແລະ
loop ພາກສ່ວນຫນ້ອຍຂອງຫນ້າທີ່ປະຕິບັດຫນຶ່ງຄັ້ງຈະຖືກປັບປຸງໃຫ້ເຫມາະສົມສໍາລັບຂະຫນາດ. ເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O ແລະສູງກວ່າ.

-fipa-cp
ປະຕິບັດການຂະຫຍາຍພັນຄົງທີ່ interprocedural. ການເພີ່ມປະສິດທິພາບນີ້ວິເຄາະໂຄງການ
ເພື່ອກໍານົດເວລາທີ່ຄ່າທີ່ສົ່ງໄປຫາຫນ້າທີ່ຄົງທີ່ແລະຫຼັງຈາກນັ້ນ optimizes
ຕາມນັ້ນ. ການເພີ່ມປະສິດທິພາບນີ້ສາມາດເພີ່ມປະສິດທິພາບຢ່າງຫຼວງຫຼາຍຖ້າຫາກວ່າ
ຄໍາ​ຮ້ອງ​ສະ​ຫມັກ​ມີ​ຄ່າ​ຄົງ​ທີ່​ທີ່​ຜ່ານ​ໄປ​ຫນ້າ​ທີ່​. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່
-O2, -ອສ ແລະ -O3.

-fipa-cp-clone
ດໍາເນີນການ cloning ຫນ້າທີ່ເພື່ອເຮັດໃຫ້ການຂະຫຍາຍພັນຄົງທີ່ interprocedural ເຂັ້ມແຂງ. ເມື່ອ​ໃດ​
ເປີດໃຊ້, ການຂະຫຍາຍພັນຄົງທີ່ interprocedural ປະຕິບັດຫນ້າທີ່ cloning ເມື່ອ
ຟັງຊັນທີ່ເບິ່ງເຫັນພາຍນອກສາມາດຖືກເອີ້ນດ້ວຍການໂຕ້ຖຽງຄົງທີ່. ເນື່ອງຈາກວ່ານີ້
ການເພີ່ມປະສິດທິພາບສາມາດສ້າງສໍາເນົາຫຼາຍຫນ້າທີ່, ມັນອາດຈະເພີ່ມຂຶ້ນຢ່າງຫຼວງຫຼາຍ
ຂະຫນາດລະຫັດ (ເບິ່ງ --param ipcp-unit-growth=ມູນຄ່າ). ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່
-O3.

-fipa-cp-alignment
ເມື່ອເປີດໃຊ້ງານ, ການເພີ່ມປະສິດທິພາບນີ້ຂະຫຍາຍການຈັດລຽງຂອງຕົວກໍານົດການຟັງຊັນເພື່ອສະຫນັບສະຫນູນ
ການປະຕິບັດ vectorization ແລະ string ທີ່ດີກວ່າ.

ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະ -ອສ. ມັນຮຽກຮ້ອງໃຫ້ມີນັ້ນ -fipa-cp ເປີດໃຊ້ງານ.

-fipa-icf
ປະຕິບັດການພັບລະຫັດທີ່ຄືກັນສຳລັບຟັງຊັນ ແລະຕົວແປທີ່ອ່ານເທົ່ານັ້ນ. ໄດ້
ການເພີ່ມປະສິດທິພາບຈະຫຼຸດຂະໜາດຂອງລະຫັດ ແລະອາດຈະລົບກວນການຍົກເລີກການຕອບໂຕ້ໂດຍການປ່ຽນຟັງຊັນໃດໜຶ່ງ
ເທົ່າກັບຊື່ອື່ນ. ການເພີ່ມປະສິດທິພາບເຮັດວຽກມີປະສິດທິພາບຫຼາຍຂຶ້ນກັບ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ແລ້ວ.

ຢ່າງໃດກໍຕາມ, ພຶດຕິກໍາແມ່ນຄ້າຍຄືກັນກັບການເພີ່ມປະສິດທິພາບ Gold Linker ICF, GCC ICF ເຮັດວຽກ
ລະດັບທີ່ແຕກຕ່າງກັນແລະດັ່ງນັ້ນການເພີ່ມປະສິດທິພາບແມ່ນບໍ່ຄືກັນ - ມີຄວາມທຽບເທົ່າ
ຖືກພົບເຫັນພຽງແຕ່ໂດຍ GCC ແລະຄວາມທຽບເທົ່າທີ່ພົບເຫັນພຽງແຕ່ໂດຍຄໍາ.

ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະ -ອສ.

-fisolate-erroneous-paths-dereference
ກວດຫາເສັ້ນທາງທີ່ເຮັດໃຫ້ເກີດພຶດຕິກຳທີ່ຜິດພາດ ຫຼືບໍ່ໄດ້ກຳນົດໄວ້ ເນື່ອງຈາກການປະຕິເສດການອ້າງອີງ null
ຕົວຊີ້. ແຍກເສັ້ນທາງເຫຼົ່ານັ້ນອອກຈາກກະແສການຄວບຄຸມຕົ້ນຕໍແລະຫັນຄໍາຖະແຫຼງທີ່
ພຶດຕິກຳທີ່ຜິດພາດ ຫຼືບໍ່ໄດ້ກຳນົດໃຫ້ເປັນຈັ່ນຈັບ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2
ແລະສູງກວ່າ.

-fisolate-erroneous-paths-attribute
ກວດຫາເສັ້ນທາງທີ່ເຮັດໃຫ້ເກີດພຶດຕິກຳທີ່ຜິດພາດ ຫຼືບໍ່ໄດ້ກຳນົດເນື່ອງຈາກຄ່າ null ຖືກໃຊ້
ໃນທາງທີ່ຫ້າມໂດຍຄຸນສົມບັດ "returns_nonnull" ຫຼື "nonnull". ແຍກເສັ້ນທາງເຫຼົ່ານັ້ນ
ຈາກການໄຫຼເຂົ້າຂອງການຄວບຄຸມຕົ້ນຕໍແລະປ່ຽນຄໍາຖະແຫຼງທີ່ມີພຶດຕິກໍາທີ່ຜິດພາດຫຼືບໍ່ໄດ້ກໍານົດ
ເຂົ້າໄປໃນຈັ່ນຈັບ. ອັນນີ້ບໍ່ໄດ້ຖືກເປີດໃຊ້ໃນຂະນະນີ້, ແຕ່ອາດຈະຖືກເປີດໃຊ້ໂດຍ -O2 ໃນ​ອາ​ນາ​ຄົດ.

- ອ່າງລ້າງມື
ປະຕິບັດການເຄື່ອນໄຫວເກັບຮັກສາໄປຂ້າງຫນ້າກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftree-bit-ccp
ປະຕິບັດການຂະຫຍາຍພັນແບບຄົງທີ່ເລັກນ້ອຍຕາມເງື່ອນໄຂ ແລະ ຂະຫຍາຍພັນດ້ວຍຕົວຊີ້
ຂໍ້​ມູນ​ການ​ຈັດ​ຕັ້ງ​. pass ນີ້ດໍາເນີນການພຽງແຕ່ຢູ່ໃນຕົວແປ scalar ທ້ອງຖິ່ນແລະແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ. ມັນຮຽກຮ້ອງໃຫ້ມີນັ້ນ -ftree-ccp ເປີດໃຊ້ງານ.

-ftree-ccp
ປະຕິບັດການຂະຫຍາຍພັນແບບຄົງທີ່ຕາມເງື່ອນໄຂ (CCP) ຢູ່ເທິງຕົ້ນໄມ້. ຜ່ານນີ້ເທົ່ານັ້ນ
ດໍາເນີນການຢູ່ໃນຕົວແປ scalar ທ້ອງຖິ່ນແລະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fssa-phiopt
ປະຕິບັດການຈັບຄູ່ຮູບແບບໃນ nodes SSA PHI ເພື່ອປັບປຸງລະຫັດເງື່ອນໄຂ. ຜ່ານນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftre-switch-ແປງ
ດໍາເນີນການປ່ຽນການເລີ່ມຕົ້ນແບບງ່າຍດາຍໃນການສະຫຼັບກັບການເລີ່ມຕົ້ນຈາກ a
array scalar. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະສູງກວ່າ.

-ftree-tail-merge
ຊອກຫາລໍາດັບລະຫັດດຽວກັນ. ເມື່ອພົບ, ແທນອັນໜຶ່ງດ້ວຍການໂດດໄປຫາອີກອັນໜຶ່ງ.
ການເພີ່ມປະສິດທິພາບນີ້ເອີ້ນວ່າການລວມຫາງຫຼືການໂດດຂ້າມ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O2 ແລະສູງກວ່າ. ເວລາການລວບລວມຢູ່ໃນບັດນີ້ສາມາດຖືກຈໍາກັດໂດຍໃຊ້
max-tail-merge-ການປຽບທຽບ ພາລາມິເຕີແລະ max-tail-merge-iterations ພາລາມິເຕີ.

-ftree-dce
ປະຕິບັດການກໍາຈັດລະຫັດຕາຍ (DCE) ໃນຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O
ແລະສູງກວ່າ.

-ftree-builtin-call-dce
ປະຕິບັດການກໍາຈັດລະຫັດຕາຍຕາມເງື່ອນໄຂ (DCE) ສໍາລັບການໂທຫາຫນ້າທີ່ສ້າງໃນ
ອາດຈະຕັ້ງ "errno" ແຕ່ບໍ່ມີຜົນຂ້າງຄຽງໃດໆ. ທຸງນີ້ຖືກເປີດໃຊ້ເປັນຄ່າເລີ່ມຕົ້ນ
at -O2 ແລະສູງກວ່າຖ້າ -ອສ ຍັງ​ບໍ່​ໄດ້​ລະ​ບຸ​ໄວ້​.

-ftree-dominator-opts
ປະຕິບັດການທໍາຄວາມສະອາດສະເກັດເງິນທີ່ງ່າຍດາຍຫຼາຍຊະນິດ (ການຂະຫຍາຍພັນແບບຄົງທີ່ / ສໍາເນົາ, ການຊໍ້າຊ້ອນ.
ການ​ລົບ​ລ້າງ​, ການ​ຂະ​ຫຍາຍ​ພັນ​ລະ​ດັບ​ແລະ​ການ​ສະ​ແດງ​ອອກ​ງ່າຍ​ດາຍ​) ໂດຍ​ອີງ​ໃສ່​ການ​ເດັ່ນ​
ທາງຜ່ານຕົ້ນໄມ້. ນີ້ຍັງດໍາເນີນການກະທູ້ກະໂດດ (ເພື່ອຫຼຸດຜ່ອນການໂດດໄປຫາກະໂດດ). ນີ້
ທຸງຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftree-dse
ປະຕິບັດການກໍາຈັດຮ້ານຕາຍ (DSE) ໃນຕົ້ນໄມ້. ຮ້ານທີ່ຕາຍແລ້ວແມ່ນຮ້ານເຂົ້າໄປໃນຄວາມຊົງຈໍາ
ສະຖານທີ່ທີ່ຕໍ່ມາຖືກຂຽນທັບໂດຍຮ້ານອື່ນໂດຍບໍ່ມີການແຊກແຊງໃດໆ. ໃນ
ກໍລະນີນີ້ຮ້ານກ່ອນຫນ້າສາມາດຖືກລຶບຖິ້ມ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftre-ch
ດໍາເນີນການຄັດລອກສ່ວນຫົວຂອງ loop ໃສ່ຕົ້ນໄມ້. ນີ້ແມ່ນຜົນປະໂຫຍດນັບຕັ້ງແຕ່ມັນເພີ່ມຂຶ້ນ
ປະສິດທິຜົນຂອງການເພີ່ມປະສິດທິພາບການເຄື່ອນໄຫວລະຫັດ. ມັນຍັງຊ່ວຍປະຢັດຫນຶ່ງກະໂດດ. ທຸງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ. ມັນບໍ່ໄດ້ຖືກເປີດໃຊ້ສໍາລັບ -ອສ, ເນື່ອງຈາກວ່າມັນປົກກະຕິແລ້ວ
ເພີ່ມຂະຫນາດລະຫັດ.

-ftree-loop-optimize
ປະຕິບັດການເພີ່ມປະສິດທິພາບ loop ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftree-loop-linear
ປະຕິບັດການຫັນປ່ຽນ loop interchange ກ່ຽວກັບຕົ້ນໄມ້. ຄື​ກັນ​ກັບ -floop-interchange. ການ ນຳ ໃຊ້
ການປ່ຽນແປງລະຫັດນີ້, GCC ຕ້ອງໄດ້ຮັບການ configured ກັບ --with-isl ເພື່ອເປີດໃຊ້ງານ
ໂຄງລ່າງພື້ນຖານການຫັນປ່ຽນ Graphite loop.

-floop-interchange
ປະຕິບັດການຫັນປ່ຽນ loop interchange ໃນ loops. ການແລກປ່ຽນສອງ loops ຊ້ອນກັນ
ສະຫຼັບ loops ພາຍໃນແລະນອກ. ສໍາລັບຕົວຢ່າງ, ໃຫ້ loop ເຊັ່ນ:

DO J = 1, ມ
DO I = 1, N
A(J,I) = A(J, I) * C
ສິ້ນສຸດ
ສິ້ນສຸດ

loop interchange ປ່ຽນ loop ຄືກັບວ່າມັນຖືກຂຽນໄວ້:

DO I = 1, N
DO J = 1, ມ
A(J,I) = A(J, I) * C
ສິ້ນສຸດ
ສິ້ນສຸດ

ເຊິ່ງສາມາດເປັນປະໂຫຍດເມື່ອ "N" ຂະຫນາດໃຫຍ່ກວ່າຖານຄວາມຈໍາ, ເພາະວ່າໃນ Fortran, the
ອົງປະກອບຂອງ array ຖືກເກັບໄວ້ໃນຫນ່ວຍຄວາມຈໍາຕິດຕໍ່ກັນໂດຍຖັນ, ແລະຕົ້ນສະບັບ
loop iterates ໃນໄລຍະແຖວ, ອາດຈະສ້າງໃນແຕ່ລະການເຂົ້າເຖິງ cache miss. ນີ້
ການເພີ່ມປະສິດທິພາບໃຊ້ກັບທຸກພາສາທີ່ສະຫນັບສະຫນູນໂດຍ GCC ແລະບໍ່ຈໍາກັດ
ຟໍຣັນ. ເພື່ອໃຊ້ການປ່ຽນລະຫັດນີ້, GCC ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າດ້ວຍ --with-isl to
ເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ Graphite loop.

-floop-strip-mine
ປະຕິບັດການຫັນເປັນ loop strip mining ໃນ loops. ການຂຸດຄົ້ນບໍ່ແຮ່ແຍກເປັນ loops ເປັນ
ສອງ loops ຮັງ. ວົງນອກມີຂັ້ນໄດເທົ່າກັບຂະໜາດແຖບ ແລະດ້ານໃນ
loop ມີ strides ຂອງ loop ຕົ້ນສະບັບພາຍໃນເສັ້ນດ່າງ. ຄວາມຍາວຂອງແຖບສາມາດປ່ຽນແປງໄດ້
ການນໍາໃຊ້ loop-block-tile-size ພາລາມິເຕີ. ສໍາລັບຕົວຢ່າງ, ໃຫ້ loop ເຊັ່ນ:

DO I = 1, N
A(I) = A(I) + C
ສິ້ນສຸດ

loop strip mining ປ່ຽນ loop ຄືກັບວ່າມັນຖືກຂຽນວ່າ:

DO II = 1, N, 51
DO I = II, min (II + 50, N)
A(I) = A(I) + C
ສິ້ນສຸດ
ສິ້ນສຸດ

ການເພີ່ມປະສິດທິພາບນີ້ໃຊ້ກັບທຸກພາສາທີ່ GCC ສະຫນັບສະຫນູນແລະບໍ່ຈໍາກັດ
ຟໍຣັນ. ເພື່ອໃຊ້ການປ່ຽນລະຫັດນີ້, GCC ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າດ້ວຍ --with-isl to
ເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ Graphite loop.

-floop-block
ປະຕິບັດການຫັນປ່ຽນ blocking loop ໃນ loops. ສະກັດລະເບີດຝັງດິນແຕ່ລະ loop ໃນ
loop ຮັງເຊັ່ນວ່າຫນ່ວຍຄວາມຈໍາເຂົ້າເຖິງຂອງ loops ອົງປະກອບເຫມາະພາຍໃນ cache. ໄດ້
ຄວາມຍາວຂອງແຖບສາມາດປ່ຽນແປງໄດ້ໂດຍໃຊ້ loop-block-tile-size ພາລາມິເຕີ. ຍົກ​ຕົວ​ຢ່າງ,
ໃຫ້ loop ຄື:

DO I = 1, N
DO J = 1, ມ
A(J,I) = B(I) + C(J)
ສິ້ນສຸດ
ສິ້ນສຸດ

loop blocking ປ່ຽນ loop ຄືກັບວ່າມັນຖືກຂຽນໄວ້:

DO II = 1, N, 51
DO JJ = 1, M, 51
DO I = II, min (II + 50, N)
DO J = JJ, ນາທີ (JJ + 50, M)
A(J,I) = B(I) + C(J)
ສິ້ນສຸດ
ສິ້ນສຸດ
ສິ້ນສຸດ
ສິ້ນສຸດ

ເຊິ່ງສາມາດເປັນປະໂຫຍດເມື່ອ "M" ຂະຫນາດໃຫຍ່ກວ່າຖານຄວາມຈໍາ, ເພາະວ່າ loop ພາຍໃນທີ່ສຸດ
iterates ຫຼາຍກວ່າຈໍານວນຂໍ້ມູນຂະຫນາດນ້ອຍກວ່າທີ່ສາມາດເກັບຮັກສາໄວ້ໃນຖານຄວາມຈໍາ. ນີ້
ການເພີ່ມປະສິດທິພາບໃຊ້ກັບທຸກພາສາທີ່ສະຫນັບສະຫນູນໂດຍ GCC ແລະບໍ່ຈໍາກັດ
ຟໍຣັນ. ເພື່ອໃຊ້ການປ່ຽນລະຫັດນີ້, GCC ຕ້ອງໄດ້ຮັບການຕັ້ງຄ່າດ້ວຍ --with-isl to
ເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ Graphite loop.

-fgraphite-ຕົວຕົນ
ເປີດໃຊ້ການຫັນປ່ຽນຕົວຕົນສໍາລັບ graphite. ສໍາລັບທຸກໆ SCoP ພວກເຮົາສ້າງ
ການສະແດງ polyhedral ແລະປ່ຽນມັນກັບຄືນໄປບ່ອນ gimple. ການນໍາໃຊ້ -fgraphite-ຕົວຕົນ
ພວກເຮົາສາມາດກວດສອບຄ່າໃຊ້ຈ່າຍຫຼືຜົນປະໂຫຍດຂອງ GIMPLE -> GRAPHITE -> ການຫັນເປັນ GIMPLE.
ບາງການເພີ່ມປະສິດທິພາບຫນ້ອຍກໍ່ຖືກປະຕິບັດໂດຍຕົວສ້າງລະຫັດ ISL ເຊັ່ນ: ດັດສະນີ
ການແຍກແລະການລົບລ້າງລະຫັດຕາຍໃນ loops.

-floop-nest-optimize
ເປີດໃຊ້ຕົວເພີ່ມປະສິດທິພາບຂອງ loop nest ທີ່ອີງໃສ່ ISL. ນີ້ແມ່ນຕົວເພີ່ມປະສິດທິພາບຂອງ loop ທົ່ວໄປທີ່ອີງໃສ່
ຢູ່ໃນລະບົບການເພີ່ມປະສິດທິພາບຂອງ Pluto. ມັນຄິດໄລ່ໂຄງສ້າງ loop ເຫມາະສໍາລັບ
data-locality ແລະຂະຫນານ. ທາງເລືອກນີ້ແມ່ນທົດລອງ.

-floop-unroll-and- jam
ເປີດໃຊ້ການຖອດຖອນ ແລະຕິດຂັດສໍາລັບຕົວເພີ່ມປະສິດທິພາບຂອງ loop nest ຂອງ ISL. ປັດໄຈ unroll ສາມາດ
ການ​ປ່ຽນ​ແປງ​ໂດຍ​ການ​ນໍາ​ໃຊ້​ loop-unroll-jam-size ພາລາມິເຕີ. ຂະໜາດທີ່ຖອດອອກ (ນັບ
ຈາກພາຍໃນທີ່ສຸດ) ສາມາດປ່ຽນແປງໄດ້ໂດຍໃຊ້ loop-unroll-jam-depth ພາລາມິເຕີ.
.

-floop-parallelize-ທັງໝົດ
ໃຊ້ການວິເຄາະການອ້າງອີງຂໍ້ມູນ Graphite ເພື່ອກໍານົດ loops ທີ່ສາມາດຂະຫນານໄດ້.
ຂະຫນານທຸກ loops ທີ່ສາມາດວິເຄາະໄດ້ເພື່ອບໍ່ໃຫ້ມີ loop ປະຕິບັດ
ໂດຍບໍ່ມີການກວດເບິ່ງວ່າມັນມີກໍາໄລໃນການຂະຫນານ loops.

-fcheck-data-deps
ປຽບທຽບຜົນໄດ້ຮັບຂອງການວິເຄາະການເພິ່ງພາອາໄສຂໍ້ມູນຈໍານວນຫນຶ່ງ. ທາງເລືອກນີ້ຖືກນໍາໃຊ້ສໍາລັບ
debugging ການວິເຄາະການເພິ່ງພາອາໄສຂໍ້ມູນ.

-ftree-loop-if-convert
ພະຍາຍາມຫັນປ່ຽນການກະໂດດແບບມີເງື່ອນໄຂໃນວົງແຫວນພາຍໃນທີ່ສຸດໄປສູ່ງ່າ-ໜ້ອຍ
ທຽບເທົ່າ. ຈຸດປະສົງແມ່ນເພື່ອເອົາການຄວບຄຸມການໄຫຼອອກຈາກ loops ພາຍໃນທີ່ສຸດຕາມລໍາດັບ
ເພື່ອປັບປຸງຄວາມສາມາດຂອງ vectorization pass ເພື່ອຈັດການ loops ເຫຼົ່ານີ້. ນີ້​ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າ vectorization ຖືກເປີດໃຊ້.

-ftree-loop-if-convert-stores
ພະຍາຍາມເພີ່ມການກະໂດດຕາມເງື່ອນໄຂທີ່ບັນຈຸບັນທຶກຄວາມຊົງຈໍາ. ນີ້
ການຫັນປ່ຽນສາມາດບໍ່ປອດໄພສໍາລັບໂຄງການຫຼາຍກະທູ້ຍ້ອນວ່າມັນຫັນປ່ຽນເງື່ອນໄຂ
ຄວາມຊົງຈໍາ writes into unconditional memory writes. ຍົກ​ຕົວ​ຢ່າງ,

ສໍາລັບ (i = 0; i < N; i++)
ຖ້າ (cond)
A[i] = expr;

ຖືກປ່ຽນເປັນ

ສໍາລັບ (i = 0; i < N; i++)
A[i] = cond ? expr : A[i];

ທ່າແຮງການຜະລິດຂໍ້ມູນເຊື້ອຊາດ.

-ftree-loop-ການແຜ່ກະຈາຍ
ປະຕິບັດການແຈກຢາຍ loop. ທຸງນີ້ສາມາດປັບປຸງປະສິດທິພາບ cache ໃນອົງປະກອບຂອງ loop ໃຫຍ່
ແລະອະນຸຍາດໃຫ້ການເພີ່ມປະສິດທິພາບ loop ເພີ່ມເຕີມ, ເຊັ່ນ: ຂະຫນານຫຼື vectorization, ໃຊ້ເວລາ
ສະຖານທີ່. ສໍາລັບຕົວຢ່າງ, 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
ສິ້ນສຸດ

-ftree-loop-distribute-patterns
ປະຕິບັດການແຈກຢາຍແບບ loop ທີ່ສາມາດສ້າງລະຫັດດ້ວຍການໂທຫາ a
ຫໍສະໝຸດ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3.

ບັດນີ້ແຈກຢາຍການເລີ່ມຕົ້ນຂອງ loops ແລະສ້າງການໂທຫາ memset zero.
ສໍາລັບຕົວຢ່າງ, loop ໄດ້

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
ສິ້ນສຸດ

ແລະ loop ການເລີ່ມຕົ້ນແມ່ນປ່ຽນເປັນການໂທຫາ memset zero.

-ftree-loop-im
ປະຕິບັດການເຄື່ອນໄຫວແບບບໍ່ປ່ຽນແປງແບບ loop ຢູ່ເທິງຕົ້ນໄມ້. ຜ່ານນີ້ຍ້າຍພຽງແຕ່ invarians ທີ່ແຂງ
ເພື່ອຈັດການໃນລະດັບ RTL (ການໂທຟັງຊັນ, ການດໍາເນີນງານທີ່ຂະຫຍາຍໄປສູ່ລໍາດັບທີ່ບໍ່ແມ່ນເລື່ອງຫຍໍ້
ຂອງ insns). ກັບ -funswitch-loops ມັນຍັງຍ້າຍ operands ຂອງເງື່ອນໄຂທີ່ເປັນ
invariant ອອກຈາກ loop, ດັ່ງນັ້ນພວກເຮົາສາມາດນໍາໃຊ້ພຽງແຕ່ invariantness trivial ການວິເຄາະໃນ
loop unswitching. ປີ້ຍັງປະກອບມີການເຄື່ອນໄຫວຂອງຮ້ານ.

-ftree-loop-ivcanon
ສ້າງຕົວນັບ canonical ສໍາລັບຈໍານວນຂອງການຊໍ້າຄືນໃນ loops ສໍາລັບການກໍານົດ
ຈໍານວນການຊໍ້າຄືນຕ້ອງການການວິເຄາະທີ່ສັບສົນ. ການເພີ່ມປະສິດທິພາບຕໍ່ມາຫຼັງຈາກນັ້ນອາດຈະ
ກໍານົດຕົວເລກໄດ້ຢ່າງງ່າຍດາຍ. ເປັນປະໂຫຍດໂດຍສະເພາະໃນການເຊື່ອມຕໍ່ກັບ unrolling.

-fivopts
ປະຕິບັດການເພີ່ມປະສິດທິພາບຕົວແປ induction (ການຫຼຸດຜ່ອນຄວາມເຂັ້ມແຂງ, ຕົວແປ induction
merging and induction variable elimination) ກ່ຽວກັບຕົ້ນໄມ້.

-ftree-parallelize-loops=ນ
Parallelize loops, ie, ແບ່ງພື້ນທີ່ iteration ຂອງເຂົາເຈົ້າເພື່ອດໍາເນີນການໃນ n threads. ນີ້​ແມ່ນ
ເປັນໄປໄດ້ພຽງແຕ່ສໍາລັບ loops ທີ່ມີ iterations ເປັນເອກະລາດແລະສາມາດ arbitrarily
ຈັດຮຽງໃໝ່. ການເພີ່ມປະສິດທິພາບແມ່ນມີພຽງແຕ່ກໍາໄລໃນເຄື່ອງຈັກ multiprocessor, ສໍາລັບ loops
ທີ່ມີ CPU ຫຼາຍ, ແທນທີ່ຈະຖືກຈໍາກັດ e.g. ໂດຍແບນວິດຫນ່ວຍຄວາມຈໍາ. ທາງເລືອກນີ້
implies - ກະທູ້, ແລະດັ່ງນັ້ນຈຶ່ງໄດ້ຮັບການສະຫນັບສະຫນູນພຽງແຕ່ກ່ຽວກັບເປົ້າຫມາຍທີ່ມີການສະຫນັບສະຫນູນ
- ກະທູ້.

-ftree-pta
ປະຕິບັດຫນ້າທີ່ - ຈຸດທ້ອງຖິ່ນ - ການວິເຄາະກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ເປັນຄ່າເລີ່ມຕົ້ນ
at -O ແລະສູງກວ່າ.

-ftree-sra
ປະຕິບັດການທົດແທນ scalar ຂອງການລວບລວມ. ບັດນີ້ແທນການອ້າງອີງໂຄງສ້າງ
ດ້ວຍເກັດເກັດເພື່ອປ້ອງກັນໂຄງສ້າງຂອງຄວາມຊົງຈໍາໄວເກີນໄປ. ທຸງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-free-copyrename
ດໍາເນີນການສໍາເນົາການປ່ຽນຊື່ໃນຕົ້ນໄມ້. pass ນີ້ພະຍາຍາມປ່ຽນຊື່ compiler temporaries ເປັນ
ຕົວແປອື່ນຢູ່ບ່ອນສຳເນົາ, ໂດຍປົກກະຕິຈະສົ່ງຜົນໃຫ້ມີຊື່ຕົວແປທີ່ຫຼາຍກວ່ານັ້ນ
ຄ້າຍຄືກັນກັບຕົວແປຕົ້ນສະບັບ. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftree-coalesce-inlined-vars
ບອກຊື່ copyrename pass (ເບິ່ງ -free-copyrename) ເພື່ອ​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ລວມ​ຜູ້​ໃຊ້​ຂະ​ຫນາດ​ນ້ອຍ -
ຕົວແປທີ່ກໍານົດຄືກັນ, ແຕ່ວ່າພຽງແຕ່ຖ້າພວກມັນຖືກ inlined ຈາກຫນ້າທີ່ອື່ນໆ. ມັນ​ເປັນ​
ຮູບແບບຈໍາກັດຫຼາຍ -ftree-coalesce-vars. ອັນນີ້ອາດຈະເປັນອັນຕະລາຍຕໍ່ຂໍ້ມູນດີບັກຂອງສິ່ງດັ່ງກ່າວ
ຕົວແປ inlined, ແຕ່ມັນຮັກສາຕົວແປຂອງ inlined-into function ນອກຈາກແຕ່ລະ.
ອື່ນ, ເຊັ່ນວ່າພວກມັນມີແນວໂນ້ມທີ່ຈະມີຄ່າທີ່ຄາດໄວ້ໃນການດີບັກ
session

-ftree-coalesce-vars
ບອກຊື່ copyrename pass (ເບິ່ງ -free-copyrename) ເພື່ອ​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ລວມ​ຜູ້​ໃຊ້​ຂະ​ຫນາດ​ນ້ອຍ -
ກໍານົດຕົວແປເຊັ່ນດຽວກັນ, ແທນທີ່ຈະພຽງແຕ່ compiler temporaries. ນີ້ອາດຈະຈໍາກັດຢ່າງຮ້າຍແຮງ
ຄວາມ​ສາ​ມາດ​ແກ້​ໄຂ​ບັນ​ຫາ​ໂຄງ​ການ​ທີ່​ເຫມາະ​ສົມ​ທີ່​ສັງ​ລວມ​ກັບ​ -fno-var-tracking-assignments.
ໃນຮູບແບບທີ່ຖືກປະຕິເສດ, ທຸງນີ້ປ້ອງກັນບໍ່ໃຫ້ SSA coalescing ຂອງຕົວແປຂອງຜູ້ໃຊ້, ລວມທັງ
ຢູ່ໃນແຖວ. ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

- ຫ້າ​ປີ​
ດໍາເນີນການທົດແທນການສະແດງອອກຊົ່ວຄາວໃນໄລຍະ SSA->ໄລຍະປົກກະຕິ. ໂສດ
use/single def temporaries ແມ່ນຖືກແທນທີ່ຢູ່ໃນສະຖານທີ່ໃຊ້ຂອງພວກເຂົາດ້ວຍການກໍານົດຂອງພວກເຂົາ
ການສະແດງອອກ. ນີ້ສົ່ງຜົນໃຫ້ລະຫັດທີ່ບໍ່ແມ່ນ GIMPLE, ແຕ່ໃຫ້ຕົວຂະຫຍາຍຫຼາຍ
ຕົ້ນໄມ້ທີ່ຊັບຊ້ອນເພື່ອເຮັດວຽກເຮັດໃຫ້ການຜະລິດ RTL ດີຂຶ້ນ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນຢູ່ -O ແລະສູງກວ່າ.

-ftree-slsr
ປະຕິບັດການຫຼຸດຜ່ອນຄວາມເຂັ້ມແຂງເສັ້ນຊື່ໃສ່ຕົ້ນໄມ້. ນີ້ຮັບຮູ້ທີ່ກ່ຽວຂ້ອງ
ການສະແດງຜົນທີ່ກ່ຽວຂ້ອງກັບການຄູນ ແລະແທນທີ່ພວກມັນດ້ວຍການຄຳນວນລາຄາຖືກກວ່າ
ເມື່ອເປັນໄປໄດ້. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-ftree-vectorize
ປະຕິບັດ vectorization ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ເປີດໃຊ້ງານ -ftree-loop-vectorize ແລະ
-ftree-slp-vectorize ຖ້າ​ຫາກ​ວ່າ​ບໍ່​ໄດ້​ລະ​ບຸ​ຢ່າງ​ຊັດ​ເຈນ​.

-ftree-loop-vectorize
ປະຕິບັດ vectorization loop ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3 ແລະເວລາໃດ
-ftree-vectorize ເປີດໃຊ້ງານ.

-ftree-slp-vectorize
ປະຕິບັດການສ້າງ vectorization ພື້ນຖານກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3 ແລະ
ໃນເວລາທີ່ -ftree-vectorize ເປີດໃຊ້ງານ.

-fvect-cost-model=ຮູບແບບ
ປ່ຽນແປງຮູບແບບຄ່າໃຊ້ຈ່າຍທີ່ໃຊ້ສໍາລັບ vectorization. ໄດ້ ຮູບແບບ ການໂຕ້ຖຽງຄວນຈະເປັນຫນຶ່ງໃນ
ບໍ່ຈໍາກັດ, ການເຄື່ອນໄຫວ or ລາຄາຖືກ. ກັບ ບໍ່ຈໍາກັດ ຮູບແບບເສັ້ນທາງລະຫັດ vectorized ແມ່ນ
ສົມມຸດວ່າມີກໍາໄລໃນຂະນະທີ່ມີ ການເຄື່ອນໄຫວ ແບບຈໍາລອງ runtime checks ໄດ້
ເສັ້ນທາງລະຫັດ vectorized ເພື່ອເປີດໃຊ້ມັນພຽງແຕ່ສໍາລັບການນັບຊໍ້າຄືນທີ່ອາດຈະດໍາເນີນການ
ໄວກວ່າເມື່ອປະຕິບັດການ loop scalar ຕົ້ນສະບັບ. ໄດ້ ລາຄາຖືກ ຕົວແບບປິດໃຊ້ງານ
vectorization ຂອງ loops ບ່ອນທີ່ການເຮັດດັ່ງນັ້ນຈະເປັນຄ່າໃຊ້ຈ່າຍຫ້າມສໍາລັບຕົວຢ່າງເນື່ອງຈາກ
runtime ທີ່ຕ້ອງການກວດສອບການເອື່ອຍອີງຂອງຂໍ້ມູນຫຼືການຈັດຕໍາແຫນ່ງແຕ່ຖ້າບໍ່ດັ່ງນັ້ນເທົ່າກັບ
ການເຄື່ອນໄຫວ ຕົວແບບ. ຮູບແບບຄ່າໃຊ້ຈ່າຍເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບທຸງການເພີ່ມປະສິດທິພາບອື່ນໆແລະແມ່ນ
ບໍ່ວ່າຈະເປັນ ການເຄື່ອນໄຫວ or ລາຄາຖືກ.

-fsimd-cost-model=ຮູບແບບ
ປ່ຽນແປງຮູບແບບຄ່າໃຊ້ຈ່າຍທີ່ໃຊ້ສໍາລັບ vectorization ຂອງ loops ຫມາຍດ້ວຍ OpenMP ຫຼື Cilk
ບວກກັບຄໍາສັ່ງ simd. ໄດ້ ຮູບແບບ ການໂຕ້ຖຽງຄວນຈະເປັນຫນຶ່ງໃນ ບໍ່ຈໍາກັດ, ການເຄື່ອນໄຫວ, ລາຄາຖືກ.
ຄຸນ​ຄ່າ​ທັງ​ຫມົດ​ຂອງ​ ຮູບແບບ ມີ​ຄວາມ​ຫມາຍ​ດຽວ​ກັນ​ກັບ​ການ​ອະ​ທິ​ບາຍ​ໃນ​ -fvect-cost-model ແລະໂດຍ
ເລີ່ມຕົ້ນຮູບແບບຄ່າໃຊ້ຈ່າຍທີ່ກໍານົດດ້ວຍ -fvect-cost-model ຖືກນໍາໃຊ້.

-ftree-vrp
ປະຕິບັດການຂະຫຍາຍພັນຂອງມູນຄ່າຕາມຕົ້ນໄມ້. ນີ້ແມ່ນຄ້າຍຄືກັນກັບການຂະຫຍາຍພັນຢ່າງຕໍ່ເນື່ອງ
pass, ແຕ່ແທນທີ່ຈະເປັນຄ່າ, ໄລຍະຂອງຄ່າຈະຖືກຂະຫຍາຍພັນ. ນີ້ອະນຸຍາດໃຫ້
optimizers ເພື່ອເອົາການກວດສອບຂອບເຂດທີ່ບໍ່ຈໍາເປັນເຊັ່ນ: ການກວດສອບຂອບເຂດ array ແລະຕົວຊີ້ null
ກວດກາ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະສູງກວ່າ. ການລົບລ້າງການກວດສອບຕົວຊີ້ null
ແມ່ນເຮັດໄດ້ພຽງແຕ່ຖ້າຫາກວ່າ -fdelete-null-pointer-checks ເປີດໃຊ້ງານ.

-fsplit-ivs-in-unroller
ເປີດໃຊ້ການສະແດງອອກຂອງຄ່າຂອງຕົວແປ induction ໃນການຊໍ້າຄືນຕໍ່ມາຂອງ
unrolled loop ໂດຍໃຊ້ຄ່າໃນ iteration ທໍາອິດ. ນີ້ທໍາລາຍການເພິ່ງພາອາໄສຍາວ
ລະບົບຕ່ອງໂສ້, ດັ່ງນັ້ນການປັບປຸງປະສິດທິພາບຂອງການກໍານົດເວລາຜ່ານ.

ປະສົມປະສານຂອງ -fweb ແລະ CSE ມັກຈະພຽງພໍເພື່ອໃຫ້ໄດ້ຜົນດຽວກັນ.
ຢ່າງໃດກໍ່ຕາມ, ນັ້ນບໍ່ຫນ້າເຊື່ອຖືໃນກໍລະນີທີ່ຮ່າງກາຍຂອງ loop ແມ່ນສັບສົນຫຼາຍກ່ວາ a
ຕັນພື້ນຖານດຽວ. ມັນຍັງບໍ່ເຮັດວຽກຢູ່ໃນສະຖາປັດຕະຍະກໍາບາງຢ່າງເນື່ອງຈາກ
ຂໍ້ຈໍາກັດໃນ CSE pass.

ການເພີ່ມປະສິດທິພາບນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fvariable-expansion-in-unroller
ດ້ວຍຕົວເລືອກນີ້, ຜູ້ລວບລວມຂໍ້ມູນຈະສ້າງຫຼາຍສໍາເນົາຂອງຕົວແປທ້ອງຖິ່ນບາງຢ່າງເມື່ອ
unrolling loop, ເຊິ່ງສາມາດສົ່ງຜົນໃຫ້ລະຫັດດີກວ່າ.

-fpartial-inlining
ພາກສ່ວນໃນແຖວຂອງຫນ້າທີ່. ທາງເລືອກນີ້ມີຜົນກະທົບພຽງແຕ່ໃນເວລາທີ່ inlining ຕົວຂອງມັນເອງ
ເປີດໂດຍ -finline-functions or -finline-small-functions ຕົວເລືອກ

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O2.

-fpredictive-commoning
ປະຕິບັດການເພີ່ມປະສິດທິພາບທົ່ວໄປທີ່ຄາດຄະເນ, ie, ການໃຊ້ຄອມພິວເຕີ້ຄືນໃຫມ່ (ໂດຍສະເພາະ
ການໂຫຼດແລະເກັບຮັກສາຄວາມຊົງຈໍາ) ປະຕິບັດໃນຮອບວຽນທີ່ຜ່ານມາ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໃນລະດັບ -O3.

-fprefetch-loop-arrays
ຖ້າ​ຫາກ​ວ່າ​ເຄື່ອງ​ເປົ້າ​ຫມາຍ​ສະ​ຫນັບ​ສະ​ຫນູນ​, ສ້າງ​ຄໍາ​ແນະ​ນໍາ​ເພື່ອ prefetch ຄວາມ​ຊົງ​ຈໍາ​ທີ່​ຈະ​
ປັບປຸງປະສິດທິພາບຂອງ loops ທີ່ເຂົ້າເຖິງ array ຂະຫນາດໃຫຍ່.

ທາງເລືອກນີ້ອາດຈະສ້າງລະຫັດທີ່ດີກວ່າຫຼືຮ້າຍແຮງກວ່າເກົ່າ; ຜົນໄດ້ຮັບແມ່ນຂຶ້ນກັບຫຼາຍ
ໂຄງສ້າງຂອງ loops ພາຍໃນລະຫັດແຫຼ່ງ.

ຄົນພິການໃນລະດັບ -ອສ.

-fno-peephole
-fno-peephole2
ປິດໃຊ້ງານການເພີ່ມປະສິດທິພາບ pephole ສະເພາະເຄື່ອງຈັກ. ຄວາມແຕກຕ່າງລະຫວ່າງ
-fno-peephole ແລະ -fno-peephole2 ແມ່ນຢູ່ໃນວິທີການທີ່ພວກມັນຖືກປະຕິບັດຢູ່ໃນ compiler; ບາງ
ເປົ້າໝາຍໃຊ້ອັນໜຶ່ງ, ບາງຄົນໃຊ້ອີກອັນໜຶ່ງ, ບາງອັນໃຊ້ທັງສອງຢ່າງ.

-fpeephole ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ. -fpeephole2 ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fno-guess-branch-probability
ຢ່າຄາດເດົາຄວາມເປັນໄປໄດ້ຂອງສາຂາໂດຍໃຊ້ heuristics.

GCC ໃຊ້ heuristics ເພື່ອຄາດເດົາຄວາມເປັນໄປໄດ້ຂອງສາຂາຖ້າພວກເຂົາບໍ່ໄດ້ສະຫນອງໂດຍ
ຄວາມຄິດເຫັນກ່ຽວກັບໂປຣໄຟລ໌ (-fprofile-arcs). heuristics ເຫຼົ່ານີ້ແມ່ນອີງໃສ່ການໄຫຼຂອງການຄວບຄຸມ
ເສັ້ນສະແດງ. ຖ້າບາງຄວາມເປັນໄປໄດ້ສາຂາຖືກລະບຸໂດຍ "__builtin_expect", ຫຼັງຈາກນັ້ນ
heuristics ຖືກນໍາໃຊ້ເພື່ອຄາດເດົາຄວາມເປັນໄປໄດ້ຂອງສາຂາສໍາລັບສ່ວນທີ່ເຫຼືອຂອງການໄຫຼຂອງການຄວບຄຸມ
graph, ເອົາ "__builtin_expect" ຂໍ້ມູນເຂົ້າໄປໃນບັນຊີ. ການ​ພົວ​ພັນ​ລະ​ຫວ່າງ​
heuristics ແລະ "__builtin_expect" ສາມາດສັບສົນ, ແລະໃນບາງກໍລະນີ, ມັນອາດຈະເປັນປະໂຫຍດ.
ເພື່ອປິດການທໍາງານຂອງ heuristics ເພື່ອໃຫ້ຜົນກະທົບຂອງ "__builtin_expect" ງ່າຍຂຶ້ນ
ເຂົ້າໃຈ

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fguess-ສາຂາ-ຄວາມເປັນໄປໄດ້ ໃນ​ລະ​ດັບ​ -O, -O2, -O3, -ອສ.

-freorder-ຕັນ
Reorder blocks ພື້ນຖານໃນຟັງຊັນລວບລວມເພື່ອຫຼຸດຜ່ອນຈໍານວນຂອງການເອົາ
ສາຂາ ແລະປັບປຸງລະຫັດທ້ອງຖິ່ນ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-freorder-blocks-and-partition
ນອກເຫນືອໄປຈາກ reordering ຕັນພື້ນຖານໃນຫນ້າທີ່ລວບລວມ, ເພື່ອຫຼຸດຜ່ອນ
ຈໍາ​ນວນ​ຂອງ​ສາ​ຂາ​ປະ​ຕິ​ບັດ​, ການ​ແບ່ງ​ປັນ​ທ່ອນ​ໄມ້​ພື້ນ​ຖານ​ຮ້ອນ​ແລະ​ເຢັນ​ເປັນ​ພາກ​ສ່ວນ​ແຍກ​ຕ່າງ​ຫາກ​
ຂອງ​ການ​ປະ​ກອບ​ແລະ​ໄຟລ​໌ .o​, ເພື່ອ​ປັບ​ປຸງ​ຫນ້າ​ທີ່​ແລະ​ການ​ປະ​ຕິ​ບັດ​ທ້ອງ​ຖິ່ນ​ຖານ​ຄວາມ​ຈໍາ​.

ການເພີ່ມປະສິດທິພາບນີ້ຈະຖືກປິດໂດຍອັດຕະໂນມັດໃນການສະແດງການຈັດການຂໍ້ຍົກເວັ້ນ,
ສໍາ​ລັບ​ພາກ​ສ່ວນ linkonce​, ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ທີ່​ມີ​ຄຸນ​ລັກ​ສະ​ນະ​ພາກ​ທີ່​ກໍາ​ນົດ​ໂດຍ​ຜູ້​ໃຊ້​ແລະ​ກ່ຽວ​ກັບ​ການ​ໃດໆ​
ສະຖາປັດຕະຍະກໍາທີ່ບໍ່ສະຫນັບສະຫນູນພາກສ່ວນທີ່ມີຊື່.

ເປີດໃຊ້ສໍາລັບ x86 ໃນລະດັບ -O2, -O3.

-freorder-functions
ຈັດລໍາດັບຟັງຊັນໃນໄຟລ໌ວັດຖຸເພື່ອປັບປຸງລະຫັດທ້ອງຖິ່ນ. ນີ້​ແມ່ນ
ປະຕິບັດໂດຍການໃຊ້ສ່ວນຍ່ອຍພິເສດ ".text.hot" ສໍາລັບການປະຕິບັດເລື້ອຍໆທີ່ສຸດ
ຟັງຊັນ ແລະ ".text.unlikely" ສໍາລັບຟັງຊັນທີ່ບໍ່ເປັນໄປໄດ້. Reordering ແມ່ນເຮັດໄດ້ໂດຍ
ຕົວເຊື່ອມຕໍ່ດັ່ງນັ້ນຮູບແບບໄຟລ໌ວັດຖຸຕ້ອງສະຫນັບສະຫນູນພາກສ່ວນທີ່ມີຊື່ແລະຕົວເຊື່ອມຕໍ່ຕ້ອງວາງ
ເຂົາເຈົ້າໃນທາງທີ່ສົມເຫດສົມຜົນ.

ນອກຈາກນັ້ນ, ຄໍາຕິຊົມໂປຣໄຟລ໌ຕ້ອງມີຢູ່ເພື່ອເຮັດໃຫ້ທາງເລືອກນີ້ມີປະສິດທິພາບ. ເບິ່ງ
-fprofile-arcs ສໍາລັບລາຍລະອຽດ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fstrict-aliasing
ອະນຸຍາດໃຫ້ compiler ສົມມຸດກົດລະບຽບການນາມແຝງທີ່ເຂັ້ມງວດທີ່ສຸດທີ່ໃຊ້ກັບພາສາ
ຖືກລວບລວມ. ສໍາລັບ C (ແລະ C ++), ນີ້ຈະເປີດໃຊ້ການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ປະເພດຂອງ
ການສະແດງອອກ. ໂດຍສະເພາະ, ວັດຖຸຂອງປະເພດຫນຶ່ງແມ່ນສົມມຸດວ່າບໍ່ເຄີຍອາໄສຢູ່
ທີ່ຢູ່ດຽວກັນກັບວັດຖຸຂອງປະເພດທີ່ແຕກຕ່າງກັນ, ເວັ້ນເສຍແຕ່ວ່າປະເພດເກືອບຄືກັນ.
ຕົວຢ່າງ, "unsigned int" ສາມາດ alias ເປັນ "int", ແຕ່ບໍ່ແມ່ນ "void*" ຫຼື "double". ກ
ປະເພດຕົວອັກສອນອາດນາມແຝງປະເພດອື່ນ.

ເອົາໃຈໃສ່ເປັນພິເສດຕໍ່ລະຫັດແບບນີ້:

ສະຫະພັນ a_union {
int i;
double d;
};

int f() {
ສະຫະພັນ a_union t;
td = 3.0;
ti ກັບຄືນ;
}

ການປະຕິບັດການອ່ານຈາກສະມາຊິກສະຫະພັນທີ່ແຕກຕ່າງກັນກ່ວາຫນຶ່ງໃນບໍ່ດົນມານີ້
ລາຍ​ລັກ​ອັກ​ສອນ​ເພື່ອ (ເອີ້ນ​ວ່າ "ປະ​ເພດ​-punning​"​) ແມ່ນ​ທົ່ວ​ໄປ​. ເຖິງແມ່ນວ່າມີ -fstrict-aliasing, ປະ​ເພດ-
punning ແມ່ນອະນຸຍາດໃຫ້, ສະຫນອງຄວາມຊົງຈໍາແມ່ນເຂົ້າເຖິງໂດຍຜ່ານປະເພດສະຫະພັນ. ດັ່ງນັ້ນ, ໄດ້
ລະຫັດຂ້າງເທິງເຮັດວຽກຕາມທີ່ຄາດໄວ້. ຢ່າງໃດກໍຕາມ, ລະຫັດນີ້ອາດຈະບໍ່:

int f() {
ສະຫະພັນ a_union t;
int* ip;
td = 3.0;
ip = &t.i;
ກັບຄືນ *ip;
}

ເຊັ່ນດຽວກັນ, ການເຂົ້າເຖິງໂດຍການເອົາທີ່ຢູ່, ການໂຍນຕົວຊີ້ຜົນໄດ້ຮັບແລະ
ການອ້າງອິງຜົນໄດ້ຮັບມີພຶດຕິກໍາທີ່ບໍ່ໄດ້ກໍານົດ, ເຖິງແມ່ນວ່ານັກສະແດງຈະໃຊ້ປະເພດຂອງສະຫະພັນ,
ຕົວຢ່າງ:

int f() {
double d = 3.0;
ກັບຄືນ ((ສະຫະພັນ a_union *) &d)->i;
}

ໄດ້ -fstrict-aliasing ທາງ​ເລືອກ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​ໃນ​ລະ​ດັບ​ -O2, -O3, -ອສ.

-fstrict-ລົ້ນ
ອະນຸຍາດໃຫ້ compiler ຖືກົດລະບຽບການ overflow ທີ່ເຂັ້ມງວດ, ຂຶ້ນກັບພາສາ
ຖືກລວບລວມ. ສໍາລັບ C (ແລະ C ++) ນີ້ຫມາຍຄວາມວ່າ overflow ໃນເວລາທີ່ເຮັດເລກເລກກັບ
ຕົວເລກທີ່ລົງນາມແມ່ນບໍ່ໄດ້ກໍານົດ, ຊຶ່ງຫມາຍຄວາມວ່າຜູ້ລວບລວມຂໍ້ມູນອາດຈະສົມມຸດວ່າມັນບໍ່ໄດ້
ເກີດຂຶ້ນ. ນີ້ອະນຸຍາດໃຫ້ມີການເພີ່ມປະສິດທິພາບຕ່າງໆ. ຕົວຢ່າງ, compiler ສົມມຸດວ່າ
ການສະແດງອອກເຊັ່ນ "i + 10 > i" ແມ່ນຖືກຕ້ອງສະເຫມີສໍາລັບການເຊັນ "i". ສົມມຸດຕິຖານນີ້ແມ່ນ
ຖືກຕ້ອງພຽງແຕ່ຖ້າການລົງນາມ overflow ແມ່ນບໍ່ໄດ້ກໍານົດ, ເນື່ອງຈາກວ່າການສະແດງອອກແມ່ນບໍ່ຖືກຕ້ອງຖ້າ "i + 10"
overflows ເມື່ອໃຊ້ twos complement ເລກຄະນິດສາດ. ເມື່ອທາງເລືອກນີ້ມີຜົນກະທົບໃດໆ
ພະຍາຍາມກໍານົດວ່າການດໍາເນີນການກ່ຽວກັບການ overflows ຕົວເລກທີ່ລົງນາມຕ້ອງໄດ້ຮັບການຂຽນ
ລະມັດລະວັງເພື່ອບໍ່ໃຫ້ມີສ່ວນກ່ຽວຂ້ອງຢ່າງແທ້ຈິງ.

ທາງ​ເລືອກ​ນີ້​ຍັງ​ອະ​ນຸ​ຍາດ​ໃຫ້​ຜູ້​ສັງ​ລວມ​ສົມ​ມຸດ​ຄວາມ​ຫມາຍ​ຕົວ​ຊີ້​ທີ່​ເຂັ້ມ​ງວດ​: ໃຫ້ a
ຕົວຊີ້ໄປຫາວັດຖຸ, ຖ້າການເພີ່ມຄ່າຊົດເຊີຍໃສ່ຕົວຊີ້ນັ້ນຈະບໍ່ສ້າງຕົວຊີ້
ກັບວັດຖຸດຽວກັນ, ການເພີ່ມເຕີມແມ່ນບໍ່ໄດ້ກໍານົດ. ນີ້ອະນຸຍາດໃຫ້ compiler ສະຫຼຸບ
ວ່າ "p + u > p" ເປັນຄວາມຈິງສະເໝີສຳລັບຕົວຊີ້ "p" ແລະຈຳນວນເຕັມທີ່ບໍ່ໄດ້ເຊັນ "u". ນີ້
ການສົມມຸດຕິຖານແມ່ນຖືກຕ້ອງເທົ່ານັ້ນເພາະວ່າການຫໍ່ຕົວຊີ້ບໍ່ໄດ້ຖືກ ກຳ ນົດ, ດັ່ງທີ່ສະແດງອອກ
false ຖ້າ "p + u" overflows ໂດຍໃຊ້ twos complement arithmetic.

ເບິ່ງອີກ -fwrapv ທາງເລືອກ. ການນໍາໃຊ້ -fwrapv ຫມາຍຄວາມວ່າ integer signed overflow ແມ່ນ
ກໍານົດຢ່າງເຕັມສ່ວນ: ມັນຫໍ່. ເມື່ອ​ໃດ​ -fwrapv ຖືກນໍາໃຊ້, ບໍ່ມີຄວາມແຕກຕ່າງລະຫວ່າງ
-fstrict-ລົ້ນ ແລະ -fno-strict-overflow ສໍາລັບຈໍານວນເຕັມ. ກັບ -fwrapv ບາງ​ປະ​ເພດ​
ອະນຸຍາດຂອງ overflow. ຕົວຢ່າງ, ຖ້າ compiler ໄດ້ຮັບ overflow ໃນເວລາທີ່ເຮັດ
ເລກເລກໃນຄ່າຄົງທີ່, ຄ່າ overflowed ຍັງສາມາດຖືກນໍາໃຊ້ກັບ -fwrapv, ແຕ່ບໍ່ແມ່ນ
ຖ້າບໍ່ດັ່ງນັ້ນ.

ໄດ້ -fstrict-ລົ້ນ ທາງ​ເລືອກ​ແມ່ນ​ເປີດ​ໃຫ້​ໃຊ້​ງານ​ໃນ​ລະ​ດັບ​ -O2, -O3, -ອສ.

-falign-functions
-falign-functions=n
ຈັດລຽງການເລີ່ມຕົ້ນຂອງຟັງຊັນຕໍ່ກັບພະລັງງານຕໍ່ໄປຂອງສອງອັນໃຫຍ່ກວ່າ n, ຂ້າມເຖິງ n
ໄບຕ໌. ຕົວ​ຢ່າງ, -falign-functions=32 ຈັດຮຽງຟັງຊັນໄປຫາ 32-byte ຖັດໄປ
ຊາຍແດນ, ແຕ່ -falign-functions=24 ສອດຄ້ອງກັບຂອບເຂດ 32-byte ຖັດໄປພຽງແຕ່ຖ້າວ່ານີ້
ສາມາດເຮັດໄດ້ໂດຍການຂ້າມ 23 bytes ຫຼືຫນ້ອຍກວ່າ.

-fno-align-functions ແລະ -falign-functions=1 ແມ່ນທຽບເທົ່າແລະຫມາຍຄວາມວ່າຫນ້າທີ່
ບໍ່ສອດຄ່ອງ.

ຜູ້ປະກອບບາງສ່ວນພຽງແຕ່ສະຫນັບສະຫນູນທຸງນີ້ເມື່ອ n ເປັນພະລັງງານຂອງສອງ; ໃນກໍລະນີດັ່ງກ່າວ, ມັນແມ່ນ
ມົນຂຶ້ນ.

If n ບໍ່ໄດ້ລະບຸ ຫຼືເປັນສູນ, ໃຫ້ໃຊ້ຄ່າເລີ່ມຕົ້ນທີ່ຂຶ້ນກັບເຄື່ອງຈັກ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-falign-ປ້າຍ
-falign-labels=n
ຈັດວາງເປົ້າໝາຍສາຂາທັງໝົດໃຫ້ເປັນເຂດແດນທີ່ມີອຳນາດຂອງສອງ, ຂ້າມໄປເຖິງ n bytes ຄື
-falign-functions. ຕົວເລືອກນີ້ສາມາດເຮັດໃຫ້ລະຫັດຊ້າລົງໄດ້ຢ່າງງ່າຍດາຍ, ເພາະວ່າມັນຕ້ອງໃສ່
ການດໍາເນີນງານ dummy ສໍາລັບໃນເວລາທີ່ເປົ້າຫມາຍສາຂາແມ່ນບັນລຸໄດ້ໃນການໄຫຼປົກກະຕິຂອງລະຫັດ.

-fno-align-labels ແລະ -falign-labels=1 ແມ່ນທຽບເທົ່າແລະຫມາຍຄວາມວ່າປ້າຍບໍ່ແມ່ນ
ສອດຄ່ອງ.

If -falign-loops or -falign-jumps ແມ່ນໃຊ້ໄດ້ ແລະຫຼາຍກວ່າຄ່ານີ້, ຈາກນັ້ນ
ຄ່າຂອງພວກມັນຖືກໃຊ້ແທນ.

If n ບໍ່ໄດ້ລະບຸ ຫຼືເປັນສູນ, ໃຫ້ໃຊ້ຄ່າເລີ່ມຕົ້ນທີ່ຂຶ້ນກັບເຄື່ອງຈັກ ເຊິ່ງເປັນໄປໄດ້ຫຼາຍ
ຈະ 1, ຊຶ່ງຫມາຍຄວາມວ່າບໍ່ມີການສອດຄ່ອງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-falign-loops
-falign-loops=n
ຈັດຮຽງ loops ໃຫ້ເປັນເຂດແດນພະລັງງານຂອງສອງ, ຂ້າມເຖິງ n bytes ຄື -falign-functions.
ຖ້າ loops ຖືກປະຕິບັດຫຼາຍຄັ້ງ, ນີ້ເຮັດໃຫ້ເຖິງການປະຕິບັດໃດໆຂອງ dummy
ການປະຕິບັດງານ.

-fno-align-loops ແລະ -falign-loops=1 ແມ່ນທຽບເທົ່າແລະຫມາຍຄວາມວ່າ loops ບໍ່ແມ່ນ
ສອດຄ່ອງ.

If n ບໍ່ໄດ້ລະບຸ ຫຼືເປັນສູນ, ໃຫ້ໃຊ້ຄ່າເລີ່ມຕົ້ນທີ່ຂຶ້ນກັບເຄື່ອງຈັກ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-falign-jumps
-falign-jumps=n
ຈັດວາງເປົ້າໝາຍສາຂາໃຫ້ເປັນເຂດແດນທີ່ມີອຳນາດຂອງສອງ, ສຳລັບເປົ້າໝາຍສາຂາທີ່ເປົ້າໝາຍ
ສາມາດບັນລຸໄດ້ໂດຍການໂດດ, ຂ້າມເຖິງ n bytes ຄື -falign-functions. ໃນ
ກໍລະນີນີ້, ບໍ່ຈໍາເປັນຕ້ອງດໍາເນີນການ dummy.

-fno-align-jumps ແລະ -falign-jumps=1 ແມ່ນທຽບເທົ່າແລະຫມາຍຄວາມວ່າ loops ບໍ່ແມ່ນ
ສອດຄ່ອງ.

If n ບໍ່ໄດ້ລະບຸ ຫຼືເປັນສູນ, ໃຫ້ໃຊ້ຄ່າເລີ່ມຕົ້ນທີ່ຂຶ້ນກັບເຄື່ອງຈັກ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-funit-at-a-time
ທາງເລືອກນີ້ຖືກປະໄວ້ສໍາລັບເຫດຜົນຄວາມເຂົ້າກັນໄດ້. -funit-at-a-time ບໍ່ມີຜົນກະທົບ, ໃນຂະນະທີ່
-fno-unit-at-a-time implies -fno-toplevel-reorder ແລະ -fno-section-anchors.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fno-toplevel-reorder
ຢ່າຈັດລໍາດັບຟັງຊັນລະດັບສູງສຸດ, ຕົວແປ, ແລະຄໍາຖະແຫຼງ "asm". ສົ່ງອອກໃຫ້ເຂົາເຈົ້າໃນ
ຄໍາສັ່ງດຽວກັນທີ່ພວກເຂົາປາກົດຢູ່ໃນໄຟລ໌ປ້ອນຂໍ້ມູນ. ເມື່ອຕົວເລືອກນີ້ຖືກໃຊ້,
ຕົວແປສະຖິດທີ່ບໍ່ໄດ້ອ້າງອີງບໍ່ໄດ້ຖືກໂຍກຍ້າຍ. ທາງເລືອກນີ້ມີຈຸດປະສົງເພື່ອສະຫນັບສະຫນູນ
ລະຫັດທີ່ມີຢູ່ແລ້ວທີ່ອີງໃສ່ຄໍາສັ່ງໂດຍສະເພາະ. ສໍາລັບລະຫັດໃຫມ່, ມັນດີກວ່າທີ່ຈະໃຊ້
ຄຸນສົມບັດເມື່ອເປັນໄປໄດ້.

ເປີດໃຊ້ຢູ່ໃນລະດັບ -O0. ເມື່ອພິການຢ່າງຊັດເຈນ, ມັນຍັງຫມາຍເຖິງ -fno-section-anchors,
ເຊິ່ງຖືກເປີດໃຊ້ເປັນຢ່າງອື່ນຢູ່ທີ່ -O0 ໃນບາງເປົ້າໝາຍ.

-fweb
ກໍ່ສ້າງເວັບຕາມທີ່ໃຊ້ທົ່ວໄປເພື່ອຈຸດປະສົງການຈັດສັນການລົງທະບຽນ ແລະມອບໝາຍແຕ່ລະເວັບ
ລົງທະບຽນ pseudo ສ່ວນບຸກຄົນ. ອັນນີ້ອະນຸຍາດໃຫ້ໃບທະບຽນການຈັດສັນເພື່ອດໍາເນີນການໄດ້
pseudos ໂດຍກົງ, ແຕ່ຍັງເສີມສ້າງການເພີ່ມປະສິດທິພາບອື່ນໆຈໍານວນຫນຶ່ງເຊັ່ນ CSE,
loop optimizer ແລະຕົວລຶບລະຫັດຕາຍທີ່ບໍ່ສໍາຄັນ. ມັນສາມາດ, ຢ່າງໃດກໍຕາມ, ເຮັດໃຫ້ debugging
ເປັນໄປບໍ່ໄດ້, ເພາະວ່າຕົວແປບໍ່ຢູ່ໃນ "ທະບຽນເຮືອນ".

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນດ້ວຍ -funroll-loops.

- ໂຄງ​ການ​ທັງ​ຫມົດ​
ສົມມຸດວ່າຫນ່ວຍງານລວບລວມປະຈຸບັນເປັນຕົວແທນຂອງໂປຼແກຼມທັງຫມົດທີ່ຖືກລວບລວມ.
ຫນ້າທີ່ສາທາລະນະທັງຫມົດແລະຕົວແປຍົກເວັ້ນ "ຕົ້ນຕໍ" ແລະຜູ້ທີ່ລວມເຂົ້າກັນໂດຍ
attribute "externally_visible" ກາຍເປັນຫນ້າທີ່ຄົງທີ່ແລະໃນຜົນກະທົບແມ່ນ optimized
ຮຸກຮານຫຼາຍຂຶ້ນໂດຍຕົວເພີ່ມປະສິດທິພາບລະຫວ່າງຂັ້ນຕອນ.

ທາງເລືອກນີ້ບໍ່ຄວນຖືກນໍາໃຊ້ໃນການປະສົມປະສານກັບ -flto. ແທນທີ່ຈະອີງໃສ່ຕົວເຊື່ອມຕໍ່
plugin ຄວນໃຫ້ຂໍ້ມູນທີ່ປອດໄພກວ່າແລະຊັດເຈນກວ່າ.

-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 ບັນທຶກການເປັນຕົວແທນຂອງ bytecode ຂອງ GIMPLE ເປັນພິເສດ
ພາກສ່ວນ ELF ພາຍໃນ foo.o ແລະ bar.o. ຄຳຮຽກຮ້ອງສຸດທ້າຍຈະອ່ານ GIMPLE bytecode
ຈາກ foo.o ແລະ bar.o, ລວມທັງສອງໄຟລ໌ເຂົ້າໄປໃນຮູບພາບພາຍໃນດຽວ, ແລະລວບລວມ
ຜົນໄດ້ຮັບຕາມປົກກະຕິ. ນັບຕັ້ງແຕ່ທັງສອງ foo.o ແລະ bar.o ຖືກລວມເຂົ້າເປັນຮູບດຽວ, ນີ້
ເຮັດໃຫ້ການວິເຄາະແລະການເພີ່ມປະສິດທິພາບລະຫວ່າງກັນທັງຫມົດໃນ GCC ເຮັດວຽກໃນທົ່ວ
ສອງໄຟລ໌ຄືກັບວ່າພວກມັນເປັນອັນດຽວ. ນີ້ຫມາຍຄວາມວ່າ, ສໍາລັບການຍົກຕົວຢ່າງ, ວ່າ inliner ແມ່ນ
ສາມາດ inline ຫນ້າທີ່ຢູ່ໃນ bar.o ເຂົ້າ​ໄປ​ໃນ​ຫນ້າ​ທີ່​ໃນ​ foo.o ແລະໃນທາງກັບກັນ.

ອີກວິທີໜຶ່ງ (ງ່າຍກວ່າ) ເພື່ອເຮັດໃຫ້ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ແມ່ນ:

gcc -o myprog -flto -O2 foo.c bar.c

ຂ້າງເທິງສ້າງ bytecode ສໍາລັບ foo.c ແລະ bar.c, ຜະສົມຜະສານພວກມັນເຂົ້າກັນເປັນອັນດຽວ
ການເປັນຕົວແທນ GIMPLE ແລະເພີ່ມປະສິດທິພາບໃຫ້ເຂົາເຈົ້າເປັນປົກກະຕິເພື່ອຜະລິດ myprog.

ສິ່ງດຽວທີ່ສໍາຄັນທີ່ຕ້ອງຢູ່ໃນໃຈແມ່ນເພື່ອໃຫ້ສາມາດເພີ່ມປະສິດທິພາບການເຊື່ອມຕໍ່ເວລາ
ຈໍາເປັນຕ້ອງໃຊ້ໄດເວີ GCC ເພື່ອປະຕິບັດການເຊື່ອມໂຍງຂັ້ນຕອນ. GCC ຫຼັງຈາກນັ້ນດໍາເນີນການອັດຕະໂນມັດ
link-time optimization ຖ້າມີວັດຖຸທີ່ກ່ຽວຂ້ອງຖືກລວບລວມດ້ວຍ -flto
ທາງເລືອກແຖວຄໍາສັ່ງ. ໂດຍທົ່ວໄປແລ້ວທ່ານຄວນລະບຸຕົວເລືອກການເພີ່ມປະສິດທິພາບທີ່ຈະໃຊ້
ສໍາລັບການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ເຖິງແມ່ນວ່າ GCC ພະຍາຍາມສະຫລາດໃນການຄາດເດົາການເພີ່ມປະສິດທິພາບ
ລະດັບທີ່ຈະໃຊ້ຈາກທາງເລືອກທີ່ໃຊ້ໃນເວລາລວບລວມຖ້າທ່ານບໍ່ລະບຸຫນຶ່ງໃນການເຊື່ອມຕໍ່-
ເວລາ. ທ່ານສະເຫມີສາມາດ override ການຕັດສິນໃຈອັດຕະໂນມັດເພື່ອເຮັດ link-time optimization ຢູ່
link-time ຜ່ານ -fno-lto ກັບຄໍາສັ່ງເຊື່ອມຕໍ່.

ເພື່ອເຮັດໃຫ້ການເພີ່ມປະສິດທິພາບໂຄງການທັງຫມົດມີປະສິດທິພາບ, ມັນຈໍາເປັນຕ້ອງເຮັດໃຫ້ແນ່ນອນທັງຫມົດ
ສົມ​ມຸດ​ຕິ​ຖານ​ໂຄງ​ການ​. compiler ຕ້ອງການຮູ້ວ່າຫນ້າທີ່ແລະຕົວແປສາມາດເປັນແນວໃດ
ເຂົ້າເຖິງໂດຍຫ້ອງສະຫມຸດແລະ runtime ຢູ່ນອກຫນ່ວຍງານ link-time optimized. ເມື່ອ​ໃດ​
ສະຫນັບສະຫນູນໂດຍ linker, plugin linker (ເບິ່ງ -fuse-linker-plugin) ຜ່ານ
ຂໍ້ມູນກັບຜູ້ລວບລວມຂໍ້ມູນກ່ຽວກັບສັນຍາລັກທີ່ໃຊ້ແລ້ວແລະພາຍນອກທີ່ເຫັນໄດ້ຊັດເຈນ. ໃນ​ເວ​ລາ​ທີ່
linker plugin ບໍ່ສາມາດໃຊ້ໄດ້, - ໂຄງ​ການ​ທັງ​ຫມົດ​ ຄວນຖືກນໍາໃຊ້ເພື່ອອະນຸຍາດໃຫ້ລວບລວມຂໍ້ມູນ
ເພື່ອເຮັດໃຫ້ສົມມຸດຕິຖານເຫຼົ່ານີ້, ເຊິ່ງນໍາໄປສູ່ການຕັດສິນໃຈການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍຂຶ້ນ.

ເມື່ອ​ໃດ​ -fuse-linker-plugin ບໍ່ໄດ້ຖືກເປີດໃຊ້ຫຼັງຈາກນັ້ນ, ເມື່ອໄຟລ໌ຖືກລວບລວມດ້ວຍ -flto, ການ
ໄຟລ໌ວັດຖຸທີ່ສ້າງຂຶ້ນມີຂະຫນາດໃຫຍ່ກວ່າໄຟລ໌ວັດຖຸປົກກະຕິເນື່ອງຈາກວ່າມັນມີ GIMPLE
bytecodes ແລະລະຫັດສຸດທ້າຍປົກກະຕິ (ເບິ່ງ -ffat-lto-ວັດຖຸ. ນີ້ຫມາຍຄວາມວ່າວັດຖຸນັ້ນ
ໄຟລ໌ທີ່ມີຂໍ້ມູນ LTO ສາມາດເຊື່ອມຕໍ່ເປັນໄຟລ໌ວັດຖຸປົກກະຕິ; ຖ້າ -fno-lto ແມ່ນຜ່ານ
ກັບຕົວເຊື່ອມຕໍ່, ບໍ່ມີການເພີ່ມປະສິດທິພາບ interprocedural ຖືກນໍາໃຊ້. ໃຫ້ສັງເກດວ່າເມື່ອ
-fno-fat-lto-objects ຖືກເປີດໃຊ້ງານ compile-stage ແມ່ນໄວຂຶ້ນ ແຕ່ທ່ານບໍ່ສາມາດປະຕິບັດໄດ້
ປົກກະຕິ, ການເຊື່ອມຕໍ່ທີ່ບໍ່ແມ່ນ 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

ນີ້ຜະລິດໄຟລ໌ວັດຖຸສ່ວນບຸກຄົນທີ່ມີລະຫັດ assembler unoptimized, ແຕ່
binary ຜົນໄດ້ຮັບ myprog ແມ່ນ optimized ຢູ່ -O3. ຖ້າ, ແທນທີ່ຈະ, ຄູ່ສຸດທ້າຍແມ່ນ
ສ້າງຂຶ້ນດ້ວຍ -fno-lto, ຫຼັງຈາກນັ້ນ myprog ບໍ່ໄດ້ຖືກປັບປຸງໃຫ້ເໝາະສົມ.

ເມື່ອຜະລິດຄູ່ສຸດທ້າຍ, GCC ພຽງແຕ່ໃຊ້ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ກັບສິ່ງເຫຼົ່ານັ້ນ
ໄຟລ໌ທີ່ມີ bytecode. ດັ່ງນັ້ນ, ທ່ານສາມາດປະສົມແລະກົງກັບໄຟລ໌ວັດຖຸແລະ
ຫ້ອງສະຫມຸດທີ່ມີ GIMPLE bytecodes ແລະລະຫັດວັດຖຸສຸດທ້າຍ. GCC ເລືອກອັດຕະໂນມັດ
ໄຟລ໌ໃດທີ່ຈະເພີ່ມປະສິດທິພາບໃນໂຫມດ LTO ແລະໄຟລ໌ໃດທີ່ຈະເຊື່ອມຕໍ່ໂດຍບໍ່ມີການເພີ່ມເຕີມ
ການປຸງແຕ່ງ.

ມີບາງທຸງການສ້າງລະຫັດທີ່ຖືກຮັກສາໄວ້ໂດຍ GCC ເມື່ອສ້າງ bytecodes, ເປັນ
ພວກເຂົາເຈົ້າຈໍາເປັນຕ້ອງໄດ້ຖືກນໍາໃຊ້ໃນໄລຍະການເຊື່ອມຕໍ່ສຸດທ້າຍ. ໂດຍທົ່ວໄປແລ້ວທາງເລືອກທີ່ລະບຸໄວ້ຢູ່ທີ່
link-time override ທີ່ລະບຸໄວ້ໃນເວລາລວບລວມ.

ຖ້າທ່ານບໍ່ລະບຸຕົວເລືອກລະດັບການເພີ່ມປະສິດທິພາບ -O ໃນເວລາເຊື່ອມຕໍ່ຫຼັງຈາກນັ້ນ GCC ຈະຄິດໄລ່
ຫນຶ່ງໂດຍອີງໃສ່ລະດັບການເພີ່ມປະສິດທິພາບທີ່ໃຊ້ໃນເວລາລວບລວມໄຟລ໌ວັດຖຸ. ໄດ້
ລະດັບການເພີ່ມປະສິດທິພາບສູງສຸດຊະນະຢູ່ທີ່ນີ້.

ໃນປັດຈຸບັນ, ທາງເລືອກຕໍ່ໄປນີ້ແລະການຕັ້ງຄ່າຂອງພວກເຂົາແມ່ນເອົາມາຈາກໄຟລ໌ວັດຖຸທໍາອິດ
ທີ່​ໄດ້​ລະ​ບຸ​ຢ່າງ​ຊັດ​ເຈນ​ວ່າ​: -fPIC, -fpic, -fpie, -fcommon, - ຂໍ້​ຍົກ​ເວັ້ນ​,
-fnon-call-exceptions, -fgnu-tm ແລະທັງ ໝົດ -m ທຸງ​ເປົ້າ​ຫມາຍ​.

ທຸງການປ່ຽນແປງ ABI ທີ່ແນ່ນອນແມ່ນຕ້ອງການໃຫ້ກົງກັນໃນທຸກຫນ່ວຍງານລວບລວມແລະພະຍາຍາມ
ເພື່ອ override ນີ້ໃນເວລາເຊື່ອມຕໍ່ທີ່ມີຄ່າທີ່ຂັດແຍ້ງແມ່ນຖືກລະເລີຍ. ນີ້ປະກອບມີ
ທາງ​ເລືອກ​ເຊັ່ນ​: -freg-struct-return ແລະ -fpcc-struct-return.

ທາງເລືອກອື່ນເຊັ່ນ: -ffp-ສັນຍາ, -fno-strict-overflow, -fwrapv, -fno-trapv or
-fno-strict-aliasing ຖືກສົ່ງຜ່ານໄປສູ່ຂັ້ນຕອນການເຊື່ອມໂຍງແລະຖືກລວມເຂົ້າກັນແບບອະນຸລັກ
ສໍາລັບຫນ່ວຍງານການແປທີ່ຂັດແຍ້ງກັນ. ໂດຍສະເພາະ -fno-strict-overflow, -fwrapv ແລະ
-fno-trapv ເອົາຄວາມສໍາຄັນແລະຕົວຢ່າງ -ffp-contract=ປິດ ມີຄວາມສຳຄັນກວ່າ
-ffp-contract=ໄວ. ທ່ານສາມາດ override ເຂົາເຈົ້າໃນເວລາເຊື່ອມຕໍ່.

ມັນແນະນໍາໃຫ້ທ່ານລວບລວມໄຟລ໌ທັງຫມົດທີ່ເຂົ້າຮ່ວມໃນການເຊື່ອມຕໍ່ດຽວກັນກັບ
ທາງເລືອກດຽວກັນແລະຍັງລະບຸທາງເລືອກເຫຼົ່ານັ້ນໃນເວລາເຊື່ອມຕໍ່.

ຖ້າ 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++ runtime libraries ແລະ
-lgfortran ໄດ້ຖືກເພີ່ມເພື່ອໃຫ້ໄດ້ຫ້ອງສະຫມຸດ Fortran runtime. ໂດຍທົ່ວໄປ, ໃນເວລາທີ່ປະສົມ
ພາສາໃນໂຫມດ LTO, ທ່ານຄວນໃຊ້ຕົວເລືອກຄໍາສັ່ງເຊື່ອມຕໍ່ດຽວກັນກັບເວລາປະສົມ
ພາ​ສາ​ໃນ​ການ​ລວບ​ລວມ​ເປັນ​ປົກ​ກະ​ຕິ (ບໍ່​ແມ່ນ LTO​)​.

ຖ້າໄຟລ໌ວັດຖຸທີ່ມີ GIMPLE bytecode ຖືກເກັບໄວ້ໃນຄັງເກັບມ້ຽນ, ເວົ້າ
libfoo.a, ມັນເປັນໄປໄດ້ທີ່ຈະສະກັດແລະນໍາໃຊ້ພວກມັນຢູ່ໃນການເຊື່ອມຕໍ່ LTO ຖ້າທ່ານກໍາລັງໃຊ້ a
linker ສະຫນັບສະຫນູນ plugin. ເພື່ອສ້າງຫ້ອງສະຫມຸດຄົງທີ່ເຫມາະສົມສໍາລັບ LTO, ໃຊ້ gcc-ar
ແລະ gcc-ranlib ແທນ​ທີ່ ar ແລະ ranlib; ເພື່ອສະແດງສັນຍາລັກຂອງໄຟລ໌ວັດຖຸທີ່ມີ
GIMPLE bytecode, ໃຊ້ gcc-nm. ຄໍາສັ່ງເຫຼົ່ານັ້ນຕ້ອງການນັ້ນ ar, ranlib ແລະ nm ໄດ້
ລວບລວມດ້ວຍການສະຫນັບສະຫນູນ plugin. ໃນເວລາເຊື່ອມຕໍ່, ໃຊ້ທຸງ -fuse-linker-plugin to
ໃຫ້ແນ່ໃຈວ່າຫ້ອງສະຫມຸດເຂົ້າຮ່ວມໃນຂະບວນການເພີ່ມປະສິດທິພາບ LTO:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

ດ້ວຍການເປີດໃຊ້ plugin ເຊື່ອມຕໍ່, ຕົວເຊື່ອມຕໍ່ສະກັດໄຟລ໌ GIMPLE ທີ່ຈໍາເປັນຈາກ
libfoo.a ແລະສົ່ງພວກເຂົາໄປສູ່ GCC ແລ່ນເພື່ອເຮັດໃຫ້ພວກເຂົາເປັນສ່ວນຫນຶ່ງຂອງການລວບລວມ
ຮູບພາບ GIMPLE ທີ່ຈະເພີ່ມປະສິດທິພາບ.

ຖ້າທ່ານບໍ່ໄດ້ໃຊ້ຕົວເຊື່ອມຕໍ່ທີ່ມີການສະຫນັບສະຫນູນ plugin ແລະ / ຫຼືບໍ່ເປີດໃຊ້ຕົວເຊື່ອມຕໍ່
plugin, ຫຼັງຈາກນັ້ນວັດຖຸພາຍໃນ libfoo.a ຖືກສະກັດແລະເຊື່ອມໂຍງຕາມປົກກະຕິ, ແຕ່ພວກມັນ
ບໍ່ໄດ້ເຂົ້າຮ່ວມໃນຂະບວນການເພີ່ມປະສິດທິພາບ LTO. ເພື່ອເຮັດໃຫ້ຫ້ອງສະຫມຸດສະຖິດ
ທີ່ເຫມາະສົມສໍາລັບທັງການເພີ່ມປະສິດທິພາບ LTO ແລະການເຊື່ອມໂຍງແບບປົກກະຕິ, ລວບລວມໄຟລ໌ວັດຖຸຂອງມັນດ້ວຍ
-flto -ffat-lto-ວັດຖຸ.

ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ບໍ່ຈໍາເປັນຕ້ອງມີໂປຼແກຼມທັງຫມົດເພື່ອດໍາເນີນການ.
ຖ້າໂຄງການບໍ່ຕ້ອງການສັນຍາລັກໃດໆທີ່ຈະສົ່ງອອກ, ມັນເປັນໄປໄດ້ທີ່ຈະສົມທົບ
-flto ແລະ - ໂຄງ​ການ​ທັງ​ຫມົດ​ ເພື່ອໃຫ້ຕົວເພີ່ມປະສິດທິພາບ interprocedural ໃຊ້ໄດ້ຫຼາຍຂຶ້ນ
ສົມມຸດຕິຖານທີ່ຮຸກຮານເຊິ່ງອາດຈະນໍາໄປສູ່ການປັບປຸງໂອກາດການເພີ່ມປະສິດທິພາບ. ການນໍາໃຊ້
- ໂຄງ​ການ​ທັງ​ຫມົດ​ ບໍ່ຈໍາເປັນເມື່ອ plugin ເຊື່ອມຕໍ່ເຮັດວຽກ (ເບິ່ງ -fuse-linker-plugin).

ການປະຕິບັດໃນປະຈຸບັນຂອງ LTO ເຮັດໃຫ້ບໍ່ມີຄວາມພະຍາຍາມທີ່ຈະສ້າງ bytecode ທີ່ເປັນ
ເຄື່ອນທີ່ລະຫວ່າງເຈົ້າພາບປະເພດຕ່າງໆ. ໄຟລ໌ bytecode ແມ່ນສະບັບແລະຢູ່ທີ່ນັ້ນ
ແມ່ນການກວດສອບສະບັບທີ່ເຂັ້ມງວດ, ດັ່ງນັ້ນໄຟລ໌ bytecode ທີ່ສ້າງຂຶ້ນໃນສະບັບຫນຶ່ງຂອງ GCC ບໍ່ໄດ້ເຮັດ
ເຮັດວຽກກັບ GCC ລຸ້ນເກົ່າ ຫຼືໃໝ່ກວ່າ.

ການປັບແຕ່ງເວລາເຊື່ອມຕໍ່ບໍ່ໄດ້ຜົນດີກັບການສ້າງຂໍ້ມູນການດີບັກ.
ການສົມທົບ -flto ກັບ -g ປະຈຸບັນກໍາລັງທົດລອງແລະຄາດວ່າຈະຜະລິດບໍ່ໄດ້ຄາດຫວັງ
ຜົນໄດ້ຮັບ.

ຖ້າທ່ານລະບຸທາງເລືອກ n, ການເພີ່ມປະສິດທິພາບແລະການສ້າງລະຫັດທີ່ເຮັດໃນເວລາເຊື່ອມຕໍ່
ຖືກປະຕິບັດໃນຂະຫນານໂດຍໃຊ້ n ວຽກຂະຫນານໂດຍການນໍາໃຊ້ການຕິດຕັ້ງ ເຮັດໃຫ້ ໂຄງການ.
ສະພາບແວດລ້ອມປ່ຽນແປງໄດ້ ເຮັດ ອາດຈະຖືກນໍາໃຊ້ເພື່ອ override ໂຄງການທີ່ໃຊ້. ຄ່າເລີ່ມຕົ້ນ
ມູນຄ່າສໍາລັບ n ແມ່ນ 1.

ນອກນັ້ນທ່ານຍັງສາມາດກໍານົດ -flto=ວຽກເຊີບເວີ ໃຊ້ GNU make's job server mode ເພື່ອກໍານົດ
ຈໍານວນຂອງວຽກຂະຫນານ. ນີ້ແມ່ນເປັນປະໂຫຍດໃນເວລາທີ່ Makefile ໂທຫາ GCC ແລ້ວ
ການ​ປະ​ຕິ​ບັດ​ໃນ​ຂະ​ຫນານ​. ທ່ານຕ້ອງ prepend a + ກັບສູດຄໍາສັ່ງໃນພໍ່ແມ່
Makefile ສໍາລັບການນີ້ເຮັດວຽກ. ທາງເລືອກນີ້ອາດຈະເຮັດວຽກພຽງແຕ່ຖ້າ ເຮັດ ແມ່ນ GNU ເຮັດ.

-flto-partition=ພຶຊະຄະນິດ
ລະບຸສູດການແບ່ງສ່ວນທີ່ໃຊ້ໂດຍຕົວປັບປຸງເວລາເຊື່ອມຕໍ່. ມູນຄ່າແມ່ນ
ບໍ່ວ່າຈະເປັນ 1to1 ການ​ລະ​ບຸ​ການ​ແບ່ງ​ປັນ mirroring ໄຟລ​໌​ຕົ້ນ​ສະ​ບັບ​ຫຼື​ ສົມດຸນ
ເພື່ອ​ລະ​ບຸ​ການ​ແບ່ງ​ປັນ​ເປັນ chunk ຂະ​ຫນາດ​ເທົ່າ​ທຽມ​ກັນ (ທຸກ​ຄັ້ງ​ທີ່​ເປັນ​ໄປ​ໄດ້​) ຫຼື​ ສູງສຸດທີ່ເຄຍ ເພື່ອສ້າງ
ການແບ່ງສ່ວນໃຫມ່ສໍາລັບທຸກໆສັນຍາລັກທີ່ເປັນໄປໄດ້. ການລະບຸ none ເປັນ algorithm
ປິດການແບ່ງສ່ວນ ແລະການຖ່າຍທອດຢ່າງສົມບູນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ ສົມດຸນ. ໃນຂະນະທີ່
1to1 ສາ​ມາດ​ຖືກ​ນໍາ​ໃຊ້​ເປັນ workaround ສໍາ​ລັບ​ບັນ​ຫາ​ການ​ສັ່ງ​ລະ​ຫັດ​ຕ່າງໆ​, ໄດ້​ ສູງສຸດທີ່ເຄຍ
ການແບ່ງສ່ວນແມ່ນມີຈຸດປະສົງສໍາລັບການທົດສອບພາຍໃນເທົ່ານັ້ນ. ມູນຄ່າ ຫນຶ່ງ ລະບຸວ່າ
ແນ່ນອນວ່າຫນຶ່ງພາທິຊັນຄວນຈະຖືກນໍາໃຊ້ໃນຂະນະທີ່ຄ່າ none bypasses ການ​ແບ່ງ​ປັນ​ແລະ​
ປະຕິບັດຂັ້ນຕອນການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່ໂດຍກົງຈາກໄລຍະ WPA.

-flto-odr-type-merging
ເປີດໃຊ້ການຖ່າຍທອດຊື່ປະເພດ mangled ຂອງປະເພດ C ++ ແລະການລວມຕົວຂອງພວກເຂົາຢູ່ທີ່
ເວລາເຊື່ອມຕໍ່. ນີ້ຈະເພີ່ມຂະຫນາດຂອງໄຟລ໌ວັດຖຸ LTO, ແຕ່ເປີດໃຊ້ການວິນິດໄສກ່ຽວກັບຫນຶ່ງ
ການລະເມີດກົດລະບຽບນິຍາມ.

-flto-compression-level=n
ຕົວເລືອກນີ້ກໍານົດລະດັບການບີບອັດທີ່ໃຊ້ສໍາລັບພາສາລະດັບປານກາງທີ່ຂຽນ
ກັບໄຟລ໌ວັດຖຸ LTO, ແລະມີຄວາມຫມາຍພຽງແຕ່ສົມທົບກັບໂຫມດ LTO (-flto).
ຄ່າທີ່ຖືກຕ້ອງແມ່ນ 0 (ບໍ່ມີການບີບອັດ) ຫາ 9 (ການບີບອັດສູງສຸດ). ຄຸນຄ່ານອກນີ້
ຊ່ວງແມ່ນຖືກຍຶດເປັນ 0 ຫຼື 9. ຖ້າທາງເລືອກບໍ່ໄດ້ຖືກມອບໃຫ້, ຄ່າເລີ່ມຕົ້ນຈະສົມດູນ
ການຕັ້ງຄ່າການບີບອັດຖືກນໍາໃຊ້.

flto-ບົດລາຍງານ
ພິມບົດລາຍງານທີ່ມີລາຍລະອຽດພາຍໃນກ່ຽວກັບການເຮັດວຽກຂອງ link-time optimizer. ໄດ້
ເນື້ອໃນຂອງບົດລາຍງານນີ້ແຕກຕ່າງກັນໄປແຕ່ລະສະບັບ. ມັນຫມາຍຄວາມວ່າຈະເປັນປະໂຫຍດຕໍ່ GCC
ນັກພັດທະນາໃນເວລາປະມວນຜົນໄຟລ໌ວັດຖຸຢູ່ໃນໂຫມດ LTO (ຜ່ານ -flto).

ພິການໂດຍຄ່າເລີ່ມຕົ້ນ.

-flto-report-wpa
ຄື flto-ບົດລາຍງານ, ແຕ່ພຽງແຕ່ພິມສໍາລັບໄລຍະ WPA ຂອງ Link Time Optimization.

-fuse-linker-plugin
ເປີດນຳໃຊ້ການໃຊ້ຕົວເຊື່ອມຕໍ່ຕົວເຊື່ອມຕໍ່ລະຫວ່າງການປັບແຕ່ງເວລາເຊື່ອມຕໍ່. ທາງເລືອກນີ້ອີງໃສ່
ກ່ຽວກັບການສະຫນັບສະຫນູນ plugin ໃນຕົວເຊື່ອມຕໍ່, ທີ່ມີຢູ່ໃນຄໍາຫຼືໃນ GNU ld 2.21 ຫຼື
ໃໝ່ກວ່າ.

ຕົວເລືອກນີ້ເຮັດໃຫ້ສາມາດສະກັດໄຟລ໌ວັດຖຸດ້ວຍ GIMPLE bytecode ອອກຈາກຫ້ອງສະໝຸດ
ຮວບຮວມ. ນີ້ປັບປຸງຄຸນນະພາບຂອງການເພີ່ມປະສິດທິພາບໂດຍການເປີດເຜີຍລະຫັດເພີ່ມເຕີມຕໍ່ກັບການເຊື່ອມຕໍ່ -
ຕົວເພີ່ມປະສິດທິພາບເວລາ. ຂໍ້ມູນນີ້ລະບຸວ່າສັນຍາລັກໃດທີ່ສາມາດເຂົ້າເຖິງພາຍນອກໄດ້
(ໂດຍວັດຖຸທີ່ບໍ່ແມ່ນ LTO ຫຼືໃນລະຫວ່າງການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ). ຜົນໄດ້ຮັບການປັບປຸງຄຸນນະພາບລະຫັດໃນ
binary (ແລະຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນທີ່ໃຊ້ການເບິ່ງເຫັນທີ່ເຊື່ອງໄວ້) ແມ່ນຄ້າຍຄືກັນກັບ
- ໂຄງ​ການ​ທັງ​ຫມົດ​, ທະເລສາບ -flto ສໍາລັບລາຍລະອຽດຂອງຜົນກະທົບຂອງທຸງນີ້ແລະວິທີການ
ໃຊ້​ມັນ.

ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອການຮອງຮັບ LTO ໃນ GCC ຖືກເປີດໃຊ້ ແລະ GCC ແມ່ນ
ຕັ້ງຄ່າເພື່ອໃຊ້ກັບຕົວເຊື່ອມຕໍ່ທີ່ຮອງຮັບ plugins (GNU ld 2.21 ຫຼືໃໝ່ກວ່າ ຫຼືຄຳ).

-ffat-lto-ວັດຖຸ
ວັດຖຸ LTO ໄຂມັນແມ່ນໄຟລ໌ວັດຖຸທີ່ມີທັງພາສາກາງແລະພາສາ
ລະຫັດວັດຖຸ. ນີ້ເຮັດໃຫ້ພວກເຂົາສາມາດໃຊ້ໄດ້ສໍາລັບການເຊື່ອມຕໍ່ LTO ແລະການເຊື່ອມໂຍງແບບປົກກະຕິ. ນີ້
ທາງເລືອກແມ່ນມີປະສິດທິພາບພຽງແຕ່ເມື່ອລວບລວມກັບ -flto ແລະຖືກລະເລີຍໃນເວລາເຊື່ອມຕໍ່.

-fno-fat-lto-objects ປັບປຸງເວລາການລວບລວມຫຼາຍກວ່າ LTO ທໍາມະດາ, ແຕ່ຮຽກຮ້ອງໃຫ້ມີ
ເຄື່ອງມືທີ່ສົມບູນທີ່ຈະຮູ້ LTO. ມັນຮຽກຮ້ອງໃຫ້ມີຕົວເຊື່ອມຕໍ່ທີ່ມີການສະຫນັບສະຫນູນ plugin linker
ສໍາລັບການທໍາງານພື້ນຖານ. ນອກຈາກນັ້ນ, nm, ar ແລະ ranlib ຈໍາເປັນຕ້ອງສະຫນັບສະຫນູນ linker
plugins ເພື່ອອະນຸຍາດໃຫ້ສະພາບແວດລ້ອມການກໍ່ສ້າງແບບເຕັມຮູບແບບ (ສາມາດສ້າງສະຖິດ
ຫ້ອງສະຫມຸດແລະອື່ນໆ). GCC ສະຫນອງ gcc-ar, gcc-nm, gcc-ranlib wrappers ຜ່ານ
ທາງເລືອກທີ່ເຫມາະສົມກັບເຄື່ອງມືເຫຼົ່ານີ້. ມີ makefiles ທີ່ບໍ່ມີໄຂມັນ LTO ຕ້ອງໄດ້ຮັບການດັດແກ້ເພື່ອນໍາໃຊ້
ໃຫ້ເຂົາເຈົ້າ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-fat-lto-objects ໃນເປົ້າຫມາຍທີ່ມີການສະຫນັບສະຫນູນ plugin linker.

-fcompare-elim
ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ຈັດ​ສັນ​ແລະ​ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ແບ່ງ​ປັນ​ຄໍາ​ແນະ​ນໍາ​ການ​ຈັດ​ສັນ​, ກໍາ​ນົດ​
ຄໍາແນະນໍາທາງເລກຄະນິດທີ່ຄໍານວນທຸງຂອງໂປເຊດເຊີທີ່ຄ້າຍຄືກັບການປະຕິບັດການປຽບທຽບ
ອີງໃສ່ເລກຄະນິດສາດນັ້ນ. ຖ້າເປັນໄປໄດ້, ລົບລ້າງການປະຕິບັດການປຽບທຽບທີ່ຊັດເຈນ.

ຜ່ານນີ້ໃຊ້ໄດ້ກັບບາງເປົ້າໝາຍທີ່ບໍ່ສາມາດເປັນຕົວແທນໄດ້ຢ່າງຊັດເຈນ
ການ​ປະ​ຕິ​ບັດ​ການ​ປຽບ​ທຽບ​ກ່ອນ​ທີ່​ຈະ​ຈັດ​ສັນ​ການ​ຈົດ​ທະ​ບຽນ​ສໍາ​ເລັດ​.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fcprop-ລົງທະບຽນ
ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ຈັດ​ສັນ​ແລະ​ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ແບ່ງ​ປັນ​ຄໍາ​ແນະ​ນໍາ​ການ​ຈັດ​ສັນ​, ປະ​ຕິ​ບັດ​
copy-propagation pass ເພື່ອພະຍາຍາມຫຼຸດຜ່ອນການຂຶ້ນກັບການກຳນົດເວລາ ແລະບາງຄັ້ງຄາວ
ລົບລ້າງສໍາເນົາ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fprofile-ການ​ແກ້​ໄຂ​
ໂປຼໄຟລ໌ທີ່ເກັບກໍາໂດຍໃຊ້ binary ເຄື່ອງມືສໍາລັບໂຄງການຫຼາຍກະທູ້ອາດຈະເປັນ
ບໍ່ສອດຄ່ອງເນື່ອງຈາກພາດການອັບເດດໂຕ້ຕອບ. ເມື່ອຕົວເລືອກນີ້ຖືກລະບຸ, GCC ໃຊ້
heuristics ເພື່ອແກ້ໄຂຫຼືແກ້ໄຂຄວາມບໍ່ສອດຄ່ອງດັ່ງກ່າວ. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ປ່ອຍອອກມາ
ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ໃນ​ເວ​ລາ​ທີ່​ຂໍ້​ມູນ​ທີ່​ບໍ່​ສອດ​ຄ່ອງ​ຖືກ​ກວດ​ພົບ​.

-fprofile-dir=ເສັ້ນທາງ
ຕັ້ງຄ່າໄດເລກະທໍລີເພື່ອຊອກຫາໄຟລ໌ຂໍ້ມູນໂປຣໄຟລ໌ຢູ່ໃນ ເສັ້ນທາງ. ຕົວເລືອກນີ້
ມີຜົນກະທົບພຽງແຕ່ຂໍ້ມູນໂປຣໄຟລ໌ທີ່ສ້າງຂຶ້ນໂດຍ -fprofile-generate, -ftest-ການ​ຄຸ້ມ​ຄອງ​,
-fprofile-arcs ແລະໃຊ້ໂດຍ -fprofile-ໃຊ້ ແລະ -fbranch-ຄວາມເປັນໄປໄດ້ ແລະມັນກ່ຽວຂ້ອງ
ທາງເລືອກ. ທັງສອງເສັ້ນທາງຢ່າງແທ້ຈິງແລະພີ່ນ້ອງສາມາດຖືກນໍາໃຊ້. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ໃຊ້
ໄດເລກະທໍລີປະຈຸບັນເປັນ ເສັ້ນທາງ, ດັ່ງນັ້ນໄຟລ໌ຂໍ້ມູນໂປຣໄຟລ໌ຈະປາກົດຢູ່ໃນໄດເລກະທໍລີດຽວກັນກັບ
ໄຟລ໌ວັດຖຸ.

-fprofile-generate
-fprofile-generate=ເສັ້ນທາງ
ເປີດໃຊ້ຕົວເລືອກທີ່ປົກກະຕິແລ້ວໃຊ້ສໍາລັບຄໍາຮ້ອງສະຫມັກເຄື່ອງມືເພື່ອຜະລິດໂປຣໄຟລ໌ທີ່ເປັນປະໂຫຍດ
ສໍາ​ລັບ​ການ​ປະ​ສົມ​ໃນ​ພາຍ​ຫຼັງ​ທີ່​ມີ​ຄໍາ​ຄຶດ​ຄໍາ​ເຫັນ​ຂອງ​ຂໍ້​ມູນ​ກ່ຽວ​ກັບ​ການ​ປັບ​ແຕ່ງ​ໂດຍ​ອີງ​ໃສ່ profile​. ເຈົ້າຕ້ອງໃຊ້
-fprofile-generate ທັງໃນເວລາທີ່ລວບລວມແລະໃນເວລາທີ່ເຊື່ອມຕໍ່ໂຄງການຂອງທ່ານ.

ຕົວເລືອກຕໍ່ໄປນີ້ຖືກເປີດໃຊ້: -fprofile-arcs, -fprofile-ຄ່າ, -fvpt.

If ເສັ້ນທາງ ຖືກກໍານົດ, GCC ເບິ່ງຢູ່ໃນ ເສັ້ນທາງ ເພື່ອຊອກຫາໄຟລ໌ຂໍ້ມູນຄໍາຕິຊົມຂອງໂປຣໄຟລ໌.
ເບິ່ງ -fprofile-dir.

-fprofile-ໃຊ້
-fprofile-use=ເສັ້ນທາງ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບການຕິຊົມຂອງໂປຣໄຟລ໌, ແລະການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້ເຊິ່ງ
ໂດຍທົ່ວໄປແລ້ວມີກໍາໄລພຽງແຕ່ມີຄໍາຕິຊົມໂປຣໄຟລ໌ທີ່ມີຢູ່: -fbranch-ຄວາມເປັນໄປໄດ້,
-fvpt, -funroll-loops, -fpeel-loops, -ftracer, -ftree-vectorize, ແລະ ftree-loop-
ການ​ແຜ່​ກະ​ຈາຍ​ຮູບ​ແບບ​.

ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ປ່ອຍຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຖ້າໂປຣໄຟລ໌ຄໍາຕິຊົມບໍ່ກົງກັບ
ລະຫັດແຫຼ່ງ. ຄວາມ​ຜິດ​ພາດ​ນີ້​ສາ​ມາດ​ປ່ຽນ​ເປັນ​ການ​ເຕືອນ​ໄພ​ໂດຍ​ການ​ນໍາ​ໃຊ້​ -Wcoverage-mismatch.
ກະລຸນາຮັບຊາບວ່າອັນນີ້ອາດຈະສົ່ງຜົນໃຫ້ລະຫັດປັບປຸງບໍ່ດີ.

If ເສັ້ນທາງ ຖືກກໍານົດ, GCC ເບິ່ງຢູ່ໃນ ເສັ້ນທາງ ເພື່ອຊອກຫາໄຟລ໌ຂໍ້ມູນຄໍາຕິຊົມຂອງໂປຣໄຟລ໌.
ເບິ່ງ -fprofile-dir.

-fauto-profile
-fauto-profile=ເສັ້ນທາງ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບທີ່ອີງໃສ່ຄໍາຕິຊົມຕາມຕົວຢ່າງ, ແລະການເພີ່ມປະສິດທິພາບຕໍ່ໄປນີ້
ເຊິ່ງໂດຍທົ່ວໄປແລ້ວມີກໍາໄລພຽງແຕ່ມີຄໍາຕິຊົມໂປຣໄຟລ໌ທີ່ມີຢູ່:
-fbranch-ຄວາມເປັນໄປໄດ້, -fvpt, -funroll-loops, -fpeel-loops, -ftracer,
-ftree-vectorize, -finline-functions, -fipa-cp, -fipa-cp-clone,
-fpredictive-commoning, -funswitch-loops, -fgcse-after-reload, ແລະ
-ftree-loop-distribute-patterns.

ເສັ້ນທາງ ແມ່ນຊື່ຂອງໄຟລ໌ທີ່ມີຂໍ້ມູນໂປຣໄຟລ໌ AutoFDO. ຖ້າຖືກລະເວັ້ນ, ມັນ
ເລີ່ມຕົ້ນເປັນ fbdata.afdo ໃນ​ລະ​ບົບ​ປະ​ຈຸ​ບັນ​.

ການ​ຜະ​ລິດ​ໄຟລ​໌​ຂໍ້​ມູນ​ຂໍ້​ມູນ AutoFDO ຮຽກ​ຮ້ອງ​ໃຫ້​ການ​ດໍາ​ເນີນ​ໂຄງ​ການ​ຂອງ​ທ່ານ​ກັບ​ ງາມ
ປະໂຫຍດໃນລະບົບເປົ້າໝາຍ GNU/Linux ທີ່ຮອງຮັບ. ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ, ເບິ່ງ
<https://perf.wiki.kernel.org/>.

ຕົວຢ່າງ

perf record -e br_inst_retired:near_taken -b -o perf.data \
-- your_program

ຫຼັງຈາກນັ້ນ, ນຳ ໃຊ້ ສ້າງ_gcov ເຄື່ອງ​ມື​ທີ່​ຈະ​ປ່ຽນ​ຂໍ້​ມູນ profile ເປັນ​ຮູບ​ແບບ​ທີ່​ສາ​ມາດ​ເປັນ​
ໃຊ້ໂດຍ GCC. ນອກນັ້ນທ່ານຍັງຕ້ອງໄດ້ສະຫນອງ binary unstripped ສໍາລັບໂຄງການຂອງທ່ານກັບນີ້
ເຄື່ອງ​ມື. ເບິ່ງhttps://github.com/google/autofdo>.

ຕົວຢ່າງ

create_gcov --binary=your_program.unstripped --profile=perf.data \
--gcov=profile.afdo

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມພຶດຕິກໍາການລວບລວມກ່ຽວກັບເລກເລກຄະນິດທີ່ລອຍຕົວ.
ທາງເລືອກເຫຼົ່ານີ້ແລກປ່ຽນລະຫວ່າງຄວາມໄວແລະຄວາມຖືກຕ້ອງ. ທັງໝົດຕ້ອງຖືກເປີດໃຊ້ໂດຍສະເພາະ.

- ຮ້ານຂາຍເຄື່ອງຍ່ອຍ
ຢ່າເກັບຮັກສາຕົວແປຈຸດລອຍຢູ່ໃນທະບຽນ, ແລະຂັດຂວາງທາງເລືອກອື່ນ
ອາດຈະປ່ຽນວ່າຄ່າຈຸດລອຍແມ່ນເອົາມາຈາກທະບຽນ ຫຼື ໜ່ວຍຄວາມຈຳ.

ທາງເລືອກນີ້ປ້ອງກັນຄວາມແມ່ນຍໍາເກີນທີ່ບໍ່ຕ້ອງການໃນເຄື່ອງຈັກເຊັ່ນ 68000 ບ່ອນທີ່
ທະບຽນທີ່ເລື່ອນໄດ້ (ຂອງ 68881) ຮັກສາຄວາມແມ່ນຍໍາຫຼາຍກ່ວາ "ສອງເທົ່າ" ທີ່ຄາດໄວ້.
ມີ. ເຊັ່ນດຽວກັນສໍາລັບສະຖາປັດຕະ x86. ສໍາລັບໂຄງການສ່ວນໃຫຍ່, ຄວາມແມ່ນຍໍາເກີນ
ເຮັດໄດ້ດີເທົ່ານັ້ນ, ແຕ່ບາງໂຄງການອີງໃສ່ຄໍານິຍາມທີ່ຊັດເຈນຂອງ IEEE ທີ່ເລື່ອນໄດ້
ຈຸດ. ໃຊ້ - ຮ້ານຂາຍເຄື່ອງຍ່ອຍ ສໍາລັບໂຄງການດັ່ງກ່າວ, ຫຼັງຈາກດັດແປງໃຫ້ເຂົາເຈົ້າເກັບຮັກສາທັງຫມົດ
ການຄິດໄລ່ລະດັບປານກາງທີ່ກ່ຽວຂ້ອງເຂົ້າໄປໃນຕົວແປ.

-fexcess-precision=ແບບ
ທາງ​ເລືອກ​ນີ້​ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ຄວບ​ຄຸມ​ເພີ່ມ​ເຕີມ​ກ່ຽວ​ກັບ​ຄວາມ​ແມ່ນ​ຍໍາ​ເກີນ​ຂອງ​ເຄື່ອງ​ຈັກ​ທີ່​ເລື່ອນ​ໄດ້​.
ທະບຽນຈຸດມີຄວາມແມ່ນຍໍາຫຼາຍກ່ວາ IEEE "ເລື່ອນ" ແລະ "ສອງ" ປະເພດແລະ
ໂປເຊດເຊີບໍ່ສະຫນັບສະຫນູນການດໍາເນີນການຮອບກັບປະເພດເຫຼົ່ານັ້ນ. ໂດຍຄ່າເລີ່ມຕົ້ນ,
-fexcess-precision=ໄວ ມີຜົນບັງຄັບໃຊ້; ນີ້ຫມາຍຄວາມວ່າການດໍາເນີນງານແມ່ນດໍາເນີນຢູ່ໃນ
ຄວາມແມ່ນຍໍາຂອງທະບຽນແລະວ່າມັນບໍ່ສາມາດຄາດເດົາໄດ້ໃນເວລາທີ່ຮອບໄປຫາປະເພດຕ່າງໆ
ທີ່ລະບຸໄວ້ໃນລະຫັດແຫຼ່ງເກີດຂຶ້ນ. ເມື່ອລວບລວມ C, ຖ້າ
-fexcess-precision=ມາດຕະຖານ ຖືກກໍານົດຫຼັງຈາກນັ້ນຄວາມຊັດເຈນເກີນປະຕິບັດຕາມກົດລະບຽບ
ລະບຸໄວ້ໃນ ISO C99; ໂດຍສະເພາະ, ທັງການໂຍນແລະການມອບຫມາຍເຮັດໃຫ້ຄຸນຄ່າເປັນ
ມົນເປັນປະເພດ semantic ຂອງເຂົາເຈົ້າ (ໃນຂະນະທີ່ - ຮ້ານຂາຍເຄື່ອງຍ່ອຍ ມີຜົນກະທົບພຽງແຕ່ການມອບຫມາຍ).
ຕົວເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບ C ຖ້າທາງເລືອກທີ່ສອດຄ່ອງຢ່າງເຂັ້ມງວດເຊັ່ນ:
-std=c99 ຖືກນໍາໃຊ້.

-fexcess-precision=ມາດຕະຖານ ບໍ່ໄດ້ຖືກປະຕິບັດສໍາລັບພາສາອື່ນນອກເຫນືອຈາກ C, ແລະບໍ່ມີ
ຜົນກະທົບຖ້າຫາກວ່າ -funsafe-math-optimizations or -fast ຄະ​ນິດ​ສາດ​ ຖືກກໍານົດ. ໃນ x86, ມັນ
ຍັງ​ບໍ່​ມີ​ຜົນ​ກະ​ທົບ​ຖ້າ​ຫາກ​ວ່າ​ -mfpmath=sse or -mfpmath=sse+387 ຖືກກໍານົດ; ໃນອະດີດ
ກໍລະນີ, IEEE semantics ນໍາໃຊ້ໂດຍບໍ່ມີຄວາມແມ່ນຍໍາເກີນ, ແລະໃນສຸດທ້າຍ, ຮອບແມ່ນ
ບໍ່ສາມາດຄາດເດົາໄດ້.

-fast ຄະ​ນິດ​ສາດ​
ກໍານົດທາງເລືອກ -fno-math-errno, -funsafe-math-optimizations, -ffinite-math-ເທົ່ານັ້ນ,
-fno-rounding-ຄະນິດສາດ, -fno-signaling-nans ແລະ -fcx-limited-range.

ທາງ​ເລືອກ​ນີ້​ເຮັດ​ໃຫ້​ມາ​ໂຄ preprocessor "__FAST_MATH__" ຖືກ​ກໍາ​ນົດ​.

ທາງເລືອກນີ້ບໍ່ໄດ້ເປີດໂດຍໃດໆ -O ທາງ​ເລືອກ​ນອກ​ຈາກ​ນັ້ນ​ - ໄວ ເນື່ອງຈາກວ່າມັນສາມາດສົ່ງຜົນໃຫ້
ຜົນຜະລິດທີ່ບໍ່ຖືກຕ້ອງສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​. ຢ່າງໃດກໍຕາມ, ມັນອາດຈະເຮັດໃຫ້ລະຫັດໄວຂຶ້ນສໍາລັບ
ໂຄງ​ການ​ທີ່​ບໍ່​ຕ້ອງ​ການ​ການ​ຮັບ​ປະ​ກັນ​ຂອງ​ສະ​ເພາະ​ເຫຼົ່າ​ນີ້​.

-fno-math-errno
ຢ່າຕັ້ງ "errno" ຫຼັງຈາກເອີ້ນຟັງຊັນຄະນິດສາດທີ່ຖືກປະຕິບັດດ້ວຍອັນດຽວ
ຄໍາແນະນໍາ, ຕົວຢ່າງ, "sqrt". ໂຄງການທີ່ອີງໃສ່ຂໍ້ຍົກເວັ້ນ IEEE ສໍາລັບຄວາມຜິດພາດທາງຄະນິດສາດ
ການຈັດການອາດຈະຕ້ອງການໃຊ້ທຸງນີ້ສໍາລັບຄວາມໄວໃນຂະນະທີ່ຮັກສາເລກເລກ IEEE
ຄວາມເຂົ້າກັນໄດ້.

ທາງເລືອກນີ້ບໍ່ໄດ້ເປີດໂດຍໃດໆ -O ທາງ​ເລືອກ​ເນື່ອງ​ຈາກ​ວ່າ​ມັນ​ສາ​ມາດ​ເຮັດ​ໃຫ້​ຜົນ​ຜະ​ລິດ​ທີ່​ບໍ່​ຖືກ​ຕ້ອງ​
ສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​. ຢ່າງໃດກໍຕາມ, ມັນອາດຈະເຮັດໃຫ້ລະຫັດໄວຂຶ້ນສໍາລັບ
ໂຄງ​ການ​ທີ່​ບໍ່​ຕ້ອງ​ການ​ການ​ຮັບ​ປະ​ກັນ​ຂອງ​ສະ​ເພາະ​ເຫຼົ່າ​ນີ້​.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fmath-errno.

ໃນລະບົບ Darwin, ຫ້ອງສະຫມຸດຄະນິດສາດບໍ່ເຄີຍຕັ້ງ "errno". ດັ່ງນັ້ນຈຶ່ງບໍ່ມີເຫດຜົນ
ສໍາລັບ compiler ພິຈາລະນາຄວາມເປັນໄປໄດ້ທີ່ມັນອາດຈະ, ແລະ -fno-math-errno ເປັນ
Default

-funsafe-math-optimizations
ອະ​ນຸ​ຍາດ​ໃຫ້​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ເລກ​ຄະ​ນິດ​ສາດ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​ທີ່ (a​) ສົມ​ມຸດ​ວ່າ​ການ​ໂຕ້​ຖຽງ​ແລະ​
ຜົນໄດ້ຮັບແມ່ນຖືກຕ້ອງແລະ (b) ອາດຈະລະເມີດມາດຕະຖານ IEEE ຫຼື ANSI. ເມື່ອໃຊ້ໃນເວລາເຊື່ອມຕໍ່,
ມັນອາດຈະປະກອບມີຫ້ອງສະຫມຸດຫຼືໄຟລ໌ເລີ່ມຕົ້ນທີ່ປ່ຽນຄໍາຄວບຄຸມ FPU ເລີ່ມຕົ້ນຫຼື
ການເພີ່ມປະສິດທິພາບທີ່ຄ້າຍຄືກັນອື່ນໆ.

ທາງເລືອກນີ້ບໍ່ໄດ້ເປີດໂດຍໃດໆ -O ທາງ​ເລືອກ​ເນື່ອງ​ຈາກ​ວ່າ​ມັນ​ສາ​ມາດ​ເຮັດ​ໃຫ້​ຜົນ​ຜະ​ລິດ​ທີ່​ບໍ່​ຖືກ​ຕ້ອງ​
ສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​. ຢ່າງໃດກໍຕາມ, ມັນອາດຈະເຮັດໃຫ້ລະຫັດໄວຂຶ້ນສໍາລັບ
ໂຄງ​ການ​ທີ່​ບໍ່​ໄດ້​ຮຽກ​ຮ້ອງ​ໃຫ້​ມີ​ການ​ຮັບ​ປະ​ກັນ​ຂອງ​ສະ​ເພາະ​ເຫຼົ່າ​ນີ້​. ເປີດໃຊ້
-fno-ເຊັນຊື່-ສູນ, -fno-traping-ຄະນິດສາດ, -fassociative-ຄະນິດສາດ ແລະ -freciprocal-ຄະນິດສາດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-unsafe-math-optimizations.

-fassociative-ຄະນິດສາດ
ອະ​ນຸ​ຍາດ​ໃຫ້​ມີ​ການ​ເຊື່ອມ​ໂຍງ​ໃຫມ່​ຂອງ​ຕົວ​ປະ​ຕິ​ບັດ​ການ​ໃນ​ໄລ​ຍະ​ຂອງ​ການ​ດໍາ​ເນີນ​ງານ​ຈຸດ​ທີ່​ເລື່ອນ​ໄດ້​. ນີ້
ລະເມີດມາດຕະຖານພາສາ ISO C ແລະ C++ ໂດຍອາດຈະມີການປ່ຽນແປງຜົນການຄິດໄລ່.
ຫມາຍເຫດ: ການສັ່ງຄືນໃຫມ່ອາດຈະມີການປ່ຽນແປງສັນຍານຂອງສູນເຊັ່ນດຽວກັນກັບບໍ່ສົນໃຈ NaNs ແລະ inhibit ຫຼື
ສ້າງ underflow ຫຼື overflow (ແລະດັ່ງນັ້ນຈຶ່ງບໍ່ສາມາດຖືກນໍາໃຊ້ໃນລະຫັດທີ່ອີງໃສ່ການຮອບ
ພຶດຕິກໍາເຊັ່ນ "(x + 2**52) - 2**52". ອາດຈະຈັດຮຽງການປຽບທຽບຈຸດລອຍຄືນໃໝ່ ແລະ
ດັ່ງນັ້ນອາດຈະບໍ່ຖືກນໍາໃຊ້ໃນເວລາທີ່ການປຽບທຽບຄໍາສັ່ງແມ່ນຕ້ອງການ. ທາງເລືອກນີ້ຕ້ອງການນັ້ນ
ທັງສອງ -fno-ເຊັນຊື່-ສູນ ແລະ -fno-traping-ຄະນິດສາດ ມີຜົນບັງຄັບໃຊ້. ຍິ່ງໄປກວ່ານັ້ນ, ມັນບໍ່ໄດ້ເຮັດໃຫ້
ມີຄວາມຮູ້ສຶກຫຼາຍກັບ - ຄະ​ນິດ​ສາດ​ພື້ນ​ຖານ​. ສໍາລັບ Fortran ທາງເລືອກແມ່ນເປີດອັດຕະໂນມັດເມື່ອ
ທັງສອງ -fno-ເຊັນຊື່-ສູນ ແລະ -fno-traping-ຄະນິດສາດ ມີຜົນບັງຄັບໃຊ້.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-associative-ຄະນິດສາດ.

-freciprocal-ຄະນິດສາດ
ອະ​ນຸ​ຍາດ​ໃຫ້​ຜົນ​ຕອບ​ແທນ​ຂອງ​ຄ່າ​ທີ່​ຈະ​ນໍາ​ໃຊ້​ແທນ​ທີ່​ຈະ​ແບ່ງ​ປັນ​ກັບ​ມູນ​ຄ່າ​ຖ້າ​ຫາກ​ວ່າ​ນີ້​
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບ. ຕົວຢ່າງ "x / y" ສາມາດຖືກແທນທີ່ດ້ວຍ "x * (1 / y)", ເຊິ່ງແມ່ນ
ເປັນປະໂຫຍດຖ້າ "(1/y)" ແມ່ນຂຶ້ນກັບການລົບລ້າງການສະແດງອອກທົ່ວໄປ. ໃຫ້ສັງເກດວ່ານີ້
ສູນເສຍຄວາມແມ່ນຍໍາແລະເພີ່ມຈໍານວນຂອງ flops ດໍາເນີນການກ່ຽວກັບມູນຄ່າ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-reciprocal-math.

-ffinite-math-ເທົ່ານັ້ນ
ອະ​ນຸ​ຍາດ​ໃຫ້​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ເລກ​ຄະ​ນິດ​ຄະ​ນິດ​ຈຸດ​ເລື່ອນ​ທີ່​ສົມ​ມຸດ​ວ່າ arguments ແລະ​
ຜົນໄດ້ຮັບບໍ່ແມ່ນ NaNs ຫຼື +-Infs.

ທາງເລືອກນີ້ບໍ່ໄດ້ເປີດໂດຍໃດໆ -O ທາງ​ເລືອກ​ເນື່ອງ​ຈາກ​ວ່າ​ມັນ​ສາ​ມາດ​ເຮັດ​ໃຫ້​ຜົນ​ຜະ​ລິດ​ທີ່​ບໍ່​ຖືກ​ຕ້ອງ​
ສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​. ຢ່າງໃດກໍຕາມ, ມັນອາດຈະເຮັດໃຫ້ລະຫັດໄວຂຶ້ນສໍາລັບ
ໂຄງ​ການ​ທີ່​ບໍ່​ຕ້ອງ​ການ​ການ​ຮັບ​ປະ​ກັນ​ຂອງ​ສະ​ເພາະ​ເຫຼົ່າ​ນີ້​.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-finite-math-ເທົ່ານັ້ນ.

-fno-ເຊັນຊື່-ສູນ
ອະ​ນຸ​ຍາດ​ໃຫ້​ການ​ປັບ​ແຕ່ງ​ສໍາ​ລັບ​ການ​ເລກ​ຄະ​ນິດ​ຈຸດ​ເລື່ອນ​ທີ່​ບໍ່​ສົນ​ໃຈ​ການ​ເຊັນ​ຂອງ​ສູນ​.
IEEE ເລກຄະນິດສາດກໍານົດພຶດຕິກໍາຂອງຄ່າ +0.0 ແລະ -0.0 ທີ່ແຕກຕ່າງກັນ, ເຊິ່ງຫຼັງຈາກນັ້ນ.
ຫ້າມຄວາມງ່າຍຂອງການສະແດງອອກເຊັ່ນ x+0.0 ຫຼື 0.0*x (ເຖິງແມ່ນວ່າມີ
-ffinite-math-ເທົ່ານັ້ນ). ທາງເລືອກນີ້ຫມາຍຄວາມວ່າສັນຍານຂອງຜົນໄດ້ຮັບສູນບໍ່ແມ່ນ
ທີ່ສໍາຄັນ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fsigned-ສູນ.

-fno-traping-ຄະນິດສາດ
ລວບລວມລະຫັດທີ່ສົມມຸດວ່າການດໍາເນີນການຈຸດລອຍບໍ່ສາມາດສ້າງໃຫ້ຜູ້ໃຊ້ສາມາດເຫັນໄດ້
ກັບດັກ. ກັບດັກເຫຼົ່ານີ້ປະກອບມີການແບ່ງອອກໂດຍສູນ, overflow, underflow, ຜົນໄດ້ຮັບ inexact ແລະ
ການດໍາເນີນງານບໍ່ຖືກຕ້ອງ. ທາງເລືອກນີ້ຕ້ອງການນັ້ນ -fno-signaling-nans ມີຜົນບັງຄັບໃຊ້.
ການ​ຕັ້ງ​ຄ່າ​ທາງ​ເລືອກ​ນີ້​ອາດ​ຈະ​ອະ​ນຸ​ຍາດ​ໃຫ້​ລະ​ຫັດ​ໄວ​ຂຶ້ນ​ຖ້າ​ຫາກ​ວ່າ​ຫນຶ່ງ​ອີງ​ໃສ່ "ບໍ່​ຢຸດ​ເຊົາ​" ເລກ​ຄະ​ນິດ​ສາດ IEEE​,
ຍົກ​ຕົວ​ຢ່າງ.

ຕົວເລືອກນີ້ບໍ່ຄວນເປີດໂດຍຜູ້ໃດກໍ່ຕາມ -O ທາງ​ເລືອກ​ເນື່ອງ​ຈາກ​ວ່າ​ມັນ​ສາ​ມາດ​ສົ່ງ​ຜົນ​ໃນ​
ຜົນຜະລິດທີ່ບໍ່ຖືກຕ້ອງສໍາລັບໂຄງການທີ່ຂຶ້ນກັບການປະຕິບັດທີ່ແນ່ນອນຂອງ IEEE ຫຼື ISO
ກົດ​ລະ​ບຽບ / ຂໍ້​ຈໍາ​ກັດ​ສໍາ​ລັບ​ການ​ທໍາ​ງານ​ຄະ​ນິດ​ສາດ​.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -ftrapping-ຄະນິດສາດ.

- ຄະ​ນິດ​ສາດ​ພື້ນ​ຖານ​
ປິດໃຊ້ງານການຫັນເປັນ ແລະການເພີ່ມປະສິດທິພາບທີ່ສົມມຸດການຮອບຕົວຈຸດເລື່ອນ
ພຶດຕິກຳ. ນີ້ແມ່ນຮອບຫາສູນສຳລັບການປ່ຽນຈຸດລອຍເປັນຈຳນວນເຕັມ, ແລະ
ຮອບຫາໃກ້ທີ່ສຸດສຳລັບການຕັດເລກເລກຄະນິດອື່ນໆທັງໝົດ. ທາງເລືອກນີ້ຄວນຈະເປັນ
ກໍານົດສໍາລັບບັນດາໂຄງການທີ່ປ່ຽນຮູບແບບການຮອບ FP ແບບໄດນາມິກ, ຫຼືອາດຈະເປັນ
ປະຕິບັດດ້ວຍຮູບແບບການຮອບທີ່ບໍ່ແມ່ນຄ່າເລີ່ມຕົ້ນ. ຕົວເລືອກນີ້ປິດການພັບຄົງທີ່ຂອງ
ການສະແດງຈຸດລອຍໃນເວລາລວບລວມ (ເຊິ່ງອາດຈະໄດ້ຮັບຜົນກະທົບຈາກໂຫມດມົນ)
ແລະການຫັນປ່ຽນເລກເລກທີ່ບໍ່ປອດໄພໃນປະກົດຕົວຂຶ້ນກັບເຄື່ອງໝາຍ
ຮູບ​ແບບ​ການ​ມົນ​.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-rounding-ຄະນິດສາດ.

ຕົວເລືອກນີ້ແມ່ນທົດລອງ ແລະບໍ່ໄດ້ຮັບປະກັນທີ່ຈະປິດການໃຊ້ງານ GCC ທັງໝົດ
ການເພີ່ມປະສິດທິພາບທີ່ໄດ້ຮັບຜົນກະທົບຈາກຮູບແບບການຮອບ. ຮຸ່ນໃນອະນາຄົດຂອງ GCC ອາດຈະສະຫນອງ
ການຄວບຄຸມທີ່ລະອຽດກວ່າຂອງການຕັ້ງຄ່ານີ້ໂດຍໃຊ້ "FENV_ACCESS" pragma ຂອງ C99. ເສັ້ນຄໍາສັ່ງນີ້
ທາງເລືອກຈະຖືກໃຊ້ເພື່ອລະບຸສະຖານະເລີ່ມຕົ້ນຂອງ "FENV_ACCESS".

-fsignaling-nans
ລວບລວມລະຫັດທີ່ສົມມຸດວ່າ IEEE signaling NaNs ອາດຈະສ້າງໃສ່ກັບດັກທີ່ຜູ້ໃຊ້ສາມາດເຫັນໄດ້ໃນລະຫວ່າງ
ການດໍາເນີນງານຈຸດລອຍ. ການຕັ້ງຄ່າຕົວເລືອກນີ້ປິດການເພີ່ມປະສິດທິພາບທີ່ອາດຈະປ່ຽນແປງ
ຈໍານວນຂໍ້ຍົກເວັ້ນທີ່ເຫັນໄດ້ດ້ວຍການສົ່ງສັນຍານ NaNs. ທາງເລືອກນີ້ຫມາຍເຖິງ
-ftrapping-ຄະນິດສາດ.

ຕົວເລືອກນີ້ເຮັດໃຫ້ເມໂຄຣໂປຣເຊສເຊີກ່ອນ "__SUPPORT_SNAN__" ຖືກກຳນົດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-signaling-nans.

ຕົວເລືອກນີ້ແມ່ນທົດລອງ ແລະບໍ່ໄດ້ຮັບປະກັນທີ່ຈະປິດການໃຊ້ງານ GCC ທັງໝົດ
ການເພີ່ມປະສິດທິພາບທີ່ສົ່ງຜົນກະທົບຕໍ່ພຶດຕິກໍາ NaN.

-fsingle-precision-constant
ປະຕິບັດຄ່າຄົງທີ່ຈຸດທີ່ລອຍຕົວເປັນຄວາມແມ່ນຍໍາອັນດຽວ ແທນທີ່ຈະເປັນການແປງແບບ implicitly
ພວກມັນເປັນຄ່າຄົງທີ່ສອງເທົ່າ.

-fcx-limited-range
ເມື່ອເປີດໃຊ້ງານ, ຕົວເລືອກນີ້ລະບຸວ່າຂັ້ນຕອນການຫຼຸດໄລຍະແມ່ນບໍ່ຈໍາເປັນເມື່ອໃດ
ປະຕິບັດການແບ່ງສະລັບສັບຊ້ອນ. ນອກຈາກນີ້, ຍັງບໍ່ມີການກວດສອບວ່າຜົນຂອງ a
ການຄູນຊັບຊ້ອນຫຼືການຫານແມ່ນ "NaN + I*NaN", ດ້ວຍຄວາມພະຍາຍາມທີ່ຈະຊ່ວຍກູ້
ສະຖານະການໃນກໍລະນີນັ້ນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-cx-limited-range, ແຕ່ຖືກເປີດໃຊ້ໂດຍ
-fast ຄະ​ນິດ​ສາດ​.

ຕົວເລືອກນີ້ຄວບຄຸມການຕັ້ງຄ່າເລີ່ມຕົ້ນຂອງ pragma ISO C99 "CX_LIMITED_RANGE".
ຢ່າງໃດກໍຕາມ, ທາງເລືອກແມ່ນໃຊ້ກັບທຸກພາສາ.

-fcx-fortran-ກົດລະບຽບ
ການຄູນແລະການແບ່ງສະລັບສັບຊ້ອນປະຕິບັດຕາມກົດລະບຽບ Fortran. ການຫຼຸດຜ່ອນຂອບເຂດແມ່ນເຮັດເປັນ
ສ່ວນຫນຶ່ງຂອງການແບ່ງສະລັບສັບຊ້ອນ, ແຕ່ບໍ່ມີການກວດສອບວ່າຜົນໄດ້ຮັບຂອງສະລັບສັບຊ້ອນ
ການຄູນຫຼືການແບ່ງແມ່ນ "NaN + I*NaN", ດ້ວຍຄວາມພະຍາຍາມທີ່ຈະຊ່ອຍກູ້ສະຖານະການ
ໃນ​ກໍ​ລະ​ນີ​ນັ້ນ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fno-cx-fortran-ກົດລະບຽບ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມການເພີ່ມປະສິດທິພາບທີ່ອາດຈະປັບປຸງການປະຕິບັດ, ແຕ່ບໍ່ແມ່ນ
ເປີດໃຊ້ໂດຍໃດໆ -O ທາງເລືອກ. ພາກນີ້ປະກອບມີທາງເລືອກໃນການທົດລອງທີ່ອາດຈະຜະລິດ
ລະ​ຫັດ​ທີ່​ແຕກ​ຫັກ​.

-fbranch-ຄວາມເປັນໄປໄດ້
ຫຼັງ​ຈາກ​ການ​ດໍາ​ເນີນ​ການ​ໂຄງ​ການ​ທີ່​ສັງ​ລວມ​ກັບ​ -fprofile-arcs, ທ່ານສາມາດລວບລວມມັນເປັນຄັ້ງທີສອງ
ການນໍາໃຊ້ -fbranch-ຄວາມເປັນໄປໄດ້, ເພື່ອປັບປຸງການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ຈໍານວນເວລາ
ແຕ່ລະສາຂາໄດ້ຖືກປະຕິບັດ. ໃນເວລາທີ່ໂຄງການລວບລວມກັບ -fprofile-arcs ອອກຈາກ, ມັນຊ່ວຍປະຢັດ
ການປະຕິບັດ arc ນັບເປັນໄຟລ໌ທີ່ເອີ້ນວ່າ sourcename.gcda ສໍາລັບແຕ່ລະໄຟລ໌ແຫຼ່ງ. ໄດ້
ຂໍ້ມູນໃນໄຟລ໌ຂໍ້ມູນນີ້ແມ່ນຂຶ້ນກັບໂຄງສ້າງຂອງຂໍ້ມູນທີ່ສ້າງຂຶ້ນ
ລະຫັດ, ດັ່ງນັ້ນທ່ານຕ້ອງໃຊ້ລະຫັດແຫຼ່ງດຽວກັນແລະທາງເລືອກການເພີ່ມປະສິດທິພາບດຽວກັນສໍາລັບທັງສອງ
ການລວບລວມ.

ກັບ -fbranch-ຄວາມເປັນໄປໄດ້, GCC puts a REG_BR_PROB ຫມາຍ​ເຫດ​ໃນ​ແຕ່​ລະ​ JUMP_INSN ແລະ
CALL_INSN. ເຫຼົ່ານີ້ສາມາດຖືກນໍາໃຊ້ເພື່ອປັບປຸງການເພີ່ມປະສິດທິພາບ. ໃນປັດຈຸບັນ, ພວກເຂົາເຈົ້າໄດ້ຖືກນໍາໃຊ້ພຽງແຕ່
ຢູ່ໃນສະຖານທີ່ດຽວ: ໃນ reorg.c, ແທນທີ່ຈະຄາດເດົາວ່າສາຂາໃດເປັນໄປໄດ້ຫຼາຍທີ່ສຸດ
ເອົາ, ໄດ້ REG_BR_PROB ຄ່າແມ່ນໃຊ້ເພື່ອກໍານົດຢ່າງແນ່ນອນວ່າເສັ້ນທາງໃດຖືກນໍາໄປຫຼາຍກວ່າ
ເລື້ອຍໆ.

-fprofile-ຄ່າ
ຖ້າລວມກັບ -fprofile-arcs, ມັນເພີ່ມລະຫັດເພື່ອໃຫ້ຂໍ້ມູນບາງຢ່າງກ່ຽວກັບຄ່າຂອງ
ການສະແດງອອກໃນໂຄງການແມ່ນລວບລວມ.

ກັບ -fbranch-ຄວາມເປັນໄປໄດ້, ມັນອ່ານຄືນຂໍ້ມູນທີ່ເກັບກໍາຈາກຄ່າ profileing ຂອງ
ການສະແດງອອກສໍາລັບການນໍາໃຊ້ໃນການເພີ່ມປະສິດທິພາບ.

ເປີດໃຊ້ດ້ວຍ -fprofile-generate ແລະ -fprofile-ໃຊ້.

-fprofile-reorder-functions
ການຈັດລໍາດັບຟັງຊັນຄືນໃໝ່ໂດຍອີງໃສ່ເຄື່ອງມືໂປຣໄຟລ໌ຈະເກັບກຳຄັ້ງທຳອິດຂອງການປະຕິບັດ
ຂອງຟັງຊັນໃດນຶ່ງ ແລະສັ່ງໃຫ້ຟັງຊັນເຫຼົ່ານີ້ຢູ່ໃນລໍາດັບຕັ້ງຊັນຂຶ້ນ.

ເປີດໃຊ້ດ້ວຍ -fprofile-ໃຊ້.

-fvpt
ຖ້າລວມກັບ -fprofile-arcs, ທາງເລືອກນີ້ສັ່ງໃຫ້ compiler ເພີ່ມລະຫັດໃສ່
ລວບລວມຂໍ້ມູນກ່ຽວກັບຄຸນຄ່າຂອງການສະແດງອອກ.

ກັບ -fbranch-ຄວາມເປັນໄປໄດ້, ມັນອ່ານຄືນຂໍ້ມູນທີ່ເກັບກໍາແລະປະຕິບັດຕົວຈິງ
ການເພີ່ມປະສິດທິພາບໂດຍອີງໃສ່ພວກມັນ. ໃນປັດຈຸບັນການເພີ່ມປະສິດທິພາບປະກອບມີການພິເສດຂອງ
ການປະຕິບັດການແບ່ງສ່ວນໂດຍໃຊ້ຄວາມຮູ້ກ່ຽວກັບມູນຄ່າຂອງຕົວຫານ.

-frename-ລົງທະບຽນ
ພະຍາຍາມຫຼີກລ້ຽງການອ້າງອິງທີ່ບໍ່ຖືກຕ້ອງໃນລະຫັດທີ່ກໍານົດໄວ້ໂດຍການນໍາໃຊ້ການລົງທະບຽນໄວ້
ຫຼາຍກວ່າຫຼັງຈາກການຈັດສັນການລົງທະບຽນ. ການເພີ່ມປະສິດທິພາບນີ້ໃຫ້ປະໂຫຍດຫຼາຍທີ່ສຸດກັບໂປເຊດເຊີທີ່ມີຈໍານວນຫລາຍ
ຂອງ​ການ​ຈົດ​ທະ​ບຽນ​. ອີງຕາມຮູບແບບຂໍ້ມູນ debug ທີ່ໄດ້ຮັບຮອງເອົາໂດຍເປົ້າຫມາຍ,
ແນວໃດກໍ່ຕາມ, ມັນສາມາດເຮັດໃຫ້ debugging ເປັນໄປບໍ່ໄດ້, ເນື່ອງຈາກວ່າຕົວແປບໍ່ຢູ່ໃນ "ເຮືອນ
ລົງທະບຽນ".

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນດ້ວຍ -funroll-loops ແລະ -fpeel-loops.

-fschedule-fusion
ປະຕິບັດເປົ້າຫມາຍທີ່ຂຶ້ນກັບການຖ່າຍທອດຄໍາແນະນໍາເພື່ອກໍານົດເວລາຄໍາແນະນໍາ
ປະເພດດຽວກັນຮ່ວມກັນເນື່ອງຈາກວ່າເຄື່ອງເປົ້າຫມາຍສາມາດປະຕິບັດໃຫ້ເຂົາເຈົ້າປະສິດທິພາບຫຼາຍຖ້າຫາກວ່າພວກເຂົາເຈົ້າ
ແມ່ນຢູ່ຕິດກັບກັນແລະກັນໃນການໄຫຼຂອງຄໍາແນະນໍາ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-ftracer
ດໍາເນີນການຊໍ້າຊ້ອນຫາງເພື່ອຂະຫຍາຍຂະຫນາດ superblock. ການຫັນປ່ຽນນີ້ເຮັດໃຫ້ງ່າຍດາຍ
ການຄວບຄຸມການໄຫຼເຂົ້າຂອງຫນ້າທີ່ອະນຸຍາດໃຫ້ການເພີ່ມປະສິດທິພາບອື່ນໆເຮັດວຽກທີ່ດີກວ່າ.

ເປີດໃຊ້ດ້ວຍ -fprofile-ໃຊ້.

-funroll-loops
ຖອດ loops ທີ່ມີຈໍານວນການຊໍ້າຄືນສາມາດຖືກກໍານົດໃນເວລາລວບລວມຫຼືຕາມ
ເຂົ້າໄປໃນ loop ໄດ້. -funroll-loops implies -frerun-cse-after-loop, -fweb ແລະ
-frename-ລົງທະບຽນ. ມັນຍັງເປີດການປອກເປືອກ loop ຢ່າງສົມບູນ (ເຊັ່ນການໂຍກຍ້າຍຢ່າງສົມບູນຂອງ
loops ທີ່ມີຈໍານວນຄົງທີ່ເລັກນ້ອຍ). ທາງເລືອກນີ້ເຮັດໃຫ້ລະຫັດຂະຫນາດໃຫຍ່, ແລະ
ອາດຈະ ຫຼືອາດຈະບໍ່ເຮັດໃຫ້ມັນແລ່ນໄວຂຶ້ນ.

ເປີດໃຊ້ດ້ວຍ -fprofile-ໃຊ້.

-funroll-all-loops
ຖອດ loops ທັງຫມົດ, ເຖິງແມ່ນວ່າຈໍານວນການຊໍ້າຄືນຂອງເຂົາເຈົ້າບໍ່ແນ່ນອນໃນເວລາທີ່ loop ແມ່ນ
ເຂົ້າ. ນີ້ປົກກະຕິແລ້ວເຮັດໃຫ້ໂຄງການເຮັດວຽກຊ້າຫຼາຍ. -funroll-all-loops ຫມາຍເຖິງ
ທາງ​ເລືອກ​ດຽວ​ກັນ​ກັບ​ -funroll-loops.

-fpeel-loops
Peels loops ທີ່ມີຂໍ້ມູນພຽງພໍທີ່ພວກເຂົາບໍ່ມ້ວນຫຼາຍ (ຈາກ
ຕໍານິຕິຊົມໂປຣໄຟລ໌). ມັນຍັງເປີດການປອກເປືອກ loop ຢ່າງສົມບູນ (ເຊັ່ນການໂຍກຍ້າຍຢ່າງສົມບູນຂອງ
loops ມີຈໍານວນຄົງທີ່ຂະຫນາດນ້ອຍຂອງ iterations).

ເປີດໃຊ້ດ້ວຍ -fprofile-ໃຊ້.

-fmove-loop-invariants
ເປີດໃຊ້ການສົ່ງຜ່ານການເຄື່ອນໄຫວແບບບໍ່ປ່ຽນແປງຂອງ loop ໃນ RTL loop optimizer. ເປີດໃຊ້ຢູ່ໃນລະດັບ
-O1

-funswitch-loops
ຍ້າຍສາຂາທີ່ມີເງື່ອນໄຂຂອງ loop invariant ອອກຈາກ loop, ມີການຊໍ້າກັນຂອງ
loop ທັງສອງສາຂາ (ດັດແກ້ຕາມຜົນຂອງເງື່ອນໄຂ).

-function-sections
-fdata-sections
ວາງແຕ່ລະຫນ້າທີ່ຫຼືລາຍການຂໍ້ມູນເຂົ້າໄປໃນສ່ວນຂອງຕົນເອງໃນໄຟລ໌ຜົນຜະລິດຖ້າເປົ້າຫມາຍ
ສະຫນັບສະຫນູນພາກສ່ວນທີ່ມັກ. ຊື່ຂອງຟັງຊັນຫຼືຊື່ຂອງລາຍການຂໍ້ມູນ
ກໍານົດຊື່ຂອງພາກສ່ວນໃນໄຟລ໌ຜົນຜະລິດ.

ໃຊ້ຕົວເລືອກເຫຼົ່ານີ້ໃນລະບົບທີ່ຕົວເຊື່ອມຕໍ່ສາມາດປະຕິບັດການເພີ່ມປະສິດທິພາບເພື່ອປັບປຸງ
ທ້ອງຖິ່ນຂອງການອ້າງອີງໃນພື້ນທີ່ຄໍາແນະນໍາ. ລະບົບສ່ວນໃຫຍ່ໃຊ້ວັດຖຸ ELF
ຮູບແບບແລະໂປເຊດເຊີ SPARC ແລ່ນ Solaris 2 ມີຕົວເຊື່ອມຕໍ່ທີ່ມີການເພີ່ມປະສິດທິພາບດັ່ງກ່າວ.
AIX ອາດມີການເພີ່ມປະສິດທິພາບເຫຼົ່ານີ້ໃນອະນາຄົດ.

ພຽງແຕ່ໃຊ້ທາງເລືອກເຫຼົ່ານີ້ເມື່ອມີຜົນປະໂຫຍດທີ່ສໍາຄັນຈາກການເຮັດເຊັ່ນນັ້ນ. ເມື່ອ​ເຈົ້າ
ລະບຸຕົວເລືອກເຫຼົ່ານີ້, ຕົວປະກອບແລະຕົວເຊື່ອມຕໍ່ສ້າງວັດຖຸທີ່ໃຫຍ່ກວ່າແລະສາມາດປະຕິບັດໄດ້
ໄຟລ໌ແລະຍັງຊ້າກວ່າ. ທ່ານບໍ່ສາມາດໃຊ້ gprof ໃນທຸກລະບົບຖ້າທ່ານລະບຸອັນນີ້
ທາງເລືອກ, ແລະທ່ານອາດຈະມີບັນຫາກັບ debugging ຖ້າຫາກວ່າທ່ານລະບຸທັງສອງທາງເລືອກນີ້ແລະ
-g.

-fbranch-target-load-optimize
ປະຕິບັດການເພີ່ມປະສິດທິພາບການໂຫຼດຂອງສາຂາກ່ອນການຂະຫຍາຍກະທູ້ prologue / epilogue.
ການ​ນໍາ​ໃຊ້​ຂອງ​ການ​ລົງ​ທະ​ບຽນ​ເປົ້າ​ຫມາຍ​ໂດຍ​ປົກ​ກະ​ຕິ​ສາ​ມາດ​ໄດ້​ຮັບ​ການ​ເປີດ​ເຜີຍ​ພຽງ​ແຕ່​ໃນ​ລະ​ຫວ່າງ​ການ​ໂຫຼດ​, ດັ່ງ​ນັ້ນ hoisting​
loads ອອກຈາກ loops ແລະດໍາເນີນການກໍານົດເວລາ inter-block ຕ້ອງການການເພີ່ມປະສິດທິພາບແຍກຕ່າງຫາກ
ຜ່ານ.

-fbranch-target-load-optimize2
ປະຕິບັດການເພີ່ມປະສິດທິພາບການໂຫຼດຂອງສາຂາຫຼັງຈາກຫົວຂໍ້ prologue / epilogue.

-fbtr-bb-ສະເພາະ
ໃນ​ເວ​ລາ​ທີ່​ປະ​ຕິ​ບັດ​ການ​ເພີ່ມ​ປະ​ສິດ​ທິ​ການ​ໂຫຼດ​ຂອງ​ເປົ້າ​ຫມາຍ​ສາ​ຂາ​, ຢ່າ​ນໍາ​ໃຊ້​ໃຫມ່​ເປົ້າ​ຫມາຍ​ສາ​ຂາ​
ລົງທະບຽນພາຍໃນບລັອກພື້ນຖານໃດໆ.

-stack-protector
ປ່ອຍລະຫັດເພີ່ມເຕີມເພື່ອກວດເບິ່ງການລົ້ນຂອງບັບເຟີ, ເຊັ່ນ: ການໂຈມຕີສະເຕກຕີ. ນີ້
ແມ່ນເຮັດໄດ້ໂດຍການເພີ່ມຕົວແປກອງໃຫ້ກັບຫນ້າທີ່ທີ່ມີວັດຖຸທີ່ມີຄວາມສ່ຽງ. ນີ້
ປະກອບມີຟັງຊັນທີ່ໂທຫາ "alloca", ແລະຟັງຊັນທີ່ມີ buffers ຂະຫນາດໃຫຍ່ກວ່າ 8 bytes.
ກອງໄດ້ຖືກເລີ່ມຕົ້ນເມື່ອຟັງຊັນຖືກໃສ່ແລະຫຼັງຈາກນັ້ນກວດເບິ່ງໃນເວລາທີ່
ຟັງຊັນອອກ. ຖ້າການກວດສອບຄວາມລົ້ມເຫລວ, ຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຈະຖືກພິມອອກແລະໂຄງການ
ອອກ.

-fstack-protector-ທັງໝົດ
ຄື -stack-protector ຍົກ​ເວັ້ນ​ແຕ່​ຫນ້າ​ທີ່​ທັງ​ຫມົດ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປ້ອງ​ກັນ​.

-fstack-protector-strong
ຄື -stack-protector ແຕ່ປະກອບມີຫນ້າທີ່ເພີ່ມເຕີມທີ່ຈະໄດ້ຮັບການປົກປ້ອງ --- ເຫຼົ່ານັ້ນ
ທີ່ມີຄໍານິຍາມ array ທ້ອງຖິ່ນ, ຫຼືມີການອ້າງອີງເຖິງທີ່ຢູ່ກອບທ້ອງຖິ່ນ.

-fstack-protector-explicit
ຄື -stack-protector ແຕ່ພຽງແຕ່ປົກປ້ອງຫນ້າທີ່ທີ່ມີ
"stack_protect" ຄຸນລັກສະນະ

-fstdarg-opt
ເພີ່ມປະສິດທິພາບຂອງ prologue ຂອງຫນ້າທີ່ການໂຕ້ຖຽງທີ່ແຕກຕ່າງກັນກ່ຽວກັບການນໍາໃຊ້ເຫຼົ່ານັ້ນ
ການໂຕ້ຖຽງ.

ຫມາຍເຫດ: ໃນ Ubuntu 14.10 ແລະຮຸ່ນຕໍ່ມາ, -fstack-protector-strong ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນສໍາລັບ C, C ++, ObjC, ObjC ++, ຖ້າບໍ່ມີ -fno-stack-protector, -nostdlib, ແລະ
- freestanding ພົບເຫັນ.

-fsection-anchors
ພະຍາຍາມຫຼຸດຜ່ອນການຄິດໄລ່ທີ່ຢູ່ສັນຍາລັກໂດຍໃຊ້ "ສະມໍ" ທີ່ແບ່ງປັນ.
ສັນຍາລັກເພື່ອແກ້ໄຂວັດຖຸໃກ້ຄຽງ. ການຫັນປ່ຽນນີ້ສາມາດຊ່ວຍຫຼຸດຜ່ອນຈໍານວນ
ຂອງ GOT entries ແລະ GOT ເຂົ້າເຖິງໃນບາງເປົ້າຫມາຍ.

ສໍາລັບຕົວຢ່າງ, ການປະຕິບັດຫນ້າທີ່ "foo" ຕໍ່ໄປນີ້:

static int a, b, c;
int foo (void) { ກັບຄືນ a + b + c; }

ປົກກະຕິແລ້ວຄິດໄລ່ທີ່ຢູ່ຂອງຕົວແປທັງສາມ, ແຕ່ຖ້າທ່ານລວບລວມມັນດ້ວຍ
-fsection-anchors, ມັນເຂົ້າເຖິງຕົວແປຈາກຈຸດສະມໍທົ່ວໄປແທນ. ໄດ້
ຜົນກະທົບແມ່ນຄ້າຍຄືກັນກັບ pseudocode ຕໍ່ໄປນີ້ (ເຊິ່ງບໍ່ຖືກຕ້ອງ C):

int foo (void)
{
ລົງທະບຽນ int *xr = &x;
ກັບຄືນ xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

ບໍ່ແມ່ນເປົ້າໝາຍທັງໝົດທີ່ຮອງຮັບຕົວເລືອກນີ້.

--param ຊື່=ມູນຄ່າ
ໃນບາງບ່ອນ, GCC ໃຊ້ຄ່າຄົງທີ່ຕ່າງໆເພື່ອຄວບຄຸມປະລິມານການເພີ່ມປະສິດທິພາບນັ້ນ
ແມ່ນແລ້ວ. ຕົວຢ່າງ, GCC ບໍ່ໄດ້ຢູ່ໃນແຖວຫນ້າທີ່ປະກອບດ້ວຍຫຼາຍກວ່າທີ່ແນ່ນອນ
ຈໍານວນຂອງຄໍາແນະນໍາ. ທ່ານສາມາດຄວບຄຸມບາງຄ່າຄົງທີ່ເຫຼົ່ານີ້ຢູ່ໃນເສັ້ນຄໍາສັ່ງ
ການນໍາໃຊ້ --param ທາງເລືອກ.

ຊື່ຂອງຕົວກໍານົດການສະເພາະ, ແລະຄວາມຫມາຍຂອງຄ່າ, ແມ່ນ tied ກັບ
ພາຍໃນຂອງ compiler, ແລະອາດຈະມີການປ່ຽນແປງໂດຍບໍ່ມີການແຈ້ງການໃນອະນາຄົດ
ປ່ອຍອອກມາ.

ໃນແຕ່ລະກໍລະນີ, ໄດ້ ມູນຄ່າ ເປັນຈຳນວນເຕັມ. ທາງ​ເລືອກ​ທີ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ສໍາ​ລັບ​ການ​ ຊື່ ແມ່ນ:

ຄາດຄະເນ-ສາຂາ-ຜົນໄດ້ຮັບ
ເມື່ອສາຂາຖືກຄາດຄະເນວ່າຈະຖືກປະຕິບັດກັບຄວາມເປັນໄປໄດ້ຕ່ໍາກວ່າຂອບເຂດນີ້
(ເປັນເປີເຊັນ), ຫຼັງຈາກນັ້ນມັນໄດ້ຖືກພິຈາລະນາດີ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

ສູງສຸດ-crossjump-edges
ຈໍານວນຂອບຂາເຂົ້າສູງສຸດທີ່ຈະພິຈາລະນາສໍາລັບການໂດດຂ້າມ. ສູດການຄິດໄລ່
ໃຊ້ໂດຍ -fcrossjumping ແມ່ນ O(N^2) ໃນຈຳນວນຂອບທີ່ເຂົ້າມາແຕ່ລະທ່ອນໄມ້.
ການເພີ່ມມູນຄ່າຫມາຍເຖິງການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍ, ເຮັດໃຫ້ເວລາການລວບລວມ
ເພີ່ມຂຶ້ນໂດຍອາດຈະເປັນການປັບປຸງຂະຫນາດນ້ອຍໃນຂະຫນາດປະຕິບັດໄດ້.

min-crossjump-insns
ຈໍານວນຄໍາແນະນໍາຕໍາ່ສຸດທີ່ຈະຕ້ອງຖືກຈັບຄູ່ໃນຕອນທ້າຍຂອງສອງຕັນ
ກ່ອນທີ່ຈະໂດດຂ້າມແມ່ນປະຕິບັດໃຫ້ເຂົາເຈົ້າ. ຄ່ານີ້ຖືກລະເລີຍໃນກໍລະນີ
ບ່ອນທີ່ຄໍາແນະນໍາທັງຫມົດໃນບລັອກທີ່ຖືກຂ້າມຂ້າມຈາກແມ່ນກົງກັນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 5.

max-grow-copy-bb-insns
ປັດໄຈການຂະຫຍາຍຂະຫນາດລະຫັດສູງສຸດໃນເວລາທີ່ຄັດລອກບລັອກພື້ນຖານແທນທີ່ຈະເປັນ
ໂດດ. ການຂະຫຍາຍແມ່ນທຽບກັບຄໍາແນະນໍາແບບໂດດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ
8.

max-goto-duplication-insns
ຈຳນວນສູງສຸດຂອງຄຳແນະນຳທີ່ຈະຊ້ຳກັບບລັອກທີ່ໂດດໄປຫາ a
Goto ຄິດໄລ່. ເພື່ອຫຼີກເວັ້ນພຶດຕິກໍາ O(N^2) ໃນຈໍານວນການຜ່ານ, ປັດໃຈ GCC
ຄິດໄລ່ gotos ໃນຕອນຕົ້ນຂອງຂະບວນການລວບລວມ, ແລະ unfactors ໃຫ້ເຂົາເຈົ້າເປັນຊ້າ
ເປັນໄປໄດ້. ພຽງແຕ່ການກະໂດດທີ່ຄິດໄລ່ໃນຕອນທ້າຍຂອງທ່ອນໄມ້ພື້ນຖານທີ່ມີບໍ່ເກີນ max-
goto-duplication-insns ແມ່ນ unfactored. ຄ່າເລີ່ມຕົ້ນແມ່ນ 8.

max-delay-slot-insn-search
ຈໍານວນສູງສຸດຂອງຄໍາແນະນໍາທີ່ຈະພິຈາລະນາໃນເວລາທີ່ຊອກຫາຄໍາແນະນໍາທີ່ຈະ
ຕື່ມຂໍ້ມູນໃສ່ຊ່ອງຊັກຊ້າ. ຖ້າ​ຫາກ​ວ່າ​ຫຼາຍ​ກ​່​ວາ​ຈໍາ​ນວນ​ໂດຍ​ຕົນ​ເອງ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ແມ່ນ​
ຄົ້ນຫາ, ການປະຫຍັດເວລາຈາກການຕື່ມຊ່ອງໃສ່ການຊັກຊ້າແມ່ນຫນ້ອຍ, ສະນັ້ນຢຸດ
ກຳລັງຊອກຫາ. ການເພີ່ມມູນຄ່າຫມາຍເຖິງການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍ, ເຮັດໃຫ້
ເວລາການລວບລວມເພີ່ມຂຶ້ນກັບການປັບປຸງເລັກນ້ອຍໃນເວລາປະຕິບັດ.

max-delay-slot-live-search
ໃນ​ເວ​ລາ​ທີ່​ພະ​ຍາ​ຍາມ​ທີ່​ຈະ​ຕື່ມ​ຂໍ້​ມູນ​ໃສ່​ການ​ຊັກ​ຊ້າ​, ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ທີ່​ຈະ​ພິ​ຈາ​ລະ​ນາ​
ເມື່ອຊອກຫາບລັອກທີ່ມີຂໍ້ມູນການລົງທະບຽນສົດທີ່ຖືກຕ້ອງ. ເພີ່ມຂຶ້ນນີ້
ມູນຄ່າທີ່ເລືອກ arbitrarily ຫມາຍຄວາມວ່າການເພີ່ມປະສິດທິພາບຮຸກຮານຫຼາຍ, ເພີ່ມທະວີການ
ເວລາລວບລວມ. ພາລາມິເຕີນີ້ຄວນຈະຖືກໂຍກຍ້າຍອອກເມື່ອລະຫັດສະລັອດຕິງຊັກຊ້າ
ຂຽນຄືນໃຫມ່ເພື່ອຮັກສາເສັ້ນສະແດງການໄຫຼເຂົ້າຄວບຄຸມ.

max-gcse-memory
ຈໍານວນສູງສຸດໂດຍປະມານຂອງຫນ່ວຍຄວາມຈໍາທີ່ສາມາດໄດ້ຮັບການຈັດສັນເພື່ອປະຕິບັດ
ການເພີ່ມປະສິດທິພາບການລົບລ້າງ subexpression ທົ່ວໄປທົ່ວໂລກ. ຖ້າ​ຫາກ​ວ່າ​ຄວາມ​ຈໍາ​ຫຼາຍ​ກ​່​ວາ​
ທີ່ກໍານົດໄວ້ແມ່ນຈໍາເປັນ, ການເພີ່ມປະສິດທິພາບບໍ່ໄດ້ເຮັດ.

max-gcse-insertion-ratio
ຖ້າອັດຕາສ່ວນຂອງການໃສ່ການສະແດງອອກຕໍ່ການລຶບແມ່ນໃຫຍ່ກວ່າຄ່ານີ້ສໍາລັບ
ການສະແດງອອກໃດໆ, ຫຼັງຈາກນັ້ນ RTL PRE ແຊກຫຼືເອົາການສະແດງອອກແລະດັ່ງນັ້ນຈຶ່ງອອກ
ການຄິດໄລ່ຊ້ຳຊ້ອນບາງສ່ວນໃນກະແສຄຳແນະນຳ. ຄ່າເລີ່ມຕົ້ນແມ່ນ
20​.

max-pending-list-length
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ທີ່​ຍັງ​ຄ້າງ​ຢູ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ກ່ອນ​ທີ່​ຈະ​ລ້າງ​
ສະຖານະປັດຈຸບັນ ແລະເລີ່ມຕົ້ນໃໝ່. ຫນ້າທີ່ຂະຫນາດໃຫຍ່ທີ່ມີສາຂາຈໍານວນຫນ້ອຍຫຼືການໂທສາມາດ
ສ້າງບັນຊີລາຍຊື່ຂະຫນາດໃຫຍ່ເກີນໄປທີ່ບໍລິໂພກຄວາມຊົງຈໍາແລະຊັບພະຍາກອນໂດຍບໍ່ຈໍາເປັນຕ້ອງ.

max-modulo-backtrack-attempts
ຈໍານວນສູງສຸດຂອງຄວາມພະຍາຍາມ backtrack ທີ່ກໍານົດເວລາຄວນຈະເຮັດໃນເວລາທີ່ modulo
ການຈັດຕາຕະລາງ loop. ຄ່າທີ່ໃຫຍ່ກວ່າສາມາດເພີ່ມເວລາການລວບລວມໄດ້.

max-inline-insns-single
ຕົວກໍານົດການຈໍານວນຫນຶ່ງຄວບຄຸມ inliner ຕົ້ນໄມ້ທີ່ໃຊ້ໃນ GCC. ຕົວເລກນີ້ກໍານົດ
ຈໍານວນຄໍາແນະນໍາສູງສຸດ (ນັບຢູ່ໃນຕົວແທນພາຍໃນຂອງ GCC) ໃນ a
ຟັງຊັນດຽວທີ່ inliner ຕົ້ນໄມ້ພິຈາລະນາສໍາລັບການ inlining. ນີ້ມີຜົນກະທົບພຽງແຕ່
ຫນ້າທີ່ປະກາດໃນແຖວ ແລະວິທີການປະຕິບັດໃນການປະກາດຊັ້ນຮຽນ (C++).
ຄ່າເລີ່ມຕົ້ນແມ່ນ 400.

max-inline-insns-auto
ເມື່ອທ່ານໃຊ້ -finline-functions (ລວມຢູ່ໃນ -O3), ຫຼາຍຫນ້າທີ່ຈະ
ຖ້າບໍ່ດັ່ງນັ້ນບໍ່ໄດ້ຖືກພິຈາລະນາສໍາລັບການ inlining ໂດຍ compiler ໄດ້ຖືກສືບສວນ. ເຖິງ
ຫນ້າທີ່ເຫຼົ່ານັ້ນ, ຂອບເຂດຈໍາກັດທີ່ແຕກຕ່າງກັນ (ຫຼາຍ) ເມື່ອທຽບກັບຫນ້າທີ່
ປະກາດໃນແຖວສາມາດນຳໃຊ້ໄດ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 40.

inline-min-speedup
ເມື່ອການຄາດຄະເນການປັບປຸງການປະຕິບັດຂອງຜູ້ໂທ + callee runtime ເກີນນີ້
threshold (ໃນ​ກ່ອນ​ຫນ້າ​ນີ້), ການ​ທໍາ​ງານ​ທີ່​ສາ​ມາດ​ໄດ້​ຮັບ​ການ inlined ໂດຍ​ບໍ່​ສົນ​ເລື່ອງ​ຈໍາ​ກັດ​ກ່ຽວ​ກັບ​ການ​ຈໍາ​ກັດ
--param max-inline-insns-single ແລະ --param max-inline-insns-auto.

large-function-insns
ຂອບເຂດຈໍາກັດການກໍານົດຫນ້າທີ່ຂະຫນາດໃຫຍ່ແທ້ໆ. ສໍາລັບຫນ້າທີ່ໃຫຍ່ກວ່າຂອບເຂດຈໍາກັດນີ້
ຫຼັງຈາກ inlining, inlining ແມ່ນຈໍາກັດໂດຍ --param ຂະ​ຫນາດ​ໃຫຍ່​ຫນ້າ​ທີ່​ການ​ຂະ​ຫຍາຍ​ຕົວ​. ນີ້
ພາລາມິເຕີແມ່ນເປັນປະໂຫຍດຕົ້ນຕໍເພື່ອຫຼີກເວັ້ນການລວບລວມເວລາທີ່ຮຸນແຮງທີ່ເກີດຈາກການບໍ່.
ສູດການຄິດໄລ່ເສັ້ນຊື່ທີ່ໃຊ້ໂດຍປາຍຫຼັງ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2700.

ຂະ​ຫນາດ​ໃຫຍ່​ຫນ້າ​ທີ່​ການ​ຂະ​ຫຍາຍ​ຕົວ​
ລະບຸການຂະຫຍາຍຕົວສູງສຸດຂອງຟັງຊັນຂະຫນາດໃຫຍ່ທີ່ເກີດຈາກການ inlining ເປັນເປີເຊັນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 100 ເຊິ່ງຈໍາກັດການຂະຫຍາຍຕົວຂອງຫນ້າທີ່ຂະຫນາດໃຫຍ່ເຖິງ 2.0 ເທົ່າຂອງຕົ້ນສະບັບ
ຂະຫນາດ.

large-unit-insns
ຂອບ​ເຂດ​ຈໍາ​ກັດ​ການ​ລະ​ບຸ​ຫົວ​ຫນ່ວຍ​ການ​ແປ​ພາ​ສາ​ຂະ​ຫນາດ​ໃຫຍ່​. ການຂະຫຍາຍຕົວທີ່ເກີດຈາກການ inlining ຂອງຫນ່ວຍງານ
ຂະຫນາດໃຫຍ່ກວ່າຂອບເຂດຈໍາກັດນີ້ຖືກຈໍາກັດໂດຍ --param inline-unit-growth. ສໍາລັບຫນ່ວຍງານຂະຫນາດນ້ອຍ
ນີ້ອາດຈະເຄັ່ງຄັດເກີນໄປ. ສໍາລັບຕົວຢ່າງ, ພິຈາລະນາຫນ່ວຍງານທີ່ປະກອບດ້ວຍຫນ້າທີ່ A
ນັ້ນແມ່ນ inline ແລະ B ທີ່ພຽງແຕ່ໂທຫາ A ສາມເທື່ອ. ຖ້າ B ແມ່ນນ້ອຍທຽບກັບ A,
ການຂະຫຍາຍຕົວຂອງຫນ່ວຍງານແມ່ນ 300% ແລະຍັງ inlining ດັ່ງກ່າວແມ່ນ sane ຫຼາຍ. ສໍາລັບຂະຫນາດໃຫຍ່ຫຼາຍ
ຫນ່ວຍງານປະກອບດ້ວຍຫນ້າທີ່ inlineable ຂະຫນາດນ້ອຍ, ແນວໃດກໍ່ຕາມ, ການຂະຫຍາຍຕົວຂອງຫນ່ວຍງານໂດຍລວມ
ຈໍາ​ກັດ​ແມ່ນ​ຈໍາ​ເປັນ​ເພື່ອ​ຫຼີກ​ເວັ້ນ​ການ​ລະ​ເບີດ exponential ຂອງ​ຂະ​ຫນາດ​ລະ​ຫັດ​. ດັ່ງນັ້ນສໍາລັບຂະຫນາດນ້ອຍກວ່າ
ຫນ່ວຍ, ຂະຫນາດແມ່ນເພີ່ມຂຶ້ນ --param large-unit-insns ກ່ອນການນໍາໃຊ້ --param
inline-unit-growth. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10000.

inline-unit-growth
ລະບຸການຂະຫຍາຍຕົວໂດຍລວມສູງສຸດຂອງຫນ່ວຍງານລວບລວມທີ່ເກີດຈາກ inlining. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 20 ເຊິ່ງຈໍາກັດການຂະຫຍາຍຕົວຂອງຫນ່ວຍເປັນ 1.2 ເທົ່າຂອງຂະຫນາດຕົ້ນສະບັບ. ໜາວ
ຟັງຊັນຕ່າງໆ (ໝາຍເຖິງຄວາມເຢັນຜ່ານຄຸນລັກສະນະ ຫຼືໂດຍຄໍາຕິຊົມໂປຣໄຟລ໌) ບໍ່ແມ່ນ
ກວມ​ເອົາ​ຂະ​ຫນາດ​ຫນ່ວຍ​ບໍ​ລິ​ການ​.

ipcp-unit-growth
ລະບຸການຂະຫຍາຍຕົວໂດຍລວມສູງສຸດຂອງຫນ່ວຍງານການລວບລວມທີ່ເກີດຈາກຂະບວນການລະຫວ່າງກັນ
ການຂະຫຍາຍພັນຢ່າງຕໍ່ເນື່ອງ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10 ເຊິ່ງຈຳກັດການຂະຫຍາຍຕົວຂອງຫົວໜ່ວຍເປັນ 1.1
ເທົ່າຂອງຂະຫນາດຕົ້ນສະບັບ.

ໃຫຍ່ stack-frame
ຂອບເຂດຈໍາກັດທີ່ລະບຸກອບ stack ຂະຫນາດໃຫຍ່. ໃນຂະນະທີ່ inlining algorithm ກໍາລັງພະຍາຍາມ
ເພື່ອບໍ່ໃຫ້ເກີນຂອບເຂດຈໍາກັດນີ້ຫຼາຍເກີນໄປ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 256 bytes.

large-stack-frame-growth
ລະບຸການຂະຫຍາຍຕົວສູງສຸດຂອງເຟຣມ stack ໃຫຍ່ທີ່ເກີດຈາກການ inlining ເປັນເປີເຊັນ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 1000 ເຊິ່ງຈໍາກັດການຂະຫຍາຍຕົວຂອງກອບ stack ຂະຫນາດໃຫຍ່ເຖິງ 11 ເທົ່າ
ຂະຫນາດຕົ້ນສະບັບ.

max-inline-insns-recursive
max-inline-insns-recursive-auto
ລະບຸຈໍານວນຄໍາແນະນໍາສູງສຸດເປັນສໍາເນົານອກສາຍຂອງຕົວຕົນເອງ.
ຟັງຊັນ inline recursive ສາມາດເຕີບໂຕໄດ້ໂດຍການປະຕິບັດ inlining recursive.

--param max-inline-insns-recursive ໃຊ້ກັບຟັງຊັນທີ່ປະກາດໃນແຖວ. ສໍາລັບ
ຟັງຊັນບໍ່ໄດ້ປະກາດໃນແຖວ, inlining recursive ເກີດຂຶ້ນເມື່ອ
-finline-functions (ລວມຢູ່ໃນ -O3) ຖືກເປີດໃຊ້ງານ; --param max-inline-insns-
recursive-auto ນຳໃຊ້ແທນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 450.

max-inline-recursive-depth
max-inline-recursive-depth-auto
ລະບຸຄວາມເລິກ recursion ສູງສຸດທີ່ໃຊ້ສໍາລັບການ recursive inlining.

--param max-inline-recursive-depth ໃຊ້ກັບຟັງຊັນທີ່ປະກາດໃນແຖວ. ສໍາລັບ
ຟັງຊັນບໍ່ໄດ້ປະກາດໃນແຖວ, inlining recursive ເກີດຂຶ້ນເມື່ອ
-finline-functions (ລວມຢູ່ໃນ -O3) ຖືກເປີດໃຊ້ງານ; --param max-inline-recursive-
ຄວາມ​ເລິກ​ອັດ​ຕະ​ໂນ​ມັດ​ ນຳໃຊ້ແທນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 8.

min-inline-recursive-probability
inlining recursive ແມ່ນກໍາໄລພຽງແຕ່ສໍາລັບການທໍາງານທີ່ມີ recursion ເລິກໃນ
ໂດຍສະເລ່ຍແລະສາມາດເຈັບປວດສໍາລັບການທໍາງານທີ່ມີຄວາມເລິກ recursion ພຽງເລັກນ້ອຍໂດຍການເພີ່ມ
ຂະ​ຫນາດ prologue ຫຼື​ຄວາມ​ສັບ​ສົນ​ຂອງ​ການ​ທໍາ​ງານ​ຂອງ​ຮ່າງ​ກາຍ​ທີ່​ເຫມາະ​ສົມ​ອື່ນໆ​.

ເມື່ອ​ຄຳ​ຕິ​ຊົມ​ຂອງ​ໂປ​ຣ​ໄຟ​ລ໌​ມີ​ຢູ່ (ເບິ່ງ -fprofile-generate) recursion ຕົວ​ຈິງ​
ຄວາມເລິກສາມາດຄາດເດົາໄດ້ຈາກຄວາມເປັນໄປໄດ້ທີ່ຟັງຊັນ recurses ຜ່ານການໂທທີ່ໃຫ້
ການສະແດງອອກ. ພາລາມິເຕີນີ້ຈໍາກັດ inlining ພຽງແຕ່ໂທຫາການສະແດງອອກທີ່ມີ
ຄວາມເປັນໄປໄດ້ເກີນເກນທີ່ກຳນົດໄວ້ (ເປັນເປີເຊັນ). ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

Early-inlining-insns
ກໍານົດການຂະຫຍາຍຕົວທີ່ inliner ຕົ້ນສາມາດເຮັດໄດ້. ໃນຄວາມເປັນຈິງ, ມັນເພີ່ມປະລິມານ
ຂອງ inlining ສໍາລັບລະຫັດທີ່ມີການລົງໂທດ abstraction ຂະຫນາດໃຫຍ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 14.

max-early-inliner-iterations
ຈໍາ​ກັດ​ການ​ເຮັດ​ຊ້ຳ​ຂອງ inliner ຕົ້ນ​. ນີ້ໂດຍພື້ນຖານແລ້ວ bounds ຈໍານວນຂອງ
nested indirect calls the inliner ຕົ້ນສາມາດແກ້ໄຂ. ໂສ້ທີ່ເລິກກວ່າແມ່ນຍັງຢູ່
ຈັດການໂດຍ inlining ຊ້າ.

comdat-sharing-probability
ຄວາມເປັນໄປໄດ້ (ເປັນເປີເຊັນ) ທີ່ຟັງຊັນໃນແຖວຂອງ C++ ທີ່ມີການເບິ່ງເຫັນ comdat ແມ່ນ
ແບ່ງປັນໃນທົ່ວຫນ່ວຍງານລວບລວມຫຼາຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 20.

profile-func-internal-id
ພາຣາມິເຕີເພື່ອຄວບຄຸມວ່າຈະໃຊ້ function id ພາຍໃນໃນຖານຂໍ້ມູນໂປຣໄຟລ໌ຫຼືບໍ່
ຊອກຫາ. ຖ້າຄ່າແມ່ນ 0, compiler ໃຊ້ id ທີ່ອີງໃສ່ຟັງຊັນ
ຊື່ຕົວປະກອບ ແລະຊື່ໄຟລ໌, ເຊິ່ງເຮັດໃຫ້ຂໍ້ມູນໂປຣໄຟລ໌ເກົ່າມີຄວາມທົນທານຕໍ່ກັບແຫຼ່ງທີ່ມາ
ການ​ປ່ຽນ​ແປງ​ເຊັ່ນ​ການ​ຈັດ​ລໍາ​ດັບ​ການ​ທໍາ​ງານ​ແລະ​ອື່ນໆ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ແມ່ນ 0​.

min-vect-loop-bound
ຈໍານວນຕໍາ່ສຸດທີ່ຂອງການຊໍ້າຄືນທີ່ loops ບໍ່ໄດ້ຖືກ vectorized ໃນເວລາທີ່
-ftree-vectorize ຖືກນໍາໃຊ້. ຈໍານວນການຊໍ້າຄືນຫຼັງຈາກ vectorization ຕ້ອງການ
ຫຼາຍກວ່າຄ່າທີ່ລະບຸໄວ້ໂດຍທາງເລືອກນີ້ເພື່ອອະນຸຍາດໃຫ້ vectorization. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 0.

gcse-cost-distance-ratio
ປັດ​ໄຈ​ການ​ຂະ​ຫຍາຍ​ການ​ຄໍາ​ນວນ​ຂອງ​ໄລ​ຍະ​ສູງ​ສຸດ​ການ​ສະ​ແດງ​ອອກ​ສາ​ມາດ​ຍ້າຍ​ໂດຍ​
ການເພີ່ມປະສິດທິພາບ GCSE. ໃນປັດຈຸບັນນີ້ສະຫນັບສະຫນູນພຽງແຕ່ຢູ່ໃນລະຫັດ hoisting pass.
ອັດຕາສ່ວນທີ່ໃຫຍ່ກວ່າ, ການ hoisting ລະຫັດຮຸກຮານຫຼາຍແມ່ນງ່າຍດາຍ
expressions, ie, ການສະແດງອອກທີ່ມີຄ່າໃຊ້ຈ່າຍຫນ້ອຍກວ່າ gcse-unrestricted-
ຄ່າໃຊ້ຈ່າຍ. ການລະບຸ 0 ປິດການຍົກຕົວສະແດງທີ່ງ່າຍດາຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ
10​.

gcse-unrestricted-cost
ຄ່າ​ໃຊ້​ຈ່າຍ​, ການ​ວັດ​ແທກ​ປະ​ມານ​ເປັນ​ຄ່າ​ໃຊ້​ຈ່າຍ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ເຄື່ອງ​ຫນຶ່ງ​ປົກ​ກະ​ຕິ​, ຢູ່​
ເຊິ່ງການເພີ່ມປະສິດທິພາບ GCSE ບໍ່ຈໍາກັດໄລຍະທາງທີ່ສະແດງອອກສາມາດເດີນທາງໄດ້.
ໃນປັດຈຸບັນນີ້ສະຫນັບສະຫນູນພຽງແຕ່ຢູ່ໃນລະຫັດ hoisting pass. ຄ່າໃຊ້ຈ່າຍຫນ້ອຍລົງ,
ການ hoisting ລະຫັດຮຸກຮານຫຼາຍແມ່ນ. ການລະບຸ 0 ອະນຸຍາດໃຫ້ສະແດງອອກທັງຫມົດ
ການ​ເດີນ​ທາງ​ໃນ​ໄລ​ຍະ​ທີ່​ບໍ່​ຈໍາ​ກັດ​. ຄ່າເລີ່ມຕົ້ນແມ່ນ 3.

max-hoist-depth
ຄວາມເລິກຂອງການຄົ້ນຫາໃນຕົ້ນໄມ້ dominator ສໍາລັບການສະແດງອອກເພື່ອ hoist. ນີ້ຖືກນໍາໃຊ້
ເພື່ອຫຼີກເວັ້ນການປະພຶດສີ່ຫຼ່ຽມໃນລະບົບ hoisting algorithm. ຄ່າຂອງ 0 ບໍ່ຈໍາກັດ
ໃນການຄົ້ນຫາ, ແຕ່ອາດຈະຊ້າລົງການລວບລວມຫນ້າທີ່ອັນໃຫຍ່ຫຼວງ. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ 30.

max-tail-merge-ການປຽບທຽບ
ຈຳນວນສູງສຸດຂອງ bbs ທີ່ຄ້າຍຄືກັນເພື່ອປຽບທຽບ bb ກັບ. ນີ້ຖືກນໍາໃຊ້ເພື່ອຫຼີກເວັ້ນການ
ພຶດຕິກຳສີ່ຫຼ່ຽມໃນການລວມຫາງຕົ້ນໄມ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-tail-merge-iterations
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ເຮັດ​ຊ້ຳ​ຂອງ​ການ​ຜ່ານ​ໃນ​ຫນ້າ​ທີ່​. ນີ້ຖືກນໍາໃຊ້ເພື່ອ
ຈຳກັດເວລາການຮວບຮວມໃນການຮວມຫາງຕົ້ນໄມ້. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

max-unrolled-insns
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ທີ່ loop ອາດ​ຈະ​ຕ້ອງ​ໄດ້​ຮັບ​ການ unrolled​. ຖ້າ loop
ແມ່ນ unrolled, ພາລາມິເຕີນີ້ຍັງກໍານົດຈໍານວນເວລາທີ່ລະຫັດ loop ແມ່ນ
ຍົກເລີກ.

max-average-unrolled-insns
ຈໍານວນຄໍາແນະນໍາສູງສຸດທີ່ລໍາອຽງໂດຍຄວາມເປັນໄປໄດ້ຂອງການປະຕິບັດຂອງພວກເຂົາວ່າ
loop ອາດຈະຕ້ອງໄດ້ຮັບການ unrolled. ຖ້າ loop ຖືກຖອດອອກ, ພາລາມິເຕີນີ້ຄືກັນ
ກຳນົດຈຳນວນຄັ້ງທີ່ລະຫັດ loop ຖືກຖອດອອກ.

max-unroll-times
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ unrollings ຂອງ loop ດຽວ​.

max-peeled-insns
ຈໍານວນຄໍາແນະນໍາສູງສຸດທີ່ loop ອາດຈະຕ້ອງໄດ້ຮັບການປອກເປືອກ. ຖ້າ loop
ຖືກປອກເປືອກ, ພາລາມິເຕີນີ້ຍັງກໍານົດຈໍານວນເວລາທີ່ລະຫັດ loop ຖືກປອກເປືອກ.

max-peel-times
ຈໍານວນສູງສຸດຂອງການປອກເປືອກຂອງ loop ດຽວ.

max-peel-ສາຂາ
ຈໍານວນສູງສຸດຂອງສາຂາໃນເສັ້ນທາງຮ້ອນໂດຍຜ່ານລໍາດັບປອກເປືອກ.

max-completely-peeled-insns
ຈໍານວນສູງສຸດຂອງ insns ຂອງ loop ປອກເປືອກຫມົດ.

max-completely-peel-times
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ຊ​້​ໍາ​ຂອງ loop ເປັນ​ທີ່​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ປອກ​ເປືອກ​ທີ່​ສົມ​ບູນ​.

max-completely-peel-loop-nest-depth
ຄວາມເລິກສູງສຸດຂອງຮັງ loop ທີ່ເຫມາະສົມສໍາລັບການປອກເປືອກຢ່າງສົມບູນ.

max-unswitch-insns
ຈຳນວນສູງສຸດຂອງ insns ຂອງ loop ທີ່ບໍ່ໄດ້ສະຫຼັບ.

max-unswitch-level
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ສາ​ຂາ unswitched ໃນ loop ດຽວ​.

lim-ແພງ
ຄ່າໃຊ້ຈ່າຍຕໍ່າສຸດຂອງການສະແດງຜົນລາຄາແພງໃນການເຄື່ອນໄຫວຂອງ loop invariant.

iv-consider-all-candidates-bound
ຜູກມັດກັບຈໍານວນຜູ້ສະຫມັກສໍາລັບຕົວແປ induction, ຂ້າງລຸ່ມນີ້ທີ່ຜູ້ສະຫມັກທັງຫມົດ
ຖືກພິຈາລະນາສໍາລັບແຕ່ລະການນໍາໃຊ້ໃນການເພີ່ມປະສິດທິພາບຕົວແປ induction. ຖ້າມີ
ຜູ້ສະຫມັກຫຼາຍກວ່ານີ້, ພຽງແຕ່ຜູ້ທີ່ກ່ຽວຂ້ອງທີ່ສຸດຖືກພິຈາລະນາທີ່ຈະຫຼີກເວັ້ນ
ຄວາມສັບສົນເວລາສີ່ຫລ່ຽມ.

iv-max-ພິຈາລະນາ-ໃຊ້
ການເພີ່ມປະສິດທິພາບຕົວແປ induction ໃຫ້ເຖິງກັບ loops ທີ່ມີ induction ຫຼາຍ
ການນໍາໃຊ້ຕົວແປ.

iv-always-prune-cand-set-bound
ຖ້າຈໍານວນຜູ້ສະຫມັກໃນຊຸດແມ່ນນ້ອຍກວ່າຄ່ານີ້, ພະຍາຍາມສະເຫມີ
ເອົາ ivs ທີ່ບໍ່ຈໍາເປັນອອກຈາກຊຸດໃນເວລາທີ່ເພີ່ມໃຫມ່.

scev-max-expr-size
ຜູກມັດກັບຂະໜາດຂອງການສະແດງຜົນທີ່ໃຊ້ໃນເຄື່ອງວິເຄາະວິວັດທະນາການສະເກັດລາ. ຂະຫນາດໃຫຍ່
ການສະແດງອອກຊ້າຂອງການວິເຄາະ.

scev-max-expr-ຊັບຊ້ອນ
ຜູກມັດກັບຄວາມສັບສົນຂອງການສະແດງອອກໃນເຄື່ອງວິເຄາະວິວັດທະນາການສະເກັດເງິນ.
ການສະແດງອອກທີ່ຊັບຊ້ອນເຮັດໃຫ້ເຄື່ອງວິເຄາະຊ້າລົງ.

omega-max-vars
ຈຳນວນຕົວແປສູງສຸດໃນລະບົບຈຳກັດ Omega. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ 128.

omega-max-geqs
ຈຳນວນສູງສຸດຂອງຄວາມບໍ່ສະເໝີພາບໃນລະບົບຈຳກັດ Omega. ຄ່າເລີ່ມຕົ້ນ
ຄ່າແມ່ນ 256.

omega-max-eqs
ຈຳນວນສູງສຸດຂອງຄວາມສະເໝີພາບໃນລະບົບຈຳກັດ Omega. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ 128.

omega-max-wild-cards
ຈຳນວນສູງສຸດຂອງຕົວແປແທນທີ່ຕົວແກ້ໄຂ Omega ສາມາດໃສ່ໄດ້.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 18.

omega-hash-table-size
ຂະຫນາດຂອງຕາຕະລາງ hash ໃນ Omega solver. ຄ່າເລີ່ມຕົ້ນແມ່ນ 550.

omega-max-keys
ຈໍານວນສູງສຸດຂອງກະແຈທີ່ໃຊ້ໂດຍ Omega solver. ຄ່າເລີ່ມຕົ້ນແມ່ນ 500.

omega-eliminate-redundant-constraints
ເມື່ອຕັ້ງເປັນ 1, ໃຊ້ວິທີການລາຄາແພງເພື່ອລົບລ້າງຂໍ້ຈໍາກັດທີ່ຊໍ້າຊ້ອນທັງຫມົດ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 0.

vect-max-version-for-alignment-checks
ຈໍານວນສູງສຸດຂອງການກວດສອບເວລາແລ່ນທີ່ສາມາດປະຕິບັດໄດ້ໃນເວລາທີ່ເຮັດ loop
ຮຸ່ນສໍາລັບການສອດຄ່ອງໃນ vectorizer.

vect-max-version-for-alias-checks
ຈໍານວນສູງສຸດຂອງການກວດສອບເວລາແລ່ນທີ່ສາມາດປະຕິບັດໄດ້ໃນເວລາທີ່ເຮັດ loop
ຮຸ່ນສໍາລັບນາມແຝງໃນ vectorizer.

vect-max-peeling-for-alignment
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ປອກ​ເປືອກ loop ເພື່ອ​ເສີມ​ຂະ​ຫຍາຍ​ການ​ຈັດ​ສັນ​ການ​ເຂົ້າ​ເຖິງ​ສໍາ​ລັບ vectorizer​. ມູນຄ່າ
-1 ຫມາຍຄວາມວ່າ 'ບໍ່ຈໍາກັດ'.

max-iterations-to-track
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ຊ​້​ໍ​າ​ຂອງ loop ເປັນ brute-force algorithm ສໍາ​ລັບ​ການ​ວິ​ເຄາະ
ຂອງຈໍານວນການຊໍ້າຄືນຂອງ loop ພະຍາຍາມປະເມີນ.

hot-bb-count-ws-permille
ການນັບໂປຣໄຟລ໌ບລັອກພື້ນຖານແມ່ນຖືວ່າຮ້ອນຖ້າມັນປະກອບສ່ວນໃຫ້
permillage (ie 0) ຂອງການປະຕິບັດ profiled ທັງຫມົດ.

hot-bb-frequency-fraction
ເລືອກສ່ວນຫນຶ່ງຂອງຄວາມຖີ່ຂອງຕັນເຂົ້າຂອງການປະຕິບັດຂອງຕັນພື້ນຖານໃນ
ຟັງຊັນທີ່ໄດ້ຮັບຕັນພື້ນຖານຈໍາເປັນຕ້ອງໄດ້ຮັບການພິຈາລະນາຮ້ອນ.

max-predicted-iterations
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ການ​ຊໍ້າ​ກັນ loop ພວກ​ເຮົາ​ຄາດ​ຄະ​ເນ​ສະ​ຖິ​ຕິ​. ນີ້ແມ່ນເປັນປະໂຫຍດໃນ
ກໍ​ລະ​ນີ​ທີ່​ຫນ້າ​ທີ່​ປະ​ກອບ​ດ້ວຍ loop ດຽວ​ທີ່​ຮູ້​ຈັກ​ຜູກ​ພັນ​ແລະ loop ອີກ​
ມີ​ການ​ຜູກ​ມັດ​ທີ່​ບໍ່​ຮູ້​ຈັກ​. ຈໍານວນທີ່ຮູ້ຈັກຂອງການຊໍ້າຄືນແມ່ນຄາດຄະເນຢ່າງຖືກຕ້ອງ, ໃນຂະນະທີ່
ຈໍານວນທີ່ບໍ່ຮູ້ຈັກຂອງ iterations ສະເລ່ຍປະມານ 10. ນີ້ຫມາຍຄວາມວ່າ loop ໄດ້
ໂດຍບໍ່ມີຂອບເຂດຈໍາກັດປະກົດວ່າເຢັນທຽມກັບຄົນອື່ນ.

ຄວາມເປັນໄປໄດ້ທີ່ຄາດໄວ້
ຄວບຄຸມຄວາມເປັນໄປໄດ້ຂອງການສະແດງຜົນທີ່ມີຄ່າທີ່ລະບຸໄວ້. ນີ້
ພາລາມິເຕີໃຊ້ເວລາເປີເຊັນ (ie 0 ... 100) ເປັນ input. ຄວາມເປັນໄປໄດ້ເລີ່ມຕົ້ນ
ຂອງ 90 ແມ່ນ​ໄດ້​ຮັບ​ໂດຍ​ກົງ​.

align-threshold
ເລືອກສ່ວນໜຶ່ງຂອງຄວາມຖີ່ສູງສຸດຂອງການປະຕິບັດຂອງຕັນພື້ນຖານໃນ a
ຟັງຊັນເພື່ອຈັດວາງຕັນພື້ນຖານ.

align-loop-iterations
loop ທີ່ຄາດວ່າຈະເຮັດຊ້ຳຢ່າງໜ້ອຍຈຳນວນການຊໍ້າຄືນທີ່ເລືອກແມ່ນສອດຄ່ອງ.

tracer-dynamic- coverage
tracer-dynamic-coverage-feedback
ຄ່ານີ້ຖືກນໍາໃຊ້ເພື່ອຈໍາກັດການສ້າງ superblock ເມື່ອອັດຕາສ່ວນທີ່ໃຫ້
ຄໍາແນະນໍາທີ່ຖືກປະຕິບັດແມ່ນກວມເອົາ. ນີ້ຈໍາກັດການຂະຫຍາຍຂະຫນາດລະຫັດທີ່ບໍ່ຈໍາເປັນ.

ໄດ້ tracer-dynamic-coverage-feedback ພາລາມິເຕີຖືກນໍາໃຊ້ພຽງແຕ່ເມື່ອຄໍາຕິຊົມໂປຣໄຟລ໌
ສາມາດໃຊ້ໄດ້. ໂປຼໄຟລ໌ທີ່ແທ້ຈິງ (ກົງກັນຂ້າມກັບການຄາດຄະເນສະຖິຕິ) ແມ່ນ
ມີຄວາມສົມດູນໜ້ອຍກວ່າທີ່ອະນຸຍາດໃຫ້ເກນເປັນມູນຄ່າໃຫຍ່ກວ່າ.

tracer-max-code-growth
ຢຸດເຊົາການຊໍ້າຊ້ອນຫາງເມື່ອການເຕີບໂຕຂອງລະຫັດໄດ້ບັນລຸອັດຕາສ່ວນ. ນີ້​ແມ່ນ
ແທນທີ່ຈະເປັນຂອບເຂດຈໍາກັດປອມ, ຍ້ອນວ່າສ່ວນໃຫຍ່ຂອງການຊໍ້າກັນໄດ້ຖືກລົບລ້າງຕໍ່ມາໃນຂ້າມ
ໂດດ, ດັ່ງນັ້ນມັນອາດຈະຖືກຕັ້ງເປັນມູນຄ່າທີ່ສູງກວ່າຫຼາຍກ່ວາການເຕີບໃຫຍ່ຂອງລະຫັດທີ່ຕ້ອງການ.

tracer-min-branch-ratio
ຢຸດເຊົາການຂະຫຍາຍຕົວແບບປີ້ນກັບກັນເມື່ອຄວາມເປັນໄປໄດ້ຂອງປີ້ນກັບກັນຂອງຂອບທີ່ດີທີ່ສຸດແມ່ນຫນ້ອຍກວ່ານີ້
ເກນ (ເປັນເປີເຊັນ).

tracer-min-branch-ratio
tracer-min-branch-ratio-feedback
ຢຸດການຂະຫຍາຍຕົວໄປຂ້າງຫນ້າຖ້າຂອບທີ່ດີທີ່ສຸດມີຄວາມເປັນໄປໄດ້ຕ່ໍາກວ່າຂອບເຂດນີ້.

ຄ້າຍຄືກັນກັບ tracer-dynamic- coverage ສອງຄ່າແມ່ນມີຢູ່, ອັນໜຶ່ງສຳລັບການລວບລວມ
ສໍາ​ລັບ​ຄໍາ​ຄຶດ​ຄໍາ​ເຫັນ profile ແລະ​ຫນຶ່ງ​ສໍາ​ລັບ​ການ​ສັງ​ລວມ​ໂດຍ​ບໍ່​ມີ​ການ​. ມູນຄ່າສໍາລັບການລວບລວມ
ດ້ວຍການຕິຊົມໂປຣໄຟລ໌ຈະຕ້ອງເປັນແບບອະນຸລັກ (ສູງກວ່າ) ເພື່ອເຮັດໃຫ້
ຕິດຕາມປະສິດທິພາບ.

max-cse-path-length
ຈໍານວນສູງສຸດຂອງຕັນພື້ນຖານຢູ່ໃນເສັ້ນທາງທີ່ CSE ພິຈາລະນາ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-cse-insns
ຈໍານວນສູງສຸດຂອງຄໍາແນະນໍາ CSE ຂະບວນການກ່ອນທີ່ຈະ flushing. ຄ່າເລີ່ມຕົ້ນແມ່ນ
1000​.

ggc-min-expand
GCC ໃຊ້ຕົວເກັບຂີ້ເຫຍື້ອເພື່ອຈັດການການຈັດສັນຄວາມຊົງຈໍາຂອງຕົນເອງ. ພາລາມິເຕີນີ້
ກໍານົດອັດຕາສ່ວນຕໍາ່ສຸດທີ່ heap ຂອງຜູ້ເກັບຂີ້ເຫຍື້ອຄວນຈະເປັນ
ອະນຸຍາດໃຫ້ຂະຫຍາຍລະຫວ່າງການເກັບກໍາ. Tuning ນີ້ອາດຈະປັບປຸງຄວາມໄວການລວບລວມ;
ມັນບໍ່ມີຜົນຕໍ່ການສ້າງລະຫັດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ 30% + 70% * (RAM/1GB) ທີ່ມີຂອບເທິງຂອງ 100% ເມື່ອ RAM >= 1GB.
ຖ້າ "getrlimit" ສາມາດໃຊ້ໄດ້, ແນວຄວາມຄິດຂອງ "RAM" ແມ່ນນ້ອຍທີ່ສຸດຂອງ RAM ຕົວຈິງແລະ
"RLIMIT_DATA" ຫຼື "RLIMIT_AS". ຖ້າ GCC ບໍ່ສາມາດຄິດໄລ່ RAM ໃນສະເພາະໃດຫນຶ່ງ
ເວທີ, ຂອບເຂດຕ່ໍາຂອງ 30% ຖືກນໍາໃຊ້. ການຕັ້ງຄ່າຕົວກໍານົດການນີ້ແລະ ggc-ນາທີ-
ຂະໜາດໃຫຍ່ ເຖິງສູນເຮັດໃຫ້ການເກັບລວບລວມເຕັມທີ່ເກີດຂື້ນໃນທຸກໆໂອກາດ. ນີ້​ແມ່ນ
ຊ້າທີ່ສຸດ, ແຕ່ສາມາດເປັນປະໂຫຍດສໍາລັບການ debugging.

ggc-min-heapsize
ຂະໜາດຕໍາ່ສຸດທີ່ກອງເກັບຂີ້ເຫຍື້ອກ່ອນທີ່ມັນຈະເລີ່ມລົບກວນການເກັບ
ຂີ້ເຫຍື້ອ. ການເກັບກໍາທໍາອິດເກີດຂຶ້ນຫຼັງຈາກ heap ຂະຫຍາຍໂດຍ ggc-min-expand%
ນອກເຫນືອໄປຈາກ ggc-min-heapsize. ອີກເທື່ອຫນຶ່ງ, ການປັບແຕ່ງນີ້ອາດຈະປັບປຸງຄວາມໄວການລວບລວມ, ແລະ
ບໍ່ມີຜົນຕໍ່ການສ້າງລະຫັດ.

ຄ່າເລີ່ມຕົ້ນແມ່ນນ້ອຍກວ່າຂອງ RAM/8, RLIMIT_RSS, ຫຼືຂອບເຂດຈໍາກັດທີ່ພະຍາຍາມຮັບປະກັນ.
ວ່າ RLIMIT_DATA ຫຼື RLIMIT_AS ແມ່ນບໍ່ເກີນ, ແຕ່ມີຂອບເຂດຕ່ໍາກວ່າ 4096.
(ສີ່ megabytes) ແລະຂອບເຂດເທິງຂອງ 131072 (128 megabytes). ຖ້າ GCC ບໍ່ສາມາດ
ເພື່ອຄິດໄລ່ RAM ໃນເວທີສະເພາະໃດຫນຶ່ງ, ຂອບເຂດຕ່ໍາແມ່ນຖືກນໍາໃຊ້. ການຕັ້ງຄ່ານີ້
ຕົວກໍານົດການຂະຫນາດໃຫຍ່ຫຼາຍປະສິດທິຜົນປິດການເກັບຂີ້ເຫຍື້ອ. ການຕັ້ງຄ່ານີ້
ພາລາມິເຕີແລະ ggc-min-expand ເຖິງສູນເຮັດໃຫ້ການເກັບລວບລວມເຕັມທີ່ເກີດຂື້ນໃນທຸກໆ
ໂອກາດ.

max-reload-search-insns
ຈໍານວນສູງສຸດຂອງການໂຫຼດຄໍາແນະນໍາຄືນໃຫມ່ຄວນຈະເບິ່ງກັບຄືນໄປບ່ອນສໍາລັບການທຽບເທົ່າ
ລົງທະບຽນ. ມູນຄ່າທີ່ເພີ່ມຂຶ້ນຫມາຍເຖິງການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍ, ເຮັດໃຫ້
ເວລາການລວບລວມເພີ່ມຂຶ້ນໂດຍມີການປະຕິບັດທີ່ດີກວ່າເລັກນ້ອຍ. ຄ່າເລີ່ມຕົ້ນ
ຄ່າແມ່ນ 100.

max-cselib-memory-locations
ຈໍານວນສູງສຸດຂອງສະຖານທີ່ຫນ່ວຍຄວາມຈໍາ cselib ຄວນຄໍານຶງເຖິງ.
ການເພີ່ມມູນຄ່າຫມາຍເຖິງການເພີ່ມປະສິດທິພາບທີ່ຮຸກຮານຫຼາຍ, ເຮັດໃຫ້ເວລາການລວບລວມ
ເພີ່ມ​ຂຶ້ນ​ໂດຍ​ອາດ​ຈະ​ເປັນ​ການ​ປະ​ຕິ​ບັດ​ທີ່​ດີກ​ວ່າ​ເລັກ​ນ້ອຍ​. ຄ່າເລີ່ມຕົ້ນແມ່ນ 500.

reorder-blocks-duplicate
reorder-blocks-duplicate-feedback
ໃຊ້ໂດຍຄໍາສັ່ງ reordering ຕັນພື້ນຖານເພື່ອຕັດສິນໃຈວ່າຈະໃຊ້ໂດຍບໍ່ມີເງື່ອນໄຂ
ສາຂາ ຫຼືສຳເນົາລະຫັດຢູ່ປາຍທາງຂອງມັນ. ລະຫັດຖືກຊ້ໍາກັນເມື່ອມັນ
ຂະ​ຫນາດ​ທີ່​ຄາດ​ຄະ​ເນ​ແມ່ນ​ຂະ​ຫນາດ​ນ້ອຍ​ກ​່​ວາ​ຄ່າ​ນີ້​ຄູນ​ດ້ວຍ​ຂະ​ຫນາດ​ການ​ຄາດ​ຄະ​ເນ​ຂອງ​
ໂດດໂດຍບໍ່ມີເງື່ອນໄຂໃນຈຸດຮ້ອນຂອງໂຄງການ.

ໄດ້ reorder-block-duplicate-feedback ພາລາມິເຕີຖືກນໍາໃຊ້ພຽງແຕ່ເມື່ອຄໍາຕິຊົມໂປຣໄຟລ໌
ສາມາດໃຊ້ໄດ້. ມັນອາດຈະຖືກຕັ້ງເປັນຄ່າສູງກວ່າ reorder-block-duplicate ນັບຕັ້ງແຕ່
ຂໍ້ມູນກ່ຽວກັບຈຸດຮ້ອນແມ່ນຖືກຕ້ອງກວ່າ.

max-sched-ready-insns
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ທີ່​ມີ​ຄວາມ​ພ້ອມ​ທີ່​ຈະ​ອອກ​ທີ່​ກໍາ​ນົດ​ເວ​ລາ​ຄວນ​
ພິ​ຈາ​ລະ​ນາ​ໃນ​ເວ​ລາ​ໃດ​ຫນຶ່ງ​ໃນ​ລະ​ຫວ່າງ​ການ​ກໍາ​ນົດ​ເວ​ລາ​ຄັ້ງ​ທໍາ​ອິດ​. ການເພີ່ມມູນຄ່າ
ຫມາຍຄວາມວ່າການຄົ້ນຫາຢ່າງລະອຽດຫຼາຍ, ເຮັດໃຫ້ເວລາລວບລວມເພີ່ມຂຶ້ນໂດຍອາດຈະ
ຜົນ​ປະ​ໂຫຍດ​ພຽງ​ເລັກ​ນ້ອຍ​. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100.

max-sched-region-blocks
ຈຳນວນທ່ອນໄມ້ສູງສຸດໃນພາກພື້ນທີ່ຈະຖືກພິຈາລະນາເປັນ interblock
ກຳນົດເວລາ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-pipeline-region-blocks
ຈໍາ ນວນ ສູງ ສຸດ ຂອງ ຕັນ ໃນ ພາກ ພື້ນ ທີ່ ຈະ ໄດ້ ຮັບ ການ ພິ ຈາ ລະ ນາ ສໍາ ລັບ ການ ທໍ່ ໃນ
ຕາຕະລາງເລືອກ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 15.

max-sched-region-insns
ຈຳນວນສູງສຸດຂອງ insns ໃນພາກພື້ນທີ່ຈະຖືກພິຈາລະນາສໍາລັບ interblock
ກຳນົດເວລາ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100.

max-pipeline-region-insns
ຈໍານວນສູງສຸດຂອງ insns ໃນພາກພື້ນທີ່ຈະໄດ້ຮັບການພິຈາລະນາສໍາລັບທໍ່ໃນ
ຕາຕະລາງເລືອກ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 200.

min-spec-prob
ຄວາມເປັນໄປໄດ້ຕໍ່າສຸດ (ເປັນເປີເຊັນ) ຂອງການເຂົ້າຫາແຫຼ່ງທີ່ມາຂອງບລັອກ interblock
ຕາຕະລາງການຄາດເດົາ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 40.

max-sched-extend-regions-iters
ຈຳນວນສູງສຸດຂອງການເຮັດຊ້ຳຜ່ານ CFG ເພື່ອຂະຫຍາຍພາກພື້ນ. ຄ່າຂອງ 0 (the
default) ປິດໃຊ້ງານການຂະຫຍາຍພາກພື້ນ.

max-sched-insn-conflict-delay
ຄວາມລ່າຊ້າຂອງຂໍ້ຂັດແຍ່ງສູງສຸດສໍາລັບ insn ທີ່ຈະພິຈາລະນາການເຄື່ອນໄຫວການຄາດເດົາ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 3.

sched-spec-prob-cutoff
ຄວາມເປັນໄປໄດ້ຫນ້ອຍທີ່ສຸດຂອງຄວາມສໍາເລັດຂອງການຄາດຄະເນ (ເປັນສ່ວນຮ້ອຍ), ດັ່ງນັ້ນການຄາດເດົາ
insns ຖືກກໍານົດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 40.

sched-spec-state-edge-prob-cutoff
ຄວາມເປັນໄປໄດ້ຕໍ່າສຸດທີ່ຂອບຕ້ອງມີສໍາລັບຕົວກໍານົດເວລາທີ່ຈະຊ່ວຍປະຢັດສະຖານະຂອງມັນ
ຂ້າມມັນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

sched-mem-true-dep-cost
ໄລຍະຫ່າງໜ້ອຍສຸດ (ໃນຮອບວຽນ CPU) ລະຫວ່າງຮ້ານ ແລະ ການໂຫຼດທີ່ຕັ້ງເປົ້າໝາຍໃສ່ໜ່ວຍຄວາມຈຳດຽວກັນ
ສະຖານທີ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1.

selsched-max-lookhead
ຂະໜາດສູງສຸດຂອງໜ້າຕ່າງໜ້າຕາຂອງການກຳນົດເວລາເລືອກ. ມັນເປັນຄວາມເລິກ
ຂອງ​ການ​ຊອກ​ຫາ​ຄໍາ​ແນະ​ນໍາ​ທີ່​ມີ​ຢູ່​. ຄ່າເລີ່ມຕົ້ນແມ່ນ 50.

selsched-max-sched-times
ຈຳນວນຄັ້ງສູງສຸດທີ່ກຳນົດເວລາຄຳແນະນຳໃນເວລາເລືອກ
ກຳນົດເວລາ. ນີ້ແມ່ນຂີດຈໍາກັດກ່ຽວກັບຈໍານວນການຊໍ້າຄືນທີ່ຜ່ານ
ຄໍາແນະນໍາອາດຈະຖືກທໍ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

selsched-max-insns-to-rename
ຈໍານວນສູງສຸດຂອງຄໍາແນະນໍາທີ່ດີທີ່ສຸດໃນບັນຊີລາຍຊື່ພ້ອມທີ່ຈະຖືກພິຈາລະນາສໍາລັບ
ການປ່ຽນຊື່ໃນຕາຕະລາງເລືອກ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

sms-min-sc
ຄ່າຕໍ່າສຸດຂອງການນັບຂັ້ນຕອນທີ່ຕົວກໍານົດເວລາ swing modulo ສ້າງ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

max-last-value-rtl
ຂະຫນາດສູງສຸດທີ່ວັດແທກເປັນຈໍານວນ RTL ທີ່ສາມາດຖືກບັນທຶກໄວ້ໃນການສະແດງຜົນ
ໃນຕົວຜະສົມຜະສານສໍາລັບການລົງທະບຽນ pseudo ເປັນມູນຄ່າທີ່ຮູ້ຈັກສຸດທ້າຍຂອງທະບຽນນັ້ນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 10000.

max-combine-insns
ຈໍານວນຄໍາແນະນໍາສູງສຸດທີ່ຜູ້ສົມທົບ RTL ພະຍາຍາມສົມທົບ. ຄ່າເລີ່ມຕົ້ນ
ຄ່າແມ່ນ 2 ຢູ່ທີ່ - ອຈ ແລະ 4 ຖ້າບໍ່ດັ່ງນັ້ນ.

integer-share-limit
ຈໍານວນຄົງທີ່ນ້ອຍສາມາດໃຊ້ໂຄງສ້າງຂໍ້ມູນຮ່ວມກັນ, ຫຼຸດຜ່ອນການລວບລວມຂໍ້ມູນ
ການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາແລະການເພີ່ມຄວາມໄວຂອງມັນ. ນີ້ກໍານົດຄ່າສູງສຸດຂອງການແບ່ງປັນ
ຈໍານວນຄົງທີ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 256.

ssp-buffer-size
ຂະໜາດຕໍາ່ສຸດຂອງ buffers (ie arrays) ທີ່ໄດ້ຮັບການປ້ອງກັນ stack smashing
ໃນເວລາທີ່ -fstack ການ​ປ້ອງ​ກັນ​ ຖືກນໍາໃຊ້.

ຄ່າເລີ່ມຕົ້ນນີ້ກ່ອນ Ubuntu 10.10 ແມ່ນ "8". ໃນປັດຈຸບັນມັນແມ່ນ "4", ເພື່ອເພີ່ມການ
ຈໍານວນຂອງຫນ້າທີ່ປ້ອງກັນໂດຍຕົວປ້ອງກັນ stack.

min-size-for-stack-sharing
ຂະຫນາດຕໍາ່ສຸດທີ່ຂອງຕົວແປທີ່ມີສ່ວນຮ່ວມໃນການແບ່ງປັນ stack slot ໃນເວລາທີ່ບໍ່ມີ
ການເພີ່ມປະສິດທິພາບ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 32.

max-jump-thread-duplication-stmts
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ຖະ​ແຫຼງ​ການ​ອະ​ນຸ​ຍາດ​ໃຫ້​ຢູ່​ໃນ block ທີ່​ຈໍາ​ເປັນ​ຕ້ອງ​ໄດ້​ຮັບ​ການ​ຊ​້​ໍາ​ກັນ​ໃນ​ເວ​ລາ​ທີ່
ກະທູ້ກະໂດດ.

max-fields-for-field-sensitive
ຈຳນວນຊ່ອງຂໍ້ມູນສູງສຸດໃນໂຄງສ້າງທີ່ໄດ້ຮັບການປິ່ນປົວໃນລັກສະນະທີ່ລະອຽດອ່ອນຂອງຊ່ອງຂໍ້ມູນໃນລະຫວ່າງ
ການວິເຄາະຕົວຊີ້. ຄ່າເລີ່ມຕົ້ນແມ່ນສູນສຳລັບ -O0 ແລະ -O1, ແລະ 100 ສຳ ລັບ -ອສ, -O2, ແລະ
-O3.

prefetch-latency
ຄາດຄະເນກ່ຽວກັບຈໍານວນຄໍາແນະນໍາໂດຍສະເລ່ຍທີ່ດໍາເນີນການກ່ອນທີ່ຈະ prefetch
ສໍາເລັດ. ໄລຍະທາງທີ່ເອົາໄວ້ລ່ວງໜ້າແມ່ນອັດຕາສ່ວນກັບຄ່າຄົງທີ່ນີ້.
ການເພີ່ມຈໍານວນນີ້ອາດຈະເຮັດໃຫ້ການຖ່າຍທອດຫນ້ອຍລົງກ່ອນ (ເບິ່ງ
ພ້ອມໆກັນ-prefetches).

ພ້ອມໆກັນ-prefetches
ຈໍານວນສູງສຸດຂອງ prefetches ທີ່ສາມາດດໍາເນີນການໄດ້ໃນເວລາດຽວກັນ.

l1-cache-line-size
ຂະຫນາດຂອງ cache line ໃນ L1 cache, ໃນ bytes.

l1-cache-size
ຂະຫນາດຂອງ L1 cache, ໃນກິໂລໄບ.

l2-cache-size
ຂະຫນາດຂອງ L2 cache, ໃນກິໂລໄບ.

min-insn-to-prefetch-ratio
ອັດຕາສ່ວນຕໍາ່ສຸດທີ່ລະຫວ່າງຈໍານວນຂອງຄໍາແນະນໍາແລະຈໍານວນຂອງ prefetches
ເພື່ອໃຫ້ສາມາດ prefetching ໃນ loop ໄດ້.

prefetch-min-insn-to-mem-ອັດຕາສ່ວນ
ອັດຕາສ່ວນຕໍາ່ສຸດທີ່ລະຫວ່າງຈໍານວນຂອງຄໍາແນະນໍາແລະຈໍານວນຂອງຫນ່ວຍຄວາມຈໍາ
ການອ້າງອິງເພື່ອເປີດໃຊ້ການດຶງຂໍ້ມູນລ່ວງໜ້າໃນ loop.

use-canonical-types
ບໍ່ວ່າຈະເປັນ compiler ຄວນໃຊ້ລະບົບປະເພດ "canonical". ໂດຍຄ່າເລີ່ມຕົ້ນ, ນີ້
ຄວນເປັນ 1 ສະເໝີ, ເຊິ່ງໃຊ້ກົນໄກພາຍໃນທີ່ມີປະສິດທິພາບກວ່າໃນການປຽບທຽບ
ປະເພດໃນ C++ ແລະ Objective-C++. ຢ່າງໃດກໍຕາມ, ຖ້າແມງໄມ້ໃນລະບົບປະເພດ canonical ແມ່ນ
ເຮັດໃຫ້ເກີດຄວາມລົ້ມເຫລວໃນການລວບລວມ, ຕັ້ງຄ່ານີ້ເປັນ 0 ເພື່ອປິດການໃຊ້ງານປະເພດ canonical.

switch-conversion-max-branch-ratio
ການປ່ຽນເບື້ອງຕົ້ນຂອງ Switch ປະຕິເສດການສ້າງອາເຣທີ່ໃຫຍ່ກວ່າ
switch-conversion-max-branch-ratio ເທົ່າຂອງຈໍານວນສາຂາໃນສະຫຼັບ.

max-partial-antic-length
ຄວາມຍາວສູງສຸດຂອງຊຸດເກົ່າແກ່ບາງສ່ວນທີ່ຄິດໄລ່ໃນລະຫວ່າງຕົ້ນໄມ້ບາງສ່ວນ
ການເພີ່ມປະສິດທິພາບການລົບລ້າງການຊໍ້າຊ້ອນ (-ftre-pre) ເມື່ອ optimizing ຢູ່ -O3 ແລະຂ້າງເທິງ.
ສໍາລັບບາງປະເພດຂອງລະຫັດແຫຼ່ງ, ການປັບປຸງການລົບລ້າງການຊ້ໍາຊ້ອນບາງສ່ວນ
ການເພີ່ມປະສິດທິພາບສາມາດແລ່ນຫນີໄດ້, ການໃຊ້ຫນ່ວຍຄວາມຈໍາທັງຫມົດທີ່ມີຢູ່ໃນເຈົ້າພາບ
ເຄື່ອງ. ພາລາມິເຕີນີ້ກໍານົດຂອບເຂດຈໍາກັດກ່ຽວກັບຄວາມຍາວຂອງຊຸດທີ່ຖືກຄິດໄລ່,
ເຊິ່ງປ້ອງກັນພຶດຕິກຳການໜີ. ກໍານົດຄ່າຂອງ 0 ສໍາລັບພາລາມິເຕີນີ້
ອະນຸຍາດໃຫ້ມີຄວາມຍາວທີ່ກໍານົດໄວ້ບໍ່ຈໍາກັດ.

sccvn-max-scc-size
ຂະໜາດສູງສຸດຂອງອົງປະກອບເຊື່ອມຕໍ່ທີ່ເຂັ້ມແຂງ (SCC) ໃນລະຫວ່າງການປະມວນຜົນ SCCVN. ຖ້າ
ຂອບເຂດຈໍາກັດນີ້ຖືກຕີ, ການປຸງແຕ່ງ SCCVN ສໍາລັບຫນ້າທີ່ທັງຫມົດແມ່ນບໍ່ໄດ້ເຮັດແລະ
ການເພີ່ມປະສິດທິພາບຂຶ້ນຢູ່ກັບມັນຖືກປິດໃຊ້ງານ. ຂະໜາດ SCC ສູງສຸດເລີ່ມຕົ້ນແມ່ນ
10000​.

sccvn-max-alias-queries-per-access
ຈໍານວນການສອບຖາມ alias-oracle ສູງສຸດທີ່ພວກເຮົາປະຕິບັດໃນເວລາທີ່ຊອກຫາການຊໍ້າຊ້ອນ
ສໍາລັບການໂຫຼດແລະຮ້ານຄ້າ. ຖ້າ​ຫາກ​ວ່າ​ຂໍ້​ຈໍາ​ກັດ​ນີ້​ແມ່ນ​ມົນ​ຕີ​ການ​ຊອກ​ຫາ​ໄດ້​ຖືກ​ຍົກ​ເລີກ​ແລະ​ການ​ໂຫຼດ​ຫຼື​
ຮ້ານຄ້າບໍ່ໄດ້ຖືກພິຈາລະນາຊໍ້າຊ້ອນ. ຈໍານວນຂອງການສອບຖາມແມ່ນ algorithm
ຈໍາ​ກັດ​ຈໍາ​ນວນ​ຂອງ​ຮ້ານ​ຢູ່​ໃນ​ເສັ້ນ​ທາງ​ທັງ​ຫມົດ​ຈາກ​ການ​ໂຫຼດ​ທີ່​ຈະ​ເຂົ້າ​ຫນ້າ​ທີ່​.
ຈໍານວນການສອບຖາມສູງສຸດໃນຕອນຕົ້ນແມ່ນ 1000.

ira-max-loops-num
IRA ໃຊ້ການຈັດສັນການລົງທະບຽນພາກພື້ນຕາມຄ່າເລີ່ມຕົ້ນ. ຖ້າຟັງຊັນມີຫຼາຍກວ່ານັ້ນ
loops ຫຼາຍກວ່າຕົວເລກທີ່ໃຫ້ໂດຍພາລາມິເຕີນີ້, ພຽງແຕ່ຢູ່ໃນຈໍານວນຫຼາຍທີ່ສຸດຂອງ
loops ທີ່ຖືກປະຕິບັດຫຼາຍທີ່ສຸດເປັນພາກພື້ນສໍາລັບການຈັດສັນການລົງທະບຽນພາກພື້ນ.
ຄ່າເລີ່ມຕົ້ນຂອງພາລາມິເຕີແມ່ນ 100.

ira-max-conflict-table-size
ເຖິງແມ່ນວ່າ IRA ໃຊ້ algorithm ທີ່ຊັບຊ້ອນເພື່ອບີບອັດຕາຕະລາງການຂັດແຍ້ງ,
ຕາຕະລາງຍັງສາມາດຕ້ອງການຄວາມຊົງຈໍາຫຼາຍເກີນໄປສໍາລັບຫນ້າທີ່ຂະຫນາດໃຫຍ່. ຖ້າ
ຕາຕະລາງຂໍ້ຂັດແຍ່ງສໍາລັບຟັງຊັນອາດຈະຫຼາຍກວ່າຂະຫນາດໃນ MB ທີ່ມອບໃຫ້ໂດຍນີ້
ພາລາມິເຕີ, ຜູ້ຈັດສັນທະບຽນແທນທີ່ຈະໃຊ້ໄວກວ່າ, ງ່າຍດາຍ, ແລະຕ່ໍາກວ່າ.
ສູດການຄິດໄລ່ຄຸນນະພາບທີ່ບໍ່ຮຽກຮ້ອງໃຫ້ມີການສ້າງຕາຕະລາງຂໍ້ຂັດແຍ່ງ pseudo-register.
ຄ່າເລີ່ມຕົ້ນຂອງພາລາມິເຕີແມ່ນ 2000.

ira-loop-reserved-regs
IRA ສາມາດຖືກນໍາໃຊ້ເພື່ອປະເມີນຄວາມກົດດັນການລົງທະບຽນທີ່ຖືກຕ້ອງຫຼາຍຂຶ້ນໃນ loops ສໍາລັບການຕັດສິນໃຈ
ເພື່ອຍ້າຍ loop invariant (ເບິ່ງ -O3). ຈໍານວນການລົງທະບຽນທີ່ມີສະຫງວນໄວ້ສໍາລັບ
ບາງຈຸດປະສົງອື່ນແມ່ນໃຫ້ໂດຍພາລາມິເຕີນີ້. ຄ່າເລີ່ມຕົ້ນຂອງ
ພາລາມິເຕີແມ່ນ 2, ເຊິ່ງເປັນຈໍານວນການລົງທະບຽນຫນ້ອຍທີ່ສຸດທີ່ຕ້ອງການໂດຍປົກກະຕິ
ຄໍາແນະນໍາ. ມູນຄ່ານີ້ແມ່ນດີທີ່ສຸດທີ່ພົບເຫັນຈາກການທົດລອງຈໍານວນຫລາຍ.

lra-inheritance-ebb-probability-cutoff
LRA ພະຍາຍາມໃຊ້ຄືນຄ່າທີ່ໂຫຼດຄືນໃໝ່ຢູ່ໃນທະບຽນໃນ insns ຕໍ່ມາ. ນີ້
ການເພີ່ມປະສິດທິພາບແມ່ນເອີ້ນວ່າມໍລະດົກ. EBB ຖືກນໍາໃຊ້ເປັນພາກພື້ນເພື່ອເຮັດສິ່ງນີ້
ການເພີ່ມປະສິດທິພາບ. ພາຣາມິເຕີກຳນົດຄວາມເປັນໄປໄດ້ໜ້ອຍສຸດຂອງການຕົກຜ່ານຂອບໃນ
ເປີເຊັນທີ່ໃຊ້ເພື່ອເພີ່ມ BB ເຂົ້າໃນການສືບທອດ EBB ໃນ LRA. ຄ່າເລີ່ມຕົ້ນຂອງ
ພາຣາມິເຕີແມ່ນ 40. ຄ່າໄດ້ຖືກເລືອກຈາກການແລ່ນຈໍານວນຫລາຍຂອງ SPEC2000 ໃນ x86-64.

loop-invariant-max-bbs-in-loop
Loop invariant motion ສາມາດມີລາຄາແພງຫຼາຍ, ທັງໃນເວລາລວບລວມແລະໃນ
ຈໍາ​ນວນ​ຂອງ​ຄວາມ​ຈໍາ​ທີ່​ຈໍາ​ເປັນ​ໃນ​ການ​ສັງ​ລວມ​ເວ​ລາ​, ມີ loops ຂະ​ຫນາດ​ໃຫຍ່​ຫຼາຍ​. Loops ກັບຫຼາຍ
ຕັນພື້ນຖານກ່ວາພາລາມິເຕີນີ້ຈະບໍ່ມີການເພີ່ມປະສິດທິພາບການເຄື່ອນໄຫວແບບ loop invariant
ປະຕິບັດໃຫ້ເຂົາເຈົ້າ. ຄ່າເລີ່ມຕົ້ນຂອງພາລາມິເຕີແມ່ນ 1000 ສໍາລັບ -O1 ແລະ 10000
ສໍາລັບການ -O2 ແລະຂ້າງເທິງ.

loop-max-datarefs-for-datadeps
ການສ້າງ dapendencies ຂໍ້ມູນແມ່ນລາຄາແພງສໍາລັບ loops ຂະຫນາດໃຫຍ່ຫຼາຍ. ພາລາມິເຕີນີ້
ຈໍາກັດຈໍານວນການອ້າງອິງຂໍ້ມູນໃນ loops ທີ່ຖືກພິຈາລະນາສໍາລັບຂໍ້ມູນ
ການວິເຄາະເອື່ອຍອີງ. loops ຂະຫນາດໃຫຍ່ເຫຼົ່ານີ້ແມ່ນບໍ່ມີການຈັດການໂດຍການເພີ່ມປະສິດທິພາບການນໍາໃຊ້
ການຂື້ນກັບຂໍ້ມູນ loop. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1000.

max-vartrack-size
ກໍານົດຈໍານວນສູງສຸດຂອງຊ່ອງຕາຕະລາງ hash ເພື່ອໃຊ້ໃນລະຫວ່າງການຕິດຕາມຂໍ້ມູນການປ່ຽນແປງ
ການ​ວິ​ເຄາະ​ຫນ້າ​ທີ່​ໃດ​ຫນຶ່ງ​. ຖ້າ​ຫາກ​ວ່າ​ຈໍາ​ກັດ​ນີ້​ແມ່ນ​ເກີນ​ທີ່​ມີ​ການ​ຕິດ​ຕາມ​ຕົວ​ປ່ຽນ​ແປງ​ທີ່​
ການມອບຫມາຍຖືກເປີດໃຊ້ງານ, ການວິເຄາະສໍາລັບຟັງຊັນນັ້ນຖືກລອງໃຫມ່ໂດຍບໍ່ມີມັນ, ຫຼັງຈາກ
ການເອົາ inss ດີບັກທັງໝົດອອກຈາກຟັງຊັນ. ຖ້າເກີນຂອບເຂດຈໍາກັດເຖິງແມ່ນວ່າບໍ່ມີ
debug insns, ການວິເຄາະການຕິດຕາມ var ແມ່ນຖືກປິດໃຊ້ງານຢ່າງສົມບູນສໍາລັບຟັງຊັນ.
ການຕັ້ງຄ່າພາລາມິເຕີເປັນສູນເຮັດໃຫ້ມັນບໍ່ຈໍາກັດ.

max-vartrack-expr-depth
ກໍານົດຈໍານວນສູງສຸດຂອງລະດັບ recursion ໃນເວລາທີ່ພະຍາຍາມແຜນທີ່ຊື່ຕົວແປຫຼື
debug temporaries ກັບການສະແດງຄຸນຄ່າ. ນີ້ໃຊ້ເວລາການລວບລວມການຄ້າສໍາລັບການເພີ່ມເຕີມ
ຂໍ້ມູນດີບັກຄົບຖ້ວນ. ຖ້າອັນນີ້ຖືກຕັ້ງໄວ້ຕໍ່າເກີນໄປ, ຄ່າທີ່ສະແດງອອກແມ່ນ
ມີຢູ່ແລະສາມາດເປັນຕົວແທນໃນຂໍ້ມູນ debug ອາດຈະບໍ່ຖືກນໍາໃຊ້;
ການຕັ້ງຄ່າທີ່ສູງກວ່ານີ້ອາດຈະເຮັດໃຫ້ compiler ຊອກຫາການດີບັກທີ່ສັບສົນຫຼາຍ
ການສະແດງອອກ, ແຕ່ການລວບລວມເວລາແລະຄວາມຊົງຈໍາອາດຈະເຕີບໂຕ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 12.

min-nondebug-insn-uid
ໃຊ້ uids ເລີ່ມຕົ້ນທີ່ພາລາມິເຕີນີ້ສໍາລັບ insns nondebug. ຂອບເຂດຂ້າງລຸ່ມນີ້
ພາລາມິເຕີແມ່ນສະຫງວນໄວ້ສະເພາະສໍາລັບ debug insns ສ້າງໂດຍ
-fvar-tracking-assignments, ແຕ່ debug insns ອາດຈະໄດ້ຮັບ (ບໍ່ທັບຊ້ອນກັນ) uids ຂ້າງເທິງ
ມັນຖ້າຂອບເຂດທີ່ສະຫງວນໄວ້ຫມົດແລ້ວ.

ipa-sra-ptr-growth-factor
IPA-SRA ແທນທີ່ຕົວຊີ້ໄປຫາການລວບລວມດ້ວຍຕົວກໍານົດການໃຫມ່ຫນຶ່ງຫຼືຫຼາຍເທົ່ານັ້ນ
ເມື່ອຂະໜາດສະສົມຂອງພວກມັນໜ້ອຍກວ່າ ຫຼືເທົ່າກັບ ipa-sra-ptr-growth-factor ເວລາ
ຂະໜາດຂອງຕົວຊີ້ຕົ້ນສະບັບ.

sra-max-scalarization-size-Ospeed
sra-max-scalarization-size-Osize
ທັງສອງ Scalar Reduction of Aggregates passes (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
ເພື່ອຫຼີກເວັ້ນການຜົນກະທົບ exponential ໃນວົງ Graphite transforms, ຈໍານວນຂອງ
ພາລາມິເຕີໃນສ່ວນຄວບຄຸມຄົງທີ່ (SCoP) ຖືກຜູກມັດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10
ຕົວກໍານົດການ. ຕົວແປທີ່ບໍ່ຮູ້ຄ່າໃນເວລາລວບລວມ ແລະກຳນົດ
ນອກ SCoP ແມ່ນຕົວກໍານົດການຂອງ SCoP.

graphite-max-bbs-per-function
ເພື່ອຫຼີກເວັ້ນການຜົນກະທົບ exponential ໃນການກວດຫາ SCoPs, ຂະຫນາດຂອງຫນ້າທີ່
ການວິເຄາະໂດຍ Graphite ແມ່ນ bounded. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100 ຕັນພື້ນຖານ.

loop-block-tile-size
Loop blocking ຫຼື strip mining transforms, ເປີດໃຊ້ງານດ້ວຍ -floop-block or
-floop-strip-mine, strip mine ແຕ່ລະ loop ໃນ loop ຮັງໂດຍຈໍານວນຂອງ
ຊ້ຳ. ຄວາມຍາວຂອງແຖບສາມາດປ່ຽນແປງໄດ້ໂດຍໃຊ້ loop-block-tile-size
ພາລາມິເຕີ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 51 ຊ້ຳ.

loop-unroll-jam-size
ລະບຸປັດໄຈ unroll ສໍາລັບ -floop-unroll-and- jam ທາງເລືອກ. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ 4.

loop-unroll-jam-depth
ກໍານົດຂະຫນາດທີ່ຈະ unrolled (ນັບຈາກ loop ພາຍໃນທີ່ສຸດ) ສໍາລັບ
-floop-unroll-and- jam. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

ipa-cp-value-list-size
IPA-CP ພະຍາຍາມຕິດຕາມຄ່າທີ່ເປັນໄປໄດ້ທັງໝົດ ແລະປະເພດທີ່ສົ່ງໄປຫາຟັງຊັນໃດໜຶ່ງ
ຕົວກໍານົດການເພື່ອຂະຫຍາຍພວກມັນແລະປະຕິບັດ devirtualization. ipa-cp-value-
ຂະຫນາດລາຍການ ແມ່ນຈໍານວນສູງສຸດຂອງຄ່າແລະປະເພດທີ່ມັນເກັບຮັກສາຕໍ່ຫນຶ່ງຢ່າງເປັນທາງການ
ພາລາມິເຕີຂອງຟັງຊັນ.

ipa-cp-eval-threshold
IPA-CP ຄິດໄລ່ຄະແນນຂອງຕົນເອງຂອງ cloning heuristics ກໍາໄລແລະປະຕິບັດ
ໂອກາດ cloning ທີ່ມີຄະແນນເກີນ ipa-cp-eval-threshold.

ipa-cp-recursion-ການລົງໂທດ
ການລົງໂທດເປີເຊັນທີ່ຫນ້າທີ່ recursive ຈະໄດ້ຮັບເມື່ອພວກເຂົາຖືກປະເມີນ
ສໍາລັບ cloning.

ipa-cp-single-call-ລົງໂທດ
ຟັງຊັນການລົງໂທດເປີເຊັນປະກອບດ້ວຍການໂທດຽວໄປຫາຟັງຊັນອື່ນຈະ
ໄດ້ຮັບໃນເວລາທີ່ເຂົາເຈົ້າໄດ້ຖືກປະເມີນສໍາລັບການ cloning.

ipa-max-agg-ລາຍການ
IPA-CP ຍັງສາມາດຂະຫຍາຍພັນທຸກໍາຂອງຄ່າ scalar ທີ່ຜ່ານໃນ
ລວມ. ipa-max-agg-ລາຍການ ຄວບຄຸມຈໍານວນສູງສຸດຂອງຄ່າດັ່ງກ່າວຕໍ່ຫນຶ່ງ
ພາລາມິເຕີ.

ipa-cp-loop-hint-bonus
ເມື່ອ IPA-CP ກໍານົດວ່າຜູ້ສະຫມັກ cloning ຈະເຮັດໃຫ້ຈໍານວນ
iterations ຂອງ loop ເປັນທີ່ຮູ້ຈັກ, ມັນເພີ່ມໂບນັດຂອງ ipa-cp-loop-hint-bonus ການ
ຄະແນນຜົນກຳໄລຂອງຜູ້ສະໝັກ.

ipa-cp-array-index-hint-bonus
ເມື່ອ IPA-CP ກໍານົດວ່າຜູ້ສະຫມັກ cloning ຈະເຮັດໃຫ້ດັດສະນີຂອງອາເຣ
ການເຂົ້າເຖິງທີ່ຮູ້ຈັກ, ມັນເພີ່ມໂບນັດຂອງ ipa-cp-array-index-hint-bonus ການ
ຄະແນນຜົນກຳໄລຂອງຜູ້ສະໝັກ.

ipa-max-aa-ຂັ້ນຕອນ
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ຂອງ​ອົງ​ການ​ທໍາ​ງານ​ຂອງ​ຕົນ​, IPA-CP ຈ້າງ​ງານ​ການ​ວິ​ເຄາະ​ນາມ​ແຝງ​ເພື່ອ​
ຕິດຕາມຄ່າທີ່ຊີ້ໄປໂດຍພາລາມິເຕີຟັງຊັນ. ເພື່ອບໍ່ໃຫ້ໃຊ້ເວລາຫຼາຍເກີນໄປ
ການ​ວິ​ເຄາະ​ຫນ້າ​ທີ່​ຂະ​ຫນາດ​ໃຫຍ່​, ມັນ​ເຮັດ​ໃຫ້​ເຖິງ​ແລະ​ພິ​ຈາ​ລະ​ນາ​ຄວາມ​ຊົງ​ຈໍາ​ທັງ​ຫມົດ clobbered ຫຼັງ​ຈາກ​
ການກວດສອບ ipa-max-aa-ຂັ້ນຕອນ ຂໍ້ຄວາມແກ້ໄຂຄວາມຊົງຈໍາ.

lto-partitions
ລະບຸຈໍານວນພາທິຊັນທີ່ຕ້ອງການທີ່ຜະລິດໃນລະຫວ່າງການລວບລວມ WHOPR. ໄດ້
ຈໍານວນຂອງການແບ່ງສ່ວນຄວນເກີນຈໍານວນ CPU ທີ່ໃຊ້ສໍາລັບການລວບລວມ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 32.

lto-minpartition
ຂະໜາດຂອງການແບ່ງປັນໜ້ອຍທີ່ສຸດສຳລັບ WHOPR (ຕາມຄຳແນະນຳທີ່ຄາດຄະເນ). ນີ້ປ້ອງກັນ
ຄ່າ​ໃຊ້​ຈ່າຍ​ຂອງ​ການ​ແຍກ​ໂຄງ​ການ​ຂະ​ຫນາດ​ນ້ອຍ​ຫຼາຍ​ເຂົ້າ​ໄປ​ໃນ​ການ​ແບ່ງ​ປັນ​ຫຼາຍ​ເກີນ​ໄປ​.

cxx-max-namespaces-for-diagnostic-help
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ namespaces ທີ່​ຈະ​ປຶກ​ສາ​ຫາ​ລື​ສໍາ​ລັບ​ຄໍາ​ແນະ​ນໍາ​ໃນ​ເວ​ລາ​ທີ່​ການ​ຊອກ​ຫາ​ຊື່ C++​
ລົ້ມເຫລວສໍາລັບຕົວລະບຸ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 1000.

sink-frequency-threshold
ຄວາມຖີ່ຂອງການປະຕິບັດສູງສຸດທີ່ກ່ຽວຂ້ອງ (ເປັນເປີເຊັນ) ຂອງຕັນເປົ້າຫມາຍ
ປຽບທຽບກັບຕັນຕົ້ນສະບັບຂອງຄໍາຖະແຫຼງທີ່ຈະອະນຸຍາດໃຫ້ຄໍາຖະແຫຼງທີ່ຈົມລົງຂອງ a
ຖະແຫຼງການ. ຕົວເລກທີ່ໃຫຍ່ກວ່າສົ່ງຜົນໃຫ້ຄໍາຖະແຫຼງທີ່ຮຸກຮານຫຼາຍຂື້ນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 75. ການປັບຄ່າທາງບວກເລັກນ້ອຍແມ່ນໃຊ້ສໍາລັບຄໍາຖະແຫຼງທີ່ມີ
ປະຕິບັດການຫນ່ວຍຄວາມຈໍາຍ້ອນວ່າເຫຼົ່ານັ້ນແມ່ນມີກໍາໄລຫຼາຍດັ່ງນັ້ນຈົມລົງ.

max-stores-to-sink
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄູ່​ຮ້ານ​ທີ່​ມີ​ເງື່ອນ​ໄຂ​ທີ່​ສາ​ມາດ​ຖືກ sunk​. ຕັ້ງເປັນ 0 ຖ້າ
ທັງ vectorization (-ftree-vectorize) ຫຼື if-conversion (-ftree-loop-if-convert)
ຖືກປິດໃຊ້ງານ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 2.

ອະນຸຍາດໃຫ້ເກັບຮັກສາຂໍ້ມູນ-ເຊື້ອຊາດ
ອະນຸຍາດໃຫ້ຜູ້ເພີ່ມປະສິດທິພາບແນະນໍາການແຂ່ງຂັນຂໍ້ມູນໃຫມ່ໃນຮ້ານຄ້າ. ກໍານົດເປັນ 1 ເພື່ອອະນຸຍາດໃຫ້,
ຖ້າບໍ່ດັ່ງນັ້ນ 0. ຕົວເລືອກນີ້ຈະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນໃນລະດັບການເພີ່ມປະສິດທິພາບ - ໄວ.

case-values-threshold
ຈໍານວນນ້ອຍທີ່ສຸດຂອງຄ່າທີ່ແຕກຕ່າງກັນສໍາລັບການທີ່ດີທີ່ສຸດທີ່ຈະໃຊ້ຕາຕະລາງໂດດ
ແທນທີ່ຈະເປັນຕົ້ນໄມ້ຂອງສາຂາທີ່ມີເງື່ອນໄຂ. ຖ້າຄ່າແມ່ນ 0, ໃຊ້ຄ່າເລີ່ມຕົ້ນສໍາລັບ
ເຄື່ອງ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 0.

tree-reassoc-width
ກໍານົດຈໍານວນສູງສຸດຂອງຄໍາແນະນໍາທີ່ປະຕິບັດໃນຂະຫນານໃນຕົ້ນໄມ້ reassociated.
ພາຣາມິເຕີນີ້ overrides heuristics ຂຶ້ນກັບເປົ້າຫມາຍທີ່ໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າຫາກວ່າບໍ່ມີ
ຄ່າສູນ.

sched-pressure-algorithm
ເລືອກລະຫວ່າງສອງການປະຕິບັດທີ່ມີຢູ່ຂອງ -fsched-ຄວາມກົດດັນ. ສູດການຄິດໄລ່ 1
ແມ່ນການປະຕິບັດຕົ້ນສະບັບແລະເປັນແນວໂນ້ມທີ່ຈະປ້ອງກັນບໍ່ໃຫ້ຄໍາແນະນໍາຈາກ
ຖືກສັ່ງຄືນ. Algorithm 2 ໄດ້ຖືກອອກແບບເພື່ອເປັນການປະນີປະນອມລະຫວ່າງ
ວິທີການອະນຸລັກທີ່ຂ້ອນຂ້າງປະຕິບັດໂດຍ algorithm 1 ແລະຂ້ອນຂ້າງຮຸກຮານ
ວິທີການປະຕິບັດໂດຍຕົວກໍານົດເວລາເລີ່ມຕົ້ນ. ມັນຂື້ນກັບຫຼາຍຂື້ນກັບການມີ
ເອກະສານລົງທະບຽນປົກກະຕິແລະຫ້ອງຮຽນຄວາມກົດດັນລົງທະບຽນທີ່ຖືກຕ້ອງ. ເບິ່ງ haifa-sched.c
ໃນແຫຼ່ງ GCC ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.

ທາງເລືອກເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບເປົ້າຫມາຍ.

max-slsr-cand-scan
ກໍານົດຈໍານວນສູງສຸດຂອງຜູ້ສະຫມັກທີ່ມີຢູ່ແລ້ວທີ່ພິຈາລະນາໃນເວລາທີ່ຊອກຫາ a
ພື້ນຖານສໍາລັບຜູ້ສະຫມັກການຫຼຸດຜ່ອນຄວາມເຂັ້ມແຂງເສັ້ນຊື່ໃຫມ່.

asan-ທົ່ວໂລກ
ເປີດໃຊ້ການກວດສອບການລົ້ນບັບເຟີສຳລັບວັດຖຸທົ່ວໂລກ. ປະເພດຂອງການປົກປ້ອງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຖ້າທ່ານໃຊ້ -fsanitize=ທີ່ຢູ່ ທາງເລືອກ. ເພື່ອປິດການໃຊ້ງານທົ່ວໂລກ
ການນໍາໃຊ້ການປົກປ້ອງວັດຖຸ --param asan-globals=0.

asan-stack
ເປີດໃຊ້ການກວດສອບການລົ້ນບັບເຟີສໍາລັບວັດຖຸ stack. ປະເພດຂອງການປົກປ້ອງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້-fsanitize=ທີ່ຢູ່. ເພື່ອປິດການໃຊ້ການປ້ອງກັນ stack
--param asan-stack=0 ທາງເລືອກ.

asan-instrument-reads
ເປີດໃຊ້ການກວດສອບການລົ້ນບັບເຟີສຳລັບການອ່ານໜ່ວຍຄວາມຈຳ. ປະເພດຂອງການປົກປ້ອງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້ -fsanitize=ທີ່ຢູ່. ເພື່ອປິດການອ່ານຫນ່ວຍຄວາມຈໍາ
ການ​ນໍາ​ໃຊ້​ປົກ​ປັກ​ຮັກ​ສາ​ --param asan-instrument-reads=0.

asan-instrument-writes
ເປີດໃຊ້ການກວດສອບການລົ້ນບັບເຟີສໍາລັບການຂຽນຫນ່ວຍຄວາມຈໍາ. ປະເພດຂອງການປົກປ້ອງນີ້ແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້ -fsanitize=ທີ່ຢູ່. ເພື່ອປິດການທໍາງານຂອງຫນ່ວຍຄວາມຈໍາ
ການ​ນໍາ​ໃຊ້​ປົກ​ປັກ​ຮັກ​ສາ​ --param asan-instrument-writes=0 ທາງເລືອກ.

asan-memintrin
ເປີດໃຊ້ການກວດຫາຟັງຊັນໃນຕົວ. ປະເພດຂອງການປົກປ້ອງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້ -fsanitize=ທີ່ຢູ່. ເພື່ອປິດການທໍາງານການປ້ອງກັນໃນຕົວ
ການນໍາໃຊ້ --param asan-memintrin=0.

asan-use-after-return
ເປີດໃຊ້ການກວດຫາການໃຊ້ຫຼັງການກັບຄືນມາ. ປະເພດຂອງການປົກປ້ອງນີ້ຖືກເປີດໃຊ້ໂດຍ
ຄ່າເລີ່ມຕົ້ນເມື່ອໃຊ້ -fsanitize=ທີ່ຢູ່ ທາງເລືອກ. ເພື່ອປິດການນຳໃຊ້ຫຼັງການສົ່ງຄືນ
ການ​ນໍາ​ໃຊ້​ການ​ກວດ​ສອບ​ --param asan-use-after-return=0.

asan-instrumentation-with-call-threshold
ຖ້າ​ຫາກ​ວ່າ​ຈໍາ​ນວນ​ຂອງ​ການ​ເຂົ້າ​ເຖິງ​ຫນ່ວຍ​ຄວາມ​ຈໍາ​ໃນ​ການ​ທໍາ​ງານ​ທີ່​ຖືກ​ນໍາ​ໃຊ້​ແມ່ນ​ຫຼາຍ​ກວ່າ​ຫຼື​ເທົ່າ​ທຽມ​ກັບ​
ເບີໂທນີ້, ໃຊ້ການໂທກັບແທນການກວດກາໃນແຖວ. ເຊັ່ນ: ປິດການໃຊ້ງານລະຫັດ inline
ການນໍາໃຊ້ --param asan-instrumentation-with-call-threshold=0.

chkp-max-ctor-size
ໂຄງສ້າງຄົງທີ່ທີ່ສ້າງຂຶ້ນໂດຍ Pointer Bounds Checker ອາດຈະກາຍເປັນຂະຫນາດໃຫຍ່ຫຼາຍແລະ
ເພີ່ມທະວີການລວບລວມເວລາຢ່າງຫຼວງຫຼາຍໃນລະດັບການເພີ່ມປະສິດທິພາບ -O1 ແລະສູງກວ່າ. ນີ້
ພາລາມິເຕີແມ່ນ nubmer ສູງສຸດຂອງຖະແຫຼງການໃນຕົວສ້າງທີ່ສ້າງຂຶ້ນດຽວ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 5000.

max-fsm-thread-path-insns
ຈໍາ​ນວນ​ສູງ​ສຸດ​ຂອງ​ຄໍາ​ແນະ​ນໍາ​ທີ່​ຈະ​ສໍາ​ເນົາ​ໃນ​ເວ​ລາ​ທີ່​ການ​ຊ​້​ໍາ​ກັນ blocks ໃນ​ສະ​ຖາ​ນະ​ການ​ຈໍາ​ກັດ​
ເສັ້ນທາງກະທູ້ກະໂດດອັດຕະໂນມັດ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 100.

max-fsm-thread-length
ຈຳນວນທ່ອນໄມ້ຂັ້ນພື້ນຖານສູງສຸດໃນລັດຈຳກັດ automaton jump thread. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-fsm-thread-paths
ຈຳນວນສູງສຸດຂອງເສັ້ນທາງກະທູ້ກະໂດດໃໝ່ເພື່ອສ້າງເປັນລະບົບອັດຕະໂນມັດແບບກຳນົດ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ 50.

ທາງເລືອກໃນການ ການຄວບຄຸມ ໄດ້ ໂປເຈັກເຕີ້
ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ຄວບ​ຄຸມ C preprocessor, ເຊິ່ງ​ແມ່ນ​ດໍາ​ເນີນ​ການ​ໃນ​ແຕ່​ລະ​ໄຟລ​໌ C source ກ່ອນ​ທີ່​ຈະ​ເປັນ​ຈິງ
ການລວບລວມ.

ຖ້າທ່ານໃຊ້ -E ທາງເລືອກ, ບໍ່ມີຫຍັງເຮັດໄດ້ຍົກເວັ້ນການປຸງແຕ່ງກ່ອນ. ບາງທາງເລືອກເຫຼົ່ານີ້
ເຮັດໃຫ້ຄວາມຮູ້ສຶກພຽງແຕ່ຮ່ວມກັນກັບ -E ເນື່ອງຈາກວ່າພວກມັນເຮັດໃຫ້ຜົນຜະລິດ preprocessor ເປັນ
ບໍ່ເຫມາະສົມສໍາລັບການລວບລວມຕົວຈິງ.

-Wp​,ທາງເລືອກ
ທ່ານສາມາດໃຊ້ -Wp​,ທາງເລືອກ ເພື່ອຂ້າມໄດເວີ compiler ແລະຜ່ານ ທາງເລືອກ ໂດຍ​ກົງ​ໂດຍ​ຜ່ານ​ການ​
ກັບ preprocessor ໄດ້. ຖ້າ ທາງເລືອກ ມີເຄື່ອງໝາຍຈຸດ, ມັນຖືກແບ່ງອອກເປັນຫຼາຍທາງເລືອກຢູ່ທີ່
ເຄື່ອງໝາຍຈຸດ. ຢ່າງ​ໃດ​ກໍ​ຕາມ​, ທາງ​ເລືອກ​ຈໍາ​ນວນ​ຫຼາຍ​ແມ່ນ​ການ​ດັດ​ແກ້​, ການ​ແປ​ພາ​ສາ​ຫຼື​ການ​ຕີ​ລາ​ຄາ​ໂດຍ​
ໄດເວີ compiler ກ່ອນທີ່ຈະຖືກສົ່ງໄປຫາ preprocessor, ແລະ -Wp ບັງຄັບ bypasses
ໄລຍະນີ້. ການໂຕ້ຕອບໂດຍກົງຂອງ preprocessor ແມ່ນ undocumented ແລະຂຶ້ນກັບ
ປ່ຽນແປງ, ດັ່ງນັ້ນທຸກຄັ້ງທີ່ເປັນໄປໄດ້ທ່ານຄວນຫຼີກເວັ້ນການໃຊ້ -Wp ແລະໃຫ້ຄົນຂັບລົດຈັດການ
ທາງເລືອກແທນ.

- ໂປເຊດເຊີ Xpre ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກສໍາລັບ preprocessor ໄດ້. ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້​ນີ້​ເພື່ອ​ສະ​ຫນອງ​ລະ​ບົບ -
ຕົວເລືອກສະເພາະຕົວປະມວນຜົນກ່ອນທີ່ GCC ບໍ່ຮັບຮູ້.

ຖ້າທ່ານຕ້ອງການຜ່ານທາງເລືອກທີ່ໃຊ້ການໂຕ້ຖຽງ, ທ່ານຕ້ອງໃຊ້ - ໂປເຊດເຊີ Xpre
ສອງຄັ້ງ, ຫນຶ່ງຄັ້ງສໍາລັບທາງເລືອກແລະຫນຶ່ງຄັ້ງສໍາລັບການໂຕ້ຖຽງ.

-no-integrated-cpp
ດໍາເນີນການ preprocessing ເປັນ pass ແຍກຕ່າງຫາກກ່ອນທີ່ຈະລວບລວມ. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ດໍາເນີນການ
preprocessing ເປັນສ່ວນລວມຂອງ input tokenization ແລະ parsing. ຖ້າທາງເລືອກນີ້
ໄດ້ຖືກສະຫນອງໃຫ້, ພາສາຫນ້າທີ່ເຫມາະສົມ (cc1, cc1plus, ຫຼື cc1obj ສໍາລັບ C, C++,
ແລະ Objective-C, ຕາມລໍາດັບ) ແທນທີ່ຈະຖືກເອີ້ນສອງຄັ້ງ, ຄັ້ງດຽວສໍາລັບການປຸງແຕ່ງກ່ອນເທົ່ານັ້ນ
ແລະຄັ້ງດຽວສໍາລັບການລວບລວມຕົວຈິງຂອງການປ້ອນຂໍ້ມູນ preprocessed. ຕົວເລືອກນີ້ອາດຈະເປັນປະໂຫຍດ
ໂດຍສົມທົບກັບ -B or - ຫໍ່ ທາງ​ເລືອກ​ໃນ​ການ​ລະ​ບຸ preprocessor ສະ​ຫຼັບ​ຫຼື​
ດໍາເນີນການເພີ່ມເຕີມຂອງແຫຼ່ງໂຄງການລະຫວ່າງ preprocessing ປົກກະຕິແລະ
ການລວບລວມ.

-D ຊື່
ກຳນົດລ່ວງໜ້າ ຊື່ ເປັນມະຫາພາກ, ມີນິຍາມ 1.

-D ຊື່=ຄໍານິຍາມ
ເນື້ອໃນຂອງ ຄໍານິຍາມ ແມ່ນ tokenized ແລະປຸງແຕ່ງເປັນຖ້າຫາກວ່າພວກເຂົາເຈົ້າປະກົດວ່າໃນລະຫວ່າງ
ການແປພາສາໄລຍະສາມໃນ a #ກໍານົດ ຄໍາສັ່ງ. ໂດຍສະເພາະ, ຄໍານິຍາມຈະເປັນ
ຫຍໍ້ດ້ວຍຕົວອັກສອນແຖວໃໝ່ທີ່ຝັງໄວ້.

ຖ້າທ່ານກໍາລັງເອີ້ນ preprocessor ຈາກໂຄງການ shell ຫຼື shell, ທ່ານອາດຈະຕ້ອງການ
ເພື່ອໃຊ້ syntax ວົງຢືມຂອງ shell ເພື່ອປົກປ້ອງຕົວອັກສອນເຊັ່ນຊ່ອງທີ່ມີ a
ຄວາມຫມາຍໃນ syntax ຂອງ shell.

ຖ້າທ່ານຕ້ອງການກໍານົດ macro ຄ້າຍຄືຟັງຊັນຢູ່ໃນເສັ້ນຄໍາສັ່ງ, ຂຽນ argument ຂອງມັນ
ລາຍຊື່ທີ່ມີວົງເລັບອ້ອມຂ້າງກ່ອນເຄື່ອງໝາຍເທົ່າກັບ (ຖ້າມີ). ວົງເລັບແມ່ນ
ມີຄວາມຫມາຍສໍາລັບແກະສ່ວນໃຫຍ່, ດັ່ງນັ້ນທ່ານຈະຕ້ອງອ້າງເຖິງທາງເລືອກ. ກັບ sh ແລະ csh,
-D'ຊື່(ໂຕ້ຖຽງ...)=ຄໍານິຍາມ' ວຽກງານ.

-D ແລະ -U ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປະ​ຕິ​ບັດ​ຕາມ​ຄໍາ​ສັ່ງ​ທີ່​ເຂົາ​ເຈົ້າ​ໄດ້​ຮັບ​ໃນ​ບັນ​ຊີ​ຄໍາ​ສັ່ງ​. ທັງໝົດ
- ໄອມາໂຄຣ ເອກະສານ ແລະ - ລວມ​ທັງ​ ເອກະສານ ທາງ​ເລືອກ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປຸງ​ແຕ່ງ​ຫຼັງ​ຈາກ​ທີ່​ທັງ​ຫມົດ​ -D ແລະ -U ຕົວເລືອກ

-U ຊື່
ຍົກເລີກຄໍານິຍາມທີ່ຜ່ານມາຂອງ ຊື່, ບໍ່ວ່າຈະສ້າງຂຶ້ນໃນຫຼືສະຫນອງໃຫ້ກັບ a -D ທາງເລືອກ.

-undef
ຢ່າກຳນົດມາໂຄຣສະເພາະລະບົບ ຫຼື GCC ສະເພາະໃດໆລ່ວງໜ້າ. ມາດຕະຖານທີ່ກຳນົດໄວ້ລ່ວງໜ້າ
ມະຫາພາກຍັງຄົງຖືກກໍານົດ.

-I dir
ເພີ່ມໄດເລກະທໍລີ dir ໄປຫາບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລີທີ່ຈະຊອກຫາໄຟລ໌ header.
ລາຍຊື່ໂດຍ -I ຖືກຄົ້ນຫາກ່ອນທີ່ລະບົບມາດຕະຖານປະກອບມີໄດເລກະທໍລີ.
ຖ້າໄດເລກະທໍລີ dir ເປັນລະບົບມາດຕະຖານປະກອບມີໄດເລກະທໍລີ, ທາງເລືອກແມ່ນຖືກລະເວັ້ນ
ໃຫ້ແນ່ໃຈວ່າຄໍາສັ່ງຄົ້ນຫາໃນຕອນຕົ້ນສໍາລັບລະບົບລະບົບແລະການປິ່ນປົວພິເສດ
ສ່ວນຫົວຂອງລະບົບບໍ່ໄດ້ພ່າຍແພ້. ຖ້າ dir ເລີ່ມຕົ້ນດ້ວຍ "=", ຈາກນັ້ນ "=" ຈະເປັນ
ແທນທີ່ດ້ວຍຄໍານໍາຫນ້າ sysroot; ເບິ່ງ --sysroot ແລະ -isysroot.

-o ເອກະສານ
ຂຽນຜົນໄດ້ຮັບໃສ່ ເອກະສານ. ນີ້ແມ່ນຄືກັນກັບການລະບຸ ເອກະສານ ເປັນທາງເລືອກທີສອງທີ່ບໍ່ແມ່ນ
ການໂຕ້ຖຽງກັບ cpp. gcc ມີການຕີຄວາມແຕກຕ່າງກັນຂອງການໂຕ້ຖຽງທີ່ບໍ່ແມ່ນທາງເລືອກທີສອງ,
ດັ່ງນັ້ນທ່ານຕ້ອງໃຊ້ -o ເພື່ອລະບຸໄຟລ໌ຜົນຜະລິດ.

- ຝາ
ເປີດ​ການ​ເຕືອນ​ທາງ​ເລືອກ​ທັງ​ຫມົດ​ທີ່​ຕ້ອງ​ການ​ສໍາ​ລັບ​ລະ​ຫັດ​ປົກ​ກະ​ຕິ​. ໃນປັດຈຸບັນນີ້
is - ຄໍາເຫັນ, -Wtrigraphs, -Wmultichar ແລະການເຕືອນກ່ຽວກັບການສົ່ງເສີມຈໍານວນເຕັມທີ່ເຮັດໃຫ້ເກີດ a
ການປ່ຽນແປງຂອງເຄື່ອງຫມາຍໃນ "#if" ສະແດງອອກ. ໃຫ້ສັງເກດວ່າຫຼາຍຄໍາເຕືອນຂອງ preprocessor
ເປີດໂດຍຄ່າເລີ່ມຕົ້ນ ແລະບໍ່ມີທາງເລືອກທີ່ຈະຄວບຄຸມພວກມັນ.

- ຄໍາເຫັນ
- ຄໍາເຫັນ
ເຕືອນທຸກຄັ້ງທີ່ລຳດັບຄຳເຫັນເລີ່ມຕົ້ນ /* ປາກົດຢູ່ໃນ a /* ຄໍາເຫັນ, ຫຼືທຸກຄັ້ງ a
backslash-newline ປະກົດຢູ່ໃນ a // ຄໍາເຫັນ. (ທັງສອງຮູບແບບມີຜົນກະທົບດຽວກັນ.)

-Wtrigraphs
trigraphs ສ່ວນໃຫຍ່ໃນຄໍາເຫັນບໍ່ສາມາດສົ່ງຜົນກະທົບຕໍ່ຄວາມຫມາຍຂອງໂຄງການ. ຢ່າງໃດກໍ່ຕາມ, ກ
trigraph ທີ່ຈະປະກອບເປັນເສັ້ນໃຫມ່ຫນີ (??/ ໃນຕອນທ້າຍຂອງເສັ້ນ) ສາມາດ, ໂດຍ
ການປ່ຽນແປງບ່ອນທີ່ຄໍາຄິດເຫັນເລີ່ມຕົ້ນຫຼືສິ້ນສຸດ. ເພາະສະນັ້ນ, ພຽງແຕ່ trigraphs ທີ່ຈະປະກອບ
ແຖວໃໝ່ທີ່ຫຼົບໜີອອກມາ ຜະລິດຄຳເຕືອນພາຍໃນຄຳເຫັນ.

ທາງເລືອກນີ້ແມ່ນຊີ້ໃຫ້ເຫັນໂດຍ - ຝາທີ່ຢູ່ ຖ້າຫາກວ່າ - ຝາ ບໍ່ໄດ້ຖືກມອບໃຫ້, ຕົວເລືອກນີ້ຍັງຖືກເປີດໃຊ້ຢູ່
ເວັ້ນເສຍແຕ່ວ່າ trigraphs ຖືກເປີດໃຊ້. ເພື່ອໃຫ້ໄດ້ຮັບການແປງ trigraph ໂດຍບໍ່ມີການເຕືອນ, ແຕ່ໄດ້ຮັບ
ອື່ນໆ - ຝາ ຄໍາ​ເຕືອນ​, ການ​ນໍາ​ໃຊ້​ -trigraphs - ຝາ -Wno-trigraphs.

- ແບບດັ້ງເດີມ
ເຕືອນກ່ຽວກັບສິ່ງກໍ່ສ້າງບາງຢ່າງທີ່ມີລັກສະນະແຕກຕ່າງກັນໃນແບບດັ້ງເດີມ ແລະ ISO C. ນອກຈາກນີ້
ເຕືອນກ່ຽວກັບໂຄງສ້າງ ISO C ທີ່ບໍ່ມີການທຽບເທົ່າ C ແບບດັ້ງເດີມ, ແລະມີບັນຫາ
ການກໍ່ສ້າງທີ່ຄວນຫຼີກເວັ້ນ.

-Wundef
ເຕືອນທຸກຄັ້ງທີ່ພົບຕົວລະບຸທີ່ບໍ່ແມ່ນມະຫາພາກຢູ່ໃນ # ຖ້າ ທິດ​ທາງ​,
ນອກຂອງ ກໍານົດໄວ້. ຕົວລະບຸດັ່ງກ່າວຖືກແທນທີ່ດ້ວຍສູນ.

-Wunused-macros
ເຕືອນກ່ຽວກັບມະຫາພາກທີ່ກຳນົດໄວ້ໃນໄຟລ໌ຫຼັກທີ່ບໍ່ໄດ້ໃຊ້. ມະຫາພາກແມ່ນ ໃຫມ່ ຖ້າມັນແມ່ນ
ຂະຫຍາຍຫຼືທົດສອບການມີຢູ່ຢ່າງຫນ້ອຍຫນຶ່ງຄັ້ງ. preprocessor ຍັງຈະເຕືອນຖ້າຫາກວ່າ
macro ບໍ່ໄດ້ຖືກນໍາໃຊ້ໃນເວລາທີ່ມັນຖືກກໍານົດຄືນໃຫມ່ຫຼືບໍ່ໄດ້ກໍານົດ.

ມາໂຄໃນຕົວ, ມະຫາພາກທີ່ກຳນົດໄວ້ໃນເສັ້ນຄຳສັ່ງ, ແລະ ມະຫາພາກທີ່ກຳນົດໄວ້ໃນລວມມີ
ໄຟລ໌ບໍ່ໄດ້ຖືກເຕືອນກ່ຽວກັບ.

ຫມາຍ​ເຫດ​: ຖ້າມະຫາພາກຖືກນໍາໃຊ້ຕົວຈິງ, ແຕ່ວ່າພຽງແຕ່ໃຊ້ໃນບລັອກທີ່ມີເງື່ອນໄຂທີ່ຂ້າມ, ຫຼັງຈາກນັ້ນ
CPP ຈະລາຍງານວ່າມັນບໍ່ໄດ້ຖືກໃຊ້. ເພື່ອຫຼີກເວັ້ນການເຕືອນໃນກໍລະນີດັ່ງກ່າວ, ທ່ານອາດຈະປັບປຸງ
ຂອບເຂດຂອງຄໍານິຍາມຂອງມະຫາພາກໂດຍ, ສໍາລັບການຍົກຕົວຢ່າງ, ຍ້າຍມັນເຂົ້າໄປໃນຄັ້ງທໍາອິດຂ້າມ
ຕັນ. ອີກທາງເລືອກ, ທ່ານສາມາດສະຫນອງການນໍາໃຊ້ dummy ກັບບາງສິ່ງບາງຢ່າງເຊັ່ນ:

#if ກໍານົດ the_macro_causing_the_warning
#ສຸດທ້າຍ

-Wendif-ປ້າຍ
ເຕືອນທຸກຄັ້ງທີ່ #ອື່ນ or an #ສຸດທ້າຍ ຕິດຕາມດ້ວຍຂໍ້ຄວາມ. ນີ້ມັກຈະເກີດຂຶ້ນໃນ
ລະຫັດຂອງແບບຟອມ

#ຖ້າ FOO
...
# FOO ອື່ນ
...
#endif FOO

"FOO" ທີສອງແລະທີສາມຄວນຈະຢູ່ໃນຄໍາເຫັນ, ແຕ່ມັກຈະບໍ່ມີຢູ່ໃນໂຄງການເກົ່າ.
ການເຕືອນໄພນີ້ແມ່ນຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

- ຄວາມ​ຜິດ​ພາດ​
ເຮັດໃຫ້ການເຕືອນໄພທັງຫມົດເຂົ້າໄປໃນຄວາມຜິດພາດທີ່ຍາກ. ລະຫັດແຫຼ່ງທີ່ເຮັດໃຫ້ເກີດການເຕືອນໄພ
ຖືກປະຕິເສດ.

-Wsystem-headers
ອອກຄໍາເຕືອນສໍາລັບລະຫັດໃນສ່ວນຫົວຂອງລະບົບ. ເຫຼົ່ານີ້ແມ່ນປົກກະຕິບໍ່ມີປະໂຫຍດໃນການຄົ້ນຫາ
ແມງໄມ້ໃນລະຫັດຂອງທ່ານເອງ, ສະນັ້ນສະກັດກັ້ນ. ຖ້າເຈົ້າຮັບຜິດຊອບລະບົບ
ຫ້ອງສະຫມຸດ, ທ່ານອາດຈະຕ້ອງການເບິ່ງເຂົາເຈົ້າ.

-w ສະກັດກັ້ນການເຕືອນໄພທັງຫມົດ, ລວມທັງສິ່ງທີ່ GNU CPP ອອກໂດຍຄ່າເລີ່ມຕົ້ນ.

- pedantic
ອອກການວິນິດໄສບັງຄັບທັງໝົດທີ່ລະບຸໄວ້ໃນມາດຕະຖານ C. ບາງສ່ວນຂອງເຂົາເຈົ້າໄດ້ຖືກປະໄວ້
ອອກໂດຍຄ່າເລີ່ມຕົ້ນ, ນັບຕັ້ງແຕ່ພວກມັນກະຕຸ້ນເລື້ອຍໆກ່ຽວກັບລະຫັດທີ່ບໍ່ມີອັນຕະລາຍ.

-pedantic ຜິດ​ພາດ​
ອອກການວິນິດໄສທີ່ບັງຄັບທັງໝົດ, ແລະເຮັດໃຫ້ການວິນິດໄສທີ່ບັງຄັບທັງໝົດເປັນຄວາມຜິດພາດ.
ນີ້ລວມມີການວິນິດໄສບັງຄັບທີ່ GCC ມີບັນຫາໂດຍບໍ່ມີ - pedantic ແຕ່ປະຕິບັດເປັນ
ຄຳ ເຕືອນ.

-M ແທນ​ທີ່​ຈະ​ໃຫ້​ຜົນ​ໄດ້​ຮັບ​ຂອງ​ການ​ປຸງ​ແຕ່ງ​ກ່ອນ​, ອອກ​ກົດ​ລະ​ບຽບ​ທີ່​ເຫມາະ​ສົມ​ສໍາ​ລັບ​ການ​ ເຮັດໃຫ້
ອະ​ທິ​ບາຍ​ການ​ຂຶ້ນ​ກັບ​ໄຟລ​໌​ຕົ້ນ​ຕໍ​ຂອງ​. preprocessor ຜົນໄດ້ຮັບຫນຶ່ງ
ເຮັດໃຫ້ ກົດລະບຽບທີ່ມີຊື່ໄຟລ໌ວັດຖຸສໍາລັບໄຟລ໌ແຫຼ່ງນັ້ນ, ຈໍ້າສອງເມັດ, ແລະຊື່
ຂອງໄຟລ໌ທັງຫມົດລວມ, ລວມທັງໄຟລ໌ທີ່ມາຈາກ - ລວມ​ທັງ​ or - ໄອມາໂຄຣ ຄໍາ​ສັ່ງ -
ຕົວເລືອກສາຍ.

ເວັ້ນເສຍແຕ່ໄດ້ລະບຸຢ່າງຊັດເຈນ (ກັບ -MT or -MQ), ຊື່ໄຟລ໌ວັດຖຸປະກອບດ້ວຍ
ຊື່ຂອງໄຟລ໌ແຫຼ່ງທີ່ມີ suffix ແທນທີ່ດ້ວຍ object file suffix ແລະກັບໃດໆ
ເອົາພາກສ່ວນໄດເລກະທໍລີຊັ້ນນໍາ. ຖ້າມີຫຼາຍໄຟລ໌ລວມແລ້ວກົດລະບຽບແມ່ນ
ແບ່ງອອກເປັນຫຼາຍສາຍໂດຍໃຊ້ \- ແຖວໃໝ່. ກົດລະບຽບບໍ່ມີຄໍາສັ່ງ.

ຕົວເລືອກນີ້ບໍ່ໄດ້ສະກັດກັ້ນຜົນດີບັ໊ກຂອງຕົວປະມວນຜົນກ່ອນ, ເຊັ່ນ: -dM. ເພື່ອຫລີກລ້ຽງ
ການປະສົມຜົນດີບັກດັ່ງກ່າວກັບກົດລະບຽບການເພິ່ງພາອາໄສທີ່ທ່ານຄວນລະບຸຢ່າງຊັດເຈນ
ໄຟລ໌ຜົນຜະລິດຂຶ້ນກັບ -MF, ຫຼືໃຊ້ຕົວແປສະພາບແວດລ້ອມເຊັ່ນ
DEPENDENCIES_OUTPUT. ຜົນອອກມາດີບັ໊ກຈະຍັງຄົງຖືກສົ່ງໄປຫາກະແສຜົນຜະລິດປົກກະຕິ
ທຳ ມະດາ.

Passing -M ຫມາຍເຖິງຄົນຂັບລົດ -E, ແລະສະກັດກັ້ນການເຕືອນໄພໂດຍມີເຫດຜົນ -w.

ເອັມ ຄື -M ແຕ່ຢ່າກ່າວເຖິງໄຟລ໌ header ທີ່ພົບເຫັນຢູ່ໃນລະບົບ header directory,
ຫຼືໄຟລ໌ header ທີ່ຖືກລວມເຂົ້າ, ໂດຍກົງຫຼືໂດຍທາງອ້ອມ, ຈາກ header ດັ່ງກ່າວ.

ນີ້ຫມາຍຄວາມວ່າທາງເລືອກຂອງວົງເລັບມຸມຫຼືວົງຢືມຄູ່ໃນ an #include
ຄໍາສັ່ງບໍ່ໄດ້ຢູ່ໃນຕົວຂອງມັນເອງກໍານົດວ່າສ່ວນຫົວນັ້ນຈະປາກົດຢູ່ໃນ ເອັມ
ຜົນ​ຜະ​ລິດ​ທີ່​ອີງ​ໃສ່​. ນີ້ແມ່ນການປ່ຽນແປງເລັກນ້ອຍໃນ semantics ຈາກ GCC ຮຸ່ນ 3.0 ແລະ
ກ່ອນ ໜ້າ ນີ້.

-MF ເອກະສານ
ເມື່ອໃຊ້ກັບ -M or ເອັມ, ກໍານົດໄຟລ໌ທີ່ຈະຂຽນການຂຶ້ນກັບ. ຖ້າບໍ່ມີ -MF
switch ແມ່ນໃຫ້ preprocessor ສົ່ງກົດລະບຽບໄປຫາບ່ອນດຽວກັນທີ່ມັນຈະສົ່ງ
ຜົນຜະລິດທີ່ປຸງແຕ່ງກ່ອນ.

ເມື່ອໃຊ້ກັບຕົວເລືອກໄດເວີ -MD or -MMD, -MF overrides ການເພິ່ງພາອາໄສເລີ່ມຕົ້ນ
ໄຟລ໌ຜົນຜະລິດ.

-MG ໂດຍສົມທົບກັບທາງເລືອກເຊັ່ນ: -M ການ​ຮ້ອງ​ຂໍ​ການ​ຜະ​ລິດ​ທີ່​ເພິ່ງ​ພາ​ອາ​ໄສ​, -MG ສົມມຸດ
ໄຟລ໌ header ທີ່ຂາດຫາຍໄປແມ່ນໄຟລ໌ທີ່ສ້າງຂຶ້ນແລະເພີ່ມພວກມັນໃສ່ບັນຊີລາຍຊື່ການເພິ່ງພາອາໄສໂດຍບໍ່ມີ
ການ​ເພີ່ມ​ຄວາມ​ຜິດ​ພາດ​. ຊື່ໄຟລ໌ທີ່ເພິ່ງພາອາໄສແມ່ນເອົາໂດຍກົງຈາກ "#include"
ທິດ​ທາງ​ໂດຍ​ບໍ່​ມີ​ການ prepending ເສັ້ນ​ທາງ​ໃດ​ຫນຶ່ງ​. -MG ຍັງສະກັດກັ້ນຜົນຜະລິດທີ່ປຸງແຕ່ງກ່ອນ, ເປັນ
ໄຟລ໌ສ່ວນຫົວທີ່ຂາດຫາຍໄປເຮັດໃຫ້ນີ້ບໍ່ມີປະໂຫຍດ.

ຄຸນນະສົມບັດນີ້ຖືກນໍາໃຊ້ໃນການປັບປຸງອັດຕະໂນມັດຂອງ makefiles.

-MP ທາງເລືອກນີ້ແນະນໍາ CPP ເພື່ອເພີ່ມເປົ້າຫມາຍ phony ສໍາລັບແຕ່ລະ dependency ອື່ນນອກຈາກ
ໄຟລ໌ຕົ້ນຕໍ, ເຮັດໃຫ້ແຕ່ລະຄົນຂຶ້ນກັບບໍ່ມີຫຍັງ. ກົດລະບຽບ dummy ເຫຼົ່ານີ້ເຮັດວຽກກ່ຽວກັບຄວາມຜິດພາດ
ເຮັດໃຫ້ ໃຫ້ຖ້າຫາກວ່າທ່ານເອົາໄຟລ໌ header ໂດຍບໍ່ມີການປັບປຸງ 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 ທາງເລືອກແມ່ນໃຫ້. ຖ້າມັນເປັນ, ຄົນຂັບລົດໃຊ້ຂອງມັນ
ການໂຕ້ຖຽງແຕ່ມີ suffix ຂອງ .dຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​ມັນ​ໃຊ້​ເວ​ລາ​ຊື່​ຂອງ​ໄຟລ​໌​ທີ່​ປ້ອນ​ຂໍ້​ມູນ​,
ເອົາອົງປະກອບຂອງໄດເລກະທໍລີແລະຄໍາຕໍ່ທ້າຍ, ແລະນໍາໃຊ້ a .d បច្ច័យ.

If -MD ແມ່ນໃຊ້ຮ່ວມກັບ -E, ໃດໆ -o switch ແມ່ນເຂົ້າໃຈເພື່ອລະບຸ
ໄຟລ​໌​ຜົນ​ຜະ​ລິດ​ທີ່​ອີງ​ໃສ່​, ແຕ່​ຖ້າ​ຫາກ​ວ່າ​ນໍາ​ໃຊ້​ໂດຍ​ບໍ່​ມີ​ການ​ -E, ແຕ່ລະຄົນ -o ແມ່ນເຂົ້າໃຈເພື່ອລະບຸ a
ໄຟລ໌ວັດຖຸເປົ້າໝາຍ.

ນັບຕັ້ງແຕ່ -E ບໍ່​ໄດ້​ຫມາຍ​ຄວາມ​ວ່າ​, -MD ສາມາດໃຊ້ເພື່ອສ້າງໄຟລ໌ຜົນຜະລິດທີ່ຂຶ້ນກັບເປັນ
ຜົນຂ້າງຄຽງຂອງຂະບວນການລວບລວມ.

-MMD
ຄື -MD ຍົກເວັ້ນການກ່າວເຖິງໄຟລ໌ສ່ວນຫົວຂອງຜູ້ໃຊ້ເທົ່ານັ້ນ, ບໍ່ແມ່ນໄຟລ໌ສ່ວນຫົວຂອງລະບົບ.

-fpch-deps
ເມື່ອໃຊ້ສ່ວນຫົວທີ່ລວບລວມໄວ້ລ່ວງໜ້າ, ທຸງນີ້ຈະເຮັດໃຫ້ທຸງຜົນການເພິ່ງພາອາໄສ
ຍັງລາຍຊື່ໄຟລ໌ຈາກການຂຶ້ນກັບສ່ວນຫົວຂອງ precompiled. ຖ້າບໍ່ໄດ້ລະບຸໄວ້ເທົ່ານັ້ນ
header precompiled ຈະຖືກລະບຸໄວ້ແລະບໍ່ແມ່ນໄຟລ໌ທີ່ຖືກນໍາໃຊ້ເພື່ອສ້າງມັນ
ເນື່ອງຈາກວ່າໄຟລ໌ເຫຼົ່ານັ້ນບໍ່ໄດ້ຖືກປຶກສາຫາລືໃນເວລາທີ່ header precompiled ຖືກນໍາໃຊ້.

-fpch-preprocess
ຕົວເລືອກນີ້ອະນຸຍາດໃຫ້ໃຊ້ header precompiled ຮ່ວມກັບ -E. ມັນແຊກພິເສດ
"#pragma", "#pragma GCC pch_preprocess"ຊື່​ເອ​ກະ​ສານ"" ໃນຜົນຜະລິດເພື່ອຫມາຍສະຖານທີ່
ບ່ອນທີ່ຫົວຂໍ້ precompiled ໄດ້ພົບເຫັນ, ແລະຂອງມັນ ຊື່​ເອ​ກະ​ສານທີ່ຢູ່ ເມື່ອ​ໃດ​ -fpreprocessed ແມ່ນຢູ່ໃນ
ການນໍາໃຊ້, GCC ຮັບຮູ້ "#pragma" ນີ້ແລະໂຫຼດ PCH.

ທາງ​ເລືອກ​ນີ້​ຈະ​ປິດ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​, ເນື່ອງ​ຈາກ​ວ່າ​ຜົນ​ຜະ​ລິດ​ກ່ອນ​ການ​ຜະ​ລິດ​ຜົນ​ໄດ້​ຮັບ​ພຽງ​ແຕ່​
ເໝາະແທ້ໆສຳລັບການປ້ອນຂໍ້ມູນໃສ່ GCC. ມັນຖືກເປີດໂດຍ - save-temps​.

ທ່ານບໍ່ຄວນຂຽນ "#pragma" ນີ້ຢູ່ໃນລະຫັດຂອງທ່ານເອງ, ແຕ່ມັນປອດໄພທີ່ຈະແກ້ໄຂ
ຊື່ໄຟລ໌ຖ້າໄຟລ໌ PCH ມີຢູ່ໃນບ່ອນອື່ນ. ຊື່ໄຟລ໌ອາດຈະເປັນ
absolute ຫຼືມັນອາດຈະເປັນພີ່ນ້ອງກັບໄດເລກະທໍລີປະຈຸບັນຂອງ GCC.

-x c
-x c ++
-x ຈຸດປະສົງ - ຄ
-x assembler-with-cpp
ລະບຸພາສາຕົ້ນສະບັບ: C, C++, Objective-C, ຫຼືການປະກອບ. ນີ້ບໍ່ມີຫຍັງເຮັດ
ມີການປະຕິບັດຕາມມາດຕະຖານຫຼືການຂະຫຍາຍ; ມັນພຽງແຕ່ເລືອກ syntax ພື້ນຖານໃດ
ຄາດຫວັງ. ຖ້າທ່ານບໍ່ໃຫ້ທາງເລືອກເຫຼົ່ານີ້, cpp ຈະ deduce ພາສາຈາກ
ສ່ວນຂະຫຍາຍຂອງໄຟລ໌ແຫຼ່ງ: .c, cc, .m, ຫຼື .S. ບາງສ່ວນຂະຫຍາຍທົ່ວໄປອື່ນໆສໍາລັບ
C ++ ແລະການປະກອບຍັງຖືກຮັບຮູ້. ຖ້າ cpp ບໍ່ຮັບຮູ້ການຂະຫຍາຍ, ມັນ
ຈະຮັກສາໄຟລ໌ເປັນ C; ນີ້ແມ່ນຮູບແບບທົ່ວໄປທີ່ສຸດ.

ຫມາຍ​ເຫດ​: ລຸ້ນກ່ອນໜ້າຂອງ cpp ຍອມຮັບ a - ພາສາ ທາງ​ເລືອກ​ທີ່​ເລືອກ​ທັງ​ສອງ​
ພາສາ ແລະລະດັບຄວາມສອດຄ່ອງຂອງມາດຕະຖານ. ທາງເລືອກນີ້ໄດ້ຖືກໂຍກຍ້າຍ, ເພາະວ່າ
ມັນຂັດແຍ້ງກັບ -l ທາງເລືອກ.

-std=ມາດຕະຖານ
-ansi
ລະບຸມາດຕະຖານທີ່ລະຫັດຄວນປະຕິບັດຕາມ. ປະຈຸ​ບັນ CPP ຮູ້​ກ່ຽວ​ກັບ C
ແລະມາດຕະຖານ C++; ຄົນອື່ນອາດຈະຖືກເພີ່ມໃນອະນາຄົດ.

ມາດຕະຖານ ອາດ​ຈະ​ເປັນ​ຫນຶ່ງ​ໃນ​:

"c90"
"c89"
"iso9899: 1990"
ມາດຕະຖານ ISO C ຈາກປີ 1990. c90 ແມ່ນ shorthand ປະເພນີສໍາລັບການສະບັບນີ້ຂອງ
ມາດຕະຖານ.

ໄດ້ -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 ບວກກັບສ່ວນຂະຫຍາຍ GNU. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

"gnu99"
"gnu9x"
ມາດຕະຖານ C 1999 ບວກກັບສ່ວນຂະຫຍາຍ GNU.

"gnu11"
"gnu1x"
ມາດຕະຖານ C 2011 ບວກກັບສ່ວນຂະຫຍາຍ GNU.

"c++98"
ມາດຕະຖານ ISO C++ ປີ 1998 ບວກກັບການແກ້ໄຂ.

"gnu++98"
ຄື​ກັນ​ກັບ -std=c++98 ບວກກັບສ່ວນຂະຫຍາຍ GNU. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງລະຫັດ C++.

-I- ແຍກເສັ້ນທາງລວມ. ໄດເລກະທໍລີໃດນຶ່ງທີ່ລະບຸດ້ວຍ -I ທາງເລືອກກ່ອນ -I- ມີ
ຄົ້ນຫາພຽງແຕ່ສ່ວນຫົວທີ່ຮ້ອງຂໍດ້ວຍ "#include"ໄຟລ໌""; ພວກເຂົາບໍ່ໄດ້ຄົ້ນຫາ
"#ລວມໄຟລ໌>". ຖ້າໄດເລກະທໍລີເພີ່ມເຕີມຖືກກໍານົດດ້ວຍ -I ທາງ​ເລືອກ​ຫຼັງ​ຈາກ​
-I-, ໄດເລກະທໍລີເຫຼົ່ານັ້ນຖືກຄົ້ນຫາທັງຫມົດ #include ທິດທາງ.

ເພີ່ມ​ເຕີມ, -I- inhibits ການ​ນໍາ​ໃຊ້​ຂອງ​ບັນ​ຊີ​ລາຍ​ການ​ໄຟລ​໌​ປະ​ຈຸ​ບັນ​ເປັນ​
ໄດເລກະທໍລີຄົ້ນຫາທໍາອິດສໍາລັບ "#include"ໄຟລ໌"". ຕົວເລືອກນີ້ຖືກປະຕິເສດ.

-nostdinc
ຢ່າຄົ້ນຫາໄດເລກະທໍລີລະບົບມາດຕະຖານສໍາລັບໄຟລ໌ສ່ວນຫົວ. ພຽງແຕ່ໄດເລກະທໍລີ
ທ່ານ​ໄດ້​ລະ​ບຸ​ໄວ້​ກັບ​ -I ທາງເລືອກ (ແລະໄດເລກະທໍລີຂອງໄຟລ໌ປະຈຸບັນ, ຖ້າ
ທີ່ເຫມາະສົມ) ຖືກຄົ້ນຫາ.

-nostdinc++
ຢ່າຊອກຫາໄຟລ໌ header ໃນໄດເລກະທໍລີມາດຕະ