exec/types.h has a lot of "#ifdef"s. For Example:
#ifdef OLD_TYPEDEFS
At least that´s what it´s like on 4.1.
I am working with gcc (on both 4.1 and 3.1 systems), so I don´t know what VBCCs best setup is, but maybe you have a look at types.h and define the variables in the environment according to your intuition. (I did´t mean Intuition(TM) ;-) ) Maybe you should check what vbcc defines on its own first.
The C99 error seems completely weird. It just shouldn´t eat characters. Maybe it was caused by an incomplete build with the old setings was somehow mixed into the new build => make clean && make.