GNU/Linux >> Linux の 問題 >  >> Linux

time_t は最終的に typedef とは何ですか?

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"" がプライマリ ソース ファイルの最初の行として表示されているかのようにファイルを処理します。"
  • - :標準入力からの入力

Linux
  1. 「ls-a」と入力すると、「。」の意味は何ですか。と ".."?

  2. 何をしますか?

  3. time_t の最大値 (struct timespec)

  1. Linuxユーザーとは何ですか?

  2. Linux で windows.h の代わりに何を使用すればよいですか?

  3. mount -t TYPE / - TYPEが何であるかを知る方法は?

  1. システム管理者とは何ですか?

  2. 「lc_all=c」は何をしますか?

  3. ターミナルエミュレータを実装する場合、どのタイプのターミナルをサポートするのですか?