应用编程#版本号的定义方法

编程时,有时需要打印版本号或者根据版本号来判断逻辑分支走向,前者一般是字符串形式的版本号,后者一般是整型数表达的版本号。

所以需要设计一个相对通用的版本号定义、升级和生成方法,来方便我们使用。

版本号定义

通常我们使用GNU版本号定义方法,如下所示:

主版本号.子版本号.修正版本号.编译版本号

版本号按如下规则升级:
1)当项目有重大修改或局部修正累积较多时,项目整体发生了全局变化,此时主版本号+1,其他版本号归零;
2)当项目增加功能或需求变更时,主版本号不变,子版本号+1,修正版本号归零;
3)当项目调整功能或缺陷修正时,主版本号不变,子版本号不变,修正版本号+1;
4)编译版本号是在迭代开发过程中进行累加,以供测试人员标识各修复缺陷的版本;

版本号实现

一般,我们把软件的版本号定义在一个独立的文件中,比如叫做version.h,然后在其中定义各级版本号,其他文件引用version.h即可。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#ifndef __XHELLO_VERSION_H__
#define __XHELLO_VERSION_H__

#define _SX_N2S_(num) #num
#define _SX_N2T_(major,minor,patch,build) _SX_N2S_(major) "." _SX_N2S_(minor) "." _SX_N2S_(patch) "." _SX_N2S_(build)
#define _SX_N2N_(major,minor,patch,build) ((major)*1000000 + (minor)*10000 + patch*100 + build)

#define XHELLO_VER_MAJOR 1
#define XHELLO_VER_MINOR 3
#define XHELLO_VER_PATCH 25
#define XHELLO_VER_BUILD 1

#define XHELLO_VERSION _SX_N2T_(XHELLO_VER_MAJOR,XHELLO_VER_MINOR,XHELLO_VER_PATCH,XHELLO_VER_BUILD)
#define XHELLO_VERSION_NUMBER _SX_N2N_(XHELLO_VER_MAJOR,XHELLO_VER_MINOR,XHELLO_VER_PATCH,XHELLO_VER_BUILD)

#endif

按上述版本号定义规则,可知示例代码所表达的含义如下:

  • XHELLO表示软件名称,此处替换成你自己的软件名称;
  • XHELLO软件的版本号,用字符串来表达就是 1.3.25.1,用整型数来表达就是 1032501;
  • 变更版本号时,仅调整XHELLO_VER_MAJOR、XHELLO_VER_MINOR、XHELLO_VER_PATCH、XHELLO_VER_BUILD,其他宏保持不动;

使用示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include "version.h"

int main(int argc, char **argv)
{
std::cout << "version:" << XHELLO_VERSION << std::endl;

if (XHELLO_VERSION_NUMBER > 1031901)
{
// TO DO SOMETHING
}
else
{
// TO DO SOMETHING
}

return 0;
}