App-UnifdefPlus
view release on metacpan or search on metacpan
#else // (I)
/* 3.7 BAR defined, but not FOO (I) */
#endif // (I)
#if defined FOOBAR // (I)
/* 3.8 BAR and FOOBAR defined (I) */
#else // (I)
/* 3.9 BAR defined but not FOOBAR (I) */
#endif // (I)
#else // (I)
#if defined FOOBAR //(V)
/* 3.1 BAR not defined, FOOBAR defined (V) */
#else //(V)
/* 3.1 BAR and FOOBAR not defined (V) */
#endif //(V)
#endif //(I)
/* 4: Check complex expressions with #if: */
// note: && has higher precedence than ||:
#if defined(FOO) && defined(BAR)
/* 4.1 FOO and BAR are defined (I)*/
#else
/* 4.1 FOO or BAR are undefined (V) */
#endif
#if defined(FOO) || defined(BAR)
/* 4.2 FOO or BAR are defined (V) */
#else
/* 4.2 FOO and BAR are undefined (I) */
#endif
#if defined(D1) && defined(D2) || defined(U1)
/* 4.3 #if defined(D1) && defined(D2) || defined(U1) (V)*/
#else
/* 4.3 #else (I) */
#endif
#if defined(D1) || defined(D2) && defined(U1)
/* 4.4 #if defined(D1) || defined(D2) && defined(U1) (V) */
#else
/* 4.4 #else (I) */
#endif
#if (defined(D1) || defined(D2)) && defined(U1)
/* 4.5 #if (defined(D1) || defined(D2)) && defined(U1) (I) */
#else
/* 4.5 #else (#if (defined(D1) || defined(D2)) && defined(U1)) (V)*/
#endif
#if (defined(D1) || defined(D2)) && defined(U1) || defined(FOOBAR)
/* 4.6 #if (defined(D1) || defined(D2)) && defined(U1) || defined(FOOBAR) (V) */
#else
/* 4.6 #else */
#endif
#if (D2 * 2 - 1 > D1 + 1 ) \
&& (defined(FOO) || defined(FOOBAR)) \
&& (FOOBAR > 3 * (9 - 2) ) // eol comment
/* 4.20 complex... -- should resolve to #if ( FOOBAR > 3 * (9 - 2) ) // eol comment */
#else
/* 4.20 #else */
#endif
#if ( defined(U1) && defined(UNKNOWN1) ) || \
!defined D1 // resolves to false
/* 4.21 line will NOT appear */
#elif D1 <= 3 && U1 > (3 + 2) // (4.21 condition simplifies)
/* 4.21 line will appear */
#elif D1 > 3 // condition resolves to false (1 < 3...)
/* 4.21 line will NOT appear */
#else
/* 4.21 line will appear, as an else to the unknown */
#endif
// Note: known bug: whitespace at opening brace is not being preserved...
// #if ( ( /*comment*/ FOOBAR > 3 * (9-2)) && defined(FOO) )
// does not preserve the comment or whitespaces.
( run in 0.532 second using v1.01-cache-2.11-cpan-98e64b0badf )