Библиотека pch h за что отвечает

Предварительно откомпилированные заголовки (англ. pre-compiled headers ) — в средах программирования на языках Си и Си++ — способ ускорить компиляцию программ за счёт предварительной обработки так называемых заголовочных файлов, которые содержат интерфейсы модулей и, согласно нормам данных языков программирования, подключаются к программе путём прямой вставки их текстов в тело основной программы с помощью специальной директивы препроцессора #include . Предкомпилированные заголовки сохраняются на диске в виде файлов во внутреннем формате компилятора и при повторных компиляциях проекта время на их обработку и подключение существенно сокращается.

Содержание

Предпосылки [ править | править код ]

Язык программирования Си для подключения внешнего модуля использовал заголовочные файлы. Это упрощает компилятор, и даёт некоторую гибкость — и это работало в течение 20 лет, пока заголовки были небольшими, а файлов в проекте — мало. С укрупнением программных проектов время компиляции стало расти квадратично [1] — увеличивается как количество единиц компиляции, так и количество заголовков, подключённых к каждой конкретной единице. В особо крупных проектах полная перекомпиляция занимает десятки минут и чаще выполняется во время ночной сборки, чем на рабочих местах программистов.

К тому же язык программирования Си относится к семейству LR(1), и поэтому компиляторы Си медленнее, например, Паскаля (который LL(1)) [ источник не указан 2313 дней ] .

Чтобы сократить время компиляции, и были разработаны предкомпилированные заголовки. Поскольку заголовочные файлы меняются гораздо реже файлов, содержащих код программы (а библиотечные — практически никогда), разумным средством оптимизации оказалось выполнять предварительную обработку заголовков, и преобразование их в файлы специального вида, которые при компиляции программы можно подключать, минуя первые стадии компиляции. За счёт прекомпиляции заголовков полной обработке компилятором подвергаются только изменённые части программы. Впрочем, предварительная компиляция заголовка помогает не всегда:

  1. При изменении любого из предкомпилируемых заголовков перекомпилируется весь набор.
  2. При полной перекомпиляции выигрыш по времени получается, когда один и тот же набор применяется как минимум в двух единицах компиляции.
Читайте также:  Радиаторы на чипы памяти видеокарты

Поэтому, как правило, в предкомпилируемый набор включают всевозможные библиотечные заголовки, крупные и в то же время редко изменяющиеся.

Реализации [ править | править код ]

Embarcadero C++ Builder [ править | править код ]

Предкомпилируется всё, что идёт до директивы #pragma hdrstop .

GCC [ править | править код ]

При компиляции h -файлов GCC автоматически предполагает, что требуется делать предкомпилированный заголовок (либо это можно указать через командную строку, ключ -x ). Большинство оболочек программирования (например, Code::Blocks) позволяют указывать, какие файлы предкомпилировать. Стандартным решением будет «свалить» наиболее используемые, но редко меняющиеся заголовки в один h -файл и подключать его самым первым.

Microsoft Visual C++ [ править | править код ]

Ситуация похожа на GCC. Visual C++ версии 6.0 и выше предкомпилирует заголовок со стандартным именем — stdafx.h (это имя можно изменить опцией компилятора).

При компилировании этого кода:

fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "pch.h"" в источник.

Почему так – непонятно. Все библиотеки подключил. (Работал в VS)

Закрыт по причине того, что не по теме участниками user7860670, 0xdb, aleksandr barakin, Эникейщик, Eugene Krivenja 21 янв в 16:21 .

Похоже, этот вопрос не соответствует тематике сайта. Те, кто, голосовал за его закрытие, указывали следующие причины:

  • "Вопрос вызван проблемой, которая больше не воспроизводится, или опечаткой. Хотя похожие вопросы могут быть уместны на этом сайте, решение для этого вопроса вряд ли поможет будущим посетителям. Обычно можно избежать подобных вопросов написанием и исследованием минимальной программы для воспроизведения проблемы до публикации вопроса." – aleksandr barakin, Эникейщик, Eugene Krivenja
  • "Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример." – user7860670, 0xdb
Читайте также:  Sql developer как пользоваться

Если вопрос можно переформулировать согласно правилам, изложенным в справке, отредактируйте его.

using namespace std;
int main1()
<
int arr[3];
int num = 0;

for (int i = 0; i > arr[i];
for (int i = 0; i Попроси больше объяснений

  • Следить
  • Отметить нарушение
  • Hguihggjjhraws 23.09.2018

    Ответ

    Проблема 1 ясная, вторая – сомнительная.

    1. Главная функция программы. При условии, что вы дали основной файл программы.

    int main1() – это что такое?)

    Изменяйте на int main()

    2. #include "pch.h" – проверяйте, есть ли у вас этот файл в директории с проектом(основным файлом). Возможно, компилятор не может его найти. Если вы пишите в IDE, статический анализатор кода поможет вам в этом.

    3?. Для корректной работы объектов потока ввода/вывода вам требуется подключенный заголовочный файл iostream. Наверное, он у вас подключен, просто редактор текста znanija скушал значение, которое передается в директиву.

    Оцените статью
    ПК Знаток
    Добавить комментарий

    Adblock
    detector