手動維護軟件版本號和發佈時間是一件比較麻煩的事情,尤其是當大版本不變,但子版本迭代頻繁的時候,常常忘記更新發布時間,導致版本管理混亂。因此,最方便的方法就是自動嵌入版本編譯時間。
標準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;
}
編譯並執行,結果如下,編譯完成後,執行多次,輸出的版本時間都是不變的。