CAPL中的自定义函数

CAPL是一门类C语言,其自定义函数与C基本相似,但是CAPL也有自身的一些特性,暂时把这些叫做CAPL的拓展特性。

1:自定义函数,声明和定义时。可以不加放回值类型说明,此类函数默认放回值void

**示例1)int fun_1(int a);

**示例2)fun_2(int a);

这两种都是CAPL中合法的自定义函数。不过示例2中,默认返回类型为void。

2:允许用户自定义重载函数

重载函数概念:即在同一作用域中中,同时定义多个函数名相同的自定义函数。有c基础的,应该都知道,同一个工程中除非使用static限定函数,不然同名函数在编译时会出现错误。

重载函数的定义和声明格式要求

函数名相同,但是形参个数,参数类型,参数排列顺序,存在差异。

int Mulfun(int a,int b)
{
return a*b;
}

int Mulfun(int a,int b,int c)
{
return a*b*c;
}
float Mulfun(float a,float b, float c)
{
return a*b*c;
}

有两点需要特别注意:两点

1):参数排列顺序容易产生的误解 ,我查找了很多资料,很多都说参数排列顺序不同,也能构成重载函数。很容易让人产生误解,如下面的例子,直接将 形参a与b,互换位置。此处是不构成重载函数,编译时会报错。

int Mulfun(int a,int b)
{
return a*b;
}
int Mulfun(int b,int a)
{
return a*b;
}

2):重载函数定义时,必须保持放回值类型一致性(注意:此规定是CAPL中强制规定的,而在其他支持函数重载,如C++中,就不存在这种限制)。

同时大家思考一下,CAPL中这种设定,会不会对上述代码产生影响,当然会产生影响!这就导致了返回实际值的类型,和定义的放回值类型不一致。编译器会以函数定义的放回值为准。这样就会让计算结果失真。

3):自定义函数被调用时,实参要与形参保持类型一致

自定义函数被调用时,实参要与形参保持类型一致,如果类型不一致,则编译器会进行隐式转换,即将实参转换为形参数据类型

4):CAPL中还允许重载函数的形参为空 ,如

int Mulfun() 注意这里()里面添加void,也是可以的*/
{
return 15;
}

3:CAPL中特殊的形参类型

注意此章节,也比较难懂

capl中的复杂类型,或我称为构造类型(引用了C、C++中的概念),如定时器类型,message类型都是能直接声明为函数的形参。虽然复杂,但是这些数据类型都是占用整数倍数的Byte的内存空间。

以“数据类型是不是整数倍Byte字节的内存”这个标准来看。CAPL中有一类特殊数据类型,即非整数Byte类型的数据类型

有以下表中的几种

CAPL中比较特殊的几种函数参数
格式说明错误用法
FUN(signal * s)
或者 int FUN(signal *s)
这个“s”必须是DBC
中定义的信号名
调用参数时,但是我们知道不同的signal是具有不同的长度的。是否说明调用时,必须使用同样的信号名
FUN(sysvarFloat * ev)
或者 int FUN(sysvarFloat *ev)
sysvar:表明此函数参数是系统变量
Float:说明了系统变量的类型是浮点型
 * ev:是说明了系统变量的名称(难道不需要,在前面写命名空间了吗?)
调用此函数时,
FUN(diagRequest * dr)
或者 int FUN(diagRequest * dr)
FUN(diagResponse * dr)
或者 int FUN(diagResponse * dr)
比较特殊的一种类型message作为函数形参,如果传入该形参的是实参,是用户自己定义的
则形参不需要使用“*”修饰,但是如果传入的实参时DBC定义的则需要在形参中使用“*”来修饰。

4:函数参数中的一种类似于指针的形参

fun(int m[][]);

fun(int m1[]);

格式注意:方括号内不能填入具体数字,也就是不能填入具体常量。

就是对应传入的实参,可以是一维整形数组(对应形参fun(int m1[]);),二维整形数组(对应形参fun(int m[][]);)。都是可以的。长度不受限制。

因为CAPL中没有指针的定义。此种模式与C或C++中定义 int m[](c中把这种定义等价于指针)一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值