01/10/2018, 01:13

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?

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 ạ ???

Itachi Citus viết 03:23 ngày 01/10/2018

Ý 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.

Kiet_le viết 03:16 ngày 01/10/2018

Ý 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 ạ ?

Itachi Citus viết 03:19 ngày 01/10/2018

Vậy mình nhầm . Bên C thì mình không có.

rogp10 viết 03:14 ngày 01/10/2018

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
  • 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.

Kiet_le viết 03:19 ngày 01/10/2018

Tiện thể cho em hỏi luôn là làm sao để xác định chuẩn C đang dùng ạ ?

Sáng Béo viết 03:17 ngày 01/10/2018

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++)
Kiet_le viết 03:20 ngày 01/10/2018

Hình như kể từ C99 thì đã cho phép for(int i = 0; i<n; i++) rồi thì phải`

Người bí ẩn viết 03:24 ngày 01/10/2018

hình như C11 thì cho phép for(int i = 0; i < n, i++) còn C99 phải

Em nhớ C99 đã cho phép for (int i = 0; i < n; ++i) rồi mà anh nhỉ

rogp10 viết 03:30 ngày 01/10/2018

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

Kiet_le viết 03:26 ngày 01/10/2018

Em dùng gcc vậy xác định bằng cách nào ạ ?

rogp10 viết 03:20 ngày 01/10/2018
stackoverflow.com
Hemanth

How to find my current compiler's standard, like if it is C90, etc

c, compiler-construction, c99, c89
asked by Hemanth on 11:39AM - 14 Feb 11
Sáng Béo viết 03:22 ngày 01/10/2018

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.

Kiet_le viết 03:15 ngày 01/10/2018

Em không làm được, mà hình như bài đó là cho Linux mà

rogp10 viết 03:24 ngày 01/10/2018

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
Bài liên quan
0