대체 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;나타내는declarationi++나타내는expression1opt;실종되었습니다..
여기서 마지막 점은 오류를 발생시킵니다.당신이 필요한 것은;구문 검사를 통과합니다.
언급URL : https://stackoverflow.com/questions/27398503/alternative-for-loop-syntax
'programing' 카테고리의 다른 글
| kvm: 모듈 확인 실패: 서명 및/또는 필요한 키 누락 - 커널 수정 (0) | 2023.09.19 |
|---|---|
| XPath와 링크 텍스트로 링크 URL을 찾으려면 어떻게 해야 합니까? (0) | 2023.09.19 |
| 스택 오버플로로 인해 세그먼트화 오류가 아닌 다른 문제가 발생할 수 있습니까? (0) | 2023.09.19 |
| NStimeInterval to HH:mm:ss? (0) | 2023.09.19 |
| 파이썬에서 "(1,) == 1"의 의미는 무엇입니까? (0) | 2023.09.19 |