Cấu trúc chương trình C
C có một số từ khóa, chính xác là
32. Những từ khóa này kết hợp với cú pháp của C hình thành ngôn ngữ C. Nhưng
nhiều trình biên dịch cho C đã thêm vào những từ khóa dùng cho việc tổ chức bộ nhớ ở những giai đoạn tiền
xử lý nhất định.
Vài quy tắc khi lập trình C như
sau :
Tất cả từ khóa là chữ thường (không in hoa)
Ðoạn mã trong chương trình C có
phân biệt chữ thường và chữ hoa. Ví dụ : do while thì khác với DO WHILE
Từ khóa không thể dùng cho các mục
đích khác như đặt tên biến (variable name) hoặc tên hàm (function name)
Hàm main() luôn là hàm đầu tiên được gọi đến khi một
chương trình bắt đầu chạy (chúng ta sẽ xem xét kỹ hơn ở phần sau)
Xem xét đoạn mã chương trình:
int main (){
/*
This is a sample program */
int
i = 0;
i =
i + 1;
…
}
Ghi chú: Những khía cạnh khác
nhau của chương trình C được xem xét qua đoạn mã trên. Ðoạn mã này xem như là
đoạn mã mẫu, nó sẽ được dùng lại trong suốt phần còn lại của giáo trình này.
Ðịnh nghĩa Hàm
Chương trình C được chia thành từng
đơn vị gọi là hàm. Ðoạn mã mẫu chỉ có duy nhất một hàm main(). Hệ điều hành
luôn trao quyền điều khiển cho hàm main() khi một chương trình C được thực thi.
Tên hàm luôn được theo sau là cặp dấu ngoặc đơn (). Trong dấu ngoặc đơn có thể
có hay không có những tham số (parameters).
Dấu phân cách (Delimiters)
Sau định nghĩa hàm sẽ là dấu ngoặc
xoắn mở {. Nó thông báo điểm bắt đầu của hàm. Tương tự, dấu ngoặc xoắn đóng }
sau câu lệnh cuối trong hàm chỉ ra điểm kết thúc của hàm. Dấu ngoặc xoắn mở
đánh dấu điểm bắt đầu của một khối mã lệnh, dấu ngoặc xoắn đóng đánh dấu điểm kết
thúc của khối mã lệnh đó. Trong đoạn mã mẫu có 2 câu lệnh giữa 2 dấu ngoặc xoắn.
Hơn nữa, đối với hàm, dấu ngoặc
xoắn cũng dùng để phân định những đoạn mã trong trường hợp dùng cho cấu trúc
vòng lặp và lệnh điều kiện..
Dấu kết thúc câu lệnh (Terminator)
Dòng int i = 0; trong đoạn mã mẫu là một câu lệnh
(statement). Một câu lệnh trong C thì được kết thúc bằng dấu chấm phẩy (;). C
không hiểu việc xuống dòng dùng phím Enter, khoảng trắng dùng phím spacebar hay
một khoảng cách do dùng phím tab. Có thể có nhiều hơn một câu lệnh trên cùng một
hàng nhưng mỗi câu lệnh phải được kết thúc bằng dấu chấm phẩy. Một câu lệnh
không được kết thúc bằng dấu chấm phẩy được xem như một câu lệnh sai.
Dòng chú thích (Comment)
Những chú thích thường được viết
để mô tả công việc của một lệnh đặc biệt, một hàm hay toàn bộ chương trình.
Trình biên dịch sẽ không dịch chúng. Trong C, chú thích bắt đầu bằng ký hiệu /*
và kết thúc bằng */. Trường hợp chú thích có nhiều dòng, ta phải chú ý ký hiệu
kết thúc (*/), nếu thiếu ký hiệu này, toàn bộ chương trình sẽ bị coi như là một
chú thích. Trong đoạn mã mẫu dòng chữ "This is a sample program" là
dòng chú thích. Trong trường hợp chú thích chỉ trên một dòng ta có thể
dùng //. Ví dụ:
int a = 0; // Biến ‘a’ đã được
khai báo như là một kiểu số nguyên (interger)
Thư viện C (Library)
Tất cả trình biên dịch C chứa một
thư viện hàm chuẩn dùng cho những tác vụ chung. Một vài bộ cài đặt C đặt thư viện
trong một tập tin (file) lớn trong khi đa số còn lại chứa nó trong nhiều tập
tin nhỏ. Khi lập trình, những hàm được chứa trong thư viện có thể được dùng cho
nhiều loại tác vụ khác nhau. Một hàm (được
viết bởi một lập trình viên) có thể được đặt trong thư viện và được dùng bởi
nhiều chương trình khi được yêu cầu. Vài trình biên dịch cho phép hàm được thêm
vào thư viện chuẩn trong khi số khác lại yêu cầu tạo một thư viện riêng.
Biên dịch và thực thi một chương trình (Compiling and Running)
Những bước khác nhau của việc dịch
một chương trình C từ mã nguồn thành mã thực thi được thực hiện như sau :
Soạn thảo/Xử lý từ
Ta dùng một trình xử lý từ (word
processor) hay trình soạn thảo (editor) để viết mã nguồn (source code). C chỉ
chấp nhận loại mã nguồn viết dưới dạng tập tin văn bản chuẩn. Vài trình biên dịch
(compiler) cung cấp môi trường lập trình (xem phụ lục) gồm trình soạn thảo.
Mã nguồn
Ðây là đoạn văn bản của chương
trình mà người dùng có thể đọc. Nó là đầu vào của trình biên dịch C.
Bộ tiền xử lý C
Từ mã nguồn, bước đầu tiên là
chuyển nó qua bộ tiền xử lý của C. Bộ tiền xử lý này sẽ xem xét những câu lệnh
bắt đầu bằng dấu #. Những câu lệnh này gọi là các chỉ thị tiền biên dịch
(directives). Điều này sẽ được giải thích sau. Chỉ thị tiền biên dịch thường được
đặt nơi bắt đầu chương trình mặc dù nó có thể được đặt bất cứ nơi nào khác. Chỉ
thị tiền biên dịch là những tên ngắn gọn được gán cho một tập mã lệnh.
Mã nguồn mở rộng C
Bộ tiền xử lý của C khai triển
các chỉ thị tiền biên dịch và đưa ra kết quả. Ðây gọi là mã nguồn C mở rộng,
sau đó nó được chuyển cho trình biên dịch C.
Trình biên dịch C (Compiler)
Trình biên dịch C dịch mã nguồn mở
rộng thành ngôn ngữ máy để máy tính hiểu được.
Nếu chương trình quá lớn nó có thể
được chia thành những tập tin riêng biệt và mỗi tập tin có thể được biên dịch
riêng rẽ. Ðiều này giúp ích khi mà một tập tin bị thay đổi, toàn chương trình
không phải biên dịch lại.
Bộ liên kết (Linker)
Mã đối tượng cùng với những thủ tục
hỗ trợ trong thư viện chuẩn và những hàm được dịch riêng lẻ khác kết nối lại bởi
Bộ liên kết để cho ra mã có thể thực thi được.
Bộ nạp (Loader)
Mã thực thi được thi hành bởi bộ
nạp của hệ thống.
Tiến trình trên được mô tả qua
lưu đồ 1.2 sau :
Hình 1.2: Biên dịch và thực thi một
chương trình
Đăng nhận xét