compiling on windows and linux

c

Solution

You have found the solution yourself:

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

Put this in a separate header file (typedefs.h) and include it from everywhere. Typedef are always preferred over pre-processor macros.

My recommendation: Do not use DWORD, WORD or other Win32 types. I usually prefer to use C99 standard types: uint_t, int_t or uint16_t, uint32_t

Problem

I am new to c, and I have some been given some source code that someone else has written that was compiled on windows. After trying to make in compile on linux I have errors because linux doesn't support DWORD, WORD, AND UINT32. I have 6 files for example. A.h, A.c, B.h, B.c, C.h, C.c. These keyword are in all the files. So I am thinking of 2 possible solutions. Which is better #define or 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 ``` For the second part I am wondering where should I put these declarations. Should they go in the header files, or should they go in the source files? For example should I do something like this in the header files, or in the source files? ``` #ifdef WIN32 /* windows stuff */ #else typedef unsigned long DWORD; typedef unsigned short WORD; typedef unsigned int UNINT32; #endif ``` Many thanks for the above suggestions,

Original source