programing

대체 for-loop 구문

lastcode 2023. 9. 19. 21:11
반응형

대체 for-loop 구문

아래는 C 표준의 일부분입니다(n1256 TC3 C99의 섹션 6.8.5).

반복-문:
     하는 동안에(표현)진술
     (express) 동안 진술을 합니다;
     (express표현; 표현; 표현)대하여
     (declar 표현식; 표현식) 대해

내 흥미를 돋우는 것은 마지막 진술입니다.for ( declaration expression ; expression ) statement. 6.8.5.1은 다음을 설명합니다.for루프, 그러나 언급만 합니다.for ( clause-1 ; expression-2 ; expression-3 ) statement통사론

이 구문에 따라 코드를 작성하려고 몇 번 시도했지만 모두 구문 오류가 발생했습니다.예:

for (int i = 0, i; i++) { /* ... */ }
for (int i = 0; !(i++)) { /* ... */ }

모두 다음과 같은 오류가 발생합니다.error: expected ‘;’ before ‘)’ tokenGCC(v4.9.2)를 사용하여 컴파일된 경우.

제가 기준을 제대로 해석하고 있는지 잘 모르겠습니다.이 구문이 유용한 방법으로 사용될 수 있을까요, 아니면 제가 뭔가를 간과한 것일까요?

안타깝게도, 이것은 읽기 쉽지 않습니다.당신은 두번째 케이스를 잘못 읽고 있습니다.for진술.첫번째 세미콜론은 필수적인 부분입니다.declaration그래서 당신의 눈에 숨겨져 있는 겁니다.A부속서를 들여다보면 그런 구문 질문을 쉽게 확인할 수 있습니다.여기 있습니다.

(6.7) declaration: 
    declaration-specifiers init-declarator-listopt ;
    static_assert-declaration

보시면, 구문은...

 for ( declaration expression1opt ; expression2opt ) statement

일반적인 진술과 비교해 보겠습니다.

 for (int i = 0; i < 10; i++) printf("%d \t", i);

여기서,

  • int i = 0;나타내는declaration[includes 더;]
  • i < 10나타내는expression1opt[옵션]
  • ;는 의 구문 요구 사항에 따릅니다.;[구문에 설명된 바와 같이 반드시]
  • i++expression2opt[옵션]
  • printf("%d \t", i);statement

자, 당신의 경우엔

for (int i = 0, i; i++) { /* ... */ }
  • int i = 0, i;나타내는declaration
  • i++나타내는expression1opt
  • ;실종되었습니다..

여기서 마지막 점은 오류를 발생시킵니다.당신이 필요한 것은;구문 검사를 통과합니다.

언급URL : https://stackoverflow.com/questions/27398503/alternative-for-loop-syntax

반응형