我有一个 C++ 项目,必须打印修订字符串。修订字符串是公司指定的,协议包括构建时间(yyyy/mm/dd)。
我过去常常将其指定为构建系统中的宏,但这不再是一个选项,因为会弄乱预编译头(在增量构建中,当日期发生变化时)。
我试图通过从编译器获取构建日期来实现这一点,但是__DATE__
and __TIMESTAMP__
以 Mmm 形式给出月份。
有什么想法如何将月份作为数字吗?
根据下面的答案,我完成的版本是:
#define __MONTH__ (\
__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? "01" : "06") \
: __DATE__ [2] == 'b' ? "02" \
: __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? "03" : "04") \
: __DATE__ [2] == 'y' ? "05" \
: __DATE__ [2] == 'l' ? "07" \
: __DATE__ [2] == 'g' ? "08" \
: __DATE__ [2] == 'p' ? "09" \
: __DATE__ [2] == 't' ? "10" \
: __DATE__ [2] == 'v' ? "11" \
: "12")
...
std::string udate = __DATE__;
std::string date = udate.substr(7, 4) + "/" + __MONTH__ + "/" + udate.substr(4, 2);
boost::replace_all(date, " ", "0");
thanks
我认为下面的宏符合您的要求。这里我们正在处理月份的第三个字母,因为它对于大多数月份(一月/六月、三月/四月除外)来说都是唯一的,因此更容易比较。
#define MONTH (\
__DATE__ [2] == 'n' ? (__DATE__ [1] == 'a' ? 1 : 6) \
: __DATE__ [2] == 'b' ? 2 \
: __DATE__ [2] == 'r' ? (__DATE__ [0] == 'M' ? 3 : 4) \
: __DATE__ [2] == 'y' ? 5 \
: __DATE__ [2] == 'l' ? 7 \
: __DATE__ [2] == 'g' ? 8 \
: __DATE__ [2] == 'p' ? 9 \
: __DATE__ [2] == 't' ? 10 \
: __DATE__ [2] == 'v' ? 11 \
: 12)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)