2010-12-13 4 views
2

Je code sur la plate-forme IAR et je souhaite effectuer les opérations suivantes. J'ai typedef comme suitProgrammation C sur IAR

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; 
}; 

Après cela, je déclare la variable suivante:

struct etimer periodic; 

mais il arrive avec une erreur:

"periodic" is declared with a never completed type. 

Comment puis-je résoudre ce problème?

+1

',' après les accolades de fin de la définition struct peut-être? Normalement, je les mets juste là, pas sûr si elles sont nécessaires. – leppie

+0

oh c'est une erreur de frappe de ma part, ceux-ci sont là – user540382

Répondre

2

Supprimer le () aux alentours de void.
uint32_t n'est pas un type prédéfini. Vous devez #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; 
}; 

Mais je préfère pas cacher la pointerness de la fonction

#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

Je ne pense pas que ce soit censé cacher autant que simplement une convention pour typedef un pointeur de fonction. Après tout, vous n'appelez pas une fonction en utilisant '*' pour déréférencer son nom. J'ai vu beaucoup plus d'utilisations de la déclaration de l'op par rapport à la vôtre. Mon estimation est 80-20 en faveur de la première. –

+1

Comme je l'ai dit, c'est une préférence (premier extrait utilisé style OP). J'aime juste avoir les étoiles visibles et peut-être influencer OP pour utiliser mon style: P – pmg