The large areas of undefined and unspecified behavior
has always been an
issue in C. It was somewhat acceptable when you were using it as a direct
replacement for assembler, but Java and many of other follow-ons endevaored
to be more portable/rigourous.
One cannot compare system and business related stuff!
When I'm doing C I always have the CPU and its instructions in mind. As Linus I
see the assembly code in my inner eyes. For such minds, doing with C what earlier
was done with assembly, C was created, whereas writing business applications
cobol and its modern relative java are the first choices.