# Line comment after #define value

#define FOO 42 // a comment
int x;

==>

Program(
  PreprocDirective(
    "#define",
    Identifier,
    PreprocArg,
    LineComment),
  Declaration(PrimitiveType, Identifier))


# #define without comment

#define FOO 42
int x;

==>

Program(
  PreprocDirective(
    "#define",
    Identifier,
    PreprocArg),
  Declaration(PrimitiveType, Identifier))


# Line comment after #define with macro params

#define MAX(a,b) (a > b ? a : b) // max macro
int x;

==>

Program(
  PreprocDirective(
    "#define",
    Identifier,
    "(", Identifier, ",", Identifier, ")",
    PreprocArg,
    LineComment),
  Declaration(PrimitiveType, Identifier))


# Line comment after #if

#if SOME_FLAG // check flag
#endif
int x;

==>

Program(
  PreprocDirective(
    "#if",
    PreprocArg,
    LineComment),
  PreprocDirective(
    "#endif"),
  Declaration(PrimitiveType, Identifier))
