__TIME__
et __DATE__
peuvent fonctionner, cependant il y a quelques complications.
Si vous placez ces définitions dans un fichier .h, et incluez les définitions de plusieurs fichiers .c/.cpp, chaque fichier aura une version différente de la date/heure en fonction de quand il est compilé. Donc si vous cherchez à utiliser la date/heure en deux endroits différents et qu'ils doivent toujours correspondre, vous êtes en difficulté. Si vous effectuez une construction progressive, l'un des fichiers peut être reconstruit tandis que l'autre ne l'est pas, ce qui se traduit à nouveau par des horodatages qui pourraient être très différents.
Une approche légèrement meilleure est de faire des prototypes GetBuildTimeStamp() dans un fichier .h, et de mettre les macros __TIME__
et __DATE__
dans le fichier d'implémentation (.c/.cpp). De cette façon, vous pouvez utiliser les horodatages à plusieurs endroits dans votre code et ils correspondront toujours. Cependant, vous devez vous assurer que le fichier .c/.cpp est reconstruit à chaque fois qu'une construction est effectuée. Si vous faites des constructions propres, alors cette solution peut fonctionner pour vous.
Si vous effectuez des constructions progressives, alors vous devez vous assurer que le tampon de construction est mis à jour à chaque construction. En Visual C++, vous pouvez le faire avec des étapes PreBuild - cependant dans ce cas, je vous recommande plutôt d'utiliser un fichier basé sur du texte qui est lu au moment de l'exécution de votre programme au lieu d'utiliser __DATE__
et __TIME__
dans un fichier .c/.cpp compilé. Cela permet à votre script de construction de mettre à jour rapidement le tampon (pas de compilation ou de liaison requise) et ne nécessite pas que votre étape PreBuild comprenne vos drapeaux ou options de compilateur.