Đối với những người xem tương lai của câu hỏi này, tôi muốn chỉ ra rằng bạn nên tránh những gì khỉ0506 đang gợi ý .
Các tập tin tiêu đề là để khai báo.
Các tệp tiêu đề được biên dịch một lần cho mỗi .cpp
tệp trực tiếp hoặc gián tiếp #includes
chúng và mã bên ngoài bất kỳ chức năng nào được chạy khi khởi tạo chương trình, trước đó main()
.
Bằng cách đặt: foo::i = VALUE;
vào tiêu đề, foo:i
sẽ được gán giá trị VALUE
(bất kể đó là gì) cho mỗi .cpp
tệp và các phép gán này sẽ xảy ra theo thứ tự không xác định (được xác định bởi trình liên kết) trước khi main()
được chạy.
Điều gì xảy ra nếu chúng ta #define VALUE
là một số khác nhau trong một trong các .cpp
tệp của chúng tôi ? Nó sẽ biên dịch tốt và chúng tôi sẽ không có cách nào để biết ai thắng cho đến khi chúng tôi chạy chương trình.
Không bao giờ đặt mã thực thi vào một tiêu đề cho cùng một lý do mà bạn không bao giờ #include
là một .cpp
tệp.
bao gồm các trình bảo vệ (mà tôi đồng ý bạn nên luôn luôn sử dụng) bảo vệ bạn khỏi một điều khác biệt: cùng một tiêu đề được gián tiếp #include
d nhiều lần trong khi biên dịch một .cpp
tệp duy nhất