【发布时间】:2012-01-19 22:56:26
【问题描述】:
我正在使用 Visual Studio 2010 开发一个使用 Win32/MFC 框架和 C++ 编程语言的应用程序。
我的问题是变量、函数名、类名等需要使用哪种命名约定。我听说微软建议使用“匈牙利符号”命名约定。
您能告诉我使用哪种标准吗?
【问题讨论】:
标签: c++ visual-studio-2010 winapi mfc
我正在使用 Visual Studio 2010 开发一个使用 Win32/MFC 框架和 C++ 编程语言的应用程序。
我的问题是变量、函数名、类名等需要使用哪种命名约定。我听说微软建议使用“匈牙利符号”命名约定。
您能告诉我使用哪种标准吗?
【问题讨论】:
标签: c++ visual-studio-2010 winapi mfc
您可能确实有充分的理由希望其他学习过 MFC 的程序员看起来熟悉您的代码。如果是这样,那么您可以效仿MFC Samples and Tutorials 的约定,并按照他们的做法...
但是 MFC 是一个很早就出现的遗留库,而且时代已经改变。 Microsoft 的样式指南现在明确规定 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 世界中,请选择 .NET 和 C#。这将是一个进步,您不会被 MFC 废弃软件卡住。
【讨论】:
哦,孩子。这几乎就像问人们你应该遵循什么宗教一样。至少你没有问你应该使用什么文本编辑器......
我的 2c:做对你有用的事。还要考虑您是否只是为自己编码,或者您是否希望其他人阅读或使用您编写的代码,以及您是从头开始项目,还是在现有代码的基础上构建。
命名约定其实并不重要,只要:
您选择有意义的名称并描述变量/函数/其他的用途。 (这里的关键问题是目的;让编译器处理类型。)
在应用约定的任何其他方面(缩进、大小写、前缀、下划线的使用等)方面保持一致。
一般来说,如果代码写得好,约定的细节并不重要。
至于匈牙利语和前缀:Win32 和 C++ 仍然在一定程度上使用它们,而 .Net 和 C# 则没有。
我强烈建议您阅读此long but very insightful article by Joel Spolsky,它详尽地概述了前缀约定如何以及为什么实际上非常有用(如果操作正确,以及它只是无意义的苦差事)。
这些天来,我不关心大多数匈牙利前缀,除了少数(请注意,这些只是我个人的喜好,多年来我发现它们很有用):
对我来说,前两个有助于使代码更具可读性;这里的第三个示例有助于提高可读性,但也可以是确保正确性的有用技术 - 有点像助记符,如果你愿意的话。
【讨论】:
_ 开头的名字,然后是小写字母由 C++ 保留用于编译器的私有实现。如果要使用下划线,则它们应位于成员名称的末尾。正确的 C++(例如:通过引用 GetWindowText 而不是内存缓冲区和长度来传递 CString)通常可以减轻对 CCH/CB 的担忧……因此,应该审查您必须担心的情况以进行适当的抽象使用。以p 开头会让你的IDE 看起来无法提示你,所以它有点过时了。
_ 的好点。对我来说,p 前缀部分是“文化的”;它在几乎所有 Win32/COM 代码/示例/文章中无处不在 - 以至于没有它,代码可能看起来像 C++,但看起来不像“Win32/COM”并且感觉不对。是的,它已经过时了;但 Win32/COM 也是如此 - 所以它的使用日期恰当:)