Директивы препроцессора:
#define max(a,b) ((a) > (b) ? (a) : (b))
#define make_str(bar) # bar printf(make_str(42));
преобразуется в
printf("42");
#define MakePosition(x) x##X,x##Y,x##Width,x##Height int MakePosition(Object);
преобразуется в
int ObjectX,ObjectY,ObjectWidth,ObjectHeight;
После строки
#undef идентификатор
препроцессор считает, что идентификатор не определён. Это может помочь нам в случае условной компиляции.