手动维护软件版本号和发布时间是一件比较麻烦的事情,尤其是当大版本不变,但子版本迭代频繁的时候,常常忘记更新发布时间,导致版本管理混乱。因此,最方便的方法就是自动嵌入版本编译时间。
标准C中定义了一些预定义宏,以双下划线“__”开头和结尾,中间字母全部大写。如下几种预定义宏是C中常用的几个:
__FILE__ 当前源代码文件名
__LINE__ 当前源代码行号
__DATE__ 编译日期
__TIME__ 编译时间
__STDC__ 若要求程序严格符合ANSI标准,则该宏置为1
所以,要在版本号中嵌入编译日期和时间,我们可以利用__DATE__和__TIME__两个预定义宏。示例程序如下:
#include<stdio.h>
#include<string>
using namespace std;
string get_compile_time_for_version(string main_version_str)
{
char whole_version_string[200];
sprintf(whole_version_string, "%s, Released at: %s, %s", main_version_str.c_str(),__DATE__, __TIME__);
return (string)whole_version_string;
}
int main(void)
{
string main_ver_str = "Released version V3.5";
string whole_version = get_compile_time_for_version(main_ver_str);
printf("The whole version string is : %s \n", whole_version.c_str());
return 0;
}
编译并执行,结果如下,编译完成后,执行多次,输出的版本时间都是不变的。