web-dev-qa-db-ja.com

C ++でのコンパイル時にオブジェクトコードにタイムスタンプを埋め込む

現在実行中のコードが最後にコンパイルされた日時を表示するprintf()を実行したい。 C/C++は、コンパイル時にタイムスタンプに解決するマクロを提供していますか?

37
theactiveactor

__DATE__および__TIME__

32
dalle

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__

26
GManNickG

マクロ__DATE__および__TIME__

7
FRotthowe

Gccプリプロセッサを使用している場合は、__TIME__および__DATE__マクロで探しているものが見つかります。

GNU Cプリプロセッサ ドキュメント からの引用:

__日付__

このマクロは、プリプロセッサが実行されている日付を表す文字列定数に展開されます。文字列定数は11文字を含み、「Feb 12 1996」のように見えます。月の日が10未満の場合は、左側にスペースが埋め込まれます。

...

__時間__

このマクロは、プリプロセッサが実行されている時間を表す文字列定数に展開されます。文字列定数は8文字を含み、「23:59:01」のように見えます。

5
hhafez

スクリプトを使用するか、アプリケーションを作成して、ビルドの日付と時刻を含むC++ソースファイルを生成します。このファイルをビルド設定に追加します。プログラムの他の部分は、このファイルのデータを参照できます。

この手法は、バージョン番号をプログラムに埋め込む場合にも役立ちます。ビルドプロセスはバージョン番号を制御できます。

2
Thomas Matthews

これを使用して、DbgViewにメッセージを送信します。

    OutputDebugStringA(("ATTACHED VERSION: "+ string(__DATE__) + " " + string(__TIME__)).c_str());
0
jamacoe

コンパイラは__TIMESTAMP__マクロを提供することが期待されているようですが、これは目的に応じて機能するはずです。

0
jwismar