编译器始终检查一致性是否优化。如果指定的优化选项与某些安全规则相矛盾,编译器将发出警告消息。
注意:Visual LISP IDE 仅在 Windows 上可用。
安全规则包括:
- 链接
-
仅当满足以下条件时,编译器才会直接链接 AutoLISP 函数调用:
- 该函数仅定义一次,或者由 AutoLISP 预定义,并且没有用户重新定义它。defun
- 函数名称不会出现在其他函数的参数列表中。
- 该函数未在项目中的任何位置分配。
- 落
-
仅当所有相应的函数调用都直接链接到函数定义时,编译器才会尝试删除函数符号。如果程序按函数的符号名称调用函数,则编译器不会删除函数定义的符号。在以下情况下,函数通过符号调用:
- 该符号将显示在声明中。vl-acad-defun
- 该函数是从ACTION_TILE操作字符串调用的。
- 函数符号是 、 或项目中某处的带引号的参数。applymapcareval
注意:对于从顶级表达式调用的函数,将忽略 Drop 声明,而不会显示警告消息。
- 本地化
-
如果满足以下任一条件,编译器不会在 、 和 表达式的绑定列表中本地化变量:defunlambdaforeach
- 变量在外部顶级表达式中具有对它的非本地引用(或赋值)。
- 该变量按名称作为函数调用。
- 变量符号显示为顶级 read-eval 循环中某处的函数调用。
除了这些总是会取消优化并导致警告消息的情况之外,还有其他情况可能会导致也可能不会导致代码不正确。编译项目时,请使用项目的“安全优化”选项来禁止这些条件。如果满足这些条件,禁用安全优化将导致编译器警告。
|