【发布时间】:2014-09-24 10:53:22
【问题描述】:
我在一开始就继承了一些宏,下面这行:
%macro dummy; %mend dummy;
这个宏在任何地方都没有特殊的调用,我不明白它的含义......
【问题讨论】:
我在一开始就继承了一些宏,下面这行:
%macro dummy; %mend dummy;
这个宏在任何地方都没有特殊的调用,我不明白它的含义......
【问题讨论】:
宏没有“意义”。它只是一个不包含任何代码的宏的声明。因此,当您运行它时,什么也不会发生。
但是,它可能会尝试清除以前定义的名为 dummy 的宏,以避免意外执行。
清除(或在这种情况下删除)宏的更正确方法是使用(适用于 SAS 9.3 及更高版本):
%SYSMACDELETE dummy;
这样,如果你要执行一个名为dummy 的宏,你会得到一个这样的宏不存在的错误。如果您只是像示例中那样清空宏的内容,则不会出现此错误。
【讨论】:
%SYSMACDELETE 已经在代码中的某处使用,那么虚拟宏可能作为一种规避存在,如SAS Problem Note 52641 中所述
如果代码打算在企业指南中使用并且虚拟宏定义在另一个(真实)宏定义中,那么它可能是一个旨在强制语法突出显示的黑客攻击。
例如:
%macro real;
/* Some sas code but without syntax highlighting */
%mend real;
但是:
%macro real;
/* Some sas code but without sintax highlighting */
%macro dummy; %mend dummy;
/* Some sas code with syntax highlighting */
%mend real;
似乎是%mend 重新启用了突出显示。
【讨论】: