以C开头的类名

Use*_*er1 10 c++ mfc hungarian-notation visual-c++

MFC具有以C开头的所有类名.例如,CFile和CGdiObject.有没有人看过它在别处使用过?是否有Microsoft的官方命名约定指南推荐此样式?这个想法是源于MFC还是其他项目?

Ear*_*rlz 17

这是邪恶的.除了抽象的东西之外,不要使用匈牙利表示法.

例如,btnSubmit可以描述一个名为Submit的按钮(它可以附带lblSubmit按钮旁边的标签)

但类似于CMyClassClass和uiCount无符号整数命名计数的东西对程序员没有帮助,只会导致额外的浪费.

  • 好的匈牙利符号可以有一些模糊的方便用途,例如DIY污点检查.例如,您可以使用Apps匈牙利语来划分"安全"(通常是已清理和/或转义)字符串和"不安全"字符串之间的边界:`uName`是一个未经检查的名称,来自用户输入,`sName`是安全的name,`uGetName`返回一个未经检查的字符串,`sGetName`返回一个安全字符串.`char*sEscape(char*uName)`清洗一个字符串.方便的部分是*你永远不会将名为`u`的变量传递给一个名为`s`的参数的函数.当然,并不总是值得付出努力. (8认同)
  • @Habi:在这种情况下,您可能更愿意收听编译器警告.此外,也许使用更具描述性的变量名称 - 通用x坐标应该是无符号的原因是什么? (6认同)
  • @Habi:当`uiCount`的类型从`unsigned int`变为`unsigned long`,`signed int`或`double`时会发生什么?根据匈牙利表示法,变量必须重命名,*在任何地方使用*.根据验证,必须测试任何修改的功能或方法.看起来像是完整回归测试的开始.:-( (4认同)

Ste*_*sop 15

在Symbian C++中使用了类似的东西,其惯例是:

T类是"值",例如TChar,TInt32,TDes

R类是内核(或其他)资源的句柄,例如RFile,RSocket

M类是mixins,其包括接口(被解释为没有函数实现的mixins).指南是多重继承最多应包含1个非M类.

C类几乎是其他所有东西,并且来自CBase,它有一些东西可以帮助处理资源.

HBufC主要用于在Symbian论坛上生成混乱的帖子,并且拥有自己的前缀只是一个开始.H代表"嗯?",或者可能是"Haw,haw!你没有STL!" ;-)

这与Apps Hungarian Notation而不是系统匈牙利表示法的精神非常接近.前缀告诉你一些关于你可以在文档中查找的类,但你不会知道.在编程中命名任何东西的重点是提供这样的提示和提醒,否则你只需要调用你的类"Class001","Class002"等.

系统匈牙利语只是告诉你一个变量的类型,IMO没什么好兴奋的,特别是在像C++这样的语言中,类型往往不断重复或者完全被模板参数隐藏.在命名类型时,它的模拟是用I命名所有接口的Java实践.再一次,我对此并不感到兴奋(标准Java库也没有),但是如果你要为每个类定义一个接口,除了在非测试情况下实际用于多态的接口之外,还需要一些方法来区分这两者.


Mik*_*ney 13

这是一种旧的C++编码风格,MFC可能是最后使用它的东西之一.

它通常只是C++的惯例(也许还有其他几种语言),因此随着语言通过COM和.NET变得更具互操作性,它开始失宠.

你仍然会看到它的表兄,接口的"I"前缀,经常.我总是觉得有趣的是"I"在"C"死亡时幸存下来,但这可能是因为接口在COM互操作性中被大量使用.

  • 我认为清楚地传达这样一个事实是很重要的,即一个类应该是一个接口,前缀为"I"可能仍然被广泛使用,因为它更短更清晰,然后说一个`Base`后缀. (7认同)
  • 它可能没有死,因为它解决了少数(接口,泛型类型参数)和最常见(类)没有得到额外的混乱. (2认同)

Nem*_*vic 6

我记得Borland的编译器正在使用以'T'开头的类名的库.可能是"类型":)


mwi*_*ahl 5

我不能回答你所有的问题,但据我所知,这只是为了将 MFC 类与其他类区分开来——一种匈牙利表示法。

有趣的是,它显然不仅在 MS 外部存在争议,而且在内部也存在争议。

  • 是的,他们知道什么 - .NET 指南(例如)拒绝为类添加前缀的想法,但对接口添加前缀很好。有时争论是没有充分理由的。 (2认同)

Fad*_*man 5

多年前,命名约定对于帮助识别类,甚至类的分组类型至关重要.不要忘记当时没有名称空间,也没有/有限的intellisense可用.C是匈牙利符号的一种形式,但肯定受到MFC的欢迎.Borland和Delphi使用T - 作为Type的前缀


Dr.*_*son 5

虽然MFC和许多为Windows编写的软件使用类的"C"约定,但通常在为UNIX平台编写的软件中找不到后者.我认为这是Visual C++非常强烈鼓励的习惯.我记得Visual C++ 6.0会为使用类向导创建的任何类添加前缀"C".