2011-10-03 26 views
15

Tôi đã tạo các tệp như thế này trong một thời gian: Thứ tự có ý nghĩa không? hoặc không gian tên và #includes được đổi chỗ và tại sao.Cái nào đến trước? bảo vệ tiêu đề, không gian tên và bao gồm

#ifndef CLASSNAME_H // header guards 
#define CLASSNAME_H 

#include "a.h" // includes in alphabetical order 
#include "b.h" // user specified includes first 
#include "c.h" 
#include <vector> // then library includes 

namespace MyNamespace 
{ 
    class ClassName 
    { 

    }; 
} 

#endif 
+7

Chỉ cần tưởng tượng rằng '# include' nghĩa đen dán nội dung tệp vào tệp cơ sở của bạn, sau đó làm việc trong không gian tên nào bạn muốn có khai báo nào. –

+0

... và cũng xem xét điều gì sẽ xảy ra nếu các tệp .cpp khác nhau có cùng tiêu đề bên trong các không gian tên khác nhau ... –

Trả lời

10

Có. Điều đó có vẻ tốt.

Mặc dù tôi đặt hàng các tiêu đề khác nhau (nhưng theo thứ tự bảng chữ cái là tốt).

Điều duy nhất tôi sẽ thay đổi là bảo vệ bao gồm. Tôi làm cho bao gồm không gian tên của tôi cũng như tên lớp. Nhiều lần tôi có các lớp có cùng tên (nhưng trong một không gian tên khác) đang được sử dụng bởi cùng một mã.

#ifndef MY_COMPANY_MY_NAME_SPACE_MYCLASSNAME_H // header guards 
#define MY_COMPANY_MY_NAME_SPACE_MYCLASSNAME_H 

#include "a.h" // includes in order of most specific to most general. 

       // My includes first. 
       // Then C++ headers   <vector> 
       //  I group all the containers together. 
       // Then C specific headers <sys/bla.h> 
       // Then C generic headers <ctype.h> 


namespace MyNamespace 
{ 
    Class ClassName 
    { 

    }; 
} 

#endif 
+1

Khi tên tệp tiêu đề là duy nhất, sử dụng cùng tên cho bảo vệ bao gồm là đủ; đây là trường hợp điển hình. Nếu bạn đã kéo bao gồm các tập tin từ các thư mục khác nhau, bạn có thể có hai với cùng một tên, sau đó kỹ thuật này có thể có ý nghĩa. –

+2

Vấn đề với quy tắc này là bạn phải tranh luận với các nhà phát triển khác bao gồm "cụ thể hơn" và "chung chung hơn". Vì vậy, vì mọi sự bao gồm nên kéo tất cả các phụ thuộc của nó, thứ tự nói chung là không liên quan, và thứ tự chữ cái là một lựa chọn tốt mà không gây ra thảo luận nào (sau khi bạn chia dự án và tiêu đề hệ thống). – Juliano

+0

Nó phụ thuộc vào những gì bạn đang làm. Nếu bạn đang làm việc trên một ứng dụng, chỉ cần 'MYFILE_H', miễn là bạn đảm bảo rằng tất cả các tên tệp là duy nhất. Nếu bạn đang làm việc trên một thư viện sẽ được sử dụng trong bối cảnh không xác định, bạn chắc chắn sẽ muốn bảo vệ nó hơn: Tôi sử dụng một cái gì đó như: 'GB_Fallible_hh_20061203izn6Lk4kky3qvxlFVfxSpKam': 24 ký tự cuối cùng được tạo ngẫu nhiên (sử dụng'/dev/random'), trong đó có nghĩa là xung đột là không thể. –

4

Điều bạn viết là hoàn hảo. Tôi không nghĩ rằng bạn cần phải thay đổi thứ tự.

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