Chỉ thị #include

Một phần của tài liệu [Tài liệu lập trình C] - Chương 2 Những kỹ thuật nâng cao! (Trang 70)

C code: char string [ 5 ] ;

Chỉ thị #include

Giống như tôi từng giải thích trong chương đầu tiên, chúng ta tìm thấy trong mã nguồn những dòng hơi đặc biệt gọi là chỉ thị tiền xử lý (preprocessor directives).

Những preprocessor directives có đặc tính sau: chúng luôn bắt đầu bằng kí tự #. Khá dễ dàng để nhận biết. Và dòng directive đầu tiên (cũng là duy nhất) mà chúng ta từng thấy cho đến thời điểm này đó là #include.

Dòng directive này cho phép thêm nội dung một file khác vào file đang viết.

Chúng ta đặc biệt dùng #include để thêm vào file.c các nội dung từ những file.h của các thư viện (stdio.h, stdlib.h, string.h, math.h) và cũng có thể là từ những file.h của riêng bạn.

Để thêm nội dung những file.h có trong thư mục cài đặt IDE của bạn, bạn cần sử dụng những ngoặc nhọn < > :

Code C:

#include <stdlib.h>

Để thêm nội dung những file.h có trong thư mục chứa project của bạn, bạn cần sử dụng những dấu ngoặc kép:

Code C:

#include "myfile.h"

Cụ thể hơn, những chương trình tiền xử lý sẽ bắt đầu trước khi compile. Nó sẽ quét các tập tin của bạn để tìm ra những chỉ thị tiền xử lý trước, là tất cả những dòng bắt đầu bằng #.

Khi nó gặp directive #include, nó sẽ đặt nội dung của file được chỉ định vào vị trí #include. Giả sử tôi có một « file.c » chứa code của các function và « file.h » chứa các prototypes của các function trong file.c

Để đơn giản hơn bạn có thể xem biểu đồ sau :

Tất cả nội dung của file.h sẽ được đặt vào trong file.c, ngay tại vị trí đặt directive #include file.h Dưới đây là những gì ta có trong file.c:

Code C:

#include "file.h"

long myFunction(int cai_nay, double cai_kia) {

/* Source code of function */

}

void otherFunction(long value) {

/* Source code of function */

}

Và những gì có trong file.h :

C code:

long myFunction(int cai_nay, double cai_kia);

void otherFunction(long value);

Khi chương trình tiền xử lý chạy đến đây, trước khi biên dịch file.c, nó sẽ đặt file.h vào trong file.c.

Cuối cùng, mã nguồn của file.c trước khi biên dịch sẽ giống như sau:

C Code:

long myFunction(int cai_nay, double cai_kia);

void otherFunction(long value);

long myFunction(int cai_nay, double cai_kia) {

/* Source code of function */

}

void otherFunction(long value) {

/* Source code of function */

}

Nội dung của file.h đã được đặt tại vị trí của dòng #include.

Thật sự không có gì quá khó hiểu đúng không? Tôi nghĩ rằng đã có khá nhiều bạn biết cách thức hoạt động của nó như thế nào.

Chức năng của các #include không có gì khác ngoài hành động chèn file này vào file khác, và các bạn phải biết rằng việc hiểu vấn đề này rất quan trọng.

Thay vì đặt tất cả các prototype vào trong các file.c, chúng ta nên chọn cách đặt những prototypes trong các file.h, việc này gần như được xem là một nguyên tắc cơ bản khi lập trình. Ta có thể ưu tiên để những prototypes này lên đầu file.c (thường gặp trong những file chương trình nhỏ), nhưng để tiện cho việc sắp xếp, tôi khuyên bạn hãy đặt những prototype này trong những file.h.

Khi chương trình bạn viết ngày càng phức tạp và có quá nhiều file.c, chỉ cần sử dụng #include để giúp chúng sử dụng chung 1 file.h, bạn sẽ cảm thấy mình thật may mắn khi không phải tốn quá nhiều thời gian để copy & paste lại những prototype có cùng 1 chức năng.

Một phần của tài liệu [Tài liệu lập trình C] - Chương 2 Những kỹ thuật nâng cao! (Trang 70)