How to use __DATE__ and __TIME__ predefined macros in as two integers, then stringify?

Viewed 130834

Want to use __ DATE __ and __ TIME __ as integer for giving automated version to my code in compile time.

#define STRINGIZER(arg)     #arg
#define STR_VALUE(arg)      STRINGIZER(arg)

#define DATE_as_int_str useD(__DATE__) // What can be done ?
#define TIME_as_int_str useT(__TIME__) // What can be done ?

#define VERSION 1.4

#define COMPLETE_VERSION STR_VALUE(VERSION) "." DATE_as_int_str "." TIME_as_int_str

and get COMPLETE_VERSION as string in a const unsigned char [].

const unsigned char completeVersion[] = ?? COMPLETE_VERSION;

Should output 1.4.1432.2234 something.

One of the possible solution could be but did not work: convert-date-to-unsigned-int

In context of compile time convertint-date-and-time-string-to-just-integers-in-c One can refer expanssion-and-stringification-how-to-get-the-marco-name-not-its-value

7 Answers

For anyone just looking to replace the extra ' ' (space) if day is less than 10 then use:

#define BUILD_DATE (char const[]) { __DATE__[0], __DATE__[1], __DATE__[2], __DATE__[3], (__DATE__[4] == ' ' ?  '0' : __DATE__[4]), __DATE__[5], __DATE__[6], __DATE__[7], __DATE__[8], __DATE__[9], __DATE__[10], __DATE__[11] }

Output: Sep 06 2019

Related