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