We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Can anyone tell me why this piece of code builds with error 143, and how to get it to build without errors?
typedef unsigned char U8; typedef unsigned long int U32; #define B0(x) ((U8) ((U32)x&0xFF)) #define B1(x) ((U8)(((U32)x&0xFF00)>>8)) #define B2(x) ((U8)(((U32)x&0xFF0000)>>16)) #define B3(x) ((U8)(((U32)x&0xFF000000)>>24)) void foo(void); BYTE abc[]={ B0(foo), B1(foo), B2(foo), B3(foo) }; void foo(void){ }
OOOPS... the word "BYTE" should be replaced with "U8" Sorry for the bad code snippet (hopefully there aren't any other silly errors in it!).
Hm. It does sound like what I mentioned earlier, then. Since the compiler doesn't know the value of foo at compile time, it can't calculate (U32)foo >> 24 (for example) to be part of the initializer. Presumably you know which bytes are which in this array. If the data is structured, could you declare a struct for the data, and then initialize that struct? E.g.,
typedef struct { U8 someByte; void (*f)(void); // alignment restrictions on C166? U16 someCounter; } HeterogeneousData; HeterogeneousData abc = { 0, foo, 0xdead };
Thanks to all of you who participated in my enlightenment, especially those who provided the technical answer (hence, understanding) I was looking for. Thankfully there are many different ways I can attempt to solve the related problem, and I'm on my merry way towards an alternative solution.