命名临时局部变量的约定

时间:2009-09-01 11:50:35

标签: c++ c naming-conventions

在本地函数中命名临时变量的标准方法是什么?让我举一个例子说明我在做什么。我得到一个结构的指针,所以我想在本地存储其成员之一,以避免被引用,然后任何修改分配回指针。

更具体:

struct  Foo
{
  double m_d;

};


void function (Foo* f)
{
   double tmp=f->m_d;

       /***Other stuff***/

     f->m_d=tmp;
}

我不喜欢 tmp 。如果我在一个函数中有很多它们,它们只会增加混乱。

由于

11 个答案:

答案 0 :(得分:20)

对任何其他变量做同样的事情:给它一个简洁,富有表现力的名字。如何使用您正在复制的成员变量的原始名称(可能不使用m_)?这是在两者之间建立连接的最佳方式。

答案 1 :(得分:5)

Linus Torvalds - Linux Kernel coding style from Linus Torvalds

  

LOCAL变量名称应该简短,并且要点。如果你有   一些随机整数循环计数器,它应该被称为“i”。   如果没有机会,将其称为“loop_counter”是非生产性的   被误解了。同样,“tmp”可以是任何类型的   用于保存临时值的变量。

     

如果你害怕混淆你的本地变量名,你就会有另一个   问题,这被称为功能 - 生长 - 激素 - 失衡综合症。

答案 2 :(得分:3)

您在tmp变量中存储了哪些?如果它不是太长,请将该描述用作变量名称。对于三行函数(swap ...)tmp就好了。几乎所有其他内容都是描述性的。

答案 3 :(得分:2)

我会将其称为saved_m_d,或简称为m_d(但之后,我还会给m_d一个不同的名称。)

答案 4 :(得分:2)

为了您的信息:Code Complete有一章用变量命名。

在您的示例中,一个问题是Foo中的成员变量开头时描述性不强,这使得很难找到占位符局部变量的有用名称。

例如,我会这样做:

struct Foo
{
  double mValue; // I don't use underscores here
                 // however, you can do as you please.
                 // Also 'mValue' is just for the sake of example,
                 // you should find a more descriptive name :D

};


void function (Foo* f)
{
   double oldValue = f->mValue;

       /***Other stuff***/

   f->mValue = oldValue;
}

答案 5 :(得分:0)

我使用m_作为成员变量,并且不对局部变量使用任何前缀。所以在这种情况下,它将是double d;

答案 6 :(得分:0)

如果无法想到更具描述性的,我们在工作中实践的惯例是使用名称“my [object]”来代替更好的名称。最重要的是,使其具有描述性,以便您的代码更易于理解和维护。自我记录代码是这样做的另一个好处。

答案 7 :(得分:0)

有一些'经常使用的短号',比如i,j和m和n for循环,但是如果你在一个函数中有很多循环,那么最好有更明确的东西。

对于大多数情况,我会使用规则来获得良好的变量命名。如果您正在使用C ++,我认为的问题是“我将如何区分成员变量”而不是局部变量。

答案 8 :(得分:0)

一般来说,我只使用描述性名称。如果它是一个属性,我将第一个字母设为大写并应用驼峰套管。对于局部变量,我将所有内容保持为小写。对于存储属性名称的变量,我使用带有下划线的小写作为前缀。我避免使用任何简写符号,通常也不需要速记。代码完成对于长名称非常有用。 : - )

如果你需要知道某些东西是类还是变量,那么几个IDE将使用Code Highlighting。因此,我在类名和属性名之间没有太多区别。 (除了在Delphi中,我仍然在每个类前面添加一个T,因为这是Delphi中的标准约定。)

不,我不使用tmp。我把它写成临时的,以防万一我不能想出一个不同的名字。或者在索引号的情况下I,J,K,L或M. (不,只有那5个字母,总是大写。)在你的情况下,我会使用“oldvalue”或“oldm_d”代替。

答案 9 :(得分:0)

我会说尝试找到一些最具体描述变量用途的东西,同时将其与该函数中使用的任何其他变量区分开来。

因此,假设“d”实际上代表了一些已经描述了变量含义的名称,那么我会选择cached_dcopied_d之类的名称。这样,您可以拥有更多(cached_acached_bcached_c等),而不会产生混淆。

然后我会进一步建议添加一条评论,明确说明你制作本地副本的原因。也许是这样的事情:

double cached_d = f->m_d;   // cached to avoid further de-referencing

这样,将来查看该代码的任何人都应该没有问题,弄清楚你在做什么以及为什么。

答案 10 :(得分:0)

我的建议是简单地合并原始变量名称或其他标识符,以提醒读​​者其意图功能。

struct  Foo
{
  double m_d;

};


void function (Foo* f)
{
   double m_d_tmp = f->m_d;

       /***Other stuff***/

     f->m_d = m_d_tmp;
}