(defvar *code*) (defun calling-by-two-funcs () (= 200 *code*)) (defmacro defmagicfun (name (&rest arguments) &body body) `(defun ,name ,arguments (when (funcall #'calling-by-two-funcs) ,@body))) (defmagicfun show-1 () 1) (defmagicfun show-2 () 2) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; CL-USER> (let ((*code* 200)) (show-1)) 1 CL-USER> (let ((*code* 200)) (show-2)) 2 CL-USER> (let ((*code* 404)) (show-1)) NIL CL-USER> (let ((*code* 404)) (show-2)) NIL