Организовать включает

  • Есть ли какой-нибудь предпочтительный способ организовать директивы include?
  • Не лучше ли включать нужные файлы в файл .cpp вместо файла .h ? Каким-то образом затрагиваются единицы перевода?
  • Как насчет того, что, если он мне понадобится как в файле .h , так и в файле .cpp , мне просто включить его в файл .h ? Будет ли это иметь значение?
  • Является ли хорошей практикой хранить уже определенные файлы в предварительно скомпилированном заголовке ( stdafx.h ), например std и сторонние библиотеки? Как насчет моих собственных файлов, следует ли мне включать их в файл stdafx.h по мере их создания?

// myClass.h
#include <string>
// ^-------- should I include it here? --------

class myClass{
    myClass();
    ~myClass();

    int calculation()
};

// myClass.cpp
#include "myClass.h"
#include <string>
//  ^-------- or maybe here?  --------

[..]

int myClass::calculation(){
    std::string someString = "Hello World";
    return someString.length();
}


// stdafx.h
#include <string.h>
// ^--------- or perhaps here, and then include stdafx.h everywhere? -------
22
задан Default 21 June 2011 в 11:37
поделиться

1 ответ

  1. Вы должны иметь их в верхней части файла, все в одном месте. Это то, что все ожидают. Также полезно сгруппировать их, например, сначала все стандартные заголовки, затем сторонние заголовки (сгруппированные по библиотекам), затем ваши собственные заголовки. Сохраняйте этот порядок в течение всего проекта. Это облегчает понимание зависимостей. Как указывает @James Kanze, также полезно сначала поместить заголовок, который объявляет контент. Таким образом, вы убедитесь, что он работает, если он включен первым (то есть он не зависит от того, включает ли он, что он не включает себя).
  2. Сохраняйте область видимости как можно меньше, чтобы изменение заголовка влияло на наименьшее количество единиц перевода. Это означает, что по возможности включайте его только в cpp -файл. Как прокомментировал @Pedro d'Aquino, вы можете уменьшить количество включений в заголовок, по возможности используя предварительные объявления (в основном, когда вы используете только ссылки или указатели на данный тип).
  3. И то и другое - явное лучше, чем неявное.
  4. После некоторого прочтения, я считаю, что вы должны включать заголовки в PCH, только если вы уверены, что они больше не меняются. Это касается всех стандартных заголовков, а также (возможно) сторонних библиотек. Для ваших собственных библиотек вы будете судьей.
25
ответ дан 29 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: