2

time_tプリプロセッサの実行時のサイズを知る方法はありますか?

time_tint32_torかどうかを知りint64_tたいのですが、このトリックが Linux (POSIX) および Windows (可能であれば Mac OS/X) で機能することを望みます。早い段階で欲しいので、次のようなことができます:

#if time_t == _32BIT
typedef zint32_t my_time_t;
#else
typedef zint64_t my_time_t;
#endif

zint32/64_tの型は自動的にゼロに初期化されます。これはほとんどのタイプでうまく機能しますが、time_t現時点では問題があります。コンパイル時にプリプロセッサでサイズを判断できない限り。

4

1 に答える 1

10

のサイズを検出する標準マクロはなく、time_t前処理中に型のサイズを計算することはできません (「型」は前処理中に存在しないため)。ただし、テンプレートを使用して目的の結果を得ることができます。

#include <ctime>
#include <utility>

typedef std::conditional<
    sizeof(time_t) == 8,
    zint64_t,
    zint32_t
>::type my_time_t;

sizeof(time_t)は実装定義であり、4 バイトまたは 8 バイト以外のものである可能性があることに注意してください。すべてのターゲット プラットフォームで 4 バイトまたは 8 バイトであることを確認するか、他のサイズを処理するロジックを追加することにより、これを確実に考慮する必要があります。

于 2013-07-08T05:23:25.233 に答える