Нужны ли стражи включения в C++
От: velkin Удмуртия https://kisa.biz
Дата: 28.10.24 16:12
Оценка: :)
Читал я тут очередную книгу по 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. Код со стражами включений менее красивый и более отвлекающий, особенно когда используется конструкция из макросов.

А кто там говорил, что макросы в принципе не нужно использовать, не Страуструп ли Бьерн, создатель языка. Я просто уже так привык к стражам включения и что визарды мне с ходу эти штуки генерирует, что перестал замечать. А ведь по большому счёту их можно и не использовать.

И опять же кто что думает по этому поводу. Но не так, что всю жизнь использовали, а более осмысленное. Мне лично стражи включения навязали визарды. Меня даже никто не спрашивал, потому я особо и не задумывался над целесообразностью.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.