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){ }
MY BAD...! I thought only C16x tool user's would've attempted to answer my question, although I do appreciate your help. FWIW, KEIL's user's manuals are online now. Not sure how long they've been online, but... the compiler reports:
MAIN.C(35): error 143: 'scalar': initializer is not a constant
"initializer is not a constant" It often pays to simply read the text of an error message out loud - it is telling you exactly what Drew has been saying! The value of foo is not known at compile time; thus it is not a constant!