store/[org.clojure/clojure "1.8.0"] clj::clojure.core/declare

Official Documentation

Add notes
Arities
==================================================
   [& names]

Docstring
==================================================
  defs the supplied var names with no bindings, useful for making forward declarations.

Source

(defmacro declare
  "defs the supplied var names with no bindings, useful for making forward declarations."
  {:added "1.0"}
  [& names] `(do ~@(map #(list 'def (vary-meta % assoc :declared true)) names)))

Example 1

Edit
(defn foo []
  (undefined-func))
;; Evaluation aborted. Unable to resolve symbol: undefined-func in this context

(declare undefined-func)
;; => #'user/undefined-func

(defn foo []
  (undefined-func))
;; => #'user/foo

;; Note that while foo can be defined thanks to the forward declaration in
;; declare, it cannot be invoked until the forward declared var becomes bound by
;; a def.

Example 2

Edit
(declare show)
;; => #'user/show

(defn welcome [user-name]
  (prn (show) user-name))
;; => #'user/welcome

(defn show []
  (prn "welcome "))
;; => #'user/show

(welcome "lu4nx")
;; > "welcome "
;; > nil
;; > "lu4nx"
;; => nil

Uses on crossclj