Macros are functions that are supplied with Clojure and defined by users. Argument forms are passed as data to the macro function, which returns a new data structure as a replacement for the macro call. Many things that are built-in to other languages are implemented as macros in Clojure.