Trình biên dịch cảnh báo


15

Nhiều trình biên dịch có các thông báo cảnh báo để cảnh báo cho các lập trình viên về thời gian chạy tiềm ẩn, lỗi logic và hiệu suất, hầu hết các lần, bạn nhanh chóng sửa chúng, nhưng còn cảnh báo không thể sửa được thì sao?

Làm thế nào để bạn đối phó với các cảnh báo không thể trộn lẫn? Bạn có viết lại một phần của mã, hoặc viết lại nó theo "cách dài, không hack" hoặc vô hiệu hóa tất cả các cảnh báo cùng nhau không? Điều gì nên được thực hành tốt nhất?

Điều gì xảy ra nếu bạn đang chỉnh sửa mã của người khác và mã của anh ta có cảnh báo?

Đây là một ví dụ điển hình: jQuery có rất nhiều cảnh báo JavaScript khi trình duyệt lớp Mozilla được phát hiện, tại sao các nhà phát triển jQ không sửa chúng? Nếu bạn đóng góp cho jQuery, bạn sẽ sửa chúng chứ?


7
Bạn có thể đưa ra một ví dụ về một cảnh báo không thể trộn lẫn?
Lưu ý đến bản thân - nghĩ về một cái tên

1
Một cảnh báo theo định nghĩa là một cảnh báo. Do đó, nó không phải là "cố định". Vì vậy, một cảnh báo không thể trộn lẫn là gì?
Rook

Sử dụng các loại chung trong Java thường tạo ra một cảnh báo. Cách duy nhất để "sửa" nó là thêm @Suppress, không sạch lắm, IMO.
Michael K

Câu trả lời:


25

Một số cảnh báo thường an toàn để bỏ qua nhưng nếu bạn làm như vậy thì theo thời gian chúng sẽ nhân lên cho đến ngày đó khi có rất nhiều bạn bỏ lỡ một cảnh báo thực sự quan trọng vì nó bị ẩn trong tiếng ồn.

Khắc phục các cảnh báo ngay lập tức (có thể bao gồm vô hiệu hóa các quy tắc riêng lẻ nếu bạn cảm thấy rằng nó không bao giờ phù hợp với bối cảnh của bạn).


8
Điều này. Tôi đã thừa hưởng các cơ sở mã với các bộ sưu tập cảnh báo có kích thước phù hợp; không ai trong số họ là cảnh báo cho bất cứ điều gì mà tôi đặc biệt quan tâm, nhưng những gì tôi làm chăm sóc về là có thể thấy thương hiệu mới "0 error (s), 1 cảnh báo (s)" khi tôi làm điều gì sai.
Carson63000

33

Ý kiến ​​của tôi là bạn nên nghiêm khắc với chính mình. Trình biên dịch đã được viết bởi tổng số chuyên gia trong ngôn ngữ. Nếu họ đang báo cáo rằng một cái gì đó hơi khó hiểu (nghĩ mùi mã) thì mã cần được xem xét.

Hoàn toàn có thể viết mã biên dịch mà không có lỗi và không có cảnh báo.


1
Tôi chắc chắn đồng ý!
Tin Man

5
Tôi đồng ý. OP: bạn nên đọc về 'cửa sổ bị vỡ' như đã được giải mã trong Lập trình viên thực dụng.
Không ai là


9

Khi tôi viết bằng C và C ++, tôi sẽ kích hoạt các cài đặt nghiêm ngặt nhất có thể vì tôi muốn biết khi nào đó có ý nghĩa với trình biên dịch. Khi tôi thực hiện xong việc kiểm tra và kiểm tra các giá trị trả về, tôi rất vui vì mã này chính xác như tôi có thể thực hiện.

Thỉnh thoảng tôi nhận được mã từ người khác sẽ đưa ra cảnh báo. Kiểm tra nguồn cho thấy họ đã bỏ qua những thứ thực hành lập trình tốt trong C, làm cho mã của họ trở nên dễ vỡ.

Vì vậy, tôi nghĩ rằng có những lý do tốt để kích hoạt sự nghiêm ngặt và dành thời gian để sửa chữa mọi thứ. Làm khác đi là cẩu thả. Nếu tôi có một đồng nghiệp đã tắt cảnh báo tôi sẽ dành thời gian cho họ VÀ người quản lý giải thích lý do tại sao đó là một điều thực sự tồi tệ.


6

Tôi sẽ sửa bất kỳ cảnh báo. Nếu bạn bỏ qua chúng và để chúng tích lũy, bạn thực sự có thể bỏ lỡ điều gì đó quan trọng.


4

Nói chung, bạn nên cố gắng làm cho trình biên dịch im lặng, để các cảnh báo mới hiển thị nhiều hơn. Những cảnh báo này có thể chỉ ra các lỗi tinh vi và cần được xử lý tương ứng.

Về việc sửa mã người khác, nó phụ thuộc rất nhiều vào cả văn hóa nơi làm việc của bạn và trạng thái hiện tại của mã. Bạn không thể chỉ thay đổi mã nếu nó kích hoạt chu trình thử lại hoàn chỉnh, giống như mã sẽ bị trễ trong giai đoạn thử nghiệm hoặc trong sản xuất.

Hỏi sếp của bạn, và hành động phù hợp.


2

Mỗi khi bạn thấy một cảnh báo về trình biên dịch, bạn phải dừng lại và suy nghĩ xem liệu đó có thực sự là vấn đề đang chờ để thổi vào mặt bạn tại trang web của khách hàng hay điều gì đó bạn có thể bỏ qua. Tồi tệ hơn, những thứ bạn có thể bỏ qua HÔM NAY có thể là những thứ sẽ nổ tung tại trang web của khách hàng trong một vài năm, sau khi một sự thay đổi mã dường như không liên quan ở nơi nào đó khác.

Sửa các cảnh báo. Giai đoạn = Stage. Đó là hoặc tài liệu cho từng người trong số họ, với càng nhiều trang giải thích cần thiết để chứng minh rằng đó không phải là rủi ro, kèm theo đơn đặt hàng đã ký trên bạn gái yêu thích của bạn (hoặc stash khiêu dâm) nếu nó chỉ ra rằng Là một rủi ro.


2

Nói chung, bạn muốn bản dựng của mình được cảnh báo miễn phí. Cảnh báo là có lý do, và thường họ chỉ ra những vấn đề rất thực tế. Nếu bạn có thói quen bỏ qua các cảnh báo của trình biên dịch, thì cuối cùng bản dựng của bạn sẽ có rất nhiều trong số chúng, và bạn sẽ bỏ lỡ một cảnh báo gây ra bởi một vấn đề thảm khốc sẽ khiến công ty của bạn phải trả giá đắt. Mặt khác, nếu chương trình của bạn thường biên dịch mà không có cảnh báo, thì mọi cảnh báo mới sẽ được chú ý ngay lập tức và có thể được xử lý nhanh chóng.

Phải nói rằng, đôi khi các trình biên dịch có thể có các cảnh báo không có ý nghĩa và không thể dễ dàng sửa chữa. Tôi phải đối mặt với tình huống này mỗi ngày khi làm việc với TI CodeComposer, đây là môi trường phát triển cho TI DSP. Tôi có mã C ++ biên dịch không có cảnh báo trong Visual Studio, nhưng điều đó dẫn đến các cảnh báo lạ trong CodeComposer, đơn giản là vì sự hỗ trợ của TI cho C ++ tiêu chuẩn có thể tốt hơn. May mắn thay, CodeComposer cho phép bạn vô hiệu hóa từng cảnh báo cụ thể, đó là những gì chúng tôi phải làm khi không có cách nào để sửa mã tạo ra cảnh báo.


1

Trong trường hợp của tôi, các cảnh báo đến từ công cụ PyLint và tôi có thể vô hiệu hóa cảnh báo trên một dòng cụ thể bằng cách thêm văn bản đặc biệt vào các bình luận.

Trong hầu hết các trường hợp, tôi không làm điều đó. Trong hầu hết các trường hợp, tôi thay đổi mã để làm theo những gì PyLint gợi ý vì PyLint thường đúng. Tuy nhiên, trong các cấu trúc không thích nói chung là một ý tưởng tồi, nhưng có ý nghĩa trong một bối cảnh cụ thể. Ví dụ, nó phàn nàn nếu tôi nắm bắt được tất cả các ngoại lệ có thể. Thông thường, nó chính xác, đó sẽ là một ý tưởng tồi. Tuy nhiên, trong một số trường hợp, tôi muốn nắm bắt tất cả các trường hợp ngoại lệ như gửi cho mình một báo cáo lỗi với các chi tiết.

Vì vậy: Trong hầu hết các trường hợp, hãy thoát khỏi các vụ hack. Khi hack thực sự hợp lý, hãy thêm một bình luận cho PyLint thấy ổn.


1

Một số lợi ích của sự nghiêm ngặt không được nêu rõ trong các câu trả lời khác:

  1. Khi tất cả các cảnh báo có thể sửa chữa dễ dàng đã được sửa chữa, các cảnh báo quan trọng / có liên quan còn lại sẽ có nhiều khả năng hiển thị hơn.
  2. Nếu các cảnh báo liên quan được tìm thấy và xử lý đúng hạn (trước khi phát hành), có thể tránh được các lỗi, do đó dẫn đến sự hài lòng của người dùng cuối tốt hơn
  3. Việc giải quyết cảnh báo thường dẫn đến mã dễ bảo trì hơn và đơn giản hơn (ví dụ: loại bỏ các điều kiện luôn luôn đúng)
  4. Khi số lượng cảnh báo gần bằng 0, bạn có thể dễ dàng đồng ý với Chính sách cảnh báo bằng không trong nhóm, điều này rất dễ tự động hóa trong hệ thống CI.
  5. Khi giải quyết các cảnh báo của trình biên dịch, sự hiểu biết về mã chương trình sẽ sâu hơn, điều này có thể dẫn đến những hiểu biết hữu ích về việc triển khai (ví dụ: khám phá các lỗi khác hoặc có ý tưởng về cách phát triển mã hơn nữa)
  6. Xây dựng được nhanh hơn, tăng năng suất hàng ngày: IDE / trình biên dịch có ít vấn đề hơn để quản lý và báo cáo, do đó quá trình biên dịch nhanh hơn (điều này chỉ liên quan trong bối cảnh hàng ngàn cảnh báo).

Có sự khác biệt ngôn ngữ cụ thể về các loại cảnh báo nhất định. Tôi nghĩ điều quan trọng là phải suy nghĩ và thảo luận về chủ đề và sau đó vô hiệu hóa một số cảnh báo riêng lẻ nếu họ cảm thấy hoàn toàn vô dụng để có thể đạt được sự nghiêm ngặt. Điều này đã được thực hiện trong một số đội về sự nghiệp của tôi. Thêm kinh nghiệm của tôi về chủ đề này


-1

Cảnh báo và lỗi là các thông báo mà trình biên dịch sử dụng để nói với lập trình viên "điều gì đó bạn viết không có ý nghĩa" - sự khác biệt giữa chúng là với cảnh báo, trình biên dịch sẵn sàng đoán theo ý định của lập trình viên, trong khi đó với một lỗi, trình biên dịch thậm chí không thể đoán.

Lỗi trình biên dịch sẽ được xử lý (tôi sẽ không sửa ), nhưng tất cả quá thường xuyên, các lập trình viên (ngay cả những người có kinh nghiệm) sẽ bỏ qua các cảnh báo. Vấn đề với việc bỏ qua các cảnh báo là đôi khi trình biên dịch đoán sai và nếu bạn có hơn 1000 thông báo cảnh báo, thật dễ dàng bỏ lỡ một thông báo cảnh báo cho thấy trình biên dịch đang đoán sai.

Từ quan điểm xã hội học, các chương trình có nhiều thông điệp cảnh báo là Windows bị hỏng .


1
Không đúng, rất nhiều cảnh báo về trình biên dịch là về những điều mà trình biên dịch hiểu 100% và không ở trạng thái thông lượng nào viết thường xuyên không chính xác. Bạn đang trả lời sai một câu hỏi trên 3 tuổi ...
jmoreno
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.