ちょうど好奇心から私は標準__TIME__
プリプロセッサマクロによって与えられた値が単一の翻訳単位内で変更できるかどうか疑問に思っていますか?__TIME__プリプロセッサマクロはファイル内では定数であることが保証されていますか?
つまり、前処理中に一度確定された__TIME__
は、遭遇するたびに再評価されますか?
これがC標準で指定されていない場合、主要な実装(gnu、clang、intel、msvc)の間に事実上の標準的な動作がありますか?
ちょうど好奇心から私は標準__TIME__
プリプロセッサマクロによって与えられた値が単一の翻訳単位内で変更できるかどうか疑問に思っていますか?__TIME__プリプロセッサマクロはファイル内では定数であることが保証されていますか?
つまり、前処理中に一度確定された__TIME__
は、遭遇するたびに再評価されますか?
これがC標準で指定されていない場合、主要な実装(gnu、clang、intel、msvc)の間に事実上の標準的な動作がありますか?
Cは "翻訳の時間"を厳密に指定していませんが、前処理/編集を通して一定です。
私の経験は一定です。しかし、それは第二のものにすぎないので、所与の編集は第二の境界を越えて相違する必要がある。
__TIME__
前処理翻訳単位の翻訳の時間:asctime
関数によって生成された時のような形"hh:mm:ss"
のリテラル文字列。変換の時間が利用できない場合は、 実装定義の有効時間を提供するものとする。 C11§6.10.8.11それぞれ
__DATE__
と__TIME__
の定義、翻訳の日付と 時間は(6.10.8.1)は使用できません。 (参考)C11§J.3.111
6.10.8.1p1を参照してください。これは、前処理が開始されるときを意味している可能性が非常に高いです。他のものはかなり役に立たないでしょう。 – Olaf
GNU CPPの現在のバージョンは、マクロが最初に展開されたときに、 '_TIME__'と' __DATE__'の値を同時に設定すると思います。私は100%確信していませんが、これらのマクロの特定の値セットの範囲は、コマンドラインオプションが解析されている間に割り当てられているように見えます。 GCCソースは悪名高く畳み込まれています。 – NovaDenizen
@NovaDenizen '__DATE__'と' __TIME__'の同時性の必要性は優れています!これらの2つが同じ瞬間に設定されていないと想像してください。それ以外の '__TIME__'の' 00:00:00'は '__DATE__'が昨日または今日になる可能性があります。唯一正常な機能は、両方の値の1回限りの設定です。 – chux