5

我正在开发一个使用系统匈牙利符号的遗留 COM C++ 项目。因为它是对遗留代码的维护,所以约定是以它编写的原始样式进行编码——我们的新代码不是这样编码的。所以我对改变那个标准或讨论我们过去的罪不感兴趣=)

是否有用于系统匈牙利符号的在线备忘单?

到目前为止,我能找到的最好的是一个 pre stack-overflow 讨论帖,但它并没有我过去需要的一切。有人有其他链接吗?

(制作这个社区维基,希望它成为一个自我填充的列表)

4

4 回答 4

4

这是'Systems Hungarian'的一个,根据我的经验,它是更常用(并且不太有用):

但这是多么普遍,我不知道。

Hungarian Notation 的另一种形式是“Apps Hungarian”,这显然是 Simonyi 的初衷(变量的使用是编码而不是类型)。有关详细信息,请参阅http://en.wikipedia.org/wiki/Hungarian_notation

于 2009-12-04T18:01:17.387 回答
4

如果这是用于遗留 COM 项目,您可能需要遵循Microsoft 的匈牙利符号规范,该规范在 MSDN 上进行了记录。

请注意,这是Apps Hungarian,即“好”的 Hungarian NotationSystems Hungarian 是“坏”类型,其中名称以编译器类型为前缀,例如ifor int.

MSDN 文章中的表格

表 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(在堆中)。
于 2009-12-04T18:05:59.903 回答
1

因为这是一个遗留项目,所以您的软件部门经理应该拥有原始程序员使用的任何版本的 Hungarian Notation 的样式指南副本。(我假设最初的程序员早就逃到了更开明的工作场所。)

你真的应该重新考虑你对匈牙利符号的使用。它最初是 C 中缺乏强类型(和编译器类型检查)的补丁。现代编译器强制类型正确性,使匈牙利符号充其量是多余的,否则是错误的。

于 2009-12-04T18:07:19.483 回答
1

似乎没有任何一种详尽的资源可用于查找 Hungarian Notation 前缀,可能是因为其中很多内容因代码库而异。当然,那里有很多非常常用的。

我能找到的最好的清单在这里

其余的涵盖了常用的约定,例如这个条目

MSDN 关于匈牙利符号的实体在这里 和一些关于这个主题的短论文(可能相互重叠)在这里这里

您最好的选择是查看变量的使用方式,并且(可能)帮助您弄清楚前缀的定义(尽管在实践中,命名很少反映变量的使用,遗憾的是)。

您也许可以从这些不同的链接中拼凑出一些类似的符号。

只是为了完整(!)来自 Microsoft 支持的 Visual Basic 匈牙利对象表示法怎么样。

于 2009-12-04T18:12:59.350 回答