EnglishFrenchGermanItalianPortugueseRussianSpanish

ไอคอน Fav ของ OnWorks

mipsel-linux-gnu-g++-5 - ออนไลน์ใน Cloud

เรียกใช้ mipsel-linux-gnu-g++-5 ในผู้ให้บริการโฮสต์ฟรีของ OnWorks ผ่าน Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

นี่คือคำสั่ง mipsel-linux-gnu-g++-5 ที่สามารถเรียกใช้ในผู้ให้บริการโฮสต์ฟรีของ OnWorks โดยใช้หนึ่งในเวิร์กสเตชันออนไลน์ฟรีของเรา เช่น Ubuntu Online, Fedora Online, โปรแกรมจำลองออนไลน์ของ Windows หรือโปรแกรมจำลองออนไลน์ของ MAC OS

โครงการ:

ชื่อ


gcc - คอมไพเลอร์โปรเจ็กต์ GNU C และ C++

เรื่องย่อ


จีซีซี [-c|-S|-E] [-std=มาตรฐาน]
[-g] [-pg] [-Oระดับ]
[-Wเตือน...] [-Wpedantic]
[-Idir...] [-Ldir... ]
[-Dแมโคร[=defn]...] [-Uแมโคร]
[-fตัวเลือก...] [-mตัวเลือกเครื่อง... ]
[-o outfile] [@ไฟล์] infile...

เฉพาะตัวเลือกที่มีประโยชน์ที่สุดเท่านั้นที่แสดงไว้ที่นี่ ดูด้านล่างสำหรับส่วนที่เหลือ g ++ ยอมรับ
ส่วนใหญ่ตัวเลือกเดียวกับ gcc.

DESCRIPTION


เมื่อคุณเรียกใช้ GCC โดยปกติจะทำการประมวลผลล่วงหน้า คอมไพล์ แอสเซมบลี และลิงก์
"ตัวเลือกโดยรวม" อนุญาตให้คุณหยุดกระบวนการนี้ในระยะกลาง สำหรับ
ตัวอย่างเช่น -c ตัวเลือกบอกว่าจะไม่เรียกใช้ตัวเชื่อมโยง จากนั้นผลลัพธ์จะประกอบด้วยวัตถุ
ไฟล์ที่ส่งออกโดยแอสเซมเบลอร์

ตัวเลือกอื่นๆ จะถูกส่งต่อไปยังขั้นตอนหนึ่งของการประมวลผล บางตัวเลือกควบคุม
ตัวประมวลผลล่วงหน้าและอื่น ๆ ที่คอมไพเลอร์เอง ยังมีตัวเลือกอื่นๆ ที่ควบคุมแอสเซมเบลอร์และ
ลิงเกอร์; สิ่งเหล่านี้ส่วนใหญ่ไม่ได้ระบุไว้ที่นี่ เนื่องจากคุณแทบไม่ต้องใช้เลย

ตัวเลือกบรรทัดคำสั่งส่วนใหญ่ที่คุณสามารถใช้กับ GCC นั้นมีประโยชน์สำหรับโปรแกรม C; เมื่อไร
ตัวเลือกมีประโยชน์กับภาษาอื่นเท่านั้น (โดยปกติคือ C ++) คำอธิบายบอกว่าดังนั้น
อย่างชัดเจน หากคำอธิบายสำหรับตัวเลือกใดตัวเลือกหนึ่งไม่ระบุแหล่งที่มา
ภาษา คุณสามารถใช้ตัวเลือกนั้นกับภาษาที่รองรับทั้งหมด

พื้นที่ปลูก gcc โปรแกรมยอมรับตัวเลือกและชื่อไฟล์เป็นตัวถูกดำเนินการ หลายตัวเลือกมีหลาย-
ชื่อตัวอักษร; ดังนั้นตัวเลือกตัวอักษรเดี่ยวหลายตัวอาจ ไม่ จัดกลุ่ม: -dv เป็นอย่างมาก
แตกต่างจาก -d -v.

คุณสามารถผสมตัวเลือกและอาร์กิวเมนต์อื่นๆ ได้ ลำดับที่คุณใช้ส่วนใหญ่ไม่
เรื่อง. คำสั่งซื้อมีความสำคัญเมื่อคุณใช้ตัวเลือกหลายประเภทในประเภทเดียวกัน ตัวอย่างเช่น if
คุณระบุ -L มากกว่าหนึ่งครั้ง ไดเร็กทอรีจะถูกค้นหาตามลำดับที่ระบุ อีกด้วย,
ตำแหน่งของ -l ตัวเลือกมีความสำคัญ

หลายตัวเลือกมีชื่อยาวขึ้นต้นด้วย -f หรือกับ -W---ตัวอย่างเช่น,
-fmove-loop-ค่าคงที่, -Wformat และอื่นๆ ส่วนใหญ่มีทั้งด้านบวกและด้านลบ
แบบฟอร์ม; รูปแบบเชิงลบของ -foo is -fno-foo. คู่มือนี้จัดทำเอกสารเพียงฉบับเดียวเท่านั้น
สองรูปแบบ แล้วแต่ว่ารูปแบบใดไม่ใช่ค่าเริ่มต้น

OPTIONS


ตัวเลือกเสริม (Option) สรุป
นี่คือข้อมูลสรุปของตัวเลือกทั้งหมด โดยจัดกลุ่มตามประเภท คำอธิบายอยู่ในต่อไปนี้
ส่วน

ทั้งหมด Options
-c -S -E -o ไฟล์ -ไม่มีบัญญัติ-คำนำหน้า -ท่อ -รหัสผ่าน-ออก-รหัส -x ภาษา -v
-### --ช่วยด้วย[=ชั้น[...]] --เป้าหมาย-ช่วยเหลือ --รุ่น -เครื่องห่อ @ไฟล์ -fplugin=ไฟล์
-fplugin-หาเรื่อง-ชื่อ=หาเรื่อง -fdump-ada-spec[-บาง] -fada-spec-parent=หน่วย
-fdump-go-spec=ไฟล์

C ภาษา Options
-ansi -std=มาตรฐาน -fgnu89-inline -aux-info ชื่อไฟล์
-fallow-parameterless-variadic-functions -fno-asm -fno-ในตัว -fno-ในตัว-ฟังก์ชัน
-fhosted -ffreestanding -fopenacc -fopenmp -fopenmp-simd -fms-ส่วนขยาย
-fplan9-extensions -trigraphs สไตล์ทรง -traditional-cpp -ฟอลโล-เดียว-ความแม่นยำ
-fcond-ไม่ตรงกัน -flax-vector-conversions -fsigned-bitfields -fsigned-char
-funsigned-bitfields -funsigned-char

C + + ภาษา Options
-fabi-เวอร์ชั่น=n -fno-การเข้าถึง-การควบคุม -fcheck-ใหม่ -fconstexpr-ความลึก=n
-ffriend-ฉีด -fno-elide-constructors -fno-enforce-eh-specs -ffor-ขอบเขต
-fno-for-ขอบเขต -fno-gnu-คำหลัก -fno-โดยนัย-เทมเพลต
-fno-implicit-inline-เทมเพลต -fno-ใช้อินไลน์ -fms-ส่วนขยาย
-fno-nonansi-builtins -fnothrow-opt -fno-operator-names -fno-ตัวเลือก-diags
-fpermissive -fno-สวย-แม่แบบ -frepo -fno-rti -fsized-deallocation -fstats
-ftemplate-backtrace-limit=n -ftemplate-deep=n -fno-threadsafe-statics
-ฟิวส์-cxa-atexit -fno-อ่อนแอ -nostdinc++ -fvisibility-inlines-hidden
-fvtable-verify=[มาตรฐาน|เบื้องต้น|ไม่มี] -fvtv-นับ -fvtv-debug -fvisibility-ms-compat
-fext-numeric-literals -วาบิ=n -วาบิ-แท็ก -Wconversion-null -Wctor-dtor-ความเป็นส่วนตัว
-Wdelete-non-virtual-dtor -Wliteral-ต่อท้าย -Wnarrowing -ไม่ยกเว้น -Wnon-เสมือน-dtor
-Wreorder -Weffc++ -Wstrict-null-sentinel -Wno-ไม่ใช่แม่แบบ-เพื่อน -Wold-style-cast
-Woverloaded-เสมือน -Wno-pmf-การแปลง -Wsign-โปรโมชั่น

Objective-C และ วัตถุประสงค์-C++ ภาษา Options
-fconstant-string-class=ชื่อคลาส -fgnu-รันไทม์ -fnext-รันไทม์ -fno-nil-เครื่องรับ
-fobjc-abi-รุ่น=n -fobjc-call-cxx-cdtors -fobjc-direct-dispatch -fobjc-ข้อยกเว้น
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -fno-local-ivars
-fivar-การมองเห็น=[สาธารณะ|การป้องกัน|ส่วนตัว|แพ็คเกจ] -freplace-objc-คลาส
-fzero-ลิงค์ -gen-decls -Wassign-สกัดกั้น -Wno-โปรโตคอล -Wselector
-Wstrict-ตัวเลือกการแข่งขัน -Wundeclared-ตัวเลือก

ภาษา อิสระ Options
-fmessage-length=n -fdiagnostics-show-location=[ครั้งหนึ่ง|ทุกบรรทัด]
-fdiagnostics-color=[รถยนต์|ไม่เคย|เสมอ] -fno-diagnostics-show-option
-fno-diagnostics-show-caret

การเตือน Options
-fsyntax-only -fmax-errors=n -Wpedantic -pedantic-ข้อผิดพลาด -w -Wextra -ผนัง
-Waddress -Waggregate-กลับ -Waggressive-loop-optimizations -Warray ขอบเขต
-Warray-bounds=n -Wbool-เปรียบเทียบ -Wno-แอตทริบิวต์ -Wno-builtin-มาโครกำหนดใหม่
-Wc90-c99-compat -Wc99-c11-compat -Wc++-เข้ากันได้กับ -Wc++11-compat -Wc++14-compat
-Wcast-จัดตำแหน่ง -Wcast-qual -Wchar-ตัวห้อย -Wclobbered -ความคิดเห็น
-Wconditionally-ได้รับการสนับสนุน -Wconversion -Wcoverage-ไม่ตรงกัน -Wdate-เวลา
-Wdelete-ไม่สมบูรณ์ -Wno-cpp -Wno-เลิกใช้ -Wno-เลิกใช้-ประกาศ
-Wno-กำหนด-init -Wdisabled-เพิ่มประสิทธิภาพ -Wno-ทิ้ง-รอบคัดเลือก
-Wno-ทิ้ง-อาร์เรย์-รอบคัดเลือก -Wno-div-by-zero -Wdouble-โปรโมชั่น -ร่างกายเปียกปอน
-Wenum-เปรียบเทียบ -Wno-endif-ป้ายกำกับ -Werror -ข้อผิดพลาด=* -Wfatal-ข้อผิดพลาด -Wfloat-เท่ากับ
-Wformat -Wformat=2 -Wno-format-contain-nul -Wno-format-extra-args
-Wformat-ไม่ใช่ตัวอักษร -Wformat-การรักษาความปลอดภัย -Wformat-ลงนาม -Wformat-y2k
-Wframe-ขนาดใหญ่กว่า=len -Wno-free-nonheap-object -Wjump-คิดถึง-init
-Wignored-รอบคัดเลือก -Wincompatible-ตัวชี้ประเภท -Wimplicit
-Wimplicit-ฟังก์ชั่น-การประกาศ -Wimplicit-int -Winit-ตัวเอง -วินไลน์
-Wno-int-แปลง -Wno-int-to-pointer-cast -Wno-invalid-offsetof -Winvalid-pch
- ใหญ่กว่า =len -Wunsafe-loop-optimizations -Wlogical-op -Wlogical-ไม่ใช่วงเล็บ
-Wlong-long -Wmain -Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น -Wmemset-ย้าย-args -Wmissing-เหล็กดัดฟัน
-Wmissing-field-initializers -Wmissing-include-dirs -Wno-multichar -Wnonnull
-Wnormalized=[ไม่มี|id|nfc|nfkc]
-Wodr -Wno-ล้น -Wopenmp-simd -Woverlength-สตริง -บรรจุห่อ
-Wpacked-bitfield-compat -Wpadded -วงเล็บ -Wpedantic-ms-รูปแบบ
-Wno-อวดดี-ms-รูปแบบ -Wpointer-arith -Wno-ตัวชี้ไปยัง int-cast -Wredundant-decls
-Wno-กลับ-ท้องถิ่น-addr -Wreturn-type -Wsequence จุด -เงา -Wno-เงา-ไอวาร์
-Wshift-นับลบ -Wshift-นับล้น -Wsign-เปรียบเทียบ -Wsign-แปลง
-Wfloat-แปลง -Wsizeof-ตัวชี้-memaccess -Wsizeof-array-argument
-Wstack ป้องกัน -Wstack-การใช้งาน=len -Wstrict-นามแฝง -Wstrict-นามแฝง=n
-Wstrict-ล้น -Wstrict-ล้น=n -Wsuggest-attribute=[บริสุทธิ์|const|นอร์เทิร์น|รูป]
-Wsuggest-final-types -Wsuggest-final-methods -Wsuggest-แทนที่
-Wmissing รูปแบบแอตทริบิวต์ -Wswitch -Wswitch-ค่าเริ่มต้น -Wswitch-enum -Wswitch-bool
-Wsync-nand -Wsystem-ส่วนหัว -แทรมโพลีน -Wtrigraphs -Wtype-จำกัด -วันเดฟ
- กำหนดค่าเริ่มต้น -Wunknown-pragmas -Wno-pragmas -Wunsuffixed-float-constants
-Wunused -Wunused-ฟังก์ชั่น -Wunused-label -Wunused-local-typedefs -Wunused-พารามิเตอร์
-Wno-ไม่ได้ใช้-ผลลัพธ์ -Wunused-value -Wunused-ตัวแปร -Wunused-but-set-parameter
-Wunused-but-set-variable -Wuseless-cast -Wvariadic-มาโคร
-Wvector-การทำงาน-ประสิทธิภาพ -Wvla -Wvolatile-register-var -Wwrite-สตริง
-Wzero-as-null-pointer-constant

C และ วัตถุประสงค์-C-เท่านั้น การเตือน Options
-Wbad-ฟังก์ชั่น-cast -Wmissing-ประกาศ -Wmissing-พารามิเตอร์-type
-Wmissing-ต้นแบบ -Wnested-externs -Wold-style-ประกาศ -Wold-สไตล์-นิยาม
-Wstrict-ต้นแบบ -แบบดั้งเดิม -Wtraditional-การแปลง
-Wdeclaration-หลังคำสั่ง -Wpointer-สัญญาณ

การแก้จุดบกพร่อง Options
-dตัวอักษร -dumpspecs -dumpmachine -dumpversion -fsanitize=สไตล์ -fsanitize-กู้คืน
-fsanitize-กู้คืน=สไตล์ -fasan-shadow-offset=จำนวน
-fsanitize-undefined-trap-on-error -fcheck-ตัวชี้ขอบเขต -fchkp-check-incomplete-type
-fchkp-first-field-has-own-bounds -fchkp-ขอบเขตแคบ
-fchkp-narrow-to-innermost-array -fchkp-เพิ่มประสิทธิภาพ -fchkp-use-fast-string-functions
-fchkp-use-nochk-string-functions -fchkp-use-static-bounds
-fchkp-use-static-const-bounds -fchkp-treat-zero-dynamic-size-as-infinite
-fchkp-check-read -fchkp-check-read -fchkp-check-write -fchkp-ร้านค้าขอบเขต
-fchkp-instrument-calls -fchkp-instrument-marked-only -fchkp-use-wrappers
-fdbg-cnt-list -fdbg-cnt=counter-value-list -fdisable-ipa-pass_name
-fdisable-rtl-pass_name -fdisable-rtl-ชื่อรหัสผ่าน=ช่วงรายการ -fdisable-ต้นไม้-pass_name
-fdisable-ต้นไม้-ชื่อรหัสผ่าน=ช่วงรายการ -fdump-noaddr -fdump-unnumbered
-fdump-unnumbered-links -fdump-translation-หน่วย[-n] -fdump-คลาส-ลำดับชั้น[-n]
-fdump-ipa-all -fdump-ipa-cgraph -fdump-ipa-อินไลน์ -fdump-passes -fdump-สถิติ
-fdump-tree-all -fdump-tree-ดั้งเดิม[-n] -fdump-tree-optimized[-n] -fdump-tree-cfg
-fdump-tree-นามแฝง -fdump-tree-ch -fdump-tree-ssa[-n] -fdump-tree-pre[-n]
-fdump-tree-ccp[-n] -fdump-tree-dce[-n] -fdump-tree-gimple[-ดิบ] -fdump-tree-dom[-n]
-fdump-tree-dse[-n] -fdump-tree-phiprop[-n] -fdump-tree-phiopt[-n]
-fdump-tree-forwprop[-n] -fdump-tree-copyrename[-n] -fdump-tree-nrv -fdump-tree-vect
-fdump-ต้นไม้อ่างล้างจาน -fdump-tree-sra[-n] -fdump-tree-forwprop[-n] -fdump-tree-fre[-n]
-fdump-tree-vtable-verify -fdump-tree-vrp[-n] -fdump-tree-storeccp[-n]
-fdump-final-insns=ไฟล์ -fcompare-debug[=opts] -fcompare-debug-วินาที
-felimate-dwarf2-dups -fno-กำจัด-ไม่ได้ใช้-debug-types
-felimate-ไม่ได้ใช้-debug-symbols -femit-class-debug-เสมอ -fenable-ชนิด-ส่ง
-fenable-ชนิด-ส่ง=ช่วงรายการ -fdebug-types-section -fmem-report-wpa -fmem-รายงาน
-fpre-ipa-mem-report -fpost-ipa-mem-report -fprofile-arcs -fopt-info
-fopt-ข้อมูล-ตัวเลือก[=ไฟล์] -frandom-seed=จำนวน -fsched-verbose=n -fsel-sched-verbose
-fsel-sched-dump-cfg -fsel-sched-pipelining-verbose -fstack-การใช้งาน -ftest-ครอบคลุม
-ftime-report -fvar-ติดตาม -fvar-tracking-assignments
-fvar-tracking-assignments-toggle -g -gระดับ -gtoggle -gcoff -gdwarf-รุ่น -ggdb
-grecord-gcc-สวิตช์ -gno-record-gcc-สวิตช์ -gstabs -gstabs+ -gstrict-คนแคระ
-gno-เข้มงวด-คนแคระ -gvms -gxcoff -gxcoff+ -gz[=ชนิด] -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-prefix-map=เก่า=ใหม่ -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-รายละเอียด[=spec-list] -p -pg
-print-file-name=ห้องสมุด -print-libgcc-ชื่อไฟล์ -print-หลายไดเรกทอรี
-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 -เวลา[=ไฟล์]

การเพิ่มประสิทธิภาพ Options
-faggressive-loop-optimizations -falign-ฟังก์ชั่น[=n] -falign-กระโดด[=n]
-falign-labels[=n] -falign-ลูป[=n] -fassociative-คณิตศาสตร์ -fauto-profile
-fauto-โปรไฟล์[=เส้นทาง] -fauto-inc-dec -fbranch-ความน่าจะเป็น
-fbranch-target-load-optimize -fbranch-target-load-optimize2 -fbtr-bb-exclusive
-fcaller-บันทึก -fcheck-data-deps -fombine-stack-adjustments -fconserve-stack
-fcompare-เอลิม -fcprop-ลงทะเบียน -fcrossjumping -fcse-ติดตามกระโดด -fcse-ข้ามบล็อก
-fcx-fortran-กฎ -fcx-จำกัดช่วง -fdata-sections -fdce -fdelayed-สาขา
-fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-เก็งกำไร
-fdevirtualize-at-ltrans -fdse -เกรงใจ-inlining -fipa-sra -การเพิ่มประสิทธิภาพราคาแพง
-ffat-lto-วัตถุ -ffast-คณิตศาสตร์ -ffinite-คณิตศาสตร์เท่านั้น -ffloat-store
-fexcess-precision=สไตล์ -ส่งต่อ-เผยแพร่ -ffp-contract=สไตล์ -ffunction-sections
-fgcse -fgcse-หลังรีโหลด -fgcse-las -fgcse-lm -fgraphite-identity -fgcse-sm
-fhoist-adjacent-loads -fif-conversion -fif-conversion2 -findirect-inlining
-finline-ฟังก์ชั่น -finline-ฟังก์ชั่นที่เรียกว่าครั้งเดียว -finline-limit=n
-finline-small-functions -fipa-cp -fipa-cp-โคลน -fipa-cp-การจัดตำแหน่ง -fipa-pta
-fipa-profile -fipa-บริสุทธิ์-const -fipa-reference -fipa-icf -fira-อัลกอริทึม=ขั้นตอนวิธี
-fira-region=ภูมิภาค -fira-hoist-ความดัน -fira-loop-ความดัน -fno-ira-share-save-สล็อต
-fno-ira-share-รั่วไหล-สล็อต -fira-verbose=n -fisolate-erroneous-paths-dereference
-fisolate-erroneous-paths-attribute -fivopts -fkeep-inline-functions
-fkeep-static-consts -five-range-หดตัว -floop-block -floop-แลกเปลี่ยน
-floop-สตริป-เหมือง -floop-unroll-and-jam -floop-nest-optimize -flop-parallelize-ทั้งหมด
-flra-remat -flto -flto-บีบอัดระดับ -flto-partition=ALG -flto-รายงาน
-flto-report-wpa -fmerge-all-ค่าคงที่ -fmerge-ค่าคงที่ -fmodulo-sched
-fmodulo-sched-allow-regmoves -fmove-loop-ค่าคงที่ -fno-สาขานับ-reg
-fno-defer-ป๊อป -fno-function-cse -fno-เดา-สาขา-ความน่าจะเป็น -fno-inline
-fno-math-errno -fno-ช่องมอง -fno-ช่องมอง2 -fno-sched-interblock -fno-sched-spec
-fno-ลงนาม-ศูนย์ -fno-toplevel-เรียงลำดับใหม่ -fno-trapping-คณิตศาสตร์
-fno-zero-initialized-in-bss -fomit-frame-ตัวชี้ -foptimize-พี่น้อง-โทร
-fpartial-inlining -fpeel-ลูป -fpredictive-ทั่วไป -fprefetch-ลูปอาร์เรย์
-fprofile-รายงาน -fprofile-แก้ไข -fprofile-dir=เส้นทาง -fprofile-สร้าง
-fprofile-generate=เส้นทาง -fprofile-use -fprofile-use=เส้นทาง -fprofile-values
-fprofile-เรียงลำดับใหม่-ฟังก์ชั่น -freciprocal-คณิตศาสตร์ -ฟรี -frename-ลงทะเบียน
-freeorder-บล็อก -freeorder-blocks-and-partition -freeorder-ฟังก์ชั่น
-frerun-cse-หลังลูป -freschedule-modulo-scheduled-ลูป -Founding-คณิตศาสตร์
-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-ฟิวชั่น -fschedule-insns -fschedule-insns2 -fsection-สมอ
-fselective-scheduling -fselective-scheduling2 -fsel-sched-pipeling
-fsel-sched-pipelining-outer-loops -fsemantic-interposition -fshrink-wrap
-fsignaling-nans -fsingle-precision-คงที่ -fsplit-ivs-in-unroller
-fsplit-wide-types -fssa-phiopt -fstack- ป้องกัน -fstack-protector-ทั้งหมด
-fstack-protector-strong -fstack-protector-explicit -fstdarg-opt -fstrict-นามแฝง
-fstrict-ล้น -fthread-กระโดด -ftracer -ftree-บิต-ccp -ftree-builtin-call-dce
-ftree-ccp -ftree-ch -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-คัดลอก-prop
-ftree-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-distribution -ftree-loop-distribute-patterns
-ftree-loop-ivcanon -ftree-loop-linear -ftree-loop-optimize -ftree-loop-vectorize
-ftree-parallelize-ลูป=n -ftree-pre -ftree-บางส่วน-pre -ftree-pta -ftree-reassoc
-ftree-อ่างล้างจาน -ftree-slsr -ftree-sra -ftree-switch-conversion -ftree-tail-ผสาน
-ftree-ter -ftree-vectorize -ftree-vrp -funit-at-a-time -funroll-all-loops
-funroll-ลูป -funsafe-loop-optimizations -funsafe-คณิตศาสตร์-optimizations
-funswitch-ลูป -fipa-ra -fvariable-expansion-in-unroller -fvect-ต้นทุน-รุ่น -fvpt
-fweb -fwhole-โปรแกรม -fwpa -fuse-linker-plugin --param ชื่อ=ความคุ้มค่า -O -O0 -O1 -O2
-O3 -Os -Ofast -Og

ตัวประมวลผลล่วงหน้า Options
-Aคำถาม=คำตอบ -NS-คำถาม[=คำตอบ] -C -dD -dI -dM -dN -Dแมโคร[=defn] -E -H
-idirafter dir - รวม ไฟล์ -imacros ไฟล์ -iprefix ไฟล์ -iwithprefix dir
-iwithprefixbefore dir -isystem dir -imultilib dir -isysroot dir -M -MM -MF -MG
-MP -MQ -MT -nostdinc -P -fdebug-cpp -ftrack-มาโครขยาย -fworking-ไดเรกทอรี
-remap -trigraphs -undef -Uแมโคร -Wp,ตัวเลือก -Xpreprocessor ตัวเลือก -no-integrated-cpp

ผู้ประกอบ ตัวเลือกเสริม (Option)
-วาตัวเลือก -Xassembler ตัวเลือก

linker Options
วัตถุไฟล์ชื่อ -fuse-ld=ลิงค์ -lห้องสมุด -nostartfiles -nodefaultlibs -nostdlib
-พาย -rdynamic -s -คงที่ -static-libgcc -static-libstdc++ -static-libasan
-static-libtsan -static-liblsan -static-libubsan -static-libmpx -static-libmpxwrappers
-shared -shared-libgcc -สัญลักษณ์ -T ต้นฉบับ -Wlตัวเลือก -Xlinker ตัวเลือก -u เครื่องหมาย -z
คีย์เวิร์ด

ไดเรกทอรี Options
-Bอุปสรรค -Idir -iplugindir=dir -iquotedir -Ldir -specs=ไฟล์ -ผม- --sysroot=dir
--no-sysroot-ต่อท้าย

เครื่อง ขึ้นอยู่กับ Options
AAArch64 Options -มาบิ=ชื่อ -mbig-endian -mlittle-endian -mgeneral-regs-เท่านั้น
-mcmodel=จิ๋ว -mcmodel=เล็ก -mcmodel=ขนาดใหญ่ -mstrict-align -momit-leaf-frame-ตัวชี้
-mno-ละเว้น-leaf-frame-pointer -mtls-dialect=desc -mtls-dialect=ดั้งเดิม
-mfix-cortex-a53-835769 -mno-fix-cortex-a53-835769 -mfix-cortex-a53-843419
-mno-fix-cortex-a53-843419 -มีนาคม=ชื่อ -mcpu=ชื่อ -mtune=ชื่อ

อแดปเทวา ศักดิ์สิทธิ์ Options -mhalf-reg-ไฟล์ -mprefer-short-insn-regs -mbranch-cost=NUM
-mcmove -mnops=NUM -msoft-cmpsf -msplit-lohi -mpost-inc -mpost-modify
-mstack-offset=NUM -mround-ใกล้ที่สุด -mlong-calls -mshort-โทร -msmall16 -mfp-mode=โหมด
-mvect-ดับเบิ้ล -max-vect-align=NUM -msplit-vecmove-ต้น -m1reg-reg

ARC Options -mbarrel-shifter -mcpu=ซีพียู -mA6 -mARC600 -mA7 -mARC700 -mdpfp
-mdpfp-กะทัดรัด -mdpfp-เร็ว -mno-dpfp-lrsr -mea -mno-mpy -mmul32x16 -mmul64 -mnorm
-mspfp -mspfp-กะทัดรัด -mspfp-เร็ว -msimd -msoft-float -mswap -mcrc -mdsp-packa -mdvbf
-mlock -mmac-d16 -mmac-24 -mrtsc -mswape -mtelephony -mxy -misize -mannotate-จัดตำแหน่ง
-marcliux -marcliux_prof -mepilogue-cfi -mlong-calls -โทรปานกลาง -msdata
-mucb-mcount -mvolatile-แคช -malign-โทร -mauto-modify-reg -mbbit-ช่องมอง -mno-brcc
-mcase-vector-pcrel -mcompact-casesi -mno-cond-exec -Mearly-cbranchsi -mexpand-adddi
-mindexed-โหลด -mlra -mlra-ลำดับความสำคัญ-ไม่มี -mlra-priority-กะทัดรัด mlra-ลำดับความสำคัญ-
ไม่กะทัดรัด -mno-มิลลิโค้ด -ผสมรหัส -mq-คลาส -mRcq -mRcw -msize-level=ระดับ
-mtune=ซีพียู -mmultcost=NUM -munalign-prob-threshold=ความน่าจะเป็น

ARM Options -mapcs-เฟรม -mno-apcs-เฟรม -มาบิ=ชื่อ -mapcs-stack-check
-mno-apcs-stack-check -mapcs-float -mno-apcs-float -mapcs-reentrant
-mno-apcs-reentrant -msched-prolog -mno-sched-prolog -mlittle-endian -mbig-endian
-mfloat-abi=ชื่อ -mfp16-format=ชื่อ -mthumb-การทำงานร่วมกัน -mno-thumb-interwork -mcpu=ชื่อ
-มีนาคม=ชื่อ -mfpu=ชื่อ -mtune=ชื่อ -mprint-tune-info -mstructure-size-boundary=n
-มาบอร์-ออน-นอร์เทิร์น -mlong-calls -นาทีโทรยาว -msingle-pic-base
-mno-single-pic-base -mpic-register=reg -mnop-fun-dllimport -mpoke-function-name
-นิ้วหัวแม่มือ -marm -mtpcs-frame -mtpcs-ใบไม้กรอบ -mcaller-super-interworking
-mcallee-super-การทำงานร่วมกัน -mtp=ชื่อ -mtls-dialect=ภาษาถิ่น -mword-ย้ายตำแหน่ง
-mfix-cortex-m3-ldrd -munaligned-เข้าถึง -mneon-for-64bits -mslow-แฟลช-data
-masm-syntax-unified -mrestrict-it

AVR Options -mmcu=mcu -สะสม-args -mbranch-cost=ราคา -mcall-prologues -mint8
-mn_flash=ขนาด -mno-ขัดจังหวะ -mrelax -mrmw -mstrict-X -mtiny-stack -nodevicelib
-Waddr-พื้นที่แปลง

Blackfin Options -mcpu=ซีพียู[-การตรวจทาน] -msim -momit-leaf-frame-ตัวชี้
-mno-ละเว้น-leaf-frame-pointer -mspecld-ความผิดปกติ -mno-specld-ความผิดปกติ -mcsync-ความผิดปกติ
-mno-csync-ความผิดปกติ -mlow-64k -mno-low64k -mstack-check-l1 -middle-shared-library
-mno-id-shared-library -mshared-library-id=n -mleaf-id-shared-library
-mno-leaf-id-shared-library -msep-data -mno-sep-data -mlong-calls -นาทีโทรยาว
-mfast-fp -minline-plt -มัลติคอร์ -mcorea -mcoreb -msdram -micplb

C6X Options -mbig-endian -mlittle-endian -มีนาคม=ซีพียู -msim -msdata=sdata-type

คริส Options -mcpu=ซีพียู -มีนาคม=ซีพียู -mtune=ซีพียู -mmax-stack-frame=n
-melinux-stacksize=n -metrax4 -metrax100 -mpdebug -mcc-init -mno-ผลข้างเคียง
-mstack-align -mdata-align -mconst-align -m32-บิต -m16-บิต -m8-บิต
-mno-prologue-บทส่งท้าย -mno-gotplt -melf -maout -melinux -mlinux -ซิม -sim2
-mmul-bug-วิธีแก้ปัญหา -mno-mul-bug-วิธีแก้ปัญหา

CR16 Options -mmac -mcr16cplus -mcr16c -msim -mint32 -mbit-ops -mdata-model=แบบ

ดาร์วิน Options -all_load -allowable_client -โค้ง -arch_errors_fatal -arch_only
-bind_at_load - มัด -bundle_loader -ชื่อลูกค้า -compatibility_version
-current_version -dead_strip -dependency-file -dylib_file -dylinker_install_name
- ไดนามิก -ไดนามิกlib -exported_symbols_list -filelist -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-image_base -ในนั้น -install_name -keep_private_externs -multi_module
-multiply_defined -multiply_defined_unused -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -noprebind
-noseglinkedit -pagezero_size -prebind -prebind_all_twolevel_modules -private_bundle
-read_only_relocs -sectalign -สัญลักษณ์วัตถุ -ทำไมโหลด -seg1addr -seccreate
-สัญลักษณ์วัตถุ -ภาคส่วน -segaddr -segs_read_only_addr -segs_read_write_addr
-seg_addr_table -seg_addr_table_filename -seglinkedit -segprot -segs_read_only_addr
-segs_read_write_addr -single_module -คงที่ -sub_library -sub_umbrella
-twolevel_namespace -ร่ม -ไม่ได้กำหนด -unexported_symbols_list
-weak_reference_mismatches -Whatsloaded -F -gused -gfull -mmacosx-version-min=รุ่น
-mkernel -mone-byte-bool

ธันวาคม แอลฟา Options -mno-fp-regs -msoft-float -mieee -mieee-with-ไม่แน่นอน
-mieee-conformant -mfp-trap-mode=โหมด -mfp-ปัดเศษโหมด=โหมด -mtrap-precision=โหมด
-mbuild-ค่าคงที่ -mcpu=ประเภทซีพียู -mtune=ประเภทซีพียู -mbwx -mmax -mfix -mcix
-mfloat-vax -mfloat-ieee -mexplicit-relocs -msmall-data -mlarge-data -msmall-text
-mlarge-text -หน่วยความจำแฝง=เวลา

FR30 Options -msmall-model -mno-lsim

FRV Options -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-float -msoft-float
-malloc-cc -mfixed-cc -mdword -mno-dword -mdouble -mno-double -mmedia -mno-media
-mmuladd -mno-muladd -mfdpic -minline-plt -mgplel-ro -multilib-library-pic
-mlinked-fp -mlong-calls -malign-labels -mlibrary-pic -macc-4 -macc-8 -mpack
-mno-pack -mno-flags -mcond-move -mno-cond-ย้าย -moptimize-membar
-mno-optimize-membar -mscc -mno-scc -mcond-exec -mno-cond-exec -mvliw-สาขา
-mno-vliw-สาขา -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-nested-cond-exec -mtomcat-สถิติ -mTLS -mtls -mcpu=ซีพียู

GNU / Linux Options -mglibc -muclibc -mionic -mandroid -tno-android-cc -tno-android-ld

H8 / 300 Options -mrelax -mh -นางสาว -mn -mexr -mno-exr -mint32 -malign-300

HPPA Options -มีนาคม=สถาปัตยกรรมประเภท -mdisable-fpregs -mdisable-การจัดทำดัชนี
-mfast-indirect-calls -mgas -mgnu-ld -mhp-ld -mfixed-range=register-range
-mjump-in-delay -mlinker-opt -mlong-calls -mlong-load-store -mno-disable-fpregs
-mno-disable-การจัดทำดัชนี -mno-fast-indirect-calls -mno-แก๊ส -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-รันไทม์
-mschedule=ประเภทซีพียู -mspace-regs -msio -mwsio -munix=unix-std -nolibdld -คงที่
-กระทู้

IA-64 Options -mbig-endian -mlittle-endian -mgnu-as -mgnu-ld -mno-pic
-mvolatile-asm-หยุด -mregister-names -msdata -mno-sdata -mconstant-gp -mauto-pic
-mfused-mad -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-หยุดบิต
-mfixed-range=register-range -mtls-size=tls-ขนาด -mtune=ประเภทซีพียู -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-after-every-cycle
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-cost -msched-max-memory-insns-hard-limit
-msched-max-memory-insns=max-insns

LM32 Options -mbarrel-shift-เปิดใช้งาน -mdivide ที่เปิดใช้งาน -เปิดใช้งานหลายหลาก
-msign-extend-enabled -เปิดใช้งาน Muser

M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-ลูป -mno-align-ลูป
-missue-rate=จำนวน -mbranch-cost=จำนวน -mmodel=รหัสขนาดรุ่นรุ่นประเภท -msdata=sdata-
ชนิด -mno-flush-func -mflush-func=ชื่อ -mno-flush-กับดัก -mflush-trap=จำนวน -G NUM

M32C Options -mcpu=ซีพียู -msim -memregs=จำนวน

M680x0 Options -มีนาคม=โค้ง -mcpu=ซีพียู -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-data -mno-sep-data -mshared-library-id=n
-middle-shared-library -mno-id-shared-library -mxgot -mno-xgot

MCore Options -mhardlit -mno-hardlit -mdiv -mno-div -mrelax-ทันที
-mno-ผ่อนคลายทันที -mwide-bitfields -mno-wide-bitfields -m4byte-ฟังก์ชั่น
-mno-4byte-functions -mcallgraph-data -mno-callgraph-data -mslow-bytes
-mno-slow-bytes -mno-lsim -mlittle-endian -mbig-endian -m210 -m340
-mstack-increment

MeP Options -mabsdiff -mall-opts -maverage -mbased=n -mbitops -mc=n -mclip
-mconfig=ชื่อ -mcop -mcop32 -mcop64 -mvc2 -mdc -mdiv -meb -เมล -mio-ระเหย -ml
-mleadz มม -mminmax -mmult -mno-opts -mrepeat -นางสาว -msatur -msdram -msim -msimnovec
-mtf -mtiny=n

ไมโครเบลซ Options -msoft-float -mhard-float -msmall-หาร -mcpu=ซีพียู -mmemcpy
-mxl-soft-mul -mxl-soft-div -mxl-barrel-shift -mxl-รูปแบบเปรียบเทียบ -mxl-stack-check
-mxl-gp-opt -mno-clearbss -mxl-คูณสูง -mxl-float-แปลง -mxl-float-sqrt
-mbig-endian -mlittle-endian -mxl-เรียงลำดับใหม่ -mxl-โหมด-แอพรุ่น

MIPS Options -EL -EB -มีนาคม=โค้ง -mtune=โค้ง -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips32r3 -mips32r5 -mips32r6 -mips64 -mips64r2 -mips64r3
-mips64r5 -mips64r6 -mips16 -mno-mips16 -mflip-mips16 -minterlink-บีบอัด
-mno-interlink-บีบอัด -minterlink-mips16 -mno-interlink-mips16 -มาบิ=ABI
-mabicalls -mno-abicalls -mshared -mno-shared -mplt -mno-plt -mxgot -mno-xgot
-mgp32 -mgp64 -mfp32 -mfpxx -mfp64 -mhard-float -msoft-float -mno-float
-msingle-ลอย -mdouble-float -modd-spreg -mno-odd-spreg -mabs=โหมด -mnan=การเข้ารหัส
-mdsp -mno-dsp -mdspr2 -mno-dspr2 -mmcu -mmno-mcu -meva -mno-eva -mvirt -mno-virt
-mxpa -mno-xpa -mmicromips -mno-micromips -mfpu=fpu-type -msmartmips -mno-smartmips
-mpaired-single -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-แยกที่อยู่ -mexplicit-relocs -mno-ชัดเจน-relocs -mcheck-zero-division
-mno-check-zero-division -mdivide-กับดัก -mdivide-ตัวแบ่ง -mmemcpy -mno-memcpy
-mlong-calls -นาทีโทรยาว -mmad -mno-mad -mimadd -mno-imadd -mfused-mad
-mno-fused-madd -nocpp -mfix-24k -mno-fix-24k -mfix-r4000 -mno-fix-r4000
-mfix-r4400 -mno-fix-r4400 -mfix-r10000 -mno-fix-r10000 -mfix-rm7000 -mno-fix-rm7000
-mfix-vr4120 -mno-fix-vr4120 -mfix-vr4130 -mno-fix-vr4130 -mfix-sb1 -mno-fix-sb1
-mflush-func=func -mno-flush-func -mbranch-cost=NUM -mbranch-มีแนวโน้ม
-mno-สาขามีแนวโน้ม -mfp-ข้อยกเว้น -mno-fp-ข้อยกเว้น -mvr4130-align -mno-vr4130-align
-msynci -mno-synci -mrelax-pic-calls -mno-ผ่อนคลาย-pic-calls -mmcount-ra-ที่อยู่

MMIX Options -mlibfuncs -mno-libfuncs -เมปซิลอน -mno-epsilon -mabi=gnu
-mabi=mmixware -mzero-ขยาย -mknuthdiv -mtoplevel-สัญลักษณ์ -melf -mbranch-ทำนาย
-mno-สาขาทำนาย -mbase-ที่อยู่ -mno-ฐานที่อยู่ -msingle-exit
-mno-single-exit

MN10300 Options -mmult-bug -mno-mult-bug -mno-am33 -mam33 -mam33-2 -mam34 -mtune=ซีพียู-
ชนิด -mreturn-pointer-on-d0 -mno-crt0 -mrelax -mliw -msetlb

Moxie Options -meb -เมล -mmul.x -mno-crt0

MSP430 Options -msim -masm-hex -mmcu= -mcpu= -mlarge -msmall -mrelax -mhwmult= -minrt

NDS32 Options -mbig-endian -mlittle-endian -mreduced-regs -mfull-regs -mcmov -mno-cmov
-mperf-ext -mno-perf-ext -mv3push -mno-v3push -m16bit -mno-16bit -misr-vector-size=NUM
-mcache-block-size=NUM -มีนาคม=โค้ง -mcmodel=รหัสรุ่น -mctor-dtor -mrelax

ไนออส II Options -G NUM -mgpopt=ตัวเลือก -mgpopt -mno-gpopt -เมล -meb -mno-บายพาสแคช
-mbypass-แคช -mno-cache-volatile -mcache-ระเหย -mno-fast-sw-div -mfast-sw-div
-mhw-mul -mno-hw-mul -mhw-mulx -mno-hw-mulx -mno-hw-div -mhw-div -mcustom-insn=N
-mno-กำหนดเอง-insn -mcustom-fpu-cfg=ชื่อ -mhal -msmallc -msys-crt0=ชื่อ -msys-lib=ชื่อ

Nvidia PTX Options -m32 -m64 -mmainkernel

กปปส -11 Options -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 -mbranch-แพง -mbranch-ราคาถูก
-munix-asm -mdec-asm

picoChip Options -mae=ae_type -mvliw-lookahead=N -สัญลักษณ์ตามที่อยู่
-mno-ไม่มีประสิทธิภาพ-คำเตือน

PowerPC Options ดู RS/6000 และตัวเลือก PowerPC

RL78 Options -msim -mmul=ไม่มี -mmul=g13 -mmul=rl78 -m64bit-doubles -m32bit-doubles

RS / 6000 และ PowerPC Options -mcpu=ประเภทซีพียู -mtune=ประเภทซีพียู -mcmodel=รหัสรุ่น
-mpowerpc64 -maltivec -mno-altivec -mpowerpc-gpopt -mno-powerpc-gpopt
-mpowerpc-gfxopt -mno-powerpc-gfxopt -mmcrf -mno-mfcrf -mpopcntb -mno-popcntb
-mpopcntd -mno-popcntd -mfprnd -mno-fprnd -mcmpb -mno-cmpb -mmfpgpr -mno-mfpgpr
-mhard-dfp -mno-hard-dfp -mfull-toc -mminimal-toc -mno-fp-in-toc -mno-sum-in-toc
-m64 -m32 -mxl-compat -mno-xl-compat -mpe -malign-อำนาจ -malign-ธรรมชาติ
-msoft-float -mhard-float -หลายหลาก -mno-หลาย -msingle-ลอย -mdouble-float
-msimple-fpu -mstring -mno-string -mupdate -mno-อัปเดต -mavoid-indexed-ที่อยู่
-mno-avoid-indexed-addresses -mfused-mad -mno-fused-madd -mbit-align
-mno-bit-align -mstrict-align -mno-เข้มงวด-จัด -mrelocatable -mno-ย้ายได้
-mrelocatable-lib -mno-relocatable-lib -mtoc -mno-toc -mlittle -mlittle-endian
-mbig -mbig-endian -mdynamic-no-pic -maltivec -mswdiv -msingle-pic-base
-mprioritize-จำกัด-insns=ลำดับความสำคัญ -msched-costly-dep=การพึ่งพาอาศัยกัน_type
-minsert-sched-nops=โครงการ -mcall-sysv -mcall-netbsd -maix-struct-ส่งคืน
-msvr4-struct-return -มาบิ=abi-type -msecure-plt -mbss-plt
-mblock-move-inline-limit=NUM -มิเซล -mno-isel -misel=ใช่ -misel=ไม่ -msp -mno-spe
-msp=ใช่ -msp=ไม่ -mpaired -mgen-เซลล์-ไมโครโค้ด -mwarn-cell-microcode -mvrsave
-mno-vrsave -mmulhw -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=ใช่ -mfloat-gprs=ไม่
-mfloat-gprs=single -mfloat-gprs=double -mprototype -mno-ต้นแบบ -msim -mmvme
-mads -มีดพับ -memb -msdata -msdata=เลือก -mvxworks -G NUM -pthread -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-ทางอ้อม -mpower8-ฟิวชั่น -mno-mpower8-fusion
-mpower8-vector -mno-power8-vector -mcrypto -mno-crypto -mdirect-ย้าย -mno-direct-move
-mquad-หน่วยความจำ -mno-quad-หน่วยความจำ -mquad-หน่วยความจำอะตอม -mno-quad-memory-atomic
-mcompat-align-parm -mno-compat-align-parm -mupper-regs-df -mno-upper-regs-df
-mupper-regs-sf -mno-upper-regs-sf -mupper-regs -mno-upper-regs

RX Options -m64bit-doubles -m32bit-doubles -fpu -nofpu -mcpu= -mbig-endian-data
-mlittle-endian-data -msmall-data -msim -mno-sim -mas100-ไวยากรณ์ -mno-as100-ไวยากรณ์
-mrelax -mmax-constant-size= -mint-register= -mpid -mno-warn-multiple-fast-interrupts
-msave-acc-in-interrupts

S / 390 และ zSeries Options -mtune=ประเภทซีพียู -มีนาคม=ประเภทซีพียู -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 -mesa -mzarch -mtpf-trace
-mno-tpf-trace -mfused-mad -mno-fused-madd -mwarn-framesize -mwarn-ไดนามิกสแต็ค
-mstack-ขนาด -mstack-ยาม -mhotpatch=ครึ่งคำ,ครึ่งคำ

คะแนน Options -meb -เมล -mnhwloop -muls -mmac -mscore5 -mscore5u -mscore7 -mscore7d

SH Options -m1 -m2 -m2e -m2a-nofpu -m2a-single-only -m2a-ซิงเกิล -m2a -m3 -m3e
-m4-nofpu -m4-single-only -m4-เดี่ยว -m4 -m4a-nofpu -m4a-single-only -m4a-ซิงเกิล
-m4a -m4al -m5-64media -m5-64media-nofpu -m5-32media -m5-32media-nofpu -m5-กะทัดรัด
-m5-compact-nofpu -mb -ml -mdalign -mrelax -mbigtable -mfmovd -mhitachi -mrenesas
-mno-renesas -mnomacsave -mieee -mno-ieee -mbitops -misize -minline-ic_invalidate
-mpadstruct -mspace -mprefergot -musermode -multcost=จำนวน -mdiv=กลยุทธ์
-mdivsi3_libfunc=ชื่อ -mfixed-range=register-range -mindexed-ที่อยู่
-mgettrcost=จำนวน -mpt-คงที่ -สะสม-ออก-args -minvalid-สัญลักษณ์
-matomic-model=แบบจำลองอะตอม -mbranch-cost=NUM -mzdcbranch -mno-zdcbranch
-mcbranch-force-delay-สล็อต -mfused-mad -mno-fused-madd -mfsca -mno-fsca -mfsrra
-mno-fsrra -mpretend-cmove -mtas

Solaris 2 Options -mclear-hwcap -mno-clear-hwcap -mimpure-ข้อความ -mno-ไม่บริสุทธิ์-ข้อความ
-pthreads -pthread

SPARC Options -mcpu=ประเภทซีพียู -mtune=ประเภทซีพียู -mcmodel=รหัสรุ่น -memory-model=เมม-
แบบ -m32 -m64 -mapp-regs -mno-app-regs -mfaster-structs -mno-faster-structs
-mflat -mno-แบน -mfpu -mno-fpu -mhard-float -msoft-float -mhard-quad-float
-msoft-quad-float -mstack-ลำเอียง -mno-stack-ลำเอียง -Munaligned-คู่
-mno-unaligned-doubles -muser โหมด -mno-โหมดผู้ใช้ -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 Options -mwarn-reloc -merror-reloc -msafe-dma -munsafe-dma -mbranch-คำใบ้
-msmall-mem -mlarge-mem -mstdmain -mfixed-range=register-range -mea32 -mea64
-maddress-space-แปลง -mno-ที่อยู่-พื้นที่-แปลง -mcache-ขนาด=ขนาดแคช
-matomic-อัพเดท -mno-atomic-อัพเดท

ระบบ V Options -Qy -Qn -วายพีเส้นทาง -อืมdir

กระเบื้อง-Gx Options -mcpu=CPU -m32 -m64 -mbig-endian -mlittle-endian -mcmodel=รหัสรุ่น

TILEPro Options -mcpu=ซีพียู -m32

V850 Options -mlong-calls -นาทีโทรยาว -mep -mno-ep -mprolog-ฟังก์ชั่น
-mno-prolog-ฟังก์ชัน -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-app-regs
-mdisable-callt -mno-disable-callt -mv850e2v3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mv850e3v5 -mloop -mrelax -mlong-กระโดด -msoft-float -mhard-float -mgcc-abi
-mrh850-abi -mbig-switch

VAX Options - มก -mgnu -munix

วิเซียม Options -mdebug -msim -mfpu -mno-fpu -mhard-float -msoft-float -mcpu=ประเภทซีพียู
-mtune=ประเภทซีพียู -msv-โหมด -muser โหมด

VMS Options -mvms-return-codes -mdebug-main=อุปสรรค -mmalloc64 -mpointer-size=ขนาด

VxWorks Options -mrtp -ไม่คงที่ -Bstatic -Bdynamic -Xbind-ขี้เกียจ -Xbind-ตอนนี้

x86 Options -mtune=ประเภทซีพียู -มีนาคม=ประเภทซีพียู -mtune-ctrl=รายการคุณสมบัติ
-mdump-tune-คุณสมบัติ -mno-default -mfpmath=หน่วย -masm=ภาษาถิ่น -mno-fancy-math-387
-mno-fp-ret-in-387 -msoft-float -mno-wide-คูณ -mrtd -malign-double
-mpreferred-stack-boundary=NUM -mincoming-stack-boundary=NUM -mcld -mcx16 -msahf
-mmovbe -mcrc32 -mrecip -mrecip=เลือก -mvzerouper -mprefer-avx128 -mmmx -msse -mse2
-mse3 -mssse3 -mse4.1 -mse4.2 -mse4 -mavx -mavx2 -mavx512f -mavx512pf -mavx512er
-mavx512cd -msha -maes -mpclmul -mfsgsbase -mrdrnd -mf16c -mfma -mprefetchwt1
-mclflushopt -mxsavec -mxsaves -mse4a -m3dnow -mpopcnt -mabm -mbmi -mtbm -mfma4 -mxop
-mlzcnt -mbmi2 -mfxsr -mxsave -mxsaveopt -mrtm -mlwp -mmpx -mmwaitx -mthreads
-mno-align-stringops -minline-all-stringops -minline-stringops-ไดนามิก
-mstringop-กลยุทธ์=ALG -mmemcpy-กลยุทธ์=กลยุทธ์ -mmemset-กลยุทธ์=กลยุทธ์
-mpush-args -สะสม-ออก-args -m128bit-long-double -m96bit-long-double
-mlong-double-64 -mlong-double-80 -mlong-double-128 -mregparm=NUM -msseregparm
-mveclibabi=ชนิด -mvect8-ret-in-mem -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-ตัวชี้ -mno-red-zone -mno-tls-direct-seg-refs -mcmodel=รหัสรุ่น
-มาบิ=ชื่อ -maddress-mode=โหมด -m32 -m64 -mx32 -m16 -mlarge-data-threshold=NUM
-mse2avx -mfentry -mrecord-mcount -mnop-mcount -m8bit-idiv
-mavx256-split-unaligned-load -mavx256-split-unaligned-store -malign-data=ชนิด
-mstack-protector-guard=ยาม

x86 หน้าต่าง Options -mconsole -mcygwin -mno-cygwin -mdll -mnop-fun-dllimport -mthread
-municode -mwin32 -mwindows -fno-set-stack-executable

Xstormy16 Options -msim

Xtensa Options -mconst16 -mno-const16 -mfused-mad -mno-fused-madd -mforce-no-pic
-mserialize-ระเหย -mno-serialize-ระเหย -mtext-section-literals
-mno-text-section-literals -mtarget-align -mno-target-align -mlongcalls
-mno-longcalls

zSeries Options ดูตัวเลือก S/390 และ zSeries

รหัส รุ่น Options
-fcall-บันทึก-reg -fcall-มือสอง-reg -ffixed-reg -fexceptions -fnon-call-ข้อยกเว้น
-fdelete-dead-exceptions -funwind-tables -fasynchronous-ผ่อนคลายตาราง -fno-gnu-unique
-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-กระโดดตาราง -frecord-gcc-สวิตช์
-freg-struct-กลับ -fshort-enums -fshort-ดับเบิ้ล -fshort-wchar -fverbose-asm
-fpack-struct[= .]n] -fstack-check -fstack-limit-register=reg -fstack-limit-symbol=ซิม
-fno-stack-จำกัด -fsplit-stack -fleading-ขีดเส้นใต้ -ftls-model=แบบ
-fstack-reuse=reuse_level -ftrapv -fwrapv -fbounds-check
-fvisibility=[ผิดนัด|ภายใน|ซ่อนเร้น|การป้องกัน] -fstrict-volatile-bitfields
-fsync-libcalls

Options การควบคุม ชนิด of เอาท์พุต
การคอมไพล์อาจเกี่ยวข้องกับสี่ขั้นตอน: การประมวลผลล่วงหน้า การรวบรวมที่เหมาะสม การประกอบ และ
เชื่อมโยงกันเสมอในลำดับนั้น GCC สามารถประมวลผลล่วงหน้าและคอมไพล์ได้หลายอย่าง
ไฟล์ไม่ว่าจะเป็นไฟล์อินพุตแอสเซมเบลอร์หลายไฟล์หรือเป็นไฟล์อินพุตแอสเซมเบลอร์เดียว แล้ว
ไฟล์อินพุตแอสเซมเบลอร์แต่ละไฟล์จะสร้างไฟล์อ็อบเจ็กต์ และการลิงก์จะรวมออบเจกต์ทั้งหมดเข้าด้วยกัน
ไฟล์ (ที่คอมไพล์ใหม่และที่ระบุเป็นอินพุต) ลงในไฟล์ปฏิบัติการ

สำหรับไฟล์อินพุตที่กำหนด คำต่อท้ายชื่อไฟล์จะกำหนดว่าการคอมไพล์เป็นประเภทใด
เสร็จแล้ว:

ไฟล์.c
ซอร์สโค้ด C ที่ต้องประมวลผลล่วงหน้า

ไฟล์.i
ซอร์สโค้ด C ที่ไม่ควรประมวลผลล่วงหน้า

ไฟล์.ii
ซอร์สโค้ด C++ ที่ไม่ควรประมวลผลล่วงหน้า

ไฟล์.m
ซอร์สโค้ด Objective-C โปรดทราบว่าคุณต้องเชื่อมโยงกับ libobjc ห้องสมุดที่จะทำให้
การทำงานของโปรแกรม Objective-C

ไฟล์.mi
ซอร์สโค้ด Objective-C ที่ไม่ควรประมวลผลล่วงหน้า

ไฟล์.mm
ไฟล์.M
ซอร์สโค้ด Objective-C++ โปรดทราบว่าคุณต้องเชื่อมโยงกับ libobjc ห้องสมุดที่จะทำ
การทำงานของโปรแกรม Objective-C++ สังเกตว่า .M หมายถึงตัวพิมพ์ใหญ่ M

ไฟล์.mii
ซอร์สโค้ด Objective-C++ ที่ไม่ควรประมวลผลล่วงหน้า

ไฟล์.h
ไฟล์ส่วนหัว C, C++, Objective-C หรือ Objective-C++ ที่จะเปลี่ยนเป็นไฟล์ที่คอมไพล์ล่วงหน้า
ส่วนหัว (ค่าเริ่มต้น) หรือไฟล์ส่วนหัว C, C ++ ที่จะเปลี่ยนเป็นข้อมูลจำเพาะ Ada (ผ่านทาง
-fdump-ada-spec สวิตซ์).

ไฟล์ซีซี.
ไฟล์.cp
ไฟล์.cxx
ไฟล์.cpp
ไฟล์.CPP
ไฟล์.c++
ไฟล์.C
ซอร์สโค้ด C++ ที่ต้องประมวลผลล่วงหน้า โปรดทราบว่าใน .cxx, สองตัวอักษรสุดท้าย
จะต้องเป็นอักษร x. ในทำนองเดียวกัน .C หมายถึงตัวพิมพ์ใหญ่ C

ไฟล์.mm
ไฟล์.M
ซอร์สโค้ด Objective-C++ ที่ต้องประมวลผลล่วงหน้า

ไฟล์.mii
ซอร์สโค้ด Objective-C++ ที่ไม่ควรประมวลผลล่วงหน้า

ไฟล์.hh
ไฟล์.H
ไฟล์.hp
ไฟล์.hxx
ไฟล์.hpp
ไฟล์.HPP
ไฟล์.h++
ไฟล์.tcc
ไฟล์ส่วนหัว C++ ที่จะเปลี่ยนเป็นส่วนหัวที่คอมไพล์แล้วหรือข้อมูลจำเพาะ Ada

ไฟล์.f
ไฟล์.สำหรับ
ไฟล์.ftn
แก้ไขซอร์สโค้ด Fortran ที่ไม่ควรประมวลผลล่วงหน้า

ไฟล์.F
ไฟล์.สำหรับ
ไฟล์.fpp
ไฟล์.FPP
ไฟล์.FTN
ซอร์สโค้ด Fortran แบบคงที่ที่ต้องประมวลผลล่วงหน้า (ด้วยตัวดั้งเดิม
พรีโปรเซสเซอร์)

ไฟล์.f90
ไฟล์.f95
ไฟล์.f03
ไฟล์.f08
ซอร์สโค้ด Fortran แบบฟรีที่ไม่ควรประมวลผลล่วงหน้า

ไฟล์.F90
ไฟล์.F95
ไฟล์.F03
ไฟล์.F08
ซอร์สโค้ด Fortran แบบอิสระที่ต้องประมวลผลล่วงหน้า (ด้วยแบบดั้งเดิม
พรีโปรเซสเซอร์)

ไฟล์.ไป
ไปที่ซอร์สโค้ด

ไฟล์.ads
ไฟล์ซอร์สโค้ด Ada ที่มีการประกาศหน่วยไลบรารี (การประกาศของa
แพ็คเกจ โปรแกรมย่อย หรือทั่วไป หรืออินสแตนซ์ทั่วไป) หรือหน่วยไลบรารี
การประกาศเปลี่ยนชื่อ (แพ็คเกจ ทั่วไป หรือการประกาศเปลี่ยนชื่อโปรแกรมย่อย) เช่น
ไฟล์เรียกอีกอย่างว่า รายละเอียด.

ไฟล์.adb
ไฟล์ซอร์สโค้ด Ada ที่มีเนื้อหาหน่วยไลบรารี (โปรแกรมย่อยหรือเนื้อหาของแพ็คเกจ)
ไฟล์ดังกล่าวเรียกอีกอย่างว่า ร่างกาย.

ไฟล์.s
รหัสแอสเซมเบลอร์

ไฟล์.S
ไฟล์.sx
รหัสแอสเซมเบลอร์ที่ต้องประมวลผลล่วงหน้า

อื่น ๆ
ไฟล์อ็อบเจ็กต์ที่จะป้อนเข้าในการเชื่อมโยงโดยตรง ชื่อไฟล์ใด ๆ ที่ไม่รู้จัก
คำต่อท้ายได้รับการปฏิบัติด้วยวิธีนี้

คุณสามารถระบุภาษาที่ป้อนได้อย่างชัดเจนด้วยปุ่ม -x ตัวเลือก:

-x ภาษา
ระบุให้ชัดเจน ภาษา สำหรับไฟล์อินพุตต่อไปนี้ (แทนที่จะปล่อยให้
คอมไพเลอร์เลือกค่าเริ่มต้นตามส่วนต่อท้ายชื่อไฟล์) ตัวเลือกนี้ใช้ได้กับทุกคน
ติดตามไฟล์อินพุตจนถึงต่อไป -x ตัวเลือก. ค่าที่เป็นไปได้สำหรับ ภาษา คือ:

c c-ส่วนหัว cpp-output
c++ c++-ส่วนหัว c++-cpp-output
วัตถุประสงค์-c วัตถุประสงค์-c-ส่วนหัว วัตถุประสงค์-c-cpp-output
วัตถุประสงค์-c++ วัตถุประสงค์-c++-ส่วนหัววัตถุประสงค์-c++-cpp-output
แอสเซมเบลอร์ แอสเซมเบลอร์-กับ-cpp
Ada
f77 f77-cpp-อินพุต f95 f95-cpp-อินพุต
go
ชวา

-x ไม่มี
ปิดข้อกำหนดใดๆ ของภาษา เพื่อให้ไฟล์ที่ตามมาได้รับการจัดการ
ตามคำต่อท้ายชื่อไฟล์ (ตามที่เป็นถ้า -x ไม่ได้ใช้เลย)

-รหัสผ่าน-ออก-รหัส
โดยปกติแล้ว gcc โปรแกรมออกด้วยรหัส 1 หากเฟสใดของคอมไพเลอร์ส่งคืน
รหัสส่งคืนที่ไม่สำเร็จ หากคุณระบุ -รหัสผ่าน-ออก-รหัสที่ gcc โปรแกรมแทน
ส่งคืนพร้อมข้อผิดพลาดสูงสุดที่เป็นตัวเลขที่เกิดจากเฟสใด ๆ ที่ส่งคืนข้อผิดพลาด
ข้อบ่งชี้ ส่วนหน้า C, C ++ และ Fortran ส่งคืน 4 หากข้อผิดพลาดของคอมไพเลอร์ภายใน
จะพบ

ถ้าคุณต้องการแค่บางขั้นตอนของการคอมไพล์ คุณสามารถใช้ -x (หรือคำต่อท้ายชื่อไฟล์)
บอก gcc จะเริ่มต้นที่ไหนและหนึ่งในตัวเลือก -c, -S,หรือ -E บอกว่าที่ไหน gcc คือการ
หยุด. โปรดทราบว่าชุดค่าผสมบางส่วน (เช่น -x cpp-output -E) สั่งสอน gcc ที่ต้องทำ
ไม่มีอะไรทั้งนั้น.

-c รวบรวมหรือรวบรวมไฟล์ต้นฉบับ แต่อย่าลิงก์ ขั้นตอนการเชื่อมโยงง่ายๆคือ
ยังไม่เสร็จ. ผลลัพธ์สุดท้ายจะอยู่ในรูปแบบของไฟล์อ็อบเจ็กต์สำหรับไฟล์ต้นฉบับแต่ละไฟล์

ตามค่าเริ่มต้น ชื่อไฟล์อ็อบเจ็กต์สำหรับไฟล์ต้นฉบับถูกสร้างขึ้นโดยแทนที่คำต่อท้าย .c,
.i, .sฯลฯ ด้วย .o.

ไฟล์อินพุตที่ไม่รู้จัก ไม่จำเป็นต้องคอมไพล์หรือแอสเซมบลี จะถูกละเว้น

-S หยุดหลังจากขั้นตอนการรวบรวมที่เหมาะสม อย่าประกอบ ผลลัพธ์อยู่ใน
รูปแบบของไฟล์โค้ดแอสเซมเบลอร์สำหรับแต่ละไฟล์อินพุตที่ไม่ใช่แอสเซมเบลอร์ที่ระบุ

ตามค่าดีฟอลต์ ชื่อไฟล์แอสเซมเบลอร์สำหรับไฟล์ต้นฉบับถูกสร้างขึ้นโดยการแทนที่คำต่อท้าย
.c, .iฯลฯ ด้วย .s.

ไฟล์อินพุตที่ไม่ต้องการการคอมไพล์จะถูกละเว้น

-E หยุดหลังจากขั้นตอนก่อนการประมวลผล อย่าเรียกใช้คอมไพเลอร์อย่างเหมาะสม เอาต์พุตอยู่ใน
รูปแบบของซอร์สโค้ดที่ประมวลผลล่วงหน้าซึ่งถูกส่งไปยังเอาต์พุตมาตรฐาน

ไฟล์อินพุตที่ไม่ต้องการการประมวลผลล่วงหน้าจะถูกละเว้น

-o ไฟล์
วางเอาต์พุตในไฟล์ ไฟล์. สิ่งนี้ใช้กับผลผลิตทุกประเภท
ไม่ว่าจะเป็นไฟล์ปฏิบัติการ ไฟล์อ็อบเจ็กต์ ไฟล์แอสเซมเบลอร์ หรือ C . ที่ประมวลผลล่วงหน้า
รหัส.

If -o ไม่ได้ระบุไว้ ค่าเริ่มต้นคือการใส่ไฟล์ปฏิบัติการใน ออก, วัตถุ
ไฟล์ source.suffix in source.o, ไฟล์แอสเซมเบลอร์ใน source.s, คอมไพล์ล่วงหน้า
ไฟล์ส่วนหัวใน source.suffix.gchและซอร์ส C ที่ประมวลผลล่วงหน้าทั้งหมดบนเอาต์พุตมาตรฐาน

-v พิมพ์ (บนเอาต์พุตข้อผิดพลาดมาตรฐาน) คำสั่งที่ดำเนินการเพื่อเรียกใช้ขั้นตอนของ
การรวบรวม พิมพ์หมายเลขเวอร์ชันของโปรแกรมควบคุมคอมไพเลอร์และของ .ด้วย
พรีโปรเซสเซอร์และคอมไพเลอร์ที่เหมาะสม

-###
ชอบ -v ยกเว้นว่าคำสั่งจะไม่ถูกดำเนินการและมีการอ้างถึงอาร์กิวเมนต์ เว้นแต่ว่า
มีเฉพาะอักขระที่เป็นตัวอักษรและตัวเลขคละกันหรือ "./-_" สิ่งนี้มีประโยชน์สำหรับเชลล์สคริปต์ถึง
จับภาพบรรทัดคำสั่งที่สร้างโดยไดรเวอร์

-ท่อ
ใช้ไพพ์แทนไฟล์ชั่วคราวสำหรับการสื่อสารระหว่างขั้นตอนต่างๆ ของ
การรวบรวม สิ่งนี้ล้มเหลวในการทำงานกับบางระบบที่แอสเซมเบลอร์ไม่สามารถอ่านได้
จากท่อ แต่แอสเซมเบลอร์ GNU ไม่มีปัญหา

--ช่วยด้วย
พิมพ์ (บนเอาต์พุตมาตรฐาน) คำอธิบายของตัวเลือกบรรทัดคำสั่งที่เข้าใจโดย
gcc. หาก -v ระบุตัวเลือกด้วยแล้ว --ช่วยด้วย ยังส่งต่อไปยังหลากหลาย
กระบวนการที่เรียกใช้โดย gccเพื่อให้สามารถแสดงตัวเลือกบรรทัดคำสั่งที่พวกเขา
ยอมรับ. ถ้า -Wextra มีการระบุตัวเลือกด้วย (ก่อน --ช่วยด้วย ตัวเลือก),
จากนั้นตัวเลือกบรรทัดคำสั่งที่ไม่มีเอกสารที่เกี่ยวข้องก็เช่นกัน
แสดง

--เป้าหมาย-ช่วยเหลือ
พิมพ์ (บนเอาต์พุตมาตรฐาน) คำอธิบายของตัวเลือกบรรทัดคำสั่งเฉพาะเป้าหมาย
สำหรับแต่ละเครื่องมือ สำหรับบางเป้าหมาย ข้อมูลเฉพาะเป้าหมายเพิ่มเติมอาจเป็น
พิมพ์

--ช่วย={ชั้น|[^]มีคุณสมบัติ}[...]
พิมพ์ (บนเอาต์พุตมาตรฐาน) คำอธิบายของตัวเลือกบรรทัดคำสั่งที่เข้าใจโดย
คอมไพเลอร์ที่เหมาะกับคลาสและตัวระบุทั้งหมดที่ระบุ เหล่านี้เป็น
คลาสที่รองรับ:

เครื่องมือเพิ่มประสิทธิภาพ
แสดงตัวเลือกการปรับให้เหมาะสมทั้งหมดที่สนับสนุนโดยคอมไพเลอร์

คำเตือน
แสดงตัวเลือกทั้งหมดที่ควบคุมข้อความเตือนที่สร้างโดยคอมไพเลอร์

เป้า
แสดงตัวเลือกเฉพาะเป้าหมาย ไม่เหมือนกับ --เป้าหมาย-ช่วยเหลือ ตัวเลือกอย่างไรก็ตามเป้าหมาย-
ตัวเลือกเฉพาะของตัวเชื่อมโยงและแอสเซมเบลอร์จะไม่แสดง นี้เป็นเพราะ
เครื่องมือเหล่านั้นไม่สนับสนุนส่วนขยาย --help= วากยสัมพันธ์

params
แสดงค่าที่รับรู้โดย --param ตัวเลือก

ภาษา
แสดงตัวเลือกที่รองรับสำหรับ ภาษาที่นี่มี ภาษา เป็นชื่อหนึ่งของ
ภาษาที่รองรับใน GCC เวอร์ชันนี้

ร่วมกัน
แสดงตัวเลือกที่ใช้กันทั่วไปในทุกภาษา

นี่คือตัวระบุที่รองรับ:

ซึ่งไม่มีเอกสารประกอบ
แสดงเฉพาะตัวเลือกที่ไม่มีเอกสาร

เข้าร่วม
แสดงตัวเลือกการรับอาร์กิวเมนต์ที่ปรากฏหลังเครื่องหมายเท่ากับในเดียวกัน
ข้อความต่อเนื่องกัน เช่น --help=เป้าหมาย.

แยก
แสดงตัวเลือกการรับอาร์กิวเมนต์ที่ปรากฏเป็นคำที่แยกจากกันตามหลัง
ตัวเลือกเดิม เช่น -o output-file.

ตัวอย่างเช่นเพื่อแสดงสวิตช์เฉพาะเป้าหมายที่ไม่มีเอกสารทั้งหมดที่สนับสนุนโดย
คอมไพเลอร์ใช้:

--help=target, ไม่มีเอกสาร

ความรู้สึกของการคัดเลือกสามารถกลับด้านได้โดยการนำหน้าด้วย ^ ตัวอักษรดังนั้นสำหรับ
ตัวอย่างเพื่อแสดงตัวเลือกการเตือนไบนารีทั้งหมด (เช่น ตัวเลือกที่เปิดหรือปิด
และที่ไม่โต้แย้ง) ที่มีคำอธิบาย ให้ใช้:

--help=warnings,^join,^undocumented

อาร์กิวเมนต์เพื่อ --help= ไม่ควรประกอบด้วยตัวระบุกลับด้านเพียงอย่างเดียว

การรวมหลายคลาสเป็นไปได้ แม้ว่าสิ่งนี้มักจะจำกัดเอาต์พุตดังนั้น
มากจนไม่มีอะไรจะแสดง อย่างไรก็ตาม กรณีหนึ่งที่ใช้ได้ผลคือเมื่อ
หนึ่งในชั้นเรียนคือ เป้า. ตัวอย่างเช่น เพื่อแสดงเฉพาะเป้าหมายทั้งหมด
ตัวเลือกการเพิ่มประสิทธิภาพ ใช้:

--help=target,ตัวเพิ่มประสิทธิภาพ

พื้นที่ปลูก --help= ตัวเลือกสามารถทำซ้ำได้ในบรรทัดคำสั่ง การใช้งานต่อเนื่องแต่ละครั้งจะแสดง
คลาสของตัวเลือกที่ร้องขอโดยข้ามตัวเลือกที่แสดงแล้ว

ถ้า -Q ตัวเลือกปรากฏบนบรรทัดคำสั่งก่อน --help= ตัวเลือก จากนั้น
คำอธิบายที่แสดงโดย --help= มีการเปลี่ยนแปลง แทนที่จะอธิบายที่แสดง
ตัวเลือก ระบุว่าตัวเลือกถูกเปิดใช้งาน ปิดใช้งาน หรือตั้งค่า
เป็นค่าเฉพาะ (สมมติว่าคอมไพเลอร์รู้สิ่งนี้ ณ จุดที่
--help= ใช้ตัวเลือก)

นี่คือตัวอย่างที่ตัดทอนจากพอร์ต ARM ของ gcc:

% gcc -Q -mabi=2 --help=target -c
ตัวเลือกต่อไปนี้เป็นเป้าหมายเฉพาะ:
-มาบิ= 2
-mabort-on-noreturn [ปิดการใช้งาน]
-mapcs [ปิดการใช้งาน]

เอาต์พุตมีความไวต่อผลกระทบของตัวเลือกบรรทัดคำสั่งก่อนหน้า ดังนั้นสำหรับ
ตัวอย่าง เป็นไปได้ที่จะค้นหาว่าเปิดใช้งานการเพิ่มประสิทธิภาพใดบ้างที่ -O2 โดยใช้:

-Q -O2 --help=optimizers

หรือคุณสามารถค้นพบว่าการเพิ่มประสิทธิภาพไบนารีใดที่เปิดใช้งานโดย -O3 โดยใช้:

gcc -c -Q -O3 --help=optimizers > /tmp/O3-opts
gcc -c -Q -O2 --help=optimizers > /tmp/O2-opts
diff /tmp/O2-opts /tmp/O3-opts | เปิดใช้งาน grep

-ไม่มีบัญญัติ-คำนำหน้า
ห้ามขยายลิงก์สัญลักษณ์ แก้ไขการอ้างอิงถึง /../ or /./หรือสร้างเส้นทาง
สัมบูรณ์เมื่อสร้างคำนำหน้าแบบสัมพัทธ์

--รุ่น
แสดงหมายเลขเวอร์ชันและลิขสิทธิ์ของ GCC ที่เรียกใช้

-เครื่องห่อ
เรียกใช้คำสั่งย่อยทั้งหมดภายใต้โปรแกรมแรปเปอร์ ชื่อของโปรแกรมห่อหุ้มและ
พารามิเตอร์จะถูกส่งผ่านเป็นรายการที่คั่นด้วยเครื่องหมายจุลภาค

gcc -c tc -wrapper gdb,--args

สิ่งนี้เรียกโปรแกรมย่อยทั้งหมดของ gcc ภายใต้ gdb --argsดังนั้นการวิงวอนของ cc1 is
gdb --args cc1 ....

-fplugin=ชื่อ.ดังนั้น
โหลดโค้ดปลั๊กอินในไฟล์ ชื่อ.so ถือว่าเป็นอ็อบเจ็กต์ที่ใช้ร่วมกันที่จะ dlopen'd โดย
คอมไพเลอร์ ชื่อฐานของไฟล์อ็อบเจ็กต์ที่ใช้ร่วมกันใช้เพื่อระบุ plugin
เพื่อวัตถุประสงค์ในการแยกวิเคราะห์อาร์กิวเมนต์ (See -fplugin-หาเรื่อง-ชื่อ-สำคัญ=ความคุ้มค่า ด้านล่าง). แต่ละ
ปลั๊กอินควรกำหนดฟังก์ชันการโทรกลับที่ระบุใน Plugins API

-fplugin-หาเรื่อง-ชื่อ-สำคัญ=ความคุ้มค่า
กำหนดอาร์กิวเมนต์ที่เรียกว่า สำคัญ มีค่า ความคุ้มค่า สำหรับปลั๊กอินที่เรียกว่า ชื่อ.

-fdump-ada-spec[-บาง]
สำหรับซอร์ส C และ C++ และรวมไฟล์ ให้สร้างข้อกำหนด Ada ที่สอดคล้องกัน

-fada-spec-parent=หน่วย
ร่วมกับ -fdump-ada-spec[-บาง] ด้านบน สร้างข้อกำหนด Ada เป็นหน่วยย่อยของ
ผู้ปกครอง หน่วย.

-fdump-go-spec=ไฟล์
สำหรับไฟล์อินพุตในภาษาใด ๆ ให้สร้างการประกาศ Go ที่สอดคล้องกันใน ไฟล์. นี้
สร้างการประกาศ Go "const", "type", "var" และ "func" ซึ่งอาจเป็นวิธีที่มีประโยชน์
เพื่อเริ่มเขียนส่วนต่อประสาน Go เพื่อเขียนโค้ดในภาษาอื่น

@ไฟล์
อ่านตัวเลือกบรรทัดคำสั่งจาก ไฟล์. ตัวเลือกที่อ่านจะถูกแทรกแทนที่
ต้นฉบับ @ไฟล์ ตัวเลือก. ถ้า ไฟล์ ไม่มีอยู่หรือไม่สามารถอ่านได้ดังนั้นตัวเลือก
จะได้รับการปฏิบัติอย่างแท้จริงและจะไม่ถูกลบออก

ตัวเลือกใน ไฟล์ ถูกคั่นด้วยช่องว่าง อาจรวมอักขระช่องว่าง
ในตัวเลือกโดยล้อมรอบตัวเลือกทั้งหมดในเครื่องหมายคำพูดเดี่ยวหรือคู่ ใด ๆ
อักขระ (รวมถึงแบ็กสแลช) อาจรวมด้วยคำนำหน้าอักขระเป็น
รวมกับแบ็กสแลช NS ไฟล์ ตัวเองอาจมี @ เพิ่มเติมไฟล์ ตัวเลือก; ใด ๆ
ตัวเลือกดังกล่าวจะได้รับการประมวลผลซ้ำ

กำลังรวบรวม C + + โปรแกรม
ไฟล์ต้นฉบับ C ++ ตามอัตภาพใช้คำต่อท้ายอย่างใดอย่างหนึ่ง .C, ซีซี., .cpp, .CPP, .c++, .cp,หรือ
.cxx; ไฟล์ส่วนหัว C++ มักใช้ .hh, .hpp, .H, หรือ (สำหรับรหัสเทมเพลตที่แชร์) .tccและ
ไฟล์ C ++ ที่ประมวลผลล่วงหน้าใช้คำต่อท้าย .ii. GCC รู้จักไฟล์ที่มีชื่อเหล่านี้และ
คอมไพล์พวกมันเป็นโปรแกรม C++ แม้ว่าคุณจะเรียกคอมไพเลอร์ในลักษณะเดียวกับการคอมไพล์
โปรแกรม C (มักจะมีชื่อ gcc).

อย่างไรก็ตามการใช้ gcc ไม่เพิ่มไลบรารี C++ g ++ เป็นโปรแกรมที่เรียก GCC และ
ระบุการลิงก์กับไลบรารี C++ โดยอัตโนมัติ มันปฏิบัติต่อ .c, .h และ .i ไฟล์เป็น
ไฟล์ต้นฉบับ C ++ แทนไฟล์ต้นฉบับ C เว้นแต่ -x ถูกนำมาใช้. โปรแกรมนี้ยังมีประโยชน์อีกด้วย
เมื่อทำการคอมไพล์ไฟล์ส่วนหัว C ด้วย a .h ส่วนขยายสำหรับใช้ในการคอมไพล์ C++ บน
หลายระบบ, g ++ ยังติดตั้งด้วยชื่อ C ++.

เมื่อคุณคอมไพล์โปรแกรม C++ คุณอาจระบุตัวเลือกบรรทัดคำสั่งเดียวกันจำนวนมากที่
คุณใช้สำหรับรวบรวมโปรแกรมในภาษาใด ๆ หรือตัวเลือกบรรทัดคำสั่งที่มีความหมายสำหรับ C
และภาษาที่เกี่ยวข้อง หรือตัวเลือกที่มีความหมายสำหรับโปรแกรม C++ เท่านั้น

Options การควบคุม C ภาษาถิ่น
ตัวเลือกต่อไปนี้ควบคุมภาษาของ C (หรือภาษาที่ได้มาจาก C เช่น C ++
Objective-C และ Objective-C++) ที่คอมไพเลอร์ยอมรับ:

-ansi
ในโหมด C จะเท่ากับ -std=c90. ในโหมด C++ จะเท่ากับ
-std=c++98.

การดำเนินการนี้จะปิดคุณลักษณะบางอย่างของ GCC ที่ไม่เข้ากันกับ ISO C90 (เมื่อ
คอมไพล์โค้ด C) หรือมาตรฐาน C++ (เมื่อคอมไพล์โค้ด C++) เช่น "asm" และ
คีย์เวิร์ด "typeof" และมาโครที่กำหนดไว้ล่วงหน้า เช่น "unix" และ "vax" ที่ระบุ
ประเภทของระบบที่คุณใช้ นอกจากนี้ยังเปิดใช้งาน ISO . ที่ไม่พึงประสงค์และไม่ค่อยได้ใช้
คุณสมบัติตรีโกณมิติ สำหรับคอมไพเลอร์ C จะปิดใช้งานการจดจำสไตล์ C++ //
ความคิดเห็นเช่นเดียวกับคำหลัก "ในบรรทัด"

คำหลักสำรอง "__asm__", "__extension__", "__inline__" และ "__typeof__"
ทำงานต่อไปทั้งๆที่ -ansi. คุณไม่ต้องการใช้ในโปรแกรม ISO C
แน่นอน แต่มันมีประโยชน์ที่จะใส่ไว้ในไฟล์ส่วนหัวที่อาจรวมอยู่ใน
รวบรวมเสร็จแล้วกับ -ansi. มาโครที่กำหนดไว้ล่วงหน้าสำรอง เช่น "__unix__" และ
"__vax__" ก็มีให้เช่นกัน ไม่ว่าจะมีหรือไม่มี -ansi.

พื้นที่ปลูก -ansi ตัวเลือกไม่ทำให้โปรแกรมที่ไม่ใช่ ISO ถูกปฏิเสธโดยเปล่าประโยชน์ สำหรับ
ที่, -Wpedantic จำเป็นนอกเหนือจาก -ansi.

แมโคร "__STRICT_ANSI__" ถูกกำหนดไว้ล่วงหน้าเมื่อ -ansi ใช้ตัวเลือก ส่วนหัวบางส่วน
ไฟล์อาจสังเกตเห็นมาโครนี้และงดเว้นจากการประกาศฟังก์ชันบางอย่างหรือการกำหนด
มาโครบางตัวที่มาตรฐาน ISO ไม่เรียกร้อง นี้เพื่อหลีกเลี่ยงการรบกวน
กับโปรแกรมใด ๆ ที่อาจใช้ชื่อเหล่านี้เพื่อสิ่งอื่น

ฟังก์ชันที่ปกติมีอยู่แล้วภายใน แต่ไม่มีความหมายที่กำหนดโดย ISO C (เช่น
เนื่องจาก "alloca" และ "ffs") ไม่ใช่ฟังก์ชันในตัวเมื่อ -ansi ถูกนำมาใช้.

-std=
กำหนดมาตรฐานภาษา ขณะนี้ตัวเลือกนี้รองรับเฉพาะเมื่อ
รวบรวม C หรือ C ++

คอมไพเลอร์สามารถยอมรับมาตรฐานพื้นฐานต่างๆ เช่น c90 or c++98และภาษาถิ่นของ GNU
ของมาตรฐานเหล่านั้น เช่น gnu90 or gnu++98. เมื่อกำหนดมาตรฐานพื้นฐานแล้ว
คอมไพเลอร์ยอมรับโปรแกรมทั้งหมดตามมาตรฐานนั้นรวมทั้งโปรแกรมที่ใช้ส่วนขยาย GNU
ที่ไม่ขัดแย้งกับมัน ตัวอย่างเช่น, -std=c90 ปิดคุณสมบัติบางอย่างของ GCC
ที่เข้ากันไม่ได้กับ ISO C90 เช่นคีย์เวิร์ด "asm" และ "typeof" แต่ไม่ใช่
นามสกุล GNU อื่น ๆ ที่ไม่มีความหมายใน ISO C90 เช่นละเว้น
ระยะกลางของนิพจน์ "?:" ในทางกลับกัน เมื่อภาษา GNU ของมาตรฐาน
ถูกระบุ คุณลักษณะทั้งหมดที่สนับสนุนโดยคอมไพเลอร์จะเปิดใช้งาน แม้ว่าจะเป็น
คุณสมบัติเปลี่ยนความหมายของมาตรฐานพื้นฐาน ส่งผลให้มีการปฏิบัติตามอย่างเข้มงวด
โปรแกรมอาจถูกปฏิเสธ มาตรฐานเฉพาะถูกใช้โดย -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. มาตรฐานนี้ได้รับการสนับสนุนอย่างสมบูรณ์ โมดูโลบั๊กและ
ปัญหาทศนิยม (ส่วนใหญ่แต่ไม่เกี่ยวข้องกับคุณลักษณะ C99 ที่เป็นตัวเลือกทั้งหมด
จากภาคผนวก F และ G) ดูhttp://gcc.gnu.org/c99status.html> สำหรับข้อมูลเพิ่มเติม
ข้อมูล. ชื่อ c9x และ iso9899:199x เลิกใช้แล้ว

c11
c1x
iso9899:2011
ISO C11 ฉบับปรับปรุงปี 2011 ของมาตรฐาน ISO C มาตรฐานนี้สำคัญไฉน
รองรับอย่างสมบูรณ์ โมดูโลบั๊ก ปัญหาทศนิยม (ส่วนใหญ่แต่ไม่ทั้งหมด
เกี่ยวข้องกับคุณสมบัติทางเลือก C11 จากภาคผนวก F และ G) และภาคผนวก K . เพิ่มเติม
(อินเตอร์เฟสตรวจสอบขอบเขต) และ L (การวิเคราะห์) ชื่อ c1x เลิกใช้แล้ว

gnu90
gnu89
ภาษา GNU ของ ISO C90 (รวมถึงคุณสมบัติ C99 บางอย่าง)

gnu99
gnu9x
ภาษา GNU ของ ISO C99 ชื่อ gnu9x เลิกใช้แล้ว

gnu11
gnu1x
ภาษา GNU ของ ISO C11 นี่เป็นค่าเริ่มต้นสำหรับรหัส C ชื่อ gnu1x is
เลิกใช้แล้ว

c++98
c++03
มาตรฐาน ISO C++ ปี 1998 บวกคอร์ริเจนดัมทางเทคนิคปี 2003 และเพิ่มเติมบางส่วน
รายงานข้อบกพร่อง เหมือนกับ -ansi สำหรับรหัส C++

gnu++98
gnu++03
ภาษาถิ่น GNU ของ -std=c++98. นี่เป็นค่าเริ่มต้นสำหรับรหัส C++

c++11
c++0x
มาตรฐาน ISO C++ ปี 2011 พร้อมการแก้ไขเพิ่มเติม ชื่อ c++0x เลิกใช้แล้ว

gnu++11
gnu++0x
ภาษาถิ่น GNU ของ -std=c++11. ชื่อ gnu++0x เลิกใช้แล้ว

c++14
c++1y
มาตรฐาน ISO C++ ปี 2014 พร้อมการแก้ไขเพิ่มเติม ชื่อ c++1y เลิกใช้แล้ว

gnu++14
gnu++1y
ภาษาถิ่น GNU ของ -std=c++14. ชื่อ gnu++1y เลิกใช้แล้ว

c++1z
การแก้ไขมาตรฐาน ISO C++ ครั้งต่อไป ซึ่งวางแผนไว้คร่าวๆ สำหรับปี 2017 สนับสนุน
อยู่ในขั้นทดลองอย่างมาก และเกือบจะเปลี่ยนแปลงไปในทางที่เข้ากันไม่ได้ใน
การเปิดตัวในอนาคต

gnu++1z
ภาษาถิ่น GNU ของ -std=c++1z. การสนับสนุนอยู่ในขั้นทดลองอย่างมาก และเกือบจะ
เปลี่ยนไปในทางที่เข้ากันไม่ได้อย่างแน่นอนในรุ่นต่อๆ ไป

-fgnu89-inline
ทางเลือก -fgnu89-inline บอกให้ GCC ใช้ความหมายของ GNU ดั้งเดิมสำหรับ "อินไลน์"
ทำงานเมื่ออยู่ในโหมด C99

การใช้ตัวเลือกนี้เทียบเท่ากับการเพิ่มแอตทริบิวต์ฟังก์ชัน "gnu_inline" โดยประมาณ
ไปยังฟังก์ชันอินไลน์ทั้งหมด

ทางเลือก -fno-gnu89-inline บอก GCC อย่างชัดเจนให้ใช้ซีแมนทิกส์ C99 สำหรับ
"อินไลน์" เมื่ออยู่ในโหมด C99 หรือ gnu99 (กล่าวคือ จะระบุการทำงานเริ่มต้น) นี้
ไม่รองรับตัวเลือกใน -std=c90 or -std=gnu90 โหมด.

อาจใช้มาโครตัวประมวลผลล่วงหน้า "__GNUC_GNU_INLINE__" และ "__GNUC_STDC_INLINE__"
เพื่อตรวจสอบว่าความหมายใดมีผลกับฟังก์ชัน "อินไลน์"

-aux-info ชื่อไฟล์
เอาต์พุตไปยังการประกาศชื่อไฟล์ต้นแบบสำหรับฟังก์ชันทั้งหมดที่ประกาศและ/หรือ
กำหนดไว้ในหน่วยการแปล รวมถึงที่อยู่ในไฟล์ส่วนหัว ตัวเลือกนี้คือ
ละเลยอย่างเงียบ ๆ ในภาษาอื่นที่ไม่ใช่ C

นอกจากการประกาศ ไฟล์ยังระบุในความคิดเห็น ที่มาของการประกาศแต่ละครั้ง
(ไฟล์ต้นฉบับและบรรทัด) ไม่ว่าจะเป็นการประกาศโดยปริยาย ต้นแบบ หรือ
ไม่ได้ต้นแบบ (I, N สำหรับใหม่หรือ O สำหรับเก่าตามลำดับในอักขระตัวแรกหลังจาก
หมายเลขบรรทัดและโคลอน) และไม่ว่าจะมาจากการประกาศหรือคำจำกัดความ
(C or Fตามลำดับในอักขระต่อไปนี้) ในกรณีของฟังก์ชัน
คำจำกัดความ รายการอาร์กิวเมนต์สไตล์ K&R ตามด้วยการประกาศก็เช่นกัน
ให้ความเห็นภายในหลังจากการประกาศ

-fallow-parameterless-variadic-functions
ยอมรับฟังก์ชันแบบแปรผันโดยไม่มีพารามิเตอร์ที่มีชื่อ

แม้ว่าจะเป็นไปได้ที่จะกำหนดฟังก์ชันดังกล่าว แต่ก็ไม่มีประโยชน์เท่าที่เป็นอยู่
ไม่สามารถอ่านข้อโต้แย้งได้ รองรับเฉพาะ C เนื่องจากโครงสร้างนี้คือ
อนุญาตโดย C ++

-fno-asm
ไม่รู้จัก "asm", "inline" หรือ "typeof" เป็นคีย์เวิร์ด เพื่อให้โค้ดใช้สิ่งเหล่านี้ได้
คำเป็นตัวระบุ คุณสามารถใช้คำหลัก "__asm__", "__inline__" และ
"__typeof__" แทน -ansi หมายถึง -fno-asm.

ใน C ++ สวิตช์นี้จะมีผลกับคำหลัก "typeof" เท่านั้น เนื่องจาก "asm" และ "inline" เป็น
คำหลักมาตรฐาน คุณอาจต้องการใช้ -fno-gnu-คำหลัก ธงแทนซึ่งมี
ผลเดียวกัน ในโหมด C99 (-std=c99 or -std=gnu99) สวิตช์นี้มีผลกับ .เท่านั้น
คีย์เวิร์ด "asm" และ "typeof" เนื่องจาก "inline" เป็นคีย์เวิร์ดมาตรฐานใน ISO C99

-fno-ในตัว
-fno-ในตัว-ฟังก์ชัน
ไม่รู้จักฟังก์ชันในตัวที่ไม่ได้ขึ้นต้นด้วย __บิวอิน_ เป็นคำนำหน้า

โดยปกติแล้ว GCC จะสร้างโค้ดพิเศษเพื่อจัดการกับฟังก์ชันในตัวบางอย่างเพิ่มเติม
อย่างมีประสิทธิภาพ ตัวอย่างเช่น การเรียก "alloca" อาจกลายเป็นคำสั่งเดียวซึ่ง
ปรับสแต็กโดยตรงและการเรียก "memcpy" อาจกลายเป็นลูปการคัดลอกแบบอินไลน์ NS
โค้ดผลลัพธ์มักจะเล็กกว่าและเร็วกว่า แต่เนื่องจากฟังก์ชันเรียก no
ปรากฏอีกต่อไปเช่นนี้ คุณไม่สามารถตั้งค่าเบรกพอยต์ในการโทรเหล่านั้น และคุณไม่สามารถเปลี่ยนแปลงได้
ลักษณะการทำงานของฟังก์ชันโดยเชื่อมโยงกับไลบรารีอื่น นอกจากนี้ เมื่อ
ฟังก์ชั่นได้รับการยอมรับว่าเป็นฟังก์ชั่นในตัว GCC อาจใช้ข้อมูลเกี่ยวกับสิ่งนั้น
ฟังก์ชันเพื่อเตือนปัญหาเกี่ยวกับการเรียกใช้ฟังก์ชันนั้น หรือเพื่อสร้างเพิ่มเติม
โค้ดที่มีประสิทธิภาพ แม้ว่าโค้ดผลลัพธ์จะยังคงมีการเรียกใช้ฟังก์ชันนั้นอยู่ก็ตาม สำหรับ
ตัวอย่าง คำเตือนจะได้รับกับ -Wformat สำหรับการเรียก "printf" ที่ไม่ดีเมื่อ "printf" เป็น
สร้างขึ้นในและ "strlen" เป็นที่รู้จักว่าไม่แก้ไขหน่วยความจำส่วนกลาง

กับ -fno-ในตัว-ฟังก์ชัน ตัวเลือกเฉพาะฟังก์ชั่นในตัว ฟังก์ชัน ถูกปิดใช้งาน.
ฟังก์ชัน ต้องไม่ขึ้นต้นด้วย __บิวอิน_. หากชื่อฟังก์ชันนั้นไม่มีในตัว
ใน GCC เวอร์ชันนี้ ตัวเลือกนี้จะถูกละเว้น ไม่มีความสอดคล้อง
-fbuiltin-ฟังก์ชัน ตัวเลือก; หากคุณต้องการเปิดใช้งานฟังก์ชั่นในตัวแบบเลือกเมื่อ
การใช้ -fno-ในตัว or -ffreestandingคุณอาจกำหนดมาโครเช่น:

#define เอบีเอส (n) __builtin_abs ((n))
#define strcpy(d, s) __builtin_strcpy ((d), (s))

-fhosted
ยืนยันว่าการคอมไพล์กำหนดเป้าหมายสภาพแวดล้อมที่โฮสต์ นี่หมายความว่า -fbuiltin.
สภาพแวดล้อมที่โฮสต์เป็นสภาพแวดล้อมที่มีไลบรารีมาตรฐานทั้งหมดและใน
ซึ่ง "main" มีประเภทส่งคืนเป็น "int" ตัวอย่างเกือบทุกอย่างยกเว้น a
เคอร์เนล ซึ่งเทียบเท่ากับ -fno-อิสระ.

-ffreestanding
ยืนยันว่าการรวบรวมกำหนดเป้าหมายสภาพแวดล้อมแบบอิสระ นี่หมายความว่า
-fno-ในตัว. สภาพแวดล้อมอิสระเป็นสิ่งที่ห้องสมุดมาตรฐานไม่อาจ
มีอยู่ และการเริ่มต้นโปรแกรมอาจไม่จำเป็นต้องอยู่ที่ "หลัก" ตัวอย่างที่ชัดเจนที่สุด
เป็นเคอร์เนล OS ซึ่งเทียบเท่ากับ -fno-โฮสต์.

-fopenacc
เปิดใช้งานการจัดการคำสั่ง OpenACC "#pragma acc" ใน C/C++ และ "!$acc" ใน Fortran
เมื่อ -fopenacc ระบุคอมไพเลอร์สร้างรหัสเร่งตาม
OpenACC Application Programming Interface v2.0http://www.openacc.org/>. ตัวเลือกนี้
หมายถึง -pthreadและดังนั้นจึงรองรับเฉพาะเป้าหมายที่รองรับ
-pthread.

โปรดทราบว่านี่เป็นคุณลักษณะทดลอง ไม่สมบูรณ์ และอาจเปลี่ยนแปลงได้ในอนาคต
เวอร์ชันของ GCC ดูhttps://gcc.gnu.org/wiki/OpenACC> สำหรับข้อมูลเพิ่มเติม

-fopenmp
เปิดใช้งานการจัดการคำสั่ง OpenMP "#pragma omp" ใน C/C++ และ "!$omp" ใน Fortran
เมื่อ -fopenmp ถูกระบุคอมไพเลอร์สร้างรหัสคู่ขนานตาม
อินเทอร์เฟซโปรแกรมแอปพลิเคชัน OpenMP v4.0http://www.openmp.org/>. ตัวเลือกนี้
หมายถึง -pthreadและดังนั้นจึงรองรับเฉพาะเป้าหมายที่รองรับ
-pthread. -fopenmp หมายถึง -fopenmp-simd.

-fopenmp-simd
เปิดใช้งานการจัดการคำสั่ง SIMD ของ OpenMP ด้วย "#pragma omp" ใน C/C++ และ "!$omp" ใน
ฟอร์ทราน. คำสั่ง OpenMP อื่น ๆ จะถูกละเว้น

-fcilkplus
เปิดใช้งานการใช้คุณลักษณะส่วนขยายภาษา Cilk Plus สำหรับ C/C++ เมื่อตัวเลือก
-fcilkplus ถูกระบุ เปิดใช้งานการใช้คุณลักษณะส่วนขยายภาษา Cilk Plus
สำหรับ C/C++ การใช้งานปัจจุบันเป็นไปตาม ABI เวอร์ชัน 1.2 นี่คือ
คุณลักษณะทดลองที่เสร็จสมบูรณ์เพียงบางส่วนเท่านั้น และอินเทอร์เฟซอาจมีการเปลี่ยนแปลง
ในเวอร์ชันต่อๆ ไปของ GCC เนื่องจากข้อกำหนดอย่างเป็นทางการมีการเปลี่ยนแปลง ปัจจุบันทั้งหมด
คุณลักษณะ แต่ "_Cilk_for" ถูกใช้งานแล้ว

-fgnu-tm
เมื่อตัวเลือก -fgnu-tm ถูกระบุ คอมไพเลอร์สร้างรหัสสำหรับ Linux
ตัวแปรของเอกสารข้อมูลจำเพาะของหน่วยความจำธุรกรรม ABI ปัจจุบันของ Intel (การแก้ไข
1.1 6 พฤษภาคม 2009) นี่เป็นคุณลักษณะทดลองที่อินเทอร์เฟซอาจเปลี่ยนแปลงใน
GCC เวอร์ชันอนาคต เนื่องจากข้อกำหนดอย่างเป็นทางการมีการเปลี่ยนแปลง โปรดทราบว่าไม่
สถาปัตยกรรมทั้งหมดได้รับการสนับสนุนสำหรับคุณลักษณะนี้

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสนับสนุนหน่วยความจำธุรกรรมของ GCC

โปรดทราบว่าคุณลักษณะหน่วยความจำธุรกรรมไม่ได้รับการสนับสนุนโดยมีข้อยกเว้นที่ไม่ใช่การโทร
(-fnon-call-ข้อยกเว้น).

-fms-ส่วนขยาย
ยอมรับโครงสร้างที่ไม่ได้มาตรฐานบางอย่างที่ใช้ในไฟล์ส่วนหัวของ Microsoft

ในโค้ด C++ จะทำให้ชื่อสมาชิกในโครงสร้างคล้ายกับประเภทก่อนหน้า
ประกาศ

พิมพ์ int UOW;
โครงสร้าง ABC {
อุ้ย อุ้ย;
};

บางกรณีของฟิลด์ที่ไม่มีชื่อในโครงสร้างและสหภาพจะยอมรับกับสิ่งนี้เท่านั้น
ตัวเลือก

โปรดทราบว่าตัวเลือกนี้ปิดสำหรับเป้าหมายทั้งหมด แต่เป้าหมาย x86 ที่ใช้ ms-abi

-fplan9-extensions
ยอมรับโครงสร้างที่ไม่ได้มาตรฐานบางส่วนที่ใช้ในโค้ดแผน 9

สิ่งนี้ทำให้ -fms-ส่วนขยายอนุญาตให้ส่งตัวชี้ไปยังโครงสร้างโดยไม่ระบุชื่อ
เขตข้อมูลไปยังฟังก์ชันที่คาดหวังตัวชี้ไปยังองค์ประกอบของประเภทของเขตข้อมูลและ
อนุญาตให้อ้างถึงฟิลด์ที่ไม่ระบุชื่อที่ประกาศโดยใช้ typedef นี้เท่านั้น
รองรับ C ไม่ใช่ C ++

-trigraphs
รองรับไตรกราฟ ISO C NS -ansi ตัวเลือก (และ -std ตัวเลือกสำหรับ ISO C . ที่เข้มงวด
สอดคล้อง) หมายถึง -trigraphs.

สไตล์ทรง
-traditional-cpp
ก่อนหน้านี้ ตัวเลือกเหล่านี้ทำให้ GCC พยายามจำลองคอมไพเลอร์ C ที่ได้มาตรฐาน
ขณะนี้ได้รับการสนับสนุนเฉพาะกับ -E สวิตซ์. ตัวประมวลผลล่วงหน้ายังคงรองรับ
โหมดก่อนมาตรฐาน ดูคู่มือ GNU CPP สำหรับรายละเอียด

-fcond-ไม่ตรงกัน
อนุญาตนิพจน์เงื่อนไขที่มีประเภทไม่ตรงกันในอาร์กิวเมนต์ที่สองและสาม
ค่าของนิพจน์ดังกล่าวถือเป็นโมฆะ ตัวเลือกนี้ไม่รองรับ C++

-flax-vector-conversions
อนุญาตให้มีการแปลงโดยนัยระหว่างเวกเตอร์ที่มีจำนวนองค์ประกอบต่างกันและ/หรือ
ประเภทองค์ประกอบที่เข้ากันไม่ได้ ไม่ควรใช้ตัวเลือกนี้สำหรับรหัสใหม่

-funsigned-char
ปล่อยให้ประเภท "ถ่าน" ไม่ถูกลงชื่อเช่น "ถ่านที่ไม่ได้ลงนาม"

เครื่องแต่ละประเภทมีค่าเริ่มต้นสำหรับสิ่งที่ควรเป็น "อักขระ" มันเป็นอย่างใดอย่างหนึ่งเช่น
"ถ่านที่ไม่ได้ลงนาม" โดยค่าเริ่มต้นหรือเช่น "ถ่านที่ลงนาม" โดยค่าเริ่มต้น

ตามหลักการแล้ว โปรแกรมแบบพกพาควรใช้ "signed char" หรือ "unsigned char" เสมอเมื่อ
ขึ้นอยู่กับการลงนามของวัตถุ แต่มีหลายโปรแกรมที่เขียนขึ้นเพื่อใช้
"ถ่าน" ธรรมดาและคาดว่าจะได้รับการลงนาม หรือคาดว่าจะไม่มีการลงนาม ทั้งนี้ขึ้นอยู่กับ
เครื่องที่พวกเขาเขียนขึ้นสำหรับ ตัวเลือกนี้และผกผันของมัน ให้คุณสร้าง a . ได้
โปรแกรมทำงานกับค่าเริ่มต้นตรงข้าม

ประเภท "ถ่าน" เป็นประเภทที่แตกต่างจาก "ถ่านที่ลงนาม" หรือ "ไม่ได้ลงนาม
char" แม้ว่าพฤติกรรมจะเหมือนกับหนึ่งในสองคนนั้นเสมอ

-fsigned-char
ให้ลงชื่อประเภท "ถ่าน" เช่น "ถ่านที่ลงนาม"

โปรดทราบว่านี่เทียบเท่ากับ -fno-unsigned-charซึ่งเป็นรูปเชิงลบของ
-funsigned-char. ในทำนองเดียวกันตัวเลือก -fno-ลงนาม-char เทียบเท่ากับ
-funsigned-char.

-fsigned-bitfields
-funsigned-bitfields
-fno-ลงนาม bitfields
-fno-unsigned-bitfields
ตัวเลือกเหล่านี้ควบคุมว่าฟิลด์บิตถูกเซ็นชื่อหรือไม่เซ็น เมื่อการประกาศ
ไม่ใช้ "ลงนาม" หรือ "ไม่ได้ลงนาม" โดยค่าเริ่มต้น ฟิลด์บิตดังกล่าวถูกเซ็นชื่อ
เนื่องจากสิ่งนี้สอดคล้องกัน: ประเภทจำนวนเต็มพื้นฐานเช่น "int" เป็นประเภทที่มีการเซ็นชื่อ

Options การควบคุม C + + ภาษาถิ่น
ส่วนนี้อธิบายตัวเลือกบรรทัดคำสั่งที่มีความหมายสำหรับโปรแกรม C++ เท่านั้น
คุณยังสามารถใช้ตัวเลือกคอมไพเลอร์ GNU ได้เกือบทั้งหมด ไม่ว่าโปรแกรมของคุณจะเป็นภาษาอะไร
อยู่ ตัวอย่างเช่น คุณอาจรวบรวมไฟล์ firstClass.C อย่างนี้:

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

ในตัวอย่างนี้ เท่านั้น -frepo เป็นตัวเลือกสำหรับโปรแกรม C++ เท่านั้น คุณสามารถใช้
ตัวเลือกอื่น ๆ ด้วยภาษาใด ๆ ที่ GCC รองรับ

นี่คือรายการตัวเลือกที่ เท่านั้น สำหรับการคอมไพล์โปรแกรม C++:

-fabi-เวอร์ชั่น=n
ใช้เวอร์ชัน n ของ C++ ABI ค่าเริ่มต้นคือเวอร์ชัน 0

เวอร์ชัน 0 หมายถึงเวอร์ชันที่สอดคล้องกับข้อกำหนด C++ ABI มากที่สุด
ดังนั้น ABI ที่ได้รับโดยใช้เวอร์ชัน 0 จะเปลี่ยนไปใน G++ . เวอร์ชันต่างๆ
เนื่องจากข้อบกพร่องของ ABI ได้รับการแก้ไขแล้ว

เวอร์ชัน 1 คือเวอร์ชันของ C++ ABI ที่ปรากฏครั้งแรกใน G++ 3.2

เวอร์ชัน 2 เป็นเวอร์ชันของ C++ ABI ที่ปรากฏขึ้นครั้งแรกใน G++ 3.4 และเป็น
ค่าเริ่มต้นผ่าน G++ 4.9

เวอร์ชัน 3 แก้ไขข้อผิดพลาดในการจัดการที่อยู่คงที่เป็นอาร์กิวเมนต์เทมเพลต

เวอร์ชัน 4 ซึ่งปรากฏตัวครั้งแรกใน G++ 4.5 ใช้การแมงเกิลมาตรฐานสำหรับ vector
ประเภท

เวอร์ชัน 5 ซึ่งปรากฏตัวครั้งแรกใน G++ 4.6 แก้ไขการบิดเบือนแอตทริบิวต์
const/volatile บนประเภทตัวชี้ฟังก์ชัน ประเภท decl ของ decl ธรรมดา และการใช้a
พารามิเตอร์ฟังก์ชันในการประกาศพารามิเตอร์อื่น

เวอร์ชัน 6 ซึ่งปรากฏตัวครั้งแรกใน G++ 4.7 แก้ไขพฤติกรรมการโปรโมตของ C++11
ขอบเขต enums และ mangling ของชุดอาร์กิวเมนต์แม่แบบ const/static_cast คำนำหน้า ++
และ -- และฟังก์ชันขอบเขตคลาสที่ใช้เป็นอาร์กิวเมนต์เทมเพลต

เวอร์ชัน 7 ซึ่งปรากฏตัวครั้งแรกใน G++ 4.8 ที่ถือว่า nullptr_t เป็นประเภทในตัว
และแก้ไขการพังของ lambdas ในขอบเขตอาร์กิวเมนต์เริ่มต้น

เวอร์ชัน 8 ซึ่งปรากฏตัวครั้งแรกใน G++ 4.9 แก้ไขพฤติกรรมการแทนที่ของ
ประเภทฟังก์ชันด้วย function-cv-qualifiers

ดูสิ่งนี้ด้วย -วาบิ.

-fabi-compat-version=n
บนเป้าหมายที่รองรับนามแฝงที่แข็งแกร่ง G++ จะแก้ไขการเปลี่ยนแปลงโดยการสร้าง
นามแฝงที่มีชื่อ mangled ที่ถูกต้องเมื่อกำหนดสัญลักษณ์ด้วยไม่ถูกต้อง
ชื่อที่ยุ่งเหยิง สวิตช์นี้ระบุเวอร์ชัน ABI ที่จะใช้สำหรับนามแฝง

กับ -fabi-version=0 (ค่าดีฟอลต์) ค่าดีฟอลต์คือ 2 หาก ABI เวอร์ชันอื่นคือ
เลือกไว้อย่างชัดเจน ค่าเริ่มต้นนี้เป็น 0

เวอร์ชันที่เข้ากันได้ยังถูกกำหนดโดย -วาบิ=n.

-fno-การเข้าถึง-การควบคุม
ปิดการตรวจสอบการเข้าถึงทั้งหมด สวิตช์นี้มีประโยชน์หลักในการแก้ไขข้อผิดพลาดใน
รหัสควบคุมการเข้าถึง

-fcheck-ใหม่
ตรวจสอบว่าตัวชี้ที่ส่งคืนโดย "ตัวดำเนินการใหม่" ไม่ใช่ค่าว่างก่อนที่จะพยายาม
แก้ไขการจัดเก็บที่จัดสรรไว้ โดยปกติการตรวจสอบนี้ไม่จำเป็นเพราะ C++
standard ระบุว่า "operator new" จะคืนค่า 0 เท่านั้นหากมีการประกาศ "throw()", in
ซึ่งในกรณีนี้คอมไพเลอร์จะตรวจสอบค่าที่ส่งกลับเสมอแม้จะไม่มีตัวเลือกนี้ก็ตาม ใน
กรณีอื่น ๆ ทั้งหมดเมื่อ "ตัวดำเนินการใหม่" มีข้อกำหนดข้อยกเว้นที่ไม่ว่างเปล่า memory
สัญญาณหมดแรงโดยการโยน "std::bad_alloc" ดูสิ่งนี้ด้วย ใหม่ (โนทรอว์).

-fconstexpr-ความลึก=n
ตั้งค่าความลึกการประเมินซ้อนสูงสุดสำหรับฟังก์ชัน C++11 constexpr เป็น n. ขีดจำกัด
จำเป็นสำหรับการตรวจจับการเรียกซ้ำไม่รู้จบในระหว่างการประเมินนิพจน์คงที่ NS
ขั้นต่ำที่กำหนดโดยมาตรฐานคือ 512

-fdeduce-init-list
เปิดใช้งานการหักพารามิเตอร์ประเภทเทมเพลตเป็น "std::initializer_list" จากวงเล็บปีกกา-
รายการตัวเริ่มต้นที่แนบมา เช่น

แม่แบบ ส่งต่ออัตโนมัติ (T เสื้อ) -> decltype (realfn (t))
{
ส่งคืน realfn (t);
}

เป็นโมฆะ f()
{
ไปข้างหน้า({1,2}); // โทรไปข้างหน้า >
}

การหักนี้ถูกนำมาใช้เป็นการขยายเวลาที่เป็นไปได้สำหรับข้อเสนอเดิม
ความหมายสำหรับมาตรฐาน C++11 แต่ไม่ได้เป็นส่วนหนึ่งของมาตรฐานสุดท้าย จึงเป็น
ปิดใช้งานโดยค่าเริ่มต้น ตัวเลือกนี้เลิกใช้แล้วและอาจถูกลบในอนาคต
เวอร์ชันของ G++

-ffriend-ฉีด
แทรกฟังก์ชันเพื่อนลงในเนมสเปซที่ล้อมรอบเพื่อให้มองเห็นได้ภายนอก
ขอบเขตของคลาสที่ประกาศ ฟังก์ชั่นของเพื่อนได้รับการบันทึกไว้
เพื่อทำงานในลักษณะนี้ในคู่มืออ้างอิง C ++ แบบเก่าที่มีคำอธิบายประกอบ อย่างไรก็ตาม ใน ISO C++ a
ฟังก์ชันเพื่อนที่ไม่ได้ประกาศในขอบเขตที่ล้อมรอบสามารถพบได้โดยใช้
การค้นหาขึ้นอยู่กับอาร์กิวเมนต์ GCC มีค่าเริ่มต้นเป็นการทำงานมาตรฐาน

ตัวเลือกนี้มีไว้เพื่อความเข้ากันได้ และอาจถูกลบใน G++ รุ่นต่อๆ ไป

-fno-elide-constructors
มาตรฐาน C ++ อนุญาตให้ใช้งานโดยละเว้นการสร้างชั่วคราวที่เป็นเพียง
ใช้เพื่อเริ่มต้นวัตถุอื่นที่เป็นประเภทเดียวกัน การระบุตัวเลือกนี้จะปิดการใช้งาน
การเพิ่มประสิทธิภาพนั้นและบังคับให้ G++ เรียกตัวสร้างการคัดลอกในทุกกรณี

-fno-enforce-eh-specs
อย่าสร้างรหัสเพื่อตรวจสอบการละเมิดข้อกำหนดข้อยกเว้นในขณะใช้งาน
ตัวเลือกนี้ละเมิดมาตรฐาน C++ แต่อาจมีประโยชน์สำหรับการลดขนาดโค้ดใน
การสร้างการผลิต เหมือนกับการกำหนด "NDEBUG" นี้ไม่ได้ให้รหัสผู้ใช้
การอนุญาตให้โยนข้อยกเว้นที่ละเมิดข้อกำหนดข้อยกเว้น NS
คอมไพเลอร์ยังคงปรับให้เหมาะสมตามข้อกำหนดดังนั้นจึงทำให้เกิดสิ่งที่ไม่คาดคิด
ข้อยกเว้นส่งผลให้เกิดพฤติกรรมที่ไม่ได้กำหนดในขณะทำงาน

-fextern-tls-init
-fno-extern-tls-init
มาตรฐาน C++11 และ OpenMP อนุญาตให้ตัวแปร "thread_local" และ "threadprivate" เป็น
มีการเริ่มต้นแบบไดนามิก (รันไทม์) เพื่อรองรับสิ่งนี้ การใช้ตัวแปรดังกล่าวใดๆ
ผ่านฟังก์ชัน wrapper ที่ดำเนินการเริ่มต้นที่จำเป็น เมื่อ
การใช้และคำจำกัดความของตัวแปรอยู่ในหน่วยการแปลเดียวกัน ค่าโสหุ้ยนี้สามารถ
ถูกปรับให้เหมาะสม แต่เมื่อใช้งานในหน่วยการแปลอื่นจะมี
ค่าโสหุ้ยที่สำคัญแม้ว่าตัวแปรจะไม่ต้องการไดนามิกก็ตาม
การเริ่มต้น. หากโปรแกรมเมอร์สามารถมั่นใจได้ว่าไม่มีการใช้ตัวแปรใน
การกำหนด TU จำเป็นต้องทริกเกอร์การเริ่มต้นแบบไดนามิก (เนื่องจากตัวแปร is
เริ่มต้นแบบคงที่หรือใช้ตัวแปรในการกำหนด TU จะถูกดำเนินการ
ก่อนการใช้งานใน TU อื่น) พวกเขาสามารถหลีกเลี่ยงค่าใช้จ่ายนี้ด้วย
-fno-extern-tls-init ตัวเลือก

บนเป้าหมายที่รองรับนามแฝงสัญลักษณ์ ค่าเริ่มต้นคือ -fextern-tls-init. ตามเป้าหมาย
ที่ไม่รองรับนามแฝงของสัญลักษณ์ ค่าเริ่มต้นคือ -fno-extern-tls-init.

-ffor-ขอบเขต
-fno-for-ขอบเขต
If -ffor-ขอบเขต ระบุขอบเขตของตัวแปรที่ประกาศในa for-init-statement
ถูกจำกัดให้วนซ้ำ "for" ตามที่กำหนดโดยมาตรฐาน C++ ถ้า
-fno-for-ขอบเขต ระบุขอบเขตของตัวแปรที่ประกาศในa for-init-statement
ขยายไปยังจุดสิ้นสุดของขอบเขตการปิดล้อม เช่นเดียวกับในเวอร์ชันเก่าของ G++ และ
การใช้งาน (ดั้งเดิม) อื่น ๆ ของ C ++

หากไม่ระบุแฟล็ก ค่าเริ่มต้นจะเป็นไปตามมาตรฐาน แต่จะอนุญาตและให้
คำเตือนสำหรับโค้ดแบบเก่าที่อาจใช้การไม่ได้ หรือมีโค้ดต่างกัน
พฤติกรรม

-fno-gnu-คำหลัก
ไม่รู้จัก "typeof" เป็นคีย์เวิร์ด เพื่อให้โค้ดใช้คำนี้เป็น an . ได้
ตัวระบุ คุณสามารถใช้คำหลัก "__typeof__" แทนได้ -ansi หมายถึง
-fno-gnu-คำหลัก.

-fno-โดยนัย-เทมเพลต
อย่าปล่อยโค้ดสำหรับเทมเพลตที่ไม่ใช่แบบอินไลน์ที่สร้างอินสแตนซ์โดยปริยาย (เช่น โดย
ใช้); ปล่อยรหัสสำหรับการสร้างอินสแตนซ์ที่ชัดเจนเท่านั้น

-fno-implicit-inline-เทมเพลต
อย่าปล่อยโค้ดสำหรับการสร้างอินสแตนซ์โดยปริยายของเทมเพลตอินไลน์เช่นกัน ค่าเริ่มต้น
คือการจัดการอินไลน์ที่แตกต่างกันเพื่อให้คอมไพล์โดยมีและไม่จำเป็นต้องปรับให้เหมาะสม
อินสแตนซ์ที่ชัดเจนชุดเดียวกัน

-fno-ใช้อินไลน์
เพื่อประหยัดพื้นที่ อย่าปล่อยสำเนาฟังก์ชันอินไลน์ที่ควบคุมโดย
#การนำ Pragma ไปปฏิบัติ". สิ่งนี้ทำให้เกิดข้อผิดพลาดของตัวเชื่อมโยงหากฟังก์ชันเหล่านี้ไม่ใช่
อยู่ในทุกที่ที่พวกเขาถูกเรียก

-fms-ส่วนขยาย
ปิดใช้งานคำเตือน Wpedantic เกี่ยวกับโครงสร้างที่ใช้ใน MFC เช่น int โดยนัยและ
รับตัวชี้ไปยังฟังก์ชันสมาชิกผ่านไวยากรณ์ที่ไม่ได้มาตรฐาน

-fno-nonansi-builtins
ปิดใช้งานการประกาศฟังก์ชันในตัวที่ไม่ได้รับคำสั่งจาก ANSI/ISO C สิ่งเหล่านี้
รวมถึง "ffs", "alloca", "_exit", "index", "bzero", "conjf" และอื่นๆ ที่เกี่ยวข้อง
ฟังก์ชั่น

-fnothrow-opt
ปฏิบัติต่อข้อกำหนดข้อยกเว้น "throw()" ราวกับว่าเป็นข้อกำหนด "noexcept" to
ลดหรือกำจัดโอเวอร์เฮดของขนาดข้อความที่สัมพันธ์กับฟังก์ชันโดยไม่มีข้อยกเว้น
ข้อกำหนด หากฟังก์ชันมีตัวแปรประเภทท้องถิ่นที่ไม่สำคัญ
destructors ข้อกำหนดข้อยกเว้นทำให้ฟังก์ชันมีขนาดเล็กลงเพราะ
การล้างข้อมูล EH สำหรับตัวแปรเหล่านั้นสามารถเพิ่มประสิทธิภาพได้ ความหมายคือ
ว่ามีข้อยกเว้นจากฟังก์ชันที่มีข้อกำหนดข้อยกเว้นดังกล่าว
ส่งผลให้มีการเรียกร้องให้ "ยุติ" มากกว่า "ไม่คาดคิด"

-fno-operator-names
อย่าใช้คำสำคัญชื่อโอเปอเรเตอร์ "and", "bitand", "bitor", "compl", "not", "or"
และ "xor" เป็นคำพ้องความหมายเป็นคีย์เวิร์ด

-fno-ตัวเลือก-diags
ปิดใช้งานการวินิจฉัยที่มาตรฐานระบุว่าคอมไพเลอร์ไม่จำเป็นต้องมีปัญหา
ปัจจุบัน การวินิจฉัยดังกล่าวที่ออกโดย G++ เพียงอย่างเดียวคือชื่อที่มี
หลายความหมายภายในคลาส

-fpermissive
ปรับลดรุ่นการวินิจฉัยบางอย่างเกี่ยวกับโค้ดที่ไม่เป็นไปตามข้อกำหนดจากข้อผิดพลาดเป็นคำเตือน ดังนั้น,
การใช้ -fpermissive อนุญาตให้คอมไพล์โค้ดที่ไม่เป็นไปตามข้อกำหนดบางส่วน

-fno-สวย-แม่แบบ
เมื่อข้อความแสดงข้อผิดพลาดอ้างถึงความเชี่ยวชาญพิเศษของเทมเพลตฟังก์ชัน คอมไพเลอร์
ปกติพิมพ์ลายเซ็นของเทมเพลตตามด้วยอาร์กิวเมนต์เทมเพลตและ
typedefs หรือ typenames ใด ๆ ในลายเซ็น (เช่น "void f(T) [with T = int]" แทน
มากกว่า "void f(int)") เพื่อให้ชัดเจนว่าเทมเพลตใดที่เกี่ยวข้อง เมื่อผิดพลาด
ข้อความหมายถึงความเชี่ยวชาญของเทมเพลตคลาส คอมไพเลอร์ละเว้นใดๆ
อาร์กิวเมนต์เทมเพลตที่ตรงกับอาร์กิวเมนต์เทมเพลตเริ่มต้นสำหรับเทมเพลตนั้น ถ้า
พฤติกรรมเหล่านี้ทำให้เข้าใจข้อความแสดงข้อผิดพลาดได้ยากขึ้นมากกว่า
ง่ายขึ้นคุณสามารถใช้ -fno-สวย-แม่แบบ เพื่อปิดการใช้งาน

-frepo
เปิดใช้งานการสร้างอินสแตนซ์เทมเพลตอัตโนมัติในเวลาที่ลิงก์ ตัวเลือกนี้ยังหมายถึง
-fno-โดยนัย-เทมเพลต.

-fno-rti
ปิดใช้งานการสร้างข้อมูลเกี่ยวกับทุกคลาสด้วยฟังก์ชันเสมือนสำหรับใช้งานโดย
คุณลักษณะการระบุประเภทรันไทม์ C++ ("dynamic_cast" และ "typeid") ถ้าคุณ
อย่าใช้ส่วนต่าง ๆ ของภาษา คุณสามารถประหยัดพื้นที่บางส่วนโดยใช้แฟล็กนี้
โปรดทราบว่าการจัดการข้อยกเว้นใช้ข้อมูลเดียวกัน แต่ G++ สร้างเป็น
จำเป็น โอเปอเรเตอร์ "dynamic_cast" ยังคงสามารถใช้สำหรับการแคสต์ที่ไม่ต้องการได้
ข้อมูลประเภทรันไทม์ เช่น เปลี่ยนเป็น "โมฆะ *" หรือคลาสพื้นฐานที่ชัดเจน

-fsized-deallocation
เปิดใช้งานการประกาศทั่วโลกในตัว

โมฆะโอเปอเรเตอร์ลบ (เป็นโมฆะ *, std::size_t) ยกเว้น;
โมฆะโอเปอเรเตอร์ ลบ[] (เป็นโมฆะ *, std::size_t) ยกเว้น;

ตามที่แนะนำใน C++14 สิ่งนี้มีประโยชน์สำหรับการจัดสรรคืนเพื่อทดแทนที่ผู้ใช้กำหนด
ฟังก์ชันที่ใช้ขนาดของอ็อบเจ็กต์เพื่อทำให้การจัดสรรคืนเร็วขึ้น
เปิดใช้งานโดยค่าเริ่มต้นภายใต้ -std=c++14 ขึ้นไป ธง -Wsized-deallocation เตือน
เกี่ยวกับสถานที่ที่อาจต้องการเพิ่มคำจำกัดความ

-fstats
ส่งสถิติเกี่ยวกับการประมวลผลส่วนหน้าเมื่อสิ้นสุดการรวบรวม นี้
โดยทั่วไปข้อมูลจะมีประโยชน์เฉพาะกับทีมพัฒนา G++ เท่านั้น

-fstrict-enums
อนุญาตให้คอมไพเลอร์ปรับให้เหมาะสมโดยใช้สมมติฐานว่าค่าของประเภทที่แจกแจงแล้ว
สามารถเป็นหนึ่งในค่าของการแจงนับ (ตามที่กำหนดไว้ในมาตรฐาน C++;
โดยพื้นฐานแล้วค่าที่สามารถแสดงเป็นจำนวนบิตขั้นต่ำที่จำเป็นในการ
เป็นตัวแทนของการแจงนับทั้งหมด) สมมติฐานนี้อาจไม่ถูกต้องหากโปรแกรมใช้
การโยนเพื่อแปลงค่าจำนวนเต็มตามอำเภอใจเป็นประเภทที่แจกแจง

-ftemplate-backtrace-limit=n
ตั้งค่าจำนวนสูงสุดของบันทึกการสร้างอินสแตนซ์ของเทมเพลตสำหรับคำเตือนหรือข้อผิดพลาดเดียว
ไปยัง n. ค่าเริ่มต้นคือ 10

-ftemplate-deep=n
ตั้งค่าความลึกสูงสุดของการสร้างอินสแตนซ์สำหรับคลาสเทมเพลตเป็น n. ขีดจำกัดของ
จำเป็นต้องมีความลึกของการสร้างอินสแตนซ์ของเทมเพลตเพื่อตรวจจับการเรียกซ้ำไม่รู้จบระหว่างเทมเพลต
การสร้างอินสแตนซ์ของคลาส โปรแกรมที่สอดคล้องกับ ANSI/ISO C++ ต้องไม่ใช้ค่าสูงสุด
ความลึกมากกว่า 17 (เปลี่ยนเป็น 1024 ใน C++11) ค่าเริ่มต้นคือ 900 เนื่องจาก
คอมไพเลอร์สามารถใช้พื้นที่สแต็กหมดก่อนที่จะกด 1024 ในบางสถานการณ์

-fno-threadsafe-statics
อย่าปล่อยรหัสพิเศษเพื่อใช้รูทีนที่ระบุใน C++ ABI สำหรับเธรด-
การเริ่มต้นที่ปลอดภัยของสถิตยศาสตร์ในพื้นที่ คุณสามารถใช้ตัวเลือกนี้เพื่อลดขนาดโค้ดได้
ในโค้ดเล็กน้อยที่ไม่จำเป็นต้องปลอดภัยต่อเธรด

-ฟิวส์-cxa-atexit
ลงทะเบียน destructors สำหรับวัตถุที่มีระยะเวลาการจัดเก็บแบบคงที่ด้วย "__cxa_atexit"
ฟังก์ชันมากกว่าฟังก์ชัน "atexit" ตัวเลือกนี้จำเป็นสำหรับอย่างเต็มที่
การจัดการตัวทำลายแบบคงที่ที่เป็นไปตามมาตรฐาน แต่จะใช้ได้ก็ต่อเมื่อไลบรารี C ของคุณ
รองรับ "__cxa_atexit"

-fno-use-cxa-get-exception-ptr
อย่าใช้รูทีนรันไทม์ "__cxa_get_exception_ptr" สิ่งนี้ทำให้เกิด
"std::uncaught_exception" ไม่ถูกต้อง แต่จำเป็นหากรูทีนรันไทม์คือ
ไม่สามารถใช้ได้

-fvisibility-inlines-hidden
สวิตช์นี้ประกาศว่าผู้ใช้ไม่พยายามเปรียบเทียบพอยน์เตอร์กับอินไลน์
ฟังก์ชันหรือวิธีการที่แอดเดรสของฟังก์ชันทั้งสองใช้ต่างกัน
วัตถุที่ใช้ร่วมกัน

ผลของสิ่งนี้คือ GCC อาจทำเครื่องหมายวิธีการแบบอินไลน์ด้วย
"__attribute__ ((การมองเห็น ("ซ่อน")))" เพื่อไม่ให้ปรากฏในการส่งออก
ตารางของ DSO และไม่ต้องการ PLT ทางอ้อมเมื่อใช้ภายใน DSO
การเปิดใช้งานตัวเลือกนี้อาจส่งผลกระทบอย่างมากต่อเวลาในการโหลดและลิงก์ของ DSO เนื่องจาก
ลดขนาดของตารางการส่งออกแบบไดนามิกอย่างมากเมื่อไลบรารีทำให้หนัก
การใช้แม่แบบ

ลักษณะการทำงานของสวิตช์นี้ไม่เหมือนกับการทำเครื่องหมายเมธอดว่าซ่อนอยู่
โดยตรง เนื่องจากไม่มีผลต่อตัวแปรสแตติกภายในฟังก์ชันหรือสาเหตุ
คอมไพเลอร์เพื่ออนุมานว่าฟังก์ชันถูกกำหนดไว้ในอ็อบเจ็กต์ที่ใช้ร่วมกันเพียงออบเจกต์เดียวเท่านั้น

คุณอาจทำเครื่องหมายวิธีการที่มีการมองเห็นอย่างชัดเจนเพื่อลบล้างผลกระทบของ
เปลี่ยนไปใช้วิธีนั้น ตัวอย่างเช่น หากคุณต้องการเปรียบเทียบพอยน์เตอร์กับ a
วิธีการแบบอินไลน์โดยเฉพาะ คุณอาจทำเครื่องหมายว่ามีการมองเห็นเริ่มต้น ทำเครื่องหมาย
คลาสที่ปิดล้อมด้วยการมองเห็นที่ชัดเจนไม่มีผล

วิธีการอินไลน์ที่สร้างอินสแตนซ์ไว้อย่างชัดเจนจะไม่ได้รับผลกระทบจากตัวเลือกนี้เป็นการเชื่อมโยง
มิฉะนั้นอาจข้ามขอบเขตห้องสมุดที่ใช้ร่วมกัน

-fvisibility-ms-compat
แฟล็กนี้พยายามใช้การตั้งค่าการเปิดเผยเพื่อสร้างโมเดลการเชื่อมโยง C++ ของ GCC
เข้ากันได้กับ Microsoft Visual Studio

แฟล็กทำการเปลี่ยนแปลงเหล่านี้กับโมเดลการเชื่อมโยงของ GCC:

1. ตั้งค่าการมองเห็นเริ่มต้นเป็น "ซ่อน" เช่น -fvisibility=ซ่อนอยู่.

2. ประเภท แต่ไม่ใช่สมาชิกจะไม่ถูกซ่อนโดยค่าเริ่มต้น

3. กฎคำจำกัดความเดียวนั้นผ่อนคลายสำหรับประเภทที่ไม่มีการมองเห็นที่ชัดเจน
ข้อกำหนดที่กำหนดไว้ในวัตถุที่ใช้ร่วมกันมากกว่าหนึ่งรายการ: ประกาศเหล่านั้น
จะได้รับอนุญาตหากได้รับอนุญาตเมื่อไม่ได้ใช้ตัวเลือกนี้

ในรหัสใหม่จะดีกว่าที่จะใช้ -fvisibility=ซ่อนอยู่ และส่งออกคลาสเหล่านั้นที่เป็น
ตั้งใจให้มองเห็นภายนอกได้ น่าเสียดายที่รหัสสามารถพึ่งพาได้
อาจเป็นเพราะพฤติกรรมของ Visual Studio โดยไม่ได้ตั้งใจ

ผลที่ตามมาของการเปลี่ยนแปลงเหล่านี้ก็คือสมาชิกข้อมูลคงที่ที่เป็นประเภทเดียวกัน
ที่มีชื่อเดียวกันแต่กำหนดไว้ในอ็อบเจกต์ที่ใช้ร่วมกันต่างกันจึงเปลี่ยน
หนึ่งไม่เปลี่ยนแปลงอีก; และตัวชี้ไปยังสมาชิกฟังก์ชันที่กำหนดไว้ใน
วัตถุที่ใช้ร่วมกันต่างกันอาจไม่เท่ากัน เมื่อให้แฟล็กนี้ มันคือ
การละเมิด ODR เพื่อกำหนดประเภทที่มีชื่อเดียวกันแตกต่างกัน

-fvtable-verify=[มาตรฐาน|เบื้องต้น|ไม่มี]
เปิด (หรือปิด หากใช้ -fvtable-verify=none) คุณลักษณะด้านความปลอดภัยที่ตรวจสอบได้ที่
รันไทม์สำหรับการโทรเสมือนทุกครั้งซึ่งตัวชี้ vtable ที่การโทรคือ
made นั้นใช้ได้สำหรับประเภทของอ็อบเจ็กต์ และไม่ได้เสียหายหรือถูกเขียนทับ
หากตรวจพบตัวชี้ vtable ที่ไม่ถูกต้องในขณะทำงาน จะมีการรายงานข้อผิดพลาดและ
การดำเนินการของโปรแกรมจะหยุดทันที

ตัวเลือกนี้ทำให้โครงสร้างข้อมูลรันไทม์ถูกสร้างขึ้นเมื่อเริ่มต้นโปรแกรม ซึ่งก็คือ
ใช้สำหรับตรวจสอบพอยน์เตอร์ vtable ตัวเลือก มาตรฐาน และ เบื้องต้น ควบคุม
ระยะเวลาในการสร้างโครงสร้างข้อมูลเหล่านี้ ในทั้งสองกรณี โครงสร้างข้อมูลคือ
สร้างขึ้นก่อนการดำเนินการถึง "หลัก" โดยใช้ -fvtable-verify=std ทำให้เกิดข้อมูล
โครงสร้างที่จะสร้างหลังจากโหลดและเตรียมใช้งานไลบรารีที่แบ่งใช้แล้ว
-fvtable-verify=preinit ทำให้พวกมันถูกสร้างขึ้นก่อนที่ไลบรารีที่แบ่งใช้จะถูก
โหลดและเริ่มต้น

หากตัวเลือกนี้ปรากฏขึ้นหลายครั้งในบรรทัดคำสั่งที่มีค่าต่างกัน
ระบุ ไม่มี มีลำดับความสำคัญสูงสุดเหนือทั้งสองอย่าง มาตรฐาน และ เบื้องต้น; เบื้องต้น ใช้เวลา
ลำดับความสำคัญมากกว่า มาตรฐาน.

-fvtv-debug
เมื่อใช้ร่วมกับ -fvtable-verify=std or -fvtable-verify=preinitสาเหตุ
เวอร์ชันดีบักของฟังก์ชันรันไทม์เพื่อให้คุณลักษณะการตรวจสอบ vtable เป็น
เรียกว่า. แฟล็กนี้ยังทำให้คอมไพเลอร์บันทึกข้อมูลเกี่ยวกับvtable
ตัวชี้ที่พบสำหรับแต่ละชั้นเรียน ข้อมูลนี้เขียนลงในไฟล์ชื่อ
vtv_set_ptr_data.log ในไดเร็กทอรีที่ตั้งชื่อโดยตัวแปรสภาพแวดล้อม VTV_LOGS_DIR
หากมีการกำหนดไว้หรือไดเร็กทอรีการทำงานปัจจุบันเป็นอย่างอื่น

หมายเหตุ: คุณลักษณะนี้ ต่อท้าย ข้อมูลไปยังไฟล์บันทึก หากคุณต้องการไฟล์บันทึกใหม่ be
แน่ใจว่าจะลบรายการที่มีอยู่

-fvtv-นับ
นี่คือแฟล็กการดีบัก เมื่อใช้ร่วมกับ -fvtable-verify=std or
-fvtable-verify=preinitทำให้คอมไพเลอร์ติดตามจำนวนรวมของ
การโทรเสมือนที่พบและจำนวนการตรวจสอบที่แทรก นอกจากนี้ยัง
นับจำนวนการเรียกใช้ฟังก์ชันไลบรารีรันไทม์ที่แทรกและ
บันทึกข้อมูลนี้สำหรับแต่ละยูนิตการคอมไพล์ คอมไพเลอร์เขียนข้อมูลนี้
ไปยังไฟล์ชื่อ vtv_count_data.log ในไดเร็กทอรีที่ตั้งชื่อโดยตัวแปรสภาพแวดล้อม
VTV_LOGS_DIR หากมีการกำหนดไว้หรือไดเร็กทอรีการทำงานปัจจุบันเป็นอย่างอื่น นอกจากนี้ยัง
นับขนาดของชุดตัวชี้ vtable สำหรับแต่ละคลาส และเขียนข้อมูลนี้
ไปยัง vtv_class_set_sizes.log ในไดเรกทอรีเดียวกัน

หมายเหตุ: คุณลักษณะนี้ ต่อท้าย ข้อมูลไปยังไฟล์บันทึก ในการรับไฟล์บันทึกใหม่ อย่าลืม
ลบรายการที่มีอยู่

-fno-อ่อนแอ
อย่าใช้การสนับสนุนสัญลักษณ์อ่อนแอ แม้ว่าจะมีให้โดยลิงเกอร์ก็ตาม โดยค่าเริ่มต้น G++
ใช้สัญลักษณ์ที่อ่อนแอหากมี ตัวเลือกนี้มีไว้เพื่อการทดสอบเท่านั้นและ
ผู้ใช้ปลายทางไม่ควรใช้; มันส่งผลให้เกิดรหัสที่ด้อยกว่าและไม่มีประโยชน์
ตัวเลือกนี้อาจถูกลบออกใน G++ รุ่นต่อๆ ไป

-nostdinc++
อย่าค้นหาไฟล์ส่วนหัวในไดเร็กทอรีมาตรฐานเฉพาะสำหรับ C ++ แต่ทำ
ยังคงค้นหาไดเร็กทอรีมาตรฐานอื่นๆ (ตัวเลือกนี้ใช้เมื่อสร้าง
ไลบรารี C++)

นอกจากนี้ ตัวเลือกการเพิ่มประสิทธิภาพ คำเตือน และการสร้างโค้ดเหล่านี้มีความหมายเท่านั้น
สำหรับโปรแกรม C++:

-วาบิ (C, Objective-C, C++ และ Objective-C++ เท่านั้น)
เมื่อมีความชัดเจน -fabi-เวอร์ชั่น=n ใช้ตัวเลือกทำให้ G++ เตือนเมื่อสร้าง
รหัสที่อาจเข้ากันไม่ได้กับ C++ ABI ที่เป็นกลางของผู้ขาย ตั้งแต่ G++ ตอนนี้
ค่าเริ่มต้นเป็น -fabi-version=0, -วาบิ ไม่มีผลเว้นแต่ว่า ABI เวอร์ชันเก่าคือ
เลือกแล้ว (กับ -fabi-เวอร์ชั่น=n) หรือเวอร์ชันที่เข้ากันได้ที่เก่ากว่าถูกเลือก (ด้วย
-วาบิ=n or -fabi-compat-version=n).

แม้ว่าจะมีความพยายามที่จะเตือนเกี่ยวกับกรณีดังกล่าวทั้งหมด แต่ก็อาจมีบ้าง
กรณีที่ไม่ได้รับการเตือน แม้ว่า G++ กำลังสร้างรหัสที่เข้ากันไม่ได้
อาจมีบางกรณีที่คำเตือนถูกส่งออกไปแม้ว่ารหัสที่เป็น
สร้างขึ้นเข้ากันได้

คุณควรเขียนโค้ดใหม่เพื่อหลีกเลี่ยงคำเตือนเหล่านี้หากคุณกังวลเกี่ยวกับ
ความจริงที่ว่ารหัสที่สร้างโดย G++ อาจไม่เข้ากันได้กับไบนารีกับรหัสที่สร้างโดย
คอมไพเลอร์อื่น ๆ

-วาบิ สามารถใช้กับหมายเลขเวอร์ชันที่ชัดเจนเพื่อเตือนเกี่ยวกับความเข้ากันได้
โดยเฉพาะอย่างยิ่ง -fabi-รุ่น ระดับ เช่น -วาบิ=2 เพื่อเตือนเกี่ยวกับการเปลี่ยนแปลงที่สัมพันธ์กับ
-fabi-version=2. การระบุหมายเลขเวอร์ชันยังตั้งค่า -fabi-compat-version=n.

ความไม่ลงรอยกันที่รู้จักกันใน -fabi-version=2 (ซึ่งเป็นค่าเริ่มต้นจาก GCC 3.4 ถึง
4.9) รวมถึง:

* เทมเพลตที่มีพารามิเตอร์เทมเพลตที่ไม่ใช่ประเภทอ้างอิงถูกจัดการ
ไม่ถูกต้อง:

ภายนอกภายใน N;
แม่แบบ โครงสร้าง S {};
โมฆะ n (S ) {2}

สิ่งนี้ได้รับการแก้ไขใน -fabi-version=3.

* ประเภทเวกเตอร์ SIMD ที่ประกาศโดยใช้ "__attribute ((vector_size))" ถูกจัดการใน a
วิธีที่ไม่ได้มาตรฐานที่ไม่อนุญาตให้มีการทำงานมากเกินไปโดยใช้เวกเตอร์
ที่มีขนาดแตกต่างกัน

ความโกลาหลเปลี่ยนไปใน -fabi-version=4.

* "__attribute ((const))" และ "noreturn" ถูกจัดการเป็นตัวระบุประเภทและ
"decltype" ของการประกาศธรรมดาถูกพับทิ้ง

ปัญหาการพังทลายเหล่านี้ได้รับการแก้ไขใน -fabi-version=5.

* ตัวแจงนับขอบเขตที่ส่งผ่านเป็นอาร์กิวเมนต์ไปยังฟังก์ชันตัวแปรได้รับการส่งเสริมเช่น
ตัวแจงนับที่ไม่มีขอบเขต ทำให้ "va_arg" บ่น สำหรับเป้าหมายส่วนใหญ่สิ่งนี้ไม่ได้
มีผลกับพารามิเตอร์ที่ส่งผ่าน ABI จริง ๆ เนื่องจากไม่มีวิธีส่งผ่านอาร์กิวเมนต์
เล็กกว่า "int"

นอกจากนี้ ABI ยังได้เปลี่ยนการแตกไฟล์ของชุดอาร์กิวเมนต์เทมเพลต "const_cast",
"static_cast" การเพิ่ม/ลดส่วนนำหน้า และฟังก์ชันขอบเขตคลาสที่ใช้เป็น a
อาร์กิวเมนต์เทมเพลต

ปัญหาเหล่านี้ได้รับการแก้ไขใน -fabi-version=6.

* Lambdas ในขอบเขตอาร์กิวเมนต์เริ่มต้นถูกจัดการอย่างไม่ถูกต้อง และ ABI เปลี่ยนไป
การพังของ "nullptr_t"

ปัญหาเหล่านี้ได้รับการแก้ไขใน -fabi-version=7.

* เมื่อจัดการประเภทฟังก์ชันด้วย function-cv-qualifiers, un-qualified
ประเภทฟังก์ชันได้รับการปฏิบัติอย่างไม่ถูกต้องในฐานะผู้สมัครทดแทน

สิ่งนี้ได้รับการแก้ไขใน -fabi-version=8.

นอกจากนี้ยังเตือนเกี่ยวกับการเปลี่ยนแปลงที่เกี่ยวข้องกับ psABI psABI ที่รู้จักเปลี่ยนแปลง ณ จุดนี้
รวมถึง:

* สำหรับ SysV/x86-64 สหภาพแรงงานที่มีสมาชิก "long double" จะถูกส่งต่อในหน่วยความจำเป็น
ระบุไว้ใน psABI ตัวอย่างเช่น:

ยูเนี่ยน ยู {
ยาวสองเท่า ld;
int ฉัน;
};

"ยูเนี่ยนยู" อยู่ในความทรงจำเสมอ

-วาบิ-แท็ก (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อใช้ประเภทที่มีแท็ก ABI ในบริบทที่ไม่มีแท็ก ABI นั้น
ดู C + + คุณสมบัติ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับแท็ก ABI

-Wctor-dtor-ความเป็นส่วนตัว (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อคลาสดูเหมือนใช้ไม่ได้เพราะตัวสร้างหรือตัวทำลายทั้งหมดในนั้น
คลาสเป็นแบบส่วนตัวและไม่มีทั้งเพื่อนหรือสมาชิกแบบสแตติกสาธารณะ
เตือนด้วยหากไม่มีวิธีการที่ไม่ใช่แบบส่วนตัวและมีสมาชิกส่วนตัวอย่างน้อยหนึ่งราย
ฟังก์ชันที่ไม่ใช่ตัวสร้างหรือตัวทำลาย

-Wdelete-non-virtual-dtor (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อ "ลบ" ถูกใช้เพื่อทำลายอินสแตนซ์ของคลาสที่มี virtual
ฟังก์ชั่นและตัวทำลายที่ไม่ใช่เสมือน การลบอินสแตนซ์ของตัวรับที่รับมานั้นไม่ปลอดภัย
คลาสผ่านตัวชี้ไปยังคลาสฐานถ้าคลาสฐานไม่มี virtual
ผู้ทำลาย คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wliteral-ต่อท้าย (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อสตริงหรือตัวอักษรตามตัวอักษร ud-suffix ซึ่งไม่
เริ่มต้นด้วยขีดล่าง ในฐานะส่วนขยายที่สอดคล้อง GCC ถือว่าส่วนต่อท้ายเช่น
แยกโทเค็นการประมวลผลล่วงหน้าเพื่อรักษาความเข้ากันได้ย้อนหลังกับโค้ด
ที่ใช้การจัดรูปแบบมาโครจาก " ". ตัวอย่างเช่น:

#define __STDC_FORMAT_MACROS
#รวม
#รวม

int หลัก () {
int64_t i64 = 123;
printf("Int64 ของฉัน: %"PRId64"\n", i64);
}

ในกรณีนี้ "PRId64" จะถือเป็นโทเค็นการประมวลผลล่วงหน้าที่แยกต่างหาก

คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้น

-Wnarrowing (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อมีการจำกัดการแปลงที่ห้ามโดย C++11 ภายใน { }, เช่น

int i = { 2.2 }; // ข้อผิดพลาด: การจำกัดจาก double เป็น int

ธงนี้รวมอยู่ใน -ผนัง และ -Wc++11-compat.

กับ -std=c++11, -Wno-แคบ ระงับการวินิจฉัยที่กำหนดโดยมาตรฐาน
โปรดทราบว่าสิ่งนี้ไม่ส่งผลต่อความหมายของโค้ดที่มีรูปแบบที่ดี การแปลงให้แคบลง
ยังคงถือว่าผิดรูปแบบในบริบทของ SFINAE

-ไม่ยกเว้น (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อไม่มีนิพจน์ประเมินเป็นเท็จเนื่องจากการเรียกใช้ฟังก์ชัน
ที่ไม่มีข้อกำหนดข้อยกเว้นที่ไม่มีการโยน (เช่น "throw()" หรือ
"noexcept") แต่เป็นที่รู้จักโดยคอมไพเลอร์ว่าจะไม่ส่งข้อยกเว้น

-Wnon-เสมือน-dtor (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อคลาสมีฟังก์ชันเสมือนและตัวทำลายล้างที่ไม่ใช่เสมือนที่เข้าถึงได้
ตัวเองหรือในคลาสฐาน polymorphic ที่เข้าถึงได้ ซึ่งในกรณีนี้ เป็นไปได้ แต่
ไม่ปลอดภัยที่จะลบอินสแตนซ์ของคลาสที่ได้รับผ่านตัวชี้ไปยังคลาสเอง
หรือชั้นฐาน คำเตือนนี้จะเปิดใช้งานโดยอัตโนมัติ if -Weffc++ ระบุไว้

-Wreorder (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อลำดับของตัวเริ่มต้นสมาชิกที่ให้ในรหัสไม่ตรงกับลำดับ
ซึ่งพวกเขาจะต้องถูกประหารชีวิต ตัวอย่างเช่น:

โครงสร้าง A {
int ฉัน;
int เจ;
A(): j (0), ผม (1) { }
};

คอมไพเลอร์จัดเรียงตัวเริ่มต้นสมาชิกใหม่สำหรับ "i" และ "j" เพื่อให้ตรงกับ
คำสั่งประกาศของสมาชิกส่งคำเตือนให้มีผล คำเตือนนี้คือ
เปิดใช้งานโดย -ผนัง.

-fext-numeric-literals (C++ และ Objective-C++ เท่านั้น)
ยอมรับส่วนต่อท้ายตัวเลขตามตัวอักษรจินตภาพ จุดคงที่ หรือที่เครื่องกำหนดเป็น GNU
ส่วนขยาย เมื่อปิดตัวเลือกนี้ ส่วนต่อท้ายเหล่านี้จะถือว่าเป็นผู้ใช้ C++11-
คำต่อท้ายตัวเลขตามตัวอักษรที่กำหนดไว้ นี่เป็นค่าเริ่มต้นสำหรับภาษาถิ่นก่อน C++11 ทั้งหมด
และภาษาถิ่นของ GNU ทั้งหมด: -std=c++98, -std=gnu++98, -std=gnu++11, -std=gnu++14. นี้
ตัวเลือกถูกปิดโดยค่าเริ่มต้นสำหรับ ISO C++11 เป็นต้นไป (-std=c++11, ...)

ดังต่อไปนี้ -ว... ตัวเลือกจะไม่ได้รับผลกระทบจาก -ผนัง.

-Weffc++ (C++ และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับการละเมิดหลักเกณฑ์รูปแบบต่อไปนี้จาก Scott Meyers มีประสิทธิภาพ
C + + หนังสือชุด:

* กำหนดตัวสร้างการคัดลอกและตัวดำเนินการมอบหมายสำหรับชั้นเรียนด้วยไดนามิก-
หน่วยความจำที่จัดสรร

* ต้องการการเริ่มต้นเพื่อมอบหมายในตัวสร้าง

* ให้ "operator=" คืนค่าการอ้างอิงถึง *this

* อย่าพยายามส่งคืนข้อมูลอ้างอิงเมื่อคุณต้องส่งคืนวัตถุ

* แยกแยะระหว่างคำนำหน้าและรูปแบบหลังการแก้ไขของตัวดำเนินการเพิ่มและลดลง

* ห้ามโอเวอร์โหลด "&&", "||" หรือ ","

ตัวเลือกนี้ยังเปิดใช้งาน -Wnon-เสมือน-dtorซึ่งเป็นหนึ่งใน C++ . ที่มีประสิทธิภาพ
คำแนะนำ อย่างไรก็ตาม การตรวจสอบขยายออกไปเพื่อเตือนเกี่ยวกับการขาด virtual
destructor ในคลาสฐาน non-polymorphic ที่สามารถเข้าถึงได้เช่นกัน

เมื่อเลือกตัวเลือกนี้ โปรดทราบว่าส่วนหัวของไลบรารีมาตรฐานไม่ปฏิบัติตามทั้งหมด
ของแนวทางเหล่านี้ ใช้ grep -v เพื่อกรองคำเตือนเหล่านั้น

-Wstrict-null-sentinel (C++ และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับการใช้ "NULL" ที่ไม่มีการแคสต์เป็นยาม เมื่อคอมไพล์ด้วย GCC . เท่านั้น
นี่คือหน่วยรักษาการณ์ที่ถูกต้อง เนื่องจาก "NULL" ถูกกำหนดเป็น "__null" แม้ว่ามันจะเป็นโมฆะ
ค่าคงที่ของตัวชี้แทนที่จะเป็นตัวชี้ null รับประกันว่าจะมีขนาดเท่ากัน
เป็นตัวชี้ แต่การใช้งานนี้ไม่สามารถเคลื่อนย้ายข้ามคอมไพเลอร์ต่างๆ ได้

-Wno-ไม่ใช่แม่แบบ-เพื่อน (C++ และ Objective-C++ เท่านั้น)
ปิดใช้งานคำเตือนเมื่อมีการประกาศฟังก์ชันของเพื่อนที่ไม่ใช่เทมเพลตภายในเทมเพลต
ตั้งแต่การถือกำเนิดของข้อกำหนดเท็มเพลตที่ชัดเจนสนับสนุนใน G++ ถ้าชื่อของ
เพื่อนคือ ID ที่ไม่มีเงื่อนไข (เช่น เพื่อน ฟู(int)) ข้อกำหนดภาษา C++
เรียกร้องให้เพื่อนประกาศหรือกำหนดฟังก์ชันธรรมดาที่ไม่ใช่เทมเพลต (ส่วน
14.5.3) ก่อนที่ G++ จะใช้ข้อกำหนดที่ชัดเจน รหัสที่ไม่มีเงื่อนไขอาจเป็น
ตีความว่าเป็นความเชี่ยวชาญเฉพาะด้านของฟังก์ชันเทมเพลต เพราะสิ่งนี้
พฤติกรรมที่ไม่เป็นไปตามข้อกำหนดจะไม่เป็นพฤติกรรมเริ่มต้นสำหรับ G++ อีกต่อไป
-ไม่ใช่แม่แบบ-เพื่อน อนุญาตให้คอมไพเลอร์ตรวจสอบรหัสที่มีอยู่เพื่อหาปัญหาที่อาจเกิดขึ้น
จุดและเปิดอยู่โดยค่าเริ่มต้น พฤติกรรมคอมไพเลอร์ใหม่นี้สามารถปิดได้ด้วย
-Wno-ไม่ใช่แม่แบบ-เพื่อนซึ่งเก็บรหัสคอมไพเลอร์ Conformant แต่ปิดการใช้งาน
คำเตือนที่เป็นประโยชน์

-Wold-style-cast (C++ และ Objective-C++ เท่านั้น)
เตือนหากมีการใช้รูปแบบเก่า (สไตล์ C) ที่ส่งไปยังประเภทที่ไม่ใช่โมฆะภายในโปรแกรม C++
แคสต์รูปแบบใหม่ ("dynamic_cast", "static_cast", "reinterpret_cast" และ
"const_cast") มีโอกาสเกิดผลกระทบที่ไม่ได้ตั้งใจน้อยกว่าและค้นหาได้ง่ายกว่ามาก

-Woverloaded-เสมือน (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อการประกาศฟังก์ชันซ่อนฟังก์ชันเสมือนจากคลาสพื้นฐาน สำหรับ
ตัวอย่าง ใน:

โครงสร้าง A {
โมฆะเสมือน f();
};

โครงสร้าง B: สาธารณะ A {
เป็นโมฆะ f(int);
};

เวอร์ชันคลาส "A" ของ "f" ถูกซ่อนอยู่ใน "B" และโค้ดเช่น:

ข*ข;
b->f();

ล้มเหลวในการรวบรวม

-Wno-pmf-การแปลง (C++ และ Objective-C++ เท่านั้น)
ปิดใช้งานการวินิจฉัยสำหรับการแปลงตัวชี้ที่ถูกผูกไว้เป็นฟังก์ชันสมาชิกเป็นแบบธรรมดา
ตัวชี้

-Wsign-โปรโมชั่น (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อความละเอียดเกินเลือกโปรโมชั่นจากประเภทที่ไม่ได้ลงนามหรือแจกแจงถึง
ประเภทที่ลงนาม มากกว่าการแปลงเป็นประเภทที่ไม่ได้ลงนามซึ่งมีขนาดเท่ากัน ก่อนหน้า
เวอร์ชันของ G++ พยายามรักษา unsignedness แต่มาตรฐานบังคับปัจจุบัน
พฤติกรรม

Options การควบคุม 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-รันไทม์ เป็นตัวเลือกที่มีไว้สำหรับ Objective-C และ Objective-C++ . เท่านั้น
โปรแกรม; คุณสามารถใช้ตัวเลือกอื่นกับภาษาใดก็ได้ที่ GCC รองรับ

โปรดทราบว่าเนื่องจาก Objective-C เป็นส่วนขยายของภาษา C การรวบรวม Objective-C
อาจใช้ตัวเลือกเฉพาะสำหรับส่วนหน้า C (เช่น -แบบดั้งเดิม) ในทำนองเดียวกัน
การรวบรวม Objective-C++ อาจใช้ตัวเลือกเฉพาะ C++ (เช่น -วาบิ).

นี่คือรายการตัวเลือกที่ เท่านั้น สำหรับการคอมไพล์ Objective-C และ Objective-C++
โปรแกรม:

-fconstant-string-class=ชื่อคลาส
ใช้ ชื่อคลาส เป็นชื่อของคลาสที่จะสร้างอินสแตนซ์สำหรับแต่ละสตริงตามตัวอักษร
ระบุด้วยไวยากรณ์ "@"..."" ชื่อคลาสเริ่มต้นคือ "NXConstantString" if
กำลังใช้รันไทม์ของ GNU และ "NSConstantString" หากรันไทม์ NeXT เป็น
ใช้แล้ว (ดูด้านล่าง) NS -fconstant-cfstrings ตัวเลือก ถ้ามีอยู่ด้วย จะแทนที่
-fconstant-string-class การตั้งค่าและทำให้ตัวอักษร "@"..."" ถูกจัดวางเป็นค่าคงที่
สตริง CoreFoundation

-fgnu-รันไทม์
สร้างโค้ดอ็อบเจ็กต์ที่เข้ากันได้กับรันไทม์ GNU Objective-C มาตรฐาน นี่คือ
ค่าเริ่มต้นสำหรับระบบส่วนใหญ่

-fnext-รันไทม์
สร้างเอาต์พุตที่เข้ากันได้กับรันไทม์ของ NeXT นี่เป็นค่าเริ่มต้นสำหรับ NeXT-based
รวมถึงดาร์วินและ Mac OS X มาโคร "__NEXT_RUNTIME__" ถูกกำหนดไว้ล่วงหน้า if
(และเฉพาะในกรณีที่) ใช้ตัวเลือกนี้

-fno-nil-เครื่องรับ
สมมติว่าข้อความ Objective-C ทั้งหมดถูกส่ง ("[receiver message:arg]") ในนี้
หน่วยการแปลรับรองว่าผู้รับไม่ใช่ "ศูนย์" นี้ช่วยให้มากขึ้น
จุดเริ่มต้นที่มีประสิทธิภาพในการรันไทม์ที่จะใช้ ตัวเลือกนี้ใช้ได้เฉพาะใน
ร่วมกับรันไทม์ NeXT และ ABI เวอร์ชัน 0 หรือ 1

-fobjc-abi-รุ่น=n
ใช้เวอร์ชัน n ของ Objective-C ABI สำหรับรันไทม์ที่เลือก ตัวเลือกนี้คือ
ปัจจุบันรองรับเฉพาะรันไทม์ NeXT เท่านั้น ในกรณีนั้น เวอร์ชัน 0 คือ
ABI ดั้งเดิม (32 บิต) โดยไม่รองรับคุณสมบัติและ Objective-C 2.0 . อื่นๆ
เพิ่มเติม เวอร์ชัน 1 เป็น ABI ดั้งเดิม (32 บิต) พร้อมรองรับคุณสมบัติและ
การเพิ่ม Objective-C 2.0 อื่นๆ เวอร์ชัน 2 คือ ABI ที่ทันสมัย ​​(64 บิต) ถ้าไม่มีอะไร
ที่ระบุ ค่าเริ่มต้นคือเวอร์ชัน 0 บนเครื่องเป้าหมาย 32 บิต และเวอร์ชัน 2 บน 64-บิต
เครื่องเป้าหมาย

-fobjc-call-cxx-cdtors
สำหรับแต่ละคลาส Objective-C ให้ตรวจสอบว่าตัวแปรอินสแตนซ์ใดเป็นอ็อบเจกต์ C++
ด้วยคอนสตรัคเตอร์เริ่มต้นที่ไม่สำคัญ ถ้าเป็นเช่นนั้น สังเคราะห์พิเศษ "- (id)
วิธีการอินสแตนซ์ .cxx_construct" ซึ่งรันตัวสร้างเริ่มต้นที่ไม่สำคัญบนทุก
ตัวแปรอินสแตนซ์ดังกล่าว ตามลำดับ แล้วส่งกลับ "ตัวเอง" ในทำนองเดียวกัน ตรวจสอบว่ามีหรือไม่
ตัวแปรอินสแตนซ์คืออ็อบเจ็กต์ C++ ที่มีตัวทำลายล้างที่ไม่ซับซ้อน และถ้าเป็นเช่นนั้น ให้สังเคราะห์
วิธีการพิเศษ "- (เป็นโมฆะ) .cxx_destruct" ซึ่งรันตัวทำลายเริ่มต้นดังกล่าวทั้งหมดใน
ลำดับย้อนกลับ

วิธีการ "- (id) .cxx_construct" และ "- (เป็นโมฆะ) .cxx_destruct" จึงสร้างขึ้นเท่านั้น
ดำเนินการกับตัวแปรอินสแตนซ์ที่ประกาศในคลาส Objective-C ปัจจุบัน ไม่ใช่เหล่านั้น
สืบทอดมาจากซูเปอร์คลาส เป็นความรับผิดชอบของรันไทม์ Objective-C ถึง
เรียกใช้เมธอดดังกล่าวทั้งหมดในลำดับชั้นการสืบทอดของอ็อบเจ็กต์ เครื่องหมาย "- (id)
เมธอด .cxx_construct" ถูกเรียกใช้โดยรันไทม์ทันทีหลังจากอ็อบเจกต์ใหม่
มีการจัดสรรอินสแตนซ์ เมธอด "- (เป็นโมฆะ) .cxx_destruct" จะถูกเรียกใช้ทันที
ก่อนที่รันไทม์จะจัดสรรคืนอินสแตนซ์ของอ็อบเจ็กต์

ในขณะที่เขียนนี้ เฉพาะรันไทม์ NeXT บน Mac OS X 10.4 และใหม่กว่าเท่านั้นที่รองรับ
เรียกใช้เมธอด "- (id) .cxx_construct" และ "- (เป็นโมฆะ) .cxx_destruct"

-fobjc-direct-dispatch
อนุญาตให้ข้ามไปยังผู้ส่งข้อความอย่างรวดเร็ว ในดาร์วินสิ่งนี้ทำได้ผ่าน
หน้าคอม

-fobjc-ข้อยกเว้น
เปิดใช้งานการสนับสนุนวากยสัมพันธ์สำหรับการจัดการข้อยกเว้นที่มีโครงสร้างใน Objective-C คล้ายกับ
สิ่งที่นำเสนอโดย C ++ และ Java ตัวเลือกนี้จำเป็นต้องใช้วัตถุประสงค์-C
คำหลัก @try, @throw, @catch, @finally และ @synchronized ตัวเลือกนี้ใช้ได้
ที่มีทั้งรันไทม์ GNU และรันไทม์ NeXT (แต่ไม่สามารถใช้ร่วมกับ
รันไทม์ NeXT บน Mac OS X 10.2 และรุ่นก่อนหน้า)

-fobjc-gc
เปิดใช้งานการรวบรวมขยะ (GC) ในโปรแกรม Objective-C และ Objective-C++ ตัวเลือกนี้
ใช้ได้เฉพาะกับรันไทม์ NeXT เท่านั้น รันไทม์ของ GNU มีขยะที่แตกต่างกัน
การใช้งานคอลเลกชันที่ไม่ต้องการแฟล็กคอมไพเลอร์พิเศษ

-fobjc-nilcheck
สำหรับรันไทม์ NeXT ที่มี ABI เวอร์ชัน 2 ให้ตรวจหาตัวรับ nil ในเมธอด
การร้องขอก่อนทำการเรียกเมธอดจริง นี่เป็นค่าเริ่มต้นและสามารถเป็นได้
ปิดการใช้งาน -fno-objc-nilcheck. ไม่มีการตรวจสอบวิธีการเรียนและการโทรพิเศษ
สำหรับ nil ในลักษณะนี้ ไม่ว่าแฟล็กนี้จะตั้งไว้ที่ใด ปัจจุบันธงนี้ไม่
ไม่มีอะไรเกิดขึ้นเมื่อรันไทม์ GNU หรือ ABI รันไทม์ NeXT รุ่นเก่ากว่าถูกใช้

-fobjc-std=objc1
สอดคล้องกับไวยากรณ์ภาษาของ Objective-C 1.0 ซึ่งเป็นภาษาที่ GCC 4.0 รู้จัก
สิ่งนี้มีผลกับการเพิ่ม Objective-C ให้กับภาษา C/C++ เท่านั้น ไม่ส่งผลกระทบ
เป็นไปตามมาตรฐาน C/C++ ซึ่งควบคุมโดยภาษา C/C++ ที่แยกจากกัน
แฟล็กตัวเลือก เมื่อตัวเลือกนี้ใช้กับ Objective-C หรือ Objective-C++
คอมไพเลอร์ ไวยากรณ์ Objective-C ใดๆ ที่ GCC 4.0 ไม่รู้จักจะถูกปฏิเสธ นี้
มีประโยชน์หากคุณต้องการให้แน่ใจว่าโค้ด Objective-C ของคุณสามารถคอมไพล์ได้ด้วย
GCC เวอร์ชันเก่า

-freplace-objc-คลาส
ปล่อยเครื่องหมายพิเศษสอน ld(1) ไม่เชื่อมโยงแบบคงที่ในวัตถุผลลัพธ์
ไฟล์และอนุญาต dyld(1) เพื่อโหลดในเวลาทำงานแทน ใช้ใน
ร่วมกับโหมดการดีบัก Fix-and-Continue โดยที่ไฟล์อ็อบเจ็กต์อยู่ใน
คำถามอาจถูกคอมไพล์ใหม่และโหลดซ้ำแบบไดนามิกในระหว่างโปรแกรม
โดยไม่ต้องรีสตาร์ทโปรแกรมเอง ปัจจุบัน Fix-and-
ฟังก์ชันการทำงานต่อจะใช้ได้กับรันไทม์ NeXT บน Mac . เท่านั้น
OS X 10.3 และใหม่กว่า

-fzero-ลิงค์
เมื่อทำการคอมไพล์สำหรับรันไทม์ NeXT คอมไพเลอร์มักจะแทนที่การเรียกไปยัง
"objc_getClass("...")" (เมื่อทราบชื่อของคลาส ณ เวลารวบรวม) ด้วย
การอ้างอิงคลาสสแตติกที่เริ่มต้นในเวลาโหลด ซึ่งช่วยปรับปรุงรันไทม์
ประสิทธิภาพ. การระบุ -fzero-ลิงค์ แฟล็กระงับพฤติกรรมและสาเหตุนี้
เรียก "objc_getClass("...")" เพื่อคงไว้ สิ่งนี้มีประโยชน์ใน Zero-Link
โหมดดีบัก เนื่องจากอนุญาตให้แก้ไขการใช้งานคลาสแต่ละคลาสได้
ระหว่างดำเนินการโปรแกรม ปัจจุบันรันไทม์ของ GNU จะเก็บการเรียกไปยัง . เสมอ
"objc_get_class("...")" โดยไม่คำนึงถึงตัวเลือกบรรทัดคำสั่ง

-fno-local-ivars
โดยค่าเริ่มต้น ตัวแปรอินสแตนซ์ใน Objective-C สามารถเข้าถึงได้ราวกับว่าเป็นตัวแปรท้องถิ่น
ตัวแปรจากภายในเมธอดของคลาสที่ประกาศไว้ ซึ่งอาจนำไปสู่
การแรเงาระหว่างตัวแปรอินสแตนซ์และตัวแปรอื่น ๆ ที่ประกาศในเครื่อง
ภายในวิธีการเรียนหรือทั่วโลกที่มีชื่อเดียวกัน การระบุ -fno-local-ivars
แฟล็กปิดใช้งานพฤติกรรมนี้จึงหลีกเลี่ยงปัญหาการแชโดว์ตัวแปร

-fivar-การมองเห็น=[สาธารณะ|การป้องกัน|ส่วนตัว|แพ็คเกจ]
ตั้งค่าการมองเห็นตัวแปรอินสแตนซ์เริ่มต้นเป็นตัวเลือกที่ระบุเพื่อให้อินสแตนซ์
ตัวแปรที่ประกาศนอกขอบเขตของคำสั่งตัวแก้ไขการเข้าถึงเริ่มต้นเป็น
การมองเห็นที่ระบุ

-gen-decls
การประกาศอินเทอร์เฟซการถ่ายโอนข้อมูลสำหรับคลาสทั้งหมดที่เห็นในไฟล์ต้นทางไปยังไฟล์ชื่อ
sourcename.decl.

-Wassign-สกัดกั้น (Objective-C และ Objective-C++ เท่านั้น)
เตือนเมื่อใดก็ตามที่งาน Objective-C ถูกดักจับโดยตัวรวบรวมขยะ

-Wno-โปรโตคอล (Objective-C และ Objective-C++ เท่านั้น)
หากมีการประกาศคลาสเพื่อใช้โปรโตคอล จะมีการออกคำเตือนสำหรับทุกเมธอด
ในโปรโตคอลที่ไม่ได้ใช้งานโดยคลาส พฤติกรรมเริ่มต้นคือto
ออกคำเตือนสำหรับทุกวิธีที่ไม่ได้ใช้งานอย่างชัดเจนในคลาส แม้ว่าa
การนำวิธีการไปใช้นั้นสืบทอดมาจากซูเปอร์คลาส หากคุณใช้ -Wno-โปรโตคอล
อ็อพชัน ดังนั้นเมธอดที่สืบทอดมาจากซูเปอร์คลาสจะถือว่าถูกนำไปใช้งาน
และไม่มีการเตือนสำหรับพวกเขา

-Wselector (Objective-C และ Objective-C++ เท่านั้น)
เตือนหากพบวิธีการหลายประเภทที่แตกต่างกันสำหรับตัวเลือกเดียวกันในระหว่าง
การรวบรวม การตรวจสอบจะดำเนินการในรายการวิธีการในขั้นตอนสุดท้ายของ
การรวบรวม นอกจากนี้ จะมีการตรวจสอบสำหรับตัวเลือกแต่ละตัวที่ปรากฏใน a
นิพจน์ "@selector(...)" และวิธีการที่สอดคล้องกันสำหรับตัวเลือกนั้น
พบในระหว่างการรวบรวม เนื่องจากการตรวจสอบเหล่านี้จะสแกนตารางวิธีการเฉพาะที่ส่วนท้าย
ของการรวบรวม คำเตือนเหล่านี้จะไม่เกิดขึ้นหากขั้นตอนสุดท้ายของการรวบรวมคือ
ไม่ถึง เช่น เนื่องจากพบข้อผิดพลาดระหว่างการรวบรวม หรือเนื่องจาก
-fsyntax-only กำลังใช้ตัวเลือก

-Wstrict-ตัวเลือกการแข่งขัน (Objective-C และ Objective-C++ เท่านั้น)
เตือนหากพบวิธีการหลายวิธีที่มีอาร์กิวเมนต์และ/หรือประเภทการส่งคืนที่แตกต่างกันสำหรับa
ให้ตัวเลือกเมื่อพยายามส่งข้อความโดยใช้ตัวเลือกนี้ไปยังผู้รับของ
พิมพ์ "id" หรือ "Class" เมื่อแฟล็กนี้ปิดอยู่ (ซึ่งเป็นพฤติกรรมเริ่มต้น) ค่า
คอมไพเลอร์ละเว้นคำเตือนดังกล่าวหากพบความแตกต่างใด ๆ ที่ จำกัด เฉพาะประเภทที่แชร์
ขนาดและการจัดตำแหน่งเท่ากัน

-Wundeclared-ตัวเลือก (Objective-C และ Objective-C++ เท่านั้น)
เตือนหากพบนิพจน์ "@selector(...)" ที่อ้างถึงตัวเลือกที่ไม่ได้ประกาศ NS
ตัวเลือกจะถือว่าไม่ประกาศหากไม่มีการประกาศวิธีการที่มีชื่อนั้นมาก่อน
นิพจน์ "@selector(...)" อย่างชัดแจ้งใน @interface หรือ @protocol
การประกาศหรือโดยปริยายในหัวข้อ @implementation ตัวเลือกนี้ทำงานเสมอ
จะตรวจสอบทันทีที่พบนิพจน์ "@selector(...)" ในขณะที่ -Wselector เท่านั้น
ดำเนินการตรวจสอบในขั้นตอนสุดท้ายของการรวบรวม นอกจากนี้ยังบังคับใช้การเข้ารหัส
แบบแผนซึ่งจะต้องประกาศวิธีการและตัวเลือกก่อนใช้งาน

-print-objc-runtime-info
สร้างส่วนหัว C ที่อธิบายโครงสร้างที่ใหญ่ที่สุดที่ส่งผ่านตามค่า หากมี

Options ไปยัง Control การวินิจฉัย Messages การจัดรูปแบบ
ตามเนื้อผ้า ข้อความวินิจฉัยได้รับการจัดรูปแบบโดยไม่คำนึงถึงอุปกรณ์เอาท์พุต
ด้าน (เช่น ความกว้าง ...) คุณสามารถใช้ตัวเลือกที่อธิบายไว้ด้านล่างเพื่อควบคุม
อัลกอริธึมการจัดรูปแบบสำหรับข้อความวินิจฉัย เช่น จำนวนอักขระต่อบรรทัด ความถี่
ข้อมูลตำแหน่งต้นทางควรรายงาน โปรดทราบว่าส่วนหน้าของบางภาษาอาจ
ไม่ให้เกียรติตัวเลือกเหล่านี้

-fmessage-length=n
ลองจัดรูปแบบข้อความแสดงข้อผิดพลาดเพื่อให้พอดีกับบรรทัดของ about n ตัวอักษร ถ้า n is
ศูนย์ ไม่มีการพันบรรทัด แต่ละข้อความแสดงข้อผิดพลาดจะปรากฏในบรรทัดเดียว
นี่เป็นค่าเริ่มต้นสำหรับส่วนหน้าทั้งหมด

-fdiagnostics-show-location=ครั้งเดียว
มีความหมายเฉพาะในโหมดตัดบรรทัด สั่งให้ผู้รายงานข้อความวินิจฉัยไปที่
ส่งข้อมูลตำแหน่งต้นทาง ครั้งหนึ่ง; นั่นคือในกรณีที่ข้อความยาวเกินไปที่จะพอดี
ในบรรทัดเดียวและต้องห่อ ตำแหน่งต้นทางจะไม่ถูกปล่อยออก
(เป็นคำนำหน้า) ซ้ำแล้วซ้ำเล่าในบรรทัดต่อๆ ไป นี้เป็น
พฤติกรรมเริ่มต้น

-fdiagnostics-show-location=ever-line
มีความหมายเฉพาะในโหมดตัดบรรทัด สั่งให้ผู้รายงานข้อความวินิจฉัยไปที่
ปล่อยข้อมูลตำแหน่งต้นทางเดียวกัน (เป็นคำนำหน้า) สำหรับเส้นทางกายภาพที่ส่งผล
จากกระบวนการทำลายข้อความที่ยาวเกินกว่าจะใส่เป็นบรรทัดเดียวได้

-fdiagnostics-สี[=เมื่อ]
-fno-diagnostics-สี
ใช้สีในการวินิจฉัย เมื่อ is ไม่เคย, เสมอ,หรือ รถยนต์. ค่าเริ่มต้นขึ้นอยู่กับวิธี
คอมไพเลอร์ได้รับการกำหนดค่าแล้วสามารถเป็นอะไรก็ได้ข้างต้น เมื่อ ตัวเลือกหรือยัง
ไม่เคย if GCC_COLORS ตัวแปรสภาพแวดล้อมไม่มีอยู่ในสภาพแวดล้อมและ รถยนต์
มิฉะนั้น. รถยนต์ หมายถึงการใช้สีเฉพาะเมื่อข้อผิดพลาดมาตรฐานคือเทอร์มินัล NS
รูปแบบ -fdiagnostics-สี และ -fno-diagnostics-สี เป็นนามแฝงสำหรับ
-fdiagnostics-color=เสมอ และ -fdiagnostics-color=neverตามลำดับ

สีถูกกำหนดโดยตัวแปรสภาพแวดล้อม GCC_COLORS. ค่าของมันคือโคลอน-
รายการความสามารถที่แยกจากกัน และสตริงย่อย Select Graphic Rendition (SGR) SGR
คำสั่งจะถูกตีความโดยเทอร์มินัลหรือเทอร์มินัลอีมูเลเตอร์ (ดูส่วนใน
เอกสารของเทอร์มินัลข้อความของคุณสำหรับค่าที่อนุญาตและความหมายเป็น
คุณลักษณะของอักขระ) ค่าสตริงย่อยเหล่านี้เป็นจำนวนเต็มในการแสดงทศนิยม
และสามารถต่อกันด้วยเครื่องหมายอัฒภาค ค่าทั่วไปที่จะต่อกันได้แก่ 1 for
ตัวหนา, 4 สำหรับขีดเส้นใต้ 5 สำหรับการกะพริบตา 7 สำหรับผกผัน 39 สำหรับสีพื้นหน้าเริ่มต้น 30
ไปยัง 37 สำหรับสีพื้นหน้า 90 ไปยัง 97 สำหรับสีพื้นหน้าโหมด 16 สี 38; 5; 0 ไปยัง
38; 5; 255 สำหรับสีพื้นหน้าโหมด 88 สีและ 256 สี 49 สำหรับพื้นหลังเริ่มต้น
สี, 40 ไปยัง 47 สำหรับสีพื้นหลัง 100 ไปยัง 107 สำหรับสีพื้นหลังโหมด 16 สี
และ 48; 5; 0 ไปยัง 48; 5; 255 สำหรับสีพื้นหลังของโหมด 88 สีและ 256 สี

ค่าดีฟอลต์ GCC_COLORS is

error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01

ที่ไหน 01, 31 เป็นสีแดงเข้ม 01, 35 เป็นสีม่วงแดงเข้ม 01, 36 เป็นสีน้ำเงินเข้ม 01, 32 เป็นตัวหนา
สีเขียวและ 01 เป็นตัวหนา การตั้งค่า GCC_COLORS ไปที่สตริงว่างปิดการใช้งานสี
ความสามารถที่รองรับมีดังนี้

"ข้อผิดพลาด="
สตริงย่อย SGR สำหรับข้อผิดพลาด: เครื่องหมาย

"คำเตือน="
สตริงย่อย SGR สำหรับคำเตือน: เครื่องหมาย

"หมายเหตุ="
สตริงย่อย SGR สำหรับหมายเหตุ: เครื่องหมาย

"คาเร็ต="
สตริงย่อย SGR สำหรับบรรทัดคาเร็ต

"โลคัส="
สตริงย่อย SGR สำหรับข้อมูลตำแหน่ง ไฟล์:line or ไฟล์:line:column เป็นต้น

"คำพูด="
สตริงย่อย SGR สำหรับข้อมูลที่พิมพ์ภายในเครื่องหมายคำพูด

-fno-diagnostics-show-option
โดยค่าเริ่มต้น การวินิจฉัยแต่ละรายการที่ปล่อยออกมาจะมีข้อความระบุตัวเลือกบรรทัดคำสั่ง
ที่ควบคุมการวินิจฉัยโดยตรง (หากตัวเลือกดังกล่าวเป็นที่รู้จักในการวินิจฉัย
เครื่องจักร) การระบุ -fno-diagnostics-show-option ธงระงับสิ่งนั้น
พฤติกรรม

-fno-diagnostics-show-caret
โดยค่าเริ่มต้น การวินิจฉัยแต่ละรายการที่ปล่อยออกมาจะมีบรรทัดต้นฉบับและเครื่องหมายรูปหมวก '^'
ระบุคอลัมน์ ตัวเลือกนี้จะระงับข้อมูลนี้ บรรทัดต้นทางคือ
ตัดทอนเป็น n ตัวอักษร ถ้า -fmessage-length=n มีตัวเลือกให้ เมื่อผลลัพธ์
เสร็จสิ้นกับเทอร์มินัล ความกว้างถูกจำกัดความกว้างที่กำหนดโดย คอลัมน์
ตัวแปรสภาพแวดล้อมหรือถ้าไม่ได้ตั้งค่าเป็นความกว้างของเทอร์มินัล

Options ไปยัง ขอร้อง or ปราบปราม คำแนะนำ:
คำเตือนเป็นข้อความวินิจฉัยที่รายงานโครงสร้างที่ไม่อยู่ในเนื้อแท้
ผิดพลาดแต่มีความเสี่ยงหรือแนะนำว่าอาจมีข้อผิดพลาด

ตัวเลือกที่ไม่ขึ้นกับภาษาต่อไปนี้ไม่ได้เปิดใช้งานคำเตือนเฉพาะ แต่ควบคุม
ประเภทของการวินิจฉัยที่ผลิตโดย GCC

-fsyntax-only
ตรวจสอบรหัสเพื่อหาข้อผิดพลาดทางไวยากรณ์ แต่อย่าทำอะไรเกินกว่านั้น

-fmax-errors=n
จำกัดจำนวนข้อความแสดงข้อผิดพลาดสูงสุดไว้ที่ nณ จุดนั้น GCC ประกันตัวค่อนข้าง
มากกว่าที่จะพยายามประมวลผลซอร์สโค้ดต่อไป ถ้า n คือ 0 (ค่าเริ่มต้น)
ไม่มีการจำกัดจำนวนข้อความแสดงข้อผิดพลาดที่ผลิต ถ้า -Wfatal-ข้อผิดพลาด นอกจากนี้ยังมี
ระบุแล้ว -Wfatal-ข้อผิดพลาด มีความสำคัญเหนือตัวเลือกนี้

-w ยับยั้งข้อความเตือนทั้งหมด

-Werror
ทำให้คำเตือนทั้งหมดเป็นข้อผิดพลาด

-ข้อผิดพลาด=
ทำให้คำเตือนที่ระบุเป็นข้อผิดพลาด ตัวระบุสำหรับคำเตือนถูกผนวก;
เช่น -Werror = สวิตช์ เปลี่ยนคำเตือนที่ควบคุมโดย -Wswitch เป็นข้อผิดพลาด
สวิตช์นี้ใช้รูปแบบเชิงลบ เพื่อใช้ในการปฏิเสธ -Werror สำหรับคำเตือนเฉพาะ
เช่น - ไม่มีข้อผิดพลาด = สวิตช์ ทำให้ -Wswitch คำเตือนไม่ใช่ข้อผิดพลาดแม้ว่า -Werror
มีผลบังคับใช้

ข้อความเตือนสำหรับแต่ละคำเตือนที่ควบคุมได้รวมถึงตัวเลือกที่ควบคุม
คำเตือน สามารถใช้ตัวเลือกนั้นกับ -ข้อผิดพลาด= และ -Wno-ข้อผิดพลาด= ตามที่อธิบายไว้
ข้างต้น. (การพิมพ์ตัวเลือกในข้อความเตือนสามารถปิดใช้งานได้โดยใช้ปุ่ม
-fno-diagnostics-show-option ธง.)

โปรดทราบว่าการระบุ -ข้อผิดพลาด=foo หมายความโดยอัตโนมัติ -Wfoo. อย่างไรก็ตาม -Wno-ข้อผิดพลาด=foo
ไม่ได้หมายความถึงอะไร

-Wfatal-ข้อผิดพลาด
ตัวเลือกนี้ทำให้คอมไพเลอร์ยกเลิกการคอมไพล์เมื่อเกิดข้อผิดพลาดครั้งแรก
แทนที่จะพยายามพิมพ์ข้อความแสดงข้อผิดพลาดต่อไป

คุณสามารถขอคำเตือนเฉพาะมากมายด้วยตัวเลือกที่ขึ้นต้นด้วย -W, ตัวอย่างเช่น
-Wimplicit เพื่อขอคำเตือนเกี่ยวกับการประกาศโดยนัย แต่ละคำเตือนเฉพาะเหล่านี้
ตัวเลือกยังมีการเริ่มต้นรูปแบบเชิงลบ -ไม่- เพื่อปิดคำเตือน ตัวอย่างเช่น,
-Wno-โดยปริยาย. คู่มือนี้แสดงรายการเพียงหนึ่งในสองแบบฟอร์ม แล้วแต่ว่ากรณีใดไม่ใช่ค่าเริ่มต้น
สำหรับตัวเลือกเฉพาะภาษาเพิ่มเติม โปรดดูที่ C + + ภาษาถิ่น Options และ Objective-C
และ วัตถุประสงค์-C++ ภาษาถิ่น Options.

บางตัวเลือก เช่น -ผนัง และ -Wextra, เปิดตัวเลือกอื่นๆ เช่น -Wunusedซึ่ง
อาจเปิดตัวเลือกเพิ่มเติมเช่น -Wunused-value. ผลรวมของผลบวกและ
รูปแบบเชิงลบคือตัวเลือกที่เฉพาะเจาะจงมากขึ้นมีลำดับความสำคัญมากกว่าตัวเลือกที่เฉพาะเจาะจงน้อยกว่า
เป็นอิสระจากตำแหน่งในบรรทัดคำสั่ง สำหรับตัวเลือกที่มีความจำเพาะเดียวกัน
อันสุดท้ายจะมีผล ตัวเลือกที่เปิดใช้งานหรือปิดใช้งานผ่าน Pragmas จะมีผลเหมือนกับว่า
ปรากฏขึ้นที่ส่วนท้ายของบรรทัดคำสั่ง

เมื่อมีการร้องขอตัวเลือกคำเตือนที่ไม่รู้จัก (เช่น -Wunknown-คำเตือน), GCC ปล่อย a
การวินิจฉัยระบุว่าไม่รู้จักตัวเลือก อย่างไรก็ตาม หาก -ไม่- ใช้แบบฟอร์ม,
พฤติกรรมแตกต่างกันเล็กน้อย: ไม่มีการสร้างการวินิจฉัยสำหรับ -Wno-unknown-คำเตือน
เว้นแต่จะมีการสร้างการวินิจฉัยอื่นๆ ซึ่งช่วยให้สามารถใช้ new -ไม่- ตัวเลือก
กับคอมไพเลอร์เก่า แต่ถ้ามีอะไรผิดพลาด คอมไพเลอร์เตือนว่าไม่รู้จัก
มีตัวเลือกอยู่

-Wpedantic
-อวดดี
ออกคำเตือนทั้งหมดตามข้อกำหนด ISO C และ ISO C++ ที่เข้มงวด ปฏิเสธทุกโปรแกรมที่
ใช้ส่วนขยายที่ต้องห้าม และโปรแกรมอื่นๆ บางโปรแกรมที่ไม่เป็นไปตาม ISO C และ ISO
ค ++ สำหรับ ISO C ให้เป็นไปตามเวอร์ชันของมาตรฐาน ISO C ที่ระบุโดย any -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 รวมถึงคุณสมบัติทั้งหมดที่คอมไพเลอร์รองรับด้วยตัวเลือกที่กำหนดและ
จะได้ไม่ต้องเตือนอะไร)

-pedantic-ข้อผิดพลาด
ให้ข้อผิดพลาดเมื่อใดก็ตามที่ ฐาน มาตรฐาน (ดู -Wpedantic) ต้องมีการวินิจฉัยใน
บางกรณีที่มีพฤติกรรมที่ไม่ได้กำหนดไว้ ณ เวลารวบรวมและในบางกรณี
ที่ไม่ป้องกันการคอมไพล์โปรแกรมที่ถูกต้องตามมาตรฐาน
นี่ไม่เท่ากับ -Werror=อวดรู้เนื่องจากมีข้อผิดพลาดที่เปิดใช้งานโดยสิ่งนี้
ตัวเลือกและไม่ได้เปิดใช้งานโดยหลังและในทางกลับกัน

-ผนัง
ซึ่งจะทำให้คำเตือนทั้งหมดเกี่ยวกับโครงสร้างที่ผู้ใช้บางคนพิจารณา
น่าสงสัยและง่ายต่อการหลีกเลี่ยง (หรือแก้ไขเพื่อป้องกันการเตือน) แม้แต่ใน
ร่วมกับมาโคร นอกจากนี้ยังเปิดใช้งานคำเตือนเฉพาะบางภาษาที่อธิบายไว้
in C + + ภาษาถิ่น Options และ Objective-C และ วัตถุประสงค์-C++ ภาษาถิ่น Options.

-ผนัง เปิดแฟล็กคำเตือนต่อไปนี้:

-Waddress -Warray-bounds=1 (เฉพาะกับ -O2) -Wc++11-compat -Wc++14-compat
-Wchar-ตัวห้อย -Wenum-เปรียบเทียบ (ใน C/ObjC นี่เป็นค่าเริ่มต้นใน C++)
-Wimplicit-int (C และ Objective-C เท่านั้น) -Wimplicit-ฟังก์ชั่น-การประกาศ (ค และ
วัตถุประสงค์-C เท่านั้น) -ความคิดเห็น -Wformat -Wmain (สำหรับ C/ObjC เท่านั้น และเว้นแต่
-ffreestanding) -Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น -Wmissing-เหล็กดัดฟัน (สำหรับ C/ObjC เท่านั้น) -Wnonnull
-Wopenmp-simd -วงเล็บ -Wpointer-สัญญาณ -Wreorder -Wreturn-type -Wsequence จุด
-Wsign-เปรียบเทียบ (เฉพาะใน C ++) -Wstrict-นามแฝง -Wstrict-ล้น=1 -Wswitch
-Wtrigraphs - กำหนดค่าเริ่มต้น -Wunknown-pragmas -Wunused-ฟังก์ชั่น -Wunused-label
-Wunused-value -Wunused-ตัวแปร -Wvolatile-register-var

โปรดทราบว่าแฟล็กคำเตือนบางอย่างไม่ได้หมายความถึง -ผนัง. บางคนเตือนเกี่ยวกับ
โครงสร้างที่ผู้ใช้โดยทั่วไปไม่ถือว่าน่าสงสัย แต่ซึ่ง
บางครั้งคุณอาจต้องการตรวจสอบ; คนอื่นเตือนเกี่ยวกับการก่อสร้างที่
จำเป็นหรือหลีกเลี่ยงได้ยากในบางกรณี และไม่มีวิธีง่ายๆ ในการปรับเปลี่ยน
รหัสเพื่อระงับการเตือน บางส่วนเปิดใช้งานโดย -Wextra แต่หลายคน
ต้องเปิดใช้งานเป็นรายบุคคล

-Wextra
สิ่งนี้จะเปิดใช้งานแฟล็กคำเตือนพิเศษบางอย่างที่ไม่ได้เปิดใช้งานโดย -ผนัง. (ตัวเลือกนี้ใช้
ที่จะเรียกว่า -W. ยังคงรองรับชื่อเก่า แต่ชื่อที่ใหม่กว่านั้นมากกว่า
คำอธิบาย)

-Wclobbered -ร่างกายเปียกปอน -Wignored-รอบคัดเลือก -Wmissing-field-initializers
-Wmissing-พารามิเตอร์-type (ซีเท่านั้น) -Wold-style-ประกาศ (ซีเท่านั้น) -Woverride-init
-Wsign-เปรียบเทียบ -Wtype-จำกัด - กำหนดค่าเริ่มต้น -Wunused-พารามิเตอร์ (เฉพาะกับ -Wunused or
-ผนัง) -Wunused-but-set-parameter (เฉพาะกับ -Wunused or -ผนัง)

ทางเลือก -Wextra ยังพิมพ์ข้อความเตือนสำหรับกรณีต่อไปนี้:

* ตัวชี้ถูกเปรียบเทียบกับศูนย์จำนวนเต็มด้วย "<", "<=", ">" หรือ ">="

* (C ++ เท่านั้น) ทั้งตัวแจงนับและตัวนับไม่ปรากฏในเงื่อนไข
การแสดงออก

* (C ++ เท่านั้น) ฐานเสมือนที่คลุมเครือ

* (C ++ เท่านั้น) การสมัครสมาชิกอาร์เรย์ที่ได้รับการประกาศว่า "ลงทะเบียน"

* (C ++ เท่านั้น) รับที่อยู่ของตัวแปรที่ได้รับการประกาศว่า "ลงทะเบียน"

* (C ++ เท่านั้น) คลาสพื้นฐานไม่ได้เริ่มต้นในตัวสร้างสำเนาของคลาสที่ได้รับ

-Wchar-ตัวห้อย
เตือนว่าตัวห้อยอาร์เรย์มีประเภท "char" นี่เป็นสาเหตุของข้อผิดพลาดทั่วไป เช่น
โปรแกรมเมอร์มักจะลืมไปว่าประเภทนี้มีการลงนามในเครื่องบางเครื่อง คำเตือนนี้คือ
เปิดใช้งานโดย -ผนัง.

-ความคิดเห็น
เตือนเมื่อใดก็ตามที่ความคิดเห็นเริ่มต้นลำดับ /* ปรากฏใน a /* แสดงความคิดเห็นหรือเมื่อใดก็ตามที่
แบ็กสแลช-Newline ปรากฏใน a // ความคิดเห็น คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wno-ครอบคลุม-ไม่ตรงกัน
เตือนหากโปรไฟล์คำติชมไม่ตรงกันเมื่อใช้ -fprofile-use ตัวเลือก. ถ้า
ไฟล์ต้นฉบับมีการเปลี่ยนแปลงระหว่างการคอมไพล์ด้วย -fprofile-gen และมี -fprofile-use,
ไฟล์ที่มีข้อเสนอแนะโปรไฟล์อาจไม่ตรงกับไฟล์ต้นฉบับและ GCC ไม่สามารถทำได้
ใช้ข้อมูลป้อนกลับของโปรไฟล์ โดยค่าเริ่มต้น คำเตือนนี้จะเปิดใช้งานและเป็น
ถือเป็นข้อผิดพลาด -Wno-ครอบคลุม-ไม่ตรงกัน สามารถใช้ปิดการเตือนหรือ
-Wno-error=ความครอบคลุม-ไม่ตรงกัน สามารถใช้เพื่อปิดการใช้งานข้อผิดพลาด ปิดการใช้งานข้อผิดพลาด
สำหรับคำเตือนนี้อาจส่งผลให้โค้ดที่ปรับให้เหมาะสมไม่ดีและมีประโยชน์เฉพาะในกรณีของ
การเปลี่ยนแปลงเล็กน้อยมาก เช่น การแก้ไขข้อผิดพลาดในฐานรหัสที่มีอยู่ ปิดการใช้งานโดยสิ้นเชิง
ไม่แนะนำคำเตือน

-Wno-cpp
(C, Objective-C, C++, Objective-C++ และ Fortran เท่านั้น)

ระงับข้อความเตือนที่ส่งโดยคำสั่ง "#warning"

-Wdouble-โปรโมชั่น (C, C++, Objective-C และ Objective-C++ เท่านั้น)
ให้คำเตือนเมื่อค่าของประเภท "float" ได้รับการเลื่อนระดับเป็น "สองเท่า" โดยปริยาย ซีพียู
ด้วยหน่วยทศนิยม "ความแม่นยำเดียว" แบบ 32 บิตใช้ "ลอย" ในฮาร์ดแวร์
แต่เลียนแบบ "สองเท่า" ในซอฟต์แวร์ บนเครื่องดังกล่าว ทำการคำนวณโดยใช้
ค่า "สองเท่า" มีราคาแพงกว่ามากเนื่องจากค่าใช้จ่ายที่จำเป็นสำหรับซอฟต์แวร์
การจำลอง

มันง่ายที่จะคำนวณด้วย "สองเท่า" โดยไม่ตั้งใจเพราะว่าทศนิยม
ตัวอักษรโดยปริยายของประเภท "คู่" ตัวอย่างเช่นใน:

พื้นที่ลอย (รัศมีลอย)
{
ส่งคืน 3.14159 * รัศมี * รัศมี;
}

คอมไพเลอร์ทำการคำนวณทั้งหมดด้วย "double" เพราะค่าทศนิยม
อักษรคือ "คู่"

-Wformat
-Wformat=n
ตรวจสอบการเรียก "printf" และ "scanf" เป็นต้น เพื่อให้แน่ใจว่าอาร์กิวเมนต์ที่ให้มา
มีประเภทที่เหมาะสมกับสตริงรูปแบบที่ระบุและการแปลง
ระบุไว้ในสตริงรูปแบบที่เหมาะสม ซึ่งรวมถึงฟังก์ชันมาตรฐานและ
อื่นๆ ที่ระบุโดยแอตทริบิวต์รูปแบบ ใน "printf", "scanf", "strftime" และ
"strfmon" (ส่วนขยาย X/Open ไม่ใช่ในมาตรฐาน C) (หรือเป้าหมายอื่นๆ-
ครอบครัวเฉพาะ) ฟังก์ชันใดได้รับการตรวจสอบโดยไม่มีแอตทริบิวต์รูปแบบ
ที่ระบุขึ้นอยู่กับรุ่นมาตรฐานที่เลือกและการตรวจสอบฟังก์ชั่นดังกล่าว
โดยไม่มีแอตทริบิวต์ที่ระบุถูกปิดใช้งานโดย -ffreestanding or -fno-ในตัว.

รูปแบบจะถูกตรวจสอบโดยเทียบกับคุณลักษณะรูปแบบที่สนับสนุนโดย GNU libc เวอร์ชัน 2.2
ซึ่งรวมถึงคุณลักษณะ ISO C90 และ C99 ทั้งหมด ตลอดจนคุณลักษณะจาก Single Unix
ข้อมูลจำเพาะและส่วนขยาย BSD และ GNU บางส่วน การใช้งานห้องสมุดอื่น ๆ อาจไม่
รองรับคุณสมบัติเหล่านี้ทั้งหมด GCC ไม่รองรับการเตือนเกี่ยวกับคุณสมบัติที่เหนือกว่า
ข้อจำกัดของห้องสมุดโดยเฉพาะ อย่างไรก็ตาม ถ้า -Wpedantic ใช้กับ -Wformat,
มีการเตือนเกี่ยวกับคุณสมบัติของรูปแบบที่ไม่ได้อยู่ในรุ่นมาตรฐานที่เลือก (แต่ไม่ใช่
สำหรับรูปแบบ "strfmon" เนื่องจากรูปแบบเหล่านี้ไม่ได้อยู่ในมาตรฐาน C เวอร์ชันใดๆ)

-Wformat=1
-Wformat
ตัวเลือกเสริม (Option) -Wformat เทียบเท่ากับ -Wformat=1และ -Wno-รูปแบบ เทียบเท่ากับ
-Wformat=0. ตั้งแต่ -Wformat ยังตรวจสอบอาร์กิวเมนต์รูปแบบ null สำหรับหลาย ๆ
ฟังก์ชั่น -Wformat ยังหมายความถึง -Wnonnull. บางส่วนของรูปแบบระดับนี้
การตรวจสอบสามารถปิดใช้งานได้โดยตัวเลือก: -Wno-format-contain-nul,
-Wno-format-extra-argsและ -Wno-format-zero-length. -Wformat เปิดใช้งานโดย
-ผนัง.

-Wno-format-contain-nul
If -Wformat ถูกระบุ ห้ามเตือนเกี่ยวกับรูปแบบสตริงที่มี NUL ไบต์

-Wno-format-extra-args
If -Wformat ถูกระบุ ห้ามเตือนเกี่ยวกับอาร์กิวเมนต์ส่วนเกินสำหรับ "printf" หรือ
ฟังก์ชันรูปแบบ "scanf" มาตรฐาน C ระบุว่าอาร์กิวเมนต์ดังกล่าวเป็น
ละเว้น

โดยที่อาร์กิวเมนต์ที่ไม่ได้ใช้อยู่ระหว่างอาร์กิวเมนต์ที่ใช้ซึ่งระบุด้วย $
ข้อมูลจำเพาะของหมายเลขตัวถูกดำเนินการ โดยปกติจะยังคงได้รับคำเตือน เนื่องจาก
การใช้งานไม่สามารถทราบประเภทที่จะส่งผ่านไปยัง "va_arg" เพื่อข้ามส่วนที่ไม่ได้ใช้
อาร์กิวเมนต์ อย่างไรก็ตาม ในกรณีของรูปแบบ "scanf" ตัวเลือกนี้จะระงับ
เตือนถ้าอาร์กิวเมนต์ที่ไม่ได้ใช้เป็นตัวชี้ทั้งหมดตั้งแต่ Single Unix
ข้อมูลจำเพาะระบุว่าอนุญาตให้ใช้อาร์กิวเมนต์ที่ไม่ได้ใช้ดังกล่าว

-Wno-format-zero-length
If -Wformat มีการระบุ ห้ามเตือนเกี่ยวกับรูปแบบที่มีความยาวเป็นศูนย์ มาตรฐานซี
ระบุว่าอนุญาตให้ใช้รูปแบบที่มีความยาวเป็นศูนย์

-Wformat=2
ทำให้สามารถ -Wformat บวกกับการตรวจสอบรูปแบบเพิ่มเติม ปัจจุบันเทียบเท่ากับ -Wformat
-Wformat-ไม่ใช่ตัวอักษร -Wformat-การรักษาความปลอดภัย -Wformat-y2k.

-Wformat-ไม่ใช่ตัวอักษร
If -Wformat ถูกระบุ และเตือนด้วยว่าสตริงรูปแบบไม่ใช่สตริงตามตัวอักษร
ดังนั้นจึงไม่สามารถตรวจสอบได้ เว้นแต่ฟังก์ชันรูปแบบจะใช้อาร์กิวเมนต์รูปแบบเป็น
"va_list"

-Wformat-การรักษาความปลอดภัย
If -Wformat ระบุยังเตือนเกี่ยวกับการใช้ฟังก์ชั่นรูปแบบที่เป็นตัวแทนของ
ปัญหาด้านความปลอดภัยที่อาจเกิดขึ้น ปัจจุบันนี้เตือนเรื่องการเรียก "printf" และ
ฟังก์ชัน "scanf" โดยที่สตริงรูปแบบไม่ใช่สตริงตามตัวอักษร และไม่มี
อาร์กิวเมนต์รูปแบบเช่นเดียวกับใน "printf (foo);" นี่อาจเป็นช่องโหว่ด้านความปลอดภัยหาก
สตริงรูปแบบมาจากอินพุตที่ไม่น่าเชื่อถือและมี %n. (ขณะนี้คือ
เซตย่อยของอะไร -Wformat-ไม่ใช่ตัวอักษร เตือนแต่ในอนาคตอาจจะเตือน
เพิ่มไปยัง -Wformat-การรักษาความปลอดภัย ที่ไม่รวมอยู่ใน -Wformat-ไม่ใช่ตัวอักษร.)

-Wformat-ลงนาม
If -Wformat ถูกระบุ และเตือนด้วยว่าสตริงรูปแบบต้องการ unsigned
อาร์กิวเมนต์และอาร์กิวเมนต์ได้รับการลงนามและในทางกลับกัน

หมายเหตุ: ใน Ubuntu 8.10 และเวอร์ชันที่ใหม่กว่า ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้นสำหรับ C
C++, ObjC, ObjC++ หากต้องการปิดใช้งาน ให้ใช้ -Wno-รูปแบบการรักษาความปลอดภัยหรือปิดการใช้งานทุกรูปแบบ
คำเตือนด้วย -Wformat=0. หากต้องการให้คำเตือนเกี่ยวกับความปลอดภัยของรูปแบบร้ายแรง ให้ระบุ
-Werror=รูปแบบการรักษาความปลอดภัย.

-Wformat-y2k
If -Wformat ถูกระบุ และยังเตือนเกี่ยวกับรูปแบบ "strftime" ที่อาจให้ผลเพียง a
ปีสองหลัก

-Wnonnull
เตือนเกี่ยวกับการส่งผ่านตัวชี้ค่าว่างสำหรับอาร์กิวเมนต์ที่ทำเครื่องหมายว่าต้องการค่าที่ไม่ใช่ค่าว่าง
โดยแอตทริบิวต์ฟังก์ชัน "nonnull"

-Wnonnull รวมอยู่ใน -ผนัง และ -Wformat. มันสามารถปิดการใช้งานด้วย -Wno-nonnull
ตัวเลือก

-Winit-ตัวเอง (C, C++, Objective-C และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นที่เริ่มต้นด้วยตัวเอง หมายเหตุ
สามารถใช้ตัวเลือกได้เฉพาะกับ - กำหนดค่าเริ่มต้น ตัวเลือก

ตัวอย่างเช่น GCC เตือนเกี่ยวกับ "i" ที่ไม่ได้กำหนดค่าเริ่มต้นในตัวอย่างต่อไปนี้เท่านั้น
เมื่อ -Winit-ตัวเอง ได้รับการระบุ:

int ฉ()
{
int ผม = ผม;
กลับฉัน;
}

คำเตือนนี้เปิดใช้งานโดย -ผนัง ใน C++

-Wimplicit-int (C และ Objective-C เท่านั้น)
เตือนเมื่อการประกาศไม่ได้ระบุประเภท คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wimplicit-ฟังก์ชั่น-การประกาศ (C และ Objective-C เท่านั้น)
แจ้งเตือนทุกครั้งที่มีการใช้ฟังก์ชันก่อนที่จะประกาศ ในโหมด C99
(-std=c99 or -std=gnu99) คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้นและถูกทำให้เป็น an
ผิดพลาดโดย -pedantic-ข้อผิดพลาด. คำเตือนนี้ยังเปิดใช้งานโดย -ผนัง.

-Wimplicit (C และ Objective-C เท่านั้น)
เหมือนกับ -Wimplicit-int และ -Wimplicit-ฟังก์ชั่น-การประกาศ. คำเตือนนี้เปิดใช้งานอยู่
by -ผนัง.

-Wignored-รอบคัดเลือก (เฉพาะ C และ C++)
เตือนหากประเภทการส่งคืนของฟังก์ชันมีตัวระบุประเภท เช่น "const" สำหรับ ISO C
ตัวระบุประเภทดังกล่าวไม่มีผลเนื่องจากค่าที่ส่งคืนโดยฟังก์ชันไม่ใช่
ค่า สำหรับ C++ คำเตือนจะออกสำหรับประเภทสเกลาร์หรือ "เป็นโมฆะ" เท่านั้น ISO C
ห้ามประเภทการส่งคืน "เป็นโมฆะ" ที่มีคุณสมบัติตามคำจำกัดความของฟังก์ชัน ดังนั้นประเภทการส่งคืนดังกล่าว
ได้รับคำเตือนเสมอแม้จะไม่มีตัวเลือกนี้

คำเตือนนี้ยังเปิดใช้งานโดย -Wextra.

-Wmain
เตือนหากประเภท "หลัก" ที่น่าสงสัย "main" ควรเป็นฟังก์ชันที่มี external
เชื่อมโยง, ส่งคืน int, รับอาร์กิวเมนต์ศูนย์อย่างใดอย่างหนึ่ง, อาร์กิวเมนต์สองหรือสามอาร์กิวเมนต์ของ
ประเภทที่เหมาะสม คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้นใน C ++ และเปิดใช้งานโดย
-ผนัง or -Wpedantic.

-Wmissing-เหล็กดัดฟัน
เตือนถ้าตัวเริ่มต้นการรวมหรือการรวมไม่ได้ถูกคร่อมไว้อย่างสมบูรณ์ ดังต่อไปนี้
ตัวอย่าง ตัวเริ่มต้นสำหรับ "a" ไม่ได้ใส่วงเล็บเต็มที่ แต่สำหรับ "b" นั้นเต็ม
วงเล็บ คำเตือนนี้เปิดใช้งานโดย -ผนัง ใน C.

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

คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wmissing-include-dirs (C, C++, Objective-C และ Objective-C++ เท่านั้น)
เตือนหากไม่มีไดเร็กทอรี include ที่ผู้ใช้จัดหา

-วงเล็บ
เตือนหากเว้นวงเล็บในบางบริบท เช่น เมื่อมี
การมอบหมายในบริบทที่คาดหวังค่าความจริงหรือเมื่อผู้ประกอบการซ้อนกัน
ที่คนมาก่อนมักจะสับสนเกี่ยวกับ

เตือนด้วยหากมีการเปรียบเทียบเช่น "x<=y<=z" ปรากฏขึ้น นี่เทียบเท่ากับ "(x<=y ? 1 :
0) <= z" ซึ่งเป็นการตีความที่แตกต่างจากคณิตศาสตร์ทั่วไป
สัญกรณ์

ยังเตือนเกี่ยวกับสิ่งปลูกสร้างที่อาจเกิดความสับสนว่าคำสั่ง "ถ้า" an
สาขา "อื่น" เป็นของ นี่คือตัวอย่างของกรณีดังกล่าว:

{
ถ้า (ก)
ถ้า (ข)
ฟู ();
อื่น
บาร์ ();
}

ใน C/C++ ทุกสาขา "อื่น" เป็นของคำสั่ง "if" ที่อยู่ลึกสุดซึ่ง
ในตัวอย่างนี้คือ "if (b)" ซึ่งมักไม่เป็นไปตามที่โปรแกรมเมอร์คาดหวังไว้ เนื่องจาก
แสดงในตัวอย่างข้างต้นโดยเยื้องโปรแกรมเมอร์เลือก เมื่อมี
โอกาสที่จะเกิดความสับสนนี้ GCC จะออกคำเตือนเมื่อมีการระบุแฟล็กนี้
หากต้องการกำจัดคำเตือน ให้ใส่เครื่องหมายวงเล็บปีกการอบๆ คำสั่ง "if" ในสุดดังนั้น
ไม่มีทางที่ "อื่น" จะเป็นของ "ถ้า" ที่ล้อมรอบอยู่ รหัสผลลัพธ์มีลักษณะ
อย่างนี้:

{
ถ้า (ก)
{
ถ้า (ข)
ฟู ();
อื่น
บาร์ ();
}
}

ยังเตือนด้วยการใช้ส่วนขยาย GNU ที่เป็นอันตรายเป็น "?:" โดยละเว้นตัวถูกดำเนินการกลาง
เมื่อเงื่อนไขในโอเปอเรเตอร์ "?": เป็นนิพจน์บูลีน ค่าที่ละไว้คือ
เสมอ 1 บ่อยครั้งที่โปรแกรมเมอร์คาดหวังว่ามันจะเป็นค่าที่คำนวณได้ภายในเงื่อนไข
การแสดงออกแทน

คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wsequence จุด
คำเตือนเกี่ยวกับโค้ดที่อาจมีความหมายไม่ได้เนื่องจากการละเมิดลำดับ
ชี้กฎในมาตรฐาน C และ C++

มาตรฐาน C และ C++ กำหนดลำดับของนิพจน์ในโปรแกรม C/C++
ประเมินในแง่ของ ลำดับ จุดซึ่งแสดงถึงการสั่งซื้อบางส่วนระหว่าง
การดำเนินการของส่วนต่างๆ ของโปรแกรม: ส่วนที่ดำเนินการก่อนจุดลำดับ และส่วนเหล่านั้น
ดำเนินการหลังจากนั้น สิ่งเหล่านี้เกิดขึ้นหลังจากการประเมินการแสดงออกทั้งหมด (อันที่
ไม่ได้เป็นส่วนหนึ่งของนิพจน์ที่ใหญ่กว่า) หลังจากการประเมินตัวถูกดำเนินการตัวแรกของ a
ตัวดำเนินการ "&&", "||", "? :" หรือ "," (เครื่องหมายจุลภาค) ก่อนที่ฟังก์ชันจะถูกเรียก (แต่หลังจาก
การประเมินอาร์กิวเมนต์และนิพจน์ที่แสดงถึงฟังก์ชันที่เรียก) และใน
บางสถานที่อื่น ๆ นอกเหนือจากที่แสดงโดยกฎจุดลำดับ คำสั่ง
ไม่ได้ระบุการประเมินนิพจน์ย่อยของนิพจน์ กฎทั้งหมดนี้
อธิบายเฉพาะคำสั่งซื้อบางส่วนมากกว่าคำสั่งซื้อทั้งหมด เนื่องจาก ตัวอย่างเช่น ถ้า two
ฟังก์ชันถูกเรียกภายในนิพจน์เดียวโดยไม่มีจุดลำดับระหว่างกัน
ไม่ได้ระบุลำดับการเรียกใช้ฟังก์ชัน อย่างไรก็ตาม มาตรฐาน
คณะกรรมการได้วินิจฉัยว่าการเรียกฟังก์ชันไม่ทับซ้อนกัน

ไม่ได้ระบุเมื่อระหว่างจุดลำดับปรับเปลี่ยนค่าของ
วัตถุมีผล โปรแกรมที่มีพฤติกรรมขึ้นอยู่กับสิ่งนี้มีพฤติกรรมที่ไม่ได้กำหนด
มาตรฐาน C และ C++ ระบุว่า "ระหว่างจุดลำดับก่อนหน้าและถัดไปan
วัตถุจะต้องมีการแก้ไขค่าที่เก็บไว้อย่างมากที่สุดหนึ่งครั้งโดยการประเมินของ
การแสดงออก. นอกจากนี้ ค่าก่อนหน้าจะต้องอ่านอย่างเดียวเพื่อกำหนดค่าเป็น
ถูกเก็บไว้" หากโปรแกรมฝ่าฝืนกฎเหล่านี้ผลลัพธ์ใด ๆ โดยเฉพาะ
การนำไปปฏิบัติเป็นสิ่งที่คาดเดาไม่ได้โดยสิ้นเชิง

ตัวอย่างของโค้ดที่มีการทำงานที่ไม่ได้กำหนดไว้คือ "a = a++;", "a[n] = b[n++]" และ "a[i++] =
i;" บางกรณีที่ซับซ้อนกว่านี้ไม่ได้วินิจฉัยโดยตัวเลือกนี้และอาจทำให้
ผลบวกปลอมเป็นครั้งคราว แต่โดยทั่วไปพบว่ามีประสิทธิภาพพอสมควรที่
ตรวจพบปัญหาประเภทนี้ในโปรแกรม

มาตรฐานมีถ้อยคำที่สับสน ดังนั้นจึงมีการถกเถียงกันในเรื่องความแม่นยำ
ความหมายของกฎจุดลำดับในกรณีที่ละเอียดอ่อน ลิงก์ไปยังการสนทนาของ
ปัญหา รวมถึงคำจำกัดความที่เป็นทางการที่เสนอ อาจพบได้ในหน้าการอ่าน GCC
ที่http://gcc.gnu.org/readings.html>.

คำเตือนนี้เปิดใช้งานโดย -ผนัง สำหรับ C และ C++

-Wno-กลับ-ท้องถิ่น-addr
อย่าเตือนเกี่ยวกับการส่งคืนตัวชี้ (หรือใน C ++ การอ้างอิง) ไปยังตัวแปรที่ไป
อยู่นอกขอบเขตหลังจากฟังก์ชันส่งคืน

-Wreturn-type
เตือนทุกครั้งที่มีการกำหนดฟังก์ชันด้วยประเภทการส่งคืนที่มีค่าเริ่มต้นเป็น "int" อีกด้วย
เตือนเกี่ยวกับคำสั่ง "return" ใด ๆ ที่ไม่มีค่าส่งคืนในฟังก์ชันที่มี return type
ไม่ "เป็นโมฆะ" (การตกจากจุดสิ้นสุดของตัวฟังก์ชันถือว่ากลับคืนมา
ไม่มีค่า) และเกี่ยวกับคำสั่ง "return" ที่มีนิพจน์ในฟังก์ชัน
ซึ่งมีประเภทการส่งคืนเป็น "โมฆะ"

สำหรับ C++ ฟังก์ชันที่ไม่มีประเภทส่งคืนจะสร้างข้อความวินิจฉัยเสมอ แม้กระทั่ง
เมื่อ -Wno-return-type ระบุไว้ ข้อยกเว้นเพียงอย่างเดียวคือ "หลัก" และฟังก์ชัน
กำหนดไว้ในส่วนหัวของระบบ

คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wshift-นับลบ
เตือนหากจำนวนกะเป็นลบ คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้น

-Wshift-นับล้น
เตือนถ้าจำนวนกะ >= ความกว้างของประเภท คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้น

-Wswitch
เตือนเมื่อใดก็ตามที่คำสั่ง "switch" มีดัชนีประเภทที่แจกแจงและไม่มี "case"
สำหรับรหัสที่มีชื่ออย่างน้อยหนึ่งรหัสของการแจงนับนั้น (การปรากฏตัวของ "ค่าเริ่มต้น"
ฉลากป้องกันคำเตือนนี้) ป้าย "กรณี" นอกช่วงการแจงนับยัง
กระตุ้นคำเตือนเมื่อใช้ตัวเลือกนี้ (แม้ว่าจะมีป้ายกำกับ "ค่าเริ่มต้น") นี้
คำเตือนเปิดใช้งานโดย -ผนัง.

-Wswitch-ค่าเริ่มต้น
เตือนเมื่อใดก็ตามที่คำสั่ง "switch" ไม่มีกรณี "default"

-Wswitch-enum
เตือนเมื่อใดก็ตามที่คำสั่ง "switch" มีดัชนีประเภทที่แจกแจงและไม่มี "case"
สำหรับรหัสที่มีชื่ออย่างน้อยหนึ่งรหัสของการแจงนับนั้น ป้าย "กรณี" นอก
ช่วงการแจงนับยังกระตุ้นคำเตือนเมื่อใช้ตัวเลือกนี้ ความแตกต่างเพียงอย่างเดียว
ระหว่าง -Wswitch และตัวเลือกนี้คือตัวเลือกนี้จะให้คำเตือนเกี่ยวกับการละเว้น
รหัสการแจงนับแม้ว่าจะมีป้ายกำกับ "ค่าเริ่มต้น"

-Wswitch-bool
เตือนทุกครั้งที่คำสั่ง "switch" มีดัชนีประเภทบูลีน เป็นไปได้
ระงับคำเตือนนี้โดยกำหนดนิพจน์การควบคุมเป็นประเภทอื่นที่ไม่ใช่
"บูล". ตัวอย่างเช่น:

สวิตช์ ((int) (a == 4))
{
...
}

คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้นสำหรับโปรแกรม C และ C++

-Wsync-nand (เฉพาะ C และ C++)
เตือนเมื่อฟังก์ชันในตัว "__sync_fetch_and_nand" และ "__sync_nand_and_fetch"
ใช้แล้ว. ฟังก์ชันเหล่านี้เปลี่ยนความหมายใน GCC 4.4

-Wtrigraphs
เตือนหากพบไตรกราฟที่อาจเปลี่ยนความหมายของโปรแกรม
(ไม่เตือนไตรกราฟในความคิดเห็น) คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wunused-but-set-parameter
เตือนทุกครั้งที่มีการกำหนดพารามิเตอร์ของฟังก์ชัน แต่อย่างอื่นไม่ได้ใช้ (นอกเหนือจาก
ประกาศ)

หากต้องการระงับคำเตือนนี้ ให้ใช้แอตทริบิวต์ "ไม่ได้ใช้"

คำเตือนนี้ยังเปิดใช้งานโดย -Wunused พร้อมด้วย -Wextra.

-Wunused-but-set-variable
เตือนเมื่อใดก็ตามที่ตัวแปรท้องถิ่นถูกกำหนดให้ แต่อย่างอื่นไม่ได้ใช้ (นอกเหนือจากตัวแปรของมัน
ประกาศ) คำเตือนนี้เปิดใช้งานโดย -ผนัง.

หากต้องการระงับคำเตือนนี้ ให้ใช้แอตทริบิวต์ "ไม่ได้ใช้"

คำเตือนนี้ยังเปิดใช้งานโดย -Wunusedซึ่งเปิดใช้งานโดย -ผนัง.

-Wunused-ฟังก์ชั่น
เตือนทุกครั้งที่มีการประกาศฟังก์ชันสแตติกแต่ไม่ได้กำหนดไว้ หรือไม่ใช่สแตติกแบบอินไลน์
ฟังก์ชั่นไม่ได้ใช้ คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wunused-label
เตือนทุกครั้งที่มีการประกาศป้ายกำกับแต่ไม่ได้ใช้ คำเตือนนี้เปิดใช้งานโดย -ผนัง.

หากต้องการระงับคำเตือนนี้ ให้ใช้แอตทริบิวต์ "ไม่ได้ใช้"

-Wunused-local-typedefs (C, Objective-C, C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อไม่มีการใช้ typedef ที่กำหนดไว้ในเครื่อง คำเตือนนี้คือ
เปิดใช้งานโดย -ผนัง.

-Wunused-พารามิเตอร์
เตือนเมื่อใดก็ตามที่ไม่ได้ใช้พารามิเตอร์ของฟังก์ชันนอกเหนือจากการประกาศ

หากต้องการระงับคำเตือนนี้ ให้ใช้แอตทริบิวต์ "ไม่ได้ใช้"

-Wno-ไม่ได้ใช้-ผลลัพธ์
อย่าเตือนหากผู้เรียกใช้ฟังก์ชันที่มีแอตทริบิวต์ "warn_unused_result" ไม่
ไม่ใช้มูลค่าที่ส่งคืน ค่าเริ่มต้นคือ -Wunused-ผลลัพธ์.

-Wunused-ตัวแปร
เตือนเมื่อใดก็ตามที่ไม่ได้ใช้ตัวแปรท้องถิ่นหรือตัวแปรคงที่ที่ไม่คงที่นอกเหนือจาก
การประกาศ คำเตือนนี้เปิดใช้งานโดย -ผนัง.

หากต้องการระงับคำเตือนนี้ ให้ใช้แอตทริบิวต์ "ไม่ได้ใช้"

-Wunused-value
เตือนเมื่อใดก็ตามที่คำสั่งคำนวณผลลัพธ์ที่ไม่ได้ใช้อย่างชัดเจน เพื่อปราบปราม
คำเตือนนี้ทำให้นิพจน์ที่ไม่ได้ใช้เป็น "โมฆะ" ซึ่งรวมถึงการแสดงออก-
คำสั่งหรือด้านซ้ายมือของนิพจน์จุลภาคที่ไม่มีผลข้างเคียง
ตัวอย่างเช่น นิพจน์เช่น "x[i,j]" ทำให้เกิดคำเตือน ในขณะที่ "x[(void)i,j]"
ไม่.

คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wunused
ทั้งหมดข้างต้น -Wunused ตัวเลือกรวมกัน

ในการรับคำเตือนเกี่ยวกับพารามิเตอร์ฟังก์ชันที่ไม่ได้ใช้ คุณต้องระบุ
-Wextra -Wunused (โปรดทราบว่า -ผนัง หมายถึง -Wunused) หรือแยกระบุ
-Wunused-พารามิเตอร์.

- กำหนดค่าเริ่มต้น
เตือนว่ามีการใช้ตัวแปรอัตโนมัติโดยไม่ได้เตรียมข้อมูลเบื้องต้นก่อนหรือถ้าตัวแปร
อาจถูกปิดโดยการโทร "setjmp" ใน C ++ เตือนว่าการอ้างอิงที่ไม่คงที่หรือไม่
สมาชิก "const" แบบคงที่ปรากฏในคลาสโดยไม่มีตัวสร้าง

หากคุณต้องการเตือนเกี่ยวกับโค้ดที่ใช้ค่าที่ไม่ได้กำหนดค่าเริ่มต้นของตัวแปรin
ตัวเริ่มต้นของมันเอง ใช้ -Winit-ตัวเอง ตัวเลือก

คำเตือนเหล่านี้เกิดขึ้นสำหรับองค์ประกอบของโครงสร้างที่ยังไม่ได้กำหนดค่าเริ่มต้นหรือปิดบัง
ตัวแปรยูเนี่ยนหรืออาร์เรย์เช่นเดียวกับตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นหรือปิดบัง
โดยรวม จะไม่เกิดขึ้นกับตัวแปรหรือองค์ประกอบที่ประกาศว่า "ระเหย" เพราะ
คำเตือนเหล่านี้ขึ้นอยู่กับการปรับให้เหมาะสม ตัวแปรหรือองค์ประกอบที่แน่นอน
เป็นคำเตือนขึ้นอยู่กับตัวเลือกการเพิ่มประสิทธิภาพที่แม่นยำและเวอร์ชันของ GCC ที่ใช้

โปรดทราบว่าอาจไม่มีคำเตือนเกี่ยวกับตัวแปรที่ใช้คำนวณ a . เท่านั้น
ค่าที่ตัวเองไม่เคยใช้เพราะการคำนวณดังกล่าวอาจถูกลบโดยการไหลของข้อมูล
วิเคราะห์ก่อนพิมพ์คำเตือน

-Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น
สำหรับตัวแปรอัตโนมัติ หากมีเส้นทางจากรายการฟังก์ชันไปยังการใช้
ตัวแปรที่เริ่มต้น แต่มีเส้นทางอื่นที่
ตัวแปรไม่ได้เริ่มต้น คอมไพเลอร์ส่งคำเตือนหากไม่สามารถพิสูจน์
เส้นทางที่ไม่ได้กำหนดค่าเริ่มต้นจะไม่ถูกดำเนินการในขณะใช้งาน คำเตือนเหล่านี้เป็นทางเลือก
เพราะ GCC ไม่ฉลาดพอที่จะเห็นเหตุผลทั้งหมดว่าทำไมโค้ดถึงอาจจะถูกต้อง
ทั้งๆ ที่ดูเหมือนจะมีข้อผิดพลาด นี่คือตัวอย่างหนึ่งของสิ่งที่เกิดขึ้น:

{
int x;
สวิตช์ (y)
{
กรณีที่ 1: x = 1;
break;
กรณีที่ 2: x = 4;
break;
กรณีที่ 3: x = 5;
}
ฟู (x);
}

หากค่าของ "y" เป็น 1, 2 หรือ 3 เสมอ ดังนั้น "x" จะถูกเริ่มต้นเสมอ แต่ GCC
ไม่รู้เรื่องนี้ หากต้องการระงับคำเตือน คุณต้องระบุกรณีเริ่มต้นด้วย
ยืนยัน(0) หรือรหัสที่คล้ายกัน

ตัวเลือกนี้ยังเตือนเมื่อตัวแปรอัตโนมัติแบบไม่ลบเลือนอาจถูกเปลี่ยนโดยa
โทรไปที่ "longjmp" คำเตือนเหล่านี้สามารถทำได้ในการเพิ่มประสิทธิภาพเท่านั้น
การรวบรวม.

คอมไพเลอร์เห็นเฉพาะการเรียกไปยัง "setjmp" มันไม่รู้ว่า "longjmp" จะอยู่ตรงไหน
เรียกว่า; อันที่จริง ตัวจัดการสัญญาณสามารถเรียกมันเมื่อใดก็ได้ในโค้ด ในฐานะที่เป็น
ผลคุณอาจได้รับคำเตือนแม้ว่าจะไม่มีปัญหาเพราะ "longjmp"
แท้จริงแล้วไม่สามารถเรียกในสถานที่ที่จะก่อให้เกิดปัญหาได้

คุณสามารถหลีกเลี่ยงคำเตือนปลอมบางอย่างได้หากคุณประกาศฟังก์ชันทั้งหมดที่คุณใช้นั้น
ไม่กลับมาเป็น "นเรศวร"

คำเตือนนี้เปิดใช้งานโดย -ผนัง or -Wextra.

-Wunknown-pragmas
เตือนเมื่อพบคำสั่ง "#pragma" ที่ GCC ไม่เข้าใจ ถ้านี้
ใช้ตัวเลือกบรรทัดคำสั่ง คำเตือนจะออกสำหรับ Pragmas ที่ไม่รู้จักในระบบ
ไฟล์ส่วนหัว กรณีนี้จะไม่เป็นเช่นนั้นหากคำเตือนเปิดใช้งานโดย .เท่านั้น -ผนัง
ตัวเลือกบรรทัดคำสั่ง

-Wno-pragmas
อย่าเตือนเกี่ยวกับการใช้ Pragmas ในทางที่ผิด เช่น พารามิเตอร์ที่ไม่ถูกต้อง ไวยากรณ์ที่ไม่ถูกต้อง หรือ
ความขัดแย้งระหว่าง Pragmas ดูสิ่งนี้ด้วย -Wunknown-pragmas.

-Wstrict-นามแฝง
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -fstrict-นามแฝง มีการใช้งาน มันเตือนเกี่ยวกับรหัสที่
อาจทำลายกฎนามแฝงที่เข้มงวดที่คอมไพเลอร์ใช้เพื่อการปรับให้เหมาะสม
คำเตือนไม่จับทุกกรณี แต่พยายามจับกรณีทั่วไปมากขึ้น
หลุมพราง รวมอยู่ใน -ผนัง. เทียบเท่ากับ -Wstrict-นามแฝง=3

-Wstrict-นามแฝง=n
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -fstrict-นามแฝง มีการใช้งาน มันเตือนเกี่ยวกับรหัสที่
อาจทำลายกฎนามแฝงที่เข้มงวดที่คอมไพเลอร์ใช้เพื่อการปรับให้เหมาะสม
ระดับที่สูงขึ้นสอดคล้องกับความแม่นยำที่สูงขึ้น (ผลบวกลวงน้อยลง) ระดับที่สูงขึ้น
ยังสอดคล้องกับความพยายามมากขึ้นคล้ายกับวิธี -O โรงงาน -Wstrict-นามแฝง is
เทียบเท่ากับ -Wstrict-นามแฝง=3.

ระดับ 1: ก้าวร้าวที่สุด รวดเร็ว แม่นยำน้อยที่สุด อาจมีประโยชน์เมื่อระดับที่สูงขึ้น
ไม่เตือนแต่ -fstrict-นามแฝง ยังคงทำลายรหัสเนื่องจากมีเท็จน้อยมาก
เชิงลบ อย่างไรก็ตาม มันมีผลบวกลวงมากมาย เตือนสำหรับการแปลงตัวชี้ทั้งหมด
ระหว่างประเภทที่เข้ากันไม่ได้แม้ว่าจะไม่เคยถูกละเลยก็ตาม วิ่งไปข้างหน้า
สิ้นสุดเท่านั้น

ระดับ 2: ก้าวร้าว รวดเร็ว ไม่แม่นยำเกินไป อาจยังมีผลบวกลวงมากมาย (ไม่ใช่
มากถึงระดับ 1 แม้ว่า) และเชิงลบที่ผิดพลาดเล็กน้อย (แต่อาจมากกว่าระดับ 1)
ต่างจากระดับ 1 โดยจะเตือนเฉพาะเมื่อมีการใช้ที่อยู่เท่านั้น เตือนเกี่ยวกับประเภทที่ไม่สมบูรณ์
วิ่งเฉพาะส่วนหน้าเท่านั้น

ระดับ 3 (ค่าเริ่มต้นสำหรับ -Wstrict-นามแฝง): ควรมีผลบวกลวงน้อยมากและน้อย
เชิงลบที่เป็นเท็จ ช้ากว่าระดับ 1 หรือ 2 เล็กน้อยเมื่อเปิดใช้งานการปรับให้เหมาะสม
ดูแลรูปแบบ pun+dereference ทั่วไปในส่วนหน้า:
"*(int*)&some_float". หากเปิดใช้งานการปรับให้เหมาะสม มันจะทำงานในแบ็กเอนด์ด้วย โดยที่
มันเกี่ยวข้องกับกรณีคำสั่งหลายกรณีโดยใช้ข้อมูลจุดต่อการไหลของข้อมูล
เตือนเฉพาะเมื่อตัวชี้ที่แปลงแล้วถูกยกเลิกการอ้างอิง ไม่เตือนเกี่ยวกับความไม่สมบูรณ์
ประเภท

-Wstrict-ล้น
-Wstrict-ล้น=n
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -fstrict-ล้น มีการใช้งาน มันเตือนเกี่ยวกับกรณี
โดยที่คอมไพเลอร์ปรับให้เหมาะสมตามสมมติฐานที่ว่าโอเวอร์โฟลว์ที่ลงนามไม่ได้
เกิดขึ้น. โปรดทราบว่าจะไม่เตือนในทุกกรณีที่โค้ดอาจล้น: it
เตือนเฉพาะกรณีที่คอมไพเลอร์ใช้การปรับให้เหมาะสม ดังนั้นสิ่งนี้
คำเตือนขึ้นอยู่กับระดับการเพิ่มประสิทธิภาพ

การปรับให้เหมาะสมที่ถือว่าการล้นที่ลงนามไม่เกิดขึ้นนั้นปลอดภัยอย่างสมบูรณ์ถ้า
ค่าของตัวแปรที่เกี่ยวข้องนั้นเป็นแบบที่ล้นไม่เคยทำ อันที่จริง
เกิดขึ้น. ดังนั้นคำเตือนนี้สามารถให้ผลบวกที่ผิดพลาดได้อย่างง่ายดาย: คำเตือนเกี่ยวกับรหัส
นั่นไม่ใช่ปัญหาจริงๆ เพื่อช่วยเน้นประเด็นสำคัญหลายคำเตือน
มีการกำหนดระดับ ไม่มีคำเตือนสำหรับการใช้โอเวอร์โฟลว์ลงนามที่ไม่ได้กำหนด
เมื่อประเมินจำนวนวนซ้ำที่ต้องการ โดยเฉพาะอย่างยิ่งเมื่อพิจารณา
ไม่ว่าจะวนซ้ำหรือไม่

-Wstrict-ล้น=1
เตือนเกี่ยวกับกรณีที่ทั้งน่าสงสัยและง่ายต่อการหลีกเลี่ยง ตัวอย่างเช่น กับ
-fstrict-ล้นคอมไพเลอร์ลดความซับซ้อน "x + 1 > x" เป็น 1 ระดับของ
-Wstrict-ล้น เปิดใช้งานโดย -ผนัง; ระดับที่สูงกว่าไม่ใช่และจะต้องเป็น
ร้องขออย่างชัดแจ้ง

-Wstrict-ล้น=2
ยังเตือนเกี่ยวกับกรณีอื่นๆ ที่การเปรียบเทียบถูกทำให้ง่ายขึ้นเป็นค่าคงที่ สำหรับ
ตัวอย่าง: "หน้าท้อง (x) >= 0" สิ่งนี้สามารถทำให้ง่ายขึ้นได้ก็ต่อเมื่อ -fstrict-ล้น ที่อยู่ใน
ผลกระทบ เนื่องจาก "abs (INT_MIN)" ล้นไปที่ "INT_MIN" ซึ่งน้อยกว่าศูนย์
-Wstrict-ล้น (ไม่มีระดับ) เท่ากับ -Wstrict-ล้น=2.

-Wstrict-ล้น=3
ยังเตือนเกี่ยวกับกรณีอื่นๆ ที่ทำให้การเปรียบเทียบง่ายขึ้น ตัวอย่างเช่น: "x + 1
> 1" ถูกลดทอนเป็น "x > 0"

-Wstrict-ล้น=4
ยังเตือนเกี่ยวกับความง่ายอื่น ๆ ที่ไม่ครอบคลุมโดยกรณีข้างต้น สำหรับ
ตัวอย่าง: "(x * 10) / 5" ถูกลดรูปเป็น "x * 2"

-Wstrict-ล้น=5
ยังเตือนเกี่ยวกับกรณีที่คอมไพเลอร์ลดขนาดของค่าคงที่
ที่เกี่ยวข้องในการเปรียบเทียบ ตัวอย่างเช่น: "x + 2 > y" ถูกลดทอนเป็น "x + 1 >= y"
มีการรายงานในระดับการเตือนสูงสุดเท่านั้นเนื่องจากการทำให้เข้าใจง่ายนี้
ใช้กับการเปรียบเทียบหลายๆ อย่าง ดังนั้นระดับการเตือนนี้จึงมี . จำนวนมาก
บวกเท็จ

-Wsuggest-attribute=[บริสุทธิ์|const|นอร์เทิร์น|รูป]
เตือนในกรณีที่การเพิ่มแอตทริบิวต์อาจเป็นประโยชน์ คุณสมบัติในปัจจุบัน
รองรับตามรายการด้านล่าง

-Wsuggest-attribute=pure
-Wsuggest-attribute=const
-Wsuggest-attribute=noreturn
เตือนเกี่ยวกับฟังก์ชันที่อาจเป็นตัวเลือกสำหรับแอตทริบิวต์ "บริสุทธิ์", "const" หรือ
"นอร์เทิร์น". คอมไพเลอร์เตือนเฉพาะฟังก์ชันที่มองเห็นได้ในคอมไพล์อื่นๆ
หน่วยหรือ (ในกรณีของ "บริสุทธิ์" และ "ค่าคงตัว") หากไม่สามารถพิสูจน์ได้ว่าฟังก์ชัน
กลับเป็นปกติ ฟังก์ชันจะคืนค่าตามปกติหากไม่มี infinite
วนซ้ำหรือกลับอย่างผิดปกติโดยการขว้าง เรียก "ยกเลิก" หรือการดักจับ บทวิเคราะห์นี้
ต้องการตัวเลือก -fipa-บริสุทธิ์-constซึ่งเปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า
ระดับการปรับให้เหมาะสมที่สูงขึ้นจะช่วยปรับปรุงความแม่นยำของการวิเคราะห์

-Wsuggest-attribute=format
-Wmissing รูปแบบแอตทริบิวต์
เตือนเกี่ยวกับพอยน์เตอร์ฟังก์ชันที่อาจเป็นตัวเลือกสำหรับแอตทริบิวต์ "รูปแบบ"
โปรดทราบว่าสิ่งเหล่านี้เป็นเพียงผู้สมัครที่เป็นไปได้ ไม่ใช่ผู้สมัครที่สัมบูรณ์ GCC คาดเดาว่า
ตัวชี้ฟังก์ชันพร้อมแอตทริบิวต์ "รูปแบบ" ที่ใช้ในการมอบหมาย
การเริ่มต้น การส่งพารามิเตอร์ หรือคำสั่งส่งคืนควรมีค่าที่สอดคล้องกัน
แอตทริบิวต์ "รูปแบบ" ในประเภทผลลัพธ์ คือด้านซ้ายมือของ
การกำหนดหรือการกำหนดค่าเริ่มต้น ประเภทของตัวแปรพารามิเตอร์ หรือการส่งคืน
ประเภทของฟังก์ชันที่มีตามลำดับควรมีแอตทริบิวต์ "รูปแบบ" ด้วย
เพื่อหลีกเลี่ยงคำเตือน

GCC ยังเตือนเกี่ยวกับคำจำกัดความของฟังก์ชันที่อาจเป็นตัวเลือกสำหรับ "รูปแบบ"
คุณลักษณะ. นี่เป็นเพียงผู้สมัครที่เป็นไปได้เท่านั้น GCC เดาว่า "รูปแบบ"
คุณลักษณะอาจเหมาะสมกับฟังก์ชันใด ๆ ที่เรียกใช้ฟังก์ชันเช่น
"vprintf" หรือ "vscanf" แต่อาจไม่เป็นเช่นนั้นเสมอไป และบางฟังก์ชัน
อาจตรวจไม่พบแอตทริบิวต์ "รูปแบบ" ที่เหมาะสม

-Wsuggest-final-types
เตือนเกี่ยวกับประเภทด้วยวิธีเสมือนที่คุณภาพของโค้ดจะดีขึ้นหากประเภท
ถูกประกาศด้วยตัวระบุ "ขั้นสุดท้าย" ของ C++11 หรือหากเป็นไปได้ ให้ประกาศใน an
เนมสเปซที่ไม่ระบุชื่อ สิ่งนี้ทำให้ GCC สามารถ devirtualize the polymorphic . ในเชิงรุกมากขึ้น
โทร. คำเตือนนี้มีประสิทธิภาพมากขึ้นด้วยการเพิ่มประสิทธิภาพเวลาลิงก์ โดยที่
ข้อมูลเกี่ยวกับกราฟลำดับชั้นของคลาสมีความสมบูรณ์มากขึ้น

-Wsuggest-final-methods
เตือนเกี่ยวกับวิธีการเสมือนที่จะปรับปรุงคุณภาพของโค้ดหากวิธีการเป็น
ประกาศด้วยตัวระบุ "สุดท้าย" ของ C++11 หรือหากเป็นไปได้ ประเภทของมันถูกประกาศใน
เนมสเปซที่ไม่ระบุชื่อหรือตัวระบุ "สุดท้าย" คำเตือนนี้มีประสิทธิภาพมากกว่า
ด้วยการเพิ่มประสิทธิภาพเวลาลิงก์ โดยที่ข้อมูลเกี่ยวกับกราฟลำดับชั้นคือ
สมบูรณ์ยิ่งขึ้น ขอแนะนำให้พิจารณาข้อเสนอแนะของ .ก่อน
-Wsuggest-final-types แล้วสร้างใหม่ด้วยคำอธิบายประกอบใหม่

-Wsuggest-แทนที่
เตือนเกี่ยวกับการแทนที่ฟังก์ชันเสมือนที่ไม่ได้ทำเครื่องหมายด้วยคำสำคัญแทนที่

-Warray ขอบเขต
-Warray-bounds=n
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -ftree-vrp เปิดใช้งานอยู่ (ค่าเริ่มต้นสำหรับ -O2 ขึ้นไป) มัน
เตือนเกี่ยวกับตัวห้อยไปยังอาร์เรย์ที่อยู่นอกขอบเขตเสมอ คำเตือนนี้คือ
เปิดใช้งานโดย -ผนัง.

-Warray-bounds=1
นี่คือระดับการเตือนของ -Warray ขอบเขต และเปิดใช้งานโดย -ผนัง; ระดับที่สูงขึ้น
ไม่ได้และจะต้องได้รับการร้องขออย่างชัดเจน

-Warray-bounds=2
ระดับการเตือนนี้ยังเตือนเกี่ยวกับการเข้าถึงนอกขอบเขตสำหรับอาร์เรย์ที่ส่วนท้ายของ
struct และสำหรับอาร์เรย์ที่เข้าถึงผ่านพอยน์เตอร์ ระดับการเตือนนี้อาจให้
ผลบวกปลอมจำนวนมากขึ้นและถูกปิดใช้งานโดยค่าเริ่มต้น

-Wbool-เปรียบเทียบ
เตือนเกี่ยวกับนิพจน์บูลีนเมื่อเปรียบเทียบกับค่าจำนวนเต็มที่แตกต่างจาก
"ถูกผิด". ตัวอย่างเช่น การเปรียบเทียบต่อไปนี้เป็นเท็จเสมอ:

int n = 5;
...
ถ้า ((n > 1) == 2) { ... }

คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wno-ทิ้ง-รอบคัดเลือก (C และ Objective-C เท่านั้น)
อย่าเตือนหากตัวระบุประเภทบนตัวชี้กำลังถูกยกเลิก โดยปกติ
คอมไพเลอร์เตือนว่าตัวแปร "const char *" ถูกส่งไปยังฟังก์ชันที่ใช้ "char ." หรือไม่
*" พารามิเตอร์ ตัวเลือกนี้สามารถใช้เพื่อระงับการเตือนดังกล่าว

-Wno-ทิ้ง-อาร์เรย์-รอบคัดเลือก (C และ Objective-C เท่านั้น)
อย่าเตือนหากตัวระบุประเภทในอาร์เรย์ที่เป็นเป้าหมายของตัวชี้กำลัง
ทิ้ง โดยทั่วไป คอมไพเลอร์จะเตือนว่าตัวแปร "const int (*)[]" ถูกส่งไปยัง
ฟังก์ชั่นที่ใช้พารามิเตอร์ "int (*)[]" ตัวเลือกนี้สามารถใช้เพื่อระงับ
คำเตือนดังกล่าว

-Wno-เข้ากันไม่ได้-ตัวชี้-ประเภท (C และ Objective-C เท่านั้น)
อย่าเตือนเมื่อมีการแปลงระหว่างพอยน์เตอร์ที่มีประเภทที่เข้ากันไม่ได้
คำเตือนนี้สำหรับกรณีที่ไม่ได้ครอบคลุมโดย -Wno-ตัวชี้-สัญญาณซึ่งเตือนสำหรับตัวชี้
อาร์กิวเมนต์ส่งผ่านหรือมอบหมายด้วยลายเซ็นที่แตกต่างกัน

-Wno-int-แปลง (C และ Objective-C เท่านั้น)
อย่าเตือนเกี่ยวกับการแปลงจำนวนเต็มไปยังตัวชี้และตัวชี้ไปยังการแปลงจำนวนเต็มที่เข้ากันไม่ได้
คำเตือนนี้เกี่ยวกับการแปลงโดยนัย สำหรับการแปลงคำเตือนที่ชัดเจน
-Wno-int-to-pointer-cast และ -Wno-ตัวชี้ไปยัง int-cast อาจจะใช้.

-Wno-div-by-zero
อย่าเตือนเกี่ยวกับการหารจำนวนเต็มเวลาคอมไพล์ด้วยศูนย์ หารจุดทศนิยมโดย
ศูนย์จะไม่ได้รับการเตือนเนื่องจากอาจเป็นวิธีที่ถูกต้องในการรับอินฟินิตี้และ
น่าน

-Wsystem-ส่วนหัว
พิมพ์ข้อความเตือนสำหรับโครงสร้างที่พบในไฟล์ส่วนหัวของระบบ คำเตือนจาก
ปกติส่วนหัวของระบบจะถูกระงับ โดยสันนิษฐานว่ามักจะไม่
ระบุปัญหาที่แท้จริงและจะทำให้คอมไพเลอร์เอาต์พุตอ่านยากขึ้นเท่านั้น โดยใช้
ตัวเลือกบรรทัดคำสั่งนี้บอกให้ GCC ส่งคำเตือนจากส่วนหัวของระบบราวกับว่าพวกเขา
เกิดขึ้นในรหัสผู้ใช้ อย่างไรก็ตาม โปรดทราบว่าการใช้ -ผนัง ร่วมกับตัวเลือกนี้
ทำ ไม่ เตือนเกี่ยวกับ Pragmas ที่ไม่รู้จักในส่วนหัวของระบบ---เพื่อสิ่งนั้น -Wunknown-pragmas
ต้องใช้ด้วย

-แทรมโพลีน
เตือนเกี่ยวกับแทรมโพลีนที่สร้างขึ้นสำหรับตัวชี้ไปยังฟังก์ชันที่ซ้อนกัน แทรมโพลีนคือ a
ข้อมูลหรือรหัสชิ้นเล็ก ๆ ที่สร้างขึ้นในขณะทำงานบนสแต็กเมื่อที่อยู่
ของฟังก์ชันที่ซ้อนกันถูกนำมาใช้ และใช้เพื่อเรียกใช้ฟังก์ชันที่ซ้อนกันทางอ้อม
สำหรับบางเป้าหมาย ข้อมูลจะประกอบด้วยข้อมูลเท่านั้น จึงไม่ต้องมีการดูแลเป็นพิเศษ
แต่สำหรับเป้าหมายส่วนใหญ่ มันประกอบด้วยโค้ดและดังนั้นจึงต้องมีการสร้างสแต็ก
ปฏิบัติการเพื่อให้โปรแกรมทำงานได้อย่างถูกต้อง

-Wfloat-เท่ากับ
เตือนหากใช้ค่าทศนิยมในการเปรียบเทียบความเท่าเทียมกัน

แนวคิดเบื้องหลังนี้คือบางครั้งสะดวก (สำหรับโปรแกรมเมอร์) ถึง
พิจารณาค่าทศนิยมเป็นค่าประมาณของจำนวนจริงที่แม่นยำอย่างไม่สิ้นสุด
หากคุณกำลังทำสิ่งนี้ คุณต้องคำนวณ (โดยการวิเคราะห์โค้ดหรือบางส่วน
วิธีอื่น) ข้อผิดพลาดสูงสุดหรือที่เป็นไปได้สูงสุดที่การคำนวณแนะนำและ
อนุญาตเมื่อทำการเปรียบเทียบ (และเมื่อผลิตผลลัพธ์ แต่นั่นคือa
ปัญหาที่แตกต่างกัน) โดยเฉพาะอย่างยิ่ง แทนที่จะทดสอบความเท่าเทียมกัน คุณควรตรวจสอบ
เพื่อดูว่าค่าทั้งสองมีช่วงที่คาบเกี่ยวกันหรือไม่ และสิ่งนี้เสร็จสิ้นด้วย
ตัวดำเนินการเชิงสัมพันธ์ ดังนั้นการเปรียบเทียบความเท่าเทียมกันจึงอาจผิดพลาดได้

-แบบดั้งเดิม (C และ Objective-C เท่านั้น)
เตือนเกี่ยวกับโครงสร้างบางอย่างที่ทำงานแตกต่างกันในแบบดั้งเดิมและ ISO C นอกจากนี้
เตือนเกี่ยวกับโครงสร้าง ISO C ที่ไม่มี C เทียบเท่าแบบเดิมและ/หรือมีปัญหา
โครงสร้างที่ควรหลีกเลี่ยง

* พารามิเตอร์มาโครที่ปรากฏภายในตัวอักษรสตริงในตัวแมโคร ใน
การแทนที่มาโคร C แบบดั้งเดิมเกิดขึ้นภายในตัวอักษรสตริง แต่ใน ISO C
มันไม่ใช่.

* ในแบบดั้งเดิม C ไม่มีคำสั่งพรีโปรเซสเซอร์บางตัว แบบดั้งเดิม
ตัวประมวลผลล่วงหน้าถือว่าบรรทัดเป็นคำสั่งเท่านั้นหาก # ปรากฏในคอลัมน์
1 ในบรรทัด ดังนั้น -แบบดั้งเดิม เตือนเกี่ยวกับคำสั่งที่ดั้งเดิมC
เข้าใจแต่ละเลยเพราะว่า # ไม่ปรากฏเป็นอักขระตัวแรกบน
เส้น. นอกจากนี้ยังแนะนำให้คุณซ่อนคำสั่งเช่น "#pragma" ที่ไม่เข้าใจ
ดั้งเดิม C โดยเยื้องพวกเขา การใช้งานแบบดั้งเดิมบางอย่างไม่
รู้จัก "#elif" ดังนั้นตัวเลือกนี้จึงแนะนำให้หลีกเลี่ยงโดยสิ้นเชิง

* มาโครเหมือนฟังก์ชันที่ปรากฏขึ้นโดยไม่มีอาร์กิวเมนต์

* ตัวดำเนินการ unary plus

* ความ U คำต่อท้ายค่าคงที่จำนวนเต็มหรือ F or L คำต่อท้ายค่าคงที่ทศนิยม
(ตัว C ดั้งเดิมรองรับ L ต่อท้ายค่าคงที่จำนวนเต็ม) หมายเหตุ these
คำต่อท้ายปรากฏในมาโครที่กำหนดไว้ในส่วนหัวของระบบของระบบที่ทันสมัยที่สุด
เช่น _นาที/_MAX มาโครใน " " การใช้มาโครเหล่านี้ในรหัสผู้ใช้อาจ
ปกติจะนำไปสู่คำเตือนที่หลอกลวง อย่างไรก็ตาม ตัวประมวลผลล่วงหน้าแบบรวมของ GCC มี
บริบทที่เพียงพอเพื่อหลีกเลี่ยงการเตือนในกรณีเหล่านี้

* ฟังก์ชั่นที่ประกาศภายนอกในหนึ่งบล็อกแล้วใช้หลังจากสิ้นสุด
กลุ่ม

* คำสั่ง "switch" มีตัวถูกดำเนินการประเภท "long"

* การประกาศฟังก์ชันที่ไม่ใช่แบบ "คงที่" ตามหลังฟังก์ชัน "คงที่" โครงสร้างนี้ไม่ใช่
ยอมรับโดยคอมไพเลอร์ C ดั้งเดิมบางตัว

* ประเภท ISO ของค่าคงที่จำนวนเต็มมีความกว้างหรือการลงนามที่แตกต่างจาก
ประเภทดั้งเดิม คำเตือนนี้ออกเฉพาะเมื่อฐานของค่าคงที่เป็นสิบ
เช่น ค่าเลขฐานสิบหกหรือฐานแปด ซึ่งโดยทั่วไปจะแทนรูปแบบบิต ไม่ใช่
เตือนเกี่ยวกับ

* ตรวจพบการใช้การต่อสตริง ISO

* การเริ่มต้นของการรวมอัตโนมัติ

* ตัวระบุขัดแย้งกับป้ายกำกับ C ดั้งเดิมไม่มีเนมสเปซแยกต่างหากสำหรับ
ป้ายชื่อ

* การเริ่มต้นของสหภาพแรงงาน ถ้า initializer เป็นศูนย์ คำเตือนจะถูกละเว้น
สิ่งนี้ทำภายใต้สมมติฐานว่าตัวเริ่มต้นศูนย์ในรหัสผู้ใช้ปรากฏขึ้น
ปรับสภาพเช่น "__STDC__" เพื่อหลีกเลี่ยงคำเตือนตัวเริ่มต้นที่ขาดหายไปและต้องอาศัย
การเริ่มต้นเริ่มต้นเป็นศูนย์ในกรณี C ดั้งเดิม

* การแปลงโดยต้นแบบระหว่างค่าคงที่/จุดลอยตัวและในทางกลับกัน NS
ขาดต้นแบบเหล่านี้เมื่อคอมไพล์ด้วย C ดั้งเดิมทำให้เกิดความร้ายแรง
ปัญหา. นี่เป็นส่วนย่อยของคำเตือนการแปลงที่เป็นไปได้ สำหรับทั้งชุด
ใช้ -Wtraditional-การแปลง.

* การใช้คำจำกัดความของฟังก์ชันสไตล์ ISO C คำเตือนนี้จงใจคือ ไม่ ออก
สำหรับการประกาศต้นแบบหรือฟังก์ชันแปรผันเนื่องจากคุณสมบัติ ISO C เหล่านี้
ปรากฏในรหัสของคุณเมื่อใช้มาโครความเข้ากันได้ C ดั้งเดิมของ libiberty
"PARAMS" และ "VPARAMS" คำเตือนนี้จะถูกข้ามไปสำหรับฟังก์ชันที่ซ้อนกัน
เนื่องจากคุณลักษณะนั้นเป็นส่วนขยาย GCC อยู่แล้วจึงไม่เกี่ยวข้องกับ
ความเข้ากันได้ C แบบดั้งเดิม

-Wtraditional-การแปลง (C และ Objective-C เท่านั้น)
เตือนถ้าต้นแบบทำให้เกิดการแปลงประเภทที่แตกต่างจากสิ่งที่จะเกิดขึ้น
ไปเป็นข้อโต้แย้งเดียวกันในกรณีที่ไม่มีต้นแบบ ซึ่งรวมถึงการแปลงของ
คงที่จุดลอยและในทางกลับกันและการแปลงเปลี่ยนความกว้างหรือ
การลงนามของอาร์กิวเมนต์ที่มีจุดคงที่ ยกเว้นเมื่อเหมือนกับการเลื่อนตำแหน่งเริ่มต้น

-Wdeclaration-หลังคำสั่ง (C และ Objective-C เท่านั้น)
เตือนเมื่อพบการประกาศหลังจากคำสั่งในบล็อก โครงสร้างนี้เป็นที่รู้จัก
จาก C ++ ถูกนำมาใช้กับ ISO C99 และได้รับอนุญาตตามค่าเริ่มต้นใน GCC มันไม่ใช่
รองรับ ISO C90

-วันเดฟ
เตือนหากตัวระบุที่ไม่ได้กำหนดได้รับการประเมินในคำสั่ง "#if"

-Wno-endif-ป้ายกำกับ
อย่าเตือนทุกครั้งที่มีข้อความตามด้วย "#else" หรือ "#endif"

-เงา
เตือนเมื่อใดก็ตามที่ตัวแปรท้องถิ่นหรือการประกาศประเภทปิดบังตัวแปรอื่น
พารามิเตอร์ ประเภท สมาชิกคลาส (ใน C++) หรือตัวแปรอินสแตนซ์ (ใน Objective-C) หรือ
เมื่อใดก็ตามที่ฟังก์ชันในตัวถูกแรเงา โปรดทราบว่าใน C ++ คอมไพเลอร์จะเตือนว่า a
ตัวแปรโลคัลจะแรเงา typedef ที่ชัดเจน แต่ไม่ใช่ถ้ามันทำให้เงา struct/class/enum

-Wno-เงา-ไอวาร์ (วัตถุประสงค์-C เท่านั้น)
อย่าเตือนเมื่อใดก็ตามที่ตัวแปรในพื้นที่เงาตัวแปรอินสแตนซ์ใน Objective-C
วิธี

- ใหญ่กว่า =len
เตือนเมื่อใดก็ตามที่วัตถุมีขนาดใหญ่กว่า len ไบต์ถูกกำหนด

-Wframe-ขนาดใหญ่กว่า=len
เตือนถ้าขนาดของกรอบฟังก์ชันใหญ่กว่า len ไบต์ คำนวณเสร็จ
เพื่อกำหนดขนาดเฟรมสแต็กเป็นค่าประมาณและไม่อนุรักษ์นิยม ที่เกิดขึ้นจริง
ความต้องการอาจจะมากกว่า .บ้าง len แม้ว่าคุณจะไม่ได้รับการเตือน ใน
นอกจากนี้ พื้นที่ใด ๆ ที่จัดสรรผ่าน "alloca" อาร์เรย์ความยาวผันแปรหรือที่เกี่ยวข้อง
โครงสร้างไม่ได้รวมโดยคอมไพเลอร์เมื่อพิจารณาว่าจะออกa .หรือไม่
การเตือน

-Wno-free-nonheap-object
อย่าเตือนเมื่อพยายามเพิ่มวัตถุที่ไม่ได้จัดสรรบนฮีป

-Wstack-การใช้งาน=len
เตือนว่าการใช้สแต็กของฟังก์ชันอาจมากกว่า len ไบต์ การคำนวณ
ทำเพื่อพิจารณาว่าการใช้สแต็กเป็นแบบอนุรักษ์นิยม พื้นที่ใด ๆ ที่จัดสรรผ่าน "alloca"
อาร์เรย์ความยาวผันแปรหรือโครงสร้างที่เกี่ยวข้องรวมอยู่ในคอมไพเลอร์เมื่อ
กำหนดว่าจะออกคำเตือนหรือไม่

ข้อความสอดคล้องกับผลลัพธ์ของ -fstack-การใช้งาน.

* หากการใช้งานสแต็กเป็นแบบสแตติกโดยสมบูรณ์แต่เกินจำนวนที่ระบุ จะเป็นดังนี้:

คำเตือน: การใช้สแต็กคือ 1120 ไบต์

* หากการใช้สแต็ก (บางส่วน) เป็นไดนามิก แต่มีขอบเขต จะเป็น:

คำเตือน: การใช้สแต็กอาจเป็น 1648 ไบต์

* หากการใช้งานสแต็ก (บางส่วน) เป็นไดนามิกและไม่มีขอบเขต แสดงว่า:

คำเตือน: การใช้สแต็กอาจไม่มีขอบเขต

-Wunsafe-loop-optimizations
เตือนถ้าลูปไม่สามารถปรับให้เหมาะสมได้เพราะคอมไพเลอร์ไม่สามารถคาดเดาอะไรได้
ขอบเขตของดัชนีลูป กับ -funsafe-loop-optimizations เตือนถ้าคอมไพเลอร์
ทำให้เกิดสมมติฐานดังกล่าว

-Wno-อวดดี-ms-รูปแบบ (เป้าหมาย MinGW เท่านั้น)
เมื่อใช้ร่วมกับ -Wformat และ -อวดดี ไม่มีนามสกุล GNU นี่
ตัวเลือกปิดการใช้งานคำเตือนเกี่ยวกับตัวระบุความกว้างรูปแบบ "printf" / "scanf" ที่ไม่ใช่ ISO
"I32", "I64" และ "I" ใช้กับเป้าหมายของ Windows ซึ่งขึ้นอยู่กับรันไทม์ของ MS

-Wpointer-arith
เตือนเกี่ยวกับสิ่งที่ขึ้นอยู่กับ "ขนาด" ของประเภทฟังก์ชันหรือ "โมฆะ" GNU C
กำหนดขนาดเหล่านี้เป็น 1 เพื่อความสะดวกในการคำนวณด้วย "เป็นโมฆะ *"
ตัวชี้และตัวชี้ไปยังฟังก์ชัน ใน C ++ ให้เตือนเมื่อดำเนินการเลขคณิตด้วย
เกี่ยวข้องกับ "NULL" คำเตือนนี้ยังเปิดใช้งานโดย -Wpedantic.

-Wtype-จำกัด
เตือนว่าการเปรียบเทียบเป็นจริงเสมอหรือเท็จเสมอเนื่องจากช่วงที่จำกัดของ
ชนิดข้อมูล แต่ไม่เตือนสำหรับนิพจน์คงที่ ตัวอย่างเช่น เตือนถ้า unsigned
ตัวแปรจะถูกเปรียบเทียบกับศูนย์ด้วย "<" หรือ ">=" คำเตือนนี้ยังเปิดใช้งานโดย
-Wextra.

-Wbad-ฟังก์ชั่น-cast (C และ Objective-C เท่านั้น)
เตือนเมื่อมีการเรียกใช้ฟังก์ชันเป็นประเภทที่ไม่ตรงกัน เช่น เตือนถ้าโทร
ฟังก์ชันที่ส่งคืนประเภทจำนวนเต็มจะถูกแปลงเป็นประเภทตัวชี้

-Wc90-c99-compat (C และ Objective-C เท่านั้น)
เตือนเกี่ยวกับคุณสมบัติที่ไม่มีอยู่ใน ISO C90 แต่มีอยู่ใน ISO C99 ตัวอย่างเช่น
เตือนเกี่ยวกับการใช้อาร์เรย์ความยาวผันแปร ประเภท "ยาวยาว" ประเภท "บูล" ผสม
ตัวอักษร ตัวเริ่มต้นที่กำหนด และอื่นๆ ตัวเลือกนี้ไม่ขึ้นกับ
โหมดมาตรฐาน คำเตือนถูกปิดใช้งานในนิพจน์ที่ตามหลัง "__extension__"

-Wc99-c11-compat (C และ Objective-C เท่านั้น)
เตือนเกี่ยวกับคุณสมบัติที่ไม่มีอยู่ใน ISO C99 แต่มีอยู่ใน ISO C11 ตัวอย่างเช่น
เตือนเกี่ยวกับการใช้โครงสร้างและสหภาพที่ไม่ระบุชื่อตัวระบุประเภท "_Atomic"
ตัวระบุคลาสพื้นที่เก็บข้อมูล "_Thread_local" ตัวระบุ "_Alignas" ตัวดำเนินการ "Alignof"
คีย์เวิร์ด "_Generic" และอื่นๆ ตัวเลือกนี้ไม่ขึ้นกับโหมดมาตรฐาน
คำเตือนถูกปิดใช้งานในนิพจน์ที่ตามหลัง "__extension__"

-Wc++-เข้ากันได้กับ (C และ Objective-C เท่านั้น)
เตือนเกี่ยวกับโครงสร้าง ISO C ที่ไม่ใช่ชุดย่อยทั่วไปของ ISO C และ ISO
C++ เช่น ขอแปลงโดยนัยจาก "เป็นโมฆะ *" เป็นตัวชี้เป็นไม่ใช่ "โมฆะ"
ชนิด

-Wc++11-compat (C++ และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับโครงสร้าง C++ ที่ความหมายแตกต่างกันระหว่าง ISO C++ 1998 และ ISO C++ 2011
เช่น ตัวระบุใน ISO C++ 1998 ที่เป็นคีย์เวิร์ดใน ISO C++ 2011 คำเตือนนี้
เปิด -Wnarrowing และเปิดใช้งานโดย -ผนัง.

-Wc++14-compat (C++ และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับโครงสร้าง C++ ที่ความหมายแตกต่างกันระหว่าง ISO C++ 2011 และ ISO C++ 2014
คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wcast-qual
เตือนทุกครั้งที่ใช้ตัวชี้เพื่อลบตัวระบุประเภทออกจากประเภทเป้าหมาย
ตัวอย่างเช่น เตือนว่า "const char *" ถูกเปลี่ยนเป็น "char *" ธรรมดาหรือไม่

เตือนเมื่อทำการแคสต์ที่แนะนำตัวระบุประเภทในลักษณะที่ไม่ปลอดภัย สำหรับ
ตัวอย่าง การแคสต์ "char **" เป็น "const char **" นั้นไม่ปลอดภัย ดังในตัวอย่างนี้:

/* p คือค่าถ่าน ** */
const ถ่าน **q = (const ถ่าน **) ​​p;
/* การกำหนดสตริงแบบอ่านอย่างเดียวให้กับ const char * นั้นใช้ได้ */
*q = "สตริง";
/* ตอนนี้ตัวชี้ถ่าน** ชี้ไปที่หน่วยความจำแบบอ่านอย่างเดียว */
**p = 'b';

-Wcast-จัดตำแหน่ง
เตือนทุกครั้งที่มีการร่ายตัวชี้เพื่อให้ตำแหน่งของเป้าหมายเป็น
เพิ่มขึ้น. ตัวอย่างเช่น เตือนว่า "ถ่าน *" ถูกส่งไปยัง "int *" บนเครื่องที่
จำนวนเต็มสามารถเข้าถึงได้ที่ขอบเขตสองหรือสี่ไบต์เท่านั้น

-Wwrite-สตริง
เมื่อรวบรวม C ให้ประเภทค่าคงที่สตริง "const char[ระยะเวลา]" เพื่อให้การคัดลอก
ที่อยู่ของตัวชี้ที่ไม่ใช่ "const" "char *" จะสร้างคำเตือน เหล่านี้
คำเตือนช่วยให้คุณค้นหาโค้ดเวลาคอมไพล์ที่สามารถลองเขียนลงในสตริงได้
คงที่ แต่ถ้าคุณระมัดระวังอย่างมากเกี่ยวกับการใช้ "const" ในการประกาศ
และต้นแบบ มิฉะนั้นมันเป็นเพียงความรำคาญ นี่คือเหตุผลที่เราไม่ได้ทำ -ผนัง
ขอคำเตือนเหล่านี้

เมื่อรวบรวม C ++ ให้เตือนเกี่ยวกับการแปลงที่เลิกใช้จากตัวอักษรสตริงเป็น "char
*" คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้นสำหรับโปรแกรม C++

-Wclobbered
เตือนตัวแปรที่อาจเปลี่ยนแปลงโดย "longjmp" หรือ "vfork" คำเตือนนี้คือ
ยังเปิดใช้งานโดย -Wextra.

-Wconditionally-ได้รับการสนับสนุน (C++ และ Objective-C++ เท่านั้น)
เตือนสำหรับโครงสร้างที่รองรับตามเงื่อนไข (C++11 [intro.defs])

-Wconversion
เตือนสำหรับการแปลงโดยนัยที่อาจเปลี่ยนแปลงมูลค่า ซึ่งรวมถึง Conversion
ระหว่างจำนวนจริงและจำนวนเต็ม เช่น "abs (x)" เมื่อ "x" เป็น "double"; การแปลงระหว่าง
ลงนามและไม่ได้ลงนาม เช่น "unsigned ui = -1"; และแปลงเป็นประเภทที่เล็กกว่าเช่น
"sqrtf (M_PI)" อย่าเตือนสำหรับการร่ายที่ชัดเจนเช่น "abs ((int) x)" และ "ui =
(unsigned) -1" หรือหากมูลค่าไม่เปลี่ยนแปลงโดยการแปลงเช่นใน "abs (2.0)"
คำเตือนเกี่ยวกับการแปลงระหว่างจำนวนเต็มที่ลงนามและไม่ได้ลงนามสามารถปิดการใช้งานโดย
การใช้ -Wno-เซ็นแปลง.

สำหรับ C ++ ยังเตือนถึงความละเอียดโอเวอร์โหลดที่สับสนสำหรับการแปลงที่ผู้ใช้กำหนด และ
การแปลงที่ไม่เคยใช้ตัวดำเนินการแปลงประเภท: การแปลงเป็น "โมฆะ" เหมือนกัน
ประเภทคลาสพื้นฐานหรือการอ้างอิงถึงพวกเขา คำเตือนเกี่ยวกับการแปลงระหว่างลงนาม
และจำนวนเต็มที่ไม่ได้ลงนามจะถูกปิดใช้งานโดยค่าเริ่มต้นใน C ++ เว้นแต่ -Wsign-แปลง is
เปิดใช้งานอย่างชัดเจน

-Wno-แปลง-null (C++ และ Objective-C++ เท่านั้น)
อย่าเตือนสำหรับการแปลงระหว่าง "NULL" และประเภทที่ไม่ใช่ตัวชี้ -Wconversion-null is
เปิดใช้งานโดยค่าเริ่มต้น

-Wzero-as-null-pointer-constant (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อใช้ '0' ตามตัวอักษรเป็นค่าคงที่ตัวชี้ null สิ่งนี้มีประโยชน์กับ
อำนวยความสะดวกในการแปลงเป็น "nullptr" ใน C ++ 11

-Wdate-เวลา
เตือนเมื่อพบมาโคร "__TIME__", "__DATE__" หรือ "__TIMESTAMP__"
อาจป้องกันการคอมไพล์ที่ทำซ้ำได้เหมือนกันในระดับบิต

-Wdelete-ไม่สมบูรณ์ (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อลบตัวชี้ไปยังประเภทที่ไม่สมบูรณ์ซึ่งอาจทำให้เกิดพฤติกรรมที่ไม่ได้กำหนดที่
รันไทม์ คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้น

-Wuseless-cast (C++ และ Objective-C++ เท่านั้น)
เตือนเมื่อนิพจน์ถูกแคสต์เป็นประเภทของตัวเอง

-ร่างกายเปียกปอน
เตือนหากเนื้อหาว่างเกิดขึ้นในคำสั่ง "if", "else" หรือ "do while" คำเตือนนี้
ยังเปิดใช้งานโดย -Wextra.

-Wenum-เปรียบเทียบ
เตือนเกี่ยวกับการเปรียบเทียบระหว่างค่าประเภทต่างๆ ที่แจกแจงไว้ ใน C++ enumeral
ความไม่ตรงกันในนิพจน์เงื่อนไขจะได้รับการวินิจฉัยด้วย และคำเตือนถูกเปิดใช้งานโดย
ค่าเริ่มต้น. ใน C คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wjump-คิดถึง-init (C, Objective-C เท่านั้น)
เตือนหากคำสั่ง "goto" หรือคำสั่ง "switch" กระโดดไปข้างหน้าข้าม
การเริ่มต้นของตัวแปร หรือข้ามย้อนกลับไปยังเลเบลหลังจากตัวแปรได้รับ
เริ่มต้น สิ่งนี้เตือนเกี่ยวกับตัวแปรที่เริ่มต้นเมื่อเป็น .เท่านั้น
ประกาศ คำเตือนนี้รองรับเฉพาะ C และ Objective-C ใน C ++ แบบนี้
สาขาเป็นข้อผิดพลาดในทุกกรณี

-Wjump-คิดถึง-init รวมอยู่ใน -Wc++-เข้ากันได้กับ. มันสามารถปิดการใช้งานด้วย
-Wno-jump-misses-init ตัวเลือก

-Wsign-เปรียบเทียบ
เตือนเมื่อการเปรียบเทียบระหว่างค่าที่ลงนามและไม่ได้ลงนามอาจทำให้เกิดค่าที่ไม่ถูกต้อง
ผลลัพธ์เมื่อค่าที่ลงนามถูกแปลงเป็นค่าที่ไม่ได้ลงนาม คำเตือนนี้ยังเปิดใช้งานอยู่
by -Wextra; เพื่อรับคำเตือนอื่น ๆ ของ -Wextra โดยไม่มีคำเตือนนี้ ใช้ -Wextra
-Wno-ลงชื่อ-เปรียบเทียบ.

-Wsign-แปลง
เตือนสำหรับการแปลงโดยนัยที่อาจเปลี่ยนเครื่องหมายของค่าจำนวนเต็ม เช่น
การกำหนดนิพจน์จำนวนเต็มที่ลงนามให้กับตัวแปรจำนวนเต็มที่ไม่ได้ลงนาม ชัดเจน
หล่อเงียบคำเตือน ใน C ตัวเลือกนี้เปิดใช้งานด้วย -Wconversion.

-Wfloat-แปลง
เตือนสำหรับการแปลงโดยนัยที่ลดความแม่นยำของมูลค่าจริง นี้
รวมการแปลงจากจำนวนจริงเป็นจำนวนเต็ม และจากจำนวนจริงที่สูงกว่าเป็นจำนวนจริงที่สูงกว่า
ค่าจริงที่แม่นยำ ตัวเลือกนี้ยังเปิดใช้งานโดย -Wconversion.

-Wsized-deallocation (C++ และ Objective-C++ เท่านั้น)
เตือนเกี่ยวกับคำจำกัดความของฟังก์ชันการจัดสรรคืนที่ไม่มีขนาด

โมฆะโอเปอเรเตอร์ ลบ (เป็นโมฆะ *) ยกเว้น;
โมฆะโอเปอเรเตอร์ ลบ[] (เป็นโมฆะ *) ไม่มียกเว้น;

โดยไม่มีคำจำกัดความของฟังก์ชันการจัดสรรคืนที่มีขนาดที่สอดคล้องกัน

โมฆะโอเปอเรเตอร์ลบ (เป็นโมฆะ *, std::size_t) ยกเว้น;
โมฆะโอเปอเรเตอร์ ลบ[] (เป็นโมฆะ *, std::size_t) ยกเว้น;

หรือในทางกลับกัน เปิดใช้งานโดย -Wextra พร้อมด้วย -fsized-deallocation.

-Wsizeof-ตัวชี้-memaccess
เตือนพารามิเตอร์ความยาวที่น่าสงสัยสำหรับสตริงและฟังก์ชันในตัวของหน่วยความจำบางตัว
ถ้าอาร์กิวเมนต์ใช้ "sizeof" คำเตือนนี้เตือนเช่นเกี่ยวกับ "memset (ptr, 0, sizeof
(ptr));" ถ้า "ptr" ไม่ใช่อาร์เรย์ แต่เป็นตัวชี้ และแนะนำวิธีแก้ไขที่เป็นไปได้ หรือ
เกี่ยวกับ "memcpy (&foo, ptr, sizeof (&foo));" คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wsizeof-array-argument
เตือนเมื่อใช้ตัวดำเนินการ "sizeof" กับพารามิเตอร์ที่ประกาศเป็น array
ในนิยามฟังก์ชัน คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้นสำหรับโปรแกรม C และ C++

-Wmemset-ย้าย-args
เตือนการเรียกที่น่าสงสัยไปยังฟังก์ชันในตัว "memset" หากอาร์กิวเมนต์ที่สองคือ
ไม่ใช่ศูนย์และอาร์กิวเมนต์ที่สามเป็นศูนย์ สิ่งนี้เตือนเช่น @ เกี่ยวกับ "memset (buf, sizeof
buf, 0)" ซึ่งส่วนใหญ่อาจหมายถึง "memset (buf, 0, sizeof buf)" แทน
การวินิจฉัยจะออกเฉพาะเมื่ออาร์กิวเมนต์ที่สามเป็นศูนย์ตามตัวอักษร ถ้าเป็นบ้าง
นิพจน์ที่พับเป็นศูนย์ การโยนศูนย์ถึงบางประเภท ฯลฯ มันน้อยกว่ามาก
เป็นไปได้ว่าผู้ใช้แลกเปลี่ยนอาร์กิวเมนต์ผิดพลาดและไม่มีการเตือน
คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Waddress
เตือนเกี่ยวกับการใช้ที่อยู่หน่วยความจำที่น่าสงสัย ซึ่งรวมถึงการใช้ที่อยู่ของ a
ฟังก์ชันในนิพจน์เงื่อนไข เช่น "void func(void); if (func)" และ
เปรียบเทียบกับที่อยู่หน่วยความจำของตัวอักษรสตริง เช่น "if (x == "abc")"
การใช้งานดังกล่าวมักบ่งบอกถึงข้อผิดพลาดของโปรแกรมเมอร์: ที่อยู่ของฟังก์ชันเสมอ
ประเมินเป็นจริง ดังนั้นการใช้งานในเงื่อนไขมักจะบ่งชี้ว่าโปรแกรมเมอร์
ลืมวงเล็บในการเรียกใช้ฟังก์ชัน และการเปรียบเทียบกับตัวอักษรสตริง
ส่งผลให้เกิดพฤติกรรมที่ไม่ระบุและไม่สามารถเคลื่อนย้ายได้ใน C ดังนั้นจึงมักบ่งชี้ว่า
ที่โปรแกรมเมอร์ตั้งใจจะใช้ "strcmp" คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wlogical-op
เตือนเกี่ยวกับการใช้ตัวดำเนินการเชิงตรรกะที่น่าสงสัยในนิพจน์ ซึ่งรวมถึงการใช้
ตัวดำเนินการเชิงตรรกะในบริบทที่คาดว่าจะมีตัวดำเนินการที่ชาญฉลาด

-Wlogical-ไม่ใช่วงเล็บ
เตือนเกี่ยวกับตรรกะที่ไม่ได้ใช้ทางด้านซ้ายมือของตัวถูกดำเนินการเปรียบเทียบ นี้
ตัวเลือกจะไม่เตือนว่าตัวถูกดำเนินการ RHS เป็นประเภทบูลีนหรือไม่ จุดประสงค์คือเพื่อ
ตรวจพบรหัสที่น่าสงสัยดังต่อไปนี้:

int ก;
...
ถ้า (!a > 1) { ... }

เป็นไปได้ที่จะระงับคำเตือนโดยใส่ LHS ไว้ในวงเล็บ:

ถ้า ((!a) > 1) { ... }

คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Waggregate-กลับ
เตือนหากมีการกำหนดหรือเรียกฟังก์ชันใด ๆ ที่ส่งคืนโครงสร้างหรือสหภาพ (ใน
ภาษาที่คุณสามารถส่งคืนอาร์เรย์ได้ สิ่งนี้จะทำให้เกิดคำเตือนด้วย)

-Wno-aggressive-loop-optimizations
เตือนหากอยู่ในลูปที่มีจำนวนการวนซ้ำคงที่ คอมไพเลอร์ตรวจพบว่าไม่ได้กำหนด
พฤติกรรมในคำสั่งบางอย่างในระหว่างการทำซ้ำอย่างน้อยหนึ่งครั้ง

-Wno-แอตทริบิวต์
อย่าเตือนหากมีการใช้ "__attribute__" ที่ไม่คาดคิด เช่น คุณลักษณะที่ไม่รู้จัก
คุณลักษณะของฟังก์ชันที่ใช้กับตัวแปร ฯลฯ ซึ่งไม่ได้หยุดข้อผิดพลาดสำหรับ
การใช้แอตทริบิวต์ที่รองรับไม่ถูกต้อง

-Wno-builtin-มาโครกำหนดใหม่
อย่าเตือนหากมีการกำหนดมาโครในตัวบางรายการใหม่ สิ่งนี้ระงับการเตือนสำหรับ
นิยามใหม่ของ "__TIMESTAMP__", "__TIME__", "__DATE__", "__FILE__" และ
"__BASE_FILE__"

-Wstrict-ต้นแบบ (C และ Objective-C เท่านั้น)
เตือนหากมีการประกาศหรือกำหนดฟังก์ชันโดยไม่ระบุประเภทอาร์กิวเมนต์ (หนึ่ง
อนุญาตให้ใช้คำจำกัดความของฟังก์ชันแบบเก่าโดยไม่มีการเตือนหากนำหน้าด้วย a
ประกาศที่ระบุประเภทอาร์กิวเมนต์)

-Wold-style-ประกาศ (C และ Objective-C เท่านั้น)
คำเตือนสำหรับการใช้งานที่ล้าสมัยตามมาตรฐาน C ในการประกาศ สำหรับ
ตัวอย่าง เตือนว่าตัวระบุคลาสการจัดเก็บเช่น "คงที่" ไม่ใช่สิ่งแรกในa
ประกาศ คำเตือนนี้ยังเปิดใช้งานโดย -Wextra.

-Wold-สไตล์-นิยาม (C และ Objective-C เท่านั้น)
เตือนหากใช้นิยามฟังก์ชันแบบเก่า จะมีการเตือนแม้ว่าจะมี
ต้นแบบก่อนหน้านี้

-Wmissing-พารามิเตอร์-type (C และ Objective-C เท่านั้น)
พารามิเตอร์ของฟังก์ชันถูกประกาศโดยไม่มีตัวระบุประเภทในฟังก์ชันสไตล์ K&R:

เป็นโมฆะ foo(บาร์) { }

คำเตือนนี้ยังเปิดใช้งานโดย -Wextra.

-Wmissing-ต้นแบบ (C และ Objective-C เท่านั้น)
เตือนหากมีการกำหนดฟังก์ชันส่วนกลางโดยไม่มีการประกาศต้นแบบก่อนหน้านี้ นี้
คำเตือนจะออกแม้ว่าคำจำกัดความเองจะให้ต้นแบบ ใช้ตัวเลือกนี้
เพื่อตรวจจับฟังก์ชันส่วนกลางที่ไม่มีการประกาศต้นแบบที่ตรงกันในa
ไฟล์ส่วนหัว ตัวเลือกนี้ใช้ไม่ได้กับ C++ เนื่องจากการประกาศฟังก์ชันทั้งหมด
ให้ต้นแบบและการประกาศที่ไม่ตรงกันประกาศโอเวอร์โหลดมากกว่า
ขัดแย้งกับการประกาศก่อนหน้านี้ ใช้ -Wmissing-ประกาศ เพื่อตรวจจับที่หายไป
ประกาศในภาษา C++

-Wmissing-ประกาศ
เตือนหากมีการกำหนดฟังก์ชันส่วนกลางโดยไม่มีการประกาศก่อนหน้านี้ ทำเช่นนั้นแม้ว่า
คำจำกัดความนั้นให้ต้นแบบ ใช้ตัวเลือกนี้เพื่อตรวจหา global
ฟังก์ชันที่ไม่ได้ประกาศไว้ในไฟล์ส่วนหัว ใน C จะไม่มีคำเตือนสำหรับ
ฟังก์ชันที่มีการประกาศที่ไม่ใช่ต้นแบบก่อนหน้านี้ ใช้ -Wmissing-ต้นแบบ ในการตรวจสอบ
ต้นแบบที่ขาดหายไป ใน C ++ จะไม่มีคำเตือนสำหรับเทมเพลตฟังก์ชันหรือสำหรับ
ฟังก์ชันอินไลน์ หรือสำหรับฟังก์ชันในเนมสเปซที่ไม่ระบุชื่อ

-Wmissing-field-initializers
เตือนถ้าตัวเริ่มต้นของโครงสร้างมีบางฟิลด์ที่ขาดหายไป ตัวอย่างเช่นต่อไปนี้
รหัสทำให้เกิดคำเตือนเนื่องจาก "xh" เป็นศูนย์โดยปริยาย:

โครงสร้าง s { int f, g, h; };
โครงสร้าง sx = { 3, 4 };

ตัวเลือกนี้ไม่เตือนเกี่ยวกับ initializers ที่กำหนดไว้ ดังนั้นการปรับเปลี่ยนต่อไปนี้
ไม่ทริกเกอร์คำเตือน:

โครงสร้าง s { int f, g, h; };
struct sx = { .f = 3, .g = 4 };

ใน C ++ ตัวเลือกนี้จะไม่เตือนเกี่ยวกับตัวเริ่มต้น { } ที่ว่างเปล่าเช่น:

โครงสร้าง s { int f, g, h; };
sx = { };

คำเตือนนี้รวมอยู่ใน -Wextra. ที่จะได้รับอื่นๆ -Wextra คำเตือนที่ไม่มีสิ่งนี้
ใช้ -Wextra -Wno-missing-field-initializers.

-Wno-multichar
อย่าเตือนถ้าค่าคงที่หลายอักขระ ('FOOF') ถูกนำมาใช้. มักจะระบุ a
การพิมพ์ผิดในรหัสของผู้ใช้ เนื่องจากมีค่าที่กำหนดไว้ในการนำไปปฏิบัติ และไม่ควรจะเป็น
ใช้ในรหัสพกพา

-Wnormalized[=<ไม่มี|id|nfc|nfkc>]
ใน ISO C และ ISO C++ ตัวระบุสองตัวจะต่างกันหากตัวระบุเป็นลำดับต่างกันของ
ตัวอักษร อย่างไรก็ตาม บางครั้งเมื่ออักขระนอกชุดอักขระ ASCII พื้นฐาน
ใช้ คุณสามารถมีลำดับอักขระที่แตกต่างกันสองลำดับที่มีลักษณะเหมือนกันได้ หลีกเลี่ยง
สับสน มาตรฐาน ISO 10646 กำหนดไว้บ้าง บรรทัดฐาน กฎระเบียบ ซึ่งเมื่อนำไปใช้
ตรวจสอบให้แน่ใจว่าสองซีเควนซ์ที่เหมือนกันถูกเปลี่ยนเป็นลำดับเดียวกัน GCC
สามารถเตือนคุณได้หากคุณใช้ตัวระบุที่ไม่ได้รับการปรับให้เป็นมาตรฐาน ตัวเลือกนี้
ควบคุมคำเตือนนั้น

GCC รองรับการเตือนสี่ระดับ ค่าเริ่มต้นคือ -Wnormalized=nfc,
ซึ่งเตือนเกี่ยวกับตัวระบุใด ๆ ที่ไม่ได้อยู่ในรูปแบบมาตรฐาน ISO 10646 "C"
เอ็นเอฟซี. NFC เป็นรูปแบบที่แนะนำสำหรับการใช้งานส่วนใหญ่ เทียบเท่ากับ -Wnormalized.

ขออภัย มีอักขระบางตัวที่อนุญาตในตัวระบุโดย ISO C และ ISO C++
ที่เมื่อเปลี่ยนเป็น NFC จะไม่ได้รับอนุญาตในตัวระบุ นั่นคือไม่มีทาง
เพื่อใช้สัญลักษณ์เหล่านี้ใน ISO C หรือ C++ แบบพกพาและมีตัวระบุทั้งหมดของคุณใน NFC
-Wnormalized=id ระงับคำเตือนสำหรับอักขระเหล่านี้ หวังว่าอนาคต
เวอร์ชันของมาตรฐานที่เกี่ยวข้องจะแก้ไขสิ่งนี้ ซึ่งเป็นสาเหตุที่ตัวเลือกนี้ไม่
ค่าเริ่มต้น

คุณสามารถปิดคำเตือนสำหรับอักขระทั้งหมดโดยการเขียน -Wnormalized=ไม่มี or
-Wno-ทำให้เป็นมาตรฐาน. คุณควรทำเช่นนี้หากคุณกำลังใช้การทำให้เป็นมาตรฐานอื่นอยู่
แบบแผน (เช่น "D") เพราะไม่เช่นนั้น คุณสามารถสร้างจุดบกพร่องที่มีความหมายตามตัวอักษร . ได้อย่างง่ายดาย
เป็นไปไม่ได้ที่จะเห็น

อักขระบางตัวใน ISO 10646 มีความหมายที่แตกต่างกันแต่มีลักษณะเหมือนกันในบางฟอนต์
หรือวิธีการแสดง โดยเฉพาะอย่างยิ่งเมื่อมีการใช้การจัดรูปแบบ ตัวอย่างเช่น
"\u207F", "SUPERSCRIPT LATIN SMALL LETTER N" แสดงเหมือนกับ "n" ปกติที่
ถูกวางไว้ในตัวยก ISO 10646 กำหนด NFKC รูปแบบการทำให้เป็นมาตรฐานถึง
แปลงสิ่งเหล่านี้ให้อยู่ในรูปแบบมาตรฐานเช่นกัน และ GCC จะเตือนหากรหัสของคุณไม่อยู่ใน
NFKC ถ้าคุณใช้ -Wnormalized=nfkc. คำเตือนนี้เปรียบได้กับคำเตือนเกี่ยวกับทุก ๆ
ตัวระบุที่มีตัวอักษร O เพราะอาจสับสนกับตัวเลข 0
และไม่ใช่ค่าเริ่มต้น แต่อาจมีประโยชน์ตามแบบแผนการเข้ารหัสในพื้นที่หาก
สภาพแวดล้อมการเขียนโปรแกรมไม่สามารถแก้ไขได้เพื่อแสดงอักขระเหล่านี้อย่างชัดเจน

-Wno-เลิกใช้
อย่าเตือนเกี่ยวกับการใช้คุณสมบัติที่เลิกใช้แล้ว

-Wno-เลิกใช้-ประกาศ
อย่าเตือนเกี่ยวกับการใช้ฟังก์ชัน ตัวแปร และประเภทที่ทำเครื่องหมายว่าเลิกใช้โดย
โดยใช้แอตทริบิวต์ "เลิกใช้แล้ว"

-Wno-ล้น
อย่าเตือนเกี่ยวกับเวลาคอมไพล์โอเวอร์โฟลว์ในนิพจน์คงที่

-Wno-odr
เตือนเกี่ยวกับการละเมิดกฎคำจำกัดความเดียวในระหว่างการปรับเวลาลิงก์ให้เหมาะสม ต้องใช้
-flto-odr-type-merging ที่จะเปิดใช้งาน เปิดใช้งานโดยค่าเริ่มต้น

-Wopenmp-simd
เตือนหากโมเดลต้นทุน vectorizer แทนที่ OpenMP หรือคำสั่ง Simd Cilk Plus
กำหนดโดยผู้ใช้ NS -fsimd-cost-model=unlimited สามารถใช้ตัวเลือกเพื่อผ่อนคลายค่าใช้จ่ายได้
แบบ

-Woverride-init (C และ Objective-C เท่านั้น)
เตือนถ้าฟิลด์เริ่มต้นโดยไม่มีผลข้างเคียงถูกแทนที่เมื่อใช้กระบุ
ตัวเริ่มต้น

คำเตือนนี้รวมอยู่ใน -Wextra. ที่จะได้รับอื่นๆ -Wextra คำเตือนที่ไม่มีสิ่งนี้
ใช้ -Wextra -Wno-แทนที่-init.

-บรรจุห่อ
เตือนถ้าโครงสร้างได้รับแอตทริบิวต์ที่บรรจุ แต่แอตทริบิวต์ที่บรรจุไม่มี
ผลกระทบต่อเค้าโครงหรือขนาดของโครงสร้าง โครงสร้างดังกล่าวอาจวางไม่ตรงสำหรับ
ประโยชน์น้อย ตัวอย่างเช่น ในโค้ดนี้ ตัวแปร "fx" ใน "struct bar" คือ
ไม่ตรงแนวแม้ว่า "struct bar" จะไม่มีแอตทริบิวต์ที่บรรจุ:

โครงสร้าง foo {
int x;
อักขระ a, b, c, d;
} __attribute __ ((บรรจุ));
แถบโครงสร้าง {
ถ่าน z;
โครงสร้าง foo f;
};

-Wpacked-bitfield-compat
GCC ซีรี่ส์ 4.1, 4.2 และ 4.3 ละเว้นแอตทริบิวต์ "packed" บนบิตฟิลด์ประเภท
"ถ่าน". สิ่งนี้ได้รับการแก้ไขแล้วใน GCC 4.4 แต่การเปลี่ยนแปลงสามารถนำไปสู่ความแตกต่างใน
เค้าโครงโครงสร้าง GCC แจ้งให้คุณทราบเมื่อมีการเปลี่ยนแปลงออฟเซ็ตของฟิลด์ดังกล่าวใน GCC
4.4. ตัวอย่างเช่น ไม่มีช่องว่างภายใน 4 บิตระหว่างฟิลด์ "a" และ "b" อีกต่อไปในสิ่งนี้
โครงสร้าง:

โครงสร้าง foo
{
อักขระ a:4;
ถ่าน b:8;
} __attribute__ ((บรรจุ));

คำเตือนนี้เปิดใช้งานโดยค่าเริ่มต้น ใช้ -Wno-packed-bitfield-compat เพื่อปิดการใช้งานนี้
การเตือน

-Wpadded
เตือนหากมีการเติมช่องว่างภายในโครงสร้างเพื่อจัดแนวองค์ประกอบของ
โครงสร้างหรือเพื่อจัดแนวโครงสร้างทั้งหมด บางครั้งเมื่อสิ่งนี้เกิดขึ้นก็เป็นไปได้
เพื่อจัดเรียงเขตข้อมูลของโครงสร้างใหม่เพื่อลดช่องว่างภายในและทำให้
โครงสร้างเล็กลง

-Wredundant-decls
เตือนหากมีการประกาศสิ่งใดมากกว่าหนึ่งครั้งในขอบเขตเดียวกัน แม้ในกรณีที่
การประกาศหลายรายการถูกต้องและไม่มีอะไรเปลี่ยนแปลง

-Wnested-externs (C และ Objective-C เท่านั้น)
เตือนหากพบการประกาศ "ภายนอก" ภายในฟังก์ชัน

-Wno-inherited-variadic-ctor
ระงับคำเตือนเกี่ยวกับการใช้ C++11 ที่สืบทอดคอนสตรัคเตอร์เมื่อคลาสฐาน
สืบทอดมาจากมีตัวสร้างตัวแปร C; คำเตือนเปิดอยู่โดยค่าเริ่มต้นเนื่องจาก
จุดไข่ปลาไม่ได้รับการสืบทอด

-วินไลน์
เตือนหากฟังก์ชันที่ประกาศเป็นอินไลน์ไม่สามารถอินไลน์ได้ ด้วยสิ่งนี้
ตัวเลือกคอมไพเลอร์ไม่เตือนเกี่ยวกับความล้มเหลวของฟังก์ชันอินไลน์ที่ประกาศใน
ส่วนหัวของระบบ

คอมไพเลอร์ใช้ฮิวริสติกที่หลากหลายเพื่อกำหนดว่าอินไลน์ a
การทำงาน. ตัวอย่างเช่น คอมไพเลอร์คำนึงถึงขนาดของฟังก์ชันที่เป็น
อินไลน์และจำนวนอินไลน์ที่ทำไปแล้วในฟังก์ชันปัจจุบัน
ดังนั้น การเปลี่ยนแปลงที่ดูเหมือนไม่มีนัยสำคัญในโปรแกรมต้นทางอาจทำให้
คำเตือนที่ผลิตโดย -วินไลน์ ปรากฏขึ้นหรือหายไป

-Wno-invalid-offsetof (C++ และ Objective-C++ เท่านั้น)
ระงับคำเตือนจากการใช้มาโคร "offsetof" กับประเภทที่ไม่ใช่ POD ตาม
มาตรฐาน ISO C ++ ปี 2014 ที่ใช้ "offsetof" กับประเภทเลย์เอาต์ที่ไม่ได้มาตรฐานคือ
ไม่ได้กำหนด. ในการใช้งาน C ++ ที่มีอยู่อย่างไรก็ตาม "offsetof" มักจะให้
ผลลัพธ์ที่มีความหมาย แฟล็กนี้มีไว้สำหรับผู้ใช้ที่ทราบว่ากำลังเขียนอยู่
รหัสที่ไม่สามารถพกพาได้และผู้ที่จงใจเลือกที่จะเพิกเฉยต่อคำเตือนเกี่ยวกับรหัสนั้น

ข้อจำกัดเกี่ยวกับ "offsetof" อาจผ่อนคลายในเวอร์ชันอนาคตของมาตรฐาน C++

-Wno-int-to-pointer-cast
ระงับคำเตือนจากประเภทคาสต์เป็นประเภทตัวชี้ของจำนวนเต็มที่มีขนาดต่างกัน ใน
C++ การแคสต์ไปยังประเภทตัวชี้ที่มีขนาดเล็กกว่าถือเป็นข้อผิดพลาด Wint-to-ตัวชี้-cast is
เปิดใช้งานโดยค่าเริ่มต้น

-Wno-ตัวชี้ไปยัง int-cast (C และ Objective-C เท่านั้น)
ระงับคำเตือนจากการร่ายจากตัวชี้ไปยังประเภทจำนวนเต็มที่มีขนาดต่างกัน

-Winvalid-pch
เตือนหากพบส่วนหัวที่คอมไพล์ล่วงหน้าในเส้นทางการค้นหาแต่ไม่สามารถใช้งานได้

-Wlong-long
เตือนหากใช้ประเภท "ยาว ยาว" เปิดใช้งานโดยทั้ง -Wpedantic or
-แบบดั้งเดิม ในโหมด ISO C90 และ C++98 ในการยับยั้งข้อความเตือน ให้ใช้
-ไม่ยาว-ยาว.

-Wvariadic-มาโคร
เตือนว่ามีการใช้มาโครแบบแปรผันในโหมด ISO C90 หรือหากไวยากรณ์ทางเลือกของ GNU เป็น
ใช้ในโหมด ISO C99 เปิดใช้งานโดยทั้ง -Wpedantic or -แบบดั้งเดิม. ไปยัง
ยับยั้งข้อความเตือนใช้ -Wno-variadic-มาโคร.

-วอราร์ก
เตือนการใช้งานที่น่าสงสัยของมาโครที่ใช้เพื่อจัดการกับอาร์กิวเมนต์ตัวแปรเช่น
"va_start". นี่เป็นค่าเริ่มต้น ในการยับยั้งข้อความเตือน ให้ใช้ -Wno-varargs.

-Wvector-การทำงาน-ประสิทธิภาพ
เตือนหากการดำเนินการเวกเตอร์ไม่ได้ใช้งานผ่านความสามารถของ SIMD ของสถาปัตยกรรม
มีประโยชน์อย่างมากสำหรับการปรับแต่งประสิทธิภาพ สามารถดำเนินการเวกเตอร์ได้
"ทีละชิ้น" ซึ่งหมายความว่าการดำเนินการสเกลาร์จะดำเนินการกับเวกเตอร์ทุกตัว
ธาตุ; "แบบขนาน" ซึ่งหมายความว่าการดำเนินการเวกเตอร์ถูกใช้งานโดยใช้
สเกลาร์ประเภทกว้างซึ่งปกติจะมีประสิทธิภาพมากกว่า และ "เป็นโสด
สเกลาร์" ซึ่งหมายความว่าเวกเตอร์พอดีกับประเภทสเกลาร์

-Wno-เสมือน-ย้าย-มอบหมาย
ระงับคำเตือนเกี่ยวกับการสืบทอดจากฐานเสมือนด้วยการย้าย C++11 ที่ไม่สำคัญ
ผู้ดำเนินการมอบหมาย สิ่งนี้เป็นอันตรายเพราะหากสามารถเข้าถึงฐานเสมือนได้
มากกว่าหนึ่งเส้นทาง มันถูกย้ายหลายครั้ง ซึ่งหมายความว่าวัตถุทั้งสองจะลงเอยด้วย
ย้ายจากรัฐ หากตัวดำเนินการมอบหมายการย้ายถูกเขียนขึ้นเพื่อหลีกเลี่ยงการย้ายจาก
ย้ายจากวัตถุ คำเตือนนี้สามารถปิดใช้งานได้

-Wvla
เตือนหากใช้อาร์เรย์ความยาวผันแปรในโค้ด -Wno-vla ป้องกัน -Wpedantic
คำเตือนของอาร์เรย์ความยาวผันแปร

-Wvolatile-register-var
เตือนหากตัวแปรรีจิสเตอร์ถูกประกาศผันผวน ตัวดัดแปลงที่ระเหยไม่ได้
ยับยั้งการปรับให้เหมาะสมทั้งหมดที่อาจกำจัดการอ่านและ/หรือการเขียนเพื่อลงทะเบียน
ตัวแปร คำเตือนนี้เปิดใช้งานโดย -ผนัง.

-Wdisabled-เพิ่มประสิทธิภาพ
เตือนหากบัตรผ่านการปรับให้เหมาะสมที่ร้องขอถูกปิดใช้งาน คำเตือนนี้โดยทั่วไปไม่
ระบุว่ามีสิ่งใดผิดปกติกับรหัสของคุณ เป็นเพียงการบ่งชี้ว่า GCC's
เครื่องมือเพิ่มประสิทธิภาพไม่สามารถจัดการโค้ดได้อย่างมีประสิทธิภาพ บ่อยครั้งที่ปัญหาคือ .ของคุณ
รหัสใหญ่เกินไปหรือซับซ้อนเกินไป GCC ปฏิเสธที่จะเพิ่มประสิทธิภาพโปรแกรมเมื่อปรับให้เหมาะสม
ตัวเองน่าจะใช้เวลามากเกินไป

-Wpointer-สัญญาณ (C และ Objective-C เท่านั้น)
เตือนสำหรับการส่งอาร์กิวเมนต์ตัวชี้หรือการมอบหมายที่มีการเซ็นชื่อต่างกัน นี้
รองรับตัวเลือกสำหรับ C และ Objective-C เท่านั้น มีความหมายโดย -ผนัง และโดย
-Wpedanticซึ่งสามารถปิดการใช้งานด้วย -Wno-ตัวชี้-สัญญาณ.

-Wstack ป้องกัน
ตัวเลือกนี้ใช้งานได้เฉพาะเมื่อ -fstack- ป้องกัน มีการใช้งาน มันเตือนเกี่ยวกับฟังก์ชั่น
ที่ไม่ได้รับการปกป้องจากการทุบสแต็ค

-Woverlength-สตริง
เตือนเกี่ยวกับค่าคงที่สตริงที่ยาวกว่า "minimum maximum" length
ระบุไว้ในมาตรฐาน C คอมไพเลอร์สมัยใหม่โดยทั่วไปอนุญาตให้มีค่าคงที่สตริงที่
ยาวเกินขีดจำกัดขั้นต่ำของมาตรฐานมาก แต่โปรแกรมแบบพกพามากควร
หลีกเลี่ยงการใช้สตริงที่ยาวกว่า

มีการใช้ขีดจำกัด หลังจาก การต่อสตริงค่าคงที่และไม่นับการต่อท้าย
น. ใน C90 ขีดจำกัดคือ 509 อักขระ; ใน C99 เพิ่มขึ้นเป็น 4095 C++98 ไม่
ไม่ระบุค่าสูงสุดขั้นต่ำเชิงบรรทัดฐาน ดังนั้นเราจึงไม่วินิจฉัยสตริงที่มีความยาวเกินใน
ค ++

ตัวเลือกนี้มีความหมายโดย -Wpedantic, และสามารถปิดการใช้งานด้วย
-Wno-overlength-สตริง.

-Wunsuffixed-float-constants (C และ Objective-C เท่านั้น)
ออกคำเตือนสำหรับค่าคงที่ลอยตัวที่ไม่มีส่วนต่อท้าย เมื่อใช้
พร้อมด้วย -Wsystem-ส่วนหัว มันเตือนเกี่ยวกับค่าคงที่ดังกล่าวในไฟล์ส่วนหัวของระบบ
ซึ่งจะมีประโยชน์เมื่อเตรียมโค้ดเพื่อใช้กับ Pragma "FLOAT_CONST_DECIMAL64"
จากการขยายจุดทศนิยมเป็น C99

-Wno-กำหนด-init (C และ Objective-C เท่านั้น)
ระงับคำเตือนเมื่อใช้ตัวกำหนดตำแหน่งเพื่อเริ่มต้นโครงสร้างที่
ถูกทำเครื่องหมายด้วยแอตทริบิวต์ "designated_init"

Options for การแก้จุดบกพร่อง ของคุณ โครงการ or GCC
GCC มีตัวเลือกพิเศษมากมายที่ใช้สำหรับการดีบักโปรแกรมของคุณหรือ GCC:

-g สร้างข้อมูลการดีบักในรูปแบบดั้งเดิมของระบบปฏิบัติการ (stabs, COFF,
XCOFF หรือ DWARF 2) GDB สามารถทำงานกับข้อมูลการดีบักนี้ได้

ในระบบส่วนใหญ่ที่ใช้รูปแบบการแทง -g เปิดใช้งานการใช้ข้อมูลการดีบักพิเศษ
ที่มีแต่ GDB เท่านั้นที่สามารถใช้ได้ ข้อมูลเพิ่มเติมนี้ทำให้การดีบักทำงานได้ดีขึ้นใน GDB แต่
อาจทำให้โปรแกรมแก้ไขข้อบกพร่องอื่น ๆ ขัดข้องหรือปฏิเสธที่จะอ่านโปรแกรม ถ้าคุณต้องการ
ควบคุมได้อย่างแน่นอนว่าจะสร้างข้อมูลเพิ่มเติมหรือไม่ ใช้ -gstabs+, -gstabs,
-gxcoff+, -gxcoff,หรือ -gvms (ดูด้านล่าง)

GCC ให้คุณใช้ -g กับ -O. ทางลัดที่ใช้โดยโค้ดที่ปรับให้เหมาะสมอาจ
บางครั้งสร้างผลลัพธ์ที่น่าประหลาดใจ: ตัวแปรบางตัวที่คุณประกาศอาจไม่มีอยู่ที่
ทั้งหมด; การไหลของการควบคุมอาจเคลื่อนไปชั่วครู่ในที่ที่คุณไม่คาดคิด บางงบอาจ
ไม่ได้ดำเนินการเพราะคำนวณผลลัพธ์คงที่หรือค่าของพวกเขาอยู่ที่
มือ; คำสั่งบางอย่างอาจดำเนินการในที่ต่างกันเพราะถูกย้ายออกไปแล้ว
ของลูป

อย่างไรก็ตาม มันพิสูจน์ได้ว่าสามารถดีบักเอาต์พุตที่ปรับให้เหมาะสมที่สุดได้ มันสมเหตุสมผล
เพื่อใช้เครื่องมือเพิ่มประสิทธิภาพสำหรับโปรแกรมที่อาจมีข้อบกพร่อง

ตัวเลือกต่อไปนี้มีประโยชน์เมื่อ GCC ถูกสร้างขึ้นพร้อมความสามารถเพิ่มเติม
รูปแบบการดีบักมากกว่าหนึ่งรูปแบบ

-gsplit คนแคระ
แยกข้อมูลการดีบักของคนแคระให้มากที่สุดเท่าที่จะเป็นไปได้ลงในไฟล์เอาต์พุตที่แยกจากกัน
ด้วยนามสกุล .dwo ตัวเลือกนี้ช่วยให้ระบบบิลด์หลีกเลี่ยงการลิงก์ไฟล์
พร้อมข้อมูลการดีบัก เพื่อให้มีประโยชน์ ตัวเลือกนี้ต้องใช้โปรแกรมแก้ไขข้อบกพร่องที่มีความสามารถ
กำลังอ่านไฟล์ .dwo

-ggdb
สร้างข้อมูลการดีบักสำหรับการใช้งานโดย GDB นี้หมายถึงการใช้การแสดงออกมากที่สุด
รูปแบบที่มี (DWARF 2, แทง หรือรูปแบบเนทีฟหากไม่มี
รองรับ) รวมถึงส่วนขยาย GDB หากเป็นไปได้

-gpubnames
สร้างส่วน .debug_pubnames และ .debug_pubtypes ของคนแคระ

-ggnu-pubnames
สร้างส่วน .debug_pubnames และ .debug_pubtypes ในรูปแบบที่เหมาะสมสำหรับ
การแปลงเป็นดัชนี GDB ตัวเลือกนี้มีประโยชน์เฉพาะกับตัวเชื่อมโยงที่สามารถ
สร้างดัชนี GDB เวอร์ชัน 7

-gstabs
สร้างข้อมูลการดีบักในรูปแบบการแทง (หากรองรับ) โดยไม่ต้องใช้ GDB
ส่วนขยาย นี่คือรูปแบบที่ DBX ใช้กับระบบ BSD ส่วนใหญ่ บน MIPS อัลฟ่าและ
ระบบ V รีลีส 4 ระบบ ตัวเลือกนี้สร้างเอาต์พุตการดีบักการแทงที่ไม่ใช่
เข้าใจโดย DBX หรือ SDB ในระบบ System V Release 4 ตัวเลือกนี้ต้องใช้ GNU
ผู้ประกอบ.

-felimate-ไม่ได้ใช้-debug-symbols
สร้างข้อมูลการดีบักในรูปแบบการแทง (หากรองรับ) สำหรับสัญลักษณ์เท่านั้น
ที่ใช้จริง.

-femit-class-debug-เสมอ
แทนที่จะปล่อยข้อมูลการดีบักสำหรับคลาส C++ ในไฟล์อ็อบเจ็กต์เพียงไฟล์เดียว
ปล่อยออกมาในไฟล์อ็อบเจ็กต์ทั้งหมดโดยใช้คลาส ควรใช้ตัวเลือกนี้กับ .เท่านั้น
ดีบักเกอร์ที่ไม่สามารถจัดการกับวิธีที่ GCC ส่งข้อมูลการดีบักตามปกติ
สำหรับคลาสเพราะการใช้ตัวเลือกนี้จะเพิ่มขนาดของข้อมูลการดีบักโดย
มากเท่ากับปัจจัยสอง

-fdebug-types-section
เมื่อใช้ DWARF เวอร์ชัน 4 ขึ้นไป พิมพ์ DIE ได้เอง
ส่วน ".debug_types" แทนที่จะทำให้เป็นส่วนหนึ่งของส่วน ".debug_info" มัน
มีประสิทธิภาพมากกว่าที่จะวางไว้ในส่วน comdat ที่แยกจากกันเนื่องจากตัวเชื่อมโยงสามารถทำได้
ลบรายการที่ซ้ำกัน แต่ยังไม่ใช่ผู้บริโภค DWARF ทั้งหมดที่สนับสนุนส่วน ".debug_types"
และในบางอ็อบเจ็กต์ ".debug_types" จะสร้างขนาดใหญ่ขึ้นแทนการดีบักที่เล็กกว่า
ข้อมูล

-gstabs+
สร้างข้อมูลการดีบักในรูปแบบการแทง (หากได้รับการสนับสนุน) โดยใช้GNU
ส่วนขยายที่เข้าใจโดยดีบักเกอร์ GNU (GDB) เท่านั้น การใช้นามสกุลเหล่านี้คือ
มีแนวโน้มที่จะทำให้โปรแกรมแก้ไขข้อบกพร่องอื่น ๆ ขัดข้องหรือปฏิเสธที่จะอ่านโปรแกรม

-gcoff
สร้างข้อมูลการดีบักในรูปแบบ COFF (หากได้รับการสนับสนุน) นี้เป็น
รูปแบบที่ใช้โดย SDB บนระบบ System V ส่วนใหญ่ก่อน System V Release 4

-gxcoff
สร้างข้อมูลการดีบักในรูปแบบ XCOFF (หากได้รับการสนับสนุน) นี้เป็น
รูปแบบที่ใช้โดยดีบักเกอร์ DBX บนระบบ IBM RS/6000

-gxcoff+
สร้างข้อมูลการดีบักในรูปแบบ XCOFF (หากได้รับการสนับสนุน) โดยใช้ GNU
ส่วนขยายที่เข้าใจโดยดีบักเกอร์ GNU (GDB) เท่านั้น การใช้นามสกุลเหล่านี้คือ
มีแนวโน้มที่จะทำให้โปรแกรมแก้ไขข้อบกพร่องอื่น ๆ ขัดข้องหรือปฏิเสธที่จะอ่านโปรแกรมและอาจทำให้
แอสเซมเบลอร์อื่นที่ไม่ใช่แอสเซมเบลอร์ GNU (GAS) ที่จะล้มเหลวโดยมีข้อผิดพลาด

-gdwarf-รุ่น
สร้างข้อมูลการดีบักในรูปแบบ DWARF (หากได้รับการสนับสนุน) คุณค่าของ
รุ่น อาจเป็น 2, 3, 4 หรือ 5; เวอร์ชันเริ่มต้นสำหรับเป้าหมายส่วนใหญ่คือ 4. DWARF
รุ่น 5 เป็นเพียงการทดลอง

โปรดทราบว่าด้วย DWARF เวอร์ชัน 2 บางพอร์ตต้องใช้และใช้บางพอร์ตที่ไม่ขัดแย้งเสมอ
ส่วนขยาย DWARF 3 ในตารางคลี่คลาย

เวอร์ชัน 4 อาจต้องใช้ GDB 7.0 และ -fvar-tracking-assignments เพื่อประโยชน์สูงสุด

-grecord-gcc-สวิตช์
สวิตช์นี้ทำให้ตัวเลือกบรรทัดคำสั่งที่ใช้เรียกคอมไพเลอร์ที่อาจ
ส่งผลต่อการสร้างโค้ดที่จะผนวกเข้ากับแอตทริบิวต์ DW_AT_producer ใน DWARF
ข้อมูลการดีบัก ตัวเลือกจะถูกต่อด้วยช่องว่างที่แยกจาก
ซึ่งกันและกันและจากเวอร์ชั่นคอมไพเลอร์ ดูสิ่งนี้ด้วย -frecord-gcc-สวิตช์ สำหรับอื่น ๆ
วิธีการจัดเก็บตัวเลือกคอมไพเลอร์ลงในไฟล์อ็อบเจ็กต์ นี่คือค่าเริ่มต้น

-gno-record-gcc-สวิตช์
ไม่อนุญาตการผนวกตัวเลือกบรรทัดคำสั่งต่อท้ายแอตทริบิวต์ DW_AT_producer ใน DWARF
ข้อมูลการดีบัก

-gstrict-คนแคระ
ไม่อนุญาตให้ใช้ส่วนขยายของรุ่นมาตรฐาน DWARF ที่ใหม่กว่าที่เลือกด้วย
-gdwarf-รุ่น. สำหรับเป้าหมายส่วนใหญ่ที่ใช้ส่วนขยาย DWARF ที่ไม่ขัดแย้งกันในภายหลัง
อนุญาตให้ใช้เวอร์ชันมาตรฐาน

-gno-เข้มงวด-คนแคระ
อนุญาตให้ใช้ส่วนขยายของรุ่นมาตรฐาน DWARF ที่ใหม่กว่าที่เลือกด้วย
-gdwarf-รุ่น.

-gz[=ชนิด]
สร้างส่วนแก้ไขข้อบกพร่องที่บีบอัดในรูปแบบ DWARF หากได้รับการสนับสนุน ถ้า ชนิด is
ไม่ได้กำหนดประเภทเริ่มต้นขึ้นอยู่กับความสามารถของแอสเซมเบลอร์และลิงเกอร์
มือสอง ชนิด อาจเป็นหนึ่งใน ไม่มี (อย่าบีบอัดส่วนการดีบัก) zlib (ใช้ zlib
การบีบอัดในรูปแบบ ELF gABI) หรือ zlib-gnu (ใช้การบีบอัด zlib ใน GNU . ดั้งเดิม
รูปแบบ). หากตัวเชื่อมโยงไม่รองรับการเขียนส่วนการแก้ไขข้อบกพร่องที่บีบอัด ตัวเลือก
ถูกปฏิเสธ มิฉะนั้น ถ้าแอสเซมเบลอร์ไม่สนับสนุนพวกเขา -gz อยู่เงียบๆ
ละเว้นเมื่อสร้างไฟล์อ็อบเจ็กต์

-gvms
สร้างข้อมูลการดีบักในรูปแบบการดีบัก Alpha/VMS (หากได้รับการสนับสนุน) นี้
เป็นรูปแบบที่ใช้โดย DEBUG บนระบบ Alpha/VMS

-gระดับ
-ggdbระดับ
-gstabsระดับ
-gcoffระดับ
-gxcoffระดับ
-gvmsระดับ
ขอข้อมูลการดีบักและยังใช้ ระดับ เพื่อระบุจำนวนข้อมูล NS
ระดับเริ่มต้นคือ 2

ระดับ 0 ไม่มีข้อมูลการดีบักเลย ดังนั้น, -g0 ปฏิเสธ -g.

ระดับ 1 สร้างข้อมูลน้อยที่สุดเพียงพอสำหรับการทำ backtraces ในส่วนของ
โปรแกรมที่คุณไม่ได้วางแผนที่จะแก้ไขข้อบกพร่อง ซึ่งรวมถึงคำอธิบายของฟังก์ชันและ
ตัวแปรภายนอก และตารางหมายเลขบรรทัด แต่ไม่มีข้อมูลเกี่ยวกับตัวแปรท้องถิ่น

ระดับ 3 มีข้อมูลเพิ่มเติม เช่น คำจำกัดความมาโครทั้งหมดที่มีอยู่ใน
โปรแกรม. ดีบักเกอร์บางตัวรองรับการขยายมาโครเมื่อคุณใช้ -g3.

-gdwarf-2 ไม่ยอมรับระดับการดีบักที่ต่อกัน เนื่องจาก GCC ใช้เพื่อรองรับ an
ตัวเลือก -gdwarf ที่หมายถึงการสร้างข้อมูลการดีบักใน DWARF . เวอร์ชัน 1
รูปแบบ (ซึ่งแตกต่างจากเวอร์ชัน 2) อย่างมาก และมันคงจะสับสนเกินไป
รูปแบบการดีบักนั้นล้าสมัยไปนานแล้ว แต่ตัวเลือกนี้ไม่สามารถเปลี่ยนแปลงได้ในขณะนี้ ใช้แทน
ส่วนเพิ่มเติม -gระดับ ตัวเลือกในการเปลี่ยนระดับการดีบักสำหรับ DWARF

-gtoggle
ปิดการสร้างข้อมูลการดีบัก หากละเว้นตัวเลือกนี้จะเป็นการสร้างหรือเปิดใช้งาน
ที่ระดับ 2 มิฉะนั้น ตำแหน่งของอาร์กิวเมนต์นี้ในบรรทัดคำสั่งไม่ได้
เรื่อง; จะมีผลหลังจากประมวลผลตัวเลือกอื่นๆ ทั้งหมดแล้ว และจะมีผลเท่านั้น
ครั้งเดียวไม่ว่าจะให้กี่ครั้งก็ตาม จุดประสงค์หลักเพื่อใช้กับ
-fcompare-debug.

-fsanitize=ที่อยู่
เปิดใช้งาน AddressSanitizer ซึ่งเป็นตัวตรวจจับข้อผิดพลาดหน่วยความจำอย่างรวดเร็ว คำแนะนำในการเข้าถึงหน่วยความจำคือ
เป็นเครื่องมือในการตรวจจับจุดบกพร่องนอกขอบเขตและจุดบกพร่องหลังการใช้งานฟรี ดู
<https://github.com/google/sanitizers/wiki/AddressSanitizer> สำหรับรายละเอียดเพิ่มเติม NS
พฤติกรรมรันไทม์สามารถได้รับอิทธิพลโดยใช้คำสั่ง ASAN_OPTIONS ตัวแปรสภาพแวดล้อม เมื่อไหร่
ตั้งค่าเป็น "help=1" ตัวเลือกที่ใช้ได้จะแสดงเมื่อเริ่มต้นใช้งาน instrumended
โปรแกรม. ดู
<https://github.com/google/sanitizers/wiki/AddressSanitizerFlags#run-time-flags> สำหรับ
รายการตัวเลือกที่รองรับ

-fsanitize=เคอร์เนล-ที่อยู่
เปิดใช้งาน AddressSanitizer สำหรับเคอร์เนล Linux ดูhttps://github.com/google/kasan/wiki>
.

-fsanitize=เธรด
เปิดใช้งาน ThreadSanitizer เครื่องตรวจจับการแข่งขันข้อมูลที่รวดเร็ว คำแนะนำในการเข้าถึงหน่วยความจำคือ
เครื่องมือเพื่อตรวจจับข้อบกพร่องของการแข่งขันข้อมูล ดู
<https://github.com/google/sanitizers/wiki#threadsanitizer> สำหรับรายละเอียดเพิ่มเติม วิ่ง-
พฤติกรรมเวลาสามารถได้รับอิทธิพลโดยใช้ TSAN_OPTIONS ตัวแปรสภาพแวดล้อม ดู
<https://github.com/google/sanitizers/wiki/ThreadSanitizerFlags> สำหรับรายการ
ตัวเลือกที่รองรับ

-fsanitize=รั่ว
เปิดใช้งาน LeakSanitizer เครื่องตรวจจับการรั่วไหลของหน่วยความจำ ตัวเลือกนี้มีความสำคัญสำหรับการเชื่อมโยงของ .เท่านั้น
ไฟล์ปฏิบัติการและถ้าไม่ใช่ -fsanitize=ที่อยู่ ไม่ -fsanitize=เธรด ถูกนำมาใช้. ในนั้น
กรณีที่ไฟล์ปฏิบัติการเชื่อมโยงกับไลบรารีที่แทนที่ "malloc" และอื่น ๆ
ฟังก์ชันตัวจัดสรร ดู
<https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer> สำหรับข้อมูลเพิ่มเติม
รายละเอียด. พฤติกรรมรันไทม์สามารถได้รับอิทธิพลโดยใช้คำสั่ง LSAN_OPTIONS สิ่งแวดล้อม
ตัวแปร

-fsanitize=ไม่ได้กำหนด
เปิดใช้งาน UndefinedBehaviorSanitizer ซึ่งเป็นตัวตรวจจับพฤติกรรมที่ไม่ได้กำหนดอย่างรวดเร็ว หลากหลาย
การคำนวณเป็นเครื่องมือในการตรวจจับพฤติกรรมที่ไม่ได้กำหนดไว้ในขณะใช้งานจริง หมุนเวียน
ตัวเลือกย่อยคือ:

-fsanitize=shift
ตัวเลือกนี้ช่วยให้ตรวจสอบได้ว่าผลลัพธ์ของการดำเนินการกะไม่ใช่
ไม่ได้กำหนด. โปรดทราบว่าสิ่งที่ถือว่าไม่ได้กำหนดแน่นอนแตกต่างกันเล็กน้อย
ระหว่าง C และ C++ ตลอดจนระหว่าง ISO C90 และ C99 เป็นต้น

-fsanitize=จำนวนเต็มหารด้วยศูนย์
ตรวจจับการหารจำนวนเต็มด้วยศูนย์และการหาร "INT_MIN / -1"

-fsanitize=เข้าถึงไม่ได้
ด้วยตัวเลือกนี้ คอมไพเลอร์จะเปลี่ยนการเรียก "__builtin_unreachable" เป็น a
เรียกข้อความการวินิจฉัยแทน เมื่อโทรถึง "__builtin_unreachable"
พฤติกรรมไม่ได้กำหนดไว้

-fsanitize=vla-bound
ตัวเลือกนี้สั่งให้คอมไพเลอร์ตรวจสอบว่าขนาดของตัวแปร length
อาร์เรย์เป็นค่าบวก

-fsanitize=null
ตัวเลือกนี้เปิดใช้งานการตรวจสอบตัวชี้ โดยเฉพาะแอปพลิเคชันที่สร้างด้วย
การเปิดตัวเลือกนี้จะแสดงข้อความแสดงข้อผิดพลาดเมื่อพยายามยกเลิกการอ้างอิง a
ตัวชี้ NULL หรือถ้าการอ้างอิง (อาจเป็นการอ้างอิง rvalue) ถูกผูกไว้กับค่า NULL
ตัวชี้หรือถ้ามีการเรียกใช้เมธอดบนวัตถุที่ชี้โดยตัวชี้ NULL

-fsanitize=ส่งคืน
ตัวเลือกนี้เปิดใช้งานการตรวจสอบใบแจ้งยอดส่งคืน โปรแกรมที่สร้างด้วยตัวเลือกนี้
เปิดเครื่องจะแสดงข้อความแสดงข้อผิดพลาดเมื่อสิ้นสุดฟังก์ชัน non-void is
ถึงโดยไม่ต้องคืนค่าจริง ตัวเลือกนี้ใช้งานได้ใน C ++ เท่านั้น

-fsanitize=ลงนาม-จำนวนเต็ม-ล้น
ตัวเลือกนี้เปิดใช้งานการตรวจสอบโอเวอร์โฟลว์จำนวนเต็มที่มีลายเซ็น เราตรวจสอบว่าผลลัพธ์ของ
"+", "*" และทั้ง unary และ binary "-" ไม่ล้นในเครื่องหมาย
เลขคณิต หมายเหตุ ต้องคำนึงถึงกฎการเลื่อนตำแหน่งเป็นจำนวนเต็มด้วย นั่นคือ,
ต่อไปนี้จะไม่ล้น:

ถ่านที่มีลายเซ็น a = SCHAR_MAX;
++;

-fsanitize=ขอบเขต
ตัวเลือกนี้เปิดใช้งานการวัดขอบเขตอาร์เรย์ ต่าง ๆ นอกขอบเขต
ตรวจพบการเข้าถึง สมาชิกอาร์เรย์ที่ยืดหยุ่นได้ อาร์เรย์ที่เหมือนสมาชิกอาร์เรย์ที่ยืดหยุ่นได้
และตัวเริ่มต้นของตัวแปรที่มีการจัดเก็บแบบคงที่ไม่ได้ถูกวัด

-fsanitize=การจัดตำแหน่ง
ตัวเลือกนี้ช่วยให้ตรวจสอบการจัดตำแหน่งของพอยน์เตอร์เมื่อไม่ได้อ้างอิง
หรือเมื่อการอ้างอิงถูกผูกไว้กับเป้าหมายที่มีการจัดตำแหน่งไม่เพียงพอ หรือเมื่อวิธีการหรือ
ตัวสร้างถูกเรียกใช้บนวัตถุที่จัดตำแหน่งไม่เพียงพอ

-fsanitize=วัตถุ-ขนาด
ตัวเลือกนี้ช่วยให้ใช้เครื่องมืออ้างอิงหน่วยความจำโดยใช้
ฟังก์ชัน "__builtin_object_size" การเข้าถึงตัวชี้นอกขอบเขตที่หลากหลายคือ
ตรวจพบ

-fsanitize=float-หารด้วยศูนย์
ตรวจจับการหารจุดทศนิยมด้วยศูนย์ ต่างจากตัวเลือกอื่นที่คล้ายคลึงกัน
-fsanitize=float-หารด้วยศูนย์ ไม่ได้เปิดใช้งานโดย -fsanitize=ไม่ได้กำหนด, ตั้งแต่
การหารจุดทศนิยมด้วยศูนย์อาจเป็นวิธีที่ถูกต้องในการรับอนันต์
และน่าน

-fsanitize=float-cast-ล้น
ตัวเลือกนี้เปิดใช้งานการตรวจสอบการแปลงแบบทศนิยมเป็นจำนวนเต็ม เราตรวจสอบ
ว่าผลลัพธ์ของการแปลงจะไม่ล้น ไม่เหมือนที่อื่นที่คล้ายคลึงกัน
ตัวเลือก -fsanitize=float-cast-ล้น ไม่ได้เปิดใช้งานโดย -fsanitize=ไม่ได้กำหนด.
ตัวเลือกนี้ใช้งานไม่ได้กับข้อยกเว้น "FE_INVALID" ที่เปิดใช้งาน

-fsanitize=nonnull-attribute
ตัวเลือกนี้เปิดใช้งานเครื่องมือวัดการโทร โดยตรวจสอบว่าค่า null ไม่ใช่
ส่งผ่านไปยังอาร์กิวเมนต์ที่ทำเครื่องหมายว่าต้องการค่าที่ไม่ใช่ค่าว่างโดยฟังก์ชัน "nonnull"
คุณลักษณะ

-fsanitize=returns-nonnull-attribute
ตัวเลือกนี้เปิดใช้งานเครื่องมือวัดของคำสั่งส่งคืนในฟังก์ชันที่มีเครื่องหมาย
แอตทริบิวต์ของฟังก์ชัน "returns_nonnull" เพื่อตรวจจับการส่งคืนค่า null จาก such
ฟังก์ชั่น

-fsanitize=บูล
ตัวเลือกนี้ช่วยให้สามารถวัดค่าของโหลดจากบูลได้ หากมีค่าอื่นที่ไม่ใช่ 0/1
โหลดแล้ว มีการออกข้อผิดพลาดรันไทม์

-fsanitize=enum
ตัวเลือกนี้ช่วยให้สามารถวัดค่าของโหลดจากประเภท enum หากมีค่า
โหลดนอกช่วงของค่าสำหรับประเภท enum ข้อผิดพลาดรันไทม์คือ
ออก.

-fsanitize=vptr
ตัวเลือกนี้เปิดใช้งานเครื่องมือวัดของการเรียกใช้ฟังก์ชันสมาชิก C++ การเข้าถึงสมาชิก
และการแปลงระหว่างพอยน์เตอร์เป็นเบสและคลาสที่ได้รับเพื่อตรวจสอบ
ออบเจ็กต์ที่อ้างอิงมีประเภทไดนามิกที่ถูกต้อง

ในขณะที่ -ftrapv ทำให้มีการปล่อยกับดักสำหรับการล้นที่ลงนาม -fsanitize=ไม่ได้กำหนด
ให้ข้อความวินิจฉัย ปัจจุบันนี้ใช้ได้เฉพาะในตระกูลภาษา C เท่านั้น

-fno-sanitize=ทั้งหมด
ตัวเลือกนี้ปิดใช้งานการฆ่าเชื้อที่เปิดใช้งานก่อนหน้านี้ทั้งหมด -fsanitize=ทั้งหมด ไม่ใช่
อนุญาต เนื่องจากไม่สามารถใช้น้ำยาฆ่าเชื้อบางชนิดร่วมกันได้

-fasan-shadow-offset=จำนวน
ตัวเลือกนี้บังคับให้ GCC ใช้การชดเชยเงาแบบกำหนดเองในการตรวจสอบ AddressSanitizer มันคือ
มีประโยชน์สำหรับการทดลองกับเลย์เอาต์หน่วยความจำเงาที่แตกต่างกันใน Kernel
ที่อยู่Sanitizer.

-fsanitize-กู้คืน[=opts]
-fsanitize-กู้คืน= ควบคุมโหมดการกู้คืนข้อผิดพลาดสำหรับน้ำยาฆ่าเชื้อที่กล่าวถึงในเครื่องหมายจุลภาค
รายการที่แยกจากกันของ opts. การเปิดใช้งานตัวเลือกนี้สำหรับส่วนประกอบของน้ำยาฆ่าเชื้อจะทำให้
พยายามรันโปรแกรมต่อไปราวกับว่าไม่มีข้อผิดพลาดเกิดขึ้น นี้หมายถึงหลาย
ข้อผิดพลาดรันไทม์สามารถรายงานได้ในการรันโปรแกรมเดียวและรหัสออกของ
โปรแกรมอาจบ่งบอกถึงความสำเร็จแม้ว่าจะมีการรายงานข้อผิดพลาดแล้ว NS
-fno-sanitize-recover= สามารถใช้ตัวเลือกเพื่อเปลี่ยนลักษณะการทำงานนี้ได้: เฉพาะตัวแรกเท่านั้น
มีการรายงานข้อผิดพลาดที่ตรวจพบ จากนั้นโปรแกรมจะออกจากโปรแกรมด้วยรหัสทางออกที่ไม่เป็นศูนย์

ขณะนี้คุณลักษณะนี้ใช้ได้เฉพาะกับ -fsanitize=ไม่ได้กำหนด (และตัวเลือกย่อย ยกเว้น
for -fsanitize=เข้าถึงไม่ได้ และ -fsanitize=ส่งคืน), -fsanitize=float-cast-ล้น,
-fsanitize=float-หารด้วยศูนย์ และ -fsanitize=เคอร์เนล-ที่อยู่. สำหรับน้ำยาฆ่าเชื้อเหล่านี้
การกู้คืนข้อผิดพลาดถูกเปิดใช้งานโดยค่าเริ่มต้น -fsanitize-กู้คืน=ทั้งหมด และ
-fno-sanitize-recover=ทั้งหมด เป็นที่ยอมรับเช่นกัน อดีตช่วยให้ฟื้นตัวได้ทั้งหมด
น้ำยาฆ่าเชื้อที่รองรับส่วนหลังจะปิดการใช้งานการกู้คืนสำหรับน้ำยาฆ่าเชื้อทั้งหมดที่
สนับสนุนมัน

ไวยากรณ์ที่ไม่มีความชัดเจน opts พารามิเตอร์เลิกใช้แล้ว เทียบเท่ากับ

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

เหมือนกับ -fno-ฆ่าเชื้อ-กู้คืน เทียบเท่ากับ

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

-fsanitize-undefined-trap-on-error
พื้นที่ปลูก -fsanitize-undefined-trap-on-error ตัวเลือกสั่งให้คอมไพเลอร์รายงาน
พฤติกรรมที่ไม่ได้กำหนดโดยใช้ "__builtin_trap" แทนที่จะเป็นรูทีนไลบรารี "libubsan"
ข้อดีของสิ่งนี้คือไม่จำเป็นต้องใช้ไลบรารี "libubsan" และไม่เชื่อมโยง
ใน ดังนั้นสิ่งนี้จึงใช้งานได้แม้ในสภาพแวดล้อมอิสระ

-fcheck-ตัวชี้ขอบเขต
เปิดใช้งานเครื่องมือตรวจสอบขอบเขตของตัวชี้ การอ้างอิงหน่วยความจำแต่ละรายการเป็นเครื่องมือ
ด้วยการตรวจสอบพอยน์เตอร์ที่ใช้สำหรับการเข้าถึงหน่วยความจำกับขอบเขตที่เกี่ยวข้องกับสิ่งนั้น
ตัวชี้

ขณะนี้มีเพียงการใช้งานสำหรับ Intel MPX ที่มีอยู่ ดังนั้น x86 เป้าหมายและ
-mmpx จำเป็นต้องเปิดใช้งานคุณสมบัตินี้ เครื่องมือวัดแบบ MPX ต้องใช้a
ไลบรารีรันไทม์เพื่อเปิดใช้งาน MPX ในฮาร์ดแวร์และจัดการสัญญาณการละเมิดขอบเขต โดย
ค่าเริ่มต้นเมื่อ -fcheck-ตัวชี้ขอบเขต และ -mmpx ตัวเลือกใช้เพื่อเชื่อมโยงโปรแกรม
ไดรเวอร์ GCC เชื่อมโยงกับ libmpx ไลบรารีรันไทม์และ libmpxwrappers ห้องสมุด. มัน
ยังส่งผ่าน '-z bndplt' ไปยังตัวเชื่อมโยงในกรณีที่รองรับตัวเลือกนี้ (ซึ่งถูกตรวจสอบ
ในการกำหนดค่า libmpx) โปรดทราบว่าตัวเชื่อมโยงเวอร์ชันเก่าอาจละเว้นตัวเลือก ทอง
ตัวเชื่อมโยงไม่รองรับตัวเลือก '-z bndplt' ไม่มีการสนับสนุน '-z bndplt' ในลิงเกอร์ทั้งหมด
การเรียกไลบรารีไดนามิกสูญเสียขอบเขตที่ผ่าน ทำให้ระดับการป้องกันโดยรวมลดลง มันคือ
ขอแนะนำให้ใช้ตัวเชื่อมโยงด้วยการสนับสนุน '-z bndplt' ในกรณีที่ตัวเชื่อมโยงดังกล่าวไม่ใช่
ได้แนะนำให้ใช้เสมอ -static-libmpxwrappers เพื่อการปกป้องที่ดีขึ้น
ระดับหรือใช้ -คงที่ เพื่อหลีกเลี่ยงการโทรภายนอกไปยังไลบรารีไดนามิกอย่างสมบูรณ์ MPX-
เครื่องมือวัดตามอาจใช้สำหรับการดีบักและอาจรวมอยู่ในการผลิตด้วย
รหัสเพื่อเพิ่มความปลอดภัยของโปรแกรม ขึ้นอยู่กับการใช้งาน คุณอาจมี
ข้อกำหนดสำหรับไลบรารีรันไทม์ ไลบรารีรันไทม์ MPX เวอร์ชันปัจจุบัน
มุ่งเน้นที่จะใช้เป็นเครื่องมือแก้ไขข้อบกพร่อง การใช้ไลบรารีรันไทม์ MPX หมายถึง
-lpthread. ดูเพิ่มเติม -static-libmpx. พฤติกรรมของไลบรารีรันไทม์สามารถมีอิทธิพลได้
โดยใช้ต่างๆ CHKP_RT_* ตัวแปรสภาพแวดล้อม ดู
<https://gcc.gnu.org/wiki/Intel%20MPX%20support%20in%20the%20GCC%20compiler> สำหรับข้อมูลเพิ่มเติม
รายละเอียด

เครื่องมือที่สร้างขึ้นอาจถูกควบคุมโดยต่างๆ -fchkp-* ตัวเลือกและโดย
แอตทริบิวต์ฟิลด์โครงสร้าง "bnd_variable_size" และ "bnd_legacy" และ "bnd_instrument"
คุณลักษณะของฟังก์ชัน GCC ยังมีฟังก์ชันในตัวจำนวนมากสำหรับการควบคุม
ตัวตรวจสอบขอบเขตตัวชี้

-fchkp-check-incomplete-type
สร้างขอบเขตตัวชี้ตรวจสอบตัวแปรที่มีประเภทไม่สมบูรณ์ เปิดใช้งานโดย
ค่าเริ่มต้น.

-fchkp-ขอบเขตแคบ
ควบคุมขอบเขตที่ใช้โดย Pointer Bounds Checker สำหรับตัวชี้ไปยังฟิลด์ออบเจ็กต์ ถ้า
เปิดใช้งานการจำกัดให้แคบลงแล้วจึงใช้ขอบเขตของฟิลด์ มิฉะนั้นจะใช้ขอบเขตอ็อบเจ็กต์
ดูสิ่งนี้ด้วย -fchkp-narrow-to-innermost-array และ -fchkp-first-field-has-own-bounds.
เปิดใช้งานโดยค่าเริ่มต้น

-fchkp-first-field-has-own-bounds
บังคับให้ตัวตรวจสอบขอบเขตตัวชี้ใช้ขอบเขตที่แคบลงสำหรับที่อยู่ตัวแรก
สนามในโครงสร้าง โดยค่าเริ่มต้น ตัวชี้ไปยังฟิลด์แรกมีขอบเขตเหมือนกัน
เป็นตัวชี้ไปยังโครงสร้างทั้งหมด

-fchkp-narrow-to-innermost-array
บังคับให้ตัวตรวจสอบขอบเขตตัวชี้ใช้ขอบเขตของอาร์เรย์ในสุดในกรณีที่ซ้อนกัน
การเข้าถึงอาร์เรย์แบบคงที่ โดยค่าเริ่มต้นตัวเลือกนี้จะถูกปิดใช้งานและขอบเขตของนอกสุด
ใช้อาร์เรย์

-fchkp-เพิ่มประสิทธิภาพ
เปิดใช้งานการเพิ่มประสิทธิภาพตัวตรวจสอบขอบเขตของตัวชี้ เปิดใช้งานโดยค่าเริ่มต้นที่การเพิ่มประสิทธิภาพ
ระดับ -O, -O2, -O3.

-fchkp-use-fast-string-functions
เปิดใช้งานการใช้ฟังก์ชันสตริงเวอร์ชัน *_nobnd (ไม่คัดลอกขอบเขต) โดย Pointer
ตัวตรวจสอบขอบเขต ปิดใช้งานโดยค่าเริ่มต้น

-fchkp-use-nochk-string-functions
เปิดใช้งานการใช้ฟังก์ชันสตริงเวอร์ชัน *_nochk (ไม่ตรวจสอบขอบเขต) โดย Pointer
ตัวตรวจสอบขอบเขต ปิดใช้งานโดยค่าเริ่มต้น

-fchkp-use-static-bounds
อนุญาตให้ตัวตรวจสอบขอบเขตของตัวชี้สร้างขอบเขตคงที่ที่ถือขอบเขตของสแตติก
ตัวแปร เปิดใช้งานโดยค่าเริ่มต้น

-fchkp-use-static-const-bounds
ใช้ขอบเขตเริ่มต้นแบบสแตติกสำหรับขอบเขตคงที่แทนที่จะสร้างแต่ละขอบเขต
เวลาที่พวกเขาต้องการ โดยค่าเริ่มต้นเปิดใช้งานเมื่อ -fchkp-use-static-bounds เปิดใช้งาน.

-fchkp-treat-zero-dynamic-size-as-infinite
ด้วยตัวเลือกนี้ ออบเจ็กต์ที่มีประเภทไม่สมบูรณ์ซึ่งมีขนาดที่ได้รับแบบไดนามิกเป็นศูนย์
จะถือว่ามีขนาดอนันต์แทนโดย Pointer Bounds Checker ตัวเลือกนี้
อาจมีประโยชน์หากโปรแกรมเชื่อมโยงกับไลบรารีที่ไม่มีข้อมูลขนาดสำหรับบางคน
สัญลักษณ์ ปิดใช้งานโดยค่าเริ่มต้น

-fchkp-check-read
สั่งให้ตัวตรวจสอบขอบเขตพอยน์เตอร์สร้างการตรวจสอบสำหรับการเข้าถึงการอ่านหน่วยความจำทั้งหมด
เปิดใช้งานโดยค่าเริ่มต้น

-fchkp-check-write
สั่งให้ตัวตรวจสอบขอบเขตพอยน์เตอร์สร้างการตรวจสอบสำหรับการเข้าถึงการเขียนทั้งหมดไปยังหน่วยความจำ
เปิดใช้งานโดยค่าเริ่มต้น

-fchkp-ร้านค้าขอบเขต
สั่งให้ตัวตรวจสอบขอบเขตของตัวชี้สร้างที่เก็บขอบเขตสำหรับการเขียนตัวชี้
เปิดใช้งานโดยค่าเริ่มต้น

-fchkp-instrument-calls
สั่งให้ตัวตรวจสอบขอบเขตพอยน์เตอร์ส่งผ่านขอบเขตของตัวชี้ไปยังการโทร เปิดใช้งานโดยค่าเริ่มต้น

-fchkp-instrument-marked-only
สั่งให้ตัวตรวจสอบขอบเขตของตัวชี้ไปยังฟังก์ชันเครื่องมือที่มีเครื่องหมาย . เท่านั้น
แอตทริบิวต์ "bnd_instrument" ปิดใช้งานโดยค่าเริ่มต้น

-fchkp-use-wrappers
อนุญาตให้ Pointer Bounds Checker แทนที่การเรียกใช้ฟังก์ชันในตัวด้วยการโทรไปยัง
ฟังก์ชั่นห่อหุ้ม เมื่อไหร่ -fchkp-use-wrappers ใช้สำหรับเชื่อมโยงโปรแกรม ไดรเวอร์ GCC
เชื่อมโยงโดยอัตโนมัติกับ libmpxwrappers. ดูเพิ่มเติม -static-libmpxwrappers. เปิดใช้งาน
โดยค่าเริ่มต้น

-fdump-final-insns[=ไฟล์]
ดัมพ์การเป็นตัวแทนภายในขั้นสุดท้าย (RTL) ไปยัง ไฟล์. ถ้าอาร์กิวเมนต์ทางเลือกคือ
ละเว้น (หรือ if ไฟล์ คือ ".") ชื่อของไฟล์ดัมพ์ถูกกำหนดโดยการต่อท้าย
".gkd" เป็นชื่อไฟล์เอาต์พุตการคอมไพล์

-fcompare-debug[=opts]
หากไม่มีข้อผิดพลาดเกิดขึ้นระหว่างการคอมไพล์ ให้รันคอมไพเลอร์อีกครั้ง โดยเพิ่ม opts และ
-fcompare-debug-วินาที อาร์กิวเมนต์ที่ส่งผ่านไปยังการรวบรวมครั้งที่สอง ทิ้ง
การแสดงภายในขั้นสุดท้ายในการคอมไพล์ทั้งสอง และพิมพ์ข้อผิดพลาดหากต่างกัน

หากละเว้นเครื่องหมายเท่ากับค่าเริ่มต้น -gtoggle ถูกนำมาใช้.

ตัวแปรสภาพแวดล้อม GCC_COMPARE_DEBUG, หากกำหนดไว้, ไม่ว่างและไม่เป็นศูนย์,
เปิดใช้งานโดยปริยาย -fcompare-debug. ถ้า GCC_COMPARE_DEBUG ถูกกำหนดให้เป็นสตริง
ขึ้นต้นด้วยขีดกลาง แล้วใช้สำหรับ optsมิฉะนั้นค่าเริ่มต้น -gtoggle is
มือสอง

-fcompare-debug=, ที่มีเครื่องหมายเท่ากับ แต่ไม่มี opts, เทียบเท่ากับ
-fno-compare-debugซึ่งปิดใช้งานการทุ่มตลาดของการเป็นตัวแทนขั้นสุดท้ายและ
การรวบรวมที่สองป้องกันแม้กระทั่ง GCC_COMPARE_DEBUG จากการมีผลบังคับใช้

เพื่อตรวจสอบความคุ้มครองเต็มรูปแบบระหว่าง -fcompare-debug ทดสอบ set GCC_COMPARE_DEBUG เพื่อพูด
-fcompare-debug-not-overriddenซึ่ง GCC ปฏิเสธว่าเป็นตัวเลือกที่ไม่ถูกต้องในใดๆ จริง
การคอมไพล์ (แทนที่จะเป็นการประมวลผลล่วงหน้า การประกอบ หรือการเชื่อมโยง) เพื่อรับเพียงคำเตือน
การตั้งค่า GCC_COMPARE_DEBUG ไปยัง -w%n-fcompare-debug ไม่ แทนที่ จะทำ.

-fcompare-debug-วินาที
ตัวเลือกนี้จะถูกส่งต่อโดยปริยายไปยังคอมไพเลอร์สำหรับการคอมไพล์ครั้งที่สองที่ร้องขอ
by -fcompare-debugพร้อมกับตัวเลือกในการปิดเสียงคำเตือน และละเว้นตัวเลือกอื่นๆ
ที่จะทำให้เกิดผลลัพธ์ของคอมไพเลอร์ผลข้างเคียงไปยังไฟล์หรือไปยังเอาต์พุตมาตรฐาน
ไฟล์ดัมพ์และไฟล์ชั่วคราวที่เก็บรักษาไว้จะถูกเปลี่ยนชื่อเพื่อให้มี ".gk"
การขยายเพิ่มเติมระหว่างการคอมไพล์ครั้งที่สอง เพื่อหลีกเลี่ยงการเขียนทับสิ่งเหล่านั้น
ที่สร้างขึ้นโดยครั้งแรก

เมื่อตัวเลือกนี้ถูกส่งไปยังไดรเวอร์คอมไพเลอร์ จะทำให้ เป็นครั้งแรก รวบรวมถึง
ถูกข้าม ซึ่งทำให้มีประโยชน์เพียงเล็กน้อยนอกเหนือจากการดีบักคอมไพเลอร์ที่เหมาะสม

-felimate-dwarf2-dups
บีบอัดข้อมูลการดีบัก DWARF 2 โดยกำจัดข้อมูลที่ซ้ำกันเกี่ยวกับ
แต่ละสัญลักษณ์ ตัวเลือกนี้เหมาะสมเมื่อสร้างการดีบัก DWARF 2 เท่านั้น
ข้อมูลกับ -gdwarf-2.

-femit-struct-debug-baseonly
ปล่อยข้อมูลการดีบักสำหรับประเภทโครงสร้างเหมือนเฉพาะเมื่อชื่อฐานของ
ไฟล์ต้นฉบับการคอมไพล์ตรงกับชื่อฐานของไฟล์ที่มีการกำหนดโครงสร้าง

ตัวเลือกนี้ช่วยลดขนาดของข้อมูลการดีบักอย่างมาก แต่ที่
การสูญเสียข้อมูลประเภทที่อาจเกิดขึ้นอย่างมีนัยสำคัญต่อดีบักเกอร์ ดู
-femit-struct-debug-reduced สำหรับตัวเลือกที่ก้าวร้าวน้อยกว่า ดู
-femit-struct-debug-รายละเอียด เพื่อการควบคุมที่ละเอียดยิ่งขึ้น

ตัวเลือกนี้ใช้ได้กับ DWARF 2 เท่านั้น

-femit-struct-debug-reduced
ปล่อยข้อมูลการดีบักสำหรับประเภทโครงสร้างเหมือนเฉพาะเมื่อชื่อฐานของ
ไฟล์ต้นฉบับการคอมไพล์ตรงกับชื่อฐานของไฟล์ที่กำหนดประเภท
เว้นแต่ struct เป็นเทมเพลตหรือกำหนดไว้ในส่วนหัวของระบบ

ตัวเลือกนี้ช่วยลดขนาดของข้อมูลการดีบักได้อย่างมาก ด้วยบางส่วน
การสูญเสียข้อมูลประเภทที่อาจเกิดขึ้นกับดีบักเกอร์ ดู -femit-struct-debug-baseonly
สำหรับตัวเลือกที่ก้าวร้าวมากขึ้น ดู -femit-struct-debug-รายละเอียด สำหรับรายละเอียดเพิ่มเติม
ควบคุม

ตัวเลือกนี้ใช้ได้กับ DWARF 2 เท่านั้น

-femit-struct-debug-รายละเอียด[=spec-list]
ระบุประเภทเหมือนโครงสร้างที่คอมไพเลอร์สร้างข้อมูลการดีบัก NS
เจตนาคือการลดข้อมูลการดีบัก struct ที่ซ้ำกันระหว่างไฟล์อ็อบเจ็กต์ที่แตกต่างกัน
ภายในโปรแกรมเดียวกัน

ตัวเลือกนี้เป็นเวอร์ชันโดยละเอียดของ -femit-struct-debug-reduced และ
-femit-struct-debug-baseonlyซึ่งตอบสนองความต้องการส่วนใหญ่

ข้อกำหนดมีไวยากรณ์[ผบ:|ดัชนี:][ออร์:|แนว:](ใด|SYS|ฐาน|ไม่มี)

คำแรกที่เป็นทางเลือก จำกัดข้อกำหนดเฉพาะโครงสร้างที่ใช้โดยตรง
(ผบ:) หรือใช้ทางอ้อม (ดัชนี:). ประเภทโครงสร้างจะใช้โดยตรงเมื่อเป็นประเภท
ของตัวแปร สมาชิก การใช้ทางอ้อมเกิดขึ้นผ่านตัวชี้ไปยังโครงสร้าง นั่นคือ,
เมื่อใช้โครงสร้างที่ไม่สมบูรณ์นั้นถูกต้อง การใช้งานจะเป็นทางอ้อม ตัวอย่างคือ โครงสร้าง
หนึ่ง โดยตรง; โครงสร้าง สอง * ทางอ้อม;.

คำที่สองที่เป็นทางเลือกจำกัดข้อกำหนดเฉพาะโครงสร้างธรรมดา (ออร์:) หรือ
โครงสร้างทั่วไป (แนว:). โครงสร้างทั่วไปค่อนข้างซับซ้อนในการอธิบาย สำหรับ C++
เหล่านี้เป็นความเชี่ยวชาญเฉพาะทางที่ไม่ชัดแจ้งของคลาสเทมเพลตหรือคลาสที่ไม่ใช่เทมเพลต
ภายในข้างต้น ภาษาโปรแกรมอื่น ๆ มีชื่อสามัญ แต่
-femit-struct-debug-รายละเอียด ยังไม่ได้ดำเนินการ

คำที่สามระบุไฟล์ต้นฉบับสำหรับโครงสร้างที่คอมไพเลอร์
ควรปล่อยข้อมูลการดีบัก ค่า ไม่มี และ ใด มีความหมายปกติ NS
ความคุ้มค่า ฐาน หมายความว่าฐานของชื่อไฟล์ที่ประกาศประเภท
ปรากฏจะต้องตรงกับฐานของชื่อไฟล์รวบรวมหลัก ในทางปฏิบัติ
นี่หมายความว่าเมื่อทำการคอมไพล์ foo.cข้อมูลการดีบักถูกสร้างขึ้นสำหรับประเภท
ประกาศในไฟล์นั้นและ foo.hแต่ไม่ใช่ไฟล์ส่วนหัวอื่นๆ มูลค่า SYS วิธี
ประเภทเหล่านั้นน่าพอใจ ฐาน หรือประกาศในระบบหรือส่วนหัวของคอมไพเลอร์

คุณอาจต้องทดลองเพื่อกำหนดการตั้งค่าที่ดีที่สุดสำหรับแอปพลิเคชันของคุณ

ค่าเริ่มต้นคือ -femit-struct-debug-detailed=all.

ตัวเลือกนี้ใช้ได้กับ DWARF 2 เท่านั้น

-fno-merge-debug-strings
สั่งให้ตัวเชื่อมโยงไม่รวมสตริงเข้าด้วยกันในข้อมูลการดีบักที่เป็น
เหมือนกันในไฟล์อ็อบเจ็กต์ต่างๆ แอสเซมเบลอร์ทั้งหมดไม่รองรับการรวมหรือ
ลิงเกอร์ การผสานจะลดขนาดของข้อมูลการดีบักในไฟล์เอาต์พุตที่
ค่าใช้จ่ายในการเพิ่มเวลาในการประมวลผลลิงก์ การผสานถูกเปิดใช้งานโดยค่าเริ่มต้น

-fdebug-prefix-map=เก่า=ใหม่
เมื่อรวบรวมไฟล์ในไดเร็กทอรี เก่า, บันทึกข้อมูลการดีบักที่อธิบายว่าเป็น
in ใหม่ แทน.

-fno-dwarf2-cfi-asm
ปล่อย DWARF 2 คลายข้อมูลในขณะที่คอมไพเลอร์สร้างส่วน ".eh_frame" แทนที่จะใช้
GAS ".cfi_*" คำสั่ง

-p สร้างโค้ดพิเศษเพื่อเขียนข้อมูลโปรไฟล์ที่เหมาะสมกับโปรแกรมวิเคราะห์
. คุณต้องใช้ตัวเลือกนี้เมื่อรวบรวมไฟล์ต้นฉบับที่คุณต้องการข้อมูลเกี่ยวกับ
และคุณต้องใช้มันเมื่อทำการเชื่อมโยง

-pg สร้างโค้ดพิเศษเพื่อเขียนข้อมูลโปรไฟล์ที่เหมาะสมกับโปรแกรมวิเคราะห์
gprof. คุณต้องใช้ตัวเลือกนี้เมื่อรวบรวมไฟล์ต้นฉบับที่คุณต้องการข้อมูลเกี่ยวกับ
และคุณต้องใช้มันเมื่อทำการเชื่อมโยง

-Q ทำให้คอมไพเลอร์พิมพ์ชื่อฟังก์ชันแต่ละชื่อในขณะที่คอมไพล์แล้วพิมพ์บางส่วน
สถิติการผ่านแต่ละครั้งเมื่อเสร็จสิ้น

-ftime-report
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับเวลาที่ใช้โดยแต่ละรอบเมื่อมัน
เสร็จสิ้น

-fmem-รายงาน
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับการจัดสรรหน่วยความจำถาวรเมื่อ
เสร็จสิ้น

-fmem-report-wpa
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับการจัดสรรหน่วยความจำถาวรสำหรับ WPA
เฟสเท่านั้น.

-fpre-ipa-mem-report
-fpost-ipa-mem-report
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับการจัดสรรหน่วยความจำถาวรก่อนหรือ
หลังจากการเพิ่มประสิทธิภาพระหว่างขั้นตอน

-fprofile-รายงาน
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับความสอดคล้องของโปรไฟล์ (โดยประมาณ)
และผลของการจ่ายบอลรายบุคคล

-fstack-การใช้งาน
ทำให้ข้อมูลการใช้งานคอมไพเลอร์เอาท์พุตสแต็คสำหรับโปรแกรม บนฟังก์ชันต่อหนึ่งฟังก์ชัน
พื้นฐาน ชื่อไฟล์สำหรับการถ่ายโอนข้อมูลถูกสร้างขึ้นโดยการต่อท้าย .su ไป auxname. auxname is
สร้างขึ้นจากชื่อของไฟล์เอาต์พุต หากระบุไว้อย่างชัดเจนและไม่ใช่ an
เรียกใช้งานได้ มิฉะนั้น จะเป็นชื่อฐานของไฟล์ต้นทาง รายการประกอบด้วย
สามฟิลด์:

* ชื่อของฟังก์ชัน

* จำนวนไบต์

* ตัวระบุตั้งแต่หนึ่งตัวขึ้นไป: "คงที่", "ไดนามิก", "มีขอบเขต"

ตัวระบุ "คงที่" หมายความว่าฟังก์ชันจัดการสแต็กแบบสแตติก: a
จำนวนไบต์คงที่ถูกจัดสรรสำหรับเฟรมในการป้อนฟังก์ชันและปล่อยเมื่อ
ฟังก์ชั่นออก; ไม่มีการปรับสแต็กเป็นอย่างอื่นในฟังก์ชัน ที่สอง
ฟิลด์คือจำนวนไบต์คงที่นี้

ตัวระบุ "ไดนามิก" หมายความว่าฟังก์ชันจัดการสแต็กแบบไดนามิก: in
นอกเหนือจากการจัดสรรแบบคงที่ที่อธิบายข้างต้นแล้ว การปรับสแต็กจะทำใน
เนื้อหาของฟังก์ชัน เช่น การพุช/ป๊อปอาร์กิวเมนต์รอบการเรียกใช้ฟังก์ชัน ถ้า
ควอลิฟายเออร์ "ถูกจำกัด" ก็มีอยู่เช่นกัน จำนวนของการปรับเหล่านี้มีขอบเขตที่
เวลาคอมไพล์และฟิลด์ที่สองคือขอบเขตบนของจำนวนสแต็กที่ใช้ทั้งหมด
โดยฟังก์ชัน หากไม่มีอยู่ จำนวนเงินของการปรับปรุงเหล่านี้จะไม่ จำกัด
ในเวลารวบรวมและฟิลด์ที่สองแสดงถึงส่วนที่มีขอบเขตเท่านั้น

-fprofile-arcs
เพิ่มรหัสเพื่อให้โปรแกรมไหล โค้ง เป็นเครื่องมือ ระหว่างดำเนินการโปรแกรม
บันทึกจำนวนครั้งที่แต่ละสาขาและการโทรถูกดำเนินการและจำนวนครั้งที่ดำเนินการ
หรือกลับมา เมื่อออกจากโปรแกรมที่คอมไพล์แล้ว จะบันทึกข้อมูลนี้ลงในไฟล์ชื่อ
auxname.gcda สำหรับแต่ละไฟล์ต้นฉบับ ข้อมูลอาจถูกนำไปใช้เพื่อกำหนดโปรไฟล์
การเพิ่มประสิทธิภาพ (-fbranch-ความน่าจะเป็น) หรือสำหรับการวิเคราะห์ความครอบคลุมการทดสอบ
(-ftest-ครอบคลุม). ไฟล์อ็อบเจ็กต์แต่ละไฟล์ auxname สร้างขึ้นจากชื่อของ
ไฟล์เอาต์พุต หากระบุไว้อย่างชัดเจนและไม่ใช่ไฟล์ปฏิบัติการขั้นสุดท้าย มิฉะนั้นจะเป็น
เป็นชื่อฐานของไฟล์ต้นทาง ในทั้งสองกรณีส่วนต่อท้ายจะถูกลบออก (เช่น
foo.gcda สำหรับไฟล์อินพุต dir/foo.c,หรือ dir/foo.gcda สำหรับไฟล์เอาต์พุตที่ระบุเป็น -o
dir/foo.o).

--ความคุ้มครอง
ตัวเลือกนี้ใช้เพื่อคอมไพล์และเชื่อมโยงโค้ดเครื่องมือสำหรับการวิเคราะห์ความครอบคลุม NS
option เป็นคำพ้องความหมายสำหรับ -fprofile-arcs -ftest-ครอบคลุม (เมื่อเรียบเรียง) และ -lgcov
(เมื่อทำการเชื่อมโยง) ดูเอกสารประกอบสำหรับตัวเลือกเหล่านั้นสำหรับรายละเอียดเพิ่มเติม

* รวบรวมไฟล์ต้นฉบับด้วย -fprofile-arcs บวกกับการเพิ่มประสิทธิภาพและการสร้างโค้ด
ตัวเลือก. สำหรับการวิเคราะห์ความครอบคลุมการทดสอบ ใช้เพิ่มเติม -ftest-ครอบคลุม ตัวเลือก
คุณไม่จำเป็นต้องกำหนดโปรไฟล์ทุกไฟล์ต้นฉบับในโปรแกรม

* เชื่อมโยงไฟล์วัตถุของคุณด้วย -lgcov or -fprofile-arcs (หลังหมายถึง
อดีต).

* เรียกใช้โปรแกรมบนปริมาณงานตัวแทนเพื่อสร้างโปรไฟล์ส่วนโค้ง
ข้อมูล. นี้สามารถทำซ้ำได้หลายครั้ง คุณสามารถเรียกใช้พร้อมกันได้
อินสแตนซ์ของโปรแกรมของคุณ และหากระบบไฟล์รองรับการล็อก ไฟล์
ไฟล์ข้อมูลจะได้รับการอัปเดตอย่างถูกต้อง ตรวจพบการเรียก "แยก" และ
จัดการอย่างถูกต้อง (การนับซ้ำจะไม่เกิดขึ้น)

* สำหรับการเพิ่มประสิทธิภาพแบบกำหนดทิศทางโปรไฟล์ ให้คอมไพล์ไฟล์ต้นฉบับอีกครั้งด้วยไฟล์เดียวกัน
ตัวเลือกการเพิ่มประสิทธิภาพและการสร้างโค้ด plus -fbranch-ความน่าจะเป็น.

* สำหรับการวิเคราะห์ความครอบคลุมการทดสอบ ให้ใช้ gcov เพื่อสร้างข้อมูลที่มนุษย์อ่านได้จาก
.gcno และ .gcda ไฟล์. อ้างถึง gcov เอกสารสำหรับเพิ่มเติม
ข้อมูล

กับ -fprofile-arcsสำหรับแต่ละฟังก์ชันของโปรแกรมของคุณ GCC จะสร้างการไหลของโปรแกรม
กราฟ แล้วหาแผนภูมิขยายสำหรับกราฟ เฉพาะส่วนโค้งที่ไม่อยู่บน
spanning tree ต้องมีเครื่องมือ: คอมไพเลอร์เพิ่มโค้ดเพื่อนับจำนวน
ครั้งที่ส่วนโค้งเหล่านี้ถูกดำเนินการ เมื่อส่วนโค้งเป็นทางออกเดียวหรือทางเข้าเท่านั้น
บล็อก สามารถเพิ่มรหัสเครื่องมือในบล็อก มิฉะนั้น พื้นฐานใหม่
ต้องสร้างบล็อกเพื่อเก็บรหัสเครื่องมือวัด

-ftest-ครอบคลุม
สร้างไฟล์บันทึกย่อที่ gcov ยูทิลิตี้การครอบคลุมรหัสสามารถใช้เพื่อแสดงโปรแกรม
ความคุ้มครอง ไฟล์บันทึกของไฟล์ต้นฉบับแต่ละไฟล์เรียกว่า auxname.gcno. อ้างถึง
-fprofile-arcs ตัวเลือกด้านบนสำหรับคำอธิบายของ auxname และคำแนะนำวิธีการ
สร้างข้อมูลครอบคลุมการทดสอบ ข้อมูลความครอบคลุมตรงกับไฟล์ต้นฉบับอย่างใกล้ชิดมากขึ้นหาก
คุณไม่ได้เพิ่มประสิทธิภาพ

-fdbg-cnt-list
พิมพ์ชื่อและขอบบนของตัวนับสำหรับตัวนับการดีบักทั้งหมด

-fdbg-cnt=counter-value-list
ตั้งค่าขอบเขตบนของตัวนับการดีบักภายใน counter-value-list เป็นเครื่องหมายจุลภาคคั่น
รายการของ ชื่อ:ความคุ้มค่า คู่ที่ตั้งค่าขอบเขตบนของแต่ละเคาน์เตอร์ดีบัก ชื่อ ไปยัง
ความคุ้มค่า. ตัวนับการดีบักทั้งหมดมีขอบเขตบนเริ่มต้นของ "UNT_MAX"; ดังนั้น "dbg_cnt"
คืนค่า จริง เสมอ เว้นแต่ตัวเลือกนี้กำหนดขอบเขตบน ตัวอย่างเช่น กับ
-fdbg-cnt=dce:10,tail_call:0, "dbg_cnt(dce)" คืนค่า จริง สำหรับ 10 . แรกเท่านั้น
การร้องขอ

-fenable-ชนิด-ส่ง
-fdisable-ชนิด-ส่ง=ช่วงรายการ
นี่คือชุดของตัวเลือกที่ใช้เพื่อปิดการใช้งาน/เปิดใช้งานการปรับให้เหมาะสมอย่างชัดแจ้ง
ผ่าน ตัวเลือกเหล่านี้มีไว้สำหรับใช้สำหรับการดีบัก GCC ผู้ใช้คอมไพเลอร์ควร
ใช้ตัวเลือกปกติในการเปิด/ปิดใช้งานบัตรผ่านแทน

-fdisable-ipa-ส่ง
ปิดการใช้งาน IPA pass ส่ง. ส่ง คือชื่อรหัสผ่าน หากบัตรผ่านเดียวกันเป็นแบบคงที่
เรียกใช้ในคอมไพเลอร์หลายครั้ง ชื่อรหัสผ่านควรต่อท้ายด้วย a
ลำดับที่เริ่มจาก 1

-fdisable-rtl-ส่ง
-fdisable-rtl-ส่ง=ช่วงรายการ
ปิดการใช้งาน RTL pass ส่ง. ส่ง คือชื่อรหัสผ่าน หากบัตรผ่านเดียวกันเป็นแบบคงที่
เรียกใช้ในคอมไพเลอร์หลายครั้ง ชื่อรหัสผ่านควรต่อท้ายด้วย a
ลำดับที่เริ่มจาก 1 ช่วงรายการ เป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคของ
ช่วงฟังก์ชันหรือชื่อแอสเซมเบลอร์ แต่ละช่วงเป็นคู่ตัวเลขคั่นด้วย a
ลำไส้ใหญ่ ช่วงนี้จะรวมอยู่ในปลายทั้งสอง หากช่วงนั้นไม่สำคัญ ตัวเลข
คู่สามารถลดความซับซ้อนเป็นตัวเลขเดียว หากโหนดกราฟการเรียกของฟังก์ชัน
UID อยู่ในช่วงที่กำหนด ส่ง ถูกปิดการใช้งานสำหรับสิ่งนั้น
ฟังก์ชัน UID แสดงในส่วนหัวของฟังก์ชันของไฟล์ดัมพ์ และ pass
สามารถทิ้งชื่อได้โดยใช้ตัวเลือก -fdump-passes.

-fdisable-ต้นไม้-ส่ง
-fdisable-ต้นไม้-ส่ง=ช่วงรายการ
ปิดการใช้งานการผ่านต้นไม้ ส่ง. ดู -fdisable-rtl สำหรับคำอธิบายของ option
ข้อโต้แย้ง

-fenable-ipa-ส่ง
เปิดใช้งาน IPA pass ส่ง. ส่ง คือชื่อรหัสผ่าน หากบัตรผ่านเดียวกันเป็นแบบคงที่
เรียกใช้ในคอมไพเลอร์หลายครั้ง ชื่อรหัสผ่านควรต่อท้ายด้วย a
ลำดับที่เริ่มจาก 1

-fenable-rtl-ส่ง
-fenable-rtl-ส่ง=ช่วงรายการ
เปิดใช้งาน RTL pass ส่ง. ดู -fdisable-rtl สำหรับคำอธิบายตัวเลือกอาร์กิวเมนต์และ
ตัวอย่าง.

--fenable-ต้นไม้-ส่ง
--fenable-ต้นไม้-ส่ง=ช่วงรายการ
เปิดใช้งานการผ่านต้นไม้ ส่ง. ดู -fdisable-rtl สำหรับคำอธิบายของอาร์กิวเมนต์ตัวเลือก

ต่อไปนี้คือตัวอย่างบางส่วนที่แสดงการใช้ตัวเลือกเหล่านี้

# ปิดการใช้งาน ccp1 สำหรับทุกฟังก์ชั่น
-fdisable-tree-ccp1
# ปิดการใช้งาน unroll ทั้งหมดสำหรับฟังก์ชั่นที่มี 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-คลี่

-dตัวอักษร
-fdump-rtl-ส่ง
-fdump-rtl-ส่ง=ชื่อไฟล์
บอกให้ทำการดีบักดัมพ์ในระหว่างการคอมไพล์ตามเวลาที่กำหนดโดย ตัวอักษร. นี้
ใช้สำหรับการดีบักการส่งผ่าน RTL ของคอมไพเลอร์ ชื่อไฟล์สำหรับส่วนใหญ่
ของการถ่ายโอนข้อมูลจะทำโดยการต่อท้ายหมายเลขรหัสผ่านและคำต่อ ชื่อดัมและ
ไฟล์ถูกสร้างขึ้นในไดเร็กทอรีของไฟล์เอาต์พุต ในกรณีที่ =ชื่อไฟล์ ตัวเลือก
ดัมพ์จะถูกส่งออกในไฟล์ที่กำหนด แทนที่จะเป็นไฟล์ดัมพ์ที่มีหมายเลขผ่าน บันทึก
ว่าหมายเลขผ่านจะถูกคำนวณแบบคงที่เมื่อผ่านได้รับการลงทะเบียนเข้าในบัตร
ผู้จัดการ. ดังนั้นการนับไม่เกี่ยวข้องกับลำดับการดำเนินการของ
ผ่าน โดยเฉพาะอย่างยิ่ง รหัสผ่านที่ติดตั้งโดยปลั๊กอินอาจมีตัวเลขมากกว่า 200 เลขคู่
ถ้ามันดำเนินการค่อนข้างเร็ว ชื่อดัม ถูกสร้างขึ้นจากชื่อของไฟล์ที่ส่งออก
หากระบุไว้อย่างชัดเจนและไม่สามารถเรียกใช้งานได้ มิฉะนั้น จะเป็นชื่อฐานของ
ไฟล์ต้นฉบับ สวิตช์เหล่านี้อาจมีเอฟเฟกต์ต่างกันเมื่อ -E ใช้สำหรับ
การประมวลผลล่วงหน้า

ดีบักดัมพ์สามารถเปิดใช้งานได้ด้วย a -fdump-rtl เปลี่ยนหรือบางส่วน -d ตัวเลือก ตัวอักษร. ที่นี่
เป็นตัวอักษรที่เป็นไปได้สำหรับใช้ใน ส่ง และ ตัวอักษรและความหมาย:

-fdump-rtl-การจัดตำแหน่ง
ดัมพ์หลังจากคำนวณการจัดตำแหน่งสาขาแล้ว

-fdump-rtl-asmcons
ดัมพ์หลังจากแก้ไขคำสั่ง rtl ที่มีข้อจำกัดการเข้า/ออกที่ไม่พอใจ

-fdump-rtl-auto_inc_dec
ดัมพ์หลังจากค้นพบ auto-inc-dec บัตรผ่านนี้ใช้เฉพาะบนสถาปัตยกรรมที่
มี auto inc หรือ auto dec คำแนะนำ

-fdump-rtl-อุปสรรค
ทิ้งหลังจากทำความสะอาดคำแนะนำสิ่งกีดขวาง

-fdump-rtl-bbpart
ดัมพ์หลังจากแบ่งบล็อกพื้นฐานแบบร้อนและเย็น

-fdump-rtl-bbro
ดัมพ์หลังจากบล็อกการเรียงลำดับใหม่

-fdump-rtl-btl1
-fdump-rtl-btl2
-fdump-rtl-btl1 และ -fdump-rtl-btl2 เปิดใช้งานการดัมพ์หลังจากเป้าหมายสองสาขา
โหลดการเพิ่มประสิทธิภาพผ่าน

-fdump-rtl-บายพาส
ดัมพ์หลังจากการข้ามข้ามและควบคุมการเพิ่มประสิทธิภาพโฟลว์

-fdump-rtl-รวม
ดัมพ์หลังจากชุดคำสั่ง RTL ผ่าน

-fdump-rtl-compgotos
ดัมพ์หลังจากทำซ้ำ gotos ที่คำนวณแล้ว

-fdump-rtl-ce1
-fdump-rtl-ce2
-fdump-rtl-ce3
-fdump-rtl-ce1, -fdump-rtl-ce2และ -fdump-rtl-ce3 เปิดใช้งานการทุ่มตลาดหลังจากสาม
หากการแปลงผ่าน

-fdump-rtl-cprop_hardreg
ดัมพ์หลังจากการเผยแพร่สำเนาทะเบียนฮาร์ด

-fdump-rtl-csa
ดัมพ์หลังจากรวมการปรับสแต็ค

-fdump-rtl-cse1
-fdump-rtl-cse2
-fdump-rtl-cse1 และ -fdump-rtl-cse2 เปิดใช้งานการทุ่มตลาดหลังจากทั้งสองทั่วไป
ผ่านการกำจัดนิพจน์ย่อย

-fdump-rtl-dce
ดัมพ์หลังจากการกำจัดโค้ดที่ไม่ทำงานแบบสแตนด์อโลนผ่าน

-fdump-rtl-dbr
ดัมพ์หลังจากการจัดกำหนดการสาขาล่าช้า

-fdump-rtl-dce1
-fdump-rtl-dce2
-fdump-rtl-dce1 และ -fdump-rtl-dce2 เปิดใช้งานการทุ่มตลาดหลังจากสองร้านตาย
การกำจัดผ่าน

-fdump-rtl-เอ๊ะ
ดัมพ์หลังจากการสรุปรหัสการจัดการ EH

-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 เปิดใช้งานการทุ่มตลาดหลังจากส่วนกลางทั่วไป
การกำจัดนิพจน์ย่อย

-fdump-rtl-init-regs
ดัมพ์หลังจากการเริ่มต้นของการลงทะเบียน

-fdump-rtl-initvals
ดัมพ์หลังจากการคำนวณชุดค่าเริ่มต้น

-fdump-rtl-into_cfglayout
ดัมพ์หลังจากแปลงเป็นโหมด cfglayout

-fdump-rtl-ira
ดัมพ์หลังจากการจัดสรรรีจิสเตอร์ซ้ำแล้วซ้ำอีก

-fdump-rtl-กระโดด
ดัมพ์หลังจากการเพิ่มประสิทธิภาพการกระโดดครั้งที่สอง

-fdump-rtl-loop2
-fdump-rtl-loop2 เปิดใช้งานการดัมพ์หลังจากการเพิ่มประสิทธิภาพลูป rtl ผ่านไป

-fdump-rtl-mach
ดัมพ์หลังจากดำเนินการผ่านการจัดโครงสร้างใหม่ขึ้นอยู่กับเครื่อง ถ้าผ่าน
ที่มีอยู่

-fdump-rtl-mode_sw
ดัมพ์หลังจากลบสวิตช์โหมดซ้ำซ้อน

-fdump-rtl-rnreg
ดัมพ์หลังจากลงทะเบียนหมายเลขใหม่

-fdump-rtl-outof_cfglayout
ดัมพ์หลังจากแปลงจากโหมด cfglayout

-fdump-rtl-ช่องมอง2
ทิ้งหลังจากช่องมองผ่าน

-fdump-rtl-postreload
ดัมพ์หลังจากการเพิ่มประสิทธิภาพหลังโหลดซ้ำ

-fdump-rtl-pro_and_epilogue
ถ่ายโอนข้อมูลหลังจากสร้างบทนำและบทส่งท้ายของฟังก์ชัน

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 และ -fdump-rtl-sched2 เปิดใช้งานการดัมพ์หลังจากบล็อกพื้นฐาน
กำหนดการผ่าน

-fdump-rtl-ree
การถ่ายโอนข้อมูลหลังจากเครื่องหมาย / การกำจัดส่วนขยายเป็นศูนย์

-fdump-rtl-seqabstr
ดัมพ์หลังจากการค้นพบลำดับทั่วไป

-fdump-rtl-ย่อ
ทิ้งหลังจากตัดกิ่งให้สั้นลง

-fdump-rtl-พี่น้อง
ดัมพ์หลังจากการเพิ่มประสิทธิภาพการเรียกพี่น้อง

-fdump-rtl-split1
-fdump-rtl-split2
-fdump-rtl-split3
-fdump-rtl-split4
-fdump-rtl-split5
ตัวเลือกเหล่านี้เปิดใช้งานการดัมพ์หลังจากแบ่งคำสั่งห้ารอบ

-fdump-rtl-sms
ดัมพ์หลังจากการตั้งเวลาโมดูโล บัตรผ่านนี้ใช้ได้เฉพาะกับสถาปัตยกรรมบางประเภทเท่านั้น

-fdump-rtl-stack
ดัมพ์หลังจากแปลงจาก "ไฟล์ลงทะเบียนแบบแบน" ของ GCC ลงทะเบียนเป็น x87's
รีจิสเตอร์เหมือนสแต็ก บัตรผ่านนี้ใช้ได้กับรุ่น x86 เท่านั้น

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 และ -fdump-rtl-subreg2 เปิดใช้งานการดัมพ์หลังจากสอง 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
ดัมพ์เหล่านี้ถูกกำหนดแต่จะสร้างไฟล์เปล่าเสมอ

-in
-fdump-rtl-all
สร้างการถ่ายโอนข้อมูลทั้งหมดที่ระบุไว้ข้างต้น

-dA ใส่คำอธิบายประกอบเอาต์พุตของแอสเซมเบลอร์ด้วยข้อมูลการดีบักเบ็ดเตล็ด

-dD ดัมพ์คำจำกัดความของมาโครทั้งหมด ที่ส่วนท้ายของการประมวลผลล่วงหน้า นอกเหนือจากปกติ
เอาท์พุต

-dH สร้างคอร์ดัมพ์เมื่อใดก็ตามที่เกิดข้อผิดพลาด

-dp ใส่คำอธิบายประกอบเอาต์พุตของแอสเซมเบลอร์ด้วยความคิดเห็นที่ระบุรูปแบบและ
ใช้ทางเลือกอื่น พิมพ์ความยาวของแต่ละคำสั่งด้วย

-dP ดัมพ์ RTL ในเอาต์พุตแอสเซมเบลอร์เป็นความคิดเห็นก่อนแต่ละคำสั่ง อีกด้วย
เปิด -dp คำอธิบายประกอบ

-dx เพียงสร้าง RTL สำหรับฟังก์ชันแทนการคอมไพล์ มักใช้กับ
-fdump-rtl-ขยาย.

-fdump-noaddr
เมื่อทำการดีบักดัมพ์ ให้ระงับเอาต์พุตที่อยู่ สิ่งนี้ทำให้เป็นไปได้มากขึ้นที่จะ
ใช้ diff ในการดีบักดัมพ์สำหรับการเรียกใช้คอมไพเลอร์ด้วยไบนารีคอมไพเลอร์ที่แตกต่างกัน
และ/หรือตำแหน่งเริ่มต้นข้อความ / bss / data / heap / stack / dso ที่แตกต่างกัน

-freport-bug
รวบรวมและถ่ายโอนข้อมูลการดีบักลงในไฟล์ชั่วคราวหาก ICE ในคอมไพเลอร์ C/C++
เกิดขึ้น

-fdump-unnumbered
เมื่อทำการดีบักดัมพ์ ให้ระงับหมายเลขคำสั่งและเอาต์พุตที่อยู่ นี้
ทำให้เป็นไปได้มากขึ้นที่จะใช้ diff ในการดีบักดัมพ์สำหรับการเรียกใช้คอมไพเลอร์ด้วย
ตัวเลือกต่างๆ โดยเฉพาะอย่างยิ่งมีและไม่มี -g.

-fdump-unnumbered-links
เมื่อทำการดีบักดัมพ์ (ดู -d ตัวเลือกด้านบน) ระงับหมายเลขคำสั่งสำหรับ
เชื่อมโยงไปยังคำสั่งก่อนหน้าและถัดไปตามลำดับ

-fdump-translation-หน่วย (C++ เท่านั้น)
-fdump-การแปล-หน่วย-ตัวเลือก (C++ เท่านั้น)
ดัมพ์การแสดงโครงสร้างแบบทรีสำหรับหน่วยการแปลทั้งหมดไปยังไฟล์
ชื่อไฟล์ทำโดยการต่อท้าย .tu ไปที่ชื่อไฟล์ต้นทาง และไฟล์ is
สร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ถ้า -ตัวเลือก ใช้แบบฟอร์ม,
ตัวเลือก ควบคุมรายละเอียดของดัมพ์ตามที่อธิบายไว้สำหรับ -fdump-tree ตัวเลือก

-fdump-คลาส-ลำดับชั้น (C++ เท่านั้น)
-fdump-คลาส-ลำดับชั้น-ตัวเลือก (C++ เท่านั้น)
ดัมพ์การแสดงลำดับชั้นของแต่ละคลาสและเค้าโครงตารางฟังก์ชันเสมือนไปที่a
ไฟล์. ชื่อไฟล์ทำโดยการต่อท้าย .ระดับ ไปยังชื่อไฟล์ต้นทางและไฟล์
ถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ถ้า -ตัวเลือก ใช้แบบฟอร์ม,
ตัวเลือก ควบคุมรายละเอียดของดัมพ์ตามที่อธิบายไว้สำหรับ -fdump-tree ตัวเลือก

-fdump-ipa-สลับ
ควบคุมการทุ่มตลาดในขั้นตอนต่างๆ ของแผนผังภาษาการวิเคราะห์ระหว่างขั้นตอนเป็น
ไฟล์. ชื่อไฟล์ถูกสร้างขึ้นโดยการผนวกส่วนต่อท้ายเฉพาะของสวิตช์ต่อท้ายแหล่งที่มา
ชื่อไฟล์ และไฟล์ถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต NS
การถ่ายโอนข้อมูลต่อไปนี้เป็นไปได้:

ทั้งหมด เปิดใช้งานการถ่ายโอนข้อมูลการวิเคราะห์ระหว่างขั้นตอนทั้งหมด

cgraph
ดัมพ์ข้อมูลเกี่ยวกับการเพิ่มประสิทธิภาพกราฟการเรียก การลบฟังก์ชันที่ไม่ได้ใช้ และ
การตัดสินใจแบบอินไลน์

แบบอินไลน์
ดัมพ์หลังจากฟังก์ชัน inlining

-fdump-passes
ดัมพ์รายการของการเพิ่มประสิทธิภาพที่เปิดและปิดโดยปัจจุบัน
ตัวเลือกบรรทัดคำสั่ง

-fdump-สถิติ-ตัวเลือก
เปิดใช้งานและควบคุมการถ่ายโอนข้อมูลสถิติการส่งผ่านในไฟล์แยกต่างหาก ชื่อไฟล์คือ
สร้างโดยการต่อท้ายคำต่อท้ายที่ลงท้ายด้วย .สถิติ ไปยังชื่อไฟล์ต้นทางและ
ไฟล์ถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ถ้า -ตัวเลือก แบบฟอร์มคือ
ใช้ -สถิติ ทำให้การนับรวมในหน่วยการคอมไพล์ทั้งหมดในขณะที่
- รายละเอียด ทิ้งทุกเหตุการณ์เมื่อบัตรผ่านสร้างขึ้น ค่าเริ่มต้นที่ไม่มีตัวเลือกคือ
เพื่อรวมตัวนับสำหรับแต่ละฟังก์ชันที่คอมไพล์

-fdump-ต้นไม้-สลับ
-fdump-ต้นไม้-สลับ-ตัวเลือก
-fdump-ต้นไม้-สลับ-ตัวเลือก=ชื่อไฟล์
ควบคุมการดัมพ์ในขั้นตอนต่างๆ ของการประมวลผลแผนผังภาษาระดับกลางถึง
ไฟล์. ชื่อไฟล์ถูกสร้างขึ้นโดยการต่อท้ายส่วนต่อท้ายเฉพาะสวิตช์เข้ากับ
ชื่อไฟล์ต้นทาง และไฟล์ถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ใน
กรณีของ =ชื่อไฟล์ ตัวเลือกการถ่ายโอนข้อมูลจะถูกส่งออกในไฟล์ที่กำหนดแทนที่จะเป็น auto
ชื่อไฟล์ดัมพ์ ถ้า -ตัวเลือก ใช้แบบฟอร์ม, ตัวเลือก เป็นรายการของ - แยกออกจากกัน
ตัวเลือกที่ควบคุมรายละเอียดของการถ่ายโอนข้อมูล ไม่ใช่ทุกตัวเลือกที่ใช้ได้ทั้งหมด
ทิ้ง; สิ่งที่ไม่มีความหมายจะถูกละเลย มีตัวเลือกดังต่อไปนี้

ที่อยู่
พิมพ์ที่อยู่ของแต่ละโหนด มักจะไม่มีความหมายเมื่อมันเปลี่ยนไป
ตามสภาพแวดล้อมและไฟล์ต้นฉบับ ใช้งานหลักสำหรับผูกขึ้น a
ไฟล์ดัมพ์ที่มีสภาพแวดล้อมการดีบัก

asmname
หากตั้งค่า "DECL_ASSEMBLER_NAME" ไว้สำหรับ Decl ที่กำหนด ให้ใช้สิ่งนั้นใน dump
แทนที่จะเป็น "DECL_NAME" การใช้งานหลักคือใช้งานง่ายทำงานย้อนกลับจาก
ชื่อที่สับสนในไฟล์แอสเซมบลี

บาง
เมื่อทิ้งตัวแทนระดับกลางส่วนหน้า ยับยั้งการทุ่มตลาดของสมาชิกของ
ขอบเขตหรือเนื้อหาของฟังก์ชันเพียงเพราะถึงขอบเขตนั้นแล้ว เท่านั้น
ดัมพ์รายการดังกล่าวเมื่อสามารถเข้าถึงได้โดยตรงจากเส้นทางอื่น

เมื่อทิ้งต้นไม้ลายสวย ตัวเลือกนี้จะยับยั้งการทิ้งร่างของ
โครงสร้างการควบคุม

เมื่อทิ้ง RTL ให้พิมพ์ RTL ในรูปแบบบาง (ย่อ) แทนค่าเริ่มต้น
การแสดงเหมือน LISP

ดิบ พิมพ์เป็นตัวแทนดิบของต้นไม้ ตามค่าเริ่มต้น ต้นไม้จะถูกพิมพ์อย่างสวยงามลงใน
การแสดงเหมือน C

รายละเอียด
เปิดใช้งานการถ่ายโอนข้อมูลที่มีรายละเอียดมากขึ้น (ไม่รองรับทุกตัวเลือกการถ่ายโอนข้อมูล) รวมถึง
ข้อมูลจากการเพิ่มประสิทธิภาพผ่าน

สถิติ
เปิดใช้งานการดัมพ์สถิติต่างๆ เกี่ยวกับการส่งผ่าน (ไม่ได้รับการตอบรับจากทุกการถ่ายโอนข้อมูล
ตัวเลือก)

บล็อก
เปิดใช้งานการแสดงขอบเขตบล็อกพื้นฐาน (ปิดใช้งานในการถ่ายโอนข้อมูลดิบ)

กราฟ
สำหรับแต่ละไฟล์ดัมพ์ที่ระบุ (-fdump-rtl-ส่ง) ทิ้ง
การแสดงกราฟควบคุมที่เหมาะสมสำหรับการดูด้วย GraphViz ถึง
file.passid.pass.dot. แต่ละฟังก์ชั่นในไฟล์นั้นถูกพิมพ์ออกมาอย่างสวยงามเป็นกราฟย่อย
เพื่อให้ GraphViz สามารถแสดงผลทั้งหมดในพล็อตเดียว

ตัวเลือกนี้ใช้ได้เฉพาะกับการดัมพ์ RTL เท่านั้น และ RTL จะถูกดัมพ์ใน . เสมอ
รูปทรงเพรียวบาง

vops
เปิดใช้งานการแสดงตัวถูกดำเนินการเสมือนสำหรับทุกคำสั่ง

ผ้าลินิน
เปิดใช้งานการแสดงหมายเลขบรรทัดสำหรับใบแจ้งยอด

UID เปิดใช้งานการแสดง ID เฉพาะ ("DECL_UID") สำหรับแต่ละตัวแปร

ละเอียด
เปิดใช้งานการแสดงการถ่ายโอนข้อมูลต้นไม้สำหรับแต่ละคำสั่ง

eh เปิดใช้งานการแสดงหมายเลขภูมิภาค EH ที่ถือแต่ละคำสั่ง

scev
เปิดใช้งานการแสดงรายละเอียดการวิเคราะห์วิวัฒนาการสเกลาร์

การปรับให้เหมาะสม
เปิดใช้งานการแสดงข้อมูลการเพิ่มประสิทธิภาพ (ใช้ได้เฉพาะในบางรอบ)

พลาด
เปิดใช้งานการแสดงข้อมูลการเพิ่มประสิทธิภาพที่ไม่ได้รับ (มีเฉพาะในบางรอบเท่านั้น)

หมายเหตุ
เปิดใช้งานข้อมูลการเพิ่มประสิทธิภาพโดยละเอียดอื่นๆ (มีเฉพาะในบางรอบเท่านั้น)

=ชื่อไฟล์
แทนที่จะเป็นไฟล์ดัมพ์ชื่ออัตโนมัติ ให้ส่งออกไปยังชื่อไฟล์ที่กำหนด ไฟล์
ชื่อ stdout และ stderr ได้รับการปฏิบัติเป็นพิเศษและถือว่าเปิดแล้ว
สตรีมมาตรฐาน ตัวอย่างเช่น,

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

เอาต์พุต vectorizer ถ่ายโอนข้อมูลลงใน foo.dumpในขณะที่การถ่ายโอนข้อมูล PRE ถูกส่งออกไปยัง stderr.
หากมีการระบุชื่อไฟล์ดัมพ์ที่ขัดแย้งกันสองชื่อสำหรับรหัสผ่านเดียวกัน ดังนั้นไฟล์หลัง
ตัวเลือกแทนที่ก่อนหน้านี้

ทั้งหมด เปิดตัวเลือกทั้งหมด ยกเว้น ดิบ, บาง, ละเอียด และ ผ้าลินิน.

optall
เปิดตัวเลือกการเพิ่มประสิทธิภาพทั้งหมด กล่าวคือ การปรับให้เหมาะสม, พลาดและ หมายเหตุ.

การทิ้งต้นไม้ต่อไปนี้เป็นไปได้:

เป็นต้นฉบับ
ดัมพ์ก่อนการเพิ่มประสิทธิภาพตามต้นไม้ใดๆ ถึง ไฟล์.ต้นฉบับ.

การปรับให้เหมาะสม
ทิ้งหลังจากการเพิ่มประสิทธิภาพตามต้นไม้ทั้งหมดไปยัง file.optimized.

กิมเพิล
ดัมพ์แต่ละฟังก์ชันก่อนและหลัง gimplification ส่งผ่านไปยังไฟล์ ไฟล์
ชื่อทำโดยการต่อท้าย .gimple ไปที่ชื่อไฟล์ต้นทาง

cfg ดัมพ์กราฟโฟลว์การควบคุมของแต่ละฟังก์ชันไปยังไฟล์ ชื่อไฟล์สร้างโดย
ท้าย .cfg ไปที่ชื่อไฟล์ต้นทาง

ch ดัมพ์แต่ละฟังก์ชันหลังจากคัดลอกส่วนหัวของลูป ชื่อไฟล์ทำโดยการต่อท้าย
.ch ไปที่ชื่อไฟล์ต้นทาง

SSA ดัมพ์ข้อมูลที่เกี่ยวข้องกับ SSA ไปยังไฟล์ ชื่อไฟล์ทำโดยการต่อท้าย .ssa
ไปที่ชื่อไฟล์ต้นทาง

นามแฝง
ดัมพ์ข้อมูลนามแฝงสำหรับแต่ละฟังก์ชัน ชื่อไฟล์ทำโดยการต่อท้าย
.alias ไปที่ชื่อไฟล์ต้นทาง

ccp ดัมพ์แต่ละฟังก์ชันหลังจาก CCP ชื่อไฟล์ทำโดยการต่อท้าย .ccp ไป
ชื่อไฟล์ต้นทาง

storeccp
ดัมพ์แต่ละฟังก์ชันหลังจาก STORE-CCP ชื่อไฟล์ทำโดยการต่อท้าย .storeccp
ไปที่ชื่อไฟล์ต้นทาง

ก่อน ทิ้งต้นไม้หลังจากกำจัดความซ้ำซ้อนบางส่วน ชื่อไฟล์สร้างโดย
ท้าย .pre ไปที่ชื่อไฟล์ต้นทาง

FRE ทิ้งต้นไม้หลังจากกำจัดความซ้ำซ้อนทั้งหมด ชื่อไฟล์ทำโดยการต่อท้าย
.ฟรี ไปที่ชื่อไฟล์ต้นทาง

copyprop
ทิ้งต้นไม้หลังจากการคัดลอกการขยายพันธุ์ ชื่อไฟล์ทำโดยการต่อท้าย .copyprop
ไปที่ชื่อไฟล์ต้นทาง

store_copyprop
ทิ้งต้นไม้หลังจากเก็บสำเนาขยายพันธุ์ ชื่อไฟล์ทำโดยการต่อท้าย
.store_copyprop ไปที่ชื่อไฟล์ต้นทาง

ดีซี ดัมพ์แต่ละฟังก์ชันหลังจากกำจัดโค้ดที่ไม่ทำงาน ชื่อไฟล์สร้างโดย
ท้าย .dce ไปที่ชื่อไฟล์ต้นทาง

นาย / นางสาว ดัมพ์แต่ละฟังก์ชันหลังจากทำการแทนที่มวลรวมด้วยสเกลาร์ ไฟล์
ชื่อทำโดยการต่อท้าย .sra ไปที่ชื่อไฟล์ต้นทาง

จม
ดัมพ์แต่ละฟังก์ชันหลังจากดำเนินการโค้ดที่จม ชื่อไฟล์สร้างโดย
ท้าย .จม ไปที่ชื่อไฟล์ต้นทาง

ดวงอาทิตย์ ดัมพ์แต่ละฟังก์ชันหลังจากใช้การเพิ่มประสิทธิภาพทรี dominator ชื่อไฟล์คือ
ทำโดยการต่อท้าย .dom ไปที่ชื่อไฟล์ต้นทาง

DSE ดัมพ์แต่ละฟังก์ชันหลังจากใช้การกำจัด dead store ชื่อไฟล์ถูกสร้างขึ้น
โดยต่อท้าย .dse ไปที่ชื่อไฟล์ต้นทาง

phiopt
ดัมพ์แต่ละฟังก์ชันหลังจากเพิ่มประสิทธิภาพโหนด PHI เป็นโค้ดเส้นตรง ไฟล์
ชื่อทำโดยการต่อท้าย .phiopt ไปที่ชื่อไฟล์ต้นทาง

forwprop
ดัมพ์แต่ละฟังก์ชันหลังจากส่งต่อตัวแปรแบบใช้ครั้งเดียว ชื่อไฟล์
ทำโดยการต่อท้าย .forwprop ไปที่ชื่อไฟล์ต้นทาง

copyrename
ดัมพ์แต่ละฟังก์ชันหลังจากใช้การคัดลอกการเพิ่มประสิทธิภาพการเปลี่ยนชื่อ ชื่อไฟล์คือ
ทำโดยการต่อท้าย .copyrename ไปที่ชื่อไฟล์ต้นทาง

nrv ดัมพ์แต่ละฟังก์ชันหลังจากใช้การเพิ่มประสิทธิภาพค่าส่งคืนที่มีชื่อกับ generic
ต้นไม้ ชื่อไฟล์ทำโดยการต่อท้าย .nrv ไปที่ชื่อไฟล์ต้นทาง

เวกเตอร์
ดัมพ์แต่ละฟังก์ชันหลังจากใช้ vectorization ของการวนซ้ำ ชื่อไฟล์ถูกสร้างขึ้น
โดยต่อท้าย .vect ไปที่ชื่อไฟล์ต้นทาง

slp ดัมพ์แต่ละฟังก์ชันหลังจากใช้ vectorization ของบล็อกพื้นฐาน ชื่อไฟล์คือ
ทำโดยการต่อท้าย .slp ไปที่ชื่อไฟล์ต้นทาง

vrp ดัมพ์แต่ละฟังก์ชันหลังจาก Value Range Propagation (VRP) ชื่อไฟล์สร้างโดย
ท้าย .vrp ไปที่ชื่อไฟล์ต้นทาง

ทั้งหมด เปิดใช้งานทรีดัมพ์ที่มีอยู่ทั้งหมดด้วยแฟล็กที่ให้มาในตัวเลือกนี้

-fopt-info
-fopt-ข้อมูล-ตัวเลือก
-fopt-ข้อมูล-ตัวเลือก=ชื่อไฟล์
ควบคุมดัมพ์การปรับให้เหมาะสมจากการผ่านการปรับให้เหมาะสมต่างๆ ถ้า -ตัวเลือก แบบฟอร์มคือ
ใช้ ตัวเลือก เป็นรายการของ - แยกคีย์เวิร์ดตัวเลือกเพื่อเลือกรายละเอียดการถ่ายโอนข้อมูลและ
การเพิ่มประสิทธิภาพ

พื้นที่ปลูก ตัวเลือก สามารถแบ่งได้เป็น XNUMX กลุ่ม คือ ตัวเลือกที่อธิบายความฟุ่มเฟือยของ
ดัมพ์ และตัวเลือกที่อธิบายว่าควรรวมการเพิ่มประสิทธิภาพใด ตัวเลือกจาก
ทั้งสองกลุ่มสามารถผสมกันได้อย่างอิสระเนื่องจากไม่ทับซ้อนกัน อย่างไรก็ตาม ในกรณีของ
ข้อขัดแย้งใด ๆ ตัวเลือกในภายหลังจะแทนที่ตัวเลือกก่อนหน้าในบรรทัดคำสั่ง

อ็อพชันต่อไปนี้ควบคุมการใช้คำฟุ่มเฟือยของดัมพ์:

การปรับให้เหมาะสม
พิมพ์ข้อมูลเมื่อมีการใช้การปรับให้เหมาะสมสำเร็จ มันขึ้นอยู่กับผ่าน
เพื่อตัดสินใจว่าข้อมูลใดที่เกี่ยวข้อง ตัวอย่างเช่น vectorizer ส่งผ่านการพิมพ์
ตำแหน่งต้นทางของลูปที่แปลงเป็นเวกเตอร์ได้สำเร็จ

พลาด
พิมพ์ข้อมูลเกี่ยวกับการเพิ่มประสิทธิภาพที่ไม่ได้รับ บุคคลผ่านการควบคุมซึ่ง
ข้อมูลที่จะรวมในการส่งออก

หมายเหตุ
พิมพ์ข้อมูลอย่างละเอียดเกี่ยวกับการเพิ่มประสิทธิภาพ เช่น การแปลง
ข้อความรายละเอียดเพิ่มเติมเกี่ยวกับการตัดสินใจ ฯลฯ

ทั้งหมด พิมพ์ข้อมูลการเพิ่มประสิทธิภาพโดยละเอียด ซึ่งรวมถึง การปรับให้เหมาะสม, พลาดและ
หมายเหตุ.

คำหลักตัวเลือกต่อไปนี้หนึ่งคำขึ้นไปสามารถใช้เพื่ออธิบายกลุ่มของ
การเพิ่มประสิทธิภาพ:

IPA เปิดใช้งานการถ่ายโอนข้อมูลจากการเพิ่มประสิทธิภาพระหว่างขั้นตอนทั้งหมด

ห่วง
เปิดใช้งานการถ่ายโอนข้อมูลจากการเพิ่มประสิทธิภาพลูปทั้งหมด

แบบอินไลน์
เปิดใช้งานการถ่ายโอนข้อมูลจากการเพิ่มประสิทธิภาพอินไลน์ทั้งหมด

บางสิ่ง เปิดใช้งานการถ่ายโอนข้อมูลจากการเพิ่มประสิทธิภาพเวคเตอร์ทั้งหมด

optall
เปิดใช้งานการถ่ายโอนข้อมูลจากการเพิ่มประสิทธิภาพทั้งหมด นี่คือ superset ของกลุ่มการเพิ่มประสิทธิภาพ
ระบุไว้ข้างต้น

If ตัวเลือก ถูกละไว้ ค่าเริ่มต้นคือ ปรับให้เหมาะสม-optalซึ่งหมายถึงการถ่ายโอนข้อมูลทั้งหมด
เกี่ยวกับการเพิ่มประสิทธิภาพที่ประสบความสำเร็จจากทุกเส้นทาง

ถ้า ชื่อไฟล์ มีให้ จากนั้นดัมพ์จากการเพิ่มประสิทธิภาพที่เกี่ยวข้องทั้งหมดจะเป็น
รวมเข้ากับ ชื่อไฟล์. มิฉะนั้นการถ่ายโอนข้อมูลจะถูกส่งออกไปยัง stderr. แม้
หลาย -fopt-info ยอมรับตัวเลือก มีเพียงตัวเลือกเดียวเท่านั้นที่สามารถรวม a ชื่อไฟล์. ถ้า
มีการระบุชื่อไฟล์อื่น ๆ ทั้งหมด แต่ตัวเลือกแรกนั้นจะถูกละเว้น

โปรดทราบว่าผลลัพธ์ ชื่อไฟล์ จะถูกเขียนทับในกรณีที่มีหน่วยการแปลหลายหน่วย ถ้า
ต้องการเอาต์พุตรวมจากหน่วยการแปลหลายหน่วย stderr ควรใช้
แทน.

ในตัวอย่างต่อไปนี้ ข้อมูลการเพิ่มประสิทธิภาพจะถูกส่งออกไปยัง stderr:

gcc -O3 -fopt-info

ตัวอย่างนี้:

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

ผลลัพธ์ที่ไม่ได้รับรายงานการเพิ่มประสิทธิภาพจากการส่งผ่านทั้งหมดเข้าสู่ miss.allและอันนี้:

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

พิมพ์ข้อมูลเกี่ยวกับโอกาสในการเพิ่มประสิทธิภาพที่ไม่ได้รับจากการส่งผ่านเวคเตอร์
on stderr. สังเกตได้ว่า -fopt-info-vec-พลาด เทียบเท่ากับ -fopt-info-missed-vec.

อีกตัวอย่างหนึ่ง

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

ส่งออกข้อมูลเกี่ยวกับการเพิ่มประสิทธิภาพที่ไม่ได้รับรวมถึงตำแหน่งที่ปรับให้เหมาะสมจากทั้งหมด
inlining ผ่านเข้าสู่ inline.txt.

สุดท้าย ให้พิจารณา:

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

ที่นี่ทั้งสองชื่อไฟล์เอาต์พุต vec.miss และ loop.opt ขัดแย้งกันเพราะมีเพียงหนึ่งเดียว
อนุญาตให้ใช้ไฟล์เอาต์พุต ในกรณีนี้ เฉพาะตัวเลือกแรกเท่านั้นที่จะมีผลและ
ตัวเลือกที่ตามมาจะถูกละเว้น เท่านั้น vec.miss ถูกผลิตขึ้นซึ่งมีขยะมูลฝอย
จาก vectorizer เกี่ยวกับโอกาสที่พลาดไป

-frandom-seed=จำนวน
ตัวเลือกนี้ให้เมล็ดพันธุ์ที่ GCC ใช้แทนตัวเลขสุ่มในการสร้าง
ชื่อสัญลักษณ์บางอย่างที่ต้องแตกต่างกันในทุกไฟล์ที่คอมไพล์ ยังเป็น
ใช้เพื่อวางตราประทับที่ไม่ซ้ำกันในไฟล์ข้อมูลความครอบคลุมและไฟล์อ็อบเจ็กต์ที่สร้าง
พวกเขา. คุณสามารถใช้ -สุ่มเมล็ด ตัวเลือกในการผลิตวัตถุที่ทำซ้ำได้
ไฟล์

พื้นที่ปลูก จำนวน ควรแตกต่างกันสำหรับทุกไฟล์ที่คุณคอมไพล์

-fsched-verbose=n
สำหรับเป้าหมายที่ใช้การจัดตารางเวลาคำสั่ง ตัวเลือกนี้จะควบคุมจำนวน
การดีบักเอาต์พุตตัวกำหนดตารางเวลาจะพิมพ์ ข้อมูลนี้เขียนด้วยข้อผิดพลาดมาตรฐาน
เว้นแต่ -fdump-rtl-sched1 or -fdump-rtl-sched2 ถูกระบุ ซึ่งในกรณีนี้คือ output
ไปยังไฟล์รายการดัมพ์ปกติ .sched1 or .sched2 ตามลำดับ อย่างไรก็ตามสำหรับ n
มากกว่าเก้า ผลลัพธ์จะถูกพิมพ์ไปยังข้อผิดพลาดมาตรฐานเสมอ

สำหรับ n มากกว่าศูนย์, -fsched-verbose ส่งออกข้อมูลเช่นเดียวกับ
-fdump-rtl-sched1 และ -fdump-rtl-sched2. สำหรับ n มากกว่าหนึ่งก็ยังส่งออกพื้นฐาน
บล็อกความน่าจะเป็น ข้อมูลรายการพร้อมโดยละเอียด และข้อมูลหน่วย/ข้อมูล สำหรับ n
มากกว่าสอง จะรวม RTL ที่จุดยกเลิก ข้อมูลโฟลว์การควบคุม และภูมิภาค และ
for n มากกว่าสี่, -fsched-verbose รวมถึงข้อมูลการพึ่งพา

-save-temps
-save-temps=cwd
เก็บไฟล์กลาง "ชั่วคราว" ตามปกติอย่างถาวร วางไว้ในปัจจุบัน
ไดเร็กทอรีและตั้งชื่อตามไฟล์ต้นฉบับ ดังนั้นการรวบรวม foo.c กับ -c
-save-temps สร้างไฟล์ foo.i และ foo.sเช่นเดียวกับ foo.o. สิ่งนี้จะสร้างไฟล์
ประมวลผลล่วงหน้า foo.i ไฟล์เอาต์พุตแม้ว่าปกติแล้วคอมไพเลอร์จะใช้ an
ตัวประมวลผลล่วงหน้าแบบบูรณาการ

เมื่อใช้ร่วมกับ -x ตัวเลือกบรรทัดคำสั่ง -save-temps มีเหตุผล
เพียงพอที่จะหลีกเลี่ยงการเขียนไฟล์แหล่งอินพุตที่มีนามสกุลเดียวกับ an . มากเกินไป
ไฟล์ระดับกลาง ไฟล์ระดับกลางที่เกี่ยวข้องสามารถรับได้โดยการเปลี่ยนชื่อ
ไฟล์ต้นฉบับก่อนใช้ -save-temps.

หากคุณเรียกใช้ GCC แบบขนาน ให้คอมไพล์ไฟล์ต้นฉบับหลายไฟล์ที่แชร์a
ชื่อฐานทั่วไปในไดเร็กทอรีย่อยที่แตกต่างกันหรือไฟล์ต้นฉบับเดียวกันที่คอมไพล์สำหรับ
ปลายทางเอาต์พุตหลายตัวมีแนวโน้มว่าคอมไพเลอร์แบบขนานที่แตกต่างกันจะ
รบกวนซึ่งกันและกัน และเขียนทับไฟล์ชั่วคราว ตัวอย่างเช่น:

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

อาจส่งผลให้ foo.i และ foo.o ถูกเขียนพร้อมกันโดยคอมไพเลอร์ทั้งสอง

-save-temps=obj
จัดเก็บไฟล์ระดับกลาง "ชั่วคราว" ตามปกติอย่างถาวร ถ้า -o ใช้ตัวเลือก,
ไฟล์ชั่วคราวจะขึ้นอยู่กับไฟล์อ็อบเจ็กต์ ถ้า -o ไม่ได้ใช้ตัวเลือก the
-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
ไฟล์ต้นฉบับ นี่คือคอมไพเลอร์ที่เหมาะสมและแอสเซมเบลอร์ (รวมถึงตัวเชื่อมโยงหากการลิงก์คือ
เสร็จแล้ว).

หากไม่มีข้อกำหนดของไฟล์เอาต์พุต เอาต์พุตจะมีลักษณะดังนี้:

# cc1 0.12 0.01
# เป็น 0.00 0.01

ตัวเลขแรกในแต่ละบรรทัดคือ "เวลาของผู้ใช้" นั่นคือเวลาที่ใช้ในการดำเนินการ
โปรแกรมเอง หมายเลขที่สองคือ "เวลาของระบบ" เวลาที่ใช้ในการดำเนินการ
รูทีนของระบบในนามของโปรแกรม ตัวเลขทั้งสองเป็นหน่วยวินาที

ด้วยข้อกำหนดของไฟล์เอาท์พุต เอาต์พุตจะถูกผนวกเข้ากับไฟล์ที่มีชื่อ
และดูเหมือนว่านี้:

0.12 0.01 ซีซี1
0.00 0.01 เป็น

"เวลาผู้ใช้" และ "เวลาของระบบ" ถูกย้ายก่อนชื่อโปรแกรม และ
ตัวเลือกที่ส่งผ่านไปยังโปรแกรมจะปรากฏขึ้น เพื่อให้สามารถบอกได้ในภายหลังว่าไฟล์อะไร
กำลังรวบรวมและมีตัวเลือกใดบ้าง

-fvar-ติดตาม
เรียกใช้การติดตามตัวแปร มันคำนวณตำแหน่งที่เก็บตัวแปรในแต่ละตำแหน่ง
ในรหัส ข้อมูลการดีบักที่ดีขึ้นจะถูกสร้างขึ้น (หากข้อมูลการดีบัก
รูปแบบรองรับข้อมูลนี้)

มันถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อคอมไพล์ด้วยการเพิ่มประสิทธิภาพ (-Os, -O, -O2, ...),
ข้อมูลการดีบัก (-g) และรูปแบบข้อมูลการดีบักรองรับ

-fvar-tracking-assignments
ใส่คำอธิบายประกอบการมอบหมายให้กับตัวแปรผู้ใช้ในช่วงต้นของการคอมไพล์และพยายามดำเนินการ
คำอธิบายประกอบตลอดการรวบรวมจนจบในความพยายาม
เพื่อปรับปรุงข้อมูลการดีบักในขณะที่เพิ่มประสิทธิภาพ การใช้ -gdwarf-4 ขอแนะนำด้วย
กับมัน

สามารถเปิดใช้งานได้แม้ว่าจะปิดใช้งาน var-tracking ซึ่งในกรณีนี้คำอธิบายประกอบจะเป็น
สร้างและบำรุงรักษา แต่ทิ้งไปในตอนท้าย โดยค่าเริ่มต้น แฟล็กนี้เปิดใช้งานอยู่
พร้อมด้วย -fvar-ติดตามยกเว้นเมื่อเปิดใช้งานการตั้งเวลาแบบเลือก

-fvar-tracking-assignments-toggle
สลับ -fvar-tracking-assignmentsในทำนองเดียวกัน -gtoggle สลับ -g.

-print-file-name=ห้องสมุด
พิมพ์ชื่อเต็มของไฟล์ไลบรารี ห้องสมุด ที่จะใช้เมื่อ
เชื่อมโยง---และอย่าทำอย่างอื่น ด้วยตัวเลือกนี้ GCC จะไม่คอมไพล์หรือลิงก์
อะไรก็ตาม; มันแค่พิมพ์ชื่อไฟล์

-print-หลายไดเรกทอรี
พิมพ์ชื่อไดเร็กทอรีที่สอดคล้องกับ multilib ที่เลือกโดยสวิตช์อื่น ๆ
อยู่ในบรรทัดคำสั่ง ไดเรกทอรีนี้ควรจะมีอยู่ใน GCC_EXEC_PREFIX.

-print-multi-lib
พิมพ์การแมปจากชื่อไดเร็กทอรี multilib ไปยังสวิตช์คอมไพเลอร์ที่เปิดใช้งาน
ชื่อไดเร็กทอรีแยกจากสวิตช์โดย ;และสวิตช์แต่ละตัวเริ่มต้นด้วย an
@ แทนการ -โดยไม่มีช่องว่างระหว่างสวิตช์หลายตัว นี้ควรจะ
ง่ายต่อการประมวลผลเปลือก

-print-multi-os-directory
พิมพ์พาธไปยังไลบรารี OS สำหรับ multilib ที่เลือก โดยสัมพันธ์กับ some lib
ไดเรกทอรีย่อย หากมีไลบรารี OS อยู่ในไฟล์ lib ไดเรกทอรีย่อยและไม่มี multilibs
ถูกใช้ซึ่งมักจะเป็นเพียง ., หากมีไลบรารี OS อยู่ใน libsuffix พี่น้อง
ไดเร็กทอรีนี้พิมพ์เช่น ../lib64, ../ lib or ../lib32, หรือถ้าไลบรารี่ OS เป็น
นำเสนอใน lib/subdir ไดเรกทอรีย่อยที่พิมพ์เช่น amd64, sparcv9 or ev6.

-print-multiarch
พิมพ์พาธไปยังไลบรารี OS สำหรับ multiarch ที่เลือก โดยสัมพันธ์กับ some lib
ไดเร็กทอรีย่อย

-print-prog-name=โครงการ
ชอบ -print-file-nameแต่ค้นหาโปรแกรมเช่น cpp.

-print-libgcc-ชื่อไฟล์
เหมือนกับ -print-file-name=libgcc.a.

สิ่งนี้มีประโยชน์เมื่อคุณใช้ -nostdlib or -nodefaultlibs แต่คุณต้องการเชื่อมโยงกับ
libgcc.a. คุณทำได้:

gcc -nostdlib ... `gcc -print-libgcc-file-name`

-print-search-dirs
พิมพ์ชื่อไดเร็กทอรีการติดตั้งที่กำหนดค่าไว้และรายการโปรแกรมและ
ไดเรกทอรีห้องสมุด gcc ค้นหา---และอย่าทำอย่างอื่น

สิ่งนี้มีประโยชน์เมื่อ gcc พิมพ์ข้อความแสดงข้อผิดพลาด การติดตั้ง ปัญหา, ไม่ได้ exec
cpp0: ไม่ อย่างเช่น ไฟล์ or ไดเรกทอรี. ในการแก้ไขปัญหานี้คุณต้องใส่ cpp0 และ
ส่วนประกอบคอมไพเลอร์อื่น ๆ โดยที่ gcc คาดว่าจะพบพวกเขาหรือคุณสามารถตั้งค่า
ตัวแปรสภาพแวดล้อม GCC_EXEC_PREFIX ไปยังไดเร็กทอรีที่คุณติดตั้งไว้ อย่า
ลืมการต่อท้าย /.

-print-sysroot
พิมพ์ไดเร็กทอรี sysroot เป้าหมายที่ใช้ระหว่างการคอมไพล์ นี้เป็น
sysroot เป้าหมายที่ระบุในเวลากำหนดค่าหรือใช้ --sysroot ตัวเลือก
อาจมีส่วนต่อท้ายพิเศษที่ขึ้นอยู่กับตัวเลือกการรวบรวม ถ้าไม่มีเป้าหมาย
sysroot ถูกระบุ ตัวเลือกจะไม่พิมพ์อะไรเลย

-print-sysroot-headers-suffix
พิมพ์ส่วนต่อท้ายที่เพิ่มไปยัง sysroot เป้าหมายเมื่อค้นหาส่วนหัวหรือให้
เกิดข้อผิดพลาดหากคอมไพเลอร์ไม่ได้กำหนดค่าด้วยคำต่อท้ายดังกล่าว---และไม่ต้องดำเนินการใดๆ
อื่น.

-dumpmachine
พิมพ์เครื่องเป้าหมายของคอมไพเลอร์ (เช่น i686-pc-linux-gnu)---และอย่าทำ
สิ่งอื่นใด

-dumpversion
พิมพ์เวอร์ชั่นคอมไพเลอร์ (เช่น 3.0)—และอย่าทำอย่างอื่น

-dumpspecs
พิมพ์ข้อมูลจำเพาะในตัวของคอมไพเลอร์---และไม่ต้องดำเนินการอื่นใด (ใช้เมื่อ
GCC เองกำลังถูกสร้างขึ้น)

-fno-กำจัด-ไม่ได้ใช้-debug-types
โดยปกติเมื่อสร้างเอาต์พุต DWARF 2 GCC จะหลีกเลี่ยงการสร้างเอาต์พุตสัญลักษณ์การดีบักสำหรับ
ชนิดที่ไม่มีที่ไหนเลยที่ใช้ในไฟล์ต้นฉบับที่กำลังคอมไพล์ บางครั้งก็มีประโยชน์
เพื่อให้ GCC ปล่อยข้อมูลการดีบักสำหรับทุกประเภทที่ประกาศในหน่วยการคอมไพล์
ไม่ว่าจะใช้ในหน่วยคอมไพล์นั้นจริงหรือไม่ก็ตาม สำหรับ
ตัวอย่างเช่น ถ้าในดีบักเกอร์ คุณต้องการแปลงค่าเป็นประเภทที่ไม่ใช่จริงๆ
ใช้ในโปรแกรมของคุณ (แต่มีการประกาศ) อย่างไรก็ตาม บ่อยครั้งขึ้น ส่งผลให้ a
พื้นที่สิ้นเปลืองจำนวนมาก

Options ที่ Control การเพิ่มประสิทธิภาพ
ตัวเลือกเหล่านี้ควบคุมการเพิ่มประสิทธิภาพประเภทต่างๆ

หากไม่มีตัวเลือกการเพิ่มประสิทธิภาพ เป้าหมายของคอมไพเลอร์คือการลดต้นทุนการรวบรวม
และเพื่อให้การดีบักสร้างผลลัพธ์ที่คาดหวัง งบเป็นอิสระ: ถ้าคุณ
หยุดโปรแกรมด้วยจุดพักระหว่างคำสั่ง จากนั้นกำหนดค่าใหม่ให้กับ
ตัวแปรใด ๆ หรือเปลี่ยนตัวนับโปรแกรมเป็นคำสั่งอื่นในฟังก์ชันและรับ
ตรงผลลัพธ์ที่คุณคาดหวังจากซอร์สโค้ด

การเปิดแฟล็กการปรับให้เหมาะสมทำให้คอมไพเลอร์พยายามปรับปรุงประสิทธิภาพและ/หรือ
ขนาดโค้ดที่ใช้เวลาในการรวบรวมและอาจเป็นความสามารถในการดีบัก
โครงการ

คอมไพเลอร์ทำการเพิ่มประสิทธิภาพตามความรู้ที่มีของโปรแกรม
การคอมไพล์ไฟล์หลายไฟล์พร้อมกันเป็นโหมดไฟล์เอาต์พุตเดียวช่วยให้คอมไพเลอร์ใช้งานได้
ข้อมูลที่ได้รับจากไฟล์ทั้งหมดเมื่อรวบรวมแต่ละไฟล์

การเพิ่มประสิทธิภาพบางอย่างไม่ได้ถูกควบคุมโดยแฟล็กโดยตรง เฉพาะการเพิ่มประสิทธิภาพที่มี a
แฟล็กแสดงอยู่ในส่วนนี้

การเพิ่มประสิทธิภาพส่วนใหญ่จะเปิดใช้งานก็ต่อเมื่อ an -O ระดับถูกตั้งค่าบนบรรทัดคำสั่ง มิฉะนั้น
ถูกปิดใช้งาน แม้ว่าจะมีการระบุแฟล็กการปรับให้เหมาะสมแต่ละรายการ

ขึ้นอยู่กับเป้าหมายและวิธีการกำหนดค่า GCC ชุดของ .ที่แตกต่างกันเล็กน้อย
อาจเปิดใช้งานการปรับให้เหมาะสมในแต่ละ -O ระดับที่มากกว่าที่ระบุไว้ในที่นี้ คุณสามารถเรียกใช้ GCC
กับ -Q --help = เครื่องมือเพิ่มประสิทธิภาพ เพื่อค้นหาชุดการเพิ่มประสิทธิภาพที่แน่นอนที่เปิดใช้งานที่
แต่ละระดับ

-O
-O1 เพิ่มประสิทธิภาพ การเพิ่มประสิทธิภาพการคอมไพล์จะใช้เวลาค่อนข้างนาน และหน่วยความจำมากขึ้นสำหรับ
ฟังก์ชั่นขนาดใหญ่

กับ -Oคอมไพเลอร์พยายามลดขนาดโค้ดและเวลาดำเนินการโดยไม่ดำเนินการ
การเพิ่มประสิทธิภาพใดๆ ที่ต้องใช้เวลารวบรวมอย่างมาก

-O เปิดแฟล็กการปรับให้เหมาะสมต่อไปนี้:

-fauto-inc-dec -fbranch-count-reg -fombine-stack-adjustments -fcompare-เอลิม
-fcprop-ลงทะเบียน -fdce -fdefer-ป๊อป -fdelayed-สาขา -fdse -ส่งต่อ-เผยแพร่
-fguess-สาขา-ความน่าจะเป็น -fif-conversion2 -fif-conversion
-finline-ฟังก์ชั่นที่เรียกว่าครั้งเดียว -fipa-บริสุทธิ์-const -fipa-profile -fipa-reference
-fmerge-ค่าคงที่ -fmove-loop-ค่าคงที่ -fshrink-wrap -fsplit-wide-types
-ftree-บิต-ccp -ftree-ccp -fssa-phiopt -ftree-ch -ftree-คัดลอก-prop -ftree-copyrename
-ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop -ฟรีฟรี -ftree-phiprop
-ftree-อ่างล้างจาน -ftree-slsr -ftree-sra -ftree-pta -ftree-ter -funit-at-a-time

-O ยังเปิดอยู่ -fomit-frame-ตัวชี้ บนเครื่องที่ไม่รบกวน
ด้วยการดีบัก

-O2 เพิ่มประสิทธิภาพมากยิ่งขึ้น GCC ทำการเพิ่มประสิทธิภาพเกือบทั้งหมดที่รองรับซึ่งไม่รองรับ
เกี่ยวข้องกับการแลกเปลี่ยนความเร็วอวกาศ เมื่อเทียบกับ -O, ตัวเลือกนี้จะเพิ่มทั้ง
เวลาในการรวบรวมและประสิทธิภาพของรหัสที่สร้างขึ้น

-O2 เปิดแฟล็กการปรับให้เหมาะสมทั้งหมดที่ระบุโดย -O. นอกจากนี้ยังเปิดดังต่อไปนี้
แฟล็กการเพิ่มประสิทธิภาพ: -fthread-กระโดด -falign-ฟังก์ชั่น -falign-กระโดด -falign-ลูป
-falign-labels -fcaller-บันทึก -fcrossjumping -fcse-ติดตามกระโดด -fcse-ข้ามบล็อก
-fdelete-null-pointer-checks -fdevirtualize -fdevirtualize-เก็งกำไร
-การเพิ่มประสิทธิภาพราคาแพง -fgcse -fgcse-lm -fhoist-adjacent-loads
-finline-small-functions -findirect-inlining -fipa-cp -fipa-cp-การจัดตำแหน่ง -fipa-sra
-fipa-icf -fisolate-erroneous-paths-dereference -flra-remat -foptimize-พี่น้อง-โทร
-foptimize-strlen -fpartial-inlining -fpeephole2 -freeorder-บล็อก
-freeorder-blocks-and-partition -freeorder-ฟังก์ชั่น -frerun-cse-หลังลูป
-fsched-interblock -fsched-spec -fschedule-insns -fschedule-insns2 -fstrict-นามแฝง
-fstrict-ล้น -ftree-builtin-call-dce -ftree-switch-conversion -ftree-tail-ผสาน
-ftree-pre -ftree-vrp -fipa-ra

โปรดทราบคำเตือนภายใต้ -fgcse เกี่ยวกับการอัญเชิญ -O2 บนโปรแกรมที่ใช้คำนวณ
โกโตส

หมายเหตุ: ใน Ubuntu 8.10 และเวอร์ชันที่ใหม่กว่า -D_FORTIFY_SOURCE=2 ถูกกำหนดโดยค่าเริ่มต้น และ is
เปิดใช้งานเมื่อ -O ถูกตั้งค่าเป็น 2 หรือสูงกว่า ซึ่งจะทำให้เวลาในการคอมไพล์เพิ่มเติมและ
ตรวจสอบรันไทม์สำหรับฟังก์ชัน libc ต่างๆ หากต้องการปิดใช้งาน ให้ระบุ
-U_FORTIFY_SOURCE or -D_FORTIFY_SOURCE=0.

-O3 เพิ่มประสิทธิภาพอีกมาก -O3 เปิดการเพิ่มประสิทธิภาพทั้งหมดที่ระบุโดย -O2 และยังเปิด
-finline-ฟังก์ชั่น, -funswitch-ลูป, -fpredictive-ทั่วไป, -fgcse-หลังรีโหลด,
-ftree-loop-vectorize, -ftree-loop-distribute-patterns, -ftree-slp-vectorize,
-fvect-ต้นทุน-รุ่น, -ftree-บางส่วน-pre และ -fipa-cp-โคลน ตัวเลือก

-O0 ลดเวลาในการคอมไพล์และทำให้การดีบักสร้างผลลัพธ์ที่คาดหวัง นี้เป็น
ค่าเริ่มต้น.

-Os ปรับให้เหมาะสมสำหรับขนาด -Os เปิดใช้งานทั้งหมด -O2 การเพิ่มประสิทธิภาพที่มักจะไม่เพิ่มขึ้น
ขนาดรหัส นอกจากนี้ยังทำการเพิ่มประสิทธิภาพเพิ่มเติมที่ออกแบบมาเพื่อลดขนาดโค้ด

-Os ปิดใช้งานแฟล็กการปรับให้เหมาะสมต่อไปนี้: -falign-ฟังก์ชั่น -falign-กระโดด
-falign-ลูป -falign-labels -freeorder-บล็อก -freeorder-blocks-and-partition
-fprefetch-ลูปอาร์เรย์

-Ofast
ละเว้นการปฏิบัติตามมาตรฐานที่เข้มงวด -Ofast เปิดใช้งานทั้งหมด -O3 การเพิ่มประสิทธิภาพ นอกจากนี้ยัง
เปิดใช้งานการปรับให้เหมาะสมที่ไม่ถูกต้องสำหรับโปรแกรมที่เป็นไปตามมาตรฐานทั้งหมด มัน
เปิด -ffast-คณิตศาสตร์ และ Fortran เฉพาะ -fno-protect-ผู้ปกครอง และ -fstack-อาร์เรย์.

-Og ปรับประสบการณ์การดีบักให้เหมาะสม -Og เปิดใช้งานการเพิ่มประสิทธิภาพที่ไม่รบกวนกับ
การดีบัก ควรเป็นระดับการเพิ่มประสิทธิภาพทางเลือกสำหรับการแก้ไขมาตรฐาน
วงจรคอมไพล์-ดีบัก เสนอระดับการเพิ่มประสิทธิภาพที่เหมาะสมในขณะที่ยังคงรักษา
การรวบรวมที่รวดเร็วและประสบการณ์การดีบักที่ดี

หากคุณใช้หลายตัว -O ตัวเลือก โดยมีหรือไม่มีหมายเลขระดับ ตัวเลือกสุดท้ายคือ
ที่มีประสิทธิภาพ

ตัวเลือกของแบบฟอร์ม -fธง ระบุแฟล็กที่ไม่ขึ้นกับเครื่อง ธงส่วนใหญ่มีทั้งสองอย่าง
รูปแบบบวกและลบ รูปแบบเชิงลบของ -foo is -fno-foo. ในตารางด้านล่าง
มีเพียงแบบฟอร์มเดียวเท่านั้นที่อยู่ในรายการ --- แบบฟอร์มที่คุณใช้โดยทั่วไป คุณสามารถคิดออกอื่น ๆ
โดยการถอด ที่ไม่มี หรือเพิ่ม

ตัวเลือกต่อไปนี้จะควบคุมการเพิ่มประสิทธิภาพเฉพาะ พวกมันถูกเปิดใช้งานโดย -O
ทางเลือกหรือเกี่ยวข้องกับสิ่งที่มีอยู่ คุณสามารถใช้แฟล็กต่อไปนี้ในแรร์
กรณีที่ต้องการ "ปรับละเอียด" ของการเพิ่มประสิทธิภาพที่จะดำเนินการ

-fno-defer-ป๊อป
เปิดอาร์กิวเมนต์ทุกครั้งที่เรียกใช้ฟังก์ชันทุกครั้งที่ฟังก์ชันส่งคืน สำหรับ
เครื่องที่ต้องเปิดอาร์กิวเมนต์หลังจากการเรียกใช้ฟังก์ชัน คอมไพเลอร์ปกติจะช่วยให้
อาร์กิวเมนต์สะสมบนสแต็กสำหรับการเรียกใช้ฟังก์ชันหลาย ๆ อันและปรากฏขึ้นทั้งหมดที่
ครั้งหนึ่ง

พิการในระดับ -O, -O2, -O3, -Os.

-ส่งต่อ-เผยแพร่
ดำเนินการส่งต่อการแพร่กระจายไปข้างหน้าบน RTL บัตรผ่านพยายามรวมสองคำแนะนำ
และตรวจสอบว่าผลลัพธ์สามารถทำให้ง่ายขึ้นได้หรือไม่ หากการวนซ้ำเปิดอยู่ ให้ผ่านสองครั้ง
จะดำเนินการและกำหนดเวลาที่สองหลังจากคลายลูป

ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นที่ระดับการปรับให้เหมาะสม -O, -O2, -O3, -Os.

-ffp-contract=สไตล์
-ffp-contract=off ปิดใช้งานการย่อนิพจน์ทศนิยม -ffp-contract=fast
เปิดใช้งานการหดตัวของนิพจน์ทศนิยมเช่นการหลอมรวมคูณเพิ่ม
การดำเนินการหากเป้าหมายมีการสนับสนุนดั้งเดิมสำหรับพวกเขา -ffp-contract=on ช่วยให้
การหดตัวของนิพจน์ทศนิยมหากอนุญาตโดยมาตรฐานภาษา นี่คือ
ปัจจุบันไม่ได้ดำเนินการและปฏิบัติเท่ากับ -ffp-contract=off.

ค่าเริ่มต้นคือ -ffp-contract=fast.

-fomit-frame-ตัวชี้
อย่าเก็บตัวชี้เฟรมไว้ในรีจิสเตอร์สำหรับฟังก์ชันที่ไม่ต้องการ นี้
หลีกเลี่ยงคำแนะนำในการบันทึก ตั้งค่า และกู้คืนตัวชี้เฟรม มันยังทำให้
ทะเบียนพิเศษที่มีอยู่ในหลายฟังก์ชั่น It ด้วย ทำให้ การแก้จุดบกพร่อง เป็นไปไม่ได้ on
บาง เครื่อง

สำหรับเครื่องบางเครื่อง เช่น VAX แฟล็กนี้ไม่มีผลเพราะมาตรฐาน
ลำดับการโทรจะจัดการตัวชี้เฟรมโดยอัตโนมัติและไม่มีอะไรถูกบันทึกโดย
แสร้งทำเป็นว่ามันไม่มีอยู่จริง มาโครคำอธิบายเครื่อง "FRAME_POINTER_REQUIRED"
ควบคุมว่าเครื่องเป้าหมายรองรับแฟล็กนี้หรือไม่

การตั้งค่าเริ่มต้น (เมื่อไม่ได้ปรับขนาดให้เหมาะสม) สำหรับ GNU/Linux x32 รุ่น 86 บิตและ 32 บิต
ดาร์วิน x86 เป้าหมายคือ -fomit-frame-ตัวชี้. คุณสามารถกำหนดค่า GCC ด้วย
--enable-frame-ตัวชี้ กำหนดค่าตัวเลือกเพื่อเปลี่ยนค่าเริ่มต้น

เปิดใช้งานในระดับ -O, -O2, -O3, -Os.

-foptimize-พี่น้อง-โทร
ปรับการเรียกซ้ำพี่น้องและส่วนท้ายให้เหมาะสม

เปิดใช้งานในระดับ -O2, -O3, -Os.

-foptimize-strlen
ปรับฟังก์ชันสตริง C มาตรฐานต่างๆ ให้เหมาะสม (เช่น "strlen", "strchr" หรือ "strcpy") และ
คู่ "_FORTIFY_SOURCE" ของพวกเขาเป็นทางเลือกที่เร็วกว่า

เปิดใช้งานในระดับ -O2, -O3.

-fno-inline
อย่าขยายฟังก์ชันใด ๆ ในบรรทัดนอกเหนือจากที่มีเครื่องหมาย "always_inline"
คุณลักษณะ. นี่เป็นค่าเริ่มต้นเมื่อไม่ได้เพิ่มประสิทธิภาพ

ฟังก์ชันเดี่ยวสามารถยกเว้นจากการอินไลน์ได้โดยทำเครื่องหมายด้วย "noinline"
คุณลักษณะ

-finline-small-functions
รวมฟังก์ชั่นเข้ากับผู้โทรเมื่อร่างกายมีขนาดเล็กกว่าที่คาดไว้
รหัสเรียกฟังก์ชัน (ขนาดโดยรวมของโปรแกรมจะเล็กลง) คอมไพเลอร์
heuristically ตัดสินใจว่าฟังก์ชันใดง่ายพอที่จะรวมเข้าไว้ด้วยกัน
ทางนี้. อินไลน์นี้ใช้กับฟังก์ชันทั้งหมด แม้กระทั่งฟังก์ชันที่ไม่ได้ประกาศแบบอินไลน์

เปิดใช้งานที่ระดับ -O2.

-findirect-inlining
การเรียกแบบอินไลน์และการโทรทางอ้อมที่ค้นพบในเวลาคอมไพล์ด้วย
อินไลน์ก่อนหน้า ตัวเลือกนี้จะมีผลเมื่อเปิดอินไลน์ตัวเองเท่านั้น
โดย -finline-ฟังก์ชั่น or -finline-small-functions ตัวเลือก

เปิดใช้งานที่ระดับ -O2.

-finline-ฟังก์ชั่น
พิจารณาฟังก์ชันทั้งหมดสำหรับการแทรก แม้ว่าจะไม่ได้ประกาศแบบอินไลน์ก็ตาม NS
คอมไพเลอร์ heuristically ตัดสินใจว่าฟังก์ชันใดที่ควรค่าแก่การผสานรวมในลักษณะนี้

หากการเรียกทั้งหมดไปยังฟังก์ชันที่กำหนดถูกรวมเข้าด้วยกัน และฟังก์ชันนั้นได้รับการประกาศ
"คงที่" โดยปกติแล้วฟังก์ชันจะไม่ส่งออกเป็นรหัสแอสเซมเบลอร์ในสิทธิ์ของตนเอง

เปิดใช้งานที่ระดับ -O3.

-finline-ฟังก์ชั่นที่เรียกว่าครั้งเดียว
พิจารณาฟังก์ชัน "คงที่" ทั้งหมดที่ถูกเรียกเพียงครั้งเดียวสำหรับอินไลน์ในผู้โทรแม้ว่า
พวกเขาไม่ได้ทำเครื่องหมาย "ในบรรทัด" หากการเรียกใช้ฟังก์ชันที่กำหนดถูกรวมเข้าด้วยกัน
ฟังก์ชั่นไม่ได้ส่งออกเป็นรหัสแอสเซมเบลอร์ในสิทธิ์ของตนเอง

เปิดใช้งานในระดับ -O1, -O2, -O3 และ -Os.

-เกรงใจ-inlining
ฟังก์ชันอินไลน์ที่มีเครื่องหมาย "always_inline" และฟังก์ชันที่ร่างกายดูเล็กกว่า
ฟังก์ชั่นเรียกใช้ค่าใช้จ่ายก่อนทำ -fprofile-สร้าง เครื่องมือวัดและ
ผ่าน inlining จริง การทำเช่นนี้ทำให้การทำโปรไฟล์มีราคาถูกลงอย่างมากและโดยปกติ
inlining เร็วขึ้นในโปรแกรมที่มีฟังก์ชั่น wrapper ที่ซ้อนกันจำนวนมาก

เปิดใช้งานโดยค่าเริ่มต้น

-fipa-sra
ดำเนินการเปลี่ยนสเกลาร์ระหว่างขั้นตอนของมวลรวม ลบพารามิเตอร์ที่ไม่ได้ใช้ออก
และการแทนที่พารามิเตอร์ที่ส่งผ่านโดยการอ้างอิงโดยพารามิเตอร์ที่ส่งผ่านโดยค่า

เปิดใช้งานในระดับ -O2, -O3 และ -Os.

-finline-limit=n
โดยค่าเริ่มต้น GCC จะจำกัดขนาดของฟังก์ชันที่สามารถแทรกลงในบรรทัดได้ ธงนี้ช่วยให้
การควบคุมอย่างหยาบของขีด จำกัด นี้ n คือขนาดของฟังก์ชันที่สามารถอินไลน์ได้
จำนวนคำสั่งหลอก

Inlining ถูกควบคุมโดยพารามิเตอร์จำนวนหนึ่งซึ่งอาจระบุได้
เป็นรายบุคคลโดยใช้ --param ชื่อ=ความคุ้มค่า. -finline-limit=n ตัวเลือกชุดของ
พารามิเตอร์เหล่านี้ดังต่อไปนี้:

max-inline-insns-single
ถูกตั้งค่าเป็น n/ 2

max-inline-insns-auto
ถูกตั้งค่าเป็น n/ 2

ดูเอกสารประกอบของพารามิเตอร์แต่ละตัวที่ควบคุมอินไลน์และ . ด้านล่าง
สำหรับค่าเริ่มต้นของพารามิเตอร์เหล่านี้

บันทึก: อาจไม่มีค่า -finline-จำกัด ที่ส่งผลให้เกิดพฤติกรรมเริ่มต้น

บันทึก: คำสั่งหลอกหมายถึง ในบริบทเฉพาะนี้ บทคัดย่อ
การวัดขนาดของฟังก์ชัน มิได้หมายความถึงการนับชุมนุมแต่อย่างใด
คำแนะนำและความหมายที่แน่นอนเช่นนั้นอาจเปลี่ยนจากรุ่นหนึ่งเป็น
อื่น

-fno-keep-inline-dllexport
นี่เป็นเวอร์ชั่นที่ละเอียดกว่าของ -fkeep-inline-functionsซึ่งใช้เฉพาะกับ
ฟังก์ชันที่ประกาศโดยใช้แอตทริบิวต์ "dllexport" หรือ declspec

-fkeep-inline-functions
ใน C ให้ปล่อยฟังก์ชัน "คงที่" ที่ประกาศว่า "อินไลน์" ลงในไฟล์อ็อบเจ็กต์ แม้ว่า
ฟังก์ชันนี้ได้รับการฝังไว้ในผู้โทรทั้งหมดแล้ว สวิตช์นี้ไม่มีผล
ทำงานโดยใช้ส่วนขยาย "extern inline" ใน GNU C90 ใน C ++ ให้ปล่อยใด ๆ และทั้งหมด
ฟังก์ชันแบบอินไลน์ในไฟล์อ็อบเจ็กต์

-fkeep-static-consts
ปล่อยตัวแปรที่ประกาศ "คงที่" เมื่อไม่ได้เปิดใช้งานการปรับให้เหมาะสม แม้ว่า
ตัวแปรไม่ได้ถูกอ้างอิง

GCC เปิดใช้งานตัวเลือกนี้เป็นค่าเริ่มต้น หากคุณต้องการบังคับให้คอมไพเลอร์ตรวจสอบว่า a
มีการอ้างอิงตัวแปรไม่ว่าจะเปิดใช้การปรับให้เหมาะสมหรือไม่ก็ตาม use
-fno-keep-static-consts ตัวเลือก

-fmerge-ค่าคงที่
พยายามรวมค่าคงที่ที่เหมือนกัน (ค่าคงที่สตริงและค่าคงที่ทศนิยม)
ข้ามหน่วยการรวบรวม

ตัวเลือกนี้เป็นค่าดีฟอลต์สำหรับการคอมไพล์ที่ปรับให้เหมาะสมหากแอสเซมเบลอร์และลิงเกอร์
สนับสนุนมัน ใช้ -fno-ผสานค่าคงที่ เพื่อยับยั้งพฤติกรรมนี้

เปิดใช้งานในระดับ -O, -O2, -O3, -Os.

-fmerge-all-ค่าคงที่
พยายามรวมค่าคงที่และตัวแปรที่เหมือนกันเข้าด้วยกัน

ตัวเลือกนี้หมายถึง -fmerge-ค่าคงที่. นอกจาก -fmerge-ค่าคงที่ นี้
พิจารณาเช่นอาร์เรย์เริ่มต้นคงที่หรือตัวแปรคงที่เริ่มต้นด้วย
ประเภทอินทิกรัลหรือทศนิยม ภาษาเช่น C หรือ C ++ ต้องการตัวแปรแต่ละตัว
รวมถึงหลายอินสแตนซ์ของตัวแปรเดียวกันในการเรียกซ้ำเพื่อให้มีความชัดเจน
ตำแหน่ง ดังนั้นการใช้ตัวเลือกนี้ส่งผลให้มีพฤติกรรมที่ไม่เป็นไปตามข้อกำหนด

-fmodulo-sched
ดำเนินการจัดตารางโมดูโลวงสวิงทันทีก่อนกำหนดการแรกจะผ่าน นี้
pass ดูที่วงในสุดและจัดลำดับคำสั่งใหม่โดยทับค่า different
การทำซ้ำ

-fmodulo-sched-allow-regmoves
ดำเนินการจัดกำหนดการโมดูโลบน SMS ที่เข้มงวดยิ่งขึ้นโดยอนุญาตให้ย้ายการลงทะเบียนได้ โดย
การตั้งค่าแฟล็กนี้ ขอบต่อต้านการพึ่งพาบางส่วนจะถูกลบออก ซึ่งทำให้
การสร้าง reg-moves ตามการวิเคราะห์ช่วงชีวิต ตัวเลือกนี้ใช้ได้ผล
เฉพาะกับ -fmodulo-sched เปิดการใช้งาน

-fno-สาขานับ-reg
อย่าใช้คำสั่ง "decrement and branch" ในเครื่องนับจำนวน แต่แทน
สร้างลำดับของคำสั่งที่ลดการลงทะเบียนเปรียบเทียบกับ
ศูนย์แล้วแยกสาขาตามผลลัพธ์ ตัวเลือกนี้มีความหมายเฉพาะกับ
สถาปัตยกรรมที่รองรับคำสั่งดังกล่าว ซึ่งรวมถึง x86, PowerPC, IA-64 และ
เอส/390.

เปิดใช้งานโดยค่าเริ่มต้นที่ -O1 และสูงกว่า

ค่าเริ่มต้นคือ -fbranch-count-reg.

-fno-function-cse
อย่าใส่ฟังก์ชันแอดเดรสในรีจิสเตอร์ ทำแต่ละคำสั่งที่เรียก
ฟังก์ชันคงมีที่อยู่ของฟังก์ชันอย่างชัดเจน

ตัวเลือกนี้ส่งผลให้โค้ดมีประสิทธิภาพน้อยลง แต่มีแฮ็กแปลกๆ บางอย่างที่เปลี่ยน
เอาต์พุตแอสเซมเบลอร์อาจสับสนโดยการปรับให้เหมาะสมที่ดำเนินการเมื่อตัวเลือกนี้คือ
ไม่ได้ใช้.

ค่าเริ่มต้นคือ -ffunction-cse

-fno-zero-initialized-in-bss
หากเป้าหมายรองรับส่วน BSS โดยค่าเริ่มต้น GCC จะวางตัวแปรที่เป็น
เริ่มต้นเป็นศูนย์ใน BSS นี้สามารถประหยัดพื้นที่ในโค้ดผลลัพธ์

ตัวเลือกนี้จะปิดการทำงานนี้เนื่องจากบางโปรแกรมพึ่งพาตัวแปรอย่างชัดเจน
ไปที่ส่วนข้อมูล---เช่น เพื่อให้ไฟล์ปฏิบัติการที่เป็นผลลัพธ์สามารถค้นหา
จุดเริ่มต้นของส่วนนั้นและ/หรือตั้งสมมติฐานตามนั้น

ค่าเริ่มต้นคือ -fzero-initialized-in-bss.

-fthread-กระโดด
ทำการเพิ่มประสิทธิภาพที่ตรวจสอบเพื่อดูว่าสาขากระโดดไปยังตำแหน่งที่อื่นหรือไม่
การเปรียบเทียบย่อยโดยตัวแรกจะพบ ถ้าใช่สาขาแรกจะถูกเปลี่ยนเส้นทางไปที่
ไม่ว่าจะเป็นปลายทางของสาขาที่สองหรือจุดที่ตามมาทันที
ขึ้นอยู่กับว่าเงื่อนไขที่ทราบว่าเป็นจริงหรือเท็จ

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fsplit-wide-types
เมื่อใช้ประเภทที่ใช้รีจิสเตอร์หลายตัว เช่น "long long" บน 32-bit
ระบบ แยกทะเบียนออกจากกันและจัดสรรให้เป็นอิสระ ปกติแบบนี้
สร้างโค้ดที่ดีขึ้นสำหรับประเภทเหล่านั้น แต่อาจทำให้การดีบักทำได้ยากขึ้น

เปิดใช้งานในระดับ -O, -O2, -O3, -Os.

-fcse-ติดตามกระโดด
ในการกำจัดนิพจน์ย่อยทั่วไป (CSE) ให้สแกนผ่านคำแนะนำการข้ามเมื่อ
เป้าหมายของการกระโดดไม่สามารถเข้าถึงได้โดยเส้นทางอื่น ตัวอย่างเช่น เมื่อ CSE เผชิญกับ
คำสั่ง "if" ที่มีประโยค "else" CSE ติดตามการกระโดดเมื่อเงื่อนไข
ทดสอบแล้วเป็นเท็จ

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fcse-ข้ามบล็อก
มันคล้ายกับ -fcse-ติดตามกระโดดแต่ทำให้ CSE ก้าวกระโดดตามนั้น
ข้ามบล็อกตามเงื่อนไข เมื่อ CSE พบคำสั่ง "if" ง่ายๆ โดยไม่มี
ข้ออื่น -fcse-ข้ามบล็อก ทำให้ CSE ติดตามกระโดดไปรอบ ๆ ร่างกายของ
"ถ้า".

เปิดใช้งานในระดับ -O2, -O3, -Os.

-frerun-cse-หลังลูป
เรียกใช้การกำจัดนิพจน์ย่อยทั่วไปอีกครั้งหลังจากดำเนินการปรับลูปให้เหมาะสมที่สุด

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fgcse
ดำเนินการผ่านการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก บัตรผ่านนี้ยังดำเนินการ
ค่าคงที่ทั่วโลกและการขยายพันธุ์สำเนา

บันทึก: เมื่อรวบรวมโปรแกรมโดยใช้ gotos ที่คำนวณแล้ว ซึ่งเป็นส่วนขยาย GCC คุณอาจได้รับ
ประสิทธิภาพรันไทม์ที่ดีขึ้นหากคุณปิดใช้งานการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก
ผ่านโดยการเพิ่ม -fno-gcse ไปที่บรรทัดคำสั่ง

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fgcse-lm
เมื่อ -fgcse-lm เปิดใช้งาน พยายามกำจัดนิพจน์ย่อยทั่วไปส่วนกลางเพื่อย้าย
โหลดที่ฆ่าโดยร้านค้าในตัวเองเท่านั้น อนุญาตให้วนซ้ำที่มี a
ลำดับการโหลด/จัดเก็บที่จะเปลี่ยนเป็นโหลดนอกลูปและคัดลอก/จัดเก็บภายใน
ห่วง

เปิดใช้งานโดยค่าเริ่มต้นเมื่อ -fgcse เปิดใช้งาน.

-fgcse-sm
เมื่อ -fgcse-sm เปิดใช้งานแล้ว การเคลื่อนไหวผ่านของร้านค้าจะทำงานหลังจากโกลบอลคอมมอน
การกำจัดนิพจน์ย่อย บัตรผ่านนี้พยายามย้ายร้านค้าออกจากลูป เมื่อใช้
ร่วมกับ -fgcse-lm, ลูปที่มีลำดับการโหลด/การจัดเก็บสามารถเปลี่ยนแปลงได้
เพื่อโหลดก่อนลูปและเก็บหลังลูป

ไม่ได้เปิดใช้งานในระดับการเพิ่มประสิทธิภาพใดๆ

-fgcse-las
เมื่อ -fgcse-las เปิดใช้งานแล้ว ผ่านการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก
กำจัดการโหลดซ้ำซ้อนที่มาหลังจากร้านค้าไปยังตำแหน่งหน่วยความจำเดียวกัน (ทั้ง
ความซ้ำซ้อนบางส่วนและทั้งหมด)

ไม่ได้เปิดใช้งานในระดับการเพิ่มประสิทธิภาพใดๆ

-fgcse-หลังรีโหลด
เมื่อ -fgcse-หลังรีโหลด เปิดใช้งานแล้ว จะดำเนินการผ่านการกำจัดโหลดซ้ำซ้อน
หลังจากโหลดซ้ำ จุดประสงค์ของบัตรนี้คือเพื่อขจัดการรั่วไหลที่ซ้ำซาก

-faggressive-loop-optimizations
ตัวเลือกนี้บอกให้เครื่องมือเพิ่มประสิทธิภาพการวนซ้ำใช้ข้อจำกัดทางภาษาเพื่อให้ได้มาซึ่งขอบเขตสำหรับ
จำนวนการวนซ้ำของลูป นี่ถือว่ารหัสลูปไม่เรียกใช้
พฤติกรรมที่ไม่ได้กำหนดโดยตัวอย่างเช่นทำให้เกิดการล้นของจำนวนเต็มหรือนอกขอบเขต
การเข้าถึงอาร์เรย์ ขอบเขตของจำนวนการวนซ้ำของลูปถูกใช้เป็นแนวทาง
การคลายเกลียวและการปอกและการทดสอบการออกของลูปให้เหมาะสมที่สุด เปิดใช้งานตัวเลือกนี้แล้ว
โดยค่าเริ่มต้น

-funsafe-loop-optimizations
ตัวเลือกนี้บอกให้ตัวเพิ่มประสิทธิภาพลูปสมมติว่าดัชนีลูปไม่ล้นและ
ที่วนซ้ำกับเงื่อนไขการออกที่ไม่สำคัญนั้นไม่สิ้นสุด สิ่งนี้ทำให้กว้างขึ้น
ช่วงของการเพิ่มประสิทธิภาพลูปแม้ว่าตัวเพิ่มประสิทธิภาพลูปเองไม่สามารถพิสูจน์ได้ว่าสิ่งเหล่านี้
สมมติฐานถูกต้อง ถ้าคุณใช้ -Wunsafe-loop-optimizations, คอมไพเลอร์เตือนคุณ
ถ้ามันเจอลูปแบบนี้

-fcrossjumping
ดำเนินการแปลงข้ามกระโดด การแปลงนี้รวมรหัสที่เทียบเท่าและ
บันทึกขนาดรหัส รหัสผลลัพธ์อาจจะหรืออาจไม่ทำงานได้ดีกว่าไม่มีการข้าม
กระโดด

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fauto-inc-dec
รวมการเพิ่มหรือลดที่อยู่ด้วยการเข้าถึงหน่วยความจำ บัตรผ่านนี้คือ
ข้ามสถาปัตยกรรมที่ไม่มีคำแนะนำเพื่อรองรับสิ่งนี้เสมอ
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่าในสถาปัตยกรรมที่รองรับสิ่งนี้

-fdce
ดำเนินการกำจัดโค้ดที่ไม่ทำงาน (DCE) บน RTL เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-fdse
ดำเนินการ dead store elimination (DSE) บน RTL เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-fif-conversion
พยายามแปลงการข้ามแบบมีเงื่อนไขให้เทียบเท่าแบบไม่มีสาขา ซึ่งรวมถึง
การใช้การเคลื่อนไหวแบบมีเงื่อนไข ขั้นต่ำ สูงสุด ตั้งค่าสถานะและคำแนะนำ abs และลูกเล่นบางอย่าง
ทำได้โดยเลขคณิตมาตรฐาน การใช้การประมวลผลแบบมีเงื่อนไขกับชิปที่เป็นอยู่
ที่มีอยู่ถูกควบคุมโดย -fif-conversion2.

เปิดใช้งานในระดับ -O, -O2, -O3, -Os.

-fif-conversion2
ใช้การดำเนินการตามเงื่อนไข (ถ้ามี) เพื่อแปลงการข้ามตามเงื่อนไขเป็น
เทียบเท่าน้อยกว่าสาขา

เปิดใช้งานในระดับ -O, -O2, -O3, -Os.

-fdeclone-ctor-dtor
C ++ ABI ต้องการจุดเข้าใช้งานหลายจุดสำหรับตัวสร้างและตัวทำลาย: หนึ่งจุดสำหรับa
ออบเจ็กต์ย่อยฐาน อันหนึ่งสำหรับออบเจ็กต์ที่สมบูรณ์ และอีกอันสำหรับตัวทำลายเสมือนที่เรียก
โอเปอเรเตอร์ลบหลังจากนั้น สำหรับลำดับชั้นที่มีฐานเสมือน ฐานและสมบูรณ์
ตัวแปรคือโคลนซึ่งหมายถึงฟังก์ชันสองชุด ด้วยตัวเลือกนี้
ฐานและตัวแปรทั้งหมดถูกเปลี่ยนเป็น thunk ที่เรียกว่าการนำไปใช้ทั่วไป

เปิดใช้งานโดย -Os.

-fdelete-null-pointer-checks
สมมติว่าโปรแกรมไม่สามารถละเลยพอยน์เตอร์ null ได้อย่างปลอดภัย และไม่มีโค้ดหรือข้อมูล
องค์ประกอบอยู่ที่นั่น สิ่งนี้ทำให้สามารถเพิ่มประสิทธิภาพการพับคงที่อย่างง่ายได้เลย
ระดับการเพิ่มประสิทธิภาพ นอกจากนี้ การเพิ่มประสิทธิภาพอื่นๆ ที่ส่งผ่านใน GCC ใช้แฟล็กนี้ไปยัง
ควบคุมการวิเคราะห์กระแสข้อมูลทั่วโลกที่ขจัดการตรวจสอบที่ไร้ประโยชน์สำหรับพอยน์เตอร์ที่เป็นโมฆะ
สิ่งเหล่านี้ถือว่าถ้าพอยน์เตอร์ถูกตรวจสอบหลังจากมันถูกยกเลิกการอ้างอิงแล้ว มัน
ไม่สามารถเป็นโมฆะได้

อย่างไรก็ตาม โปรดทราบว่าในบางสภาพแวดล้อม ข้อสันนิษฐานนี้ไม่เป็นความจริง ใช้
-fno-delete-null-pointer-checks เพื่อปิดใช้งานการเพิ่มประสิทธิภาพนี้สำหรับโปรแกรมที่ขึ้นอยู่กับ
เกี่ยวกับพฤติกรรมนั้น

เป้าหมายบางรายการ โดยเฉพาะเป้าหมายที่ฝังไว้ ปิดใช้งานตัวเลือกนี้ในทุกระดับ มิฉะนั้น
เปิดใช้งานในทุกระดับ: -O0, -O1, -O2, -O3, -Os. บัตรผ่านที่ใช้ข้อมูล
เปิดใช้งานอย่างอิสระในระดับการเพิ่มประสิทธิภาพที่แตกต่างกัน

-fdevirtualize
พยายามแปลงการโทรเป็นฟังก์ชันเสมือนเป็นการโทรโดยตรง ทำได้ทั้งสองอย่าง
ภายในขั้นตอนและระหว่างขั้นตอนโดยเป็นส่วนหนึ่งของ inlining ทางอ้อม
(-findirect-inlining) และการขยายพันธุ์แบบคงที่ระหว่างขั้นตอน (-fipa-cp). เปิดใช้งานที่
ระดับ -O2, -O3, -Os.

-fdevirtualize-เก็งกำไร
พยายามแปลงการเรียกเป็นฟังก์ชันเสมือนเป็นการเรียกโดยตรงแบบเก็งกำไร ขึ้นอยู่กับ
การวิเคราะห์กราฟการสืบทอดประเภท กำหนดการโทรที่กำหนด ชุดของ
เป้าหมายที่เป็นไปได้ ถ้าชุดเล็กแนะนำไซส์ 1 ให้เปลี่ยนสายเป็น
การตัดสินใจแบบมีเงื่อนไขระหว่างการโทรโดยตรงและโดยอ้อม เปิดใช้งานการโทรเก็งกำไร
การปรับให้เหมาะสมมากขึ้น เช่น inlining เมื่อพวกเขาดูเหมือนไร้ประโยชน์หลังจากนั้นต่อไป
การเพิ่มประสิทธิภาพจะถูกแปลงกลับเป็นรูปแบบเดิม

-fdevirtualize-at-ltrans
สตรีมข้อมูลเพิ่มเติมที่จำเป็นสำหรับการ devirtualization เชิงรุกเมื่อรันลิงก์-
เครื่องมือเพิ่มประสิทธิภาพเวลาในโหมดการแปลงในเครื่อง ตัวเลือกนี้เปิดใช้งานเพิ่มเติม
devirtualization แต่เพิ่มขนาดของข้อมูลที่สตรีมได้อย่างมาก สำหรับสิ่งนี้
เหตุผลที่ถูกปิดใช้งานโดยค่าเริ่มต้น

-การเพิ่มประสิทธิภาพราคาแพง
ดำเนินการปรับให้เหมาะสมเล็กน้อยจำนวนหนึ่งซึ่งค่อนข้างแพง

เปิดใช้งานในระดับ -O2, -O3, -Os.

-ฟรี
พยายามลบคำแนะนำส่วนขยายที่ซ้ำซ้อน สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับ
สถาปัตยกรรม x86-64 ซึ่งขยายเป็นศูนย์โดยปริยายในการลงทะเบียน 64 บิตหลังจาก
เขียนลงครึ่งล่าง 32 บิต

เปิดใช้งานสำหรับ Alpha, AArch64 และ x86 ที่ระดับ -O2, -O3, -Os.

-fno-lifetime-dse
ใน C ++ ค่าของวัตถุได้รับผลกระทบจากการเปลี่ยนแปลงภายในอายุเท่านั้น: when
ตัวสร้างเริ่มต้น วัตถุมีค่าที่ไม่แน่นอน และการเปลี่ยนแปลงใดๆ ระหว่าง
อายุการใช้งานของวัตถุนั้นตายเมื่อวัตถุถูกทำลาย ปกติร้านตาย
การกำจัดจะใช้ประโยชน์จากสิ่งนี้ ถ้ารหัสของคุณขึ้นอยู่กับค่าของ
ที่เก็บอ็อบเจ็กต์คงอยู่เกินอายุของอ็อบเจ็กต์ คุณสามารถใช้แฟล็กนี้เพื่อ
ปิดใช้งานการเพิ่มประสิทธิภาพนี้

-five-range-หดตัว
พยายามลดแรงดันรีจิสเตอร์ผ่านการหดตัวของช่วงรีจิสเตอร์ นี่คือ
มีประโยชน์สำหรับโปรเซสเซอร์ที่รวดเร็วด้วยชุดรีจิสเตอร์ขนาดเล็กหรือปานกลาง

-fira-อัลกอริทึม=ขั้นตอนวิธี
ใช้อัลกอริธึมการระบายสีที่ระบุสำหรับตัวจัดสรรรีจิสเตอร์แบบรวม NS
ขั้นตอนวิธี อาร์กิวเมนต์สามารถ ลำดับความสำคัญซึ่งระบุสีลำดับความสำคัญของ Chow หรือ CB,
ซึ่งระบุสี Chaitin-Briggs ไม่มีการระบายสี Chaitin-Briggs
สำหรับสถาปัตยกรรมทั้งหมด แต่สำหรับเป้าหมายเหล่านั้นที่สนับสนุน มันคือค่าเริ่มต้น
เพราะมันสร้างรหัสที่ดีกว่า

-fira-region=ภูมิภาค
ใช้ภูมิภาคที่ระบุสำหรับตัวจัดสรรการลงทะเบียนแบบรวม NS ภูมิภาค อาร์กิวเมนต์
ควรเป็นอย่างใดอย่างหนึ่งต่อไปนี้:

ทั้งหมด ใช้ลูปทั้งหมดเป็นขอบเขตการจัดสรรรีจิสเตอร์ สิ่งนี้สามารถให้ผลลัพธ์ที่ดีที่สุดสำหรับ
เครื่องที่มีชุดทะเบียนขนาดเล็กและ/หรือผิดปกติ

ผสม
ใช้ลูปทั้งหมดยกเว้นลูปที่มีแรงกดเล็ก ๆ เป็นภูมิภาค นี้
ค่ามักจะให้ผลลัพธ์ที่ดีที่สุดในกรณีส่วนใหญ่และสำหรับสถาปัตยกรรมส่วนใหญ่และ
ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อคอมไพล์ด้วยการปรับความเร็วให้เหมาะสม (-O, -O2, ...)

หนึ่ง ใช้ฟังก์ชันทั้งหมดเป็นภูมิภาคเดียว ซึ่งมักจะส่งผลให้โค้ดที่เล็กที่สุด
ขนาดและเปิดใช้งานโดยค่าเริ่มต้นสำหรับ -Os or -O0.

-fira-hoist-ความดัน
ใช้ IRA เพื่อประเมินแรงกดของการลงทะเบียนในรหัส hoisting pass สำหรับการตัดสินใจรอก
นิพจน์ ตัวเลือกนี้มักจะส่งผลให้โค้ดมีขนาดเล็กลง แต่อาจทำให้ .ช้าลง
คอมไพเลอร์ลง

ตัวเลือกนี้เปิดใช้งานที่ระดับ -Os สำหรับเป้าหมายทั้งหมด

-fira-loop-ความดัน
ใช้ IRA เพื่อประเมินแรงกดดันของรีจิสเตอร์ในลูปสำหรับการตัดสินใจย้ายค่าคงที่ของลูป
ตัวเลือกนี้มักจะส่งผลให้มีการสร้างโค้ดที่เร็วขึ้นและเล็กลงบนเครื่องด้วย
ไฟล์รีจิสเตอร์ขนาดใหญ่ (>= 32 รีจิสเตอร์) แต่อาจทำให้คอมไพเลอร์ทำงานช้าลง

ตัวเลือกนี้เปิดใช้งานที่ระดับ -O3 สำหรับเป้าหมายบางอย่าง

-fno-ira-share-save-สล็อต
ปิดใช้งานการแชร์สแตกสล็อตที่ใช้สำหรับบันทึกการเรียกใช้ฮาร์ดรีจิสเตอร์ผ่าน
โทร. ฮาร์ดรีจิสเตอร์แต่ละตัวจะได้รับสแต็กสล็อตแยกกัน และด้วยเหตุนี้ ฟังก์ชันสแต็ก
เฟรมมีขนาดใหญ่ขึ้น

-fno-ira-share-รั่วไหล-สล็อต
ปิดใช้งานการแชร์สล็อตสแต็คที่จัดสรรสำหรับการลงทะเบียนหลอก แต่ละหลอกลงทะเบียน
ที่ไม่ได้รับฮาร์ดรีจิสเตอร์จะได้รับสแต็กสล็อตแยกต่างหากและด้วยเหตุนี้ฟังก์ชันผลลัพธ์
เฟรมสแต็กมีขนาดใหญ่กว่า

-fira-verbose=n
ควบคุมการใช้คำฟุ่มเฟือยของไฟล์ดัมพ์สำหรับตัวจัดสรรการลงทะเบียนแบบรวม NS
ค่าเริ่มต้นคือ 5. ถ้าค่า n มากกว่าหรือเท่ากับ 10 เอาต์พุตการถ่ายโอนข้อมูลจะถูกส่ง
เพื่อ stderr โดยใช้รูปแบบเดียวกับ n ลบ 10

-flra-remat
เปิดใช้งานการจัดรูปแบบใหม่ที่ไวต่อ CFG ใน LRA แทนที่จะโหลดค่าของการรั่วไหล
สมมุติ LRA พยายามที่จะกำหนดรูปแบบใหม่ (คำนวณใหม่) ค่าหากสามารถทำกำไรได้

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fdelayed-สาขา
หากเครื่องเป้าหมายรองรับ ให้ลองจัดลำดับคำสั่งใหม่เพื่อโจมตี
ช่องคำสั่งใช้ได้หลังจากคำสั่งสาขาล่าช้า

เปิดใช้งานในระดับ -O, -O2, -O3, -Os.

-fschedule-insns
หากเครื่องเป้าหมายรองรับ ให้ลองจัดลำดับคำแนะนำใหม่เพื่อกำจัด
การดำเนินการหยุดชะงักเนื่องจากข้อมูลที่จำเป็นไม่พร้อมใช้งาน ซึ่งช่วยให้เครื่องที่
มีจุดลอยตัวช้าหรือคำแนะนำในการโหลดหน่วยความจำโดยอนุญาตให้คำสั่งอื่น ๆ
ออกจนกว่าจะได้ผลลัพธ์ของการโหลดหรือคำสั่งทศนิยม

เปิดใช้งานในระดับ -O2, -O3.

-fschedule-insns2
คล้ายกับ -fschedule-insnsแต่ขอผ่านตารางสอนเพิ่มเติม
หลังจากจัดสรรการลงทะเบียนเรียบร้อยแล้ว สิ่งนี้มีประโยชน์อย่างยิ่งกับเครื่องที่มี a
จำนวนรีจิสเตอร์ค่อนข้างน้อยและคำสั่งในการโหลดหน่วยความจำใช้เวลามากกว่า
หนึ่งรอบ

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fno-sched-interblock
อย่ากำหนดเวลาคำแนะนำข้ามกลุ่มพื้นฐาน โดยปกติจะเปิดใช้งานโดยค่าเริ่มต้น
เมื่อกำหนดเวลาก่อนจัดสรรจัดสรร เช่น กับ -fschedule-insns หรือที่ -O2 or
สูงกว่า

-fno-sched-spec
ไม่อนุญาตให้มีการเคลื่อนไหวแบบเก็งกำไรของคำแนะนำที่ไม่โหลด โดยปกติจะเปิดใช้งานโดย
ค่าเริ่มต้นเมื่อกำหนดเวลาก่อนการจัดสรรการลงทะเบียนเช่นกับ -fschedule-insns หรือที่
-O2 หรือสูงกว่า

-fsched-ความดัน
เปิดใช้งานการตั้งเวลา insn ไวต่อแรงกดก่อนลงทะเบียนการจัดสรร นี้
เหมาะสมเมื่อกำหนดเวลาก่อนเปิดใช้งานการจัดสรรการลงทะเบียน เช่น with
-fschedule-insns หรือที่ -O2 หรือสูงกว่า. การใช้ตัวเลือกนี้สามารถปรับปรุงการสร้าง
รหัสและลดขนาดโดยป้องกันไม่ให้ความดันการลงทะเบียนเพิ่มขึ้นเหนือจำนวน
ของฮาร์ดรีจิสเตอร์ที่มีอยู่และการรั่วไหลที่ตามมาในการจัดสรรรีจิสเตอร์

-fsched-spec-load
อนุญาตการเก็งกำไรของคำแนะนำการโหลดบางส่วน สิ่งนี้จะสมเหตุสมผลเมื่อ
การจัดกำหนดการก่อนการจัดสรรลงทะเบียน เช่น กับ -fschedule-insns หรือที่ -O2 หรือสูงกว่า

-fsched-spec-load-อันตราย
อนุญาตให้มีการเก็งกำไรคำแนะนำการโหลดเพิ่มเติม สิ่งนี้จะสมเหตุสมผลเมื่อ
การจัดกำหนดการก่อนการจัดสรรลงทะเบียน เช่น กับ -fschedule-insns หรือที่ -O2 หรือสูงกว่า

-fsched-stalled-insns
-fsched-stalled-insns=n
กำหนดจำนวน insns (ถ้ามี) สามารถย้ายก่อนเวลาอันควรจากคิวของจนตรอก
insns ลงในรายการพร้อมในระหว่างการกำหนดเวลาที่สอง -fno-sched-stalled-insns
หมายความว่าไม่มีการย้าย insns ก่อนเวลาอันควร -fsched-stalled-insns=0 หมายความว่าไม่มี
จำกัดจำนวนการเข้าคิวที่สามารถย้ายก่อนกำหนดได้ -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 ให้ใกล้เคียงพอ
เพื่อหลีกเลี่ยงผลลัพธ์ที่ไม่น่าเชื่อถือจากอัลกอริทึม

สิ่งนี้เหมาะสมเมื่อกำหนดเวลาหลังจากการจัดสรรการลงทะเบียน เช่น with
-fschedule-insns2 หรือที่ -O2 หรือสูงกว่า

-fsched-group-heuristic
เปิดใช้งานฮิวริสติกกลุ่มในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุนการสอน
ที่อยู่ในกลุ่มกำหนดการ สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อกำหนดเวลาเป็น
เปิดใช้งาน เช่นกับ -fschedule-insns or -fschedule-insns2 หรือที่ -O2 หรือสูงกว่า

-fsched-critical-path-heuristic
เปิดใช้งานฮิวริสติกพาธวิกฤตในตัวจัดกำหนดการ ฮิวริสติกนี้โปรดปราน
คำแนะนำบนเส้นทางวิกฤต สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อกำหนดเวลาเป็น
เปิดใช้งาน เช่นกับ -fschedule-insns or -fschedule-insns2 หรือที่ -O2 หรือสูงกว่า

-fsched-spec-insn-heuristic
เปิดใช้งานฮิวริสติกของคำสั่งเก็งกำไรในตัวกำหนดตารางเวลา ฮิวริสติกนี้โปรดปราน
คำแนะนำการเก็งกำไรที่มีจุดอ่อนของการพึ่งพาอาศัยกันมากขึ้น เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปิดใช้งานการตั้งเวลา เช่น with -fschedule-insns or -fschedule-insns2 หรือที่ -O2
หรือสูงกว่า

-fsched-rank-heuristic
เปิดใช้งานอันดับ heuristic ในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุนการสอน
เป็นของบล็อกพื้นฐานที่มีขนาดหรือความถี่มากกว่า เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปิดใช้งานการตั้งเวลา เช่น with -fschedule-insns or -fschedule-insns2 หรือที่ -O2
หรือสูงกว่า

-fsched-last-insn-heuristic
เปิดใช้งานฮิวริสติกของคำสั่งสุดท้ายในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุน
คำสั่งที่น้อยขึ้นอยู่กับคำสั่งสุดท้ายที่กำหนดไว้ เปิดใช้งานแล้ว
โดยค่าเริ่มต้นเมื่อเปิดใช้งานการตั้งเวลา เช่น กับ -fschedule-insns or -fschedule-insns2
หรือที่ -O2 หรือสูงกว่า

-fsched-dep-count-heuristic
เปิดใช้งานฮิวริสติกการนับแบบขึ้นต่อกันในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุน
คำแนะนำที่มีคำแนะนำเพิ่มเติมขึ้นอยู่กับมัน เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปิดใช้งานการตั้งเวลา เช่น with -fschedule-insns or -fschedule-insns2 หรือที่ -O2
หรือสูงกว่า

-freschedule-modulo-scheduled-ลูป
การจัดกำหนดการแบบโมดูโลดำเนินการก่อนการจัดกำหนดการแบบเดิม ถ้าลูปเป็นโมดูโล
กำหนดการ กำหนดการผ่านกำหนดการภายหลังอาจเปลี่ยนกำหนดการได้ ใช้ตัวเลือกนี้เพื่อ
ควบคุมพฤติกรรมนั้น

-fselective-scheduling
คำแนะนำกำหนดการโดยใช้อัลกอริธึมการจัดกำหนดการแบบเลือก เรียกใช้การจัดตารางเวลาที่เลือก
แทนที่จะผ่านกำหนดการแรก

-fselective-scheduling2
คำแนะนำกำหนดการโดยใช้อัลกอริธึมการจัดกำหนดการแบบเลือก เรียกใช้การจัดตารางเวลาที่เลือก
แทนที่จะผ่านกำหนดการที่สอง

-fsel-sched-pipeling
เปิดใช้งานการวางท่อซอฟต์แวร์ของลูปในสุดระหว่างการตั้งเวลาแบบเลือก นี้
ตัวเลือกไม่มีผลเว้นแต่หนึ่งใน -fselective-scheduling or -fselective-scheduling2
เปิดอยู่

-fsel-sched-pipelining-outer-loops
เมื่อไพพ์ไลน์วนซ้ำระหว่างการจัดกำหนดการแบบเลือก ไปป์ไลน์ยังวนรอบนอกไปป์ไลน์ด้วย นี้
ตัวเลือกไม่มีผลเว้นแต่ -fsel-sched-pipeling เปิดอยู่

-fsemantic-interposition
รูปแบบอ็อบเจ็กต์บางรูปแบบ เช่น ELF อนุญาตให้มีการเชื่อมโยงสัญลักษณ์โดยไดนามิกลิงก์เกอร์
ซึ่งหมายความว่าสำหรับสัญลักษณ์ที่ส่งออกจาก DSO คอมไพเลอร์ไม่สามารถดำเนินการได้
การขยายพันธุ์ระหว่างขั้นตอน การฝัง และการเพิ่มประสิทธิภาพอื่นๆ โดยคาดว่า
ฟังก์ชันหรือตัวแปรที่เป็นปัญหาอาจเปลี่ยนแปลงได้ แม้ว่าคุณลักษณะนี้จะมีประโยชน์ แต่สำหรับ
ตัวอย่าง เพื่อเขียนฟังก์ชันการจัดสรรหน่วยความจำใหม่โดยการปรับใช้การดีบัก มันคือ
ราคาแพงในแง่ของคุณภาพของโค้ด กับ -fno-semantic-interposition คอมไพเลอร์
ถือว่าถ้าอินเตอร์โพซิชั่นเกิดขึ้นสำหรับฟังก์ชัน ฟังก์ชันเขียนทับจะมี
ความหมายเดียวกันอย่างแม่นยำ (และผลข้างเคียง) ในทำนองเดียวกัน หากเกิดการสอดแทรกขึ้น
สำหรับตัวแปร ตัวสร้างของตัวแปรจะเหมือนกัน ธงไม่มี
เอฟเฟกต์สำหรับฟังก์ชันที่ประกาศไว้อย่างชัดเจนในบรรทัด (ซึ่งไม่อนุญาตสำหรับ
แทรกแซงเพื่อเปลี่ยนความหมาย) และสำหรับสัญลักษณ์ที่ประกาศอย่างชัดเจนว่าอ่อนแอ

-fshrink-wrap
ปล่อยฟังก์ชัน prologues ก่อนส่วนต่างๆ ของฟังก์ชันที่ต้องการเท่านั้น แทนที่จะเป็น at
ด้านบนของฟังก์ชัน แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-fcaller-บันทึก
เปิดใช้งานการจัดสรรค่าให้กับการลงทะเบียนที่ถูกปิดโดยการเรียกใช้ฟังก์ชันโดย
การส่งคำสั่งพิเศษเพื่อบันทึกและกู้คืนรีจิสเตอร์รอบการโทรดังกล่าว เช่น
การจัดสรรจะทำได้ก็ต่อเมื่อดูเหมือนว่าจะส่งผลให้โค้ดดีขึ้นเท่านั้น

ตัวเลือกนี้จะเปิดใช้งานตามค่าเริ่มต้นเสมอในเครื่องบางเครื่อง โดยปกติแล้วเครื่องที่มี
ไม่มีการลงทะเบียนที่สงวนไว้สำหรับการโทรเพื่อใช้แทน

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fombine-stack-adjustments
ติดตามการปรับสแต็ค (ดันและป๊อป) และการอ้างอิงหน่วยความจำสแต็กแล้วลอง
เพื่อหาวิธีรวมเข้าด้วยกัน

เปิดใช้งานโดยค่าเริ่มต้นที่ -O1 และสูงกว่า

-fipa-ra
ใช้ผู้โทรบันทึกการลงทะเบียนเพื่อจัดสรรหากการลงทะเบียนเหล่านั้นไม่ได้ถูกใช้โดยผู้เรียก
การทำงาน. ในกรณีนั้น ไม่จำเป็นต้องบันทึกและกู้คืนข้อมูลเหล่านั้นเมื่อโทร
สิ่งนี้เป็นไปได้ก็ต่อเมื่อฟังก์ชันที่เรียกเป็นส่วนหนึ่งของหน่วยการคอมไพล์เดียวกันกับ current
ฟังก์ชันและถูกคอมไพล์ไว้ก่อนแล้ว

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fconserve-stack
พยายามลดการใช้สแต็กให้เหลือน้อยที่สุด คอมไพเลอร์พยายามใช้พื้นที่สแต็กน้อยลง แม้กระทั่ง
ถ้านั่นทำให้โปรแกรมช้าลง ตัวเลือกนี้หมายถึงการตั้งค่า ใหญ่-stack-frame
พารามิเตอร์เป็น 100 และ the ใหญ่-stack-กรอบ-เติบโต พารามิเตอร์เป็น 400

-ftree-reassoc
ทำการ reassociation บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-pre
ดำเนินการกำจัดความซ้ำซ้อนบางส่วน (PRE) บนต้นไม้ แฟล็กนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O2 และ -O3.

-ftree-บางส่วน-pre
ทำให้การกำจัดความซ้ำซ้อนบางส่วน (PRE) รุนแรงขึ้น แฟล็กนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O3.

-ftree-forwprop
ดำเนินการขยายพันธุ์ไปข้างหน้าบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า

-ฟรีฟรี
ดำเนินการกำจัดซ้ำซ้อนเต็มรูปแบบ (FRE) บนต้นไม้ ความแตกต่างระหว่าง FRE และ
PRE คือ FRE พิจารณาเฉพาะนิพจน์ที่คำนวณในทุกเส้นทางที่นำไปสู่
การคำนวณซ้ำซ้อน การวิเคราะห์นี้เร็วกว่า PRE แม้ว่าจะเปิดเผยน้อยกว่า
ความซ้ำซ้อน แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-phiprop
ดำเนินการยกของจากตัวชี้แบบมีเงื่อนไขบนต้นไม้ บัตรนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า

-fhoist-adjacent-loads
รอกยกน้ำหนักจากทั้งสองกิ่งของ if-then-else ถ้าโหลดมาจาก
ตำแหน่งที่อยู่ติดกันในโครงสร้างเดียวกันและสถาปัตยกรรมเป้าหมายมีเงื่อนไข
ย้ายคำสั่ง แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และสูงกว่า

-ftree-คัดลอก-prop
ดำเนินการคัดลอกการขยายพันธุ์บนต้นไม้ บัตรผ่านนี้ช่วยขจัดการดำเนินการคัดลอกที่ไม่จำเป็น
แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-fipa-บริสุทธิ์-const
ค้นพบว่าฟังก์ชันใดบริสุทธิ์หรือคงที่ เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-fipa-reference
ค้นหาว่าตัวแปรสแตติกใดไม่หนีหน่วยการคอมไพล์ เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า

-fipa-pta
ทำการวิเคราะห์ตัวชี้ระหว่างขั้นตอนและการปรับเปลี่ยนระหว่างขั้นตอนและ
การวิเคราะห์อ้างอิง ตัวเลือกนี้อาจทำให้หน่วยความจำและเวลาคอมไพล์มากเกินไปบน
หน่วยรวบรวมขนาดใหญ่ ไม่ได้เปิดใช้งานตามค่าเริ่มต้นที่ระดับการเพิ่มประสิทธิภาพใดๆ

-fipa-profile
ดำเนินการเผยแพร่โปรไฟล์ระหว่างขั้นตอน เรียกฟังก์ชันจากความเย็นเท่านั้น
ฟังก์ชั่นถูกทำเครื่องหมายว่าเย็น ยังทำงานเพียงครั้งเดียว (เช่น "เย็น"
"noreturn" ตัวสร้างคงที่หรือตัวทำลาย) ถูกระบุ ฟังก์ชั่นเย็นและ
วนรอบการทำงานของฟังก์ชั่นน้อยลงเมื่อถูกปรับให้เหมาะสมสำหรับขนาด เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า

-fipa-cp
ดำเนินการขยายพันธุ์คงที่ระหว่างขั้นตอน การเพิ่มประสิทธิภาพนี้จะวิเคราะห์โปรแกรม
เพื่อกำหนดว่าเมื่อใดที่ค่าที่ส่งผ่านไปยังฟังก์ชันเป็นค่าคงที่แล้วจึงปรับให้เหมาะสม
ตามนั้น การเพิ่มประสิทธิภาพนี้สามารถเพิ่มประสิทธิภาพได้อย่างมากหาก
แอปพลิเคชันมีค่าคงที่ส่งผ่านไปยังฟังก์ชัน แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่
-O2, -Os และ -O3.

-fipa-cp-โคลน
ทำการโคลนฟังก์ชันเพื่อทำให้การขยายพันธุ์คงที่ระหว่างขั้นตอนแข็งแกร่งขึ้น เมื่อไหร่
เปิดใช้งานการแพร่กระจายคงที่ระหว่างขั้นตอนดำเนินการโคลนฟังก์ชันเมื่อ
ฟังก์ชันที่มองเห็นได้จากภายนอกสามารถเรียกได้ด้วยอาร์กิวเมนต์คงที่ เพราะสิ่งนี้
การเพิ่มประสิทธิภาพสามารถสร้างสำเนาของฟังก์ชันได้หลายชุด ซึ่งอาจเพิ่มขึ้นอย่างมาก
ขนาดรหัส (ดู --param ipcp-unit-growth=ความคุ้มค่า). แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่
-O3.

-fipa-cp-การจัดตำแหน่ง
เมื่อเปิดใช้งาน การเพิ่มประสิทธิภาพนี้จะเผยแพร่การจัดตำแหน่งของพารามิเตอร์ฟังก์ชันเพื่อรองรับ
vectorization และการดำเนินการสตริงที่ดีขึ้น

แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และ -Os. มันต้อง -fipa-cp เปิดใช้งาน.

-fipa-icf
ดำเนินการพับโค้ดที่เหมือนกันสำหรับฟังก์ชันและตัวแปรแบบอ่านอย่างเดียว NS
การเพิ่มประสิทธิภาพลดขนาดโค้ดและอาจรบกวนการคลายสแต็กโดยแทนที่ฟังก์ชัน
โดยเทียบเท่ากับชื่ออื่น การเพิ่มประสิทธิภาพทำงานได้อย่างมีประสิทธิภาพมากขึ้นด้วย
เปิดใช้งานการเพิ่มประสิทธิภาพเวลาลิงก์

อย่างไรก็ตาม ลักษณะการทำงานคล้ายกับการเพิ่มประสิทธิภาพ Gold Linker ICF, GCC ICF ทำงานบน
ระดับที่แตกต่างกันและการเพิ่มประสิทธิภาพไม่เหมือนกัน - มีความเท่าเทียมกันที่
หาได้จาก GCC เท่านั้น และหาได้เฉพาะใน Gold เท่านั้น

แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และ -Os.

-fisolate-erroneous-paths-dereference
ตรวจจับพาธที่ทริกเกอร์การทำงานที่ผิดพลาดหรือไม่ได้กำหนดเนื่องจากการ dereference ค่า null
ตัวชี้ แยกเส้นทางเหล่านั้นออกจากโฟลว์การควบคุมหลักและเปลี่ยนคำสั่งด้วย
พฤติกรรมที่ผิดพลาดหรือไม่ได้กำหนดเป็นกับดัก แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O2
และสูงกว่า

-fisolate-erroneous-paths-attribute
ตรวจจับเส้นทางที่ทำให้เกิดการทำงานที่ผิดพลาดหรือไม่ได้กำหนดเนื่องจากมีการใช้ค่าว่าง
ในทางที่ต้องห้ามโดยแอตทริบิวต์ "returns_nonnull" หรือ "nonnull" แยกเส้นทางเหล่านั้นออก
จากกระแสการควบคุมหลักและเปลี่ยนคำสั่งด้วยพฤติกรรมที่ผิดพลาดหรือไม่ได้กำหนด
เข้าไปในกับดัก ไม่ได้เปิดใช้งานอยู่ในขณะนี้ แต่อาจเปิดใช้งานโดย -O2 ในอนาคต

-ftree-อ่างล้างจาน
ทำการเคลื่อนที่ไปข้างหน้าของร้านค้าบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า

-ftree-บิต-ccp
ดำเนินการขยายพันธุ์คงที่แบบมีเงื่อนไขบิตแบบเบาบางบนต้นไม้และกระจายตัวชี้
ข้อมูลการจัดตำแหน่ง บัตรผ่านนี้ใช้ได้เฉพาะกับตัวแปรสเกลาร์ท้องถิ่นและ is
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า มันต้อง -ftree-ccp เปิดใช้งาน.

-ftree-ccp
ดำเนินการขยายพันธุ์แบบมีเงื่อนไขแบบเบาบาง (CCP) บนต้นไม้ ผ่านนี้เท่านั้น
ทำงานบนตัวแปรสเกลาร์ท้องถิ่นและเปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-fssa-phiopt
ดำเนินการจับคู่รูปแบบบนโหนด SSA PHI เพื่อปรับโค้ดตามเงื่อนไขให้เหมาะสม บัตรผ่านนี้คือ
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-switch-conversion
ดำเนินการแปลงการกำหนดค่าเริ่มต้นอย่างง่ายโดยสลับเป็นการกำหนดค่าเริ่มต้นจากa
อาร์เรย์สเกลาร์ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และสูงกว่า

-ftree-tail-ผสาน
มองหาลำดับรหัสที่เหมือนกัน เมื่อพบแล้ว ให้แทนที่อันหนึ่งด้วยการข้ามไปยังอีกอันหนึ่ง
การเพิ่มประสิทธิภาพนี้เรียกว่าการรวมหางหรือการกระโดดข้าม แฟล็กนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O2 และสูงกว่า เวลารวบรวมในบัตรผ่านนี้สามารถ จำกัด ได้โดยใช้
max-tail-merge-comparisons พารามิเตอร์และ max-tail-merge-iterations พารามิเตอร์.

-ftree-dce
ดำเนินการกำจัดรหัสที่ตายแล้ว (DCE) บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O
และสูงกว่า

-ftree-builtin-call-dce
ดำเนินการตามเงื่อนไข dead code elimination (DCE) สำหรับการเรียกใช้ฟังก์ชันในตัวที่
อาจตั้งค่า "errno" แต่อย่างอื่นไม่มีผลข้างเคียง แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้น
at -O2 และสูงกว่า if -Os ไม่ได้ระบุไว้ด้วย

-ftree-dominator-opts
ดำเนินการล้างสเกลาร์อย่างง่ายที่หลากหลาย (การแพร่กระจายแบบคงที่/การคัดลอก ความซ้ำซ้อน
การกำจัด การขยายพันธุ์ช่วง และการลดความซับซ้อนของนิพจน์) ขึ้นอยู่กับผู้ครอบงำ
การข้ามต้นไม้ นอกจากนี้ยังดำเนินการกระโดดเกลียว (เพื่อลดการข้ามไปยังการกระโดด) นี้
แฟล็กถูกเปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-dse
ดำเนินการกำจัดซากร้าน (DSE) บนต้นไม้ ร้านค้าที่ตายแล้วคือร้านค้าในความทรงจำ
ตำแหน่งที่ต่อมาถูกเขียนทับโดยร้านค้าอื่นโดยไม่มีการโหลดใด ๆ แทรกแซง ใน
กรณีนี้ร้านค้าก่อนหน้านี้สามารถลบได้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า

-ftree-ch
ทำการคัดลอกส่วนหัวของลูปบนต้นไม้ สิ่งนี้มีประโยชน์เพราะมันเพิ่มขึ้น
ประสิทธิภาพของการเพิ่มประสิทธิภาพการเคลื่อนไหวของโค้ด นอกจากนี้ยังช่วยประหยัดหนึ่งกระโดด ธงนี้คือ
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า ไม่ได้เปิดใช้งานสำหรับ -Osเพราะมันมักจะ
เพิ่มขนาดรหัส

-ftree-loop-optimize
ทำการเพิ่มประสิทธิภาพลูปบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า

-ftree-loop-linear
ดำเนินการแปลงการแลกเปลี่ยนแบบวนซ้ำบนต้นไม้ เหมือนกับ -floop-แลกเปลี่ยน. ใช้
การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --with-isl เพื่อเปิดใช้งาน
โครงสร้างพื้นฐานการแปลงวงกราไฟท์

-floop-แลกเปลี่ยน
ดำเนินการแปลงการแลกเปลี่ยนแบบวนซ้ำบนลูป สลับสองลูปซ้อนกัน
สลับลูปด้านในและด้านนอก ตัวอย่างเช่นกำหนดลูปเช่น:

DO J = 1, M
ฉัน = 1, N
A(J,I) = A(J,I) * C
ENDDO
ENDDO

การแลกเปลี่ยนแบบวนซ้ำแปลงลูปราวกับว่ามันถูกเขียน:

ฉัน = 1, N
DO J = 1, M
A(J,I) = A(J,I) * C
ENDDO
ENDDO

ซึ่งจะเป็นประโยชน์เมื่อ "N" มีขนาดใหญ่กว่าแคช เพราะใน Fortran ตัว
องค์ประกอบของอาร์เรย์จะถูกเก็บไว้ในหน่วยความจำแบบต่อเนื่องกันโดยคอลัมน์และต้นฉบับ
วนซ้ำในแถวซึ่งอาจทำให้แคชพลาดในการเข้าถึงแต่ละครั้ง นี้
การเพิ่มประสิทธิภาพใช้ได้กับทุกภาษาที่รองรับโดย GCC และไม่จำกัดเฉพาะ
ฟอร์ทราน. หากต้องการใช้การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --with-isl ไปยัง
เปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์

-floop-สตริป-เหมือง
ทำการแปลงการทำเหมืองแบบวนซ้ำบนลูป การขุดแบบ Strip แยกลูปเป็น
สองลูปซ้อนกัน วงนอกมีความก้าวหน้าเท่ากับขนาดสตริปและวงใน
วงมีความก้าวหน้าของวงเดิมภายในแถบ สามารถเปลี่ยนความยาวของแถบได้
โดยใช้โปรแกรม loop-block-tile-size พารามิเตอร์. ตัวอย่างเช่นกำหนดลูปเช่น:

ฉัน = 1, N
A(I) = A(I) + C
ENDDO

การทำเหมืองแบบวงรอบจะแปลงการวนซ้ำราวกับว่ามันถูกเขียนไว้ว่า:

DO II = 1, N, 51
DO I = II, นาที (II + 50, N)
A(I) = A(I) + C
ENDDO
ENDDO

การเพิ่มประสิทธิภาพนี้ใช้กับทุกภาษาที่รองรับโดย GCC และไม่จำกัดเฉพาะ
ฟอร์ทราน. หากต้องการใช้การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --with-isl ไปยัง
เปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์

-floop-block
ดำเนินการแปลงการบล็อกแบบวนซ้ำบนลูป การปิดกั้นแถบทุ่นระเบิดแต่ละวงใน
ลูปรังเพื่อให้หน่วยความจำเข้าถึงลูปองค์ประกอบพอดีภายในแคช NS
ความยาวแถบสามารถเปลี่ยนแปลงได้โดยใช้ปุ่ม loop-block-tile-size พารามิเตอร์. ตัวอย่างเช่น,
ให้ลูปเช่น:

ฉัน = 1, N
DO J = 1, M
A(J,I) = B(I) + C(J)
ENDDO
ENDDO

การบล็อกการวนซ้ำจะเปลี่ยนการวนซ้ำราวกับว่ามันถูกเขียนขึ้น:

DO II = 1, N, 51
DO JJ = 1, M, 51
DO I = II, นาที (II + 50, N)
DO J = JJ, มิน (JJ + 50, M)
A(J,I) = B(I) + C(J)
ENDDO
ENDDO
ENDDO
ENDDO

ซึ่งจะเป็นประโยชน์เมื่อ "M" มีขนาดใหญ่กว่าแคชเพราะวงในสุด
วนซ้ำข้อมูลจำนวนน้อยกว่าซึ่งสามารถเก็บไว้ในแคชได้ นี้
การเพิ่มประสิทธิภาพใช้ได้กับทุกภาษาที่รองรับโดย GCC และไม่จำกัดเฉพาะ
ฟอร์ทราน. หากต้องการใช้การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --with-isl ไปยัง
เปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์

-fgraphite-identity
เปิดใช้งานการแปลงข้อมูลประจำตัวสำหรับกราไฟท์ สำหรับทุก SCoP เราสร้าง
การแสดง polyhedral และแปลงกลับเป็น gimple โดยใช้ -fgraphite-identity
เราสามารถตรวจสอบต้นทุนหรือประโยชน์ของการแปลง GIMPLE -> GRAPHITE -> GIMPLE ได้
การปรับให้เหมาะสมขั้นต่ำบางอย่างยังดำเนินการโดยตัวสร้างโค้ด ISL เช่น index
การแยกและกำจัดรหัสตายในลูป

-floop-nest-optimize
เปิดใช้งานตัวเพิ่มประสิทธิภาพการซ้อนลูปตาม ISL นี่คือเครื่องมือเพิ่มประสิทธิภาพการรังแบบวนซ้ำทั่วไปตาม
เกี่ยวกับอัลกอริธึมการปรับให้เหมาะสมของดาวพลูโต มันคำนวณโครงสร้างลูปที่ปรับให้เหมาะสมสำหรับ
ข้อมูลท้องถิ่นและความเท่าเทียมกัน ตัวเลือกนี้เป็นแบบทดลอง

-floop-unroll-and-jam
เปิดใช้งานการคลายและติดขัดสำหรับเครื่องมือเพิ่มประสิทธิภาพการซ้อนลูปแบบอิง ISL ปัจจัยการคลายสามารถ
เปลี่ยนโดยใช้ loop-unroll-jam-size พารามิเตอร์. มิติที่คลี่ออก (นับ
จากด้านในสุด) สามารถเปลี่ยนแปลงได้โดยใช้ปุ่ม loop-unroll-jam-ความลึก พารามิเตอร์.
.

-flop-parallelize-ทั้งหมด
ใช้การวิเคราะห์การพึ่งพาข้อมูลกราไฟท์เพื่อระบุลูปที่สามารถขนานกันได้
ขนานลูปทั้งหมดที่สามารถวิเคราะห์ได้เพื่อไม่ให้มีการพึ่งพาแบบวนซ้ำ
โดยไม่ต้องตรวจสอบว่าการขนานลูปนั้นทำกำไรได้

-fcheck-data-deps
เปรียบเทียบผลลัพธ์ของตัววิเคราะห์การพึ่งพาข้อมูลหลายตัว ตัวเลือกนี้ใช้สำหรับ
การดีบักตัววิเคราะห์การพึ่งพาข้อมูล

-ftree-loop-if-convert
พยายามเปลี่ยนเงื่อนไขกระโดดในวงในสุดเป็นสาขาน้อย
เทียบเท่า จุดประสงค์คือการเอาการควบคุมการไหลออกจากวงในสุดตามลำดับ
เพื่อปรับปรุงความสามารถในการส่งเวคเตอร์เพื่อจัดการกับลูปเหล่านี้ นี่คือ
เปิดใช้งานโดยค่าเริ่มต้นหากเปิดใช้งาน vectorization

-ftree-loop-if-convert-stores
พยายามแปลงการข้ามแบบมีเงื่อนไขที่มีการเขียนหน่วยความจำด้วย นี้
การแปลงอาจไม่ปลอดภัยสำหรับโปรแกรมแบบมัลติเธรดเนื่องจากแปลงแบบมีเงื่อนไข
หน่วยความจำเขียนลงในหน่วยความจำที่ไม่มีเงื่อนไขเขียน ตัวอย่างเช่น,

สำหรับ (i = 0; i < N; i++)
ถ้า (เงื่อนไข)
A[i] = expr;

ถูกแปลงเป็น

สำหรับ (i = 0; i < N; i++)
A[i] = เงื่อนไข ? expr : A[i];

อาจทำให้เกิดการแข่งขันข้อมูล

-ftree-loop-distribution
ดำเนินการกระจายลูป แฟล็กนี้สามารถปรับปรุงประสิทธิภาพแคชบนเนื้อหาลูปขนาดใหญ่ได้
และอนุญาตให้ใช้การเพิ่มประสิทธิภาพลูปเพิ่มเติม เช่น การทำให้ขนานหรือเวกเตอร์
สถานที่. ตัวอย่างเช่น วง

ฉัน = 1, N
A(I) = B(I) + C
D(I) = E(I) * F
ENDDO

ถูกแปลงเป็น

ฉัน = 1, N
A(I) = B(I) + C
ENDDO
ฉัน = 1, N
D(I) = E(I) * F
ENDDO

-ftree-loop-distribute-patterns
ดำเนินการกระจายลูปของรูปแบบที่สามารถสร้างโค้ดด้วยการเรียก a
ห้องสมุด. แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O3.

บัตรผ่านนี้แจกจ่ายลูปการเริ่มต้นและสร้างการเรียกไปที่ memset zero
ตัวอย่างเช่น วง

ฉัน = 1, N
A(I) = 0
B(I) = A(I) + ฉัน
ENDDO

ถูกแปลงเป็น

ฉัน = 1, N
A(I) = 0
ENDDO
ฉัน = 1, N
B(I) = A(I) + ฉัน
ENDDO

และลูปการเริ่มต้นจะถูกแปลงเป็นการเรียก memset zero

-ftree-loop-im
ทำการเคลื่อนที่แบบวนซ้ำบนต้นไม้ ใบนี้เคลื่อนที่เฉพาะค่าคงที่ที่ยาก
เพื่อจัดการที่ระดับ RTL (การเรียกใช้ฟังก์ชัน การดำเนินการที่ขยายเป็นลำดับที่ไม่ซับซ้อน
ของ insns) กับ -funswitch-ลูป มันยังเคลื่อนตัวถูกดำเนินการของเงื่อนไขที่
ค่าคงที่นอกลูป เพื่อให้เราสามารถใช้การวิเคราะห์ค่าคงที่เล็กน้อยใน
ยกเลิกการสลับลูป บัตรผ่านยังรวมถึงการเคลื่อนไหวของร้านค้า

-ftree-loop-ivcanon
สร้างตัวนับมาตรฐานสำหรับจำนวนการวนซ้ำในลูปที่กำหนด
จำนวนการทำซ้ำต้องใช้การวิเคราะห์ที่ซับซ้อน การเพิ่มประสิทธิภาพในภายหลังอาจ
กำหนดจำนวนได้อย่างง่ายดาย มีประโยชน์อย่างยิ่งในการคลี่คลาย

-fivopts
ทำการเพิ่มประสิทธิภาพตัวแปรการเหนี่ยวนำ (การลดกำลัง, ตัวแปรการเหนี่ยวนำ
การรวมและการกำจัดตัวแปรเหนี่ยวนำ) บนต้นไม้

-ftree-parallelize-ลูป=n
Parallelize loops กล่าวคือ แบ่งพื้นที่การวนซ้ำเพื่อรันใน n เธรด นี่คือ
เป็นไปได้เฉพาะสำหรับลูปที่มีการวนซ้ำอิสระและสามารถกำหนดได้เอง
เรียงลำดับใหม่ การปรับให้เหมาะสมนั้นให้ผลกำไรบนเครื่องมัลติโปรเซสเซอร์เท่านั้น สำหรับลูป
ที่ใช้ CPU มาก แทนที่จะจำกัด เช่น โดยแบนด์วิดท์หน่วยความจำ ตัวเลือกนี้
หมายถึง -pthreadและดังนั้นจึงรองรับเฉพาะเป้าหมายที่รองรับ
-pthread.

-ftree-pta
ดำเนินการวิเคราะห์แบบจุดต่อฟังก์ชันในพื้นที่บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้น
at -O และสูงกว่า

-ftree-sra
ดำเนินการแทนที่สเกลาร์ของมวลรวม บัตรผ่านนี้แทนที่การอ้างอิงโครงสร้าง
ด้วยสเกลาร์เพื่อป้องกันการสร้างโครงสร้างหน่วยความจำเร็วเกินไป ธงนี้คือ
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-copyrename
ทำการคัดลอกการเปลี่ยนชื่อบนต้นไม้ รหัสผ่านนี้พยายามเปลี่ยนชื่อคอมไพเลอร์ชั่วคราวเป็น
ตัวแปรอื่น ๆ ที่ตำแหน่งคัดลอก มักจะทำให้เกิดชื่อตัวแปรซึ่ง more
ใกล้เคียงกับตัวแปรเดิมอย่างใกล้ชิด แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า

-ftree-coalesce-inlined-vars
บอกสำเนาชื่อผ่าน (ดู -ftree-copyrename) เพื่อพยายามรวมผู้ใช้รายเล็ก-
ตัวแปรที่กำหนดไว้เช่นกัน แต่ถ้าพวกมันถูกฝังอยู่ในฟังก์ชันอื่น มันคือ
รูปแบบที่จำกัดมากขึ้นของ -ftree-coalesce-vars. ซึ่งอาจเป็นอันตรายต่อข้อมูลการดีบักของข้อมูลดังกล่าว
ตัวแปร inline แต่เก็บตัวแปรของ inline-into function แยกจากกัน
อื่น ๆ เพื่อให้มีแนวโน้มที่จะมีค่าที่คาดหวังในการดีบัก
เซสชั่น

-ftree-coalesce-vars
บอกสำเนาชื่อผ่าน (ดู -ftree-copyrename) เพื่อพยายามรวมผู้ใช้รายเล็ก-
กำหนดตัวแปรด้วย แทนที่จะเป็นเพียงคอมไพเลอร์ชั่วคราว สิ่งนี้อาจ จำกัด อย่างรุนแรง
ความสามารถในการดีบักโปรแกรมที่ได้รับการเพิ่มประสิทธิภาพที่คอมไพล์ด้วย -fno-var-tracking-assignments.
ในรูปแบบไร้ผล แฟล็กนี้ป้องกันการรวม SSA ของตัวแปรผู้ใช้ ซึ่งรวมถึง
แบบอินไลน์ ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้น

-ftree-ter
ดำเนินการเปลี่ยนนิพจน์ชั่วคราวระหว่าง SSA->เฟสปกติ เดี่ยว
use/single def temporaries จะถูกแทนที่ ณ สถานที่ใช้งานด้วยการกำหนด
การแสดงออก. สิ่งนี้ส่งผลให้โค้ดที่ไม่ใช่ GIMPLE แต่ให้ตัวขยายมากขึ้น
ต้นไม้ที่ซับซ้อนในการทำงานส่งผลให้มีการสร้าง RTL ที่ดีขึ้น เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-slsr
ดำเนินการลดกำลังเส้นตรงบนต้นไม้ สิ่งนี้รับรู้ที่เกี่ยวข้อง
นิพจน์ที่เกี่ยวข้องกับการคูณและแทนที่ด้วยการคำนวณที่มีราคาไม่แพง
เมื่อเป็นไปได้. สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-vectorize
ทำ vectorization บนต้นไม้ แฟล็กนี้เปิดใช้งาน -ftree-loop-vectorize และ
-ftree-slp-vectorize หากไม่ระบุให้ชัดเจน

-ftree-loop-vectorize
ทำการวนซ้ำเวกเตอร์บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O3 และเมื่อ
-ftree-vectorize เปิดใช้งาน.

-ftree-slp-vectorize
ทำการบล็อกเวกเตอร์พื้นฐานบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O3 และ
เมื่อ -ftree-vectorize เปิดใช้งาน.

-fvect-cost-model=แบบ
เปลี่ยนโมเดลต้นทุนที่ใช้สำหรับ vectorization NS แบบ อาร์กิวเมนต์ควรเป็นหนึ่งใน
ไม่ จำกัด, พลวัต or ถูก. กับ ไม่ จำกัด จำลองเส้นทางรหัสเวกเตอร์คือ
ถือว่ามีกำไรในขณะที่ พลวัต จำลองการตรวจสอบรันไทม์ของ
vectorized code-path เพื่อเปิดใช้งานเฉพาะสำหรับการนับการวนซ้ำที่น่าจะดำเนินการ
เร็วกว่าเมื่อดำเนินการวนรอบสเกลาร์เดิม NS ถูก โมเดลปิดการใช้งาน
vectorization ของลูปซึ่งการทำเช่นนี้จะเป็นการห้ามค่าใช้จ่ายเช่นเนื่องจาก
ต้องตรวจสอบรันไทม์สำหรับการพึ่งพาข้อมูลหรือการจัดตำแหน่ง แต่มิฉะนั้นจะเท่ากับ
พลวัต แบบอย่าง. โมเดลต้นทุนเริ่มต้นขึ้นอยู่กับแฟล็กการปรับให้เหมาะสมอื่น ๆ และ is
ทั้ง พลวัต or ถูก.

-fsimd-cost-model=แบบ
เปลี่ยนรูปแบบต้นทุนที่ใช้สำหรับ vectorization ของการวนซ้ำที่ทำเครื่องหมายด้วย OpenMP หรือ Cilk
พลัสคำสั่งซิม NS แบบ อาร์กิวเมนต์ควรเป็นหนึ่งใน ไม่ จำกัด, พลวัต, ถูก.
ค่าทั้งหมดของ แบบ มีความหมายเดียวกับที่อธิบายไว้ใน -fvect-ต้นทุน-รุ่น และโดย
เริ่มต้นแบบจำลองต้นทุนที่กำหนดด้วย -fvect-ต้นทุน-รุ่น ถูกนำมาใช้.

-ftree-vrp
ดำเนินการขยายพันธุ์ช่วงค่าบนต้นไม้ ซึ่งคล้ายกับการขยายพันธุ์แบบคงที่
ผ่าน แต่แทนที่จะเป็นค่า ช่วงของค่าจะถูกเผยแพร่ สิ่งนี้ทำให้
เครื่องมือเพิ่มประสิทธิภาพเพื่อลบการตรวจสอบช่วงที่ไม่จำเป็นเช่นการตรวจสอบขอบเขตอาร์เรย์และตัวชี้ค่าว่าง
ตรวจสอบ สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และสูงกว่า การกำจัดการตรวจสอบตัวชี้ Null
จะทำได้ก็ต่อเมื่อ -fdelete-null-pointer-checks เปิดใช้งาน.

-fsplit-ivs-in-unroller
เปิดใช้งานการแสดงค่าของตัวแปรการเหนี่ยวนำในการทำซ้ำในภายหลังของ
คลี่คลายลูปโดยใช้ค่าในการวนซ้ำครั้งแรก สิ่งนี้ทำลายการพึ่งพาระยะยาว
โซ่ จึงช่วยปรับปรุงประสิทธิภาพของการผ่านกำหนดการ

การรวมกันของ -fweb และ CSE มักจะเพียงพอที่จะได้รับผลเช่นเดียวกัน
อย่างไรก็ตาม นั่นไม่น่าเชื่อถือในกรณีที่ตัวลูปซับซ้อนกว่า a
บล็อกพื้นฐานเดียว นอกจากนี้ยังใช้งานไม่ได้กับสถาปัตยกรรมบางอย่างเนื่องจาก
ข้อจำกัดในการผ่าน CSE

การเพิ่มประสิทธิภาพนี้เปิดใช้งานโดยค่าเริ่มต้น

-fvariable-expansion-in-unroller
ด้วยตัวเลือกนี้ คอมไพเลอร์จะสร้างสำเนาของตัวแปรโลคัลหลายชุดเมื่อ
คลายลูปซึ่งอาจส่งผลให้โค้ดที่เหนือกว่า

-fpartial-inlining
ส่วนอินไลน์ของฟังก์ชัน ตัวเลือกนี้มีผลใดๆ ต่อเมื่ออินไลน์ตัวเองคือ
เปิดโดย -finline-ฟังก์ชั่น or -finline-small-functions ตัวเลือก

เปิดใช้งานที่ระดับ -O2.

-fpredictive-ทั่วไป
ดำเนินการปรับให้เหมาะสมเชิงคาดการณ์ล่วงหน้า กล่าวคือ นำการคำนวณกลับมาใช้ใหม่ (โดยเฉพาะ
โหลดและจัดเก็บหน่วยความจำ) ดำเนินการในการวนซ้ำก่อนหน้า

ตัวเลือกนี้เปิดใช้งานที่ระดับ -O3.

-fprefetch-ลูปอาร์เรย์
หากเครื่องเป้าหมายรองรับ ให้สร้างคำแนะนำเพื่อดึงหน่วยความจำล่วงหน้าไปที่
ปรับปรุงประสิทธิภาพของลูปที่เข้าถึงอาร์เรย์ขนาดใหญ่

ตัวเลือกนี้อาจสร้างโค้ดที่ดีขึ้นหรือแย่ลง ผลลัพธ์ขึ้นอยู่กับ
โครงสร้างของลูปภายในซอร์สโค้ด

พิการในระดับ -Os.

-fno-ช่องมอง
-fno-ช่องมอง2
ปิดใช้งานการเพิ่มประสิทธิภาพช่องมองเฉพาะเครื่อง ความแตกต่างระหว่าง
-fno-ช่องมอง และ -fno-ช่องมอง2 อยู่ในวิธีการดำเนินการในคอมไพเลอร์ บาง
เป้าหมายใช้อย่างใดอย่างหนึ่ง บางคนใช้อีกอัน บางคนใช้ทั้งสองอย่าง

-ช่องมอง ถูกเปิดใช้งานโดยค่าเริ่มต้น -fpeephole2 เปิดใช้งานในระดับ -O2, -O3, -Os.

-fno-เดา-สาขา-ความน่าจะเป็น
อย่าเดาความน่าจะเป็นของสาขาโดยใช้การวิเคราะห์พฤติกรรม

GCC ใช้ฮิวริสติกเพื่อเดาความน่าจะเป็นของสาขาหากไม่ได้มาจาก
ข้อเสนอแนะโปรไฟล์ (-fprofile-arcs). ฮิวริสติกเหล่านี้อิงจากโฟลว์การควบคุม
กราฟ. หากความน่าจะเป็นของสาขาถูกระบุโดย "__builtin_expect" ดังนั้น
ฮิวริสติกใช้เพื่อเดาความน่าจะเป็นของสาขาสำหรับส่วนที่เหลือของโฟลว์การควบคุม
กราฟ โดยนำข้อมูล "__builtin_expect" มาพิจารณา ปฏิสัมพันธ์ระหว่าง
ฮิวริสติกและ "__builtin_expect" อาจซับซ้อน และในบางกรณีก็อาจมีประโยชน์
เพื่อปิดการใช้งานฮิวริสติกเพื่อให้เอฟเฟกต์ของ "__builtin_expect" ง่ายขึ้น
เข้าใจ.

ค่าเริ่มต้นคือ -fguess-สาขา-ความน่าจะเป็น ในระดับ -O, -O2, -O3, -Os.

-freeorder-บล็อก
จัดลำดับบล็อกพื้นฐานใหม่ในฟังก์ชันที่คอมไพล์เพื่อลดจำนวนที่รับ
สาขาและปรับปรุงรหัสท้องถิ่น

เปิดใช้งานในระดับ -O2, -O3.

-freeorder-blocks-and-partition
นอกเหนือจากการจัดลำดับบล็อกพื้นฐานใหม่ในฟังก์ชันที่คอมไพล์แล้ว เพื่อลด
จำนวนกิ่งที่รับ, แบ่งบล็อกพื้นฐานร้อนและเย็นออกเป็นส่วน ๆ
ของแอสเซมบลีและไฟล์ .o เพื่อปรับปรุงประสิทธิภาพของเพจและแคช

การเพิ่มประสิทธิภาพนี้จะปิดโดยอัตโนมัติเมื่อมีการจัดการข้อยกเว้น
สำหรับส่วน linkonce สำหรับฟังก์ชันที่มีแอตทริบิวต์ส่วนที่กำหนดโดยผู้ใช้และบนทุก
สถาปัตยกรรมที่ไม่สนับสนุนส่วนที่มีชื่อ

เปิดใช้งานสำหรับ x86 ที่ระดับ -O2, -O3.

-freeorder-ฟังก์ชั่น
จัดลำดับฟังก์ชันใหม่ในไฟล์อ็อบเจ็กต์เพื่อปรับปรุงตำแหน่งโค้ด นี่คือ
ดำเนินการโดยใช้ส่วนย่อยพิเศษ ".text.hot" สำหรับการดำเนินการบ่อยที่สุด
ฟังก์ชันและ ".text.unlikely" สำหรับฟังก์ชันที่ไม่น่าจะดำเนินการ จัดลำดับใหม่โดย
ตัวเชื่อมโยงดังนั้นรูปแบบไฟล์วัตถุต้องรองรับส่วนที่มีชื่อและตัวเชื่อมโยงต้องวาง
ของพวกเขาในทางที่สมเหตุสมผล

ต้องมีความคิดเห็นเกี่ยวกับโปรไฟล์ด้วยเพื่อให้ตัวเลือกนี้มีประสิทธิภาพ ดู
-fprofile-arcs เพื่อดูรายละเอียด

เปิดใช้งานในระดับ -O2, -O3, -Os.

-fstrict-นามแฝง
อนุญาตให้คอมไพเลอร์ใช้กฎนามแฝงที่เข้มงวดที่สุดที่ใช้กับภาษา
กำลังรวบรวม สำหรับ C (และ C++) การดำเนินการนี้จะเปิดใช้งานการปรับให้เหมาะสมตามประเภทของ
นิพจน์ โดยเฉพาะอย่างยิ่ง วัตถุประเภทหนึ่งจะถือว่าไม่อยู่ที่
ที่อยู่เดียวกันกับวัตถุประเภทอื่น เว้นแต่ประเภทจะใกล้เคียงกัน
ตัวอย่างเช่น "unsigned int" สามารถใช้นามแฝง "int" ได้ แต่ไม่ใช่ "void*" หรือ "double" NS
ประเภทอักขระอาจใช้นามแฝงประเภทอื่น ๆ

ให้ความสนใจเป็นพิเศษกับโค้ดดังนี้:

ยูเนี่ยน a_union {
int ฉัน;
ดับเบิล d;
};

int f() {
ยูเนี่ยน a_union t;
td = 3.0;
กลับ ti;
}

แนวปฏิบัติในการอ่านจากสมาชิกสหภาพที่แตกต่างจากสมาชิกล่าสุด
เขียนถึง (เรียกว่า "type-punning") เป็นเรื่องปกติ แม้กระทั่งกับ -fstrict-นามแฝง, พิมพ์-
อนุญาตให้ใช้การเล่นกลได้ หากหน่วยความจำสามารถเข้าถึงได้ผ่านประเภทยูเนี่ยน ดังนั้น
รหัสด้านบนใช้งานได้ตามที่คาดไว้ อย่างไรก็ตาม รหัสนี้อาจไม่:

int f() {
ยูเนี่ยน a_union t;
int* ip;
td = 3.0;
ip = &t.i;
ส่งคืน *ip;
}

ในทำนองเดียวกัน การเข้าถึงโดยใช้ที่อยู่ การส่งตัวชี้ผลลัพธ์และ
การพิจารณาผลลัพธ์มีพฤติกรรมที่ไม่ได้กำหนด แม้ว่านักแสดงจะใช้ประเภทสหภาพ
เช่น:

int f() {
สองเท่า d = 3.0;
ส่งคืน ((union a_union *) &d)->i;
}

พื้นที่ปลูก -fstrict-นามแฝง เปิดใช้งานตัวเลือกที่ระดับ -O2, -O3, -Os.

-fstrict-ล้น
อนุญาตให้คอมไพเลอร์ใช้กฎโอเวอร์โฟลว์ที่ลงนามอย่างเข้มงวด ขึ้นอยู่กับภาษา
กำลังรวบรวม สำหรับ C (และ C ++) หมายความว่าล้นเมื่อทำเลขคณิตด้วย
ไม่ได้กำหนดหมายเลขที่ลงนามซึ่งหมายความว่าคอมไพเลอร์อาจถือว่าไม่ได้
เกิดขึ้น. สิ่งนี้อนุญาตการเพิ่มประสิทธิภาพต่างๆ ตัวอย่างเช่น คอมไพเลอร์ถือว่า
นิพจน์เช่น "i + 10 > i" เป็นจริงเสมอสำหรับเครื่องหมาย "i" ข้อสันนิษฐานนี้คือ
ใช้ได้ก็ต่อเมื่อไม่มีการกำหนดโอเวอร์โฟลว์ที่ลงนามแล้ว เนื่องจากนิพจน์จะเป็นเท็จหาก "i + 10"
ล้นเมื่อใช้เลขคณิตเสริม twos เมื่อตัวเลือกนี้มีผลบังคับใช้ใดๆ
พยายามที่จะกำหนดว่าต้องเขียนการดำเนินการกับตัวเลขล้นที่ลงนามหรือไม่
อย่างระมัดระวังเพื่อไม่ให้เกิดการล้น

ตัวเลือกนี้ยังอนุญาตให้คอมไพเลอร์ใช้ความหมายของตัวชี้ที่เข้มงวด: กำหนด a
ตัวชี้ไปยังวัตถุ ถ้าการเพิ่มออฟเซ็ตให้กับตัวชี้นั้นไม่ได้สร้างตัวชี้ขึ้น
สำหรับวัตถุเดียวกัน การเพิ่มเติมไม่ได้กำหนดไว้ นี้อนุญาตให้คอมไพเลอร์เพื่อสรุป
ว่า "p + u > p" เป็นจริงเสมอสำหรับตัวชี้ "p" และจำนวนเต็ม "u" ที่ไม่มีเครื่องหมาย นี้
สมมติฐานใช้ได้เฉพาะเนื่องจากไม่มีการกำหนดพอยน์เตอร์รอบทิศทาง เนื่องจากนิพจน์ is
false ถ้า "p + u" ล้นโดยใช้เลขคณิตเสริมสองส่วน

ดูเพิ่มเติมที่ -fwrapv ตัวเลือก. โดยใช้ -fwrapv หมายความว่าจำนวนเต็มลงนามโอเวอร์โฟลว์ is
กำหนดไว้อย่างสมบูรณ์: มันห่อ เมื่อไหร่ -fwrapv ใช้แล้วไม่มีความแตกต่างระหว่าง
-fstrict-ล้น และ -fno-เข้มงวดล้น สำหรับจำนวนเต็ม กับ -fwrapv บางชนิด
อนุญาตให้ล้น ตัวอย่างเช่น ถ้าคอมไพเลอร์ได้รับโอเวอร์โฟลว์เมื่อทำ
เลขคณิตกับค่าคงที่ ค่าที่ล้นยังคงสามารถใช้ได้กับ -fwrapvแต่ไม่
มิฉะนั้น.

พื้นที่ปลูก -fstrict-ล้น เปิดใช้งานตัวเลือกที่ระดับ -O2, -O3, -Os.

-falign-ฟังก์ชั่น
-falign-functions=n
จัดตำแหน่งเริ่มต้นของฟังก์ชันให้ตรงกับกำลังสองถัดไปที่มากกว่า n, ข้ามขึ้นไป n
ไบต์ ตัวอย่างเช่น -falign-functions=32 จัดตำแหน่งฟังก์ชันให้เป็น 32-byte . ถัดไป
ขอบเขต แต่ -falign-functions=24 จัดแนวไปยังขอบเขต 32 ไบต์ถัดไปก็ต่อเมื่อสิ่งนี้
สามารถทำได้โดยข้าม 23 ไบต์หรือน้อยกว่า

-fno-align-ฟังก์ชั่น และ -falign-functions=1 มีค่าเท่ากันและหมายความว่าฟังก์ชัน
ไม่สอดคล้องกัน

แอสเซมเบลอร์บางตัวรองรับแฟล็กนี้เมื่อ n เป็นกำลังสอง ในกรณีนี้ก็คือ
ปัดเศษขึ้น

If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่อง

เปิดใช้งานในระดับ -O2, -O3.

-falign-labels
-falign-labels=n
จัดแนวเป้าหมายสาขาทั้งหมดให้อยู่ในขอบเขตอำนาจของสอง ข้ามขึ้นไป n ไบต์เช่น
-falign-ฟังก์ชั่น. ตัวเลือกนี้ทำให้โค้ดช้าลงได้ง่ายเพราะต้องแทรก
การดำเนินการจำลองเมื่อถึงเป้าหมายของสาขาในโฟลว์ปกติของโค้ด

-fno-align-labels และ -falign-labels=1 เทียบเท่าและหมายความว่าฉลากไม่
ชิด

If -falign-ลูป or -falign-กระโดด ใช้บังคับและมีค่ามากกว่าค่านี้ แล้ว
ใช้ค่าของพวกเขาแทน

If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่องซึ่งเป็นไปได้มาก
ที่จะ 1หมายความว่าไม่มีการจัดตำแหน่ง

เปิดใช้งานในระดับ -O2, -O3.

-falign-ลูป
-falign-ลูป=n
จัดแนวลูปให้อยู่ในขอบยกกำลังสอง ข้ามขึ้นไปที่ n ไบต์เช่น -falign-ฟังก์ชั่น.
หากมีการวนซ้ำหลายครั้ง สิ่งนี้จะชดเชยการดำเนินการของ dummy
การดำเนินงาน

-fno-align-ลูป และ -falign-ลูป=1 มีค่าเท่ากันและหมายความว่าลูปไม่ใช่
ชิด

If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่อง

เปิดใช้งานในระดับ -O2, -O3.

-falign-กระโดด
-falign-jumps=n
จัดแนวเป้าหมายสาขาให้อยู่ในขอบเขตกำลังสอง สำหรับเป้าหมายสาขาที่เป้าหมาย
สามารถเข้าถึงได้โดยการกระโดดข้ามขึ้นไปที่ n ไบต์เช่น -falign-ฟังก์ชั่น. ใน
ในกรณีนี้ ไม่จำเป็นต้องดำเนินการจำลอง

-fno-จัดตำแหน่งกระโดด และ -falign-jumps=1 มีค่าเท่ากันและหมายความว่าลูปไม่ใช่
ชิด

If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่อง

เปิดใช้งานในระดับ -O2, -O3.

-funit-at-a-time
ตัวเลือกนี้เหลือไว้ด้วยเหตุผลด้านความเข้ากันได้ -funit-at-a-time ไม่มีผลในขณะที่
-fno-unit-at-a-time หมายถึง -fno-toplevel-เรียงลำดับใหม่ และ -fno-section-สมอ.

เปิดใช้งานโดยค่าเริ่มต้น

-fno-toplevel-เรียงลำดับใหม่
อย่าจัดลำดับฟังก์ชันระดับบนสุด ตัวแปร และคำสั่ง "asm" ส่งออกใน
ลำดับเดียวกันกับที่ปรากฏในไฟล์อินพุต เมื่อใช้ตัวเลือกนี้
ตัวแปรสแตติกที่ไม่ได้อ้างอิงจะไม่ถูกลบออก ตัวเลือกนี้มีไว้เพื่อรองรับ
รหัสที่มีอยู่ซึ่งขึ้นอยู่กับการสั่งซื้อเฉพาะ สำหรับรหัสใหม่ ควรใช้
คุณลักษณะเมื่อเป็นไปได้

เปิดใช้งานที่ระดับ -O0. เมื่อปิดการใช้งานอย่างชัดแจ้งก็หมายความว่า -fno-section-สมอ,
ซึ่งเปิดใช้งานอย่างอื่นได้ที่ -O0 ในบางเป้าหมาย

-fweb
สร้างเว็บที่ใช้กันทั่วไปเพื่อวัตถุประสงค์ในการจัดสรรการลงทะเบียนและกำหนดแต่ละเว็บ
การลงทะเบียนหลอกส่วนบุคคล นี้จะช่วยให้การลงทะเบียนผ่านการจัดสรรดำเนินการบน
หลอกโดยตรง แต่ยังเสริมความแข็งแกร่งผ่านการเพิ่มประสิทธิภาพอื่น ๆ อีกหลายรายการเช่น CSE
เครื่องมือเพิ่มประสิทธิภาพลูปและตัวกำจัดโค้ดที่ตายแล้วเล็กน้อย อย่างไรก็ตามมันสามารถทำการดีบัก
เป็นไปไม่ได้ เนื่องจากตัวแปรไม่อยู่ใน "ทะเบียนบ้าน" อีกต่อไป

เปิดใช้งานโดยค่าเริ่มต้นด้วย -funroll-ลูป.

-fwhole-โปรแกรม
สมมติว่าหน่วยการคอมไพล์ปัจจุบันแสดงถึงโปรแกรมทั้งหมดที่กำลังคอมไพล์
ฟังก์ชันและตัวแปรสาธารณะทั้งหมด ยกเว้น "หลัก" และฟังก์ชันที่รวมโดย
แอตทริบิวต์ "externally_visible" กลายเป็นฟังก์ชันคงที่และได้รับการปรับให้เหมาะสม
เชิงรุกมากขึ้นโดยเครื่องมือเพิ่มประสิทธิภาพระหว่างขั้นตอน

ไม่ควรใช้ตัวเลือกนี้ร่วมกับ -flto. แทนที่จะพึ่งพาลิงเกอร์
ปลั๊กอินควรให้ข้อมูลที่ปลอดภัยและแม่นยำยิ่งขึ้น

-flto[=n]
ตัวเลือกนี้เรียกใช้ตัวเพิ่มประสิทธิภาพเวลาลิงก์มาตรฐาน เมื่อเรียกใช้ด้วยซอร์สโค้ด it
สร้าง 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 เป็นรายการพิเศษ
ส่วนเอลฟ์ภายใน foo.o และ bar.o. การเรียกครั้งสุดท้ายอ่าน GIMPLE bytecode
ราคาเริ่มต้นที่ foo.o และ bar.o, รวมสองไฟล์เป็นภาพภายในภาพเดียวและคอมไพล์
ผลลัพธ์ตามปกติ เนื่องจากทั้งสอง foo.o และ bar.o มารวมกันเป็นภาพเดียวนี้
ทำให้การวิเคราะห์ระหว่างขั้นตอนและการปรับให้เหมาะสมใน GCC ทำงานทั่วทั้ง
สองไฟล์ราวกับว่ามันเป็นไฟล์เดียว ซึ่งหมายความว่า ตัวอย่างเช่น ที่อินไลเนอร์คือ
สามารถอินไลน์ฟังก์ชั่นใน bar.o มาทำหน้าที่ใน foo.o และในทางกลับกัน.

อีกวิธี (ง่ายกว่า) ในการเปิดใช้งานการเพิ่มประสิทธิภาพเวลาลิงก์คือ:

gcc -o myprog -flto -O2 foo.c bar.c

ด้านบนสร้าง bytecode สำหรับ foo.c และ bar.c, หลอมรวมเป็นหนึ่งเดียว
การแสดง GIMPLE และเพิ่มประสิทธิภาพตามปกติในการผลิต myprog.

สิ่งสำคัญเพียงอย่างเดียวที่ต้องจำไว้คือการเปิดใช้งานการเพิ่มประสิทธิภาพเวลาลิงก์ของคุณ
จำเป็นต้องใช้ไดรเวอร์ GCC เพื่อดำเนินการลิงค์ขั้นตอน GCC จะดำเนินการโดยอัตโนมัติ
การเพิ่มประสิทธิภาพเวลาลิงก์ถ้าวัตถุใด ๆ ที่เกี่ยวข้องถูกคอมไพล์ด้วย -flto
ตัวเลือกบรรทัดคำสั่ง โดยทั่วไปคุณควรระบุตัวเลือกการเพิ่มประสิทธิภาพที่จะใช้
สำหรับการเพิ่มประสิทธิภาพเวลาลิงก์แม้ว่า GCC จะพยายามคาดเดาการเพิ่มประสิทธิภาพอย่างชาญฉลาด
ระดับที่จะใช้จากตัวเลือกที่ใช้ในเวลาคอมไพล์ถ้าคุณไม่ระบุที่ลิงค์-
เวลา. คุณสามารถแทนที่การตัดสินใจอัตโนมัติเพื่อเพิ่มประสิทธิภาพเวลาลิงก์ได้ที่
เชื่อมโยงเวลาโดยผ่าน -fno-lto ไปที่คำสั่งลิงค์

เพื่อให้การเพิ่มประสิทธิภาพโปรแกรมทั้งหมดมีประสิทธิภาพ จำเป็นต้องทำให้ทั้งโปรแกรมสมบูรณ์
สมมติฐานของโปรแกรม คอมไพเลอร์จำเป็นต้องรู้ว่าฟังก์ชันและตัวแปรใดบ้างที่สามารถเป็นได้
เข้าถึงได้โดยไลบรารีและรันไทม์ภายนอกหน่วยที่ปรับเวลาลิงก์ให้เหมาะสม เมื่อไหร่
สนับสนุนโดยตัวเชื่อมโยง, ปลั๊กอินตัวเชื่อมโยง (ดู -fuse-linker-plugin) ผ่าน
ข้อมูลไปยังคอมไพเลอร์เกี่ยวกับสัญลักษณ์ที่ใช้และที่มองเห็นได้จากภายนอก เมื่อ
ไม่มีปลั๊กอินตัวเชื่อมโยง -fwhole-โปรแกรม ควรใช้เพื่อให้คอมไพเลอร์
เพื่อสร้างสมมติฐานเหล่านี้ ซึ่งนำไปสู่การตัดสินใจเพิ่มประสิทธิภาพเชิงรุกมากขึ้น

เมื่อ -fuse-linker-plugin ไม่ได้เปิดใช้งานเมื่อคอมไพล์ไฟล์ด้วย -fltoที่
ไฟล์อ็อบเจ็กต์ที่สร้างขึ้นมีขนาดใหญ่กว่าไฟล์อ็อบเจ็กต์ปกติเนื่องจากมี GIMPLE
bytecodes และรหัสสุดท้ายปกติ (ดู -ffat-lto-วัตถุ. แปลว่า วัตถุ
ไฟล์ที่มีข้อมูล LTO สามารถเชื่อมโยงเป็นไฟล์อ็อบเจ็กต์ปกติ ถ้า -fno-lto ผ่านไป
กับตัวเชื่อมโยง ไม่มีการเพิ่มประสิทธิภาพระหว่างขั้นตอน โปรดทราบว่าเมื่อ
-fno-fat-lto-วัตถุ เปิดใช้งานคอมไพล์สเตจเร็วขึ้น แต่คุณไม่สามารถดำเนินการ a
ลิงก์ปกติที่ไม่ใช่ LTO กับพวกเขา

นอกจากนี้ แฟล็กการปรับให้เหมาะสมที่ใช้ในการคอมไพล์แต่ละไฟล์ไม่ใช่
จำเป็นต้องเกี่ยวข้องกับที่ใช้ในเวลาเชื่อมโยง ตัวอย่างเช่น

gcc -c -O0 -ffat-lto-objects -flto foo.c
gcc -c -O0 -ffat-lto-objects -flto bar.c
gcc -o myprog -O3 foo.o bar.o

สิ่งนี้สร้างไฟล์อ็อบเจ็กต์แต่ละรายการด้วยรหัสแอสเซมเบลอร์ที่ไม่ได้รับการปรับให้เหมาะสม แต่
ผลลัพธ์ไบนารี myprog ได้รับการปรับให้เหมาะสมที่ -O3. ถ้า แทน ไบนารีสุดท้ายคือ
สร้างด้วย -fno-ltoแล้ว myprog ไม่ได้รับการปรับให้เหมาะสม

เมื่อสร้างไบนารีสุดท้าย GCC จะใช้การเพิ่มประสิทธิภาพเวลาลิงก์กับสิ่งเหล่านั้นเท่านั้น
ไฟล์ที่มี bytecode ดังนั้น คุณสามารถผสมและจับคู่ไฟล์อ็อบเจ็กต์และ
ไลบรารีที่มี GIMPLE bytecodes และโค้ดอ็อบเจ็กต์สุดท้าย GCC เลือกโดยอัตโนมัติ
ไฟล์ใดที่จะปรับให้เหมาะสมในโหมด LTO และไฟล์ใดที่จะเชื่อมโยงโดยไม่ต้องเพิ่มเติม
การประมวลผล

มีการตั้งค่าสถานะการสร้างรหัสบางอย่างที่ GCC รักษาไว้เมื่อสร้าง bytecodes เช่น
ต้องใช้ในระหว่างขั้นตอนการเชื่อมโยงขั้นสุดท้าย โดยทั่วไปตัวเลือกที่ระบุไว้ที่
link-time override ที่ระบุในเวลาคอมไพล์

หากคุณไม่ได้ระบุตัวเลือกระดับการปรับให้เหมาะสม -O ที่เวลาลิงก์ จากนั้น GCC จะคำนวณ
ขึ้นอยู่กับระดับการปรับให้เหมาะสมที่ใช้เมื่อรวบรวมไฟล์อ็อบเจ็กต์ NS
ระดับการเพิ่มประสิทธิภาพสูงสุดชนะที่นี่

ปัจจุบัน ตัวเลือกและการตั้งค่าต่อไปนี้ใช้จากไฟล์ออบเจ็กต์แรก
ที่ได้ระบุไว้อย่างชัดเจนว่า -fPIC, -fpic, -fpie, -fcommon, -fexceptions,
-fnon-call-ข้อยกเว้น, -fgnu-tm และทั้งหมด -m ธงเป้าหมาย

แฟล็กการเปลี่ยน ABI บางอย่างจำเป็นต้องจับคู่ในคอมไพล์ยูนิตทั้งหมดและพยายาม
เพื่อแทนที่สิ่งนี้ในเวลาลิงค์ที่มีค่าที่ขัดแย้งกันจะถูกละเว้น ซึ่งรวมถึง
ตัวเลือกเช่น -freg-struct-กลับ และ -fpcc-struct-return.

ตัวเลือกอื่น ๆ เช่น -ffp-สัญญา, -fno-เข้มงวดล้น, -fwrapv, -fno-trapv or
-fno-strict-นามแฝง ถูกส่งผ่านไปยังสเตจลิงค์และผสานเข้าด้วยกันอย่างอนุรักษ์นิยม
สำหรับหน่วยการแปลที่ขัดแย้งกัน โดยเฉพาะ -fno-เข้มงวดล้น, -fwrapv และ
-fno-trapv มีความสำคัญและตัวอย่างเช่น -ffp-contract=off มีความสำคัญมากกว่า
-ffp-contract=fast. คุณสามารถแทนที่ได้ในเวลา linke-time

ขอแนะนำให้คุณรวบรวมไฟล์ทั้งหมดที่เข้าร่วมในลิงค์เดียวกันกับ
ตัวเลือกเดียวกันและระบุตัวเลือกเหล่านั้นในเวลาที่ลิงก์ด้วย

หาก LTO พบอ็อบเจ็กต์ที่มีการเชื่อมโยง C ที่ประกาศด้วยประเภทที่เข้ากันไม่ได้แยกกัน
หน่วยการแปลที่จะเชื่อมโยงเข้าด้วยกัน (พฤติกรรมที่ไม่ได้กำหนดตาม ISO C99
6.2.7) อาจมีการออกการวินิจฉัยที่ไม่ร้ายแรง พฤติกรรมยังไม่ได้กำหนดที่รัน
เวลา. การวินิจฉัยที่คล้ายกันอาจถูกยกขึ้นสำหรับภาษาอื่น

คุณลักษณะอีกประการของ LTO คือสามารถใช้การเพิ่มประสิทธิภาพระหว่างขั้นตอนได้
ในไฟล์ที่เขียนในภาษาต่างๆ:

gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

สังเกตว่าลิงค์สุดท้ายเสร็จสิ้นด้วย g ++ เพื่อรับไลบรารีรันไทม์ C++ และ
-lgfortran ถูกเพิ่มเพื่อรับไลบรารีรันไทม์ของ Fortran โดยทั่วไปแล้วเมื่อผสม
ภาษาในโหมด LTO คุณควรใช้ตัวเลือกคำสั่งลิงค์เดียวกันกับเมื่อผสม
ภาษาในการคอมไพล์ปกติ (ไม่ใช่ LTO)

หากไฟล์อ็อบเจ็กต์ที่มี GIMPLE bytecode ถูกจัดเก็บไว้ในไฟล์เก็บถาวรของไลบรารี ให้พูดว่า
libfoo.aเป็นไปได้ที่จะแยกและใช้ในลิงก์ LTO หากคุณใช้ a
ตัวเชื่อมโยงพร้อมการสนับสนุนปลั๊กอิน ในการสร้างไลบรารีแบบสแตติกที่เหมาะสมกับ LTO ให้ใช้ gcc-ar
และ gcc-ranlib แทน ar และ ranlib; เพื่อแสดงสัญลักษณ์ของไฟล์อ็อบเจ็กต์ด้วย
GIMPLE bytecode ใช้ gcc-nm. คำสั่งเหล่านั้นต้องการว่า ar, ranlib และ nm ได้รับ
คอมไพล์ด้วยการสนับสนุนปลั๊กอิน เมื่อถึงเวลาเชื่อมโยง ใช้แฟล็ก -fuse-linker-plugin ไปยัง
ตรวจสอบให้แน่ใจว่าห้องสมุดมีส่วนร่วมในกระบวนการเพิ่มประสิทธิภาพ LTO:

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

เมื่อเปิดใช้งานปลั๊กอินตัวเชื่อมโยง ตัวเชื่อมโยงจะแยกไฟล์ GIMPLE ที่จำเป็นจาก
libfoo.a และส่งต่อไปยัง GCC ที่ทำงานอยู่เพื่อให้เป็นส่วนหนึ่งของการรวม
รูปภาพ GIMPLE ที่จะปรับให้เหมาะสม

หากคุณไม่ได้ใช้ตัวเชื่อมโยงที่รองรับปลั๊กอินและ/หรือไม่ได้เปิดใช้งานตัวเชื่อมโยง
ปลั๊กอินแล้ววัตถุภายใน libfoo.a ถูกสกัดและเชื่อมโยงตามปกติ แต่พวกมัน
ไม่เข้าร่วมในกระบวนการเพิ่มประสิทธิภาพ LTO เพื่อสร้างห้องสมุดแบบคงที่
เหมาะสำหรับการเพิ่มประสิทธิภาพ LTO และการเชื่อมโยงปกติ รวบรวมไฟล์อ็อบเจ็กต์ด้วย
-flto -ffat-lto-วัตถุ.

การเพิ่มประสิทธิภาพเวลาลิงก์ไม่จำเป็นต้องมีโปรแกรมทั้งหมดจึงจะใช้งานได้
หากโปรแกรมไม่ต้องการให้ส่งออกสัญลักษณ์ใด ๆ ก็สามารถรวมได้
-flto และ -fwhole-โปรแกรม เพื่อให้เครื่องมือเพิ่มประสิทธิภาพระหว่างขั้นตอนใช้งานได้มากขึ้น
สมมติฐานเชิงรุกซึ่งอาจนำไปสู่โอกาสในการเพิ่มประสิทธิภาพที่ดีขึ้น การใช้
-fwhole-โปรแกรม ไม่จำเป็นเมื่อปลั๊กอินตัวเชื่อมโยงทำงานอยู่ (ดู -fuse-linker-plugin).

การใช้งาน LTO ในปัจจุบันไม่ได้พยายามสร้าง bytecode ที่เป็น
แบบพกพาระหว่างโฮสต์ประเภทต่างๆ ไฟล์ bytecode เป็นเวอร์ชันและที่นั่น
เป็นการตรวจสอบเวอร์ชันที่เข้มงวด ดังนั้นไฟล์ bytecode ที่สร้างใน GCC เวอร์ชันเดียวจึงไม่
ทำงานร่วมกับ GCC เวอร์ชันเก่าหรือใหม่กว่า

การปรับเวลาลิงก์ให้เหมาะสมทำงานได้ไม่ดีกับการสร้างข้อมูลการดีบัก
รวม -flto กับ -g อยู่ระหว่างการทดลองและคาดว่าจะผลิตออกมาอย่างไม่คาดคิด
ผล.

หากคุณระบุตัวเลือก n, การปรับให้เหมาะสมและการสร้างโค้ดเสร็จสิ้นในเวลาลิงค์
ถูกดำเนินการแบบขนานโดยใช้ n งานคู่ขนานโดยใช้การติดตั้ง ทำ โครงการ
ตัวแปรสภาพแวดล้อม MAKE อาจถูกใช้เพื่อแทนที่โปรแกรมที่ใช้ ค่าเริ่มต้น
คุ้มค่าสำหรับ n คือ 1

คุณยังสามารถระบุ -flto=jobserver เพื่อใช้โหมดเซิร์ฟเวอร์งานของ GNU make เพื่อกำหนด
จำนวนงานคู่ขนาน สิ่งนี้มีประโยชน์เมื่อ Makefile ที่เรียก GCC อยู่แล้ว
ดำเนินการควบคู่กันไป คุณต้องเติม a + ไปที่สูตรคำสั่งในพาเรนต์
Makefile เพื่อให้สิ่งนี้ทำงานได้ ตัวเลือกนี้น่าจะใช้ได้ก็ต่อเมื่อ MAKE เป็นของ GNU

-flto-partition=ALG
ระบุอัลกอริทึมการแบ่งพาร์ติชันที่ใช้โดยตัวเพิ่มประสิทธิภาพเวลาลิงก์ ค่าคือ
ทั้ง 1to1 เพื่อระบุการแบ่งพาร์ติชั่นมิเรอร์ไฟล์ต้นฉบับหรือ สมดุลย์
เพื่อระบุการแบ่งพาร์ติชั่นเป็นชิ้นขนาดเท่ากัน (เมื่อทำได้) หรือ แม็กซ์ เพื่อสร้าง
พาร์ติชั่นใหม่สำหรับทุกสัญลักษณ์ที่เป็นไปได้ ระบุ ไม่มี เป็นอัลกอริทึม
ปิดใช้งานการแบ่งพาร์ติชันและการสตรีมอย่างสมบูรณ์ ค่าเริ่มต้นคือ สมดุลย์. ในขณะที่
1to1 สามารถใช้เป็นวิธีแก้ปัญหาสำหรับปัญหาการสั่งซื้อรหัสต่างๆ ได้ แม็กซ์
การแบ่งพาร์ติชันมีไว้สำหรับการทดสอบภายในเท่านั้น มูลค่า หนึ่ง ระบุว่า
ควรใช้พาร์ติชันเดียวในขณะที่ค่า ไม่มี ข้ามการแบ่งพาร์ติชันและ
ดำเนินการขั้นตอนการเพิ่มประสิทธิภาพเวลาลิงก์โดยตรงจากเฟส WPA

-flto-odr-type-merging
เปิดใช้งานการสตรีมชื่อประเภท Mangled ของประเภท C ++ และการรวมที่
ลิงค์ไทม์ สิ่งนี้จะเพิ่มขนาดของไฟล์อ็อบเจ็กต์ LTO แต่เปิดใช้งานการวินิจฉัยเกี่ยวกับ One
การละเมิดกฎคำจำกัดความ

-flto-บีบอัดระดับ=n
ตัวเลือกนี้ระบุระดับการบีบอัดที่ใช้สำหรับภาษากลางที่เขียน
ไปยังไฟล์อ็อบเจ็กต์ LTO และมีความหมายร่วมกับโหมด LTO เท่านั้น (-flto).
ค่าที่ถูกต้องคือ 0 (ไม่มีการบีบอัด) ถึง 9 (การบีบอัดสูงสุด) ค่านอกนี้
ช่วงจะถูกจำกัดไว้ที่ 0 หรือ 9 หากไม่ระบุตัวเลือก ค่าดีฟอลต์ที่สมดุล
ใช้การตั้งค่าการบีบอัด

-flto-รายงาน
พิมพ์รายงานพร้อมรายละเอียดภายในเกี่ยวกับการทำงานของตัวเพิ่มประสิทธิภาพเวลาลิงก์ NS
เนื้อหาของรายงานนี้แตกต่างกันไปในแต่ละเวอร์ชัน มีขึ้นเพื่อเป็นประโยชน์กับ GCC
นักพัฒนาเมื่อประมวลผลไฟล์อ็อบเจ็กต์ในโหมด LTO (ผ่าน -flto).

ปิดใช้งานโดยค่าเริ่มต้น

-flto-report-wpa
ชอบ -flto-รายงานแต่ให้พิมพ์เฉพาะช่วง WPA ของ Link Time Optimization

-fuse-linker-plugin
เปิดใช้งานการใช้ปลั๊กอินตัวเชื่อมโยงระหว่างการเพิ่มประสิทธิภาพเวลาลิงก์ ตัวเลือกนี้อาศัย
เกี่ยวกับการสนับสนุนปลั๊กอินในลิงเกอร์ซึ่งมีอยู่ในทองคำหรือใน GNU ld 2.21 หรือ
ใหม่กว่า

ตัวเลือกนี้เปิดใช้งานการแยกไฟล์อ็อบเจ็กต์ด้วย GIMPLE bytecode จากไลบรารี
เอกสารสำคัญ สิ่งนี้ช่วยปรับปรุงคุณภาพของการเพิ่มประสิทธิภาพโดยการเปิดเผยโค้ดเพิ่มเติมไปยังลิงก์-
เครื่องมือเพิ่มประสิทธิภาพเวลา ข้อมูลนี้ระบุว่าสัญลักษณ์ใดบ้างที่สามารถเข้าถึงได้จากภายนอก
(โดยอ็อบเจ็กต์ที่ไม่ใช่ LTO หรือระหว่างการลิงก์แบบไดนามิก) ผลลัพธ์ของการปรับปรุงคุณภาพโค้ดบน
ไบนารี (และไลบรารีที่ใช้ร่วมกันที่ใช้การมองเห็นที่ซ่อนอยู่) คล้ายกับ
-fwhole-โปรแกรม. ดู -flto สำหรับคำอธิบายผลกระทบของแฟล็กนี้และวิธีการ
ใช้มัน.

ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นเมื่อเปิดใช้งานการรองรับ LTO ใน GCC และ GCC เคยเป็น
กำหนดค่าเพื่อใช้กับปลั๊กอินที่รองรับตัวเชื่อมโยง (GNU ld 2.21 หรือใหม่กว่าหรือสีทอง)

-ffat-lto-วัตถุ
ออบเจ็กต์ Fat LTO เป็นไฟล์อ็อบเจ็กต์ที่มีทั้งภาษากลางและ
รหัสวัตถุ ทำให้ใช้งานได้ทั้งการเชื่อมโยง LTO และการเชื่อมโยงแบบปกติ นี้
ตัวเลือกจะมีผลเฉพาะเมื่อคอมไพล์ด้วย -flto และจะถูกละเว้นในเวลาเชื่อมโยง

-fno-fat-lto-วัตถุ ปรับปรุงเวลาในการรวบรวมมากกว่า LTO ธรรมดา แต่ต้องการ
Toolchain ที่สมบูรณ์เพื่อรับทราบ LTO มันต้องมีตัวเชื่อมโยงที่รองรับปลั๊กอินตัวเชื่อมโยง
สำหรับฟังก์ชั่นพื้นฐาน นอกจากนี้ nm, ar และ ranlib ต้องสนับสนุนลิงเกอร์
ปลั๊กอินเพื่อให้มีสภาพแวดล้อมการสร้างที่มีคุณสมบัติครบถ้วน (สามารถสร้าง static . ได้
ห้องสมุด ฯลฯ) GCC จัดให้ gcc-ar, gcc-nm, gcc-ranlib ห่อที่จะผ่าน
ตัวเลือกที่เหมาะสมกับเครื่องมือเหล่านี้ ด้วย makefiles LTO ที่ไม่อ้วนจำเป็นต้องแก้ไขเพื่อใช้งาน
พวกเขา

ค่าเริ่มต้นคือ -fno-fat-lto-วัตถุ บนเป้าหมายด้วยการสนับสนุนปลั๊กอินตัวเชื่อมโยง

-fcompare-เอลิม
หลังจากลงทะเบียนการจัดสรรและการแยกคำสั่งการจัดสรรหลังการลงทะเบียน ให้ระบุ
คำสั่งทางคณิตศาสตร์ที่คำนวณแฟล็กโปรเซสเซอร์คล้ายกับการดำเนินการเปรียบเทียบ
ตามเลขคณิตนั้น ถ้าเป็นไปได้ ให้กำจัดการดำเนินการเปรียบเทียบที่ชัดเจน

บัตรผ่านนี้ใช้ได้เฉพาะกับเป้าหมายบางอย่างที่ไม่สามารถเป็นตัวแทนของ .ได้อย่างชัดเจน
การดำเนินการเปรียบเทียบก่อนการจัดสรรการลงทะเบียนจะเสร็จสมบูรณ์

เปิดใช้งานในระดับ -O, -O2, -O3, -Os.

-fcprop-ลงทะเบียน
หลังจากลงทะเบียนการจัดสรรและแยกคำสั่งการจัดสรรหลังการลงทะเบียน ให้ดำเนินการ
การส่งผ่านสำเนาเพื่อพยายามลดการพึ่งพาการจัดกำหนดการและในบางครั้ง
กำจัดสำเนา

เปิดใช้งานในระดับ -O, -O2, -O3, -Os.

-fprofile-แก้ไข
โปรไฟล์ที่รวบรวมโดยใช้เครื่องมือไบนารีสำหรับโปรแกรมมัลติเธรดอาจเป็น
ไม่สอดคล้องกันเนื่องจากพลาดการอัปเดตตัวนับ เมื่อระบุตัวเลือกนี้ GCC จะใช้
ฮิวริสติกเพื่อแก้ไขหรือขจัดความไม่สอดคล้องกันดังกล่าว โดยค่าเริ่มต้น GCC จะปล่อย an
ข้อความแสดงข้อผิดพลาดเมื่อตรวจพบโปรไฟล์ที่ไม่สอดคล้องกัน

-fprofile-dir=เส้นทาง
ตั้งค่าไดเร็กทอรีเพื่อค้นหาไฟล์ข้อมูลโปรไฟล์ในto เส้นทาง. ตัวเลือกนี้
มีผลกับข้อมูลโปรไฟล์ที่สร้างโดย .เท่านั้น -fprofile-สร้าง, -ftest-ครอบคลุม,
-fprofile-arcs และใช้โดย -fprofile-use และ -fbranch-ความน่าจะเป็น และเกี่ยวข้องกัน
ตัวเลือก. สามารถใช้ได้ทั้งเส้นทางแบบสัมบูรณ์และแบบสัมพัทธ์ โดยค่าเริ่มต้น GCC จะใช้
ไดเรกทอรีปัจจุบันเป็น เส้นทางดังนั้นไฟล์ข้อมูลโปรไฟล์จึงปรากฏในไดเร็กทอรีเดียวกันกับ
ไฟล์อ็อบเจ็กต์

-fprofile-สร้าง
-fprofile-generate=เส้นทาง
เปิดใช้งานตัวเลือกที่มักใช้สำหรับเครื่องมือวัดเพื่อสร้างโปรไฟล์ที่มีประโยชน์
สำหรับการคอมไพล์ใหม่ในภายหลังด้วยการเพิ่มประสิทธิภาพตามความคิดเห็นของโปรไฟล์ คุณต้องใช้
-fprofile-สร้าง ทั้งเมื่อคอมไพล์และเมื่อเชื่อมโยงโปรแกรมของคุณ

เปิดใช้งานตัวเลือกต่อไปนี้: -fprofile-arcs, -fprofile-values, -fvpt.

If เส้นทาง ถูกระบุ GCC จะดูที่ เส้นทาง เพื่อค้นหาไฟล์ข้อมูลความคิดเห็นเกี่ยวกับโปรไฟล์
ดู -fprofile-dir.

-fprofile-use
-fprofile-use=เส้นทาง
เปิดใช้งานการเพิ่มประสิทธิภาพการป้อนกลับของโปรไฟล์และการเพิ่มประสิทธิภาพต่อไปนี้ซึ่ง
โดยทั่วไปจะทำกำไรได้ก็ต่อเมื่อมีความคิดเห็นเกี่ยวกับโปรไฟล์: -fbranch-ความน่าจะเป็น,
-fvpt, -funroll-ลูป, -fpeel-ลูป, -ftracer, -ftree-vectorizeและ ftree-ห่วง-
รูปแบบการกระจาย.

โดยค่าเริ่มต้น GCC จะส่งข้อความแสดงข้อผิดพลาดหากโปรไฟล์คำติชมไม่ตรงกับ
รหัสแหล่งที่มา. ข้อผิดพลาดนี้สามารถเปลี่ยนเป็นคำเตือนได้โดยใช้ -Wcoverage-ไม่ตรงกัน.
โปรดทราบว่าอาจส่งผลให้โค้ดที่ปรับให้เหมาะสมได้ไม่ดี

If เส้นทาง ถูกระบุ GCC จะดูที่ เส้นทาง เพื่อค้นหาไฟล์ข้อมูลความคิดเห็นเกี่ยวกับโปรไฟล์
ดู -fprofile-dir.

-fauto-profile
-fauto-profile=เส้นทาง
เปิดใช้งานการเพิ่มประสิทธิภาพตามการสุ่มตัวอย่างตามการสุ่มตัวอย่างและการเพิ่มประสิทธิภาพต่อไปนี้
ซึ่งโดยทั่วไปแล้วจะทำกำไรได้ก็ต่อเมื่อมีความคิดเห็นเกี่ยวกับโปรไฟล์:
-fbranch-ความน่าจะเป็น, -fvpt, -funroll-ลูป, -fpeel-ลูป, -ftracer,
-ftree-vectorize, -finline-ฟังก์ชั่น, -fipa-cp, -fipa-cp-โคลน,
-fpredictive-ทั่วไป, -funswitch-ลูป, -fgcse-หลังรีโหลดและ
-ftree-loop-distribute-patterns.

เส้นทาง เป็นชื่อของไฟล์ที่มีข้อมูลโปรไฟล์ AutoFDO หากละเว้นก็
ค่าเริ่มต้นเป็น fbdata.afdo ในไดเร็กทอรีปัจจุบัน

การสร้างไฟล์ข้อมูลโปรไฟล์ AutoFDO ต้องเรียกใช้โปรแกรมของคุณด้วย perf
ยูทิลิตี้บนระบบเป้าหมาย GNU/Linux ที่รองรับ ดูข้อมูลเพิ่มเติมได้ที่
<https://perf.wiki.kernel.org/>.

เช่น

บันทึก perf -e br_inst_retired:near_taken -b -o perf.data \
-- your_program

จากนั้นใช้ create_gcov เครื่องมือในการแปลงข้อมูลโปรไฟล์ดิบให้อยู่ในรูปแบบที่สามารถ
ใช้โดย กสทช. คุณต้องจัดหาไบนารี unstripped สำหรับโปรแกรมของคุณให้กับสิ่งนี้ด้วย
เครื่องมือ. ดูhttps://github.com/google/autofdo>.

เช่น

create_gcov --binary=your_program.unstripped --profile=perf.data \
--gcov=profile.afdo

ตัวเลือกต่อไปนี้ควบคุมพฤติกรรมของคอมไพเลอร์เกี่ยวกับเลขทศนิยม
ตัวเลือกเหล่านี้แลกระหว่างความเร็วและความถูกต้อง ต้องเปิดใช้งานทั้งหมดโดยเฉพาะ

-ffloat-store
อย่าเก็บตัวแปรทศนิยมในรีจิสเตอร์ และยับยั้งตัวเลือกอื่นๆ ที่
อาจเปลี่ยนว่าค่าทศนิยมถูกนำมาจากรีจิสเตอร์หรือหน่วยความจำ

ตัวเลือกนี้ป้องกันความแม่นยำส่วนเกินที่ไม่พึงประสงค์บนเครื่องจักร เช่น 68000 โดยที่
การลงทะเบียนแบบลอยตัว (ของ 68881) มีความแม่นยำมากกว่าที่ควรจะเป็น "สองเท่า"
เพื่อที่จะมี. ในทำนองเดียวกันสำหรับสถาปัตยกรรม x86 สำหรับโปรแกรมส่วนใหญ่ ความแม่นยำส่วนเกิน
ทำได้เพียงแต่ดี แต่มีบางโปรแกรมที่อาศัยคำนิยามที่แม่นยำของ IEEE floating
จุด. ใช้ -ffloat-store สำหรับโปรแกรมดังกล่าวหลังจากปรับเปลี่ยนให้จัดเก็บทั้งหมด
การคำนวณขั้นกลางที่เกี่ยวข้องเป็นตัวแปร

-fexcess-precision=สไตล์
ตัวเลือกนี้ช่วยให้สามารถควบคุมเพิ่มเติมเกี่ยวกับความแม่นยำส่วนเกินบนเครื่องจักรที่ลอย-
การลงทะเบียนจุดมีความแม่นยำมากกว่าประเภท IEEE "float" และ "double" และ
โปรเซสเซอร์ไม่สนับสนุนการดำเนินการที่ปัดเศษเป็นประเภทเหล่านั้น โดยค่าเริ่มต้น,
-fexcess-precision=fast มีผลบังคับใช้ หมายความว่ามีการดำเนินการใน
ความแม่นยำของรีจิสเตอร์และคาดเดาไม่ได้เมื่อปัดเศษเป็นประเภท
ที่ระบุในซอร์สโค้ดจะเกิดขึ้น เมื่อรวบรวม C ถ้า
-fexcess-precision=มาตรฐาน ถูกระบุแล้วความแม่นยำเกินจะเป็นไปตามกฎ
ระบุไว้ใน ISO C99; โดยเฉพาะการหล่อและการมอบหมายงานทำให้ค่าเป็น
ปัดเศษเป็นประเภทความหมาย (ในขณะที่ -ffloat-store มีผลกับงานที่มอบหมายเท่านั้น)
ตัวเลือกนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นสำหรับ C หากตัวเลือกความสอดคล้องที่เข้มงวดเช่น
-std=c99 ถูกนำมาใช้.

-fexcess-precision=มาตรฐาน ไม่ได้นำไปใช้กับภาษาอื่นที่ไม่ใช่ C และไม่มี
ผลถ้า -funsafe-คณิตศาสตร์-optimizations or -ffast-คณิตศาสตร์ ระบุไว้ บน x86 มัน
ก็ไม่มีผลเช่นกันถ้า -mfpmath=sse or -mfpmath=sse+387 ระบุไว้; ในอดีต
กรณี ความหมายของ IEEE ใช้โดยไม่มีความแม่นยำเกิน และในระยะหลัง ปัดเศษคือ
คาดการณ์ไม่ได้.

-ffast-คณิตศาสตร์
ตั้งค่าตัวเลือก -fno-math-errno, -funsafe-คณิตศาสตร์-optimizations, -ffinite-คณิตศาสตร์เท่านั้น,
-fno-ปัดเศษคณิตศาสตร์, -fno-สัญญาณ-nans และ -fcx-จำกัดช่วง.

ตัวเลือกนี้ทำให้มาโครตัวประมวลผลล่วงหน้า "__FAST_MATH__" ถูกกำหนด

ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกนอกจาก -Ofast เพราะมันอาจส่งผลให้
เอาต์พุตที่ไม่ถูกต้องสำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้

-fno-math-errno
อย่าตั้งค่า "errno" หลังจากเรียกใช้ฟังก์ชันคณิตศาสตร์ที่ดำเนินการด้วย single
คำสั่ง เช่น "sqrt" โปรแกรมที่อาศัยข้อยกเว้น IEEE สำหรับข้อผิดพลาดทางคณิตศาสตร์
การจัดการอาจต้องการใช้แฟล็กนี้เพื่อความเร็วในขณะที่รักษา IEEE arithmetic
ความเข้ากันได้

ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกเนื่องจากอาจส่งผลให้เอาต์พุตไม่ถูกต้อง
สำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้

ค่าเริ่มต้นคือ -fmath-errno.

ในระบบดาร์วิน ห้องสมุดคณิตศาสตร์ไม่เคยตั้งค่า "errno" จึงไม่มีเหตุผล
เพื่อให้ผู้เรียบเรียงพิจารณาถึงความเป็นไปได้และ -fno-math-errno คือ
ค่าเริ่มต้น.

-funsafe-คณิตศาสตร์-optimizations
อนุญาตการปรับให้เหมาะสมสำหรับเลขทศนิยมที่ (a) ถือว่าอาร์กิวเมนต์นั้นและ
ผลลัพธ์ถูกต้องและ (b) อาจละเมิดมาตรฐาน IEEE หรือ ANSI เมื่อใช้ในช่วงเวลาเชื่อมโยง
อาจรวมถึงไลบรารีหรือไฟล์เริ่มต้นที่เปลี่ยนคำควบคุม FPU เริ่มต้นหรือ
การเพิ่มประสิทธิภาพอื่นๆ ที่คล้ายคลึงกัน

ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกเนื่องจากอาจส่งผลให้เอาต์พุตไม่ถูกต้อง
สำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้ เปิดใช้งาน
-fno-ลงนาม-ศูนย์, -fno-trapping-คณิตศาสตร์, -fassociative-คณิตศาสตร์ และ -freciprocal-คณิตศาสตร์.

ค่าเริ่มต้นคือ -fno-unsafe-math-optimizations.

-fassociative-คณิตศาสตร์
อนุญาตให้มีการเชื่อมโยงใหม่ของตัวถูกดำเนินการในชุดของการดำเนินการจุดลอยตัว นี้
ละเมิดมาตรฐานภาษา ISO C และ C++ โดยอาจเปลี่ยนผลการคำนวณ
หมายเหตุ: การเรียงลำดับใหม่อาจเปลี่ยนเครื่องหมายศูนย์รวมทั้งละเว้น NaNs และยับยั้งหรือ
สร้างอันเดอร์โฟลว์หรือโอเวอร์โฟลว์ (ดังนั้นจึงไม่สามารถใช้กับโค้ดที่ต้องอาศัยการปัดเศษได้)
พฤติกรรมเช่น "(x + 2**52) - 2**52" อาจจัดลำดับการเปรียบเทียบจุดทศนิยมใหม่และ
ดังนั้นจึงไม่สามารถใช้เมื่อต้องการเปรียบเทียบตามลำดับ ตัวเลือกนี้ต้องการสิ่งนั้น
ทั้งสอง -fno-ลงนาม-ศูนย์ และ -fno-trapping-คณิตศาสตร์ มีผลบังคับใช้ แถมยังไม่ทำให้
มีสติสัมปชัญญะมากกับ -Founding-คณิตศาสตร์. สำหรับ Fortran ตัวเลือกจะเปิดใช้งานโดยอัตโนมัติเมื่อ
ทั้งสอง -fno-ลงนาม-ศูนย์ และ -fno-trapping-คณิตศาสตร์ มีผลบังคับใช้

ค่าเริ่มต้นคือ -fno-associative-คณิตศาสตร์.

-freciprocal-คณิตศาสตร์
อนุญาตให้ใช้ส่วนกลับของค่าแทนการหารด้วยค่าถ้าสิ่งนี้
เปิดใช้งานการเพิ่มประสิทธิภาพ ตัวอย่างเช่น "x / y" สามารถแทนที่ด้วย "x * (1/y)" ซึ่งก็คือ
มีประโยชน์หาก "(1/y)" อยู่ภายใต้การกำจัดนิพจน์ย่อยทั่วไป โปรดทราบว่าสิ่งนี้
สูญเสียความแม่นยำและเพิ่มจำนวนความล้มเหลวในการทำงานกับค่า

ค่าเริ่มต้นคือ -fno-reciprocal-คณิตศาสตร์.

-ffinite-คณิตศาสตร์เท่านั้น
อนุญาตการปรับให้เหมาะสมสำหรับเลขทศนิยมที่ถือว่าอาร์กิวเมนต์นั้นและ
ผลลัพธ์ไม่ใช่ NaN หรือ +-Infs

ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกเนื่องจากอาจส่งผลให้เอาต์พุตไม่ถูกต้อง
สำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้

ค่าเริ่มต้นคือ -fno-finite-คณิตศาสตร์เท่านั้น.

-fno-ลงนาม-ศูนย์
อนุญาตการปรับให้เหมาะสมสำหรับเลขทศนิยมที่ไม่สนใจค่าศูนย์
เลขคณิต IEEE ระบุพฤติกรรมของค่า +0.0 และ -0.0 ที่แตกต่างกัน ซึ่งจากนั้น
ห้ามลดความซับซ้อนของนิพจน์เช่น x+0.0 หรือ 0.0*x (ถึงกับ
-ffinite-คณิตศาสตร์เท่านั้น). ตัวเลือกนี้บอกเป็นนัยว่าเครื่องหมายของผลลัพธ์ที่เป็นศูนย์ไม่ใช่
สำคัญ.

ค่าเริ่มต้นคือ -fsigned-ศูนย์.

-fno-trapping-คณิตศาสตร์
คอมไพล์โค้ดโดยสมมติว่าการดำเนินการทศนิยมไม่สามารถสร้างให้ผู้ใช้มองเห็นได้
กับดัก กับดักเหล่านี้รวมถึงการหารด้วยศูนย์, ล้น, อันเดอร์โฟลว์, ผลลัพธ์ที่ไม่แน่นอนและ
การดำเนินการที่ไม่ถูกต้อง ตัวเลือกนี้ต้องการสิ่งนั้น -fno-สัญญาณ-nans มีผลบังคับใช้
การตั้งค่าตัวเลือกนี้อาจทำให้โค้ดเร็วขึ้นหากใช้เลขคณิต IEEE "ไม่หยุด"
เช่น

ตัวเลือกนี้ไม่ควรถูกเปิดโดยใดๆ -O ทางเลือก เนื่องจากอาจส่งผลให้
เอาต์พุตที่ไม่ถูกต้องสำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์

ค่าเริ่มต้นคือ -ftrapping-คณิตศาสตร์.

-Founding-คณิตศาสตร์
ปิดใช้งานการแปลงและการปรับให้เหมาะสมที่ถือว่าการปัดเศษทศนิยมเริ่มต้น
พฤติกรรม. นี่คือการปัดเศษเป็นศูนย์สำหรับการแปลงทศนิยมเป็นจำนวนเต็มและ
ปัดเศษให้ใกล้ที่สุดสำหรับการตัดปลายเลขคณิตอื่นๆ ทั้งหมด ตัวเลือกนี้ควรเป็น
ที่กำหนดไว้สำหรับโปรแกรมที่เปลี่ยนโหมดการปัดเศษ FP แบบไดนามิกหรือที่อาจจะ
ดำเนินการด้วยโหมดการปัดเศษที่ไม่ใช่ค่าเริ่มต้น ตัวเลือกนี้ปิดใช้งานการพับอย่างต่อเนื่องของ
นิพจน์ทศนิยม ณ เวลารวบรวม (ซึ่งอาจได้รับผลกระทบจากโหมดการปัดเศษ)
และการแปลงเลขคณิตที่ไม่ปลอดภัยต่อหน้าที่ขึ้นกับเครื่องหมาย
โหมดการปัดเศษ

ค่าเริ่มต้นคือ -fno-ปัดเศษคณิตศาสตร์.

ตัวเลือกนี้เป็นรุ่นทดลองและไม่รับประกันว่าจะปิดใช้งาน GCC . ทั้งหมด
การปรับให้เหมาะสมที่ได้รับผลกระทบจากโหมดการปัดเศษ GCC เวอร์ชันต่อไปอาจมีให้
การควบคุมการตั้งค่านี้ละเอียดยิ่งขึ้นโดยใช้ Pragma "FENV_ACCESS" ของ C99 บรรทัดคำสั่งนี้
จะใช้ตัวเลือกเพื่อระบุสถานะเริ่มต้นสำหรับ "FENV_ACCESS"

-fsignaling-nans
คอมไพล์โค้ดโดยสมมติว่า IEEE ส่งสัญญาณ NaN อาจสร้างกับดักที่ผู้ใช้มองเห็นได้ในระหว่าง
การดำเนินการจุดลอยตัว การตั้งค่าตัวเลือกนี้จะปิดใช้งานการเพิ่มประสิทธิภาพที่อาจเปลี่ยนแปลง
จำนวนข้อยกเว้นที่มองเห็นได้ด้วยสัญญาณ NaN ตัวเลือกนี้หมายถึง
-ftrapping-คณิตศาสตร์.

ตัวเลือกนี้ทำให้มีการกำหนดมาโครตัวประมวลผลล่วงหน้า "__SUPPORT_SNAN__"

ค่าเริ่มต้นคือ -fno-สัญญาณ-nans.

ตัวเลือกนี้เป็นรุ่นทดลองและไม่รับประกันว่าจะปิดใช้งาน GCC . ทั้งหมด
การเพิ่มประสิทธิภาพที่ส่งผลต่อพฤติกรรมการส่งสัญญาณ NaN

-fsingle-precision-คงที่
ถือว่าค่าคงที่จุดลอยตัวเป็นความแม่นยำเดียวแทนที่จะแปลงโดยปริยาย
ให้เป็นค่าคงที่ความแม่นยำสองเท่า

-fcx-จำกัดช่วง
เมื่อเปิดใช้งาน ตัวเลือกนี้จะระบุว่าไม่จำเป็นต้องมีขั้นตอนการลดช่วงเมื่อ
ดำเนินการแบ่งที่ซับซ้อน อีกทั้งไม่มีการตรวจสอบว่าผลลัพธ์ของ a
การคูณหรือหารที่ซับซ้อนคือ "NaN + I*NaN" ด้วยความพยายามที่จะช่วยชีวิต
สถานการณ์ในกรณีนั้น ค่าเริ่มต้นคือ -fno-cx-จำกัดช่วงแต่เปิดใช้งานโดย
-ffast-คณิตศาสตร์.

ตัวเลือกนี้ควบคุมการตั้งค่าเริ่มต้นของ Pragma ISO C99 "CX_LIMITED_RANGE"
อย่างไรก็ตาม ตัวเลือกนี้ใช้ได้กับทุกภาษา

-fcx-fortran-กฎ
การคูณและการหารที่ซับซ้อนเป็นไปตามกฎของ Fortran การลดช่วงทำได้ดังนี้
ส่วนหนึ่งของการหารเชิงซ้อน แต่ไม่มีการตรวจสอบว่าผลลัพธ์ของการหารเชิงซ้อนนั้นหรือไม่
การคูณหรือหารคือ "NaN + I*NaN" ด้วยความพยายามที่จะกอบกู้สถานการณ์
ในกรณีนั้น.

ค่าเริ่มต้นคือ -fno-cx-fortran-กฎ.

ตัวเลือกต่อไปนี้จะควบคุมการเพิ่มประสิทธิภาพที่อาจช่วยปรับปรุงประสิทธิภาพ แต่ไม่ใช่
เปิดใช้งานโดย any -O ตัวเลือก. ส่วนนี้รวมถึงตัวเลือกการทดลองที่อาจก่อให้เกิด
รหัสเสีย

-fbranch-ความน่าจะเป็น
หลังจากรันโปรแกรมที่คอมไพล์ด้วย -fprofile-arcs, คุณสามารถรวบรวมเป็นครั้งที่สอง
การใช้ -fbranch-ความน่าจะเป็นเพื่อปรับปรุงการเพิ่มประสิทธิภาพตามจำนวนครั้ง
แต่ละสาขาถูกจับ เมื่อโปรแกรมคอมไพล์ด้วย -fprofile-arcs ออกก็ประหยัด
การดำเนินการส่วนโค้งนับเป็นไฟล์ที่เรียกว่า sourcename.gcda สำหรับแต่ละไฟล์ต้นฉบับ NS
ข้อมูลในไฟล์ข้อมูลนี้ขึ้นอยู่กับโครงสร้างของไฟล์ที่สร้างขึ้นมาก
ดังนั้นคุณต้องใช้ซอร์สโค้ดเดียวกันและตัวเลือกการเพิ่มประสิทธิภาพเดียวกันสำหรับทั้งคู่
การรวบรวม

กับ -fbranch-ความน่าจะเป็น, GCC ทำให้ REG_BR_PROB หมายเหตุในแต่ละ JUMP_INSN และ
CALL_INSN. สามารถใช้เพื่อปรับปรุงการเพิ่มประสิทธิภาพได้ ปัจจุบันใช้เฉพาะ
ในที่เดียว: ใน reorg.cแทนที่จะเดาว่าสาขาใดมีแนวโน้มมากที่สุด
เอา REG_BR_PROB ค่าต่างๆ ใช้เพื่อกำหนดเส้นทางที่จะนำไปใช้มากกว่า
บ่อยครั้ง.

-fprofile-values
ถ้ารวมกับ -fprofile-arcsมันเพิ่มรหัสเพื่อให้ข้อมูลบางอย่างเกี่ยวกับค่าของ
มีการรวบรวมนิพจน์ในโปรแกรม

กับ -fbranch-ความน่าจะเป็น, มันอ่านกลับข้อมูลที่รวบรวมจากค่าโปรไฟล์ของ
นิพจน์สำหรับการใช้งานในการเพิ่มประสิทธิภาพ

เปิดใช้งานด้วย -fprofile-สร้าง และ -fprofile-use.

-fprofile-เรียงลำดับใหม่-ฟังก์ชั่น
การจัดลำดับฟังก์ชันใหม่ตามเครื่องมือวัดโปรไฟล์จะรวบรวมการดำเนินการครั้งแรก
ของฟังก์ชันและเรียงลำดับฟังก์ชันเหล่านี้จากน้อยไปมาก

เปิดใช้งานด้วย -fprofile-use.

-fvpt
ถ้ารวมกับ -fprofile-arcs, ตัวเลือกนี้สั่งให้คอมไพเลอร์เพิ่มโค้ดไปยัง
รวบรวมข้อมูลเกี่ยวกับค่าของนิพจน์

กับ -fbranch-ความน่าจะเป็น, มันอ่านกลับข้อมูลที่รวบรวมและดำเนินการ .จริง
การเพิ่มประสิทธิภาพขึ้นอยู่กับพวกเขา ปัจจุบันการเพิ่มประสิทธิภาพรวมถึงความเชี่ยวชาญของ
การแบ่งงานโดยใช้ความรู้เกี่ยวกับคุณค่าของตัวส่วน

-frename-ลงทะเบียน
พยายามหลีกเลี่ยงการขึ้นต่อกันที่ผิดพลาดในโค้ดที่กำหนดเวลาไว้โดยใช้รีจิสเตอร์ left
หลังจากลงทะเบียนจัดสรรแล้ว การเพิ่มประสิทธิภาพนี้ให้ประโยชน์สูงสุดกับโปรเซสเซอร์ที่มีล็อต
ของการลงทะเบียน ขึ้นอยู่กับรูปแบบข้อมูลการดีบักที่เป้าหมายนำมาใช้
อย่างไรก็ตาม มันทำให้การดีบักเป็นไปไม่ได้ เนื่องจากตัวแปรไม่อยู่ใน "home ." อีกต่อไป
ลงทะเบียน".

เปิดใช้งานโดยค่าเริ่มต้นด้วย -funroll-ลูป และ -fpeel-ลูป.

-fschedule-ฟิวชั่น
ดำเนินการส่งผ่านตามเป้าหมายผ่านสตรีมคำสั่งเพื่อกำหนดเวลาคำสั่ง
ชนิดเดียวกันเข้าด้วยกันเพราะเครื่องเป้าหมายสามารถดำเนินการได้อย่างมีประสิทธิภาพมากขึ้นหากพวกเขา
อยู่ติดกันในโฟลว์คำสั่ง

เปิดใช้งานในระดับ -O2, -O3, -Os.

-ftracer
ทำซ้ำหางเพื่อขยายขนาดซุปเปอร์บล็อก การเปลี่ยนแปลงนี้ทำให้ง่ายขึ้น
โฟลว์การควบคุมของฟังก์ชันช่วยให้การเพิ่มประสิทธิภาพอื่นๆ ทำงานได้ดีขึ้น

เปิดใช้งานด้วย -fprofile-use.

-funroll-ลูป
คลายลูปซึ่งสามารถกำหนดจำนวนการวนซ้ำได้ ณ เวลารวบรวมหรือเมื่อ
เข้าสู่วง. -funroll-ลูป หมายถึง -frerun-cse-หลังลูป, -fweb และ
-frename-ลงทะเบียน. นอกจากนี้ยังเปิดใช้การลอกแบบวนซ้ำทั้งหมด (เช่น การนำ . ออกโดยสมบูรณ์
วนซ้ำด้วยการวนซ้ำจำนวนเล็กน้อยคงที่) ตัวเลือกนี้ทำให้โค้ดมีขนาดใหญ่ขึ้นและ
อาจหรือไม่อาจทำให้ทำงานเร็วขึ้น

เปิดใช้งานด้วย -fprofile-use.

-funroll-all-loops
คลายลูปทั้งหมด แม้ว่าจำนวนการวนซ้ำจะไม่แน่นอนเมื่อลูปเป็น
เข้ามา ซึ่งมักจะทำให้โปรแกรมทำงานช้าลง -funroll-all-loops หมายถึง
ตัวเลือกเดียวกับ -funroll-ลูป.

-fpeel-ลูป
ปอกลูปที่มีข้อมูลเพียงพอที่จะไม่ม้วนมาก (จาก
ข้อเสนอแนะโปรไฟล์) นอกจากนี้ยังเปิดใช้การลอกแบบวนซ้ำทั้งหมด (เช่น การนำ . ออกโดยสมบูรณ์
วนซ้ำด้วยจำนวนการวนซ้ำคงที่เล็กน้อย)

เปิดใช้งานด้วย -fprofile-use.

-fmove-loop-ค่าคงที่
เปิดใช้งานการเคลื่อนที่ไม่แปรผันของลูปในตัวเพิ่มประสิทธิภาพลูป RTL เปิดใช้งานที่ระดับ
-O1

-funswitch-ลูป
ย้ายกิ่งที่มีเงื่อนไขไม่แปรผันของลูปออกจากลูป โดยซ้ำกับ
วนซ้ำทั้งสองกิ่ง (แก้ไขตามผลลัพธ์ของเงื่อนไข)

-ffunction-sections
-fdata-sections
วางแต่ละฟังก์ชันหรือรายการข้อมูลลงในส่วนของตนเองในไฟล์เอาต์พุตหาก target
รองรับส่วนโดยพลการ ชื่อของฟังก์ชันหรือชื่อของรายการข้อมูล
กำหนดชื่อของส่วนในไฟล์ที่ส่งออก

ใช้ตัวเลือกเหล่านี้กับระบบที่ตัวเชื่อมโยงสามารถดำเนินการเพิ่มประสิทธิภาพเพื่อปรับปรุง
ตำแหน่งอ้างอิงในพื้นที่คำแนะนำ ระบบส่วนใหญ่ที่ใช้วัตถุ ELF
รูปแบบและตัวประมวลผล SPARC ที่รัน Solaris 2 มีตัวเชื่อมโยงที่มีการเพิ่มประสิทธิภาพดังกล่าว
AIX อาจมีการปรับให้เหมาะสมเหล่านี้ในอนาคต

ใช้ตัวเลือกเหล่านี้เฉพาะเมื่อมีประโยชน์ที่สำคัญจากการทำเช่นนั้นเท่านั้น เมื่อคุณ
ระบุตัวเลือกเหล่านี้แอสเซมเบลอร์และลิงเกอร์สร้างวัตถุขนาดใหญ่และปฏิบัติการได้
ไฟล์และยังช้ากว่า ใช้งานไม่ได้ gprof ในทุกระบบหากคุณระบุสิ่งนี้
และคุณอาจมีปัญหากับการดีบักหากคุณระบุทั้งตัวเลือกนี้และ
-g.

-fbranch-target-load-optimize
ดำเนินการเพิ่มประสิทธิภาพการโหลดรีจิสเตอร์เป้าหมายสาขาก่อนทำเธรดอารัมภบท / บทส่งท้าย
โดยทั่วไปแล้วการใช้รีจิสเตอร์เป้าหมายสามารถเปิดเผยได้เฉพาะในระหว่างการบรรจุใหม่เท่านั้น ดังนั้นการยก
โหลดออกจากลูปและการจัดตารางเวลาระหว่างบล็อกต้องการการเพิ่มประสิทธิภาพแยกต่างหาก
ผ่านไป

-fbranch-target-load-optimize2
ดำเนินการเพิ่มประสิทธิภาพการโหลดรีจิสเตอร์เป้าหมายสาขาหลังจากเธรดอารัมภบท / บทส่งท้าย

-fbtr-bb-exclusive
เมื่อดำเนินการเพิ่มประสิทธิภาพการโหลดการลงทะเบียนเป้าหมายของสาขา อย่าใช้เป้าหมายของสาขาซ้ำ
ลงทะเบียนภายในบล็อกพื้นฐานใด ๆ

-fstack- ป้องกัน
ปล่อยโค้ดพิเศษเพื่อตรวจสอบบัฟเฟอร์ล้น เช่น การโจมตีแบบ stack smashing นี้
ทำได้โดยการเพิ่มตัวแปรป้องกันในการทำงานกับวัตถุที่มีช่องโหว่ นี้
รวมฟังก์ชันที่เรียกใช้ "alloca" และฟังก์ชันที่มีบัฟเฟอร์ขนาดใหญ่กว่า 8 ไบต์
ยามจะเริ่มต้นเมื่อป้อนฟังก์ชันแล้วตรวจสอบเมื่อ
ออกจากฟังก์ชัน หากการตรวจสอบยามล้มเหลว จะมีการพิมพ์ข้อความแสดงข้อผิดพลาดและโปรแกรม
ทางออก

-fstack-protector-ทั้งหมด
ชอบ -fstack- ป้องกัน ยกเว้นว่าฟังก์ชันทั้งหมดได้รับการคุ้มครอง

-fstack-protector-strong
ชอบ -fstack- ป้องกัน แต่รวมถึงหน้าที่เพิ่มเติมที่จะได้รับการคุ้มครอง --- เหล่านั้น
ที่มีคำจำกัดความอาร์เรย์ท้องถิ่นหรือมีการอ้างอิงไปยังที่อยู่เฟรมภายในเครื่อง

-fstack-protector-explicit
ชอบ -fstack- ป้องกัน แต่ปกป้องเฉพาะหน้าที่ที่มี
แอตทริบิวต์ "stack_protect"

-fstdarg-opt
ปรับอารัมภบทของฟังก์ชันอาร์กิวเมนต์แบบแปรผันให้เหมาะสมที่สุดเกี่ยวกับการใช้งานเหล่านั้น
ข้อโต้แย้ง

หมายเหตุ: ใน Ubuntu 14.10 และเวอร์ชันที่ใหม่กว่า -fstack-protector-strong เปิดใช้งานโดย
ค่าเริ่มต้นสำหรับ C, C++, ObjC, ObjC++ หากไม่มี -fno-stack-protector, -nostdlib, หรือ
-ffreestanding จะพบ

-fsection-สมอ
พยายามลดจำนวนการคำนวณที่อยู่เชิงสัญลักษณ์โดยใช้ "สมอ" ที่แชร์
สัญลักษณ์ที่อยู่วัตถุใกล้เคียง การเปลี่ยนแปลงนี้สามารถช่วยลดจำนวนได้
ของรายการ GOT และ GOT เข้าถึงบางเป้าหมาย

ตัวอย่างเช่น การใช้งานฟังก์ชัน "foo" ต่อไปนี้:

คงที่ int a, b, c;
int foo (เป็นโมฆะ) { ส่งคืน a + b + c; }

มักจะคำนวณแอดเดรสของตัวแปรทั้งสาม แต่ถ้าคุณคอมไพล์มันด้วย
-fsection-สมอมันเข้าถึงตัวแปรจากจุดยึดทั่วไปแทน NS
ผลคล้ายกับ pseudocode ต่อไปนี้ (ซึ่งไม่ถูกต้อง C):

int foo (เป็นโมฆะ)
{
ลงทะเบียน int *xr = &x;
ส่งคืน xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

ไม่ใช่ทุกเป้าหมายที่รองรับตัวเลือกนี้

--param ชื่อ=ความคุ้มค่า
ในบางสถานที่ GCC ใช้ค่าคงที่ต่างๆ เพื่อควบคุมปริมาณของการปรับให้เหมาะสมที่
เสร็จแล้ว ตัวอย่างเช่น GCC ไม่มีฟังก์ชันอินไลน์ที่มีมากกว่าค่าที่แน่นอน
จำนวนคำสั่ง คุณสามารถควบคุมค่าคงที่เหล่านี้ได้ในบรรทัดคำสั่ง
โดยใช้โปรแกรม --param ตัวเลือก

ชื่อของพารามิเตอร์เฉพาะและความหมายของค่าต่างๆ จะเชื่อมโยงกับ
ภายในคอมไพเลอร์และอาจมีการเปลี่ยนแปลงโดยไม่ต้องแจ้งให้ทราบในอนาคต
เผยแพร่

ในแต่ละกรณี ความคุ้มค่า เป็นจำนวนเต็ม ตัวเลือกที่อนุญาตสำหรับ ชื่อ คือ:

ทำนายผลได้
เมื่อคาดการณ์ว่าจะรับสาขาด้วยความน่าจะเป็นต่ำกว่าเกณฑ์นี้
(เป็นเปอร์เซ็นต์) แล้วถือว่าคาดเดาได้ดี ค่าเริ่มต้นคือ 10

max-crossjump-ขอบ
จำนวนขอบขาเข้าสูงสุดที่ต้องพิจารณาสำหรับการกระโดดข้าม อัลกอริทึม
ใช้โดย -fcrossjumping คือ O(N^2) ในจำนวนขอบที่เข้ามาในแต่ละบล็อก
ค่าที่เพิ่มขึ้นหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น ทำให้เวลาในการรวบรวม
เพิ่มขึ้นด้วยการปรับปรุงขนาดที่ปฏิบัติการได้เล็กน้อย

min-crossjump-insns
จำนวนคำสั่งขั้นต่ำที่ต้องจับคู่ที่ส่วนท้ายของสองช่วงตึก
ก่อนที่จะทำการกระโดดข้าม ค่านี้จะถูกละเว้นในกรณี
โดยที่คำสั่งทั้งหมดในบล็อกที่ข้ามไปนั้นตรงกัน NS
ค่าเริ่มต้นคือ 5

max-grow-copy-bb-insns
ปัจจัยการขยายขนาดโค้ดสูงสุดเมื่อคัดลอกบล็อกพื้นฐานแทน
กระโดด การขยายสัมพันธ์กับคำสั่งกระโดด ค่าเริ่มต้นคือ
8.

max-goto-duplication-insns
จำนวนคำสั่งสูงสุดที่จะทำซ้ำกับบล็อกที่ข้ามไปที่
คำนวณแล้ว เพื่อหลีกเลี่ยงพฤติกรรม O(N^2) ในการผ่านหลายครั้ง ปัจจัย GCC
คำนวณ gotos ในช่วงต้นของกระบวนการคอมไพล์ และ unfactors เหล่านั้นอย่างช้าที่สุด
เป็นไปได้. คำนวณเฉพาะการกระโดดที่ส่วนท้ายของบล็อกพื้นฐานที่มีไม่เกิน max-
goto-duplication-insns ไม่มีปัจจัย ค่าเริ่มต้นคือ 8

max-delay-slot-insn-search
จำนวนคำสั่งสูงสุดที่ต้องพิจารณาเมื่อค้นหาคำสั่ง
เติมช่องหน่วงเวลา ถ้ามากกว่าจำนวนคำสั่งโดยพลการนี้
ค้นหาประหยัดเวลาจากการเติมช่องล่าช้ามีน้อยจึงหยุด
การค้นหา ค่าที่เพิ่มขึ้นหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น ทำให้
เวลาในการรวบรวมเพิ่มขึ้นโดยอาจมีการปรับปรุงเวลาดำเนินการเล็กน้อย

max-delay-slot-live-search
เมื่อพยายามเติมช่องหน่วงเวลา จำนวนคำสั่งสูงสุดที่ต้องพิจารณา
เมื่อค้นหาบล็อกที่มีข้อมูลการลงทะเบียนสดที่ถูกต้อง เพิ่มขึ้นนี้
ค่าที่เลือกโดยพลการหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น การเพิ่ม
เวลารวบรวม พารามิเตอร์นี้ควรถูกลบเมื่อรหัสสล็อตล่าช้าคือ
เขียนใหม่เพื่อรักษากราฟควบคุมการไหล

max-gcse-หน่วยความจำ
จำนวนหน่วยความจำสูงสุดโดยประมาณที่สามารถจัดสรรเพื่อดำเนินการได้
การเพิ่มประสิทธิภาพการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก ถ้าความจำมากกว่า
จำเป็นต้องระบุ การปรับให้เหมาะสมยังไม่เสร็จสิ้น

max-gcse-insertion-อัตราส่วน
หากอัตราส่วนของการแทรกนิพจน์ต่อการลบมากกว่าค่านี้สำหรับ
นิพจน์ใด ๆ จากนั้น RTL PRE จะแทรกหรือลบนิพจน์และทำให้ออกจาก
การคำนวณซ้ำซ้อนบางส่วนในสตรีมคำสั่ง ค่าเริ่มต้นคือ
20.

max-pending-list-length
จำนวนสูงสุดของการจัดกำหนดการขึ้นต่อกันที่รอดำเนินการอนุญาตก่อนที่จะล้าง
สถานะปัจจุบันและการเริ่มต้นใหม่ ฟังก์ชั่นขนาดใหญ่ที่มีสาขาน้อยหรือโทรได้
สร้างรายการที่มีขนาดใหญ่เกินไปซึ่งใช้หน่วยความจำและทรัพยากรโดยไม่จำเป็น

max-modulo-backtrack-พยายาม
จำนวนครั้งสูงสุดของความพยายามย้อนกลับที่ตัวกำหนดตารางเวลาควรทำเมื่อมอดูโล
กำหนดการวนซ้ำ ค่าที่มากขึ้นสามารถเพิ่มเวลาในการคอมไพล์ได้แบบทวีคูณ

max-inline-insns-single
พารามิเตอร์หลายตัวควบคุมอินไลเนอร์ต้นไม้ที่ใช้ใน GCC ตัวเลขนี้กำหนด
จำนวนคำสั่งสูงสุด (นับในการเป็นตัวแทนภายในของ GCC) ใน a
ฟังก์ชันเดียวที่อินไลเนอร์ของต้นไม้พิจารณาสำหรับการอินไลน์ สิ่งนี้ส่งผลกระทบเท่านั้น
ฟังก์ชันที่ประกาศแบบอินไลน์และเมธอดที่นำมาใช้ในการประกาศคลาส (C++)
ค่าเริ่มต้นคือ 400

max-inline-insns-auto
เมื่อคุณใช้ -finline-ฟังก์ชั่น (รวมอยู่ใน -O3) ฟังก์ชั่นมากมายที่จะ
มิฉะนั้น คอมไพเลอร์จะไม่ถูกพิจารณาว่าเป็นอินไลน์นิ่งจะถูกตรวจสอบ ถึง
ฟังก์ชันเหล่านั้น ขีดจำกัดที่แตกต่างกัน (จำกัดมากขึ้น) เมื่อเทียบกับฟังก์ชัน
สามารถใช้อินไลน์ที่ประกาศได้ ค่าเริ่มต้นคือ 40

inline-min-speedup
เมื่อการปรับปรุงประสิทธิภาพโดยประมาณของผู้โทร + รันไทม์ของผู้รับสายเกินนี้
ขีด จำกัด (ในเปอร์เซ็นต์) ฟังก์ชันสามารถอินไลน์โดยไม่คำนึงถึงขีด จำกัด on
--param max-inline-insns-single และ --param max-inline-insns-auto.

ฟังก์ชันขนาดใหญ่ innss
ขีดจำกัดที่ระบุฟังก์ชันขนาดใหญ่จริงๆ สำหรับฟังก์ชันที่เกินขีดจำกัดนี้
หลังจาก inlining, inlining จะถูก จำกัด โดย --param ฟังก์ชั่นขนาดใหญ่เติบโต. นี้
พารามิเตอร์มีประโยชน์ในเบื้องต้นเพื่อหลีกเลี่ยงเวลาในการรวบรวมที่รุนแรงซึ่งเกิดจากการไม่
อัลกอริธึมเชิงเส้นที่ใช้โดยส่วนหลัง ค่าเริ่มต้นคือ 2700

ฟังก์ชั่นขนาดใหญ่เติบโต
ระบุการเติบโตสูงสุดของฟังก์ชันขนาดใหญ่ที่เกิดจากการอินไลน์เป็นเปอร์เซ็นต์ NS
ค่าเริ่มต้นคือ 100 ซึ่งจำกัดการเติบโตของฟังก์ชันขนาดใหญ่เป็น 2.0 เท่าของต้นฉบับ
ขนาด.

หน่วยใหญ่-insns
ขีดจำกัดที่ระบุหน่วยการแปลขนาดใหญ่ การเจริญเติบโตที่เกิดจาก inlining ของหน่วย
เกินขีดจำกัดนี้จำกัดโดย --param อินไลน์หน่วยเติบโต. สำหรับยูนิตขนาดเล็ก
นี่อาจจะแน่นเกินไป ตัวอย่างเช่น พิจารณาหน่วยที่ประกอบด้วยฟังก์ชัน A
นั่นคืออินไลน์และ B ที่เรียก A สามครั้ง ถ้า B มีขนาดเล็กเมื่อเทียบกับ A
การเติบโตของหน่วยคือ 300\% และการวางแนวดังกล่าวก็สมเหตุสมผลมาก สำหรับขนาดใหญ่มาก
หน่วยที่ประกอบด้วยฟังก์ชัน inlineable ขนาดเล็ก อย่างไรก็ตาม การเติบโตของหน่วยโดยรวม
จำเป็นต้องมีขีดจำกัดเพื่อหลีกเลี่ยงการระเบิดของขนาดโค้ดแบบทวีคูณ ดังนั้นสำหรับขนาดเล็ก
หน่วย เพิ่มขนาดเป็น --param หน่วยใหญ่-insns ก่อนสมัคร --param
อินไลน์หน่วยเติบโต. ค่าเริ่มต้นคือ 10000

อินไลน์หน่วยเติบโต
ระบุการเติบโตโดยรวมสูงสุดของหน่วยการคอมไพล์ที่เกิดจากการอินไลน์ NS
ค่าเริ่มต้นคือ 20 ซึ่งจำกัดการเติบโตของหน่วยไว้ที่ 1.2 เท่าของขนาดดั้งเดิม หนาว
ฟังก์ชัน (ทั้งที่ทำเครื่องหมายว่าเย็นผ่านแอตทริบิวต์หรือตามความคิดเห็นของโปรไฟล์) ไม่ใช่
คิดเป็นขนาดหน่วย

ipcp-หน่วยเติบโต
ระบุการเติบโตโดยรวมสูงสุดของหน่วยการรวบรวมที่เกิดจากระหว่างขั้นตอน
การขยายพันธุ์อย่างต่อเนื่อง ค่าเริ่มต้นคือ 10 ซึ่งจำกัดการเติบโตของหน่วยเป็น 1.1
เท่าของขนาดเดิม

ใหญ่-stack-frame
ขีดจำกัดที่ระบุเฟรมสแต็กขนาดใหญ่ ในขณะที่อินไลน์อัลกอริทึมกำลังพยายาม
เพื่อไม่ให้เกินขีดจำกัดนี้มากเกินไป ค่าเริ่มต้นคือ 256 ไบต์

ใหญ่-stack-กรอบ-เติบโต
ระบุการเติบโตสูงสุดของสแต็กเฟรมขนาดใหญ่ที่เกิดจากการอินไลน์เป็นเปอร์เซ็นต์
ค่าเริ่มต้นคือ 1000 ซึ่งจำกัดการเติบโตของสแต็กเฟรมขนาดใหญ่ที่ 11 เท่า
ขนาดเดิม

max-inline-insns-recursive
max-inline-insns-recursive-auto
ระบุจำนวนคำสั่งสูงสุดที่สำเนาไม่อยู่ในบรรทัดของตนเอง
ฟังก์ชันอินไลน์แบบเรียกซ้ำสามารถเติบโตได้โดยการทำอินไลน์แบบเรียกซ้ำ

--param max-inline-insns-recursive นำไปใช้กับฟังก์ชันที่ประกาศแบบอินไลน์ สำหรับ
ฟังก์ชันที่ไม่ได้ประกาศแบบอินไลน์ อินไลน์แบบเรียกซ้ำจะเกิดขึ้นก็ต่อเมื่อ
-finline-ฟังก์ชั่น (รวมอยู่ใน -O3) เปิดใช้งาน; --param max-inline-insns-
เรียกซ้ำอัตโนมัติ ใช้แทน ค่าเริ่มต้นคือ 450

max-inline-recursive-ความลึก
max-inline-recursive-deep-auto . สูงสุด
ระบุความลึกของการเรียกซ้ำสูงสุดที่ใช้สำหรับการอินไลน์แบบเรียกซ้ำ

--param max-inline-recursive-ความลึก นำไปใช้กับฟังก์ชันที่ประกาศแบบอินไลน์ สำหรับ
ฟังก์ชันที่ไม่ได้ประกาศแบบอินไลน์ อินไลน์แบบเรียกซ้ำจะเกิดขึ้นก็ต่อเมื่อ
-finline-ฟังก์ชั่น (รวมอยู่ใน -O3) เปิดใช้งาน; --param max-inline-recursive-
ความลึกอัตโนมัติ ใช้แทน ค่าเริ่มต้นคือ 8

min-inline-recursive-probability
inlining แบบเรียกซ้ำนั้นทำกำไรได้เฉพาะสำหรับฟังก์ชันที่มีการเรียกซ้ำแบบลึกใน
เฉลี่ยและสามารถทำร้ายสำหรับฟังก์ชันที่มีความลึกการเรียกซ้ำน้อยโดยการเพิ่ม
ขนาดอารัมภบทหรือความซับซ้อนของตัวฟังก์ชันกับเครื่องมือเพิ่มประสิทธิภาพอื่นๆ

เมื่อมีความคิดเห็นเกี่ยวกับโปรไฟล์ (ดู -fprofile-สร้าง) การเรียกซ้ำที่เกิดขึ้นจริง
ความลึกสามารถเดาได้จากความน่าจะเป็นที่ฟังก์ชันเรียกซ้ำผ่านการเรียกที่กำหนด
การแสดงออก. พารามิเตอร์นี้จำกัดการอินไลน์เฉพาะเพื่อเรียกนิพจน์ซึ่ง
ความน่าจะเป็นเกินเกณฑ์ที่กำหนด (เป็นเปอร์เซ็นต์) ค่าเริ่มต้นคือ 10

หน้าแรก
ระบุการเจริญเติบโตที่อินไลเนอร์ต้นสามารถทำได้ ส่งผลให้ปริมาณเพิ่มขึ้น
ของ inlining สำหรับรหัสที่มีโทษนามธรรมขนาดใหญ่ ค่าเริ่มต้นคือ 14

max-early-inliner-iterations
ขีดจำกัดของการวนซ้ำของอินไลเนอร์ช่วงต้น โดยทั่วไปสิ่งนี้จะ จำกัด จำนวน
การเรียกทางอ้อมที่ซ้อนกันซึ่ง inliner แรก ๆ สามารถแก้ไขได้ โซ่ที่ลึกกว่านั้นยังคงอยู่
จัดการโดย inlining ปลาย

comdat-sharing-น่าจะเป็น
ความน่าจะเป็น (เป็นเปอร์เซ็นต์) ที่ฟังก์ชันอินไลน์ C++ พร้อมการมองเห็น comdat เป็น
ใช้ร่วมกันในหน่วยการคอมไพล์หลายหน่วย ค่าเริ่มต้นคือ 20

profile-func-internal-id
พารามิเตอร์ควบคุมว่าจะใช้ฟังก์ชัน internal id ในฐานข้อมูลโปรไฟล์หรือไม่
ค้นหา หากค่าเป็น 0 คอมไพเลอร์จะใช้ id ที่อิงตามฟังก์ชัน
ชื่อแอสเซมเบลอร์และชื่อไฟล์ ซึ่งทำให้ข้อมูลโปรไฟล์เก่ามีความทนทานต่อแหล่งที่มามากขึ้น
การเปลี่ยนแปลง เช่น การเรียงลำดับฟังก์ชันใหม่ เป็นต้น ค่าเริ่มต้นคือ 0

min-vect-loop-bound
จำนวนการวนซ้ำขั้นต่ำที่ไม่มีการวนซ้ำเมื่อ
-ftree-vectorize ถูกนำมาใช้. จำนวนการวนซ้ำหลังจาก vectorization จำเป็นต้อง
มากกว่าค่าที่ระบุโดยตัวเลือกนี้เพื่ออนุญาตให้ใช้เวกเตอร์ NS
ค่าเริ่มต้นคือ 0

gcse-cost-distance-ratio
ตัวคูณมาตราส่วนในการคำนวณระยะทางสูงสุดนิพจน์สามารถย้ายโดย
การเพิ่มประสิทธิภาพ GCSE ปัจจุบันนี้รองรับเฉพาะในรหัส hoisting pass
ยิ่งอัตราส่วนมากเท่าไร การรอกโค้ดก็จะยิ่งซับซ้อนมากขึ้นเท่านั้น
นิพจน์ กล่าวคือ นิพจน์ที่มีราคาน้อยกว่า gcse-ไม่จำกัด-
ราคา. การระบุ 0 ปิดใช้งานการยกนิพจน์ทั่วไป ค่าเริ่มต้นคือ
10.

gcse-ไม่จำกัดค่าใช้จ่าย
ต้นทุน วัดโดยคร่าว ๆ เป็นต้นทุนของคำสั่งเครื่องเดียวทั่วไป ที่
ซึ่งการเพิ่มประสิทธิภาพ GCSE ไม่ได้จำกัดระยะทางที่นิพจน์สามารถเดินทางได้
ปัจจุบันนี้รองรับเฉพาะในรหัส hoisting pass ค่าใช้จ่ายที่น้อยกว่า,
ยิ่งการยกโค้ดที่ก้าวร้าวมากขึ้นเท่าไหร่ การระบุ 0 ช่วยให้นิพจน์ทั้งหมดเป็น
เดินทางได้ไม่จำกัดระยะทาง ค่าเริ่มต้นคือ 3

สูงสุดรอกความลึก
ความลึกของการค้นหาในทรี dominator สำหรับนิพจน์ที่จะยก มันถูกใช้
เพื่อหลีกเลี่ยงพฤติกรรมกำลังสองในอัลกอริทึมการชักรอก ค่า 0 ไม่จำกัด
ในการค้นหา แต่อาจทำให้การรวบรวมฟังก์ชั่นขนาดใหญ่ช้าลง ค่าเริ่มต้น
คือ 30

max-tail-merge-comparisons
จำนวน bb ที่ใกล้เคียงกันสูงสุดเพื่อเปรียบเทียบ bb ด้วย นี้ใช้เพื่อหลีกเลี่ยง
พฤติกรรมกำลังสองในการรวมหางต้นไม้ ค่าเริ่มต้นคือ 10

max-tail-merge-iterations
จำนวนครั้งสูงสุดของการส่งผ่านฟังก์ชัน ใช้เพื่อ
จำกัดเวลาการรวบรวมในการรวมหางต้นไม้ ค่าเริ่มต้นคือ 2

max-unrolled-insns
จำนวนคำสั่งสูงสุดที่อาจต้องคลายการวนซ้ำ หากวนซ้ำ
ถูกคลี่ออก พารามิเตอร์นี้ยังกำหนดจำนวนครั้งที่รหัสลูปคือ
คลี่คลาย

max-average-unrolled-insns
จำนวนคำสั่งสูงสุดที่ลำเอียงโดยความน่าจะเป็นของการดำเนินการนั้น
อาจต้องคลี่คลายห่วง หากมีการวนซ้ำ พารามิเตอร์นี้ยัง
กำหนดจำนวนครั้งที่คลายโค้ดวนซ้ำ

max-unroll-times
จำนวนสูงสุดของการคลี่คลายลูปเดียว

max-peeled-insns
จำนวนคำสั่งสูงสุดที่อาจต้องลอกลูป หากวนซ้ำ
ถูกลอก พารามิเตอร์นี้ยังกำหนดจำนวนครั้งที่ลอกโค้ดลูป

max-peel-times
จำนวนสูงสุดของการปอกของวงเดียว

max-peel-สาขา
จำนวนกิ่งสูงสุดบนเส้นทางร้อนผ่านลำดับที่ปอกเปลือก

max-completely-peeled-insns
จำนวนสูงสุดของ inns ของการปอกอย่างสมบูรณ์

max-completely-peel-times สูงสุด
จำนวนรอบสูงสุดของการวนซ้ำเพื่อให้เหมาะสำหรับการลอกแบบสมบูรณ์

max-completely-peel-loop-nest-ความลึก
ความลึกสูงสุดของรังแบบวนซ้ำเหมาะสำหรับการลอกแบบสมบูรณ์

max-unswitch-insns
จำนวนครั้งสูงสุดของการวนซ้ำที่ไม่ได้สลับ

max-unswitch-ระดับ
จำนวนสาขาสูงสุดที่ไม่ได้เปลี่ยนในลูปเดียว

ราคาแพง
ต้นทุนขั้นต่ำของนิพจน์ราคาแพงในการเคลื่อนที่แบบวนซ้ำ

iv-พิจารณา-ทั้งหมด-ผู้สมัครที่ถูกผูกไว้
ผูกกับจำนวนผู้สมัครสำหรับตัวแปรเหนี่ยวนำ ด้านล่างซึ่งผู้สมัครทั้งหมด
ได้รับการพิจารณาสำหรับการใช้งานแต่ละครั้งในการเพิ่มประสิทธิภาพตัวแปรเหนี่ยวนำ ถ้ามี
ผู้สมัครมากกว่านี้ พิจารณาเฉพาะผู้ที่เกี่ยวข้องมากที่สุดเท่านั้นที่จะหลีกเลี่ยง
ความซับซ้อนของเวลากำลังสอง

iv-max-พิจารณาใช้
การปรับให้เหมาะสมตัวแปรเหนี่ยวนำให้ขึ้นในลูปที่มีการเหนี่ยวนำมากขึ้น
การใช้ตัวแปร

iv-always-prune-cand-set-bound
หากจำนวนผู้สมัครในชุดน้อยกว่าค่านี้ ให้ลอง .เสมอ
ลบ ivs ที่ไม่จำเป็นออกจากชุดเมื่อเพิ่มใหม่

scev-max-expr-ขนาด
ผูกพันกับขนาดของนิพจน์ที่ใช้ในเครื่องวิเคราะห์วิวัฒนาการสเกลาร์ ใหญ่
นิพจน์ทำให้เครื่องวิเคราะห์ช้าลง

scev-max-expr-ความซับซ้อน
ผูกพันกับความซับซ้อนของนิพจน์ในตัววิเคราะห์สเกลาร์วิวัฒนาการ
นิพจน์ที่ซับซ้อนทำให้ตัววิเคราะห์ช้าลง

omega-max-vars
จำนวนตัวแปรสูงสุดในระบบข้อจำกัดโอเมก้า ค่าเริ่มต้น
คือ 128

omega-max-geqs
จำนวนความไม่เท่าเทียมกันสูงสุดในระบบข้อจำกัดโอเมก้า ค่าเริ่มต้น
ค่าคือ 256

omega-max-eqs
จำนวนสูงสุดของความเท่าเทียมกันในระบบข้อจำกัดโอเมก้า ค่าเริ่มต้น
คือ 128

Omega-max-wild-cards
จำนวนตัวแปรไวด์การ์ดสูงสุดที่โปรแกรมแก้ปัญหา Omega สามารถแทรกได้
ค่าเริ่มต้นคือ 18

Omega-hash-table-size
ขนาดของตารางแฮชในโปรแกรมแก้ปัญหาโอเมก้า ค่าเริ่มต้นคือ 550

omega-max-keys
จำนวนคีย์สูงสุดที่ใช้โดยโปรแกรมแก้ปัญหา Omega ค่าเริ่มต้นคือ 500

โอเมก้า-กำจัด-ซ้ำซ้อน-ข้อจำกัด
เมื่อตั้งค่าเป็น 1 ให้ใช้วิธีการที่มีราคาแพงเพื่อขจัดข้อจำกัดที่ซ้ำซ้อนทั้งหมด NS
ค่าเริ่มต้นคือ 0

vect-max-version-for-alignment-checks
จำนวนสูงสุดของการตรวจสอบรันไทม์ที่สามารถทำได้เมื่อทำการวนซ้ำ
การกำหนดเวอร์ชันสำหรับการจัดตำแหน่งใน vectorizer

vect-max-version-for-alias-checks
จำนวนสูงสุดของการตรวจสอบรันไทม์ที่สามารถทำได้เมื่อทำการวนซ้ำ
การกำหนดเวอร์ชันสำหรับนามแฝงใน vectorizer

vect-max-peeling-for-การจัดตำแหน่ง
จำนวนสูงสุดของการลอกลูปเพื่อเพิ่มประสิทธิภาพการจัดตำแหน่งการเข้าถึงสำหรับ vectorizer ค่า
-1 หมายถึง 'ไม่จำกัด'

max-iterations-to-track
จำนวนสูงสุดของการวนซ้ำอัลกอริทึมเดรัจฉานสำหรับการวิเคราะห์
ของจำนวนการวนซ้ำของลูปที่พยายามประเมิน

hot-bb-count-ws-permille
จำนวนโปรไฟล์บล็อกพื้นฐานถือว่าน่าสนใจหากมีส่วนทำให้
permillage (เช่น 0...1000) ของการดำเนินการที่ทำโปรไฟล์ทั้งหมด

ร้อน-bb-ความถี่-เศษส่วน
เลือกเศษของความถี่บล็อกการเข้าของการดำเนินการของบล็อกพื้นฐานใน
ฟังก์ชั่นที่ได้รับจากบล็อกพื้นฐานจะต้องได้รับการพิจารณาว่าร้อน

max-predicted-iterations
จำนวนสูงสุดของการวนซ้ำแบบวนซ้ำที่เราคาดการณ์แบบคงที่ สิ่งนี้มีประโยชน์ใน
กรณีที่ฟังก์ชันมีลูปเดียวที่มีขอบเขตที่รู้จักและลูปอื่น
ด้วยขอบเขตที่ไม่รู้จัก จำนวนการวนซ้ำที่ทราบนั้นคาดการณ์ได้อย่างถูกต้องในขณะที่
ไม่ทราบจำนวนการวนซ้ำเฉลี่ยประมาณ 10 ซึ่งหมายความว่าลูป
ไร้ขอบเขตดูเหมือนเยือกเย็นเมื่อเทียบกับอีกฝ่ายหนึ่ง

ในตัวคาดหวังความน่าจะเป็น
ควบคุมความน่าจะเป็นของนิพจน์ที่มีค่าที่ระบุ นี้
พารามิเตอร์ใช้เปอร์เซ็นต์ (เช่น 0 ... 100) เป็นอินพุต ความน่าจะเป็นเริ่มต้น
ของ 90 ได้จากการสังเกต

จัดแนวเกณฑ์
เลือกเศษส่วนของความถี่สูงสุดของการดำเนินการของบล็อกพื้นฐานใน
ฟังก์ชันเพื่อจัดแนวบล็อกพื้นฐาน

align-loop-iterations
การวนซ้ำที่คาดว่าจะวนซ้ำอย่างน้อยตามจำนวนการวนซ้ำที่เลือกจะถูกจัดตำแหน่ง

ติดตามไดนามิกครอบคลุม
ติดตามไดนามิกครอบคลุมข้อเสนอแนะ
ค่านี้ใช้เพื่อจำกัดการสร้าง superblock เมื่อคิดเป็นเปอร์เซ็นต์ของ
คำแนะนำที่ดำเนินการจะครอบคลุม สิ่งนี้จำกัดการขยายขนาดโค้ดที่ไม่จำเป็น

พื้นที่ปลูก ติดตามไดนามิกครอบคลุมข้อเสนอแนะ พารามิเตอร์จะใช้เฉพาะเมื่อข้อเสนอแนะโปรไฟล์
สามารถใช้ได้. โปรไฟล์จริง (เมื่อเทียบกับการประมาณค่าแบบสถิต) คือ
สมดุลน้อยกว่ามากทำให้เกณฑ์มีค่ามากขึ้น

tracer-max-code-growth
หยุดการทำสำเนาหางเมื่อการเติบโตของโค้ดถึงเปอร์เซ็นต์ที่กำหนด มันคือ
ขีด จำกัด ที่ค่อนข้างประดิษฐ์เนื่องจากสำเนาส่วนใหญ่จะถูกลบออกในภายหลังในกากบาท
กระโดดดังนั้นจึงอาจตั้งค่าให้สูงกว่าการเติบโตของโค้ดที่ต้องการได้มาก

tracer-min-สาขา-อัตราส่วน
หยุดการเติบโตแบบย้อนกลับเมื่อความน่าจะเป็นย้อนกลับของขอบที่ดีที่สุดน้อยกว่านี้
เกณฑ์ (เป็นเปอร์เซ็นต์)

tracer-min-สาขา-อัตราส่วน
tracer-min-branch-ratio-feedback
หยุดการเติบโตไปข้างหน้าหากขอบที่ดีที่สุดมีความเป็นไปได้ต่ำกว่าเกณฑ์นี้

ในทำนองเดียวกันกับ ติดตามไดนามิกครอบคลุม มีค่าสองค่า ค่าหนึ่งสำหรับการรวบรวม
สำหรับข้อเสนอแนะโปรไฟล์และอีกรายการสำหรับการรวบรวมโดยไม่ต้อง มูลค่าการรวบรวม
กับความคิดเห็นโปรไฟล์จะต้องระมัดระวังมากขึ้น (สูงกว่า) เพื่อให้
ตัวติดตามมีประสิทธิภาพ

max-cse-path-length
จำนวนบล็อกพื้นฐานสูงสุดบนเส้นทางที่ CSE พิจารณา ค่าเริ่มต้นคือ 10

max-cse-insns
จำนวนสูงสุดของคำสั่ง CSE ที่ประมวลผลก่อนการฟลัช ค่าเริ่มต้นคือ
1000.

ggc-min-ขยาย
GCC ใช้ตัวรวบรวมขยะเพื่อจัดการการจัดสรรหน่วยความจำของตัวเอง พารามิเตอร์นี้
ระบุเปอร์เซ็นต์ขั้นต่ำที่ฮีปของตัวรวบรวมขยะควรเป็น
อนุญาตให้ขยายระหว่างคอลเลกชัน การปรับแต่งนี้อาจช่วยเพิ่มความเร็วในการคอมไพล์;
ไม่มีผลกับการสร้างโค้ด

ค่าเริ่มต้นคือ 30% + 70% * (RAM/1GB) โดยมีขอบเขตบนเป็น 100% เมื่อ RAM >= 1GB
หาก "getrlimit" พร้อมใช้งาน แนวคิดของ "RAM" จะเล็กที่สุดของ RAM จริงและ
"RLIMIT_DATA" หรือ "RLIMIT_AS" หาก GCC ไม่สามารถคำนวณ RAM ได้โดยเฉพาะ
แพลตฟอร์ม ใช้ขอบล่าง 30% การตั้งค่าพารามิเตอร์นี้และ ggc-นาที-
heapsize เป็นศูนย์ทำให้เกิดการรวบรวมเต็มรูปแบบในทุกโอกาส นี่คือ
ช้ามาก แต่อาจมีประโยชน์สำหรับการดีบัก

ggc-min-heapsize
ขนาดขั้นต่ำของกองขยะก่อนที่จะเริ่มรบกวนการรวบรวม
ขยะ. คอลเล็กชันแรกเกิดขึ้นหลังจากฮีปขยายโดย ggc-min-ขยาย%
เกิน ggc-min-heapsize. อีกครั้ง การปรับแต่งนี้อาจช่วยเพิ่มความเร็วในการรวบรวมและ
ไม่มีผลกับการสร้างโค้ด

ค่าดีฟอลต์คือ RAM/8, RLIMIT_RSS ที่เล็กกว่าหรือขีดจำกัดที่พยายามทำให้แน่ใจว่า
ที่ RLIMIT_DATA หรือ RLIMIT_AS ไม่เกิน แต่มีขอบล่างที่4096
(สี่เมกะไบต์) และขอบบนที่ 131072 (128 เมกะไบต์) หาก GCC ไม่สามารถทำได้
ในการคำนวณ RAM บนแพลตฟอร์มใดแพลตฟอร์มหนึ่ง จะใช้ขอบเขตล่าง การตั้งค่านี้
พารามิเตอร์ขนาดใหญ่มากปิดการใช้งานการรวบรวมขยะอย่างมีประสิทธิภาพ การตั้งค่านี้
พารามิเตอร์และ ggc-min-ขยาย เป็นศูนย์ทำให้คอลเลกชันเต็มรูปแบบเกิดขึ้นที่ทุก ๆ
โอกาส

max-reload-search-insns
จำนวนสูงสุดของคำสั่งที่โหลดซ้ำควรมองย้อนกลับเพื่อเทียบเท่า
ลงทะเบียน. ค่าที่เพิ่มขึ้นหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น ทำให้
เวลาในการรวบรวมเพิ่มขึ้นด้วยประสิทธิภาพที่ดีขึ้นเล็กน้อย ค่าเริ่มต้น
ค่าคือ 100

max-cselib-memory-locations
จำนวนสูงสุดของตำแหน่งหน่วยความจำ cselib ควรนำมาพิจารณาด้วย
ค่าที่เพิ่มขึ้นหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น ทำให้เวลาในการรวบรวม
เพิ่มขึ้นด้วยประสิทธิภาพที่ดีขึ้นเล็กน้อย ค่าเริ่มต้นคือ 500

เรียงลำดับใหม่บล็อกซ้ำ
เรียงลำดับใหม่บล็อกซ้ำข้อเสนอแนะ
ใช้โดยลำดับการเรียงลำดับบล็อกพื้นฐานใหม่เพื่อตัดสินใจว่าจะใช้แบบไม่มีเงื่อนไขหรือไม่
สาขาหรือทำซ้ำรหัสในปลายทาง รหัสจะซ้ำกันเมื่อของมัน
ขนาดโดยประมาณมีขนาดเล็กกว่าค่านี้คูณด้วยขนาดโดยประมาณของ
กระโดดอย่างไม่มีเงื่อนไขในฮอตสปอตของโปรแกรม

พื้นที่ปลูก เรียงลำดับใหม่บล็อกซ้ำข้อเสนอแนะ พารามิเตอร์จะใช้เฉพาะเมื่อข้อเสนอแนะโปรไฟล์
สามารถใช้ได้. อาจถูกตั้งค่าเป็นค่าที่สูงกว่า เรียงลำดับใหม่บล็อกซ้ำ ตั้งแต่
ข้อมูลเกี่ยวกับฮอตสปอตมีความแม่นยำมากขึ้น

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
ค่าเริ่มต้น) ปิดใช้งานส่วนขยายภูมิภาค

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-lookahead
ขนาดสูงสุดของหน้าต่าง lookahead ของการจัดกำหนดการแบบเลือกสรร มันเป็นความลึก
ของการค้นหาคำแนะนำที่มีอยู่ ค่าเริ่มต้นคือ 50

selsched-max-sched-times
จำนวนครั้งสูงสุดที่กำหนดคำสั่งระหว่างการเลือก
การตั้งเวลา นี่คือการจำกัดจำนวนการวนซ้ำที่
คำสั่งอาจวางท่อ ค่าเริ่มต้นคือ 2

selsched-max-insns-to-rename
จำนวนคำสั่งที่ดีที่สุดสูงสุดในรายการพร้อมที่พิจารณา
การเปลี่ยนชื่อในตัวกำหนดตารางเวลาที่เลือก ค่าเริ่มต้นคือ 2

SMS-นาที-sc
ค่าต่ำสุดของการนับสเตจที่สร้างตัวจัดกำหนดการสวิงโมดูโล NS
ค่าเริ่มต้นคือ 2

max-last-value-rtl
ขนาดสูงสุดที่วัดเป็นจำนวน RTL ที่สามารถบันทึกได้ในนิพจน์
ในตัวรวมสำหรับการลงทะเบียนหลอกเป็นค่าที่ทราบล่าสุดของการลงทะเบียนนั้น NS
ค่าเริ่มต้นคือ 10000

max-combine-insns
จำนวนคำสั่งสูงสุดที่ตัวรวม RTL พยายามรวม ค่าเริ่มต้น
ค่าคือ 2 at -Og และ 4 อย่างอื่น

integer-share-limit
ค่าคงที่จำนวนเต็มขนาดเล็กสามารถใช้โครงสร้างข้อมูลที่ใช้ร่วมกันได้ โดยลดขนาดของคอมไพเลอร์
การใช้หน่วยความจำและเพิ่มความเร็ว สิ่งนี้ตั้งค่าสูงสุดของการแชร์
ค่าคงที่จำนวนเต็ม ค่าเริ่มต้นคือ 256

ssp-บัฟเฟอร์-ขนาด
ขนาดต่ำสุดของบัฟเฟอร์ (เช่น อาร์เรย์) ที่ได้รับการป้องกันการทุบสแต็ก
เมื่อ -fstack-ป้องกัน ถูกนำมาใช้.

ค่าเริ่มต้นนี้ก่อน Ubuntu 10.10 คือ "8" ปัจจุบันเป็น "4" เพื่อเพิ่ม
จำนวนฟังก์ชันที่ป้องกันโดยตัวป้องกันปล่อง

min-size-for-stack-sharing
ขนาดต่ำสุดของตัวแปรที่มีส่วนร่วมในการแบ่งปันสล็อตสแต็กเมื่อไม่
การเพิ่มประสิทธิภาพ ค่าเริ่มต้นคือ 32

max-jump-thread-duplication-stmts
จำนวนคำสั่งสูงสุดที่อนุญาตในบล็อกที่ต้องทำซ้ำเมื่อ
กระโดดเกลียว

max-fields-for-field-sensitive
จำนวนสูงสุดของฟิลด์ในโครงสร้างที่ปฏิบัติในลักษณะที่ละเอียดอ่อนของฟิลด์ระหว่าง
การวิเคราะห์ตัวชี้ ค่าเริ่มต้นคือศูนย์สำหรับ -O0 และ -O1และ 100 สำหรับ -Os, -O2และ
-O3.

การดึงข้อมูลล่วงหน้า-แฝง
ประมาณการจำนวนคำสั่งเฉลี่ยที่ดำเนินการก่อนดึงข้อมูลล่วงหน้า
เสร็จสิ้น ระยะทางล่วงหน้าเป็นสัดส่วนกับค่าคงที่นี้
การเพิ่มจำนวนนี้อาจนำไปสู่การดึงสตรีมล่วงหน้าน้อยลง (ดู
พร้อมกัน-prefetches).

พร้อมกัน-prefetches
จำนวนการดึงข้อมูลล่วงหน้าสูงสุดที่สามารถเรียกใช้ได้พร้อมกัน

l1-cache-line-size
ขนาดของบรรทัดแคชในแคช L1 หน่วยเป็นไบต์

l1-cache-size
ขนาดของแคช L1 ในหน่วยกิโลไบต์

l2-cache-size
ขนาดของแคช L2 ในหน่วยกิโลไบต์

min-insn-to-prefetch-อัตราส่วน
อัตราส่วนขั้นต่ำระหว่างจำนวนคำสั่งและจำนวนการดึงข้อมูลล่วงหน้า
เพื่อเปิดใช้งานการดึงข้อมูลล่วงหน้าในลูป

prefetch-min-insn-to-mem-อัตราส่วน
อัตราส่วนขั้นต่ำระหว่างจำนวนคำสั่งและจำนวนหน่วยความจำ
การอ้างอิงเพื่อเปิดใช้งานการดึงข้อมูลล่วงหน้าในลูป

use-canonical-types
คอมไพเลอร์ควรใช้ระบบประเภท "บัญญัติ" หรือไม่ โดยค่าเริ่มต้น this
ควรเป็น 1 เสมอ ซึ่งใช้กลไกภายในที่มีประสิทธิภาพมากขึ้นในการเปรียบเทียบ
ประเภท C++ และ Objective-C++ อย่างไรก็ตาม หากข้อบกพร่องในระบบประเภทบัญญัติคือ
ทำให้การรวบรวมล้มเหลว ตั้งค่านี้เป็น 0 เพื่อปิดใช้งานประเภทบัญญัติ

เปลี่ยน-แปลง-สูงสุด-สาขา-อัตราส่วน
การแปลงการเริ่มต้นสวิตช์ปฏิเสธที่จะสร้างอาร์เรย์ที่ใหญ่กว่า
เปลี่ยน-แปลง-สูงสุด-สาขา-อัตราส่วน คูณด้วยจำนวนสาขาในสวิตช์

max-partial-antic-length
ความยาวสูงสุดของชุดป้องกันบางส่วนที่คำนวณระหว่างต้นไม้บางส่วน
การเพิ่มประสิทธิภาพการกำจัดความซ้ำซ้อน (-ftree-pre) เมื่อเพิ่มประสิทธิภาพที่ -O3 ขึ้นไป
สำหรับซอร์สโค้ดบางประเภท การกำจัดความซ้ำซ้อนที่ปรับปรุงแล้ว
การปรับให้เหมาะสมอาจหนีไป ใช้หน่วยความจำทั้งหมดที่มีอยู่บนโฮสต์
เครื่องจักร. พารามิเตอร์นี้กำหนดขีดจำกัดความยาวของชุดที่คำนวณ
ซึ่งป้องกันพฤติกรรมหลบหนี การตั้งค่าเป็น 0 สำหรับพารามิเตอร์นี้
อนุญาตให้กำหนดความยาวได้ไม่จำกัด

sccvn-max-scc-size
ขนาดสูงสุดของส่วนประกอบที่เชื่อมต่ออย่างแน่นหนา (SCC) ระหว่างการประมวลผล SCCVN ถ้า
ถึงขีดจำกัดนี้แล้ว การประมวลผล SCCVN สำหรับฟังก์ชันทั้งหมดยังไม่เสร็จสิ้นและ
การเพิ่มประสิทธิภาพขึ้นอยู่กับมันถูกปิดใช้งาน ขนาด SCC สูงสุดเริ่มต้นคือ
10000.

sccvn-max-alias-queries-per-access
จำนวนการสืบค้นนามแฝง-oracle สูงสุดที่เราทำเมื่อมองหาความซ้ำซ้อน
สำหรับการบรรทุกและร้านค้า หากถึงขีดจำกัดนี้ การค้นหาจะถูกยกเลิกและโหลดหรือ
ร้านค้าไม่ถือว่าซ้ำซ้อน จำนวนการสืบค้นเป็นอัลกอริทึม
จำกัดจำนวนร้านค้าในทุกเส้นทางตั้งแต่โหลดจนถึงรายการฟังก์ชัน
จำนวนการค้นหาสูงสุดเริ่มต้นคือ 1000

ira-max-loops-num
IRA ใช้การจัดสรรการลงทะเบียนระดับภูมิภาคโดยค่าเริ่มต้น หากฟังก์ชันมี more
วนซ้ำกว่าจำนวนที่กำหนดโดยพารามิเตอร์นี้ ไม่เกินจำนวนที่กำหนดเท่านั้น
ลูปที่เรียกใช้บ่อยที่สุดจะสร้างภูมิภาคสำหรับการจัดสรรรีจิสเตอร์ระดับภูมิภาค
ค่าเริ่มต้นของพารามิเตอร์คือ 100

ira-max-conflict-table-size
แม้ว่า IRA จะใช้อัลกอริธึมที่ซับซ้อนในการบีบอัดตารางข้อขัดแย้ง
ตารางยังคงต้องใช้หน่วยความจำมากเกินไปสำหรับฟังก์ชันขนาดใหญ่ ถ้า
ตารางข้อขัดแย้งสำหรับฟังก์ชันอาจมีมากกว่าขนาดในหน่วย MB ที่กำหนดโดยสิ่งนี้
พารามิเตอร์ register allocator ใช้เร็วกว่า ง่ายกว่า และต่ำกว่า
อัลกอริธึมคุณภาพที่ไม่ต้องสร้างตารางข้อขัดแย้งการลงทะเบียนหลอก
ค่าเริ่มต้นของพารามิเตอร์คือ 2000

ira-loop-reserved-regs
IRA สามารถใช้เพื่อประเมินแรงกดดันการลงทะเบียนที่แม่นยำยิ่งขึ้นในลูปสำหรับการตัดสินใจ
เพื่อย้ายค่าคงที่ของลูป (ดู -O3). จำนวนการลงทะเบียนที่สงวนไว้สำหรับ
วัตถุประสงค์อื่น ๆ ถูกกำหนดโดยพารามิเตอร์นี้ ค่าเริ่มต้นของ
พารามิเตอร์คือ 2 ซึ่งเป็นจำนวนรีจิสเตอร์ขั้นต่ำที่โดยทั่วไปต้องการ
คำแนะนำ. ค่านี้เป็นค่าที่ดีที่สุดจากการทดลองจำนวนมาก

lra-inheritance-ebb-probability-cutoff
LRA พยายามใช้ค่าที่โหลดซ้ำในรีจิสเตอร์ในครั้งต่อๆ ไป นี้
การเพิ่มประสิทธิภาพเรียกว่าการสืบทอด EBB ถูกใช้เป็นภูมิภาคในการทำสิ่งนี้
การเพิ่มประสิทธิภาพ พารามิเตอร์กำหนดความน่าจะเป็นขอบตกผ่านน้อยที่สุดใน
เปอร์เซ็นต์ที่ใช้เพื่อเพิ่ม BB ในการสืบทอด EBB ใน LRA ค่าเริ่มต้นของ
พารามิเตอร์คือ 40 ค่านี้ถูกเลือกจากการรัน SPEC2000 หลายครั้งบน x86-64

loop-invariant-max-bbs-in-loop
การเคลื่อนที่แบบวนซ้ำอาจมีราคาแพงมาก ทั้งในเวลารวบรวมและใน
จำนวนหน่วยความจำเวลาคอมไพล์ที่จำเป็น พร้อมลูปขนาดใหญ่มาก วนซ้ำกับ more
บล็อกพื้นฐานที่มากกว่าพารามิเตอร์นี้จะไม่มีการเพิ่มประสิทธิภาพการเคลื่อนที่แบบวนซ้ำ
ดำเนินการกับพวกเขา ค่าเริ่มต้นของพารามิเตอร์คือ 1000 for -O1 และ 10000
for -O2 ขึ้นไป

loop-max-datarefs-for-datadeps
การสร้าง data dapendencies นั้นมีราคาแพงสำหรับลูปที่มีขนาดใหญ่มาก พารามิเตอร์นี้
จำกัดจำนวนการอ้างอิงข้อมูลในลูปที่พิจารณาสำหรับ data
การวิเคราะห์การพึ่งพาอาศัยกัน ลูปขนาดใหญ่เหล่านี้ไม่ได้รับการจัดการโดยการปรับให้เหมาะสมโดยใช้
การพึ่งพาข้อมูลแบบวนซ้ำ ค่าเริ่มต้นคือ 1000

max-vartrack-size
ตั้งค่าจำนวนช่องตารางแฮชสูงสุดที่จะใช้ระหว่างกระแสข้อมูลการติดตามตัวแปร
การวิเคราะห์ฟังก์ชันใด ๆ หากเกินขีดจำกัดนี้ด้วยการติดตามตัวแปรที่
เปิดใช้งานการมอบหมาย การวิเคราะห์สำหรับฟังก์ชันนั้นจะถูกลองใหม่โดยไม่มีหลังจาก
ลบ debug insns ทั้งหมดออกจากฟังก์ชัน หากเกินขีดจำกัดแม้ไม่มี
แก้ปัญหา insns การวิเคราะห์การติดตาม var ถูกปิดใช้งานอย่างสมบูรณ์สำหรับฟังก์ชัน
การตั้งค่าพารามิเตอร์เป็นศูนย์ทำให้ไม่จำกัด

max-vartrack-expr-ความลึก
ตั้งค่าจำนวนระดับการเรียกซ้ำสูงสุดเมื่อพยายามจับคู่ชื่อตัวแปรหรือ
ดีบักชั่วคราวในนิพจน์ค่า เวลารวบรวมการค้านี้มากขึ้น
ข้อมูลการดีบักที่สมบูรณ์ หากตั้งค่าไว้ต่ำเกินไป นิพจน์ค่าที่เป็น
พร้อมใช้งานและสามารถแสดงในข้อมูลการดีบักได้อาจไม่ถูกใช้
การตั้งค่าให้สูงขึ้นอาจทำให้คอมไพเลอร์สามารถค้นหาการดีบักที่ซับซ้อนมากขึ้นได้
นิพจน์ แต่เวลารวบรวมและการใช้หน่วยความจำอาจเพิ่มขึ้น ค่าเริ่มต้นคือ 12

min-nondebug-insn-uid
ใช้ uid เริ่มต้นที่พารามิเตอร์นี้สำหรับ nondebug insns ช่วงด้านล่าง
พารามิเตอร์ถูกสงวนไว้เฉพาะสำหรับการดีบัก insns ที่สร้างโดย
-fvar-tracking-assignmentsแต่ debug insns อาจได้รับ uid (ไม่ทับซ้อนกัน) ด้านบน
ถ้าช่วงที่จองไว้หมด

ipa-sra-ptr-growth-factor
IPA-SRA แทนที่ตัวชี้เป็นการรวมด้วยพารามิเตอร์ใหม่อย่างน้อยหนึ่งรายการเท่านั้น
เมื่อขนาดสะสมน้อยกว่าหรือเท่ากับ ipa-sra-ptr-growth-factor คูณด้วย
ขนาดของพารามิเตอร์ตัวชี้เดิม

sra-max-scalarization-size-Ospeed
sra-max-scalarization-size-Osize
การลดสเกลาร์ของการรวมสองครั้ง (SRA และ IPA-SRA) มีวัตถุประสงค์เพื่อแทนที่
ส่วนสเกลาร์ของมวลรวมโดยใช้ตัวแปรสเกลาร์อิสระ เหล่านี้
พารามิเตอร์ควบคุมขนาดสูงสุดในหน่วยเก็บข้อมูลของมวลรวมซึ่งก็คือ
พิจารณาเพื่อทดแทนเมื่อรวบรวมความเร็ว (sra-max-scalarization-ขนาด-
Ospeed) หรือขนาด (sra-max-scalarization-size-Osize) ตามลำดับ

tm-max-aggregate-size
เมื่อทำสำเนาตัวแปร thread-local ในธุรกรรม พารามิเตอร์นี้
ระบุขนาดเป็นไบต์หลังจากที่ตัวแปรถูกบันทึกด้วยการบันทึก
ทำงานตรงข้ามกับคู่ของลำดับรหัสบันทึก/กู้คืน ตัวเลือกนี้เท่านั้น
ใช้เมื่อใช้ -fgnu-tm.

แกรไฟต์-max-nb-scop-params
เพื่อหลีกเลี่ยงเอฟเฟกต์เลขชี้กำลังในการแปลงลูปกราไฟท์ จำนวน
พารามิเตอร์ในส่วนควบคุมคงที่ (SCoP) ถูกผูกไว้ ค่าเริ่มต้นคือ 10
พารามิเตอร์ ตัวแปรที่ไม่ทราบค่า ณ เวลารวบรวมและกำหนด
นอก SCoP เป็นพารามิเตอร์ของ SCoP

กราไฟท์-max-bbs-per-function
เพื่อหลีกเลี่ยงเอฟเฟกต์เลขชี้กำลังในการตรวจจับ SCoP ขนาดของฟังก์ชัน
วิเคราะห์โดยกราไฟท์มีขอบเขต ค่าเริ่มต้นคือ 100 บล็อกพื้นฐาน

loop-block-tile-size
การบล็อกแบบวนซ้ำหรือการแปลงการขุดแบบแถบ เปิดใช้งานด้วย -floop-block or
-floop-สตริป-เหมือง, ลอกเหมืองแต่ละลูปในรังของลูปตามจำนวนที่กำหนด
การทำซ้ำ สามารถเปลี่ยนความยาวของแถบได้โดยใช้ปุ่ม loop-block-tile-size
พารามิเตอร์. ค่าเริ่มต้นคือ 51 การวนซ้ำ

loop-unroll-jam-size
ระบุปัจจัยการคลายสำหรับ -floop-unroll-and-jam ตัวเลือก. ค่าเริ่มต้น
คือ 4

loop-unroll-jam-ความลึก
ระบุขนาดที่จะคลี่ออก (นับจากวงในสุด) สำหรับ
-floop-unroll-and-jam. ค่าเริ่มต้นคือ 2

ipa-cp-value-list-size
IPA-CP พยายามติดตามค่าและประเภทที่เป็นไปได้ทั้งหมดที่ส่งผ่านไปยังฟังก์ชันของ
พารามิเตอร์เพื่อเผยแพร่และดำเนินการ devirtualization ipa-cp-ค่า-
รายการขนาด คือจำนวนค่าและประเภทสูงสุดที่จัดเก็บต่อหนึ่งรูปแบบ
พารามิเตอร์ของฟังก์ชัน

ipa-cp-eval-threshold
IPA-CP คำนวณคะแนนของตัวเองในการจำลองพฤติกรรมการทำกำไรและการโคลน
โอกาสในการโคลนเหล่านั้นด้วยคะแนนที่เกิน ipa-cp-eval-threshold.

ipa-cp-recursion-บทลงโทษ
เปอร์เซ็นต์การลงโทษที่ฟังก์ชันแบบเรียกซ้ำจะได้รับเมื่อได้รับการประเมิน
สำหรับการโคลนนิ่ง

ipa-cp-single-call-บทลงโทษ
ฟังก์ชันการปรับค่าเปอร์เซ็นต์ประกอบด้วยการเรียกฟังก์ชันอื่นครั้งเดียวจะ
ได้รับเมื่อถูกประเมินสำหรับการโคลน

ipa-max-agg-items
IPA-CP ยังสามารถเผยแพร่ค่าสเกลาร์จำนวนหนึ่งที่ส่งผ่านใน
รวม ipa-max-agg-items ควบคุมจำนวนสูงสุดของค่าดังกล่าวต่อหนึ่ง
พารามิเตอร์.

ipa-cp-loop-hint-bonus
เมื่อ IPA-CP กำหนดว่าผู้โคลนนิ่งจะสร้างจำนวน
การวนซ้ำของลูปที่รู้จักจะเพิ่มโบนัสของ ipa-cp-loop-hint-bonus ไป
คะแนนการทำกำไรของผู้สมัคร

ipa-cp-array-index-hint-bonus
เมื่อ IPA-CP กำหนดว่าตัวเลือกการโคลนจะสร้างดัชนีของอาร์เรย์
การเข้าถึงที่รู้จักจะเพิ่มโบนัสของ ipa-cp-array-index-hint-bonus ไป
คะแนนการทำกำไรของผู้สมัคร

ipa-max-aa-steps
ในระหว่างการวิเคราะห์ฟังก์ชัน IPA-CP ใช้การวิเคราะห์นามแฝงเพื่อ
ติดตามค่าที่ชี้ไปที่พารามิเตอร์ฟังก์ชัน เพื่อไม่ให้ใช้เวลามากเกินไป
วิเคราะห์ฟังก์ชันขนาดใหญ่ เลิกใช้ และพิจารณาหน่วยความจำทั้งหมดที่ถูกปิดหลัง
การตรวจสอบ ipa-max-aa-steps คำสั่งแก้ไขหน่วยความจำ

lto-พาร์ทิชัน
ระบุจำนวนพาร์ติชันที่ต้องการที่สร้างขึ้นในระหว่างการคอมไพล์ WHOPR NS
จำนวนพาร์ติชันควรเกินจำนวน CPU ที่ใช้ในการคอมไพล์ NS
ค่าเริ่มต้นคือ 32

lto-minpartition
ขนาดของพาร์ติชั่นขั้นต่ำสำหรับ WHOPR (ในคำแนะนำโดยประมาณ) สิ่งนี้จะช่วยป้องกัน
ค่าใช้จ่ายในการแยกโปรแกรมขนาดเล็กมากออกเป็นพาร์ติชั่นมากเกินไป

cxx-max-namespaces-for-diagnostic-help
จำนวนสูงสุดของเนมสเปซเพื่อขอคำแนะนำเมื่อค้นหาชื่อ C++
ล้มเหลวสำหรับตัวระบุ ค่าเริ่มต้นคือ 1000

sink-frequency-threshold
ความถี่การดำเนินการสัมพัทธ์สูงสุด (เป็นเปอร์เซ็นต์) ของบล็อกเป้าหมาย
สัมพันธ์กับบล็อกเดิมของคำสั่งเพื่อให้คำสั่งจมของa
คำแถลง. ตัวเลขที่มากขึ้นส่งผลให้เกิดการจมคำสั่งที่ก้าวร้าวมากขึ้น NS
ค่าเริ่มต้นคือ 75 มีการปรับค่าบวกเล็กน้อยสำหรับคำสั่งที่มี
ตัวถูกดำเนินการหน่วยความจำเนื่องจากสิ่งเหล่านี้ให้ผลกำไรมากขึ้น

max-stores-to-อ่างล้างจาน
จำนวนคู่ร้านค้าแบบมีเงื่อนไขสูงสุดที่สามารถจมได้ ตั้งค่าเป็น 0 ถ้า
vectorization อย่างใดอย่างหนึ่ง (-ftree-vectorize) หรือ if-conversion (-ftree-loop-if-convert)
ถูกปิดใช้งาน. ค่าเริ่มต้นคือ 2

อนุญาตให้จัดเก็บข้อมูลการแข่งขัน
อนุญาตให้ผู้เพิ่มประสิทธิภาพแนะนำการแข่งขันข้อมูลใหม่ในร้านค้า ตั้งค่าเป็น 1 เพื่ออนุญาต
มิฉะนั้นจะเป็น 0 ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นที่ระดับการปรับให้เหมาะสม -Ofast.

case-values-threshold
จำนวนค่าต่างๆ ที่น้อยที่สุดซึ่งควรใช้ jump-table
แทนที่จะเป็นต้นไม้ที่มีกิ่งก้านตามเงื่อนไข หากค่าเป็น 0 ให้ใช้ค่าเริ่มต้นสำหรับ
เครื่องจักร. ค่าเริ่มต้นคือ 0

tree-reassoc-width
ตั้งค่าจำนวนคำสั่งสูงสุดที่ดำเนินการแบบคู่ขนานในแผนผังที่เชื่อมโยงใหม่
พารามิเตอร์นี้จะแทนที่ฮิวริสติกที่ขึ้นกับเป้าหมายที่ใช้โดยดีฟอลต์หากมี non
ค่าศูนย์

sched-pressure-อัลกอริทึม
เลือกระหว่างสองการใช้งานที่มีอยู่ของ -fsched-ความดัน. อัลกอริทึม 1
เป็นการดำเนินการดั้งเดิมและมีแนวโน้มที่จะป้องกันคำแนะนำจาก
กำลังจัดลำดับใหม่ อัลกอริธึม 2 ถูกออกแบบให้ประนีประนอมระหว่าง
แนวทางที่ค่อนข้างอนุรักษ์นิยมโดยอัลกอริธึม 1 และค่อนข้างก้าวร้าว
วิธีการที่ใช้โดยตัวกำหนดตารางเวลาเริ่มต้น มันอาศัยการมี
ไฟล์รีจิสเตอร์ปกติและคลาสแรงดันรีจิสเตอร์ที่แม่นยำ ดู haifa-sched.c
ในแหล่งข้อมูล GCC สำหรับรายละเอียดเพิ่มเติม

ตัวเลือกเริ่มต้นขึ้นอยู่กับเป้าหมาย

max-slsr-cand-scan
กำหนดจำนวนผู้สมัครสูงสุดที่มีอยู่ซึ่งได้รับการพิจารณาเมื่อต้องการ
พื้นฐานสำหรับผู้สมัครลดกำลังเส้นตรงใหม่

asan-globals
เปิดใช้งานการตรวจจับบัฟเฟอร์ล้นสำหรับอ็อบเจ็กต์ส่วนกลาง การป้องกันแบบนี้คือ
เปิดใช้งานโดยค่าเริ่มต้นหากคุณใช้ -fsanitize=ที่อยู่ ตัวเลือก. ปิดการใช้งาน global
ใช้ป้องกันวัตถุ --param asan-globals=0.

asan-stack
เปิดใช้งานการตรวจจับบัฟเฟอร์ล้นสำหรับออบเจ็กต์สแต็ก การป้องกันแบบนี้คือ
เปิดใช้งานโดยค่าเริ่มต้นเมื่อใช้-fsanitize=ที่อยู่. หากต้องการปิดใช้งานการป้องกันสแต็กให้ใช้
--param asan-stack=0 ตัวเลือก

asan-instrument-reads
เปิดใช้งานการตรวจจับบัฟเฟอร์ล้นสำหรับการอ่านหน่วยความจำ การป้องกันแบบนี้คือ
เปิดใช้งานโดยค่าเริ่มต้นเมื่อใช้ -fsanitize=ที่อยู่. เพื่อปิดการใช้งานหน่วยความจำอ่าน
ใช้ป้องกัน --param asan-instrument-reads=0.

asan-instrument-writes
เปิดใช้งานการตรวจจับบัฟเฟอร์ล้นสำหรับการเขียนหน่วยความจำ การป้องกันแบบนี้คือ
เปิดใช้งานโดยค่าเริ่มต้นเมื่อใช้ -fsanitize=ที่อยู่. เพื่อปิดการใช้งานหน่วยความจำเขียน
ใช้ป้องกัน --param asan-instrument-writes=0 ตัวเลือก

asan-memintrin
เปิดใช้งานการตรวจจับสำหรับฟังก์ชันในตัว การป้องกันประเภทนี้เปิดใช้งานโดย
ค่าเริ่มต้นเมื่อใช้ -fsanitize=ที่อยู่. เพื่อปิดการใช้งานการป้องกันฟังก์ชั่นในตัว
ใช้ --param asan-memintrin=0.

asan-use-after-return
เปิดใช้งานการตรวจจับการใช้งานหลังการส่งคืน การป้องกันประเภทนี้เปิดใช้งานโดย
ค่าเริ่มต้นเมื่อใช้ -fsanitize=ที่อยู่ ตัวเลือก. ปิดการใช้งานหลังการคืนสินค้า
การใช้การตรวจจับ --param asan-use-after-return=0.

asan-instrumentation-with-call-threshold
หากจำนวนหน่วยความจำเข้าถึงในฟังก์ชันที่วัดค่ามากกว่าหรือเท่ากับ
หมายเลขนี้ใช้การโทรกลับแทนการตรวจสอบแบบอินไลน์ เช่น ปิดการใช้งานโค้ดอินไลน์
ใช้ --param asan-instrumentation-with-call-threshold=0.

chkp-max-ctor-size
ตัวสร้างแบบคงที่ที่สร้างโดย Pointer Bounds Checker อาจมีขนาดใหญ่มากและ
เพิ่มเวลารวบรวมที่ระดับการปรับให้เหมาะสมอย่างมาก -O1 และสูงกว่า นี้
พารามิเตอร์เป็นตัวเลขสูงสุดของคำสั่งในตัวสร้างเดียว
ค่าเริ่มต้นคือ 5000

max-fsm-thread-path-insns
จำนวนคำสั่งสูงสุดที่จะคัดลอกเมื่อทำซ้ำบล็อกในสถานะจำกัด
เส้นทางด้ายกระโดดอัตโนมัติ ค่าเริ่มต้นคือ 100

max-fsm-thread-length
จำนวนสูงสุดของบล็อกพื้นฐานบนเส้นทางเธรดอัตโนมัติของสถานะจำกัด NS
ค่าเริ่มต้นคือ 10

max-fsm-thread-paths
จำนวนเส้นทางข้ามเธรดใหม่สูงสุดที่จะสร้างสำหรับหุ่นยนต์ที่มีสถานะจำกัด
ค่าเริ่มต้นคือ 50

Options การควบคุม ตัวประมวลผลล่วงหน้า
ตัวเลือกเหล่านี้ควบคุมตัวประมวลผลล่วงหน้า C ซึ่งทำงานบนไฟล์ต้นฉบับ C แต่ละไฟล์ก่อนไฟล์จริง
การรวบรวม.

ถ้าคุณใช้ -E ตัวเลือก ไม่มีอะไรทำยกเว้นการประมวลผลล่วงหน้า บางส่วนของตัวเลือกเหล่านี้
สมเหตุสมผลเท่านั้นร่วมกับ -E เพราะจะทำให้เอาท์พุตพรีโปรเซสเซอร์เป็น
ไม่เหมาะสำหรับการรวบรวมจริง

-Wp,ตัวเลือก
คุณสามารถใช้ได้ -Wp,ตัวเลือก เพื่อเลี่ยงผ่านไดรเวอร์คอมไพเลอร์และผ่าน ตัวเลือก โดยตรงผ่าน
ไปยังตัวประมวลผลล่วงหน้า ถ้า ตัวเลือก มีเครื่องหมายจุลภาคซึ่งแบ่งออกเป็นหลายตัวเลือกที่
เครื่องหมายจุลภาค อย่างไรก็ตาม ตัวเลือกมากมายถูกแก้ไข แปล หรือตีความโดย
คอมไพเลอร์ไดรเวอร์ก่อนที่จะถูกส่งไปยังพรีโปรเซสเซอร์และ -Wp เลี่ยงผ่าน
เฟสนี้. อินเทอร์เฟซโดยตรงของตัวประมวลผลล่วงหน้าไม่มีเอกสารและอยู่ภายใต้
เปลี่ยน ดังนั้นเมื่อใดก็ตามที่เป็นไปได้คุณควรหลีกเลี่ยงการใช้ -Wp และให้คนขับจัดการ
ตัวเลือกแทน

-Xpreprocessor ตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกสำหรับตัวประมวลผลล่วงหน้า คุณสามารถใช้สิ่งนี้เพื่อจัดหาระบบ-
ตัวเลือกตัวประมวลผลล่วงหน้าเฉพาะที่ GCC ไม่รู้จัก

หากคุณต้องการส่งตัวเลือกที่มีการโต้แย้ง คุณต้องใช้ -Xpreprocessor
สองครั้ง หนึ่งครั้งสำหรับตัวเลือก และอีกครั้งสำหรับการโต้แย้ง

-no-integrated-cpp
ดำเนินการประมวลผลล่วงหน้าเป็นการส่งผ่านที่แยกต่างหากก่อนการคอมไพล์ โดยค่าเริ่มต้น GCC จะดำเนินการ
การประมวลผลล่วงหน้าเป็นส่วนรวมของการป้อนข้อมูลโทเค็นและการแยกวิเคราะห์ ถ้าตัวเลือกนี้
มีให้ ส่วนหน้าของภาษาที่เหมาะสม (cc1, cc1plus,หรือ cc1obj สำหรับ C, C++,
และ Objective-C ตามลำดับ) ถูกเรียกใช้แทนสองครั้ง หนึ่งครั้งสำหรับการประมวลผลล่วงหน้าเท่านั้น
และหนึ่งครั้งสำหรับการรวบรวมอินพุตที่ประมวลผลล่วงหน้าจริง ตัวเลือกนี้อาจมีประโยชน์
ร่วมกับ -B or -เครื่องห่อ ตัวเลือกเพื่อระบุตัวประมวลผลล่วงหน้าสำรองหรือ
ดำเนินการประมวลผลเพิ่มเติมของซอร์สโปรแกรมระหว่างการประมวลผลล่วงหน้าปกติและ
การรวบรวม.

-D ชื่อ
กำหนดล่วงหน้า ชื่อ เป็นมาโครที่มีคำจำกัดความ 1

-D ชื่อ=คำนิยาม
เนื้อหาของ คำนิยาม ถูก tokenized และประมวลผลราวกับว่ามันปรากฏขึ้นระหว่าง
การแปลขั้นตอนที่สามในa #กำหนด คำสั่ง โดยเฉพาะคำนิยามจะเป็น
ตัดทอนด้วยอักขระขึ้นบรรทัดใหม่แบบฝัง

หากคุณกำลังเรียกใช้ตัวประมวลผลล่วงหน้าจากเชลล์หรือโปรแกรมที่คล้ายเชลล์ คุณอาจต้อง
เพื่อใช้ไวยากรณ์การอ้างอิงของเชลล์เพื่อปกป้องอักขระเช่นช่องว่างที่มี
ความหมายในไวยากรณ์ของเชลล์

หากคุณต้องการกำหนดมาโครที่เหมือนฟังก์ชันบนบรรทัดคำสั่ง ให้เขียนอาร์กิวเมนต์ของมัน
รายการที่มีวงเล็บล้อมรอบก่อนเครื่องหมายเท่ากับ (ถ้ามี) วงเล็บคือ
มีความหมายกับเชลล์ส่วนใหญ่ ดังนั้น คุณจะต้องอ้างอิงตัวเลือก กับ sh และ csh,
-NS'ชื่อ(อาร์กิว...)=คำนิยาม' โรงงาน

-D และ -U ตัวเลือกจะได้รับการประมวลผลตามลำดับที่ได้รับบนบรรทัดคำสั่ง ทั้งหมด
-imacros ไฟล์ และ - รวม ไฟล์ ตัวเลือกจะถูกประมวลผลหลังจากทั้งหมด -D และ -U ตัวเลือก

-U ชื่อ
ยกเลิกคำจำกัดความก่อนหน้าของ ชื่อสร้างขึ้นในหรือจัดให้มี -D ตัวเลือก

-undef
อย่ากำหนดมาโครเฉพาะระบบหรือเฉพาะ GCC ไว้ล่วงหน้า มาตรฐานที่กำหนดไว้ล่วงหน้า
มาโครยังคงกำหนดไว้

-I dir
เพิ่มไดเร็กทอรี dir ไปที่รายการไดเร็กทอรีที่จะค้นหาไฟล์ส่วนหัว
ไดเร็กทอรีที่ชื่อ -I จะถูกค้นหาก่อนที่ระบบมาตรฐานจะรวมไดเร็กทอรี
ถ้าไดเร็กทอรี dir เป็นระบบมาตรฐานรวมถึงไดเร็กทอรีตัวเลือกจะถูกละเว้นไปยัง
ตรวจสอบให้แน่ใจว่าลำดับการค้นหาเริ่มต้นสำหรับไดเร็กทอรีระบบและการปฏิบัติพิเศษ
ของส่วนหัวของระบบไม่แพ้ ถ้า dir ขึ้นต้นด้วย "=" จากนั้น "=" จะเป็น
แทนที่ด้วยคำนำหน้า sysroot; ดู --sysroot และ -isysroot.

-o ไฟล์
เขียนเอาต์พุตไปที่ ไฟล์. นี้เหมือนกับการระบุ ไฟล์ เป็นทางเลือกที่สอง
อาร์กิวเมนต์ถึง cpp. gcc มีการตีความที่แตกต่างกันของอาร์กิวเมนต์ที่ไม่ใช่ตัวเลือกที่สอง
ดังนั้นคุณต้องใช้ -o เพื่อระบุไฟล์ที่ส่งออก

-ผนัง
เปิดคำเตือนทางเลือกทั้งหมดที่ต้องการสำหรับรหัสปกติ ปัจจุบันนี้
is -ความคิดเห็น, -Wtrigraphs, -Wmulticar และคำเตือนเรื่องการเลื่อนจำนวนเต็มทำให้เกิด a
เปลี่ยนเครื่องหมายในนิพจน์ "#if" โปรดทราบว่าคำเตือนของตัวประมวลผลล่วงหน้าจำนวนมาก
จะเปิดไว้โดยค่าเริ่มต้นและไม่มีตัวเลือกให้ควบคุม

-ความคิดเห็น
-ความคิดเห็น
เตือนเมื่อใดก็ตามที่ความคิดเห็นเริ่มต้นลำดับ /* ปรากฏใน a /* แสดงความคิดเห็นหรือเมื่อใดก็ตามที่
แบ็กสแลช-ขึ้นบรรทัดใหม่ปรากฏใน a // ความคิดเห็น (ทั้งสองรูปแบบมีผลเหมือนกัน)

-Wtrigraphs
ไตรกราฟส่วนใหญ่ในความคิดเห็นไม่สามารถส่งผลต่อความหมายของโปรแกรมได้ อย่างไรก็ตาม a
ไตรกราฟที่จะขึ้นบรรทัดใหม่หนี (??/ ที่ท้ายบรรทัด) สามารถ, โดย
เปลี่ยนตำแหน่งที่ความคิดเห็นเริ่มต้นหรือสิ้นสุด ดังนั้น เฉพาะตรีโกณมิติที่จะเกิด
การขึ้นบรรทัดใหม่ทำให้เกิดคำเตือนภายในความคิดเห็น

ตัวเลือกนี้มีความหมายโดย -ผนัง. ถ้า -ผนัง ไม่ได้รับ ตัวเลือกนี้ยังคงเปิดใช้งานอยู่
เว้นแต่จะเปิดใช้งาน trigraphs หากต้องการรับการแปลงไตรกราฟโดยไม่มีการเตือน แต่รับ
อื่น ๆ -ผนัง คำเตือน ใช้ -trigraphs -ผนัง -Wno-trigraphs.

-แบบดั้งเดิม
เตือนเกี่ยวกับโครงสร้างบางอย่างที่ทำงานแตกต่างกันในแบบดั้งเดิมและ ISO C นอกจากนี้
เตือนเกี่ยวกับโครงสร้าง ISO C ที่ไม่มี C เทียบเท่าแบบดั้งเดิมและมีปัญหา
โครงสร้างที่ควรหลีกเลี่ยง

-วันเดฟ
เตือนเมื่อใดก็ตามที่พบตัวระบุที่ไม่ใช่แมโครในan #ถ้า สั่ง
ด้านนอกของ กำหนด. ตัวระบุดังกล่าวจะถูกแทนที่ด้วยศูนย์

-Wunused-มาโคร
เตือนเกี่ยวกับแมโครที่กำหนดไว้ในไฟล์หลักที่ไม่ได้ใช้ มาโครคือ มือสอง ถ้ามันเป็น
ขยายหรือทดสอบการดำรงอยู่อย่างน้อยหนึ่งครั้ง ตัวประมวลผลล่วงหน้าจะเตือนด้วยถ้า
ไม่ได้ใช้มาโครในขณะที่มีการกำหนดใหม่หรือไม่ได้กำหนดไว้

มาโครในตัว มาโครที่กำหนดไว้ในบรรทัดคำสั่ง และมาโครที่กำหนดไว้ใน include
ไฟล์ไม่ได้รับการเตือนเกี่ยวกับ

บันทึก: หากใช้มาโครจริง แต่ใช้ในบล็อกตามเงื่อนไขที่ข้ามเท่านั้น
CPP จะแจ้งว่าไม่ได้ใช้ เพื่อหลีกเลี่ยงคำเตือนในกรณีนี้ คุณอาจปรับปรุง
ขอบเขตของคำจำกัดความของมาโคร ตัวอย่างเช่น ย้ายไปยังส่วนที่ข้ามไปครั้งแรก
บล็อก. อีกทางหนึ่ง คุณสามารถใช้หุ่นจำลองกับสิ่งต่อไปนี้:

#ถ้ากำหนด the_macro_causing_the_warning
#endif

-Wendif-ป้ายกำกับ
เตือนเมื่อใดก็ตามที่ an #อื่น หรือ #endif ตามด้วยข้อความ ซึ่งมักจะเกิดขึ้นใน
รหัสของแบบฟอร์ม

#ถ้า FOO
...
#else FOO
...
#endif FOO

"FOO" ตัวที่สองและสามควรอยู่ในความคิดเห็น แต่มักไม่อยู่ในโปรแกรมรุ่นเก่า
คำเตือนนี้เปิดอยู่โดยค่าเริ่มต้น

-Werror
ทำให้คำเตือนทั้งหมดเป็นข้อผิดพลาดยาก ซอร์สโค้ดที่ทริกเกอร์คำเตือนจะเป็น
ปฏิเสธ

-Wsystem-ส่วนหัว
ออกคำเตือนสำหรับรหัสในส่วนหัวของระบบ สิ่งเหล่านี้มักไม่ช่วยในการค้นหา
ข้อบกพร่องในรหัสของคุณจึงถูกระงับ หากคุณเป็นผู้รับผิดชอบระบบ
ห้องสมุดคุณอาจต้องการเห็นพวกเขา

-w ระงับคำเตือนทั้งหมด รวมถึงคำเตือนที่ GNU CPP ออกโดยค่าเริ่มต้น

-อวดดี
ออกการวินิจฉัยบังคับทั้งหมดที่ระบุไว้ในมาตรฐาน C เหลือบ้างแล้ว
ออกโดยค่าเริ่มต้น เนื่องจากมักเรียกใช้โค้ดที่ไม่เป็นอันตราย

-pedantic-ข้อผิดพลาด
ออกการวินิจฉัยที่จำเป็นทั้งหมด และทำให้การวินิจฉัยที่จำเป็นทั้งหมดกลายเป็นข้อผิดพลาด
ซึ่งรวมถึงการวินิจฉัยบังคับที่ GCC ออกโดยไม่มี -อวดดี แต่ถือว่า
คำเตือน

-M แทนที่จะส่งออกผลลัพธ์ของการประมวลผลล่วงหน้า ให้ส่งออกกฎที่เหมาะสมสำหรับ ทำ
อธิบายการขึ้นต่อกันของไฟล์ต้นฉบับหลัก ตัวประมวลผลล่วงหน้าส่งออกหนึ่ง
ทำ กฎที่มีชื่อไฟล์อ็อบเจ็กต์สำหรับไฟล์ต้นทาง ทวิภาค และชื่อ
ของไฟล์ที่รวมไว้ทั้งหมด รวมทั้งไฟล์ที่มาจาก - รวม or -imacros คำสั่ง -
ตัวเลือกบรรทัด

เว้นแต่ระบุไว้อย่างชัดเจน (ด้วย -MT or -MQ) ชื่อไฟล์อ็อบเจ็กต์ประกอบด้วย
ชื่อของไฟล์ต้นฉบับที่มีส่วนต่อท้ายใดๆ แทนที่ด้วยส่วนต่อท้ายของไฟล์อ็อบเจ็กต์และด้วย any
นำส่วนไดเร็กทอรีชั้นนำออก หากมีไฟล์รวมอยู่หลายไฟล์ กฎก็คือ
แบ่งออกเป็นหลายบรรทัดโดยใช้ \-ขึ้นบรรทัดใหม่ กฎไม่มีคำสั่ง

ตัวเลือกนี้จะไม่ระงับเอาต์พุตการดีบักของตัวประมวลผลล่วงหน้า เช่น -dM. หลีกเลี่ยง
การผสมเอาต์พุตการดีบักดังกล่าวกับกฎการพึ่งพา คุณควรระบุ . อย่างชัดเจน
ไฟล์เอาต์พุตการพึ่งพาด้วย -MFหรือใช้ตัวแปรสภาพแวดล้อมเช่น
DEPENDENCIES_OUTPUT. เอาต์พุตการดีบักจะยังคงถูกส่งไปยังสตรีมเอาต์พุตปกติเป็น
ปกติ

ที่ผ่านไป -M แก่คนขับ หมายความถึง -Eและระงับคำเตือนโดยปริยาย -w.

-MM ชอบ -M แต่อย่าพูดถึงไฟล์ส่วนหัวที่พบในไดเร็กทอรีส่วนหัวของระบบ
หรือไฟล์ส่วนหัวที่รวมโดยตรงหรือโดยอ้อมจากส่วนหัวดังกล่าว

นี่หมายความว่าการเลือกวงเล็บมุมหรือเครื่องหมายคำพูดคู่ใน #include
คำสั่งไม่ได้กำหนดว่าส่วนหัวนั้นจะปรากฏใน -MM
เอาต์พุตการพึ่งพา นี่เป็นการเปลี่ยนแปลงเล็กน้อยในความหมายจาก GCC เวอร์ชัน 3.0 และ
ก่อน

-MF ไฟล์
เมื่อใช้กับ -M or -MMระบุไฟล์ที่จะเขียนการพึ่งพา ถ้าไม่ -MF
สวิตช์จะได้รับตัวประมวลผลล่วงหน้าส่งกฎไปยังที่เดียวกับที่มันจะส่ง
เอาต์พุตที่ประมวลผลล่วงหน้า

เมื่อใช้ร่วมกับตัวเลือกไดรเวอร์ -MD or -MMD, -MF แทนที่การพึ่งพาเริ่มต้น
ไฟล์ที่ส่งออก

-MG ร่วมกับตัวเลือกเช่น -M ขอสร้างการพึ่งพา -MG ถือว่า
ไฟล์ส่วนหัวที่หายไปจะถูกสร้างไฟล์และเพิ่มลงในรายการการพึ่งพาโดยไม่ต้อง
ทำให้เกิดข้อผิดพลาด ชื่อไฟล์การพึ่งพานั้นนำมาโดยตรงจาก "#include"
คำสั่งโดยไม่ต้องเติมเส้นทางใด ๆ -MG ยังระงับเอาต์พุตที่ประมวลผลล่วงหน้าเป็น a
ไฟล์ส่วนหัวที่ขาดหายไปทำให้สิ่งนี้ไม่มีประโยชน์

คุณลักษณะนี้ใช้ในการอัพเดต makefiles โดยอัตโนมัติ

-MP ตัวเลือกนี้แนะนำให้ CPP เพิ่มเป้าหมายปลอมสำหรับการพึ่งพาแต่ละรายการนอกเหนือจาก
ไฟล์หลักทำให้แต่ละไฟล์ไม่ต้องพึ่งพาอะไร กฎจำลองเหล่านี้หลีกเลี่ยงข้อผิดพลาด
ทำ ให้ถ้าคุณลบไฟล์ส่วนหัวโดยไม่ต้องอัปเดต Makefile เพื่อให้ตรงกับ.

นี่คือผลลัพธ์ทั่วไป:

test.o: test.c test.h

ทดสอบ h:

-MT เป้า
เปลี่ยนเป้าหมายของกฎที่ปล่อยออกมาจากการสร้างการพึ่งพา โดยค่าเริ่มต้น CPP จะใช้เวลา
ชื่อของไฟล์อินพุตหลัก ลบส่วนประกอบไดเร็กทอรีและส่วนต่อท้ายไฟล์ใดๆ
เช่น .cและผนวกส่วนต่อท้ายอ็อบเจ็กต์ปกติของแพลตฟอร์ม ผลที่ได้คือเป้าหมาย

An -MT option จะกำหนดเป้าหมายให้เป็นสตริงที่คุณระบุ ถ้าคุณต้องการ
หลายเป้าหมาย คุณสามารถระบุให้เป็นอาร์กิวเมนต์เดียวได้ -MTหรือใช้หลายตัว
-MT ตัวเลือก

ตัวอย่างเช่น -MT '$(objpfx)foo.o' อาจให้

$(objpfx)foo.o: foo.c

-MQ เป้า
เหมือนกับ -MTแต่จะอ้างอิงถึงอักขระใดๆ ที่มีลักษณะพิเศษเฉพาะสำหรับ Make
-MQ '$(objpfx)foo.o' จะช่วยให้

$$(objpfx)foo.o: foo.c

เป้าหมายเริ่มต้นจะได้รับการเสนอราคาโดยอัตโนมัติ ราวกับว่าได้รับด้วย -MQ.

-MD -MD เทียบเท่ากับ -M -MF ไฟล์ยกเว้นว่า -E ไม่ได้หมายความถึง คนขับ
แน่นอน ไฟล์ ขึ้นอยู่กับว่า an -o มีตัวเลือกให้ หากใช่ ไดรเวอร์จะใช้
อาร์กิวเมนต์ แต่มีคำต่อท้ายของ .dมิฉะนั้นจะใช้ชื่อของไฟล์อินพุต
ลบส่วนประกอบไดเร็กทอรีและคำต่อท้าย และใช้a .d วิภัตติ

If -MD ใช้ร่วมกับ -Eใด ๆ -o สวิตช์เข้าใจเพื่อระบุ
ไฟล์เอาต์พุตการพึ่งพา แต่ถ้าใช้โดยไม่มี -Eแต่ละคน -o เป็นที่เข้าใจว่าจะระบุ a
ไฟล์วัตถุเป้าหมาย

ตั้งแต่ -E ไม่ได้หมายความถึง -MD สามารถใช้เพื่อสร้างไฟล์เอาต์พุตการพึ่งพาเป็นa
ผลข้างเคียงของกระบวนการคอมไพล์

-MMD
ชอบ -MD ยกเว้นเฉพาะไฟล์ส่วนหัวของผู้ใช้เท่านั้น ไม่ใช่ไฟล์ส่วนหัวของระบบ

-fpch-deps
เมื่อใช้ส่วนหัวที่คอมไพล์ล่วงหน้า แฟล็กนี้จะทำให้แฟล็กการพึ่งพา-เอาท์พุตเป็น
ยังแสดงรายการไฟล์จากการขึ้นต่อกันของส่วนหัวที่คอมไพล์แล้ว ถ้าไม่ระบุเท่านั้น
ส่วนหัวที่คอมไพล์แล้วจะอยู่ในรายการและไม่ใช่ไฟล์ที่ใช้สร้าง
เนื่องจากไฟล์เหล่านั้นไม่ได้รับการพิจารณาเมื่อใช้ส่วนหัวที่คอมไพล์แล้ว

-fpch-preprocess
ตัวเลือกนี้อนุญาตให้ใช้ส่วนหัวที่คอมไพล์ล่วงหน้าร่วมกับ -E. มันแทรกพิเศษ
"#pragma", "#pragma GCC pc_preprocess"ชื่อไฟล์"" ในผลลัพธ์เพื่อทำเครื่องหมายสถานที่
ที่ซึ่งพบส่วนหัวที่คอมไพล์แล้วและ ชื่อไฟล์. เมื่อ -fpreprocessed ที่อยู่ใน
ใช้ GCC รู้จัก "#pragma" และโหลด PCH

ตัวเลือกนี้ถูกปิดโดยค่าเริ่มต้น เนื่องจากผลลัพธ์ที่ประมวลผลล่วงหน้าที่ได้จะเป็นเท่านั้น
เหมาะที่จะเป็นอินพุตของ GCC มันถูกเปิดโดย -save-temps.

คุณไม่ควรเขียน "#pragma" นี้ในโค้ดของคุณเอง แต่การแก้ไข . นั้นปลอดภัย
ชื่อไฟล์หากไฟล์ PCH อยู่ในตำแหน่งอื่น ชื่อไฟล์อาจเป็น
สัมบูรณ์หรืออาจสัมพันธ์กับไดเรกทอรีปัจจุบันของ GCC

-x c
-x C ++
-x วัตถุประสงค์-c
-x แอสเซมเบลอร์-กับ-cpp
ระบุภาษาต้นทาง: C, C++, Objective-C หรือแอสเซมบลี นี้ไม่มีอะไรจะทำ
ด้วยความสอดคล้องมาตรฐานหรือการขยาย; มันแค่เลือกว่าไวยากรณ์พื้นฐานใดที่จะ
คาดหวัง. หากคุณไม่ได้ให้ตัวเลือกเหล่านี้เลย cpp จะอนุมานภาษาจาก
นามสกุลของไฟล์ต้นฉบับ: .c, ซีซี., .m,หรือ .S. ส่วนขยายทั่วไปอื่นๆ สำหรับ
C ++ และแอสเซมบลีก็รู้จักเช่นกัน ถ้า cpp ไม่รู้จักนามสกุล มัน
จะถือว่าไฟล์เป็น C; นี่เป็นโหมดทั่วไปที่สุด

บันทึก: cpp เวอร์ชันก่อนหน้ายอมรับ a -lang ตัวเลือกที่เลือกทั้ง
ภาษาและระดับความสอดคล้องของมาตรฐาน ตัวเลือกนี้ถูกลบเพราะ
มันขัดแย้งกับ -l ตัวเลือก

-std=มาตรฐาน
-ansi
ระบุมาตรฐานที่รหัสควรสอดคล้อง ปัจจุบัน CPP รู้เรื่อง C
และมาตรฐาน C++; คนอื่น ๆ อาจถูกเพิ่มในอนาคต

มาตรฐาน อาจเป็นหนึ่งใน:

"ซี90"
"ซี89"
"iso9899:1990"
มาตรฐาน ISO C ตั้งแต่ปี 1990 c90 เป็นชวเลขจารีตประเพณีสำหรับเวอร์ชันนี้ของ
มาตรฐาน.

พื้นที่ปลูก -ansi ตัวเลือกเทียบเท่ากับ -std=c90.

"iso9899:199409"
มาตรฐาน 1990 C ซึ่งแก้ไขเพิ่มเติมในปี 1994

"iso9899:1999"
"ซี99"
"iso9899:199x"
"ซี9เอ็กซ์"
มาตรฐาน ISO C ฉบับปรับปรุง เผยแพร่เมื่อเดือนธันวาคม พ.ศ. 1999 ก่อนเผยแพร่นี้
เป็นที่รู้จักในนาม C9X

"iso9899:2011"
"ซี11"
"ซี1เอ็กซ์"
มาตรฐาน ISO C ฉบับปรับปรุง เผยแพร่เมื่อเดือนธันวาคม พ.ศ. 2011 ก่อนเผยแพร่นี้
เป็นที่รู้จักในนาม C1X

"กนู90"
"กนู89"
มาตรฐาน 1990 C บวกกับส่วนขยาย GNU นี่คือค่าเริ่มต้น

"กนู99"
"กนู9x"
มาตรฐาน 1999 C บวกกับส่วนขยาย GNU

"กนู11"
"กนู1x"
มาตรฐาน 2011 C บวกกับส่วนขยาย GNU

"c++98"
มาตรฐาน ISO C++ ปี 1998 พร้อมการแก้ไขเพิ่มเติม

"กนู++98"
เหมือนกับ -std=c++98 บวกกับส่วนขยาย GNU นี่เป็นค่าเริ่มต้นสำหรับโค้ด C++

-ผม- แยกเส้นทางรวม ไดเร็กทอรีใด ๆ ที่ระบุด้วย -I ตัวเลือกมาก่อน -ผม- เป็น
ค้นหาเฉพาะส่วนหัวที่ขอด้วย "#include "ไฟล์""; พวกเขาจะไม่ถูกค้นหา
"#รวมไฟล์>". หากระบุไดเร็กทอรีเพิ่มเติมด้วย -I ตัวเลือกหลัง
-ผม-, ไดเรกทอรีเหล่านั้นจะถูกค้นหาทั้งหมด #include แนวทาง

นอกจากนี้ -ผม- ยับยั้งการใช้ไดเร็กทอรีของไดเร็กทอรีไฟล์ปัจจุบันเป็น
ไดเร็กทอรีการค้นหาแรกสำหรับ "#include "ไฟล์"". ตัวเลือกนี้เลิกใช้แล้ว

-nostdinc
อย่าค้นหาไดเรกทอรีระบบมาตรฐานสำหรับไฟล์ส่วนหัว เฉพาะไดเรกทอรี
คุณได้ระบุด้วย -I ตัวเลือก (และไดเร็กทอรีของไฟล์ปัจจุบัน if
เหมาะสม) ถูกค้น

-nostdinc++
อย่าค้นหาไฟล์ส่วนหัวในไดเร็กทอรีมาตรฐานเฉพาะ C ++ แต่ยังทำอยู่
ค้นหาไดเร็กทอรีมาตรฐานอื่นๆ (ตัวเลือกนี้ใช้ในการสร้าง C++
ห้องสมุด.)

- รวม ไฟล์
กระบวนการ ไฟล์ ราวกับว่า "#include "file" ปรากฏเป็นบรรทัดแรกของแหล่งที่มาหลัก
ไฟล์. อย่างไรก็ตาม ไดเร็กทอรีแรกที่ค้นหา ไฟล์ คือการทำงานของพรีโปรเซสเซอร์
ไดเรกทอรี แทน of ไดเร็กทอรีที่มีไฟล์ต้นฉบับหลัก หากไม่พบ
มีการค้นหาในส่วนที่เหลือของสายการค้นหา "#include "..."" เช่น
ปกติ

ถ้าหลาย - รวม มีตัวเลือกให้ ไฟล์จะรวมอยู่ในลำดับที่พวกเขา
ปรากฏในบรรทัดคำสั่ง

-imacros ไฟล์
ชอบๆ - รวมยกเว้นว่าผลลัพธ์ใด ๆ ที่สร้างโดยการสแกน ไฟล์ ถูกโยนทิ้ง
ห่างออกไป. มาโครที่กำหนดยังคงกำหนดไว้ ซึ่งจะทำให้คุณได้รับมาโครทั้งหมด
จากส่วนหัวโดยไม่ประมวลผลการประกาศด้วย

ไฟล์ทั้งหมดที่ระบุโดย -imacros จะถูกประมวลผลก่อนไฟล์ทั้งหมดที่ระบุโดย - รวม.

-idirafter dir
ค้นหา dir สำหรับไฟล์ส่วนหัว แต่ทำอย่างนั้น หลังจาก ไดเร็กทอรีทั้งหมดที่ระบุด้วย -I และ
ไดเร็กทอรีระบบมาตรฐานหมดแล้ว dir ถือเป็นระบบ ได้แก่
ไดเร็กทอรี ถ้า dir เริ่มต้นด้วย "=" จากนั้น "=" จะถูกแทนที่ด้วย sysroot
คำนำหน้า; ดู --sysroot และ -isysroot.

-iprefix อุปสรรค
ระบุ อุปสรรค เป็นคำนำหน้าต่อไป -iwithprefix ตัวเลือก. หากคำนำหน้า
แทนไดเร็กทอรี คุณควรรวมสุดท้าย /.

-iwithprefix dir
-iwithprefixbefore dir
ผนวก dir ไปยังคำนำหน้าที่ระบุก่อนหน้านี้ด้วย -iprefixและเพิ่มผลลัพธ์
ไดเรกทอรีไปยังเส้นทางการค้นหารวม -iwithprefixbefore วางไว้ที่เดียวกัน -I
จะ; -iwithprefix วางไว้ที่ไหน -idirafter หากว่า

-isysroot dir
ตัวเลือกนี้เหมือนกับ --sysroot ตัวเลือก แต่ใช้กับไฟล์ส่วนหัวเท่านั้น (ยกเว้นสำหรับ
เป้าหมายของดาร์วิน ซึ่งใช้กับทั้งไฟล์ส่วนหัวและไลบรารี) ดู
--sysroot ตัวเลือกสำหรับข้อมูลเพิ่มเติม

-imultilib dir
ใช้ dir เป็นไดเร็กทอรีย่อยของไดเร็กทอรีที่มีส่วนหัว C++ เฉพาะเป้าหมาย

-isystem dir
ค้นหา dir สำหรับไฟล์ส่วนหัวหลังจากไดเร็กทอรีทั้งหมดที่ระบุโดย -I แต่ก่อนที่
ไดเร็กทอรีระบบมาตรฐาน ทำเครื่องหมายว่าเป็นไดเร็กทอรีระบบ เพื่อให้ไดเร็กทอรีเหมือนกัน
การดูแลเป็นพิเศษตามที่ใช้กับไดเร็กทอรีระบบมาตรฐาน ถ้า dir เริ่มต้น
ด้วย "=" จากนั้น "=" จะถูกแทนที่ด้วยคำนำหน้า sysroot; ดู --sysroot และ
-isysroot.

-iquote dir
ค้นหา dir สำหรับไฟล์ส่วนหัวที่ขอด้วย "#include "ไฟล์""; พวกเขาจะไม่
ค้นหา "#includeไฟล์>"ก่อนไดเร็กทอรีทั้งหมดที่ระบุโดย -I และก่อนที่จะ
ไดเร็กทอรีระบบมาตรฐาน ถ้า dir ขึ้นต้นด้วย "=" จากนั้น "=" จะถูกแทนที่ด้วย
คำนำหน้า sysroot; ดู --sysroot และ -isysroot.

-fdirectives-only
เมื่อประมวลผลล่วงหน้า ให้จัดการคำสั่ง แต่อย่าขยายมาโคร

พฤติกรรมของตัวเลือกขึ้นอยู่กับ -E และ -fpreprocessed ตัวเลือก

กับ -Eการประมวลผลล่วงหน้าจำกัดเฉพาะการจัดการคำสั่งเช่น "#define"
"#ifdef" และ "#ข้อผิดพลาด" การทำงานของตัวประมวลผลล่วงหน้าอื่นๆ เช่น การขยายมาโครและ
ไม่ได้ทำการแปลงไตรกราฟ นอกจากนี้ -dD ตัวเลือกโดยปริยาย
เปิดการใช้งาน

กับ -fpreprocessed, คำจำกัดความของบรรทัดคำสั่งและมาโครในตัวส่วนใหญ่คือ
พิการ. มาโครเช่น "__LINE__" ซึ่งขึ้นอยู่กับบริบทจะได้รับการจัดการ
โดยทั่วไป. ซึ่งช่วยให้สามารถรวบรวมไฟล์ที่ประมวลผลไว้ล่วงหน้าด้วย "-E
-fdirectives เท่านั้น".

พร้อมทั้ง -E และ -fpreprocessedกฎสำหรับ -fpreprocessed มีความสำคัญ นี้
เปิดใช้งานการประมวลผลล่วงหน้าของไฟล์ที่ประมวลผลก่อนหน้านี้ด้วย "-E
-fdirectives เท่านั้น".

-fdollars-in-identifiers
ยอมรับ $ ในตัวระบุ

-fexttended-ตัวระบุ
ยอมรับชื่ออักขระสากลในตัวระบุ ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้น
สำหรับ C99 (และเวอร์ชันมาตรฐาน C ที่ใหม่กว่า) และ C++

-fno-canonical-system-headers
เมื่อประมวลผลล่วงหน้า อย่าย่อพาธส่วนหัวของระบบด้วยการกำหนดรูปแบบบัญญัติ

-fpreprocessed
ระบุตัวประมวลผลล่วงหน้าว่าไฟล์อินพุตได้รับการประมวลผลล่วงหน้าแล้ว นี้
ยับยั้งสิ่งต่างๆ เช่น การขยายมาโคร การแปลง Trigraph เลี่ยงการต่อบรรทัดใหม่
และการประมวลผลคำสั่งส่วนใหญ่ ตัวประมวลผลล่วงหน้ายังคงรับรู้และลบออก
ความคิดเห็นเพื่อให้คุณสามารถส่งไฟล์ที่ประมวลผลล่วงหน้าด้วย -C ไปยังคอมไพเลอร์โดยไม่ต้อง
ปัญหา. ในโหมดนี้ ตัวประมวลผลล่วงหน้าที่รวมไว้เป็นมากกว่าตัวสร้างโทเค็น
สำหรับปลายด้านหน้า

-fpreprocessed เป็นนัยถ้าไฟล์อินพุตมีนามสกุลใดนามสกุลหนึ่ง .i, .ii or .mi.
นี่คือส่วนขยายที่ GCC ใช้สำหรับไฟล์ที่ประมวลผลล่วงหน้าที่สร้างโดย -save-temps.

-ftabstop=ความกว้าง
กำหนดระยะห่างระหว่างแถบหยุด ซึ่งช่วยให้ตัวประมวลผลล่วงหน้ารายงานคอลัมน์ที่ถูกต้อง
ตัวเลขในคำเตือนหรือข้อผิดพลาด แม้ว่าแท็บจะปรากฏบนบรรทัด ถ้าค่าน้อยกว่า
มากกว่า 1 หรือมากกว่า 100 ตัวเลือกจะถูกละเว้น ค่าเริ่มต้นคือ 8

-fdebug-cpp
ตัวเลือกนี้มีประโยชน์สำหรับการดีบัก GCC เท่านั้น เมื่อใช้กับ -E, ทิ้งการดีบัก
ข้อมูลเกี่ยวกับแผนที่ที่ตั้ง ทุกโทเค็นในเอาต์พุตนำหน้าด้วยการถ่ายโอนข้อมูลของ
แผนที่ที่ตั้งของมันเป็นของ การถ่ายโอนข้อมูลแผนที่ที่ถือตำแหน่งของโทเค็น
อยากจะเป็น:

{"ป":เฝอ ;"F":ฟ ;"แอล": ;"ค": ;"NS": ;"NS": ;"อี": ,"สถานที่": }

เมื่อใช้โดยไม่ต้อง -E, ตัวเลือกนี้ไม่มีผล

-ftrack-มาโครขยาย[=ระดับ]
ติดตามตำแหน่งของโทเค็นในการขยายมาโคร สิ่งนี้ทำให้คอมไพเลอร์สามารถปล่อย
การวินิจฉัยเกี่ยวกับสแต็คการขยายมาโครปัจจุบันเมื่อเกิดข้อผิดพลาดในการคอมไพล์ใน
การขยายมาโคร การใช้ตัวเลือกนี้ทำให้พรีโปรเซสเซอร์และคอมไพเลอร์ใช้การ
หน่วยความจำมากขึ้น NS ระดับ พารามิเตอร์สามารถใช้เพื่อเลือกระดับความแม่นยำของโทเค็น
การติดตามตำแหน่งจึงช่วยลดการใช้หน่วยความจำหากจำเป็น ค่า 0 of
ระดับ ปิดใช้งานตัวเลือกนี้เหมือนกับว่าไม่ -ftrack-มาโครขยาย อยู่บน
บรรทัดคำสั่ง ค่า 1 ติดตามตำแหน่งโทเค็นในโหมดที่เสื่อมโทรมเพื่อประโยชน์ของ
ค่าใช้จ่ายหน่วยความจำน้อยที่สุด ในโหมดนี้โทเค็นทั้งหมดที่เกิดจากการขยายตัวของ an
อาร์กิวเมนต์ของแมโครที่เหมือนฟังก์ชันมีตำแหน่งเดียวกัน ค่า 2 โทเค็นแทร็ก
สถานที่อย่างสมบูรณ์ ค่านี้เป็นหน่วยความจำที่หิวมากที่สุด เมื่อให้ตัวเลือกนี้
ไม่มีอาร์กิวเมนต์ ค่าพารามิเตอร์เริ่มต้นคือ 2.

โปรดทราบว่า "-ftrack-macro-expansion=2" ถูกเปิดใช้งานโดยค่าเริ่มต้น

-fexec-charset=ชุดอักขระ
ตั้งค่าชุดอักขระการดำเนินการ ใช้สำหรับค่าคงที่สตริงและอักขระ ค่าเริ่มต้น
คือ UTF-8 ชุดอักขระ สามารถเป็นการเข้ารหัสใด ๆ ที่สนับสนุนโดยไลบรารี "iconv" ของระบบ
กิจวัตรประจำวัน

-fwide-exec-charset=ชุดอักขระ
ตั้งค่าชุดอักขระการดำเนินการแบบกว้าง ใช้สำหรับค่าคงที่สตริงและอักขระแบบกว้าง
ค่าเริ่มต้นคือ UTF-32 หรือ UTF-16 ขึ้นอยู่กับความกว้างของ "wchar_t" เนื่องจาก
กับ -fexec-charset, ชุดอักขระ สามารถเข้ารหัสใด ๆ ที่สนับสนุนโดย "iconv" ของระบบ
กิจวัตรประจำวันของห้องสมุด อย่างไรก็ตาม คุณจะมีปัญหากับการเข้ารหัสที่ไม่เหมาะสม
ตรงใน "wchar_t"

-finput-charset=ชุดอักขระ
ตั้งค่าชุดอักขระอินพุต ใช้สำหรับแปลจากชุดอักขระของอินพุต
ไฟล์ไปยังชุดอักขระต้นทางที่ใช้โดย GCC หากสถานที่ไม่ระบุหรือ GCC
ไม่สามารถรับข้อมูลนี้จากโลแคล ค่าเริ่มต้นคือ UTF-8 นี้สามารถ
แทนที่ด้วยโลแคลหรือตัวเลือกบรรทัดคำสั่งนี้ ปัจจุบันคำสั่ง-
ตัวเลือกบรรทัดมีความสำคัญกว่าหากมีข้อขัดแย้ง ชุดอักขระ สามารถเข้ารหัสใด ๆ ก็ได้
สนับสนุนโดยรูทีนไลบรารี "iconv" ของระบบ

-fworking-ไดเรกทอรี
เปิดใช้งานการสร้าง linemarkers ในเอาต์พุตตัวประมวลผลล่วงหน้าที่จะให้คอมไพเลอร์
ทราบไดเร็กทอรีการทำงานปัจจุบันในขณะที่ประมวลผลล่วงหน้า เมื่อตัวเลือกนี้คือ
เปิดใช้งาน ตัวประมวลผลล่วงหน้าจะปล่อยตัวทำเครื่องหมายเส้นที่สองหลังจากตัวทำเครื่องหมายเริ่มต้น
ด้วยไดเร็กทอรีการทำงานปัจจุบันตามด้วยสแลชสองตัว GCC จะใช้สิ่งนี้
ไดเร็กทอรีเมื่อมีอยู่ในอินพุตที่ประมวลผลล่วงหน้าเนื่องจากไดเร็กทอรีที่ปล่อยออกมาเป็น
ไดเร็กทอรีการทำงานปัจจุบันในรูปแบบข้อมูลการดีบักบางรูปแบบ ตัวเลือกนี้คือ
เปิดใช้งานโดยปริยายหากเปิดใช้งานข้อมูลการดีบัก แต่สิ่งนี้สามารถยับยั้งได้ด้วย
แบบฟอร์มปฏิเสธ -fno-working-ไดเรกทอ