В настоящее время я работаю над большим проектом и поддерживаю все, что включает охранников, что делает меня сумасшедшим! Написание его вручную - это пустая трата времени. Хотя многие редакторы могут создавать включенные охранники, это не очень помогает:
-
Редактор генерирует защитный символ на основе имени файла. Проблема возникает, когда у вас есть заголовки с одинаковым именем файла в разных каталогах. Оба они получат то же самое, что и охранник. Включение структуры каталога в символ защиты потребует от редактора особого подхода, поскольку слэши и обратные слэши в макросе не самые лучшие.
-
Когда мне нужно переименовать файл, я должен также переименовать все защитные элементы include (в комментарии ifndef, define и ideal endif). Раздражает.
-
Препроцессор заливается множеством символов без подсказки, что они означают.
-
Тем не менее определение включается один раз, компилятор все равно открывает заголовок каждый раз, когда он встречает включение заголовка.
-
Включить защитные устройства не вписываются в пространства имен или шаблоны. На самом деле они подрывают пространства имен!
-
У вас есть шанс, что ваш символ защиты не будет уникальным.
Возможно, они были приемлемым решением в тех случаях, когда программы содержали менее 1000 заголовков в одном каталоге. Но сейчас? Он древний, он не имеет ничего общего с современными привычками кодирования. Что беспокоит меня больше всего, так это то, что эти вопросы могут быть практически полностью решены директивой #pragma once. Почему это не стандарт?