2012-03-14 33 views

Trả lời

15

Làm sạch C là một thuật ngữ được đặt trong Harbison & Sách thép (C: A Reference Manual, Prentice Hall). Một chương trình được cho là được viết trong Clean C nếu nó có thể được biên dịch bởi trình biên dịch C chuẩn và trình biên dịch C++ chuẩn; và việc thực thi của nó sẽ không tạo ra hành vi quan sát khác nhau từ hai trình biên dịch (các vấn đề về tối ưu hóa không liên quan).

+0

@pst "là một thuật ngữ đặt ra trong cuốn sách Harbison & Steele" Đó không phải là tài liệu tham khảo? – Mysticial

+0

@pst Tôi không thể tìm thấy số trang trong bản sao H & S của tôi, nhưng một số người đề cập đến thuật ngữ này và H & S trong comp.lang.c – ouah

+1

Hãy thử phần 1.1.5 _Standard C++ _ (p.5 trong ngày 5 ấn bản C: ARM). – ldav1s

2

Điều khiến tôi thấy rõ ràng nhất là trong C++, bạn phải truyền giá trị trả về của malloc. Các cấu trúc cũng được tự động đánh máy trong C++.

Luôn sử dụng trình biên dịch C cho mã C, chứ không phải C++. C++ là không hoàn toàn tương thích với C.

Một vài người khác sự khác biệt có thể là:

  • Trong C, tuyên bố trống func(); khai báo một hàm không xác định đối số của nó là gì, trong khi trong C++, void func(); tương đương với c void func (void) ', không có đối số;
  • Nguyên mẫu được yêu cầu trong C++, trong khi đó thường chỉ là cảnh báo trong C;
  • Loại hằng số ký tự (như 'a') là int trong C và char trong C++;
  • Loại chuỗi ký tự là char [] trong C và const char [] trong C++;
  • Một số tên biến hợp lệ trong C, như lớp, là các từ khóa được đặt trước trong C++.
+0

xem thêm http://david.tribble.com/text/ cdiffs.htm – Christoph

+0

Điều gì có nghĩa là 'void func()' đã không chỉ định các đối số của nó? Làm thế nào điều này có thể được sử dụng thực tế? –

+0

@VictorZamanian Quy ước gọi điện cho phép bạn chuyển số lượng đối số không chính xác trong C mà không bị lỗi. Tất nhiên, nếu callee làm điều gì đó xấu với các đối số "không chính xác" của bạn, đó là hành vi không xác định. Bạn chỉ đơn giản tuyên bố sự trả về là vô hiệu. C cho phép một số cẩu thả cực đoan như thế. Tôi nghĩ rằng bất kỳ đối số bạn vượt qua một cái gì đó tuyên bố như thế sẽ được giả định cần phải được chuyển đổi sang int. Không chắc chắn và tôi thực sự không quan tâm đến chuyện vặt như thế. Tôi khai báo các tham số của mình. :) – doug65536

Các vấn đề liên quan