When a C Program is compiled and and executable is created, The exe makes certain assumptions with respect to the compiler. For example when a c program is compiled on a 32 bit system and run on the 64 bit system, what are the attributes that a program will have that won't change with the architecture?
C compilers translate C code to machine code. Machine code is different for different types of CPUs. The number of registers, the word size and memory bus size also varies between different architectures.
Also, the interaction with the operating system is not the same. In an embedded system there might not even be any operating system.