ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Четверг
25 апреля
703405 Топик полностью
fk0, легенда (04.10.2016 11:20, просмотров: 57) ответил Олдфаг на Че там искать. Если сразу после ifndef не написать его дифайн, то там сразу наверняка пойдут строчки типа инклюда то, инклюда сё... а в этих инклюдах еще инклюды... и в одной из вложенных инклюд запросто будет инклюда Вашего же первичного хедера.
Вот поэтому-то я define всегда пишу снизу. Чтоб рекурсивное вклчение всегда приводило к ошибки. Потому, что это в 99% случаев действительно какая-то ошибка. Я могу сказать, в реально большом проекте такая рекурсия потребовалась пару раз буквально. И надо разбираться в каждом случае, когда ошибка. Нужна рекурсия здесь или нет. И если нужна -- выносить наверх define. Почему рекурсия это неправильно: в нормальном проекте обычно верхние компоненты знают о нижних и использут их напрямую (и включают через #include). И в графе зависимостей компонентов циклов не должно быть (следовательно и рекурсии), должно быть дерево, где снизу масса компонентов, а сверху main. Если цикл -- значит какой-то компонент из низу полез использовать функции или переменные компонента сверху. И скорей всего, кроме исключительных случаев, это ненормальная архитектура ПО. Вместо прямых вызовов в таких случаях используются callbacks, система событий, что-то ещё, но обычно крайние компоненты снизу дерева не должны лезть на самый верх непосредственно. Через абстрактный интерфейс -- могут. Но не через его частную реализацию. А где абстрактный интерфейс -- есть и какая-то форма динамического связывания во время исполнения, т.е. непосредственное знание нижнего компонента о существовании верхнего -- не нужно. Не знаю понятно ли объяснил. В литературе редко пишется об том как строить архитектуру ПО. Но базовая идея, что зависимости должны распространяться в одну сторону, а во вторую непосредственных зависимостей быть не должно. Иначе в системе когда "все зависят от всех" ничем хорошим это не кончится.
[ZX]