Cái nào tốt hơn C hay C++

Có rất nhiều phép thuật xảy ra dưới mui xe; . , có thể làm cho mã C++ viết dễ dàng và nhanh hơn rất nhiều so với mã C tương đương, nhưng khó hiểu và lý luận hơn (tùy thuộc vào mức độ bạn biết về C++ và các quy ước liên quan của nó). Một cái gì đó đơn giản như Foo newFoo; có thể gọi ra rất nhiều mã, tùy thuộc vào cách hàm tạo cho lớp Foo (và bất kỳ lớp nào mà nó phụ thuộc) đã được định nghĩa. Đây cũng là lý do tại sao quy ước viết ++it thay vì it++ khi lặp qua vùng chứa, vì hậu tố ++ thường liên quan đến thao tác sao chép tốn kém

Tùy thuộc vào những gì bạn đang làm, có thể có một số chi phí không nhỏ, đặc biệt đối với các tác vụ đơn giản. Lấy hai chương trình sau, chương trình đầu tiên bằng C, chương trình thứ hai bằng C++

/* C version */
#include 
int main(void)
{
  char greeting[] = "Hello, world";
  printf("%s\n", greeting);
  return 0;
}
/* end C version */

/* C++ version */
#include 
#include 
int main(void)
{
  std::string greeting("Hello, world");
  std::cout << greeting << std::endl;
  return 0;
}
/* end C++ version */

Hành vi giống hệt nhau, không có nhiều khác biệt về nguồn, nhưng trên hộp SLES 10 tôi làm việc với gcc 4. 1. 2, cái trước tạo ra một tệp thực thi có kích thước ~9kb, trong khi cái thứ hai chiếm hơn 12kb. 5kb (không tối ưu hóa), lớn hơn gần 28%. Loại C++ string dễ làm việc với IMO hơn rất nhiều so với thư viện chuỗi C và luồng C++ linh hoạt và có thể tùy chỉnh hơn nhiều so với luồng C, nhưng đối với mã thực sự chết não như thế này, chúng có thể không đáng để đầu tư

C ++ là một ngôn ngữ khổng lồ so với C, với một số ngữ nghĩa cực kỳ phức tạp. Mất nhiều thời gian hơn để thành thạo C++ so với C, nghĩa là nhiều người tuyên bố biết C++ nhưng lại không biết về nó nhiều như họ nghĩ.

Những điều về C khiến lập trình viên C++ lo lắng

C không phải là một ngôn ngữ lập trình an toàn bởi bất kỳ sự tưởng tượng nào; . C++ ít nhất cung cấp cho bạn các vùng chứa ném ngoại lệ nếu bạn cố truy cập bên ngoài phạm vi được xác định hiện tại của chúng;

Quản lý bộ nhớ trong C rất tốn nhiều công sức và dễ xảy ra lỗi so với các công cụ mà C++ cung cấp cho bạn. Nếu bạn đang xây dựng vùng chứa của riêng mình, bạn chịu trách nhiệm khớp tất cả các cuộc gọi Foo newFoo;1 và Foo newFoo;2, đảm bảo phân bổ thành công, sao lưu bất kỳ phân bổ một phần nào trong trường hợp có lỗi, v.v. Trong C++, bạn chỉ cần thêm các mục vào hoặc xóa các mục khỏi vùng chứa. Nếu có vấn đề, một ngoại lệ sẽ được đưa ra

Tương tự như vậy, việc xử lý lỗi trong C là một vấn đề khó khăn so với các công cụ mà C++ cung cấp (cụ thể là các ngoại lệ). Điều thực sự thú vị là khi bạn đã phân bổ rất nhiều bộ nhớ và sau đó gặp khó khăn trong quá trình xử lý của mình; . Với các nguyên tắc C++ và RAII, điều này (tương đối) dễ thực hiện

Vì vậy, khi nào tôi sử dụng cái này hơn cái kia?

Nếu những gì bạn đang viết là đơn giản, hãy đọc nó/muck với nó/thoát khỏi ứng dụng đó, hành vi của nó có thể được mô tả rõ ràng về đầu vào và đầu ra, và các vấn đề về hiệu suất, sau đó thích C hơn C++. Mặt khác, thích C++

Để lại ý kiến ​​chân thành của bạn và giúp hàng ngàn người chọn nền tảng học tập trực tuyến tốt nhất. Mọi phản hồi, dù tích cực hay tiêu cực, đều được chấp nhận miễn là trung thực. Chúng tôi không công bố phản hồi thiên vị hoặc thư rác. Vì vậy, nếu bạn muốn chia sẻ kinh nghiệm, ý kiến ​​​​hoặc đưa ra lời khuyên - bối cảnh là của bạn

Các ngôn ngữ lập trình C và C++ hỗ trợ phần lớn các sản phẩm, ứng dụng và trang web trên thế giới

Mỗi người đã giúp đặt nền móng cho việc tạo ra nhiều ngôn ngữ lập trình phổ biến, chẳng hạn như Java. Chúng cũng hỗ trợ nhiều ngôn ngữ mà bạn có thể sử dụng thường xuyên cho các dự án lập trình của mình, chẳng hạn như Python

Trong bài viết này, bạn sẽ tìm thấy tổng quan chung và thân thiện với người mới bắt đầu về hai ngôn ngữ cùng với những điểm tương đồng và khác biệt chính của chúng

Nguồn gốc của C và C++

Lịch sử của ngôn ngữ lập trình C

Ken Thompson và Dennis Ritchie đã làm việc được vài năm trong dự án MULTICS (Multiplexed Information and Computing Service) tại AT&T Bell Laboratories

Sau khi dự án dừng lại, vào năm 1969, Ken Thompson bắt đầu thực hiện trò chơi Du hành Không gian của mình trên một chiếc máy PDP-7 ít được sử dụng.

Trong khi làm như vậy, cuối cùng anh ấy đã viết được một hệ điều hành gần như hoàn chỉnh, Unix, từ đầu bằng hợp ngữ

Trong khi làm việc trên MULTICS, cả Thompson và Ritchie đều đã viết phần mềm hệ thống và các tiện ích lập trình bằng các ngôn ngữ cấp cao hơn. Và họ đã thấy toàn bộ quá trình dễ dàng hơn nhiều so với ngôn ngữ hợp ngữ bí ẩn và khó giải mã

Ritchie đã tham gia cùng Thompson để giúp chuyển Unix sang một máy mới hơn - PDP-11

Trong thời gian đó, họ đã thử nghiệm nhiều ngôn ngữ cấp cao hơn có thể giúp hoàn thành công việc

Họ đã sử dụng BCPL (Ngôn ngữ lập trình kết hợp cơ bản), được sử dụng nhiều trong kỷ nguyên MULTICS. Sau khi dùng thử, cuối cùng Thompson đã viết ra một ngôn ngữ mới – ngôn ngữ lập trình B

Ngôn ngữ B tương tự như BCPL nhưng là phiên bản đơn giản và rút gọn hơn

Nhưng B chưa đủ mạnh và chưa tận dụng hết các tính năng mới cũng như sức mạnh của PDP-11

Cái nào tốt hơn C hay C++
Thompson (ngồi) và Ritchie làm việc cùng nhau tại PDP-11.

Dennis Ritchie bắt đầu cải thiện ngôn ngữ B và cuối cùng tạo ra ngôn ngữ lập trình C

C là một ngôn ngữ di động, có nghĩa là các chương trình được viết bằng nó có thể được chuyển và sử dụng trên nhiều loại kiến ​​trúc máy. Nó rất nhanh và dễ biên dịch và có ánh xạ trực tiếp tới mã máy, cho phép lập trình viên truy cập vào các chức năng cấp thấp

Cuối cùng họ đã viết lại hệ điều hành Unix bằng C vào năm 1972

Vì C là portable và là ngôn ngữ Unix được triển khai trên đó, các nhà phát triển bắt đầu chấp nhận nó và sử dụng nó rộng rãi. Điều này dẫn đến sự thành công của hệ điều hành Unix và đến lượt ngôn ngữ C trở nên phổ biến

Dennis Ritchie và Brian Kernighan đồng tác giả cuốn sách 'Ngôn ngữ lập trình C' vào năm 1977, đã tạo ra một tiêu chuẩn cho cách sử dụng ngôn ngữ này. Cuốn sách này đã phổ biến ngôn ngữ hơn nữa

C có ý nghĩa cực kỳ quan trọng trong lịch sử điện toán và việc tạo ra nó dẫn đến việc tạo ra nhiều ngôn ngữ lập trình khác. Vì thế, nó thường được gọi là "mẹ đẻ" của tất cả các ngôn ngữ lập trình

Lịch sử của C++

Năm 1979, nhà nghiên cứu Bjarne Stroustrup được thuê tại Phòng thí nghiệm AT&T Bell

Trong những năm 1970, độ phức tạp và sức mạnh tính toán của máy tính tăng lên và những hạn chế trong ngôn ngữ lập trình C bắt đầu xuất hiện.

Đầu những năm 1980, Bjarne Stroustrup đã tạo ra một ngôn ngữ mới chịu ảnh hưởng của hai điều.

  • Khả năng lập trình hướng đối tượng của một ngôn ngữ khác, Simula, cung cấp một cách tiếp cận lập trình khác so với C. Mã có thể được trừu tượng hóa và tổ chức tốt hơn và mọi thứ có thể được biểu diễn bằng cách sử dụng các lớp
  • Ngôn ngữ lập trình hệ thống, C, cung cấp khả năng tiếp cận thực sự gần với phần cứng máy và thực hiện các tác vụ tính toán ở mức độ thấp

Hai ý tưởng đó được kết hợp cho phép trừu tượng hóa ở mức độ cao hơn mà không làm mất đi hiệu quả ở mức độ thấp của C. Vì vậy, ngôn ngữ 'C với các lớp' đã được tạo

Năm 1984 'C with classes' được đổi tên thành C++

Vì vậy, C++ là siêu bộ của C, nghĩa là nó là phần mở rộng của C và dựa trên nó. C++ chỉ cung cấp các khả năng bổ sung cho ngôn ngữ C

Điểm giống nhau giữa C và C++

Dưới đây là một số điểm tương đồng giữa C và C++

Cú pháp và cấu trúc mã

Cú pháp tổng thể của hai ngôn ngữ rất giống nhau. Các toán tử và từ khóa được sử dụng trong C cũng được sử dụng trong C++ để đạt được những điều tương tự. Nhưng C++ có nhiều từ khóa hơn C và nó có ngữ pháp mở rộng

Nhận xét nội tuyến, // và nhận xét theo khối, */ */, trông giống nhau

Ngoài ra, mọi câu lệnh đều kết thúc bằng dấu chấm phẩy,_______15_______

Điều kiện, vòng lặp, khởi tạo và khai báo biến – tất cả đều giống nhau giữa hai ngôn ngữ

Cả C và C++ đều có phương thức main() khởi động mọi chương trình và cả hai đều bao gồm các tệp tiêu đề ở đầu các tệp tương ứng, với #include

Ngôn ngữ lập trình tổng hợp

Cả C và C++ đều là ngôn ngữ lập trình được biên dịch

Trình biên dịch là một chương trình phần mềm máy tính

Nó lấy mã nguồn mà một lập trình viên đã viết bằng ngôn ngữ lập trình cấp cao hơn và dịch nó sang ngôn ngữ khác mà máy tính có thể hiểu được

Dạng này là mã hợp ngữ đầu tiên được dịch lại thành mã máy – ngôn ngữ mẹ đẻ của tất cả các máy tính

Ngôn ngữ máy là một tập hợp các hướng dẫn được hiểu trực tiếp bởi CPU của máy tính (Bộ xử lý trung tâm)

Khi mã nguồn đã được dịch sang mã máy, tệp thực thi nhị phân, a.out, sẽ được tạo

Sự khác nhau giữa C và C++

Bây giờ chúng ta hãy xem xét một số khác biệt giữa hai ngôn ngữ

Phương thức nhập và xuất

C và C++ sử dụng các cách khác nhau để xuất thông tin ra bàn điều khiển và nhận thông tin từ người dùng

Trong C, scanf() được sử dụng cho đầu vào của người dùng, trong khi printf() được sử dụng để xuất dữ liệu

Trong C++, std::cin >> được sử dụng để nhận đầu vào của người dùng và std::cout << được sử dụng để xuất dữ liệu

Mô hình lập trình

Sự khác biệt quan trọng nhất giữa hai ngôn ngữ là cách tiếp cận lập trình khác nhau mà mỗi ngôn ngữ sử dụng

C là một ngôn ngữ hướng thủ tục và trọng tâm của nó là các chức năng

Các chương trình được chia thành một tập hợp các chức năng và chúng bao gồm các hướng dẫn từng bước hoặc các lệnh được thực hiện theo thứ tự tuần tự.

Phong cách lập trình này chỉ định cách thực hiện một việc gì đó, đưa ra các bước có cấu trúc về cách thực hiện các tác vụ tính toán, theo cách tiếp cận từ trên xuống

Phong cách lập trình này có thể trở nên khá lộn xộn và dễ bị lỗi khi các chương trình tăng kích thước. Dẫn đến phải copy và paste nhiều file và cập nhật nhiều chức năng khi có thay đổi

Ngoài vai trò là ngôn ngữ thủ tục, C++ còn là ngôn ngữ lập trình hướng đối tượng, dựa trên khái niệm phân tách chương trình thành các đối tượng

Mọi thứ được tổ chức và chia thành các nhóm nhỏ hơn gồm các phần hoặc đối tượng có liên quan, là một thể hiện của một lớp, theo cách tiếp cận từ dưới lên

Lập trình hướng đối tượng dựa trên bốn nguyên tắc. đóng gói, trừu tượng hóa, kế thừa và đa hình

Phong cách lập trình này tạo ra mã dễ đọc và dễ sử dụng hơn, dễ bảo trì hơn, đồng thời cung cấp khả năng bảo mật dữ liệu tốt hơn

STL

C ++ cung cấp STL – Thư viện mẫu tiêu chuẩn – và C thì không

Nó cung cấp các lớp mẫu cho các thành phần và cấu trúc dữ liệu thường được sử dụng để triển khai chức năng tích hợp, được thêm vào

Một thành phần như vậy là các thùng chứa chẳng hạn như Vectơ, lưu trữ các bộ sưu tập đối tượng

không gian tên

Không gian tên là một tính năng có sẵn trong C++ chứ không phải C

Chúng là các thùng chứa được sử dụng để sắp xếp mã thành các nhóm hợp lý gồm các mã định danh và các đối tượng tương tự dưới một tên, trong một phạm vi

Chúng ngăn chặn sự trùng lặp tên khi có nhiều thư viện và ngăn xung đột với tên của các không gian tên khác trong một chương trình

Một ví dụ về không gian tên là */ */0

Một cách để sử dụng một không gian tên và đưa nó vào một phạm vi là sử dụng từ khóa */ */1, ví dụ như */ */2

xử lý ngoại lệ

C không cung cấp cách xử lý ngoại lệ trong các chương trình giúp ngăn ngừa lỗi

Mặt khác, C++ hỗ trợ xử lý ngoại lệ bằng cách giới thiệu các khối */ */3 và */ */4

Phần mở rộng tệp

Phần mở rộng tệp cho tệp chứa mã C là */ */5, trong khi phần mở rộng tệp cho tệp C++ là */ */6

C và C++ được sử dụng ở đâu?

C thường được sử dụng cho các tác vụ tính toán ở mức độ thấp, đòi hỏi khắt khe trong đó tốc độ, hiệu quả và khả năng tiếp cận gần với máy là điều bắt buộc

C giả định rằng các lập trình viên biết họ đang làm gì và cho họ tự do

Do đó, đây là ngôn ngữ được lựa chọn cho các hệ điều hành, thiết bị nhúng, lập trình hệ thống, hạt nhân và trình điều khiển, phát triển trình biên dịch và ngành ứng dụng IoT (Internet of Things) đang phát triển

C++ một lần nữa cho phép lập trình viên truy cập và thao tác gần với máy, đồng thời mang lại hiệu quả và hiệu suất cao cho các hệ thống quy mô lớn. Đồng thời, nó ở cấp độ cao hơn với đủ khả năng trừu tượng khỏi máy móc

C ++ là ngôn ngữ phổ biến được lựa chọn để tạo công cụ trò chơi và đồ họa máy tính và ứng dụng, ứng dụng VR, trình duyệt web như Google Chrome, Mozilla Firefox và Safari cũng như tiện ích mở rộng trình duyệt web. Công cụ Tìm kiếm của Google cũng được xây dựng bằng C++

Cách học C và C++

Dưới đây là danh sách một số tài nguyên giúp bạn bắt đầu hành trình học tập C và C++ của mình

để học C

  • Sổ tay C dành cho người mới bắt đầu. Tìm hiểu kiến ​​thức cơ bản về ngôn ngữ lập trình C chỉ trong vài giờ
  • Ngôn ngữ lập trình C là gì?
  • Hướng dẫn lập trình C cho người mới bắt đầu

Để học C++

  • Ngôn ngữ lập trình C++
  • Hướng dẫn C++ cho người mới bắt đầu
  • Tìm hiểu lập trình hướng đối tượng (OOP) trong C++
  • Tìm hiểu C ++ hiện đại bằng cách xây dựng một plugin âm thanh

Phần kết luận

Cảm ơn bạn đã hoàn thành và tôi hy vọng bạn thấy bài viết này hữu ích

Bạn đã tìm hiểu về nguồn gốc của C và C++ và bối cảnh lịch sử của chúng. Sau đó, bạn đã thấy một vài điểm tương đồng và khác biệt của chúng, cách sử dụng từng ngôn ngữ và một số tài nguyên để bạn bắt đầu học ngôn ngữ

Mã hóa vui vẻ

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO

QUẢNG CÁO


Cái nào tốt hơn C hay C++
Dionysia Lemonaki

Học một cái gì đó mới mỗi ngày và viết về nó


Nếu bài viết này hữu ích, hãy tweet nó

Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu

Đâu là sự khác biệt giữa. C và. tập tin CPP?

C là ngôn ngữ hướng hàm vì C là ngôn ngữ lập trình thủ tục. C++ là ngôn ngữ hướng đối tượng vì nó là một chương trình hướng đối tượng . Nạp chồng hàm và toán tử không được hỗ trợ trong C. Nạp chồng hàm và toán tử được hỗ trợ bởi C++.

C ++ có tốt hơn C không?

So với C, C++ có nhiều thư viện và chức năng hơn đáng kể để sử dụng . Nếu bạn đang làm việc với phần mềm phức tạp, C++ phù hợp hơn vì bạn có nhiều thư viện hơn để dựa vào. Suy nghĩ thực tế, có kiến ​​thức về C++ thường là yêu cầu đối với nhiều vai trò lập trình khác nhau.

Nên học C hay C trước?

Tôi khuyên bạn nên học C trước , bởi vì. nó là một ngôn ngữ cơ bản - rất nhiều ngôn ngữ có nguồn gốc từ C.

C hay C# tốt hơn?

C# thiên về thiết kế. C là nhiều hơn về các chức năng. Bộ sưu tập rác C# được thực hiện bởi CLR, trong khi C không có khái niệm về bộ sưu tập rác. C hỗ trợ con trỏ nhưng C# thì không