Стоит знать, что в некоторых реализациях есть #pragma once
и / или оптимизация обнаружения заголовка, включающего защиту, и что в обоих случаях препроцессор автоматически пропустит открытие, чтение или обработку файла заголовка, который он включал ранее.
Таким образом, на этих компиляторах, включая MSVC и GCC, такая «оптимизация» не имеет смысла, и ответственность за множественное включение должна лежать на файлах заголовков. Однако возможно, что это оптимизация для компиляторов, где #include очень неэффективно. Является ли код патологически переносимым, и <windows.h>
относится не к общеизвестному заголовочному файлу Win32, а к некоторому определяемому пользователем заголовочному файлу с тем же именем?
Также возможно, что в заголовочных файлах нет многократного включения защиты, и что эта проверка действительно необходима. В этом случае я бы предложил изменить заголовки. Весь смысл заголовков заключается в том, чтобы заменить код для вставки и вставки кода о месте: заголовок не должен занимать три строки.
Edit:
Поскольку вы говорите, что заботитесь только о MSVC, я бы либо:
- сделать массовое редактирование, время сборки только для того, чтобы предыдущий программист не знал того, чего не знаю я. Может быть, добавьте
#pragma once
, если это поможет. Используйте предварительно скомпилированные заголовки, если все это действительно тормозит.
- Игнорируйте это, но не используйте охрану для новых файлов или для новых
#include
, добавленных к старым файлам.
В зависимости от того, надо ли мне беспокоиться о более важных вещах. Это классическая работа в пятницу днем, я бы не стал тратить на нее потенциально продуктивное время; -)