2010-06-05 29 views
8

Trong C++ mục đích bảo vệ tiêu đề trong chương trình C++ là gì.Mục đích bảo vệ tiêu đề

Từ net i tìm thấy đó là để ngăn chặn bao gồm các tệp một lần nữa và một lần nữa nhưng làm thế nào để bảo vệ tiêu đề đảm bảo điều này.

+0

Cụm từ được chấp nhận cho điều này trong C++ là "bao gồm bảo vệ". –

+0

Wikipedia cung cấp cho [một lời giải thích rất tốt] (http://en.wikipedia.org/wiki/Include_guard) về cách bao gồm các vệ sĩ hoạt động. –

Trả lời

14

Tiêu đề bảo vệ là để ngăn chặn sự cố nếu tệp tiêu đề được bao gồm nhiều lần; ví dụ.

#ifndef MARKER 
#define MARKER 
// declarations 
#endif 

Lần đầu tiên tập tin này là #include -ed, biểu tượng MARKER tiền xử lý sẽ được xác định, vì vậy các tiền xử lý sẽ xác định các biểu tượng, và tờ khai sau đây sẽ bao gồm trong mã nguồn thấy bởi trình biên dịch. Trên các biểu tượng #include tiếp theo, biểu tượng MARKER sẽ được xác định và do đó mọi thứ bên trong #ifnde/#endif sẽ bị bộ xử lý trước loại bỏ.

Để làm việc này đúng cách, biểu tượng MARKER cần phải khác nhau đối với mỗi tệp tiêu đề có thể là #include -ed.

Lý do loại điều này là cần thiết là nó là bất hợp pháp trong C/C++ để xác định một loại hoặc chức năng có cùng tên nhiều hơn một lần trong một đơn vị biên dịch. Trình bảo vệ cho phép tệp tiêu đề đến các tệp tiêu đề khác #include mà không lo lắng điều này có thể khiến một số khai báo được bao gồm nhiều lần.


Nói tóm lại, nó không ngăn chặn bạn từ #include -ing một tập tin một lần nữa và một lần nữa. Thay vào đó, nó cho phép bạn làm điều này mà không gây ra lỗi biên dịch.

2

Mục đích của bộ phận bảo vệ tiêu đề là ngăn chặn các sự cố trong đó một số mã chỉ có thể xuất hiện một lần cho mỗi đơn vị dịch.

Một ví dụ là cấu trúc. Bạn không thể xác định lại cấu trúc ngay cả khi định nghĩa thứ hai giống hệt nhau. Vì vậy, nếu bạn cố gắng biên dịch các mục sau:

struct foo { int x; }; 
struct foo { int x; }; 

Trình biên dịch sẽ không thành công do định nghĩa lại.

Có thể khó đảm bảo bạn chỉ bao gồm tiêu đề một lần (điều này xảy ra khi tiêu đề bao gồm các tiêu đề khác). Nếu tiêu đề của bạn có định nghĩa struct, điều này sẽ làm cho trình biên dịch thất bại. Tiêu đề bảo vệ là thủ thuật dễ dàng để ngay cả khi một tiêu đề được bao gồm nhiều lần, nội dung của nó chỉ xuất hiện một lần duy nhất.

Các vấn đề liên quan