Extensions to Preprocessor

When ANSI strictness is off, the C compiler allows a # to prefix an item that is not a macro argument. It also allows an identifier after an #endif directive. The following listings shows the examples:

Listing: Using # in Macro Definitions
#define add1(x) #x #1

    /* OK, if ANSI_strict is disabled,but probably not what you wanted:       
add1(abc) creates "abc"#1 */

#define add2(x) #x "2"

    /* Always OK: add2(abc) creates "abc2". */
Listing: Identifiers After #endif
#ifdef __CWCC__

  /* . . . */

#endif __CWCC__ /* OK if ANSI_strict is disabled. */

#ifdef __CWCC__

  /* . . . */

#endif /*__CWCC__*/ /* Always OK. */