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
abcta cần dùngstring. Nếu trong luc khai báo classabcở fileabc.hta cần kiểu dữ liệustringthì ta#include <string>ở file.h.Trong class
abccần sử dụngvector, nhưng trong fileabc.hkhông có khai báo nào cần tớivectorthì ta không cần phải include nó. Đến lúc code fileabc.cppta cần sử dụngvector, ngay lập tức#include <vectorở file.cppKhô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 oncekhô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