現在実行中のコードが最後にコンパイルされた日時を表示するprintf()
を実行したい。 C/C++は、コンパイル時にタイムスタンプに解決するマクロを提供していますか?
__DATE__
および__TIME__
。
16.8定義済みマクロ名[cpp.predefined]
1次のマクロ名は実装によって定義されます:__LINE__
現在のソース行の行番号(10進定数)。__FILE__
ソースファイルの推定名(文字列リテラル)。__DATE__
ソースファイルの翻訳日( "Mmm dd yyyy"形式の文字列リテラル。月の名前はasctime関数で生成された名前と同じで、ddの最初の文字はスペースです)値が10未満の場合は文字)。翻訳の日付が利用できない場合、実装定義の有効な日付が提供されます。__TIME__
ソースファイルの変換時刻(asctime関数で生成された時刻と同様の "hh:mm:ss"形式の文字列リテラル)。翻訳の時間が利用できない場合、実装定義の有効時間が提供されます。__STDC__
かどうか__STDC__
は事前定義されており、その場合、その値は実装定義です。__cplusplus
名前__cplusplus
は、C++変換単位をコンパイルするときに値199711Lに定義されます。
あなたが欲しい__TIME__
とおそらく__DATE__
。
マクロ__DATE__
および__TIME__
Gccプリプロセッサを使用している場合は、__TIME__
および__DATE__
マクロで探しているものが見つかります。
GNU Cプリプロセッサ ドキュメント からの引用:
__日付__
このマクロは、プリプロセッサが実行されている日付を表す文字列定数に展開されます。文字列定数は11文字を含み、「Feb 12 1996」のように見えます。月の日が10未満の場合は、左側にスペースが埋め込まれます。
...
__時間__
このマクロは、プリプロセッサが実行されている時間を表す文字列定数に展開されます。文字列定数は8文字を含み、「23:59:01」のように見えます。
スクリプトを使用するか、アプリケーションを作成して、ビルドの日付と時刻を含むC++ソースファイルを生成します。このファイルをビルド設定に追加します。プログラムの他の部分は、このファイルのデータを参照できます。
この手法は、バージョン番号をプログラムに埋め込む場合にも役立ちます。ビルドプロセスはバージョン番号を制御できます。
これを使用して、DbgViewにメッセージを送信します。
OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());
コンパイラは__TIMESTAMP__
マクロを提供することが期待されているようですが、これは目的に応じて機能するはずです。