I have a macro that looks like: #define STUB_OS_API_CALLS #ifndef STUB_OS_API_CALLS #define OSAPICALL(osapifunc) (osapifunc) #else #include "..\os\vcsupport\include\vcintegrityosstubs.h" #define OSAPICALL(osapifunc) (stub_##osapifunc) #endif when I use the macro as follows: eErr = OSAPICALL( Function1(a, b, &c) ); It has no problem on expanding, however when I try to use the macro inside the first macro as follows: eErr = OSAPICALL( Function2( OSAPICALL( Function3() ), a, false, b, &c) ); I get a compilation error, saying that OSAPICALL is not defined If I dont define STUB_OS_API_CALLS the Macro works just fine using the two statements shown above. Can anybody please help me discovering why I can't do this macro when defining STUB_OS_API_CALLS?