It is no different than having to learn what gcc, clang, Visual C, aCC, SunPro, xlc, icc ... do to your C code outside of what ANSI C specifies how it should behave.
And even for those parts that the ANSI C specifies how it should behave, those compilers do not generate the 100% same code.
Also one needs to know how the underlying OS and CPU handle that generated code as well.
Specially interesting regarding the understanding of the underlying OS on UNIX platforms, is to learn how much the platform deviates from the POSIX specification in regards implementation specific semantics, because POSIX just like ANSI C, leaves platforms quite some freedom of implementation.
Understanding the target platform is always required.
It is no different than having to learn what gcc, clang, Visual C, aCC, SunPro, xlc, icc ... do to your C code outside of what ANSI C specifies how it should behave.
And even for those parts that the ANSI C specifies how it should behave, those compilers do not generate the 100% same code.
Also one needs to know how the underlying OS and CPU handle that generated code as well.
Specially interesting regarding the understanding of the underlying OS on UNIX platforms, is to learn how much the platform deviates from the POSIX specification in regards implementation specific semantics, because POSIX just like ANSI C, leaves platforms quite some freedom of implementation.
Understanding the target platform is always required.