Как добавление заголовка может повысить переносимость? (SYS /time.h)

Я только что заметил эту строку на странице руководства по getrusage:

В том числе <sys/time.h> не требуется в эти дни, но увеличивает мобильность. (Действительно, структура timeval определяется в <sys/time.h>)

Какие? поскольку struct rusage содержит struct timeval как член, sys/resource.h обязательно должен включать sys/time.h, иначе тип будет неполным и непригодным для использования?

Как этот комментарий мог иметь смысл? Как это могло быть не нужно? Как можно было помочь переносимости?

2 ответа

Решение

В целом, в первые годы существования C нередко приходилось вручную включать файл заголовка A перед файлом заголовка B. Возможно, ранняя версия препроцессора не могла делать вложенные включения, или, возможно, это было просто стилистически (manpages часто напрямую включает заголовочные файлы для соответствующих структур).

"В эти дни" sys / resource.h должен либо включать sys / time.h, либо повторять определение struct timeval, но не каждая система полностью следует стандарту.

Это потому, что этого требуют BSD:

FreeBSD и OpenBSD нужны sys/time.h, а не просто time.h, перед sys/resource.h.

Смотрите эту страницу о переносимости UNIX для деталей.

Другие вопросы по тегам