типа так в event.h
typedef struct { int devid; } event_t;
в event.c
typedef struct { int devid; int par1; int par2; } event1_t;
typedef struct { int devid; int par3; int par4; } event2_t;
typedef union { event_t *ev; event1_t *ev1; event2_t *ev2; } pev_t;
int func( event_t *ev)
{
pev_t pev = { .ev = ev };
switch(pev.ev->devid)
case 1: pev.ev1->par1 = 0;
...........
}