No, you'd never get anything written. I once used a compiler (also for
the PIC, which is a seriously brain-dead 8-bit microcontroller) that
could handle structs, and arrays, but not arrays of structs or structs
with arrays in them. You don't write code with such limitations unless
you /really/ need to.
There are occasional non-conformities that are not bugs, but active
choices by compiler manufacturers, and portable code can therefore take
them into consideration if the code needs to run on such systems. TI
has a habit on their microcontroller tools of not zeroing uninitialised
statically allocated data. The justification is that it can mean the
time from microcontroller reset to the start of "main" is too long and
can cause problems with watchdogs. This is nonsense, in my experience,
and this misfeature is the cause of countless problems. Some portable
embedded C code explicitly zero-initialises data in order to avoid
problems if you use it with a TI compiler. (Another non-conforming
"feature" that has a lot more justification is that for small 8-bit
microcontrollers, "double" is often implemented as the same size as
32-bit float.)