25.1 Background - The Desire for Portable Code
All programmers want to write portable source code.
Portability means that the same source code can be compiled and run in a different execution environment than that for which it was written. Rarely can code be one hundred percent portable, but the more tolerant it is to change, the less time and effort it takes to have it running in a new environment.
Embedded engineers typically think of code portability as being across target devices, but this is only part of the situation. The same code could be compiled for the same target but with a different compiler. Differences between those compilers might lead to the code failing at compile time or runtime, so this must be considered as well.
You can only write code for one target device and only use one brand of compiler; but if there is no regulation of the compiler’s operation, simply updating your compiler version can change your code’s behavior.
Code must be portable across targets, tools, and time to be truly flexible.
Clearly, this portability cannot be achieved by the programmer alone, since the compiler vendors can base their products on different technologies, implement different features and code syntax, or improve the way their product works. Many a great compiler optimization has broken many an unsuspecting project.
Standards for the C language have been developed to ensure that change is managed and code is more portable. The International Standards Organization (ISO) publishes standards for many disciplines, including programming languages. Standards such as the ISO/IEC 9899:1999 are universally adopted for the C programming language.