2

getrusageのマニュアル ページで次の行に気付きました。

<sys/time.h>最近ではインクルードは必須ではありませんが、移植性が向上します。(実際、struct timeval は で定義されています<sys/time.h>)

何?struct rusageメンバーとして含まれているためstruct timeval、確かに sys/resource.h に sys/time.h を含める必要があります。そうしないと、型が不完全で使用できなくなりますか?

このコメントはどのように意味をなすのでしょうか? どうしてそれが必要でなかったのでしょうか?移植性はどのように助けられたでしょうか?

4

2 に答える 2

2

これは、BSD がそれを必要とするためです。

FreeBSD と OpenBSD では、sys/resource.h の前に time.h だけでなく、sys/time.h が必要です。

詳細については、UNIX の移植性に関するこのページを参照してください。

于 2011-10-25T13:18:50.703 に答える
2

一般に、C の初期の頃、ヘッダー ファイル B の前にヘッダー ファイル A を手動でインクルードする必要があることは珍しくありませんでした。おそらく、プリプロセッサの初期のバージョンではネストされたインクルードを実行できなかったか、単にスタイル上の問題だったのでしょう (manpages多くの場合、関連する構造のヘッダー ファイルを直接インクルードします)。

「最近」、sys/resource.h は sys/time.h をインクルードするか、または struct timeval の定義を繰り返す必要がありますが、すべてのシステムが標準に完全に従うわけではありません。

于 2011-10-25T13:23:32.423 に答える