背景介绍

在最近参与的一个VNC远程控制项目中,我接触到了UltraVNC的源码。该项目采用了UltraVNC的定制版本作为服务端,配合Apache Guacamole作为客户端,实现了浏览器端的远程桌面控制功能。

发现命名惯例

在深入研究UltraVNC源码时,我注意到了一个有趣的命名模式:几乎所有的字符串变量都以"sz"作为前缀,例如:

1
char* szCmdLine = szCmdLine2;

这种命名方式在Windows API编程中相当常见,但在现代C++开发中已经较少使用。

“sz"前缀的由来

通过查阅资料,我在StackExchange上找到了答案:

“sz"代表"zero-terminated string”(以零结尾的字符串)。这个命名约定源于:

  1. C/C++中的字符串默认以空字符’\0’结尾
  2. “sz"是"string zero"的缩写
  3. 这种命名法属于匈牙利命名法的一种应用

现代C++中的考量

虽然这种命名方式有其历史价值,但在现代C++开发中:

  1. 更推荐使用std::string而非C风格字符串
  2. 类型系统已经足够强大,不需要通过前缀标识类型
  3. 过度使用匈牙利命名法可能降低代码可读性

不过,在维护遗留代码或与Windows API交互时,理解这种命名惯例仍然很有价值。