2017-03-03 2 views
2

私は失敗の時刻を格納するtime_t型変数(<time.h>)を持っています。これは最終値になる "null"値に初期化しますエラーは発生しません。 time_t変数をある種の既知のヌル値に設定する標準的な方法はありますか?私は、time()関数がエラーが発生した場合-1を返すことがわかりました。多分これが最適ですが、そのようなtypedefに整数値を代入できるかどうか疑問です。多分私はこれを使用する必要があります...?cのtime_t型の初期化されていない値を表現する方法

time_t failTime = (time_t)(-1);

+2

ここに受け入れ答えhttp://stackoverflow.com/questions/471248/what-is-ultimately-a-time-t-typedef-to、ISO Cは算術型としてtime_tの定義」を示します範囲、解像度、またはエンコーディングを指定するものではなく、時間値に適用される算術演算の意味も明記されていません。あなたの解決策が何であれ、それが非標準的になるように聞こえます。 –

+3

'time_t failTime = -1;'が 'time_t'の他の負の値で動作しようとしない限り、十分です。これはややまれです。 – chux

+0

整数リテラルをキャストする理由がないと思われます。 – robisrob

答えて

4

OPが参照されるように、失敗しtime()(および他の標準のCライブラリ関数)の結果は(time_t)(-1)なので、値を「不合格」ものにtime_tを初期化するために、少なくとも妥当あります。

// Just like OP 
time_t failTime = (time_t)(-1); 

time_t実数タイプと「整数と実数フローティングタイプをまとめ実数型呼ばれる」です。 time_tdoublelongなど

厳密time_t(time_t)(-1)として有効時間をコードすることができ、まだそれは様々な機能のためにエラー復帰区別しないで話すことができました。

可能な符号化の広い範囲が与えられ、1970年1月1日から整数秒を使用する一般的な方法を考えると、(time_t)(-1)は合理的な選択です。

より頑強な(またはペダンティックな解決策)は、フラグが正しいことを示すために時間変数にフラグを設定します。例:

struct time_pedantic { 
    time_t t; 
    bool valid; 
} 
+1

十1より強固なソリューションです。 –

3

ますが、基本的なC言語何も依存する何かを必要として立ち往生している場合は、あなたの最善の策は、設定され、あなたが実際に表現するために必要はありません。過去にこれまでの時間を選択することですそれはstruct tmにあり、time_tmktimeと変換します。正常に変換する値が見つかるまで、ループして再試行する必要があります。典型的なシステムは、1970年を中心に約+/- 68年の表現可能な範囲の範囲を持っていますが、必ずしもあなたがそうするとは限りません。

POSIXまたはPOSIXのような実装の場合、time_tは擬似UTCを表す算術型であるとみなすことができます(これはUT1またはそれと同じように「クラウドUTC」と呼ばれます)秒1970年代の初めから。time_tタイプの範囲で大きな負の整数値を選択することができます。

関連する問題