为什么Visual C++版本号中包含逗号而不是点

A9S*_*9S6 5 versioning version-numbering visual-c++

我已经看到我的Visual C++项目具有以下声明,这些声明使用COMMAS而不是DOTS用于版本:

#define FILEVER        11,0,2,0
#define PRODUCTVER     11,0,2,0
#define STRFILEVER     "11, 0, 2, 0\0"
#define STRPRODUCTVER  "11, 0, 2, 0\0"
Run Code Online (Sandbox Code Playgroud)

这里MS文章也有逗号相同的值(实际上上述声明基于该文章).我们为什么在这里使用COMMAS?当我打开编译的文件属性时,我看到FileVersion为11.0.2.0但是ProductVersion为11,0,2,0 - 我的QA朋友说它是一个bug :).我缺少一些标准或者一些内部机制吗?

Jan*_*dec 5

在前两个定义中,因为Microsoft资源文件语法调用逗号.对于后两个定义,Microsoft约定也在那里使用逗号.微软想要与众不同.

文件版本取自非字符串变体,并在文件资源管理器中用点打印.产品版本取自字符串.你可能自己用点写字符串.这是一个字符串,应该没关系.但是您必须.rc手动编辑文件 - Visual Studio将编写逗号.

至于前两个定义,我可以看到在一般C++中选择逗号的原因.如果你有11.0.2.0,那么在任何上下文中都会出现语法错误,你唯一能做的就是用#运算符将它转换为字符串.但是使用逗号,您可以将其扩展为数组或结构的定义.喜欢int version[] = { 11,0,2,0 };.如果您想要在代码中进行版本检查,这很有用.