【问题标题】:C++ Naming variables [duplicate]C ++命名变量[重复]
【发布时间】:2013-06-05 09:13:25
【问题描述】:

在我见过的许多代码示例中,它们以特定的方式命名变量。

例如

class obj
{
    int mInt;
}

bool gTexture;

问题。

  1. 他们为什么要这样命名,而且肯定还有更多的方式,我想...
  2. 您如何命名它们,为什么?

谢谢

【问题讨论】:

  • 这里的mg 前缀可能代表member 和global。我工作的编码标准说我们使用d_ 表示数据成员,s_ 表示静态成员。原始指针有一个_p 后缀。
  • 是的,我工作的编码标准规定,我们不使用前缀、后缀或下划线。那又怎样?您应该选择您的公司/团队使用的命名标准或遵循一些公开的准则,例如 Microsoft 的准则(这将使公司以外的人更容易阅读您的代码)。
  • 正如blue指出的那样,这个问题已经被做死了,这是一场典型的圣战。
  • 请注意,如果遵循其他更重要的约定,许多这些命名约定将无关紧要。比如不使用全局变量,不写几行以上的函数,函数中的参数列表很小,遵循单一职责的原则。

标签: c++ variables naming


【解决方案1】:

mInt中的m代表int是成员变量,gTexture中的g代表全局变量。

这来自匈牙利符号。

http://en.wikipedia.org/wiki/Hungarian_notation

【讨论】:

    【解决方案2】:

    命名是个人的。为了回答您的第二个问题,我不使用这样的命名约定,而是在类属性后面加上下划线。

    公司通常有命名约定。您可能想看看 Google 的命名约定:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#General_Naming_Rules

    【讨论】:

    • Now_I_have_at_least_one_reason_not_to_want_to_work_at_Google_
    【解决方案3】:

    您给出的示例使用“m”表示成员变量,使用“g”表示全局变量。这是某些人使用的东西。便于在成员函数中查看(当函数比几行大一点时,所以不能只在函数顶部查看参数名称、局部变量等) ),什么是“局部变量”以及影响“函数外部”的因素。

    如果您为公司、学校或开源项目工作,很可能有一个编码标准来说明命名约定是什么。如果这是您的个人项目,请决定您认为适合您的项目。关键是它是一致的。如果不是所有成员变量都以“m”开头,并且并非所有全局变量都以“g”开头,那么在某些地方使用它是毫无意义的——只会给人一种错误的安全感。

    【讨论】:

      【解决方案4】:

      你不必遵循特定的符号,但如果你这样做会很酷。

      一切都与代码的清晰度有关,没有任何大写字母的变量确实比具有良好合成器的变量更难理解。 (在第一个视图中,当您快速查看部分代码时)

      对于清晰的代码,我可以推荐谷歌的 C++ 代码规范:http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml

      【讨论】:

        【解决方案5】:

        他们为什么要这样命名,而且肯定还有更多的方式,我想...

        一般很难看懂别人的代码;如果时间够长,也很难理解自己的代码。

        因此,软件团队制定了约定,以确保他们的团队编写的代码与他们自己编写的代码尽可能相似。

        这指的是结构化代码、使用的元素(接口、类、命名空间等)、命名函数和变量、记录的内容和格式等等。

        如果执行得当且始终如一,可以显着缩短团队内的代码维护时间。

        有一些已知的约定,主要来自用于实现大型代码库和使用的库的约定。

        Java 倾向于使用camelCaseNotation(以小写字母开头,不使用下划线,每个单词大写)。

        MFC 使用匈牙利表示法,其中变量名称以几个字母为前缀,指定数据的范围和类型(m_XXX 表示成员变量,g_XXX 表示全局变量,s_XXX 表示静态变量等)。

        特别是匈牙利语的约定可以正确(通过使用前缀表示语义信息)或严重错误(通过使用前缀表示句法信息)。

        (MFC 搞错了。)

        ANSI C++(和 std:: 命名空间)倾向于使用 small_letters_with_underscores 作为标识符。

        还有其他的,大多数软件团队都制定了一个约定,它是其中一个大约定的变体。

        你如何命名它们,为什么?

        这些天来,我遵循 ANSI C++ 约定,主要是因为我希望我的代码与库代码无缝集成。我也认为它看起来简单明了(这是非常主观的)。

        我很少使用单字母变量(仅在含义明确时)并且更喜欢完整的单词,而不是缩短的单词。

        例子:

        索引:int index, line_index, col_index;

        类名:class recordset; class task_details;

        【讨论】:

          【解决方案6】:
          1. http://en.wikipedia.org/wiki/Hungarian_notation

          2. 不是一个真正的问题。每个人都可以随心所欲地命名它们。不过,您可以阅读这些指南:http://msdn.microsoft.com/en-us/library/vstudio/ms229045(v=vs.100).aspx

          【讨论】:

          • 然而,这并没有显示“匈牙利符号”的示例。
          • @MatsPetersson 你真的读过我链接的文章吗? g_nWheels : member of a global namespace, integer; m_nWheels : member of a structure/class, integer
          • @MatsPetersson 维基百科文章特别提到 m 作为 C++ 中使用的匈牙利符号的扩展形式。 +1 撤消反对票,即使“不要使用匈牙利符号”对我来说太不灵活了。
          • @RickYorgason 我在您发表评论之前删除了它:) 微软建议不要使用它,私下我不喜欢它,但这并不意味着它不应该被所有人使用.我链接到 MS 命名约定作为通用命名规则集的示例,它可能是全局命名约定的基础(一个,每个人都应该遵循)。实际上,我在网上看到的 95% 的 C# 代码通常都遵循它们 :)
          • 好的,所以我对匈牙利符号的理解是,变量的前缀是例如 b 用于布尔值,in 用于整数/计数等。然后添加到那个, mg 用于成员或全局变量。但我确实看到过简单地为成员和全局变量(有时是函数参数)命名约定的例子——我想有人可能会争辩说这是相同的原则,但很明显,除非你将成员变量更改为局部变量或类似的变量如果您只有 gm 作为前缀,则它的类型不需要更改名称。
          猜你喜欢
          • 2021-04-29
          • 1970-01-01
          • 2021-10-22
          • 2011-10-10
          • 1970-01-01
          • 1970-01-01
          • 2012-09-13
          • 1970-01-01
          • 2015-05-08
          相关资源
          最近更新 更多