gpt4 book ai didi

SAS 宏包括守卫

转载 作者:行者123 更新时间:2023-12-01 12:01:03 26 4
gpt4 key购买 nike

在其他编程语言(例如 C++)中,包含保护用于防止同一代码的多次包含。

在 C++ 中是这样的:

#ifndef FOO_INCLUDED
#define FOO_INCLUDED
....
#endif

在 SAS 宏函数定义中构建包含保护有意义吗?应该怎么做?

最佳答案

%SYMEXIST(macro-var-name)宏函数可以查看宏变量是否存在,但是不能在open中写%IF,所以您必须将 %IF 语句包含在其他宏中。您可能最终会编写一个宏来将您的代码包装在如下所示的源文件中。这不是很漂亮,但如果需要守卫,你可能可以解决这个问题。

%macro wrapper;
%if %symexist(foo_defined) %then %return;
%macro foo;
%global foo_defined;
%let foo_defined = 1;
%put i am foo;
%mend foo;
%mend wrapper;

%*-- tests --*;
options mcompilenote=all;
%symdel foo_defined;

%*-- first time it will define %foo --*;
%wrapper
%foo
/* on log
NOTE: The macro FOO completed compilation without errors.
6 instructions 108 bytes.
i am foo
*/

%*-- second time it will not --*;
%wrapper
%foo
/* on log
(no notes on macro compilation)
i am foo
*/

调用时,SAS 提供了一组目录、文件和目录,用于访问(已编译/未编译)宏。这使得在给定宏名称的情况下直接找出该 session 是否已经可用的宏变得很麻烦,但并非不可能。阅读本文中的(血腥)细节: http://support.sas.com/resources/papers/proceedings09/076-2009.pdf

关于SAS 宏包括守卫,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1486614/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com