내가 C11는 더 이상 루프 구조 내에서 반복자 변수를 선언 할 수 있습니다 것으로 나타났습니다 없습니다, 예를 들면, 다음이 잘못배치가
int i;
for (i = 0; i < 10; ++i)
는 C99 전에 함수 (블록? Does C11 allow variable declarations at any place in a function?)의 시작 부분을 제외하고 변수를 선언도 가능하지 있다는 사실을 감안할 때,이 안전 관행에 관련이 있는지 궁금합니다. 이터레이터는 함수 또는 블록의 맨 위에 선언해야합니까? 아니면 사용되는 첫 번째 루프 바로 위에 선언해야합니까? 두 방법 모두 큰 차이가 있기 때문에 나는 볼 수 없지만, 이전 방법은 코드를 움직일 때 더욱 견고합니다. 안전에 관한 한, 나는 명백한 함의를 보지 못한다.
또한 위의 C11에서 변경된 이유는 무엇입니까? 나는 첫 번째 예제에서 구문을 좋아했다.
EDIT : 마지막 질문에 반복기를 여러 번 사용하는 경우 블록 내에서 for (int i = 0; ...
을 움직이면 리팩터링하기가 쉽지 않다고하는 한 가지 문제가 있다고 생각합니다.
당신은'gcc -std = c11'을 사용하고 있습니까? 'gcc' 만 사용하고 표준을 지정하지 않으면 for 루프 내부에서 선언을 허용하지 않는 기본값 인'gnu89'가 기본값으로 사용됩니다. ANSI C, C89에서 그런 식 이었지만 "혼합 된 선언과 코드"와 함께 제한이 제거되었습니다. –
나는 그 옵션을 사용하지 않았습니다. – bbarker
stdbool.h를 사용할 수 있기 때문에 적어도 c99를 사용한다고 가정했습니다. – bbarker