Почему `include <iostream>` в конечном итоге включает в себя * много * файлов? - PullRequest
3 голосов
/ 04 декабря 2009

Продолжение этого вопроса :

Когда я делаю include <iostream>.
Бывает, что в него входит много файлов от /usr/include .A grep "\usr\include" до g++ -E prog.cpp, насчитывающих около 1260 записей;).

Является ли их способ управления, включая различные файлы?
Платформа: Linux
Версия G ++: 4.2.4

Ответы [ 3 ]

11 голосов
/ 04 декабря 2009

Нет, <iostream> включает их, потому что это зависит от них напрямую или зависит от них.

Ничего не поделаешь.

Вы можете (в зависимости от вашего компилятора) ограничить влияние, которое это оказывает на время компиляции, используя Precompiled Headers

3 голосов
/ 05 декабря 2009

Мое предложение не беспокоиться о том, сколько файлов содержит компилятор. Сосредоточьтесь больше на правильности, надежности, и графике . Если время сборки вызывает проблемы, приобретите более быструю машину, соберите всю ночь, отправляйтесь на прогулку или разделите код на более мелкие единицы перевода . Единицы перевода должны быть достаточно маленькими, чтобы содержать код, который меняется не часто. Изменения ЗЛО.

Основой системы сборки является компиляция только нескольких файлов, которые изменились. Если ваш процесс разработки функционирует правильно, время сборки будет все больше и больше находиться в фазе связывания по мере роста проекта.

Если время компиляции все еще велико, посмотрите, поддерживает ли ваш компилятор предварительно скомпилированные заголовки . Как правило, это метод для компилятора, чтобы хранить все объявления и определения в более эффективной форме.

2 голосов
/ 04 декабря 2009

Вы #include <iostream>, когда вам нужно использовать потоки. Это должно определить некоторые вещи, которые вам нужны. Какая активность требуется для этого - вопрос качества реализации. Вы можете удалить файлы из /usr/include, но это может сломать вещи.

Я действительно сомневаюсь, что это включает 1260 файлов. Почти наверняка большинство из них являются дублирующими записями, которые ничего не загружают, но не удаляются из вывода -E.

...