2010-12-13 3 views
2

IAR 플랫폼에서 코딩 중이며 다음을 원합니다. 나는 다음과 같은 변수 선언이 후IAR에서 C 프로그래밍

struct timer { 
    uint32_t start; 
    uint32_t interval; 
}; 

typedef (void) (*etimer_cb) (int,void*); 

struct etimer { 
    struct timer timer; 
    struct etimer* next; 
    etimer_cb p; 
}; 

따르는 typedef으로 내가 가진 :

struct etimer periodic; 

를하지만 오류가납니다 :

"periodic" is declared with a never completed type. 

어떻게이 문제를 해결합니까?

+1

'의 pointerness을 숨길,'어쩌면 구조체 데프의 종료 중괄호 후? 나는 보통 그들을 거기에 넣었습니다. 필요한지 확실하지 않았습니다. – leppie

+0

오, 내 부분에 타이핑 오류가있다, 그곳에있다. – user540382

답변

2

void에서 ()을 제거하십시오.
uint32_t은 미리 정의 된 유형이 아닙니다. #include <stdint.h>이 필요합니다.

#include <stdint.h> 
struct timer{ 
    uint32_t start; 
    uint32_t interval; 
}; 
typedef void (*etimer_cb)(int, void *); 
struct etimer{ 
    struct timer timer; 
    struct etimer* next; 
    etimer_cb p; 
}; 

하지만 하지 선호 함수

#include <stdint.h> 
struct timer{ 
    uint32_t start; 
    uint32_t interval; 
}; 
typedef void etimer_cb(int, void *); 
struct etimer{ 
    struct timer timer; 
    struct etimer* next; 
    etimer_cb *p; 
}; 
+1

나는 그것이 함수 포인터를 typedef하는 것만 큼 은폐하는 것이 아니라고 생각한다. 결국, '*'를 사용하여 이름을 간략히하기 위해 함수를 호출하지 않습니다. 나는 당신의 선언문에 비해 op 선언을 더 많이 사용하는 것을 보았습니다. 제 추측은 첫 번째 것에 찬성하여 80-20입니다. –

+1

내가 말했듯이, 선호도 (첫 번째 발췌 문장은 OP의 스타일을 사용했습니다)입니다. 나는 단지 별을 볼 수 있고 OP에 내 스타일을 사용하는 데 영향을 줄 수 있습니다. P – pmg