A
Amigo
Hello all!
I started working on an embedded project a few ago on Freescale 16-bit
micro with an IAR toolset. Running PolySpace for the project code
highlighted amongst other things a peculiar construct in one of the
compiler's header files. Here's the code snippet:
#ifndef __SIZE_T_TYPE__
#if sizeof((char*)0 - (char*)0) <= sizeof(int)
#define __SIZE_T_TYPE__ unsigned int
#else
#define __SIZE_T_TYPE__ unsigned long
#endif
#endif
I was very suspicious about this construct in the first place, but
coming from a compiler vendor baffled me even more. Although I kind of
understand what the author wanted, the combination of sizeof and
pre-processing is bound to not comply with the ANSI C specification.
My question is: have you ever encountered such a construct in a file
delivered by a tool vendor? It definitely "works", in that the compiler
does not throw errors or warnings. But because this code goes into a
safety-related project I need to understand exactly what's happening in
the code and why. Any thoughts appreciated.
Cheers,
Romeo
PS: I was dumped in the project team just last week, so I did not have
time to look through the whole of the project (documentation is
"standard", i.e. poor)
I started working on an embedded project a few ago on Freescale 16-bit
micro with an IAR toolset. Running PolySpace for the project code
highlighted amongst other things a peculiar construct in one of the
compiler's header files. Here's the code snippet:
#ifndef __SIZE_T_TYPE__
#if sizeof((char*)0 - (char*)0) <= sizeof(int)
#define __SIZE_T_TYPE__ unsigned int
#else
#define __SIZE_T_TYPE__ unsigned long
#endif
#endif
I was very suspicious about this construct in the first place, but
coming from a compiler vendor baffled me even more. Although I kind of
understand what the author wanted, the combination of sizeof and
pre-processing is bound to not comply with the ANSI C specification.
My question is: have you ever encountered such a construct in a file
delivered by a tool vendor? It definitely "works", in that the compiler
does not throw errors or warnings. But because this code goes into a
safety-related project I need to understand exactly what's happening in
the code and why. Any thoughts appreciated.
Cheers,
Romeo
PS: I was dumped in the project team just last week, so I did not have
time to look through the whole of the project (documentation is
"standard", i.e. poor)