대체 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 ‘)’ token
GCC(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
'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 |