2011-12-17 7 views
2
extern struct aStruct aStruct_table[4]; 

int main() 
{ 
     aStruct_table[0].val1 = 0; 
     aStruct_table[0].val2 = 0x0; 
     aStruct_table[0].val3 = 0x130; 
     aStruct_table[1].val1 = 1; 
     aStruct_table[1].val2 = 0x140; 
     aStruct_table[1].val3 = 0x860; 
     aStruct_table[1].val1 = 4; 
     aStruct_table[1].val2 = 0x2050; 
     aStruct_table[1].val3 = 0x1950; 
     aStruct_table[1].val1 = 7; 
     aStruct_table[1].val2 = 0x6000; 
     aStruct_table[1].val3 = 0x666; 
} 

구조체 배열을 너무 많이 코딩하지 않고도 정렬 할 수있는 다른 방법이 있습니까?구조체 배열 할당

extern struct aStruct aStruct_table[4] = {{0,0x0,0x130}, 
              {1,0x140,0x860}, 
              {4,0x2050,0x1950}, 
              {7,0x6000,0x666}}; 

답변

3

예, 그렇게 완벽하게 법적처럼 아마 STH. 그것도 명확하게 할 수 C99 이니셜로

: 당신은 할당 및 초기화를 혼합하는

extern struct aStruct aStruct_table[4] = { 
    [0] = { 
     .val1 = 0, 
     .val2 = 0x0, 
    }, 
    [1] = { 
// etc etc 
+0

당신이 완전히 잘못 –

+0

@JensGustedt 구문을 가지고 – fge

+0

아니요, 배열에 이름이 없습니다. –

4

것 같아요. 현대 C에서

, AKA C99하는 struct의 초기화를 할 수있는 가장 좋은 방법은 "지정된 초기화"

struct aStruct A = { .val1 = 0, .val2 = 0x0A }; 

및 구조체의 배열에 대한 구문입니다 단지를 반복 :

struct aStruct B[] = { 
    { .val1 = 0, .val2 = 0x0A }, 
    { .val1 = 2, .val2 = 0x0B } 
}; 

하지만 앞에는 extern으로하지 마세요. 그 중 하나는 초기화 부분이없는 헤더 파일의 forward 선언입니다. 당신은 아마 배열에 대한 할당 구문이없는 알고 struct에 대해 당신이 "사용 복합 리터럴

A = (struct aStruct){ .val1 = 0, .val2 = 0x0A }; 

수 있지만, 당신이 정말로 할당을 의미하는 경우

.

+0

예. 선생님, 있습니다. – fge

+0

@fge 무엇입니까? –

+0

"배열의 지정 구문" – fge