現在、time_t 値を返す C 関数を作成していますが、エラー ケースも管理する必要があります (この関数は I/O 関数を使用するため)。(time_t) -1 をエラー インジケーターとして使用するのは正しいですか?
4 に答える
Using(time_t)-1
は、失敗を報告する関数によって既に使用されてtime()
いるため、不合理な選択ではないようです。
成功した場合は time_t オブジェクト、エラーの場合は (time_t)(-1) としてエンコードされた現在のカレンダー時間。引数が NULL でない場合、戻り値は、引数が指すオブジェクトに格納されている値と等しくなります。
ただし、呼び出し元が時間関連の障害と IO 関連の障害 (または特定の IO 障害) を区別する必要がある場合は、障害に関する追加情報を返すために使用できるステータス タイプの引数を関数に追加することを検討してください。
はい、time_t
署名されています。
-1
したがって、エラーを示すために関数を返すようにしても問題ありません。
とにかく、API のロジックから、 (また?) 差を表現できるようにtime_t
、負の時間差を返す必要がないことを確認する必要があります。signed
アップデート:
これは、POSIX システムでのみ保証されています。http://pubs.opengroup.org/onlinepubs/009696699/basedefs/sys/types.h.htmlが実数浮動小数点型であると定義しているためsigned
、誤解を招く 可能性もあります。time_t
int
そのため、POSIX 準拠のシステムtime_t
では負の値を使用できます。
時間関数自体は(time_t) -1
エラーを返すため、使用しても(time_t) -1
問題なく動作するはずです。
値(time_t)-1
は 1969-12-31T23:59:59+00:00、The (Unix) Epoch の 2 秒前を示します。
これは、標準 C の時間関数の一部によって返されます。これは、過去の時間を処理する必要があり、実際のエラーとエポックよりも前の秒の偶発的な発生とを区別する必要がある場合に、混乱を招きます。(仮定の) TIME_T_MAX または TIME_T_MIN の値 ( の最大値または最小値) を使用したほうがよいでしょうtime_t
。(ただし、2038 年 1 月に署名付き 32 ビットの上限time_t
が発生するまで、あと 25 年ほどしか残っていないことに注意してください。)