/* accept 'defined' as result of substitution */ ----- 1 ------#define AAA 2#define BBB#define CCC (defined ( AAA ) && AAA > 1 && !defined BBB)#if !CCCOK#elseNOT OK#endif ----- 2 ------#undef BBB#if CCCOK#elseNOT OK#endif ----- 3 ------#define DEFINED defined#define DDD (DEFINED ( AAA ) && AAA > 1 && !DEFINED BBB)#if (DDD)OK#elseNOT OK#endif ----- 4 ------#undef AAA#if !(DDD)OK#elseNOT OK#endif ----- 5 ------line __LINE__#define __LINE__ # ## #line __LINE__ ----- 10 ------/* preprocessor numbers are (u)intmax_t */#if -2147483648 < 01 true#endif#if -0x80000000 < 02 true#endif#if -9223372036854775808U > 03 true#endif#if -0x8000000000000000 > 0 // unsigned by overflow4 true#endif#if 1 << 31 > 2 && 1 << 32 > 2 && 1 << 63 < 2 && 1U << 63 > 25 true#endif#if (1<<29) * 11 >= 1<<32 && defined DDD << 63 < 06 true#endif
/* accept 'defined' as result of substitution */
----- 1 ------
#define AAA 2
#define BBB
#define CCC (defined ( AAA ) && AAA > 1 && !defined BBB)
#if !CCC
OK
#else
NOT OK
#endif
----- 2 ------
#undef BBB
#if CCC
OK
#else
NOT OK
#endif
----- 3 ------
#define DEFINED defined
#define DDD (DEFINED ( AAA ) && AAA > 1 && !DEFINED BBB)
#if (DDD)
OK
#else
NOT OK
#endif
----- 4 ------
#undef AAA
#if !(DDD)
OK
#else
NOT OK
#endif
----- 5 ------
line __LINE__
#define __LINE__ # ## #
line __LINE__
----- 10 ------
/* preprocessor numbers are (u)intmax_t */
#if -2147483648 < 0
1 true
#endif
#if -0x80000000 < 0
2 true
#endif
#if -9223372036854775808U > 0
3 true
#endif
#if -0x8000000000000000 > 0 // unsigned by overflow
4 true
#endif
#if 1 << 31 > 2 && 1 << 32 > 2 && 1 << 63 < 2 && 1U << 63 > 2
5 true
#endif
#if (1<<29) * 11 >= 1<<32 && defined DDD << 63 < 0
6 true
#endif