내 목표는 retrieve()
카운터의 현재 값을 반환 하는 함수를 추가하는 것입니다 (기존 코드를 수정하지 않고) .
#include <stdio.h>
void increment(void){
static unsigned int counter = 0;
counter++;
printf("%d\n", counter);
}
int main(void){
for (int i = 0; i < 5; i++){
increment();
}
printf("counter = %d\n", retrieve());
return 0;
}
그러나 내가 시도하는 모든 것이 범위 문제에 직면하고 있습니다. 즉, counter
아직 인스턴스화되지 않았으므로 컴파일러는 정의되지 않은 이름으로 간주합니다. 기능을 추가해 보았습니다
int retrieve(void){
return counter;
}
사이 increment
와 main
도 모두 내 increment
와 main
자신. static
키워드 에 대한 나의 이해는 변수가 인스턴스화되면 프로그램 실행 기간 동안 정의 된 블록을 넘어서 지속된다는 것입니다. 그래서 제가 겪고있는 문제는 변수가 아직 인스턴스화되지 않았다는 것입니다. 어떤 도움이라도 좋을 것입니다.
범위와 수명은 서로 다른 두 가지이며 부분적으로 독립적입니다.
범위는 식별자가 표시되는 프로그램 텍스트 영역입니다.
수명 (또는 저장 기간)은 객체가 존재하는 프로그램 실행 동안의 기간입니다.
명명 된 개체 counter
가 함께 정의되어 있기 때문에, static
보유 정적 저장 기간 이 프로그램의 전체 실행 중에 있는지 수단. 그러나 식별자 counter
에는 블록 범위 가 있습니다. 즉, 이름이 선언 }
된 가장 안쪽 블록을 종료하는 선언에서만 볼 수 있습니다 . (이 경우 해당 블록은 함수 정의의 가장 바깥 쪽 블록이됩니다.)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다