trace32 - 如何在 Lauterbach CMM 脚本中使用宏声明数组
问题描述
我想用 Lauterbach CMM 脚本中的宏创建一个数组。
我尝试了以下方法:
LOCAL &ARRAY_VAR[10]
此语法不起作用。
我知道如何用 Var.NEWLOCAL 创建数组:
Var.NEWLOCAL int[3] \ARRAY_VAR
有没有办法用数组创建宏?
解决方案
简短回答: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.
)
推荐阅读
- android - React native - 在 android 模块中发现重复的类
- python - 使用 gedit 打开 downloadPath 的文本文件时出现问题
- python - 具有 .nonzero() 结果的索引数组
- wordpress - 禁用 billing_state 字段签出页面 WooCommerce
- google-sheets - 根据 Google 表格中的给定 OHLC 数据计算不同的时间范围(查询字符串?)
- c# - 为什么不能从 url.action 获取第二个参数值
- powershell - 带有 nrpe 的 powershell 参数
- powershell - 通过 Azure Active Directory 应用程序连接证书时如何启用“New-GlobalAddressList”命令?
- c - C99 嵌套数组未定义行为
- google-sheets - Importing landing page traffic data from Google Analytics to Google Sheets