2013-03-06 1 views
0

'C'는 구조체의 저장소 클래스가 '정적'이 아닌 한 함수 내부에서 구조체 멤버의 초기화를 허용하는 것처럼 보입니다. 그렇게하려고하면 컴파일 오류가 반환됩니다. 당신은 몇 가지 통찰력을 던져구조 초기화의 정적 저장소 클래스에서 오류가 발생했습니다.

error: initializer element is not constant

코드,

typedef struct data { 
    int age; 
    char *name; 
} data_t; 

void foo(data_t student) 
{ 
    //data_t s1 = student; <--- works 
    static data_t s1 = student; <--- throws error 
    printf("%s: s1.age: %d, s1.name: %s\n",__FUNCTION__,s1.age, s1.name); 
} 

가 감사합니다 싹둑.

+1

무엇을하려고합니까? 왜 당신이'정적'을 원하고이 경우에 그것이 무엇을 의미하는지 알고 있습니까? –

+0

'정적'으로 선언 된 변수는 데이터 세그먼트에 저장되므로 컨텍스트 스위치간에 값이 유지된다는 것을 알고 있었지만 정적 저장소가있는 개체는 @meyer가 아래에서 지적한, 상수 표현식으로 또는 C에서 상수 표현식을 포함하는 집합 이니셜 라이저로 초기화 될 수 있습니다. 나는 이것을 내가 어딘가에서 읽었는지 확인하려고 노력했다. – Amit

답변

2

정적 저장소가있는 개체는 상수 식 또는 C의 상수식이 들어있는 집계 이니셜 라이저로 초기화해야합니다. 정적 선언 된 개체 s1을 정적 개체가 아닌 student으로 초기화하려고합니다. 이것이 컴파일러가 에러 initializer element is not constant을 던지는 이유입니다.

관련 문제