2012-10-02 3 views
1

나는, 내가 STRINGTABLE 호출 오전 구조체로 시작 교류 파일이이구조체는 C 혼란에

struct stringtable { 
    int table[]; 
    int numElements = 15; 
}; 

처럼 보인다 그리고이 형식 정의를 가지고 그것을 위해 헤더가

typedef stringtable *stringtable_ref; 

때 gcc로 컴파일합니다. 오류가 발생합니다 : 예상 식별자 또는 '('앞에 '['토큰 ' '앞에 ':'int '가 없습니다.

틀렸다. 전에 이런 식으로 C에서 structs 않았다 그래서 내 질문은 : 내 실수를 내 구조체를 선언하고 있습니까? 세미콜론 앞에 태그가 있어야합니까? 구조체를 선언 할 수있는 특정 장소 만 있습니까?

답변

1
struct stringtable { 
    int table[]; 
    int numElements = 15; 
}; 

int table[]; 같은가요 성 부재 배열은 (적어도 하나 이상의 부재를 포함)의 struct 마지막 구성원 일 수있다.

struct 선언의 멤버에게 기본값을 할당 할 수 없으며 C는이를 지원하지 않습니다.

+0

이유는 무엇입니까 필요한 것을 기대? 다소 어리 석다. – Blood

+1

무엇입니까? 기본 값을 줄 수는 없습니까? 나는 그것이 왜 허용되지 않는지 모르겠다. 왜 그렇게되어야하는지 알지 못한다. 그리고 그것은'struct_with_default_value * ptr = malloc (100 * sizeof * ptr);'을 만들 것이고, 꽤 어색하게, 거기에 설정된 기본값을 기대할지도 모른다. 그러나'malloc'은 확실히 그것을하지 않을 것입니다. –

1

구조체에 static 멤버가 없으면 선언시 멤버를 초기화 할 수 없습니다.

당신은 회원 initalizing 전에 구조체의 인스턴스를 생성해야합니다

struct stringtable str_table; 
str_table.numElements = 15; 
//etc 
0

나는 또한 당신이 헤더 typedef struct stringtable *stringtable_ref

관련 문제