간단한 질문. 이것을 ANSI-C로 상상해보십시오 :For-Loop 카운터는 유지됩니까?
int i;
for(i=0 ; i<5 ; i++){
//Something...
}
printf("i is %d\n", i);
출력이 "i is 5"입니까?
i
이 보존 되었습니까? 아니면 루프 이후에 i
의 값이 정의되지 않았습니까?
간단한 질문. 이것을 ANSI-C로 상상해보십시오 :For-Loop 카운터는 유지됩니까?
int i;
for(i=0 ; i<5 ; i++){
//Something...
}
printf("i is %d\n", i);
출력이 "i is 5"입니까?
i
이 보존 되었습니까? 아니면 루프 이후에 i
의 값이 정의되지 않았습니까?
예. for 루프 외부에서 선언 된 경우 루프가 종료 된 후에도 범위에 남아 있습니다. 루프가 종료 한 시점의 값은 그대로 유지됩니다.
당신은 루프에서 I를 declatred 경우 : 다음 루프 종료 후 정의되지
for (int i = 0 ; i < 5 ; i++)
{
}
합니다.
변수 i는 루프 범위 밖에서 정의됩니다 (이 경우 큰 값이거나이 경우 인쇄 할 수 없습니다).
그리고 그것은 루프의 매 턴마다 끝내기 조건이 "5보다 크거나 같을 때 멈추다"라고 post -icnremented됩니다.
그래서 나는이 시점에서 내가 5와 동등하다는 것을 완벽하게 이해합니다.
블록 범위는 C의 함수 범위와 완전히 동일하지 않습니다. 변수 i는 루프 범위에서 벗어날 때 마술처럼 이전 값으로 "돌아 오지 않습니다".
i
의 값은 루프 이후 5입니다. 당신이 뭔가를하지 않는 한
i = 50000;
내부에 그런 짓을하지 않으면.
내가 읽은 대부분의 코딩 표준에서 루프를 종료 한 후에도 "i"를 사용하지 않는 것이 좋습니다. 특히 다음을 수행하지 마십시오.
이것은 제대로 작동하지 않지만 코딩은 좋지 않습니다. 대안보다 읽기 쉽고 유지 보수가 쉽지 않습니다. 예 :
succeeded = false;
for(i = 0; i < num_elements; i++)
{
if(element[i].id == id)
{
/* Do something to element here. */
succeeded = true;
break;
}
}
if(false == succeeded)
{
fprintf(stderr, "Failed to find element %d.", id);
}
예, 변수는 선언 된 블록 내에서만 유효합니다.
gcc ex.c
ex.c: In function ‘main’:
ex.c:10: error: ‘x’ undeclared (first use in this function)
ex.c:10: error: (Each undeclared identifier is reported only once
ex.c:10: error: for each function it appears in.)
ERR, 무엇 : 컴파일러의
: 다음은 예입니다? 그는 "A 사건인가, B인가?"라고 물었다. 그러한 질문은 만족스럽게 "예"또는 "아니오"로 대답 할 수 없습니다. 또한 그는 블록 밖에서 변수를 선언했다. 이 답변이 관련성이 있거나 필요한 답변을 찾지 못했습니다 (이전 답변에 아직 포함되지 않은 새로운 정보를 추가하지 않기 때문에). – AlastairG
네 말이 맞아. 나는 누군가가 이미 내가 왜 보존되어 있는지 (Visage의 대답이 가장 좋았음) 설명했기 때문에 간단히 'yes'라고 대답한다. 이 예제를 추가하는 것이 다른 답변을 완성하는 데 유용 할 수 있다고 생각했습니다. =) – BlackBear