[культура прогр-я] вложенные хедеры
Хотя бы по тому, что внутрянка b.h может изменится и там будет отказ от функций из c.h
поэтому вложенные хедеры как раз не рекомендую
без вложенных хедеров ты смотришь на си-файл и сразу можешь сказать: какие функциональности он использует. иначе копаться в деревьях вложенностей...это геморрой
отказ от функций будет не в хедере, а в си-файленасколько я понял, имел ввиду не функции, а что-то вроде структур (скажем, когда b.h перестает описывать заголовки функций со структурами из c.h)
поэтому вложенные хедеры как раз не рекомендуюмне кажется, что это не совсем по вопросу
без вложенных хедеров ты смотришь на си-файл и сразу можешь сказать: какие функциональности он использует. иначе копаться в деревьях вложенностей...это геморрой
ведь вложенные хедеры иногда необходимы (скажем, когда b.h описывает заголовки функций со структурами из c.h)
дело в другом: нужно ли "показывать" инклюдом c.h в a.c, что в a.c явным образом используются описания из c.h, или нет и насколько это полезно или вредно с точки зрения разработки
с одной стороны, я согласен с
с другой, если b.h может выполнять функцию группировки других хедеров и в a.c лишние инклюды будут лишь мешать, а не подчеркивать (когда файлов подобных c.h с десяток или больше)
хочется найти в одном из вариантов больше плюсов, чем в другом, и пользоваться...
А постоянно держать в голове конструкции вида "b.h уже заинклюдил c.h, поэтому его инклюдить больше не надо" - это нерационально.
Например, windows.h инклюдит winnt.h, который инклюдит ctype.h
И что, если мне понадобилась функция isalnum то типа вспоминать, что ctype уже заинклюден из windows.h?
Если более низкоуровневые заголовки используются напрямую ---
включать, иначе пусть используются вложенные.
А зависимости описывать --- в Makefile.
---
...Я работаю антинаучным аферистом...
#include <windows.h>
#include <ctype.h>
не взирая на то, что windows.h уже подключила ctype.h
а условная компиляция на месте уже разрулит всё что нужно
Так я в пользу того и говорю - что грамотнее писатьНаверное уж в обратном порядке.
#include <windows.h>
#include <ctype.h>
"жу"?
---
...Я работаю антинаучным аферистом...
какую роль здесь играет порядок?
---
...Я работаю антинаучным аферистом...
Указанный порядок работает только потому, что windows.h сама включает ctype.h. Если бы этого не было, то не заработало бы.
Оставить комментарий
a10063
не могу для себя решить, как лучше поступать с вложенными хедераминапример:
a.c использует хедер b.h (вызываются ф-ии, определенные в нем)
b.h использует c.h (структуры в нем)
вопрос: если a.c использует функции из c.h, нужно ли вписывать инклюд c.h в a.h, учитывая, что в c.h стоит проверка на множественные включения?
т.е. я понимаю, что можно не вписывать с точки зрения компилятора, но это скорее вопрос стиля или культуры прогр-я, даже не знаю точно...
как вы думаете?