คุณทำไม่ได้
คู่มือสำหรับ GCC 4.4.0 นั้นครอบคลุมเฉพาะสำหรับรุ่นนั้น แต่จะแสดงรายการคำเตือนที่เป็นไปได้ทั้งหมดสำหรับ 4.4.0 มันไม่ได้อยู่ในหน้าที่คุณเชื่อมโยงไปถึงตัวอย่างเช่นตัวเลือกเฉพาะภาษาบางอย่างอยู่ในหน้าสำหรับตัวเลือก C ++ หรือตัวเลือก Obj-C ในการค้นหาพวกเขาทั้งหมดคุณควรดูที่สรุปตัวเลือก
การเปิดใช้งานทุกอย่างจะรวมถึง-Wdouble-promotion
สิ่งที่เกี่ยวข้องกับซีพียูที่มีจุดลอยตัวความแม่นยำเดี่ยว 32 บิตซึ่งใช้float
ในฮาร์ดแวร์ แต่เลียนแบบdouble
ในซอฟต์แวร์ ทำการคำนวณตามที่double
ต้องการจะใช้การจำลองซอฟต์แวร์และช้ากว่า สิ่งนี้เกี่ยวข้องกับซีพียูในตัวบางตัว แต่ไม่เกี่ยวข้องอย่างสมบูรณ์สำหรับซีพียูเดสก์ท็อปสมัยใหม่ที่รองรับฮาร์ดแวร์สำหรับทศนิยม 64 บิต
คำเตือนอีกอย่างที่มักไม่ค่อยมีประโยชน์คือ-Wtraditional
ซึ่งเตือนเกี่ยวกับโค้ดที่มีรูปแบบที่ดีซึ่งมีความหมายแตกต่างกัน (หรือไม่ทำงาน) ใน C ดั้งเดิมเช่น"string " "concatenation"
หรือนิยามฟังก์ชัน ISO C! คุณสนใจความเข้ากันได้กับคอมไพเลอร์อายุ 30 ปีหรือไม่? คุณต้องการคำเตือนสำหรับการเขียนint inc(int i) { return i+1; }
หรือไม่?
ฉันคิดว่า-Weffc++
มันมีเสียงดังเกินไปที่จะเป็นประโยชน์มันขึ้นอยู่กับEffective C ++รุ่นแรกที่ล้าสมัยและเตือนเกี่ยวกับการสร้างที่ถูกต้องสมบูรณ์ C ++ (และแนวทางที่เปลี่ยนไปในหนังสือรุ่นต่อมา) ฉันไม่ต้องการ เตือนว่าฉันยังไม่ได้เริ่มstd::string
สมาชิกในคอนสตรัคของฉัน; มันมีคอนสตรัคเตอร์เริ่มต้นที่ทำสิ่งที่ฉันต้องการอย่างแน่นอนทำไมฉันจึงควรเขียนm_str()
เพื่อเรียกมัน -Weffc++
คำเตือนว่าจะเป็นประโยชน์เป็นเรื่องยากเกินไปสำหรับคอมไพเลอร์ในการตรวจสอบอย่างถูกต้อง (ให้ปลอมเนกาทีฟ) และคนที่ไม่ได้เป็นประโยชน์เช่นการเริ่มต้นสมาชิกทุกคนอย่างชัดเจนเพียงแค่การผลิตมากเกินไปเสียงให้ผลบวกปลอม
Luc Danton เป็นตัวอย่างที่ดีของการเตือนที่ไร้ประโยชน์-Waggregate-return
ซึ่งแทบจะไม่สมเหตุสมผลเลยสำหรับรหัส C ++
เช่นคุณไม่ต้องการทุกคำเตือนคุณเพียงแค่คิดว่าคุณทำ
ทำตามคู่มืออ่านเกี่ยวกับพวกเขาตัดสินใจว่าคุณต้องการเปิดใช้งานลองอะไร การอ่านคู่มือของคอมไพเลอร์ของคุณคือ Good Thing TMอย่างไรก็ตามการตัดทอนและเปิดใช้งานคำเตือนที่คุณไม่เข้าใจนั้นไม่ใช่ความคิดที่ดีโดยเฉพาะอย่างยิ่งหากต้องหลีกเลี่ยงการใช้ RTFM
ใครก็ตามที่เพิ่งเปิดใช้งานทุกอย่างน่าจะทำเช่นนั้นเพราะพวกเขาไร้สาระเพราะหรือเจ้านายที่มีผมแหลมพูดว่า "ไม่มีคำเตือน"
คำเตือนบางอย่างมีความสำคัญและบางคำเตือนไม่ได้ คุณต้องเลือกปฏิบัติหรือทำให้โปรแกรมของคุณยุ่งเหยิง -Wdouble-promotion
พิจารณาตัวอย่างเช่น หากคุณกำลังทำงานกับระบบฝังตัวคุณอาจต้องการสิ่งนี้ หากคุณกำลังทำงานกับระบบเดสก์ท็อปคุณอาจไม่ทำเช่นนั้น และคุณต้องการ-Wtraditional
? ฉันสงสัยมัน.
แก้ไข:ดูเพิ่มเติม-Wall-all เพื่อเปิดใช้งานคำเตือนทั้งหมดที่ปิดเป็น WONTFIX
แก้ไข 2:เพื่อตอบสนองต่อการร้องเรียนของ DevSolar เกี่ยวกับ makefiles ที่จำเป็นต้องใช้คำเตือนที่แตกต่างกันขึ้นอยู่กับรุ่นของคอมไพเลอร์ถ้า-Wall -Wextra
ไม่เหมาะสมก็ไม่ยากที่จะใช้ CFLAGS เฉพาะคอมไพเลอร์และรุ่นเฉพาะ:
compiler_name := $(notdir $(CC))
ifeq ($(compiler_name),gcc)
compiler_version := $(basename $(shell $(CC) -dumpversion))
endif
ifeq ($(compile_name),clang)
compiler_version := $(shell $(CC) --version | awk 'NR==1{print $$3}')
endif
# ...
wflags.gcc.base := -Wall -Wextra
wflags.gcc.4.7 := -Wzero-as-null-pointer-constant
wflags.gcc.4.8 := $(wflags.gcc.4.7)
wflags.clang.base := -Wall -Wextra
wflags.clang.3.2 := -Weverything
CFLAGS += $(wflags.$(compiler_name).base) $(wflags.$(compiler_name).$(compiler_version))