首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过引用传递的输入变量的语义是什么?

通过引用传递的输入变量的语义是什么?
EN

Stack Overflow用户
提问于 2019-10-02 02:48:57
回答 1查看 507关注 0票数 1

Beckhoff的TwinCat-3,以及它所基于的CODESYS3,添加了引用作为IEC-61131-3语言的扩展。我想知道这个非标准添加的确切语法和语义是什么(这就是它们的问题所在:没有人会像标准一样费心地记录它们)。

当从下面的F_Test测试函数调用时,下面的F_IsNonEmpty函数是否有效并执行预期的操作?

代码语言:javascript
复制
FUNCTION F_IsNonEmpty : BOOL
  VAR_INPUT
    text : REFERENCE TO STRING;
  END_VAR
  F_IsNonEmpty := LEN(text) > 0;
END_FUNCTION

FUNCTION F_Test1
  VAR
    testMessage : STRING := '123';
  END_VAR
  IF F_IsNonEmpty(text := testMessage) THEN
    {...}
  END_IF
END_FUNCTION

假设引用的目标必须使用REF=运算符(v.s.例如C++,其中引用目标是不可变的)进行初始化,我本以为下面的调用代码应该是正确的-但它甚至不能编译:

代码语言:javascript
复制
FUNCTION F_Test2
  VAR
    testMessage : STRING := '123';
  END_VAR
  IF F_IsNonEmpty(text REF= testMessage) THEN
    {...}
  END_IF
END_FUNCTION

看起来F_Test1工作正常,但我希望实际使用CODESYS3或TwinCat-3 REFERENCE TO功能的人来确认一下。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-02 06:51:09

在VAR_INPUT中使用引用时,就像在使用VAR_IN_OUT变量一样。否则,如果您在VAR部分中声明引用,则在将另一个变量赋值给它时需要使用REF= (否则会出现异常)。

本质上,引用(类似于VAR_IN_OUT变量)是一种更方便、更“安全”的指针,因为不需要解引用操作符^,而且在编译时会检查类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58190645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档