kir*_*off -5 c++ compiler-construction algorithm object parentheses
我读了一段写成的代码
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;
}
Run Code Online (Sandbox Code Playgroud)
而预期的括号设置将是
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;
}
}
Run Code Online (Sandbox Code Playgroud)
第一个版本是否正确?这里的括号是为了更好的可行性还是编译器必须理解代码的逻辑?
首先,你所说的不是括号,它的花括号.
for (kf=0; kf<nf; kf++)
if (EPS_MOCK[kf] == 1)
for (i=0; i<nptsx; i++)
for (j=0; j<nptsz; j++)
Run Code Online (Sandbox Code Playgroud)
编译器肯定会支持这种类型的语法,但是为了使你的代码更具可读性,遵循简单的规则,如果你不处理更多的那一行,不要使用花括号,否则使用花括号将是令人困惑的.
一个if
或for
适用于紧随其后的单一陈述.这可以是任何一个语句,但更常见的是用{}
括号括起来的块.大括号将一组语句转换为单个语句.
尽管可以使用任何单个语句,但在包括我自己在内的许多程序员的意见中,通常使用括号括起的块通常更清楚,即使该块仅包含一个语句.