Читал я тут очередную книгу по C++ и мне внезапно подумалось, а нужны ли
стражи включения.
Типичный страж включения на основе макросов.
#ifndef NAME
#define NAME
// ...
#endif // NAME
Или директивой, которую в наше время уже можно считать стандартной.
#pragma once
Но у меня годами вертелась мысль про управление лишними #include. Пишешь какой-нибудь код и добавляешь #include, а потом ещё и ещё. А потом стираешь функционал, а #include остаётся.
Но что ещё важнее и относится как раз к стражу включения, можно бесконечно дублировать #include для разных и одинаковых файлов. Когда есть вложения, то этого не видно, но я могу сделать и так.
#include <iostream>
#include <iostream>
#include <iostream>
#include <vector>
#include <vector>
#include <vector>
int main()
{
return 0;
}
Мало того, что функционал этих включений нигде не применяется, но они ещё и продублированы много раз.
В противовес можно было бы использовать ручное управление иерархией вложений собственных включений. Если бы чужие библиотеки не использовали стражи включения, тогда пришлось бы учитывать при включении файлов иерархии чужих библиотек.
И вот казалось бы, а зачем, это же лишние заморочки. А с другой стороны отсутствие ручного управления иерархиями включений файлов это и есть отказ от управления иерархиями.
Плюсы.
1. Меньше возни с иерархиями включений файлов.
Минусы.
1. Программист без понятия об иерархиях включения файлов, то есть часть взаимосвязей в коде не улавливает.
2. Код со стражами включений менее красивый и более отвлекающий, особенно когда используется конструкция из макросов.
А кто там говорил, что макросы в принципе не нужно использовать, не Страуструп ли Бьерн, создатель языка. Я просто уже так привык к стражам включения и что визарды мне с ходу эти штуки генерирует, что перестал замечать. А ведь по большому счёту их можно и не использовать.
И опять же кто что думает по этому поводу. Но не так, что всю жизнь использовали, а более осмысленное. Мне лично стражи включения навязали визарды. Меня даже никто не спрашивал, потому я особо и не задумывался над целесообразностью.