分号终止if语句是否是良好的编码实践?

时间:2014-03-01 20:19:51

标签: c++ coding-style

我正在循环i,j,k和n。除了k == jn == k之外,我想要执行一条语句。

如果我使用这样的代码:

if (k != j && n != i)
      //statement

该声明不会在两种情况下执行:

  1. 当n == j时k!= j。
  2. 当k == j时n!= j。 (这不是我需要的
  3. 所以我使用了这样的代码:

    if (k == j && n == i)
        ;else
        //statement
    

    通过此代码,语句将成功执行,但k == j && n == i

    除外

    以分号结尾的if语句是否是用C ++编写代码的好方法?

3 个答案:

答案 0 :(得分:7)

不,它不是一种好的编码方式。通常的方法是使用!来反转逻辑:

if(!(k==j && n==i))
    //statement

或者您可以使用De Morgan's Law来反转逻辑:

if(k!=j || n!=i)
    //statement

答案 1 :(得分:5)

你的问题是你错误地否定了这种情况。你应该这样做:

if (!(k==j && n==i))
  // statement

或者,根据德摩根的法律:

if (k != j || n != i)
  // statement

答案 2 :(得分:1)

  

...是一种很好的编码方式吗?

没有

你应该写

if (!(k == j && n == 1))
{
    //statement
}

ifforwhile之后添加分号几乎总是错误的。这是非常意外的,使得阅读代码非常困难。