Win32 / MFC与C ++的命名约定

时间:2011-12-14 05:31:45

标签: c++ visual-studio-2010 winapi mfc

我正在开发一个使用Win32 / MFC框架和使用Visual Studio 2010的C ++编程语言的应用程序。

我的问题是哪个命名约定需要用于变量,函数名,类名等。我听说Microsoft建议使用“匈牙利表示法”命名约定。

您能否告诉我使用哪种标准?

2 个答案:

答案 0 :(得分:8)

可能有一个很好的理由希望你的代码看起来熟悉已经学过MFC的其他程序员。如果是这样,那么你可以模仿MFC Samples and Tutorials的约定,并做他们做的事情......

但是MFC是一个很早就起源的遗留图书馆,时代已经发生了变化。微软的风格指南现在特别指出 NOT 使用匈牙利符号:

http://msdn.microsoft.com/en-us/library/ms229042.aspx

除此之外,不是盲目地遵循任何特定文件,而是评估每个单独的惯例可能更好。例如,当MFC示例生成类并具有成员变量时,它们将使用m_开始名称。 StackOverflow对此特定想法有疑问,您可以阅读有关替代方案的内容:

Why use prefixes on member variables in C++ classes

我更接近Qt的API样式指南,他们的大部分惯例都适用于我:

http://doc.qt.nokia.com/qq/qq13-apis.html

说到这,Qt是一个不错的C ++产品,不断发展和成熟。将MFC从水中吹出(完全)并且是跨平台的......

http://qt.nokia.com/products/developer-tools/

如果您想要锁定在Microsoft Universe中,请转到.NET和C#。这将是一个进步,你不会被MFC放弃软件困住。

答案 1 :(得分:2)

哦,小伙子。这几乎就像在问人们应该遵循什么样的宗教信仰。至少你没有问你应该使用什么文本编辑器......

我的2c:做对你有用的事情。还要考虑您是自己编写代码,还是希望其他人阅读或处理您编写的代码,以及是从头开始创建项目,还是构建现有代码。

命名约定确实无关紧要,只要:

  • 您选择有意义的名称并描述变量/ function / other的用途。 (这里的关键问题是目的;让编译器处理类型。)

  • 如何应用约定的任何其他方面(缩进,大小写,前缀,下划线的使用等)。

一般来说,如果代码编写得很好,那么约定的细节并不重要。

至于匈牙利语和前缀:Win32和C ++仍然使用它们,而.Net和C#则没有。

我强烈建议阅读这篇long but very insightful article by Joel Spolsky,这篇文章非常详细,概述了前缀约定如何以及为什么实际上非常有用,如果正确完成,以及它只是一个毫无意义的苦差事。

这些天,我不打扰大多数匈牙利语前缀,除了少数(注意这些只是我个人的偏好,它们是我发现多年来有用的):

  • p for pointers,因为在C ++中,与C#不同,知道何时处理引用vs对象以及我正在处理多少级别的间接是很有用的。
  • m_表示成员变量(有时_在C#​​中取决于现有代码;请参阅下面的HostileFork注释,将_作为C ++中的前缀。)
  • cch表示字符数,cb表示字节数。它在Win32中非常重要,不会让这些混乱;将字符数传递给memcpy或将字节数传递给GetWindowText,你就会遇到麻烦。这是前缀的使用,可以帮助您保持代码清晰,明显正确(或者不正确,视情况而定 - “啊,当然,我将cch传递给memcpy,这就是问题所在!”)。

对我来说,前两个有助于使代码更具可读性;这里的第三个例子有助于提高可读性,但也可以成为确保正确性的有用技术 - 如果你愿意的话,有点像助记符。