Mọi thứ trước khi chuẩn hóa thường được gọi là "K&R C", theo tên cuốn sách nổi tiếng , với Dennis Ritchie, người phát minh ra ngôn ngữ C, là một trong những tác giả. Đây là "ngôn ngữ C" từ năm 1972-1989.
Tiêu chuẩn C đầu tiên được phát hành trên toàn quốc năm 1989 tại Hoa Kỳ, bởi viện tiêu chuẩn quốc gia ANSI. Bản phát hành này được gọi là C89 hoặc ANSI-C. Từ năm 1989-1990 đây là "ngôn ngữ C".
Năm sau, tiêu chuẩn Mỹ đã được quốc tế chấp nhận và được công bố bởi ISO (ISO 9899: 1990). Bản phát hành này được gọi là C90. Về mặt kỹ thuật, nó là tiêu chuẩn tương tự như C89 / ANSI-C. Về mặt hình thức, nó thay thế C89 / ANSI-C, khiến chúng trở nên lỗi thời. Từ 1990-1999, C90 là "ngôn ngữ C".
Xin lưu ý rằng kể từ năm 1989, ANSI không liên quan gì đến ngôn ngữ C. Các lập trình viên vẫn nói về "ANSI C" thường không có manh mối về ý nghĩa của nó. ISO "sở hữu" ngôn ngữ C, thông qua tiêu chuẩn ISO 9899.
Một bản cập nhật nhỏ đã được phát hành vào năm 1995, đôi khi được gọi là "C95". Đây không phải là một sửa đổi lớn, mà là một sửa đổi kỹ thuật có tên chính thức là ISO / IEC 9899: 1990 / Amd.1: 1995. Thay đổi chính là giới thiệu hỗ trợ nhân vật rộng rãi.
Năm 1999, tiêu chuẩn C đã trải qua một lần sửa đổi lớn (ISO 9899: 1999). Phiên bản tiêu chuẩn này được gọi là C99. Từ năm 1999-2011, đây là "ngôn ngữ C".
Năm 2011, tiêu chuẩn C lại được thay đổi (ISO 9899: 2011). Phiên bản này được gọi là C11. Tính năng mới khác nhau như _Generic
, _Static_assert
và hỗ trợ chủ đề đã được thêm vào ngôn ngữ. Bản cập nhật tập trung nhiều vào đa lõi, đa xử lý và giải trình tự biểu thức. Từ năm 2011-2017, đây là "ngôn ngữ C".
Năm 2017, C11 đã được sửa đổi và các báo cáo sai sót khác nhau đã được giải quyết. Tiêu chuẩn này được gọi không chính thức là C17 và được phát hành dưới tên ISO 9899: 2018. Nó không có tính năng mới, chỉ là những sửa chữa. Đây là phiên bản hiện tại của ngôn ngữ C.
"C99 nghiêm ngặt" có thể đề cập đến cài đặt trình biên dịch buộc trình biên dịch phải tuân theo tiêu chuẩn bằng chữ cái. Có một điều khoản thực hiện phù hợp trong tiêu chuẩn C. Về cơ bản nó có nghĩa là: "trình biên dịch này thực sự triển khai ngôn ngữ C một cách chính xác". Các chương trình triển khai ngôn ngữ C một cách chính xác được chính thức gọi là các chương trình tuân thủ nghiêm ngặt .
"GNU C" có thể có nghĩa là hai điều. Bản thân trình biên dịch C là một phần của Bộ sưu tập trình biên dịch GNU (GCC). Hoặc nó có thể có nghĩa là thiết lập mặc định không chuẩn mà trình biên dịch GCC C sử dụng. Nếu bạn biên dịch với gcc program.c
thì bạn không biên dịch theo tiêu chuẩn C, mà là thiết lập GNU không theo tiêu chuẩn, có thể được gọi là "GNU C". Ví dụ, toàn bộ nhân Linux được tạo bằng GNU C không chuẩn và không phải trong C chuẩn.
Nếu bạn muốn biên dịch các chương trình của mình theo tiêu chuẩn C, bạn nên nhập gcc -std=c99 -pedantic-errors
. Thay thế c99 bằng c11 nếu phiên bản GCC của bạn hỗ trợ nó.