1. Giới thiệu
Ngôn ngữ lập trình C được kế thừa từ 2 ngôn ngữ BCPL và B.
BCPL, hai ngôn ngữ này được phát triển bởi Martin Richards, đó là ngôn ngữ viết
cho hệ điều hành và trình biên dịch. Trong năm 1970 Ken Thompon đã sử dụng ngôn
ngữ B để tạo ra phiên bản đầu tiên cho hệ điều hành Unix tại Bell Laboratories.
Ngôn ngữ lập trình C được Dennis Ritchie xây dựng và phát triển từ từ B tại Bell
Laboratories vào năm 1972, khởi đầu ngôn
ngữ lập trình C được sử dụng rộng dãi trong hệ điều hành UNIX. Từ đó, ngôn ngữ này
đã lan rộng ra nhiều hệ điều hành khác và trở thành một những ngôn ngữ phổ dụng
nhất.
Nhiều hệ điều hành
hàng đầu hiện nay được viết bởi ngôn ngữ lập trình C/C++. Ngôn ngữ lập trình C
là độc lập với các thiết bị phần cứng. Các chương trình viết bằng ngôn ngữ C có
thể chạy trên hầu hết các hệ điều hành.
C được sử dụng rộng
dãi trong việc phát triển các hệ thống đòi hỏi hiệu năng chẳng hạn như Hệ
điều hành, hệ thống nhúng, hệ thống xử
lý thời gian thực và các hệ thống giao tiếp.
Sự mở rộng nhanh tróng
của ngôn ngữ lập trình C trên nhiều loại máy tính khác nhau (Đôi khi gọi là nền
tảng phần cứng) dẫn đến có nhiều biến thể khác nhau. Điều đó có nghĩa là biến
thể này thực thi tốt ở nền tảng phần cứng này nhưng không thực thi được ở nền
tảng phần cứng khác. Đây là vấn đề nghiêm trọng đối với các lập trình viên,
những người cần phát triển ứng dụng chạy được trên nhiều nền tảng khác nhau.
Năm 1989 viện tiêu
chuẩn của hoa kỳ đã công bó bản chuẩn hóa C còn được gọi là ANSI 89 (C89) sau
đó năm 1990 nâng cấp bản chuẩn hóa này gọi là ANSI 90 (C90), sau đó tiếp tục
cập nhật năm 1999 gọi là C99 và nâng cấp nến C11 vào năm 2011.
2. Điểm mạnh và điểm yếu của ngôn ngữ lập trình C
2.1 Điểm mạnh ngôn ngữ C
Ngôn ngữ lập trình cấp thấp
Hệ điều hành Unix có tới 90% là được viết bởi ngôn ngữ C. 10% là được viết bởi hợp ngữ.
Ngoài ra có rất nhiều các trình điều khiển hỗ trợ lập trình bằng ngôn ngữ C.
Ngôn ngữ có kích cỡ nhỏ
So với các ngôn ngữ như C++/C#, Java, ngôn ngữ C có kích cỡ nhỏ. Các thư viện trong ngôn ngữ C là hạn chế, chỉ chứa các hàm cơ bản.
Mạnh và linh hoạt
Ngôn ngữ C không đưa ra các ràng buộc đối với người lập trình. C được sử dụng trong nhiều dự án khác nhau, như viết hệ điều hành, chương trình xử lý văn bản, đồ hoạ, bảng tính, và thậm chí cả chương trình dịch cho các ngôn ngữ khác.
Ngôn ngữ có tính khả chuyển
Một chương trình viết bằng C cho một hệ máy tính (ví dụ như IBM PC) có thể được dịch và chạy trên hệ máy tính khác (chẳng hạn như DEC VAX) chỉ với rất ít các sử đổi. Tính khả chuyển đã được bởi chuẩn ANSI cho C.
2.2 Điểm yếu ngôn ngữ C
Các chương trình của C dễ bị lỗi
Do tính mềm dẻo của ngôn ngữ C cũng chính là nguyên nhân dễ gây lỗi. Giống như các ngôn ngữ lập trình hợp ngữ các lỗi chỉ được phát hiện khi thực hiện biên dịch chương trình.
Các chương trình viết bằng ngôn ngữ C có thể khó hiểu
Tuy ngôn ngữ C có kích cỡ nhỏ và số lượng các từ khóa không nhiều. Tuy nhiên cú pháp viết ngôn ngữ C có thể gây khó hiểu đối với các lập trình viên mới vào nghề vì các từ khóa và cú pháp có thể không gợi nhớ như các ngôn ngữ hiện đại C#, java.
Các chương trình viết bằng ngôn ngữ C khó chỉnh sửa.
Các chương trình lớn viết bằng ngôn ngữ C có thể khó chỉnh sửa nếu các tài liệu thiết kế chương trình không được thực hiện chi tiết. Các chương trình lớn thông thương được thiết kế theo các lớp và gói thông tin tuy nhiên ngôn ngữ C thiếu đặc điểm này.
3. Quy tắc khi viết chương trình C
- Các từ khóa trong ngôn ngữ lập trình C đều sử dụng chữ thường
- Ngôn ngữ C phân biệt chữ hoa và chữ thường
- Tên biến và tên hàm không được trùng với tên từ khóa.
4. Các giai đoạn khi thực thi chương trình C
Giai đoạn 1 : Soạn thảo chương trình
Sử dựng các trình soạn thảo văn bản để viết chương trình ví dụ trình soạn thảo vi và emacs trong hệ điều hành Linux. Hoặc sử dụng các chương trình đóng gói của các hãng phát triển để viết chương trình như Eclipse, Microsoft Visual Studio Code, Visual Studio 2015, 2017, 2019... Các chương trình C có đuôi mở rộng .c .
Giai đoạn 2, 3 : Tiền xử lý và biên dịch
Việc dịch (translation) một tập tin nguồn được tiến hành trên hai bước hoàn toàn độc lập với nhau:
Trong hệ thống C, tiền xử lý được tiến hành một cách tự động trước khi giai đoạn dịch chương trình bắt đầu.
Bước tiền xử lý tương ứng với việc cập nhật trong văn bản của chương trình nguồn, chủ yếu dựa trên việc diễn giải các mã lệnh rất đặc biệt gọi là các chỉ thị dẫn hướng của bộ tiền xử lý (destination directive of preprocessor); các chỉ thị này được nhận biết bởi chúng bắt đầu bằng ký hiệu (symbol) #.
Hai chỉ thị quan trọng nhất là:
-
Chỉ thị sự gộp vào của các tập tin nguồn khác: #include
-
Chỉ thị việc định nghĩa các macros hoặc ký hiệu: #define
Giai đoạn 4 : Liên kết
Tại giai đoạn này chương trình C chứa các tham chiếu tới các hàm được cài đặt bởi các thư viện chuẩn được cung cấp sẵn hoặc các thư viện do các nhà phát triển xây dựng nên.
Giai đoạn 5 : Nạp chương trình
Trước khi chương trình được thực thi, chương trình phải được nạp vào trong bộ nhớ. Tại giai đoạn này hệ điều hành cấp phát vùng bộ nhớ cần thiết để các đối tượng cần thiết để thực thi chương trình.
Giai đoạn 6 : Thực thi
CPU Tiến hành thực thi các nghiệp vụ của chương trình.
Hình vẽ mô tả các giai đoạn thực thi chương trình C
Hình số 1 : Các giai đoạn thực thi chương trình C