Tuesday, March 17, 2015

Ngôn Ngữ Lập Trình C



I. Giới thiệu ngôn ngữ lập trình C

1. Ngôn ngữ C là một ngôn ngữ lập trình tổng quát gọn gàng được phát triển bởi Dennis Ritchie cho hệ điều hành UNIX từ đầu thập niên 1970. Từ đó, ngôn ngữ này đã được sử dụng rộng rãi và hiệu quả trong nhiều hệ điều hành khác và trở thành một trong những ngôn ngữ phổ dụng nhất.
Các trình dịch, các thư viện và các phần mềm của các ngôn ngữ bậc cao khác thường được tạo nên từ C.
Năm 1989, ANSI C (American National Standards Institute) đã trở thành chuẩn cho ngôn ngữ lập trình C.

2. Thư viện chuẩn C
ANSI C định nghĩa một thư viện chuẩn gồm những hàm căn bản mà ta có thể dùng trong những chương trình C.
<ctype.h>: gồm các hàm xử lí các kiểu kí tự.
<float.h>: gồm các hằng theo kiểu số không nguyên, như số nhỏ nhất bởi _EPSILON, số lớn nhất bởi _DIG và khoảng cách của các số được biểu thị bởi _MIN và _MAX. 
<limits.h>: gồm các hằng theo kiểu số nguyên, như khoảng cách của các số được biểu thị bởi _MIN và _MAX. 
<math.h>: gồm các hàm toán thông dụng.
<setjmp.h>: gồm các hàm dùng tránh sự gọi (call) và trả lại (return) thông thường của hàm.
<signal.h>: gồm các hàm xử lí các điều kiện ngoại lệ.
<stdarg.h>: gồm các hàm truy cập các đối số được chuyển vào hàm.
<stdio.h>: gồm các hàm nhập xuất các kiểu dữ kiện, các định nghĩa macro.
<stdlib.h>: gồm các hàm chuyển đổi các kiểu số, cấp phát vùng nhớ, kiểm soát quá trình, tìm kiếm, và xếp thứ tự.
<string.h>: gồm các hàm xử lí các dãy kí tự. 

3. Cài đặt trình biên dịch C
Để hành xử một chương trình C, trước hết nó phải được biên dịch từ mã nguồn (chữ viết) thành mã máy (nhị phân) cho máy tính hiểu. Đây là công việc của trình biên dịch. Một trong những trình biên dịch C thông dụng nhất là trình GCC (GNU C Compiler). GCC hoàn toàn miễn phí bởi bằng công cộng tổng quát (General Public License).
Nếu GCC không có trong hệ điều hành Window, ta có thể tải xuống và cài đặt MinGW (Minimalist GNU) cho Window theo những bước sau:
2) Nhấn Download “Automated MinGW Installer”, giống như mingw-get-inst-xxx.exe
3) Nhấn hai lần Download “Automated MinGW Installer”, chấp nhận những điều khoản của bằng.
4) Chấp nhận nơi cài đặt ở C:\MinGW, nhấn Next để bắt đầu sự cài đặt.
5) Để xem trình biên dịch này đã cài đặt trong máy tính hay chưa, ta có thể viết lệnh sau đây ở cổng lệnh:
           C:\> gcc -v
rồi nhấn Enter để thấy
           C:\> gcc –v
           Using built-in specs.
           Thread model: win32
           Gcc version 4.6.1 (GCC)
Nghĩa là GCC đã được cài đặt.

4. Viết chương trình C
Những câu lệnh trong chương trình C muốn được hành xử phải đặt ở trong một hàm. Mỗi hàm được định nghĩa theo ngữ pháp sau đây:
           Loại dữ kiện Tên hàm () {những câu lệnh}
Sau khi hàm được gọi do hành xử câu lệnh, nó có thể trả lại cho vật gọi một giá trị thuộc loại dữ kiện ở trước tên hàm.
Một chương trình thường có một hoặc nhiều hàm, nhưng luôn luôn có một hàm tên “main” (chính). Hàm main() là điểm bắt đầu của tất cả các chương trình C. Trình biên dịch C sẽ không biên dịch mã của chương trình, nếu không tìm thấy chưong trình main().
Những hàm khác trong chương trình có thể có bất cứ tên nào dùng kí tự, số, và gạch dưới, nhưng không bắt đầu bằng số hạng và không có những kí tự riêng của C.
Ngoặc đơn () sau tên hàm có thể chứa những giá trị gọi là đối số của hàm, đuợc cách biệt bởi dấu phẩy.
Ngoặc móc {} chứa những câu lệnh được hành xử mỗi khi hàm được gọi. Mỗi câu lệnh phải được kết thúc bởi dấu chấm phẩy.
Thông thường, chương trình đầu tiên cho một ngôn ngữ lập trình là chương trình viết một câu chào, như  “Hello World.”,  theo những bước sau đây:
1) Mở trình viết chữ, như Notepad, viết mã ở đầu trang như  sau:
           #include <stdio.h>
Lệnh tiền xử lí này luôn đứng ở đầu chương trình để trình biên dịch dùng tập thư viện stdio.h trong chương trình này.
2) Hai hàng kế là hàm main rỗng
           Int main()
           {
           }
Hàm này khai báo kiểu dữ kiện nguyên sẽ được trả lại khi hàm được hành xử.
3) Giữa những ngoặc móc là một câu lệnh gọi một hàm trong thư viện stdio.h
           Printf( “Hello World!\n” );
Hàm printf() cần một dãy kí tự trong ngoặc đơn. Trong C, dãy kí tự này lại phải ở trong ngoặc kép. Dãy này gồm có Hello World và \n (hàng mới) dùng để chuyển đầu máy in xuống một hàng mới.
4) Giữa những ngoặc móc, ta thêm một câu lệnh để trả lại giá trị nguyên như hàm đã khai báo.
           Return 0;
Trả lại gía trị 0 nghĩa là chương trình đã hành xử đúng đắn.
5) Kiểm tra chương trình giống như sau đây:

           #include <stdio.h>

           int main(void)
           {
           printf(“Hello World!\n”);
           return 0;
           }
6) Lưu giữ chương trình này với tên “hello.c”

5. Biên dịch chương trình C
Tập nguồn hello.c được biên dịch thành tập hello.exe theo những bước sau:
1) Ở cổng lệnh, viết lệnh cd với đường dẫn tới hello.c
2) Ở cổng lệnh, nếu chỉ viết
           gcc hello.c
rồi nhấn Enter thì chương trình này được biên dịch thành a.exe; đây là chương trình chung cho tất cả các tập .c và sẽ bị xoá sau khi biên dịch một chương trình .c khác.
3) Để có được một tên riêng cho mỗi chương trình, ta phải viết rõ ở cổng lệnh
           gcc hello.c –o hello.exe
rồi nhấn Enter để biên dịch hello.c thành hello.exe
4) Ở cổng lệnh, viết
           C:\ Chương Trình\hello.exe
rồi nhấn Enter thì chương trình này sẽ cho kết quả mong đợi như  sau:
           Hello World!

6. Tìm hiểu sự biên dịch
Từ tập nguồn C đến tập hành xử (exe), sự biên dịch trải qua 4 giai đoạn. Mỗi giai đoạn làm ra một tập mới, như sau:
1) Bộ tiền xử lí thay thế các tập .h, như tập #include<stdio.h>, bằng các mã thư viện để sản xuất ra tập .i
2) Bộ biên dịch chuyển mã cao của tập .i thành mã thấp của tập .s
3) Bộ hợp ngữ chuyển mã thấp của tập .s thành mã máy (nhị phân) của tập .o
4) Bộ nối liên kết một hoặc nhiều tập .o thành mã hành xử (nhị phân) của tập .exe
Nếu tập nguồn .c có những thiếu sót trong ngữ pháp, bộ biên dịch sẽ báo cáo những sai lầm và sự biên dịch không có kết quả.
Nếu tập .o có những hàm cùng tên, bộ nối sẽ báo cáo những sai lầm và những tập .exe sẽ không được tạo thành.
Những tập tạm thời khi biên dịch thường bị xoá huỷ, nhưng muốn có những tập tạm ấy, thì khi biên dịch, ta phải để -save-temps trong lệnh biên dịch như sau:
Ở cổng lệnh, viết
           gcc hello.c –save-temps –o hello.exe
rồi nhấn Enter để biên dịch chương trình và lưu giữ các tập tạm thời.
Mở tập hello.i trong Notepad mã nguồn đã được thay thế bởi mã thư viện của tập stdio.h
Mở tập hello.s trong Notepad để thấy sự chuyển đổi thành mã thấp nhị phân của máy.


No comments:

Post a Comment