【CAPL】自定义函数的四种类型

定义函数中涉及到的重要概念

定义函数

  • 函数声明
  • 函数声明中:返回值类型 函数名(参数列表){}
  • 函数体:coding; return 返回值;

调用函数

  • 形参:函数声明的函数列表中的变量
  • 实参:调用函数时,实际传入的变量

提前小结

  • CAPL的自定义函数与其他语言的自定义函数类似

  • 场景较为特殊,需要考虑车载开发、总线信号传递等

  • 具体参考c语言的自定义函数

CAPL自定义函数与c语言的差异点

  • (1)返回值类型可省略

    • 当返回值类型省略时,被默认解释为void类型
  • (2)允许空形参

    • 正如C++一样,允许函数包含一个空的形参列表。
  • (3)允许重载函数

    • 即同一个函数名,但每个函数的形参列表必须不同
    • 例如,不同的形参类型或者在形参列表中的不同次序
    • 例如: CANoe函数库所带函数toUpper,其功能是将字符或字符串转换为大写字母。函数原型如下。
      图片
  • (4)函数会对实参进行类型检查和隐式匹配

    • 如果类型不同则检查是否能够通过隐式类型转换,如不能,则无法通过编译
    • 例如:
      图片
  • (5)任意维度或大小的数组都可被作为函数参数传递

    • 例如,以下函数参数为数组,将在Write窗口输出一个矩阵。
      图片
  • (6)部分数据类型的声明需要加*

    • 大部分CAPL支持的数据类型都可以直接声明为函数参数,例如,整型、浮点型、枚举、结构、定时器以及它们的引用。
    • 但有一些类型不能被直接声明,而需要加上*号(注意该符号并不是C语言中指针的意思)​。
    • message类型比较特殊,如果该变量是用户自定义的,那么在函数参数声明时,messagemessage*均可以
      • 但如果该变量来自database,那么只有message *可用。下面的例子是以database中的信号为例。
        图片

无参数无返回值

格式要求

  • 用的比较少
  • 参数列表:空
  • 返回值类型:void
  • 示例:void functionName(){//xxxxx;}

代码示例

  • 定义无参无返回值函数test()
  • 并在on key 's'中调用
    on key 's'
    {
      $VehicleSpeed = 30;
      test();//调用此函数
    }
    
    void test()//定义无参无返回值函数
    {
      $VehicleSpeed = 100;
    }
    
    图片

有参数无返回值

格式要求

  • 参数列表:小括号填入对应的参数列表 参数类型 参数名
  • 返回值类型:void
  • 示例:void functionName(参数类型 参数名){//xxxxx;}

代码示例

  • 定义有参无返回值函数test(),在函数体中使用此参数
  • 并在on key 's'中调用
  • 注意:test(xx) -- 调用时,括号中记得填入参数
    on key 's'
    {
      $VehicleSpeed = 30;
      test(300);//调用test()函数,记得填入参数
    }
    
    void test(int speed)//定义有参无返回值函数
    {
      $VehicleSpeed = speed;
    }
    
    图片

有参数有返回值函数

格式要求

  • 重要!!!用得较多
  • 关键字 return
  • 参数列表:小括号填入对应的参数列表 参数类型 参数名
  • 返回值类型:对应的返回值类型
  • 示例:返回值类型 functionName(参数类型 参数名){//xxxxx; return xxx;}

代码示例

  • 定义有参有返回值函数test(),在函数体中使用此参数,并return返回值
  • 并在on key 's'中调用
  • 注意:test(xx) -- 调用时,括号中记得填入参数
    on key 's'
    { 
      int arr[2] = {100,150};//[]中不定义元素个数会报错..
      $VehicleSpeed = 30;
      $VehicleSpeed = test(arr);
    }
    
    int test(int arr[])//定义有参数有返回值的函数,注意返回值类型
    {
      return arr[0] + arr[1];//用return返回 返回值
    }
    
    图片

有参数无返回的函数:操作定义好的变量

以结构体变量为例

  • 无返回值:指的是不再额外申请空间,操作的是已有变量

定义结构体

  • 结构体定义和初始化
    variables
    {
      //xxxx 其他代码
      struct test{//定义结构体
        int x;
        int y;
      };
      struct test MyTest;//创建结构体变量MyTest
    }
     
    on start
    {
      //xxxx 其他代码
      MyTest.x = 0;//结构体内部变量初始化
      MyTest.y = 0;
      //.....
    }
    

操作结构体

  • 调用操作结构体的函数test(),并将结构体中的某个变量赋值给车速
    on key 's'
    { 
      $VehicleSpeed = 30;
      test(100,150);//调用操作结构体的函数test()
      $VehicleSpeed = MyTest.x;//将结构体中的某个变量赋值给车速
    }
    
    void test(int a,int b)//定义操作结构体的函数
    {
      MyTest.x = a+b;
      MyTest.y = a*b;
    }
    

效果图

  • 图片

参考链接

END

posted @ 2025-08-12 14:03  anliux  阅读(160)  评论(0)    收藏  举报