为什么你需要这样一个函数,只是为了检测可变大小,而这个函数已经存在?
您所要做的就是SIZEOF()
直接在程序内部调用。您不需要使用指针。据我了解,您使用它们是因为您想让输入变量具有任何类型的通用性,而不是因为您在程序中使用指针。所以原始变量都是直接分配的。
SIZEOF()
您的函数试图在不更改计算算法中的任何内容的情况下创建环绕,然后只需使用SIZEOF()
,因为这就是该函数的用途。
告诉我你为什么尝试创建单独的函数,我会相应地改变答案。
我假设您需要检查变量是否是您需要的大小。然后你可以做一个函数。
FUNCTION IsSize : BOOL
VAR_INPUT
VarSize: INT;
CompareTo: INT;
END_VAR
IsSize := (VarSize = CompareTo);
END_FUNCTION
然后你可以这样称呼它
VAR
MyVar: REAL;
END_VAR
IF IsSize(SIZEOF(MyVAR), 4) THEN
// DO something
END_IF
编辑:使用数组
如果您要创建一个与数组一起使用的函数,并且您希望能够传递不定数量的元素数组,那么您可以这样做。
FUNCTION ArrSize : BOOL
VAR_INPUT
MyArr: POINTER TO ARRAY[0..1000] OF BOOL;
ArrNum: INT; (* Number of array elements *)
ArrStart: INT; (* First index of an array *)
END_VAR
VAR
iCount : INT := 0;
END_VAR
FOR iCount := ArrStart TO ArrNum DO
MyArr^[iCount] := TRUE;
END_FOR
END_FUNCTION
然后在代码中你可以
VAR
aTest: ARRAY[0..20] OF BOOL;
END_VAR
ArrSize(ADR(aTest), SIZEOF(aTest), 0);