Actually, it is nonportable to concatenate any two variables. There may be unused holes in structures. Suspect unions used for type cheating. Specifically, a value should not be stored as one type and retrieved as another. An explicit tag field for unions may be useful.
Different compilers use different conventions for returning structures.
This causes a problem when libraries return structure values to code compiled with a different compiler. Structure pointers are not a problem. Do not make assumptions about the parameter passing mechanism. The following code, for instance, is very nonportable. This example has lots of problems.