On other machines it will also clear the upper two bytes. Bitfields do not have these problems. Side effects within expressions can result in code whose semantics are compiler-dependent, since C's order of evaluation is explicitly undefined in most places. Notorious examples include the following. The index into a could be the value of i either before or after the increment.
Compilers do differ.
Avoid preprocessor tricks. Be aware, however, that tricky preprocessors may cause macros to break accidentally on some machines. Consider the following two versions of a macro. Become familiar with existing library functions and defines. The internal details of library facilities, as opposed to their external interfaces, are subject to change without warning.