Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

C++0x/C++11 có tương thích với C không?

Không. C++ (kể từ C++98) và các tiêu chuẩn mới hơn (C++11, C++14, C++17, C++20...) không hoàn toàn tương thích với C. C++ chưa bao giờ là superset hoàn hảo của C.

Một số khác biệt gây không tương thích:

  • C++ yêu cầu ép kiểu tường minh cho void* gán cho con trỏ kiểu khác (int *p = malloc(...) lỗi ở C++, OK ở C).
  • C++ có từ khóa mới (class, template, new, delete, namespace...) không thể dùng làm định danh trong C++ nhưng hợp lệ trong C.
  • C++ yêu cầu prototype hàm (không cho phép implicit int).
  • C++ có const mặc định internal linkage, C là external.
  • C99/C11 có tính năng C++ không có: VLA, restrict, designated initializers, _Generic,...

Thực tế: Phần lớn code C đúng chuẩn có thể biên dịch dưới C++ với ít sửa đổi, nhưng không đảm bảo 100%.