Em vừa đọc trong một quyển sách nói là chuẩn C11 và C99 có một số khác biệt nhỏ, nhưng khi em tìm trên mạng thì không thấy tài liệu nào nói về điều này cả, không biết C11 và C99 có những khác biệt như thế nào và dùng cái nào thì tốt hơn ạ ???
C11 và C99 có những khác biệt như thế nào và dùng cái nào thì tốt hơn?
Ý bạn là C++ 11 và C++ 99 phải không nhỉ?
C++ 11 là C++ phiên bản năm 2011, C++ 99 là C++ phiên bản năm 1999. Về khác biệt thì bạn có thể xem ở đây nè, ví dụ với List: http://www.cplusplus.com/reference/list/list/
Phiên bản hiện tại là C++ 17 thì phải, Về cơ bản thì phiên bản mới hơn thường chỉ bổ sung tính năng, hàm, tối ưu xử lý v…v… chứ đa số code viết theo chuẩn C++ 99 đều tương thích với các chuẩn mới hơn. Bạn cứ lấy phiên bản mới nhất mà học.
Ý của em là C11 và C99 trong lập trình C cơ, không biết anh có tài liệu nào về hai cái này không ạ ?
TL;DR: C11 có những thay đổi cơ bản:
- Việc hỗ trợ các khai báo kiểu
T a[n];
(variable-length array) là “tùy hỉ” (optional) - Hỗ trợ cross-platform multithreading
<thread.h>
(lưu ý vẫn bị leak abstraction) - Trích xuất một số thông tin về cách biểu diễn số chấm động
- Chính thức hỗ trợ Unicode
<uchar.h>
- Hỗ trợ khóa file cross-platform (‘x’ option)
- Cấu trúc không tên (anonymous)
- Hỗ trợ tùy biến biểu thức theo kiểu với từ khóa
Generic
- Chính thức hỗ trợ alignment
<stdalign.h>
(tức là canh kích cỡ 1 struct cho chẵn byte)
với lại thêm hàm nhập xuất có đuôi _s.
Tiện thể cho em hỏi luôn là làm sao để xác định chuẩn C đang dùng ạ ?
hình như C11 thì cho phép for(int i = 0; i < n, i++)
còn C99 phải
int i;
for(i = 0; i < n; i++)
Hình như kể từ C99 thì đã cho phép for(int i = 0; i<n; i++)
rồi thì phải`
Em nhớ C99 đã cho phép for (int i = 0; i < n; ++i)
rồi mà anh nhỉ
Tùy trình biên dịch bạn dùng. gcc thì có hai cách xác định, còn VS không phải là C
Em dùng gcc vậy xác định bằng cách nào ạ ?
tại cũng không nhớ lắm, nhiều lần code nó bảo phải thêm option vào cho compiler mới được.
Em không làm được, mà hình như bài đó là cho Linux mà
Tức là: (TL;dr)
- Nếu bạn code cho vài chuẩn thì dùng macro rồi
#if... #else... #endif
- Còn nếu bạn chỉ code 1 chuẩn thì dùng option
-std={c89/c99/c11/c14/c1x}
khi gọi lên