Ngoài -Tất cả những cảnh báo nào khác mà mọi người thấy hữu ích?
http://gcc.gnu.org/onlineocs/gcc-4.3.2/gcc/Warning-Options.html
Ngoài -Tất cả những cảnh báo nào khác mà mọi người thấy hữu ích?
http://gcc.gnu.org/onlineocs/gcc-4.3.2/gcc/Warning-Options.html
Câu trả lời:
Tôi thường xuyên sử dụng:
gcc -m64 -std=c99 -pedantic -Wall -Wshadow -Wpointer-arith -Wcast-qual \
-Wstrict-prototypes -Wmissing-prototypes
Bộ này bắt rất nhiều đối với những người không sử dụng nó (những người có mã mà tôi nhận được để biên dịch với các cờ đó lần đầu tiên); nó hiếm khi mang lại cho tôi một vấn đề (mặc dù -Wcast-quality đôi khi gây phiền toái).
-O3
hoặc một cái gì đó tương tự; có những cảnh báo chỉ được tạo ra khi mã được tối ưu hóa.
-m32
và -m64
(tất nhiên là trong các lần chạy riêng biệt) cung cấp khả năng bảo vệ tốt hơn khỏi các lỗi khác nhau trong cách bạn sử dụng printf()
và scaf()
thông số kỹ thuật chuyển đổi.
Kể từ 2011/09/01, với phiên bản gcc 4.6.1
Bí danh "phát triển" hiện tại của tôi
gcc -std = c89 -pedantic -Wall \ -Không thiếu dấu ngoặc nhọn -Wextra -Không thiếu-trường-khởi tạo -Wformat = 2 \ -Wswitch-default -Wswitch-enum -Wcast-align -Wpointer-arith \ -Wbad-function-cast -Wstrict -flow = 5 -Các nguyên mẫu hạn chế -Winline \ -Wundef -Wnested-externs -Wcast-quality -Wshadow -Wunreachable-code \ -Wlogical-op -float-bằng -Wstrict-aliasing = 2 -Wredundant-decls \ -Định nghĩa kiểu vàng -Werror \ -ggdb3 \ -O0 \ -fno-omit-frame-pointer -ffloat-store -fno-common -fstrict-aliasing \ -lm
Bí danh "phát hành"
gcc -std = c89 -pedantic -O3 -DNDEBUG -flto -lm
Kể từ ngày 11 tháng 11 năm 2009
bí danh "phát triển"
gcc -Wall -Wextra -Wformat = 2 -Wswitch-default -Wcast-align -Wpointer-arith \ -Wbad-function-cast - Nguyên mẫu hạn chế - Đường dây -Wundef -Wnested-externs \ -Wcast-quality -Wshadow -Wwrite-string -Wconversion -Wunreachable-code \ -Wstrict-aliasing = 2 -ffloat-store -fno-common -fstrict-aliasing \ -lm -std = c89 -pedantic -O0 -ggdb3 -pg - mức độ phù hợp
bí danh "phát hành"
gcc -lm -std = c89 -pedantic -O3 -DNDEBUG --combine -fwhole-program -funroll-loops
-Wfloat-equal
được thêm vào bí danh của tôi. Cảm ơn bạn Mark
-Wstrict-aliasing=2
thực sự làm giảm mức cảnh báo được -Wstrict-aliasing=3
ngụ ý bởi -Wall
, ít nhất là với phiên bản gcc gần đây.
Tôi thích -Werror. Giữ cảnh báo mã miễn phí.
#warning
một tác dụng phụ tốt khi sử dụng -Werror
.
-Werror
theo mặc định trong các bản dựng của bạn, nó sẽ làm phiền những người đóng gói đang sử dụng các phiên bản trình biên dịch khác với bạn vì các cảnh báo thay đổi theo phiên bản trình biên dịch đôi khi mã được cảnh báo miễn phí cho bạn sẽ có cảnh báo cho người khác và thì họ phải đào sâu vào hệ thống xây dựng của bạn để tắt nó đi.
Tôi đã bắt đầu với C ++, vì vậy khi tôi chuyển sang học CI, hãy chắc chắn rằng:
-fmessage-length = 0 -ansi -pedantic -std = c99 - Lỗi -Tường -Wextra -Viết-chuỗi -Đơn vị tự -Wcast-align -Chất lượng phát sóng -Wpointer-arith -Giá răng cưa -Wformat = 2 -Khai báo -Xem-bao-dirs -Không-không-sử dụng-tham số -Được vệ sinh -Định nghĩa phong cách vàng - Nguyên mẫu hạn chế - Nguyên mẫu thử nghiệm
Nhận hướng dẫn sử dụng cho phiên bản GCC bạn sử dụng, tìm tất cả các tùy chọn cảnh báo có sẵn , sau đó chỉ hủy kích hoạt những phiên bản mà bạn có lý do thuyết phục để làm như vậy. (Ví dụ: tiêu đề của bên thứ ba không thể sửa đổi sẽ cung cấp cho bạn nhiều cảnh báo nếu không.) Ghi lại những lý do đó. (Trong Makefile hoặc bất cứ nơi nào bạn đặt các tùy chọn đó.) Xem lại các cài đặt tại intervalls thông thường và bất cứ khi nào bạn nâng cấp trình biên dịch của mình.
Trình biên dịch là bạn của bạn. Cảnh báo là bạn của bạn. Cho trình biên dịch càng nhiều cơ hội để cho bạn biết về các vấn đề tiềm ẩn càng tốt.
Tôi cũng dùng:
-Khoan tràn = 5
Để bắt những lỗi khó chịu có thể xảy ra nếu tôi viết mã dựa trên hành vi tràn của số nguyên.
Và:
-Wextra
Điều này cũng cho phép một số tùy chọn tốt. Hầu hết là cho C ++.
Tôi thường biên dịch với "-W -Wall -ansi -pedantic", điều này giúp đảm bảo chất lượng và tính di động tối đa của mã.
-pedantic-Tường -Wextra -Không-ghi-chuỗi -Không-không sử dụng-tham số
Đối với chế độ "Hurt me much", tôi bỏ qua -Wno ...
Tôi muốn có cảnh báo mã của mình miễn phí, đặc biệt là với C ++. Trong khi các cảnh báo của trình biên dịch C thường có thể bị bỏ qua, nhiều cảnh báo C ++ cho thấy các lỗi cơ bản trong mã nguồn.
Foo(int dndu, int dndv) : dndu_(dndu), dndv_(dndu) {}
-> tương đối khó phát hiện. Nếu bạn thấy khó chịu với cảnh báo đó, bạn chỉ nên dùng thông số foo (int /*q*/)
này, điều này cũng làm tăng khả năng đọc mã của bạn.
-pedantic-error
clang
(trình biên dịch C của dự án LLVM) và sau đó biên dịch -Weverything
và bạn sẽ thấy việc biên dịch vui nhộn có thể thực sự trở nên như thế nào (một số cảnh báo hoàn toàn điên rồ, nhưng chúng đúng về mặt kỹ thuật).
-Wloat-bằng, -Wshadow, -Các nguyên mẫu,
Ngay bây giờ tôi sử dụng:
-Wall -W -Wextra -Wconversion -Wshadow -Wcast-quality -Wwrite-string -Werror
Tôi lấy danh sách đó chủ yếu từ cuốn sách "Giới thiệu về gcc" và sau đó là một số từ gợi ý của Ulrich Drepper về Lập trình Phòng thủ ( http://people.redhat.com/drepper/Defensive-slides.pdf ).
Nhưng tôi không có bất kỳ khoa học nào đằng sau danh sách của mình, nó giống như một danh sách tốt.
/ Johan
Lưu ý: Tôi không thích những lá cờ khổng lồ đó ....
Lưu ý: Tôi nghĩ rằng -W và -Wextra ít nhiều giống nhau.
Tôi thường chỉ sử dụng
gcc -Wall -W -Wunused-parameter -Wmissing-declarations -Wstrict-prototypes -Wmissing-prototypes -Wsign-compare -Wconversion -Wshadow -Wcast-align -Wparentheses -Wsequence-point -Wdeclaration-after-statement -Wundef -Wpointer-arith -Wnested-externs -Wredundant-decls -Werror -Wdisabled-optimization -pedantic -funit-at-a-time -o
-Wfatal-errors
-Wdeclaration-after-statement
' để phát hiện mã mà MSVC (về cơ bản vẫn là trình biên dịch C89) sẽ không xử lý. Thật là phiền phức. Thêm '-Wextra
' cũng có thể phát hiện một số vấn đề khác.