Monday, April 25, 2011

Cách tổ chức source file trong C/C++ Project


Trước khi bắt đầu hãy chắc chắn bạn đã hiểu rõ về ý nghĩa của việc chia source code thành nhiều file.
Bạn có thể tham khảo tại: Ý nghĩa của việc tổ chức source file

Hãy cùng xem xét một bài toán cụ thể thấy rõ hơn cách chia source file mà tôi muốn chia sẽ, Đề bài “Viết một chương trình nhập một giá trị nguyên từ bàn phím, nếu nhập số chẵn in ra màu xanh, nếu nhập số lẽ in ra màu đỏ”
Hình 1: Source file main.c khi chưa chia
Chúng ta hoàn toàn có thể để tổ chức một source code như thế này, nhưng để tăng tốc độ compiler và tạo thành thói quen tốt khi tham gia những project lớn tôi khuyến khích bạn tách source ra thành nhiều phần với cấu trúc  như sau:

Đầu tiên, tất cả các hàm được sử dụng sẽ được khai báo trong một file riêng ngoại trừ hàm main(). Tôi đặt tên file này là declaration.h, loại file này gọi là header file[1].
Hình 2: Header file declaration.h
Tiếp theo, định nghĩa tất cả các hàm bạn vừa khai báo trong header file, các hàm đó sẽ được định nghĩa trong một file riêng gọi là source file[2], tôi đặt tên là declaration.c.
Hình 3: Source file definition.c
Cuối cùng là thay đổi file main.c cho phù hợp, phải xóa hết các khai báo và định nghĩa hàm, sau đó #include header file mới tạo, kết quả như sau:
Hình 4: source file main.c sau khi chia.

Như vậy từ source chỉ có 1 file main.c bây giờ đã được tổ chức thành 3 file main.c, delaration.h và definition.c, source code được tổ chức theo cách mới sẽ khoa học hơn, hiệu quả hơn và dễ làm việc hơn. ^^ Các bạn nhớ subcribe ý kiến cá nhân ở phía dưới nhé :-P
Ở đây tôi muốn các bạn chú ý đến ba điểm quan trọng:
  • Sự khác nhau giữ #include <stdio.h> và #include “declaration.h”: Khi muốn #include một file header trong thư viện của compiler thì bạn dùng giấu <tên_file>. Khi muốn #include một header file do chính bạn viết thì bạn dùng giấu “tên_file”.
  • Tôi in đậm định nghĩakhai báo vì tôi muốn bạn phân biệt rõ ràng hai khái niệm này:Một định nghĩa hàm sẽ cho biết hàm đó tên gì, có những đối số nào và kiểu trả về là gì nhưng không mô tả thuật toán của hàm đó, xem ở hình 2. Một khai báo hàm sẽ cho biết tất cả các thông tin về hàm bao gồm tên, đối số, kiểu trả về và thuật toán của hàm, xem hình 3.
  • Một source code có thể có nhiều source file và header file khác nhau, tùy mức độ phức tạp của project. Những gì được đề cập ở trên chỉ là ví dụ cơ bản để bạn có thể hiểu và hình dung được cách chia một source code khoa học.
Đã đến lúc để nhâm nhi một tách cà phê và ngẫm nghĩ lại những thứ bạn vừa đọc. Hãy quay lại để khám phá những điều thú vị tiếp theo khi bạn đã sẵn sàng.
-------------------------------------------------------------------------------------------------------------------------------
[1] Header file là loại file có định dạng *.h, thông thường file này có nhiệm vụ khai báo các hàm sẽ được sử dụng.
[2] Source file là loại file có định dạng *.c, loại file này được dùng để định nghĩa các hàm được khai báo trong header file.



2 comments:

  1. Một định nghĩa hàm sẽ cho biết hàm đó tên gì, có những đối số nào và kiểu trả về là gì nhưng không mô tả thuật toán của hàm đó, xem ở hình 2. Một khai báo hàm sẽ cho biết tất cả các thông tin về hàm bao gồm tên, đối số, kiểu trả về và thuật toán của hàm, xem hình 3

    => chỗ này hình như bạn bị lẫn lộn chỗ định nghĩa và khai báo

    ReplyDelete