Bạn không thể.
Hướng dẫn sử dụng cho GCC 4.4.0 chỉ toàn diện cho phiên bản đó, nhưng nó liệt kê tất cả các cảnh báo có thể có cho 4.4.0. Chúng không phải là tất cả trên trang mà bạn liên kết đến, ví dụ, một số tùy chọn dành riêng cho ngôn ngữ nằm trên các trang dành cho tùy chọn C ++ hoặc tùy chọn Obj-C. Để tìm thấy tất cả, bạn nên nhìn vào Tóm tắt Tùy chọn
Bật tất cả mọi thứ sẽ bao gồm -Wdouble-promotion
những thứ chỉ liên quan đến CPU với đơn vị dấu phẩy động chính xác đơn 32 bit, thực hiện float
trong phần cứng, nhưng mô phỏng double
trong phần mềm. Làm các phép tính như double
sẽ sử dụng phần mềm mô phỏng và chậm hơn. Điều đó có liên quan đến một số CPU nhúng, nhưng hoàn toàn không liên quan đến CPU máy tính để bàn hiện đại có hỗ trợ phần cứng cho dấu phẩy động 64 bit.
Một cảnh báo khác thường không hữu ích là -Wtraditional
, cảnh báo về mã được tạo hoàn hảo có ý nghĩa khác (hoặc không hoạt động) trong các "string " "concatenation"
định nghĩa hàm C truyền thống, ví dụ , hoặc ISO C! Bạn có thực sự quan tâm về khả năng tương thích với trình biên dịch 30 năm tuổi? Bạn có thực sự muốn một cảnh báo cho văn bản int inc(int i) { return i+1; }
?
Tôi nghĩ rằng -Weffc++
quá ồn ào là không hữu ích, nó dựa trên phiên bản đầu tiên của C ++ hiệu quả đã lỗi thời và cảnh báo về các cấu trúc hoàn toàn hợp lệ của C ++ (và hướng dẫn đã thay đổi trong các phiên bản sau của cuốn sách.) Tôi không muốn cảnh báo rằng tôi chưa khởi tạo một std::string
thành viên trong nhà xây dựng của mình; Nó có một constructor mặc định thực hiện chính xác những gì tôi muốn, tại sao tôi phải viết m_str()
để gọi nó? Các -Weffc++
cảnh báo hữu ích là quá khó để trình biên dịch phát hiện chính xác (đưa ra các phủ định sai) và các cảnh báo không hữu ích, chẳng hạn như khởi tạo tất cả các thành viên một cách rõ ràng, chỉ tạo ra quá nhiều tiếng ồn, cho kết quả dương tính giả.
Luc Danton đã cung cấp một ví dụ tuyệt vời về các cảnh báo vô dụng từ -Waggregate-return
đó gần như chắc chắn không bao giờ có ý nghĩa đối với mã C ++.
tức là bạn không thực sự muốn tất cả các cảnh báo, bạn chỉ nghĩ rằng bạn làm.
Xem qua hướng dẫn, đọc về chúng, quyết định bạn có thể muốn bật, thử chúng. Đọc nhãn hiệu của trình biên dịch của bạn là một điều tốt TM dù sao, tham gia một cắt ngắn và cho phép cảnh báo bạn không hiểu không phải là một ý tưởng rất tốt, đặc biệt nếu đó là để tránh phải RTFM.
Bất cứ ai chỉ bật tất cả mọi thứ có lẽ đều làm như vậy bởi vì họ không biết gì vì hoặc một ông chủ tóc nhọn nói "không có cảnh báo."
Một số cảnh báo là quan trọng, và một số thì không. Bạn phải phân biệt đối xử hoặc bạn làm hỏng chương trình của bạn. Hãy xem xét, ví dụ , -Wdouble-promotion
. Nếu bạn đang làm việc trên một hệ thống nhúng, bạn có thể muốn điều này; nếu bạn đang làm việc trên một hệ thống máy tính để bàn thì có lẽ bạn không làm thế. Và bạn có muốn -Wtraditional
không? Tôi nghi ngờ điều đó.
Chỉnh sửa: Xem thêm -Wall-all để kích hoạt tất cả các cảnh báo được đóng dưới dạng WONTFIX.
Chỉnh sửa 2: để đáp lại khiếu nại của DevSolar về các tệp tạo tệp cần sử dụng các cảnh báo khác nhau tùy thuộc vào phiên bản trình biên dịch, nếu -Wall -Wextra
không phù hợp thì không khó để sử dụng CFLAGS dành riêng cho trình biên dịch:
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))