2017-11-23 13 views
-2

C++의 코딩 표준 중 하나는 "for 루프 블록 내에서 루프 변수를 변경하지 마십시오"입니다."for 루프 블록 내에서 루프 변수를 변경하지 마십시오"의 의미는 무엇입니까?

이 규칙을 따르는 모든 이점은 무엇입니까?

나는 긴 문장을 최대 문자 제한 (21 문자)을 구분 기호로 사용하여 작은 문장으로 분할하려고합니다.

tokens (A std::vector)는 모든 문자열 이루어져있다 : for 루프 내부

for (size_t index = 0; index < totalTokens ; ++index) { 
     std::string temp(str1 + STRING_SINGLESPACE + tokens[index]); 
     if (temp.length() < maxcharacterlimit) { 
      str1 = temp; 
     } else { 
      subsystemlist.push_back(str1); 
      str1 = STRING_EMPTY; 
      --index; 
     } 
    } 

, 나는 --indexindex을 변경하고 있습니다.

+5

어떤 표준을 언급하고 있습니까? –

+1

이 코드 스 니펫은 무한 루프가 될 수 있습니다. –

+3

C/C++라는 언어가 없습니다. 거의 모든 프로그래밍 언어에 대한 수많은 코딩 표준이 있습니다. 그래서, 귀하의 질문에 배경 정보가 모두 매우 의문입니다. 그러나 당신이 얻은 충고는 소리없이 들렸습니다. 그러지 마. –

답변

4

코딩 표준은 절대 규칙이 아니며 지침입니다. 일반적으로 루프 내부에서 반복 변수를 업데이트하는 경우 실수입니다.

for (int i = 0; i < arrayLen; i++) { 
    if (array[i] == array[i++]) { 
     // do something 
    } 
} 

array[i++] 잘못했다, 그는 array[i+1] 의미 : 예를 들어, 오늘 아침 나는 누군가가 뭔가를 쓴 질문을 보았다. 이 오류로 인해 그는 변수를 추가로 늘리고 요소를 건너 뜁니다.

그러나 합법적 인 이유가있을 수 있습니다.

예를 들어 코드에서 subsystemlist의 새 요소를 시작할 때 동일한 요소를 다시 처리하려고합니다.

이렇게 할 수있는 또 다른 일반적인 상황은 명령 줄 인수를 처리하는 루프입니다. 주 루프는 인수 인덱스를 증가 시키지만, 옵션 다음에 매개 변수가있는 경우 인수 색인을 추가로 증가시켜 건너 뜁니다. (요즘은 일반적으로이 프로세스의 대부분을 자동화하기 위해 getopts()과 같은 라이브러리 함수를 사용합니다.