101e04c3fSmrg/* Macro using defined with a hard-coded identifier (no parentheses) */ 201e04c3fSmrg#define is_foo_defined defined /*...*/ foo 301e04c3fSmrg#undef foo 401e04c3fSmrg#if is_foo_defined 501e04c3fSmrgfailure 601e04c3fSmrg#else 701e04c3fSmrgsuccess 801e04c3fSmrg#endif 901e04c3fSmrg#define foo 1001e04c3fSmrg#if is_foo_defined 1101e04c3fSmrgsuccess 1201e04c3fSmrg#else 1301e04c3fSmrgfailure 1401e04c3fSmrg#endif 1501e04c3fSmrg 1601e04c3fSmrg/* Macro using defined with a hard-coded identifier within parentheses */ 1701e04c3fSmrg#define is_foo_defined_parens defined /*...*/ ( /*...*/ foo /*...*/ ) // 1801e04c3fSmrg#define foo 1901e04c3fSmrg#if is_foo_defined_parens 2001e04c3fSmrgsuccess 2101e04c3fSmrg#else 2201e04c3fSmrgfailure 2301e04c3fSmrg#endif 2401e04c3fSmrg#undef foo 2501e04c3fSmrg#if is_foo_defined_parens 2601e04c3fSmrgfailure 2701e04c3fSmrg#else 2801e04c3fSmrgsuccess 2901e04c3fSmrg#endif 3001e04c3fSmrg 3101e04c3fSmrg/* Macro using defined with an argument identifier (no parentheses) */ 3201e04c3fSmrg#define is_defined(arg) defined /*...*/ arg 3301e04c3fSmrg#define foo bar 3401e04c3fSmrg#undef bar 3501e04c3fSmrg#if is_defined(foo) 3601e04c3fSmrgfailure 3701e04c3fSmrg#else 3801e04c3fSmrgsuccess 3901e04c3fSmrg#endif 4001e04c3fSmrg#define bar bar 4101e04c3fSmrg#if is_defined(foo) 4201e04c3fSmrgsuccess 4301e04c3fSmrg#else 4401e04c3fSmrgfailure 4501e04c3fSmrg#endif 4601e04c3fSmrg 4701e04c3fSmrg/* Macro using defined with an argument identifier within parentheses */ 4801e04c3fSmrg#define is_defined_parens(arg) defined /*...*/ ( /*...*/ arg /*...*/ ) // 4901e04c3fSmrg#define foo bar 5001e04c3fSmrg#define bar bar 5101e04c3fSmrg#if is_defined_parens(foo) 5201e04c3fSmrgsuccess 5301e04c3fSmrg#else 5401e04c3fSmrgfailure 5501e04c3fSmrg#endif 5601e04c3fSmrg#undef bar 5701e04c3fSmrg#if is_defined_parens(foo) 5801e04c3fSmrgfailure 5901e04c3fSmrg#else 6001e04c3fSmrgsuccess 6101e04c3fSmrg#endif 6201e04c3fSmrg 6301e04c3fSmrg/* Multiple levels of macro resulting in defined */ 6401e04c3fSmrg#define X defined A && Y 6501e04c3fSmrg#define Y defined B && Z 6601e04c3fSmrg#define Z defined C 6701e04c3fSmrg#define A 6801e04c3fSmrg#define B 6901e04c3fSmrg#define C 7001e04c3fSmrg#if X 7101e04c3fSmrgsuccess 7201e04c3fSmrg#else 7301e04c3fSmrgfailure 7401e04c3fSmrg#endif 7501e04c3fSmrg#undef A 7601e04c3fSmrg#if X 7701e04c3fSmrgfailure 7801e04c3fSmrg#else 7901e04c3fSmrgsuccess 8001e04c3fSmrg#endif 8101e04c3fSmrg#define A 8201e04c3fSmrg#undef B 8301e04c3fSmrg#if X 8401e04c3fSmrgfailure 8501e04c3fSmrg#else 8601e04c3fSmrgsuccess 8701e04c3fSmrg#endif 8801e04c3fSmrg#define B 8901e04c3fSmrg#undef C 9001e04c3fSmrg#if X 9101e04c3fSmrgfailure 9201e04c3fSmrg#else 9301e04c3fSmrgsuccess 9401e04c3fSmrg#endif 95