我正在开发一个使用系统匈牙利符号的遗留 COM C++ 项目。因为它是对遗留代码的维护,所以约定是以它编写的原始样式进行编码——我们的新代码不是这样编码的。所以我对改变那个标准或讨论我们过去的罪不感兴趣=)
是否有用于系统匈牙利符号的在线备忘单?
到目前为止,我能找到的最好的是一个 pre stack-overflow 讨论帖,但它并没有我过去需要的一切。有人有其他链接吗?
(制作这个社区维基,希望它成为一个自我填充的列表)
我正在开发一个使用系统匈牙利符号的遗留 COM C++ 项目。因为它是对遗留代码的维护,所以约定是以它编写的原始样式进行编码——我们的新代码不是这样编码的。所以我对改变那个标准或讨论我们过去的罪不感兴趣=)
是否有用于系统匈牙利符号的在线备忘单?
到目前为止,我能找到的最好的是一个 pre stack-overflow 讨论帖,但它并没有我过去需要的一切。有人有其他链接吗?
(制作这个社区维基,希望它成为一个自我填充的列表)
这是'Systems Hungarian'的一个,根据我的经验,它是更常用(并且不太有用):
但这是多么普遍,我不知道。
Hungarian Notation 的另一种形式是“Apps Hungarian”,这显然是 Simonyi 的初衷(变量的使用是编码而不是类型)。有关详细信息,请参阅http://en.wikipedia.org/wiki/Hungarian_notation。
如果这是用于遗留 COM 项目,您可能需要遵循Microsoft 的匈牙利符号规范,该规范在 MSDN 上进行了记录。
请注意,这是Apps Hungarian,即“好”的 Hungarian Notation。 Systems Hungarian 是“坏”类型,其中名称以编译器类型为前缀,例如i
for int
.
表 1. 过程名称的一些示例
名称 描述 InitSy 以 sy 作为参数并对其进行初始化。 OpenFn fn 是参数。该过程将“打开” fn。不返回任何值。 FcFromBnRn 返回对应于给定 bn,rn 对的 fc。(这些名称无法告诉我们 sy、fn、fc 等类型是什么。)以下是标准类型构造的列表。(X和Y代表任意标签。按照标准标点符号,实际标签是小写的。)
表 2. 标准型结构
pX 指向 X 的指针。 dX 两个 X 类型实例之间的差异。X + dX 属于 X 类型。 cX 类型 X 的实例计数。 mpXY 由 X 索引的 Y 数组。读作“从 X 到 Y 的映射”。 rgX X 数组。读作“范围 X”。数组的索引称为: 数组 rgX 的 iX 索引。 dnX (rare) 以类型 X 为索引的数组。数组的元素称为: eX(稀有)数组 dnX 的元素。 grpX 一组Xs一个接一个的存放在storage中。当 X 元素的大小可变且标准数组索引不适用时使用。必须通过直接索引以外的方式引用组的元素。例如,存储分配区域是一个 grp 块。 bX 类型 X 的相对偏移量。这用于具有可变大小字段的数据结构中的字段位移。偏移量可以字节或字的形式给出,这取决于测量偏移量的基指针。 cbX X 实例的大小(以字节为单位)。 cwX X 实例的大小,以单词为单位。以下是标准限定词。(字母 X 代表任何类型标签。实际的类型标签是小写的。)
表 3. 标准限定符
XFirst X 值的有序集合(区间)中的第一个元素。 XLast 有序 X 值集中的最后一个元素。XLast 是闭区间的上限,因此循环继续条件应该是:X <= XLast。 XLim 一组有序 X 值的严格上限。循环继续应该是:X < XLim。 XMax 所有其他 X 的所有 X 值(Max、Mac 和 Nil 除外)的严格上限:X < XMax。如果 X 值以 X=0 开头,则 XMax 等于不同 X 值的数量。例如,dnx 向量的分配长度通常为 XMax。 XMac 所有 X 值的当前(相对于常量或分配)上限。如果 X 值以 0 开头,则 XMac 是 X 值的当前数量。遍历一个 dnx 数组,例如: for x=0 step 1 to xMac-1 do ... dnx[x] ... 或者 for ix=0 step 1 to ixMac-1 do ... rgx[ix] ... XNil X 类型的可区分 Nil 值。该值可能是也可能不是 0 或 -1。 XT 临时 X。一种在范围内限定给定类型的第二个数量的简单方法。表 4. 一些常见的原始类型
f 标志(布尔,逻辑)。如果使用限定符,它应该描述标志的真实状态。例外:常量 fTrue 和 fFalse。 w 具有任意内容的单词。 ch 字符,通常为 ASCII 文本。 b 字节,不一定包含编码字符,更类似于 w。通过紧随其后的限定词的大写字母与 b 构造函数区分开来。 sz 指向零终止字符串的第一个字符的指针。 st 指向字符串的指针。第一个字节是字符 cch 的计数。 h pp(在堆中)。
因为这是一个遗留项目,所以您的软件部门经理应该拥有原始程序员使用的任何版本的 Hungarian Notation 的样式指南副本。(我假设最初的程序员早就逃到了更开明的工作场所。)
你真的应该重新考虑你对匈牙利符号的使用。它最初是 C 中缺乏强类型(和编译器类型检查)的补丁。现代编译器强制类型正确性,使匈牙利符号充其量是多余的,否则是错误的。
似乎没有任何一种详尽的资源可用于查找 Hungarian Notation 前缀,可能是因为其中很多内容因代码库而异。当然,那里有很多非常常用的。
我能找到的最好的清单在这里
其余的涵盖了常用的约定,例如这个条目
MSDN 关于匈牙利符号的实体在这里 和一些关于这个主题的短论文(可能相互重叠)在这里和这里
您最好的选择是查看变量的使用方式,并且(可能)帮助您弄清楚前缀的定义(尽管在实践中,命名很少反映变量的使用,遗憾的是)。
您也许可以从这些不同的链接中拼凑出一些类似的符号。
只是为了完整(!)来自 Microsoft 支持的 Visual Basic 匈牙利对象表示法怎么样。