2

我刚刚在getrusage手册页中注意到这一行:

<sys/time.h>现在不需要包含,但增加了可移植性。(确实,struct timeval 定义在<sys/time.h>

什么?由于struct rusagecontainsstruct timeval作为成员,肯定 sys/resource.h 必须包含 sys/time.h 否则类型将不完整且无法使用?

这个评论怎么可能有意义?怎么可能从来没有必要?可移植性如何得到帮助?

4

2 回答 2

2

这是因为 BSD 需要它:

FreeBSD 和 OpenBSD 在 sys/resource.h 之前需要 sys/time.h,而不仅仅是 time.h。

有关详细信息,请参阅有关 UNIX 可移植性的此页面。

于 2011-10-25T13:18:50.703 回答
2

一般来说,在 C 的早期,您必须在头文件 B 之前手动包含头文件 A 并不少见。也许早期版本的预处理器无法进行嵌套包含,或者它可能只是风格(手册页通常会直接包含相关结构的头文件)。

“这些天”,sys/resource.h 必须要么包含 sys/time.h,要么重复 struct timeval 的定义,但并不是每个系统都完全遵循标准。

于 2011-10-25T13:23:32.423 回答