Ngôn ngữ lập trình C kể từ khi ra mắt đã phát triển không ngừng và cho đến thời điểm hiện tại, ứng dụng của loại ngôn ngữ này vẫn vô cùng phổ biến
1. Ngôn ngữ lập trình C là gì?
Ngôn ngữ lập trình C là một trong những ngôn ngữ cơ bản, sơ cấp cho người mới bắt đầu làm quen với lập trình. Loại ngôn ngữ này cung cấp cho người học quyền truy cập cấp thấp vào bộ nhớ của hệ thống.
Cụ thể, một chương trình viết bằng C trước khi khởi chạy bằng máy tính phải được chạy qua trình biên dịch C (C compiler) để chuyển đổi nó thành định dạng file thực thi (đuôi exe.). Ngoài ra, nhiều phiên bản hệ thống dựa trên hệ điều hành Unix được viết bằng C và đã được chuẩn hóa như một phần của Giao diện hệ điều hành di động (POSIX).
Ngày nay, chúng ta có thể thấy rằng ngôn ngữ lập trình C chạy trên nhiều nền tảng phần cứng và hệ điều hành khác nhau như Microsoft và Linux.
Xem thêm: Ngôn ngữ lập trình là gì? Ngôn ngữ lập trình phổ biến hiện nay
2. Lịch sử của ngôn ngữ C
Vào đầu những năm 1970, ngôn ngữ lập trình C được phát triển tại Phòng thí nghiệm Bell của AT&T bởi nhà khoa học máy tính Dennis Ritchie, bằng cách kế thừa những tính năng sẵn có của ngôn ngữ B - được xem là tiền thân của C.
Ban đầu, mục đích của ngôn ngữ C là viết mã cho hệ điều hành Unix dùng để giúp quản lý tệp và thư mục trên hệ thống máy chủ, sử dụng các chương trình hợp ngữ (assembly program) và giao tiếp trực tiếp với phần cứng máy tính. Các chương trình hợp ngữ thường phức tạp và dài dòng, vậy nên lập trình viên cần một ngôn ngữ có bộ hướng dẫn thao tác thân thiện với người dùng. C đã hoàn toàn đáp ứng những yêu cầu này, giúp loại bỏ những nhược điểm vốn có ở một vài ngôn ngữ trước đó như BASIC, B và Ngôn ngữ lập trình kết hợp cơ bản (BCPL). Bởi tính phổ biến cũng như sự linh hoạt, C đã sớm được phát hành rộng rãi để sử dụng trên đa nền tảng và nhanh chóng được thương mại hóa.
Cho tới nay, C vẫn được sử dụng phổ biến trong các dự án phát triển web cùng nhiều ngôn ngữ phổ biến như Java, PHP, JavaScript - những ngôn ngữ có tính năng hoặc cú pháp “mượn” trực tiếp hoặc gián tiếp từ C.
Ứng dụng máy tính để bàn được sử dụng tại các doanh nghiệp
3. Ưu và nhược điểm của ngôn ngữ C
Ưu điểm
Ngôn ngữ C mang trong mình nhiều đặc điểm đặc biệt, khiến nó trở thành một trong những ngôn ngữ được sử dụng rộng rãi nhất mọi thời đại. Sau đây là lợi ích chính của việc sử dụng C:
* Có cấu trúc: Cách tiếp cận lập trình đối với C thường có cấu trúc rõ ràng, chia nhỏ vấn đề thành các mô-đun hoặc chức năng nhỏ hơn dễ hiểu và sửa đổi.
* Linh động: C không nằm cố định trong bất kì một thiết bị nào. Chương trình C có thể được thực thi trên nhiều máy khác nhau.
* Là ngôn ngữ lập trình cấp trung: Ngôn ngữ C có thể hỗ trợ tính năng của cả ngôn ngữ cấp thấp và cấp cao.
* Thư viện phong phú: C cung cấp một thư viện với vô vàn tính năng sẵn có, giúp đẩy nhanh quá trình phát triển phần mềm.
* Cấp phát bộ nhớ động: C hỗ trợ tính năng cấp phát bộ nhớ động (Dynamic memory allocation), nhằm mục đích giải phóng bộ nhớ được cấp phát bất kỳ lúc nào bằng cách sử dụng hàm free().
* Nhanh chóng: Đây là ngôn ngữ dựa trên trình biên dịch, giúp quá trình biên dịch và thực thi mã nhanh hơn. Vì chỉ có các tính năng thiết yếu và bắt buộc được đưa vào C nên nó giúp tiết kiệm năng lượng xử lý và cải thiện tốc độ.
* Con trỏ: C sử dụng con trỏ (pointer - là một biến) giúp cải thiện hiệu suất bằng cách cho phép tương tác trực tiếp với bộ nhớ hệ thống.
* Đệ quy: C cho phép nhà phát triển sử dụng tính năng đệ quy (phương pháp dùng trong chương trình máy tính trong đó có một hàm tự gọi chính nó) bằng cách cung cấp khả năng sử dụng lại mã cho mọi chức năng.
* Khả năng mở rộng: Một chương trình C có thể dễ dàng mở rộng bằng cách thêm vào mã đã viết sẵn một/một vài thay đổi nhỏ. Từ đó có thể dễ dàng thêm tính năng hay chức năng mới.
Nhược điểm
Ngoài những thế mạnh kể trên, ngôn ngữ C cũng còn một số thiếu sót dù cho đây là ngôn ngữ lý tưởng cho người mới bắt đầu lập trình do cú pháp, thuật toán và cấu trúc mô-đun đơn giản. Sau đây là một số nhược điểm trong quá trình sử dụng C:
* Tính năng OOP: C không hỗ trợ mở rộng đối với các tính năng lập trình hướng đối tượng (OOP) để tạo lớp con (subclass) từ lớp cha. Không giống như ngôn ngữ Java, Python hoặc C++, việc sử dụng lại mã hiện có trong C tương đối khó khăn.
* Tính năng Namespace: C thiếu các tính năng của vùng tên, có nghĩa là không thể sử dụng lại cùng một tên biến trong một phạm vi. Điều này đồng nghĩa với việc không thể khai báo hai biến có cùng tên.
* Kiểm tra thời gian chạy: Ngôn ngữ C thường không hiển thị lỗi mã sau mỗi dòng mã. Thay vào đó, tất cả các lỗi sẽ được trình biên dịch trình bày sau khi chương trình được viết. Nhược điểm này gây khó khăn trong việc kiểm tra mã đối với chương trình lớn.
* Xử lý ngoại lệ: C thiếu khả năng xử lý ngoại lệ chẳng hạn như lỗi, sự bất thường có thể xảy ra trong mã nguồn.
* Hàm tạo và hàm hủy: Vì C không hướng đối tượng nên nó không cung cấp các tính năng hàm tạo và hàm hủy. Việc tạo hoặc hủy một biến trong C phải được thực hiện thủ công thông qua hàm hoặc bằng các phương tiện khác.
* Thu gom bộ nhớ rác: C không được trang bị tính năng thu gom bộ nhớ rác - là một trong những tính năng quan trọng để tự động lấy lại bộ nhớ từ các đối tượng không còn cần trong thư viện/ứng dụng.
4. Ngôn ngữ C được sử dụng trong trường hợp nào?
Trong thực tế, ngôn ngữ lập trình C không nằm giới hạn ở việc phát triển hệ điều hành và ứng dụng mà còn được sử dụng trong các lĩnh vực như phát triển giao diện đồ họa người dùng, môi trường phát triển tích hợp,...
Dưới đây là một số trường hợp sử dụng cho ngôn ngữ C:
- Hệ điều hành (chẳng hạn như Unix cùng tất cả các ứng dụng Unix);
- Cơ sở dữ liệu, bao gồm Oracle, MySQL, Microsoft SQL Server và PostgreSQL - một phần được viết bằng C;
- Trình biên dịch ngôn ngữ, bao gồm trình biên dịch C;
- Soạn thảo văn bản;
- Bộ đệm in;
- Trình hợp dịch;
- Trình điều khiển mạng;
- Các chương trình hiện đại như Git và FreeBSD;
- Thông dịch viên ngôn ngữ;
- Các tiện ích khác, chẳng hạn như trình điều khiển chuột, điều khiển bàn phím,...
4. Sự khác biệt giữa C và C++
Mặc dù 2 cụm từ C và C++ nghe có vẻ quen thuộc nhưng cách sử dụng và tính năng của cả hai ngôn ngữ lại khác nhau ở một mức độ nhất định. C++ là một superset được kế thừa từ ngôn ngữ C, sử dụng một tập hợp các khái niệm lập trình hoàn toàn khác. C là ngôn ngữ lập trình thủ tục, trong khi C++ cung cấp hỗ trợ OOP.
Một số điểm khác biệt bao gồm:
Kết luận
C là ngôn ngữ cơ bản nhất và là nền tảng cho rất nhiều ngôn ngữ khác về sau. Chính vì thế hiểu về C là rất quan trọng và là cần thiết đối với tất cả lập trình viên ngày nay.
Nguồn tham khảo:
https://www.techtarget.com/searchwindowsserver/definition/C