time_t ウィキペディアの記事の記事は、これについていくつかの光を当てています。要するに、 time_t
の型は C 仕様では保証されていません。
time_t
datatype は、システム時間値を格納するために定義された ISO C ライブラリのデータ型です。このような値は、標準の time()
から返されます ライブラリ機能。この型は、標準ヘッダーで定義されている typedef です。 ISO C は time_t を算術型として定義していますが、特定の型を指定していません 時間値に適用される算術演算の意味も指定されていません。
Unix および POSIX 準拠のシステムは time_t
を実装しています signed
integer
と入力します Unix エポックの開始からの秒数を表す (通常は 32 または 64 ビット幅) :1970 年 1 月 1 日の午前 0 時 (うるう秒はカウントしない)。負の時間値を正しく処理するシステムもあれば、そうでないシステムもあります。 32 ビット time_t
を使用するシステム タイプは 2038 年問題の影響を受けやすいです。
[root]# cat time.c
#include <time.h>
int main(int argc, char** argv)
{
time_t test;
return 0;
}
[root]# gcc -E time.c | grep __time_t
typedef long int __time_t;
$INCDIR/bits/types.h
で定義されています を通じて:
# 131 "/usr/include/bits/types.h" 3 4
# 1 "/usr/include/bits/typesizes.h" 1 3 4
# 132 "/usr/include/bits/types.h" 2 3 4
基準
ウィリアム・ブレンデルはウィキペディアを引用しましたが、私は馬の口からそれを好みます.
C99 N1256 標準ドラフト 7.23.1/3 "Components of time" 言います:
<ブロック引用>宣言された型は size_t (7.17 で説明) clock_t と time_t で、時間を表現できる算術型です
および6.2.5/18「型」 言います:
<ブロック引用>整数型と浮動小数点型は、まとめて算術型と呼ばれます。
POSIX 7 sys_types.h の記述:
<ブロック引用>[CX] time_t は整数型でなければなりません。
ここで [CX]
は次のように定義されています:
[CX] ISO C 標準への拡張。
より強力な保証を行うため、これは拡張です:浮動小数点はアウトです。
gcc ワンライナー
Quassnoi が述べたように、ファイルを作成する必要はありません:
echo | gcc -E -xc -include 'time.h' - | grep time_t
Ubuntu 15.10 GCC 5.2 では、上の 2 行は次のとおりです。
typedef long int __time_t;
typedef __time_t time_t;
man gcc
からの引用によるコマンドの内訳 :
-E
:"前処理段階の後で停止します。適切なコンパイラを実行しないでください。"-xc
:ファイル拡張子のない stdin から入力されるため、C 言語を指定してください。-include file
:""#include "file"" がプライマリ ソース ファイルの最初の行として表示されているかのようにファイルを処理します。"-
:標準入力からの入力