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ó
constmặ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%.