All three (in different ways) aim to provide a syntax for concisely expressing something that otherwise could only be expressed via some (rather convoluted) coding patterns. That is, they provide syntactic abstractions (which is what macros are really all about.) But you'll get a far better explanation from the chapters I pointed to than I'll be able to type her in this browser window.
-Peter