Tiêu chuẩn C++ không có khái niệm về "lỗi trình biên dịch gây tử vong". Các chương trình được hình thành không đúng với chẩn đoán bắt buộc, hoặc hình thành bệnh không cần chẩn đoán hoặc được hình thành tốt.
Trong C++, yêu cầu duy nhất các địa điểm chuẩn trên chẩn đoán chương trình không đúng định dạng là hiển thị chẩn đoán . Nội dung của chẩn đoán đó không được xác định. Điều gì khác xảy ra ngoài chẩn đoán đó không được xác định.
Nhiều trình biên dịch triển khai các phần mở rộng tới tiêu chuẩn C++, chúng được yêu cầu biên dịch dựa vào các chương trình không có hình thức khác và tạo ra một tệp thực thi có thể chạy được. Nếu chúng tuân thủ một tiêu chuẩn, điều duy nhất chúng phải làm là in một thông báo cảnh báo (đáp ứng yêu cầu chẩn đoán của (các) chuẩn C++).
Trong trường hợp này, nó đang in thông báo cảnh báo mà bạn đã sử dụng tính năng C++ 14. Nó bây giờ đã thực hiện thành công những gì mà tiêu chuẩn C++ 11 yêu cầu với chương trình hình thành của bạn. Nó cũng tạo ra một tệp thực thi mà chương trình của bạn sẽ làm gì nếu tính năng đó từ tiêu chuẩn C++ 14 đã được sử dụng: nó là miễn phí để làm như vậy, vì tiêu chuẩn tại thời điểm này không hạn chế những gì chương trình thực hiện một khi nó là một chương trình C++ 11 không thành công.
Nếu bạn không muốn tùy chọn này, trình biên dịch thường có cờ warnings-as-errors
và các cờ khác nhau strict
và pedantic
chặn các tiện ích mở rộng theo tiêu chuẩn mà chúng sử dụng. Sau đó, lỗi sẽ ngăn chặn việc tạo ra tệp thực thi và bạn sẽ không còn bị nhầm lẫn nữa.
gcc theo mặc định giả định bạn thực sự muốn biên dịch mã được cung cấp thành thứ gì đó, chứ không phải là hành động chuẩn, và chỉ tạo ra lỗi khi không có cách hợp lý để diễn giải mã của bạn như một chương trình có thể khớp với ý định của bạn . Nó cung cấp cờ để chuyển nó sang một chế độ nghiêm ngặt và pedantic.
amusingly, in ra một nhân vật không gian duy nhất đáp ứng các yêu cầu để hiển thị một chẩn đoán.Tiêu chuẩn C++ có thể được đọc theo các cách bệnh lý để tạo ra chất lượng thực thi kém trong trình biên dịch của bạn: tạo ra một tiêu chuẩn chống trình biên dịch thù địch không đáng để nỗ lực.
Sử dụng '-nhập lỗi 'cho lỗi –
@PiotrSkotnicki Chắc chắn, nhưng chương trình quản lý được xây dựng và chạy mà không có tính năng bắt buộc như thế nào? – DBedrenko
Tại sao bạn nghĩ nó chạy mà không có tính năng cần thiết? –