C ++代码必需的括号

时间:2014-06-08 07:19:30

标签: c++ algorithm object compiler-construction 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;
    }

而预期的括号设置将是

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;
    }
}

第一个版本是否正确?这里的括号是为了更好的可靠性还是编译器必须理解代码的逻辑?

2 个答案:

答案 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)

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

虽然可以使用任何单个语句,但在包括我自己在内的许多程序员的意见中,总是使用括号括起来的块通常更清楚,即使该块只包含一个语句。