我刚在getrusage手册页中注意到这一行:
这些天不需要包括
中定义<sys/time.h>
,但可以提高可移植性。 (实际上,struct timeval在<sys/time.h>
)
什么?由于struct rusage
包含struct timeval
作为成员,因此sys / resource.h必须包含sys / time.h,否则类型将不完整且无法使用?
这个评论怎么可能有意义?它怎么可能没有必要?可携带性如何得到帮助?
答案 0 :(得分:2)
这是因为BSD需要它:
FreeBSD和OpenBSD之前需要sys / time.h,而不仅仅是time.h SYS / resource.h中。
有关详细信息,请参阅UNIX可移植性上的page。
答案 1 :(得分:2)
一般来说,在C的早期,你必须在头文件B之前手动包含头文件A,这种情况并不少见。也许早期版本的预处理器不能做嵌套包含,或者它可能只是样式(联机帮助页通常直接包含相关结构的头文件)。
“这些天”,sys / resource.h必须包含sys / time.h或重复struct timeval的定义,但不是每个系统都完全遵循标准。