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

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

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

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

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


person spraff    schedule 25.10.2011    source источник


Ответы (2)


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

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

person Random832    schedule 25.10.2011

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

FreeBSD и OpenBSD нуждаются в sys/time.h, а не только time.h, перед sys/resource.h.

Дополнительные сведения см. на этой странице о переносимости UNIX.

person trojanfoe    schedule 25.10.2011
comment
Так почему же версии заголовков для BSD просто не включают то, что им нужно? - person spraff; 25.10.2011