我读了一段代码为
的代码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 :(得分:5)
首先,你所说的不是括号,它的花括号。
for (kf=0; kf<nf; kf++)
if (EPS_MOCK[kf] == 1)
for (i=0; i<nptsx; i++)
for (j=0; j<nptsz; j++)
编译器肯定会支持这种类型的语法,但是为了使你的代码更具可读性,遵循简单的规则,如果你不处理更多的那一行,不要使用花括号,否则会使用卷曲括号。
答案 1 :(得分:5)
if
或for
适用于紧随其后的单个语句。这可以是任何一个语句,但更常见的是用{}
括号括起来的块。大括号将一组语句转换为单个语句。
虽然可以使用任何单个语句,但在包括我自己在内的许多程序员的意见中,总是使用括号括起来的块通常更清楚,即使该块只包含一个语句。