C++代码必需的括号

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)

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

Pra*_*ari 5

首先,你所说的不是括号,它的花括号.

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()`语句也是如此. (6认同)

Pat*_*han 5

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

尽管可以使用任何单个语句,但在包括我自己在内的许多程序员的意见中,通常使用括号括起的块通常更清楚,即使该块仅包含一个语句.