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:
- 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) ?
- 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 ?
- 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)
rất mong sự hỗ trợ,
Thông
Bài liên quan
Một quy tắc dễ nhớ cho việc include.
Vậy thì khi nào mới cần?
Ví dụ nhé:
trong
abc
ta cần dùngstring
. Nếu trong luc khai báo classabc
ở fileabc.h
ta cần kiểu dữ liệustring
thì ta#include <string>
ở file.h
.Trong class
abc
cần sử dụngvector
, nhưng trong fileabc.h
không có khai báo nào cần tớivector
thì ta không cần phải include nó. Đến lúc code fileabc.cpp
ta cần sử dụngvector
, ngay lập tức#include <vector
ở file.cpp
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.
Không cần Chả ai quan sát cả, người ta chỉ xem lại khi có lỗi mà thôi.
đa tạ sư phụ đã chỉ giáo
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.
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 .
Đú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ẩnChuẩn, cách này có thể thay thế
#pragma once
. Đọc thêm: http://en.wikipedia.org/wiki/Include_guard