C, nổi tiếng, là một ngôn ngữ cấp thấp như HLL đi. C ++, mặc dù nó có vẻ là ngôn ngữ cấp cao hơn đáng kể so với C, nhưng vẫn có chung một số đặc điểm của nó. Và một trong những đặc điểm đó là các ngôn ngữ được thiết kế bởi các lập trình viên, dành cho lập trình viên - và đặc biệt, các lập trình viên biết họ đang làm gì.
[Trong phần còn lại của câu trả lời này, tôi sẽ tập trung vào C. Hầu hết những gì tôi sẽ nói cũng áp dụng cho C ++, mặc dù có lẽ không mạnh bằng. Mặc dù như Bjarne Stroustrup đã nói một cách nổi tiếng, "C giúp bạn dễ dàng tự bắn vào chân mình; C ++ làm cho nó khó hơn, nhưng khi bạn làm điều đó sẽ thổi bay toàn bộ chân của bạn." ]
Nếu bạn biết những gì bạn đang làm - thực sự biết những gì bạn đang làm - đôi khi bạn có thể phải "phá vỡ các quy tắc". Nhưng hầu hết thời gian, hầu hết chúng ta sẽ đồng ý rằng các quy tắc có thiện chí sẽ giữ cho chúng ta thoát khỏi rắc rối, và việc cố tình phá vỡ các quy tắc đó mọi lúc là một ý tưởng tồi.
Nhưng trong C và C ++, có một số lượng lớn đáng ngạc nhiên những điều bạn có thể làm đó là "ý tưởng tồi" nhưng không chính thức "chống lại các quy tắc". Đôi khi chúng là một ý tưởng tồi trong một số thời điểm (nhưng có thể được bảo vệ vào những thời điểm khác); đôi khi chúng là một ý tưởng tồi hầu như mọi lúc. Nhưng truyền thống luôn không cảnh báo về những điều này - bởi vì, một lần nữa, giả định là các lập trình viên biết họ đang làm gì, họ sẽ không làm những việc này mà không có lý do chính đáng, họ sẽ bị làm phiền bởi một đám cảnh báo không cần thiết.
Nhưng tất nhiên không phải tất cả các lập trình viên thực sự biết họ đang làm gì. Và đặc biệt, mọi lập trình viên C (dù có kinh nghiệm đến đâu) đều trải qua giai đoạn trở thành lập trình viên C khởi đầu. Và ngay cả các lập trình viên C có kinh nghiệm cũng có thể bất cẩn và mắc lỗi.
Cuối cùng, kinh nghiệm đã chỉ ra rằng không chỉ các lập trình viên mắc lỗi, mà những sai lầm này có thể gây ra hậu quả nghiêm trọng thực sự. Nếu bạn mắc lỗi và trình biên dịch không cảnh báo bạn về điều đó, và bằng cách nào đó, chương trình không ngay lập tức bị lỗi hoặc làm gì đó rõ ràng là sai vì nó, lỗi có thể ẩn ở đó, đôi khi trong nhiều năm, cho đến khi nó gây ra một vấn đề thực sự lớn
Vì vậy, hóa ra, hầu hết thời gian, cảnh báo là một ý tưởng tốt, sau tất cả. Ngay cả các lập trình viên có kinh nghiệm cũng đã học (thực ra, đó là " đặc biệt là các lập trình viên có kinh nghiệm đã học") rằng, trên sự cân bằng, các cảnh báo có xu hướng làm tốt hơn hại. Mỗi lần bạn làm điều gì đó sai một cách có chủ ý và cảnh báo là một sự phiền toái, có lẽ ít nhất mười lần bạn đã làm sai điều gì đó do tai nạn và cảnh báo đã cứu bạn khỏi những rắc rối tiếp theo. Và hầu hết các cảnh báo có thể bị vô hiệu hóa hoặc hoạt động trong vài lần khi bạn thực sự muốn làm điều "sai".
(Một ví dụ điển hình của việc như một "sai lầm" là thử nghiệm if(a = b)
Hầu hết thời gian, đây là một sai lầm, vì vậy hầu hết các trình biên dịch những ngày này cảnh báo về nó -.. Một số thậm chí theo mặc định Nhưng nếu bạn thực sự muốn cả assign b
để a
và thử nghiệm kết quả, bạn có thể tắt cảnh báo bằng cách nhập if((a = b))
.)
Câu hỏi thứ hai là, tại sao bạn muốn yêu cầu trình biên dịch coi các cảnh báo là lỗi? Tôi muốn nói rằng đó là vì bản chất con người, cụ thể là phản ứng quá dễ dàng khi nói "Ồ, đó chỉ là một cảnh báo, điều đó không quá quan trọng, tôi sẽ làm sạch nó sau." Nhưng nếu bạn là người trì hoãn (và tôi không biết về bạn, nhưng tôi là người trì hoãn khủng khiếp ) thì thật dễ dàng để dọn dẹp tất cả mọi thứ về cơ bản - và nếu bạn có thói quen bỏ qua các cảnh báo, thì đó là trở nên dễ dàng và dễ dàng hơn để bỏ lỡ một thông điệp cảnh báo quan trọng đang ngồi ở đó, không được chú ý, ở giữa tất cả những tin nhắn bạn đang bỏ qua.
Vì vậy, yêu cầu trình biên dịch coi các cảnh báo là lỗi là một mẹo nhỏ mà bạn có thể tự chơi để giải quyết vấn đề này.
Cá nhân, tôi không khăng khăng coi các cảnh báo là lỗi. (Trên thực tế, nếu tôi trung thực, tôi có thể nói rằng tôi hầu như không bao giờ kích hoạt tùy chọn đó trong lập trình "cá nhân" của mình.) Nhưng bạn có thể chắc chắn rằng tôi đã bật tùy chọn đó tại nơi làm việc, nơi hướng dẫn phong cách của chúng tôi (mà tôi đã viết) bắt buộc sử dụng nó. Và tôi sẽ nói - tôi nghi ngờ hầu hết các lập trình viên chuyên nghiệp sẽ nói - rằng bất kỳ cửa hàng nào không coi các cảnh báo là lỗi trong C đều hành xử thiếu trách nhiệm, không tuân thủ các thông lệ tốt nhất trong ngành được chấp nhận.