please could anyone help me why such a definition of symbolic constants yields error definition of following static variables within functions: error: storage size of ‘variable’ isn’t constant
#define SAMPLE_RATE 200 /* Sample rate in Hz. */
#define MS_PER_SAMPLE ( (double) 1000/ (double) SAMPLE_RATE)
#define MS10 ((int) (10/ MS_PER_SAMPLE + 0.5))
#define MS25 ((int) (25/MS_PER_SAMPLE + 0.5))
#define MS30 ((int) (30/MS_PER_SAMPLE + 0.5))
#define MS80 ((int) (80/MS_PER_SAMPLE + 0.5))
#define MS95 ((int) (95/MS_PER_SAMPLE + 0.5))
#define MS100 ((int) (100/MS_PER_SAMPLE + 0.5))
#define MS125 ((int) (125/MS_PER_SAMPLE + 0.5))
#define MS150 ((int) (150/MS_PER_SAMPLE + 0.5))
#define MS160 ((int) (160/MS_PER_SAMPLE + 0.5))
#define MS175 ((int) (175/MS_PER_SAMPLE + 0.5))
#define MS195 ((int) (195/MS_PER_SAMPLE + 0.5))
#define MS200 ((int) (200/MS_PER_SAMPLE + 0.5))
#define MS220 ((int) (220/MS_PER_SAMPLE + 0.5))
#define MS250 ((int) (250/MS_PER_SAMPLE + 0.5))
#define MS300 ((int) (300/MS_PER_SAMPLE + 0.5))
#define MS360 ((int) (360/MS_PER_SAMPLE + 0.5))
#define MS450 ((int) (450/MS_PER_SAMPLE + 0.5))
#define MS1000 SAMPLE_RATE
#define MS1500 ((int) (1500/MS_PER_SAMPLE))
#define DERIV_LENGTH MS10
#define LPBUFFER_LGTH ((int) (2*MS25))
#define HPBUFFER_LGTH MS125#define WINDOW_WIDTH MS80 // Moving window integration width.
#define FILTER_DELAY (int) (((double) DERIV_LENGTH/2) + ((double) LPBUFFER_LGTH/2 - 1) + (((double) HPBUFFER_LGTH-1)/2) + PRE_BLANK) // filter delays plus 200 ms blanking delay
#define DER_DELAY WINDOW_WIDTH + FILTER_DELAY + MS100
int lpfilt( int datum ,int init)
{
static long y1 = 0, y2 = 0 ;
static int data[MS_PER_SAMPLE], ptr = 0 ;
.....
int lpfilt( int datum ,int init)
{
static int data[MS_PER_SAMPLE], ptr = 0 ;
....
int hpfilt( int datum, int init )
{
static int data[HPBUFFER_LGTH], ptr = 0 ;
...
int deriv1(int x, int init)
{
static int derBuff[DERIV_LENGTH], derI = 0 ;
...
int deriv2(int x, int init)
{
static int derBuff[DERIV_LENGTH], derI = 0 ;
...
int mvwint(int datum, int init)
{
static int data[WINDOW_WIDTH], ptr = 0 ;
...
I haven't a clue what the problem might be, no matter if I retype the result of calculation with (int) it still yields an error. Is retyping not allowed in symbolic constant definition?