【CAPL】局部变量:静态地创建,启动时初始化,再次进入保留原值
CAPL中局部变量的特别之处
与C语言不同,局部变量在CAPL中总是被静态地创建。
这意味着初始化只在程序体启动时执行,
当再次进入程序时,局部变量被假定是上一次跳出程序时的值。
局部变量的作用域
- 仅限于当前函数体范围内,即该函数的大括号范围内
应用:解释一些奇怪代码
代码中用if就实现了循环,为什么会?
-
CAPL中的局部变量:静态地被创建,并且可以再次进入程序时保留上一次的值
- 因此这里的int i虽然是局部变量,但是有种全局变量的属性,可以用if扭曲地实现循环
-
代码示例
- 代码示例:
on message MSG_LS { int i = 0; if(@sysvar::MyNameSpace::trigger == 1){ write("active!!"); i++; if(i<3){ write("count less than 3:%d, timenow = %d",i,timeNow()); //@sysvar::MyNameSpace::trigger = 1; $`switch=234; }else{ write("count done: %d, timenow = %d",i,timeNow()); @sysvar::MyNameSpace::trigger = 0; } }else if(@sysvar::MyNameSpace::trigger == 0){ write("inactive...timenow = %d",timeNow()); $`switch = 0; i = 0; } }
-
运行结果:i 的更新均为200ms间隔,没有提前跳出
参考
-
原博文:【CAPL】发送固定数的帧后恢复原状态
-
《CANoe开发从入门到精通》10.3.1 变量的声明与定义中第2小节