나는 정적 로컬 변수의 개념을 가지고있다 : 글로벌 수명, 로컬 범위. 마찬가지로, 자동 변수은 프로그램 흐름이 변수의 컨텍스트를 입력하고 떠날 때 자동으로 할당/할당 취소된다는 것을 이해합니다. 이와 같이자동 변수가 초기화되지 않은 경우 정적 수명이 있습니까?
#include <stdio.h>
void test_var(void){
static unsigned foo = 0;
unsigned bar = 0;
printf(" %u %u\n", foo++, bar++);
}
int main(void){
printf("Foo Bar\n");
printf("--- ---\n");
for(unsigned x = 0; x < 10; x++){
test_var();
}
return 0;
}
은, 앞의 예는 예상대로 동작하며 다음과 같은 출력 인쇄 :
#include <stdio.h>
void test_var(void){
static unsigned foo; /* not initialized */
unsigned bar; /* not initialized */
printf(" %u %u\n", foo++, bar++);
}
int main(void){
printf("Foo Bar\n");
printf("--- ---\n");
for(unsigned x = 0; x < 3; x++){
test_var();
}
return 0;
}
출력 :
Foo Bar
--- ---
0 0
1 0
2 0
3 0
4 0
5 0
6 0
7 0
8 0
9 0
은 무엇 나를 혼란스럽게하는 것은 초기화하지 않을 경우 변수가 작동하는 방법이다 :
Foo Bar
--- ---
0 2
1 3
2 4
3 5
4 6
5 7
6 8
7 9
8 10
9 11
정적 변수은 예상대로 동작합니다. 기본값은 0
이고 함수 호출을 통해 유지됩니다. 자동 변수도 지속되는 것처럼 보입니다. 가비지 값을 보유하고 있지만 각 호출에서 증가합니다. 행동이 표준 C에서 정의되지 않은, 또는 이것을 설명 표준에 일련의 규칙이 있기 때문에
이 발생되어 있습니까?
나에게 정의되지 않은 동작처럼 보입니다. test_var 함수 주위에 몇 가지 변수와 함수 호출을 추가하면 "재미"가 계속 발생할 것입니다. –
정의되지 않은 동작입니다. 변수'bar'는 항상 같은 위치에 놓여지며 호출 사이에 결코 덮어 쓰지 않기 때문일 것입니다. –
나는 거의 100 % 긍정적이다. 이것은 중복 된 질문이다. –