2014-06-18 5 views
0

주 프로그램에서 값을 할당하려고합니다. 내가 메인 프로그램의 구조 페이지에 값을 할당 할 수C18 컴파일러, MPLAB (ANSI C89)에서 구조를 할당하는 방법

typedef struct PointStructure 
{ unsigned char x;  
    unsigned char y; 
    unsigned char offset; 
    unsigned char page; 
}point; 

volatile far point p; 
volatile far point AryP[5]; 

유일한 방법은

p.x=10; 
p.y=20; 
p.offset=0; 
p.page=1; 

나 배열에 값을 할당하는 것은 공간과 시간이 많이 걸릴 것이 방법입니다. 이 작업을 수행하는 더 좋은 방법이 있습니까?

나를 위해 작동하지 않았다 방법에 따라

..

p = {10, 20, 0, 1}; 

p = {.x = 10, .y=20, .offset=0, .page=1}; 
+0

'= {10, 20, 0, 1}'초기화 단계에서 작동합니다. 할당의 경우 정의되어 있지 않습니다. '.fieldname = value'는 GNU C로만 인식되며 인식되지 않습니다. – keltar

+0

답변 해 주셔서 감사합니다. 예, 초기화 단계에서 작동합니다. 그러나 특정 플래그를 기반으로 런타임에 값을 할당해야합니다. 주 프로그램에서 할당하기 쉬운 방법을 찾고 싶었습니다. p.x = 10보다 값을 할당하는 다른 방법이 있습니까? 등등? – Dolphin

+0

'포인트 t = {10, 20, 0, 1}; memcpy (& p, & t, sizeof (t));'. C99이 복합 리터럴을 추가하지만 컴파일러에서 사용할 수 없다고 생각합니다. – keltar

답변

0
p = {10, 20, 0, 1}; 

p = {.x = 10, .y=20, .offset=0, .page=1}; 

당신이 초기화로 사용하지 않는 한 위의 방법은 올바르지 않습니다

volatile far point p = {.x = 10, .y=20, .offset=0, .page=1}; 

는 구조로 값을 지정하려면 다음은 유일한 방법입니다 :

p.x=10; 
p.y=20; 
p.offset=0; 
p.page=1; 

기능을 수행하지 않는 한 여러 구성원을 동시에 지정할 수 없습니다.

void assignValue(point *p, x, y, offset, page) 
{ 
     p->x = x; 
     p->y = y; 
     p->offset = offset; 
     p->page = page; 
} 

그러므로 당신은 다음과 같은 값을 할당 할 수

assignValue(&p, 10, 20, 0, 1);