2011-10-09 21 views
9

Tôi có tuyên bố phức tạp switch và tôi quên đặt break vào cuối một trong số case giây. Điều này là khá hợp pháp, và kết quả là tôi đã có một mùa thu để tiếp theo case.Làm cách nào tôi có thể yêu cầu gcc cảnh báo (hoặc không thành công) trên các câu lệnh chuyển/trường hợp mà không bị gián đoạn?

Có cách nào để cảnh báo gcc (hoặc thậm chí tốt hơn, không thành công) nếu tôi bỏ qua tuyên bố break không?

Tôi nhận thấy rằng có nhiều trường hợp sử dụng hợp lệ (và tôi thường sử dụng chúng trong mã của tôi), như được minh họa trong this question, vì vậy rõ ràng một cảnh báo (hoặc thất bại) sẽ cần một sự từ bỏ đơn giản để tôi có thể dễ dàng nói, "Tôi muốn rơi qua đây."

Có cách nào để yêu cầu gcc thực hiện việc này không?

+0

Thành thực mà nói, nếu đó là những gì bạn muốn, tôi sẽ nói chỉ không sử dụng chuyển đổi/trường hợp. Ưu điểm duy nhất của chuyển đổi/trường hợp vẫn còn là nó rất dễ dàng để có được thông qua nơi bạn muốn nó. –

+0

Hehehe, C# buộc bạn phải đặt câu lệnh ngắt và sẽ không biên dịch nếu bạn không – BlackBear

+0

Chỉ tò mò thôi, chúng ta có thể xem mã không? Có thể có một giải pháp thậm chí tốt hơn mà không yêu cầu chuyển đổi. – fredoverflow

Trả lời

2

Tôi vừa xem qua các tùy chọn gcc và không có thông báo nào ít nhất sẽ cung cấp cho bạn thông báo. Có -Wswitch, -Wswitch-default và -Wswitch-enum (http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html#Warning-Options), nhưng không cái nào trong số chúng phù hợp với bạn.

đặt cược tốt nhất của tôi sẽ được sử dụng 'else if' báo cáo

1

Bạn có thể xây dựng một regexp cho grep/perl/emacs/etc để tìm tất cả những nơi không có break trước case.

0

Câu trả lời ngắn gọn là không, không có lá cờ nào trong gcc để làm điều đó. Trường hợp chuyển đổi được sử dụng cho mùa thu thông qua thường xuyên hơn vì vậy đó là lý do tại sao nó không có ý nghĩa để có một lá cờ như vậy trong gcc.

+2

Tôi nghĩ rằng nó có ý nghĩa, nó chỉ không cần phải mặc định để bật. Có vẻ như nó có thể thích hợp cho -Wextra hoặc -pantic. –

4

Séc này có sẵn trong Cppcheck, một bộ phân tích tĩnh miễn phí cho mã C và C++. Séc hiện được đánh dấu là "thử nghiệm", vì vậy, bạn cần phải sử dụng công tắc dòng lệnh --experimental để bật tính năng này.

séc này cảnh báo chống lại một trường hợp quy định tại khoản rỗng rơi thông qua đối với trường hợp tiếp theo mà không có một tuyên bố kiểm soát dòng chảy như break, continue, return, vv, trừ có một bình luận với lời lẽ như // fall through ngay trước tiếp theo case.

Bạn có thể lấy ý tưởng về các loại cấu trúc này xử lý bằng cách xem switchFallThroughCase test cases trong mã nguồn.

Các vấn đề liên quan