2014-06-08 58 views
-5

我读写成C++代码强制括号

for (kf=0; kf<nf; kf++) 
    if (EPS_MOCK[kf] == 1) 
     for (i=0; i<nptsx; i++) 
      for (j=0; j<nptsz; j++) 
      { 
       x0[iv] = log(inv_Controls->epsilonBed.GetElem(j,i,kf)); 
       iv = iv+1; 
      } 
for (kf=0; kf<nf; kf++) 
    if (inv_num_packman[kf] == -1) 
     for (i=0; i<nzx; i++) 
     { 
      x0[iv] = log(inv_Controls->num_packman[i+kf*nzx]); 
      iv = iv+1; 
     } 
    else if (inv_num_packman[kf] == 1) 
    { 
     x0[iv] = log(inv_Controls->num_packman[kf*nzx]); 
     iv = iv+1; 
    } 

;而将括号中的设置将

for (kf=0; kf<nf; kf++){ 
    if (EPS_MOCK[kf] == 1){ 
     for (i=0; i<nptsx; i++){ 
      for (j=0; j<nptsz; j++) 
      { 
       x0[iv] = log(inv_Controls->epsilonBed.GetElem(j,i,kf)); 
       iv = iv+1; 
      } 
     } 
    } 
} 
for (kf=0; kf<nf; kf++){ 
    if (inv_num_packman[kf] == -1){ 
     for (i=0; i<nzx; i++){} 
     { 
      x0[iv] = log(inv_Controls->num_packman[i+kf*nzx]); 
      iv = iv+1; 
     } 
    } 
    else if (inv_num_packman[kf] == 1) 
    { 
     x0[iv] = log(inv_Controls->num_packman[kf*nzx]); 
     iv = iv+1; 
    } 
} 

是第一个版本正确的一段代码?这里的括号只是为了更好的可读性还是强制编译器理解代码的逻辑?

+0

真的,你应该瞄准尽可能写出最可读的代码。第一种形式等同于第二种形式对于许多人来说可读性较差。 – shuttle87

回答

5

首先,你所说的不是括号,它的大括号。

for (kf=0; kf<nf; kf++) 
    if (EPS_MOCK[kf] == 1) 
     for (i=0; i<nptsx; i++) 
      for (j=0; j<nptsz; j++) 

编译器肯定会支持这种类型的语法,但它会引起混乱,使你的代码更易读,遵循简单的规则,如果你不处理一个以上的线,不使用大括号,否则使用大括号。

+6

_'如果你没有处理更多的一条线,不要使用大括号'_我不同意这个建议。你应该总是使用一个块,对于'if()'语句也是如此。 –

+0

这也可能是正确的。但我认为这取决于编码的风格。 –

+0

@πάνταῥεῖ你为什么只在一条线上使用块建议? – octoback

5

iffor适用于单个紧随其后的语句。这可以是任何一种说法,但更常见的是括在{}括号中的块。大括号将一组语句转换为单个语句。

尽管可以使用任何单个语句,但在许多程序员(包括我自己)的观点中,即使块仅包含一个语句,始终使用大括号封闭块通常也更清楚。

+0

OT:恩,我的个人资料给我留下了深刻的印象!我感谢您仍然会贡献并分享您的知识。尊敬的女士! –