2010-02-18 205 views
7

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

+1

我所知道的是,我很高兴他们用.NET命名约定修复了它:) – 2010-02-19 01:28:35

回答

12

东西有点类似在Symbian C++的,其中该惯例是使用其他)资源,例如的RFile,方法RSocket

中号类的混入,其包括接口(解释为无功能的实现混入)。指导原则是多重继承最多只涉及1个非M类。

C类几乎是其他所有的东西,并从CBase派生,它有一些东西在帮助资源处理。

HBufC的存在主要是为了产生基于Symbian论坛困惑的帖子,并具有其自己的前缀仅仅是个开始。 H代表“呃?”,或者可能是“唧唧!你没有STL!” ;-)

这在本质上应用匈牙利命名法,而不是系统匈牙利命名法接近。前缀告诉你一些关于你可以在文档中查找的类,但是你不知道的其他类。 编程命名什么的全部要点是提供这样的暗示和提醒,否则,你只需要调用你的类“Class001”,“Class002”,等等。

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

0

我们使用它在工作,像许多其他的命名约定

很多我的意思是下类,P为指针,M_为会员,为S_静态成员,正整数......不是很多文件

3

我无法回答你所有的问题,但据我所知,这只是区分MFC类和其他类 - 匈牙利符号的一种形式。

有趣的是,它显然是有争议的不只是外面的MS,但inside as well

+2

是的,他们知道什么 - 例如,.NET指导方针拒绝为类加前缀的想法,但是很好前缀接口。有时候争议是没有理由的。 – gbjbaanb 2010-02-18 21:58:45

9

这是一种旧的C++编码风格,MFC可能是使用它的最后一件事情之一。

它通常只是C++(也可能是其他几种语言)的惯例,因此它开始失宠,因为语言通过COM和.NET进一步互操作。

你仍然可以看到它的表弟,接口的“I”前缀,经常。我一直觉得有趣的是,当“C”死的时候“我”幸存下来了,但那可能是因为接口在COM互操作性中被大量使用。

+7

我认为清楚地表达一个类应该是一个接口并使用'I'作为前缀的事实的重要性可能仍然在广泛使用,因为它更短,更清晰,然后称为“Base”后缀。 – 2010-02-18 22:00:42

+2

它可能没有死,因为它涉及少数(接口,泛型类型参数),最常见的(类)不会得到额外的混乱。 – 2010-02-18 22:05:42

+0

那么还有谁用过它?只有微软? – User1 2010-02-18 23:13:24

16

这是邪恶的。除了抽象的东西,不要使用匈牙利符号。

例如,btnSubmit是确定来形容一个名为提交按钮(这将有一个附带的lblSubmit的按钮旁边的标签)

但像CMyClass对于类和uiCount无符号整数东西命名计数不帮助程序员,并导致额外的浪费型打字。

Ť类是“值”,例如TCHAR,TInt32,TDES

ř类手柄内核(或:

+0

@Earlz:我不同意你对uiCount和额外输入的说法。如果我读了“if(uiXCoord <0)”这样的红灯开始闪烁,但是如果我读到“if(xCoord <0)”而xCoord是一个unsigend int,则不会。而且输入一些额外的字符永远不会成为软件没有及时准备好的原因,输入代码是软件开发人员遇到的最小问题。知道输入什么更重要。 – Habi 2010-02-18 22:30:02

+6

@Habi:在这种情况下,您可能更想听编译器警告。另外,也许使用更多的描述性变量名称 - 通用x坐标应该是无符号的原因是什么? – UncleBens 2010-02-18 22:40:47

+3

@Habi:当uiCount类型从'unsigned int'改为'unsigned long','signed int'或'double'时,会发生什么?根据匈牙利语法,变量必须重新命名,*无处不在*它被使用。根据验证,任何修改的功能或方法都必须经过测试。看起来像是完全回归测试的开始。 :-( – 2010-02-18 23:24:01

4

年前的命名约定对帮助识别班级甚至班级分组至关重要。不要忘了当时没有命名空间,也没有/有限的智能感知可用。 C是匈牙利符号的一种形式,但肯定会被MFC使用。 Borland和Delphi使用T - 作为前缀类型

+0

基于20年前MS编译器支持的另一种MFC设计选择,而不是在现代C++中如何实现。 – 2010-02-19 11:07:00

4

我记得Borland编译器正在使用类名以'T'开头的库。可能为“type”:)

+0

我总是认为是因为Turbo Pascal/Turbo C中的T ...编码自恋:) – Avio 2014-10-15 15:55:40

3

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

0

变量的这种约定对像Fortran这样的语言很有用,因为在使用它们之前不需要声明变量的类型。我似乎记得,名称以“i”或“j”开头的变量默认为整数,变量名称以“r”开头,其他字母默认为实数(浮点)值。

人们在需要声明变量或类定义的语言中使用类似语言可能仅仅是某人误解了Fortran等语言中旧代码惯例的一个遗留问题。

0

在编写使用Qt库的应用程序时,我们使用一个命名约定来区分直接或间接从QObject派生的类与不从类派生的类。这很有用,因为您可以从类名称中了解它是否支持来自QObject的信号/插槽,属性以及所有其他好东西。