ภาษาอังกฤษภาษาฝรั่งเศสสเปน

Ad


ไอคอน Fav ของ OnWorks

g++-4.7 - ออนไลน์ในคลาวด์

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

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

โครงการ:

ชื่อ


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

เรื่องย่อ


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

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

DESCRIPTION


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

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

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

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

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

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

OPTIONS


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

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

C ภาษา Options
-แอนซี -std=มาตรฐาน -fgnu89-อินไลน์ -aux-ข้อมูล ชื่อไฟล์
-fallow-parameterless-variadic-ฟังก์ชั่น -fno-asm -fno-ในตัว -fno-ในตัว-ฟังก์ชัน
- เป็นเจ้าภาพ - อิสระ -fopenmp -fms-ส่วนขยาย -fplan9-ส่วนขยาย -ไตรกราฟ
-ไม่มีบูรณาการ-cpp สไตล์ทรง -แบบดั้งเดิม-cpp -ฟอลโล-เดียว-ความแม่นยำ
-fcond-ไม่ตรงกัน -flax-เวกเตอร์การแปลง -fsigned-บิตฟิลด์ -fsigned-ถ่าน
-funsigned-บิตฟิลด์ -funsigned-ถ่าน

C + + ภาษา Options
-fabi-เวอร์ชั่น=n -fno-การเข้าถึง-การควบคุม -fcheck-ใหม่ -fconserve พื้นที่
-fconstexpr-ความลึก=n -ffriend-ฉีด -fno-elide-ตัวสร้าง -fno-enforce-eh-ข้อมูลจำเพาะ
-ffor-ขอบเขต -fno-for-ขอบเขต -fno-gnu-คำหลัก -fno-โดยนัย-เทมเพลต
-fno-implicit-inline-เทมเพลต -fno-ใช้อินไลน์ -fms-ส่วนขยาย
-fno-nonansi-บิวอิน -fnothrow-เลือก -fno-ชื่อผู้ประกอบการ -fno-ตัวเลือก-diags
-fอนุญาต -fno-สวย-แม่แบบ -เฟรโป -fno-rti -fstats -ftemplate-deep=n
-fno-threadsafe-สถิติ -ฟิวส์-cxa-atexit -fno-อ่อนแอ -nostdinc++ -fno-default-อินไลน์
-fvisibility-inline-ซ่อน -fvisibility-ms-เข้ากันได้ -วาบิ -Wconversion-null
-Wctor-dtor-ความเป็นส่วนตัว -Wdelete-ไม่ใช่เสมือน-dtor -การหดตัว -ไม่ยกเว้น
-Wnon-เสมือน-dtor - สั่งของ -เวฟเอฟซี++ -Wstrict-null-แมวมอง
-Wno-ไม่ใช่แม่แบบ-เพื่อน -Wold-สไตล์หล่อ -Woverloaded-เสมือน -Wno-pmf-การแปลง
-Wsign-โปรโมชั่น

Objective-C และ วัตถุประสงค์-C++ ภาษา Options
-fconstant-string-คลาส=ชื่อคลาส -fgnu-รันไทม์ -fnext-รันไทม์ -fno-nil-เครื่องรับ
-fobjc-abi-รุ่น=n -FOBJC-CALL-CXX-CDTORS -fobjc-ส่งตรง -fobjc-ข้อยกเว้น
-fobjc-gc -fobjc-nilcheck -fobjc-std=objc1 -freplace-objc-คลาส -fzero-ลิงค์
-gen-ประกาศ -Wassign-สกัดกั้น -Wno-โปรโตคอล -Wตัวเลือก -Wstrict-ตัวเลือกการแข่งขัน
-Wundeclared-ตัวเลือก

ภาษา อิสระ Options
-fmessage-ความยาว=n -fdiagnostics-แสดงตำแหน่ง=[ครั้งเดียว|ทุกบรรทัด]
-fno-diagnostics-แสดงตัวเลือก

การเตือน Options
-fsyntax เท่านั้น -fmax-ข้อผิดพลาด=n -อวดดี -pedantic-ข้อผิดพลาด -w -เว็กซ์ตร้า -ผนัง
-Waddress -Waggregate-กลับ -Warray ขอบเขต -Wno-แอตทริบิวต์
-Wno-builtin-มาโครกำหนดใหม่ -Wc++-เข้ากันได้กับ -Wc++11-เข้ากันได้ -Wcast-จัดตำแหน่ง -Wcast-คุณภาพ
-Wchar-ตัวห้อย - อุดตัน -ความคิดเห็น -Wแปลง -Wcoverage-ไม่ตรงกัน -Wno-cpp
-Wno-เลิกใช้ -Wno-เลิกใช้-ประกาศ -Wdisabled-เพิ่มประสิทธิภาพ -Wno-div-by-ศูนย์
-Wdouble-โปรโมชั่น -ร่างกายเปียกปอน -Wenum-เปรียบเทียบ -Wno-endif-ป้ายกำกับ - ผิดพลาด -ข้อผิดพลาด=*
-Wfatal-ข้อผิดพลาด -Wfloat-เท่ากับ -Wรูปแบบ -Wรูปแบบ=2 -Wno-format-contain-nul
-Wno-รูปแบบพิเศษหาเรื่อง -Wformat-ไม่ใช่ตัวอักษร -Wformat-การรักษาความปลอดภัย -Wformat-y2k
-Wframe-ขนาดใหญ่กว่า=len -Wno-free-nonheap-วัตถุ -Wjump-คิดถึง-init
-Wignored-รอบคัดเลือก -วิปริต -Wimplicit-ฟังก์ชั่น-การประกาศ -Wimplicit-int
-Winit-ตัวเอง -วินไลน์ -Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น -Wno-int-to-pointer-cast
-Wno-ไม่ถูกต้อง offsetof -Winvalid-pc - ใหญ่กว่า =len -Wunsafe-loop-การเพิ่มประสิทธิภาพ
-Wlogic-สหกรณ์ -ยาว-ยาว -Wเมน -Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น -Wmissing-เหล็กดัดฟัน
-Wmissing ฟิลด์เริ่มต้น -Wmissing รูปแบบแอตทริบิวต์ -Wmissing-รวม-dirs
-Wno-แผ่นกันโคลน -Wno-มัลติชาร์ -Wไม่เป็นโมฆะ -Wno-ล้น -Woverlength-สตริง -บรรจุห่อ
-Wpacked-bitfield-เข้ากันได้ - หุ้มเบาะ -วงเล็บ -Wpedantic-ms-รูปแบบ
-Wno-อวดดี-ms-รูปแบบ -Wpointer-อริธ -Wno-ตัวชี้ไปยัง int-cast -Wredundant-decl
-Wreturn-ประเภท -Wsequence จุด -เงา -Wsign-เปรียบเทียบ -Wsign-แปลง
-Wstack ป้องกัน -Wstack-การใช้งาน=len -Wstrict-นามแฝง -Wstrict-นามแฝง=n
-Wstrict-ล้น -Wstrict-ล้น=n -Wsuggest-แอตทริบิวต์=[บริสุทธิ์|const|นอร์เทิร์น]
-สวิตช์ -Wswitch-ค่าเริ่มต้น -Wswitch-enum -Wsync-nand -Wsystem-ส่วนหัว -แทรมโพลีน
-Wtrigraphs -Wtype-จำกัด -วันเดฟ - กำหนดค่าเริ่มต้น -Wunknown-pragmas -Wno-ปรากมาส
-Wunsuffixed-ลอยคงที่ - ใช้งานไม่ได้ -Wunused-ฟังก์ชั่น -Wunused-ฉลาก
-Wunused-local-typedefs -Wunused-พารามิเตอร์ -Wno-ไม่ได้ใช้-ผลลัพธ์ -Wunused-ค่า
-Wunused-ตัวแปร -Wunused-แต่-ตั้งค่า-พารามิเตอร์ -Wunused-แต่-ตั้งค่า-ตัวแปร
-Wvariadic-มาโคร -Wvector-การทำงาน-ประสิทธิภาพ -วลา -Wvolatile-ลงทะเบียน-var
-Wwrite-สตริง -Wzero-as-null-ตัวชี้-ค่าคงที่

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

การแก้จุดบกพร่อง Options
-dตัวอักษร -dumpspec -เครื่องทิ้งขยะ - การถ่ายโอนข้อมูล -fdbg-cnt-รายการ -fdbg-cnt=เคาน์เตอร์
รายการค่า -fdisable-ipa-รหัสผ่าน_ชื่อ -fdisable-rtl-รหัสผ่าน_ชื่อ -fdisable-rtl-ผ่าน-
ชื่อ=ช่วงรายการ -fdisable-ต้นไม้-รหัสผ่าน_ชื่อ -fdisable-ต้นไม้-ชื่อรหัสผ่าน=ช่วงรายการ
-fdump-noaddr -fdump-ไม่มีหมายเลข -fdump-unnumbered-ลิงค์ -fdump-translation-หน่วย[-n]
-fdump-คลาส-ลำดับชั้น[-n] -fdump-ipa-ทั้งหมด -fdump-ipa-cgraph -fdump-ipa-อินไลน์
-fdump-ผ่าน -fdump-สถิติ -fdump ต้นไม้ทั้งหมด -fdump-tree-ดั้งเดิม[-n]
-fdump-tree-ปรับให้เหมาะสม[-n] -fdump-ต้นไม้-cfg -fdump-ต้นไม้-vcg -fdump-tree-นามแฝง
-fdump-ต้นไม้-ช -fdump-ต้นไม้-ssa[-n] -fdump-ต้นไม้-pre[-n] -fdump ต้นไม้ CCP[-n]
-fdump-ต้นไม้-dce[-n] -fdump-ต้นไม้-gimple[-ดิบ] -fdump-ต้นไม้โคลน[-n]
-fdump-ต้นไม้-dom[-n] -fdump-ต้นไม้-dse[-n] -fdump-ต้นไม้-phiprop[-n] -fdump-ต้นไม้-phiopt[-n]
-fdump ต้นไม้ forwprop[-n] -fdump-ต้นไม้-copyrename[-n] -fdump-ต้นไม้-nrv -fdump ต้นไม้เวกเตอร์
-fdump-ต้นไม้อ่างล้างจาน -fdump-ต้นไม้-สระ[-n] -fdump ต้นไม้ forwprop[-n] -fdump-ต้นไม้ฟรี[-n]
-fdump-ต้นไม้-vrp[-n] -ftree-vectorizer-verbose=n -fdump-ต้นไม้-storeccp[-n]
-fdump-final-insns=ไฟล์ -fcompare-debug[=ตัวเลือก] -fcompare-debug-วินาที
-felimate-dwarf2-dups -felimate-unused-debug-types
-felimate-ไม่ได้ใช้-debug-symbols -femit-class-debug-เสมอ -เฟเนเบิล-ชนิด-ส่ง
-เฟเนเบิล-ชนิด-ส่ง=ช่วงรายการ -fdebug-ประเภทส่วน -fmem-รายงาน -fpre-ipa-mem-รายงาน
-fpost-ipa-mem-รายงาน -fprofile-ส่วนโค้ง -frandom-seed=เชือก -fsched-รายละเอียด=n
-fsel-กำหนด-รายละเอียด -fsel-กำหนดการการถ่ายโอนข้อมูล-cfg -fsel-sched-pipelining-รายละเอียด -fstack-การใช้งาน
-ftest-ครอบคลุม -ftime-รายงาน -fvar-ติดตาม -fvar-การติดตามการมอบหมาย
-fvar-การติดตามการมอบหมายสลับ -g -gระดับ -gtoggle -gcoff -คนแคระ-รุ่น -ggdb
-grecord-gcc-สวิตช์ -gno-record-gcc-สวิตช์ -gstabs -gstabs+ -gstrict-คนแคระ
-gno-เข้มงวด-คนแคระ -gvms -gxcoff -gxcoff+ -fno-merge-debug-strings
-fno-dwarf2-cfi-asm -fdebug-คำนำหน้าแผนที่=เก่า=ใหม่ -femit-struct-debug-baseonly
-femit-struct-debug-reduced -femit-struct-debug-รายละเอียด[=รายการข้อมูลจำเพาะ] -p หน้า
-พิมพ์ชื่อไฟล์=ห้องสมุด -print-libgcc-ชื่อไฟล์ -print-หลายไดเรกทอรี
-print-multi-lib -print-multi-os-ไดเรกทอรี -print-prog-name =โครงการ
-พิมพ์-ค้นหา-dirs -Q -พิมพ์-sysroot พิมพ์ sysroot ส่วนหัวต่อท้าย -save-อุณหภูมิ
-บันทึกอุณหภูมิ=cwd -บันทึกอุณหภูมิ=obj -เวลา[=ไฟล์]

การเพิ่มประสิทธิภาพ Options
-falign-ฟังก์ชั่น[=n] -falign-กระโดด[=n] -Falign-Labels [=n] -falign-ลูป[=n]
-fassociative-คณิตศาสตร์ -fauto-inc-ธ.ค -fbranch-ความน่าจะเป็น -fbranch-เป้าหมาย-โหลด-เพิ่มประสิทธิภาพ
-fbranch-เป้าหมาย-โหลด-เพิ่มประสิทธิภาพ2 -fbtr-bb-พิเศษ -fcaller-บันทึก -fcheck-ข้อมูล-deps
-fombine-stack-adjustments -fconserve-กอง -fcompare-เอลิม -fcprop-ลงทะเบียน
-fcrossjumping -fcse-ติดตามกระโดด -fcse-ข้ามบล็อก -fcx-fortran-กฎ
-fcx-จำกัดช่วง -fdata-ส่วน -fdce -fdelayed-สาขา -fdelete-null-pointer-ตรวจสอบ
-fdevirtualize -fdse -เกรงใจ-inlining -fipa-sra -การเพิ่มประสิทธิภาพราคาแพง
-ffat-lto-วัตถุ -ffast-คณิตศาสตร์ -ffinite-คณิตศาสตร์เท่านั้น -ลอยเก็บ
-fexcess-ความแม่นยำ=สไตล์ -ส่งต่อ-เผยแพร่ -ffp-สัญญา=สไตล์ -ffunction-ส่วน
-fgcse -fgcse-หลังรีโหลด -fgcse-ลาส -fgcse-lm -fgraphite-เอกลักษณ์ -fgcse-เอสเอ็ม
-fif-แปลง -fif-การแปลง2 -findirect-inlining -finline-ฟังก์ชั่น
-finline-ฟังก์ชั่นที่เรียกว่าครั้งเดียว -finline-จำกัด=n -finline-small-ฟังก์ชั่น -FIPA-CP
-fipa-cp-โคลน -fipa-เมทริกซ์-reorg -FIPA-PTA -fipa-โปรไฟล์ -fipa-บริสุทธิ์-const
-fipa-อ้างอิง -fira-อัลกอริทึม=ขั้นตอนวิธี -fira-ภาค=ภูมิภาค -fira-loop-ความดัน
-fno-ira-share-save-สล็อต -fno-ira-share-รั่วไหล-สล็อต -fira-verbose=n -fivopts
-fkeep-อินไลน์-ฟังก์ชั่น -fkeep-คงที่-consts -floop-บล็อก -flop-แบน
-floop-แลกเปลี่ยน -floop-สตริป-เหมือง -flop-parallelize-ทั้งหมด -flto
-flto-บีบอัดระดับ -flto-พาร์ทิชัน=ALG -flto-รายงาน -fmerge-all-ค่าคงที่
-fmerge-ค่าคงที่ -fmodulo-กำหนดการ -fmodulo-sched-allow-regmoves -fmove-loop-ค่าคงที่
fmudflap -fmudflapir -fmudflapth -fno-สาขานับ-reg -fno-default-อินไลน์
-fno-defer-ป๊อป -fno-ฟังก์ชัน-cse -fno-เดา-สาขา-ความน่าจะเป็น -fno-อินไลน์
-fno-คณิตศาสตร์เออร์โน -fno-ช่องมอง -fno-ช่องมอง2 -fno-กำหนด-interblock -fno-กำหนดการ-ข้อมูลจำเพาะ
-fno-ลงนาม-ศูนย์ -fno-toplevel-เรียงลำดับใหม่ -fno-trapping-คณิตศาสตร์
-fno-ศูนย์-เริ่มต้น-in-bss -fomit-frame-ตัวชี้ -foptimize-ลงทะเบียนย้าย
-foptimize-พี่น้อง-โทร -fpartial-inlining -fpeel-ลูป -fpredictive-ทั่วไป
-fprefetch-ลูปอาร์เรย์ -fprofile-แก้ไข -fprofile-dir=เส้นทาง -fprofile-สร้าง
-fprofile-สร้าง=เส้นทาง -fprofile-ใช้ -fprofile-use=เส้นทาง -fprofile-ค่า
-freciprocal-คณิตศาสตร์ -ฟรี - เฟรกมูฟ -frename-ลงทะเบียน -freeorder-บล็อก
-freeorder-blocks-and-partition -freeorder-ฟังก์ชั่น -frerun-cse-หลังลูป
-freschedule-modulo-scheduled-ลูป -Founding-คณิตศาสตร์ -fsched2-ใช้-ซุปเปอร์บล็อก
-fsched-ความดัน -fsched-spec-โหลด -fsched-spec-load-อันตราย
-fsched-stalled-insns-dep[= .]n] -fsched-stalled-insns[= .]n] -fsched-group-ฮิวริสติก
-fsched-สำคัญเส้นทาง-ฮิวริสติก -fsched-spec-insn-ฮิวริสติก -fsched-อันดับฮิวริสติก
-fsched-last-insn-ฮิวริสติก -fsched-dep-count-ฮิวริสติก -fschedule-อินน์
-fschedule-insns2 -fsection-สมอ -fselective-การตั้งเวลา -fselective-การตั้งเวลา2
-fsel-sched-pipeling -fsel-sched-pipelining-outer-loop -fshrink-ห่อ
-fsignaling-แนนส์ -fsingle-precision-คงที่ -fsplit-ivs-in-unroller
-fsplit-กว้าง-ประเภท -fstack- ป้องกัน -fstack-protector-ทั้งหมด -fstrict-นามแฝง
-fstrict-ล้น -fthread-กระโดด -รถเทรเซอร์ -ftree-บิต-ccp -ftree-builtin-โทร-dce
-ftree-ccp -ftree-ช -ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-คัดลอก-prop
-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse -ftree-forwprop
-ฟรีฟรี -ftree-วน-ถ้า-แปลง -ftree-loop-if-convert-stores -ftree-วน-im
-ftree-piprop -ftree-วน-กระจาย -ftree-loop-กระจายรูปแบบ
-ftree-วน-ivcanon -ftree-วน-เชิงเส้น -ftree-วน-เพิ่มประสิทธิภาพ -ftree-parallelize-ลูป=n
-ftree-ก่อน -ftree-บางส่วน-pre -ftree-พีทีเอ -ftree-reassoc -ftree-อ่างล้างจาน -ftree-สระ
-ftree-สวิตช์แปลง -ftree-tail-ผสาน -ftree-ter รุ่น -ftree-vect-loop-
-ftree- vectorize -ftree-vrp -สนุกในแต่ละครั้ง -funroll-all-ลูป -funroll-ลูป
-funsafe-loop-การเพิ่มประสิทธิภาพ -funsafe-คณิตศาสตร์-optimizations -funswitch-ลูป
-fvariable-ขยาย-in-unroller -fvect-ต้นทุน-รุ่น -fvpt -fweb -fwhole-โปรแกรม -fwpa
-ฟิวส์-ld=ลิงค์ -ฟิวส์-ลิงเกอร์-ปลั๊กอิน --พารามิเตอร์ ชื่อ=ความคุ้มค่า -O -O0 -O1 -O2 -O3 -คุณ
-Ofast

ตัวประมวลผลล่วงหน้า Options
-Aคำถาม=คำตอบ -NS-คำถาม[=คำตอบ] -C -วว -ดีไอ -ดีเอ็ม -ดีเอ็น -Dแมโคร[=ป้องกัน] -E -H
-idirอาฟเตอร์ dir - รวม ไฟล์ -ไอมาครอส ไฟล์ -iprefix ไฟล์ -iกับคำนำหน้า dir
-iกับคำนำหน้าก่อน dir -ไอซิสเต็ม dir -imultilib dir -isysroot dir -M -มม -มฟล -มก
-ส.ส -เอ็มคิว -มท -nostdinc -P -fdebug-cpp -ftrack-มาโครขยาย -fworking-ไดเรกทอรี
-รีแมป -ไตรกราฟ -Undef -Uแมโคร -Wp,ตัวเลือก -Xpreprocessor ตัวเลือก

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

linker Options
วัตถุไฟล์ชื่อ -lห้องสมุด -NostartFiles -nodedefaultlibs -nostdlib -พาย -ไดนามิค -s
-คงที่ -คงที่-libgcc -คงที่-libstdc++ - แบ่งปัน -Shared-Libgcc -สัญลักษณ์ -T ต้นฉบับ
-Wlตัวเลือก -เอ็กซ์ลิงค์เกอร์ ตัวเลือก -u เครื่องหมาย

ค้นหาสถานที่ Options
-Bอุปสรรค -Idir -iplugindir=dir -iquotedir -Ldir -ข้อมูลจำเพาะ=ไฟล์ -ผม- --sysroot=dir

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

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

ARM Options -mapcs-เฟรม -mno-apcs-เฟรม -มาบิ=ชื่อ -mapcs-stack-ตรวจสอบ
-mno-apcs-stack-ตรวจสอบ -mapcs-ลอย -mno-apcs-ลอย -mapcs-กลับเข้ามาใหม่
-mno-apcs-กลับเข้าใหม่ -msched-อารัมภบท -mno-กำหนดการอารัมภบท -little-endian -mbig-endian
-mwords-ลิตเติ้ลเอนเดียน -mfloat-abi=ชื่อ -mfpe -mfp16-รูปแบบ=ชื่อ -mthumb-การทำงานร่วมกัน
-mno-thumb-การทำงานร่วมกัน -mcpu=ชื่อ -มีนาคม=ชื่อ -mfpu=ชื่อ -mstruction-size-boundary=n
-มาบอร์-ออน-นอร์เทิร์น -mlong-โทร -นาทีโทรยาว -msingle-รูปฐาน
-mno-single-pic-ฐาน -mpic-register=reg -mnop-สนุก-dllimport -mcirrus-fix-invalid-insns
-mno-cirrus-fix-invalid-insns -mpoke-ฟังก์ชั่นชื่อ -นิ้วหัวแม่มือ - มาร์ม -mtpcs-เฟรม
-mtpcs-ใบไม้กรอบ -mcaller-super-การทำงานร่วมกัน -mcallee-super-การทำงานร่วมกัน -mtp=ชื่อ
-mtls ภาษา =ภาษาถิ่น -mword-ย้ายตำแหน่ง -mfix-cortex-m3-ldrd -munaligned-เข้าถึง
-mneon-สำหรับ-64bits

AVR Options -mmcu=มจร -สะสม-args -mbranch-ต้นทุน=ราคา -mcall-อารัมภบท -มิ้นต์8
-mno-ขัดจังหวะ -mrelax -mshort-โทร -mstrit-X -mtiny-กอง

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

ซีทูเอ็กซ์ Options -mbig-endian -little-endian -มีนาคม=ซีพียู -msim -msdata=sdata ชนิด

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

CR16 Options -เอ็มแมค -mcr16cplus -mcr16c -msim -มิ้นต์32 -mbit-ops -mdata-model=แบบ

ดาร์วิน Options -all_load -allowable_client -โค้ง -arch_errors_fatal -arch_only
-bind_at_load - มัด -bundle_loader -ชื่อลูกค้า -ความเข้ากันได้_รุ่น
-current_version -dead_strip -dependency-ไฟล์ -dylib_file -dylinker_install_name
- ไดนามิก -ไดนามิกlib -exported_ symbols_list -รายการไฟล์ -flat_namespace
-force_cpusubtype_ALL -force_flat_namespace -headerpad_max_install_names -iframework
-image_base -ในนั้น -install_name -keep_private_externs -multi_module
-คูณ_กำหนด -คูณ_กำหนด_ไม่ได้ใช้ -noall_load
-no_dead_strip_inits_and_terms -nofixprebinding -nomultidefs -ไม่พรีบินด์
-noseglinkแก้ไข -pagezero_size - ผูกมัด -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 -seglinkแก้ไข -เซปโปร -segs_read_only_addr
-segs_read_write_addr -single_module -คงที่ -sub_library -sub_umbrella
-twolevel_namespace -ร่ม -ไม่ได้กำหนด -unexported_ symbols_list
-weak_reference_mismatches -Whatsloaded -F -guused -gfull -mmacosx-เวอร์ชัน-min=รุ่น
-เคอร์เนล -mone ไบต์บูล

ธันวาคม แอลฟา Options -mno-fp-regs -msoft-ลอย -malpha-เหมือน -แก๊ส -มี่
-mieee-with-ไม่แน่นอน -mieee-สอดคล้อง -mfp-กับดัก-โหมด=โหมด -mfp-ปัดเศษโหมด=โหมด
-mtrap-ความแม่นยำ=โหมด -mbuild-ค่าคงที่ -mcpu=ประเภทซีพียู -mtune=ประเภทซีพียู -mbwx -มม.สูงสุด
-mfix -mcix -mfloat-vax -mfloat-ieee -meexplicit-relocs -msmall-ข้อมูล -mlarge-ข้อมูล
-msmall-ข้อความ -mlarge-ข้อความ -หน่วยความจำแฝง=เวลา

ธันวาคม อัลฟ่า/VMS Options -mvms-ส่งคืนรหัส -mdebug-main=อุปสรรค -mmalloc64

FR30 Options -msmall-แบบ -mno-lsim

ลิฟ Options -mgpr-32 -mgpr-64 -mfpr-32 -mfpr-64 -mhard-ลอย -msoft-ลอย
-malloc-ซีซี -mfixed-ซีซี -mdword -mno-dword -mdouble -mno-สองเท่า -มีเดีย -mno-สื่อ
-mmuladd -Mno-Muladd -mfdpic -minline-plt -mgplel-ro -multilib-library-รูป
-mlinked-fp -mlong-โทร ป้ายชื่อ-malign -mlibrary-รูป -macc-4 -macc-8 -เอ็มแพ็ก
-mno-แพ็ค -mno-flags -mcond-ย้าย -mno-cond-ย้าย -moptimize-สมาชิก
-mno-เพิ่มประสิทธิภาพ-สมาชิก -mscc -mno-scc -mcond-ผู้บริหาร -mno-cond-exec -mvliw-สาขา
-mno-vliw-สาขา -mmulti-cond-exec -mno-multi-cond-exec -mnested-cond-exec
-mno-ซ้อน-cond-exec -mtomcat-สถิติ -mTLS -mtl -mcpu=ซีพียู

GNU / Linux Options -มกลิบซี -muclibc -mionic -แมนดรอยด์ -tno-android-cc -tno-android-ld

H8 / 300 Options -mrelax -ม -นางสาว -ม -มิ้นต์32 -malign-300

HPPA Options -มีนาคม=สถาปัตยกรรมประเภท -mbig-สวิตช์ -mdisable-fpregs
-mdisable-การจัดทำดัชนี -mfast-ทางอ้อมโทร -แก๊ส -mgnu-ld -mhp-ld
-mfixed-ช่วง=ช่วงการลงทะเบียน -mjump-ในความล่าช้า -mlinker-ตัวเลือก -mlong-โทร
-mlong-โหลดร้านค้า -mno-บิ๊กสวิตช์ -mno-ปิดการใช้งาน-fpregs -mno-disable-การจัดทำดัชนี
-mno-สายด่วนทางอ้อม -mno-แก๊ส -mno-jump-in-ดีเลย์ -mno-long-load-store
-mno-portable-รันไทม์ -mno-นุ่มลอย -mno-space-regs -msoft-ลอย -mpa-risc-1-0
-mpa-risc-1-1 -mpa-risc-2-0 -mportable-รันไทม์ -mschedule=ประเภทซีพียู -mspace-regs
-msio -mwsio -มูนิกซ์=ยูนิกซ์-std -nolibdld -คงที่ -กระทู้

i386 และ x86-64 Options -mtune=ประเภทซีพียู -มีนาคม=ประเภทซีพียู -mfpmath=หน่วย -มาสม์=ภาษาถิ่น
-mno-fancy-คณิต-387 -mno-fp-ret-in-387 -msoft-ลอย -mno-wide-คูณ -mrtd
-malign-ดับเบิ้ล -mpreferred-stack-ขอบเขต=NUM -mincoming-stack-boundary=NUM -mcld
-mcx16 -msahf -mmovbe -mcrc32 -mrecip -mrecip=เลือก -mvzerouper -mprefer-avx128 -mmmmx
-msse -mse2 -mse3 -mssse3 -mse4.1 -mse4.2 -mse4 -mavx -mavx2 -แม่ -mclmul
-mfsgsฐาน -mrdrd -mf16c -mfma -mse4a -m3dnow -mpopcnt -แมม -mbmi -เอ็มทีบีเอ็ม -mfma4
-mxop -mlzcnt -mbmi2 -mlwp -mthreads -mno-จัด-stringops -minline-ทั้งหมด-stringops
-minline-stringops-ไดนามิก -mstringop-กลยุทธ์=ALG -mpush-หาเรื่อง
-สะสม-ออก-args -m128bit-ยาวสองเท่า -m96bit-ยาวสองเท่า -MregParm =NUM
-msseregparm -mveclabi=ชนิด -mvect8-ret-ในเมม -mpc32 -mpc64 -mpc80 -mstackrealign
-momit-leaf-frame-ตัวชี้ -mno-โซนสีแดง -mno-tls-direct-seg-refs -mcmodel=รหัสรุ่น
-มาบิ=ชื่อ -โหมดแมดเดรส=โหมด - ลบ.ม - ลบ.ม -mx32 -mlarge-data-threshold=NUM -mse2avx
-mfentry -m8bit-idiv -mavx256-split-unaligned-โหลด -mavx256-แยก-ไม่จัดแนว-จัดเก็บ

i386 และ x86-64 Windows Options -mconsole -mcygwin -mno-cygwin -mdll
-mnop-สนุก-dllimport -mthread -มิวนิโค้ด -mwin32 -mwindows -fno-set-stack-ปฏิบัติการได้

IA-64 Options -mbig-endian -little-endian -mgnu-เป็น -mgnu-ld -mno-รูป
-mvolatile-asm-หยุด -mregister-ชื่อ -msdata -mno-sdata -mconstan-gp -mauto-รูป
-mfused-mad -minline-float-divide-min-latency -minline-float-divide-max-throughput
-mno-inline-float-หาร -minline-int-divide-min-latency
-minline-int-divide-max-throughput -mno-inline-int-หาร -minline-sqrt-นาทีแฝง
-minline-sqrt-max-ปริมาณงาน -mno-อินไลน์-sqrt -mdwarf2-asm -Mearly-หยุดบิต
-mfixed-ช่วง=ช่วงการลงทะเบียน -mtls-ขนาด=tls-ขนาด -mtune=ประเภทซีพียู -milp32 -mlp64
-msched-br-ข้อมูลจำเพาะ -msched-ar-ข้อมูลจำเพาะ -msched-ควบคุมข้อมูลจำเพาะ -msched-br-in-ข้อมูลจำเพาะ
-msched-ar-in-ข้อมูลจำเพาะ -msched-in-ควบคุมข้อมูลจำเพาะ -msched-spec-ldc
-msched-spec-ควบคุม-ldc -msched-prefer-non-data-spec-insns
-msched-prefer-non-control-spec-insns -msched-stop-bits-after-ever-ทุกรอบ
-msched-count-spec-in-critical-path -msel-sched-dont-check-control-spec
-msched-fp-mem-deps-zero-ราคา -msched-max-memory-insns-hard-จำกัด
-msched-max-memory-insns=แม็กซ์อินน์

IA-64/VMS Options -mvms-ส่งคืนรหัส -mdebug-main=อุปสรรค -mmalloc64

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

M32R/D Options -m32r2 -m32rx -m32r -mdebug -malign-ลูป -mno-align-ลูป
-อัตราความผิดพลาด=จำนวน -mbranch-ต้นทุน=จำนวน -mmodel=รหัสขนาดรุ่นรุ่นประเภท -msdata=สดาต้า-
ชนิด -mno-ฟลัช-func -mflush-func=ชื่อ -mno-flush-กับดัก -mflush-กับดัก=จำนวน -G NUM

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

M680x0 Options -มีนาคม=โค้ง -mcpu=ซีพียู -mtune=ปรับแต่ง - ลบ.ม - ลบ.ม -m68020-40
-m68020-60 - ลบ.ม - ลบ.ม - ลบ.ม -mcpu32 - ลบ.ม -m5206e -m528x - ลบ.ม - ลบ.ม
-mcfv4e -mbitfield -mno-บิตฟิลด์ -mc68000 -mc68020 -mnobitfield -mrtd -mno-rtd
-mdiv -mno-div -mshort -mno-สั้น -mhard-ลอย - ลบ.ม -msoft-ลอย -mpcrel
-malign-int -mstrict-จัดตำแหน่ง -msep-ข้อมูล -mno-sep-ข้อมูล -msshared-library-id=n
-middle-shared-library -mno-id-shared-library -mxgot -mno-xgot

เอ็มคอร์ Options - ฮาร์ดไลท์ -mno-ฮาร์ดไลท์ -mdiv -mno-div -mrelax-ทันที
-mno-ผ่อนคลายทันที -mwide-บิตฟิลด์ -mno-กว้าง bitfields -m4byte-ฟังก์ชั่น
-mno-4byte-ฟังก์ชั่น -mcallgraph-ข้อมูล -mno-callgraph-ข้อมูล -mslow ไบต์
-mno-ช้าไบต์ -mno-lsim -little-endian -mbig-endian - ลบ.ม - ลบ.ม
-mstack-เพิ่มขึ้น

เมพ Options -แม็บดิฟฟ์ -mall-ตัวเลือก - เฉลี่ย -mbase=n -เอ็มบิท็อป -mc=n -mclip
-mconfig=ชื่อ -เอ็มคอป -mcop32 -mcop64 -mvc2 -mdc -mdiv -meb -เมล -mio-ระเหย -มล
-mleadz มม -mminmax -mmult -mno-ตัวเลือก -mrepeat -นางสาว -มสตูร์ -msdram -msim -msimnovec
-เอ็มทีเอฟ -mtiny=n

ไมโครเบลซ Options -msoft-ลอย -mhard-ลอย -msmall-หาร -mcpu=ซีพียู -mmmcpy
-mxl-soft-mul -mxl-soft-div -mxl-บาร์เรลกะ -mxl-รูปแบบเปรียบเทียบ -mxl-stack-ตรวจสอบ
-mxl-gp-ตัวเลือก -mno-ชัดเจน -mxl-คูณสูง -mxl-float-แปลง -mxl-float-ตร.ม
-mxl-โหมด-แอพรุ่น

MIPS Options -THE -อี.บี -มีนาคม=โค้ง -mtune=โค้ง -mips1 -mips2 -mips3 -mips4
-mips32 -mips32r2 -mips64 -mips64r2 -mips16 -mno-mips16 -mflip-mips16
-mininterlink-mips16 -mno-อินเตอร์ลิงค์-mips16 -มาบิ=ABI -มาบิคอล -mno-เอบิคอล
-msshared -mno- แบ่งปัน -mplt -mno-plt -mxgot -mno-xgot -mgp32 -mgp64 -mfp32
-mfp64 -mhard-ลอย -msoft-ลอย -msingle-ลอย -mdouble-ลอย -mdsp -mno-dsp
-mdspr2 -mno-dspr2 -mfpu=ประเภท fpu -msmartmips -mno-smartmips -mpaired-เดียว
-mno-คู่เดียว -mdmx -mno-mdmx -mips3d -mno-mips3d -มม -mno-ภูเขา -mlsc
-mno-llsc -mlong64 -mlong32 -msym32 -mno-sym32 -GNUM -mlocal-sdata
-mno-local-sdata -mextern-sdata -mno-ภายนอก-sdata -mgpopt -mno-gopt -membedded-ข้อมูล
-mno-ฝังข้อมูล -muninit-const-in-rodata -mno-uninit-const-in-rodata
-mcode-อ่านได้=การตั้งค่า -msplit-ที่อยู่ -mno-แยกที่อยู่ -meexplicit-relocs
-mno-ชัดเจน-relocs -mcheck-zero-ดิวิชั่น -mno-ตรวจสอบศูนย์หาร -mdivide-กับดัก
-mdivide-ตัวแบ่ง -mmmcpy -mno-memcpy -mlong-โทร -นาทีโทรยาว - แมด -mno-บ้า
-mfused-mad -mno-ฟิวส์ madd -nocpp -mfix-24k -mno-แก้ไข-24k -mfix-r4000
-mno-แก้ไข-r4000 -mfix-r4400 -mno-แก้ไข-r4400 -mfix-r10000 -mno-แก้ไข-r10000 -mfix-vr4120
-mno-แก้ไข-vr4120 -mfix-vr4130 -mno-แก้ไข-vr4130 -mfix-sb1 -mno-แก้ไข-sb1
-mflush-func=ฟังก์ชั่น -mno-ฟลัช-func -mbranch-ต้นทุน=NUM -mbranch-มีแนวโน้ม
-mno-สาขามีแนวโน้ม -mfp-ข้อยกเว้น -mno-fp-ข้อยกเว้น -mvr4130-จัดเรียง -mno-vr4130-จัดเรียง
-msynci -mno-ซิงค์ -mrelax-pic-โทร -mno-ผ่อนคลาย-pic-calls -mmcount-ra-ที่อยู่

เอ็มมิกซ์ Options -mlibfuncs -mno-libfuncs -เมปซิลอน -mno-เอปไซลอน -mabi=gnu
-mabi = mmixware -mzero-ขยาย -mknuthdiv -mtoplevel-สัญลักษณ์ -เมลฟ์ -mbranch-ทำนาย
-mno-สาขาทำนาย -mbase-ที่อยู่ -mno-ฐานที่อยู่ -msingle-ทางออก
-mno-ทางออกเดียว

MN10300 Options -mmult-บั๊ก -mno-mult-บั๊ก -mno-am33 -แม่33 -แมม33-2 -แม่34 -mtune=ซีพียู-
ชนิด -mreturn-ตัวชี้บน-d0 -mno-crt0 -mrelax -มลิว -msetlb

กปปส -11 Options -mfpu -msoft-ลอย -mac0 -mno-ac0 - ลบ.ม - ลบ.ม - ลบ.ม -mbcopy
-mbcopy-ในตัว -มิ้นต์32 -mno-int16 -มิ้นต์16 -mno-int32 -mfloat32 -mno-ลอย64
-mfloat64 -mno-ลอย32 -มาบชิ -mno-Abshi -mbranch-แพง -mbranch-ราคาถูก
-munix-asm -mdec-asm

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

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

RL78 Options -msim -mmul=ไม่มี -มมมูล=g13 -mmul=rl78

RS / 6000 และ PowerPC Options -mcpu=ประเภทซีพียู -mtune=ประเภทซีพียู -mcmodel=รหัสรุ่น -อำนาจ
-mno-อำนาจ -mpower2 -mno-power2 -mpowerpc -mpowerpc64 -mno-powerpc -มัลทีฟ
-mno-อัลทีฟเทค -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 -mmpgppr -mno-mfpgpr -mhard-dfp -mno-ฮาร์ด-dfp
-mnew-ความจำ -โมลด์-ความจำ -mfull-toc -mminimal-toc -mno-fp-ใน-toc
-mno-ผลรวมใน-toc - ลบ.ม - ลบ.ม -mxl-เข้ากันได้ -mno-xl-เข้ากันได้ -mpe -malign-อำนาจ
-malign-ธรรมชาติ -msoft-ลอย -mhard-ลอย -หลายหลาก -mno-หลาย -msingle-ลอย
-mdouble-ลอย -msimple-fpu -mstring -mno-สตริง - อัพเดท -mno-อัปเดต
-mavoid-indexed-ที่อยู่ -mno-หลีกเลี่ยงที่อยู่จัดทำดัชนี -mfused-mad -mno-ฟิวส์ madd
-mbit-จัดตำแหน่ง -mno-บิต-จัด -mstrict-จัดตำแหน่ง -mno-เข้มงวด-จัด -mrelocated
-mno-ย้ายได้ -mrelocatable-lib -mno-relolocable-lib -mtoc -mno-toc - เล็กน้อย
-little-endian -mbig -mbig-endian -mdynamic ไม่มีรูป -มัลทีฟ -mswdiv
-msingle-รูปฐาน -mprioritize-จำกัด-insns=ลำดับความสำคัญ
-msched-ค่าใช้จ่าย-dep=การพึ่งพาอาศัยกัน_type -minsert-sched-nops=โครงการ -mcall-sysv
-mcall-netbsd -maix-struct-ส่งคืน -msvr4-struct-ส่งคืน -มาบิ=ประเภท abi -msecure-plt
-mbss-plt -mblock-ย้ายอินไลน์จำกัด=NUM -มิเซล -mno-isel -misel=ใช่ -misel=ไม่ -msp
-mno-ความเร็ว -msp=ใช่ -msp=ไม่ - พิการ -mgen-เซลล์-ไมโครโค้ด -mwar-เซลล์-ไมโครโค้ด
-mvrบันทึก -mno-vrsave -มม -mno-mulhw -mdlmzb -mno-dlmzb -mfloat-gprs=ใช่
-mfloat-gprs=ไม่ -mfloat-gprs=โสด -mfloat-gprs=สองเท่า -ต้นแบบ -mno-ต้นแบบ
-msim -mmvme -บ้า -มีดพับ -สมาชิก -msdata -msdata=เลือก -mvxworks -G NUM
-pthread -mrecip -mrecip=เลือก -mno-recip -mrecip-ความแม่นยำ -mno-สูตรความแม่นยำ
-mveclabi=ชนิด -มฟริซ -mno-friz -mpointers-to-ซ้อนฟังก์ชัน
-mno-pointers-to-ซ้อนกัน-ฟังก์ชั่น -msave-toc-ทางอ้อม -mno-save-toc-ทางอ้อม

RX Options -m64bit-ดับเบิ้ล -m32bit-ดับเบิ้ล -fpu -โนฟปุ -mcpu= -mbig-endian-ข้อมูล
-mlittle-endian-ข้อมูล -msmall-ข้อมูล -msim -mno-ซิม -mas100-ไวยากรณ์ -mno-as100-ไวยากรณ์
-mrelax -mmmax-ขนาดคงที่= -mint-ลงทะเบียน= -mpid -msave-acc-in-ขัดจังหวะ

S / 390 และ zซีรี่ส์ Options -mtune=ประเภทซีพียู -มีนาคม=ประเภทซีพียู -mhard-ลอย -msoft-ลอย
-mhard-dfp -mno-ฮาร์ด-dfp -mlong-double-64 -mlong-double-128 -mbackchain
-mno-แบ็คเชน -mpacked-กอง -mno-บรรจุสแต็ค -msmall-exec -mno-small-ผู้บริหาร
-mmvcle -mno-mvcle - ลบ.ม - ลบ.ม -mdebug -mno-debug -เมซ่า -mzarch -mtpf-ติดตาม
-mno-tpf-ติดตาม -mfused-mad -mno-ฟิวส์ madd -mwarn-ขนาดเฟรม -mwarn-ไดนามิกสแต็ค
-mstack-ขนาด -mstack-ยาม

คะแนน Options -meb -เมล -mhwloop -muls -เอ็มแมค -mscore5 -mscore5u -mscore7 -mscore7d

SH Options - ลบ.ม - ลบ.ม -m2e -m2a-nofpu -m2a-เดี่ยวเท่านั้น -m2a-ซิงเกิล -m2a - ลบ.ม -m3e
-m4-โนฟปุ -m4-เดี่ยวเท่านั้น -m4-เดี่ยว - ลบ.ม -m4a-nofpu -m4a-เดี่ยวเท่านั้น -m4a-ซิงเกิล
-m4a -m4al -m5-64สื่อ -m5-64media-nofpu -m5-32สื่อ -m5-32media-nofpu -m5-กะทัดรัด
-m5-compact-nofpu -mb -มล -mdalign -mrelax -เคลื่อนย้ายได้ -mfmovd -มิทาจิ -mrenesas
-mno-เรเนซาส -mnomacsave -มี่ -mno-ieee -เอ็มบิท็อป -ผิดขนาด -minline-ic_invalidate
-mpadstruct -mspace -mprefergot -musermode -ราคาหลายทุน=จำนวน -mdiv=กลยุทธ์
-mdivsi3_libfunc=ชื่อ -mfixed-ช่วง=ช่วงการลงทะเบียน -majust-unroll
-mindexed-ที่อยู่ -mgetrcost=จำนวน -mpt-คงที่ -สะสม-ออก-args
-minvalid-สัญลักษณ์ -msoft-อะตอม -mbranch-ต้นทุน=NUM -mcbranchdi -mcpeqdi -mfused-mad
-mppretend-cmove

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

SPARC Options -mcpu=ประเภทซีพียู -mtune=ประเภทซีพียู -mcmodel=รหัสรุ่น -memory-model=เมม-
แบบ - ลบ.ม - ลบ.ม -mapp-regs -mno-แอป-regs -mfaster โครงสร้าง -mno-เร็วกว่าโครงสร้าง
-แฟลต -mno-แบน -mfpu -mno-fpu -mhard-ลอย -msoft-ลอย -mhard-quad-ลอย
-msoft-quad-ลอย -mstack-ลำเอียง -mno-stack-ลำเอียง -Munaligned-คู่
-mno-unaligned-double -mv8plus -mno-v8plus -mvis -mno-vis -mvis2 -mno-vis2
-mvis3 -mno-vis3 -mfmaf -mno-fmaf -mpopc -mno-popc -mfix-at697f

SPU Options -mwarn-reloc -merror-ย้าย -msafe-dma -munsafe-dma -mbranch-คำใบ้
-msmall-mem -mlarge-เม็ม -mstdmain -mfixed-ช่วง=ช่วงการลงทะเบียน -mea32 -mea64
-maddress-space-แปลง -mno-ที่อยู่-พื้นที่-แปลง -mcache-ขนาด=ขนาดแคช
-matomic-อัพเดท -mno-atomic-อัพเดท

System V Options -คิว -Qn -วายพีเส้นทาง -อืมdir

กระเบื้อง-Gx Options -mcpu=ซีพียู - ลบ.ม - ลบ.ม

ไทล์โปร Options -mcpu=ซีพียู - ลบ.ม

V850 Options -mlong-โทร -นาทีโทรยาว -เมพ -mno-ep -mprolog-ฟังก์ชั่น
-mno-prolog-ฟังก์ชัน -mspace -mtda=n -msda=n -mzda=n -mapp-regs -mno-แอป-regs
-mdisable-callt -mno-disable-callt -MV850E2V3 -mv850e2 -mv850e1 -mv850es -mv850e
-mv850 -mbig-สวิตช์

VAX Options - มก -มก -มิวนิค

วีเอ็กซ์เวิร์คส Options -mrtp -ไม่คงที่ -บีสแตติก -บีไดนามิค -Xbind-ขี้เกียจ -Xbind-ตอนนี้

x86-64 Options ดูตัวเลือก i386 และ x86-64

เอ็กซ์สตอร์มี่16 Options -msim

เอ็กซ์เทนซ่า Options -mconst16 -mno-const16 -mfused-mad -mno-ฟิวส์ madd -mforce ไม่มีรูป
-mserialize-ระเหย -mno-serialize-ระเหย -mtext-section-ตัวอักษร
-mno-text-section-ตัวอักษร -mtarget-จัด -mno-เป้าหมายจัด -mlongcalls
-mno-ลองโทร

zซีรี่ส์ Options ดูตัวเลือก S/390 และ zSeries

รหัส รุ่น Options
-fcall-บันทึก-reg -fcall-มือสอง-reg -แก้ไขแล้ว-reg - ข้อยกเว้น -fnon-call-ข้อยกเว้น
-funwind-ตาราง -fasynchronous-ผ่อนคลายตาราง -finhibit-size-คำสั่ง
-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-ตรวจสอบ -fstack-จำกัด-ลงทะเบียน=reg -fstack-limit- symbol=ซิม
-fno-stack-จำกัด -fsplit-กอง -fleading-ขีดเส้นใต้ -ftls-รุ่น=แบบ -ftrapv
-fwrapv -fbounds-ตรวจสอบ -การมองเห็นได้ชัดเจน -fstrict ระเหยบิตฟิลด์

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ไฟล์.โฆษณา
ไฟล์ซอร์สโค้ด 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 หาก internal
พบข้อผิดพลาดของคอมไพเลอร์

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

params
นี้จะแสดงค่าที่รับรู้โดย --พารามิเตอร์ ตัวเลือก

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

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

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

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

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

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

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

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

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

--help=warnings,^join,^undocumented

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

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

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

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

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

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

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

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

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

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

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

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

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

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

gcc -c tc -wrapper gdb,--args

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

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

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

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

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

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

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

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

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

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

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

-แอนซี
ในโหมด C จะเท่ากับ -std=c90. ในโหมด C++ จะเท่ากับ
-std = C ++ 98.

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

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

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

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

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

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

คอมไพเลอร์สามารถยอมรับมาตรฐานพื้นฐานต่างๆ เช่น c90 or ค++98และภาษาถิ่นของ GNU
ของมาตรฐานเหล่านั้น เช่น gnu90 or กนู++98. โดยการระบุมาตรฐานพื้นฐาน the
คอมไพเลอร์จะยอมรับทุกโปรแกรมที่เป็นไปตามมาตรฐานนั้นและโปรแกรมที่ใช้GNU
ส่วนขยายที่ไม่ขัดแย้งกับมัน ตัวอย่างเช่น, -std=c90 ปิดบาง
คุณสมบัติของ GCC ที่เข้ากันไม่ได้กับ ISO C90 เช่น "asm" และ "typeof"
คำหลัก แต่ไม่ใช่ส่วนขยาย GNU อื่น ๆ ที่ไม่มีความหมายใน ISO C90 เช่น
ละเว้นคำกลางของนิพจน์ "?:" ในทางกลับกัน โดยการระบุ GNU
ภาษาถิ่นของมาตรฐาน ฟีเจอร์ทั้งหมดที่คอมไพเลอร์รองรับจะเปิดใช้งาน แม้ว่าจะ
คุณสมบัติเปลี่ยนความหมายของมาตรฐานพื้นฐานและบางโปรแกรมที่สอดคล้องอย่างเข้มงวด
อาจถูกปฏิเสธ มาตรฐานเฉพาะถูกใช้โดย -อวดดี เพื่อระบุว่า
คุณสมบัติคือส่วนขยายของ GNU เมื่อพิจารณาจากเวอร์ชันมาตรฐานนั้น ตัวอย่างเช่น -std=gnu90
-อวดดี จะเตือนเกี่ยวกับสไตล์ C ++ // ความคิดเห็นในขณะที่ -std=gnu99 -อวดดี จะ
ไม่.

ต้องระบุค่าสำหรับตัวเลือกนี้ ค่าที่เป็นไปได้คือ

c90
c89
iso9899: 1990
รองรับโปรแกรม ISO C90 ทั้งหมด (ส่วนขยาย GNU บางตัวที่ขัดแย้งกับ ISO C90
ถูกปิดใช้งาน) เหมือนกับ -แอนซี สำหรับรหัส C

iso9899: 199409
ISO C90 ตามที่แก้ไขในการแก้ไข 1

c99
ซีทูเอ็กซ์
iso9899: 1999
iso9899:199x
ISO C99. โปรดทราบว่ามาตรฐานนี้ยังไม่รองรับอย่างสมบูรณ์ ดู
<http://gcc.gnu.org/gcc-4.7/c99status.html> สำหรับข้อมูลเพิ่มเติม ชื่อ ซีทูเอ็กซ์
และ iso9899:199x เลิกใช้แล้ว

c11
ซีทูเอ็กซ์
iso9899: 2011
ISO C11 ฉบับปรับปรุงปี 2011 ของมาตรฐาน ISO C การสนับสนุนไม่สมบูรณ์และ
ทดลอง ชื่อ ซีทูเอ็กซ์ เลิกใช้แล้ว

gnu90
gnu89
ภาษา GNU ของ ISO C90 (รวมถึงคุณสมบัติ C99 บางอย่าง) นี่เป็นค่าเริ่มต้นสำหรับ C
รหัส.

gnu99
gnu9x
ภาษา GNU ของ ISO C99 เมื่อ ISO C99 ถูกนำไปใช้อย่างสมบูรณ์ใน GCC สิ่งนี้จะ
กลายเป็นค่าเริ่มต้น ชื่อ gnu9x เลิกใช้แล้ว

gnu11
gnu1x
ภาษา GNU ของ ISO C11 การสนับสนุนไม่สมบูรณ์และอยู่ในช่วงทดลอง ชื่อ gnu1x
เลิกใช้แล้ว

ค++98
มาตรฐาน ISO C++ ปี 1998 พร้อมการแก้ไขเพิ่มเติม เหมือนกับ -แอนซี สำหรับรหัส C++

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

ค++11
มาตรฐาน ISO C++ ปี 2011 พร้อมการแก้ไขเพิ่มเติม ยังคงรองรับ C++11 อยู่
ทดลองและอาจเปลี่ยนแปลงในลักษณะที่เข้ากันไม่ได้ในรุ่นต่อๆ ไป

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

-fgnu89-อินไลน์
ทางเลือก -fgnu89-อินไลน์ บอกให้ GCC ใช้ความหมายของ GNU ดั้งเดิมสำหรับ "อินไลน์"
ทำงานเมื่ออยู่ในโหมด C99
ตัวเลือกนี้ได้รับการยอมรับและละเว้นโดย GCC เวอร์ชัน 4.1.3 จนถึงแต่ไม่รวม
4.3. ใน GCC เวอร์ชัน 4.3 และใหม่กว่า จะเปลี่ยนพฤติกรรมของ GCC ในโหมด C99 โดยใช้
ตัวเลือกนี้เทียบเท่ากับการเพิ่มแอตทริบิวต์ฟังก์ชัน "gnu_inline" ให้กับall
ฟังก์ชันอินไลน์

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

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

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

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

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

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

-fno-asm
ไม่รู้จัก "asm", "inline" หรือ "typeof" เป็นคีย์เวิร์ด เพื่อให้โค้ดใช้สิ่งเหล่านี้ได้
คำเป็นตัวระบุ คุณสามารถใช้คำหลัก "__asm__", "__inline__" และ
"__typeof__" แทน -แอนซี หมายถึง -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 อาจใช้ข้อมูลเกี่ยวกับสิ่งนั้น
ฟังก์ชันเพื่อเตือนปัญหาเกี่ยวกับการเรียกใช้ฟังก์ชันนั้น หรือเพื่อสร้างเพิ่มเติม
โค้ดที่มีประสิทธิภาพ แม้ว่าโค้ดผลลัพธ์จะยังคงมีการเรียกใช้ฟังก์ชันนั้นอยู่ก็ตาม สำหรับ
ตัวอย่าง คำเตือนจะได้รับกับ -Wรูปแบบ สำหรับการเรียก "printf" ที่ไม่ดีเมื่อ "printf" เป็น
ในตัวและ "strlen" เป็นที่รู้จักว่าไม่แก้ไขหน่วยความจำส่วนกลาง

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

#define เอบีเอส (n) __builtin_abs ((n))
#กำหนด strcpy(d, s) __buildin_strcpy ((d), (s))

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

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

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

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

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

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

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

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

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

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

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

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

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

-ไม่มีบูรณาการ-cpp
ดำเนินการคอมไพล์ในสองรอบ: การประมวลผลล่วงหน้าและการรวบรวม ตัวเลือกนี้ช่วยให้
ผู้ใช้ระบุ "cc1", "cc1plus" หรือ "cc1obj" ผ่านทาง -B ตัวเลือก. ผู้ใช้ให้มา
ขั้นตอนการคอมไพล์สามารถเพิ่มในขั้นตอนก่อนการประมวลผลเพิ่มเติมหลังจากปกติ
การประมวลผลล่วงหน้า แต่ก่อนที่จะรวบรวม ค่าเริ่มต้นคือการใช้ cpp . แบบรวม
(ซีพีพีภายใน)

ความหมายของตัวเลือกนี้จะเปลี่ยนไปหากรวม "cc1", "cc1plus" และ "cc1obj"

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-fabi-เวอร์ชั่น=n
ใช้เวอร์ชัน n ของ C++ ABI เวอร์ชัน 2 เป็นเวอร์ชันของ C++ ABI ที่มาก่อน
ปรากฏใน G++ 3.4 เวอร์ชัน 1 เป็นเวอร์ชันของ C++ ABI ที่ปรากฏตัวครั้งแรกใน
จี++ 3.2. เวอร์ชัน 0 จะเป็นเวอร์ชันที่สอดคล้องกับ C++ . มากที่สุดเสมอ
ข้อกำหนด ABI ดังนั้น ABI ที่ได้รับโดยใช้เวอร์ชัน 0 จะเปลี่ยนเป็น ABI
ข้อบกพร่องได้รับการแก้ไข

ค่าเริ่มต้นคือเวอร์ชัน 2

เวอร์ชัน 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 คำนำหน้า ++
และ -- และฟังก์ชันขอบเขตคลาสที่ใช้เป็นอาร์กิวเมนต์เทมเพลต

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

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

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

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

ตัวเลือกนี้ใช้ไม่ได้กับเป้าหมายส่วนใหญ่แล้ว ตอนนี้ได้เพิ่มการรองรับสำหรับ
การใส่ตัวแปรลงใน BSS โดยไม่ทำให้เกิดร่วมกัน

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ความไม่ลงรอยกันที่รู้จักกันใน -fabi-เวอร์ชั่น=2 (ค่าเริ่มต้น) รวมถึง:

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

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

สิ่งนี้ได้รับการแก้ไขใน -fabi-เวอร์ชั่น=3.

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

ความโกลาหลเปลี่ยนไปใน -fabi-เวอร์ชั่น=4.

ความไม่ลงรอยกันที่รู้จักกันใน -fabi-เวอร์ชั่น=1 รวมถึง:

· การจัดการส่วนท้ายสำหรับบิตฟิลด์ไม่ถูกต้อง G++ อาจพยายามแพ็คข้อมูล
เป็นไบต์เดียวกับคลาสฐาน ตัวอย่างเช่น:

โครงสร้าง A { โมฆะเสมือน f (); int f1 : 1; };
โครงสร้าง B: สาธารณะ A { int f2: 1; };

ในกรณีนี้ G++ จะวาง "B::f2" ลงในไบต์เดียวกับ "A::f1"; คอมไพเลอร์อื่น ๆ
จะไม่. คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยการเติม "A" ให้ชัดเจนเพื่อให้มีขนาด
เป็นขนาดไบต์หลายขนาดบนแพลตฟอร์มของคุณ ที่จะทำให้เกิด G++ และอื่นๆ
คอมไพเลอร์ไปยังเลย์เอาต์ "B" เหมือนกัน

· การจัดการส่วนท้ายไม่ถูกต้องสำหรับฐานเสมือน G++ ไม่ใช้หาง
padding เมื่อวางฐานเสมือน ตัวอย่างเช่น:

โครงสร้าง A { โมฆะเสมือน f (); ถ่าน c1; };
โครงสร้าง B { B(); ถ่าน c2; };
struct C : สาธารณะ A, เสมือนสาธารณะ B {};

ในกรณีนี้ G++ จะไม่ใส่ "B" ลงในส่วนท้ายสำหรับ "A" อื่น ๆ
คอมไพเลอร์จะ คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยการเติม "A" ให้ชัดเจนเพื่อให้เป็น
ขนาดเป็นการจัดตำแหน่งหลายแบบ (ละเว้นคลาสฐานเสมือน); นั่นจะ
ทำให้ G++ และคอมไพเลอร์อื่นจัดวาง "C" เหมือนกัน

· การจัดการบิตฟิลด์ที่ไม่ถูกต้องด้วยความกว้างที่ประกาศมากกว่าความกว้าง
ชนิดพื้นฐาน เมื่อบิตฟิลด์ปรากฏในสหภาพ ตัวอย่างเช่น:

ยูเนี่ยน ยู { int i : 4096; };

สมมติว่า "int" ไม่มี 4096 บิต G++ จะทำให้สหภาพมีขนาดเล็กเกินไป
ตามจำนวนบิตใน "int"

· คลาสว่างสามารถวางที่ออฟเซ็ตที่ไม่ถูกต้อง ตัวอย่างเช่น:

โครงสร้าง A {};

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

โครงสร้าง C : สาธารณะ B สาธารณะ A {};

G++ จะวางคลาสฐาน "A" ของ "C" ไว้ที่ออฟเซ็ตที่ไม่ใช่ศูนย์ ควรวางไว้
ที่ออฟเซ็ตศูนย์ G++ เข้าใจผิดคิดว่าสมาชิกข้อมูล "A" ของ "B" คือ
อยู่ที่ออฟเซ็ตศูนย์แล้ว

· ชื่อของฟังก์ชันเทมเพลตที่มีประเภทที่เกี่ยวข้องกับ "typename" หรือ template template
พารามิเตอร์สามารถจัดการได้ไม่ถูกต้อง

แม่แบบ
เป็นโมฆะ f(พิมพ์ชื่อ Q::X) {}

แม่แบบ คลาส Q>
โมฆะ f(พิมพ์ชื่อ Q ::NS) {}

อินสแตนซ์ของเทมเพลตเหล่านี้อาจเสียหายอย่างไม่ถูกต้อง

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

· สำหรับ SYSV/x86-64 เมื่อผ่านยูเนี่ยนด้วย long double จะเปลี่ยนเป็น pass in
หน่วยความจำตามที่ระบุใน psABI ตัวอย่างเช่น:

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

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

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

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

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

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

ธงนี้รวมอยู่ใน -ผนัง และ -Wc++11-เข้ากันได้.

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

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

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

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

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

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

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

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

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

· รายการที่ 12: ต้องการการกำหนดค่าเริ่มต้นให้กับการกำหนดในตัวสร้าง

· รายการที่ 14: สร้าง destructors เสมือนในคลาสพื้นฐาน

· รายการที่ 15: ให้ "operator=" คืนค่าการอ้างอิงถึง *this

· รายการที่ 23: อย่าพยายามส่งคืนข้อมูลอ้างอิงเมื่อคุณต้องส่งคืนวัตถุ

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

· รายการที่ 6: แยกแยะระหว่างคำนำหน้าและรูปแบบหลังการแก้ไขของการเพิ่มขึ้นและการลดลง
ผู้ประกอบการ

· ข้อ 7: ห้ามโอเวอร์โหลด "&&", "||" หรือ ","

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

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

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

-Wold-สไตล์หล่อ (C++ และ Objective-C++ เท่านั้น)
เตือนหากมีการใช้รูปแบบเก่า (สไตล์ C) ที่ส่งไปยังประเภทที่ไม่ใช่โมฆะภายในโปรแกรม C++
นักแสดงรูปแบบใหม่ (ไดนามิก_แคสต์, static_cast, ตีความใหม่_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 แต่มาตรฐานบังคับ the
พฤติกรรมปัจจุบัน

โครงสร้าง A {
ตัวดำเนินการ int ();
A& โอเปอเรเตอร์ = (int);
};

หลัก ()
{
ก, ข;
ก = ข;
}

ในตัวอย่างนี้ G++ จะสังเคราะห์ค่าดีฟอลต์ A& ผู้ประกอบการ = (คส NS&);ในขณะที่เผชิญหน้า
จะใช้ผู้ใช้กำหนด ผู้ประกอบการ =.

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

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

gcc -g -fgnu-รันไทม์ -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-คลาส=ชื่อคลาส
ใช้ ชื่อคลาส เป็นชื่อของคลาสที่จะสร้างอินสแตนซ์สำหรับแต่ละสตริงตามตัวอักษร
ระบุด้วยไวยากรณ์ "@"..."" ชื่อคลาสเริ่มต้นคือ "NXConstantString" if
กำลังใช้รันไทม์ของ GNU และ "NSConstantString" หากรันไทม์ NeXT เป็น
ใช้แล้ว (ดูด้านล่าง) NS -fconstant-cfstrings ตัวเลือก ถ้ามี จะแทนที่
-fconstant สตริงคลาส การตั้งค่าและทำให้ตัวอักษร "@"..."" ถูกจัดวางเป็นค่าคงที่
สตริง 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-ส่งตรง
อนุญาตให้ข้ามไปยังผู้ส่งข้อความอย่างรวดเร็ว ในดาร์วินสิ่งนี้ทำได้ผ่าน
หน้าคอม

-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-ไม่มีการตรวจสอบ. ไม่มีการตรวจสอบวิธีการเรียนและการโทรพิเศษ
สำหรับ 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) ไม่เชื่อมโยงแบบคงที่ในวัตถุผลลัพธ์
ไฟล์และอนุญาต ดีล(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("...")" โดยไม่คำนึงถึงตัวเลือกบรรทัดคำสั่ง

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-อวดดี
ออกคำเตือนทั้งหมดตามข้อกำหนด ISO C และ ISO C++ ที่เข้มงวด ปฏิเสธทุกโปรแกรมที่
ใช้ส่วนขยายที่ต้องห้าม และโปรแกรมอื่นๆ บางโปรแกรมที่ไม่เป็นไปตาม ISO C และ ISO
ค ++ สำหรับ ISO C ให้เป็นไปตามเวอร์ชันของมาตรฐาน ISO C ที่ระบุโดย any -มาตรฐาน
ตัวเลือกที่ใช้

โปรแกรม ISO C และ ISO C++ ที่ถูกต้องควรคอมไพล์อย่างถูกต้องโดยมีหรือไม่มีตัวเลือกนี้
(ถึงจะมีน้อยคนนักจะต้องการ -แอนซี หรือ -มาตรฐาน ตัวเลือกระบุรุ่นที่ต้องการ
ของ ISO C) อย่างไรก็ตาม หากไม่มีตัวเลือกนี้ ส่วนขยาย GNU บางรายการและ C และ . ดั้งเดิม
รองรับคุณสมบัติ C ++ เช่นกัน ด้วยตัวเลือกนี้ พวกเขาจะถูกปฏิเสธ

-อวดดี ไม่ก่อให้เกิดข้อความเตือนสำหรับการใช้คำสำคัญอื่นซึ่ง
ชื่อขึ้นต้นและลงท้ายด้วย __. คำเตือน Pedantic ยังปิดการใช้งานในนิพจน์
ที่ตามหลัง "__extension__" อย่างไรก็ตาม ไฟล์ส่วนหัวของระบบเท่านั้นที่ควรใช้ไฟล์เหล่านี้
เส้นทางหลบหนี โปรแกรมแอปพลิเคชันควรหลีกเลี่ยง

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

คุณลักษณะในการรายงานความล้มเหลวในการปฏิบัติตาม ISO C อาจมีประโยชน์ในบางกรณี
แต่จะต้องใช้งานเพิ่มเติมอีกมาก และจะค่อนข้างแตกต่างไปจาก
-อวดดี. เราไม่มีแผนจะสนับสนุนคุณลักษณะดังกล่าวในอนาคตอันใกล้นี้

โดยที่มาตรฐานกำหนดไว้ด้วย -มาตรฐาน แสดงถึงภาษาถิ่นขยาย GNU ของ C เช่น
gnu90 or gnu99, มีความสอดคล้อง ฐาน มาตรฐาน, เวอร์ชันของ ISO C ที่
ภาษาถิ่นขยาย GNU เป็นพื้นฐาน คำเตือนจาก -อวดดี จะได้รับที่ที่พวกเขาอยู่
ที่ต้องการตามมาตรฐานฐาน (ไม่สมควรที่จะตักเตือนเช่นนั้น
สำหรับคุณสมบัติที่ไม่ได้อยู่ในภาษา GNU C ที่ระบุเท่านั้นเนื่องจากตามคำจำกัดความของ GNU
ภาษาถิ่นของ C รวมถึงคุณสมบัติทั้งหมดที่คอมไพเลอร์รองรับด้วยตัวเลือกที่กำหนดและ
จะได้ไม่ต้องเตือนอะไร)

-pedantic-ข้อผิดพลาด
Like -อวดดียกเว้นว่ามีการสร้างข้อผิดพลาดมากกว่าการเตือน

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

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

-Waddress -Warray ขอบเขต (เฉพาะกับ -O2) -Wc++11-เข้ากันได้ -Wchar-ตัวห้อย
-Wenum-เปรียบเทียบ (ใน C/Objc นี่เป็นค่าเริ่มต้นใน C++) -Wimplicit-int (ค และ
วัตถุประสงค์-C เท่านั้น) -Wimplicit-ฟังก์ชั่น-การประกาศ (C และ Objective-C เท่านั้น) -ความคิดเห็น
-Wรูปแบบ -Wเมน (สำหรับ C/ObjC เท่านั้น และเว้นแต่ - อิสระ) -Wmaybe-ไม่ได้กำหนดค่าเริ่มต้น
-Wmissing-เหล็กดัดฟัน -Wไม่เป็นโมฆะ -วงเล็บ -Wpointer-สัญญาณ - สั่งของ -Wreturn-ประเภท
-Wsequence จุด -Wsign-เปรียบเทียบ (เฉพาะใน C ++) -Wstrict-นามแฝง -Wstrict-ล้น=1
-สวิตช์ -Wtrigraphs - กำหนดค่าเริ่มต้น -Wunknown-pragmas -Wunused-ฟังก์ชั่น
-Wunused-ฉลาก -Wunused-ค่า -Wunused-ตัวแปร -Wvolatile-ลงทะเบียน-var

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

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

- อุดตัน -ร่างกายเปียกปอน -Wignored-รอบคัดเลือก -Wmissing ฟิลด์เริ่มต้น
-Wmissing-พารามิเตอร์-type (ซีเท่านั้น) -Wold-style-ประกาศ (ซีเท่านั้น) -Woverride-เริ่มต้น
-Wsign-เปรียบเทียบ -Wtype-จำกัด - กำหนดค่าเริ่มต้น -Wunused-พารามิเตอร์ (เฉพาะกับ - ใช้งานไม่ได้ or
-ผนัง) -Wunused-แต่-ตั้งค่า-พารามิเตอร์ (เฉพาะกับ - ใช้งานไม่ได้ or -ผนัง)

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

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

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

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

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

· (C++ เท่านั้น) รับแอดเดรสของตัวแปรที่ประกาศไว้ ทะเบียน.

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

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

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

-Wno-ครอบคลุม-ไม่ตรงกัน
เตือนหากโปรไฟล์คำติชมไม่ตรงกันเมื่อใช้ -fprofile-ใช้ ตัวเลือก. ถ้า
ไฟล์ต้นฉบับถูกเปลี่ยนระหว่าง -fprofile-gen และ -fprofile-ใช้, ไฟล์ที่มี
ความคิดเห็นเกี่ยวกับโปรไฟล์อาจไม่ตรงกับไฟล์ต้นฉบับและ 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" เพราะการลอย-
อักษรจุดคือ "สองเท่า"

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

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

ตั้งแต่ -Wรูปแบบ ยังตรวจสอบอาร์กิวเมนต์รูปแบบ null สำหรับหลายฟังก์ชัน -Wรูปแบบ
ยังหมายความถึง -Wไม่เป็นโมฆะ.

-Wรูปแบบ รวมอยู่ใน -ผนัง. สำหรับการควบคุมเพิ่มเติมในบางแง่มุมของการตรวจสอบรูปแบบ
ตัวเลือก -Wformat-y2k, -Wno-รูปแบบพิเศษหาเรื่อง, -Wno-รูปแบบความยาวเป็นศูนย์,
-Wformat-ไม่ใช่ตัวอักษร, -Wformat-การรักษาความปลอดภัยและ -Wรูปแบบ=2 มีอยู่แต่ไม่ใช่
รวมอยู่ใน -ผนัง.

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

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

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

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

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

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

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

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

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

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

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

-Wไม่เป็นโมฆะ รวมอยู่ใน -ผนัง และ -Wรูปแบบ. มันสามารถปิดการใช้งานด้วย -Wno-ไม่เป็นโมฆะ
ตัวเลือก

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

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

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

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

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

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

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

คำเตือนนี้ยังเปิดใช้งานโดย -เว็กซ์ตร้า.

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

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

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

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

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

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

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

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

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

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

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

ยังเตือนถึงการใช้ที่เป็นอันตรายของ ?: โดยละเว้นส่วนขยาย 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++

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

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

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

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

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

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

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

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

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

ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ

คำเตือนนี้ยังเปิดใช้งานโดย - ใช้งานไม่ได้ พร้อมด้วย -เว็กซ์ตร้า.

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

ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ

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

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

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

ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ

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

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

ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ

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

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

ในการระงับคำเตือนนี้ ให้ใช้ปุ่ม ไม่ได้ใช้ คุณลักษณะ

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

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

- ใช้งานไม่ได้
ทั้งหมดข้างต้น - ใช้งานไม่ได้ ตัวเลือกรวมกัน

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

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

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

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

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

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

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

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

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

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

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

คำเตือนนี้เปิดใช้งานโดย -ผนัง or -เว็กซ์ตร้า.

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

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

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

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

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

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

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

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

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

-Wstrict-ล้น=1
เตือนเกี่ยวกับกรณีที่ทั้งน่าสงสัยและง่ายต่อการหลีกเลี่ยง ตัวอย่างเช่น: "x +
1 > x"; กับ -fstrict-ล้นคอมไพเลอร์จะทำให้สิ่งนี้ง่ายขึ้นเป็น 1 ระดับนี้
of -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-แอตทริบิวต์=[บริสุทธิ์|const|นอร์เทิร์น]
เตือนในกรณีที่การเพิ่มแอตทริบิวต์อาจเป็นประโยชน์ คุณสมบัติในปัจจุบัน
รองรับตามรายการด้านล่าง

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

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

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

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

-แทรมโพลีน
เตือนเกี่ยวกับแทรมโพลีนที่สร้างขึ้นสำหรับตัวชี้ไปยังฟังก์ชันที่ซ้อนกัน

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

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

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

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

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

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

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

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

· U คำต่อท้ายค่าคงที่จำนวนเต็มหรือ F or L คำต่อท้ายค่าคงที่ทศนิยม
(ตัว C ดั้งเดิมรองรับ L ต่อท้ายค่าคงที่จำนวนเต็ม) หมายเหตุ these
คำต่อท้ายปรากฏในมาโครที่กำหนดไว้ในส่วนหัวของระบบของระบบที่ทันสมัยที่สุด
เช่น _นาที/_สูงสุด มาโครใน " " การใช้มาโครเหล่านี้ในรหัสผู้ใช้อาจ
ปกติจะนำไปสู่คำเตือนที่หลอกลวง อย่างไรก็ตาม ตัวประมวลผลล่วงหน้าแบบรวมของ 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 และไม่รองรับในเวอร์ชัน GCC ก่อน GCC 3.0

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

-Wno-endif-ป้ายกำกับ
อย่าเตือนเมื่อใดก็ตามที่ an #อื่น หรือ #เอนดิฟ ตามด้วยข้อความ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-Wbad-ฟังก์ชั่น-cast (C และ Objective-C เท่านั้น)
เตือนทุกครั้งที่มีการเรียกใช้ฟังก์ชันเป็นประเภทที่ไม่ตรงกัน ตัวอย่างเช่น เตือน if
"int malloc()" ถูกส่งไปยัง "อะไรก็ได้ *"

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

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

-Wcast-คุณภาพ
เตือนทุกครั้งที่ใช้ตัวชี้เพื่อลบตัวระบุประเภทออกจากประเภทเป้าหมาย
ตัวอย่างเช่น เตือนว่า "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++

- อุดตัน
เตือนตัวแปรที่อาจเปลี่ยนโดย ลองเจเอ็มพี or ส้อม. คำเตือนนี้ก็เช่นกัน
เปิดใช้งานโดย -เว็กซ์ตร้า.

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

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

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

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

-ร่างกายเปียกปอน
เตือนหากมีเนื้อหาว่างเปล่าเกิดขึ้นใน an if, อื่น or do ในขณะที่ คำแถลง. คำเตือนนี้คือ
ยังเปิดใช้งานโดย -เว็กซ์ตร้า.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

คำเตือนนี้ยังเปิดใช้งานโดย -เว็กซ์ตร้า.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

-Wpacked-bitfield-เข้ากันได้
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-บรรจุบิตฟิลด์เข้ากันได้ เพื่อปิดการใช้งานนี้
การเตือน

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

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

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

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

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

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

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

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

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

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

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

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

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

-วลา
เตือนหากใช้อาร์เรย์ความยาวผันแปรในโค้ด -Wno-vla จะป้องกันไม่ให้
-อวดดี คำเตือนของอาร์เรย์ความยาวผันแปร

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

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

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

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

-Wno-แผ่นกันโคลน
ระงับคำเตือนเกี่ยวกับโครงสร้างที่ไม่สามารถใช้เครื่องมือได้ -fmudflap.

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

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

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

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

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 ถูกสร้างขึ้นพร้อมความสามารถเพิ่มเติม
รูปแบบการดีบักมากกว่าหนึ่งรูปแบบ

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

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

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

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

-fno-debug-types-section
โดยค่าเริ่มต้นเมื่อใช้ DWARF v4 หรือสูงกว่าประเภท DIE จะถูกรวมเป็นของตัวเอง
ส่วน .debug_types แทนที่จะทำให้เป็นส่วนหนึ่งของส่วน .debug_info มันคือ
มีประสิทธิภาพมากขึ้นในการแยกส่วน comdat เนื่องจากตัวเชื่อมโยงจะเป็น
สามารถลบซ้ำได้ แต่ไม่ใช่ผู้บริโภค DWARF ทั้งหมดที่สนับสนุน .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) ที่จะล้มเหลวโดยมีข้อผิดพลาด

-คนแคระ-รุ่น
สร้างข้อมูลการดีบักในรูปแบบ DWARF (หากได้รับการสนับสนุน) นี้เป็น
รูปแบบที่ใช้โดย DBX บน IRIX 6 ค่าของ รุ่น อาจเป็น 2, 3 หรือ 4; NS
เวอร์ชันเริ่มต้นคือ 2

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

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

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

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

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

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

-gvms
สร้างข้อมูลการดีบักในรูปแบบการดีบัก VMS (หากได้รับการสนับสนุน) นี้เป็น
รูปแบบที่ใช้โดย DEBUG บนระบบ 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.

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

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

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

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

-fcompare-debug=, ที่มีเครื่องหมายเท่ากับ แต่ไม่มี ตัวเลือก, เทียบเท่ากับ
-fno-เปรียบเทียบ-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
บีบอัดข้อมูลการดีบัก DWARF2 โดยกำจัดข้อมูลที่ซ้ำกันเกี่ยวกับแต่ละรายการ
เครื่องหมาย. ตัวเลือกนี้เหมาะสมเมื่อสร้างข้อมูลการดีบัก DWARF2 เท่านั้น
กับ -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-รายละเอียด[=รายการข้อมูลจำเพาะ]
ระบุประเภทเหมือนโครงสร้างที่คอมไพเลอร์จะสร้างข้อมูลการดีบัก
จุดประสงค์คือเพื่อลดข้อมูลการดีบักโครงสร้างที่ซ้ำกันระหว่างอ็อบเจกต์ต่างๆ
ไฟล์ในโปรแกรมเดียวกัน

ตัวเลือกนี้เป็นเวอร์ชันโดยละเอียดของ -femit-struct-debug-reduced และ
-femit-struct-debug-baseonlyซึ่งจะตอบสนองความต้องการส่วนใหญ่

ข้อกำหนดมีไวยากรณ์[ผบ:|ดัชนี:][ออร์:|แนว:](ใด|SYS|ฐาน|ไม่มี)

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

คำที่สองที่เป็นทางเลือกจำกัดข้อกำหนดเฉพาะโครงสร้างธรรมดา (ออร์:) หรือ
โครงสร้างทั่วไป (แนว:). โครงสร้างทั่วไปค่อนข้างซับซ้อนในการอธิบาย สำหรับ C++
เหล่านี้เป็นความเชี่ยวชาญเฉพาะทางที่ไม่ชัดแจ้งของคลาสเทมเพลตหรือคลาสที่ไม่ใช่เทมเพลต
ภายในข้างต้น ภาษาโปรแกรมอื่น ๆ มีชื่อสามัญ แต่
-femit-struct-debug-รายละเอียด ยังไม่ได้ดำเนินการ

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

คุณอาจต้องทดลองเพื่อกำหนดการตั้งค่าที่ดีที่สุดสำหรับแอปพลิเคชันของคุณ

ค่าเริ่มต้นคือ -femit-struct-debug-detailed=all.

ตัวเลือกนี้ใช้ได้กับ DWARF 2 เท่านั้น

-fno-merge-debug-strings
สั่งให้ตัวเชื่อมโยงไม่รวมสตริงเข้าด้วยกันในข้อมูลการดีบักที่เป็น
เหมือนกันในไฟล์อ็อบเจ็กต์ต่างๆ แอสเซมเบลอร์ทั้งหมดไม่รองรับการรวมหรือ
ลิงเกอร์ การผสานจะลดขนาดของข้อมูลการดีบักในไฟล์เอาต์พุตที่
ค่าใช้จ่ายในการเพิ่มเวลาในการประมวลผลลิงก์ การผสานถูกเปิดใช้งานโดยค่าเริ่มต้น

-fdebug-คำนำหน้าแผนที่=เก่า=ใหม่
เมื่อรวบรวมไฟล์ในไดเร็กทอรี เก่า, บันทึกข้อมูลการดีบักที่อธิบายว่าเป็น
in ใหม่ แทน.

-fno-dwarf2-cfi-asm
ปล่อย DWARF 2 คลายข้อมูลในขณะที่คอมไพเลอร์สร้างส่วน ".eh_frame" แทนที่จะใช้
GAS ".cfi_*" คำสั่ง

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

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

-Q ทำให้คอมไพเลอร์พิมพ์ชื่อฟังก์ชันแต่ละชื่อในขณะที่คอมไพล์แล้วพิมพ์บางส่วน
สถิติการผ่านแต่ละครั้งเมื่อเสร็จสิ้น

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

-fmem-รายงาน
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับการจัดสรรหน่วยความจำถาวรเมื่อ
เสร็จสิ้น

-fpre-ipa-mem-รายงาน
-fpost-ipa-mem-รายงาน
ทำให้คอมไพเลอร์พิมพ์สถิติบางอย่างเกี่ยวกับการจัดสรรหน่วยความจำถาวรก่อนหรือ
หลังจากการเพิ่มประสิทธิภาพระหว่างขั้นตอน

-fstack-การใช้งาน
ทำให้ข้อมูลการใช้งานคอมไพเลอร์เอาท์พุตสแต็คสำหรับโปรแกรม บนฟังก์ชันต่อหนึ่งฟังก์ชัน
พื้นฐาน ชื่อไฟล์สำหรับการถ่ายโอนข้อมูลถูกสร้างขึ้นโดยการต่อท้าย .su ไป โอกซ์เนม. โอกซ์เนม is
สร้างขึ้นจากชื่อของไฟล์เอาต์พุต หากระบุไว้อย่างชัดเจนและไม่ใช่ an
เรียกใช้งานได้ มิฉะนั้น จะเป็นชื่อฐานของไฟล์ต้นทาง รายการประกอบด้วย
สามฟิลด์:

· ชื่อของฟังก์ชัน

· จำนวนไบต์

· ตัวระบุตั้งแต่หนึ่งตัวขึ้นไป: "คงที่", "ไดนามิก", "จำกัดขอบเขต"

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

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

-fprofile-ส่วนโค้ง
เพิ่มรหัสเพื่อให้โปรแกรมไหล โค้ง เป็นเครื่องมือ ระหว่างดำเนินการโปรแกรม
บันทึกจำนวนครั้งที่แต่ละสาขาและการโทรถูกดำเนินการและจำนวนครั้งที่ดำเนินการ
หรือกลับมา เมื่อออกจากโปรแกรมที่คอมไพล์แล้ว จะบันทึกข้อมูลนี้ลงในไฟล์ชื่อ
auxname.gcda สำหรับแต่ละไฟล์ต้นฉบับ ข้อมูลอาจถูกนำไปใช้เพื่อกำหนดโปรไฟล์
การเพิ่มประสิทธิภาพ (-fbranch-ความน่าจะเป็น) หรือสำหรับการวิเคราะห์ความครอบคลุมการทดสอบ
(-ftest-ครอบคลุม). ไฟล์อ็อบเจ็กต์แต่ละไฟล์ โอกซ์เนม สร้างขึ้นจากชื่อของ
ไฟล์เอาต์พุต หากระบุไว้อย่างชัดเจนและไม่ใช่ไฟล์ปฏิบัติการขั้นสุดท้าย มิฉะนั้นจะเป็น
เป็นชื่อฐานของไฟล์ต้นทาง ในทั้งสองกรณีส่วนต่อท้ายจะถูกลบออก (เช่น
foo.gcda สำหรับไฟล์อินพุต ผู้อำนวยการ/fo.c,หรือ ไดร์/foo.gcda สำหรับไฟล์เอาต์พุตที่ระบุเป็น -o
ผู้อำนวยการ/fo.o).

--ความคุ้มครอง
ตัวเลือกนี้ใช้เพื่อคอมไพล์และเชื่อมโยงโค้ดเครื่องมือสำหรับการวิเคราะห์ความครอบคลุม NS
option เป็นคำพ้องความหมายสำหรับ -fprofile-ส่วนโค้ง -ftest-ครอบคลุม (เมื่อเรียบเรียง) และ -แอลจีคอฟ
(เมื่อทำการเชื่อมโยง) ดูเอกสารประกอบสำหรับตัวเลือกเหล่านั้นสำหรับรายละเอียดเพิ่มเติม

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

·เชื่อมโยงไฟล์อ็อบเจ็กต์ของคุณกับ -แอลจีคอฟ or -fprofile-ส่วนโค้ง (หลังหมายถึง
อดีต).

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

· สำหรับการเพิ่มประสิทธิภาพแบบกำหนดโปรไฟล์ ให้คอมไพล์ไฟล์ต้นฉบับอีกครั้งด้วยไฟล์เดียวกัน
ตัวเลือกการเพิ่มประสิทธิภาพและการสร้างโค้ด plus -fbranch-ความน่าจะเป็น.

· สำหรับการวิเคราะห์ความครอบคลุมการทดสอบ ให้ใช้ จีคอฟ เพื่อสร้างข้อมูลที่มนุษย์อ่านได้จาก
.gcno และ .gcda ไฟล์. อ้างถึง จีคอฟ เอกสารสำหรับเพิ่มเติม
ข้อมูล

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

-ftest-ครอบคลุม
สร้างไฟล์บันทึกย่อที่ จีคอฟ ยูทิลิตี้การครอบคลุมรหัสสามารถใช้เพื่อแสดงโปรแกรม
ความคุ้มครอง ไฟล์บันทึกของไฟล์ต้นฉบับแต่ละไฟล์เรียกว่า auxname.gcno. อ้างถึง
-fprofile-ส่วนโค้ง ตัวเลือกด้านบนสำหรับคำอธิบายของ โอกซ์เนม และคำแนะนำวิธีการ
สร้างข้อมูลครอบคลุมการทดสอบ ข้อมูลความครอบคลุมจะจับคู่กับไฟล์ต้นทางอย่างใกล้ชิดยิ่งขึ้น
หากคุณไม่ปรับให้เหมาะสม

-fdbg-cnt-รายการ
พิมพ์ชื่อและขอบบนของตัวนับสำหรับตัวนับการดีบักทั้งหมด

-fdbg-cnt=รายการค่าเคาน์เตอร์
ตั้งค่าขอบเขตบนของตัวนับการดีบักภายใน รายการค่าเคาน์เตอร์ เป็นเครื่องหมายจุลภาคคั่น
รายการของ ชื่อ:ความคุ้มค่า คู่ที่ตั้งค่าขอบเขตบนของแต่ละเคาน์เตอร์ดีบัก ชื่อ ไปยัง
ความคุ้มค่า. ตัวนับการดีบักทั้งหมดมีขอบเขตบนเริ่มต้นของ UINT_MAXดังนั้น dbg_cnt()
คืนค่า จริง เสมอ เว้นแต่ตัวเลือกนี้กำหนดขอบเขตบน เช่น กับ
-fdbg-cnt=dce:10,tail_call:0 dbg_cnt(dce) จะคืนค่าจริงสำหรับ 10 คนแรกเท่านั้น
การเรียกร้อง

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

*<-fdisable-ipa-ส่ง>
ปิดการใช้งาน ipa pass ส่ง. ส่ง คือชื่อรหัสผ่าน หากบัตรผ่านเดียวกันเป็นแบบคงที่
เรียกใช้ในคอมไพเลอร์หลายครั้ง ชื่อรหัสผ่านควรต่อท้ายด้วย a
ลำดับที่เริ่มจาก 1

*<-fdisable-rtl-ส่ง>
*<-fdisable-rtl-ส่ง=ช่วงรายการ>
ปิดการใช้งาน rtl pass ส่ง. ส่ง คือชื่อรหัสผ่าน หากบัตรผ่านเดียวกันเป็นแบบคงที่
เรียกใช้ในคอมไพเลอร์หลายครั้ง ชื่อรหัสผ่านควรต่อท้ายด้วย a
ลำดับที่เริ่มจาก 1 ช่วงรายการ เป็นรายการที่คั่นด้วยเครื่องหมายจุลภาคของ
ช่วงฟังก์ชันหรือชื่อแอสเซมเบลอร์ แต่ละช่วงเป็นคู่ตัวเลขคั่นด้วย a
ลำไส้ใหญ่ ช่วงนี้จะรวมอยู่ในปลายทั้งสอง หากช่วงนั้นไม่สำคัญ ตัวเลข
คู่สามารถลดความซับซ้อนเป็นตัวเลขเดียว ถ้าโหนด cgraph ของฟังก์ชัน's UID is
อยู่ในช่วงที่กำหนด ส่ง ถูกปิดการใช้งานสำหรับสิ่งนั้น
ฟังก์ชัน UID แสดงในส่วนหัวของฟังก์ชันของไฟล์ดัมพ์ และ pass
สามารถทิ้งชื่อได้โดยใช้ตัวเลือก -fdump-ผ่าน.

*<-fdisable-tree-ส่ง>
*<-fdisable-tree-ส่ง=ช่วงรายการ>
ปิดการใช้งานการผ่านต้นไม้ ส่ง. ดู -fdisable-rtl สำหรับคำอธิบายของ option
ข้อโต้แย้ง

*<-fenable-ipa-ส่ง>
เปิดใช้งาน ipa pass ส่ง. ส่ง คือชื่อรหัสผ่าน หากบัตรผ่านเดียวกันเป็นแบบคงที่
เรียกใช้ในคอมไพเลอร์หลายครั้ง ชื่อรหัสผ่านควรต่อท้ายด้วย a
ลำดับที่เริ่มจาก 1

*<-fenable-rtl-ส่ง>
*<-fenable-rtl-ส่ง=ช่วงรายการ>
เปิดใช้งาน rtl pass ส่ง. ดู -fdisable-rtl สำหรับคำอธิบายตัวเลือกอาร์กิวเมนต์และ
ตัวอย่าง.

*<-fenable-tree-ส่ง>
*<-fenable-tree-ส่ง=ช่วงรายการ>
เปิดใช้งานการผ่านต้นไม้ ส่ง. ดู -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-ต้นไม้-einline
# ปิดการใช้งาน ipa inlining
-fdisable-ipa-แบบอินไลน์
# เปิดใช้งานการคลี่ต้นไม้เต็ม
-fenable-tree-คลี่

-dตัวอักษร
-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-จักร
ดัมพ์หลังจากดำเนินการผ่านการจัดโครงสร้างใหม่ขึ้นอยู่กับเครื่อง ถ้าผ่าน
ที่มีอยู่

-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-regmove
การถ่ายโอนข้อมูลหลังจากการลงทะเบียนย้ายผ่าน

-fdump-rtl-sched1
-fdump-rtl-sched2
-fdump-rtl-sched1 และ -fdump-rtl-sched2 เปิดใช้งานการดัมพ์หลังจากบล็อกพื้นฐาน
กำหนดการผ่าน

-fdump-rtl-ดู
การถ่ายโอนข้อมูลหลังจากการยกเลิกการขยายสัญญาณ

-fdump-rtl-seqabstr
ดัมพ์หลังจากการค้นพบลำดับทั่วไป

-fdump-rtl-ย่อ
ทิ้งหลังจากตัดกิ่งให้สั้นลง

-fdump-rtl-พี่น้อง
ดัมพ์หลังจากการเพิ่มประสิทธิภาพการเรียกพี่น้อง

-fdump-rtl-แยก1
-fdump-rtl-แยก2
-fdump-rtl-แยก3
-fdump-rtl-แยก4
-fdump-rtl-แยก5
-fdump-rtl-แยก1, -fdump-rtl-แยก2, -fdump-rtl-แยก3, -fdump-rtl-แยก4 และ
-fdump-rtl-แยก5 เปิดใช้งานการดัมพ์หลังจากแบ่งคำสั่งห้ารอบ

-fdump-rtl-sms
ดัมพ์หลังจากการตั้งเวลาโมดูโล บัตรผ่านนี้ใช้ได้เฉพาะกับสถาปัตยกรรมบางประเภทเท่านั้น

-fdump-rtl-กอง
ดัมพ์หลังจากแปลงจาก "ไฟล์ลงทะเบียนแบบแบน" ของ GCC ลงทะเบียนเป็น x87's
รีจิสเตอร์เหมือนสแต็ก บัตรผ่านนี้ใช้ได้กับรุ่น x86 เท่านั้น

-fdump-rtl-subreg1
-fdump-rtl-subreg2
-fdump-rtl-subreg1 และ -fdump-rtl-subreg2 เปิดใช้งานการดัมพ์หลังจากสอง subreg
การขยายตัวผ่าน

-fdump-rtl-ยกเลิกการแบ่งปัน
ดัมพ์หลังจากยกเลิกการแชร์ rtl ทั้งหมดแล้ว

-fdump-rtl-vartrack
ดัมพ์หลังจากการติดตามตัวแปร

-fdump-rtl-vregs
ดัมพ์หลังจากแปลงการลงทะเบียนเสมือนเป็นฮาร์ดรีจิสเตอร์

-fdump-rtl-เว็บ
ดัมพ์หลังจากแยกช่วงสด

-fdump-rtl-regclass
-fdump-rtl-subregs_of_mode_init
-fdump-rtl-subregs_of_mode_finish
-fdump-rtl-dfinit
-fdump-rtl-dfinish
ดัมพ์เหล่านี้ถูกกำหนดแต่จะสร้างไฟล์เปล่าเสมอ

-in
-fdump-rtl-ทั้งหมด
สร้างการถ่ายโอนข้อมูลทั้งหมดที่ระบุไว้ข้างต้น

-ดีเอ ใส่คำอธิบายประกอบเอาต์พุตของแอสเซมเบลอร์ด้วยข้อมูลการดีบักเบ็ดเตล็ด

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

-ดีเอช สร้างคอร์ดัมพ์เมื่อใดก็ตามที่เกิดข้อผิดพลาด

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

-ดีพี ดัมพ์ RTL ในเอาต์พุตแอสเซมเบลอร์เป็นความคิดเห็นก่อนแต่ละคำสั่ง อีกด้วย
เปิด -dp คำอธิบายประกอบ

-dv สำหรับแต่ละไฟล์ดัมพ์ที่ระบุ (-fdump-rtl-ส่ง) ทิ้ง
การแสดงกราฟควบคุมที่เหมาะสมสำหรับการดูด้วย VCG ถึง
ไฟล์.pass.vcg.

-dx เพียงสร้าง RTL สำหรับฟังก์ชันแทนการคอมไพล์ มักใช้กับ
-fdump-rtl-ขยาย.

-fdump-noaddr
เมื่อทำการดีบักดัมพ์ ให้ระงับเอาต์พุตที่อยู่ สิ่งนี้ทำให้เป็นไปได้มากขึ้นที่จะ
ใช้ diff ในการดีบักดัมพ์สำหรับการเรียกใช้คอมไพเลอร์ด้วยไบนารีคอมไพเลอร์ที่แตกต่างกัน
และ/หรือตำแหน่งเริ่มต้นข้อความ / bss / data / heap / stack / dso ที่แตกต่างกัน

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

-fdump-unnumbered-ลิงค์
เมื่อทำการดีบักดัมพ์ (ดู -d ตัวเลือกด้านบน) ระงับหมายเลขคำสั่งสำหรับ
เชื่อมโยงไปยังคำสั่งก่อนหน้าและถัดไปตามลำดับ

-fdump-translation-หน่วย (C++ เท่านั้น)
-fdump-การแปล-หน่วย-ตัวเลือก (C++ เท่านั้น)
ดัมพ์การแสดงโครงสร้างแบบทรีสำหรับหน่วยการแปลทั้งหมดไปยังไฟล์
ชื่อไฟล์ทำโดยการต่อท้าย .tu ไปที่ชื่อไฟล์ต้นทาง และไฟล์ is
สร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ถ้า -ตัวเลือก ใช้แบบฟอร์ม,
ตัวเลือก ควบคุมรายละเอียดของดัมพ์ตามที่อธิบายไว้สำหรับ -fdump-ต้นไม้ ตัวเลือก

-fdump-คลาส-ลำดับชั้น (C++ เท่านั้น)
-fdump-คลาส-ลำดับชั้น-ตัวเลือก (C++ เท่านั้น)
ดัมพ์การแสดงลำดับชั้นของแต่ละคลาสและเค้าโครงตารางฟังก์ชันเสมือนไปที่a
ไฟล์. ชื่อไฟล์ทำโดยการต่อท้าย .ระดับ ไปยังชื่อไฟล์ต้นทางและไฟล์
ถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับไฟล์เอาต์พุต ถ้า -ตัวเลือก ใช้แบบฟอร์ม,
ตัวเลือก ควบคุมรายละเอียดของดัมพ์ตามที่อธิบายไว้สำหรับ -fdump-ต้นไม้ ตัวเลือก

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

ทั้งหมด เปิดใช้งานการถ่ายโอนข้อมูลการวิเคราะห์ระหว่างขั้นตอนทั้งหมด

ซีกราฟ
ดัมพ์ข้อมูลเกี่ยวกับการเพิ่มประสิทธิภาพกราฟการเรียก การลบฟังก์ชันที่ไม่ได้ใช้ และ
การตัดสินใจแบบอินไลน์

แบบอินไลน์
ดัมพ์หลังจากฟังก์ชัน inlining

-fdump-ผ่าน
ดัมพ์รายการของการเพิ่มประสิทธิภาพที่เปิดและปิดโดยปัจจุบัน
ตัวเลือกบรรทัดคำสั่ง

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

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

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

ชื่อ
หากตั้งค่า "DECL_ASSEMBLER_NAME" ไว้สำหรับ Decl ที่กำหนด ให้ใช้สิ่งนั้นใน dump
แทนที่จะเป็น "DECL_NAME" การใช้งานหลักคือใช้งานง่ายทำงานย้อนกลับจาก
ชื่อที่สับสนในไฟล์แอสเซมบลี

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

ดิบ พิมพ์เป็นตัวแทนดิบของต้นไม้ ตามค่าเริ่มต้น ต้นไม้จะถูกพิมพ์อย่างสวยงามลงใน
การแสดงเหมือน C

รายละเอียด
เปิดใช้งานการถ่ายโอนข้อมูลที่มีรายละเอียดมากขึ้น (ไม่รองรับทุกตัวเลือกการถ่ายโอนข้อมูล)

สถิติ
เปิดใช้งานการดัมพ์สถิติต่างๆ เกี่ยวกับการส่งผ่าน (ไม่ได้รับการตอบรับจากทุกการถ่ายโอนข้อมูล
ตัวเลือก)

บล็อก
เปิดใช้งานการแสดงขอบเขตบล็อกพื้นฐาน (ปิดใช้งานในการถ่ายโอนข้อมูลดิบ)

โว้ป
เปิดใช้งานการแสดงตัวถูกดำเนินการเสมือนสำหรับทุกคำสั่ง

ผ้าลินิน
เปิดใช้งานการแสดงหมายเลขบรรทัดสำหรับใบแจ้งยอด

UID เปิดใช้งานการแสดง ID เฉพาะ ("DECL_UID") สำหรับแต่ละตัวแปร

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

eh เปิดใช้งานการแสดงหมายเลขภูมิภาค EH ที่ถือแต่ละคำสั่ง

สเซฟ
เปิดใช้งานการแสดงรายละเอียดการวิเคราะห์วิวัฒนาการสเกลาร์

ทั้งหมด เปิดตัวเลือกทั้งหมด ยกเว้น ดิบ, บาง, ละเอียด และ ผ้าลินิน.

การทิ้งต้นไม้ต่อไปนี้เป็นไปได้:

เป็นต้นฉบับ
ดัมพ์ก่อนการเพิ่มประสิทธิภาพตามต้นไม้ใดๆ ถึง ไฟล์.ต้นฉบับ.

การปรับให้เหมาะสม
ทิ้งหลังจากการเพิ่มประสิทธิภาพตามต้นไม้ทั้งหมดไปยัง ไฟล์.เพิ่มประสิทธิภาพ.

กิมเพิล
ดัมพ์แต่ละฟังก์ชันก่อนและหลัง gimplification ส่งผ่านไปยังไฟล์ ไฟล์
ชื่อทำโดยการต่อท้าย .ยิ้ม ไปที่ชื่อไฟล์ต้นทาง

CFG ดัมพ์กราฟโฟลว์การควบคุมของแต่ละฟังก์ชันไปยังไฟล์ ชื่อไฟล์สร้างโดย
ท้าย .cfg ไปที่ชื่อไฟล์ต้นทาง

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

ch ดัมพ์แต่ละฟังก์ชันหลังจากคัดลอกส่วนหัวของลูป ชื่อไฟล์ทำโดยการต่อท้าย
.ch ไปที่ชื่อไฟล์ต้นทาง

SSA ดัมพ์ข้อมูลที่เกี่ยวข้องกับ SSA ไปยังไฟล์ ชื่อไฟล์ทำโดยการต่อท้าย .ssa
ไปที่ชื่อไฟล์ต้นทาง

นามแฝง
ดัมพ์ข้อมูลนามแฝงสำหรับแต่ละฟังก์ชัน ชื่อไฟล์ทำโดยการต่อท้าย
.นามแฝง ไปที่ชื่อไฟล์ต้นทาง

ซีซีพี ดัมพ์แต่ละฟังก์ชันหลังจาก CCP ชื่อไฟล์ทำโดยการต่อท้าย .ซีซีพี ไป
ชื่อไฟล์ต้นทาง

ร้านค้าccp
ดัมพ์แต่ละฟังก์ชันหลังจาก STORE-CCP ชื่อไฟล์ทำโดยการต่อท้าย .storeccp
ไปที่ชื่อไฟล์ต้นทาง

ก่อน ทิ้งต้นไม้หลังจากกำจัดความซ้ำซ้อนบางส่วน ชื่อไฟล์สร้างโดย
ท้าย .ก่อน ไปที่ชื่อไฟล์ต้นทาง

FRE ทิ้งต้นไม้หลังจากกำจัดความซ้ำซ้อนทั้งหมด ชื่อไฟล์ทำโดยการต่อท้าย
.ฟรี ไปที่ชื่อไฟล์ต้นทาง

คัดลอก
ทิ้งต้นไม้หลังจากการคัดลอกการขยายพันธุ์ ชื่อไฟล์ทำโดยการต่อท้าย .CopyProp
ไปที่ชื่อไฟล์ต้นทาง

store_copyprop
ทิ้งต้นไม้หลังจากเก็บสำเนาขยายพันธุ์ ชื่อไฟล์ทำโดยการต่อท้าย
.store_copyprop ไปที่ชื่อไฟล์ต้นทาง

ดีซี ดัมพ์แต่ละฟังก์ชันหลังจากกำจัดโค้ดที่ไม่ทำงาน ชื่อไฟล์สร้างโดย
ท้าย .dce ไปที่ชื่อไฟล์ต้นทาง

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

นาย / นางสาว ดัมพ์แต่ละฟังก์ชันหลังจากทำการแทนที่มวลรวมด้วยสเกลาร์ ไฟล์
ชื่อทำโดยการต่อท้าย .สรา ไปที่ชื่อไฟล์ต้นทาง

จม
ดัมพ์แต่ละฟังก์ชันหลังจากดำเนินการโค้ดที่จม ชื่อไฟล์สร้างโดย
ท้าย .จม ไปที่ชื่อไฟล์ต้นทาง

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

DSE ดัมพ์แต่ละฟังก์ชันหลังจากใช้การกำจัด dead store ชื่อไฟล์ถูกสร้างขึ้น
โดยต่อท้าย .dse ไปที่ชื่อไฟล์ต้นทาง

ฟิออปต์
ดัมพ์แต่ละฟังก์ชันหลังจากเพิ่มประสิทธิภาพโหนด PHI เป็นโค้ดเส้นตรง ไฟล์
ชื่อทำโดยการต่อท้าย .phiopt ไปที่ชื่อไฟล์ต้นทาง

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

สำเนาชื่อ
ดัมพ์แต่ละฟังก์ชันหลังจากใช้การคัดลอกการเพิ่มประสิทธิภาพการเปลี่ยนชื่อ ชื่อไฟล์คือ
ทำโดยการต่อท้าย .copyrename ไปที่ชื่อไฟล์ต้นทาง

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

เวกเตอร์
ดัมพ์แต่ละฟังก์ชันหลังจากใช้ vectorization ของการวนซ้ำ ชื่อไฟล์ถูกสร้างขึ้น
โดยต่อท้าย .เวกเตอร์ ไปที่ชื่อไฟล์ต้นทาง

ลื่น ดัมพ์แต่ละฟังก์ชันหลังจากใช้ vectorization ของบล็อกพื้นฐาน ชื่อไฟล์คือ
ทำโดยการต่อท้าย .slp ไปที่ชื่อไฟล์ต้นทาง

vp ดัมพ์แต่ละฟังก์ชันหลังจาก Value Range Propagation (VRP) ชื่อไฟล์สร้างโดย
ท้าย .วีอาร์พี ไปที่ชื่อไฟล์ต้นทาง

ทั้งหมด เปิดใช้งานทรีดัมพ์ที่มีอยู่ทั้งหมดด้วยแฟล็กที่ให้มาในตัวเลือกนี้

-ftree-vectorizer-verbose=n
ตัวเลือกนี้ควบคุมจำนวนเอาต์พุตการดีบักที่ vectorizer พิมพ์ออกมา นี้
ข้อมูลถูกเขียนด้วยข้อผิดพลาดมาตรฐาน เว้นแต่ -fdump ต้นไม้ทั้งหมด or -fdump ต้นไม้เวกเตอร์
ถูกระบุซึ่งในกรณีนี้จะถูกส่งออกไปยังไฟล์รายการดัมพ์ปกติ .เวกเตอร์. สำหรับ
n=0 ไม่มีรายงานข้อมูลการวินิจฉัย ถ้า n=1 vectorizer รายงานแต่ละลูป
ที่ถูกทำให้เป็นเวกเตอร์ และจำนวนลูปทั้งหมดที่ถูกทำให้เป็นเวกเตอร์ ถ้า n=2
vectorizer ยังรายงานการวนซ้ำแบบ non-vectorized ที่ผ่านขั้นตอนการวิเคราะห์แรกด้วย
(vect_analyze_loop_form) - เช่นนับได้, ในสุด, เดียว-bb, เข้า/ออกครั้งเดียว
ลูป นี่คือระดับความฟุ่มเฟือยเดียวกันกับที่ -fdump-tree-vect-stats ใช้ สูงกว่า
ระดับการใช้คำฟุ่มเฟือยหมายถึงมีการทิ้งข้อมูลเพิ่มเติมสำหรับแต่ละลูปที่รายงานหรือที่เหมือนกัน
จำนวนข้อมูลที่รายงานสำหรับลูปเพิ่มเติม: if n=3, โมเดลต้นทุน vectorizer
มีการรายงานข้อมูล ถ้า n=4 ข้อมูลที่เกี่ยวข้องกับการจัดตำแหน่งจะถูกเพิ่มลงใน
รายงาน ถ้า n=5 ข้อมูลที่เกี่ยวข้องกับการอ้างอิงข้อมูล (เช่น การพึ่งพาหน่วยความจำ หน่วยความจำ
รูปแบบการเข้าถึง) ถูกเพิ่มลงในรายงาน ถ้า n=6, vectorizer รายงานไม่ใช่-
vectorized วงในสุดที่ไม่ผ่านระยะการวิเคราะห์แรก (กล่าวคือ ไม่
สามารถนับได้หรืออาจมีการควบคุมการไหลที่ซับซ้อน) ถ้า n=7, vectorizer รายงาน
ลูปที่ซ้อนกันแบบ non-vectorized ถ้า n=8 ข้อมูลที่เกี่ยวข้องกับ SLP ถูกเพิ่มไปยัง
รายงาน สำหรับ n=9 ข้อมูลทั้งหมดที่ vectorizer สร้างระหว่างการวิเคราะห์
และมีการรายงานการเปลี่ยนแปลง นี่คือระดับความฟุ่มเฟือยแบบเดียวกับที่
-fdump-tree-vect-รายละเอียด การใช้งาน

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

พื้นที่ เชือก ควรแตกต่างกันสำหรับทุกไฟล์ที่คุณคอมไพล์

-fsched-รายละเอียด=n
สำหรับเป้าหมายที่ใช้การจัดตารางเวลาคำสั่ง ตัวเลือกนี้จะควบคุมจำนวน
การดีบักเอาต์พุตตัวกำหนดตารางเวลาจะพิมพ์ ข้อมูลนี้เขียนด้วยข้อผิดพลาดมาตรฐาน
เว้นแต่ -fdump-rtl-sched1 or -fdump-rtl-sched2 ถูกระบุ ซึ่งในกรณีนี้คือ output
ไปยังไฟล์รายการดัมพ์ปกติ .sched1 or .sched2 ตามลำดับ อย่างไรก็ตามสำหรับ n
มากกว่าเก้า ผลลัพธ์จะถูกพิมพ์ไปยังข้อผิดพลาดมาตรฐานเสมอ

สำหรับ n มากกว่าศูนย์, -fsched-รายละเอียด ส่งออกข้อมูลเช่นเดียวกับ
-fdump-rtl-sched1 และ -fdump-rtl-sched2. สำหรับ n มากกว่าหนึ่งก็ยังส่งออกพื้นฐาน
บล็อกความน่าจะเป็น ข้อมูลรายการพร้อมโดยละเอียด และข้อมูลหน่วย/ข้อมูล สำหรับ n
มากกว่าสอง จะรวม RTL ที่จุดยกเลิก ข้อมูลโฟลว์การควบคุม และภูมิภาค และ
for n มากกว่าสี่, -fsched-รายละเอียด รวมถึงข้อมูลการพึ่งพา

-save-อุณหภูมิ
-บันทึกอุณหภูมิ=cwd
เก็บไฟล์กลาง "ชั่วคราว" ตามปกติอย่างถาวร วางไว้ในปัจจุบัน
ไดเร็กทอรีและตั้งชื่อตามไฟล์ต้นฉบับ ดังนั้นการรวบรวม ฟู.ซี กับ -c
-save-อุณหภูมิ จะสร้างไฟล์ ฟู.ไอ และ ฟู.เอสเช่นเดียวกับ ฟูโอ. สิ่งนี้จะสร้างไฟล์
ประมวลผลล่วงหน้า ฟู.ไอ ไฟล์เอาต์พุตแม้ว่าปกติแล้วคอมไพเลอร์จะใช้ an
ตัวประมวลผลล่วงหน้าแบบบูรณาการ

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

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

gcc -save-temps -o outdir1/foo.o indir1/foo.c&
gcc -save-temps -o outdir2/foo.o indir2/foo.c&

อาจส่งผลให้ ฟู.ไอ และ ฟูโอ ถูกเขียนพร้อมกันโดยคอมไพเลอร์ทั้งสอง

-บันทึกอุณหภูมิ=obj
จัดเก็บไฟล์ระดับกลาง "ชั่วคราว" ตามปกติอย่างถาวร ถ้า -o ใช้ตัวเลือก,
ไฟล์ชั่วคราวจะขึ้นอยู่กับไฟล์อ็อบเจ็กต์ ถ้า -o ไม่ได้ใช้ตัวเลือก the
-บันทึกอุณหภูมิ=obj สวิตช์มีลักษณะเหมือน -save-อุณหภูมิ.

ตัวอย่างเช่น:

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

จะสร้าง ฟู.ไอ, ฟู.เอส, dir/xbar.i, dir/xbar.s, dir2/yfoobar.i, dir2/yfoobar.sและ
dir2/yfoobar.o.

-เวลา[=ไฟล์]
รายงานเวลา CPU ที่ใช้โดยแต่ละกระบวนการย่อยในลำดับการคอมไพล์ สำหรับ C
ไฟล์ต้นฉบับ นี่คือคอมไพเลอร์ที่เหมาะสมและแอสเซมเบลอร์ (รวมถึงตัวเชื่อมโยงหากการลิงก์คือ
เสร็จแล้ว).

หากไม่มีข้อกำหนดของไฟล์เอาต์พุต เอาต์พุตจะมีลักษณะดังนี้:

#ซีซี1 0.12 0.01
# เป็น 0.00 0.01

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

ด้วยข้อกำหนดของไฟล์เอาท์พุต เอาต์พุตจะถูกผนวกเข้ากับไฟล์ที่มีชื่อ
และดูเหมือนว่านี้:

0.12 0.01 ซีซี1
0.00 0.01 เป็น

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

-fvar-ติดตาม
เรียกใช้การติดตามตัวแปร มันคำนวณตำแหน่งที่เก็บตัวแปรในแต่ละตำแหน่ง
ในรหัส ข้อมูลการดีบักที่ดีขึ้นจะถูกสร้างขึ้น (หากข้อมูลการดีบัก
รูปแบบรองรับข้อมูลนี้)

มันถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อคอมไพล์ด้วยการเพิ่มประสิทธิภาพ (-คุณ, -O, -O2, ...)
ข้อมูลการดีบัก (-g) และรูปแบบข้อมูลการดีบักรองรับ

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

สามารถเปิดใช้งานได้แม้ว่าจะปิดใช้งาน var-tracking ซึ่งในกรณีนี้คำอธิบายประกอบจะเป็น
สร้างและบำรุงรักษา แต่ทิ้งไปในตอนท้าย

-fvar-การติดตามการมอบหมายสลับ
สลับ -fvar-การติดตามการมอบหมายในทำนองเดียวกัน -gtoggle สลับ -g.

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

-print-หลายไดเรกทอรี
พิมพ์ชื่อไดเร็กทอรีที่สอดคล้องกับ multilib ที่เลือกโดยสวิตช์อื่น ๆ
อยู่ในบรรทัดคำสั่ง ไดเรกทอรีนี้ควรจะมีอยู่ใน GCC_EXEC_PREFIX.

-print-multi-lib
พิมพ์การแมปจากชื่อไดเร็กทอรี multilib ไปยังสวิตช์คอมไพเลอร์ที่เปิดใช้งาน
ชื่อไดเร็กทอรีแยกจากสวิตช์โดย ;และสวิตช์แต่ละตัวเริ่มต้นด้วย an
@ แทนการ -โดยไม่มีช่องว่างระหว่างสวิตช์หลายตัว นี้ควรจะ
ง่ายต่อการประมวลผลเปลือก

-print-multi-os-ไดเรกทอรี
พิมพ์พาธไปยังไลบรารี OS สำหรับ multilib ที่เลือก โดยสัมพันธ์กับ some lib
ไดเรกทอรีย่อย หากมีไลบรารี OS อยู่ในไฟล์ lib ไดเรกทอรีย่อยและไม่มี multilibs
ถูกใช้ซึ่งมักจะเป็นเพียง ., หากมีไลบรารี OS อยู่ใน คำต่อท้าย lib พี่น้อง
ไดเร็กทอรีนี้พิมพ์เช่น ../lib64, ../ lib or ../lib32, หรือถ้าไลบรารี่ OS เป็น
นำเสนอใน lib/subdir ไดเรกทอรีย่อยที่พิมพ์เช่น amd64, สปาร์ควี9 or ev6.

-พิมพ์-multiarch
พิมพ์พาธไปยังไลบรารี OS สำหรับ multiarch ที่เลือก โดยสัมพันธ์กับ some lib
ไดเร็กทอรีย่อย

-print-prog-name =โครงการ
Like -พิมพ์ชื่อไฟล์แต่ค้นหาโปรแกรมเช่น ซีพี.

-print-libgcc-ชื่อไฟล์
เหมือนกับ -พิมพ์ชื่อไฟล์=libgcc.a.

สิ่งนี้มีประโยชน์เมื่อคุณใช้ -nostdlib or -nodedefaultlibs แต่คุณต้องการเชื่อมโยงกับ
libgcc.a. คุณทำได้

gcc -nostdlib ... `gcc -print-libgcc-file-name`

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

สิ่งนี้มีประโยชน์เมื่อ gcc พิมพ์ข้อความแสดงข้อผิดพลาด การติดตั้ง ปัญหา, ไม่ได้ exec
cpp0: ไม่ อย่างเช่น ไฟล์ or ไดเรกทอรี. ในการแก้ไขปัญหานี้คุณต้องใส่ ซีพีพี0 และ
ส่วนประกอบคอมไพเลอร์อื่น ๆ โดยที่ gcc คาดว่าจะพบพวกเขาหรือคุณสามารถตั้งค่า
ตัวแปรสภาพแวดล้อม GCC_EXEC_PREFIX ไปยังไดเร็กทอรีที่คุณติดตั้งไว้ อย่า
ลืมการต่อท้าย /.

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

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

-เครื่องทิ้งขยะ
พิมพ์เครื่องเป้าหมายของคอมไพเลอร์ (เช่น i686-pc-ลินุกซ์-gnu)---และอย่าทำ
สิ่งอื่นใด

- การถ่ายโอนข้อมูล
พิมพ์เวอร์ชันคอมไพเลอร์ (เช่น 3.0)---และอย่าทำอย่างอื่น

-dumpspec
พิมพ์ข้อมูลจำเพาะในตัวของคอมไพเลอร์---และไม่ต้องดำเนินการอื่นใด (ใช้เมื่อ
GCC เองกำลังถูกสร้างขึ้น)

-felimate-unused-debug-types
โดยปกติเมื่อสร้างเอาต์พุต DWARF2 GCC จะปล่อยข้อมูลการดีบักสำหรับทุกคน
ประเภทที่ประกาศในหน่วยการคอมไพล์ ไม่ว่าจะจริงหรือไม่ก็ตาม
ใช้ในหน่วยคอมไพล์นั้น บางครั้งสิ่งนี้ก็มีประโยชน์ เช่น ถ้าในตัวดีบั๊ก
คุณต้องการแปลงค่าเป็นประเภทที่ไม่ได้ใช้จริงในโปรแกรมของคุณ (แต่เป็น
ประกาศ) อย่างไรก็ตาม บ่อยครั้งส่งผลให้พื้นที่ว่างจำนวนมากสูญเปล่า
ด้วยตัวเลือกนี้ GCC จะหลีกเลี่ยงการสร้างเอาต์พุตสัญลักษณ์การดีบักสำหรับประเภทที่เป็น
ไม่มีที่ไหนเลยที่ใช้ในการรวบรวมไฟล์ต้นฉบับ

Options ที่ Control การเพิ่มประสิทธิภาพ
ตัวเลือกเหล่านี้ควบคุมการเพิ่มประสิทธิภาพประเภทต่างๆ

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

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

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

การเพิ่มประสิทธิภาพบางอย่างไม่ได้ถูกควบคุมโดยแฟล็กโดยตรง เฉพาะการเพิ่มประสิทธิภาพที่มี a
แฟล็กแสดงอยู่ในส่วนนี้

การเพิ่มประสิทธิภาพส่วนใหญ่จะเปิดใช้งานก็ต่อเมื่อ an -O ระดับถูกตั้งค่าบนบรรทัดคำสั่ง มิฉะนั้น
ถูกปิดใช้งาน แม้ว่าจะมีการระบุแฟล็กการปรับให้เหมาะสมแต่ละรายการ

ขึ้นอยู่กับเป้าหมายและวิธีการกำหนดค่า GCC ชุดของ .ที่แตกต่างกันเล็กน้อย
อาจเปิดใช้งานการปรับให้เหมาะสมในแต่ละ -O ระดับที่มากกว่าที่ระบุไว้ในที่นี้ คุณสามารถเรียกใช้ GCC
กับ -Q --help = เครื่องมือเพิ่มประสิทธิภาพ เพื่อค้นหาชุดการเพิ่มประสิทธิภาพที่แน่นอนที่เปิดใช้งานที่
แต่ละระดับ

-O
-O1 เพิ่มประสิทธิภาพ การเพิ่มประสิทธิภาพการคอมไพล์จะใช้เวลาค่อนข้างนาน และหน่วยความจำมากขึ้นสำหรับ
ฟังก์ชั่นขนาดใหญ่

กับ -Oคอมไพเลอร์พยายามลดขนาดโค้ดและเวลาดำเนินการโดยไม่ดำเนินการ
การเพิ่มประสิทธิภาพใดๆ ที่ต้องใช้เวลารวบรวมอย่างมาก

-O เปิดแฟล็กการปรับให้เหมาะสมต่อไปนี้:

-fauto-inc-ธ.ค -fcompare-เอลิม -fcprop-ลงทะเบียน -fdce -fdefer-ป๊อป -fdelayed-สาขา
-fdse -fguess-สาขา-ความน่าจะเป็น -fif-การแปลง2 -fif-แปลง -fipa-บริสุทธิ์-const
-fipa-โปรไฟล์ -fipa-อ้างอิง -fmerge-ค่าคงที่ -fsplit-กว้าง-ประเภท -ftree-บิต-ccp
-ftree-builtin-โทร-dce -ftree-ccp -ftree-ช -ftree-copyrename -ftree-dce
-ftree-dominator-opts -ftree-dse -ftree-forwprop -ฟรีฟรี -ftree-piprop -ftree-สระ
-ftree-พีทีเอ -ftree-ter -สนุกในแต่ละครั้ง

-O ยังเปิดอยู่ -fomit-frame-ตัวชี้ บนเครื่องที่ไม่รบกวน
ด้วยการดีบัก

-O2 เพิ่มประสิทธิภาพมากยิ่งขึ้น GCC ทำการเพิ่มประสิทธิภาพเกือบทั้งหมดที่รองรับซึ่งไม่รองรับ
เกี่ยวข้องกับการแลกเปลี่ยนความเร็วอวกาศ เมื่อเทียบกับ -O, ตัวเลือกนี้จะเพิ่มทั้ง
เวลาในการรวบรวมและประสิทธิภาพของรหัสที่สร้างขึ้น

-O2 เปิดแฟล็กการปรับให้เหมาะสมทั้งหมดที่ระบุโดย -O. นอกจากนี้ยังเปิดดังต่อไปนี้
แฟล็กการเพิ่มประสิทธิภาพ: -fthread-กระโดด -falign-ฟังก์ชั่น -falign-กระโดด -falign-ลูป
-falign-ฉลาก -fcaller-บันทึก -fcrossjumping -fcse-ติดตามกระโดด -fcse-ข้ามบล็อก
-fdelete-null-pointer-ตรวจสอบ -fdevirtualize -การเพิ่มประสิทธิภาพราคาแพง -fgcse
-fgcse-lm -finline-small-ฟังก์ชั่น -findirect-inlining -fipa-sra
-foptimize-พี่น้อง-โทร -fpartial-inlining -fช่องมอง2 - เฟรกมูฟ -freeorder-บล็อก
-freeorder-ฟังก์ชั่น -frerun-cse-หลังลูป -fsched-อินเตอร์บล็อก -fsched-ข้อมูลจำเพาะ
-fschedule-อินน์ -fschedule-insns2 -fstrict-นามแฝง -fstrict-ล้น
-ftree-สวิตช์แปลง -ftree-tail-ผสาน -ftree-ก่อน -ftree-vrp

โปรดทราบคำเตือนภายใต้ -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- vectorize, -ftree-บางส่วน-pre และ -fipa-cp-โคลน ตัวเลือก

-O0 ลดเวลาในการคอมไพล์และทำให้การดีบักสร้างผลลัพธ์ที่คาดหวัง นี้เป็น
ค่าเริ่มต้น.

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

-คุณ ปิดใช้งานแฟล็กการปรับให้เหมาะสมต่อไปนี้: -falign-ฟังก์ชั่น -falign-กระโดด
-falign-ลูป -falign-ฉลาก -freeorder-บล็อก -freeorder-blocks-and-partition
-fprefetch-ลูปอาร์เรย์ รุ่น -ftree-vect-loop-

-Ofast
ละเว้นการปฏิบัติตามมาตรฐานที่เข้มงวด -Ofast เปิดใช้งานทั้งหมด -O3 การเพิ่มประสิทธิภาพ นอกจากนี้ยัง
เปิดใช้งานการปรับให้เหมาะสมที่ไม่ถูกต้องสำหรับโปรแกรมที่เป็นไปตามมาตรฐานทั้งหมด มัน
เปิด -ffast-คณิตศาสตร์ และ Fortran เฉพาะ -fno-protect-ผู้ปกครอง และ -fstack-อาร์เรย์.

หากคุณใช้หลายตัว -O ตัวเลือก โดยมีหรือไม่มีหมายเลขระดับ ตัวเลือกสุดท้ายคือ
ที่มีประสิทธิภาพ

ตัวเลือกของแบบฟอร์ม -fธง ระบุแฟล็กที่ไม่ขึ้นกับเครื่อง ธงส่วนใหญ่มีทั้งสองอย่าง
รูปแบบบวกและลบ รูปแบบเชิงลบของ -foo อยากจะเป็น -fno-ฟู. ในตาราง
ด้านล่างนี้ มีเพียงแบบฟอร์มเดียวที่แสดงไว้ แบบฟอร์มที่คุณใช้โดยทั่วไป คิดได้
ออกรูปแบบอื่นโดยการลบ ที่ไม่มี หรือเพิ่ม

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

-fno-default-อินไลน์
อย่าทำให้สมาชิกทำงานแบบอินไลน์โดยปริยายเพียงเพราะว่าถูกกำหนดไว้ภายใน
ขอบเขตคลาส (C ++ เท่านั้น) มิฉะนั้น เมื่อคุณระบุ -O, ฟังก์ชั่นสมาชิกกำหนด
ภายในขอบเขตของคลาสถูกคอมไพล์แบบอินไลน์โดยค่าเริ่มต้น คือคุณไม่จำเป็นต้องเพิ่ม แบบอินไลน์
หน้าชื่อฟังก์ชันสมาชิก

-fno-defer-ป๊อป
เปิดอาร์กิวเมนต์ทุกครั้งที่เรียกใช้ฟังก์ชันทุกครั้งที่ฟังก์ชันส่งคืน สำหรับ
เครื่องที่ต้องเปิดอาร์กิวเมนต์หลังจากการเรียกใช้ฟังก์ชัน คอมไพเลอร์ปกติจะช่วยให้
อาร์กิวเมนต์สะสมบนสแต็กสำหรับการเรียกใช้ฟังก์ชันหลาย ๆ อันและปรากฏขึ้นทั้งหมดที่
ครั้งหนึ่ง

พิการในระดับ -O, -O2, -O3, -คุณ.

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

ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นที่ระดับการปรับให้เหมาะสม -O, -O2, -O3, -คุณ.

-ffp-สัญญา=สไตล์
-ffp-สัญญา = ปิด ปิดใช้งานการย่อนิพจน์ทศนิยม -ffp-สัญญา = รวดเร็ว
เปิดใช้งานการหดตัวของนิพจน์ทศนิยมเช่นการหลอมรวมคูณเพิ่ม
การดำเนินการหากเป้าหมายมีการสนับสนุนดั้งเดิมสำหรับพวกเขา -ffp-contract=เปิด ช่วยให้
การหดตัวของนิพจน์ทศนิยมหากอนุญาตโดยมาตรฐานภาษา นี่คือ
ปัจจุบันไม่ได้ดำเนินการและปฏิบัติเท่ากับ -ffp-สัญญา = ปิด.

ค่าเริ่มต้นคือ -ffp-สัญญา = รวดเร็ว.

-fomit-frame-ตัวชี้
อย่าเก็บตัวชี้เฟรมไว้ในรีจิสเตอร์สำหรับฟังก์ชันที่ไม่ต้องการ นี้
หลีกเลี่ยงคำแนะนำในการบันทึก ตั้งค่า และกู้คืนตัวชี้เฟรม มันยังทำให้
ทะเบียนพิเศษที่มีอยู่ในหลายฟังก์ชั่น It ด้วย ทำให้ การแก้จุดบกพร่อง เป็นไปไม่ได้ on
บาง เครื่อง

สำหรับเครื่องบางเครื่อง เช่น VAX แฟล็กนี้ไม่มีผลเพราะมาตรฐาน
ลำดับการโทรจะจัดการตัวชี้เฟรมโดยอัตโนมัติและไม่มีอะไรถูกบันทึกโดย
แสร้งทำเป็นว่ามันไม่มีอยู่จริง มาโครคำอธิบายเครื่อง "FRAME_POINTER_REQUIRED"
ควบคุมว่าเครื่องเป้าหมายรองรับแฟล็กนี้หรือไม่

เริ่มต้นด้วย GCC เวอร์ชัน 4.6 การตั้งค่าเริ่มต้น (เมื่อไม่ได้ปรับให้เหมาะสมสำหรับขนาด) สำหรับ
เป้าหมาย Linux x32 แบบ 86 บิตและดาร์วิน x32 แบบ 86 บิตถูกเปลี่ยนเป็น
-fomit-frame-ตัวชี้. ค่าเริ่มต้นสามารถเปลี่ยนกลับเป็น -fno-ละเว้นเฟรมตัวชี้ by
กำหนดค่า GCC ด้วย --enable-frame-ตัวชี้ กำหนดค่าตัวเลือก

เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.

-foptimize-พี่น้อง-โทร
ปรับการเรียกซ้ำพี่น้องและส่วนท้ายให้เหมาะสม

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fno-อินไลน์
อย่าขยายฟังก์ชันใด ๆ ในบรรทัดนอกเหนือจากที่มีเครื่องหมาย "always_inline"
คุณลักษณะ. นี่เป็นค่าเริ่มต้นเมื่อไม่ได้เพิ่มประสิทธิภาพ

ฟังก์ชันเดี่ยวสามารถยกเว้นจากการอินไลน์ได้โดยทำเครื่องหมายด้วย "noinline"
คุณลักษณะ

-finline-small-ฟังก์ชั่น
รวมฟังก์ชั่นเข้ากับผู้โทรเมื่อร่างกายมีขนาดเล็กกว่าที่คาดไว้
รหัสเรียกฟังก์ชัน (ขนาดโดยรวมของโปรแกรมจะเล็กลง) คอมไพเลอร์
heuristically ตัดสินใจว่าฟังก์ชันใดง่ายพอที่จะรวมเข้าไว้ด้วยกัน
ทางนี้. อินไลน์นี้ใช้กับฟังก์ชันทั้งหมด แม้กระทั่งฟังก์ชันที่ไม่ได้ประกาศแบบอินไลน์

เปิดใช้งานที่ระดับ -O2.

-findirect-inlining
การเรียกแบบอินไลน์และการโทรทางอ้อมที่ค้นพบในเวลาคอมไพล์ด้วย
อินไลน์ก่อนหน้า ตัวเลือกนี้จะมีผลเมื่อเปิดอินไลน์ตัวเองเท่านั้น
โดย -finline-ฟังก์ชั่น or -finline-small-ฟังก์ชั่น ตัวเลือก

เปิดใช้งานที่ระดับ -O2.

-finline-ฟังก์ชั่น
พิจารณาฟังก์ชันทั้งหมดสำหรับการแทรก แม้ว่าจะไม่ได้ประกาศแบบอินไลน์ก็ตาม NS
คอมไพเลอร์ heuristically ตัดสินใจว่าฟังก์ชันใดที่ควรค่าแก่การผสานรวมในลักษณะนี้

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

เปิดใช้งานที่ระดับ -O3.

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

เปิดใช้งานในระดับ -O1, -O2, -O3 และ -คุณ.

-เกรงใจ-inlining
ฟังก์ชันอินไลน์ที่มีเครื่องหมาย "always_inline" และฟังก์ชันที่ร่างกายดูเล็กกว่า
ฟังก์ชั่นเรียกใช้ค่าใช้จ่ายก่อนทำ -fprofile-สร้าง เครื่องมือวัดและ
ผ่าน inlining จริง การทำเช่นนี้ทำให้การทำโปรไฟล์มีราคาถูกลงอย่างมากและโดยปกติ
inlining เร็วขึ้นในโปรแกรมที่มีฟังก์ชั่น wrapper ที่ซ้อนกันจำนวนมาก

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

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

เปิดใช้งานในระดับ -O2, -O3 และ -คุณ.

-finline-จำกัด=n
โดยค่าเริ่มต้น GCC จะจำกัดขนาดของฟังก์ชันที่สามารถแทรกลงในบรรทัดได้ ธงนี้ช่วยให้
การควบคุมอย่างหยาบของขีด จำกัด นี้ n คือขนาดของฟังก์ชันที่สามารถอินไลน์ได้
จำนวนคำสั่งหลอก

Inlining ถูกควบคุมโดยพารามิเตอร์จำนวนหนึ่งซึ่งอาจระบุได้
เป็นรายบุคคลโดยใช้ --พารามิเตอร์ ชื่อ=ความคุ้มค่า. -finline-จำกัด=n ตัวเลือกชุดของ
พารามิเตอร์เหล่านี้ดังต่อไปนี้:

max-inline-insns-single
ถูกตั้งค่าเป็น n/ 2

max-inline-insns-อัตโนมัติ
ถูกตั้งค่าเป็น n/ 2

ดูเอกสารประกอบของพารามิเตอร์แต่ละตัวที่ควบคุมอินไลน์และ . ด้านล่าง
สำหรับค่าเริ่มต้นของพารามิเตอร์เหล่านี้

หมายเหตุ อาจไม่มีค่า -finline-จำกัด ที่ส่งผลให้เกิดพฤติกรรมเริ่มต้น

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

-fno-keep-inline-dllexport
นี่เป็นเวอร์ชั่นที่ละเอียดกว่าของ -fkeep-อินไลน์-ฟังก์ชั่นซึ่งใช้เฉพาะกับ
ฟังก์ชันที่ประกาศโดยใช้แอตทริบิวต์ "dllexport" หรือ declspec

-fkeep-อินไลน์-ฟังก์ชั่น
ใน C ให้ปล่อยฟังก์ชัน "คงที่" ที่ประกาศว่า "อินไลน์" ลงในไฟล์อ็อบเจ็กต์ แม้ว่า
ฟังก์ชันนี้ได้รับการฝังไว้ในผู้โทรทั้งหมดแล้ว สวิตช์นี้ไม่มีผล
ทำงานโดยใช้ส่วนขยาย "extern inline" ใน GNU C90 ใน C ++ ให้ปล่อยใด ๆ และทั้งหมด
ฟังก์ชันแบบอินไลน์ในไฟล์อ็อบเจ็กต์

-fkeep-คงที่-consts
ปล่อยตัวแปรที่ประกาศ "คงที่" เมื่อไม่ได้เปิดใช้งานการปรับให้เหมาะสม แม้ว่า
ตัวแปรไม่ได้ถูกอ้างอิง

GCC เปิดใช้งานตัวเลือกนี้เป็นค่าเริ่มต้น หากคุณต้องการบังคับให้คอมไพเลอร์ตรวจสอบว่า
มีการอ้างอิงตัวแปรไม่ว่าจะเปิดใช้การปรับให้เหมาะสมหรือไม่ก็ตาม use
-fno-keep-static-consts ตัวเลือก

-fmerge-ค่าคงที่
พยายามรวมค่าคงที่ที่เหมือนกัน (ค่าคงที่สตริงและค่าคงที่ทศนิยม)
ข้ามหน่วยการรวบรวม

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

เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.

-fmerge-all-ค่าคงที่
พยายามรวมค่าคงที่และตัวแปรที่เหมือนกันเข้าด้วยกัน

ตัวเลือกนี้หมายถึง -fmerge-ค่าคงที่. นอกจาก -fmerge-ค่าคงที่ นี้
พิจารณาเช่นอาร์เรย์เริ่มต้นคงที่หรือตัวแปรคงที่เริ่มต้นด้วย
ประเภทอินทิกรัลหรือทศนิยม ภาษาเช่น C หรือ C ++ ต้องการตัวแปรแต่ละตัว
รวมถึงหลายอินสแตนซ์ของตัวแปรเดียวกันในการเรียกซ้ำเพื่อให้มีความชัดเจน
สถานที่ ดังนั้นการใช้ตัวเลือกนี้จะส่งผลให้มีพฤติกรรมที่ไม่เป็นไปตามข้อกำหนด

-fmodulo-กำหนดการ
ดำเนินการจัดตารางโมดูโลวงสวิงทันทีก่อนกำหนดการแรกจะผ่าน นี้
pass ดูที่วงในสุดและจัดลำดับคำสั่งใหม่โดยทับค่า different
การทำซ้ำ

-fmodulo-sched-allow-regmoves
ดำเนินการกำหนดเวลาโมดูโลตาม SMS ที่ก้าวร้าวมากขึ้นโดยอนุญาตให้ย้ายการลงทะเบียน โดย
การตั้งค่าสถานะนี้ขอบต่อต้านการพึ่งพาบางอย่างจะถูกลบออกซึ่งจะทริกเกอร์
การสร้าง reg-moves ตามการวิเคราะห์ช่วงชีวิต ตัวเลือกนี้คือ
มีผลเฉพาะกับ -fmodulo-กำหนดการ เปิดการใช้งาน

-fno-สาขานับ-reg
อย่าใช้คำสั่ง "decrement and branch" ในเครื่องนับจำนวน แต่แทน
สร้างลำดับของคำสั่งที่ลดการลงทะเบียนเปรียบเทียบกับ
ศูนย์แล้วแยกสาขาตามผลลัพธ์ ตัวเลือกนี้มีความหมายเฉพาะกับ
สถาปัตยกรรมที่รองรับคำสั่งดังกล่าว ซึ่งรวมถึง x86, PowerPC, IA-64 และ
เอส/390.

ค่าเริ่มต้นคือ -fbranch-นับ-reg.

-fno-ฟังก์ชัน-cse
อย่าใส่ฟังก์ชันแอดเดรสในรีจิสเตอร์ ทำแต่ละคำสั่งที่เรียก
ฟังก์ชันคงมีที่อยู่ของฟังก์ชันอย่างชัดเจน

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

ค่าเริ่มต้นคือ -ffunction-cse

-fno-ศูนย์-เริ่มต้น-in-bss
หากเป้าหมายรองรับส่วน BSS โดยค่าเริ่มต้น GCC จะวางตัวแปรที่เป็น
เริ่มต้นเป็นศูนย์ใน BSS นี้สามารถประหยัดพื้นที่ในโค้ดผลลัพธ์

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

ค่าเริ่มต้นคือ -fzero-เริ่มต้นใน bss.

-fmudflap -fmudflapth -fmudflapir
สำหรับฟรอนต์เอนด์ที่รองรับ (C และ C++) เครื่องมือชี้/อาร์เรย์ที่มีความเสี่ยงทั้งหมด
การดำเนินการ dereference, สตริงไลบรารีมาตรฐาน / ฟังก์ชันฮีปบางรายการและอื่น ๆ
โครงสร้างที่เกี่ยวข้องกับการทดสอบช่วง/ความถูกต้อง โมดูลที่ควรจะเป็น
ป้องกันบัฟเฟอร์โอเวอร์โฟลว์ การใช้ฮีปที่ไม่ถูกต้อง และคลาสอื่น ๆ ของ C/C++
ข้อผิดพลาดในการเขียนโปรแกรม เครื่องมือวัดอาศัยไลบรารีรันไทม์แยกต่างหาก
(libmudflap) ซึ่งจะเชื่อมกับโปรแกรม if -fmudflap จะได้รับในเวลาลิงค์
พฤติกรรมรันไทม์ของโปรแกรมเครื่องมือถูกควบคุมโดย MUDFLAP_OPTIONS
ตัวแปรสภาพแวดล้อม ดูตัวเลือก "env MUDFLAP_OPTIONS=-help a.out"

ใช้ -fmudflapth แทน -fmudflap เพื่อรวบรวมและเชื่อมโยงหากโปรแกรมของคุณเป็นแบบหลาย
เกลียว ใช้ -fmudflapirนอกเหนือไปจาก -fmudflap or -fmudflapthถ้า
เครื่องมือวัดควรละเว้นการอ่านตัวชี้ สิ่งนี้ทำให้เครื่องมือวัดน้อยลง (และ
ดังนั้นการดำเนินการที่เร็วขึ้น) และยังคงให้การป้องกันหน่วยความจำทั้งหมด
ทำให้การเขียนเสียหาย แต่อนุญาตให้อ่านข้อมูลผิดพลาดเพื่อเผยแพร่ภายในโปรแกรม

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

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

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

เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.

-fcse-ติดตามกระโดด
ในการกำจัดนิพจน์ย่อยทั่วไป (CSE) ให้สแกนผ่านคำแนะนำการข้ามเมื่อ
เป้าหมายของการกระโดดไม่สามารถเข้าถึงได้โดยเส้นทางอื่น ตัวอย่างเช่น เมื่อ CSE เผชิญกับ
คำสั่ง "if" ที่มีประโยค "else" CSE จะติดตามการกระโดดเมื่อเงื่อนไข
ทดสอบแล้วเป็นเท็จ

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fcse-ข้ามบล็อก
มันคล้ายกับ -fcse-ติดตามกระโดดแต่ทำให้ CSE ก้าวกระโดดตามนั้น
ข้ามบล็อกตามเงื่อนไข เมื่อ CSE พบคำสั่ง "if" ง่ายๆ โดยไม่มี
ข้ออื่น -fcse-ข้ามบล็อก ทำให้ CSE ติดตามกระโดดไปรอบ ๆ ร่างกายของ
"ถ้า".

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-frerun-cse-หลังลูป
เรียกใช้การกำจัดนิพจน์ย่อยทั่วไปอีกครั้งหลังจากดำเนินการปรับลูปให้เหมาะสมที่สุดแล้ว

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fgcse
ดำเนินการผ่านการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก บัตรผ่านนี้ยังดำเนินการ
ค่าคงที่ทั่วโลกและการขยายพันธุ์สำเนา

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

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fgcse-lm
เมื่อ -fgcse-lm ถูกเปิดใช้งาน การกำจัดนิพจน์ย่อยทั่วไปทั่วโลกจะพยายาม
ย้ายสินค้าที่ร้านค้าฆ่าเท่านั้น นี้จะช่วยให้การวนซ้ำ
มีลำดับการโหลด/จัดเก็บที่จะเปลี่ยนเป็นโหลดนอกลูปและ a
คัดลอก/จัดเก็บภายในลูป

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

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

ไม่ได้เปิดใช้งานในระดับการเพิ่มประสิทธิภาพใดๆ

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

ไม่ได้เปิดใช้งานในระดับการเพิ่มประสิทธิภาพใดๆ

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

-funsafe-loop-การเพิ่มประสิทธิภาพ
หากกำหนดไว้ เครื่องมือเพิ่มประสิทธิภาพลูปจะถือว่าดัชนีลูปไม่ล้น และนั่น
ลูปที่มีเงื่อนไขการออกที่ไม่สำคัญนั้นไม่มีที่สิ้นสุด ซึ่งช่วยให้ช่วงกว้างขึ้น
ของการเพิ่มประสิทธิภาพลูปแม้ว่าตัวเพิ่มประสิทธิภาพลูปเองไม่สามารถพิสูจน์ได้ว่าสิ่งเหล่านี้
สมมติฐานถูกต้อง โดยใช้ -Wunsafe-loop-การเพิ่มประสิทธิภาพ, คอมไพเลอร์จะเตือนคุณ
ถ้ามันเจอลูปแบบนี้

-fcrossjumping
ดำเนินการแปลงข้ามกระโดด การแปลงนี้รวมรหัสที่เทียบเท่าและ
บันทึกขนาดรหัส โค้ดผลลัพธ์อาจจะหรืออาจไม่ทำงานได้ดีกว่าไม่มี cross-
กระโดด

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fauto-inc-ธ.ค
รวมการเพิ่มหรือลดที่อยู่ด้วยการเข้าถึงหน่วยความจำ บัตรผ่านนี้คือ
ข้ามสถาปัตยกรรมที่ไม่มีคำแนะนำเพื่อรองรับสิ่งนี้เสมอ
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่าในสถาปัตยกรรมที่รองรับสิ่งนี้

-fdce
ดำเนินการกำจัดโค้ดที่ไม่ทำงาน (DCE) บน RTL เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-fdse
ดำเนินการ dead store elimination (DSE) บน RTL เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-fif-แปลง
พยายามแปลงการข้ามแบบมีเงื่อนไขให้เทียบเท่าแบบไม่มีสาขา รวมถึงการใช้งาน
ของการเคลื่อนไหวตามเงื่อนไข ขั้นต่ำ สูงสุด ตั้งค่าสถานะและคำแนะนำ abs และลูกเล่นบางอย่างที่ทำได้
โดยเลขคณิตมาตรฐาน การใช้การประมวลผลแบบมีเงื่อนไขกับชิปที่เป็นอยู่
พร้อมใช้งานถูกควบคุมโดย "if-conversion2"

เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.

-fif-การแปลง2
ใช้การดำเนินการตามเงื่อนไข (ถ้ามี) เพื่อแปลงการข้ามตามเงื่อนไขเป็น
เทียบเท่าน้อยกว่าสาขา

เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.

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

อย่างไรก็ตาม โปรดทราบว่าในบางสภาพแวดล้อม ข้อสันนิษฐานนี้ไม่เป็นความจริง ใช้
-fno-delete-null-pointer-checks เพื่อปิดใช้งานการเพิ่มประสิทธิภาพนี้สำหรับโปรแกรมที่ขึ้นอยู่กับ
เกี่ยวกับพฤติกรรมนั้น

เป้าหมายบางรายการ โดยเฉพาะเป้าหมายที่ฝังไว้ ปิดใช้งานตัวเลือกนี้ในทุกระดับ มิฉะนั้น
เปิดใช้งานในทุกระดับ: -O0, -O1, -O2, -O3, -คุณ. บัตรผ่านที่ใช้ข้อมูล
เปิดใช้งานอย่างอิสระในระดับการเพิ่มประสิทธิภาพที่แตกต่างกัน

-fdevirtualize
พยายามแปลงการโทรเป็นฟังก์ชันเสมือนเป็นการโทรโดยตรง ทำได้ทั้งสองอย่าง
ภายในขั้นตอนและระหว่างขั้นตอนโดยเป็นส่วนหนึ่งของ inlining ทางอ้อม
("-findirect-inlining") และการแพร่กระจายคงที่ระหว่างขั้นตอน (-FIPA-CP). เปิดใช้งาน
ในระดับ -O2, -O3, -คุณ.

-การเพิ่มประสิทธิภาพราคาแพง
ดำเนินการปรับให้เหมาะสมเล็กน้อยจำนวนหนึ่งซึ่งค่อนข้างแพง

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-ฟรี
พยายามลบคำแนะนำส่วนขยายที่ซ้ำซ้อน สิ่งนี้มีประโยชน์อย่างยิ่งสำหรับ
สถาปัตยกรรม x86-64 ซึ่งขยายเป็นศูนย์โดยปริยายในการลงทะเบียน 64 บิตหลังจาก
เขียนลงครึ่งล่าง 32 บิต

เปิดใช้งานสำหรับ x86 ที่ระดับ -O2, -O3.

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

หมายเหตุ - เฟรกมูฟ และ -foptimize-ลงทะเบียนย้าย เป็นการเพิ่มประสิทธิภาพเดียวกัน

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fira-อัลกอริทึม=ขั้นตอนวิธี
ใช้อัลกอริธึมการระบายสีที่ระบุสำหรับตัวจัดสรรรีจิสเตอร์แบบรวม NS
ขั้นตอนวิธี อาร์กิวเมนต์สามารถ ลำดับความสำคัญซึ่งระบุสีลำดับความสำคัญของ Chow หรือ CB,
ซึ่งระบุสี Chaitin-Briggs ไม่มีการระบายสี Chaitin-Briggs
สำหรับสถาปัตยกรรมทั้งหมด แต่สำหรับเป้าหมายเหล่านั้นที่สนับสนุน มันคือค่าเริ่มต้น
เพราะมันสร้างรหัสที่ดีกว่า

-fira-ภาค=ภูมิภาค
ใช้ภูมิภาคที่ระบุสำหรับตัวจัดสรรการลงทะเบียนแบบรวม NS ภูมิภาค อาร์กิวเมนต์
ควรเป็นอย่างใดอย่างหนึ่งต่อไปนี้:

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

ผสม
ใช้ลูปทั้งหมดยกเว้นลูปที่มีแรงกดเล็ก ๆ เป็นภูมิภาค นี้
ค่ามักจะให้ผลลัพธ์ที่ดีที่สุดในกรณีส่วนใหญ่และสำหรับสถาปัตยกรรมส่วนใหญ่และ
ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อคอมไพล์ด้วยการปรับความเร็วให้เหมาะสม (-O, -O2, ...)

หนึ่ง ใช้ฟังก์ชันทั้งหมดเป็นภูมิภาคเดียว ซึ่งมักจะส่งผลให้โค้ดที่เล็กที่สุด
ขนาดและเปิดใช้งานโดยค่าเริ่มต้นสำหรับ -คุณ or -O0.

-fira-loop-ความดัน
ใช้ IRA เพื่อประเมินแรงกดดันของรีจิสเตอร์ในลูปสำหรับการตัดสินใจย้ายค่าคงที่ของลูป
ตัวเลือกนี้มักจะส่งผลให้มีการสร้างโค้ดที่เร็วขึ้นและเล็กลงบนเครื่องด้วย
ไฟล์รีจิสเตอร์ขนาดใหญ่ (>= 32 รีจิสเตอร์) แต่อาจทำให้คอมไพเลอร์ทำงานช้าลง

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

-fno-ira-share-save-สล็อต
ปิดใช้งานการแชร์สแตกสล็อตที่ใช้สำหรับบันทึกการเรียกใช้ฮาร์ดรีจิสเตอร์ผ่าน
โทร. ฮาร์ดรีจิสเตอร์แต่ละตัวจะได้รับสแต็กสล็อตแยกกัน และด้วยเหตุนี้ ฟังก์ชันสแต็ก
เฟรมมีขนาดใหญ่ขึ้น

-fno-ira-share-รั่วไหล-สล็อต
ปิดใช้งานการแชร์สล็อตสแต็คที่จัดสรรสำหรับการลงทะเบียนหลอก แต่ละหลอกลงทะเบียน
ที่ไม่ได้รับฮาร์ดรีจิสเตอร์จะได้รับสแต็กสล็อตแยกต่างหากและด้วยเหตุนี้ฟังก์ชันผลลัพธ์
เฟรมสแต็กมีขนาดใหญ่กว่า

-fira-verbose=n
ควบคุมการใช้คำฟุ่มเฟือยของไฟล์ดัมพ์สำหรับตัวจัดสรรการลงทะเบียนแบบรวม NS
ค่าเริ่มต้นคือ 5. ถ้าค่า n มากกว่าหรือเท่ากับ 10 เอาต์พุตการถ่ายโอนข้อมูลจะถูกส่ง
เพื่อ stderr โดยใช้รูปแบบเดียวกับ n ลบ 10

-fdelayed-สาขา
หากเครื่องเป้าหมายรองรับ ให้ลองจัดลำดับคำสั่งใหม่เพื่อโจมตี
ช่องคำสั่งใช้ได้หลังจากคำสั่งสาขาล่าช้า

เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.

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

เปิดใช้งานในระดับ -O2, -O3.

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

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fno-กำหนด-interblock
อย่ากำหนดเวลาคำแนะนำข้ามกลุ่มพื้นฐาน โดยปกติจะเปิดใช้งานโดยค่าเริ่มต้น
เมื่อกำหนดเวลาก่อนจัดสรรจัดสรร เช่น กับ -fschedule-อินน์ หรือที่ -O2 or
สูงกว่า

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

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

-fsched-spec-โหลด
อนุญาตการเก็งกำไรของคำแนะนำการโหลดบางส่วน สิ่งนี้จะสมเหตุสมผลเมื่อ
การจัดกำหนดการก่อนการจัดสรรลงทะเบียน เช่น กับ -fschedule-อินน์ หรือที่ -O2 หรือสูงกว่า

-fsched-spec-load-อันตราย
อนุญาตให้มีการเก็งกำไรคำแนะนำการโหลดเพิ่มเติม สิ่งนี้จะสมเหตุสมผลเมื่อ
การจัดกำหนดการก่อนการจัดสรรลงทะเบียน เช่น กับ -fschedule-อินน์ หรือที่ -O2 หรือสูงกว่า

-fsched-stall-inns
-fsched-จนตรอก-insns=n
กำหนดจำนวน insns (ถ้ามี) สามารถย้ายก่อนเวลาอันควรจากคิวของจนตรอก
insns ลงในรายการพร้อม ในระหว่างการกำหนดเวลาที่สอง
-fno-sched-จนตรอก-insns หมายความว่าจะไม่มีการย้าย insns ก่อนเวลาอันควร
-fsched-stalled-insns=0 หมายความว่าสามารถย้าย insns ที่เข้าคิวได้ไม่จำกัดจำนวนครั้ง
ก่อนกำหนด -fsched-stall-inns ไม่มีค่าเท่ากับ
-fsched-stalled-insns=1.

-fsched-stall-insns-dep
-fsched-จนตรอก-insns-dep=n
กำหนดจำนวน insn กลุ่ม (รอบ) จะถูกตรวจสอบสำหรับการพึ่งพาที่จนตรอก
insn ที่เป็นตัวเลือกสำหรับการลบก่อนวัยอันควรจากคิวของ insn ที่ค้างอยู่ นี้
มีผลเฉพาะในช่วงการผ่านกำหนดการที่สองเท่านั้นและก็ต่อเมื่อ
-fsched-stall-inns ถูกนำมาใช้. -fno-sched-จนตรอก-insns-dep เทียบเท่ากับ
-fsched-stalled-insns-dep=0. -fsched-stall-insns-dep ไม่มีค่าเท่ากับ
ไปยัง -fsched-stalled-insns-dep=1.

-fsched2-ใช้-ซุปเปอร์บล็อก
เมื่อจัดกำหนดการหลังจากการจัดสรรการลงทะเบียน ให้ใช้อัลกอริธึมการจัดตารางเวลา superblock
การตั้งเวลา Superblock ช่วยให้สามารถเคลื่อนที่ข้ามขอบเขตของบล็อกพื้นฐานได้ ส่งผลให้เร็วขึ้น
กำหนดการ ตัวเลือกนี้เป็นรุ่นทดลอง เนื่องจาก GCC . ไม่ได้ใช้คำอธิบายเครื่องทั้งหมด
จำลอง CPU อย่างใกล้ชิดเพื่อหลีกเลี่ยงผลลัพธ์ที่ไม่น่าเชื่อถือจากอัลกอริทึม

สิ่งนี้เหมาะสมเมื่อกำหนดเวลาหลังจากการจัดสรรการลงทะเบียน เช่น with
-fschedule-insns2 หรือที่ -O2 หรือสูงกว่า

-fsched-group-ฮิวริสติก
เปิดใช้งานฮิวริสติกกลุ่มในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุนการสอน
ที่อยู่ในกลุ่มกำหนดการ สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อกำหนดเวลาเป็น
เปิดใช้งาน เช่นกับ -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2 หรือสูงกว่า

-fsched-สำคัญเส้นทาง-ฮิวริสติก
เปิดใช้งานฮิวริสติกพาธวิกฤตในตัวจัดกำหนดการ ฮิวริสติกนี้โปรดปราน
คำแนะนำบนเส้นทางวิกฤต สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นเมื่อกำหนดเวลาเป็น
เปิดใช้งาน เช่นกับ -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2 หรือสูงกว่า

-fsched-spec-insn-ฮิวริสติก
เปิดใช้งานฮิวริสติกของคำสั่งเก็งกำไรในตัวกำหนดตารางเวลา ฮิวริสติกนี้โปรดปราน
คำแนะนำการเก็งกำไรที่มีจุดอ่อนของการพึ่งพาอาศัยกันมากขึ้น เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปิดใช้งานการตั้งเวลา เช่น with -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2
หรือสูงกว่า

-fsched-อันดับฮิวริสติก
เปิดใช้งานอันดับ heuristic ในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุนการสอน
เป็นของบล็อกพื้นฐานที่มีขนาดหรือความถี่มากกว่า เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปิดใช้งานการตั้งเวลา เช่น with -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2
หรือสูงกว่า

-fsched-last-insn-ฮิวริสติก
เปิดใช้งานฮิวริสติกของคำสั่งสุดท้ายในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุน
คำสั่งที่น้อยขึ้นอยู่กับคำสั่งสุดท้ายที่กำหนดไว้ เปิดใช้งานแล้ว
โดยค่าเริ่มต้นเมื่อเปิดใช้งานการตั้งเวลา เช่น กับ -fschedule-อินน์ or -fschedule-insns2
หรือที่ -O2 หรือสูงกว่า

-fsched-dep-count-ฮิวริสติก
เปิดใช้งานฮิวริสติกการนับแบบขึ้นต่อกันในตัวจัดกำหนดการ ฮิวริสติกนี้สนับสนุน
คำแนะนำที่มีคำแนะนำเพิ่มเติมขึ้นอยู่กับมัน เปิดใช้งานโดยค่าเริ่มต้น
เมื่อเปิดใช้งานการตั้งเวลา เช่น with -fschedule-อินน์ or -fschedule-insns2 หรือที่ -O2
หรือสูงกว่า

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

-fselective-การตั้งเวลา
คำแนะนำกำหนดการโดยใช้อัลกอริธึมการจัดกำหนดการแบบเลือก เรียกใช้การจัดตารางเวลาที่เลือก
แทนที่จะผ่านกำหนดการแรก

-fselective-การตั้งเวลา2
คำแนะนำกำหนดการโดยใช้อัลกอริธึมการจัดกำหนดการแบบเลือก เรียกใช้การจัดตารางเวลาที่เลือก
แทนที่จะผ่านกำหนดการที่สอง

-fsel-sched-pipeling
เปิดใช้งานการวางท่อซอฟต์แวร์ของลูปในสุดระหว่างการตั้งเวลาแบบเลือก นี้
ตัวเลือกไม่มีผลจนกระทั่งหนึ่งใน -fselective-การตั้งเวลา or -fselective-การตั้งเวลา2 is
เปิด.

-fsel-sched-pipelining-outer-loop
เมื่อไพพ์ไลน์วนซ้ำระหว่างการจัดกำหนดการแบบเลือก ไปป์ไลน์ยังวนรอบนอกไปป์ไลน์ด้วย นี้
ตัวเลือกไม่มีผลจนกว่า -fsel-sched-pipeling เปิดอยู่

-fshrink-ห่อ
ปล่อยฟังก์ชัน prologues ก่อนส่วนต่างๆ ของฟังก์ชันที่ต้องการเท่านั้น แทนที่จะเป็น at
ด้านบนของฟังก์ชัน แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

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

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

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fombine-stack-adjustments
ติดตามการปรับสแต็ค (ดันและป๊อป) และการอ้างอิงหน่วยความจำสแต็กแล้วลอง
เพื่อหาวิธีรวมเข้าด้วยกัน

เปิดใช้งานโดยค่าเริ่มต้นที่ -O1 และสูงกว่า

-fconserve-กอง
พยายามลดการใช้สแต็กให้เหลือน้อยที่สุด คอมไพเลอร์จะพยายามใช้พื้นที่สแต็กน้อยลง
แม้ว่าจะทำให้โปรแกรมช้าลงก็ตาม ตัวเลือกนี้หมายถึงการตั้งค่า กองใหญ่-
กรอบ พารามิเตอร์เป็น 100 และ the ใหญ่-stack-กรอบ-เติบโต พารามิเตอร์เป็น 400

-ftree-reassoc
ทำการ reassociation บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-ก่อน
ดำเนินการกำจัดความซ้ำซ้อนบางส่วน (PRE) บนต้นไม้ แฟล็กนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O2 และ -O3.

-ftree-บางส่วน-pre
ทำให้การกำจัดความซ้ำซ้อนบางส่วน (PRE) รุนแรงขึ้น แฟล็กนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O3.

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

-ฟรีฟรี
ดำเนินการกำจัดซ้ำซ้อนเต็มรูปแบบ (FRE) บนต้นไม้ ความแตกต่างระหว่าง FRE และ
PRE คือ FRE พิจารณาเฉพาะนิพจน์ที่คำนวณในทุกเส้นทางที่นำไปสู่
การคำนวณซ้ำซ้อน การวิเคราะห์นี้เร็วกว่า PRE แม้ว่าจะเปิดเผยน้อยกว่า
ความซ้ำซ้อน แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-piprop
ดำเนินการยกของจากตัวชี้แบบมีเงื่อนไขบนต้นไม้ บัตรนี้เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า

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

-fipa-บริสุทธิ์-const
ค้นพบว่าฟังก์ชันใดบริสุทธิ์หรือคงที่ เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-fipa-อ้างอิง
ค้นหาว่าตัวแปรสแตติกใดไม่หนีจากหน่วยการคอมไพล์
เปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

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

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

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

-fipa-cp-โคลน
ทำการโคลนฟังก์ชันเพื่อทำให้การขยายพันธุ์คงที่ระหว่างขั้นตอนแข็งแกร่งขึ้น เมื่อไหร่
เปิดใช้งานการแพร่กระจายคงที่ระหว่างขั้นตอนจะดำเนินการโคลนฟังก์ชันเมื่อ
ฟังก์ชันที่มองเห็นได้จากภายนอกสามารถเรียกได้ด้วยอาร์กิวเมนต์คงที่ เพราะสิ่งนี้
การเพิ่มประสิทธิภาพสามารถสร้างสำเนาของฟังก์ชันได้หลายชุด ซึ่งอาจเพิ่มขึ้นอย่างมาก
ขนาดรหัส (ดู --พารามิเตอร์ ipcp-หน่วยเติบโต=ความคุ้มค่า). แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่
-O3.

-fipa-เมทริกซ์-reorg
ทำการแบนและย้ายเมทริกซ์ เมทริกซ์แบนราบพยายามแทนที่ an
เมทริกซ์มิติ m ที่มีเมทริกซ์ n มิติที่เท่ากัน โดยที่ n < ม. นี้
ลดระดับของทางอ้อมที่จำเป็นสำหรับการเข้าถึงองค์ประกอบของเมทริกซ์ NS
การเพิ่มประสิทธิภาพที่สองคือการแปลงเมทริกซ์ซึ่งพยายามเปลี่ยนลำดับของ
ขนาดของเมทริกซ์เพื่อปรับปรุงพื้นที่แคช การเพิ่มประสิทธิภาพทั้งสองต้องการ
-fwhole-โปรแกรม ธง. การโอนย้ายจะเปิดใช้งานก็ต่อเมื่อข้อมูลโปรไฟล์คือ
ใช้ได้

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

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

-ftree-ccp
ดำเนินการขยายพันธุ์แบบมีเงื่อนไขแบบเบาบาง (CCP) บนต้นไม้ ผ่านนี้เท่านั้น
ทำงานบนตัวแปรสเกลาร์ท้องถิ่นและเปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-สวิตช์แปลง
ดำเนินการแปลงการกำหนดค่าเริ่มต้นอย่างง่ายโดยสลับเป็นการกำหนดค่าเริ่มต้นจากa
อาร์เรย์สเกลาร์ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และสูงกว่า

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

-ftree-dce
ดำเนินการกำจัดรหัสที่ตายแล้ว (DCE) บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O
และสูงกว่า

-ftree-builtin-โทร-dce
ดำเนินการตามเงื่อนไข dead code elimination (DCE) สำหรับการเรียกใช้ฟังก์ชันบิวด์อินที่
อาจตั้งค่า "errno" แต่อย่างอื่นไม่มีผลข้างเคียง แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้น
at -O2 และสูงกว่า if -คุณ ไม่ได้ระบุไว้ด้วย

-ftree-dominator-opts
ดำเนินการล้างสเกลาร์อย่างง่ายที่หลากหลาย (การแพร่กระจายแบบคงที่/การคัดลอก ความซ้ำซ้อน
การกำจัด การขยายพันธุ์ช่วง และการลดความซับซ้อนของนิพจน์) ขึ้นอยู่กับผู้ครอบงำ
การข้ามต้นไม้ นอกจากนี้ยังดำเนินการกระโดดเกลียว (เพื่อลดการข้ามไปยังการกระโดด) นี้
แฟล็กถูกเปิดใช้งานโดยค่าเริ่มต้นที่ -O และสูงกว่า

-ftree-dse
ดำเนินการกำจัดซากร้าน (DSE) บนต้นไม้ ร้านค้าที่ตายแล้วคือร้านค้าในความทรงจำ
ตำแหน่งที่ต่อมาถูกเขียนทับโดยร้านค้าอื่นโดยไม่มีการโหลดใด ๆ แทรกแซง ใน
กรณีนี้ร้านค้าก่อนหน้านี้สามารถลบได้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า

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

-ftree-วน-เพิ่มประสิทธิภาพ
ทำการเพิ่มประสิทธิภาพลูปบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า

-ftree-วน-เชิงเส้น
ดำเนินการแปลงการแลกเปลี่ยนแบบวนซ้ำบนต้นไม้ เหมือนกับ -floop-แลกเปลี่ยน. ใช้
การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --กับ-ppl และ --กับอุดตัน ไปยัง
เปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์

-floop-แลกเปลี่ยน
ดำเนินการแปลงการแลกเปลี่ยนแบบวนซ้ำบนลูป สลับสองลูปซ้อนกัน
สลับลูปด้านในและด้านนอก ตัวอย่างเช่นกำหนดลูปเช่น:

DO J = 1, ม
ฉัน = 1, N
A(J,I) = A(J,I) * C
สิ้นสุด
สิ้นสุด

การแลกเปลี่ยนการวนซ้ำจะเปลี่ยนการวนซ้ำราวกับว่าผู้ใช้เขียน:

ฉัน = 1, N
DO J = 1, ม
A(J,I) = A(J,I) * C
สิ้นสุด
สิ้นสุด

ซึ่งจะเป็นประโยชน์เมื่อ "N" มีขนาดใหญ่กว่าแคช เพราะใน Fortran ตัว
องค์ประกอบของอาร์เรย์จะถูกเก็บไว้ในหน่วยความจำแบบต่อเนื่องกันโดยคอลัมน์และต้นฉบับ
วนซ้ำในแถวซึ่งอาจทำให้แคชพลาดในการเข้าถึงแต่ละครั้ง นี้
การเพิ่มประสิทธิภาพใช้ได้กับทุกภาษาที่รองรับโดย GCC และไม่จำกัดเฉพาะ
ฟอร์ทราน. หากต้องการใช้การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --กับ-ppl
และ --กับอุดตัน เพื่อเปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์

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

ฉัน = 1, N
ก(ฉัน) = ก(ฉัน) + ค
สิ้นสุด

การทำเหมืองแบบวนซ้ำจะเปลี่ยนการวนซ้ำราวกับว่าผู้ใช้ได้เขียนไว้ว่า:

DO II = 1, ยังไม่มีข้อความ, 51
DO I = II, นาที (II + 50, N)
ก(ฉัน) = ก(ฉัน) + ค
สิ้นสุด
สิ้นสุด

การเพิ่มประสิทธิภาพนี้ใช้กับทุกภาษาที่รองรับโดย GCC และไม่จำกัดเฉพาะ
ฟอร์ทราน. หากต้องการใช้การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --กับ-ppl
และ --กับอุดตัน เพื่อเปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์

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

ฉัน = 1, N
DO J = 1, ม
A(J,I) = B(I) + C(J)
สิ้นสุด
สิ้นสุด

การบล็อกการวนซ้ำจะเปลี่ยนการวนซ้ำราวกับว่าผู้ใช้เขียน:

DO II = 1, ยังไม่มีข้อความ, 51
DO เจเจ = 1, ม, 51
DO I = II, นาที (II + 50, N)
DO J = JJ, มิน (JJ + 50, M)
A(J,I) = B(I) + C(J)
สิ้นสุด
สิ้นสุด
สิ้นสุด
สิ้นสุด

ซึ่งจะเป็นประโยชน์เมื่อ "M" มีขนาดใหญ่กว่าแคชเพราะวงในสุด
จะวนซ้ำข้อมูลจำนวนน้อยกว่าซึ่งสามารถเก็บไว้ในแคชได้ นี้
การเพิ่มประสิทธิภาพใช้ได้กับทุกภาษาที่รองรับโดย GCC และไม่จำกัดเฉพาะ
ฟอร์ทราน. หากต้องการใช้การแปลงรหัสนี้ ต้องกำหนดค่า GCC ด้วย --กับ-ppl
และ --กับอุดตัน เพื่อเปิดใช้งานโครงสร้างพื้นฐานการแปลงลูปกราไฟท์

-fgraphite-เอกลักษณ์
เปิดใช้งานการแปลงข้อมูลประจำตัวสำหรับกราไฟท์ สำหรับทุก SCoP เราสร้าง
การแสดง polyhedral และแปลงกลับเป็น gimple โดยใช้ -fgraphite-เอกลักษณ์
เราสามารถตรวจสอบต้นทุนหรือประโยชน์ของการแปลง GIMPLE -> GRAPHITE -> GIMPLE ได้
การเพิ่มประสิทธิภาพขั้นต่ำบางอย่างยังดำเนินการโดยตัวสร้างโค้ด CLooG เช่น index
การแยกและกำจัดรหัสตายในลูป

-flop-แบน
ลบโครงสร้างการซ้อนลูป: เปลี่ยนการซ้อนลูปเป็นลูปเดียว นี้
การแปลงจะมีประโยชน์ในการแปลงรูปแบบการเปิดใช้งานสำหรับ vectorization และ
การทำให้ขนานกัน คุณลักษณะนี้เป็นแบบทดลอง หากต้องการใช้การแปลงรหัสนี้ GCC
ต้องกำหนดค่าด้วย --กับ-ppl และ --กับอุดตัน เพื่อเปิดใช้งานการวนรอบกราไฟท์
โครงสร้างพื้นฐานการเปลี่ยนแปลง

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

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

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

-ftree-loop-if-convert-stores
พยายามแปลงการข้ามแบบมีเงื่อนไขที่มีการเขียนหน่วยความจำด้วย นี้
การแปลงอาจไม่ปลอดภัยสำหรับโปรแกรมแบบมัลติเธรดเนื่องจากแปลงแบบมีเงื่อนไข
หน่วยความจำเขียนลงในหน่วยความจำที่ไม่มีเงื่อนไขเขียน ตัวอย่างเช่น,

สำหรับ (i = 0; i < N; i++)
ถ้า (เงื่อนไข)
A[i] = ประสบการณ์;

จะถูกแปลงเป็น

สำหรับ (i = 0; i < N; i++)
A[i] = เงื่อนไข ? expr : A[i];

อาจทำให้เกิดการแข่งขันข้อมูล

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

ฉัน = 1, N
ก(ฉัน) = ข(ฉัน) + ค
D(I) = E(I) * F
สิ้นสุด

ถูกแปลงเป็น

ฉัน = 1, N
ก(ฉัน) = ข(ฉัน) + ค
สิ้นสุด
ฉัน = 1, N
D(I) = E(I) * F
สิ้นสุด

-ftree-loop-กระจายรูปแบบ
ดำเนินการกระจายลูปของรูปแบบที่สามารถสร้างโค้ดด้วยการเรียก a
ห้องสมุด. แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O3.

บัตรผ่านนี้แจกจ่ายลูปการเริ่มต้นและสร้างการเรียกไปที่ memset zero
ตัวอย่างเช่น วง

ฉัน = 1, N
ก(ฉัน) = 0
B(I) = A(I) + ฉัน
สิ้นสุด

ถูกแปลงเป็น

ฉัน = 1, N
ก(ฉัน) = 0
สิ้นสุด
ฉัน = 1, N
B(I) = A(I) + ฉัน
สิ้นสุด

และลูปการเริ่มต้นจะถูกแปลงเป็นการเรียก memset zero

-ftree-วน-im
ทำการเคลื่อนที่แบบวนซ้ำบนต้นไม้ บัตรผ่านนี้จะเคลื่อนที่เฉพาะค่าคงที่ที่จะเป็น
ยากที่จะจัดการที่ระดับ RTL (การเรียกใช้ฟังก์ชัน การดำเนินการที่ขยายไปสู่สิ่งที่ไม่สำคัญ
ลำดับของ insns) กับ -funswitch-ลูป มันยังเคลื่อนตัวถูกดำเนินการของเงื่อนไขที่
เป็นค่าคงที่นอกลูป เพื่อให้เราสามารถใช้การวิเคราะห์ความไม่แปรผันเล็กน้อยได้
ในการยกเลิกการสลับลูป บัตรผ่านยังรวมถึงการเคลื่อนไหวของร้านค้า

-ftree-วน-ivcanon
สร้างตัวนับมาตรฐานสำหรับจำนวนการวนซ้ำในลูปที่กำหนด
จำนวนการทำซ้ำต้องใช้การวิเคราะห์ที่ซับซ้อน การเพิ่มประสิทธิภาพในภายหลังอาจ
กำหนดจำนวนได้อย่างง่ายดาย มีประโยชน์อย่างยิ่งในการคลี่คลาย

-fivopts
ทำการเพิ่มประสิทธิภาพตัวแปรการเหนี่ยวนำ (การลดกำลัง, ตัวแปรการเหนี่ยวนำ
การรวมและการกำจัดตัวแปรเหนี่ยวนำ) บนต้นไม้

-ftree-parallelize-ลูป=n
Parallelize loops กล่าวคือ แบ่งพื้นที่การวนซ้ำเพื่อรันใน n เธรด นี่คือ
เป็นไปได้เฉพาะสำหรับลูปที่มีการวนซ้ำอิสระและสามารถกำหนดได้เอง
เรียงลำดับใหม่ การปรับให้เหมาะสมนั้นให้ผลกำไรบนเครื่องมัลติโปรเซสเซอร์เท่านั้น สำหรับลูป
ที่ใช้ CPU มาก แทนที่จะจำกัด เช่น โดยแบนด์วิดท์หน่วยความจำ ตัวเลือกนี้
หมายถึง -pthreadและดังนั้นจึงรองรับเฉพาะเป้าหมายที่รองรับ
-pthread.

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

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

-ftree-copyrename
ทำการคัดลอกการเปลี่ยนชื่อบนต้นไม้ รหัสผ่านนี้พยายามเปลี่ยนชื่อคอมไพเลอร์ชั่วคราวเป็น
ตัวแปรอื่น ๆ ที่ตำแหน่งคัดลอก มักจะทำให้เกิดชื่อตัวแปรซึ่ง more
ใกล้เคียงกับตัวแปรเดิมอย่างใกล้ชิด แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O และ
สูงกว่า

-ftree-coalesce-inlined-vars
บอกสำเนาชื่อผ่าน (ดู -ftree-copyrename) เพื่อพยายามรวมผู้ใช้รายเล็ก-
ตัวแปรที่กำหนดไว้เช่นกัน แต่ถ้าพวกมันถูกฝังอยู่ในฟังก์ชันอื่น มันคือ
รูปแบบที่จำกัดมากขึ้นของ -ftree-coalesce-vars. ซึ่งอาจเป็นอันตรายต่อข้อมูลการดีบักของข้อมูลดังกล่าว
ตัวแปร inline แต่จะเก็บตัวแปรของ inline-into function ไว้ต่างหากจาก
ซึ่งกันและกันเพื่อให้มีค่าที่คาดหวังใน a . มากขึ้น
เซสชันการดีบัก นี่เป็นค่าเริ่มต้นในเวอร์ชัน GCC ที่เก่ากว่า 4.7

-ftree-coalesce-vars
บอกสำเนาชื่อผ่าน (ดู -ftree-copyrename) เพื่อพยายามรวมผู้ใช้รายเล็ก-
กำหนดตัวแปรด้วย แทนที่จะเป็นเพียงคอมไพเลอร์ชั่วคราว สิ่งนี้อาจ จำกัด อย่างรุนแรง
ความสามารถในการดีบักโปรแกรมที่ได้รับการเพิ่มประสิทธิภาพที่คอมไพล์ด้วย -fno-var-ติดตามการกำหนด.
ในรูปแบบไร้ผล แฟล็กนี้ป้องกันการรวม SSA ของตัวแปรผู้ใช้ ซึ่งรวมถึง
แบบอินไลน์ ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้น

-ftree-ter
ดำเนินการเปลี่ยนนิพจน์ชั่วคราวระหว่าง SSA->เฟสปกติ เดี่ยว
use/single def temporaries จะถูกแทนที่ ณ สถานที่ใช้งานด้วยการกำหนด
การแสดงออก. สิ่งนี้ส่งผลให้โค้ดที่ไม่ใช่ GIMPLE แต่ให้ตัวขยายมากขึ้น
ต้นไม้ที่ซับซ้อนในการทำงานส่งผลให้มีการสร้าง RTL ที่ดีขึ้น เปิดใช้งานโดย
ค่าเริ่มต้นที่ -O และสูงกว่า

-ftree- vectorize
ทำการวนซ้ำเวกเตอร์บนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O3.

-ftree-slp- vectorize
ทำการบล็อกเวกเตอร์พื้นฐานบนต้นไม้ แฟล็กนี้เปิดใช้งานโดยค่าเริ่มต้นที่ -O3 และ
เมื่อ -ftree- vectorize เปิดใช้งาน.

รุ่น -ftree-vect-loop-
ดำเนินการกำหนดเวอร์ชันของลูปเมื่อทำการวนซ้ำเวกเตอร์บนต้นไม้ เมื่อมีลูปปรากฏขึ้น
เป็น vectorizable ยกเว้นว่าไม่สามารถกำหนดการจัดตำแหน่งข้อมูลหรือการพึ่งพาข้อมูลได้
ในเวลาคอมไพล์ จากนั้นลูปเวอร์ชัน vectorized และ non-vectorized จะถูกสร้างขึ้น
พร้อมกับตรวจสอบรันไทม์สำหรับการจัดตำแหน่งหรือการพึ่งพาเพื่อควบคุมเวอร์ชันที่เป็น
ดำเนินการ ตัวเลือกนี้ถูกเปิดใช้งานโดยค่าเริ่มต้น ยกเว้นที่ระดับ -คุณ ที่มันถูกปิดการใช้งาน

-fvect-ต้นทุน-รุ่น
เปิดใช้งานโมเดลต้นทุนสำหรับ vectorization

-ftree-vrp
ดำเนินการขยายพันธุ์ช่วงค่าบนต้นไม้ ซึ่งคล้ายกับการขยายพันธุ์แบบคงที่
ผ่าน แต่แทนที่จะเป็นค่า ช่วงของค่าจะถูกเผยแพร่ สิ่งนี้ทำให้
เครื่องมือเพิ่มประสิทธิภาพเพื่อลบการตรวจสอบช่วงที่ไม่จำเป็นเช่นการตรวจสอบขอบเขตอาร์เรย์และตัวชี้ค่าว่าง
ตรวจสอบ สิ่งนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นที่ -O2 และสูงกว่า การกำจัดการตรวจสอบตัวชี้ Null
จะทำได้ก็ต่อเมื่อ -fdelete-null-pointer-ตรวจสอบ เปิดใช้งาน.

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

-funroll-ลูป
คลายลูปซึ่งสามารถกำหนดจำนวนการวนซ้ำได้ ณ เวลารวบรวมหรือเมื่อ
เข้าสู่วง. -funroll-ลูป หมายถึง -frerun-cse-หลังลูป. ตัวเลือกนี้ทำให้
รหัสใหญ่ขึ้นและอาจหรือไม่ทำให้ทำงานเร็วขึ้น

-funroll-all-ลูป
คลายลูปทั้งหมด แม้ว่าจำนวนการวนซ้ำจะไม่แน่นอนเมื่อลูปเป็น
เข้ามา ซึ่งมักจะทำให้โปรแกรมทำงานช้าลง -funroll-all-ลูป หมายถึง
ตัวเลือกเดียวกับ -funroll-ลูป,

-fsplit-ivs-in-unroller
เปิดใช้งานการแสดงค่าของตัวแปรการเหนี่ยวนำในการทำซ้ำในภายหลังของ
คลี่คลายลูปโดยใช้ค่าในการวนซ้ำครั้งแรก สิ่งนี้ทำลายการพึ่งพาระยะยาว
โซ่ จึงช่วยปรับปรุงประสิทธิภาพของการผ่านกำหนดการ

การรวมกันของ -fweb และ CSE มักจะเพียงพอที่จะได้รับผลเช่นเดียวกัน อย่างไรก็ตาม
ในกรณีที่เนื้อความวนซ้ำซับซ้อนกว่าบล็อกพื้นฐานเดียว นี่ไม่ใช่
เชื่อถือได้. นอกจากนี้ยังใช้งานไม่ได้กับสถาปัตยกรรมบางอย่างเนื่องจาก
ข้อจำกัดในการผ่าน CSE

การเพิ่มประสิทธิภาพนี้เปิดใช้งานโดยค่าเริ่มต้น

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

-fpartial-inlining
ส่วนอินไลน์ของฟังก์ชัน ตัวเลือกนี้มีผลใดๆ ต่อเมื่ออินไลน์ตัวเองคือ
เปิดโดย -finline-ฟังก์ชั่น or -finline-small-ฟังก์ชั่น ตัวเลือก

เปิดใช้งานที่ระดับ -O2.

-fpredictive-ทั่วไป
ดำเนินการปรับให้เหมาะสมเชิงคาดการณ์ล่วงหน้า กล่าวคือ นำการคำนวณกลับมาใช้ใหม่ (โดยเฉพาะ
โหลดและจัดเก็บหน่วยความจำ) ดำเนินการในการวนซ้ำก่อนหน้า

ตัวเลือกนี้เปิดใช้งานที่ระดับ -O3.

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

ตัวเลือกนี้อาจสร้างโค้ดที่ดีขึ้นหรือแย่ลง ผลลัพธ์ขึ้นอยู่กับ
โครงสร้างของลูปภายในซอร์สโค้ด

พิการในระดับ -คุณ.

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

-ช่องมอง ถูกเปิดใช้งานโดยค่าเริ่มต้น -fช่องมอง2 เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fno-เดา-สาขา-ความน่าจะเป็น
อย่าเดาความน่าจะเป็นของสาขาโดยใช้การวิเคราะห์พฤติกรรม

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

ค่าเริ่มต้นคือ -fguess-สาขา-ความน่าจะเป็น ในระดับ -O, -O2, -O3, -คุณ.

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

เปิดใช้งานในระดับ -O2, -O3.

-freeorder-blocks-and-partition
นอกเหนือจากการจัดลำดับบล็อกพื้นฐานใหม่ในฟังก์ชันที่คอมไพล์แล้ว เพื่อลด
จำนวนกิ่งที่รับ, แบ่งบล็อกพื้นฐานร้อนและเย็นออกเป็นส่วน ๆ
ของแอสเซมบลีและไฟล์ .o เพื่อปรับปรุงประสิทธิภาพของเพจและแคช

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

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

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

เปิดใช้งานในระดับ -O2, -O3, -คุณ.

-fstrict-นามแฝง
อนุญาตให้คอมไพเลอร์ใช้กฎนามแฝงที่เข้มงวดที่สุดที่ใช้กับภาษา
กำลังรวบรวม สำหรับ C (และ C++) การดำเนินการนี้จะเปิดใช้งานการปรับให้เหมาะสมตามประเภทของ
นิพจน์ โดยเฉพาะอย่างยิ่ง วัตถุประเภทหนึ่งจะถือว่าไม่อยู่ที่
ที่อยู่เดียวกันกับวัตถุประเภทอื่น เว้นแต่ประเภทจะใกล้เคียงกัน
ตัวอย่างเช่น "unsigned int" สามารถใช้นามแฝง "int" ได้ แต่ไม่ใช่ "void*" หรือ "double" NS
ประเภทอักขระอาจใช้นามแฝงประเภทอื่น ๆ

ให้ความสนใจเป็นพิเศษกับโค้ดดังนี้:

ยูเนี่ยน a_union {
int ฉัน;
ดับเบิล d;
};

intฉ() {
ยูเนี่ยน a_union t;
td = 3.0;
กลับ ti;
}

แนวปฏิบัติในการอ่านจากสมาชิกสหภาพที่แตกต่างจากสมาชิกล่าสุด
เขียนถึง (เรียกว่า "type-punning") เป็นเรื่องปกติ แม้กระทั่งกับ -fstrict-นามแฝง, พิมพ์-
อนุญาตให้ใช้การเล่นกลได้ หากหน่วยความจำสามารถเข้าถึงได้ผ่านประเภทยูเนี่ยน ดังนั้น
รหัสด้านบนจะทำงานตามที่คาดไว้ อย่างไรก็ตาม รหัสนี้อาจไม่:

intฉ() {
ยูเนี่ยน a_union t;
int* ไอพี;
td = 3.0;
ip = &t.i;
ส่งคืน *ip;
}

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

intฉ() {
สองเท่า d = 3.0;
ส่งคืน ((union a_union *) &d)->i;
}

พื้นที่ -fstrict-นามแฝง เปิดใช้งานตัวเลือกที่ระดับ -O2, -O3, -คุณ.

-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, -คุณ.

-falign-ฟังก์ชั่น
-falign-ฟังก์ชั่น=n
จัดตำแหน่งเริ่มต้นของฟังก์ชันให้ตรงกับกำลังสองถัดไปที่มากกว่า n, ข้ามขึ้นไป n
ไบต์ ตัวอย่างเช่น -falign-ฟังก์ชั่น=32 จัดตำแหน่งฟังก์ชันให้เป็น 32-byte . ถัดไป
ขอบเขต แต่ -falign-ฟังก์ชั่น=24 จะจัดแนวไปยังขอบเขต 32 ไบต์ถัดไปก็ต่อเมื่อ
ซึ่งสามารถทำได้โดยข้าม 23 ไบต์หรือน้อยกว่า

-fno-align-ฟังก์ชั่น และ -falign-ฟังก์ชั่น=1 มีค่าเท่ากันและหมายความว่าฟังก์ชัน
จะไม่ถูกจัดตำแหน่ง

แอสเซมเบลอร์บางตัวรองรับแฟล็กนี้เมื่อ n เป็นกำลังสอง ในกรณีนี้ก็คือ
ปัดเศษขึ้น

If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่อง

เปิดใช้งานในระดับ -O2, -O3.

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

-fno-จัดตำแหน่งป้าย และ -falign-labels=1 เทียบเท่าและหมายความว่าฉลากจะไม่เป็น
ชิด

If -falign-ลูป or -falign-กระโดด ใช้บังคับและมีค่ามากกว่าค่านี้ แล้ว
ใช้ค่าของพวกเขาแทน

If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่องซึ่งเป็นไปได้มาก
ที่จะ 1หมายความว่าไม่มีการจัดตำแหน่ง

เปิดใช้งานในระดับ -O2, -O3.

-falign-ลูป
-falign-ลูป=n
จัดแนวลูปให้อยู่ในขอบยกกำลังสอง ข้ามขึ้นไปที่ n ไบต์เช่น -falign-ฟังก์ชั่น.
หวังว่าจะมีการดำเนินการวนซ้ำหลายครั้งซึ่งจะชดเชยใด ๆ
การดำเนินการของหุ่นจำลอง

-fno-align-ลูป และ -falign-ลูป=1 มีค่าเท่ากันและหมายความว่าลูปจะไม่เป็น
ชิด

If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่อง

เปิดใช้งานในระดับ -O2, -O3.

-falign-กระโดด
-falign-กระโดด=n
จัดแนวเป้าหมายสาขาให้อยู่ในขอบเขตกำลังสอง สำหรับเป้าหมายสาขาที่เป้าหมาย
สามารถเข้าถึงได้โดยการกระโดดข้ามขึ้นไปที่ n ไบต์เช่น -falign-ฟังก์ชั่น. ใน
ในกรณีนี้ ไม่จำเป็นต้องดำเนินการจำลอง

-fno-จัดตำแหน่งกระโดด และ -falign-กระโดด=1 มีค่าเท่ากันและหมายความว่าลูปจะไม่เป็น
ชิด

If n ไม่ได้ระบุหรือเป็นศูนย์ ให้ใช้ค่าเริ่มต้นที่ขึ้นกับเครื่อง

เปิดใช้งานในระดับ -O2, -O3.

-สนุกในแต่ละครั้ง
ตัวเลือกนี้เหลือไว้ด้วยเหตุผลด้านความเข้ากันได้ -สนุกในแต่ละครั้ง ไม่มีผลในขณะที่
-fno-หน่วยในเวลา หมายถึง -fno-toplevel-เรียงลำดับใหม่ และ -fno-section-สมอ.

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

-fno-toplevel-เรียงลำดับใหม่
อย่าจัดลำดับฟังก์ชันระดับบนสุด ตัวแปร และคำสั่ง "asm" ส่งออกใน
ลำดับเดียวกันกับที่ปรากฏในไฟล์อินพุต เมื่อใช้ตัวเลือกนี้
ตัวแปรสแตติกที่ไม่ได้อ้างอิงจะไม่ถูกลบออก ตัวเลือกนี้มีไว้เพื่อรองรับ
รหัสที่มีอยู่ซึ่งขึ้นอยู่กับการสั่งซื้อเฉพาะ สำหรับรหัสใหม่ ควรใช้
แอตทริบิวต์

เปิดใช้งานที่ระดับ -O0. เมื่อปิดการใช้งานอย่างชัดแจ้งก็หมายความว่า -fno-section-สมอ,
ซึ่งเปิดใช้งานอย่างอื่นได้ที่ -O0 ในบางเป้าหมาย

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

เปิดใช้งานโดยค่าเริ่มต้นด้วย -funroll-ลูป.

-fwhole-โปรแกรม
สมมติว่าหน่วยการคอมไพล์ปัจจุบันแสดงถึงโปรแกรมทั้งหมดที่กำลังคอมไพล์
ฟังก์ชันและตัวแปรสาธารณะทั้งหมด ยกเว้น "หลัก" และฟังก์ชันที่รวมโดย
แอตทริบิวต์ "externally_visible" กลายเป็นฟังก์ชันคงที่และได้รับการปรับให้เหมาะสม
เชิงรุกมากขึ้นโดยเครื่องมือเพิ่มประสิทธิภาพระหว่างขั้นตอน ถ้า ทอง ถูกใช้เป็นปลั๊กอินตัวเชื่อมโยง
แอตทริบิวต์ "externally_visible" จะถูกเพิ่มไปยังฟังก์ชันโดยอัตโนมัติ (ยังไม่เป็นตัวแปร
เนื่องจากกระแส ทอง ปัญหา) ที่เข้าถึงภายนอกวัตถุ LTO ตาม
ไฟล์ความละเอียดที่ผลิตโดย ทอง. สำหรับตัวเชื่อมโยงอื่น ๆ ที่ไม่สามารถสร้างความละเอียดได้
ไฟล์ ยังจำเป็นต้องมีแอตทริบิวต์ "externally_visible" ที่ชัดเจน ในขณะที่ตัวเลือกนี้
เทียบเท่ากับการใช้คีย์เวิร์ด "คงที่" อย่างเหมาะสมสำหรับโปรแกรมที่ประกอบด้วย a
ไฟล์เดียวร่วมกับ option -flto แฟล็กนี้สามารถใช้รวบรวมได้มากมาย
โปรแกรมขนาดเล็กลงเนื่องจากฟังก์ชันและตัวแปรกลายเป็นท้องถิ่นสำหรับทั้งหมด
หน่วยการคอมไพล์แบบรวม ไม่ใช่สำหรับไฟล์ต้นฉบับเดียว

ตัวเลือกนี้หมายถึง -fwhole-ไฟล์ สำหรับโปรแกรม Fortran

-flto[=n]
ตัวเลือกนี้เรียกใช้ตัวเพิ่มประสิทธิภาพเวลาลิงก์มาตรฐาน เมื่อเรียกใช้ด้วยซอร์สโค้ด it
สร้าง GIMPLE (หนึ่งในการรับรองภายในของ GCC) และเขียนไปยังELF .พิเศษ
ส่วนต่างๆ ในไฟล์อ็อบเจ็กต์ เมื่อไฟล์อ็อบเจ็กต์ถูกเชื่อมโยงเข้าด้วยกัน . ทั้งหมด
เนื้อหาฟังก์ชันถูกอ่านจากส่วน ELF เหล่านี้และจำลองเสมือนว่าเคยเป็น
ส่วนหนึ่งของหน่วยการแปลเดียวกัน

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

gcc -c -O2 -flto foo.c
gcc -c -O2 -บาร์ flto.c
gcc -o myprog -flto -o2 foo.o bar.o

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

อีกวิธี (ง่ายกว่า) ในการเปิดใช้งานการเพิ่มประสิทธิภาพเวลาลิงก์คือ:

gcc -o myprog -flto -O2 foo.c bar.c

ด้านบนสร้าง bytecode สำหรับ ฟู.ซี และ บาร์ซี, หลอมรวมเป็นหนึ่งเดียว
การแสดง GIMPLE และเพิ่มประสิทธิภาพตามปกติในการผลิต มายโปรก.

สิ่งสำคัญเพียงอย่างเดียวที่ต้องจำไว้คือการเปิดใช้งานการเพิ่มประสิทธิภาพเวลาลิงก์
-flto ต้องส่งแฟล็กไปยังทั้งคำสั่งคอมไพล์และลิงก์

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

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

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

gcc -c -O0 -flto foo.c
gcc -c -O0 -บาร์ flto.c
gcc -o myprog -flto -o3 foo.o bar.o

สิ่งนี้สร้างไฟล์อ็อบเจ็กต์แต่ละรายการด้วยรหัสแอสเซมเบลอร์ที่ไม่ได้รับการปรับให้เหมาะสม แต่
ผลลัพธ์ไบนารี มายโปรก ได้รับการปรับให้เหมาะสมที่ -O3. ถ้า แทน ไบนารีสุดท้ายคือ
สร้างขึ้นโดยไม่ต้อง -fltoแล้ว มายโปรก ไม่ได้รับการปรับให้เหมาะสม

เมื่อสร้างไบนารีสุดท้ายด้วย -flto, GCC ใช้เฉพาะการเพิ่มประสิทธิภาพเวลาลิงก์เท่านั้น
ไปยังไฟล์เหล่านั้นที่มี bytecode ดังนั้นคุณจึงสามารถผสมและจับคู่ไฟล์อ็อบเจ็กต์ได้
และไลบรารีที่มี GIMPLE bytecodes และโค้ดอ็อบเจ็กต์สุดท้าย GCC จะเลือกโดยอัตโนมัติ
ไฟล์ใดที่จะปรับให้เหมาะสมในโหมด LTO และไฟล์ใดที่จะเชื่อมโยงโดยไม่ต้องเพิ่มเติม
การประมวลผล

มีการตั้งค่าสถานะการสร้างรหัสบางอย่างที่ GCC รักษาไว้เมื่อสร้าง bytecodes เช่น
ต้องใช้ในระหว่างขั้นตอนการเชื่อมโยงขั้นสุดท้าย ปัจจุบันตัวเลือกต่อไปนี้
ถูกบันทึกลงในไฟล์ GIMPLE bytecode: -fPIC, -fcommon และทั้งหมด -m ธงเป้าหมาย

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

หาก LTO พบอ็อบเจ็กต์ที่มีการเชื่อมโยง C ที่ประกาศด้วยประเภทที่เข้ากันไม่ได้แยกกัน
หน่วยการแปลที่จะเชื่อมโยงเข้าด้วยกัน (พฤติกรรมที่ไม่ได้กำหนดตาม ISO C99
6.2.7) อาจมีการออกการวินิจฉัยที่ไม่ร้ายแรง พฤติกรรมยังไม่ได้กำหนดที่รัน
เวลา

คุณลักษณะอีกประการของ LTO คือสามารถใช้การเพิ่มประสิทธิภาพระหว่างขั้นตอนได้
ในไฟล์ที่เขียนด้วยภาษาต่างๆ สิ่งนี้ต้องการการสนับสนุนในภาษาด้านหน้า
จบ. ปัจจุบันส่วนหน้า C, C ++ และ Fortran สามารถเปล่ง GIMPLE
bytecodes ดังนั้นสิ่งนี้ควรใช้งานได้:

gcc -c -flto foo.c
g++ -c -flto bar.cc
gfortran -c -flto baz.f90
g++ -o myprog -flto -O3 foo.o bar.o baz.o -lgfortran

สังเกตว่าลิงค์สุดท้ายเสร็จสิ้นด้วย g ++ เพื่อรับไลบรารีรันไทม์ C++ และ
-แอลจีฟอร์ทราน ถูกเพิ่มเพื่อรับไลบรารีรันไทม์ของ Fortran โดยทั่วไปแล้วเมื่อผสม
ภาษาในโหมด LTO คุณควรใช้ตัวเลือกคำสั่งลิงค์เดียวกันกับเมื่อผสม
ภาษาในการคอมไพล์ปกติ (ไม่ใช่ LTO); ทั้งหมดที่คุณต้องเพิ่มคือ -flto เพื่อทั้งหมด
คอมไพล์และลิงก์คำสั่ง

หากไฟล์อ็อบเจ็กต์ที่มี GIMPLE bytecode ถูกจัดเก็บไว้ในไฟล์เก็บถาวรของไลบรารี ให้พูดว่า
libfo.aเป็นไปได้ที่จะแยกและใช้ในลิงก์ LTO หากคุณใช้ a
ตัวเชื่อมโยงพร้อมการสนับสนุนปลั๊กอิน หากต้องการเปิดใช้งานคุณสมบัตินี้ ให้ใช้แฟล็ก -ฟิวส์-ลิงเกอร์-ปลั๊กอิน
ณ เวลาเชื่อมโยง:

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

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

หากคุณไม่ได้ใช้ตัวเชื่อมโยงที่รองรับปลั๊กอินและ/หรือไม่ได้เปิดใช้งานตัวเชื่อมโยง
ปลั๊กอินแล้ววัตถุภายใน libfo.a ถูกสกัดและเชื่อมโยงตามปกติ แต่พวกมัน
ไม่เข้าร่วมในกระบวนการเพิ่มประสิทธิภาพ LTO

การเพิ่มประสิทธิภาพเวลาลิงก์ไม่จำเป็นต้องมีโปรแกรมทั้งหมดจึงจะใช้งานได้
หากโปรแกรมไม่ต้องการให้ส่งออกสัญลักษณ์ใด ๆ ก็สามารถรวมได้
-flto และ -fwhole-โปรแกรม เพื่อให้เครื่องมือเพิ่มประสิทธิภาพระหว่างขั้นตอนใช้งานได้มากขึ้น
สมมติฐานเชิงรุกซึ่งอาจนำไปสู่โอกาสในการเพิ่มประสิทธิภาพที่ดีขึ้น การใช้
-fwhole-โปรแกรม ไม่จำเป็นเมื่อปลั๊กอินตัวเชื่อมโยงทำงานอยู่ (ดู -ฟิวส์-ลิงเกอร์-ปลั๊กอิน).

การใช้งาน LTO ในปัจจุบันไม่ได้พยายามสร้าง bytecode ที่เป็น
แบบพกพาระหว่างโฮสต์ประเภทต่างๆ ไฟล์ bytecode เป็นเวอร์ชันและที่นั่น
เป็นการตรวจสอบเวอร์ชันที่เข้มงวด ดังนั้นไฟล์ bytecode ที่สร้างใน GCC เวอร์ชันเดียวจะไม่
ทำงานร่วมกับ GCC เวอร์ชันเก่า/ใหม่กว่า

การปรับเวลาลิงก์ให้เหมาะสมทำงานได้ไม่ดีกับการสร้างข้อมูลการดีบัก
รวม -flto กับ -g กำลังทดลองและคาดว่าจะผลิตผิด
ผล.

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

คุณยังสามารถระบุ -flto=งานเซิร์ฟเวอร์ เพื่อใช้โหมดเซิร์ฟเวอร์งานของ GNU make เพื่อกำหนด
จำนวนงานคู่ขนาน สิ่งนี้มีประโยชน์เมื่อ Makefile ที่เรียก GCC อยู่แล้ว
ดำเนินการควบคู่กันไป คุณต้องเติม a + ไปที่สูตรคำสั่งในพาเรนต์
Makefile เพื่อให้สิ่งนี้ทำงานได้ ตัวเลือกนี้น่าจะใช้ได้ก็ต่อเมื่อ MAKE เป็นของ GNU

ตัวเลือกนี้ถูกปิดใช้งานโดยค่าเริ่มต้น

-flto-พาร์ทิชัน=ALG
ระบุอัลกอริทึมการแบ่งพาร์ติชันที่ใช้โดยตัวเพิ่มประสิทธิภาพเวลาลิงก์ ค่าคือ
"1to1" เพื่อระบุการแบ่งพาร์ติชันมิเรอร์ไฟล์ต้นฉบับหรือ
"สมดุล" เพื่อระบุการแบ่งพาร์ติชั่นออกเป็นชิ้นขนาดเท่ากัน (เมื่อทำได้)
การระบุ "ไม่มี" เป็นอัลกอริทึมจะปิดใช้งานการแบ่งพาร์ติชันและการสตรีมอย่างสมบูรณ์ NS
ค่าเริ่มต้นคือ "สมดุล"

-flto-บีบอัดระดับ=n
ตัวเลือกนี้ระบุระดับการบีบอัดที่ใช้สำหรับภาษากลางที่เขียน
ไปยังไฟล์อ็อบเจ็กต์ LTO และมีความหมายร่วมกับโหมด LTO เท่านั้น (-flto).
ค่าที่ถูกต้องคือ 0 (ไม่มีการบีบอัด) ถึง 9 (การบีบอัดสูงสุด) ค่านอกนี้
ช่วงจะถูกจำกัดไว้ที่ 0 หรือ 9 หากไม่ระบุตัวเลือก ค่าดีฟอลต์ที่สมดุล
ใช้การตั้งค่าการบีบอัด

-flto-รายงาน
พิมพ์รายงานพร้อมรายละเอียดภายในเกี่ยวกับการทำงานของตัวเพิ่มประสิทธิภาพเวลาลิงก์ NS
เนื้อหาของรายงานนี้แตกต่างกันไปในแต่ละเวอร์ชัน มีขึ้นเพื่อเป็นประโยชน์กับ GCC
นักพัฒนาเมื่อประมวลผลไฟล์อ็อบเจ็กต์ในโหมด LTO (ผ่าน -flto).

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

-ฟิวส์-ลิงเกอร์-ปลั๊กอิน
เปิดใช้งานการใช้ปลั๊กอินตัวเชื่อมโยงระหว่างการเพิ่มประสิทธิภาพเวลาลิงก์ ตัวเลือกนี้อาศัย
เกี่ยวกับการสนับสนุนปลั๊กอินในลิงเกอร์ซึ่งมีอยู่ในทองคำหรือใน 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 . ได้
ห้องสมุด ฯลฯ)

ค่าเริ่มต้นคือ -ffat-lto-วัตถุ แต่ค่าเริ่มต้นนี้มีวัตถุประสงค์เพื่อเปลี่ยนแปลงในอนาคต
เผยแพร่เมื่อสภาพแวดล้อมที่เปิดใช้งานปลั๊กอินลิงเกอร์กลายเป็นเรื่องธรรมดามากขึ้น

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

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

เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.

-fuse-ld=ทอง
ใช้ ทอง ตัวเชื่อมโยงแทนตัวเชื่อมโยงเริ่มต้น

-fuse-ld=bfd
ใช้ ld.bfd ตัวเชื่อมโยงแทนตัวเชื่อมโยงเริ่มต้น

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

เปิดใช้งานในระดับ -O, -O2, -O3, -คุณ.

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

-fprofile-dir=เส้นทาง
ตั้งค่าไดเร็กทอรีเพื่อค้นหาไฟล์ข้อมูลโปรไฟล์ในto เส้นทาง. ตัวเลือกนี้
มีผลกับข้อมูลโปรไฟล์ที่สร้างโดย .เท่านั้น -fprofile-สร้าง, -ftest-ครอบคลุม,
-fprofile-ส่วนโค้ง และใช้โดย -fprofile-ใช้ และ -fbranch-ความน่าจะเป็น และเกี่ยวข้องกัน
ตัวเลือก. สามารถใช้ได้ทั้งเส้นทางแบบสัมบูรณ์และแบบสัมพัทธ์ โดยค่าเริ่มต้น GCC จะใช้
ไดเรกทอรีปัจจุบันเป็น เส้นทางดังนั้นไฟล์ข้อมูลโปรไฟล์จะปรากฏในไฟล์เดียวกัน
ไดเร็กทอรีเป็นไฟล์อ็อบเจ็กต์

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

เปิดใช้งานตัวเลือกต่อไปนี้: "-fprofile-arcs", "-fprofile-values", "-fvpt"

If เส้นทาง ระบุไว้ GCC จะดูที่ เส้นทาง เพื่อค้นหาข้อมูลข้อเสนอแนะโปรไฟล์
ไฟล์. ดู -fprofile-ผบ.

-fprofile-ใช้
-fprofile-use=เส้นทาง
เปิดใช้งานการเพิ่มประสิทธิภาพตามความคิดเห็นของโปรไฟล์และการเพิ่มประสิทธิภาพโดยทั่วไปให้ผลกำไร
เฉพาะกับข้อเสนอแนะโปรไฟล์ที่มีอยู่

เปิดใช้งานตัวเลือกต่อไปนี้: "-fbranch-probabilities", "-fvpt",
"-funroll-ลูป", "-fpeel-ลูป", "-ftracer"

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

If เส้นทาง ระบุไว้ GCC จะดูที่ เส้นทาง เพื่อค้นหาข้อมูลข้อเสนอแนะโปรไฟล์
ไฟล์. ดู -fprofile-ผบ.

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

-ลอยเก็บ
อย่าเก็บตัวแปรทศนิยมในรีจิสเตอร์ และยับยั้งตัวเลือกอื่นๆ ที่
อาจเปลี่ยนว่าค่าทศนิยมถูกนำมาจากรีจิสเตอร์หรือหน่วยความจำ

ตัวเลือกนี้ป้องกันความแม่นยำส่วนเกินที่ไม่พึงประสงค์บนเครื่องจักร เช่น 68000 โดยที่
การลงทะเบียนแบบลอยตัว (ของ 68881) มีความแม่นยำมากกว่าที่ควรจะเป็น "สองเท่า"
เพื่อที่จะมี. ในทำนองเดียวกันสำหรับสถาปัตยกรรม x86 สำหรับโปรแกรมส่วนใหญ่ ความแม่นยำส่วนเกิน
ทำได้เพียงแต่ดี แต่มีบางโปรแกรมที่อาศัยคำนิยามที่แม่นยำของ IEEE floating
จุด. ใช้ -ลอยเก็บ สำหรับโปรแกรมดังกล่าวหลังจากปรับเปลี่ยนให้จัดเก็บทั้งหมด
การคำนวณขั้นกลางที่เกี่ยวข้องเป็นตัวแปร

-fexcess-ความแม่นยำ=สไตล์
ตัวเลือกนี้ช่วยให้สามารถควบคุมเพิ่มเติมเกี่ยวกับความแม่นยำส่วนเกินบนเครื่องจักรที่ลอย-
การลงทะเบียนจุดมีความแม่นยำมากกว่าประเภท IEEE "float" และ "double" และ
โปรเซสเซอร์ไม่สนับสนุนการดำเนินการที่ปัดเศษเป็นประเภทเหล่านั้น โดยค่าเริ่มต้น,
-fexcess-แม่นยำ=รวดเร็ว มีผลบังคับใช้ หมายความว่ามีการดำเนินการใน
ความแม่นยำของรีจิสเตอร์และคาดเดาไม่ได้เมื่อปัดเศษเป็นประเภท
ที่ระบุในซอร์สโค้ดจะเกิดขึ้น เมื่อรวบรวม C ถ้า
-fexcess-precision=มาตรฐาน ระบุไว้แล้วความแม่นยำส่วนเกินจะเป็นไปตามกฎ
ระบุไว้ใน ISO C99; โดยเฉพาะการหล่อและการมอบหมายงานทำให้ค่าเป็น
ปัดเศษเป็นประเภทความหมาย (ในขณะที่ -ลอยเก็บ มีผลกับงานที่มอบหมายเท่านั้น)
ตัวเลือกนี้ถูกเปิดใช้งานโดยค่าเริ่มต้นสำหรับ C หากตัวเลือกความสอดคล้องที่เข้มงวดเช่น
-std=c99 ถูกนำมาใช้.

-fexcess-precision=มาตรฐาน ไม่ได้นำไปใช้กับภาษาอื่นที่ไม่ใช่ C และไม่มี
ผลถ้า -funsafe-คณิตศาสตร์-optimizations or -ffast-คณิตศาสตร์ ระบุไว้ บน x86 มัน
ก็ไม่มีผลเช่นกันถ้า -mfpmath=sse or -mfpmath=sse+387 ระบุไว้; ในอดีต
กรณี ความหมายของ IEEE ใช้โดยไม่มีความแม่นยำเกิน และในระยะหลัง ปัดเศษคือ
คาดการณ์ไม่ได้.

-ffast-คณิตศาสตร์
ชุดอุปกรณ์ -fno-คณิตศาสตร์เออร์โน, -funsafe-คณิตศาสตร์-optimizations, -ffinite-คณิตศาสตร์เท่านั้น,
-fno-ปัดเศษคณิตศาสตร์, -fno-สัญญาณ-nans และ -fcx-จำกัดช่วง.

ตัวเลือกนี้ทำให้มาโครตัวประมวลผลล่วงหน้า "__FAST_MATH__" ถูกกำหนด

ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกนอกจาก -Ofast เพราะมันอาจส่งผลให้
เอาต์พุตที่ไม่ถูกต้องสำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้

-fno-คณิตศาสตร์เออร์โน
อย่าตั้งค่า ERRNO หลังจากเรียกใช้ฟังก์ชันคณิตศาสตร์ที่ดำเนินการด้วยฟังก์ชันเดียว
คำสั่ง เช่น sqrt โปรแกรมที่อาศัยข้อยกเว้น IEEE สำหรับข้อผิดพลาดทางคณิตศาสตร์
การจัดการอาจต้องการใช้แฟล็กนี้เพื่อความเร็วในขณะที่รักษา IEEE arithmetic
ความเข้ากันได้

ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกเนื่องจากอาจส่งผลให้เอาต์พุตไม่ถูกต้อง
สำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้

ค่าเริ่มต้นคือ -fmath-เออเรโน.

ในระบบดาร์วิน ห้องสมุดคณิตศาสตร์ไม่เคยตั้งค่า "errno" จึงไม่มีเหตุผล
เพื่อให้ผู้เรียบเรียงพิจารณาถึงความเป็นไปได้และ -fno-คณิตศาสตร์เออร์โน คือ
ค่าเริ่มต้น.

-funsafe-คณิตศาสตร์-optimizations
อนุญาตการปรับให้เหมาะสมสำหรับเลขทศนิยมที่ (a) ถือว่าอาร์กิวเมนต์นั้นและ
ผลลัพธ์ถูกต้องและ (b) อาจละเมิดมาตรฐาน IEEE หรือ ANSI เมื่อใช้ในช่วงเวลาเชื่อมโยง
อาจรวมถึงไลบรารีหรือไฟล์เริ่มต้นที่เปลี่ยนคำควบคุม FPU เริ่มต้นหรือ
การเพิ่มประสิทธิภาพอื่นๆ ที่คล้ายคลึงกัน

ตัวเลือกนี้ไม่ได้เปิดใช้งานโดย any -O ตัวเลือกเนื่องจากอาจส่งผลให้เอาต์พุตไม่ถูกต้อง
สำหรับโปรแกรมที่ขึ้นอยู่กับการใช้งานจริงของ IEEE หรือ ISO
กฎ/ข้อกำหนดสำหรับฟังก์ชันทางคณิตศาสตร์ อย่างไรก็ตาม มันอาจให้รหัสเร็วขึ้นสำหรับ
โปรแกรมที่ไม่ต้องการการรับประกันตามข้อกำหนดเหล่านี้ เปิดใช้งาน
-fno-ลงนาม-ศูนย์, -fno-trapping-คณิตศาสตร์, -fassociative-คณิตศาสตร์ และ -freciprocal-คณิตศาสตร์.

ค่าเริ่มต้นคือ -fno-ไม่ปลอดภัย-การเพิ่มประสิทธิภาพทางคณิตศาสตร์.

-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-แนนส์
คอมไพล์โค้ดโดยสมมติว่า 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-ส่วนโค้ง, คุณสามารถรวบรวมเป็นครั้งที่สอง
การใช้ -fbranch-ความน่าจะเป็นเพื่อปรับปรุงการเพิ่มประสิทธิภาพตามจำนวนครั้ง
แต่ละสาขาถูกจับ เมื่อโปรแกรมคอมไพล์ด้วย -fprofile-ส่วนโค้ง ออกจากมันบันทึก
การดำเนินการส่วนโค้งนับเป็นไฟล์ที่เรียกว่า sourcename.gcda สำหรับแต่ละไฟล์ต้นฉบับ NS
ข้อมูลในไฟล์ข้อมูลนี้ขึ้นอยู่กับโครงสร้างของไฟล์ที่สร้างขึ้นมาก
ดังนั้นคุณต้องใช้ซอร์สโค้ดเดียวกันและตัวเลือกการเพิ่มประสิทธิภาพเดียวกันสำหรับทั้งคู่
การรวบรวม

กับ -fbranch-ความน่าจะเป็น, GCC ทำให้ REG_BR_PROB หมายเหตุในแต่ละ JUMP_INSN และ
CALL_INSN. สามารถใช้เพื่อปรับปรุงการเพิ่มประสิทธิภาพได้ ปัจจุบันใช้เฉพาะ
ในที่เดียว: ใน รีออร์ก.ซีแทนที่จะเดาว่าสาขาใดมีแนวโน้มมากที่สุด
เอา REG_BR_PROB ค่าต่างๆ ใช้เพื่อกำหนดเส้นทางที่จะนำไปใช้มากกว่า
บ่อยครั้ง.

-fprofile-ค่า
ถ้ารวมกับ -fprofile-ส่วนโค้งมันเพิ่มรหัสเพื่อให้ข้อมูลบางอย่างเกี่ยวกับค่าของ
มีการรวบรวมนิพจน์ในโปรแกรม

กับ -fbranch-ความน่าจะเป็น, มันอ่านกลับข้อมูลที่รวบรวมจากค่าโปรไฟล์ของ
นิพจน์สำหรับการใช้งานในการเพิ่มประสิทธิภาพ

เปิดใช้งานด้วย -fprofile-สร้าง และ -fprofile-ใช้.

-fvpt
ถ้ารวมกับ -fprofile-ส่วนโค้งมันสั่งให้คอมไพเลอร์เพิ่มโค้ดเพื่อรวบรวม
ข้อมูลเกี่ยวกับค่าของนิพจน์

กับ -fbranch-ความน่าจะเป็น, มันอ่านกลับข้อมูลที่รวบรวมและดำเนินการ .จริง
การเพิ่มประสิทธิภาพขึ้นอยู่กับพวกเขา ปัจจุบันการเพิ่มประสิทธิภาพรวมถึงความเชี่ยวชาญของ
การแบ่งส่วนโดยใช้ความรู้เกี่ยวกับคุณค่าของตัวส่วน

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

เปิดใช้งานโดยค่าเริ่มต้นด้วย -funroll-ลูป และ -fpeel-ลูป.

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

เปิดใช้งานด้วย -fprofile-ใช้.

-funroll-ลูป
คลายลูปซึ่งสามารถกำหนดจำนวนการวนซ้ำได้ ณ เวลารวบรวมหรือเมื่อ
เข้าสู่วง. -funroll-ลูป หมายถึง -frerun-cse-หลังลูป, -fweb และ
-frename-ลงทะเบียน. นอกจากนี้ยังเปิดใช้การลอกแบบวนซ้ำทั้งหมด (เช่น การนำ . ออกโดยสมบูรณ์
วนซ้ำด้วยจำนวนการวนซ้ำคงที่เล็กน้อย) ตัวเลือกนี้ทำให้โค้ดมีขนาดใหญ่ขึ้นและ
อาจหรือไม่อาจทำให้ทำงานเร็วขึ้น

เปิดใช้งานด้วย -fprofile-ใช้.

-funroll-all-ลูป
คลายลูปทั้งหมด แม้ว่าจำนวนการวนซ้ำจะไม่แน่นอนเมื่อลูปเป็น
เข้ามา ซึ่งมักจะทำให้โปรแกรมทำงานช้าลง -funroll-all-ลูป หมายถึง
ตัวเลือกเดียวกับ -funroll-ลูป.

-fpeel-ลูป
ปอกลูปที่มีข้อมูลเพียงพอที่จะไม่ม้วนมาก (จาก
ข้อเสนอแนะโปรไฟล์) นอกจากนี้ยังเปิดใช้การลอกแบบวนซ้ำทั้งหมด (เช่น การนำ . ออกโดยสมบูรณ์
วนซ้ำด้วยจำนวนการวนซ้ำคงที่เล็กน้อย)

เปิดใช้งานด้วย -fprofile-ใช้.

-fmove-loop-ค่าคงที่
เปิดใช้งานการเคลื่อนที่ไม่แปรผันของลูปในตัวเพิ่มประสิทธิภาพลูป RTL เปิดใช้งานที่ระดับ
-O1

-funswitch-ลูป
ย้ายกิ่งที่มีเงื่อนไขไม่แปรผันของลูปออกจากลูป โดยซ้ำกับ
วนซ้ำทั้งสองกิ่ง (แก้ไขตามผลลัพธ์ของเงื่อนไข)

-ffunction-ส่วน
-fdata-ส่วน
วางแต่ละฟังก์ชันหรือรายการข้อมูลลงในส่วนของตนเองในไฟล์เอาต์พุตหาก target
รองรับส่วนโดยพลการ ชื่อของฟังก์ชันหรือชื่อของรายการข้อมูล
กำหนดชื่อของส่วนในไฟล์ที่ส่งออก

ใช้ตัวเลือกเหล่านี้กับระบบที่ตัวเชื่อมโยงสามารถดำเนินการเพิ่มประสิทธิภาพเพื่อปรับปรุง
ตำแหน่งอ้างอิงในพื้นที่คำแนะนำ ระบบส่วนใหญ่ที่ใช้วัตถุ ELF
รูปแบบและตัวประมวลผล SPARC ที่รัน Solaris 2 มีตัวเชื่อมโยงที่มีการเพิ่มประสิทธิภาพดังกล่าว
AIX อาจมีการปรับให้เหมาะสมเหล่านี้ในอนาคต

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

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

-fbranch-เป้าหมาย-โหลด-เพิ่มประสิทธิภาพ2
ดำเนินการเพิ่มประสิทธิภาพการโหลดรีจิสเตอร์เป้าหมายสาขาหลังจากเธรดอารัมภบท / บทส่งท้าย

-fbtr-bb-พิเศษ
เมื่อดำเนินการเพิ่มประสิทธิภาพการโหลดการลงทะเบียนเป้าหมายของสาขา อย่าใช้เป้าหมายของสาขาซ้ำ
ลงทะเบียนในบล็อกพื้นฐานใด ๆ

-fstack- ป้องกัน
ปล่อยโค้ดพิเศษเพื่อตรวจสอบบัฟเฟอร์ล้น เช่น การโจมตีแบบ stack smashing นี้
ทำได้โดยการเพิ่มตัวแปรป้องกันในการทำงานกับวัตถุที่มีช่องโหว่ นี้
รวมฟังก์ชันที่เรียกใช้ alloca และฟังก์ชันที่มีบัฟเฟอร์ขนาดใหญ่กว่า 8 ไบต์
ยามจะเริ่มต้นเมื่อป้อนฟังก์ชันแล้วตรวจสอบเมื่อ
ออกจากฟังก์ชัน หากการตรวจสอบยามล้มเหลว จะมีการพิมพ์ข้อความแสดงข้อผิดพลาดและโปรแกรม
ทางออก

หมายเหตุ: ใน Ubuntu 6.10 และเวอร์ชันที่ใหม่กว่า ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้นสำหรับ C, C++,
ObjC, ObjC++ หากไม่มี -fno-stack-ป้องกัน, -nostdlib, หรือ - อิสระ เป็น
พบว่า

-fstack-protector-ทั้งหมด
Like -fstack- ป้องกัน ยกเว้นว่าฟังก์ชันทั้งหมดได้รับการคุ้มครอง

-fsection-สมอ
พยายามลดจำนวนการคำนวณที่อยู่เชิงสัญลักษณ์โดยใช้ "สมอ" ที่แชร์
สัญลักษณ์ที่อยู่วัตถุใกล้เคียง การเปลี่ยนแปลงนี้สามารถช่วยลดจำนวนได้
ของรายการ GOT และ GOT เข้าถึงบางเป้าหมาย

ตัวอย่างเช่น การใช้งานฟังก์ชัน "foo" ต่อไปนี้:

คงที่ int a, b, c;
int foo (เป็นโมฆะ) { ส่งคืน a + b + c; }

ปกติจะคำนวณ address ของตัวแปรทั้งสาม แต่ถ้าคอมไพล์มัน
กับ -fsection-สมอมันจะเข้าถึงตัวแปรจากจุดยึดทั่วไป
แทนที่. เอฟเฟกต์คล้ายกับ pseudocode ต่อไปนี้ (ซึ่งไม่ถูกต้อง C):

int foo (เป็นโมฆะ)
{
ลงทะเบียน int *xr = &x;
ส่งคืน xr[&a - &x] + xr[&b - &x] + xr[&c - &x];
}

ไม่ใช่ทุกเป้าหมายที่รองรับตัวเลือกนี้

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

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

ในแต่ละกรณี ความคุ้มค่า เป็นจำนวนเต็ม ตัวเลือกที่อนุญาตสำหรับ ชื่อ ได้รับใน
ตารางต่อไปนี้:

ทำนายผลได้
เมื่อคาดการณ์ว่าจะรับสาขาด้วยความน่าจะเป็นต่ำกว่าเกณฑ์นี้
(เป็นเปอร์เซ็นต์) แล้วถือว่าคาดเดาได้ดี ค่าเริ่มต้นคือ 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-ค้นหา
จำนวนคำสั่งสูงสุดที่ต้องพิจารณาเมื่อค้นหาคำสั่ง
เติมช่องหน่วงเวลา ถ้ามากกว่าจำนวนคำสั่งโดยพลการนี้คือ
ค้นหาแล้วประหยัดเวลาจากการเติมช่องล่าช้าจะน้อยที่สุดดังนั้นหยุด
การค้นหา ค่าที่เพิ่มขึ้นหมายถึงการเพิ่มประสิทธิภาพเชิงรุกมากขึ้น ทำให้
เวลาในการรวบรวมเพิ่มขึ้นโดยอาจมีการปรับปรุงเวลาดำเนินการเล็กน้อย

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

max-gcse-หน่วยความจำ
จำนวนหน่วยความจำสูงสุดโดยประมาณที่จะจัดสรรเพื่อ
ดำเนินการเพิ่มประสิทธิภาพการกำจัดนิพจน์ย่อยทั่วไปทั่วโลก ถ้าหน่วยความจำมากขึ้น
เกินกว่าที่กำหนด จะไม่สามารถทำการเพิ่มประสิทธิภาพได้

max-gcse-insertion-อัตราส่วน
หากอัตราส่วนของการแทรกนิพจน์ต่อการลบมากกว่าค่านี้สำหรับ
นิพจน์ใด ๆ จากนั้น RTL PRE จะแทรกหรือลบนิพจน์และปล่อยให้
การคำนวณซ้ำซ้อนบางส่วนในสตรีมคำสั่ง ค่าเริ่มต้นคือ
20.

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

max-modulo-backtrack-พยายาม
จำนวนครั้งสูงสุดของความพยายามย้อนกลับที่ตัวกำหนดตารางเวลาควรทำเมื่อมอดูโล
กำหนดการวนซ้ำ ค่าที่มากขึ้นสามารถเพิ่มเวลาในการคอมไพล์ได้แบบทวีคูณ

max-inline-insns-single
พารามิเตอร์หลายตัวควบคุมอินไลเนอร์ต้นไม้ที่ใช้ใน gcc ตัวเลขนี้กำหนด
จำนวนคำสั่งสูงสุด (นับในการเป็นตัวแทนภายในของ GCC) ใน a
ฟังก์ชันเดียวที่อินไลเนอร์ของต้นไม้จะพิจารณาสำหรับการอินไลน์ นี้เท่านั้น
ส่งผลกระทบต่อฟังก์ชันที่ประกาศแบบอินไลน์และเมธอดที่นำไปใช้ในการประกาศคลาส
(ซี++). ค่าเริ่มต้นคือ 400

max-inline-insns-อัตโนมัติ
เมื่อคุณใช้ -finline-ฟังก์ชั่น (รวมอยู่ใน -O3) ฟังก์ชั่นมากมายที่จะ
มิฉะนั้น คอมไพเลอร์จะไม่ได้รับการพิจารณาสำหรับการอินไลน์จะถูกตรวจสอบ ถึง
ฟังก์ชันเหล่านั้น ขีดจำกัดที่แตกต่างกัน (จำกัดมากขึ้น) เมื่อเทียบกับฟังก์ชัน
สามารถใช้อินไลน์ที่ประกาศได้ ค่าเริ่มต้นคือ 40

ฟังก์ชันขนาดใหญ่ innss
ขีดจำกัดที่ระบุฟังก์ชันขนาดใหญ่จริงๆ สำหรับฟังก์ชันที่เกินขีดจำกัดนี้
หลังจาก inlining, inlining จะถูก จำกัด โดย --พารามิเตอร์ ฟังก์ชั่นขนาดใหญ่เติบโต. นี้
พารามิเตอร์มีประโยชน์ในเบื้องต้นเพื่อหลีกเลี่ยงเวลาในการรวบรวมที่รุนแรงซึ่งเกิดจากการไม่
อัลกอริธึมเชิงเส้นที่ใช้โดยส่วนหลัง ค่าเริ่มต้นคือ 2700

ฟังก์ชั่นขนาดใหญ่เติบโต
ระบุการเติบโตสูงสุดของฟังก์ชันขนาดใหญ่ที่เกิดจากการอินไลน์เป็นเปอร์เซ็นต์ NS
ค่าเริ่มต้นคือ 100 ซึ่งจำกัดการเติบโตของฟังก์ชันขนาดใหญ่เป็น 2.0 เท่าของต้นฉบับ
ขนาด.

หน่วยใหญ่-insns
ขีดจำกัดที่ระบุหน่วยการแปลขนาดใหญ่ การเจริญเติบโตที่เกิดจาก inlining ของหน่วย
เกินขีดจำกัดนี้จำกัดโดย --พารามิเตอร์ อินไลน์หน่วยเติบโต. สำหรับยูนิตขนาดเล็ก
นี่อาจจะแน่นเกินไป (พิจารณายูนิตที่ประกอบด้วยฟังก์ชัน A ที่อินไลน์และ
B ที่เรียก A สามครั้ง ถ้า B มีขนาดเล็กเมื่อเทียบกับ A การเติบโตของหน่วย
คือ 300\% และการวางแนวดังกล่าวก็สมเหตุสมผลมาก สำหรับหน่วยขนาดใหญ่มากประกอบด้วย
ฟังก์ชัน inlineable ขนาดเล็ก แต่จำเป็นต้องมีขีดจำกัดการเติบโตของหน่วยโดยรวมเพื่อ
หลีกเลี่ยงการระเบิดขนาดโค้ดแบบทวีคูณ ดังนั้นสำหรับหน่วยที่เล็กกว่า ขนาดคือ
เพิ่มขึ้น --พารามิเตอร์ หน่วยใหญ่-insns ก่อนสมัคร --พารามิเตอร์ อินไลน์หน่วยเติบโต.
ค่าเริ่มต้นคือ 10000

อินไลน์หน่วยเติบโต
ระบุการเติบโตโดยรวมสูงสุดของหน่วยการคอมไพล์ที่เกิดจากการอินไลน์ NS
ค่าเริ่มต้นคือ 30 ซึ่งจำกัดการเติบโตของหน่วยไว้ที่ 1.3 เท่าของขนาดดั้งเดิม

ipcp-หน่วยเติบโต
ระบุการเติบโตโดยรวมสูงสุดของหน่วยการรวบรวมที่เกิดจากระหว่างขั้นตอน
การขยายพันธุ์อย่างต่อเนื่อง ค่าเริ่มต้นคือ 10 ซึ่งจำกัดการเติบโตของหน่วยเป็น 1.1
เท่าของขนาดเดิม

ใหญ่-stack-frame
ขีดจำกัดที่ระบุเฟรมสแต็กขนาดใหญ่ ในขณะที่อินไลน์อัลกอริทึมกำลังพยายาม
เพื่อไม่ให้เกินขีดจำกัดนี้มากเกินไป ค่าเริ่มต้นคือ 256 ไบต์

ใหญ่-stack-กรอบ-เติบโต
ระบุการเติบโตสูงสุดของสแต็กเฟรมขนาดใหญ่ที่เกิดจากการอินไลน์เป็นเปอร์เซ็นต์
ค่าเริ่มต้นคือ 1000 ซึ่งจำกัดการเติบโตของสแต็กเฟรมขนาดใหญ่ที่ 11 เท่า
ขนาดเดิม

max-inline-insns-แบบเรียกซ้ำ
max-inline-insns-recursive-auto
ระบุจำนวนสูงสุดของคำสั่ง out-of-line copy of self recursive inline
ฟังก์ชั่นสามารถเติบโตได้โดยการทำ inlining แบบเรียกซ้ำ

สำหรับฟังก์ชันที่ประกาศในบรรทัด --พารามิเตอร์ max-inline-insns-แบบเรียกซ้ำ ถูกนำเข้าสู่
บัญชีผู้ใช้. สำหรับฟังก์ชันที่ไม่ได้ประกาศแบบอินไลน์ อินไลน์แบบเรียกซ้ำจะเกิดขึ้นก็ต่อเมื่อ
-finline-ฟังก์ชั่น (รวมอยู่ใน -O3) เปิดใช้งานและ --พารามิเตอร์ max-inline-inns-
เรียกซ้ำอัตโนมัติ ถูกนำมาใช้. ค่าเริ่มต้นคือ 450

max-inline-recursive-ความลึก
max-inline-recursive-deep-auto . สูงสุด
ระบุความลึกของการเรียกซ้ำสูงสุดที่ใช้โดยอินไลน์แบบเรียกซ้ำ

สำหรับฟังก์ชันที่ประกาศในบรรทัด --พารามิเตอร์ max-inline-recursive-ความลึก ถูกนำเข้าสู่
บัญชีผู้ใช้. สำหรับฟังก์ชันที่ไม่ได้ประกาศแบบอินไลน์ อินไลน์แบบเรียกซ้ำจะเกิดขึ้นก็ต่อเมื่อ
-finline-ฟังก์ชั่น (รวมอยู่ใน -O3) เปิดใช้งานและ --พารามิเตอร์ สูงสุดแบบอินไลน์แบบเรียกซ้ำ-
ความลึกอัตโนมัติ ถูกนำมาใช้. ค่าเริ่มต้นคือ 8

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

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

หน้าแรก
ระบุการเจริญเติบโตที่อินไลเนอร์ต้นสามารถทำได้ มีผลเพิ่มปริมาณของ
inlining สำหรับรหัสที่มีบทลงโทษที่เป็นนามธรรมมาก ค่าเริ่มต้นคือ 10

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

comdat-sharing-น่าจะเป็น
comdat-sharing-น่าจะเป็น
ความน่าจะเป็น (เป็นเปอร์เซ็นต์) ที่ฟังก์ชันอินไลน์ C++ พร้อมการมองเห็น comdat จะเป็น
ใช้ร่วมกันในหน่วยการคอมไพล์หลายหน่วย ค่าเริ่มต้นคือ 20

min-vect-loop-bound
จำนวนการวนซ้ำขั้นต่ำที่ลูปจะไม่ได้รับเวกเตอร์เมื่อ
-ftree- vectorize ถูกนำมาใช้. จำนวนการวนซ้ำหลังจาก vectorization จำเป็นต้อง
มากกว่าค่าที่ระบุโดยตัวเลือกนี้เพื่ออนุญาตให้ใช้เวกเตอร์ NS
ค่าเริ่มต้นคือ 0

gcse-ต้นทุนระยะทางอัตราส่วน
ตัวคูณมาตราส่วนในการคำนวณระยะทางสูงสุดนิพจน์สามารถย้ายโดย
การเพิ่มประสิทธิภาพ GCSE ปัจจุบันนี้รองรับเฉพาะในรหัส hoisting pass
ยิ่งอัตราส่วนมากเท่าไร การรอกโค้ดก็จะยิ่งซับซ้อนมากขึ้นเท่านั้น
นิพจน์ กล่าวคือ นิพจน์ที่มีราคาน้อยกว่า gcse-ไม่จำกัด-
ราคา. การระบุ 0 จะปิดใช้งานการยกนิพจน์ทั่วไป ค่าเริ่มต้น
ค่าคือ 10

gcse-ไม่จำกัดค่าใช้จ่าย
ต้นทุน วัดโดยคร่าว ๆ เป็นต้นทุนของคำสั่งเครื่องเดียวทั่วไป ที่
ซึ่งการเพิ่มประสิทธิภาพ GCSE จะไม่จำกัดระยะทางที่นิพจน์สามารถเดินทางได้
ปัจจุบันนี้รองรับเฉพาะในรหัส hoisting pass ค่าใช้จ่ายที่น้อยกว่า,
การยกโค้ดที่ก้าวร้าวมากขึ้นจะเป็น การระบุ 0 จะอนุญาตทั้งหมด
สำนวนเพื่อเดินทางในระยะทางที่ไม่จำกัด ค่าเริ่มต้นคือ 3

สูงสุดรอกความลึก
ความลึกของการค้นหาในทรี dominator สำหรับนิพจน์ที่จะยก มันถูกใช้
เพื่อหลีกเลี่ยงพฤติกรรมกำลังสองในอัลกอริทึมการชักรอก ค่า 0 จะหลีกเลี่ยง
จำกัดการค้นหา แต่อาจทำให้การรวบรวมฟังก์ชันขนาดใหญ่ช้าลง ค่าเริ่มต้น
ค่าคือ 30

การเปรียบเทียบหางรวมสูงสุด
จำนวน bb ที่ใกล้เคียงกันสูงสุดเพื่อเปรียบเทียบ bb ด้วย นี้ใช้เพื่อหลีกเลี่ยง
พฤติกรรมกำลังสองในการรวมหางต้นไม้ ค่าเริ่มต้นคือ 10

max-tail-merge-วนซ้ำ
จำนวนครั้งสูงสุดของการส่งผ่านฟังก์ชัน ใช้เพื่อ
จำกัดเวลาการรวบรวมในการรวมหางต้นไม้ ค่าเริ่มต้นคือ 2

max-unrolled-insns
จำนวนคำสั่งสูงสุดที่ลูปควรมีหากลูปนั้นคือ
unrolled และถ้า loop ถูก unrolled มันจะกำหนดจำนวน loop code
ถูกคลี่ออก

ค่าเฉลี่ยสูงสุดที่ไม่ได้ลงทะเบียน
จำนวนคำสั่งสูงสุดที่ลำเอียงโดยความน่าจะเป็นของการดำเนินการนั้น
ลูปควรมีถ้าลูปนั้นถูกคลี่ออก และถ้าลูปถูกคลี่ออก it
กำหนดจำนวนครั้งที่คลายโค้ดวนซ้ำ

เวลาสูงสุดที่คลายออก
จำนวนสูงสุดของการคลี่คลายลูปเดียว

max-ปอกเปลือก inns
จำนวนคำสั่งสูงสุดที่ลูปควรมีหากลูปนั้นถูกลอกออก
และถ้าลูปถูกลอก มันจะกำหนดจำนวนครั้งที่ลอกโค้ดของลูป

เวลาลอกสูงสุด
จำนวนสูงสุดของการปอกของวงเดียว

max-สมบูรณ์-ปอกเปลือก inns
จำนวนสูงสุดของ inns ของการปอกอย่างสมบูรณ์

max-completely-peel-times สูงสุด
จำนวนรอบสูงสุดของการวนซ้ำเพื่อให้เหมาะสำหรับการลอกแบบสมบูรณ์

max-completely-peel-loop-nest-ความลึก
ความลึกสูงสุดของรังแบบวนซ้ำเหมาะสำหรับการลอกแบบสมบูรณ์

สูงสุด unswitch-insns
จำนวนครั้งสูงสุดของการวนซ้ำที่ไม่ได้สลับ

max-unswitch-ระดับ
จำนวนสาขาสูงสุดที่ไม่ได้เปลี่ยนในลูปเดียว

ราคาแพง
ต้นทุนขั้นต่ำของนิพจน์ราคาแพงในการเคลื่อนที่แบบวนซ้ำ

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

iv-max-พิจารณาใช้
การปรับให้เหมาะสมตัวแปรเหนี่ยวนำให้ขึ้นในลูปที่มีการเหนี่ยวนำมากขึ้น
การใช้ตัวแปร

iv-always-prune-cand-set-bound
หากจำนวนผู้สมัครในชุดน้อยกว่าค่านี้ เรามักจะพยายาม
ลบ ivs ที่ไม่จำเป็นออกจากชุดในระหว่างการปรับให้เหมาะสมเมื่อมีการเพิ่ม iv ใหม่
ไปที่ชุด

scev-max-expr-ขนาด
ผูกพันกับขนาดของนิพจน์ที่ใช้ในเครื่องวิเคราะห์วิวัฒนาการสเกลาร์ ใหญ่
นิพจน์ทำให้เครื่องวิเคราะห์ช้าลง

scev-max-expr-ความซับซ้อน
ผูกพันกับความซับซ้อนของนิพจน์ในตัววิเคราะห์สเกลาร์วิวัฒนาการ
นิพจน์ที่ซับซ้อนทำให้ตัววิเคราะห์ช้าลง

โอเมก้า-แม็กซ์-วาร์
จำนวนตัวแปรสูงสุดในระบบข้อจำกัดโอเมก้า ค่าเริ่มต้น
คือ 128

Omega-max-geqs
จำนวนความไม่เท่าเทียมกันสูงสุดในระบบข้อจำกัดโอเมก้า ค่าเริ่มต้น
ค่าคือ 256

Omega-max-eqs
จำนวนสูงสุดของความเท่าเทียมกันในระบบข้อจำกัดโอเมก้า ค่าเริ่มต้น
คือ 128

Omega-max-wild-cards
จำนวนตัวแปรไวด์การ์ดสูงสุดที่ตัวแก้ปัญหาโอเมก้าจะทำได้
แทรก. ค่าเริ่มต้นคือ 18

Omega-hash-table-size
ขนาดของตารางแฮชในโปรแกรมแก้ปัญหาโอเมก้า ค่าเริ่มต้นคือ 550

โอเมก้า-แม็กซ์-คีย์
จำนวนคีย์สูงสุดที่ใช้โดยโปรแกรมแก้ปัญหา Omega ค่าเริ่มต้นคือ 500

โอเมก้า-กำจัด-ซ้ำซ้อน-ข้อจำกัด
เมื่อตั้งค่าเป็น 1 ให้ใช้วิธีการที่มีราคาแพงเพื่อขจัดข้อจำกัดที่ซ้ำซ้อนทั้งหมด NS
ค่าเริ่มต้นคือ 0

vect-max-version-for-align-checks
จำนวนสูงสุดของการตรวจสอบรันไทม์ที่สามารถทำได้เมื่อทำการวนซ้ำ
การกำหนดเวอร์ชันสำหรับการจัดตำแหน่งใน vectorizer ดูตัวเลือก ftree-vect-loop-version
สำหรับข้อมูลเพิ่มเติม

vect-max-version-for-alias-checks
จำนวนสูงสุดของการตรวจสอบรันไทม์ที่สามารถทำได้เมื่อทำการวนซ้ำ
การกำหนดเวอร์ชันสำหรับนามแฝงใน vectorizer ดูตัวเลือก ftree-vect-loop-version สำหรับ
ข้อมูลมากกว่านี้.

การวนซ้ำสูงสุดเพื่อติดตาม
จำนวนสูงสุดของการวนซ้ำของอัลกอริธึมกำลังเดรัจฉานสำหรับการวิเคราะห์
ของการวนซ้ำ # ครั้งพยายามประเมิน

ร้อน-bb-นับเศษส่วน
เลือกเศษส่วนของจำนวนครั้งสูงสุดของบล็อกพื้นฐานในโปรแกรม
บล็อกพื้นฐานต้องได้รับการพิจารณาว่าร้อน

ร้อน-bb-ความถี่-เศษส่วน
เลือกเศษของความถี่บล็อกการเข้าของการดำเนินการของบล็อกพื้นฐานใน
ฟังก์ชั่นที่ได้รับจากบล็อกพื้นฐานจะต้องได้รับการพิจารณาว่าร้อน

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

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

จัดวนวนซ้ำ
การวนซ้ำที่คาดว่าจะวนซ้ำอย่างน้อยจำนวนการวนซ้ำที่เลือกจะได้รับ
ชิด

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

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

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

tracer-min-สาขา-อัตราส่วน
หยุดการเติบโตแบบย้อนกลับเมื่อความน่าจะเป็นย้อนกลับของขอบที่ดีที่สุดน้อยกว่านี้
เกณฑ์ (เป็นเปอร์เซ็นต์)

tracer-min-สาขา-อัตราส่วน
ติดตามนาทีสาขาอัตราส่วนข้อเสนอแนะ
หยุดการเติบโตไปข้างหน้าหากขอบที่ดีที่สุดมีความเป็นไปได้ต่ำกว่านี้
ธรณีประตู

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

max-cse-เส้นทางความยาว
จำนวนบล็อกพื้นฐานสูงสุดบนพาธที่ cse พิจารณา ค่าเริ่มต้นคือ 10

สูงสุด-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-นาที-
ขนาดใหญ่ เป็นศูนย์ทำให้เกิดการรวบรวมเต็มรูปแบบในทุกโอกาส นี่คือ
ช้ามาก แต่อาจมีประโยชน์สำหรับการดีบัก

ggc-min-heapsize
ขนาดขั้นต่ำของกองขยะก่อนที่จะเริ่มรบกวนการรวบรวม
ขยะ. คอลเล็กชันแรกเกิดขึ้นหลังจากฮีปขยายโดย ggc-min-ขยาย%
เกิน ggc-min-heapsize. อีกครั้ง การปรับแต่งนี้อาจช่วยเพิ่มความเร็วในการรวบรวมและ
ไม่มีผลกับการสร้างโค้ด

ค่าดีฟอลต์คือ RAM/8, RLIMIT_RSS ที่เล็กกว่าหรือขีดจำกัดที่พยายามทำให้แน่ใจว่า
ที่ RLIMIT_DATA หรือ RLIMIT_AS ไม่เกิน แต่มีขอบล่างที่4096
(สี่เมกะไบต์) และขอบบนที่ 131072 (128 เมกะไบต์) หาก GCC ไม่สามารถทำได้
ในการคำนวณ RAM บนแพลตฟอร์มใดแพลตฟอร์มหนึ่ง จะใช้ขอบเขตล่าง การตั้งค่านี้
พารามิเตอร์ขนาดใหญ่มากปิดการใช้งานการรวบรวมขยะอย่างมีประสิทธิภาพ การตั้งค่านี้
พารามิเตอร์และ ggc-min-ขยาย เป็นศูนย์ทำให้คอลเลกชันเต็มรูปแบบเกิดขึ้นที่ทุก ๆ
โอกาส

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

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

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

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

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

กำหนดภูมิภาคสูงสุดบล็อก
จำนวนบล็อกสูงสุดในภูมิภาคที่จะพิจารณาสำหรับ interblock
การตั้งเวลา ค่าเริ่มต้นคือ 10

max-pipeline-region-blocks
จำนวนบล็อกสูงสุดในภูมิภาคที่จะพิจารณาสำหรับการวางท่อใน
ตัวกำหนดตารางเวลาที่เลือก ค่าเริ่มต้นคือ 15

กำหนดภูมิภาคสูงสุด
จำนวน insns สูงสุดในภูมิภาคที่จะพิจารณาสำหรับ interblock
การตั้งเวลา ค่าเริ่มต้นคือ 100

max-pipeline-region-insns
จำนวน insns สูงสุดในภูมิภาคที่จะพิจารณาสำหรับการวางท่อใน
ตัวกำหนดตารางเวลาที่เลือก ค่าเริ่มต้นคือ 200

min-spec-ปัญหา
ความน่าจะเป็นขั้นต่ำ (เป็นเปอร์เซ็นต์) ในการเข้าถึงบล็อกต้นทางสำหรับ interblock
กำหนดการเก็งกำไร ค่าเริ่มต้นคือ 40

กำหนดการขยายสูงสุด-ภูมิภาค-iters
จำนวนสูงสุดของการทำซ้ำผ่าน CFG เพื่อขยายภูมิภาค 0 - ปิดการใช้งาน
ส่วนขยายของภูมิภาค N - ทำซ้ำได้มากที่สุด N ค่าเริ่มต้นคือ 0

max-sched-insn-ความขัดแย้ง-ความล่าช้า
ความขัดแย้งสูงสุดล่าช้าสำหรับ insn เพื่อพิจารณาการเคลื่อนไหวเก็งกำไร
ค่าเริ่มต้นคือ 3

กำหนด-spec-prob-cutoff
ความน่าจะเป็นน้อยที่สุดของความสำเร็จในการเก็งกำไร (เป็นเปอร์เซ็นต์) ดังนั้นการเก็งกำไร
จะมีการกำหนดเวลา insn ค่าเริ่มต้นคือ 40

ตาราง-mem-จริง-dep-ต้นทุน
ระยะห่างน้อยที่สุด (ในรอบ CPU) ระหว่างการจัดเก็บและโหลดเป้าหมายหน่วยความจำเดียวกัน
สถานที่ ค่าเริ่มต้นคือ 1

selsched-max-lookahead
ขนาดสูงสุดของหน้าต่าง lookahead ของการจัดกำหนดการแบบเลือกสรร มันเป็นความลึก
ของการค้นหาคำแนะนำที่มีอยู่ ค่าเริ่มต้นคือ 50

selsched-max-sched-ครั้ง
จำนวนครั้งสูงสุดที่คำสั่งจะถูกกำหนดเวลาระหว่างการเลือก
การตั้งเวลา นี่คือการจำกัดจำนวนการวนซ้ำที่
คำสั่งอาจวางท่อ ค่าเริ่มต้นคือ 2

selsched-max-insns-to-เปลี่ยนชื่อ
จำนวนคำสั่งที่ดีที่สุดสูงสุดในรายการพร้อมที่พิจารณา
การเปลี่ยนชื่อในตัวกำหนดตารางเวลาที่เลือก ค่าเริ่มต้นคือ 2

SMS-นาที-sc
ค่าต่ำสุดของการนับสเตจที่ตัวจัดกำหนดการสวิงโมดูโลจะสร้าง NS
ค่าเริ่มต้นคือ 2

ค่าสูงสุดสุดท้าย rtl
ขนาดสูงสุดที่วัดเป็นจำนวน RTL ที่สามารถบันทึกได้ในนิพจน์
ในตัวรวมสำหรับการลงทะเบียนหลอกเป็นค่าที่ทราบล่าสุดของการลงทะเบียนนั้น NS
ค่าเริ่มต้นคือ 10000

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

การทำแผนที่เสมือนขั้นต่ำ
ระบุจำนวนขั้นต่ำของการแมปเสมือนในตัวอัปเดต SSA ที่เพิ่มขึ้น
ที่ควรลงทะเบียนเพื่อทริกเกอร์ฮิวริสติกการแมปเสมือนที่กำหนดโดย
อัตราส่วนการแมปเสมือน ค่าเริ่มต้นคือ 100

อัตราส่วนการแมปเสมือน
หากจำนวนการแมปเสมือนเป็นอัตราส่วนการแมปเสมือนมากกว่าจำนวน
ของสัญลักษณ์เสมือนที่จะอัปเดต จากนั้นตัวอัปเดต SSA ที่เพิ่มขึ้นจะเปลี่ยนเป็น a
อัปเดตเต็มรูปแบบสำหรับสัญลักษณ์เหล่านั้น อัตราส่วนเริ่มต้นคือ 3

ssp-บัฟเฟอร์-ขนาด
ขนาดต่ำสุดของบัฟเฟอร์ (เช่นอาร์เรย์) ที่จะได้รับ stack smashing
ป้องกันเมื่อ -fstack-ป้องกัน ถูกนำมาใช้.

ค่าเริ่มต้นนี้ก่อน Ubuntu 10.10 คือ "8" ปัจจุบันเป็น "4" เพื่อเพิ่ม
จำนวนฟังก์ชันที่ป้องกันโดยตัวป้องกันปล่อง

max-jump-thread-duplication-stmts
จำนวนคำสั่งสูงสุดที่อนุญาตในบล็อกที่ต้องทำซ้ำเมื่อ
กระโดดเกลียว

ฟิลด์สูงสุดสำหรับฟิลด์ที่มีความละเอียดอ่อน
จำนวนฟิลด์สูงสุดในโครงสร้างที่เราจะปฏิบัติต่อฟิลด์ที่มีความละเอียดอ่อน
ระหว่างการวิเคราะห์ตัวชี้ ค่าเริ่มต้นคือศูนย์สำหรับ -O0 และ -O1 และ 100 สำหรับ -Os
-O2 และ -O3

การดึงข้อมูลล่วงหน้า-แฝง
ประมาณการจำนวนคำสั่งเฉลี่ยที่ดำเนินการก่อนดึงข้อมูลล่วงหน้า
เสร็จสิ้น ระยะทางที่เราเรียกล่วงหน้านั้นเป็นสัดส่วนกับค่าคงที่นี้
การเพิ่มจำนวนนี้อาจนำไปสู่การดึงสตรีมล่วงหน้าน้อยลง (ดู
พร้อมกัน-prefetches).

พร้อมกัน-prefetches
จำนวนการดึงข้อมูลล่วงหน้าสูงสุดที่สามารถเรียกใช้ได้พร้อมกัน

l1-cache-line-size
ขนาดของบรรทัดแคชในแคช L1 หน่วยเป็นไบต์

l1-แคชขนาด
ขนาดของแคช L1 ในหน่วยกิโลไบต์

l2-แคชขนาด
ขนาดของแคช L2 ในหน่วยกิโลไบต์

min-insn-to-prefetch-อัตราส่วน
อัตราส่วนขั้นต่ำระหว่างจำนวนคำสั่งและจำนวนการดึงข้อมูลล่วงหน้า
เพื่อเปิดใช้งานการดึงข้อมูลล่วงหน้าในลูป

prefetch-min-insn-to-mem-อัตราส่วน
อัตราส่วนขั้นต่ำระหว่างจำนวนคำสั่งและจำนวนหน่วยความจำ
การอ้างอิงเพื่อเปิดใช้งานการดึงข้อมูลล่วงหน้าในลูป

ใช้ประเภทบัญญัติ
คอมไพเลอร์ควรใช้ระบบประเภท "บัญญัติ" หรือไม่ โดยค่าเริ่มต้น this
ควรเป็น 1 เสมอ ซึ่งใช้กลไกภายในที่มีประสิทธิภาพมากขึ้นในการเปรียบเทียบ
ประเภท C++ และ Objective-C++ อย่างไรก็ตาม หากข้อบกพร่องในระบบประเภทบัญญัติคือ
ทำให้การรวบรวมล้มเหลว ตั้งค่านี้เป็น 0 เพื่อปิดใช้งานประเภทบัญญัติ

เปลี่ยน-แปลง-สูงสุด-สาขา-อัตราส่วน
การแปลงการเริ่มต้นสวิตช์จะปฏิเสธที่จะสร้างอาร์เรย์ที่ใหญ่กว่า
เปลี่ยน-แปลง-สูงสุด-สาขา-อัตราส่วน คูณด้วยจำนวนสาขาในสวิตช์

ความยาวสูงสุดบางส่วนต่อต้าน
ความยาวสูงสุดของชุดป้องกันบางส่วนที่คำนวณระหว่างต้นไม้บางส่วน
การเพิ่มประสิทธิภาพการกำจัดความซ้ำซ้อน (-ftree-ก่อน) เมื่อเพิ่มประสิทธิภาพที่ -O3 ขึ้นไป
สำหรับซอร์สโค้ดบางประเภท การกำจัดความซ้ำซ้อนที่ปรับปรุงแล้ว
การปรับให้เหมาะสมอาจหนีไป ใช้หน่วยความจำทั้งหมดที่มีอยู่บนโฮสต์
เครื่องจักร. พารามิเตอร์นี้กำหนดขีดจำกัดความยาวของชุดที่คำนวณ
ซึ่งป้องกันพฤติกรรมหลบหนี การตั้งค่าเป็น 0 สำหรับพารามิเตอร์นี้จะ
อนุญาตให้กำหนดความยาวได้ไม่จำกัด

sccvn-สูงสุด-scc-ขนาด
ขนาดสูงสุดของส่วนประกอบที่เชื่อมต่ออย่างแน่นหนา (SCC) ระหว่างการประมวลผล SCCVN ถ้า
ถึงขีดจำกัดนี้แล้ว การประมวลผล SCCVN สำหรับฟังก์ชันทั้งหมดจะไม่เสร็จสิ้นและ
การเพิ่มประสิทธิภาพขึ้นอยู่กับว่ามันจะถูกปิดการใช้งาน ขนาด SCC สูงสุดเริ่มต้นคือ
10000.

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

ira-max-conflict-table-size.php
แม้ว่า IRA จะใช้อัลกอริธึมที่ซับซ้อนในการบีบอัดตารางข้อขัดแย้ง
ตารางยังคงต้องใช้หน่วยความจำมากเกินไปสำหรับฟังก์ชันขนาดใหญ่ ถ้า
ตารางข้อขัดแย้งสำหรับฟังก์ชันอาจมีมากกว่าขนาดในหน่วย MB ที่กำหนดโดยสิ่งนี้
พารามิเตอร์ register allocator ใช้เร็วกว่า ง่ายกว่า และต่ำกว่า
อัลกอริธึมคุณภาพที่ไม่ต้องสร้างตารางข้อขัดแย้งการลงทะเบียนหลอก
ค่าเริ่มต้นของพารามิเตอร์คือ 2000

ira-loop-reserved-regs
IRA สามารถใช้เพื่อประเมินแรงกดดันการลงทะเบียนที่แม่นยำยิ่งขึ้นในลูปสำหรับการตัดสินใจ
เพื่อย้ายค่าคงที่ของลูป (ดู -O3). จำนวนการลงทะเบียนที่สงวนไว้สำหรับ
วัตถุประสงค์อื่น ๆ ถูกกำหนดโดยพารามิเตอร์นี้ ค่าเริ่มต้นของ
พารามิเตอร์คือ 2 ซึ่งเป็นจำนวนรีจิสเตอร์ขั้นต่ำที่โดยทั่วไปต้องการ
คำแนะนำ. ค่านี้เป็นค่าที่ดีที่สุดจากการทดลองจำนวนมาก

วนซ้ำไม่แปรผันสูงสุด bbs ในวง
การเคลื่อนที่แบบวนซ้ำอาจมีราคาแพงมาก ทั้งในเวลารวบรวมและใน
จำนวนหน่วยความจำเวลาคอมไพล์ที่จำเป็น พร้อมลูปขนาดใหญ่มาก วนซ้ำกับ more
บล็อกพื้นฐานที่มากกว่าพารามิเตอร์นี้จะไม่มีการเพิ่มประสิทธิภาพการเคลื่อนที่แบบวนซ้ำ
ดำเนินการกับพวกเขา ค่าเริ่มต้นของพารามิเตอร์คือ 1000 สำหรับ -O1 และ 10000
สำหรับ -O2 ขึ้นไป

วนสูงสุด datarefs สำหรับ datadeps
การสร้าง data dapendencies นั้นมีราคาแพงสำหรับลูปที่มีขนาดใหญ่มาก พารามิเตอร์นี้
จำกัดจำนวนการอ้างอิงข้อมูลในลูปที่พิจารณาสำหรับ data
การวิเคราะห์การพึ่งพาอาศัยกัน ลูปขนาดใหญ่เหล่านี้จะไม่ถูกจัดการโดย
การเพิ่มประสิทธิภาพโดยใช้การพึ่งพาข้อมูลแบบวนซ้ำ ค่าเริ่มต้นคือ 1000

ขนาดสูงสุด vartrack
ตั้งค่าจำนวนช่องตารางแฮชสูงสุดที่จะใช้ระหว่างกระแสข้อมูลการติดตามตัวแปร
การวิเคราะห์ฟังก์ชันใด ๆ หากเกินขีดจำกัดนี้ด้วยการติดตามตัวแปรที่
เปิดใช้งานการมอบหมาย การวิเคราะห์สำหรับฟังก์ชันนั้นจะถูกลองใหม่โดยไม่มีหลังจาก
ลบ debug insns ทั้งหมดออกจากฟังก์ชัน หากเกินขีดจำกัดแม้ไม่มี
แก้ปัญหา insns การวิเคราะห์การติดตาม var ถูกปิดใช้งานอย่างสมบูรณ์สำหรับฟังก์ชัน
การตั้งค่าพารามิเตอร์เป็นศูนย์ทำให้ไม่จำกัด

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

min-nondebug-insn-uid.php
ใช้ uid เริ่มต้นที่พารามิเตอร์นี้สำหรับ nondebug insns ช่วงด้านล่าง
พารามิเตอร์ถูกสงวนไว้เฉพาะสำหรับการดีบัก insns ที่สร้างโดย
-fvar-การติดตามการมอบหมายแต่ debug insns อาจได้รับ uid (ไม่ทับซ้อนกัน) ด้านบน
ถ้าช่วงที่จองไว้หมด

ipa-sra-ptr-ปัจจัยการเจริญเติบโต
IPA-SRA จะแทนที่ตัวชี้เป็นการรวมด้วยพารามิเตอร์ใหม่อย่างน้อยหนึ่งรายการ
เฉพาะเมื่อขนาดสะสมน้อยกว่าหรือเท่ากับ ipa-sra-ptr-ปัจจัยการเจริญเติบโต
คูณขนาดของพารามิเตอร์ตัวชี้เดิม

tm-max-รวมขนาด
เมื่อทำสำเนาตัวแปร thread-local ในธุรกรรม พารามิเตอร์นี้
ระบุขนาดเป็นไบต์หลังจากที่ตัวแปรจะถูกบันทึกด้วยการบันทึก
ทำงานตรงข้ามกับคู่ของลำดับรหัสบันทึก/กู้คืน ตัวเลือกนี้เท่านั้น
ใช้เมื่อใช้ -fgnu-tm.

แกรไฟต์-max-nb-scop-params
เพื่อหลีกเลี่ยงเอฟเฟกต์เลขชี้กำลังในการแปลงลูปกราไฟท์ จำนวน
พารามิเตอร์ในส่วนควบคุมคงที่ (SCoP) ถูกผูกไว้ ค่าเริ่มต้นคือ 10
พารามิเตอร์ ตัวแปรที่ไม่ทราบค่า ณ เวลารวบรวมและกำหนด
นอก SCoP เป็นพารามิเตอร์ของ SCoP

กราไฟท์-max-bbs-per-function
เพื่อหลีกเลี่ยงเอฟเฟกต์เลขชี้กำลังในการตรวจจับ SCoP ขนาดของฟังก์ชัน
วิเคราะห์โดยกราไฟท์มีขอบเขต ค่าเริ่มต้นคือ 100 บล็อกพื้นฐาน

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

ipa-cp-value-list-size
IPA-CP พยายามติดตามค่าและประเภทที่เป็นไปได้ทั้งหมดที่ส่งผ่านไปยังฟังก์ชันของ
พารามิเตอร์เพื่อเผยแพร่และดำเนินการ devirtualization ipa-cp-ค่า-
รายการขนาด คือจำนวนค่าและประเภทสูงสุดที่จัดเก็บต่อหนึ่งรูปแบบ
พารามิเตอร์ของฟังก์ชัน

lto-พาร์ทิชัน
ระบุจำนวนพาร์ติชันที่ต้องการที่สร้างขึ้นในระหว่างการคอมไพล์ WHOPR NS
จำนวนพาร์ติชันควรเกินจำนวน CPU ที่ใช้ในการคอมไพล์ NS
ค่าเริ่มต้นคือ 32

lto-minpartition
ขนาดของพาร์ติชั่นขั้นต่ำสำหรับ WHOPR (ในคำแนะนำโดยประมาณ) สิ่งนี้จะช่วยป้องกัน
ค่าใช้จ่ายในการแยกโปรแกรมขนาดเล็กมากออกเป็นพาร์ติชั่นมากเกินไป

cxx-max-namespaces-for-diagnostic-help
จำนวนสูงสุดของเนมสเปซเพื่อขอคำแนะนำเมื่อค้นหาชื่อ C++
ล้มเหลวสำหรับตัวระบุ ค่าเริ่มต้นคือ 1000

Sink-ความถี่เกณฑ์
ความถี่การดำเนินการสัมพัทธ์สูงสุด (เป็นเปอร์เซ็นต์) ของบล็อกเป้าหมาย
สัมพันธ์กับบล็อกเดิมของคำสั่งเพื่อให้คำสั่งจมของa
คำแถลง. ตัวเลขที่มากขึ้นส่งผลให้เกิดการจมคำสั่งที่ก้าวร้าวมากขึ้น NS
ค่าเริ่มต้นคือ 75 มีการปรับค่าบวกเล็กน้อยสำหรับคำสั่งที่มี
ตัวถูกดำเนินการหน่วยความจำเนื่องจากสิ่งเหล่านี้ให้ผลกำไรมากขึ้น

max-stores-to-อ่างล้างจาน
จำนวนคู่ร้านค้าแบบมีเงื่อนไขสูงสุดที่สามารถจมได้ ตั้งค่าเป็น 0 ถ้า
vectorization อย่างใดอย่างหนึ่ง (-ftree- vectorize) หรือ if-conversion (-ftree-วน-ถ้า-แปลง)
ถูกปิดใช้งาน. ค่าเริ่มต้นคือ 2

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

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

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

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

กรณีค่าเกณฑ์
จำนวนค่าต่างๆ ที่น้อยที่สุดซึ่งควรใช้ jump-table
แทนที่จะเป็นต้นไม้ที่มีกิ่งก้านตามเงื่อนไข หากค่าเป็น 0 ให้ใช้ค่าเริ่มต้นสำหรับ
เครื่องจักร. ค่าเริ่มต้นคือ 0

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

Options การควบคุม ตัวประมวลผลล่วงหน้า
ตัวเลือกเหล่านี้ควบคุมตัวประมวลผลล่วงหน้า C ซึ่งทำงานบนไฟล์ต้นฉบับ C แต่ละไฟล์ก่อนไฟล์จริง
การรวบรวม.

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

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

-Xpreprocessor ตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกสำหรับตัวประมวลผลล่วงหน้า คุณสามารถใช้สิ่งนี้เพื่อจัดหาระบบ-
ตัวเลือกตัวประมวลผลล่วงหน้าเฉพาะที่ GCC ไม่ทราบวิธีรับรู้

หากคุณต้องการส่งตัวเลือกที่มีการโต้แย้ง คุณต้องใช้ -Xpreprocessor
สองครั้ง หนึ่งครั้งสำหรับตัวเลือก และอีกครั้งสำหรับการโต้แย้ง

-D ชื่อ
กำหนดล่วงหน้า ชื่อ เป็นมาโครที่มีคำจำกัดความ 1

-D ชื่อ=คำนิยาม
เนื้อหาของ คำนิยาม ถูก tokenized และประมวลผลราวกับว่ามันปรากฏขึ้นระหว่าง
การแปลขั้นตอนที่สามในa #กำหนด คำสั่ง โดยเฉพาะคำนิยามจะเป็น
ตัดทอนด้วยอักขระขึ้นบรรทัดใหม่แบบฝัง

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

หากคุณต้องการกำหนดมาโครที่เหมือนฟังก์ชันบนบรรทัดคำสั่ง ให้เขียนอาร์กิวเมนต์ของมัน
รายการที่มีวงเล็บล้อมรอบก่อนเครื่องหมายเท่ากับ (ถ้ามี) วงเล็บคือ
มีความหมายกับเชลล์ส่วนใหญ่ ดังนั้น คุณจะต้องอ้างอิงตัวเลือก กับ sh และ csh,
-NS'ชื่อ(อาร์กิว...)=คำนิยาม' โรงงาน

-D และ -U ตัวเลือกจะได้รับการประมวลผลตามลำดับที่ได้รับบนบรรทัดคำสั่ง ทั้งหมด
-ไอมาครอส ไฟล์ และ - รวม ไฟล์ ตัวเลือกจะถูกประมวลผลหลังจากทั้งหมด -D และ -U ตัวเลือก

-U ชื่อ
ยกเลิกคำจำกัดความก่อนหน้าของ ชื่อสร้างขึ้นในหรือจัดให้มี -D ตัวเลือก

-Undef
อย่ากำหนดมาโครเฉพาะระบบหรือเฉพาะ GCC ไว้ล่วงหน้า มาตรฐานที่กำหนดไว้ล่วงหน้า
มาโครยังคงกำหนดไว้

-I dir
เพิ่มไดเร็กทอรี dir ไปที่รายการไดเร็กทอรีที่จะค้นหาไฟล์ส่วนหัว
ไดเร็กทอรีที่ชื่อ -I จะถูกค้นหาก่อนที่ระบบมาตรฐานจะรวมไดเร็กทอรี
ถ้าไดเร็กทอรี dir เป็นระบบมาตรฐานรวมถึงไดเร็กทอรีตัวเลือกจะถูกละเว้นไปยัง
ตรวจสอบให้แน่ใจว่าลำดับการค้นหาเริ่มต้นสำหรับไดเร็กทอรีระบบและการปฏิบัติพิเศษ
ของส่วนหัวของระบบไม่แพ้ ถ้า dir ขึ้นต้นด้วย "=" จากนั้น "=" จะเป็น
แทนที่ด้วยคำนำหน้า sysroot; ดู --sysroot และ -isysroot.

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

-ผนัง
เปิดคำเตือนทางเลือกทั้งหมดที่ต้องการสำหรับรหัสปกติ ปัจจุบันนี้
is -ความคิดเห็น, -Wtrigraphs, -Wmulticar และคำเตือนเรื่องการเลื่อนจำนวนเต็มทำให้เกิด a
เปลี่ยนเครื่องหมายในนิพจน์ "#if" โปรดทราบว่าคำเตือนของตัวประมวลผลล่วงหน้าจำนวนมาก
จะเปิดไว้โดยค่าเริ่มต้นและไม่มีตัวเลือกให้ควบคุม

-ความคิดเห็น
-ความคิดเห็น
เตือนเมื่อใดก็ตามที่ความคิดเห็นเริ่มต้นลำดับ /* ปรากฏใน a /* แสดงความคิดเห็นหรือเมื่อใดก็ตามที่
แบ็กสแลช-ขึ้นบรรทัดใหม่ปรากฏใน a // ความคิดเห็น (ทั้งสองรูปแบบมีผลเหมือนกัน)

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

ตัวเลือกนี้มีความหมายโดย -ผนัง. ถ้า -ผนัง ไม่ได้รับ ตัวเลือกนี้ยังคงเปิดใช้งานอยู่
เว้นแต่จะเปิดใช้งาน trigraphs หากต้องการรับการแปลงไตรกราฟโดยไม่มีการเตือน แต่รับ
อื่น ๆ -ผนัง คำเตือน ใช้ -ไตรกราฟ -ผนัง -Wno-ไตรกราฟ.

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

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

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

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

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

#ถ้ากำหนด the_macro_causing_the_warning
#เอนดิฟ

-Wendif-ป้ายกำกับ
เตือนเมื่อใดก็ตามที่ an #อื่น หรือ #เอนดิฟ ตามด้วยข้อความ ซึ่งมักจะเกิดขึ้นใน
รหัสของแบบฟอร์ม

#ถ้า FOO
...
#อื่น FOO
...
#เอนดิฟ FOO

"FOO" ตัวที่สองและสามควรอยู่ในความคิดเห็น แต่มักไม่อยู่ในโปรแกรมรุ่นเก่า
คำเตือนนี้เปิดอยู่โดยค่าเริ่มต้น

- ผิดพลาด
ทำให้คำเตือนทั้งหมดเป็นข้อผิดพลาดยาก ซอร์สโค้ดที่ทริกเกอร์คำเตือนจะเป็น
ปฏิเสธ

-Wsystem-ส่วนหัว
ออกคำเตือนสำหรับรหัสในส่วนหัวของระบบ สิ่งเหล่านี้มักไม่ช่วยในการค้นหา
ข้อบกพร่องในรหัสของคุณจึงถูกระงับ หากคุณเป็นผู้รับผิดชอบระบบ
ห้องสมุดคุณอาจต้องการเห็นพวกเขา

-w ระงับคำเตือนทั้งหมด รวมถึงคำเตือนที่ GNU CPP ออกโดยค่าเริ่มต้น

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

-pedantic-ข้อผิดพลาด
ออกการวินิจฉัยที่จำเป็นทั้งหมด และทำให้การวินิจฉัยที่จำเป็นทั้งหมดกลายเป็นข้อผิดพลาด
ซึ่งรวมถึงการวินิจฉัยบังคับที่ GCC ออกโดยไม่มี -อวดดี แต่ถือว่า
คำเตือน

-M แทนที่จะส่งออกผลลัพธ์ของการประมวลผลล่วงหน้า ให้ส่งออกกฎที่เหมาะสมสำหรับ ทำ
อธิบายการขึ้นต่อกันของไฟล์ต้นฉบับหลัก ตัวประมวลผลล่วงหน้าส่งออกหนึ่ง
ทำ กฎที่มีชื่อไฟล์อ็อบเจ็กต์สำหรับไฟล์ต้นทาง ทวิภาค และชื่อ
ของไฟล์ที่รวมไว้ทั้งหมด รวมทั้งไฟล์ที่มาจาก - รวม or -ไอมาครอส คำสั่ง
ตัวเลือกบรรทัด

เว้นแต่ระบุไว้อย่างชัดเจน (ด้วย -มท or -เอ็มคิว) ชื่อไฟล์อ็อบเจ็กต์ประกอบด้วย
ชื่อของไฟล์ต้นฉบับที่มีส่วนต่อท้ายใดๆ แทนที่ด้วยส่วนต่อท้ายของไฟล์อ็อบเจ็กต์และด้วย any
นำส่วนไดเร็กทอรีชั้นนำออก หากมีไฟล์รวมอยู่หลายไฟล์ กฎก็คือ
แบ่งออกเป็นหลายบรรทัดโดยใช้ \-ขึ้นบรรทัดใหม่ กฎไม่มีคำสั่ง

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

ที่ผ่านไป -M แก่คนขับ หมายความถึง -Eและระงับคำเตือนโดยปริยาย -w.

-มม Like -M แต่อย่าพูดถึงไฟล์ส่วนหัวที่พบในไดเร็กทอรีส่วนหัวของระบบ
หรือไฟล์ส่วนหัวที่รวมโดยตรงหรือโดยอ้อมจากส่วนหัวดังกล่าว

นี่หมายความว่าการเลือกวงเล็บมุมหรือเครื่องหมายคำพูดคู่ใน #include
คำสั่งไม่ได้กำหนดว่าส่วนหัวนั้นจะปรากฏใน -มม
เอาต์พุตการพึ่งพา นี่เป็นการเปลี่ยนแปลงเล็กน้อยในความหมายจาก GCC เวอร์ชัน 3.0 และ
ก่อน

-มฟล ไฟล์
เมื่อใช้กับ -M or -มมระบุไฟล์ที่จะเขียนการพึ่งพา ถ้าไม่ -มฟล
สวิตช์จะได้รับตัวประมวลผลล่วงหน้าส่งกฎไปยังที่เดียวกับที่มันจะส่ง
เอาต์พุตที่ประมวลผลล่วงหน้า

เมื่อใช้ร่วมกับตัวเลือกไดรเวอร์ -นพ or -MMD, -มฟล แทนที่การพึ่งพาเริ่มต้น
ไฟล์ที่ส่งออก

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

คุณลักษณะนี้ใช้ในการอัพเดต makefiles โดยอัตโนมัติ

-ส.ส ตัวเลือกนี้แนะนำให้ CPP เพิ่มเป้าหมายปลอมสำหรับการพึ่งพาแต่ละรายการนอกเหนือจาก
ไฟล์หลักทำให้แต่ละไฟล์ไม่ต้องพึ่งพาอะไร กฎจำลองเหล่านี้หลีกเลี่ยงข้อผิดพลาด
ทำ ให้ถ้าคุณลบไฟล์ส่วนหัวโดยไม่ต้องอัปเดต Makefile เพื่อให้ตรงกับ.

นี่คือผลลัพธ์ทั่วไป:

test.o: test.c ทดสอบ h

ทดสอบ h:

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

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

ตัวอย่างเช่น -มท '$(objpfx)foo.o' อาจให้

$(objpfx)foo.o: foo.c

-เอ็มคิว เป้า
เหมือนกับ -มทแต่จะอ้างอิงถึงอักขระใดๆ ที่มีลักษณะพิเศษเฉพาะสำหรับ Make
-เอ็มคิว '$(objpfx)foo.o' จะช่วยให้

$$(objpfx)foo.o: foo.c

เป้าหมายเริ่มต้นจะได้รับการเสนอราคาโดยอัตโนมัติ ราวกับว่าได้รับด้วย -เอ็มคิว.

-นพ -นพ เทียบเท่ากับ -M -มฟล ไฟล์ยกเว้นว่า -E ไม่ได้หมายความถึง คนขับ
แน่นอน ไฟล์ ขึ้นอยู่กับว่า an -o มีตัวเลือกให้ หากใช่ ไดรเวอร์จะใช้
อาร์กิวเมนต์ แต่มีคำต่อท้ายของ .dมิฉะนั้นจะใช้ชื่อของไฟล์อินพุต
ลบส่วนประกอบไดเร็กทอรีและคำต่อท้าย และใช้a .d วิภัตติ

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

ตั้งแต่ -E ไม่ได้หมายความถึง -นพ สามารถใช้เพื่อสร้างไฟล์เอาต์พุตการพึ่งพาเป็นa
ผลข้างเคียงของกระบวนการคอมไพล์

-MMD
Like -นพ ยกเว้นเฉพาะไฟล์ส่วนหัวของผู้ใช้เท่านั้น ไม่ใช่ไฟล์ส่วนหัวของระบบ

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

-fpch-พรีโพรเซส
ตัวเลือกนี้อนุญาตให้ใช้ส่วนหัวที่คอมไพล์ล่วงหน้าร่วมกับ -E. มันแทรกพิเศษ
"#pragma", "#pragma GCC pc_preprocess"ชื่อไฟล์"" ในผลลัพธ์เพื่อทำเครื่องหมายสถานที่
ที่ซึ่งพบส่วนหัวที่คอมไพล์แล้วและ ชื่อไฟล์. เมื่อ -fประมวลผลล่วงหน้า ที่อยู่ใน
ใช้ GCC รู้จัก "#pragma" และโหลด PCH

ตัวเลือกนี้ถูกปิดโดยค่าเริ่มต้น เนื่องจากผลลัพธ์ที่ประมวลผลล่วงหน้าที่ได้จะเป็นเท่านั้น
เหมาะที่จะเป็นอินพุตของ GCC มันถูกเปิดโดย -save-อุณหภูมิ.

คุณไม่ควรเขียน "#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=มาตรฐาน
-แอนซี
ระบุมาตรฐานที่รหัสควรสอดคล้อง ปัจจุบัน CPP รู้เรื่อง C
และมาตรฐาน C++; คนอื่น ๆ อาจถูกเพิ่มในอนาคต

มาตรฐาน อาจเป็นหนึ่งใน:

"ซี90"
"ซี89"
"iso9899:1990"
มาตรฐาน ISO C ตั้งแต่ปี 1990 c90 เป็นชวเลขจารีตประเพณีสำหรับเวอร์ชันนี้ของ
มาตรฐาน.

พื้นที่ -แอนซี ตัวเลือกเทียบเท่ากับ -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 "..."" เช่น
ปกติ

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

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

ไฟล์ทั้งหมดที่ระบุโดย -ไอมาครอส จะถูกประมวลผลก่อนไฟล์ทั้งหมดที่ระบุโดย - รวม.

-idirอาฟเตอร์ dir
ค้นหา dir สำหรับไฟล์ส่วนหัว แต่ทำอย่างนั้น หลังจาก ไดเร็กทอรีทั้งหมดที่ระบุด้วย -I และ
ไดเร็กทอรีระบบมาตรฐานหมดแล้ว dir ถือเป็นระบบ ได้แก่
ไดเร็กทอรี ถ้า dir เริ่มต้นด้วย "=" จากนั้น "=" จะถูกแทนที่ด้วย sysroot
คำนำหน้า; ดู --sysroot และ -isysroot.

-iprefix อุปสรรค
ระบุ อุปสรรค เป็นคำนำหน้าต่อไป -iกับคำนำหน้า ตัวเลือก. หากคำนำหน้า
แทนไดเร็กทอรี คุณควรรวมสุดท้าย /.

-iกับคำนำหน้า dir
-iกับคำนำหน้าก่อน dir
ผนวก dir ไปยังคำนำหน้าที่ระบุก่อนหน้านี้ด้วย -iprefixและเพิ่มผลลัพธ์
ไดเรกทอรีไปยังเส้นทางการค้นหารวม -iกับคำนำหน้าก่อน วางไว้ที่เดียวกัน -I
จะ; -iกับคำนำหน้า วางไว้ที่ไหน -idirอาฟเตอร์ หากว่า

-isysroot dir
ตัวเลือกนี้เหมือนกับ --sysroot ตัวเลือก แต่ใช้กับไฟล์ส่วนหัวเท่านั้น (ยกเว้นสำหรับ
เป้าหมายของดาร์วิน ซึ่งใช้กับทั้งไฟล์ส่วนหัวและไลบรารี) ดู
--sysroot ตัวเลือกสำหรับข้อมูลเพิ่มเติม

-imultilib dir
ใช้ dir เป็นไดเร็กทอรีย่อยของไดเร็กทอรีที่มีส่วนหัว C++ เฉพาะเป้าหมาย

-ไอซิสเต็ม dir
ค้นหา dir สำหรับไฟล์ส่วนหัวหลังจากไดเร็กทอรีทั้งหมดที่ระบุโดย -I แต่ก่อนที่
ไดเร็กทอรีระบบมาตรฐาน ทำเครื่องหมายว่าเป็นไดเร็กทอรีระบบ เพื่อให้ไดเร็กทอรีเหมือนกัน
การดูแลเป็นพิเศษตามที่ใช้กับไดเร็กทอรีระบบมาตรฐาน ถ้า dir เริ่มต้น
ด้วย "=" จากนั้น "=" จะถูกแทนที่ด้วยคำนำหน้า sysroot; ดู --sysroot และ
-isysroot.

-iquote dir
ค้นหา dir สำหรับไฟล์ส่วนหัวที่ขอด้วย "#include "ไฟล์""; พวกเขาจะไม่
ค้นหา "#includeไฟล์>"ก่อนไดเร็กทอรีทั้งหมดที่ระบุโดย -I และก่อนที่จะ
ไดเร็กทอรีระบบมาตรฐาน ถ้า dir ขึ้นต้นด้วย "=" จากนั้น "=" จะถูกแทนที่ด้วย
คำนำหน้า sysroot; ดู --sysroot และ -isysroot.

-fdirectives-เท่านั้น
เมื่อประมวลผลล่วงหน้า ให้จัดการคำสั่ง แต่อย่าขยายมาโคร

พฤติกรรมของตัวเลือกขึ้นอยู่กับ -E และ -fประมวลผลล่วงหน้า ตัวเลือก

กับ -Eการประมวลผลล่วงหน้าจำกัดเฉพาะการจัดการคำสั่งเช่น "#define"
"#ifdef" และ "#ข้อผิดพลาด" การทำงานของตัวประมวลผลล่วงหน้าอื่นๆ เช่น การขยายมาโครและ
ไม่ได้ทำการแปลงไตรกราฟ นอกจากนี้ -วว ตัวเลือกโดยปริยาย
เปิดการใช้งาน

กับ -fประมวลผลล่วงหน้า, คำจำกัดความของบรรทัดคำสั่งและมาโครในตัวส่วนใหญ่คือ
พิการ. มาโครเช่น "__LINE__" ซึ่งขึ้นอยู่กับบริบทจะได้รับการจัดการ
โดยทั่วไป. ซึ่งช่วยให้สามารถรวบรวมไฟล์ที่ประมวลผลไว้ล่วงหน้าด้วย "-E
-fdirectives เท่านั้น".

พร้อมทั้ง -E และ -fประมวลผลล่วงหน้ากฎสำหรับ -fประมวลผลล่วงหน้า มีความสำคัญ นี้
เปิดใช้งานการประมวลผลล่วงหน้าของไฟล์ที่ประมวลผลก่อนหน้านี้ด้วย "-E
-fdirectives เท่านั้น".

-fdollars-ในตัวระบุ
ยอมรับ $ ในตัวระบุ

-fexttended-ตัวระบุ
ยอมรับชื่ออักขระสากลในตัวระบุ ตัวเลือกนี้เป็นแบบทดลอง ใน
GCC เวอร์ชันอนาคต จะเปิดใช้งานโดยค่าเริ่มต้นสำหรับ C99 และ C++

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

-fประมวลผลล่วงหน้า เป็นนัยถ้าไฟล์อินพุตมีนามสกุลใดนามสกุลหนึ่ง .i, .ii or .ไมล์.
นี่คือส่วนขยายที่ GCC ใช้สำหรับไฟล์ที่ประมวลผลล่วงหน้าที่สร้างโดย -save-อุณหภูมิ.

-ftabstop=ความกว้าง
กำหนดระยะห่างระหว่างแถบหยุด ซึ่งช่วยให้ตัวประมวลผลล่วงหน้ารายงานคอลัมน์ที่ถูกต้อง
ตัวเลขในคำเตือนหรือข้อผิดพลาด แม้ว่าแท็บจะปรากฏบนบรรทัด ถ้าค่าน้อยกว่า
มากกว่า 1 หรือมากกว่า 100 ตัวเลือกจะถูกละเว้น ค่าเริ่มต้นคือ 8

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

{"ป":เฝอ ;"F":ฟ ;"แอล": ;"ค": ;"NS": ;"NS": ;"อี": ,"สถานที่": }

เมื่อใช้โดยไม่ต้อง -E, ตัวเลือกนี้ไม่มีผล

-ftrack-มาโครขยาย[=ระดับ]
ติดตามตำแหน่งของโทเค็นในการขยายมาโคร สิ่งนี้ทำให้คอมไพเลอร์สามารถปล่อย
การวินิจฉัยเกี่ยวกับสแต็คการขยายมาโครปัจจุบันเมื่อเกิดข้อผิดพลาดในการคอมไพล์ใน
การขยายมาโคร การใช้ตัวเลือกนี้ทำให้พรีโปรเซสเซอร์และคอมไพเลอร์ใช้การ
หน่วยความจำมากขึ้น NS ระดับ พารามิเตอร์สามารถใช้เพื่อเลือกระดับความแม่นยำของโทเค็น
การติดตามตำแหน่งจึงช่วยลดการใช้หน่วยความจำหากจำเป็น ค่า 0 of
ระดับ ปิดใช้งานตัวเลือกนี้เหมือนกับว่าไม่ -ftrack-มาโครขยาย อยู่บน
บรรทัดคำสั่ง ค่า 1 ติดตามตำแหน่งโทเค็นในโหมดที่เสื่อมโทรมเพื่อประโยชน์ของ
ค่าใช้จ่ายหน่วยความจำน้อยที่สุด ในโหมดนี้โทเค็นทั้งหมดที่เกิดจากการขยายตัวของ an
อาร์กิวเมนต์ของแมโครที่เหมือนฟังก์ชันมีตำแหน่งเดียวกัน ค่า 2 โทเค็นแทร็ก
สถานที่อย่างสมบูรณ์ ค่านี้เป็นหน่วยความจำที่หิวมากที่สุด เมื่อให้ตัวเลือกนี้
ไม่มีอาร์กิวเมนต์ ค่าพารามิเตอร์เริ่มต้นคือ 2.

-fexec-charset=ชุดอักขระ
ตั้งค่าชุดอักขระการดำเนินการ ใช้สำหรับค่าคงที่สตริงและอักขระ ค่าเริ่มต้น
คือ UTF-8 ชุดอักขระ สามารถเป็นการเข้ารหัสใด ๆ ที่สนับสนุนโดยไลบรารี "iconv" ของระบบ
กิจวัตรประจำวัน

-fwide-exec-charset=ชุดอักขระ
ตั้งค่าชุดอักขระการดำเนินการแบบกว้าง ใช้สำหรับค่าคงที่สตริงและอักขระแบบกว้าง
ค่าเริ่มต้นคือ UTF-32 หรือ UTF-16 ขึ้นอยู่กับความกว้างของ "wchar_t" เนื่องจาก
กับ -fexec-ชุดอักขระ, ชุดอักขระ สามารถเข้ารหัสใด ๆ ที่สนับสนุนโดย "iconv" ของระบบ
กิจวัตรประจำวันของห้องสมุด อย่างไรก็ตาม คุณจะมีปัญหากับการเข้ารหัสที่ไม่เหมาะสม
ตรงใน "wchar_t"

-finput-charset=ชุดอักขระ
ตั้งค่าชุดอักขระอินพุต ใช้สำหรับแปลจากชุดอักขระของอินพุต
ไฟล์ไปยังชุดอักขระต้นทางที่ใช้โดย GCC หากสถานที่ไม่ระบุหรือ GCC
ไม่สามารถรับข้อมูลนี้จากโลแคล ค่าเริ่มต้นคือ UTF-8 นี้สามารถ
แทนที่ด้วยโลแคลหรือตัวเลือกบรรทัดคำสั่งนี้ ปัจจุบันคำสั่ง
ตัวเลือกบรรทัดมีความสำคัญกว่าหากมีข้อขัดแย้ง ชุดอักขระ สามารถเข้ารหัสใด ๆ ก็ได้
สนับสนุนโดยรูทีนไลบรารี "iconv" ของระบบ

-fworking-ไดเรกทอรี
เปิดใช้งานการสร้าง linemarkers ในเอาต์พุตตัวประมวลผลล่วงหน้าที่จะให้คอมไพเลอร์
ทราบไดเร็กทอรีการทำงานปัจจุบันในขณะที่ประมวลผลล่วงหน้า เมื่อตัวเลือกนี้คือ
เปิดใช้งาน ตัวประมวลผลล่วงหน้าจะปล่อยตัวทำเครื่องหมายเส้นที่สองหลังจากตัวทำเครื่องหมายเริ่มต้น
ด้วยไดเร็กทอรีการทำงานปัจจุบันตามด้วยสแลชสองตัว GCC จะใช้สิ่งนี้
ไดเร็กทอรีเมื่อมีอยู่ในอินพุตที่ประมวลผลล่วงหน้าเนื่องจากไดเร็กทอรีที่ปล่อยออกมาเป็น
ไดเร็กทอรีการทำงานปัจจุบันในรูปแบบข้อมูลการดีบักบางรูปแบบ ตัวเลือกนี้คือ
เปิดใช้งานโดยปริยายหากเปิดใช้งานข้อมูลการดีบัก แต่สิ่งนี้สามารถยับยั้งได้ด้วย
แบบฟอร์มปฏิเสธ -fno-working-ไดเรกทอรี. หาก -P มีแฟล็กอยู่ในคำสั่ง
บรรทัด ตัวเลือกนี้ไม่มีผล เนื่องจากไม่มีคำสั่ง "#line" ออกมาแต่อย่างใด

-fno-show-คอลัมน์
อย่าพิมพ์หมายเลขคอลัมน์ในการวินิจฉัย นี่อาจมีความจำเป็นหากการวินิจฉัยคือ
ถูกสแกนโดยโปรแกรมที่ไม่เข้าใจหมายเลขคอลัมน์ เช่น
เดแจนู.

-A คำกริยา=คำตอบ
ยืนยันด้วยภาคแสดง คำกริยา และตอบ คำตอบ. แบบฟอร์มนี้คือ
ชอบแบบเก่ามากกว่า -A คำกริยา(คำตอบ)ซึ่งยังคงรองรับอยู่เพราะว่า
ไม่ใช้อักขระพิเศษของเชลล์

-A -คำกริยา=คำตอบ
ยกเลิกการยืนยันด้วยภาคแสดง คำกริยา และตอบ คำตอบ.

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

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

แตะ foo.h; cpp -dM foo.h

จะแสดงมาโครที่กำหนดไว้ล่วงหน้าทั้งหมด

ถ้าคุณใช้ -ดีเอ็ม ปราศจาก -E ตัวเลือก -ดีเอ็ม ถูกตีความว่าเป็นคำพ้องความหมายสำหรับ
-fdump-rtl-จักร.

D Like M เว้นแต่ในสองประการ: มันไม่ ไม่ รวมมาโครที่กำหนดไว้ล่วงหน้าและมัน
เอาท์พุท ทั้งสอง #กำหนด คำสั่งและผลลัพธ์ของการประมวลผลล่วงหน้า ทั้งสองแบบ
ของเอาต์พุตไปที่ไฟล์เอาต์พุตมาตรฐาน

N Like Dแต่ให้แสดงเฉพาะชื่อมาโคร ไม่ใช่ส่วนขยาย

I เอาท์พุต #include คำสั่งนอกเหนือจากผลลัพธ์ของการประมวลผลล่วงหน้า

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

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

-C อย่าทิ้งความคิดเห็น ความคิดเห็นทั้งหมดจะถูกส่งผ่านไปยังไฟล์ที่ส่งออก ยกเว้น
สำหรับความคิดเห็นในคำสั่งที่ประมวลผลแล้ว ซึ่งจะถูกลบไปพร้อมกับคำสั่งนั้น

คุณควรเตรียมพร้อมสำหรับผลข้างเคียงเมื่อใช้ -C; มันทำให้พรีโปรเซสเซอร์ไป
ถือว่าความคิดเห็นเป็นโทเค็นในสิทธิของตนเอง ตัวอย่างเช่น ความคิดเห็นที่ปรากฏที่
จุดเริ่มต้นของสิ่งที่จะเป็น directive line มีผลกับการเปลี่ยนบรรทัดนั้นให้เป็น an
บรรทัดต้นทางธรรมดา เนื่องจากโทเค็นแรกในบรรทัดไม่มี a . อีกต่อไป #.

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

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

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

-แบบดั้งเดิม-cpp
พยายามเลียนแบบพฤติกรรมของตัวประมวลผลล่วงหน้า C ที่ล้าสมัย เมื่อเทียบกับ ISO C
พรีโปรเซสเซอร์

-ไตรกราฟ
ประมวลผลลำดับไตรกราฟ เหล่านี้เป็นลำดับอักขระสามตัว ทั้งหมดเริ่มต้นด้วย
??ที่กำหนดโดย ISO C เพื่อย่อมาจากอักขระตัวเดียว ตัวอย่างเช่น, - ยืน
for \ดังนั้น '??/NS' เป็นค่าคงที่อักขระสำหรับขึ้นบรรทัดใหม่ โดยค่าเริ่มต้น GCC จะละเว้น
trigraphs แต่ในโหมดที่เป็นไปตามมาตรฐาน จะแปลงค่าเหล่านี้ ดู -มาตรฐาน และ -แอนซี
ตัวเลือก

เก้าไตรลักษณ์และการแทนที่คือ

ไตรกราฟ: ??( ??) ??< ??> ??= ??/ ??' ??! ??-
การแทนที่: [ ] { } # \ ^ | ~

-รีแมป
เปิดใช้งานรหัสพิเศษเพื่อแก้ไขระบบไฟล์ที่อนุญาตเฉพาะไฟล์ที่สั้นมากเท่านั้น
ชื่อเช่น MS-DOS

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

-v โหมดละเอียด พิมพ์หมายเลขเวอร์ชันของ GNU CPP ที่จุดเริ่มต้นของการดำเนินการและ
รายงานรูปแบบสุดท้ายของเส้นทางรวม

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

-version
--รุ่น
พิมพ์หมายเลขเวอร์ชันของ GNU CPP ด้วยหนึ่งขีด ให้ดำเนินการประมวลผลล่วงหน้าตามปกติ
ด้วยเส้นประสองเส้น ให้ออกทันที

ที่ผ่านไป Options ไปยัง ผู้ประกอบ
คุณสามารถส่งตัวเลือกไปยังแอสเซมเบลอร์

-วาตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกสำหรับแอสเซมเบลอร์ ถ้า ตัวเลือก มีเครื่องหมายจุลภาค มันถูกแบ่ง
ลงในหลายตัวเลือกที่เครื่องหมายจุลภาค

-Xแอสเซมเบลอร์ ตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกสำหรับแอสเซมเบลอร์ คุณสามารถใช้สิ่งนี้เพื่อจัดหาระบบเฉพาะ
ตัวเลือกแอสเซมเบลอร์ที่ GCC ไม่ทราบวิธีรับรู้

หากคุณต้องการส่งตัวเลือกที่มีการโต้แย้ง คุณต้องใช้ -Xแอสเซมเบลอร์ เป็นครั้งที่สอง
หนึ่งครั้งสำหรับตัวเลือกและอีกครั้งสำหรับการโต้แย้ง

Options for การเชื่อมโยง
ตัวเลือกเหล่านี้จะมีผลเมื่อคอมไพเลอร์เชื่อมโยงไฟล์อ็อบเจ็กต์เข้ากับไฟล์ปฏิบัติการ
ไฟล์ที่ส่งออก สิ่งเหล่านี้ไม่มีความหมายหากคอมไพเลอร์ไม่ได้ทำขั้นตอนลิงก์

วัตถุไฟล์ชื่อ
ชื่อไฟล์ที่ไม่ลงท้ายด้วยส่วนต่อท้ายที่รู้จักพิเศษถือเป็นชื่อ an
ไฟล์วัตถุหรือไลบรารี (ไฟล์อ็อบเจ็กต์แตกต่างจากไลบรารีโดยตัวเชื่อมโยง
ตามเนื้อหาของไฟล์) หากการลิงก์เสร็จสิ้น ไฟล์อ็อบเจ็กต์เหล่านี้จะถูกใช้เป็น
อินพุตไปยังตัวเชื่อมโยง

-c
-S
-E หากใช้ตัวเลือกใดตัวเลือกหนึ่งเหล่านี้ ตัวเชื่อมโยงจะไม่ทำงาน และชื่อไฟล์อ็อบเจ็กต์
ไม่ควรใช้เป็นข้อโต้แย้ง

-lห้องสมุด
-l ห้องสมุด
ค้นหาห้องสมุดชื่อ ห้องสมุด เมื่อเชื่อมโยง (ทางเลือกที่สองกับ
ไลบรารีเป็นอาร์กิวเมนต์แยกต่างหากสำหรับการปฏิบัติตาม POSIX เท่านั้น และไม่แนะนำ)

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

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

ไดเร็กทอรีที่ค้นหาประกอบด้วยไดเร็กทอรีระบบมาตรฐานหลายไดเร็กทอรีรวมทั้งไดเร็กทอรีที่คุณ
ระบุด้วย -L.

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

-lobjc
คุณต้องการกรณีพิเศษนี้ของ -l ตัวเลือกเพื่อเชื่อมโยง Objective-C หรือ
โปรแกรม Objective-C++

-NostartFiles
อย่าใช้ไฟล์เริ่มต้นระบบมาตรฐานเมื่อทำการเชื่อมโยง ระบบมาตราฐาน
ห้องสมุดถูกใช้งานตามปกติ เว้นแต่ -nostdlib or -nodedefaultlibs ถูกนำมาใช้.

-nodedefaultlibs
ห้ามใช้ไลบรารีระบบมาตรฐานเมื่อทำการเชื่อมโยง เฉพาะไลบรารีที่คุณระบุ
จะถูกส่งไปยังลิงเกอร์, ตัวเลือกที่ระบุการเชื่อมโยงของไลบรารีระบบ, เช่น
เป็น "-static-libgcc" หรือ "-shared-libgcc" จะถูกละเว้น ไฟล์เริ่มต้นมาตรฐาน
ใช้งานได้ตามปกติ เว้นแต่ -NostartFiles ถูกนำมาใช้. คอมไพเลอร์อาจสร้างการเรียกไปยัง
"memcmp", "memset", "memcpy" และ "memmove" รายการเหล่านี้มักจะแก้ไขโดย
รายการใน libc จุดเริ่มต้นเหล่านี้ควรจัดหาผ่านกลไกอื่น
เมื่อระบุตัวเลือกนี้

-nostdlib
ห้ามใช้ไฟล์หรือไลบรารีเริ่มต้นระบบมาตรฐานเมื่อทำการเชื่อมโยง ไม่มีการเริ่มต้น
ไฟล์และเฉพาะไลบรารีที่คุณระบุเท่านั้นที่จะถูกส่งไปยังตัวเชื่อมโยง, ตัวเลือก
การระบุการเชื่อมโยงของไลบรารีระบบ เช่น "-static-libgcc" หรือ
"-shared-libgcc" จะถูกละเว้น คอมไพเลอร์อาจสร้างการเรียก "memcmp"
"memset", "memcpy" และ "memmove" รายการเหล่านี้มักจะแก้ไขโดยรายการใน
ห้องสมุด จุดเริ่มต้นเหล่านี้ควรจัดหาผ่านกลไกอื่นเมื่อสิ่งนี้
มีการระบุตัวเลือก

หนึ่งในไลบรารีมาตรฐานที่ถูกข้ามโดย -nostdlib และ -nodedefaultlibs is libgcc.aที่
ไลบรารีของรูทีนย่อยภายในที่ GCC ใช้เพื่อเอาชนะข้อบกพร่องเฉพาะ
เครื่องหรือความต้องการพิเศษสำหรับบางภาษา

ในกรณีส่วนใหญ่ คุณต้องการ libgcc.a แม้ว่าคุณต้องการหลีกเลี่ยงไลบรารีมาตรฐานอื่นๆ
กล่าวอีกนัยหนึ่งเมื่อคุณระบุ -nostdlib or -nodedefaultlibs คุณมักจะ
ระบุ -lgcc เช่นกัน. เพื่อให้แน่ใจว่าคุณไม่มีการอ้างอิงถึง .ที่ยังไม่ได้แก้ไข
รูทีนย่อยไลบรารี GCC ภายใน (ตัวอย่างเช่น, __หลัก, ใช้เพื่อให้แน่ใจว่า C++
คอนสตรัคเตอร์จะถูกเรียก)

-พาย
สร้างตำแหน่งปฏิบัติการอิสระบนเป้าหมายที่สนับสนุน สำหรับการคาดเดา
ผลลัพธ์ คุณต้องระบุชุดตัวเลือกเดียวกันกับที่ใช้สร้างรหัส
(-fpie, -fPIEหรือตัวเลือกย่อยของโมเดล) เมื่อคุณระบุตัวเลือกนี้

-ไดนามิค
ปักธง -ส่งออกไดนามิก ไปยังตัวเชื่อมโยง ELF บนเป้าหมายที่สนับสนุน นี้
สั่งให้ตัวเชื่อมโยงเพิ่มสัญลักษณ์ทั้งหมด ไม่ใช่แค่สัญลักษณ์ที่ใช้กับสัญลักษณ์ไดนามิก
ตาราง. ตัวเลือกนี้จำเป็นสำหรับการใช้งาน "dlopen" บางอย่างหรือเพื่อให้ได้รับ
ย้อนรอยจากภายในโปรแกรม

-s ลบตารางสัญลักษณ์และข้อมูลการย้ายตำแหน่งทั้งหมดออกจากไฟล์เรียกทำงาน

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

- แบ่งปัน
สร้างวัตถุที่ใช้ร่วมกันซึ่งสามารถเชื่อมโยงกับวัตถุอื่นเพื่อสร้าง an
ปฏิบัติการได้ ไม่ใช่ทุกระบบที่รองรับตัวเลือกนี้ เพื่อผลลัพธ์ที่คาดเดาได้ คุณต้อง
ยังระบุชุดตัวเลือกเดียวกันกับที่ใช้สร้างโค้ด (-fpic, -fPIC,หรือ
ตัวเลือกย่อยของรุ่น) เมื่อคุณระบุตัวเลือกนี้[1]

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

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

ดังนั้นไดรเวอร์ G++ และ GCJ จะเพิ่ม .โดยอัตโนมัติ -Shared-Libgcc เมื่อใดก็ตามที่คุณสร้าง
ไลบรารีที่ใช้ร่วมกันหรือไฟล์ปฏิบัติการหลัก เนื่องจากโปรแกรม C++ และ Java มักใช้
ข้อยกเว้น ดังนั้นนี่จึงเป็นสิ่งที่ควรทำ

ถ้าคุณใช้ไดรเวอร์ GCC เพื่อสร้างไลบรารีที่ใช้ร่วมกันแทน คุณอาจพบว่า
จะไม่เชื่อมโยงกับการแชร์เสมอไป libgcc. หากพบ GCC ที่การกำหนดค่า
เวลาที่คุณมีตัวเชื่อมโยงที่ไม่ใช่ GNU หรือตัวเชื่อมโยง GNU ที่ไม่รองรับตัวเลือก
--เอ๊ะ-กรอบ HDR, มันจะเชื่อมโยงเวอร์ชันที่ใช้ร่วมกันของ libgcc ลงในห้องสมุดสาธารณะโดย
ค่าเริ่มต้น. มิฉะนั้น มันจะใช้ประโยชน์จากตัวเชื่อมโยงและเพิ่มประสิทธิภาพ away
เชื่อมโยงกับเวอร์ชันที่ใช้ร่วมกันของ libgcc, เชื่อมโยงกับเวอร์ชันคงที่ของ libgcc
โดยค่าเริ่มต้น. สิ่งนี้ทำให้ข้อยกเว้นสามารถเผยแพร่ผ่านไลบรารีที่ใช้ร่วมกันดังกล่าว
โดยไม่ต้องเสียค่าใช้จ่ายในการย้ายถิ่นฐานในขณะโหลดห้องสมุด

อย่างไรก็ตาม หากไลบรารี่หรือไฟล์สั่งการหลักควรจะโยนหรือดักจับข้อยกเว้น คุณ
ต้องเชื่อมโยงโดยใช้ไดรเวอร์ G++ หรือ GCJ ตามความเหมาะสมกับภาษาที่ใช้ใน
โปรแกรมหรือใช้ตัวเลือก -Shared-Libgccเพื่อที่จะเชื่อมโยงกับการแบ่งปัน
libgcc.

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

-สัญลักษณ์
เชื่อมโยงการอ้างอิงถึงสัญลักษณ์สากลเมื่อสร้างวัตถุที่ใช้ร่วมกัน เตือนเกี่ยวกับใด ๆ
การอ้างอิงที่ไม่ได้รับการแก้ไข (เว้นแต่จะถูกแทนที่ด้วยตัวเลือกตัวแก้ไขลิงก์ -เอ็กซ์ลิงค์เกอร์ -z
-เอ็กซ์ลิงค์เกอร์ defs). มีเพียงไม่กี่ระบบเท่านั้นที่รองรับตัวเลือกนี้

-T ต้นฉบับ
ใช้ ต้นฉบับ เป็นสคริปต์ตัวเชื่อมโยง ระบบส่วนใหญ่รองรับตัวเลือกนี้โดยใช้ปุ่ม
ตัวเชื่อมโยง GNU ในบางเป้าหมาย เช่น เป้าหมายเปล่าที่ไม่มีระบบปฏิบัติการ
-T อาจจำเป็นต้องใช้ตัวเลือกเมื่อทำการเชื่อมโยงเพื่อหลีกเลี่ยงการอ้างถึงสัญลักษณ์ที่ไม่ได้กำหนดไว้

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

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

เมื่อใช้ตัวเชื่อมโยง GNU มักจะสะดวกกว่าที่จะส่งผ่านอาร์กิวเมนต์ไปยังตัวเชื่อมโยง
ตัวเลือกโดยใช้ ตัวเลือก=ความคุ้มค่า ไวยากรณ์มากกว่าเป็นอาร์กิวเมนต์แยกต่างหาก ตัวอย่างเช่น คุณ
สามารถระบุได้ -เอ็กซ์ลิงค์เกอร์ -Map=output.map มากกว่า -เอ็กซ์ลิงค์เกอร์ -แผนที่ -เอ็กซ์ลิงค์เกอร์ เอาท์พุท แผนที่.
ตัวเชื่อมโยงอื่นๆ อาจไม่สนับสนุนไวยากรณ์นี้สำหรับตัวเลือกบรรทัดคำสั่ง

-Wlตัวเลือก
ส่ง ตัวเลือก เป็นตัวเลือกของลิงเกอร์ ถ้า ตัวเลือก มีเครื่องหมายจุลภาค แบ่งออกเป็น
หลายตัวเลือกที่เครื่องหมายจุลภาค คุณสามารถใช้ไวยากรณ์นี้เพื่อส่งผ่านอาร์กิวเมนต์ไปยัง
ตัวเลือก. ตัวอย่างเช่น, -Wl,-แผนที่,output.map ผ่าน -แผนที่ เอาท์พุท แผนที่ ไปยังตัวเชื่อมโยง เมื่อไหร่
โดยใช้ตัวเชื่อมโยง GNU คุณสามารถรับผลเช่นเดียวกันกับ -Wl,-Map=output.map.

หมายเหตุ: ใน Ubuntu 8.10 และเวอร์ชันที่ใหม่กว่า สำหรับ LDFLAGS ตัวเลือก -Wl,-z,เรลโร ถูกนำมาใช้.
หากต้องการปิดใช้งาน ให้ใช้ -Wl,-z,โนเรลโร.

-u เครื่องหมาย
แสร้งทำเป็นสัญลักษณ์ เครื่องหมาย ไม่ได้กำหนดไว้ เพื่อบังคับให้เชื่อมโยงโมดูลห้องสมุดเพื่อกำหนด
มัน. คุณสามารถใช้ได้ -u หลายครั้งด้วยสัญลักษณ์ต่างกันเพื่อบังคับให้โหลด
โมดูลห้องสมุดเพิ่มเติม

Options for ค้นหาสถานที่ ค้นหา
ตัวเลือกเหล่านี้ระบุไดเร็กทอรีเพื่อค้นหาไฟล์ส่วนหัว สำหรับไลบรารี และสำหรับชิ้นส่วน
ของคอมไพเลอร์:

-Idir
เพิ่มไดเร็กทอรี dir ไปที่ส่วนหัวของรายการไดเร็กทอรีที่จะค้นหา header
ไฟล์. สามารถใช้เพื่อแทนที่ไฟล์ส่วนหัวของระบบ แทนที่ไฟล์ของคุณเอง
เวอร์ชัน เนื่องจากไดเร็กทอรีเหล่านี้ถูกค้นหาก่อนไฟล์ส่วนหัวของระบบ
ไดเรกทอรี อย่างไรก็ตาม คุณไม่ควรใช้ตัวเลือกนี้เพื่อเพิ่มไดเร็กทอรีที่มี
ไฟล์ส่วนหัวของระบบที่ผู้ขายจัดหา (use -ไอซิสเต็ม สำหรับการที่). หากคุณใช้มากกว่าหนึ่งตัว
-I ตัวเลือก ไดเร็กทอรีจะถูกสแกนในลำดับจากซ้ายไปขวา ระบบมาตราฐาน
ไดเรกทอรีมาหลังจาก

หากระบบมาตรฐานรวมไดเร็กทอรีหรือไดเร็กทอรีที่ระบุด้วย -ไอซิสเต็ม, เป็น
ยังระบุด้วย -Iที่ -I ตัวเลือกจะถูกละเว้น ไดเร็กทอรีจะยังคงเป็น
ค้นหาแต่เป็นไดเร็กทอรีระบบที่ตำแหน่งปกติในระบบรวมถึงลูกโซ่
ทั้งนี้เพื่อให้แน่ใจว่าขั้นตอนของ GCC ในการแก้ไขส่วนหัวของระบบบั๊กกี้และการสั่งซื้อ
สำหรับคำสั่ง include_next จะไม่เปลี่ยนแปลงโดยไม่ได้ตั้งใจ หากคุณต้องการ
เปลี่ยนลำดับการค้นหาสำหรับไดเร็กทอรีระบบ ใช้ -nostdinc และ / หรือ -ไอซิสเต็ม
ตัวเลือก

-iplugindir=dir
ตั้งค่าไดเร็กทอรีเพื่อค้นหาปลั๊กอินที่ส่งผ่าน -fปลั๊กอิน=ชื่อ แทน
-fปลั๊กอิน=เส้นทาง/ชื่อ.ดังนั้น. ตัวเลือกนี้ไม่ได้มีไว้สำหรับผู้ใช้ แต่เท่านั้น
ผ่านคนขับ

-iquotedir
เพิ่มไดเร็กทอรี dir ไปที่ส่วนหัวของรายการไดเร็กทอรีที่จะค้นหา header
ไฟล์เฉพาะกรณีของ #include "ไฟล์"; พวกเขาจะไม่ถูกค้นหา #include <ไฟล์>,
อย่างอื่นก็เหมือน -I.

-Ldir
เพิ่มไดเรกทอรี dir ไปยังรายการไดเร็กทอรีที่จะค้นหา -l.

-Bอุปสรรค
ตัวเลือกนี้ระบุตำแหน่งที่จะค้นหาไฟล์เรียกทำงาน ไลบรารี รวมไฟล์ และ
ไฟล์ข้อมูลของคอมไพเลอร์เอง

โปรแกรมควบคุมคอมไพเลอร์รันโปรแกรมย่อยอย่างน้อยหนึ่งโปรแกรม ซีพี, cc1, as และ ld.
มันพยายาม อุปสรรค เป็นคำนำหน้าสำหรับแต่ละโปรแกรมที่พยายามเรียกใช้ ทั้งที่มีและไม่มี
เครื่อง/รุ่น/.

สำหรับการรันโปรแกรมย่อยแต่ละโปรแกรม ไดรเวอร์คอมไพเลอร์จะพยายาม .ก่อน -B คำนำหน้าถ้ามี
หากไม่พบชื่อนั้นหรือถ้า -B ไม่ได้ระบุ คนขับพยายามสองมาตรฐาน
คำนำหน้า /usr/lib/gcc/ และ /usr/local/lib/gcc/. หากไม่มีผลลัพธ์ในa
ชื่อไฟล์ที่พบ จะค้นหาชื่อโปรแกรมที่ไม่ได้แก้ไขโดยใช้คำสั่ง
ไดเร็กทอรีที่ระบุใน your เส้นทาง ตัวแปรสภาพแวดล้อม

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

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

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

อีกวิธีในการระบุคำนำหน้าเช่น -B คำนำหน้าคือการใช้สิ่งแวดล้อม
ตัวแปร GCC_EXEC_PREFIX.

เป็นคลาดจ์พิเศษหากเส้นทางที่ .จัดให้ -B is [ผบ./]เวทีN/ที่นี่มี N เป็นตัวเลข
ในช่วง 0 ถึง 9 จากนั้นจะถูกแทนที่ด้วย [dir/]รวม. เพื่อช่วยในเรื่อง
การบูตรัดคอมไพเลอร์

-ข้อมูลจำเพาะ=ไฟล์
กระบวนการ ไฟล์ หลังจากที่คอมไพเลอร์อ่านในมาตรฐาน รายละเอียด ไฟล์เพื่อที่จะแทนที่
ค่าเริ่มต้นซึ่ง gcc โปรแกรมควบคุมใช้เมื่อกำหนดสวิตช์ที่จะผ่าน
ไปยัง cc1, ซีซี1พลัส, as, ldฯลฯ มากกว่าหนึ่ง -ข้อมูลจำเพาะ=ไฟล์ สามารถระบุได้ที่
บรรทัดคำสั่ง และประมวลผลตามลำดับจากซ้ายไปขวา

--sysroot=dir
ใช้ dir เป็นไดเร็กทอรี root แบบลอจิคัลสำหรับส่วนหัวและไลบรารี ตัวอย่างเช่น ถ้า
คอมไพเลอร์มักจะค้นหาส่วนหัวใน / usr / รวม และห้องสมุดใน / usr / lib,
มันจะค้นหาแทน ผู้อำนวยการ/usr/include และ ผู้กำกับ/usr/lib.

หากคุณใช้ทั้งตัวเลือกนี้และ -isysroot ตัวเลือก จากนั้น --sysroot ตัวเลือก will
นำไปใช้กับห้องสมุด แต่ -isysroot ตัวเลือกจะใช้กับไฟล์ส่วนหัว

ตัวเชื่อมโยง GNU (เริ่มต้นด้วยเวอร์ชัน 2.16) มีการสนับสนุนที่จำเป็นสำหรับสิ่งนี้
ตัวเลือก. หากตัวเชื่อมโยงของคุณไม่รองรับตัวเลือกนี้ ลักษณะของไฟล์ส่วนหัวของ
--sysroot จะยังคงใช้งานได้ แต่ด้านห้องสมุดจะไม่ทำงาน

-ผม- ตัวเลือกนี้เลิกใช้แล้ว โปรดใช้ -iquote แทนสำหรับ -I ไดเรกทอรีก่อน
-ผม- และลบไฟล์ -ผม-. ไดเร็กทอรีใด ๆ ที่คุณระบุด้วย -I ตัวเลือกก่อน
-ผม- ตัวเลือกจะถูกค้นหาเฉพาะกรณีของ #include "ไฟล์"; พวกเขาจะไม่ถูกค้นหา
for #include <ไฟล์>.

หากระบุไดเร็กทอรีเพิ่มเติมด้วย -I ตัวเลือกหลัง -ผม-เหล่านี้
ค้นหาไดเรกทอรีทั้งหมด #include คำสั่ง (ปกติ ทั้งหมด -I ไดเรกทอรี
ใช้วิธีนี้)

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

-ผม- ไม่ขัดขวางการใช้ไดเร็กทอรีระบบมาตรฐานสำหรับไฟล์ส่วนหัว
ดังนั้น -ผม- และ -nostdinc เป็นอิสระ

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

ฮาร์ดแวร์ Models และ การกำหนดค่า
เครื่องเป้าหมายแต่ละประเภทสามารถมีตัวเลือกพิเศษของตัวเองได้ เริ่มด้วย -m, เลือก
ระหว่างรุ่นฮาร์ดแวร์หรือการกำหนดค่าต่างๆ—เช่น 68010 เทียบกับ 68020 แบบลอยตัว
ตัวประมวลผลร่วมหรือไม่มี คอมไพเลอร์เวอร์ชันเดียวที่ติดตั้งสามารถคอมไพล์สำหรับรุ่นใดก็ได้
หรือการกำหนดค่าตามตัวเลือกที่ระบุ

คอนฟิกูเรชันบางตัวของคอมไพเลอร์ยังสนับสนุนตัวเลือกพิเศษเพิ่มเติม โดยปกติสำหรับ
เข้ากันได้กับคอมไพเลอร์อื่น ๆ บนแพลตฟอร์มเดียวกัน

อแดปเทวา ศักดิ์สิทธิ์ Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกที่กำหนดไว้สำหรับ Adapteva Epiphany:

-mhalf-reg-ไฟล์
อย่าจัดสรรการลงทะเบียนใด ๆ ในช่วง "r32"..."r63" ที่อนุญาตให้โค้ดทำงานบน
ฮาร์ดแวร์รุ่นต่างๆ ที่ไม่มีรีจิสเตอร์เหล่านี้

-mprefer-สั้น insn-regs
จัดสรรการลงทะเบียนที่อนุญาตการสร้างคำสั่งสั้นเป็นพิเศษ นี้สามารถ
ส่งผลให้จำนวนคำสั่งเพิ่มขึ้น ดังนั้นหากสิ่งนี้ลดหรือเพิ่มขนาดโค้ด
อาจแตกต่างกันไปในแต่ละกรณี

-mbranch-ต้นทุน=NUM
กำหนดต้นทุนของสาขาไว้ที่ประมาณ NUM คำแนะนำ "ง่าย" ค่าใช้จ่ายนี้เป็นเพียง
heuristic และไม่รับประกันว่าจะให้ผลลัพธ์ที่สอดคล้องกันในรุ่นต่างๆ

-mcmove
เปิดใช้งานการสร้างการเคลื่อนไหวตามเงื่อนไข

-mnops=NUM
ปล่อยออกมา NUM nos ก่อนทุกคำสั่งที่สร้างอื่น ๆ

-mno-soft-cmpsf
สำหรับการเปรียบเทียบจุดทศนิยมที่มีความแม่นยำเพียงจุดเดียว ให้ปล่อยคำสั่ง fsub และทดสอบ
ธง เร็วกว่าการเปรียบเทียบซอฟต์แวร์ แต่อาจได้ผลลัพธ์ที่ไม่ถูกต้องใน
การมีอยู่ของ NaNs หรือเมื่อเปรียบเทียบตัวเลขขนาดเล็กสองจำนวนที่ต่างกัน
ส่วนต่างจะถูกคำนวณเป็นศูนย์ ค่าเริ่มต้นคือ -msoft-cmpsfซึ่งใช้ช้ากว่าแต่
การเปรียบเทียบซอฟต์แวร์ที่สอดคล้องกับ IEEE

-mstack-ชดเชย=NUM
ตั้งค่าออฟเซ็ตระหว่างส่วนบนของสแต็กและตัวชี้สแต็ก เช่น ค่า8
หมายความว่าแปดไบต์ในช่วง sp+0...sp+7 สามารถใช้โดยฟังก์ชันลีฟ
โดยไม่มีการจัดสรรสแต็ก ค่าอื่นที่ไม่ใช่ 8 or 16 ยังไม่ผ่านการทดสอบและไม่น่าจะ
งาน. โปรดทราบว่าตัวเลือกนี้จะเปลี่ยน ABI โดยรวบรวมโปรแกรมด้วย a
สแต็กออฟเซ็ตที่แตกต่างจากไลบรารีที่ได้รับการคอมไพล์โดยทั่วไปจะไม่
งาน. ตัวเลือกนี้จะมีประโยชน์หากคุณต้องการประเมินว่า stack offset ต่างกันหรือไม่
จะให้รหัสที่ดีกว่าแก่คุณ แต่จริง ๆ แล้วใช้ stack offset อื่นเพื่อสร้าง
โปรแกรมการทำงาน ขอแนะนำให้กำหนดค่า toolchain ด้วยค่าที่เหมาะสม
--with-stack-offset=NUM ตัวเลือก

-mno-round-ใกล้ที่สุด
ทำให้ตัวจัดกำหนดการถือว่าโหมดการปัดเศษถูกตั้งค่าเป็นการตัดทอน NS
ค่าเริ่มต้นคือ -mround-ใกล้ที่สุด.

-mlong-โทร
หากไม่ได้ระบุเป็นอย่างอื่นโดยแอตทริบิวต์ ถือว่าการเรียกทั้งหมดอาจอยู่นอกเหนือ
ช่วงออฟเซ็ตของคำสั่ง b / bl ดังนั้นจึงโหลดที่อยู่ของฟังก์ชันลงใน
ลงทะเบียนก่อนทำการโทร (มิฉะนั้นโดยตรง) นี่คือค่าเริ่มต้น

-mshort-โทร
หากไม่ได้ระบุไว้เป็นอย่างอื่นโดยแอตทริบิวต์ ถือว่าการเรียกโดยตรงทั้งหมดอยู่ในช่วง
ของคำสั่ง b / bl ดังนั้นให้ใช้คำแนะนำเหล่านี้สำหรับการโทรโดยตรง ค่าเริ่มต้น
is -mlong-โทร.

-msmall16
สมมติว่าสามารถโหลดที่อยู่เป็นค่า 16 บิตที่ไม่ได้ลงนาม สิ่งนี้ใช้ไม่ได้กับ
ฟังก์ชันที่อยู่ซึ่ง -mlong-โทร ความหมายมีผลใช้บังคับ

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

โหมด สามารถตั้งค่าเป็นค่าใดค่าหนึ่งดังต่อไปนี้:

ผู้โทร
โหมดใดๆ ที่รายการฟังก์ชันนั้นใช้ได้ และจะคงไว้หรือคืนค่าเมื่อฟังก์ชัน
ส่งคืนและเมื่อเรียกใช้ฟังก์ชันอื่นๆ โหมดนี้มีประโยชน์สำหรับการคอมไพล์
ไลบรารีหรือหน่วยการคอมไพล์อื่น ๆ ที่คุณอาจต้องการรวมเข้าใน different
โปรแกรมที่มีโหมด FPU ที่มีอยู่แตกต่างกัน และความสะดวกในการ
ใช้ไฟล์อ็อบเจ็กต์ไฟล์เดียวที่เกินขนาดและความเร็วโอเวอร์เฮดสำหรับโหมดพิเศษใดๆ
สวิตช์ที่อาจจำเป็น เทียบกับสิ่งที่จำเป็นกับ more
ทางเลือกเฉพาะของโหมด FPU ที่มีอยู่

ตัด
นี่คือโหมดที่ใช้สำหรับการคำนวณจุดลอยตัวด้วยการตัดทอน (เช่น รอบ
ไปทางศูนย์) โหมดการปัดเศษ ซึ่งรวมถึงการแปลงจากจุดลอยตัวเป็น
จำนวนเต็ม.

ปัดเศษที่ใกล้ที่สุด
นี่คือโหมดที่ใช้สำหรับการคำนวณจุดลอยตัวด้วยการปัดเศษไปใกล้สุดหรือ-
แม้กระทั่งโหมดการปัดเศษ

int นี่คือโหมดที่ใช้ในการคำนวณจำนวนเต็มใน FPU เช่น integer
คูณหรือจำนวนเต็มคูณและสะสม

ค่าเริ่มต้นคือ -mfp-mode=ผู้โทร

-mnosplit-lohi
-mno-postinc
-mno-หลังการแก้ไข
การปรับแต่งการสร้างโค้ดที่ปิดใช้งานตามลำดับ การแยกการโหลดแบบ 32 บิต
การสร้างที่อยู่หลังการเพิ่มและการสร้างที่อยู่หลังการแก้ไข NS
ค่าเริ่มต้นคือ msplit-lohi, -mpost-อิงค์และ -mpost-แก้ไข.

-mnovect-ดับเบิ้ล
เปลี่ยนโหมด SIMD ที่ต้องการเป็น SImode ค่าเริ่มต้นคือ -mvect-ดับเบิ้ลซึ่งการใช้งาน
DImode เป็นโหมด SIMD ที่ต้องการ

-max-vect-align =NUM
การจัดตำแหน่งสูงสุดสำหรับประเภทโหมดเวกเตอร์ SIMD NUM อาจเป็น 4 หรือ 8 ค่าเริ่มต้นคือ
8. โปรดทราบว่านี่คือการเปลี่ยนแปลง ABI แม้ว่าอินเทอร์เฟซของฟังก์ชันไลบรารีจำนวนมากจะ
จะไม่ได้รับผลกระทบหากไม่ได้ใช้โหมดเวกเตอร์ SIMD ในสถานที่ที่ส่งผลต่อขนาด
และ/หรือการจัดตำแหน่งประเภทที่เกี่ยวข้อง

-msplit-vecmove-ต้น
แยกเวกเตอร์ย้ายเป็นการย้ายคำเดียวก่อนโหลดซ้ำ ตามทฤษฎีแล้วสิ่งนี้สามารถให้
การจัดสรรการลงทะเบียนที่ดีขึ้น แต่จนถึงขณะนี้ดูเหมือนว่าจะกลับกันโดยทั่วไป

-m1reg-reg
ระบุรีจิสเตอร์เพื่อเก็บค่าคงที่ -1 ซึ่งทำให้โหลดค่าลบเล็กน้อย
ค่าคงที่และบิตมาสก์บางตัวเร็วขึ้น ค่าที่อนุญาตสำหรับ reg คือ r43 และ r63
ซึ่งกำหนดให้ใช้ทะเบียนนั้นเป็นทะเบียนประจำ และไม่มี หมายความว่าไม่มี
การลงทะเบียนใช้เพื่อจุดประสงค์นี้ ค่าเริ่มต้นคือ -m1reg-ไม่มี.

AAArch64 Options

ตัวเลือกเหล่านี้ถูกกำหนดไว้สำหรับการใช้งาน AArch64:

-mbig-endian
สร้างรหัส big-endian นี่เป็นค่าเริ่มต้นเมื่อกำหนดค่า GCC สำหรับ an
aarch64_be-*-* เป้า

-mgeneral-regs-เท่านั้น
สร้างรหัสที่ใช้เฉพาะการลงทะเบียนทั่วไป

-little-endian
สร้างโค้ด little-endian นี่เป็นค่าเริ่มต้นเมื่อกำหนดค่า GCC สำหรับ an
aarch64-*-* แต่ไม่ใช่ aarch64_be-*-* เป้า

-mcmodel=จิ๋ว
สร้างโค้ดสำหรับโมเดลโค้ดขนาดเล็ก โปรแกรมและสัญลักษณ์ที่กำหนดแบบคงที่
ต้องอยู่ภายใน 1GB ของกันและกัน พอยน์เตอร์คือ 64 บิต โปรแกรมสามารถเป็นแบบคงที่
หรือเชื่อมโยงแบบไดนามิก โมเดลนี้ไม่ได้ใช้งานอย่างเต็มที่และส่วนใหญ่ถือว่าเป็น
"เล็ก".

-mcmodel=เล็ก
สร้างโค้ดสำหรับโมเดลโค้ดขนาดเล็ก โปรแกรมและการกำหนดแบบคงที่
สัญลักษณ์ต้องไม่เกิน 4GB ของกันและกัน พอยน์เตอร์คือ 64 บิต โปรแกรมสามารถ
เชื่อมโยงแบบคงที่หรือแบบไดนามิก นี่คือรูปแบบรหัสเริ่มต้น

-mcmodel=ขนาดใหญ่
สร้างโค้ดสำหรับโมเดลโค้ดขนาดใหญ่ สิ่งนี้ทำให้ไม่มีข้อสันนิษฐานเกี่ยวกับที่อยู่และ
ขนาดของส่วน พอยน์เตอร์คือ 64 บิต โปรแกรมสามารถเชื่อมโยงแบบคงที่เท่านั้น

-mstrict-จัดตำแหน่ง
อย่าถือว่าระบบจะจัดการการอ้างอิงหน่วยความจำที่ไม่ได้จัดแนว

-momit-leaf-frame-ตัวชี้
-mno-ละเว้น-leaf-frame-pointer
ละเว้นหรือเก็บตัวชี้เฟรมไว้ในฟังก์ชันลีฟ พฤติกรรมเดิมคือ
ค่าเริ่มต้น.

-mtls-dialect=รายละเอียด
ใช้ตัวอธิบาย TLS เป็นกลไกการจัดเก็บเธรดในเครื่องสำหรับการเข้าถึงแบบไดนามิกของ TLS
ตัวแปร นี่คือค่าเริ่มต้น

-mtls-dialect=ดั้งเดิม
ใช้ TLS แบบดั้งเดิมเป็นกลไกการจัดเก็บเธรดในเครื่องสำหรับการเข้าถึง TLS . แบบไดนามิก
ตัวแปร

-มีนาคม=ชื่อ
ระบุชื่อของสถาปัตยกรรมเป้าหมาย หรือต่อท้ายด้วยอย่างน้อยหนึ่งรายการ
ตัวปรับเปลี่ยนคุณสมบัติ ตัวเลือกนี้มีรูปแบบ -มีนาคม=โค้ง{+[ไม่]ลักษณะ}*, ที่ไหน
ค่าสำหรับ .เท่านั้น โค้ง is armv8-ก. ค่าที่เป็นไปได้สำหรับ ลักษณะ มีการบันทึกไว้ใน
ส่วนย่อยด้านล่าง

เมื่อมีการระบุตัวดัดแปลงคุณสมบัติที่ขัดแย้งกัน จะใช้คุณสมบัติที่ถูกต้องที่สุด

GCC ใช้ชื่อนี้เพื่อกำหนดประเภทของคำสั่งที่สามารถปล่อยออกมาได้เมื่อสร้าง
รหัสการประกอบ ตัวเลือกนี้สามารถใช้ร่วมกับหรือแทน -mcpu=
ตัวเลือก

-mcpu=ชื่อ
ระบุชื่อโปรเซสเซอร์เป้าหมาย หรือไม่ก็ได้ ต่อท้ายด้วยฟีเจอร์หนึ่งรายการขึ้นไป
ตัวดัดแปลง ตัวเลือกนี้มีรูปแบบ -mcpu=ซีพียู{+[ไม่]ลักษณะ}* ถ้าเป็นไปได้
ค่าสำหรับ ซีพียู เป็น ทั่วไป, ใหญ่. ค่าที่เป็นไปได้สำหรับ ลักษณะ มีการบันทึกไว้ใน
ส่วนย่อยด้านล่าง

เมื่อมีการระบุตัวดัดแปลงคุณสมบัติที่ขัดแย้งกัน จะใช้คุณสมบัติที่ถูกต้องที่สุด

GCC ใช้ชื่อนี้เพื่อกำหนดประเภทของคำสั่งที่สามารถปล่อยออกมาได้เมื่อสร้าง
รหัสการประกอบ

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

-มีนาคม และ -mcpu ตัวปรับเปลี่ยนคุณสมบัติ

ตัวแก้ไขคุณสมบัติที่ใช้กับ -มีนาคม และ -mcpu สามารถเป็นอย่างใดอย่างหนึ่งต่อไปนี้:

การเข้ารหัสลับ
เปิดใช้งานส่วนขยาย Crypto นี่หมายความว่าเปิดใช้งาน SIMD ขั้นสูงแล้ว

fp เปิดใช้งานคำแนะนำจุดลอยตัว

ซิด
เปิดใช้งานคำแนะนำ SIMD ขั้นสูง นี่หมายถึงคำแนะนำทศนิยมคือ
เปิดใช้งาน นี่เป็นค่าเริ่มต้นสำหรับค่าที่เป็นไปได้ทั้งหมดในปัจจุบันสำหรับตัวเลือก -มีนาคม และ
-mcpu=.

ARM Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับสถาปัตยกรรม RISC Machines (ARM) ขั้นสูง:

-มาบิ=ชื่อ
สร้างรหัสสำหรับ ABI ที่ระบุ ค่าที่อนุญาตคือ: apcs-gnu, ที่ชิ้น, อ้ากก,
aapcs-ลินุกซ์ และ ฉันสบายดี.

-mapcs-เฟรม
สร้างสแต็กเฟรมที่สอดคล้องกับ ARM Procedure Call Standard for all
แม้ว่าจะไม่จำเป็นสำหรับการดำเนินการโค้ดอย่างถูกต้องก็ตาม
ระบุ -fomit-frame-ตัวชี้ ด้วยตัวเลือกนี้จะทำให้สแต็กเฟรมไม่เป็น
สร้างขึ้นสำหรับการทำงานของใบ ค่าเริ่มต้นคือ -mno-apcs-เฟรม.

-มาพีซี
นี่คือคำพ้องความหมายสำหรับ -mapcs-เฟรม.

-mthumb-การทำงานร่วมกัน
สร้างรหัสที่รองรับการโทรระหว่างชุดคำสั่ง ARM และ Thumb
หากไม่มีตัวเลือกนี้ บนสถาปัตยกรรม pre-v5 ทั้งสองชุดคำสั่งจะไม่เป็น
ใช้ได้อย่างน่าเชื่อถือภายในโปรแกรมเดียว ค่าเริ่มต้นคือ -mno-thumb-การทำงานร่วมกันตั้งแต่เล็กน้อย
รหัสที่ใหญ่กว่าจะถูกสร้างขึ้นเมื่อ -mthumb-การทำงานร่วมกัน ระบุไว้ ในการกำหนดค่า AAPCS
ตัวเลือกนี้ไม่มีความหมาย

-mno-กำหนดการอารัมภบท
ป้องกันการเรียงลำดับใหม่ของคำสั่งในบทนำของฟังก์ชัน หรือการรวมของ
คำสั่งเหล่านั้นพร้อมคำแนะนำในเนื้อหาของฟังก์ชัน ซึ่งหมายความว่าทั้งหมด
ฟังก์ชันจะเริ่มต้นด้วยชุดคำสั่งที่รู้จัก (หรืออันที่จริงแล้ว a
ทางเลือกจากบทนำของฟังก์ชันชุดเล็ก ๆ น้อย ๆ ) และข้อมูลนี้สามารถ
ใช้เพื่อค้นหาจุดเริ่มต้นหากทำงานภายในโค้ดที่สั่งการได้ ค่าเริ่มต้น
is -msched-อารัมภบท.

-mfloat-abi=ชื่อ
ระบุ ABI ทศนิยมที่จะใช้ ค่าที่อนุญาตคือ: อ่อนนุ่ม, ซอฟท์เอฟพี และ
ยาก.

ระบุ อ่อนนุ่ม ทำให้ GCC สร้างเอาต์พุตที่มีการเรียกไลบรารีสำหรับ float-
การดำเนินงานจุด ซอฟท์เอฟพี อนุญาตให้สร้างรหัสโดยใช้ฮาร์ดแวร์จุดลอยตัว
แต่ยังคงใช้แบบแผนการโทรแบบซอฟต์โฟลต ยาก ช่วยให้
การสร้างคำสั่งแบบทศนิยม และใช้แบบแผนการเรียกเฉพาะ FPU

ค่าเริ่มต้นขึ้นอยู่กับการกำหนดค่าเป้าหมายเฉพาะ โปรดทราบว่าการลอยตัวอย่างหนัก
และ ABI แบบ soft-float ไม่รองรับลิงก์ คุณต้องคอมไพล์โปรแกรมทั้งหมดด้วย
ABI เดียวกัน และลิงก์กับชุดไลบรารีที่เข้ากันได้

-little-endian
สร้างโค้ดสำหรับโปรเซสเซอร์ที่ทำงานในโหมด little-endian นี่คือค่าเริ่มต้นสำหรับ
การกำหนดค่ามาตรฐานทั้งหมด

-mbig-endian
สร้างโค้ดสำหรับโปรเซสเซอร์ที่ทำงานในโหมด big-endian ค่าเริ่มต้นคือการรวบรวม
รหัสสำหรับโปรเซสเซอร์ little-endian

-mwords-ลิตเติ้ลเอนเดียน
ตัวเลือกนี้ใช้ได้เฉพาะเมื่อสร้างโค้ดสำหรับโปรเซสเซอร์ big-endian สร้าง
รหัสสำหรับลำดับคำ endian น้อย แต่ลำดับไบต์ endian ใหญ่ นั่นคือ ไบต์
ลำดับของแบบฟอร์ม 32107654. หมายเหตุ: ควรใช้ตัวเลือกนี้เฉพาะในกรณีที่คุณต้องการ
ความเข้ากันได้กับโค้ดสำหรับโปรเซสเซอร์ ARM ขนาดใหญ่ที่สร้างโดยเวอร์ชันของ
คอมไพเลอร์ก่อน 2.8 ตัวเลือกนี้เลิกใช้แล้ว

-มีนาคม=ชื่อ
ระบุชื่อของสถาปัตยกรรม ARM เป้าหมาย GCC ใช้ชื่อนี้เพื่อ
กำหนดประเภทของคำสั่งที่สามารถปล่อยออกมาได้เมื่อสร้างรหัสแอสเซมบลี นี้
สามารถใช้ตัวเลือกร่วมกับหรือแทนตัว -mcpu= ตัวเลือก. อนุญาตให้ทำได้
ชื่อคือ: อาร์มv2, อาร์มv2a, อาร์มv3, armv3m, อาร์มv4, armv4t, อาร์มv5, armv5t, armv5e,
armv5te, อาร์มv6, armv6j, armv6t2, armv6z, armv6zk, armv6-ม, อาร์มv7, armv7-ก, armv7-ร,
armv7-ม, armv7e-m, ฉันสบายดี, iwmmxt2, ep9312.

-march=เจ้าของภาษา ทำให้คอมไพเลอร์ตรวจหาสถาปัตยกรรมของ build โดยอัตโนมัติ
คอมพิวเตอร์. ในปัจจุบัน ฟีเจอร์นี้รองรับบน Linux เท่านั้น และไม่ทั้งหมด
สถาปัตยกรรมเป็นที่ยอมรับ หากการตรวจหาอัตโนมัติไม่สำเร็จ ตัวเลือกจะไม่มี
ผล

-mtune=ชื่อ
ตัวเลือกนี้ระบุชื่อของโปรเซสเซอร์ ARM เป้าหมายที่ GCC ควรปรับแต่ง
ประสิทธิภาพของรหัส สำหรับการใช้งาน ARM บางอย่างประสิทธิภาพที่ดีขึ้นสามารถทำได้
ได้โดยใช้ตัวเลือกนี้ ชื่อที่อนุญาตคือ: arm2, arm250, arm3, arm6,
arm60, arm600, arm610, arm620, arm7, แขน7m, แขน7d, แขน7dm, arm7di, แขน7dmi, arm70,
arm700, อาร์ม700i, arm710, แขน710c, arm7100, arm720, arm7500, แขน7500fe, แขน7tdmi,
arm7tdmi-s, แขน710t, แขน720t, แขน740t, แขนที่แข็งแรง, สตรองอาร์ม110, สตรองอาร์ม1100,
สตรองอาร์ม1110, arm8, arm810, arm9, ARM9E, arm920, แขน920t, แขน922t, arm946e-s,
arm966e-s, arm968e-s, arm926ej-s, แขน940t, แขน9tdmi, แขน10tdmi, แขน1020t, arm1026ej-s,
ARM10E, ARM1020E, ARM1022E, arm1136j-s, arm1136jf-s, เอ็มพีคอร์, เอ็มพีคอร์นอฟเอฟพี, แขน1156t2-s,
แขน1156t2f-s, arm1176jz-s, arm1176jzf-s, เยื่อหุ้มสมอง -A5, เยื่อหุ้มสมอง -A7, เยื่อหุ้มสมอง -A8, เยื่อหุ้มสมอง -A9,
เยื่อหุ้มสมอง -A15, คอร์เทกซ์-r4, คอร์เท็กซ์-r4f, คอร์เทกซ์-r5, คอร์เทกซ์-m4, คอร์เทกซ์-m3, คอร์เทกซ์-m1,
คอร์เทกซ์-m0, เอ็กซ์สเกล, ฉันสบายดี, iwmmxt2, ep9312, fa526, fa626, fa606te, fa626te, fmp626,
fa726te.

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

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

-mcpu=ชื่อ
ระบุชื่อของโปรเซสเซอร์ ARM เป้าหมาย GCC ใช้ชื่อนี้เพื่อให้ได้มา
ชื่อของสถาปัตยกรรม ARM เป้าหมาย (ราวกับว่าระบุโดย -มีนาคม) และโปรเซสเซอร์ ARM
ประเภทที่จะปรับแต่งประสิทธิภาพ (ราวกับว่าระบุโดย -mtune). ที่ตัวเลือกนี้
ใช้ร่วมกับ -มีนาคม or -mtune, ตัวเลือกเหล่านั้นมีความสำคัญเหนือ
ส่วนที่เหมาะสมของตัวเลือกนี้

ชื่อที่อนุญาตสำหรับตัวเลือกนี้จะเหมือนกับชื่อสำหรับ -mtune.

-mcpu=ทั่วไป-โค้ง ยังได้รับอนุญาตและเทียบเท่ากับ -มีนาคม=โค้ง
-mtune=ทั่วไป-โค้ง. ดู -mtune สำหรับข้อมูลเพิ่มเติม

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

-mfpu=ชื่อ
-mfpe=จำนวน
-mfp=จำนวน
สิ่งนี้ระบุว่าฮาร์ดแวร์จุดลอยตัวใด (หรือการจำลองฮาร์ดแวร์) ที่พร้อมใช้งานบน
เป้าหมาย. ชื่อที่อนุญาตคือ: สพป, fpe2, fpe3, นอกรีต, วีเอฟพี, VFPV3, vfpv3-fp16,
VFPV3-D16, vfpv3-d16-fp16, vfpv3xd, vfpv3xd-fp16, ธาตุนีอ็อน, นีออน-fp16, VFPV4, VFPV4-D16,
fpv4-sp-d16 และ นีออน-vfpv4. -mfp และ -mfpe เป็นคำพ้องความหมายสำหรับ -mfpu=เอฟพีอีจำนวนสำหรับ
เข้ากันได้กับ GCC เวอร์ชันเก่า

If -msoft-ลอย ระบุ เป็นการระบุรูปแบบของค่าทศนิยม

หากฮาร์ดแวร์ทศนิยมที่เลือกมีส่วนขยาย NEON (เช่น -mfpu=ธาตุนีอ็อน),
โปรดทราบว่าการดำเนินการจุดลอยตัวจะไม่ถูกใช้โดยบัตรผ่านเวกเตอร์อัตโนมัติของ GCC
เว้นแต่ -funsafe-คณิตศาสตร์-optimizations ระบุไว้ด้วย นี่เป็นเพราะฮาร์ดแวร์นีออน
ไม่ได้ใช้มาตรฐาน IEEE 754 อย่างเต็มที่สำหรับเลขทศนิยม (in
ค่าผิดปกติจะถือเป็นศูนย์) ดังนั้นการใช้คำสั่ง NEON อาจ
นำไปสู่การสูญเสียความแม่นยำ

-mfp16-รูปแบบ=ชื่อ
ระบุรูปแบบของประเภททศนิยมครึ่งความแม่นยำ "__fp16" อนุญาตให้ทำได้
ชื่อคือ ไม่มี, อีนี่และ ทางเลือก; ค่าเริ่มต้นคือ ไม่มีซึ่งในกรณีนี้ "__fp16"
ไม่ได้กำหนดประเภท

-mstruction-size-boundary=n
ขนาดของโครงสร้างและสหภาพทั้งหมดจะถูกปัดขึ้นเป็นทวีคูณของจำนวน
ของบิตที่กำหนดโดยตัวเลือกนี้ ค่าที่อนุญาตคือ 8, 32 และ 64 ค่าเริ่มต้น
แตกต่างกันไปสำหรับ toolchains ที่แตกต่างกัน สำหรับ Toolchain เป้าหมายของ COFF ค่าเริ่มต้นคือ
8. อนุญาตให้ใช้ค่า 64 ได้ก็ต่อเมื่อ ABI พื้นฐานรองรับเท่านั้น

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

-มาบอร์-ออน-นอร์เทิร์น
สร้างการเรียกใช้ฟังก์ชัน "ยกเลิก" ที่ส่วนท้ายของฟังก์ชัน "noreturn" มันจะ
จะดำเนินการหากฟังก์ชันพยายามส่งคืน

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

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

ฟีเจอร์นี้ไม่ได้เปิดใช้งานโดยค่าเริ่มต้น ระบุ -นาทีโทรยาว จะฟื้นฟู
พฤติกรรมเริ่มต้น เช่นเดียวกับการวางการเรียกใช้ฟังก์ชันภายในขอบเขตของa #ปรากมา
long_calls_off คำสั่ง สังเกตว่าสวิตช์เหล่านี้ไม่มีผลต่อการคอมไพเลอร์
สร้างรหัสเพื่อจัดการการเรียกใช้ฟังก์ชันผ่านพอยน์เตอร์ของฟังก์ชัน

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

-mpic-register=reg
ระบุการลงทะเบียนที่จะใช้สำหรับการกำหนดที่อยู่ PIC ค่าเริ่มต้นคือ R10 เว้นแต่ stack-
เปิดใช้งานการตรวจสอบเมื่อใช้ R9

-mcirrus-fix-invalid-insns
แทรก NOPs ลงในสตรีมคำสั่งเพื่อแก้ไขปัญหาด้วย
ชุดคำสั่ง Maverick ที่ไม่ถูกต้อง ตัวเลือกนี้ใช้ได้ก็ต่อเมื่อ
-mcpu=ep9312 มีการใช้ตัวเลือกเพื่อเปิดใช้งานการสร้างคำสั่งสำหรับ Cirrus
ตัวประมวลผลร่วมจุดลอยตัวที่ไม่ฝักใฝ่ฝ่ายใด ตัวเลือกนี้ไม่ได้เปิดใช้งานโดยค่าเริ่มต้น เนื่องจาก
ปัญหามีอยู่ในการใช้งาน Maverick รุ่นเก่าเท่านั้น ค่าเริ่มต้นสามารถ re-
เปิดใช้งานโดยใช้ -mno-cirrus-fix-invalid-insns สวิตซ์.

-mpoke-ฟังก์ชั่นชื่อ
เขียนชื่อของแต่ละฟังก์ชันลงในส่วนข้อความ นำหน้าฟังก์ชัน
อารัมภบท รหัสที่สร้างขึ้นจะคล้ายกับสิ่งนี้:

t0
.ascii "arm_poke_function_name", 0
.จัด
t1
.คำ 0xff000000 + (t1 - t0)
arm_poke_function_name
มูฟ ไอพี, sp
stmfd sp!, {fp, ip, lr, พีซี}
fp ย่อย, ip, #4

เมื่อดำเนินการ stack backtrace โค้ดสามารถตรวจสอบค่าของ "pc" ที่เก็บไว้ที่ "fp +
0" หากฟังก์ชันการติดตามดูที่ตำแหน่ง "pc - 12" และ 8 บิตบนสุดคือ
กำหนดแล้วเรารู้ว่ามีชื่อฟังก์ชั่นฝังอยู่ข้างหน้านี้
ตำแหน่งและมีความยาว "((pc[-3]) & 0xff000000)"

-นิ้วหัวแม่มือ
- มาร์ม
เลือกระหว่างการสร้างโค้ดที่รันในสถานะ ARM และ Thumb ค่าเริ่มต้นสำหรับ
การกำหนดค่าส่วนใหญ่คือการสร้างโค้ดที่รันในสถานะ ARM แต่ค่าดีฟอลต์
สามารถเปลี่ยนได้โดยกำหนดค่า GCC ด้วย --ด้วยโหมด=รัฐ กำหนดค่าตัวเลือก

-mtpcs-เฟรม
สร้างสแต็กเฟรมที่สอดคล้องกับ Thumb Procedure Call Standard for
ฟังก์ชั่นที่ไม่ใช่ใบไม้ทั้งหมด (ฟังก์ชันลีฟคือฟังก์ชันที่ไม่เรียกอย่างอื่น
ฟังก์ชัน.) ค่าเริ่มต้นคือ -mno-tpcs-เฟรม.

-mtpcs-ใบไม้กรอบ
สร้างสแต็กเฟรมที่สอดคล้องกับ Thumb Procedure Call Standard for
ฟังก์ชั่นใบทั้งหมด (ฟังก์ชันลีฟคือฟังก์ชันที่ไม่เรียกใช้ฟังก์ชันอื่น)
ค่าเริ่มต้นคือ -mno-apcs-ใบไม้กรอบ.

-mcallee-super-การทำงานร่วมกัน
ให้ฟังก์ชันที่มองเห็นได้จากภายนอกทั้งหมดในไฟล์ที่คอมไพล์ด้วยคำสั่ง ARM
ตั้งค่าส่วนหัวซึ่งจะเปลี่ยนเป็นโหมด Thumb ก่อนดำเนินการส่วนที่เหลือของฟังก์ชัน
ซึ่งช่วยให้สามารถเรียกฟังก์ชันเหล่านี้จากโค้ดที่ไม่ทำงานร่วมกันได้ ตัวเลือกนี้คือ
ไม่ถูกต้องในการกำหนดค่า AAPCS เนื่องจากเปิดใช้งานการทำงานร่วมกันโดยค่าเริ่มต้น

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

-mtp=ชื่อ
ระบุรุ่นการเข้าถึงสำหรับตัวชี้ที่เก็บข้อมูลภายในเธรด รุ่นที่ถูกต้องคือ
อ่อนนุ่มซึ่งสร้างการเรียกไปที่ "__aeabi_read_tp" cp15ซึ่งดึงเธรด
ตัวชี้จาก "cp15" โดยตรง (รองรับในสถาปัตยกรรม arm6k) และ รถยนต์ซึ่ง
ใช้วิธีที่ดีที่สุดสำหรับโปรเซสเซอร์ที่เลือก ค่าเริ่มต้นคือ
รถยนต์.

-mtls ภาษา =ภาษาถิ่น
ระบุภาษาที่จะใช้สำหรับการเข้าถึงที่จัดเก็บในเครื่องของเธรด สองภาษาคือ
ได้รับการสนับสนุน --- ละมังอาฟริกาหัวคล้ายวัว และ gnu2. ละมังอาฟริกาหัวคล้ายวัว ภาษาเลือกรูปแบบ GNU ดั้งเดิมสำหรับ
รองรับโมเดล TLS แบบไดนามิกทั้งในระดับท้องถิ่นและระดับโลก NS gnu2 ภาษาถิ่นเลือก GNU
แบบแผน descriptor ซึ่งให้ประสิทธิภาพที่ดีขึ้นสำหรับไลบรารีที่แบ่งใช้ GNU
แบบแผนคำอธิบายเข้ากันได้กับแบบแผนเดิมแต่ต้องการใหม่
แอสเซมเบลอร์ ลิงค์เกอร์ และการสนับสนุนไลบรารี โมเดล exec TLS เริ่มต้นและในเครื่องคือ
ไม่ได้รับผลกระทบจากตัวเลือกนี้และใช้รูปแบบเดิมเสมอ

-mword-ย้ายตำแหน่ง
สร้างเฉพาะการย้ายตำแหน่งที่แน่นอนในค่าขนาดคำ (เช่น R_ARM_ABS32) นี่คือ
เปิดใช้งานโดยค่าเริ่มต้นบนเป้าหมาย (uClinux, SymbianOS) ที่ตัวโหลดรันไทม์กำหนด
ข้อจำกัดนี้ และเมื่อ -fpic or -fPIC ระบุไว้

-mfix-cortex-m3-ldrd
คอร์คอร์เทกซ์-M3 บางคอร์อาจทำให้ข้อมูลเสียหายได้เมื่อมีคำสั่ง "ldrd" ด้วย
ใช้ปลายทางที่ทับซ้อนกันและการลงทะเบียนฐาน ตัวเลือกนี้หลีกเลี่ยงการสร้าง
คำแนะนำเหล่านี้ ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้นเมื่อ -mcpu=คอร์เทกซ์-m3 is
ระบุไว้

-munaligned-เข้าถึง
-mno-unaligned-เข้าถึง
เปิดใช้งาน (หรือปิดใช้งาน) การอ่านและการเขียนค่า 16 และ 32 บิตจากที่อยู่
ที่ไม่ได้จัดตำแหน่งแบบ 16 หรือ 32 บิต โดยค่าเริ่มต้นการเข้าถึงแบบไม่จัดแนวจะถูกปิดใช้งานสำหรับทุกคน
ก่อน ARMv6 และสถาปัตยกรรม ARMv6-M ทั้งหมด และเปิดใช้งานสำหรับสถาปัตยกรรมอื่นๆ ทั้งหมด ถ้า
ไม่ได้เปิดใช้การเข้าถึงแบบไม่จัดแนว ดังนั้นคำในโครงสร้างข้อมูลที่อัดแน่นจะเข้าถึงได้
ครั้งละหนึ่งไบต์

แอตทริบิวต์ ARM "Tag_CPU_unaligned_access" จะถูกตั้งค่าในไฟล์วัตถุที่สร้างขึ้น
เป็นจริงหรือเท็จ ขึ้นอยู่กับการตั้งค่าของตัวเลือกนี้ ถ้าไม่ตรง
เปิดใช้งานการเข้าถึงแล้ว สัญลักษณ์ตัวประมวลผลล่วงหน้า "__ARM_FEATURE_UNALIGNED" จะเป็น
ที่กำหนดไว้

-mneon-สำหรับ-64bits
เปิดใช้งานการใช้ Neon เพื่อจัดการการดำเนินการสเกลาร์ 64 บิต สิ่งนี้ถูกปิดใช้งานโดยค่าเริ่มต้น
เนื่องจากค่าใช้จ่ายในการย้ายข้อมูลจาก core register ไปยัง Neon นั้นสูง

AVR Options

-mmcu=มจร
ระบุสถาปัตยกรรมชุดคำสั่ง Atmel AVR (ISA) หรือประเภท MCU

ค่าเริ่มต้นสำหรับตัวเลือกนี้คือ@tie{}"avr2"

GCC รองรับอุปกรณ์ AVR และ ISA ต่อไปนี้:

"เอวีอาร์2"
อุปกรณ์ "คลาสสิก" ที่มีหน่วยความจำโปรแกรมสูงสุด 8@tie{}KiB มจร@tie{}= "attiny22",
"attiny26", "at90c8534", "at90s2313", "at90s2323", "at90s2333", "at90s2343",
"at90s4414", "at90s4433", "at90s4434", "at90s8515", "at90s8535".

"เอวีอาร์25"
อุปกรณ์ "คลาสสิก" ที่มีหน่วยความจำโปรแกรมสูงสุด 8@tie{}KiB และมี "MOVW"
คำแนะนำ. มจร@tie{}= "ata6289", "attiny13", "attiny13a", "attiny2313",
"attiny2313a", "attiny24", "attiny24a", "attiny25", "attiny261", "attiny261a",
"attiny43u", "attiny4313", "attiny44", "attiny44a", "attiny45", "attiny461",
"attiny461a", "attiny48", "attiny84", "attiny84a", "attiny85", "attiny861",
"attiny861a", "attiny87", "attiny88", "at86rf401"

"เอวีอาร์3"
อุปกรณ์ "คลาสสิก" ที่มีหน่วยความจำโปรแกรม 16@tie{}KiB สูงสุด 64@tie{}KiB
มจร@tie{}= "at43usb355", "at76c711"

"เอวีอาร์31"
อุปกรณ์ "คลาสสิก" ที่มีหน่วยความจำโปรแกรม 128@tie{}KiB มจร@tie{}= "atmega103",
"at43usb320"

"เอวีอาร์35"
อุปกรณ์ "คลาสสิก" ที่มี 16@tie{}KiB สูงสุด 64@tie{}KiB ของหน่วยความจำโปรแกรมและ
คำแนะนำ "MOVW" มจร@tie{}= "atmega16u2", "atmega32u2", "atmega8u2",
"attiny167", "at90usb162", "at90usb82".

"เอวีอาร์4"
อุปกรณ์ "ปรับปรุง" ที่มีหน่วยความจำโปรแกรมสูงสุด 8@tie{}KiB มจร@ผูก{}=
"atmega48", "atmega48a", "atmega48p", "atmega8", "atmega8hva", "atmega8515",
"atmega8535", "atmega88", "atmega88a", "atmega88p", "atmega88pa", "at90pwm1",
"at90pwm2", "at90pwm2b", "at90pwm3", "at90pwm3b", "at90pwm81".

"เอวีอาร์5"
อุปกรณ์ "ปรับปรุง" ที่มีหน่วยความจำโปรแกรม 16@tie{}KiB สูงสุด 64@tie{}KiB
มจร@tie{}= "atmega16", "atmega16a", "atmega16hva", "atmega16hva2", "atmega16hvb",
"atmega16m1", "atmega16u4", "atmega161", "atmega162", "atmega163", "atmega164a",
"atmega164p", "atmega165", "atmega165a", "atmega165p", "atmega168", "atmega168a",
"atmega168p", "atmega169", "atmega169a", "atmega169p", "atmega169pa", "atmega32",
"atmega32c1", "atmega32hvb", "atmega32m1", "atmega32u4", "atmega32u6",
"atmega323", "atmega324a", "atmega324p", "atmega324pa", "atmega325", "atmega325a",
"atmega325p", "atmega3250", "atmega3250a", "atmega3250p", "atmega328",
"atmega328p", "atmega329", "atmega329a", "atmega329p", "atmega329pa",
"atmega3290", "atmega3290a", "atmega3290p", "atmega406", "atmega64", "atmega64c1",
"atmega64hve", "atmega64m1", "atmega640", "atmega644", "atmega644a", "atmega644p",
"atmega644pa", "atmega645", "atmega645a", "atmega645p", "atmega6450",
"atmega6450a", "atmega6450p", "atmega649", "atmega649a", "atmega649p",
"atmega6490", "at90can32", "at90can64", "at90pwm216", "at90pwm316", "at90scr100",
"at90usb646", "at90usb647", "at94k", "m3000"

"เอวีอาร์51"
อุปกรณ์ "ปรับปรุง" ที่มีหน่วยความจำโปรแกรม 128@tie{}KiB มจร@tie{}= "atmega128",
"atmega128rfa1", "atmega1280", "atmega1281", "atmega1284p", "at90can128",
"at90usb1286", "at90usb1287"

"เอวีอาร์6"
อุปกรณ์ "ปรับปรุง" ด้วยพีซี 3 ไบต์ เช่น มีมากกว่า 128@tie{}KiB ของโปรแกรม
หน่วยความจำ มจร@tie{}= "atmega2560", "atmega2561"

"avrxmega2"
อุปกรณ์ "XMEGA" ที่มีหน่วยความจำโปรแกรมมากกว่า 8@tie{}KiB และสูงสุด 64@tie{}KiB ของหน่วยความจำโปรแกรม
มจร@tie{}= "atxmega16a4", "atxmega16d4", "atxmega16x1", "atxmega32a4",
"atxmega32d4", "atxmega32x1"

"avrxmega4"
อุปกรณ์ "XMEGA" ที่มีมากกว่า 64@tie{}KiB และสูงสุด 128@tie{}KiB ของโปรแกรม
หน่วยความจำ มจร@tie{}= "atxmega64a3", "atxmega64d3"

"avrxmega5"
อุปกรณ์ "XMEGA" ที่มีมากกว่า 64@tie{}KiB และสูงสุด 128@tie{}KiB ของโปรแกรม
หน่วยความจำและ RAM มากกว่า 64@tie{}KiB ของ RAM มจร@tie{}= "atxmega64a1",
"atxmega64a1u"

"avrxmega6"
อุปกรณ์ "XMEGA" ที่มีหน่วยความจำโปรแกรมมากกว่า 128@tie{}KiB มจร@ผูก{}=
"atxmega128a3", "atxmega128d3", "atxmega192a3", "atxmega192d3", "atxmega256a3",
"atxmega256a3b", "atxmega256a3bu", "atxmega256d3".

"avrxmega7"
อุปกรณ์ "XMEGA" ที่มีหน่วยความจำโปรแกรมมากกว่า 128@tie{}KiB และมากกว่า
64@tie{}KiB ของ RAM มจร@tie{}= "atxmega128a1", "atxmega128a1u"

"เอวีอาร์1"
ISA นี้ใช้งานโดยแกน AVR ขั้นต่ำและรองรับแอสเซมเบลอร์เท่านั้น
มจร@tie{}= "attiny11", "attiny12", "attiny15", "attiny28", "at90s1200"

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

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

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

-mbranch-ต้นทุน=ราคา
กำหนดต้นทุนสาขาสำหรับคำสั่งสาขาแบบมีเงื่อนไขเป็น ราคา. ค่าที่สมเหตุสมผล
for ราคา เป็นจำนวนเต็มขนาดเล็กไม่เป็นลบ ต้นทุนสาขาเริ่มต้นคือ 0

-mcall-อารัมภบท
บทนำของฟังก์ชัน/บทส่งท้ายถูกขยายเป็นการเรียกไปยังรูทีนย่อยที่เหมาะสม รหัส
ขนาดมีขนาดเล็กลง

-มิ้นต์8
สมมติว่า "int" เป็นจำนวนเต็ม 8 บิต สิ่งนี้มีผลกับขนาดของทุกประเภท: "ถ่าน" คือ1
ไบต์ "int" คือ 1 ไบต์ "long" คือ 2 ไบต์และ "long long" คือ 4 ไบต์ โปรด
โปรดทราบว่าตัวเลือกนี้ไม่สอดคล้องกับมาตรฐาน C แต่ส่งผลให้มีขนาดเล็กลง
ขนาดรหัส

-mno-ขัดจังหวะ
รหัสที่สร้างขึ้นเข้ากันไม่ได้กับการขัดจังหวะของฮาร์ดแวร์ ขนาดรหัสมีขนาดเล็กลง

-mrelax
ลองเปลี่ยนการตอบกลับ "CALL" คำสั่ง "JMP" โดยคำสั่ง "RCALL" ที่สั้นกว่า “อาร์เจเอ็มพี”
คำแนะนำถ้ามี การตั้งค่า "-mrelax" เพียงเพิ่มตัวเลือก "--relax" ให้กับ
บรรทัดคำสั่งของตัวเชื่อมโยงเมื่อเรียกตัวเชื่อมโยง

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

ต้องเปิดการผ่อนคลายหากต้องการสตับลิงเกอร์ ดูหัวข้อ "EIND" และ
ต้นขั้วลิงเกอร์ด้านล่าง

-mshort-โทร
ตัวเลือกนี้เลิกใช้แล้วและจะถูกลบออกใน GCC 4.8 ดู "-mrelax" สำหรับ a
การแทนที่

ใช้คำสั่ง "RCALL"/"RJMP" แม้ในอุปกรณ์ที่มีโปรแกรม 16@tie{}KiB ขึ้นไป
หน่วยความจำ เช่น บนอุปกรณ์ที่มีคำสั่ง "CALL" และ "JMP"

-msp8
ปฏิบัติต่อการลงทะเบียนตัวชี้สแต็กเป็นรีจิสเตอร์ 8 บิต กล่าวคือ ถือว่าไบต์สูงของ
ตัวชี้สแต็กเป็นศูนย์ โดยทั่วไป คุณไม่จำเป็นต้องตั้งค่าตัวเลือกนี้ด้วยมือ

ตัวเลือกนี้ใช้ภายในโดยคอมไพเลอร์เพื่อเลือกและสร้าง multilibs for
สถาปัตยกรรม "avr2" และ "avr25" สถาปัตยกรรมเหล่านี้ผสมผสานอุปกรณ์ที่มีและไม่มี
"เอสพีเอช". สำหรับการตั้งค่าอื่นที่ไม่ใช่ "-mmcu=avr2" หรือ "-mmcu=avr25" ไดรเวอร์คอมไพเลอร์
จะเพิ่มหรือลบตัวเลือกนี้ออกจากบรรทัดคำสั่งของคอมไพเลอร์ที่เหมาะสมเพราะ
คอมไพเลอร์จะรู้ว่าอุปกรณ์หรือสถาปัตยกรรมมีตัวชี้สแต็ก 8 บิตหรือไม่
ไม่มีการลงทะเบียน "SPH" หรือไม่

-mstrit-X
ใช้การลงทะเบียนที่อยู่ "X" ในลักษณะที่ฮาร์ดแวร์เสนอ ซึ่งหมายความว่า "X" คือ
ใช้เฉพาะในการกำหนดแอดเดรสทางอ้อม หลังการเพิ่ม หรือก่อนการลด

หากไม่มีตัวเลือกนี้ การลงทะเบียน "X" อาจใช้ในลักษณะเดียวกับ "Y" หรือ "Z" ซึ่ง
จากนั้นจะถูกจำลองโดยคำแนะนำเพิ่มเติม ตัวอย่างเช่น การโหลดค่าด้วย
"X+const" ที่มี "const < 64" ที่ไม่ใช่ค่าลบเล็กน้อยในการลงทะเบียน Rn is
ทำหน้าที่เป็น

adiw r26, const ; X += ค่าคงที่
หืม , NS ; = *X
sbiw r26, const ; X -= คงที่

-mtiny-กอง
เปลี่ยนเฉพาะ 8@tie{}บิตที่ต่ำกว่าของตัวชี้สแต็กเท่านั้น

"EIND" และอุปกรณ์ที่มีแฟลชมากกว่า 128 Ki Bytes

พอยน์เตอร์ในการใช้งานมีความกว้าง 16@tie{}บิต ที่อยู่ของฟังก์ชันหรือป้ายกำกับ
ถูกแสดงเป็นที่อยู่ของคำเพื่อให้การข้ามและการเรียกโดยอ้อมสามารถกำหนดเป้าหมายรหัสใด ๆ ได้
ที่อยู่ในช่วง 64@tie{}Ki คำ

เพื่ออำนวยความสะดวกในการข้ามไปยังอุปกรณ์ที่มีมากกว่า 128@tie{}Ki ไบต์ของ
พื้นที่หน่วยความจำของโปรแกรมมีการลงทะเบียนฟังก์ชั่นพิเศษที่เรียกว่า "EIND" ที่ทำหน้าที่เป็น
ส่วนที่สำคัญที่สุดของที่อยู่เป้าหมายเมื่อคำสั่ง "EICALL" หรือ "EIJMP" เป็น
มือสอง

การข้ามและการเรียกทางอ้อมบนอุปกรณ์เหล่านี้ได้รับการจัดการดังนี้โดยคอมไพเลอร์และ are
ภายใต้ข้อจำกัดบางประการ:

· คอมไพเลอร์ไม่เคยตั้งค่า "EIND"

· คอมไพเลอร์ใช้ "EIND" โดยปริยายในคำสั่ง "EICALL"/"EIJMP" หรืออาจอ่านได้
"EIND" โดยตรงเพื่อจำลองการโทร/กระโดดโดยอ้อมโดยใช้ "RET"
คำแนะนำ.

· คอมไพเลอร์ถือว่า "EIND" ไม่เคยเปลี่ยนแปลงระหว่างรหัสเริ่มต้นหรือระหว่าง
แอปพลิเคชัน. โดยเฉพาะอย่างยิ่ง "EIND" จะไม่ถูกบันทึก/กู้คืนในฟังก์ชันหรือขัดจังหวะ
อารัมภบท/บทส่งท้ายบริการตามปกติ

· สำหรับการเรียกใช้ฟังก์ชันทางอ้อมและ goto ที่คำนวณ ตัวเชื่อมโยงจะสร้าง ไม่สมบูรณ์. สตับ
เป็นแผ่นกระโดดที่บางครั้งเรียกว่า แทรมโพลีน. ดังนั้นการโทรทางอ้อม/กระโดดข้ามไปที่
ต้นขั้วดังกล่าว ต้นขั้วมีการข้ามไปยังที่อยู่ที่ต้องการโดยตรง

· ต้องเปิดการคลายตัวของลิงเกอร์เพื่อให้ตัวเชื่อมโยงสร้างส่วนท้าย
ถูกต้องตามสถานการณ์ทั้งหมด ดูตัวเลือกคอมไพเลอร์ "-mrelax" และตัวเลือก linler
"--ผ่อนคลาย". มีบางกรณีที่ตัวเชื่อมโยงควรจะสร้างต้นขั้วแต่
ยกเลิกโดยไม่ผ่อนปรนและไม่มีข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์

· สคริปต์ตัวเชื่อมโยงเริ่มต้นถูกจัดเรียงสำหรับโค้ดด้วย "EIND = 0" หากรหัสควรจะ
ในการทำงานสำหรับการตั้งค่าด้วย "EIND != 0" ต้องใช้สคริปต์ตัวเชื่อมโยงที่กำหนดเองตามลำดับ
เพื่อวางส่วนที่มีชื่อขึ้นต้นด้วย ".trampolines" ในส่วนที่
"EIND" ชี้ไปที่

· รหัสเริ่มต้นจาก libgcc ไม่เคยตั้งค่า "EIND" สังเกตว่าโค้ดเริ่มต้นเป็นแบบผสมผสาน
ของโค้ดจาก libgcc และ AVR-LibC สำหรับผลกระทบของ AVR-LibC ต่อ "EIND" โปรดดูที่ AVR-
คู่มือผู้ใช้ LibC ("http://nongnu.org/avr-libc/user-manual/")

· ถูกต้องตามกฎหมายสำหรับรหัสเริ่มต้นเฉพาะผู้ใช้ในการตั้งค่า "EIND" ก่อน เช่น by
หมายถึงรหัสเริ่มต้นที่อยู่ในส่วน ".init3" รหัสดังกล่าวทำงานก่อน
รหัสเริ่มต้นทั่วไปที่เริ่มต้น RAM และเรียกตัวสร้าง แต่หลังจากบิตของ
รหัสเริ่มต้นจาก AVR-LibC ที่ตั้งค่า "EIND" เป็นเซ็กเมนต์ที่ตารางเวกเตอร์คือ
ที่ตั้งอยู่

#รวม

โมฆะคง
__attribute__((section(".init3"),เปล่า,ใช้แล้ว,no_instrument_function))
init3_set_eind (เป็นโมฆะ)
{
__asm ​​ระเหย ("ldi r24,pm_hh8(__trampolines_start)\n\t"
"ออก %i0,r24" :: "n" (&EIND) : "r24","memory");
}

สัญลักษณ์ "__trampolines_start" ถูกกำหนดไว้ในสคริปต์ตัวเชื่อมโยง

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

-
(ย่อจาก สร้าง ไม่สมบูรณ์) เช่นนั้น:

LDI r24, lo8(gs( ))
LDI r25, hi8(gs( ))

-
ด้านนอก ส่วนที่มีต้นขั้วอยู่

· คอมไพเลอร์ปล่อยตัวดัดแปลง "gs" ดังกล่าวสำหรับป้ายกำกับโค้ดในสถานการณ์ต่อไปนี้:

-
-
- -mcall-อารัมภบท>
ตัวเลือกบรรทัดคำสั่ง

-
ตารางที่คุณสามารถระบุ -fno-กระโดดตาราง ตัวเลือกบรรทัดคำสั่ง

-
-
· ข้ามไปยังที่อยู่ที่ไม่ใช่สัญลักษณ์เหมือนเช่น ไม่ สนับสนุน:

int หลัก (เป็นโมฆะ)
{
/* เรียกฟังก์ชันที่คำแอดเดรส 0x2 */
ผลตอบแทน ((int(*)(เป็นโมฆะ)) 0x2)();
}

จะต้องตั้งค่าต้นขั้วแทน กล่าวคือ ฟังก์ชั่นต้องถูกเรียกผ่านสัญลักษณ์
("func_4" ในตัวอย่าง):

int หลัก (เป็นโมฆะ)
{
extern int func_4 (เป็นโมฆะ);

/* เรียกฟังก์ชันตามที่อยู่ไบต์ 0x4 */
กลับ func_4();
}

และแอปพลิเคชันเชื่อมโยงกับ "-Wl,--defsym,func_4=0x4" อีกวิธีหนึ่งคือ "func_4"
สามารถกำหนดได้ในสคริปต์ตัวเชื่อมโยง

การจัดการรีจิสเตอร์ฟังก์ชันพิเศษ "RAMPD", "RAMPX", "RAMPY" และ "RAMPZ"

อุปกรณ์ AVR บางตัวรองรับหน่วยความจำที่ใหญ่กว่า 64@tie{}ช่วง KiB ที่สามารถเข้าถึงได้
ด้วยพอยน์เตอร์ 16 บิต ในการเข้าถึงตำแหน่งหน่วยความจำที่อยู่นอกช่วง 64@tie{}ช่วง KiB นี้
เนื้อหาของการลงทะเบียน "RAMP" ใช้เป็นส่วนสูงของที่อยู่: "X", "Y", "Z"
การลงทะเบียนที่อยู่เชื่อมต่อกับฟังก์ชันพิเศษ "RAMPX", "RAMPY", "RAMPZ"
ลงทะเบียนตามลำดับเพื่อรับที่อยู่กว้าง ในทำนองเดียวกัน "RAMPD" ใช้ร่วมกับ
ที่อยู่โดยตรง

· รหัสเริ่มต้นเริ่มต้นฟังก์ชันพิเศษ "RAMP" ลงทะเบียนด้วยศูนย์

· ถ้า AVR ที่มีชื่อ ที่อยู่ ช่องว่างที่ชื่อว่า ที่อยู่ ช่องว่าง นอกเหนือจากทั่วไปหรือ "__flash" is
ใช้แล้ว "RAMPZ" จะถูกตั้งค่าตามต้องการก่อนดำเนินการ

· หากอุปกรณ์รองรับ RAM ที่ใหญ่กว่า 64@tie{KiB} และคอมไพเลอร์จำเป็นต้องเปลี่ยน
"RAMPZ" เพื่อดำเนินการให้สำเร็จ "RAMPZ" จะถูกรีเซ็ตเป็นศูนย์หลังการดำเนินการ

· หากอุปกรณ์มาพร้อมกับการลงทะเบียน "RAMP" เฉพาะ อารัมภบท/บทส่งท้ายของ ISR
บันทึก/กู้คืน SFR นั้นและเริ่มต้นด้วยศูนย์ในกรณีที่รหัส ISR อาจ
(โดยปริยาย) ใช้มัน

· GCC ไม่รองรับ RAM ที่ใหญ่กว่า 64@tie{KiB} สำหรับเป้าหมาย AVR ถ้าคุณใช้
แอสเซมเบลอร์แบบอินไลน์เพื่ออ่านจากตำแหน่งที่อยู่นอกช่วงที่อยู่ 16 บิตและการเปลี่ยนแปลง
หนึ่งในการลงทะเบียน "RAMP" คุณต้องรีเซ็ตเป็นศูนย์หลังจากการเข้าถึง

มาโคร AVR ในตัว

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

สำหรับมาโครในตัวที่เจาะจง AVR มากขึ้น ดูที่ AVR ที่มีชื่อ ที่อยู่ Spaces และ AVR Built-in
ฟังก์ชั่น.

"__AVR_ARCH__"
มาโครบิวด์อินที่แก้ไขเป็นตัวเลขทศนิยมที่ระบุสถาปัตยกรรมและ
ขึ้นอยู่กับ "-mmcu=เอ็มซียู" ตัวเลือก. ค่าที่เป็นไปได้คือ:

2, 25, 3, 31, 35, 4, 5, 51, 6, 102, 104, 105, 106, 107

for มจร="avr2", "avr25", "avr3", "avr31", "avr35", "avr4", "avr5", "avr51", "avr6",
"avrxmega2", "avrxmega4", "avrxmega5", "avrxmega6", "avrxmega7" ตามลำดับ ถ้า มจร
ระบุอุปกรณ์ มาโครในตัวนี้ถูกตั้งค่าตามนั้น ตัวอย่างเช่น กับ
"-mmcu=atmega8" มาโครจะถูกกำหนดเป็น 4

"__AVR_อุปกรณ์__"
การตั้งค่า "-mmcu=อุปกรณ์" กำหนดมาโครในตัวซึ่งสะท้อนถึงชื่ออุปกรณ์
ตัวอย่างเช่น "-mmcu=atmega8" กำหนดมาโครในตัว "__AVR_ATmega8__"
"-mmcu=attiny261a" กำหนด "__AVR_ATtiny261A__" เป็นต้น

ชื่อของมาโครในตัวเป็นไปตามรูปแบบ "__AVR_อุปกรณ์__" ที่ไหน อุปกรณ์ คือ
ชื่ออุปกรณ์ตามคู่มือผู้ใช้ AVR ความแตกต่างระหว่าง อุปกรณ์ ในตัว
มาโครและ เครื่อง ใน "-mmcu=อุปกรณ์" คือตัวหลังจะเป็นตัวพิมพ์เล็กเสมอ

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

"__AVR_XMEGA__"
อุปกรณ์/สถาปัตยกรรมเป็นของตระกูลอุปกรณ์ XMEGA

"__AVR_HAVE_ELPM__"
อุปกรณ์มีคำสั่ง "ELPM"

"__AVR_HAVE_ELPMX__"
อุปกรณ์มี "ELPM Rน,ซี" และ "ELPM Rน,Z+" คำแนะนำ

"__AVR_HAVE_MOVW__"
อุปกรณ์มีคำสั่ง "MOVW" เพื่อดำเนินการย้าย register-register 16 บิต

"__AVR_HAVE_LPMX__"
อุปกรณ์มี "LPM Rน,ซี" และ "LPM Rน,Z+" คำแนะนำ

"__AVR_HAVE_MUL__"
อุปกรณ์มีตัวคูณฮาร์ดแวร์

"__AVR_HAVE_JMP_CALL__"
อุปกรณ์มีคำแนะนำ "JMP" และ "CALL" นี่เป็นกรณีสำหรับอุปกรณ์ที่มี
หน่วยความจำโปรแกรมอย่างน้อย 16@tie{}KiB และหากไม่ได้ตั้งค่า "-mshort-calls"

"__AVR_HAVE_EIJMP_EICALL__"
"__AVR_3_BYTE_PC__"
อุปกรณ์มีคำแนะนำ "EIJMP" และ "EICALL" นี่คือกรณีของอุปกรณ์
ด้วยหน่วยความจำโปรแกรมมากกว่า 128@tie{}KiB นี่ก็หมายความว่าโปรแกรม
ตัวนับ (PC) กว้าง 3@tie{}ไบต์กว้าง

"__AVR_2_BYTE_PC__"
ตัวนับโปรแกรม (PC) มีความกว้าง 2@tie{}ไบต์ นี่เป็นกรณีสำหรับอุปกรณ์ที่มีมากถึง
128@tie{}KiB ของหน่วยความจำโปรแกรม

"__AVR_HAVE_8BIT_SP__"
"__AVR_HAVE_16BIT_SP__"
รีจิสเตอร์สแต็กพอยน์เตอร์ (SP) จะถือว่าเป็นรีจิสเตอร์แบบ 8 บิตตามลำดับ 16 บิตโดย
คอมไพเลอร์ คำจำกัดความของมาโครเหล่านี้ได้รับผลกระทบจาก "-mtiny-stack"

"__AVR_HAVE_SPH__"
"__AVR_SP8__"
อุปกรณ์มีการลงทะเบียนฟังก์ชันพิเศษ SPH (ส่วนสูงของตัวชี้สแต็ก) หรือ has
ตัวชี้สแต็ก 8 บิต ตามลำดับ คำจำกัดความของมาโครเหล่านี้ได้รับผลกระทบจาก
"-mmcu=" และในกรณีของ "-mmcu=avr2" และ "-mmcu=avr25" โดย "-msp8" ด้วย

"__AVR_HAVE_RAMPD__"
"__AVR_HAVE_RAMPX__"
"__AVR_HAVE_RAMPY__"
"__AVR_HAVE_RAMPZ__"
อุปกรณ์มีการลงทะเบียนฟังก์ชั่นพิเศษ "RAMPD", "RAMPX", "RAMPY", "RAMPZ"
ตามลำดับ

"__NO_INTERRUPTS__"
มาโครนี้สะท้อนถึงตัวเลือกบรรทัดคำสั่ง "-mno-interrupts"

"__AVR_ERRATA_SKIP__"
"__AVR_ERRATA_SKIP_JMP_CALL__"
อุปกรณ์ AVR บางตัว (AT90S8515, ATmega103) ต้องไม่ข้ามคำสั่งแบบ 32 บิตเนื่องจาก a
ข้อผิดพลาดของฮาร์ดแวร์ คำแนะนำในการข้ามคือ "SBRS", "SBRC", "SBIS", "SBIC" และ "CPSE"
มาโครที่สองถูกกำหนดไว้ก็ต่อเมื่อตั้งค่า "__AVR_HAVE_JMP_CALL__" ด้วย

"__AVR_SFR_OFFSET__=ชดเชย"
คำแนะนำที่สามารถระบุการลงทะเบียนฟังก์ชันพิเศษของ I/O ได้โดยตรงเช่น "IN"
"ออก", "SBI" ฯลฯ อาจใช้ที่อยู่อื่นเสมือนกับคำสั่งที่ส่งถึง
เข้าถึง RAM เช่น "LD" หรือ "STS" ออฟเซ็ตนี้ขึ้นอยู่กับสถาปัตยกรรมของอุปกรณ์และมี
ให้ลบออกจากที่อยู่ RAM เพื่อรับที่อยู่ I/O@tie{} ตามลำดับ

"__WITH_AVRLIBC__"
คอมไพเลอร์ได้รับการกำหนดค่าให้ใช้ร่วมกับ AVR-Libc ดู
"--with-avrlibc" กำหนดค่าตัวเลือก

Blackfin Options

-mcpu=ซีพียู[-การตรวจทาน]
ระบุชื่อของตัวประมวลผล Blackfin เป้าหมาย ปัจจุบัน, ซีพียู สามารถเป็นหนึ่งใน
bf512, bf514, bf516, bf518, bf522, bf523, bf524, bf525, bf526, bf527, bf531, bf532,
bf533, bf534, bf536, bf537, bf538, bf539, bf542, bf544, bf547, bf548, bf549, bf542m,
bf544m, bf547m, bf548m, bf549m, bf561, bf592. ตัวเลือก การตรวจทาน ระบุไฟล์
การแก้ไขซิลิคอนของโปรเซสเซอร์ Blackfin เป้าหมาย วิธีแก้ปัญหาใด ๆ ที่มีให้สำหรับ
จะเปิดใช้การแก้ไขซิลิโคนเป้าหมาย ถ้า การตรวจทาน is ไม่มี, ไม่มีวิธีแก้ปัญหาคือ
เปิดใช้งาน ถ้า การตรวจทาน is ใด, วิธีแก้ไขปัญหาชั่วคราวทั้งหมดสำหรับโปรเซสเซอร์เป้าหมายจะเป็น
เปิดใช้งาน มาโคร "__SILICON_REVISION__" ถูกกำหนดให้เป็นเลขฐานสิบหกสองหลัก
แทนตัวเลขหลักและรองในการแก้ไขซิลิกอน ถ้า การตรวจทาน is
ไม่มีไม่ได้กำหนด "__SILICON_REVISION__" ถ้า การตรวจทาน is ใดที่
"__SILICON_REVISION__" ถูกกำหนดให้เป็น 0xffff หากเป็นทางเลือกนี้ การตรวจทาน ไม่ใช่
ใช้แล้ว GCC ถือว่าการแก้ไขซิลิกอนล่าสุดของ Blackfin . ที่เป็นเป้าหมาย
หน่วยประมวลผล

การสนับสนุนสำหรับ bf561 ไม่สมบูรณ์ สำหรับ bf561, กำหนดเฉพาะมาโครโปรเซสเซอร์เท่านั้น
หากไม่มีตัวเลือกนี้ bf532 ถูกใช้เป็นตัวประมวลผลโดยค่าเริ่มต้น ที่สอดคล้องกัน
มาโครโปรเซสเซอร์ที่กำหนดไว้ล่วงหน้าสำหรับ ซีพียู จะต้องถูกกำหนด และสำหรับ bfin-เอลฟ์ ห่วงโซ่เครื่องมือ,
สิ่งนี้ทำให้ฮาร์ดแวร์ BSP ที่ libgloss จัดหาให้ถูกเชื่อมโยงใน if -msim ไม่ใช่
ให้

-msim
ระบุว่าโปรแกรมจะทำงานบนเครื่องจำลอง สิ่งนี้ทำให้เกิดเครื่องจำลอง
BSP ที่จัดเตรียมโดย libgloss ที่จะเชื่อมโยงเข้ามา ตัวเลือกนี้มีผลเฉพาะสำหรับ bfin-เอลฟ์
ห่วงโซ่เครื่องมือ ตัวเลือกอื่นๆ เช่น -middle-shared-library และ -mfdpic, หมายถึง
-msim.

-momit-leaf-frame-ตัวชี้
อย่าเก็บตัวชี้เฟรมไว้ในรีจิสเตอร์สำหรับฟังก์ชันลีฟ สิ่งนี้จะหลีกเลี่ยง
คำแนะนำในการบันทึก ตั้งค่า และกู้คืนตัวชี้เฟรม และทำการลงทะเบียนพิเศษ
ที่มีอยู่ในฟังก์ชั่นใบ ทางเลือก -fomit-frame-ตัวชี้ ถอดกรอบออก
ตัวชี้สำหรับฟังก์ชันทั้งหมด ซึ่งอาจทำให้การดีบักยากขึ้น

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

-mno-specld-ความผิดปกติ
อย่าสร้างโค้ดพิเศษเพื่อป้องกันไม่ให้เกิดการโหลดแบบคาดเดา

-mcsync-ความผิดปกติ
เมื่อเปิดใช้งาน คอมไพเลอร์จะทำให้แน่ใจว่าโค้ดที่สร้างขึ้นไม่มี CSYNC
หรือคำสั่ง SSYNC เร็วเกินไปหลังจากกิ่งแบบมีเงื่อนไข หากใช้ตัวเลือกนี้
กำหนด "__WORKAROUND_SPECULATIVE_SYNCS" แล้ว

-mno-csync-ความผิดปกติ
อย่าสร้างโค้ดพิเศษเพื่อป้องกันไม่ให้คำสั่ง CSYNC หรือ SSYNC เกิดขึ้นด้วย
ไม่นานหลังจากกิ่งแบบมีเงื่อนไข

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

-mno-ต่ำ-64k
สมมติว่าโปรแกรมมีขนาดใหญ่โดยพลการ นี่คือค่าเริ่มต้น

-mstack-ตรวจสอบ-l1
ทำการตรวจสอบสแต็คโดยใช้ข้อมูลที่ใส่ลงในหน่วยความจำ L1 scratchpad โดย uClinux
เมล็ด

-middle-shared-library
สร้างรหัสที่รองรับไลบรารีที่แชร์ผ่านวิธีรหัสไลบรารี สิ่งนี้ทำให้
สำหรับดำเนินการในสถานที่และไลบรารีที่ใช้ร่วมกันในสภาพแวดล้อมที่ไม่มีหน่วยความจำเสมือน
การจัดการ. ตัวเลือกนี้หมายถึง -fPIC. กับ bfin-เอลฟ์ เป้าหมาย ตัวเลือกนี้หมายถึง
-msim.

-mno-id-shared-library
สร้างรหัสที่ไม่ถือว่ามีการใช้ไลบรารีที่ใช้ร่วมกันแบบอิง ID นี่คือ
ค่าเริ่มต้น

-mleaf-id-shared-library
สร้างรหัสที่รองรับไลบรารีที่แชร์ผ่านวิธีรหัสห้องสมุด แต่ถือว่า
ว่าไลบรารี่หรือไฟล์สั่งการนี้จะไม่เชื่อมโยงกับไลบรารี ID อื่นที่แชร์
ที่ช่วยให้คอมไพเลอร์ใช้โค้ดที่เร็วขึ้นสำหรับการข้ามและการโทร

-mno-leaf-id-shared-library
อย่าคิดเอาเองว่าโค้ดที่คอมไพล์จะไม่เชื่อมโยงกับไลบรารี่ที่ใช้ร่วมกันของ ID
รหัสที่ช้าลงจะถูกสร้างขึ้นสำหรับการกระโดดและการโทร

-msshared-library-id=n
ระบุหมายเลขประจำตัวของไลบรารีที่ใช้ร่วมกันตาม ID ที่กำลังคอมไพล์
การระบุค่า 0 จะสร้างโค้ดที่กระชับมากขึ้น โดยการระบุค่าอื่นๆ จะ
บังคับให้จัดสรรหมายเลขนั้นให้กับห้องสมุดปัจจุบัน แต่ไม่มีที่ว่างหรือ
เวลามีประสิทธิภาพมากกว่าการละเว้นตัวเลือกนี้

-msep-ข้อมูล
สร้างรหัสที่อนุญาตให้ส่วนข้อมูลอยู่ในพื้นที่ต่าง ๆ ของหน่วยความจำ
จากส่วนข้อความ ซึ่งช่วยให้ดำเนินการในสถานที่ในสภาพแวดล้อมโดยไม่ต้อง
การจัดการหน่วยความจำเสมือนโดยกำจัดการโยกย้ายกับส่วนข้อความ

-mno-sep-ข้อมูล
สร้างรหัสที่ถือว่าส่วนข้อมูลตามส่วนข้อความ นี่คือ
ค่าเริ่มต้น

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

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

-mfast-fp
เชื่อมโยงกับไลบรารีจุดลอยตัวที่รวดเร็ว ห้องสมุดนี้ทำให้ IEEE . บางส่วนผ่อนคลาย
กฎมาตรฐานทศนิยมในการตรวจสอบอินพุตกับ Not-a-Number (NAN) ใน
ความสนใจของประสิทธิภาพ

-minline-plt
เปิดใช้งานอินไลน์ของรายการ PLT ในการเรียกใช้ฟังก์ชันไปยังฟังก์ชันที่ไม่รู้จัก
ผูกท้องถิ่น ไม่มีผลอะไรถ้าไม่มี -mfdpic.

-มัลติคอร์
สร้างแอปพลิเคชันแบบสแตนด์อโลนสำหรับโปรเซสเซอร์ Blackfin แบบมัลติคอร์ ไฟล์เริ่มต้นที่เหมาะสมและ
สคริปต์ลิงก์จะใช้เพื่อรองรับมัลติคอร์ ตัวเลือกนี้กำหนด
"__BFIN_MULTICORE". ใช้ได้เฉพาะกับ -mcpu=bf561[-การตรวจทาน]. ใช้ได้เลย
กับ -mcorea or -mcoreb. หากใช้โดยไม่ใช้ -mcorea or -mcoreb, เดี่ยว
ใช้โมเดลการเขียนโปรแกรมแอปพลิเคชัน/ดูอัลคอร์ ในรุ่นนี้ หน้าที่หลักของ
Core B ควรตั้งชื่อเป็น coreb_main หากใช้กับ -mcorea or -mcorebอย่างใดอย่างหนึ่ง
ใช้แอปพลิเคชันต่อโมเดลการเขียนโปรแกรมหลัก หากไม่ได้ใช้ตัวเลือกนี้ single
ใช้โมเดลการเขียนโปรแกรมแอปพลิเคชันหลัก

-mcorea
สร้างแอปพลิเคชันแบบสแตนด์อโลนสำหรับ Core A ของ BF561 เมื่อใช้หนึ่งแอปพลิเคชันต่อคอร์
รูปแบบการเขียนโปรแกรม ไฟล์เริ่มต้นและสคริปต์ลิงก์ที่เหมาะสมจะใช้เพื่อรองรับ Core A
ตัวเลือกนี้กำหนด "__BFIN_COREA" ต้องใช้กับ -มัลติคอร์.

-mcoreb
สร้างแอปพลิเคชันแบบสแตนด์อโลนสำหรับ Core B ของ BF561 เมื่อใช้หนึ่งแอปพลิเคชันต่อคอร์
รูปแบบการเขียนโปรแกรม ไฟล์เริ่มต้นและสคริปต์ลิงก์ที่เหมาะสมจะใช้เพื่อรองรับ Core B
ตัวเลือกนี้กำหนด "__BFIN_COREB" เมื่อใช้ตัวเลือกนี้ coreb_main ควรเป็น
ใช้แทนตัวหลัก ต้องใช้กับ -มัลติคอร์.

-msdram
สร้างแอปพลิเคชันแบบสแตนด์อโลนสำหรับ SDRAM ไฟล์เริ่มต้นที่เหมาะสมและสคริปต์ลิงก์จะเป็น
ใช้สำหรับใส่แอปพลิเคชันลงใน SDRAM ตัวโหลดควรเริ่มต้น SDRAM ก่อนโหลด
แอปพลิเคชันลงใน SDRAM ตัวเลือกนี้กำหนด "__BFIN_SDRAM"

-micplb
สมมติว่ามีการเปิดใช้งาน ICPLBs ในขณะใช้งาน สิ่งนี้มีผลกระทบต่อความผิดปกติบางอย่าง
วิธีแก้ปัญหา สำหรับเป้าหมาย Linux ค่าเริ่มต้นคือถือว่าเปิดใช้งาน ICPLBs สำหรับ
แอปพลิเคชันแบบสแตนด์อโลน ค่าเริ่มต้นคือปิด

ซีทูเอ็กซ์ Options

-มีนาคม=ชื่อ
ระบุชื่อของสถาปัตยกรรมเป้าหมาย GCC ใช้ชื่อนี้เพื่อกำหนด
คำสั่งประเภทใดที่สามารถปล่อยออกมาได้เมื่อสร้างรหัสแอสเซมบลี อนุญาตให้ทำได้
ชื่อคือ: ซีทูเอ็กซ์, ซีทูเอ็กซ์, c64x+, ซีทูเอ็กซ์, c67x+, ซีทูเอ็กซ์.

-mbig-endian
สร้างโค้ดสำหรับเป้าหมาย big-endian

-little-endian
สร้างโค้ดสำหรับเป้าหมาย little-endian นี่คือค่าเริ่มต้น

-msim
เลือกไฟล์เริ่มต้นและสคริปต์ตัวเชื่อมโยงที่เหมาะสมกับโปรแกรมจำลอง

-msdata=ค่าเริ่มต้น
ใส่ข้อมูลระดับโลกและแบบคงที่ขนาดเล็กลงใน .neardata ส่วนซึ่งชี้ไปที่
ลงทะเบียน "B14" ใส่ข้อมูลส่วนกลางและสแตติกที่ไม่ได้กำหนดค่าเริ่มต้นขนาดเล็กลงใน .bss มาตรา,
ซึ่งอยู่ติดกับ .neardata ส่วน. ใส่ข้อมูลแบบอ่านอย่างเดียวขนาดเล็กลงใน .โรดาต้า
ส่วน. ส่วนที่เกี่ยวข้องกันที่ใช้สำหรับข้อมูลขนาดใหญ่คือ .ฟาร์ดาต้า, .ไกล
และ .const.

-msdata=ทั้งหมด
ใส่ข้อมูลทั้งหมด ไม่ใช่แค่วัตถุขนาดเล็ก ลงในส่วนที่สงวนไว้สำหรับข้อมูลขนาดเล็ก และ
ใช้ที่อยู่สัมพันธ์กับการลงทะเบียน "B14" เพื่อเข้าถึง

-msdata=ไม่มี
ไม่ใช้ส่วนที่สงวนไว้สำหรับข้อมูลขนาดเล็ก และใช้ที่อยู่ที่แน่นอนเพื่อ
เข้าถึงข้อมูลทั้งหมด ใส่ข้อมูลส่วนกลางและแบบคงที่ที่เริ่มต้นทั้งหมดลงใน .ฟาร์ดาต้า มาตรา,
และข้อมูลที่ไม่ได้กำหนดค่าเริ่มต้นทั้งหมดใน .ไกล ส่วน. ใส่ข้อมูลคงที่ทั้งหมดลงใน .const
มาตรา.

คริส Options

ตัวเลือกเหล่านี้ถูกกำหนดไว้โดยเฉพาะสำหรับพอร์ต CRIS

-มีนาคม=สถาปัตยกรรมประเภท
-mcpu=สถาปัตยกรรมประเภท
สร้างรหัสสำหรับสถาปัตยกรรมที่ระบุ ทางเลือกของ สถาปัตยกรรมประเภท เป็น
v3, v8 และ v10 สำหรับ ETRAX 4, ETRAX 100 และ ETRAX 100 LX ตามลำดับ ค่าเริ่มต้นคือ v0
ยกเว้น cris-axis-linux-gnu โดยที่ค่าดีฟอลต์คือ v10.

-mtune=สถาปัตยกรรมประเภท
ปรับไปที่ สถาปัตยกรรมประเภท ทุกอย่างที่เกี่ยวข้องกับโค้ดที่สร้างขึ้น ยกเว้นสำหรับ
ABI และชุดคำสั่งที่มี ทางเลือกของ สถาปัตยกรรมประเภท เป็น
เช่นเดียวกับสำหรับ -มีนาคม=สถาปัตยกรรมประเภท.

-mmax-stack-frame=n
เตือนเมื่อสแต็กเฟรมของฟังก์ชันเกิน n ไบต์

-metrax4
-metrax100
ตัวเลือกต่างๆ -metrax4 และ -metrax100 เป็นคำพ้องความหมายสำหรับ -มีนาคม=v3 และ -มีนาคม=v8
ตามลำดับ

-mmul-bug-วิธีแก้ปัญหา
-mno-mul-bug-วิธีแก้ปัญหา
แก้ไขข้อผิดพลาดในคำแนะนำ "muls" และ "mulu" สำหรับรุ่น CPU ที่มัน
ใช้ ตัวเลือกนี้จะเปิดใช้งานโดยค่าเริ่มต้น

-mpdebug
เปิดใช้งานข้อมูลที่เกี่ยวข้องกับการดีบัก verbose เฉพาะ CRIS ในรหัสแอสเซมบลี นี้
ตัวเลือกยังมีผลในการปิด #NO_APP ตัวบ่งชี้ที่จัดรูปแบบรหัสเพื่อ
แอสเซมเบลอร์ที่จุดเริ่มต้นของไฟล์แอสเซมบลี

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

-mno-ผลข้างเคียง
ห้ามส่งคำสั่งที่มีผลข้างเคียงในโหมดการกำหนดที่อยู่นอกเหนือจากหลัง-
เพิ่มขึ้น

-mstack-จัดตำแหน่ง
-mno-stack-จัดตำแหน่ง
-mdata-จัดตำแหน่ง
-mno-ข้อมูลจัด
-mconst-จัดตำแหน่ง
-mno-const-จัดตำแหน่ง
ตัวเลือกเหล่านี้ (ไม่มีตัวเลือก) จัดเรียง (กำจัดการจัดเตรียม) สำหรับสแต็กเฟรม
ข้อมูลแต่ละรายการและค่าคงที่ที่จะจัดตำแหน่งสำหรับขนาดการเข้าถึงข้อมูลเดียวสูงสุด
สำหรับซีพียูรุ่นที่เลือก ค่าเริ่มต้นคือการจัดเรียงสำหรับการจัดตำแหน่งแบบ 32 บิต อาบี
รายละเอียดเช่นเค้าโครงโครงสร้างจะไม่ได้รับผลกระทบจากตัวเลือกเหล่านี้

-m32-บิต
-m16-บิต
-m8-บิต
คล้ายกับตัวเลือก stack- data- และ const-align ด้านบน ตัวเลือกเหล่านี้จัดเรียงสำหรับ
สแต็กเฟรม ข้อมูลที่เขียนได้และค่าคงที่ทั้งหมดเป็นแบบ 32 บิต 16 บิตหรือ 8 บิต
ค่าเริ่มต้นคือการจัดตำแหน่งแบบ 32 บิต

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

-mno-gotplt
-mgotplt
กับ -fpic และ -fPICอย่าสร้าง (สร้าง) ลำดับคำสั่งที่โหลด
ที่อยู่สำหรับฟังก์ชั่นจากส่วน PLT ของ GOT มากกว่า (ดั้งเดิมบน other
สถาปัตยกรรม) เรียกร้องให้ PLT ค่าเริ่มต้นคือ -mgotplt.

-เมลฟ์
ตัวเลือก no-op แบบเดิมที่รู้จักกับ cris-axis-elf และ cris-axis-linux-gnu เท่านั้น
เป้าหมาย

-mlinux
ตัวเลือก no-op แบบเดิมจะรู้จักกับเป้าหมาย cris-axis-linux-gnu เท่านั้น

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

-ซิม2
Like -ซิมแต่ส่งตัวเลือกตัวเชื่อมโยงเพื่อค้นหาข้อมูลที่เริ่มต้นที่ 0x40000000 และศูนย์-
ข้อมูลเริ่มต้นที่ 0x80000000

CR16 Options

ตัวเลือกเหล่านี้ถูกกำหนดไว้โดยเฉพาะสำหรับพอร์ต CR16

-เอ็มแมค
เปิดใช้งานการใช้คำสั่งการคูณ ปิดใช้งานโดยค่าเริ่มต้น

-mcr16cplus
-mcr16c
สร้างโค้ดสำหรับสถาปัตยกรรม CR16C หรือ CR16C+ สถาปัตยกรรม CR16C+ เป็นค่าเริ่มต้น

-msim
ลิงก์ไลบรารี libsim.a ซึ่งเข้ากันได้กับโปรแกรมจำลอง ใช้ได้กับเอลฟ์
คอมไพเลอร์เท่านั้น

-มิ้นต์32
เลือกประเภทจำนวนเต็มเป็นแบบกว้าง 32 บิต

-mbit-ops
สร้างคำสั่ง sbit/cbit สำหรับการจัดการบิต

-mdata-model=แบบ
เลือกแบบจำลองข้อมูล ทางเลือกของ แบบ เป็น ใกล้, ไกล or กลาง. กลาง เป็นค่าเริ่มต้น
อย่างไรก็ตาม ไกล ไม่ถูกต้องเมื่อเลือกตัวเลือก -mcr16c เนื่องจากสถาปัตยกรรม CR16C ไม่
รองรับโมเดลข้อมูลระยะไกล

ดาร์วิน Options

ตัวเลือกเหล่านี้กำหนดไว้สำหรับสถาปัตยกรรมทั้งหมดที่ใช้ระบบปฏิบัติการดาร์วิน

FSF GCC บนดาร์วินไม่สร้างไฟล์อ็อบเจ็กต์ "อ้วน" มันจะสร้างไฟล์วัตถุสำหรับ
สถาปัตยกรรมเดียวที่สร้างขึ้นเพื่อกำหนดเป้าหมาย GCC ของ Apple ในดาร์วินสร้าง
ไฟล์ "อ้วน" หากมีหลายไฟล์ -โค้ง ใช้ตัวเลือก มันทำได้โดยการรันคอมไพเลอร์หรือ
linker หลาย ๆ ครั้งและเข้าร่วมผลลัพธ์พร้อมกับ Lipo.

ชนิดย่อยของไฟล์ที่สร้าง (like ppc7400 or ppc970 or i686) ถูกกำหนดโดย
แฟล็กที่ระบุ ISA ที่ GCC กำลังกำหนดเป้าหมาย เช่น -mcpu or -มีนาคม.
-force_cpusubtype_ALL สามารถใช้ตัวเลือกเพื่อแทนที่สิ่งนี้ได้

เครื่องมือของดาร์วินมีลักษณะการทำงานแตกต่างกันไปเมื่อนำเสนอด้วย ISA ไม่ตรงกัน NS
ผู้ประกอบ, asจะอนุญาตให้ใช้เฉพาะคำแนะนำที่ถูกต้องสำหรับประเภทย่อยของ
ไฟล์ที่กำลังสร้าง ดังนั้นคุณจึงไม่สามารถใส่คำสั่ง 64 บิตใน a ppc750 ไฟล์ออบเจ็กต์
ตัวเชื่อมโยงสำหรับไลบรารีที่ใช้ร่วมกัน /usr/bin/libtool, จะล้มเหลวและพิมพ์ข้อผิดพลาดหากถูกถาม
เพื่อสร้างไลบรารีที่ใช้ร่วมกันที่มีประเภทย่อยที่จำกัดน้อยกว่าไฟล์อินพุต (for
เช่น พยายามใส่ ppc970 ไฟล์วัตถุใน a ppc7400 ห้องสมุด). ตัวเชื่อมโยงสำหรับ
ไฟล์ปฏิบัติการ, ld, จะให้ประเภทย่อยที่ จำกัด ที่สุดของ .ใด ๆ ที่ปฏิบัติการได้
ไฟล์อินพุต

-Fdir
เพิ่มไดเร็กทอรีกรอบงาน dir ไปที่ส่วนหัวของรายการไดเร็กทอรีที่จะค้นหา
สำหรับไฟล์ส่วนหัว ไดเร็กทอรีเหล่านี้สอดแทรกกับไดเร็กทอรีที่ระบุโดย -I
และสแกนตามลำดับจากซ้ายไปขวา

ไดเร็กทอรีเฟรมเวิร์กคือไดเร็กทอรีที่มีเฟรมเวิร์กอยู่ในนั้น กรอบคือ
ไดเร็กทอรีด้วย a "หัวเรื่อง" และ / หรือ "หัวหน้าส่วนตัว" ไดเร็กทอรีที่มีอยู่โดยตรงในนั้น
ที่ลงท้ายด้วย ".กรอบ". ชื่อของเฟรมเวิร์กคือชื่อของไดเร็กทอรีนี้
ยกเว้น ".กรอบ". ส่วนหัวที่เกี่ยวข้องกับกรอบงานพบได้ในหนึ่งใน
สองไดเร็กทอรีนั้นด้วย "หัวเรื่อง" ถูกค้นก่อน กรอบงานย่อยคือ a
ไดเร็กทอรีเฟรมเวิร์กที่อยู่ในเฟรมเวิร์กของ “โครง” ไดเร็กทอรี. รวมของ
ส่วนหัวของเฟรมเวิร์กย่อยสามารถปรากฏในส่วนหัวของเฟรมเวิร์กที่มี . เท่านั้น
เฟรมเวิร์กย่อยหรือในส่วนหัวของเฟรมเวิร์กย่อยระดับเดียวกัน สองเฟรมเวิร์กย่อยเป็นพี่น้องกันถ้า
เกิดขึ้นในกรอบเดียวกัน เฟรมเวิร์กย่อยไม่ควรมีชื่อเหมือนกับ a
กรอบการทำงานจะมีคำเตือนหากมีการละเมิด ปัจจุบันเป็นโครงข่ายย่อย
ไม่สามารถมีโครงข่ายย่อยได้ ในอนาคตอาจขยายกลไกเพื่อรองรับ
นี้. กรอบมาตรฐานสามารถพบได้ใน "/ระบบ/ไลบรารี/เฟรมเวิร์ก" และ
"/ไลบรารี/เฟรมเวิร์ก". ตัวอย่างได้แก่ "#include ",
ที่ไหน กรอบ หมายถึงชื่อเฟรมเวิร์กและ header.h อยู่ในไฟล์
"หัวหน้าส่วนตัว" or "หัวเรื่อง" ไดเรกทอรี

-iframeworkdir
Like -F ยกเว้นไดเร็กทอรีจะถือว่าเป็นไดเร็กทอรีระบบ ความแตกต่างที่สำคัญ
ระหว่างนี้ -iframework และ -F คือด้วย -iframework คอมไพเลอร์ไม่เตือน
เกี่ยวกับโครงสร้างที่มีอยู่ในไฟล์ส่วนหัวที่พบผ่าน dir. ตัวเลือกนี้ถูกต้อง
สำหรับตระกูลภาษา C เท่านั้น

-guused
เผยแพร่ข้อมูลการดีบักสำหรับสัญลักษณ์ที่ใช้ สำหรับรูปแบบการดีบัก STABS
สิ่งนี้ทำให้ -felimate-ไม่ได้ใช้-debug-symbols. โดยค่าเริ่มต้นคือเปิด

-gfull
ส่งข้อมูลการดีบักสำหรับสัญลักษณ์และประเภททั้งหมด

-mmacosx-เวอร์ชัน-min=รุ่น
MacOS X เวอร์ชันแรกสุดที่โปรแกรมเรียกทำงานนี้จะทำงานบน is รุ่น. ตามแบบฉบับ
ค่าของ รุ่น รวมถึง 10.1, 10.2 และ 10.3.9

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

-เคอร์เนล
เปิดใช้งานโหมดการพัฒนาเคอร์เนล NS -เคอร์เนล ชุดตัวเลือก -คงที่, -fno-ธรรมดา,
-fno-cxa-atexit, -fno-ข้อยกเว้น, -fno-ไม่โทร-ข้อยกเว้น, -fapple-kext, -fno-อ่อนแอ
และ -fno-rti ที่ใช้บังคับ. โหมดนี้ยังตั้งค่า -mno-อัลทีฟเทค, -msoft-ลอย,
-fno-ในตัว และ -mlong-สาขา สำหรับเป้าหมายของ PowerPC

-mone ไบต์บูล
แทนที่ค่าเริ่มต้นสำหรับ บูล ดังนั้น ขนาดของ(บูล)==1. โดยค่าเริ่มต้น ขนาด (บูล) is 4
เมื่อทำการคอมไพล์สำหรับ Darwin/PowerPC และ 1 เมื่อทำการคอมไพล์สำหรับ Darwin/x86 ดังนั้นตัวเลือกนี้
ไม่มีผลกับ x86

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

-mfix-และดำเนินการต่อ
-ffix-และดำเนินการต่อ
-findirect ข้อมูล
สร้างรหัสที่เหมาะสมกับการพัฒนาอย่างรวดเร็ว จำเป็นต้องเปิดใช้งาน gdb to
โหลดไฟล์ ".o" แบบไดนามิกลงในโปรแกรมที่กำลังทำงานอยู่ -findirect ข้อมูล และ
-ffix-และดำเนินการต่อ มีให้สำหรับความเข้ากันได้ย้อนหลัง

-all_load
โหลดสมาชิกทั้งหมดของไลบรารีไฟล์เก็บถาวรแบบคงที่ ดูผู้ชาย ld(1) สำหรับข้อมูลเพิ่มเติม

-arch_errors_fatal
ทำให้เกิดข้อผิดพลาดเกี่ยวกับไฟล์ที่มีสถาปัตยกรรมที่ไม่ถูกต้องถึงขั้นเสียชีวิต

-bind_at_load
ทำให้ไฟล์เอาต์พุตถูกทำเครื่องหมายเพื่อให้ไดนามิกลิงก์เกอร์จะผูกทั้งหมด
การอ้างอิงที่ไม่ได้กำหนดเมื่อโหลดหรือเปิดไฟล์

- มัด
สร้างไฟล์รูปแบบมัด Mach-o ดูผู้ชาย ld(1) สำหรับข้อมูลเพิ่มเติม

-bundle_loader ปฏิบัติการ
ตัวเลือกนี้ระบุ ปฏิบัติการ ที่จะโหลดไฟล์เอาต์พุตบิลด์เป็น
เชื่อมโยง ดูผู้ชาย ld(1) สำหรับข้อมูลเพิ่มเติม

-ไดนามิกlib
เมื่อผ่านตัวเลือกนี้ GCC จะสร้างไลบรารีไดนามิกแทนไฟล์เรียกทำงาน
เมื่อเชื่อมโยงโดยใช้ดาร์วิน ลิบทูล คำสั่ง

-force_cpusubtype_ALL
สิ่งนี้ทำให้ไฟล์เอาต์พุตของ GCC มี ทั้งหมด ชนิดย่อย แทนที่จะถูกควบคุมโดย
-mcpu or -มีนาคม ตัวเลือก

-allowable_client ชื่อลูกค้า
-ชื่อลูกค้า
-ความเข้ากันได้_รุ่น
-current_version
-dead_strip
-dependency-ไฟล์
-dylib_file
-dylinker_install_name
- ไดนามิก
-exported_ symbols_list
-รายการไฟล์
-flat_namespace
-force_flat_namespace
-headerpad_max_install_names
-image_base
-ในนั้น
-install_name
-keep_private_externs
-multi_module
-คูณ_กำหนด
-คูณ_กำหนด_ไม่ได้ใช้
-noall_load
-no_dead_strip_inits_and_terms
-nofixprebinding
-nomultidefs
-ไม่พรีบินด์
-noseglinkแก้ไข
-pagezero_size
- ผูกมัด
-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
-seglinkแก้ไข
-เซปโปร
-segs_read_only_addr
-segs_read_write_addr
-single_module
-คงที่
-sub_library
-sub_umbrella
-twolevel_namespace
-ร่ม
-ไม่ได้กำหนด
-unexported_ symbols_list
-weak_reference_mismatches
-Whatsloaded
ตัวเลือกเหล่านี้จะถูกส่งต่อไปยังตัวเชื่อมโยงดาร์วิน หน้าคู่มือตัวเชื่อมโยงดาร์วินอธิบาย
พวกเขาในรายละเอียด

ธันวาคม แอลฟา Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน DEC Alpha:

-mno-นุ่มลอย
-msoft-ลอย
ใช้ (อย่าใช้) คำแนะนำฮาร์ดแวร์สำหรับจุดลอยตัว
การดำเนินงาน เมื่อไหร่ -msoft-ลอย ถูกระบุ ทำหน้าที่ใน libgcc.a จะใช้ในการ
ดำเนินการดำเนินการจุดลอยตัว เว้นแต่จะถูกแทนที่ด้วยกิจวัตรที่เลียนแบบ
การดำเนินการจุดลอยตัวหรือรวบรวมในลักษณะที่เรียกว่าการจำลองดังกล่าว
รูทีน รูทีนเหล่านี้จะออกการดำเนินการทศนิยม หากคุณกำลังรวบรวม
สำหรับอัลฟ่าที่ไม่มีการดำเนินการจุดลอยตัว คุณต้องแน่ใจว่าไลบรารีเป็น
สร้างขึ้นเพื่อไม่ให้เรียกพวกเขา

โปรดทราบว่าการนำไปใช้งานอัลฟ่าโดยไม่มีการดำเนินการจุดทศนิยมจำเป็นต้องมี
การลงทะเบียนทศนิยม

-mfp-reg
-mno-fp-regs
สร้างรหัสที่ใช้ (ไม่ใช้) ชุดทะเบียนทศนิยม -mno-fp-regs
หมายถึง -msoft-ลอย. หากไม่ใช้ชุดรีจิสเตอร์ทศนิยม ให้ทศนิยมทศนิยม
ตัวถูกดำเนินการถูกส่งผ่านในการลงทะเบียนจำนวนเต็มราวกับว่าพวกมันเป็นจำนวนเต็มและทศนิยม
ผลลัพธ์จะถูกส่งเป็น $0 แทนที่จะเป็น $f0 นี่เป็นลำดับการโทรที่ไม่ได้มาตรฐาน ดังนั้น
ฟังก์ชั่นใด ๆ ที่มีอาร์กิวเมนต์ทศนิยมหรือค่าส่งคืนที่เรียกโดยโค้ดที่คอมไพล์
กับ -mno-fp-regs จะต้องคอมไพล์ด้วยตัวเลือกนั้นด้วย

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

-มี่
สถาปัตยกรรมอัลฟ่าใช้ฮาร์ดแวร์จุดลอยตัวที่ปรับให้เหมาะสมที่สุด
ประสิทธิภาพ. ส่วนใหญ่เป็นไปตามมาตรฐานจุดลอยตัวของ IEEE อย่างไรก็ตาม,
สำหรับการปฏิบัติตามข้อกำหนดอย่างสมบูรณ์ จำเป็นต้องมีความช่วยเหลือด้านซอฟต์แวร์ ตัวเลือกนี้สร้างรหัส
รหัสที่สอดคล้องกับ IEEE อย่างสมบูรณ์ ยกเว้น that the ไม่แน่นอน-flag ไม่ได้รับการบำรุงรักษา (ดูด้านล่าง)
หากเปิดตัวเลือกนี้ มาโครตัวประมวลผลล่วงหน้า "_IEEE_FP" จะถูกกำหนดระหว่าง
การรวบรวม โค้ดที่ได้จะมีประสิทธิภาพน้อยกว่าแต่สามารถรองรับได้ถูกต้อง
ตัวเลขที่ไม่ปกติและค่า IEEE พิเศษ เช่น ไม่ใช่ตัวเลขและบวก/ลบ
อินฟินิตี้ คอมไพเลอร์อัลฟ่าอื่น ๆ เรียกตัวเลือกนี้ -ieee_with_no_inexact.

-mieee-with-ไม่แน่นอน
ประมาณนี้ค่ะ -มี่ ยกเว้นรหัสที่สร้างขึ้นยังรักษา IEEE ไม่แน่นอน-flag.
การเปิดตัวเลือกนี้จะทำให้โค้ดที่สร้างขึ้นใช้ IEEE . ที่เป็นไปตามข้อกำหนดทั้งหมด
คณิตศาสตร์. นอกเหนือจาก "_IEEE_FP" แล้ว "_IEEE_FP_EXACT" ยังถูกกำหนดให้เป็นมาโครตัวประมวลผลล่วงหน้า
ในการใช้งาน Alpha บางตัว โค้ดที่ได้อาจรันช้ากว่า
รหัสที่สร้างขึ้นโดยค่าเริ่มต้น เนื่องจากมีโค้ดน้อยมากที่ขึ้นอยู่กับ
ไม่แน่นอน-flagโดยปกติ คุณไม่ควรระบุตัวเลือกนี้ คอมไพเลอร์อัลฟ่าอื่น ๆ โทร
ตัวเลือกนี้ -IEEE_WITH_INEXACT.

-mfp-กับดัก-โหมด=โหมดกับดัก
ตัวเลือกนี้ควบคุมว่าเปิดใช้งานกับดักที่เกี่ยวข้องกับจุดลอยตัวใดบ้าง อัลฟ่าอื่นๆ
คอมไพเลอร์เรียกตัวเลือกนี้ -fptm โหมดกับดัก. โหมดกับดักสามารถตั้งค่าให้เป็นหนึ่งในสี่
ค่า:

n นี่คือการตั้งค่าเริ่มต้น (ปกติ) กับดักเดียวที่เปิดใช้งานคือ
สิ่งที่ไม่สามารถปิดการใช้งานในซอฟต์แวร์ได้ (เช่น หารด้วยศูนย์กับดัก)

u นอกจากกับดักที่เปิดใช้งานโดย n, กับดักอันเดอร์โฟลว์ก็เปิดใช้งานเช่นกัน

su Like uแต่คำแนะนำถูกทำเครื่องหมายว่าปลอดภัยสำหรับการทำงานของซอฟต์แวร์ (ดู
คู่มือสถาปัตยกรรมอัลฟ่าสำหรับรายละเอียด)

หมี่ Like suแต่กับดักที่ไม่แน่นอนก็เปิดใช้งานเช่นกัน

-mfp-ปัดเศษโหมด=โหมดปัดเศษ
เลือกโหมดการปัดเศษของ IEEE คอมไพเลอร์อัลฟ่าอื่น ๆ เรียกตัวเลือกนี้ -fprm
โหมดปัดเศษ. โหมดปัดเศษ สามารถเป็นหนึ่งใน:

n โหมดการปัดเศษของ IEEE ปกติ ตัวเลขทศนิยมจะถูกปัดเศษเข้าหาค่าที่ใกล้ที่สุด
เลขเครื่องหรือไปทางเลขเครื่องคู่กรณีเสมอกัน

m ปัดเศษไปทางลบอนันต์

c โหมดปัดเศษ ตัวเลขทศนิยมถูกปัดเศษเข้าหาศูนย์

d โหมดการปัดเศษแบบไดนามิก ฟิลด์ในการลงทะเบียนควบคุมจุดลอยตัว (fpcrโปรดดูที่
คู่มืออ้างอิงสถาปัตยกรรมอัลฟ่า) ควบคุมโหมดการปัดเศษที่มีผล เดอะซี
ห้องสมุดเริ่มต้นการลงทะเบียนนี้สำหรับการปัดเศษไปทางบวกอนันต์ ดังนั้น,
เว้นแต่โปรแกรมของคุณจะแก้ไข fpcr, d สอดคล้องกับปัดไปทางบวก
อินฟินิตี้

-mtrap-ความแม่นยำ=กับดักความแม่นยำ
ในสถาปัตยกรรมอัลฟ่า กับดักจุดลอยตัวนั้นไม่ชัดเจน นี่หมายความว่าไม่มี
ความช่วยเหลือด้านซอฟต์แวร์ไม่สามารถกู้คืนจากกับดักและโปรแกรมลอยได้
การดำเนินการตามปกติจะต้องถูกยกเลิก GCC สามารถสร้างรหัสที่สามารถช่วยเหลือได้
ตัวจัดการกับดักของระบบปฏิบัติการในการกำหนดตำแหน่งที่แน่นอนที่ก่อให้เกิด
กับดักจุดลอยตัว ขึ้นอยู่กับข้อกำหนดของการสมัครที่แตกต่างกัน
สามารถเลือกระดับความแม่นยำได้:

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

f ความแม่นยำของฟังก์ชัน ตัวจัดการกับดักสามารถกำหนดฟังก์ชันที่ทำให้เกิด a
ข้อยกเว้นทศนิยม

i ความแม่นยำของคำสั่ง ตัวจัดการกับดักสามารถกำหนดคำสั่งที่แน่นอนได้ว่า
ทำให้เกิดข้อยกเว้นทศนิยม

คอมไพเลอร์อัลฟ่าอื่น ๆ ให้ตัวเลือกเทียบเท่าที่เรียกว่า -scope_safe และ
-เริ่มต้นใหม่_ปลอดภัย.

-mieee-สอดคล้อง
ตัวเลือกนี้ทำเครื่องหมายรหัสที่สร้างขึ้นว่าเป็นไปตามมาตรฐาน IEEE คุณต้องไม่ใช้ตัวเลือกนี้
เว้นแต่คุณจะระบุด้วย -mtrap-ความแม่นยำ=ฉัน และอย่างใดอย่างหนึ่ง -mfp-trap-mode=su or
-mfp-trap-mode = sui. ผลเดียวของมันคือการปล่อยสาย .flag 48 ในการทำงาน
อารัมภบทของไฟล์แอสเซมบลีที่สร้างขึ้น ภายใต้ DEC Unix สิ่งนี้มีผลที่
รูทีนของไลบรารีคณิตศาสตร์ที่สอดคล้องกับ IEEE จะถูกเชื่อมโยงเข้าด้วยกัน

-mbuild-ค่าคงที่
โดยปกติ GCC จะตรวจสอบค่าคงที่จำนวนเต็ม 32 หรือ 64 บิตเพื่อดูว่าสามารถสร้างได้หรือไม่
จากค่าคงที่ที่น้อยกว่าในคำสั่งสองหรือสามคำสั่ง หากไม่สามารถทำได้ก็จะส่งออก
ค่าคงที่ตามตัวอักษรและสร้างโค้ดเพื่อโหลดจากส่วนข้อมูล ณ รันไทม์

ใช้ตัวเลือกนี้เพื่อกำหนดให้ GCC สร้าง ทั้งหมด ค่าคงที่จำนวนเต็มโดยใช้โค้ด แม้ว่า
ต้องใช้คำแนะนำเพิ่มเติม (สูงสุดหก)

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

-malpha-เหมือน
-แก๊ส
เลือกว่าจะสร้างโค้ดที่จะรวบรวมโดยแอสเซมเบลอร์ที่ผู้ขายจัดหาให้หรือไม่
(-malpha-เหมือน) หรือโดยแอสเซมเบลอร์ GNU -แก๊ส.

-mbwx
-mno-bwx
-mcix
-mno-cix
-mfix
-mno-แก้ไข
-มม.สูงสุด
-mno-สูงสุด
ระบุว่า GCC ควรสร้างโค้ดเพื่อใช้ตัวเลือก BWX, CIX, FIX และ MAX . หรือไม่
ชุดคำสั่ง ค่าเริ่มต้นคือการใช้ชุดคำสั่งที่รองรับโดยCPU
ประเภทที่ระบุผ่าน -mcpu= ตัวเลือกหรือของ CPU ที่ GCC ถูกสร้างขึ้นหากไม่มีเป็น
ระบุไว้

-mfloat-vax
-mfloat-ieee
สร้างโค้ดที่ใช้ (ไม่ใช้) VAX F และ G เลขทศนิยมแทน
ของความแม่นยำเดียวและสองเท่าของ IEEE

-meexplicit-relocs
-mno-ชัดเจน-relocs
แอสเซมเบลอร์อัลฟ่าที่เก่ากว่าไม่มีวิธีสร้างการโยกย้ายสัญลักษณ์ยกเว้นผ่าน
มาโครแอสเซมเบลอร์ การใช้มาโครเหล่านี้ไม่อนุญาตให้จัดตารางเวลาคำสั่งที่เหมาะสมที่สุด
GNU binutils ในเวอร์ชัน 2.12 รองรับไวยากรณ์ใหม่ที่ช่วยให้คอมไพเลอร์สามารถ
ระบุให้ชัดเจนว่าการย้ายถิ่นฐานใดควรใช้กับคำแนะนำใด ตัวเลือกนี้คือ
มีประโยชน์ส่วนใหญ่สำหรับการดีบัก เนื่องจาก GCC ตรวจพบความสามารถของแอสเซมเบลอร์เมื่อ
ถูกสร้างและตั้งค่าเริ่มต้นตามนั้น

-msmall-ข้อมูล
-mlarge-ข้อมูล
เมื่อ -meexplicit-relocs มีผลบังคับใช้ เข้าถึงข้อมูลคงที่ผ่าน gp-ญาติ
การย้ายถิ่นฐาน เมื่อไหร่ -msmall-ข้อมูล ใช้วัตถุขนาด 8 ไบต์หรือเล็กกว่าจะถูกวางไว้ใน
a เล็ก ข้อมูล พื้นที่ (ส่วน ".sdata" และ ".sbss") และเข้าถึงได้ผ่าน 16-bit
ย้ายออกจากการลงทะเบียน $gp ซึ่งจะจำกัดขนาดของพื้นที่ข้อมูลขนาดเล็กไว้ที่
64KB แต่อนุญาตให้เข้าถึงตัวแปรได้โดยตรงผ่านคำสั่งเดียว

ค่าเริ่มต้นคือ -mlarge-ข้อมูล. ด้วยตัวเลือกนี้ พื้นที่ข้อมูลจะถูกจำกัดให้อยู่ด้านล่าง
2GB. โปรแกรมที่ต้องการข้อมูลมากกว่า 2GB ต้องใช้ "malloc" หรือ "mmap" to
จัดสรรข้อมูลในฮีปแทนในส่วนข้อมูลของโปรแกรม

เมื่อสร้างรหัสสำหรับไลบรารีที่ใช้ร่วมกัน -fpic หมายถึง -msmall-ข้อมูล และ -fPIC
หมายถึง -mlarge-ข้อมูล.

-msmall-ข้อความ
-mlarge-ข้อความ
เมื่อ -msmall-ข้อความ ใช้คอมไพเลอร์ถือว่ารหัสของโปรแกรมทั้งหมด
(หรือไลบรารีที่ใช้ร่วมกัน) มีขนาด 4MB และสามารถเข้าถึงได้ด้วยคำสั่งสาขา
เมื่อ -msmall-ข้อมูล ใช้คอมไพเลอร์สามารถสันนิษฐานได้ว่าสัญลักษณ์ท้องถิ่นทั้งหมดใช้
ค่า $gp เท่ากัน และลดจำนวนคำสั่งที่จำเป็นสำหรับฟังก์ชัน
โทรจาก 4 ถึง 1

ค่าเริ่มต้นคือ -mlarge-ข้อความ.

-mcpu=ซีพียู_ประเภท
ตั้งค่าชุดคำสั่งและพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับประเภทเครื่อง
ซีพียู_ประเภท. คุณสามารถระบุได้ทั้ง EV ชื่อรูปแบบหรือหมายเลขชิปที่เกี่ยวข้อง
GCC รองรับพารามิเตอร์การตั้งเวลาสำหรับโปรเซสเซอร์ตระกูล EV4, EV5 และ EV6 และ
จะเลือกค่าเริ่มต้นสำหรับชุดคำสั่งจากโปรเซสเซอร์ที่คุณระบุ
หากคุณไม่ได้ระบุประเภทโปรเซสเซอร์ GCC จะใช้ค่าเริ่มต้นเป็นโปรเซสเซอร์ที่
คอมไพเลอร์ถูกสร้างขึ้น

ค่าที่รองรับสำหรับ ซีพียู_ประเภท เป็น

ev4
ev45
21064
กำหนดตารางเวลาเป็น EV4 และไม่มีส่วนขยายชุดคำสั่ง

ev5
21164
กำหนดตารางเวลาเป็น EV5 และไม่มีส่วนขยายชุดคำสั่ง

ev56
21164a
กำหนดเวลาเป็น EV5 และรองรับส่วนขยาย BWX

พีซีเอ56
21164pc
21164PC
กำหนดเวลาเป็น EV5 และรองรับส่วนขยาย BWX และ MAX

ev6
21264
กำหนดเวลาเป็น EV6 และรองรับส่วนขยาย BWX, FIX และ MAX

ev67
21264a
กำหนดเวลาเป็น EV6 และรองรับส่วนขยาย BWX, CIX, FIX และ MAX

ชุดเครื่องมือดั้งเดิมยังรองรับค่า พื้นเมืองที่คัดสรรสถาปัตยกรรมที่ดีที่สุด
ตัวเลือกสำหรับโปรเซสเซอร์โฮสต์ -mcpu=เจ้าของภาษา ไม่มีผลหาก GCC ไม่รู้จัก
โปรเซสเซอร์

-mtune=ซีพียู_ประเภท
ตั้งค่าเฉพาะพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับประเภทเครื่อง ซีพียู_ประเภท.
ชุดคำสั่งไม่เปลี่ยนแปลง

ชุดเครื่องมือดั้งเดิมยังรองรับค่า พื้นเมืองที่คัดสรรสถาปัตยกรรมที่ดีที่สุด
ตัวเลือกสำหรับโปรเซสเซอร์โฮสต์ -mtune=เจ้าของภาษา ไม่มีผลหาก GCC ไม่รู้จัก
โปรเซสเซอร์

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

ตัวเลือกที่ถูกต้องสำหรับ เวลา เป็น

จำนวน
ตัวเลขทศนิยมแทนรอบนาฬิกา

L1
L2
L3
หลัก
คอมไพเลอร์ประกอบด้วยค่าประมาณของจำนวนรอบสัญญาณนาฬิกาสำหรับ EV4 "ทั่วไป" &
ฮาร์ดแวร์ EV5 สำหรับแคชระดับ 1, 2 และ 3 (เรียกอีกอย่างว่า Dcache, Scache และ
Bcache) เช่นเดียวกับหน่วยความจำหลัก โปรดทราบว่า L3 ใช้ได้กับ EV5 เท่านั้น

ธันวาคม อัลฟ่า/VMS Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน DEC Alpha/VMS:

-mvms-ส่งคืนรหัส
ส่งคืนรหัสเงื่อนไข VMS จาก main.js ค่าดีฟอลต์คือการคืนค่าเงื่อนไขสไตล์ POSIX
(เช่นข้อผิดพลาด) รหัส

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

-mmalloc64
ค่าเริ่มต้นเป็นรูทีนการจัดสรรหน่วยความจำ 64 บิต

FR30 Options

ตัวเลือกเหล่านี้ถูกกำหนดไว้โดยเฉพาะสำหรับพอร์ต FR30

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

-mno-lsim
สมมติว่ามีการสนับสนุนรันไทม์ไว้แล้ว ดังนั้นจึงไม่จำเป็นต้องรวม
ห้องสมุดจำลอง (libsim.a) บนบรรทัดรับคำสั่งลิงเกอร์

ลิฟ Options

-mgpr-32
ใช้การลงทะเบียนเอนกประสงค์ 32 รายการแรกเท่านั้น

-mgpr-64
ใช้รีจิสเตอร์เอนกประสงค์ทั้งหมด 64 รายการ

-mfpr-32
ใช้การลงทะเบียนทศนิยม 32 จุดแรกเท่านั้น

-mfpr-64
ใช้การลงทะเบียนทศนิยมทั้ง 64 จุด

-mhard-ลอย
ใช้คำแนะนำฮาร์ดแวร์สำหรับการดำเนินการจุดลอยตัว

-msoft-ลอย
ใช้ไลบรารีรูทีนสำหรับการดำเนินการทศนิยม

-malloc-ซีซี
จัดสรรการลงทะเบียนรหัสเงื่อนไขแบบไดนามิก

-mfixed-ซีซี
อย่าพยายามจัดสรรการลงทะเบียนรหัสเงื่อนไขแบบไดนามิก ใช้เฉพาะ "icc0" และ
"fcc0".

-mdword
เปลี่ยน ABI เพื่อใช้คำสองคำ insns

-mno-dword
อย่าใช้คำแนะนำสองคำ

-mdouble
ใช้คำสั่งคู่ทศนิยม

-mno-สองเท่า
อย่าใช้คำแนะนำคู่ทศนิยม

-มีเดีย
ใช้คำแนะนำสื่อ

-mno-สื่อ
อย่าใช้คำแนะนำสื่อ

-mmuladd
ใช้วิธีการคูณและบวก/ลบ

-Mno-Muladd
อย่าใช้คำสั่งการคูณและเพิ่ม/ลบ

-mfdpic
เลือก FDPIC ABI ซึ่งใช้ตัวบอกฟังก์ชันเพื่อแสดงตัวชี้ไปยัง
ฟังก์ชั่น. หากไม่มีตัวเลือกที่เกี่ยวข้องกับ PIC/PIE ก็หมายความว่า -fPIE. ด้วย -fpic or
-fpieโดยถือว่ารายการ GOT และข้อมูลขนาดเล็กอยู่ในช่วง 12 บิตจาก GOT
ที่อยู่ฐาน; กับ -fPIC or -fPIE, ออฟเซ็ต GOT คำนวณด้วย 32 บิต กับ
bfin-เอลฟ์ เป้าหมาย ตัวเลือกนี้หมายถึง -msim.

-minline-plt
เปิดใช้งานอินไลน์ของรายการ PLT ในการเรียกใช้ฟังก์ชันไปยังฟังก์ชันที่ไม่รู้จัก
ผูกท้องถิ่น ไม่มีผลอะไรถ้าไม่มี -mfdpic. มันถูกเปิดใช้งานโดยค่าเริ่มต้น if
การเพิ่มประสิทธิภาพสำหรับความเร็วและการคอมไพล์สำหรับไลบรารีที่ใช้ร่วมกัน (เช่น -fPIC or -fpic), หรือ
เมื่อตัวเลือกการเพิ่มประสิทธิภาพเช่น -O3 หรือสูงกว่ามีอยู่ในบรรทัดคำสั่ง

-mTLS
สมมติว่าเป็นเซ็กเมนต์ TLS ขนาดใหญ่เมื่อสร้างโค้ดของเธรดโลคัล

-mtl
อย่าถือว่ากลุ่ม TLS ขนาดใหญ่เมื่อสร้างรหัสภายในเครื่อง

-mgplel-ro
เปิดใช้งานการใช้การย้ายตำแหน่ง "GPREL" ใน FDPIC ABI สำหรับข้อมูลที่ทราบว่าอยู่ใน
ส่วนแบบอ่านอย่างเดียว มันถูกเปิดใช้งานโดยค่าเริ่มต้น ยกเว้นสำหรับ -fpic or -fpie: แม้ว่า
อาจช่วยทำให้ตารางออฟเซ็ตทั่วโลกมีขนาดเล็กลง โดยจะแลกเปลี่ยน 1 คำสั่งสำหรับ 4 ด้วย
-fPIC or -fPIEมันแลกเปลี่ยน 3 คำแนะนำสำหรับ 4 ซึ่งหนึ่งในนั้นอาจใช้ร่วมกันได้หลายรายการ
สัญลักษณ์และหลีกเลี่ยงความจำเป็นในการป้อน GOT สำหรับสัญลักษณ์อ้างอิง ดังนั้นจึงเป็น
มีแนวโน้มที่จะชนะ ถ้าไม่ใช่ -mno-gpel-ro สามารถใช้เพื่อปิดการใช้งาน

-multilib-library-รูป
ลิงก์กับไลบรารีรูปภาพ (ไลบรารี่ไม่ใช่ FD) มีความหมายโดย -mlibrary-รูปเช่นกัน
โดย -fPIC และ -fpic ไม่มี -mfdpic. คุณไม่ควรใช้มันอย่างชัดเจน

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

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

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

-mlibrary-รูป
สร้างรหัส EABI ที่ไม่ขึ้นกับตำแหน่ง

-macc-4
ใช้การลงทะเบียนสื่อสะสมสื่อสี่รายการแรกเท่านั้น

-macc-8
ใช้การลงทะเบียนสื่อสะสมสื่อทั้งหมดแปดรายการ

-เอ็มแพ็ก
คำแนะนำแพ็ค VLIW

-mno-แพ็ค
อย่าแพ็คคำสั่ง VLIW

-mno-flags
อย่าทำเครื่องหมายสวิตช์ ABI ใน e_flags

-mcond-ย้าย
เปิดใช้งานการใช้คำสั่ง Conditional-move (ค่าเริ่มต้น)

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mno-cond-ย้าย
ปิดการใช้งานคำสั่ง Conditional-move

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mscc
เปิดใช้งานการใช้คำสั่งการตั้งค่าแบบมีเงื่อนไข (ค่าเริ่มต้น)

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mno-scc
ปิดใช้งานการใช้คำสั่งการตั้งค่าแบบมีเงื่อนไข

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mcond-ผู้บริหาร
เปิดใช้งานการใช้การดำเนินการตามเงื่อนไข (ค่าเริ่มต้น)

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mno-cond-exec
ปิดการใช้งานการดำเนินการตามเงื่อนไข

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mvliw-สาขา
รัน pass เพื่อแพ็คสาขาลงในคำสั่ง VLIW (ค่าเริ่มต้น)

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mno-vliw-สาขา
อย่าเรียกใช้ pass เพื่อแพ็คสาขาลงในคำสั่ง VLIW

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mmulti-cond-exec
เปิดใช้งานการปรับให้เหมาะสมของ "&&" และ "||" ในการดำเนินการตามเงื่อนไข (ค่าเริ่มต้น)

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mno-multi-cond-exec
ปิดใช้งานการปรับให้เหมาะสมของ "&&" และ "||" ในการดำเนินการตามเงื่อนไข

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mnested-cond-exec
เปิดใช้งานการเพิ่มประสิทธิภาพการดำเนินการตามเงื่อนไขแบบซ้อน (ค่าเริ่มต้น)

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-mno-ซ้อน-cond-exec
ปิดใช้งานการเพิ่มประสิทธิภาพการดำเนินการตามเงื่อนไขที่ซ้อนกัน

สวิตช์นี้ใช้สำหรับการดีบักคอมไพเลอร์เป็นหลัก และมีแนวโน้มว่าจะถูกลบออกในa
รุ่นในอนาคต

-moptimize-สมาชิก
สวิตช์นี้จะลบคำสั่ง "membar" ที่ซ้ำซ้อนออกจากโค้ดที่สร้างโดยคอมไพเลอร์
มันถูกเปิดใช้งานโดยค่าเริ่มต้น

-mno-เพิ่มประสิทธิภาพ-สมาชิก
สวิตช์นี้ปิดใช้งานการลบคำแนะนำ "membar" ที่ซ้ำซ้อนออกจาก .โดยอัตโนมัติ
รหัสที่สร้างขึ้น

-mtomcat-สถิติ
ทำให้แก๊สพิมพ์สถิติแมวตัวผู้

-mcpu=ซีพียู
เลือกประเภทโปรเซสเซอร์ที่จะสร้างโค้ด ค่าที่เป็นไปได้คือ frv, fr550,
แมวตัวผู้, fr500, fr450, fr405, fr400, fr300 และ ง่าย.

GNU / Linux Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับเป้าหมาย GNU/Linux:

-มกลิบซี
ใช้ไลบรารี GNU C นี่เป็นค่าเริ่มต้นยกเว้น on *-*-ลินุกซ์-*uclibc* และ
*-*-ลินุกซ์-*แอนดรอยด์* เป้าหมาย

-muclibc
ใช้ไลบรารี uClibc C นี่คือค่าเริ่มต้นบน *-*-ลินุกซ์-*uclibc* เป้าหมาย

-mionic
ใช้ไลบรารี Bionic C นี่คือค่าเริ่มต้นบน *-*-ลินุกซ์-*แอนดรอยด์* เป้าหมาย

-แมนดรอยด์
คอมไพล์โค้ดที่เข้ากันได้กับแพลตฟอร์ม Android นี่คือค่าเริ่มต้นบน
*-*-ลินุกซ์-*แอนดรอยด์* เป้าหมาย

เมื่อทำการคอมไพล์ ตัวเลือกนี้จะเปิดใช้งาน -mionic, -fPIC, -fno-ข้อยกเว้น และ -fno-rti by
ค่าเริ่มต้น. เมื่อทำการเชื่อมโยง ตัวเลือกนี้จะทำให้ไดรเวอร์ GCC ส่งผ่านตัวเลือกเฉพาะของ Android
ไปยังตัวเชื่อมโยง สุดท้าย ตัวเลือกนี้ทำให้มาโครตัวประมวลผลล่วงหน้า "__ANDROID__" เป็น
ที่กำหนดไว้

-tno-android-cc
ปิดใช้งานเอฟเฟกต์การรวบรวมของ -แมนดรอยด์, กล่าวคือ, ไม่เปิดใช้งาน -mionic, -fPIC,
-fno-ข้อยกเว้น และ -fno-rti โดยค่าเริ่มต้น

-tno-android-ld
ปิดใช้งานการเชื่อมโยงเอฟเฟกต์ของ -แมนดรอยด์เช่น ส่งผ่านตัวเลือกการลิงก์ลินุกซ์มาตรฐานไปที่
ลิงค์เกอร์.

H8 / 300 Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน H8/300:

-mrelax
ย่อที่อยู่บางส่วนในเวลาลิงค์ ถ้าเป็นไปได้; ใช้ตัวเลือกลิงเกอร์
-ผ่อนคลาย.

-ม สร้างรหัสสำหรับ H8/300H

-นางสาว สร้างรหัสสำหรับ H8S

-ม สร้างรหัสสำหรับ H8S และ H8/300H ในโหมดปกติ ต้องใช้สวิตช์นี้
ด้วย -ม or -นางสาว.

-ms2600
สร้างรหัสสำหรับ H8S/2600 สวิตช์นี้ต้องใช้กับ -นางสาว.

-มิ้นต์32
ทำให้ข้อมูล "int" เป็น 32 บิตโดยค่าเริ่มต้น

-malign-300
บน H8/300H และ H8S ให้ใช้กฎการจัดตำแหน่งเดียวกันกับ H8/300 ค่าเริ่มต้น
สำหรับ H8/300H และ H8S คือการจัดแนวยาวและลอยบนขอบเขต 4 ไบต์
-malign-300 ทำให้จัดแนวบนขอบเขต 2 ไบต์ ตัวเลือกนี้ไม่มีผล
บน H8/300

HPPA Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับคอมพิวเตอร์ตระกูล HPPA:

-มีนาคม=สถาปัตยกรรมประเภท
สร้างรหัสสำหรับสถาปัตยกรรมที่ระบุ ทางเลือกของ สถาปัตยกรรมประเภท เป็น
1.0 สำหรับ PA 1.0 1.1 สำหรับ PA 1.1 และ 2.0 สำหรับโปรเซสเซอร์ PA 2.0 อ้างถึง
/usr/lib/sched.models บนระบบ HP-UX เพื่อกำหนดตัวเลือกสถาปัตยกรรมที่เหมาะสม
สำหรับเครื่องของคุณ โค้ดที่คอมไพล์สำหรับสถาปัตยกรรมที่มีตัวเลขต่ำกว่าจะทำงานบนที่สูงขึ้น
สถาปัตยกรรมที่มีตัวเลขแต่ไม่ใช่ในทางกลับกัน

-mpa-risc-1-0
-mpa-risc-1-1
-mpa-risc-2-0
คำพ้องความหมายสำหรับ -มีนาคม=1.0, -มีนาคม=1.1และ -มีนาคม=2.0 ตามลำดับ

-mbig-สวิตช์
สร้างรหัสที่เหมาะสมสำหรับตารางสวิตช์ขนาดใหญ่ ใช้ตัวเลือกนี้เฉพาะในกรณีที่
แอสเซมเบลอร์/ลิงเกอร์บ่นเกี่ยวกับสาขาที่อยู่นอกช่วงภายในตารางสวิตช์

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

-mdisable-fpregs
ป้องกันการลงทะเบียนทศนิยมจากการใช้ในลักษณะใด ๆ นี่เป็นสิ่งจำเป็นสำหรับ
การรวบรวมเมล็ดที่ทำการสลับบริบทแบบสันหลังยาวของการลงทะเบียนทศนิยม ถ้า
คุณใช้ตัวเลือกนี้และพยายามดำเนินการทศนิยม คอมไพเลอร์
ยกเลิก

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

-mno-space-regs
สร้างรหัสที่ถือว่าเป้าหมายไม่มีการลงทะเบียนพื้นที่ ซึ่งช่วยให้ GCC ไป
สร้างการโทรทางอ้อมได้เร็วขึ้นและใช้โหมดที่อยู่ดัชนีที่ไม่ได้ปรับขนาด

รหัสดังกล่าวเหมาะสำหรับระบบ PA ระดับ 0 และเมล็ด

-mfast-ทางอ้อมโทร
สร้างรหัสที่ถือว่าการโทรไม่ข้ามขอบเขตของพื้นที่ ซึ่งช่วยให้ GCC ไป
ปล่อยรหัสที่ทำการโทรทางอ้อมได้เร็วขึ้น

ตัวเลือกนี้จะไม่ทำงานเมื่อมีไลบรารีที่ใช้ร่วมกันหรือฟังก์ชันที่ซ้อนกัน

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

-mlong-โหลดร้านค้า
สร้างลำดับการโหลดและจัดเก็บคำสั่ง 3 คำสั่งตามที่ HP-UX 10 . บางครั้งต้องการ
ลิงเกอร์ ซึ่งเทียบเท่ากับ +k ตัวเลือกสำหรับคอมไพเลอร์ของ HP

-mportable-รันไทม์
ใช้ข้อตกลงการโทรแบบพกพาที่เสนอโดย HP สำหรับระบบ ELF

-แก๊ส
เปิดใช้งานการใช้คำสั่งแอสเซมเบลอร์ GAS เท่านั้นที่เข้าใจ

-mschedule=ประเภทซีพียู
รหัสกำหนดการตามข้อจำกัดสำหรับประเภทเครื่อง ประเภทซีพียู. ทางเลือก
for ประเภทซีพียู เป็น 700 7100, 7100LC, 7200, 7300 และ 8000. เอ่ยถึง
/usr/lib/sched.models บนระบบ HP-UX เพื่อกำหนดตัวเลือกการตั้งเวลาที่เหมาะสมสำหรับ
เครื่องของคุณ การตั้งเวลาเริ่มต้นคือ 8000.

-mlinker-ตัวเลือก
เปิดใช้งานการเพิ่มประสิทธิภาพผ่านใน HP-UX linker สังเกตว่าสิ่งนี้ทำให้เกิดการดีบักเชิงสัญลักษณ์
เป็นไปไม่ได้. นอกจากนี้ยังทำให้เกิดจุดบกพร่องในตัวเชื่อมโยง HP-UX 8 และ HP-UX 9 ที่พวกเขา
ให้ข้อความแสดงข้อผิดพลาดปลอมเมื่อเชื่อมโยงบางโปรแกรม

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

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

-msio
สร้างที่กำหนดไว้ล่วงหน้า "_SIO" สำหรับเซิร์ฟเวอร์ IO ค่าเริ่มต้นคือ -mwsio. สิ่งนี้ทำให้เกิด
กำหนดไว้ล่วงหน้า "__hp9000s700", "__hp9000s700__" และ "_WSIO" สำหรับเวิร์กสเตชัน IO
ตัวเลือกเหล่านี้มีอยู่ใน HP-UX และ HI-UX

-mgnu-ld
ใช้ตัวเลือกเฉพาะของ GNU ld นี้ผ่านไป - แบ่งปัน ที่จะ ld เมื่อสร้างที่ใช้ร่วมกัน
ห้องสมุด. เป็นค่าเริ่มต้นเมื่อมีการกำหนดค่า GCC อย่างชัดเจนหรือโดยปริยายด้วย
ตัวเชื่อมโยง GNU ตัวเลือกนี้ไม่มีผลกับการเรียก ld เท่านั้น
เปลี่ยนพารามิเตอร์ที่ส่งผ่านไปยัง ld นั้น ลาที่เรียกถูกกำหนดโดย
--กับ-ld กำหนดค่าตัวเลือก เส้นทางการค้นหาโปรแกรมของ GCC และสุดท้ายโดยผู้ใช้
เส้นทาง. ตัวเชื่อมโยงที่ใช้โดย GCC สามารถพิมพ์ได้โดยใช้ ที่ `จีซีซี -print-prog-name=ld`.
ตัวเลือกนี้มีเฉพาะใน HP-UX GCC 64 บิตเท่านั้น เช่น กำหนดค่าด้วย
แรงม้าปา*64*-*-hpux*.

-mhp-ld
ใช้ตัวเลือกเฉพาะของ HP ld นี้ผ่านไป -b ในการสร้างห้องสมุดที่ใช้ร่วมกันและ
ผ่าน +ยอมรับ ประเภทMismatch ไปที่ ld ทุกลิงค์ เป็นค่าเริ่มต้นเมื่อ GCC เป็น
กำหนดค่าโดยชัดแจ้งหรือโดยปริยายด้วยตัวเชื่อมโยง HP ตัวเลือกนี้ไม่มี
ผลกระทบใด ๆ ที่เรียก ld มันจะเปลี่ยนเฉพาะพารามิเตอร์ที่ส่งผ่านไปยังสิ่งนั้น
อายุ LD ที่ถูกเรียกถูกกำหนดโดย --กับ-ld กำหนดค่าตัวเลือก GCC's
เส้นทางการค้นหาโปรแกรมและสุดท้ายโดยผู้ใช้ เส้นทาง. ตัวเชื่อมโยงที่ใช้โดย GCC สามารถเป็น
พิมพ์โดยใช้ ที่ `จีซีซี -print-prog-name=ld`. ตัวเลือกนี้มีเฉพาะใน
HP-UX GCC 64 บิต เช่น กำหนดค่าด้วย แรงม้าปา*64*-*-hpux*.

-mlong-โทร
สร้างรหัสที่ใช้ลำดับการโทรยาว สิ่งนี้ทำให้มั่นใจได้ว่าการโทรจะทำได้เสมอ
เพื่อเข้าถึงต้นขั้วที่สร้างตัวเชื่อมโยง ค่าเริ่มต้นคือการสร้างสายยาวเฉพาะเมื่อ
ระยะห่างจากไซต์การโทรถึงจุดเริ่มต้นของฟังก์ชันหรือหน่วยการแปลเช่น
กรณีอาจเกินขีดจำกัดที่กำหนดไว้ล่วงหน้าซึ่งกำหนดโดยประเภทสาขาที่ใช้ NS
ขีด จำกัด สำหรับการโทรปกติคือ 7,600,000 และ 240,000 ไบต์ตามลำดับสำหรับ PA 2.0
และสถาปัตยกรรม PA 1.X Sibcalls ถูก จำกัด ไว้ที่ 240,000 ไบต์เสมอ

ระยะทางจะวัดจากจุดเริ่มต้นของฟังก์ชันเมื่อใช้
-ffunction-ส่วน ตัวเลือกหรือเมื่อใช้ -แก๊ส และ -mno-portable-รันไทม์ ตัวเลือก
ร่วมกันภายใต้ HP-UX พร้อมตัวเชื่อมโยง SOM

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

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

-มูนิกซ์=ยูนิกซ์-std
สร้างคอมไพเลอร์กำหนดล่วงหน้าและเลือก startfile สำหรับมาตรฐาน UNIX ที่ระบุ
ทางเลือกของ ยูนิกซ์-std เป็น 93, 95 และ 98. 93 รองรับ HP-UX ทุกรุ่น
95 สามารถใช้ได้ใน HP-UX 10.10 และใหม่กว่า 98 สามารถใช้ได้ใน HP-UX 11.11 และใหม่กว่า
ค่าเริ่มต้นคือ 93 สำหรับ HP-UX 10.00, 95 สำหรับ HP-UX 10.10 ถึง 11.00 และ 98
สำหรับ HP-UX 11.11 และใหม่กว่า

-มูนิกซ์=93 ให้คำจำกัดความล่วงหน้าเหมือนกับ GCC 3.3 และ 3.4 -มูนิกซ์=95 ให้
กำหนดล่วงหน้าเพิ่มเติมสำหรับ "XOPEN_UNIX" และ "_XOPEN_SOURCE_EXTENDED" และ startfile
ยูนิกซ์ 95.o. -มูนิกซ์=98 ให้คำจำกัดความเพิ่มเติมสำหรับ "_XOPEN_UNIX"
"_XOPEN_SOURCE_EXTENDED", "_INCLUDE__STDC_A1_SOURCE" และ "_INCLUDE_XOPEN_SOURCE_500",
และ startfile ยูนิกซ์ 98.o.

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

รหัสห้องสมุดที่มีวัตถุประสงค์เพื่อใช้งานกับมาตรฐาน UNIX มากกว่าหนึ่งมาตรฐานต้องทดสอบ
ตั้งค่าและกู้คืนตัวแปร __xpg4_extend_mask ตามความเหมาะสม ซอฟต์แวร์ GNU ส่วนใหญ่
ไม่ได้ให้ความสามารถนี้

-nolibdld
ระงับการสร้างตัวเลือกลิงก์เพื่อค้นหา libdld.sl เมื่อ -คงที่ ตัวเลือกที่
ระบุไว้ใน HP-UX 10 และใหม่กว่า

-คงที่
การใช้งาน HP-UX ของ setlocale ใน libc มีการพึ่งพา libdld.sl ที่นั่น
ไม่ใช่เวอร์ชันเก็บถาวรของ libdld.sl ดังนั้น เมื่อ -คงที่ มีการระบุตัวเลือก
จำเป็นต้องใช้ตัวเลือกลิงก์พิเศษเพื่อแก้ไขการขึ้นต่อกันนี้

ใน HP-UX 10 และใหม่กว่า ไดรเวอร์ GCC จะเพิ่มตัวเลือกที่จำเป็นในการลิงก์ด้วย
libdld.sl เมื่อ -คงที่ มีการระบุตัวเลือก สิ่งนี้ทำให้ไบนารีที่ได้to
เป็นแบบไดนามิก บนพอร์ต 64 บิต ตัวเชื่อมโยงจะสร้างไบนารีแบบไดนามิกโดยค่าเริ่มต้นใน
กรณีใดๆ NS -nolibdld สามารถใช้ตัวเลือกเพื่อป้องกันไม่ให้ไดรเวอร์ GCC เพิ่ม
ตัวเลือกลิงก์เหล่านี้

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

อินเทล 386 และ เอเอ็มดี x86-64 Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับคอมพิวเตอร์ตระกูล i386 และ x86-64:

-mtune=ประเภทซีพียู
ปรับไปที่ ประเภทซีพียู ทุกอย่างที่เกี่ยวข้องกับโค้ดที่สร้างขึ้น ยกเว้น ABI
และชุดคำสั่งที่ใช้ได้ ทางเลือกของ ประเภทซีพียู คือ:

ทั่วไป
สร้างโค้ดที่ปรับให้เหมาะสมสำหรับโปรเซสเซอร์ IA32/AMD64/EM64T ทั่วไป ถ้าคุณ
รู้ CPU ที่รหัสของคุณจะทำงาน จากนั้นคุณควรใช้ที่สอดคล้องกัน
-mtune ตัวเลือกแทน -mtune=ทั่วไป. แต่ถ้าไม่รู้ว่า CPU อะไร
ผู้ใช้แอปพลิเคชันของคุณจะมี จากนั้นคุณควรใช้ตัวเลือกนี้

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

ไม่มี -มีนาคม=ทั่วไป ตัวเลือกเพราะ -มีนาคม หมายถึงชุดคำสั่ง
คอมไพเลอร์สามารถใช้ได้ และไม่มีชุดคำสั่งทั่วไปที่ใช้ได้กับทุกคน
โปรเซสเซอร์ ในทางตรงกันข้าม, -mtune หมายถึงโปรเซสเซอร์ (หรือในกรณีนี้
คอลเลกชันของโปรเซสเซอร์) ซึ่งโค้ดได้รับการปรับให้เหมาะสม

พื้นเมือง
สิ่งนี้จะเลือก CPU เพื่อปรับแต่งในเวลารวบรวมโดยพิจารณาโปรเซสเซอร์
ประเภทของเครื่องคอมไพล์ โดยใช้ -mtune=เจ้าของภาษา จะสร้างโค้ดที่ปรับให้เหมาะสม
สำหรับเครื่องโลคัลภายใต้ข้อจำกัดของชุดคำสั่งที่เลือก
การใช้ -march=เจ้าของภาษา จะเปิดใช้งานชุดย่อยคำสั่งทั้งหมดที่รองรับโดย local
เครื่อง (ดังนั้น ผลลัพธ์อาจไม่ทำงานบนเครื่องอื่น)

i386
CPU i386 ดั้งเดิมของ Intel

i486
ซีพียู i486 ของอินเทล (ไม่มีการตั้งเวลาสำหรับชิปนี้)

i586, Pentium
ซีพียู Intel Pentium ที่ไม่รองรับ MMX

เพนเทียม-mmx
Intel PentiumMMX CPU ที่ใช้ Pentium core พร้อมรองรับชุดคำสั่ง MMX

เพนเทียมโปร
ซีพียู Intel PentiumPro

i686
เหมือนกับ "ทั่วไป" แต่เมื่อใช้เป็นตัวเลือก "มีนาคม" ชุดคำสั่ง PentiumPro
จะถูกใช้ ดังนั้นรหัสจะทำงานบนชิปตระกูล i686 ทั้งหมด

เพนเทียม 2
Intel Pentium2 CPU ที่ใช้ PentiumPro core พร้อมรองรับชุดคำสั่ง MMX

เพนเทียม3, เพนเทียม3ม
ซีพียู Intel Pentium3 ที่ใช้ PentiumPro core พร้อมชุดคำสั่ง MMX และ SSE
สนับสนุน

เพนเทียม-m
ซีพียู Intel Pentium3 รุ่นพลังงานต่ำพร้อมชุดคำสั่ง MMX, SSE และ SSE2
สนับสนุน. ใช้โดยโน้ตบุ๊ก Centrino

เพนเทียม4, เพนเทียม4ม
ซีพียู Intel Pentium4 พร้อมชุดคำสั่ง MMX, SSE และ SSE2

เพรสคอตต์
เวอร์ชันปรับปรุงของ Intel Pentium4 CPU พร้อมคำสั่ง MMX, SSE, SSE2 และ SSE3
ตั้งค่าการสนับสนุน

โนโคนา
เวอร์ชันปรับปรุงของ Intel Pentium4 CPU พร้อมส่วนขยาย 64 บิต, MMX, SSE, SSE2 และ
รองรับชุดคำสั่ง SSE3

core2
Intel Core2 CPU พร้อมส่วนขยาย 64 บิต, คำแนะนำ MMX, SSE, SSE2, SSE3 และ SSSE3
ตั้งค่าการสนับสนุน

corei7
Intel Core i7 CPU พร้อมส่วนขยาย 64 บิต, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1 และ
รองรับชุดคำสั่ง SSE4.2

corei7-avx
ซีพียู Intel Core i7 พร้อมส่วนขยาย 64 บิต, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
รองรับชุดคำสั่ง SSE4.2, AVX, AES และ PCLMUL

แกน-avx-i
Intel Core CPU พร้อมส่วนขยาย 64 บิต, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1,
รองรับชุดคำสั่ง SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND และ F16C

อะตอม
Intel Atom CPU พร้อมส่วนขยาย 64 บิต, คำแนะนำ MMX, SSE, SSE2, SSE3 และ SSSE3
ตั้งค่าการสนับสนุน

k6 AMD K6 CPU พร้อมชุดคำสั่ง MMX

k6-2, k6-3
เวอร์ชันปรับปรุงของ AMD K6 CPU พร้อม MMX และ 3DNow! การสนับสนุนชุดคำสั่ง

แอธลอน, แอธลอน-tbird
ซีพียู AMD Athlon พร้อม MMX, 3dNOW!, ปรับปรุง 3DNow! และคำแนะนำในการดึงข้อมูลล่วงหน้าของ SSE
สนับสนุน

แอธลอน-4, แอธลอน-xp, แอธลอน-mp
ปรับปรุงซีพียู AMD Athlon ด้วย MMX, 3DNow!, ปรับปรุง 3DNow! และคำแนะนำ SSE ฉบับสมบูรณ์
ตั้งค่าการสนับสนุน

k8 ออปโตรอน, แอธลอน64, แอธลอน-fx
ซีพียูที่ใช้คอร์ AMD K8 พร้อมรองรับชุดคำสั่ง x86-64 (สิ่งนี้ supersets MMX,
SSE, SSE2, 3DNow!, ปรับปรุง 3DNow! และส่วนขยายชุดคำสั่ง 64 บิต)

k8-sse3, ออพเทอรอน-sse3, แอทลอน64-sse3
เวอร์ชันปรับปรุงของ k8, opteron และ athlon64 พร้อมรองรับชุดคำสั่ง SSE3

amdfam10, บาร์เซโลนา
ซีพียู AMD Family 10h core ที่รองรับชุดคำสั่ง x86-64 (นี้
supersets MMX, SSE, SSE2, SSE3, SSE4A, 3DNow!, 3DNow ที่ปรับปรุงแล้ว!, ABM และ 64 บิต
ส่วนขยายชุดคำสั่ง)

bdver1
ซีพียู AMD Family 15h core ที่รองรับชุดคำสั่ง x86-64 (นี้
ซูเปอร์เซ็ต FMA4, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2, SSE3, SSE4A,
SSSE3, SSE4.1, SSE4.2, ABM และส่วนขยายชุดคำสั่ง 64 บิต)

bdver2
ซีพียู AMD Family 15h core ที่รองรับชุดคำสั่ง x86-64 (นี้
ตั้งค่า BMI, TBM, F16C, FMA, AVX, XOP, LWP, AES, PCL_MUL, CX16, MMX, SSE, SSE2,
SSE3, SSE4A, SSSE3, SSE4.1, SSE4.2, ABM และส่วนขยายชุดคำสั่ง 64 บิต)

btver1
ซีพียู AMD Family 14h core ที่รองรับชุดคำสั่ง x86-64 (นี้
supersets MMX, SSE, SSE2, SSE3, SSSE3, SSE4A, CX16, ABM และชุดคำสั่ง 64 บิต
นามสกุล.)

วินชิป-c6
IDT Winchip C6 CPU จัดการในลักษณะเดียวกับ i486 พร้อมชุดคำสั่ง MMX เพิ่มเติม
สนับสนุน

วินชิป2
IDT Winchip2 CPU จัดการในลักษณะเดียวกับ i486 พร้อม MMX และ 3DNow เพิ่มเติม!
การสนับสนุนชุดคำสั่ง

c3 ผ่าน C3 CPU พร้อม MMX และ 3DNow! การสนับสนุนชุดคำสั่ง (ไม่มีกำหนดการคือ
ใช้สำหรับชิปนี้)

c3-2
ผ่านซีพียู C3-2 พร้อมรองรับชุดคำสั่ง MMX และ SSE (ไม่มีกำหนดการคือ
ใช้สำหรับชิปนี้)

Geode
ซีพียู AMD แบบฝังพร้อม MMX และ 3DNow! การสนับสนุนชุดคำสั่ง

ในขณะที่เลือกเฉพาะ ประเภทซีพียู จะจัดตารางเวลาให้เหมาะสม
ชิปโดยเฉพาะคอมไพเลอร์จะไม่สร้างรหัสใด ๆ ที่ไม่ได้ทำงานบน
ประเภทเครื่องเริ่มต้นโดยไม่มี -มีนาคม=ประเภทซีพียู ตัวเลือกที่ใช้ ตัวอย่างเช่น if
GCC ได้รับการกำหนดค่าสำหรับ i686-pc-linux-gnu แล้ว -mtune=เพนเทียม4 จะสร้างรหัสว่า
ได้รับการปรับแต่งสำหรับ Pentium4 แต่จะยังคงทำงานบนเครื่อง i686

-มีนาคม=ประเภทซีพียู
สร้างคำแนะนำสำหรับประเภทเครื่อง ประเภทซีพียู. ทางเลือกของ ประเภทซีพียู เป็น
เช่นเดียวกับสำหรับ -mtune. นอกจากนี้ โดยระบุ -มีนาคม=ประเภทซีพียู หมายถึง -mtune=ประเภทซีพียู.

-mcpu=ประเภทซีพียู
คำพ้องความหมายที่คัดค้านสำหรับ -mtune.

-mfpmath=หน่วย
สร้างเลขทศนิยมสำหรับหน่วยที่เลือก หน่วย. ทางเลือกของ หน่วย คือ:

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

นี่คือตัวเลือกเริ่มต้นสำหรับคอมไพเลอร์ i386

SSE ใช้คำสั่งทศนิยมสเกลาร์ที่มีอยู่ในชุดคำสั่ง SSE นี้
ชุดคำสั่งรองรับโดย Pentium3 และชิปที่ใหม่กว่าในสาย AMD โดย
ชิป Athlon-4, Athlon-xp และ Athlon-mp คำแนะนำ SSE เวอร์ชันก่อนหน้า
ชุดรองรับเลขคณิตแบบแม่นยำเดียว ดังนั้น เลขคู่และตัวขยาย-
การคำนวณที่แม่นยำยังคงใช้ 387 เวอร์ชันที่ใหม่กว่า แสดงเฉพาะใน
Pentium4 และชิป AMD x86-64 ในอนาคต รองรับการคำนวณทางคณิตศาสตร์ที่มีความแม่นยำสองเท่า
เกินไป

สำหรับคอมไพเลอร์ i386 คุณต้องใช้ -มีนาคม=ประเภทซีพียู, -msse or -mse2 สวิทช์
เพื่อเปิดใช้งานส่วนขยาย SSE และทำให้ตัวเลือกนี้มีประสิทธิภาพ สำหรับคอมไพเลอร์ x86-64
ส่วนขยายเหล่านี้เปิดใช้งานโดยค่าเริ่มต้น

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

นี่เป็นตัวเลือกเริ่มต้นสำหรับคอมไพเลอร์ x86-64

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

-มาสม์=ภาษาถิ่น
เอาต์พุตคำสั่ง asm โดยใช้ที่เลือกไว้ ภาษาถิ่น. ตัวเลือกที่รองรับคือ Intel or ไปยัง
(ค่าเริ่มต้นอันหนึ่ง). ดาร์วินไม่สนับสนุน Intel.

-mieee-fp
-mno-ieee-fp
ควบคุมว่าคอมไพเลอร์ใช้การเปรียบเทียบจุดทศนิยมของ IEEE หรือไม่ เหล่านี้
จัดการกรณีที่ผลการเปรียบเทียบไม่เรียงลำดับอย่างถูกต้อง

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

บนเครื่องที่ฟังก์ชันส่งคืนผลลัพธ์ทศนิยมในการลงทะเบียน 80387
stack opcodes ทศนิยมบางส่วนอาจถูกปล่อยออกมาแม้ว่า -msoft-ลอย ถูกนำมาใช้.

-mno-fp-ret-in-387
อย่าใช้การลงทะเบียน FPU เพื่อส่งกลับค่าของฟังก์ชัน

แบบแผนการเรียกปกติมีฟังก์ชันส่งคืนค่าประเภท "float" และ "double"
ในการลงทะเบียน FPU แม้ว่าจะไม่มี FPU แนวคิดก็คือระบบปฏิบัติการ
ควรเลียนแบบ FPU

ทางเลือก -mno-fp-ret-in-387 ทำให้ค่าดังกล่าวถูกส่งกลับใน CPU ธรรมดา
ลงทะเบียนแทน

-mno-fancy-คณิต-387
อีมูเลเตอร์ 387 ตัวไม่รองรับคำสั่ง "sin", "cos" และ "sqrt" สำหรับ
387. ระบุตัวเลือกนี้เพื่อหลีกเลี่ยงการสร้างคำแนะนำเหล่านั้น ตัวเลือกนี้คือ
ค่าเริ่มต้นบน FreeBSD, OpenBSD และ NetBSD ตัวเลือกนี้จะถูกแทนที่เมื่อ -มีนาคม
บ่งชี้ว่า CPU เป้าหมายจะมี FPU เสมอ ดังนั้นคำสั่งจะไม่
ต้องการการจำลอง ในการแก้ไข 2.6.1 คำแนะนำเหล่านี้จะไม่ถูกสร้างขึ้นเว้นแต่คุณจะ
ยังใช้ -funsafe-คณิตศาสตร์-optimizations สวิตซ์.

-malign-ดับเบิ้ล
-mno-จัด-double
ควบคุมว่า GCC จะจัดเรียงตัวแปร "double", "long double" และ "long long" บน a . หรือไม่
ขอบเขตสองคำหรือขอบเขตหนึ่งคำ การจัดตำแหน่งตัวแปร "คู่" บนคำสองคำ
ขอบเขตสร้างรหัสที่ทำงานเร็วขึ้นบนa Pentium โดยเสียค่าใช้จ่ายเพิ่มเติม
หน่วยความจำ

บน x86-64 -malign-ดับเบิ้ล ถูกเปิดใช้งานโดยค่าเริ่มต้น

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

-m96bit-ยาวสองเท่า
-m128bit-ยาวสองเท่า
สวิตช์เหล่านี้ควบคุมขนาดของประเภท "long double" แอปพลิเคชั่น i386 ไบนารี
อินเทอร์เฟซระบุขนาดเป็น 96 บิต ดังนั้น -m96bit-ยาวสองเท่า เป็นค่าเริ่มต้นใน
โหมด 32 บิต

สถาปัตยกรรมสมัยใหม่ (Pentium และใหม่กว่า) ชอบ "long double" เพื่อให้สอดคล้องกับ 8-
หรือขอบ 16 ไบต์ ในอาร์เรย์หรือโครงสร้างที่สอดคล้องกับ ABI นี่ไม่ใช่
เป็นไปได้. ดังนั้นการระบุ -m128bit-ยาวสองเท่า จัดแนว "long double" เป็น 16-byte
ขอบเขตโดยการเติม "long double" ด้วยศูนย์ 32 บิตเพิ่มเติม

ในคอมไพเลอร์ x86-64 -m128bit-ยาวสองเท่า เป็นตัวเลือกเริ่มต้นเป็นABI
ระบุว่า "long double" จะถูกจัดตำแหน่งบนขอบเขต 16 ไบต์

โปรดสังเกตว่าไม่มีตัวเลือกใดที่เปิดใช้งานความแม่นยำพิเศษเหนือมาตรฐาน x87
80 บิตสำหรับ "long double"

คำเตือน: หากคุณลบล้างค่าเริ่มต้นสำหรับ ABI เป้าหมาย โครงสร้างและ
อาร์เรย์ที่มีตัวแปร "long double" จะเปลี่ยนขนาดและฟังก์ชัน
การเรียกแบบแผนสำหรับฟังก์ชันที่ใช้ "long double" จะได้รับการแก้ไข ดังนั้นพวกเขา
จะไม่เป็นไบนารีที่เข้ากันได้กับอาร์เรย์หรือโครงสร้างในโค้ดที่คอมไพล์โดยไม่มีสิ่งนั้น
สวิตซ์.

-mlarge-data-threshold=จำนวน
เมื่อ -mcmodel=กลาง ระบุไว้ ข้อมูลที่มากกว่า ธรณีประตู จะถูกวางไว้ในขนาดใหญ่
ส่วนข้อมูล ค่านี้ต้องเหมือนกันในทุกอ็อบเจ็กต์ที่เชื่อมโยงกับไบนารี
และค่าเริ่มต้นเป็น 65535

-mrtd
ใช้แบบแผนการเรียกฟังก์ชันที่แตกต่างกัน ซึ่งในฟังก์ชันที่ใช้ค่าคงที่
จำนวนอาร์กิวเมนต์ที่ส่งคืนด้วย "ret" NUM คำสั่งซึ่งแสดงข้อโต้แย้งของพวกเขา
ขณะกลับมา สิ่งนี้จะบันทึกหนึ่งคำสั่งในผู้โทรเนื่องจากไม่จำเป็นต้อง
ป๊อปอาร์กิวเมนต์ที่นั่น

คุณสามารถระบุให้แต่ละฟังก์ชันถูกเรียกด้วยลำดับการเรียกนี้ด้วย
คุณลักษณะของฟังก์ชัน stdcall. คุณยังสามารถแทนที่ -mrtd ตัวเลือกโดยใช้
ลักษณะการทำงาน ซีดี.

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

นอกจากนี้ คุณต้องจัดเตรียมต้นแบบฟังก์ชันสำหรับฟังก์ชันทั้งหมดที่ใช้ตัวแปร
จำนวนอาร์กิวเมนต์ (รวมถึง "printf"); มิฉะนั้นจะสร้างรหัสที่ไม่ถูกต้อง
สำหรับการเรียกใช้ฟังก์ชันเหล่านั้น

นอกจากนี้โค้ดที่ไม่ถูกต้องอย่างร้ายแรงจะส่งผลหากคุณเรียกใช้ฟังก์ชันที่มีมากเกินไป
อาร์กิวเมนต์ (โดยปกติ อาร์กิวเมนต์เพิ่มเติมจะถูกละเว้นอย่างไม่เป็นอันตราย)

-MregParm =NUM
ควบคุมจำนวนรีจิสเตอร์ที่ใช้ส่งอาร์กิวเมนต์จำนวนเต็ม โดยค่าเริ่มต้น no
รีจิสเตอร์ใช้สำหรับส่งผ่านอาร์กิวเมนต์ และสามารถใช้รีจิสเตอร์ได้สูงสุด 3 รายการ คุณสามารถ
ควบคุมพฤติกรรมนี้สำหรับฟังก์ชันเฉพาะโดยใช้แอตทริบิวต์ของฟังก์ชัน รีแพร์.

คำเตือน: หากคุณใช้สวิตช์นี้และ NUM ไม่ใช่ศูนย์ ดังนั้นคุณต้องสร้างโมดูลทั้งหมด
ที่มีค่าเท่ากัน รวมถึงห้องสมุดต่างๆ ซึ่งรวมถึงไลบรารีระบบและ
โมดูลเริ่มต้น

-msseregparm
ใช้การลงทะเบียน SSE ผ่านข้อตกลงสำหรับทุ่นและอาร์กิวเมนต์คู่และคืนค่า
คุณสามารถควบคุมลักษณะการทำงานนี้สำหรับฟังก์ชันเฉพาะได้โดยใช้แอตทริบิวต์ของฟังก์ชัน
sseregparm.

คำเตือน: หากคุณใช้สวิตช์นี้ คุณต้องสร้างโมดูลทั้งหมดที่มีค่าเท่ากัน
รวมถึงห้องสมุดใด ๆ ซึ่งรวมถึงไลบรารีระบบและโมดูลการเริ่มต้นระบบ

-mvect8-ret-ในเมม
ส่งคืนเวกเตอร์ 8 ไบต์ในหน่วยความจำแทนการลงทะเบียน MMX นี่คือค่าเริ่มต้นบน
Solaris@tie{}8 และ 9 และ VxWorks เพื่อให้ตรงกับ ABI ของคอมไพเลอร์ Sun Studio จนถึง
เวอร์ชัน 12. คอมไพเลอร์เวอร์ชันที่ใหม่กว่า (เริ่มต้นด้วย Studio 12 Update@tie{}1) follow
ABI ที่ใช้โดยเป้าหมาย x86 อื่นๆ ซึ่งเป็นค่าเริ่มต้นใน Solaris@tie{}10 ​​และใหม่กว่า
เหลือเพียง ใช้ตัวเลือกนี้หากคุณต้องการยังคงเข้ากันได้กับรหัสที่มีอยู่ซึ่งผลิตโดย
คอมไพเลอร์เวอร์ชันก่อนหน้าหรือ GCC เวอร์ชันเก่า

-mpc32
-mpc64
-mpc80
ตั้งค่าความแม่นยำจุดลอยตัว 80387 เป็น 32, 64 หรือ 80 บิต เมื่อไหร่ -mpc32 ระบุไว้
ซิกนิฟิแคนด์ของผลลัพธ์ของการดำเนินการจุดลอยตัวถูกปัดเศษเป็น 24 บิต
(ความแม่นยำเดียว); -mpc64 ปัดเศษนัยสำคัญของผลลัพธ์ของจุดลอยตัว
การดำเนินงานถึง 53 บิต (ความแม่นยำสองเท่า) และ -mpc80 ปัดเศษความหมายของผลลัพธ์
ของการดำเนินการจุดทศนิยมเป็น 64 บิต (ขยายความแม่นยำสองเท่า) ซึ่งก็คือ
ค่าเริ่มต้น. เมื่อใช้ตัวเลือกนี้ การดำเนินการจุดทศนิยมที่มีความแม่นยำสูงกว่าจะเป็น
โปรแกรมเมอร์ไม่สามารถใช้งานได้โดยไม่ต้องตั้งค่าคำควบคุม FPU อย่างชัดเจน

การตั้งค่าการปัดเศษของการดำเนินการจุดลอยตัวให้น้อยกว่าค่าเริ่มต้น 80 บิตสามารถ
เร่งความเร็วบางโปรแกรม 2% หรือมากกว่า โปรดทราบว่าห้องสมุดคณิตศาสตร์บางแห่งถือว่า
การดำเนินการจุดทศนิยมแบบขยายความแม่นยำ (80 บิต) ถูกเปิดใช้งานโดยค่าเริ่มต้น กิจวัตรประจำวัน
ในห้องสมุดดังกล่าวอาจสูญเสียความแม่นยำอย่างมาก โดยทั่วไปแล้วจะ-
เรียกว่า "การยกเลิกภัยพิบัติ" เมื่อใช้ตัวเลือกนี้เพื่อตั้งค่าความแม่นยำเป็น
น้อยกว่าความแม่นยำที่เพิ่มขึ้น

-mstackrealign
จัดแนวสแต็กใหม่ที่รายการ บน Intel x86, the -mstackrealign ตัวเลือกจะสร้าง
อารัมภบทและบทส่งท้ายทางเลือกที่ปรับรันไทม์สแต็กใหม่ หากจำเป็น
รองรับการผสมรหัสดั้งเดิมที่จัดสแต็ก 4 ไบต์ด้วยรหัสที่ทันสมัย
ที่เก็บสแต็กขนาด 16 ไบต์ไว้สำหรับความเข้ากันได้ของ SSE ดูเพิ่มเติมที่แอตทริบิวต์
"force_align_arg_pointer" ใช้ได้กับแต่ละฟังก์ชัน

-mpreferred-stack-ขอบเขต=NUM
พยายามจัดขอบเขตสแต็กให้อยู่ในแนวเดียวกับ 2 ที่ยกขึ้นเป็น NUM ขอบเขตไบต์ ถ้า
-mpreferred-stack-ขอบเขต ไม่ได้ระบุ ค่าเริ่มต้นคือ 4 (16 ไบต์หรือ 128 บิต)

คำเตือน: เมื่อสร้างโค้ดสำหรับสถาปัตยกรรม x86-64 ด้วยส่วนขยาย SSE
พิการ, -mpreferred-stack-boundary=3 สามารถใช้เพื่อจัดแนวขอบสแต็กได้
ถึง 8 ไบต์ขอบเขต คุณต้องสร้างโมดูลทั้งหมดด้วย -mpreferred-stack-boundary=3,
รวมถึงห้องสมุดใด ๆ ซึ่งรวมถึงไลบรารีระบบและโมดูลการเริ่มต้นระบบ

-mincoming-stack-boundary=NUM
สมมติว่าสแต็กขาเข้าถูกจัดตำแหน่งให้เป็น 2 ที่ยกขึ้นเป็น NUM ขอบเขตไบต์ ถ้า
-mincoming-stack-ขอบเขต ไม่ได้ระบุ, ที่กำหนดโดย
-mpreferred-stack-ขอบเขต จะถูกนำไปใช้.

บน Pentium และ PentiumPro ค่า "double" และ "long double" ควรจัดแนวให้ตรงกับ an
ขอบเขต 8 ไบต์ (ดู -malign-ดับเบิ้ล) หรือประสบกับประสิทธิภาพของรันไทม์ที่สำคัญ
บทลงโทษ บน Pentium III ประเภทข้อมูล Streaming SIMD Extension (SSE) "__m128" อาจ
ทำงานไม่ถูกต้องหากไม่ได้จัดตำแหน่งแบบ 16 ไบต์

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

การจัดตำแหน่งพิเศษนี้ใช้พื้นที่สแต็กเพิ่มเติม และโดยทั่วไปจะเพิ่มโค้ด
ขนาด. โค้ดที่ไวต่อการใช้พื้นที่สแต็ก เช่น ระบบฝังตัวและ
เคอร์เนลระบบปฏิบัติการอาจต้องการลดการจัดตำแหน่งที่ต้องการเป็น
-mpreferred-stack-boundary=2.

-mmmmx
-mno-mmx
-msse
-mno-sse
-mse2
-mno-sse2
-mse3
-mno-sse3
-mssse3
-mno-ssse3
-mse4.1
-mno-sse4.1
-mse4.2
-mno-sse4.2
-mse4
-mno-sse4
-mavx
-mno-avx
-mavx2
-mno-avx2
-แม่
-mno-แอ
-mclmul
-mno-pcmlul
-mfsgsฐาน
-mno-fsgsbase
-mrdrd
-mno-rdrnd
-mf16c
-mno-f16c
-mfma
-mno-fma
-mse4a
-mno-sse4a
-mfma4
-mno-fma4
-mxop
-mno-xop
-mlwp
-mno-lwp
-m3dnow
-mno-3dnow
-mpopcnt
-mno-popcnt
-แมม
-mno-abm
-mbmi
-mbmi2
-mno-bmi
-mno-bmi2
-mlzcnt
-mno-lzcnt
-เอ็มทีบีเอ็ม
-mno-tbm
สวิตช์เหล่านี้เปิดหรือปิดการใช้คำแนะนำใน MMX, SSE, SSE2, SSE3,
SSSE3, SSE4.1, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, F16C, FMA, SSE4A, FMA4, XOP,
LWP, ABM, BMI, BMI2, LZCNT หรือ 3DNow!
ชุดคำสั่งขยาย ส่วนขยายเหล่านี้ยังมีอยู่ในตัว
ฟังก์ชัน: ดู X86 Built-in ฟังก์ชั่น, สำหรับรายละเอียดของฟังก์ชันที่เปิดใช้งานและ
ปิดการใช้งานโดยสวิตช์เหล่านี้

เพื่อให้คำสั่ง SSE/SSE2 สร้างขึ้นโดยอัตโนมัติจากรหัสทศนิยม (as
ตรงข้ามกับคำสั่ง 387) ดู -mfpmath=sse.

GCC กดคำสั่ง SSEx เมื่อ -mavx ถูกนำมาใช้. แทนที่จะสร้าง AVX . ใหม่
คำแนะนำหรือ AVX เทียบเท่าสำหรับคำสั่ง SSEx ทั้งหมดเมื่อจำเป็น

ตัวเลือกเหล่านี้จะทำให้ GCC ใช้คำแนะนำเพิ่มเติมเหล่านี้ในโค้ดที่สร้างขึ้น
แม้จะไม่มี -mfpmath=sse. แอพพลิเคชั่นที่ทำการตรวจจับ CPU รันไทม์จะต้อง
รวบรวมไฟล์แยกกันสำหรับแต่ละสถาปัตยกรรมที่รองรับ โดยใช้แฟล็กที่เหมาะสม
โดยเฉพาะอย่างยิ่ง ไฟล์ที่มีรหัสการตรวจจับ CPU ควรคอมไพล์โดยไม่มี
ตัวเลือกเหล่านี้

-mcld
ตัวเลือกนี้สั่งให้ GCC ปล่อยคำสั่ง "cld" ในบทนำของฟังก์ชัน
ที่ใช้คำสั่งสตริง คำแนะนำสตริงขึ้นอยู่กับแฟล็ก DF เพื่อเลือก
ระหว่างโหมด autoincrement หรือ autodecrement ในขณะที่ ABI ระบุแฟล็ก DF เป็น
ถูกล้างในการป้อนฟังก์ชัน ระบบปฏิบัติการบางระบบละเมิดข้อกำหนดนี้โดยไม่
การล้างแฟล็ก DF ในโปรแกรมเลือกจ่ายงานข้อยกเว้น ตัวจัดการข้อยกเว้นสามารถเป็น
เรียกใช้ด้วยชุดแฟล็ก DF ซึ่งนำไปสู่โหมดทิศทางที่ไม่ถูกต้องเมื่อสตริง
มีการใช้คำแนะนำ ตัวเลือกนี้สามารถเปิดใช้งานได้ตามค่าเริ่มต้นบนเป้าหมาย x32 แบบ 86 บิตโดย
กำหนดค่า GCC ด้วย -enable-cld กำหนดค่าตัวเลือก รุ่นของ "cld"
คำแนะนำสามารถระงับได้ด้วย -mno-cld ตัวเลือกคอมไพเลอร์ในกรณีนี้

-mvzerouper
ตัวเลือกนี้สั่งให้ GCC เผยแพร่คำสั่ง "vzerouper" ก่อนการโอน
ควบคุมการไหลออกจากฟังก์ชันเพื่อลดโทษการเปลี่ยน AVX เป็น SSE รวมทั้ง
ลบ intrinsics Zeroupper ที่ไม่จำเป็นออก

-mprefer-avx128
ตัวเลือกนี้แนะนำให้ GCC ใช้คำสั่ง AVX 128 บิตแทน AVX . 256 บิต
คำแนะนำใน auto-vectorizer

-mcx16
ตัวเลือกนี้จะทำให้ GCC ใช้คำสั่ง CMPXCHG16B ในโค้ดที่สร้างขึ้นได้
CMPXCHG16B อนุญาตให้ดำเนินการปรมาณูบนข้อมูล 128 บิต double quadword (หรือ oword)
ประเภท สิ่งนี้มีประโยชน์สำหรับตัวนับความละเอียดสูงที่สามารถอัพเดตได้หลายตัว
โปรเซสเซอร์ (หรือคอร์) คำสั่งนี้สร้างขึ้นโดยเป็นส่วนหนึ่งของ atomic built-in
ฟังก์ชัน: ดู __ซิงค์ บิลท์อิน or __อะตอม บิลท์อิน เพื่อดูรายละเอียด

-msahf
ตัวเลือกนี้จะทำให้ GCC ใช้คำสั่ง SAHF ในโค้ด 64 บิตที่สร้างขึ้น แต่แรก
ซีพียู Intel ที่มี Intel 64 ไม่มีคำสั่ง LAHF และ SAHF ที่รองรับโดย AMD64 จนถึง
การแนะนำ Pentium 4 G1 step ในเดือนธันวาคม 2005 LAHF และ SAHF เป็นโหลดและจัดเก็บ
คำแนะนำ ตามลำดับ สำหรับแฟล็กสถานะบางอย่าง ในโหมด 64 บิต SAHF
คำสั่งใช้เพื่อเพิ่มประสิทธิภาพฟังก์ชั่นในตัว "fmod", "drem" หรือ "remainder": see
อื่นๆ บิลท์อิน เพื่อดูรายละเอียด

-mmovbe
ตัวเลือกนี้จะทำให้ GCC ใช้คำสั่ง movbe เพื่อนำ "__builtin_bswap32" ไปใช้
และ "__builtin_bswap64"

-mcrc32
ตัวเลือกนี้จะเปิดใช้งานฟังก์ชันในตัว "__builtin_ia32_crc32qi"
"__builtin_ia32_crc32hi". "__builtin_ia32_crc32si" และ "__builtin_ia32_crc32di" เป็น
สร้างคำสั่งเครื่อง crc32

-mrecip
ตัวเลือกนี้จะทำให้ GCC ใช้คำสั่ง RCPSS และ RSQRTSS (และ
ตัวแปรเวกเตอร์ RCPPS และ RSQRTPS) ด้วยขั้นตอนของนิวตัน-ราฟสันเพิ่มเติมถึง
เพิ่มความแม่นยำแทน DIVSS และ SQRTSS (และตัวแปรแบบเวกเตอร์) สำหรับ
อาร์กิวเมนต์ทศนิยมความแม่นยำเดียว คำแนะนำเหล่านี้ถูกสร้างขึ้นก็ต่อเมื่อ
-funsafe-คณิตศาสตร์-optimizations เปิดใช้งานพร้อมกับ -finite-คณิตศาสตร์เท่านั้น และ
-fno-trapping-คณิตศาสตร์. โปรดทราบว่าในขณะที่ปริมาณงานของลำดับสูงกว่า
ปริมาณงานของคำสั่งที่ไม่ใช่ส่วนกลับ ความแม่นยำของลำดับสามารถเป็น
ลดลงมากถึง 2 ulp (กล่าวคือ ค่าผกผันของ 1.0 เท่ากับ 0.99999994)

โปรดทราบว่า GCC ใช้ "1.0f/sqrtf(NS)" ในแง่ของ RSQRTSS (หรือ RSQRTPS) อยู่แล้วด้วย
-ffast-คณิตศาสตร์ (หรือตัวเลือกด้านบนรวมกัน) และไม่จำเป็น -mrecip.

นอกจากนี้ โปรดทราบด้วยว่า GCC ปล่อยลำดับข้างต้นด้วยขั้นตอน Newton-Raphson เพิ่มเติมสำหรับ
vectorized single-float division และ vectorized "sqrtf(NS)" แล้วกับ -ffast-คณิตศาสตร์
(หรือตัวเลือกด้านบนรวมกัน) และไม่จำเป็น -mrecip.

-mrecip=เลือก
ตัวเลือกนี้ช่วยให้ควบคุมได้ว่าจะใช้คำแนะนำในการประมาณการส่วนต่างใด เลือก
เป็นรายการตัวเลือกที่คั่นด้วยเครื่องหมายจุลภาค ซึ่งอาจนำหน้าด้วย "!" เพื่อพลิก
ตัวเลือก: "ทั้งหมด": เปิดใช้งานคำแนะนำการประมาณทั้งหมด "ค่าเริ่มต้น": เปิดใช้งานค่าเริ่มต้น
คำแนะนำเทียบเท่ากับ -mrecip, "ไม่มี": ปิดใช้งานคำแนะนำการประมาณการทั้งหมด
เทียบเท่ากับ -mno-recip, "div": เปิดใช้งานการประมาณสำหรับการหารสเกลาร์
"vec-div": เปิดใช้งานการประมาณสำหรับการหารแบบเวกเตอร์ "sqrt": เปิดใช้งาน
การประมาณสำหรับสเกลาร์สแควร์รูท "vec-sqrt": เปิดใช้งานการประมาณสำหรับ
รากที่สองเวกเตอร์

ตัวอย่างเช่น -mrecip=ทั้งหมด,!sqrt จะเปิดใช้งานการประมาณส่วนกลับทั้งหมด
ยกเว้นรากที่สอง

-mveclabi=ชนิด
ระบุประเภท ABI ที่จะใช้สำหรับ vectorizing intrinsics โดยใช้ไลบรารีภายนอก
ประเภทที่รองรับคือ "svml" สำหรับไลบรารีคณิตศาสตร์เวกเตอร์แบบสั้นของ Intel และ "acml" สำหรับ
รูปแบบการเชื่อมต่อไลบรารีหลักคณิตศาสตร์ของ AMD GCC จะส่งสายไปยัง
"vmldExp2", "vmldLn2", "vmldLog102", "vmldLog102", "vmldPow2", "vmldTanh2",
"vmldTan2", "vmldAtan2", "vmldAtanh2", "vmldCbrt2", "vmldSinh2", "vmldSin2",
"vmldAsinh2", "vmldAsin2", "vmldCosh2", "vmldCos2", "vmldAcosh2", "vmldAcos2",
"vmlsExp4", "vmlsLn4", "vmlsLog104", "vmlsLog104", "vmlsPow4", "vmlsTanh4",
"vmlsTan4", "vmlsAtan4", "vmlsAtanh4", "vmlsCbrt4", "vmlsSinh4", "vmlsSin4",
"vmlsAsinh4", "vmlsAsin4", "vmlsCosh4", "vmlsCos4", "vmlsAcosh4" และ "vmlsAcos4" สำหรับ
ประเภทฟังก์ชันที่สอดคล้องกันเมื่อ -mveclabibi=svml ถูกใช้และ "__vrd2_sin"
"__vrd2_cos", "__vrd2_exp", "__vrd2_log", "__vrd2_log2", "__vrd2_log10",
"__vrs4_sinf", "__vrs4_cosf", "__vrs4_expf", "__vrs4_logf", "__vrs4_log2f",
"__vrs4_log10f" และ "__vrs4_powf" สำหรับประเภทฟังก์ชันที่เกี่ยวข้องเมื่อ
-mveclibabi=aml ถูกนำมาใช้. ทั้งคู่ -ftree- vectorize และ -funsafe-คณิตศาสตร์-optimizations มี
ที่จะเปิดใช้งาน ต้องระบุไลบรารีที่เข้ากันได้กับ SVML หรือ ACML ABI ที่ลิงค์
เวลา

-มาบิ=ชื่อ
สร้างรหัสสำหรับแบบแผนการเรียกที่ระบุ ค่าที่อนุญาตคือ: ระบบซิสวี for
ABI ที่ใช้กับ GNU/Linux และระบบอื่นๆ และ ms สำหรับ Microsoft ABI ค่าเริ่มต้น
คือการใช้ Microsoft ABI เมื่อกำหนดเป้าหมายไปที่ Windows ในระบบอื่นๆ ทั้งหมด ค่าเริ่มต้น
คือ SYSV ABI คุณสามารถควบคุมลักษณะการทำงานนี้สำหรับฟังก์ชันเฉพาะได้โดยใช้ปุ่ม
ลักษณะการทำงาน ms_abi/sysv_abi.

-mtls ภาษา =ชนิด
สร้างรหัสเพื่อเข้าถึงที่จัดเก็บเธรดในเครื่องโดยใช้ ละมังอาฟริกาหัวคล้ายวัว or gnu2 อนุสัญญา. ละมังอาฟริกาหัวคล้ายวัว
เป็นค่าเริ่มต้นแบบอนุรักษ์นิยม gnu2 มีประสิทธิภาพมากกว่า แต่อาจเพิ่มการคอมไพล์และรัน
ข้อกำหนดด้านเวลาที่ไม่สามารถตอบสนองได้กับทุกระบบ

-mpush-หาเรื่อง
-mno-ดัน-args
ใช้การดำเนินการ PUSH เพื่อจัดเก็บพารามิเตอร์ขาออก วิธีนี้สั้นกว่าและมักจะ
เร็วพอๆ กันกับวิธีการที่ใช้การดำเนินการ SUB/MOV และเปิดใช้งานโดยค่าเริ่มต้น ในบางส่วน
กรณีที่ปิดการใช้งานอาจช่วยปรับปรุงประสิทธิภาพเนื่องจากการจัดตารางเวลาที่ดีขึ้นและลดลง
การพึ่งพา

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

-mthreads
รองรับการจัดการข้อยกเว้น thread-safe บน หมิงw32. รหัสที่อาศัย thread-safe
การจัดการข้อยกเว้นต้องรวบรวมและเชื่อมโยงรหัสทั้งหมดกับ -mthreads ตัวเลือก. เมื่อไหร่
รวบรวม -mthreads กำหนด -D_MT; เมื่อทำการลิงค์ มันจะลิงค์ในตัวช่วยเธรดพิเศษ
ห้องสมุด -lmingwthrd ซึ่งล้างข้อมูลการจัดการข้อยกเว้นเธรดต่อเธรด

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

-minline-ทั้งหมด-stringops
โดยค่าเริ่มต้น GCC จะดำเนินการสตริงแบบอินไลน์เฉพาะเมื่อปลายทางเป็นที่รู้จัก
จัดชิดขอบอย่างน้อย 4 ไบต์ ซึ่งช่วยให้อินไลน์มากขึ้น เพิ่มขนาดโค้ด
แต่อาจปรับปรุงประสิทธิภาพของโค้ดที่ขึ้นอยู่กับ memcpy, strlen และ memset ที่รวดเร็ว
ความยาวสั้น

-minline-stringops-ไดนามิก
สำหรับการดำเนินการสตริงที่ไม่ทราบขนาด ให้ใช้การตรวจสอบรันไทม์ด้วยโค้ดอินไลน์สำหรับ small
บล็อกและห้องสมุดเรียกบล็อกขนาดใหญ่

-mstringop-กลยุทธ์=ALG
เขียนทับฮิวริสติกการตัดสินใจภายในเกี่ยวกับอัลกอริธึมเฉพาะไปยังสตริงอินไลน์
ดำเนินการกับ. ค่าที่อนุญาตคือ "rep_byte", "rep_4byte", "rep_8byte" สำหรับ
ขยายโดยใช้คำนำหน้า "ตัวแทน" ของ i386 ที่มีขนาดที่ระบุ, "byte_loop", "loop",
"unrolled_loop" สำหรับขยายอินไลน์ลูป "libcall" สำหรับขยายไลบรารี่เสมอ
โทร.

-momit-leaf-frame-ตัวชี้
อย่าเก็บตัวชี้เฟรมไว้ในรีจิสเตอร์สำหรับฟังก์ชันลีฟ สิ่งนี้จะหลีกเลี่ยง
คำแนะนำในการบันทึก ตั้งค่า และกู้คืนตัวชี้เฟรม และทำการลงทะเบียนพิเศษ
ที่มีอยู่ในฟังก์ชั่นใบ ทางเลือก -fomit-frame-ตัวชี้ ถอดกรอบออก
ตัวชี้สำหรับฟังก์ชันทั้งหมด ซึ่งอาจทำให้การดีบักยากขึ้น

-mtls-direct-seg-refs
-mno-tls-direct-seg-refs
ควบคุมว่าจะให้เข้าถึงตัวแปร TLS ด้วยออฟเซ็ตจากเซ็กเมนต์ TLS หรือไม่
รีจิสเตอร์ (%gs สำหรับ 32 บิต, %fs สำหรับ 64 บิต) หรือว่าตัวชี้ฐานเธรดต้องเป็น
เพิ่ม สิ่งนี้ถูกกฎหมายหรือไม่นั้นขึ้นอยู่กับระบบปฏิบัติการและไม่ว่าจะเป็น
แมปกลุ่มเพื่อให้ครอบคลุมพื้นที่ TLS ทั้งหมด

สำหรับระบบที่ใช้ GNU libc ค่าดีฟอลต์คือเปิด

-mse2avx
-mno-sse2avx
ระบุว่าแอสเซมเบลอร์ควรเข้ารหัสคำสั่ง SSE ด้วยคำนำหน้า VEX ทางเลือก
-mavx เปิดใช้งานโดยค่าเริ่มต้น

-mfentry
-mno-entry
หากโปรไฟล์เปิดใช้งานอยู่ หน้า วางการเรียกตัวนับโปรไฟล์ก่อนอารัมภบท หมายเหตุ: เปิด
สถาปัตยกรรม x86 แอตทริบิวต์ "ms_hook_prologue" ไม่สามารถทำได้ในขณะนี้สำหรับ
-mfentry และ หน้า.

-m8bit-idiv
-mno-8bit-idiv
สำหรับโปรเซสเซอร์บางตัว เช่น Intel Atom การหารจำนวนเต็ม 8 บิตที่ไม่ได้ลงนามจะเร็วกว่า .มาก
การหารจำนวนเต็ม 32 บิต/64 บิต ตัวเลือกนี้จะสร้างการตรวจสอบรันไทม์ ถ้าทั้งสองอย่าง
เงินปันผลและตัวหารอยู่ในช่วง 0 ถึง 255, หารด้วยจำนวนเต็ม 8 บิตที่ไม่ได้ลงนามคือ
ใช้แทนการหารจำนวนเต็ม 32 บิต/64 บิต

-mavx256-split-unaligned-โหลด
-mavx256-แยก-ไม่จัดแนว-จัดเก็บ
แยกโหลดและจัดเก็บ AVX ที่ไม่ได้จัดแนวขนาด 32 ไบต์

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m สวิตช์ได้รับการสนับสนุนเพิ่มเติมจากโปรเซสเซอร์ AMD x86-64 ใน
สภาพแวดล้อม 64 บิต

- ลบ.ม
- ลบ.ม
-mx32
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิต NS - ลบ.ม ตัวเลือกกำหนด int, ยาวและ
ชี้ไปที่ 32 บิตและสร้างรหัสที่ทำงานบนระบบ i386 ใดๆ NS - ลบ.ม ตัวเลือก
ตั้งค่า int เป็น 32 บิตและยาวและตัวชี้เป็น 64 บิตและสร้างรหัสสำหรับ AMD
สถาปัตยกรรม x86-64 NS -mx32 ตัวเลือกตั้งค่า int ยาวและตัวชี้เป็น 32 บิตและ
สร้างรหัสสำหรับสถาปัตยกรรม x86-64 ของ AMD สำหรับดาร์วินเท่านั้น - ลบ.ม ตัวเลือกเปลี่ยน
ปิด -fno-รูป และ -mdynamic ไม่มีรูป ตัวเลือก

-mno-โซนสีแดง
อย่าใช้โซนสีแดงที่เรียกว่ารหัส x86-64 เขตสีแดงได้รับคำสั่งจาก
x86-64 ABI เป็นพื้นที่ 128 ไบต์ที่อยู่นอกเหนือตำแหน่งของตัวชี้สแต็กที่จะ
ไม่ได้รับการแก้ไขโดยสัญญาณหรือตัวจัดการขัดจังหวะดังนั้นจึงสามารถใช้สำหรับ
ข้อมูลชั่วคราวโดยไม่ต้องปรับตัวชี้สแต็ก ธง -mno-โซนสีแดง คนพิการ
โซนสีแดงนี้

-mcmodel=เล็ก
สร้างโค้ดสำหรับโมเดลโค้ดขนาดเล็ก: ต้องเชื่อมโยงโปรแกรมและสัญลักษณ์ใน
พื้นที่ที่อยู่ต่ำกว่า 2 GB พอยน์เตอร์คือ 64 บิต โปรแกรมสามารถ
เชื่อมโยงแบบคงที่หรือแบบไดนามิก นี่คือรูปแบบรหัสเริ่มต้น

-mcmodel=เคอร์เนล
สร้างรหัสสำหรับโมเดลรหัสเคอร์เนล เคอร์เนลทำงานในค่าลบ 2 GB ของ
พื้นที่ที่อยู่ โมเดลนี้ต้องใช้กับโค้ดเคอร์เนลของลินุกซ์

-mcmodel=กลาง
สร้างรหัสสำหรับรุ่นสื่อ: โปรแกรมถูกเชื่อมโยงใน 2 GB ล่างของ
พื้นที่ที่อยู่ สัญลักษณ์ขนาดเล็กก็ถูกวางไว้ที่นั่นเช่นกัน สัญลักษณ์ที่มีขนาดมากกว่า
-mlarge-ข้อมูลเกณฑ์ ถูกใส่ลงในข้อมูลขนาดใหญ่หรือส่วน bss และสามารถระบุตำแหน่งได้
สูงกว่า 2GB โปรแกรมสามารถเชื่อมโยงแบบสแตติกหรือไดนามิก

-mcmodel=ขนาดใหญ่
สร้างโค้ดสำหรับโมเดลขนาดใหญ่: โมเดลนี้ไม่มีข้อสันนิษฐานเกี่ยวกับที่อยู่และ
ขนาดของส่วน

-maddress-mode = ยาว
สร้างรหัสสำหรับโหมดที่อยู่แบบยาว รองรับเฉพาะ 64 บิตและ x32
สภาพแวดล้อม เป็นโหมดที่อยู่เริ่มต้นสำหรับสภาพแวดล้อม 64 บิต

-maddress-mode=สั้น
สร้างรหัสสำหรับโหมดที่อยู่แบบสั้น รองรับเฉพาะ 32 บิตและ x32
สภาพแวดล้อม เป็นโหมดที่อยู่เริ่มต้นสำหรับสภาพแวดล้อมแบบ 32 บิตและ x32

i386 และ x86-64 Windows Options

ตัวเลือกเพิ่มเติมเหล่านี้ใช้ได้กับเป้าหมายของ Windows:

-mconsole
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW ระบุว่าคอนโซล
จะต้องสร้างแอปพลิเคชันโดยสั่งให้ตัวเชื่อมโยงตั้งค่าส่วนหัว PE
ประเภทระบบย่อยที่จำเป็นสำหรับแอปพลิเคชันคอนโซล นี่เป็นพฤติกรรมเริ่มต้นสำหรับ
เป้าหมาย Cygwin และ MinGW

-mdll
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW มันระบุว่า DLL - a
ไดนามิกลิงค์ไลบรารี่ - จะถูกสร้างขึ้นทำให้สามารถเลือกของที่จำเป็น
วัตถุเริ่มต้นรันไทม์และจุดเริ่มต้น

-mnop-สนุก-dllimport
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW ระบุว่า
ควรละเว้นแอตทริบิวต์ dllimport

-mthread
ตัวเลือกนี้ใช้ได้กับเป้าหมาย MinGW มันระบุว่าเธรดเฉพาะ MinGW
จะใช้การสนับสนุน

-มิวนิโค้ด
ตัวเลือกนี้ใช้ได้กับเป้าหมาย mingw-w64 ระบุว่าแมโคร UNICODE
กำลังได้รับการกำหนดไว้ล่วงหน้าและเลือกรหัสเริ่มต้นรันไทม์ที่สามารถใช้ยูนิโค้ดได้

-mwin32
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW ระบุว่าโดยทั่วไป
มาโครที่กำหนดไว้ล่วงหน้าของ Windows จะต้องถูกตั้งค่าในตัวประมวลผลล่วงหน้า แต่ไม่ส่งผลกระทบ
ทางเลือกของไลบรารีรันไทม์/รหัสเริ่มต้น

-mwindows
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW ระบุว่า GUI
แอปพลิเคชันจะต้องสร้างขึ้นโดยสั่งให้ตัวเชื่อมโยงตั้งค่าส่วนหัว PE
ประเภทระบบย่อยอย่างเหมาะสม

-fno-set-stack-ปฏิบัติการได้
ตัวเลือกนี้ใช้ได้กับเป้าหมาย MinGW ระบุว่าแฟล็กปฏิบัติการสำหรับ
สแต็กที่ใช้โดยฟังก์ชันที่ซ้อนกันไม่ได้ตั้งค่าไว้ นี่เป็นสิ่งจำเป็นสำหรับไบนารีที่ทำงานใน
โหมดเคอร์เนลของ Windows เนื่องจากมี user32 API ซึ่งใช้ในการตั้งค่าปฏิบัติการ
สิทธิพิเศษไม่สามารถใช้ได้

-mpe-aligned-คอมมอนส์
ตัวเลือกนี้ใช้ได้กับเป้าหมาย Cygwin และ MinGW ระบุว่า GNU
นามสกุลเป็นรูปแบบไฟล์ PE ที่อนุญาตให้มีการจัดตำแหน่งตัวแปร COMMON ที่ถูกต้อง
ควรใช้เมื่อสร้างรหัส จะเปิดใช้งานโดยค่าเริ่มต้นหาก GCC ตรวจพบ
ที่แอสเซมเบลอร์เป้าหมายที่พบในระหว่างการกำหนดค่ารองรับคุณสมบัติ

โปรดดูที่ด้านล่าง i386 และ x86-64 Options สำหรับตัวเลือกมาตรฐาน

IA-64 Options

เหล่านี้เป็น -m ตัวเลือกที่กำหนดไว้สำหรับสถาปัตยกรรม Intel IA-64

-mbig-endian
สร้างโค้ดสำหรับเป้าหมาย big-endian นี่เป็นค่าเริ่มต้นสำหรับ HP-UX

-little-endian
สร้างโค้ดสำหรับเป้าหมาย little-endian นี่เป็นค่าดีฟอลต์สำหรับ AIX5 และ GNU/Linux

-mgnu-เป็น
-mno-gnu-เป็น
สร้าง (หรือไม่) รหัสสำหรับแอสเซมเบลอร์ GNU นี่คือค่าเริ่มต้น

-mgnu-ld
-mno-gnu-ld
สร้าง (หรือไม่) รหัสสำหรับตัวเชื่อมโยง GNU นี่คือค่าเริ่มต้น

-mno-รูป
สร้างรหัสที่ไม่ได้ใช้การลงทะเบียนตัวชี้ส่วนกลาง ผลลัพธ์ไม่ใช่ตำแหน่ง
รหัสอิสระและละเมิด IA-64 ABI

-mvolatile-asm-หยุด
-mno-ระเหย-asm-stop
สร้าง (หรือไม่) บิตหยุดทันทีก่อนและหลังคำสั่ง asm ผันผวน

-mregister-ชื่อ
-mno-ทะเบียน-ชื่อ
สร้าง (หรือไม่) in, locและ ออก ลงทะเบียนชื่อสำหรับการลงทะเบียนแบบซ้อน นี้
อาจทำให้เอาต์พุตแอสเซมเบลอร์อ่านง่ายขึ้น

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

-mconstan-gp
สร้างโค้ดที่ใช้ค่าตัวชี้ส่วนกลางคงที่ค่าเดียว สิ่งนี้มีประโยชน์เมื่อ
รวบรวมรหัสเคอร์เนล

-mauto-รูป
สร้างรหัสที่สามารถย้ายตัวเองได้ นี่หมายความว่า -mconstan-gp. มีประโยชน์
เมื่อรวบรวมรหัสเฟิร์มแวร์

-minline-float-divide-min-latency
สร้างโค้ดสำหรับการแบ่งอินไลน์ของค่าทศนิยมโดยใช้เวลาแฝงต่ำสุด
ขั้นตอนวิธี

-minline-float-divide-max-throughput
สร้างโค้ดสำหรับการแบ่งอินไลน์ของค่าทศนิยมโดยใช้ปริมาณงานสูงสุด
ขั้นตอนวิธี

-mno-inline-float-หาร
อย่าสร้างโค้ดอินไลน์สำหรับการแบ่งค่าทศนิยม

-minline-int-divide-min-latency
สร้างรหัสสำหรับการหารแบบอินไลน์ของค่าจำนวนเต็มโดยใช้เวลาแฝงขั้นต่ำ
ขั้นตอนวิธี

-minline-int-divide-max-throughput
สร้างรหัสสำหรับการหารอินไลน์ของค่าจำนวนเต็มโดยใช้ปริมาณงานสูงสุด
ขั้นตอนวิธี

-mno-inline-int-หาร
อย่าสร้างโค้ดอินไลน์สำหรับการหารค่าจำนวนเต็ม

-minline-sqrt-นาทีแฝง
สร้างรหัสสำหรับรากที่สองแบบอินไลน์โดยใช้อัลกอริธึมเวลาแฝงขั้นต่ำ

-minline-sqrt-max-ปริมาณงาน
สร้างรหัสสำหรับรากที่สองแบบอินไลน์โดยใช้อัลกอริธึมปริมาณงานสูงสุด

-mno-อินไลน์-sqrt
อย่าสร้างโค้ดอินไลน์สำหรับ sqrt

-mfused-mad
-mno-ฟิวส์ madd
ทำ (ไม่) สร้างรหัสที่ใช้การคูณ/เพิ่มหรือคูณ/ลบแบบผสม
คำแนะนำ. ค่าเริ่มต้นคือการใช้คำแนะนำเหล่านี้

-mno-dwarf2-asm
-mdwarf2-asm
อย่า (หรือทำ) สร้างรหัสแอสเซมเบลอร์สำหรับข้อมูลการดีบักหมายเลขบรรทัด DWARF2 นี้
อาจมีประโยชน์เมื่อไม่ได้ใช้แอสเซมเบลอร์ GNU

-Mearly-หยุดบิต
-mno-ต้นหยุดบิต
อนุญาตให้วางบิตหยุดก่อนหน้าทันทีก่อนคำสั่งว่า
ทริกเกอร์บิตหยุด สิ่งนี้สามารถปรับปรุงการจัดตารางการสอนได้ แต่ก็ไม่เสมอไป
ทำเช่นนั้น

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

-mtls-ขนาด=tls-ขนาด
ระบุขนาดบิตของการชดเชย TLS ทันที ค่าที่ถูกต้องคือ 14, 22 และ 64

-mtune=ประเภทซีพียู
ปรับการตั้งเวลาคำสั่งสำหรับ CPU โดยเฉพาะ ค่าที่ถูกต้องคือ itanium
itanium1, merced, itanium2 และ mckinley

-milp32
-mlp64
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิต สภาพแวดล้อม 32 บิตตั้งค่า int
ยาวและชี้ไปที่ 32 บิต สภาพแวดล้อม 64 บิตตั้งค่าเป็น 32 บิตและยาวและ
ตัวชี้ไปที่ 64 บิต นี่คือแฟล็กเฉพาะของ HP-UX

-mno-sched-br-ข้อมูลจำเพาะ
-msched-br-ข้อมูลจำเพาะ
(Dis/En) สามารถกำหนดตารางเวลาการเก็งกำไรข้อมูลได้ก่อนที่จะโหลดซ้ำ ซึ่งจะส่งผลให้
การสร้างคำสั่ง ld.a และคำสั่งตรวจสอบที่เกี่ยวข้อง (ld.c /
chk.a). ค่าเริ่มต้นคือ 'ปิดการใช้งาน'

-msched-ar-ข้อมูลจำเพาะ
-mno-sched-ar-ข้อมูลจำเพาะ
(En/Dis) กำหนดตารางเวลาการเก็งกำไรข้อมูลได้หลังจากโหลดซ้ำ ซึ่งจะส่งผลให้คนรุ่น
ของคำสั่ง ld.a และคำแนะนำในการตรวจสอบที่เกี่ยวข้อง (ld.c / chk.a) NS
ค่าเริ่มต้นคือ 'เปิดใช้งาน'

-mno-กำหนดการควบคุมข้อมูลจำเพาะ
-msched-ควบคุมข้อมูลจำเพาะ
(Dis/En) สามารถควบคุมกำหนดการเก็งกำไรได้ คุณลักษณะนี้ใช้ได้เฉพาะในช่วง
การจัดกำหนดการภูมิภาค (เช่น ก่อนโหลดซ้ำ) ซึ่งจะส่งผลให้คนรุ่นหลัง
คำแนะนำและคำแนะนำการตรวจสอบที่เกี่ยวข้อง chk.s ค่าเริ่มต้นคือ
'ปิดการใช้งาน'

-msched-br-in-ข้อมูลจำเพาะ
-mno-sched-br-in-ข้อมูลจำเพาะ
(En/Dis) กำหนดการเก็งกำไรของคำสั่งที่ขึ้นอยู่กับข้อมูล
โหลดเก็งกำไรก่อนโหลดซ้ำ สิ่งนี้มีผลกับ .เท่านั้น -msched-br-ข้อมูลจำเพาะ
เปิดใช้งาน ค่าเริ่มต้นคือ 'เปิดใช้งาน'

-msched-ar-in-ข้อมูลจำเพาะ
-mno-sched-ar-in-ข้อมูลจำเพาะ
(En/Dis) กำหนดการเก็งกำไรของคำสั่งที่ขึ้นอยู่กับข้อมูล
โหลดเก็งกำไรหลังจากโหลดซ้ำ สิ่งนี้มีผลกับ .เท่านั้น -msched-ar-ข้อมูลจำเพาะ
เปิดใช้งาน ค่าเริ่มต้นคือ 'เปิดใช้งาน'

-msched-in-ควบคุมข้อมูลจำเพาะ
-mno-กำหนดการในการควบคุมข้อมูลจำเพาะ
(En/Dis) กำหนดการเก็งกำไรของคำสั่งที่ขึ้นอยู่กับ
ควบคุมภาระการเก็งกำไร สิ่งนี้มีผลกับ .เท่านั้น -msched-ควบคุมข้อมูลจำเพาะ เปิดการใช้งาน
ค่าเริ่มต้นคือ 'เปิดใช้งาน'

-mno-sched-prefer-non-data-spec-insns
-msched-prefer-non-data-spec-insns
หากเปิดใช้งาน คำแนะนำการเก็งกำไรข้อมูลจะถูกเลือกสำหรับกำหนดการก็ต่อเมื่อมี
ไม่มีทางเลือกอื่นในขณะนี้ ซึ่งจะทำให้ใช้การเก็งกำไรข้อมูล
อนุรักษ์นิยมมากขึ้น ค่าเริ่มต้นคือ 'ปิดการใช้งาน'

-mno-sched-prefer-non-control-spec-insns
-msched-prefer-non-control-spec-insns
หากเปิดใช้งาน คำสั่งควบคุมการเก็งกำไรจะถูกเลือกสำหรับกำหนดการก็ต่อเมื่อมี
ไม่มีทางเลือกอื่นในขณะนี้ ซึ่งจะทำให้ใช้การควบคุมเก็งกำไร
อนุรักษ์นิยมมากขึ้น ค่าเริ่มต้นคือ 'ปิดการใช้งาน'

-mno-sched-count-spec-in-critical-path
-msched-count-spec-in-critical-path
หากเปิดใช้งาน การพึ่งพาการเก็งกำไรจะได้รับการพิจารณาในระหว่างการคำนวณของ
ลำดับความสำคัญของคำแนะนำ ซึ่งจะทำให้ใช้การเก็งกำไรเพิ่มขึ้นอีกหน่อย
ซึ่งอนุรักษ์นิยม. ค่าเริ่มต้นคือ 'ปิดการใช้งาน'

-msched-spec-ldc
ใช้การตรวจสอบการเก็งกำไรข้อมูลอย่างง่าย ตัวเลือกนี้เปิดอยู่โดยค่าเริ่มต้น

-msched-ควบคุมข้อมูลจำเพาะ-ldc
ใช้การตรวจสอบการเก็งกำไรอย่างง่าย ตัวเลือกนี้เปิดอยู่โดยค่าเริ่มต้น

-msched-stop-bits-after-ever-ทุกรอบ
วางบิตหยุดหลังจากทุกรอบเมื่อกำหนดเวลา ตัวเลือกนี้เปิดอยู่โดยค่าเริ่มต้น

-msched-fp-mem-deps-zero-ราคา
สมมติว่าทศนิยมเก็บและโหลดไม่น่าจะทำให้เกิดข้อขัดแย้งเมื่อ
จัดอยู่ในกลุ่มคำสั่งเดียวกัน ตัวเลือกนี้ถูกปิดใช้งานโดยค่าเริ่มต้น

-msel-sched-dont-check-control-spec
สร้างการตรวจสอบการเก็งกำไรการควบคุมในการจัดกำหนดการแบบเลือก ธงนี้คือ
ปิดใช้งานโดยค่าเริ่มต้น

-msched-max-memory-insns=แม็กซ์อินน์
จำกัดจำนวนหน่วยความจำ insns ต่อกลุ่มคำสั่ง โดยให้ความสำคัญกับ
หน่วยความจำที่ตามมาพยายามกำหนดเวลาในกลุ่มคำสั่งเดียวกัน
มีประโยชน์บ่อยครั้งในการป้องกันความขัดแย้งของแคชแบงค์ ค่าเริ่มต้นคือ 1

-msched-max-memory-insns-hard-จำกัด
ไม่อนุญาตมากกว่า `msched-max-memory-insns' ในกลุ่มคำสั่ง มิฉะนั้น จำกัด
คือ 'อ่อน' หมายความว่าเราต้องการการดำเนินการที่ไม่ใช่หน่วยความจำเมื่อถึงขีด จำกัด แต่
อาจยังคงกำหนดเวลาการทำงานของหน่วยความจำ

IA-64/VMS Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน IA-64/VMS:

-mvms-ส่งคืนรหัส
ส่งคืนรหัสเงื่อนไข VMS จาก main.js ค่าดีฟอลต์คือการคืนค่าเงื่อนไขสไตล์ POSIX
(เช่นข้อผิดพลาด) รหัส

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

-mmalloc64
ค่าเริ่มต้นเป็นรูทีนการจัดสรรหน่วยความจำ 64 บิต

LM32 Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับสถาปัตยกรรม Lattice Mico32:

-mbarrel-shift-เปิดใช้งาน
เปิดใช้งานคำแนะนำในการเปลี่ยนลำกล้อง

-mdivide ที่เปิดใช้งาน
เปิดใช้งานคำสั่งแบ่งและโมดูลัส

-เปิดใช้งานหลายหลาก
เปิดใช้งานคำแนะนำการคูณ

-msign-ขยาย-เปิดใช้งาน
เปิดใช้งานคำแนะนำการขยายสัญญาณ

-เปิดใช้งาน Muser
เปิดใช้งานคำแนะนำที่ผู้ใช้กำหนด

M32C Options

-mcpu=ชื่อ
เลือก CPU ที่จะสร้างรหัส ชื่อ อาจเป็นหนึ่งใน r8c สำหรับ R8C/Tiny
ชุด, ม. 16 ค สำหรับซีรีส์ M16C (สูงสุด /60) ม.32ซม สำหรับ M16C/80 ซีรีส์หรือ ม. 32 ค
สำหรับ M32C/80 ซีรีส์

-msim
ระบุว่าโปรแกรมจะทำงานบนเครื่องจำลอง สิ่งนี้ทำให้เกิดทางเลือก
ไลบรารีรันไทม์ที่จะลิงก์ซึ่งสนับสนุน เช่น ไฟล์ I/O คุณต้องไม่
ใช้ตัวเลือกนี้เมื่อสร้างโปรแกรมที่จะทำงานบนฮาร์ดแวร์จริง คุณต้อง
จัดเตรียมไลบรารีรันไทม์ของคุณเองสำหรับฟังก์ชัน I/O ใดๆ ที่จำเป็น

-memregs=จำนวน
ระบุจำนวนการลงทะเบียนหลอกตามหน่วยความจำที่ GCC จะใช้ระหว่างรหัส
รุ่น. การลงทะเบียนหลอกเหล่านี้จะถูกใช้เหมือนกับการลงทะเบียนจริง ดังนั้นจึงมี a
การแลกเปลี่ยนระหว่างความสามารถของ GCC ในการปรับรหัสให้เข้ากับรีจิสเตอร์ที่มีอยู่และ
บทลงโทษประสิทธิภาพของการใช้หน่วยความจำแทนการลงทะเบียน โปรดทราบว่าโมดูลทั้งหมดในa
โปรแกรมจะต้องคอมไพล์ด้วยค่าเดียวกันสำหรับตัวเลือกนี้ ด้วยเหตุนี้คุณ
ต้องไม่ใช้ตัวเลือกนี้กับไลบรารีรันไทม์เริ่มต้น gcc builds

M32R/D Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับสถาปัตยกรรม Renesas M32R/D:

-m32r2
สร้างรหัสสำหรับ M32R/2

-m32rx
สร้างรหัสสำหรับ M32R/X

-m32r
สร้างรหัสสำหรับ M32R นี่คือค่าเริ่มต้น

-mmodel=เล็ก
สมมติว่าอ็อบเจ็กต์ทั้งหมดอยู่ในหน่วยความจำ 16MB ที่ต่ำกว่า (เพื่อให้แอดเดรสของพวกมันเป็น
โหลดด้วยคำสั่ง "ld24") และถือว่ารูทีนย่อยทั้งหมดสามารถเข้าถึงได้ด้วย
คำแนะนำ "bl" นี่คือค่าเริ่มต้น

สามารถกำหนด addressability ของวัตถุเฉพาะได้ด้วยแอตทริบิวต์ "model"

-mmodel=กลาง
สมมติว่าวัตถุอาจอยู่ที่ใดก็ได้ในพื้นที่ที่อยู่แบบ 32 บิต (คอมไพเลอร์จะสร้าง
คำแนะนำ "seth/add3" เพื่อโหลดที่อยู่) และถือว่ารูทีนย่อยทั้งหมดเป็น
สามารถเข้าถึงได้ด้วยคำสั่ง "bl"

-mmodel=ขนาดใหญ่
สมมติว่าวัตถุอาจอยู่ที่ใดก็ได้ในพื้นที่ที่อยู่แบบ 32 บิต (คอมไพเลอร์จะสร้าง
คำแนะนำ "seth/add3" เพื่อโหลดที่อยู่) และถือว่ารูทีนย่อยอาจไม่เป็น
สามารถเข้าถึงได้ด้วยคำสั่ง "bl" (คอมไพเลอร์จะสร้างช้ากว่ามาก
ลำดับคำสั่ง "seth/add3/jl")

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

พื้นที่ข้อมูลขนาดเล็กประกอบด้วยส่วนต่างๆ .sdata และ .sbs. วัตถุอาจจะชัดเจน
ใส่ในพื้นที่ข้อมูลขนาดเล็กที่มีแอตทริบิวต์ "ส่วน" โดยใช้ส่วนใดส่วนหนึ่งเหล่านี้

-msdata=sdata
ใส่ข้อมูลระดับโลกและแบบคงที่ขนาดเล็กในพื้นที่ข้อมูลขนาดเล็ก แต่อย่าสร้างแบบพิเศษ
รหัสเพื่ออ้างอิงพวกเขา

-msdata=ใช้
ใส่ข้อมูลระดับโลกและแบบคงที่ขนาดเล็กในพื้นที่ข้อมูลขนาดเล็ก และสร้างพิเศษ
คำแนะนำในการอ้างอิง

-G NUM
ใส่วัตถุโกลบอลและสแตติกน้อยกว่าหรือเท่ากับ NUM ไบต์ลงในข้อมูลขนาดเล็กหรือ
ส่วน bss แทนข้อมูลปกติหรือส่วน bss ค่าเริ่มต้นของ NUM is
ในปี 8 -msdata ต้องตั้งค่าตัวเลือกเป็นอย่างใดอย่างหนึ่งของ สดาต้า or ใช้ สำหรับตัวเลือกนี้จะมีใดๆ
ผล

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

-mdebug
ทำให้รหัสเฉพาะของ M32R ในคอมไพเลอร์แสดงสถิติบางอย่างที่อาจช่วยได้
ในการดีบักโปรแกรม

-malign-ลูป
จัดแนวลูปทั้งหมดให้เป็นขอบเขต 32 ไบต์

-mno-align-ลูป
อย่าบังคับใช้การจัดตำแหน่งแบบ 32 ไบต์สำหรับลูป นี่คือค่าเริ่มต้น

-อัตราความผิดพลาด=จำนวน
»Ñ­ËÒ จำนวน คำแนะนำต่อรอบ จำนวน สามารถเป็น 1 หรือ 2 เท่านั้น

-mbranch-ต้นทุน=จำนวน
จำนวน สามารถเป็น 1 หรือ 2 เท่านั้น ถ้าเป็น 1 สาขาจะถูกเลือกมากกว่า
โค้ดแบบมีเงื่อนไข ถ้าเป็น 2 จะใช้ตรงกันข้าม

-mflush-กับดัก=จำนวน
ระบุหมายเลขกับดักเพื่อใช้ล้างแคช ค่าเริ่มต้นคือ 12. Valid
ตัวเลขอยู่ระหว่าง 0 ถึง 15 รวม

-mno-flush-กับดัก
ระบุว่าแคชไม่สามารถล้างโดยใช้กับดัก

-mflush-func=ชื่อ
ระบุชื่อของฟังก์ชันระบบปฏิบัติการที่จะเรียกล้างแคช NS
ค่าเริ่มต้นคือ _ล้าง_แคชแต่การเรียกใช้ฟังก์ชันจะใช้ได้ก็ต่อเมื่อไม่มีกับดัก
ใช้ได้

-mno-ฟลัช-func
ระบุว่าไม่มีระบบปฏิบัติการสำหรับล้างแคช

M680x0 Options

เหล่านี้เป็น -m ตัวเลือกที่กำหนดไว้สำหรับโปรเซสเซอร์ M680x0 และ ColdFire การตั้งค่าเริ่มต้น
ขึ้นอยู่กับสถาปัตยกรรมที่เลือกเมื่อกำหนดค่าคอมไพเลอร์ ค่าเริ่มต้น
สำหรับตัวเลือกที่พบบ่อยที่สุดได้รับด้านล่าง

-มีนาคม=โค้ง
สร้างโค้ดสำหรับสถาปัตยกรรมชุดคำสั่ง M680x0 หรือ ColdFire ที่เฉพาะเจาะจง
ค่าที่อนุญาตของ โค้ง สำหรับสถาปัตยกรรม M680x0 คือ: 68000, 68010, 68020, 68030,
68040, 68060 และ cpu32. สถาปัตยกรรม ColdFire ได้รับการคัดเลือกตาม Freescale's
การจำแนกประเภท ISA และค่าที่อนุญาตคือ: อิสอา, ไอซ่าพลัส, isab และ iSAC.

gcc กำหนดมาโคร __mcfโค้ง__ เมื่อใดก็ตามที่สร้างรหัสสำหรับเป้าหมาย ColdFire
พื้นที่ โค้ง ในมาโครนี้เป็นหนึ่งใน -มีนาคม อาร์กิวเมนต์ที่ระบุข้างต้น

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

-mcpu=ซีพียู
สร้างรหัสสำหรับโปรเซสเซอร์ M680x0 หรือ ColdFire เฉพาะ M680x0 ซีพียูคือ:
68000, 68010, 68020, 68030, 68040, 68060, 68302, 68332 และ cpu32. ไฟเย็น ซีพียูs
ได้รับจากตารางด้านล่าง ซึ่งยังจำแนกซีพียูออกเป็นตระกูล:

ครอบครัว: -mcpu ข้อโต้แย้ง
51 : 51 51ac 51cn 51em 51คิว
5206 : 5202 5204 5206
5206e : 5206e
5208 : 5207 5208
5211a : 5210a 5211a
5213 : 5211 5212 5213
5216 : 5214 5216
52235 : 52230 52231 52232 52233 52234 52235
5225 : 5224 5225
52259 : 52252 52254 52255 52256 52258 52259
5235 : 5232 5233 5234 5235 523x
5249 : 5249
5250 : 5250
5271 : 5270 5271
5272 : 5272
5275 : 5274 5275
5282 : 5280 5281 5282 528x
53017 : 53011 53012 53013 53014 53015 53016 53017
5307 : 5307
5329 : 5327 5328 5329 532x
5373 : 5372 5373 537x
5407 : 5407
5475 : 5470 5471 5472 5473 5474 5475 547x 5480 5481 5482 5483 5484 5485

-mcpu=ซีพียู แทนที่ -มีนาคม=โค้ง if โค้ง เข้ากันได้กับ ซีพียู. ชุดค่าผสมอื่น ๆ ของ
-mcpu และ -มีนาคม ถูกปฏิเสธ

gcc กำหนดมาโคร __mcf_cpu_ซีพียู เมื่อ ColdFire กำหนดเป้าหมาย ซีพียู ถูกเลือก นอกจากนี้ยัง
กำหนด __mcf_ครอบครัว_ครอบครัวโดยที่ค่าของ ครอบครัว ถูกกำหนดโดยตารางด้านบน

-mtune=ปรับแต่ง
ปรับโค้ดสำหรับไมโครสถาปัตยกรรมเฉพาะ ภายในข้อจำกัดที่กำหนดโดย -มีนาคม
และ -mcpu. สถาปัตยกรรมไมโคร M680x0 คือ: 68000, 68010, 68020, 68030, 68040,
68060 และ cpu32. สถาปัตยกรรมไมโคร ColdFire คือ: cfv1, cfv2, cfv3, cfv4 และ
cfv4e.

คุณยังสามารถใช้ -mtune=68020-40 สำหรับโค้ดที่ต้องรันค่อนข้างดีบน 68020
68030 และ 68040 เป้าหมาย -mtune=68020-60 คล้ายกันแต่รวม 68060 เป้าหมายเป็น
ดี. สองตัวเลือกนี้เลือกการตัดสินใจปรับแต่งเดียวกันกับ -m68020-40 และ -m68020-60
ตามลำดับ

gcc กำหนดมาโคร __mcโค้ง และ __mcโค้ง__ เมื่อปรับแต่งสถาปัตยกรรม 680x0
โค้ง. นอกจากนี้ยังกำหนด mcโค้ง เว้นแต่ -แอนซี หรือไม่ใช่ GNU -มาตรฐาน ใช้ตัวเลือก
หาก gcc กำลังปรับแต่งช่วงของสถาปัตยกรรมตามที่เลือกโดย -mtune=68020-40 or
-mtune=68020-60จะกำหนดมาโครสำหรับทุกสถาปัตยกรรมในช่วง

gcc ยังกำหนดมาโคร __NSแต่แรก__ เมื่อทำการจูนสำหรับ ColdFire microarchitecture
แต่แรกที่นี่มี แต่แรก เป็นหนึ่งในอาร์กิวเมนต์ที่ระบุข้างต้น

- ลบ.ม
-mc68000
สร้างเอาต์พุตสำหรับ 68000 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68000 เทียบเท่ากับ -มีนาคม=68000.

ใช้ตัวเลือกนี้สำหรับไมโครคอนโทรลเลอร์ที่มีแกน 68000 หรือ EC000 รวมถึง 68008
68302, 68306, 68307, 68322, 68328 และ 68356

- ลบ.ม
สร้างเอาต์พุตสำหรับ 68010 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68010 เทียบเท่ากับ -มีนาคม=68010.

- ลบ.ม
-mc68020
สร้างเอาต์พุตสำหรับ 68020 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68020 เทียบเท่ากับ -มีนาคม=68020.

- ลบ.ม
สร้างเอาต์พุตสำหรับ 68030 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68030 เทียบเท่ากับ -มีนาคม=68030.

- ลบ.ม
สร้างเอาต์พุตสำหรับ 68040 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68040 เทียบเท่ากับ -มีนาคม=68040.

ตัวเลือกนี้ยับยั้งการใช้คำสั่ง 68881/68882 ที่ต้องจำลองโดย
ซอฟต์แวร์บน 68040 ใช้ตัวเลือกนี้หาก 68040 ของคุณไม่มีรหัสที่จะจำลอง
คำแนะนำเหล่านั้น

- ลบ.ม
สร้างเอาต์พุตสำหรับ 68060 นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์ได้รับการกำหนดค่าสำหรับ
ระบบที่ใช้ 68060 เทียบเท่ากับ -มีนาคม=68060.

ตัวเลือกนี้ยับยั้งการใช้คำสั่ง 68020 และ 68881/68882 ที่จะต้อง
จำลองโดยซอฟต์แวร์บน 68060 ใช้ตัวเลือกนี้หาก 68060 ของคุณไม่มีรหัส
เพื่อเลียนแบบคำสั่งเหล่านั้น

-mcpu32
สร้างเอาต์พุตสำหรับ CPU32 นี่เป็นค่าเริ่มต้นเมื่อมีการกำหนดค่าคอมไพเลอร์สำหรับ
ระบบที่ใช้ CPU32 เทียบเท่ากับ -มีนาคม = cpu32.

ใช้ตัวเลือกนี้สำหรับไมโครคอนโทรลเลอร์ที่มีแกน CPU32 หรือ CPU32+ รวมถึง 68330
68331, 68332, 68333, 68334, 68336, 68340, 68341, 68349 และ 68360

- ลบ.ม
สร้างเอาต์พุตสำหรับ 520X ColdFire CPU นี่เป็นค่าเริ่มต้นเมื่อคอมไพเลอร์เป็น
กำหนดค่าสำหรับระบบที่ใช้ 520X เทียบเท่ากับ -mcpu=5206และตอนนี้
เลิกใช้ตัวเลือกนั้น

ใช้ตัวเลือกนี้สำหรับไมโครคอนโทรลเลอร์ที่มีแกน 5200 รวมถึง MCF5202, MCF5203
MCF5204 และ MCF5206

-m5206e
สร้างเอาต์พุตสำหรับ CPU ColdFire 5206e ตัวเลือกนี้เลิกใช้แล้วในความโปรดปรานของ
เทียบเท่า -mcpu=5206e.

-m528x
สร้างเอาต์พุตสำหรับสมาชิกของตระกูล ColdFire 528X ตัวเลือกคือตอนนี้
เลิกใช้เพื่อประโยชน์เทียบเท่า -mcpu=528x.

- ลบ.ม
สร้างเอาต์พุตสำหรับ CPU ColdFire 5307 ตัวเลือกนี้เลิกใช้แล้วเพื่อสนับสนุน
เท่ากัน -mcpu=5307.

- ลบ.ม
สร้างเอาต์พุตสำหรับ CPU ColdFire 5407 ตัวเลือกนี้เลิกใช้แล้วเพื่อสนับสนุน
เท่ากัน -mcpu=5407.

-mcfv4e
สร้างเอาต์พุตสำหรับซีพียูตระกูล ColdFire V4e (เช่น 547x/548x) ซึ่งรวมถึงการใช้
คำแนะนำจุดลอยตัวของฮาร์ดแวร์ ตัวเลือกเทียบเท่ากับ -mcpu=547x, และคือ
ตอนนี้เลิกใช้ตัวเลือกนั้นแล้ว

-m68020-40
สร้างเอาต์พุตสำหรับ 68040 โดยไม่ต้องใช้คำแนะนำใหม่ใดๆ ผลลัพธ์นี้
ในโค้ดที่สามารถทำงานได้ค่อนข้างมีประสิทธิภาพบน 68020/68881 หรือ 68030 หรือ a
68040 รหัสที่สร้างขึ้นใช้คำสั่ง 68881 ที่จำลองบน
68040.

ตัวเลือกเทียบเท่ากับ -มีนาคม=68020 -mtune=68020-40.

-m68020-60
สร้างเอาต์พุตสำหรับ 68060 โดยไม่ต้องใช้คำแนะนำใหม่ใดๆ ผลลัพธ์นี้
ในโค้ดที่สามารถทำงานได้ค่อนข้างมีประสิทธิภาพบน 68020/68881 หรือ 68030 หรือ a
68040 รหัสที่สร้างขึ้นใช้คำสั่ง 68881 ที่จำลองบน
68060.

ตัวเลือกเทียบเท่ากับ -มีนาคม=68020 -mtune=68020-60.

-mhard-ลอย
- ลบ.ม
สร้างคำแนะนำจุดลอยตัว นี่คือค่าเริ่มต้นสำหรับ 68020 ขึ้นไป และ
สำหรับอุปกรณ์ ColdFire ที่มี FPU มันกำหนดมาโคร __มี_68881__ บน M680x0
เป้าหมายและ __mcffpu__ บนเป้าหมาย ColdFire

-msoft-ลอย
อย่าสร้างคำสั่งทศนิยม ใช้การเรียกห้องสมุดแทน นี้เป็น
ค่าเริ่มต้นสำหรับ 68000, 68010 และ 68832 เป้าหมาย นอกจากนี้ยังเป็นค่าเริ่มต้นสำหรับ ColdFire
อุปกรณ์ที่ไม่มี FPU

-mdiv
-mno-div
สร้าง (ไม่สร้าง) การแบ่งฮาร์ดแวร์ ColdFire และคำสั่งที่เหลือ ถ้า
-มีนาคม ถูกใช้โดยไม่มี -mcpuค่าเริ่มต้นคือ "เปิด" สำหรับสถาปัตยกรรม ColdFire และ "ปิด"
สำหรับสถาปัตยกรรม M680x0 มิฉะนั้น ค่าเริ่มต้นจะถูกนำมาจาก CPU เป้าหมาย (ทั้ง
CPU เริ่มต้นหรือที่กำหนดโดย -mcpu). ตัวอย่างเช่น ค่าเริ่มต้นคือ "ปิด"
for -mcpu=5206 และ "เปิด" สำหรับ -mcpu=5206e.

gcc กำหนดมาโคร __mcfhwdiv__ เมื่อเปิดใช้งานตัวเลือกนี้

-mshort
ให้พิมพ์ "int" ให้มีความกว้าง 16 บิต เช่น "short int" นอกจากนี้ พารามิเตอร์
ที่ส่งผ่านบนสแต็กยังถูกจัดชิดขอบ 16 บิตแม้ในเป้าหมายที่มีAPI
บังคับให้เลื่อนระดับเป็น 32 บิต

-mno-สั้น
อย่าถือว่าประเภท "int" กว้าง 16 บิต นี่คือค่าเริ่มต้น

-mnobitfield
-mno-บิตฟิลด์
อย่าใช้คำสั่งบิตฟิลด์ NS - ลบ.ม, -mcpu32 และ - ลบ.ม ตัวเลือกหมายถึง
-mnobitfield.

-mbitfield
ใช้คำแนะนำบิตฟิลด์ NS - ลบ.ม ตัวเลือกหมายถึง -mbitfield. นี่คือ
ค่าเริ่มต้นหากคุณใช้การกำหนดค่าที่ออกแบบมาสำหรับ 68020

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

แบบแผนการเรียกนี้เข้ากันไม่ได้กับแบบปกติที่ใช้บน Unix ดังนั้นคุณ
ไม่สามารถใช้งานได้หากคุณต้องการเรียกไลบรารี่ที่คอมไพล์ด้วยคอมไพเลอร์ Unix

นอกจากนี้ คุณต้องจัดเตรียมต้นแบบฟังก์ชันสำหรับฟังก์ชันทั้งหมดที่ใช้ตัวแปร
จำนวนอาร์กิวเมนต์ (รวมถึง "printf"); มิฉะนั้นจะสร้างรหัสที่ไม่ถูกต้อง
สำหรับการเรียกใช้ฟังก์ชันเหล่านั้น

นอกจากนี้โค้ดที่ไม่ถูกต้องอย่างร้ายแรงจะส่งผลหากคุณเรียกใช้ฟังก์ชันที่มีมากเกินไป
อาร์กิวเมนต์ (โดยปกติ อาร์กิวเมนต์เพิ่มเติมจะถูกละเว้นอย่างไม่เป็นอันตราย)

คำสั่ง "rtd" รองรับ 68010, 68020, 68030, 68040, 68060 และ CPU32
โปรเซสเซอร์ แต่ไม่ใช่โดย 68000 หรือ 5200

-mno-rtd
อย่าใช้แบบแผนการโทรที่เลือกโดย -mrtd. นี่คือค่าเริ่มต้น

-malign-int
-mno-จัด-int
ควบคุมว่า GCC จะจัดแนว "int", "long", "long long", "float", "double" และ "long" หรือไม่
ตัวแปร double" บนขอบเขต 32 บิต (-malign-int) หรือขอบเขต 16 บิต
(-mno-จัด-int). การจัดตำแหน่งตัวแปรบนขอบเขต 32 บิตจะสร้างโค้ดที่รัน
เร็วขึ้นบ้างบนโปรเซสเซอร์ที่มีบัส 32 บิตโดยใช้หน่วยความจำมากขึ้น

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

-mpcrel
ใช้โหมดการกำหนดแอดเดรสที่สัมพันธ์กับพีซีของ 68000 โดยตรง แทนที่จะใช้ global
ตารางออฟเซ็ต ปัจจุบันตัวเลือกนี้หมายถึง -fpicอนุญาตให้ออฟเซ็ตสูงสุด 16 บิต
สำหรับการแอดเดรสที่สัมพันธ์กับพีซี -fPIC ยังไม่รองรับกับ -mpcrelแม้ว่า
สิ่งนี้สามารถรองรับโปรเซสเซอร์ 68020 และสูงกว่า

-mno-เข้มงวด-จัด
-mstrict-จัดตำแหน่ง
อย่า (ทำ) ถือว่าระบบจะจัดการการอ้างอิงหน่วยความจำที่ไม่ได้จัดแนว

-msep-ข้อมูล
สร้างรหัสที่อนุญาตให้ส่วนข้อมูลอยู่ในพื้นที่ต่าง ๆ ของหน่วยความจำ
จากส่วนข้อความ ซึ่งช่วยให้ดำเนินการในสถานที่ในสภาพแวดล้อมโดยไม่ต้อง
การจัดการหน่วยความจำเสมือน ตัวเลือกนี้หมายถึง -fPIC.

-mno-sep-ข้อมูล
สร้างรหัสที่ถือว่าส่วนข้อมูลตามส่วนข้อความ นี่คือ
ค่าเริ่มต้น

-middle-shared-library
สร้างรหัสที่รองรับไลบรารีที่แชร์ผ่านวิธีรหัสไลบรารี สิ่งนี้ทำให้
สำหรับดำเนินการในสถานที่และไลบรารีที่ใช้ร่วมกันในสภาพแวดล้อมที่ไม่มีหน่วยความจำเสมือน
การจัดการ. ตัวเลือกนี้หมายถึง -fPIC.

-mno-id-shared-library
สร้างรหัสที่ไม่ถือว่ามีการใช้ไลบรารีที่ใช้ร่วมกันแบบอิง ID นี่คือ
ค่าเริ่มต้น

-msshared-library-id=n
ระบุหมายเลขประจำตัวของไลบรารีที่ใช้ร่วมกันตาม ID ที่กำลังคอมไพล์
การระบุค่า 0 จะสร้างโค้ดที่กระชับมากขึ้น โดยการระบุค่าอื่นๆ จะ
บังคับให้จัดสรรหมายเลขนั้นให้กับห้องสมุดปัจจุบัน แต่ไม่มีที่ว่างหรือ
เวลามีประสิทธิภาพมากกว่าการละเว้นตัวเลือกนี้

-mxgot
-mno-xgot
เมื่อสร้างโค้ดที่ไม่ขึ้นกับตำแหน่งสำหรับ ColdFire ให้สร้างโค้ดที่ใช้งานได้ถ้า
GOT มีมากกว่า 8192 รายการ รหัสนี้ใหญ่กว่าและช้ากว่ารหัส
สร้างโดยไม่มีตัวเลือกนี้ สำหรับโปรเซสเซอร์ M680x0 ไม่จำเป็นต้องใช้ตัวเลือกนี้ -fPIC
พอเพียง

โดยปกติ GCC จะใช้คำสั่งเดียวในการโหลดค่าจาก GOT ในขณะที่นี่คือ
ค่อนข้างมีประสิทธิภาพ ใช้งานได้ก็ต่อเมื่อ GOT มีขนาดเล็กกว่า 64k เท่านั้น อะไรก็ตาม
ใหญ่ขึ้นทำให้ตัวเชื่อมโยงรายงานข้อผิดพลาดเช่น:

ย้ายที่ตัดให้พอดี: R_68K_GOT16O foobar

หากเกิดเหตุการณ์นี้ขึ้น คุณควรคอมไพล์โค้ดของคุณใหม่ด้วย -mxgot. มันควรจะทำงานกับ
GOT ที่ใหญ่มาก อย่างไรก็ตาม รหัสที่สร้างด้วย -mxgot มีประสิทธิภาพน้อยกว่า เนื่องจากมัน
ใช้ 4 คำแนะนำในการดึงค่าของสัญลักษณ์สากล

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

ตัวเลือกเหล่านี้จะไม่มีผลใดๆ เว้นแต่ GCC กำลังสร้างโค้ดที่ไม่ขึ้นกับตำแหน่ง

เอ็มคอร์ Options

เหล่านี้เป็น -m ตัวเลือกที่กำหนดไว้สำหรับโปรเซสเซอร์ Motorola M*Core

- ฮาร์ดไลท์
-mno-ฮาร์ดไลท์
ค่าคงที่แบบอินไลน์ในสตรีมโค้ดหากสามารถทำได้ในสองคำสั่งหรือน้อยกว่า

-mdiv
-mno-div
ใช้คำสั่งแบ่ง (เปิดใช้งานโดยค่าเริ่มต้น)

-mrelax-ทันที
-mno-ผ่อนคลายทันที
อนุญาตให้กำหนดขนาดทันทีในการดำเนินการบิต

-mwide-บิตฟิลด์
-mno-กว้าง bitfields
ถือว่าบิตฟิลด์เป็น int-sized เสมอ

-m4byte-ฟังก์ชั่น
-mno-4byte-ฟังก์ชั่น
บังคับให้ฟังก์ชันทั้งหมดจัดชิดขอบ 4 ไบต์

-mcallgraph-ข้อมูล
-mno-callgraph-ข้อมูล
ปล่อยข้อมูล callgraph

-mslow ไบต์
-mno-ช้าไบต์
ต้องการการเข้าถึงคำเมื่ออ่านปริมาณไบต์

-little-endian
-mbig-endian
สร้างโค้ดสำหรับเป้าหมาย little-endian

- ลบ.ม
- ลบ.ม
สร้างรหัสสำหรับโปรเซสเซอร์ 210

-mno-lsim
สมมติว่ามีการรองรับรันไทม์แล้วจึงละเว้นไลบรารีตัวจำลอง
(libsim.ก) จากบรรทัดคำสั่งลิงเกอร์

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

เมพ Options

-แม็บดิฟฟ์
เปิดใช้งานคำสั่ง "abs" ซึ่งเป็นข้อแตกต่างโดยสิ้นเชิงระหว่างสองรีจิสเตอร์

-mall-ตัวเลือก
เปิดใช้งานคำสั่งทางเลือกทั้งหมด - ค่าเฉลี่ย คูณ หาร การดำเนินการบิต
นำศูนย์ ความแตกต่างแน่นอน ต่ำสุด/สูงสุด คลิป และความอิ่มตัว

- เฉลี่ย
เปิดใช้งานคำสั่ง "ave" ซึ่งคำนวณค่าเฉลี่ยของสองรีจิสเตอร์

-mbase=n
ตัวแปรของขนาด n ไบต์หรือเล็กกว่าจะถูกวางไว้ในส่วน ".based" โดย
ค่าเริ่มต้น. ตัวแปรพื้นฐานใช้ $tp register เป็น base register และมี a
จำกัด 128 ไบต์สำหรับส่วน ".based"

-เอ็มบิท็อป
เปิดใช้งานคำแนะนำการใช้งานบิต - การทดสอบบิต ("btstm"), ตั้งค่า ("bsetm"), clear
("bclrm") กลับด้าน ("bnotm") และทดสอบและตั้งค่า ("tas")

-mc=ชื่อ
เลือกว่าจะใส่ข้อมูลค่าคงที่ส่วนใด ชื่อ อาจเป็น "จิ๋ว" "ใกล้" หรือ
"ไกล".

-mclip
เปิดใช้งานคำแนะนำ "คลิป" โปรดทราบว่า "-mclip" จะไม่มีประโยชน์เว้นแต่คุณจะทำเช่นกัน
ให้ "-mminmax"

-mconfig=ชื่อ
เลือกหนึ่งในคอนฟิกูเรชันหลักในตัว ชิป MeP แต่ละตัวมีอย่างน้อยหนึ่งตัว
โมดูลในนั้น แต่ละโมดูลมี CPU หลักและตัวประมวลผลร่วมที่หลากหลาย เป็นทางเลือก
คำแนะนำและอุปกรณ์ต่อพ่วง เครื่องมือ "MeP-Integrator" ซึ่งไม่ได้เป็นส่วนหนึ่งของ GCC มีให้
การกำหนดค่าเหล่านี้ผ่านตัวเลือกนี้ การใช้ตัวเลือกนี้เหมือนกับการใช้ทั้งหมด
ตัวเลือกบรรทัดคำสั่งที่เกี่ยวข้อง การกำหนดค่าเริ่มต้นคือ "ค่าเริ่มต้น"

-เอ็มคอป
เปิดใช้งานคำสั่งตัวประมวลผลร่วม โดยค่าเริ่มต้น นี่คือตัวประมวลผลร่วม 32 บิต บันทึก
ที่ปกติแล้วตัวประมวลผลร่วมเปิดใช้งานผ่านตัวเลือก "-mconfig="

-mcop32
เปิดใช้งานคำสั่งของตัวประมวลผลร่วม 32 บิต

-mcop64
เปิดใช้งานคำสั่งของตัวประมวลผลร่วม 64 บิต

-mvc2
เปิดใช้งานการตั้งเวลา IVC2 IVC2 เป็นตัวประมวลผลร่วม VLIW 64 บิต

-mdc
ทำให้ตัวแปรคงที่ถูกวางไว้ในส่วน ".near"

-mdiv
เปิดใช้งานคำแนะนำ "div" และ "divu"

-meb
สร้างรหัส big-endian

-เมล
สร้างโค้ด little-endian

-mio-ระเหย
บอกคอมไพเลอร์ว่าตัวแปรใดๆ ที่มีแอตทริบิวต์ "io" จะต้องเป็น
ถือว่าผันผวน

-มล ทำให้ตัวแปรถูกกำหนดให้กับส่วน ".far" โดยค่าเริ่มต้น

-mleadz
เปิดใช้งานคำสั่ง "leadz" (ศูนย์นำหน้า)

มม ทำให้ตัวแปรถูกกำหนดให้กับส่วน ".near" โดยค่าเริ่มต้น

-mminmax
เปิดใช้งานคำแนะนำ "นาที" และ "สูงสุด"

-mmult
เปิดใช้งานคำแนะนำการคูณและการคูณสะสม

-mno-ตัวเลือก
ปิดใช้งานคำแนะนำเสริมทั้งหมดที่เปิดใช้งานโดย "-mall-opts"

-mrepeat
เปิดใช้งานคำแนะนำ "ทำซ้ำ" และ "ทำซ้ำ" ที่ใช้สำหรับการวนซ้ำแบบโอเวอร์เฮดต่ำ

-นางสาว ทำให้ตัวแปรทั้งหมดเป็นค่าเริ่มต้นในส่วน ".tiny" โปรดทราบว่ามี
จำกัด 65536 ไบต์ในส่วนนี้ การเข้าถึงตัวแปรเหล่านี้ใช้ %gp base
ทะเบียน

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

-msdram
เชื่อมโยงรันไทม์ตาม SDRAM แทนรันไทม์ตาม ROM เริ่มต้น

-msim
เชื่อมโยงไลบรารีรันไทม์ของโปรแกรมจำลอง

-msimnovec
เชื่อมโยงไลบรารีรันไทม์ของโปรแกรมจำลอง ยกเว้นการรองรับในตัวสำหรับการรีเซ็ตและ
เวกเตอร์และตารางข้อยกเว้น

-เอ็มทีเอฟ
ทำให้ฟังก์ชันทั้งหมดเป็นค่าเริ่มต้นในส่วน ".far" หากไม่มีตัวเลือกนี้ ฟังก์ชัน
ค่าเริ่มต้นของส่วน ".near"

-mtiny=n
ตัวแปรที่เป็น n ไบต์หรือน้อยกว่าจะถูกจัดสรรให้กับส่วน ".tiny" เหล่านี้
ตัวแปรใช้การลงทะเบียนฐาน $gp ค่าเริ่มต้นสำหรับตัวเลือกนี้คือ 4 แต่โปรดทราบว่า
มีการจำกัดขนาด 65536 ไบต์สำหรับส่วน ".tiny"

ไมโครเบลซ Options

-msoft-ลอย
ใช้การจำลองซอฟต์แวร์สำหรับจุดลอยตัว (ค่าเริ่มต้น)

-mhard-ลอย
ใช้คำแนะนำจุดลอยตัวของฮาร์ดแวร์

-mmmcpy
อย่าปรับการเคลื่อนไหวบล็อกให้เหมาะสม ใช้ "memcpy"

-mno-ชัดเจน
ตัวเลือกนี้เลิกใช้แล้ว ใช้ -fno-ศูนย์-เริ่มต้น-in-bss แทน.

-mcpu=ประเภทซีพียู
ใช้คุณสมบัติและกำหนดเวลารหัสสำหรับ CPU ที่กำหนด ค่าที่รองรับอยู่ในรูปแบบ
vX.YY.Zที่นี่มี X เป็นเวอร์ชันหลัก YY เป็นรุ่นรองและ Z คือความเข้ากันได้
รหัส. ค่าตัวอย่างคือ v3.00.ก, v4.00.b, v5.00.ก, v5.00.b, v5.00.b, v6.00.ก.

-mxl-soft-mul
ใช้ซอฟต์แวร์จำลองการคูณ (ค่าเริ่มต้น)

-mxl-soft-div
ใช้ซอฟต์แวร์จำลองสำหรับการแบ่ง (ค่าเริ่มต้น)

-mxl-บาร์เรลกะ
ใช้ตัวเปลี่ยนบาร์เรลของฮาร์ดแวร์

-mxl-รูปแบบเปรียบเทียบ
ใช้รูปแบบการเปรียบเทียบคำแนะนำ

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

-mxl-stack-ตรวจสอบ
ตัวเลือกนี้เลิกใช้แล้ว ใช้ -fstack-check แทน

-mxl-gp-ตัวเลือก
ใช้ส่วน sdata/sbss สัมพันธ์ของ GP

-mxl-คูณสูง
ใช้คำสั่งคูณสูงสำหรับส่วนสูงของการคูณ 32x32

-mxl-float-แปลง
ใช้คำแนะนำการแปลงทศนิยมของฮาร์ดแวร์

-mxl-float-ตร.ม
ใช้คำสั่งรากที่สองของจุดทศนิยมของฮาร์ดแวร์

-mxl-โหมด-แอพรุ่น
เลือกรุ่นสมัคร แอพรุ่น. รุ่นที่ถูกต้องคือ

ปฏิบัติการ
ปฏิบัติการปกติ (ค่าเริ่มต้น) ใช้รหัสเริ่มต้น crt0.o.

xmdstub
สำหรับใช้กับ Xilinx Microprocessor Debugger (XMD) ซอฟต์แวร์ที่ใช้การดีบักแบบล่วงล้ำ
ตัวแทนที่เรียกว่า xmdstub สิ่งนี้ใช้ไฟล์เริ่มต้น crt1.o และกำหนดที่อยู่เริ่มต้นของ
โปรแกรมจะเป็น 0x800

บูต
สำหรับแอปพลิเคชันที่โหลดโดยใช้ bootloader โมเดลนี้ใช้ไฟล์เริ่มต้น
crt2.o ซึ่งไม่มีตัวจัดการเวกเตอร์รีเซ็ตตัวประมวลผล นี้เหมาะ
สำหรับการถ่ายโอนการควบคุมบนโปรเซสเซอร์รีเซ็ตไปที่ bootloader แทนที่จะเป็น
แอพลิเคชัน

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

ตัวเลือกเสริม (Option) -xl-โหมด-แอพรุ่น เป็นนามแฝงที่เลิกใช้แล้วสำหรับ -mxl-โหมด-แอพรุ่น.

MIPS Options

-อี.บี สร้างรหัส big-endian

-THE สร้างโค้ด little-endian นี่คือค่าเริ่มต้นสำหรับ มิ้ปส์*เอล-*-* การกำหนดค่า

-มีนาคม=โค้ง
สร้างรหัสที่จะทำงานบน โค้งซึ่งอาจเป็นชื่อสามัญ MIPS ISA หรือ
ชื่อของโปรเซสเซอร์เฉพาะ ชื่อ ISA คือ: มิปส์1, มิปส์2, มิปส์3, มิปส์4,
มิปส์32, mips32r2, มิปส์64 และ mips64r2. ชื่อโปรเซสเซอร์คือ: 4kc, 4km, 4kp, 4ksc,
4เคซี, 4 กม, 4เก็บ, 4kd, 5kc, 5kf, 20kc, 24kc, 24kf2_1, 24kf1_1, 24เคซี, 24kef2_1,
24kef1_1, 34kc, 34kf2_1, 34kf1_1, 74kc, 74kf2_1, 74kf1_1, 74kf3_2, 1004kc, 1004kf2_1,
1004kf1_1, loongson2e, loongson2f, loongson3a, M4K, แปด, ออคทีน+, ออคตอน2, กลุ่มดาวนายพราน,
r2000, r3000, r3900, r4000, r4400, r4600, r4650, r6000, r8000, rm7000, rm9000, r10000,
r12000, r14000, r16000, sb1, sr71000, vr4100, vr4111, vr4120, vr4130, vr4300, vr5000,
vr5400, vr5500 และ XLR. ความคุ้มค่าพิเศษ จาก-abi เลือกที่เข้ากันได้มากที่สุด
สถาปัตยกรรมสำหรับ ABI ที่เลือก (นั่นคือ มิปส์1 สำหรับ ABI แบบ 32 บิตและ มิปส์3 สำหรับ 64 บิต
ABI)

ชุดเครื่องมือ Native Linux/GNU และ IRIX ยังรองรับค่า พื้นเมืองซึ่งเลือก
ตัวเลือกสถาปัตยกรรมที่ดีที่สุดสำหรับโปรเซสเซอร์โฮสต์ -march=เจ้าของภาษา ไม่มีผลหาก GCC
ไม่รู้จักโปรเซสเซอร์

ในชื่อโปรเซสเซอร์ ตัวสุดท้าย 000 สามารถย่อเป็น k (ตัวอย่างเช่น, -มีนาคม = r2k).
คำนำหน้าเป็นตัวเลือกและ vr อาจจะเขียน r.

ชื่อของแบบฟอร์ม nฉ2_1 อ้างถึงโปรเซสเซอร์ที่มี FPU โอเวอร์คล็อกที่อัตราครึ่งหนึ่งของ
แกน, ชื่อของแบบฟอร์ม nฉ1_1 อ้างถึงโปรเซสเซอร์ที่มี FPU โอเวอร์คล็อกที่อัตราเดียวกัน
เป็นแกนหลักและชื่อรูป nฉ3_2 อ้างถึงโปรเซสเซอร์ที่มี FPU โอเวอร์คล็อกอัตราส่วน
ของ 3:2 เมื่อเทียบกับแกนกลาง ด้วยเหตุผลด้านความเข้ากันได้ nf ได้รับการยอมรับว่าเป็น
คำพ้องความหมายสำหรับ nฉ2_1 ในขณะที่ nx และ bfx ได้รับการยอมรับเป็นคำพ้องความหมายสำหรับ nฉ1_1.

GCC กำหนดมาโครสองตัวตามค่าของตัวเลือกนี้ อย่างแรกคือ _MIPS_ARCH,
ซึ่งให้ชื่อของสถาปัตยกรรมเป้าหมายเป็นสตริง ที่สองมีรูปแบบ
_MIPS_ARCH_fooที่นี่มี foo เป็นมูลค่าตัวพิมพ์ใหญ่ของ _MIPS_ARCH. ตัวอย่างเช่น
-มีนาคม=r2000 จะตั้ง _MIPS_ARCH ไปยัง "ร2000" และกำหนดมาโคร _MIPS_ARCH_R2000.

โปรดทราบว่า _MIPS_ARCH มาโครใช้ชื่อโปรเซสเซอร์ที่ระบุข้างต้น กล่าวอีกนัยหนึ่ง
จะมีคำนำหน้าเต็มและจะไม่ย่อ 000 as k. ในกรณีของ จาก-
ABIแมโครตั้งชื่อสถาปัตยกรรมที่ได้รับการแก้ไข ( "มิพส์1" or "มิพส์3"). มันชื่อ
สถาปัตยกรรมเริ่มต้นเมื่อไม่มี -มีนาคม มีตัวเลือกให้

-mtune=โค้ง
เพิ่มประสิทธิภาพสำหรับ โค้ง. เหนือสิ่งอื่นใด ตัวเลือกนี้จะควบคุมวิธีการต่างๆ ของคำสั่ง
ตามกำหนดเวลาและต้นทุนที่รับรู้ของการดำเนินการทางคณิตศาสตร์ รายการของ โค้ง ค่า
เหมือนกับสำหรับ -มีนาคม.

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

-mtune กำหนดมาโคร _MIPS_TUNE และ _MIPS_TUNE_fooซึ่งทำงานในลักษณะเดียวกับ
-มีนาคม ที่อธิบายไว้ข้างต้น

-mips1
เทียบเท่ากับ -มีนาคม = mips1.

-mips2
เทียบเท่ากับ -มีนาคม = mips2.

-mips3
เทียบเท่ากับ -มีนาคม = mips3.

-mips4
เทียบเท่ากับ -มีนาคม = mips4.

-mips32
เทียบเท่ากับ -มีนาคม = mips32.

-mips32r2
เทียบเท่ากับ -มีนาคม=mips32r2.

-mips64
เทียบเท่ากับ -มีนาคม = mips64.

-mips64r2
เทียบเท่ากับ -มีนาคม=mips64r2.

-mips16
-mno-mips16
สร้าง (ไม่สร้าง) รหัส MIPS16 หาก GCC กำหนดเป้าหมายไปที่ MIPS32 หรือ MIPS64
สถาปัตยกรรมก็จะใช้ประโยชน์จาก MIPS16e ASE

การสร้างรหัส MIPS16 ยังสามารถควบคุมได้แบบต่อฟังก์ชันโดยใช้
แอตทริบิวต์ "mips16" และ "nomips16"

-mflip-mips16
สร้างรหัส MIPS16 บนฟังก์ชันสลับ ตัวเลือกนี้มีไว้สำหรับการถดถอย
การทดสอบการสร้างรหัส MIPS16/ไม่ใช่ MIPS16 แบบผสม และไม่ได้มีไว้สำหรับการทดสอบทั่วไป
ใช้ในการคอมไพล์รหัสผู้ใช้

-mininterlink-mips16
-mno-อินเตอร์ลิงค์-mips16
กำหนด (ไม่ต้องการ) ว่ารหัสที่ไม่ใช่ MIPS16 สามารถเชื่อมโยงกับรหัส MIPS16 ได้

ตัวอย่างเช่น รหัสที่ไม่ใช่ MIPS16 ไม่สามารถข้ามไปยังรหัส MIPS16 ได้โดยตรง มันต้องใช้ a
โทรหรือกระโดดทางอ้อม -mininterlink-mips16 ดังนั้นจึงปิดการใช้งานการกระโดดโดยตรงเว้นแต่
GCC รู้ดีว่าเป้าหมายของการกระโดดไม่ใช่ MIPS16

-มาบิ=32
-มาบิ=o64
-มาบิ=n32
-มาบิ=64
-มาบิ=เอบิ
สร้างรหัสสำหรับ ABI ที่กำหนด

โปรดทราบว่า EABI มีตัวแปร 32 บิตและ 64 บิต GCC มักจะสร้าง 64 บิต
รหัสเมื่อคุณเลือกสถาปัตยกรรม 64 บิต แต่คุณสามารถใช้ -mgp32 เพื่อรับรหัส 32 บิต
แทน.

สำหรับข้อมูลเกี่ยวกับ O64 ABI โปรดดูที่http://gcc.gnu.org/projects/mipso64-abi.html>.

GCC รองรับตัวแปร o32 ABI ซึ่งรีจิสเตอร์ทศนิยมเป็น 64 แทน
กว้างกว่า 32 บิต คุณสามารถเลือกชุดค่าผสมนี้ด้วย -มาบิ=32 -mfp64. ABI . นี้
อาศัยไฟล์ mthc1 และ mfhc1 คำแนะนำและดังนั้นจึงรองรับเฉพาะสำหรับ
โปรเซสเซอร์ MIPS32R2

การกำหนดค่ารีจิสเตอร์สำหรับอาร์กิวเมนต์และค่าที่ส่งคืนยังคงเหมือนเดิม แต่แต่ละค่า
ค่าสเกลาร์ถูกส่งผ่านในรีจิสเตอร์ 64 บิตเดียว แทนที่จะเป็นคู่ 32 บิต
ทะเบียน ตัวอย่างเช่น ค่าจุดลอยตัวของสเกลาร์จะถูกส่งกลับใน $f0 เท่านั้น ไม่ใช่
$f0/$f1 คู่. ชุดของการลงทะเบียนที่บันทึกการโทรยังคงเหมือนเดิม แต่ 64 บิตทั้งหมด
จะถูกบันทึกไว้

-มาบิคอล
-mno-เอบิคอล
สร้าง (ไม่สร้าง) โค้ดที่เหมาะสำหรับอ็อบเจ็กต์ไดนามิกสไตล์ SVR4
-มาบิคอล เป็นค่าเริ่มต้นสำหรับระบบที่ใช้ SVR4

-msshared
-mno- แบ่งปัน
สร้าง (ไม่สร้าง) รหัสที่ไม่ขึ้นกับตำแหน่งอย่างสมบูรณ์ และสามารถ
จึงเชื่อมโยงกับไลบรารีที่ใช้ร่วมกัน ตัวเลือกนี้มีผลเท่านั้น -มาบิคอล.

ทั้งหมด -มาบิคอล ตามธรรมเนียมแล้วโค้ดจะไม่ขึ้นกับตำแหน่งโดยไม่คำนึงถึงตัวเลือก
กดไลก์ -fPIC และ -fpic. อย่างไรก็ตาม ในฐานะที่เป็นส่วนขยาย GNU toolchain อนุญาตให้ปฏิบัติการได้
เพื่อใช้การเข้าถึงแบบสัมบูรณ์สำหรับสัญลักษณ์ที่มีผลผูกพันในเครื่อง นอกจากนี้ยังสามารถใช้ GP . ที่สั้นกว่าได้อีกด้วย
ลำดับการเริ่มต้นและสร้างการเรียกโดยตรงไปยังฟังก์ชันที่กำหนดในเครื่อง นี้
โหมดถูกเลือกโดย -mno- แบ่งปัน.

-mno- แบ่งปัน ขึ้นอยู่กับ binutils 2.16 หรือสูงกว่า และสร้างวัตถุที่สามารถเป็นได้เท่านั้น
เชื่อมโยงโดยตัวเชื่อมโยง GNU อย่างไรก็ตาม ตัวเลือกนี้ไม่มีผลกับ ABI ของรอบชิงชนะเลิศ
ปฏิบัติการได้; มันมีผลกับ ABI ของวัตถุที่ย้ายได้เท่านั้น โดยใช้ -mno- แบ่งปัน จะ
โดยทั่วไปจะทำให้ไฟล์เรียกทำงานมีขนาดเล็กลงและเร็วขึ้น

-msshared เป็นค่าเริ่มต้น

-mplt
-mno-plt
สมมติ (อย่าถือเอา) ว่าตัวเชื่อมโยงแบบสแตติกและไดนามิกรองรับ PLT และสำเนา
การย้ายถิ่นฐาน ตัวเลือกนี้มีผลเท่านั้น -mno- แบ่งปัน -มาบิคอล. สำหรับ n64 ABI นี่
ตัวเลือกไม่มีผลหากไม่มี -msym32.

คุณสามารถทำได้ -mplt ค่าเริ่มต้นโดยกำหนดค่า GCC ด้วย --กับ-mips-plt. ค่าเริ่มต้น
is -mno-plt มิฉะนั้น.

-mxgot
-mno-xgot
ยก (ไม่ยก) ข้อ จำกัด ปกติเกี่ยวกับขนาดของตารางออฟเซ็ตส่วนกลาง

โดยปกติ GCC จะใช้คำสั่งเดียวในการโหลดค่าจาก GOT ในขณะที่นี่คือ
ค่อนข้างมีประสิทธิภาพ มันจะทำงานได้ก็ต่อเมื่อ GOT มีขนาดเล็กกว่าประมาณ 64k
อะไรก็ตามที่มีขนาดใหญ่กว่านั้นจะทำให้ตัวเชื่อมโยงรายงานข้อผิดพลาดเช่น:

การย้ายที่ถูกตัดให้พอดี: R_MIPS_GOT16 foobar

หากเกิดเหตุการณ์นี้ขึ้น คุณควรคอมไพล์โค้ดของคุณใหม่ด้วย -mxgot. มันควรจะทำงานกับ
GOT ที่ใหญ่มาก แม้ว่าจะมีประสิทธิภาพน้อยกว่าเช่นกัน เนื่องจากจะใช้เวลาสาม
คำแนะนำในการดึงค่าของสัญลักษณ์สากล

โปรดทราบว่าตัวเชื่อมโยงบางตัวสามารถสร้าง GOT ได้หลายตัว หากคุณมีลิงเกอร์ดังกล่าว คุณ
จำเป็นต้องใช้เท่านั้น -mxgot เมื่อไฟล์อ็อบเจ็กต์เดียวเข้าถึงมากกว่า 64k's
มูลค่ารายการ GOT น้อยคนนักที่จะทำ

ตัวเลือกเหล่านี้จะไม่มีผลใดๆ เว้นแต่ GCC กำลังสร้างโค้ดที่ไม่ขึ้นกับตำแหน่ง

-mgp32
สมมติว่ารีจิสเตอร์เอนกประสงค์กว้าง 32 บิต

-mgp64
สมมติว่ารีจิสเตอร์เอนกประสงค์กว้าง 64 บิต

-mfp32
สมมติว่าการลงทะเบียนทศนิยมมีความกว้าง 32 บิต

-mfp64
สมมติว่าการลงทะเบียนทศนิยมมีความกว้าง 64 บิต

-mhard-ลอย
ใช้คำสั่งตัวประมวลผลร่วมทศนิยม

-msoft-ลอย
ห้ามใช้คำสั่งตัวประมวลผลร่วมแบบทศนิยม ใช้จุดลอยตัว
การคำนวณโดยใช้การเรียกห้องสมุดแทน

-msingle-ลอย
สมมติว่าตัวประมวลผลร่วมทศนิยมสนับสนุนเฉพาะการดำเนินการที่มีความแม่นยำเพียงครั้งเดียว

-mdouble-ลอย
สมมติว่าตัวประมวลผลร่วมทศนิยมสนับสนุนการดำเนินการที่มีความแม่นยำสองเท่า นี้
เป็นค่าเริ่มต้น

-mlsc
-mno-llsc
ใช้ (ไม่ใช้) ll, scและ ซิงค์ คำแนะนำในการใช้หน่วยความจำอะตอมในตัว
ฟังก์ชั่น. เมื่อไม่ได้ระบุตัวเลือกใดๆ GCC จะใช้คำแนะนำหาก
สถาปัตยกรรมเป้าหมายสนับสนุนพวกเขา

-mlsc มีประโยชน์หากสภาพแวดล้อมรันไทม์สามารถเลียนแบบคำสั่งและ -mno-llsc
อาจมีประโยชน์เมื่อรวบรวม ISA ที่ไม่เป็นมาตรฐาน คุณสามารถสร้างตัวเลือกอย่างใดอย่างหนึ่ง
ค่าเริ่มต้นโดยกำหนดค่า GCC ด้วย --กับ-llsc และ --โดยไม่ต้อง-llsc ตามลำดับ
--กับ-llsc เป็นค่าเริ่มต้นสำหรับการกำหนดค่าบางอย่าง ดูเอกสารการติดตั้ง
เพื่อดูรายละเอียด

-mdsp
-mno-dsp
ใช้ (อย่าใช้) เวอร์ชัน 1 ของ MIPS DSP ASE
ตัวเลือกนี้กำหนดมาโครตัวประมวลผลล่วงหน้า __mips_dsp. นอกจากนี้ยังกำหนด
__mips_dsp_rev เพื่อ 1

-mdspr2
-mno-dspr2
ใช้ (อย่าใช้) เวอร์ชัน 2 ของ MIPS DSP ASE
ตัวเลือกนี้กำหนดมาโครตัวประมวลผลล่วงหน้า __mips_dsp และ __mips_dspr2. มันยัง
กำหนด __mips_dsp_rev เพื่อ 2

-msmartmips
-mno-smartmips
ใช้ (อย่าใช้) MIPS SmartMIPS ASE

-mpaired-เดียว
-mno-คู่เดียว
ใช้ (อย่าใช้) คำแนะนำแบบทศนิยมคู่เดียว
ตัวเลือกนี้ต้องมีการเปิดใช้งานการสนับสนุนจุดลอยตัวของฮาร์ดแวร์

-mdmx
-mno-mdmx
คำแนะนำการใช้ (อย่าใช้) MIPS Digital Media Extension ตัวเลือกนี้สามารถเป็นได้เท่านั้น
ใช้เมื่อสร้างรหัส 64 บิตและต้องการการสนับสนุนจุดลอยตัวของฮาร์ดแวร์เป็น
เปิดการใช้งาน

-mips3d
-mno-mips3d
ใช้ (อย่าใช้) MIPS-3D ASE ทางเลือก -mips3d หมายถึง -mpaired-เดียว.

-มม
-mno-ภูเขา
ใช้ (อย่าใช้) MT Multithreading คำแนะนำ

-mlong64
บังคับประเภท "ยาว" ให้มีความกว้าง 64 บิต ดู -mlong32 สำหรับคำอธิบายของค่าเริ่มต้น
และวิธีการกำหนดขนาดของตัวชี้

-mlong32
บังคับประเภท "long", "int" และตัวชี้ให้มีความกว้าง 32 บิต

ขนาดเริ่มต้นของ "int", "long" และตัวชี้ขึ้นอยู่กับ ABI ทั้งหมด
ABI ที่รองรับใช้ "int" แบบ 32 บิต n64 ABI ใช้ "long" แบบ 64 บิต เช่นเดียวกับ 64-bit
อีเอบีไอ; ส่วนอื่นใช้ "long" แบบ 32 บิต พอยน์เตอร์มีขนาดเท่ากับ "ยาว" หรือ
ขนาดเดียวกันกับการลงทะเบียนจำนวนเต็มแล้วแต่จำนวนใดจะน้อยกว่า

-msym32
-mno-sym32
สมมติ (อย่าสมมติ) ว่าสัญลักษณ์ทั้งหมดมีค่า 32 บิต โดยไม่คำนึงถึงตัวเลือกที่เลือก
เอบีไอ. ตัวเลือกนี้มีประโยชน์เมื่อใช้ร่วมกับ -มาบิ=64 และ -mno-เอบิคอล เพราะมัน
อนุญาตให้ GCC สร้างการอ้างอิงที่สั้นและเร็วขึ้นไปยังที่อยู่สัญลักษณ์

-G NUM
ใส่คำจำกัดความของข้อมูลที่มองเห็นได้จากภายนอกในส่วนข้อมูลขนาดเล็กหากข้อมูลนั้นไม่ใช่
มีขนาดใหญ่กว่า NUM ไบต์ GCC สามารถเข้าถึงข้อมูลได้อย่างมีประสิทธิภาพมากขึ้น ดู -mgpopt for
รายละเอียด

ค่าดีฟอลต์ -G ตัวเลือกขึ้นอยู่กับการกำหนดค่า

-mlocal-sdata
-mno-local-sdata
ขยาย (ไม่ขยาย) the -G พฤติกรรมต่อข้อมูลในเครื่องด้วย เช่น ตัวแปรคงที่
ใน C. -mlocal-sdata เป็นค่าเริ่มต้นสำหรับการกำหนดค่าทั้งหมด

หากตัวเชื่อมโยงบ่นว่าแอปพลิเคชันใช้ข้อมูลขนาดเล็กเกินไป คุณอาจ
ต้องการลองสร้างชิ้นส่วนที่มีความสำคัญน้อยกว่าด้วย -mno-local-sdata. คุณ
อาจต้องการสร้างไลบรารีขนาดใหญ่ด้วย -mno-local-sdata, เพื่อให้ห้องสมุด
ปล่อยให้มีพื้นที่มากขึ้นสำหรับโปรแกรมหลัก

-mextern-sdata
-mno-ภายนอก-sdata
สมมติ (อย่าถือเอา) ว่าข้อมูลที่กำหนดโดยภายนอกจะอยู่ในส่วนข้อมูลขนาดเล็ก if
ข้อมูลที่อยู่ภายใน -G ขีด จำกัด -mextern-sdata เป็นค่าเริ่มต้นสำหรับทุกคน
การกำหนดค่า

หากคุณรวบรวมโมดูล วิธี กับ -mextern-sdata -G NUM -mgpoptและ วิธี อ้างอิง
ตัวแปร var ที่ไม่ใหญ่กว่า NUM ไบต์ คุณต้องแน่ใจว่า var ถูกวางไว้
ในส่วนข้อมูลขนาดเล็ก ถ้า var ถูกกำหนดโดยโมดูลอื่น คุณต้องคอมไพล์
โมดูลนั้นสูงพอ -G ตั้งค่าหรือแนบแอตทริบิวต์ "ส่วน" ไปที่ var's
คำนิยาม. ถ้า var เป็นเรื่องปกติคุณต้องเชื่อมโยงแอปพลิเคชันกับ high-enough -G
การตั้งค่า

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

-mgpopt
-mno-gpopt
ใช้ (อย่าใช้) การเข้าถึงแบบสัมพันธ์กับ GP สำหรับสัญลักษณ์ที่ทราบว่าอยู่ในข้อมูลขนาดเล็ก
ส่วน; ดู -G, -mlocal-sdata และ -mextern-sdata. -mgpopt เป็นค่าเริ่มต้นสำหรับทุกคน
การกำหนดค่า

-mno-gpopt มีประโยชน์สำหรับกรณีที่ $gp register อาจไม่มีค่าของ
"_gp". ตัวอย่างเช่น หากโค้ดเป็นส่วนหนึ่งของไลบรารี่ที่อาจใช้ในการบู๊ต
มอนิเตอร์ โปรแกรมที่เรียกใช้รูทีนมอนิเตอร์การบูตจะส่งค่าที่ไม่รู้จักใน $gp
(ในสถานการณ์เช่นนี้ มอนิเตอร์บูตเองมักจะถูกคอมไพล์ด้วย -G0.)

-mno-gpopt หมายถึง -mno-local-sdata และ -mno-ภายนอก-sdata.

-membedded-ข้อมูล
-mno-ฝังข้อมูล
จัดสรรตัวแปรให้กับส่วนข้อมูลแบบอ่านอย่างเดียวก่อน ถ้าเป็นไปได้ จากนั้นถัดไปใน
ส่วนข้อมูลขนาดเล็กถ้าเป็นไปได้ มิฉะนั้นในข้อมูล ซึ่งจะทำให้โค้ดช้าลงเล็กน้อย
กว่าค่าเริ่มต้น แต่ลดจำนวน RAM ที่จำเป็นเมื่อดำเนินการ และอาจ
เป็นที่ต้องการสำหรับระบบฝังตัวบางระบบ

-muninit-const-in-rodata
-mno-uninit-const-in-rodata
ใส่ตัวแปร "const" ที่ยังไม่ได้กำหนดค่าไว้ในส่วนข้อมูลแบบอ่านอย่างเดียว ตัวเลือกนี้คือ
มีความหมายร่วมกับ .เท่านั้น -membedded-ข้อมูล.

-mcode-อ่านได้=การตั้งค่า
ระบุว่า GCC อาจสร้างโค้ดที่อ่านจากส่วนปฏิบัติการได้หรือไม่ มี
สามการตั้งค่าที่เป็นไปได้:

-mcode-readable=ใช่
คำแนะนำอาจเข้าถึงส่วนปฏิบัติการได้อย่างอิสระ นี่คือการตั้งค่าเริ่มต้น.

-mcode-readable = pcrel
MIPS16 คำแนะนำในการโหลดที่สัมพันธ์กับพีซีสามารถเข้าถึงส่วนปฏิบัติการได้ แต่อื่นๆ
คำแนะนำจะต้องไม่ทำเช่นนั้น ตัวเลือกนี้มีประโยชน์กับโปรเซสเซอร์ 4KSc และ 4KSd
เมื่อรหัส TLB มีชุดบิตยับยั้งการอ่าน นอกจากนี้ยังเป็นประโยชน์กับโปรเซสเซอร์
ที่สามารถกำหนดค่าให้มีอินเทอร์เฟซ SRAM สองคำสั่ง/ข้อมูล และนั่น
เช่นเดียวกับ M4K จะเปลี่ยนเส้นทางโหลดที่สัมพันธ์กับพีซีไปยัง RAM คำสั่งโดยอัตโนมัติ

-mcode-readable=no
คำแนะนำต้องไม่เข้าถึงส่วนที่ปฏิบัติการได้ ตัวเลือกนี้มีประโยชน์บน
เป้าหมายที่กำหนดค่าให้มีอินเทอร์เฟซ SRAM แบบคู่คำสั่ง/ข้อมูล แต่
ที่ (ต่างจาก M4K) จะไม่เปลี่ยนเส้นทางโหลดที่สัมพันธ์กับพีซีไปยัง
แรมคำสั่ง

-msplit-ที่อยู่
-mno-แยกที่อยู่
เปิดใช้งาน (ปิดใช้งาน) การใช้ตัวดำเนินการย้ายตำแหน่งแอสเซมเบลอร์ "%hi()" และ "%lo()" นี้
ตัวเลือกถูกแทนที่โดย -meexplicit-relocs แต่เก็บไว้ข้างหลัง
ความเข้ากันได้

-meexplicit-relocs
-mno-ชัดเจน-relocs
ใช้ (อย่าใช้) ตัวดำเนินการย้ายตำแหน่งแอสเซมเบลอร์เมื่อจัดการกับที่อยู่ที่เป็นสัญลักษณ์
ทางเลือกที่เลือกโดย -mno-ชัดเจน-relocsคือการใช้แมโครแอสเซมเบลอร์แทน

-meexplicit-relocs เป็นค่าเริ่มต้นหาก GCC ได้รับการกำหนดค่าให้ใช้แอสเซมเบลอร์ที่
รองรับตัวดำเนินการขนย้าย

-mcheck-zero-ดิวิชั่น
-mno-ตรวจสอบศูนย์หาร
กับดัก (อย่าดักจับ) ในการหารจำนวนเต็มด้วยศูนย์

ค่าเริ่มต้นคือ -mcheck-zero-ดิวิชั่น.

-mdivide-กับดัก
-mdivide-ตัวแบ่ง
ระบบ MIPS ตรวจสอบการหารด้วยศูนย์โดยสร้างกับดักแบบมีเงื่อนไขหรือa
ทำลายคำสั่ง การใช้กับดักส่งผลให้โค้ดมีขนาดเล็กลง แต่รองรับเฉพาะ MIPS
II และภายหลัง นอกจากนี้ เคอร์เนล Linux บางเวอร์ชันยังมีจุดบกพร่องที่ป้องกันกับดัก
จากการสร้างสัญญาณที่เหมาะสม ("SIGFPE") ใช้ -mdivide-กับดัก เพื่อให้เงื่อนไข
กับดักสถาปัตยกรรมที่สนับสนุนพวกเขาและ -mdivide-ตัวแบ่ง เพื่อบังคับให้ใช้
หยุดพัก

ค่าเริ่มต้นมักจะ -mdivide-กับดักแต่สามารถแทนที่ได้เมื่อกำหนดค่า time
การใช้ --with-divide=ตัวแบ่ง. การตรวจสอบแบบหารด้วยศูนย์สามารถปิดใช้งานได้อย่างสมบูรณ์โดยใช้
-mno-ตรวจสอบศูนย์หาร.

-mmmcpy
-mno-memcpy
บังคับ (อย่าบังคับ) การใช้ "memcpy()" สำหรับการย้ายบล็อกที่ไม่สำคัญ ค่าเริ่มต้น
is -mno-memcpyซึ่งช่วยให้ GCC สามารถอินไลน์สำเนาขนาดคงที่ส่วนใหญ่ได้

-mlong-โทร
-นาทีโทรยาว
ปิดการใช้งาน (อย่าปิดการใช้งาน) โดยใช้คำสั่ง "jal" ฟังก์ชั่นการโทรโดยใช้ "jal"
มีประสิทธิภาพมากกว่า แต่ต้องการให้ผู้โทรและผู้รับสายมีขนาด 256 เมกะไบต์ . เดียวกัน
ส่วน

ตัวเลือกนี้ไม่มีผลกับโค้ด abicalls ค่าเริ่มต้นคือ -นาทีโทรยาว.

- แมด
-mno-บ้า
เปิดใช้งาน (ปิดใช้งาน) การใช้คำสั่ง "mad", "madu" และ "mul" ตามที่
R4650 ไอเอสเอ

-mfused-mad
-mno-ฟิวส์ madd
เปิดใช้งาน (ปิดใช้งาน) การใช้คำสั่งการคูณจุดทศนิยมเมื่อพวกมัน
สามารถใช้ได้ ค่าเริ่มต้นคือ -mfused-mad.

เมื่อใช้คำสั่งการคูณ-สะสม ผลิตภัณฑ์ขั้นกลางจะถูกคำนวณ
เพื่อความแม่นยำที่ไม่สิ้นสุดและไม่อยู่ภายใต้ FCSR Flush to Zero bit นี่อาจจะเป็น
ไม่เป็นที่พึงปรารถนาในบางสถานการณ์

-nocpp
บอกแอสเซมเบลอร์ MIPS ไม่ให้รันตัวประมวลผลล่วงหน้าเหนือไฟล์แอสเซมเบลอร์ของผู้ใช้ (ด้วย a
.s ต่อท้าย) เมื่อประกอบเข้าด้วยกัน

-mfix-24k
-mno-แก้ไข-24k
แก้ไข 24K E48 (ข้อมูลสูญหายในร้านค้าระหว่างการเติมเงิน) errata วิธีแก้ปัญหา
ถูกนำไปใช้โดยแอสเซมเบลอร์มากกว่าโดย GCC

-mfix-r4000
-mno-แก้ไข-r4000
หลีกเลี่ยงข้อผิดพลาดของ CPU R4000:

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

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

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

-mfix-r4400
-mno-แก้ไข-r4400
หลีกเลี่ยงข้อผิดพลาดของ CPU R4400:

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

-mfix-r10000
-mno-แก้ไข-r10000
แก้ไขข้อผิดพลาด R10000 บางส่วน:

- ลำดับ "ll"/"sc" อาจไม่ทำงานในลักษณะปรมาณูในการแก้ไขก่อนหน้า 3.0 พวกเขาอาจจะ
การหยุดชะงักในการแก้ไข 2.6 และก่อนหน้า

ตัวเลือกนี้สามารถใช้ได้ก็ต่อเมื่อสถาปัตยกรรมเป้าหมายรองรับสาขาที่น่าจะเป็น
คำแนะนำ -mfix-r10000 เป็นค่าเริ่มต้นเมื่อ -มีนาคม=r10000 ถูกนำมาใช้; -mno-แก้ไข-r10000
เป็นค่าเริ่มต้นอย่างอื่น

-mfix-vr4120
-mno-แก้ไข-vr4120
แก้ไขปัญหา VR4120 errata:

- "dmultu" ไม่ได้ให้ผลลัพธ์ที่ถูกต้องเสมอไป

- "div" และ "ddiv" ไม่ได้ให้ผลลัพธ์ที่ถูกต้องเสมอไปหากตัวถูกดำเนินการตัวใดตัวหนึ่ง
เป็นลบ

วิธีแก้ปัญหาสำหรับ errata การแบ่งขึ้นอยู่กับฟังก์ชันพิเศษใน libgcc.a. ที่
ปัจจุบัน ฟังก์ชันเหล่านี้มีให้โดยการกำหนดค่า "mips64vr*-elf" เท่านั้น

VR4120 errata อื่น ๆ ต้องมี nop เพื่อแทรกระหว่าง . บางคู่
คำแนะนำ. errata เหล่านี้ได้รับการจัดการโดยแอสเซมเบลอร์ ไม่ใช่โดย GCC เอง

-mfix-vr4130
แก้ไขปัญหา VR4130 "mflo"/"mfhi" errata วิธีแก้ปัญหาจะดำเนินการโดย
แอสเซมเบลอร์มากกว่าโดย GCC แม้ว่า GCC จะหลีกเลี่ยงการใช้ "mflo" และ "mfhi" หาก
คำแนะนำ VR4130 "macc", "macchi", "dmacc" และ "dmacchi" จะใช้แทนได้

-mfix-sb1
-mno-แก้ไข-sb1
แก้ไขปัญหาข้อผิดพลาดของคอร์คอร์ SB-1 CPU บางอย่าง (ปัจจุบันแฟล็กนี้ใช้ได้กับ SB-1
การแก้ไข 2 "F1" และ "F2" ข้อผิดพลาดทศนิยม)

-mr10k-แคชอุปสรรค=การตั้งค่า
ระบุว่า GCC ควรแทรกอุปสรรคแคชเพื่อหลีกเลี่ยงผลข้างเคียงของ
การเก็งกำไรในโปรเซสเซอร์ R10K

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

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

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

1. หน่วยความจำที่ถูกครอบครองโดยสแต็กเฟรมของฟังก์ชันปัจจุบัน

2. หน่วยความจำที่ถูกครอบครองโดยอาร์กิวเมนต์สแต็กขาเข้า;

3. หน่วยความจำที่ครอบครองโดยอ็อบเจ็กต์ที่มีที่อยู่ลิงก์-เวลา-ค่าคงที่

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

หากโปรแกรมอินพุตมีการประกาศฟังก์ชันเช่น:

โมฆะ foo (โมฆะ);

ดังนั้นการใช้งาน "foo" จะต้องอนุญาตให้ดำเนินการ "j foo" และ "jal foo"
อย่างเก็งกำไร GCC เคารพข้อจำกัดนี้สำหรับฟังก์ชันที่คอมไพล์เอง มัน
คาดว่าฟังก์ชันที่ไม่ใช่ GCC (เช่น รหัสแอสเซมบลีที่เขียนด้วยลายมือ) จะทำเช่นเดียวกัน

ตัวเลือกมีสามรูปแบบ:

-mr10k-cache-barrier=โหลด-สโตร์
ใส่อุปสรรคแคชก่อนโหลดหรือจัดเก็บที่อาจดำเนินการอย่างคาดเดาได้
และนั่นอาจมีผลข้างเคียงแม้ว่าจะยกเลิกไปแล้วก็ตาม

-mr10k-cache-barrier=ร้านค้า
ใส่อุปสรรคแคชก่อนร้านค้าที่อาจดำเนินการเก็งกำไรและ
ที่อาจมีผลข้างเคียงแม้ว่าจะยกเลิกไปแล้วก็ตาม

-mr10k-cache-barrier=ไม่มี
ปิดใช้งานการแทรกอุปสรรคแคช นี่คือการตั้งค่าเริ่มต้น.

-mflush-func=ฟังก์ชั่น
-mno-ฟลัช-func
ระบุฟังก์ชันที่จะเรียกเพื่อล้างแคช I และ D หรือไม่เรียกเช่นนั้น
การทำงาน. หากถูกเรียก ฟังก์ชันจะต้องรับอาร์กิวเมนต์เหมือนกับฟังก์ชันทั่วไป
"_flush_func()" นั่นคือที่อยู่ของช่วงหน่วยความจำที่แคชกำลังทำงานอยู่
ล้าง ขนาดของช่วงหน่วยความจำ และหมายเลข 3 (เพื่อล้างแคชทั้งสอง) NS
ค่าเริ่มต้นขึ้นอยู่กับ GCC เป้าหมายที่กำหนดค่าไว้ แต่โดยทั่วไปจะเป็นอย่างใดอย่างหนึ่ง
_flush_func or __cpu_flush.

mbranch-ต้นทุน=NUM
กำหนดต้นทุนของสาขาไว้ที่ประมาณ NUM คำแนะนำ "ง่าย" ค่าใช้จ่ายนี้เป็นเพียง
heuristic และไม่รับประกันว่าจะให้ผลลัพธ์ที่สอดคล้องกันในรุ่นต่างๆ ศูนย์
ค่าใช้จ่ายซ้ำซ้อนเลือกค่าเริ่มต้นซึ่งขึ้นอยู่กับ -mtune การตั้งค่า

-mbranch-มีแนวโน้ม
-mno-สาขามีแนวโน้ม
เปิดหรือปิดการใช้คำสั่ง Branch Likely โดยไม่คำนึงถึงค่าเริ่มต้นสำหรับ
สถาปัตยกรรมที่เลือก โดยค่าเริ่มต้น คำสั่ง Branch Likely อาจถูกสร้างขึ้นถ้า
พวกเขาได้รับการสนับสนุนโดยสถาปัตยกรรมที่เลือก มีข้อยกเว้นสำหรับ MIPS32 และ
สถาปัตยกรรมและโปรเซสเซอร์ MIPS64 ที่ใช้สถาปัตยกรรมเหล่านั้น สำหรับผู้
คำสั่ง Branch Likely จะไม่ถูกสร้างขึ้นโดยค่าเริ่มต้นเนื่องจาก MIPS32 และ
สถาปัตยกรรม MIPS64 เลิกใช้งานโดยเฉพาะ

-mfp-ข้อยกเว้น
-mno-fp-ข้อยกเว้น
ระบุว่ามีการเปิดใช้งานข้อยกเว้น FP หรือไม่ สิ่งนี้ส่งผลต่อวิธีที่เรากำหนดเวลา FP
คำแนะนำสำหรับโปรเซสเซอร์บางตัว ค่าเริ่มต้นคือเปิดใช้งานข้อยกเว้น FP

ตัวอย่างเช่น ใน SB-1 หากข้อยกเว้น FP ถูกปิดใช้งาน และเรากำลังปล่อย 64-บิต
เราสามารถใช้ท่อ FP ทั้งสองท่อได้ มิฉะนั้น เราจะใช้ไพพ์ FP ได้เพียงท่อเดียวเท่านั้น

-mvr4130-จัดเรียง
-mno-vr4130-จัดเรียง
ไปป์ไลน์ VR4130 เป็นซุปเปอร์สเกลาร์แบบสองทาง แต่ออกคำสั่งได้เพียงสองคำสั่งเท่านั้น
ร่วมกันหากอันแรกมีการจัดตำแหน่งแบบ 8 ไบต์ เมื่อเปิดใช้งานตัวเลือกนี้ GCC จะ
จัดคู่ของคำสั่งที่คิดว่าควรดำเนินการควบคู่กันไป

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

-msynci
-mno-ซิงค์
เปิดใช้งาน (ปิดใช้งาน) การสร้างคำสั่ง "ซิงค์" บนสถาปัตยกรรมที่รองรับ
คำแนะนำ "ซิงค์" (หากเปิดใช้งาน) จะถูกสร้างขึ้นเมื่อ
"__builtin___clear_cache()" ถูกคอมไพล์แล้ว

ตัวเลือกนี้มีค่าเริ่มต้นเป็น "-mno-synci" แต่ค่าเริ่มต้นสามารถแทนที่ได้โดยการกำหนดค่า
ด้วย "--พร้อมซิงค์"

เมื่อทำการคอมไพล์โค้ดสำหรับระบบที่มีโปรเซสเซอร์ตัวเดียว โดยทั่วไปแล้วจะปลอดภัยที่จะใช้ "synci"
อย่างไรก็ตาม ในระบบมัลติคอร์ (SMP) หลายๆ ระบบ จะไม่ทำให้คำสั่งเป็นโมฆะ
แคชในคอร์ทั้งหมดและอาจนำไปสู่การทำงานที่ไม่ได้กำหนดไว้

-mrelax-pic-โทร
-mno-ผ่อนคลาย-pic-calls
พยายามเปลี่ยนการโทร PIC ที่ปกติแล้วส่งผ่านการลงทะเบียน $25 เป็นการโทรโดยตรง
สิ่งนี้จะเกิดขึ้นได้ก็ต่อเมื่อตัวเชื่อมโยงสามารถแก้ไขปลายทาง ณ เวลาเชื่อมโยงและ if
ปลายทางอยู่ในขอบเขตสำหรับการโทรโดยตรง

-mrelax-pic-โทร เป็นค่าเริ่มต้นหาก GCC ได้รับการกำหนดค่าให้ใช้แอสเซมเบลอร์และa
ตัวเชื่อมโยงที่รองรับคำสั่งแอสเซมบลี ".reloc" และ "-mexplicit-relocs" อยู่ใน
ผล. ด้วย "-mno-explicit-relocs" การเพิ่มประสิทธิภาพนี้สามารถทำได้โดย
แอสเซมเบลอร์และลิงเกอร์เพียงอย่างเดียวโดยไม่ได้รับความช่วยเหลือจากคอมไพเลอร์

-mmcount-ra-ที่อยู่
-mno-mcount-ra-ที่อยู่
ปล่อย (ไม่ปล่อย) รหัสที่อนุญาตให้ "_mcount" แก้ไขการส่งคืนของฟังก์ชันการเรียก
ที่อยู่. เมื่อเปิดใช้งาน ตัวเลือกนี้จะขยายอินเทอร์เฟซ "_mcount" ตามปกติด้วย new
รา-ที่อยู่ พารามิเตอร์ซึ่งมีประเภท "intptr_t *" และถูกส่งผ่านในการลงทะเบียน $ 12
จากนั้น "_mcount" สามารถแก้ไขที่อยู่ผู้ส่งได้โดยทำทั้งสองอย่างต่อไปนี้:

· ส่งคืนที่อยู่ใหม่ในการลงทะเบียน $31

· การจัดเก็บที่อยู่ใหม่ใน "*ที่อยู่รา"ถ้า รา-ที่อยู่ ไม่เป็นโมฆะ

ค่าเริ่มต้นคือ -mno-mcount-ra-ที่อยู่.

เอ็มมิกซ์ Options

ตัวเลือกเหล่านี้ถูกกำหนดไว้สำหรับ MMIX:

-mlibfuncs
-mno-libfuncs
ระบุว่ากำลังคอมไพล์ฟังก์ชันไลบรารีภายใน โดยส่งผ่านค่าทั้งหมดใน
ลงทะเบียนไม่ว่าขนาด

-เมปซิลอน
-mno-เอปไซลอน
สร้างคำแนะนำการเปรียบเทียบจุดลอยตัวที่เปรียบเทียบกับ "rE"
การลงทะเบียนเอปซิลอน

-mabi = mmixware
-mabi=gnu
สร้างรหัสที่ส่งผ่านพารามิเตอร์ของฟังก์ชันและส่งกลับค่าที่ (ในไฟล์ที่เรียก
ฟังก์ชัน) ถูกมองว่าเป็นการลงทะเบียน $0 ขึ้นไป ซึ่งต่างจาก GNU ABI ซึ่งใช้ global
ลงทะเบียน $231 ขึ้นไป

-mzero-ขยาย
-mno-zero-ขยาย
เมื่ออ่านข้อมูลจากหน่วยความจำในขนาดที่สั้นกว่า 64 บิต ให้ใช้ (อย่าใช้) ศูนย์-
ขยายคำสั่งโหลดตามค่าเริ่มต้น แทนที่จะเซ็นคำสั่งขยาย

-mknuthdiv
-mno-knuthdiv
ให้ผลหารที่ได้เศษที่เหลือมีเครื่องหมายเดียวกับตัวหาร
ด้วยค่าเริ่มต้น -mno-knuthdivเครื่องหมายของส่วนที่เหลืออยู่ตามเครื่องหมายของ
เงินปันผล. ทั้งสองวิธีถูกต้องทางคณิตศาสตร์ วิธีหลังเกือบจะเฉพาะ
มือสอง

-mtoplevel-สัญลักษณ์
-mno-toplevel-สัญลักษณ์
นำหน้า (ไม่เติมหน้า) a : กับสัญลักษณ์สากลทั้งหมดจึงสามารถใช้รหัสประกอบได้
ด้วยคำสั่งแอสเซมบลี "PREFIX"

-เมลฟ์
สร้างไฟล์ปฏิบัติการในรูปแบบ ELF แทนที่จะเป็นค่าดีฟอลต์ MMO รูปแบบที่ใช้โดย
มิกซ์ จำลอง

-mbranch-ทำนาย
-mno-สาขาทำนาย
ใช้ (อย่าใช้) คำแนะนำสาขาที่น่าจะเป็นเมื่อทำนายสาขาคงที่
บ่งชี้สาขาที่น่าจะเป็น

-mbase-ที่อยู่
-mno-ฐานที่อยู่
สร้าง (ไม่สร้าง) รหัสที่ใช้ ฐาน ที่อยู่. การใช้ที่อยู่ฐาน
สร้างคำขอโดยอัตโนมัติ (จัดการโดยแอสเซมเบลอร์และตัวเชื่อมโยง) สำหรับa
คงที่ที่จะตั้งค่าในการลงทะเบียนทั่วโลก การลงทะเบียนใช้สำหรับฐานอย่างน้อยหนึ่งฐาน
ร้องขอที่อยู่ภายในช่วง 0 ถึง 255 จากค่าที่เก็บไว้ในการลงทะเบียน NS
โดยทั่วไปจะนำไปสู่รหัสที่สั้นและรวดเร็ว แต่จำนวนของรายการข้อมูลต่างๆ ที่
สามารถแก้ไขได้อย่างจำกัด ซึ่งหมายความว่าโปรแกรมที่ใช้ข้อมูลคงที่จำนวนมาก
อาจต้องใช้ -mno-ฐานที่อยู่.

-msingle-ทางออก
-mno-ทางออกเดียว
บังคับ (ไม่บังคับ) โค้ดที่สร้างให้มีจุดออกเดียวในแต่ละฟังก์ชัน

MN10300 Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับสถาปัตยกรรม Matsushita MN10300:

-mmult-บั๊ก
สร้างรหัสเพื่อหลีกเลี่ยงข้อบกพร่องในคำแนะนำการคูณสำหรับโปรเซสเซอร์ MN10300
นี่คือค่าเริ่มต้น

-mno-mult-บั๊ก
อย่าสร้างโค้ดเพื่อหลีกเลี่ยงข้อผิดพลาดในคำแนะนำการคูณสำหรับ MN10300
โปรเซสเซอร์

-แม่33
สร้างรหัสโดยใช้คุณสมบัติเฉพาะของโปรเซสเซอร์ AM33

-mno-am33
อย่าสร้างรหัสโดยใช้คุณสมบัติเฉพาะของโปรเซสเซอร์ AM33 นี้เป็น
ค่าเริ่มต้น.

-แมม33-2
สร้างรหัสโดยใช้คุณสมบัติเฉพาะของโปรเซสเซอร์ AM33/2.0

-แม่34
สร้างรหัสโดยใช้คุณสมบัติเฉพาะของโปรเซสเซอร์ AM34

-mtune=ประเภทซีพียู
ใช้ลักษณะการจับเวลาของประเภท CPU ที่ระบุเมื่อกำหนดคำสั่ง
การดำเนินการนี้จะไม่เปลี่ยนประเภทโปรเซสเซอร์ที่เป็นเป้าหมาย ประเภท CPU ต้องเป็นหนึ่งใน
mn10300, am33, 33-2 น or am34.

-mreturn-ตัวชี้บน-d0
เมื่อสร้างฟังก์ชันที่ส่งคืนตัวชี้ ให้ส่งคืนตัวชี้ทั้งใน "a0" และ
"ด0" มิฉะนั้น ตัวชี้จะถูกส่งกลับเฉพาะใน a0 และพยายามเรียกเช่นนั้น
ฟังก์ชันที่ไม่มีต้นแบบจะส่งผลให้เกิดข้อผิดพลาด โปรดทราบว่าตัวเลือกนี้เปิดอยู่โดย
ค่าเริ่มต้น; ใช้ -mno-return-pointer-on-d0 เพื่อปิดการใช้งาน

-mno-crt0
อย่าลิงก์ในไฟล์อ็อบเจ็กต์การเริ่มต้นรันไทม์ C

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

ตัวเลือกนี้ทำให้การดีบักเชิงสัญลักษณ์เป็นไปไม่ได้

-มลิว
อนุญาตให้คอมไพเลอร์สร้าง นาน การแนะนำ คำ คำแนะนำถ้าเป้าหมายคือ
AM33 หรือภายหลัง นี่คือค่าเริ่มต้น ตัวเลือกนี้กำหนดมาโครตัวประมวลผลล่วงหน้า
__ลิว__.

-มโนลิว
ไม่อนุญาตให้คอมไพเลอร์สร้าง นาน การแนะนำ คำ คำแนะนำ. ตัวเลือกนี้
กำหนดมาโครพรีโปรเซสเซอร์ __NO_LIW__.

-msetlb
อนุญาตให้คอมไพเลอร์สร้าง SETLB และ Lcc คำแนะนำถ้าเป้าหมายคือ
AM33 หรือภายหลัง นี่คือค่าเริ่มต้น ตัวเลือกนี้กำหนดมาโครตัวประมวลผลล่วงหน้า
__SETLB__.

-mnosetlb
ไม่อนุญาตให้คอมไพเลอร์สร้าง SETLB or Lcc คำแนะนำ. ตัวเลือกนี้กำหนด
มาโครตัวประมวลผลล่วงหน้า __NO_SETLB__.

กปปส -11 Options

ตัวเลือกเหล่านี้ถูกกำหนดไว้สำหรับ PDP-11:

-mfpu
ใช้จุดลอยตัวของฮาร์ดแวร์ FPP นี่คือค่าเริ่มต้น (จุดลอยตัว FIS บน
ไม่รองรับ PDP-11/40)

-msoft-ลอย
อย่าใช้จุดลอยตัวของฮาร์ดแวร์

-mac0
ส่งคืนผลลัพธ์ทศนิยมใน ac0 (fr0 ในไวยากรณ์ Unix assembler)

-mno-ac0
ส่งกลับผลลัพธ์ทศนิยมในหน่วยความจำ นี่คือค่าเริ่มต้น

- ลบ.ม
สร้างรหัสสำหรับ PDP-11/40

- ลบ.ม
สร้างรหัสสำหรับ PDP-11/45 นี่คือค่าเริ่มต้น

- ลบ.ม
สร้างรหัสสำหรับ PDP-11/10

-mbcopy-ในตัว
ใช้รูปแบบอินไลน์ "movmemhi" เพื่อคัดลอกหน่วยความจำ นี่คือค่าเริ่มต้น

-mbcopy
อย่าใช้รูปแบบอินไลน์ "movmemhi" เพื่อคัดลอกหน่วยความจำ

-มิ้นต์16
-mno-int32
ใช้ "int" 16 บิต นี่คือค่าเริ่มต้น

-มิ้นต์32
-mno-int16
ใช้ "int" แบบ 32 บิต

-mfloat64
-mno-ลอย32
ใช้ 64 บิต "ลอย" นี่คือค่าเริ่มต้น

-mfloat32
-mno-ลอย64
ใช้ "float" แบบ 32 บิต

-มาบชิ
ใช้รูปแบบ "abshi2" นี่คือค่าเริ่มต้น

-mno-Abshi
อย่าใช้รูปแบบ "abshi2"

-mbranch-แพง
แสร้งทำเป็นว่ากิ่งก้านมีราคาแพง นี่สำหรับการทดลองสร้างโค้ด
เท่านั้น

-mbranch-ราคาถูก
อย่าแสร้งทำเป็นว่ากิ่งก้านมีราคาแพง นี่คือค่าเริ่มต้น

-munix-asm
ใช้ไวยากรณ์แอสเซมเบลอร์ Unix นี่เป็นค่าเริ่มต้นเมื่อกำหนดค่าสำหรับ pdp11-*-bsd.

-mdec-asm
ใช้ไวยากรณ์ของแอสเซมเบลอร์ DEC นี่เป็นค่าเริ่มต้นเมื่อกำหนดค่าสำหรับเป้าหมาย PDP-11 ใด ๆ
นอกเหนือจาก pdp11-*-bsd.

พิโคชิป Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน picoChip:

-แม่=ae_type
ตั้งค่าชุดคำสั่ง ชุดลงทะเบียน และพารามิเตอร์การจัดกำหนดการคำสั่งสำหรับ array
ประเภทองค์ประกอบ ae_type. ค่าที่รองรับสำหรับ ae_type เป็น ใด ๆ, มัลและ MAC.

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

-แม = MUL เลือกประเภท MUL AE นี่เป็นประเภท AE ที่มีประโยชน์ที่สุดสำหรับโค้ดที่คอมไพล์แล้ว
และเป็นค่าเริ่มต้น

-แม = MAC เลือก MAC AE แบบ DSP รหัสที่คอมไพล์ด้วยตัวเลือกนี้อาจประสบปัญหา
ประสิทธิภาพการจัดการไบต์ (ถ่าน) ต่ำ เนื่องจาก DSP AE ไม่มีให้
การสนับสนุนฮาร์ดแวร์สำหรับการโหลด / จัดเก็บไบต์

-สัญลักษณ์ตามที่อยู่
เปิดใช้งานคอมไพเลอร์เพื่อใช้ชื่อสัญลักษณ์โดยตรงเป็นที่อยู่ใน load/store
โดยไม่ต้องโหลดลงในรีจิสเตอร์ก่อน โดยทั่วไปแล้วการใช้สิ่งนี้
option จะสร้างโปรแกรมขนาดใหญ่ขึ้น ซึ่งทำงานเร็วกว่าเมื่อตัวเลือกไม่ได้
ใช้แล้ว. อย่างไรก็ตาม ผลลัพธ์จะแตกต่างกันไปในแต่ละโปรแกรม จึงเหลือไว้เป็นผู้ใช้
แทนที่จะเปิดใช้งานอย่างถาวร

-mno-ไม่มีประสิทธิภาพ-คำเตือน
ปิดใช้งานคำเตือนเกี่ยวกับการสร้างโค้ดที่ไม่มีประสิทธิภาพ คำเตือนเหล่านี้สามารถ
สร้างขึ้น ตัวอย่างเช่น เมื่อรวบรวมโค้ดที่ดำเนินการหน่วยความจำระดับไบต์
ในประเภท MAC AE MAC AE ไม่มีฮาร์ดแวร์รองรับหน่วยความจำระดับไบต์
การดำเนินการ ดังนั้นการโหลด / ร้านค้าไบต์ทั้งหมดจะต้องสังเคราะห์จาก word load/store
การดำเนินงาน สิ่งนี้ไม่มีประสิทธิภาพและจะมีการสร้างคำเตือนเพื่อระบุ
โปรแกรมเมอร์ว่าพวกเขาควรเขียนโค้ดใหม่เพื่อหลีกเลี่ยงการทำงานของไบต์หรือเพื่อกำหนดเป้าหมาย an
ประเภท AE ที่มีการรองรับฮาร์ดแวร์ที่จำเป็น ตัวเลือกนี้ช่วยให้คำเตือนถึง
จะถูกปิด

PowerPC Options

เหล่านี้อยู่ภายใต้

RL78 Options

-msim
ลิงก์ในไลบรารีเป้าหมายเพิ่มเติมเพื่อรองรับการทำงานภายในโปรแกรมจำลอง

-mmul=ไม่มี
-มมมูล=g13
-mmul=rl78
ระบุชนิดของการสนับสนุนการคูณฮาร์ดแวร์ที่จะใช้ ค่าเริ่มต้นคือ
"ไม่มี" ซึ่งใช้ฟังก์ชันการคูณซอฟต์แวร์ ตัวเลือก "g13" มีไว้สำหรับ
ฮาร์ดแวร์คูณ/แบ่งอุปกรณ์ต่อพ่วงบนเป้าหมาย RL78/G13 เท่านั้น ตัวเลือก "rl78"
สำหรับการคูณฮาร์ดแวร์มาตรฐานที่กำหนดไว้ในคู่มือซอฟต์แวร์ RL78

ไอบีเอ็ม RS / 6000 และ PowerPC Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับ IBM RS/6000 และ PowerPC:

-อำนาจ
-mno-อำนาจ
-mpower2
-mno-power2
-mpowerpc
-mno-powerpc
-mpowerpc-gpopt
-mno-powerpc-gpopt
-mpowerpc-gfxopt
-mno-powerpc-gfxopt
-mpowerpc64
-mno-powerpc64
-mmcrf
-mno-mfcrf
-mpopcntb
-mno-popcntb
-mpopcntd
-mno-popcntd
-mfprnd
-mno-fprnd
-mcmpb
-mno-cmpb
-mmpgppr
-mno-mfpgpr
-mhard-dfp
-mno-ฮาร์ด-dfp
GCC รองรับสถาปัตยกรรมชุดคำสั่งที่เกี่ยวข้องสองชุดสำหรับ RS/6000 และ PowerPC
พื้นที่ พาวเวอร์ ชุดคำสั่งเป็นคำสั่งที่ .รองรับ rios ชิปเซตที่ใช้แล้ว
ในระบบ RS/6000 ดั้งเดิมและ PowerPC ชุดคำสั่งเป็นสถาปัตยกรรมของ
ไมโครโปรเซสเซอร์ Freescale MPC5xx, MPC6xx, MPC8xx และ IBM 4xx, 6xx และ
ไมโครโปรเซสเซอร์ที่ตามมา

สถาปัตยกรรมทั้งสองไม่ใช่ส่วนย่อยของอีกสถาปัตยกรรมหนึ่ง อย่างไรก็ตาม มีเซตย่อยร่วมขนาดใหญ่
ของคำแนะนำที่สนับสนุนโดยทั้งสอง การลงทะเบียน MQ จะรวมอยู่ในโปรเซสเซอร์
รองรับสถาปัตยกรรม POWER

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

พื้นที่ -อำนาจ ตัวเลือกช่วยให้ GCC สร้างคำแนะนำที่พบเฉพาะใน
สถาปัตยกรรม POWER และการใช้การลงทะเบียน MQ ระบุ -mpower2 หมายถึง -Power และ
ยังอนุญาตให้ GCC สร้างคำสั่งที่มีอยู่ในสถาปัตยกรรม POWER2
แต่ไม่ใช่สถาปัตยกรรม POWER ดั้งเดิม

พื้นที่ -mpowerpc ตัวเลือกช่วยให้ GCC สร้างคำแนะนำที่พบเฉพาะใน
ชุดย่อย 32 บิตของสถาปัตยกรรม PowerPC ระบุ -mpowerpc-gpopt หมายถึง
-mpowerpc และยังอนุญาตให้ GCC ใช้คำสั่งสถาปัตยกรรม PowerPC เสริมใน
กลุ่มวัตถุประสงค์ทั่วไป รวมทั้งรากที่สองจุดทศนิยม ระบุ
-mpowerpc-gfxopt หมายถึง -mpowerpc และยังอนุญาตให้ GCC ใช้ตัวเลือก PowerPC
คำแนะนำสถาปัตยกรรมในกลุ่มกราฟิกรวมถึงการเลือกจุดลอยตัว

พื้นที่ -mmcrf ตัวเลือกช่วยให้ GCC สร้างการย้ายจากฟิลด์การลงทะเบียนเงื่อนไข
คำสั่งที่ใช้กับโปรเซสเซอร์ POWER4 และโปรเซสเซอร์อื่นที่สนับสนุน
สถาปัตยกรรม PowerPC V2.01 NS -mpopcntb ตัวเลือกช่วยให้ GCC สร้าง popcount
และคำแนะนำการประมาณการซึ่งกันและกันของ FP แบบ double-precision ที่ใช้งานบน POWER5
โปรเซสเซอร์และโปรเซสเซอร์อื่นๆ ที่สนับสนุนสถาปัตยกรรม PowerPC V2.02 NS
-mpopcntd ตัวเลือกอนุญาตให้ GCC สร้างคำสั่ง popcount ที่ใช้งานบน
ตัวประมวลผล POWER7 และตัวประมวลผลอื่นๆ ที่สนับสนุนสถาปัตยกรรม PowerPC V2.06
พื้นที่ -mfprnd ตัวเลือกอนุญาตให้ GCC สร้างรอบ FP เป็นคำสั่งจำนวนเต็ม
นำไปใช้กับโปรเซสเซอร์ POWER5+ และโปรเซสเซอร์อื่นๆ ที่รองรับ PowerPC
สถาปัตยกรรม V2.03 NS -mcmpb ตัวเลือกช่วยให้ GCC สร้างการเปรียบเทียบไบต์
คำสั่งที่ใช้กับโปรเซสเซอร์ POWER6 และโปรเซสเซอร์อื่นที่สนับสนุน
สถาปัตยกรรม PowerPC V2.05 NS -mmpgppr ตัวเลือกช่วยให้ GCC สร้างการย้าย FP
ไป/จากคำแนะนำการลงทะเบียนใช้งานทั่วไปที่ใช้กับโปรเซสเซอร์ POWER6X และ
โปรเซสเซอร์อื่นๆ ที่สนับสนุนสถาปัตยกรรม PowerPC V2.05 แบบขยาย NS -mhard-dfp
ตัวเลือกอนุญาตให้ GCC สร้างคำสั่งทศนิยมทศนิยมที่นำมาใช้บน
โปรเซสเซอร์ POWER บางตัว

พื้นที่ -mpowerpc64 ตัวเลือกอนุญาตให้ GCC สร้างคำสั่ง 64 บิตเพิ่มเติมที่
ถูกพบในสถาปัตยกรรม PowerPC64 แบบเต็มและสำหรับ GPRs แบบ 64 บิต doubleword
ปริมาณ GCC เริ่มต้นเป็น -mno-powerpc64.

หากคุณระบุทั้ง -mno-อำนาจ และ -mno-powerpc, GCC จะใช้เฉพาะคำแนะนำใน
เซ็ตย่อยร่วมของสถาปัตยกรรมทั้งสองบวกกับการเรียกโหมดทั่วไป AIX พิเศษ และ
จะไม่ใช้การลงทะเบียน MQ ระบุทั้งคู่ -อำนาจ และ -mpowerpc อนุญาตให้ GCC ไป
ใช้คำสั่งใด ๆ จากสถาปัตยกรรมใดสถาปัตยกรรมหนึ่งและเพื่ออนุญาตให้ใช้การลงทะเบียน MQ
ระบุสิ่งนี้สำหรับ Motorola MPC601

-mnew-ความจำ
-โมลด์-ความจำ
เลือกตัวช่วยจำที่จะใช้ในโค้ดแอสเซมเบลอร์ที่สร้างขึ้น กับ -mnew-ความจำ,
GCC ใช้ตัวช่วยจำของแอสเซมเบลอร์ที่กำหนดไว้สำหรับสถาปัตยกรรม PowerPC กับ
-โมลด์-ความจำ มันใช้ตัวช่วยจำของแอสเซมเบลอร์ที่กำหนดไว้สำหรับสถาปัตยกรรม POWER
คำแนะนำที่กำหนดไว้ในสถาปัตยกรรมเดียวมีเพียงหนึ่งคำช่วยจำ GCC ใช้สิ่งนั้น
ช่วยในการจำโดยไม่คำนึงถึงตัวเลือกเหล่านี้

GCC ตั้งค่าเริ่มต้นเป็น mnemonics ที่เหมาะสมสำหรับสถาปัตยกรรมที่ใช้งาน ระบุ
-mcpu=ซีพียู_ประเภท บางครั้งแทนที่ค่าของตัวเลือกเหล่านี้ เว้นแต่คุณกำลังสร้าง
ข้ามคอมไพเลอร์ ปกติแล้วคุณไม่ควรระบุอย่างใดอย่างหนึ่ง -mnew-ความจำ or
-โมลด์-ความจำแต่ควรยอมรับค่าเริ่มต้นแทน

-mcpu=ซีพียู_ประเภท
ตั้งค่าประเภทสถาปัตยกรรม การใช้รีจิสเตอร์ ตัวเลือกตัวช่วยจำ และการจัดกำหนดการคำสั่ง
พารามิเตอร์สำหรับประเภทเครื่อง ซีพียู_ประเภท. ค่าที่รองรับสำหรับ ซีพียู_ประเภท เป็น 401, 403,
405, 405fp, 440, 440fp, 464, 464fp, 476, 476fp, 505, 601, 602, 603, 603e, 604, 604e,
620, 630, 740, 7400, 7450, 750, 801, 821, 823, 860, 970, 8540, a2, e300c2, e300c3,
e500mc, e500mc64, ec603e, G3, G4, G5, ยักษ์, อำนาจ, power2, power3, power4, power5,
พลัง5+, power6, พลัง6x, power7, ร่วมกัน, พาวเวอร์พีซี, พาวเวอร์พีซี64, rios, ริออส 1, ริออส 2, csr,
และ rs64.

-mcpu=ทั่วไป เลือกโปรเซสเซอร์ทั่วไปอย่างสมบูรณ์ รหัสที่สร้างขึ้นภายใต้ตัวเลือกนี้
จะทำงานบนโปรเซสเซอร์ POWER หรือ PowerPC ใดๆ GCC จะใช้เฉพาะคำแนะนำใน
ชุดย่อยทั่วไปของสถาปัตยกรรมทั้งสอง และจะไม่ใช้การลงทะเบียน MQ GCC ถือว่า a
รุ่นโปรเซสเซอร์ทั่วไปสำหรับวัตถุประสงค์ในการจัดตารางเวลา

-mcpu=กำลัง, -mcpu=พลังงาน2, -mcpu=พาวเวอร์พีซีและ -mcpu=พาวเวอร์พีซี64 ระบุ POWER ทั่วไป
POWER2, ​​PowerPC 32 บิตแท้ (เช่น ไม่ใช่ MPC601) และสถาปัตยกรรม PowerPC 64 บิต
ประเภทเครื่อง โดยมีรุ่นโปรเซสเซอร์ทั่วไปที่เหมาะสมซึ่งใช้สำหรับการตั้งเวลา
วัตถุประสงค์

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

พื้นที่ -mcpu ตัวเลือกเปิดใช้งานหรือปิดใช้งานตัวเลือกต่อไปนี้โดยอัตโนมัติ:

-มัลทีฟ -mfprnd -mhard-ลอย -mmcrf -หลายหลาก -mnew-ความจำ -mpopcntb
-mpopcntd -อำนาจ -mpower2 -mpowerpc64 -mpowerpc-gpopt -mpowerpc-gfxopt
-msingle-ลอย -mdouble-ลอย -msimple-fpu -mstring -มม -mdlmzb -mmpgppr -mvsx

ตัวเลือกเฉพาะที่ตั้งค่าไว้สำหรับ CPU ใด ๆ จะแตกต่างกันไปตามเวอร์ชันของคอมไพเลอร์
ขึ้นอยู่กับการตั้งค่าที่ดูเหมือนว่าจะสร้างรหัสที่เหมาะสมที่สุดสำหรับ CPU นั้น มันไม่ได้
จำเป็นต้องสะท้อนถึงความสามารถของฮาร์ดแวร์ที่แท้จริง หากคุณต้องการตั้งค่า an
แต่ละตัวเลือกสำหรับค่าเฉพาะ คุณสามารถระบุได้หลังจาก -mcpu ตัวเลือก
กดไลก์ -mcpu=970 -mno-อัลทีฟเทค.

บน AIX, the -มัลทีฟ และ -mpowerpc64 ตัวเลือกไม่ได้เปิดใช้งานหรือปิดใช้งานโดย -mcpu
ตัวเลือกในปัจจุบันเนื่องจาก AIX ไม่มีการสนับสนุนอย่างเต็มที่สำหรับตัวเลือกเหล่านี้ คุณอาจ
ยังคงเปิดหรือปิดการใช้งานทีละรายการหากคุณแน่ใจว่ามันจะทำงานในของคุณ
สิ่งแวดล้อม

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

-mcmodel=เล็ก
สร้างรหัส PowerPC64 สำหรับรุ่นขนาดเล็ก: TOC ถูกจำกัดที่ 64k

-mcmodel=กลาง
สร้างรหัส PowerPC64 สำหรับโมเดลขนาดกลาง: TOC และข้อมูลสแตติกอื่นๆ อาจเพิ่มขึ้น
ถึงขนาด 4G ทั้งหมด

-mcmodel=ขนาดใหญ่
สร้างรหัส PowerPC64 สำหรับรุ่นใหญ่: TOC อาจมีขนาดสูงสุด 4G อื่น
ข้อมูลและรหัสถูกจำกัดโดยพื้นที่ที่อยู่ 64 บิตเท่านั้น

-มัลทีฟ
-mno-อัลทีฟเทค
สร้างรหัสที่ใช้ (ไม่ใช้) คำแนะนำ AltiVec และยังเปิดใช้งานการใช้งาน
ของฟังก์ชันในตัวที่ช่วยให้เข้าถึงชุดคำสั่ง AltiVec ได้โดยตรงมากขึ้น
คุณอาจต้องตั้งค่า -mabi=อัลทีฟ เพื่อปรับ ABI ปัจจุบันด้วย AltiVec ABI
ปรับปรุง

-mvrบันทึก
-mno-vrsave
สร้างคำแนะนำ VRSAVE เมื่อสร้างโค้ด AltiVec

-mgen-เซลล์-ไมโครโค้ด
สร้างคำสั่งไมโครโค้ดของเซลล์

-mwar-เซลล์-ไมโครโค้ด
คำเตือนเมื่อคำสั่งไมโครโค้ดของเซลล์กำลังจะเผยแพร่ ตัวอย่างเซลล์
คำสั่งไมโครโค้ดเป็นการเลื่อนตัวแปร

-msecure-plt
สร้างโค้ดที่อนุญาตให้ ld และ ld.so สร้างไฟล์เรียกทำงานและไลบรารีที่แชร์ด้วย
ส่วนที่ไม่ใช่ exec .plt และ .got นี่คือตัวเลือก SYSV ABI ของ PowerPC 32 บิต

-mbss-plt
สร้างโค้ดที่ใช้ส่วน BSS .plt ที่ ld.so กรอก และต้องใช้ .plt และ
.got ส่วนที่สามารถเขียนได้และดำเนินการได้ นี่คือ PowerPC 32 บิต SYSV
ตัวเลือก ABI

-มิเซล
-mno-isel
สวิตช์นี้เปิดหรือปิดการสร้างคำสั่ง ISEL

-มิเซิล=ใช่ไม่ใช่
สวิตช์นี้เลิกใช้แล้ว ใช้ -มิเซล และ -mno-isel แทน.

-msp
-mno-ความเร็ว
สวิตช์นี้เปิดใช้งานหรือปิดใช้งานการสร้างคำสั่ง SPE simd

- พิการ
-mno-จับคู่
สวิตช์นี้เปิดหรือปิดการสร้างคำสั่ง PIRED simd

-msp=ใช่ไม่ใช่
ตัวเลือกนี้เลิกใช้แล้ว ใช้ -msp และ -mno-ความเร็ว แทน.

-mvsx
-mno-vsx
สร้างโค้ดที่ใช้ (ไม่ใช้) คำแนะนำ vector/scalar (VSX) และ
เปิดใช้งานการใช้ฟังก์ชันในตัวที่ช่วยให้สามารถเข้าถึง VSX . ได้โดยตรงมากขึ้น
ชุดคำสั่ง

-mfloat-gprs=ใช่/เดี่ยว/คู่/ไม่
-mfloat-gprs
สวิตช์นี้เปิดหรือปิดใช้งานการสร้างการดำเนินการจุดลอยตัวบน
รีจิสเตอร์เอนกประสงค์สำหรับสถาปัตยกรรมที่รองรับ

อาร์กิวเมนต์ ใช่ or เดียว เปิดใช้งานการใช้จุดลอยตัวที่มีความแม่นยำเดียว
การดำเนินงาน

อาร์กิวเมนต์ สอง ช่วยให้สามารถใช้ทศนิยมแบบ single และ double-precision
การดำเนินงาน

อาร์กิวเมนต์ ไม่ ปิดใช้งานการดำเนินการทศนิยมบนรีจิสเตอร์เอนกประสงค์

ขณะนี้ตัวเลือกนี้มีเฉพาะใน MPC854x เท่านั้น

- ลบ.ม
- ลบ.ม
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิตของเป้าหมายดาร์วินและ SVR4 (รวมถึง
GNU/ลินุกซ์). สภาพแวดล้อมแบบ 32 บิตตั้งค่า int, long และ pointer เป็น 32 บิตและ
สร้างรหัสที่ทำงานบนตัวแปร PowerPC ใดๆ สภาพแวดล้อม 64 บิตตั้งค่าเป็น
32 บิตและยาวและชี้ไปที่ 64 บิตและสร้างรหัสสำหรับ PowerPC64 สำหรับ
-mpowerpc64.

-mfull-toc
-mno-fp-ใน-toc
-mno-ผลรวมใน-toc
-mminimal-toc
แก้ไขการสร้าง TOC (สารบัญ) ซึ่งสร้างขึ้นสำหรับทุกๆ
ไฟล์ปฏิบัติการ NS -mfull-toc ตัวเลือกถูกเลือกโดยค่าเริ่มต้น ในกรณีนั้น GCC
จะจัดสรรรายการ TOC อย่างน้อยหนึ่งรายการสำหรับการอ้างอิงตัวแปรที่ไม่ซ้ำแบบอัตโนมัติแต่ละรายการ
ในโปรแกรมของคุณ GCC จะวางค่าคงที่ทศนิยมใน TOC ด้วย อย่างไรก็ตาม,
มีเพียง 16,384 รายการที่มีอยู่ใน TOC

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

หากคุณยังคงไม่มีเนื้อที่ว่างใน TOC แม้ว่าคุณจะระบุตัวเลือกทั้งสองนี้ไว้
ระบุ -mminimal-toc แทนที่. ตัวเลือกนี้ทำให้ GCC สร้างรายการ TOC เพียงรายการเดียวสำหรับ
ทุกไฟล์. เมื่อคุณระบุตัวเลือกนี้ GCC จะสร้างโค้ดที่ช้ากว่าและ
ใหญ่กว่าแต่ใช้พื้นที่ TOC น้อยมาก คุณอาจต้องการใช้ตัวเลือกนี้
เฉพาะในไฟล์ที่มีโค้ดที่เรียกใช้งานน้อยกว่าเท่านั้น

-max64
-max32
เปิดใช้งาน AIX ABI 64 บิตและการเรียกแบบแผน: พอยน์เตอร์ 64 บิต ชนิด "ยาว" 64 บิต และ
โครงสร้างพื้นฐานที่จำเป็นในการสนับสนุนพวกเขา ระบุ -max64 หมายถึง -mpowerpc64 และ
-mpowerpcในขณะที่ -max32 ปิดใช้งาน ABI 64 บิตและมีความหมาย -mno-powerpc64. สกสค
ค่าเริ่มต้นเป็น -max32.

-mxl-เข้ากันได้
-mno-xl-เข้ากันได้
สร้างโค้ดที่สอดคล้องกับความหมายของคอมไพเลอร์ IBM XL มากขึ้นเมื่อใช้ AIX-
ABI ที่เข้ากันได้ ส่งผ่านอาร์กิวเมนต์ทศนิยมไปยังฟังก์ชันที่สร้างต้นแบบนอกเหนือจาก
ลงทะเบียนบันทึกพื้นที่ (RSA) บนสแต็กนอกเหนือจากอาร์กิวเมนต์ FPR อย่าถือสา
ค่า double ที่สำคัญที่สุดในค่า long double 128 บิตจะถูกปัดเศษอย่างเหมาะสมเมื่อ
เปรียบเทียบค่าและแปลงเป็นสองเท่า ใช้ชื่อสัญลักษณ์ XL สำหรับดับเบิลยาว
สนับสนุนกิจวัตร

แบบแผนการเรียก AIX ได้รับการขยายแต่ไม่ได้จัดทำเป็นเอกสารในขั้นต้นเพื่อจัดการกับ
ปิดบังกรณี K&R C ของการเรียกใช้ฟังก์ชันที่ใช้ที่อยู่ของอาร์กิวเมนต์ด้วย
อาร์กิวเมนต์น้อยกว่าที่ประกาศ คอมไพเลอร์ IBM XL เข้าถึงอาร์กิวเมนต์ทศนิยมที่
ไม่พอดีกับ RSA จากสแต็กเมื่อคอมไพล์รูทีนย่อยโดยไม่มี
การเพิ่มประสิทธิภาพ เพราะเก็บอาร์กิวเมนต์ทศนิยมบนสแต็ก is . เสมอ
ไม่มีประสิทธิภาพและแทบไม่มีความจำเป็น ตัวเลือกนี้ไม่ได้เปิดใช้งานโดยค่าเริ่มต้นและมีเพียง is
จำเป็นเมื่อเรียกรูทีนย่อยที่คอมไพล์โดยคอมไพเลอร์ IBM XL โดยไม่มีการปรับให้เหมาะสม

-mpe
ระบบขอใช้บริการ ไอบีเอ็ม RS / 6000 SP Parallel สิ่งแวดล้อม (วิชาพลศึกษา). ลิงก์แอปพลิเคชันที่เขียนขึ้นเพื่อใช้
ข้อความที่ส่งผ่านด้วยรหัสเริ่มต้นพิเศษเพื่อให้แอปพลิเคชันทำงาน NS
ระบบจะต้องติดตั้ง PE ในตำแหน่งมาตรฐาน (/usr/lpp/ppe.poe/) หรือ
รายละเอียด ไฟล์จะต้องถูกแทนที่ด้วย -ข้อมูลจำเพาะ= ตัวเลือกเพื่อระบุความเหมาะสม
ตำแหน่งไดเร็กทอรี Parallel Environment ไม่รองรับเธรด ดังนั้น -mpe
ตัวเลือกและ -pthread ตัวเลือกไม่เข้ากัน

-malign-ธรรมชาติ
-malign-อำนาจ
บน AIX, ดาร์วิน 32 บิต และ PowerPC GNU/Linux 64 บิต ตัวเลือก -malign-ธรรมชาติ
แทนที่การจัดตำแหน่งที่กำหนดโดย ABI ของประเภทที่ใหญ่กว่า เช่น ทศนิยมสองเท่า
บนขอบเขตตามขนาดตามธรรมชาติ ทางเลือก -malign-อำนาจ สั่งให้ GCC ไปที่
ปฏิบัติตามกฎการจัดตำแหน่งที่กำหนดโดย ABI GCC ตั้งค่าเริ่มต้นเป็นการจัดตำแหน่งมาตรฐาน
กำหนดไว้ใน ABI

ในดาร์วิน 64 บิต การจัดตำแหน่งที่เป็นธรรมชาติเป็นค่าเริ่มต้น และ -malign-อำนาจ ไม่ใช่
ได้รับการสนับสนุน.

-msoft-ลอย
-mhard-ลอย
สร้างรหัสที่ไม่ใช้ (ใช้) ชุดทะเบียนทศนิยม ซอฟต์แวร์
มีการจำลองจุดลอยตัวหากคุณใช้ -msoft-ลอย ตัวเลือกและผ่าน
ตัวเลือก GCC เมื่อเชื่อมโยง

-msingle-ลอย
-mdouble-ลอย
สร้างโค้ดสำหรับการดำเนินการจุดทศนิยมแบบ single- หรือ double-precision
-mdouble-ลอย หมายถึง -msingle-ลอย.

-msimple-fpu
อย่าสร้างคำสั่ง sqrt และ div สำหรับหน่วยจุดลอยตัวของฮาร์ดแวร์

-mfpu
ระบุประเภทของหน่วยทศนิยม ค่าที่ถูกต้องคือ sp_lite (เทียบเท่ากับ
-msingle-ลอย -msimple-fpu) dp_lite (เทียบเท่ากับ -mdouble-float -msimple-fpu)
sp_เต็ม (เทียบเท่ากับ -msingle-float) และ dp_เต็ม (เทียบเท่ากับ -mdouble-float)

-mxilinx-fpu
ดำเนินการปรับให้เหมาะสมสำหรับหน่วยทศนิยมบน Xilinx PPC 405/440

-หลายหลาก
-mno-หลาย
สร้างรหัสที่ใช้ (ไม่ใช้) คำสั่งโหลดหลายคำและ
เก็บคำแนะนำหลายคำ คำแนะนำเหล่านี้สร้างขึ้นโดยค่าเริ่มต้นเมื่อ
ระบบ POWER และไม่ได้สร้างขึ้นบนระบบ PowerPC ไม่ได้ใช้ -หลายหลาก เล็กน้อย-
ระบบ endian PowerPC เนื่องจากคำสั่งเหล่านั้นไม่ทำงานเมื่อโปรเซสเซอร์อยู่ใน
โหมดลิตเติ้ลเอนด์ ข้อยกเว้นคือ PPC740 และ PPC750 ซึ่งอนุญาตสิ่งเหล่านี้
คำแนะนำในโหมด little-endian

-mstring
-mno-สตริง
สร้างโค้ดที่ใช้ (ไม่ใช้) คำสั่งโหลดสตริงและ store
คำแนะนำคำสตริงเพื่อบันทึกการลงทะเบียนหลายรายการและทำการย้ายบล็อกขนาดเล็ก เหล่านี้
คำแนะนำถูกสร้างขึ้นโดยค่าเริ่มต้นบนระบบ POWER และไม่สร้างบน PowerPC
ระบบต่างๆ ไม่ได้ใช้ -mstring บนระบบ PowerPC ของ little-endian ตั้งแต่นั้นมา
คำแนะนำไม่ทำงานเมื่อโปรเซสเซอร์อยู่ในโหมด little-endian ข้อยกเว้น
คือ PPC740 และ PPC750 ซึ่งอนุญาตคำแนะนำเหล่านี้ในโหมด little-endian

- อัพเดท
-mno-อัปเดต
สร้างรหัสที่ใช้ (ไม่ใช้) โหลดหรือจัดเก็บคำแนะนำที่อัปเดต
การลงทะเบียนฐานไปยังที่อยู่ของตำแหน่งหน่วยความจำที่คำนวณได้ คำแนะนำเหล่านี้
ถูกสร้างขึ้นโดยค่าเริ่มต้น ถ้าคุณใช้ -mno-อัปเดต, มีหน้าต่างบานเล็กระหว่าง
เวลาที่ตัวชี้สแต็กได้รับการอัปเดตและที่อยู่ของเฟรมก่อนหน้าคือ
ที่เก็บไว้ซึ่งหมายถึงรหัสที่เดินสแต็กเฟรมข้ามการขัดจังหวะหรือสัญญาณอาจ
ได้รับข้อมูลที่เสียหาย

-mavoid-indexed-ที่อยู่
-mno-หลีกเลี่ยงที่อยู่จัดทำดัชนี
สร้างรหัสที่พยายามหลีกเลี่ยง (ไม่หลีกเลี่ยง) การใช้โหลดหรือการจัดเก็บที่จัดทำดัชนี
คำแนะนำ. คำแนะนำเหล่านี้อาจทำให้ประสิทธิภาพของโปรเซสเซอร์ Power6 ลดลง
ในบางสถานการณ์เช่นเมื่อก้าวผ่านอาร์เรย์ขนาดใหญ่ที่ข้าม 16M
ขอบเขต ตัวเลือกนี้เปิดใช้งานโดยค่าเริ่มต้นเมื่อกำหนดเป้าหมาย Power6 และปิดใช้งาน
มิฉะนั้น.

-mfused-mad
-mno-ฟิวส์ madd
สร้างรหัสที่ใช้ (ไม่ใช้) ทศนิยมคูณและสะสม
คำแนะนำ. คำแนะนำเหล่านี้ถูกสร้างขึ้นโดยค่าเริ่มต้นหากจุดลอยตัวของฮาร์ดแวร์
ถูกนำมาใช้. ขึ้นอยู่กับเครื่อง -mfused-mad ตอนนี้ตัวเลือกถูกแมปกับเครื่องแล้ว-
อิสระ -ffp-สัญญา = รวดเร็ว ตัวเลือกและ -mno-ฟิวส์ madd ถูกแมปไปยัง
-ffp-สัญญา = ปิด.

-มม
-mno-mulhw
สร้างรหัสที่ใช้ (ไม่ใช้) คูณครึ่งคำและคูณสะสม
คำแนะนำเกี่ยวกับโปรเซสเซอร์ IBM 405, 440, 464 และ 476 คำแนะนำเหล่านี้คือ
สร้างขึ้นโดยค่าเริ่มต้นเมื่อกำหนดเป้าหมายโปรเซสเซอร์เหล่านั้น

-mdlmzb
-mno-dlmzb
สร้างรหัสที่ใช้ (ไม่ใช้) string-search dlmzb คำแนะนำเกี่ยวกับ IBM
405, 440, 464 และ 476 โปรเซสเซอร์ คำสั่งนี้สร้างขึ้นโดยค่าเริ่มต้นเมื่อ
กำหนดเป้าหมายโปรเซสเซอร์เหล่านั้น

-mno-บิต-จัด
-mbit-จัดตำแหน่ง
บนระบบ V.4 และระบบ PowerPC แบบฝังไม่ได้ (ทำ) โครงสร้างบังคับและสหภาพแรงงาน
ที่มีบิตฟิลด์ที่จะจัดชิดกับประเภทฐานของบิตฟิลด์

ตัวอย่างเช่น โดยค่าเริ่มต้น โครงสร้างที่ไม่มีอะไรนอกจาก 8 บิตฟิลด์ "ไม่ได้ลงนาม" ของ
ความยาว 1 จัดชิดขอบ 4 ไบต์และมีขนาด 4 ไบต์ โดยใช้
-mno-บิต-จัดโครงสร้างอยู่ในแนวเดียวกับขอบเขต 1 ไบต์และมีขนาด 1 ไบต์

-mno-เข้มงวด-จัด
-mstrict-จัดตำแหน่ง
บนระบบ V.4 และระบบ PowerPC ที่ฝังตัวไม่ (ทำ) ถือว่าหน่วยความจำที่ไม่ได้จัดตำแหน่ง
ระบบจะจัดการการอ้างอิง

-mrelocated
-mno-ย้ายได้
สร้างรหัสที่อนุญาตให้ (ไม่อนุญาต) ไฟล์เรียกทำงานแบบสแตติกที่จะย้ายไปที่a
ที่อยู่อื่น ณ รันไทม์ ตัวโหลดระบบ PowerPC แบบฝังอย่างง่ายควร
ย้ายเนื้อหาทั้งหมดของตำแหน่ง ".got2" และ 4 ไบต์ที่แสดงอยู่ใน ".fixup"
ส่วนตารางที่อยู่แบบ 32 บิตที่สร้างโดยตัวเลือกนี้ เพื่อให้สิ่งนี้ใช้งานได้ทั้งหมด
วัตถุที่เชื่อมโยงกันจะต้องรวบรวมด้วย -mrelocated or -mrelocatable-lib.
-mrelocated รหัสจัดตำแหน่งสแต็กเป็นขอบเขต 8 ไบต์

-mrelocatable-lib
-mno-relolocable-lib
Like -mrelocated, -mrelocatable-lib สร้างส่วน ".fixup" เพื่ออนุญาต static
ไฟล์ปฏิบัติการที่จะย้ายในเวลาทำงาน แต่ -mrelocatable-lib ไม่ได้ใช้
การจัดตำแหน่งกองซ้อนที่เล็กกว่าของ -mrelocated. วัตถุที่คอมไพล์ด้วย -mrelocatable-lib อาจ
เชื่อมโยงกับอ็อบเจ็กต์ที่คอมไพล์ด้วยการรวมกันของ -mrelocated ตัวเลือก

-mno-toc
-mtoc
บนระบบ V.4 และระบบ PowerPC แบบฝังไม่ (ทำ) ถือว่ารีจิสเตอร์ 2 มี
ตัวชี้ไปยังพื้นที่ส่วนกลางที่ชี้ไปยังที่อยู่ในโปรแกรม

- เล็กน้อย
-little-endian
บนระบบ V.4 และระบบ PowerPC แบบฝังตัวจะคอมไพล์โค้ดสำหรับโปรเซสเซอร์ใน
โหมดเอนเดียน NS -little-endian ตัวเลือกเหมือนกับ - เล็กน้อย.

-mbig
-mbig-endian
บนระบบ V.4 และระบบ PowerPC แบบฝังตัวจะคอมไพล์โค้ดสำหรับโปรเซสเซอร์ในขนาดใหญ่-
โหมดเอนเดียน NS -mbig-endian ตัวเลือกเหมือนกับ -mbig.

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

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

-mprioritize-จำกัด-insns=ลำดับความสำคัญ
ตัวเลือกนี้ควบคุมลำดับความสำคัญที่กำหนดให้กับการจำกัดช่องการจัดส่ง
คำแนะนำในระหว่างการกำหนดเวลาที่สอง อาร์กิวเมนต์ ลำดับความสำคัญ รับค่า
0/1/2 มอบหมาย ไม่มี / สูงสุด / สูงสุดอันดับสอง ลำดับความสำคัญในการจำกัดช่องการจัดส่ง
คำแนะนำ

-msched-ค่าใช้จ่าย-dep=การพึ่งพาอาศัยกัน_type
ตัวเลือกนี้ควบคุมว่าการพึ่งพาอาศัยใดที่เป้าหมายถือว่ามีค่าใช้จ่ายสูงในช่วง
การจัดตารางเวลาการเรียนการสอน อาร์กิวเมนต์ การพึ่งพาอาศัยกัน_type รับข้อใดข้อหนึ่งต่อไปนี้
ค่า: ไม่: การพึ่งพาอาศัยกันนั้นไม่มีต้นทุนสูง ทั้งหมด: การพึ่งพาอาศัยกันทั้งหมดมีราคาแพง
true_store_to_load: การพึ่งพาอาศัยกันอย่างแท้จริงจากร้านค้าสู่การโหลดนั้นมีค่าใช้จ่ายสูง store_to_load: ใดก็ได้
การพึ่งพาจากร้านค้าสู่การโหลดนั้นมีค่าใช้จ่ายสูง จำนวน: การพึ่งพาใด ๆ ที่แฝง >=
จำนวน มีราคาแพง

-minsert-sched-nops=โครงการ
ตัวเลือกนี้ควบคุมรูปแบบการแทรก nop ที่จะใช้ในช่วงวินาที
กำหนดการผ่าน อาร์กิวเมนต์ โครงการ รับค่าใดค่าหนึ่งต่อไปนี้: ไม่: อย่า
ใส่ nos เบาะ: Pad โดย nos กลุ่มจัดส่งใด ๆ ที่มีช่องปัญหาว่าง
ตามการจัดกลุ่มของตัวจัดกำหนดการ จัดกลุ่มใหม่_แน่นอน: ใส่ nos เพื่อบังคับให้เสียค่าใช้จ่าย
ขึ้นอยู่กับ inns แยกกลุ่ม ใส่น็อตให้มากเท่าที่จำเป็นเพื่อบังคับ
insn ไปยังกลุ่มใหม่ ตามการจัดกลุ่มตัวประมวลผลโดยประมาณ จำนวน: แทรก
nops เพื่อบังคับให้ insns ขึ้นอยู่กับค่าใช้จ่ายในกลุ่มแยก แทรก จำนวน nos to
บังคับ insn ให้กับกลุ่มใหม่

-mcall-sysv
บนระบบ V.4 และระบบ PowerPC แบบฝังตัวจะคอมไพล์โค้ดโดยใช้หลักการเรียกที่
ยึดตามร่างเดือนมีนาคม 1995 ของ System V Application Binary Interface, PowerPC
โปรเซสเซอร์เสริม นี่เป็นค่าเริ่มต้นเว้นแต่คุณจะกำหนดค่า GCC โดยใช้
powerpc-*-eabiax.

-mcall-sysv-eabi
-mcall-เอบิ
ระบุทั้งคู่ -mcall-sysv และ -เมบิ ตัวเลือก

-mcall-sysv-noeabi
ระบุทั้งคู่ -mcall-sysv และ -mno-eabi ตัวเลือก

-mcall-aixdesc
บนระบบ V.4 และระบบ PowerPC ที่ฝังไว้ จะคอมไพล์โค้ดสำหรับระบบปฏิบัติการ AIX

-mcall-ลินุกซ์
บนระบบ V.4 และระบบ PowerPC ที่ฝังไว้จะคอมไพล์โค้ดสำหรับ GNU . ที่ใช้ Linux
ระบบ

-mcall-freebsd
บนระบบ V.4 และระบบ PowerPC แบบฝังตัวจะคอมไพล์โค้ดสำหรับปฏิบัติการ FreeBSD
ระบบ

-mcall-netbsd
บนระบบ V.4 และระบบ PowerPC ที่ฝังไว้จะคอมไพล์โค้ดสำหรับปฏิบัติการ NetBSD
ระบบ

-mcall-openbsd
บนระบบ V.4 และระบบ PowerPC ที่ฝังไว้จะคอมไพล์โค้ดสำหรับการทำงาน OpenBSD
ระบบ

-maix-struct-ส่งคืน
ส่งคืนโครงสร้างทั้งหมดในหน่วยความจำ (ตามที่ระบุโดย AIX ABI)

-msvr4-struct-ส่งคืน
ส่งคืนโครงสร้างที่มีขนาดเล็กกว่า 8 ไบต์ในรีจิสเตอร์ (ตามที่ระบุโดย SVR4 ABI)

-มาบิ=ประเภท abi
ขยาย ABI ปัจจุบันด้วยส่วนขยายเฉพาะ หรือลบส่วนขยายดังกล่าว ถูกต้อง
ค่าคือ อัลติเทค, ไม่มี altivec, เอสพีอี, ไม่มีความเร็ว, ibmlongdouble, อีอีลองดับเบิ้ล.

-มาบิ=สเป
ขยาย ABI ปัจจุบันด้วยส่วนขยาย SPE ABI สิ่งนี้ไม่เปลี่ยน ABI เริ่มต้น
แต่จะเพิ่มส่วนขยาย SPE ABI ให้กับ ABI ปัจจุบันแทน

-mabi=ไม่มีความเร็ว
ปิดใช้งานส่วนขยาย Booke SPE ABI สำหรับ ABI ปัจจุบัน

-mabi=ibmlongdouble
เปลี่ยน ABI ปัจจุบันเพื่อใช้ IBM Extended-precision long double นี่คือ PowerPC
ตัวเลือก SYSV ABI แบบ 32 บิต

-mabi=ieeelongdouble
เปลี่ยน ABI ปัจจุบันเพื่อใช้ IEEE Extended-precision long double นี่คือ PowerPC
ตัวเลือก Linux ABI แบบ 32 บิต

-ต้นแบบ
-mno-ต้นแบบ
บนระบบ V.4 และระบบ PowerPC แบบฝังจะถือว่าการเรียกทั้งหมดไปยังอาร์กิวเมนต์ตัวแปร
ฟังก์ชั่นได้รับการสร้างต้นแบบอย่างเหมาะสม มิฉะนั้นคอมไพเลอร์จะต้องแทรกคำสั่ง
ก่อนทุกการเรียกที่ไม่ใช่ต้นแบบเพื่อตั้งค่าหรือล้างบิต 6 ของเงื่อนไขรหัส register
(CR) เพื่อระบุว่าค่าทศนิยมถูกส่งผ่านในทศนิยมหรือไม่
รีจิสเตอร์ในกรณีที่ฟังก์ชันรับอาร์กิวเมนต์ตัวแปร กับ -ต้นแบบ, โทรเท่านั้น
ฟังก์ชันอาร์กิวเมนต์ตัวแปรต้นแบบจะตั้งค่าหรือล้างบิต

-msim
บนระบบ PowerPC แบบฝัง สมมติว่าโมดูลเริ่มต้นถูกเรียก ซิม-crt0.o และ
ว่าไลบรารี C มาตรฐานคือ libsim.a และ libc.เอ. นี่คือค่าเริ่มต้นสำหรับ
powerpc-*-eabisim การกำหนดค่า

-mmvme
บนระบบ PowerPC แบบฝัง สมมติว่าโมดูลเริ่มต้นถูกเรียก crt0.o และ
ไลบรารี C มาตรฐานคือ libmvme.a และ libc.เอ.

-บ้า
บนระบบ PowerPC แบบฝัง สมมติว่าโมดูลเริ่มต้นถูกเรียก crt0.o และ
ไลบรารี C มาตรฐานคือ ลิแบดส์.เอ และ libc.เอ.

-มีดพับ
บนระบบ PowerPC แบบฝัง สมมติว่าโมดูลเริ่มต้นถูกเรียก crt0.o และ
ไลบรารี C มาตรฐานคือ ลิบีก.เอ และ libc.เอ.

-mvxworks
บนระบบ V.4 และระบบ PowerPC แบบฝัง ระบุว่าคุณกำลังรวบรวมสำหรับ
ระบบ VxWorks

-สมาชิก
บนระบบ PowerPC แบบฝัง ให้ตั้งค่า PPC_EMB บิตในส่วนหัวของแฟล็ก ELF เพื่อระบุ
ที่ เอบิ ใช้การย้ายถิ่นฐานแบบขยาย

-เมบิ
-mno-eabi
บนระบบ V.4 และระบบ PowerPC แบบฝัง (ไม่) ยึดตาม Embedded
Applications Binary Interface (eabi) ซึ่งเป็นชุดของการดัดแปลงระบบ V.4
ข้อกำหนด กำลังเลือก -เมบิ หมายความว่าสแต็กอยู่ในแนวเดียวกับ 8-byte
ขอบเขต ฟังก์ชัน "__eabi" ถูกเรียกจาก "main" เพื่อตั้งค่าสภาพแวดล้อม eabi
และ -msdata ตัวเลือกสามารถใช้ทั้ง "r2" และ "r13" เพื่อชี้ไปที่ข้อมูลขนาดเล็กสองข้อมูลแยกกัน
พื้นที่ กำลังเลือก -mno-eabi หมายความว่าสแต็กอยู่ในแนวเดียวกับขอบเขต 16 ไบต์ do
ไม่เรียกฟังก์ชันการเริ่มต้นจาก "main" และ -msdata ตัวเลือกจะใช้เท่านั้น
"r13" เพื่อชี้ไปที่พื้นที่ข้อมูลขนาดเล็กเพียงแห่งเดียว NS -เมบิ ตัวเลือกเปิดอยู่โดยค่าเริ่มต้นหากคุณ
กำหนดค่า GCC โดยใช้หนึ่งใน พาวเวอร์พีซี*-*-eabi* ตัวเลือก

-msdata=eabi
บนระบบ V.4 และระบบ PowerPC แบบฝัง ให้ใส่ "const" ที่เริ่มต้นขนาดเล็กส่วนกลางและ
ข้อมูลคงที่ใน .sdata2 ส่วนซึ่งชี้ไปที่การลงทะเบียน "r2" ใส่เล็ก
เริ่มต้นข้อมูลโกลบอลและสแตติกที่ไม่ใช่ "const" ใน .sdata ส่วนที่แหลม
โดยการลงทะเบียน "r13" ใส่ข้อมูลส่วนกลางและสแตติกที่ไม่ได้กำหนดค่าเริ่มต้นขนาดเล็กลงใน .sbs
ส่วนที่อยู่ติดกับ .sdata ส่วน. NS -msdata=eabi ตัวเลือกที่
เข้ากันไม่ได้กับ -mrelocated ตัวเลือก -msdata=eabi ตัวเลือกยังตั้งค่า
-สมาชิก ตัวเลือก

-msdata = sysv
บนระบบ V.4 และระบบ PowerPC แบบฝัง ให้ใส่ข้อมูลแบบคงที่และระดับโลกขนาดเล็กลงใน
.sdata ส่วนซึ่งชี้ไปที่การลงทะเบียน "r13" ใส่ global ที่ไม่ได้กำหนดค่าเริ่มต้นขนาดเล็ก
และข้อมูลคงที่ใน .sbs ส่วนที่อยู่ติดกับ .sdata ส่วน. NS
-msdata = sysv ตัวเลือกไม่เข้ากันกับ -mrelocated ตัวเลือก

-msdata=ค่าเริ่มต้น
-msdata
บนระบบ V.4 และระบบ PowerPC แบบฝัง ถ้า -เมบิ ใช้คอมไพล์โค้ดเหมือนกัน
as -msdata=eabiมิฉะนั้นคอมไพล์โค้ดเหมือนกับ -msdata = sysv.

-msdata=ข้อมูล
บนระบบ V.4 และระบบ PowerPC แบบฝัง ให้ใส่ข้อมูลส่วนกลางขนาดเล็กใน .sdata
ส่วน. ใส่ข้อมูลส่วนกลางขนาดเล็กที่ไม่ได้กำหนดค่าเริ่มต้นใน .sbs ส่วน. ไม่ได้ใช้
ลงทะเบียน "r13" เพื่อจัดการกับข้อมูลขนาดเล็กอย่างไรก็ตาม นี่เป็นพฤติกรรมเริ่มต้นเว้นแต่
อื่น ๆ -msdata มีการใช้ตัวเลือก

-msdata=ไม่มี
-mno-sdata
บนระบบ PowerPC แบบฝัง ให้ใส่ข้อมูลส่วนกลางและแบบคงที่ที่เริ่มต้นทั้งหมดไว้ใน .ข้อมูล
และข้อมูลที่ไม่ได้กำหนดค่าเริ่มต้นทั้งหมดใน .bss มาตรา.

-mblock-ย้ายอินไลน์จำกัด=NUM
อินไลน์การย้ายบล็อกทั้งหมด (เช่นการเรียก "memcpy" หรือสำเนาโครงสร้าง) น้อยกว่าหรือ
เท่ากับ NUM ไบต์ ค่าต่ำสุดสำหรับ NUM คือ 32 ไบต์บนเป้าหมายแบบ 32 บิตและ 64
ไบต์บนเป้าหมาย 64 บิต ค่าเริ่มต้นคือเป้าหมายเฉพาะ

-G NUM
บนระบบ PowerPC แบบฝัง ให้วางรายการโกลบอลและสแตติกน้อยกว่าหรือเท่ากับ NUM
ไบต์ลงในข้อมูลขนาดเล็กหรือส่วน bss แทนข้อมูลปกติหรือส่วน bss
โดยค่าเริ่มต้น NUM คือ 8 -G NUM สวิตช์ยังถูกส่งไปยังตัวเชื่อมโยง โมดูลทั้งหมด
ก็ควรเรียบเรียงเหมือนกัน -G NUM มูลค่า

-mregnames
-mno-regnames
บนระบบ V.4 และระบบ PowerPC แบบฝัง ทำ (ไม่) ปล่อยชื่อรีจิสเตอร์ใน
เอาต์พุตภาษาแอสเซมบลีโดยใช้รูปแบบสัญลักษณ์

-mlongcall
-mno-ลองโทร
โดยค่าเริ่มต้น ถือว่าการโทรทั้งหมดอยู่ห่างไกลเพื่อให้การโทรมีราคาแพงกว่าอีกต่อไป
จำเป็นต้องมีลำดับ สิ่งนี้จำเป็นสำหรับการโทรที่เกิน 32 เมกะไบต์
(33,554,432 ไบต์) จากตำแหน่งปัจจุบัน จะมีการสร้างการโทรสั้น ๆ หาก
คอมไพเลอร์รู้ว่าการโทรไม่สามารถอยู่ไกลได้ขนาดนั้น การตั้งค่านี้สามารถแทนที่ได้โดย
แอตทริบิวต์ฟังก์ชัน "shortcall" หรือโดย "#pragma ลองโทร(พ.ศ. 0) ".

ตัวเชื่อมโยงบางตัวสามารถตรวจจับการโทรออกนอกช่วงและสร้างรหัสกาวได้
แมลงวัน ในระบบเหล่านี้ การเรียกยาวไม่จำเป็น และสร้างโค้ดที่ช้ากว่า เนื่องจาก
ของการเขียนนี้ ตัวเชื่อมโยง AIX สามารถทำได้ เช่นเดียวกับตัวเชื่อมโยง GNU สำหรับ PowerPC/64 มัน
มีการวางแผนที่จะเพิ่มคุณลักษณะนี้ให้กับตัวเชื่อมโยง GNU สำหรับระบบ PowerPC แบบ 32 บิตด้วย

บนระบบดาร์วิน/PPC "#pragma longcall" จะสร้าง "jbsr callee, L42" บวกกับ
"เกาะกิ่ง" (รหัสกาว) ที่อยู่เป้าหมายสองแห่งเป็นตัวแทนของผู้รับสายและ
"เกาะสาขา". ตัวเชื่อมโยงดาร์วิน/PPC จะชอบที่อยู่แรกและสร้าง
"bl callee" หากคำสั่ง PPC "bl" จะไปถึงผู้รับโดยตรง มิฉะนั้น
linker จะสร้าง "bl L42" เพื่อเรียก "branch island" "เกาะสาขา" คือ
ต่อท้ายเนื้อหาของฟังก์ชันการโทร มันคำนวณที่อยู่แบบเต็ม 32 บิตของ
ผู้รับสายและกระโดดไปที่มัน

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

ในอนาคต เราอาจทำให้ GCC ละเว้นข้อกำหนด longcall ทั้งหมดเมื่อ linker
เป็นที่รู้จักกันในการสร้างกาว

-mtls-เครื่องหมาย
-mno-tls-เครื่องหมาย
ทำเครื่องหมาย (ไม่ทำเครื่องหมาย) เรียก "__tls_get_addr" ด้วยการย้ายตำแหน่งที่ระบุฟังก์ชัน
การโต้แย้ง. การย้ายตำแหน่งช่วยให้ ld สามารถเชื่อมโยงการเรียกใช้ฟังก์ชันกับอาร์กิวเมนต์ได้อย่างน่าเชื่อถือ
คำแนะนำในการตั้งค่าสำหรับการเพิ่มประสิทธิภาพ TLS ซึ่งจะทำให้ gcc สามารถกำหนดเวลาได้ดีขึ้น
ลำดับ

-pthread
เพิ่มการรองรับมัลติเธรดด้วยปุ่ม กระทู้ ห้องสมุด. ตัวเลือกนี้ตั้งค่าสถานะสำหรับ
ทั้งตัวประมวลผลล่วงหน้าและตัวเชื่อมโยง

-mrecip
-mno-recip
ตัวเลือกนี้จะทำให้ GCC ใช้ค่าประมาณซึ่งกันและกันและรากที่สองของส่วนกลับ
คำแนะนำในการประมาณการด้วยขั้นตอนของนิวตัน-ราฟสันเพิ่มเติมเพื่อเพิ่มความแม่นยำ
แทนที่จะทำการหารหรือรากที่สองแล้วหารอาร์กิวเมนต์จุดทศนิยม คุณ
ควรใช้ -ffast-คณิตศาสตร์ ตัวเลือกเมื่อใช้ -mrecip (หรืออย่างน้อย
-funsafe-คณิตศาสตร์-optimizations, -finite-คณิตศาสตร์เท่านั้น, -freciprocal-คณิตศาสตร์ และ
-fno-trapping-คณิตศาสตร์). โปรดทราบว่าในขณะที่ปริมาณงานของลำดับโดยทั่วไปคือ
สูงกว่าปริมาณงานของคำสั่งที่ไม่ใช่ส่วนกลับ ความแม่นยำของ
ลำดับสามารถลดลงได้ถึง 2 ulp (เช่นผกผันของ 1.0 เท่ากับ 0.99999994)
สำหรับรากที่สองซึ่งกันและกัน

-mrecip=เลือก
ตัวเลือกนี้ช่วยให้ควบคุมได้ว่าจะใช้คำแนะนำในการประมาณการส่วนต่างใด เลือก
เป็นรายการตัวเลือกที่คั่นด้วยเครื่องหมายจุลภาค ซึ่งอาจนำหน้าด้วย "!" เพื่อพลิก
ตัวเลือก: "ทั้งหมด": เปิดใช้งานคำแนะนำการประมาณทั้งหมด "ค่าเริ่มต้น": เปิดใช้งานค่าเริ่มต้น
คำแนะนำเทียบเท่ากับ -mrecip, "ไม่มี": ปิดใช้งานคำแนะนำการประมาณการทั้งหมด
เทียบเท่ากับ -mno-recip; "div": เปิดใช้งานคำแนะนำการประมาณซึ่งกันและกันสำหรับ
ความแม่นยำทั้งแบบเดี่ยวและแบบคู่ "divf": เปิดใช้งานส่วนกลับที่แม่นยำเดียว
คำแนะนำโดยประมาณ; "divd": เปิดใช้งานส่วนกลับที่มีความแม่นยำสองเท่า
คำแนะนำโดยประมาณ; "rsqrt": เปิดใช้งานการประมาณค่ารากที่สองซึ่งกันและกัน
คำแนะนำสำหรับความแม่นยำทั้งแบบเดี่ยวและแบบคู่ "rsqrtf": เปิดใช้งาน single-
คำแนะนำการประมาณค่ารากที่สองซึ่งกันและกันที่แม่นยำ "rsqrtd": เปิดใช้งาน
คำแนะนำการประมาณค่ารากที่สองซึ่งกันและกันแบบแม่นยำสองเท่า

ตัวอย่างเช่น -mrecip=ทั้งหมด,!rsqrtd จะเปิดใช้งานการประมาณการซึ่งกันและกันทั้งหมด
คำแนะนำ ยกเว้นคำแนะนำ "FRSQRTE", "XSRSQRTEDP" และ "XVRSQRTEDP"
ซึ่งจัดการการคำนวณรากที่สองที่มีความแม่นยำสองส่วนซึ่งกันและกัน

-mrecip-ความแม่นยำ
-mno-สูตรความแม่นยำ
สมมติ (อย่าสมมติ) ว่าคำแนะนำการประมาณการซึ่งกันและกันให้สูงกว่า-
ค่าประมาณที่แม่นยำกว่าที่ได้รับคำสั่งจาก PowerPC ABI กำลังเลือก -mcpu=พลังงาน6 or
-mcpu=พลังงาน7 เลือกโดยอัตโนมัติ -mrecip-ความแม่นยำ. จตุรัสความแม่นยำสองเท่า
คำแนะนำในการประมาณการรูทไม่ได้ถูกสร้างขึ้นโดยค่าเริ่มต้นบนเครื่องที่มีความแม่นยำต่ำ
เนื่องจากไม่ได้ให้ค่าประมาณที่บรรจบกันหลังจากสามขั้นตอน

-mveclabi=ชนิด
ระบุประเภท ABI ที่จะใช้สำหรับ vectorizing intrinsics โดยใช้ไลบรารีภายนอก
ปัจจุบันรองรับประเภทเดียวคือ "mass" ซึ่งกำหนดให้ใช้ IBM's
ไลบรารีระบบย่อยการเร่งความเร็วทางคณิตศาสตร์ (MASS) สำหรับการสร้างเวกเตอร์ภายในโดยใช้
ห้องสมุดภายนอก GCC จะส่งการเรียกไปยัง "acosd2", "acosf4", "acohd2",
"acoshf4", "asind2", "asinf4", "asinhd2", "asinhf4", "atan2d2", "atan2f4", "atand2",
"atanf4", "atanhd2", "atanhf4", "cbrtd2", "cbrtf4", "cosd2", "cosf4", "coshd2",
"coshf4", "erfcd2", "erfcf4", "erfd2", "erff4", "exp2d2", "exp2f4", "expd2", "expf4",
"expm1d2", "expm1f4", "hypotd2", "hypotf4", "lgammad2", "lgammaf4", "log10d2",
"log10f4", "log1pd2", "log1pf4", "log2d2", "log2f4", "logd2", "logf4", "powd2",
"powf4", "sind2", "sinf4", "sinhd2", "sinhf4", "sqrtd2", "sqrtf4", "tand2", "tanf4",
"tanhd2" และ "tanhf4" เมื่อสร้างโค้ดสำหรับ power7 ทั้งคู่ -ftree- vectorize และ
-funsafe-คณิตศาสตร์-optimizations ต้องเปิดใช้งาน ห้องสมุด MASS จะต้อง
ระบุไว้ในเวลาลิงค์

-มฟริซ
-mno-friz
สร้าง (ไม่สร้าง) คำสั่ง " friz" เมื่อ -funsafe-คณิตศาสตร์-optimizations
ตัวเลือกใช้เพื่อเพิ่มประสิทธิภาพการปัดเศษของค่าทศนิยมให้เป็นจำนวนเต็ม 64 บิตและ
กลับสู่จุดลอยตัว คำสั่ง "friz" จะไม่คืนค่าเดิมหาก
จำนวนจุดทศนิยมมากเกินไปที่จะใส่เป็นจำนวนเต็ม

-mpointers-to-ซ้อนฟังก์ชัน
-mno-pointers-to-ซ้อนกัน-ฟังก์ชั่น
สร้าง (ไม่สร้าง) รหัสเพื่อโหลดการลงทะเบียนลูกโซ่แบบคงที่ (r11) เมื่อไหร่
เรียกผ่านพอยน์เตอร์บนระบบ AIX และ 64-บิต Linux โดยที่ฟังก์ชันตัวชี้
ชี้ไปที่ตัวอธิบาย 3 คำที่ให้ที่อยู่ของฟังก์ชัน ค่า TOC ที่จะโหลดใน
ทะเบียน r2และค่าลูกโซ่คงที่ที่จะโหลดใน register r11.
-mpointers-to-ซ้อนฟังก์ชัน เป็นค่าเริ่มต้น คุณจะไม่สามารถโทรผ่าน
ตัวชี้ไปยังฟังก์ชันที่ซ้อนกันหรือตัวชี้ไปยังฟังก์ชันที่คอมไพล์เป็นภาษาอื่นที่
ใช้โซ่แบบคงที่หากคุณใช้ -mno-pointers-to-ซ้อนกัน-ฟังก์ชั่น.

-msave-toc-ทางอ้อม
-mno-save-toc-ทางอ้อม
สร้าง (ไม่สร้าง) รหัสเพื่อบันทึกค่า TOC ในตำแหน่งกองซ้อนที่สงวนไว้
ในบทนำของฟังก์ชัน หากฟังก์ชันเรียกใช้ผ่านตัวชี้บน AIX และ 64-บิต
ระบบลีนุกซ์. หากค่า TOC ไม่ถูกบันทึกไว้ในอารัมภบท ก็จะถูกบันทึกไว้ก่อนหน้านั้น
โทรผ่านพอยน์เตอร์ NS -mno-save-toc-ทางอ้อม ตัวเลือกเป็นค่าเริ่มต้น

RX Options

ตัวเลือกบรรทัดคำสั่งเหล่านี้ถูกกำหนดไว้สำหรับเป้าหมาย RX:

-m64bit-ดับเบิ้ล
-m32bit-ดับเบิ้ล
ทำให้ประเภทข้อมูล "สองเท่า" เป็น 64 บิต (-m64bit-ดับเบิ้ล) หรือ 32 บิต (-m32bit-ดับเบิ้ล)
ในขนาด. ค่าเริ่มต้นคือ -m32bit-ดับเบิ้ล. หมายเหตุ ฮาร์ดแวร์จุดลอยตัว RX ใช้งานได้เท่านั้น
ในค่า 32 บิต ซึ่งเป็นสาเหตุที่ค่าเริ่มต้นคือ -m32bit-ดับเบิ้ล.

-fpu
-โนฟปุ
เปิดใช้งาน (-fpu) หรือปิดการใช้งาน (-โนฟปุ) การใช้ฮาร์ดแวร์จุดลอยตัว RX NS
ค่าเริ่มต้นถูกเปิดใช้งานสำหรับ RX600 ซีรีส์และปิดการใช้งานสำหรับ RX200 ชุด.

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

หมายเหตุ ถ้า -fpu เปิดใช้งานตัวเลือกแล้ว -funsafe-คณิตศาสตร์-optimizations ยังเปิดใช้งานอยู่
โดยอัตโนมัติ เนื่องจากคำสั่ง RX FPU นั้นไม่ปลอดภัย

-mcpu=ชื่อ
เลือกประเภทของ RX CPU ที่จะกำหนดเป้าหมาย ปัจจุบันรองรับสามประเภท ได้แก่
ทั่วไป RX600 และ RX200 ชุดฮาร์ดแวร์และเฉพาะ RX610 ซีพียู ค่าเริ่มต้นคือ
RX600.

ข้อแตกต่างระหว่าง RX600 และ RX610 คือว่า RX610 ไม่สนับสนุน
คำแนะนำ "MVTIPL"

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

-mbig-endian-ข้อมูล
-mlittle-endian-ข้อมูล
จัดเก็บข้อมูล (แต่ไม่ใช่โค้ด) ในรูปแบบ big-endian ค่าเริ่มต้นคือ
-mlittle-endian-ข้อมูลคือการเก็บข้อมูลในรูปแบบ little-endian

-msmall-data-จำกัด=N
ระบุขนาดสูงสุดเป็นไบต์ของตัวแปรโกลบอลและสแตติกซึ่งสามารถวางได้
ลงในพื้นที่ข้อมูลขนาดเล็ก การใช้พื้นที่ข้อมูลขนาดเล็กอาจทำให้มีขนาดเล็กลงและเร็วขึ้น
รหัสแต่ขนาดของพื้นที่มีจำกัดและมันขึ้นอยู่กับโปรแกรมเมอร์เพื่อให้แน่ใจว่า
พื้นที่ไม่ล้น นอกจากนี้ เมื่อใช้พื้นที่ข้อมูลขนาดเล็ก RX's
ทะเบียน (โดยปกติคือ "r13") สงวนไว้สำหรับใช้ชี้ไปที่บริเวณนี้ ดังนั้นจึงไม่ใช่
ใช้งานได้นานขึ้นโดยคอมไพเลอร์ ซึ่งอาจส่งผลให้ช้าลงและ/หรือใหญ่ขึ้น
รหัสถ้าตัวแปรที่เคยถูกเก็บไว้ในรีจิสเตอร์สำรองคือตอนนี้
ผลักไปที่กอง

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

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

-msim
-mno-ซิม
ใช้รันไทม์ของโปรแกรมจำลอง ค่าเริ่มต้นคือการใช้รันไทม์เฉพาะของบอร์ด libgloss

-mas100-ไวยากรณ์
-mno-as100-ไวยากรณ์
เมื่อสร้างเอาต์พุตแอสเซมเบลอร์ ให้ใช้ไวยากรณ์ที่เข้ากันได้กับ AS100 . ของ Renesas
ผู้ประกอบ. ไวยากรณ์นี้ยังสามารถจัดการได้โดยแอสเซมเบลอร์ GAS แต่มีบางอย่าง
ข้อจำกัด ดังนั้นการสร้างจึงไม่ใช่ตัวเลือกเริ่มต้น

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

มูลค่า N สามารถอยู่ระหว่าง 0 ถึง 4 ค่า 0 (ค่าเริ่มต้น) หรือ 4 หมายความว่า
อนุญาตให้มีค่าคงที่ทุกขนาด

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

-mint-ลงทะเบียน=N
ระบุจำนวนรีจิสเตอร์ที่จะสำรองสำหรับฟังก์ชันตัวจัดการอินเตอร์รัปต์ที่รวดเร็ว NS
ความคุ้มค่า N สามารถอยู่ระหว่าง 0 ถึง 4 ค่า 1 หมายถึงการลงทะเบียน "r13" จะเป็น
สงวนไว้สำหรับการใช้งานเฉพาะตัวจัดการขัดจังหวะแบบรวดเร็ว มูลค่าสำรอง 2 ใบ
"r13" และ "r12" มูลค่าสำรอง 3 "r13", "r12" และ "r11" และมูลค่า 4
สำรอง "r13" ถึง "r10" ค่า 0 ค่าดีฟอลต์ ไม่สงวนใดๆ
ทะเบียน

-msave-acc-in-ขัดจังหวะ
ระบุว่าฟังก์ชันตัวจัดการขัดจังหวะควรรักษาการลงทะเบียนสะสม
สิ่งนี้จำเป็นเฉพาะในกรณีที่รหัสปกติอาจใช้การลงทะเบียนสะสม ตัวอย่างเช่น
เพราะมันทำการคูณแบบ 64 บิต ค่าเริ่มต้นคือละเว้นตัวสะสม
เนื่องจากจะทำให้ตัวจัดการขัดจังหวะเร็วขึ้น

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

หมายเหตุ การใช้คุณลักษณะนี้จะสงวนการลงทะเบียน ซึ่งมักจะเป็น "r13" สำหรับข้อมูลคงที่
ที่อยู่ฐาน ซึ่งอาจส่งผลให้โค้ดช้าลงและ/หรือใหญ่ขึ้น โดยเฉพาะอย่างยิ่งในความซับซ้อน
ฟังก์ชั่น

การลงทะเบียนจริงที่เลือกให้เก็บที่อยู่ฐานข้อมูลคงที่ขึ้นอยู่กับว่า
-msmall-data-จำกัด และ / หรือ -mint-ลงทะเบียน เปิดใช้งานตัวเลือกบรรทัดคำสั่ง
เริ่มต้นด้วยการลงทะเบียน "r13" และเลื่อนลงมาจะมีการจัดสรรการลงทะเบียนก่อน
เพื่อตอบสนองความต้องการของ -mint-ลงทะเบียนแล้ว -mpid และในที่สุดก็
-msmall-data-จำกัด. ดังนั้นจึงเป็นไปได้ที่การลงทะเบียนพื้นที่ข้อมูลขนาดเล็กจะเป็น "r8"
ถ้าทั้งสองอย่าง -mint-ลงทะเบียน=4 และ -mpid ระบุไว้ในบรรทัดคำสั่ง

โดยค่าเริ่มต้น คุณลักษณะนี้ไม่ได้เปิดใช้งาน ค่าเริ่มต้นสามารถเรียกคืนได้ผ่านทาง -mno-pid
ตัวเลือกบรรทัดคำสั่ง

หมายเหตุ ตัวเลือกบรรทัดคำสั่ง GCC ทั่วไป -แก้ไขแล้ว-reg มีความสำคัญเป็นพิเศษต่อ RX
พอร์ตเมื่อใช้กับแอตทริบิวต์ฟังก์ชัน "ขัดจังหวะ" คุณลักษณะนี้บ่งชี้ a
ฟังก์ชันที่ตั้งใจจะประมวลผลการขัดจังหวะอย่างรวดเร็ว GCC จะทำให้แน่ใจว่าจะใช้เฉพาะ
ลงทะเบียน "r10", "r11", "r12" และ/หรือ "r13" และเฉพาะว่าการใช้งานปกติของ
การลงทะเบียนที่เกี่ยวข้องถูก จำกัด ผ่านทาง -แก้ไขแล้ว-reg or -mint-ลงทะเบียน
ตัวเลือกบรรทัดคำสั่ง

S / 390 และ zซีรี่ส์ Options

เหล่านี้เป็น -m ตัวเลือกที่กำหนดไว้สำหรับสถาปัตยกรรม S/390 และ zSeries

-mhard-ลอย
-msoft-ลอย
ใช้ (อย่าใช้) คำแนะนำฮาร์ดแวร์จุดลอยตัวและลงทะเบียนสำหรับ float-
การดำเนินงานจุด เมื่อไหร่ -msoft-ลอย ถูกระบุ ทำหน้าที่ใน libgcc.a จะถูกนำไปใช้
เพื่อดำเนินการจุดลอยตัว เมื่อไหร่ -mhard-ลอย ระบุคอมไพเลอร์
สร้างคำสั่งทศนิยม IEEE นี่คือค่าเริ่มต้น

-mhard-dfp
-mno-ฮาร์ด-dfp
ใช้ (อย่าใช้) ฮาร์ดแวร์ decimal-floating-point คำแนะนำสำหรับ decimal-
การดำเนินการจุดลอยตัว เมื่อไหร่ -mno-ฮาร์ด-dfp ถูกระบุ ทำหน้าที่ใน libgcc.a
จะใช้ในการดำเนินการจุดทศนิยม-ทศนิยม เมื่อไหร่ -mhard-dfp is
ที่ระบุ คอมไพเลอร์จะสร้างคำสั่งฮาร์ดแวร์จุดทศนิยมลอยตัว นี้
เป็นค่าเริ่มต้นสำหรับ -มีนาคม = z9-ec หรือสูงกว่า

-mlong-double-64
-mlong-double-128
สวิตช์เหล่านี้ควบคุมขนาดของประเภท "long double" ขนาด 64 บิตทำให้
ประเภท "long double" เทียบเท่ากับประเภท "double" นี่คือค่าเริ่มต้น

-mbackchain
-mno-แบ็คเชน
จัดเก็บ (ไม่จัดเก็บ) ที่อยู่ของเฟรมผู้โทรเป็นตัวชี้แบ็คเชนลงใน
สแต็คเฟรมของ callee อาจจำเป็นต้องใช้ backchain เพื่ออนุญาตการดีบักโดยใช้เครื่องมือที่
ไม่เข้าใจข้อมูลเฟรมการโทร DWARF-2 เมื่อไหร่ -mno-บรรจุสแต็ค ที่อยู่ใน
เอฟเฟกต์ ตัวชี้แบ็คเชนจะถูกเก็บไว้ที่ด้านล่างของเฟรมสแต็ก เมื่อไร
-mpacked-กอง มีผลบังคับใช้ backchain อยู่ในคำบนสุดของ
พื้นที่บันทึกการลงทะเบียน 96/160 ไบต์

โดยทั่วไปโค้ดที่คอมไพล์ด้วย -mbackchain สามารถโทรเข้ากันได้กับรหัสที่คอมไพล์ด้วย
-mmo-แบ็คเชน; อย่างไรก็ตาม การใช้ backchain เพื่อจุดประสงค์ในการดีบักมักจะต้องการ
ที่ไบนารีทั้งหมดถูกสร้างขึ้นด้วย -mbackchain. โปรดทราบว่าการรวมกันของ
-mbackchain, -mpacked-กอง และ -mhard-ลอย ไม่รองรับ เพื่อสร้าง
การใช้เคอร์เนลลินุกซ์ -msoft-ลอย.

ค่าเริ่มต้นคือไม่รักษาแบ็คเชน

-mpacked-กอง
-mno-บรรจุสแต็ค
ใช้ (อย่าใช้) เค้าโครงสแต็กที่บรรจุไว้ เมื่อไหร่ -mno-บรรจุสแต็ค ระบุไว้
คอมไพเลอร์ใช้ฟิลด์ทั้งหมดของพื้นที่บันทึกการลงทะเบียน 96/160 ไบต์สำหรับพวกเขาเท่านั้น
วัตถุประสงค์เริ่มต้น; ฟิลด์ที่ไม่ได้ใช้ยังคงใช้พื้นที่สแต็ก เมื่อไหร่ -mpacked-กอง is
ระบุ สล็อตบันทึกรีจิสเตอร์ถูกบรรจุอย่างหนาแน่นที่ด้านบนของรีจิสเตอร์บันทึก
พื้นที่; พื้นที่ที่ไม่ได้ใช้จะถูกนำกลับมาใช้ใหม่เพื่อวัตถุประสงค์อื่น ทำให้การใช้ . มีประสิทธิภาพมากขึ้น
พื้นที่กองที่มีอยู่ อย่างไรก็ตาม เมื่อ -mbackchain ก็ยังมีผลอยู่ด้านบนสุด
คำของพื้นที่บันทึกมักใช้เพื่อจัดเก็บแบ็คเชนและที่อยู่ผู้ส่ง
register จะถูกบันทึกสองคำไว้ใต้ backchain เสมอ

ตราบใดที่ไม่ได้ใช้แบ็คเชนสแต็กเฟรม โค้ดที่สร้างด้วย -mpacked-กอง
สามารถโทรเข้ากันได้กับรหัสที่สร้างด้วย -mno-บรรจุสแต็ค. โปรดทราบว่าบางรายการที่ไม่ใช่FSF
การเผยแพร่ GCC 2.95 สำหรับ S/390 หรือ zSeries สร้างโค้ดที่ใช้สแต็กเฟรม
แบ็คเชน ณ รันไทม์ ไม่ใช่แค่เพื่อการดีบักเท่านั้น รหัสดังกล่าวไม่โทร-
เข้ากันได้กับรหัสที่คอมไพล์ด้วย -mpacked-กอง. นอกจากนี้ โปรดทราบว่าการรวมกันของ
-mbackchain, -mpacked-กอง และ -mhard-ลอย ไม่รองรับ เพื่อสร้าง
การใช้เคอร์เนลลินุกซ์ -msoft-ลอย.

ค่าดีฟอลต์คือไม่ใช้โครงร่างสแต็กที่แพ็ก

-msmall-exec
-mno-small-ผู้บริหาร
สร้าง (หรือไม่สร้าง) รหัสโดยใช้คำสั่ง "ยกทรง" เพื่อทำรูทีนย่อย
โทร. สิ่งนี้ทำงานได้อย่างน่าเชื่อถือก็ต่อเมื่อขนาดที่เรียกใช้งานได้ทั้งหมดไม่เกิน 64k
ค่าเริ่มต้นคือใช้คำสั่ง "basr" แทน ซึ่งไม่มีสิ่งนี้
ข้อ จำกัด

- ลบ.ม
- ลบ.ม
เมื่อ - ลบ.ม ถูกระบุ สร้างโค้ดที่สอดคล้องกับ GNU/Linux สำหรับ S/390 ABI เมื่อไหร่
- ลบ.ม ถูกระบุ สร้างโค้ดที่สอดคล้องกับ GNU/Linux สำหรับ zSeries ABI นี้
อนุญาตให้ GCC สร้างคำสั่ง 64 บิตโดยเฉพาะ สำหรับ s390 เป้าหมาย
ค่าเริ่มต้นคือ - ลบ.มในขณะที่ s390x เป้าหมายเริ่มต้นเป็น - ลบ.ม.

-mzarch
-เมซ่า
เมื่อ -mzarch ถูกระบุให้สร้างรหัสโดยใช้คำแนะนำที่มีอยู่ใน
z/สถาปัตยกรรม. เมื่อไหร่ -เมซ่า ระบุให้สร้างรหัสโดยใช้คำแนะนำ
มีอยู่ใน ESA/390 สังเกตว่า -เมซ่า เป็นไปไม่ได้ด้วย - ลบ.ม. เมื่อสร้าง
รหัสที่สอดคล้องกับ GNU/Linux สำหรับ S/390 ABI ค่าเริ่มต้นคือ -เมซ่า. เมื่อสร้าง
โค้ดที่สอดคล้องกับ GNU/Linux สำหรับ zSeries ABI ค่าเริ่มต้นคือ -mzarch.

-mmvcle
-mno-mvcle
สร้าง (หรือไม่สร้าง) รหัสโดยใช้คำสั่ง "mvcle" เพื่อดำเนินการ block
ย้าย เมื่อไหร่ -mno-mvcle ระบุให้ใช้ลูป "mvc" แทน นี่คือค่าเริ่มต้น
เว้นแต่จะปรับให้เหมาะสมสำหรับขนาด

-mdebug
-mno-debug
พิมพ์ (หรือไม่พิมพ์) ข้อมูลเพิ่มเติมเมื่อทำการคอมไพล์ ค่าเริ่มต้นคือ
เพื่อไม่ให้พิมพ์ข้อมูลการดีบัก

-มีนาคม=ประเภทซีพียู
สร้างรหัสที่จะทำงานบน ประเภทซีพียูซึ่งเป็นชื่อของระบบที่เป็นตัวแทนของ a
โปรเซสเซอร์บางประเภท ค่าที่เป็นไปได้สำหรับ ประเภทซีพียู เป็น g5, g6, z900, z990, z9-109,
z9-ec และ z10. เมื่อสร้างรหัสโดยใช้คำแนะนำที่มีอยู่ใน
z/Architecture ค่าเริ่มต้นคือ -มีนาคม=z900. มิฉะนั้น ค่าเริ่มต้นคือ -มีนาคม=g5.

-mtune=ประเภทซีพียู
ปรับไปที่ ประเภทซีพียู ทุกอย่างที่เกี่ยวข้องกับโค้ดที่สร้างขึ้น ยกเว้น ABI
และชุดคำสั่งที่ใช้ได้ รายการของ ประเภทซีพียู ค่าจะเหมือนกับfor
-มีนาคม. ค่าเริ่มต้นคือค่าที่ใช้สำหรับ -มีนาคม.

-mtpf-ติดตาม
-mno-tpf-ติดตาม
สร้างรหัสที่เพิ่ม (ไม่เพิ่ม) ในสาขาเฉพาะของ TPF OS เพื่อติดตามงานประจำ
ในระบบปฏิบัติการ ตัวเลือกนี้ถูกปิดโดยค่าเริ่มต้น แม้ว่าจะทำการคอมไพล์สำหรับ
ระบบปฏิบัติการทีพีเอฟ

-mfused-mad
-mno-ฟิวส์ madd
สร้างรหัสที่ใช้ (ไม่ใช้) ทศนิยมคูณและสะสม
คำแนะนำ. คำแนะนำเหล่านี้ถูกสร้างขึ้นโดยค่าเริ่มต้นหากจุดลอยตัวของฮาร์ดแวร์
ถูกนำมาใช้.

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

-mwarn-ไดนามิกสแต็ค
ส่งคำเตือนหากฟังก์ชันเรียกใช้ alloca หรือใช้อาร์เรย์ที่มีขนาดแบบไดนามิก นี่คือ
โดยทั่วไปเป็นความคิดที่ไม่ดีด้วยขนาดสแต็กที่จำกัด

-mstack-ยาม=กองการ์ด
-mstack-ขนาด=ขนาดสแต็ก
หากมีตัวเลือกเหล่านี้ แบ็คเอนด์ s390 จะส่งคำสั่งเพิ่มเติมใน
บทนำของฟังก์ชันซึ่งจะทริกเกอร์กับดักหากขนาดสแต็กเป็น กองการ์ด ไบต์ด้านบน
ขนาดสแต็ก (โปรดจำไว้ว่าสแต็กบน s390 ลดลง) ถ้า กองการ์ด
ตัวเลือกถูกละเว้นกำลังที่เล็กที่สุดของ 2 ที่ใหญ่กว่าขนาดเฟรมของคอมไพล์
ฟังก์ชั่นถูกเลือก ตัวเลือกเหล่านี้มีวัตถุประสงค์เพื่อใช้เพื่อช่วยดีบัก stack
ปัญหาล้น รหัสที่ปล่อยออกมาเพิ่มเติมทำให้เกิดค่าใช้จ่ายเพียงเล็กน้อยและ
ดังนั้นจึงสามารถใช้ในการผลิตเช่นระบบที่ไม่มีประสิทธิภาพมากขึ้น
การย่อยสลาย ค่าที่กำหนดต้องเป็นค่ายกกำลัง 2 และ ขนาดสแต็ก จะต้องมี
มากกว่า กองการ์ด ไม่เกิน 64k เพื่อให้เกิดประสิทธิภาพในการเสริม
รหัสทำให้สันนิษฐานว่าสแต็กเริ่มต้นที่อยู่ที่สอดคล้องกับค่า
มอบให้โดย ขนาดสแต็ก. กองการ์ด สามารถใช้ option ร่วมกับ . เท่านั้น
ขนาดสแต็ก.

คะแนน Options

ตัวเลือกเหล่านี้กำหนดไว้สำหรับการใช้งานคะแนน:

-meb
คอมไพล์โค้ดสำหรับโหมด big-endian นี่คือค่าเริ่มต้น

-เมล
คอมไพล์โค้ดสำหรับโหมด little-endian

-mhwloop
ปิดการใช้งานสร้างคำสั่ง bcnz

-muls
เปิดใช้งานการสร้างการโหลดที่ไม่ตรงแนวและคำแนะนำการจัดเก็บ

-เอ็มแมค
เปิดใช้งานการใช้คำสั่งการคูณ ปิดใช้งานโดยค่าเริ่มต้น

-mscore5
ระบุ SCORE5 เป็นสถาปัตยกรรมเป้าหมาย

-mscore5u
ระบุ SCORE5U ของสถาปัตยกรรมเป้าหมาย

-mscore7
ระบุ SCORE7 เป็นสถาปัตยกรรมเป้าหมาย นี่คือค่าเริ่มต้น

-mscore7d
ระบุ SCORE7D เป็นสถาปัตยกรรมเป้าหมาย

SH Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m มีการกำหนดตัวเลือกสำหรับการใช้งาน SH:

- ลบ.ม สร้างรหัสสำหรับ SH1

- ลบ.ม สร้างรหัสสำหรับ SH2

-m2e
สร้างรหัสสำหรับ SH2e

-m2a-nofpu
สร้างรหัสสำหรับ SH2a โดยไม่มี FPU หรือสำหรับ SH2a-FPU ในลักษณะที่
ไม่ใช้หน่วยทศนิยม

-m2a-เดี่ยวเท่านั้น
สร้างรหัสสำหรับ SH2a-FPU ในลักษณะที่ไม่มีทศนิยมสองความแม่นยำ
ใช้การดำเนินการ

-m2a-ซิงเกิล
สร้างรหัสสำหรับ SH2a-FPU โดยถือว่าหน่วยจุดลอยตัวอยู่ในความแม่นยำเดียว
โหมดโดยค่าเริ่มต้น

-m2a
สร้างโค้ดสำหรับ SH2a-FPU โดยถือว่าหน่วยทศนิยมมีความแม่นยำสองเท่า
โหมดโดยค่าเริ่มต้น

- ลบ.ม สร้างรหัสสำหรับ SH3

-m3e
สร้างรหัสสำหรับ SH3e

-m4-โนฟปุ
สร้างรหัสสำหรับ SH4 โดยไม่มีหน่วยทศนิยม

-m4-เดี่ยวเท่านั้น
สร้างรหัสสำหรับ SH4 ด้วยหน่วยทศนิยมที่รองรับเฉพาะจุดเดียว
เลขคณิตที่แม่นยำ

-m4-เดี่ยว
สร้างรหัสสำหรับ SH4 โดยถือว่าหน่วยทศนิยมอยู่ในโหมดความแม่นยำเดียว
โดยค่าเริ่มต้น

- ลบ.ม สร้างรหัสสำหรับ SH4

-m4a-nofpu
สร้างรหัสสำหรับ SH4al-dsp หรือสำหรับ SH4a ในลักษณะที่จุดลอยตัว
ไม่ได้ใช้หน่วย

-m4a-เดี่ยวเท่านั้น
สร้างรหัสสำหรับ SH4a ในลักษณะที่ไม่มีทศนิยมสองความแม่นยำ
ใช้การดำเนินการ

-m4a-ซิงเกิล
สร้างรหัสสำหรับ SH4a โดยถือว่าหน่วยทศนิยมอยู่ในความแม่นยำเดียว
โหมดโดยค่าเริ่มต้น

-m4a
สร้างรหัสสำหรับ SH4a

-m4al
เหมือนกับ -m4a-nofpuเว้นแต่มันจะผ่านไปโดยปริยาย -dsp ให้กับผู้ประกอบ GCC
ไม่ได้สร้างคำสั่ง DSP ใดๆ ในขณะนี้

-mb คอมไพล์โค้ดสำหรับโปรเซสเซอร์ในโหมด big-endian

-มล คอมไพล์โค้ดสำหรับโปรเซสเซอร์ในโหมด little-endian

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

-mrelax
ย่อที่อยู่บางส่วนในเวลาลิงค์ ถ้าเป็นไปได้; ใช้ตัวเลือกลิงเกอร์
-ผ่อนคลาย.

-เคลื่อนย้ายได้
ใช้ออฟเซ็ต 32 บิตในตาราง "สวิตช์" ค่าเริ่มต้นคือการใช้ออฟเซ็ต 16 บิต

-เอ็มบิท็อป
เปิดใช้งานการใช้คำสั่งการจัดการบิตบน SH2A

-mfmovd
เปิดใช้งานการใช้คำสั่ง "fmovd" ตรวจสอบ -mdalign สำหรับข้อจำกัดในการจัดตำแหน่ง

-มิทาจิ
ปฏิบัติตามอนุสัญญาการเรียกที่กำหนดโดย Renesas

-mrenesas
ปฏิบัติตามอนุสัญญาการเรียกที่กำหนดโดย Renesas

-mno-เรเนซาส
ปฏิบัติตามอนุสัญญาการเรียกที่กำหนดไว้สำหรับ GCC ก่อนอนุสัญญาเรเนซาส
สามารถใช้ได้ ตัวเลือกนี้เป็นค่าเริ่มต้นสำหรับเป้าหมายทั้งหมดของ SH toolchain

-mnomacsave
ทำเครื่องหมายการลงทะเบียน "MAC" ว่าเป็นการโทรปิดแม้ว่า -มิทาจิ ได้รับ

-มี่
-mno-ieee
ควบคุมการปฏิบัติตามมาตรฐาน IEEE ของการเปรียบเทียบจุดทศนิยม ซึ่งส่งผลต่อการจัดการ
กรณีที่ผลการเปรียบเทียบไม่เรียงลำดับ โดยค่าเริ่มต้น -มี่ is
เปิดใช้งานโดยปริยาย ถ้า -ffinite-คณิตศาสตร์เท่านั้น เปิดใช้งาน -mno-ieee ถูกกำหนดโดยปริยาย
ซึ่งส่งผลให้มีการเปรียบเทียบจุดลอยตัวที่เท่ากันมากกว่าและเท่ากันน้อยกว่า NS
การตั้งค่าโดยนัยสามารถแทนที่ได้โดยการระบุอย่างใดอย่างหนึ่ง -มี่ or -mno-ieee.

-minline-ic_invalidate
รหัสอินไลน์เพื่อทำให้รายการแคชคำสั่งใช้ไม่ได้หลังจากตั้งค่าฟังก์ชันที่ซ้อนกัน
แทรมโพลีน ตัวเลือกนี้ไม่มีผลหาก -musermode มีผลบังคับและเลือก
ตัวเลือกการสร้างโค้ด (เช่น -m4) ไม่อนุญาตให้ใช้คำสั่ง icbi ถ้า
ตัวเลือกการสร้างรหัสที่เลือกไม่อนุญาตให้ใช้คำสั่ง icbi
และ -musermode ไม่มีผล รหัสอินไลน์จะจัดการคำสั่ง
อาร์เรย์ที่อยู่แคชโดยตรงกับการเขียนที่เชื่อมโยง นี้ไม่เพียงแต่ต้อง
โหมดสิทธิพิเศษ แต่จะล้มเหลวเช่นกันหากสายแคชถูกแมปผ่านTLB
และกลายเป็น unmapped

-ผิดขนาด
ขนาดและตำแหน่งของคำสั่งดัมพ์ในรหัสแอสเซมบลี

-mpadstruct
ตัวเลือกนี้เลิกใช้แล้ว มันเสริมโครงสร้างให้หลาย 4 ไบต์ซึ่งก็คือ
เข้ากันไม่ได้กับ SH ABI

-msoft-อะตอม
สร้างลำดับอะตอมของซอฟต์แวร์ gUSA ที่เข้ากันได้กับ GNU/Linux สำหรับอะตอมในตัว
ฟังก์ชั่น. ลำดับอะตอมที่สร้างขึ้นนั้นต้องการการสนับสนุนจากอินเตอร์รัปต์ /
รหัสการจัดการข้อยกเว้นของระบบและเหมาะสำหรับระบบแกนเดียวเท่านั้น
พวกเขาจะทำงานไม่ถูกต้องบนระบบมัลติคอร์ ตัวเลือกนี้เปิดใช้งานโดย
ค่าเริ่มต้นเมื่อเป้าหมายคือ "sh-*-linux*" สำหรับรายละเอียดเกี่ยวกับอะตอมในตัว
ฟังก์ชั่นเห็น __อะตอม บิลท์อิน.

-mspace
ปรับให้เหมาะสมสำหรับพื้นที่แทนความเร็ว โดยนัยโดย -คุณ.

-mprefergot
เมื่อสร้างโค้ดที่ไม่ขึ้นกับตำแหน่ง ให้ปล่อยการเรียกฟังก์ชันโดยใช้ Global Offset
ตารางแทนตารางการเชื่อมโยงขั้นตอน

-musermode
อย่าสร้างรหัสเฉพาะโหมดพิเศษ หมายถึง -mno-inline-ic_invalidate ถ้า
รหัสในบรรทัดจะไม่ทำงานในโหมดผู้ใช้ นี่เป็นค่าเริ่มต้นเมื่อเป้าหมายคือ
"sh-*-linux*".

-ราคาหลายทุน=จำนวน
กำหนดต้นทุนที่จะสมมติสำหรับการคูณ

-mdiv=กลยุทธ์
กำหนดกลยุทธ์การหารที่จะใช้สำหรับการดำเนินการหารจำนวนเต็ม สำหรับ SHmedia
กลยุทธ์ สามารถเป็นหนึ่งใน:

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

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

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

โทรศัพท์
เรียกใช้ฟังก์ชันไลบรารีที่มักจะใช้ inv:มินแลต กลยุทธ์. นี้
ให้ความหนาแน่นของโค้ดสูงสำหรับการคอมไพล์ "m5-*media-nofpu"

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

inv:โทร
เชิญ:call2
เชิญ:fp
ใช้ INV อัลกอริธึมสำหรับการสร้างโค้ดเริ่มต้น แต่ถ้าโค้ดยังคงอยู่
unoptimized, ย้อนกลับไปยัง โทรศัพท์, call2,หรือ fp กลยุทธ์ ตามลำดับ สังเกตว่า
ผลข้างเคียงที่อาจเกิดขึ้นจากการหารด้วยศูนย์จะดำเนินการโดยแยก
คำสั่งจึงเป็นไปได้ที่คำสั่งจำนวนเต็มทั้งหมดจะถูกยกออกมา
แต่เครื่องหมายสำหรับผลข้างเคียงยังคงอยู่ที่เดิม การรวมตัวกันอีกครั้งเพื่อ
การดำเนินการจุดลอยตัวหรือการโทรไม่สามารถทำได้ในกรณีนั้น

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

สำหรับเป้าหมายอื่นที่ไม่ใช่ SHmedia กลยุทธ์ สามารถเป็นหนึ่งใน:

โทร-div1
เรียกใช้ฟังก์ชันไลบรารีที่ใช้คำสั่งการแบ่งขั้นตอนเดียว "div1" to
ดำเนินการ หารด้วยศูนย์จะคำนวณผลลัพธ์ที่ไม่ระบุและทำ
ไม่ใช่กับดัก นี่เป็นค่าเริ่มต้นยกเว้น SH4, SH2A และ SHcompact

โทร-fp
เรียกฟังก์ชันไลบรารีที่ดำเนินการใน double precision floating
จุด. การหารด้วยศูนย์ทำให้เกิดข้อยกเว้นทศนิยม นี่คือค่าเริ่มต้น
สำหรับ SHcompact พร้อม FPU ระบุสิ่งนี้สำหรับเป้าหมายที่ไม่มีคู่
FPU ที่แม่นยำจะมีค่าเริ่มต้นเป็น "call-div1"

โทรโต๊ะ
เรียกใช้ฟังก์ชันไลบรารีที่ใช้ตารางค้นหาตัวหารขนาดเล็กและ
คำสั่ง "div1" พร้อมตัวพิมพ์เล็กและตัวพิมพ์ใหญ่สำหรับตัวหารที่ใหญ่กว่า การหารด้วยศูนย์
คำนวณผลลัพธ์ที่ไม่ระบุและไม่ดักจับ นี่เป็นค่าเริ่มต้นสำหรับ SH4
การระบุสิ่งนี้สำหรับเป้าหมายที่ไม่มีคำสั่งกะไดนามิกจะ
ค่าเริ่มต้นเป็น "call-div1"

เมื่อไม่ได้ระบุกลยุทธ์การแบ่ง กลยุทธ์เริ่มต้นจะถูกเลือก
ตามเป้าหมายปัจจุบัน สำหรับ SH2A กลยุทธ์เริ่มต้นคือการใช้ "divs" และ
คำแนะนำ "divu" แทนการเรียกใช้ฟังก์ชันไลบรารี

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

-mdivsi3_libfunc=ชื่อ
ตั้งชื่อฟังก์ชันไลบรารีที่ใช้สำหรับการแบ่งแบบ 32 บิตเป็น ชื่อ. นี้
มีผลกับชื่อที่ใช้ในกลยุทธ์การโทรและ inv:call และ .เท่านั้น
คอมไพเลอร์จะยังคงคาดหวังชุดของการลงทะเบียนอินพุต/เอาท์พุต/ปิดล้อมเหมือน
ไม่มีตัวเลือกนี้

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

-majust-unroll
เค้นคลี่ออกเพื่อหลีกเลี่ยงการฟาดทะเบียนเป้าหมาย ตัวเลือกนี้มีเพียง
มีผลหากฐานรหัส gcc รองรับตะขอเป้าหมาย TARGET_ADJUST_UNROLL_MAX

-mindexed-ที่อยู่
เปิดใช้งานการใช้โหมดการกำหนดที่อยู่ที่ทำดัชนีสำหรับ SHmedia32/SHcompact นี้เท่านั้น
ปลอดภัยหากฮาร์ดแวร์และ/หรือระบบปฏิบัติการใช้ความหมายแบบวนรอบ 32 บิตสำหรับการจัดทำดัชนี
โหมดที่อยู่ สถาปัตยกรรมอนุญาตให้ใช้โปรเซสเซอร์ที่มี 64 บิต
MMU ซึ่งระบบปฏิบัติการสามารถใช้เพื่อรับที่อยู่แบบ 32 บิต แต่เนื่องจากไม่มีฮาร์ดแวร์ปัจจุบัน
การใช้งานรองรับสิ่งนี้หรือวิธีอื่นใดในการทำให้โหมดการกำหนดที่อยู่ทำดัชนีปลอดภัย
เพื่อใช้ใน ABI แบบ 32 บิต ค่าเริ่มต้นคือ -mno-ดัชนี-ที่อยู่.

-mgetrcost=จำนวน
ตั้งค่าต้นทุนที่สมมติขึ้นสำหรับคำสั่ง gettr เป็น จำนวน. ค่าเริ่มต้นคือ 2 if
-mpt-คงที่ มีผลบังคับใช้ 100 มิฉะนั้น

-mpt-คงที่
สมมติว่าคำสั่ง pt* จะไม่ดักฟัง โดยทั่วไปจะทำให้กำหนดเวลาได้ดีขึ้น
รหัส แต่ไม่ปลอดภัยในฮาร์ดแวร์ปัจจุบัน นิยามสถาปัตยกรรมปัจจุบันกล่าวว่า
ptabs และ ptrel trap เมื่อเป้าหมายและ 3 คือ 3 สิ่งนี้มี
ผลที่ไม่ได้ตั้งใจของการทำให้ไม่ปลอดภัยในการกำหนดเวลา ptabs / ptrel ก่อนสาขาหรือ
ยกออกจากห่วง ตัวอย่างเช่น __do_global_ctors ซึ่งเป็นส่วนหนึ่งของ libgcc ที่ทำงาน
ตัวสร้างเมื่อเริ่มต้นโปรแกรม เรียกใช้ฟังก์ชันในรายการที่คั่นด้วย -1
ด้วยตัวเลือก -mpt-fixed ptabs จะถูกทำให้เสร็จก่อนทำการทดสอบกับ -1 ที่
หมายความว่า Constructor ทั้งหมดจะทำงานเร็วขึ้นเล็กน้อย แต่เมื่อลูปมาถึง
ท้ายรายการ โปรแกรมขัดข้องเพราะ ptabs โหลด -1 ลงในเป้าหมาย
ลงทะเบียน. เนื่องจากตัวเลือกนี้ไม่ปลอดภัยสำหรับฮาร์ดแวร์ใดๆ ที่ใช้ระบบปัจจุบัน
ข้อกำหนดสถาปัตยกรรม ค่าเริ่มต้นคือ -mno-pt-fixed เว้นแต่ผู้ใช้จะระบุ a
ค่าใช้จ่ายเฉพาะกับ -mgettrค่าใช้จ่าย, -mno-pt-fixed ยังหมายถึง -mggetrราคา=100; นี้
ขัดขวางการจัดสรรรีจิสเตอร์โดยใช้รีจิสเตอร์เป้าหมายสำหรับการจัดเก็บจำนวนเต็มธรรมดา

-minvalid-สัญลักษณ์
สมมติว่าสัญลักษณ์อาจไม่ถูกต้อง สัญลักษณ์ฟังก์ชันสามัญที่สร้างโดยคอมไพเลอร์
จะสามารถโหลดด้วย movi/shori/ptabs หรือ movi/shori/ptrel ได้เสมอ แต่ด้วย
แอสเซมเบลอร์และ / หรือลูกเล่นของลิงเกอร์สามารถสร้างสัญลักษณ์ที่จะทำให้เกิด
ptabs / ptrel เพื่อดักจับ ตัวเลือกนี้มีความหมายก็ต่อเมื่อ -mno-pt-คงที่ ที่อยู่ใน
ผล. จากนั้นจะป้องกัน cross-basic-block cse, hoisting และกำหนดเวลาส่วนใหญ่ของ
โหลดสัญลักษณ์ ค่าเริ่มต้นคือ -mno-ไม่ถูกต้อง-สัญลักษณ์.

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

-mcbranchdi
เปิดใช้งานรูปแบบคำสั่ง "cbranchdi4"

-mcpeqdi
ปล่อยรูปแบบคำสั่ง "cmpeqdi_t" แม้ว่า -mcbranchdi มีผลบังคับใช้

-mfused-mad
อนุญาตให้ใช้คำสั่ง "fmac" (จุดลอยตัวคูณ-สะสม) ถ้า
ประเภทโปรเซสเซอร์รองรับ การเปิดใช้งานตัวเลือกนี้อาจสร้างรหัสที่สร้าง
ผลลัพธ์จำนวนจุดทศนิยมที่แตกต่างกันเมื่อเทียบกับเลขคณิต IEEE 754 ที่เข้มงวด

-mppretend-cmove
ต้องการกิ่งแบบมีเงื่อนไขแบบ zero-displacement สำหรับคำสั่งการย้ายแบบมีเงื่อนไข
รูปแบบ ซึ่งอาจส่งผลให้โค้ดบนโปรเซสเซอร์ SH4 เร็วขึ้น

Solaris 2 Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนใน Solaris 2:

-mimpure-ข้อความ
-mimpure-ข้อความใช้นอกเหนือจาก - แบ่งปัน, บอกคอมไพเลอร์ไม่ให้ผ่าน -z ข้อความ ไปยัง
ตัวเชื่อมโยงเมื่อเชื่อมโยงวัตถุที่ใช้ร่วมกัน โดยใช้ตัวเลือกนี้ คุณสามารถเชื่อมโยงตำแหน่ง-
รหัสขึ้นอยู่กับวัตถุที่ใช้ร่วมกัน

-mimpure-ข้อความ ระงับ "การย้ายถิ่นฐานยังคงต่อต้านการจัดสรร แต่ไม่สามารถเขียนได้
ส่วน" ข้อความแสดงข้อผิดพลาดของ linker อย่างไรก็ตาม การโยกย้ายที่จำเป็นจะทำให้เกิดการคัดลอก-
on-write และอ็อบเจ็กต์ที่ใช้ร่วมกันจะไม่ถูกแชร์ระหว่างกระบวนการ แทน
การใช้ -mimpure-ข้อความคุณควรรวบรวมซอร์สโค้ดทั้งหมดด้วย -fpic or -fPIC.

สวิตช์เหล่านี้ได้รับการสนับสนุนเพิ่มเติมจากด้านบนใน Solaris 2:

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

-pthread
นี่คือคำพ้องความหมายสำหรับ -pthreads.

SPARC Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนบน SPARC:

-mno-แอป-regs
-mapp-regs
ระบุ -mapp-regs เพื่อสร้างเอาต์พุตโดยใช้การลงทะเบียนทั่วโลก 2 ถึง 4 ซึ่ง
SPARC SVR4 ABI สงวนไว้สำหรับการใช้งาน เช่นเดียวกับ global register 1 แต่ละ global
การลงทะเบียน 2 ถึง 4 จะถือว่าเป็นการลงทะเบียนที่จัดสรรได้ซึ่งถูกปิดล้อมโดย
เรียกใช้ฟังก์ชัน นี่คือค่าเริ่มต้น

เพื่อให้เป็นไปตามข้อกำหนด SVR4 ABI อย่างสมบูรณ์โดยสูญเสียประสิทธิภาพการทำงานบางส่วน ให้ระบุ
-mno-แอป-regs. คุณควรรวบรวมไลบรารีและซอฟต์แวร์ระบบด้วยตัวเลือกนี้

-แฟลต
-mno-แบน
กับ -แฟลต, คอมไพเลอร์ไม่สร้างคำสั่งบันทึก/กู้คืน และใช้ a
"แบน" หรือรุ่นหน้าต่างลงทะเบียนเดียว รุ่นนี้ใส่ได้กับรุ่นธรรมดา
ลงทะเบียนรุ่นหน้าต่าง รีจิสเตอร์ท้องถิ่นและอินพุตรีจิสเตอร์ (0--5) ยังคงอยู่
ถือว่าเป็นการลงทะเบียน "บันทึกการโทร" และจะถูกบันทึกไว้ในสแต็กตามความจำเป็น

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

-mfpu
-mhard-ลอย
สร้างเอาต์พุตที่มีคำสั่งทศนิยม นี่คือค่าเริ่มต้น

-mno-fpu
-msoft-ลอย
สร้างเอาต์พุตที่มีการเรียกไลบรารีสำหรับจุดลอยตัว คำเตือน: ความจำเป็น
ไลบรารีไม่พร้อมใช้งานสำหรับเป้าหมาย SPARC ทั้งหมด โดยปกติสิ่งอำนวยความสะดวกของ
ใช้คอมไพเลอร์ C ปกติของเครื่อง แต่ไม่สามารถทำได้โดยตรงในการข้าม
การรวบรวม คุณต้องจัดเตรียมห้องสมุดที่เหมาะสมด้วยตนเอง
ฟังก์ชันสำหรับการคอมไพล์ข้าม เป้าหมายที่ฝังตัว sparc-*-ออก และ สปาร์คไลท์-*-*
ให้การสนับสนุนซอฟต์แวร์จุดลอยตัว

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

-mhard-quad-ลอย
สร้างผลลัพธ์ที่มีคำสั่งทศนิยมแบบ quad-word (ยาวสองเท่า)

-msoft-quad-ลอย
สร้างเอาต์พุตที่มีการเรียกไลบรารี่สำหรับ quad-word (ยาวสองเท่า) ทศนิยม
คำแนะนำ. ฟังก์ชันที่เรียกใช้คือฟังก์ชันที่ระบุใน SPARC ABI นี้เป็น
ค่าเริ่มต้น.

ในขณะที่เขียนนี้ ไม่มีการใช้งาน SPARC ที่รองรับฮาร์ดแวร์สำหรับ
คำสั่งทศนิยมสี่คำ พวกเขาทั้งหมดเรียกตัวจัดการกับดักสำหรับหนึ่งใน
คำแนะนำเหล่านี้ จากนั้นตัวจัดการกับดักจะจำลองผลของคำสั่ง
เนื่องจากค่าโสหุ้ยของตัวจัดการกับดักจึงช้ากว่าการเรียกไลบรารี ABI มาก
กิจวัตร ดังนั้น -msoft-quad-ลอย ตัวเลือกเป็นค่าเริ่มต้น

-mno-unaligned-double
-Munaligned-คู่
สมมติว่า doubles มีการจัดตำแหน่ง 8 ไบต์ นี่คือค่าเริ่มต้น

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

-mno-เร็วกว่าโครงสร้าง
-mfaster โครงสร้าง
กับ -mfaster โครงสร้างคอมไพเลอร์ถือว่าโครงสร้างควรมี 8-byte
การจัดตำแหน่ง ซึ่งช่วยให้สามารถใช้คู่คำสั่ง "ldd" และ "std" สำหรับสำเนา
ในการกำหนดโครงสร้าง แทนที่คู่ "ld" และ "st" สองเท่า อย่างไรก็ตาม
การใช้การจัดตำแหน่งที่เปลี่ยนแปลงนี้เป็นการละเมิด SPARC ABI โดยตรง จึงตั้งใจ
เฉพาะสำหรับใช้กับเป้าหมายที่นักพัฒนารับทราบว่ารหัสผลลัพธ์ของพวกเขา
จะไม่เป็นไปตามกฎของ ABI โดยตรง

-mcpu=ซีพียู_ประเภท
ตั้งค่าชุดคำสั่ง ชุดลงทะเบียน และพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับ
ประเภทเครื่อง ซีพียู_ประเภท. ค่าที่รองรับสำหรับ ซีพียู_ประเภท เป็น v7, ต้นไซเปรซ, v8, ซูเปอร์สปาร์ก,
ไฮเปอร์สปาร์ก, Leon, สปาร์คไลท์, f930, f934, สปาร์คไลท์86x, sparklet, tsc701, v9,
อัลตร้าสปาร์ก, อัลตราสปาร์ก3, ไนแอการา, ไนแองการ่า2, ไนแองการ่า3และ ไนแองการ่า4.

Native Solaris และ GNU/Linux toolchains ยังรองรับค่า พื้นเมืองซึ่งเลือก
ตัวเลือกสถาปัตยกรรมที่ดีที่สุดสำหรับโปรเซสเซอร์โฮสต์ -mcpu=เจ้าของภาษา ไม่มีผลถ้า
GCC ไม่รู้จักโปรเซสเซอร์

พารามิเตอร์การจัดตารางเวลาคำสั่งเริ่มต้นใช้สำหรับค่าที่เลือก an
สถาปัตยกรรมและไม่ใช่การนำไปปฏิบัติ เหล่านี้คือ v7, v8, สปาร์คไลท์, sparklet, v9.

นี่คือรายการของสถาปัตยกรรมที่รองรับและการใช้งานที่รองรับ

v7 ไซเปรส

v8 ซูเปอร์สปาร์ก ไฮเปอร์สปาร์ก ลีออน

สปาร์คไลท์
f930, f934, สปาร์คไลท์86x

sparklet
tsc701

v9 ultrasparc, ultrasparc3, ​​ไนแองการ่า, ไนแองการ่า2, ไนแองการ่า3, ไนแองการ่า4

โดยค่าเริ่มต้น (เว้นแต่จะมีการกำหนดค่าเป็นอย่างอื่น) GCC จะสร้างรหัสสำหรับตัวแปร V7 ของ
สถาปัตยกรรม SPARC กับ -mcpu=ไซเปรสคอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับ
ชิป Cypress CY7C602 ที่ใช้ใน SPARCStation/SPARCServer 3xx series นี่คือ
ยังเหมาะสำหรับ SPARCStation 1, 2, IPX เป็นต้น

กับ -mcpu=v8, GCC สร้างรหัสสำหรับตัวแปร V8 ของสถาปัตยกรรม SPARC NS
ความแตกต่างเพียงอย่างเดียวจากรหัส V7 คือคอมไพเลอร์ปล่อยจำนวนเต็มคูณและ
คำสั่งแบ่งจำนวนเต็มซึ่งมีอยู่ใน SPARC-V8 แต่ไม่มีใน SPARC-V7 กับ
-mcpu=ซุปเปอร์สปาร์กคอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับชิป SuperSPARC เช่น
ใช้ใน SPARCStation 10, 1000 และ 2000 ซีรีส์

กับ -mcpu=สปาร์ไคลต์, GCC สร้างรหัสสำหรับตัวแปร SPARClite ของ SPARC
สถาปัตยกรรม. สิ่งนี้จะเพิ่มการคูณจำนวนเต็ม ขั้นตอนการหารจำนวนเต็มและการสแกน ("ffs")
คำแนะนำที่มีอยู่ใน SPARClite แต่ไม่ใช่ใน SPARC-V7 กับ -mcpu=f930ที่
คอมไพเลอร์ยังเพิ่มประสิทธิภาพให้กับชิป Fujitsu MB86930 ซึ่งเป็นของเดิม
SPARClite ที่ไม่มี FPU กับ -mcpu=f934คอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับ
ชิป Fujitsu MB86934 ซึ่งเป็น SPARClite ล่าสุดที่มี FPU

กับ -mcpu=ประกายไฟ, GCC สร้างรหัสสำหรับตัวแปร SPARClet ของ SPARC
สถาปัตยกรรม. เป็นการบวกจำนวนเต็ม คูณ/สะสม หารจำนวนเต็ม
คำแนะนำขั้นตอนและการสแกน ("ffs") ซึ่งมีอยู่ใน SPARClet แต่ไม่ใช่ใน SPARC-V7 กับ
-mcpu=tsc701คอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับชิป TEMIC SPARClet

กับ -mcpu=v9, GCC สร้างรหัสสำหรับตัวแปร V9 ของสถาปัตยกรรม SPARC นี้
เพิ่มคำสั่งย้ายจำนวนเต็มและเลขทศนิยม 64 บิต, เลขทศนิยมเพิ่มเติม 3 จุด
การลงทะเบียนรหัสเงื่อนไขและคำแนะนำการย้ายตามเงื่อนไข กับ -mcpu=อัลตราสปาร์ก,
คอมไพเลอร์ยังเพิ่มประสิทธิภาพให้กับชิป Sun UltraSPARC I/II/IIIi กับ
-mcpu=อัลตราสปาร์ก3คอมไพเลอร์ยังเพิ่มประสิทธิภาพสำหรับ Sun UltraSPARC
ชิป III/III+/IIIi/IIIi+/IV/IV+ กับ -mcpu=ไนแองการ่า, คอมไพเลอร์นอกจากนี้
ปรับให้เหมาะสมสำหรับชิป Sun UltraSPARC T1 กับ -mcpu=ไนแอการา2, คอมไพเลอร์
เพิ่มประสิทธิภาพสำหรับชิป Sun UltraSPARC T2 กับ -mcpu=ไนแอการา3ที่
คอมไพเลอร์ยังเพิ่มประสิทธิภาพให้กับชิป Sun UltraSPARC T3 กับ -mcpu=ไนแอการา4,
คอมไพเลอร์ยังเพิ่มประสิทธิภาพให้กับชิป Sun UltraSPARC T4

-mtune=ซีพียู_ประเภท
ตั้งค่าพารามิเตอร์การจัดตารางเวลาคำสั่งสำหรับประเภทเครื่อง ซีพียู_ประเภทแต่อย่าตั้งค่า
ชุดคำสั่งหรือชุดลงทะเบียนที่ option -mcpu=ซีพียู_ประเภท หากว่า

ค่าเดียวกันสำหรับ -mcpu=ซีพียู_ประเภท สามารถใช้สำหรับการ -mtune=ซีพียู_ประเภทแต่เท่านั้น but
ค่าที่มีประโยชน์คือค่าที่เลือกการใช้งาน CPU โดยเฉพาะ นั่นคือ
ต้นไซเปรซ, ซูเปอร์สปาร์ก, ไฮเปอร์สปาร์ก, Leon, f930, f934, สปาร์คไลท์86x, tsc701, อัลตร้าสปาร์ก,
อัลตราสปาร์ก3, ไนแอการา, ไนแองการ่า2, ไนแองการ่า3 และ ไนแองการ่า4. ด้วย Solaris พื้นเมืองและ
ชุดเครื่องมือ GNU/Linux, พื้นเมือง ยังสามารถใช้

-mv8plus
-mno-v8plus
กับ -mv8plus, GCC สร้างรหัสสำหรับ SPARC-V8+ ABI ความแตกต่างจาก V8
ABI คือการลงทะเบียนทั่วโลกและการลงทะเบียนภายนอกนั้นถือว่ากว้าง 64 บิต เปิดใช้งานแล้ว
โดยค่าเริ่มต้นบน Solaris ในโหมด 32 บิตสำหรับโปรเซสเซอร์ SPARC-V9 ทั้งหมด

-mvis
-mno-vis
กับ -mvis, GCC สร้างโค้ดที่ใช้ประโยชน์จาก UltraSPARC Visual
ส่วนขยายชุดคำสั่ง ค่าเริ่มต้นคือ -mno-vis.

-mvis2
-mno-vis2
กับ -mvis2, GCC สร้างโค้ดที่ใช้ประโยชน์จากเวอร์ชัน 2.0 ของ UltraSPARC
ส่วนขยายชุดคำสั่งภาพ ค่าเริ่มต้นคือ -mvis2 เมื่อกำหนดเป้าหมายซีพียูที่
รองรับคำสั่งดังกล่าว เช่น UltraSPARC-III และใหม่กว่า การตั้งค่า -mvis2 ด้วย
ชุด -mvis.

-mvis3
-mno-vis3
กับ -mvis3, GCC สร้างโค้ดที่ใช้ประโยชน์จากเวอร์ชัน 3.0 ของ UltraSPARC
ส่วนขยายชุดคำสั่งภาพ ค่าเริ่มต้นคือ -mvis3 เมื่อกำหนดเป้าหมายซีพียูที่
รองรับคำแนะนำดังกล่าว เช่น niagara-3 และใหม่กว่า การตั้งค่า -mvis3 ยังชุด
-mvis2 และ -mvis.

-mpopc
-mno-popc
กับ -mpopc, GCC สร้างรหัสที่ใช้ประโยชน์จากประชากร UltraSPARC
นับคำแนะนำ ค่าเริ่มต้นคือ -mpopc เมื่อกำหนดเป้าหมายซีพียูที่รองรับเช่น
คำแนะนำเช่น Niagara-2 และใหม่กว่า

-mfmaf
-mno-fmaf
กับ -mfmaf, GCC สร้างรหัสที่ใช้ประโยชน์จาก UltraSPARC Fused Multiply-
เพิ่มส่วนขยายทศนิยม ค่าเริ่มต้นคือ -mfmaf เมื่อกำหนดเป้าหมายซีพียูที่
รองรับคำแนะนำดังกล่าว เช่น Niagara-3 และใหม่กว่า

-mfix-at697f
เปิดใช้งานวิธีแก้ปัญหาที่บันทึกไว้สำหรับ erratum เดียวของโปรเซสเซอร์ Atmel AT697F
(ซึ่งสอดคล้องกับ erratum #13 ของโปรเซสเซอร์ AT697E)

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนเพิ่มเติมจากด้านบนในโปรเซสเซอร์ SPARC-V9 ใน 64-bit
สภาพแวดล้อม:

- ลบ.ม
- ลบ.ม
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิต สภาพแวดล้อม 32 บิตตั้งค่า int
ยาวและชี้ไปที่ 32 บิต สภาพแวดล้อม 64 บิตตั้งค่าเป็น 32 บิตและยาวและ
ตัวชี้ไปที่ 64 บิต

-mcmodel=ที่
ตั้งรหัสโมเดลเป็นอย่างใดอย่างหนึ่งของ

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

เมดมิด
รุ่นรหัสกลาง/รหัสกลาง: ที่อยู่ 64 บิต ต้องเชื่อมโยงโปรแกรมในระดับต่ำ
หน่วยความจำ 44 บิต ส่วนข้อความและข้อมูลต้องมีขนาดน้อยกว่า 2GB และ
ส่วนข้อมูลต้องอยู่ภายใน 2GB ของส่วนข้อความ

เมดานี
รุ่นรหัส Medium/Anywhere: ที่อยู่ 64 บิต อาจเชื่อมโยงโปรแกรมได้ทุกที่
ในหน่วยความจำ ข้อความและข้อมูลต้องมีขนาดน้อยกว่า 2GB และข้อมูล
ส่วนจะต้องอยู่ภายใน 2GB ของส่วนข้อความ

ฝัง
โมเดลโค้ด Medium/Anywhere สำหรับระบบฝังตัว: ที่อยู่ 64 บิต, ข้อความ
และเซ็กเมนต์ข้อมูลต้องมีขนาดน้อยกว่า 2GB ทั้งที่เริ่มต้นที่ใดก็ได้ในหน่วยความจำ
(กำหนด ณ เวลาเชื่อมโยง) การลงทะเบียนทั่วโลก %g4 ชี้ไปที่ฐานของข้อมูล
ส่วน โปรแกรมมีการเชื่อมโยงแบบคงที่และไม่รองรับ PIC

-memory-model=เมม-โมเดล
ตั้งค่าโมเดลหน่วยความจำที่บังคับใช้กับโปรเซสเซอร์เป็นหนึ่งใน

ผิดนัด
รุ่นหน่วยความจำเริ่มต้นสำหรับโปรเซสเซอร์และระบบปฏิบัติการ

โรโม คำสั่งหน่วยความจำที่ผ่อนคลาย

ปล คำสั่งซื้อร้านค้าบางส่วน

ใส่ ยอดสั่งซื้อของร้าน

sc ความสอดคล้องตามลำดับ

โมเดลหน่วยความจำเหล่านี้ถูกกำหนดอย่างเป็นทางการในภาคผนวก D ของสถาปัตยกรรม Sparc V9
คู่มือตามที่กำหนดไว้ในฟิลด์ "PSTATE.MM" ของโปรเซสเซอร์

-mstack-ลำเอียง
-mno-stack-ลำเอียง
กับ -mstack-ลำเอียง, GCC ถือว่าตัวชี้สแต็กและตัวชี้เฟรมถ้ามี
ถูกชดเชยโดย -2047 ซึ่งจะต้องเพิ่มกลับเมื่อทำการอ้างอิงเฟรมสแต็ก นี้
เป็นค่าเริ่มต้นในโหมด 64 บิต มิฉะนั้น จะถือว่าไม่มีการชดเชยดังกล่าว

SPU Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนบน SPU:

-mwarn-reloc
-merror-ย้าย
ตัวโหลดสำหรับ SPU ไม่ได้จัดการการย้ายตำแหน่งแบบไดนามิก โดยค่าเริ่มต้น GCC จะให้
เกิดข้อผิดพลาดเมื่อสร้างรหัสที่ต้องมีการย้ายตำแหน่งแบบไดนามิก -mno-ข้อผิดพลาด-reloc
ปิดการใช้งานข้อผิดพลาด -mwarn-reloc จะสร้างคำเตือนแทน

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

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

-msmall-mem
-mlarge-เม็ม
โดยค่าเริ่มต้น GCC จะสร้างโค้ดโดยสมมติว่าที่อยู่นั้นไม่เกิน 18 บิต
กับ -mlarge-เม็ม รหัสถูกสร้างขึ้นที่ถือว่าอยู่แบบ 32 บิตแบบเต็ม

-mstdmain
โดยค่าเริ่มต้น GCC จะลิงก์กับโค้ดเริ่มต้นที่ถือว่าฟังก์ชันหลักแบบ SPU
อินเทอร์เฟซ (ซึ่งมีรายการพารามิเตอร์แหกคอก) กับ -mstdmain, GCC จะเชื่อมโยง
โปรแกรมของคุณเทียบกับรหัสเริ่มต้นที่ถือว่าอินเทอร์เฟซแบบ C99 เป็น "หลัก"
รวมถึงสำเนาของสตริง "argv" ในเครื่อง

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

-mea32
-mea64
คอมไพล์โค้ดโดยสมมติว่าตัวชี้ไปยังพื้นที่ที่อยู่ PPU ที่เข้าถึงผ่าน "__ea"
ตัวระบุพื้นที่แอดเดรสที่มีชื่อมีความกว้าง 32 หรือ 64 บิต ค่าเริ่มต้นคือ 32 บิต
เนื่องจากนี่คือตัวเลือกการเปลี่ยนแปลง ABI จึงต้องคอมไพล์โค้ดอ็อบเจ็กต์ทั้งหมดในไฟล์สั่งการ
ด้วยการตั้งค่าเดียวกัน

-maddress-space-แปลง
-mno-ที่อยู่-พื้นที่-แปลง
อนุญาต/ไม่อนุญาตการปฏิบัติต่อพื้นที่ที่อยู่ "__ea" เป็น superset ของที่อยู่ทั่วไป
ช่องว่าง. สิ่งนี้ทำให้สามารถแสดงประเภทที่ชัดเจนระหว่าง "__ea" และพอยน์เตอร์ทั่วไปได้เช่นเดียวกับ
การแปลงโดยนัยของพอยน์เตอร์ทั่วไปเป็นพอยน์เตอร์ "__ea" ค่าเริ่มต้นคืออนุญาตให้
การแปลงตัวชี้พื้นที่ที่อยู่

-mcache-ขนาด=ขนาดแคช
ตัวเลือกนี้ควบคุมเวอร์ชันของ libgcc ที่คอมไพเลอร์ลิงก์ไปยังไฟล์ปฏิบัติการ
และเลือกแคชที่จัดการด้วยซอฟต์แวร์สำหรับการเข้าถึงตัวแปรในที่อยู่ "__ea"
พื้นที่ที่มีขนาดแคชเฉพาะ ตัวเลือกที่เป็นไปได้สำหรับ ขนาดแคช เป็น 8, 16, 32, 64
และ 128. ขนาดแคชเริ่มต้นคือ 64KB

-matomic-อัพเดท
-mno-atomic-อัพเดท
ตัวเลือกนี้ควบคุมเวอร์ชันของ libgcc ที่คอมไพเลอร์ลิงก์ไปยังไฟล์ปฏิบัติการ
และเลือกว่าจะอัปเดตอะตอมมิกไปยังแคชที่จัดการซอฟต์แวร์ของตัวแปรฝั่ง PPU หรือไม่
ถูกนำมาใช้ หากคุณใช้การอัปเดตแบบอะตอมมิก ให้เปลี่ยนเป็นตัวแปร PPU จากโค้ด SPU โดยใช้
ตัวระบุพื้นที่ที่อยู่ที่มีชื่อ "__ea" จะไม่รบกวนการเปลี่ยนแปลงของ PPU . อื่น
ตัวแปรที่อยู่ในแคชบรรทัดเดียวกันจากรหัส PPU หากคุณไม่ใช้อะตอมมิก
การปรับปรุง การรบกวนดังกล่าวอาจเกิดขึ้น อย่างไรก็ตามการเขียนแคชกลับจะมากกว่า
มีประสิทธิภาพ. ลักษณะการทำงานเริ่มต้นคือการใช้การอัปเดตแบบอะตอมมิก

-mdual-nops
-mdual-nops=n
โดยค่าเริ่มต้น GCC จะแทรก nos เพื่อเพิ่มปัญหาคู่เมื่อคาดว่าจะเพิ่มขึ้น
การปฏิบัติ n สามารถเป็นค่าได้ตั้งแต่ 0 ถึง 10 ค่าที่เล็กกว่า n จะใส่ nos น้อยลง 10
เป็นค่าเริ่มต้น 0 เหมือนกับ -mno-dual-nops. พิการด้วย -คุณ.

-mhint-max-nops=n
จำนวน nos สูงสุดที่จะแทรกสำหรับคำใบ้สาขา คำใบ้สาขาต้องมีอย่างน้อย 8
คำแนะนำจากสาขาที่มันมีผล GCC จะแทรกได้ถึง n nos to
บังคับใช้สิ่งนี้ มิฉะนั้นจะไม่สร้างคำใบ้สาขา

-นาที-สูงสุด-ระยะทาง=n
การเข้ารหัสคำสั่งคำใบ้สาขาจำกัดคำใบ้ให้อยู่ภายใน256
คำแนะนำของสาขาที่มันมีผล โดยค่าเริ่มต้น GCC จะทำให้แน่ใจว่าอยู่ภายใน
125.

-msafe-คำใบ้
แก้ไขข้อผิดพลาดของฮาร์ดแวร์ที่ทำให้ SPU หยุดทำงานโดยไม่มีกำหนด โดยค่าเริ่มต้น GCC
จะแทรกคำสั่ง "hbrp" เพื่อให้แน่ใจว่าแผงนี้จะไม่เกิดขึ้น

Options for System V

ตัวเลือกเพิ่มเติมเหล่านี้มีอยู่ใน System V รีลีส 4 เพื่อความเข้ากันได้กับ other
คอมไพเลอร์บนระบบเหล่านั้น:

-G สร้างวัตถุที่ใช้ร่วมกัน ขอแนะนำว่า -สัญลักษณ์ or - แบ่งปัน มาใช้แทน

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

-Qn ละเว้นจากการเพิ่มคำสั่ง ".ident" ลงในไฟล์เอาต์พุต (นี่เป็นค่าเริ่มต้น)

-วายพีdirs
ค้นหาไดเรกทอรี dirsและไม่มีอื่น ๆ สำหรับห้องสมุดที่ระบุด้วย -l.

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

กระเบื้อง-Gx Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนบน TILE-Gx:

-mcpu=ชื่อ
เลือกประเภทของ CPU ที่จะกำหนดเป้าหมาย ปัจจุบันรองรับประเภทเดียวคือ ไทล์กx.

- ลบ.ม
- ลบ.ม
สร้างรหัสสำหรับสภาพแวดล้อมแบบ 32 บิตหรือ 64 บิต สภาพแวดล้อม 32 บิตตั้งค่า int
ยาวและชี้ไปที่ 32 บิต สภาพแวดล้อม 64 บิตตั้งค่าเป็น 32 บิตและยาวและ
ตัวชี้ไปที่ 64 บิต

ไทล์โปร Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกได้รับการสนับสนุนบน TILEPro:

-mcpu=ชื่อ
เลือกประเภทของ CPU ที่จะกำหนดเป้าหมาย ปัจจุบันรองรับประเภทเดียวคือ ไทล์โปร.

- ลบ.ม
สร้างโค้ดสำหรับสภาพแวดล้อมแบบ 32 บิต ซึ่งตั้งค่า int, long และ pointer เป็น 32 บิต
นี่เป็นพฤติกรรมที่ได้รับการสนับสนุนเท่านั้น ดังนั้นแฟล็กจึงถูกละเว้น

V850 Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกที่กำหนดไว้สำหรับการใช้งาน V850:

-mlong-โทร
-นาทีโทรยาว
ปฏิบัติต่อการโทรทั้งหมดเสมือนอยู่ห่างไกล (ใกล้) หากถือว่าการโทรอยู่ไกล
คอมไพเลอร์จะโหลดฟังก์ชันที่อยู่ในรีจิสเตอร์เสมอ และเรียก indirect
ผ่านตัวชี้

-mno-ep
-เมพ
อย่าปรับให้เหมาะสม (ทำการเพิ่มประสิทธิภาพ) บล็อกพื้นฐานที่ใช้ตัวชี้ดัชนีเดียวกัน 4 หรือมากกว่า
ครั้งเพื่อคัดลอกตัวชี้ไปยังการลงทะเบียน "ep" และใช้ "sld" และ "sst" ที่สั้นกว่า
คำแนะนำ. NS -เมพ ตัวเลือกเปิดอยู่โดยค่าเริ่มต้นหากคุณปรับให้เหมาะสม

-mno-prolog-ฟังก์ชัน
-mprolog-ฟังก์ชั่น
อย่าใช้ (ใช้) ฟังก์ชั่นภายนอกเพื่อบันทึกและกู้คืนการลงทะเบียนที่ prologue
และบทส่งท้ายของฟังก์ชัน ฟังก์ชันภายนอกทำงานช้าลง แต่ใช้โค้ดน้อยลง
พื้นที่ถ้ามีมากกว่าหนึ่งฟังก์ชันบันทึกจำนวนการลงทะเบียนเท่ากัน NS
-mprolog-ฟังก์ชั่น ตัวเลือกเปิดอยู่โดยค่าเริ่มต้นหากคุณปรับให้เหมาะสม

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

-mtda=n
ใส่ตัวแปรสแตติกหรือโกลบอลที่มีขนาดเท่ากับ n ไบต์หรือน้อยกว่าลงในพื้นที่ข้อมูลขนาดเล็ก
ที่ลงทะเบียน "ep" ชี้ไปที่ พื้นที่ข้อมูลขนาดเล็กสามารถเก็บได้ทั้งหมด 256 ไบต์
(128 ไบต์สำหรับการอ้างอิงไบต์)

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

-mzda=n
ใส่ตัวแปรสแตติกหรือโกลบอลที่มีขนาดเท่ากับ n ไบต์หรือน้อยกว่าใน32 .แรก
กิโลไบต์ของหน่วยความจำ

-mv850
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850

-mbig-สวิตช์
สร้างรหัสที่เหมาะสมสำหรับตารางสวิตช์ขนาดใหญ่ ใช้ตัวเลือกนี้เฉพาะในกรณีที่
แอสเซมเบลอร์/ลิงเกอร์บ่นเกี่ยวกับสาขาที่อยู่นอกช่วงภายในตารางสวิตช์

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

-mno-แอป-regs
อ็อพชันนี้จะทำให้ r2 และ r5 เป็นรีจิสเตอร์คงที่

-MV850E2V3
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E2V3 ค่าคงที่ตัวประมวลผลล่วงหน้า
__v850e2v3__ จะถูกกำหนดหากใช้ตัวเลือกนี้

-mv850e2
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E2 ค่าคงที่ตัวประมวลผลล่วงหน้า
__v850e2__ จะถูกกำหนดหากใช้ตัวเลือกนี้

-mv850e1
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E1 ค่าคงที่ตัวประมวลผลล่วงหน้า
__v850e1__ และ __v850e__ จะถูกกำหนดหากใช้ตัวเลือกนี้

-mv850es
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850ES นี่คือนามแฝงสำหรับ -mv850e1
ตัวเลือก

-mv850e
ระบุว่าโปรเซสเซอร์เป้าหมายคือ V850E ค่าคงที่ตัวประมวลผลล่วงหน้า __v850e__
จะถูกกำหนดหากใช้ตัวเลือกนี้

ถ้าไม่ใช่ -mv850 ไม่ -mv850e ไม่ -mv850e1 ไม่ -mv850e2 ไม่ -MV850E2V3 ถูกกำหนดไว้
จากนั้นตัวประมวลผลเป้าหมายเริ่มต้นจะถูกเลือกและสิ่งที่เกี่ยวข้อง __v850*__ ตัวประมวลผลล่วงหน้า
ค่าคงที่จะถูกกำหนด

ค่าคงที่ตัวประมวลผลล่วงหน้า __v850 และ __v851__ ถูกกำหนดไว้เสมอ ไม่ว่า
ตัวแปรโปรเซสเซอร์เป็นเป้าหมาย

-mdisable-callt
ตัวเลือกนี้จะระงับการสร้างคำสั่ง CALLT สำหรับ v850e, v850e1,
v850e2 และ v850e2v3 รสชาติของสถาปัตยกรรม v850 ค่าเริ่มต้นคือ
-mno-disable-callt ซึ่งช่วยให้สามารถใช้คำสั่ง CALLT ได้

VAX Options

ล้อยางขัดเหล่านี้ติดตั้งบนแกน XNUMX (มม.) ผลิตภัณฑ์นี้ถูกผลิตในหลายรูปทรง และหลากหลายเบอร์ความแน่นหนาของปริมาณอนุภาคขัดของมัน จะทำให้ท่านได้รับประสิทธิภาพสูงในการขัดและการใช้งานที่ยาวนาน -m ตัวเลือกถูกกำหนดไว้สำหรับ VAX:

-มิวนิค
ห้ามแสดงคำสั่งกระโดด ("aobleq" เป็นต้น) ที่ Unix assembler
สำหรับ VAX ไม่สามารถจัดการได้ในระยะยาว

-มก
ทำตามคำแนะนำการกระโดดเหล่านั้นโดยสมมติว่าคุณจะประกอบกับ
แอสเซมเบลอร์ GNU

- มก โค้ดเอาต์พุตสำหรับตัวเลขทศนิยมรูปแบบ G แทนรูปแบบ D

วีเอ็กซ์เวิร์คส Options

ตัวเลือกในส่วนนี้กำหนดไว้สำหรับเป้าหมาย VxWorks ทั้งหมด ตัวเลือกเฉพาะสำหรับ
ฮาร์ดแวร์เป้าหมายจะแสดงพร้อมกับตัวเลือกอื่นๆ สำหรับเป้าหมายนั้น

-mrtp
GCC สามารถสร้างโค้ดสำหรับทั้งเคอร์เนล VxWorks และกระบวนการแบบเรียลไทม์ (RTP) นี้
ตัวเลือกเปลี่ยนจากอดีตเป็นหลัง นอกจากนี้ยังกำหนดมาโครตัวประมวลผลล่วงหน้า
"__RTP__"

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

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

-Xbind-ขี้เกียจ
เปิดใช้งานการโยงแบบสันหลังยาวของการเรียกใช้ฟังก์ชัน ตัวเลือกนี้เทียบเท่ากับ -Wl,-z ตอนนี้ และเป็น
กำหนดไว้เพื่อความเข้ากันได้กับ Diab

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

x86-64 Options

เหล่านี้อยู่ภายใต้

เอ็กซ์สตอร์มี่16 Options

ตัวเลือกเหล่านี้ถูกกำหนดไว้สำหรับ Xstormy16:

-msim
เลือกไฟล์เริ่มต้นและสคริปต์ตัวเชื่อมโยงที่เหมาะสมกับโปรแกรมจำลอง

เอ็กซ์เทนซ่า Options

ตัวเลือกเหล่านี้ได้รับการสนับสนุนสำหรับเป้าหมาย Xtensa:

-mconst16
-mno-const16
เปิดหรือปิดการใช้คำสั่ง "CONST16" สำหรับการโหลดค่าคงที่ NS
ปัจจุบันคำสั่ง "CONST16" ไม่ใช่ตัวเลือกมาตรฐานจาก Tensilica เมื่อไหร่
เปิดใช้งาน คำแนะนำ "CONST16" จะใช้แทน "L32R" มาตรฐานเสมอ
คำแนะนำ. การใช้ "CONST16" จะเปิดใช้งานโดยค่าเริ่มต้นก็ต่อเมื่อ "L32R"
ไม่มีคำแนะนำ

-mfused-mad
-mno-ฟิวส์ madd
เปิดหรือปิดการใช้คำสั่งผสม คูณ/บวก และ คูณ/ลบ ใน
ตัวเลือกจุดลอยตัว สิ่งนี้จะไม่มีผลหากตัวเลือกจุดลอยตัวไม่ใช่ด้วย
เปิดใช้งาน การปิดใช้งานคำสั่งการคูณ / บวกและการคูณ / การลบที่หลอมรวมจะบังคับให้
คอมไพเลอร์เพื่อใช้คำสั่งแยกสำหรับการดำเนินการคูณและบวก/ลบ
อาจเป็นที่ต้องการในบางกรณีซึ่งผลลัพธ์ที่ได้ตามมาตรฐาน IEEE 754 ที่เข้มงวดคือ
จำเป็น: คำสั่งการบวก/ลบที่หลอมรวมกันไม่ปัดเศษกลาง
ผลลัพธ์จึงให้ผลลัพธ์ด้วย ข้อมูลเพิ่มเติม บิตของความแม่นยำกว่าที่ระบุโดย
มาตรฐาน IEEE การปิดใช้งานคำสั่งบวก/ลบที่หลอมรวมยังช่วยให้มั่นใจได้ว่า
เอาต์พุตของโปรแกรมไม่ไวต่อความสามารถของคอมไพเลอร์ในการรวมการคูณและ
บวก/ลบการดำเนินการ

-mserialize-ระเหย
-mno-serialize-ระเหย
เมื่อเปิดใช้งานตัวเลือกนี้ GCC จะแทรกคำแนะนำ "MEMW" ก่อนหน่วยความจำ "ระเหย"
การอ้างอิงเพื่อรับประกันความสอดคล้องตามลำดับ ค่าเริ่มต้นคือ -mserialize-ระเหย.
ใช้ -mno-serialize-ระเหย เพื่อละเว้นคำแนะนำ "MEMW"

-mforce ไม่มีรูป
สำหรับเป้าหมาย เช่น GNU/Linux โดยที่โค้ด Xtensa ของโหมดผู้ใช้ทั้งหมดต้องอยู่ในตำแหน่ง-
รหัสอิสระ (PIC) ตัวเลือกนี้จะปิดใช้งาน PIC สำหรับการคอมไพล์โค้ดเคอร์เนล

-mtext-section-ตัวอักษร
-mno-text-section-ตัวอักษร
ควบคุมการรักษาสระตามตัวอักษร ค่าเริ่มต้นคือ -mno-text-section-ตัวอักษร,
ซึ่งวางตัวอักษรไว้ในส่วนที่แยกจากกันในไฟล์ที่ส่งออก สิ่งนี้ทำให้
พูลตัวอักษรที่จะวางใน data RAM/ROM และยังช่วยให้ linker สามารถรวม
พูลตัวอักษรจากไฟล์อ็อบเจ็กต์แยกต่างหากเพื่อลบตัวอักษรที่ซ้ำซ้อนและปรับปรุงโค้ด
ขนาด. กับ -mtext-section-ตัวอักษร, ตัวอักษรจะกระจายอยู่ในส่วนข้อความ
เพื่อให้ใกล้เคียงกับการอ้างอิงมากที่สุด นี่อาจจำเป็น
สำหรับไฟล์ประกอบขนาดใหญ่

-mtarget-จัด
-mno-เป้าหมายจัด
เมื่อเปิดใช้งานตัวเลือกนี้ GCC จะสั่งให้แอสเซมเบลอร์จัดตำแหน่งโดยอัตโนมัติ
คำแนะนำในการลดโทษของสาขาโดยลดความหนาแน่นของรหัสบางส่วน NS
แอสเซมเบลอร์พยายามขยายคำสั่งความหนาแน่นเพื่อจัดแนวเป้าหมายสาขาและ
คำแนะนำตามคำแนะนำการโทร ถ้าก่อนเซฟไม่พอ
คำแนะนำความหนาแน่นเพื่อจัดแนวเป้าหมาย จะไม่มีการดำเนินการขยับขยาย ค่าเริ่มต้นคือ
-mtarget-จัด. ตัวเลือกเหล่านี้ไม่ส่งผลต่อการรักษาการจัดตำแหน่งอัตโนมัติ
คำแนะนำเช่น "LOOP" ซึ่งแอสเซมเบลอร์จะจัดตำแหน่งเสมอไม่ว่าจะโดยการขยับขยาย
คำแนะนำความหนาแน่นหรือโดยการแทรกคำสั่ง no-op

-mlongcalls
-mno-ลองโทร
เมื่อเปิดใช้งานตัวเลือกนี้ GCC จะสั่งให้แอสเซมเบลอร์แปลการโทรโดยตรงไปยัง
การโทรทางอ้อม เว้นแต่จะสามารถระบุได้ว่าเป้าหมายของการโทรโดยตรงอยู่ใน
ช่วงที่อนุญาตโดยคำสั่งการโทร การแปลนี้มักเกิดขึ้นสำหรับการเรียกไปยัง
ทำงานในไฟล์ต้นฉบับอื่น ๆ โดยเฉพาะแอสเซมเบลอร์แปลโดยตรง
คำสั่ง "CALL" ลงใน "L32R" ตามด้วยคำสั่ง "CALLX" ค่าเริ่มต้นคือ
-mno-ลองโทร. ควรใช้ตัวเลือกนี้ในโปรแกรมที่เป้าหมายการโทรสามารถ
อาจอยู่นอกช่วง ตัวเลือกนี้มีการใช้งานในแอสเซมเบลอร์ ไม่ใช่
คอมไพเลอร์ ดังนั้นรหัสแอสเซมบลีที่สร้างโดย GCC จะยังคงแสดงการโทรโดยตรง
คำแนะนำ---ดูโค้ดอ็อบเจ็กต์ที่ถอดประกอบเพื่อดูคำแนะนำจริง
โปรดทราบว่าแอสเซมเบลอร์จะใช้การเรียกทางอ้อมสำหรับการเรียกข้ามไฟล์ทุกครั้ง ไม่ใช่แค่เพียง
ผู้ที่จะอยู่นอกขอบเขตจริงๆ

zซีรี่ส์ Options

เหล่านี้อยู่ภายใต้

Options for รหัส รุ่น การประชุม
ตัวเลือกที่ไม่ขึ้นกับเครื่องเหล่านี้จะควบคุมระเบียบอินเทอร์เฟซที่ใช้ในโค้ด
รุ่น

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

-fbounds-ตรวจสอบ
สำหรับส่วนหน้าที่รองรับ ให้สร้างรหัสเพิ่มเติมเพื่อตรวจสอบว่าดัชนีเคยใช้ไปหรือไม่
อาร์เรย์การเข้าถึงอยู่ในช่วงที่ประกาศไว้ ขณะนี้ได้รับการสนับสนุนโดย .เท่านั้น
ส่วนหน้า Java และ Fortran โดยที่ตัวเลือกนี้มีค่าเริ่มต้นเป็น true และ false
ตามลำดับ

-ftrapv
ตัวเลือกนี้สร้างกับดักสำหรับโอเวอร์โฟลว์ที่ลงชื่อในการบวก การลบ
การดำเนินการคูณ

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

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

-fnon-call-ข้อยกเว้น
สร้างรหัสที่ช่วยให้คำแนะนำในการดักจับข้อยกเว้น โปรดทราบว่าสิ่งนี้
ต้องการการสนับสนุนรันไทม์เฉพาะแพลตฟอร์มที่ไม่มีอยู่ทุกที่ นอกจากนี้,
มันอนุญาตเท่านั้น วางกับดัก คำแนะนำในการส่งข้อยกเว้น เช่น การอ้างอิงหน่วยความจำ หรือ
คำแนะนำจุดลอยตัว ไม่อนุญาตให้มีการโยนข้อยกเว้นโดยพลการ
ตัวจัดการสัญญาณเช่น "SIGALRM"

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

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

-fpcc-struct-return
ส่งคืนค่า "short" "struct" และ "union" ในหน่วยความจำเหมือนกับค่าที่ยาวกว่า แทนที่จะเป็นใน
ทะเบียน อนุสัญญานี้มีประสิทธิภาพน้อยกว่า แต่มีข้อได้เปรียบในการอนุญาต
ความสามารถในการทำงานร่วมกันระหว่างไฟล์ที่คอมไพล์ GCC และไฟล์ที่คอมไพล์ด้วยคอมไพเลอร์อื่น
โดยเฉพาะ Portable C Compiler (pcc)

แบบแผนที่แม่นยำสำหรับการส่งคืนโครงสร้างในหน่วยความจำขึ้นอยู่กับเป้าหมาย
มาโครการกำหนดค่า

โครงสร้างสั้นและสหภาพแรงงานคือโครงสร้างที่มีขนาดและการจัดตำแหน่งตรงกับบางส่วน
ประเภทจำนวนเต็ม

คำเตือน: รหัสที่คอมไพล์ด้วย -fpcc-struct-return สวิตช์ไม่รองรับไบนารี
ด้วยรหัสที่คอมไพล์ด้วย -freg-struct-กลับ สวิตซ์. ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น

-freg-struct-กลับ
ส่งคืนค่า "struct" และ "union" ในรีจิสเตอร์เมื่อเป็นไปได้ นี้มีประสิทธิภาพมากขึ้น
สำหรับโครงสร้างขนาดเล็กกว่า -fpcc-struct-return.

หากคุณระบุไม่ -fpcc-struct-return ไม่ -freg-struct-กลับ, GCC เริ่มต้นเป็น
แบบแผนใดก็ตามที่เป็นมาตรฐานสำหรับเป้าหมาย หากไม่มีข้อตกลงมาตรฐาน
GCC เริ่มต้นเป็น -fpcc-struct-returnยกเว้นเป้าหมายที่ GCC เป็นหลัก
คอมไพเลอร์ ในกรณีเหล่านี้ เราสามารถเลือกมาตรฐาน และเราเลือกสิ่งที่มีประสิทธิภาพมากกว่า
ลงทะเบียนทางเลือกในการคืนสินค้า

คำเตือน: รหัสที่คอมไพล์ด้วย -freg-struct-กลับ สวิตช์ไม่รองรับไบนารี
ด้วยรหัสที่คอมไพล์ด้วย -fpcc-struct-return สวิตซ์. ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น

-fshort-enums
จัดสรรให้กับประเภท "enum" ได้มากเท่าที่ต้องการสำหรับช่วงที่ประกาศของ
ค่าที่เป็นไปได้ โดยเฉพาะประเภท "enum" จะเทียบเท่ากับที่เล็กที่สุด
ชนิดจำนวนเต็มที่มีเนื้อที่เพียงพอ

คำเตือน: -fshort-enums สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่ไบนารี
เข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น

-fshort-ดับเบิ้ล
ใช้ขนาดเดียวกันสำหรับ "สองเท่า" สำหรับ "ลอย"

คำเตือน: -fshort-ดับเบิ้ล สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่ไบนารี
เข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น

-fshort-wchar
แทนที่ประเภทพื้นฐานสำหรับ wchar_t ที่จะ Short ไม่ได้ลงนาม int แทนการ
ค่าเริ่มต้นสำหรับเป้าหมาย ตัวเลือกนี้มีประโยชน์สำหรับการสร้างโปรแกรมให้ทำงานภายใต้
ไวน์.

คำเตือน: -fshort-wchar สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่ไบนารี
เข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น ใช้เพื่อให้สอดคล้องกับการไม่
อินเทอร์เฟซไบนารีของแอปพลิเคชันเริ่มต้น

-fno-ธรรมดา
ในโค้ด C ควบคุมตำแหน่งของตัวแปรส่วนกลางที่ยังไม่ได้กำหนดค่าเริ่มต้น คอมไพเลอร์ Unix C
อนุญาตให้ใช้คำจำกัดความของตัวแปรดังกล่าวได้หลายแบบตามธรรมเนียมที่แตกต่างกัน
หน่วยคอมไพล์โดยการวางตัวแปรในบล็อกทั่วไป นี่คือพฤติกรรม
ระบุโดย -fcommonและเป็นค่าเริ่มต้นสำหรับ GCC สำหรับเป้าหมายส่วนใหญ่ ในทางกลับกัน,
ISO C ไม่ต้องการพฤติกรรมนี้ และในบางเป้าหมายอาจมีความเร็วหรือรหัส
การปรับขนาดของการอ้างอิงตัวแปร NS -fno-ธรรมดา ตัวเลือกระบุว่า
คอมไพเลอร์ควรวางตัวแปรส่วนกลางที่ยังไม่ได้กำหนดค่าไว้ในส่วนข้อมูลของอ็อบเจกต์
file แทนที่จะสร้างเป็นบล็อกทั่วไป นี้มีผลว่าถ้า
มีการประกาศตัวแปรเดียวกัน (โดยไม่มี "extern") ในการรวบรวมสองแบบที่แตกต่างกัน คุณจะ
ได้รับข้อผิดพลาดที่มีหลายคำจำกัดความเมื่อคุณเชื่อมโยง ในกรณีนี้คุณต้องคอมไพล์
กับ -fcommon แทนที่. กำลังรวบรวมกับ -fno-ธรรมดา เป็นประโยชน์ต่อเป้าหมายที่มัน
ให้ประสิทธิภาพที่ดีขึ้นหรือหากคุณต้องการตรวจสอบว่าโปรแกรมจะทำงานบน
ระบบอื่นๆ ที่ปฏิบัติต่อการประกาศตัวแปรที่ไม่ได้กำหนดค่าเริ่มต้นด้วยวิธีนี้เสมอ

-fno-ident
ไม่ต้องสนใจ #บัตรประจำตัว คำสั่ง

-finhibit-size-คำสั่ง
อย่าส่งออกคำสั่งแอสเซมเบลอร์ ".size" หรือสิ่งอื่นใดที่อาจก่อให้เกิดปัญหา
ถ้าฟังก์ชันถูกแบ่งตรงกลาง และสองส่วนวางที่ตำแหน่งไกล
แยกจากกันในความทรงจำ ตัวเลือกนี้ใช้เมื่อคอมไพล์ crtstuff.c; คุณไม่จำเป็นต้อง
เพื่อใช้สำหรับสิ่งอื่น

-fverbose-asm
ใส่ข้อมูลคำอธิบายเพิ่มเติมในรหัสแอสเซมบลีที่สร้างขึ้นเพื่อให้มีมากขึ้น
อ่านได้ โดยทั่วไป ตัวเลือกนี้ใช้ได้เฉพาะกับผู้ที่ต้องการอ่าน . เท่านั้น
สร้างรหัสแอสเซมบลี (บางทีในขณะที่ดีบั๊กคอมไพเลอร์เอง)

-fno-รายละเอียด-asmค่าดีฟอลต์ทำให้ข้อมูลพิเศษถูกละเว้นและ is
มีประโยชน์เมื่อเปรียบเทียบไฟล์แอสเซมเบลอร์สองไฟล์

-frecord-gcc-สวิตช์
สวิตช์นี้ทำให้บรรทัดคำสั่งที่ใช้เรียกคอมไพเลอร์เป็น
บันทึกลงในไฟล์วัตถุที่กำลังสร้าง สวิตช์นี้ใช้งานได้เท่านั้น
ในบางเป้าหมายและรูปแบบที่แน่นอนของการบันทึกคือรูปแบบไฟล์เป้าหมายและไบนารี
ขึ้นอยู่กับ แต่มักจะใช้รูปแบบของส่วนที่มีข้อความ ASCII นี้
สวิตช์เกี่ยวข้องกับ -fverbose-asm เปลี่ยน แต่นั่นเปลี่ยนเฉพาะระเบียน
ข้อมูลในไฟล์เอาท์พุตของแอสเซมเบลอร์เป็นความคิดเห็น ดังนั้นจึงไม่ไปถึงอ็อบเจกต์
ไฟล์. ดูสิ่งนี้ด้วย -grecord-gcc-สวิตช์ สำหรับวิธีอื่นในการจัดเก็บตัวเลือกคอมไพเลอร์ลงใน
ไฟล์อ็อบเจ็กต์

-fpic
สร้างรหัสตำแหน่งอิสระ (PIC) ที่เหมาะสำหรับใช้ในไลบรารีที่ใช้ร่วมกัน if
รองรับเครื่องเป้าหมาย รหัสดังกล่าวเข้าถึงที่อยู่คงที่ทั้งหมดผ่าน a
ตารางออฟเซ็ตทั่วโลก (GOT) ตัวโหลดแบบไดนามิกแก้ไขรายการ GOT เมื่อ
โปรแกรมเริ่มทำงาน (ไดนามิกโหลดเดอร์ไม่ได้เป็นส่วนหนึ่งของ GCC มันเป็นส่วนหนึ่งของปฏิบัติการ
ระบบ). หากขนาด GOT สำหรับไฟล์สั่งการที่เชื่อมโยงเกินขนาดสูงสุดเฉพาะเครื่อง
ขนาด คุณได้รับข้อความแสดงข้อผิดพลาดจากตัวเชื่อมโยงที่ระบุว่า -fpic ไม่สำเร็จ; ใน
กรณีนั้นให้คอมไพล์ใหม่ด้วย -fPIC แทนที่. (สูงสุดเหล่านี้คือ 8k ใน SPARC และ 32k
ใน m68k และ RS/6000 386 ไม่มีขีดจำกัดดังกล่าว)

รหัสที่ไม่ขึ้นกับตำแหน่งต้องการการสนับสนุนพิเศษ ดังนั้นจึงใช้ได้เฉพาะกับ
บางเครื่อง สำหรับ 386 GCC รองรับ PIC สำหรับ System V แต่ไม่ใช่สำหรับ Sun
386i. รหัสที่สร้างขึ้นสำหรับ IBM RS/6000 นั้นไม่ขึ้นกับตำแหน่งเสมอ

เมื่อตั้งค่าสถานะนี้ มาโคร "__pic__" และ "__PIC__" ถูกกำหนดเป็น 1

-fPIC
หากเครื่องเป้าหมายรองรับ ให้ปล่อยรหัสที่ไม่ขึ้นกับตำแหน่ง เหมาะสำหรับ
การเชื่อมโยงแบบไดนามิกและการหลีกเลี่ยงข้อจำกัดใดๆ เกี่ยวกับขนาดของตารางออฟเซ็ตส่วนกลาง นี้
ตัวเลือกสร้างความแตกต่างใน m68k, PowerPC และ SPARC

รหัสที่ไม่ขึ้นกับตำแหน่งต้องการการสนับสนุนพิเศษ ดังนั้นจึงใช้ได้เฉพาะกับ
บางเครื่อง

เมื่อตั้งค่าสถานะนี้ มาโคร "__pic__" และ "__PIC__" ถูกกำหนดเป็น 2

-fpie
-fPIE
ตัวเลือกเหล่านี้คล้ายกับ -fpic และ -fPICแต่สร้างรหัสตำแหน่งอิสระ
สามารถเชื่อมโยงกับไฟล์ปฏิบัติการเท่านั้น โดยปกติตัวเลือกเหล่านี้จะใช้เมื่อ -พาย GCC
จะใช้ตัวเลือกระหว่างการเชื่อมโยง

-fpie และ -fPIE ทั้งกำหนดมาโคร "__pie__" และ "__PIE__" มาโครมี
ค่า 1 สำหรับ -fpie และ 2 สำหรับ -fPIE.

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

-แก้ไขแล้ว-reg
รักษาทะเบียนชื่อ reg เป็นทะเบียนถาวร รหัสที่สร้างขึ้นไม่ควรอ้างถึง
มัน (ยกเว้นบางทีอาจเป็นตัวชี้สแต็ก ตัวชี้เฟรม หรือในบทบาทคงที่อื่นๆ)

reg ต้องเป็นชื่อทะเบียน ชื่อการลงทะเบียนที่ยอมรับเป็นเครื่องเฉพาะ
และถูกกำหนดไว้ในมาโคร "REGISTER_NAMES" ในไฟล์มาโครคำอธิบายเครื่อง

แฟล็กนี้ไม่มีรูปแบบเชิงลบ เนื่องจากระบุตัวเลือกสามทาง

-fcall-มือสอง-reg
รักษาทะเบียนชื่อ reg เป็นรีจิสเตอร์ที่จัดสรรได้ซึ่งถูกปิดบังโดยฟังก์ชัน
โทร. อาจมีการจัดสรรชั่วคราวหรือตัวแปรที่ไม่อยู่ใน a
เรียก. ฟังก์ชันที่คอมไพล์ด้วยวิธีนี้จะไม่บันทึกและกู้คืนรีจิสเตอร์ reg.

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

แฟล็กนี้ไม่มีรูปแบบเชิงลบ เนื่องจากระบุตัวเลือกสามทาง

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

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

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

แฟล็กนี้ไม่มีรูปแบบเชิงลบ เนื่องจากระบุตัวเลือกสามทาง

-fpack-struct[= .]n]
หากไม่มีค่าที่ระบุ ให้รวมส่วนประกอบโครงสร้างทั้งหมดเข้าด้วยกันโดยไม่มีรู เมื่อ
มีการระบุค่า (ซึ่งต้องเป็นกำลังสองน้อย) สมาชิกโครงสร้างแพ็ค
ตามค่านี้ แสดงถึงการจัดตำแหน่งสูงสุด (นั่นคือ วัตถุที่มี
ข้อกำหนดการจัดตำแหน่งเริ่มต้นที่ใหญ่กว่านี้ ผลลัพธ์อาจไม่ได้จัดตำแหน่ง
ในตำแหน่งที่เหมาะสมต่อไป

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

-finstrument-ฟังก์ชั่น
สร้างการเรียกเครื่องมือวัดสำหรับการเข้าและออกจากฟังก์ชัน หลังเลิกงาน
รายการและก่อนออกจากฟังก์ชัน ฟังก์ชันโปรไฟล์ต่อไปนี้จะถูกเรียก
ด้วยที่อยู่ของฟังก์ชันปัจจุบันและไซต์การโทร (ในบางแพลตฟอร์ม
"__builtin_return_address" ไม่ทำงานเกินฟังก์ชันปัจจุบัน ดังนั้น callsite
ข้อมูลอาจไม่สามารถใช้ได้กับฟังก์ชันการทำโปรไฟล์ มิฉะนั้น)

เป็นโมฆะ __cyg_profile_func_enter (เป็นโมฆะ * this_fn,
เป็นโมฆะ *call_site);
เป็นโมฆะ __cyg_profile_func_exit (เป็นโมฆะ * this_fn,
เป็นโมฆะ *call_site);

อาร์กิวเมนต์แรกคือแอดเดรสของจุดเริ่มต้นของฟังก์ชันปัจจุบัน ซึ่งอาจจะเป็น
มองขึ้นไปในตารางสัญลักษณ์

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

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

-finstrument-functions-exclude-file-list=ไฟล์,ไฟล์...
ตั้งค่ารายการฟังก์ชันที่ไม่รวมอยู่ในเครื่องมือวัด (ดูคำอธิบาย
ของ "-finstrument-functions") หากไฟล์ที่มีนิยามฟังก์ชันตรงกัน
กับหนึ่งใน ไฟล์ฟังก์ชันนั้นจะไม่ถูกวัด การแข่งขันเสร็จสิ้นเมื่อ
สตริงย่อย: ถ้า ไฟล์ พารามิเตอร์เป็นสตริงย่อยของชื่อไฟล์ซึ่งถือว่าเป็น
เป็นการแข่งขัน

ตัวอย่างเช่น:

-finstrument-functions-exclude-file-list=/bits/stl,include/sys

จะไม่รวมฟังก์ชันอินไลน์ที่กำหนดไว้ในไฟล์ที่มีชื่อพาธที่มี "/bits/stl"
หรือ "รวม/sys"

หากคุณต้องการใส่ตัวอักษร ',' ลงในตัวใดตัวหนึ่งด้วยเหตุผลบางอย่าง ซิม, เขียน ','. สำหรับ
ตัวอย่าง "-finstrument-functions-exclude-file-list=',,tmp'" (สังเกตเครื่องหมายคำพูดเดียว
รอบตัวเลือก)

-finstrument-functions-exclude-function-list=ซิม,ซิม...
สิ่งนี้คล้ายกับ "-finstrument-functions-exclude-file-list" แต่ตัวเลือกนี้จะตั้งค่า
รายการชื่อฟังก์ชันที่จะแยกออกจากเครื่องมือวัด ชื่อฟังก์ชันto
bematched คือชื่อที่ผู้ใช้มองเห็นได้ เช่น "vector blah(const vector &)",
ไม่ใช่ชื่อที่สับสนภายใน (เช่น "_Z4blahRSt6vectorIiSaIiEE") การแข่งขันเสร็จสิ้น
ในสตริงย่อย: ถ้า ซิม พารามิเตอร์เป็นสตริงย่อยของชื่อฟังก์ชัน มันคือ
ถือว่าเป็นแมตช์ สำหรับตัวระบุเพิ่มเติม C99 และ C++ ชื่อฟังก์ชัน
ต้องระบุเป็น UTF-8 ไม่ใช้ชื่ออักขระสากล

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

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

คุณสามารถระบุพารามิเตอร์สตริงเพิ่มเติมได้: "ไม่" หมายถึงไม่มีการตรวจสอบ "ทั่วไป"
หมายถึง บังคับให้ใช้การตรวจสอบแบบเก่า "เฉพาะ" หมายถึง ใช้การตรวจสอบที่ดีที่สุด
วิธีการและเทียบเท่ากับเปล่า -fstack-ตรวจสอบ.

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

1. แก้ไขกลยุทธ์การจัดสรรสำหรับวัตถุขนาดใหญ่: จะถูกจัดสรรเสมอ
แบบไดนามิกหากขนาดเกินเกณฑ์ที่กำหนด

2. แก้ไขการจำกัดขนาดของสแตติกเฟรมของฟังก์ชัน: เมื่อเติม a
ฟังก์ชันเฉพาะ การตรวจสอบสแต็กไม่น่าเชื่อถือและมีการออกคำเตือนโดย
คอมไพเลอร์

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

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

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

ตัวอย่างเช่น ถ้า stack เริ่มต้นที่ Absolute address 0x80000000 และเติบโตต่ำลง
คุณสามารถใช้แฟล็ก -fstack-limit- symbol=__stack_limit และ
-Wl,--defsym,__stack_limit=0x7ffe0000 เพื่อบังคับใช้ขีด จำกัด สแต็ก 128KB สังเกตว่า
สิ่งนี้อาจใช้งานได้กับตัวเชื่อมโยง GNU เท่านั้น

-fsplit-กอง
สร้างโค้ดเพื่อแยกสแต็กโดยอัตโนมัติก่อนที่จะโอเวอร์โฟลว์ ผลลัพท์ที่ได้
โปรแกรมมีสแต็กที่ไม่ต่อเนื่องกันซึ่งสามารถโอเวอร์โฟลว์ได้ก็ต่อเมื่อโปรแกรมไม่สามารถ
จัดสรรหน่วยความจำเพิ่มเติม สิ่งนี้มีประโยชน์มากที่สุดเมื่อรันโปรแกรมเธรด เนื่องจากมัน
ไม่จำเป็นต้องคำนวณขนาดสแต็กที่ดีเพื่อใช้สำหรับแต่ละเธรดอีกต่อไป นี่คือ
ขณะนี้ใช้งานเฉพาะสำหรับ i386 และ x86_64 แบ็กเอนด์ที่รัน GNU/Linux

เมื่อคอมไพล์โค้ดด้วย -fsplit-กอง รหัสการโทรที่คอมไพล์โดยไม่มี -fsplit-กองมี
อาจมีพื้นที่สแต็กไม่มากนักสำหรับโค้ดหลังที่จะรัน หากรวบรวมทั้งหมด
รหัสรวมทั้งรหัสห้องสมุดด้วย -fsplit-กอง ไม่ใช่ตัวเลือก ดังนั้นตัวเชื่อมโยงสามารถ
แก้ไขการโทรเหล่านี้เพื่อให้โค้ดคอมไพล์โดยไม่ต้อง -fsplit-กอง มักจะมีขนาดใหญ่
ซ้อนกัน. รองรับสิ่งนี้ใน gold linker ใน GNU binutils รีลีส
2.21 และใหม่กว่า

-fleading-ขีดเส้นใต้
ตัวเลือกนี้และคู่กัน -fno-ชั้นนำขีดเส้นใต้, บังคับเปลี่ยนวิธี C
สัญลักษณ์แสดงอยู่ในไฟล์อ็อบเจ็กต์ การใช้งานอย่างหนึ่งคือการช่วยเชื่อมโยงกับมรดก
รหัสการประกอบ

คำเตือน: -fleading-ขีดเส้นใต้ สวิตช์ทำให้ GCC สร้างรหัสที่ไม่ใช่
ไบนารีเข้ากันได้กับรหัสที่สร้างขึ้นโดยไม่มีสวิตช์นั้น ใช้เพื่อให้สอดคล้องกับ a
อินเทอร์เฟซไบนารีของแอปพลิเคชันที่ไม่ใช่ค่าเริ่มต้น ไม่ใช่ทุกเป้าหมายที่ให้การสนับสนุนอย่างเต็มที่
สำหรับสวิตช์นี้

-ftls-รุ่น=แบบ
เปลี่ยนโมเดลการจัดเก็บ thread-local ที่จะใช้ NS แบบ อาร์กิวเมนต์ควรเป็นหนึ่งใน
"global-dynamic", "local-dynamic", "initial-exec" หรือ "local-exec"

ค่าเริ่มต้นโดยไม่ต้อง -fpic คือ "initial-exec"; กับ -fpic ค่าเริ่มต้นคือ
"โลกไดนามิก".

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

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

คำอธิบายที่ดีเกี่ยวกับประโยชน์ที่เสนอโดยการทำให้แน่ใจว่าสัญลักษณ์ ELF นั้นถูกต้อง
การมองเห็นได้รับจาก "วิธีการเขียนไลบรารีที่ใช้ร่วมกัน" โดย Ulrich Drepper (ซึ่งสามารถเป็น .ได้
พบได้ที่http://people.redhat.com/~drepper/>)---แต่ก็สร้างโซลูชันที่ยอดเยี่ยมขึ้น
เป็นไปได้โดยตัวเลือกนี้เพื่อทำเครื่องหมายสิ่งที่ซ่อนไว้เมื่อค่าเริ่มต้นเป็นสาธารณะคือการทำ
ค่าเริ่มต้นที่ซ่อนอยู่และทำเครื่องหมายสิ่งที่เป็นสาธารณะ นี่เป็นบรรทัดฐานของ DLL บน Windows และ
กับ -fvisibility=ซ่อนอยู่ และ "__attribute__ ((visibility("default")))" แทน
"__declspec(dllexport)" คุณได้รับความหมายที่เกือบจะเหมือนกันพร้อมไวยากรณ์ที่เหมือนกัน
ซึ่งเป็นประโยชน์อย่างมากสำหรับผู้ที่ทำงานข้ามแพลตฟอร์ม

สำหรับผู้ที่เพิ่มการมองเห็นรองรับรหัสที่มีอยู่ คุณอาจพบ #ปรากมา GCC
ความชัดเจน ของการใช้งาน ใช้งานได้โดยคุณแนบประกาศที่คุณต้องการตั้งค่า
การมองเห็นด้วย (เช่น) #ปรากมา GCC ความชัดเจน ดัน (ซ่อน) และ #ปรากมา GCC
ความชัดเจน ป๊อป. โปรดจำไว้ว่าควรดูสัญลักษณ์การมองเห็น as ส่วนหนึ่ง of
API อินเตอร์เฟซ สัญญา และด้วยเหตุนี้โค้ดใหม่ทั้งหมดจึงควรระบุการเปิดเผยเสมอเมื่อ
ไม่ใช่ค่าเริ่มต้น กล่าวคือ ประกาศเฉพาะสำหรับใช้ภายใน DSO ในพื้นที่ควร เสมอ
ถูกทำเครื่องหมายอย่างชัดเจนว่าถูกซ่อนเพื่อหลีกเลี่ยงค่าใช้จ่ายทางอ้อม PLT --- การทำเช่นนี้
ชัดเจนมากยังช่วยให้อ่านง่ายและจัดทำรหัสด้วยตนเอง สังเกตว่า
เนื่องจากข้อกำหนดข้อกำหนด ISO C++ ตัวดำเนินการใหม่ และตัวดำเนินการลบต้อง
เป็นการมองเห็นเริ่มต้นเสมอ

โปรดทราบว่าส่วนหัวจากภายนอกโครงการของคุณ โดยเฉพาะส่วนหัวของระบบและ
ส่วนหัวจากไลบรารีอื่น ๆ ที่คุณใช้ อาจไม่ได้คาดหวังให้คอมไพล์ด้วย
การมองเห็นอื่นที่ไม่ใช่ค่าเริ่มต้น คุณอาจต้องพูดอย่างชัดเจนว่า #ปรากมา GCC
ความชัดเจน กด (ค่าเริ่มต้น) ก่อนที่จะรวมส่วนหัวดังกล่าว

extern การประกาศไม่ได้รับผลกระทบจาก -การมองเห็นได้ชัดเจนดังนั้นรหัสจำนวนมากจึงสามารถ
เรียบเรียงใหม่ด้วย -fvisibility=ซ่อนอยู่ โดยไม่มีการปรับเปลี่ยน อย่างไรก็ตาม นี่หมายความว่า
โทรไป extern ฟังก์ชันที่ไม่มีการมองเห็นที่ชัดเจนจะใช้ PLT ดังนั้นจึงมีมากกว่า
มีประสิทธิภาพในการใช้งาน __คุณลักษณะ ((ทัศนวิสัย)) และ / หรือ #ปรากมา GCC ความชัดเจน ที่จะบอก
คอมไพเลอร์ซึ่ง extern การประกาศควรถือเป็นการซ่อนเร้น

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

ภาพรวมเทคนิค ประโยชน์ และวิธีการใช้อยู่ที่
<http://gcc.gnu.org/wiki/Visibility>.

-fstrict ระเหยบิตฟิลด์
ควรใช้ตัวเลือกนี้หากเข้าถึงบิตฟิลด์ที่ระเหยได้ (หรือโครงสร้างอื่นๆ
ฟิลด์แม้ว่าคอมไพเลอร์มักจะให้เกียรติประเภทเหล่านั้นอยู่แล้ว) ควรใช้ single
การเข้าถึงความกว้างของประเภทของฟิลด์ จัดชิดกับการจัดตำแหน่งที่เป็นธรรมชาติถ้าเป็นไปได้
ตัวอย่างเช่น เป้าหมายที่มีการลงทะเบียนอุปกรณ์ต่อพ่วงที่แมปหน่วยความจำอาจต้องการทั้งหมดเช่น
เข้าถึงได้กว้าง 16 บิต; ด้วยแฟล็กนี้ ผู้ใช้สามารถประกาศบิตต่อพ่วงทั้งหมด
ฟิลด์เป็น "unsigned short" (สมมติว่า short คือ 16 บิตสำหรับเป้าหมายเหล่านี้) เพื่อบังคับ GCC
เพื่อใช้การเข้าถึงแบบ 16 บิตแทนการเข้าถึงแบบ 32 บิตที่มีประสิทธิภาพมากกว่า

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

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

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

และพวกเรา


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

โปรดทราบว่าคุณยังสามารถระบุสถานที่ที่จะค้นหาโดยใช้ตัวเลือกเช่น -B, -I และ -L.
สิ่งเหล่านี้มีความสำคัญเหนือกว่าสถานที่ที่ระบุโดยใช้ตัวแปรสภาพแวดล้อม ซึ่งในทางกลับกัน
มีความสำคัญเหนือกว่าที่ระบุโดยการกำหนดค่าของ GCC

ภาษา
LC_CTYPE
LC_MESSAGES
LC_ALL
ตัวแปรสภาพแวดล้อมเหล่านี้ควบคุมวิธีที่ GCC ใช้ข้อมูลการแปลเป็นภาษาท้องถิ่น
ซึ่งช่วยให้ GCC สามารถทำงานร่วมกับอนุสัญญาระดับชาติต่างๆ GCC ตรวจสอบสถานที่
หมวดหมู่ LC_CTYPE และ LC_MESSAGES หากมีการกำหนดค่าให้ทำเช่นนั้น สถานที่เหล่านี้
หมวดหมู่สามารถตั้งค่าเป็นค่าใด ๆ ที่การติดตั้งของคุณรองรับ ค่าทั่วไปคือ
en_GB.UTF-8 สำหรับภาษาอังกฤษในสหราชอาณาจักรที่เข้ารหัสแบบ UTF-8

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

พื้นที่ LC_MESSAGES ตัวแปรสภาพแวดล้อมระบุภาษาที่จะใช้ในการวินิจฉัย
ข้อความ

ถ้า LC_ALL ตัวแปรสภาพแวดล้อมถูกตั้งค่าไว้ จะแทนที่ค่าของ LC_CTYPE และ
LC_MESSAGES; มิฉะนั้น, LC_CTYPE และ LC_MESSAGES ค่าเริ่มต้นเป็นค่าของ ภาษา
ตัวแปรสภาพแวดล้อม หากไม่มีการตั้งค่าตัวแปรเหล่านี้ GCC จะใช้ค่าเริ่มต้นเป็นแบบดั้งเดิม
ค พฤติกรรมภาษาอังกฤษ

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

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

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

If GCC_EXEC_PREFIX ไม่ได้ตั้งค่า GCC จะพยายามหาคำนำหน้าที่เหมาะสมถึง
ใช้ตามชื่อพาธที่เรียกใช้

หาก GCC ไม่พบโปรแกรมย่อยโดยใช้คำนำหน้าที่ระบุ GCC จะพยายามค้นหาใน
สถานที่ปกติสำหรับโปรแกรมย่อย

ค่าเริ่มต้นของ GCC_EXEC_PREFIX is คำนำหน้า/lib/gcc/ ที่ไหน อุปสรรค เป็นคำนำหน้าของ
คอมไพเลอร์ที่ติดตั้ง ในหลายกรณี อุปสรรค คือค่าของ "prefix" เมื่อคุณรัน the
กำหนดค่า ต้นฉบับ

คำนำหน้าอื่นๆ ที่ระบุด้วย -B มีความสำคัญเหนือคำนำหน้านี้

คำนำหน้านี้ยังใช้สำหรับการค้นหาไฟล์เช่น crt0.o ที่ใช้ในการเชื่อม

นอกจากนี้ คำนำหน้ายังใช้ในลักษณะที่ผิดปกติในการค้นหาไดเร็กทอรีที่จะค้นหา
สำหรับไฟล์ส่วนหัว สำหรับแต่ละไดเร็กทอรีมาตรฐานที่มีชื่อขึ้นต้นโดยปกติ
กับ /usr/local/lib/gcc (ให้แม่นยำยิ่งขึ้นด้วยค่าของ GCC_INCLUDE_DIR), GCC พยายาม
แทนที่ที่ขึ้นต้นด้วยคำนำหน้าที่ระบุเพื่อสร้างไดเร็กทอรีสำรอง
ชื่อ. ดังนั้นด้วย -บีฟู/, GCC จะค้นหา ฟู/บาร์ ที่ปกติจะค้นหา
/usr/local/lib/bar. ไดเร็กทอรีสำรองเหล่านี้จะถูกค้นหาก่อน; มาตรฐาน
ไดเรกทอรีมาต่อไป หากไดเร็กทอรีมาตรฐานเริ่มต้นด้วย configuration อุปสรรค แล้วก็
ค่าของ อุปสรรค ถูกแทนที่ด้วย GCC_EXEC_PREFIX เมื่อค้นหาไฟล์ส่วนหัว

คอมไพเลอร์_PATH
คุณค่าของ คอมไพเลอร์_PATH เป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนเหมือน เส้นทาง.
GCC ลองใช้ไดเร็กทอรีที่ระบุเมื่อค้นหาโปรแกรมย่อย หากไม่สามารถ
ค้นหาโปรแกรมย่อยโดยใช้ GCC_EXEC_PREFIX.

Library_Path
คุณค่าของ Library_Path เป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนเหมือน เส้นทาง.
เมื่อกำหนดค่าเป็นคอมไพเลอร์ดั้งเดิม GCC จะพยายามไดเร็กทอรีที่ระบุเมื่อ
ค้นหาไฟล์ linker พิเศษ ถ้าหาไม่เจอโดยใช้ GCC_EXEC_PREFIX.
การลิงก์โดยใช้ GCC ยังใช้ไดเร็กทอรีเหล่านี้เมื่อค้นหาไลบรารีทั่วไป
สำหรับ -l ตัวเลือก (แต่ไดเร็กทอรีที่ระบุด้วย -L มาก่อน).

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

ซี-จิส
จดจำอักขระ JIS

ซี-เอสจิส
จดจำอักขระ SJIS

C-EUCJP
รู้จักอักขระ EUCJP

If ภาษา ไม่ได้กำหนดไว้หรือหากมีค่าอื่นแล้วคอมไพเลอร์จะใช้
mblen และ mbtowc ตามที่กำหนดโดยสถานที่เริ่มต้นเพื่อรับรู้และแปล multibyte
อักขระ

ตัวแปรสภาพแวดล้อมเพิ่มเติมบางตัวส่งผลต่อพฤติกรรมของตัวประมวลผลล่วงหน้า

ซีพีเอธ
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
ค่าของตัวแปรแต่ละตัวคือรายการของไดเร็กทอรีคั่นด้วยอักขระพิเศษมาก
กดไลก์ เส้นทางเพื่อค้นหาไฟล์ส่วนหัว ตัวละครพิเศษ,
"PATH_SEPARATOR" ขึ้นอยู่กับเป้าหมายและกำหนดที่เวลาบิลด์ GCC สำหรับ Microsoft
เป้าหมายที่ใช้ Windows คือเครื่องหมายอัฒภาค และสำหรับเป้าหมายอื่นๆ เกือบทั้งหมด จะเป็น
ลำไส้ใหญ่.

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

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

ในตัวแปรทั้งหมดเหล่านี้ องค์ประกอบว่างจะสั่งให้คอมไพเลอร์ค้นหาปัจจุบัน
ไดเรกทอรีการทำงาน องค์ประกอบว่างสามารถปรากฏที่จุดเริ่มต้นหรือจุดสิ้นสุดของเส้นทาง สำหรับ
เช่น ถ้าค่าของ ซีพีเอธ คือ ":/special/include" ซึ่งมีผลเหมือนกับ
-ผม. -I/พิเศษ/รวม.

การพึ่งพาอาศัยกัน_OUTPUT
หากมีการตั้งค่าตัวแปรนี้ ค่าของตัวแปรนี้จะระบุวิธีการแสดงการพึ่งพาสำหรับ Make based
ในไฟล์ส่วนหัวที่ไม่ใช่ระบบที่ประมวลผลโดยคอมไพเลอร์ ไฟล์ส่วนหัวของระบบคือ
ละเว้นในผลลัพธ์การพึ่งพา

คุณค่าของ การพึ่งพาอาศัยกัน_OUTPUT สามารถเป็นเพียงชื่อไฟล์ได้ ซึ่งในกรณีนี้ Make rule
ถูกเขียนไปยังไฟล์นั้น โดยเดาชื่อเป้าหมายจากชื่อไฟล์ต้นทาง หรือ
ค่าสามารถมีรูปแบบ ไฟล์ เป้าซึ่งในกรณีนี้กฎจะถูกเขียนไปยัง file ไฟล์
การใช้ เป้า เป็นชื่อเป้าหมาย

กล่าวอีกนัยหนึ่งตัวแปรสภาพแวดล้อมนี้เทียบเท่ากับการรวมตัวเลือก -มม
และ -มฟล, พร้อมตัวเลือก -มท สลับกันด้วย

SUNPRO_DEPENDENCIES
ตัวแปรนี้เหมือนกับ การพึ่งพาอาศัยกัน_OUTPUT (ดูด้านบน) ยกเว้นระบบนั้น
ไฟล์ส่วนหัวจะไม่ถูกละเลย ดังนั้นจึงหมายความว่า -M มากกว่า -มม. อย่างไรก็ตาม
ละเว้นการพึ่งพาไฟล์อินพุตหลัก

ใช้ g++-4.7 ออนไลน์โดยใช้บริการ onworks.net


เซิร์ฟเวอร์และเวิร์กสเตชันฟรี

ดาวน์โหลดแอพ Windows & Linux

คำสั่ง Linux

Ad