我将使用以下代码示例在 SBCL 中收到有关 f2 的未定义函数警告。 我是否可以像在 C 中一样先声明 f2 以避免警告。 我用谷歌搜索,没有任何线索。
(defun f ()
(print (f2)))
(defun f2 ()
(print "f2"))
最佳答案
如果在单个 compilation unit 中定义函数之前使用该函数,例如,相同的文件,那么编译器将不会提示未定义的函数(普通 load
仍然可能,所以先编译你的代码!)
(declaim (ftype (function () t) f2)
意味着 f2
不接受任何参数并返回一个 value类型 t
.
但是,在定义已加载的情况下编译您使用该函数的文件更有意义。您可以(并且应该!)使用 asdf作为特定于 Lisp 的 make(1) : 指定依赖关系,以便编译器在编译用户时拥有所有函数的定义。
关于lisp - 如何在 common lisp 的定义之前声明一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837000/