Tôi hiểu rằng tiêu chuẩn cần phải được tuân theo, nhưng nó không tạo ra xiềng xích cho sự sáng tạo của lập trình viên? vẫn còn một số khác biệt trong cách các trình biên dịch khác nhau tuân theo các tiêu chuẩn. Ví dụ, tôi có thể viết một mã hoạt động, rất tốt về hiệu suất và tốc độ, tức là tất cả những gì quan trọng, nhưng vẫn không nhất thiết phải tuân thủ nghiêm ngặt các tiêu chuẩn.
Không. Tiêu chuẩn cho biết những gì được phép làm. Nếu nó không được chỉ định, bạn đang ở trong lãnh thổ hành vi không xác định, và sau đó tất cả các cược đã tắt - chương trình có thể tự do làm bất cứ điều gì.
Vì bạn đã đề cập ví dụ cụ thể về void main()
vs int main()
, tôi có thể cải thiện câu trả lời của mình.
void main()
không phải là một khai báo tiêu chuẩn của chức năng chính. Nó có thể hoạt động trên một số trình biên dịch thông qua các phần mở rộng, nhưng nó dựa vào việc thực hiện. Ngay cả khi nó hoạt động, bạn phải kiểm tra nếu nó làm những gì bạn muốn. Vấn đề là, các nhà phát triển trình biên dịch có thể quyết định loại bỏ void main()
với bản phát hành trình biên dịch tiếp theo, phá vỡ ứng dụng của bạn.
Mặt khác, tiêu chuẩn xác định rõ ràng chữ ký của main int main()
và nó cho biết những gì nó nên làm.
Mặt khác, có những điều không được xác định trong tiêu chuẩn. Sau đó, một tiêu chuẩn khác có thể được áp dụng (ví dụ như POSIX). Ví dụ tốt nhất có thể là với việc thực hiện các luồng trong c ++ 03, vì các chương trình tiêu chuẩn của c ++ 03 là 1 luồng. Trong trường hợp đó, bạn buộc phải sử dụng thư viện phụ thuộc nền tảng, hoặc một cái gì đó như boost .