C 你认为这种糟糕的编码风格吗?

C 你认为这种糟糕的编码风格吗?,c,coding-style,C,Coding Style,我今天看到了这个代码: if(++counter == 10) { //Do Something foo(); } 我认为这是一种糟糕的风格,但是,执行编译器是否也依赖于它呢?假设在我们到达这一行之前,计数器被设置为8,它将增加它,然后比较10到8,之前的值,或者比较10到9,计数器增加后的值 你怎么看?这是惯例吗?糟糕的风格 此代码的行为与编译器无关(除了可能的溢出行为)。它是否是一种好的风格是个人喜好的问题。我通常避免对条件句进行修改,但有时它会很有用,甚至很优雅 此代码保证将

我今天看到了这个代码:

 if(++counter == 10)
{

 //Do Something
 foo();

 }
我认为这是一种糟糕的风格,但是,执行编译器是否也依赖于它呢?假设在我们到达这一行之前,计数器被设置为8,它将增加它,然后比较10到8,之前的值,或者比较10到9,计数器增加后的值


你怎么看?这是惯例吗?糟糕的风格

此代码的行为与编译器无关(除了可能的溢出行为)。它是否是一种好的风格是个人喜好的问题。我通常避免对条件句进行修改,但有时它会很有用,甚至很优雅

此代码保证将新值与10进行比较(即,在您的示例中,9与10进行比较)。从形式上讲,说比较发生在
计数器
递增之后是不正确的。这里没有“之前”或“之后”。即使在将新值实际放入
计数器之前,也可以对其进行预计算并与10进行比较

换句话说,
++计数器==10
的计算可以按如下方式进行

counter = counter + 1
result = (counter == 10)
或作为


请注意,在第一种情况下,
计数器
在比较之前递增,而在第二种情况下,它在比较之后递增。这两种情况都是有效的,在实践中是完全可能的。这两种情况都会产生语言规范所要求的相同结果。

此代码的行为与编译器无关(除了可能的溢出行为)。它是否是一种好的风格是个人喜好的问题。我通常避免对条件句进行修改,但有时它会很有用,甚至很优雅

此代码保证将新值与10进行比较(即,在您的示例中,9与10进行比较)。从形式上讲,说比较发生在
计数器
递增之后是不正确的。这里没有“之前”或“之后”。即使在将新值实际放入
计数器之前,也可以对其进行预计算并与10进行比较

换句话说,
++计数器==10
的计算可以按如下方式进行

counter = counter + 1
result = (counter == 10)
或作为


请注意,在第一种情况下,
计数器
在比较之前递增,而在第二种情况下,它在比较之后递增。这两种情况都是有效的,在实践中是完全可能的。这两种情况都会产生语言规范所要求的相同结果。

运算符优先级始终会导致增量在比较之前发生。如果您希望使其非常明确,可以使用括号,但我不认为这是糟糕的编码风格。

运算符优先级将始终导致增量在比较之前发生。如果您想让这一点非常明确,可以使用括号,但我不认为这是一种糟糕的编码风格。

就我个人而言,我总是将其分为两条语句

counter++;
if (counter == 10)
    DoSomething();

这样你就不需要考虑事情发生的顺序,也就没有混乱的余地了。它对生成的代码没有任何影响,因此,可读性和可维护性问题始终是首要问题。

我个人总是将其分为两条语句

counter++;
if (counter == 10)
    DoSomething();

这样你就不需要考虑事情发生的顺序,也就没有混乱的余地了。它对生成的代码没有任何影响,在这种情况下,可读性和可维护性问题始终是首要问题。

语言标准对它进行了很好的定义,它是否是一种糟糕的样式是个人喜好的问题,也是上下文的问题。我有一个使用类似条件的函数,我认为它看起来和工作起来都很好,我认为当从条件中取出增量时,它的可读性会降低

const char *GetStat(int statId)
{
  int id = 0;
  if (statId==id++)
  {
    return "Buffers";
  }
  else if (statId==id++)
  {
    return "VBuffers";
  }
#ifndef _XBOX
  else if (statId==id++)
  {
    return "Reset factor";
  }
#endif
  else if (statId==id++)
  {
    return "CB Mem";
  }
  return "";
}

注意:这里的增量实际上根本没有“执行”,一个好的编译器会将++done on id变量消除为常量。

语言标准对其进行了很好的定义,它是否是一种糟糕的样式取决于个人偏好,也取决于上下文。我有一个使用类似条件的函数,我认为它看起来和工作起来都很好,我认为当从条件中取出增量时,它的可读性会降低

const char *GetStat(int statId)
{
  int id = 0;
  if (statId==id++)
  {
    return "Buffers";
  }
  else if (statId==id++)
  {
    return "VBuffers";
  }
#ifndef _XBOX
  else if (statId==id++)
  {
    return "Reset factor";
  }
#endif
  else if (statId==id++)
  {
    return "CB Mem";
  }
  return "";
}

注意:这里的增量实际上根本没有“执行”,一个好的编译器会将++done on id变量消除为常量。

这是一种不常见且糟糕的样式,但其含义是精确的,不依赖于编译器。这是一种不常见且糟糕的样式,但它的含义是精确的,不依赖于编译器。我不知道它是否是一种糟糕的编码风格,但它有点令人困惑。我的意思是,当你第一次看到它时,你会在心里问自己,
++
是否有问题。我不知道它是否是一种糟糕的编码风格,但它有点让人困惑。我的意思是,当你第一次看到它时,你会在心里问自己,
++
是否有问题。