2012-02-13 26 views
10

Tôi đang học lại C sau khi không chạm vào nó từ năm 2000 trở lên. Tôi đã làm việc với Ruby từ đó, và tôi đã khám phá ra một thế giới toàn bộ các thành ngữ lập trình mà tôi chưa bao giờ biết.Relearning C: Thành ngữ mới?

Những kỹ thuật, sách, thành ngữ C quan trọng nào đã phát sinh trong thập kỷ qua, nếu có? Tôi biết về các tiêu chuẩn C99 và C11, nhưng tôi nên tìm ở đâu khác? Hoặc có phong cách C vẫn không đổi ngay cả khi OOP và FP đã trở thành tiêu chuẩn?

+4

Bạn có đang viết C89 hoặc C99 không? – Joe

+4

Đây là một câu hỏi khó trả lời. Tôi không thể nhớ những gì lập trình giống như 10 năm trước đây! –

+2

Tôi không chắc chắn nếu điều này là [xây dựng] (http://stackoverflow.com/faq#dontask) ... câu hỏi thú vị mặc dù, vì vậy tôi không gắn cờ. – cha0site

Trả lời

4

C không hỗ trợ ở mức ngôn ngữ gì khác hơn là lập trình thủ tục - và đó là một sự lựa chọn chính xác, bởi vì nó được sinh ra để được gần như là một "lắp ráp cầm tay" và nó được sử dụng để làm việc càng gần chặt vào máy như có thể (không cần phải lắp ráp). Hầu hết các ngôn ngữ lắp ráp không cung cấp nhiều hơn nữa, về mặt các mô hình lập trình, so với lệnh ngăn xếp và hàm gọi (một số micros thậm chí không) - và đó là những gì C được mô hình hóa. Sau khi tất cả, có một lý do tại sao C++ và Objective C được sinh ra: C phải giữ triết lý thiết kế của nó, và để thêm nhiều thứ trừu tượng hơn, người ta phải thực sự chia rẽ ngôn ngữ.

Điều đó đang được nói, không có gì ngăn bạn viết, ví dụ: Mã OO trong C - thực sự, nhiều người làm điều đó (tôi muốn nói rằng đó là một trong những thành ngữ được khuếch tán nhất trong C), nhưng bạn không phải mong đợi hầu như bất kỳ đường cú pháp nào cho điều đó: bạn sẽ phải sử dụng struct s cho dữ liệu, "bình thường" chức năng để "thi đua" phương pháp, thành phần cho thừa kế, bảng con trỏ cho đa hình, và như vậy. Tuy nhiên, tôi không biết liệu đây có phải là thành ngữ "thập kỷ trước" hay không, nó đang được sử dụng lâu hơn nữa.

+0

đó là những gì làm cho nó tuyệt vời. không bao gồm các mẫu chống. hoặc các mẫu. chỉ là công cụ để tự tạo ra tất cả. –

+0

@JosephLeBrech: chuyển đổi giữa C++ và Python cho một dự án mà tôi thấy khi bạn cần thử nghiệm một ngôn ngữ nhanh hơn với các mẫu và công cụ sẵn sàng của nó là một lựa chọn tuyệt vời, nhưng khi bạn phải chạy nhanh * và/hoặc xây dựng một giải pháp hoàn toàn phù hợp với nhu cầu của bạn, nó thường tốt hơn một ngôn ngữ cung cấp cho bạn các công cụ mà không phải ép buộc bất cứ thứ gì. Như thường lệ, việc lựa chọn công cụ phù hợp phụ thuộc vào những gì bạn đang cố gắng làm. –

+0

@Joseph: Tuy nhiên, nó thiếu chức năng như bảo đảm tối ưu hóa cuộc gọi đuôi có hiệu quả ngăn bạn thực hiện một số loại mẫu nhất định. –

2

Nó thay đổi theo văn hóa và nó thực sự không tiến hóa nhiều như các ngôn ngữ khác mà tôi sử dụng. Tôi đã nhìn thấy:

  • nhiều loại an toàn
  • dụng cụ tốt hơn
  • 32/64 bit mã tương thích và các loại chiều rộng cố định
  • thư viện, đặc biệt là POSIX
  • hơn
  • hướng đối tượng

không chính xác thành ngữ mới cho mọi điểm - theo như cách thức các chương trình được xây dựng và tiếp cận, đây là một số thay đổi đáng chú ý hơn ở cấp nguồn .