#define DEBUG 1

...
if(DEBUG)printf("I've finished the loop.\n");
...


  macros can have arguments:

#define ABS(x)     (((x)<0)?(-(x)):(x))


  macros can be multi-line:

#define toint(c) (((c)>='0' && (c)<='9') ? ((c) - '0') : \
                  ((c)>='A' && (c)<='F') ? ((c) - 'A' + 10) : \
                  ((c)>='a' && (c)<='f') ? ((c) - 'a' + 10) : 0)


#define RNDRANGE(min,max) ((int)(rand()*(float)\
                           ((max)-(min)+1)/0x7FFFFFFF+(min)))


#define swap(x,y)   t=x;x=y;y=t;


  not all library "functions" are really functions:

#define getchar()   getc(stdin)


  if you have an error in a line with a macro,
  look at the expansion with:

cc -E file.c
