Podrías empezar a usar C++ y evitar guarrerías, mira esto:
Código:
inline unsigned short int & SetWordHigh(unsigned short int & Word, unsigned char & HighByte) { reinterpret_cast<unsigned char*>(&Word)[1] = HighByte; return Word; }
inline unsigned short int & SetWordLow (unsigned short int & Word, unsigned char & LowByte) { reinterpret_cast<unsigned char*>(&Word)[0] = LowByte; return Word; }
Serán igual que los #defines pero creando símbolos, posibilidad de debug y comprobación de tipos.
En este código, el reinterpret_cast (quizás-no-portable) creo que no es sustituible por el static_cast (portable).
Pero no me hagas mucho, sería probarlo y ver si cuela el static_cast. Acabo de formatear y no lo tengo disponible, sorry :P Luego paso a Debian y te digo si va allí.