2011-03-28 3 views
2

는 :이니셜 요소 코드 오류

void main(){ 
    int a = 5; 
    static int i = a+5; 
    printf("%d", i); 
} 

을 나는 오류를 얻을 : 초기화 요소가이 무엇을 의미합니까

일정하지?

+3

참고 : 'void main'은 아기 예수를 부르짖입니다. – cHao

+0

@cHao void main은이 문제와 아무런 관련이 없습니다 ... –

+3

@AMIT : 그것이 내가 대답으로 게시하지 않은 이유입니다. 그냥 선생님. – cHao

답변

5

정적 변수는 데이터 세그먼트로 이동합니다. 데이터 세그먼트는 컴파일 타임에 초기화됩니다. 즉, 초기 값은 컴파일 타임에 알려 져야합니다. 귀하의 경우, 초기 값 (값 a)은 실행시에만 사용 가능한 스택의 변수에서 가져옵니다.

+0

YAA @ absum right right ... –

+0

감사합니다. 나는 지금 포인트를 얻었다. –

0

당신은 상수 (같은 int a = 5;)과 함께 있지만, 불법 식 (a+5)와 변수 i하지 초기화 때문이다.

0

키워드 static은 변수 i의 인스턴스가 정확히 하나 존재한다는 것을 의미하며, 해당 인스턴스는 프로그램 수명 기간 동안 지속됩니다. 예를 들어 함수 호출간에 값을 저장하려는 경우에 유용합니다.

변수가 응용 프로그램이 시작될 때 초기화되므로 값은 일정해야합니다.

귀하의 경우, 함수가 호출 될 때마다 새로운 값을 얻으므로 "정적"을 선언 할 필요가 없습니다.

1

C에서 Initializer는 일정해야합니다. 그러나 당신이 어떤 오류를 생성하지 않습니다 ...

int a = 5; 
static int i; 
i = a + 5; 
printf("%d", i); 

이 같은 것을 할 수 있습니다 ... 기능 범위의

+0

당신이 말하는 것은 intitializer가 상수 여야하지만이 코드는 어떨까요? void main() { int a = 5; int i = a + 5; printf ("% d", i); } –

+0

은 변수가 포함 된식이 아닌 상수로 초기화해야합니다. 내가 잘못하면 나를 바로 잡아주세요 ... –

+0

정적 변수를 실행중인 –