30/09/2018, 16:57

nên khai báo thư viện tại file nào trong chương trình?

Mình có 1 vài vấn đề đơn giản nhưng cần kinh nghiệm người đi trước:

  1. Giả sử mình có file abc.habc.cpp , mình có nên include tất cả các thư viện cần dùng vào file abc.h không để khi triển khai vào file abc.cpp mình chỉ cần #include “abc.h” là được, hay khi nào cần thư viện nào thì include tại file đó (cả 2 file .cpp và .h,sau đó ngăn chặn chúng redefine) ?
  2. Và trong chương trình nhiều module (nhiều struct, class) thì có nên tạo hẳn 1 file xxx.h chỉ để chứa các thư viện cần dùng không,nếu không thì làm sao để quản lí chúng nếu bị chồng chéo quá nhiều ?
  3. nếu file xyz.hinclude"abc.h" mà trong file abc.h đã có 1 số thư viện mà xyz.h cần dùng thì ở file xyz.h có nên include lại hay không ? (mục đích cho người sử dụng dễ quan sát khi code tại xyz)
    rất mong sự hỗ trợ,
    Thông
Nguyễn Minh Dũng viết 19:04 ngày 30/09/2018

1.Giả sử mình có file abc.h và abc.cpp , mình có nên include tất cả các thư viện cần dùng vào file abc.h không để khi triển khai vào file abc.cpp mình chỉ cần #include “abc.h” là được, hay khi nào cần thư viện nào thì include tại file đó (cả 2 file .cpp và .h,sau đó ngăn chặn chúng redefine) ?

Một quy tắc dễ nhớ cho việc include.

  • Khi nào cần, thì mới include

Vậy thì khi nào mới cần?

  • Khi nào compiler báo thiếu, thì tức là cần

Ví dụ nhé:

  • trong abc ta cần dùng string. Nếu trong luc khai báo class abc ở file abc.h ta cần kiểu dữ liệu string thì ta #include <string> ở file .h.

  • Trong class abc cần sử dụng vector, nhưng trong file abc.h không có khai báo nào cần tới vector thì ta không cần phải include nó. Đến lúc code file abc.cpp ta cần sử dụng vector, ngay lập tức #include <vector ở file .cpp


2.Và trong chương trình nhiều module (nhiều struct, class) thì có nên tạo hẳn 1 file xxx.h chỉ để chứa các thư viện cần dùng không,nếu không thì làm sao để quản lí chúng nếu bị chồng chéo quá nhiều ?

Không cần thiết, Nếu làm đúng theo câu trả lời ở trên thì sẽ không gặp trường hợp này.


3.nếu file xyz.h có include"abc.h" mà trong file abc.h đã có 1 số thư viện mà xyz.h cần dùng thì ở file xyz.h có nên include lại hay không ? (mục đích cho người sử dụng dễ quan sát khi code tại xyz)

Không cần Chả ai quan sát cả, người ta chỉ xem lại khi có lỗi mà thôi.

Bùi Trung Thông viết 19:05 ngày 30/09/2018

đa tạ sư phụ đã chỉ giáo

... viết 19:04 ngày 30/09/2018

Hoặc bạn cứ include sạch vào, rồi dùng #pragma once để mỗi thư viện chỉ include một lần. Mình nghe nói thế chứ cũng ko rõ nó có include 1 lần thật không. Anh @ltd confirm lại phát.

Bùi Trung Thông viết 19:14 ngày 30/09/2018

theo mình cũng không sao nhưng theo mình thì không chuyên nghiệp cho lắm , cứ theo chỉ dẫn anh đạt mình thấy khá hợp lí rồi, dùng #pragma once cũng được, không thì ifndef = if not define cũng được .

Nguyễn Minh Dũng viết 19:05 ngày 30/09/2018

rồi dùng #pragma once để mỗi thư viện chỉ include một lần. Mình nghe nói thế chứ cũng ko rõ nó có include 1 lần thật không.

Đúng là vậy, nhưng không nên làm vậy vì

  • #pragma once không thuộc chuẩn, mặc dù nhiều compiler hỗ trợ nhưng nó vẫn không phải là chuẩn
  • Nên quản lý code của mình chứ không nên include bừa bãi, lập trình viên phải kỹ tính ^^

không thì ifndef = if not define cũng được

Chuẩn, cách này có thể thay thế #pragma once. Đọc thêm: http://en.wikipedia.org/wiki/Include_guard

Bài liên quan
0