#define SYSYEM LINUX #if SYSTEM == LINUX #define HDR "linux.h" #elif SYSTEM == WINDOWS #define HDR "windows.h" #elif SYSTEM == C51 #define HDR "c51.h" #else #define HDR "default.h" #endif #include HDR I would expect this to work, but I just keep getting "warning C322: unknown identifier" errors. whats wrong?
#if SYSTEM == LINUX turns into #if LINUX == which then turns into #if == Close, but no cigar... Names found in #if expressions that don't have any definition are replaced by literal zeros, not by nothing at all. I.e. the above resolves to #if 0L == 0L which finally evaluates to true. I.e.: in a preprocessor statement, everthing finally is expanded to a number. Note that this does not happen in ordinary C source lines. LINUX mentioned elsewhere will not turn into a zero.
Hm. Yes, I think Hans is right. When I ran into this same problem a while back, the symptom was that the compiler always took the first #if branch, rather than give me a compiler error. Thanks for the correction. I don't like cigars anyway :)