Vector CANoe(8.0)软件CAPL工具之局部变量

标准C对局部变量的定义:函数中的每个局部变量只在函数被调用时存在,在函数执行完毕退出时消失。所以在函数存在多次调用时,局部变量是不会保持前次调用时的赋值。

标准C对用static声明的局部变量(静态变量)的定义:static类型的局部变量同上述一样,只能在该函数中使用,但不同的是,不管其所在函数是否被调用,它一直存在,不会随所在函数的被调用和退出而存在和消失,也即一直占着存储空间。

然而,笔者在使用CANoe软件的CAPL工具编写测试案例时发现,当一个函数存在多次调用时,其内部的局部变量却有着标准C静态变量的特性。声明如下四个函数TestFunc_1~4()进行说明:

void TestFunc_1(void)
{
    byte a = 1, b = 2;
    
    write("a == %d ; b == %d", a, b);
}

void TestFunc_2(void)
{
    byte c = 3, d = 4;
    c = 3;
    d = 4;
    
    write("c == %d ; d == %d", c, d);
}

void TestFunc_3(void)
{
    byte a = 1, b = 2;
    
    a = a+a;    // 2
    b = b+b;    // 4
    write("a == %d ; b == %d", a, b);
}

void TestFunc_4(void)
{
    byte c = 3, d = 4;
    c = 3;
    d = 4;
    
    c = c+c;    // 6
    d = d+d;    // 8
    write("c == %d ; d == %d", c, d);
}

可见函数TestFunc_1()和TestFunc_3()仅在定义时对局部变量进行了显式的初始化,而函数TestFunc_2()和TestFunc_4()除了在定义时对局部变量进行了显式的初始化,还额外用指令进行了显式的初始化函数TestFunc_1()和TestFunc_2()中除了定义变量和赋初值,未对变量进行其它赋值操作,而函数TestFunc_3()和TestFunc_4()中除了定义变量和赋初值,还对变量进行了加减后的赋值操作。

在主函数中对四个子函数均调用两次,以下右图即为打印结果。

     

显然,在第二次调用函数TestFunc_3()时,其局部变量a、b的初值并不是1、2,而是上一次调用退出时的值2、4,可见具有标准C静态变量的特性。

所以在编写程序时,建议定义局部变量之后,再单独进行显示的初始化。

 

-------------------------------------------------------------------------END--------------------------------------------------------------------------------

 

CAPL使用的语言类C,其数据类型如下(可在CAPL中按键盘F1索引Data types):

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值