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

time_t ウィキペディアの記事の記事は、これについていくつかの光を当てています。要するに、 time_t の型は C 仕様では保証されていません。


[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" 言います:

および6.2.5/18「タイプ」 言います:

POSIX 7 sys_types.h の記述:

どこで [CX] は次のように定義されています:

より強力な保証を行うため、これは拡張です:浮動小数点はアウトです。

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