web-dev-qa-db-fra.com

Incorporer l'horodatage dans le code objet lors de la compilation avec C++

Je souhaite effectuer un printf() à afficher lorsque le code en cours d'exécution a été compilé pour la dernière fois. C/C++ fournit-il une macro qui résout un horodatage pendant la compilation?

34
theactiveactor

Vous pouvez utiliser __DATE__ et __TIME__.

28
dalle

16.8 Noms de macro prédéfinis [cpp.predefined]
1 Les noms de macro suivants seront définis par la mise en oeuvre:
__LINE__ Le numéro de ligne de la ligne source actuelle (constante décimale).
__FILE__ Nom présumé du fichier source (littéral de chaîne de caractères).
__DATE__ La date de traduction du fichier source (littéral de chaîne de caractères de la forme "Mmm jj aaaa", où les noms des mois sont identiques à ceux générés par la fonction asctime et le premier caractère de dd est un espace si la valeur est inférieure à 10). Si la date de traduction n'est pas disponible, une date valide définie par l'implémentation est fournie.
__TIME__ Heure de traduction du fichier source (littéral de chaîne de caractères de la forme "hh: mm: ss" comme dans le temps généré par la fonction asctime). Si l'heure de traduction n'est pas disponible, une heure de validité définie par l'implémentation est fournie.
__STDC__ Si __STDC__ est prédéfini et, dans l'affirmative, quelle est sa valeur, sont définis par l'implémentation.
__cplusplus Le nom __cplusplus est défini à la valeur 199711L lors de la compilation d'une unité de traduction C++ .

Vous voulez __TIME__ et éventuellement __DATE__.

21
GManNickG

Utilisez les macros __DATE__ et __TIME__

6
FRotthowe

Si vous utilisez le préprocesseur gcc, vous trouverez ce que vous recherchez dans les macros __TIME__ et __DATE__.

Citation de GNU C Processor doc

__DATE__

Cette macro se développe en une constante de chaîne qui décrit la date à laquelle le préprocesseur est exécuté. La constante chaîne contient onze caractères et ressemble à "12 février 1996". Si le jour du mois est inférieur à 10, il est complété par un espace à gauche. 

__TIME__

Cette macro se développe en une constante de chaîne qui décrit l'heure à laquelle le préprocesseur est en cours d'exécution. La constante chaîne contient huit caractères et ressemble à "23:59:01". 

3
hhafez

Utilisez un script ou créez une application pour générer un fichier source C++ contenant la date et l'heure de la génération. Ajoutez ce fichier à la configuration de la construction. Les autres parties du programme peuvent référencer les données de ce fichier.

Cette technique est également utile pour incorporer un numéro de version dans le programme. Le processus de construction peut contrôler le numéro de version.

2
Thomas Matthews

Je l'utilise pour envoyer un message à DbgView:

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

Il semble que les compilateurs sont censés fournir une macro __TIMESTAMP__, qui devrait convenir à vos besoins.

0
jwismar