首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >警告变量已定义但从未使用的SBCL

警告变量已定义但从未使用的SBCL
EN

Stack Overflow用户
提问于 2015-07-04 22:56:13
回答 1查看 1.7K关注 0票数 9

我收到来自sbcl编译器的警告,即已经定义了一个变量,但没有使用。编译器是对的。我想摆脱警告,但不知道该怎么做。下面是一个示例:

代码语言:javascript
复制
(defun worker-1 (context p)
  ;; check context (make use of context argument)
  (if context
      (print p)))

 (defun worker-2 (context p)
   ;; don't care about context
   ;; will throw a warning about unused argument
   (print p))

 ;;
 ;; calls a given worker with context and p
 ;; doesn't know which arguments will be used by the
 ;; implementation of the called worker
 (defun do-cmd (workerFn context p)
   (funcall workerFn context p))

 (defun main ()
    (let ((context ()))
     (do-cmd #'worker-1 context "A")
     (do-cmd #'worker-2 context "A")))

do-cmd-函数需要实现特定接口f(上下文p)的worker函数。

sbcl编译器抛出以下警告:

代码语言:javascript
复制
in: DEFUN WORKER-2
;     (DEFUN WORKER-2 (CONTEXT P) (PRINT P))
;
; caught STYLE-WARNING:
 ;   The variable CONTEXT is defined but never used.
;
; compilation unit finished
;   caught 1 STYLE-WARNING condition
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-05 00:35:12

您需要声明该参数是有意的已忽略

代码语言:javascript
复制
(defun worker-2 (context p)
  (declare (ignore context))
  (print p))

如果您确实使用该变量,ignore也会发出警告。若要在这两种情况下禁止警告,可以使用声明ignorable,但这只应用于宏和其他无法确定变量在声明点是否使用的情况。

如果您还不熟悉declare,请注意它不是一个操作符,而是只能出现在某些地点中;特别是,它必须位于defun主体中的所有表单之前,尽管它可以位于文档字符串的上面或下面。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31225756

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档