【问题标题】:How to declare an array with macros in Lauterbach CMM script如何在 Lauterbach CMM 脚本中使用宏声明数组
【发布时间】:2019-11-05 15:21:12
【问题描述】:

我想用 Lauterbach CMM 脚本中的宏创建一个数组。

我尝试了以下方法:

LOCAL &ARRAY_VAR[10]

这种语法不起作用。

我知道如何用 Var.NEWLOCAL 创建数组:

Var.NEWLOCAL int[3] \ARRAY_VAR

有没有办法用数组创建宏?

【问题讨论】:

  • 嗨 Holger 你知道我怎样才能用私有宏声明一个数组

标签: trace32 lauterbach


【解决方案1】:

简答:PRACTICE 不支持宏数组。


更长的答案:PRACTICE 可以进行递归宏扩展,它允许您执行与实际数组类似的操作。 (参见practice_user.pdf 中的“PRACTICE 宏”)

例如:

LOCAL &myarr0 &myarr1 &myarr2 &myarr3   
LOCAL &data &i

&data="zero|one|two|three"

// Assign values to &myarra0 to &myarra3 in a loop
&i=0.
WHILE &i<4.
(
    PRIVATE &cmd
    &cmd="&"+"myarr"+FORMAT.Decimal(1,&i)+"=STRing.SPLIT(""&"+"data"",""|"",&i)"
    &&cmd   // << evaluate with recursive macro expansion
    &i=&i+1.
)

// Print values saved in &myarra0 to &myarra3 in a loop
&i=0.
WHILE &i<4.
(
    PRIVATE &val
    &val="&"+"myarr"+FORMAT.Decimal(1,&i)
    &&val="&val"   // << assign with recursive macro expansion
    ECHO "&val"
    &i=&i+1.
)

如果您不想拥有太多 GLOBAL 宏,您也可以像这样在循环中创建伪数组:

LOCAL &i
&i=0
WHILE &i<4.
(
    PRIVATE &cmd
    &cmd="GLOBAL "+"&"+"myarr"+FORMAT.Decimal(1,&i)
    &cmd
    &i=&i+1
)

我不会这样做,因为我不喜欢 GLOBAL 宏。


解决方法:使用 Var.NEWLOCAL 创建一个数组

例如:

Var.NEWLOCAL char[4][32] \myarr
LOCAL &i &data

&data="zero|one|two|three"

// Assign values to \myarr in a loop
&i=0.
WHILE &i<4
(
    PRIVATE &val
    &val=STRing.SPLIT("&data","|",&i)
    Var.Assign \myarr[&i]="&val"
    &i=&i+1.
)

// Print values saved in \myarr in a loop
&i=0.
WHILE &i<4
(
    ECHO Var.STRing(\myarr[&i])
    &i=&i+1.
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-12
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多