2014-06-08 87 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:恩,我的個人資料給我留下了深刻的印象!我感謝您仍然會貢獻並分享您的知識。尊敬的女士! –