Что происходит, когда вы включаете какой-то файл и что происходит
когда вы вперед объявите какую-то функцию / класс?
Когда вы include
файл, препроцессор эффективно копирует вставляет весь файл included
в файл, делая include
ING. Когда вы пересылаете объявление функции / класса, вы сообщаете компилятору, что она существует, но вам не нужен весь заголовочный файл. требуется , если у вас круговая зависимость, и значительно сокращает время компиляции в других местах.
Если два файла содержат один и тот же файл, первый прочитает успешно
все функции второго не удастся, но все еще сможет использовать
функции ??
Если один и тот же файл будет включен дважды в одну единицу перевода (.cpp
файл), то оба будут «успешными», но если заголовок содержит защитные элементы любого типа, во второй раз ничего не будет загружено, потому что Препроцессор уже «скопировал» его в модуль перевода, и сделать это во второй раз сделало бы дубликаты всего, что было бы ошибкой. Таким образом, все задействованные файлы могут использовать все функции во всех заголовках, включенных до этого момента.
Что происходит, когда я пересылаю объявление какой-либо функции? Это функция
теперь "сохранен", и я могу использовать его где угодно или он известен только тем же
файл? тогда почему два файла с include (файлу со стражами) будут работать?
Да, если вы перешлите объявление функции / класса в заголовке, она может использоваться любым другим файлом, который включает этот заголовок.
Могу ли я просто включить каждую вещь в основную и больше не буду беспокоиться?
Возможно. Как только вы перейдете к более сложным примерам, вы получите циклические зависимости, которые требуют определенных вещей, которые должны быть объявлены и / или определены в определенном порядке. Кроме этого, да. Вы можете включить все в основном и сохранить его простым. Тем не менее, ваш код займет навсегда для компиляции.
А почему в файлах cpp должны быть заголовки ?? Что если я их не включу?
Тогда этот файл .cpp
не будет знать, что что-то еще существует вне его. Не очень полезно