我刚刚在getrusage手册页中注意到这一行:
<sys/time.h>
现在不需要包含,但增加了可移植性。(确实,struct timeval 定义在<sys/time.h>
)
什么?由于struct rusage
containsstruct timeval
作为成员,肯定 sys/resource.h 必须包含 sys/time.h 否则类型将不完整且无法使用?
这个评论怎么可能有意义?怎么可能从来没有必要?可移植性如何得到帮助?
这是因为 BSD 需要它:
FreeBSD 和 OpenBSD 在 sys/resource.h 之前需要 sys/time.h,而不仅仅是 time.h。
有关详细信息,请参阅有关 UNIX 可移植性的此页面。
一般来说,在 C 的早期,您必须在头文件 B 之前手动包含头文件 A 并不少见。也许早期版本的预处理器无法进行嵌套包含,或者它可能只是风格(手册页通常会直接包含相关结构的头文件)。
“这些天”,sys/resource.h 必须要么包含 sys/time.h,要么重复 struct timeval 的定义,但并不是每个系统都完全遵循标准。