Блог пользователя al13n

Автор al13n, 13 лет назад, По-русски

UPD: Ок, видимо, это бесполезный способ: то же самое, но проще, может сделать #pragma hdrstop.

Нашел способ ускорить компиляцию в Visual Studio примерно на 6 секунд, используя precompiled headers. При этом не требуется изменение кода перед отправкой на тестирование. Это достигнуто грязным хаком, о котором ниже :). Вот инструкция:


1) Создаем в проекте файл с названием "stdio.h" (да, обязательно с названием какого-нибудь стандартного хедера). Туда выносим весь шаблон, который не изменяется от программы к программе, в основном инклюды.
2) В Project - Properties - Configuration Properties - C/C++ - Precompiled Headers  выбираем Precompiled Header: Create, Precompiled Header File: stdio.h.
3) Программу начинаем со строк
#include "stdio.h"
#ifdef ONLINE_JUDGE
(тут все содержимое нашего stdio.h)
#endif

Почему нельзя было назвать свой хедер по-человечески и окружить его инклюд в #ifdef? Потому что студия требует, чтобы файл с кодом начинался с инклюда precompiled header, инклюдить в ифдефе не дает.
  • Проголосовать: нравится
  • +10
  • Проголосовать: не нравится

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
Я слышал, что в вижаке precompiled headers делается штуками в стиле
#pragma hdrstop
Не пробовали?

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    делается, но тогда перед отправкой нужно будет менять код решения, иначе compilation error
13 лет назад, # |
Rev. 2   Проголосовать: нравится 0 Проголосовать: не нравится

как я понимаю, если в окошке build уже отображается warning, который пойман в main-е, компиляция header-ов уже завершена?

если так, то метод yeputons, похоже, действительно работает 

13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится
al13n: UPD: Ок, видимо, это бесполезный способ: то же самое, но проще, может сделать #pragma hdrstop.

Можно чуть поподробнее?

  • 13 лет назад, # ^ |
      Проголосовать: нравится 0 Проголосовать: не нравится
    Я еще не знаю подробнее, чем в комментариях выше :)
»
13 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Насколько я знаю, можно использовать stdafx.h. Он фигурирует в шаблонах с такой ролью

  • »
    »
    13 лет назад, # ^ |
      Проголосовать: нравится +2 Проголосовать: не нравится

    При отправке кода с таким include будет compilation error. А инклюдить в ифдефе компилятор не дает.