compilación en windows y linux

Soy nuevo en c, y me han dado algún código fuente que alguien más ha escrito que se compiló en Windows.

Después de intentar compilar en linux tengo errores porque linux no es compatible con DWORD, WORD, Y UINT32. Tengo 6 archivos por ejemplo. A.h, A.c, B.h, B.c, C.h, C.c. Estas palabras clave están en todos los archivos.

Así que estoy pensando en 2 posibles soluciones. Que es mejor #define o typedef.

1)

typedef unsigned long DWORD;
typedef unsigned short WORD;
typedef unsigned int UNINT32;

2)

#define DWORD unsigned long 
#define WORD unsigned short 
#define UINT32 unsigned int 

Para la segunda parte me pregunto dónde debo poner estas declaraciones. ¿Deben ir en los archivos de encabezado, o deben ir en los archivos de origen?

Por ejemplo, ¿debería hacer algo como esto en los archivos de encabezado o en los archivos de origen?

#ifdef WIN32
/* windows stuff */
#else
typedef unsigned long DWORD;
typedef unsigned short WORD;
typedef unsigned int UNINT32;
#endif

Muchas gracias por las sugerencias anteriores.

Respuestas a la pregunta(4)

Su respuesta a la pregunta