ພາສາອັງກິດພາສາຝຣັ່ງແອສປາໂຍນ

OnWorks favicon

aarch64-linux-gnu-g++-4.8 - ອອນລາຍໃນຄລາວ

ເປີດໃຊ້ aarch64-linux-gnu-g++-4.8 ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີຜ່ານ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ນີ້ແມ່ນຄໍາສັ່ງ aarch64-linux-gnu-g++-4.8 ທີ່ສາມາດດໍາເນີນການໄດ້ໃນ 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 ຊື່​ເອ​ກະ​ສານ
-fallow-parameterless-variadic-functions -fno-asm -fno-builtin -fno-builtin-ຫນ້າທີ່
-fhosted - freestanding -fopenmp -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 -fstats
-ftemplate-backtrace-limit=n -ftemplate-depth=n -fno-threadsafe-statics
-fuse-cxa-atexit -fno-ອ່ອນແອ -nostdinc++ -fno-default-inline
-fvisibility-inlines-hidden -fvisibility-ms-compat -fext-ຕົວເລກ-ຕົວໜັງສື - ວາບີ
-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 -freplace-objc-classes -fzero-link
-gen-decls -Wassign-intercept -Wno-protocol - ຜູ້​ເລືອກ​ -Wstrict-select-match
-Wunddeclared-ເລືອກ

ພາສາ ເອກະລາດ ທາງເລືອກໃນການ
-fmessage-length=n -fdiagnostics-show-location=[ຄັ້ງຫນຶ່ງ|ທຸກເສັ້ນ]
-fno-diagnostics-show-option -fno-diagnostics-show-caret

ການ​ເຕືອນ​ໄພ ທາງເລືອກໃນການ
-fsyntax ເທົ່ານັ້ນ -fmax-errors=n -Wpedantic -pedantic ຜິດ​ພາດ​ -w -Wextra - ຝາ
-waddress -Waggregate-ກັບຄືນ -Waggressive-loop-optimizations - Warray-bounds
- ຄຸນ​ລັກ​ສະ​ນະ Wno​ -Wno-builtin-macro-redefined -Wc++-compat -Wc++11-compat -Wcast-align
-Wcast-qual -Wchar-subscripts - Wclobbered - ຄໍາເຫັນ - ການ​ປ່ຽນ​ແປງ​ -Wcoverage-mismatch
-Wno-cpp -Wno-deprecated -Wno-deprecated-ປະກາດ -Wdisabled-optimization
-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 - Wimplicit -Wimplicit-function-ປະກາດ -Wimplicit-int
- ວິນ​ຍານ​ຕົນ​ເອງ​ - Winline -Wmaybe-unitialized -Wno-int-to-pointer-cast
-Wno-invalid-offsetof -Winvalid-pch -Wlarger-than=len -Wunsafe-loop-optimizations
-Wlogical-op - ຍາວ - ຍາວ - ຜູ້ຍິງ -Wmaybe-unitialized -Wmissing-braces
-Wmissing-field-initializers -Wmissing-include-dirs -Wno-mudflap -Wno-multichar
-Wnonnull -Wno-ລົ້ນ -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​
- ລໍາດັບຈຸດ - ເງົາ -Wsign-ປຽບທຽບ -Wsign ການ​ປ່ຽນ​ແປງ​
-Wsizeof-pointer-memaccess -Wstack-protector -Wstack-usage=len - ເປັນການລ້າສຸດ
-Wstrict-aliasing=n -Wstrict-ລົ້ນ -Wstrict-overflow=n
-Wsuggest-attribute=[ບໍລິສຸດ|const|noreturn|ຮູບແບບ] -Wmissing-format-attribute - ສະຫວິດ
-Wswitch-default -Wwwitch-enum -Wsync-nand -Wsystem-headers -Wtrampoline
-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=ແບບ -fdbg-cnt-list
-fdbg-cnt=ບັນຊີລາຍການຕ້ານມູນຄ່າ -fdisable-ipa-pass_name -fdisable-rtl-pass_name
-fdisable-rtl-ຊື່​ຜ່ານ=ບັນຊີລາຍຊື່ໄລຍະ -fdisable-tree-pass_name -fdisable-tree-ຜ່ານ-
ຊື່=ບັນຊີລາຍຊື່ໄລຍະ -fdump-noaddr -fdump-ບໍ່ມີຕົວເລກ -fdump-unnumbered-links
-fdump-translation-unit[-n] -fdump-class-hierarchy[-n] -fdump-ipa-all
-fdump-ipa-cgraph -fdump-ipa-inline -fdump-ຜ່ານ -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-mudflap[-n]
-fdump-tree-dom[-n] -fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-tree-sink -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-free[-n]
-fdump-tree-vrp[-n] -ftree-vectorizer-verbose=n -fdump-tree-storeccp[-n]
-fdump-final-insns=ເອກະສານ -fcompare-debug[=ເລືອກ] -fcompare-debug-ວິນາທີ
-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=string -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+ -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-inc, ຄະ
-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 -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-pta -fipa-profile
-fipa-pure-const -fipa ອ້າງ​ອີງ​ -fira-algorithm=ຂັ້ນຕອນວິທີ -fira-region=ພູມິພາກ
-fira-hoist-pressure -fira-loop-pressure -fno-ira-share-save-slots
-fno-ira-share-spill-slots -fira-verbose=n -fivopts -fkeep-inline-ຟັງຊັນ
-fkeep-static-consts -floop-block -floop-interchange -floop-strip-mine
-floop-nest-optimize -floop-parallelize-ທັງໝົດ -flto -flto-compression-level
-flto-partition=ພຶຊະຄະນິດ flto-ບົດລາຍງານ -fmerge-ທັງໝົດ-ຄົງທີ່ -fmerge-ຄົງທີ່
-fmodulo-sched -fmodulo-sched-allow-regmoves -fmove-loop-invariants fmudflap
-fmudflapir -fmudflapth -fno-branch-count-reg -fno-default-inline -fno-defer-pop
-fno-function-cse -fno-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-ລົງທະບຽນ-ຍ້າຍ -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-ຄ່າ
-freciprocal-ຄະນິດສາດ ຟຣີ -fregmove -frename-ລົງທະບຽນ -freorder-ຕັນ
-freorder-blocks-and-partition -freorder - ຫນ້າ​ທີ່​ -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-insns
-fschedule-insns2 -fsection-anchors -fselective-ການ​ກໍາ​ນົດ​ເວ​ລາ​ -fselective-ກຳນົດ​ເວລາ2
-fsel-sched-pipelining -fsel-sched-pipelining-outer-loops -fshrink-wrap
-fsignaling-nans -fsingle-precision-constant -fsplit-ivs-in-unroller
-fsplit-wide-types -stack-protector -fstack-protector-ທັງໝົດ -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-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
-fvariable-expansion-in-unroller -fvect-cost-model -fvpt -fweb - ໂຄງ​ການ​ທັງ​ຫມົດ​ -fwpa
-fuse-ld=linker -fuse-linker-plugin --param ຊື່=ມູນຄ່າ -O -O0 -O1 -O2 -O3 -ອສ
- ໄວ - ອຈ

ໂປເຈັກເຕີ້ ທາງເລືອກໃນການ
-Aຄໍາຖາມ=ຄໍາຕອບ -HAS-ຄໍາຖາມ[=ຄໍາຕອບ] -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 -lຫ້ອງສະຫມຸດ -nostartfiles -nodefaultlibs -nostdlib -pie -rdynamic -s
-static -static-libgcc -static-libstdc++ -static-libasan -static-libtsan - ແບ່ງ​ປັນ​
-shared-libgcc - ສັນ​ຍາ​ລັກ​ -T script -Wl,ທາງເລືອກ -Xlinker ທາງເລືອກ -u ສັນຍາລັກ

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

ເຄື່ອງ ເພິ່ງພາອາໄສ ທາງເລືອກໃນການ
AAArch64 ທາງເລືອກໃນການ -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 - ມີນາ=ຊື່ -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

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
-mwords-little-endian -mfloat-abi=ຊື່ -mfp16-format=ຊື່ -mthumb-interwork
-mno-thumb-interwork -mcpu=ຊື່ - ມີນາ=ຊື່ -mfpu=ຊື່ -mstructure-size-boundary=n
-mabort-on-norturn -mlong-ໂທ -mno-long-calls -msingle-pic-base
-mno-single-pic-base -mpic ມັກສະມາຊິກ =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 - ຈໍາ​ກັດ​ມັນ​

APR ທາງເລືອກໃນການ -mmcu=mcu -maccumulate-args -mbranch-cost=ຄ່າໃຊ້ຈ່າຍ -mcall-prologues - mint8
-mno-interrupts -mrelax -mstrict-X -mtiny-stack -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-ຂໍ້ມູນ -mlarge-data -msmall-text
- ຂະ​ຫນາດ​ໃຫຍ່​ຂໍ້​ຄວາມ​ -mmemory-latency=ທີ່ໃຊ້ເວລາ

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

LIF ທາງເລືອກໃນການ -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-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 ທາງເລືອກໃນການ - ມີນາ=ປະເພດສະຖາປັດຕະຍະກໍາ -mbig-ສະຫຼັບ -mdisable-fpregs
-mdisable-indexing -mfast-indirect-calls - ມກ -mgnu-ld -mhp-ld
-mfixed-range=ໄລຍະລົງທະບຽນ -mjump-in-delay -mlinker-opt -mlong-ໂທ
-mlong-load-store -mno-big-switch -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 - ກະທູ້

i386 ແລະ x86-64 ທາງເລືອກໃນການ -mtune=cpu-type - ມີນາ=cpu-type -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 - ແມ່ -mpclmul
-mfsgsbase -mrdrnd -mf16c -mfma -msse4a -m3dnow -mpopcnt - mabm -mbmi -mtbm -mfma4
-mxop -mlzcnt -mbmi2 -mrtm -mlwp -mthreads -mno-align-stringops
-minline-all-stringops -minline-stringops-ແບບໄດນາມິກ -mstringop-strategy=ພຶຊະຄະນິດ
-mpush-args -maccumulate-outgoing-args -m128bit-ຍາວ-ສອງເທົ່າ -m96bit-ຍາວ-ສອງເທົ່າ
-mlong-double-64 -mlong-double-80 -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 -mlarge-data-threshold=num -msse2avx -mfentry
-m8bit-idiv -mavx256-split-unaligned-load -mavx256-split-unaligned-store

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

IA-64 ທາງເລືອກໃນການ -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-stop -mregister-names -msdata -mno-sdata -mconstant-gp -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 ທາງເລືອກໃນການ - THE -EB - ມີນາ=ໂຄ້ງ -mtune=ໂຄ້ງ -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-minterlink-mips16 -mno-interlink-mips16 -mabi=ຊ່ວຍເຫລືອ - mabicalls -mno-abicalls
-mshared -mno-ແບ່ງປັນ -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-float -msoft-float -mno-float -msingle-float -mdouble-float -mdsp
-mno-dsp -MDSPR2 -mno-dspr2 -mmcu -mmno-mcu -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 -mfused-madd -mno-fused-madd -nocpp
-mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000 -mfix-r4400 -mno-fix-r4400
-mfix-r10000 -mno-fix-r10000 -mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130
-mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1 -mflush-func=ມ່ວນ -mno-flush-func
-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 -mno-crt0

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-ເຕືອນ

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

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

RS / 6000 ແລະ ພະລັງງານ PC ທາງເລືອກໃນການ -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

RX ທາງເລືອກໃນການ -m64bit-ສອງເທົ່າ -m32bit-ສອງເທົ່າ -fpu -nofpu -mcpu= -mbig-endian-data
-mlittle-endian-data -msmall-ຂໍ້ມູນ - ຊິມ -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 - mcbranchdi
-mcmpeqdi -mfused-madd -mno-fused-madd -mfsca -mno-fsca -mfsrra -mno-fsrra
-mpretend-cmove -mtas

ແສງອາທິດ 2 ທາງເລືອກໃນການ - ຂໍ້ຄວາມທີ່ບໍ່ສະອາດ -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-ສອງເທົ່າ
-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 -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

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

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

x86-64 ທາງເລືອກໃນການ ເບິ່ງ i386 ແລະ x86-64 ທາງເລືອກ.

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-ກວດ​ສອບ​ - ການເບິ່ງເຫັນ
-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 ທີ່ມີເນື້ອໃນຂອງຫ້ອງສະໝຸດ (ໂຄງການຍ່ອຍ ຫຼືເນື້ອໃນຊຸດ).
ໄຟລ໌ດັ່ງກ່າວຍັງຖືກເອີ້ນວ່າ ຮ່າງກາຍ.

ເອກະສານ.d
D ໄຟລ໌ລະຫັດແຫຼ່ງ.

ເອກະສານ.ດີ
D ໄຟລ໌ລະຫັດການໂຕ້ຕອບ.

ເອກະສານ.dd
D ເອກະສານລະຫັດເອກະສານ.

ເອກະສານ.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
d
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. ໃຫ້ສັງເກດວ່າມາດຕະຖານນີ້ຍັງບໍ່ທັນໄດ້ຮັບການສະຫນັບສະຫນູນຢ່າງເຕັມສ່ວນ; ເບິ່ງ
<http://gcc.gnu.org/c99status.html> ສໍາລັບຂໍ້ມູນເພີ່ມເຕີມ. ຊື່ c9x ແລະ
iso9899:199x ຖືກຄັດຄ້ານ.

c11
c1x
iso9899:2011
ISO C11, ການປັບປຸງ 2011 ຂອງມາດຕະຖານ ISO C. ການສະຫນັບສະຫນູນແມ່ນບໍ່ຄົບຖ້ວນແລະ
ທົດລອງ. ຊື່ c1x ຖືກຄັດຄ້ານ.

gnu90
gnu89
ພາສາ GNU ຂອງ ISO C90 (ລວມທັງບາງລັກສະນະ C99). ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນຂອງ C
ລະຫັດ.

gnu99
gnu9x
ພາສາ GNU ຂອງ ISO C99. ເມື່ອ ISO C99 ຖືກປະຕິບັດຢ່າງເຕັມສ່ວນໃນ GCC, ນີ້ຈະ
ກາຍເປັນຄ່າເລີ່ມຕົ້ນ. ຊື່ gnu9x ຖືກຄັດຄ້ານ.

gnu11
gnu1x
ພາສາ GNU ຂອງ ISO C11. ການສະຫນັບສະຫນູນແມ່ນບໍ່ຄົບຖ້ວນແລະການທົດລອງ. ຊື່ gnu1x
ຖືກຄັດຄ້ານ.

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 ++11 ຍັງຢູ່
ການທົດລອງ, ແລະອາດຈະມີການປ່ຽນແປງໃນວິທີການທີ່ບໍ່ເຂົ້າກັນໄດ້ໃນການປ່ອຍໃນອະນາຄົດ. ຊື່
c++0x ຖືກຄັດຄ້ານ.

gnu++11
gnu++0x
ພາສາ GNU ຂອງ -std=c++11. ການຮອງຮັບ C++11 ແມ່ນຍັງທົດລອງຢູ່, ແລະອາດຈະມີການປ່ຽນແປງ
ໃນວິທີການທີ່ບໍ່ເຂົ້າກັນໄດ້ໃນການປ່ອຍໃນອະນາຄົດ. ຊື່ gnu++0x ຖືກຄັດຄ້ານ.

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

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

-fgnu89-inline
ທາງເລືອກ -fgnu89-inline ບອກ GCC ໃຫ້ໃຊ້ຄໍາສັບ GNU ແບບດັ້ງເດີມສໍາລັບ "inline"
ເຮັດວຽກໃນເວລາທີ່ຢູ່ໃນໂຫມດ C99.
ຕົວເລືອກນີ້ຖືກຍອມຮັບ ແລະຖືກລະເລີຍໂດຍ GCC ເວີຊັນ 4.1.3 ເຖິງແຕ່ບໍ່ລວມເອົາ
4.3. ໃນ GCC ຮຸ່ນ 4.3 ແລະຕໍ່ມາມັນປ່ຽນພຶດຕິກໍາຂອງ GCC ໃນໂຫມດ C99. ການນໍາໃຊ້
ຕົວເລືອກນີ້ແມ່ນເທົ່າກັບການເພີ່ມຄຸນສົມບັດຂອງຟັງຊັນ "gnu_inline" ໃຫ້ກັບທຸກຄົນ
ຟັງຊັນ inline.

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

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

- ຂໍ້ມູນ aux ຊື່​ເອ​ກະ​ສານ
ສົ່ງຜົນໃຫ້ການປະກາດຕົ້ນແບບຂອງຊື່ໄຟລ໌ທີ່ໃຫ້ໄວ້ສຳລັບຟັງຊັນທັງໝົດທີ່ປະກາດ ແລະ/ຫຼື
ກໍານົດຢູ່ໃນຫນ່ວຍງານການແປ, ລວມທັງທີ່ຢູ່ໃນໄຟລ໌ 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.

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

-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;
};

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

-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. ຄ່າເລີ່ມຕົ້ນແມ່ນລຸ້ນ 2.

ເວີຊັ່ນ 0 ຫມາຍເຖິງສະບັບທີ່ສອດຄ່ອງກັບສະເພາະ C++ ABI.
ດັ່ງນັ້ນ, ABI ທີ່ໄດ້ຮັບໂດຍໃຊ້ເວີຊັນ 0 ຈະມີການປ່ຽນແປງໃນລຸ້ນຕ່າງໆຂອງ G++
ຍ້ອນວ່າແມງໄມ້ ABI ຖືກແກ້ໄຂ.

ເວີຊັ່ນ 1 ແມ່ນລຸ້ນຂອງ C++ ABI ທີ່ປະກົດຕົວທຳອິດໃນ G++ 3.2.

ເວີຊັ່ນ 2 ແມ່ນລຸ້ນຂອງ C++ ABI ທີ່ປະກົດຕົວທຳອິດໃນ G++ 3.4.

ເວີຊັນ 3 ແກ້ໄຂຂໍ້ຜິດພາດໃນການຈັດການທີ່ຢູ່ຄົງທີ່ເປັນການໂຕ້ຖຽງແມ່ແບບ.

ເວີຊັ່ນ 4, ເຊິ່ງປະກົດໃນ G++ 4.5 ທຳອິດ, ປະຕິບັດການຈັດການມາດຕະຖານສຳລັບ vector
ປະເພດ

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

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

ເບິ່ງ - ວາບີ.

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

-fcheck-ໃໝ່
ກວດເບິ່ງວ່າຕົວຊີ້ທີ່ສົ່ງຄືນໂດຍ "operator new" ບໍ່ແມ່ນ null ກ່ອນທີ່ຈະພະຍາຍາມ
ແກ້ໄຂການຈັດສັນທີ່ເກັບຮັກສາໄວ້. ການກວດສອບນີ້ແມ່ນປົກກະຕິບໍ່ຈໍາເປັນເພາະວ່າ C ++
ມາດຕະຖານກໍານົດວ່າ "operator ໃຫມ່" ພຽງແຕ່ສົ່ງຄືນ 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-ສັກຢາ
ສັກຢາຟັງຊັນຂອງໝູ່ເຂົ້າໄປໃນຊ່ອງຊື່ທີ່ປິດລ້ອມ, ເພື່ອໃຫ້ພວກມັນເບິ່ງເຫັນໄດ້ພາຍນອກ
ຂອບເຂດຂອງຫ້ອງຮຽນທີ່ເຂົາເຈົ້າໄດ້ຖືກປະກາດ. ຫນ້າທີ່ເພື່ອນໄດ້ຖືກບັນທຶກໄວ້
ເຮັດວຽກແບບນີ້ຢູ່ໃນຄູ່ມືອ້າງອີງ C++ ແບບເກົ່າ, ແລະເວີຊັນຂອງ G++ ກ່ອນ
4.1 ເຮັດວຽກແບບນັ້ນສະເໝີ. ຢ່າງໃດກໍຕາມ, ໃນ ISO C ++ ຫນ້າທີ່ເພື່ອນທີ່ບໍ່ແມ່ນ
ປະກາດຢູ່ໃນຂອບເຂດທີ່ປິດບັງສາມາດພົບໄດ້ໂດຍການໃຊ້ການຊອກຫາທີ່ຂຶ້ນກັບການໂຕ້ຖຽງເທົ່ານັ້ນ.
ທາງເລືອກນີ້ເຮັດໃຫ້ຫມູ່ເພື່ອນຖືກສັກຢາຍ້ອນວ່າພວກເຂົາຢູ່ໃນການປ່ອຍກ່ອນຫນ້ານີ້.

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

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

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

-fextern-tls-init
-fno-extern-tls-init
ມາດຕະຖານ C ++11 ແລະ OpenMP ອະນຸຍາດໃຫ້ thread_ ທ້ອງຖິ່ນ ແລະ ກະທູ້ສ່ວນຕົວ ຕົວແປທີ່ຈະມີ
ໄດນາມິກ (ແລ່ນ) ການເລີ່ມຕົ້ນ. ເພື່ອສະຫນັບສະຫນູນນີ້, ການນໍາໃຊ້ຕົວແປດັ່ງກ່າວໄປ
ໂດຍຜ່ານຟັງຊັນ 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 ການປະຕິບັດ. ນີ້ເຮັດໃຫ້ເກີດຄວາມຜິດພາດຂອງຕົວເຊື່ອມຕໍ່ຖ້າຟັງຊັນເຫຼົ່ານີ້ບໍ່ໄດ້ຢູ່ໃນແຖວ
ຢູ່ທົ່ວທຸກແຫ່ງທີ່ເຂົາເຈົ້າເອີ້ນວ່າ.

-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++ run-time (dynamic_cast ແລະ ປະເພດ). ຖ້າເຈົ້າບໍ່
ການ​ນໍາ​ໃຊ້​ພາກ​ສ່ວນ​ຂອງ​ພາ​ສາ​ເຫຼົ່າ​ນັ້ນ​, ທ່ານ​ສາ​ມາດ​ຊ່ວຍ​ປະ​ຢັດ​ບາງ​ພື້ນ​ທີ່​ໂດຍ​ການ​ນໍາ​ໃຊ້​ທຸງ​ນີ້​. ຫມາຍ​ເຫດ​
ການຈັດການຂໍ້ຍົກເວັ້ນນັ້ນໃຊ້ຂໍ້ມູນດຽວກັນ, ແຕ່ G++ ສ້າງມັນຕາມຄວາມຕ້ອງການ. ໄດ້
dynamic_cast ຜູ້ປະກອບການຍັງສາມາດຖືກໃຊ້ສໍາລັບການສົ່ງສັນຍານທີ່ບໍ່ຕ້ອງການປະເພດເວລາແລ່ນ
ຂໍ້​ມູນ​, ເຊັ່ນ​: ໂຍນ​ໄປ "void *​" ຫຼື​ຂັ້ນ​ພື້ນ​ຖານ unambiguous​.

-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 ເພື່ອກໍານົດປະເພດທີ່ມີຊື່ດຽວກັນແຕກຕ່າງກັນ.

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

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

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

-fno-default-inline
ຢ່າຄາດເດົາ inline ສໍາລັບຫນ້າທີ່ກໍານົດຢູ່ໃນຂອບເຂດຂອງຫ້ອງຮຽນ.
ໃຫ້ສັງເກດວ່າຟັງຊັນເຫຼົ່ານີ້ມີການເຊື່ອມໂຍງເຊັ່ນຟັງຊັນ inline; ພວກເຂົາພຽງແຕ່ບໍ່ແມ່ນ
inlined ໂດຍຄ່າເລີ່ມຕົ້ນ.

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

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

ຄວາມບໍ່ເຂົ້າກັນທີ່ຮູ້ຈັກໃນ -fabi-version=2 (ຄ່າເລີ່ມຕົ້ນ) ລວມມີ:

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

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

ນີ້ແມ່ນການແກ້ໄຂໃນ -fabi-version=3.

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

mangling ແມ່ນ​ການ​ປ່ຽນ​ແປງ​ໃນ​ -fabi-version=4.

ຄວາມບໍ່ເຂົ້າກັນທີ່ຮູ້ຈັກໃນ -fabi-version=1 ປະກອບມີ:

· ການ​ຈັດ​ການ​ທີ່​ບໍ່​ຖືກ​ຕ້ອງ​ຂອງ​ຫາງ padding ສໍາ​ລັບ bit-fields. G++ ອາດຈະພະຍາຍາມບັນຈຸຂໍ້ມູນ
ເຂົ້າໄປໃນ byte ດຽວກັນກັບຫ້ອງຮຽນພື້ນຖານ. ຍົກ​ຕົວ​ຢ່າງ:

ໂຄງສ້າງ A { virtual void f(); int f1: 1; } ;
struct B : public A { int f2 : 1 ; } ;

ໃນກໍລະນີນີ້, G++ ວາງ "B::f2" ເຂົ້າໄປໃນ byte ດຽວກັນກັບ "A::f1"; compilers ອື່ນໆເຮັດ
ບໍ່. ທ່ານສາມາດຫຼີກເວັ້ນບັນຫານີ້ໄດ້ໂດຍການໃສ່ "A" ຢ່າງຊັດເຈນເພື່ອໃຫ້ຂະຫນາດຂອງມັນແມ່ນ a
ຄວາມຫຼາກຫຼາຍຂອງຂະຫນາດ byte ໃນເວທີຂອງທ່ານ; ທີ່ເຮັດໃຫ້ G ++ ແລະ compilers ອື່ນໆ
ຈັດວາງ "B" ຄືກັນ.

·ການຈັດການທີ່ບໍ່ຖືກຕ້ອງຂອງຫາງ padding ສໍາລັບຖານ virtual. G++ ບໍ່ໃຊ້ຫາງ
padding ເມື່ອວາງພື້ນຖານ virtual. ຍົກ​ຕົວ​ຢ່າງ:

ໂຄງສ້າງ A { virtual void f(); char c1; } ;
ໂຄງສ້າງ B { B(); char c2; } ;
struct C : public A, public virtual B {};

ໃນກໍລະນີນີ້, G ++ ບໍ່ໄດ້ວາງ "B" ເຂົ້າໄປໃນຫາງສໍາລັບ "A"; ອື່ນໆ
compilers ເຮັດ. ທ່ານສາມາດຫຼີກເວັ້ນບັນຫານີ້ໄດ້ໂດຍການໃສ່ "A" ຢ່າງຊັດເຈນເພື່ອໃຫ້ມັນ
ຂະ​ຫນາດ​ແມ່ນ​ຫຼາຍ​ຂອງ​ການ​ຈັດ​ຕັ້ງ​ຂອງ​ຕົນ (ລະ​ເລີຍ​ຫ້ອງ​ຮຽນ​ພື້ນ​ຖານ virtual​)​; ສາເຫດນັ້ນ
G++ ແລະ compilers ອື່ນໆເພື່ອຈັດວາງ "C" ຄືກັນ.

· ການ​ຈັດ​ການ​ບໍ່​ຖືກ​ຕ້ອງ​ຂອງ bit-fields ທີ່​ມີ​ການ​ປະ​ກາດ width ຫຼາຍ​ກ​່​ວາ​ຂອງ​ມັນ​
ປະເພດພື້ນຖານ, ໃນເວລາທີ່ bit-fields ປະກົດຢູ່ໃນສະຫະພາບ. ຍົກ​ຕົວ​ຢ່າງ:

union U { int i : 4096; } ;

ສົມມຸດວ່າ "int" ບໍ່ມີ 4096 bits, G ++ ເຮັດໃຫ້ສະຫະພັນນ້ອຍເກີນໄປໂດຍ
ຈໍານວນຂອງບິດໃນ "int".

· ຫ້ອງຮຽນຫວ່າງເປົ່າສາມາດຖືກວາງໄວ້ຢູ່ໃນການຊົດເຊີຍທີ່ບໍ່ຖືກຕ້ອງ. ຍົກ​ຕົວ​ຢ່າງ:

ໂຄງສ້າງ A {};

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

ໂຄງສ້າງ C : public B, public A {};

G++ ວາງຊັ້ນຖານ "A" ຂອງ "C" ຢູ່ທີ່ການຊົດເຊີຍທີ່ບໍ່ແມ່ນສູນ; ມັນຄວນຈະຖືກວາງໄວ້ຢູ່
ຊົດເຊີຍສູນ. G++ ເຊື່ອຜິດວ່າສະມາຊິກຂໍ້ມູນ "A" ຂອງ "B" ແມ່ນແລ້ວ
ຢູ່ທີ່ສູນຊົດເຊີຍ.

· ຊື່​ຂອງ​ຫນ້າ​ທີ່​ຂອງ​ແມ່​ແບບ​ທີ່​ປະ​ເພດ​ທີ່​ກ່ຽວ​ຂ້ອງ​ກັບ "typename​" ຫຼື​ແມ່​ແບບ​
ຕົວກໍານົດການສາມາດ mangled ບໍ່ຖືກຕ້ອງ.

ແມ່ແບບ
void f(typename Q::X) {}

ແມ່ແບບ ຊັ້ນ Q >
void f(typename Q ::X) {}

ການຢືນຢັນຂອງແມ່ແບບເຫຼົ່ານີ້ອາດຈະຖືກຈັດການບໍ່ຖືກຕ້ອງ.

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

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

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

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

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

-Wdelete-ບໍ່ແມ່ນ virtual-dtor (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອ ລຶບ ຖືກນໍາໃຊ້ເພື່ອທໍາລາຍຕົວຢ່າງຂອງຫ້ອງຮຽນທີ່ມີຫນ້າທີ່ virtual
ແລະຜູ້ທໍາລາຍທີ່ບໍ່ແມ່ນ virtual. ມັນບໍ່ປອດໄພທີ່ຈະລຶບຕົວຢ່າງຂອງຊັ້ນຮຽນທີ່ມາຈາກ
ຜ່ານຕົວຊີ້ໄປຫາຫ້ອງຮຽນພື້ນຖານ ຖ້າຊັ້ນພື້ນຖານບໍ່ມີ 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 ປະເມີນເປັນຜິດເນື່ອງຈາກການໂທຫາຟັງຊັນ
ທີ່​ບໍ່​ມີ​ຂໍ້​ຍົກ​ເວັ້ນ​ການ​ຍົກ​ເວັ້ນ​ການ​ບໍ່​ຖິ້ມ (ie ຖິ້ມ() or ບໍ່ມີຂໍ້ຍົກເວັ້ນ)
ແຕ່ເປັນທີ່ຮູ້ຈັກໂດຍຜູ້ລວບລວມຂໍ້ມູນທີ່ຈະບໍ່ເຄີຍຖິ້ມຂໍ້ຍົກເວັ້ນ.

-Wnon-virtual-dtor (C++ ແລະ Objective-C++ ເທົ່ານັ້ນ)
ເຕືອນເມື່ອຫ້ອງຮຽນມີຟັງຊັນສະເໝືອນ ແລະຕົວທຳລາຍທີ່ບໍ່ສະເໝືອນທີ່ສາມາດເຂົ້າເຖິງໄດ້, ໃນ
ກໍລະນີໃດເປັນໄປໄດ້ແຕ່ບໍ່ປອດໄພທີ່ຈະລຶບຕົວຢ່າງຂອງຊັ້ນຮຽນທີ່ມາຈາກ
ຕົວຊີ້ໄປຫາຫ້ອງຮຽນພື້ນຖານ. ການເຕືອນນີ້ຍັງຖືກເປີດໃຊ້ງານຖ້າ -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++1y. ນີ້
ທາງ​ເລືອກ​ແມ່ນ​ປິດ​ເປັນ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ ISO C++ 11 ເປັນ​ຕົ້ນ​ໄປ (-std=c++11, ...).

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

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

· ລາຍການທີ 11: ກຳນົດຕົວສ້າງສຳເນົາ ແລະຕົວປະຕິບັດການມອບໝາຍສຳລັບຫ້ອງຮຽນດ້ວຍ
ຫນ່ວຍຄວາມຈໍາທີ່ຈັດສັນແບບໄດນາມິກ.

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

· ລາຍການທີ 14: ເຮັດໃຫ້ຜູ້ທຳລາຍເປັນ virtual ໃນຫ້ອງຮຽນພື້ນຖານ.

· ລາຍການທີ 15: ໃຫ້ "operator=" ສົ່ງຄືນການອ້າງອີງເຖິງ * ອັນນີ້.

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

ນອກຈາກນີ້ຍັງເຕືອນກ່ຽວກັບການລະເມີດຄໍາແນະນໍາຮູບແບບຕໍ່ໄປນີ້ຈາກ Scott Meyers' ເພີ່ມເຕີມ
ປະສິດທິພາບ C ++ ປື້ມ:

· ລາຍການທີ 6: ຈໍາແນກລະຫວ່າງຮູບແບບ prefix ແລະ postfix ຂອງ increment ແລະ decrement
ຜູ້ປະກອບການ.

· ລາຍການ 7: ຢ່າໂຫຼດ "&&", "||", ຫຼື ",".

ໃນ​ເວ​ລາ​ທີ່​ເລືອກ​ເອົາ​ທາງ​ເລືອກ​ນີ້​, ຮັບ​ຮູ້​ວ່າ​ຫົວ​ຫ້ອງ​ສະ​ຫມຸດ​ມາດ​ຕະ​ຖານ​ບໍ່​ໄດ້​ເຊື່ອ​ຟັງ​ທັງ​ຫມົດ​
ຂອງຄໍາແນະນໍາເຫຼົ່ານີ້; ໃຊ້ 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, ສະຖິຕິ _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("...")" ໂດຍບໍ່ຄໍານຶງເຖິງຕົວເລືອກແຖວຄໍາສັ່ງ.

-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 ຕົວລະຄອນ. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 72 ຕົວອັກສອນສຳລັບ g ++ ແລະ 0 ສໍາລັບສ່ວນທີ່ເຫຼືອຂອງດ້ານຫນ້າສະຫນັບສະຫນູນໂດຍ
GCC. ຖ້າ n ແມ່ນສູນ, ຫຼັງຈາກນັ້ນບໍ່ມີການຫໍ່ເສັ້ນແມ່ນເຮັດ; ແຕ່​ລະ​ຂໍ້​ຄວາມ​ຜິດ​ພາດ​ປາ​ກົດ​ຢູ່​ໃນ a
ເສັ້ນດຽວ.

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

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

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

-fno-diagnostics-show-caret
ໂດຍຄ່າເລີ່ມຕົ້ນ, ແຕ່ລະການວິນິດໄສທີ່ປ່ອຍອອກມາລວມມີສາຍຕົ້ນສະບັບ ແລະ ຄາບ '^'
ຊີ້ບອກຖັນ. ທາງເລືອກນີ້ສະກັດກັ້ນຂໍ້ມູນນີ້.

ທາງເລືອກໃນການ 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++ ພາສາ ທາງເລືອກໃນການ.

ເມື່ອມີການຮ້ອງຂໍທາງເລືອກເຕືອນທີ່ບໍ່ຮູ້ຈັກ (ຕົວຢ່າງ: - ການ​ເຕືອນ​ໄພ​ບໍ່​ຮູ້​ຈັກ​), 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, ຍົກເວັ້ນວ່າຄວາມຜິດພາດແມ່ນຜະລິດແທນທີ່ຈະເປັນການເຕືອນ.

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

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

-waddress - Warray-bounds (ພຽງແຕ່ກັບ -O2) -Wc++11-compat -Wchar-subscripts
-Wenum ປຽບທຽບ (ໃນ C/ObjC; ອັນນີ້ແມ່ນເປີດໂດຍຄ່າເລີ່ມຕົ້ນໃນ C++) -Wimplicit-int (ຄ ແລະ
Objective-C ເທົ່ານັ້ນ) -Wimplicit-function-ປະກາດ (C ແລະ Objective-C ເທົ່ານັ້ນ) - ຄໍາເຫັນ
-Wformat - ຜູ້ຍິງ (ພຽງແຕ່ສໍາລັບ C/ObjC ແລະເວັ້ນເສຍແຕ່ - freestanding) -Wmaybe-unitialized
-Wmissing-braces (ສະເພາະ C/ObjC) -Wnonnull -Wparentheses -Wpointer-ເຊັນ​ - ຄໍາ​ສັ່ງ​
- ປະ​ເພດ Wreturn​ - ລໍາດັບຈຸດ -Wsign-ປຽບທຽບ (ສະເພາະໃນ C++) - ເປັນການລ້າສຸດ
-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++ ເທົ່ານັ້ນ) ພື້ນຖານ virtual ທີ່ບໍ່ຊັດເຈນ.

· (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.)

ຫມາຍ​ເຫດ​: ໃນ 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 ຖືກກໍານົດ. ຂໍ້ຍົກເວັ້ນພຽງແຕ່ ຕົ້ນຕໍ ແລະ ໜ້າ ທີ່
ກໍານົດຢູ່ໃນສ່ວນຫົວຂອງລະບົບ.

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

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

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

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

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

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

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

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

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

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

ເພື່ອສະກັດກັ້ນການເຕືອນໄພນີ້, ໃຫ້ໃຊ້ ບໍ່ໃຊ້ attribute

-Wunused-value
ເຕືອນທຸກຄັ້ງທີ່ຄຳຖະແຫຼງຄຳນວນຜົນທີ່ບໍ່ໄດ້ໃຊ້ຢ່າງຈະແຈ້ງ. ເພື່ອສະກັດກັ້ນ
ຄໍາເຕືອນນີ້ໂຍນການສະແດງອອກທີ່ບໍ່ໄດ້ໃຊ້ໄປ void. ນີ້ປະກອບມີຄໍາຖະແຫຼງການສະແດງອອກ
ຫຼືດ້ານຊ້າຍມືຂອງເຄື່ອງໝາຍຈຸດທີ່ບໍ່ມີຜົນຂ້າງຄຽງ. ສໍາລັບ
ຕົວຢ່າງ, ການສະແດງອອກເຊັ່ນ 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 ບໍ່ສະຫລາດພໍທີ່ຈະເຫັນເຫດຜົນທັງຫມົດວ່າເປັນຫຍັງລະຫັດອາດຈະຖືກຕ້ອງ
ເຖິງວ່າຈະມີປະກົດວ່າມີຄວາມຜິດພາດ. ນີ້ແມ່ນຕົວຢ່າງຫນຶ່ງຂອງວິທີການນີ້ສາມາດເກີດຂຶ້ນໄດ້:

{
intx;
ສະຫຼັບ (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.

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

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

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

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

ລະດັບ 3 (ຄ່າເລີ່ມຕົ້ນສໍາລັບ - ເປັນການລ້າສຸດ): ຄວນມີຂໍ້ດີທີ່ບໍ່ຖືກຕ້ອງຫຼາຍ ແລະໜ້ອຍຫຼາຍ
ທາງລົບທີ່ບໍ່ຖືກຕ້ອງ. ຊ້າກວ່າລະດັບ 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 ຫຼືກັບຄືນຜິດປົກກະຕິໂດຍການຖິ້ມ, ເອີ້ນວ່າ "abort()" ຫຼືໃສ່ກັບດັກ. ນີ້
ການວິເຄາະຮຽກຮ້ອງໃຫ້ມີທາງເລືອກ -fipa-pure-const, ເຊິ່ງຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງກວ່າ. ລະດັບການເພີ່ມປະສິດທິພາບທີ່ສູງຂຶ້ນປັບປຸງຄວາມຖືກຕ້ອງຂອງການວິເຄາະ.

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

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

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

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

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

-Wtrampoline
ເຕືອນກ່ຽວກັບ trampolines ທີ່ສ້າງຂຶ້ນສໍາລັບຕົວຊີ້ໄປຫາຫນ້າທີ່ຊ້ອນກັນ.

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

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

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

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

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

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

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

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

·ທ 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 ແລະບໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນໂດຍ GCC ຮຸ່ນກ່ອນ GCC 3.0.

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

-wno-endif-labels
ຢ່າເຕືອນທຸກຄັ້ງທີ່ #ອື່ນ or an #ສຸດທ້າຍ ຕິດຕາມດ້ວຍຂໍ້ຄວາມ.

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

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

-Wbad-function-cast (C ແລະ Objective-C ເທົ່ານັ້ນ)
ເຕືອນທຸກຄັ້ງທີ່ການໂທຟັງຊັນຖືກສົ່ງສັນຍານໄປຫາປະເພດທີ່ບໍ່ກົງກັນ. ຕົວຢ່າງ, ເຕືອນຖ້າ
"int malloc()" ຖືກໂຍນເປັນ "ອັນໃດອັນໜຶ່ງ *".

-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. ຄໍາເຕືອນນີ້
ເປີດ - ການ​ຂັດ​ຂວາງ​ ແລະຖືກເປີດໃຊ້ໂດຍ - ຝາ.

-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 or vfork. ການ​ເຕືອນ​ໄພ​ນີ້​ຍັງ​
ເປີດໃຊ້ໂດຍ -Wextra.

- ການ​ປ່ຽນ​ແປງ​
ເຕືອນສໍາລັບການແປງ 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.

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

- ຮ່າງກາຍອ່ອນເພຍ
ເຕືອນ ຖ້າ ຫາກ ວ່າ ຮ່າງ ກາຍ ເປົ່າ ເກີດ ຂຶ້ນ ໃນ if, ອື່ນ or do ໃນຂະນະທີ່ ຖະແຫຼງການ. ການເຕືອນໄພນີ້ແມ່ນ
ຍັງເປີດໃຊ້ງານໂດຍ -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, ທາງເລືອກນີ້ຖືກເປີດໃຊ້ໂດຍ - ການ​ປ່ຽນ​ແປງ​.

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

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

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

-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-ຕົ້ນແບບ ການກວດສອບ
ຕົ້ນແບບທີ່ຂາດຫາຍໄປ. ໃນ 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 } ;

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

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

-Wnormalized=
ໃນ 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ທີ່ຢູ່ ທ່ານ
ຄວນເຮັດແນວນີ້ພຽງແຕ່ຖ້າທ່ານໃຊ້ບາງໂຄງການປົກກະຕິອື່ນໆ (ເຊັ່ນ "D"),
ເນື່ອງຈາກວ່າຖ້າບໍ່ດັ່ງນັ້ນທ່ານສາມາດສ້າງແມງໄມ້ທີ່ບໍ່ສາມາດເຫັນໄດ້ຊັດເຈນ.

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

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

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

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

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

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

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

ໂຄງສ້າງ foo {
intx;
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++ ເທົ່ານັ້ນ)
ສະກັດກັ້ນການເຕືອນໄພຈາກການນໍາໃຊ້ ຊົດເຊີຍຂອງ ມະຫາພາກເປັນປະເພດທີ່ບໍ່ແມ່ນ POD. ອີງ​ຕາມ
ມາດຕະຖານ ISO C++ ປີ 1998, ນຳໃຊ້ ຊົດເຊີຍຂອງ ປະເພດທີ່ບໍ່ແມ່ນ POD ແມ່ນບໍ່ໄດ້ກໍານົດ. ໃນ
ການປະຕິບັດ C++ ທີ່ມີຢູ່ແລ້ວ, ຢ່າງໃດກໍຕາມ, ຊົດເຊີຍຂອງ ໂດຍປົກກະຕິໃຫ້ຜົນໄດ້ຮັບທີ່ມີຄວາມຫມາຍ
ເຖິງແມ່ນວ່າໃນເວລາທີ່ນໍາໃຊ້ກັບບາງປະເພດຂອງປະເພດທີ່ບໍ່ແມ່ນ POD (ເຊັ່ນ: ງ່າຍດາຍ ໂຄງສ້າງ ທີ່
ລົ້ມເຫລວທີ່ຈະເປັນປະເພດ POD ພຽງແຕ່ຍ້ອນມີຜູ້ກໍ່ສ້າງ). ທຸງນີ້ແມ່ນສໍາລັບ
ຜູ້ໃຊ້ທີ່ຮູ້ວ່າພວກເຂົາກໍາລັງຂຽນລະຫັດ nonportable ແລະຜູ້ທີ່ມີເຈດຕະນາ
ເລືອກທີ່ຈະບໍ່ສົນໃຈຄໍາເຕືອນກ່ຽວກັບມັນ.

ຂໍ້​ຈໍາ​ກັດ​ກ່ຽວ​ກັບ​ການ​ ຊົດເຊີຍຂອງ ອາດຈະໄດ້ຮັບການຜ່ອນຄາຍໃນມາດຕະຖານ 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 pedantic, ຫຼື syntax ສຳຮອງ GNU
ເມື່ອຢູ່ໃນໂໝດ ISO C99 pedantic. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ. ເພື່ອຍັບຍັ້ງຂໍ້ຄວາມເຕືອນ, ໃຊ້
-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.

-Wno-mudflap
ສະກັດກັ້ນການເຕືອນໄພກ່ຽວກັບການກໍ່ສ້າງທີ່ບໍ່ສາມາດໄດ້ຮັບການນໍາໃຊ້ໂດຍ -fmudflap.

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

ທາງເລືອກໃນການ ສໍາລັບການ 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.

-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; ສະບັບເລີ່ມຕົ້ນສໍາລັບເປົ້າຫມາຍສ່ວນໃຫຍ່ແມ່ນ 4.

ໃຫ້ສັງເກດວ່າດ້ວຍ 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-ສະບັບພາສາ.

-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, ເຄື່ອງກວດຈັບຄວາມຜິດພາດຄວາມຈຳໄວ. ຄໍາແນະນໍາການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາ
ຈະຖືກນຳໃຊ້ເພື່ອກວດຫາຂໍ້ບົກພ່ອງທີ່ຢູ່ນອກຂອບເຂດ ແລະການນຳໃຊ້ພາຍຫຼັງທີ່ບໍ່ມີຂໍ້ບົກພ່ອງ. ເບິ່ງ
<http://code.google.com/p/address-sanitizer/> ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.

-fsanitize=ກະທູ້
ເປີດໃຊ້ ThreadSanitizer, ເຄື່ອງກວດຈັບຂໍ້ມູນເຊື້ອຊາດໄວ. ຄໍາແນະນໍາການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາຈະເປັນ
ເຄື່ອງ​ມື​ເພື່ອ​ກວດ​ສອບ​ຂໍ້​ມູນ​ເຊື້ອ​ຊາດ​ແມງ​ໄມ້​. ເບິ່ງ
<http://code.google.com/p/data-race-test/wiki/ThreadSanitizer> ສໍາລັບລາຍລະອຽດເພີ່ມເຕີມ.

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

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

ຖ້າເຄື່ອງໝາຍເທົ່າທຽມກັນຖືກລະເວັ້ນ, ຄ່າເລີ່ມຕົ້ນ -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 [ແມ່ນ:|ind:][ຄໍາສັ່ງ:|gen:](ໃດ|sys|ຖານ|none)

ຄໍາທໍາອິດທາງເລືອກຈໍາກັດການກໍານົດສະເພາະກັບໂຄງສ້າງທີ່ຖືກນໍາໃຊ້ໂດຍກົງ
(ແມ່ນ:) ຫຼື​ໃຊ້​ໂດຍ​ທາງ​ອ້ອມ (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. ທ່ານຕ້ອງໃຊ້ຕົວເລືອກນີ້ໃນເວລາລວບລວມໄຟລ໌ແຫຼ່ງທີ່ທ່ານຕ້ອງການຂໍ້ມູນ,
ແລະທ່ານຍັງຕ້ອງໃຊ້ມັນໃນເວລາເຊື່ອມຕໍ່.

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

-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 (ອັນສຸດທ້າຍຫມາຍເຖິງ
ອະດີດ).

· ດໍາເນີນການໂຄງການໃນວຽກງານຕົວແທນເພື່ອສ້າງໂປຣໄຟລ໌ 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()" ກັບຄືນ true ສະເໝີ ເວັ້ນເສຍແຕ່ວ່າຂອບເຂດເທິງຈະຖືກຕັ້ງໂດຍຕົວເລືອກນີ້. ສໍາລັບ
ຕົວຢ່າງ, ກັບ -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-regmove
ຖິ້ມຫຼັງຈາກລົງທະບຽນຍ້າຍຜ່ານ.

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 ແລະ -fdump-rtl-sched2 ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກບລັອກພື້ນຖານ
ກໍານົດເວລາຜ່ານ.

-fdump-rtl-ເບິ່ງ
ການຖິ້ມຂີ້ເຫຍື້ອຫຼັງຈາກການລົບລ້າງການຂະຫຍາຍປ້າຍ.

-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-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 ເລີ່ມຕົ້ນທີ່ແຕກຕ່າງກັນ.

-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 ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຂີ້ຕົມ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກເພີ່ມເຄື່ອງມື mudflap. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .ຂີ້ຕົມ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ທ່ານ / ນາງ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກປະຕິບັດການທົດແທນການລວບລວມຂໍ້ມູນ. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .sra ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຈົມລົງ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກປະຕິບັດການຈົມລົງລະຫັດ. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .ຈົມ ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

dom ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງຕົ້ນໄມ້ເດັ່ນ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .dom ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ເວົ້າ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ການກໍາຈັດຮ້ານຄ້າທີ່ຕາຍແລ້ວ. ຊື່ໄຟລ໌ແມ່ນເຮັດ
ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .dse ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

phiopt
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກເພີ່ມປະສິດທິພາບ PHI nodes ເຂົ້າໄປໃນລະຫັດເສັ້ນກົງ. ໄຟລ໌
ຊື່ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .phiopt ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

forwprop
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກສົ່ງຕໍ່ຂະຫຍາຍຕົວແປທີ່ໃຊ້ດຽວ. ຊື່ໄຟລ໌
ແມ່ນ​ເຮັດ​ໄດ້​ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .forwprop ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ຊື່ສຳເນົາ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງການປ່ຽນຊື່ສຳເນົາ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .copyrename ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ສະບັບເລກທີ ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກນຳໃຊ້ການປັບແຕ່ງຄ່າສົ່ງຄືນທີ່ມີຊື່ໃນແບບທົ່ວໄປ
ຕົ້ນໄມ້. ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍການຕໍ່ທ້າຍ .nrv ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ວີທີ
ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ vectorization ຂອງ loops. ຊື່ໄຟລ໌ແມ່ນເຮັດ
ໂດຍ​ການ​ຕໍ່​ທ້າຍ​ .vect ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

slp ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກໃຊ້ vectorization ຂອງຕັນພື້ນຖານ. ຊື່ໄຟລ໌ແມ່ນ
ເຮັດ​ໂດຍ​ການ​ຕໍ່​ເຕີມ​ .slp ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

vp ຖິ້ມແຕ່ລະຟັງຊັນຫຼັງຈາກການຂະຫຍາຍພັນມູນຄ່າ (VRP). ຊື່ໄຟລ໌ແມ່ນເຮັດໂດຍ
ເພີ່ມເຕີມ .vrp ກັບຊື່ໄຟລ໌ແຫຼ່ງ.

ທັງຫມົດ ເປີດໃຊ້ການຖິ້ມຕົ້ນໄມ້ທັງໝົດທີ່ມີທຸງທີ່ມີໃຫ້ຢູ່ໃນຕົວເລືອກນີ້.

-fopt-info
- fopt-ຂໍ້​ມູນ-ທາງເລືອກໃນການ
- fopt-ຂໍ້​ມູນ-ທາງເລືອກໃນການ=ຊື່​ເອ​ກະ​ສານ
ຄວບ​ຄຸມ​ການ​ປະ​ຕິ​ບັດ dumps ຈາກ​ຜ່ານ​ການ​ປັບ​ປຸງ​ຕ່າງໆ​. ຖ້າ -ທາງເລືອກໃນການ ແບບຟອມແມ່ນ
ໃຊ້ແລ້ວ, ທາງເລືອກໃນການ ແມ່ນບັນຊີລາຍຊື່ຂອງ - ແຍກທາງເລືອກໃນການເລືອກລາຍລະອຽດ dump ແລະ
ການເພີ່ມປະສິດທິພາບ. ຖ້າ ທາງເລືອກໃນການ ບໍ່ໄດ້ລະບຸໄວ້, ມັນຕັ້ງໄວ້ໃນຕອນຕົ້ນ ທັງຫມົດ ສໍາ​ລັບ​ລາຍ​ລະ​ອຽດ​ແລະ​ optall
ສໍາລັບກຸ່ມການເພີ່ມປະສິດທິພາບ. ຖ້າ ຊື່​ເອ​ກະ​ສານ ບໍ່ໄດ້ລະບຸໄວ້, ມັນຕັ້ງໄວ້ໃນຕອນຕົ້ນ stderr. ຫມາຍ​ເຫດ​
ວ່າຜົນຜະລິດ ຊື່​ເອ​ກະ​ສານ ຈະຖືກຂຽນທັບໃນກໍລະນີທີ່ມີຫົວໜ່ວຍການແປຫຼາຍອັນ. ຖ້າ
ຕ້ອງການຜົນຜະລິດລວມຈາກຫຼາຍຫນ່ວຍການແປ, stderr ຄວນຈະຖືກນໍາໃຊ້
ແທນທີ່ຈະເປັນ.

ທາງເລືອກສາມາດແບ່ງອອກເປັນສອງກຸ່ມ, 1) ທາງເລືອກໃນການອະທິບາຍ verbosity ຂອງ
dump, ແລະ 2) ທາງ​ເລືອກ​ທີ່​ອະ​ທິ​ບາຍ​ວ່າ​ການ​ປັບ​ປຸງ​ທີ່​ຄວນ​ຈະ​ໄດ້​ຮັບ​ການ​ລວມ​. ທາງເລືອກ
ຈາກທັງສອງກຸ່ມສາມາດປະສົມກັນໄດ້ຢ່າງເສລີຍ້ອນວ່າພວກມັນບໍ່ທັບຊ້ອນກັນ. ຢ່າງໃດກໍຕາມ, ໃນກໍລະນີ
ຂອງຂໍ້ຂັດແຍ່ງໃດໆ, ທາງເລືອກສຸດທ້າຍ override ທາງເລືອກກ່ອນຫນ້ານີ້ໃນເສັ້ນຄໍາສັ່ງ.
ເຖິງແມ່ນວ່າຫຼາຍທາງເລືອກ -fopt-info ໄດ້ຮັບການຍອມຮັບ, ມີພຽງແຕ່ຫນຶ່ງຂອງເຂົາເຈົ້າສາມາດມີ =ຊື່ໄຟລ໌.
ຖ້າຊື່ໄຟລ໌ອື່ນຖືກສະຫນອງໃຫ້ຫຼັງຈາກນັ້ນທັງຫມົດແຕ່ອັນທໍາອິດຈະຖືກລະເລີຍ.

dump verbosity ມີທາງເລືອກຕໍ່ໄປນີ້

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

ພາດໂອກາດນີ້
ພິມຂໍ້ມູນກ່ຽວກັບການເພີ່ມປະສິດທິພາບທີ່ພາດ. ບຸກຄົນຜ່ານການຄວບຄຸມທີ່
ຂໍ້ມູນທີ່ຈະລວມຢູ່ໃນຜົນຜະລິດ. ຍົກ​ຕົວ​ຢ່າງ,

gcc -O2 -ftree-vectorize -fopt-info-vec-ພາດ

ຈະພິມຂໍ້ມູນກ່ຽວກັບໂອກາດການເພີ່ມປະສິດທິພາບທີ່ພາດຈາກ vectorization
ຜ່ານ stderr.

ຫມາຍ​ເຫດ​
ພິມຂໍ້ມູນ verbose ກ່ຽວກັບການເພີ່ມປະສິດທິພາບ, ເຊັ່ນ: ການຫັນປ່ຽນທີ່ແນ່ນອນ,
ຂໍ້ຄວາມລາຍລະອຽດເພີ່ມເຕີມກ່ຽວກັບການຕັດສິນໃຈແລະອື່ນໆ.

ທັງຫມົດ ພິມຂໍ້ມູນການເພີ່ມປະສິດທິພາບລະອຽດ. ນີ້ປະກອບມີ ທີ່ດີທີ່ສຸດ, ພາດໂອກາດນີ້, ແລະ
ຫມາຍ​ເຫດ​.

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

ອີນເຕີເນັດ ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຈາກການເພີ່ມປະສິດທິພາບລະຫວ່າງຂັ້ນຕອນທັງຫມົດ.

loop
ເປີດໃຊ້ການ dumps ຈາກການເພີ່ມປະສິດທິພາບ loop ທັງຫມົດ.

inline
ເປີດໃຊ້ການ dumps ຈາກການເພີ່ມປະສິດທິພາບ inlining ທັງຫມົດ.

ສິ່ງໜຶ່ງ ເປີດໃຊ້ການຖິ້ມຂີ້ເຫຍື້ອຈາກການເພີ່ມປະສິດທິພາບ vectorization ທັງຫມົດ.

ຍົກ​ຕົວ​ຢ່າງ,

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

ຜົນ​ໄດ້​ຮັບ​ພາດ​ໂອ​ກາດ​ການ​ປັບ​ປຸງ​ບົດ​ລາຍ​ງານ​ຈາກ​ການ​ຜ່ານ​ທັງ​ຫມົດ​ເຂົ້າ​ໄປ​ໃນ missed.ທັງໝົດ.

ເປັນຕົວຢ່າງອື່ນ,

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

ຈະສົ່ງອອກຂໍ້ມູນກ່ຽວກັບການເພີ່ມປະສິດທິພາບທີ່ພາດໄປເຊັ່ນດຽວກັນກັບສະຖານທີ່ທີ່ດີທີ່ສຸດຈາກ
inlining ທັງຫມົດຜ່ານເຂົ້າໄປໃນ inline.txt.

ຖ້າ ຊື່​ເອ​ກະ​ສານ ໄດ້ຖືກສະຫນອງໃຫ້, ຫຼັງຈາກນັ້ນ dumps ຈາກການເພີ່ມປະສິດທິພາບທັງຫມົດແມ່ນ
concatenated ເຂົ້າໄປໃນ ຊື່​ເອ​ກະ​ສານ. ຖ້າບໍ່ດັ່ງນັ້ນ dump ແມ່ນຜົນຜະລິດໃສ່ stderrທີ່ຢູ່ ຖ້າຫາກວ່າ ທາງເລືອກໃນການ
ຖືກລະເວັ້ນ, ມັນຕັ້ງໄວ້ໃນຕອນຕົ້ນ All-optall, ຊຶ່ງຫມາຍຄວາມວ່າ dump ການເພີ່ມປະສິດທິພາບທີ່ມີຢູ່ທັງຫມົດ
ຂໍ້​ມູນ​ຈາກ​ການ​ຜ່ານ​ທັງ​ຫມົດ​. ໃນຕົວຢ່າງຕໍ່ໄປນີ້, ຂໍ້ມູນການເພີ່ມປະສິດທິພາບທັງຫມົດແມ່ນຜົນໄດ້ຮັບ
to stderr.

gcc -O3 -fopt-info

ໃຫ້ສັງເກດວ່າ -fopt-info-vec-ພາດ ປະຕິບັດຕົວຄືກັນກັບ -fopt-info-missed-vec.

ເປັນຕົວຢ່າງອື່ນ, ພິຈາລະນາ

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

ທີ່ນີ້ທັງສອງຊື່ໄຟລ໌ຜົນຜະລິດ vec.mis ແລະ loop.opt ມີຄວາມຂັດແຍ້ງນັບຕັ້ງແຕ່ພຽງແຕ່ຫນຶ່ງ
ໄຟລ໌ຜົນຜະລິດໄດ້ຮັບອະນຸຍາດ. ໃນກໍລະນີນີ້, ພຽງແຕ່ທາງເລືອກທໍາອິດທີ່ມີຜົນກະທົບແລະ
ທາງເລືອກຕໍ່ມາຖືກລະເລີຍ. ດັ່ງນັ້ນພຽງແຕ່ vec.mis ແມ່ນຜະລິດ cotaints ໃດ
dumps ຈາກ vectorizer ກ່ຽວກັບໂອກາດພາດ.

-ftree-vectorizer-verbose=n
ຕົວເລືອກນີ້ຖືກປະຕິເສດ ແລະຖືກປະຕິບັດໃນເງື່ອນໄຂ -fopt-info. ກະລຸນາໃຊ້
- fopt-ຂໍ້​ມູນ-ປະເພດ ແທນທີ່ຈະ, ບ່ອນທີ່ ປະເພດ ແມ່ນໜຶ່ງໃນຕົວເລືອກຂໍ້ມູນທີ່ຖືກຕ້ອງ. ມັນ
ພິມຂໍ້ມູນການເພີ່ມປະສິດທິພາບເພີ່ມເຕີມ. ສໍາລັບ n=0 ບໍ່ມີຂໍ້ມູນການວິນິດໄສ
ລາຍງານ. ຖ້າ n=1 vectorizer ລາຍງານແຕ່ລະ loop ທີ່ໄດ້ຮັບ vectorized, ແລະຈໍານວນທັງຫມົດ
ຈໍານວນຂອງ loops ທີ່ໄດ້ຮັບ vectorized. ຖ້າ n=2 vectorizer ລາຍງານສະຖານທີ່ທີ່
ບໍ່ສາມາດຖືກ vectorized ແລະເຫດຜົນສໍາລັບການເຫຼົ່ານັ້ນ. ສໍາລັບລະດັບ verbosity ທີ່ສູງກວ່າທັງຫມົດ
ຂໍ້ມູນການວິເຄາະແລະການຫັນປ່ຽນຈາກ vectorizer ໄດ້ຖືກລາຍງານ.

ໃຫ້ສັງເກດວ່າຂໍ້ມູນຜົນຜະລິດໂດຍ -ftree-vectorizer-verbose ທາງເລືອກແມ່ນຖືກສົ່ງໄປຫາ
stderr. ຖ້າ​ຫາກ​ວ່າ​ຮູບ​ແບບ​ທີ່​ທຽບ​ເທົ່າ​ - fopt-ຂໍ້​ມູນ-ທາງເລືອກໃນການ=ຊື່​ເອ​ກະ​ສານ ຖືກນໍາໃຊ້ຫຼັງຈາກນັ້ນຜົນຜະລິດແມ່ນ
ສົ່ງເຂົ້າ ຊື່​ເອ​ກະ​ສານ ແທນທີ່ຈະເປັນ.

-frandom-seed=string
ຕົວເລືອກນີ້ສະຫນອງແນວພັນທີ່ GCC ໃຊ້ແທນຕົວເລກແບບສຸ່ມໃນການສ້າງ
ຊື່ສັນຍາລັກທີ່ແນ່ນອນຈະຕ້ອງແຕກຕ່າງກັນໃນທຸກໄຟລ໌ທີ່ລວບລວມ. ມັນຍັງເປັນ
ໃຊ້ເພື່ອວາງສະແຕມທີ່ເປັນເອກະລັກໃນໄຟລ໌ຂໍ້ມູນການຄຸ້ມຄອງແລະໄຟລ໌ວັດຖຸທີ່ຜະລິດ
ເຂົາເຈົ້າ. ທ່ານສາມາດນໍາໃຊ້ໄດ້ - ເມັດພັນ ທາງເລືອກທີ່ຈະຜະລິດວັດຖຸທີ່ມີລັກສະນະດຽວກັນ
ໄຟລ໌.

ໄດ້ string ຄວນຈະແຕກຕ່າງກັນສໍາລັບທຸກໆໄຟລ໌ທີ່ທ່ານລວບລວມ.

-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-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 ເຮືອນ6.

-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, ຄະ -fcompare-elim -fcprop-ລົງທະບຽນ -fdce -fdefer-pop -fdelayed-ສາຂາ
-fdse -fguess-ສາຂາ-ຄວາມເປັນໄປໄດ້ -fif ການ​ປ່ຽນ​ແປງ 2​ -fif ການ​ປ່ຽນ​ແປງ​ -fipa-pure-const
-fipa-profile -fipa ອ້າງ​ອີງ​ -fmerge-ຄົງທີ່ -fsplit-wide-types -ftree-bit-ccp
-ftree-builtin-call-dce -ftree-ccp -ftre-ch -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 -fexpensive-optimizations -fgcse
-fgcse-lm -fhoist-adjacent-loads -finline-small-functions -findirect-inlining
-fipa-sra -foptimize-sibling-calls -fpartial-inlining -fpeephole2 -fregmove
-freorder-ຕັນ -freorder - ຫນ້າ​ທີ່​ -frerun-cse-after-loop -fsched-interblock
-fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-aliasing -fstrict-ລົ້ນ
-ftre-switch-ແປງ -ftree-tail-merge -ftre-pre -ftree-vrp

ກະລຸນາສັງເກດຄໍາເຕືອນພາຍໃຕ້ -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-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-default-inline
ຢ່າເຮັດໃຫ້ຫນ້າທີ່ສະມາຊິກຢູ່ໃນແຖວໂດຍຄ່າເລີ່ມຕົ້ນພຽງແຕ່ຍ້ອນວ່າພວກມັນຖືກກໍານົດພາຍໃນ
ຂອບເຂດຫ້ອງຮຽນ (C++ ເທົ່ານັ້ນ). ຖ້າບໍ່ດັ່ງນັ້ນ, ໃນເວລາທີ່ທ່ານກໍານົດ -O, ຫນ້າທີ່ສະມາຊິກກໍານົດ
ພາຍໃນຂອບເຂດຫ້ອງຮຽນຖືກລວບລວມຢູ່ໃນແຖວໂດຍຄ່າເລີ່ມຕົ້ນ; ie, ທ່ານບໍ່ຈໍາເປັນຕ້ອງເພີ່ມ inline
ຢູ່ຕໍ່ໜ້າຊື່ຟັງຊັນສະມາຊິກ.

-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"
ຄວບຄຸມວ່າເຄື່ອງຈັກເປົ້າໝາຍຮອງຮັບທຸງນີ້ຫຼືບໍ່.

ເລີ່ມຕົ້ນດ້ວຍ GCC ຮຸ່ນ 4.6, ການຕັ້ງຄ່າເລີ່ມຕົ້ນ (ເມື່ອບໍ່ເພີ່ມປະສິດທິພາບຂະຫນາດ) ສໍາລັບ
ເປົ້າໝາຍ 32-bit GNU/Linux x86 ແລະ 32-bit Darwin x86 ຖືກປ່ຽນເປັນ
-fomit-frame-pointer. ຄ່າເລີ່ມຕົ້ນສາມາດກັບຄືນໄປເປັນ -fno-omit-frame-pointer by
ການຕັ້ງຄ່າ GCC ກັບ --enable-frame-pointer ຕັ້ງຄ່າທາງເລືອກ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-foptimize-sibling-calls
ປັບແຕ່ງການໂທຫາອ້າຍເອື້ອຍນ້ອງ ແລະຫາງສຽງຊ້ຳ.

ເປີດໃຊ້ໃນລະດັບ -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.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fbranch-count-reg.

-fno-function-cse
ຢ່າໃສ່ທີ່ຢູ່ຂອງຫນ້າທີ່ຢູ່ໃນທະບຽນ; ເຮັດແຕ່ລະຄໍາແນະນໍາທີ່ໂທຫາ a
ຟັງຊັນຄົງທີ່ປະກອບດ້ວຍທີ່ຢູ່ຂອງຟັງຊັນຢ່າງຊັດເຈນ.

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

ຄ່າເລີ່ມຕົ້ນແມ່ນ -function-cse

-fno-zero-initialized-in-bss
ຖ້າເປົ້າຫມາຍສະຫນັບສະຫນູນພາກສ່ວນ BSS, GCC ໂດຍຄ່າເລີ່ມຕົ້ນຈະວາງຕົວແປທີ່ເປັນ
ເລີ່ມຕົ້ນເປັນສູນເຂົ້າໄປໃນ BSS. ນີ້ສາມາດປະຫຍັດພື້ນທີ່ໃນລະຫັດຜົນໄດ້ຮັບ.

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

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fzero-initialized-in-bss.

-fmudflap -fmudflapth -fmudflapir
ສໍາລັບດ້ານຫນ້າທີ່ສະຫນັບສະຫນູນມັນ (C ແລະ C ++), ເຄື່ອງມືຊີ້ / array ທີ່ມີຄວາມສ່ຽງທັງຫມົດ
ການ​ປະ​ຕິ​ບັດ​ການ dereferencing​, ບາງ​ສະ​ຕ​ຣິ​ງ​ຫ້ອງ​ສະ​ຫມຸດ​ມາດ​ຕະ​ຖານ / heap functions ແລະ​ອື່ນໆ​ບາງ​
ໂຄງສ້າງທີ່ກ່ຽວຂ້ອງກັບໄລຍະ / ການທົດສອບຄວາມຖືກຕ້ອງ. ໂມດູນເຄື່ອງມືດັ່ງກ່າວຄວນຈະເປັນ
ພູມຕ້ານທານຕໍ່ກັບ buffer overflows, ການໃຊ້ heap ທີ່ບໍ່ຖືກຕ້ອງ, ແລະບາງຊັ້ນຮຽນອື່ນໆຂອງ C/C++
ຄວາມຜິດພາດການຂຽນໂປຼແກຼມ. ເຄື່ອງມືແມ່ນຂຶ້ນກັບຫ້ອງສະໝຸດ runtime ແຍກຕ່າງຫາກ
(libmudflap), ເຊິ່ງຖືກເຊື່ອມຕໍ່ເຂົ້າໄປໃນໂປຼແກຼມ if -fmudflap ແມ່ນໃຫ້ໃນເວລາເຊື່ອມຕໍ່. ແລ່ນ-
ພຶດຕິກໍາທີ່ໃຊ້ເວລາຂອງໂຄງການເຄື່ອງມືແມ່ນຄວບຄຸມໂດຍ MUDFLAP_OPTIONS
ສະພາບແວດລ້ອມປ່ຽນແປງ. ເບິ່ງ "env MUDFLAP_OPTIONS=-help a.out" ສໍາລັບຕົວເລືອກຂອງມັນ.

ການນໍາໃຊ້ -fmudflapth ແທນ​ທີ່ -fmudflap ເພື່ອລວບລວມແລະເຊື່ອມຕໍ່ຖ້າຫາກວ່າໂຄງການຂອງທ່ານແມ່ນຫຼາຍ.
ກະທູ້. ໃຊ້ -fmudflapir, ນອກ​ຈາກ​ນັ້ນ -fmudflap or -fmudflapth, ຖ້າ
ເຄື່ອງມືຄວນບໍ່ສົນໃຈການອ່ານຕົວຊີ້. ນີ້ຜະລິດເຄື່ອງມືຫນ້ອຍ (ແລະ
ດັ່ງ​ນັ້ນ​ການ​ປະ​ຕິ​ບັດ​ໄວ​ຂຶ້ນ​) ແລະ​ຍັງ​ສະ​ຫນອງ​ການ​ປົກ​ປັກ​ຮັກ​ສາ​ບາງ​ຢ່າງ​ຕໍ່​ຕ້ານ​ຄວາມ​ຊົງ​ຈໍາ outright​
corrupting writes, ແຕ່ອະນຸຍາດໃຫ້ erroneously ອ່ານຂໍ້ມູນເພື່ອ propagate ພາຍໃນໂຄງການ.

-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, ຄະ
ສົມທົບການເພີ່ມຂຶ້ນຫຼືຫຼຸດລົງຂອງທີ່ຢູ່ທີ່ມີການເຂົ້າເຖິງຫນ່ວຍຄວາມຈໍາ. ຜ່ານນີ້ແມ່ນ
ສະເຫມີຂ້າມສະຖາປັດຕະຍະກໍາທີ່ບໍ່ມີຄໍາແນະນໍາເພື່ອສະຫນັບສະຫນູນສິ່ງນີ້.
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າກ່ຽວກັບສະຖາປັດຕະຍະກໍາທີ່ສະຫນັບສະຫນູນນີ້.

-fdce
ດໍາເນີນການກໍາຈັດລະຫັດຕາຍ (DCE) ໃນ RTL. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fdse
ດໍາເນີນການກໍາຈັດຮ້ານຕາຍ (DSE) ໃນ RTL. ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

-fif ການ​ປ່ຽນ​ແປງ​
ພະຍາຍາມຫັນປ່ຽນການໂດດຕາມເງື່ອນໄຂໄປສູ່ການທຽບເທົ່າສາຂາ-ໜ້ອຍ. ນີ້ປະກອບມີ
ການນໍາໃຊ້ການເຄື່ອນໄຫວຕາມເງື່ອນໄຂ, min, ສູງສຸດ, ກໍານົດທຸງແລະຄໍາແນະນໍາ abs, ແລະບາງ tricks
ສາມາດເຮັດໄດ້ໂດຍເລກເລກມາດຕະຖານ. ການນໍາໃຊ້ການປະຕິບັດເງື່ອນໄຂໃນຊິບບ່ອນທີ່ມັນຢູ່
ທີ່ມີຢູ່ແມ່ນຄວບຄຸມໂດຍ "if-conversion2".

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fif ການ​ປ່ຽນ​ແປງ 2​
ໃຊ້ການປະຕິບັດຕາມເງື່ອນໄຂ (ບ່ອນມີ) ເພື່ອປ່ຽນການກະໂດດຕາມເງື່ອນໄຂ
ສາຂາ-ໜ້ອຍທຽບເທົ່າ.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-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, -ອສ.

-fexpensive-optimizations
ປະຕິບັດການເພີ່ມປະສິດທິພາບເລັກນ້ອຍທີ່ຂ້ອນຂ້າງແພງ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

ຟຣີ
ພະຍາຍາມເອົາຄໍາແນະນໍາການຂະຫຍາຍທີ່ຊໍ້າຊ້ອນ. ນີ້ແມ່ນເປັນປະໂຫຍດໂດຍສະເພາະສໍາລັບ
ສະຖາປັດຕະຍະກໍາ x86-64, ເຊິ່ງ implicitly zero-extens ໃນ 64-bit registers ຫຼັງຈາກ.
ຂຽນໃສ່ເຄິ່ງ 32-bit ຕ່ໍາຂອງພວກເຂົາ.

ເປີດໃຊ້ສໍາລັບ x86 ໃນລະດັບ -O2, -O3.

-foptimize-ລົງທະບຽນ-ຍ້າຍ
-fregmove
ພະຍາຍາມມອບຫມາຍເລກທະບຽນຄືນໃຫມ່ໃນຄໍາແນະນໍາການເຄື່ອນຍ້າຍແລະເປັນຕົວປະຕິບັດການອື່ນໆ
ຄໍາ​ແນະ​ນໍາ​ທີ່​ງ່າຍ​ດາຍ​ໃນ​ຄໍາ​ສັ່ງ​ທີ່​ຈະ​ເພີ່ມ​ປະ​ລິ​ມານ​ການ​ລົງ​ທະ​ບຽນ tying​. ນີ້​ແມ່ນ
ມີປະໂຫຍດໂດຍສະເພາະກັບເຄື່ອງຈັກທີ່ມີຄໍາແນະນໍາສອງຕົວປະຕິບັດການ.

ຫມາຍ​ເຫດ​ -fregmove ແລະ -foptimize-ລົງທະບຽນ-ຍ້າຍ ແມ່ນການເພີ່ມປະສິດທິພາບດຽວກັນ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

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

-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 ແມ່ນໄດ້ຫັນສຸດ.

-fshrink-wrap
ປ່ອຍ prologues ຟັງຊັນພຽງແຕ່ກ່ອນບາງສ່ວນຂອງຟັງຊັນທີ່ຕ້ອງການ, ແທນທີ່ຈະຢູ່
ເທິງສຸດຂອງຫນ້າທີ່. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ.

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

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

ເປີດໃຊ້ໃນລະດັບ -O2, -O3, -ອສ.

-fcombine-stack-ປັບ
ຕິດຕາມການປັບຕົວ stack (pushes ແລະ pops) ແລະ stack ການອ້າງອີງຫນ່ວຍຄວາມຈໍາແລະຫຼັງຈາກນັ້ນພະຍາຍາມ
ເພື່ອຊອກຫາວິທີທີ່ຈະສົມທົບພວກມັນ.

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O1 ແລະສູງກວ່າ.

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

- ອ່າງລ້າງມື
ປະຕິບັດການເຄື່ອນໄຫວເກັບຮັກສາໄປຂ້າງຫນ້າກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະ
ສູງຂຶ້ນ.

-ftree-bit-ccp
ປະຕິບັດການຂະຫຍາຍພັນແບບຄົງທີ່ເລັກນ້ອຍຕາມເງື່ອນໄຂ ແລະ ຂະຫຍາຍພັນດ້ວຍຕົວຊີ້
ຂໍ້​ມູນ​ການ​ຈັດ​ຕັ້ງ​. pass ນີ້ດໍາເນີນການພຽງແຕ່ຢູ່ໃນຕົວແປ scalar ທ້ອງຖິ່ນແລະແມ່ນ
ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O ແລະສູງກວ່າ. ມັນຮຽກຮ້ອງໃຫ້ມີນັ້ນ -ftree-ccp ເປີດໃຊ້ງານ.

-ftree-ccp
ປະຕິບັດການຂະຫຍາຍພັນແບບຄົງທີ່ຕາມເງື່ອນໄຂ (CCP) ຢູ່ເທິງຕົ້ນໄມ້. ຜ່ານນີ້ເທົ່ານັ້ນ
ດໍາເນີນການຢູ່ໃນຕົວແປ scalar ທ້ອງຖິ່ນແລະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -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-ppl ແລະ --with-cloog to
ເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ 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-ppl
ແລະ --with-cloog ເພື່ອເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ 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-ppl
ແລະ --with-cloog ເພື່ອເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ 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-ppl
ແລະ --with-cloog ເພື່ອເປີດໃຊ້ໂຄງສ້າງການຫັນປ່ຽນ Graphite loop.

-fgraphite-ຕົວຕົນ
ເປີດໃຊ້ການຫັນປ່ຽນຕົວຕົນສໍາລັບ graphite. ສໍາລັບທຸກໆ SCoP ພວກເຮົາສ້າງ
ການສະແດງ polyhedral ແລະປ່ຽນມັນກັບຄືນໄປບ່ອນ gimple. ການນໍາໃຊ້ -fgraphite-ຕົວຕົນ
ພວກເຮົາສາມາດກວດສອບຄ່າໃຊ້ຈ່າຍຫຼືຜົນປະໂຫຍດຂອງ GIMPLE -> GRAPHITE -> ການຫັນເປັນ GIMPLE.
ບາງການເພີ່ມປະສິດທິພາບຫນ້ອຍກໍ່ຖືກປະຕິບັດໂດຍຕົວສ້າງລະຫັດ CLooG ເຊັ່ນ: ດັດສະນີ
ການແຍກແລະການລົບລ້າງລະຫັດຕາຍໃນ loops.

-floop-nest-optimize
ເປີດໃຊ້ຕົວເພີ່ມປະສິດທິພາບຂອງ loop nest ທີ່ອີງໃສ່ ISL. ນີ້ແມ່ນຕົວເພີ່ມປະສິດທິພາບຂອງ loop ທົ່ວໄປທີ່ອີງໃສ່
ຢູ່ໃນລະບົບການເພີ່ມປະສິດທິພາບຂອງ Pluto. ມັນຄິດໄລ່ໂຄງສ້າງ loop ເຫມາະສໍາລັບ
data-locality ແລະຂະຫນານ. ທາງເລືອກນີ້ແມ່ນທົດລອງ.

-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 ນອກຈາກ.
ເຊິ່ງກັນແລະກັນ, ເຊັ່ນວ່າພວກມັນມີແນວໂນ້ມທີ່ຈະມີຄ່າທີ່ຄາດໄວ້ຢູ່ໃນ a
ເຊດຊັນການດີບັກ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນໃນ GCC ລຸ້ນເກົ່າກວ່າ 4.7.

-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 loop ກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3.

-ftree-slp-vectorize
ປະຕິບັດການສ້າງ vectorization ພື້ນຖານກ່ຽວກັບຕົ້ນໄມ້. ທຸງນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O3 ແລະ
ໃນເວລາທີ່ -ftree-vectorize ເປີດໃຊ້ງານ.

-fvect-cost-model=ຮູບແບບ
ປ່ຽນແປງຮູບແບບຄ່າໃຊ້ຈ່າຍທີ່ໃຊ້ສໍາລັບ vectorization. ໄດ້ ຮູບແບບ ການໂຕ້ຖຽງຄວນຈະເປັນຫນຶ່ງໃນ
"ບໍ່ຈໍາກັດ", "ເຄື່ອນໄຫວ" ຫຼື "ລາຄາຖືກ". ດ້ວຍຮູບແບບ "ບໍ່ຈໍາກັດ" ລະຫັດ vectorized-
ເສັ້ນທາງແມ່ນຖືວ່າມີກໍາໄລໃນຂະນະທີ່ຮູບແບບ "dynamic" ການກວດສອບເວລາແລ່ນຈະ
ປົກປ້ອງເສັ້ນທາງລະຫັດ vectorized ເພື່ອເປີດໃຊ້ມັນພຽງແຕ່ສໍາລັບການນັບຊໍ້າຄືນທີ່ອາດຈະເປັນໄປໄດ້
ປະຕິບັດໄວກ່ວາເມື່ອປະຕິບັດການ loop scalar ຕົ້ນສະບັບ. ຮູບແບບ "ລາຄາຖືກ" ຈະ
ປິດການໃຊ້ງານ vectorization ຂອງ loops ບ່ອນທີ່ການເຮັດແນວນັ້ນຈະເປັນການຫ້າມຄ່າໃຊ້ຈ່າຍສໍາລັບຕົວຢ່າງ
ເນື່ອງ​ຈາກ​ການ​ກວດ​ສອບ runtime ທີ່​ຈໍາ​ເປັນ​ສໍາ​ລັບ​ການ​ອີງ​ໃສ່​ຂໍ້​ມູນ​ຫຼື​ການ​ຈັດ​ຕໍາ​ແຫນ່ງ​ແຕ່​ບໍ່​ດັ່ງ​ນັ້ນ​ແມ່ນ​ເທົ່າ​ທຽມ​ກັນ​
ກັບຮູບແບບ "dynamic". ຮູບແບບຄ່າໃຊ້ຈ່າຍເລີ່ມຕົ້ນແມ່ນຂຶ້ນກັບທຸງການເພີ່ມປະສິດທິພາບອື່ນໆ
ແລະເປັນ "ແບບເຄື່ອນໄຫວ" ຫຼື "ລາຄາຖືກ".

-ftree-vrp
ປະຕິບັດການຂະຫຍາຍພັນຂອງມູນຄ່າຕາມຕົ້ນໄມ້. ນີ້ແມ່ນຄ້າຍຄືກັນກັບການຂະຫຍາຍພັນຢ່າງຕໍ່ເນື່ອງ
pass, ແຕ່ແທນທີ່ຈະເປັນຄ່າ, ໄລຍະຂອງຄ່າຈະຖືກຂະຫຍາຍພັນ. ນີ້ອະນຸຍາດໃຫ້
optimizers ເພື່ອເອົາການກວດສອບຂອບເຂດທີ່ບໍ່ຈໍາເປັນເຊັ່ນ: ການກວດສອບຂອບເຂດ array ແລະຕົວຊີ້ null
ກວດກາ. ອັນນີ້ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນຢູ່ທີ່ -O2 ແລະສູງກວ່າ. ການລົບລ້າງການກວດສອບຕົວຊີ້ null
ແມ່ນເຮັດໄດ້ພຽງແຕ່ຖ້າຫາກວ່າ -fdelete-null-pointer-checks ເປີດໃຊ້ງານ.

-ftracer
ດໍາເນີນການຊໍ້າຊ້ອນຫາງເພື່ອຂະຫຍາຍຂະຫນາດ superblock. ການຫັນປ່ຽນນີ້ເຮັດໃຫ້ງ່າຍດາຍ
ການຄວບຄຸມການໄຫຼເຂົ້າຂອງຫນ້າທີ່ອະນຸຍາດໃຫ້ການເພີ່ມປະສິດທິພາບອື່ນໆເຮັດວຽກທີ່ດີກວ່າ.

-funroll-loops
ຖອດ loops ທີ່ມີຈໍານວນການຊໍ້າຄືນສາມາດຖືກກໍານົດໃນເວລາລວບລວມຫຼືຕາມ
ເຂົ້າໄປໃນ loop ໄດ້. -funroll-loops implies -frerun-cse-after-loop. ທາງເລືອກນີ້ເຮັດໃຫ້
ລະຫັດໃຫຍ່ກວ່າ, ແລະອາດຈະ ຫຼືອາດຈະບໍ່ເຮັດໃຫ້ມັນແລ່ນໄວຂຶ້ນ.

-funroll-all-loops
ຖອດ loops ທັງຫມົດ, ເຖິງແມ່ນວ່າຈໍານວນການຊໍ້າຄືນຂອງເຂົາເຈົ້າບໍ່ແນ່ນອນໃນເວລາທີ່ loop ແມ່ນ
ເຂົ້າ. ນີ້ປົກກະຕິແລ້ວເຮັດໃຫ້ໂຄງການເຮັດວຽກຊ້າຫຼາຍ. -funroll-all-loops ຫມາຍເຖິງ
ທາງ​ເລືອກ​ດຽວ​ກັນ​ກັບ​ -funroll-loops,

-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_ຄາດຫວັງ, ຫຼັງຈາກນັ້ນ
heuristics ຖືກນໍາໃຊ້ເພື່ອຄາດເດົາຄວາມເປັນໄປໄດ້ຂອງສາຂາສໍາລັບສ່ວນທີ່ເຫຼືອຂອງການໄຫຼຂອງການຄວບຄຸມ
ເສັ້ນສະແດງ, ການກິນ __builtin_ຄາດຫວັງ ຂໍ້ມູນເຂົ້າໄປໃນບັນຊີ. ການ​ພົວ​ພັນ​ລະ​ຫວ່າງ​
heuristics ແລະ __builtin_ຄາດຫວັງ ສາມາດສັບສົນ, ແລະໃນບາງກໍລະນີ, ມັນອາດຈະເປັນປະໂຫຍດ
ປິດການທໍາງານ heuristics ດັ່ງນັ້ນຜົນກະທົບຂອງ __builtin_ຄາດຫວັງ ງ່າຍກວ່າ
ເຂົ້າໃຈ

ຄ່າເລີ່ມຕົ້ນແມ່ນ -fguess-ສາຂາ-ຄວາມເປັນໄປໄດ້ ໃນ​ລະ​ດັບ​ -O, -O2, -O3, -ອສ.

-freorder-ຕັນ
Reorder blocks ພື້ນຖານໃນຟັງຊັນລວບລວມເພື່ອຫຼຸດຜ່ອນຈໍານວນຂອງການເອົາ
ສາຂາ ແລະປັບປຸງລະຫັດທ້ອງຖິ່ນ.

ເປີດໃຊ້ໃນລະດັບ -O2, -O3.

-freorder-blocks-and-partition
ນອກເຫນືອໄປຈາກ reordering ຕັນພື້ນຖານໃນຫນ້າທີ່ລວບລວມ, ເພື່ອຫຼຸດຜ່ອນ
ຈໍາ​ນວນ​ຂອງ​ສາ​ຂາ​ປະ​ຕິ​ບັດ​, ການ​ແບ່ງ​ປັນ​ທ່ອນ​ໄມ້​ພື້ນ​ຖານ​ຮ້ອນ​ແລະ​ເຢັນ​ເປັນ​ພາກ​ສ່ວນ​ແຍກ​ຕ່າງ​ຫາກ​
ຂອງ​ການ​ປະ​ກອບ​ແລະ​ໄຟລ​໌ .o​, ເພື່ອ​ປັບ​ປຸງ​ຫນ້າ​ທີ່​ແລະ​ການ​ປະ​ຕິ​ບັດ​ທ້ອງ​ຖິ່ນ​ຖານ​ຄວາມ​ຈໍາ​.

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

-freorder - ຫນ້າ​ທີ່​
ຈັດລໍາດັບຟັງຊັນໃນໄຟລ໌ວັດຖຸເພື່ອປັບປຸງລະຫັດທ້ອງຖິ່ນ. ນີ້​ແມ່ນ
ປະຕິບັດໂດຍການໃຊ້ສ່ວນຍ່ອຍພິເສດ ".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". ແທນທີ່ຈະອີງໃສ່ ກ
linker 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.

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

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

ໃຫ້ສັງເກດວ່າເມື່ອໄຟລ໌ຖືກລວບລວມດ້ວຍ -flto, ໄຟລ໌ວັດຖຸທີ່ສ້າງຂຶ້ນແມ່ນໃຫຍ່ກວ່າ
ໄຟລ໌ວັດຖຸປົກກະຕິເນື່ອງຈາກວ່າມັນມີ GIMPLE bytecodes ແລະລະຫັດສຸດທ້າຍປົກກະຕິ.
ນີ້ຫມາຍຄວາມວ່າໄຟລ໌ວັດຖຸທີ່ມີຂໍ້ມູນ LTO ສາມາດເຊື່ອມຕໍ່ເປັນວັດຖຸປົກກະຕິ
ໄຟລ໌; ຖ້າ -flto ບໍ່ໄດ້ຜ່ານໄປຫາຕົວເຊື່ອມຕໍ່, ບໍ່ມີການເພີ່ມປະສິດທິພາບ interprocedural ແມ່ນ
ນຳ ໃຊ້.

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

gcc -c -O0 -flto foo.c
gcc -c -O0 -flto bar.c
gcc -o myprog -flto -O3 foo.o bar.o

ນີ້ຜະລິດໄຟລ໌ວັດຖຸສ່ວນບຸກຄົນທີ່ມີລະຫັດ assembler unoptimized, ແຕ່
binary ຜົນໄດ້ຮັບ myprog ແມ່ນ optimized ຢູ່ -O3. ຖ້າ, ແທນທີ່ຈະ, ຄູ່ສຸດທ້າຍແມ່ນ
ສ້າງຂຶ້ນໂດຍບໍ່ມີການ -flto, ຫຼັງຈາກນັ້ນ myprog ບໍ່ໄດ້ຖືກປັບປຸງໃຫ້ເໝາະສົມ.

ໃນເວລາທີ່ການຜະລິດຄູ່ສຸດທ້າຍກັບ -flto, GCC ພຽງແຕ່ນໍາໃຊ້ການເພີ່ມປະສິດທິພາບເວລາເຊື່ອມຕໍ່
ກັບໄຟລ໌ເຫຼົ່ານັ້ນທີ່ມີ bytecode. ດັ່ງນັ້ນ, ທ່ານສາມາດປະສົມແລະຈັບຄູ່ໄຟລ໌ວັດຖຸ
ແລະຫ້ອງສະຫມຸດທີ່ມີ GIMPLE bytecodes ແລະລະຫັດວັດຖຸສຸດທ້າຍ. GCC ເລືອກອັດຕະໂນມັດ
ໄຟລ໌ໃດທີ່ຈະເພີ່ມປະສິດທິພາບໃນໂຫມດ LTO ແລະໄຟລ໌ໃດທີ່ຈະເຊື່ອມຕໍ່ໂດຍບໍ່ມີການເພີ່ມເຕີມ
ການປຸງແຕ່ງ.

ມີບາງທຸງການສ້າງລະຫັດທີ່ຖືກຮັກສາໄວ້ໂດຍ GCC ເມື່ອສ້າງ bytecodes, ເປັນ
ພວກເຂົາເຈົ້າຈໍາເປັນຕ້ອງໄດ້ຖືກນໍາໃຊ້ໃນໄລຍະການເຊື່ອມຕໍ່ສຸດທ້າຍ. ໃນປັດຈຸບັນ, ທາງເລືອກຕໍ່ໄປນີ້
ຖືກບັນທຶກໄວ້ໃນໄຟລ໌ GIMPLE bytecode: -fPIC, -fcommon ແລະທັງ ໝົດ -m ທຸງ​ເປົ້າ​ຫມາຍ​.

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

ຖ້າ LTO ພົບກັບວັດຖຸທີ່ມີການເຊື່ອມໂຍງ C ທີ່ປະກາດກັບປະເພດທີ່ບໍ່ເຂົ້າກັນໄດ້ແຍກຕ່າງຫາກ
ໜ່ວຍ​ການ​ແປ​ພາ​ສາ​ທີ່​ຈະ​ເຊື່ອມ​ໂຍງ​ເຂົ້າ​ກັນ (ພຶດ​ຕິ​ກຳ​ທີ່​ບໍ່​ໄດ້​ກຳ​ນົດ​ຕາມ ISO C99
6.2.7), ການວິນິດໄສທີ່ບໍ່ເປັນອັນຕະລາຍອາດຈະຖືກອອກ. ພຶດຕິກຳດັ່ງກ່າວຍັງບໍ່ຖືກກຳນົດໃນເວລາແລ່ນ
ເວລາ.

ຄຸນນະສົມບັດອີກອັນຫນຶ່ງຂອງ LTO ແມ່ນວ່າມັນເປັນໄປໄດ້ທີ່ຈະນໍາໃຊ້ການເພີ່ມປະສິດທິພາບລະຫວ່າງຂັ້ນຕອນ
ຢູ່ໃນໄຟລ໌ທີ່ຂຽນເປັນພາສາຕ່າງໆ. ນີ້ຮຽກຮ້ອງໃຫ້ມີການສະຫນັບສະຫນູນໃນດ້ານຫນ້າຂອງພາສາ
ສິ້ນສຸດ. ໃນປັດຈຸບັນ, C, C ++ ແລະ Fortran ດ້ານຫນ້າແມ່ນສາມາດປ່ອຍ GIMPLE
bytecodes, ດັ່ງນັ້ນບາງສິ່ງບາງຢ່າງເຊັ່ນນີ້ຄວນຈະເຮັດວຽກ:

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​)​; ທັງ​ຫມົດ​ທີ່​ທ່ານ​ຕ້ອງ​ການ​ທີ່​ຈະ​ເພີ່ມ​ແມ່ນ​ -flto ທັງ ໝົດ
ລວບລວມແລະເຊື່ອມຕໍ່ຄໍາສັ່ງ.

ຖ້າໄຟລ໌ວັດຖຸທີ່ມີ GIMPLE bytecode ຖືກເກັບໄວ້ໃນຄັງເກັບມ້ຽນ, ເວົ້າ
libfoo.a, ມັນເປັນໄປໄດ້ທີ່ຈະສະກັດແລະນໍາໃຊ້ພວກມັນຢູ່ໃນການເຊື່ອມຕໍ່ LTO ຖ້າທ່ານກໍາລັງໃຊ້ a
linker ສະຫນັບສະຫນູນ plugin. ເພື່ອເປີດໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ໃຊ້ທຸງ -fuse-linker-plugin
ໃນເວລາເຊື່ອມຕໍ່:

gcc -o myprog -O2 -flto -fuse-linker-plugin ao bo -lfoo

ດ້ວຍການເປີດໃຊ້ plugin ເຊື່ອມຕໍ່, ຕົວເຊື່ອມຕໍ່ສະກັດໄຟລ໌ GIMPLE ທີ່ຈໍາເປັນຈາກ
libfoo.a ແລະສົ່ງພວກເຂົາໄປສູ່ GCC ແລ່ນເພື່ອເຮັດໃຫ້ພວກເຂົາເປັນສ່ວນຫນຶ່ງຂອງການລວບລວມ
ຮູບພາບ GIMPLE ທີ່ຈະເພີ່ມປະສິດທິພາບ.

ຖ້າທ່ານບໍ່ໄດ້ໃຊ້ຕົວເຊື່ອມຕໍ່ທີ່ມີການສະຫນັບສະຫນູນ plugin ແລະ / ຫຼືບໍ່ເປີດໃຊ້ຕົວເຊື່ອມຕໍ່
plugin, ຫຼັງຈາກນັ້ນວັດຖຸພາຍໃນ libfoo.a ຖືກສະກັດແລະເຊື່ອມໂຍງຕາມປົກກະຕິ, ແຕ່ພວກມັນ
ບໍ່ໄດ້ເຂົ້າຮ່ວມໃນຂະບວນການເພີ່ມປະສິດທິພາບ 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" ເພື່ອລະບຸການແບ່ງສ່ວນທີ່ສະທ້ອນໄຟລ໌ຕົ້ນສະບັບ ຫຼື
"ສົມດູນ" ເພື່ອກໍານົດການແບ່ງສ່ວນເຂົ້າໄປໃນຕ່ອນຂະຫນາດເທົ່າທຽມກັນ (ທຸກຄັ້ງທີ່ເປັນໄປໄດ້) ຫຼື
"ສູງສຸດ" ເພື່ອສ້າງການແບ່ງປັນໃຫມ່ສໍາລັບທຸກໆສັນຍາລັກທີ່ເປັນໄປໄດ້. ການລະບຸ "none" ເປັນ
ສູດການຄິດໄລ່ປິດການແບ່ງສ່ວນ ແລະການຖ່າຍທອດຢ່າງສົມບູນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ
"ສົມດຸນ". ໃນຂະນະທີ່ "1to1" ສາມາດຖືກນໍາໃຊ້ເປັນການແກ້ໄຂສໍາລັບການສັ່ງລະຫັດຕ່າງໆ
ບັນຫາ, ການແບ່ງສ່ວນ "ສູງສຸດ" ມີຈຸດປະສົງສໍາລັບການທົດສອບພາຍໃນເທົ່ານັ້ນ.

-flto-compression-level=n
ຕົວເລືອກນີ້ກໍານົດລະດັບການບີບອັດທີ່ໃຊ້ສໍາລັບພາສາລະດັບປານກາງທີ່ຂຽນ
ກັບໄຟລ໌ວັດຖຸ LTO, ແລະມີຄວາມຫມາຍພຽງແຕ່ສົມທົບກັບໂຫມດ LTO (-flto).
ຄ່າທີ່ຖືກຕ້ອງແມ່ນ 0 (ບໍ່ມີການບີບອັດ) ຫາ 9 (ການບີບອັດສູງສຸດ). ຄຸນຄ່ານອກນີ້
ຊ່ວງແມ່ນຖືກຍຶດເປັນ 0 ຫຼື 9. ຖ້າທາງເລືອກບໍ່ໄດ້ຖືກມອບໃຫ້, ຄ່າເລີ່ມຕົ້ນຈະສົມດູນ
ການຕັ້ງຄ່າການບີບອັດຖືກນໍາໃຊ້.

flto-ບົດລາຍງານ
ພິມບົດລາຍງານທີ່ມີລາຍລະອຽດພາຍໃນກ່ຽວກັບການເຮັດວຽກຂອງ link-time optimizer. ໄດ້
ເນື້ອໃນຂອງບົດລາຍງານນີ້ແຕກຕ່າງກັນໄປແຕ່ລະສະບັບ. ມັນຫມາຍຄວາມວ່າຈະເປັນປະໂຫຍດຕໍ່ GCC
ນັກພັດທະນາໃນເວລາປະມວນຜົນໄຟລ໌ວັດຖຸຢູ່ໃນໂຫມດ LTO (ຜ່ານ -flto).

ພິການໂດຍຄ່າເລີ່ມຕົ້ນ.

-fuse-linker-plugin
ເປີດນຳໃຊ້ການໃຊ້ຕົວເຊື່ອມຕໍ່ຕົວເຊື່ອມຕໍ່ລະຫວ່າງການປັບແຕ່ງເວລາເຊື່ອມຕໍ່. ທາງເລືອກນີ້ອີງໃສ່
ກ່ຽວກັບການສະຫນັບສະຫນູນ plugin ໃນຕົວເຊື່ອມຕໍ່, ທີ່ມີຢູ່ໃນຄໍາຫຼືໃນ GNU ld 2.21 ຫຼື
ໃໝ່ກວ່າ.

ຕົວເລືອກນີ້ເຮັດໃຫ້ສາມາດສະກັດໄຟລ໌ວັດຖຸດ້ວຍ GIMPLE bytecode ອອກຈາກຫ້ອງສະໝຸດ
ຮວບຮວມ. ນີ້ປັບປຸງຄຸນນະພາບຂອງການເພີ່ມປະສິດທິພາບໂດຍການເປີດເຜີຍລະຫັດເພີ່ມເຕີມຕໍ່ກັບການເຊື່ອມຕໍ່ -
ຕົວເພີ່ມປະສິດທິພາບເວລາ. ຂໍ້ມູນນີ້ລະບຸວ່າສັນຍາລັກໃດທີ່ສາມາດເຂົ້າເຖິງພາຍນອກໄດ້
(ໂດຍວັດຖຸທີ່ບໍ່ແມ່ນ LTO ຫຼືໃນລະຫວ່າງການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ). ຜົນໄດ້ຮັບການປັບປຸງຄຸນນະພາບລະຫັດໃນ
binary (ແລະຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນທີ່ໃຊ້ການເບິ່ງເຫັນທີ່ເຊື່ອງໄວ້) ແມ່ນຄ້າຍຄືກັນກັບ
"-fwhole-ໂຄງການ". ເບິ່ງ -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 ຕ້ອງໄດ້ຮັບການດັດແກ້ເພື່ອນໍາໃຊ້
ໃຫ້ເຂົາເຈົ້າ.

ຄ່າເລີ່ມຕົ້ນແມ່ນ -ffat-lto-ວັດຖຸ ແຕ່ຄ່າເລີ່ມຕົ້ນນີ້ແມ່ນມີຈຸດປະສົງທີ່ຈະປ່ຽນແປງໃນອະນາຄົດ
ປ່ອຍອອກມາເມື່ອສະພາບແວດລ້ອມທີ່ເປີດໃຊ້ plugin linker ກາຍເປັນເລື່ອງທົ່ວໄປຫຼາຍຂຶ້ນ.

-fcompare-elim
ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ຈັດ​ສັນ​ແລະ​ຫຼັງ​ຈາກ​ການ​ລົງ​ທະ​ບຽນ​ການ​ແບ່ງ​ປັນ​ຄໍາ​ແນະ​ນໍາ​ການ​ຈັດ​ສັນ​, ກໍາ​ນົດ​
ຄໍາແນະນໍາທາງເລກຄະນິດທີ່ຄໍານວນທຸງຂອງໂປເຊດເຊີທີ່ຄ້າຍຄືກັບການປະຕິບັດການປຽບທຽບ
ອີງໃສ່ເລກຄະນິດສາດນັ້ນ. ຖ້າເປັນໄປໄດ້, ລົບລ້າງການປະຕິບັດການປຽບທຽບທີ່ຊັດເຈນ.

ຜ່ານນີ້ໃຊ້ໄດ້ກັບບາງເປົ້າໝາຍທີ່ບໍ່ສາມາດເປັນຕົວແທນໄດ້ຢ່າງຊັດເຈນ
ການ​ປະ​ຕິ​ບັດ​ການ​ປຽບ​ທຽບ​ກ່ອນ​ທີ່​ຈະ​ຈັດ​ສັນ​ການ​ຈົດ​ທະ​ບຽນ​ສໍາ​ເລັດ​.

ເປີດໃຊ້ໃນລະດັບ -O, -O2, -O3, -ອສ.

-fuse-ld=bfd
ການນໍາໃຊ້ bfd linker ແທນທີ່ຈະເປັນຕົວເຊື່ອມຕໍ່ເລີ່ມຕົ້ນ.

-fuse-ld=ທອງ
ການນໍາໃຊ້ ຄໍາ linker ແທນທີ່ຈະເປັນຕົວເຊື່ອມຕໍ່ເລີ່ມຕົ້ນ.

-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-values", "-fvpt".

If ເສັ້ນທາງ ຖືກກໍານົດ, GCC ເບິ່ງຢູ່ໃນ ເສັ້ນທາງ ເພື່ອຊອກຫາໄຟລ໌ຂໍ້ມູນຄໍາຕິຊົມຂອງໂປຣໄຟລ໌.
ເບິ່ງ -fprofile-dir.

-fprofile-ໃຊ້
-fprofile-use=ເສັ້ນທາງ
ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບຂອງຄໍາຕິຊົມຂອງໂປຣໄຟລ໌, ແລະການເພີ່ມປະສິດທິພາບໂດຍທົ່ວໄປແລ້ວມີກໍາໄລ
ພຽງ​ແຕ່​ມີ​ຄໍາ​ຄຶດ​ຄໍາ​ເຫັນ profile ທີ່​ມີ​ຢູ່​.

ຕົວເລືອກຕໍ່ໄປນີ້ຖືກເປີດໃຊ້: "-fbrnch-probabilities", "-fvpt",
"-funroll-loops", "-fpeel-loops", "-ftracer", "-ftree-vectorize",
"free-loop-distribute-patterns"

ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ປ່ອຍຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຖ້າໂປຣໄຟລ໌ຄໍາຕິຊົມບໍ່ກົງກັບ
ລະຫັດແຫຼ່ງ. ຄວາມ​ຜິດ​ພາດ​ນີ້​ສາ​ມາດ​ປ່ຽນ​ເປັນ​ການ​ເຕືອນ​ໄພ​ໂດຍ​ການ​ນໍາ​ໃຊ້​ -Wcoverage-mismatch.
ກະລຸນາຮັບຊາບວ່າອັນນີ້ອາດຈະສົ່ງຜົນໃຫ້ລະຫັດປັບປຸງບໍ່ດີ.

If ເສັ້ນທາງ ຖືກກໍານົດ, GCC ເບິ່ງຢູ່ໃນ ເສັ້ນທາງ ເພື່ອຊອກຫາໄຟລ໌ຂໍ້ມູນຄໍາຕິຊົມຂອງໂປຣໄຟລ໌.
ເບິ່ງ -fprofile-dir.

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

- ຮ້ານຂາຍເຄື່ອງຍ່ອຍ
ຢ່າເກັບຮັກສາຕົວແປຈຸດລອຍຢູ່ໃນທະບຽນ, ແລະຂັດຂວາງທາງເລືອກອື່ນ
ອາດຈະປ່ຽນວ່າຄ່າຈຸດລອຍແມ່ນເອົາມາຈາກທະບຽນ ຫຼື ໜ່ວຍຄວາມຈຳ.

ທາງເລືອກນີ້ປ້ອງກັນຄວາມແມ່ນຍໍາເກີນທີ່ບໍ່ຕ້ອງການໃນເຄື່ອງຈັກເຊັ່ນ 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-ໃຊ້.

-fvpt
ຖ້າລວມກັບ -fprofile-arcs, ທາງເລືອກນີ້ສັ່ງໃຫ້ compiler ເພີ່ມລະຫັດໃສ່
ລວບລວມຂໍ້ມູນກ່ຽວກັບຄຸນຄ່າຂອງການສະແດງອອກ.

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

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

ເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນດ້ວຍ -funroll-loops ແລະ -fpeel-loops.

-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.
ກອງໄດ້ຖືກເລີ່ມຕົ້ນເມື່ອຟັງຊັນຖືກໃສ່ແລະຫຼັງຈາກນັ້ນກວດເບິ່ງໃນເວລາທີ່
ຟັງຊັນອອກ. ຖ້າການກວດສອບຄວາມລົ້ມເຫລວ, ຂໍ້ຄວາມສະແດງຂໍ້ຜິດພາດຈະຖືກພິມອອກແລະໂຄງການ
ອອກ.

ຫມາຍ​ເຫດ​: ໃນ Ubuntu 6.10 ແລະ​ສະ​ບັບ​ຕໍ່​ມາ​ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ສໍາ​ລັບ C​, C ++​,
ObjC, ObjC++, ຖ້າບໍ່ມີ -fno-stack-protector, -nostdlib, ແລະ - freestanding ມີ
ພົບເຫັນ.

-fstack-protector-ທັງໝົດ
ຄື -stack-protector ຍົກ​ເວັ້ນ​ແຕ່​ຫນ້າ​ທີ່​ທັງ​ຫມົດ​ແມ່ນ​ໄດ້​ຮັບ​ການ​ປ້ອງ​ກັນ​.

-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 ເທົ່າຂອງຕົ້ນສະບັບ
ຂະຫນາດ.

ໜ່ວຍໃຫຍ່
ຂອບ​ເຂດ​ຈໍາ​ກັດ​ການ​ລະ​ບຸ​ຫົວ​ຫນ່ວຍ​ການ​ແປ​ພາ​ສາ​ຂະ​ຫນາດ​ໃຫຍ່​. ການຂະຫຍາຍຕົວທີ່ເກີດຈາກການ inlining ຂອງຫນ່ວຍງານ
ຂະຫນາດໃຫຍ່ກວ່າຂອບເຂດຈໍາກັດນີ້ຖືກຈໍາກັດໂດຍ --param inline-unit-growth. ສໍາລັບຫນ່ວຍງານຂະຫນາດນ້ອຍ
ນີ້ອາດຈະເຄັ່ງຄັດເກີນໄປ. ສໍາລັບຕົວຢ່າງ, ພິຈາລະນາຫນ່ວຍງານທີ່ປະກອບດ້ວຍຫນ້າທີ່ A
ນັ້ນແມ່ນ inline ແລະ B ທີ່ພຽງແຕ່ໂທຫາ A ສາມເທື່ອ. ຖ້າ B ແມ່ນນ້ອຍທຽບກັບ A,
ການຂະຫຍາຍຕົວຂອງຫນ່ວຍງານແມ່ນ 300% ແລະຍັງ inlining ດັ່ງກ່າວແມ່ນ sane ຫຼາຍ. ສໍາລັບຂະຫນາດໃຫຍ່ຫຼາຍ
ຫນ່ວຍງານປະກອບດ້ວຍຫນ້າທີ່ inlineable ຂະຫນາດນ້ອຍ, ແນວໃດກໍ່ຕາມ, ການຂະຫຍາຍຕົວຂອງຫນ່ວຍງານໂດຍລວມ
ຈໍາ​ກັດ​ແມ່ນ​ຈໍາ​ເປັນ​ເພື່ອ​ຫຼີກ​ເວັ້ນ​ການ​ລະ​ເບີດ exponential ຂອງ​ຂະ​ຫນາດ​ລະ​ຫັດ​. ດັ່ງນັ້ນສໍາລັບຂະຫນາດນ້ອຍກວ່າ
ຫນ່ວຍ, ຂະຫນາດແມ່ນເພີ່ມຂຶ້ນ --param ໜ່ວຍໃຫຍ່ ກ່ອນການນໍາໃຊ້ --param
inline-unit-growth. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10000.

inline-unit-growth
ລະບຸການຂະຫຍາຍຕົວໂດຍລວມສູງສຸດຂອງຫນ່ວຍງານລວບລວມທີ່ເກີດຈາກ inlining. ໄດ້
ຄ່າເລີ່ມຕົ້ນແມ່ນ 30 ເຊິ່ງຈໍາກັດການຂະຫຍາຍຕົວຂອງຫນ່ວຍເປັນ 1.3 ເທົ່າຂອງຂະຫນາດຕົ້ນສະບັບ.

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 ຂະຫນາດໃຫຍ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 10.

max-early-inliner-iterations
max-early-inliner-iterations
ຈໍາ​ກັດ​ການ​ເຮັດ​ຊ້ຳ​ຂອງ inliner ຕົ້ນ​. ນີ້ໂດຍພື້ນຖານແລ້ວ bounds ຈໍານວນຂອງ
nested indirect calls the inliner ຕົ້ນສາມາດແກ້ໄຂ. ໂສ້ທີ່ເລິກກວ່າແມ່ນຍັງຢູ່
ຈັດການໂດຍ inlining ຊ້າ.

comdat-sharing-probability
comdat-sharing-probability
ຄວາມເປັນໄປໄດ້ (ເປັນເປີເຊັນ) ທີ່ຟັງຊັນໃນແຖວຂອງ C++ ທີ່ມີການເບິ່ງເຫັນ comdat ແມ່ນ
ແບ່ງປັນໃນທົ່ວຫນ່ວຍງານລວບລວມຫຼາຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 20.

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 ໄດ້
ໂດຍບໍ່ມີຂອບເຂດຈໍາກັດປະກົດວ່າເຢັນທຽມກັບຄົນອື່ນ.

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.

integer-share-limit
ຈໍານວນຄົງທີ່ນ້ອຍສາມາດໃຊ້ໂຄງສ້າງຂໍ້ມູນຮ່ວມກັນ, ຫຼຸດຜ່ອນການລວບລວມຂໍ້ມູນ
ການນໍາໃຊ້ຫນ່ວຍຄວາມຈໍາແລະການເພີ່ມຄວາມໄວຂອງມັນ. ນີ້ກໍານົດຄ່າສູງສຸດຂອງການແບ່ງປັນ
ຈໍານວນຄົງທີ່. ຄ່າເລີ່ມຕົ້ນແມ່ນ 256.

ssp-buffer-size
ຂະໜາດຕໍາ່ສຸດຂອງ buffers (ie arrays) ທີ່ໄດ້ຮັບການປ້ອງກັນ stack smashing
ໃນເວລາທີ່ -fstack ການ​ປ້ອງ​ກັນ​ ຖືກນໍາໃຊ້.

ຄ່າເລີ່ມຕົ້ນນີ້ກ່ອນ Ubuntu 10.10 ແມ່ນ "8". ໃນປັດຈຸບັນມັນແມ່ນ "4", ເພື່ອເພີ່ມການ
ຈໍານວນຂອງຫນ້າທີ່ປ້ອງກັນໂດຍຕົວປ້ອງກັນ stack.

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, ເຊິ່ງເປັນຈໍານວນການລົງທະບຽນຫນ້ອຍທີ່ສຸດທີ່ຕ້ອງການໂດຍປົກກະຕິ
ຄໍາແນະນໍາ. ມູນຄ່ານີ້ແມ່ນດີທີ່ສຸດທີ່ພົບເຫັນຈາກການທົດລອງຈໍານວນຫລາຍ.

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 ເວລາ
ຂະໜາດຂອງຕົວຊີ້ຕົ້ນສະບັບ.

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 ຊ້ຳ.

ipa-cp-value-list-size
IPA-CP ພະຍາຍາມຕິດຕາມຄ່າທີ່ເປັນໄປໄດ້ທັງໝົດ ແລະປະເພດທີ່ສົ່ງໄປຫາຟັງຊັນໃດໜຶ່ງ
ຕົວກໍານົດການເພື່ອຂະຫຍາຍພວກມັນແລະປະຕິບັດ devirtualization. ipa-cp-value-
ຂະຫນາດລາຍການ ແມ່ນຈໍານວນສູງສຸດຂອງຄ່າແລະປະເພດທີ່ມັນເກັບຮັກສາຕໍ່ຫນຶ່ງຢ່າງເປັນທາງການ
ພາລາມິເຕີຂອງຟັງຊັນ.

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.

allow-load-data-races
ອະນຸຍາດໃຫ້ຜູ້ເພີ່ມປະສິດທິພາບແນະນໍາການແຂ່ງຂັນຂໍ້ມູນໃຫມ່ກ່ຽວກັບການໂຫຼດ. ກໍານົດເປັນ 1 ເພື່ອອະນຸຍາດໃຫ້,
ຖ້າ ບໍ່ ດັ່ງ ນັ້ນ ເປັນ 0. ທາງ ເລືອກ ນີ້ ແມ່ນ ເປີດ ໃຊ້ ງານ ໂດຍ ໄວ້ ໃນ ຕອນ ຕົ້ນ ເວັ້ນ ເສຍ ແຕ່ implicitly ກໍາ ນົດ ໂດຍ
-fmemory-model= ທາງເລືອກ.

ອະນຸຍາດໃຫ້ເກັບຮັກສາຂໍ້ມູນ-ເຊື້ອຊາດ
ອະນຸຍາດໃຫ້ຜູ້ເພີ່ມປະສິດທິພາບແນະນໍາການແຂ່ງຂັນຂໍ້ມູນໃຫມ່ໃນຮ້ານຄ້າ. ກໍານົດເປັນ 1 ເພື່ອອະນຸຍາດໃຫ້,
ຖ້າ ບໍ່ ດັ່ງ ນັ້ນ ເປັນ 0. ທາງ ເລືອກ ນີ້ ແມ່ນ ເປີດ ໃຊ້ ງານ ໂດຍ ໄວ້ ໃນ ຕອນ ຕົ້ນ ເວັ້ນ ເສຍ ແຕ່ implicitly ກໍາ ນົດ ໂດຍ
-fmemory-model= ທາງເລືອກ.

allow-packed-load-data-races
ອະນຸຍາດໃຫ້ຜູ້ເພີ່ມປະສິດທິພາບແນະນໍາການແຂ່ງຂັນຂໍ້ມູນໃຫມ່ກ່ຽວກັບການໂຫຼດຂໍ້ມູນທີ່ຖືກບັນຈຸ. ຕັ້ງເປັນ 1 ຫາ
ອະ​ນຸ​ຍາດ​ໃຫ້, ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​ເປັນ 0. ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ເວັ້ນ​ເສຍ​ແຕ່​ກໍາ​ນົດ implicitly ໂດຍ
ໄດ້ -fmemory-model= ທາງເລືອກ.

allow-packed-store-data-races
ອະນຸຍາດໃຫ້ຜູ້ເພີ່ມປະສິດທິພາບແນະນຳການແຂ່ງຂັນຂໍ້ມູນໃໝ່ຢູ່ໃນບ່ອນເກັບຂໍ້ມູນທີ່ຖືກບັນຈຸ. ຕັ້ງເປັນ 1 ຫາ
ອະ​ນຸ​ຍາດ​ໃຫ້, ຖ້າ​ບໍ່​ດັ່ງ​ນັ້ນ​ເປັນ 0. ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ໄດ້​ຮັບ​ການ​ເປີດ​ນໍາ​ໃຊ້​ໂດຍ​ຄ່າ​ເລີ່ມ​ຕົ້ນ​ເວັ້ນ​ເສຍ​ແຕ່​ກໍາ​ນົດ implicitly ໂດຍ
ໄດ້ -fmemory-model= ທາງເລືອກ.

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
ກໍານົດຈໍານວນສູງສຸດຂອງຜູ້ສະຫມັກທີ່ມີຢູ່ແລ້ວທີ່ຈະພິຈາລະນາໃນເວລາທີ່ຊອກຫາ
ພື້ນຖານສໍາລັບຜູ້ສະຫມັກການຫຼຸດຜ່ອນຄວາມເຂັ້ມແຂງເສັ້ນຊື່ໃຫມ່.

ທາງເລືອກໃນການ ການຄວບຄຸມ ໄດ້ ໂປເຈັກເຕີ້
ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ຄວບ​ຄຸມ 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++.

-AND- ແຍກເສັ້ນທາງລວມ. ໄດເລກະທໍລີໃດນຶ່ງທີ່ລະບຸດ້ວຍ -I ທາງເລືອກກ່ອນ -AND- ມີ
ຄົ້ນຫາພຽງແຕ່ສ່ວນຫົວທີ່ຮ້ອງຂໍດ້ວຍ "#include"ໄຟລ໌""; ພວກເຂົາບໍ່ໄດ້ຄົ້ນຫາ
"#ລວມໄຟລ໌>". ຖ້າໄດເລກະທໍລີເພີ່ມເຕີມຖືກກໍານົດດ້ວຍ -I ທາງ​ເລືອກ​ຫຼັງ​ຈາກ​
-AND-, ໄດເລກະທໍລີເຫຼົ່ານັ້ນຖືກຄົ້ນຫາທັງຫມົດ #include ທິດທາງ.

ເພີ່ມ​ເຕີມ, -AND- inhibits ການ​ນໍາ​ໃຊ້​ຂອງ​ບັນ​ຊີ​ລາຍ​ການ​ໄຟລ​໌​ປະ​ຈຸ​ບັນ​ເປັນ​
ໄດເລກະທໍລີຄົ້ນຫາທໍາອິດສໍາລັບ "#include"ໄຟລ໌"". ຕົວເລືອກນີ້ຖືກປະຕິເສດ.

-nostdinc
ຢ່າຄົ້ນຫາໄດເລກະທໍລີລະບົບມາດຕະຖານສໍາລັບໄຟລ໌ສ່ວນຫົວ. ພຽງແຕ່ໄດເລກະທໍລີ
ທ່ານ​ໄດ້​ລະ​ບຸ​ໄວ້​ກັບ​ -I ທາງເລືອກ (ແລະໄດເລກະທໍລີຂອງໄຟລ໌ປະຈຸບັນ, ຖ້າ
ທີ່ເຫມາະສົມ) ຖືກຄົ້ນຫາ.

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

- ລວມ​ທັງ​ ເອກະສານ
ຂະບວນການ ເອກະສານ ຄືກັບວ່າ "#include "file" ປາກົດເປັນແຖວທໍາອິດຂອງແຫຼ່ງຕົ້ນຕໍ
ໄຟລ໌. ຢ່າງໃດກໍຕາມ, ໄດເລກະທໍລີທໍາອິດຄົ້ນຫາ ເອກະສານ ແມ່ນ preprocessor ເຮັດວຽກ
ລະບົບ ແທນທີ່ຈະເປັນ of ໄດເລກະທໍລີທີ່ປະກອບດ້ວຍໄຟລ໌ຕົ້ນສະບັບ. ຖ້າບໍ່ພົບ
ຢູ່ທີ່ນັ້ນ, ມັນຖືກຄົ້ນຫາຢູ່ໃນສ່ວນທີ່ເຫລືອຂອງ "#include "..."" ລະບົບຕ່ອງໂສ້ຄົ້ນຫາ
ທຳ ມະດາ.

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

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

ໄຟລ໌ທັງໝົດທີ່ລະບຸໂດຍ - ໄອມາໂຄຣ ຖືກປະມວນຜົນກ່ອນໄຟລ໌ທັງໝົດທີ່ລະບຸໂດຍ - ລວມ​ທັງ​.

-idirafter dir
ຄົ້ນຫາ dir ສໍາລັບໄຟລ໌ header, ແຕ່ເຮັດມັນ ຫຼັງຈາກ ໄດເລກະທໍລີທັງໝົດທີ່ລະບຸດ້ວຍ -I ແລະ
ໄດເລກະທໍລີລະບົບມາດຕະຖານໝົດແລ້ວ. dir ຖືກປະຕິບັດເປັນລະບົບປະກອບມີ
ໄດເລກະທໍລີ. ຖ້າ dir ເລີ່ມຕົ້ນດ້ວຍ "=", ຈາກນັ້ນ "=" ຈະຖືກແທນທີ່ດ້ວຍ sysroot
ຄໍານໍາຫນ້າ; ເບິ່ງ --sysroot ແລະ -isysroot.

- ຄໍາ​ນິ​ຍາມ​ ຄຳ ນຳ ໜ້າ
ລະບຸວ່າ ຄຳ ນຳ ໜ້າ ເປັນຄໍານໍາຫນ້າສໍາລັບການຕໍ່ມາ -iwithprefix ທາງເລືອກ. ຖ້າຄໍານໍາຫນ້າ
ເປັນຕົວແທນຂອງໄດເລກະທໍລີ, ທ່ານຄວນປະກອບມີສຸດທ້າຍ /.

-iwithprefix dir
-iwithprefix ກ່ອນ dir
ເອກະສານຊ້ອນທ້າຍ dir ກັບຄໍານໍາຫນ້າທີ່ລະບຸໄວ້ກ່ອນຫນ້ານີ້ກັບ - ຄໍາ​ນິ​ຍາມ​, ແລະເພີ່ມຜົນໄດ້ຮັບ
ໄດເລກະທໍລີທີ່ປະກອບມີເສັ້ນທາງຄົ້ນຫາ. -iwithprefix ກ່ອນ ເອົາມັນຢູ່ໃນສະຖານທີ່ດຽວກັນ -I
ຈະ; -iwithprefix ວາງມັນໄວ້ບ່ອນໃດ -idirafter ຈະ.

-isysroot dir
ທາງເລືອກນີ້ແມ່ນຄ້າຍຄື --sysroot ທາງ​ເລືອກ​, ແຕ່​ນໍາ​ໃຊ້​ພຽງ​ແຕ່​ກັບ​ໄຟລ​໌ header (ຍົກ​ເວັ້ນ​ສໍາ​ລັບ​ການ​
Darwin ເປົ້າຫມາຍ, ບ່ອນທີ່ມັນໃຊ້ກັບທັງໄຟລ໌ header ແລະຫ້ອງສະຫມຸດ). ເບິ່ງ
--sysroot ທາງ​ເລືອກ​ສໍາ​ລັບ​ຂໍ້​ມູນ​ເພີ່ມ​ເຕີມ​.

-Imultilib dir
ການນໍາໃຊ້ dir ເປັນໄດເລກະທໍລີຍ່ອຍຂອງໄດເລກະທໍລີທີ່ມີສ່ວນຫົວ C++ ສະເພາະເປົ້າໝາຍ.

- ລະບົບ dir
ຄົ້ນຫາ dir ສໍາລັບໄຟລ໌ header, ຫຼັງຈາກໄດເລກະທໍລີທັງຫມົດທີ່ລະບຸໂດຍ -I ແຕ່ກ່ອນ
ໄດເລກະທໍລີລະບົບມາດຕະຖານ. ໝາຍມັນເປັນລະບົບລະບົບ, ເພື່ອໃຫ້ມັນຄືກັນ
ການປິ່ນປົວພິເສດທີ່ຖືກນໍາໃຊ້ກັບລະບົບມາດຕະຖານ. ຖ້າ dir ເລີ່ມຕົ້ນ
ດ້ວຍ "=", ຫຼັງຈາກນັ້ນ "=" ຈະຖືກແທນທີ່ດ້ວຍຄໍານໍາຫນ້າ sysroot; ເບິ່ງ --sysroot ແລະ
-isysroot.

-iquote dir
ຄົ້ນຫາ dir ສະເພາະໄຟລ໌ສ່ວນຫົວທີ່ຮ້ອງຂໍດ້ວຍ "#include"ໄຟລ໌""; ພວກ​ເຂົ້າ​ບໍ່​ແມ່ນ
ຄົ້ນຫາສໍາລັບ "#includeໄຟລ໌>", ກ່ອນທີ່ຈະໄດເລກະທໍລີທັງຫມົດທີ່ກໍານົດໂດຍ -I ແລະກ່ອນ
ໄດເລກະທໍລີລະບົບມາດຕະຖານ. ຖ້າ dir ເລີ່ມຕົ້ນດ້ວຍ "=", ຈາກນັ້ນ "=" ຈະຖືກແທນທີ່ດ້ວຍ
sysroot ຄໍານໍາຫນ້າ; ເບິ່ງ --sysroot ແລະ -isysroot.

-fdirectives ເທົ່ານັ້ນ
ເມື່ອປະມວນຜົນກ່ອນ, ຈັດການຄຳສັ່ງ, ແຕ່ຢ່າຂະຫຍາຍມະຫາພາກ.

ພຶດຕິກໍາຂອງທາງເລືອກແມ່ນຂຶ້ນກັບ -E ແລະ -fpreprocessed ຕົວເລືອກ

ກັບ -E, preprocessing ແມ່ນຈໍາກັດພຽງແຕ່ການຈັດການຄໍາສັ່ງເຊັ່ນ "#define",
"#ifdef", ແລະ "#error". ການດໍາເນີນງານ preprocessor ອື່ນໆ, ເຊັ່ນ: ການຂະຫຍາຍມະຫາພາກແລະ
ການແປງ trigraph ບໍ່ໄດ້ປະຕິບັດ. ນອກຈາກນັ້ນ, ໄດ້ -dD ທາງເລືອກແມ່ນ implicitly
enabled

ກັບ -fpreprocessed, ຄໍານິຍາມຂອງເສັ້ນຄໍາສັ່ງແລະ macro builtin ຫຼາຍທີ່ສຸດແມ່ນ
ຄົນພິການ. Macros ເຊັ່ນ "__LINE__", ເຊິ່ງຂຶ້ນກັບບໍລິບົດ, ຖືກຈັດການ
ປົກກະຕິ. ນີ້ເຮັດໃຫ້ການລວບລວມໄຟລ໌ທີ່ປຸງແຕ່ງກ່ອນຫນ້າດ້ວຍ "-E
-fdirectives ເທົ່ານັ້ນ".

ກັບທັງສອງ -E ແລະ -fpreprocessed, ກົດລະບຽບສໍາລັບ -fpreprocessed ເອົາຄວາມສຳຄັນ. ນີ້
ເຮັດ​ໃຫ້​ການ​ປຸງ​ແຕ່ງ​ເຕັມ​ທີ່​ຂອງ​ໄຟລ​໌​ທີ່​ຜ່ານ​ມາ preprocessed ກັບ "-E
-fdirectives ເທົ່ານັ້ນ".

-fdollars-in-identifiers
ຍອມຮັບ $ ໃນຕົວລະບຸ.

-fextended-identifiers
ຍອມຮັບຊື່ຕົວອັກສອນທົ່ວໄປໃນຕົວລະບຸ. ທາງເລືອກນີ້ແມ່ນທົດລອງ; ຢູ່​ໃນ
GCC ຮຸ່ນໃນອະນາຄົດ, ມັນຈະຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນສໍາລັບ C99 ແລະ C++.

-fno-canonical-system-headers
ເມື່ອການປະມວນຜົນກ່ອນ, ຢ່າຫຍໍ້ເສັ້ນທາງສ່ວນຫົວຂອງລະບົບດ້ວຍ canonicalization.

-fpreprocessed
ຊີ້ບອກກັບໂປເຊດເຊີ preprocessor ວ່າໄຟລ໌ input ໄດ້ຖືກປຸງແຕ່ງແລ້ວ. ນີ້
ສະກັດກັ້ນສິ່ງຕ່າງໆເຊັ່ນ: ການຂະຫຍາຍມະຫາພາກ, ການແປງ trigraph, ຫຼຸດພົ້ນຈາກການເຊື່ອມແຖວໃໝ່,
ແລະການປຸງແຕ່ງຄໍາສັ່ງສ່ວນໃຫຍ່. preprocessor ຍັງຮັບຮູ້ແລະເອົາອອກ
ຄໍາເຫັນ, ດັ່ງນັ້ນທ່ານສາມາດຜ່ານໄຟລ໌ preprocessed ກັບ -C ກັບ compiler ໂດຍບໍ່ມີການ
ບັນຫາ. ໃນຮູບແບບນີ້, preprocessor ປະສົມປະສານແມ່ນຫຼາຍກ່ວາ tokenizer ເລັກນ້ອຍ
ສໍາລັບດ້ານຫນ້າ.

-fpreprocessed ແມ່ນ implicit ຖ້າໄຟລ໌ input ມີຫນຶ່ງຂອງນາມສະກຸນ .i, .ii or .ໄມ.
ເຫຼົ່ານີ້ແມ່ນສ່ວນຂະຫຍາຍທີ່ GCC ໃຊ້ສໍາລັບໄຟລ໌ທີ່ສ້າງຂຶ້ນກ່ອນການປຸງແຕ່ງ - save-temps​.

-ftabstop=width
ກໍານົດໄລຍະຫ່າງລະຫວ່າງແຖບຢຸດ. ນີ້ຊ່ວຍໃຫ້ຕົວປະມວນຜົນກ່ອນລາຍງານຖັນທີ່ຖືກຕ້ອງ
ຕົວເລກໃນຄໍາເຕືອນຫຼືຄວາມຜິດພາດ, ເຖິງແມ່ນວ່າແຖບຈະປາກົດຢູ່ໃນເສັ້ນ. ຖ້າມູນຄ່າຫນ້ອຍລົງ
ຫຼາຍກວ່າ 1 ຫຼືຫຼາຍກວ່າ 100, ທາງເລືອກແມ່ນຖືກລະເລີຍ. ຄ່າເລີ່ມຕົ້ນແມ່ນ 8.

-fdebug-cpp
ທາງເລືອກນີ້ແມ່ນເປັນປະໂຫຍດພຽງແຕ່ສໍາລັບການ debugging GCC. ເມື່ອໃຊ້ກັບ -E, dumps debugging
ຂໍ້ມູນກ່ຽວກັບແຜນທີ່ສະຖານທີ່. ທຸກໆ token ໃນຜົນຜະລິດແມ່ນນໍາຫນ້າໂດຍການ dump ຂອງ
ແຜນ​ທີ່​ທີ່​ຕັ້ງ​ຂອງ​ຕົນ​ເປັນ​ຂອງ​. ການຖິ້ມຂີ້ເຫຍື້ອຂອງແຜນທີ່ຖືສະຖານທີ່ຂອງ token
ຈະເປັນ:

{"P":F ;"F":F ;"L": ;"C": ;"S": ;"M": ;"E": "loc": }

ເມື່ອນໍາໃຊ້ໂດຍບໍ່ມີການ -E, ທາງເລືອກນີ້ບໍ່ມີຜົນກະທົບ.

-ftrack-macro-ຂະຫຍາຍ[=ລະດັບ]
ຕິດຕາມສະຖານທີ່ຂອງໂທເຄັນໃນທົ່ວການຂະຫຍາຍຕົວມະຫາພາກ. ນີ້ອະນຸຍາດໃຫ້ compiler ປ່ອຍອອກມາ
ການວິນິໄສກ່ຽວກັບ stack macro expansion stack ໃນປະຈຸບັນເມື່ອມີຂໍ້ຜິດພາດໃນການລວບລວມຂໍ້ມູນເກີດຂຶ້ນ
ການຂະຫຍາຍຕົວມະຫາພາກ. ການນໍາໃຊ້ທາງເລືອກນີ້ເຮັດໃຫ້ preprocessor ແລະ compiler ບໍລິໂພກ
ຄວາມຊົງຈໍາຫຼາຍ. ໄດ້ ລະດັບ ພາລາມິເຕີສາມາດນໍາໃຊ້ເພື່ອເລືອກລະດັບຄວາມແມ່ນຍໍາຂອງ token
ການຕິດຕາມສະຖານທີ່ດັ່ງນັ້ນຈຶ່ງຫຼຸດລົງການບໍລິໂພກຫນ່ວຍຄວາມຈໍາຖ້າຈໍາເປັນ. ມູນຄ່າ 0 of
ລະດັບ de-activates ທາງເລືອກນີ້ຄືກັບວ່າບໍ່ມີ -ftrack-macro-ຂະຫຍາຍ ມີຢູ່
ເສັ້ນຄໍາສັ່ງ. ມູນຄ່າ 1 ຕິດ​ຕາມ​ສະ​ຖານ​ທີ່ tokens ໃນ​ຮູບ​ແບບ​ຊຸດ​ໂຊມ​ສໍາ​ລັບ​ຄວາມ​ສາ​ມາດ​ຂອງ​
ຫນ່ວຍຄວາມຈໍາຫນ້ອຍທີ່ສຸດ overhead. ໃນ​ຮູບ​ແບບ​ນີ້ tokens ທັງ​ຫມົດ​ທີ່​ເປັນ​ຜົນ​ມາ​ຈາກ​ການ​ຂະ​ຫຍາຍ​ຕົວ​ຂອງ​
argument ຂອງ macro ຄ້າຍຄືຟັງຊັນມີສະຖານທີ່ດຽວກັນ. ມູນຄ່າ 2 ຕິດ​ຕາມ tokens
ສະຖານທີ່ຢ່າງສົມບູນ. ຄ່ານີ້ແມ່ນຄວາມຊົງຈໍາທີ່ຫິວທີ່ສຸດ. ເມື່ອທາງເລືອກນີ້ຖືກມອບໃຫ້
ບໍ່ມີການໂຕ້ຖຽງ, ຄ່າພາລາມິເຕີເລີ່ມຕົ້ນແມ່ນ 2.

ໃຫ້ສັງເກດວ່າ -ftrack-macro-expansion=2 ຖືກເປີດໃຊ້ໂດຍຄ່າເລີ່ມຕົ້ນ.

-fexec-charset=ສາຍໄຟ
ກໍານົດຊຸດຕົວອັກສອນການປະຕິບັດ, ໃຊ້ສໍາລັບຄວາມຄົງທີ່ຂອງສະຕຣິງແລະຕົວອັກສອນ. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ UTF-8. ສາຍໄຟ ສາມາດເປັນການເຂົ້າລະຫັດໃດໆທີ່ສະຫນັບສະຫນູນໂດຍຫ້ອງສະຫມຸດ "iconv" ຂອງລະບົບ
ປົກກະຕິ.

-fwide-exec-charset=ສາຍໄຟ
ກໍານົດຊຸດຕົວອັກສອນການປະຕິບັດກວ້າງ, ໃຊ້ສໍາລັບສະຕຣິງກວ້າງແລະຄ່າຄົງທີ່ຂອງຕົວອັກສອນ.
ຄ່າເລີ່ມຕົ້ນແມ່ນ UTF-32 ຫຼື UTF-16, ອັນໃດກໍ່ຕາມທີ່ກົງກັບຄວາມກວ້າງຂອງ "wchar_t". ເປັນ
ກັບ -fexec-charset, ສາຍໄຟ ສາມາດເປັນການເຂົ້າລະຫັດໃດໆທີ່ສະຫນັບສະຫນູນໂດຍ "iconv" ຂອງລະບົບ.
ຫໍສະໝຸດ; ແນວໃດກໍ່ຕາມ, ທ່ານຈະມີບັນຫາກັບການເຂົ້າລະຫັດທີ່ບໍ່ເຫມາະ
ແທ້ໃນ "wchar_t".

-finput-charset=ສາຍໄຟ
ຕັ້ງຄ່າຊຸດຕົວອັກສອນທີ່ປ້ອນເຂົ້າ, ໃຊ້ສຳລັບການແປຈາກຊຸດຕົວອັກສອນຂອງຕົວປ້ອນຂໍ້ມູນ
ໄຟລ໌ໄປຫາຕົວອັກສອນຕົ້ນສະບັບທີ່ກໍານົດໄວ້ໂດຍ GCC. ຖ້າທ້ອງຖິ່ນບໍ່ໄດ້ລະບຸ, ຫຼື GCC
ບໍ່ສາມາດໄດ້ຮັບຂໍ້ມູນນີ້ຈາກທ້ອງຖິ່ນ, ຄ່າເລີ່ມຕົ້ນແມ່ນ UTF-8. ນີ້ສາມາດເປັນ
overridden ໂດຍທັງ locale ຫຼືຕົວເລືອກເສັ້ນຄໍາສັ່ງນີ້. ໃນປັດຈຸບັນຄໍາສັ່ງ
ຕົວເລືອກແຖວຈະມີຄວາມສຳຄັນກວ່າຖ້າມີຂໍ້ຂັດແຍ່ງ. ສາຍໄຟ ສາມາດເຂົ້າລະຫັດໃດໆ
ສະຫນັບສະຫນູນໂດຍປົກກະຕິຫ້ອງສະຫມຸດ "iconv" ຂອງລະບົບ.

-fworking-directory
ເປີດໃຊ້ການສ້າງຕົວໝາຍແຖວໃນຜົນອອກຂອງໂປເຊດເຊີ preprocessor ທີ່ຈະປ່ອຍໃຫ້ compiler ໄດ້
ຮູ້ຈັກໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນໃນເວລາຂອງການປຸງແຕ່ງກ່ອນ. ໃນເວລາທີ່ທາງເລືອກນີ້ແມ່ນ
ເປີດໃຊ້ງານແລ້ວ, ຕົວປະມວນຜົນກ່ອນຈະປ່ອຍອອກມາ, ຫຼັງຈາກເຄື່ອງໝາຍແຖວເບື້ອງຕົ້ນ, ເປັນເຄື່ອງໝາຍແຖວທີສອງ
ກັບໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນຕິດຕາມດ້ວຍສອງເຄື່ອງຊ້ອນ. GCC ຈະໃຊ້ອັນນີ້
ໄດເລກະທໍລີ, ເມື່ອມັນມີຢູ່ໃນວັດສະດຸປ້ອນທີ່ປຸງແຕ່ງກ່ອນ, ເປັນໄດເລກະທໍລີທີ່ປ່ອຍອອກມາ
ໄດເລກະທໍລີທີ່ເຮັດວຽກໃນປະຈຸບັນຢູ່ໃນບາງຮູບແບບຂໍ້ມູນການດີບັກ. ທາງເລືອກນີ້ແມ່ນ
ເປີດໃຊ້ implicitly ຖ້າຂໍ້ມູນ debugging ຖືກເປີດໃຊ້, ແຕ່ນີ້ສາມາດຖືກຍັບຍັ້ງໄດ້
ແບບຟອມທີ່ຖືກປະຕິເສດ -fno-working-directoryທີ່ຢູ່ ຖ້າຫາກວ່າ -P ທຸງມີຢູ່ໃນຄໍາສັ່ງ
ເສັ້ນ, ທາງເລືອກນີ້ບໍ່ມີຜົນ, ເພາະວ່າບໍ່ມີຄໍາສັ່ງ "#line" ຖືກປ່ອຍອອກມາຢ່າງໃດກໍ່ຕາມ.

-fno-show-column
ຢ່າພິມຕົວເລກຖັນໃນການວິນິດໄສ. ນີ້ອາດຈະເປັນສິ່ງຈໍາເປັນຖ້າການວິນິດໄສ
ຖືກສະແກນໂດຍໂຄງການທີ່ບໍ່ເຂົ້າໃຈຕົວເລກຖັນ, ເຊັ່ນ:
dejagnu.

-A ຄາດຄະເນ=ຄໍາຕອບ
ເຮັດການຢືນຢັນກັບ predicate ໄດ້ ຄາດຄະເນ ແລະຕອບ ຄໍາຕອບ. ແບບຟອມນີ້ແມ່ນ
ຕ້ອງການຮູບແບບເກົ່າ -A ຄາດຄະເນ(ຄໍາຕອບ), ທີ່ຍັງສະຫນັບສະຫນູນ, ເນື່ອງຈາກວ່າມັນ
ບໍ່ໄດ້ໃຊ້ຕົວອັກສອນພິເສດຂອງແກະ.

-A -ຄາດຄະເນ=ຄໍາຕອບ
ຍົກເລີກການຢືນຢັນກັບ predicate ຄາດຄະເນ ແລະຕອບ ຄໍາຕອບ.

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

M ແທນທີ່ຈະເປັນຜົນຜະລິດປົກກະຕິ, ສ້າງບັນຊີລາຍຊື່ຂອງ #ກໍານົດ ຄໍາແນະນໍາສໍາລັບທຸກຄົນ
macros ກໍານົດໃນລະຫວ່າງການດໍາເນີນການຂອງ preprocessor, ລວມທັງ predefined
ມະຫາພາກ. ນີ້ເຮັດໃຫ້ທ່ານມີວິທີການຊອກຫາສິ່ງທີ່ຖືກກໍານົດໄວ້ລ່ວງຫນ້າໃນສະບັບຂອງທ່ານ
ໂປເຊດເຊີກ່ອນ. ສົມມຸດວ່າທ່ານບໍ່ມີໄຟລ໌ foo.h, ຄໍາສັ່ງ

ແຕະ foo.h ; cpp -dM foo.h

ຈະສະແດງ macro ທີ່ກໍານົດໄວ້ກ່ອນທັງຫມົດ.

ຖ້າຫາກວ່າທ່ານນໍາໃຊ້ -dM ໂດຍບໍ່ມີການ -E ທາງເລືອກ, -dM ຖືກຕີຄວາມຫມາຍເປັນຄໍາສັບຄ້າຍຄື
-fdump-rtl-mach.

D ຄື M ຍົກເວັ້ນໃນສອງດ້ານ: ມັນເຮັດ ບໍ່ ປະກອບມີ macro ທີ່ກໍານົດໄວ້ກ່ອນ, ແລະມັນ
ຜົນໄດ້ຮັບ ທັງສອງ ໄດ້ #ກໍານົດ ຄໍາແນະນໍາແລະຜົນຂອງການປຸງແຕ່ງກ່ອນ. ທັງສອງປະເພດ
ຂອງຜົນຜະລິດໄປຫາໄຟລ໌ຜົນຜະລິດມາດຕະຖານ.

N ຄື D, ແຕ່ປ່ອຍພຽງແຕ່ຊື່ມະຫາພາກ, ບໍ່ແມ່ນການຂະຫຍາຍຂອງມັນ.

I ຜົນຜະລິດ #include ຄໍາແນະນໍານອກເຫນືອໄປຈາກຜົນຂອງການປຸງແຕ່ງກ່ອນ.

U ຄື D ຍົກ​ເວັ້ນ​ພຽງ​ແຕ່​ມະ​ໂຄ​ທີ່​ໄດ້​ຮັບ​ການ​ຂະ​ຫຍາຍ​, ຫຼື​ການ​ກໍາ​ນົດ​ຂອງ​ການ​ທົດ​ສອບ​
ໃນຄໍາສັ່ງ preprocessor, ແມ່ນຜົນຜະລິດ; ຜົນຜະລິດແມ່ນຊັກຊ້າຈົນກ່ວາການນໍາໃຊ້ຫຼື
ການທົດສອບມະຫາພາກ; ແລະ #ສຸດຍອດ ທິດທາງແມ່ນຜົນຜະລິດສໍາລັບ macros ທົດສອບແຕ່
ບໍ່ໄດ້ກໍານົດໃນເວລານັ້ນ.

-P ຍັບຍັ້ງການສ້າງຕົວໝາຍແຖວໃນຜົນຜະລິດຈາກໂປຣເຊສເຊີກ່ອນ. ນີ້ອາດຈະເປັນ
ເປັນປະໂຫຍດໃນເວລາທີ່ແລ່ນ preprocessor ກ່ຽວກັບບາງສິ່ງບາງຢ່າງທີ່ບໍ່ແມ່ນລະຫັດ C, ແລະຈະຖືກສົ່ງໄປ
ກັບໂຄງການທີ່ອາດຈະສັບສົນໂດຍ linemarkers.

-C ຢ່າປະຖິ້ມຄໍາເຫັນ. ຄໍາເຫັນທັງຫມົດຖືກສົ່ງຜ່ານໄປຫາໄຟລ໌ຜົນຜະລິດ, ຍົກເວັ້ນ
ສໍາ​ລັບ​ຄໍາ​ຄິດ​ເຫັນ​ໃນ​ຄໍາ​ແນະ​ນໍາ​ການ​ປຸງ​ແຕ່ງ​, ທີ່​ຖືກ​ລົບ​ພ້ອມ​ກັບ​ຄໍາ​ແນະ​ນໍາ​.

ທ່ານຄວນກຽມພ້ອມສໍາລັບຜົນຂ້າງຄຽງໃນເວລາທີ່ໃຊ້ -C; ມັນເຮັດໃຫ້ preprocessor ໄດ້
ປະຕິບັດຄໍາຄິດເຫັນເປັນ token ໃນສິດທິຂອງຕົນເອງ. ຕົວຢ່າງ, ຄໍາເຫັນທີ່ປາກົດຢູ່
ການເລີ່ມຕົ້ນຂອງສິ່ງທີ່ຈະເປັນເສັ້ນຄໍາສັ່ງມີຜົນກະທົບຂອງການປ່ຽນເສັ້ນນັ້ນເປັນ
ເສັ້ນແຫຼ່ງທໍາມະດາ, ນັບຕັ້ງແຕ່ token ທໍາອິດໃນເສັ້ນບໍ່ແມ່ນ #.

-CC ຢ່າປະຖິ້ມຄໍາເຫັນ, ລວມທັງໃນລະຫວ່າງການຂະຫຍາຍມະຫາພາກ. ນີ້ແມ່ນຄ້າຍຄື -C, ຍົກເວັ້ນ
ຄໍາຄິດຄໍາເຫັນທີ່ມີຢູ່ໃນ macro ຍັງຖືກສົ່ງຜ່ານໄປຫາໄຟລ໌ຜົນຜະລິດທີ່
ມະຫາພາກໄດ້ຖືກຂະຫຍາຍ.

ນອກ​ເຫນືອ​ໄປ​ຈາກ​ຜົນ​ກະ​ທົບ​ຂ້າງ​ຄຽງ​ຂອງ​ -C ທາງເລືອກ, ໄດ້ -CC ທາງເລືອກເຮັດໃຫ້ C++-style ທັງໝົດ
ຄຳເຫັນພາຍໃນມະຫາພາກທີ່ຈະປ່ຽນເປັນຄຳເຫັນແບບ C. ນີ້ແມ່ນເພື່ອປ້ອງກັນບໍ່ໃຫ້ຕໍ່ມາ
ການນໍາໃຊ້ມະຫາພາກຈາກການສະແດງຄວາມຄິດເຫັນທີ່ບໍ່ໄດ້ຕັ້ງໃຈອອກສ່ວນທີ່ເຫຼືອຂອງສາຍແຫຼ່ງ.

ໄດ້ -CC ທາງເລືອກແມ່ນຖືກນໍາໃຊ້ໂດຍທົ່ວໄປເພື່ອສະຫນັບສະຫນູນຄໍາເຫັນ lint.

-cpp
ພະຍາຍາມຮຽນແບບພຶດຕິກໍາຂອງໂປເຊດເຊີ C preprocessors ແບບເກົ່າ, ກົງກັນຂ້າມກັບ ISO C
ໂປເຊດເຊີກ່ອນ.

-trigraphs
ຂະບວນການລໍາດັບ trigraph. ເຫຼົ່ານີ້ແມ່ນລໍາດັບສາມລັກສະນະ, ທັງຫມົດເລີ່ມຕົ້ນດ້ວຍ
??, ທີ່ຖືກກໍານົດໂດຍ ISO C ເພື່ອຢືນສໍາລັບຕົວອັກສອນດຽວ. ຍົກ​ຕົວ​ຢ່າງ, ??/ ຢືນຢູ່
ສໍາລັບການ \, ດັ່ງນັ້ນ '??/n' ແມ່ນຕົວລະຄອນຄົງທີ່ສຳລັບແຖວໃໝ່. ໂດຍຄ່າເລີ່ມຕົ້ນ, GCC ຈະບໍ່ສົນໃຈ
trigraphs, ແຕ່ໃນໂຫມດທີ່ສອດຄ່ອງກັບມາດຕະຖານມັນປ່ຽນພວກມັນ. ເບິ່ງ -std ແລະ -ansi
ຕົວເລືອກ

ເກົ້າ trigraphs ແລະການທົດແທນຂອງເຂົາເຈົ້າແມ່ນ

ໄຕຣກ: ??(??)??<??>??=??/??' ??! ??-
ການທົດແທນ: [ ] { } # \ ^ | ~

-remap
ເປີດ​ໃຊ້​ງານ​ລະ​ຫັດ​ພິ​ເສດ​ເພື່ອ​ເຮັດ​ວຽກ​ກ່ຽວ​ກັບ​ລະ​ບົບ​ໄຟລ​໌​ທີ່​ອະ​ນຸ​ຍາດ​ໃຫ້​ພຽງ​ແຕ່​ໄຟລ​໌​ສັ້ນ​ຫຼາຍ​
ຊື່, ເຊັ່ນ MS-DOS.

- ຊ່ວຍ
--ເປົ້າ​ຫມາຍ​ການ​ຊ່ວຍ​ເຫຼືອ​
ພິມຂໍ້ຄວາມທີ່ອະທິບາຍຕົວເລືອກແຖວຄໍາສັ່ງທັງໝົດ ແທນການປຸງແຕ່ງອັນໃດອັນໜຶ່ງກ່ອນ.

-v ໂຫມດ verbose. ພິມເລກສະບັບຂອງ GNU CPP ໃນຕອນເລີ່ມຕົ້ນຂອງການປະຕິບັດ, ແລະ
ລາຍງານຮູບແບບສຸດທ້າຍຂອງເສັ້ນທາງລວມ.

-H ພິມຊື່ຂອງແຕ່ລະ header file ທີ່ໃຊ້, ນອກຈາກກິດຈະກໍາປົກກະຕິອື່ນໆ. ແຕ່ລະ
ຊື່ແມ່ນ indented ເພື່ອສະແດງໃຫ້ເຫັນວ່າເລິກຢູ່ໃນ #include stack ມັນແມ່ນ. ສ່ວນຫົວທີ່ກຽມໄວ້ແລ້ວ
ໄຟລ໌ຍັງຖືກພິມອອກ, ເຖິງແມ່ນວ່າພວກເຂົາຖືກພົບເຫັນວ່າບໍ່ຖືກຕ້ອງ; precompiled ບໍ່ຖືກຕ້ອງ
ໄຟລ໌ຫົວແມ່ນພິມດ້ວຍ ...x ແລະອັນທີ່ຖືກຕ້ອງກັບ ...! .

-ການປ່ຽນແປງ
- ການປ່ຽນແປງ
ພິມໝາຍເລກລຸ້ນຂອງ GNU CPP. ດ້ວຍເຄື່ອງໝາຍດຽວ, ດຳເນີນການກ່ອນການປະມວນຜົນຕາມປົກກະຕິ.
ດ້ວຍສອງຂີດ, ອອກໄປທັນທີ.

Passing ທາງເລືອກໃນການ to ໄດ້ ຄົນລອບສັງຫານ
ທ່ານສາມາດຜ່ານທາງເລືອກໃນການປະກອບ.

- ວ.ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກໃນການປະກອບ. ຖ້າ ທາງເລືອກ ມີເຄື່ອງໝາຍຈຸດ, ມັນຖືກແບ່ງອອກ
ເປັນຫຼາຍທາງເລືອກໃນເຄື່ອງໝາຍຈຸດ.

-Xassembler ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກໃນການປະກອບ. ທ່ານສາມາດນໍາໃຊ້ນີ້ເພື່ອສະຫນອງລະບົບສະເພາະ
ຕົວເລືອກຕົວປະກອບທີ່ GCC ບໍ່ຮັບຮູ້.

ຖ້າທ່ານຕ້ອງການຜ່ານທາງເລືອກທີ່ໃຊ້ການໂຕ້ຖຽງ, ທ່ານຕ້ອງໃຊ້ -Xassembler ສອງຄັ້ງ,
ຫນຶ່ງຄັ້ງສໍາລັບທາງເລືອກແລະຫນຶ່ງຄັ້ງສໍາລັບການໂຕ້ຖຽງ.

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

object-file-name
ຊື່ໄຟລ໌ທີ່ບໍ່ໄດ້ລົງທ້າຍດ້ວຍຄຳຕໍ່ທ້າຍທີ່ຮັບຮູ້ພິເສດແມ່ນຖືວ່າເປັນຊື່
ໄຟລ໌ວັດຖຸ ຫຼືຫ້ອງສະໝຸດ. (ໄຟລ໌ວັດຖຸຖືກແຍກອອກຈາກຫ້ອງສະໝຸດໂດຍຕົວເຊື່ອມຕໍ່
ອີງ​ຕາມ​ເນື້ອ​ໃນ​ຂອງ​ໄຟລ​໌​.) ຖ້າ​ຫາກ​ວ່າ​ການ​ເຊື່ອມ​ຕໍ່​ແມ່ນ​ເຮັດ​ໄດ້​, ໄຟລ​໌​ວັດ​ຖຸ​ເຫຼົ່າ​ນີ້​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​ເປັນ​
ການປ້ອນຂໍ້ມູນໃສ່ຕົວເຊື່ອມຕໍ່.

-c
-S
-E ຖ້າທາງເລືອກໃດໆເຫຼົ່ານີ້ຖືກນໍາໃຊ້, ຫຼັງຈາກນັ້ນຕົວເຊື່ອມຕໍ່ບໍ່ໄດ້ດໍາເນີນການ, ແລະຊື່ໄຟລ໌ວັດຖຸ
ບໍ່ຄວນໃຊ້ເປັນການໂຕ້ຖຽງ.

-lຫ້ອງສະຫມຸດ
-l ຫ້ອງສະຫມຸດ
ຄົ້ນຫາຫ້ອງສະຫມຸດທີ່ມີຊື່ ຫ້ອງສະຫມຸດ ເມື່ອເຊື່ອມຕໍ່. (ທາງເລືອກທີສອງກັບ
ຫ້ອງສະຫມຸດເປັນການໂຕ້ຖຽງແຍກຕ່າງຫາກແມ່ນພຽງແຕ່ສໍາລັບການປະຕິບັດຕາມ POSIX ແລະບໍ່ແນະນໍາ.)

ມັນເຮັດໃຫ້ຄວາມແຕກຕ່າງທີ່ໃນຄໍາສັ່ງທີ່ທ່ານຂຽນທາງເລືອກນີ້; ຕົວເຊື່ອມຕໍ່ຊອກຫາ
ແລະປະມວນຜົນຫ້ອງສະຫມຸດແລະໄຟລ໌ວັດຖຸໃນຄໍາສັ່ງທີ່ເຂົາເຈົ້າໄດ້ຖືກລະບຸໄວ້. ດັ່ງນັ້ນ, foo.o
-lz bar.o ຊອກ​ຫາ​ຫ້ອງ​ສະ​ຫມຸດ​ z ຫຼັງ​ຈາກ​ໄຟລ​໌​ foo.o ແຕ່ກ່ອນ bar.oທີ່ຢູ່ ຖ້າຫາກວ່າ bar.o ຫມາຍເຖິງ
ຫນ້າທີ່ໃນ z, ຟັງຊັນເຫຼົ່ານັ້ນອາດຈະບໍ່ໄດ້ຮັບການໂຫຼດ.

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

ໄດເລກະທໍລີທີ່ຄົ້ນຫາລວມມີລະບົບມາດຕະຖານຫຼາຍລາຍການບວກກັບອັນທີ່ທ່ານ
ລະບຸດ້ວຍ -L.

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

-lobjc
ທ່ານຕ້ອງການກໍລະນີພິເສດນີ້ -l ທາງເລືອກເພື່ອເຊື່ອມຕໍ່ Objective-C ຫຼື
ໂປຣແກມ Objective-C++.

-nostartfiles
ຢ່າໃຊ້ໄຟລ໌ເລີ່ມຕົ້ນລະບົບມາດຕະຖານເມື່ອເຊື່ອມຕໍ່. ລະບົບມາດຕະຖານ
ຫ້ອງສະຫມຸດຖືກນໍາໃຊ້ເປັນປົກກະຕິ, ເວັ້ນເສຍແຕ່ -nostdlib or -nodefaultlibs ຖືກນໍາໃຊ້.

-nodefaultlibs
ຢ່າໃຊ້ຫ້ອງສະຫມຸດລະບົບມາດຕະຖານເມື່ອເຊື່ອມຕໍ່. ພຽງແຕ່ຫ້ອງສະຫມຸດທີ່ທ່ານລະບຸ
ຖືກສົ່ງໄປຫາຕົວເຊື່ອມຕໍ່, ແລະທາງເລືອກທີ່ລະບຸການເຊື່ອມໂຍງຂອງຫ້ອງສະຫມຸດລະບົບ, ເຊັ່ນ
ເປັນ "-static-libgcc" ຫຼື "-shared-libgcc", ຖືກລະເລີຍ. ໄຟລ໌ເລີ່ມຕົ້ນມາດຕະຖານແມ່ນ
ໃຊ້ຕາມປົກກະຕິ, ເວັ້ນເສຍແຕ່ -nostartfiles ຖືກນໍາໃຊ້.

compiler ອາດຈະສ້າງການໂທຫາ "memcmp", "memset", "memcpy" ແລະ "memmove". ເຫຼົ່ານີ້
ປົກກະຕິລາຍການຖືກແກ້ໄຂໂດຍລາຍການໃນ libc. ຈຸດເຂົ້າເຫຼົ່ານີ້ຄວນຈະເປັນ
ສະໜອງໃຫ້ໂດຍຜ່ານກົນໄກອື່ນເມື່ອຕົວເລືອກນີ້ຖືກລະບຸ.

-nostdlib
ຢ່າໃຊ້ໄຟລ໌ເລີ່ມຕົ້ນລະບົບມາດຕະຖານຫຼືຫ້ອງສະຫມຸດໃນເວລາທີ່ເຊື່ອມຕໍ່. ບໍ່ມີການເລີ່ມຕົ້ນ
ໄຟລ໌ແລະພຽງແຕ່ຫ້ອງສະຫມຸດທີ່ທ່ານລະບຸແມ່ນຖືກສົ່ງໄປຫາຕົວເຊື່ອມຕໍ່, ແລະທາງເລືອກ
ການລະບຸການເຊື່ອມໂຍງຂອງຫ້ອງສະຫມຸດລະບົບເຊັ່ນ "-static-libgcc" ຫຼື
"-shared-libgcc", ຖືກລະເລີຍ.

compiler ອາດຈະສ້າງການໂທຫາ "memcmp", "memset", "memcpy" ແລະ "memmove". ເຫຼົ່ານີ້
ປົກກະຕິລາຍການຖືກແກ້ໄຂໂດຍລາຍການໃນ libc. ຈຸດເຂົ້າເຫຼົ່ານີ້ຄວນຈະເປັນ
ສະໜອງໃຫ້ໂດຍຜ່ານກົນໄກອື່ນເມື່ອຕົວເລືອກນີ້ຖືກລະບຸ.

ຫນຶ່ງໃນຫ້ອງສະຫມຸດມາດຕະຖານ bypassed ໂດຍ -nostdlib ແລະ -nodefaultlibs is libgcc.a, ເປັນ
ຫ້ອງສະໝຸດຂອງສິ່ງທີ່ເຮັດປະຈຳພາຍໃນຍ່ອຍທີ່ GCC ໃຊ້ເພື່ອເອົາຊະນະຂໍ້ບົກຜ່ອງໂດຍສະເພາະ
ເຄື່ອງຈັກ, ຫຼືຄວາມຕ້ອງການພິເສດສໍາລັບບາງພາສາ.

ໃນກໍລະນີຫຼາຍທີ່ສຸດ, ທ່ານຕ້ອງການ libgcc.a ເຖິງແມ່ນວ່າທ່ານຕ້ອງການຫຼີກເວັ້ນຫ້ອງສະຫມຸດມາດຕະຖານອື່ນໆ.
ໃນຄໍາສັບຕ່າງໆອື່ນໆ, ໃນເວລາທີ່ທ່ານກໍານົດ -nostdlib or -nodefaultlibs ປົກກະຕິແລ້ວທ່ານຄວນ
ລະບຸ -lgcc ຄື​ກັນ. ນີ້ຮັບປະກັນວ່າທ່ານບໍ່ມີການອ້າງອີງທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ
ບັນຊີຍ່ອຍຂອງຫ້ອງສະໝຸດ GCC ພາຍໃນ. (ຕົວຢ່າງຂອງ routine ພາຍໃນແມ່ນ
__ຫຼັກ, ໃຊ້ເພື່ອຮັບປະກັນວ່າຕົວສ້າງ C ++ ຖືກເອີ້ນ.)

-pie
ຜະລິດຕໍາແຫນ່ງທີ່ເປັນເອກະລາດປະຕິບັດໄດ້ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນມັນ. ສໍາລັບການຄາດເດົາ
ຜົນໄດ້ຮັບ, ທ່ານຕ້ອງລະບຸຊຸດດຽວກັນຂອງທາງເລືອກທີ່ໃຊ້ສໍາລັບການລວບລວມ (-fpie,
-fPIE, ຫຼືຕົວເລືອກຍ່ອຍແບບຈໍາລອງ) ເມື່ອທ່ານລະບຸຕົວເລືອກຕົວເຊື່ອມຕໍ່ນີ້.

-rdynamic
ຜ່ານທຸງ - ສົ່ງ​ອອກ​ແບບ​ເຄື່ອນ​ໄຫວ​ ກັບຕົວເຊື່ອມຕໍ່ ELF, ກ່ຽວກັບເປົ້າຫມາຍທີ່ສະຫນັບສະຫນູນມັນ. ນີ້
ແນະນໍາຕົວເຊື່ອມຕໍ່ເພື່ອເພີ່ມສັນຍາລັກທັງຫມົດ, ບໍ່ພຽງແຕ່ໃຊ້, ໃຫ້ກັບສັນຍາລັກແບບເຄື່ອນໄຫວ
ໂຕະ. ທາງເລືອກນີ້ແມ່ນຈໍາເປັນສໍາລັບບາງການນໍາໃຊ້ "dlopen" ຫຼືເພື່ອອະນຸຍາດໃຫ້ໄດ້ຮັບ
backtraces ຈາກພາຍໃນໂຄງການ.

-s ເອົາຕາຕະລາງສັນຍາລັກທັງຫມົດແລະຂໍ້ມູນການຍົກຍ້າຍອອກຈາກການປະຕິບັດ.

-static
ໃນລະບົບທີ່ສະຫນັບສະຫນູນການເຊື່ອມໂຍງແບບເຄື່ອນໄຫວ, ນີ້ປ້ອງກັນບໍ່ໃຫ້ການເຊື່ອມຕໍ່ກັບການແບ່ງປັນ
ຫ້ອງສະໝຸດ. ໃນລະບົບອື່ນໆ, ທາງເລືອກນີ້ບໍ່ມີຜົນ.

- ແບ່ງ​ປັນ​
ຜະລິດວັດຖຸທີ່ໃຊ້ຮ່ວມກັນເຊິ່ງຫຼັງຈາກນັ້ນສາມາດເຊື່ອມຕໍ່ກັບວັດຖຸອື່ນໆເພື່ອສ້າງເປັນ
ປະຕິບັດໄດ້. ບໍ່ແມ່ນທຸກລະບົບທີ່ຮອງຮັບຕົວເລືອກນີ້. ສໍາລັບຜົນໄດ້ຮັບທີ່ຄາດເດົາໄດ້, ທ່ານຕ້ອງ
ຍັງລະບຸຊຸດຕົວເລືອກດຽວກັນທີ່ໃຊ້ສໍາລັບການລວບລວມ (-fpic, -fPIC, ຫຼືຕົວແບບ
suboptions) ເມື່ອທ່ານລະບຸຕົວເລືອກຕົວເຊື່ອມຕໍ່ນີ້.[1]

-shared-libgcc
-static-libgcc
ກ່ຽວກັບລະບົບທີ່ສະຫນອງ libgcc ເປັນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ທາງເລືອກເຫຼົ່ານີ້ບັງຄັບໃຫ້ໃຊ້
ບໍ່ວ່າຈະເປັນສະບັບທີ່ແບ່ງປັນຫຼືສະຖິດ, ຕາມລໍາດັບ. ຖ້າບໍ່ມີສະບັບພາສາທີ່ແບ່ງປັນ libgcc ແມ່ນ
ສ້າງຂຶ້ນເມື່ອ compiler ຖືກຕັ້ງຄ່າ, ທາງເລືອກເຫຼົ່ານີ້ບໍ່ມີຜົນຫຍັງເລີຍ.

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

ດັ່ງນັ້ນ, ໄດເວີ G++ ແລະ GCJ ຈະເພີ່ມອັດຕະໂນມັດ -shared-libgcc ທຸກຄັ້ງທີ່ເຈົ້າສ້າງ
ຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນຫຼືການປະຕິບັດຕົ້ນຕໍ, ເພາະວ່າ C ++ ແລະ Java ປົກກະຕິແລ້ວໃຊ້
ຂໍ້ຍົກເວັ້ນ, ດັ່ງນັ້ນນີ້ແມ່ນສິ່ງທີ່ຖືກຕ້ອງທີ່ຈະເຮັດ.

ຖ້າ, ແທນທີ່ຈະ, ທ່ານໃຊ້ໄດເວີ GCC ເພື່ອສ້າງຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ທ່ານອາດຈະພົບວ່າພວກມັນ
ບໍ່ໄດ້ເຊື່ອມຕໍ່ສະເຫມີກັບການແບ່ງປັນ libgcc. ຖ້າ GCC ຊອກຫາ, ໃນການຕັ້ງຄ່າຂອງມັນ
ເວລາ, ທ່ານມີຕົວເຊື່ອມຕໍ່ທີ່ບໍ່ແມ່ນ GNU ຫຼືຕົວເຊື່ອມຕໍ່ GNU ທີ່ບໍ່ສະຫນັບສະຫນູນທາງເລືອກ
--eh-frame-hdr, ມັນເຊື່ອມຕໍ່ສະບັບແບ່ງປັນຂອງ libgcc ເຂົ້າໄປໃນຫ້ອງສະຫມຸດຮ່ວມກັນໂດຍ
ຄ່າເລີ່ມຕົ້ນ. ຖ້າບໍ່ດັ່ງນັ້ນ, ມັນໃຊ້ປະໂຍດຈາກຕົວເຊື່ອມຕໍ່ແລະ optimizes ຫ່າງການເຊື່ອມຕໍ່
ກັບ​ສະ​ບັບ​ທີ່​ແບ່ງ​ປັນ​ຂອງ​ libgcc, ການເຊື່ອມໂຍງກັບສະບັບ static ຂອງ libgcc ໂດຍ
ຄ່າເລີ່ມຕົ້ນ. ນີ້ອະນຸຍາດໃຫ້ມີຂໍ້ຍົກເວັ້ນເພື່ອເຜີຍແຜ່ຜ່ານຫ້ອງສະຫມຸດຮ່ວມກັນດັ່ງກ່າວ, ໂດຍບໍ່ມີການ
ຄ່າໃຊ້ຈ່າຍໃນການຍົກຍ້າຍທີ່ເກີດຂື້ນໃນເວລາໂຫຼດຫ້ອງສະຫມຸດ.

ຢ່າງໃດກໍຕາມ, ຖ້າຫ້ອງສະຫມຸດຫຼືການປະຕິບັດຕົ້ນຕໍແມ່ນຄວນຈະຖິ້ມຫຼືຈັບຂໍ້ຍົກເວັ້ນ, ທ່ານ
ຕ້ອງເຊື່ອມຕໍ່ມັນໂດຍໃຊ້ G++ ຫຼື GCJ driver, ຕາມທີ່ເຫມາະສົມສໍາລັບພາສາທີ່ໃຊ້ໃນ
ໂຄງ​ການ​, ຫຼື​ການ​ນໍາ​ໃຊ້​ທາງ​ເລືອກ​ -shared-libgcc, ເຊັ່ນວ່າມັນຖືກເຊື່ອມໂຍງກັບການແບ່ງປັນ
libgcc.

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

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

-static-libstdc++
ໃນ​ເວ​ລາ​ທີ່ g ++ ໂຄງ​ການ​ແມ່ນ​ນໍາ​ໃຊ້​ເພື່ອ​ເຊື່ອມ​ຕໍ່​ໂຄງ​ການ C ++​, ໂດຍ​ປົກ​ກະ​ຕິ​ມັນ​ຈະ​ເຊື່ອມ​ຕໍ່​ອັດ​ຕະ​ໂນ​ມັດ​
ຕໍ່ libstdc++ທີ່ຢູ່ ຖ້າຫາກວ່າ libstdc++ ແມ່ນມີຢູ່ໃນຫ້ອງສະຫມຸດທີ່ໃຊ້ຮ່ວມກັນ, ແລະ -static
ທາງ​ເລືອກ​ບໍ່​ໄດ້​ຖືກ​ນໍາ​ໃຊ້​, ຫຼັງ​ຈາກ​ນັ້ນ​ການ​ເຊື່ອມ​ຕໍ່​ກັບ​ສະ​ບັບ​ທີ່​ແບ່ງ​ປັນ​ຂອງ​ libstdc++. ນັ້ນ​ແມ່ນ
ປົກກະຕິດີ. ຢ່າງໃດກໍຕາມ, ບາງຄັ້ງມັນເປັນປະໂຫຍດທີ່ຈະ freeze ສະບັບຂອງ libstdc++
ໃຊ້ໂດຍໂຄງການໂດຍບໍ່ໄດ້ໄປຫາການເຊື່ອມຕໍ່ແບບຄົງທີ່ຢ່າງເຕັມສ່ວນ. ໄດ້
-static-libstdc++ ທາງ​ເລືອກ​ຊີ້​ນໍາ​ g ++ ຄົນຂັບເພື່ອເຊື່ອມຕໍ່ libstdc++ ສະຖິຕິ, ໂດຍບໍ່ມີການ
ຈໍາເປັນຕ້ອງເຊື່ອມຕໍ່ຫ້ອງສະຫມຸດອື່ນໆຢ່າງສະຖິດ.

- ສັນ​ຍາ​ລັກ​
ຜູກມັດການອ້າງອີງໃສ່ສັນຍາລັກທົ່ວໂລກເມື່ອສ້າງວັດຖຸທີ່ໃຊ້ຮ່ວມກັນ. ເຕືອນກ່ຽວກັບການໃດໆ
ການອ້າງອີງທີ່ບໍ່ໄດ້ຮັບການແກ້ໄຂ (ເວັ້ນເສຍແຕ່ຈະ overridden ໂດຍຕົວເລືອກຕົວແກ້ໄຂການເຊື່ອມຕໍ່ -Xlinker -z
-Xlinker defs). ມີພຽງແຕ່ລະບົບຈໍານວນຫນ້ອຍທີ່ສະຫນັບສະຫນູນທາງເລືອກນີ້.

-T script
ການນໍາໃຊ້ script ເປັນຕົວເຊື່ອມຕໍ່. ທາງ​ເລືອກ​ນີ້​ແມ່ນ​ສະ​ຫນັບ​ສະ​ຫນູນ​ໂດຍ​ລະ​ບົບ​ຫຼາຍ​ທີ່​ສຸດ​ການ​ນໍາ​ໃຊ້​
ຕົວເຊື່ອມຕໍ່ GNU. ໃນບາງເປົ້າໝາຍ, ເຊັ່ນ: ເປົ້າໝາຍກະດານເປົ່າທີ່ບໍ່ມີລະບົບປະຕິບັດງານ,
ໄດ້ -T ທາງເລືອກອາດຈະຕ້ອງການໃນເວລາທີ່ເຊື່ອມຕໍ່ເພື່ອຫຼີກເວັ້ນການອ້າງອີງເຖິງສັນຍາລັກທີ່ບໍ່ໄດ້ກໍານົດ.

-Xlinker ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກໃຫ້ກັບຕົວເຊື່ອມຕໍ່. ທ່ານສາມາດນໍາໃຊ້ນີ້ເພື່ອສະຫນອງລະບົບສະເພາະ
ຕົວເລືອກຕົວເຊື່ອມຕໍ່ທີ່ GCC ບໍ່ຮັບຮູ້.

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

ເມື່ອໃຊ້ຕົວເຊື່ອມຕໍ່ GNU, ປົກກະຕິແລ້ວມັນສະດວກກວ່າທີ່ຈະຜ່ານການໂຕ້ຖຽງກັບຕົວເຊື່ອມຕໍ່
ທາງ​ເລືອກ​ການ​ນໍາ​ໃຊ້​ ທາງເລືອກ=ມູນຄ່າ syntax ກວ່າເປັນການໂຕ້ຖຽງແຍກຕ່າງຫາກ. ຕົວຢ່າງ, ເຈົ້າ
ສາມາດລະບຸ -Xlinker -map=output.map ແທນ​ທີ່​ຈະ -Xlinker - ແຜນທີ່ -Xlinker output.map.
ຕົວເຊື່ອມຕໍ່ອື່ນໆອາດຈະບໍ່ສະຫນັບສະຫນູນ syntax ນີ້ສໍາລັບຕົວເລືອກແຖວຄໍາສັ່ງ.

-Wl,ທາງເລືອກ
ຜ່ານ ທາງເລືອກ ເປັນທາງເລືອກໃຫ້ກັບຕົວເຊື່ອມຕໍ່. ຖ້າ ທາງເລືອກ ມີເຄື່ອງໝາຍຈຸດ, ມັນແບ່ງອອກເປັນ
ຕົວເລືອກຫຼາຍອັນຢູ່ໃນເຄື່ອງໝາຍຈຸດ. ທ່ານ​ສາ​ມາດ​ນໍາ​ໃຊ້ syntax ນີ້​ເພື່ອ​ຜ່ານ​ການ​ໂຕ້​ຖຽງ​ກັບ​
ທາງເລືອກ. ຍົກ​ຕົວ​ຢ່າງ, -Wl,-Map,output.map passes - ແຜນທີ່ output.map ກັບຕົວເຊື່ອມຕໍ່. ເມື່ອ​ໃດ​
ການນໍາໃຊ້ຕົວເຊື່ອມຕໍ່ GNU, ທ່ານຍັງສາມາດໄດ້ຮັບຜົນກະທົບດຽວກັນກັບ -Wl,-Map=output.map.

ຫມາຍເຫດ: ໃນ Ubuntu 8.10 ແລະຮຸ່ນຕໍ່ມາ, ສໍາລັບ LDFLAGS, ທາງເລືອກ -Wl,-z,relro ຖືກນໍາໃຊ້.
ເພື່ອປິດການ ນຳ ໃຊ້, ໃຊ້ -Wl,-z,norelro.

-u ສັນຍາລັກ
ທຳທ່າສັນຍາລັກ ສັນຍາລັກ ແມ່ນບໍ່ໄດ້ກໍານົດ, ເພື່ອບັງຄັບການເຊື່ອມຕໍ່ຂອງໂມດູນຫ້ອງສະຫມຸດເພື່ອກໍານົດ
ມັນ. ທ່ານສາມາດນໍາໃຊ້ -u ຫຼາຍຄັ້ງທີ່ມີສັນຍາລັກທີ່ແຕກຕ່າງກັນເພື່ອບັງຄັບການໂຫຼດຂອງ
ໂມດູນຫ້ອງສະຫມຸດເພີ່ມເຕີມ.

ທາງເລືອກໃນການ ສໍາລັບການ Directory ຄົ້ນຫາ
ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ລະ​ບຸ​ລະ​ບົບ​ການ​ຄົ້ນ​ຫາ​ສໍາ​ລັບ​ໄຟລ​໌​ສ່ວນ​ຫົວ​, ສໍາ​ລັບ​ຫ້ອງ​ສະ​ຫມຸດ​ແລະ​ສໍາ​ລັບ​ພາກ​ສ່ວນ​
ຂອງ compiler​:

-Idir
ເພີ່ມໄດເລກະທໍລີ dir ໄປຫາຫົວຂອງບັນຊີລາຍຊື່ຂອງໄດເລກະທໍລ