2012-01-07 27 views
5

Sau khi viết câu trả lời cho this question hiển thị giải pháp tại thời gian biên dịch có lỗi, tôi tự hỏi liệu có thể nhận được cảnh báo thay thế và hoàn thành biên dịch (như được chỉ định trong câu hỏi).Cảnh báo sẽ liên tục được kích hoạt trên các trình biên dịch khác nhau?

Mặc dù chẩn đoán nói chung phụ thuộc vào trình biên dịch, nhưng một số mã sẽ bị kích hoạt (chẳng hạn như truy cập thành viên không tồn tại hoặc cố gắng khởi tạo đối tượng không hoàn chỉnh).

Cũng không thể nói như vậy vì cảnh báo, vì những xu hướng này khác nhau rất nhiều giữa các trình biên dịch. Mặc dù đó là hợp lý để giả định rằng cảnh báo kích hoạt với GCC cũng sẽ được kích hoạt với Clang, cùng không thể nói cho Visual C++.

Câu hỏi:
Những cảnh báo, nếu có, sẽ luôn có được kích hoạt trên cả ba trình biên dịch đề cập?

/W3 trên VC++ và -Wall trên GCC & Có thể giả thiết.


Lưu ý rằng điều này không chỉ hữu ích cho câu hỏi đó, nhưng có thể hữu ích cho việc kích hoạt cảnh báo cho thư do người dùng xác định.

+1

Tại sao bạn sử dụng '/ W3' trên MSVC trong khi sử dụng' -Wall' trên GCC/Clang? MSVC hỗ trợ '/ W4' và'/Wall' làm các mức cảnh báo bổ sung. –

+0

@Cody: Tôi nghĩ chúng là thiết lập "mặc định" cho trình biên dịch. Tôi không muốn thay đổi mức cảnh báo để hiển thị cảnh báo. '/ W3' là mặc định thực tế trong Visual Studio và' -Wall' có thể được xem như là một mặc định quá. – Xeo

Trả lời

2

này nên làm việc trên MSVC, GCC, và Clang:

#pragma message("hello world") 

Không rất hữu ích, nhưng vẫn hoạt động.

Những nhặt cảnh báo quá:

  • không sử dụng biến
  • nhãn chưa sử dụng
  • giá trị lớn ví dụ (1 < < 128)
+0

Không thể hiển thị bất kỳ nội dung mẫu nào với điều đó. :(Và điều đó không thực sự được coi là một cảnh báo ngay bây giờ, phải không? – Xeo

+0

@Xeo Vâng, mặc dù nó được đảm bảo để làm việc - cảnh báo không quá nhiều. – Pubby

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