-o เปลี่ยนชื่อไฟล์เอาต์พุต (ฉันพบว่าใช้ --help)
แต่ฉันไม่พบว่า-Wall
มันคืออะไร?
-o เปลี่ยนชื่อไฟล์เอาต์พุต (ฉันพบว่าใช้ --help)
แต่ฉันไม่พบว่า-Wall
มันคืออะไร?
man
รายการสำหรับโปรแกรมต่างๆหากคุณต้องการทราบว่าสวิตช์ทำอะไรหรือมีสวิตช์อะไรบ้าง man
หน้าของgcc
สามารถอ่านได้บนlinux.die.net/man/1/gcc - คุณสามารถทำได้การค้นหาอย่างรวดเร็วมีสำหรับข้อความ "-Wall"
คำตอบ:
มันย่อมาจาก "คำเตือนทั้งหมด" - มันจะเปิด (เกือบ) คำเตือนทั้งหมดที่ g ++ สามารถบอกคุณได้ โดยทั่วไปแล้วเป็นความคิดที่ดีโดยเฉพาะอย่างยิ่งหากคุณเป็นมือใหม่เนื่องจากการทำความเข้าใจและแก้ไขคำเตือนเหล่านั้นสามารถช่วยคุณแก้ไขปัญหาประเภทต่างๆในโค้ดของคุณได้
-Wextra
-pedantic
-Wall -Wextra
แล้วอ่านคู่มือเพื่อหาเป็นจำนวนมากมากขึ้นคำเตือนคุณสามารถเปิดใช้งานที่เป็นไปได้เพราะแม้-Wextra
จะเป็นเพียงส่วนย่อยเล็ก ๆ ...
-Wunreachable-code
ย้อนหลังไปบ้าง Apple คงจะมีความสุขมากขึ้นในทุกวันนี้ ;-)
ดู man gcc.
-Wallเปิดคำเตือนเหล่านี้:
-Waddress -Warray-bounds (only with -O2) -Wc++0x-compat -Wchar-subscripts
-Wenum-compare (in C/Objc; this is on by default in C++) -Wimplicit-int (C and
Objective-C only) -Wimplicit-function-declaration (C and Objective-C only)
-Wcomment -Wformat -Wmain (only for C/ObjC and unless -ffreestanding)
-Wmissing-braces -Wnonnull -Wparentheses -Wpointer-sign -Wreorder -Wreturn-type
-Wsequence-point -Wsign-compare (only in C++) -Wstrict-aliasing
-Wstrict-overflow=1 -Wswitch -Wtrigraphs -Wuninitialized -Wunknown-pragmas
-Wunused-function -Wunused-label -Wunused-value -Wunused-variable
-Wvolatile-register-var
-Wextraประกอบด้วย:
-Wclobbered -Wempty-body -Wignored-qualifiers -Wmissing-field-initializers
-Wmissing-parameter-type (C only) -Wold-style-declaration (C only) -Woverride-init
-Wsign-compare -Wtype-limits -Wuninitialized -Wunused-parameter (only with -Wunused
or -Wall) -Wunused-but-set-parameter (only with -Wunused or -Wall)
มีคำเตือนอื่น ๆ อีกมากมายที่คุณต้องเปิดอย่างชัดเจน
เช่นสำหรับรหัส C ของเราที่เราใช้:
-Wall -Wextra -Waggregate-return -Wcast-align -Wcast-qual -Wdisabled-optimization -Wdiv-by-zero -Wendif-label -Wformat-extra-args -Wformat-nonliteral -Wformat-security -Wformat-y2k -Wimplicit -Wimport -Winit-self -Winline -Winvalid-pch -Wjump-misses-init -Wlogical-op -Werror = missing-braces -Wmissing-declarations -Wno-missing-format-attribute -Wmissing-include-dirs -Wmultichar -Wpacked -Wpointer-arith -Wreturn-type -Wsequence-point -Wsign-Compare -Wstrict-aliasing -Wstrict-aliasing = 2 -Wswitch -Wswitch-default -Werror = undef -Wno-unused -Wvariadic-macros -Wwrite-strings -Wc ++ -compat -Werror = declaration-after-statement -Werror = implicit-function-declaration -Wmissing-prototypes -Werror = nested-externs -Werror = old-style-definition -Werror = tight-prototypes
หรือเพียงแค่ชุดคำเตือนด้วยhttps://www.gnu.org/software/autoconf-archive/ax_compiler_flags.html
น่าเศร้าที่ไม่มีคำตอบใดเพียงพอที่อ้างถึงส่วนที่เกี่ยวข้องจริงของคู่มือซึ่งนำมาสู่ประเด็น:
สิ่งนี้เปิดใช้งานคำเตือนทั้งหมดเกี่ยวกับโครงสร้างที่ผู้ใช้บางคนคิดว่าน่าสงสัยและง่ายต่อการหลีกเลี่ยง (หรือแก้ไขเพื่อป้องกันคำเตือน) แม้จะใช้ร่วมกับมาโคร
[... ]
-Wall
โปรดทราบว่าธงเตือนบางอย่างจะไม่โดยนัย บางคนเตือนเกี่ยวกับโครงสร้างที่ผู้ใช้โดยทั่วไปไม่คิดว่าน่าสงสัย แต่ในบางครั้งคุณอาจต้องการตรวจสอบ คนอื่นเตือนเกี่ยวกับโครงสร้างที่จำเป็นหรือยากที่จะหลีกเลี่ยงในบางกรณีและไม่มีวิธีง่ายๆในการแก้ไขโค้ดเพื่อระงับคำเตือน บางคนเปิดใช้งานโดย-Wextra
แต่หลายคนต้องเปิดใช้งานทีละรายการ
เออร์โก:
-Wall
ไม่ได้หมายถึง "คำเตือนทั้งหมด"บรรทัดล่างเป็นเรื่องของคำเตือนขั้นต่ำที่คุณควรตั้งค่า แม้ว่า-Wall -Wextra
จะดีกว่า แต่ก็ยังไม่ได้ใช้ประโยชน์จากข้อผิดพลาดทั้งหมดที่ตรวจสอบคอมไพเลอร์ของคุณสามารถทำเพื่อคุณได้
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
ส่วนตัวผมจะไม่ไปไม่น้อยกว่า โครงการปัจจุบันทั้งหมดของฉันใช้รายการคำเตือนนานกว่านั้นจริง ๆ (โดยไม่เรียกใช้งานใด ๆ ) และฉันตรวจสอบคู่มือในทุกรุ่นหลักสำหรับตัวเลือกใหม่ คอมไพเลอร์คือเพื่อนของคุณ ใช้การวินิจฉัยใด ๆ ที่สามารถให้คุณได้
-Wall -Wextra -Wfloat-equal -Wundef -Wcast-align -Wwrite-strings -Wlogical-op -Wmissing-declarations -Wredundant-decls -Wshadow -Woverloaded-virtual
ในขณะที่ฉันรวบรวมg++ -std=c++11
ในขณะที่ฉันเรียนรู้ c ++ และการเขียนโปรแกรมหรือไม่ หรือฉันควรข้ามส่วนนี้และเริ่มใช้แฟล็กข้อความแสดงข้อผิดพลาดในภายหลัง? หากเป็นเช่นนั้นฉันควรเริ่มต้นด้วยข้อความแสดงข้อผิดพลาดเมื่อใด
ช่วยให้คำเตือนที่เห็นว่ามีประโยชน์และง่ายต่อการหลีกเลี่ยงจากแหล่งที่มาโดยนักเขียน gcc นอกจากนี้ยังมี -W (-Wextra ในรุ่นที่ใหม่กว่า) ซึ่งถือว่ามีประโยชน์ แต่สำหรับการหลีกเลี่ยงผลบวกที่ผิดพลาดอาจเป็นเรื่องยากหรือส่งผลให้โค้ดงุ่มง่าม
gcc ยังมีคำเตือนอื่น ๆ อีกมากมายซึ่งโดยทั่วไปมีประโยชน์น้อยกว่า ดูhttp://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Warning-Options.html#Warning-Options
มันenables most warning messages
.
g++ --help=warnings
ท่านสามารถหาข้อมูลเพิ่มเติมถ้าคุณใช้
มันแสดงคำเตือนทั้งหมด ฉันขอแนะนำให้ใช้-pedantic
เพื่อเตือนเกี่ยวกับส่วนที่ไม่เป็นไปตามข้อกำหนดของโค้ด