宏(Macro)详解
Macro是DMIS中类似于定义一个函数,可以传递一些参数,我们可以这样来理解宏.
我们新做了一个函数,通过CALL来输入对应的参数,即可完成设计的功能.
例如,之前论坛上有一个写曲线投影到平面的程序,大概程序的结构为
定义一个宏,假设为M(SSJ)
CALL/M(SSJ),'FA(GCV1)','FA(PLN1)'
那么在定义这个宏语句的时候,只需要两个参数:曲线的标签名和投影平面的标签名.
其它的计算和处理都在前面所定义的宏中完成.
宏的好处不言而喻,他使得程序的通用性更强,更模块化,更利于查错.
宏定义的语法为:M(LABEL) = Macro/varname,'lable'
ENDMAC
以一个简单例子说明
输出圆CIR1的直径\X坐标\Y坐标\Z坐标
通常我们的语句为
DECL/COMMON,DOUBLE,DATAC[4]
DATAC[1] = OBTAIN/FA(CIR1),4
DATAC[2] = OBTAIN/FA(CIR1),5
DATAC[3] = OBTAIN/FA(CIR1),6
DATAC[4] = OBTAIN/FA(CIR1),10
WRITE/DID(DEFAULTSCREEN),DATAC[1]
WRITE/DID(DEFAULTSCREEN),DATAC[2]
WRITE/DID(DEFAULTSCREEN),DATAC[3]
WRITE/DID(DEFAULTSCREEN),DATAC[4]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
但是如果这个用宏定义来做,语句是这样
M(demo) = MACRO/'CIR1'
DECL/COMMON,DOUBLE,DATAC[4]
DATAC[1] = OBTAIN/FA(CIR1),4
DATAC[2] = OBTAIN/FA(CIR1),5
DATAC[3] = OBTAIN/FA(CIR1),6
DATAC[4] = OBTAIN/FA(CIR1),10
WRITE/DID(DEFAULTSCREEN),DATAC[1]
WRITE/DID(DEFAULTSCREEN),DATAC[2]
WRITE/DID(DEFAULTSCREEN),DATAC[3]
WRITE/DID(DEFAULTSCREEN),DATAC[4]
ENDMAC
CALL/M(demo),(CIR1)
表面上来看,结果没有变,但是代码好象增多了.
如果同样我需要输出CIR2的这些值,我不需要再修改源程序,只需要将CALL语句中的CIR1替换为CIR2即可.
但是如果是第一种代码,我们需要把所有的CIR1替换为CIR2,不仅不方便,而且容易出错.
我再需要输出其它圆的这几项实际值,只需要调用这个宏M(demo)即可以,不用重复再去写代码,保证程序的模块化.
PS: 宏定义的参数有两种,标签名和变量.
在用CALL语句做调用时,同样也只有两种参数.
定义的时候标签名为单引号,变量没有什么限制,例如 M(demo) = macro/'CIR1',tempchar
调用宏的时候,标签名为括号,变量无限制,例如CALL/M(demo),(CIR1),tempstring
宏在测量程序上的很有意义,很多写好的程序,可以用宏的方式写出来,方便以后做调用,节省不必要的代码工作.
「该帖子被 爱科腾瑞客服 在 2009-1-6 16:43:01 编辑过」